From 88f6bbb58c228b843dc30aa00bd05d3e775f3558 Mon Sep 17 00:00:00 2001 From: Kirill Turanskiy Date: Fri, 10 Jul 2026 05:47:59 +0300 Subject: [PATCH 001/111] test(reaper): serialize environment override --- internal/worker/reaper/reaper_test.go | 2 -- 1 file changed, 2 deletions(-) diff --git a/internal/worker/reaper/reaper_test.go b/internal/worker/reaper/reaper_test.go index 62d73a55..7c6f6721 100644 --- a/internal/worker/reaper/reaper_test.go +++ b/internal/worker/reaper/reaper_test.go @@ -108,8 +108,6 @@ func TestReaper_PreservesUnexpired(t *testing.T) { } func TestReaper_RespectsRetentionEnvVar(t *testing.T) { - t.Parallel() - db, cleanup := testReaperDB(t) defer cleanup() From 595218d29fbabd5e9d6452eba9248dbd349f8ac0 Mon Sep 17 00:00:00 2001 From: Kirill Turanskiy Date: Fri, 10 Jul 2026 05:50:24 +0300 Subject: [PATCH 002/111] fix(bulkops): make snapshots and rollback conflict-safe --- internal/bulkops/conflict_test.go | 33 +--- internal/bulkops/facade.go | 57 ++++++- internal/bulkops/facade_test.go | 46 ++++-- internal/bulkops/rollback.go | 79 +++++++++- internal/bulkops/rollback_test.go | 240 ++++++++++++++++++++++++++---- 5 files changed, 379 insertions(+), 76 deletions(-) diff --git a/internal/bulkops/conflict_test.go b/internal/bulkops/conflict_test.go index 9de8fb3c..329c0ae1 100644 --- a/internal/bulkops/conflict_test.go +++ b/internal/bulkops/conflict_test.go @@ -12,10 +12,7 @@ package bulkops import ( "context" - "encoding/json" "errors" - "fmt" - "os" "testing" "time" @@ -24,9 +21,7 @@ import ( "github.com/thebtf/engram/internal/auth" gormdb "github.com/thebtf/engram/internal/db/gorm" "github.com/thebtf/engram/pkg/models" - "gorm.io/driver/postgres" "gorm.io/gorm" - "gorm.io/gorm/logger" ) // --- Unit: detectConflicts via rollback admin gate (no DB) --- @@ -76,19 +71,7 @@ func TestEC_F3_ErrRollbackConflict_IsDistinct(t *testing.T) { func openConflictTestDB(t *testing.T) (*gorm.DB, *gormdb.Store) { t.Helper() - dsn := os.Getenv("DATABASE_DSN") - if dsn == "" { - t.Skip("DATABASE_DSN not set — skipping EC-F3 integration test") - } - db, err := gorm.Open(postgres.Open(dsn), &gorm.Config{ - Logger: logger.Default.LogMode(logger.Warn), - }) - require.NoError(t, err) - sqlDB, err := db.DB() - require.NoError(t, err) - t.Cleanup(func() { _ = sqlDB.Close() }) - require.NoError(t, sqlDB.Ping()) - return db, &gormdb.Store{DB: db} + return openTestDB(t) } // TestEC_F3_ConflictDetected_Integration is the primary EC-F3 acceptance test. @@ -127,17 +110,13 @@ func TestEC_F3_ConflictDetected_Integration(t *testing.T) { // Step 2: Capture before_state with snapshot created_at = 2 seconds ago. snapshotTime := time.Now().UTC().Add(-2 * time.Second) - beforeStateMap := map[string]any{ - fmt.Sprintf("%d", created.ID): created, - } - beforeStateBytes, err := json.Marshal(beforeStateMap) - require.NoError(t, err) + beforeStateBytes := memoryBeforeStateJSON(t, db, created.ID) snap, err := models.NewBulkOpSnapshot( "ec-f3-test-001", models.SnapshotOpBulkDelete, "master", - json.RawMessage(beforeStateBytes), + beforeStateBytes, ) require.NoError(t, err) snap.AffectedMemoryIDs = []int64{created.ID} @@ -147,8 +126,8 @@ func TestEC_F3_ConflictDetected_Integration(t *testing.T) { // Step 3: Simulate post-snapshot modification. require.NoError(t, db.Exec( - `UPDATE memories SET updated_at = NOW(), content = 'post-snapshot edit' WHERE id = ?`, - created.ID, + `UPDATE memories SET updated_at = ?, content = 'post-snapshot edit' WHERE id = ?`, + createdSnap.CreatedAt.Add(time.Second), created.ID, ).Error) // Step 4: Rollback → must return ErrRollbackConflict. @@ -195,7 +174,7 @@ func TestEC_F3_ConflictDetected_Integration(t *testing.T) { "ec-f3-test-002", models.SnapshotOpBulkDelete, "master", - json.RawMessage(beforeStateBytes), + beforeStateBytes, ) require.NoError(t, err) snap2.AffectedMemoryIDs = []int64{created.ID} diff --git a/internal/bulkops/facade.go b/internal/bulkops/facade.go index 5aa07c49..a1a4e9ed 100644 --- a/internal/bulkops/facade.go +++ b/internal/bulkops/facade.go @@ -17,9 +17,10 @@ import ( "github.com/google/uuid" "github.com/rs/zerolog/log" - gormdb "github.com/thebtf/engram/internal/db/gorm" "github.com/thebtf/engram/internal/auth" + gormdb "github.com/thebtf/engram/internal/db/gorm" "github.com/thebtf/engram/pkg/models" + gormpkg "gorm.io/gorm" ) // ErrAdminRequired is returned when a non-admin caller attempts a bulk operation. @@ -450,15 +451,25 @@ func (f *Facade) capturePromoteBeforeState(ctx context.Context, candidateIDs []i // captureMemoryBeforeState fetches memory rows and serializes them as JSONB. func (f *Facade) captureMemoryBeforeState(ctx context.Context, ids []int64) (string, json.RawMessage, error) { snapshotID := uuid.New().String() - state := make(map[string]any, len(ids)) + state := make(map[string]json.RawMessage, len(ids)) if f.memoryStore != nil { for _, id := range ids { - mem, err := f.memoryStore.Get(ctx, id) + var row gormdb.Memory + err := f.memoryStore.GetDB().WithContext(ctx). + Where("id = ? AND deleted_at IS NULL", id). + First(&row).Error if err != nil { - state[fmt.Sprintf("%d", id)] = nil - continue + if errors.Is(err, gormpkg.ErrRecordNotFound) { + state[fmt.Sprintf("%d", id)] = json.RawMessage("null") + continue + } + return "", nil, fmt.Errorf("load memory %d before_state: %w", id, err) } - state[fmt.Sprintf("%d", id)] = mem + before, marshalErr := marshalMemoryRowSnapshot(&row) + if marshalErr != nil { + return "", nil, fmt.Errorf("serialize memory %d before_state: %w", id, marshalErr) + } + state[fmt.Sprintf("%d", id)] = before } } bs, err := json.Marshal(state) @@ -468,6 +479,40 @@ func (f *Facade) captureMemoryBeforeState(ctx context.Context, ids []int64) (str return snapshotID, json.RawMessage(bs), nil } +// marshalMemoryRowSnapshot converts timestamp fields to UTC before JSON encoding. +// PostgreSQL timestamptz values are instants, but a driver may materialize the +// 9999-12-31 sentinel in a positive local offset as local year 10000. The same +// instant is JSON-safe in UTC, and rollback must preserve that instant exactly. +func marshalMemoryRowSnapshot(row *gormdb.Memory) (json.RawMessage, error) { + if row == nil { + return json.RawMessage("null"), nil + } + + snapshot := *row + snapshot.CreatedAt = snapshot.CreatedAt.UTC() + snapshot.UpdatedAt = snapshot.UpdatedAt.UTC() + snapshot.DeletedAt = utcTimePtr(snapshot.DeletedAt) + snapshot.LastRetrievedAt = utcTimePtr(snapshot.LastRetrievedAt) + snapshot.LastConfirmed = utcTimePtr(snapshot.LastConfirmed) + snapshot.ReviewAfter = utcTimePtr(snapshot.ReviewAfter) + snapshot.ValidFrom = utcTimePtr(snapshot.ValidFrom) + snapshot.ValidUntil = utcTimePtr(snapshot.ValidUntil) + + encoded, err := json.Marshal(&snapshot) + if err != nil { + return nil, err + } + return json.RawMessage(encoded), nil +} + +func utcTimePtr(value *time.Time) *time.Time { + if value == nil { + return nil + } + normalized := value.UTC() + return &normalized +} + func candidateIDsToInt64(ids []int64) []int64 { return ids } diff --git a/internal/bulkops/facade_test.go b/internal/bulkops/facade_test.go index d73b7de4..e423a4d3 100644 --- a/internal/bulkops/facade_test.go +++ b/internal/bulkops/facade_test.go @@ -15,16 +15,42 @@ import ( "encoding/json" "os" "testing" + "time" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - gormdb "github.com/thebtf/engram/internal/db/gorm" "github.com/thebtf/engram/internal/auth" + gormdb "github.com/thebtf/engram/internal/db/gorm" "github.com/thebtf/engram/pkg/models" "gorm.io/gorm" "gorm.io/gorm/logger" ) +func TestMarshalMemoryRowSnapshot_NormalizesDatabaseSentinelToUTC(t *testing.T) { + local := time.FixedZone("UTC+3", 3*60*60) + validUntil := time.Date(10000, time.January, 1, 2, 59, 59, 0, local) + require.Equal(t, 9999, validUntil.UTC().Year(), "fixture must represent a JSON-safe UTC instant") + + mem := &gormdb.Memory{ + ID: 42, + Project: "snapshot-time-normalization", + Content: "preserve temporal semantics", + CreatedAt: time.Date(2026, time.July, 10, 2, 0, 0, 0, local), + UpdatedAt: time.Date(2026, time.July, 10, 2, 1, 0, 0, local), + ValidUntil: &validUntil, + } + + raw, err := marshalMemoryRowSnapshot(mem) + require.NoError(t, err) + + var restored models.Memory + require.NoError(t, json.Unmarshal(raw, &restored)) + require.NotNil(t, restored.ValidUntil) + assert.Equal(t, validUntil.UTC(), restored.ValidUntil.UTC()) + assert.Equal(t, mem.CreatedAt.UTC(), restored.CreatedAt) + assert.Equal(t, mem.UpdatedAt.UTC(), restored.UpdatedAt) +} + // --- helpers --- func adminIdentity() auth.Identity { @@ -72,8 +98,8 @@ func TestFacade_NonAdmin_ReturnsErrAdminRequired(t *testing.T) { for _, opType := range opTypes { t.Run(nc.name+"/"+string(opType), func(t *testing.T) { _, err := f.Execute(ctx, nc.identity, BulkOp{ - Type: opType, - DryRun: false, + Type: opType, + DryRun: false, MemoryIDs: []int64{1}, }) require.ErrorIs(t, err, ErrAdminRequired, @@ -95,10 +121,10 @@ func TestFacade_DryRun_AllOpTypes(t *testing.T) { admin := adminIdentity() cases := []struct { - opType BulkOpType + opType BulkOpType candidateIDs []int64 - memoryIDs []int64 - wantAffect int + memoryIDs []int64 + wantAffect int }{ {models.SnapshotOpBulkPromote, []int64{10, 20, 30}, nil, 3}, {models.SnapshotOpBulkDelete, nil, []int64{11, 22}, 2}, @@ -175,10 +201,10 @@ func TestFacade_BulkDelete_Committed_AuditLogWritten(t *testing.T) { }) op := BulkOp{ - Type: models.SnapshotOpBulkDelete, - MemoryIDs: []int64{created.ID}, - DryRun: false, - Parameters: json.RawMessage(`{"test":"bulk_delete_committed"}`), + Type: models.SnapshotOpBulkDelete, + MemoryIDs: []int64{created.ID}, + DryRun: false, + Parameters: json.RawMessage(`{"test":"bulk_delete_committed"}`), } // Capture audit count BEFORE Execute to avoid false pass from historical records (§FR-F5). diff --git a/internal/bulkops/rollback.go b/internal/bulkops/rollback.go index a42d943f..67c0af24 100644 --- a/internal/bulkops/rollback.go +++ b/internal/bulkops/rollback.go @@ -14,6 +14,8 @@ import ( "encoding/json" "errors" "fmt" + "math" + "reflect" "strconv" "time" @@ -105,7 +107,7 @@ func Rollback( } idsToCheck = append(idsToCheck, id) } - conflictIDs, err := detectConflicts(ctx, memoryStore, idsToCheck, snap.CreatedAt) + conflictIDs, err := detectConflicts(ctx, memoryStore, idsToCheck, snap.CreatedAt, snap.OpType, typedEntries) if err != nil { return nil, fmt.Errorf("rollback: conflict detection: %w", err) } @@ -257,20 +259,40 @@ func snapshotEntryForMemoryID(entries map[string]models.SnapshotEntry, id int64) // detectConflicts returns the IDs of memories modified after snapshotTime. // A memory's updated_at > snapshotTime indicates a post-snapshot modification (EC-F3). -func detectConflicts(ctx context.Context, memoryStore *gormdb.MemoryStore, ids []int64, snapshotTime time.Time) ([]int64, error) { +func detectConflicts( + ctx context.Context, + memoryStore *gormdb.MemoryStore, + ids []int64, + snapshotTime time.Time, + opType models.SnapshotOpType, + entries map[string]models.SnapshotEntry, +) ([]int64, error) { if memoryStore == nil || len(ids) == 0 { return nil, nil } var conflicts []int64 for _, id := range ids { - mem, err := memoryStore.Get(ctx, id) + var mem gormdb.Memory + err := memoryStore.GetDB().WithContext(ctx). + Unscoped(). + Where("id = ?", id). + First(&mem).Error if err != nil { if errors.Is(err, gormpkg.ErrRecordNotFound) { - // Deleted memories don't conflict — skip. + // A hard-deleted row has nothing left to restore or overwrite. continue } return nil, fmt.Errorf("detectConflicts: get memory %d: %w", id, err) } + if entry, ok := snapshotEntryForMemoryID(entries, id); ok { + expected, matchErr := matchesExpectedOperationMutation(opType, entry, &mem) + if matchErr != nil { + return nil, fmt.Errorf("detectConflicts: memory %d: %w", id, matchErr) + } + if expected { + continue + } + } if mem.UpdatedAt.After(snapshotTime) { conflicts = append(conflicts, id) } @@ -278,6 +300,55 @@ func detectConflicts(ctx context.Context, memoryStore *gormdb.MemoryStore, ids [ return conflicts, nil } +// matchesExpectedOperationMutation separates the bulk operation's own write +// from a later conflicting edit. A plain updated_at > snapshot comparison +// misclassifies every successful delete/supersede as a conflict because those +// operations intentionally update updated_at after capturing before_state. +func matchesExpectedOperationMutation(opType models.SnapshotOpType, entry models.SnapshotEntry, currentRow *gormdb.Memory) (bool, error) { + if currentRow == nil || len(entry.Before) == 0 || string(entry.Before) == "null" { + return false, nil + } + + var before models.Memory + if err := json.Unmarshal(entry.Before, &before); err != nil { + return false, fmt.Errorf("unmarshal memory before_state: %w", err) + } + currentJSON, err := marshalMemoryRowSnapshot(currentRow) + if err != nil { + return false, fmt.Errorf("marshal current memory state: %w", err) + } + var current models.Memory + if err := json.Unmarshal(currentJSON, ¤t); err != nil { + return false, fmt.Errorf("unmarshal current memory state: %w", err) + } + + expected := before + switch opType { + case models.SnapshotOpBulkDelete: + if current.DeletedAt == nil || !current.UpdatedAt.Equal(*current.DeletedAt) { + return false, nil + } + expected.DeletedAt = current.DeletedAt + expected.UpdatedAt = current.UpdatedAt + + case models.SnapshotOpBulkSupersede: + if current.DeletedAt != nil || current.Status != "superseded" { + return false, nil + } + if math.Abs(current.ImportanceBase-before.ImportanceBase*0.1) > 0.000001 { + return false, nil + } + expected.Status = current.Status + expected.ImportanceBase = current.ImportanceBase + expected.UpdatedAt = current.UpdatedAt + + default: + return false, nil + } + + return reflect.DeepEqual(expected, current), nil +} + // detectCreatedRowConflicts returns op-created memory IDs that were modified after creation. // EntryKindDelete rollback hard-deletes rows that did not exist before the operation, so // snapshot.created_at is not a valid conflict boundary for them. Instead, the safe-delete diff --git a/internal/bulkops/rollback_test.go b/internal/bulkops/rollback_test.go index e4a05558..4e4df9ae 100644 --- a/internal/bulkops/rollback_test.go +++ b/internal/bulkops/rollback_test.go @@ -15,7 +15,7 @@ import ( "context" "encoding/json" "fmt" - "os" + "sync" "testing" "time" @@ -23,11 +23,22 @@ import ( "github.com/stretchr/testify/require" gormdb "github.com/thebtf/engram/internal/db/gorm" "github.com/thebtf/engram/pkg/models" - "gorm.io/driver/postgres" "gorm.io/gorm" - "gorm.io/gorm/logger" ) +func memoryBeforeStateJSON(t *testing.T, db *gorm.DB, memoryID int64) json.RawMessage { + t.Helper() + var row gormdb.Memory + require.NoError(t, db.Where("id = ?", memoryID).First(&row).Error) + before, err := marshalMemoryRowSnapshot(&row) + require.NoError(t, err) + encoded, err := json.Marshal(map[string]json.RawMessage{ + fmt.Sprintf("%d", memoryID): before, + }) + require.NoError(t, err) + return json.RawMessage(encoded) +} + // --- Unit: decodeBeforeState --- func TestDecodeBeforeState_Empty(t *testing.T) { @@ -67,19 +78,7 @@ func TestRollback_NonAdmin_ReturnsErrAdminRequired(t *testing.T) { func openRollbackTestDB(t *testing.T) (*gorm.DB, *gormdb.Store) { t.Helper() - dsn := os.Getenv("DATABASE_DSN") - if dsn == "" { - t.Skip("DATABASE_DSN not set, skipping integration test") - } - db, err := gorm.Open(postgres.Open(dsn), &gorm.Config{ - Logger: logger.Default.LogMode(logger.Warn), - }) - require.NoError(t, err) - sqlDB, err := db.DB() - require.NoError(t, err) - t.Cleanup(func() { _ = sqlDB.Close() }) - require.NoError(t, sqlDB.Ping()) - return db, &gormdb.Store{DB: db} + return openTestDB(t) } // TestRollback_HappyPath verifies that a committed snapshot can be rolled back: @@ -109,14 +108,10 @@ func TestRollback_HappyPath(t *testing.T) { }) // Capture before_state manually (simulating what facade.Execute would do). - beforeStateMap := map[string]any{ - fmt.Sprintf("%d", created.ID): created, - } - beforeStateBytes, err := json.Marshal(beforeStateMap) - require.NoError(t, err) + beforeStateBytes := memoryBeforeStateJSON(t, db, created.ID) // Create a snapshot with created_at slightly in the past. - snap, err := models.NewBulkOpSnapshot("rollback-test-001", models.SnapshotOpBulkDelete, "master", json.RawMessage(beforeStateBytes)) + snap, err := models.NewBulkOpSnapshot("rollback-test-001", models.SnapshotOpBulkDelete, "master", beforeStateBytes) require.NoError(t, err) snap.AffectedMemoryIDs = []int64{created.ID} // Force created_at to be in the past so the memory's updated_at is before it. @@ -173,13 +168,10 @@ func TestRollback_Conflict_EC_F3(t *testing.T) { }) // Build before_state capturing the original memory. - beforeStateMap := map[string]any{ - fmt.Sprintf("%d", created.ID): created, - } - beforeStateBytes, _ := json.Marshal(beforeStateMap) + beforeStateBytes := memoryBeforeStateJSON(t, db, created.ID) // Create a snapshot with created_at in the PAST (memory's updated_at will be after this). - snap, err := models.NewBulkOpSnapshot("rollback-conflict-001", models.SnapshotOpBulkDelete, "master", json.RawMessage(beforeStateBytes)) + snap, err := models.NewBulkOpSnapshot("rollback-conflict-001", models.SnapshotOpBulkDelete, "master", beforeStateBytes) require.NoError(t, err) snap.AffectedMemoryIDs = []int64{created.ID} snap.CreatedAt = time.Now().UTC().Add(-2 * time.Second) // snapshot is OLD @@ -188,8 +180,8 @@ func TestRollback_Conflict_EC_F3(t *testing.T) { // Simulate a post-snapshot modification: update the memory's updated_at to be after snapshot.created_at. require.NoError(t, db.Exec( - `UPDATE memories SET updated_at = NOW(), content = 'post-snapshot modification' WHERE id = ?`, - created.ID, + `UPDATE memories SET updated_at = ?, content = 'post-snapshot modification' WHERE id = ?`, + createdSnap.CreatedAt.Add(time.Second), created.ID, ).Error) // Rollback must fail with ErrRollbackConflict (EC-F3). @@ -218,6 +210,196 @@ func TestRollback_Conflict_EC_F3(t *testing.T) { assert.GreaterOrEqual(t, count, int64(1)) } +func TestRollback_Conflict_EC_F3_IncludesSoftDeletedRows(t *testing.T) { + db, store := openRollbackTestDB(t) + memStore := gormdb.NewMemoryStore(store) + snapStore := gormdb.NewSnapshotStore(db) + auditStore := gormdb.NewAuditStore(db) + ctx := context.Background() + + created, err := memStore.Create(ctx, &models.Memory{ + Content: "original soft-deleted content", + Project: "tg6-soft-delete-conflict", + SourceAgent: "claude-code", + }) + require.NoError(t, err) + t.Cleanup(func() { + _ = db.Exec("DELETE FROM memories WHERE id = ?", created.ID).Error + _ = db.Exec("DELETE FROM bulk_op_snapshots WHERE snapshot_id = 'rollback-soft-delete-conflict'").Error + }) + + snap, err := models.NewBulkOpSnapshot( + "rollback-soft-delete-conflict", + models.SnapshotOpBulkDelete, + "master", + memoryBeforeStateJSON(t, db, created.ID), + ) + require.NoError(t, err) + snap.AffectedMemoryIDs = []int64{created.ID} + createdSnap, err := snapStore.Create(ctx, snap) + require.NoError(t, err) + + require.NoError(t, memStore.Delete(ctx, created.ID)) + require.NoError(t, db.Exec( + `UPDATE memories SET updated_at = ? WHERE id = ?`, + createdSnap.CreatedAt.Add(time.Second), created.ID, + ).Error) + + result, rollbackErr := Rollback(ctx, adminIdentity(), createdSnap.SnapshotID, snapStore, memStore, auditStore, nil) + require.ErrorIs(t, rollbackErr, ErrRollbackConflict) + require.NotNil(t, result) + assert.Contains(t, result.ConflictIDs, created.ID) + + var persisted struct { + Content string + DeletedAt *time.Time + } + require.NoError(t, db.Table("memories").Select("content", "deleted_at").Where("id = ?", created.ID).Take(&persisted).Error) + assert.Equal(t, "original soft-deleted content", persisted.Content) + require.NotNil(t, persisted.DeletedAt, "conflict refusal must preserve the bulk-delete state") +} + +func TestRollback_BulkSupersedeOwnMutationDoesNotConflict(t *testing.T) { + db, store := openRollbackTestDB(t) + memStore := gormdb.NewMemoryStore(store) + snapStore := gormdb.NewSnapshotStore(db) + auditStore := gormdb.NewAuditStore(db) + ctx := context.Background() + + created, err := memStore.Create(ctx, &models.Memory{ + Content: "supersede then rollback", + Project: "tg6-supersede-rollback", + SourceAgent: "claude-code", + ImportanceBase: 0.8, + }) + require.NoError(t, err) + t.Cleanup(func() { + _ = db.Exec("DELETE FROM memories WHERE id = ?", created.ID).Error + _ = db.Exec("DELETE FROM bulk_op_snapshots WHERE op_type = 'bulk_supersede' AND actor = 'master'").Error + }) + + facade := NewFacade(snapStore, nil, memStore, auditStore) + executed, err := facade.Execute(ctx, adminIdentity(), BulkOp{ + Type: models.SnapshotOpBulkSupersede, + MemoryIDs: []int64{created.ID}, + }) + require.NoError(t, err) + require.Equal(t, 1, executed.AffectedCount) + + result, rollbackErr := Rollback(ctx, adminIdentity(), executed.SnapshotID, snapStore, memStore, auditStore, nil) + require.NoError(t, rollbackErr) + require.NotNil(t, result) + assert.Equal(t, 1, result.RestoredCount) + + restored, err := memStore.Get(ctx, created.ID) + require.NoError(t, err) + assert.Equal(t, "active", restored.Status) + assert.InDelta(t, 0.8, restored.ImportanceBase, 0.000001) +} + +func TestRollback_WrongTypeBeforeStateIsAtomic(t *testing.T) { + db, store := openRollbackTestDB(t) + memStore := gormdb.NewMemoryStore(store) + snapStore := gormdb.NewSnapshotStore(db) + ctx := context.Background() + + created, err := memStore.Create(ctx, &models.Memory{ + Content: "must survive malformed rollback", + Project: "tg6-wrong-type-rollback", + SourceAgent: "claude-code", + }) + require.NoError(t, err) + t.Cleanup(func() { + _ = db.Exec("DELETE FROM memories WHERE id = ?", created.ID).Error + _ = db.Exec("DELETE FROM bulk_op_snapshots WHERE snapshot_id = 'rollback-wrong-type'").Error + }) + + beforeState := json.RawMessage(fmt.Sprintf( + `{"%d":{"kind":"restore","before":"not-a-memory-object"}}`, + created.ID, + )) + snap, err := models.NewBulkOpSnapshot("rollback-wrong-type", models.SnapshotOpBulkDelete, "master", beforeState) + require.NoError(t, err) + snap.AffectedMemoryIDs = []int64{created.ID} + createdSnap, err := snapStore.Create(ctx, snap) + require.NoError(t, err) + + result, rollbackErr := Rollback(ctx, adminIdentity(), createdSnap.SnapshotID, snapStore, memStore, nil, nil) + require.Error(t, rollbackErr) + assert.Nil(t, result) + assert.Contains(t, rollbackErr.Error(), "unmarshal memory") + + after, err := memStore.Get(ctx, created.ID) + require.NoError(t, err) + assert.Equal(t, "must survive malformed rollback", after.Content) + storedSnap, err := snapStore.Get(ctx, createdSnap.SnapshotID) + require.NoError(t, err) + assert.Equal(t, models.SnapshotStatusCommitted, storedSnap.Status) +} + +func TestRollback_ConcurrentOnlyOneCommitWins(t *testing.T) { + db, store := openRollbackTestDB(t) + memStore := gormdb.NewMemoryStore(store) + snapStore := gormdb.NewSnapshotStore(db) + ctx := context.Background() + + created, err := memStore.Create(ctx, &models.Memory{ + Content: "concurrent rollback original", + Project: "tg6-concurrent-rollback", + SourceAgent: "claude-code", + }) + require.NoError(t, err) + t.Cleanup(func() { + _ = db.Exec("DELETE FROM memories WHERE id = ?", created.ID).Error + _ = db.Exec("DELETE FROM bulk_op_snapshots WHERE snapshot_id = 'rollback-concurrent'").Error + }) + + snap, err := models.NewBulkOpSnapshot( + "rollback-concurrent", + models.SnapshotOpBulkDelete, + "master", + memoryBeforeStateJSON(t, db, created.ID), + ) + require.NoError(t, err) + snap.AffectedMemoryIDs = []int64{created.ID} + createdSnap, err := snapStore.Create(ctx, snap) + require.NoError(t, err) + require.NoError(t, memStore.Delete(ctx, created.ID)) + + start := make(chan struct{}) + errs := make(chan error, 2) + var wg sync.WaitGroup + for range 2 { + wg.Add(1) + go func() { + defer wg.Done() + <-start + _, rollbackErr := Rollback(ctx, adminIdentity(), createdSnap.SnapshotID, snapStore, memStore, nil, nil) + errs <- rollbackErr + }() + } + close(start) + wg.Wait() + close(errs) + + var successes, failures int + var observed []error + for rollbackErr := range errs { + observed = append(observed, rollbackErr) + if rollbackErr == nil { + successes++ + } else { + failures++ + } + } + assert.Equal(t, 1, successes, "rollback results: %v", observed) + assert.Equal(t, 1, failures, "rollback results: %v", observed) + + storedSnap, err := snapStore.Get(ctx, createdSnap.SnapshotID) + require.NoError(t, err) + assert.Equal(t, models.SnapshotStatusRolledBack, storedSnap.Status) +} + func TestRollback_CandidateReviewPromoteDeletesMemoryAndRestoresPending(t *testing.T) { db, store := openRollbackTestDB(t) memStore := gormdb.NewMemoryStore(store) From b0955dfd61b4ea7364f6d400579247b475a1a680 Mon Sep 17 00:00:00 2001 From: Kirill Turanskiy Date: Fri, 10 Jul 2026 05:51:09 +0300 Subject: [PATCH 003/111] chore(security): upgrade Go toolchain and x modules --- Dockerfile | 2 +- go.mod | 14 +++++++------- go.sum | 24 ++++++++++++------------ 3 files changed, 20 insertions(+), 20 deletions(-) diff --git a/Dockerfile b/Dockerfile index bb8708b8..fa5790aa 100644 --- a/Dockerfile +++ b/Dockerfile @@ -24,7 +24,7 @@ FROM operator-console-build AS operator-console-static-build RUN npm run generate # --- Go build stage --- -FROM golang:1.25-bookworm AS builder +FROM golang:1.25.12-bookworm AS builder WORKDIR /src diff --git a/go.mod b/go.mod index 84086897..7d87b964 100644 --- a/go.mod +++ b/go.mod @@ -1,6 +1,6 @@ module github.com/thebtf/engram -go 1.25.11 +go 1.25.12 require ( github.com/fsnotify/fsnotify v1.9.0 @@ -21,7 +21,7 @@ require ( go.opentelemetry.io/otel v1.43.0 go.opentelemetry.io/otel/metric v1.43.0 go.uber.org/goleak v1.3.0 - golang.org/x/crypto v0.50.0 + golang.org/x/crypto v0.52.0 golang.org/x/sync v0.20.0 google.golang.org/grpc v1.79.3 google.golang.org/protobuf v1.36.11 @@ -59,11 +59,11 @@ require ( github.com/thejerf/suture/v4 v4.0.6 // indirect go.opentelemetry.io/auto/sdk v1.2.1 // indirect go.opentelemetry.io/otel/trace v1.43.0 // indirect - golang.org/x/mod v0.34.0 // indirect - golang.org/x/net v0.53.0 // indirect - golang.org/x/sys v0.43.0 // indirect - golang.org/x/text v0.36.0 // indirect - golang.org/x/tools v0.43.0 // indirect + golang.org/x/mod v0.35.0 // indirect + golang.org/x/net v0.55.0 // indirect + golang.org/x/sys v0.45.0 // indirect + golang.org/x/text v0.37.0 // indirect + golang.org/x/tools v0.44.0 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20251202230838-ff82c1b0f217 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect modernc.org/libc v1.70.0 // indirect diff --git a/go.sum b/go.sum index 2e6ccfc2..9f4899e5 100644 --- a/go.sum +++ b/go.sum @@ -130,15 +130,15 @@ go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.50.0 h1:zO47/JPrL6vsNkINmLoo/PH1gcxpls50DNogFvB5ZGI= -golang.org/x/crypto v0.50.0/go.mod h1:3muZ7vA7PBCE6xgPX7nkzzjiUq87kRItoJQM1Yo8S+Q= -golang.org/x/mod v0.34.0 h1:xIHgNUUnW6sYkcM5Jleh05DvLOtwc6RitGHbDk4akRI= -golang.org/x/mod v0.34.0/go.mod h1:ykgH52iCZe79kzLLMhyCUzhMci+nQj+0XkbXpNYtVjY= +golang.org/x/crypto v0.52.0 h1:RMs7fP2rXdep0CftQlK8Uf+kibLm7qkCcradZWYz988= +golang.org/x/crypto v0.52.0/go.mod h1:1QgfPxDqh0T2M/elOJtp9RvuR95kVjir0e6/BvEmGbc= +golang.org/x/mod v0.35.0 h1:Ww1D637e6Pg+Zb2KrWfHQUnH2dQRLBQyAtpr/haaJeM= +golang.org/x/mod v0.35.0/go.mod h1:+GwiRhIInF8wPm+4AoT6L0FA1QWAad3OMdTRx4tFYlU= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20201202161906-c7110b5ffcbb/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.53.0 h1:d+qAbo5L0orcWAr0a9JweQpjXF19LMXJE8Ey7hwOdUA= -golang.org/x/net v0.53.0/go.mod h1:JvMuJH7rrdiCfbeHoo3fCQU24Lf5JJwT9W3sJFulfgs= +golang.org/x/net v0.55.0 h1:bcvxaJn3e1U6InsFWt1JUq1aSjnRxLzT2rtD2KfkDF8= +golang.org/x/net v0.55.0/go.mod h1:L5U2KuzuOe1lY7Z+aWVIKK6qEeJXnXV9yzGA+WCHJww= golang.org/x/sync v0.20.0 h1:e0PTpb7pjO8GAtTs2dQ6jYa5BWYlMuX047Dco/pItO4= golang.org/x/sync v0.20.0/go.mod h1:9xrNwdLfx4jkKbNva9FpL6vEN7evnE43NNNJQ2LF3+0= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -149,17 +149,17 @@ golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.43.0 h1:Rlag2XtaFTxp19wS8MXlJwTvoh8ArU6ezoyFsMyCTNI= -golang.org/x/sys v0.43.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= +golang.org/x/sys v0.45.0 h1:dO4czNzziLiiXplLQgBCEpCvXQ3dnkn0SdaZSYdQ+FY= +golang.org/x/sys v0.45.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.36.0 h1:JfKh3XmcRPqZPKevfXVpI1wXPTqbkE5f7JA92a55Yxg= -golang.org/x/text v0.36.0/go.mod h1:NIdBknypM8iqVmPiuco0Dh6P5Jcdk8lJL0CUebqK164= +golang.org/x/text v0.37.0 h1:Cqjiwd9eSg8e0QAkyCaQTNHFIIzWtidPahFWR83rTrc= +golang.org/x/text v0.37.0/go.mod h1:a5sjxXGs9hsn/AJVwuElvCAo9v8QYLzvavO5z2PiM38= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.43.0 h1:12BdW9CeB3Z+J/I/wj34VMl8X+fEXBxVR90JeMX5E7s= -golang.org/x/tools v0.43.0/go.mod h1:uHkMso649BX2cZK6+RpuIPXS3ho2hZo4FVwfoy1vIk0= +golang.org/x/tools v0.44.0 h1:UP4ajHPIcuMjT1GqzDWRlalUEoY+uzoZKnhOjbIPD2c= +golang.org/x/tools v0.44.0/go.mod h1:KA0AfVErSdxRZIsOVipbv3rQhVXTnlU6UhKxHd1seDI= gonum.org/v1/gonum v0.16.0 h1:5+ul4Swaf3ESvrOnidPp4GZbzf0mxVQpDCYUQE7OJfk= gonum.org/v1/gonum v0.16.0/go.mod h1:fef3am4MQ93R2HHpKnLk4/Tbh/s0+wqD5nfa6Pnwy4E= google.golang.org/genproto/googleapis/rpc v0.0.0-20251202230838-ff82c1b0f217 h1:gRkg/vSppuSQoDjxyiGfN4Upv/h/DQmIR10ZU8dh4Ww= From 2ab6211494e51aeb7b787a99e78cff8bf2d5694a Mon Sep 17 00:00:00 2001 From: Kirill Turanskiy Date: Fri, 10 Jul 2026 06:00:46 +0300 Subject: [PATCH 004/111] test(crystallization): align session-end DB contract --- ..._hooks_crystallization_integration_test.go | 259 +++++++----------- 1 file changed, 103 insertions(+), 156 deletions(-) diff --git a/internal/worker/handlers_hooks_crystallization_integration_test.go b/internal/worker/handlers_hooks_crystallization_integration_test.go index 616bb84c..4c734d8f 100644 --- a/internal/worker/handlers_hooks_crystallization_integration_test.go +++ b/internal/worker/handlers_hooks_crystallization_integration_test.go @@ -1,14 +1,9 @@ package worker -// handlers_hooks_crystallization_integration_test.go — T013 integration tests. -// -// These tests require a real PostgreSQL database and exercise the full path: -// POST /api/hooks/session-end → goroutine → crystallization.ExtractDecisions -// → BuildMemories → MemoryStore.Create → DB rows with epistemic_type=decision. -// -// Run with: -// DATABASE_DSN="postgres://user:pass@host:5432/db?sslmode=disable" \ -// go test ./... -run TestCrystallizationIntegration -v +// These PostgreSQL integration tests cover the current session-end side of the +// crystallization pipeline. The removed per-session regex path must not be +// resurrected: session-end stores a redacted transcript, while the separate +// dream cycle performs extraction, candidate gating, and fingerprint handling. import ( "bytes" @@ -25,8 +20,9 @@ import ( gormdb "github.com/thebtf/engram/internal/db/gorm" ) -// openIntegrationStore opens a Store using DATABASE_DSN, running all migrations. -// Skips the test if DATABASE_DSN is not set. +// openIntegrationStore opens a Store using DATABASE_DSN, running all +// migrations. The release gate treats this skip as fatal; the package-level +// helper retains the established local no-DSN behavior. func openIntegrationStore(t *testing.T) *gormdb.Store { t.Helper() dsn := os.Getenv("DATABASE_DSN") @@ -35,224 +31,168 @@ func openIntegrationStore(t *testing.T) *gormdb.Store { } store, err := gormdb.NewStore(gormdb.Config{DSN: dsn}) require.NoError(t, err, "open test database with migrations") - t.Cleanup(func() { store.Close() }) + t.Cleanup(func() { _ = store.Close() }) return store } -// cleanCrystallizationRows deletes test memories created by crystallization for a -// given project and session tag so tests are idempotent. -func cleanCrystallizationRows(t *testing.T, store *gormdb.Store, project, sessionTag string) { +func cleanTranscriptRows(t *testing.T, store *gormdb.Store, sessionID, project string) { t.Helper() - res := store.DB.Exec( - "DELETE FROM memories WHERE source_agent = 'crystallization' AND project = ? AND tags::text LIKE ?", - project, "%"+sessionTag+"%", - ) - require.NoError(t, res.Error) + require.NoError(t, store.DB.Exec( + "DELETE FROM session_transcripts WHERE session_id = ? AND project = ?", + sessionID, + project, + ).Error) } -// buildIntegrationService wires a minimal Service with a real MemoryStore for -// integration testing. The crystallization flag must be set by the caller. func buildIntegrationService(t *testing.T, store *gormdb.Store) *Service { t.Helper() - memStore := gormdb.NewMemoryStore(store) - svc := &Service{} - svc.ctx = context.Background() + svc := &Service{ctx: context.Background()} svc.initMu.Lock() - svc.memoryStore = memStore + svc.transcriptStore = gormdb.NewTranscriptStore(store.DB) svc.initMu.Unlock() return svc } -// countCrystallizationMemories counts memories stored by crystallization for a -// given project+sessionTag combination. -func countCrystallizationMemories(t *testing.T, store *gormdb.Store, project, sessionTag string) int64 { +func readTranscriptRows(t *testing.T, store *gormdb.Store, sessionID, project string) []gormdb.SessionTranscript { t.Helper() - var count int64 - res := store.DB.Raw(` - SELECT COUNT(*) FROM memories - WHERE source_agent = 'crystallization' - AND project = ? - AND epistemic_type = 'decision' - AND tier = 'episodic' - AND tags::text LIKE ? - AND deleted_at IS NULL`, - project, "%"+sessionTag+"%", - ).Scan(&count) - require.NoError(t, res.Error) - return count + var rows []gormdb.SessionTranscript + require.NoError(t, store.DB. + Where("session_id = ? AND project = ?", sessionID, project). + Order("id ASC"). + Find(&rows).Error) + return rows } -// --------------------------------------------------------------------------- -// T013 integration tests — DSN-gated. -// --------------------------------------------------------------------------- +func postSessionEnd(t *testing.T, svc *Service, reqBody sessionEndRequest) int { + t.Helper() + body, err := json.Marshal(reqBody) + require.NoError(t, err) + req := httptest.NewRequest(http.MethodPost, "/api/hooks/session-end", bytes.NewReader(body)) + w := httptest.NewRecorder() + svc.handleSessionEnd(w, req) + return w.Code +} -// TestCrystallizationIntegration_DecisionsStoredWithCorrectFields is the primary -// end-to-end test: 3 decision patterns → 3 DB rows with correct metadata. The -// test service intentionally leaves citation stores nil, proving crystallization -// runs independently when memoryStore is available. -func TestCrystallizationIntegration_DecisionsStoredWithCorrectFields(t *testing.T) { +func TestCrystallizationIntegration_TranscriptStoredForDreamCycle(t *testing.T) { store := openIntegrationStore(t) t.Setenv("ENGRAM_CRYSTALLIZATION_ENABLED", "true") - const sessionID = "integ-cryst-sess-001" + const sessionID = "integ-cryst-transcript-001" const project = "integ-cryst-project" - sessionTag := "session:" + sessionID - t.Cleanup(func() { cleanCrystallizationRows(t, store, project, sessionTag) }) + const agentOutput = `decided to use PostgreSQL because it is battle-tested. +We chose Go over Python for performance reasons.` + cleanTranscriptRows(t, store, sessionID, project) + t.Cleanup(func() { cleanTranscriptRows(t, store, sessionID, project) }) svc := buildIntegrationService(t, store) - - agentOutput := `decided to use PostgreSQL because it is battle-tested. -We chose Go over Python for performance reasons. -Going forward, all new services will follow the same pattern.` - - body, _ := json.Marshal(sessionEndRequest{ + status := postSessionEnd(t, svc, sessionEndRequest{ SessionID: sessionID, Project: project, AgentOutputText: agentOutput, }) - req := httptest.NewRequest(http.MethodPost, "/api/hooks/session-end", bytes.NewReader(body)) - w := httptest.NewRecorder() - - svc.handleSessionEnd(w, req) svc.wg.Wait() - assert.Equal(t, http.StatusAccepted, w.Code) - - count := countCrystallizationMemories(t, store, project, sessionTag) - assert.GreaterOrEqual(t, count, int64(3), - "expected ≥3 decision memories; got %d", count) + require.Equal(t, http.StatusAccepted, status) + rows := readTranscriptRows(t, store, sessionID, project) + require.Len(t, rows, 1) + assert.Equal(t, agentOutput, rows[0].Content) + assert.Equal(t, len(agentOutput), rows[0].ByteLen) + assert.False(t, rows[0].CreatedAt.IsZero()) + assert.Nil(t, rows[0].ProcessedAt) + + var memoryCount int64 + require.NoError(t, store.DB.Model(&gormdb.Memory{}). + Where("source_agent = ? AND project = ?", "crystallization", project). + Count(&memoryCount).Error) + assert.Zero(t, memoryCount, "session-end must not resurrect direct decision-memory extraction") } -// TestCrystallizationIntegration_FlagOff_NothingStored verifies that with the -// flag off no memories are written even when decision patterns exist and -// memoryStore is available. -func TestCrystallizationIntegration_FlagOff_NothingStored(t *testing.T) { +func TestCrystallizationIntegration_FlagOff_NoTranscriptStored(t *testing.T) { store := openIntegrationStore(t) t.Setenv("ENGRAM_CRYSTALLIZATION_ENABLED", "false") - const sessionID = "integ-cryst-sess-002" + const sessionID = "integ-cryst-transcript-off-002" const project = "integ-cryst-project-off" - sessionTag := "session:" + sessionID - t.Cleanup(func() { cleanCrystallizationRows(t, store, project, sessionTag) }) + cleanTranscriptRows(t, store, sessionID, project) + t.Cleanup(func() { cleanTranscriptRows(t, store, sessionID, project) }) svc := buildIntegrationService(t, store) - - body, _ := json.Marshal(sessionEndRequest{ + status := postSessionEnd(t, svc, sessionEndRequest{ SessionID: sessionID, Project: project, AgentOutputText: "decided to use Redis because it is fast.", }) - req := httptest.NewRequest(http.MethodPost, "/api/hooks/session-end", bytes.NewReader(body)) - w := httptest.NewRecorder() - - svc.handleSessionEnd(w, req) svc.wg.Wait() - assert.Equal(t, http.StatusAccepted, w.Code) - - count := countCrystallizationMemories(t, store, project, sessionTag) - assert.Equal(t, int64(0), count, "flag off: must not write any crystallization memories") + require.Equal(t, http.StatusAccepted, status) + assert.Empty(t, readTranscriptRows(t, store, sessionID, project)) } -// TestCrystallizationIntegration_EmptyOutput_NothingStored verifies that empty -// agent output does not spawn crystallization even when memoryStore is wired. -func TestCrystallizationIntegration_EmptyOutput_NothingStored(t *testing.T) { +func TestCrystallizationIntegration_EmptyOutput_NoTranscriptStored(t *testing.T) { store := openIntegrationStore(t) t.Setenv("ENGRAM_CRYSTALLIZATION_ENABLED", "true") - const sessionID = "integ-cryst-sess-empty-003" + const sessionID = "integ-cryst-transcript-empty-003" const project = "integ-cryst-project-empty" - sessionTag := "session:" + sessionID - t.Cleanup(func() { cleanCrystallizationRows(t, store, project, sessionTag) }) + cleanTranscriptRows(t, store, sessionID, project) + t.Cleanup(func() { cleanTranscriptRows(t, store, sessionID, project) }) svc := buildIntegrationService(t, store) - - body, _ := json.Marshal(sessionEndRequest{ - SessionID: sessionID, - Project: project, - AgentOutputText: "", + status := postSessionEnd(t, svc, sessionEndRequest{ + SessionID: sessionID, + Project: project, }) - req := httptest.NewRequest(http.MethodPost, "/api/hooks/session-end", bytes.NewReader(body)) - w := httptest.NewRecorder() - - svc.handleSessionEnd(w, req) svc.wg.Wait() - assert.Equal(t, http.StatusAccepted, w.Code) - - count := countCrystallizationMemories(t, store, project, sessionTag) - assert.Equal(t, int64(0), count, "empty output: must not write any crystallization memories") + require.Equal(t, http.StatusAccepted, status) + assert.Empty(t, readTranscriptRows(t, store, sessionID, project)) } -// TestCrystallizationIntegration_PrivacyRedaction verifies that secrets in agent -// output are redacted before the memory row is written to the database. -func TestCrystallizationIntegration_PrivacyRedaction(t *testing.T) { +func TestCrystallizationIntegration_TranscriptPrivacyRedaction(t *testing.T) { store := openIntegrationStore(t) t.Setenv("ENGRAM_CRYSTALLIZATION_ENABLED", "true") - const sessionID = "integ-cryst-sess-003" + const sessionID = "integ-cryst-transcript-redact-004" const project = "integ-cryst-project-redact" - sessionTag := "session:" + sessionID - t.Cleanup(func() { cleanCrystallizationRows(t, store, project, sessionTag) }) + const secret = "supersecretvalue99999superlong" + cleanTranscriptRows(t, store, sessionID, project) + t.Cleanup(func() { cleanTranscriptRows(t, store, sessionID, project) }) svc := buildIntegrationService(t, store) - - body, _ := json.Marshal(sessionEndRequest{ - SessionID: sessionID, - Project: project, - // The decision text embeds a secret pattern. - AgentOutputText: "decided to rotate SECRET_KEY=supersecretvalue99999superlong because it was exposed.", + status := postSessionEnd(t, svc, sessionEndRequest{ + SessionID: sessionID, + Project: project, + AgentOutputText: "decided to rotate SECRET_KEY=" + secret + " because it was exposed.", }) - req := httptest.NewRequest(http.MethodPost, "/api/hooks/session-end", bytes.NewReader(body)) - w := httptest.NewRecorder() - - svc.handleSessionEnd(w, req) svc.wg.Wait() - assert.Equal(t, http.StatusAccepted, w.Code) - - // Retrieve stored content and verify redaction. - type row struct{ Content string } - var rows []row - res := store.DB.Raw(` - SELECT content FROM memories - WHERE source_agent = 'crystallization' - AND project = ? - AND tags::text LIKE ? - AND deleted_at IS NULL`, - project, "%"+sessionTag+"%", - ).Scan(&rows) - require.NoError(t, res.Error) - - require.NotEmpty(t, rows, "expected at least one memory row") - for _, r := range rows { - assert.NotContains(t, r.Content, "supersecretvalue99999superlong", - "raw secret must not appear in stored content") - assert.Contains(t, r.Content, "[REDACTED", - "stored content must contain redaction marker") - } + require.Equal(t, http.StatusAccepted, status) + rows := readTranscriptRows(t, store, sessionID, project) + require.Len(t, rows, 1) + assert.NotContains(t, rows[0].Content, secret) + assert.Contains(t, rows[0].Content, "[REDACTED") + assert.Equal(t, len(rows[0].Content), rows[0].ByteLen) } -// TestCrystallizationIntegration_ConcurrentReplaySkipsDuplicateFingerprint -// verifies that duplicate session-end deliveries for the same session do not -// insert duplicate crystallization memories. -func TestCrystallizationIntegration_ConcurrentReplaySkipsDuplicateFingerprint(t *testing.T) { +func TestCrystallizationIntegration_ConcurrentDeliveriesPersistTranscripts(t *testing.T) { store := openIntegrationStore(t) t.Setenv("ENGRAM_CRYSTALLIZATION_ENABLED", "true") - const sessionID = "integ-cryst-sess-replay-004" - const project = "integ-cryst-project-replay" - sessionTag := "session:" + sessionID - t.Cleanup(func() { cleanCrystallizationRows(t, store, project, sessionTag) }) + const sessionID = "integ-cryst-transcript-concurrent-005" + const project = "integ-cryst-project-concurrent" + const agentOutput = "decided to use PostgreSQL because it is battle-tested." + cleanTranscriptRows(t, store, sessionID, project) + t.Cleanup(func() { cleanTranscriptRows(t, store, sessionID, project) }) svc := buildIntegrationService(t, store) - body, _ := json.Marshal(sessionEndRequest{ + body, err := json.Marshal(sessionEndRequest{ SessionID: sessionID, Project: project, - AgentOutputText: "decided to use PostgreSQL because it is battle-tested.", + AgentOutputText: agentOutput, }) - + require.NoError(t, err) var handlers sync.WaitGroup + statuses := make(chan int, 2) for i := 0; i < 2; i++ { handlers.Add(1) go func() { @@ -260,12 +200,19 @@ func TestCrystallizationIntegration_ConcurrentReplaySkipsDuplicateFingerprint(t req := httptest.NewRequest(http.MethodPost, "/api/hooks/session-end", bytes.NewReader(body)) w := httptest.NewRecorder() svc.handleSessionEnd(w, req) - assert.Equal(t, http.StatusAccepted, w.Code) + statuses <- w.Code }() } handlers.Wait() + close(statuses) + for status := range statuses { + assert.Equal(t, http.StatusAccepted, status) + } svc.wg.Wait() - count := countCrystallizationMemories(t, store, project, sessionTag) - assert.Equal(t, int64(1), count, "concurrent replay must persist one crystallized decision") + rows := readTranscriptRows(t, store, sessionID, project) + require.Len(t, rows, 2, "raw deliveries remain separate; downstream candidate gating owns fingerprint dedupe") + for _, row := range rows { + assert.Equal(t, agentOutput, row.Content) + } } From b0c4ab4c07a4c6f512728da52b2e132bacd0289c Mon Sep 17 00:00:00 2001 From: Kirill Turanskiy Date: Fri, 10 Jul 2026 06:04:34 +0300 Subject: [PATCH 005/111] test(auth): harden last-admin invariant proof --- internal/db/gorm/user_store_test.go | 188 ++++++++++++++++++ .../worker/auth_handlers_lifecycle_test.go | 52 ++++- 2 files changed, 230 insertions(+), 10 deletions(-) create mode 100644 internal/db/gorm/user_store_test.go diff --git a/internal/db/gorm/user_store_test.go b/internal/db/gorm/user_store_test.go new file mode 100644 index 00000000..5dc2a306 --- /dev/null +++ b/internal/db/gorm/user_store_test.go @@ -0,0 +1,188 @@ +package gorm + +import ( + "context" + "errors" + "fmt" + "net/url" + "os" + "strings" + "testing" + "time" + + "github.com/stretchr/testify/require" + "gorm.io/driver/postgres" + gormio "gorm.io/gorm" +) + +func openIsolatedUserStore(t *testing.T) (*UserStore, *gormio.DB) { + t.Helper() + dsn := os.Getenv("DATABASE_DSN") + if dsn == "" { + t.Skip("DATABASE_DSN not set, skipping user store integration test") + } + + schema := fmt.Sprintf("user_store_test_%d", time.Now().UnixNano()) + rootDB, err := gormio.Open(postgres.Open(dsn), &gormio.Config{}) + require.NoError(t, err) + rootSQLDB, err := rootDB.DB() + require.NoError(t, err) + rootSQLDB.SetMaxOpenConns(1) + rootSQLDB.SetMaxIdleConns(1) + require.NoError(t, rootDB.Exec(fmt.Sprintf(`CREATE SCHEMA %q`, schema)).Error) + t.Cleanup(func() { + require.NoError(t, rootDB.Exec(fmt.Sprintf(`DROP SCHEMA %q CASCADE`, schema)).Error) + _ = rootSQLDB.Close() + }) + + parsedDSN, err := url.Parse(dsn) + require.NoError(t, err) + query := parsedDSN.Query() + query.Set("search_path", schema) + parsedDSN.RawQuery = query.Encode() + + db, err := gormio.Open(postgres.Open(parsedDSN.String()), &gormio.Config{}) + require.NoError(t, err) + sqlDB, err := db.DB() + require.NoError(t, err) + sqlDB.SetMaxOpenConns(4) + sqlDB.SetMaxIdleConns(2) + require.NoError(t, db.AutoMigrate(&User{})) + t.Cleanup(func() { + _ = sqlDB.Close() + }) + + return NewUserStore(db), db +} + +func TestUserStore_UpdateUserWithLastAdminGuard_ConcurrentDemoteDisableLeavesOneAdmin(t *testing.T) { + users, db := openIsolatedUserStore(t) + + for iteration := 0; iteration < 20; iteration++ { + require.NoError(t, db.Exec("DELETE FROM users").Error) + adminA, err := users.CreateUser(fmt.Sprintf("admin-a-%d@example.com", iteration), "hash", DashboardRoleAdmin) + require.NoError(t, err) + adminB, err := users.CreateUser(fmt.Sprintf("admin-b-%d@example.com", iteration), "hash", DashboardRoleAdmin) + require.NoError(t, err) + + start := make(chan struct{}) + results := make(chan error, 2) + go func() { + <-start + role := DashboardRoleOperator + _, updateErr := users.UpdateUserWithLastAdminGuard(adminA.ID, &role, nil) + results <- updateErr + }() + go func() { + <-start + disabled := true + _, updateErr := users.UpdateUserWithLastAdminGuard(adminB.ID, nil, &disabled) + results <- updateErr + }() + close(start) + + errs := []error{<-results, <-results} + successes := 0 + guardFailures := 0 + for _, updateErr := range errs { + if updateErr == nil { + successes++ + continue + } + guardFailures++ + require.Contains(t, []string{"cannot demote the last admin", "cannot disable the last admin"}, updateErr.Error()) + require.NotContains(t, strings.ToLower(updateErr.Error()), "deadlock") + } + require.Equal(t, 1, successes, "iteration %d", iteration) + require.Equal(t, 1, guardFailures, "iteration %d", iteration) + + count, err := users.CountAdmins() + require.NoError(t, err) + require.Equal(t, int64(1), count, "iteration %d", iteration) + + adminA, err = users.GetUserByID(adminA.ID) + require.NoError(t, err) + adminB, err = users.GetUserByID(adminB.ID) + require.NoError(t, err) + activeAdmins := 0 + for _, admin := range []*User{adminA, adminB} { + if admin.Role == DashboardRoleAdmin && !admin.Disabled { + activeAdmins++ + } + } + require.Equal(t, 1, activeAdmins, "iteration %d", iteration) + } +} + +func TestUserStore_UpdateUserWithLastAdminGuard_LocksActiveAdminSet(t *testing.T) { + users, db := openIsolatedUserStore(t) + adminA, err := users.CreateUser("lock-a@example.com", "hash", DashboardRoleAdmin) + require.NoError(t, err) + adminB, err := users.CreateUser("lock-b@example.com", "hash", DashboardRoleAdmin) + require.NoError(t, err) + + tx := db.Begin() + require.NoError(t, tx.Error) + var lockedID int64 + require.NoError(t, tx.Raw("SELECT id FROM users WHERE id = ? FOR UPDATE", adminA.ID).Scan(&lockedID).Error) + require.Equal(t, adminA.ID, lockedID) + + ctx, cancel := context.WithTimeout(context.Background(), 200*time.Millisecond) + defer cancel() + role := DashboardRoleOperator + _, err = NewUserStore(db.WithContext(ctx)).UpdateUserWithLastAdminGuard(adminB.ID, &role, nil) + require.Error(t, err) + require.True(t, errors.Is(err, context.DeadlineExceeded) || strings.Contains(strings.ToLower(err.Error()), "canceling statement"), err.Error()) + require.NotContains(t, strings.ToLower(err.Error()), "deadlock") + require.NoError(t, tx.Rollback().Error) + + adminB, err = users.GetUserByID(adminB.ID) + require.NoError(t, err) + require.Equal(t, DashboardRoleAdmin, adminB.Role) + require.False(t, adminB.Disabled) + + adminB, err = users.UpdateUserWithLastAdminGuard(adminB.ID, &role, nil) + require.NoError(t, err) + require.Equal(t, DashboardRoleOperator, adminB.Role) + _, err = users.UpdateUserWithLastAdminGuard(adminA.ID, &role, nil) + require.EqualError(t, err, "cannot demote the last admin") +} + +func TestUserStore_UpdateUserWithLastAdminGuard_DisabledAdminCanBeDemoted(t *testing.T) { + users, _ := openIsolatedUserStore(t) + active, err := users.CreateUser("active@example.com", "hash", DashboardRoleAdmin) + require.NoError(t, err) + disabledAdmin, err := users.CreateUser("disabled@example.com", "hash", DashboardRoleAdmin) + require.NoError(t, err) + + disabled := true + disabledAdmin, err = users.UpdateUserWithLastAdminGuard(disabledAdmin.ID, nil, &disabled) + require.NoError(t, err) + require.True(t, disabledAdmin.Disabled) + + role := DashboardRoleOperator + disabledAdmin, err = users.UpdateUserWithLastAdminGuard(disabledAdmin.ID, &role, nil) + require.NoError(t, err) + require.Equal(t, DashboardRoleOperator, disabledAdmin.Role) + require.True(t, disabledAdmin.Disabled) + + active, err = users.GetUserByID(active.ID) + require.NoError(t, err) + require.Equal(t, DashboardRoleAdmin, active.Role) + require.False(t, active.Disabled) + count, err := users.CountAdmins() + require.NoError(t, err) + require.Equal(t, int64(1), count) +} + +func TestUserStore_UpdateUserWithLastAdminGuard_NormalizedAdminRoleIsNotDemotion(t *testing.T) { + users, _ := openIsolatedUserStore(t) + admin, err := users.CreateUser("normalized@example.com", "hash", DashboardRoleAdmin) + require.NoError(t, err) + + role := DashboardRoleAdmin + admin, err = users.UpdateUserWithLastAdminGuard(admin.ID, &role, nil) + require.NoError(t, err) + require.Equal(t, DashboardRoleAdmin, admin.Role) + require.False(t, admin.Disabled) +} diff --git a/internal/worker/auth_handlers_lifecycle_test.go b/internal/worker/auth_handlers_lifecycle_test.go index b3d2763b..eaad56ac 100644 --- a/internal/worker/auth_handlers_lifecycle_test.go +++ b/internal/worker/auth_handlers_lifecycle_test.go @@ -209,6 +209,8 @@ func TestAuthHandlersLifecycle_AccessCreateInvitationAcceptsAuthentikAdminWithou func TestAuthHandlersLifecycle_LastAdminDemoteRaceLeavesOneAdmin(t *testing.T) { env := openAuthLifecycleEnv(t) + baselineAdmins, err := env.users.CountAdmins() + require.NoError(t, err) adminAEmail := fmt.Sprintf("zz-access-last-admin-a-%d@example.com", time.Now().UnixNano()) adminBEmail := fmt.Sprintf("zz-access-last-admin-b-%d@example.com", time.Now().UnixNano()) adminA, err := env.users.CreateUser(adminAEmail, "hash", gormdb.DashboardRoleAdmin) @@ -234,22 +236,49 @@ func TestAuthHandlersLifecycle_LastAdminDemoteRaceLeavesOneAdmin(t *testing.T) { close(start) err1 := <-results err2 := <-results - if err1 == nil && err2 == nil { - t.Fatalf("expected one demotion to fail so at least one admin remains") - } - if err1 != nil { - require.NotContains(t, strings.ToLower(err1.Error()), "deadlock") + successes := 0 + errorsSeen := 0 + expectedSuccesses := 2 + if baselineAdmins == 0 { + expectedSuccesses = 1 } - if err2 != nil { - require.NotContains(t, strings.ToLower(err2.Error()), "deadlock") + for _, updateErr := range []error{err1, err2} { + if updateErr == nil { + successes++ + continue + } + errorsSeen++ + require.EqualError(t, updateErr, "cannot demote the last admin") + require.NotContains(t, strings.ToLower(updateErr.Error()), "deadlock") } + require.Equal(t, expectedSuccesses, successes) + require.Equal(t, 2-expectedSuccesses, errorsSeen) count, err := env.users.CountAdmins() require.NoError(t, err) - require.Equal(t, int64(1), count) + expectedAdmins := baselineAdmins + expectedPairAdmins := 0 + if expectedAdmins == 0 { + expectedAdmins = 1 + expectedPairAdmins = 1 + } + require.Equal(t, expectedAdmins, count) + adminA, err = env.users.GetUserByID(adminA.ID) + require.NoError(t, err) + adminB, err = env.users.GetUserByID(adminB.ID) + require.NoError(t, err) + activePairAdmins := 0 + for _, admin := range []*gormdb.User{adminA, adminB} { + if admin.Role == gormdb.DashboardRoleAdmin && !admin.Disabled { + activePairAdmins++ + } + } + require.Equal(t, expectedPairAdmins, activePairAdmins) } func TestAuthHandlersLifecycle_DisabledAdminCanBeDemotedWithoutLastAdminError(t *testing.T) { env := openAuthLifecycleEnv(t) + baselineAdmins, err := env.users.CountAdmins() + require.NoError(t, err) activeEmail := fmt.Sprintf("zz-active-admin-%d@example.com", time.Now().UnixNano()) disabledEmail := fmt.Sprintf("zz-disabled-admin-%d@example.com", time.Now().UnixNano()) active, err := env.users.CreateUser(activeEmail, "hash", gormdb.DashboardRoleAdmin) @@ -267,8 +296,11 @@ func TestAuthHandlersLifecycle_DisabledAdminCanBeDemotedWithoutLastAdminError(t require.True(t, updated.Disabled) count, err := env.users.CountAdmins() require.NoError(t, err) - require.Equal(t, int64(1), count) - require.Equal(t, active.ID, active.ID) + require.Equal(t, baselineAdmins+1, count) + active, err = env.users.GetUserByID(active.ID) + require.NoError(t, err) + require.Equal(t, gormdb.DashboardRoleAdmin, active.Role) + require.False(t, active.Disabled) } func ptrBool(v bool) *bool { return &v } From d72e8e441d65a168ac5b3516f74c7aa2e6c2d60e Mon Sep 17 00:00:00 2001 From: Kirill Turanskiy Date: Fri, 10 Jul 2026 06:48:30 +0300 Subject: [PATCH 006/111] fix(bulkops): make rollback conflict checks atomic --- internal/bulkops/facade.go | 62 +++-- internal/bulkops/facade_test.go | 43 ++++ internal/bulkops/rollback.go | 213 +++++++++--------- internal/bulkops/rollback_test.go | 131 +++++++++++ internal/db/gorm/memory_store.go | 140 ++++++++---- internal/db/gorm/memory_store_restore_test.go | 151 +++++++++++++ internal/db/gorm/snapshot_store.go | 33 ++- internal/db/gorm/snapshot_store_test.go | 33 +++ 8 files changed, 628 insertions(+), 178 deletions(-) create mode 100644 internal/db/gorm/memory_store_restore_test.go diff --git a/internal/bulkops/facade.go b/internal/bulkops/facade.go index a1a4e9ed..115a1ec3 100644 --- a/internal/bulkops/facade.go +++ b/internal/bulkops/facade.go @@ -155,7 +155,7 @@ func (f *Facade) executeBulkPromote(ctx context.Context, identity auth.Identity, // This fixes the rollback bug where AffectedMemoryIDs contained candidate IDs, // memoryStore.Get() returned not-found for them, and promoted memory rows survived. actor := resolveActor(identity) - snapshotID, beforeState, err := f.capturePromoteBeforeState(ctx, ids) + snapshotID, beforeState, capturedAt, err := f.capturePromoteBeforeState(ctx, ids) if err != nil { return nil, fmt.Errorf("bulk_promote snapshot capture: %w", err) } @@ -168,6 +168,7 @@ func (f *Facade) executeBulkPromote(ctx context.Context, identity auth.Identity, if err != nil { return nil, fmt.Errorf("bulk_promote new_snapshot: %w", err) } + snap.CreatedAt = capturedAt // AffectedMemoryIDs for bulk_promote tracks the CANDIDATE ids at this point // (before promotions run). After promotions, we amend it with the promoted memory IDs // so conflict detection can check the actual memory rows. The before_state typed entries @@ -262,7 +263,7 @@ func (f *Facade) executeBulkDelete(ctx context.Context, identity auth.Identity, } actor := resolveActor(identity) - snapshotID, beforeState, err := f.captureMemoryBeforeState(ctx, ids) + snapshotID, beforeState, capturedAt, err := f.captureMemoryBeforeState(ctx, ids) if err != nil { return nil, fmt.Errorf("bulk_delete snapshot capture: %w", err) } @@ -275,6 +276,7 @@ func (f *Facade) executeBulkDelete(ctx context.Context, identity auth.Identity, if err != nil { return nil, fmt.Errorf("bulk_delete new_snapshot: %w", err) } + snap.CreatedAt = capturedAt snap.AffectedMemoryIDs = ids snap.SourceSessionID = op.SourceSessionID snap.Parameters = params @@ -322,7 +324,7 @@ func (f *Facade) executeBulkSupersede(ctx context.Context, identity auth.Identit } actor := resolveActor(identity) - snapshotID, beforeState, err := f.captureMemoryBeforeState(ctx, ids) + snapshotID, beforeState, capturedAt, err := f.captureMemoryBeforeState(ctx, ids) if err != nil { return nil, fmt.Errorf("bulk_supersede snapshot capture: %w", err) } @@ -335,6 +337,7 @@ func (f *Facade) executeBulkSupersede(ctx context.Context, identity auth.Identit if err != nil { return nil, fmt.Errorf("bulk_supersede new_snapshot: %w", err) } + snap.CreatedAt = capturedAt snap.AffectedMemoryIDs = ids snap.SourceSessionID = op.SourceSessionID snap.Parameters = params @@ -425,8 +428,12 @@ func (f *Facade) captureCandidateBeforeState(ctx context.Context, ids []int64) ( // Each candidate ID is stored as EntryKindRestore with the candidate body as Before data. // Promoted memory IDs (created by the op) are added later via AmendPromoteEntries as // EntryKindDelete (no before needed — they did not exist pre-op). -func (f *Facade) capturePromoteBeforeState(ctx context.Context, candidateIDs []int64) (string, json.RawMessage, error) { +func (f *Facade) capturePromoteBeforeState(ctx context.Context, candidateIDs []int64) (string, json.RawMessage, time.Time, error) { snapshotID := uuid.New().String() + capturedAt, err := f.authoritativeCaptureTime(ctx) + if err != nil { + return "", nil, time.Time{}, err + } state := make(map[string]models.SnapshotEntry, len(candidateIDs)) for _, id := range candidateIDs { c, err := f.candidateStore.Get(ctx, id) @@ -437,20 +444,24 @@ func (f *Facade) capturePromoteBeforeState(ctx context.Context, candidateIDs []i } before, marshalErr := json.Marshal(c) if marshalErr != nil { - return "", nil, fmt.Errorf("capturePromoteBeforeState: marshal candidate %d: %w", id, marshalErr) + return "", nil, time.Time{}, fmt.Errorf("capturePromoteBeforeState: marshal candidate %d: %w", id, marshalErr) } state[fmt.Sprintf("%d", id)] = models.SnapshotEntry{Kind: models.EntryKindRestore, Before: json.RawMessage(before)} } bs, err := json.Marshal(state) if err != nil { - return "", nil, fmt.Errorf("capturePromoteBeforeState: serialize: %w", err) + return "", nil, time.Time{}, fmt.Errorf("capturePromoteBeforeState: serialize: %w", err) } - return snapshotID, json.RawMessage(bs), nil + return snapshotID, json.RawMessage(bs), capturedAt, nil } // captureMemoryBeforeState fetches memory rows and serializes them as JSONB. -func (f *Facade) captureMemoryBeforeState(ctx context.Context, ids []int64) (string, json.RawMessage, error) { +func (f *Facade) captureMemoryBeforeState(ctx context.Context, ids []int64) (string, json.RawMessage, time.Time, error) { snapshotID := uuid.New().String() + capturedAt, err := f.authoritativeCaptureTime(ctx) + if err != nil { + return "", nil, time.Time{}, err + } state := make(map[string]json.RawMessage, len(ids)) if f.memoryStore != nil { for _, id := range ids { @@ -463,20 +474,37 @@ func (f *Facade) captureMemoryBeforeState(ctx context.Context, ids []int64) (str state[fmt.Sprintf("%d", id)] = json.RawMessage("null") continue } - return "", nil, fmt.Errorf("load memory %d before_state: %w", id, err) + return "", nil, time.Time{}, fmt.Errorf("load memory %d before_state: %w", id, err) } before, marshalErr := marshalMemoryRowSnapshot(&row) if marshalErr != nil { - return "", nil, fmt.Errorf("serialize memory %d before_state: %w", id, marshalErr) + return "", nil, time.Time{}, fmt.Errorf("serialize memory %d before_state: %w", id, marshalErr) } state[fmt.Sprintf("%d", id)] = before } } bs, err := json.Marshal(state) if err != nil { - return "", nil, fmt.Errorf("serialize memory before_state: %w", err) + return "", nil, time.Time{}, fmt.Errorf("serialize memory before_state: %w", err) } - return snapshotID, json.RawMessage(bs), nil + return snapshotID, json.RawMessage(bs), capturedAt, nil +} + +// authoritativeCaptureTime returns one database-sourced boundary before any +// before-state row is read. The exact value is carried with that state and +// persisted as bulk_op_snapshots.created_at, avoiding application/DB clock skew +// and the read-to-insert timestamp gap. +func (f *Facade) authoritativeCaptureTime(ctx context.Context) (time.Time, error) { + if f.memoryStore == nil { + return time.Now().UTC(), nil + } + var capturedAt time.Time + if err := f.memoryStore.GetDB().WithContext(ctx). + Raw("SELECT clock_timestamp()"). + Scan(&capturedAt).Error; err != nil { + return time.Time{}, fmt.Errorf("capture authoritative snapshot time: %w", err) + } + return capturedAt.UTC(), nil } // marshalMemoryRowSnapshot converts timestamp fields to UTC before JSON encoding. @@ -513,12 +541,4 @@ func utcTimePtr(value *time.Time) *time.Time { return &normalized } -func candidateIDsToInt64(ids []int64) []int64 { - return ids -} - -// captureCandidateBeforeStateAt is a timestamp-capturing variant used by rollback. -// Returns the snapshot time so rollback can compare updated_at values. -func SnapshotTime() time.Time { - return time.Now().UTC() -} +func candidateIDsToInt64(ids []int64) []int64 { return ids } diff --git a/internal/bulkops/facade_test.go b/internal/bulkops/facade_test.go index e423a4d3..17bd5eaa 100644 --- a/internal/bulkops/facade_test.go +++ b/internal/bulkops/facade_test.go @@ -287,3 +287,46 @@ func TestFacade_BulkSupersede_Committed_AuditLogWritten(t *testing.T) { assert.GreaterOrEqual(t, auditCountAfter-auditCountBefore, int64(1), "audit log must have at least 1 new bulk_supersede entry from this Execute call") } + +func TestCaptureMemoryBeforeState_ReturnsPersistedAuthoritativeBoundary(t *testing.T) { + db, store := openTestDB(t) + memStore := gormdb.NewMemoryStore(store) + snapStore := gormdb.NewSnapshotStore(db) + f := NewFacade(snapStore, nil, memStore, nil) + ctx := context.Background() + + created, err := memStore.Create(ctx, &models.Memory{ + Content: "authoritative capture boundary", + Project: "tg6-capture-boundary", + SourceAgent: "claude-code", + }) + require.NoError(t, err) + t.Cleanup(func() { + _ = db.Exec("DELETE FROM memories WHERE id = ?", created.ID).Error + _ = db.Exec("DELETE FROM bulk_op_snapshots WHERE actor = 'capture-boundary-test'").Error + }) + + var startedAt time.Time + require.NoError(t, db.Raw("SELECT clock_timestamp()").Scan(&startedAt).Error) + snapshotID, beforeState, capturedAt, err := f.captureMemoryBeforeState(ctx, []int64{created.ID}) + var finishedAt time.Time + require.NoError(t, db.Raw("SELECT clock_timestamp()").Scan(&finishedAt).Error) + require.NoError(t, err) + require.False(t, capturedAt.Before(startedAt)) + require.False(t, capturedAt.After(finishedAt)) + + snap, err := models.NewBulkOpSnapshot( + snapshotID, + models.SnapshotOpBulkDelete, + "capture-boundary-test", + beforeState, + ) + require.NoError(t, err) + snap.AffectedMemoryIDs = []int64{created.ID} + snap.CreatedAt = capturedAt + + persisted, err := snapStore.Create(ctx, snap) + require.NoError(t, err) + require.True(t, persisted.CreatedAt.Equal(capturedAt), + "the exact capture boundary returned with before_state must be persisted") +} diff --git a/internal/bulkops/rollback.go b/internal/bulkops/rollback.go index 67c0af24..6bc25c98 100644 --- a/internal/bulkops/rollback.go +++ b/internal/bulkops/rollback.go @@ -16,6 +16,7 @@ import ( "fmt" "math" "reflect" + "sort" "strconv" "time" @@ -70,75 +71,74 @@ func Rollback( if memoryStore == nil { return nil, fmt.Errorf("rollback: memoryStore is required") } + actor := resolveActor(identity) + db := memoryStore.GetDB() + result := &RollbackResult{SnapshotID: snapshotID} + var conflictIDs []int64 - snap, err := snapshotStore.Get(ctx, snapshotID) - if err != nil { - if errors.Is(err, gormpkg.ErrRecordNotFound) { - return nil, fmt.Errorf("rollback: snapshot %q not found: %w", snapshotID, err) + txErr := db.WithContext(ctx).Transaction(func(tx *gormpkg.DB) error { + // Lock order is deliberate: snapshot first, then all affected memory rows + // in sorted ID order. The conflict decision, restore, and status CAS therefore + // observe one transactional state with no read-to-write TOCTOU window. + snap, err := snapshotStore.GetForUpdateTx(ctx, tx, snapshotID) + if err != nil { + if errors.Is(err, gormpkg.ErrRecordNotFound) { + return fmt.Errorf("rollback: snapshot %q not found: %w", snapshotID, err) + } + return fmt.Errorf("rollback: get snapshot for update: %w", err) + } + if snap.Status != models.SnapshotStatusCommitted { + return fmt.Errorf("rollback: snapshot %q has status %q, expected 'committed': %w", + snapshotID, snap.Status, ErrSnapshotNotRollbackable) } - return nil, fmt.Errorf("rollback: get snapshot: %w", err) - } - - if snap.Status != models.SnapshotStatusCommitted { - return nil, fmt.Errorf("rollback: snapshot %q has status %q, expected 'committed': %w", - snapshotID, snap.Status, ErrSnapshotNotRollbackable) - } - - actor := resolveActor(identity) - // Decode before_state. Supports two formats: - // - Typed entries: map[id-or-entity-key]{"kind":"restore"|"delete","before":} - // - Legacy flat format: map[id] (bulk_delete, bulk_supersede) - // decodeTypedBeforeState transparently handles both. - typedEntries, err := decodeTypedBeforeState(snap.BeforeState) - if err != nil { - return nil, fmt.Errorf("rollback: decode before_state: %w", err) - } + // Decode before_state only after the snapshot row is locked, so a concurrent + // amend/status transition cannot change the rollback contract underneath us. + typedEntries, err := decodeTypedBeforeState(snap.BeforeState) + if err != nil { + return fmt.Errorf("rollback: decode before_state: %w", err) + } - // Conflict check (EC-F3): pre-existing rows conflict when updated after the snapshot. - // EntryKindDelete rows were created by the operation, so they use a different guard: - // rollback may hard-delete them only while updated_at still equals created_at. - var idsToCheck []int64 - var createdIDsToCheck []int64 - for _, id := range snap.AffectedMemoryIDs { - if entry, ok := snapshotEntryForMemoryID(typedEntries, id); ok && entry.Kind == models.EntryKindDelete { - createdIDsToCheck = append(createdIDsToCheck, id) - continue + // Derive the lock/conflict set from the entries that the restore loop will + // actually mutate. AffectedMemoryIDs is metadata and can also contain + // candidate IDs; using it alone can both lock unrelated memories and miss a + // restore entry if metadata drifts. + var idsToCheck []int64 + var createdIDsToCheck []int64 + for key, entry := range typedEntries { + entity, id, parseErr := parseSnapshotEntryKey(key) + if parseErr != nil { + return fmt.Errorf("rollback: parse entry key %q: %w", key, parseErr) + } + if entry.Kind == models.EntryKindDelete { + createdIDsToCheck = append(createdIDsToCheck, id) + continue + } + if entity == snapshotEntryEntityCandidate || + (entity == "" && (snap.OpType == models.SnapshotOpBulkPromote || snap.OpType == models.SnapshotOpCandidateReviewAction)) { + continue + } + idsToCheck = append(idsToCheck, id) } - idsToCheck = append(idsToCheck, id) - } - conflictIDs, err := detectConflicts(ctx, memoryStore, idsToCheck, snap.CreatedAt, snap.OpType, typedEntries) - if err != nil { - return nil, fmt.Errorf("rollback: conflict detection: %w", err) - } - createdConflictIDs, err := detectCreatedRowConflicts(ctx, memoryStore, createdIDsToCheck) - if err != nil { - return nil, fmt.Errorf("rollback: created-row conflict detection: %w", err) - } - conflictIDs = append(conflictIDs, createdConflictIDs...) - if len(conflictIDs) > 0 { - // Write conflict audit entry and return error — no restore occurs. - if auditStore != nil { - _ = auditStore.Log(ctx, gormdb.AuditLogEntry{ - Action: "rollback_attempted_with_conflict", - Actor: actor, - Reason: fmt.Sprintf("snapshot=%s conflict_ids=%v", snapshotID, conflictIDs), - }) + idsToCheck = sortedUniqueIDs(idsToCheck) + createdIDsToCheck = sortedUniqueIDs(createdIDsToCheck) + allMemoryIDs := make([]int64, 0, len(idsToCheck)+len(createdIDsToCheck)) + allMemoryIDs = append(allMemoryIDs, idsToCheck...) + allMemoryIDs = append(allMemoryIDs, createdIDsToCheck...) + lockedRows, err := memoryStore.LockRawByIDsTx(ctx, tx, allMemoryIDs) + if err != nil { + return fmt.Errorf("rollback: lock affected memories: %w", err) } - return &RollbackResult{ - SnapshotID: snapshotID, - ConflictIDs: conflictIDs, - }, ErrRollbackConflict - } - // MAJOR fix: all restore mutations + MarkRolledBack run inside ONE transaction. - // A mid-loop failure previously left partially-restored state with the snapshot - // still committed — re-rollback would double-write already-restored rows. - // With a single transaction: either everything is applied or nothing is. - db := memoryStore.GetDB() - result := &RollbackResult{SnapshotID: snapshotID} + conflictIDs, err = detectConflicts(lockedRows, idsToCheck, snap.CreatedAt, snap.OpType, typedEntries) + if err != nil { + return fmt.Errorf("rollback: conflict detection: %w", err) + } + conflictIDs = append(conflictIDs, detectCreatedRowConflicts(lockedRows, createdIDsToCheck)...) + if len(conflictIDs) > 0 { + return ErrRollbackConflict + } - txErr := db.WithContext(ctx).Transaction(func(tx *gormpkg.DB) error { var restored int for key, entry := range typedEntries { @@ -192,21 +192,8 @@ func Rollback( } } - // Mark snapshot rolled_back inside the same transaction. - now := time.Now().UTC() - res := tx.WithContext(ctx). - Model(&struct{ TableName string }{}). - Table("bulk_op_snapshots"). - Where("snapshot_id = ? AND status = 'committed'", snapshotID). - Updates(map[string]any{ - "status": string(models.SnapshotStatusRolledBack), - "rolled_back_at": now, - }) - if res.Error != nil { - return fmt.Errorf("rollback: mark_rolled_back in tx: %w", res.Error) - } - if res.RowsAffected == 0 { - return fmt.Errorf("rollback: snapshot %q not found or already rolled back", snapshotID) + if err := snapshotStore.MarkRolledBackTx(ctx, tx, snapshotID, time.Now().UTC()); err != nil { + return fmt.Errorf("rollback: mark snapshot rolled_back: %w", err) } result.RestoredCount = restored @@ -214,6 +201,19 @@ func Rollback( }) if txErr != nil { + if errors.Is(txErr, ErrRollbackConflict) { + if auditStore != nil { + _ = auditStore.Log(ctx, gormdb.AuditLogEntry{ + Action: "rollback_attempted_with_conflict", + Actor: actor, + Reason: fmt.Sprintf("snapshot=%s conflict_ids=%v", snapshotID, conflictIDs), + }) + } + return &RollbackResult{ + SnapshotID: snapshotID, + ConflictIDs: conflictIDs, + }, ErrRollbackConflict + } return nil, txErr } @@ -257,35 +257,44 @@ func snapshotEntryForMemoryID(entries map[string]models.SnapshotEntry, id int64) return entry, ok } +func sortedUniqueIDs(ids []int64) []int64 { + seen := make(map[int64]struct{}, len(ids)) + unique := make([]int64, 0, len(ids)) + for _, id := range ids { + if id == 0 { + continue + } + if _, exists := seen[id]; exists { + continue + } + seen[id] = struct{}{} + unique = append(unique, id) + } + sort.Slice(unique, func(i, j int) bool { return unique[i] < unique[j] }) + return unique +} + // detectConflicts returns the IDs of memories modified after snapshotTime. // A memory's updated_at > snapshotTime indicates a post-snapshot modification (EC-F3). func detectConflicts( - ctx context.Context, - memoryStore *gormdb.MemoryStore, + rowsByID map[int64]*gormdb.Memory, ids []int64, snapshotTime time.Time, opType models.SnapshotOpType, entries map[string]models.SnapshotEntry, ) ([]int64, error) { - if memoryStore == nil || len(ids) == 0 { + if len(ids) == 0 { return nil, nil } var conflicts []int64 for _, id := range ids { - var mem gormdb.Memory - err := memoryStore.GetDB().WithContext(ctx). - Unscoped(). - Where("id = ?", id). - First(&mem).Error - if err != nil { - if errors.Is(err, gormpkg.ErrRecordNotFound) { - // A hard-deleted row has nothing left to restore or overwrite. - continue - } - return nil, fmt.Errorf("detectConflicts: get memory %d: %w", id, err) + mem, exists := rowsByID[id] + if !exists { + // A hard-deleted row has nothing left to restore or overwrite. + continue } if entry, ok := snapshotEntryForMemoryID(entries, id); ok { - expected, matchErr := matchesExpectedOperationMutation(opType, entry, &mem) + expected, matchErr := matchesExpectedOperationMutation(opType, entry, mem) if matchErr != nil { return nil, fmt.Errorf("detectConflicts: memory %d: %w", id, matchErr) } @@ -354,29 +363,19 @@ func matchesExpectedOperationMutation(opType models.SnapshotOpType, entry models // snapshot.created_at is not a valid conflict boundary for them. Instead, the safe-delete // invariant is created_at == updated_at; any later update means rollback must refuse to // destroy user-visible edits. -func detectCreatedRowConflicts(ctx context.Context, memoryStore *gormdb.MemoryStore, ids []int64) ([]int64, error) { - if memoryStore == nil || len(ids) == 0 { - return nil, nil - } +func detectCreatedRowConflicts(rowsByID map[int64]*gormdb.Memory, ids []int64) []int64 { var conflicts []int64 for _, id := range ids { - var mem gormdb.Memory - err := memoryStore.GetDB().WithContext(ctx). - Unscoped(). - Where("id = ?", id). - First(&mem).Error - if err != nil { - if errors.Is(err, gormpkg.ErrRecordNotFound) { - // Already hard-deleted rows have nothing left for rollback to destroy. - continue - } - return nil, fmt.Errorf("detectCreatedRowConflicts: get memory %d: %w", id, err) + mem, exists := rowsByID[id] + if !exists { + // Already hard-deleted rows have nothing left for rollback to destroy. + continue } if mem.UpdatedAt.After(mem.CreatedAt) { conflicts = append(conflicts, id) } } - return conflicts, nil + return conflicts } // decodeTypedBeforeState parses the JSONB before_state into typed SnapshotEntry values. diff --git a/internal/bulkops/rollback_test.go b/internal/bulkops/rollback_test.go index 4e4df9ae..6706c7f6 100644 --- a/internal/bulkops/rollback_test.go +++ b/internal/bulkops/rollback_test.go @@ -400,6 +400,137 @@ func TestRollback_ConcurrentOnlyOneCommitWins(t *testing.T) { assert.Equal(t, models.SnapshotStatusRolledBack, storedSnap.Status) } +func TestRollback_LaterMutationWaitsAndIsNotOverwritten(t *testing.T) { + db, store := openRollbackTestDB(t) + memStore := gormdb.NewMemoryStore(store) + snapStore := gormdb.NewSnapshotStore(db) + ctx := context.Background() + + created, err := memStore.Create(ctx, &models.Memory{ + Content: "rollback race original", + Project: "tg6-rollback-mutation-race", + SourceAgent: "claude-code", + }) + require.NoError(t, err) + t.Cleanup(func() { + _ = db.Exec("DELETE FROM memories WHERE id = ?", created.ID).Error + _ = db.Exec("DELETE FROM bulk_op_snapshots WHERE snapshot_id = 'rollback-mutation-race'").Error + }) + + snap, err := models.NewBulkOpSnapshot( + "rollback-mutation-race", + models.SnapshotOpBulkDelete, + "master", + memoryBeforeStateJSON(t, db, created.ID), + ) + require.NoError(t, err) + snap.AffectedMemoryIDs = []int64{created.ID} + snap.CreatedAt = time.Now().UTC() + createdSnap, err := snapStore.Create(ctx, snap) + require.NoError(t, err) + + type rollbackPauseKey struct{} + pauseCtx := context.WithValue(ctx, rollbackPauseKey{}, true) + restoreReached := make(chan struct{}) + releaseRestore := make(chan struct{}) + var restorePauseOnce sync.Once + var releaseOnce sync.Once + callbackName := fmt.Sprintf("bulkops:test_pause_restore_%d", created.ID) + require.NoError(t, db.Callback().Update().Before("gorm:update").Register(callbackName, func(tx *gorm.DB) { + if tx.Statement.Table != "memories" || tx.Statement.Context.Value(rollbackPauseKey{}) != true { + return + } + restorePauseOnce.Do(func() { + close(restoreReached) + <-releaseRestore + }) + })) + t.Cleanup(func() { + releaseOnce.Do(func() { close(releaseRestore) }) + _ = db.Callback().Update().Remove(callbackName) + }) + + rollbackDone := make(chan error, 1) + go func() { + _, rollbackErr := Rollback(pauseCtx, adminIdentity(), createdSnap.SnapshotID, snapStore, memStore, nil, nil) + rollbackDone <- rollbackErr + }() + + select { + case <-restoreReached: + case rollbackErr := <-rollbackDone: + require.NoError(t, rollbackErr, "rollback must reach the restore mutation") + t.Fatal("rollback completed before the restore pause callback") + case <-time.After(5 * time.Second): + t.Fatal("timed out waiting for rollback to reach restore") + } + + sqlDB, err := db.DB() + require.NoError(t, err) + mutationConn, err := sqlDB.Conn(ctx) + require.NoError(t, err) + defer mutationConn.Close() + + var mutationPID int + require.NoError(t, mutationConn.QueryRowContext(ctx, "SELECT pg_backend_pid()").Scan(&mutationPID)) + mutationDone := make(chan error, 1) + go func() { + _, mutationErr := mutationConn.ExecContext(context.Background(), + `UPDATE memories SET content = 'later mutation', updated_at = NOW() WHERE id = $1`, + created.ID, + ) + mutationDone <- mutationErr + }() + + locked := false + mutationCompletedBeforeRelease := false + var mutationErr error + deadline := time.NewTimer(5 * time.Second) + ticker := time.NewTicker(10 * time.Millisecond) + defer deadline.Stop() + defer ticker.Stop() + + for !locked && !mutationCompletedBeforeRelease { + select { + case mutationErr = <-mutationDone: + mutationCompletedBeforeRelease = true + case <-ticker.C: + var waitEventType string + queryErr := db.Raw( + `SELECT COALESCE(wait_event_type, '') FROM pg_stat_activity WHERE pid = ?`, + mutationPID, + ).Scan(&waitEventType).Error + require.NoError(t, queryErr) + locked = waitEventType == "Lock" + case <-deadline.C: + t.Fatal("timed out waiting for the later mutation to block on rollback's row lock") + } + } + + releaseOnce.Do(func() { close(releaseRestore) }) + require.NoError(t, <-rollbackDone) + if !mutationCompletedBeforeRelease { + select { + case mutationErr = <-mutationDone: + case <-time.After(5 * time.Second): + t.Fatal("later mutation did not complete after rollback released its row lock") + } + } + + require.NoError(t, mutationErr) + assert.False(t, mutationCompletedBeforeRelease, + "later mutation must wait until rollback commits instead of being overwritten") + + var finalRow gormdb.Memory + require.NoError(t, db.Unscoped().Where("id = ?", created.ID).First(&finalRow).Error) + assert.Equal(t, "later mutation", finalRow.Content, + "a mutation that starts after conflict evaluation must win after rollback commits") + + storedSnap, err := snapStore.Get(ctx, createdSnap.SnapshotID) + require.NoError(t, err) + assert.Equal(t, models.SnapshotStatusRolledBack, storedSnap.Status) +} + func TestRollback_CandidateReviewPromoteDeletesMemoryAndRestoresPending(t *testing.T) { db, store := openRollbackTestDB(t) memStore := gormdb.NewMemoryStore(store) diff --git a/internal/db/gorm/memory_store.go b/internal/db/gorm/memory_store.go index e9494931..616b9afd 100644 --- a/internal/db/gorm/memory_store.go +++ b/internal/db/gorm/memory_store.go @@ -16,6 +16,7 @@ import ( "github.com/lib/pq" "gorm.io/gorm" + "gorm.io/gorm/clause" "github.com/thebtf/engram/pkg/models" ) @@ -1709,6 +1710,96 @@ func (s *MemoryStore) MaxActiveID(ctx context.Context) (int64, error) { return maxID, nil } +// LockRawByIDsTx loads and row-locks raw memory rows inside tx. +// IDs are de-duplicated and sorted so overlapping rollback transactions acquire +// locks in a stable order instead of introducing an avoidable deadlock cycle. +func (s *MemoryStore) LockRawByIDsTx(ctx context.Context, tx *gorm.DB, ids []int64) (map[int64]*Memory, error) { + rowsByID := make(map[int64]*Memory) + if len(ids) == 0 { + return rowsByID, nil + } + if tx == nil { + return nil, fmt.Errorf("lockRawByIDsTx: transaction must not be nil") + } + + seen := make(map[int64]struct{}, len(ids)) + orderedIDs := make([]int64, 0, len(ids)) + for _, id := range ids { + if id == 0 { + continue + } + if _, exists := seen[id]; exists { + continue + } + seen[id] = struct{}{} + orderedIDs = append(orderedIDs, id) + } + sort.Slice(orderedIDs, func(i, j int) bool { return orderedIDs[i] < orderedIDs[j] }) + if len(orderedIDs) == 0 { + return rowsByID, nil + } + + var rows []Memory + if err := tx.WithContext(ctx). + Unscoped(). + Clauses(clause.Locking{Strength: "UPDATE"}). + Where("id IN ?", orderedIDs). + Order("id ASC"). + Find(&rows).Error; err != nil { + return nil, fmt.Errorf("lockRawByIDsTx: %w", err) + } + for i := range rows { + rowsByID[rows[i].ID] = &rows[i] + } + return rowsByID, nil +} + +func rawMemoryRestoreUpdates(mem *models.Memory) map[string]any { + return map[string]any{ + "project": mem.Project, + "content": mem.Content, + "tags": models.JSONStringArray(mem.Tags), + "source_agent": mem.SourceAgent, + "edited_by": mem.EditedBy, + "status": mem.Status, + "tier": mem.Tier, + "epistemic_type": mem.EpistemicType, + "defeasibility": mem.Defeasibility, + "promotion_target": mem.PromotionTarget, + "privacy_scope": mem.PrivacyScope, + "source_workstation_id": mem.SourceWorkstationID, + "source_sessions": pq.StringArray(mem.SourceSessions), + "owner_principal": mem.OwnerPrincipal, + "owner_principal_kind": mem.OwnerPrincipalKind, + "agent_visibility": mem.AgentVisibility, + "domain": mem.Domain, + "created_at": mem.CreatedAt, + "updated_at": mem.UpdatedAt, + "deleted_at": mem.DeletedAt, + "last_retrieved_at": mem.LastRetrievedAt, + "last_confirmed": mem.LastConfirmed, + "review_after": mem.ReviewAfter, + "valid_from": mem.ValidFrom, + "valid_until": mem.ValidUntil, + "supersedes_id": mem.SupersedesID, + "superseded_by": mem.SupersededBy, + "importance_base": mem.ImportanceBase, + "ts_alpha": mem.TsAlpha, + "ts_beta": mem.TsBeta, + "confidence": mem.Confidence, + "stability": mem.Stability, + "retrievability": mem.Retrievability, + "citation_count": mem.CitationCount, + "injection_count": mem.InjectionCount, + "access_count": mem.AccessCount, + "recurrence_count": mem.RecurrenceCount, + "consecutive_citation_count": mem.ConsecutiveCitationCount, + // version is the sole persisted-field exception. It is an optimistic- + // concurrency generation, not historical row content; restoring an older + // value would create an ABA window for stale version-checked writers. + } +} + // RestoreRaw performs a full field restore of a memory row for rollback operations. // // Unlike Update (which only touches 4 fields and bumps version), RestoreRaw writes @@ -1725,34 +1816,11 @@ func (s *MemoryStore) RestoreRaw(ctx context.Context, mem *models.Memory) error if mem.ID == 0 { return fmt.Errorf("restoreRaw: memory ID must be non-zero") } - updates := map[string]any{ - "content": mem.Content, - "tags": models.JSONStringArray(mem.Tags), - "source_agent": mem.SourceAgent, - "edited_by": mem.EditedBy, - "status": mem.Status, - "tier": mem.Tier, - "epistemic_type": mem.EpistemicType, - "defeasibility": mem.Defeasibility, - "promotion_target": mem.PromotionTarget, - "privacy_scope": mem.PrivacyScope, - "importance_base": mem.ImportanceBase, - "ts_alpha": mem.TsAlpha, - "ts_beta": mem.TsBeta, - "confidence": mem.Confidence, - "stability": mem.Stability, - "retrievability": mem.Retrievability, - "supersedes_id": mem.SupersedesID, - "superseded_by": mem.SupersededBy, - "deleted_at": mem.DeletedAt, - "updated_at": mem.UpdatedAt, - // version is deliberately not restored — keep current row version so conflicts are auditable. - } result := s.db.WithContext(ctx). Unscoped(). Model(&Memory{}). Where("id = ?", mem.ID). - Updates(updates) + Updates(rawMemoryRestoreUpdates(mem)) if result.Error != nil { return fmt.Errorf("restoreRaw memory id=%d: %w", mem.ID, result.Error) } @@ -1772,33 +1840,11 @@ func (s *MemoryStore) RestoreRawTx(ctx context.Context, tx *gorm.DB, mem *models if mem.ID == 0 { return fmt.Errorf("restoreRawTx: memory ID must be non-zero") } - updates := map[string]any{ - "content": mem.Content, - "tags": models.JSONStringArray(mem.Tags), - "source_agent": mem.SourceAgent, - "edited_by": mem.EditedBy, - "status": mem.Status, - "tier": mem.Tier, - "epistemic_type": mem.EpistemicType, - "defeasibility": mem.Defeasibility, - "promotion_target": mem.PromotionTarget, - "privacy_scope": mem.PrivacyScope, - "importance_base": mem.ImportanceBase, - "ts_alpha": mem.TsAlpha, - "ts_beta": mem.TsBeta, - "confidence": mem.Confidence, - "stability": mem.Stability, - "retrievability": mem.Retrievability, - "supersedes_id": mem.SupersedesID, - "superseded_by": mem.SupersededBy, - "deleted_at": mem.DeletedAt, - "updated_at": mem.UpdatedAt, - } result := tx.WithContext(ctx). Unscoped(). Model(&Memory{}). Where("id = ?", mem.ID). - Updates(updates) + Updates(rawMemoryRestoreUpdates(mem)) if result.Error != nil { return fmt.Errorf("restoreRawTx memory id=%d: %w", mem.ID, result.Error) } diff --git a/internal/db/gorm/memory_store_restore_test.go b/internal/db/gorm/memory_store_restore_test.go new file mode 100644 index 00000000..5cad3013 --- /dev/null +++ b/internal/db/gorm/memory_store_restore_test.go @@ -0,0 +1,151 @@ +package gorm + +import ( + "context" + "encoding/json" + "testing" + "time" + + "github.com/lib/pq" + "github.com/stretchr/testify/require" + "github.com/thebtf/engram/pkg/models" + gormlib "gorm.io/gorm" +) + +func TestMemoryStore_RestoreRawTx_RestoresCompleteSnapshotExceptVersion(t *testing.T) { + db, cleanup := openTestDB(t) + defer cleanup() + ctx := context.Background() + store := NewMemoryStore(&Store{DB: db}) + + anchors := []Memory{ + {Project: "restore-raw-anchor", Content: "supersedes anchor", SourceAgent: "test"}, + {Project: "restore-raw-anchor", Content: "superseded-by anchor", SourceAgent: "test"}, + } + require.NoError(t, db.Create(&anchors).Error) + + createdAt := time.Date(2024, 1, 2, 3, 4, 5, 123456000, time.UTC) + updatedAt := time.Date(2025, 2, 3, 4, 5, 6, 234567000, time.UTC) + deletedAt := time.Date(2025, 2, 4, 4, 5, 6, 345678000, time.UTC) + lastRetrievedAt := time.Date(2025, 1, 20, 1, 2, 3, 456789000, time.UTC) + lastConfirmed := time.Date(2025, 1, 21, 2, 3, 4, 567890000, time.UTC) + reviewAfter := time.Date(2025, 6, 1, 0, 0, 0, 678901000, time.UTC) + validFrom := time.Date(2023, 12, 1, 0, 0, 0, 789012000, time.UTC) + validUntil := time.Date(2034, 12, 1, 0, 0, 0, 890123000, time.UTC) + supersedesID := anchors[0].ID + supersededBy := anchors[1].ID + + row := &Memory{ + Project: "restore-raw-before", + Content: "complete snapshot content", + Tags: models.JSONStringArray{"snapshot", "complete"}, + SourceAgent: "snapshot-agent", + EditedBy: "snapshot-editor", + Status: "superseded", + Tier: "semantic", + EpistemicType: "decision", + Defeasibility: "fast", + PromotionTarget: "procedural", + PrivacyScope: "private", + SourceWorkstationID: "workstation-before", + SourceSessions: pq.StringArray{"session-before-a", "session-before-b"}, + OwnerPrincipal: "owner-before", + OwnerPrincipalKind: "human", + AgentVisibility: "private", + Domain: "architecture", + CreatedAt: createdAt, + UpdatedAt: updatedAt, + DeletedAt: &deletedAt, + LastRetrievedAt: &lastRetrievedAt, + LastConfirmed: &lastConfirmed, + ReviewAfter: &reviewAfter, + ValidFrom: &validFrom, + ValidUntil: &validUntil, + SupersedesID: &supersedesID, + SupersededBy: &supersededBy, + ImportanceBase: 0.81, + TsAlpha: 2.25, + TsBeta: 3.5, + Confidence: 0.91, + Stability: 45.5, + Retrievability: 0.63, + Version: 7, + CitationCount: 11, + InjectionCount: 12, + AccessCount: 13, + RecurrenceCount: 14, + ConsecutiveCitationCount: 15, + } + require.NoError(t, db.Create(row).Error) + t.Cleanup(func() { + _ = db.Unscoped().Delete(&Memory{}, "id IN ?", []int64{row.ID, anchors[0].ID, anchors[1].ID}).Error + }) + + var capturedRow Memory + require.NoError(t, db.Unscoped().Where("id = ?", row.ID).First(&capturedRow).Error) + encodedBefore, err := json.Marshal(&capturedRow) + require.NoError(t, err) + var before models.Memory + require.NoError(t, json.Unmarshal(encodedBefore, &before)) + + mutatedAt := time.Date(2026, 3, 4, 5, 6, 7, 901234000, time.UTC) + mutatedSupersedesID := anchors[1].ID + mutatedSupersededBy := anchors[0].ID + const mutatedVersion = 19 + require.NoError(t, db.Unscoped().Model(&Memory{}).Where("id = ?", row.ID).Updates(map[string]any{ + "project": "restore-raw-mutated", + "content": "mutated content", + "tags": models.JSONStringArray{"mutated"}, + "source_agent": "mutated-agent", + "edited_by": "mutated-editor", + "status": "active", + "tier": "episodic", + "epistemic_type": "observation", + "defeasibility": "slow", + "promotion_target": "none", + "privacy_scope": "global", + "source_workstation_id": "workstation-mutated", + "source_sessions": pq.StringArray{"session-mutated"}, + "owner_principal": "owner-mutated", + "owner_principal_kind": "service", + "agent_visibility": "shared", + "domain": "mutated-domain", + "created_at": mutatedAt, + "updated_at": mutatedAt, + "deleted_at": nil, + "last_retrieved_at": mutatedAt, + "last_confirmed": mutatedAt, + "review_after": mutatedAt, + "valid_from": mutatedAt, + "valid_until": mutatedAt.Add(24 * time.Hour), + "supersedes_id": mutatedSupersedesID, + "superseded_by": mutatedSupersededBy, + "importance_base": 0.11, + "ts_alpha": 8.25, + "ts_beta": 9.5, + "confidence": 0.21, + "stability": 5.5, + "retrievability": 0.13, + "version": mutatedVersion, + "citation_count": 101, + "injection_count": 102, + "access_count": 103, + "recurrence_count": 104, + "consecutive_citation_count": 105, + }).Error) + + require.NoError(t, db.WithContext(ctx).Transaction(func(tx *gormlib.DB) error { + return store.RestoreRawTx(ctx, tx, &before) + })) + + var restoredRow Memory + require.NoError(t, db.Unscoped().Where("id = ?", row.ID).First(&restoredRow).Error) + encodedRestored, err := json.Marshal(&restoredRow) + require.NoError(t, err) + var restored models.Memory + require.NoError(t, json.Unmarshal(encodedRestored, &restored)) + + before.Version = mutatedVersion + require.Equal(t, before, restored, + "rollback must restore the complete persisted snapshot; version alone stays monotonic to prevent ABA") +} diff --git a/internal/db/gorm/snapshot_store.go b/internal/db/gorm/snapshot_store.go index 9ad4066d..45cd6e2a 100644 --- a/internal/db/gorm/snapshot_store.go +++ b/internal/db/gorm/snapshot_store.go @@ -146,6 +146,7 @@ func fromDomainSnapshot(s *models.BulkOpSnapshot) *snapshotRow { bs = JSONRaw(`{}`) } r := &snapshotRow{ + CreatedAt: s.CreatedAt.UTC(), SnapshotID: s.SnapshotID, OpType: string(s.OpType), Actor: s.Actor, @@ -205,6 +206,23 @@ func (s *SnapshotStore) Get(ctx context.Context, snapshotID string) (*models.Bul return toDomainSnapshot(&row), nil } +// GetForUpdateTx retrieves and locks a snapshot row inside tx. Rollback uses +// this as its first lock so concurrent attempts cannot both evaluate a +// committed snapshot and proceed toward restore. +func (s *SnapshotStore) GetForUpdateTx(ctx context.Context, tx *gorm.DB, snapshotID string) (*models.BulkOpSnapshot, error) { + if tx == nil { + return nil, fmt.Errorf("snapshot_store get_for_update %q: transaction must not be nil", snapshotID) + } + var row snapshotRow + if err := tx.WithContext(ctx). + Clauses(clause.Locking{Strength: "UPDATE"}). + Where("snapshot_id = ?", snapshotID). + First(&row).Error; err != nil { + return nil, fmt.Errorf("snapshot_store get_for_update %q: %w", snapshotID, err) + } + return toDomainSnapshot(&row), nil +} + // GetByID retrieves a snapshot by its numeric primary key. // Returns gorm.ErrRecordNotFound if absent. func (s *SnapshotStore) GetByID(ctx context.Context, id int64) (*models.BulkOpSnapshot, error) { @@ -241,13 +259,22 @@ func (s *SnapshotStore) List(ctx context.Context, opType models.SnapshotOpType, // MarkRolledBack transitions the snapshot status to rolled_back and sets rolled_back_at. func (s *SnapshotStore) MarkRolledBack(ctx context.Context, snapshotID string) error { - now := time.Now().UTC() - res := s.db.WithContext(ctx). + return s.MarkRolledBackTx(ctx, s.db, snapshotID, time.Now().UTC()) +} + +// MarkRolledBackTx performs the committed -> rolled_back compare-and-set on tx. +// The caller supplies the timestamp so the status transition can be part of a +// larger atomic rollback transaction. +func (s *SnapshotStore) MarkRolledBackTx(ctx context.Context, tx *gorm.DB, snapshotID string, rolledBackAt time.Time) error { + if tx == nil { + return fmt.Errorf("snapshot_store mark_rolled_back %q: transaction must not be nil", snapshotID) + } + res := tx.WithContext(ctx). Model(&snapshotRow{}). Where("snapshot_id = ? AND status = 'committed'", snapshotID). Updates(map[string]any{ "status": string(models.SnapshotStatusRolledBack), - "rolled_back_at": now, + "rolled_back_at": rolledBackAt.UTC(), }) if res.Error != nil { return fmt.Errorf("snapshot_store mark_rolled_back %q: %w", snapshotID, res.Error) diff --git a/internal/db/gorm/snapshot_store_test.go b/internal/db/gorm/snapshot_store_test.go index 9ff7a119..d8713e92 100644 --- a/internal/db/gorm/snapshot_store_test.go +++ b/internal/db/gorm/snapshot_store_test.go @@ -3,6 +3,7 @@ package gorm import ( "context" "encoding/json" + "fmt" "os" "testing" "time" @@ -145,6 +146,38 @@ func TestSnapshotStore_NilSnapshot(t *testing.T) { require.Error(t, err, "Create with nil must return error") } +func TestSnapshotStore_Create_PreservesAuthoritativeCaptureTimestamp(t *testing.T) { + db, cleanup := openTestDB(t) + defer cleanup() + + store := NewSnapshotStore(db) + ctx := context.Background() + capturedAt := time.Date(2025, 7, 8, 9, 10, 11, 123456000, time.UTC) + snapshotID := fmt.Sprintf("test-store-authoritative-capture-time-%d", time.Now().UnixNano()) + t.Cleanup(func() { + _ = db.Exec("DELETE FROM bulk_op_snapshots WHERE snapshot_id = ?", snapshotID).Error + }) + + snap, err := models.NewBulkOpSnapshot( + snapshotID, + models.SnapshotOpBulkDelete, + "test-actor", + json.RawMessage(`{}`), + ) + require.NoError(t, err) + snap.CreatedAt = capturedAt + + created, err := store.Create(ctx, snap) + require.NoError(t, err) + require.True(t, created.CreatedAt.Equal(capturedAt), + "the DB row must use the caller's authoritative capture boundary, not a second clock read") + + loaded, err := store.Get(ctx, snapshotID) + require.NoError(t, err) + require.True(t, loaded.CreatedAt.Equal(capturedAt), + "the authoritative capture timestamp must round-trip exactly") +} + // TestInt64Array_Roundtrip verifies the Int64Array Value/Scan cycle. func TestInt64Array_Roundtrip(t *testing.T) { cases := []struct { From da97c88be6753703bac112be8431dc373e4d9dda Mon Sep 17 00:00:00 2001 From: Kirill Turanskiy Date: Fri, 10 Jul 2026 07:21:24 +0300 Subject: [PATCH 007/111] fix(auth): serialize initial admin setup --- .../db-auth-rework-maker-2026-07-10.md | 155 ++++++++++ internal/db/gorm/user_store.go | 56 ++++ internal/db/gorm/user_store_test.go | 192 ++++++++++++ internal/worker/auth_handlers.go | 15 +- .../worker/auth_handlers_lifecycle_test.go | 289 ++++++++++++++++++ 5 files changed, 706 insertions(+), 1 deletion(-) create mode 100644 .agent/reports/db-auth-rework-maker-2026-07-10.md diff --git a/.agent/reports/db-auth-rework-maker-2026-07-10.md b/.agent/reports/db-auth-rework-maker-2026-07-10.md new file mode 100644 index 00000000..5924e4d7 --- /dev/null +++ b/.agent/reports/db-auth-rework-maker-2026-07-10.md @@ -0,0 +1,155 @@ +# DB-AUTH rework maker report + +Date: 2026-07-10 +Parent commit: `b0c4ab4c07a4c6f512728da52b2e132bacd0289c` +Branch: `work/prc-db-auth` +Worktree: `D:\Dev\engram\.agent\worktrees\prc-db-auth` + +## Outcome + +Concurrent first-admin setup is now serialized by PostgreSQL across independent server processes. Exactly one setup request can create the initial administrator; a concurrent loser receives the typed `ErrInitialAdminSetupAlreadyCompleted` store error and HTTP `409 Conflict` from the real handler. + +The password hash is computed before the database lock. A cheap preflight count remains in the public handler to avoid turning a completed setup endpoint into a bcrypt work amplifier, while the count performed after `pg_advisory_xact_lock` inside `CreateInitialAdmin` is authoritative. + +## Implementation + +- Added `UserStore.CreateInitialAdmin(ctx, email, passwordHash)`. +- Uses a transaction-scoped two-key PostgreSQL advisory lock with stable `ENGR` / `ADMI` keys. +- Uses explicit `READ COMMITTED` transaction isolation so the zero-user check observes a setup committed while this transaction waited for the lock. +- Counts users and inserts the initial admin in the same transaction. +- Returns the typed sentinel `ErrInitialAdminSetupAlreadyCompleted` after the serialized check observes an existing user. +- Relies on transaction rollback for lock cancellation and insert failures, leaving setup retryable. +- Maps the typed losing result to HTTP 409 in `handleSetup`; unrelated database failures remain HTTP 500. +- Added a test-only handler seam after bcrypt and before the store call so both real requests deterministically reach the authoritative database operation before either proceeds. +- Preserved the existing last-active-admin guard and its lifecycle tests. + +## TDD evidence + +### RED: store contract absent + +Timestamp: `2026-07-10T03:58:49.4314543Z` + +```powershell +$env:DATABASE_DSN='postgres://engram:engram@localhost:55432/engram_prc_auth_rework?sslmode=disable'; go test ./internal/db/gorm -run '^TestUserStore_CreateInitialAdmin_ConcurrentIndependentConnectionsExactlyOne$' -count=1 -v +``` + +Exit: `1`. The new regression test did not compile because `CreateInitialAdmin` and `ErrInitialAdminSetupAlreadyCompleted` did not exist. + +### RED: real handler allowed two initial admins + +Timestamp: `2026-07-10T04:02:36.5763198Z` + +```powershell +$env:DATABASE_DSN='postgres://engram:engram@localhost:55432/engram_prc_auth_rework?sslmode=disable'; go test ./internal/worker -run '^TestAuthHandlersLifecycle_ConcurrentInitialAdminSetupExactlyOne$' -count=1 -v +``` + +Exit: `1`. Failure at iteration 0: expected one HTTP 201 response, actual two. + +### GREEN + +The focused store regression passed after adding the serialized store method (`PASS`, package `0.317s`). The focused real-handler regression then passed after routing setup through that method (`PASS`, test `3.60s`, package `3.698s`). + +After adding the deterministic post-bcrypt barrier, both concurrent handler cases passed: + +```powershell +$env:DATABASE_DSN='postgres://engram:engram@localhost:55432/engram_prc_auth_rework?sslmode=disable'; go test ./internal/worker -run '^TestAuthHandlersLifecycle_(ConcurrentInitialAdminSetupExactlyOne|ConcurrentInitialAdminSetupDuplicateEmailFailsSafely)$' -count=1 -v +``` + +Exit: `0`; package `4.024s`. + +### Prove-It sentinel + +`handleSetup` was temporarily changed back to the non-serialized `CreateUser` call while keeping the deterministic barrier. The focused regression failed immediately: + +```powershell +$env:DATABASE_DSN='postgres://engram:engram@localhost:55432/engram_prc_auth_rework?sslmode=disable'; go test ./internal/worker -run '^TestAuthHandlersLifecycle_ConcurrentInitialAdminSetupExactlyOne$' -count=1 -v +``` + +Exit: `1`; iteration 0 expected one created response but observed two. The production call was restored to `CreateInitialAdmin`; the identical command then exited `0` (`PASS`, package `3.709s`). No sentinel change remains in the diff. + +## Final verification on restored production code + +Store regressions plus existing last-admin guard, repeated three times: + +```powershell +$env:DATABASE_DSN='postgres://engram:engram@localhost:55432/engram_prc_auth_rework?sslmode=disable'; go test ./internal/db/gorm -run '^TestUserStore_(CreateInitialAdmin|UpdateUserWithLastAdminGuard)_' -count=3 +``` + +Exit: `0`; package `4.052s`. + +Real handler setup regressions plus existing last-admin lifecycle tests, repeated three times: + +```powershell +$env:DATABASE_DSN='postgres://engram:engram@localhost:55432/engram_prc_auth_rework?sslmode=disable'; go test ./internal/worker -run '^TestAuthHandlersLifecycle_(ConcurrentInitialAdminSetup|InitialAdminSetup|LastAdminDemoteRaceLeavesOneAdmin|DisabledAdminCanBeDemotedWithoutLastAdminError)' -count=3 +``` + +Exit: `0`; package `15.604s`. + +Store race detector: + +```powershell +$env:DATABASE_DSN='postgres://engram:engram@localhost:55432/engram_prc_auth_rework?sslmode=disable'; go test -race ./internal/db/gorm -run '^TestUserStore_(CreateInitialAdmin|UpdateUserWithLastAdminGuard)_' -count=1 +``` + +Exit: `0`; package `2.676s`. + +Handler race detector: + +```powershell +$env:DATABASE_DSN='postgres://engram:engram@localhost:55432/engram_prc_auth_rework?sslmode=disable'; go test -race ./internal/worker -run '^TestAuthHandlersLifecycle_(ConcurrentInitialAdminSetup|InitialAdminSetup|LastAdminDemoteRaceLeavesOneAdmin|DisabledAdminCanBeDemotedWithoutLastAdminError)' -count=1 +``` + +Exit: `0`; package `54.318s`. + +Static checks: + +```powershell +go vet ./internal/db/gorm ./internal/worker +git diff --check +``` + +Both exited `0`. Serena Go diagnostics at warning-or-higher severity returned `{}` for all four changed source/test files. + +## Failure-path and residue coverage + +- Two independent GORM stores and SQL pools, different emails: one success, one typed already-completed error, exactly one active admin, repeated 20 times. +- Two independent real handlers and SQL pools, different emails: one 201, one 409, exactly one user, one active admin, one setup audit event, and zero sessions, repeated 20 times. +- Concurrent duplicate email: one success and one typed/409 loser without duplicate residue. +- Context cancellation while waiting for the advisory lock: no user residue; a later setup succeeds. +- Store insert failure after acquiring the lock: transaction rollback leaves zero users; a later setup succeeds. +- Invalid request, handler insert failure, and cancelled request: no user/audit residue; a later setup succeeds. +- Setup after completion remains 409 and does not add a user or setup audit event. + +## Disclosed command error + +One earlier worker race command used the mistyped database name `engram_prc-db-auth` and exited `1` with `database does not exist`. This was an operator DSN typo, not a product/test failure. The command was immediately rerun with the dedicated database `engram_prc_auth_rework` and passed; the final race result above is from the corrected command and final code. + +## Database hygiene + +Only the dedicated database `engram_prc_auth_rework` was used. No full GORM and worker package tests were run concurrently. + +Before deletion: + +- leftover schemas matching `initial_admin_test_%` or `auth_setup_test_%`: `0` +- active sessions for `engram_prc_auth_rework`: `0` + +Then: + +```sql +DROP DATABASE IF EXISTS engram_prc_auth_rework WITH (FORCE); +``` + +Post-cleanup verification: + +- database rows in `pg_database`: `0` +- active sessions in `pg_stat_activity`: `0` + +No other test database, secret, container state, or external system was modified. + +## Changed paths + +- `internal/db/gorm/user_store.go` +- `internal/db/gorm/user_store_test.go` +- `internal/worker/auth_handlers.go` +- `internal/worker/auth_handlers_lifecycle_test.go` +- `.agent/reports/db-auth-rework-maker-2026-07-10.md` diff --git a/internal/db/gorm/user_store.go b/internal/db/gorm/user_store.go index 1c33b7b5..f72cff3e 100644 --- a/internal/db/gorm/user_store.go +++ b/internal/db/gorm/user_store.go @@ -1,6 +1,8 @@ package gorm import ( + "context" + "database/sql" "fmt" "time" @@ -8,6 +10,23 @@ import ( "gorm.io/gorm/clause" ) +const ( + initialAdminSetupLockNamespace int32 = 0x454e4752 // "ENGR" + initialAdminSetupLockOperation int32 = 0x41444d49 // "ADMI" +) + +// InitialAdminSetupAlreadyCompletedError reports that first-user setup lost +// the serialized zero-user check because another process completed it first. +type InitialAdminSetupAlreadyCompletedError struct{} + +func (*InitialAdminSetupAlreadyCompletedError) Error() string { + return "setup already completed" +} + +// ErrInitialAdminSetupAlreadyCompleted is returned when an initial admin +// already exists by the time the cross-process setup lock is acquired. +var ErrInitialAdminSetupAlreadyCompleted = &InitialAdminSetupAlreadyCompletedError{} + // UserStore provides CRUD operations for dashboard users. type UserStore struct { db *gorm.DB @@ -32,6 +51,43 @@ func (s *UserStore) CreateUser(email, passwordHash, role string) (*User, error) return user, nil } +// CreateInitialAdmin atomically creates the first user as an administrator. +// PostgreSQL transaction-scoped advisory locking serializes setup across all +// server processes connected to the same database. +func (s *UserStore) CreateInitialAdmin(ctx context.Context, email, passwordHash string) (*User, error) { + user := &User{ + Email: email, + PasswordHash: passwordHash, + Role: DashboardRoleAdmin, + CreatedAt: time.Now(), + } + err := s.db.WithContext(ctx).Transaction(func(tx *gorm.DB) error { + if err := tx.Exec( + "SELECT pg_advisory_xact_lock(?, ?)", + initialAdminSetupLockNamespace, + initialAdminSetupLockOperation, + ).Error; err != nil { + return fmt.Errorf("lock initial admin setup: %w", err) + } + + var count int64 + if err := tx.Model(&User{}).Count(&count).Error; err != nil { + return fmt.Errorf("count users for initial admin setup: %w", err) + } + if count > 0 { + return ErrInitialAdminSetupAlreadyCompleted + } + if err := tx.Create(user).Error; err != nil { + return fmt.Errorf("create initial admin: %w", err) + } + return nil + }, &sql.TxOptions{Isolation: sql.LevelReadCommitted}) + if err != nil { + return nil, err + } + return user, nil +} + // GetUserByEmail looks up a user by email address. func (s *UserStore) GetUserByEmail(email string) (*User, error) { var user User diff --git a/internal/db/gorm/user_store_test.go b/internal/db/gorm/user_store_test.go index 5dc2a306..6daae33c 100644 --- a/internal/db/gorm/user_store_test.go +++ b/internal/db/gorm/user_store_test.go @@ -55,6 +55,198 @@ func openIsolatedUserStore(t *testing.T) (*UserStore, *gormio.DB) { return NewUserStore(db), db } +func openIsolatedUserStorePair(t *testing.T) (*UserStore, *UserStore, *gormio.DB) { + t.Helper() + dsn := os.Getenv("DATABASE_DSN") + if dsn == "" { + t.Skip("DATABASE_DSN not set, skipping user store integration test") + } + + schema := fmt.Sprintf("initial_admin_test_%d", time.Now().UnixNano()) + rootDB, err := gormio.Open(postgres.Open(dsn), &gormio.Config{}) + require.NoError(t, err) + rootSQLDB, err := rootDB.DB() + require.NoError(t, err) + rootSQLDB.SetMaxOpenConns(1) + rootSQLDB.SetMaxIdleConns(1) + require.NoError(t, rootDB.Exec(fmt.Sprintf(`CREATE SCHEMA %q`, schema)).Error) + t.Cleanup(func() { + require.NoError(t, rootDB.Exec(fmt.Sprintf(`DROP SCHEMA %q CASCADE`, schema)).Error) + _ = rootSQLDB.Close() + }) + + parsedDSN, err := url.Parse(dsn) + require.NoError(t, err) + query := parsedDSN.Query() + query.Set("search_path", schema) + parsedDSN.RawQuery = query.Encode() + schemaDSN := parsedDSN.String() + + dbA, err := gormio.Open(postgres.Open(schemaDSN), &gormio.Config{}) + require.NoError(t, err) + sqlDBA, err := dbA.DB() + require.NoError(t, err) + sqlDBA.SetMaxOpenConns(2) + sqlDBA.SetMaxIdleConns(1) + t.Cleanup(func() { _ = sqlDBA.Close() }) + + dbB, err := gormio.Open(postgres.Open(schemaDSN), &gormio.Config{}) + require.NoError(t, err) + sqlDBB, err := dbB.DB() + require.NoError(t, err) + sqlDBB.SetMaxOpenConns(2) + sqlDBB.SetMaxIdleConns(1) + t.Cleanup(func() { _ = sqlDBB.Close() }) + + require.NoError(t, dbA.AutoMigrate(&User{})) + return NewUserStore(dbA), NewUserStore(dbB), dbA +} + +func TestUserStore_CreateInitialAdmin_ConcurrentIndependentConnectionsExactlyOne(t *testing.T) { + storeA, storeB, db := openIsolatedUserStorePair(t) + + type result struct { + user *User + err error + } + for iteration := 0; iteration < 20; iteration++ { + require.NoError(t, db.Exec("DELETE FROM users").Error) + start := make(chan struct{}) + results := make(chan result, 2) + for index, store := range []*UserStore{storeA, storeB} { + go func(index int, store *UserStore) { + <-start + user, createErr := store.CreateInitialAdmin( + context.Background(), + fmt.Sprintf("initial-%d-%d@example.com", iteration, index), + "hash", + ) + results <- result{user: user, err: createErr} + }(index, store) + } + close(start) + + successes := 0 + alreadyCompleted := 0 + for range 2 { + got := <-results + if got.err == nil { + successes++ + require.NotNil(t, got.user) + require.Equal(t, DashboardRoleAdmin, got.user.Role) + require.False(t, got.user.Disabled) + continue + } + require.ErrorIs(t, got.err, ErrInitialAdminSetupAlreadyCompleted) + alreadyCompleted++ + require.Nil(t, got.user) + } + require.Equal(t, 1, successes, "iteration %d", iteration) + require.Equal(t, 1, alreadyCompleted, "iteration %d", iteration) + + count, err := storeA.CountUsers() + require.NoError(t, err) + require.Equal(t, int64(1), count, "iteration %d", iteration) + count, err = storeA.CountAdmins() + require.NoError(t, err) + require.Equal(t, int64(1), count, "iteration %d", iteration) + } +} + +func TestUserStore_CreateInitialAdmin_AlreadyCompletedReturnsTypedError(t *testing.T) { + storeA, storeB, _ := openIsolatedUserStorePair(t) + + created, err := storeA.CreateInitialAdmin(context.Background(), "first@example.com", "hash") + require.NoError(t, err) + require.NotNil(t, created) + + duplicate, err := storeB.CreateInitialAdmin(context.Background(), "second@example.com", "hash") + require.ErrorIs(t, err, ErrInitialAdminSetupAlreadyCompleted) + require.Nil(t, duplicate) + + count, err := storeA.CountUsers() + require.NoError(t, err) + require.Equal(t, int64(1), count) +} + +func TestUserStore_CreateInitialAdmin_ConcurrentDuplicateEmailFailsSafely(t *testing.T) { + storeA, storeB, db := openIsolatedUserStorePair(t) + start := make(chan struct{}) + results := make(chan error, 2) + for _, store := range []*UserStore{storeA, storeB} { + go func(store *UserStore) { + <-start + _, createErr := store.CreateInitialAdmin(context.Background(), "same@example.com", "hash") + results <- createErr + }(store) + } + close(start) + + successes := 0 + alreadyCompleted := 0 + for range 2 { + createErr := <-results + if createErr == nil { + successes++ + continue + } + require.ErrorIs(t, createErr, ErrInitialAdminSetupAlreadyCompleted) + alreadyCompleted++ + } + require.Equal(t, 1, successes) + require.Equal(t, 1, alreadyCompleted) + + var count int64 + require.NoError(t, db.Model(&User{}).Where("email = ?", "same@example.com").Count(&count).Error) + require.Equal(t, int64(1), count) +} + +func TestUserStore_CreateInitialAdmin_ContextCancellationLeavesSetupRetryable(t *testing.T) { + _, storeB, db := openIsolatedUserStorePair(t) + lockTx := db.Begin() + require.NoError(t, lockTx.Error) + require.NoError(t, lockTx.Exec( + "SELECT pg_advisory_xact_lock(?, ?)", + initialAdminSetupLockNamespace, + initialAdminSetupLockOperation, + ).Error) + + ctx, cancel := context.WithTimeout(context.Background(), 100*time.Millisecond) + defer cancel() + created, err := storeB.CreateInitialAdmin(ctx, "cancelled@example.com", "hash") + require.Error(t, err) + require.ErrorIs(t, err, context.DeadlineExceeded) + require.Nil(t, created) + require.NoError(t, lockTx.Rollback().Error) + + count, err := storeB.CountUsers() + require.NoError(t, err) + require.Zero(t, count) + created, err = storeB.CreateInitialAdmin(context.Background(), "retry@example.com", "hash") + require.NoError(t, err) + require.NotNil(t, created) +} + +func TestUserStore_CreateInitialAdmin_InsertFailureRollsBackAndLeavesSetupRetryable(t *testing.T) { + storeA, _, _ := openIsolatedUserStorePair(t) + + created, err := storeA.CreateInitialAdmin( + context.Background(), + "too-long-hash@example.com", + strings.Repeat("x", 256), + ) + require.Error(t, err) + require.NotErrorIs(t, err, ErrInitialAdminSetupAlreadyCompleted) + require.Nil(t, created) + + count, err := storeA.CountUsers() + require.NoError(t, err) + require.Zero(t, count) + created, err = storeA.CreateInitialAdmin(context.Background(), "retry@example.com", "hash") + require.NoError(t, err) + require.NotNil(t, created) +} + func TestUserStore_UpdateUserWithLastAdminGuard_ConcurrentDemoteDisableLeavesOneAdmin(t *testing.T) { users, db := openIsolatedUserStore(t) diff --git a/internal/worker/auth_handlers.go b/internal/worker/auth_handlers.go index e5605336..cae0e88e 100644 --- a/internal/worker/auth_handlers.go +++ b/internal/worker/auth_handlers.go @@ -47,6 +47,9 @@ type AuthHandlers struct { // beforeAccessSessionCheck is a test seam used by the lifecycle race tests. beforeAccessSessionCheck func() + // beforeInitialAdminCreate is a test seam used to align concurrent setup + // requests after bcrypt but before the authoritative database operation. + beforeInitialAdminCreate func() } // NewAuthHandlers creates AuthHandlers wired to the given stores. @@ -458,6 +461,9 @@ func (h *AuthHandlers) handleSetup(w http.ResponseWriter, r *http.Request) { if !h.requireStores(w, true, false, false, false) { return } + // Keep the cheap preflight so a completed public setup endpoint cannot be + // used as a bcrypt work amplifier. CreateInitialAdmin repeats this check + // under the cross-process transaction lock and remains authoritative. count, err := h.users.CountUsers() if err != nil { log.Error().Err(err).Msg("auth: failed to count users during setup") @@ -484,9 +490,16 @@ func (h *AuthHandlers) handleSetup(w http.ResponseWriter, r *http.Request) { writeAuthJSONError(w, http.StatusInternalServerError, "internal error") return } + if h.beforeInitialAdminCreate != nil { + h.beforeInitialAdminCreate() + } - user, err := h.users.CreateUser(strings.TrimSpace(req.Email), string(hash), gormdb.DashboardRoleAdmin) + user, err := h.users.CreateInitialAdmin(r.Context(), strings.TrimSpace(req.Email), string(hash)) if err != nil { + if errors.Is(err, gormdb.ErrInitialAdminSetupAlreadyCompleted) { + writeAuthJSONError(w, http.StatusConflict, err.Error()) + return + } log.Error().Err(err).Str("email", req.Email).Msg("auth: failed to create admin user during setup") writeAuthJSONError(w, http.StatusInternalServerError, "failed to create user") return diff --git a/internal/worker/auth_handlers_lifecycle_test.go b/internal/worker/auth_handlers_lifecycle_test.go index eaad56ac..fc5764ef 100644 --- a/internal/worker/auth_handlers_lifecycle_test.go +++ b/internal/worker/auth_handlers_lifecycle_test.go @@ -7,6 +7,7 @@ import ( "fmt" "net/http" "net/http/httptest" + "net/url" "os" "strings" "sync" @@ -18,6 +19,8 @@ import ( authpkg "github.com/thebtf/engram/internal/auth" gormdb "github.com/thebtf/engram/internal/db/gorm" + "gorm.io/driver/postgres" + gormio "gorm.io/gorm" ) type authLifecycleEnv struct { @@ -49,6 +52,129 @@ func openAuthLifecycleEnv(t *testing.T) *authLifecycleEnv { return env } +func openIsolatedAuthSetupPair(t *testing.T) (*authLifecycleEnv, *authLifecycleEnv, *gormio.DB) { + t.Helper() + dsn := os.Getenv("DATABASE_DSN") + if dsn == "" { + t.Skip("DATABASE_DSN not set, skipping auth setup integration test") + } + + schema := fmt.Sprintf("auth_setup_test_%d", time.Now().UnixNano()) + rootDB, err := gormio.Open(postgres.Open(dsn), &gormio.Config{}) + require.NoError(t, err) + rootSQLDB, err := rootDB.DB() + require.NoError(t, err) + rootSQLDB.SetMaxOpenConns(1) + rootSQLDB.SetMaxIdleConns(1) + require.NoError(t, rootDB.Exec(fmt.Sprintf(`CREATE SCHEMA %q`, schema)).Error) + t.Cleanup(func() { + require.NoError(t, rootDB.Exec(fmt.Sprintf(`DROP SCHEMA %q CASCADE`, schema)).Error) + _ = rootSQLDB.Close() + }) + + parsedDSN, err := url.Parse(dsn) + require.NoError(t, err) + query := parsedDSN.Query() + query.Set("search_path", schema) + parsedDSN.RawQuery = query.Encode() + schemaDSN := parsedDSN.String() + + openDB := func() *gormio.DB { + db, openErr := gormio.Open(postgres.Open(schemaDSN), &gormio.Config{}) + require.NoError(t, openErr) + sqlDB, sqlErr := db.DB() + require.NoError(t, sqlErr) + sqlDB.SetMaxOpenConns(2) + sqlDB.SetMaxIdleConns(1) + t.Cleanup(func() { _ = sqlDB.Close() }) + return db + } + dbA := openDB() + dbB := openDB() + require.NoError(t, dbA.AutoMigrate( + &gormdb.User{}, + &gormdb.Invitation{}, + &gormdb.AuthSession{}, + &gormdb.AuditLogEntry{}, + )) + + newEnv := func(db *gormio.DB) *authLifecycleEnv { + store := &gormdb.Store{DB: db} + env := &authLifecycleEnv{ + store: store, + users: gormdb.NewUserStore(db), + invitations: gormdb.NewInvitationStore(db), + sessions: gormdb.NewAuthSessionStore(db), + access: gormdb.NewDomainOwnerStore(store), + } + env.handlers = NewAuthHandlers(env.users, env.invitations, env.sessions, env.access) + return env + } + return newEnv(dbA), newEnv(dbB), dbA +} + +func resetIsolatedAuthSetup(t *testing.T, db *gormio.DB) { + t.Helper() + require.NoError(t, db.Exec("DELETE FROM sessions").Error) + require.NoError(t, db.Exec("DELETE FROM invitations").Error) + require.NoError(t, db.Exec("DELETE FROM audit_log").Error) + require.NoError(t, db.Exec("DELETE FROM users").Error) +} + +func runConcurrentInitialAdminSetupRequests( + t *testing.T, + handlers []*AuthHandlers, + payloads [][]byte, +) []*httptest.ResponseRecorder { + t.Helper() + require.Len(t, payloads, len(handlers)) + + ready := make(chan struct{}, len(handlers)) + release := make(chan struct{}) + barrier := func() { + ready <- struct{}{} + <-release + } + for _, handler := range handlers { + handler.beforeInitialAdminCreate = barrier + } + defer func() { + for _, handler := range handlers { + handler.beforeInitialAdminCreate = nil + } + }() + + recorders := make([]*httptest.ResponseRecorder, len(handlers)) + start := make(chan struct{}) + var wg sync.WaitGroup + for index := range handlers { + recorders[index] = httptest.NewRecorder() + wg.Add(1) + go func(index int) { + defer wg.Done() + <-start + req := httptest.NewRequest(http.MethodPost, "/api/auth/setup", bytes.NewReader(payloads[index])) + handlers[index].handleSetup(recorders[index], req) + }(index) + } + close(start) + + deadline := time.NewTimer(10 * time.Second) + defer deadline.Stop() + for range handlers { + select { + case <-ready: + case <-deadline.C: + close(release) + wg.Wait() + t.Fatal("setup request did not reach the pre-create barrier") + } + } + close(release) + wg.Wait() + return recorders +} + func requestWithRoute(method, path string, body []byte, id authpkg.Identity, params map[string]string) *http.Request { req := httptest.NewRequest(method, path, bytes.NewReader(body)) ctx := buildAuthCtx(req.Context(), id) @@ -62,6 +188,169 @@ func requestWithRoute(method, path string, body []byte, id authpkg.Identity, par return req.WithContext(ctx) } +func TestAuthHandlersLifecycle_ConcurrentInitialAdminSetupExactlyOne(t *testing.T) { + envA, envB, db := openIsolatedAuthSetupPair(t) + + for iteration := 0; iteration < 20; iteration++ { + resetIsolatedAuthSetup(t, db) + payloads := [][]byte{ + []byte(fmt.Sprintf(`{"email":"initial-%d-a@example.com","password":"password-123"}`, iteration)), + []byte(fmt.Sprintf(`{"email":"initial-%d-b@example.com","password":"password-123"}`, iteration)), + } + handlers := []*AuthHandlers{envA.handlers, envB.handlers} + recorders := runConcurrentInitialAdminSetupRequests(t, handlers, payloads) + + created := 0 + conflicts := 0 + for _, recorder := range recorders { + switch recorder.Code { + case http.StatusCreated: + created++ + case http.StatusConflict: + conflicts++ + require.Contains(t, recorder.Body.String(), "setup already completed") + default: + t.Fatalf("iteration %d unexpected setup status=%d body=%s", iteration, recorder.Code, recorder.Body.String()) + } + } + require.Equal(t, 1, created, "iteration %d", iteration) + require.Equal(t, 1, conflicts, "iteration %d", iteration) + + var userCount int64 + require.NoError(t, db.Model(&gormdb.User{}).Count(&userCount).Error) + require.Equal(t, int64(1), userCount, "iteration %d", iteration) + var adminCount int64 + require.NoError(t, db.Model(&gormdb.User{}).Where("role = ? AND disabled = false", gormdb.DashboardRoleAdmin).Count(&adminCount).Error) + require.Equal(t, int64(1), adminCount, "iteration %d", iteration) + var auditCount int64 + require.NoError(t, db.Model(&gormdb.AuditLogEntry{}).Where("action = ?", "auth_setup_completed").Count(&auditCount).Error) + require.Equal(t, int64(1), auditCount, "iteration %d", iteration) + var sessionCount int64 + require.NoError(t, db.Model(&gormdb.AuthSession{}).Count(&sessionCount).Error) + require.Zero(t, sessionCount, "iteration %d", iteration) + } + + recorder := httptest.NewRecorder() + req := httptest.NewRequest(http.MethodPost, "/api/auth/setup", bytes.NewBufferString(`{"email":"after@example.com","password":"password-123"}`)) + envA.handlers.handleSetup(recorder, req) + require.Equal(t, http.StatusConflict, recorder.Code, recorder.Body.String()) + require.Contains(t, recorder.Body.String(), "setup already completed") + + var userCount int64 + require.NoError(t, db.Model(&gormdb.User{}).Count(&userCount).Error) + require.Equal(t, int64(1), userCount) + var auditCount int64 + require.NoError(t, db.Model(&gormdb.AuditLogEntry{}).Where("action = ?", "auth_setup_completed").Count(&auditCount).Error) + require.Equal(t, int64(1), auditCount) +} + +func TestAuthHandlersLifecycle_ConcurrentInitialAdminSetupDuplicateEmailFailsSafely(t *testing.T) { + envA, envB, db := openIsolatedAuthSetupPair(t) + payload := []byte(`{"email":"same@example.com","password":"password-123"}`) + handlers := []*AuthHandlers{envA.handlers, envB.handlers} + recorders := runConcurrentInitialAdminSetupRequests(t, handlers, [][]byte{payload, payload}) + + created := 0 + conflicts := 0 + for _, recorder := range recorders { + switch recorder.Code { + case http.StatusCreated: + created++ + case http.StatusConflict: + conflicts++ + require.Contains(t, recorder.Body.String(), "setup already completed") + default: + t.Fatalf("unexpected setup status=%d body=%s", recorder.Code, recorder.Body.String()) + } + } + require.Equal(t, 1, created) + require.Equal(t, 1, conflicts) + + var userCount int64 + require.NoError(t, db.Model(&gormdb.User{}).Count(&userCount).Error) + require.Equal(t, int64(1), userCount) + var auditCount int64 + require.NoError(t, db.Model(&gormdb.AuditLogEntry{}).Where("action = ?", "auth_setup_completed").Count(&auditCount).Error) + require.Equal(t, int64(1), auditCount) + var sessionCount int64 + require.NoError(t, db.Model(&gormdb.AuthSession{}).Count(&sessionCount).Error) + require.Zero(t, sessionCount) +} + +func TestAuthHandlersLifecycle_InitialAdminSetupInvalidRequestLeavesSetupRetryable(t *testing.T) { + envA, envB, db := openIsolatedAuthSetupPair(t) + + invalid := httptest.NewRecorder() + invalidReq := httptest.NewRequest(http.MethodPost, "/api/auth/setup", bytes.NewBufferString(`{"email":"invalid@example.com"}`)) + envA.handlers.handleSetup(invalid, invalidReq) + require.Equal(t, http.StatusBadRequest, invalid.Code, invalid.Body.String()) + + var userCount int64 + require.NoError(t, db.Model(&gormdb.User{}).Count(&userCount).Error) + require.Zero(t, userCount) + var auditCount int64 + require.NoError(t, db.Model(&gormdb.AuditLogEntry{}).Where("action = ?", "auth_setup_completed").Count(&auditCount).Error) + require.Zero(t, auditCount) + + retry := httptest.NewRecorder() + retryReq := httptest.NewRequest(http.MethodPost, "/api/auth/setup", bytes.NewBufferString(`{"email":"retry@example.com","password":"password-123"}`)) + envB.handlers.handleSetup(retry, retryReq) + require.Equal(t, http.StatusCreated, retry.Code, retry.Body.String()) +} + +func TestAuthHandlersLifecycle_InitialAdminSetupInsertFailureLeavesSetupRetryable(t *testing.T) { + envA, envB, db := openIsolatedAuthSetupPair(t) + tooLongEmail := strings.Repeat("x", 256) + "@example.com" + + failed := httptest.NewRecorder() + failedReq := httptest.NewRequest( + http.MethodPost, + "/api/auth/setup", + bytes.NewBufferString(fmt.Sprintf(`{"email":%q,"password":"password-123"}`, tooLongEmail)), + ) + envA.handlers.handleSetup(failed, failedReq) + require.Equal(t, http.StatusInternalServerError, failed.Code, failed.Body.String()) + + var userCount int64 + require.NoError(t, db.Model(&gormdb.User{}).Count(&userCount).Error) + require.Zero(t, userCount) + var auditCount int64 + require.NoError(t, db.Model(&gormdb.AuditLogEntry{}).Where("action = ?", "auth_setup_completed").Count(&auditCount).Error) + require.Zero(t, auditCount) + + retry := httptest.NewRecorder() + retryReq := httptest.NewRequest(http.MethodPost, "/api/auth/setup", bytes.NewBufferString(`{"email":"retry@example.com","password":"password-123"}`)) + envB.handlers.handleSetup(retry, retryReq) + require.Equal(t, http.StatusCreated, retry.Code, retry.Body.String()) +} + +func TestAuthHandlersLifecycle_InitialAdminSetupCancelledContextLeavesSetupRetryable(t *testing.T) { + envA, envB, db := openIsolatedAuthSetupPair(t) + ctx, cancel := context.WithCancel(context.Background()) + cancel() + + failed := httptest.NewRecorder() + failedReq := httptest.NewRequest( + http.MethodPost, + "/api/auth/setup", + bytes.NewBufferString(`{"email":"cancelled@example.com","password":"password-123"}`), + ).WithContext(ctx) + envA.handlers.handleSetup(failed, failedReq) + require.Equal(t, http.StatusInternalServerError, failed.Code, failed.Body.String()) + + var userCount int64 + require.NoError(t, db.Model(&gormdb.User{}).Count(&userCount).Error) + require.Zero(t, userCount) + var auditCount int64 + require.NoError(t, db.Model(&gormdb.AuditLogEntry{}).Where("action = ?", "auth_setup_completed").Count(&auditCount).Error) + require.Zero(t, auditCount) + + retry := httptest.NewRecorder() + retryReq := httptest.NewRequest(http.MethodPost, "/api/auth/setup", bytes.NewBufferString(`{"email":"retry@example.com","password":"password-123"}`)) + envB.handlers.handleSetup(retry, retryReq) + require.Equal(t, http.StatusCreated, retry.Code, retry.Body.String()) +} + func TestAuthHandlersLifecycle_InvitationSingleUseRace(t *testing.T) { env := openAuthLifecycleEnv(t) From 2b085de663d5ba9dfa97adf9ee58de062ee0997c Mon Sep 17 00:00:00 2001 From: Kirill Turanskiy Date: Fri, 10 Jul 2026 07:32:26 +0300 Subject: [PATCH 008/111] fix(bulkops): make promotion snapshots atomic --- internal/bulkops/facade.go | 146 ++++++++++++++++----------- internal/bulkops/facade_test.go | 170 ++++++++++++++++++++++++++++++++ 2 files changed, 260 insertions(+), 56 deletions(-) diff --git a/internal/bulkops/facade.go b/internal/bulkops/facade.go index 115a1ec3..82a3e3bc 100644 --- a/internal/bulkops/facade.go +++ b/internal/bulkops/facade.go @@ -145,15 +145,19 @@ func (f *Facade) executeBulkPromote(ctx context.Context, identity auth.Identity, if len(ids) == 0 { return &ExecuteResult{DryRun: false, AffectedCount: 0, Promoted: []int64{}}, nil } + if f.memoryStore == nil { + return nil, fmt.Errorf("bulk_promote: memory store not available") + } // Capture before-state using typed entries (MAJOR fix: distinguish restore vs delete). // // The before_state JSONB uses SnapshotEntry{Kind, Before} per row: - // - Candidates (by candidate ID): EntryKindRestore — rollback restores them to pending. - // - Promoted memory rows (by memory ID): EntryKindDelete — rollback hard-deletes them. + // - Candidates (by candidate:): EntryKindRestore — rollback restores them to pending. + // - Promoted memory rows (by numeric memory ID): EntryKindDelete — rollback hard-deletes them. // - // This fixes the rollback bug where AffectedMemoryIDs contained candidate IDs, - // memoryStore.Get() returned not-found for them, and promoted memory rows survived. + // The entity-prefixed candidate key remains distinct even when the independent + // candidate and memory sequences allocate the same numeric ID. Numeric restore + // keys from older bulk_promote snapshots remain backward-compatible in rollback. actor := resolveActor(identity) snapshotID, beforeState, capturedAt, err := f.capturePromoteBeforeState(ctx, ids) if err != nil { @@ -177,68 +181,98 @@ func (f *Facade) executeBulkPromote(ctx context.Context, identity auth.Identity, snap.SourceSessionID = op.SourceSessionID snap.Parameters = params - created, err := f.snapshotStore.Create(ctx, snap) - if err != nil { - return nil, fmt.Errorf("bulk_promote store_snapshot: %w", err) - } - - // Execute promotions. - result := &ExecuteResult{ - SnapshotID: created.SnapshotID, - DryRun: false, - Promoted: []int64{}, - } - for _, id := range ids { - // Load the candidate to build the memory. - candidate, cErr := f.candidateStore.Get(ctx, id) - if cErr != nil { - result.Errors = append(result.Errors, fmt.Sprintf("candidate %d: get: %v", id, cErr)) - log.Warn().Err(cErr).Int64("candidate_id", id).Msg("bulk_promote: get candidate failed") - continue - } - // Build memory from candidate — same logic as promote_candidate MCP tool. - project := "" - if len(candidate.AffectedProjects) > 0 { - project = candidate.AffectedProjects[0] + var result *ExecuteResult + promotionAudits := make([]gormdb.AuditLogEntry, 0, len(ids)) + txErr := f.memoryStore.GetDB().WithContext(ctx).Transaction(func(tx *gormpkg.DB) error { + // Snapshot creation, every successful candidate promotion, and the final + // promoted-memory amendment form one commit unit. The store methods may + // create nested savepoints, but all writes remain owned by this transaction. + txSnapshotStore := gormdb.NewSnapshotStore(tx) + txCandidateStore := gormdb.NewCandidateStore(tx, nil) + + createdSnapshot, createErr := txSnapshotStore.Create(ctx, snap) + if createErr != nil { + return fmt.Errorf("store_snapshot: %w", createErr) } - mem := &models.Memory{ - Content: candidate.ProposedContent, - Project: project, - Tier: candidate.ProposedTier, - EpistemicType: "decision", - Tags: []string{fmt.Sprintf("candidate:%d", id), "crystallized"}, - SourceAgent: "crystallization", - } - // PromoteWithMemory atomically creates the memory and transitions the candidate. - promoted, created, promErr := f.candidateStore.PromoteWithMemory(ctx, id, mem) - if promErr != nil { - result.Errors = append(result.Errors, fmt.Sprintf("candidate %d: %v", id, promErr)) - log.Warn().Err(promErr).Int64("candidate_id", id).Msg("bulk_promote: candidate promotion failed") - continue + + txResult := &ExecuteResult{ + SnapshotID: createdSnapshot.SnapshotID, + DryRun: false, + Promoted: []int64{}, } - result.AffectedCount++ - if promoted != nil && promoted.PromotedMemoryID != nil { - result.Promoted = append(result.Promoted, *promoted.PromotedMemoryID) - } else if created != nil { - result.Promoted = append(result.Promoted, created.ID) + for _, id := range ids { + // Load the candidate through the transaction so the promotion observes + // the same database state as snapshot creation and amendment. + candidate, cErr := txCandidateStore.Get(ctx, id) + if cErr != nil { + txResult.Errors = append(txResult.Errors, fmt.Sprintf("candidate %d: get: %v", id, cErr)) + log.Warn().Err(cErr).Int64("candidate_id", id).Msg("bulk_promote: get candidate failed") + continue + } + // Build memory from candidate — same logic as promote_candidate MCP tool. + project := "" + if len(candidate.AffectedProjects) > 0 { + project = candidate.AffectedProjects[0] + } + mem := &models.Memory{ + Content: candidate.ProposedContent, + Project: project, + Tier: candidate.ProposedTier, + EpistemicType: "decision", + Tags: []string{fmt.Sprintf("candidate:%d", id), "crystallized"}, + SourceAgent: "crystallization", + } + // PromoteWithMemory uses a nested transaction/savepoint on tx. Its audit + // dependency is deliberately nil: audit rows are emitted only after the + // outer transaction commits, so a failed amendment cannot leave a false + // promotion audit behind. + promoted, createdMemory, promErr := txCandidateStore.PromoteWithMemory(ctx, id, mem) + if promErr != nil { + txResult.Errors = append(txResult.Errors, fmt.Sprintf("candidate %d: %v", id, promErr)) + log.Warn().Err(promErr).Int64("candidate_id", id).Msg("bulk_promote: candidate promotion failed") + continue + } + txResult.AffectedCount++ + if promoted != nil && promoted.PromotedMemoryID != nil { + txResult.Promoted = append(txResult.Promoted, *promoted.PromotedMemoryID) + } else if createdMemory != nil { + txResult.Promoted = append(txResult.Promoted, createdMemory.ID) + } + if promoted != nil && createdMemory != nil { + promotionAudits = append(promotionAudits, gormdb.AuditLogEntry{ + Action: "promote_candidate", + Actor: "system", + SourceSessionID: promoted.SourceSessionID, + Reason: fmt.Sprintf("candidate %d promoted to memory %d", id, createdMemory.ID), + }) + } } - } - // Amend the snapshot before_state with delete-kind entries for promoted memory IDs, - // and update AffectedMemoryIDs to contain the memory IDs for conflict detection. - if len(result.Promoted) > 0 { - if amendErr := f.snapshotStore.AmendPromoteEntries(ctx, created.SnapshotID, result.Promoted); amendErr != nil { - // Non-fatal: log and continue — the snapshot is still usable for candidate restore. - log.Warn().Err(amendErr).Str("snapshot_id", created.SnapshotID).Msg("bulk_promote: amend snapshot entries failed") + // The amendment is part of the same commit unit. Any error aborts snapshot + // creation and all successful promotions instead of returning an unusable + // rollback contract. + if len(txResult.Promoted) > 0 { + if amendErr := txSnapshotStore.AmendPromoteEntries(ctx, createdSnapshot.SnapshotID, txResult.Promoted); amendErr != nil { + return fmt.Errorf("amend snapshot entries: %w", amendErr) + } } + + result = txResult + return nil + }) + if txErr != nil { + return nil, fmt.Errorf("bulk_promote transaction: %w", txErr) } // Audit log. if f.auditStore != nil { + for _, entry := range promotionAudits { + _ = f.auditStore.Log(ctx, entry) + } _ = f.auditStore.Log(ctx, gormdb.AuditLogEntry{ Action: "bulk_promote", Actor: actor, - Reason: fmt.Sprintf("bulk_promote snapshot=%s affected=%d", created.SnapshotID, result.AffectedCount), + Reason: fmt.Sprintf("bulk_promote snapshot=%s affected=%d", result.SnapshotID, result.AffectedCount), }) } @@ -439,14 +473,14 @@ func (f *Facade) capturePromoteBeforeState(ctx context.Context, candidateIDs []i c, err := f.candidateStore.Get(ctx, id) if err != nil { // Missing candidate: still record a restore entry with empty Before. - state[fmt.Sprintf("%d", id)] = models.SnapshotEntry{Kind: models.EntryKindRestore} + state[fmt.Sprintf("candidate:%d", id)] = models.SnapshotEntry{Kind: models.EntryKindRestore} continue } before, marshalErr := json.Marshal(c) if marshalErr != nil { return "", nil, time.Time{}, fmt.Errorf("capturePromoteBeforeState: marshal candidate %d: %w", id, marshalErr) } - state[fmt.Sprintf("%d", id)] = models.SnapshotEntry{Kind: models.EntryKindRestore, Before: json.RawMessage(before)} + state[fmt.Sprintf("candidate:%d", id)] = models.SnapshotEntry{Kind: models.EntryKindRestore, Before: json.RawMessage(before)} } bs, err := json.Marshal(state) if err != nil { diff --git a/internal/bulkops/facade_test.go b/internal/bulkops/facade_test.go index 17bd5eaa..9a29caf5 100644 --- a/internal/bulkops/facade_test.go +++ b/internal/bulkops/facade_test.go @@ -13,6 +13,7 @@ package bulkops import ( "context" "encoding/json" + "fmt" "os" "testing" "time" @@ -330,3 +331,172 @@ func TestCaptureMemoryBeforeState_ReturnsPersistedAuthoritativeBoundary(t *testi require.True(t, persisted.CreatedAt.Equal(capturedAt), "the exact capture boundary returned with before_state must be persisted") } + +func createBulkPromoteCandidate(t *testing.T, candidateStore *gormdb.CandidateStore, suffix string) *models.CrystallizationCandidate { + t.Helper() + candidate, err := candidateStore.Create(context.Background(), &models.CrystallizationCandidate{ + SourceSessionID: "bulk-promote-" + suffix, + ProposedContent: "bulk promote " + suffix, + ProposedTier: "semantic", + ProposedEpistemicType: "decision", + ProposedPromotionTarget: "semantic", + EvidenceHandles: []string{"session:bulk-promote-" + suffix}, + PrivacyScope: "project", + Status: models.CandidateStatusPending, + Fingerprint: fmt.Sprintf("bulk-promote-%s-%d", suffix, time.Now().UnixNano()), + AffectedProjects: []string{"bulk-promote-" + suffix}, + Confidence: 0.9, + RecurrenceCount: 2, + }) + require.NoError(t, err) + return candidate +} + +func reserveEqualCandidateAndMemoryID(t *testing.T, db *gorm.DB) int64 { + t.Helper() + var target int64 + require.NoError(t, db.Raw(` + SELECT GREATEST( + COALESCE((SELECT MAX(id) FROM memories), 0), + COALESCE((SELECT MAX(id) FROM crystallization_candidates), 0), + (SELECT last_value FROM memories_id_seq), + (SELECT last_value FROM crystallization_candidates_id_seq) + ) + 1000 + `).Scan(&target).Error) + require.NoError(t, db.Exec("SELECT setval('memories_id_seq', ?, true)", target-1).Error) + require.NoError(t, db.Exec("SELECT setval('crystallization_candidates_id_seq', ?, true)", target-1).Error) + return target +} + +func TestFacade_BulkPromote_EqualCandidateAndMemoryIDsRemainDomainDisjointAndRollbackable(t *testing.T) { + db, store := openTestDB(t) + ctx := context.Background() + memStore := gormdb.NewMemoryStore(store) + snapStore := gormdb.NewSnapshotStore(db) + candidateStore := gormdb.NewCandidateStore(db, nil) + facade := NewFacade(snapStore, candidateStore, memStore, nil) + + targetID := reserveEqualCandidateAndMemoryID(t, db) + candidate := createBulkPromoteCandidate(t, candidateStore, "id-collision") + require.Equal(t, targetID, candidate.ID) + + result, err := facade.Execute(ctx, adminIdentity(), BulkOp{ + Type: models.SnapshotOpBulkPromote, + CandidateIDs: []int64{candidate.ID}, + SourceSessionID: "bulk-promote-id-collision", + }) + require.NoError(t, err) + require.Len(t, result.Promoted, 1) + require.Equal(t, candidate.ID, result.Promoted[0], + "fresh aligned independent sequences must exercise the equal-ID collision") + + persisted, err := snapStore.Get(ctx, result.SnapshotID) + require.NoError(t, err) + var entries map[string]models.SnapshotEntry + require.NoError(t, json.Unmarshal(persisted.BeforeState, &entries)) + require.Len(t, entries, 2) + require.Equal(t, models.EntryKindRestore, entries[fmt.Sprintf("candidate:%d", candidate.ID)].Kind) + require.NotEmpty(t, entries[fmt.Sprintf("candidate:%d", candidate.ID)].Before) + require.Equal(t, models.EntryKindDelete, entries[fmt.Sprintf("%d", result.Promoted[0])].Kind) + + rollbackResult, err := Rollback(ctx, adminIdentity(), result.SnapshotID, snapStore, memStore, nil, candidateStore) + require.NoError(t, err) + require.Equal(t, 1, rollbackResult.RestoredCount) + + restoredCandidate, err := candidateStore.Get(ctx, candidate.ID) + require.NoError(t, err) + require.Equal(t, models.CandidateStatusPending, restoredCandidate.Status) + require.Nil(t, restoredCandidate.PromotedMemoryID) + var memoryCount int64 + require.NoError(t, db.Unscoped().Model(&gormdb.Memory{}). + Where("id = ?", result.Promoted[0]).Count(&memoryCount).Error) + require.Zero(t, memoryCount) +} + +func TestFacade_BulkPromote_AmendFailureRollsBackAndRetryRemainsSafe(t *testing.T) { + db, store := openTestDB(t) + ctx := context.Background() + memStore := gormdb.NewMemoryStore(store) + snapStore := gormdb.NewSnapshotStore(db) + candidateStore := gormdb.NewCandidateStore(db, nil) + facade := NewFacade(snapStore, candidateStore, memStore, nil) + suffix := fmt.Sprintf("amend-failure-%d", time.Now().UnixNano()) + sourceSessionID := "bulk-promote-" + suffix + + _, err := memStore.Create(ctx, &models.Memory{ + Content: "bulk promote sequence spacer", + Project: "bulk-promote-sequence-spacer", + SourceAgent: "test", + }) + require.NoError(t, err) + candidate := createBulkPromoteCandidate(t, candidateStore, suffix) + + require.NoError(t, db.Exec(` + CREATE OR REPLACE FUNCTION test_reject_bulk_promote_snapshot_update() RETURNS trigger + LANGUAGE plpgsql AS $$ + BEGIN + RAISE EXCEPTION 'forced AmendPromoteEntries failure'; + END + $$ + `).Error) + require.NoError(t, db.Exec(fmt.Sprintf(` + CREATE TRIGGER test_reject_bulk_promote_snapshot_update + BEFORE UPDATE ON bulk_op_snapshots + FOR EACH ROW + WHEN (OLD.op_type = 'bulk_promote' AND OLD.source_session_id = '%s') + EXECUTE FUNCTION test_reject_bulk_promote_snapshot_update() + `, sourceSessionID)).Error) + triggerInstalled := true + t.Cleanup(func() { + if triggerInstalled { + _ = db.Exec("DROP TRIGGER IF EXISTS test_reject_bulk_promote_snapshot_update ON bulk_op_snapshots").Error + } + _ = db.Exec("DROP FUNCTION IF EXISTS test_reject_bulk_promote_snapshot_update()").Error + }) + + op := BulkOp{ + Type: models.SnapshotOpBulkPromote, + CandidateIDs: []int64{candidate.ID}, + SourceSessionID: sourceSessionID, + } + result, executeErr := facade.Execute(ctx, adminIdentity(), op) + require.Error(t, executeErr) + require.Nil(t, result) + + unchangedCandidate, err := candidateStore.Get(ctx, candidate.ID) + require.NoError(t, err) + require.Equal(t, models.CandidateStatusPending, unchangedCandidate.Status) + require.Nil(t, unchangedCandidate.PromotedMemoryID) + var promotedMemoryCount int64 + require.NoError(t, db.Unscoped().Model(&gormdb.Memory{}). + Where("content = ?", candidate.ProposedContent).Count(&promotedMemoryCount).Error) + require.Zero(t, promotedMemoryCount) + var snapshotCount int64 + require.NoError(t, db.Table("bulk_op_snapshots"). + Where("source_session_id = ?", sourceSessionID).Count(&snapshotCount).Error) + require.Zero(t, snapshotCount) + + require.NoError(t, db.Exec("DROP TRIGGER test_reject_bulk_promote_snapshot_update ON bulk_op_snapshots").Error) + triggerInstalled = false + require.NoError(t, db.Exec("DROP FUNCTION test_reject_bulk_promote_snapshot_update()").Error) + + retryResult, err := facade.Execute(ctx, adminIdentity(), op) + require.NoError(t, err) + require.Len(t, retryResult.Promoted, 1) + require.NoError(t, db.Unscoped().Model(&gormdb.Memory{}). + Where("content = ?", candidate.ProposedContent).Count(&promotedMemoryCount).Error) + require.Equal(t, int64(1), promotedMemoryCount) + + _, err = Rollback(ctx, adminIdentity(), retryResult.SnapshotID, snapStore, memStore, nil, candidateStore) + require.NoError(t, err) + restoredCandidate, err := candidateStore.Get(ctx, candidate.ID) + require.NoError(t, err) + require.Equal(t, models.CandidateStatusPending, restoredCandidate.Status) + require.Nil(t, restoredCandidate.PromotedMemoryID) + require.NoError(t, db.Unscoped().Model(&gormdb.Memory{}). + Where("content = ?", candidate.ProposedContent).Count(&promotedMemoryCount).Error) + require.Zero(t, promotedMemoryCount) + + _, err = Rollback(ctx, adminIdentity(), retryResult.SnapshotID, snapStore, memStore, nil, candidateStore) + require.ErrorIs(t, err, ErrSnapshotNotRollbackable) +} From 451edcad2979a1d71254e14f8b5f698ea66eb33c Mon Sep 17 00:00:00 2001 From: Kirill Turanskiy Date: Fri, 10 Jul 2026 07:44:17 +0300 Subject: [PATCH 009/111] ci: add fail-closed release gate foundation --- .agent/critical-suite.config.yaml | 55 +++ .agent/dev-stand.config.yaml | 31 ++ .github/workflows/test.yml | 201 +++----- scripts/production-gates/assert-coverage.ps1 | 238 +++++++++ .../production-gates/assert-go-test-json.ps1 | 252 ++++++++++ .../production-gates/cleanup-db-sessions.ps1 | 241 +++++++++ scripts/production-gates/run-db-suite.ps1 | 456 ++++++++++++++++++ 7 files changed, 1348 insertions(+), 126 deletions(-) create mode 100644 .agent/critical-suite.config.yaml create mode 100644 .agent/dev-stand.config.yaml create mode 100644 scripts/production-gates/assert-coverage.ps1 create mode 100644 scripts/production-gates/assert-go-test-json.ps1 create mode 100644 scripts/production-gates/cleanup-db-sessions.ps1 create mode 100644 scripts/production-gates/run-db-suite.ps1 diff --git a/.agent/critical-suite.config.yaml b/.agent/critical-suite.config.yaml new file mode 100644 index 00000000..51d83b00 --- /dev/null +++ b/.agent/critical-suite.config.yaml @@ -0,0 +1,55 @@ +version: 1 + +test_glob: "tests/critical/**/*.{go,py,ts,js,rs,cs,sh}" +categories: + - smoke + - behavioral + - data-consistency +dev_stand_required: true +fail_on_missing: error +timeout_minutes: 30 + +runner: + command: "go test -tags=critical -json ./tests/critical/... -count=1" + transcript_parser: "pwsh -NoProfile -File scripts/production-gates/assert-go-test-json.ps1 -FailOnUnexpectedSkip" + fail_on_unexpected_skip: true + +database_gate: + command: "pwsh -NoProfile -File scripts/production-gates/run-db-suite.ps1 -FreshDatabase -Repeat 3 -FailOnUnexpectedSkip" + postgres_image: "pgvector/pgvector:pg17" + fresh_database_per_repeat: true + schema: "public" + package_parallelism: 1 + test_parallelism: 1 + connection_budget: 20 + post_test_sessions_required: 0 + cleanup_required: true + +coverage: + profile_required_on_all_operating_systems: true + overall_statement_minimum_percent: 60 + assertion_command: "pwsh -NoProfile -File scripts/production-gates/assert-coverage.ps1 -CoverageProfile coverage.out -OverallThreshold 60" + package_statement_minimum_percent: + "internal/module/": 75 + "internal/handlers/engramcore": 60 + "internal/handlers/loom": 70 + "cmd/engram/": 0 + +evidence: + root: ".agent/reports/evidence/production-ready/release-gates-foundation" + require_raw_stdout: true + require_raw_stderr: true + require_machine_summary: true + require_child_exit_codes: true + require_database_schema_identity: true + require_pg_stat_activity: true + require_cleanup_result: true + +security: + govulncheck: + authoritative_modes: + - "source scan with tests: govulncheck -test ./..." + - "unstripped binary scan before -ldflags=-s -w" + non_authoritative_modes: + - "stripped binary scan: absence of symbols forces module-level fallback" + rule: "A stripped-binary finding cannot override source/test or unstripped-binary reachability evidence." diff --git a/.agent/dev-stand.config.yaml b/.agent/dev-stand.config.yaml new file mode 100644 index 00000000..107c84d9 --- /dev/null +++ b/.agent/dev-stand.config.yaml @@ -0,0 +1,31 @@ +version: 1 +shape: docker-compose + +# The critical stand is isolated from ordinary local compose state by project +# name and non-default host ports. The critical-suite runner exports the env +# below before invoking the lifecycle commands. +up: + command: "docker compose -p engram-critical-stand -f docker-compose.yml up -d --build --wait" + readiness_check: "docker compose -p engram-critical-stand -f docker-compose.yml exec -T postgres pg_isready -U engram -d engram && curl -fsS http://localhost:37778/health" + timeout_seconds: 300 +down: + command: "docker compose -p engram-critical-stand -f docker-compose.yml down -v --remove-orphans" + timeout_seconds: 120 +logs: + command: "docker compose -p engram-critical-stand -f docker-compose.yml logs --no-color --tail=300" + +env: + COMPOSE_PROJECT_NAME: "engram-critical-stand" + POSTGRES_PORT: "55433" + WORKER_PORT: "37778" + OPERATOR_CONSOLE_PORT: "3001" + POSTGRES_PASSWORD: "engram" + DATABASE_DSN: "postgres://engram:engram@postgres:5432/engram?sslmode=disable" + STAND_API_URL: "http://localhost:37778" + STAND_OPERATOR_URL: "http://localhost:3001" + +database_evidence: + runner: "pwsh -NoProfile -File scripts/production-gates/run-db-suite.ps1" + postgres_image: "pgvector/pgvector:pg17" + database_lifecycle: "fresh unique database per repetition; cleanup owns only engram_prc_rg_* databases" + shared_service_policy: "Never stop or remove an operator-owned PostgreSQL container; only terminate/drop the current run database." diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 67895beb..3e820a79 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -7,15 +7,15 @@ on: branches: [main] jobs: - # Migration gate — runs the FULL migration chain against a clean PostgreSQL+pgvector - # database on every push. The matrix `test` job below skips all DATABASE_DSN-gated tests - # (no DB service), so without this job a broken migration reaches prod unverified — which - # is exactly how migration 143 shipped a multi-statement Exec that pgx rejects with - # SQLSTATE 42601, breaking server init on v6.23.0–v6.25.0. This job is the clean-DB - # first-run gate that catches that class of failure before merge. - migrations: - name: migrations / clean-db chain + # M0 RELEASE-GATES foundation. The wrapper owns fresh database identity, + # go-test JSON parsing, unexpected-skip policy, per-process exit capture, + # connection evidence, and unconditional cleanup. A later successful command + # cannot overwrite an earlier non-zero exit. + release-gates-foundation: + name: release gates / isolated clean-db chain runs-on: ubuntu-latest + env: + ENGRAM_TEST_ADMIN_DSN: postgres://engram:engram@localhost:5432/postgres?sslmode=disable services: postgres: image: pgvector/pgvector:pg17 @@ -40,20 +40,53 @@ jobs: go-version-file: go.mod cache: true - # Runs the clean-DB full-chain gate: TestMigrationsIntegration calls runMigrations on - # a fresh database, so the entire chain (including the newest migration) must apply - # cleanly from zero — the first-run path the local borrowed DB never exercises, and the - # exact path that broke when migration 143 shipped a multi-statement Exec. - # - # The pattern is ANCHORED (TestMigrationsIntegration$) to this one gate. The sibling - # TestMigrationsIntegration_* tests are NOT clean-DB-safe on the base pgvector image — - # they drop/re-run individual migrations and assume an already-migrated schema, so an - # unanchored -run pulls them in and they fail on a from-zero DB. Those siblings stay as - # operator-run-against-a-real-DB tests; this gate owns the clean first-run contract. - - name: Run migration chain on clean DB - env: - DATABASE_DSN: postgres://engram:engram@localhost:5432/engram?sslmode=disable - run: go test ./internal/db/gorm/ -run 'TestMigrationsIntegration$' -count=1 -v + - name: Self-test go-test JSON assertion + shell: pwsh + run: ./scripts/production-gates/assert-go-test-json.ps1 -SelfTest + + - name: Self-test coverage assertion + shell: pwsh + run: ./scripts/production-gates/assert-coverage.ps1 -SelfTest + + - name: Self-test cleanup safety + shell: pwsh + run: ./scripts/production-gates/cleanup-db-sessions.ps1 -SelfTest + + - name: Self-test false-green prevention + shell: pwsh + run: ./scripts/production-gates/run-db-suite.ps1 -SelfTest + + - name: Resolve PostgreSQL service identity + shell: pwsh + run: | + $container = docker ps --filter "ancestor=pgvector/pgvector:pg17" --format "{{.ID}}" | Select-Object -First 1 + if ($LASTEXITCODE -ne 0 -or [string]::IsNullOrWhiteSpace($container)) { + throw "pgvector/pgvector:pg17 service container was not found" + } + "POSTGRES_CONTAINER=$container" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append + + # The pattern is intentionally anchored. This is the clean first-install + # migration contract; sibling migration tests have their own isolated DB + # acceptance lanes. + - name: Run isolated migration chain through RELEASE-GATES + shell: pwsh + run: | + ./scripts/production-gates/run-db-suite.ps1 ` + -FreshDatabase ` + -Package ./internal/db/gorm ` + -Run 'TestMigrationsIntegration$' ` + -Repeat 1 ` + -FailOnUnexpectedSkip ` + -PostgresContainer $env:POSTGRES_CONTAINER ` + -PostgresImage pgvector/pgvector:pg17 + + - name: Upload RELEASE-GATES evidence + if: always() + uses: actions/upload-artifact@v4 + with: + name: release-gates-foundation + path: .agent/reports/evidence/production-ready/release-gates-foundation/ + if-no-files-found: error test: name: test / ${{ matrix.os }} @@ -95,113 +128,29 @@ jobs: # + MinGW, not available in windows-latest default environment). - name: Test (Linux / macOS — with race detector) if: runner.os != 'Windows' - run: go test ./... -race -cover -coverprofile=coverage.out + run: go test ./... -race -covermode=atomic -coverprofile=coverage.out -count=1 - name: Test (Windows — without race detector) if: runner.os == 'Windows' - run: go test ./... -cover -coverprofile=coverage.out - - # Coverage gates — enforced on every platform that produces coverage.out. - # - # Honest thresholds derived from running the v4 statement-weighted check - # against an actual local run after PR #167's loom-module landing: - # - # internal/module/ >= 75% (real measurement 76.2% as of - # 5d8d651; Phase A's "95.8% NFR-7" - # claim was either for a single - # sub-package or measured by a - # buggy script that sampled one - # function via tail -1) - # internal/handlers/engramcore >= 60% (gRPC transport limits coverage) - # internal/handlers/loom >= 70% (Phase B-1 plumbing landing; -# real measurement 75.7% on the v4 -# coverage script. Loom error paths -# (PRAGMA failure, NewEngine error, -# shutdown ctx cancellation) are -# hard to cover via moduletest.Harness -# without a full SQLite fake. Phase -# B-2 follow-up improves coverage to -# 85%+ once loom-tools lands and adds -# its own test surface.) - # cmd/engram/ >= 0% (main + wiring + exec_*.go are - # not meaningfully unit-testable; - # gate is kept at 0% as - # documentation of the package set) - # - # The check computes a TRUE statement-weighted coverage for a package - # prefix by parsing the raw coverage.out file directly. Each non-header - # line in coverage.out has the form: - # path:start.col,end.col numStatements covered(0/1) - # The script sums numStatements per package prefix, sums numStatements - # of lines where covered > 0, and reports hit/total. - # - # History: - # - v1 (Phase A): used `go tool cover -func ... | tail -1`. Sampled ONE - # function and called it the package coverage. Reported 0% for - # cmd/engram/ on every run — Phase A merged with this gate red on - # Linux/macOS. On Windows the same script silently SKIPPED everything - # because `2>/dev/null` suppressed the missing-coverage.out error and - # awk processed empty input, so pct was empty and the gate returned - # "SKIP" with exit 0. Phase A therefore never actually enforced - # coverage on Windows at all. - # - v2 (PR #167 first attempt): function-count-weighted average via awk - # over `go tool cover -func` output. Better than v1 but not the same - # metric Phase A claimed, and still inherited the Windows silent skip. - # - v3 (PR #167 second attempt): statement-weighted from raw coverage.out - # directly. Honest on Linux/macOS but BROKE Windows hard because the - # silent-skip path is gone — awk fails fatally when coverage.out is - # missing. - # - v4 (this version): statement-weighted on platforms where coverage.out - # exists; explicit WARN-and-skip on platforms where it does not (still - # Windows as of 2026-04-15 — root cause TBD, tracked under Phase B-2 - # CI hardening). Gate is permissive on missing coverage.out so we - # don't block PRs on a pre-existing Windows-CI environmental issue. - - name: Check coverage gates - shell: bash - run: | - if [ ! -f coverage.out ]; then - echo "WARN: coverage.out is missing on this platform — skipping all coverage gates." - echo "WARN: this is a pre-existing issue on the Windows runner that Phase A also hit." - echo "WARN: Linux and macOS runners produce coverage.out and enforce the gates." - exit 0 - fi - - check_pkg() { - local pkg="$1" - local threshold="$2" - local pct - pct=$(awk -v pkg="github.com/thebtf/engram/${pkg}" ' - $1 ~ ("^" pkg) { - n = split($0, parts, " ") - if (n < 3) next - stmts = parts[n-1] - hit = parts[n] - total += stmts - if (hit + 0 > 0) covered += stmts - } - END { - if (total > 0) printf "%.1f\n", (covered / total) * 100 - else print "" - } - ' coverage.out) - if [ -z "$pct" ]; then - echo "SKIP: no coverage data for ${pkg} (no test files or all functions excluded)" - return 0 - fi - local ok - ok=$(awk "BEGIN { print ($pct >= $threshold) ? 1 : 0 }") - if [ "$ok" = "1" ]; then - echo "PASS: ${pkg} stmt coverage ${pct}% >= ${threshold}%" - else - echo "FAIL: ${pkg} stmt coverage ${pct}% < ${threshold}% (threshold)" - exit 1 - fi - } - - check_pkg "internal/module/" 75 - check_pkg "internal/handlers/engramcore" 60 - check_pkg "internal/handlers/loom" 70 - check_pkg "cmd/engram/" 0 + run: go test ./... -covermode=atomic -coverprofile=coverage.out -count=1 + + # RELEASE-GATES coverage is fail-closed on every OS. Missing profiles are + # fatal, overall statement coverage must be >=60%, and the existing + # package floors are enforced by the same cross-platform parser. + - name: Check coverage gates (fail closed) + if: always() + shell: pwsh + run: ./scripts/production-gates/assert-coverage.ps1 -CoverageProfile coverage.out -SummaryPath coverage-summary.json -OverallThreshold 60 + + - name: Upload coverage evidence + if: always() + uses: actions/upload-artifact@v4 + with: + name: coverage-${{ matrix.os }} + path: | + coverage.out + coverage-summary.json + if-no-files-found: error # Safety-gate self-check (T007, v5 cleanup). # diff --git a/scripts/production-gates/assert-coverage.ps1 b/scripts/production-gates/assert-coverage.ps1 new file mode 100644 index 00000000..c19a22d7 --- /dev/null +++ b/scripts/production-gates/assert-coverage.ps1 @@ -0,0 +1,238 @@ +[CmdletBinding()] +param( + [string]$CoverageProfile, + [string]$SummaryPath, + [double]$OverallThreshold = 60.0, + [switch]$Help, + [switch]$SelfTest +) + +Set-StrictMode -Version Latest +$ErrorActionPreference = 'Stop' + +$RequiredPackageThresholds = [ordered]@{ + 'internal/module/' = 75.0 + 'internal/handlers/engramcore' = 60.0 + 'internal/handlers/loom' = 70.0 + 'cmd/engram/' = 0.0 +} + +function Show-Help { + @' +assert-coverage.ps1 + +Validates a Go coverage profile with statement-weighted accounting. Missing or +empty coverage is fatal on every operating system. The release floor is 60% +overall statement coverage, and the historical package gates remain mandatory: + + internal/module/ >= 75% + internal/handlers/engramcore >= 60% + internal/handlers/loom >= 70% + cmd/engram/ >= 0% (presence is still required) + +Usage: + pwsh ./scripts/production-gates/assert-coverage.ps1 \ + -CoverageProfile \ + -SummaryPath \ + [-OverallThreshold 60] + +Options: + -Help Print this help and exit 0. + -SelfTest Run deterministic coverage-parser regression tests. + -CoverageProfile Go `-coverprofile` file. + -SummaryPath Machine-readable result path. Defaults beside profile. + -OverallThreshold May raise, but never lower, the mandatory 60% floor. + +Exit codes: + 0 Profile exists and all overall/package thresholds pass. + 1 Missing/malformed coverage, missing required package data, or low coverage. +'@ | Write-Output +} + +function Write-Utf8NoBom { + param([Parameter(Mandatory)][string]$Path, [Parameter(Mandatory)][AllowEmptyString()][string]$Content) + $parent = Split-Path -Parent $Path + if ($parent) { New-Item -ItemType Directory -Path $parent -Force | Out-Null } + [System.IO.File]::WriteAllText([System.IO.Path]::GetFullPath($Path), $Content, [System.Text.UTF8Encoding]::new($false)) +} + +function Get-CoverageSummary { + param([Parameter(Mandatory)][string]$Path, [Parameter(Mandatory)][double]$MinimumOverall) + + $errors = [System.Collections.Generic.List[string]]::new() + if (-not (Test-Path -LiteralPath $Path -PathType Leaf)) { + $errors.Add("coverage profile does not exist: $Path") + return [pscustomobject]@{ + schema_version = 1; verdict = 'FAIL'; profile = [System.IO.Path]::GetFullPath($Path); mode = $null + overall = [ordered]@{ covered_statements = 0; total_statements = 0; percent = 0.0; threshold = $MinimumOverall; pass = $false } + required_packages = @(); packages = @(); errors = @($errors) + } + } + + $lines = [System.IO.File]::ReadAllLines([System.IO.Path]::GetFullPath($Path)) + if ($lines.Count -lt 2 -or -not $lines[0].StartsWith('mode: ')) { $errors.Add('coverage profile is empty or has no valid mode header') } + $mode = if ($lines.Count -gt 0 -and $lines[0].StartsWith('mode: ')) { $lines[0].Substring(6).Trim() } else { $null } + $packageStats = @{} + [int64]$overallTotal = 0 + [int64]$overallCovered = 0 + + for ($index = 1; $index -lt $lines.Count; $index++) { + $line = $lines[$index] + if ([string]::IsNullOrWhiteSpace($line)) { continue } + $match = [regex]::Match($line, '^(?.+):\d+\.\d+,\d+\.\d+\s+(?\d+)\s+(?\d+)$') + if (-not $match.Success) { $errors.Add("malformed coverage line $($index + 1): $line"); continue } + $file = $match.Groups['file'].Value.Replace('\\', '/') + $lastSlash = $file.LastIndexOf('/') + $package = if ($lastSlash -ge 0) { $file.Substring(0, $lastSlash + 1) } else { '' } + $statements = [int64]$match.Groups['statements'].Value + $count = [int64]$match.Groups['count'].Value + if (-not $packageStats.ContainsKey($package)) { $packageStats[$package] = [ordered]@{ package = $package; total = [int64]0; covered = [int64]0 } } + $packageStats[$package].total += $statements + $overallTotal += $statements + if ($count -gt 0) { $packageStats[$package].covered += $statements; $overallCovered += $statements } + } + if ($overallTotal -le 0) { $errors.Add('coverage profile contains zero statements') } + + $packages = @($packageStats.Values | ForEach-Object { + $percent = if ($_.total -gt 0) { [math]::Round(($_.covered / $_.total) * 100.0, 2) } else { 0.0 } + [pscustomobject]@{ package = $_.package; covered_statements = $_.covered; total_statements = $_.total; percent = $percent } + } | Sort-Object package) + + $required = [System.Collections.Generic.List[object]]::new() + foreach ($entry in $RequiredPackageThresholds.GetEnumerator()) { + $fullPrefix = "github.com/thebtf/engram/$($entry.Key.TrimEnd('/'))/" + [int64]$total = 0; [int64]$covered = 0 + foreach ($pkg in $packages) { + if ($pkg.package.StartsWith($fullPrefix, [System.StringComparison]::Ordinal)) { $total += [int64]$pkg.total_statements; $covered += [int64]$pkg.covered_statements } + } + $present = $total -gt 0 + $exactPercent = if ($present) { ($covered / $total) * 100.0 } else { 0.0 } + $percent = [math]::Round($exactPercent, 2) + $pass = $present -and $exactPercent -ge [double]$entry.Value + if (-not $present) { $errors.Add("required package coverage is missing: $($entry.Key)") } + elseif (-not $pass) { $errors.Add(("package coverage below threshold: {0} {1:N2}% < {2:N2}%" -f $entry.Key, $percent, [double]$entry.Value)) } + $required.Add([pscustomobject]@{ package_prefix = $entry.Key; covered_statements = $covered; total_statements = $total; percent = $percent; threshold = [double]$entry.Value; present = $present; pass = $pass }) + } + + $overallExactPercent = if ($overallTotal -gt 0) { ($overallCovered / $overallTotal) * 100.0 } else { 0.0 } + $overallPercent = [math]::Round($overallExactPercent, 2) + $overallPass = $overallTotal -gt 0 -and $overallExactPercent -ge $MinimumOverall + if ($overallTotal -gt 0 -and -not $overallPass) { $errors.Add(("overall statement coverage below threshold: {0:N2}% < {1:N2}%" -f $overallPercent, $MinimumOverall)) } + + [pscustomobject]@{ + schema_version = 1; verdict = if ($errors.Count -eq 0) { 'PASS' } else { 'FAIL' } + profile = [System.IO.Path]::GetFullPath($Path); mode = $mode + overall = [ordered]@{ covered_statements = $overallCovered; total_statements = $overallTotal; percent = $overallPercent; threshold = $MinimumOverall; pass = $overallPass } + required_packages = @($required); packages = $packages; errors = @($errors) + } +} + +function Assert-SelfTest { param([bool]$Condition, [string]$Message); if (-not $Condition) { throw "SELFTEST FAIL: $Message" } } + +function New-SyntheticProfile { + param([Parameter(Mandatory)][string]$Path, [int]$EngramCoreCovered = 6, [int]$OtherCovered = 10, [switch]$OmitLoom) + $lines = [System.Collections.Generic.List[string]]::new() + $lines.Add('mode: set') + $lines.Add('github.com/thebtf/engram/internal/module/a.go:1.1,2.1 10 1') + $lines.Add("github.com/thebtf/engram/internal/handlers/engramcore/a.go:1.1,2.1 $EngramCoreCovered 1") + if ($EngramCoreCovered -lt 10) { $lines.Add("github.com/thebtf/engram/internal/handlers/engramcore/b.go:1.1,2.1 $(10 - $EngramCoreCovered) 0") } + if (-not $OmitLoom) { + $lines.Add('github.com/thebtf/engram/internal/handlers/loom/a.go:1.1,2.1 7 1') + $lines.Add('github.com/thebtf/engram/internal/handlers/loom/b.go:1.1,2.1 3 0') + } + $lines.Add('github.com/thebtf/engram/cmd/engram/main.go:1.1,2.1 10 0') + if ($OtherCovered -gt 0) { $lines.Add("github.com/thebtf/engram/internal/other/a.go:1.1,2.1 $OtherCovered 1") } + if ($OtherCovered -lt 10) { $lines.Add("github.com/thebtf/engram/internal/other/b.go:1.1,2.1 $(10 - $OtherCovered) 0") } + Write-Utf8NoBom $Path (($lines -join "`n") + "`n") +} + +function Invoke-SelfTest { + $root = Join-Path ([System.IO.Path]::GetTempPath()) ("assert-coverage-" + [guid]::NewGuid().ToString('N')) + New-Item -ItemType Directory -Path $root -Force | Out-Null + try { + $passPath = Join-Path $root 'pass.out'; New-SyntheticProfile $passPath + $pass = Get-CoverageSummary $passPath 60 + Assert-SelfTest ($pass.verdict -eq 'PASS') 'valid profile was rejected' + $lowOverallPath = Join-Path $root 'low-overall.out'; New-SyntheticProfile $lowOverallPath -OtherCovered 0 + $lowOverall = Get-CoverageSummary $lowOverallPath 60 + Assert-SelfTest ($lowOverall.verdict -eq 'FAIL' -and -not $lowOverall.overall.pass) 'low overall coverage was accepted' + $lowPackagePath = Join-Path $root 'low-package.out'; New-SyntheticProfile $lowPackagePath -EngramCoreCovered 5 + Assert-SelfTest ((Get-CoverageSummary $lowPackagePath 60).verdict -eq 'FAIL') 'low package coverage was accepted' + + $prefixBoundaryPath = Join-Path $root 'prefix-boundary.out' + Write-Utf8NoBom $prefixBoundaryPath ((@( + 'mode: set' + 'github.com/thebtf/engram/internal/module/a.go:1.1,2.1 10 1' + 'github.com/thebtf/engram/internal/handlers/engramcore/a.go:1.1,2.1 6 1' + 'github.com/thebtf/engram/internal/handlers/engramcore/b.go:1.1,2.1 4 0' + 'github.com/thebtf/engram/internal/handlers/loom/a.go:1.1,2.1 6 1' + 'github.com/thebtf/engram/internal/handlers/loom/b.go:1.1,2.1 4 0' + 'github.com/thebtf/engram/internal/handlers/looming/decoy.go:1.1,2.1 100000 1' + 'github.com/thebtf/engram/cmd/engram/main.go:1.1,2.1 10 0' + ) -join "`n") + "`n") + $prefixBoundary = Get-CoverageSummary $prefixBoundaryPath 60 + $boundedLoom = $prefixBoundary.required_packages | Where-Object package_prefix -eq 'internal/handlers/loom' + Assert-SelfTest ($prefixBoundary.verdict -eq 'FAIL' -and $boundedLoom.percent -eq 60.0 -and -not $boundedLoom.pass) 'neighbor package prefix boosted the loom threshold' + + $missingPath = Join-Path $root 'missing-package.out'; New-SyntheticProfile $missingPath -OmitLoom + $missing = Get-CoverageSummary $missingPath 60 + Assert-SelfTest ($missing.verdict -eq 'FAIL' -and @($missing.errors | Where-Object { $_ -match 'internal/handlers/loom' }).Count -eq 1) 'missing package was accepted' + + # 59.999% renders as 60.00% at two decimals but is still below the + # release floor. Gate decisions must use the exact ratio, never the + # rounded display value. + $roundingOverallPath = Join-Path $root 'rounding-overall.out' + Write-Utf8NoBom $roundingOverallPath ((@( + 'mode: set' + 'github.com/thebtf/engram/internal/module/a.go:1.1,2.1 10 1' + 'github.com/thebtf/engram/internal/handlers/engramcore/a.go:1.1,2.1 6 1' + 'github.com/thebtf/engram/internal/handlers/engramcore/b.go:1.1,2.1 4 0' + 'github.com/thebtf/engram/internal/handlers/loom/a.go:1.1,2.1 7 1' + 'github.com/thebtf/engram/internal/handlers/loom/b.go:1.1,2.1 3 0' + 'github.com/thebtf/engram/cmd/engram/main.go:1.1,2.1 10 0' + 'github.com/thebtf/engram/internal/other/a.go:1.1,2.1 59976 1' + 'github.com/thebtf/engram/internal/other/b.go:1.1,2.1 39984 0' + ) -join "`n") + "`n") + $roundingOverall = Get-CoverageSummary $roundingOverallPath 60 + Assert-SelfTest ($roundingOverall.verdict -eq 'FAIL' -and $roundingOverall.overall.percent -eq 60.0 -and -not $roundingOverall.overall.pass) 'rounded 59.999% overall coverage was accepted as 60%' + + # The same exact-ratio rule applies to package floors: 69.999% loom + # coverage displays as 70.00% but must not satisfy the 70% contract. + $roundingPackagePath = Join-Path $root 'rounding-package.out' + Write-Utf8NoBom $roundingPackagePath ((@( + 'mode: set' + 'github.com/thebtf/engram/internal/module/a.go:1.1,2.1 10 1' + 'github.com/thebtf/engram/internal/handlers/engramcore/a.go:1.1,2.1 6 1' + 'github.com/thebtf/engram/internal/handlers/engramcore/b.go:1.1,2.1 4 0' + 'github.com/thebtf/engram/internal/handlers/loom/a.go:1.1,2.1 69999 1' + 'github.com/thebtf/engram/internal/handlers/loom/b.go:1.1,2.1 30001 0' + 'github.com/thebtf/engram/cmd/engram/main.go:1.1,2.1 10 0' + 'github.com/thebtf/engram/internal/other/a.go:1.1,2.1 100000 1' + ) -join "`n") + "`n") + $roundingPackage = Get-CoverageSummary $roundingPackagePath 60 + $loomPackage = $roundingPackage.required_packages | Where-Object package_prefix -eq 'internal/handlers/loom' + Assert-SelfTest ($roundingPackage.verdict -eq 'FAIL' -and $loomPackage.percent -eq 70.0 -and -not $loomPackage.pass) 'rounded 69.999% package coverage was accepted as 70%' + Assert-SelfTest ((Get-CoverageSummary (Join-Path $root 'absent.out') 60).verdict -eq 'FAIL') 'absent profile was accepted' + Write-Output 'SELFTEST PASS: assert-coverage.ps1' + } + finally { Remove-Item -LiteralPath $root -Recurse -Force -ErrorAction SilentlyContinue } +} + +if ($Help) { Show-Help; exit 0 } +if ($SelfTest) { Invoke-SelfTest; exit 0 } +if ([string]::IsNullOrWhiteSpace($CoverageProfile)) { Write-Error '-CoverageProfile is required.'; exit 1 } +if ($OverallThreshold -lt 60.0) { Write-Error '-OverallThreshold cannot lower the mandatory 60% release floor.'; exit 1 } +if ([string]::IsNullOrWhiteSpace($SummaryPath)) { $SummaryPath = "$CoverageProfile.summary.json" } + +try { + $summary = Get-CoverageSummary $CoverageProfile $OverallThreshold + Write-Utf8NoBom $SummaryPath (($summary | ConvertTo-Json -Depth 10) + "`n") + Write-Output ("coverage verdict={0} overall={1:N2}% threshold={2:N2}% statements={3}/{4}" -f $summary.verdict, $summary.overall.percent, $summary.overall.threshold, $summary.overall.covered_statements, $summary.overall.total_statements) + foreach ($package in $summary.required_packages) { + Write-Output ("coverage package={0} percent={1:N2}% threshold={2:N2}% present={3} pass={4}" -f $package.package_prefix, $package.percent, $package.threshold, $package.present, $package.pass) + } + Write-Output "summary=$([System.IO.Path]::GetFullPath($SummaryPath))" + if ($summary.verdict -ne 'PASS') { exit 1 } + exit 0 +} +catch { Write-Error $_; exit 1 } diff --git a/scripts/production-gates/assert-go-test-json.ps1 b/scripts/production-gates/assert-go-test-json.ps1 new file mode 100644 index 00000000..1e53e66e --- /dev/null +++ b/scripts/production-gates/assert-go-test-json.ps1 @@ -0,0 +1,252 @@ +[CmdletBinding()] +param( + [string]$InputPath, + [string]$SummaryPath, + [switch]$FailOnUnexpectedSkip, + [string[]]$AllowedSkipPattern = @(), + [switch]$Help, + [switch]$SelfTest +) + +Set-StrictMode -Version Latest +$ErrorActionPreference = 'Stop' + +function Show-Help { + @' +assert-go-test-json.ps1 + +Parses a raw `go test -json` transcript into a stable machine summary. The +assertion fails on malformed/incomplete output, failed tests or packages, and +(when requested) any skip that is not explicitly allowed. Packages with no test +files are reported as `no_tests`; they are not treated as test skips. + +Usage: + pwsh ./scripts/production-gates/assert-go-test-json.ps1 \ + -InputPath \ + -SummaryPath \ + [-FailOnUnexpectedSkip] \ + [-AllowedSkipPattern [,...]] + +Options: + -Help Print this help and exit 0. + -SelfTest Run deterministic parser regression tests and exit. + -InputPath Raw stdout produced by `go test -json`. + -SummaryPath JSON summary destination. Defaults beside input. + -FailOnUnexpectedSkip Make any non-allowlisted test/package skip fatal. + -AllowedSkipPattern Regex matched against `package/test` and skip output. + +Exit codes: + 0 Transcript is structurally complete and all enabled assertions pass. + 1 A test/package failed, output was malformed/incomplete, or a skip gate failed. +'@ | Write-Output +} + +function Write-Utf8NoBom { + param([Parameter(Mandatory)][string]$Path, [Parameter(Mandatory)][AllowEmptyString()][string]$Content) + $parent = Split-Path -Parent $Path + if ($parent) { New-Item -ItemType Directory -Path $parent -Force | Out-Null } + [System.IO.File]::WriteAllText([System.IO.Path]::GetFullPath($Path), $Content, [System.Text.UTF8Encoding]::new($false)) +} + +function Test-MatchesAllowedSkip { + param([Parameter(Mandatory)][string]$Identity, [string]$Output, [string[]]$Patterns) + foreach ($pattern in $Patterns) { + if ([string]::IsNullOrWhiteSpace($pattern)) { continue } + if ([regex]::IsMatch($Identity, $pattern) -or + (-not [string]::IsNullOrEmpty($Output) -and [regex]::IsMatch($Output, $pattern))) { return $true } + } + return $false +} + +function Read-GoTestTranscript { + param( + [Parameter(Mandatory)][string]$Path, + [bool]$EnforceUnexpectedSkip, + [string[]]$AllowedPatterns + ) + + if (-not (Test-Path -LiteralPath $Path -PathType Leaf)) { + return [pscustomobject]@{ + schema_version = 1; verdict = 'FAIL'; input_path = [System.IO.Path]::GetFullPath($Path) + fail_on_unexpected_skip = $EnforceUnexpectedSkip; allowed_skip_patterns = @($AllowedPatterns) + counts = [ordered]@{ packages = 0; tests = 0; passed = 0; failed = 0; skipped = 0; no_tests = 0; zero_tests = 1; incomplete = 0; unexpected_skips = 0; malformed_lines = 0 } + packages = @(); tests = @(); unexpected_skips = @(); errors = @("input transcript does not exist: $Path") + } + } + + $patternErrors = [System.Collections.Generic.List[string]]::new() + foreach ($pattern in $AllowedPatterns) { + if ([string]::IsNullOrWhiteSpace($pattern)) { continue } + try { [void][regex]::new($pattern) } + catch { $patternErrors.Add("invalid allowed-skip regex '$pattern': $($_.Exception.Message)") } + } + if ($patternErrors.Count -gt 0) { + return [pscustomobject]@{ + schema_version = 1; verdict = 'FAIL'; input_path = [System.IO.Path]::GetFullPath($Path) + fail_on_unexpected_skip = $EnforceUnexpectedSkip; allowed_skip_patterns = @($AllowedPatterns) + counts = [ordered]@{ packages = 0; tests = 0; passed = 0; failed = 0; skipped = 0; no_tests = 0; zero_tests = 1; incomplete = 0; unexpected_skips = 0; malformed_lines = 0 } + packages = @(); tests = @(); unexpected_skips = @(); errors = @($patternErrors) + } + } + + $packageStates = @{} + $testStates = @{} + $parseErrors = [System.Collections.Generic.List[string]]::new() + $gateErrors = [System.Collections.Generic.List[string]]::new() + $lineNumber = 0 + + foreach ($line in [System.IO.File]::ReadLines([System.IO.Path]::GetFullPath($Path))) { + $lineNumber++ + if ([string]::IsNullOrWhiteSpace($line)) { continue } + try { $event = $line | ConvertFrom-Json -ErrorAction Stop } + catch { $parseErrors.Add("line $lineNumber is not valid JSON: $($_.Exception.Message)"); continue } + + if (-not $event.PSObject.Properties['Action'] -or [string]::IsNullOrWhiteSpace([string]$event.Action)) { + $parseErrors.Add("line $lineNumber has no Action"); continue + } + if (-not $event.PSObject.Properties['Package'] -or [string]::IsNullOrWhiteSpace([string]$event.Package)) { + $parseErrors.Add("line $lineNumber has no Package"); continue + } + + $packageName = [string]$event.Package + if (-not $packageStates.ContainsKey($packageName)) { + $packageStates[$packageName] = [ordered]@{ package = $packageName; outcome = 'incomplete'; elapsed_seconds = $null; last_output = ''; tests_observed = 0 } + } + $packageState = $packageStates[$packageName] + $output = if ($event.PSObject.Properties['Output']) { [string]$event.Output } else { '' } + $testName = if ($event.PSObject.Properties['Test']) { [string]$event.Test } else { '' } + $elapsed = if ($event.PSObject.Properties['Elapsed']) { [double]$event.Elapsed } else { $null } + $action = [string]$event.Action + + if ([string]::IsNullOrWhiteSpace($testName)) { + if (-not [string]::IsNullOrEmpty($output)) { $packageState.last_output = $output.TrimEnd() } + if ($action -in @('pass', 'fail', 'skip')) { + if ($action -eq 'skip' -and $packageState.last_output -match '\[no test files\]') { $packageState.outcome = 'no_tests' } + else { $packageState.outcome = $action } + $packageState.elapsed_seconds = $elapsed + } + continue + } + + $testKey = "$packageName`0$testName" + if (-not $testStates.ContainsKey($testKey)) { + $testStates[$testKey] = [ordered]@{ package = $packageName; test = $testName; outcome = 'incomplete'; elapsed_seconds = $null; last_output = ''; skip_allowed = $false } + $packageState.tests_observed++ + } + $testState = $testStates[$testKey] + if (-not [string]::IsNullOrEmpty($output)) { $testState.last_output = $output.TrimEnd() } + if ($action -in @('pass', 'fail', 'skip')) { + $testState.outcome = $action + $testState.elapsed_seconds = $elapsed + if ($action -eq 'skip') { + $testState.skip_allowed = Test-MatchesAllowedSkip -Identity "$packageName/$testName" -Output $testState.last_output -Patterns $AllowedPatterns + } + } + } + + $packages = @($packageStates.Values | ForEach-Object { [pscustomobject]$_ } | Sort-Object package) + $tests = @($testStates.Values | ForEach-Object { [pscustomobject]$_ } | Sort-Object package, test) + $unexpectedSkips = [System.Collections.Generic.List[object]]::new() + if ($EnforceUnexpectedSkip) { + foreach ($test in $tests) { + if ($test.outcome -eq 'skip' -and -not $test.skip_allowed) { + $unexpectedSkips.Add([pscustomobject]@{ package = $test.package; test = $test.test; output = $test.last_output }) + } + } + foreach ($package in $packages) { + if ($package.outcome -eq 'skip' -and -not (Test-MatchesAllowedSkip -Identity $package.package -Output $package.last_output -Patterns $AllowedPatterns)) { + $unexpectedSkips.Add([pscustomobject]@{ package = $package.package; test = $null; output = $package.last_output }) + } + } + } + + $failedTests = @($tests | Where-Object outcome -eq 'fail').Count + $failedPackages = @($packages | Where-Object outcome -eq 'fail').Count + $incomplete = @($tests | Where-Object outcome -eq 'incomplete').Count + @($packages | Where-Object outcome -eq 'incomplete').Count + if ($tests.Count -eq 0) { $gateErrors.Add('zero tests executed; refusing a false-green package-only result') } + $verdict = if ($parseErrors.Count -gt 0 -or $gateErrors.Count -gt 0 -or $failedTests -gt 0 -or $failedPackages -gt 0 -or $incomplete -gt 0 -or $unexpectedSkips.Count -gt 0) { 'FAIL' } else { 'PASS' } + + [pscustomobject]@{ + schema_version = 1 + verdict = $verdict + input_path = [System.IO.Path]::GetFullPath($Path) + fail_on_unexpected_skip = $EnforceUnexpectedSkip + allowed_skip_patterns = @($AllowedPatterns) + counts = [ordered]@{ + packages = $packages.Count; tests = $tests.Count + passed = @($tests | Where-Object outcome -eq 'pass').Count + failed = $failedTests; skipped = @($tests | Where-Object outcome -eq 'skip').Count + no_tests = @($packages | Where-Object outcome -eq 'no_tests').Count + zero_tests = if ($tests.Count -eq 0) { 1 } else { 0 } + incomplete = $incomplete; unexpected_skips = $unexpectedSkips.Count; malformed_lines = $parseErrors.Count + } + packages = $packages + tests = $tests + unexpected_skips = @($unexpectedSkips) + errors = @(@($parseErrors) + @($gateErrors)) + } +} + +function Assert-SelfTest { param([bool]$Condition, [string]$Message); if (-not $Condition) { throw "SELFTEST FAIL: $Message" } } + +function Invoke-SelfTest { + $root = Join-Path ([System.IO.Path]::GetTempPath()) ("assert-go-test-json-" + [guid]::NewGuid().ToString('N')) + New-Item -ItemType Directory -Path $root -Force | Out-Null + try { + $passPath = Join-Path $root 'pass.jsonl' + Write-Utf8NoBom $passPath ((@( + '{"Action":"start","Package":"example/pass"}', + '{"Action":"run","Package":"example/pass","Test":"TestOK"}', + '{"Action":"pass","Package":"example/pass","Test":"TestOK","Elapsed":0.01}', + '{"Action":"pass","Package":"example/pass","Elapsed":0.02}' + ) -join "`n") + "`n") + $pass = Read-GoTestTranscript $passPath $true @() + Assert-SelfTest ($pass.verdict -eq 'PASS') 'passing transcript was rejected' + + $skipPath = Join-Path $root 'skip.jsonl' + Write-Utf8NoBom $skipPath ((@( + '{"Action":"start","Package":"example/skip"}', + '{"Action":"run","Package":"example/skip","Test":"TestNeedsDB"}', + '{"Action":"output","Package":"example/skip","Test":"TestNeedsDB","Output":"--- SKIP: TestNeedsDB (DATABASE_DSN not set)\\n"}', + '{"Action":"skip","Package":"example/skip","Test":"TestNeedsDB","Elapsed":0}', + '{"Action":"pass","Package":"example/skip","Elapsed":0.01}' + ) -join "`n") + "`n") + $skip = Read-GoTestTranscript $skipPath $true @() + Assert-SelfTest ($skip.verdict -eq 'FAIL' -and $skip.counts.unexpected_skips -eq 1) 'unexpected skip did not fail' + $allowed = Read-GoTestTranscript $skipPath $true @('TestNeedsDB$') + Assert-SelfTest ($allowed.verdict -eq 'PASS') 'allowlisted skip did not pass' + $invalidPattern = Read-GoTestTranscript $skipPath $true @('[') + Assert-SelfTest ($invalidPattern.verdict -eq 'FAIL' -and @($invalidPattern.errors | Where-Object { $_ -match 'invalid allowed-skip regex' }).Count -eq 1) 'invalid allowlist regex did not produce a machine failure summary' + + $noTestsPath = Join-Path $root 'no-tests.jsonl' + Write-Utf8NoBom $noTestsPath ((@( + '{"Action":"start","Package":"example/no-tests"}', + '{"Action":"output","Package":"example/no-tests","Output":"? example/no-tests [no test files]\\n"}', + '{"Action":"skip","Package":"example/no-tests","Elapsed":0}' + ) -join "`n") + "`n") + $noTests = Read-GoTestTranscript $noTestsPath $true @() + Assert-SelfTest ($noTests.verdict -eq 'FAIL' -and $noTests.counts.no_tests -eq 1) 'zero-test transcript did not fail closed' + + $malformedPath = Join-Path $root 'malformed.jsonl' + Write-Utf8NoBom $malformedPath "not-json`n" + $malformed = Read-GoTestTranscript $malformedPath $true @() + Assert-SelfTest ($malformed.verdict -eq 'FAIL' -and $malformed.counts.malformed_lines -eq 1) 'malformed transcript was accepted' + Write-Output 'SELFTEST PASS: assert-go-test-json.ps1' + } + finally { Remove-Item -LiteralPath $root -Recurse -Force -ErrorAction SilentlyContinue } +} + +if ($Help) { Show-Help; exit 0 } +if ($SelfTest) { Invoke-SelfTest; exit 0 } +if ([string]::IsNullOrWhiteSpace($InputPath)) { Write-Error '-InputPath is required.'; exit 1 } +if ([string]::IsNullOrWhiteSpace($SummaryPath)) { $SummaryPath = "$InputPath.summary.json" } + +try { + $summary = Read-GoTestTranscript $InputPath ([bool]$FailOnUnexpectedSkip) $AllowedSkipPattern + Write-Utf8NoBom $SummaryPath (($summary | ConvertTo-Json -Depth 12) + "`n") + Write-Output ("go test JSON verdict={0} packages={1} tests={2} passed={3} failed={4} skipped={5} unexpected_skips={6} malformed={7}" -f $summary.verdict, $summary.counts.packages, $summary.counts.tests, $summary.counts.passed, $summary.counts.failed, $summary.counts.skipped, $summary.counts.unexpected_skips, $summary.counts.malformed_lines) + Write-Output "summary=$([System.IO.Path]::GetFullPath($SummaryPath))" + if ($summary.verdict -ne 'PASS') { exit 1 } + exit 0 +} +catch { Write-Error $_; exit 1 } diff --git a/scripts/production-gates/cleanup-db-sessions.ps1 b/scripts/production-gates/cleanup-db-sessions.ps1 new file mode 100644 index 00000000..661f46a9 --- /dev/null +++ b/scripts/production-gates/cleanup-db-sessions.ps1 @@ -0,0 +1,241 @@ +[CmdletBinding()] +param( + [string]$AdminDsn = $env:ENGRAM_TEST_ADMIN_DSN, + [string]$DatabaseName, + [string]$SchemaName = 'public', + [string]$PostgresContainer, + [string]$ArtifactRoot = '.agent/reports/evidence/production-ready/release-gates-foundation', + [string]$RunId, + [switch]$Help, + [switch]$SelfTest +) + +Set-StrictMode -Version Latest +$ErrorActionPreference = 'Stop' +$ExpectedPrefix = 'engram_prc_rg_' + +function Show-Help { + @' +cleanup-db-sessions.ps1 + +Fail-closed cleanup for a disposable RELEASE-GATES PostgreSQL database. It +captures pg_stat_activity, terminates remaining sessions, drops the database +with FORCE, verifies absence, and writes raw stdout/stderr plus cleanup.json. + +Usage: + pwsh ./scripts/production-gates/cleanup-db-sessions.ps1 \ + -AdminDsn \ + -DatabaseName \ + [-SchemaName public] \ + [-PostgresContainer ] \ + -ArtifactRoot \ + -RunId + +Safety: + Only names beginning with the fixed `engram_prc_rg_` prefix and matching + PostgreSQL identifier rules can be dropped. The prefix is not configurable; + system and operator-owned databases are rejected. + +Options: + -Help Print this help and exit 0. + -SelfTest Run deterministic safety/redaction tests without a DB. + -AdminDsn Administrative PostgreSQL URL; password is never logged. + -PostgresContainer Run psql through docker exec; otherwise host psql is used. + +Exit codes: + 0 Sessions terminated (if any), database dropped, absence verified. + 1 Unsafe input, psql failure, termination/drop failure, or failed verification. +'@ | Write-Output +} + +function Write-Utf8NoBom { + param([Parameter(Mandatory)][string]$Path, [Parameter(Mandatory)][AllowEmptyString()][string]$Content) + $parent = Split-Path -Parent $Path + if ($parent) { New-Item -ItemType Directory -Path $parent -Force | Out-Null } + [System.IO.File]::WriteAllText([System.IO.Path]::GetFullPath($Path), $Content, [System.Text.UTF8Encoding]::new($false)) +} + +function Get-ConnectionInfo { + param([Parameter(Mandatory)][string]$Dsn) + try { $uri = [uri]$Dsn } catch { throw "Admin DSN is not a valid URI: $($_.Exception.Message)" } + if ($uri.Scheme -notin @('postgres', 'postgresql')) { throw "Admin DSN scheme must be postgres or postgresql, got '$($uri.Scheme)'" } + $parts = $uri.UserInfo -split ':', 2 + $user = if ($parts.Count -ge 1) { [uri]::UnescapeDataString($parts[0]) } else { '' } + $password = if ($parts.Count -eq 2) { [uri]::UnescapeDataString($parts[1]) } else { '' } + if ([string]::IsNullOrWhiteSpace($user)) { throw 'Admin DSN must contain a user.' } + $database = $uri.AbsolutePath.Trim('/'); if ([string]::IsNullOrWhiteSpace($database)) { $database = 'postgres' } + $sslMode = $null + foreach ($pair in $uri.Query.TrimStart('?').Split('&', [System.StringSplitOptions]::RemoveEmptyEntries)) { + $kv = $pair -split '=', 2 + if ([uri]::UnescapeDataString($kv[0]) -eq 'sslmode' -and $kv.Count -eq 2) { $sslMode = [uri]::UnescapeDataString($kv[1]) } + } + [pscustomobject]@{ + Uri = $uri; User = $user; Password = $password; Host = $uri.Host + Port = if ($uri.IsDefaultPort -or $uri.Port -lt 1) { 5432 } else { $uri.Port } + Database = $database; SslMode = $sslMode; Original = $Dsn + } +} + +function Get-RedactedDsn { + param([Parameter(Mandatory)][string]$Dsn) + $connection = Get-ConnectionInfo $Dsn + $builder = [System.UriBuilder]::new($connection.Uri) + $builder.UserName = [uri]::EscapeDataString($connection.User) + $builder.Password = 'REDACTED' + return $builder.Uri.AbsoluteUri +} + +function Protect-Text { + param([string]$Text, [Parameter(Mandatory)]$Connection) + if ($null -eq $Text) { return '' } + $protected = [string]$Text + if (-not [string]::IsNullOrEmpty($Connection.Original)) { $protected = $protected.Replace($Connection.Original, (Get-RedactedDsn $Connection.Original)) } + if (-not [string]::IsNullOrEmpty($Connection.Password)) { + $protected = $protected.Replace(":" + $Connection.Password + "@", ':REDACTED@') + $escaped = [regex]::Escape($Connection.Password) + $protected = [regex]::Replace($protected, "(?i)(password|pwd|PGPASSWORD)(\s*[:=]\s*)$escaped", '$1$2REDACTED') + } + return $protected +} + +function Assert-SafeDatabaseName { + param([Parameter(Mandatory)][string]$Name, [Parameter(Mandatory)][string]$Prefix) + if ($Name -in @('postgres', 'template0', 'template1')) { throw "refusing to clean protected database '$Name'" } + if (-not $Name.StartsWith($Prefix, [System.StringComparison]::Ordinal)) { throw "database '$Name' does not begin with required prefix '$Prefix'" } + if ($Name -notmatch '^[a-z][a-z0-9_]{0,62}$') { throw "database '$Name' is not a safe PostgreSQL identifier" } +} + +$script:CommandRecords = [System.Collections.Generic.List[object]]::new() + +function Invoke-CapturedProcess { + param( + [Parameter(Mandatory)][string]$Name, + [Parameter(Mandatory)][string]$FilePath, + [Parameter(Mandatory)][AllowEmptyCollection()][string[]]$ArgumentList, + [hashtable]$Environment = @{}, + [Parameter(Mandatory)][string]$StdoutPath, + [Parameter(Mandatory)][string]$StderrPath, + [Parameter(Mandatory)]$Connection, + [int]$TimeoutSeconds = 120 + ) + $start = [DateTimeOffset]::UtcNow + $process = $null; $stdout = ''; $stderr = ''; $exitCode = 127; $timedOut = $false + try { + $psi = [System.Diagnostics.ProcessStartInfo]::new() + $psi.FileName = $FilePath; $psi.UseShellExecute = $false; $psi.RedirectStandardOutput = $true; $psi.RedirectStandardError = $true; $psi.CreateNoWindow = $true + foreach ($argument in $ArgumentList) { [void]$psi.ArgumentList.Add($argument) } + foreach ($entry in $Environment.GetEnumerator()) { $psi.Environment[$entry.Key] = [string]$entry.Value } + $process = [System.Diagnostics.Process]::new(); $process.StartInfo = $psi + if (-not $process.Start()) { throw "process '$FilePath' did not start" } + $stdoutTask = $process.StandardOutput.ReadToEndAsync(); $stderrTask = $process.StandardError.ReadToEndAsync() + $timedOut = -not $process.WaitForExit($TimeoutSeconds * 1000) + if ($timedOut) { try { $process.Kill($true) } catch { }; $process.WaitForExit() } + $stdout = $stdoutTask.GetAwaiter().GetResult(); $stderr = $stderrTask.GetAwaiter().GetResult() + $exitCode = if ($timedOut) { 124 } else { $process.ExitCode } + if ($timedOut) { $stderr += "`nPROCESS_TIMEOUT after $TimeoutSeconds seconds`n" } + } + catch { + if ($null -ne $process) { try { if (-not $process.HasExited) { $process.Kill($true); $process.WaitForExit() } } catch { } } + $stderr = "PROCESS_START_OR_CAPTURE_ERROR: $($_.Exception.Message)`n"; $exitCode = 127 + } + finally { if ($null -ne $process) { $process.Dispose() } } + $stdout = Protect-Text $stdout $Connection + $stderr = Protect-Text $stderr $Connection + Write-Utf8NoBom $StdoutPath $stdout; Write-Utf8NoBom $StderrPath $stderr + $end = [DateTimeOffset]::UtcNow + $displayArgs = @($ArgumentList | ForEach-Object { Protect-Text $_ $Connection }) + $record = [pscustomobject]@{ + name = $Name; executable = $FilePath; arguments = $displayArgs; environment_keys = @($Environment.Keys | Sort-Object); command = (@($FilePath) + $displayArgs) -join ' ' + started_at = $start.ToString('O'); finished_at = $end.ToString('O'); duration_seconds = [math]::Round(($end - $start).TotalSeconds, 3) + exit_code = $exitCode; timed_out = $timedOut; stdout = [System.IO.Path]::GetFullPath($StdoutPath); stderr = [System.IO.Path]::GetFullPath($StderrPath) + } + $script:CommandRecords.Add($record) + [pscustomobject]@{ ExitCode = $exitCode; Stdout = $stdout; Stderr = $stderr; Record = $record } +} + +function Invoke-Psql { + param( + [Parameter(Mandatory)][string]$Name, [Parameter(Mandatory)][string]$Sql, + [Parameter(Mandatory)][string]$Database, [Parameter(Mandatory)][string]$OutputStem, + [Parameter(Mandatory)]$Connection, [string]$Container + ) + if (-not [string]::IsNullOrWhiteSpace($Container)) { + return Invoke-CapturedProcess $Name 'docker' @('exec', $Container, 'psql', '-X', '-v', 'ON_ERROR_STOP=1', '-U', $Connection.User, '-d', $Database, '-At', '-F', '|', '-c', $Sql) @{} "$OutputStem.stdout.log" "$OutputStem.stderr.log" $Connection + } + $psql = Get-Command psql -ErrorAction SilentlyContinue + $psqlPath = if ($null -ne $psql) { $psql.Source } else { 'psql' } + $environment = @{}; if ($Connection.Password) { $environment.PGPASSWORD = $Connection.Password }; if ($Connection.SslMode) { $environment.PGSSLMODE = $Connection.SslMode } + return Invoke-CapturedProcess $Name $psqlPath @('-X', '-v', 'ON_ERROR_STOP=1', '-h', $Connection.Host, '-p', [string]$Connection.Port, '-U', $Connection.User, '-d', $Database, '-At', '-F', '|', '-c', $Sql) $environment "$OutputStem.stdout.log" "$OutputStem.stderr.log" $Connection +} + +function Assert-SelfTest { param([bool]$Condition, [string]$Message); if (-not $Condition) { throw "SELFTEST FAIL: $Message" } } + +function Invoke-SelfTest { + Assert-SafeDatabaseName 'engram_prc_rg_20260710_abcd1234_r1' 'engram_prc_rg_' + $unsafeRejected = $false; try { Assert-SafeDatabaseName 'engram' 'engram_prc_rg_' } catch { $unsafeRejected = $true } + Assert-SelfTest $unsafeRejected 'unsafe database name was accepted' + $connection = Get-ConnectionInfo 'postgres://release_user:s3cr3t@localhost:55432/postgres?sslmode=disable' + Assert-SelfTest ($connection.User -eq 'release_user' -and $connection.Port -eq 55432 -and $connection.SslMode -eq 'disable') 'DSN parsing failed' + $protected = Protect-Text 'dsn=postgres://release_user:s3cr3t@localhost:55432/postgres?sslmode=disable password=s3cr3t' $connection + Assert-SelfTest (-not $protected.Contains('s3cr3t')) 'DSN/password redaction failed' + Write-Output 'SELFTEST PASS: cleanup-db-sessions.ps1' +} + +if ($Help) { Show-Help; exit 0 } +if ($SelfTest) { Invoke-SelfTest; exit 0 } +if ([string]::IsNullOrWhiteSpace($AdminDsn)) { Write-Error '-AdminDsn or ENGRAM_TEST_ADMIN_DSN is required.'; exit 1 } +if ([string]::IsNullOrWhiteSpace($DatabaseName)) { Write-Error '-DatabaseName is required.'; exit 1 } +if ([string]::IsNullOrWhiteSpace($RunId)) { $RunId = 'cleanup-' + [DateTimeOffset]::UtcNow.ToString('yyyyMMddTHHmmssZ') } + +$cleanupDirectory = Join-Path $ArtifactRoot 'cleanup'; New-Item -ItemType Directory -Path $cleanupDirectory -Force | Out-Null +$summaryPath = Join-Path $cleanupDirectory 'cleanup.json' +$connection = $null; $verdict = 'FAIL'; [int]$remaining = -1; $terminated = $null +$errors = [System.Collections.Generic.List[string]]::new() + +try { + Assert-SafeDatabaseName $DatabaseName $ExpectedPrefix + if ($SchemaName -notmatch '^[a-z][a-z0-9_]{0,62}$') { throw "schema '$SchemaName' is not a safe PostgreSQL identifier" } + $connection = Get-ConnectionInfo $AdminDsn + $quotedDb = '"' + $DatabaseName.Replace('"', '""') + '"' + $literalDb = $DatabaseName.Replace("'", "''") + $snapshotSql = "SELECT COALESCE(json_agg(row_to_json(s)), '[]'::json)::text FROM (SELECT pid, usename, datname, state, backend_type, application_name, client_addr::text AS client_addr, wait_event_type, wait_event, query_start FROM pg_stat_activity WHERE datname = '$literalDb' ORDER BY pid) AS s;" + $before = Invoke-Psql 'pg-stat-activity-before-cleanup' $snapshotSql $connection.Database (Join-Path $cleanupDirectory 'pg-stat-activity-before') $connection $PostgresContainer + if ($before.ExitCode -ne 0) { $errors.Add("pg_stat_activity snapshot failed with exit $($before.ExitCode)") } + + $terminateSql = "SELECT COALESCE(json_agg(row_to_json(s)), '[]'::json)::text FROM (SELECT pid, pg_terminate_backend(pid) AS terminated FROM pg_stat_activity WHERE datname = '$literalDb' AND pid <> pg_backend_pid() ORDER BY pid) AS s;" + $terminate = Invoke-Psql 'terminate-database-sessions' $terminateSql $connection.Database (Join-Path $cleanupDirectory 'terminate-sessions') $connection $PostgresContainer + if ($terminate.ExitCode -ne 0) { $errors.Add("session termination failed with exit $($terminate.ExitCode)") } + else { + try { + $terminationRows = @($terminate.Stdout.Trim() | ConvertFrom-Json) + $terminated = @($terminationRows | Where-Object terminated -eq $true).Count + $failedTerminations = @($terminationRows | Where-Object terminated -ne $true).Count + if ($failedTerminations -gt 0) { $errors.Add("$failedTerminations database session(s) refused termination") } + } + catch { $errors.Add("could not parse termination result: $($_.Exception.Message)") } + } + + $drop = Invoke-Psql 'drop-fresh-database' "DROP DATABASE IF EXISTS $quotedDb WITH (FORCE);" $connection.Database (Join-Path $cleanupDirectory 'drop-database') $connection $PostgresContainer + if ($drop.ExitCode -ne 0) { $errors.Add("database drop failed with exit $($drop.ExitCode)") } + $verify = Invoke-Psql 'verify-database-absent' "SELECT count(*) FROM pg_database WHERE datname = '$literalDb';" $connection.Database (Join-Path $cleanupDirectory 'verify-database-absent') $connection $PostgresContainer + if ($verify.ExitCode -ne 0) { $errors.Add("database absence verification failed with exit $($verify.ExitCode)") } + elseif (-not [int]::TryParse($verify.Stdout.Trim(), [ref]$remaining)) { $errors.Add("database absence verification returned non-integer '$($verify.Stdout.Trim())'") } + elseif ($remaining -ne 0) { $errors.Add('database still exists after cleanup') } + if ($errors.Count -eq 0) { $verdict = 'PASS' } +} +catch { $errors.Add($_.Exception.Message) } +finally { + $summary = [pscustomobject]@{ + schema_version = 1; run_id = $RunId; timestamp = [DateTimeOffset]::UtcNow.ToString('O'); verdict = $verdict + database = $DatabaseName; schema = $SchemaName; database_schema_identity = "$DatabaseName.$SchemaName" + admin_dsn = if ($null -ne $connection) { Get-RedactedDsn $AdminDsn } else { 'REDACTED' } + postgres_container = if ([string]::IsNullOrWhiteSpace($PostgresContainer)) { $null } else { $PostgresContainer } + terminated_sessions = $terminated; remaining_database_count = $remaining + commands = @($script:CommandRecords); errors = @($errors) + } + Write-Utf8NoBom $summaryPath (($summary | ConvertTo-Json -Depth 10) + "`n") + Write-Output "cleanup verdict=$verdict database=$DatabaseName schema=$SchemaName terminated_sessions=$terminated remaining_database_count=$remaining" + Write-Output "summary=$([System.IO.Path]::GetFullPath($summaryPath))" +} +if ($verdict -ne 'PASS') { exit 1 } +exit 0 diff --git a/scripts/production-gates/run-db-suite.ps1 b/scripts/production-gates/run-db-suite.ps1 new file mode 100644 index 00000000..faa3ff22 --- /dev/null +++ b/scripts/production-gates/run-db-suite.ps1 @@ -0,0 +1,456 @@ +[CmdletBinding()] +param( + [string[]]$Package = @('./...'), + [string]$Run, + [switch]$FreshDatabase, + [ValidateRange(1, 20)][int]$Repeat = 1, + [switch]$FailOnUnexpectedSkip, + [string[]]$AllowedSkipPattern = @(), + [string]$AdminDsn = $env:ENGRAM_TEST_ADMIN_DSN, + [string]$PostgresContainer, + [string]$PostgresImage = 'pgvector/pgvector:pg17', + [ValidateRange(1, 99)][int]$ConnectionBudget = 20, + [ValidateSet('Auto', 'Full', 'Targeted')][string]$CoveragePolicy = 'Auto', + [ValidateRange(1, 120)][int]$TimeoutMinutes = 30, + [string]$ArtifactRoot = '.agent/reports/evidence/production-ready/release-gates-foundation', + [string]$RunId, + [switch]$Help, + [switch]$SelfTest +) + +Set-StrictMode -Version Latest +$ErrorActionPreference = 'Stop' + +function Show-Help { + @' +run-db-suite.ps1 + +Runs Go database tests against a fresh disposable PostgreSQL database for every +repetition. Every child exit code is captured independently; a later success +can never mask an earlier failure. Raw stdout/stderr and machine JSON are under: + + .agent/reports/evidence/production-ready/ + release-gates-foundation// + +Usage: + pwsh ./scripts/production-gates/run-db-suite.ps1 \ + -FreshDatabase [-Package ./...] [-Run ''] [-Repeat 3] \ + [-FailOnUnexpectedSkip] [-AdminDsn ] \ + [-PostgresContainer ] + +Required behavior: + * -FreshDatabase is mandatory. + * Each repeat creates a unique `.public` identity. + * `go test` runs with `-json -p 1 -parallel 1 -count=1`. + * Missing coverage is fatal. Full `./...` runs enforce >=60% overall and the + historical package floors. Scoped runs retain mandatory targeted coverage. + * pg_stat_activity and server headroom are captured before/after tests. Pool + capacity is bounded by -ConnectionBudget; post-test run-DB sessions must be + exactly zero before cleanup. Cleanup still terminates/drops after failure. + +Options: + -Help Print this help and exit 0. + -SelfTest Prove exit aggregation/redaction without PostgreSQL. + -Package Go package patterns; whitespace-delimited input expands. + -Run Go test -run regular expression. + -FreshDatabase Required fail-closed release mode. + -Repeat Fresh database repetitions (1..20). + -FailOnUnexpectedSkip Fail on non-allowlisted test/package skips. + -AllowedSkipPattern Explicit regex allowlist. + -CoveragePolicy Auto, Full, or Targeted. + -ConnectionBudget App pool cap and required free server headroom. + -AdminDsn Admin URL or ENGRAM_TEST_ADMIN_DSN; always redacted. + -PostgresContainer Use psql through docker exec; else host psql. + +Exit codes: + 0 Every setup/test/parser/coverage/cleanup command passed for every repeat. + 1 Any child/process/assertion/setup/cleanup failure occurred. +'@ | Write-Output +} + +function Write-Utf8NoBom { + param([Parameter(Mandatory)][string]$Path, [Parameter(Mandatory)][AllowEmptyString()][string]$Content) + $parent = Split-Path -Parent $Path + if ($parent) { New-Item -ItemType Directory -Path $parent -Force | Out-Null } + [System.IO.File]::WriteAllText([System.IO.Path]::GetFullPath($Path), $Content, [System.Text.UTF8Encoding]::new($false)) +} + +function Get-ConnectionInfo { + param([Parameter(Mandatory)][string]$Dsn) + try { $uri = [uri]$Dsn } catch { throw "Admin DSN is not a valid URI: $($_.Exception.Message)" } + if ($uri.Scheme -notin @('postgres', 'postgresql')) { throw "Admin DSN scheme must be postgres or postgresql, got '$($uri.Scheme)'" } + $parts = $uri.UserInfo -split ':', 2 + $user = if ($parts.Count -ge 1) { [uri]::UnescapeDataString($parts[0]) } else { '' } + $password = if ($parts.Count -eq 2) { [uri]::UnescapeDataString($parts[1]) } else { '' } + if ([string]::IsNullOrWhiteSpace($user)) { throw 'Admin DSN must contain a user.' } + $database = $uri.AbsolutePath.Trim('/'); if ([string]::IsNullOrWhiteSpace($database)) { $database = 'postgres' } + $sslMode = $null + foreach ($pair in $uri.Query.TrimStart('?').Split('&', [System.StringSplitOptions]::RemoveEmptyEntries)) { + $kv = $pair -split '=', 2 + if ([uri]::UnescapeDataString($kv[0]) -eq 'sslmode' -and $kv.Count -eq 2) { $sslMode = [uri]::UnescapeDataString($kv[1]) } + } + [pscustomobject]@{ + Uri = $uri; User = $user; Password = $password; Host = $uri.Host + Port = if ($uri.IsDefaultPort -or $uri.Port -lt 1) { 5432 } else { $uri.Port } + Database = $database; SslMode = $sslMode; Original = $Dsn + } +} + +function Get-RedactedDsn { + param([Parameter(Mandatory)][string]$Dsn) + $connection = Get-ConnectionInfo $Dsn + $builder = [System.UriBuilder]::new($connection.Uri) + $builder.UserName = [uri]::EscapeDataString($connection.User); $builder.Password = 'REDACTED' + return $builder.Uri.AbsoluteUri +} + +function New-DatabaseDsn { + param([Parameter(Mandatory)][string]$Dsn, [Parameter(Mandatory)][string]$Database, [Parameter(Mandatory)][string]$ApplicationName) + $builder = [System.UriBuilder]::new([uri]$Dsn); $builder.Path = "/$Database" + $pairs = [System.Collections.Generic.List[string]]::new() + foreach ($pair in $builder.Query.TrimStart('?').Split('&', [System.StringSplitOptions]::RemoveEmptyEntries)) { + $key = [uri]::UnescapeDataString(($pair -split '=', 2)[0]); if ($key -ne 'application_name') { $pairs.Add($pair) } + } + $pairs.Add('application_name=' + [uri]::EscapeDataString($ApplicationName)); $builder.Query = $pairs -join '&' + return $builder.Uri.AbsoluteUri +} + +function Protect-Text { + param([string]$Text, [Parameter(Mandatory)]$Connection, [string[]]$SensitiveValues = @()) + if ($null -eq $Text) { return '' } + $protected = [string]$Text + foreach ($value in $SensitiveValues) { if ($value) { $protected = $protected.Replace($value, 'REDACTED_DATABASE_DSN') } } + if ($Connection.Original) { $protected = $protected.Replace($Connection.Original, (Get-RedactedDsn $Connection.Original)) } + if ($Connection.Password) { + $protected = $protected.Replace(":" + $Connection.Password + "@", ':REDACTED@') + $escaped = [regex]::Escape($Connection.Password) + $protected = [regex]::Replace($protected, "(?i)(password|pwd|PGPASSWORD)(\s*[:=]\s*)$escaped", '$1$2REDACTED') + } + return $protected +} + +function Get-NormalizedPackages { + param([string[]]$RawPackages) + $normalized = [System.Collections.Generic.List[string]]::new() + foreach ($raw in $RawPackages) { foreach ($item in ([string]$raw -split '\s+')) { if ($item) { $normalized.Add($item) } } } + if ($normalized.Count -eq 0) { throw 'At least one -Package value is required.' } + return @($normalized) +} + +function Get-EffectiveCoveragePolicy { + param([string]$Requested, [string[]]$Packages) + if ($Requested -ne 'Auto') { return $Requested } + if ($Packages.Count -eq 1 -and $Packages[0] -eq './...') { return 'Full' } + return 'Targeted' +} + +$script:CommandRecords = [System.Collections.Generic.List[object]]::new() + +function Invoke-CapturedProcess { + param( + [Parameter(Mandatory)][string]$Name, [Parameter(Mandatory)][string]$FilePath, + [Parameter(Mandatory)][AllowEmptyCollection()][string[]]$ArgumentList, [hashtable]$Environment = @{}, + [Parameter(Mandatory)][string]$StdoutPath, [Parameter(Mandatory)][string]$StderrPath, + [Parameter(Mandatory)]$Connection, [string[]]$SensitiveValues = @(), [int]$TimeoutSeconds = 1800 + ) + $start = [DateTimeOffset]::UtcNow + $process = $null; $stdout = ''; $stderr = ''; $timedOut = $false; $exitCode = 127 + try { + $psi = [System.Diagnostics.ProcessStartInfo]::new() + $psi.FileName = $FilePath; $psi.UseShellExecute = $false; $psi.RedirectStandardOutput = $true; $psi.RedirectStandardError = $true; $psi.CreateNoWindow = $true + foreach ($argument in $ArgumentList) { [void]$psi.ArgumentList.Add($argument) } + foreach ($entry in $Environment.GetEnumerator()) { $psi.Environment[$entry.Key] = [string]$entry.Value } + $process = [System.Diagnostics.Process]::new(); $process.StartInfo = $psi + if (-not $process.Start()) { throw "process '$FilePath' did not start" } + $stdoutTask = $process.StandardOutput.ReadToEndAsync(); $stderrTask = $process.StandardError.ReadToEndAsync() + $timedOut = -not $process.WaitForExit($TimeoutSeconds * 1000) + if ($timedOut) { try { $process.Kill($true) } catch { }; $process.WaitForExit() } + $stdout = $stdoutTask.GetAwaiter().GetResult(); $stderr = $stderrTask.GetAwaiter().GetResult() + $exitCode = if ($timedOut) { 124 } else { $process.ExitCode } + if ($timedOut) { $stderr += "`nPROCESS_TIMEOUT after $TimeoutSeconds seconds`n" } + } + catch { + if ($null -ne $process) { try { if (-not $process.HasExited) { $process.Kill($true); $process.WaitForExit() } } catch { } } + $stderr = "PROCESS_START_OR_CAPTURE_ERROR: $($_.Exception.Message)`n" + $exitCode = 127 + } + finally { if ($null -ne $process) { $process.Dispose() } } + $stdout = Protect-Text $stdout $Connection $SensitiveValues + $stderr = Protect-Text $stderr $Connection $SensitiveValues + Write-Utf8NoBom $StdoutPath $stdout; Write-Utf8NoBom $StderrPath $stderr + $end = [DateTimeOffset]::UtcNow + $displayArgs = @($ArgumentList | ForEach-Object { Protect-Text $_ $Connection $SensitiveValues }) + $record = [pscustomobject]@{ + name = $Name; executable = $FilePath; arguments = $displayArgs; environment_keys = @($Environment.Keys | Sort-Object); command = (@($FilePath) + $displayArgs) -join ' ' + started_at = $start.ToString('O'); finished_at = $end.ToString('O'); duration_seconds = [math]::Round(($end - $start).TotalSeconds, 3) + exit_code = $exitCode; timed_out = $timedOut + stdout = [System.IO.Path]::GetFullPath($StdoutPath); stderr = [System.IO.Path]::GetFullPath($StderrPath) + } + $script:CommandRecords.Add($record) + [pscustomobject]@{ ExitCode = $exitCode; Stdout = $stdout; Stderr = $stderr; Record = $record } +} + +function Invoke-Psql { + param( + [Parameter(Mandatory)][string]$Name, [Parameter(Mandatory)][string]$Sql, + [Parameter(Mandatory)][string]$Database, [Parameter(Mandatory)][string]$OutputStem, + [Parameter(Mandatory)]$Connection, [string]$Container + ) + if ($Container) { + return Invoke-CapturedProcess $Name 'docker' @('exec', $Container, 'psql', '-X', '-v', 'ON_ERROR_STOP=1', '-U', $Connection.User, '-d', $Database, '-At', '-F', '|', '-c', $Sql) @{} "$OutputStem.stdout.log" "$OutputStem.stderr.log" $Connection @() 120 + } + $psql = Get-Command psql -ErrorAction SilentlyContinue + $psqlPath = if ($null -ne $psql) { $psql.Source } else { 'psql' } + $environment = @{}; if ($Connection.Password) { $environment.PGPASSWORD = $Connection.Password }; if ($Connection.SslMode) { $environment.PGSSLMODE = $Connection.SslMode } + return Invoke-CapturedProcess $Name $psqlPath @('-X', '-v', 'ON_ERROR_STOP=1', '-h', $Connection.Host, '-p', [string]$Connection.Port, '-U', $Connection.User, '-d', $Database, '-At', '-F', '|', '-c', $Sql) $environment "$OutputStem.stdout.log" "$OutputStem.stderr.log" $Connection @() 120 +} + +function Get-IntegerOutput { + param([Parameter(Mandatory)]$Result, [Parameter(Mandatory)][string]$Name) + [int]$value = 0 + if ($Result.ExitCode -ne 0) { throw "$Name failed with exit $($Result.ExitCode)" } + if (-not [int]::TryParse($Result.Stdout.Trim(), [ref]$value)) { throw "$Name returned non-integer '$($Result.Stdout.Trim())'" } + return $value +} + +function Test-RequiredPostgresVersion { + param([Parameter(Mandatory)][int]$ServerVersionNumber) + return $ServerVersionNumber -ge 170000 -and $ServerVersionNumber -lt 180000 +} + +function Test-PostgresImageMatch { + param([Parameter(Mandatory)][string]$Actual, [Parameter(Mandatory)][string]$Expected) + return [string]::Equals($Actual, $Expected, [System.StringComparison]::OrdinalIgnoreCase) +} + +function Test-ConnectionBudgetFits { + param([Parameter(Mandatory)][int]$Active, [Parameter(Mandatory)][int]$Budget, [Parameter(Mandatory)][int]$UsableCapacity) + return ($Active + $Budget) -le $UsableCapacity +} + +function Test-NoResidualRunSessions { + param([Parameter(Mandatory)][int]$SessionCount) + return $SessionCount -eq 0 +} + +function Assert-SelfTestCondition { param([bool]$Condition, [string]$Message); if (-not $Condition) { throw "SELFTEST FAIL: $Message" } } + +function Invoke-SelfTest { + $root = Join-Path ([System.IO.Path]::GetTempPath()) ("run-db-suite-" + [guid]::NewGuid().ToString('N')) + New-Item -ItemType Directory -Path $root -Force | Out-Null + try { + $connection = Get-ConnectionInfo 'postgres://release_user:s3cr3t@localhost:55432/postgres?sslmode=disable' + $pwsh = (Get-Command pwsh -ErrorAction Stop).Source + $failed = Invoke-CapturedProcess 'selftest-failure' $pwsh @('-NoProfile', '-Command', 'exit 7') @{} (Join-Path $root 'failure.stdout.log') (Join-Path $root 'failure.stderr.log') $connection @() 30 + $succeeded = Invoke-CapturedProcess 'selftest-later-success' $pwsh @('-NoProfile', '-Command', 'Write-Output later-success; exit 0') @{} (Join-Path $root 'success.stdout.log') (Join-Path $root 'success.stderr.log') $connection @() 30 + $missingProcess = Invoke-CapturedProcess 'selftest-missing-process' ('engram-missing-process-' + [guid]::NewGuid().ToString('N')) @() @{} (Join-Path $root 'missing.stdout.log') (Join-Path $root 'missing.stderr.log') $connection @() 30 + $aggregateFailed = $failed.ExitCode -ne 0 -or $succeeded.ExitCode -ne 0 + Assert-SelfTestCondition ($failed.ExitCode -eq 7) 'failing child exit code was not captured' + Assert-SelfTestCondition ($succeeded.ExitCode -eq 0) 'later success did not execute' + Assert-SelfTestCondition $aggregateFailed 'later success masked the earlier failure' + Assert-SelfTestCondition ($missingProcess.ExitCode -eq 127 -and $missingProcess.Stderr -match 'PROCESS_START_OR_CAPTURE_ERROR') 'process start failure did not produce captured raw evidence and exit 127' + $targetDsn = New-DatabaseDsn $connection.Original 'engram_prc_rg_selftest' 'engram-prc-selftest' + $redacted = Protect-Text "DATABASE_DSN=$targetDsn" $connection @($targetDsn) + Assert-SelfTestCondition (-not $redacted.Contains('s3cr3t') -and -not $redacted.Contains('engram_prc_rg_selftest')) 'generated DATABASE_DSN was not fully redacted' + Assert-SelfTestCondition ((Get-EffectiveCoveragePolicy Auto @('./...')) -eq 'Full') 'Auto coverage did not select Full' + Assert-SelfTestCondition ((Get-EffectiveCoveragePolicy Auto @('./internal/db/gorm')) -eq 'Targeted') 'Auto coverage did not select Targeted' + Assert-SelfTestCondition (Test-RequiredPostgresVersion 170010) 'PostgreSQL 17 identity was rejected' + Assert-SelfTestCondition (-not (Test-RequiredPostgresVersion 160010)) 'PostgreSQL 16 identity was accepted' + Assert-SelfTestCondition (-not (Test-RequiredPostgresVersion 180000)) 'PostgreSQL 18 identity was accepted' + Assert-SelfTestCondition (Test-PostgresImageMatch 'pgvector/pgvector:pg17' 'PGVECTOR/PGVECTOR:PG17') 'exact pgvector image comparison should be case-insensitive' + Assert-SelfTestCondition (-not (Test-PostgresImageMatch 'postgres:17' 'pgvector/pgvector:pg17')) 'non-pgvector image was accepted' + Assert-SelfTestCondition (Test-ConnectionBudgetFits 6 20 97) 'valid connection headroom was rejected' + Assert-SelfTestCondition (-not (Test-ConnectionBudgetFits 80 20 97)) 'exhausted connection headroom was accepted' + Assert-SelfTestCondition (Test-NoResidualRunSessions 0) 'zero post-test sessions were rejected' + Assert-SelfTestCondition (-not (Test-NoResidualRunSessions 1)) 'a residual post-test session was accepted within the pool budget' + Write-Output 'SELFTEST PASS: run-db-suite.ps1 (earlier exit 7 remained fatal after later exit 0)' + } + finally { Remove-Item -LiteralPath $root -Recurse -Force -ErrorAction SilentlyContinue } +} + +if ($Help) { Show-Help; exit 0 } +if ($SelfTest) { Invoke-SelfTest; exit 0 } +if (-not $FreshDatabase) { Write-Error '-FreshDatabase is mandatory for RELEASE-GATES DB evidence.'; exit 1 } +if ([string]::IsNullOrWhiteSpace($AdminDsn)) { Write-Error '-AdminDsn or ENGRAM_TEST_ADMIN_DSN is required.'; exit 1 } + +[string[]]$packages = @(Get-NormalizedPackages $Package) +$effectiveCoverage = Get-EffectiveCoveragePolicy $CoveragePolicy $packages +$connection = Get-ConnectionInfo $AdminDsn +$safeRunToken = [guid]::NewGuid().ToString('N').Substring(0, 10) +if ([string]::IsNullOrWhiteSpace($RunId)) { $RunId = [DateTimeOffset]::UtcNow.ToString('yyyyMMddTHHmmssZ') + '-' + $safeRunToken } +if ($RunId -notmatch '^[A-Za-z0-9._-]+$') { Write-Error '-RunId may contain only letters, digits, dot, underscore, and hyphen.'; exit 1 } + +$runDirectory = Join-Path $ArtifactRoot $RunId +if (Test-Path -LiteralPath $runDirectory) { Write-Error "artifact directory already exists; choose a unique -RunId: $runDirectory"; exit 1 } +New-Item -ItemType Directory -Path $runDirectory -Force | Out-Null +$summaryPath = Join-Path $runDirectory 'summary.json'; $commandsPath = Join-Path $runDirectory 'commands.json'; $environmentPath = Join-Path $runDirectory 'environment.json' +$repeatResults = [System.Collections.Generic.List[object]]::new(); $runErrors = [System.Collections.Generic.List[string]]::new() +$overallFailed = $false; $startedAt = [DateTimeOffset]::UtcNow +$scriptDirectory = Split-Path -Parent $PSCommandPath +$jsonAssertionScript = Join-Path $scriptDirectory 'assert-go-test-json.ps1'; $coverageAssertionScript = Join-Path $scriptDirectory 'assert-coverage.ps1'; $cleanupScript = Join-Path $scriptDirectory 'cleanup-db-sessions.ps1' +$pwshCommand = Get-Command pwsh -ErrorAction SilentlyContinue; $goCommand = Get-Command go -ErrorAction SilentlyContinue +$pwshPath = if ($null -ne $pwshCommand) { $pwshCommand.Source } else { 'pwsh' } +$goPath = if ($null -ne $goCommand) { $goCommand.Source } else { 'go' } + +$goVersion = Invoke-CapturedProcess 'go-version' $goPath @('version') @{} (Join-Path $runDirectory 'go-version.stdout.log') (Join-Path $runDirectory 'go-version.stderr.log') $connection @() 60 +if ($goVersion.ExitCode -ne 0) { $overallFailed = $true; $runErrors.Add("go version failed with exit $($goVersion.ExitCode)") } + +$containerIdentity = $null +if ($PostgresContainer) { + $inspect = Invoke-CapturedProcess 'postgres-container-identity' 'docker' @('inspect', '--format', '{{.Name}}|{{.Config.Image}}|{{.Image}}|{{.State.Running}}', $PostgresContainer) @{} (Join-Path $runDirectory 'postgres-container-identity.stdout.log') (Join-Path $runDirectory 'postgres-container-identity.stderr.log') $connection @() 60 + if ($inspect.ExitCode -ne 0) { $overallFailed = $true; $runErrors.Add("postgres container inspect failed with exit $($inspect.ExitCode)") } + else { + $parts = $inspect.Stdout.Trim() -split '\|', 4 + if ($parts.Count -ne 4) { $overallFailed = $true; $runErrors.Add('postgres container identity output was malformed') } + else { + try { $containerRunning = [bool]::Parse($parts[3]) } catch { $containerRunning = $false; $overallFailed = $true; $runErrors.Add('postgres container running state was malformed') } + $containerIdentity = [ordered]@{ name = $parts[0]; configured_image = $parts[1]; image_id = $parts[2]; running = $containerRunning } + if (-not $containerRunning) { $overallFailed = $true; $runErrors.Add('postgres container is not running') } + if (-not (Test-PostgresImageMatch $parts[1] $PostgresImage)) { + $overallFailed = $true; $runErrors.Add("postgres image mismatch: expected '$PostgresImage', got '$($parts[1])'") + } + } + } +} + +$serverIdentity = Invoke-Psql 'postgres-server-identity' "SELECT json_build_object('server_version', current_setting('server_version'), 'server_version_num', current_setting('server_version_num'), 'version', version(), 'max_connections', current_setting('max_connections'), 'superuser_reserved_connections', current_setting('superuser_reserved_connections'), 'reserved_connections', COALESCE(NULLIF(current_setting('reserved_connections', true), ''), '0'), 'current_connections', (SELECT count(*)::text FROM pg_stat_activity), 'database', current_database(), 'schema', current_schema(), 'user', current_user)::text;" $connection.Database (Join-Path $runDirectory 'postgres-server-identity') $connection $PostgresContainer +$serverIdentityObject = $null +if ($serverIdentity.ExitCode -ne 0) { $overallFailed = $true; $runErrors.Add("postgres identity query failed with exit $($serverIdentity.ExitCode)") } +else { try { $serverIdentityObject = $serverIdentity.Stdout.Trim() | ConvertFrom-Json } catch { $overallFailed = $true; $runErrors.Add("postgres identity JSON parse failed: $($_.Exception.Message)") } } +$usableConnectionCapacity = $null +if ($null -ne $serverIdentityObject) { + try { + $serverVersionNumber = [int]$serverIdentityObject.server_version_num + $maxConnections = [int]$serverIdentityObject.max_connections + $superuserReserved = [int]$serverIdentityObject.superuser_reserved_connections + $reservedConnections = [int]$serverIdentityObject.reserved_connections + $currentConnections = [int]$serverIdentityObject.current_connections + $usableConnectionCapacity = $maxConnections - $superuserReserved - $reservedConnections + if (-not (Test-RequiredPostgresVersion $serverVersionNumber)) { $overallFailed = $true; $runErrors.Add("PostgreSQL 17 is required, got server_version_num=$serverVersionNumber") } + if ($usableConnectionCapacity -le $ConnectionBudget) { $overallFailed = $true; $runErrors.Add("connection budget $ConnectionBudget leaves no reserved headroom under usable capacity $usableConnectionCapacity") } + if (-not (Test-ConnectionBudgetFits $currentConnections $ConnectionBudget $usableConnectionCapacity)) { $overallFailed = $true; $runErrors.Add("connection budget $ConnectionBudget exceeds current server headroom: active=$currentConnections usable=$usableConnectionCapacity") } + } + catch { $overallFailed = $true; $runErrors.Add("postgres numeric identity was malformed: $($_.Exception.Message)") } +} + +for ($repeatIndex = 1; $repeatIndex -le $Repeat; $repeatIndex++) { + $repeatDirectory = Join-Path $runDirectory ("repeat-{0:D2}" -f $repeatIndex); New-Item -ItemType Directory -Path $repeatDirectory -Force | Out-Null + $databaseName = "engram_prc_rg_${safeRunToken}_r$repeatIndex"; $schemaName = 'public'; $applicationName = "engram-prc-$safeRunToken-r$repeatIndex" + $targetDsn = New-DatabaseDsn $AdminDsn $databaseName $applicationName + $repeatErrors = [System.Collections.Generic.List[string]]::new(); $repeatFailed = $false; $databaseCreated = $false + $goTestExit = $null; $parserExit = $null; $coverageExit = $null; $cleanupExit = $null; $sessionsBefore = $null; $sessionsAfter = $null; $serverSessionsBefore = $null; $serverSessionsAfter = $null + $cleanupSummaryPath = Join-Path $repeatDirectory 'cleanup/cleanup.json' + + try { + $quotedDb = '"' + $databaseName.Replace('"', '""') + '"'; $quotedUser = '"' + $connection.User.Replace('"', '""') + '"' + $create = Invoke-Psql "repeat-$repeatIndex-create-database" "CREATE DATABASE $quotedDb OWNER $quotedUser;" $connection.Database (Join-Path $repeatDirectory 'create-database') $connection $PostgresContainer + if ($create.ExitCode -ne 0) { throw "create database failed with exit $($create.ExitCode)" }; $databaseCreated = $true + $extension = Invoke-Psql "repeat-$repeatIndex-create-pgvector" 'CREATE EXTENSION IF NOT EXISTS vector WITH SCHEMA public;' $databaseName (Join-Path $repeatDirectory 'create-pgvector') $connection $PostgresContainer + if ($extension.ExitCode -ne 0) { throw "create pgvector extension failed with exit $($extension.ExitCode)" } + $identity = Invoke-Psql "repeat-$repeatIndex-database-identity" "SELECT json_build_object('database', current_database(), 'schema', current_schema(), 'server_version', current_setting('server_version'), 'user', current_user)::text;" $databaseName (Join-Path $repeatDirectory 'database-identity') $connection $PostgresContainer + if ($identity.ExitCode -ne 0) { throw "database identity query failed with exit $($identity.ExitCode)" } + $identityObject = $identity.Stdout.Trim() | ConvertFrom-Json + if ($identityObject.database -ne $databaseName -or $identityObject.schema -ne $schemaName) { throw "database/schema identity mismatch: expected $databaseName.$schemaName" } + + $literalDb = $databaseName.Replace("'", "''") + $snapshotSql = "SELECT COALESCE(json_agg(row_to_json(s)), '[]'::json)::text FROM (SELECT pid, usename, datname, state, backend_type, application_name, client_addr::text AS client_addr, wait_event_type, wait_event, query_start FROM pg_stat_activity WHERE datname = '$literalDb' ORDER BY pid) AS s;" + $beforeSnapshot = Invoke-Psql "repeat-$repeatIndex-pg-stat-before" $snapshotSql $connection.Database (Join-Path $repeatDirectory 'pg-stat-activity-before') $connection $PostgresContainer + if ($beforeSnapshot.ExitCode -ne 0) { throw "pg_stat_activity before snapshot failed with exit $($beforeSnapshot.ExitCode)" } + $serverSessionsBefore = Get-IntegerOutput (Invoke-Psql "repeat-$repeatIndex-server-connection-count-before" 'SELECT count(*) FROM pg_stat_activity;' $connection.Database (Join-Path $repeatDirectory 'server-connection-count-before') $connection $PostgresContainer) 'server connection count before tests' + if ($null -ne $usableConnectionCapacity -and -not (Test-ConnectionBudgetFits $serverSessionsBefore $ConnectionBudget $usableConnectionCapacity)) { throw "connection budget $ConnectionBudget exceeds current server headroom before tests: active=$serverSessionsBefore usable=$usableConnectionCapacity" } + $sessionsBefore = Get-IntegerOutput (Invoke-Psql "repeat-$repeatIndex-connection-count-before" "SELECT count(*) FROM pg_stat_activity WHERE datname = '$literalDb';" $connection.Database (Join-Path $repeatDirectory 'connection-count-before') $connection $PostgresContainer) 'connection count before tests' + if ($sessionsBefore -gt $ConnectionBudget) { throw "pre-test connection count $sessionsBefore exceeds budget $ConnectionBudget" } + + $coveragePath = Join-Path $repeatDirectory 'coverage.out'; $goJsonPath = Join-Path $repeatDirectory 'go-test.stdout.jsonl'; $goStderrPath = Join-Path $repeatDirectory 'go-test.stderr.log' + $goArguments = [System.Collections.Generic.List[string]]::new() + foreach ($argument in @('test', '-json', '-p', '1', '-parallel', '1', '-count=1', '-timeout', "${TimeoutMinutes}m", '-covermode=atomic', "-coverprofile=$coveragePath")) { $goArguments.Add($argument) } + if ($Run) { $goArguments.Add('-run'); $goArguments.Add($Run) }; foreach ($pkg in $packages) { $goArguments.Add($pkg) } + $testEnvironment = @{ + DATABASE_DSN = $targetDsn + ENGRAM_TEST_DSN = $targetDsn + TEST_DATABASE_DSN = $targetDsn + DATABASE_MAX_CONNS = [string]$ConnectionBudget + ENGRAM_RELEASE_GATE_RUN_ID = $RunId + ENGRAM_RELEASE_GATE_REPEAT = [string]$repeatIndex + } + $goTest = Invoke-CapturedProcess "repeat-$repeatIndex-go-test" $goPath @($goArguments) $testEnvironment $goJsonPath $goStderrPath $connection @($targetDsn) ($TimeoutMinutes * 60 + 60) + $goTestExit = $goTest.ExitCode; if ($goTestExit -ne 0) { $repeatFailed = $true; $repeatErrors.Add("go test failed with exit $goTestExit") } + + $parserArguments = [System.Collections.Generic.List[string]]::new() + foreach ($argument in @('-NoProfile', '-File', $jsonAssertionScript, '-InputPath', $goJsonPath, '-SummaryPath', (Join-Path $repeatDirectory 'go-test-summary.json'))) { $parserArguments.Add($argument) } + if ($FailOnUnexpectedSkip) { $parserArguments.Add('-FailOnUnexpectedSkip') } + if ($AllowedSkipPattern.Count -gt 0) { $parserArguments.Add('-AllowedSkipPattern'); foreach ($pattern in $AllowedSkipPattern) { $parserArguments.Add($pattern) } } + $parser = Invoke-CapturedProcess "repeat-$repeatIndex-assert-go-test-json" $pwshPath @($parserArguments) @{} (Join-Path $repeatDirectory 'assert-go-test-json.stdout.log') (Join-Path $repeatDirectory 'assert-go-test-json.stderr.log') $connection @($targetDsn) 120 + $parserExit = $parser.ExitCode; if ($parserExit -ne 0) { $repeatFailed = $true; $repeatErrors.Add("go test JSON assertion failed with exit $parserExit") } + + if ($effectiveCoverage -eq 'Full') { + $coverage = Invoke-CapturedProcess "repeat-$repeatIndex-assert-coverage" $pwshPath @('-NoProfile', '-File', $coverageAssertionScript, '-CoverageProfile', $coveragePath, '-SummaryPath', (Join-Path $repeatDirectory 'coverage-summary.json'), '-OverallThreshold', '60') @{} (Join-Path $repeatDirectory 'assert-coverage.stdout.log') (Join-Path $repeatDirectory 'assert-coverage.stderr.log') $connection @($targetDsn) 120 + $coverageExit = $coverage.ExitCode; if ($coverageExit -ne 0) { $repeatFailed = $true; $repeatErrors.Add("coverage assertion failed with exit $coverageExit") } + } + elseif (-not (Test-Path -LiteralPath $coveragePath -PathType Leaf) -or (Get-Item -LiteralPath $coveragePath).Length -eq 0) { + $coverageExit = 1; $repeatFailed = $true; $repeatErrors.Add('targeted coverage profile is missing or empty') + } + else { + $coverTool = Invoke-CapturedProcess "repeat-$repeatIndex-targeted-coverage-report" $goPath @('tool', 'cover', "-func=$coveragePath") @{} (Join-Path $repeatDirectory 'targeted-coverage.stdout.log') (Join-Path $repeatDirectory 'targeted-coverage.stderr.log') $connection @($targetDsn) 120 + $coverageExit = $coverTool.ExitCode; if ($coverageExit -ne 0) { $repeatFailed = $true; $repeatErrors.Add("targeted coverage report failed with exit $coverageExit") } + } + + $afterSnapshot = Invoke-Psql "repeat-$repeatIndex-pg-stat-after" $snapshotSql $connection.Database (Join-Path $repeatDirectory 'pg-stat-activity-after') $connection $PostgresContainer + if ($afterSnapshot.ExitCode -ne 0) { $repeatFailed = $true; $repeatErrors.Add("pg_stat_activity after snapshot failed with exit $($afterSnapshot.ExitCode)") } + try { $serverSessionsAfter = Get-IntegerOutput (Invoke-Psql "repeat-$repeatIndex-server-connection-count-after" 'SELECT count(*) FROM pg_stat_activity;' $connection.Database (Join-Path $repeatDirectory 'server-connection-count-after') $connection $PostgresContainer) 'server connection count after tests' } + catch { $repeatFailed = $true; $repeatErrors.Add($_.Exception.Message) } + try { $sessionsAfter = Get-IntegerOutput (Invoke-Psql "repeat-$repeatIndex-connection-count-after" "SELECT count(*) FROM pg_stat_activity WHERE datname = '$literalDb';" $connection.Database (Join-Path $repeatDirectory 'connection-count-after') $connection $PostgresContainer) 'connection count after tests' } + catch { $repeatFailed = $true; $repeatErrors.Add($_.Exception.Message) } + if ($null -ne $sessionsAfter -and -not (Test-NoResidualRunSessions $sessionsAfter)) { $repeatFailed = $true; $repeatErrors.Add("post-test residual connection leak: expected 0 sessions for $databaseName, observed $sessionsAfter") } + } + catch { $repeatFailed = $true; $repeatErrors.Add($_.Exception.Message) } + finally { + if ($databaseCreated) { + $cleanupArguments = @('-NoProfile', '-File', $cleanupScript, '-DatabaseName', $databaseName, '-SchemaName', $schemaName, '-ArtifactRoot', $repeatDirectory, '-RunId', "$RunId-repeat-$repeatIndex") + if ($PostgresContainer) { $cleanupArguments += @('-PostgresContainer', $PostgresContainer) } + $cleanup = Invoke-CapturedProcess "repeat-$repeatIndex-cleanup" $pwshPath $cleanupArguments @{ ENGRAM_TEST_ADMIN_DSN = $AdminDsn } (Join-Path $repeatDirectory 'cleanup-process.stdout.log') (Join-Path $repeatDirectory 'cleanup-process.stderr.log') $connection @($targetDsn, $AdminDsn) 180 + $cleanupExit = $cleanup.ExitCode; if ($cleanupExit -ne 0) { $repeatFailed = $true; $repeatErrors.Add("cleanup failed with exit $cleanupExit") } + } + else { $cleanupExit = 0 } + if ($repeatFailed) { $overallFailed = $true } + $repeatResult = [pscustomobject]@{ + repeat = $repeatIndex; verdict = if ($repeatFailed) { 'FAIL' } else { 'PASS' } + database = $databaseName; schema = $schemaName; database_schema_identity = "$databaseName.$schemaName"; database_dsn = 'REDACTED_DATABASE_DSN' + sequential_execution = [ordered]@{ package_parallelism = 1; test_parallelism = 1 } + connection_budget = $ConnectionBudget; server_sessions_before = $serverSessionsBefore; server_sessions_after = $serverSessionsAfter; sessions_before = $sessionsBefore; sessions_after = $sessionsAfter + go_test_exit = $goTestExit; json_parser_exit = $parserExit; coverage_policy = $effectiveCoverage; coverage_exit = $coverageExit; cleanup_exit = $cleanupExit + cleanup_summary = if (Test-Path -LiteralPath $cleanupSummaryPath) { [System.IO.Path]::GetFullPath($cleanupSummaryPath) } else { $null } + errors = @($repeatErrors); artifact_directory = [System.IO.Path]::GetFullPath($repeatDirectory) + } + $repeatResults.Add($repeatResult); Write-Utf8NoBom (Join-Path $repeatDirectory 'repeat-summary.json') (($repeatResult | ConvertTo-Json -Depth 10) + "`n") + Write-Output ("repeat={0} verdict={1} database_schema={2} go_test_exit={3} parser_exit={4} coverage_exit={5} cleanup_exit={6}" -f $repeatIndex, $repeatResult.verdict, $repeatResult.database_schema_identity, $goTestExit, $parserExit, $coverageExit, $cleanupExit) + } +} + +$finishedAt = [DateTimeOffset]::UtcNow +$environmentSummary = [pscustomobject]@{ + schema_version = 1; run_id = $RunId; timestamp = $startedAt.ToString('O'); go_version = $goVersion.Stdout.Trim() + postgres = [ordered]@{ declared_image = $PostgresImage; container = $containerIdentity; server = $serverIdentityObject; admin_dsn = Get-RedactedDsn $AdminDsn } + packages = $packages; run_pattern = if ($Run) { $Run } else { $null }; repeat = $Repeat + fail_on_unexpected_skip = [bool]$FailOnUnexpectedSkip; allowed_skip_patterns = @($AllowedSkipPattern) + coverage_policy = $effectiveCoverage; connection_budget = $ConnectionBudget + sequential_execution = [ordered]@{ go_package_parallelism = 1; go_test_parallelism = 1; database_max_connections = $ConnectionBudget } + govulncheck_policy = [ordered]@{ authoritative = @('source scan with tests', 'unstripped binary scan'); non_authoritative = 'stripped binary scan (module-level fallback when symbols are absent)' } +} +Write-Utf8NoBom $environmentPath (($environmentSummary | ConvertTo-Json -Depth 10) + "`n") +Write-Utf8NoBom $commandsPath ((ConvertTo-Json -InputObject @($script:CommandRecords.ToArray()) -Depth 10) + "`n") +$passedRepeats = @($repeatResults | Where-Object verdict -eq 'PASS').Count; $failedRepeats = @($repeatResults | Where-Object verdict -eq 'FAIL').Count +$summary = [pscustomobject]@{ + schema_version = 1; gate = 'release-gates-foundation'; run_id = $RunId + started_at = $startedAt.ToString('O'); finished_at = $finishedAt.ToString('O'); duration_seconds = [math]::Round(($finishedAt - $startedAt).TotalSeconds, 3) + verdict = if (-not $overallFailed -and $failedRepeats -eq 0 -and $repeatResults.Count -eq $Repeat) { 'PASS' } else { 'FAIL' } + counts = [ordered]@{ requested_repeats = $Repeat; completed_repeats = $repeatResults.Count; passed_repeats = $passedRepeats; failed_repeats = $failedRepeats; child_commands = $script:CommandRecords.Count; nonzero_child_commands = @($script:CommandRecords | Where-Object exit_code -ne 0).Count } + packages = $packages; run_pattern = if ($Run) { $Run } else { $null }; coverage_policy = $effectiveCoverage; connection_budget = $ConnectionBudget + database_dsn = 'REDACTED_DATABASE_DSN'; environment = [System.IO.Path]::GetFullPath($environmentPath); commands = [System.IO.Path]::GetFullPath($commandsPath) + repeats = @($repeatResults); errors = @($runErrors); artifact_directory = [System.IO.Path]::GetFullPath($runDirectory) +} +Write-Utf8NoBom $summaryPath (($summary | ConvertTo-Json -Depth 12) + "`n") +Write-Output ("release-gates-foundation verdict={0} repeats={1}/{2} nonzero_children={3} coverage_policy={4}" -f $summary.verdict, $passedRepeats, $Repeat, $summary.counts.nonzero_child_commands, $effectiveCoverage) +Write-Output "summary=$([System.IO.Path]::GetFullPath($summaryPath))" +if ($summary.verdict -ne 'PASS') { exit 1 } +exit 0 From 6ea10496aa127fba7fdb194875044e770d0a1d8c Mon Sep 17 00:00:00 2001 From: Kirill Turanskiy Date: Fri, 10 Jul 2026 08:50:00 +0300 Subject: [PATCH 010/111] fix(bulkops): lock promotion capture and guard rollback conflicts --- ...10-db-bulkops-capture-lock-rework-maker.md | 207 +++++++ .../DB-BULKOPS-CAPTURE-LOCK-REWORK.red.json | 11 + .../DB-BULKOPS-CAPTURE-LOCK-REWORK.tdd.json | 94 ++++ .../DB-BULKOPS-DRY-RUN-NORMALIZATION.red.json | 11 + .../evidence/DB-BULKOPS-FINAL.cover.out | 342 ++++++++++++ ...BULKOPS-LEGACY-CANDIDATE-NO-AFTER.red.json | 11 + ...LKOPS-ROLLBACK-CANDIDATE-CONFLICT.red.json | 11 + internal/bulkops/facade.go | 217 +++++--- internal/bulkops/facade_test.go | 523 +++++++++++++++++- internal/bulkops/rollback.go | 155 +++++- internal/bulkops/rollback_test.go | 30 + pkg/models/snapshot.go | 3 +- 12 files changed, 1516 insertions(+), 99 deletions(-) create mode 100644 .agent/reports/2026-07-10-db-bulkops-capture-lock-rework-maker.md create mode 100644 .agent/specs/production-ready-db-bulkops/evidence/DB-BULKOPS-CAPTURE-LOCK-REWORK.red.json create mode 100644 .agent/specs/production-ready-db-bulkops/evidence/DB-BULKOPS-CAPTURE-LOCK-REWORK.tdd.json create mode 100644 .agent/specs/production-ready-db-bulkops/evidence/DB-BULKOPS-DRY-RUN-NORMALIZATION.red.json create mode 100644 .agent/specs/production-ready-db-bulkops/evidence/DB-BULKOPS-FINAL.cover.out create mode 100644 .agent/specs/production-ready-db-bulkops/evidence/DB-BULKOPS-LEGACY-CANDIDATE-NO-AFTER.red.json create mode 100644 .agent/specs/production-ready-db-bulkops/evidence/DB-BULKOPS-ROLLBACK-CANDIDATE-CONFLICT.red.json diff --git a/.agent/reports/2026-07-10-db-bulkops-capture-lock-rework-maker.md b/.agent/reports/2026-07-10-db-bulkops-capture-lock-rework-maker.md new file mode 100644 index 00000000..7e1b5776 --- /dev/null +++ b/.agent/reports/2026-07-10-db-bulkops-capture-lock-rework-maker.md @@ -0,0 +1,207 @@ +# DB-BULKOPS Capture/Lock Rework — Maker Report + +## Outcome + +The capture-before-lock TOCTOU, candidate rollback overwrite, legacy no-`After` +rollback hazard, and raw dry-run count defect are fixed and backed by permanent +PostgreSQL regressions. + +Status: **READY FOR AN INDEPENDENT CHECKER AND POST-RUN CODE REVIEW**. + +This is maker evidence only. The exact commit containing this report is supplied in +the handoff; this report does not replace the independent checker, PM acceptance, or +integrated release gates. + +## Scope and authorized expansion + +- Worktree: `D:\Dev\engram\.agent\worktrees\prc-db-bulkops` +- Branch: `work/prc-db-bulkops` +- Parent head: `2b085de663d5ba9dfa97adf9ee58de062ee0997c` +- Original DB-BULKOPS paths: + - `internal/bulkops/facade.go` + - `internal/bulkops/facade_test.go` +- Minimal checker-authorized expansion for exact rollback conflict detection: + - `pkg/models/snapshot.go` + - `internal/bulkops/rollback.go` + - `internal/bulkops/rollback_test.go` +- `internal/db/gorm/candidate_store.go` was inspected but not changed. +- No schema migration or v5-demolished subsystem was introduced or revived. + +## Capture and promotion transaction + +`bulk_promote` now normalizes requested IDs, opens one outer transaction, locks all +currently existing candidate rows with `FOR UPDATE` in ascending unique ID order, +and only then reads candidate before-state. PostgreSQL `clock_timestamp()` is read +inside the same transaction after the locks are acquired. + +The locked candidate object is the single input for: + +1. promoted-memory construction; +2. the candidate rollback `Before` payload; +3. the exact post-promotion `After` payload; +4. the final successful-candidate snapshot membership. + +Snapshot creation, candidate transition, memory creation, and promoted-memory +amendment commit or roll back together. A candidate missing when the locked capture +runs is reported as missing and is not promoted even if it is inserted before the +transaction completes. Partial success creates a snapshot containing exactly the +successful candidate and memory mutations; zero success creates no rollback snapshot. + +Permanent proofs: + +- `TestFacade_BulkPromote_ConcurrentCommittedUpdateIsCapturedPromotedAndRollbackable` + proves A→B committed before lock acquisition is the captured, promoted, and restored state. +- `TestFacade_BulkPromote_CandidateInsertedAfterLockedCaptureIsNotPromoted` proves a + missing-at-capture candidate inserted later remains pending and absent from the snapshot. +- Existing equal-ID and amendment-failure regressions remain GREEN, including exact + post-commit audit counts and rollback retry safety. + +## Exact candidate rollback conflict detection + +`SnapshotEntry` now has an optional JSON `After` field. New bulk-promote snapshots +persist the database-re-read promoted candidate, including its authoritative +`updated_at`, status, and promoted-memory ID. + +Rollback lock order is now: + +1. snapshot row; +2. candidate rows in ascending unique ID order; +3. memory rows in ascending unique ID order. + +Before any restore or delete, rollback compares each locked current candidate with +the exact persisted `After` state. Time locations and nil/empty JSON slices are +canonicalized, while all domain fields and ordering remain exact. Any mismatch or +missing candidate returns `ErrRollbackConflict`; the transaction preserves candidate +C, the promoted memory, and the committed snapshot. + +`TestFacade_BulkPromote_CandidateChangedAfterExecuteConflictsAndPreservesCurrent` +holds an uncommitted B→C update, proves rollback waits on the candidate lock, commits +C, and then proves rollback reports conflict without overwriting C or deleting memory. + +## Legacy snapshots fail closed + +Candidate restore entries without `After` cannot establish the exact operation-owned +post-state. They are still locked deterministically but now return +`ErrRollbackConflict` instead of guessing from `snapshot.CreatedAt` and blindly +calling `RevertRawTx`. + +`TestFacade_BulkPromote_LegacySnapshotWithoutAfterFailsClosedAndPreservesCandidate` +removes `After` from a real bulk-promote snapshot, applies a later candidate edit, and +proves the candidate, memory, and committed snapshot remain intact. + +Compatibility retained: + +- numeric legacy memory restore/delete entries still use the existing decoder; +- prefixed `candidate:` and `memory:` domains remain disjoint; +- modern candidate-review fixtures now persist exact `After` state and retain the + established successful rollback and edited-memory conflict behavior. + +## Normalized dry-run semantics + +Dry-run now reports `WouldAffect = len(sortedUniqueIDs(candidate_ids))`, matching the +same duplicate removal and zero filtering used by execution. It intentionally remains +database-free; the regression uses two existing candidates so preview `2` equals the +actual execution count `2` for a six-element duplicate/zero input. + +Permanent proof: +`TestFacade_BulkPromote_DryRunNormalizesDuplicateAndZeroIDs`. + +## TDD and prove-it evidence + +Evidence artifacts: + +- `.agent/specs/production-ready-db-bulkops/evidence/DB-BULKOPS-CAPTURE-LOCK-REWORK.red.json` +- `.agent/specs/production-ready-db-bulkops/evidence/DB-BULKOPS-ROLLBACK-CANDIDATE-CONFLICT.red.json` +- `.agent/specs/production-ready-db-bulkops/evidence/DB-BULKOPS-DRY-RUN-NORMALIZATION.red.json` +- `.agent/specs/production-ready-db-bulkops/evidence/DB-BULKOPS-LEGACY-CANDIDATE-NO-AFTER.red.json` +- `.agent/specs/production-ready-db-bulkops/evidence/DB-BULKOPS-CAPTURE-LOCK-REWORK.tdd.json` +- `.agent/specs/production-ready-db-bulkops/evidence/DB-BULKOPS-FINAL.cover.out` + +RED reproduced all four defects on fresh PostgreSQL 17 databases before their +production edits. Three temporary prove-it sentinels then reintroduced raw dry-run +counting, unconditional candidate-state acceptance, and legacy no-`After` acceptance. +Each permanent regression failed with the destructive behavior; all passed again after +the sentinels were removed. + +## Final verification + +Focused high-risk repeat on +`engram_prc_bulkops_final_focus_20260710_082852`: + +```text +9 permanent high-risk tests x -count=20 +PASS — 180/180 executions +package 41.437s +EXIT_CODE=0 +``` + +Final full package with coverage on +`engram_prc_bulkops_final_postprove_20260710_083859`: + +```text +go test ./internal/bulkops -count=1 -coverprofile DB-BULKOPS-FINAL.cover.out +PASS — package 3.901s +coverage: 76.8% of statements +EXIT_CODE=0 +``` + +Final race run on +`engram_prc_bulkops_final_postprove_race_20260710_084223`: + +```text +go test -race ./internal/bulkops -count=1 +PASS — package 9.538s +EXIT_CODE=0 +``` + +Additional gates: + +```text +go test ./pkg/models -count=1 +PASS + +go vet ./internal/bulkops ./internal/db/gorm ./pkg/models +PASS + +Serena diagnostics: no warnings/errors in all five changed files +git diff --check: PASS +``` + +Coverage details: + +- package: 76.8% — informational WARN against the 80% default; +- `executeBulkPromote`: 80.0%; +- `lockPromoteCandidatesTx`: 81.8%; +- `Rollback`: 79.6%; +- `lockCandidateRowsForRollbackTx`: 84.2%; +- `detectCandidateConflicts`: 81.2%; +- `matchesExpectedCandidateState`: 87.5%. + +The package-level threshold is not silently promoted to PASS. Every new load-bearing +branch nevertheless has deterministic database regression, repeat-20, race, and +mutation/prove-it evidence. + +## Database and worktree hygiene + +Every maker-owned RED/GREEN/focus/full/race/prove-it database reached zero active +sessions and was force-dropped. The orphan `engram_prc_bulkops_check` database was +separately classified as inactive, name-validated, and dropped. Final PostgreSQL proof: + +```text +bulk database count: 0 +bulk active session count: 0 +``` + +The accidental generated file named `$cover` was classified as a coverage artifact, +deleted, and replaced by the intended ignored evidence file +`DB-BULKOPS-FINAL.cover.out`; `$cover` is absent from final git status. + +Known fresh-migration warnings for stale pattern/relation indexes, absent +`observation_vectors`, and unavailable `vectorscale` remained non-fatal and unchanged. + +## Maker disposition + +The DB-BULKOPS blocking findings are closed by implementation and permanent evidence. +No push or integration was performed. The next required step is an independent checker +against the exact handoff commit, followed by separate post-run code review and the +integrated production-readiness gates. diff --git a/.agent/specs/production-ready-db-bulkops/evidence/DB-BULKOPS-CAPTURE-LOCK-REWORK.red.json b/.agent/specs/production-ready-db-bulkops/evidence/DB-BULKOPS-CAPTURE-LOCK-REWORK.red.json new file mode 100644 index 00000000..0ba9c591 --- /dev/null +++ b/.agent/specs/production-ready-db-bulkops/evidence/DB-BULKOPS-CAPTURE-LOCK-REWORK.red.json @@ -0,0 +1,11 @@ +{ + "task_id": "DB-BULKOPS-CAPTURE-LOCK-REWORK", + "observed_at": "2026-07-10T05:03:25.7586634Z", + "stack": "GO", + "test_file": "internal/bulkops/facade_test.go", + "test_name": "TestFacade_BulkPromote_ConcurrentCommittedUpdateIsCapturedPromotedAndRollbackable", + "database": "engram_prc_bulkops_capture_red_20260710_080234", + "failure_reason": "bulk_promote captured and promoted stale candidate A while concurrent candidate B committed before row-lock acquisition; rollback restored stale A.", + "runner_exit_code": 1, + "runner_stdout_excerpt": "promoted memory expected committed-B, actual stale A; snapshot expected committed-B, actual stale A; rollback expected committed-B, actual stale A" +} diff --git a/.agent/specs/production-ready-db-bulkops/evidence/DB-BULKOPS-CAPTURE-LOCK-REWORK.tdd.json b/.agent/specs/production-ready-db-bulkops/evidence/DB-BULKOPS-CAPTURE-LOCK-REWORK.tdd.json new file mode 100644 index 00000000..c060f7ee --- /dev/null +++ b/.agent/specs/production-ready-db-bulkops/evidence/DB-BULKOPS-CAPTURE-LOCK-REWORK.tdd.json @@ -0,0 +1,94 @@ +{ + "schema_version": 1, + "completed_at_utc": "2026-07-10T05:45:01Z", + "implementation_parent": "2b085de663d5ba9dfa97adf9ee58de062ee0997c", + "scope": "bulk_promote capture locking, exact candidate rollback conflict detection, legacy fail-closed behavior, and normalized dry-run semantics", + "infrastructure_probe": { + "command": "go test ./internal/bulkops -list '^TestFacade_BulkPromote'", + "exit_code": 0 + }, + "red": [ + { + "database": "engram_prc_bulkops_capture_red_20260710_080234", + "test": "TestFacade_BulkPromote_ConcurrentCommittedUpdateIsCapturedPromotedAndRollbackable", + "exit_code": 1, + "observed": "Execute captured stale candidate A before waiting for the row lock, promoted memory A after candidate B committed, and rollback erased B.", + "artifact": "DB-BULKOPS-CAPTURE-LOCK-REWORK.red.json" + }, + { + "database": "engram_prc_bulkops_edges_red_20260710_081930", + "test": "TestFacade_BulkPromote_CandidateChangedAfterExecuteConflictsAndPreservesCurrent", + "exit_code": 1, + "observed": "Rollback returned success, overwrote post-Execute candidate C with B, reset status to pending, and deleted the promoted memory.", + "artifact": "DB-BULKOPS-ROLLBACK-CANDIDATE-CONFLICT.red.json" + }, + { + "database": "engram_prc_bulkops_edges_red_20260710_081930", + "test": "TestFacade_BulkPromote_DryRunNormalizesDuplicateAndZeroIDs", + "exit_code": 1, + "observed": "Dry-run counted six raw IDs while execution consumed two sorted unique non-zero IDs.", + "artifact": "DB-BULKOPS-DRY-RUN-NORMALIZATION.red.json" + }, + { + "database": "engram_prc_bulkops_edges_green_20260710_082347", + "test": "TestFacade_BulkPromote_LegacySnapshotWithoutAfterFailsClosedAndPreservesCandidate", + "exit_code": 1, + "observed": "A candidate restore entry without After was accepted and rollback silently overwrote a later candidate edit.", + "artifact": "DB-BULKOPS-LEGACY-CANDIDATE-NO-AFTER.red.json" + } + ], + "green": { + "focused_repeat_database": "engram_prc_bulkops_final_focus_20260710_082852", + "command": "go test ./internal/bulkops -run '' -count=20", + "exit_code": 0, + "observed": "PASS: 180/180 executions in 41.437s" + }, + "refactor": { + "changes": [ + "removed tautological nil checks after enforcing a non-nil promoted candidate result", + "normalized time locations and nil versus empty candidate slices before exact after-state comparison", + "updated rollback contract comments to cover both memory and candidate conflicts" + ], + "verification": "targeted restored GREEN, full package, race, vet, diagnostics, and diff checks passed" + }, + "prove_it": { + "database": "engram_prc_bulkops_proveit_20260710_083420", + "sentinels": [ + "temporarily restored raw len(op.CandidateIDs) dry-run counting", + "temporarily accepted every exact candidate after-state comparison", + "temporarily accepted legacy candidate entries missing After" + ], + "exit_codes": [1, 1, 1], + "observed": "Each corresponding permanent regression failed and exposed the destructive behavior; all three passed after sentinel removal." + }, + "final_verification": { + "full_database": "engram_prc_bulkops_final_postprove_20260710_083859", + "full_package": "PASS: go test ./internal/bulkops -count=1 -coverprofile DB-BULKOPS-FINAL.cover.out, exit 0, package 3.901s", + "race_database": "engram_prc_bulkops_final_postprove_race_20260710_084223", + "race": "PASS: go test -race ./internal/bulkops -count=1, exit 0, package 9.538s", + "models": "PASS: go test ./pkg/models -count=1, exit 0", + "vet": "PASS: go vet ./internal/bulkops ./internal/db/gorm ./pkg/models, exit 0", + "diagnostics": "PASS: no warnings or errors in facade.go, rollback.go, facade_test.go, rollback_test.go, snapshot.go", + "diff_check": "PASS: git diff --check, exit 0" + }, + "coverage": { + "artifact": "DB-BULKOPS-FINAL.cover.out", + "package_statements_percent": 76.8, + "executeBulkPromote_percent": 80.0, + "lockPromoteCandidatesTx_percent": 81.8, + "Rollback_percent": 79.6, + "lockCandidateRowsForRollbackTx_percent": 84.2, + "detectCandidateConflicts_percent": 81.2, + "matchesExpectedCandidateState_percent": 87.5, + "threshold_percent": 80, + "status": "WARN", + "note": "Package coverage is informationally below 80%; every load-bearing new branch has deterministic PostgreSQL regression, repeat-20, race, and mutation/prove-it evidence." + }, + "database_cleanup": { + "maker_owned_databases": "all dropped after pg_stat_activity returned zero sessions", + "orphan_database": "engram_prc_bulkops_check safely classified and dropped after zero-session verification", + "final_bulk_database_count": 0, + "final_bulk_session_count": 0 + }, + "status": "PASS_WITH_COVERAGE_WARNING" +} diff --git a/.agent/specs/production-ready-db-bulkops/evidence/DB-BULKOPS-DRY-RUN-NORMALIZATION.red.json b/.agent/specs/production-ready-db-bulkops/evidence/DB-BULKOPS-DRY-RUN-NORMALIZATION.red.json new file mode 100644 index 00000000..aeea3f37 --- /dev/null +++ b/.agent/specs/production-ready-db-bulkops/evidence/DB-BULKOPS-DRY-RUN-NORMALIZATION.red.json @@ -0,0 +1,11 @@ +{ + "task_id": "DB-BULKOPS-DRY-RUN-NORMALIZATION", + "observed_at": "2026-07-10T05:20:12Z", + "stack": "GO", + "test_file": "internal/bulkops/facade_test.go", + "test_name": "TestFacade_BulkPromote_DryRunNormalizesDuplicateAndZeroIDs", + "database": "engram_prc_bulkops_edges_red_20260710_081930", + "failure_reason": "bulk_promote dry-run counted the raw six-element input while execution consumed two sorted unique non-zero candidate IDs.", + "runner_exit_code": 1, + "runner_stdout_excerpt": "preview WouldAffect expected 2, actual 6; execution AffectedCount actual 2" +} diff --git a/.agent/specs/production-ready-db-bulkops/evidence/DB-BULKOPS-FINAL.cover.out b/.agent/specs/production-ready-db-bulkops/evidence/DB-BULKOPS-FINAL.cover.out new file mode 100644 index 00000000..477e7f0d --- /dev/null +++ b/.agent/specs/production-ready-db-bulkops/evidence/DB-BULKOPS-FINAL.cover.out @@ -0,0 +1,342 @@ +mode: set +github.com/thebtf/engram/internal/bulkops/facade.go:84.11,91.2 1 1 +github.com/thebtf/engram/internal/bulkops/facade.go:105.106,107.37 1 1 +github.com/thebtf/engram/internal/bulkops/facade.go:107.37,109.3 1 1 +github.com/thebtf/engram/internal/bulkops/facade.go:111.2,111.24 1 1 +github.com/thebtf/engram/internal/bulkops/facade.go:111.24,113.3 1 0 +github.com/thebtf/engram/internal/bulkops/facade.go:115.2,115.17 1 1 +github.com/thebtf/engram/internal/bulkops/facade.go:116.36,117.49 1 1 +github.com/thebtf/engram/internal/bulkops/facade.go:118.35,119.48 1 1 +github.com/thebtf/engram/internal/bulkops/facade.go:120.38,121.51 1 1 +github.com/thebtf/engram/internal/bulkops/facade.go:122.34,123.47 1 1 +github.com/thebtf/engram/internal/bulkops/facade.go:124.10,125.72 1 0 +github.com/thebtf/engram/internal/bulkops/facade.go:131.117,134.15 2 1 +github.com/thebtf/engram/internal/bulkops/facade.go:134.15,140.3 1 1 +github.com/thebtf/engram/internal/bulkops/facade.go:142.2,142.29 1 1 +github.com/thebtf/engram/internal/bulkops/facade.go:142.29,144.3 1 0 +github.com/thebtf/engram/internal/bulkops/facade.go:146.2,146.19 1 1 +github.com/thebtf/engram/internal/bulkops/facade.go:146.19,148.3 1 0 +github.com/thebtf/engram/internal/bulkops/facade.go:149.2,149.26 1 1 +github.com/thebtf/engram/internal/bulkops/facade.go:149.26,151.3 1 0 +github.com/thebtf/engram/internal/bulkops/facade.go:152.2,152.28 1 1 +github.com/thebtf/engram/internal/bulkops/facade.go:152.28,154.3 1 0 +github.com/thebtf/engram/internal/bulkops/facade.go:156.2,158.22 3 1 +github.com/thebtf/engram/internal/bulkops/facade.go:158.22,160.3 1 1 +github.com/thebtf/engram/internal/bulkops/facade.go:162.2,164.89 3 1 +github.com/thebtf/engram/internal/bulkops/facade.go:164.89,174.24 4 1 +github.com/thebtf/engram/internal/bulkops/facade.go:174.24,176.4 1 0 +github.com/thebtf/engram/internal/bulkops/facade.go:178.3,183.32 3 1 +github.com/thebtf/engram/internal/bulkops/facade.go:183.32,185.4 1 1 +github.com/thebtf/engram/internal/bulkops/facade.go:186.3,186.26 1 1 +github.com/thebtf/engram/internal/bulkops/facade.go:186.26,187.35 1 1 +github.com/thebtf/engram/internal/bulkops/facade.go:187.35,189.5 1 1 +github.com/thebtf/engram/internal/bulkops/facade.go:192.3,194.32 3 1 +github.com/thebtf/engram/internal/bulkops/facade.go:194.32,198.43 4 1 +github.com/thebtf/engram/internal/bulkops/facade.go:198.43,200.5 1 1 +github.com/thebtf/engram/internal/bulkops/facade.go:201.4,210.22 3 1 +github.com/thebtf/engram/internal/bulkops/facade.go:210.22,213.13 3 0 +github.com/thebtf/engram/internal/bulkops/facade.go:215.4,215.23 1 1 +github.com/thebtf/engram/internal/bulkops/facade.go:215.23,217.5 1 0 +github.com/thebtf/engram/internal/bulkops/facade.go:218.4,219.25 2 1 +github.com/thebtf/engram/internal/bulkops/facade.go:219.25,221.5 1 0 +github.com/thebtf/engram/internal/bulkops/facade.go:222.4,224.40 3 1 +github.com/thebtf/engram/internal/bulkops/facade.go:224.40,226.5 1 1 +github.com/thebtf/engram/internal/bulkops/facade.go:226.10,226.35 1 0 +github.com/thebtf/engram/internal/bulkops/facade.go:226.35,228.5 1 0 +github.com/thebtf/engram/internal/bulkops/facade.go:229.4,229.29 1 1 +github.com/thebtf/engram/internal/bulkops/facade.go:229.29,231.5 1 0 +github.com/thebtf/engram/internal/bulkops/facade.go:232.4,239.28 4 1 +github.com/thebtf/engram/internal/bulkops/facade.go:239.28,246.5 1 1 +github.com/thebtf/engram/internal/bulkops/facade.go:249.3,249.34 1 1 +github.com/thebtf/engram/internal/bulkops/facade.go:249.34,252.4 2 0 +github.com/thebtf/engram/internal/bulkops/facade.go:254.3,255.24 2 1 +github.com/thebtf/engram/internal/bulkops/facade.go:255.24,257.4 1 0 +github.com/thebtf/engram/internal/bulkops/facade.go:258.3,264.25 2 1 +github.com/thebtf/engram/internal/bulkops/facade.go:264.25,266.4 1 0 +github.com/thebtf/engram/internal/bulkops/facade.go:267.3,273.23 6 1 +github.com/thebtf/engram/internal/bulkops/facade.go:273.23,275.4 1 0 +github.com/thebtf/engram/internal/bulkops/facade.go:276.3,277.123 2 1 +github.com/thebtf/engram/internal/bulkops/facade.go:277.123,279.4 1 1 +github.com/thebtf/engram/internal/bulkops/facade.go:281.3,282.13 2 1 +github.com/thebtf/engram/internal/bulkops/facade.go:284.2,284.18 1 1 +github.com/thebtf/engram/internal/bulkops/facade.go:284.18,286.3 1 1 +github.com/thebtf/engram/internal/bulkops/facade.go:289.2,289.25 1 1 +github.com/thebtf/engram/internal/bulkops/facade.go:289.25,290.41 1 1 +github.com/thebtf/engram/internal/bulkops/facade.go:290.41,292.4 1 1 +github.com/thebtf/engram/internal/bulkops/facade.go:293.3,297.5 1 1 +github.com/thebtf/engram/internal/bulkops/facade.go:300.2,300.20 1 1 +github.com/thebtf/engram/internal/bulkops/facade.go:305.116,308.15 2 1 +github.com/thebtf/engram/internal/bulkops/facade.go:308.15,310.3 1 1 +github.com/thebtf/engram/internal/bulkops/facade.go:312.2,312.26 1 1 +github.com/thebtf/engram/internal/bulkops/facade.go:312.26,314.3 1 0 +github.com/thebtf/engram/internal/bulkops/facade.go:316.2,316.19 1 1 +github.com/thebtf/engram/internal/bulkops/facade.go:316.19,318.3 1 0 +github.com/thebtf/engram/internal/bulkops/facade.go:320.2,322.16 3 1 +github.com/thebtf/engram/internal/bulkops/facade.go:322.16,324.3 1 0 +github.com/thebtf/engram/internal/bulkops/facade.go:326.2,327.22 2 1 +github.com/thebtf/engram/internal/bulkops/facade.go:327.22,329.3 1 0 +github.com/thebtf/engram/internal/bulkops/facade.go:330.2,331.16 2 1 +github.com/thebtf/engram/internal/bulkops/facade.go:331.16,333.3 1 0 +github.com/thebtf/engram/internal/bulkops/facade.go:334.2,340.16 6 1 +github.com/thebtf/engram/internal/bulkops/facade.go:340.16,342.3 1 0 +github.com/thebtf/engram/internal/bulkops/facade.go:344.2,345.25 2 1 +github.com/thebtf/engram/internal/bulkops/facade.go:345.25,346.55 1 1 +github.com/thebtf/engram/internal/bulkops/facade.go:346.55,348.12 2 0 +github.com/thebtf/engram/internal/bulkops/facade.go:350.3,350.25 1 1 +github.com/thebtf/engram/internal/bulkops/facade.go:353.2,353.25 1 1 +github.com/thebtf/engram/internal/bulkops/facade.go:353.25,359.3 1 1 +github.com/thebtf/engram/internal/bulkops/facade.go:361.2,361.20 1 1 +github.com/thebtf/engram/internal/bulkops/facade.go:366.119,369.15 2 1 +github.com/thebtf/engram/internal/bulkops/facade.go:369.15,371.3 1 1 +github.com/thebtf/engram/internal/bulkops/facade.go:373.2,373.26 1 1 +github.com/thebtf/engram/internal/bulkops/facade.go:373.26,375.3 1 0 +github.com/thebtf/engram/internal/bulkops/facade.go:377.2,377.19 1 1 +github.com/thebtf/engram/internal/bulkops/facade.go:377.19,379.3 1 0 +github.com/thebtf/engram/internal/bulkops/facade.go:381.2,383.16 3 1 +github.com/thebtf/engram/internal/bulkops/facade.go:383.16,385.3 1 0 +github.com/thebtf/engram/internal/bulkops/facade.go:387.2,388.22 2 1 +github.com/thebtf/engram/internal/bulkops/facade.go:388.22,390.3 1 1 +github.com/thebtf/engram/internal/bulkops/facade.go:391.2,392.16 2 1 +github.com/thebtf/engram/internal/bulkops/facade.go:392.16,394.3 1 0 +github.com/thebtf/engram/internal/bulkops/facade.go:395.2,401.16 6 1 +github.com/thebtf/engram/internal/bulkops/facade.go:401.16,403.3 1 0 +github.com/thebtf/engram/internal/bulkops/facade.go:405.2,406.25 2 1 +github.com/thebtf/engram/internal/bulkops/facade.go:406.25,407.61 1 1 +github.com/thebtf/engram/internal/bulkops/facade.go:407.61,409.12 2 0 +github.com/thebtf/engram/internal/bulkops/facade.go:411.3,411.25 1 1 +github.com/thebtf/engram/internal/bulkops/facade.go:414.2,414.25 1 1 +github.com/thebtf/engram/internal/bulkops/facade.go:414.25,420.3 1 1 +github.com/thebtf/engram/internal/bulkops/facade.go:422.2,422.20 1 1 +github.com/thebtf/engram/internal/bulkops/facade.go:427.115,430.15 1 1 +github.com/thebtf/engram/internal/bulkops/facade.go:430.15,432.3 1 1 +github.com/thebtf/engram/internal/bulkops/facade.go:433.2,436.16 4 0 +github.com/thebtf/engram/internal/bulkops/facade.go:436.16,438.3 1 0 +github.com/thebtf/engram/internal/bulkops/facade.go:439.2,442.16 4 0 +github.com/thebtf/engram/internal/bulkops/facade.go:442.16,444.3 1 0 +github.com/thebtf/engram/internal/bulkops/facade.go:445.2,445.78 1 0 +github.com/thebtf/engram/internal/bulkops/facade.go:450.50,451.30 1 1 +github.com/thebtf/engram/internal/bulkops/facade.go:451.30,453.3 1 0 +github.com/thebtf/engram/internal/bulkops/facade.go:454.2,454.42 1 1 +github.com/thebtf/engram/internal/bulkops/facade.go:454.42,456.3 1 1 +github.com/thebtf/engram/internal/bulkops/facade.go:457.2,457.32 1 0 +github.com/thebtf/engram/internal/bulkops/facade.go:463.113,466.25 3 0 +github.com/thebtf/engram/internal/bulkops/facade.go:466.25,468.17 2 0 +github.com/thebtf/engram/internal/bulkops/facade.go:468.17,471.12 2 0 +github.com/thebtf/engram/internal/bulkops/facade.go:473.3,473.35 1 0 +github.com/thebtf/engram/internal/bulkops/facade.go:475.2,476.16 2 0 +github.com/thebtf/engram/internal/bulkops/facade.go:476.16,478.3 1 0 +github.com/thebtf/engram/internal/bulkops/facade.go:479.2,479.45 1 0 +github.com/thebtf/engram/internal/bulkops/facade.go:497.66,503.18 4 1 +github.com/thebtf/engram/internal/bulkops/facade.go:503.18,510.34 1 1 +github.com/thebtf/engram/internal/bulkops/facade.go:510.34,512.4 1 0 +github.com/thebtf/engram/internal/bulkops/facade.go:515.2,518.39 2 1 +github.com/thebtf/engram/internal/bulkops/facade.go:518.39,520.3 1 0 +github.com/thebtf/engram/internal/bulkops/facade.go:521.2,525.27 4 1 +github.com/thebtf/engram/internal/bulkops/facade.go:525.27,527.17 2 1 +github.com/thebtf/engram/internal/bulkops/facade.go:527.17,529.4 1 0 +github.com/thebtf/engram/internal/bulkops/facade.go:530.3,531.17 2 1 +github.com/thebtf/engram/internal/bulkops/facade.go:531.17,533.4 1 0 +github.com/thebtf/engram/internal/bulkops/facade.go:534.3,538.40 2 1 +github.com/thebtf/engram/internal/bulkops/facade.go:540.2,540.45 1 1 +github.com/thebtf/engram/internal/bulkops/facade.go:544.121,547.16 3 1 +github.com/thebtf/engram/internal/bulkops/facade.go:547.16,549.3 1 0 +github.com/thebtf/engram/internal/bulkops/facade.go:550.2,551.26 2 1 +github.com/thebtf/engram/internal/bulkops/facade.go:551.26,552.26 1 1 +github.com/thebtf/engram/internal/bulkops/facade.go:552.26,557.18 3 1 +github.com/thebtf/engram/internal/bulkops/facade.go:557.18,558.50 1 0 +github.com/thebtf/engram/internal/bulkops/facade.go:558.50,560.14 2 0 +github.com/thebtf/engram/internal/bulkops/facade.go:562.5,562.88 1 0 +github.com/thebtf/engram/internal/bulkops/facade.go:564.4,565.25 2 1 +github.com/thebtf/engram/internal/bulkops/facade.go:565.25,567.5 1 0 +github.com/thebtf/engram/internal/bulkops/facade.go:568.4,568.41 1 1 +github.com/thebtf/engram/internal/bulkops/facade.go:571.2,572.16 2 1 +github.com/thebtf/engram/internal/bulkops/facade.go:572.16,574.3 1 0 +github.com/thebtf/engram/internal/bulkops/facade.go:575.2,575.57 1 1 +github.com/thebtf/engram/internal/bulkops/facade.go:582.83,583.26 1 1 +github.com/thebtf/engram/internal/bulkops/facade.go:583.26,585.3 1 0 +github.com/thebtf/engram/internal/bulkops/facade.go:586.2,589.39 2 1 +github.com/thebtf/engram/internal/bulkops/facade.go:589.39,591.3 1 0 +github.com/thebtf/engram/internal/bulkops/facade.go:592.2,592.30 1 1 +github.com/thebtf/engram/internal/bulkops/facade.go:599.76,600.16 1 1 +github.com/thebtf/engram/internal/bulkops/facade.go:600.16,602.3 1 0 +github.com/thebtf/engram/internal/bulkops/facade.go:604.2,615.16 11 1 +github.com/thebtf/engram/internal/bulkops/facade.go:615.16,617.3 1 0 +github.com/thebtf/engram/internal/bulkops/facade.go:618.2,618.38 1 1 +github.com/thebtf/engram/internal/bulkops/facade.go:621.46,622.18 1 1 +github.com/thebtf/engram/internal/bulkops/facade.go:622.18,624.3 1 1 +github.com/thebtf/engram/internal/bulkops/facade.go:625.2,626.20 2 1 +github.com/thebtf/engram/internal/bulkops/facade.go:629.47,629.61 1 0 +github.com/thebtf/engram/internal/bulkops/rollback.go:65.28,66.37 1 1 +github.com/thebtf/engram/internal/bulkops/rollback.go:66.37,68.3 1 1 +github.com/thebtf/engram/internal/bulkops/rollback.go:69.2,69.26 1 1 +github.com/thebtf/engram/internal/bulkops/rollback.go:69.26,71.3 1 0 +github.com/thebtf/engram/internal/bulkops/rollback.go:72.2,72.24 1 1 +github.com/thebtf/engram/internal/bulkops/rollback.go:72.24,74.3 1 0 +github.com/thebtf/engram/internal/bulkops/rollback.go:75.2,80.70 5 1 +github.com/thebtf/engram/internal/bulkops/rollback.go:80.70,86.17 2 1 +github.com/thebtf/engram/internal/bulkops/rollback.go:86.17,87.49 1 0 +github.com/thebtf/engram/internal/bulkops/rollback.go:87.49,89.5 1 0 +github.com/thebtf/engram/internal/bulkops/rollback.go:90.4,90.67 1 0 +github.com/thebtf/engram/internal/bulkops/rollback.go:92.3,92.52 1 1 +github.com/thebtf/engram/internal/bulkops/rollback.go:92.52,95.4 1 1 +github.com/thebtf/engram/internal/bulkops/rollback.go:99.3,100.17 2 1 +github.com/thebtf/engram/internal/bulkops/rollback.go:100.17,102.4 1 0 +github.com/thebtf/engram/internal/bulkops/rollback.go:108.3,112.40 5 1 +github.com/thebtf/engram/internal/bulkops/rollback.go:112.40,114.23 2 1 +github.com/thebtf/engram/internal/bulkops/rollback.go:114.23,116.5 1 0 +github.com/thebtf/engram/internal/bulkops/rollback.go:117.4,117.44 1 1 +github.com/thebtf/engram/internal/bulkops/rollback.go:117.44,119.13 2 1 +github.com/thebtf/engram/internal/bulkops/rollback.go:121.4,122.126 1 1 +github.com/thebtf/engram/internal/bulkops/rollback.go:122.126,129.13 3 1 +github.com/thebtf/engram/internal/bulkops/rollback.go:131.4,131.39 1 1 +github.com/thebtf/engram/internal/bulkops/rollback.go:133.3,136.59 4 1 +github.com/thebtf/engram/internal/bulkops/rollback.go:136.59,138.4 1 0 +github.com/thebtf/engram/internal/bulkops/rollback.go:139.3,140.17 2 1 +github.com/thebtf/engram/internal/bulkops/rollback.go:140.17,142.4 1 0 +github.com/thebtf/engram/internal/bulkops/rollback.go:143.3,144.17 2 1 +github.com/thebtf/engram/internal/bulkops/rollback.go:144.17,146.4 1 0 +github.com/thebtf/engram/internal/bulkops/rollback.go:147.3,151.17 5 1 +github.com/thebtf/engram/internal/bulkops/rollback.go:151.17,153.4 1 0 +github.com/thebtf/engram/internal/bulkops/rollback.go:155.3,157.17 3 1 +github.com/thebtf/engram/internal/bulkops/rollback.go:157.17,159.4 1 1 +github.com/thebtf/engram/internal/bulkops/rollback.go:160.3,163.27 4 1 +github.com/thebtf/engram/internal/bulkops/rollback.go:163.27,165.4 1 1 +github.com/thebtf/engram/internal/bulkops/rollback.go:167.3,169.40 2 1 +github.com/thebtf/engram/internal/bulkops/rollback.go:169.40,171.23 2 1 +github.com/thebtf/engram/internal/bulkops/rollback.go:171.23,173.5 1 0 +github.com/thebtf/engram/internal/bulkops/rollback.go:175.4,175.22 1 1 +github.com/thebtf/engram/internal/bulkops/rollback.go:176.32,179.71 1 1 +github.com/thebtf/engram/internal/bulkops/rollback.go:179.71,181.6 1 0 +github.com/thebtf/engram/internal/bulkops/rollback.go:183.37,184.65 1 1 +github.com/thebtf/engram/internal/bulkops/rollback.go:184.65,186.14 1 0 +github.com/thebtf/engram/internal/bulkops/rollback.go:188.5,188.171 1 1 +github.com/thebtf/engram/internal/bulkops/rollback.go:188.171,192.31 1 1 +github.com/thebtf/engram/internal/bulkops/rollback.go:192.31,194.7 1 0 +github.com/thebtf/engram/internal/bulkops/rollback.go:195.6,196.79 2 1 +github.com/thebtf/engram/internal/bulkops/rollback.go:196.79,198.7 1 0 +github.com/thebtf/engram/internal/bulkops/rollback.go:199.6,200.80 2 1 +github.com/thebtf/engram/internal/bulkops/rollback.go:200.80,202.7 1 0 +github.com/thebtf/engram/internal/bulkops/rollback.go:203.11,205.81 2 1 +github.com/thebtf/engram/internal/bulkops/rollback.go:205.81,207.7 1 0 +github.com/thebtf/engram/internal/bulkops/rollback.go:208.6,209.82 2 1 +github.com/thebtf/engram/internal/bulkops/rollback.go:209.82,211.7 1 0 +github.com/thebtf/engram/internal/bulkops/rollback.go:213.5,213.15 1 1 +github.com/thebtf/engram/internal/bulkops/rollback.go:215.12,216.83 1 0 +github.com/thebtf/engram/internal/bulkops/rollback.go:220.3,220.95 1 1 +github.com/thebtf/engram/internal/bulkops/rollback.go:220.95,222.4 1 0 +github.com/thebtf/engram/internal/bulkops/rollback.go:224.3,225.13 2 1 +github.com/thebtf/engram/internal/bulkops/rollback.go:228.2,228.18 1 1 +github.com/thebtf/engram/internal/bulkops/rollback.go:228.18,229.44 1 1 +github.com/thebtf/engram/internal/bulkops/rollback.go:229.44,230.25 1 1 +github.com/thebtf/engram/internal/bulkops/rollback.go:230.25,236.5 1 1 +github.com/thebtf/engram/internal/bulkops/rollback.go:237.4,240.26 1 1 +github.com/thebtf/engram/internal/bulkops/rollback.go:242.3,242.20 1 1 +github.com/thebtf/engram/internal/bulkops/rollback.go:246.2,246.23 1 1 +github.com/thebtf/engram/internal/bulkops/rollback.go:246.23,252.3 1 1 +github.com/thebtf/engram/internal/bulkops/rollback.go:254.2,254.20 1 1 +github.com/thebtf/engram/internal/bulkops/rollback.go:262.63,265.86 3 1 +github.com/thebtf/engram/internal/bulkops/rollback.go:265.86,268.3 2 1 +github.com/thebtf/engram/internal/bulkops/rollback.go:269.2,269.77 1 1 +github.com/thebtf/engram/internal/bulkops/rollback.go:269.77,272.3 2 1 +github.com/thebtf/engram/internal/bulkops/rollback.go:273.2,274.20 2 1 +github.com/thebtf/engram/internal/bulkops/rollback.go:277.111,278.60 1 1 +github.com/thebtf/engram/internal/bulkops/rollback.go:278.60,280.3 1 0 +github.com/thebtf/engram/internal/bulkops/rollback.go:281.2,282.18 2 1 +github.com/thebtf/engram/internal/bulkops/rollback.go:285.43,288.25 3 1 +github.com/thebtf/engram/internal/bulkops/rollback.go:288.25,289.14 1 1 +github.com/thebtf/engram/internal/bulkops/rollback.go:289.14,290.12 1 1 +github.com/thebtf/engram/internal/bulkops/rollback.go:292.3,292.36 1 1 +github.com/thebtf/engram/internal/bulkops/rollback.go:292.36,293.12 1 1 +github.com/thebtf/engram/internal/bulkops/rollback.go:295.3,296.30 2 1 +github.com/thebtf/engram/internal/bulkops/rollback.go:298.2,298.41 1 1 +github.com/thebtf/engram/internal/bulkops/rollback.go:298.41,298.73 1 1 +github.com/thebtf/engram/internal/bulkops/rollback.go:299.2,299.15 1 1 +github.com/thebtf/engram/internal/bulkops/rollback.go:306.55,309.19 3 1 +github.com/thebtf/engram/internal/bulkops/rollback.go:309.19,311.3 1 1 +github.com/thebtf/engram/internal/bulkops/rollback.go:313.2,322.33 2 1 +github.com/thebtf/engram/internal/bulkops/rollback.go:322.33,324.3 1 0 +github.com/thebtf/engram/internal/bulkops/rollback.go:326.2,327.27 2 1 +github.com/thebtf/engram/internal/bulkops/rollback.go:327.27,329.3 1 1 +github.com/thebtf/engram/internal/bulkops/rollback.go:330.2,331.25 2 1 +github.com/thebtf/engram/internal/bulkops/rollback.go:331.25,332.30 1 1 +github.com/thebtf/engram/internal/bulkops/rollback.go:332.30,333.12 1 0 +github.com/thebtf/engram/internal/bulkops/rollback.go:335.3,336.17 2 1 +github.com/thebtf/engram/internal/bulkops/rollback.go:336.17,338.4 1 0 +github.com/thebtf/engram/internal/bulkops/rollback.go:339.3,339.25 1 1 +github.com/thebtf/engram/internal/bulkops/rollback.go:341.2,341.20 1 1 +github.com/thebtf/engram/internal/bulkops/rollback.go:347.20,349.26 2 1 +github.com/thebtf/engram/internal/bulkops/rollback.go:349.26,351.3 1 1 +github.com/thebtf/engram/internal/bulkops/rollback.go:352.2,355.25 3 1 +github.com/thebtf/engram/internal/bulkops/rollback.go:355.25,357.14 2 1 +github.com/thebtf/engram/internal/bulkops/rollback.go:357.14,359.12 2 0 +github.com/thebtf/engram/internal/bulkops/rollback.go:361.3,362.17 2 1 +github.com/thebtf/engram/internal/bulkops/rollback.go:362.17,364.4 1 0 +github.com/thebtf/engram/internal/bulkops/rollback.go:365.3,365.15 1 1 +github.com/thebtf/engram/internal/bulkops/rollback.go:365.15,367.4 1 1 +github.com/thebtf/engram/internal/bulkops/rollback.go:369.2,369.23 1 1 +github.com/thebtf/engram/internal/bulkops/rollback.go:372.120,373.78 1 1 +github.com/thebtf/engram/internal/bulkops/rollback.go:373.78,375.3 1 1 +github.com/thebtf/engram/internal/bulkops/rollback.go:377.2,378.63 2 1 +github.com/thebtf/engram/internal/bulkops/rollback.go:378.63,380.3 1 0 +github.com/thebtf/engram/internal/bulkops/rollback.go:381.2,383.60 3 1 +github.com/thebtf/engram/internal/bulkops/rollback.go:386.106,389.34 3 1 +github.com/thebtf/engram/internal/bulkops/rollback.go:389.34,392.3 2 0 +github.com/thebtf/engram/internal/bulkops/rollback.go:393.2,393.41 1 1 +github.com/thebtf/engram/internal/bulkops/rollback.go:393.41,395.3 1 0 +github.com/thebtf/engram/internal/bulkops/rollback.go:396.2,396.42 1 1 +github.com/thebtf/engram/internal/bulkops/rollback.go:396.42,398.3 1 0 +github.com/thebtf/engram/internal/bulkops/rollback.go:399.2,399.18 1 1 +github.com/thebtf/engram/internal/bulkops/rollback.go:410.20,411.19 1 1 +github.com/thebtf/engram/internal/bulkops/rollback.go:411.19,413.3 1 1 +github.com/thebtf/engram/internal/bulkops/rollback.go:414.2,415.25 2 1 +github.com/thebtf/engram/internal/bulkops/rollback.go:415.25,417.14 2 1 +github.com/thebtf/engram/internal/bulkops/rollback.go:417.14,419.12 1 0 +github.com/thebtf/engram/internal/bulkops/rollback.go:421.3,421.61 1 1 +github.com/thebtf/engram/internal/bulkops/rollback.go:421.61,423.23 2 1 +github.com/thebtf/engram/internal/bulkops/rollback.go:423.23,425.5 1 1 +github.com/thebtf/engram/internal/bulkops/rollback.go:426.4,426.16 1 1 +github.com/thebtf/engram/internal/bulkops/rollback.go:426.16,427.13 1 1 +github.com/thebtf/engram/internal/bulkops/rollback.go:430.3,430.40 1 1 +github.com/thebtf/engram/internal/bulkops/rollback.go:430.40,432.4 1 1 +github.com/thebtf/engram/internal/bulkops/rollback.go:434.2,434.23 1 1 +github.com/thebtf/engram/internal/bulkops/rollback.go:441.138,442.83 1 1 +github.com/thebtf/engram/internal/bulkops/rollback.go:442.83,444.3 1 0 +github.com/thebtf/engram/internal/bulkops/rollback.go:446.2,447.62 2 1 +github.com/thebtf/engram/internal/bulkops/rollback.go:447.62,449.3 1 1 +github.com/thebtf/engram/internal/bulkops/rollback.go:450.2,451.16 2 1 +github.com/thebtf/engram/internal/bulkops/rollback.go:451.16,453.3 1 0 +github.com/thebtf/engram/internal/bulkops/rollback.go:454.2,455.62 2 1 +github.com/thebtf/engram/internal/bulkops/rollback.go:455.62,457.3 1 0 +github.com/thebtf/engram/internal/bulkops/rollback.go:459.2,460.16 2 1 +github.com/thebtf/engram/internal/bulkops/rollback.go:461.35,462.79 1 1 +github.com/thebtf/engram/internal/bulkops/rollback.go:462.79,464.4 1 1 +github.com/thebtf/engram/internal/bulkops/rollback.go:465.3,466.41 2 1 +github.com/thebtf/engram/internal/bulkops/rollback.go:468.38,469.65 1 1 +github.com/thebtf/engram/internal/bulkops/rollback.go:469.65,471.4 1 0 +github.com/thebtf/engram/internal/bulkops/rollback.go:472.3,472.76 1 1 +github.com/thebtf/engram/internal/bulkops/rollback.go:472.76,474.4 1 0 +github.com/thebtf/engram/internal/bulkops/rollback.go:475.3,477.41 3 1 +github.com/thebtf/engram/internal/bulkops/rollback.go:479.10,480.20 1 0 +github.com/thebtf/engram/internal/bulkops/rollback.go:483.2,483.50 1 1 +github.com/thebtf/engram/internal/bulkops/rollback.go:491.88,493.25 2 1 +github.com/thebtf/engram/internal/bulkops/rollback.go:493.25,495.14 2 1 +github.com/thebtf/engram/internal/bulkops/rollback.go:495.14,497.12 1 0 +github.com/thebtf/engram/internal/bulkops/rollback.go:499.3,499.41 1 1 +github.com/thebtf/engram/internal/bulkops/rollback.go:499.41,501.4 1 1 +github.com/thebtf/engram/internal/bulkops/rollback.go:503.2,503.18 1 1 +github.com/thebtf/engram/internal/bulkops/rollback.go:514.91,515.42 1 1 +github.com/thebtf/engram/internal/bulkops/rollback.go:515.42,517.3 1 0 +github.com/thebtf/engram/internal/bulkops/rollback.go:519.2,520.53 2 1 +github.com/thebtf/engram/internal/bulkops/rollback.go:520.53,522.3 1 0 +github.com/thebtf/engram/internal/bulkops/rollback.go:524.2,525.27 2 1 +github.com/thebtf/engram/internal/bulkops/rollback.go:525.27,526.38 1 1 +github.com/thebtf/engram/internal/bulkops/rollback.go:526.38,529.12 2 0 +github.com/thebtf/engram/internal/bulkops/rollback.go:533.3,535.84 2 1 +github.com/thebtf/engram/internal/bulkops/rollback.go:535.84,537.12 2 1 +github.com/thebtf/engram/internal/bulkops/rollback.go:541.3,541.74 1 1 +github.com/thebtf/engram/internal/bulkops/rollback.go:543.2,543.17 1 1 +github.com/thebtf/engram/internal/bulkops/rollback.go:548.81,549.42 1 1 +github.com/thebtf/engram/internal/bulkops/rollback.go:549.42,551.3 1 1 +github.com/thebtf/engram/internal/bulkops/rollback.go:552.2,553.48 2 1 +github.com/thebtf/engram/internal/bulkops/rollback.go:553.48,555.3 1 1 +github.com/thebtf/engram/internal/bulkops/rollback.go:556.2,556.15 1 1 diff --git a/.agent/specs/production-ready-db-bulkops/evidence/DB-BULKOPS-LEGACY-CANDIDATE-NO-AFTER.red.json b/.agent/specs/production-ready-db-bulkops/evidence/DB-BULKOPS-LEGACY-CANDIDATE-NO-AFTER.red.json new file mode 100644 index 00000000..6c48baf1 --- /dev/null +++ b/.agent/specs/production-ready-db-bulkops/evidence/DB-BULKOPS-LEGACY-CANDIDATE-NO-AFTER.red.json @@ -0,0 +1,11 @@ +{ + "task_id": "DB-BULKOPS-LEGACY-CANDIDATE-NO-AFTER", + "observed_at": "2026-07-10T05:26:00Z", + "stack": "GO", + "test_file": "internal/bulkops/facade_test.go", + "test_name": "TestFacade_BulkPromote_LegacySnapshotWithoutAfterFailsClosedAndPreservesCandidate", + "database": "engram_prc_bulkops_edges_green_20260710_082347", + "failure_reason": "A legacy candidate restore entry without an exact after-state was treated as safe; rollback overwrote concurrent candidate content, reset status to pending, and deleted the promoted memory.", + "runner_exit_code": 1, + "runner_stdout_excerpt": "expected rollback_conflict, got nil; concurrent-C overwritten; promoted changed to pending" +} diff --git a/.agent/specs/production-ready-db-bulkops/evidence/DB-BULKOPS-ROLLBACK-CANDIDATE-CONFLICT.red.json b/.agent/specs/production-ready-db-bulkops/evidence/DB-BULKOPS-ROLLBACK-CANDIDATE-CONFLICT.red.json new file mode 100644 index 00000000..ff64221f --- /dev/null +++ b/.agent/specs/production-ready-db-bulkops/evidence/DB-BULKOPS-ROLLBACK-CANDIDATE-CONFLICT.red.json @@ -0,0 +1,11 @@ +{ + "task_id": "DB-BULKOPS-ROLLBACK-CANDIDATE-CONFLICT", + "observed_at": "2026-07-10T05:20:12Z", + "stack": "GO", + "test_file": "internal/bulkops/facade_test.go", + "test_name": "TestFacade_BulkPromote_CandidateChangedAfterExecuteConflictsAndPreservesCurrent", + "database": "engram_prc_bulkops_edges_red_20260710_081930", + "failure_reason": "Rollback did not detect that the promoted candidate changed after Execute committed; it returned success, overwrote concurrent content C with captured content B, reset status to pending, and deleted the promoted memory.", + "runner_exit_code": 1, + "runner_stdout_excerpt": "expected rollback_conflict, got nil; expected concurrent-C, got pre-update content; expected promoted, got pending" +} diff --git a/internal/bulkops/facade.go b/internal/bulkops/facade.go index 82a3e3bc..6c1718ae 100644 --- a/internal/bulkops/facade.go +++ b/internal/bulkops/facade.go @@ -21,6 +21,7 @@ import ( gormdb "github.com/thebtf/engram/internal/db/gorm" "github.com/thebtf/engram/pkg/models" gormpkg "gorm.io/gorm" + "gorm.io/gorm/clause" ) // ErrAdminRequired is returned when a non-admin caller attempts a bulk operation. @@ -128,7 +129,7 @@ func (f *Facade) Execute(ctx context.Context, identity auth.Identity, op BulkOp) // --- bulk_promote --- func (f *Facade) executeBulkPromote(ctx context.Context, identity auth.Identity, op BulkOp) (*ExecuteResult, error) { - ids := op.CandidateIDs + ids := sortedUniqueIDs(op.CandidateIDs) if op.DryRun { return &ExecuteResult{ @@ -148,68 +149,51 @@ func (f *Facade) executeBulkPromote(ctx context.Context, identity auth.Identity, if f.memoryStore == nil { return nil, fmt.Errorf("bulk_promote: memory store not available") } - - // Capture before-state using typed entries (MAJOR fix: distinguish restore vs delete). - // - // The before_state JSONB uses SnapshotEntry{Kind, Before} per row: - // - Candidates (by candidate:): EntryKindRestore — rollback restores them to pending. - // - Promoted memory rows (by numeric memory ID): EntryKindDelete — rollback hard-deletes them. - // - // The entity-prefixed candidate key remains distinct even when the independent - // candidate and memory sequences allocate the same numeric ID. Numeric restore - // keys from older bulk_promote snapshots remain backward-compatible in rollback. - actor := resolveActor(identity) - snapshotID, beforeState, capturedAt, err := f.capturePromoteBeforeState(ctx, ids) - if err != nil { - return nil, fmt.Errorf("bulk_promote snapshot capture: %w", err) + if f.snapshotStore == nil { + return nil, fmt.Errorf("bulk_promote: snapshot store not available") } + actor := resolveActor(identity) params := op.Parameters if len(params) == 0 { params, _ = json.Marshal(map[string]any{"candidate_ids": ids}) } - snap, err := models.NewBulkOpSnapshot(snapshotID, models.SnapshotOpBulkPromote, actor, beforeState) - if err != nil { - return nil, fmt.Errorf("bulk_promote new_snapshot: %w", err) - } - snap.CreatedAt = capturedAt - // AffectedMemoryIDs for bulk_promote tracks the CANDIDATE ids at this point - // (before promotions run). After promotions, we amend it with the promoted memory IDs - // so conflict detection can check the actual memory rows. The before_state typed entries - // are the rollback source of truth — AffectedMemoryIDs is only used for conflict detection. - snap.AffectedMemoryIDs = ids // candidate IDs pre-op; amended below with memory IDs - snap.SourceSessionID = op.SourceSessionID - snap.Parameters = params var result *ExecuteResult promotionAudits := make([]gormdb.AuditLogEntry, 0, len(ids)) txErr := f.memoryStore.GetDB().WithContext(ctx).Transaction(func(tx *gormpkg.DB) error { - // Snapshot creation, every successful candidate promotion, and the final - // promoted-memory amendment form one commit unit. The store methods may - // create nested savepoints, but all writes remain owned by this transaction. txSnapshotStore := gormdb.NewSnapshotStore(tx) txCandidateStore := gormdb.NewCandidateStore(tx, nil) - createdSnapshot, createErr := txSnapshotStore.Create(ctx, snap) - if createErr != nil { - return fmt.Errorf("store_snapshot: %w", createErr) + // Lock all existing candidates in one deterministic order before reading + // any before-state. Under PostgreSQL READ COMMITTED, a row update that + // commits while this SELECT waits becomes the locked/current row version. + // The captured candidate, promoted memory input, and rollback snapshot + // therefore describe the same committed state. + captures, lockedIDs, capturedAt, captureErr := lockPromoteCandidatesTx(ctx, tx, txCandidateStore, ids) + if captureErr != nil { + return fmt.Errorf("capture locked candidates: %w", captureErr) } txResult := &ExecuteResult{ - SnapshotID: createdSnapshot.SnapshotID, - DryRun: false, - Promoted: []int64{}, + DryRun: false, + Promoted: []int64{}, + } + lockedSet := make(map[int64]struct{}, len(lockedIDs)) + for _, id := range lockedIDs { + lockedSet[id] = struct{}{} } for _, id := range ids { - // Load the candidate through the transaction so the promotion observes - // the same database state as snapshot creation and amendment. - candidate, cErr := txCandidateStore.Get(ctx, id) - if cErr != nil { - txResult.Errors = append(txResult.Errors, fmt.Sprintf("candidate %d: get: %v", id, cErr)) - log.Warn().Err(cErr).Int64("candidate_id", id).Msg("bulk_promote: get candidate failed") - continue + if _, ok := lockedSet[id]; !ok { + txResult.Errors = append(txResult.Errors, fmt.Sprintf("candidate %d: get: %v", id, gormpkg.ErrRecordNotFound)) } - // Build memory from candidate — same logic as promote_candidate MCP tool. + } + + successEntries := make(map[string]models.SnapshotEntry, len(lockedIDs)) + successfulCandidateIDs := make([]int64, 0, len(lockedIDs)) + for _, id := range lockedIDs { + capture := captures[id] + candidate := capture.Candidate project := "" if len(candidate.AffectedProjects) > 0 { project = candidate.AffectedProjects[0] @@ -222,23 +206,37 @@ func (f *Facade) executeBulkPromote(ctx context.Context, identity auth.Identity, Tags: []string{fmt.Sprintf("candidate:%d", id), "crystallized"}, SourceAgent: "crystallization", } - // PromoteWithMemory uses a nested transaction/savepoint on tx. Its audit - // dependency is deliberately nil: audit rows are emitted only after the - // outer transaction commits, so a failed amendment cannot leave a false - // promotion audit behind. promoted, createdMemory, promErr := txCandidateStore.PromoteWithMemory(ctx, id, mem) if promErr != nil { txResult.Errors = append(txResult.Errors, fmt.Sprintf("candidate %d: %v", id, promErr)) log.Warn().Err(promErr).Int64("candidate_id", id).Msg("bulk_promote: candidate promotion failed") continue } + if promoted == nil { + return fmt.Errorf("candidate %d promotion returned no post-promotion candidate state", id) + } + promotedAfter, marshalErr := json.Marshal(promoted) + if marshalErr != nil { + return fmt.Errorf("serialize promoted candidate %d after-state: %w", id, marshalErr) + } txResult.AffectedCount++ - if promoted != nil && promoted.PromotedMemoryID != nil { - txResult.Promoted = append(txResult.Promoted, *promoted.PromotedMemoryID) + var promotedMemoryID int64 + if promoted.PromotedMemoryID != nil { + promotedMemoryID = *promoted.PromotedMemoryID } else if createdMemory != nil { - txResult.Promoted = append(txResult.Promoted, createdMemory.ID) + promotedMemoryID = createdMemory.ID + } + if promotedMemoryID == 0 { + return fmt.Errorf("candidate %d promotion returned no memory ID", id) + } + txResult.Promoted = append(txResult.Promoted, promotedMemoryID) + successEntries[fmt.Sprintf("candidate:%d", id)] = models.SnapshotEntry{ + Kind: models.EntryKindRestore, + Before: capture.Before, + After: promotedAfter, } - if promoted != nil && createdMemory != nil { + successfulCandidateIDs = append(successfulCandidateIDs, id) + if createdMemory != nil { promotionAudits = append(promotionAudits, gormdb.AuditLogEntry{ Action: "promote_candidate", Actor: "system", @@ -248,13 +246,36 @@ func (f *Facade) executeBulkPromote(ctx context.Context, identity auth.Identity, } } - // The amendment is part of the same commit unit. Any error aborts snapshot - // creation and all successful promotions instead of returning an unusable - // rollback contract. - if len(txResult.Promoted) > 0 { - if amendErr := txSnapshotStore.AmendPromoteEntries(ctx, createdSnapshot.SnapshotID, txResult.Promoted); amendErr != nil { - return fmt.Errorf("amend snapshot entries: %w", amendErr) - } + if len(txResult.Promoted) == 0 { + result = txResult + return nil + } + + beforeState, marshalErr := json.Marshal(successEntries) + if marshalErr != nil { + return fmt.Errorf("serialize promote before_state: %w", marshalErr) + } + snap, snapshotErr := models.NewBulkOpSnapshot( + uuid.New().String(), + models.SnapshotOpBulkPromote, + actor, + json.RawMessage(beforeState), + ) + if snapshotErr != nil { + return fmt.Errorf("new_snapshot: %w", snapshotErr) + } + snap.CreatedAt = capturedAt + snap.AffectedMemoryIDs = successfulCandidateIDs + snap.SourceSessionID = op.SourceSessionID + snap.Parameters = params + + createdSnapshot, createErr := txSnapshotStore.Create(ctx, snap) + if createErr != nil { + return fmt.Errorf("store_snapshot: %w", createErr) + } + txResult.SnapshotID = createdSnapshot.SnapshotID + if amendErr := txSnapshotStore.AmendPromoteEntries(ctx, createdSnapshot.SnapshotID, txResult.Promoted); amendErr != nil { + return fmt.Errorf("amend snapshot entries: %w", amendErr) } result = txResult @@ -458,35 +479,65 @@ func (f *Facade) captureCandidateBeforeState(ctx context.Context, ids []int64) ( return snapshotID, json.RawMessage(bs), nil } -// capturePromoteBeforeState captures candidate before-state as typed SnapshotEntry rows. -// Each candidate ID is stored as EntryKindRestore with the candidate body as Before data. -// Promoted memory IDs (created by the op) are added later via AmendPromoteEntries as -// EntryKindDelete (no before needed — they did not exist pre-op). -func (f *Facade) capturePromoteBeforeState(ctx context.Context, candidateIDs []int64) (string, json.RawMessage, time.Time, error) { - snapshotID := uuid.New().String() - capturedAt, err := f.authoritativeCaptureTime(ctx) - if err != nil { - return "", nil, time.Time{}, err +type promoteCandidateCapture struct { + Candidate *models.CrystallizationCandidate + Before json.RawMessage +} + +// lockPromoteCandidatesTx locks all currently existing requested candidates in +// ascending ID order, then captures their current committed state from the same +// transaction. Missing IDs are intentionally absent from the result: an insert +// that races after this locked capture is not owned by the bulk operation and +// must not be promoted or included in its rollback snapshot. +func lockPromoteCandidatesTx( + ctx context.Context, + tx *gormpkg.DB, + candidateStore *gormdb.CandidateStore, + candidateIDs []int64, +) (map[int64]promoteCandidateCapture, []int64, time.Time, error) { + ids := sortedUniqueIDs(candidateIDs) + type candidateIDRow struct { + ID int64 + } + rows := make([]candidateIDRow, 0, len(ids)) + if len(ids) > 0 { + if err := tx.WithContext(ctx). + Table("crystallization_candidates"). + Select("id"). + Where("id IN ?", ids). + Order("id ASC"). + Clauses(clause.Locking{Strength: "UPDATE"}). + Find(&rows).Error; err != nil { + return nil, nil, time.Time{}, fmt.Errorf("lock candidates: %w", err) + } } - state := make(map[string]models.SnapshotEntry, len(candidateIDs)) - for _, id := range candidateIDs { - c, err := f.candidateStore.Get(ctx, id) + + var capturedAt time.Time + if err := tx.WithContext(ctx). + Raw("SELECT clock_timestamp()"). + Scan(&capturedAt).Error; err != nil { + return nil, nil, time.Time{}, fmt.Errorf("capture authoritative snapshot time: %w", err) + } + capturedAt = capturedAt.UTC() + + captures := make(map[int64]promoteCandidateCapture, len(rows)) + lockedIDs := make([]int64, 0, len(rows)) + for _, row := range rows { + candidate, err := candidateStore.Get(ctx, row.ID) if err != nil { - // Missing candidate: still record a restore entry with empty Before. - state[fmt.Sprintf("candidate:%d", id)] = models.SnapshotEntry{Kind: models.EntryKindRestore} - continue + return nil, nil, time.Time{}, fmt.Errorf("load locked candidate %d: %w", row.ID, err) } - before, marshalErr := json.Marshal(c) - if marshalErr != nil { - return "", nil, time.Time{}, fmt.Errorf("capturePromoteBeforeState: marshal candidate %d: %w", id, marshalErr) + before, err := json.Marshal(candidate) + if err != nil { + return nil, nil, time.Time{}, fmt.Errorf("serialize locked candidate %d: %w", row.ID, err) } - state[fmt.Sprintf("candidate:%d", id)] = models.SnapshotEntry{Kind: models.EntryKindRestore, Before: json.RawMessage(before)} - } - bs, err := json.Marshal(state) - if err != nil { - return "", nil, time.Time{}, fmt.Errorf("capturePromoteBeforeState: serialize: %w", err) + captures[row.ID] = promoteCandidateCapture{ + Candidate: candidate, + Before: json.RawMessage(before), + } + lockedIDs = append(lockedIDs, row.ID) } - return snapshotID, json.RawMessage(bs), capturedAt, nil + return captures, lockedIDs, capturedAt, nil } // captureMemoryBeforeState fetches memory rows and serializes them as JSONB. diff --git a/internal/bulkops/facade_test.go b/internal/bulkops/facade_test.go index 9a29caf5..734727ed 100644 --- a/internal/bulkops/facade_test.go +++ b/internal/bulkops/facade_test.go @@ -153,6 +153,54 @@ func TestFacade_DryRun_AllOpTypes(t *testing.T) { } } +func TestFacade_BulkPromote_DryRunNormalizesDuplicateAndZeroIDs(t *testing.T) { + db, store := openTestDB(t) + ctx := context.Background() + memStore := gormdb.NewMemoryStore(store) + snapStore := gormdb.NewSnapshotStore(db) + candidateStore := gormdb.NewCandidateStore(db, nil) + facade := NewFacade(snapStore, candidateStore, memStore, nil) + suffix := fmt.Sprintf("dry-run-normalized-%d", time.Now().UnixNano()) + sourceSessionID := "bulk-promote-" + suffix + first := createBulkPromoteCandidate(t, candidateStore, suffix+"-first") + second := createBulkPromoteCandidate(t, candidateStore, suffix+"-second") + inputIDs := []int64{second.ID, 0, first.ID, second.ID, first.ID, 0} + + t.Cleanup(func() { + _ = db.Exec("DELETE FROM crystallization_candidates WHERE id IN ?", []int64{first.ID, second.ID}).Error + _ = db.Unscoped().Exec("DELETE FROM memories WHERE project IN ?", []string{ + "bulk-promote-" + suffix + "-first", + "bulk-promote-" + suffix + "-second", + }).Error + _ = db.Exec("DELETE FROM bulk_op_snapshots WHERE source_session_id = ?", sourceSessionID).Error + }) + + preview, err := facade.Execute(ctx, adminIdentity(), BulkOp{ + Type: models.SnapshotOpBulkPromote, + CandidateIDs: inputIDs, + DryRun: true, + }) + require.NoError(t, err) + require.NotNil(t, preview) + assert.True(t, preview.DryRun) + assert.Equal(t, 2, preview.WouldAffect, + "preview must count the same sorted unique non-zero candidate IDs that execution consumes") + + executed, err := facade.Execute(ctx, adminIdentity(), BulkOp{ + Type: models.SnapshotOpBulkPromote, + CandidateIDs: inputIDs, + SourceSessionID: sourceSessionID, + }) + require.NoError(t, err) + require.NotNil(t, executed) + assert.Equal(t, preview.WouldAffect, executed.AffectedCount, + "dry-run and execution must use identical normalized candidate-ID semantics") + assert.Len(t, executed.Promoted, 2) + + _, err = Rollback(ctx, adminIdentity(), executed.SnapshotID, snapStore, memStore, nil, candidateStore) + require.NoError(t, err) +} + // --- Integration: committed paths + audit log (require DATABASE_DSN) --- func openTestDB(t *testing.T) (*gorm.DB, *gormdb.Store) { @@ -419,9 +467,17 @@ func TestFacade_BulkPromote_AmendFailureRollsBackAndRetryRemainsSafe(t *testing. memStore := gormdb.NewMemoryStore(store) snapStore := gormdb.NewSnapshotStore(db) candidateStore := gormdb.NewCandidateStore(db, nil) - facade := NewFacade(snapStore, candidateStore, memStore, nil) + auditStore := gormdb.NewAuditStore(db) + facade := NewFacade(snapStore, candidateStore, memStore, auditStore) suffix := fmt.Sprintf("amend-failure-%d", time.Now().UnixNano()) sourceSessionID := "bulk-promote-" + suffix + var retrySnapshotID string + t.Cleanup(func() { + _ = db.Exec("DELETE FROM audit_log WHERE action = ? AND source_session_id = ?", "promote_candidate", sourceSessionID).Error + if retrySnapshotID != "" { + _ = db.Exec("DELETE FROM audit_log WHERE action = ? AND reason LIKE ?", "bulk_promote", "%snapshot="+retrySnapshotID+"%").Error + } + }) _, err := memStore.Create(ctx, &models.Memory{ Content: "bulk promote sequence spacer", @@ -459,9 +515,25 @@ func TestFacade_BulkPromote_AmendFailureRollsBackAndRetryRemainsSafe(t *testing. CandidateIDs: []int64{candidate.ID}, SourceSessionID: sourceSessionID, } + var promoteAuditBefore int64 + require.NoError(t, db.Model(&gormdb.AuditLogEntry{}). + Where("action = ?", "promote_candidate").Count(&promoteAuditBefore).Error) + var bulkAuditBefore int64 + require.NoError(t, db.Model(&gormdb.AuditLogEntry{}). + Where("action = ?", "bulk_promote").Count(&bulkAuditBefore).Error) result, executeErr := facade.Execute(ctx, adminIdentity(), op) require.Error(t, executeErr) require.Nil(t, result) + var promoteAuditAfterFailure int64 + require.NoError(t, db.Model(&gormdb.AuditLogEntry{}). + Where("action = ?", "promote_candidate").Count(&promoteAuditAfterFailure).Error) + require.Equal(t, promoteAuditBefore, promoteAuditAfterFailure, + "rolled-back promotion must not emit promote_candidate success audit") + var bulkAuditAfterFailure int64 + require.NoError(t, db.Model(&gormdb.AuditLogEntry{}). + Where("action = ?", "bulk_promote").Count(&bulkAuditAfterFailure).Error) + require.Equal(t, bulkAuditBefore, bulkAuditAfterFailure, + "rolled-back promotion must not emit bulk_promote success audit") unchangedCandidate, err := candidateStore.Get(ctx, candidate.ID) require.NoError(t, err) @@ -483,6 +555,17 @@ func TestFacade_BulkPromote_AmendFailureRollsBackAndRetryRemainsSafe(t *testing. retryResult, err := facade.Execute(ctx, adminIdentity(), op) require.NoError(t, err) require.Len(t, retryResult.Promoted, 1) + retrySnapshotID = retryResult.SnapshotID + var promoteAuditAfterRetry int64 + require.NoError(t, db.Model(&gormdb.AuditLogEntry{}). + Where("action = ?", "promote_candidate").Count(&promoteAuditAfterRetry).Error) + require.Equal(t, promoteAuditBefore+1, promoteAuditAfterRetry, + "successful retry must emit exactly one promote_candidate audit") + var bulkAuditAfterRetry int64 + require.NoError(t, db.Model(&gormdb.AuditLogEntry{}). + Where("action = ?", "bulk_promote").Count(&bulkAuditAfterRetry).Error) + require.Equal(t, bulkAuditBefore+1, bulkAuditAfterRetry, + "successful retry must emit exactly one bulk_promote audit") require.NoError(t, db.Unscoped().Model(&gormdb.Memory{}). Where("content = ?", candidate.ProposedContent).Count(&promotedMemoryCount).Error) require.Equal(t, int64(1), promotedMemoryCount) @@ -500,3 +583,441 @@ func TestFacade_BulkPromote_AmendFailureRollsBackAndRetryRemainsSafe(t *testing. _, err = Rollback(ctx, adminIdentity(), retryResult.SnapshotID, snapStore, memStore, nil, candidateStore) require.ErrorIs(t, err, ErrSnapshotNotRollbackable) } + +func TestFacade_BulkPromote_ConcurrentCommittedUpdateIsCapturedPromotedAndRollbackable(t *testing.T) { + db, store := openTestDB(t) + ctx := context.Background() + memStore := gormdb.NewMemoryStore(store) + snapStore := gormdb.NewSnapshotStore(db) + candidateStore := gormdb.NewCandidateStore(db, nil) + facade := NewFacade(snapStore, candidateStore, memStore, nil) + suffix := fmt.Sprintf("capture-lock-%d", time.Now().UnixNano()) + sourceSessionID := "bulk-promote-" + suffix + candidate := createBulkPromoteCandidate(t, candidateStore, suffix) + committedContent := candidate.ProposedContent + "-committed-B" + + t.Cleanup(func() { + _ = db.Exec("DELETE FROM crystallization_candidates WHERE id = ?", candidate.ID).Error + _ = db.Unscoped().Exec("DELETE FROM memories WHERE project = ?", "bulk-promote-"+suffix).Error + _ = db.Exec("DELETE FROM bulk_op_snapshots WHERE source_session_id = ?", sourceSessionID).Error + }) + + concurrentTx := db.Begin() + require.NoError(t, concurrentTx.Error) + concurrentCommitted := false + t.Cleanup(func() { + if !concurrentCommitted { + _ = concurrentTx.Rollback().Error + } + }) + require.NoError(t, concurrentTx.Exec( + "UPDATE crystallization_candidates SET proposed_content = ?, updated_at = clock_timestamp() WHERE id = ?", + committedContent, + candidate.ID, + ).Error) + + type executeOutcome struct { + result *ExecuteResult + err error + } + done := make(chan executeOutcome, 1) + go func() { + result, err := facade.Execute(ctx, adminIdentity(), BulkOp{ + Type: models.SnapshotOpBulkPromote, + CandidateIDs: []int64{candidate.ID}, + SourceSessionID: sourceSessionID, + }) + done <- executeOutcome{result: result, err: err} + }() + + deadline := time.Now().Add(10 * time.Second) + for { + var waiters int64 + require.NoError(t, db.Raw(` + SELECT count(*) + FROM pg_stat_activity + WHERE datname = current_database() + AND pid <> pg_backend_pid() + AND state = 'active' + AND wait_event_type = 'Lock' + `).Scan(&waiters).Error) + if waiters > 0 { + break + } + select { + case outcome := <-done: + require.FailNow(t, "Execute did not block on the concurrent candidate row lock", + "result=%+v err=%v", outcome.result, outcome.err) + default: + } + if time.Now().After(deadline) { + require.FailNow(t, "timed out waiting for Execute to block on candidate FOR UPDATE") + } + time.Sleep(20 * time.Millisecond) + } + + require.NoError(t, concurrentTx.Commit().Error) + concurrentCommitted = true + outcome := <-done + require.NoError(t, outcome.err) + require.NotNil(t, outcome.result) + require.Len(t, outcome.result.Promoted, 1) + + afterExecute, err := candidateStore.Get(ctx, candidate.ID) + require.NoError(t, err) + assert.Equal(t, committedContent, afterExecute.ProposedContent, + "promotion must retain the update committed before candidate lock acquisition") + promotedMemory, err := memStore.Get(ctx, outcome.result.Promoted[0]) + require.NoError(t, err) + assert.Equal(t, committedContent, promotedMemory.Content, + "promoted memory must be built from the locked committed candidate state") + + persistedSnapshot, err := snapStore.Get(ctx, outcome.result.SnapshotID) + require.NoError(t, err) + var entries map[string]models.SnapshotEntry + require.NoError(t, json.Unmarshal(persistedSnapshot.BeforeState, &entries)) + candidateEntry, ok := entries[fmt.Sprintf("candidate:%d", candidate.ID)] + require.True(t, ok) + var captured models.CrystallizationCandidate + require.NoError(t, json.Unmarshal(candidateEntry.Before, &captured)) + assert.Equal(t, committedContent, captured.ProposedContent, + "snapshot must capture the same locked candidate state that promotion consumes") + + _, err = Rollback(ctx, adminIdentity(), outcome.result.SnapshotID, snapStore, memStore, nil, candidateStore) + require.NoError(t, err) + afterRollback, err := candidateStore.Get(ctx, candidate.ID) + require.NoError(t, err) + assert.Equal(t, committedContent, afterRollback.ProposedContent, + "rollback must restore the committed candidate state captured under lock") + require.Nil(t, afterRollback.PromotedMemoryID) + var memoryCount int64 + require.NoError(t, db.Unscoped().Model(&gormdb.Memory{}). + Where("id = ?", outcome.result.Promoted[0]).Count(&memoryCount).Error) + require.Zero(t, memoryCount) +} + +func TestFacade_BulkPromote_CandidateChangedAfterExecuteConflictsAndPreservesCurrent(t *testing.T) { + db, store := openTestDB(t) + ctx := context.Background() + memStore := gormdb.NewMemoryStore(store) + snapStore := gormdb.NewSnapshotStore(db) + candidateStore := gormdb.NewCandidateStore(db, nil) + facade := NewFacade(snapStore, candidateStore, memStore, nil) + suffix := fmt.Sprintf("rollback-candidate-conflict-%d", time.Now().UnixNano()) + sourceSessionID := "bulk-promote-" + suffix + candidate := createBulkPromoteCandidate(t, candidateStore, suffix) + + t.Cleanup(func() { + _ = db.Exec("DELETE FROM crystallization_candidates WHERE id = ?", candidate.ID).Error + _ = db.Unscoped().Exec("DELETE FROM memories WHERE project = ?", "bulk-promote-"+suffix).Error + _ = db.Exec("DELETE FROM bulk_op_snapshots WHERE source_session_id = ?", sourceSessionID).Error + }) + + executed, err := facade.Execute(ctx, adminIdentity(), BulkOp{ + Type: models.SnapshotOpBulkPromote, + CandidateIDs: []int64{candidate.ID}, + SourceSessionID: sourceSessionID, + }) + require.NoError(t, err) + require.NotNil(t, executed) + require.Len(t, executed.Promoted, 1) + promotedMemoryID := executed.Promoted[0] + + concurrentContent := candidate.ProposedContent + "-concurrent-C" + concurrentTx := db.Begin() + require.NoError(t, concurrentTx.Error) + concurrentCommitted := false + t.Cleanup(func() { + if !concurrentCommitted { + _ = concurrentTx.Rollback().Error + } + }) + require.NoError(t, concurrentTx.Exec( + "UPDATE crystallization_candidates SET proposed_content = ?, updated_at = clock_timestamp() + interval '1 second' WHERE id = ?", + concurrentContent, + candidate.ID, + ).Error) + + type rollbackOutcome struct { + result *RollbackResult + err error + } + done := make(chan rollbackOutcome, 1) + go func() { + result, err := Rollback( + ctx, + adminIdentity(), + executed.SnapshotID, + snapStore, + memStore, + nil, + candidateStore, + ) + done <- rollbackOutcome{result: result, err: err} + }() + + deadline := time.Now().Add(10 * time.Second) + for { + var waiters int64 + require.NoError(t, db.Raw(` + SELECT count(*) + FROM pg_stat_activity + WHERE datname = current_database() + AND pid <> pg_backend_pid() + AND state = 'active' + AND wait_event_type = 'Lock' + `).Scan(&waiters).Error) + if waiters > 0 { + break + } + select { + case outcome := <-done: + require.FailNow(t, "Rollback did not wait for the concurrent candidate row update", + "result=%+v err=%v", outcome.result, outcome.err) + default: + } + if time.Now().After(deadline) { + require.FailNow(t, "timed out waiting for Rollback to block on candidate FOR UPDATE") + } + time.Sleep(20 * time.Millisecond) + } + + require.NoError(t, concurrentTx.Commit().Error) + concurrentCommitted = true + outcome := <-done + rollbackResult, rollbackErr := outcome.result, outcome.err + assert.ErrorIs(t, rollbackErr, ErrRollbackConflict, + "rollback must reject a candidate version changed after Execute committed") + if assert.NotNil(t, rollbackResult) { + assert.Contains(t, rollbackResult.ConflictIDs, candidate.ID) + } + + currentCandidate, err := candidateStore.Get(ctx, candidate.ID) + require.NoError(t, err) + assert.Equal(t, concurrentContent, currentCandidate.ProposedContent, + "rollback conflict must preserve the concurrently committed candidate state") + assert.Equal(t, models.CandidateStatusPromoted, currentCandidate.Status) + require.NotNil(t, currentCandidate.PromotedMemoryID) + assert.Equal(t, promotedMemoryID, *currentCandidate.PromotedMemoryID) + + promotedMemory, err := memStore.Get(ctx, promotedMemoryID) + require.NoError(t, err, "candidate conflict must abort rollback before deleting the promoted memory") + assert.Equal(t, candidate.ProposedContent, promotedMemory.Content) + + persistedSnapshot, err := snapStore.Get(ctx, executed.SnapshotID) + require.NoError(t, err) + assert.Equal(t, models.SnapshotStatusCommitted, persistedSnapshot.Status, + "candidate conflict must leave the snapshot retryable and committed") +} + +func TestFacade_BulkPromote_LegacySnapshotWithoutAfterFailsClosedAndPreservesCandidate(t *testing.T) { + db, store := openTestDB(t) + ctx := context.Background() + memStore := gormdb.NewMemoryStore(store) + snapStore := gormdb.NewSnapshotStore(db) + candidateStore := gormdb.NewCandidateStore(db, nil) + facade := NewFacade(snapStore, candidateStore, memStore, nil) + suffix := fmt.Sprintf("legacy-no-after-%d", time.Now().UnixNano()) + sourceSessionID := "bulk-promote-" + suffix + candidate := createBulkPromoteCandidate(t, candidateStore, suffix) + + t.Cleanup(func() { + _ = db.Exec("DELETE FROM crystallization_candidates WHERE id = ?", candidate.ID).Error + _ = db.Unscoped().Exec("DELETE FROM memories WHERE project = ?", "bulk-promote-"+suffix).Error + _ = db.Exec("DELETE FROM bulk_op_snapshots WHERE source_session_id = ?", sourceSessionID).Error + }) + + executed, err := facade.Execute(ctx, adminIdentity(), BulkOp{ + Type: models.SnapshotOpBulkPromote, + CandidateIDs: []int64{candidate.ID}, + SourceSessionID: sourceSessionID, + }) + require.NoError(t, err) + require.NotNil(t, executed) + require.Len(t, executed.Promoted, 1) + promotedMemoryID := executed.Promoted[0] + + persistedSnapshot, err := snapStore.Get(ctx, executed.SnapshotID) + require.NoError(t, err) + var entries map[string]models.SnapshotEntry + require.NoError(t, json.Unmarshal(persistedSnapshot.BeforeState, &entries)) + entryKey := fmt.Sprintf("candidate:%d", candidate.ID) + legacyEntry, ok := entries[entryKey] + require.True(t, ok) + require.NotEmpty(t, legacyEntry.After, "fixture must begin with a modern exact after-state") + legacyEntry.After = nil + entries[entryKey] = legacyEntry + legacyBeforeState, err := json.Marshal(entries) + require.NoError(t, err) + require.NoError(t, db.Exec( + "UPDATE bulk_op_snapshots SET before_state = CAST(? AS jsonb) WHERE snapshot_id = ?", + string(legacyBeforeState), + executed.SnapshotID, + ).Error) + + concurrentContent := candidate.ProposedContent + "-concurrent-C" + require.NoError(t, db.Exec( + "UPDATE crystallization_candidates SET proposed_content = ?, updated_at = clock_timestamp() + interval '1 second' WHERE id = ?", + concurrentContent, + candidate.ID, + ).Error) + + rollbackResult, rollbackErr := Rollback( + ctx, + adminIdentity(), + executed.SnapshotID, + snapStore, + memStore, + nil, + candidateStore, + ) + assert.ErrorIs(t, rollbackErr, ErrRollbackConflict, + "candidate restore without an exact after-state must fail closed") + if assert.NotNil(t, rollbackResult) { + assert.Contains(t, rollbackResult.ConflictIDs, candidate.ID) + } + + currentCandidate, err := candidateStore.Get(ctx, candidate.ID) + require.NoError(t, err) + assert.Equal(t, concurrentContent, currentCandidate.ProposedContent) + assert.Equal(t, models.CandidateStatusPromoted, currentCandidate.Status) + require.NotNil(t, currentCandidate.PromotedMemoryID) + assert.Equal(t, promotedMemoryID, *currentCandidate.PromotedMemoryID) + + _, err = memStore.Get(ctx, promotedMemoryID) + require.NoError(t, err, "fail-closed legacy rollback must preserve the promoted memory") + stillCommitted, err := snapStore.Get(ctx, executed.SnapshotID) + require.NoError(t, err) + assert.Equal(t, models.SnapshotStatusCommitted, stillCommitted.Status) +} + +func TestFacade_BulkPromote_CandidateInsertedAfterLockedCaptureIsNotPromoted(t *testing.T) { + db, store := openTestDB(t) + ctx := context.Background() + memStore := gormdb.NewMemoryStore(store) + snapStore := gormdb.NewSnapshotStore(db) + candidateStore := gormdb.NewCandidateStore(db, nil) + facade := NewFacade(snapStore, candidateStore, memStore, nil) + suffix := fmt.Sprintf("missing-insert-%d", time.Now().UnixNano()) + sourceSessionID := "bulk-promote-" + suffix + existing := createBulkPromoteCandidate(t, candidateStore, suffix) + + var insertedID int64 + require.NoError(t, db.Raw(` + SELECT GREATEST( + COALESCE((SELECT MAX(id) FROM crystallization_candidates), 0), + (SELECT last_value FROM crystallization_candidates_id_seq) + ) + 1000 + `).Scan(&insertedID).Error) + require.NoError(t, db.Exec("SELECT setval('crystallization_candidates_id_seq', ?, true)", insertedID-1).Error) + + const advisoryLockID int64 = 764210031 + require.NoError(t, db.Exec(` + CREATE OR REPLACE FUNCTION test_block_bulk_promote_memory_insert() RETURNS trigger + LANGUAGE plpgsql AS $$ + BEGIN + IF NEW.source_agent = 'crystallization' THEN + PERFORM pg_advisory_xact_lock(764210031); + END IF; + RETURN NEW; + END + $$ + `).Error) + require.NoError(t, db.Exec(` + CREATE TRIGGER test_block_bulk_promote_memory_insert + BEFORE INSERT ON memories + FOR EACH ROW + EXECUTE FUNCTION test_block_bulk_promote_memory_insert() + `).Error) + triggerInstalled := true + t.Cleanup(func() { + if triggerInstalled { + _ = db.Exec("DROP TRIGGER IF EXISTS test_block_bulk_promote_memory_insert ON memories").Error + } + _ = db.Exec("DROP FUNCTION IF EXISTS test_block_bulk_promote_memory_insert()").Error + _ = db.Exec("DELETE FROM crystallization_candidates WHERE id IN ?", []int64{existing.ID, insertedID}).Error + _ = db.Unscoped().Exec("DELETE FROM memories WHERE project = ?", "bulk-promote-"+suffix).Error + _ = db.Exec("DELETE FROM bulk_op_snapshots WHERE source_session_id = ?", sourceSessionID).Error + }) + + blockTx := db.Begin() + require.NoError(t, blockTx.Error) + blockReleased := false + t.Cleanup(func() { + if !blockReleased { + _ = blockTx.Rollback().Error + } + }) + require.NoError(t, blockTx.Exec("SELECT pg_advisory_xact_lock(?)", advisoryLockID).Error) + + type executeOutcome struct { + result *ExecuteResult + err error + } + done := make(chan executeOutcome, 1) + go func() { + result, err := facade.Execute(ctx, adminIdentity(), BulkOp{ + Type: models.SnapshotOpBulkPromote, + CandidateIDs: []int64{existing.ID, insertedID}, + SourceSessionID: sourceSessionID, + }) + done <- executeOutcome{result: result, err: err} + }() + + deadline := time.Now().Add(10 * time.Second) + for { + var waiters int64 + require.NoError(t, db.Raw(` + SELECT count(*) + FROM pg_stat_activity + WHERE datname = current_database() + AND pid <> pg_backend_pid() + AND state = 'active' + AND wait_event_type = 'Lock' + `).Scan(&waiters).Error) + if waiters > 0 { + break + } + select { + case outcome := <-done: + require.FailNow(t, "Execute did not reach the post-capture memory insert barrier", + "result=%+v err=%v", outcome.result, outcome.err) + default: + } + if time.Now().After(deadline) { + require.FailNow(t, "timed out waiting for promotion memory insert barrier") + } + time.Sleep(20 * time.Millisecond) + } + + inserted := createBulkPromoteCandidate(t, candidateStore, suffix+"-late") + require.Equal(t, insertedID, inserted.ID) + require.NoError(t, blockTx.Commit().Error) + blockReleased = true + outcome := <-done + require.NoError(t, outcome.err) + require.NotNil(t, outcome.result) + require.Equal(t, 1, outcome.result.AffectedCount) + require.Len(t, outcome.result.Promoted, 1) + require.Len(t, outcome.result.Errors, 1) + assert.Contains(t, outcome.result.Errors[0], fmt.Sprintf("candidate %d: get:", insertedID)) + + lateCandidate, err := candidateStore.Get(ctx, insertedID) + require.NoError(t, err) + require.Equal(t, models.CandidateStatusPending, lateCandidate.Status) + require.Nil(t, lateCandidate.PromotedMemoryID) + + persistedSnapshot, err := snapStore.Get(ctx, outcome.result.SnapshotID) + require.NoError(t, err) + var entries map[string]models.SnapshotEntry + require.NoError(t, json.Unmarshal(persistedSnapshot.BeforeState, &entries)) + require.Contains(t, entries, fmt.Sprintf("candidate:%d", existing.ID)) + require.NotContains(t, entries, fmt.Sprintf("candidate:%d", insertedID)) + + _, err = Rollback(ctx, adminIdentity(), outcome.result.SnapshotID, snapStore, memStore, nil, candidateStore) + require.NoError(t, err) + lateCandidate, err = candidateStore.Get(ctx, insertedID) + require.NoError(t, err) + require.Equal(t, models.CandidateStatusPending, lateCandidate.Status) + require.Nil(t, lateCandidate.PromotedMemoryID) +} diff --git a/internal/bulkops/rollback.go b/internal/bulkops/rollback.go index 6bc25c98..48856009 100644 --- a/internal/bulkops/rollback.go +++ b/internal/bulkops/rollback.go @@ -1,9 +1,11 @@ // Package bulkops — rollback.go implements snapshot rollback with conflict detection. // -// Rollback restores the before_state of a bulk_op_snapshot to the memories table. -// Per spec EC-F3: if any affected memory's updated_at > snapshot.created_at, the -// rollback is refused (not partially applied). The caller receives ErrRollbackConflict -// and an audit entry with action='rollback_attempted_with_conflict'. +// Rollback restores the before_state of a bulk_op_snapshot to memories and, for +// candidate operations, crystallization candidates. Per spec EC-F3, rollback is +// refused atomically when a memory changed after the operation or a candidate no +// longer exactly matches the persisted operation-owned after-state. The caller +// receives ErrRollbackConflict and an audit entry with +// action='rollback_attempted_with_conflict'. // // Successful rollback writes action='rollback' to the audit log and marks the snapshot // status='rolled_back' via SnapshotStore.MarkRolledBack. @@ -24,10 +26,11 @@ import ( gormdb "github.com/thebtf/engram/internal/db/gorm" "github.com/thebtf/engram/pkg/models" gormpkg "gorm.io/gorm" + "gorm.io/gorm/clause" ) -// ErrRollbackConflict is returned when at least one affected memory has been modified -// after the snapshot was captured. Per spec EC-F3. +// ErrRollbackConflict is returned when at least one affected memory or candidate no +// longer matches the state owned by the snapshot operation. Per spec EC-F3. var ErrRollbackConflict = errors.New("rollback_conflict") // ErrSnapshotNotRollbackable is returned when the snapshot status is not 'committed' @@ -40,16 +43,16 @@ type RollbackResult struct { SnapshotID string `json:"snapshot_id"` // RestoredCount is the number of memory rows restored. RestoredCount int `json:"restored_count"` - // ConflictIDs contains memory IDs that were modified after the snapshot (populated - // when ErrRollbackConflict is returned). + // ConflictIDs contains memory or candidate IDs whose current state no longer + // matches the operation-owned post-state (populated when ErrRollbackConflict is returned). ConflictIDs []int64 `json:"conflict_ids,omitempty"` } // Rollback rolls back a committed bulk_op_snapshot. // // Admin gate: identity.Role must be auth.RoleAdmin. -// Conflict check (EC-F3): if any affected memory's current updated_at > snapshot.created_at, -// the rollback is refused atomically (no partial restore). An audit entry with +// Conflict check (EC-F3): memory changes and exact candidate after-state mismatches +// refuse rollback atomically (no partial restore). An audit entry with // action='rollback_attempted_with_conflict' is written. // On success: memory rows are restored, audit action='rollback' is written, snapshot // status is set to 'rolled_back'. @@ -77,9 +80,10 @@ func Rollback( var conflictIDs []int64 txErr := db.WithContext(ctx).Transaction(func(tx *gormpkg.DB) error { - // Lock order is deliberate: snapshot first, then all affected memory rows - // in sorted ID order. The conflict decision, restore, and status CAS therefore - // observe one transactional state with no read-to-write TOCTOU window. + // Lock order is deliberate: snapshot first, then candidate rows, then memory + // rows, with each entity class locked in sorted ID order. The conflict decision, + // restore, and status CAS therefore observe one transactional state with no + // read-to-write TOCTOU window. snap, err := snapshotStore.GetForUpdateTx(ctx, tx, snapshotID) if err != nil { if errors.Is(err, gormpkg.ErrRecordNotFound) { @@ -105,6 +109,8 @@ func Rollback( // restore entry if metadata drifts. var idsToCheck []int64 var createdIDsToCheck []int64 + var candidateIDsToLock []int64 + candidateEntriesToCheck := make(map[int64]models.SnapshotEntry) for key, entry := range typedEntries { entity, id, parseErr := parseSnapshotEntryKey(key) if parseErr != nil { @@ -116,12 +122,30 @@ func Rollback( } if entity == snapshotEntryEntityCandidate || (entity == "" && (snap.OpType == models.SnapshotOpBulkPromote || snap.OpType == models.SnapshotOpCandidateReviewAction)) { + candidateIDsToLock = append(candidateIDsToLock, id) + // Candidate rollback is safe only when the snapshot persists the exact + // operation-owned post-state. Legacy entries without After are still + // locked, but detectCandidateConflicts fails them closed instead of + // guessing from snapshot timestamps and overwriting a later edit. + candidateEntriesToCheck[id] = entry continue } idsToCheck = append(idsToCheck, id) } + candidateIDsToLock = sortedUniqueIDs(candidateIDsToLock) idsToCheck = sortedUniqueIDs(idsToCheck) createdIDsToCheck = sortedUniqueIDs(createdIDsToCheck) + if len(candidateIDsToLock) > 0 && candidateStore == nil { + return fmt.Errorf("rollback: candidateStore required to roll back candidates %v", candidateIDsToLock) + } + lockedCandidates, err := lockCandidateRowsForRollbackTx(ctx, tx, candidateIDsToLock) + if err != nil { + return fmt.Errorf("rollback: lock affected candidates: %w", err) + } + candidateConflicts, err := detectCandidateConflicts(lockedCandidates, candidateEntriesToCheck) + if err != nil { + return fmt.Errorf("rollback: candidate conflict detection: %w", err) + } allMemoryIDs := make([]int64, 0, len(idsToCheck)+len(createdIDsToCheck)) allMemoryIDs = append(allMemoryIDs, idsToCheck...) allMemoryIDs = append(allMemoryIDs, createdIDsToCheck...) @@ -130,11 +154,14 @@ func Rollback( return fmt.Errorf("rollback: lock affected memories: %w", err) } - conflictIDs, err = detectConflicts(lockedRows, idsToCheck, snap.CreatedAt, snap.OpType, typedEntries) + conflictIDs = append(conflictIDs, candidateConflicts...) + memoryConflicts, err := detectConflicts(lockedRows, idsToCheck, snap.CreatedAt, snap.OpType, typedEntries) if err != nil { return fmt.Errorf("rollback: conflict detection: %w", err) } + conflictIDs = append(conflictIDs, memoryConflicts...) conflictIDs = append(conflictIDs, detectCreatedRowConflicts(lockedRows, createdIDsToCheck)...) + conflictIDs = sortedUniqueIDs(conflictIDs) if len(conflictIDs) > 0 { return ErrRollbackConflict } @@ -274,6 +301,106 @@ func sortedUniqueIDs(ids []int64) []int64 { return unique } +func lockCandidateRowsForRollbackTx( + ctx context.Context, + tx *gormpkg.DB, + ids []int64, +) (map[int64]*models.CrystallizationCandidate, error) { + ids = sortedUniqueIDs(ids) + locked := make(map[int64]*models.CrystallizationCandidate, len(ids)) + if len(ids) == 0 { + return locked, nil + } + + var rows []struct { + ID int64 + } + if err := tx.WithContext(ctx). + Table("crystallization_candidates"). + Select("id"). + Where("id IN ?", ids). + Order("id ASC"). + Clauses(clause.Locking{Strength: "UPDATE"}). + Find(&rows).Error; err != nil { + return nil, err + } + + found := make(map[int64]struct{}, len(rows)) + for _, row := range rows { + found[row.ID] = struct{}{} + } + txCandidateStore := gormdb.NewCandidateStore(tx, nil) + for _, id := range ids { + if _, ok := found[id]; !ok { + continue + } + candidate, err := txCandidateStore.Get(ctx, id) + if err != nil { + return nil, fmt.Errorf("read locked candidate %d: %w", id, err) + } + locked[id] = candidate + } + return locked, nil +} + +func detectCandidateConflicts( + currentByID map[int64]*models.CrystallizationCandidate, + entries map[int64]models.SnapshotEntry, +) ([]int64, error) { + ids := make([]int64, 0, len(entries)) + for id := range entries { + ids = append(ids, id) + } + ids = sortedUniqueIDs(ids) + + var conflicts []int64 + for _, id := range ids { + current, exists := currentByID[id] + if !exists { + conflicts = append(conflicts, id) + continue + } + matches, err := matchesExpectedCandidateState(entries[id], current) + if err != nil { + return nil, fmt.Errorf("candidate %d: %w", id, err) + } + if !matches { + conflicts = append(conflicts, id) + } + } + return conflicts, nil +} + +func matchesExpectedCandidateState(entry models.SnapshotEntry, current *models.CrystallizationCandidate) (bool, error) { + if current == nil || len(entry.After) == 0 || string(entry.After) == "null" { + return false, nil + } + + var expected models.CrystallizationCandidate + if err := json.Unmarshal(entry.After, &expected); err != nil { + return false, fmt.Errorf("unmarshal expected candidate after-state: %w", err) + } + expected = normalizedCandidateState(expected) + currentNormalized := normalizedCandidateState(*current) + return reflect.DeepEqual(expected, currentNormalized), nil +} + +func normalizedCandidateState(candidate models.CrystallizationCandidate) models.CrystallizationCandidate { + candidate.CreatedAt = candidate.CreatedAt.UTC() + candidate.UpdatedAt = candidate.UpdatedAt.UTC() + if candidate.ReviewAfter != nil { + reviewAfter := candidate.ReviewAfter.UTC() + candidate.ReviewAfter = &reviewAfter + } + if len(candidate.EvidenceHandles) == 0 { + candidate.EvidenceHandles = nil + } + if len(candidate.AffectedProjects) == 0 { + candidate.AffectedProjects = nil + } + return candidate +} + // detectConflicts returns the IDs of memories modified after snapshotTime. // A memory's updated_at > snapshotTime indicates a post-snapshot modification (EC-F3). func detectConflicts( diff --git a/internal/bulkops/rollback_test.go b/internal/bulkops/rollback_test.go index 6706c7f6..301d63cb 100644 --- a/internal/bulkops/rollback_test.go +++ b/internal/bulkops/rollback_test.go @@ -596,6 +596,21 @@ func TestRollback_CandidateReviewPromoteDeletesMemoryAndRestoresPending(t *testi require.Equal(t, models.CandidateStatusPromoted, updatedCandidate.Status) require.NotNil(t, updatedCandidate.PromotedMemoryID) require.Equal(t, createdMemory.ID, *updatedCandidate.PromotedMemoryID) + candidateAfter, err := json.Marshal(updatedCandidate) + require.NoError(t, err) + beforeState, err = json.Marshal(map[string]models.SnapshotEntry{ + fmt.Sprintf("candidate:%d", candidate.ID): { + Kind: models.EntryKindRestore, + Before: candidateBefore, + After: candidateAfter, + }, + }) + require.NoError(t, err) + require.NoError(t, db.Exec( + "UPDATE bulk_op_snapshots SET before_state = CAST(? AS jsonb) WHERE snapshot_id = ?", + string(beforeState), + createdSnap.SnapshotID, + ).Error) require.NoError(t, snapStore.AmendPromoteEntries(ctx, createdSnap.SnapshotID, []int64{createdMemory.ID})) assert.True(t, createdMemory.CreatedAt.After(createdSnap.CreatedAt), "fixture must create promoted memory after snapshot") assert.True(t, createdMemory.UpdatedAt.After(createdSnap.CreatedAt), "fixture must create promoted memory updated timestamp after snapshot") @@ -681,6 +696,21 @@ func TestRollback_CandidateReviewPromoteEditedMemoryConflicts(t *testing.T) { require.Equal(t, models.CandidateStatusPromoted, updatedCandidate.Status) require.NotNil(t, updatedCandidate.PromotedMemoryID) require.Equal(t, createdMemory.ID, *updatedCandidate.PromotedMemoryID) + candidateAfter, err := json.Marshal(updatedCandidate) + require.NoError(t, err) + beforeState, err = json.Marshal(map[string]models.SnapshotEntry{ + fmt.Sprintf("candidate:%d", candidate.ID): { + Kind: models.EntryKindRestore, + Before: candidateBefore, + After: candidateAfter, + }, + }) + require.NoError(t, err) + require.NoError(t, db.Exec( + "UPDATE bulk_op_snapshots SET before_state = CAST(? AS jsonb) WHERE snapshot_id = ?", + string(beforeState), + createdSnap.SnapshotID, + ).Error) require.NoError(t, snapStore.AmendPromoteEntries(ctx, createdSnap.SnapshotID, []int64{createdMemory.ID})) editedAt := createdMemory.CreatedAt.Add(2 * time.Second) diff --git a/pkg/models/snapshot.go b/pkg/models/snapshot.go index a818a5a0..5ed36e3f 100644 --- a/pkg/models/snapshot.go +++ b/pkg/models/snapshot.go @@ -102,7 +102,7 @@ type BulkOpSnapshot struct { // // "": {"kind": "restore", "before": } // "memory:": {"kind": "delete"} -// "candidate:": {"kind": "restore", "before": } +// "candidate:": {"kind": "restore", "before": , "after": } type SnapshotEntryKind string const ( @@ -115,6 +115,7 @@ const ( type SnapshotEntry struct { Kind SnapshotEntryKind `json:"kind"` Before json.RawMessage `json:"before,omitempty"` // populated only for EntryKindRestore + After json.RawMessage `json:"after,omitempty"` // expected operation-owned post-state for conflict detection } // NewBulkOpSnapshot constructs a BulkOpSnapshot with validation. From 68b2ce5835c7c6efdf1c68da9eedcb8d9c3837ef Mon Sep 17 00:00:00 2001 From: Kirill Turanskiy Date: Fri, 10 Jul 2026 09:52:53 +0300 Subject: [PATCH 011/111] Fix DB bulkops sibling-path acceptance gaps --- ...6-07-10-db-bulkops-sibling-rework-maker.md | 208 +++++++++++++++ .../DB-BULKOPS-SIBLING-REWORK.final.json | 98 +++++++ .../DB-BULKOPS-SIBLING-REWORK.tdd.json | 103 ++++++++ .../H1-candidate-review-after.red.json | 21 ++ .../M1-nil-facade-normalization.red.json | 10 + .../M2-all-row-failure-audit.red.json | 15 ++ internal/bulkops/facade.go | 21 +- internal/bulkops/facade_test.go | 52 ++++ internal/bulkops/rollback_test.go | 243 ++++++++++++++++++ internal/db/gorm/candidate_store.go | 66 +++++ internal/db/gorm/candidate_store_test.go | 9 +- internal/mcp/tools_bulkops.go | 24 +- internal/mcp/tools_dryrun_test.go | 5 +- 13 files changed, 851 insertions(+), 24 deletions(-) create mode 100644 .agent/reports/2026-07-10-db-bulkops-sibling-rework-maker.md create mode 100644 .agent/reports/evidence/production-ready/db-bulkops-sibling-rework/DB-BULKOPS-SIBLING-REWORK.final.json create mode 100644 .agent/reports/evidence/production-ready/db-bulkops-sibling-rework/DB-BULKOPS-SIBLING-REWORK.tdd.json create mode 100644 .agent/reports/evidence/production-ready/db-bulkops-sibling-rework/H1-candidate-review-after.red.json create mode 100644 .agent/reports/evidence/production-ready/db-bulkops-sibling-rework/M1-nil-facade-normalization.red.json create mode 100644 .agent/reports/evidence/production-ready/db-bulkops-sibling-rework/M2-all-row-failure-audit.red.json diff --git a/.agent/reports/2026-07-10-db-bulkops-sibling-rework-maker.md b/.agent/reports/2026-07-10-db-bulkops-sibling-rework-maker.md new file mode 100644 index 00000000..a3e6ce10 --- /dev/null +++ b/.agent/reports/2026-07-10-db-bulkops-sibling-rework-maker.md @@ -0,0 +1,208 @@ +# DB-BULKOPS Sibling-Path Rework — Maker Report + +## Outcome + +All three findings in the independent acceptance check are closed in the bounded +rework: live candidate-review snapshots now persist exact candidate `After` state, +nil-facade MCP dry-run uses the same ID normalization as execution, and an all-row +promotion failure emits an explicit failure audit instead of a success-shaped one. + +Status: **READY FOR AN INDEPENDENT CHECKER AND POST-RUN CODE REVIEW**. + +This is maker evidence only. The exact commit containing this report is supplied in +the handoff because a commit cannot embed its own final SHA. No push, integration, +role/oracle update, plan mutation, or release action was performed. + +## Scope and live-path classification + +- Worktree: `D:\Dev\engram\.agent\worktrees\prc-db-bulkops` +- Branch: `work/prc-db-bulkops` +- Rework base: `6ea10496aa127fba7fdb194875044e770d0a1d8c` +- Product paths changed: + - `internal/db/gorm/candidate_store.go` + - `internal/bulkops/facade.go` + - `internal/mcp/tools_bulkops.go` +- Regression paths changed: + - `internal/bulkops/facade_test.go` + - `internal/bulkops/rollback_test.go` + - `internal/db/gorm/candidate_store_test.go` + - `internal/mcp/tools_dryrun_test.go` +- Evidence is confined to + `.agent/reports/evidence/production-ready/db-bulkops-sibling-rework/`. + +H1 is live: public MCP/HTTP candidate-review handlers call +`NewCandidateReviewActionSnapshot` and the exported atomic `*WithSnapshot` store +methods under the live `ENGRAM_VNEXT_F_ENABLED` surface. M1 is live through +`server.callTool -> handleBulkPromote`; the nil-facade seam is explicitly supported. +M2 is live through facade execution and its operator-facing audit stream. None is a +v5-demolition tombstone, an unset-only dormant scaffold, or a removed HTTP MCP path. + +## H1 — exact candidate After state on every live review action + +`promoteWithMemoryAndSnapshotAction` and `transitionWithSnapshot` now call one +transactional helper after the authoritative locked mutation and database re-read. +The helper locks the snapshot row, requires a `candidate_review_action` snapshot, +requires its exact `candidate:` restore entry, marshals the authoritative +candidate into `SnapshotEntry.After`, and updates the JSONB snapshot in the same +transaction before audit and commit. A missing or malformed entry is an error, so the +candidate mutation cannot commit without its rollback comparator state. + +The historical rule remains unchanged: genuinely old candidate entries without +`After` still fail closed during rollback. + +Permanent public-path regressions cover: + +- promote and preserve, including promoted-memory deletion during rollback; +- reject, supersede, and suppress; +- exact equality between persisted `After` and the authoritative candidate returned + by the store; +- rollback to pending without any fixture-side snapshot SQL amendment. + +The pre-existing candidate-store tests had a before-only hand-built snapshot fixture. +The full-package run correctly exposed that stale test setup after the production +contract became strict. The helper now uses the real public +`reviewpacket.NewCandidateReviewActionSnapshot` constructor; all four affected store +tests pass, including the forced audit-failure rollback case. No production validation +was weakened. + +## M1 — one normalization contract across MCP and facade + +The facade's sorted, unique, non-zero normalization is exposed inside the package as +`NormalizeCandidateIDs`. `handleBulkPromote` applies it immediately after coercion, +before both the supported nil-facade preview branch and the wired facade branch. + +`TestBulkPromote_DryRun_NilFacade` now sends `[2,0,1,2,1,0]` and requires +`would_affect=2`, pinning the exact sibling-path contract. + +## M2 — explicit zero-success audit semantics + +When execution has `AffectedCount=0` and row errors, the facade now writes +`action=bulk_promote_failed` with attempted, affected, and failed counts. It still +creates no rollback snapshot. Successful and partial-success operations retain the +existing `action=bulk_promote` summary. + +`TestFacade_BulkPromote_AllRowsFailWritesExplicitFailureAudit` uses one rejected and +one missing candidate and proves zero affected rows, no snapshot, no success-shaped +audit, and exactly one explicit failure audit. + +## TDD and prove-it evidence + +Durable evidence: + +- `H1-candidate-review-after.red.json` +- `M1-nil-facade-normalization.red.json` +- `M2-all-row-failure-audit.red.json` +- `DB-BULKOPS-SIBLING-REWORK.tdd.json` +- `DB-BULKOPS-SIBLING-REWORK.final.json` + +Valid RED runs reproduced each checker finding before production edits. The first H1 +attempt was discarded because the new test lacked an import and did not compile; it +is not presented as behavioral RED. One later fixture run was also discarded after a +PowerShell interpolation mistake produced an invalid DSN; the exact test database was +dropped and the corrected run passed. + +Six temporary prove-it sentinels independently broke the two candidate-store mutation +paths, the snapshot amendment helper, the shared ID normalizer, the MCP handler, and +the facade audit path. In every case the permanent regression failed, and after an +exact restore from the interim commit the same test passed. + +High-risk repeat: + +```text +go test -p=1 ./internal/bulkops ./internal/mcp \ + -run '^(TestRollback_PublicCandidateReview(PromotePersistsAfterAndRestoresPending|PreservePersistsAfterAndRestoresPending|NonMemoryActionsPersistAfterAndRestorePending)|TestFacade_BulkPromote_AllRowsFailWritesExplicitFailureAudit|TestBulkPromote_DryRun_NilFacade)$' \ + -count=20 +PASS — 7 scenarios x 20 = 140 executions +bulkops 27.940s; mcp 0.095s +``` + +## Final scoped verification + +Fresh PostgreSQL 17 database +`engram_prc_bulkops_sibling_scoped_20260710_101019337`: + +```text +go test -p=1 ./internal/bulkops -count=1 -coverprofile .../bulkops.cover.out +PASS — 8.527s — 78.1% statements + +go test -p=1 ./internal/db/gorm -run '' -count=1 +PASS — 0.810s + +go test -p=1 ./internal/mcp -run '' -count=1 +PASS — 0.160s + +go test -p=1 ./internal/reviewpacket ./pkg/models -count=1 +PASS +``` + +Fresh race database `engram_prc_bulkops_sibling_race_20260710_101104510`: + +```text +go test -race -p=1 ./internal/bulkops -count=1 +PASS — 10.915s + +go test -race -p=1 ./internal/db/gorm -run '' -count=1 +PASS — 2.037s + +go test -race -p=1 ./internal/mcp -run '' -count=1 +PASS — 1.087s +``` + +Additional gates: + +```text +go vet ./internal/bulkops ./internal/db/gorm ./internal/mcp ./internal/reviewpacket ./pkg/models +PASS + +Serena diagnostics on all seven changed Go files +PASS — no warnings or errors + +git diff --check +PASS +``` + +Coverage remains an explicit WARN, not a fabricated pass: `internal/bulkops` is +78.1%, below the informational 80% threshold. The load-bearing functions measured +`NormalizeCandidateIDs` 100.0%, `executeBulkPromote` 86.2%, +`promoteWithMemoryAndSnapshotAction` 77.5%, `transitionWithSnapshot` 85.7%, +`amendCandidateReviewAfterTx` 66.7%, and `handleBulkPromote` 52.4% in their scoped +profiles. Each new contract also has direct behavior, repeat-20, race, and prove-it +evidence. + +## Full-package baseline, preserved rather than silently patched + +After the fixture correction, a fresh full `internal/db/gorm` run no longer reports +any candidate-review failure. It still fails six unrelated governance/migration tests: + +- `TestRuleGovernanceStore_AnnotatedCandidateWaitsUntilReviewAfter`; +- two lifecycle-health aggregate tests; +- three migration-144 rollback/reapply constraint tests. + +A fresh full `internal/mcp` run still fails the unrelated +`TestHybridTG3_ConfidenceMin_FloorEnforced_T022` JSON-shape test and +`TestEC_F1_TagDerivedBackfill_T007` compatibility test. These failures existed in the +pre-fix combined matrix, are outside this checker-bounded rework, and were not patched. +The full package commands therefore remain WARN/FAIL baseline; only the scoped gates +are claimed green. + +Fresh migrations also continue to log the known non-fatal stale pattern/relation +index warnings, absent `observation_vectors`, and unavailable `vectorscale` extension. + +## Database and worktree hygiene + +Every maker-owned RED, GREEN, fixture, repeat, scoped, race, full-gorm, full-MCP, and +prove-it database reached zero active sessions before exact-name drop. Final proof: + +```text +database count matching engram_prc_bulkops_sibling_%: 0 +active session count matching engram_prc_bulkops_sibling_%: 0 +``` + +The branch contains one commit over the required base after final amendment. No push +or integration was performed. + +## Maker disposition + +H1, M1, and M2 are closed by implementation and permanent evidence. The required next +gate is an independent acceptance checker against the exact handoff commit, followed +by separate post-run code review and the integrated production-readiness gates. diff --git a/.agent/reports/evidence/production-ready/db-bulkops-sibling-rework/DB-BULKOPS-SIBLING-REWORK.final.json b/.agent/reports/evidence/production-ready/db-bulkops-sibling-rework/DB-BULKOPS-SIBLING-REWORK.final.json new file mode 100644 index 00000000..4f711a68 --- /dev/null +++ b/.agent/reports/evidence/production-ready/db-bulkops-sibling-rework/DB-BULKOPS-SIBLING-REWORK.final.json @@ -0,0 +1,98 @@ +{ + "task_id": "DB-BULKOPS-SIBLING-REWORK", + "observed_at": "2026-07-10T07:19:54.2639416Z", + "status": "READY_FOR_INDEPENDENT_CHECK", + "base_commit": "6ea10496aa127fba7fdb194875044e770d0a1d8c", + "verification": [ + { + "gate": "high-risk repeat", + "database": "engram_prc_bulkops_sibling_repeat20_20260710_100246118", + "result": "PASS", + "detail": "7 scenarios x 20 = 140 executions" + }, + { + "gate": "candidate-store fixture compatibility", + "database": "engram_prc_bulkops_sibling_fixture_20260710_100935627", + "result": "PASS", + "detail": "4/4 candidate-review store tests, including audit-failure rollback" + }, + { + "gate": "scoped package tests and coverage", + "database": "engram_prc_bulkops_sibling_scoped_20260710_101019337", + "result": "PASS", + "packages": { + "internal/bulkops": "PASS, 78.1% statements", + "internal/db/gorm focused": "PASS, 5.4% package statements", + "internal/mcp focused": "PASS, 2.1% package statements", + "internal/reviewpacket": "PASS", + "pkg/models": "PASS" + } + }, + { + "gate": "race", + "database": "engram_prc_bulkops_sibling_race_20260710_101104510", + "result": "PASS", + "packages": [ + "internal/bulkops full", + "internal/db/gorm focused candidate-review paths", + "internal/mcp focused bulk-promote paths" + ] + }, + { + "gate": "go vet", + "result": "PASS", + "command": "go vet ./internal/bulkops ./internal/db/gorm ./internal/mcp ./internal/reviewpacket ./pkg/models" + }, + { + "gate": "Serena diagnostics", + "result": "PASS", + "detail": "no warnings or errors in all seven changed Go files" + }, + { + "gate": "database hygiene", + "result": "PASS", + "detail": "databases and active sessions matching engram_prc_bulkops_sibling_% both equal zero" + } + ], + "coverage": { + "package_internal_bulkops": "78.1% WARN below informational 80% threshold", + "NormalizeCandidateIDs": "100.0%", + "executeBulkPromote": "86.2%", + "promoteWithMemoryAndSnapshotAction": "77.5% in focused gorm profile", + "transitionWithSnapshot": "85.7% in focused gorm profile", + "amendCandidateReviewAfterTx": "66.7% in focused gorm profile", + "handleBulkPromote": "52.4% in focused MCP profile" + }, + "full_package_baseline": { + "internal/db/gorm": { + "database": "engram_prc_bulkops_sibling_fullgorm_20260710_101402648", + "result": "FAIL_OUTSIDE_REWORK_SCOPE", + "failures": [ + "TestRuleGovernanceStore_AnnotatedCandidateWaitsUntilReviewAfter", + "TestRuleGovernanceStore_GetLifecycleHealthAggregatesGovernanceTables", + "TestRuleGovernanceStore_GetLifecycleHealthOmitsGlobalArbiterRunsForProjectScopedReads", + "TestMigration144_RuleGovernanceRollbackAndReapply", + "TestMigration144_RuleGovernanceEscapeConstraints", + "TestMigration144_RuleGovernanceSnapshotStatusesAcceptExtendedStates" + ], + "rework_note": "The candidate-review store tests that failed before the fixture correction are absent from this failure list." + }, + "internal/mcp": { + "database": "engram_prc_bulkops_sibling_fullmcp_20260710_101520646", + "result": "FAIL_OUTSIDE_REWORK_SCOPE", + "failures": [ + "TestHybridTG3_ConfidenceMin_FloorEnforced_T022", + "TestEC_F1_TagDerivedBackfill_T007" + ] + }, + "database_cleanup": { + "sessions_before_drop": 0, + "residue_after_drop": 0 + } + }, + "warnings": [ + "Package-level internal/bulkops coverage is 78.1%, below the informational 80% threshold.", + "Existing candidate-review audit writes remain transaction-fatal, while the bulk facade post-transaction summary audit remains best-effort by prior design; this rework changes only zero-success action semantics.", + "Fresh migrations continue to log non-fatal stale-index, absent observation_vectors, and unavailable vectorscale warnings." + ] +} diff --git a/.agent/reports/evidence/production-ready/db-bulkops-sibling-rework/DB-BULKOPS-SIBLING-REWORK.tdd.json b/.agent/reports/evidence/production-ready/db-bulkops-sibling-rework/DB-BULKOPS-SIBLING-REWORK.tdd.json new file mode 100644 index 00000000..c632bd71 --- /dev/null +++ b/.agent/reports/evidence/production-ready/db-bulkops-sibling-rework/DB-BULKOPS-SIBLING-REWORK.tdd.json @@ -0,0 +1,103 @@ +{ + "task_id": "DB-BULKOPS-SIBLING-REWORK", + "stack": "GO", + "base_commit": "6ea10496aa127fba7fdb194875044e770d0a1d8c", + "findings": [ + "H1 candidate_review_action snapshots omitted the exact candidate After state", + "M1 nil-facade MCP dry-run did not share facade ID normalization", + "M2 all-row bulk-promote failure wrote a success-shaped bulk_promote audit" + ], + "red_evidence": [ + { + "finding": "H1", + "artifact": "H1-candidate-review-after.red.json", + "result": "RED", + "observed": "promote, preserve, reject, supersede, and suppress all persisted empty candidate SnapshotEntry.After values" + }, + { + "finding": "M1", + "artifact": "M1-nil-facade-normalization.red.json", + "result": "RED", + "observed": "nil-facade preview returned 4 instead of 2 for duplicate IDs after zero coercion" + }, + { + "finding": "M2", + "artifact": "M2-all-row-failure-audit.red.json", + "result": "RED", + "observed": "zero-success execution wrote one action=bulk_promote audit row" + } + ], + "green_evidence": { + "H1": { + "database": "engram_prc_bulkops_sibling_green_20260710_095039575", + "result": "PASS", + "coverage": "real public snapshot constructor plus real promote, preserve, reject, supersede, and suppress store methods; persisted After exactly matched the authoritative returned candidate and rollback restored pending without fixture SQL amendment" + }, + "M1": { + "observed_at": "2026-07-10T06:49:01Z", + "result": "PASS", + "coverage": "nil-facade MCP duplicate and zero input normalized to two candidate IDs" + }, + "M2": { + "database": "engram_prc_bulkops_sibling_green_20260710_095039575", + "result": "PASS", + "coverage": "zero-success execution created no snapshot, no bulk_promote success audit, and one bulk_promote_failed audit with attempted, affected, and failed counts" + }, + "database_cleanup": { + "sessions_before_drop": 0, + "residue_after_drop": 0 + } + }, + "prove_it": [ + { + "sentinel": "panic in promoteWithMemoryAndSnapshotAction", + "permanent_test_failed": "public candidate-review promote regression", + "post_restore": "PASS" + }, + { + "sentinel": "panic in transitionWithSnapshot", + "permanent_test_failed": "public candidate-review reject regression", + "post_restore": "PASS" + }, + { + "sentinel": "panic in amendCandidateReviewAfterTx", + "permanent_test_failed": "public candidate-review promote regression", + "post_restore": "PASS" + }, + { + "sentinel": "panic in NormalizeCandidateIDs", + "permanent_test_failed": "nil-facade MCP dry-run regression", + "post_restore": "PASS" + }, + { + "sentinel": "panic in handleBulkPromote", + "permanent_test_failed": "nil-facade MCP dry-run regression", + "post_restore": "PASS" + }, + { + "sentinel": "panic in executeBulkPromote", + "permanent_test_failed": "all-row failure audit regression", + "post_restore": "PASS" + } + ], + "repeat": { + "database": "engram_prc_bulkops_sibling_repeat20_20260710_100246118", + "command": "go test -p=1 ./internal/bulkops ./internal/mcp -run '^(TestRollback_PublicCandidateReview(PromotePersistsAfterAndRestoresPending|PreservePersistsAfterAndRestoresPending|NonMemoryActionsPersistAfterAndRestorePending)|TestFacade_BulkPromote_AllRowsFailWritesExplicitFailureAudit|TestBulkPromote_DryRun_NilFacade)$' -count=20", + "result": "PASS", + "scenario_executions": 140, + "bulkops_duration": "27.940s", + "mcp_duration": "0.095s", + "database_cleanup": { + "sessions_before_drop": 0, + "residue_after_drop": 0 + } + }, + "refactor": { + "applied": false, + "reason": "The minimum production change already centralizes normalization and snapshot amendment; further extraction would expand the checker-bounded rework without improving the verified contract." + }, + "discarded_harness_runs": [ + "The first H1 RED attempt was discarded because the new test did not compile until its auth import was added; only the subsequent behavior failure is recorded as RED.", + "One post-fix fixture run was discarded because PowerShell parsed $db?sslmode as a variable name and produced database '=disable'; the exact test database was still dropped with zero residue, and the corrected ${db} DSN run passed." + ] +} diff --git a/.agent/reports/evidence/production-ready/db-bulkops-sibling-rework/H1-candidate-review-after.red.json b/.agent/reports/evidence/production-ready/db-bulkops-sibling-rework/H1-candidate-review-after.red.json new file mode 100644 index 00000000..8befb5ee --- /dev/null +++ b/.agent/reports/evidence/production-ready/db-bulkops-sibling-rework/H1-candidate-review-after.red.json @@ -0,0 +1,21 @@ +{ + "task_id": "DB-BULKOPS-SIBLING-H1", + "stack": "GO", + "observed_at": "2026-07-10T06:44:57Z", + "database": "engram_prc_bulkops_sibling_h1_red_20260710_094450099", + "test_file": "internal/bulkops/rollback_test.go", + "test_names": [ + "TestRollback_PublicCandidateReviewPromotePersistsAfterAndRestoresPending", + "TestRollback_PublicCandidateReviewPreservePersistsAfterAndRestoresPending", + "TestRollback_PublicCandidateReviewNonMemoryActionsPersistAfterAndRestorePending/reject", + "TestRollback_PublicCandidateReviewNonMemoryActionsPersistAfterAndRestorePending/supersede", + "TestRollback_PublicCandidateReviewNonMemoryActionsPersistAfterAndRestorePending/suppress" + ], + "command": "go test ./internal/bulkops -run '^TestRollback_PublicCandidateReview(PromotePersistsAfterAndRestoresPending|PreservePersistsAfterAndRestoresPending|NonMemoryActionsPersistAfterAndRestorePending)$' -count=1", + "failure_reason": "All five live candidate_review_action paths persisted an empty SnapshotEntry.After.", + "runner_stdout_excerpt": "Should NOT be empty, but was []; live candidate_review_action must persist its authoritative after-state; TEST_EXIT=1", + "database_cleanup": { + "sessions_before_drop": 0, + "residue_after_drop": 0 + } +} diff --git a/.agent/reports/evidence/production-ready/db-bulkops-sibling-rework/M1-nil-facade-normalization.red.json b/.agent/reports/evidence/production-ready/db-bulkops-sibling-rework/M1-nil-facade-normalization.red.json new file mode 100644 index 00000000..51afb232 --- /dev/null +++ b/.agent/reports/evidence/production-ready/db-bulkops-sibling-rework/M1-nil-facade-normalization.red.json @@ -0,0 +1,10 @@ +{ + "task_id": "DB-BULKOPS-SIBLING-M1", + "stack": "GO", + "observed_at": "2026-07-10T06:46:33.4325051Z", + "test_file": "internal/mcp/tools_dryrun_test.go", + "test_name": "TestBulkPromote_DryRun_NilFacade", + "command": "go test ./internal/mcp -run '^TestBulkPromote_DryRun_NilFacade$' -count=1", + "failure_reason": "The nil-facade MCP seam removed zero IDs but retained duplicates, returning 4 instead of the facade-normalized 2.", + "runner_stdout_excerpt": "expected: 2; actual: 4; TEST_EXIT=1" +} diff --git a/.agent/reports/evidence/production-ready/db-bulkops-sibling-rework/M2-all-row-failure-audit.red.json b/.agent/reports/evidence/production-ready/db-bulkops-sibling-rework/M2-all-row-failure-audit.red.json new file mode 100644 index 00000000..a965306e --- /dev/null +++ b/.agent/reports/evidence/production-ready/db-bulkops-sibling-rework/M2-all-row-failure-audit.red.json @@ -0,0 +1,15 @@ +{ + "task_id": "DB-BULKOPS-SIBLING-M2", + "stack": "GO", + "observed_at": "2026-07-10T06:45:33Z", + "database": "engram_prc_bulkops_sibling_m2_red_20260710_094528088", + "test_file": "internal/bulkops/facade_test.go", + "test_name": "TestFacade_BulkPromote_AllRowsFailWritesExplicitFailureAudit", + "command": "go test ./internal/bulkops -run '^TestFacade_BulkPromote_AllRowsFailWritesExplicitFailureAudit$' -count=1", + "failure_reason": "A zero-success execution wrote one action=bulk_promote success-shaped audit row.", + "runner_stdout_excerpt": "Should be zero, but was 1; all-row failure must not emit a success-shaped bulk_promote audit; TEST_EXIT=1", + "database_cleanup": { + "sessions_before_drop": 0, + "residue_after_drop": 0 + } +} diff --git a/internal/bulkops/facade.go b/internal/bulkops/facade.go index 6c1718ae..d9bdc07a 100644 --- a/internal/bulkops/facade.go +++ b/internal/bulkops/facade.go @@ -65,6 +65,12 @@ type ExecuteResult struct { Errors []string `json:"errors,omitempty"` } +// NormalizeCandidateIDs applies the candidate-ID contract shared by facade +// execution and public dry-run adapters: remove zeroes, de-duplicate, and sort. +func NormalizeCandidateIDs(ids []int64) []int64 { + return sortedUniqueIDs(ids) +} + // Facade provides admin-only bulk operations with snapshot capture. type Facade struct { snapshotStore *gormdb.SnapshotStore @@ -129,7 +135,7 @@ func (f *Facade) Execute(ctx context.Context, identity auth.Identity, op BulkOp) // --- bulk_promote --- func (f *Facade) executeBulkPromote(ctx context.Context, identity auth.Identity, op BulkOp) (*ExecuteResult, error) { - ids := sortedUniqueIDs(op.CandidateIDs) + ids := NormalizeCandidateIDs(op.CandidateIDs) if op.DryRun { return &ExecuteResult{ @@ -290,11 +296,20 @@ func (f *Facade) executeBulkPromote(ctx context.Context, identity auth.Identity, for _, entry := range promotionAudits { _ = f.auditStore.Log(ctx, entry) } - _ = f.auditStore.Log(ctx, gormdb.AuditLogEntry{ + bulkAudit := gormdb.AuditLogEntry{ Action: "bulk_promote", Actor: actor, Reason: fmt.Sprintf("bulk_promote snapshot=%s affected=%d", result.SnapshotID, result.AffectedCount), - }) + } + if result.AffectedCount == 0 && len(result.Errors) > 0 { + bulkAudit.Action = "bulk_promote_failed" + bulkAudit.Reason = fmt.Sprintf( + "bulk_promote attempted=%d affected=0 failed=%d", + len(ids), + len(result.Errors), + ) + } + _ = f.auditStore.Log(ctx, bulkAudit) } return result, nil diff --git a/internal/bulkops/facade_test.go b/internal/bulkops/facade_test.go index 734727ed..24780a25 100644 --- a/internal/bulkops/facade_test.go +++ b/internal/bulkops/facade_test.go @@ -1021,3 +1021,55 @@ func TestFacade_BulkPromote_CandidateInsertedAfterLockedCaptureIsNotPromoted(t * require.Equal(t, models.CandidateStatusPending, lateCandidate.Status) require.Nil(t, lateCandidate.PromotedMemoryID) } + +func TestFacade_BulkPromote_AllRowsFailWritesExplicitFailureAudit(t *testing.T) { + db, store := openTestDB(t) + ctx := context.Background() + memStore := gormdb.NewMemoryStore(store) + snapshotStore := gormdb.NewSnapshotStore(db) + auditStore := gormdb.NewAuditStore(db) + candidateStore := gormdb.NewCandidateStore(db, nil) + facade := NewFacade(snapshotStore, candidateStore, memStore, auditStore) + suffix := fmt.Sprintf("all-fail-audit-%d", time.Now().UnixNano()) + actor := "agent/" + suffix + candidate := createBulkPromoteCandidate(t, candidateStore, suffix) + rejected, err := candidateStore.TransitionToRejected(ctx, candidate.ID, "fixture rejects promotion") + require.NoError(t, err) + require.Equal(t, models.CandidateStatusRejected, rejected.Status) + missingID := candidate.ID + 1_000_000_000 + + t.Cleanup(func() { + _ = db.Exec("DELETE FROM audit_log WHERE actor = ?", actor).Error + _ = db.Exec("DELETE FROM crystallization_candidates WHERE id = ?", candidate.ID).Error + _ = db.Unscoped().Exec("DELETE FROM memories WHERE project = ?", "bulk-promote-"+suffix).Error + }) + + result, err := facade.Execute(ctx, auth.Identity{ + Role: auth.RoleAdmin, + Source: auth.SourceMaster, + KeycardID: actor, + }, BulkOp{ + Type: models.SnapshotOpBulkPromote, + CandidateIDs: []int64{candidate.ID, missingID}, + }) + require.NoError(t, err) + require.NotNil(t, result) + require.Zero(t, result.AffectedCount) + require.Empty(t, result.SnapshotID) + require.Len(t, result.Errors, 2) + + var successAuditCount int64 + require.NoError(t, db.Table("audit_log"). + Where("action = ? AND actor = ?", "bulk_promote", actor). + Count(&successAuditCount).Error) + require.Zero(t, successAuditCount, "all-row failure must not emit a success-shaped bulk_promote audit") + + var failureAudits []gormdb.AuditLogEntry + require.NoError(t, db.Table("audit_log"). + Where("action = ? AND actor = ?", "bulk_promote_failed", actor). + Find(&failureAudits).Error) + require.Len(t, failureAudits, 1, "all-row failure must emit one explicit failed outcome") + require.Contains(t, failureAudits[0].Reason, "attempted=2") + require.Contains(t, failureAudits[0].Reason, "affected=0") + require.Contains(t, failureAudits[0].Reason, "failed=2") +} diff --git a/internal/bulkops/rollback_test.go b/internal/bulkops/rollback_test.go index 301d63cb..b572f78d 100644 --- a/internal/bulkops/rollback_test.go +++ b/internal/bulkops/rollback_test.go @@ -21,7 +21,9 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" + "github.com/thebtf/engram/internal/auth" gormdb "github.com/thebtf/engram/internal/db/gorm" + "github.com/thebtf/engram/internal/reviewpacket" "github.com/thebtf/engram/pkg/models" "gorm.io/gorm" ) @@ -740,3 +742,244 @@ func TestRollback_CandidateReviewPromoteEditedMemoryConflicts(t *testing.T) { require.NoError(t, err) assert.Equal(t, models.SnapshotStatusCommitted, stillCommitted.Status) } + +func createPublicCandidateReviewRollbackCandidate( + t *testing.T, + candidateStore *gormdb.CandidateStore, + suffix string, + project string, +) *models.CrystallizationCandidate { + t.Helper() + candidate, err := candidateStore.Create(context.Background(), &models.CrystallizationCandidate{ + SourceSessionID: "public-candidate-review-" + suffix, + ProposedContent: "public candidate review " + suffix, + ProposedTier: "semantic", + ProposedEpistemicType: "decision", + ProposedPromotionTarget: "semantic", + EvidenceHandles: []string{"session:public-candidate-review-" + suffix}, + PrivacyScope: "project", + Status: models.CandidateStatusPending, + Fingerprint: fmt.Sprintf("public-candidate-review-%s-%d", suffix, time.Now().UnixNano()), + AffectedProjects: []string{project}, + Confidence: 0.9, + RecurrenceCount: 2, + }) + require.NoError(t, err) + return candidate +} + +func publicCandidateReviewMemory(candidate *models.CrystallizationCandidate, project string) *models.Memory { + return &models.Memory{ + Content: candidate.ProposedContent, + Project: project, + Tier: candidate.ProposedTier, + EpistemicType: candidate.ProposedEpistemicType, + Tags: []string{fmt.Sprintf("candidate:%d", candidate.ID), "crystallized"}, + SourceAgent: "crystallization", + } +} + +func requirePersistedCandidateReviewAfter( + t *testing.T, + ctx context.Context, + snapshotStore *gormdb.SnapshotStore, + snapshotID string, + want *models.CrystallizationCandidate, +) { + t.Helper() + persisted, err := snapshotStore.Get(ctx, snapshotID) + require.NoError(t, err) + var entries map[string]models.SnapshotEntry + require.NoError(t, json.Unmarshal(persisted.BeforeState, &entries)) + entry, ok := entries[fmt.Sprintf("candidate:%d", want.ID)] + require.True(t, ok, "candidate restore entry must be persisted") + require.NotEmpty(t, entry.After, "live candidate_review_action must persist its authoritative after-state") + wantJSON, err := json.Marshal(want) + require.NoError(t, err) + require.JSONEq(t, string(wantJSON), string(entry.After), + "SnapshotEntry.After must exactly match the authoritative post-mutation candidate") +} + +func cleanupPublicCandidateReviewRollback( + t *testing.T, + db *gorm.DB, + candidate *models.CrystallizationCandidate, + project string, + actor string, +) { + t.Helper() + t.Cleanup(func() { + _ = db.Exec("DELETE FROM audit_log WHERE actor = ? OR source_session_id = ?", actor, candidate.SourceSessionID).Error + _ = db.Exec("DELETE FROM bulk_op_snapshots WHERE source_session_id = ?", candidate.SourceSessionID).Error + _ = db.Exec("DELETE FROM crystallization_candidates WHERE id = ?", candidate.ID).Error + _ = db.Unscoped().Exec("DELETE FROM memories WHERE project = ?", project).Error + }) +} + +func TestRollback_PublicCandidateReviewPromotePersistsAfterAndRestoresPending(t *testing.T) { + db, store := openRollbackTestDB(t) + memStore := gormdb.NewMemoryStore(store) + snapshotStore := gormdb.NewSnapshotStore(db) + auditStore := gormdb.NewAuditStore(db) + candidateStore := gormdb.NewCandidateStore(db, auditStore) + ctx := context.Background() + suffix := fmt.Sprintf("promote-%d", time.Now().UnixNano()) + project := "candidate-review-" + suffix + actor := "agent/" + suffix + candidate := createPublicCandidateReviewRollbackCandidate(t, candidateStore, suffix, project) + cleanupPublicCandidateReviewRollback(t, db, candidate, project, actor) + + snapshot, err := reviewpacket.NewCandidateReviewActionSnapshot("promote", candidate, actor) + require.NoError(t, err) + updated, createdMemory, createdSnapshot, err := candidateStore.PromoteWithMemoryAndSnapshot( + ctx, + snapshotStore, + candidate.ID, + publicCandidateReviewMemory(candidate, project), + snapshot, + actor, + ) + require.NoError(t, err) + require.NotNil(t, createdSnapshot) + require.NotNil(t, createdMemory) + require.Equal(t, models.CandidateStatusPromoted, updated.Status) + requirePersistedCandidateReviewAfter(t, ctx, snapshotStore, createdSnapshot.SnapshotID, updated) + + result, err := Rollback( + ctx, + auth.Identity{Role: auth.RoleAdmin, Source: auth.SourceMaster, KeycardID: actor}, + createdSnapshot.SnapshotID, + snapshotStore, + memStore, + auditStore, + candidateStore, + ) + require.NoError(t, err) + require.Equal(t, 1, result.RestoredCount) + restored, err := candidateStore.Get(ctx, candidate.ID) + require.NoError(t, err) + require.Equal(t, models.CandidateStatusPending, restored.Status) + require.Nil(t, restored.PromotedMemoryID) + var memoryCount int64 + require.NoError(t, db.Unscoped().Model(&gormdb.Memory{}).Where("id = ?", createdMemory.ID).Count(&memoryCount).Error) + require.Zero(t, memoryCount) +} + +func TestRollback_PublicCandidateReviewPreservePersistsAfterAndRestoresPending(t *testing.T) { + db, store := openRollbackTestDB(t) + memStore := gormdb.NewMemoryStore(store) + snapshotStore := gormdb.NewSnapshotStore(db) + auditStore := gormdb.NewAuditStore(db) + candidateStore := gormdb.NewCandidateStore(db, auditStore) + ctx := context.Background() + suffix := fmt.Sprintf("preserve-%d", time.Now().UnixNano()) + project := "candidate-review-" + suffix + actor := "agent/" + suffix + candidate := createPublicCandidateReviewRollbackCandidate(t, candidateStore, suffix, project) + cleanupPublicCandidateReviewRollback(t, db, candidate, project, actor) + + snapshot, err := reviewpacket.NewCandidateReviewActionSnapshot(reviewpacket.ReviewActionPreserve, candidate, actor) + require.NoError(t, err) + updated, createdMemory, createdSnapshot, err := candidateStore.PreserveWithMemoryAndSnapshot( + ctx, + snapshotStore, + candidate.ID, + publicCandidateReviewMemory(candidate, project), + snapshot, + actor, + ) + require.NoError(t, err) + require.NotNil(t, createdSnapshot) + require.NotNil(t, createdMemory) + require.Equal(t, models.CandidateStatusPromoted, updated.Status) + requirePersistedCandidateReviewAfter(t, ctx, snapshotStore, createdSnapshot.SnapshotID, updated) + + result, err := Rollback( + ctx, + auth.Identity{Role: auth.RoleAdmin, Source: auth.SourceMaster, KeycardID: actor}, + createdSnapshot.SnapshotID, + snapshotStore, + memStore, + auditStore, + candidateStore, + ) + require.NoError(t, err) + require.Equal(t, 1, result.RestoredCount) + restored, err := candidateStore.Get(ctx, candidate.ID) + require.NoError(t, err) + require.Equal(t, models.CandidateStatusPending, restored.Status) + require.Nil(t, restored.PromotedMemoryID) +} + +func TestRollback_PublicCandidateReviewNonMemoryActionsPersistAfterAndRestorePending(t *testing.T) { + tests := []struct { + name string + action string + expectedStatus models.CandidateStatus + apply func(context.Context, *gormdb.CandidateStore, *gormdb.SnapshotStore, int64, *models.BulkOpSnapshot, string) (*models.CrystallizationCandidate, *models.BulkOpSnapshot, error) + }{ + { + name: "reject", + action: "reject", + expectedStatus: models.CandidateStatusRejected, + apply: func(ctx context.Context, store *gormdb.CandidateStore, snapshots *gormdb.SnapshotStore, id int64, snapshot *models.BulkOpSnapshot, actor string) (*models.CrystallizationCandidate, *models.BulkOpSnapshot, error) { + return store.TransitionToRejectedWithSnapshot(ctx, snapshots, id, "not durable enough", snapshot, actor) + }, + }, + { + name: "supersede", + action: "supersede", + expectedStatus: models.CandidateStatusSuperseded, + apply: func(ctx context.Context, store *gormdb.CandidateStore, snapshots *gormdb.SnapshotStore, id int64, snapshot *models.BulkOpSnapshot, actor string) (*models.CrystallizationCandidate, *models.BulkOpSnapshot, error) { + return store.TransitionToSupersededWithSnapshot(ctx, snapshots, id, snapshot, actor) + }, + }, + { + name: "suppress", + action: reviewpacket.ReviewActionSuppress, + expectedStatus: models.CandidateStatusRejected, + apply: func(ctx context.Context, store *gormdb.CandidateStore, snapshots *gormdb.SnapshotStore, id int64, snapshot *models.BulkOpSnapshot, actor string) (*models.CrystallizationCandidate, *models.BulkOpSnapshot, error) { + return store.TransitionToSuppressedWithSnapshot(ctx, snapshots, id, "suppress noise", snapshot, actor) + }, + }, + } + + for _, tc := range tests { + t.Run(tc.name, func(t *testing.T) { + db, store := openRollbackTestDB(t) + memStore := gormdb.NewMemoryStore(store) + snapshotStore := gormdb.NewSnapshotStore(db) + auditStore := gormdb.NewAuditStore(db) + candidateStore := gormdb.NewCandidateStore(db, auditStore) + ctx := context.Background() + suffix := fmt.Sprintf("%s-%d", tc.name, time.Now().UnixNano()) + project := "candidate-review-" + suffix + actor := "agent/" + suffix + candidate := createPublicCandidateReviewRollbackCandidate(t, candidateStore, suffix, project) + cleanupPublicCandidateReviewRollback(t, db, candidate, project, actor) + + snapshot, err := reviewpacket.NewCandidateReviewActionSnapshot(tc.action, candidate, actor) + require.NoError(t, err) + updated, createdSnapshot, err := tc.apply(ctx, candidateStore, snapshotStore, candidate.ID, snapshot, actor) + require.NoError(t, err) + require.NotNil(t, createdSnapshot) + require.Equal(t, tc.expectedStatus, updated.Status) + requirePersistedCandidateReviewAfter(t, ctx, snapshotStore, createdSnapshot.SnapshotID, updated) + + result, err := Rollback( + ctx, + auth.Identity{Role: auth.RoleAdmin, Source: auth.SourceMaster, KeycardID: actor}, + createdSnapshot.SnapshotID, + snapshotStore, + memStore, + auditStore, + candidateStore, + ) + require.NoError(t, err) + require.Equal(t, 1, result.RestoredCount) + restored, err := candidateStore.Get(ctx, candidate.ID) + require.NoError(t, err) + require.Equal(t, models.CandidateStatusPending, restored.Status) + }) + } +} diff --git a/internal/db/gorm/candidate_store.go b/internal/db/gorm/candidate_store.go index b357ddbd..59097e34 100644 --- a/internal/db/gorm/candidate_store.go +++ b/internal/db/gorm/candidate_store.go @@ -454,6 +454,11 @@ func (s *CandidateStore) promoteWithMemoryAndSnapshotAction( } } if candidateReviewAuditRequired(snapshot) { + amendedBeforeState, err := amendCandidateReviewAfterTx(ctx, tx, createdSnapshot.SnapshotID, updatedCandidate) + if err != nil { + return err + } + createdSnapshot.BeforeState = amendedBeforeState return s.logCandidateReviewAuditTx(ctx, tx, reviewAction, actor, "", beforeCandidate, updatedCandidate) } return nil @@ -680,6 +685,11 @@ func (s *CandidateStore) transitionWithSnapshot( return err } updatedCandidate = afterCandidate + amendedBeforeState, err := amendCandidateReviewAfterTx(ctx, tx, createdSnapshot.SnapshotID, afterCandidate) + if err != nil { + return err + } + createdSnapshot.BeforeState = amendedBeforeState return s.logCandidateReviewAuditTx(ctx, tx, action, actor, detail, beforeCandidate, afterCandidate) }) if err != nil { @@ -688,6 +698,62 @@ func (s *CandidateStore) transitionWithSnapshot( return updatedCandidate, createdSnapshot, nil } +func amendCandidateReviewAfterTx( + ctx context.Context, + tx *gorm.DB, + snapshotID string, + afterCandidate *models.CrystallizationCandidate, +) (json.RawMessage, error) { + if afterCandidate == nil || afterCandidate.ID <= 0 { + return nil, fmt.Errorf("amend_candidate_review_after: authoritative candidate is required") + } + + var row snapshotRow + if err := tx.WithContext(ctx).Clauses(clause.Locking{Strength: "UPDATE"}). + Where("snapshot_id = ?", snapshotID). + First(&row).Error; err != nil { + return nil, fmt.Errorf("amend_candidate_review_after: get snapshot %q: %w", snapshotID, err) + } + if row.OpType != string(models.SnapshotOpCandidateReviewAction) { + return nil, fmt.Errorf("amend_candidate_review_after: snapshot %q has op_type %q", snapshotID, row.OpType) + } + + entries := make(map[string]models.SnapshotEntry) + if err := json.Unmarshal([]byte(row.BeforeState), &entries); err != nil { + return nil, fmt.Errorf("amend_candidate_review_after: decode before_state: %w", err) + } + key := fmt.Sprintf("candidate:%d", afterCandidate.ID) + entry, ok := entries[key] + if !ok { + return nil, fmt.Errorf("amend_candidate_review_after: snapshot %q missing entry %q", snapshotID, key) + } + if entry.Kind != models.EntryKindRestore { + return nil, fmt.Errorf("amend_candidate_review_after: entry %q has kind %q", key, entry.Kind) + } + + afterJSON, err := json.Marshal(afterCandidate) + if err != nil { + return nil, fmt.Errorf("amend_candidate_review_after: serialize candidate %d: %w", afterCandidate.ID, err) + } + entry.After = afterJSON + entries[key] = entry + amended, err := json.Marshal(entries) + if err != nil { + return nil, fmt.Errorf("amend_candidate_review_after: serialize before_state: %w", err) + } + + result := tx.WithContext(ctx).Model(&snapshotRow{}). + Where("snapshot_id = ?", snapshotID). + Update("before_state", JSONRaw(amended)) + if result.Error != nil { + return nil, fmt.Errorf("amend_candidate_review_after: update snapshot %q: %w", snapshotID, result.Error) + } + if result.RowsAffected != 1 { + return nil, fmt.Errorf("amend_candidate_review_after: update snapshot %q affected %d rows", snapshotID, result.RowsAffected) + } + return json.RawMessage(amended), nil +} + // TransitionToSuperseded transitions a pending candidate to superseded. // Returns ErrInvalidTransition if the candidate is not pending. func (s *CandidateStore) TransitionToSuperseded(ctx context.Context, id int64) (*models.CrystallizationCandidate, error) { diff --git a/internal/db/gorm/candidate_store_test.go b/internal/db/gorm/candidate_store_test.go index 41d7fe9f..d996351a 100644 --- a/internal/db/gorm/candidate_store_test.go +++ b/internal/db/gorm/candidate_store_test.go @@ -15,6 +15,7 @@ import ( "gorm.io/gorm" "gorm.io/gorm/logger" + "github.com/thebtf/engram/internal/reviewpacket" "github.com/thebtf/engram/pkg/models" ) @@ -672,14 +673,8 @@ func createCandidateReviewStoreTestCandidate(t *testing.T, cs *CandidateStore, c func newCandidateReviewStoreTestSnapshot(t *testing.T, candidate *models.CrystallizationCandidate, action string, actor string) *models.BulkOpSnapshot { t.Helper() - snapshot, err := models.NewBulkOpSnapshot( - fmt.Sprintf("candidate-review-%s-%d", action, time.Now().UnixNano()), - models.SnapshotOpCandidateReviewAction, - actor, - json.RawMessage(`{}`), - ) + snapshot, err := reviewpacket.NewCandidateReviewActionSnapshot(action, candidate, actor) require.NoError(t, err) - snapshot.SourceSessionID = candidate.SourceSessionID return snapshot } diff --git a/internal/mcp/tools_bulkops.go b/internal/mcp/tools_bulkops.go index 41f3ed6b..2c590922 100644 --- a/internal/mcp/tools_bulkops.go +++ b/internal/mcp/tools_bulkops.go @@ -5,7 +5,7 @@ // previews per spec §FR-F6.b. // // Dry-run nil-safe seam (TG5 absent): when bulkFacade is nil AND dry_run=true, -// the handler computes would_affect from the input array length and returns +// the handler computes would_affect from normalized candidate IDs and returns // immediately — no DB read, no write. When dry_run=false and facade is nil, // an error is returned (operation not available). package mcp @@ -90,8 +90,8 @@ func bulkOpsTools() []Tool { // handleBulkPromote promotes a list of crystallization candidates to memories. // // Admin gate: non-admin callers receive admin_required error. -// Dry-run nil-safe seam: when bulkFacade is nil and dry_run=true, returns -// would_affect from len(candidate_ids) — zero DB reads or writes. +// Dry-run nil-safe seam: when bulkFacade is nil and dry_run=true, returns the +// same sorted unique non-zero candidate count as the facade — zero DB reads or writes. func (s *Server) handleBulkPromote(ctx context.Context, args json.RawMessage) (string, error) { if !vnextFEnabled() { return "", fmt.Errorf("bulk_promote: requires ENGRAM_VNEXT_F_ENABLED=true") @@ -106,16 +106,16 @@ func (s *Server) handleBulkPromote(ctx context.Context, args json.RawMessage) (s return "", err } - candidateIDs := coerceInt64Slice(m["candidate_ids"]) + candidateIDs := bulkops.NormalizeCandidateIDs(coerceInt64Slice(m["candidate_ids"])) dryRun := coerceBool(m["dry_run"], false) // Nil-safe TG5-absent dry-run seam: when facade is nil and dry_run=true, - // return a preview using the input array length — no DB access. + // return a preview using the facade's normalized ID contract — no DB access. if dryRun && s.bulkFacade == nil { out := map[string]any{ - "dry_run": true, + "dry_run": true, "would_affect": len(candidateIDs), - "note": "bulk_promote preview (facade not wired — would_affect from input only)", + "note": "bulk_promote preview (facade not wired — normalized input only)", } return marshalJSON(out) } @@ -136,12 +136,12 @@ func (s *Server) handleBulkPromote(ctx context.Context, args json.RawMessage) (s } out := map[string]any{ - "dry_run": result.DryRun, - "would_affect": result.WouldAffect, + "dry_run": result.DryRun, + "would_affect": result.WouldAffect, "affected_count": result.AffectedCount, - "snapshot_id": result.SnapshotID, - "promoted": result.Promoted, - "errors": result.Errors, + "snapshot_id": result.SnapshotID, + "promoted": result.Promoted, + "errors": result.Errors, } return marshalJSON(out) } diff --git a/internal/mcp/tools_dryrun_test.go b/internal/mcp/tools_dryrun_test.go index 51b1c662..c5f41de5 100644 --- a/internal/mcp/tools_dryrun_test.go +++ b/internal/mcp/tools_dryrun_test.go @@ -96,7 +96,7 @@ func TestBulkPromote_DryRun_NilFacade(t *testing.T) { adminID := auth.Identity{Role: auth.RoleAdmin, Source: auth.SourceMaster} ctx := auth.WithIdentity(context.Background(), adminID) - args := json.RawMessage(`{"candidate_ids": [1, 2, 3], "dry_run": true}`) + args := json.RawMessage(`{"candidate_ids": [2, 0, 1, 2, 1, 0], "dry_run": true}`) result, err := s.handleBulkPromote(ctx, args) require.NoError(t, err, "bulk_promote dry_run with nil facade must not error") @@ -105,7 +105,8 @@ func TestBulkPromote_DryRun_NilFacade(t *testing.T) { var out map[string]any require.NoError(t, json.Unmarshal([]byte(result), &out)) assert.Equal(t, true, out["dry_run"]) - assert.Equal(t, float64(3), out["would_affect"], "would_affect must equal len(candidate_ids)") + assert.Equal(t, float64(2), out["would_affect"], + "nil-facade preview must use the facade's sorted unique non-zero candidate-ID contract") } // TestBulkDelete_DryRun_NilFacade verifies bulk_delete dry_run=true From 2b3ef3e33bd19e630f8f67d07a9e2521cb98537f Mon Sep 17 00:00:00 2001 From: Kirill Turanskiy Date: Fri, 10 Jul 2026 10:29:40 +0300 Subject: [PATCH 012/111] ci: harden production release gates --- .agent/critical-suite.config.yaml | 32 +- .agent/dev-stand.config.yaml | 31 +- .github/workflows/test.yml | 192 +++- scripts/production-gates/assert-coverage.ps1 | 43 +- .../production-gates/assert-go-test-json.ps1 | 71 +- .../assert-plan-path-ownership.ps1 | 961 ++++++++++++++++++ .../production-gates/cleanup-db-sessions.ps1 | 34 +- .../production-gates/run-critical-suite.ps1 | 375 +++++++ scripts/production-gates/run-db-suite.ps1 | 366 ++++++- scripts/production-gates/run-dev-stand.ps1 | 292 ++++++ 10 files changed, 2314 insertions(+), 83 deletions(-) create mode 100644 scripts/production-gates/assert-plan-path-ownership.ps1 create mode 100644 scripts/production-gates/run-critical-suite.ps1 create mode 100644 scripts/production-gates/run-dev-stand.ps1 diff --git a/.agent/critical-suite.config.yaml b/.agent/critical-suite.config.yaml index 51d83b00..4669d98e 100644 --- a/.agent/critical-suite.config.yaml +++ b/.agent/critical-suite.config.yaml @@ -13,14 +13,17 @@ runner: command: "go test -tags=critical -json ./tests/critical/... -count=1" transcript_parser: "pwsh -NoProfile -File scripts/production-gates/assert-go-test-json.ps1 -FailOnUnexpectedSkip" fail_on_unexpected_skip: true + allowed_skip_identities: [] database_gate: - command: "pwsh -NoProfile -File scripts/production-gates/run-db-suite.ps1 -FreshDatabase -Repeat 3 -FailOnUnexpectedSkip" + command: "pwsh -NoProfile -File scripts/production-gates/run-db-suite.ps1 -FreshDatabase -Package ./... -Race -FailOnUnexpectedSkip" postgres_image: "pgvector/pgvector:pg17" + repeat_source: "run-db-suite.ps1 default (3); callers do not duplicate the value" fresh_database_per_repeat: true schema: "public" package_parallelism: 1 test_parallelism: 1 + race_detector: true connection_budget: 20 post_test_sessions_required: 0 cleanup_required: true @@ -33,7 +36,19 @@ coverage: "internal/module/": 75 "internal/handlers/engramcore": 60 "internal/handlers/loom": 70 - "cmd/engram/": 0 + "cmd/engram/": 10 + "cmd/engram-server/": 10 + "internal/update/": 20 + "internal/worker/": 55 + "internal/mcp/": 55 + "internal/db/gorm/": 55 + critical_path_mapping: + launcher: "cmd/engram/" + server: "cmd/engram-server/" + update: "internal/update/" + worker: "internal/worker/" + mcp: "internal/mcp/" + database: "internal/db/gorm/" evidence: root: ".agent/reports/evidence/production-ready/release-gates-foundation" @@ -46,6 +61,19 @@ evidence: require_cleanup_result: true security: + image_scan: + command: "pwsh -NoProfile -File scripts/production-gates/run-db-suite.ps1 -DevStandAction Scan -ComposeProject engram-critical-stand -ComposeFile docker-compose.yml" + discovery: "compose labels for project engram-critical-stand" + scanner: "docker scout cves" + severities: ["critical", "high"] + fail_on_findings: true + machine_evidence: "dev-stand/-scan/docker-scout-*.sarif.json plus summary.json" + exact_service_images: + postgres: "pgvector/pgvector:pg17" + server: "ghcr.io/thebtf/engram:main" + operator-console: "ghcr.io/thebtf/engram-operator-console:main" + forbidden_synthetic_tags: + - "engram:prc-candidate" govulncheck: authoritative_modes: - "source scan with tests: govulncheck -test ./..." diff --git a/.agent/dev-stand.config.yaml b/.agent/dev-stand.config.yaml index 107c84d9..fda98411 100644 --- a/.agent/dev-stand.config.yaml +++ b/.agent/dev-stand.config.yaml @@ -5,12 +5,12 @@ shape: docker-compose # name and non-default host ports. The critical-suite runner exports the env # below before invoking the lifecycle commands. up: - command: "docker compose -p engram-critical-stand -f docker-compose.yml up -d --build --wait" - readiness_check: "docker compose -p engram-critical-stand -f docker-compose.yml exec -T postgres pg_isready -U engram -d engram && curl -fsS http://localhost:37778/health" - timeout_seconds: 300 + command: "pwsh -NoProfile -File scripts/production-gates/run-db-suite.ps1 -DevStandAction Up -ComposeProject engram-critical-stand -ComposeFile docker-compose.yml" + readiness_check: "pwsh -NoProfile -File scripts/production-gates/run-db-suite.ps1 -DevStandAction Ready -ComposeProject engram-critical-stand -ComposeFile docker-compose.yml" + timeout_seconds: 600 down: - command: "docker compose -p engram-critical-stand -f docker-compose.yml down -v --remove-orphans" - timeout_seconds: 120 + command: "pwsh -NoProfile -File scripts/production-gates/run-db-suite.ps1 -DevStandAction Down -ComposeProject engram-critical-stand -ComposeFile docker-compose.yml" + timeout_seconds: 180 logs: command: "docker compose -p engram-critical-stand -f docker-compose.yml logs --no-color --tail=300" @@ -23,6 +23,27 @@ env: DATABASE_DSN: "postgres://engram:engram@postgres:5432/engram?sslmode=disable" STAND_API_URL: "http://localhost:37778" STAND_OPERATOR_URL: "http://localhost:3001" + NUXT_OPERATOR_API_TARGET: "http://server:37777" + ENGRAM_AUTH_DISABLED: "false" + +credential_policy: + admin_token: "generated cryptographically inside the Up runner process" + persistence: "never written to raw logs, machine summaries, config, or caller environment" + auth_disabled_fallback: false + +image_scan: + command: "pwsh -NoProfile -File scripts/production-gates/run-db-suite.ps1 -DevStandAction Scan -ComposeProject engram-critical-stand -ComposeFile docker-compose.yml" + discovery: "docker service inventory filtered by com.docker.compose.project=engram-critical-stand" + scanner: "docker scout cves" + severities: ["critical", "high"] + fail_on_findings: true + machine_evidence: "dev-stand/-scan/docker-scout-*.sarif.json plus summary.json" + exact_service_images: + postgres: "pgvector/pgvector:pg17" + server: "ghcr.io/thebtf/engram:main" + operator-console: "ghcr.io/thebtf/engram-operator-console:main" + forbidden_synthetic_tags: + - "engram:prc-candidate" database_evidence: runner: "pwsh -NoProfile -File scripts/production-gates/run-db-suite.ps1" diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 3e820a79..1775d76c 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -56,6 +56,133 @@ jobs: shell: pwsh run: ./scripts/production-gates/run-db-suite.ps1 -SelfTest + - name: Self-test tracked critical runner + shell: pwsh + run: ./scripts/production-gates/run-critical-suite.ps1 -Config .agent/critical-suite.config.yaml -SelfTest + + - name: Self-test tracked dev-stand runner + shell: pwsh + run: ./scripts/production-gates/run-dev-stand.ps1 -Config .agent/dev-stand.config.yaml -SelfTest + + - name: Self-test plan path ownership gate + shell: pwsh + run: ./scripts/production-gates/assert-plan-path-ownership.ps1 -SelfTest + + - name: Assert tracked gate / CI conformance + shell: pwsh + run: | + $ErrorActionPreference = 'Stop' + $critical = Get-Content -Raw '.agent/critical-suite.config.yaml' + $stand = Get-Content -Raw '.agent/dev-stand.config.yaml' + $workflow = Get-Content -Raw '.github/workflows/test.yml' + $dbRunner = Get-Content -Raw 'scripts/production-gates/run-db-suite.ps1' + $criticalRunner = Get-Content -Raw 'scripts/production-gates/run-critical-suite.ps1' + $devStandRunner = Get-Content -Raw 'scripts/production-gates/run-dev-stand.ps1' + $trackedCriticalCommand = 'go test -tags=critical -json ./tests/critical/... -count=1' + $trackedDatabaseCommand = 'pwsh -NoProfile -File scripts/production-gates/run-db-suite.ps1 -FreshDatabase -Package ./... -Race -FailOnUnexpectedSkip' + $trackedCriticalWrapper = 'pwsh -NoProfile -File scripts/production-gates/run-critical-suite.ps1 -Config .agent/critical-suite.config.yaml' + $trackedDevStandWrapper = 'pwsh -NoProfile -File scripts/production-gates/run-dev-stand.ps1 -Config .agent/dev-stand.config.yaml' + + function Remove-ConformanceStep([string]$text) { + return [regex]::Replace($text, '(?ms)^ - name: Assert tracked gate / CI conformance\r?\n.*?(?=^ - name: |\z)', '') + } + + function Get-StepBody([string]$text, [string]$name) { + $match = [regex]::Match($text, ('(?ms)^ - name: ' + [regex]::Escape($name) + '\r?\n(?.*?)(?=^ - name: |\z)')) + if (-not $match.Success) { throw "workflow step '$name' is missing" } + return $match.Groups['body'].Value + } + + function Assert-WorkflowContract( + [string]$workflowText, + [string]$criticalText, + [string]$standText, + [string]$dbRunnerText, + [string]$criticalRunnerText, + [string]$devStandRunnerText + ) { + $execution = Remove-ConformanceStep $workflowText + $repeatToken = '(?i)(?=60%, and the existing @@ -150,6 +301,7 @@ jobs: path: | coverage.out coverage-summary.json + .agent/reports/evidence/production-ready/release-gates-foundation/full-matrix/ if-no-files-found: error # Safety-gate self-check (T007, v5 cleanup). diff --git a/scripts/production-gates/assert-coverage.ps1 b/scripts/production-gates/assert-coverage.ps1 index c19a22d7..2ff6ea01 100644 --- a/scripts/production-gates/assert-coverage.ps1 +++ b/scripts/production-gates/assert-coverage.ps1 @@ -14,7 +14,21 @@ $RequiredPackageThresholds = [ordered]@{ 'internal/module/' = 75.0 'internal/handlers/engramcore' = 60.0 'internal/handlers/loom' = 70.0 - 'cmd/engram/' = 0.0 + 'cmd/engram/' = 10.0 + 'cmd/engram-server/' = 10.0 + 'internal/update/' = 20.0 + 'internal/worker/' = 55.0 + 'internal/mcp/' = 55.0 + 'internal/db/gorm/' = 55.0 +} + +$CriticalPathLabels = @{ + 'cmd/engram/' = 'launcher' + 'cmd/engram-server/' = 'server' + 'internal/update/' = 'update' + 'internal/worker/' = 'worker' + 'internal/mcp/' = 'mcp' + 'internal/db/gorm/' = 'database' } function Show-Help { @@ -28,7 +42,12 @@ overall statement coverage, and the historical package gates remain mandatory: internal/module/ >= 75% internal/handlers/engramcore >= 60% internal/handlers/loom >= 70% - cmd/engram/ >= 0% (presence is still required) + cmd/engram/ >= 10% (launcher critical path) + cmd/engram-server/ >= 10% (server critical path) + internal/update/ >= 20% (update critical path) + internal/worker/ >= 55% (worker critical path) + internal/mcp/ >= 55% (MCP critical path) + internal/db/gorm/ >= 55% (database critical path) Usage: pwsh ./scripts/production-gates/assert-coverage.ps1 \ @@ -111,7 +130,12 @@ function Get-CoverageSummary { $pass = $present -and $exactPercent -ge [double]$entry.Value if (-not $present) { $errors.Add("required package coverage is missing: $($entry.Key)") } elseif (-not $pass) { $errors.Add(("package coverage below threshold: {0} {1:N2}% < {2:N2}%" -f $entry.Key, $percent, [double]$entry.Value)) } - $required.Add([pscustomobject]@{ package_prefix = $entry.Key; covered_statements = $covered; total_statements = $total; percent = $percent; threshold = [double]$entry.Value; present = $present; pass = $pass }) + $criticalPath = $CriticalPathLabels.ContainsKey($entry.Key) + $required.Add([pscustomobject]@{ + package_prefix = $entry.Key; covered_statements = $covered; total_statements = $total + percent = $percent; threshold = [double]$entry.Value; present = $present; pass = $pass + critical_path = $criticalPath; critical_path_label = if ($criticalPath) { $CriticalPathLabels[$entry.Key] } else { $null } + }) } $overallExactPercent = if ($overallTotal -gt 0) { ($overallCovered / $overallTotal) * 100.0 } else { 0.0 } @@ -130,7 +154,7 @@ function Get-CoverageSummary { function Assert-SelfTest { param([bool]$Condition, [string]$Message); if (-not $Condition) { throw "SELFTEST FAIL: $Message" } } function New-SyntheticProfile { - param([Parameter(Mandatory)][string]$Path, [int]$EngramCoreCovered = 6, [int]$OtherCovered = 10, [switch]$OmitLoom) + param([Parameter(Mandatory)][string]$Path, [int]$EngramCoreCovered = 6, [int]$OtherCovered = 100, [switch]$OmitLoom) $lines = [System.Collections.Generic.List[string]]::new() $lines.Add('mode: set') $lines.Add('github.com/thebtf/engram/internal/module/a.go:1.1,2.1 10 1') @@ -140,9 +164,14 @@ function New-SyntheticProfile { $lines.Add('github.com/thebtf/engram/internal/handlers/loom/a.go:1.1,2.1 7 1') $lines.Add('github.com/thebtf/engram/internal/handlers/loom/b.go:1.1,2.1 3 0') } - $lines.Add('github.com/thebtf/engram/cmd/engram/main.go:1.1,2.1 10 0') + $lines.Add('github.com/thebtf/engram/cmd/engram/main.go:1.1,2.1 10 1') + $lines.Add('github.com/thebtf/engram/cmd/engram-server/main.go:1.1,2.1 10 1') + $lines.Add('github.com/thebtf/engram/internal/update/update.go:1.1,2.1 10 1') + $lines.Add('github.com/thebtf/engram/internal/worker/service.go:1.1,2.1 10 1') + $lines.Add('github.com/thebtf/engram/internal/mcp/server.go:1.1,2.1 10 1') + $lines.Add('github.com/thebtf/engram/internal/db/gorm/store.go:1.1,2.1 10 1') if ($OtherCovered -gt 0) { $lines.Add("github.com/thebtf/engram/internal/other/a.go:1.1,2.1 $OtherCovered 1") } - if ($OtherCovered -lt 10) { $lines.Add("github.com/thebtf/engram/internal/other/b.go:1.1,2.1 $(10 - $OtherCovered) 0") } + if ($OtherCovered -lt 100) { $lines.Add("github.com/thebtf/engram/internal/other/b.go:1.1,2.1 $(100 - $OtherCovered) 0") } Write-Utf8NoBom $Path (($lines -join "`n") + "`n") } @@ -229,7 +258,7 @@ try { Write-Utf8NoBom $SummaryPath (($summary | ConvertTo-Json -Depth 10) + "`n") Write-Output ("coverage verdict={0} overall={1:N2}% threshold={2:N2}% statements={3}/{4}" -f $summary.verdict, $summary.overall.percent, $summary.overall.threshold, $summary.overall.covered_statements, $summary.overall.total_statements) foreach ($package in $summary.required_packages) { - Write-Output ("coverage package={0} percent={1:N2}% threshold={2:N2}% present={3} pass={4}" -f $package.package_prefix, $package.percent, $package.threshold, $package.present, $package.pass) + Write-Output ("coverage package={0} critical_path={1} percent={2:N2}% threshold={3:N2}% present={4} pass={5}" -f $package.package_prefix, $package.critical_path_label, $package.percent, $package.threshold, $package.present, $package.pass) } Write-Output "summary=$([System.IO.Path]::GetFullPath($SummaryPath))" if ($summary.verdict -ne 'PASS') { exit 1 } diff --git a/scripts/production-gates/assert-go-test-json.ps1 b/scripts/production-gates/assert-go-test-json.ps1 index 1e53e66e..e63b12b0 100644 --- a/scripts/production-gates/assert-go-test-json.ps1 +++ b/scripts/production-gates/assert-go-test-json.ps1 @@ -3,7 +3,7 @@ param( [string]$InputPath, [string]$SummaryPath, [switch]$FailOnUnexpectedSkip, - [string[]]$AllowedSkipPattern = @(), + [Alias('AllowedSkipPattern')][string[]]$AllowedSkipIdentity = @(), [switch]$Help, [switch]$SelfTest ) @@ -25,7 +25,7 @@ Usage: -InputPath \ -SummaryPath \ [-FailOnUnexpectedSkip] \ - [-AllowedSkipPattern [,...]] + [-AllowedSkipIdentity [,...]] Options: -Help Print this help and exit 0. @@ -33,7 +33,8 @@ Options: -InputPath Raw stdout produced by `go test -json`. -SummaryPath JSON summary destination. Defaults beside input. -FailOnUnexpectedSkip Make any non-allowlisted test/package skip fatal. - -AllowedSkipPattern Regex matched against `package/test` and skip output. + -AllowedSkipIdentity Exact case-sensitive package or package/test identity. + Regex, wildcard, output-only, and broad matches are rejected. Exit codes: 0 Transcript is structurally complete and all enabled assertions pass. @@ -48,12 +49,19 @@ function Write-Utf8NoBom { [System.IO.File]::WriteAllText([System.IO.Path]::GetFullPath($Path), $Content, [System.Text.UTF8Encoding]::new($false)) } +function Test-IsValidAllowedSkipIdentity { + param([string]$Identity) + if ([string]::IsNullOrWhiteSpace($Identity)) { return $false } + if ($Identity.Length -gt 512) { return $false } + if ($Identity -match '[\x00-\x1F\x7F]') { return $false } + if ($Identity.Contains('*') -or $Identity.Contains('?')) { return $false } + return $true +} + function Test-MatchesAllowedSkip { - param([Parameter(Mandatory)][string]$Identity, [string]$Output, [string[]]$Patterns) - foreach ($pattern in $Patterns) { - if ([string]::IsNullOrWhiteSpace($pattern)) { continue } - if ([regex]::IsMatch($Identity, $pattern) -or - (-not [string]::IsNullOrEmpty($Output) -and [regex]::IsMatch($Output, $pattern))) { return $true } + param([Parameter(Mandatory)][string]$Identity, [string[]]$AllowedIdentities) + foreach ($allowedIdentity in $AllowedIdentities) { + if ([string]::Equals($Identity, $allowedIdentity, [System.StringComparison]::Ordinal)) { return $true } } return $false } @@ -62,30 +70,35 @@ function Read-GoTestTranscript { param( [Parameter(Mandatory)][string]$Path, [bool]$EnforceUnexpectedSkip, - [string[]]$AllowedPatterns + [string[]]$AllowedIdentities ) if (-not (Test-Path -LiteralPath $Path -PathType Leaf)) { return [pscustomobject]@{ schema_version = 1; verdict = 'FAIL'; input_path = [System.IO.Path]::GetFullPath($Path) - fail_on_unexpected_skip = $EnforceUnexpectedSkip; allowed_skip_patterns = @($AllowedPatterns) + fail_on_unexpected_skip = $EnforceUnexpectedSkip; allowed_skip_identities = @($AllowedIdentities) counts = [ordered]@{ packages = 0; tests = 0; passed = 0; failed = 0; skipped = 0; no_tests = 0; zero_tests = 1; incomplete = 0; unexpected_skips = 0; malformed_lines = 0 } packages = @(); tests = @(); unexpected_skips = @(); errors = @("input transcript does not exist: $Path") } } - $patternErrors = [System.Collections.Generic.List[string]]::new() - foreach ($pattern in $AllowedPatterns) { - if ([string]::IsNullOrWhiteSpace($pattern)) { continue } - try { [void][regex]::new($pattern) } - catch { $patternErrors.Add("invalid allowed-skip regex '$pattern': $($_.Exception.Message)") } + $identityErrors = [System.Collections.Generic.List[string]]::new() + $seenIdentities = [System.Collections.Generic.HashSet[string]]::new([System.StringComparer]::Ordinal) + foreach ($allowedIdentity in $AllowedIdentities) { + if (-not (Test-IsValidAllowedSkipIdentity $allowedIdentity)) { + $identityErrors.Add("invalid allowed-skip identity '$allowedIdentity': identities must be non-empty exact values without wildcards or control characters") + continue + } + if (-not $seenIdentities.Add($allowedIdentity)) { + $identityErrors.Add("duplicate allowed-skip identity '$allowedIdentity'") + } } - if ($patternErrors.Count -gt 0) { + if ($identityErrors.Count -gt 0) { return [pscustomobject]@{ schema_version = 1; verdict = 'FAIL'; input_path = [System.IO.Path]::GetFullPath($Path) - fail_on_unexpected_skip = $EnforceUnexpectedSkip; allowed_skip_patterns = @($AllowedPatterns) + fail_on_unexpected_skip = $EnforceUnexpectedSkip; allowed_skip_identities = @($AllowedIdentities) counts = [ordered]@{ packages = 0; tests = 0; passed = 0; failed = 0; skipped = 0; no_tests = 0; zero_tests = 1; incomplete = 0; unexpected_skips = 0; malformed_lines = 0 } - packages = @(); tests = @(); unexpected_skips = @(); errors = @($patternErrors) + packages = @(); tests = @(); unexpected_skips = @(); errors = @($identityErrors) } } @@ -139,7 +152,7 @@ function Read-GoTestTranscript { $testState.outcome = $action $testState.elapsed_seconds = $elapsed if ($action -eq 'skip') { - $testState.skip_allowed = Test-MatchesAllowedSkip -Identity "$packageName/$testName" -Output $testState.last_output -Patterns $AllowedPatterns + $testState.skip_allowed = Test-MatchesAllowedSkip -Identity "$packageName/$testName" -AllowedIdentities $AllowedIdentities } } } @@ -154,7 +167,7 @@ function Read-GoTestTranscript { } } foreach ($package in $packages) { - if ($package.outcome -eq 'skip' -and -not (Test-MatchesAllowedSkip -Identity $package.package -Output $package.last_output -Patterns $AllowedPatterns)) { + if ($package.outcome -eq 'skip' -and -not (Test-MatchesAllowedSkip -Identity $package.package -AllowedIdentities $AllowedIdentities)) { $unexpectedSkips.Add([pscustomobject]@{ package = $package.package; test = $null; output = $package.last_output }) } } @@ -171,7 +184,7 @@ function Read-GoTestTranscript { verdict = $verdict input_path = [System.IO.Path]::GetFullPath($Path) fail_on_unexpected_skip = $EnforceUnexpectedSkip - allowed_skip_patterns = @($AllowedPatterns) + allowed_skip_identities = @($AllowedIdentities) counts = [ordered]@{ packages = $packages.Count; tests = $tests.Count passed = @($tests | Where-Object outcome -eq 'pass').Count @@ -213,10 +226,18 @@ function Invoke-SelfTest { ) -join "`n") + "`n") $skip = Read-GoTestTranscript $skipPath $true @() Assert-SelfTest ($skip.verdict -eq 'FAIL' -and $skip.counts.unexpected_skips -eq 1) 'unexpected skip did not fail' - $allowed = Read-GoTestTranscript $skipPath $true @('TestNeedsDB$') + $allowed = Read-GoTestTranscript $skipPath $true @('example/skip/TestNeedsDB') Assert-SelfTest ($allowed.verdict -eq 'PASS') 'allowlisted skip did not pass' - $invalidPattern = Read-GoTestTranscript $skipPath $true @('[') - Assert-SelfTest ($invalidPattern.verdict -eq 'FAIL' -and @($invalidPattern.errors | Where-Object { $_ -match 'invalid allowed-skip regex' }).Count -eq 1) 'invalid allowlist regex did not produce a machine failure summary' + $sibling = Read-GoTestTranscript $skipPath $true @('example/skip/TestNeeds') + Assert-SelfTest ($sibling.verdict -eq 'FAIL' -and $sibling.counts.unexpected_skips -eq 1) 'sibling-prefix allowlist overmatched the skipped test' + $outputOnly = Read-GoTestTranscript $skipPath $true @('DATABASE_DSN not set') + Assert-SelfTest ($outputOnly.verdict -eq 'FAIL' -and $outputOnly.counts.unexpected_skips -eq 1) 'skip output was accepted as an identity allowlist' + foreach ($broadIdentity in @('', '.*', '^.*$', 'example/skip/Test*')) { + $broad = Read-GoTestTranscript $skipPath $true @($broadIdentity) + Assert-SelfTest ($broad.verdict -eq 'FAIL' -and @($broad.errors | Where-Object { $_ -match 'invalid allowed-skip identity' }).Count -eq 1) "broad allowlist '$broadIdentity' was accepted" + } + $duplicate = Read-GoTestTranscript $skipPath $true @('example/skip/TestNeedsDB', 'example/skip/TestNeedsDB') + Assert-SelfTest ($duplicate.verdict -eq 'FAIL' -and @($duplicate.errors | Where-Object { $_ -match 'duplicate allowed-skip identity' }).Count -eq 1) 'duplicate allowlist identity was accepted' $noTestsPath = Join-Path $root 'no-tests.jsonl' Write-Utf8NoBom $noTestsPath ((@( @@ -242,7 +263,7 @@ if ([string]::IsNullOrWhiteSpace($InputPath)) { Write-Error '-InputPath is requi if ([string]::IsNullOrWhiteSpace($SummaryPath)) { $SummaryPath = "$InputPath.summary.json" } try { - $summary = Read-GoTestTranscript $InputPath ([bool]$FailOnUnexpectedSkip) $AllowedSkipPattern + $summary = Read-GoTestTranscript $InputPath ([bool]$FailOnUnexpectedSkip) $AllowedSkipIdentity Write-Utf8NoBom $SummaryPath (($summary | ConvertTo-Json -Depth 12) + "`n") Write-Output ("go test JSON verdict={0} packages={1} tests={2} passed={3} failed={4} skipped={5} unexpected_skips={6} malformed={7}" -f $summary.verdict, $summary.counts.packages, $summary.counts.tests, $summary.counts.passed, $summary.counts.failed, $summary.counts.skipped, $summary.counts.unexpected_skips, $summary.counts.malformed_lines) Write-Output "summary=$([System.IO.Path]::GetFullPath($SummaryPath))" diff --git a/scripts/production-gates/assert-plan-path-ownership.ps1 b/scripts/production-gates/assert-plan-path-ownership.ps1 new file mode 100644 index 00000000..7557de55 --- /dev/null +++ b/scripts/production-gates/assert-plan-path-ownership.ps1 @@ -0,0 +1,961 @@ +[CmdletBinding()] +param( + [ValidateSet('Ledger', 'Diff')] + [string]$Mode = 'Ledger', + [string]$Slice, + [string]$Base, + [string]$Head, + [string]$Plan = '.agent/plans/2026-07-10-engram-production-ready-master-plan.md', + [string]$EvidenceNamespace, + [string]$ReportNamespace, + [string]$Artifact = '.agent/reports/evidence/production-ready/ownership/path-ledger.json', + [switch]$SelfTest, + [switch]$Help +) + +Set-StrictMode -Version Latest +$ErrorActionPreference = 'Stop' + +function Show-Help { + @' +assert-plan-path-ownership.ps1 + +Ledger mode parses the production-ready master-plan ownership matrix. Only +literal repository paths and explicit directory/** prefixes are accepted. +Cross-owner exact and exact/prefix overlap requires one ownership epoch whose +owner set exactly matches the effective owners. Prefix/prefix overlap always +fails. + +Diff mode additionally enumerates git diff --name-status Base..Head and proves +that every changed path belongs to the named slice or to its validated evidence +or maker-report namespace. Base and Head must be full commit object IDs. + +Usage: + pwsh ./scripts/production-gates/assert-plan-path-ownership.ps1 -Mode Ledger ` + -Plan .agent/plans/2026-07-10-engram-production-ready-master-plan.md ` + -Artifact .agent/reports/evidence/production-ready/ownership/path-ledger.json + + pwsh ./scripts/production-gates/assert-plan-path-ownership.ps1 -Mode Diff ` + -Slice DB-BULKOPS -Base <40-hex-commit> -Head <40-hex-commit> ` + -EvidenceNamespace '.agent/specs/production-ready-db-bulkops/evidence/**' ` + -ReportNamespace .agent/reports/db-bulkops-maker.md -Plan -Artifact +'@ | Write-Output +} + +function Write-Utf8NoBom { + param( + [Parameter(Mandatory)][string]$Path, + [Parameter(Mandatory)][AllowEmptyString()][string]$Content + ) + + $parent = Split-Path -Parent $Path + if ($parent) { New-Item -ItemType Directory -Path $parent -Force | Out-Null } + [System.IO.File]::WriteAllText( + [System.IO.Path]::GetFullPath($Path), + $Content, + [System.Text.UTF8Encoding]::new($false) + ) +} + +function Split-MarkdownRow { + param([Parameter(Mandatory)][string]$Line) + + $cells = [System.Collections.Generic.List[string]]::new() + $builder = [System.Text.StringBuilder]::new() + $inCode = $false + for ($index = 0; $index -lt $Line.Length; $index++) { + $character = $Line[$index] + if ($character -eq '`' -and ($index -eq 0 -or $Line[$index - 1] -ne '\')) { + $inCode = -not $inCode + [void]$builder.Append($character) + continue + } + if ($character -eq '|' -and -not $inCode) { + $cells.Add($builder.ToString().Trim()) + [void]$builder.Clear() + continue + } + [void]$builder.Append($character) + } + $cells.Add($builder.ToString().Trim()) + if ($cells.Count -gt 0 -and [string]::IsNullOrWhiteSpace($cells[0])) { $cells.RemoveAt(0) } + if ($cells.Count -gt 0 -and [string]::IsNullOrWhiteSpace($cells[$cells.Count - 1])) { $cells.RemoveAt($cells.Count - 1) } + return @($cells) +} + +function Get-CodeSpans { + param([Parameter(Mandatory)][string]$Text) + return @([regex]::Matches($Text, '`(?[^`\r\n]+)`') | ForEach-Object { $_.Groups['value'].Value }) +} + +function Normalize-OwnershipPath { + param([Parameter(Mandatory)][string]$Token) + + $value = $Token.Trim().Replace('\', '/') + if ([string]::IsNullOrWhiteSpace($value)) { throw 'empty ownership path token' } + $isPrefix = $value.EndsWith('/**', [System.StringComparison]::Ordinal) + $basePath = if ($isPrefix) { $value.Substring(0, $value.Length - 3) } else { $value } + if ($basePath.StartsWith('/') -or $basePath -match '^[A-Za-z]:' -or $basePath.Contains('//')) { + throw "ownership path must be repository-relative: '$value'" + } + if ($basePath -match '(^|/)\.\.?(?:/|$)') { throw "ownership path contains dot traversal: '$value'" } + if ($basePath -notmatch '^[A-Za-z0-9._/-]+$') { throw "unknown descriptive or wildcard ownership scope '$value'" } + if ($value -match '[*?\[\]{}]' -and -not $isPrefix) { + throw "only a terminal /** prefix wildcard is allowed: '$value'" + } + if ($isPrefix -and ([string]::IsNullOrWhiteSpace($basePath) -or $basePath -match '[*?\[\]{}]')) { + throw "invalid declared ownership prefix '$value'" + } + + $normalizedBase = $basePath.TrimEnd('/') + return [pscustomobject][ordered]@{ + path = $normalizedBase + display = if ($isPrefix) { $normalizedBase + '/**' } else { $normalizedBase } + kind = if ($isPrefix) { 'prefix' } else { 'exact' } + } +} + +function Normalize-GitPath { + param([Parameter(Mandatory)][string]$Token) + + if ($Token -cne $Token.Trim()) { throw "git diff path has leading or trailing whitespace and cannot be normalized safely: '$Token'" } + $value = $Token.Replace('\', '/') + if ([string]::IsNullOrWhiteSpace($value)) { throw 'git diff emitted an empty path' } + if ($value.StartsWith('/') -or $value -match '^[A-Za-z]:' -or $value.Contains("`0")) { + throw "git diff path is not repository-relative: '$value'" + } + if ($value -match '(^|/)\.\.?(?:/|$)') { throw "git diff path contains dot traversal: '$value'" } + while ($value.StartsWith('./', [System.StringComparison]::Ordinal)) { + $value = $value.Substring(2) + } + return $value +} + +function Get-MarkdownSection { + param( + [Parameter(Mandatory)][string]$Text, + [Parameter(Mandatory)][string]$StartPattern, + [Parameter(Mandatory)][string]$EndPattern + ) + + $start = [regex]::Match($Text, $StartPattern, [System.Text.RegularExpressions.RegexOptions]::Multiline) + if (-not $start.Success) { throw "plan section '$StartPattern' is missing" } + $tail = $Text.Substring($start.Index + $start.Length) + $end = [regex]::Match($tail, $EndPattern, [System.Text.RegularExpressions.RegexOptions]::Multiline) + if (-not $end.Success) { return $tail } + return $tail.Substring(0, $end.Index) +} + +function Get-TableRows { + param( + [Parameter(Mandatory)][string]$Section, + [Parameter(Mandatory)][string]$HeaderFirstCell + ) + + $lines = $Section -split "`r?`n" + $headerIndex = -1 + for ($index = 0; $index -lt $lines.Count; $index++) { + if (-not $lines[$index].TrimStart().StartsWith('|')) { continue } + $cells = Split-MarkdownRow $lines[$index] + if ($cells.Count -gt 0 -and $cells[0].Trim() -ceq $HeaderFirstCell) { + $headerIndex = $index + break + } + } + if ($headerIndex -lt 0) { throw "Markdown table '$HeaderFirstCell' is missing" } + + $rows = [System.Collections.Generic.List[object]]::new() + for ($index = $headerIndex + 1; $index -lt $lines.Count; $index++) { + $line = $lines[$index] + if ([string]::IsNullOrWhiteSpace($line)) { + if ($rows.Count -gt 0) { break } + continue + } + if (-not $line.TrimStart().StartsWith('|')) { + if ($rows.Count -gt 0) { break } + continue + } + $cells = Split-MarkdownRow $line + if ($cells.Count -gt 0 -and $cells[0] -match '^:?-{3,}:?$') { continue } + $rows.Add([pscustomobject][ordered]@{ + line_number = $index + 1 + cells = $cells + raw = $line + }) + } + return @($rows) +} + +function Test-PathInsidePrefix { + param( + [Parameter(Mandatory)][string]$Path, + [Parameter(Mandatory)][string]$Prefix + ) + return $Path.StartsWith($Prefix.TrimEnd('/') + '/', [System.StringComparison]::Ordinal) +} + +function Test-DeclarationMatchesPath { + param( + [Parameter(Mandatory)]$Declaration, + [Parameter(Mandatory)][string]$Path + ) + + if ($Declaration.kind -eq 'exact') { + return [string]::Equals($Declaration.path, $Path, [System.StringComparison]::Ordinal) + } + return Test-PathInsidePrefix $Path $Declaration.path +} + +function Test-SameStringSet { + param( + [Parameter(Mandatory)][AllowEmptyCollection()][object[]]$Left, + [Parameter(Mandatory)][AllowEmptyCollection()][object[]]$Right + ) + + $leftSet = [System.Collections.Generic.HashSet[string]]::new([System.StringComparer]::Ordinal) + $rightSet = [System.Collections.Generic.HashSet[string]]::new([System.StringComparer]::Ordinal) + foreach ($item in $Left) { [void]$leftSet.Add([string]$item) } + foreach ($item in $Right) { [void]$rightSet.Add([string]$item) } + return $leftSet.SetEquals($rightSet) +} + +function Get-UniqueOwnersForExactPath { + param( + [Parameter(Mandatory)][AllowEmptyCollection()][object[]]$Declarations, + [Parameter(Mandatory)][string]$Path + ) + + $owners = [System.Collections.Generic.List[string]]::new() + foreach ($declaration in $Declarations) { + $matches = if ($declaration.kind -eq 'exact') { + [string]::Equals($declaration.path, $Path, [System.StringComparison]::Ordinal) + } + else { + Test-PathInsidePrefix $Path $declaration.path + } + if ($matches -and -not $owners.Contains($declaration.owner)) { $owners.Add($declaration.owner) } + } + return @($owners) +} + +function Get-ScopeRemainder { + param([Parameter(Mandatory)][string]$ScopeCell) + + $remainder = [regex]::Replace($ScopeCell, '`[^`\r\n]+`', ' ') + $allowedPhrases = @( + 'no versioned release-note path is authorized yet', + 'legacy evidence prefix', + 'legacy exact report', + 'generated', + 'new', + 'only' + ) + foreach ($phrase in $allowedPhrases) { + $remainder = [regex]::Replace($remainder, '(?i)(?' + ) + + $errors = [System.Collections.Generic.List[string]]::new() + $declarations = [System.Collections.Generic.List[object]]::new() + $slices = [System.Collections.Generic.List[object]]::new() + $epochs = [System.Collections.Generic.List[object]]::new() + $repeatedExactPaths = [System.Collections.Generic.List[object]]::new() + $prefixIntersections = [System.Collections.Generic.List[object]]::new() + + try { + $matrixSection = Get-MarkdownSection $Text '^## 4\. Worktree and Ownership Matrix\s*$' '^### 4\.1\s+' + $matrixRows = @(Get-TableRows $matrixSection 'Slice') + foreach ($row in $matrixRows) { + if ($row.cells.Count -lt 5) { + $errors.Add("line $($row.line_number): ownership row has $($row.cells.Count) cells, expected at least 5") + continue + } + + $sliceName = $row.cells[0].Trim().Trim('`') + $branchSpans = @(Get-CodeSpans $row.cells[1]) + $branch = if ($branchSpans.Count -gt 0) { $branchSpans[0] } else { $row.cells[1].Trim() } + if ($branch -notmatch '^work/[A-Za-z0-9._/-]+$') { continue } + if ([string]::IsNullOrWhiteSpace($sliceName)) { + $errors.Add("line $($row.line_number): maker slice name is empty") + continue + } + + $pathTokens = @(Get-CodeSpans $row.cells[2]) + if ($pathTokens.Count -eq 0) { + $errors.Add("line $($row.line_number): maker '$sliceName' has no exact/prefix code-spanned paths") + continue + } + $scopeRemainder = Get-ScopeRemainder $row.cells[2] + if (-not [string]::IsNullOrWhiteSpace($scopeRemainder)) { + $errors.Add("line $($row.line_number): maker '$sliceName' has unknown descriptive ownership scope '$scopeRemainder'") + } + + $slicePaths = [System.Collections.Generic.List[string]]::new() + foreach ($token in $pathTokens) { + try { + $normalized = Normalize-OwnershipPath $token + $duplicateWithinOwner = @($declarations | Where-Object { + $_.owner -ceq $sliceName -and + $_.kind -ceq $normalized.kind -and + [string]::Equals($_.path, $normalized.path, [System.StringComparison]::Ordinal) + }).Count -gt 0 + if ($duplicateWithinOwner) { + $errors.Add("line $($row.line_number): maker '$sliceName' declares '$($normalized.display)' more than once") + continue + } + $declaration = [pscustomobject][ordered]@{ + owner = $sliceName + branch = $branch + path = $normalized.path + display = $normalized.display + kind = $normalized.kind + line = $row.line_number + } + $declarations.Add($declaration) + $slicePaths.Add($normalized.display) + } + catch { + $errors.Add("line $($row.line_number): $($_.Exception.Message)") + } + } + $slices.Add([pscustomobject][ordered]@{ + slice = $sliceName + branch = $branch + paths = @($slicePaths) + line = $row.line_number + }) + } + + foreach ($sliceGroup in @($slices | Group-Object slice | Where-Object Count -gt 1)) { + $errors.Add("maker slice '$($sliceGroup.Name)' appears $($sliceGroup.Count) times") + } + + $epochSection = Get-MarkdownSection $Text '^### 4\.1 Ownership Epochs and Automated Overlap Gate\s*$' '^### 4\.2\s+' + $epochRows = @(Get-TableRows $epochSection 'Exact path') + foreach ($row in $epochRows) { + if ($row.cells.Count -lt 4) { + $errors.Add("line $($row.line_number): epoch row has $($row.cells.Count) cells, expected 4") + continue + } + $paths = @(Get-CodeSpans $row.cells[0]) + if ($paths.Count -eq 0) { + $errors.Add("line $($row.line_number): epoch row has no exact path") + continue + } + + $current = ($row.cells[1].Trim() -replace '`', '') + $next = ($row.cells[2].Trim() -replace '`', '') + $chain = [System.Collections.Generic.List[string]]::new() + if (-not [string]::IsNullOrWhiteSpace($current)) { $chain.Add($current) } + foreach ($owner in ($next -split '\s*->\s*')) { + $trimmedOwner = $owner.Trim() + if (-not [string]::IsNullOrWhiteSpace($trimmedOwner)) { $chain.Add($trimmedOwner) } + } + if ($chain.Count -lt 2) { + $errors.Add("line $($row.line_number): epoch chain must contain at least two owners") + } + if (@($chain | Select-Object -Unique).Count -ne $chain.Count) { + $errors.Add("line $($row.line_number): epoch chain contains a duplicate owner") + } + + $gate = $row.cells[3].Trim() + $hasTransferSignal = $gate -match '(?i)\b(?:PASS|integrat(?:e|ed|ion)?|rebas(?:e|ed)|commit|SHA|stack|publish(?:ed)?|review|checker|regression|artifact|scan|proof|successor|worktree)\b' + if ([string]::IsNullOrWhiteSpace($gate) -or $gate.Length -lt 20 -or $gate -match '(?i)^\s*(?:TBD|TODO|UNKNOWN|LATER)\s*$' -or -not $hasTransferSignal) { + $errors.Add("line $($row.line_number): epoch transfer gate is blank, placeholder, or not concrete") + } + + foreach ($pathToken in $paths) { + try { + $normalized = Normalize-OwnershipPath $pathToken + if ($normalized.kind -ne 'exact') { + throw "epoch path must be exact, got '$($normalized.display)'" + } + if (@($epochs | Where-Object { + [string]::Equals($_.path, $normalized.path, [System.StringComparison]::Ordinal) + }).Count -gt 0) { + throw "duplicate epoch declaration for '$($normalized.path)'" + } + $epochs.Add([pscustomobject][ordered]@{ + path = $normalized.path + owners = @($chain) + transfer_gate = $gate + line = $row.line_number + }) + } + catch { + $errors.Add("line $($row.line_number): $($_.Exception.Message)") + } + } + } + + $knownOwners = [System.Collections.Generic.HashSet[string]]::new([System.StringComparer]::Ordinal) + foreach ($sliceEntry in $slices) { [void]$knownOwners.Add($sliceEntry.slice) } + foreach ($epoch in $epochs) { + foreach ($owner in $epoch.owners) { + if (-not $knownOwners.Contains($owner)) { + $errors.Add("epoch '$($epoch.path)' references unknown maker '$owner'") + } + } + } + + for ($leftIndex = 0; $leftIndex -lt $declarations.Count; $leftIndex++) { + $left = $declarations[$leftIndex] + for ($rightIndex = $leftIndex + 1; $rightIndex -lt $declarations.Count; $rightIndex++) { + $right = $declarations[$rightIndex] + if ($left.owner -ceq $right.owner) { continue } + + if ($left.kind -eq 'prefix' -and $right.kind -eq 'prefix') { + $intersects = + [string]::Equals($left.path, $right.path, [System.StringComparison]::Ordinal) -or + (Test-PathInsidePrefix $left.path $right.path) -or + (Test-PathInsidePrefix $right.path $left.path) + if ($intersects) { + $entry = [pscustomobject][ordered]@{ + left_owner = $left.owner + left = $left.display + right_owner = $right.owner + right = $right.display + exact_path = $null + declared_epoch = $false + } + $prefixIntersections.Add($entry) + $errors.Add("undeclared prefix/prefix intersection: $($left.owner) '$($left.display)' vs $($right.owner) '$($right.display)'") + } + continue + } + + if ($left.kind -eq 'exact' -and $right.kind -eq 'exact') { continue } + $exact = if ($left.kind -eq 'exact') { $left } else { $right } + $prefix = if ($left.kind -eq 'prefix') { $left } else { $right } + if (Test-PathInsidePrefix $exact.path $prefix.path) { + $declaredEpoch = @($epochs | Where-Object { + [string]::Equals($_.path, $exact.path, [System.StringComparison]::Ordinal) + }).Count -eq 1 + $prefixIntersections.Add([pscustomobject][ordered]@{ + left_owner = $left.owner + left = $left.display + right_owner = $right.owner + right = $right.display + exact_path = $exact.path + declared_epoch = $declaredEpoch + }) + } + } + } + + $exactPaths = @($declarations | Where-Object kind -eq 'exact' | ForEach-Object path | Sort-Object -Unique) + foreach ($path in $exactPaths) { + $exactOwners = @($declarations | Where-Object { + $_.kind -eq 'exact' -and [string]::Equals($_.path, $path, [System.StringComparison]::Ordinal) + } | ForEach-Object owner | Select-Object -Unique) + $prefixOwners = @($declarations | Where-Object { + $_.kind -eq 'prefix' -and (Test-PathInsidePrefix $path $_.path) + } | ForEach-Object owner | Select-Object -Unique) + $effectiveOwners = @(Get-UniqueOwnersForExactPath @($declarations) $path) + $matchingEpoch = @($epochs | Where-Object { + [string]::Equals($_.path, $path, [System.StringComparison]::Ordinal) + }) + + if ($effectiveOwners.Count -lt 2) { + if ($matchingEpoch.Count -gt 0) { + $errors.Add("declared epoch '$path' is not an actual repeated exact or exact/prefix path") + } + continue + } + + $entry = [pscustomobject][ordered]@{ + path = $path + exact_owners = $exactOwners + prefix_owners = $prefixOwners + effective_owners = $effectiveOwners + declared_epoch = $matchingEpoch.Count -eq 1 + epoch_owners = if ($matchingEpoch.Count -eq 1) { @($matchingEpoch[0].owners) } else { @() } + } + $repeatedExactPaths.Add($entry) + + if ($matchingEpoch.Count -ne 1) { + $errors.Add("undeclared ownership overlap '$path' across $($effectiveOwners -join ', ')") + continue + } + $epochOwners = @($matchingEpoch[0].owners) + if (-not (Test-SameStringSet $effectiveOwners $epochOwners)) { + $errors.Add("epoch '$path' owner set differs: effective=$($effectiveOwners -join ', '), epoch=$($epochOwners -join ' -> ')") + } + } + + foreach ($epoch in $epochs) { + if (-not (@($exactPaths | Where-Object { + [string]::Equals($_, $epoch.path, [System.StringComparison]::Ordinal) + }).Count -eq 1)) { + $errors.Add("declared epoch '$($epoch.path)' has no exact ownership declaration") + } + } + } + catch { + $errors.Add($_.Exception.Message) + } + + $undeclaredPrefixIntersections = @($prefixIntersections | Where-Object { -not $_.declared_epoch }) + return [pscustomobject][ordered]@{ + schema_version = 2 + gate = 'plan-path-ownership' + mode = 'Ledger' + source = $Source + verdict = if ($errors.Count -eq 0) { 'PASS' } else { 'FAIL' } + counts = [ordered]@{ + maker_slices = $slices.Count + declarations = $declarations.Count + exact_paths = @($declarations | Where-Object kind -eq 'exact').Count + prefixes = @($declarations | Where-Object kind -eq 'prefix').Count + repeated_exact_paths = $repeatedExactPaths.Count + prefix_intersections = $prefixIntersections.Count + undeclared_prefix_intersections = $undeclaredPrefixIntersections.Count + declared_epochs = $epochs.Count + errors = $errors.Count + } + slices = @($slices) + declarations = @($declarations) + repeated_exact_paths = @($repeatedExactPaths) + prefix_intersections = @($prefixIntersections) + epochs = @($epochs) + errors = @($errors) + } +} + +function Resolve-DiffNamespace { + param( + [Parameter(Mandatory)][ValidateSet('evidence', 'report')][string]$Kind, + [Parameter(Mandatory)][string]$Token, + [Parameter(Mandatory)][string]$SliceName, + [Parameter(Mandatory)][AllowEmptyCollection()][object[]]$SliceDeclarations + ) + + $normalized = Normalize-OwnershipPath $Token + if (-not ($normalized.path -eq '.agent' -or (Test-PathInsidePrefix $normalized.path '.agent'))) { + throw "$Kind namespace must remain under .agent/: '$($normalized.display)'" + } + if ($Kind -eq 'evidence' -and $normalized.kind -ne 'prefix') { + throw "evidence namespace must be a terminal /** prefix: '$($normalized.display)'" + } + + $sliceSlug = $SliceName.ToLowerInvariant() + $canonical = if ($Kind -eq 'evidence') { + ".agent/reports/evidence/production-ready/$sliceSlug/**" + } + else { + ".agent/reports/production-ready/$sliceSlug/**" + } + $isCanonical = [string]::Equals($normalized.display, $canonical, [System.StringComparison]::Ordinal) + $isLiteralException = @($SliceDeclarations | Where-Object { + [string]::Equals($_.display, $normalized.display, [System.StringComparison]::Ordinal) + }).Count -eq 1 + if (-not $isCanonical -and -not $isLiteralException) { + throw "$Kind namespace '$($normalized.display)' is neither canonical '$canonical' nor a literal declaration in slice '$SliceName'" + } + + return [pscustomobject][ordered]@{ + kind = $Kind + path = $normalized.path + display = $normalized.display + match_kind = $normalized.kind + policy = if ($isCanonical) { 'canonical-derived-default' } else { 'literal-row-exception' } + } +} + +function ConvertFrom-GitNameStatusLines { + param([Parameter(Mandatory)][AllowEmptyCollection()][object[]]$Lines) + + $entries = [System.Collections.Generic.List[object]]::new() + $errors = [System.Collections.Generic.List[string]]::new() + foreach ($lineObject in $Lines) { + $line = [string]$lineObject + if ([string]::IsNullOrWhiteSpace($line)) { continue } + $parts = @($line -split "`t") + if ($parts.Count -lt 2) { + $errors.Add("malformed git diff --name-status line: '$line'") + continue + } + $status = $parts[0].Trim() + $kind = if ($status.Length -gt 0) { $status.Substring(0, 1).ToUpperInvariant() } else { '' } + $expectedPaths = if ($kind -in @('R', 'C')) { 2 } else { 1 } + if ($kind -notin @('A', 'M', 'D', 'T', 'R', 'C')) { + $errors.Add("unsupported or unresolved git diff status '$status'") + } + if (($parts.Count - 1) -ne $expectedPaths) { + $errors.Add("git diff status '$status' emitted $($parts.Count - 1) paths, expected $expectedPaths") + continue + } + + $paths = [System.Collections.Generic.List[string]]::new() + try { + for ($index = 1; $index -lt $parts.Count; $index++) { + $paths.Add((Normalize-GitPath $parts[$index])) + } + $entries.Add([pscustomobject][ordered]@{ + status = $status + paths = @($paths) + raw = $line + }) + } + catch { + $errors.Add($_.Exception.Message) + } + } + return [pscustomobject][ordered]@{ entries = @($entries); errors = @($errors) } +} + +function Invoke-DiffEntryAudit { + param( + [Parameter(Mandatory)][AllowEmptyCollection()][object[]]$Entries, + [Parameter(Mandatory)][AllowEmptyCollection()][object[]]$SliceDeclarations, + [Parameter(Mandatory)]$Evidence, + [Parameter(Mandatory)]$Report + ) + + $changedPaths = [System.Collections.Generic.List[object]]::new() + $violations = [System.Collections.Generic.List[object]]::new() + foreach ($entry in $Entries) { + foreach ($path in $entry.paths) { + $ownershipMatches = @($SliceDeclarations | Where-Object { Test-DeclarationMatchesPath $_ $path }) + $evidenceMatch = if ($Evidence.match_kind -eq 'exact') { + [string]::Equals($Evidence.path, $path, [System.StringComparison]::Ordinal) + } + else { Test-PathInsidePrefix $path $Evidence.path } + $reportMatch = if ($Report.match_kind -eq 'exact') { + [string]::Equals($Report.path, $path, [System.StringComparison]::Ordinal) + } + else { Test-PathInsidePrefix $path $Report.path } + + $allowedBy = [System.Collections.Generic.List[string]]::new() + if ($ownershipMatches.Count -gt 0) { $allowedBy.Add('slice-declaration') } + if ($evidenceMatch) { $allowedBy.Add('evidence-namespace') } + if ($reportMatch) { $allowedBy.Add('report-namespace') } + $pathEntry = [pscustomobject][ordered]@{ + status = $entry.status + path = $path + allowed = $allowedBy.Count -gt 0 + allowed_by = @($allowedBy) + ownership_matches = @($ownershipMatches | ForEach-Object display) + } + $changedPaths.Add($pathEntry) + if ($allowedBy.Count -eq 0) { + $violations.Add([pscustomobject][ordered]@{ + status = $entry.status + path = $path + reason = 'changed path is outside the named slice and validated evidence/report namespaces' + }) + } + } + } + return [pscustomobject][ordered]@{ + changed_paths = @($changedPaths) + violations = @($violations) + } +} + +function Resolve-ExactCommit { + param( + [Parameter(Mandatory)][string]$Repository, + [Parameter(Mandatory)][string]$Revision, + [Parameter(Mandatory)][string]$Label + ) + + if ($Revision -notmatch '^[0-9A-Fa-f]{40}$') { + throw "$Label must be a full 40-hex commit object ID" + } + $output = @(& git -C $Repository rev-parse --verify "$Revision^{commit}" 2>&1) + $exitCode = $LASTEXITCODE + if ($exitCode -ne 0) { throw "$Label commit '$Revision' is not resolvable: $($output -join ' ')" } + $resolved = ([string]$output[-1]).Trim().ToLowerInvariant() + if ($resolved -notmatch '^[0-9a-f]{40}$') { throw "$Label resolved to invalid commit identity '$resolved'" } + return $resolved +} + +function New-SyntheticPlan { + param( + [Parameter(Mandatory)][string]$Rows, + [Parameter(Mandatory)][AllowEmptyString()][string]$EpochRows + ) + return @" +## 4. Worktree and Ownership Matrix + +| Slice | Branch | Exclusive maker paths | Dependencies | Required proof | +| --- | --- | --- | --- | --- | +$Rows + +### 4.1 Ownership Epochs and Automated Overlap Gate + +| Exact path | Current/first epoch | Next epoch | Transfer gate | +| --- | --- | --- | --- | +$EpochRows + +### 4.2 Exact Ownership of Failures +"@ +} + +function Assert-SelfTestCondition { + param([bool]$Condition, [string]$Message) + if (-not $Condition) { throw "SELFTEST FAIL: $Message" } +} + +function Invoke-SelfTest { + $reorderedEpoch = New-SyntheticPlan -Rows "| A | ``work/a`` | ``src/shared.go`` | none | proof |`n| B | ``work/b`` | ``src/shared.go`` | A integrated | proof |" -EpochRows '| `src/shared.go` | B | A | B checker and post-review PASS, commit integrated, A rebased |' + $reorderedResult = Invoke-OwnershipAudit $reorderedEpoch 'selftest-reordered-epoch' + Assert-SelfTestCondition ($reorderedResult.verdict -eq 'PASS') ("epoch owner set fixture failed: " + ($reorderedResult.errors -join '; ')) + + $undeclared = New-SyntheticPlan -Rows "| A | ``work/a`` | ``src/shared.go`` | none | proof |`n| B | ``work/b`` | ``src/shared.go`` | none | proof |" -EpochRows '' + Assert-SelfTestCondition ((Invoke-OwnershipAudit $undeclared 'selftest-undeclared').verdict -eq 'FAIL') 'undeclared exact overlap was accepted' + + $declaredPrefix = New-SyntheticPlan -Rows "| A | ``work/a`` | ``src/shared.go`` | none | proof |`n| B | ``work/b`` | ``src/**`` only | A integrated | proof |" -EpochRows '| `src/shared.go` | A | B | A checker and post-review PASS, commit integrated, B rebased |' + $declaredPrefixResult = Invoke-OwnershipAudit $declaredPrefix 'selftest-declared-prefix' + Assert-SelfTestCondition ($declaredPrefixResult.verdict -eq 'PASS' -and $declaredPrefixResult.counts.prefix_intersections -eq 1) ("declared exact/prefix epoch failed: " + ($declaredPrefixResult.errors -join '; ')) + + $prefix = New-SyntheticPlan -Rows "| A | ``work/a`` | ``src/**`` | none | proof |`n| B | ``work/b`` | ``src/child.go`` | none | proof |" -EpochRows '' + $prefixResult = Invoke-OwnershipAudit $prefix 'selftest-prefix' + Assert-SelfTestCondition ($prefixResult.verdict -eq 'FAIL' -and $prefixResult.counts.undeclared_prefix_intersections -eq 1) 'undeclared prefix/exact overlap was accepted' + + $prefixPrefix = New-SyntheticPlan -Rows "| A | ``work/a`` | ``src/**`` | none | proof |`n| B | ``work/b`` | ``src/child/**`` | none | proof |" -EpochRows '' + Assert-SelfTestCondition ((Invoke-OwnershipAudit $prefixPrefix 'selftest-prefix-prefix').verdict -eq 'FAIL') 'prefix/prefix overlap was accepted' + + $wildcard = New-SyntheticPlan '| A | `work/a` | `src/*.go` | none | proof |' '' + Assert-SelfTestCondition ((Invoke-OwnershipAudit $wildcard 'selftest-wildcard').verdict -eq 'FAIL') 'unknown wildcard ownership scope was accepted' + + $descriptive = New-SyntheticPlan '| A | `work/a` | `src/a.go` and friends | none | proof |' '' + Assert-SelfTestCondition ((Invoke-OwnershipAudit $descriptive 'selftest-descriptive').verdict -eq 'FAIL') 'descriptive ownership scope outside code spans was accepted' + + $qualifiers = New-SyntheticPlan '| A | `work/a` | new `src/a.go`, generated `src/generated.go`, legacy exact report `.agent/reports/a.md`, legacy evidence prefix `.agent/specs/a/evidence/**` only | none | proof |' '' + $qualifierResult = Invoke-OwnershipAudit $qualifiers 'selftest-qualifiers' + Assert-SelfTestCondition ($qualifierResult.verdict -eq 'PASS') ("literal qualifier grammar failed: " + ($qualifierResult.errors -join '; ')) + + $wrongEpoch = New-SyntheticPlan -Rows "| A | ``work/a`` | ``src/shared.go`` | none | proof |`n| B | ``work/b`` | ``src/shared.go`` | none | proof |" -EpochRows '| `src/shared.go` | A | C | A checker and post-review PASS, commit integrated, C rebased |' + Assert-SelfTestCondition ((Invoke-OwnershipAudit $wrongEpoch 'selftest-wrong-epoch').verdict -eq 'FAIL') 'wrong declared epoch owner set was accepted' + + $vagueEpoch = New-SyntheticPlan -Rows "| A | ``work/a`` | ``src/shared.go`` | none | proof |`n| B | ``work/b`` | ``src/shared.go`` | none | proof |" -EpochRows '| `src/shared.go` | A | B | Someone will take care of this eventually when circumstances permit |' + Assert-SelfTestCondition ((Invoke-OwnershipAudit $vagueEpoch 'selftest-vague-epoch').verdict -eq 'FAIL') 'vague epoch transfer prose was accepted as a concrete gate' + + $diffPlan = New-SyntheticPlan '| DB-X | `work/db-x` | `src/owned.go`, legacy exact report `.agent/reports/legacy-maker.md`, legacy evidence prefix `.agent/specs/db-x/evidence/**` | none | proof |' '' + $diffLedger = Invoke-OwnershipAudit $diffPlan 'selftest-diff-ledger' + Assert-SelfTestCondition ($diffLedger.verdict -eq 'PASS') ("diff ledger fixture failed: " + ($diffLedger.errors -join '; ')) + $diffDeclarations = @($diffLedger.declarations | Where-Object owner -ceq 'DB-X') + $evidence = Resolve-DiffNamespace -Kind evidence -Token '.agent/specs/db-x/evidence/**' -SliceName DB-X -SliceDeclarations $diffDeclarations + $report = Resolve-DiffNamespace -Kind report -Token '.agent/reports/legacy-maker.md' -SliceName DB-X -SliceDeclarations $diffDeclarations + + $validEntries = @( + [pscustomobject]@{ status = 'M'; paths = @('src/owned.go'); raw = "M`tsrc/owned.go" }, + [pscustomobject]@{ status = 'A'; paths = @('.agent/specs/db-x/evidence/proof.json'); raw = "A`t.agent/specs/db-x/evidence/proof.json" }, + [pscustomobject]@{ status = 'A'; paths = @('.agent/reports/legacy-maker.md'); raw = "A`t.agent/reports/legacy-maker.md" } + ) + $validDiff = Invoke-DiffEntryAudit $validEntries $diffDeclarations $evidence $report + Assert-SelfTestCondition ($validDiff.violations.Count -eq 0) 'declared diff paths were rejected' + + $undeclaredEntries = @( + [pscustomobject]@{ status = 'M'; paths = @('pkg/models/snapshot.go'); raw = "M`tpkg/models/snapshot.go" }, + [pscustomobject]@{ status = 'A'; paths = @('.agent/reports/undeclared.md'); raw = "A`t.agent/reports/undeclared.md" } + ) + $undeclaredDiff = Invoke-DiffEntryAudit $undeclaredEntries $diffDeclarations $evidence $report + Assert-SelfTestCondition ($undeclaredDiff.violations.Count -eq 2) 'undeclared product or .agent path was accepted' + + $wrongCaseDiff = Invoke-DiffEntryAudit @([pscustomobject]@{ status = 'M'; paths = @('Src/owned.go'); raw = "M`tSrc/owned.go" }) $diffDeclarations $evidence $report + Assert-SelfTestCondition ($wrongCaseDiff.violations.Count -eq 1) 'case-mismatched Git path was accepted as an exact declaration' + + $renameEntry = @([pscustomobject]@{ status = 'R100'; paths = @('src/owned.go', 'src/not-owned.go'); raw = "R100`tsrc/owned.go`tsrc/not-owned.go" }) + $renameDiff = Invoke-DiffEntryAudit $renameEntry $diffDeclarations $evidence $report + Assert-SelfTestCondition ($renameDiff.violations.Count -eq 1 -and $renameDiff.violations[0].path -eq 'src/not-owned.go') 'rename destination escaped ownership validation' + + $badNamespaceRejected = $false + try { + $null = Resolve-DiffNamespace -Kind evidence -Token '.agent/other/**' -SliceName DB-X -SliceDeclarations $diffDeclarations + } + catch { $badNamespaceRejected = $true } + Assert-SelfTestCondition $badNamespaceRejected 'undeclared evidence namespace was accepted' + + $canonicalEvidence = Resolve-DiffNamespace -Kind evidence -Token '.agent/reports/evidence/production-ready/db-x/**' -SliceName DB-X -SliceDeclarations $diffDeclarations + Assert-SelfTestCondition ($canonicalEvidence.policy -eq 'canonical-derived-default') 'canonical evidence namespace was rejected' + + $parsedRename = ConvertFrom-GitNameStatusLines @("R100`tsrc/owned.go`tsrc/not-owned.go") + Assert-SelfTestCondition ($parsedRename.errors.Count -eq 0 -and $parsedRename.entries.Count -eq 1 -and $parsedRename.entries[0].paths.Count -eq 2) 'name-status rename parsing failed' + + $parsedAgentPath = ConvertFrom-GitNameStatusLines @("A`t.agent/specs/db-x/evidence/proof.json") + Assert-SelfTestCondition ($parsedAgentPath.errors.Count -eq 0 -and $parsedAgentPath.entries[0].paths[0] -eq '.agent/specs/db-x/evidence/proof.json') '.agent path normalization stripped its leading dot' + + Write-Output 'SELFTEST PASS: assert-plan-path-ownership.ps1' +} + +if ($Help) { Show-Help; exit 0 } +if ($SelfTest) { Invoke-SelfTest; exit 0 } + +$startedAt = [DateTimeOffset]::UtcNow +$planHash = $null +$planPath = if (Test-Path -LiteralPath $Plan) { [System.IO.Path]::GetFullPath($Plan) } else { $Plan } +$artifactObject = $null +$exitCode = 1 + +try { + if (-not (Test-Path -LiteralPath $Plan -PathType Leaf)) { throw "ownership plan does not exist: $Plan" } + $planHash = (Get-FileHash -LiteralPath $Plan -Algorithm SHA256).Hash.ToLowerInvariant() + $text = Get-Content -LiteralPath $Plan -Raw + $ledger = Invoke-OwnershipAudit $text $planPath + + if ($Mode -eq 'Ledger') { + $finishedAt = [DateTimeOffset]::UtcNow + $artifactObject = [ordered]@{ + schema_version = 2 + gate = 'plan-path-ownership' + mode = 'Ledger' + verdict = $ledger.verdict + started_at = $startedAt.ToString('O') + finished_at = $finishedAt.ToString('O') + duration_seconds = [math]::Round(($finishedAt - $startedAt).TotalSeconds, 3) + plan = [ordered]@{ path = $planPath; sha256 = $planHash } + counts = $ledger.counts + slices = $ledger.slices + declarations = $ledger.declarations + repeated_exact_paths = $ledger.repeated_exact_paths + prefix_intersections = $ledger.prefix_intersections + epochs = $ledger.epochs + errors = $ledger.errors + } + $exitCode = if ($ledger.verdict -eq 'PASS') { 0 } else { 1 } + } + else { + $errors = [System.Collections.Generic.List[string]]::new() + foreach ($ledgerError in $ledger.errors) { $errors.Add("ledger: $ledgerError") } + if ([string]::IsNullOrWhiteSpace($Slice)) { $errors.Add('Diff mode requires -Slice') } + if ([string]::IsNullOrWhiteSpace($Base)) { $errors.Add('Diff mode requires -Base') } + if ([string]::IsNullOrWhiteSpace($Head)) { $errors.Add('Diff mode requires -Head') } + if ([string]::IsNullOrWhiteSpace($EvidenceNamespace)) { $errors.Add('Diff mode requires -EvidenceNamespace') } + if ([string]::IsNullOrWhiteSpace($ReportNamespace)) { $errors.Add('Diff mode requires -ReportNamespace') } + + $sliceRows = if ([string]::IsNullOrWhiteSpace($Slice)) { @() } else { @($ledger.slices | Where-Object slice -ceq $Slice) } + if ($sliceRows.Count -ne 1) { + $errors.Add("Diff mode requires exactly one maker row for slice '$Slice'; found $($sliceRows.Count)") + } + $sliceDeclarations = if ($sliceRows.Count -eq 1) { + @($ledger.declarations | Where-Object owner -ceq $Slice) + } + else { @() } + + $evidence = $null + $report = $null + if ($sliceRows.Count -eq 1 -and -not [string]::IsNullOrWhiteSpace($EvidenceNamespace)) { + try { $evidence = Resolve-DiffNamespace -Kind evidence -Token $EvidenceNamespace -SliceName $Slice -SliceDeclarations $sliceDeclarations } + catch { $errors.Add($_.Exception.Message) } + } + if ($sliceRows.Count -eq 1 -and -not [string]::IsNullOrWhiteSpace($ReportNamespace)) { + try { $report = Resolve-DiffNamespace -Kind report -Token $ReportNamespace -SliceName $Slice -SliceDeclarations $sliceDeclarations } + catch { $errors.Add($_.Exception.Message) } + } + + $repoRoot = $null + $baseResolved = $null + $headResolved = $null + $baseIsAncestor = $null + $rawDiff = @() + $parsedDiff = [pscustomobject][ordered]@{ entries = @(); errors = @() } + try { + $rootOutput = @(& git rev-parse --show-toplevel 2>&1) + if ($LASTEXITCODE -ne 0) { throw "cannot resolve git repository root: $($rootOutput -join ' ')" } + $repoRoot = [System.IO.Path]::GetFullPath(([string]$rootOutput[-1]).Trim()) + if (-not [string]::IsNullOrWhiteSpace($Base)) { $baseResolved = Resolve-ExactCommit $repoRoot $Base 'Base' } + if (-not [string]::IsNullOrWhiteSpace($Head)) { $headResolved = Resolve-ExactCommit $repoRoot $Head 'Head' } + if ($baseResolved -and $headResolved) { + if ($baseResolved -ceq $headResolved) { $errors.Add('Base and Head resolve to the same commit; maker diff is empty') } + & git -C $repoRoot merge-base --is-ancestor $baseResolved $headResolved 2>$null + $ancestorExit = $LASTEXITCODE + $baseIsAncestor = $ancestorExit -eq 0 + if ($ancestorExit -eq 1) { $errors.Add("Base '$baseResolved' is not an ancestor of Head '$headResolved'") } + elseif ($ancestorExit -ne 0) { $errors.Add("git merge-base --is-ancestor failed with exit $ancestorExit") } + $rawDiff = @(& git -C $repoRoot -c core.quotepath=false diff --name-status --find-renames --find-copies "$baseResolved..$headResolved" -- 2>&1) + if ($LASTEXITCODE -ne 0) { throw "git diff failed: $($rawDiff -join ' ')" } + $parsedDiff = ConvertFrom-GitNameStatusLines $rawDiff + foreach ($parseError in $parsedDiff.errors) { $errors.Add($parseError) } + if ($parsedDiff.entries.Count -eq 0) { $errors.Add('maker diff contains zero changed paths') } + } + } + catch { $errors.Add($_.Exception.Message) } + + $diffAudit = [pscustomobject][ordered]@{ changed_paths = @(); violations = @() } + if ($evidence -and $report -and $parsedDiff.errors.Count -eq 0) { + $diffAudit = Invoke-DiffEntryAudit $parsedDiff.entries $sliceDeclarations $evidence $report + foreach ($violation in $diffAudit.violations) { + $errors.Add("undeclared diff path [$($violation.status)] '$($violation.path)'") + } + } + + $finishedAt = [DateTimeOffset]::UtcNow + $verdict = if ($errors.Count -eq 0) { 'PASS' } else { 'FAIL' } + $artifactObject = [ordered]@{ + schema_version = 2 + gate = 'plan-path-ownership' + mode = 'Diff' + verdict = $verdict + started_at = $startedAt.ToString('O') + finished_at = $finishedAt.ToString('O') + duration_seconds = [math]::Round(($finishedAt - $startedAt).TotalSeconds, 3) + plan = [ordered]@{ path = $planPath; sha256 = $planHash; ledger_verdict = $ledger.verdict } + slice = [ordered]@{ + name = $Slice + row_count = $sliceRows.Count + declarations = $sliceDeclarations + evidence_namespace = $evidence + report_namespace = $report + } + git = [ordered]@{ + repository = $repoRoot + requested_base = $Base + resolved_base = $baseResolved + requested_head = $Head + resolved_head = $headResolved + base_is_ancestor = $baseIsAncestor + name_status_command = if ($baseResolved -and $headResolved) { "git -c core.quotepath=false diff --name-status --find-renames --find-copies $baseResolved..$headResolved --" } else { $null } + raw_name_status = @($rawDiff) + } + counts = [ordered]@{ + diff_entries = @($parsedDiff.entries).Count + changed_paths = @($diffAudit.changed_paths).Count + violations = @($diffAudit.violations).Count + errors = $errors.Count + } + diff_entries = @($parsedDiff.entries) + changed_paths = @($diffAudit.changed_paths) + violations = @($diffAudit.violations) + errors = @($errors) + } + $exitCode = if ($verdict -eq 'PASS') { 0 } else { 1 } + } +} +catch { + $finishedAt = [DateTimeOffset]::UtcNow + $artifactObject = [ordered]@{ + schema_version = 2 + gate = 'plan-path-ownership' + mode = $Mode + verdict = 'FAIL' + started_at = $startedAt.ToString('O') + finished_at = $finishedAt.ToString('O') + duration_seconds = [math]::Round(($finishedAt - $startedAt).TotalSeconds, 3) + plan = [ordered]@{ path = $planPath; sha256 = $planHash } + errors = @($_.Exception.Message) + } + $exitCode = 1 +} + +Write-Utf8NoBom $Artifact (($artifactObject | ConvertTo-Json -Depth 30) + "`n") +if ($Mode -eq 'Ledger' -and $artifactObject.Contains('counts')) { + Write-Host ("plan-path-ownership mode=Ledger verdict={0} slices={1} declarations={2} repeated_exact={3} prefix_intersections={4} errors={5}" -f $artifactObject.verdict, $artifactObject.counts.maker_slices, $artifactObject.counts.declarations, $artifactObject.counts.repeated_exact_paths, $artifactObject.counts.prefix_intersections, $artifactObject.counts.errors) +} +elseif ($Mode -eq 'Diff' -and $artifactObject.Contains('counts')) { + Write-Host ("plan-path-ownership mode=Diff verdict={0} slice={1} changed_paths={2} violations={3} errors={4}" -f $artifactObject.verdict, $Slice, $artifactObject.counts.changed_paths, $artifactObject.counts.violations, $artifactObject.counts.errors) +} +else { + Write-Host ("plan-path-ownership mode={0} verdict=FAIL" -f $Mode) +} +exit $exitCode diff --git a/scripts/production-gates/cleanup-db-sessions.ps1 b/scripts/production-gates/cleanup-db-sessions.ps1 index 661f46a9..c0d160ce 100644 --- a/scripts/production-gates/cleanup-db-sessions.ps1 +++ b/scripts/production-gates/cleanup-db-sessions.ps1 @@ -170,6 +170,14 @@ function Invoke-Psql { function Assert-SelfTest { param([bool]$Condition, [string]$Message); if (-not $Condition) { throw "SELFTEST FAIL: $Message" } } +function Get-CleanupStatus { + param([Parameter(Mandatory)][string]$Verdict, [AllowNull()]$DatabaseExistedBefore, [Parameter(Mandatory)][int]$Remaining) + if ($Verdict -ne 'PASS') { return 'FAIL' } + if ($DatabaseExistedBefore -eq $true -and $Remaining -eq 0) { return 'PASS' } + if ($DatabaseExistedBefore -eq $false -and $Remaining -eq 0) { return 'NOT_APPLICABLE' } + return 'FAIL' +} + function Invoke-SelfTest { Assert-SafeDatabaseName 'engram_prc_rg_20260710_abcd1234_r1' 'engram_prc_rg_' $unsafeRejected = $false; try { Assert-SafeDatabaseName 'engram' 'engram_prc_rg_' } catch { $unsafeRejected = $true } @@ -178,6 +186,9 @@ function Invoke-SelfTest { Assert-SelfTest ($connection.User -eq 'release_user' -and $connection.Port -eq 55432 -and $connection.SslMode -eq 'disable') 'DSN parsing failed' $protected = Protect-Text 'dsn=postgres://release_user:s3cr3t@localhost:55432/postgres?sslmode=disable password=s3cr3t' $connection Assert-SelfTest (-not $protected.Contains('s3cr3t')) 'DSN/password redaction failed' + Assert-SelfTest ((Get-CleanupStatus 'PASS' $true 0) -eq 'PASS') 'existing database cleanup status was not PASS' + Assert-SelfTest ((Get-CleanupStatus 'PASS' $false 0) -eq 'NOT_APPLICABLE') 'absent database cleanup status was not NOT_APPLICABLE' + Assert-SelfTest ((Get-CleanupStatus 'PASS' $false 1) -eq 'FAIL') 'non-zero absence proof was accepted' Write-Output 'SELFTEST PASS: cleanup-db-sessions.ps1' } @@ -189,21 +200,31 @@ if ([string]::IsNullOrWhiteSpace($RunId)) { $RunId = 'cleanup-' + [DateTimeOffse $cleanupDirectory = Join-Path $ArtifactRoot 'cleanup'; New-Item -ItemType Directory -Path $cleanupDirectory -Force | Out-Null $summaryPath = Join-Path $cleanupDirectory 'cleanup.json' -$connection = $null; $verdict = 'FAIL'; [int]$remaining = -1; $terminated = $null +$connection = $null; $verdict = 'FAIL'; [int]$remaining = -1; $terminated = $null; $databaseExistedBefore = $null $errors = [System.Collections.Generic.List[string]]::new() try { Assert-SafeDatabaseName $DatabaseName $ExpectedPrefix if ($SchemaName -notmatch '^[a-z][a-z0-9_]{0,62}$') { throw "schema '$SchemaName' is not a safe PostgreSQL identifier" } $connection = Get-ConnectionInfo $AdminDsn + # Cleanup never trusts the database component of the caller's DSN. An early + # create/start/capture failure may have used an invalid or now-missing + # database, while the run-owned database can still exist. PostgreSQL's + # maintenance database is the stable control-plane connection for DROP. + $maintenanceDatabase = 'postgres' $quotedDb = '"' + $DatabaseName.Replace('"', '""') + '"' $literalDb = $DatabaseName.Replace("'", "''") + $existsBefore = Invoke-Psql 'database-exists-before-cleanup' "SELECT count(*) FROM pg_database WHERE datname = '$literalDb';" $maintenanceDatabase (Join-Path $cleanupDirectory 'database-exists-before') $connection $PostgresContainer + [int]$existsBeforeCount = -1 + if ($existsBefore.ExitCode -ne 0) { $errors.Add("database existence check failed with exit $($existsBefore.ExitCode)") } + elseif (-not [int]::TryParse($existsBefore.Stdout.Trim(), [ref]$existsBeforeCount)) { $errors.Add("database existence check returned non-integer '$($existsBefore.Stdout.Trim())'") } + else { $databaseExistedBefore = $existsBeforeCount -gt 0 } $snapshotSql = "SELECT COALESCE(json_agg(row_to_json(s)), '[]'::json)::text FROM (SELECT pid, usename, datname, state, backend_type, application_name, client_addr::text AS client_addr, wait_event_type, wait_event, query_start FROM pg_stat_activity WHERE datname = '$literalDb' ORDER BY pid) AS s;" - $before = Invoke-Psql 'pg-stat-activity-before-cleanup' $snapshotSql $connection.Database (Join-Path $cleanupDirectory 'pg-stat-activity-before') $connection $PostgresContainer + $before = Invoke-Psql 'pg-stat-activity-before-cleanup' $snapshotSql $maintenanceDatabase (Join-Path $cleanupDirectory 'pg-stat-activity-before') $connection $PostgresContainer if ($before.ExitCode -ne 0) { $errors.Add("pg_stat_activity snapshot failed with exit $($before.ExitCode)") } $terminateSql = "SELECT COALESCE(json_agg(row_to_json(s)), '[]'::json)::text FROM (SELECT pid, pg_terminate_backend(pid) AS terminated FROM pg_stat_activity WHERE datname = '$literalDb' AND pid <> pg_backend_pid() ORDER BY pid) AS s;" - $terminate = Invoke-Psql 'terminate-database-sessions' $terminateSql $connection.Database (Join-Path $cleanupDirectory 'terminate-sessions') $connection $PostgresContainer + $terminate = Invoke-Psql 'terminate-database-sessions' $terminateSql $maintenanceDatabase (Join-Path $cleanupDirectory 'terminate-sessions') $connection $PostgresContainer if ($terminate.ExitCode -ne 0) { $errors.Add("session termination failed with exit $($terminate.ExitCode)") } else { try { @@ -215,9 +236,9 @@ try { catch { $errors.Add("could not parse termination result: $($_.Exception.Message)") } } - $drop = Invoke-Psql 'drop-fresh-database' "DROP DATABASE IF EXISTS $quotedDb WITH (FORCE);" $connection.Database (Join-Path $cleanupDirectory 'drop-database') $connection $PostgresContainer + $drop = Invoke-Psql 'drop-fresh-database' "DROP DATABASE IF EXISTS $quotedDb WITH (FORCE);" $maintenanceDatabase (Join-Path $cleanupDirectory 'drop-database') $connection $PostgresContainer if ($drop.ExitCode -ne 0) { $errors.Add("database drop failed with exit $($drop.ExitCode)") } - $verify = Invoke-Psql 'verify-database-absent' "SELECT count(*) FROM pg_database WHERE datname = '$literalDb';" $connection.Database (Join-Path $cleanupDirectory 'verify-database-absent') $connection $PostgresContainer + $verify = Invoke-Psql 'verify-database-absent' "SELECT count(*) FROM pg_database WHERE datname = '$literalDb';" $maintenanceDatabase (Join-Path $cleanupDirectory 'verify-database-absent') $connection $PostgresContainer if ($verify.ExitCode -ne 0) { $errors.Add("database absence verification failed with exit $($verify.ExitCode)") } elseif (-not [int]::TryParse($verify.Stdout.Trim(), [ref]$remaining)) { $errors.Add("database absence verification returned non-integer '$($verify.Stdout.Trim())'") } elseif ($remaining -ne 0) { $errors.Add('database still exists after cleanup') } @@ -225,11 +246,14 @@ try { } catch { $errors.Add($_.Exception.Message) } finally { + $cleanupStatus = Get-CleanupStatus $verdict $databaseExistedBefore $remaining $summary = [pscustomobject]@{ schema_version = 1; run_id = $RunId; timestamp = [DateTimeOffset]::UtcNow.ToString('O'); verdict = $verdict database = $DatabaseName; schema = $SchemaName; database_schema_identity = "$DatabaseName.$SchemaName" admin_dsn = if ($null -ne $connection) { Get-RedactedDsn $AdminDsn } else { 'REDACTED' } postgres_container = if ([string]::IsNullOrWhiteSpace($PostgresContainer)) { $null } else { $PostgresContainer } + cleanup_status = $cleanupStatus; cleanup_attempted = $script:CommandRecords.Count -gt 0; database_existed_before = $databaseExistedBefore + absence_verified = $remaining -eq 0 terminated_sessions = $terminated; remaining_database_count = $remaining commands = @($script:CommandRecords); errors = @($errors) } diff --git a/scripts/production-gates/run-critical-suite.ps1 b/scripts/production-gates/run-critical-suite.ps1 new file mode 100644 index 00000000..beab12da --- /dev/null +++ b/scripts/production-gates/run-critical-suite.ps1 @@ -0,0 +1,375 @@ +[CmdletBinding()] +param( + [string]$Config = '.agent/critical-suite.config.yaml', + [string]$Run, + [string]$ArtifactRoot = '.agent/reports/evidence/production-ready/release-gates-foundation/critical-suite-runner', + [string]$RunId, + [switch]$SelfTest, + [switch]$Help +) + +Set-StrictMode -Version Latest +$ErrorActionPreference = 'Stop' +$script:CommandRecords = [System.Collections.Generic.List[object]]::new() + +function Show-Help { + @' +run-critical-suite.ps1 + +Validates .agent/critical-suite.config.yaml, executes the exact tracked Go +critical-suite command, captures raw stdout/stderr and every child exit code, +then applies assert-go-test-json.ps1 with exact skip identities. + +Usage: + pwsh ./scripts/production-gates/run-critical-suite.ps1 \ + -Config .agent/critical-suite.config.yaml [-Run ] + +Exit 0 requires a valid tracked config, at least one critical Go test, go test +exit 0, JSON parser exit 0, no unexpected skips, and a PASS machine summary. +'@ | Write-Output +} + +function Write-Utf8NoBom { + param([Parameter(Mandatory)][string]$Path, [Parameter(Mandatory)][AllowEmptyString()][string]$Content) + $parent = Split-Path -Parent $Path + if ($parent) { New-Item -ItemType Directory -Path $parent -Force | Out-Null } + [System.IO.File]::WriteAllText([System.IO.Path]::GetFullPath($Path), $Content, [System.Text.UTF8Encoding]::new($false)) +} + +function Get-Sha256 { + param([Parameter(Mandatory)][string]$Path) + return (Get-FileHash -LiteralPath $Path -Algorithm SHA256).Hash +} + +function Quote-CommandArgument { + param([Parameter(Mandatory)][AllowEmptyString()][string]$Value) + if ($Value -match '^[A-Za-z0-9_./:=+,-]+$') { return $Value } + return '"' + $Value.Replace('"', '\"') + '"' +} + +function Invoke-CapturedProcess { + param( + [Parameter(Mandatory)][string]$Name, + [Parameter(Mandatory)][string]$Executable, + [string[]]$Arguments = @(), + [Parameter(Mandatory)][string]$StdoutPath, + [Parameter(Mandatory)][string]$StderrPath, + [ValidateRange(1, 7200)][int]$TimeoutSeconds = 1800 + ) + + $startedAt = [DateTimeOffset]::UtcNow + $exitCode = 127 + $timedOut = $false + $stdout = '' + $stderr = '' + $process = $null + try { + $info = [System.Diagnostics.ProcessStartInfo]::new() + $info.FileName = $Executable + $info.UseShellExecute = $false + $info.CreateNoWindow = $true + $info.RedirectStandardOutput = $true + $info.RedirectStandardError = $true + foreach ($argument in $Arguments) { [void]$info.ArgumentList.Add([string]$argument) } + $process = [System.Diagnostics.Process]::new(); $process.StartInfo = $info + if (-not $process.Start()) { throw "process '$Executable' did not start" } + $stdoutTask = $process.StandardOutput.ReadToEndAsync() + $stderrTask = $process.StandardError.ReadToEndAsync() + if (-not $process.WaitForExit($TimeoutSeconds * 1000)) { + $timedOut = $true + try { $process.Kill($true) } catch {} + [void]$process.WaitForExit(30000) + } + else { $process.WaitForExit() } + $stdout = $stdoutTask.GetAwaiter().GetResult() + $stderr = $stderrTask.GetAwaiter().GetResult() + $exitCode = if ($timedOut) { 124 } else { $process.ExitCode } + } + catch { + $stderr = "PROCESS_START_OR_CAPTURE_ERROR: $($_.Exception.Message)`n" + $exitCode = 127 + } + finally { if ($null -ne $process) { $process.Dispose() } } + + Write-Utf8NoBom $StdoutPath $stdout + Write-Utf8NoBom $StderrPath $stderr + $finishedAt = [DateTimeOffset]::UtcNow + $commandParts = [System.Collections.Generic.List[string]]::new() + $commandParts.Add((Quote-CommandArgument $Executable)) + foreach ($argument in $Arguments) { $commandParts.Add((Quote-CommandArgument ([string]$argument))) } + $record = [pscustomobject][ordered]@{ + name = $Name; executable = $Executable; arguments = @($Arguments) + command = $commandParts -join ' ' + started_at = $startedAt.ToString('O'); finished_at = $finishedAt.ToString('O') + duration_seconds = [math]::Round(($finishedAt - $startedAt).TotalSeconds, 3) + exit_code = $exitCode; timed_out = $timedOut + stdout = [System.IO.Path]::GetFullPath($StdoutPath); stderr = [System.IO.Path]::GetFullPath($StderrPath) + } + $script:CommandRecords.Add($record) + return [pscustomobject]@{ ExitCode = $exitCode; Stdout = $stdout; Stderr = $stderr; Record = $record } +} + +function Unquote-YamlScalar { + param([Parameter(Mandatory)][AllowEmptyString()][string]$Value) + $trimmed = $Value.Trim() + if ($trimmed.Length -ge 2 -and (($trimmed[0] -eq '"' -and $trimmed[-1] -eq '"') -or ($trimmed[0] -eq "'" -and $trimmed[-1] -eq "'"))) { + return $trimmed.Substring(1, $trimmed.Length - 2) + } + return $trimmed +} + +function Assert-ContainsExactLine { + param( + [Parameter(Mandatory)][string]$Text, + [Parameter(Mandatory)][string]$Line, + [Parameter(Mandatory)][string]$Name + ) + $count = @(($Text -split "`r?`n") | Where-Object { $_ -ceq $Line }).Count + if ($count -ne 1) { throw "critical config $Name must appear exactly once; found $count" } +} + +function Get-TopLevelScalar { + param([Parameter(Mandatory)][string]$Text, [Parameter(Mandatory)][string]$Name) + $matches = [regex]::Matches($Text, ('(?m)^' + [regex]::Escape($Name) + ':\s*(?[^\r\n#]+?)\s*$')) + if ($matches.Count -ne 1) { throw "critical config top-level '$Name' must appear exactly once; found $($matches.Count)" } + return Unquote-YamlScalar $matches[0].Groups['value'].Value +} + +function Get-TopLevelSection { + param([Parameter(Mandatory)][string]$Text, [Parameter(Mandatory)][string]$Name) + $headingMatches = [regex]::Matches($Text, ('(?m)^' + [regex]::Escape($Name) + ':\s*$')) + if ($headingMatches.Count -ne 1) { throw "critical config section '$Name' must appear exactly once; found $($headingMatches.Count)" } + $match = [regex]::Match($Text, ('(?ms)^' + [regex]::Escape($Name) + ':\s*\r?\n(?.*?)(?=^[A-Za-z0-9_-]+:\s*(?:\r?\n|[^\r\n])|\z)')) + if (-not $match.Success) { throw "critical config section '$Name' has no parseable body" } + return $match.Groups['body'].Value +} + +function Test-ValidSkipIdentity { + param([AllowNull()][AllowEmptyString()][string]$Identity) + if ([string]::IsNullOrWhiteSpace($Identity) -or $Identity.Length -gt 512) { return $false } + if ($Identity -match '[\x00-\x1f\x7f*?^$\\(){}\[\]|+]') { return $false } + if ($Identity -notmatch '^[A-Za-z0-9._/-]+$') { return $false } + return $Identity.Contains('/') +} + +function Read-CriticalConfig { + param([Parameter(Mandatory)][string]$Path) + if (-not (Test-Path -LiteralPath $Path -PathType Leaf)) { throw "critical config does not exist: $Path" } + $text = Get-Content -LiteralPath $Path -Raw + if ((Get-TopLevelScalar $text 'version') -ne '1') { throw 'critical config version must be 1' } + $testGlob = Get-TopLevelScalar $text 'test_glob' + if ($testGlob -ne 'tests/critical/**/*.{go,py,ts,js,rs,cs,sh}') { throw "unsupported critical test_glob '$testGlob'" } + if ((Get-TopLevelScalar $text 'fail_on_missing') -ne 'error') { throw 'critical fail_on_missing must be error' } + [int]$timeoutMinutes = 0 + if (-not [int]::TryParse((Get-TopLevelScalar $text 'timeout_minutes'), [ref]$timeoutMinutes) -or $timeoutMinutes -lt 1 -or $timeoutMinutes -gt 120) { throw 'critical timeout_minutes must be 1..120' } + foreach ($section in @('runner', 'database_gate', 'coverage', 'evidence', 'security')) { [void](Get-TopLevelSection $text $section) } + + $requiredExactLines = [ordered]@{ + 'category smoke' = ' - smoke' + 'category behavioral' = ' - behavioral' + 'category data consistency' = ' - data-consistency' + 'dev stand requirement' = 'dev_stand_required: true' + 'database command' = ' command: "pwsh -NoProfile -File scripts/production-gates/run-db-suite.ps1 -FreshDatabase -Package ./... -Race -FailOnUnexpectedSkip"' + 'database image' = ' postgres_image: "pgvector/pgvector:pg17"' + 'repeat source' = ' repeat_source: "run-db-suite.ps1 default (3); callers do not duplicate the value"' + 'fresh database policy' = ' fresh_database_per_repeat: true' + 'database schema' = ' schema: "public"' + 'package parallelism' = ' package_parallelism: 1' + 'test parallelism' = ' test_parallelism: 1' + 'race detector' = ' race_detector: true' + 'connection budget' = ' connection_budget: 20' + 'post-test sessions' = ' post_test_sessions_required: 0' + 'cleanup requirement' = ' cleanup_required: true' + 'coverage profile requirement' = ' profile_required_on_all_operating_systems: true' + 'overall coverage floor' = ' overall_statement_minimum_percent: 60' + 'module coverage floor' = ' "internal/module/": 75' + 'engramcore coverage floor' = ' "internal/handlers/engramcore": 60' + 'loom coverage floor' = ' "internal/handlers/loom": 70' + 'launcher coverage floor' = ' "cmd/engram/": 10' + 'server coverage floor' = ' "cmd/engram-server/": 10' + 'update coverage floor' = ' "internal/update/": 20' + 'worker coverage floor' = ' "internal/worker/": 55' + 'MCP coverage floor' = ' "internal/mcp/": 55' + 'database coverage floor' = ' "internal/db/gorm/": 55' + 'evidence root' = ' root: ".agent/reports/evidence/production-ready/release-gates-foundation"' + 'raw stdout evidence' = ' require_raw_stdout: true' + 'raw stderr evidence' = ' require_raw_stderr: true' + 'machine summary evidence' = ' require_machine_summary: true' + 'child exits evidence' = ' require_child_exit_codes: true' + 'database identity evidence' = ' require_database_schema_identity: true' + 'session evidence' = ' require_pg_stat_activity: true' + 'cleanup evidence' = ' require_cleanup_result: true' + 'image scan command' = ' command: "pwsh -NoProfile -File scripts/production-gates/run-db-suite.ps1 -DevStandAction Scan -ComposeProject engram-critical-stand -ComposeFile docker-compose.yml"' + 'image scanner' = ' scanner: "docker scout cves"' + 'image severities' = ' severities: ["critical", "high"]' + 'image findings policy' = ' fail_on_findings: true' + 'PostgreSQL image target' = ' postgres: "pgvector/pgvector:pg17"' + 'server image target' = ' server: "ghcr.io/thebtf/engram:main"' + 'operator image target' = ' operator-console: "ghcr.io/thebtf/engram-operator-console:main"' + 'forbidden synthetic tag' = ' - "engram:prc-candidate"' + } + foreach ($requiredLine in $requiredExactLines.GetEnumerator()) { + Assert-ContainsExactLine $text $requiredLine.Value $requiredLine.Key + } + if ($text -match '(?i)(?[A-Za-z0-9_]+):\s*(?.*)$') + if (-not $fieldMatch.Success) { throw "malformed runner config line '$line'" } + $name = $fieldMatch.Groups['name'].Value + if ($fields.ContainsKey($name)) { throw "duplicate runner field '$name'" } + $value = $fieldMatch.Groups['value'].Value.Trim() + $fields[$name] = $value + if ($name -eq 'allowed_skip_identities' -and [string]::IsNullOrWhiteSpace($value)) { + while ($index + 1 -lt $lines.Count -and $lines[$index + 1] -match '^\s{4}-\s*(?.+?)\s*$') { + $index++ + $allowed.Add((Unquote-YamlScalar ([regex]::Match($lines[$index], '^\s{4}-\s*(?.+?)\s*$').Groups['item'].Value))) + } + } + } + $expectedFields = @('command', 'transcript_parser', 'fail_on_unexpected_skip', 'allowed_skip_identities') + foreach ($field in $expectedFields) { if (-not $fields.ContainsKey($field)) { throw "runner config is missing '$field'" } } + foreach ($field in $fields.Keys) { if ($field -notin $expectedFields) { throw "unknown runner config field '$field'" } } + + $command = Unquote-YamlScalar $fields.command + $parser = Unquote-YamlScalar $fields.transcript_parser + if ($command -cne 'go test -tags=critical -json ./tests/critical/... -count=1') { throw "critical runner command drifted: '$command'" } + if ($parser -cne 'pwsh -NoProfile -File scripts/production-gates/assert-go-test-json.ps1 -FailOnUnexpectedSkip') { throw "critical transcript parser command drifted: '$parser'" } + if ((Unquote-YamlScalar $fields.fail_on_unexpected_skip).ToLowerInvariant() -ne 'true') { throw 'critical runner must fail on unexpected skips' } + if ($fields.allowed_skip_identities -notin @('[]', '') -and $allowed.Count -eq 0) { throw 'allowed_skip_identities must be [] or an exact YAML list' } + $seen = [System.Collections.Generic.HashSet[string]]::new([System.StringComparer]::Ordinal) + foreach ($identity in $allowed) { + if (-not (Test-ValidSkipIdentity $identity)) { throw "invalid exact skip identity '$identity'" } + if (-not $seen.Add($identity)) { throw "duplicate exact skip identity '$identity'" } + } + + $criticalFiles = @(Get-ChildItem -LiteralPath 'tests/critical' -Recurse -File -ErrorAction SilentlyContinue | Where-Object Extension -in @('.go', '.py', '.ts', '.js', '.rs', '.cs', '.sh')) + $goFiles = @($criticalFiles | Where-Object Extension -eq '.go') + if ($criticalFiles.Count -eq 0 -or $goFiles.Count -eq 0) { throw 'critical test glob resolved no Go tests' } + return [pscustomobject]@{ + Text = $text; Sha256 = Get-Sha256 $Path; TimeoutMinutes = $timeoutMinutes + Command = $command; ParserCommand = $parser; AllowedSkipIdentities = @($allowed) + MatchedFiles = @($criticalFiles.FullName); MatchedGoFiles = @($goFiles.FullName) + } +} + +function Assert-SelfTestCondition { param([bool]$Condition, [string]$Message); if (-not $Condition) { throw "SELFTEST FAIL: $Message" } } + +function Invoke-SelfTest { + $root = Join-Path ([System.IO.Path]::GetTempPath()) ('run-critical-suite-' + [guid]::NewGuid().ToString('N')) + New-Item -ItemType Directory -Path $root -Force | Out-Null + try { + if (-not (Test-Path -LiteralPath $Config -PathType Leaf)) { throw "SELFTEST FAIL: config fixture does not exist: $Config" } + $baseConfig = Get-Content -LiteralPath $Config -Raw + $validConfigPath = Join-Path $root 'valid.yaml'; Write-Utf8NoBom $validConfigPath $baseConfig + $parsedConfig = Read-CriticalConfig $validConfigPath + Assert-SelfTestCondition ($parsedConfig.Command -eq 'go test -tags=critical -json ./tests/critical/... -count=1') 'valid tracked config was rejected' + $configMutations = @( + @{ name = 'narrow package'; text = $baseConfig.Replace('./tests/critical/...', './tests/critical/auth/...') }, + @{ name = 'disable skip failure'; text = $baseConfig.Replace('fail_on_unexpected_skip: true', 'fail_on_unexpected_skip: false') }, + @{ name = 'broad skip identity'; text = $baseConfig.Replace('allowed_skip_identities: []', "allowed_skip_identities:`n - '.*'") }, + @{ name = 'unknown runner field'; text = $baseConfig.Replace(' fail_on_unexpected_skip: true', " fail_on_unexpected_skip: true`n surprise: true") }, + @{ name = 'disable dev stand'; text = $baseConfig.Replace('dev_stand_required: true', 'dev_stand_required: false') }, + @{ name = 'remove database race'; text = $baseConfig.Replace(' -Race ', ' ') }, + @{ name = 'weaken coverage'; text = $baseConfig.Replace('overall_statement_minimum_percent: 60', 'overall_statement_minimum_percent: 50') }, + @{ name = 'allow image findings'; text = $baseConfig.Replace(' fail_on_findings: true', ' fail_on_findings: false') }, + @{ name = 'duplicate version'; text = "version: 1`n$baseConfig" } + ) + foreach ($mutation in $configMutations) { + $path = Join-Path $root ($mutation.name.Replace(' ', '-') + '.yaml'); Write-Utf8NoBom $path $mutation.text + $rejected = $false; try { [void](Read-CriticalConfig $path) } catch { $rejected = $true } + Assert-SelfTestCondition $rejected "config mutation '$($mutation.name)' was accepted" + } + Assert-SelfTestCondition (Test-ValidSkipIdentity 'example/package/TestNeedsLinux') 'exact test identity was rejected' + foreach ($bad in @('', '.*', '^.*$', 'example/Test*', 'example|other', 'TestOnly')) { Assert-SelfTestCondition (-not (Test-ValidSkipIdentity $bad)) "broad skip identity '$bad' was accepted" } + $pwsh = (Get-Command pwsh -ErrorAction Stop).Source + $failed = Invoke-CapturedProcess 'selftest-fail' $pwsh @('-NoProfile', '-Command', 'exit 7') (Join-Path $root 'fail.stdout.log') (Join-Path $root 'fail.stderr.log') 30 + $later = Invoke-CapturedProcess 'selftest-later-pass' $pwsh @('-NoProfile', '-Command', 'exit 0') (Join-Path $root 'pass.stdout.log') (Join-Path $root 'pass.stderr.log') 30 + Assert-SelfTestCondition ($failed.ExitCode -eq 7 -and $later.ExitCode -eq 0) 'child exits were not captured independently' + Assert-SelfTestCondition (($failed.ExitCode -ne 0) -or ($later.ExitCode -ne 0)) 'later success masked earlier failure' + $missing = Invoke-CapturedProcess 'selftest-missing' ('missing-critical-runner-' + [guid]::NewGuid().ToString('N')) @() (Join-Path $root 'missing.stdout.log') (Join-Path $root 'missing.stderr.log') 30 + Assert-SelfTestCondition ($missing.ExitCode -eq 127 -and $missing.Stderr -match 'PROCESS_START_OR_CAPTURE_ERROR') 'process-start failure did not fail closed' + Write-Output 'SELFTEST PASS: run-critical-suite.ps1' + } + finally { Remove-Item -LiteralPath $root -Recurse -Force -ErrorAction SilentlyContinue } +} + +if ($Help) { Show-Help; exit 0 } +if ($SelfTest) { Invoke-SelfTest; exit 0 } + +$startedAt = [DateTimeOffset]::UtcNow +if ([string]::IsNullOrWhiteSpace($RunId)) { $RunId = $startedAt.ToString('yyyyMMddTHHmmssZ') + '-' + [guid]::NewGuid().ToString('N').Substring(0, 10) } +if ($RunId -notmatch '^[A-Za-z0-9._-]+$') { throw '-RunId may contain only letters, digits, dot, underscore, and hyphen.' } +$artifactDirectory = Join-Path $ArtifactRoot $RunId +if (Test-Path -LiteralPath $artifactDirectory) { throw "critical-suite artifact directory already exists: $artifactDirectory" } +New-Item -ItemType Directory -Path $artifactDirectory -Force | Out-Null +$errors = [System.Collections.Generic.List[string]]::new() +$configInfo = $null +$goResult = $null +$parserResult = $null +$parserSummary = $null +$goStdout = Join-Path $artifactDirectory 'go-test.stdout.jsonl' +$goStderr = Join-Path $artifactDirectory 'go-test.stderr.log' +$parserStdout = Join-Path $artifactDirectory 'json-parser.stdout.log' +$parserStderr = Join-Path $artifactDirectory 'json-parser.stderr.log' +$parserSummaryPath = Join-Path $artifactDirectory 'go-test-summary.json' + +try { + $configInfo = Read-CriticalConfig $Config + $go = (Get-Command go -ErrorAction Stop).Source + $goArguments = [System.Collections.Generic.List[string]]::new() + foreach ($argument in @('test', '-tags=critical', '-json')) { $goArguments.Add($argument) } + if (-not [string]::IsNullOrWhiteSpace($Run)) { $goArguments.Add('-run'); $goArguments.Add($Run) } + foreach ($argument in @('./tests/critical/...', '-count=1')) { $goArguments.Add($argument) } + $goResult = Invoke-CapturedProcess 'critical-go-test' $go @($goArguments) $goStdout $goStderr ($configInfo.TimeoutMinutes * 60) + if ($goResult.ExitCode -ne 0) { $errors.Add("critical go test failed with exit $($goResult.ExitCode)") } + + $pwsh = (Get-Command pwsh -ErrorAction Stop).Source + $parserScript = Join-Path $PSScriptRoot 'assert-go-test-json.ps1' + $parserArguments = [System.Collections.Generic.List[string]]::new() + foreach ($argument in @('-NoProfile', '-File', $parserScript, '-InputPath', $goStdout, '-SummaryPath', $parserSummaryPath, '-FailOnUnexpectedSkip')) { $parserArguments.Add($argument) } + if ($configInfo.AllowedSkipIdentities.Count -gt 0) { + $parserArguments.Add('-AllowedSkipIdentity') + foreach ($identity in $configInfo.AllowedSkipIdentities) { $parserArguments.Add($identity) } + } + $parserResult = Invoke-CapturedProcess 'critical-json-parser' $pwsh @($parserArguments) $parserStdout $parserStderr 120 + if ($parserResult.ExitCode -ne 0) { $errors.Add("critical JSON parser failed with exit $($parserResult.ExitCode)") } + if (-not (Test-Path -LiteralPath $parserSummaryPath -PathType Leaf)) { $errors.Add('critical JSON parser summary is missing') } + else { + try { $parserSummary = Get-Content -LiteralPath $parserSummaryPath -Raw | ConvertFrom-Json -Depth 100 } + catch { $errors.Add("critical JSON parser summary is invalid: $($_.Exception.Message)") } + if ($null -ne $parserSummary -and $parserSummary.verdict -ne 'PASS') { $errors.Add("critical JSON parser verdict is '$($parserSummary.verdict)'") } + } +} +catch { $errors.Add($_.Exception.Message) } +finally { + $commandsPath = Join-Path $artifactDirectory 'commands.json' + Write-Utf8NoBom $commandsPath ((ConvertTo-Json -InputObject @($script:CommandRecords.ToArray()) -Depth 12) + "`n") + $finishedAt = [DateTimeOffset]::UtcNow + $summary = [pscustomobject][ordered]@{ + schema_version = 1; gate = 'critical-suite'; run_id = $RunId + started_at = $startedAt.ToString('O'); finished_at = $finishedAt.ToString('O'); duration_seconds = [math]::Round(($finishedAt - $startedAt).TotalSeconds, 3) + verdict = if ($errors.Count -eq 0) { 'PASS' } else { 'FAIL' } + config = [ordered]@{ path = [System.IO.Path]::GetFullPath($Config); sha256 = if ($null -ne $configInfo) { $configInfo.Sha256 } else { $null }; command = if ($null -ne $configInfo) { $configInfo.Command } else { $null } } + run_pattern = $Run; allowed_skip_identities = if ($null -ne $configInfo) { @($configInfo.AllowedSkipIdentities) } else { @() } + matched_test_files = if ($null -ne $configInfo) { $configInfo.MatchedFiles.Count } else { 0 }; matched_go_files = if ($null -ne $configInfo) { $configInfo.MatchedGoFiles.Count } else { 0 } + go_test_exit = if ($null -ne $goResult) { $goResult.ExitCode } else { $null }; json_parser_exit = if ($null -ne $parserResult) { $parserResult.ExitCode } else { $null } + json_summary = if (Test-Path -LiteralPath $parserSummaryPath) { [System.IO.Path]::GetFullPath($parserSummaryPath) } else { $null } + counts = if ($null -ne $parserSummary) { $parserSummary.counts } else { $null } + child_commands = $script:CommandRecords.Count; nonzero_child_commands = @($script:CommandRecords | Where-Object exit_code -ne 0).Count + commands = [System.IO.Path]::GetFullPath($commandsPath); errors = @($errors); artifact_directory = [System.IO.Path]::GetFullPath($artifactDirectory) + } + $summaryPath = Join-Path $artifactDirectory 'summary.json' + Write-Utf8NoBom $summaryPath (($summary | ConvertTo-Json -Depth 20) + "`n") + Write-Host ("critical-suite verdict={0} go_test_exit={1} parser_exit={2}" -f $summary.verdict, $summary.go_test_exit, $summary.json_parser_exit) + Write-Host "summary=$([System.IO.Path]::GetFullPath($summaryPath))" +} + +if ($errors.Count -ne 0) { exit 1 } +exit 0 diff --git a/scripts/production-gates/run-db-suite.ps1 b/scripts/production-gates/run-db-suite.ps1 index faa3ff22..a2307a24 100644 --- a/scripts/production-gates/run-db-suite.ps1 +++ b/scripts/production-gates/run-db-suite.ps1 @@ -3,9 +3,10 @@ param( [string[]]$Package = @('./...'), [string]$Run, [switch]$FreshDatabase, - [ValidateRange(1, 20)][int]$Repeat = 1, + [ValidateRange(1, 20)][int]$Repeat = 3, [switch]$FailOnUnexpectedSkip, - [string[]]$AllowedSkipPattern = @(), + [Alias('AllowedSkipPattern')][string[]]$AllowedSkipIdentity = @(), + [switch]$Race, [string]$AdminDsn = $env:ENGRAM_TEST_ADMIN_DSN, [string]$PostgresContainer, [string]$PostgresImage = 'pgvector/pgvector:pg17', @@ -14,6 +15,9 @@ param( [ValidateRange(1, 120)][int]$TimeoutMinutes = 30, [string]$ArtifactRoot = '.agent/reports/evidence/production-ready/release-gates-foundation', [string]$RunId, + [ValidateSet('None', 'Up', 'Ready', 'Scan', 'Down')][string]$DevStandAction = 'None', + [string]$ComposeProject = 'engram-critical-stand', + [string]$ComposeFile = 'docker-compose.yml', [switch]$Help, [switch]$SelfTest ) @@ -34,10 +38,14 @@ can never mask an earlier failure. Raw stdout/stderr and machine JSON are under: Usage: pwsh ./scripts/production-gates/run-db-suite.ps1 \ - -FreshDatabase [-Package ./...] [-Run ''] [-Repeat 3] \ + -FreshDatabase [-Package ./...] [-Run ''] [-Repeat 3] [-Race] \ [-FailOnUnexpectedSkip] [-AdminDsn ] \ [-PostgresContainer ] + pwsh ./scripts/production-gates/run-db-suite.ps1 \ + -DevStandAction Up|Ready|Scan|Down \ + [-ComposeProject engram-critical-stand] [-ComposeFile docker-compose.yml] + Required behavior: * -FreshDatabase is mandatory. * Each repeat creates a unique `.public` identity. @@ -54,13 +62,23 @@ Options: -Package Go package patterns; whitespace-delimited input expands. -Run Go test -run regular expression. -FreshDatabase Required fail-closed release mode. - -Repeat Fresh database repetitions (1..20). + -Repeat Fresh database repetitions (1..20); default is 3. -FailOnUnexpectedSkip Fail on non-allowlisted test/package skips. - -AllowedSkipPattern Explicit regex allowlist. + -AllowedSkipIdentity Exact case-sensitive package or package/test allowlist. + -Race Run Go tests with the race detector inside the same + fresh-DB/JSON/coverage/cleanup evidence envelope. -CoveragePolicy Auto, Full, or Targeted. -ConnectionBudget App pool cap and required free server headroom. -AdminDsn Admin URL or ENGRAM_TEST_ADMIN_DSN; always redacted. -PostgresContainer Use psql through docker exec; else host psql. + -DevStandAction Execute the tracked isolated stand lifecycle. Up + generates a process-local cryptographic admin token, + validates exact compose service/image labels, and + proves /health + /api/ready without persisting token. + Scan runs Docker Scout against the exact running tags + and fails on any HIGH or CRITICAL vulnerability. + -ComposeProject Exact isolated compose project label. + -ComposeFile Compose file used by the tracked stand contract. Exit codes: 0 Every setup/test/parser/coverage/cleanup command passed for every repeat. @@ -119,7 +137,7 @@ function Protect-Text { param([string]$Text, [Parameter(Mandatory)]$Connection, [string[]]$SensitiveValues = @()) if ($null -eq $Text) { return '' } $protected = [string]$Text - foreach ($value in $SensitiveValues) { if ($value) { $protected = $protected.Replace($value, 'REDACTED_DATABASE_DSN') } } + foreach ($value in $SensitiveValues) { if ($value) { $protected = $protected.Replace($value, 'REDACTED_SENSITIVE_VALUE') } } if ($Connection.Original) { $protected = $protected.Replace($Connection.Original, (Get-RedactedDsn $Connection.Original)) } if ($Connection.Password) { $protected = $protected.Replace(":" + $Connection.Password + "@", ':REDACTED@') @@ -233,6 +251,278 @@ function Test-NoResidualRunSessions { return $SessionCount -eq 0 } +function Test-ReadyStatusPayload { + param([AllowNull()][AllowEmptyString()][string]$Payload) + if ([string]::IsNullOrWhiteSpace($Payload)) { return $false } + try { $parsed = $Payload | ConvertFrom-Json -Depth 20 } catch { return $false } + $statusProperty = $parsed.PSObject.Properties['status'] + return $null -ne $statusProperty -and [string]$statusProperty.Value -ceq 'ready' +} + +function Get-DevStandReadyEndpoints { + return @( + [pscustomobject][ordered]@{ name = 'health'; url = 'http://localhost:37778/health'; path_kind = 'direct-server' }, + [pscustomobject][ordered]@{ name = 'api-ready'; url = 'http://localhost:37778/api/ready'; path_kind = 'direct-server' }, + [pscustomobject][ordered]@{ name = 'operator-api-health'; url = 'http://localhost:3001/api/health'; path_kind = 'operator-console-proxy' }, + [pscustomobject][ordered]@{ name = 'operator-api-ready'; url = 'http://localhost:3001/api/ready'; path_kind = 'operator-console-proxy' } + ) +} + +function Get-DevStandEnvironment { + param( + [Parameter(Mandatory)][string]$Project, + [Parameter(Mandatory)][string]$AdminToken, + [Parameter(Mandatory)][string]$DatabaseDsn + ) + + return @{ + COMPOSE_PROJECT_NAME = $Project + POSTGRES_PORT = '55433' + WORKER_PORT = '37778' + OPERATOR_CONSOLE_PORT = '3001' + POSTGRES_PASSWORD = 'engram' + DATABASE_DSN = $DatabaseDsn + STAND_API_URL = 'http://localhost:37778' + STAND_OPERATOR_URL = 'http://localhost:3001' + NUXT_OPERATOR_API_TARGET = 'http://server:37777' + ENGRAM_AUTH_ADMIN_TOKEN = $AdminToken + ENGRAM_AUTH_DISABLED = 'false' + } +} + +function Get-NativeCommandPath { + param([Parameter(Mandatory)][string[]]$Names) + foreach ($name in $Names) { + $command = Get-Command $name -ErrorAction SilentlyContinue + if ($null -ne $command -and -not [string]::IsNullOrWhiteSpace($command.Source)) { return $command.Source } + } + throw "required native command was not found: $($Names -join ', ')" +} + +function Test-ExactDevStandInventory { + param([Parameter(Mandatory)][hashtable]$ActualImages) + $expectedImages = [ordered]@{ + postgres = 'pgvector/pgvector:pg17' + server = 'ghcr.io/thebtf/engram:main' + 'operator-console' = 'ghcr.io/thebtf/engram-operator-console:main' + } + $errors = [System.Collections.Generic.List[string]]::new() + foreach ($entry in $expectedImages.GetEnumerator()) { + if (-not $ActualImages.ContainsKey($entry.Key)) { $errors.Add("compose service '$($entry.Key)' is missing from the project inventory"); continue } + if (-not [string]::Equals([string]$ActualImages[$entry.Key], [string]$entry.Value, [System.StringComparison]::Ordinal)) { + $errors.Add("compose service '$($entry.Key)' image mismatch: expected '$($entry.Value)', got '$($ActualImages[$entry.Key])'") + } + } + foreach ($service in $ActualImages.Keys) { + if (-not $expectedImages.Contains($service)) { $errors.Add("unexpected compose service/image target '$service'='$($ActualImages[$service])'") } + } + [pscustomobject]@{ Pass = $errors.Count -eq 0; Expected = $expectedImages; Errors = @($errors) } +} + +function Invoke-DevStandResidualChecks { + param( + [Parameter(Mandatory)][string]$NamePrefix, + [Parameter(Mandatory)][string]$DockerPath, + [Parameter(Mandatory)][string]$Project, + [Parameter(Mandatory)][string]$ActionDirectory, + [Parameter(Mandatory)]$Connection, + [Parameter(Mandatory)][AllowEmptyCollection()][System.Collections.Generic.List[string]]$Errors + ) + $passed = $true + foreach ($residual in @( + @('containers', @('ps', '-aq', '--filter', "label=com.docker.compose.project=$Project")), + @('volumes', @('volume', 'ls', '-q', '--filter', "label=com.docker.compose.project=$Project")), + @('networks', @('network', 'ls', '-q', '--filter', "label=com.docker.compose.project=$Project")) + )) { + $check = Invoke-CapturedProcess "$NamePrefix-$($residual[0])" $DockerPath $residual[1] @{} (Join-Path $ActionDirectory "$NamePrefix-$($residual[0]).stdout.log") (Join-Path $ActionDirectory "$NamePrefix-$($residual[0]).stderr.log") $Connection @() 30 + if ($check.ExitCode -ne 0) { + $passed = $false + $Errors.Add("residual $($residual[0]) check failed with exit $($check.ExitCode)") + } + elseif (-not [string]::IsNullOrWhiteSpace($check.Stdout)) { + $passed = $false + $Errors.Add("residual $($residual[0]) remain for compose project '$Project': $($check.Stdout.Trim())") + } + } + return $passed +} + +function Invoke-DevStandContract { + param( + [Parameter(Mandatory)][ValidateSet('Up', 'Ready', 'Scan', 'Down')][string]$Action, + [Parameter(Mandatory)][string]$Project, + [Parameter(Mandatory)][string]$File, + [Parameter(Mandatory)][string]$EvidenceRoot, + [string]$RequestedRunId + ) + + if ($Project -notmatch '^[a-z0-9][a-z0-9_-]{2,62}$') { throw "unsafe compose project '$Project'" } + if (-not (Test-Path -LiteralPath $File -PathType Leaf)) { throw "compose file does not exist: $File" } + $actionToken = [guid]::NewGuid().ToString('N').Substring(0, 10) + if ([string]::IsNullOrWhiteSpace($RequestedRunId)) { $RequestedRunId = [DateTimeOffset]::UtcNow.ToString('yyyyMMddTHHmmssZ') + '-' + $actionToken } + if ($RequestedRunId -notmatch '^[A-Za-z0-9._-]+$') { throw '-RunId may contain only letters, digits, dot, underscore, and hyphen.' } + + $actionDirectory = Join-Path (Join-Path $EvidenceRoot 'dev-stand') ("$RequestedRunId-$($Action.ToLowerInvariant())") + if (Test-Path -LiteralPath $actionDirectory) { throw "dev-stand artifact directory already exists: $actionDirectory" } + New-Item -ItemType Directory -Path $actionDirectory -Force | Out-Null + $script:CommandRecords.Clear() + $startedAt = [DateTimeOffset]::UtcNow + $errors = [System.Collections.Generic.List[string]]::new() + $actualImages = @{} + $actualImageIds = @{} + $tagImageIds = @{} + $imageIdentityPass = $true + $vulnerabilityScans = [System.Collections.Generic.List[object]]::new() + $tokenGenerated = $false + $ephemeralToken = $null + $tokenPersisted = $false + $automaticFailureCleanup = $false + $residualChecksPerformed = $false + $residualResourcesZero = $null + $connection = [pscustomobject]@{ Original = ''; Password = ''; Uri = $null; User = ''; Host = ''; Port = 0; Database = ''; SslMode = $null } + $dockerPath = Get-NativeCommandPath @('docker.exe', 'docker') + $curlPath = $null + if ($Action -in @('Up', 'Ready')) { $curlPath = Get-NativeCommandPath @('curl.exe', 'curl') } + $standDsn = 'postgres://engram:engram@postgres:5432/engram?sslmode=disable' + $sensitiveValues = [System.Collections.Generic.List[string]]::new(); $sensitiveValues.Add($standDsn) + + try { + if ($Action -eq 'Up') { + $tokenBytes = [System.Security.Cryptography.RandomNumberGenerator]::GetBytes(32) + $ephemeralToken = [Convert]::ToHexString($tokenBytes).ToLowerInvariant() + $tokenGenerated = $true; $sensitiveValues.Add($ephemeralToken) + $standEnvironment = Get-DevStandEnvironment -Project $Project -AdminToken $ephemeralToken -DatabaseDsn $standDsn + $up = Invoke-CapturedProcess 'dev-stand-up' $dockerPath @('compose', '-p', $Project, '-f', $File, 'up', '-d', '--build', '--wait') $standEnvironment (Join-Path $actionDirectory 'compose-up.stdout.log') (Join-Path $actionDirectory 'compose-up.stderr.log') $connection @($sensitiveValues) 600 + if ($up.ExitCode -ne 0) { throw "compose up failed with exit $($up.ExitCode)" } + } + + if ($Action -in @('Up', 'Ready')) { + $pgReady = Invoke-CapturedProcess 'dev-stand-postgres-ready' $dockerPath @('compose', '-p', $Project, '-f', $File, 'exec', '-T', 'postgres', 'pg_isready', '-U', 'engram', '-d', 'engram') @{} (Join-Path $actionDirectory 'postgres-ready.stdout.log') (Join-Path $actionDirectory 'postgres-ready.stderr.log') $connection @($sensitiveValues) 30 + if ($pgReady.ExitCode -ne 0) { throw "PostgreSQL readiness failed with exit $($pgReady.ExitCode)" } + foreach ($endpoint in @(Get-DevStandReadyEndpoints)) { + $http = Invoke-CapturedProcess "dev-stand-$($endpoint.name)" $curlPath @('-fsS', '--max-time', '15', $endpoint.url) @{} (Join-Path $actionDirectory "$($endpoint.name).stdout.log") (Join-Path $actionDirectory "$($endpoint.name).stderr.log") $connection @($sensitiveValues) 30 + if ($http.ExitCode -ne 0) { throw "$($endpoint.url) failed with exit $($http.ExitCode)" } + if (-not (Test-ReadyStatusPayload $http.Stdout)) { throw "$($endpoint.url) returned HTTP success without semantic status=ready" } + } + } + + if ($Action -in @('Up', 'Ready', 'Scan')) { + $inventory = Invoke-CapturedProcess 'dev-stand-image-inventory' $dockerPath @('ps', '--filter', "label=com.docker.compose.project=$Project", '--format', '{{.ID}}|{{.Label "com.docker.compose.service"}}') @{} (Join-Path $actionDirectory 'image-inventory.stdout.log') (Join-Path $actionDirectory 'image-inventory.stderr.log') $connection @($sensitiveValues) 30 + if ($inventory.ExitCode -ne 0) { throw "compose image inventory failed with exit $($inventory.ExitCode)" } + foreach ($line in ($inventory.Stdout -split "`r?`n")) { + if ([string]::IsNullOrWhiteSpace($line)) { continue } + $parts = $line.Trim() -split '\|', 2 + if ($parts.Count -ne 2 -or [string]::IsNullOrWhiteSpace($parts[0]) -or [string]::IsNullOrWhiteSpace($parts[1])) { throw "malformed compose inventory line '$line'" } + $containerId = $parts[0]; $service = $parts[1] + if ($service -notmatch '^[a-z0-9][a-z0-9_-]{0,62}$') { throw "unsafe compose service label '$service'" } + if ($actualImages.ContainsKey($service)) { throw "duplicate compose service '$service' in image inventory" } + $inspect = Invoke-CapturedProcess "dev-stand-image-inspect-$service" $dockerPath @('inspect', $containerId, '--format', '{{.Config.Image}}|{{.Image}}') @{} (Join-Path $actionDirectory "image-inspect-$service.stdout.log") (Join-Path $actionDirectory "image-inspect-$service.stderr.log") $connection @($sensitiveValues) 30 + if ($inspect.ExitCode -ne 0) { throw "container image inspect failed for service '$service' with exit $($inspect.ExitCode)" } + $imageParts = $inspect.Stdout.Trim() -split '\|', 2 + if ($imageParts.Count -ne 2 -or [string]::IsNullOrWhiteSpace($imageParts[0]) -or $imageParts[1] -notmatch '^sha256:[a-f0-9]{64}$') { throw "malformed image identity for service '$service': '$($inspect.Stdout.Trim())'" } + $actualImages[$service] = $imageParts[0] + $actualImageIds[$service] = $imageParts[1] + $tagInspect = Invoke-CapturedProcess "dev-stand-image-tag-inspect-$service" $dockerPath @('image', 'inspect', $imageParts[0], '--format', '{{.Id}}') @{} (Join-Path $actionDirectory "image-tag-inspect-$service.stdout.log") (Join-Path $actionDirectory "image-tag-inspect-$service.stderr.log") $connection @($sensitiveValues) 30 + if ($tagInspect.ExitCode -ne 0) { + $imageIdentityPass = $false + $errors.Add("exact image tag '$($imageParts[0])' is unavailable for service '$service'") + } + else { + $tagImageId = $tagInspect.Stdout.Trim() + $tagImageIds[$service] = $tagImageId + if ($tagImageId -notmatch '^sha256:[a-f0-9]{64}$') { + $imageIdentityPass = $false + $errors.Add("malformed tag image identity for service '$service': '$tagImageId'") + } + elseif (-not [string]::Equals($tagImageId, $imageParts[1], [System.StringComparison]::Ordinal)) { + $imageIdentityPass = $false + $errors.Add("exact tag '$($imageParts[0])' no longer resolves to the running image for service '$service'") + } + } + } + $inventoryAssertion = Test-ExactDevStandInventory $actualImages + foreach ($inventoryError in $inventoryAssertion.Errors) { $errors.Add($inventoryError) } + + if ($Action -eq 'Scan' -and $inventoryAssertion.Pass -and $imageIdentityPass) { + foreach ($entry in @($actualImages.GetEnumerator() | Sort-Object Key)) { + $sarifPath = [System.IO.Path]::GetFullPath((Join-Path $actionDirectory ("docker-scout-$($entry.Key).sarif.json"))) + $imageId = $actualImageIds[$entry.Key] + $scan = Invoke-CapturedProcess "dev-stand-vulnerability-scan-$($entry.Key)" $dockerPath @('scout', 'cves', '--exit-code', '--only-severity', 'critical,high', '--format', 'sarif', '--output', $sarifPath, "local://$($entry.Value)") @{} (Join-Path $actionDirectory "docker-scout-$($entry.Key).stdout.log") (Join-Path $actionDirectory "docker-scout-$($entry.Key).stderr.log") $connection @() 600 + $vulnerabilityCount = $null + $scanParseError = $null + if (Test-Path -LiteralPath $sarifPath -PathType Leaf) { + try { + $sarif = Get-Content -LiteralPath $sarifPath -Raw | ConvertFrom-Json -Depth 100 + $vulnerabilityCount = @($sarif.runs | ForEach-Object { $_.results } | Where-Object { $null -ne $_ }).Count + } + catch { $scanParseError = "Docker Scout SARIF parse failed for '$($entry.Value)': $($_.Exception.Message)"; $errors.Add($scanParseError) } + } + else { $scanParseError = "Docker Scout did not produce SARIF for '$($entry.Value)'"; $errors.Add($scanParseError) } + + $vulnerabilityScans.Add([pscustomobject][ordered]@{ + service = $entry.Key; image = $entry.Value; image_id = $imageId; scanner = 'docker scout cves' + severities = @('critical', 'high'); exit_code = $scan.ExitCode + vulnerability_count = $vulnerabilityCount; sarif = $sarifPath; parse_error = $scanParseError + }) + if ($scan.ExitCode -eq 2) { $errors.Add("HIGH/CRITICAL vulnerabilities detected in exact image '$($entry.Value)' (count=$vulnerabilityCount)") } + elseif ($scan.ExitCode -ne 0) { $errors.Add("Docker Scout failed for exact image '$($entry.Value)' with exit $($scan.ExitCode)") } + elseif ($null -eq $vulnerabilityCount) { $errors.Add("Docker Scout result count is unavailable for exact image '$($entry.Value)'") } + elseif ($vulnerabilityCount -ne 0) { $errors.Add("Docker Scout returned exit 0 with $vulnerabilityCount HIGH/CRITICAL results for exact image '$($entry.Value)'") } + } + } + } + + if ($Action -eq 'Down') { + $down = Invoke-CapturedProcess 'dev-stand-down' $dockerPath @('compose', '-p', $Project, '-f', $File, 'down', '-v', '--remove-orphans') @{} (Join-Path $actionDirectory 'compose-down.stdout.log') (Join-Path $actionDirectory 'compose-down.stderr.log') $connection @() 180 + if ($down.ExitCode -ne 0) { $errors.Add("compose down failed with exit $($down.ExitCode)") } + $residualChecksPerformed = $true + $residualResourcesZero = Invoke-DevStandResidualChecks -NamePrefix 'dev-stand-residual' -DockerPath $dockerPath -Project $Project -ActionDirectory $actionDirectory -Connection $connection -Errors $errors + } + } + catch { $errors.Add($_.Exception.Message) } + finally { + if ($Action -eq 'Up' -and $errors.Count -gt 0) { + $automaticFailureCleanup = $true + $failureDown = Invoke-CapturedProcess 'dev-stand-failure-cleanup' $dockerPath @('compose', '-p', $Project, '-f', $File, 'down', '-v', '--remove-orphans') @{} (Join-Path $actionDirectory 'failure-cleanup.stdout.log') (Join-Path $actionDirectory 'failure-cleanup.stderr.log') $connection @($sensitiveValues) 180 + if ($failureDown.ExitCode -ne 0) { $errors.Add("automatic failure cleanup failed with exit $($failureDown.ExitCode)") } + $residualChecksPerformed = $true + $residualResourcesZero = Invoke-DevStandResidualChecks -NamePrefix 'dev-stand-failure-residual' -DockerPath $dockerPath -Project $Project -ActionDirectory $actionDirectory -Connection $connection -Errors $errors + } + } + + $finishedAt = [DateTimeOffset]::UtcNow + $commandsPath = Join-Path $actionDirectory 'commands.json' + Write-Utf8NoBom $commandsPath ((ConvertTo-Json -InputObject @($script:CommandRecords.ToArray()) -Depth 10) + "`n") + if ($tokenGenerated -and -not [string]::IsNullOrWhiteSpace($ephemeralToken)) { + foreach ($evidenceFile in Get-ChildItem -LiteralPath $actionDirectory -Recurse -File) { + try { + if ([System.IO.File]::ReadAllText($evidenceFile.FullName).Contains($ephemeralToken)) { + $tokenPersisted = $true; $errors.Add("ephemeral admin token persisted in evidence file '$($evidenceFile.FullName)'") + } + } + catch { $errors.Add("could not secret-scan evidence file '$($evidenceFile.FullName)': $($_.Exception.Message)") } + } + } + $summary = [pscustomobject]@{ + schema_version = 1; gate = 'dev-stand-contract'; action = $Action; run_id = $RequestedRunId + started_at = $startedAt.ToString('O'); finished_at = $finishedAt.ToString('O'); duration_seconds = [math]::Round(($finishedAt - $startedAt).TotalSeconds, 3) + verdict = if ($errors.Count -eq 0) { 'PASS' } else { 'FAIL' } + compose_project = $Project; compose_file = [System.IO.Path]::GetFullPath($File) + ephemeral_admin_token_generated = $tokenGenerated; ephemeral_admin_token_persisted = $tokenPersisted + exact_image_targets = [ordered]@{ postgres = 'pgvector/pgvector:pg17'; server = 'ghcr.io/thebtf/engram:main'; 'operator-console' = 'ghcr.io/thebtf/engram-operator-console:main' } + actual_images = $actualImages; actual_image_ids = $actualImageIds; tag_image_ids = $tagImageIds + semantic_ready_endpoints = if ($Action -in @('Up', 'Ready')) { @(Get-DevStandReadyEndpoints | ForEach-Object { [ordered]@{ name = $_.name; url = $_.url; path_kind = $_.path_kind; required_status = 'ready' } }) } else { @() } + vulnerability_scan = [ordered]@{ scanner = 'docker scout cves'; severity_gate = @('critical', 'high'); scans = @($vulnerabilityScans) } + automatic_failure_cleanup = $automaticFailureCleanup; residual_checks_performed = $residualChecksPerformed; residual_resources_zero = $residualResourcesZero + child_commands = $script:CommandRecords.Count; nonzero_child_commands = @($script:CommandRecords | Where-Object exit_code -ne 0).Count + commands = [System.IO.Path]::GetFullPath($commandsPath); errors = @($errors); artifact_directory = [System.IO.Path]::GetFullPath($actionDirectory) + } + $summaryPath = Join-Path $actionDirectory 'summary.json'; Write-Utf8NoBom $summaryPath (($summary | ConvertTo-Json -Depth 12) + "`n") + Write-Host ("dev-stand action={0} verdict={1} child_commands={2} nonzero_children={3}" -f $Action, $summary.verdict, $summary.child_commands, $summary.nonzero_child_commands) + Write-Host "summary=$([System.IO.Path]::GetFullPath($summaryPath))" + return $summary +} + function Assert-SelfTestCondition { param([bool]$Condition, [string]$Message); if (-not $Condition) { throw "SELFTEST FAIL: $Message" } } function Invoke-SelfTest { @@ -263,6 +553,20 @@ function Invoke-SelfTest { Assert-SelfTestCondition (-not (Test-ConnectionBudgetFits 80 20 97)) 'exhausted connection headroom was accepted' Assert-SelfTestCondition (Test-NoResidualRunSessions 0) 'zero post-test sessions were rejected' Assert-SelfTestCondition (-not (Test-NoResidualRunSessions 1)) 'a residual post-test session was accepted within the pool budget' + Assert-SelfTestCondition (Test-ReadyStatusPayload '{"status":"ready","version":"dev"}') 'semantic ready payload was rejected' + foreach ($badPayload in @('{"status":"error"}', '{"status":"Ready"}', '{"version":"dev"}', 'not-json', '')) { Assert-SelfTestCondition (-not (Test-ReadyStatusPayload $badPayload)) "false-ready payload '$badPayload' was accepted" } + $readyEndpoints = @(Get-DevStandReadyEndpoints) + Assert-SelfTestCondition ($readyEndpoints.Count -eq 4) 'dev stand does not require both direct and operator-proxied semantic endpoints' + Assert-SelfTestCondition (@($readyEndpoints | Where-Object { $_.name -eq 'operator-api-health' -and $_.url -eq 'http://localhost:3001/api/health' -and $_.path_kind -eq 'operator-console-proxy' }).Count -eq 1) 'operator-console proxied /api/health proof is missing' + Assert-SelfTestCondition (@($readyEndpoints | Where-Object { $_.name -eq 'operator-api-ready' -and $_.url -eq 'http://localhost:3001/api/ready' -and $_.path_kind -eq 'operator-console-proxy' }).Count -eq 1) 'operator-console proxied /api/ready proof is missing' + $standEnvironment = Get-DevStandEnvironment -Project 'engram-critical-stand' -AdminToken 'selftest-token' -DatabaseDsn 'postgres://engram:engram@postgres:5432/engram?sslmode=disable' + Assert-SelfTestCondition ($standEnvironment.NUXT_OPERATOR_API_TARGET -ceq 'http://server:37777') 'dev stand uses the wrong Nuxt operator API target variable or value' + Assert-SelfTestCondition (-not $standEnvironment.ContainsKey('NUXT_ENGRAM_API_TARGET')) 'stale NUXT_ENGRAM_API_TARGET was accepted into the dev stand environment' + $validInventory = Test-ExactDevStandInventory @{ postgres = 'pgvector/pgvector:pg17'; server = 'ghcr.io/thebtf/engram:main'; 'operator-console' = 'ghcr.io/thebtf/engram-operator-console:main' } + Assert-SelfTestCondition $validInventory.Pass 'exact compose service/image inventory was rejected' + $invalidInventory = Test-ExactDevStandInventory @{ postgres = 'pgvector/pgvector:pg17'; server = 'engram:prc-candidate'; 'operator-console' = 'ghcr.io/thebtf/engram-operator-console:main' } + Assert-SelfTestCondition (-not $invalidInventory.Pass) 'non-produced engram:prc-candidate image was accepted' + Assert-SelfTestCondition ($Repeat -eq 3) 'default release repetition count is not 3' Write-Output 'SELFTEST PASS: run-db-suite.ps1 (earlier exit 7 remained fatal after later exit 0)' } finally { Remove-Item -LiteralPath $root -Recurse -Force -ErrorAction SilentlyContinue } @@ -270,6 +574,11 @@ function Invoke-SelfTest { if ($Help) { Show-Help; exit 0 } if ($SelfTest) { Invoke-SelfTest; exit 0 } +if ($DevStandAction -ne 'None') { + $devStandSummary = Invoke-DevStandContract -Action $DevStandAction -Project $ComposeProject -File $ComposeFile -EvidenceRoot $ArtifactRoot -RequestedRunId $RunId + if ($devStandSummary.verdict -ne 'PASS') { exit 1 } + exit 0 +} if (-not $FreshDatabase) { Write-Error '-FreshDatabase is mandatory for RELEASE-GATES DB evidence.'; exit 1 } if ([string]::IsNullOrWhiteSpace($AdminDsn)) { Write-Error '-AdminDsn or ENGRAM_TEST_ADMIN_DSN is required.'; exit 1 } @@ -338,7 +647,7 @@ for ($repeatIndex = 1; $repeatIndex -le $Repeat; $repeatIndex++) { $databaseName = "engram_prc_rg_${safeRunToken}_r$repeatIndex"; $schemaName = 'public'; $applicationName = "engram-prc-$safeRunToken-r$repeatIndex" $targetDsn = New-DatabaseDsn $AdminDsn $databaseName $applicationName $repeatErrors = [System.Collections.Generic.List[string]]::new(); $repeatFailed = $false; $databaseCreated = $false - $goTestExit = $null; $parserExit = $null; $coverageExit = $null; $cleanupExit = $null; $sessionsBefore = $null; $sessionsAfter = $null; $serverSessionsBefore = $null; $serverSessionsAfter = $null + $goTestExit = $null; $parserExit = $null; $coverageExit = $null; $cleanupExit = $null; $cleanupStatus = $null; $sessionsBefore = $null; $sessionsAfter = $null; $serverSessionsBefore = $null; $serverSessionsAfter = $null $cleanupSummaryPath = Join-Path $repeatDirectory 'cleanup/cleanup.json' try { @@ -364,6 +673,7 @@ for ($repeatIndex = 1; $repeatIndex -le $Repeat; $repeatIndex++) { $coveragePath = Join-Path $repeatDirectory 'coverage.out'; $goJsonPath = Join-Path $repeatDirectory 'go-test.stdout.jsonl'; $goStderrPath = Join-Path $repeatDirectory 'go-test.stderr.log' $goArguments = [System.Collections.Generic.List[string]]::new() foreach ($argument in @('test', '-json', '-p', '1', '-parallel', '1', '-count=1', '-timeout', "${TimeoutMinutes}m", '-covermode=atomic', "-coverprofile=$coveragePath")) { $goArguments.Add($argument) } + if ($Race) { $goArguments.Add('-race') } if ($Run) { $goArguments.Add('-run'); $goArguments.Add($Run) }; foreach ($pkg in $packages) { $goArguments.Add($pkg) } $testEnvironment = @{ DATABASE_DSN = $targetDsn @@ -379,7 +689,7 @@ for ($repeatIndex = 1; $repeatIndex -le $Repeat; $repeatIndex++) { $parserArguments = [System.Collections.Generic.List[string]]::new() foreach ($argument in @('-NoProfile', '-File', $jsonAssertionScript, '-InputPath', $goJsonPath, '-SummaryPath', (Join-Path $repeatDirectory 'go-test-summary.json'))) { $parserArguments.Add($argument) } if ($FailOnUnexpectedSkip) { $parserArguments.Add('-FailOnUnexpectedSkip') } - if ($AllowedSkipPattern.Count -gt 0) { $parserArguments.Add('-AllowedSkipPattern'); foreach ($pattern in $AllowedSkipPattern) { $parserArguments.Add($pattern) } } + if ($AllowedSkipIdentity.Count -gt 0) { $parserArguments.Add('-AllowedSkipIdentity'); foreach ($identity in $AllowedSkipIdentity) { $parserArguments.Add($identity) } } $parser = Invoke-CapturedProcess "repeat-$repeatIndex-assert-go-test-json" $pwshPath @($parserArguments) @{} (Join-Path $repeatDirectory 'assert-go-test-json.stdout.log') (Join-Path $repeatDirectory 'assert-go-test-json.stderr.log') $connection @($targetDsn) 120 $parserExit = $parser.ExitCode; if ($parserExit -ne 0) { $repeatFailed = $true; $repeatErrors.Add("go test JSON assertion failed with exit $parserExit") } @@ -405,20 +715,38 @@ for ($repeatIndex = 1; $repeatIndex -le $Repeat; $repeatIndex++) { } catch { $repeatFailed = $true; $repeatErrors.Add($_.Exception.Message) } finally { - if ($databaseCreated) { - $cleanupArguments = @('-NoProfile', '-File', $cleanupScript, '-DatabaseName', $databaseName, '-SchemaName', $schemaName, '-ArtifactRoot', $repeatDirectory, '-RunId', "$RunId-repeat-$repeatIndex") - if ($PostgresContainer) { $cleanupArguments += @('-PostgresContainer', $PostgresContainer) } - $cleanup = Invoke-CapturedProcess "repeat-$repeatIndex-cleanup" $pwshPath $cleanupArguments @{ ENGRAM_TEST_ADMIN_DSN = $AdminDsn } (Join-Path $repeatDirectory 'cleanup-process.stdout.log') (Join-Path $repeatDirectory 'cleanup-process.stderr.log') $connection @($targetDsn, $AdminDsn) 180 - $cleanupExit = $cleanup.ExitCode; if ($cleanupExit -ne 0) { $repeatFailed = $true; $repeatErrors.Add("cleanup failed with exit $cleanupExit") } + # The run owns this prefix-guarded name before CREATE is attempted. A + # create subprocess can commit and then fail capture/timeout, so cleanup + # is mandatory even when creation was not confirmed. + $cleanupArguments = @('-NoProfile', '-File', $cleanupScript, '-DatabaseName', $databaseName, '-SchemaName', $schemaName, '-ArtifactRoot', $repeatDirectory, '-RunId', "$RunId-repeat-$repeatIndex") + if ($PostgresContainer) { $cleanupArguments += @('-PostgresContainer', $PostgresContainer) } + $cleanup = Invoke-CapturedProcess "repeat-$repeatIndex-cleanup" $pwshPath $cleanupArguments @{ ENGRAM_TEST_ADMIN_DSN = $AdminDsn } (Join-Path $repeatDirectory 'cleanup-process.stdout.log') (Join-Path $repeatDirectory 'cleanup-process.stderr.log') $connection @($targetDsn, $AdminDsn) 180 + $cleanupExit = $cleanup.ExitCode + if ($cleanupExit -ne 0) { + $repeatFailed = $true; $repeatErrors.Add("cleanup failed with exit $cleanupExit") + } + if (-not (Test-Path -LiteralPath $cleanupSummaryPath -PathType Leaf)) { + $repeatFailed = $true; $repeatErrors.Add('cleanup summary is missing after an attempted cleanup') + } + else { + try { + $cleanupSummary = Get-Content -Raw -LiteralPath $cleanupSummaryPath | ConvertFrom-Json + $cleanupStatus = [string]$cleanupSummary.cleanup_status + if ($cleanupSummary.verdict -ne 'PASS') { $repeatFailed = $true; $repeatErrors.Add("cleanup summary verdict is '$($cleanupSummary.verdict)'") } + if ([int]$cleanupSummary.remaining_database_count -ne 0) { $repeatFailed = $true; $repeatErrors.Add("cleanup absence proof is non-zero: $($cleanupSummary.remaining_database_count)") } + $expectedCleanupStatus = if ($cleanupSummary.database_existed_before -eq $true) { 'PASS' } elseif ($cleanupSummary.database_existed_before -eq $false) { 'NOT_APPLICABLE' } else { 'FAIL' } + if ($cleanupStatus -cne $expectedCleanupStatus) { $repeatFailed = $true; $repeatErrors.Add("cleanup status is '$cleanupStatus', expected '$expectedCleanupStatus' for database_existed_before=$($cleanupSummary.database_existed_before)") } + if ($cleanupSummary.absence_verified -ne $true) { $repeatFailed = $true; $repeatErrors.Add('cleanup did not record positive database absence verification') } + } + catch { $repeatFailed = $true; $repeatErrors.Add("cleanup summary is malformed: $($_.Exception.Message)") } } - else { $cleanupExit = 0 } if ($repeatFailed) { $overallFailed = $true } $repeatResult = [pscustomobject]@{ repeat = $repeatIndex; verdict = if ($repeatFailed) { 'FAIL' } else { 'PASS' } database = $databaseName; schema = $schemaName; database_schema_identity = "$databaseName.$schemaName"; database_dsn = 'REDACTED_DATABASE_DSN' - sequential_execution = [ordered]@{ package_parallelism = 1; test_parallelism = 1 } + database_create_confirmed = $databaseCreated; sequential_execution = [ordered]@{ package_parallelism = 1; test_parallelism = 1 }; race = [bool]$Race connection_budget = $ConnectionBudget; server_sessions_before = $serverSessionsBefore; server_sessions_after = $serverSessionsAfter; sessions_before = $sessionsBefore; sessions_after = $sessionsAfter - go_test_exit = $goTestExit; json_parser_exit = $parserExit; coverage_policy = $effectiveCoverage; coverage_exit = $coverageExit; cleanup_exit = $cleanupExit + go_test_exit = $goTestExit; json_parser_exit = $parserExit; coverage_policy = $effectiveCoverage; coverage_exit = $coverageExit; cleanup_exit = $cleanupExit; cleanup_status = $cleanupStatus cleanup_summary = if (Test-Path -LiteralPath $cleanupSummaryPath) { [System.IO.Path]::GetFullPath($cleanupSummaryPath) } else { $null } errors = @($repeatErrors); artifact_directory = [System.IO.Path]::GetFullPath($repeatDirectory) } @@ -432,8 +760,8 @@ $environmentSummary = [pscustomobject]@{ schema_version = 1; run_id = $RunId; timestamp = $startedAt.ToString('O'); go_version = $goVersion.Stdout.Trim() postgres = [ordered]@{ declared_image = $PostgresImage; container = $containerIdentity; server = $serverIdentityObject; admin_dsn = Get-RedactedDsn $AdminDsn } packages = $packages; run_pattern = if ($Run) { $Run } else { $null }; repeat = $Repeat - fail_on_unexpected_skip = [bool]$FailOnUnexpectedSkip; allowed_skip_patterns = @($AllowedSkipPattern) - coverage_policy = $effectiveCoverage; connection_budget = $ConnectionBudget + fail_on_unexpected_skip = [bool]$FailOnUnexpectedSkip; allowed_skip_identities = @($AllowedSkipIdentity) + coverage_policy = $effectiveCoverage; connection_budget = $ConnectionBudget; race = [bool]$Race sequential_execution = [ordered]@{ go_package_parallelism = 1; go_test_parallelism = 1; database_max_connections = $ConnectionBudget } govulncheck_policy = [ordered]@{ authoritative = @('source scan with tests', 'unstripped binary scan'); non_authoritative = 'stripped binary scan (module-level fallback when symbols are absent)' } } @@ -445,7 +773,7 @@ $summary = [pscustomobject]@{ started_at = $startedAt.ToString('O'); finished_at = $finishedAt.ToString('O'); duration_seconds = [math]::Round(($finishedAt - $startedAt).TotalSeconds, 3) verdict = if (-not $overallFailed -and $failedRepeats -eq 0 -and $repeatResults.Count -eq $Repeat) { 'PASS' } else { 'FAIL' } counts = [ordered]@{ requested_repeats = $Repeat; completed_repeats = $repeatResults.Count; passed_repeats = $passedRepeats; failed_repeats = $failedRepeats; child_commands = $script:CommandRecords.Count; nonzero_child_commands = @($script:CommandRecords | Where-Object exit_code -ne 0).Count } - packages = $packages; run_pattern = if ($Run) { $Run } else { $null }; coverage_policy = $effectiveCoverage; connection_budget = $ConnectionBudget + packages = $packages; run_pattern = if ($Run) { $Run } else { $null }; coverage_policy = $effectiveCoverage; connection_budget = $ConnectionBudget; race = [bool]$Race database_dsn = 'REDACTED_DATABASE_DSN'; environment = [System.IO.Path]::GetFullPath($environmentPath); commands = [System.IO.Path]::GetFullPath($commandsPath) repeats = @($repeatResults); errors = @($runErrors); artifact_directory = [System.IO.Path]::GetFullPath($runDirectory) } diff --git a/scripts/production-gates/run-dev-stand.ps1 b/scripts/production-gates/run-dev-stand.ps1 new file mode 100644 index 00000000..db543c98 --- /dev/null +++ b/scripts/production-gates/run-dev-stand.ps1 @@ -0,0 +1,292 @@ +[CmdletBinding()] +param( + [string]$Config = '.agent/dev-stand.config.yaml', + [string]$ArtifactRoot = '.agent/reports/evidence/production-ready/release-gates-foundation/dev-stand-runner', + [string]$RunId, + [switch]$SelfTest, + [switch]$Help +) + +Set-StrictMode -Version Latest +$ErrorActionPreference = 'Stop' +$script:CommandRecords = [System.Collections.Generic.List[object]]::new() + +function Show-Help { + @' +run-dev-stand.ps1 + +Validates .agent/dev-stand.config.yaml and owns the complete isolated lifecycle: +Up -> Ready -> Docker Scout Scan -> Down. Down always runs after an Up attempt. +Every child exit/raw stream and nested action summary is retained. Success also +requires generated non-persisted credentials and zero residual compose resources. + +Usage: + pwsh ./scripts/production-gates/run-dev-stand.ps1 \ + -Config .agent/dev-stand.config.yaml +'@ | Write-Output +} + +function Write-Utf8NoBom { + param([Parameter(Mandatory)][string]$Path, [Parameter(Mandatory)][AllowEmptyString()][string]$Content) + $parent = Split-Path -Parent $Path + if ($parent) { New-Item -ItemType Directory -Path $parent -Force | Out-Null } + [System.IO.File]::WriteAllText([System.IO.Path]::GetFullPath($Path), $Content, [System.Text.UTF8Encoding]::new($false)) +} + +function Get-Sha256 { param([Parameter(Mandatory)][string]$Path); return (Get-FileHash -LiteralPath $Path -Algorithm SHA256).Hash } + +function Quote-CommandArgument { + param([Parameter(Mandatory)][AllowEmptyString()][string]$Value) + if ($Value -match '^[A-Za-z0-9_./:=+,-]+$') { return $Value } + return '"' + $Value.Replace('"', '\"') + '"' +} + +function Invoke-CapturedProcess { + param( + [Parameter(Mandatory)][string]$Name, + [Parameter(Mandatory)][string]$Executable, + [string[]]$Arguments = @(), + [Parameter(Mandatory)][string]$StdoutPath, + [Parameter(Mandatory)][string]$StderrPath, + [ValidateRange(1, 7200)][int]$TimeoutSeconds = 900 + ) + $startedAt = [DateTimeOffset]::UtcNow; $exitCode = 127; $timedOut = $false; $stdout = ''; $stderr = ''; $process = $null + try { + $info = [System.Diagnostics.ProcessStartInfo]::new(); $info.FileName = $Executable; $info.UseShellExecute = $false; $info.CreateNoWindow = $true + $info.RedirectStandardOutput = $true; $info.RedirectStandardError = $true + foreach ($argument in $Arguments) { [void]$info.ArgumentList.Add([string]$argument) } + $process = [System.Diagnostics.Process]::new(); $process.StartInfo = $info + if (-not $process.Start()) { throw "process '$Executable' did not start" } + $stdoutTask = $process.StandardOutput.ReadToEndAsync(); $stderrTask = $process.StandardError.ReadToEndAsync() + if (-not $process.WaitForExit($TimeoutSeconds * 1000)) { $timedOut = $true; try { $process.Kill($true) } catch {}; [void]$process.WaitForExit(30000) } + else { $process.WaitForExit() } + $stdout = $stdoutTask.GetAwaiter().GetResult(); $stderr = $stderrTask.GetAwaiter().GetResult(); $exitCode = if ($timedOut) { 124 } else { $process.ExitCode } + } + catch { $stderr = "PROCESS_START_OR_CAPTURE_ERROR: $($_.Exception.Message)`n"; $exitCode = 127 } + finally { if ($null -ne $process) { $process.Dispose() } } + Write-Utf8NoBom $StdoutPath $stdout; Write-Utf8NoBom $StderrPath $stderr + $finishedAt = [DateTimeOffset]::UtcNow + $commandParts = [System.Collections.Generic.List[string]]::new(); $commandParts.Add((Quote-CommandArgument $Executable)); foreach ($argument in $Arguments) { $commandParts.Add((Quote-CommandArgument ([string]$argument))) } + $record = [pscustomobject][ordered]@{ + name = $Name; executable = $Executable; arguments = @($Arguments); command = $commandParts -join ' ' + started_at = $startedAt.ToString('O'); finished_at = $finishedAt.ToString('O'); duration_seconds = [math]::Round(($finishedAt - $startedAt).TotalSeconds, 3) + exit_code = $exitCode; timed_out = $timedOut; stdout = [System.IO.Path]::GetFullPath($StdoutPath); stderr = [System.IO.Path]::GetFullPath($StderrPath) + } + $script:CommandRecords.Add($record) + return [pscustomobject]@{ ExitCode = $exitCode; Stdout = $stdout; Stderr = $stderr; Record = $record } +} + +function Assert-ContainsExactLine { + param([Parameter(Mandatory)][string]$Text, [Parameter(Mandatory)][string]$Line, [Parameter(Mandatory)][string]$Name) + $count = @(($Text -split "`r?`n") | Where-Object { $_ -ceq $Line }).Count + if ($count -ne 1) { throw "dev-stand config $Name must appear exactly once; found $count" } +} + +function Read-DevStandConfig { + param([Parameter(Mandatory)][string]$Path) + if (-not (Test-Path -LiteralPath $Path -PathType Leaf)) { throw "dev-stand config does not exist: $Path" } + $text = Get-Content -LiteralPath $Path -Raw + Assert-ContainsExactLine $text 'version: 1' 'version' + Assert-ContainsExactLine $text 'shape: docker-compose' 'shape' + $commands = [ordered]@{ + Up = 'pwsh -NoProfile -File scripts/production-gates/run-db-suite.ps1 -DevStandAction Up -ComposeProject engram-critical-stand -ComposeFile docker-compose.yml' + Ready = 'pwsh -NoProfile -File scripts/production-gates/run-db-suite.ps1 -DevStandAction Ready -ComposeProject engram-critical-stand -ComposeFile docker-compose.yml' + Scan = 'pwsh -NoProfile -File scripts/production-gates/run-db-suite.ps1 -DevStandAction Scan -ComposeProject engram-critical-stand -ComposeFile docker-compose.yml' + Down = 'pwsh -NoProfile -File scripts/production-gates/run-db-suite.ps1 -DevStandAction Down -ComposeProject engram-critical-stand -ComposeFile docker-compose.yml' + } + foreach ($entry in $commands.GetEnumerator()) { + $matches = [regex]::Matches($text, ('(?m)^\s+(?:command|readiness_check):\s*"' + [regex]::Escape($entry.Value) + '"\s*$')) + if ($matches.Count -ne 1) { throw "dev-stand config must declare exact $($entry.Key) command once; found $($matches.Count)" } + } + $requiredExactLines = [ordered]@{ + 'Up timeout' = ' timeout_seconds: 600' + 'Down timeout' = ' timeout_seconds: 180' + 'logs command' = ' command: "docker compose -p engram-critical-stand -f docker-compose.yml logs --no-color --tail=300"' + 'compose project' = ' COMPOSE_PROJECT_NAME: "engram-critical-stand"' + 'PostgreSQL port' = ' POSTGRES_PORT: "55433"' + 'worker port' = ' WORKER_PORT: "37778"' + 'operator port' = ' OPERATOR_CONSOLE_PORT: "3001"' + 'PostgreSQL password' = ' POSTGRES_PASSWORD: "engram"' + 'database DSN' = ' DATABASE_DSN: "postgres://engram:engram@postgres:5432/engram?sslmode=disable"' + 'stand API URL' = ' STAND_API_URL: "http://localhost:37778"' + 'stand operator URL' = ' STAND_OPERATOR_URL: "http://localhost:3001"' + 'operator-console API proxy target' = ' NUXT_OPERATOR_API_TARGET: "http://server:37777"' + 'auth-disabled policy' = ' ENGRAM_AUTH_DISABLED: "false"' + 'credential generation policy' = ' admin_token: "generated cryptographically inside the Up runner process"' + 'credential persistence policy' = ' persistence: "never written to raw logs, machine summaries, config, or caller environment"' + 'credential fallback policy' = ' auth_disabled_fallback: false' + 'image discovery' = ' discovery: "docker service inventory filtered by com.docker.compose.project=engram-critical-stand"' + 'image scanner' = ' scanner: "docker scout cves"' + 'image scan severities' = ' severities: ["critical", "high"]' + 'image scan finding policy' = ' fail_on_findings: true' + 'PostgreSQL image' = ' postgres: "pgvector/pgvector:pg17"' + 'server image' = ' server: "ghcr.io/thebtf/engram:main"' + 'operator-console image' = ' operator-console: "ghcr.io/thebtf/engram-operator-console:main"' + 'forbidden synthetic image' = ' - "engram:prc-candidate"' + 'database runner' = ' runner: "pwsh -NoProfile -File scripts/production-gates/run-db-suite.ps1"' + 'database lifecycle' = ' database_lifecycle: "fresh unique database per repetition; cleanup owns only engram_prc_rg_* databases"' + 'shared service policy' = ' shared_service_policy: "Never stop or remove an operator-owned PostgreSQL container; only terminate/drop the current run database."' + } + foreach ($requiredLine in $requiredExactLines.GetEnumerator()) { + Assert-ContainsExactLine $text $requiredLine.Value $requiredLine.Key + } + if ($text -match '(?m)^\s+NUXT_ENGRAM_API_TARGET:') { throw 'dev-stand config must not use stale NUXT_ENGRAM_API_TARGET' } + if ($text -match '(?m)^\s+ENGRAM_AUTH_ADMIN_TOKEN:') { throw 'dev-stand config must not persist an admin token' } + foreach ($requiredSection in @('up:', 'down:', 'logs:', 'env:', 'credential_policy:', 'image_scan:', 'database_evidence:')) { Assert-ContainsExactLine $text $requiredSection "section $requiredSection" } + return [pscustomobject]@{ Text = $text; Sha256 = Get-Sha256 $Path; Commands = $commands; Project = 'engram-critical-stand'; ComposeFile = 'docker-compose.yml' } +} + +function Test-ExactImageMaps { + param([Parameter(Mandatory)]$Summary) + $expected = [ordered]@{ postgres = 'pgvector/pgvector:pg17'; server = 'ghcr.io/thebtf/engram:main'; 'operator-console' = 'ghcr.io/thebtf/engram-operator-console:main' } + foreach ($entry in $expected.GetEnumerator()) { + $imageProperty = $Summary.actual_images.PSObject.Properties[$entry.Key] + $runningProperty = $Summary.actual_image_ids.PSObject.Properties[$entry.Key] + $tagProperty = $Summary.tag_image_ids.PSObject.Properties[$entry.Key] + if ($null -eq $imageProperty -or [string]$imageProperty.Value -cne $entry.Value -or $null -eq $runningProperty -or $null -eq $tagProperty) { return $false } + $runningId = [string]$runningProperty.Value; $tagId = [string]$tagProperty.Value + if ($runningId -notmatch '^sha256:[a-f0-9]{64}$' -or $runningId -cne $tagId) { return $false } + } + return @($Summary.actual_images.PSObject.Properties).Count -eq 3 +} + +function Read-ActionSummary { + param( + [Parameter(Mandatory)][ValidateSet('Up', 'Ready', 'Scan', 'Down')][string]$Action, + [Parameter(Mandatory)][string]$Path, + [Parameter(Mandatory)][int]$ChildExit + ) + if (-not (Test-Path -LiteralPath $Path -PathType Leaf)) { throw "$Action action summary is missing: $Path" } + try { $summary = Get-Content -LiteralPath $Path -Raw | ConvertFrom-Json -Depth 100 } catch { throw "$Action action summary is invalid: $($_.Exception.Message)" } + if ($summary.action -cne $Action) { throw "$Action action summary reports '$($summary.action)'" } + $expectedVerdict = if ($ChildExit -eq 0) { 'PASS' } else { 'FAIL' } + if ($summary.verdict -cne $expectedVerdict) { throw "$Action exit/verdict mismatch: exit=$ChildExit verdict=$($summary.verdict)" } + if ($Action -in @('Up', 'Ready', 'Scan') -and -not (Test-ExactImageMaps $summary)) { throw "$Action did not prove exact tag-to-running-image identity" } + if ($Action -eq 'Up') { + if (-not $summary.ephemeral_admin_token_generated -or $summary.ephemeral_admin_token_persisted) { throw 'Up did not prove generated, non-persisted admin credentials' } + $commands = Get-Content -LiteralPath $summary.commands -Raw | ConvertFrom-Json -Depth 100 + foreach ($name in @('dev-stand-postgres-ready', 'dev-stand-health', 'dev-stand-api-ready', 'dev-stand-operator-api-health', 'dev-stand-operator-api-ready')) { if (@($commands | Where-Object name -eq $name).Count -ne 1) { throw "Up did not execute '$name' exactly once" } } + } + elseif ($Action -eq 'Ready') { + $commands = Get-Content -LiteralPath $summary.commands -Raw | ConvertFrom-Json -Depth 100 + foreach ($name in @('dev-stand-postgres-ready', 'dev-stand-health', 'dev-stand-api-ready', 'dev-stand-operator-api-health', 'dev-stand-operator-api-ready')) { if (@($commands | Where-Object name -eq $name).Count -ne 1) { throw "Ready did not execute '$name' exactly once" } } + } + elseif ($Action -eq 'Scan') { + $scans = @($summary.vulnerability_scan.scans) + if ($scans.Count -ne 3) { throw "Scan must emit three exact image results; found $($scans.Count)" } + foreach ($scan in $scans) { + if ($scan.image -notin @('pgvector/pgvector:pg17', 'ghcr.io/thebtf/engram:main', 'ghcr.io/thebtf/engram-operator-console:main')) { throw "Scan used untracked image '$($scan.image)'" } + if (-not (Test-Path -LiteralPath $scan.sarif -PathType Leaf)) { throw "Scan SARIF is missing for '$($scan.image)'" } + } + } + elseif ($Action -eq 'Down') { + if (-not $summary.residual_checks_performed -or $summary.residual_resources_zero -ne $true) { throw 'Down did not prove zero residual containers, volumes, and networks' } + } + return $summary +} + +function Assert-SelfTestCondition { param([bool]$Condition, [string]$Message); if (-not $Condition) { throw "SELFTEST FAIL: $Message" } } + +function Invoke-SelfTest { + $root = Join-Path ([System.IO.Path]::GetTempPath()) ('run-dev-stand-' + [guid]::NewGuid().ToString('N')) + New-Item -ItemType Directory -Path $root -Force | Out-Null + try { + if (-not (Test-Path -LiteralPath $Config -PathType Leaf)) { throw "SELFTEST FAIL: config fixture does not exist: $Config" } + $base = Get-Content -LiteralPath $Config -Raw + $validPath = Join-Path $root 'valid.yaml'; Write-Utf8NoBom $validPath $base + $parsed = Read-DevStandConfig $validPath; Assert-SelfTestCondition ($parsed.Commands.Count -eq 4) 'valid lifecycle config was rejected' + $mutations = @( + @{ name = 'auth disabled'; text = $base.Replace('ENGRAM_AUTH_DISABLED: "false"', 'ENGRAM_AUTH_DISABLED: "true"') }, + @{ name = 'wrong operator target'; text = $base.Replace('NUXT_OPERATOR_API_TARGET: "http://server:37777"', 'NUXT_ENGRAM_API_TARGET: "http://server:37777"') }, + @{ name = 'wrong operator port'; text = $base.Replace('OPERATOR_CONSOLE_PORT: "3001"', 'OPERATOR_CONSOLE_PORT: "3002"') }, + @{ name = 'weaken up timeout'; text = $base.Replace('timeout_seconds: 600', 'timeout_seconds: 60') }, + @{ name = 'static credential'; text = $base.Replace('generated cryptographically inside the Up runner process', 'static-token') }, + @{ name = 'remove scan'; text = $base.Replace('-DevStandAction Scan', '-DevStandAction Ready') }, + @{ name = 'wrong image'; text = $base.Replace('ghcr.io/thebtf/engram:main', 'engram:prc-candidate') }, + @{ name = 'allow findings'; text = $base.Replace('fail_on_findings: true', 'fail_on_findings: false') }, + @{ name = 'duplicate version'; text = "version: 1`n$base" } + ) + foreach ($mutation in $mutations) { + $path = Join-Path $root ($mutation.name.Replace(' ', '-') + '.yaml'); Write-Utf8NoBom $path $mutation.text + $rejected = $false; try { [void](Read-DevStandConfig $path) } catch { $rejected = $true } + Assert-SelfTestCondition $rejected "config mutation '$($mutation.name)' was accepted" + } + $pwsh = (Get-Command pwsh -ErrorAction Stop).Source + $failed = Invoke-CapturedProcess 'selftest-fail' $pwsh @('-NoProfile', '-Command', 'exit 9') (Join-Path $root 'fail.stdout.log') (Join-Path $root 'fail.stderr.log') 30 + $later = Invoke-CapturedProcess 'selftest-pass' $pwsh @('-NoProfile', '-Command', 'exit 0') (Join-Path $root 'pass.stdout.log') (Join-Path $root 'pass.stderr.log') 30 + Assert-SelfTestCondition ($failed.ExitCode -eq 9 -and $later.ExitCode -eq 0 -and (($failed.ExitCode -ne 0) -or ($later.ExitCode -ne 0))) 'later child success masked an earlier failure' + Write-Output 'SELFTEST PASS: run-dev-stand.ps1' + } + finally { Remove-Item -LiteralPath $root -Recurse -Force -ErrorAction SilentlyContinue } +} + +if ($Help) { Show-Help; exit 0 } +if ($SelfTest) { Invoke-SelfTest; exit 0 } + +$startedAt = [DateTimeOffset]::UtcNow +if ([string]::IsNullOrWhiteSpace($RunId)) { $RunId = $startedAt.ToString('yyyyMMddTHHmmssZ') + '-' + [guid]::NewGuid().ToString('N').Substring(0, 10) } +if ($RunId -notmatch '^[A-Za-z0-9._-]+$') { throw '-RunId may contain only letters, digits, dot, underscore, and hyphen.' } +$artifactDirectory = Join-Path $ArtifactRoot $RunId +if (Test-Path -LiteralPath $artifactDirectory) { throw "dev-stand runner artifact directory already exists: $artifactDirectory" } +New-Item -ItemType Directory -Path $artifactDirectory -Force | Out-Null +$errors = [System.Collections.Generic.List[string]]::new(); $actions = [System.Collections.Generic.List[object]]::new() +$configInfo = $null; $upAttempted = $false; $downAttempted = $false; $downSummary = $null +$nestedRoot = Join-Path $artifactDirectory 'nested' +$pwsh = $null; $runnerScript = Join-Path $PSScriptRoot 'run-db-suite.ps1' + +try { + $configInfo = Read-DevStandConfig $Config + $pwsh = (Get-Command pwsh -ErrorAction Stop).Source + foreach ($action in @('Up', 'Ready', 'Scan')) { + if ($errors.Count -ne 0) { break } + if ($action -eq 'Up') { $upAttempted = $true } + $stdoutPath = Join-Path $artifactDirectory ("$($action.ToLowerInvariant()).stdout.log") + $stderrPath = Join-Path $artifactDirectory ("$($action.ToLowerInvariant()).stderr.log") + $arguments = @('-NoProfile', '-File', $runnerScript, '-DevStandAction', $action, '-ComposeProject', $configInfo.Project, '-ComposeFile', $configInfo.ComposeFile, '-ArtifactRoot', $nestedRoot, '-RunId', $RunId) + $child = Invoke-CapturedProcess "dev-stand-$($action.ToLowerInvariant())" $pwsh $arguments $stdoutPath $stderrPath 1200 + $summaryPath = Join-Path (Join-Path (Join-Path $nestedRoot 'dev-stand') ("$RunId-$($action.ToLowerInvariant())")) 'summary.json' + $summary = $null + try { $summary = Read-ActionSummary $action $summaryPath $child.ExitCode } catch { $errors.Add($_.Exception.Message) } + $actions.Add([pscustomobject][ordered]@{ action = $action; exit_code = $child.ExitCode; summary = if (Test-Path -LiteralPath $summaryPath) { [System.IO.Path]::GetFullPath($summaryPath) } else { $null }; verdict = if ($null -ne $summary) { $summary.verdict } else { $null } }) + if ($child.ExitCode -ne 0) { + $errors.Add("dev-stand $action failed with exit $($child.ExitCode)") + if ($null -ne $summary) { foreach ($nestedError in @($summary.errors)) { $errors.Add("$action`: $nestedError") } } + } + } +} +catch { $errors.Add($_.Exception.Message) } +finally { + if ($upAttempted) { + $downAttempted = $true + if ($null -eq $pwsh) { try { $pwsh = (Get-Command pwsh -ErrorAction Stop).Source } catch { $errors.Add($_.Exception.Message) } } + if ($null -ne $pwsh -and $null -ne $configInfo) { + $downStdout = Join-Path $artifactDirectory 'down.stdout.log'; $downStderr = Join-Path $artifactDirectory 'down.stderr.log' + $downArguments = @('-NoProfile', '-File', $runnerScript, '-DevStandAction', 'Down', '-ComposeProject', $configInfo.Project, '-ComposeFile', $configInfo.ComposeFile, '-ArtifactRoot', $nestedRoot, '-RunId', $RunId) + $downChild = Invoke-CapturedProcess 'dev-stand-down' $pwsh $downArguments $downStdout $downStderr 300 + $downSummaryPath = Join-Path (Join-Path (Join-Path $nestedRoot 'dev-stand') "$RunId-down") 'summary.json' + try { $downSummary = Read-ActionSummary 'Down' $downSummaryPath $downChild.ExitCode } catch { $errors.Add($_.Exception.Message) } + $actions.Add([pscustomobject][ordered]@{ action = 'Down'; exit_code = $downChild.ExitCode; summary = if (Test-Path -LiteralPath $downSummaryPath) { [System.IO.Path]::GetFullPath($downSummaryPath) } else { $null }; verdict = if ($null -ne $downSummary) { $downSummary.verdict } else { $null } }) + if ($downChild.ExitCode -ne 0) { $errors.Add("dev-stand Down failed with exit $($downChild.ExitCode)") } + } + } + + $commandsPath = Join-Path $artifactDirectory 'commands.json'; Write-Utf8NoBom $commandsPath ((ConvertTo-Json -InputObject @($script:CommandRecords.ToArray()) -Depth 14) + "`n") + $finishedAt = [DateTimeOffset]::UtcNow + $summary = [pscustomobject][ordered]@{ + schema_version = 1; gate = 'dev-stand-lifecycle'; run_id = $RunId + started_at = $startedAt.ToString('O'); finished_at = $finishedAt.ToString('O'); duration_seconds = [math]::Round(($finishedAt - $startedAt).TotalSeconds, 3) + verdict = if ($errors.Count -eq 0) { 'PASS' } else { 'FAIL' } + config = [ordered]@{ path = [System.IO.Path]::GetFullPath($Config); sha256 = if ($null -ne $configInfo) { $configInfo.Sha256 } else { $null } } + up_attempted = $upAttempted; down_attempted = $downAttempted + cleanup_status = if (-not $upAttempted) { 'NOT_APPLICABLE' } elseif ($null -ne $downSummary -and $downSummary.verdict -eq 'PASS' -and $downSummary.residual_resources_zero) { 'PASS' } else { 'FAIL' } + residual_resources_zero = if ($null -ne $downSummary) { $downSummary.residual_resources_zero } else { $null } + actions = @($actions); child_commands = $script:CommandRecords.Count; nonzero_child_commands = @($script:CommandRecords | Where-Object exit_code -ne 0).Count + commands = [System.IO.Path]::GetFullPath($commandsPath); errors = @($errors); artifact_directory = [System.IO.Path]::GetFullPath($artifactDirectory) + } + $summaryPath = Join-Path $artifactDirectory 'summary.json'; Write-Utf8NoBom $summaryPath (($summary | ConvertTo-Json -Depth 20) + "`n") + Write-Host ("dev-stand-lifecycle verdict={0} cleanup={1} actions={2}" -f $summary.verdict, $summary.cleanup_status, $summary.actions.Count) + Write-Host "summary=$([System.IO.Path]::GetFullPath($summaryPath))" +} + +if ($errors.Count -ne 0) { exit 1 } +exit 0 From cd098397764e13388aef3b4da9448172c7092fdb Mon Sep 17 00:00:00 2001 From: Kirill Turanskiy Date: Fri, 10 Jul 2026 12:21:19 +0300 Subject: [PATCH 013/111] fix: close DB bulkops behavioral edges --- ...db-bulkops-behavioral-edge-rework-maker.md | 218 + .../01-red-behavior.log | 771 ++ .../02-red-spy-seam.log | 19 + .../03-green-focused.log | 455 + .../04-green-repeat20.log | 12 + .../05-prove-it-candidate.log | 329 + .../06-prove-it-parser.log | 842 ++ .../07-post-prove-green.log | 12 + .../08-full-packages.log | 424 + .../09-legacy-compat.log | 12 + .../10-full-gorm.log | 350 + .../11-full-mcp.log | 81 + .../12-race-focused.log | 12 + .../13-vet.log | 10 + .../14-coverage.log | 12 + .../15-cover-functions.log | 951 ++ .../16-final-residue.log | 6 + .../17-review-red-authoritative-binding.log | 89 + .../18-review-green-authoritative-binding.log | 88 + .../19-review-green-authoritative-binding.log | 12 + .../20-review-repeat20.log | 12 + .../21-review-race-focused.log | 12 + .../22-review-vet.log | 10 + .../23-review-coverage.log | 12 + .../24-review-cover-functions.log | 12 + .../25-review-cover-functions.log | 952 ++ .../26-review-full-gorm.log | 356 + .../27-review-full-mcp.log | 81 + ...candidate-review-snapshot-binding.red.json | 14 + .../B-bulk-structured-input.red.json | 32 + ...-BULKOPS-BEHAVIORAL-EDGE-REWORK.final.json | 228 + .../Invoke-MakerGo.ps1 | 118 + .../SHA256SUMS.txt | 40 + .../coverage.out | 7881 +++++++++++++++++ internal/db/gorm/candidate_store.go | 191 +- internal/db/gorm/candidate_store_test.go | 261 +- internal/mcp/tools_bulkops.go | 72 +- internal/mcp/tools_dryrun_test.go | 267 + 38 files changed, 15200 insertions(+), 56 deletions(-) create mode 100644 .agent/reports/2026-07-10-db-bulkops-behavioral-edge-rework-maker.md create mode 100644 .agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/01-red-behavior.log create mode 100644 .agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/02-red-spy-seam.log create mode 100644 .agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/03-green-focused.log create mode 100644 .agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/04-green-repeat20.log create mode 100644 .agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/05-prove-it-candidate.log create mode 100644 .agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/06-prove-it-parser.log create mode 100644 .agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/07-post-prove-green.log create mode 100644 .agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/08-full-packages.log create mode 100644 .agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/09-legacy-compat.log create mode 100644 .agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/10-full-gorm.log create mode 100644 .agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/11-full-mcp.log create mode 100644 .agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/12-race-focused.log create mode 100644 .agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/13-vet.log create mode 100644 .agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/14-coverage.log create mode 100644 .agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/15-cover-functions.log create mode 100644 .agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/16-final-residue.log create mode 100644 .agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/17-review-red-authoritative-binding.log create mode 100644 .agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/18-review-green-authoritative-binding.log create mode 100644 .agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/19-review-green-authoritative-binding.log create mode 100644 .agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/20-review-repeat20.log create mode 100644 .agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/21-review-race-focused.log create mode 100644 .agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/22-review-vet.log create mode 100644 .agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/23-review-coverage.log create mode 100644 .agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/24-review-cover-functions.log create mode 100644 .agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/25-review-cover-functions.log create mode 100644 .agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/26-review-full-gorm.log create mode 100644 .agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/27-review-full-mcp.log create mode 100644 .agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/A-candidate-review-snapshot-binding.red.json create mode 100644 .agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/B-bulk-structured-input.red.json create mode 100644 .agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/DB-BULKOPS-BEHAVIORAL-EDGE-REWORK.final.json create mode 100644 .agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/Invoke-MakerGo.ps1 create mode 100644 .agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/SHA256SUMS.txt create mode 100644 .agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/coverage.out diff --git a/.agent/reports/2026-07-10-db-bulkops-behavioral-edge-rework-maker.md b/.agent/reports/2026-07-10-db-bulkops-behavioral-edge-rework-maker.md new file mode 100644 index 00000000..24ca5bc4 --- /dev/null +++ b/.agent/reports/2026-07-10-db-bulkops-behavioral-edge-rework-maker.md @@ -0,0 +1,218 @@ +# DB-BULKOPS behavioral-edge rework — maker report + +Status: **READY_FOR_INDEPENDENT_CHECK** + +This is a maker handoff, not a PASS verdict and not authorization to integrate. +The formal checker must be a fresh agent that did not implement the change or +participate in the maker-side adversarial review. + +## Contract and result + +Base: `68b2ce5835c7c6efdf1c68da9eedcb8d9c3837ef` + +The rework closes two validation classes while preserving the prior H1/M1/M2 +behavior: + +1. Every public candidate-review `WithSnapshot` seam — promote, preserve, + reject, suppress, and supersede — now uses one fail-closed binding validator. + Structural validation runs before DB access for safe legacy preflight, then + repeats inside the mutation transaction. The transaction acquires + `SELECT ... FOR UPDATE` on the authoritative candidate before creating the + snapshot or mutating anything. The validator binds the snapshot/store/audit + dependencies, op type, operation/action/candidate parameters, normalized + actor, empty initial affected IDs, exact one-entry initial `BeforeState`, + candidate key, payload ID/source session, and the complete authoritative + rollback payload. Only sub-microsecond timestamp differences introduced by + PostgreSQL storage precision are tolerated. Invalid input produces zero + candidate, memory, snapshot, or `candidate_review` audit writes. Valid input + writes exactly one synchronous `candidate_review` audit. +2. `bulk_promote`, `bulk_delete`, and `bulk_supersede` now parse raw JSON + rather than using lossy `any`/`float64` coercion. Integral JSON forms such + as `1.0` and `1e0` remain valid; `9007199254740993`, `MinInt64`, and + `MaxInt64` remain exact. Fractional, overflow, string, boolean, object, + nested-array, null, malformed, and non-object inputs fail before the facade. + A present `dry_run` must be a JSON boolean. Missing `dry_run` defaults to + false. Zero removal, deduplication, and sorting occur only after exact parse. + +## Changed-path inventory and source hashes + +Only the four authorized product/test paths changed: + +| Path | SHA-256 | +|---|---| +| `internal/db/gorm/candidate_store.go` | `e5102fc82df34cc85e2039cf62ce96155b725d3728518a196476eb2351b458c2` | +| `internal/db/gorm/candidate_store_test.go` | `8fb5258f01557ca7991b5a211f51107e69e4acd5740c5b254e63308f8969e4ff` | +| `internal/mcp/tools_bulkops.go` | `89ca7932ccafe7fa52c79099d6ecbca20a04aa7faff94ff5ec92c9d68dc7cefa` | +| `internal/mcp/tools_dryrun_test.go` | `2a4fbe5e29548b3df2eb45f16ab8e08e7938e9e95a8604e4a6f7cfeac05d0a90` | + +The evidence namespace and this report are the only other changed paths. The +complete file-hash ledger is +`.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/SHA256SUMS.txt`. + +## Cause-closure reasoning + +The original candidate-review bug was not one missing nil check. Each public +seam had enough local behavior to look correct while accepting a snapshot that +was wrong in a different dimension. The closed invariant is therefore evaluated +centrally and twice: a pure structural preflight, followed by an authoritative +transaction-bound check before writes. + +The maker-side adversarial reviewer found one additional class hole after the +first GREEN: the snapshot payload and `snapshot.SourceSessionID` could be forged +together and remain internally consistent. That review returned +`REVISE/BLOCK`. A new sibling matrix case proved the bypass on all five seams +in `17-review-red-authoritative-binding.log`. The final implementation locks +and compares the authoritative candidate before snapshot creation or mutation. +The maker-side review is hardening evidence only; it does not substitute for the +fresh formal checker. + +The original bulk-input bug likewise was not a single bad example. Once input +was decoded into `any`, JSON numbers had already crossed a lossy `float64` +boundary and wrong types could be coerced. The fix parses each raw array member +as an exact rational number, requires an integral int64 result, and parses +`dry_run` from raw JSON tokens. + +## TDD and verification evidence + +Every Go test/vet run below used a fresh exact PostgreSQL database named under +`engram_mkr_bedge_*`. The harness records base/head, the exact command, UTC +timestamps, exit code, active sessions before termination, and post-drop +database/session residue. + +### RED and Prove-It + +| Evidence | Exact command | Exit | Result | +|---|---|---:|---| +| `01-red-behavior.log` | `go test -p=1 ./internal/db/gorm ./internal/mcp -run ^(TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites|TestCandidateStore_AllCandidateReviewSnapshotSeamsCommitExactlyOneAudit|TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs|TestBulkOps_PublicDispatchPreservesExactIntegralIDsBeforeNormalization)$ -count=1 -v` | 1 | Invalid snapshots and lossy structured inputs were accepted. | +| `02-red-spy-seam.log` | `go test -p=1 ./internal/mcp -run ^(TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade|TestBulkOps_WiredFacadeReceivesExactNormalizedIDsAndStrictDryRun)$ -count=1 -v` | 1 | The pre-facade assertion seam did not yet exist. | +| `05-prove-it-candidate.log` | `go test -p=1 ./internal/db/gorm -run ^(TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites|TestCandidateStore_AllCandidateReviewSnapshotSeamsCommitExactlyOneAudit)$ -count=1` | 1 | Temporarily bypassing the validator broke the behavior tests. | +| `06-prove-it-parser.log` | `go test -p=1 ./internal/mcp -run ^(TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs|TestBulkOps_PublicDispatchPreservesExactIntegralIDsBeforeNormalization|TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade|TestBulkOps_WiredFacadeReceivesExactNormalizedIDsAndStrictDryRun)$ -count=1` | 1 | Temporarily bypassing the parser broke the behavior tests. | +| `17-review-red-authoritative-binding.log` | `go test -p=1 ./internal/db/gorm -run ^TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites$ -count=1` | 1 | Forged payload + matching forged source session was accepted by all five seams. | + +All RED and Prove-It databases finished with database/session residue `0/0`. + +### Final GREEN gates + +| Evidence | Exact command | Exit | +|---|---|---:| +| `19-review-green-authoritative-binding.log` | `go test -p=1 ./internal/db/gorm ./internal/mcp -run ^(TestCandidateStore_PromoteWithMemoryAndSnapshot_AmendFailureRollsBackPromotion|TestCandidateStore_PreserveWithMemoryAndSnapshot_RequiresCandidateReviewSnapshotBeforeMutation|TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites|TestCandidateStore_AllCandidateReviewSnapshotSeamsCommitExactlyOneAudit|TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs|TestBulkOps_PublicDispatchPreservesExactIntegralIDsBeforeNormalization|TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade|TestBulkOps_WiredFacadeReceivesExactNormalizedIDsAndStrictDryRun)$ -count=1` | 0 | +| `20-review-repeat20.log` | `go test -p=1 ./internal/db/gorm ./internal/mcp -run ^(TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites|TestCandidateStore_AllCandidateReviewSnapshotSeamsCommitExactlyOneAudit|TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs|TestBulkOps_PublicDispatchPreservesExactIntegralIDsBeforeNormalization|TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade|TestBulkOps_WiredFacadeReceivesExactNormalizedIDsAndStrictDryRun)$ -count=20` | 0 | +| `21-review-race-focused.log` | `go test -race -p=1 ./internal/db/gorm ./internal/mcp -run ^(TestCandidateStore_PromoteWithMemoryAndSnapshot_AmendFailureRollsBackPromotion|TestCandidateStore_PreserveWithMemoryAndSnapshot_RequiresCandidateReviewSnapshotBeforeMutation|TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites|TestCandidateStore_AllCandidateReviewSnapshotSeamsCommitExactlyOneAudit|TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs|TestBulkOps_PublicDispatchPreservesExactIntegralIDsBeforeNormalization|TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade|TestBulkOps_WiredFacadeReceivesExactNormalizedIDsAndStrictDryRun)$ -count=1` | 0 | +| `22-review-vet.log` | `go vet ./internal/db/gorm ./internal/mcp` | 0 | +| `23-review-coverage.log` | `go test -p=1 ./internal/db/gorm ./internal/mcp -run ^(TestCandidateStore_PromoteWithMemoryAndSnapshot_AmendFailureRollsBackPromotion\|TestCandidateStore_PreserveWithMemoryAndSnapshot_RequiresCandidateReviewSnapshotBeforeMutation\|TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites\|TestCandidateStore_AllCandidateReviewSnapshotSeamsCommitExactlyOneAudit\|TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs\|TestBulkOps_PublicDispatchPreservesExactIntegralIDsBeforeNormalization\|TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade\|TestBulkOps_WiredFacadeReceivesExactNormalizedIDsAndStrictDryRun)$ -count=1 -covermode=atomic -coverprofile=.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/coverage.out` | 0 | +| `25-review-cover-functions.log` | `go tool cover -func=.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/coverage.out` | 0 | + +All final GREEN databases finished with database/session residue `0/0`. + +Load-bearing coverage from the final profile: + +- `validateCandidateReviewSnapshotBinding`: 87.0% +- `candidateReviewPayloadMatchesAuthoritative`: 75.0% +- `promoteWithMemoryAndSnapshotAction`: 80.6% +- `transitionWithSnapshot`: 63.6% +- `parseBulkStructuredArgs`: 100.0% +- each of `handleBulkPromote`, `handleBulkDelete`, and + `handleBulkSupersede`: 80.0% + +The package percentages are 15.4% for `internal/db/gorm` and 1.8% for +`internal/mcp`; these packages are broad, so the function-level evidence is +the load-bearing measure. + +### Full changed-package gates + +`26-review-full-gorm.log` ran: + +``` +go test -p=1 ./internal/db/gorm -count=1 +``` + +It exited 1 with the same six unrelated governance/migration baseline failures +documented by the predecessor sibling-rework report: + +- `TestRuleGovernanceStore_AnnotatedCandidateWaitsUntilReviewAfter` +- `TestRuleGovernanceStore_GetLifecycleHealthAggregatesGovernanceTables` +- `TestRuleGovernanceStore_GetLifecycleHealthOmitsGlobalArbiterRunsForProjectScopedReads` +- `TestMigration144_RuleGovernanceRollbackAndReapply` +- `TestMigration144_RuleGovernanceEscapeConstraints` +- `TestMigration144_RuleGovernanceSnapshotStatusesAcceptExtendedStates` + +The run later hit PostgreSQL `FATAL: sorry, too many clients already`, producing +four secondary failures in TemporalTruth, TokenStore, and TranscriptStore. No +candidate-review test failed. Cleanup still finished `0/0`. + +`27-review-full-mcp.log` ran: + +``` +go test -p=1 ./internal/mcp -count=1 +``` + +It exited 1 only for the two documented unrelated baseline failures: + +- `TestHybridTG3_ConfidenceMin_FloorEnforced_T022` +- `TestEC_F1_TagDerivedBackfill_T007` + +No bulk structured-input test failed. Cleanup finished `0/0`. These full +package commands remain WARN/FAIL baseline; this report claims only the scoped +behavioral gates green. + +## Discrepancy ledger + +Nothing was patched silently: + +1. `08-full-packages.log` exposed an old amend-rollback fixture that constructed + a now-invalid snapshot, plus a preserve error-string compatibility mismatch. + The fixture now uses the canonical reviewpacket snapshot and the historical + `candidate_review` wording is preserved. `09-legacy-compat.log` passed. +2. The first authoritative-row fix in + `18-review-green-authoritative-binding.log` compared raw timestamp JSON + exactly and moved all validation inside the transaction. That rejected a + legitimate sub-microsecond timestamp representation and caused the legacy + nil-DB preflight test to panic. The final form restores structural preflight, + repeats validation inside the transaction, compares timestamps only within + PostgreSQL precision, and compares every other candidate field exactly. + Logs 19, 20, and 21 passed. +3. `24-review-cover-functions.log` failed with exit 2 because PowerShell split + `-func=` into two arguments. The command was rerun through an explicit + `GoArgs` array; `25-review-cover-functions.log` exited 0. +4. Fresh migrations continue to emit the pre-existing non-fatal stale + pattern/relation index, absent `observation_vectors`, and unavailable + `vectorscale` warnings. +5. Captured Go/GORM logs contained trailing spaces and tab-indented test output + that made the staged `git diff --check` fail despite a clean source diff. + Before hashing and commit, every `*.log` in the evidence namespace was + mechanically normalized by replacing tabs with spaces and removing only + end-of-line whitespace. Commands, output text, exit codes, and timestamps + were otherwise unchanged. + +## Diagnostics and residual risk + +Serena diagnostics reported zero errors and zero warnings in all four changed +source/test files. It reported only modernize hints: existing `interface{}` +uses, a `maps.Copy` suggestion, and Go 1.22 loop-variable copy hints. + +The pre-facade tests use the narrow package-level `executeBulkFacade` function +variable. Tests are serial and the focused race gate passed. A future test that +mutates this hook in parallel would need its own synchronization or a server- +scoped injection seam; that is a test-architecture residual risk, not a current +production mutation path. + +## Out-of-scope audit node + +`MCP-STRUCTURED-INPUT-VALIDATION`: `store_memory.supersedes` still reaches +lossy coercion without explicit raw structured-input type validation. The task +explicitly prohibited edits to `coerce.go` and `tools_memory.go`, so this is +reported only and was not patched. + +## Final cleanup + +`16-final-residue.log` records the final exact-prefix queries: + +```sql +SELECT count(*) FROM pg_database WHERE datname LIKE 'engram_mkr_bedge_%'; +SELECT count(*) FROM pg_stat_activity WHERE datname LIKE 'engram_mkr_bedge_%'; +``` + +At `2026-07-10T09:10:54.3826001Z`, both returned zero; exit code was 0. + +The structured companion is +`.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/DB-BULKOPS-BEHAVIORAL-EDGE-REWORK.final.json`. diff --git a/.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/01-red-behavior.log b/.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/01-red-behavior.log new file mode 100644 index 00000000..610b4f5b --- /dev/null +++ b/.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/01-red-behavior.log @@ -0,0 +1,771 @@ +base_sha=68b2ce5835c7c6efdf1c68da9eedcb8d9c3837ef +head_sha=68b2ce5835c7c6efdf1c68da9eedcb8d9c3837ef +database=engram_mkr_bedge_red_behavior_20260710a +command=go test -p=1 ./internal/db/gorm ./internal/mcp -run ^(TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites|TestCandidateStore_AllCandidateReviewSnapshotSeamsCommitExactlyOneAudit|TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs|TestBulkOps_PublicDispatchPreservesExactIntegralIDsBeforeNormalization)$ -count=1 -v +started_utc=2026-07-10T08:27:52.8928902Z +=== RUN TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites + +2026/07/10 11:27:56 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/migrations.go:483 ERROR: column "is_deprecated" does not exist (SQLSTATE 42703) +[2.418ms] [rows:0] CREATE INDEX IF NOT EXISTS idx_patterns_frequency + ON patterns(frequency DESC, last_seen_at_epoch DESC) + WHERE is_deprecated = 0 + +2026/07/10 11:27:56 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/migrations.go:578 ERROR: column "is_deprecated" does not exist (SQLSTATE 42703) +[1.004ms] [rows:0] CREATE INDEX IF NOT EXISTS idx_patterns_type_project + ON patterns(type, project, frequency DESC) + WHERE is_deprecated = 0 + +2026/07/10 11:27:56 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/migrations.go:578 ERROR: column "source_observation_id" does not exist (SQLSTATE 42703) +[0.997ms] [rows:0] CREATE INDEX IF NOT EXISTS idx_relations_source_type + ON observation_relations(source_observation_id, relation_type) + +2026/07/10 11:27:56 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/migrations.go:578 ERROR: column "target_observation_id" does not exist (SQLSTATE 42703) +[0.500ms] [rows:0] CREATE INDEX IF NOT EXISTS idx_relations_target_type + ON observation_relations(target_observation_id, relation_type) + +2026/07/10 11:27:56 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/migrations.go:670 ERROR: column "source_observation_id" does not exist (SQLSTATE 42703) +[0.500ms] [rows:0] CREATE INDEX IF NOT EXISTS idx_relations_source_type_target + ON observation_relations(source_observation_id, relation_type, target_observation_id) + +2026/07/10 11:27:56 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/migrations.go:670 ERROR: column "target_observation_id" does not exist (SQLSTATE 42703) +[1.000ms] [rows:0] CREATE INDEX IF NOT EXISTS idx_relations_target_type_source + ON observation_relations(target_observation_id, relation_type, source_observation_id) + +2026/07/10 11:27:56 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/migrations.go:1447 ERROR: relation "observation_vectors" does not exist (SQLSTATE 42P01) +[1.001ms] [rows:0] + DELETE FROM observation_vectors + WHERE id IN ( + SELECT ov.id FROM observation_vectors ov + LEFT JOIN observations o ON ov.metadata->>'sqlite_id' = o.id::text + WHERE o.id IS NULL + ) + +{"level":"warn","error":"ERROR: relation \"observation_vectors\" does not exist (SQLSTATE 42P01)","time":"2026-07-10T11:27:56+03:00","message":"migration 040: orphan vector cleanup failed (non-fatal)"} +{"level":"info","garbage_deleted":0,"orphan_vectors_deleted":0,"time":"2026-07-10T11:27:56+03:00","message":"migration 040: garbage cleanup complete"} +{"level":"info","orphan_vectors_deleted":0,"time":"2026-07-10T11:27:56+03:00","message":"migration 041: orphan vector purge complete"} +{"level":"info","patterns_deleted":0,"time":"2026-07-10T11:27:56+03:00","message":"migration 042: low-quality pattern purge complete"} +{"level":"info","total_deleted":0,"time":"2026-07-10T11:27:56+03:00","message":"migration 043: radical observation cleanup complete"} + +2026/07/10 11:27:57 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/migrations.go:3502 ERROR: extension "vectorscale" is not available (SQLSTATE 0A000) +[1.000ms] [rows:0] CREATE EXTENSION IF NOT EXISTS vectorscale CASCADE +{"level":"warn","error":"ERROR: extension \"vectorscale\" is not available (SQLSTATE 0A000)","time":"2026-07-10T11:27:57+03:00","message":"migration 109: vectorscale extension not available, skipping DiskANN index"} +=== RUN TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/promote/nil_snapshot + candidate_store_test.go:851: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/candidate_store_test.go:851 + Error: An error is expected but got nil. + Test: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/promote/nil_snapshot + Messages: invalid candidate-review snapshot binding must fail closed +=== RUN TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/promote/nil_snapshot_store +=== RUN TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/promote/nil_audit_store +=== RUN TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/promote/wrong_op_type + candidate_store_test.go:851: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/candidate_store_test.go:851 + Error: An error is expected but got nil. + Test: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/promote/wrong_op_type + Messages: invalid candidate-review snapshot binding must fail closed +=== RUN TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/promote/wrong_operation_parameter + candidate_store_test.go:851: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/candidate_store_test.go:851 + Error: An error is expected but got nil. + Test: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/promote/wrong_operation_parameter + Messages: invalid candidate-review snapshot binding must fail closed +=== RUN TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/promote/wrong_action_parameter + candidate_store_test.go:851: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/candidate_store_test.go:851 + Error: An error is expected but got nil. + Test: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/promote/wrong_action_parameter + Messages: invalid candidate-review snapshot binding must fail closed +=== RUN TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/promote/wrong_candidate_parameter + candidate_store_test.go:851: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/candidate_store_test.go:851 + Error: An error is expected but got nil. + Test: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/promote/wrong_candidate_parameter + Messages: invalid candidate-review snapshot binding must fail closed +=== RUN TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/promote/wrong_actor + candidate_store_test.go:851: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/candidate_store_test.go:851 + Error: An error is expected but got nil. + Test: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/promote/wrong_actor + Messages: invalid candidate-review snapshot binding must fail closed +=== RUN TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/promote/wrong_before_key +=== RUN TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/promote/wrong_before_payload_id + candidate_store_test.go:851: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/candidate_store_test.go:851 + Error: An error is expected but got nil. + Test: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/promote/wrong_before_payload_id + Messages: invalid candidate-review snapshot binding must fail closed +=== RUN TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/promote/prepopulated_after + candidate_store_test.go:851: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/candidate_store_test.go:851 + Error: An error is expected but got nil. + Test: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/promote/prepopulated_after + Messages: invalid candidate-review snapshot binding must fail closed +=== RUN TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/promote/extra_before_entry + candidate_store_test.go:851: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/candidate_store_test.go:851 + Error: An error is expected but got nil. + Test: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/promote/extra_before_entry + Messages: invalid candidate-review snapshot binding must fail closed +=== RUN TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/promote/prepopulated_affected_memory_ids + candidate_store_test.go:851: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/candidate_store_test.go:851 + Error: An error is expected but got nil. + Test: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/promote/prepopulated_affected_memory_ids + Messages: invalid candidate-review snapshot binding must fail closed +=== RUN TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/promote/wrong_source_session + candidate_store_test.go:851: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/candidate_store_test.go:851 + Error: An error is expected but got nil. + Test: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/promote/wrong_source_session + Messages: invalid candidate-review snapshot binding must fail closed +=== RUN TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/preserve/nil_snapshot +=== RUN TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/preserve/nil_snapshot_store +=== RUN TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/preserve/nil_audit_store +=== RUN TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/preserve/wrong_op_type +=== RUN TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/preserve/wrong_operation_parameter + candidate_store_test.go:851: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/candidate_store_test.go:851 + Error: An error is expected but got nil. + Test: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/preserve/wrong_operation_parameter + Messages: invalid candidate-review snapshot binding must fail closed +=== RUN TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/preserve/wrong_action_parameter + candidate_store_test.go:851: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/candidate_store_test.go:851 + Error: An error is expected but got nil. + Test: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/preserve/wrong_action_parameter + Messages: invalid candidate-review snapshot binding must fail closed +=== RUN TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/preserve/wrong_candidate_parameter + candidate_store_test.go:851: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/candidate_store_test.go:851 + Error: An error is expected but got nil. + Test: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/preserve/wrong_candidate_parameter + Messages: invalid candidate-review snapshot binding must fail closed +=== RUN TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/preserve/wrong_actor + candidate_store_test.go:851: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/candidate_store_test.go:851 + Error: An error is expected but got nil. + Test: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/preserve/wrong_actor + Messages: invalid candidate-review snapshot binding must fail closed +=== RUN TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/preserve/wrong_before_key +=== RUN TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/preserve/wrong_before_payload_id + candidate_store_test.go:851: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/candidate_store_test.go:851 + Error: An error is expected but got nil. + Test: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/preserve/wrong_before_payload_id + Messages: invalid candidate-review snapshot binding must fail closed +=== RUN TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/preserve/prepopulated_after + candidate_store_test.go:851: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/candidate_store_test.go:851 + Error: An error is expected but got nil. + Test: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/preserve/prepopulated_after + Messages: invalid candidate-review snapshot binding must fail closed +=== RUN TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/preserve/extra_before_entry + candidate_store_test.go:851: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/candidate_store_test.go:851 + Error: An error is expected but got nil. + Test: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/preserve/extra_before_entry + Messages: invalid candidate-review snapshot binding must fail closed +=== RUN TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/preserve/prepopulated_affected_memory_ids + candidate_store_test.go:851: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/candidate_store_test.go:851 + Error: An error is expected but got nil. + Test: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/preserve/prepopulated_affected_memory_ids + Messages: invalid candidate-review snapshot binding must fail closed +=== RUN TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/preserve/wrong_source_session + candidate_store_test.go:851: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/candidate_store_test.go:851 + Error: An error is expected but got nil. + Test: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/preserve/wrong_source_session + Messages: invalid candidate-review snapshot binding must fail closed +=== RUN TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/reject/nil_snapshot +=== RUN TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/reject/nil_snapshot_store +=== RUN TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/reject/nil_audit_store +=== RUN TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/reject/wrong_op_type +=== RUN TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/reject/wrong_operation_parameter + candidate_store_test.go:851: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/candidate_store_test.go:851 + Error: An error is expected but got nil. + Test: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/reject/wrong_operation_parameter + Messages: invalid candidate-review snapshot binding must fail closed +=== RUN TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/reject/wrong_action_parameter + candidate_store_test.go:851: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/candidate_store_test.go:851 + Error: An error is expected but got nil. + Test: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/reject/wrong_action_parameter + Messages: invalid candidate-review snapshot binding must fail closed +=== RUN TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/reject/wrong_candidate_parameter + candidate_store_test.go:851: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/candidate_store_test.go:851 + Error: An error is expected but got nil. + Test: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/reject/wrong_candidate_parameter + Messages: invalid candidate-review snapshot binding must fail closed +=== RUN TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/reject/wrong_actor + candidate_store_test.go:851: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/candidate_store_test.go:851 + Error: An error is expected but got nil. + Test: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/reject/wrong_actor + Messages: invalid candidate-review snapshot binding must fail closed +=== RUN TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/reject/wrong_before_key +=== RUN TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/reject/wrong_before_payload_id + candidate_store_test.go:851: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/candidate_store_test.go:851 + Error: An error is expected but got nil. + Test: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/reject/wrong_before_payload_id + Messages: invalid candidate-review snapshot binding must fail closed +=== RUN TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/reject/prepopulated_after + candidate_store_test.go:851: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/candidate_store_test.go:851 + Error: An error is expected but got nil. + Test: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/reject/prepopulated_after + Messages: invalid candidate-review snapshot binding must fail closed +=== RUN TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/reject/extra_before_entry + candidate_store_test.go:851: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/candidate_store_test.go:851 + Error: An error is expected but got nil. + Test: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/reject/extra_before_entry + Messages: invalid candidate-review snapshot binding must fail closed +=== RUN TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/reject/prepopulated_affected_memory_ids + candidate_store_test.go:851: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/candidate_store_test.go:851 + Error: An error is expected but got nil. + Test: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/reject/prepopulated_affected_memory_ids + Messages: invalid candidate-review snapshot binding must fail closed +=== RUN TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/reject/wrong_source_session + candidate_store_test.go:851: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/candidate_store_test.go:851 + Error: An error is expected but got nil. + Test: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/reject/wrong_source_session + Messages: invalid candidate-review snapshot binding must fail closed +=== RUN TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/suppress/nil_snapshot +=== RUN TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/suppress/nil_snapshot_store +=== RUN TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/suppress/nil_audit_store +=== RUN TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/suppress/wrong_op_type +=== RUN TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/suppress/wrong_operation_parameter + candidate_store_test.go:851: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/candidate_store_test.go:851 + Error: An error is expected but got nil. + Test: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/suppress/wrong_operation_parameter + Messages: invalid candidate-review snapshot binding must fail closed +=== RUN TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/suppress/wrong_action_parameter + candidate_store_test.go:851: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/candidate_store_test.go:851 + Error: An error is expected but got nil. + Test: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/suppress/wrong_action_parameter + Messages: invalid candidate-review snapshot binding must fail closed +=== RUN TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/suppress/wrong_candidate_parameter + candidate_store_test.go:851: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/candidate_store_test.go:851 + Error: An error is expected but got nil. + Test: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/suppress/wrong_candidate_parameter + Messages: invalid candidate-review snapshot binding must fail closed +=== RUN TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/suppress/wrong_actor + candidate_store_test.go:851: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/candidate_store_test.go:851 + Error: An error is expected but got nil. + Test: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/suppress/wrong_actor + Messages: invalid candidate-review snapshot binding must fail closed +=== RUN TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/suppress/wrong_before_key +=== RUN TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/suppress/wrong_before_payload_id + candidate_store_test.go:851: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/candidate_store_test.go:851 + Error: An error is expected but got nil. + Test: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/suppress/wrong_before_payload_id + Messages: invalid candidate-review snapshot binding must fail closed +=== RUN TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/suppress/prepopulated_after + candidate_store_test.go:851: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/candidate_store_test.go:851 + Error: An error is expected but got nil. + Test: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/suppress/prepopulated_after + Messages: invalid candidate-review snapshot binding must fail closed +=== RUN TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/suppress/extra_before_entry + candidate_store_test.go:851: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/candidate_store_test.go:851 + Error: An error is expected but got nil. + Test: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/suppress/extra_before_entry + Messages: invalid candidate-review snapshot binding must fail closed +=== RUN TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/suppress/prepopulated_affected_memory_ids + candidate_store_test.go:851: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/candidate_store_test.go:851 + Error: An error is expected but got nil. + Test: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/suppress/prepopulated_affected_memory_ids + Messages: invalid candidate-review snapshot binding must fail closed +=== RUN TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/suppress/wrong_source_session + candidate_store_test.go:851: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/candidate_store_test.go:851 + Error: An error is expected but got nil. + Test: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/suppress/wrong_source_session + Messages: invalid candidate-review snapshot binding must fail closed +=== RUN TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/supersede/nil_snapshot +=== RUN TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/supersede/nil_snapshot_store +=== RUN TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/supersede/nil_audit_store +=== RUN TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/supersede/wrong_op_type +=== RUN TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/supersede/wrong_operation_parameter + candidate_store_test.go:851: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/candidate_store_test.go:851 + Error: An error is expected but got nil. + Test: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/supersede/wrong_operation_parameter + Messages: invalid candidate-review snapshot binding must fail closed +=== RUN TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/supersede/wrong_action_parameter + candidate_store_test.go:851: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/candidate_store_test.go:851 + Error: An error is expected but got nil. + Test: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/supersede/wrong_action_parameter + Messages: invalid candidate-review snapshot binding must fail closed +=== RUN TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/supersede/wrong_candidate_parameter + candidate_store_test.go:851: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/candidate_store_test.go:851 + Error: An error is expected but got nil. + Test: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/supersede/wrong_candidate_parameter + Messages: invalid candidate-review snapshot binding must fail closed +=== RUN TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/supersede/wrong_actor + candidate_store_test.go:851: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/candidate_store_test.go:851 + Error: An error is expected but got nil. + Test: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/supersede/wrong_actor + Messages: invalid candidate-review snapshot binding must fail closed +=== RUN TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/supersede/wrong_before_key +=== RUN TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/supersede/wrong_before_payload_id + candidate_store_test.go:851: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/candidate_store_test.go:851 + Error: An error is expected but got nil. + Test: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/supersede/wrong_before_payload_id + Messages: invalid candidate-review snapshot binding must fail closed +=== RUN TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/supersede/prepopulated_after + candidate_store_test.go:851: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/candidate_store_test.go:851 + Error: An error is expected but got nil. + Test: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/supersede/prepopulated_after + Messages: invalid candidate-review snapshot binding must fail closed +=== RUN TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/supersede/extra_before_entry + candidate_store_test.go:851: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/candidate_store_test.go:851 + Error: An error is expected but got nil. + Test: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/supersede/extra_before_entry + Messages: invalid candidate-review snapshot binding must fail closed +=== RUN TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/supersede/prepopulated_affected_memory_ids + candidate_store_test.go:851: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/candidate_store_test.go:851 + Error: An error is expected but got nil. + Test: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/supersede/prepopulated_affected_memory_ids + Messages: invalid candidate-review snapshot binding must fail closed +=== RUN TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/supersede/wrong_source_session + candidate_store_test.go:851: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/candidate_store_test.go:851 + Error: An error is expected but got nil. + Test: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/supersede/wrong_source_session + Messages: invalid candidate-review snapshot binding must fail closed +--- FAIL: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites (4.57s) + --- FAIL: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/promote/nil_snapshot (0.04s) + --- PASS: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/promote/nil_snapshot_store (0.01s) + --- PASS: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/promote/nil_audit_store (0.01s) + --- FAIL: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/promote/wrong_op_type (0.02s) + --- FAIL: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/promote/wrong_operation_parameter (0.03s) + --- FAIL: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/promote/wrong_action_parameter (0.02s) + --- FAIL: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/promote/wrong_candidate_parameter (0.03s) + --- FAIL: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/promote/wrong_actor (0.03s) + --- PASS: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/promote/wrong_before_key (0.02s) + --- FAIL: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/promote/wrong_before_payload_id (0.02s) + --- FAIL: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/promote/prepopulated_after (0.02s) + --- FAIL: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/promote/extra_before_entry (0.02s) + --- FAIL: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/promote/prepopulated_affected_memory_ids (0.02s) + --- FAIL: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/promote/wrong_source_session (0.02s) + --- PASS: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/preserve/nil_snapshot (0.01s) + --- PASS: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/preserve/nil_snapshot_store (0.01s) + --- PASS: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/preserve/nil_audit_store (0.01s) + --- PASS: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/preserve/wrong_op_type (0.01s) + --- FAIL: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/preserve/wrong_operation_parameter (0.03s) + --- FAIL: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/preserve/wrong_action_parameter (0.04s) + --- FAIL: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/preserve/wrong_candidate_parameter (0.03s) + --- FAIL: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/preserve/wrong_actor (0.03s) + --- PASS: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/preserve/wrong_before_key (0.02s) + --- FAIL: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/preserve/wrong_before_payload_id (0.02s) + --- FAIL: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/preserve/prepopulated_after (0.03s) + --- FAIL: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/preserve/extra_before_entry (0.02s) + --- FAIL: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/preserve/prepopulated_affected_memory_ids (0.03s) + --- FAIL: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/preserve/wrong_source_session (0.02s) + --- PASS: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/reject/nil_snapshot (0.01s) + --- PASS: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/reject/nil_snapshot_store (0.01s) + --- PASS: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/reject/nil_audit_store (0.01s) + --- PASS: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/reject/wrong_op_type (0.02s) + --- FAIL: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/reject/wrong_operation_parameter (0.02s) + --- FAIL: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/reject/wrong_action_parameter (0.02s) + --- FAIL: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/reject/wrong_candidate_parameter (0.02s) + --- FAIL: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/reject/wrong_actor (0.02s) + --- PASS: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/reject/wrong_before_key (0.02s) + --- FAIL: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/reject/wrong_before_payload_id (0.02s) + --- FAIL: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/reject/prepopulated_after (0.02s) + --- FAIL: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/reject/extra_before_entry (0.02s) + --- FAIL: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/reject/prepopulated_affected_memory_ids (0.02s) + --- FAIL: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/reject/wrong_source_session (0.02s) + --- PASS: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/suppress/nil_snapshot (0.01s) + --- PASS: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/suppress/nil_snapshot_store (0.01s) + --- PASS: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/suppress/nil_audit_store (0.01s) + --- PASS: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/suppress/wrong_op_type (0.02s) + --- FAIL: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/suppress/wrong_operation_parameter (0.02s) + --- FAIL: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/suppress/wrong_action_parameter (0.02s) + --- FAIL: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/suppress/wrong_candidate_parameter (0.02s) + --- FAIL: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/suppress/wrong_actor (0.02s) + --- PASS: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/suppress/wrong_before_key (0.02s) + --- FAIL: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/suppress/wrong_before_payload_id (0.02s) + --- FAIL: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/suppress/prepopulated_after (0.02s) + --- FAIL: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/suppress/extra_before_entry (0.02s) + --- FAIL: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/suppress/prepopulated_affected_memory_ids (0.02s) + --- FAIL: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/suppress/wrong_source_session (0.02s) + --- PASS: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/supersede/nil_snapshot (0.01s) + --- PASS: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/supersede/nil_snapshot_store (0.01s) + --- PASS: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/supersede/nil_audit_store (0.01s) + --- PASS: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/supersede/wrong_op_type (0.02s) + --- FAIL: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/supersede/wrong_operation_parameter (0.02s) + --- FAIL: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/supersede/wrong_action_parameter (0.02s) + --- FAIL: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/supersede/wrong_candidate_parameter (0.02s) + --- FAIL: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/supersede/wrong_actor (0.02s) + --- PASS: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/supersede/wrong_before_key (0.01s) + --- FAIL: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/supersede/wrong_before_payload_id (0.02s) + --- FAIL: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/supersede/prepopulated_after (0.02s) + --- FAIL: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/supersede/extra_before_entry (0.02s) + --- FAIL: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/supersede/prepopulated_affected_memory_ids (0.02s) + --- FAIL: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/supersede/wrong_source_session (0.02s) +=== RUN TestCandidateStore_AllCandidateReviewSnapshotSeamsCommitExactlyOneAudit +=== RUN TestCandidateStore_AllCandidateReviewSnapshotSeamsCommitExactlyOneAudit/promote +=== RUN TestCandidateStore_AllCandidateReviewSnapshotSeamsCommitExactlyOneAudit/preserve +=== RUN TestCandidateStore_AllCandidateReviewSnapshotSeamsCommitExactlyOneAudit/reject +=== RUN TestCandidateStore_AllCandidateReviewSnapshotSeamsCommitExactlyOneAudit/suppress +=== RUN TestCandidateStore_AllCandidateReviewSnapshotSeamsCommitExactlyOneAudit/supersede +--- PASS: TestCandidateStore_AllCandidateReviewSnapshotSeamsCommitExactlyOneAudit (0.26s) + --- PASS: TestCandidateStore_AllCandidateReviewSnapshotSeamsCommitExactlyOneAudit/promote (0.05s) + --- PASS: TestCandidateStore_AllCandidateReviewSnapshotSeamsCommitExactlyOneAudit/preserve (0.03s) + --- PASS: TestCandidateStore_AllCandidateReviewSnapshotSeamsCommitExactlyOneAudit/reject (0.02s) + --- PASS: TestCandidateStore_AllCandidateReviewSnapshotSeamsCommitExactlyOneAudit/suppress (0.02s) + --- PASS: TestCandidateStore_AllCandidateReviewSnapshotSeamsCommitExactlyOneAudit/supersede (0.02s) +FAIL +FAIL github.com/thebtf/engram/internal/db/gorm 4.928s +=== RUN TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs +=== RUN TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_promote +=== RUN TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_promote/missing_id_field + tools_dryrun_test.go:239: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:239 + Error: An error is expected but got nil. + Test: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_promote/missing_id_field +=== RUN TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_promote/ids_null + tools_dryrun_test.go:250: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:250 + Error: An error is expected but got nil. + Test: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_promote/ids_null +=== RUN TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_promote/ids_top_level_string + tools_dryrun_test.go:250: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:250 + Error: An error is expected but got nil. + Test: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_promote/ids_top_level_string +=== RUN TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_promote/ids_string_member + tools_dryrun_test.go:250: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:250 + Error: An error is expected but got nil. + Test: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_promote/ids_string_member +=== RUN TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_promote/ids_boolean_member + tools_dryrun_test.go:250: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:250 + Error: An error is expected but got nil. + Test: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_promote/ids_boolean_member +=== RUN TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_promote/ids_object_member + tools_dryrun_test.go:250: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:250 + Error: An error is expected but got nil. + Test: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_promote/ids_object_member +=== RUN TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_promote/ids_nested_array + tools_dryrun_test.go:250: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:250 + Error: An error is expected but got nil. + Test: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_promote/ids_nested_array +=== RUN TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_promote/ids_fraction + tools_dryrun_test.go:250: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:250 + Error: An error is expected but got nil. + Test: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_promote/ids_fraction +=== RUN TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_promote/ids_positive_overflow + tools_dryrun_test.go:250: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:250 + Error: An error is expected but got nil. + Test: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_promote/ids_positive_overflow +=== RUN TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_promote/ids_negative_overflow + tools_dryrun_test.go:250: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:250 + Error: An error is expected but got nil. + Test: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_promote/ids_negative_overflow +=== RUN TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_promote/ids_mixed_invalid + tools_dryrun_test.go:250: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:250 + Error: An error is expected but got nil. + Test: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_promote/ids_mixed_invalid +=== RUN TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_promote/dry_run_string + tools_dryrun_test.go:262: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:262 + Error: An error is expected but got nil. + Test: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_promote/dry_run_string +=== RUN TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_promote/dry_run_number + tools_dryrun_test.go:262: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:262 + Error: An error is expected but got nil. + Test: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_promote/dry_run_number +=== RUN TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_promote/dry_run_null + tools_dryrun_test.go:263: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:263 + Error: "bulk_promote: facade not available — set ENGRAM_VNEXT_F_ENABLED=true and wire stores" does not contain "dry_run" + Test: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_promote/dry_run_null +=== RUN TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_promote/dry_run_object + tools_dryrun_test.go:263: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:263 + Error: "bulk_promote: facade not available — set ENGRAM_VNEXT_F_ENABLED=true and wire stores" does not contain "dry_run" + Test: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_promote/dry_run_object +=== RUN TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_promote/dry_run_array + tools_dryrun_test.go:263: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:263 + Error: "bulk_promote: facade not available — set ENGRAM_VNEXT_F_ENABLED=true and wire stores" does not contain "dry_run" + Test: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_promote/dry_run_array +=== RUN TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_delete +=== RUN TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_delete/missing_id_field + tools_dryrun_test.go:239: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:239 + Error: An error is expected but got nil. + Test: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_delete/missing_id_field +=== RUN TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_delete/ids_null + tools_dryrun_test.go:250: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:250 + Error: An error is expected but got nil. + Test: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_delete/ids_null +=== RUN TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_delete/ids_top_level_string + tools_dryrun_test.go:250: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:250 + Error: An error is expected but got nil. + Test: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_delete/ids_top_level_string +=== RUN TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_delete/ids_string_member + tools_dryrun_test.go:250: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:250 + Error: An error is expected but got nil. + Test: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_delete/ids_string_member +=== RUN TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_delete/ids_boolean_member + tools_dryrun_test.go:250: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:250 + Error: An error is expected but got nil. + Test: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_delete/ids_boolean_member +=== RUN TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_delete/ids_object_member + tools_dryrun_test.go:250: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:250 + Error: An error is expected but got nil. + Test: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_delete/ids_object_member +=== RUN TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_delete/ids_nested_array + tools_dryrun_test.go:250: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:250 + Error: An error is expected but got nil. + Test: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_delete/ids_nested_array +=== RUN TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_delete/ids_fraction + tools_dryrun_test.go:250: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:250 + Error: An error is expected but got nil. + Test: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_delete/ids_fraction +=== RUN TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_delete/ids_positive_overflow + tools_dryrun_test.go:250: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:250 + Error: An error is expected but got nil. + Test: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_delete/ids_positive_overflow +=== RUN TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_delete/ids_negative_overflow + tools_dryrun_test.go:250: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:250 + Error: An error is expected but got nil. + Test: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_delete/ids_negative_overflow +=== RUN TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_delete/ids_mixed_invalid + tools_dryrun_test.go:250: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:250 + Error: An error is expected but got nil. + Test: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_delete/ids_mixed_invalid +=== RUN TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_delete/dry_run_string + tools_dryrun_test.go:262: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:262 + Error: An error is expected but got nil. + Test: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_delete/dry_run_string +=== RUN TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_delete/dry_run_number + tools_dryrun_test.go:262: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:262 + Error: An error is expected but got nil. + Test: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_delete/dry_run_number +=== RUN TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_delete/dry_run_null + tools_dryrun_test.go:263: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:263 + Error: "bulk_delete: facade not available — set ENGRAM_VNEXT_F_ENABLED=true and wire stores" does not contain "dry_run" + Test: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_delete/dry_run_null +=== RUN TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_delete/dry_run_object + tools_dryrun_test.go:263: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:263 + Error: "bulk_delete: facade not available — set ENGRAM_VNEXT_F_ENABLED=true and wire stores" does not contain "dry_run" + Test: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_delete/dry_run_object +=== RUN TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_delete/dry_run_array + tools_dryrun_test.go:263: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:263 + Error: "bulk_delete: facade not available — set ENGRAM_VNEXT_F_ENABLED=true and wire stores" does not contain "dry_run" + Test: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_delete/dry_run_array +=== RUN TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_supersede +=== RUN TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_supersede/missing_id_field + tools_dryrun_test.go:239: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:239 + Error: An error is expected but got nil. + Test: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_supersede/missing_id_field +=== RUN TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_supersede/ids_null + tools_dryrun_test.go:250: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:250 + Error: An error is expected but got nil. + Test: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_supersede/ids_null +=== RUN TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_supersede/ids_top_level_string + tools_dryrun_test.go:250: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:250 + Error: An error is expected but got nil. + Test: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_supersede/ids_top_level_string +=== RUN TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_supersede/ids_string_member + tools_dryrun_test.go:250: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:250 + Error: An error is expected but got nil. + Test: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_supersede/ids_string_member +=== RUN TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_supersede/ids_boolean_member + tools_dryrun_test.go:250: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:250 + Error: An error is expected but got nil. + Test: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_supersede/ids_boolean_member +=== RUN TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_supersede/ids_object_member + tools_dryrun_test.go:250: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:250 + Error: An error is expected but got nil. + Test: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_supersede/ids_object_member +=== RUN TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_supersede/ids_nested_array + tools_dryrun_test.go:250: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:250 + Error: An error is expected but got nil. + Test: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_supersede/ids_nested_array +=== RUN TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_supersede/ids_fraction + tools_dryrun_test.go:250: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:250 + Error: An error is expected but got nil. + Test: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_supersede/ids_fraction +=== RUN TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_supersede/ids_positive_overflow + tools_dryrun_test.go:250: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:250 + Error: An error is expected but got nil. + Test: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_supersede/ids_positive_overflow +=== RUN TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_supersede/ids_negative_overflow + tools_dryrun_test.go:250: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:250 + Error: An error is expected but got nil. + Test: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_supersede/ids_negative_overflow +=== RUN TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_supersede/ids_mixed_invalid + tools_dryrun_test.go:250: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:250 + Error: An error is expected but got nil. + Test: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_supersede/ids_mixed_invalid +=== RUN TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_supersede/dry_run_string + tools_dryrun_test.go:262: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:262 + Error: An error is expected but got nil. + Test: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_supersede/dry_run_string +=== RUN TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_supersede/dry_run_number + tools_dryrun_test.go:262: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:262 + Error: An error is expected but got nil. + Test: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_supersede/dry_run_number +=== RUN TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_supersede/dry_run_null + tools_dryrun_test.go:263: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:263 + Error: "bulk_supersede: facade not available — set ENGRAM_VNEXT_F_ENABLED=true and wire stores" does not contain "dry_run" + Test: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_supersede/dry_run_null +=== RUN TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_supersede/dry_run_object + tools_dryrun_test.go:263: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:263 + Error: "bulk_supersede: facade not available — set ENGRAM_VNEXT_F_ENABLED=true and wire stores" does not contain "dry_run" + Test: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_supersede/dry_run_object +=== RUN TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_supersede/dry_run_array + tools_dryrun_test.go:263: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:263 + Error: "bulk_supersede: facade not available — set ENGRAM_VNEXT_F_ENABLED=true and wire stores" does not contain "dry_run" + Test: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_supersede/dry_run_array +--- FAIL: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs (0.00s) + --- FAIL: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_promote (0.00s) + --- FAIL: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_promote/missing_id_field (0.00s) + --- FAIL: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_promote/ids_null (0.00s) + --- FAIL: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_promote/ids_top_level_string (0.00s) + --- FAIL: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_promote/ids_string_member (0.00s) + --- FAIL: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_promote/ids_boolean_member (0.00s) + --- FAIL: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_promote/ids_object_member (0.00s) + --- FAIL: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_promote/ids_nested_array (0.00s) + --- FAIL: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_promote/ids_fraction (0.00s) + --- FAIL: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_promote/ids_positive_overflow (0.00s) + --- FAIL: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_promote/ids_negative_overflow (0.00s) + --- FAIL: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_promote/ids_mixed_invalid (0.00s) + --- FAIL: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_promote/dry_run_string (0.00s) + --- FAIL: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_promote/dry_run_number (0.00s) + --- FAIL: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_promote/dry_run_null (0.00s) + --- FAIL: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_promote/dry_run_object (0.00s) + --- FAIL: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_promote/dry_run_array (0.00s) + --- FAIL: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_delete (0.00s) + --- FAIL: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_delete/missing_id_field (0.00s) + --- FAIL: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_delete/ids_null (0.00s) + --- FAIL: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_delete/ids_top_level_string (0.00s) + --- FAIL: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_delete/ids_string_member (0.00s) + --- FAIL: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_delete/ids_boolean_member (0.00s) + --- FAIL: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_delete/ids_object_member (0.00s) + --- FAIL: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_delete/ids_nested_array (0.00s) + --- FAIL: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_delete/ids_fraction (0.00s) + --- FAIL: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_delete/ids_positive_overflow (0.00s) + --- FAIL: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_delete/ids_negative_overflow (0.00s) + --- FAIL: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_delete/ids_mixed_invalid (0.00s) + --- FAIL: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_delete/dry_run_string (0.00s) + --- FAIL: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_delete/dry_run_number (0.00s) + --- FAIL: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_delete/dry_run_null (0.00s) + --- FAIL: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_delete/dry_run_object (0.00s) + --- FAIL: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_delete/dry_run_array (0.00s) + --- FAIL: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_supersede (0.00s) + --- FAIL: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_supersede/missing_id_field (0.00s) + --- FAIL: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_supersede/ids_null (0.00s) + --- FAIL: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_supersede/ids_top_level_string (0.00s) + --- FAIL: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_supersede/ids_string_member (0.00s) + --- FAIL: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_supersede/ids_boolean_member (0.00s) + --- FAIL: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_supersede/ids_object_member (0.00s) + --- FAIL: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_supersede/ids_nested_array (0.00s) + --- FAIL: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_supersede/ids_fraction (0.00s) + --- FAIL: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_supersede/ids_positive_overflow (0.00s) + --- FAIL: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_supersede/ids_negative_overflow (0.00s) + --- FAIL: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_supersede/ids_mixed_invalid (0.00s) + --- FAIL: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_supersede/dry_run_string (0.00s) + --- FAIL: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_supersede/dry_run_number (0.00s) + --- FAIL: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_supersede/dry_run_null (0.00s) + --- FAIL: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_supersede/dry_run_object (0.00s) + --- FAIL: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_supersede/dry_run_array (0.00s) +=== RUN TestBulkOps_PublicDispatchPreservesExactIntegralIDsBeforeNormalization +=== RUN TestBulkOps_PublicDispatchPreservesExactIntegralIDsBeforeNormalization/bulk_promote + tools_dryrun_test.go:286: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:286 + Error: Not equal: + expected: 5 + actual : 3 + Test: TestBulkOps_PublicDispatchPreservesExactIntegralIDsBeforeNormalization/bulk_promote +=== RUN TestBulkOps_PublicDispatchPreservesExactIntegralIDsBeforeNormalization/bulk_delete + tools_dryrun_test.go:286: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:286 + Error: Not equal: + expected: 5 + actual : 7 + Test: TestBulkOps_PublicDispatchPreservesExactIntegralIDsBeforeNormalization/bulk_delete +=== RUN TestBulkOps_PublicDispatchPreservesExactIntegralIDsBeforeNormalization/bulk_supersede + tools_dryrun_test.go:286: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:286 + Error: Not equal: + expected: 5 + actual : 7 + Test: TestBulkOps_PublicDispatchPreservesExactIntegralIDsBeforeNormalization/bulk_supersede +--- FAIL: TestBulkOps_PublicDispatchPreservesExactIntegralIDsBeforeNormalization (0.00s) + --- FAIL: TestBulkOps_PublicDispatchPreservesExactIntegralIDsBeforeNormalization/bulk_promote (0.00s) + --- FAIL: TestBulkOps_PublicDispatchPreservesExactIntegralIDsBeforeNormalization/bulk_delete (0.00s) + --- FAIL: TestBulkOps_PublicDispatchPreservesExactIntegralIDsBeforeNormalization/bulk_supersede (0.00s) +FAIL +FAIL github.com/thebtf/engram/internal/mcp 0.113s +FAIL +test_exit=1 +active_sessions_before_terminate=0 +database_residue=0 +activity_residue=0 +finished_utc=2026-07-10T08:28:04.4170941Z diff --git a/.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/02-red-spy-seam.log b/.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/02-red-spy-seam.log new file mode 100644 index 00000000..bfe7fc46 --- /dev/null +++ b/.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/02-red-spy-seam.log @@ -0,0 +1,19 @@ +base_sha=68b2ce5835c7c6efdf1c68da9eedcb8d9c3837ef +head_sha=68b2ce5835c7c6efdf1c68da9eedcb8d9c3837ef +database=engram_mkr_bedge_red_spy_20260710a +command=go test -p=1 ./internal/mcp -run ^(TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade|TestBulkOps_WiredFacadeReceivesExactNormalizedIDsAndStrictDryRun)$ -count=1 -v +started_utc=2026-07-10T08:29:46.9910221Z +# github.com/thebtf/engram/internal/mcp [github.com/thebtf/engram/internal/mcp.test] +internal\mcp\tools_dryrun_test.go:295:21: undefined: executeBulkFacade +internal\mcp\tools_dryrun_test.go:296:21: undefined: executeBulkFacade +internal\mcp\tools_dryrun_test.go:299:2: undefined: executeBulkFacade +internal\mcp\tools_dryrun_test.go:372:21: undefined: executeBulkFacade +internal\mcp\tools_dryrun_test.go:373:21: undefined: executeBulkFacade +internal\mcp\tools_dryrun_test.go:397:6: undefined: executeBulkFacade +FAIL github.com/thebtf/engram/internal/mcp [build failed] +FAIL +test_exit=1 +active_sessions_before_terminate=0 +database_residue=0 +activity_residue=0 +finished_utc=2026-07-10T08:29:50.2378967Z diff --git a/.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/03-green-focused.log b/.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/03-green-focused.log new file mode 100644 index 00000000..f4e68076 --- /dev/null +++ b/.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/03-green-focused.log @@ -0,0 +1,455 @@ +base_sha=68b2ce5835c7c6efdf1c68da9eedcb8d9c3837ef +head_sha=68b2ce5835c7c6efdf1c68da9eedcb8d9c3837ef +database=engram_mkr_bedge_green_focus_20260710a +command=go test -p=1 ./internal/db/gorm ./internal/mcp -run ^(TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites|TestCandidateStore_AllCandidateReviewSnapshotSeamsCommitExactlyOneAudit|TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs|TestBulkOps_PublicDispatchPreservesExactIntegralIDsBeforeNormalization|TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade|TestBulkOps_WiredFacadeReceivesExactNormalizedIDsAndStrictDryRun)$ -count=1 -v +started_utc=2026-07-10T08:34:25.9178509Z +=== RUN TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites + +2026/07/10 11:34:29 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/migrations.go:483 ERROR: column "is_deprecated" does not exist (SQLSTATE 42703) +[1.500ms] [rows:0] CREATE INDEX IF NOT EXISTS idx_patterns_frequency + ON patterns(frequency DESC, last_seen_at_epoch DESC) + WHERE is_deprecated = 0 + +2026/07/10 11:34:29 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/migrations.go:578 ERROR: column "is_deprecated" does not exist (SQLSTATE 42703) +[1.013ms] [rows:0] CREATE INDEX IF NOT EXISTS idx_patterns_type_project + ON patterns(type, project, frequency DESC) + WHERE is_deprecated = 0 + +2026/07/10 11:34:29 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/migrations.go:578 ERROR: column "source_observation_id" does not exist (SQLSTATE 42703) +[0.997ms] [rows:0] CREATE INDEX IF NOT EXISTS idx_relations_source_type + ON observation_relations(source_observation_id, relation_type) + +2026/07/10 11:34:29 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/migrations.go:578 ERROR: column "target_observation_id" does not exist (SQLSTATE 42703) +[1.000ms] [rows:0] CREATE INDEX IF NOT EXISTS idx_relations_target_type + ON observation_relations(target_observation_id, relation_type) + +2026/07/10 11:34:29 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/migrations.go:670 ERROR: column "source_observation_id" does not exist (SQLSTATE 42703) +[0.500ms] [rows:0] CREATE INDEX IF NOT EXISTS idx_relations_source_type_target + ON observation_relations(source_observation_id, relation_type, target_observation_id) + +2026/07/10 11:34:29 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/migrations.go:670 ERROR: column "target_observation_id" does not exist (SQLSTATE 42703) +[1.001ms] [rows:0] CREATE INDEX IF NOT EXISTS idx_relations_target_type_source + ON observation_relations(target_observation_id, relation_type, source_observation_id) + +2026/07/10 11:34:30 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/migrations.go:1447 ERROR: relation "observation_vectors" does not exist (SQLSTATE 42P01) +[0.500ms] [rows:0] + DELETE FROM observation_vectors + WHERE id IN ( + SELECT ov.id FROM observation_vectors ov + LEFT JOIN observations o ON ov.metadata->>'sqlite_id' = o.id::text + WHERE o.id IS NULL + ) + +{"level":"warn","error":"ERROR: relation \"observation_vectors\" does not exist (SQLSTATE 42P01)","time":"2026-07-10T11:34:30+03:00","message":"migration 040: orphan vector cleanup failed (non-fatal)"} +{"level":"info","garbage_deleted":0,"orphan_vectors_deleted":0,"time":"2026-07-10T11:34:30+03:00","message":"migration 040: garbage cleanup complete"} +{"level":"info","orphan_vectors_deleted":0,"time":"2026-07-10T11:34:30+03:00","message":"migration 041: orphan vector purge complete"} +{"level":"info","patterns_deleted":0,"time":"2026-07-10T11:34:30+03:00","message":"migration 042: low-quality pattern purge complete"} +{"level":"info","total_deleted":0,"time":"2026-07-10T11:34:30+03:00","message":"migration 043: radical observation cleanup complete"} + +2026/07/10 11:34:31 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/migrations.go:3502 ERROR: extension "vectorscale" is not available (SQLSTATE 0A000) +[1.002ms] [rows:0] CREATE EXTENSION IF NOT EXISTS vectorscale CASCADE +{"level":"warn","error":"ERROR: extension \"vectorscale\" is not available (SQLSTATE 0A000)","time":"2026-07-10T11:34:31+03:00","message":"migration 109: vectorscale extension not available, skipping DiskANN index"} +=== RUN TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/promote/nil_snapshot +=== RUN TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/promote/nil_snapshot_store +=== RUN TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/promote/nil_audit_store +=== RUN TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/promote/wrong_op_type +=== RUN TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/promote/wrong_operation_parameter +=== RUN TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/promote/wrong_action_parameter +=== RUN TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/promote/wrong_candidate_parameter +=== RUN TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/promote/wrong_actor +=== RUN TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/promote/wrong_before_key +=== RUN TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/promote/wrong_before_payload_id +=== RUN TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/promote/prepopulated_after +=== RUN TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/promote/extra_before_entry +=== RUN TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/promote/prepopulated_affected_memory_ids +=== RUN TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/promote/wrong_source_session +=== RUN TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/preserve/nil_snapshot +=== RUN TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/preserve/nil_snapshot_store +=== RUN TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/preserve/nil_audit_store +=== RUN TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/preserve/wrong_op_type +=== RUN TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/preserve/wrong_operation_parameter +=== RUN TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/preserve/wrong_action_parameter +=== RUN TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/preserve/wrong_candidate_parameter +=== RUN TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/preserve/wrong_actor +=== RUN TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/preserve/wrong_before_key +=== RUN TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/preserve/wrong_before_payload_id +=== RUN TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/preserve/prepopulated_after +=== RUN TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/preserve/extra_before_entry +=== RUN TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/preserve/prepopulated_affected_memory_ids +=== RUN TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/preserve/wrong_source_session +=== RUN TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/reject/nil_snapshot +=== RUN TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/reject/nil_snapshot_store +=== RUN TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/reject/nil_audit_store +=== RUN TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/reject/wrong_op_type +=== RUN TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/reject/wrong_operation_parameter +=== RUN TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/reject/wrong_action_parameter +=== RUN TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/reject/wrong_candidate_parameter +=== RUN TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/reject/wrong_actor +=== RUN TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/reject/wrong_before_key +=== RUN TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/reject/wrong_before_payload_id +=== RUN TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/reject/prepopulated_after +=== RUN TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/reject/extra_before_entry +=== RUN TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/reject/prepopulated_affected_memory_ids +=== RUN TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/reject/wrong_source_session +=== RUN TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/suppress/nil_snapshot +=== RUN TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/suppress/nil_snapshot_store +=== RUN TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/suppress/nil_audit_store +=== RUN TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/suppress/wrong_op_type +=== RUN TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/suppress/wrong_operation_parameter +=== RUN TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/suppress/wrong_action_parameter +=== RUN TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/suppress/wrong_candidate_parameter +=== RUN TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/suppress/wrong_actor +=== RUN TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/suppress/wrong_before_key +=== RUN TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/suppress/wrong_before_payload_id +=== RUN TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/suppress/prepopulated_after +=== RUN TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/suppress/extra_before_entry +=== RUN TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/suppress/prepopulated_affected_memory_ids +=== RUN TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/suppress/wrong_source_session +=== RUN TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/supersede/nil_snapshot +=== RUN TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/supersede/nil_snapshot_store +=== RUN TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/supersede/nil_audit_store +=== RUN TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/supersede/wrong_op_type +=== RUN TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/supersede/wrong_operation_parameter +=== RUN TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/supersede/wrong_action_parameter +=== RUN TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/supersede/wrong_candidate_parameter +=== RUN TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/supersede/wrong_actor +=== RUN TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/supersede/wrong_before_key +=== RUN TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/supersede/wrong_before_payload_id +=== RUN TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/supersede/prepopulated_after +=== RUN TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/supersede/extra_before_entry +=== RUN TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/supersede/prepopulated_affected_memory_ids +=== RUN TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/supersede/wrong_source_session +--- PASS: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites (3.75s) + --- PASS: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/promote/nil_snapshot (0.02s) + --- PASS: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/promote/nil_snapshot_store (0.01s) + --- PASS: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/promote/nil_audit_store (0.01s) + --- PASS: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/promote/wrong_op_type (0.01s) + --- PASS: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/promote/wrong_operation_parameter (0.01s) + --- PASS: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/promote/wrong_action_parameter (0.01s) + --- PASS: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/promote/wrong_candidate_parameter (0.01s) + --- PASS: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/promote/wrong_actor (0.01s) + --- PASS: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/promote/wrong_before_key (0.01s) + --- PASS: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/promote/wrong_before_payload_id (0.01s) + --- PASS: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/promote/prepopulated_after (0.01s) + --- PASS: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/promote/extra_before_entry (0.01s) + --- PASS: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/promote/prepopulated_affected_memory_ids (0.01s) + --- PASS: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/promote/wrong_source_session (0.01s) + --- PASS: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/preserve/nil_snapshot (0.01s) + --- PASS: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/preserve/nil_snapshot_store (0.01s) + --- PASS: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/preserve/nil_audit_store (0.01s) + --- PASS: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/preserve/wrong_op_type (0.01s) + --- PASS: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/preserve/wrong_operation_parameter (0.01s) + --- PASS: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/preserve/wrong_action_parameter (0.01s) + --- PASS: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/preserve/wrong_candidate_parameter (0.01s) + --- PASS: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/preserve/wrong_actor (0.01s) + --- PASS: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/preserve/wrong_before_key (0.01s) + --- PASS: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/preserve/wrong_before_payload_id (0.01s) + --- PASS: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/preserve/prepopulated_after (0.01s) + --- PASS: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/preserve/extra_before_entry (0.01s) + --- PASS: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/preserve/prepopulated_affected_memory_ids (0.01s) + --- PASS: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/preserve/wrong_source_session (0.01s) + --- PASS: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/reject/nil_snapshot (0.01s) + --- PASS: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/reject/nil_snapshot_store (0.01s) + --- PASS: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/reject/nil_audit_store (0.01s) + --- PASS: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/reject/wrong_op_type (0.01s) + --- PASS: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/reject/wrong_operation_parameter (0.01s) + --- PASS: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/reject/wrong_action_parameter (0.01s) + --- PASS: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/reject/wrong_candidate_parameter (0.01s) + --- PASS: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/reject/wrong_actor (0.01s) + --- PASS: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/reject/wrong_before_key (0.01s) + --- PASS: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/reject/wrong_before_payload_id (0.01s) + --- PASS: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/reject/prepopulated_after (0.01s) + --- PASS: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/reject/extra_before_entry (0.01s) + --- PASS: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/reject/prepopulated_affected_memory_ids (0.01s) + --- PASS: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/reject/wrong_source_session (0.01s) + --- PASS: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/suppress/nil_snapshot (0.01s) + --- PASS: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/suppress/nil_snapshot_store (0.01s) + --- PASS: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/suppress/nil_audit_store (0.01s) + --- PASS: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/suppress/wrong_op_type (0.01s) + --- PASS: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/suppress/wrong_operation_parameter (0.01s) + --- PASS: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/suppress/wrong_action_parameter (0.01s) + --- PASS: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/suppress/wrong_candidate_parameter (0.01s) + --- PASS: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/suppress/wrong_actor (0.01s) + --- PASS: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/suppress/wrong_before_key (0.01s) + --- PASS: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/suppress/wrong_before_payload_id (0.01s) + --- PASS: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/suppress/prepopulated_after (0.01s) + --- PASS: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/suppress/extra_before_entry (0.01s) + --- PASS: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/suppress/prepopulated_affected_memory_ids (0.01s) + --- PASS: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/suppress/wrong_source_session (0.01s) + --- PASS: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/supersede/nil_snapshot (0.01s) + --- PASS: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/supersede/nil_snapshot_store (0.01s) + --- PASS: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/supersede/nil_audit_store (0.01s) + --- PASS: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/supersede/wrong_op_type (0.01s) + --- PASS: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/supersede/wrong_operation_parameter (0.01s) + --- PASS: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/supersede/wrong_action_parameter (0.01s) + --- PASS: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/supersede/wrong_candidate_parameter (0.01s) + --- PASS: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/supersede/wrong_actor (0.01s) + --- PASS: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/supersede/wrong_before_key (0.01s) + --- PASS: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/supersede/wrong_before_payload_id (0.01s) + --- PASS: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/supersede/prepopulated_after (0.01s) + --- PASS: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/supersede/extra_before_entry (0.01s) + --- PASS: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/supersede/prepopulated_affected_memory_ids (0.01s) + --- PASS: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/supersede/wrong_source_session (0.01s) +=== RUN TestCandidateStore_AllCandidateReviewSnapshotSeamsCommitExactlyOneAudit +=== RUN TestCandidateStore_AllCandidateReviewSnapshotSeamsCommitExactlyOneAudit/promote +=== RUN TestCandidateStore_AllCandidateReviewSnapshotSeamsCommitExactlyOneAudit/preserve +=== RUN TestCandidateStore_AllCandidateReviewSnapshotSeamsCommitExactlyOneAudit/reject +=== RUN TestCandidateStore_AllCandidateReviewSnapshotSeamsCommitExactlyOneAudit/suppress +=== RUN TestCandidateStore_AllCandidateReviewSnapshotSeamsCommitExactlyOneAudit/supersede +--- PASS: TestCandidateStore_AllCandidateReviewSnapshotSeamsCommitExactlyOneAudit (0.23s) + --- PASS: TestCandidateStore_AllCandidateReviewSnapshotSeamsCommitExactlyOneAudit/promote (0.04s) + --- PASS: TestCandidateStore_AllCandidateReviewSnapshotSeamsCommitExactlyOneAudit/preserve (0.02s) + --- PASS: TestCandidateStore_AllCandidateReviewSnapshotSeamsCommitExactlyOneAudit/reject (0.02s) + --- PASS: TestCandidateStore_AllCandidateReviewSnapshotSeamsCommitExactlyOneAudit/suppress (0.02s) + --- PASS: TestCandidateStore_AllCandidateReviewSnapshotSeamsCommitExactlyOneAudit/supersede (0.02s) +PASS +ok github.com/thebtf/engram/internal/db/gorm 4.088s +=== RUN TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs +=== RUN TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_promote +=== RUN TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_promote/missing_id_field +=== RUN TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_promote/ids_null +=== RUN TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_promote/ids_top_level_string +=== RUN TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_promote/ids_string_member +=== RUN TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_promote/ids_boolean_member +=== RUN TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_promote/ids_object_member +=== RUN TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_promote/ids_nested_array +=== RUN TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_promote/ids_fraction +=== RUN TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_promote/ids_positive_overflow +=== RUN TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_promote/ids_negative_overflow +=== RUN TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_promote/ids_mixed_invalid +=== RUN TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_promote/dry_run_string +=== RUN TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_promote/dry_run_number +=== RUN TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_promote/dry_run_null +=== RUN TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_promote/dry_run_object +=== RUN TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_promote/dry_run_array +=== RUN TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_delete +=== RUN TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_delete/missing_id_field +=== RUN TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_delete/ids_null +=== RUN TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_delete/ids_top_level_string +=== RUN TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_delete/ids_string_member +=== RUN TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_delete/ids_boolean_member +=== RUN TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_delete/ids_object_member +=== RUN TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_delete/ids_nested_array +=== RUN TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_delete/ids_fraction +=== RUN TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_delete/ids_positive_overflow +=== RUN TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_delete/ids_negative_overflow +=== RUN TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_delete/ids_mixed_invalid +=== RUN TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_delete/dry_run_string +=== RUN TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_delete/dry_run_number +=== RUN TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_delete/dry_run_null +=== RUN TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_delete/dry_run_object +=== RUN TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_delete/dry_run_array +=== RUN TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_supersede +=== RUN TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_supersede/missing_id_field +=== RUN TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_supersede/ids_null +=== RUN TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_supersede/ids_top_level_string +=== RUN TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_supersede/ids_string_member +=== RUN TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_supersede/ids_boolean_member +=== RUN TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_supersede/ids_object_member +=== RUN TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_supersede/ids_nested_array +=== RUN TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_supersede/ids_fraction +=== RUN TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_supersede/ids_positive_overflow +=== RUN TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_supersede/ids_negative_overflow +=== RUN TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_supersede/ids_mixed_invalid +=== RUN TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_supersede/dry_run_string +=== RUN TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_supersede/dry_run_number +=== RUN TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_supersede/dry_run_null +=== RUN TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_supersede/dry_run_object +=== RUN TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_supersede/dry_run_array +--- PASS: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs (0.00s) + --- PASS: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_promote (0.00s) + --- PASS: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_promote/missing_id_field (0.00s) + --- PASS: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_promote/ids_null (0.00s) + --- PASS: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_promote/ids_top_level_string (0.00s) + --- PASS: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_promote/ids_string_member (0.00s) + --- PASS: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_promote/ids_boolean_member (0.00s) + --- PASS: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_promote/ids_object_member (0.00s) + --- PASS: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_promote/ids_nested_array (0.00s) + --- PASS: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_promote/ids_fraction (0.00s) + --- PASS: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_promote/ids_positive_overflow (0.00s) + --- PASS: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_promote/ids_negative_overflow (0.00s) + --- PASS: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_promote/ids_mixed_invalid (0.00s) + --- PASS: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_promote/dry_run_string (0.00s) + --- PASS: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_promote/dry_run_number (0.00s) + --- PASS: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_promote/dry_run_null (0.00s) + --- PASS: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_promote/dry_run_object (0.00s) + --- PASS: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_promote/dry_run_array (0.00s) + --- PASS: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_delete (0.00s) + --- PASS: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_delete/missing_id_field (0.00s) + --- PASS: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_delete/ids_null (0.00s) + --- PASS: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_delete/ids_top_level_string (0.00s) + --- PASS: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_delete/ids_string_member (0.00s) + --- PASS: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_delete/ids_boolean_member (0.00s) + --- PASS: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_delete/ids_object_member (0.00s) + --- PASS: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_delete/ids_nested_array (0.00s) + --- PASS: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_delete/ids_fraction (0.00s) + --- PASS: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_delete/ids_positive_overflow (0.00s) + --- PASS: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_delete/ids_negative_overflow (0.00s) + --- PASS: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_delete/ids_mixed_invalid (0.00s) + --- PASS: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_delete/dry_run_string (0.00s) + --- PASS: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_delete/dry_run_number (0.00s) + --- PASS: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_delete/dry_run_null (0.00s) + --- PASS: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_delete/dry_run_object (0.00s) + --- PASS: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_delete/dry_run_array (0.00s) + --- PASS: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_supersede (0.00s) + --- PASS: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_supersede/missing_id_field (0.00s) + --- PASS: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_supersede/ids_null (0.00s) + --- PASS: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_supersede/ids_top_level_string (0.00s) + --- PASS: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_supersede/ids_string_member (0.00s) + --- PASS: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_supersede/ids_boolean_member (0.00s) + --- PASS: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_supersede/ids_object_member (0.00s) + --- PASS: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_supersede/ids_nested_array (0.00s) + --- PASS: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_supersede/ids_fraction (0.00s) + --- PASS: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_supersede/ids_positive_overflow (0.00s) + --- PASS: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_supersede/ids_negative_overflow (0.00s) + --- PASS: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_supersede/ids_mixed_invalid (0.00s) + --- PASS: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_supersede/dry_run_string (0.00s) + --- PASS: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_supersede/dry_run_number (0.00s) + --- PASS: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_supersede/dry_run_null (0.00s) + --- PASS: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_supersede/dry_run_object (0.00s) + --- PASS: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_supersede/dry_run_array (0.00s) +=== RUN TestBulkOps_PublicDispatchPreservesExactIntegralIDsBeforeNormalization +=== RUN TestBulkOps_PublicDispatchPreservesExactIntegralIDsBeforeNormalization/bulk_promote +=== RUN TestBulkOps_PublicDispatchPreservesExactIntegralIDsBeforeNormalization/bulk_delete +=== RUN TestBulkOps_PublicDispatchPreservesExactIntegralIDsBeforeNormalization/bulk_supersede +--- PASS: TestBulkOps_PublicDispatchPreservesExactIntegralIDsBeforeNormalization (0.00s) + --- PASS: TestBulkOps_PublicDispatchPreservesExactIntegralIDsBeforeNormalization/bulk_promote (0.00s) + --- PASS: TestBulkOps_PublicDispatchPreservesExactIntegralIDsBeforeNormalization/bulk_delete (0.00s) + --- PASS: TestBulkOps_PublicDispatchPreservesExactIntegralIDsBeforeNormalization/bulk_supersede (0.00s) +=== RUN TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade +=== RUN TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_promote +=== RUN TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_promote/missing_id_field +=== RUN TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_promote/invalid_ids_0 +=== RUN TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_promote/invalid_ids_1 +=== RUN TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_promote/invalid_ids_2 +=== RUN TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_promote/invalid_ids_3 +=== RUN TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_promote/invalid_ids_4 +=== RUN TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_promote/invalid_ids_5 +=== RUN TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_promote/invalid_ids_6 +=== RUN TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_promote/invalid_ids_7 +=== RUN TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_promote/invalid_ids_8 +=== RUN TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_promote/invalid_ids_9 +=== RUN TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_promote/invalid_dry_run_0 +=== RUN TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_promote/invalid_dry_run_1 +=== RUN TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_promote/invalid_dry_run_2 +=== RUN TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_promote/invalid_dry_run_3 +=== RUN TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_promote/invalid_dry_run_4 +=== RUN TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_delete +=== RUN TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_delete/missing_id_field +=== RUN TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_delete/invalid_ids_0 +=== RUN TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_delete/invalid_ids_1 +=== RUN TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_delete/invalid_ids_2 +=== RUN TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_delete/invalid_ids_3 +=== RUN TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_delete/invalid_ids_4 +=== RUN TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_delete/invalid_ids_5 +=== RUN TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_delete/invalid_ids_6 +=== RUN TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_delete/invalid_ids_7 +=== RUN TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_delete/invalid_ids_8 +=== RUN TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_delete/invalid_ids_9 +=== RUN TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_delete/invalid_dry_run_0 +=== RUN TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_delete/invalid_dry_run_1 +=== RUN TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_delete/invalid_dry_run_2 +=== RUN TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_delete/invalid_dry_run_3 +=== RUN TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_delete/invalid_dry_run_4 +=== RUN TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_supersede +=== RUN TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_supersede/missing_id_field +=== RUN TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_supersede/invalid_ids_0 +=== RUN TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_supersede/invalid_ids_1 +=== RUN TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_supersede/invalid_ids_2 +=== RUN TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_supersede/invalid_ids_3 +=== RUN TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_supersede/invalid_ids_4 +=== RUN TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_supersede/invalid_ids_5 +=== RUN TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_supersede/invalid_ids_6 +=== RUN TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_supersede/invalid_ids_7 +=== RUN TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_supersede/invalid_ids_8 +=== RUN TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_supersede/invalid_ids_9 +=== RUN TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_supersede/invalid_dry_run_0 +=== RUN TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_supersede/invalid_dry_run_1 +=== RUN TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_supersede/invalid_dry_run_2 +=== RUN TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_supersede/invalid_dry_run_3 +=== RUN TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_supersede/invalid_dry_run_4 +--- PASS: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade (0.00s) + --- PASS: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_promote (0.00s) + --- PASS: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_promote/missing_id_field (0.00s) + --- PASS: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_promote/invalid_ids_0 (0.00s) + --- PASS: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_promote/invalid_ids_1 (0.00s) + --- PASS: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_promote/invalid_ids_2 (0.00s) + --- PASS: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_promote/invalid_ids_3 (0.00s) + --- PASS: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_promote/invalid_ids_4 (0.00s) + --- PASS: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_promote/invalid_ids_5 (0.00s) + --- PASS: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_promote/invalid_ids_6 (0.00s) + --- PASS: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_promote/invalid_ids_7 (0.00s) + --- PASS: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_promote/invalid_ids_8 (0.00s) + --- PASS: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_promote/invalid_ids_9 (0.00s) + --- PASS: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_promote/invalid_dry_run_0 (0.00s) + --- PASS: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_promote/invalid_dry_run_1 (0.00s) + --- PASS: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_promote/invalid_dry_run_2 (0.00s) + --- PASS: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_promote/invalid_dry_run_3 (0.00s) + --- PASS: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_promote/invalid_dry_run_4 (0.00s) + --- PASS: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_delete (0.00s) + --- PASS: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_delete/missing_id_field (0.00s) + --- PASS: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_delete/invalid_ids_0 (0.00s) + --- PASS: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_delete/invalid_ids_1 (0.00s) + --- PASS: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_delete/invalid_ids_2 (0.00s) + --- PASS: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_delete/invalid_ids_3 (0.00s) + --- PASS: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_delete/invalid_ids_4 (0.00s) + --- PASS: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_delete/invalid_ids_5 (0.00s) + --- PASS: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_delete/invalid_ids_6 (0.00s) + --- PASS: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_delete/invalid_ids_7 (0.00s) + --- PASS: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_delete/invalid_ids_8 (0.00s) + --- PASS: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_delete/invalid_ids_9 (0.00s) + --- PASS: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_delete/invalid_dry_run_0 (0.00s) + --- PASS: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_delete/invalid_dry_run_1 (0.00s) + --- PASS: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_delete/invalid_dry_run_2 (0.00s) + --- PASS: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_delete/invalid_dry_run_3 (0.00s) + --- PASS: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_delete/invalid_dry_run_4 (0.00s) + --- PASS: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_supersede (0.00s) + --- PASS: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_supersede/missing_id_field (0.00s) + --- PASS: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_supersede/invalid_ids_0 (0.00s) + --- PASS: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_supersede/invalid_ids_1 (0.00s) + --- PASS: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_supersede/invalid_ids_2 (0.00s) + --- PASS: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_supersede/invalid_ids_3 (0.00s) + --- PASS: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_supersede/invalid_ids_4 (0.00s) + --- PASS: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_supersede/invalid_ids_5 (0.00s) + --- PASS: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_supersede/invalid_ids_6 (0.00s) + --- PASS: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_supersede/invalid_ids_7 (0.00s) + --- PASS: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_supersede/invalid_ids_8 (0.00s) + --- PASS: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_supersede/invalid_ids_9 (0.00s) + --- PASS: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_supersede/invalid_dry_run_0 (0.00s) + --- PASS: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_supersede/invalid_dry_run_1 (0.00s) + --- PASS: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_supersede/invalid_dry_run_2 (0.00s) + --- PASS: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_supersede/invalid_dry_run_3 (0.00s) + --- PASS: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_supersede/invalid_dry_run_4 (0.00s) +=== RUN TestBulkOps_WiredFacadeReceivesExactNormalizedIDsAndStrictDryRun +=== RUN TestBulkOps_WiredFacadeReceivesExactNormalizedIDsAndStrictDryRun/bulk_promote +=== RUN TestBulkOps_WiredFacadeReceivesExactNormalizedIDsAndStrictDryRun/bulk_promote/missing +=== RUN TestBulkOps_WiredFacadeReceivesExactNormalizedIDsAndStrictDryRun/bulk_promote/false +=== RUN TestBulkOps_WiredFacadeReceivesExactNormalizedIDsAndStrictDryRun/bulk_promote/true +=== RUN TestBulkOps_WiredFacadeReceivesExactNormalizedIDsAndStrictDryRun/bulk_delete +=== RUN TestBulkOps_WiredFacadeReceivesExactNormalizedIDsAndStrictDryRun/bulk_delete/missing +=== RUN TestBulkOps_WiredFacadeReceivesExactNormalizedIDsAndStrictDryRun/bulk_delete/false +=== RUN TestBulkOps_WiredFacadeReceivesExactNormalizedIDsAndStrictDryRun/bulk_delete/true +=== RUN TestBulkOps_WiredFacadeReceivesExactNormalizedIDsAndStrictDryRun/bulk_supersede +=== RUN TestBulkOps_WiredFacadeReceivesExactNormalizedIDsAndStrictDryRun/bulk_supersede/missing +=== RUN TestBulkOps_WiredFacadeReceivesExactNormalizedIDsAndStrictDryRun/bulk_supersede/false +=== RUN TestBulkOps_WiredFacadeReceivesExactNormalizedIDsAndStrictDryRun/bulk_supersede/true +--- PASS: TestBulkOps_WiredFacadeReceivesExactNormalizedIDsAndStrictDryRun (0.00s) + --- PASS: TestBulkOps_WiredFacadeReceivesExactNormalizedIDsAndStrictDryRun/bulk_promote (0.00s) + --- PASS: TestBulkOps_WiredFacadeReceivesExactNormalizedIDsAndStrictDryRun/bulk_promote/missing (0.00s) + --- PASS: TestBulkOps_WiredFacadeReceivesExactNormalizedIDsAndStrictDryRun/bulk_promote/false (0.00s) + --- PASS: TestBulkOps_WiredFacadeReceivesExactNormalizedIDsAndStrictDryRun/bulk_promote/true (0.00s) + --- PASS: TestBulkOps_WiredFacadeReceivesExactNormalizedIDsAndStrictDryRun/bulk_delete (0.00s) + --- PASS: TestBulkOps_WiredFacadeReceivesExactNormalizedIDsAndStrictDryRun/bulk_delete/missing (0.00s) + --- PASS: TestBulkOps_WiredFacadeReceivesExactNormalizedIDsAndStrictDryRun/bulk_delete/false (0.00s) + --- PASS: TestBulkOps_WiredFacadeReceivesExactNormalizedIDsAndStrictDryRun/bulk_delete/true (0.00s) + --- PASS: TestBulkOps_WiredFacadeReceivesExactNormalizedIDsAndStrictDryRun/bulk_supersede (0.00s) + --- PASS: TestBulkOps_WiredFacadeReceivesExactNormalizedIDsAndStrictDryRun/bulk_supersede/missing (0.00s) + --- PASS: TestBulkOps_WiredFacadeReceivesExactNormalizedIDsAndStrictDryRun/bulk_supersede/false (0.00s) + --- PASS: TestBulkOps_WiredFacadeReceivesExactNormalizedIDsAndStrictDryRun/bulk_supersede/true (0.00s) +PASS +ok github.com/thebtf/engram/internal/mcp 0.116s +test_exit=0 +active_sessions_before_terminate=0 +database_residue=0 +activity_residue=0 +finished_utc=2026-07-10T08:34:37.3570030Z diff --git a/.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/04-green-repeat20.log b/.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/04-green-repeat20.log new file mode 100644 index 00000000..7b2c9cc2 --- /dev/null +++ b/.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/04-green-repeat20.log @@ -0,0 +1,12 @@ +base_sha=68b2ce5835c7c6efdf1c68da9eedcb8d9c3837ef +head_sha=68b2ce5835c7c6efdf1c68da9eedcb8d9c3837ef +database=engram_mkr_bedge_green_repeat20_20260710a +command=go test -p=1 ./internal/db/gorm ./internal/mcp -run ^(TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites|TestCandidateStore_AllCandidateReviewSnapshotSeamsCommitExactlyOneAudit|TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs|TestBulkOps_PublicDispatchPreservesExactIntegralIDsBeforeNormalization|TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade|TestBulkOps_WiredFacadeReceivesExactNormalizedIDsAndStrictDryRun)$ -count=20 +started_utc=2026-07-10T08:36:17.1307572Z +ok github.com/thebtf/engram/internal/db/gorm 22.566s +ok github.com/thebtf/engram/internal/mcp 0.126s +test_exit=0 +active_sessions_before_terminate=0 +database_residue=0 +activity_residue=0 +finished_utc=2026-07-10T08:36:44.0665417Z diff --git a/.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/05-prove-it-candidate.log b/.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/05-prove-it-candidate.log new file mode 100644 index 00000000..4e611403 --- /dev/null +++ b/.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/05-prove-it-candidate.log @@ -0,0 +1,329 @@ +base_sha=68b2ce5835c7c6efdf1c68da9eedcb8d9c3837ef +head_sha=68b2ce5835c7c6efdf1c68da9eedcb8d9c3837ef +database=engram_mkr_bedge_prove_candidate_20260710a +command=go test -p=1 ./internal/db/gorm -run ^(TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites|TestCandidateStore_AllCandidateReviewSnapshotSeamsCommitExactlyOneAudit)$ -count=1 +started_utc=2026-07-10T08:37:32.0607591Z + +2026/07/10 11:37:35 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/migrations.go:483 ERROR: column "is_deprecated" does not exist (SQLSTATE 42703) +[2.000ms] [rows:0] CREATE INDEX IF NOT EXISTS idx_patterns_frequency + ON patterns(frequency DESC, last_seen_at_epoch DESC) + WHERE is_deprecated = 0 + +2026/07/10 11:37:35 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/migrations.go:578 ERROR: column "is_deprecated" does not exist (SQLSTATE 42703) +[1.003ms] [rows:0] CREATE INDEX IF NOT EXISTS idx_patterns_type_project + ON patterns(type, project, frequency DESC) + WHERE is_deprecated = 0 + +2026/07/10 11:37:35 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/migrations.go:578 ERROR: column "source_observation_id" does not exist (SQLSTATE 42703) +[0.998ms] [rows:0] CREATE INDEX IF NOT EXISTS idx_relations_source_type + ON observation_relations(source_observation_id, relation_type) + +2026/07/10 11:37:35 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/migrations.go:578 ERROR: column "target_observation_id" does not exist (SQLSTATE 42703) +[1.000ms] [rows:0] CREATE INDEX IF NOT EXISTS idx_relations_target_type + ON observation_relations(target_observation_id, relation_type) + +2026/07/10 11:37:35 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/migrations.go:670 ERROR: column "source_observation_id" does not exist (SQLSTATE 42703) +[1.000ms] [rows:0] CREATE INDEX IF NOT EXISTS idx_relations_source_type_target + ON observation_relations(source_observation_id, relation_type, target_observation_id) + +2026/07/10 11:37:35 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/migrations.go:670 ERROR: column "target_observation_id" does not exist (SQLSTATE 42703) +[0.500ms] [rows:0] CREATE INDEX IF NOT EXISTS idx_relations_target_type_source + ON observation_relations(target_observation_id, relation_type, source_observation_id) + +2026/07/10 11:37:35 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/migrations.go:1447 ERROR: relation "observation_vectors" does not exist (SQLSTATE 42P01) +[0.999ms] [rows:0] + DELETE FROM observation_vectors + WHERE id IN ( + SELECT ov.id FROM observation_vectors ov + LEFT JOIN observations o ON ov.metadata->>'sqlite_id' = o.id::text + WHERE o.id IS NULL + ) + +{"level":"warn","error":"ERROR: relation \"observation_vectors\" does not exist (SQLSTATE 42P01)","time":"2026-07-10T11:37:35+03:00","message":"migration 040: orphan vector cleanup failed (non-fatal)"} +{"level":"info","garbage_deleted":0,"orphan_vectors_deleted":0,"time":"2026-07-10T11:37:35+03:00","message":"migration 040: garbage cleanup complete"} +{"level":"info","orphan_vectors_deleted":0,"time":"2026-07-10T11:37:35+03:00","message":"migration 041: orphan vector purge complete"} +{"level":"info","patterns_deleted":0,"time":"2026-07-10T11:37:35+03:00","message":"migration 042: low-quality pattern purge complete"} +{"level":"info","total_deleted":0,"time":"2026-07-10T11:37:35+03:00","message":"migration 043: radical observation cleanup complete"} + +2026/07/10 11:37:36 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/migrations.go:3502 ERROR: extension "vectorscale" is not available (SQLSTATE 0A000) +[0.998ms] [rows:0] CREATE EXTENSION IF NOT EXISTS vectorscale CASCADE +{"level":"warn","error":"ERROR: extension \"vectorscale\" is not available (SQLSTATE 0A000)","time":"2026-07-10T11:37:36+03:00","message":"migration 109: vectorscale extension not available, skipping DiskANN index"} +--- FAIL: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites (4.30s) + --- FAIL: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/promote/wrong_operation_parameter (0.02s) + candidate_store_test.go:851: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/candidate_store_test.go:851 + Error: An error is expected but got nil. + Test: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/promote/wrong_operation_parameter + Messages: invalid candidate-review snapshot binding must fail closed + --- FAIL: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/promote/wrong_action_parameter (0.03s) + candidate_store_test.go:851: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/candidate_store_test.go:851 + Error: An error is expected but got nil. + Test: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/promote/wrong_action_parameter + Messages: invalid candidate-review snapshot binding must fail closed + --- FAIL: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/promote/wrong_candidate_parameter (0.03s) + candidate_store_test.go:851: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/candidate_store_test.go:851 + Error: An error is expected but got nil. + Test: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/promote/wrong_candidate_parameter + Messages: invalid candidate-review snapshot binding must fail closed + --- FAIL: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/promote/wrong_actor (0.03s) + candidate_store_test.go:851: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/candidate_store_test.go:851 + Error: An error is expected but got nil. + Test: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/promote/wrong_actor + Messages: invalid candidate-review snapshot binding must fail closed + --- FAIL: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/promote/wrong_before_payload_id (0.03s) + candidate_store_test.go:851: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/candidate_store_test.go:851 + Error: An error is expected but got nil. + Test: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/promote/wrong_before_payload_id + Messages: invalid candidate-review snapshot binding must fail closed + --- FAIL: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/promote/prepopulated_after (0.03s) + candidate_store_test.go:851: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/candidate_store_test.go:851 + Error: An error is expected but got nil. + Test: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/promote/prepopulated_after + Messages: invalid candidate-review snapshot binding must fail closed + --- FAIL: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/promote/extra_before_entry (0.03s) + candidate_store_test.go:851: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/candidate_store_test.go:851 + Error: An error is expected but got nil. + Test: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/promote/extra_before_entry + Messages: invalid candidate-review snapshot binding must fail closed + --- FAIL: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/promote/prepopulated_affected_memory_ids (0.02s) + candidate_store_test.go:851: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/candidate_store_test.go:851 + Error: An error is expected but got nil. + Test: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/promote/prepopulated_affected_memory_ids + Messages: invalid candidate-review snapshot binding must fail closed + --- FAIL: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/promote/wrong_source_session (0.02s) + candidate_store_test.go:851: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/candidate_store_test.go:851 + Error: An error is expected but got nil. + Test: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/promote/wrong_source_session + Messages: invalid candidate-review snapshot binding must fail closed + --- FAIL: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/preserve/wrong_operation_parameter (0.02s) + candidate_store_test.go:851: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/candidate_store_test.go:851 + Error: An error is expected but got nil. + Test: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/preserve/wrong_operation_parameter + Messages: invalid candidate-review snapshot binding must fail closed + --- FAIL: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/preserve/wrong_action_parameter (0.02s) + candidate_store_test.go:851: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/candidate_store_test.go:851 + Error: An error is expected but got nil. + Test: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/preserve/wrong_action_parameter + Messages: invalid candidate-review snapshot binding must fail closed + --- FAIL: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/preserve/wrong_candidate_parameter (0.02s) + candidate_store_test.go:851: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/candidate_store_test.go:851 + Error: An error is expected but got nil. + Test: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/preserve/wrong_candidate_parameter + Messages: invalid candidate-review snapshot binding must fail closed + --- FAIL: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/preserve/wrong_actor (0.02s) + candidate_store_test.go:851: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/candidate_store_test.go:851 + Error: An error is expected but got nil. + Test: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/preserve/wrong_actor + Messages: invalid candidate-review snapshot binding must fail closed + --- FAIL: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/preserve/wrong_before_payload_id (0.02s) + candidate_store_test.go:851: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/candidate_store_test.go:851 + Error: An error is expected but got nil. + Test: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/preserve/wrong_before_payload_id + Messages: invalid candidate-review snapshot binding must fail closed + --- FAIL: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/preserve/prepopulated_after (0.02s) + candidate_store_test.go:851: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/candidate_store_test.go:851 + Error: An error is expected but got nil. + Test: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/preserve/prepopulated_after + Messages: invalid candidate-review snapshot binding must fail closed + --- FAIL: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/preserve/extra_before_entry (0.02s) + candidate_store_test.go:851: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/candidate_store_test.go:851 + Error: An error is expected but got nil. + Test: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/preserve/extra_before_entry + Messages: invalid candidate-review snapshot binding must fail closed + --- FAIL: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/preserve/prepopulated_affected_memory_ids (0.02s) + candidate_store_test.go:851: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/candidate_store_test.go:851 + Error: An error is expected but got nil. + Test: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/preserve/prepopulated_affected_memory_ids + Messages: invalid candidate-review snapshot binding must fail closed + --- FAIL: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/preserve/wrong_source_session (0.02s) + candidate_store_test.go:851: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/candidate_store_test.go:851 + Error: An error is expected but got nil. + Test: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/preserve/wrong_source_session + Messages: invalid candidate-review snapshot binding must fail closed + --- FAIL: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/reject/wrong_operation_parameter (0.02s) + candidate_store_test.go:851: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/candidate_store_test.go:851 + Error: An error is expected but got nil. + Test: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/reject/wrong_operation_parameter + Messages: invalid candidate-review snapshot binding must fail closed + --- FAIL: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/reject/wrong_action_parameter (0.02s) + candidate_store_test.go:851: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/candidate_store_test.go:851 + Error: An error is expected but got nil. + Test: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/reject/wrong_action_parameter + Messages: invalid candidate-review snapshot binding must fail closed + --- FAIL: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/reject/wrong_candidate_parameter (0.02s) + candidate_store_test.go:851: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/candidate_store_test.go:851 + Error: An error is expected but got nil. + Test: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/reject/wrong_candidate_parameter + Messages: invalid candidate-review snapshot binding must fail closed + --- FAIL: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/reject/wrong_actor (0.02s) + candidate_store_test.go:851: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/candidate_store_test.go:851 + Error: An error is expected but got nil. + Test: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/reject/wrong_actor + Messages: invalid candidate-review snapshot binding must fail closed + --- FAIL: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/reject/wrong_before_payload_id (0.02s) + candidate_store_test.go:851: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/candidate_store_test.go:851 + Error: An error is expected but got nil. + Test: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/reject/wrong_before_payload_id + Messages: invalid candidate-review snapshot binding must fail closed + --- FAIL: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/reject/prepopulated_after (0.02s) + candidate_store_test.go:851: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/candidate_store_test.go:851 + Error: An error is expected but got nil. + Test: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/reject/prepopulated_after + Messages: invalid candidate-review snapshot binding must fail closed + --- FAIL: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/reject/extra_before_entry (0.02s) + candidate_store_test.go:851: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/candidate_store_test.go:851 + Error: An error is expected but got nil. + Test: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/reject/extra_before_entry + Messages: invalid candidate-review snapshot binding must fail closed + --- FAIL: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/reject/prepopulated_affected_memory_ids (0.02s) + candidate_store_test.go:851: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/candidate_store_test.go:851 + Error: An error is expected but got nil. + Test: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/reject/prepopulated_affected_memory_ids + Messages: invalid candidate-review snapshot binding must fail closed + --- FAIL: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/reject/wrong_source_session (0.03s) + candidate_store_test.go:851: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/candidate_store_test.go:851 + Error: An error is expected but got nil. + Test: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/reject/wrong_source_session + Messages: invalid candidate-review snapshot binding must fail closed + --- FAIL: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/suppress/wrong_operation_parameter (0.02s) + candidate_store_test.go:851: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/candidate_store_test.go:851 + Error: An error is expected but got nil. + Test: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/suppress/wrong_operation_parameter + Messages: invalid candidate-review snapshot binding must fail closed + --- FAIL: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/suppress/wrong_action_parameter (0.02s) + candidate_store_test.go:851: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/candidate_store_test.go:851 + Error: An error is expected but got nil. + Test: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/suppress/wrong_action_parameter + Messages: invalid candidate-review snapshot binding must fail closed + --- FAIL: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/suppress/wrong_candidate_parameter (0.02s) + candidate_store_test.go:851: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/candidate_store_test.go:851 + Error: An error is expected but got nil. + Test: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/suppress/wrong_candidate_parameter + Messages: invalid candidate-review snapshot binding must fail closed + --- FAIL: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/suppress/wrong_actor (0.02s) + candidate_store_test.go:851: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/candidate_store_test.go:851 + Error: An error is expected but got nil. + Test: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/suppress/wrong_actor + Messages: invalid candidate-review snapshot binding must fail closed + --- FAIL: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/suppress/wrong_before_payload_id (0.02s) + candidate_store_test.go:851: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/candidate_store_test.go:851 + Error: An error is expected but got nil. + Test: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/suppress/wrong_before_payload_id + Messages: invalid candidate-review snapshot binding must fail closed + --- FAIL: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/suppress/prepopulated_after (0.02s) + candidate_store_test.go:851: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/candidate_store_test.go:851 + Error: An error is expected but got nil. + Test: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/suppress/prepopulated_after + Messages: invalid candidate-review snapshot binding must fail closed + --- FAIL: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/suppress/extra_before_entry (0.02s) + candidate_store_test.go:851: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/candidate_store_test.go:851 + Error: An error is expected but got nil. + Test: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/suppress/extra_before_entry + Messages: invalid candidate-review snapshot binding must fail closed + --- FAIL: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/suppress/prepopulated_affected_memory_ids (0.02s) + candidate_store_test.go:851: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/candidate_store_test.go:851 + Error: An error is expected but got nil. + Test: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/suppress/prepopulated_affected_memory_ids + Messages: invalid candidate-review snapshot binding must fail closed + --- FAIL: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/suppress/wrong_source_session (0.02s) + candidate_store_test.go:851: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/candidate_store_test.go:851 + Error: An error is expected but got nil. + Test: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/suppress/wrong_source_session + Messages: invalid candidate-review snapshot binding must fail closed + --- FAIL: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/supersede/wrong_operation_parameter (0.02s) + candidate_store_test.go:851: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/candidate_store_test.go:851 + Error: An error is expected but got nil. + Test: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/supersede/wrong_operation_parameter + Messages: invalid candidate-review snapshot binding must fail closed + --- FAIL: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/supersede/wrong_action_parameter (0.02s) + candidate_store_test.go:851: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/candidate_store_test.go:851 + Error: An error is expected but got nil. + Test: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/supersede/wrong_action_parameter + Messages: invalid candidate-review snapshot binding must fail closed + --- FAIL: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/supersede/wrong_candidate_parameter (0.02s) + candidate_store_test.go:851: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/candidate_store_test.go:851 + Error: An error is expected but got nil. + Test: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/supersede/wrong_candidate_parameter + Messages: invalid candidate-review snapshot binding must fail closed + --- FAIL: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/supersede/wrong_actor (0.02s) + candidate_store_test.go:851: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/candidate_store_test.go:851 + Error: An error is expected but got nil. + Test: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/supersede/wrong_actor + Messages: invalid candidate-review snapshot binding must fail closed + --- FAIL: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/supersede/wrong_before_payload_id (0.02s) + candidate_store_test.go:851: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/candidate_store_test.go:851 + Error: An error is expected but got nil. + Test: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/supersede/wrong_before_payload_id + Messages: invalid candidate-review snapshot binding must fail closed + --- FAIL: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/supersede/prepopulated_after (0.02s) + candidate_store_test.go:851: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/candidate_store_test.go:851 + Error: An error is expected but got nil. + Test: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/supersede/prepopulated_after + Messages: invalid candidate-review snapshot binding must fail closed + --- FAIL: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/supersede/extra_before_entry (0.02s) + candidate_store_test.go:851: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/candidate_store_test.go:851 + Error: An error is expected but got nil. + Test: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/supersede/extra_before_entry + Messages: invalid candidate-review snapshot binding must fail closed + --- FAIL: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/supersede/prepopulated_affected_memory_ids (0.02s) + candidate_store_test.go:851: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/candidate_store_test.go:851 + Error: An error is expected but got nil. + Test: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/supersede/prepopulated_affected_memory_ids + Messages: invalid candidate-review snapshot binding must fail closed + --- FAIL: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/supersede/wrong_source_session (0.02s) + candidate_store_test.go:851: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/candidate_store_test.go:851 + Error: An error is expected but got nil. + Test: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/supersede/wrong_source_session + Messages: invalid candidate-review snapshot binding must fail closed +FAIL +FAIL github.com/thebtf/engram/internal/db/gorm 4.631s +FAIL +test_exit=1 +active_sessions_before_terminate=0 +database_residue=0 +activity_residue=0 +finished_utc=2026-07-10T08:37:40.7607585Z diff --git a/.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/06-prove-it-parser.log b/.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/06-prove-it-parser.log new file mode 100644 index 00000000..0e87207b --- /dev/null +++ b/.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/06-prove-it-parser.log @@ -0,0 +1,842 @@ +base_sha=68b2ce5835c7c6efdf1c68da9eedcb8d9c3837ef +head_sha=68b2ce5835c7c6efdf1c68da9eedcb8d9c3837ef +database=engram_mkr_bedge_prove_parser_20260710a +command=go test -p=1 ./internal/mcp -run ^(TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs|TestBulkOps_PublicDispatchPreservesExactIntegralIDsBeforeNormalization|TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade|TestBulkOps_WiredFacadeReceivesExactNormalizedIDsAndStrictDryRun)$ -count=1 +started_utc=2026-07-10T08:38:14.4065370Z +--- FAIL: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs (0.00s) + --- FAIL: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_promote (0.00s) + --- FAIL: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_promote/null_arguments (0.00s) + tools_dryrun_test.go:251: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:251 + Error: "bulk_promote: facade not available — set ENGRAM_VNEXT_F_ENABLED=true and wire stores" does not contain "arguments" + Test: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_promote/null_arguments + --- FAIL: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_promote/array_arguments (0.00s) + tools_dryrun_test.go:251: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:251 + Error: "bulk_promote: facade not available — set ENGRAM_VNEXT_F_ENABLED=true and wire stores" does not contain "arguments" + Test: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_promote/array_arguments + --- FAIL: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_promote/string_arguments (0.00s) + tools_dryrun_test.go:251: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:251 + Error: "bulk_promote: facade not available — set ENGRAM_VNEXT_F_ENABLED=true and wire stores" does not contain "arguments" + Test: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_promote/string_arguments + --- FAIL: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_promote/malformed_arguments (0.00s) + tools_dryrun_test.go:251: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:251 + Error: "bulk_promote: facade not available — set ENGRAM_VNEXT_F_ENABLED=true and wire stores" does not contain "arguments" + Test: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_promote/malformed_arguments + --- FAIL: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_promote/missing_id_field (0.00s) + tools_dryrun_test.go:260: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:260 + Error: "bulk_promote: facade not available — set ENGRAM_VNEXT_F_ENABLED=true and wire stores" does not contain "candidate_ids" + Test: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_promote/missing_id_field + --- FAIL: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_promote/ids_null (0.00s) + tools_dryrun_test.go:271: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:271 + Error: "bulk_promote: facade not available — set ENGRAM_VNEXT_F_ENABLED=true and wire stores" does not contain "candidate_ids" + Test: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_promote/ids_null + --- FAIL: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_promote/ids_top_level_string (0.00s) + tools_dryrun_test.go:271: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:271 + Error: "bulk_promote: facade not available — set ENGRAM_VNEXT_F_ENABLED=true and wire stores" does not contain "candidate_ids" + Test: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_promote/ids_top_level_string + --- FAIL: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_promote/ids_string_member (0.00s) + tools_dryrun_test.go:271: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:271 + Error: "bulk_promote: facade not available — set ENGRAM_VNEXT_F_ENABLED=true and wire stores" does not contain "candidate_ids" + Test: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_promote/ids_string_member + --- FAIL: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_promote/ids_boolean_member (0.00s) + tools_dryrun_test.go:271: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:271 + Error: "bulk_promote: facade not available — set ENGRAM_VNEXT_F_ENABLED=true and wire stores" does not contain "candidate_ids" + Test: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_promote/ids_boolean_member + --- FAIL: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_promote/ids_object_member (0.00s) + tools_dryrun_test.go:271: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:271 + Error: "bulk_promote: facade not available — set ENGRAM_VNEXT_F_ENABLED=true and wire stores" does not contain "candidate_ids" + Test: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_promote/ids_object_member + --- FAIL: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_promote/ids_nested_array (0.00s) + tools_dryrun_test.go:271: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:271 + Error: "bulk_promote: facade not available — set ENGRAM_VNEXT_F_ENABLED=true and wire stores" does not contain "candidate_ids" + Test: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_promote/ids_nested_array + --- FAIL: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_promote/ids_fraction (0.00s) + tools_dryrun_test.go:271: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:271 + Error: "bulk_promote: facade not available — set ENGRAM_VNEXT_F_ENABLED=true and wire stores" does not contain "candidate_ids" + Test: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_promote/ids_fraction + --- FAIL: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_promote/ids_positive_overflow (0.00s) + tools_dryrun_test.go:271: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:271 + Error: "bulk_promote: facade not available — set ENGRAM_VNEXT_F_ENABLED=true and wire stores" does not contain "candidate_ids" + Test: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_promote/ids_positive_overflow + --- FAIL: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_promote/ids_negative_overflow (0.00s) + tools_dryrun_test.go:271: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:271 + Error: "bulk_promote: facade not available — set ENGRAM_VNEXT_F_ENABLED=true and wire stores" does not contain "candidate_ids" + Test: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_promote/ids_negative_overflow + --- FAIL: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_promote/ids_mixed_invalid (0.00s) + tools_dryrun_test.go:271: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:271 + Error: "bulk_promote: facade not available — set ENGRAM_VNEXT_F_ENABLED=true and wire stores" does not contain "candidate_ids" + Test: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_promote/ids_mixed_invalid + --- FAIL: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_promote/dry_run_string (0.00s) + tools_dryrun_test.go:283: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:283 + Error: "bulk_promote: facade not available — set ENGRAM_VNEXT_F_ENABLED=true and wire stores" does not contain "dry_run" + Test: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_promote/dry_run_string + --- FAIL: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_promote/dry_run_number (0.00s) + tools_dryrun_test.go:283: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:283 + Error: "bulk_promote: facade not available — set ENGRAM_VNEXT_F_ENABLED=true and wire stores" does not contain "dry_run" + Test: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_promote/dry_run_number + --- FAIL: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_promote/dry_run_null (0.00s) + tools_dryrun_test.go:283: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:283 + Error: "bulk_promote: facade not available — set ENGRAM_VNEXT_F_ENABLED=true and wire stores" does not contain "dry_run" + Test: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_promote/dry_run_null + --- FAIL: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_promote/dry_run_object (0.00s) + tools_dryrun_test.go:283: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:283 + Error: "bulk_promote: facade not available — set ENGRAM_VNEXT_F_ENABLED=true and wire stores" does not contain "dry_run" + Test: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_promote/dry_run_object + --- FAIL: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_promote/dry_run_array (0.00s) + tools_dryrun_test.go:283: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:283 + Error: "bulk_promote: facade not available — set ENGRAM_VNEXT_F_ENABLED=true and wire stores" does not contain "dry_run" + Test: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_promote/dry_run_array + --- FAIL: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_delete (0.00s) + --- FAIL: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_delete/null_arguments (0.00s) + tools_dryrun_test.go:251: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:251 + Error: "bulk_delete: facade not available — set ENGRAM_VNEXT_F_ENABLED=true and wire stores" does not contain "arguments" + Test: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_delete/null_arguments + --- FAIL: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_delete/array_arguments (0.00s) + tools_dryrun_test.go:251: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:251 + Error: "bulk_delete: facade not available — set ENGRAM_VNEXT_F_ENABLED=true and wire stores" does not contain "arguments" + Test: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_delete/array_arguments + --- FAIL: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_delete/string_arguments (0.00s) + tools_dryrun_test.go:251: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:251 + Error: "bulk_delete: facade not available — set ENGRAM_VNEXT_F_ENABLED=true and wire stores" does not contain "arguments" + Test: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_delete/string_arguments + --- FAIL: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_delete/malformed_arguments (0.00s) + tools_dryrun_test.go:251: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:251 + Error: "bulk_delete: facade not available — set ENGRAM_VNEXT_F_ENABLED=true and wire stores" does not contain "arguments" + Test: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_delete/malformed_arguments + --- FAIL: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_delete/missing_id_field (0.00s) + tools_dryrun_test.go:260: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:260 + Error: "bulk_delete: facade not available — set ENGRAM_VNEXT_F_ENABLED=true and wire stores" does not contain "memory_ids" + Test: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_delete/missing_id_field + --- FAIL: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_delete/ids_null (0.00s) + tools_dryrun_test.go:271: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:271 + Error: "bulk_delete: facade not available — set ENGRAM_VNEXT_F_ENABLED=true and wire stores" does not contain "memory_ids" + Test: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_delete/ids_null + --- FAIL: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_delete/ids_top_level_string (0.00s) + tools_dryrun_test.go:271: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:271 + Error: "bulk_delete: facade not available — set ENGRAM_VNEXT_F_ENABLED=true and wire stores" does not contain "memory_ids" + Test: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_delete/ids_top_level_string + --- FAIL: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_delete/ids_string_member (0.00s) + tools_dryrun_test.go:271: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:271 + Error: "bulk_delete: facade not available — set ENGRAM_VNEXT_F_ENABLED=true and wire stores" does not contain "memory_ids" + Test: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_delete/ids_string_member + --- FAIL: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_delete/ids_boolean_member (0.00s) + tools_dryrun_test.go:271: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:271 + Error: "bulk_delete: facade not available — set ENGRAM_VNEXT_F_ENABLED=true and wire stores" does not contain "memory_ids" + Test: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_delete/ids_boolean_member + --- FAIL: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_delete/ids_object_member (0.00s) + tools_dryrun_test.go:271: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:271 + Error: "bulk_delete: facade not available — set ENGRAM_VNEXT_F_ENABLED=true and wire stores" does not contain "memory_ids" + Test: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_delete/ids_object_member + --- FAIL: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_delete/ids_nested_array (0.00s) + tools_dryrun_test.go:271: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:271 + Error: "bulk_delete: facade not available — set ENGRAM_VNEXT_F_ENABLED=true and wire stores" does not contain "memory_ids" + Test: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_delete/ids_nested_array + --- FAIL: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_delete/ids_fraction (0.00s) + tools_dryrun_test.go:271: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:271 + Error: "bulk_delete: facade not available — set ENGRAM_VNEXT_F_ENABLED=true and wire stores" does not contain "memory_ids" + Test: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_delete/ids_fraction + --- FAIL: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_delete/ids_positive_overflow (0.00s) + tools_dryrun_test.go:271: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:271 + Error: "bulk_delete: facade not available — set ENGRAM_VNEXT_F_ENABLED=true and wire stores" does not contain "memory_ids" + Test: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_delete/ids_positive_overflow + --- FAIL: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_delete/ids_negative_overflow (0.00s) + tools_dryrun_test.go:271: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:271 + Error: "bulk_delete: facade not available — set ENGRAM_VNEXT_F_ENABLED=true and wire stores" does not contain "memory_ids" + Test: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_delete/ids_negative_overflow + --- FAIL: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_delete/ids_mixed_invalid (0.00s) + tools_dryrun_test.go:271: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:271 + Error: "bulk_delete: facade not available — set ENGRAM_VNEXT_F_ENABLED=true and wire stores" does not contain "memory_ids" + Test: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_delete/ids_mixed_invalid + --- FAIL: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_delete/dry_run_string (0.00s) + tools_dryrun_test.go:283: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:283 + Error: "bulk_delete: facade not available — set ENGRAM_VNEXT_F_ENABLED=true and wire stores" does not contain "dry_run" + Test: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_delete/dry_run_string + --- FAIL: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_delete/dry_run_number (0.00s) + tools_dryrun_test.go:283: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:283 + Error: "bulk_delete: facade not available — set ENGRAM_VNEXT_F_ENABLED=true and wire stores" does not contain "dry_run" + Test: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_delete/dry_run_number + --- FAIL: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_delete/dry_run_null (0.00s) + tools_dryrun_test.go:283: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:283 + Error: "bulk_delete: facade not available — set ENGRAM_VNEXT_F_ENABLED=true and wire stores" does not contain "dry_run" + Test: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_delete/dry_run_null + --- FAIL: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_delete/dry_run_object (0.00s) + tools_dryrun_test.go:283: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:283 + Error: "bulk_delete: facade not available — set ENGRAM_VNEXT_F_ENABLED=true and wire stores" does not contain "dry_run" + Test: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_delete/dry_run_object + --- FAIL: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_delete/dry_run_array (0.00s) + tools_dryrun_test.go:283: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:283 + Error: "bulk_delete: facade not available — set ENGRAM_VNEXT_F_ENABLED=true and wire stores" does not contain "dry_run" + Test: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_delete/dry_run_array + --- FAIL: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_supersede (0.00s) + --- FAIL: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_supersede/null_arguments (0.00s) + tools_dryrun_test.go:251: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:251 + Error: "bulk_supersede: facade not available — set ENGRAM_VNEXT_F_ENABLED=true and wire stores" does not contain "arguments" + Test: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_supersede/null_arguments + --- FAIL: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_supersede/array_arguments (0.00s) + tools_dryrun_test.go:251: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:251 + Error: "bulk_supersede: facade not available — set ENGRAM_VNEXT_F_ENABLED=true and wire stores" does not contain "arguments" + Test: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_supersede/array_arguments + --- FAIL: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_supersede/string_arguments (0.00s) + tools_dryrun_test.go:251: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:251 + Error: "bulk_supersede: facade not available — set ENGRAM_VNEXT_F_ENABLED=true and wire stores" does not contain "arguments" + Test: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_supersede/string_arguments + --- FAIL: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_supersede/malformed_arguments (0.00s) + tools_dryrun_test.go:251: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:251 + Error: "bulk_supersede: facade not available — set ENGRAM_VNEXT_F_ENABLED=true and wire stores" does not contain "arguments" + Test: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_supersede/malformed_arguments + --- FAIL: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_supersede/missing_id_field (0.00s) + tools_dryrun_test.go:260: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:260 + Error: "bulk_supersede: facade not available — set ENGRAM_VNEXT_F_ENABLED=true and wire stores" does not contain "memory_ids" + Test: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_supersede/missing_id_field + --- FAIL: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_supersede/ids_null (0.00s) + tools_dryrun_test.go:271: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:271 + Error: "bulk_supersede: facade not available — set ENGRAM_VNEXT_F_ENABLED=true and wire stores" does not contain "memory_ids" + Test: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_supersede/ids_null + --- FAIL: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_supersede/ids_top_level_string (0.00s) + tools_dryrun_test.go:271: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:271 + Error: "bulk_supersede: facade not available — set ENGRAM_VNEXT_F_ENABLED=true and wire stores" does not contain "memory_ids" + Test: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_supersede/ids_top_level_string + --- FAIL: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_supersede/ids_string_member (0.00s) + tools_dryrun_test.go:271: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:271 + Error: "bulk_supersede: facade not available — set ENGRAM_VNEXT_F_ENABLED=true and wire stores" does not contain "memory_ids" + Test: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_supersede/ids_string_member + --- FAIL: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_supersede/ids_boolean_member (0.00s) + tools_dryrun_test.go:271: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:271 + Error: "bulk_supersede: facade not available — set ENGRAM_VNEXT_F_ENABLED=true and wire stores" does not contain "memory_ids" + Test: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_supersede/ids_boolean_member + --- FAIL: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_supersede/ids_object_member (0.00s) + tools_dryrun_test.go:271: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:271 + Error: "bulk_supersede: facade not available — set ENGRAM_VNEXT_F_ENABLED=true and wire stores" does not contain "memory_ids" + Test: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_supersede/ids_object_member + --- FAIL: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_supersede/ids_nested_array (0.00s) + tools_dryrun_test.go:271: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:271 + Error: "bulk_supersede: facade not available — set ENGRAM_VNEXT_F_ENABLED=true and wire stores" does not contain "memory_ids" + Test: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_supersede/ids_nested_array + --- FAIL: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_supersede/ids_fraction (0.00s) + tools_dryrun_test.go:271: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:271 + Error: "bulk_supersede: facade not available — set ENGRAM_VNEXT_F_ENABLED=true and wire stores" does not contain "memory_ids" + Test: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_supersede/ids_fraction + --- FAIL: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_supersede/ids_positive_overflow (0.00s) + tools_dryrun_test.go:271: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:271 + Error: "bulk_supersede: facade not available — set ENGRAM_VNEXT_F_ENABLED=true and wire stores" does not contain "memory_ids" + Test: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_supersede/ids_positive_overflow + --- FAIL: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_supersede/ids_negative_overflow (0.00s) + tools_dryrun_test.go:271: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:271 + Error: "bulk_supersede: facade not available — set ENGRAM_VNEXT_F_ENABLED=true and wire stores" does not contain "memory_ids" + Test: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_supersede/ids_negative_overflow + --- FAIL: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_supersede/ids_mixed_invalid (0.00s) + tools_dryrun_test.go:271: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:271 + Error: "bulk_supersede: facade not available — set ENGRAM_VNEXT_F_ENABLED=true and wire stores" does not contain "memory_ids" + Test: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_supersede/ids_mixed_invalid + --- FAIL: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_supersede/dry_run_string (0.00s) + tools_dryrun_test.go:283: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:283 + Error: "bulk_supersede: facade not available — set ENGRAM_VNEXT_F_ENABLED=true and wire stores" does not contain "dry_run" + Test: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_supersede/dry_run_string + --- FAIL: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_supersede/dry_run_number (0.00s) + tools_dryrun_test.go:283: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:283 + Error: "bulk_supersede: facade not available — set ENGRAM_VNEXT_F_ENABLED=true and wire stores" does not contain "dry_run" + Test: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_supersede/dry_run_number + --- FAIL: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_supersede/dry_run_null (0.00s) + tools_dryrun_test.go:283: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:283 + Error: "bulk_supersede: facade not available — set ENGRAM_VNEXT_F_ENABLED=true and wire stores" does not contain "dry_run" + Test: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_supersede/dry_run_null + --- FAIL: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_supersede/dry_run_object (0.00s) + tools_dryrun_test.go:283: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:283 + Error: "bulk_supersede: facade not available — set ENGRAM_VNEXT_F_ENABLED=true and wire stores" does not contain "dry_run" + Test: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_supersede/dry_run_object + --- FAIL: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_supersede/dry_run_array (0.00s) + tools_dryrun_test.go:283: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:283 + Error: "bulk_supersede: facade not available — set ENGRAM_VNEXT_F_ENABLED=true and wire stores" does not contain "dry_run" + Test: TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs/bulk_supersede/dry_run_array +--- FAIL: TestBulkOps_PublicDispatchPreservesExactIntegralIDsBeforeNormalization (0.00s) + --- FAIL: TestBulkOps_PublicDispatchPreservesExactIntegralIDsBeforeNormalization/bulk_promote (0.00s) + tools_dryrun_test.go:301: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:301 + Error: Received unexpected error: + bulk_promote: facade not available — set ENGRAM_VNEXT_F_ENABLED=true and wire stores + Test: TestBulkOps_PublicDispatchPreservesExactIntegralIDsBeforeNormalization/bulk_promote + --- FAIL: TestBulkOps_PublicDispatchPreservesExactIntegralIDsBeforeNormalization/bulk_delete (0.00s) + tools_dryrun_test.go:301: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:301 + Error: Received unexpected error: + bulk_delete: facade not available — set ENGRAM_VNEXT_F_ENABLED=true and wire stores + Test: TestBulkOps_PublicDispatchPreservesExactIntegralIDsBeforeNormalization/bulk_delete + --- FAIL: TestBulkOps_PublicDispatchPreservesExactIntegralIDsBeforeNormalization/bulk_supersede (0.00s) + tools_dryrun_test.go:301: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:301 + Error: Received unexpected error: + bulk_supersede: facade not available — set ENGRAM_VNEXT_F_ENABLED=true and wire stores + Test: TestBulkOps_PublicDispatchPreservesExactIntegralIDsBeforeNormalization/bulk_supersede +--- FAIL: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade (0.00s) + --- FAIL: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_promote (0.00s) + --- FAIL: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_promote/missing_id_field (0.00s) + tools_dryrun_test.go:382: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:382 + Error: An error is expected but got nil. + Test: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_promote/missing_id_field + --- FAIL: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_promote/null_arguments (0.00s) + tools_dryrun_test.go:382: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:382 + Error: An error is expected but got nil. + Test: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_promote/null_arguments + --- FAIL: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_promote/array_arguments (0.00s) + tools_dryrun_test.go:382: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:382 + Error: An error is expected but got nil. + Test: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_promote/array_arguments + --- FAIL: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_promote/string_arguments (0.00s) + tools_dryrun_test.go:382: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:382 + Error: An error is expected but got nil. + Test: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_promote/string_arguments + --- FAIL: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_promote/malformed_arguments (0.00s) + tools_dryrun_test.go:382: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:382 + Error: An error is expected but got nil. + Test: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_promote/malformed_arguments + --- FAIL: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_promote/invalid_ids_0 (0.00s) + tools_dryrun_test.go:382: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:382 + Error: An error is expected but got nil. + Test: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_promote/invalid_ids_0 + --- FAIL: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_promote/invalid_ids_1 (0.00s) + tools_dryrun_test.go:382: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:382 + Error: An error is expected but got nil. + Test: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_promote/invalid_ids_1 + --- FAIL: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_promote/invalid_ids_2 (0.00s) + tools_dryrun_test.go:382: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:382 + Error: An error is expected but got nil. + Test: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_promote/invalid_ids_2 + --- FAIL: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_promote/invalid_ids_3 (0.00s) + tools_dryrun_test.go:382: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:382 + Error: An error is expected but got nil. + Test: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_promote/invalid_ids_3 + --- FAIL: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_promote/invalid_ids_4 (0.00s) + tools_dryrun_test.go:382: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:382 + Error: An error is expected but got nil. + Test: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_promote/invalid_ids_4 + --- FAIL: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_promote/invalid_ids_5 (0.00s) + tools_dryrun_test.go:382: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:382 + Error: An error is expected but got nil. + Test: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_promote/invalid_ids_5 + --- FAIL: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_promote/invalid_ids_6 (0.00s) + tools_dryrun_test.go:382: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:382 + Error: An error is expected but got nil. + Test: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_promote/invalid_ids_6 + --- FAIL: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_promote/invalid_ids_7 (0.00s) + tools_dryrun_test.go:382: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:382 + Error: An error is expected but got nil. + Test: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_promote/invalid_ids_7 + --- FAIL: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_promote/invalid_ids_8 (0.00s) + tools_dryrun_test.go:382: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:382 + Error: An error is expected but got nil. + Test: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_promote/invalid_ids_8 + --- FAIL: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_promote/invalid_ids_9 (0.00s) + tools_dryrun_test.go:382: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:382 + Error: An error is expected but got nil. + Test: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_promote/invalid_ids_9 + --- FAIL: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_promote/invalid_dry_run_0 (0.00s) + tools_dryrun_test.go:382: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:382 + Error: An error is expected but got nil. + Test: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_promote/invalid_dry_run_0 + --- FAIL: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_promote/invalid_dry_run_1 (0.00s) + tools_dryrun_test.go:382: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:382 + Error: An error is expected but got nil. + Test: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_promote/invalid_dry_run_1 + --- FAIL: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_promote/invalid_dry_run_2 (0.00s) + tools_dryrun_test.go:382: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:382 + Error: An error is expected but got nil. + Test: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_promote/invalid_dry_run_2 + --- FAIL: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_promote/invalid_dry_run_3 (0.00s) + tools_dryrun_test.go:382: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:382 + Error: An error is expected but got nil. + Test: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_promote/invalid_dry_run_3 + --- FAIL: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_promote/invalid_dry_run_4 (0.00s) + tools_dryrun_test.go:382: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:382 + Error: An error is expected but got nil. + Test: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_promote/invalid_dry_run_4 + --- FAIL: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_delete (0.00s) + --- FAIL: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_delete/missing_id_field (0.00s) + tools_dryrun_test.go:382: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:382 + Error: An error is expected but got nil. + Test: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_delete/missing_id_field + --- FAIL: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_delete/null_arguments (0.00s) + tools_dryrun_test.go:382: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:382 + Error: An error is expected but got nil. + Test: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_delete/null_arguments + --- FAIL: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_delete/array_arguments (0.00s) + tools_dryrun_test.go:382: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:382 + Error: An error is expected but got nil. + Test: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_delete/array_arguments + --- FAIL: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_delete/string_arguments (0.00s) + tools_dryrun_test.go:382: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:382 + Error: An error is expected but got nil. + Test: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_delete/string_arguments + --- FAIL: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_delete/malformed_arguments (0.00s) + tools_dryrun_test.go:382: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:382 + Error: An error is expected but got nil. + Test: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_delete/malformed_arguments + --- FAIL: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_delete/invalid_ids_0 (0.00s) + tools_dryrun_test.go:382: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:382 + Error: An error is expected but got nil. + Test: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_delete/invalid_ids_0 + --- FAIL: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_delete/invalid_ids_1 (0.00s) + tools_dryrun_test.go:382: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:382 + Error: An error is expected but got nil. + Test: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_delete/invalid_ids_1 + --- FAIL: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_delete/invalid_ids_2 (0.00s) + tools_dryrun_test.go:382: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:382 + Error: An error is expected but got nil. + Test: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_delete/invalid_ids_2 + --- FAIL: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_delete/invalid_ids_3 (0.00s) + tools_dryrun_test.go:382: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:382 + Error: An error is expected but got nil. + Test: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_delete/invalid_ids_3 + --- FAIL: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_delete/invalid_ids_4 (0.00s) + tools_dryrun_test.go:382: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:382 + Error: An error is expected but got nil. + Test: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_delete/invalid_ids_4 + --- FAIL: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_delete/invalid_ids_5 (0.00s) + tools_dryrun_test.go:382: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:382 + Error: An error is expected but got nil. + Test: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_delete/invalid_ids_5 + --- FAIL: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_delete/invalid_ids_6 (0.00s) + tools_dryrun_test.go:382: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:382 + Error: An error is expected but got nil. + Test: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_delete/invalid_ids_6 + --- FAIL: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_delete/invalid_ids_7 (0.00s) + tools_dryrun_test.go:382: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:382 + Error: An error is expected but got nil. + Test: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_delete/invalid_ids_7 + --- FAIL: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_delete/invalid_ids_8 (0.00s) + tools_dryrun_test.go:382: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:382 + Error: An error is expected but got nil. + Test: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_delete/invalid_ids_8 + --- FAIL: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_delete/invalid_ids_9 (0.00s) + tools_dryrun_test.go:382: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:382 + Error: An error is expected but got nil. + Test: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_delete/invalid_ids_9 + --- FAIL: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_delete/invalid_dry_run_0 (0.00s) + tools_dryrun_test.go:382: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:382 + Error: An error is expected but got nil. + Test: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_delete/invalid_dry_run_0 + --- FAIL: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_delete/invalid_dry_run_1 (0.00s) + tools_dryrun_test.go:382: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:382 + Error: An error is expected but got nil. + Test: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_delete/invalid_dry_run_1 + --- FAIL: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_delete/invalid_dry_run_2 (0.00s) + tools_dryrun_test.go:382: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:382 + Error: An error is expected but got nil. + Test: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_delete/invalid_dry_run_2 + --- FAIL: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_delete/invalid_dry_run_3 (0.00s) + tools_dryrun_test.go:382: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:382 + Error: An error is expected but got nil. + Test: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_delete/invalid_dry_run_3 + --- FAIL: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_delete/invalid_dry_run_4 (0.00s) + tools_dryrun_test.go:382: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:382 + Error: An error is expected but got nil. + Test: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_delete/invalid_dry_run_4 + --- FAIL: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_supersede (0.00s) + --- FAIL: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_supersede/missing_id_field (0.00s) + tools_dryrun_test.go:382: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:382 + Error: An error is expected but got nil. + Test: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_supersede/missing_id_field + --- FAIL: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_supersede/null_arguments (0.00s) + tools_dryrun_test.go:382: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:382 + Error: An error is expected but got nil. + Test: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_supersede/null_arguments + --- FAIL: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_supersede/array_arguments (0.00s) + tools_dryrun_test.go:382: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:382 + Error: An error is expected but got nil. + Test: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_supersede/array_arguments + --- FAIL: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_supersede/string_arguments (0.00s) + tools_dryrun_test.go:382: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:382 + Error: An error is expected but got nil. + Test: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_supersede/string_arguments + --- FAIL: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_supersede/malformed_arguments (0.00s) + tools_dryrun_test.go:382: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:382 + Error: An error is expected but got nil. + Test: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_supersede/malformed_arguments + --- FAIL: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_supersede/invalid_ids_0 (0.00s) + tools_dryrun_test.go:382: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:382 + Error: An error is expected but got nil. + Test: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_supersede/invalid_ids_0 + --- FAIL: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_supersede/invalid_ids_1 (0.00s) + tools_dryrun_test.go:382: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:382 + Error: An error is expected but got nil. + Test: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_supersede/invalid_ids_1 + --- FAIL: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_supersede/invalid_ids_2 (0.00s) + tools_dryrun_test.go:382: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:382 + Error: An error is expected but got nil. + Test: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_supersede/invalid_ids_2 + --- FAIL: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_supersede/invalid_ids_3 (0.00s) + tools_dryrun_test.go:382: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:382 + Error: An error is expected but got nil. + Test: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_supersede/invalid_ids_3 + --- FAIL: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_supersede/invalid_ids_4 (0.00s) + tools_dryrun_test.go:382: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:382 + Error: An error is expected but got nil. + Test: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_supersede/invalid_ids_4 + --- FAIL: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_supersede/invalid_ids_5 (0.00s) + tools_dryrun_test.go:382: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:382 + Error: An error is expected but got nil. + Test: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_supersede/invalid_ids_5 + --- FAIL: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_supersede/invalid_ids_6 (0.00s) + tools_dryrun_test.go:382: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:382 + Error: An error is expected but got nil. + Test: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_supersede/invalid_ids_6 + --- FAIL: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_supersede/invalid_ids_7 (0.00s) + tools_dryrun_test.go:382: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:382 + Error: An error is expected but got nil. + Test: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_supersede/invalid_ids_7 + --- FAIL: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_supersede/invalid_ids_8 (0.00s) + tools_dryrun_test.go:382: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:382 + Error: An error is expected but got nil. + Test: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_supersede/invalid_ids_8 + --- FAIL: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_supersede/invalid_ids_9 (0.00s) + tools_dryrun_test.go:382: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:382 + Error: An error is expected but got nil. + Test: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_supersede/invalid_ids_9 + --- FAIL: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_supersede/invalid_dry_run_0 (0.00s) + tools_dryrun_test.go:382: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:382 + Error: An error is expected but got nil. + Test: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_supersede/invalid_dry_run_0 + --- FAIL: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_supersede/invalid_dry_run_1 (0.00s) + tools_dryrun_test.go:382: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:382 + Error: An error is expected but got nil. + Test: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_supersede/invalid_dry_run_1 + --- FAIL: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_supersede/invalid_dry_run_2 (0.00s) + tools_dryrun_test.go:382: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:382 + Error: An error is expected but got nil. + Test: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_supersede/invalid_dry_run_2 + --- FAIL: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_supersede/invalid_dry_run_3 (0.00s) + tools_dryrun_test.go:382: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:382 + Error: An error is expected but got nil. + Test: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_supersede/invalid_dry_run_3 + --- FAIL: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_supersede/invalid_dry_run_4 (0.00s) + tools_dryrun_test.go:382: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:382 + Error: An error is expected but got nil. + Test: TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade/bulk_supersede/invalid_dry_run_4 +--- FAIL: TestBulkOps_WiredFacadeReceivesExactNormalizedIDsAndStrictDryRun (0.00s) + --- FAIL: TestBulkOps_WiredFacadeReceivesExactNormalizedIDsAndStrictDryRun/bulk_promote (0.00s) + --- FAIL: TestBulkOps_WiredFacadeReceivesExactNormalizedIDsAndStrictDryRun/bulk_promote/missing (0.00s) + tools_dryrun_test.go:438: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:438 + Error: Not equal: + expected: []int64{-9223372036854775808, 1, 9007199254740992, 9007199254740993, 9223372036854775807} + actual : []int64{} + + Diff: + --- Expected + +++ Actual + @@ -1,7 +1,2 @@ + -([]int64) (len=5) { + - (int64) -9223372036854775808, + - (int64) 1, + - (int64) 9007199254740992, + - (int64) 9007199254740993, + - (int64) 9223372036854775807 + +([]int64) { + } + Test: TestBulkOps_WiredFacadeReceivesExactNormalizedIDsAndStrictDryRun/bulk_promote/missing + --- FAIL: TestBulkOps_WiredFacadeReceivesExactNormalizedIDsAndStrictDryRun/bulk_promote/false (0.00s) + tools_dryrun_test.go:438: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:438 + Error: Not equal: + expected: []int64{-9223372036854775808, 1, 9007199254740992, 9007199254740993, 9223372036854775807} + actual : []int64{} + + Diff: + --- Expected + +++ Actual + @@ -1,7 +1,2 @@ + -([]int64) (len=5) { + - (int64) -9223372036854775808, + - (int64) 1, + - (int64) 9007199254740992, + - (int64) 9007199254740993, + - (int64) 9223372036854775807 + +([]int64) { + } + Test: TestBulkOps_WiredFacadeReceivesExactNormalizedIDsAndStrictDryRun/bulk_promote/false + --- FAIL: TestBulkOps_WiredFacadeReceivesExactNormalizedIDsAndStrictDryRun/bulk_promote/true (0.00s) + tools_dryrun_test.go:435: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:435 + Error: Not equal: + expected: true + actual : false + Test: TestBulkOps_WiredFacadeReceivesExactNormalizedIDsAndStrictDryRun/bulk_promote/true + tools_dryrun_test.go:438: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:438 + Error: Not equal: + expected: []int64{-9223372036854775808, 1, 9007199254740992, 9007199254740993, 9223372036854775807} + actual : []int64{} + + Diff: + --- Expected + +++ Actual + @@ -1,7 +1,2 @@ + -([]int64) (len=5) { + - (int64) -9223372036854775808, + - (int64) 1, + - (int64) 9007199254740992, + - (int64) 9007199254740993, + - (int64) 9223372036854775807 + +([]int64) { + } + Test: TestBulkOps_WiredFacadeReceivesExactNormalizedIDsAndStrictDryRun/bulk_promote/true + --- FAIL: TestBulkOps_WiredFacadeReceivesExactNormalizedIDsAndStrictDryRun/bulk_delete (0.00s) + --- FAIL: TestBulkOps_WiredFacadeReceivesExactNormalizedIDsAndStrictDryRun/bulk_delete/missing (0.00s) + tools_dryrun_test.go:441: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:441 + Error: Not equal: + expected: []int64{-9223372036854775808, 1, 9007199254740992, 9007199254740993, 9223372036854775807} + actual : []int64{} + + Diff: + --- Expected + +++ Actual + @@ -1,7 +1,2 @@ + -([]int64) (len=5) { + - (int64) -9223372036854775808, + - (int64) 1, + - (int64) 9007199254740992, + - (int64) 9007199254740993, + - (int64) 9223372036854775807 + +([]int64) { + } + Test: TestBulkOps_WiredFacadeReceivesExactNormalizedIDsAndStrictDryRun/bulk_delete/missing + --- FAIL: TestBulkOps_WiredFacadeReceivesExactNormalizedIDsAndStrictDryRun/bulk_delete/false (0.00s) + tools_dryrun_test.go:441: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:441 + Error: Not equal: + expected: []int64{-9223372036854775808, 1, 9007199254740992, 9007199254740993, 9223372036854775807} + actual : []int64{} + + Diff: + --- Expected + +++ Actual + @@ -1,7 +1,2 @@ + -([]int64) (len=5) { + - (int64) -9223372036854775808, + - (int64) 1, + - (int64) 9007199254740992, + - (int64) 9007199254740993, + - (int64) 9223372036854775807 + +([]int64) { + } + Test: TestBulkOps_WiredFacadeReceivesExactNormalizedIDsAndStrictDryRun/bulk_delete/false + --- FAIL: TestBulkOps_WiredFacadeReceivesExactNormalizedIDsAndStrictDryRun/bulk_delete/true (0.00s) + tools_dryrun_test.go:435: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:435 + Error: Not equal: + expected: true + actual : false + Test: TestBulkOps_WiredFacadeReceivesExactNormalizedIDsAndStrictDryRun/bulk_delete/true + tools_dryrun_test.go:441: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:441 + Error: Not equal: + expected: []int64{-9223372036854775808, 1, 9007199254740992, 9007199254740993, 9223372036854775807} + actual : []int64{} + + Diff: + --- Expected + +++ Actual + @@ -1,7 +1,2 @@ + -([]int64) (len=5) { + - (int64) -9223372036854775808, + - (int64) 1, + - (int64) 9007199254740992, + - (int64) 9007199254740993, + - (int64) 9223372036854775807 + +([]int64) { + } + Test: TestBulkOps_WiredFacadeReceivesExactNormalizedIDsAndStrictDryRun/bulk_delete/true + --- FAIL: TestBulkOps_WiredFacadeReceivesExactNormalizedIDsAndStrictDryRun/bulk_supersede (0.00s) + --- FAIL: TestBulkOps_WiredFacadeReceivesExactNormalizedIDsAndStrictDryRun/bulk_supersede/missing (0.00s) + tools_dryrun_test.go:441: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:441 + Error: Not equal: + expected: []int64{-9223372036854775808, 1, 9007199254740992, 9007199254740993, 9223372036854775807} + actual : []int64{} + + Diff: + --- Expected + +++ Actual + @@ -1,7 +1,2 @@ + -([]int64) (len=5) { + - (int64) -9223372036854775808, + - (int64) 1, + - (int64) 9007199254740992, + - (int64) 9007199254740993, + - (int64) 9223372036854775807 + +([]int64) { + } + Test: TestBulkOps_WiredFacadeReceivesExactNormalizedIDsAndStrictDryRun/bulk_supersede/missing + --- FAIL: TestBulkOps_WiredFacadeReceivesExactNormalizedIDsAndStrictDryRun/bulk_supersede/false (0.00s) + tools_dryrun_test.go:441: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:441 + Error: Not equal: + expected: []int64{-9223372036854775808, 1, 9007199254740992, 9007199254740993, 9223372036854775807} + actual : []int64{} + + Diff: + --- Expected + +++ Actual + @@ -1,7 +1,2 @@ + -([]int64) (len=5) { + - (int64) -9223372036854775808, + - (int64) 1, + - (int64) 9007199254740992, + - (int64) 9007199254740993, + - (int64) 9223372036854775807 + +([]int64) { + } + Test: TestBulkOps_WiredFacadeReceivesExactNormalizedIDsAndStrictDryRun/bulk_supersede/false + --- FAIL: TestBulkOps_WiredFacadeReceivesExactNormalizedIDsAndStrictDryRun/bulk_supersede/true (0.00s) + tools_dryrun_test.go:435: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:435 + Error: Not equal: + expected: true + actual : false + Test: TestBulkOps_WiredFacadeReceivesExactNormalizedIDsAndStrictDryRun/bulk_supersede/true + tools_dryrun_test.go:441: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/tools_dryrun_test.go:441 + Error: Not equal: + expected: []int64{-9223372036854775808, 1, 9007199254740992, 9007199254740993, 9223372036854775807} + actual : []int64{} + + Diff: + --- Expected + +++ Actual + @@ -1,7 +1,2 @@ + -([]int64) (len=5) { + - (int64) -9223372036854775808, + - (int64) 1, + - (int64) 9007199254740992, + - (int64) 9007199254740993, + - (int64) 9223372036854775807 + +([]int64) { + } + Test: TestBulkOps_WiredFacadeReceivesExactNormalizedIDsAndStrictDryRun/bulk_supersede/true +FAIL +FAIL github.com/thebtf/engram/internal/mcp 0.139s +FAIL +test_exit=1 +active_sessions_before_terminate=0 +database_residue=0 +activity_residue=0 +finished_utc=2026-07-10T08:38:19.0298344Z diff --git a/.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/07-post-prove-green.log b/.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/07-post-prove-green.log new file mode 100644 index 00000000..01b6a2a6 --- /dev/null +++ b/.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/07-post-prove-green.log @@ -0,0 +1,12 @@ +base_sha=68b2ce5835c7c6efdf1c68da9eedcb8d9c3837ef +head_sha=68b2ce5835c7c6efdf1c68da9eedcb8d9c3837ef +database=engram_mkr_bedge_post_prove_green_20260710a +command=go test -p=1 ./internal/db/gorm ./internal/mcp -run ^(TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites|TestCandidateStore_AllCandidateReviewSnapshotSeamsCommitExactlyOneAudit|TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs|TestBulkOps_PublicDispatchPreservesExactIntegralIDsBeforeNormalization|TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade|TestBulkOps_WiredFacadeReceivesExactNormalizedIDsAndStrictDryRun)$ -count=1 +started_utc=2026-07-10T08:38:56.1896229Z +ok github.com/thebtf/engram/internal/db/gorm 3.688s +ok github.com/thebtf/engram/internal/mcp 0.091s +test_exit=0 +active_sessions_before_terminate=0 +database_residue=0 +activity_residue=0 +finished_utc=2026-07-10T08:39:04.9174418Z diff --git a/.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/08-full-packages.log b/.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/08-full-packages.log new file mode 100644 index 00000000..26abe49e --- /dev/null +++ b/.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/08-full-packages.log @@ -0,0 +1,424 @@ +base_sha=68b2ce5835c7c6efdf1c68da9eedcb8d9c3837ef +head_sha=68b2ce5835c7c6efdf1c68da9eedcb8d9c3837ef +database=engram_mkr_bedge_full_packages_20260710a +command=go test -p=1 ./internal/db/gorm ./internal/mcp -count=1 +started_utc=2026-07-10T08:39:24.7238176Z +{"level":"warn","error":"ERROR: relation \"observation_vectors\" does not exist (SQLSTATE 42P01)","time":"2026-07-10T11:39:27+03:00","message":"migration 040: orphan vector cleanup failed (non-fatal)"} +{"level":"info","garbage_deleted":0,"orphan_vectors_deleted":0,"time":"2026-07-10T11:39:27+03:00","message":"migration 040: garbage cleanup complete"} +{"level":"info","orphan_vectors_deleted":0,"time":"2026-07-10T11:39:27+03:00","message":"migration 041: orphan vector purge complete"} +{"level":"info","patterns_deleted":0,"time":"2026-07-10T11:39:27+03:00","message":"migration 042: low-quality pattern purge complete"} +{"level":"info","total_deleted":0,"time":"2026-07-10T11:39:27+03:00","message":"migration 043: radical observation cleanup complete"} +{"level":"warn","error":"ERROR: extension \"vectorscale\" is not available (SQLSTATE 0A000)","time":"2026-07-10T11:39:28+03:00","message":"migration 109: vectorscale extension not available, skipping DiskANN index"} + +2026/07/10 11:39:30 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/candidate_store.go:151 ERROR: duplicate key value violates unique constraint "idx_candidates_fingerprint_pending" (SQLSTATE 23505) +[2.502ms] [rows:0] INSERT INTO "crystallization_candidates" ("created_at","updated_at","review_after","source_session_id","proposed_content","proposed_tier","proposed_epistemic_type","proposed_promotion_target","evidence_handles","privacy_scope","status","fingerprint","affected_projects","promoted_memory_id","confidence","recurrence_count") VALUES ('2026-07-10 11:39:30.921','2026-07-10 11:39:30.921','2026-07-17 08:39:30.92','session-fp-1783672770914798700','idempotent content','episodic','observation','rule','[]','project','pending','a4638b783aed09e6','{}',NULL,0.5,1) RETURNING "id" +--- FAIL: TestCandidateStore_PromoteWithMemoryAndSnapshot_AmendFailureRollsBackPromotion (0.13s) + candidate_store_test.go:507: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/candidate_store_test.go:507 + Error: "promote_with_memory_snapshot: snapshot actor does not match review actor" does not contain "forced snapshot amend failure" + Test: TestCandidateStore_PromoteWithMemoryAndSnapshot_AmendFailureRollsBackPromotion +--- FAIL: TestCandidateStore_PreserveWithMemoryAndSnapshot_RequiresCandidateReviewSnapshotBeforeMutation (0.00s) + candidate_store_test.go:565: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/candidate_store_test.go:565 + Error: "preserve_with_memory_snapshot: candidate review snapshot is required" does not contain "candidate_review snapshot is required" + Test: TestCandidateStore_PreserveWithMemoryAndSnapshot_RequiresCandidateReviewSnapshotBeforeMutation + +2026/07/10 11:39:32 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/audit_store.go:46 ERROR: forced candidate_review audit failure (SQLSTATE P0001) +[2.000ms] [rows:0] INSERT INTO "audit_log" ("memory_id","action","actor","source_session_id","before_state","after_state","reason") VALUES (NULL,'candidate_review','agent/fail','session-candidate-review-supersede-audit-rollback-1783672772251471800','{"created_at":"2026-07-10T11:39:32.252471+03:00","updated_at":"2026-07-10T11:39:32.252471+03:00","review_after":"2026-07-17T11:39:32.251471+03:00","source_session_id":"session-candidate-review-supersede-audit-rollback-1783672772251471800","proposed_content":"content for candidate review transaction test","proposed_tier":"episodic","proposed_epistemic_type":"observation","proposed_promotion_target":"rule","privacy_scope":"project","status":"pending","fingerprint":"9a2e9f2cccee1e21","affected_projects":["test-project"],"id":20,"confidence":0.5,"recurrence_count":1}','{"created_at":"2026-07-10T11:39:32.252471+03:00","updated_at":"2026-07-10T11:39:32.271015+03:00","review_after":"2026-07-17T11:39:32.251471+03:00","source_session_id":"session-candidate-review-supersede-audit-rollback-1783672772251471800","proposed_content":"content for candidate review transaction test","proposed_tier":"episodic","proposed_epistemic_type":"observation","proposed_promotion_target":"rule","privacy_scope":"project","status":"superseded","fingerprint":"9a2e9f2cccee1e21","affected_projects":["test-project"],"id":20,"confidence":0.5,"recurrence_count":1}','candidate 20 review action supersede') RETURNING "id","created_at" +{"level":"debug","connections":2,"time":"2026-07-10T11:39:37+03:00","message":"Connection pool warmed"} +{"level":"debug","connections":2,"time":"2026-07-10T11:39:37+03:00","message":"Connection pool warmed"} +{"level":"debug","connections":2,"time":"2026-07-10T11:39:37+03:00","message":"Connection pool warmed"} +{"level":"debug","connections":2,"time":"2026-07-10T11:39:37+03:00","message":"Connection pool warmed"} +{"level":"debug","connections":2,"time":"2026-07-10T11:39:38+03:00","message":"Connection pool warmed"} +{"level":"info","time":"2026-07-10T11:39:38+03:00","message":"Starting database optimization"} +{"level":"info","duration":160.7167,"time":"2026-07-10T11:39:38+03:00","message":"Database optimization complete"} +{"level":"debug","connections":2,"time":"2026-07-10T11:39:38+03:00","message":"Connection pool warmed"} +{"level":"debug","connections":2,"time":"2026-07-10T11:39:38+03:00","message":"Connection pool warmed"} +{"level":"debug","connections":2,"time":"2026-07-10T11:39:38+03:00","message":"Connection pool warmed"} +{"level":"debug","connections":2,"time":"2026-07-10T11:39:38+03:00","message":"Connection pool warmed"} +{"level":"debug","connections":2,"time":"2026-07-10T11:39:38+03:00","message":"Connection pool warmed"} +{"level":"debug","connections":2,"time":"2026-07-10T11:39:39+03:00","message":"Connection pool warmed"} +{"level":"debug","connections":2,"time":"2026-07-10T11:39:39+03:00","message":"Connection pool warmed"} + +2026/07/10 11:39:45 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/migrations_integration_test.go:214 ERROR: new row for relation "memories" violates check constraint "memories_privacy_scope_chk" (SQLSTATE 23514) +[0.500ms] [rows:0] INSERT INTO memories (project, content, privacy_scope) VALUES ('t001-test', 'T001 invalid fixture', 'invalid_scope') + +2026/07/10 11:39:45 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/migrations_integration_test.go:175 sql: database is closed +[0.000ms] [rows:0] DELETE FROM memories WHERE project = 't001-test' + +2026/07/10 11:39:45 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/migrations_integration_test.go:260 sql: database is closed +[0.000ms] [rows:0] DELETE FROM memories WHERE project = 't006-backfill-test' + +2026/07/10 11:39:45 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/migrations_integration_test.go:379 sql: database is closed +[0.000ms] [rows:0] DELETE FROM memories WHERE project = 't001b-test' + +2026/07/10 11:39:45 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/migrations_integration_test.go:479 ERROR: new row for relation "knowledge_nodes" violates check constraint "knowledge_nodes_type_chk" (SQLSTATE 23514) +[0.502ms] [rows:0] INSERT INTO knowledge_nodes (node_type, external_ref, project) VALUES ('invalid_node_type', 'ref-invalid', 't009-test') + +2026/07/10 11:39:45 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/migrations_integration_test.go:490 ERROR: duplicate key value violates unique constraint "idx_knowledge_nodes_type_ref_active" (SQLSTATE 23505) +[1.001ms] [rows:0] INSERT INTO knowledge_nodes (node_type, external_ref, project) VALUES ('skill', 'unique-test-skill', 't009-test') + +2026/07/10 11:39:45 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/migrations_integration_test.go:444 sql: database is closed +[0.000ms] [rows:0] DELETE FROM knowledge_nodes WHERE project = 't009-test' + +2026/07/10 11:39:45 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/migrations_integration_test.go:573 sql: database is closed +[0.000ms] [rows:0] DELETE FROM memories WHERE project = 't010-test' + +2026/07/10 11:39:45 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/migrations_integration_test.go:574 sql: database is closed +[0.000ms] [rows:0] DELETE FROM knowledge_edges WHERE source_session_id = 't010-test' + +2026/07/10 11:39:45 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/migrations_integration_test.go:531 sql: database is closed +[0.000ms] [rows:0] DELETE FROM knowledge_nodes WHERE project = 't010-test' + +2026/07/10 11:39:45 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/migrations_integration_test.go:695 ERROR: new row for relation "crystallization_candidates" violates check constraint "crystallization_candidates_status_check" (SQLSTATE 23514) +[1.007ms] [rows:0] + INSERT INTO crystallization_candidates (proposed_content, status) + VALUES ('test', 'invalid_status') + + +2026/07/10 11:39:45 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/migrations_integration_test.go:823 ERROR: new row for relation "bulk_op_snapshots" violates check constraint "bulk_op_snapshots_op_type_check" (SQLSTATE 23514) +[0.500ms] [rows:0] + INSERT INTO bulk_op_snapshots (snapshot_id, op_type, actor, before_state) + VALUES ('test-snap-invalid', 'invalid_op', 'test-actor', '{}') + + +2026/07/10 11:39:45 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/migrations_integration_test.go:780 sql: database is closed +[0.000ms] [rows:0] DELETE FROM bulk_op_snapshots WHERE snapshot_id LIKE 'test-snap-%' + +2026/07/10 11:39:46 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/migrations_integration_test.go:884 ERROR: new row for relation "bulk_op_snapshots" violates check constraint "bulk_op_snapshots_op_type_check" (SQLSTATE 23514) +[1.541ms] [rows:0] + INSERT INTO bulk_op_snapshots (snapshot_id, op_type, actor, before_state) + VALUES ('test-m153-candidate-review-1783672786003038400-invalid', 'invalid_op_after_blocked_rollback', 'test-actor', '{}') + + +2026/07/10 11:39:46 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/migrations_integration_test.go:873 sql: database is closed +[0.000ms] [rows:0] DELETE FROM bulk_op_snapshots WHERE snapshot_id IN ('test-m153-candidate-review-1783672786003038400', 'test-m153-candidate-review-1783672786003038400-invalid') + +2026/07/10 11:39:46 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/migrations_integration_test.go:921 ERROR: new row for relation "bulk_op_snapshots" violates check constraint "bulk_op_snapshots_op_type_check" (SQLSTATE 23514) +[1.500ms] [rows:0] + INSERT INTO bulk_op_snapshots (snapshot_id, op_type, actor, before_state) + VALUES ('test-m154-forgetting-review-1783672786114199700-invalid', 'invalid_op_after_blocked_forgetting_rollback', 'test-actor', '{}') + + +2026/07/10 11:39:46 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/migrations_integration_test.go:910 sql: database is closed +[0.000ms] [rows:0] DELETE FROM bulk_op_snapshots WHERE snapshot_id IN ('test-m154-forgetting-review-1783672786114199700', 'test-m154-forgetting-review-1783672786114199700-invalid') + +2026/07/10 11:39:46 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/migrations_integration_test.go:947 sql: database is closed +[0.000ms] [rows:0] DELETE FROM rule_governance_snapshots WHERE snapshot_id = 'test-rg-snap-1783672786226258900' + +2026/07/10 11:39:46 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/migrations_integration_test.go:1034 ERROR: new row for relation "api_tokens" violates check constraint "api_tokens_principal_kind_chk" (SQLSTATE 23514) +[1.504ms] [rows:0] + INSERT INTO api_tokens (name, token_hash, token_prefix, scope, principal, principal_kind) + VALUES ('test-principal-1783672786339758700-invalid', 'hash-invalid', 'p148bad0', 'read-write', 'principal/bad', 'daemon') + + +2026/07/10 11:39:46 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/migrations_integration_test.go:981 sql: database is closed +[0.000ms] [rows:0] DELETE FROM api_tokens WHERE name LIKE 'test-principal-1783672786339758700%' + +2026/07/10 11:39:48 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/rule_governance_store.go:323 record not found +[1.999ms] [rows:0] SELECT * FROM "rule_candidates" WHERE fingerprint = 'rg0-arbiter-annotation-1783672788230078600' AND status IN ('pending','drafted') ORDER BY created_at ASC,"rule_candidates"."id" LIMIT 1 + +2026/07/10 11:39:48 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/rule_governance_store.go:323 record not found +[2.000ms] [rows:0] SELECT * FROM "rule_candidates" WHERE fingerprint = 'rg0-arbiter-terminal-run-1783672788379132700' AND status IN ('pending','drafted') ORDER BY created_at ASC,"rule_candidates"."id" LIMIT 1 + +2026/07/10 11:39:48 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/rule_governance_store.go:323 record not found +[2.000ms] [rows:0] SELECT * FROM "rule_candidates" WHERE fingerprint = 'rg0-arbiter-annotation-mismatch-1783672788511731300' AND status IN ('pending','drafted') ORDER BY created_at ASC,"rule_candidates"."id" LIMIT 1 + +2026/07/10 11:39:48 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/rule_governance_store.go:323 record not found +[0.500ms] [rows:0] SELECT * FROM "rule_candidates" WHERE fingerprint = 'rg0-arbiter-annotation-other-1783672788519731700' AND status IN ('pending','drafted') ORDER BY created_at ASC,"rule_candidates"."id" LIMIT 1 + +2026/07/10 11:39:48 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/rule_governance_store.go:627 record not found +[0.999ms] [rows:0] SELECT * FROM "rule_arbiter_evaluations" WHERE id = 2 AND candidate_id = 3 AND run_id = 3 AND action = 'hold' ORDER BY "rule_arbiter_evaluations"."id" LIMIT 1 + +2026/07/10 11:39:48 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/rule_governance_store.go:323 record not found +[2.005ms] [rows:0] SELECT * FROM "rule_candidates" WHERE fingerprint = 'rg0-arbiter-requeue-1783672788652256200' AND status IN ('pending','drafted') ORDER BY created_at ASC,"rule_candidates"."id" LIMIT 1 +--- FAIL: TestRuleGovernanceStore_AnnotatedCandidateWaitsUntilReviewAfter (0.18s) + rule_arbiter_store_test.go:195: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/rule_arbiter_store_test.go:195 + Error: []int64{1} does not contain 5 + Test: TestRuleGovernanceStore_AnnotatedCandidateWaitsUntilReviewAfter + +2026/07/10 11:39:48 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/rule_governance_store.go:323 record not found +[3.000ms] [rows:0] SELECT * FROM "rule_candidates" WHERE fingerprint = 'rg0-arbiter-claim-race-1783672788826969800' AND status IN ('pending','drafted') ORDER BY created_at ASC,"rule_candidates"."id" LIMIT 1 + +2026/07/10 11:39:48 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/rule_governance_store.go:323 record not found +[2.500ms] [rows:0] SELECT * FROM "rule_candidates" WHERE fingerprint = 'rg0-arbiter-confidence-1783672788987584700' AND status IN ('pending','drafted') ORDER BY created_at ASC,"rule_candidates"."id" LIMIT 1 + +2026/07/10 11:39:49 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/rule_governance_store.go:323 record not found +[2.000ms] [rows:0] SELECT * FROM "rule_candidates" WHERE fingerprint = 'rg0-rg3-health-1783672789116093000-pending-1783672789116093000' AND status IN ('pending','drafted') ORDER BY created_at ASC,"rule_candidates"."id" LIMIT 1 + +2026/07/10 11:39:49 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/rule_governance_store.go:323 record not found +[1.000ms] [rows:0] SELECT * FROM "rule_candidates" WHERE fingerprint = 'rg0-rg3-health-1783672789116093000-rejected-1783672789123593700' AND status IN ('pending','drafted') ORDER BY created_at ASC,"rule_candidates"."id" LIMIT 1 +--- FAIL: TestRuleGovernanceStore_GetLifecycleHealthAggregatesGovernanceTables (0.18s) + rule_governance_rg3_store_test.go:93: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/rule_governance_rg3_store_test.go:93 + Error: Not equal: + expected: 1 + actual : 5 + Test: TestRuleGovernanceStore_GetLifecycleHealthAggregatesGovernanceTables +--- FAIL: TestRuleGovernanceStore_GetLifecycleHealthOmitsGlobalArbiterRunsForProjectScopedReads (0.12s) + rule_governance_rg3_store_test.go:128: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/rule_governance_rg3_store_test.go:128 + Error: Not equal: + expected: 1 + actual : 6 + Test: TestRuleGovernanceStore_GetLifecycleHealthOmitsGlobalArbiterRunsForProjectScopedReads + +2026/07/10 11:39:49 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/rule_governance_store.go:323 record not found +[2.000ms] [rows:0] SELECT * FROM "rule_candidates" WHERE fingerprint = 'rg0-rg3-queue-1783672789417649200-global-1783672789417649200' AND status IN ('pending','drafted') ORDER BY created_at ASC,"rule_candidates"."id" LIMIT 1 + +2026/07/10 11:39:49 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/rule_governance_store.go:323 record not found +[0.500ms] [rows:0] SELECT * FROM "rule_candidates" WHERE fingerprint = 'rg0-rg3-queue-1783672789417649200-conflict-1783672789425149100' AND status IN ('pending','drafted') ORDER BY created_at ASC,"rule_candidates"."id" LIMIT 1 + +2026/07/10 11:39:49 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/rule_governance_store.go:323 record not found +[0.999ms] [rows:0] SELECT * FROM "rule_candidates" WHERE fingerprint = 'rg0-rg3-queue-1783672789417649200-hold-1783672789429650100' AND status IN ('pending','drafted') ORDER BY created_at ASC,"rule_candidates"."id" LIMIT 1 + +2026/07/10 11:39:49 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/rule_governance_store.go:323 record not found +[0.500ms] [rows:0] SELECT * FROM "rule_candidates" WHERE fingerprint = 'rg0-rg3-queue-1783672789417649200-unclear-1783672789434648900' AND status IN ('pending','drafted') ORDER BY created_at ASC,"rule_candidates"."id" LIMIT 1 + +2026/07/10 11:39:49 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/rule_governance_store.go:323 record not found +[1.502ms] [rows:0] SELECT * FROM "rule_candidates" WHERE fingerprint = 'rg0-rg3-queue-filter-1783672789558522500-live-conflict-1783672789558522500' AND status IN ('pending','drafted') ORDER BY created_at ASC,"rule_candidates"."id" LIMIT 1 + +2026/07/10 11:39:49 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/rule_governance_store.go:323 record not found +[0.500ms] [rows:0] SELECT * FROM "rule_candidates" WHERE fingerprint = 'rg0-rg3-queue-filter-1783672789558522500-resolved-conflict-1783672789571520300' AND status IN ('pending','drafted') ORDER BY created_at ASC,"rule_candidates"."id" LIMIT 1 + +2026/07/10 11:39:49 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/rule_governance_store.go:323 record not found +[0.999ms] [rows:0] SELECT * FROM "rule_candidates" WHERE fingerprint = 'rg0-rg3-queue-filter-1783672789558522500-noise-0-1783672789587022100' AND status IN ('pending','drafted') ORDER BY created_at ASC,"rule_candidates"."id" LIMIT 1 + +2026/07/10 11:39:49 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/rule_governance_store.go:323 record not found +[0.500ms] [rows:0] SELECT * FROM "rule_candidates" WHERE fingerprint = 'rg0-rg3-queue-filter-1783672789558522500-noise-1-1783672789592521600' AND status IN ('pending','drafted') ORDER BY created_at ASC,"rule_candidates"."id" LIMIT 1 + +2026/07/10 11:39:49 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/rule_governance_store.go:323 record not found +[1.000ms] [rows:0] SELECT * FROM "rule_candidates" WHERE fingerprint = 'rg0-rg3-queue-filter-1783672789558522500-noise-2-1783672789597021400' AND status IN ('pending','drafted') ORDER BY created_at ASC,"rule_candidates"."id" LIMIT 1 + +2026/07/10 11:39:50 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/migration_rule_governance.go:196 ERROR: cannot drop table rule_versions because other objects depend on it (SQLSTATE 2BP01) +[1.501ms] [rows:0] DROP TABLE IF EXISTS rule_versions +--- FAIL: TestMigration144_RuleGovernanceRollbackAndReapply (0.13s) + rule_governance_store_test.go:32: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/rule_governance_store_test.go:32 + Error: Received unexpected error: + ERROR: cannot drop table rule_versions because other objects depend on it (SQLSTATE 2BP01) + Test: TestMigration144_RuleGovernanceRollbackAndReapply + +2026/07/10 11:39:50 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/migration_rule_governance.go:196 ERROR: cannot drop table rule_versions because other objects depend on it (SQLSTATE 2BP01) +[1.005ms] [rows:0] DROP TABLE IF EXISTS rule_versions +--- FAIL: TestMigration144_RuleGovernanceEscapeConstraints (0.13s) + rule_governance_store_test.go:45: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/rule_governance_store_test.go:45 + Error: Received unexpected error: + ERROR: cannot drop table rule_versions because other objects depend on it (SQLSTATE 2BP01) + Test: TestMigration144_RuleGovernanceEscapeConstraints + +2026/07/10 11:39:50 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/rule_governance_store.go:323 record not found +[2.000ms] [rows:0] SELECT * FROM "rule_candidates" WHERE fingerprint = 'rg0-idempotent-fingerprint' AND status IN ('pending','drafted') ORDER BY created_at ASC,"rule_candidates"."id" LIMIT 1 + +2026/07/10 11:39:51 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/rule_governance_store.go:323 record not found +[1.999ms] [rows:0] SELECT * FROM "rule_candidates" WHERE fingerprint = 'rg0-draft-fingerprint' AND status IN ('pending','drafted') ORDER BY created_at ASC,"rule_candidates"."id" LIMIT 1 + +2026/07/10 11:39:51 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/rule_governance_store.go:1625 record not found +[2.000ms] [rows:0] SELECT * FROM "rule_versions" WHERE source_candidate_id = 21 ORDER BY "rule_versions"."id" LIMIT 1 + +2026/07/10 11:39:51 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/rule_governance_store.go:323 record not found +[2.501ms] [rows:0] SELECT * FROM "rule_candidates" WHERE fingerprint = 'rg0-unknown-actor-kind-1783672791536984100' AND status IN ('pending','drafted') ORDER BY created_at ASC,"rule_candidates"."id" LIMIT 1 + +2026/07/10 11:39:51 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/rule_governance_store.go:1625 record not found +[2.002ms] [rows:0] SELECT * FROM "rule_versions" WHERE source_candidate_id = 22 ORDER BY "rule_versions"."id" LIMIT 1 + +2026/07/10 11:39:51 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/rule_governance_store.go:323 record not found +[2.001ms] [rows:0] SELECT * FROM "rule_candidates" WHERE fingerprint = 'rg0-blank-transition-actor-1783672791658360100' AND status IN ('pending','drafted') ORDER BY created_at ASC,"rule_candidates"."id" LIMIT 1 + +2026/07/10 11:39:51 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/rule_governance_store.go:1625 record not found +[1.498ms] [rows:0] SELECT * FROM "rule_versions" WHERE source_candidate_id = 23 ORDER BY "rule_versions"."id" LIMIT 1 + +2026/07/10 11:39:51 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/rule_governance_store.go:323 record not found +[0.999ms] [rows:0] SELECT * FROM "rule_candidates" WHERE fingerprint = 'rg0-blank-transition-actor kind-1783672791670860700' AND status IN ('pending','drafted') ORDER BY created_at ASC,"rule_candidates"."id" LIMIT 1 + +2026/07/10 11:39:51 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/rule_governance_store.go:1625 record not found +[0.999ms] [rows:0] SELECT * FROM "rule_versions" WHERE source_candidate_id = 24 ORDER BY "rule_versions"."id" LIMIT 1 + +2026/07/10 11:39:51 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/rule_governance_store.go:323 record not found +[0.498ms] [rows:0] SELECT * FROM "rule_candidates" WHERE fingerprint = 'rg0-blank-transition-reason-1783672791679862500' AND status IN ('pending','drafted') ORDER BY created_at ASC,"rule_candidates"."id" LIMIT 1 + +2026/07/10 11:39:51 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/rule_governance_store.go:1625 record not found +[1.000ms] [rows:0] SELECT * FROM "rule_versions" WHERE source_candidate_id = 25 ORDER BY "rule_versions"."id" LIMIT 1 + +2026/07/10 11:39:51 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/rule_governance_store.go:323 record not found +[1.004ms] [rows:0] SELECT * FROM "rule_candidates" WHERE fingerprint = 'rg0-blank-transition-evidence handle-1783672791687860000' AND status IN ('pending','drafted') ORDER BY created_at ASC,"rule_candidates"."id" LIMIT 1 + +2026/07/10 11:39:51 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/rule_governance_store.go:1625 record not found +[1.001ms] [rows:0] SELECT * FROM "rule_versions" WHERE source_candidate_id = 26 ORDER BY "rule_versions"."id" LIMIT 1 + +2026/07/10 11:39:51 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/rule_governance_store.go:323 record not found +[2.500ms] [rows:0] SELECT * FROM "rule_candidates" WHERE fingerprint = 'rg0-snapshot-required-1783672791812232600' AND status IN ('pending','drafted') ORDER BY created_at ASC,"rule_candidates"."id" LIMIT 1 + +2026/07/10 11:39:51 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/rule_governance_store.go:1625 record not found +[1.500ms] [rows:0] SELECT * FROM "rule_versions" WHERE source_candidate_id = 27 ORDER BY "rule_versions"."id" LIMIT 1 + +2026/07/10 11:39:51 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/rule_governance_store.go:323 record not found +[2.265ms] [rows:0] SELECT * FROM "rule_candidates" WHERE fingerprint = 'rg0-snapshot-log-1783672791968604100' AND status IN ('pending','drafted') ORDER BY created_at ASC,"rule_candidates"."id" LIMIT 1 + +2026/07/10 11:39:51 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/rule_governance_store.go:1625 record not found +[1.755ms] [rows:0] SELECT * FROM "rule_versions" WHERE source_candidate_id = 28 ORDER BY "rule_versions"."id" LIMIT 1 + +2026/07/10 11:39:52 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/rule_governance_store.go:323 record not found +[2.498ms] [rows:0] SELECT * FROM "rule_candidates" WHERE fingerprint = 'rg0-authority-1783672792240952400' AND status IN ('pending','drafted') ORDER BY created_at ASC,"rule_candidates"."id" LIMIT 1 + +2026/07/10 11:39:52 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/rule_governance_store.go:1625 record not found +[2.004ms] [rows:0] SELECT * FROM "rule_versions" WHERE source_candidate_id = 29 ORDER BY "rule_versions"."id" LIMIT 1 + +2026/07/10 11:39:52 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/rule_governance_store.go:323 record not found +[2.000ms] [rows:0] SELECT * FROM "rule_candidates" WHERE fingerprint = 'rg0-log-rollback-1783672792412023100' AND status IN ('pending','drafted') ORDER BY created_at ASC,"rule_candidates"."id" LIMIT 1 + +2026/07/10 11:39:52 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/rule_governance_store.go:1625 record not found +[2.003ms] [rows:0] SELECT * FROM "rule_versions" WHERE source_candidate_id = 30 ORDER BY "rule_versions"."id" LIMIT 1 + +2026/07/10 11:39:52 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/rule_governance_store.go:1664 ERROR: new row for relation "rule_transition_log" violates check constraint "rg0_transition_log_fail_test" (SQLSTATE 23514) +[0.498ms] [rows:0] INSERT INTO "rule_transition_log" ("created_at","rule_version_id","candidate_id","actor","actor_kind","action","from_state","to_state","reason","evidence_handles_json","snapshot_id") VALUES ('2026-07-10 11:39:52.452',22,30,'codex','agent','rule_version_transition','shadow','canary','force-log-fail','["evidence:rg0-transition"]','') RETURNING "id" + +2026/07/10 11:39:52 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/rule_governance_store.go:323 record not found +[2.500ms] [rows:0] SELECT * FROM "rule_candidates" WHERE fingerprint = 'rg0-snapshot-rollback-1783672792568063700' AND status IN ('pending','drafted') ORDER BY created_at ASC,"rule_candidates"."id" LIMIT 1 + +2026/07/10 11:39:52 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/rule_governance_store.go:1625 record not found +[2.029ms] [rows:0] SELECT * FROM "rule_versions" WHERE source_candidate_id = 31 ORDER BY "rule_versions"."id" LIMIT 1 + +2026/07/10 11:39:52 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/rule_governance_store.go:1692 ERROR: duplicate key value violates unique constraint "rule_governance_snapshots_snapshot_id_key" (SQLSTATE 23505) +[0.998ms] [rows:0] INSERT INTO "rule_governance_snapshots" ("created_at","rolled_back_at","snapshot_id","op_type","actor","before_state_json","after_state_json","status","pinned") VALUES ('2026-07-10 11:39:52.615',NULL,'rg0-duplicate-1783672792608596200','rule_transition','codex','{"project":"rg0-project","rule_versions":[{"state":"canary","id":23}]}','{"project":"rg0-project","rule_versions":[{"state":"active_project","id":23}]}','committed',false) RETURNING "id" + +2026/07/10 11:39:52 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/migration_rule_governance.go:196 ERROR: cannot drop table rule_versions because other objects depend on it (SQLSTATE 2BP01) +[1.502ms] [rows:0] DROP TABLE IF EXISTS rule_versions +--- FAIL: TestMigration144_RuleGovernanceSnapshotStatusesAcceptExtendedStates (0.16s) + rule_governance_store_test.go:729: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/rule_governance_store_test.go:729 + Error: Received unexpected error: + ERROR: cannot drop table rule_versions because other objects depend on it (SQLSTATE 2BP01) + Test: TestMigration144_RuleGovernanceSnapshotStatusesAcceptExtendedStates + +2026/07/10 11:39:53 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/rule_injection_event_store_test.go:32 ERROR: new row for relation "rule_injection_events" violates check constraint "rule_injection_events_type_chk" (SQLSTATE 23514) +[1.500ms] [rows:0] + INSERT INTO rule_injection_events (session_id, project, surface, event_type) + VALUES ('rg2-invalid-session', 'rg2-project', 'session-start', 'invalid_event') + + +2026/07/10 11:39:58 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/state_store_test.go:188 record not found +[2.268ms] [rows:0] SELECT * FROM "audit_log" WHERE action = 'write_project_state' AND actor = 'agent' AND reason LIKE '%state-audit-project-1783672798727582100%' ORDER BY id DESC,"audit_log"."id" LIMIT 1 + +2026/07/10 11:39:59 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/state_store_test.go:397 record not found +[1.500ms] [rows:0] SELECT * FROM "audit_log" WHERE action = 'read_resume_state' AND actor = 'agent:developer' AND source_session_id = 'state-resume-session-1783672799194955600' ORDER BY id DESC,"audit_log"."id" LIMIT 1 + +2026/07/10 11:39:59 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/state_store.go:216 record not found +[1.999ms] [rows:0] SELECT * FROM "agent_project_state" WHERE project = 'state-resume-project-scope-missing-1783672799755699600' ORDER BY "agent_project_state"."id" LIMIT 1 +{"level":"debug","connections":5,"time":"2026-07-10T11:40:00+03:00","message":"Connection pool warmed"} +{"level":"debug","connections":5,"time":"2026-07-10T11:40:00+03:00","message":"Connection pool warmed"} +{"level":"debug","connections":5,"time":"2026-07-10T11:40:00+03:00","message":"Connection pool warmed"} +{"level":"debug","connections":5,"time":"2026-07-10T11:40:00+03:00","message":"Connection pool warmed"} +{"level":"debug","connections":5,"time":"2026-07-10T11:40:00+03:00","message":"Connection pool warmed"} +{"level":"debug","connections":5,"time":"2026-07-10T11:40:00+03:00","message":"Connection pool warmed"} +{"level":"debug","connections":5,"time":"2026-07-10T11:40:00+03:00","message":"Connection pool warmed"} +{"level":"debug","connections":5,"time":"2026-07-10T11:40:00+03:00","message":"Connection pool warmed"} +{"level":"debug","connections":5,"time":"2026-07-10T11:40:00+03:00","message":"Connection pool warmed"} +{"level":"debug","connections":5,"time":"2026-07-10T11:40:01+03:00","message":"Connection pool warmed"} +{"level":"debug","connections":5,"time":"2026-07-10T11:40:01+03:00","message":"Connection pool warmed"} +{"level":"debug","connections":5,"time":"2026-07-10T11:40:01+03:00","message":"Connection pool warmed"} +{"level":"info","time":"2026-07-10T11:40:01+03:00","message":"Starting database optimization"} +{"level":"info","duration":192.0614,"time":"2026-07-10T11:40:01+03:00","message":"Database optimization complete"} + +2026/07/10 11:40:02 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/candidate_store_test.go:29 +[error] failed to initialize database, got error failed to connect to `user=engram database=engram_mkr_bedge_full_packages_20260710a`: 127.0.0.1:55432 (127.0.0.1): server error: FATAL: sorry, too many clients already (SQLSTATE 53300) +--- FAIL: TestTemporalTruthStore_LoadSelectedRecordsUsesDBNowForValidFrom (0.01s) + temporal_truth_store_test.go:377: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/candidate_store_test.go:30 + D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/temporal_truth_store_test.go:377 + Error: Received unexpected error: + failed to connect to `user=engram database=engram_mkr_bedge_full_packages_20260710a`: 127.0.0.1:55432 (127.0.0.1): server error: FATAL: sorry, too many clients already (SQLSTATE 53300) + Test: TestTemporalTruthStore_LoadSelectedRecordsUsesDBNowForValidFrom + Messages: open test DB +--- FAIL: TestTokenStore_CreateWithPrincipalRoundTrip (0.00s) + token_store_test.go:14: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/credential_store_test.go:29 + D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/token_store_test.go:14 + Error: Received unexpected error: + failed to connect to `user=engram database=engram_mkr_bedge_full_packages_20260710a`: 127.0.0.1:55432 (127.0.0.1): server error: FATAL: sorry, too many clients already (SQLSTATE 53300) + Test: TestTokenStore_CreateWithPrincipalRoundTrip + Messages: open test db +--- FAIL: TestTokenStore_CreateWithPrincipalRejectsKindWithoutPrincipal (0.00s) + token_store_test.go:51: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/credential_store_test.go:29 + D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/token_store_test.go:51 + Error: Received unexpected error: + failed to connect to `user=engram database=engram_mkr_bedge_full_packages_20260710a`: 127.0.0.1:55432 (127.0.0.1): server error: FATAL: sorry, too many clients already (SQLSTATE 53300) + Test: TestTokenStore_CreateWithPrincipalRejectsKindWithoutPrincipal + Messages: open test db +--- FAIL: TestTranscriptStore_Lifecycle (0.00s) + transcript_store_test.go:64: open test db: failed to connect to `user=engram database=engram_mkr_bedge_full_packages_20260710a`: 127.0.0.1:55432 (127.0.0.1): server error: FATAL: sorry, too many clients already (SQLSTATE 53300) +FAIL +FAIL github.com/thebtf/engram/internal/db/gorm 35.866s +{"level":"debug","connections":1,"time":"2026-07-10T11:40:03+03:00","message":"Connection pool warmed"} +{"level":"debug","connections":1,"time":"2026-07-10T11:40:03+03:00","message":"Connection pool warmed"} +{"level":"debug","connections":1,"time":"2026-07-10T11:40:03+03:00","message":"Connection pool warmed"} +--- FAIL: TestHybridTG3_ConfidenceMin_FloorEnforced_T022 (0.13s) + integration_tg3_hybrid_test.go:83: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/integration_tg3_hybrid_test.go:83 + Error: Received unexpected error: + json: cannot unmarshal array into Go value of type map[string]interface {} + Test: TestHybridTG3_ConfidenceMin_FloorEnforced_T022 + Messages: response must be valid JSON +{"level":"debug","connections":1,"time":"2026-07-10T11:40:03+03:00","message":"Connection pool warmed"} +{"level":"debug","connections":1,"time":"2026-07-10T11:40:03+03:00","message":"Connection pool warmed"} +{"level":"debug","connections":1,"time":"2026-07-10T11:40:03+03:00","message":"Connection pool warmed"} +{"level":"debug","connections":1,"time":"2026-07-10T11:40:03+03:00","message":"Connection pool warmed"} +{"level":"debug","connections":1,"time":"2026-07-10T11:40:04+03:00","message":"Connection pool warmed"} +{"level":"debug","connections":1,"time":"2026-07-10T11:40:04+03:00","message":"Connection pool warmed"} +{"level":"debug","connections":1,"time":"2026-07-10T11:40:04+03:00","message":"Connection pool warmed"} +{"level":"debug","connections":5,"time":"2026-07-10T11:40:04+03:00","message":"Connection pool warmed"} +{"level":"debug","connections":5,"time":"2026-07-10T11:40:04+03:00","message":"Connection pool warmed"} +{"level":"debug","connections":1,"time":"2026-07-10T11:40:04+03:00","message":"Connection pool warmed"} +--- FAIL: TestEC_F1_TagDerivedBackfill_T007 (0.13s) + store_memory_compat_t007_test.go:157: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/store_memory_compat_t007_test.go:157 + Error: Should be true + Test: TestEC_F1_TagDerivedBackfill_T007 + Messages: global-scoped row must be returned by MemoryStore.List within its own project +{"level":"debug","connections":1,"time":"2026-07-10T11:40:04+03:00","message":"Connection pool warmed"} +{"level":"debug","connections":1,"time":"2026-07-10T11:40:04+03:00","message":"Connection pool warmed"} +{"level":"debug","connections":1,"time":"2026-07-10T11:40:05+03:00","message":"Connection pool warmed"} +{"level":"debug","connections":1,"time":"2026-07-10T11:40:05+03:00","message":"Connection pool warmed"} +{"level":"debug","connections":1,"time":"2026-07-10T11:40:05+03:00","message":"Connection pool warmed"} +{"level":"debug","connections":5,"time":"2026-07-10T11:40:05+03:00","message":"Connection pool warmed"} +{"level":"debug","connections":5,"time":"2026-07-10T11:40:05+03:00","message":"Connection pool warmed"} +{"level":"debug","connections":5,"time":"2026-07-10T11:40:05+03:00","message":"Connection pool warmed"} +{"level":"debug","connections":1,"time":"2026-07-10T11:40:06+03:00","message":"Connection pool warmed"} +{"level":"debug","connections":1,"time":"2026-07-10T11:40:06+03:00","message":"Connection pool warmed"} +{"level":"debug","connections":1,"time":"2026-07-10T11:40:06+03:00","message":"Connection pool warmed"} +{"level":"debug","connections":1,"time":"2026-07-10T11:40:06+03:00","message":"Connection pool warmed"} +{"level":"debug","soft_limit":1000,"time":"2026-07-10T11:40:06+03:00","message":"edit_memory: content truncated to soft limit"} +{"level":"warn","time":"2026-07-10T11:40:06+03:00","message":"edit_memory: content contains secrets — redacting before storage"} +{"level":"error","audit_label":"test-panic","memory_id":99,"panic":"simulated audit panic","time":"2026-07-10T11:40:06+03:00","message":"audit: goroutine panic recovered"} +{"level":"error","error":"simulated db error","audit_label":"test-error","memory_id":88,"time":"2026-07-10T11:40:06+03:00","message":"audit: async write failed"} +{"level":"debug","connections":1,"time":"2026-07-10T11:40:06+03:00","message":"Connection pool warmed"} +{"level":"debug","connections":1,"time":"2026-07-10T11:40:06+03:00","message":"Connection pool warmed"} +{"level":"debug","connections":1,"time":"2026-07-10T11:40:06+03:00","message":"Connection pool warmed"} +{"level":"debug","connections":1,"time":"2026-07-10T11:40:07+03:00","message":"Connection pool warmed"} +{"level":"debug","connections":1,"time":"2026-07-10T11:40:07+03:00","message":"Connection pool warmed"} +{"level":"debug","connections":1,"time":"2026-07-10T11:40:07+03:00","message":"Connection pool warmed"} +{"level":"debug","connections":1,"time":"2026-07-10T11:40:07+03:00","message":"Connection pool warmed"} +{"level":"debug","connections":1,"time":"2026-07-10T11:40:07+03:00","message":"Connection pool warmed"} +{"level":"debug","connections":1,"time":"2026-07-10T11:40:07+03:00","message":"Connection pool warmed"} +{"level":"error","error":"temporal truth feature flag required","tool":"temporal_truth","args":"{\"fact_id\":\"42\",\"project\":\"engram\"}","time":"2026-07-10T11:40:07+03:00","message":"Tool call failed"} +{"level":"error","error":"temporal truth provider not configured","tool":"temporal_truth","args":"{\"fact_id\":\"42\",\"project\":\"engram\"}","time":"2026-07-10T11:40:07+03:00","message":"Tool call failed"} +{"level":"error","error":"temporal truth feature flag required","tool":"temporal_truth_refresh","args":"{\"project\":\"engram\"}","time":"2026-07-10T11:40:07+03:00","message":"Tool call failed"} +{"level":"error","error":"temporal truth provider not configured","tool":"temporal_truth_refresh","args":"{\"project\":\"engram\"}","time":"2026-07-10T11:40:07+03:00","message":"Tool call failed"} +{"level":"error","error":"codebase_search requires ENGRAM_CODE_INTEL_ENABLED=true","tool":"codebase_search","args":"{\"query\":\"hello\",\"project\":\"test\"}","time":"2026-07-10T11:40:07+03:00","message":"Tool call failed"} +{"level":"error","error":"unknown tool: ","tool":"","args":"","time":"2026-07-10T11:40:07+03:00","message":"Tool call failed"} +{"level":"debug","method":"initialized","time":"2026-07-10T11:40:07+03:00","message":"MCP client initialized"} +{"level":"error","error":"unknown tool: no_such_tool","tool":"no_such_tool","args":"{}","time":"2026-07-10T11:40:07+03:00","message":"Tool call failed"} +{"level":"debug","method":"initialized","time":"2026-07-10T11:40:07+03:00","message":"MCP client initialized"} +{"level":"debug","connections":5,"time":"2026-07-10T11:40:07+03:00","message":"Connection pool warmed"} +{"level":"debug","connections":5,"time":"2026-07-10T11:40:07+03:00","message":"Connection pool warmed"} +FAIL +FAIL github.com/thebtf/engram/internal/mcp 4.890s +FAIL +test_exit=1 +active_sessions_before_terminate=0 +database_residue=0 +activity_residue=0 +finished_utc=2026-07-10T08:40:09.4600013Z diff --git a/.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/09-legacy-compat.log b/.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/09-legacy-compat.log new file mode 100644 index 00000000..e7a41b00 --- /dev/null +++ b/.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/09-legacy-compat.log @@ -0,0 +1,12 @@ +base_sha=68b2ce5835c7c6efdf1c68da9eedcb8d9c3837ef +head_sha=68b2ce5835c7c6efdf1c68da9eedcb8d9c3837ef +database=engram_mkr_bedge_legacy_compat_20260710a +command=go test -p=1 ./internal/db/gorm ./internal/mcp -run ^(TestCandidateStore_PromoteWithMemoryAndSnapshot_AmendFailureRollsBackPromotion|TestCandidateStore_PreserveWithMemoryAndSnapshot_RequiresCandidateReviewSnapshotBeforeMutation|TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites|TestCandidateStore_AllCandidateReviewSnapshotSeamsCommitExactlyOneAudit|TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs|TestBulkOps_PublicDispatchPreservesExactIntegralIDsBeforeNormalization|TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade|TestBulkOps_WiredFacadeReceivesExactNormalizedIDsAndStrictDryRun)$ -count=1 +started_utc=2026-07-10T08:41:07.6755830Z +ok github.com/thebtf/engram/internal/db/gorm 3.999s +ok github.com/thebtf/engram/internal/mcp 0.097s +test_exit=0 +active_sessions_before_terminate=0 +database_residue=0 +activity_residue=0 +finished_utc=2026-07-10T08:41:18.5962758Z diff --git a/.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/10-full-gorm.log b/.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/10-full-gorm.log new file mode 100644 index 00000000..90f96ca0 --- /dev/null +++ b/.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/10-full-gorm.log @@ -0,0 +1,350 @@ +base_sha=68b2ce5835c7c6efdf1c68da9eedcb8d9c3837ef +head_sha=68b2ce5835c7c6efdf1c68da9eedcb8d9c3837ef +database=engram_mkr_bedge_full_gorm_20260710a +command=go test -p=1 ./internal/db/gorm -count=1 +started_utc=2026-07-10T08:41:45.6843259Z +{"level":"warn","error":"ERROR: relation \"observation_vectors\" does not exist (SQLSTATE 42P01)","time":"2026-07-10T11:41:50+03:00","message":"migration 040: orphan vector cleanup failed (non-fatal)"} +{"level":"info","garbage_deleted":0,"orphan_vectors_deleted":0,"time":"2026-07-10T11:41:50+03:00","message":"migration 040: garbage cleanup complete"} +{"level":"info","orphan_vectors_deleted":0,"time":"2026-07-10T11:41:50+03:00","message":"migration 041: orphan vector purge complete"} +{"level":"info","patterns_deleted":0,"time":"2026-07-10T11:41:50+03:00","message":"migration 042: low-quality pattern purge complete"} +{"level":"info","total_deleted":0,"time":"2026-07-10T11:41:50+03:00","message":"migration 043: radical observation cleanup complete"} +{"level":"warn","error":"ERROR: extension \"vectorscale\" is not available (SQLSTATE 0A000)","time":"2026-07-10T11:41:51+03:00","message":"migration 109: vectorscale extension not available, skipping DiskANN index"} + +2026/07/10 11:41:54 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/candidate_store.go:151 ERROR: duplicate key value violates unique constraint "idx_candidates_fingerprint_pending" (SQLSTATE 23505) +[2.499ms] [rows:0] INSERT INTO "crystallization_candidates" ("created_at","updated_at","review_after","source_session_id","proposed_content","proposed_tier","proposed_epistemic_type","proposed_promotion_target","evidence_handles","privacy_scope","status","fingerprint","affected_projects","promoted_memory_id","confidence","recurrence_count") VALUES ('2026-07-10 11:41:54.142','2026-07-10 11:41:54.142','2026-07-17 08:41:54.141','session-fp-1783672914134907400','idempotent content','episodic','observation','rule','[]','project','pending','92aa3bf9b122ff1d','{}',NULL,0.5,1) RETURNING "id" + +2026/07/10 11:41:54 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/snapshot_store.go:379 ERROR: forced snapshot amend failure (SQLSTATE P0001) +[1.503ms] [rows:0] UPDATE "bulk_op_snapshots" SET "affected_memory_ids"='{3}',"before_state"='{"candidate:16":{"kind":"restore","before":{"id":16,"status":"pending","confidence":0.5,"created_at":"2026-07-10T11:41:54.951266+03:00","updated_at":"2026-07-10T11:41:54.951266+03:00","fingerprint":"79858fbcebf3d445","review_after":"2026-07-17T08:41:54.9502663Z","privacy_scope":"project","proposed_tier":"episodic","proposed_content":"content for snapshot amend rollback test","recurrence_count":1,"affected_projects":["test-project"],"source_session_id":"session-promote-snapshot-rollback-1783672914950266300","proposed_epistemic_type":"observation","proposed_promotion_target":"rule"}},"memory:3":{"kind":"delete"}}' WHERE snapshot_id = 'candidate-review-2c6f5f57-075c-441b-9009-1264d5f4d032' + +2026/07/10 11:41:55 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/audit_store.go:46 ERROR: forced candidate_review audit failure (SQLSTATE P0001) +[1.998ms] [rows:0] INSERT INTO "audit_log" ("memory_id","action","actor","source_session_id","before_state","after_state","reason") VALUES (NULL,'candidate_review','agent/fail','session-candidate-review-supersede-audit-rollback-1783672915557788000','{"created_at":"2026-07-10T11:41:55.558288+03:00","updated_at":"2026-07-10T11:41:55.558288+03:00","review_after":"2026-07-17T11:41:55.557788+03:00","source_session_id":"session-candidate-review-supersede-audit-rollback-1783672915557788000","proposed_content":"content for candidate review transaction test","proposed_tier":"episodic","proposed_epistemic_type":"observation","proposed_promotion_target":"rule","privacy_scope":"project","status":"pending","fingerprint":"2492a14019966cd8","affected_projects":["test-project"],"id":20,"confidence":0.5,"recurrence_count":1}','{"created_at":"2026-07-10T11:41:55.558288+03:00","updated_at":"2026-07-10T11:41:55.574789+03:00","review_after":"2026-07-17T11:41:55.557788+03:00","source_session_id":"session-candidate-review-supersede-audit-rollback-1783672915557788000","proposed_content":"content for candidate review transaction test","proposed_tier":"episodic","proposed_epistemic_type":"observation","proposed_promotion_target":"rule","privacy_scope":"project","status":"superseded","fingerprint":"2492a14019966cd8","affected_projects":["test-project"],"id":20,"confidence":0.5,"recurrence_count":1}','candidate 20 review action supersede') RETURNING "id","created_at" +{"level":"debug","connections":2,"time":"2026-07-10T11:42:00+03:00","message":"Connection pool warmed"} +{"level":"debug","connections":2,"time":"2026-07-10T11:42:00+03:00","message":"Connection pool warmed"} +{"level":"debug","connections":2,"time":"2026-07-10T11:42:00+03:00","message":"Connection pool warmed"} +{"level":"debug","connections":2,"time":"2026-07-10T11:42:01+03:00","message":"Connection pool warmed"} +{"level":"debug","connections":2,"time":"2026-07-10T11:42:01+03:00","message":"Connection pool warmed"} +{"level":"info","time":"2026-07-10T11:42:01+03:00","message":"Starting database optimization"} +{"level":"info","duration":240.1342,"time":"2026-07-10T11:42:01+03:00","message":"Database optimization complete"} +{"level":"debug","connections":2,"time":"2026-07-10T11:42:01+03:00","message":"Connection pool warmed"} +{"level":"debug","connections":2,"time":"2026-07-10T11:42:01+03:00","message":"Connection pool warmed"} +{"level":"debug","connections":2,"time":"2026-07-10T11:42:02+03:00","message":"Connection pool warmed"} +{"level":"debug","connections":2,"time":"2026-07-10T11:42:02+03:00","message":"Connection pool warmed"} +{"level":"debug","connections":2,"time":"2026-07-10T11:42:02+03:00","message":"Connection pool warmed"} +{"level":"debug","connections":2,"time":"2026-07-10T11:42:02+03:00","message":"Connection pool warmed"} +{"level":"debug","connections":2,"time":"2026-07-10T11:42:03+03:00","message":"Connection pool warmed"} + +2026/07/10 11:42:14 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/migrations_integration_test.go:214 ERROR: new row for relation "memories" violates check constraint "memories_privacy_scope_chk" (SQLSTATE 23514) +[2.000ms] [rows:0] INSERT INTO memories (project, content, privacy_scope) VALUES ('t001-test', 'T001 invalid fixture', 'invalid_scope') + +2026/07/10 11:42:14 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/migrations_integration_test.go:175 sql: database is closed +[0.000ms] [rows:0] DELETE FROM memories WHERE project = 't001-test' + +2026/07/10 11:42:15 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/migrations_integration_test.go:260 sql: database is closed +[0.000ms] [rows:0] DELETE FROM memories WHERE project = 't006-backfill-test' + +2026/07/10 11:42:15 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/migrations_integration_test.go:379 sql: database is closed +[0.000ms] [rows:0] DELETE FROM memories WHERE project = 't001b-test' + +2026/07/10 11:42:15 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/migrations_integration_test.go:479 ERROR: new row for relation "knowledge_nodes" violates check constraint "knowledge_nodes_type_chk" (SQLSTATE 23514) +[1.999ms] [rows:0] INSERT INTO knowledge_nodes (node_type, external_ref, project) VALUES ('invalid_node_type', 'ref-invalid', 't009-test') + +2026/07/10 11:42:15 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/migrations_integration_test.go:490 ERROR: duplicate key value violates unique constraint "idx_knowledge_nodes_type_ref_active" (SQLSTATE 23505) +[2.067ms] [rows:0] INSERT INTO knowledge_nodes (node_type, external_ref, project) VALUES ('skill', 'unique-test-skill', 't009-test') + +2026/07/10 11:42:15 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/migrations_integration_test.go:444 sql: database is closed +[0.000ms] [rows:0] DELETE FROM knowledge_nodes WHERE project = 't009-test' + +2026/07/10 11:42:16 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/migrations_integration_test.go:573 sql: database is closed +[0.000ms] [rows:0] DELETE FROM memories WHERE project = 't010-test' + +2026/07/10 11:42:16 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/migrations_integration_test.go:574 sql: database is closed +[0.000ms] [rows:0] DELETE FROM knowledge_edges WHERE source_session_id = 't010-test' + +2026/07/10 11:42:16 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/migrations_integration_test.go:531 sql: database is closed +[0.000ms] [rows:0] DELETE FROM knowledge_nodes WHERE project = 't010-test' + +2026/07/10 11:42:16 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/migrations_integration_test.go:695 ERROR: new row for relation "crystallization_candidates" violates check constraint "crystallization_candidates_status_check" (SQLSTATE 23514) +[1.000ms] [rows:0] + INSERT INTO crystallization_candidates (proposed_content, status) + VALUES ('test', 'invalid_status') + + +2026/07/10 11:42:16 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/migrations_integration_test.go:823 ERROR: new row for relation "bulk_op_snapshots" violates check constraint "bulk_op_snapshots_op_type_check" (SQLSTATE 23514) +[1.500ms] [rows:0] + INSERT INTO bulk_op_snapshots (snapshot_id, op_type, actor, before_state) + VALUES ('test-snap-invalid', 'invalid_op', 'test-actor', '{}') + + +2026/07/10 11:42:16 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/migrations_integration_test.go:780 sql: database is closed +[0.000ms] [rows:0] DELETE FROM bulk_op_snapshots WHERE snapshot_id LIKE 'test-snap-%' + +2026/07/10 11:42:16 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/migrations_integration_test.go:884 ERROR: new row for relation "bulk_op_snapshots" violates check constraint "bulk_op_snapshots_op_type_check" (SQLSTATE 23514) +[1.498ms] [rows:0] + INSERT INTO bulk_op_snapshots (snapshot_id, op_type, actor, before_state) + VALUES ('test-m153-candidate-review-1783672936760114000-invalid', 'invalid_op_after_blocked_rollback', 'test-actor', '{}') + + +2026/07/10 11:42:16 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/migrations_integration_test.go:873 sql: database is closed +[0.000ms] [rows:0] DELETE FROM bulk_op_snapshots WHERE snapshot_id IN ('test-m153-candidate-review-1783672936760114000', 'test-m153-candidate-review-1783672936760114000-invalid') + +2026/07/10 11:42:16 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/migrations_integration_test.go:921 ERROR: new row for relation "bulk_op_snapshots" violates check constraint "bulk_op_snapshots_op_type_check" (SQLSTATE 23514) +[2.000ms] [rows:0] + INSERT INTO bulk_op_snapshots (snapshot_id, op_type, actor, before_state) + VALUES ('test-m154-forgetting-review-1783672936880114000-invalid', 'invalid_op_after_blocked_forgetting_rollback', 'test-actor', '{}') + + +2026/07/10 11:42:16 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/migrations_integration_test.go:910 sql: database is closed +[0.000ms] [rows:0] DELETE FROM bulk_op_snapshots WHERE snapshot_id IN ('test-m154-forgetting-review-1783672936880114000', 'test-m154-forgetting-review-1783672936880114000-invalid') + +2026/07/10 11:42:17 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/migrations_integration_test.go:947 sql: database is closed +[0.000ms] [rows:0] DELETE FROM rule_governance_snapshots WHERE snapshot_id = 'test-rg-snap-1783672937010112900' + +2026/07/10 11:42:17 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/migrations_integration_test.go:1034 ERROR: new row for relation "api_tokens" violates check constraint "api_tokens_principal_kind_chk" (SQLSTATE 23514) +[1.501ms] [rows:0] + INSERT INTO api_tokens (name, token_hash, token_prefix, scope, principal, principal_kind) + VALUES ('test-principal-1783672937148151300-invalid', 'hash-invalid', 'p148bad0', 'read-write', 'principal/bad', 'daemon') + + +2026/07/10 11:42:17 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/migrations_integration_test.go:981 sql: database is closed +[0.000ms] [rows:0] DELETE FROM api_tokens WHERE name LIKE 'test-principal-1783672937148151300%' + +2026/07/10 11:42:19 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/rule_governance_store.go:323 record not found +[2.500ms] [rows:0] SELECT * FROM "rule_candidates" WHERE fingerprint = 'rg0-arbiter-annotation-1783672939329077800' AND status IN ('pending','drafted') ORDER BY created_at ASC,"rule_candidates"."id" LIMIT 1 + +2026/07/10 11:42:19 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/rule_governance_store.go:323 record not found +[2.499ms] [rows:0] SELECT * FROM "rule_candidates" WHERE fingerprint = 'rg0-arbiter-terminal-run-1783672939492578700' AND status IN ('pending','drafted') ORDER BY created_at ASC,"rule_candidates"."id" LIMIT 1 + +2026/07/10 11:42:19 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/rule_governance_store.go:323 record not found +[2.001ms] [rows:0] SELECT * FROM "rule_candidates" WHERE fingerprint = 'rg0-arbiter-annotation-mismatch-1783672939644077300' AND status IN ('pending','drafted') ORDER BY created_at ASC,"rule_candidates"."id" LIMIT 1 + +2026/07/10 11:42:19 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/rule_governance_store.go:323 record not found +[1.001ms] [rows:0] SELECT * FROM "rule_candidates" WHERE fingerprint = 'rg0-arbiter-annotation-other-1783672939652577300' AND status IN ('pending','drafted') ORDER BY created_at ASC,"rule_candidates"."id" LIMIT 1 + +2026/07/10 11:42:19 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/rule_governance_store.go:627 record not found +[2.000ms] [rows:0] SELECT * FROM "rule_arbiter_evaluations" WHERE id = 2 AND candidate_id = 3 AND run_id = 3 AND action = 'hold' ORDER BY "rule_arbiter_evaluations"."id" LIMIT 1 + +2026/07/10 11:42:19 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/rule_governance_store.go:323 record not found +[1.999ms] [rows:0] SELECT * FROM "rule_candidates" WHERE fingerprint = 'rg0-arbiter-requeue-1783672939801586900' AND status IN ('pending','drafted') ORDER BY created_at ASC,"rule_candidates"."id" LIMIT 1 +--- FAIL: TestRuleGovernanceStore_AnnotatedCandidateWaitsUntilReviewAfter (0.19s) + rule_arbiter_store_test.go:195: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/rule_arbiter_store_test.go:195 + Error: []int64{1} does not contain 5 + Test: TestRuleGovernanceStore_AnnotatedCandidateWaitsUntilReviewAfter + +2026/07/10 11:42:20 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/rule_governance_store.go:323 record not found +[2.001ms] [rows:0] SELECT * FROM "rule_candidates" WHERE fingerprint = 'rg0-arbiter-claim-race-1783672939998588000' AND status IN ('pending','drafted') ORDER BY created_at ASC,"rule_candidates"."id" LIMIT 1 + +2026/07/10 11:42:20 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/rule_governance_store.go:323 record not found +[2.498ms] [rows:0] SELECT * FROM "rule_candidates" WHERE fingerprint = 'rg0-arbiter-confidence-1783672940172127300' AND status IN ('pending','drafted') ORDER BY created_at ASC,"rule_candidates"."id" LIMIT 1 + +2026/07/10 11:42:20 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/rule_governance_store.go:323 record not found +[2.010ms] [rows:0] SELECT * FROM "rule_candidates" WHERE fingerprint = 'rg0-rg3-health-1783672940331717600-pending-1783672940331717600' AND status IN ('pending','drafted') ORDER BY created_at ASC,"rule_candidates"."id" LIMIT 1 + +2026/07/10 11:42:20 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/rule_governance_store.go:323 record not found +[1.000ms] [rows:0] SELECT * FROM "rule_candidates" WHERE fingerprint = 'rg0-rg3-health-1783672940331717600-rejected-1783672940339722100' AND status IN ('pending','drafted') ORDER BY created_at ASC,"rule_candidates"."id" LIMIT 1 +--- FAIL: TestRuleGovernanceStore_GetLifecycleHealthAggregatesGovernanceTables (0.23s) + rule_governance_rg3_store_test.go:93: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/rule_governance_rg3_store_test.go:93 + Error: Not equal: + expected: 1 + actual : 5 + Test: TestRuleGovernanceStore_GetLifecycleHealthAggregatesGovernanceTables +--- FAIL: TestRuleGovernanceStore_GetLifecycleHealthOmitsGlobalArbiterRunsForProjectScopedReads (0.19s) + rule_governance_rg3_store_test.go:128: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/rule_governance_rg3_store_test.go:128 + Error: Not equal: + expected: 1 + actual : 6 + Test: TestRuleGovernanceStore_GetLifecycleHealthOmitsGlobalArbiterRunsForProjectScopedReads + +2026/07/10 11:42:20 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/rule_governance_store.go:323 record not found +[2.990ms] [rows:0] SELECT * FROM "rule_candidates" WHERE fingerprint = 'rg0-rg3-queue-1783672940754285600-global-1783672940754285600' AND status IN ('pending','drafted') ORDER BY created_at ASC,"rule_candidates"."id" LIMIT 1 + +2026/07/10 11:42:20 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/rule_governance_store.go:323 record not found +[1.501ms] [rows:0] SELECT * FROM "rule_candidates" WHERE fingerprint = 'rg0-rg3-queue-1783672940754285600-conflict-1783672940764775200' AND status IN ('pending','drafted') ORDER BY created_at ASC,"rule_candidates"."id" LIMIT 1 + +2026/07/10 11:42:20 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/rule_governance_store.go:323 record not found +[1.000ms] [rows:0] SELECT * FROM "rule_candidates" WHERE fingerprint = 'rg0-rg3-queue-1783672940754285600-hold-1783672940771775700' AND status IN ('pending','drafted') ORDER BY created_at ASC,"rule_candidates"."id" LIMIT 1 + +2026/07/10 11:42:20 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/rule_governance_store.go:323 record not found +[1.001ms] [rows:0] SELECT * FROM "rule_candidates" WHERE fingerprint = 'rg0-rg3-queue-1783672940754285600-unclear-1783672940778880900' AND status IN ('pending','drafted') ORDER BY created_at ASC,"rule_candidates"."id" LIMIT 1 + +2026/07/10 11:42:20 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/rule_governance_store.go:323 record not found +[2.004ms] [rows:0] SELECT * FROM "rule_candidates" WHERE fingerprint = 'rg0-rg3-queue-filter-1783672940961047500-live-conflict-1783672940961047500' AND status IN ('pending','drafted') ORDER BY created_at ASC,"rule_candidates"."id" LIMIT 1 + +2026/07/10 11:42:20 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/rule_governance_store.go:323 record not found +[1.500ms] [rows:0] SELECT * FROM "rule_candidates" WHERE fingerprint = 'rg0-rg3-queue-filter-1783672940961047500-resolved-conflict-1783672940970047200' AND status IN ('pending','drafted') ORDER BY created_at ASC,"rule_candidates"."id" LIMIT 1 + +2026/07/10 11:42:20 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/rule_governance_store.go:323 record not found +[1.999ms] [rows:0] SELECT * FROM "rule_candidates" WHERE fingerprint = 'rg0-rg3-queue-filter-1783672940961047500-noise-0-1783672940988546900' AND status IN ('pending','drafted') ORDER BY created_at ASC,"rule_candidates"."id" LIMIT 1 + +2026/07/10 11:42:20 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/rule_governance_store.go:323 record not found +[1.001ms] [rows:0] SELECT * FROM "rule_candidates" WHERE fingerprint = 'rg0-rg3-queue-filter-1783672940961047500-noise-1-1783672940996547100' AND status IN ('pending','drafted') ORDER BY created_at ASC,"rule_candidates"."id" LIMIT 1 + +2026/07/10 11:42:21 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/rule_governance_store.go:323 record not found +[1.000ms] [rows:0] SELECT * FROM "rule_candidates" WHERE fingerprint = 'rg0-rg3-queue-filter-1783672940961047500-noise-2-1783672941003045700' AND status IN ('pending','drafted') ORDER BY created_at ASC,"rule_candidates"."id" LIMIT 1 + +2026/07/10 11:42:22 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/migration_rule_governance.go:196 ERROR: cannot drop table rule_versions because other objects depend on it (SQLSTATE 2BP01) +[2.001ms] [rows:0] DROP TABLE IF EXISTS rule_versions +--- FAIL: TestMigration144_RuleGovernanceRollbackAndReapply (0.26s) + rule_governance_store_test.go:32: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/rule_governance_store_test.go:32 + Error: Received unexpected error: + ERROR: cannot drop table rule_versions because other objects depend on it (SQLSTATE 2BP01) + Test: TestMigration144_RuleGovernanceRollbackAndReapply + +2026/07/10 11:42:22 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/migration_rule_governance.go:196 ERROR: cannot drop table rule_versions because other objects depend on it (SQLSTATE 2BP01) +[1.500ms] [rows:0] DROP TABLE IF EXISTS rule_versions +--- FAIL: TestMigration144_RuleGovernanceEscapeConstraints (0.18s) + rule_governance_store_test.go:45: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/rule_governance_store_test.go:45 + Error: Received unexpected error: + ERROR: cannot drop table rule_versions because other objects depend on it (SQLSTATE 2BP01) + Test: TestMigration144_RuleGovernanceEscapeConstraints + +2026/07/10 11:42:22 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/rule_governance_store.go:323 record not found +[2.502ms] [rows:0] SELECT * FROM "rule_candidates" WHERE fingerprint = 'rg0-idempotent-fingerprint' AND status IN ('pending','drafted') ORDER BY created_at ASC,"rule_candidates"."id" LIMIT 1 + +2026/07/10 11:42:23 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/rule_governance_store.go:323 record not found +[2.497ms] [rows:0] SELECT * FROM "rule_candidates" WHERE fingerprint = 'rg0-draft-fingerprint' AND status IN ('pending','drafted') ORDER BY created_at ASC,"rule_candidates"."id" LIMIT 1 + +2026/07/10 11:42:23 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/rule_governance_store.go:1625 record not found +[2.998ms] [rows:0] SELECT * FROM "rule_versions" WHERE source_candidate_id = 21 ORDER BY "rule_versions"."id" LIMIT 1 + +2026/07/10 11:42:23 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/rule_governance_store.go:323 record not found +[2.499ms] [rows:0] SELECT * FROM "rule_candidates" WHERE fingerprint = 'rg0-unknown-actor-kind-1783672943588979900' AND status IN ('pending','drafted') ORDER BY created_at ASC,"rule_candidates"."id" LIMIT 1 + +2026/07/10 11:42:23 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/rule_governance_store.go:1625 record not found +[2.500ms] [rows:0] SELECT * FROM "rule_versions" WHERE source_candidate_id = 22 ORDER BY "rule_versions"."id" LIMIT 1 + +2026/07/10 11:42:23 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/rule_governance_store.go:323 record not found +[2.499ms] [rows:0] SELECT * FROM "rule_candidates" WHERE fingerprint = 'rg0-blank-transition-actor-1783672943739604400' AND status IN ('pending','drafted') ORDER BY created_at ASC,"rule_candidates"."id" LIMIT 1 + +2026/07/10 11:42:23 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/rule_governance_store.go:1625 record not found +[2.002ms] [rows:0] SELECT * FROM "rule_versions" WHERE source_candidate_id = 23 ORDER BY "rule_versions"."id" LIMIT 1 + +2026/07/10 11:42:23 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/rule_governance_store.go:323 record not found +[0.499ms] [rows:0] SELECT * FROM "rule_candidates" WHERE fingerprint = 'rg0-blank-transition-actor kind-1783672943756105100' AND status IN ('pending','drafted') ORDER BY created_at ASC,"rule_candidates"."id" LIMIT 1 + +2026/07/10 11:42:23 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/rule_governance_store.go:1625 record not found +[0.998ms] [rows:0] SELECT * FROM "rule_versions" WHERE source_candidate_id = 24 ORDER BY "rule_versions"."id" LIMIT 1 + +2026/07/10 11:42:23 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/rule_governance_store.go:323 record not found +[1.002ms] [rows:0] SELECT * FROM "rule_candidates" WHERE fingerprint = 'rg0-blank-transition-reason-1783672943765104000' AND status IN ('pending','drafted') ORDER BY created_at ASC,"rule_candidates"."id" LIMIT 1 + +2026/07/10 11:42:23 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/rule_governance_store.go:1625 record not found +[1.198ms] [rows:0] SELECT * FROM "rule_versions" WHERE source_candidate_id = 25 ORDER BY "rule_versions"."id" LIMIT 1 + +2026/07/10 11:42:23 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/rule_governance_store.go:323 record not found +[1.001ms] [rows:0] SELECT * FROM "rule_candidates" WHERE fingerprint = 'rg0-blank-transition-evidence handle-1783672943773818000' AND status IN ('pending','drafted') ORDER BY created_at ASC,"rule_candidates"."id" LIMIT 1 + +2026/07/10 11:42:23 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/rule_governance_store.go:1625 record not found +[0.998ms] [rows:0] SELECT * FROM "rule_versions" WHERE source_candidate_id = 26 ORDER BY "rule_versions"."id" LIMIT 1 + +2026/07/10 11:42:23 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/rule_governance_store.go:323 record not found +[2.501ms] [rows:0] SELECT * FROM "rule_candidates" WHERE fingerprint = 'rg0-snapshot-required-1783672943903827200' AND status IN ('pending','drafted') ORDER BY created_at ASC,"rule_candidates"."id" LIMIT 1 + +2026/07/10 11:42:23 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/rule_governance_store.go:1625 record not found +[2.002ms] [rows:0] SELECT * FROM "rule_versions" WHERE source_candidate_id = 27 ORDER BY "rule_versions"."id" LIMIT 1 + +2026/07/10 11:42:24 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/rule_governance_store.go:323 record not found +[3.000ms] [rows:0] SELECT * FROM "rule_candidates" WHERE fingerprint = 'rg0-snapshot-log-1783672944122893200' AND status IN ('pending','drafted') ORDER BY created_at ASC,"rule_candidates"."id" LIMIT 1 + +2026/07/10 11:42:24 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/rule_governance_store.go:1625 record not found +[2.502ms] [rows:0] SELECT * FROM "rule_versions" WHERE source_candidate_id = 28 ORDER BY "rule_versions"."id" LIMIT 1 + +2026/07/10 11:42:24 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/rule_governance_store.go:323 record not found +[3.001ms] [rows:0] SELECT * FROM "rule_candidates" WHERE fingerprint = 'rg0-authority-1783672944498030600' AND status IN ('pending','drafted') ORDER BY created_at ASC,"rule_candidates"."id" LIMIT 1 + +2026/07/10 11:42:24 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/rule_governance_store.go:1625 record not found +[4.000ms] [rows:0] SELECT * FROM "rule_versions" WHERE source_candidate_id = 29 ORDER BY "rule_versions"."id" LIMIT 1 + +2026/07/10 11:42:24 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/rule_governance_store.go:323 record not found +[3.001ms] [rows:0] SELECT * FROM "rule_candidates" WHERE fingerprint = 'rg0-log-rollback-1783672944720574300' AND status IN ('pending','drafted') ORDER BY created_at ASC,"rule_candidates"."id" LIMIT 1 + +2026/07/10 11:42:24 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/rule_governance_store.go:1625 record not found +[1.502ms] [rows:0] SELECT * FROM "rule_versions" WHERE source_candidate_id = 30 ORDER BY "rule_versions"."id" LIMIT 1 + +2026/07/10 11:42:24 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/rule_governance_store.go:1664 ERROR: new row for relation "rule_transition_log" violates check constraint "rg0_transition_log_fail_test" (SQLSTATE 23514) +[0.998ms] [rows:0] INSERT INTO "rule_transition_log" ("created_at","rule_version_id","candidate_id","actor","actor_kind","action","from_state","to_state","reason","evidence_handles_json","snapshot_id") VALUES ('2026-07-10 11:42:24.766',22,30,'codex','agent','rule_version_transition','shadow','canary','force-log-fail','["evidence:rg0-transition"]','') RETURNING "id" + +2026/07/10 11:42:24 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/rule_governance_store.go:323 record not found +[2.499ms] [rows:0] SELECT * FROM "rule_candidates" WHERE fingerprint = 'rg0-snapshot-rollback-1783672944893625600' AND status IN ('pending','drafted') ORDER BY created_at ASC,"rule_candidates"."id" LIMIT 1 + +2026/07/10 11:42:24 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/rule_governance_store.go:1625 record not found +[1.996ms] [rows:0] SELECT * FROM "rule_versions" WHERE source_candidate_id = 31 ORDER BY "rule_versions"."id" LIMIT 1 + +2026/07/10 11:42:24 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/rule_governance_store.go:1692 ERROR: duplicate key value violates unique constraint "rule_governance_snapshots_snapshot_id_key" (SQLSTATE 23505) +[1.000ms] [rows:0] INSERT INTO "rule_governance_snapshots" ("created_at","rolled_back_at","snapshot_id","op_type","actor","before_state_json","after_state_json","status","pinned") VALUES ('2026-07-10 11:42:24.948',NULL,'rg0-duplicate-1783672944940640100','rule_transition','codex','{"project":"rg0-project","rule_versions":[{"state":"canary","id":23}]}','{"project":"rg0-project","rule_versions":[{"state":"active_project","id":23}]}','committed',false) RETURNING "id" + +2026/07/10 11:42:25 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/migration_rule_governance.go:196 ERROR: cannot drop table rule_versions because other objects depend on it (SQLSTATE 2BP01) +[2.499ms] [rows:0] DROP TABLE IF EXISTS rule_versions +--- FAIL: TestMigration144_RuleGovernanceSnapshotStatusesAcceptExtendedStates (0.22s) + rule_governance_store_test.go:729: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/rule_governance_store_test.go:729 + Error: Received unexpected error: + ERROR: cannot drop table rule_versions because other objects depend on it (SQLSTATE 2BP01) + Test: TestMigration144_RuleGovernanceSnapshotStatusesAcceptExtendedStates + +2026/07/10 11:42:25 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/rule_injection_event_store_test.go:32 ERROR: new row for relation "rule_injection_events" violates check constraint "rule_injection_events_type_chk" (SQLSTATE 23514) +[2.501ms] [rows:0] + INSERT INTO rule_injection_events (session_id, project, surface, event_type) + VALUES ('rg2-invalid-session', 'rg2-project', 'session-start', 'invalid_event') + + +2026/07/10 11:42:31 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/state_store_test.go:232 record not found +[2.503ms] [rows:0] SELECT * FROM "audit_log" WHERE action = 'read_resume_state' AND actor = 'agent:developer' AND source_session_id = 'state-audit-resume-1783672951131012000' ORDER BY id DESC,"audit_log"."id" LIMIT 1 + +2026/07/10 11:42:31 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/state_store.go:216 record not found +[1.999ms] [rows:0] SELECT * FROM "agent_project_state" WHERE project = 'state-resume-project-scope-missing-1783672951948619700' ORDER BY "agent_project_state"."id" LIMIT 1 +{"level":"debug","connections":5,"time":"2026-07-10T11:42:32+03:00","message":"Connection pool warmed"} +{"level":"debug","connections":5,"time":"2026-07-10T11:42:32+03:00","message":"Connection pool warmed"} +{"level":"debug","connections":5,"time":"2026-07-10T11:42:32+03:00","message":"Connection pool warmed"} +{"level":"debug","connections":5,"time":"2026-07-10T11:42:32+03:00","message":"Connection pool warmed"} +{"level":"debug","connections":5,"time":"2026-07-10T11:42:32+03:00","message":"Connection pool warmed"} +{"level":"debug","connections":5,"time":"2026-07-10T11:42:32+03:00","message":"Connection pool warmed"} +{"level":"debug","connections":5,"time":"2026-07-10T11:42:32+03:00","message":"Connection pool warmed"} +{"level":"debug","connections":5,"time":"2026-07-10T11:42:33+03:00","message":"Connection pool warmed"} +{"level":"debug","connections":5,"time":"2026-07-10T11:42:33+03:00","message":"Connection pool warmed"} +{"level":"debug","connections":5,"time":"2026-07-10T11:42:33+03:00","message":"Connection pool warmed"} +{"level":"debug","connections":5,"time":"2026-07-10T11:42:33+03:00","message":"Connection pool warmed"} +{"level":"debug","connections":5,"time":"2026-07-10T11:42:33+03:00","message":"Connection pool warmed"} +{"level":"info","time":"2026-07-10T11:42:33+03:00","message":"Starting database optimization"} +{"level":"info","duration":194.516,"time":"2026-07-10T11:42:33+03:00","message":"Database optimization complete"} + +2026/07/10 11:42:34 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/candidate_store_test.go:29 +[error] failed to initialize database, got error failed to connect to `user=engram database=engram_mkr_bedge_full_gorm_20260710a`: 127.0.0.1:55432 (127.0.0.1): server error: FATAL: sorry, too many clients already (SQLSTATE 53300) +--- FAIL: TestTemporalTruthStore_LoadSelectedRecordsUsesDBNowForValidFrom (0.00s) + temporal_truth_store_test.go:377: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/candidate_store_test.go:30 + D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/temporal_truth_store_test.go:377 + Error: Received unexpected error: + failed to connect to `user=engram database=engram_mkr_bedge_full_gorm_20260710a`: 127.0.0.1:55432 (127.0.0.1): server error: FATAL: sorry, too many clients already (SQLSTATE 53300) + Test: TestTemporalTruthStore_LoadSelectedRecordsUsesDBNowForValidFrom + Messages: open test DB +--- FAIL: TestTokenStore_CreateWithPrincipalRoundTrip (0.00s) + token_store_test.go:14: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/credential_store_test.go:29 + D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/token_store_test.go:14 + Error: Received unexpected error: + failed to connect to `user=engram database=engram_mkr_bedge_full_gorm_20260710a`: 127.0.0.1:55432 (127.0.0.1): server error: FATAL: sorry, too many clients already (SQLSTATE 53300) + Test: TestTokenStore_CreateWithPrincipalRoundTrip + Messages: open test db +--- FAIL: TestTokenStore_CreateWithPrincipalRejectsKindWithoutPrincipal (0.00s) + token_store_test.go:51: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/credential_store_test.go:29 + D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/token_store_test.go:51 + Error: Received unexpected error: + failed to connect to `user=engram database=engram_mkr_bedge_full_gorm_20260710a`: 127.0.0.1:55432 (127.0.0.1): server error: FATAL: sorry, too many clients already (SQLSTATE 53300) + Test: TestTokenStore_CreateWithPrincipalRejectsKindWithoutPrincipal + Messages: open test db +--- FAIL: TestTranscriptStore_Lifecycle (0.00s) + transcript_store_test.go:64: open test db: failed to connect to `user=engram database=engram_mkr_bedge_full_gorm_20260710a`: 127.0.0.1:55432 (127.0.0.1): server error: FATAL: sorry, too many clients already (SQLSTATE 53300) +FAIL +FAIL github.com/thebtf/engram/internal/db/gorm 45.434s +FAIL +test_exit=1 +active_sessions_before_terminate=0 +database_residue=0 +activity_residue=0 +finished_utc=2026-07-10T08:42:36.0281251Z diff --git a/.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/11-full-mcp.log b/.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/11-full-mcp.log new file mode 100644 index 00000000..f9db0c62 --- /dev/null +++ b/.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/11-full-mcp.log @@ -0,0 +1,81 @@ +base_sha=68b2ce5835c7c6efdf1c68da9eedcb8d9c3837ef +head_sha=68b2ce5835c7c6efdf1c68da9eedcb8d9c3837ef +database=engram_mkr_bedge_full_mcp_20260710a +command=go test -p=1 ./internal/mcp -count=1 +started_utc=2026-07-10T08:43:02.7657603Z +{"level":"warn","error":"ERROR: relation \"observation_vectors\" does not exist (SQLSTATE 42P01)","time":"2026-07-10T11:43:05+03:00","message":"migration 040: orphan vector cleanup failed (non-fatal)"} +{"level":"info","garbage_deleted":0,"orphan_vectors_deleted":0,"time":"2026-07-10T11:43:05+03:00","message":"migration 040: garbage cleanup complete"} +{"level":"info","orphan_vectors_deleted":0,"time":"2026-07-10T11:43:05+03:00","message":"migration 041: orphan vector purge complete"} +{"level":"info","patterns_deleted":0,"time":"2026-07-10T11:43:05+03:00","message":"migration 042: low-quality pattern purge complete"} +{"level":"info","total_deleted":0,"time":"2026-07-10T11:43:05+03:00","message":"migration 043: radical observation cleanup complete"} +{"level":"warn","error":"ERROR: extension \"vectorscale\" is not available (SQLSTATE 0A000)","time":"2026-07-10T11:43:07+03:00","message":"migration 109: vectorscale extension not available, skipping DiskANN index"} +{"level":"debug","connections":1,"time":"2026-07-10T11:43:08+03:00","message":"Connection pool warmed"} +{"level":"debug","connections":1,"time":"2026-07-10T11:43:08+03:00","message":"Connection pool warmed"} +{"level":"debug","connections":1,"time":"2026-07-10T11:43:08+03:00","message":"Connection pool warmed"} +--- FAIL: TestHybridTG3_ConfidenceMin_FloorEnforced_T022 (0.13s) + integration_tg3_hybrid_test.go:83: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/integration_tg3_hybrid_test.go:83 + Error: Received unexpected error: + json: cannot unmarshal array into Go value of type map[string]interface {} + Test: TestHybridTG3_ConfidenceMin_FloorEnforced_T022 + Messages: response must be valid JSON +{"level":"debug","connections":1,"time":"2026-07-10T11:43:08+03:00","message":"Connection pool warmed"} +{"level":"debug","connections":1,"time":"2026-07-10T11:43:08+03:00","message":"Connection pool warmed"} +{"level":"debug","connections":1,"time":"2026-07-10T11:43:09+03:00","message":"Connection pool warmed"} +{"level":"debug","connections":1,"time":"2026-07-10T11:43:09+03:00","message":"Connection pool warmed"} +{"level":"debug","connections":1,"time":"2026-07-10T11:43:09+03:00","message":"Connection pool warmed"} +{"level":"debug","connections":1,"time":"2026-07-10T11:43:09+03:00","message":"Connection pool warmed"} +{"level":"debug","connections":1,"time":"2026-07-10T11:43:09+03:00","message":"Connection pool warmed"} +{"level":"debug","connections":5,"time":"2026-07-10T11:43:09+03:00","message":"Connection pool warmed"} +{"level":"debug","connections":5,"time":"2026-07-10T11:43:09+03:00","message":"Connection pool warmed"} +{"level":"debug","connections":1,"time":"2026-07-10T11:43:09+03:00","message":"Connection pool warmed"} +--- FAIL: TestEC_F1_TagDerivedBackfill_T007 (0.13s) + store_memory_compat_t007_test.go:157: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/store_memory_compat_t007_test.go:157 + Error: Should be true + Test: TestEC_F1_TagDerivedBackfill_T007 + Messages: global-scoped row must be returned by MemoryStore.List within its own project +{"level":"debug","connections":1,"time":"2026-07-10T11:43:09+03:00","message":"Connection pool warmed"} +{"level":"debug","connections":1,"time":"2026-07-10T11:43:10+03:00","message":"Connection pool warmed"} +{"level":"debug","connections":1,"time":"2026-07-10T11:43:10+03:00","message":"Connection pool warmed"} +{"level":"debug","connections":1,"time":"2026-07-10T11:43:10+03:00","message":"Connection pool warmed"} +{"level":"debug","connections":1,"time":"2026-07-10T11:43:10+03:00","message":"Connection pool warmed"} +{"level":"debug","connections":5,"time":"2026-07-10T11:43:10+03:00","message":"Connection pool warmed"} +{"level":"debug","connections":5,"time":"2026-07-10T11:43:10+03:00","message":"Connection pool warmed"} +{"level":"debug","connections":5,"time":"2026-07-10T11:43:10+03:00","message":"Connection pool warmed"} +{"level":"debug","connections":1,"time":"2026-07-10T11:43:11+03:00","message":"Connection pool warmed"} +{"level":"debug","connections":1,"time":"2026-07-10T11:43:11+03:00","message":"Connection pool warmed"} +{"level":"debug","connections":1,"time":"2026-07-10T11:43:11+03:00","message":"Connection pool warmed"} +{"level":"debug","connections":1,"time":"2026-07-10T11:43:11+03:00","message":"Connection pool warmed"} +{"level":"debug","soft_limit":1000,"time":"2026-07-10T11:43:11+03:00","message":"edit_memory: content truncated to soft limit"} +{"level":"warn","time":"2026-07-10T11:43:11+03:00","message":"edit_memory: content contains secrets — redacting before storage"} +{"level":"error","audit_label":"test-panic","memory_id":99,"panic":"simulated audit panic","time":"2026-07-10T11:43:11+03:00","message":"audit: goroutine panic recovered"} +{"level":"error","error":"simulated db error","audit_label":"test-error","memory_id":88,"time":"2026-07-10T11:43:11+03:00","message":"audit: async write failed"} +{"level":"debug","connections":1,"time":"2026-07-10T11:43:11+03:00","message":"Connection pool warmed"} +{"level":"debug","connections":1,"time":"2026-07-10T11:43:11+03:00","message":"Connection pool warmed"} +{"level":"debug","connections":1,"time":"2026-07-10T11:43:12+03:00","message":"Connection pool warmed"} +{"level":"debug","connections":1,"time":"2026-07-10T11:43:12+03:00","message":"Connection pool warmed"} +{"level":"debug","connections":1,"time":"2026-07-10T11:43:12+03:00","message":"Connection pool warmed"} +{"level":"debug","connections":1,"time":"2026-07-10T11:43:12+03:00","message":"Connection pool warmed"} +{"level":"debug","connections":1,"time":"2026-07-10T11:43:12+03:00","message":"Connection pool warmed"} +{"level":"debug","connections":1,"time":"2026-07-10T11:43:12+03:00","message":"Connection pool warmed"} +{"level":"debug","connections":1,"time":"2026-07-10T11:43:12+03:00","message":"Connection pool warmed"} +{"level":"error","error":"temporal truth feature flag required","tool":"temporal_truth","args":"{\"fact_id\":\"42\",\"project\":\"engram\"}","time":"2026-07-10T11:43:12+03:00","message":"Tool call failed"} +{"level":"error","error":"temporal truth provider not configured","tool":"temporal_truth","args":"{\"fact_id\":\"42\",\"project\":\"engram\"}","time":"2026-07-10T11:43:12+03:00","message":"Tool call failed"} +{"level":"error","error":"temporal truth feature flag required","tool":"temporal_truth_refresh","args":"{\"project\":\"engram\"}","time":"2026-07-10T11:43:12+03:00","message":"Tool call failed"} +{"level":"error","error":"temporal truth provider not configured","tool":"temporal_truth_refresh","args":"{\"project\":\"engram\"}","time":"2026-07-10T11:43:12+03:00","message":"Tool call failed"} +{"level":"error","error":"codebase_search requires ENGRAM_CODE_INTEL_ENABLED=true","tool":"codebase_search","args":"{\"query\":\"hello\",\"project\":\"test\"}","time":"2026-07-10T11:43:12+03:00","message":"Tool call failed"} +{"level":"debug","method":"initialized","time":"2026-07-10T11:43:12+03:00","message":"MCP client initialized"} +{"level":"error","error":"unknown tool: ","tool":"","args":"","time":"2026-07-10T11:43:12+03:00","message":"Tool call failed"} +{"level":"error","error":"unknown tool: no_such_tool","tool":"no_such_tool","args":"{}","time":"2026-07-10T11:43:12+03:00","message":"Tool call failed"} +{"level":"debug","method":"initialized","time":"2026-07-10T11:43:12+03:00","message":"MCP client initialized"} +{"level":"debug","connections":5,"time":"2026-07-10T11:43:12+03:00","message":"Connection pool warmed"} +{"level":"debug","connections":5,"time":"2026-07-10T11:43:12+03:00","message":"Connection pool warmed"} +FAIL +FAIL github.com/thebtf/engram/internal/mcp 8.179s +FAIL +test_exit=1 +active_sessions_before_terminate=0 +database_residue=0 +activity_residue=0 +finished_utc=2026-07-10T08:43:14.5891355Z diff --git a/.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/12-race-focused.log b/.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/12-race-focused.log new file mode 100644 index 00000000..82f18b62 --- /dev/null +++ b/.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/12-race-focused.log @@ -0,0 +1,12 @@ +base_sha=68b2ce5835c7c6efdf1c68da9eedcb8d9c3837ef +head_sha=68b2ce5835c7c6efdf1c68da9eedcb8d9c3837ef +database=engram_mkr_bedge_race_focus_20260710a +command=go test -race -p=1 ./internal/db/gorm ./internal/mcp -run ^(TestCandidateStore_PromoteWithMemoryAndSnapshot_AmendFailureRollsBackPromotion|TestCandidateStore_PreserveWithMemoryAndSnapshot_RequiresCandidateReviewSnapshotBeforeMutation|TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites|TestCandidateStore_AllCandidateReviewSnapshotSeamsCommitExactlyOneAudit|TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs|TestBulkOps_PublicDispatchPreservesExactIntegralIDsBeforeNormalization|TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade|TestBulkOps_WiredFacadeReceivesExactNormalizedIDsAndStrictDryRun)$ -count=1 +started_utc=2026-07-10T08:44:42.8875943Z +ok github.com/thebtf/engram/internal/db/gorm 5.425s +ok github.com/thebtf/engram/internal/mcp 1.093s +test_exit=0 +active_sessions_before_terminate=0 +database_residue=0 +activity_residue=0 +finished_utc=2026-07-10T08:45:11.3676002Z diff --git a/.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/13-vet.log b/.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/13-vet.log new file mode 100644 index 00000000..0ab7dcb3 --- /dev/null +++ b/.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/13-vet.log @@ -0,0 +1,10 @@ +base_sha=68b2ce5835c7c6efdf1c68da9eedcb8d9c3837ef +head_sha=68b2ce5835c7c6efdf1c68da9eedcb8d9c3837ef +database=engram_mkr_bedge_vet_20260710a +command=go vet ./internal/db/gorm ./internal/mcp +started_utc=2026-07-10T08:45:33.3316942Z +test_exit=0 +active_sessions_before_terminate=0 +database_residue=0 +activity_residue=0 +finished_utc=2026-07-10T08:45:39.2698320Z diff --git a/.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/14-coverage.log b/.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/14-coverage.log new file mode 100644 index 00000000..fd52a752 --- /dev/null +++ b/.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/14-coverage.log @@ -0,0 +1,12 @@ +base_sha=68b2ce5835c7c6efdf1c68da9eedcb8d9c3837ef +head_sha=68b2ce5835c7c6efdf1c68da9eedcb8d9c3837ef +database=engram_mkr_bedge_coverage_20260710a +command=go test -p=1 ./internal/db/gorm ./internal/mcp -run ^(TestCandidateStore_PromoteWithMemoryAndSnapshot_AmendFailureRollsBackPromotion|TestCandidateStore_PreserveWithMemoryAndSnapshot_RequiresCandidateReviewSnapshotBeforeMutation|TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites|TestCandidateStore_AllCandidateReviewSnapshotSeamsCommitExactlyOneAudit|TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs|TestBulkOps_PublicDispatchPreservesExactIntegralIDsBeforeNormalization|TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade|TestBulkOps_WiredFacadeReceivesExactNormalizedIDsAndStrictDryRun)$ -count=1 -covermode=atomic -coverprofile=.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/coverage.out +started_utc=2026-07-10T08:46:07.1620949Z +ok github.com/thebtf/engram/internal/db/gorm 3.880s coverage: 14.9% of statements +ok github.com/thebtf/engram/internal/mcp 0.157s coverage: 1.8% of statements +test_exit=0 +active_sessions_before_terminate=0 +database_residue=0 +activity_residue=0 +finished_utc=2026-07-10T08:46:18.9633242Z diff --git a/.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/15-cover-functions.log b/.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/15-cover-functions.log new file mode 100644 index 00000000..3ce888e3 --- /dev/null +++ b/.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/15-cover-functions.log @@ -0,0 +1,951 @@ +base_sha=68b2ce5835c7c6efdf1c68da9eedcb8d9c3837ef +head_sha=68b2ce5835c7c6efdf1c68da9eedcb8d9c3837ef +database=engram_mkr_bedge_coverfunc_20260710a +command=go tool cover -func=.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/coverage.out +started_utc=2026-07-10T08:47:08.5087912Z +github.com/thebtf/engram/internal/db/gorm/attention_event_store.go:28: TableName 0.0% +github.com/thebtf/engram/internal/db/gorm/attention_event_store.go:34: NewAttentionEventStore 0.0% +github.com/thebtf/engram/internal/db/gorm/attention_event_store.go:38: Create 0.0% +github.com/thebtf/engram/internal/db/gorm/attention_event_store.go:52: Get 0.0% +github.com/thebtf/engram/internal/db/gorm/attention_event_store.go:66: ListByProject 0.0% +github.com/thebtf/engram/internal/db/gorm/attention_event_store.go:92: attentionEventRowFromRecord 0.0% +github.com/thebtf/engram/internal/db/gorm/attention_event_store.go:137: attentionEventRowToStored 0.0% +github.com/thebtf/engram/internal/db/gorm/attention_event_store.go:154: validAttentionEventHorizon 0.0% +github.com/thebtf/engram/internal/db/gorm/attention_event_store.go:163: validAttentionEventPrivacyClass 0.0% +github.com/thebtf/engram/internal/db/gorm/audit_store.go:25: TableName 100.0% +github.com/thebtf/engram/internal/db/gorm/audit_store.go:33: NewAuditStore 100.0% +github.com/thebtf/engram/internal/db/gorm/audit_store.go:38: Log 66.7% +github.com/thebtf/engram/internal/db/gorm/audit_store.go:45: logTx 66.7% +github.com/thebtf/engram/internal/db/gorm/audit_store.go:53: GetByMemory 0.0% +github.com/thebtf/engram/internal/db/gorm/audit_store.go:80: LogAudit 0.0% +github.com/thebtf/engram/internal/db/gorm/audit_store.go:92: DeleteOlderThan 0.0% +github.com/thebtf/engram/internal/db/gorm/auth_models.go:15: DashboardRoles 0.0% +github.com/thebtf/engram/internal/db/gorm/auth_models.go:20: NormalizeDashboardRole 0.0% +github.com/thebtf/engram/internal/db/gorm/auth_models.go:43: TableName 0.0% +github.com/thebtf/engram/internal/db/gorm/auth_models.go:61: TableName 0.0% +github.com/thebtf/engram/internal/db/gorm/auth_models.go:76: TableName 0.0% +github.com/thebtf/engram/internal/db/gorm/auth_session_store.go:26: NewAuthSessionStore 0.0% +github.com/thebtf/engram/internal/db/gorm/auth_session_store.go:31: CreateSession 0.0% +github.com/thebtf/engram/internal/db/gorm/auth_session_store.go:52: GetAnySession 0.0% +github.com/thebtf/engram/internal/db/gorm/auth_session_store.go:65: GetSession 0.0% +github.com/thebtf/engram/internal/db/gorm/auth_session_store.go:74: RevokeSession 0.0% +github.com/thebtf/engram/internal/db/gorm/auth_session_store.go:108: DeleteSession 0.0% +github.com/thebtf/engram/internal/db/gorm/auth_session_store.go:114: DeleteUserSessions 0.0% +github.com/thebtf/engram/internal/db/gorm/auth_session_store.go:134: CleanExpired 0.0% +github.com/thebtf/engram/internal/db/gorm/auth_session_store.go:139: validateSessionRow 0.0% +github.com/thebtf/engram/internal/db/gorm/auth_session_store.go:154: generateSessionID 0.0% +github.com/thebtf/engram/internal/db/gorm/behavioral_rules_store.go:28: NewBehavioralRulesStore 0.0% +github.com/thebtf/engram/internal/db/gorm/behavioral_rules_store.go:34: Create 0.0% +github.com/thebtf/engram/internal/db/gorm/behavioral_rules_store.go:74: Get 0.0% +github.com/thebtf/engram/internal/db/gorm/behavioral_rules_store.go:97: List 0.0% +github.com/thebtf/engram/internal/db/gorm/behavioral_rules_store.go:103: ListEnabled 0.0% +github.com/thebtf/engram/internal/db/gorm/behavioral_rules_store.go:107: list 0.0% +github.com/thebtf/engram/internal/db/gorm/behavioral_rules_store.go:140: ListAll 0.0% +github.com/thebtf/engram/internal/db/gorm/behavioral_rules_store.go:164: Update 0.0% +github.com/thebtf/engram/internal/db/gorm/behavioral_rules_store.go:201: SetEnabled 0.0% +github.com/thebtf/engram/internal/db/gorm/behavioral_rules_store.go:234: Delete 0.0% +github.com/thebtf/engram/internal/db/gorm/behavioral_rules_store.go:256: behavioralRuleRowToModel 0.0% +github.com/thebtf/engram/internal/db/gorm/books_store.go:22: TableName 0.0% +github.com/thebtf/engram/internal/db/gorm/books_store.go:33: NewBooksStore 0.0% +github.com/thebtf/engram/internal/db/gorm/books_store.go:41: Create 0.0% +github.com/thebtf/engram/internal/db/gorm/books_store.go:62: GetStatus 0.0% +github.com/thebtf/engram/internal/db/gorm/books_store.go:78: UpdateStatus 0.0% +github.com/thebtf/engram/internal/db/gorm/books_store.go:112: isValidBookStatus 0.0% +github.com/thebtf/engram/internal/db/gorm/books_store.go:121: booksJobFromRecord 0.0% +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:45: TableName 100.0% +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:50: Value 100.0% +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:57: Scan 57.1% +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:72: toDomainCandidate 100.0% +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:100: fromDomainCandidate 81.8% +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:139: NewCandidateStore 100.0% +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:146: Create 71.4% +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:159: Get 75.0% +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:170: ListByStatus 0.0% +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:194: ListExpiredPending 0.0% +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:235: transitionStatus 0.0% +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:288: transitionStatusTx 66.7% +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:330: TransitionToPromoted 0.0% +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:347: PromoteWithMemory 0.0% +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:376: PromoteWithMemoryAndSnapshot 100.0% +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:390: PreserveWithMemoryAndSnapshot 100.0% +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:401: promoteWithMemoryAndSnapshotAction 82.4% +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:462: validatePromoteMemory 60.0% +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:472: promoteWithMemoryTx 72.7% +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:515: logPromoteAudit 90.0% +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:534: normalizeCandidateReviewActor 75.0% +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:542: validateCandidateReviewSnapshotBinding 93.2% +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:615: logCandidateReviewAuditTx 76.5% +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:655: createCandidateReviewSnapshotTx 62.5% +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:672: TransitionToRejected 0.0% +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:679: TransitionToRejectedWithSnapshot 100.0% +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:693: TransitionToSuppressedWithSnapshot 100.0% +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:707: TransitionToSupersededWithSnapshot 100.0% +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:717: transitionWithSnapshot 81.8% +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:759: amendCandidateReviewAfterTx 66.7% +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:817: TransitionToSuperseded 0.0% +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:823: TransitionToDecayed 0.0% +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:833: RevertRawTx 0.0% +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:875: GetByFingerprintAnyStatus 0.0% +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:895: GetByFingerprint 0.0% +github.com/thebtf/engram/internal/db/gorm/citation_log_store.go:25: TableName 0.0% +github.com/thebtf/engram/internal/db/gorm/citation_log_store.go:33: NewCitationLogStore 0.0% +github.com/thebtf/engram/internal/db/gorm/citation_log_store.go:39: RecordBatch 0.0% +github.com/thebtf/engram/internal/db/gorm/citation_log_store.go:51: GetBySession 0.0% +github.com/thebtf/engram/internal/db/gorm/citation_log_store.go:71: GetByMemory 0.0% +github.com/thebtf/engram/internal/db/gorm/citation_log_store.go:91: DeleteOlderThan 0.0% +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:54: TableName 0.0% +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:67: NewCodeChunkStore 0.0% +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:78: Upsert 0.0% +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:119: DeleteByProjectFile 0.0% +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:144: DeleteStaleForProject 0.0% +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:172: ListByProject 0.0% +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:198: CountByProject 0.0% +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:220: UpdateEmbedding 0.0% +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:240: ListUnembedded 0.0% +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:264: StaleKey 0.0% +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:281: ListIdentityKeysByProject 0.0% +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:315: TouchSession 0.0% +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:354: RegisterSession 0.0% +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:387: DeleteBySessionMismatch 0.0% +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:447: SearchCodeFTS 0.0% +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:523: FindSimilarCode 0.0% +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:593: CountEmbeddedByProject 0.0% +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:611: MaxUpdatedAtByProject 0.0% +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:634: DeleteSession 0.0% +github.com/thebtf/engram/internal/db/gorm/credential_store.go:26: NewCredentialStore 0.0% +github.com/thebtf/engram/internal/db/gorm/credential_store.go:34: Create 0.0% +github.com/thebtf/engram/internal/db/gorm/credential_store.go:81: Get 0.0% +github.com/thebtf/engram/internal/db/gorm/credential_store.go:103: GetByName 0.0% +github.com/thebtf/engram/internal/db/gorm/credential_store.go:120: List 0.0% +github.com/thebtf/engram/internal/db/gorm/credential_store.go:141: ListAll 0.0% +github.com/thebtf/engram/internal/db/gorm/credential_store.go:169: Delete 0.0% +github.com/thebtf/engram/internal/db/gorm/credential_store.go:191: DeleteByName 0.0% +github.com/thebtf/engram/internal/db/gorm/credential_store.go:212: CountCredentials 0.0% +github.com/thebtf/engram/internal/db/gorm/credential_store.go:229: CountWithDifferentFingerprint 0.0% +github.com/thebtf/engram/internal/db/gorm/credential_store.go:247: DeleteOrphanedByFingerprint 0.0% +github.com/thebtf/engram/internal/db/gorm/credential_store.go:262: credentialRowToModel 0.0% +github.com/thebtf/engram/internal/db/gorm/document_store.go:29: NewDocumentStore 0.0% +github.com/thebtf/engram/internal/db/gorm/document_store.go:37: UpsertDocument 0.0% +github.com/thebtf/engram/internal/db/gorm/document_store.go:72: GetDocument 0.0% +github.com/thebtf/engram/internal/db/gorm/document_store.go:87: GetContent 0.0% +github.com/thebtf/engram/internal/db/gorm/document_store.go:100: ListDocuments 0.0% +github.com/thebtf/engram/internal/db/gorm/document_store.go:116: UpsertChunks 0.0% +github.com/thebtf/engram/internal/db/gorm/document_store.go:123: SearchChunks 0.0% +github.com/thebtf/engram/internal/db/gorm/document_store.go:129: ChunksExist 0.0% +github.com/thebtf/engram/internal/db/gorm/document_store.go:134: DeactivateDocument 0.0% +github.com/thebtf/engram/internal/db/gorm/document_store.go:147: CollectionDocCounts 0.0% +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:123: NewDomainOwnerStore 0.0% +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:129: Upsert 0.0% +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:157: UpdateIfUnchanged 0.0% +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:188: Get 0.0% +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:202: List 0.0% +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:240: Delete 0.0% +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:257: RegisterUserFromInvitation 0.0% +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:318: ListAccessRoles 0.0% +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:348: ListAccessInvitations 0.0% +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:353: ListAccessSessions 0.0% +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:358: ListAccessAudit 0.0% +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:363: GetAccessUserDrilldown 0.0% +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:400: LogAccessEvent 0.0% +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:404: logAccessEventTx 0.0% +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:436: normalizeDomainOwner 0.0% +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:461: normalizeDomainOwnerListOptions 0.0% +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:484: validDomainOwnerPrincipalKind 0.0% +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:493: validDomainOwnerMode 0.0% +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:519: listAccessInvitations 0.0% +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:591: listAccessSessions 0.0% +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:644: queryAccessAudit 0.0% +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:678: marshalAuditState 0.0% +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:690: decodeAuditJSON 0.0% +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:701: invitationStatusFromFields 0.0% +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:714: sessionStatusFromFields 0.0% +github.com/thebtf/engram/internal/db/gorm/helpers.go:22: EnsureSessionExists 0.0% +github.com/thebtf/engram/internal/db/gorm/helpers.go:48: sqlNullString 0.0% +github.com/thebtf/engram/internal/db/gorm/helpers.go:62: ParseLimitParam 0.0% +github.com/thebtf/engram/internal/db/gorm/helpers.go:74: ParseLimitParamWithMax 0.0% +github.com/thebtf/engram/internal/db/gorm/helpers.go:87: ParseOffsetParam 0.0% +github.com/thebtf/engram/internal/db/gorm/helpers.go:105: ParsePaginationParams 0.0% +github.com/thebtf/engram/internal/db/gorm/injection_log_store.go:20: NewInjectionLogStore 0.0% +github.com/thebtf/engram/internal/db/gorm/injection_log_store.go:26: Record 0.0% +github.com/thebtf/engram/internal/db/gorm/injection_log_store.go:55: GetBySession 0.0% +github.com/thebtf/engram/internal/db/gorm/injection_log_store.go:93: DeleteOlderThan 0.0% +github.com/thebtf/engram/internal/db/gorm/invitation_store.go:28: NewInvitationStore 0.0% +github.com/thebtf/engram/internal/db/gorm/invitation_store.go:33: GenerateCode 0.0% +github.com/thebtf/engram/internal/db/gorm/invitation_store.go:42: CreateInvitation 0.0% +github.com/thebtf/engram/internal/db/gorm/invitation_store.go:75: GetInvitationByID 0.0% +github.com/thebtf/engram/internal/db/gorm/invitation_store.go:87: GetValidInvitation 0.0% +github.com/thebtf/engram/internal/db/gorm/invitation_store.go:101: ConsumeInvitation 0.0% +github.com/thebtf/engram/internal/db/gorm/invitation_store.go:126: RevokeInvitation 0.0% +github.com/thebtf/engram/internal/db/gorm/invitation_store.go:162: ListInvitations 0.0% +github.com/thebtf/engram/internal/db/gorm/invitation_store.go:170: validateInvitationRow 0.0% +github.com/thebtf/engram/internal/db/gorm/issue_store.go:18: projectBareName 0.0% +github.com/thebtf/engram/internal/db/gorm/issue_store.go:33: NewIssueStore 0.0% +github.com/thebtf/engram/internal/db/gorm/issue_store.go:39: ResolveProject 0.0% +github.com/thebtf/engram/internal/db/gorm/issue_store.go:53: CreateIssue 0.0% +github.com/thebtf/engram/internal/db/gorm/issue_store.go:111: ListIssues 0.0% +github.com/thebtf/engram/internal/db/gorm/issue_store.go:121: ListIssuesEx 0.0% +github.com/thebtf/engram/internal/db/gorm/issue_store.go:172: GetIssue 0.0% +github.com/thebtf/engram/internal/db/gorm/issue_store.go:193: UpdateIssueStatus 0.0% +github.com/thebtf/engram/internal/db/gorm/issue_store.go:222: AddComment 0.0% +github.com/thebtf/engram/internal/db/gorm/issue_store.go:254: AcknowledgeIssues 0.0% +github.com/thebtf/engram/internal/db/gorm/issue_store.go:278: ReopenIssue 0.0% +github.com/thebtf/engram/internal/db/gorm/issue_store.go:321: CloseIssue 0.0% +github.com/thebtf/engram/internal/db/gorm/issue_store.go:333: CloseIssueFromAnySource 0.0% +github.com/thebtf/engram/internal/db/gorm/issue_store.go:426: formatCloseCallerProjects 0.0% +github.com/thebtf/engram/internal/db/gorm/issue_store.go:443: RejectIssue 0.0% +github.com/thebtf/engram/internal/db/gorm/issue_store.go:471: DeleteIssue 0.0% +github.com/thebtf/engram/internal/db/gorm/issue_store.go:489: UpdateIssueFields 0.0% +github.com/thebtf/engram/internal/db/gorm/issue_store.go:528: GetTrackedProjects 0.0% +github.com/thebtf/engram/internal/db/gorm/memory_store.go:34: NewMemoryStore 0.0% +github.com/thebtf/engram/internal/db/gorm/memory_store.go:91: normalizeMetaMemoryLimit 0.0% +github.com/thebtf/engram/internal/db/gorm/memory_store.go:101: normalizeMetaMemoryProbeLimit 0.0% +github.com/thebtf/engram/internal/db/gorm/memory_store.go:112: normalizeMetaMemoryFTSScanBudget 0.0% +github.com/thebtf/engram/internal/db/gorm/memory_store.go:116: sanitizeMetaText 0.0% +github.com/thebtf/engram/internal/db/gorm/memory_store.go:132: sanitizeMetaTags 0.0% +github.com/thebtf/engram/internal/db/gorm/memory_store.go:144: cloneMetaTags 0.0% +github.com/thebtf/engram/internal/db/gorm/memory_store.go:153: metaMemoryTitleFromLine 0.0% +github.com/thebtf/engram/internal/db/gorm/memory_store.go:161: metaMemoryRowsToRecords 0.0% +github.com/thebtf/engram/internal/db/gorm/memory_store.go:175: metaMemoryMatchesOptions 0.0% +github.com/thebtf/engram/internal/db/gorm/memory_store.go:209: validateMemoryForCreate 55.6% +github.com/thebtf/engram/internal/db/gorm/memory_store.go:225: validateMemoryOwnershipForCreate 50.0% +github.com/thebtf/engram/internal/db/gorm/memory_store.go:249: isValidMemoryOwnerPrincipalKind 0.0% +github.com/thebtf/engram/internal/db/gorm/memory_store.go:258: memoryRowForCreate 70.6% +github.com/thebtf/engram/internal/db/gorm/memory_store.go:309: copyPrivacyFields 40.0% +github.com/thebtf/engram/internal/db/gorm/memory_store.go:327: copyPrincipalMemoryFields 30.8% +github.com/thebtf/engram/internal/db/gorm/memory_store.go:351: advisoryLockKey 0.0% +github.com/thebtf/engram/internal/db/gorm/memory_store.go:361: tagContainmentJSON 0.0% +github.com/thebtf/engram/internal/db/gorm/memory_store.go:376: Create 0.0% +github.com/thebtf/engram/internal/db/gorm/memory_store.go:406: CreateWithLifecycle 0.0% +github.com/thebtf/engram/internal/db/gorm/memory_store.go:434: createMemoryWithLifecycleTx 85.7% +github.com/thebtf/engram/internal/db/gorm/memory_store.go:450: CreateWithLifecycleIfTagAbsent 0.0% +github.com/thebtf/engram/internal/db/gorm/memory_store.go:509: Get 0.0% +github.com/thebtf/engram/internal/db/gorm/memory_store.go:530: List 0.0% +github.com/thebtf/engram/internal/db/gorm/memory_store.go:606: ListWithFilters 0.0% +github.com/thebtf/engram/internal/db/gorm/memory_store.go:628: ListPrincipalMemory 0.0% +github.com/thebtf/engram/internal/db/gorm/memory_store.go:649: baseMemoryListQuery 0.0% +github.com/thebtf/engram/internal/db/gorm/memory_store.go:653: basePrincipalMemoryQuery 0.0% +github.com/thebtf/engram/internal/db/gorm/memory_store.go:661: applyCurrentMemoryValidity 0.0% +github.com/thebtf/engram/internal/db/gorm/memory_store.go:667: findMemoryRows 0.0% +github.com/thebtf/engram/internal/db/gorm/memory_store.go:685: applyMemoryListOptions 0.0% +github.com/thebtf/engram/internal/db/gorm/memory_store.go:730: normalizeMemoryListLimit 0.0% +github.com/thebtf/engram/internal/db/gorm/memory_store.go:744: normalizeMemoryListOffset 0.0% +github.com/thebtf/engram/internal/db/gorm/memory_store.go:751: escapeSQLLike 0.0% +github.com/thebtf/engram/internal/db/gorm/memory_store.go:767: ListWithOffset 0.0% +github.com/thebtf/engram/internal/db/gorm/memory_store.go:812: ListForInjection 0.0% +github.com/thebtf/engram/internal/db/gorm/memory_store.go:847: Update 0.0% +github.com/thebtf/engram/internal/db/gorm/memory_store.go:887: Delete 0.0% +github.com/thebtf/engram/internal/db/gorm/memory_store.go:913: Supersede 0.0% +github.com/thebtf/engram/internal/db/gorm/memory_store.go:950: MarkSuperseded 0.0% +github.com/thebtf/engram/internal/db/gorm/memory_store.go:978: UpdateLifecycleFields 0.0% +github.com/thebtf/engram/internal/db/gorm/memory_store.go:999: IncrementInjectionCount 0.0% +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1007: BatchIncrementCited 0.0% +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1022: BatchIncrementInjected 0.0% +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1034: BatchIncrementUncited 0.0% +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1044: GetProjectCitationRate 0.0% +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1082: BatchIncrementCitedN 0.0% +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1098: BatchIncrementUncitedN 0.0% +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1106: BatchIncrementViolated 0.0% +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1114: memoryRowToModel 50.0% +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1174: ListBySourceAgentAndTag 0.0% +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1208: SearchMetaMemoryTagPrefixIDs 0.0% +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1236: SearchMetaMemoryFTSIDs 0.0% +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1291: GetMetaMemoryByIDs 0.0% +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1332: QueryMetaIndex 0.0% +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1406: appendUniqueMetaIDs 0.0% +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1418: metaIDSet 0.0% +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1426: metaIndexScores 0.0% +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1437: metaIndexRRF 0.0% +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1481: metaIndexReason 0.0% +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1502: tokenizeFTSTerms 0.0% +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1541: hasNegationTerm 0.0% +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1557: SearchFTS 0.0% +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1581: normalizeSearchFTSLimit 0.0% +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1591: searchFTSQueryVariants 0.0% +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1603: searchFTSPage 0.0% +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1650: GetByIDs 0.0% +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1686: CountActiveSince 0.0% +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1700: MaxActiveID 0.0% +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1716: LockRawByIDsTx 0.0% +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1757: rawMemoryRestoreUpdates 0.0% +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1812: RestoreRaw 0.0% +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1836: RestoreRawTx 0.0% +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1862: HardDeleteTx 0.0% +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1878: GetDB 0.0% +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1883: ListAllActive 0.0% +github.com/thebtf/engram/internal/db/gorm/migration_access_milestone.go:14: accessMilestoneMigration156 71.4% +github.com/thebtf/engram/internal/db/gorm/migration_api_token_principals.go:10: apiTokenPrincipalsMigration148 45.5% +github.com/thebtf/engram/internal/db/gorm/migration_behavioral_rules_enabled.go:10: behavioralRulesEnabledMigration151 60.0% +github.com/thebtf/engram/internal/db/gorm/migration_books.go:16: booksJobsMigration155 71.4% +github.com/thebtf/engram/internal/db/gorm/migration_memory_domain_owners.go:10: memoryDomainOwnersMigration150 71.4% +github.com/thebtf/engram/internal/db/gorm/migration_memory_principals.go:10: memoryPrincipalsMigration149 45.5% +github.com/thebtf/engram/internal/db/gorm/migration_rule_arbiter.go:11: ruleArbiterBackgroundMigration145 45.5% +github.com/thebtf/engram/internal/db/gorm/migration_rule_governance.go:11: ruleGovernanceMigration144 45.5% +github.com/thebtf/engram/internal/db/gorm/migration_rule_governance_snapshot_statuses.go:10: ruleGovernanceSnapshotStatusesMigration147 45.5% +github.com/thebtf/engram/internal/db/gorm/migration_state.go:32: GetMigrationState 0.0% +github.com/thebtf/engram/internal/db/gorm/migration_state.go:62: sortAppliedMigrationIDs 0.0% +github.com/thebtf/engram/internal/db/gorm/migration_state.go:78: migrationSequence 0.0% +github.com/thebtf/engram/internal/db/gorm/migration_temporal_truth.go:13: temporalTruthRecordsMigration157 71.4% +github.com/thebtf/engram/internal/db/gorm/migrations.go:16: runMigrations 48.8% +github.com/thebtf/engram/internal/db/gorm/migrations.go:4799: candidateReviewSnapshotOpTypeMigration153 29.4% +github.com/thebtf/engram/internal/db/gorm/migrations.go:4845: forgettingReviewSnapshotOpTypeMigration154 29.4% +github.com/thebtf/engram/internal/db/gorm/migrations.go:4891: attentionEventsMigration158 55.6% +github.com/thebtf/engram/internal/db/gorm/models.go:44: TableName 100.0% +github.com/thebtf/engram/internal/db/gorm/models.go:47: BeforeCreate 0.0% +github.com/thebtf/engram/internal/db/gorm/models.go:75: TableName 0.0% +github.com/thebtf/engram/internal/db/gorm/models.go:92: TableName 0.0% +github.com/thebtf/engram/internal/db/gorm/models.go:109: TableName 0.0% +github.com/thebtf/engram/internal/db/gorm/models.go:122: TableName 0.0% +github.com/thebtf/engram/internal/db/gorm/models.go:140: TableName 0.0% +github.com/thebtf/engram/internal/db/gorm/models.go:160: TableName 0.0% +github.com/thebtf/engram/internal/db/gorm/models.go:188: TableName 0.0% +github.com/thebtf/engram/internal/db/gorm/models.go:200: TableName 0.0% +github.com/thebtf/engram/internal/db/gorm/models.go:220: TableName 0.0% +github.com/thebtf/engram/internal/db/gorm/models.go:249: TableName 0.0% +github.com/thebtf/engram/internal/db/gorm/models.go:304: TableName 100.0% +github.com/thebtf/engram/internal/db/gorm/models.go:317: TableName 0.0% +github.com/thebtf/engram/internal/db/gorm/models.go:334: TableName 0.0% +github.com/thebtf/engram/internal/db/gorm/project_store.go:23: UpsertProject 0.0% +github.com/thebtf/engram/internal/db/gorm/project_store.go:55: ResolveProjectID 0.0% +github.com/thebtf/engram/internal/db/gorm/promotion_store.go:21: TableName 0.0% +github.com/thebtf/engram/internal/db/gorm/promotion_store.go:29: NewPromotionStore 0.0% +github.com/thebtf/engram/internal/db/gorm/promotion_store.go:34: LogPromotion 0.0% +github.com/thebtf/engram/internal/db/gorm/promotion_store.go:48: GetHistory 0.0% +github.com/thebtf/engram/internal/db/gorm/purge_store.go:34: NewPurgeStore 0.0% +github.com/thebtf/engram/internal/db/gorm/purge_store.go:80: PurgeProject 0.0% +github.com/thebtf/engram/internal/db/gorm/retrieval_stats_log_store.go:23: TableName 0.0% +github.com/thebtf/engram/internal/db/gorm/retrieval_stats_log_store.go:41: NewRetrievalStatsLogStore 0.0% +github.com/thebtf/engram/internal/db/gorm/retrieval_stats_log_store.go:52: LogEvent 0.0% +github.com/thebtf/engram/internal/db/gorm/retrieval_stats_log_store.go:70: flusher 0.0% +github.com/thebtf/engram/internal/db/gorm/retrieval_stats_log_store.go:102: flush 0.0% +github.com/thebtf/engram/internal/db/gorm/retrieval_stats_log_store.go:109: Close 0.0% +github.com/thebtf/engram/internal/db/gorm/retrieval_stats_log_store.go:130: GetStats 0.0% +github.com/thebtf/engram/internal/db/gorm/retrieval_stats_log_store.go:174: Cleanup 0.0% +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:139: TableName 0.0% +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:157: TableName 0.0% +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:174: TableName 0.0% +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:176: nullableString 0.0% +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:180: stringFromNull 0.0% +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:187: validRuleConfidence 0.0% +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:199: TableName 0.0% +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:230: TableName 0.0% +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:247: TableName 0.0% +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:262: TableName 0.0% +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:268: NewRuleGovernanceStore 0.0% +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:272: CreateRuleCandidate 0.0% +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:304: GetRuleCandidate 0.0% +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:312: GetRuleCandidateByFingerprint 0.0% +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:333: ListRuleCandidates 0.0% +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:356: ListRenderableRuleVersions 0.0% +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:386: ListLegacyBehavioralRuleFallback 0.0% +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:412: ListPendingRuleCandidatesForArbiter 0.0% +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:478: StartRuleArbiterRun 0.0% +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:493: FinishRuleArbiterRun 0.0% +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:543: CreateRuleArbiterEvaluation 0.0% +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:590: AnnotateRuleCandidate 0.0% +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:646: CreateDraftFromCandidate 0.0% +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:733: RejectRuleCandidate 0.0% +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:768: TransitionRuleVersion 0.0% +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:825: CreateRuleSnapshot 0.0% +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:841: GetLifecycleHealth 0.0% +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:883: ListExceptionQueueGroups 0.0% +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1072: ListRuleGovernanceSnapshots 0.0% +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1095: PinRuleGovernanceSnapshot 0.0% +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1125: RollbackRuleGovernanceSnapshot 0.0% +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1202: fromRuleCandidate 0.0% +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1232: toRuleCandidate 0.0% +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1267: toRuleArbiterRun 0.0% +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1287: fromRuleArbiterEvaluation 0.0% +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1306: toRuleArbiterEvaluation 0.0% +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1323: toRuleVersion 0.0% +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1354: toRuleGovernanceSnapshot 0.0% +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1372: toRuleGovernanceSnapshotSummary 0.0% +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1384: projectFromRuleVersionRow 0.0% +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1394: projectFromSnapshotRow 0.0% +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1414: countCandidateStatuses 0.0% +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1443: countVersionStates 0.0% +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1459: countArbiterRunStatuses 0.0% +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1475: countTransitionActions 0.0% +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1495: countSnapshotStatuses 0.0% +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1513: countInjectionEventTypes 0.0% +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1531: applyRuleSince 0.0% +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1538: healthCountTotal 0.0% +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1571: ruleGovernanceSnapshotStateForRuleVersion 0.0% +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1586: decodeRuleGovernanceSnapshotState 0.0% +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1616: decodeRuleGovernanceSnapshotStatePtr 0.0% +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1623: getRuleVersionByCandidateTx 0.0% +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1635: ensureRuleFamilyTx 0.0% +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1650: createRuleTransitionLogTx 0.0% +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1670: createRuleSnapshotTx 0.0% +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1675: createRuleSnapshotRowTx 0.0% +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1698: validateCandidateToDraftRequest 0.0% +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1708: hasNonBlankEvidenceHandle 0.0% +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1717: hasNegativeRuleArbiterCount 0.0% +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1727: validateRuleCandidateForCreate 0.0% +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1749: objectJSONFromMap 0.0% +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1760: arrayJSONFromStrings 0.0% +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1771: objectJSON 0.0% +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1775: objectOrArrayJSON 0.0% +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1782: nullableObjectJSON 0.0% +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1790: decodeObject 0.0% +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1801: decodeStrings 0.0% +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1812: isUniqueViolation 0.0% +github.com/thebtf/engram/internal/db/gorm/rule_injection_event_store.go:28: TableName 0.0% +github.com/thebtf/engram/internal/db/gorm/rule_injection_event_store.go:55: NewRuleInjectionEventStore 0.0% +github.com/thebtf/engram/internal/db/gorm/rule_injection_event_store.go:59: RecordEvents 0.0% +github.com/thebtf/engram/internal/db/gorm/rule_injection_event_store.go:80: ListBySession 0.0% +github.com/thebtf/engram/internal/db/gorm/rule_injection_event_store.go:106: AggregateByProjectRuleAndEventType 0.0% +github.com/thebtf/engram/internal/db/gorm/rule_injection_event_store.go:160: telemetryQuery 0.0% +github.com/thebtf/engram/internal/db/gorm/rule_injection_event_store.go:171: telemetryReasons 0.0% +github.com/thebtf/engram/internal/db/gorm/rule_injection_event_store.go:183: fromRuleInjectionEvent 0.0% +github.com/thebtf/engram/internal/db/gorm/rule_injection_event_store.go:213: toRuleInjectionEvent 0.0% +github.com/thebtf/engram/internal/db/gorm/search_query_log_store.go:24: TableName 0.0% +github.com/thebtf/engram/internal/db/gorm/search_query_log_store.go:32: NewSearchQueryLogStore 0.0% +github.com/thebtf/engram/internal/db/gorm/search_query_log_store.go:38: LogQuery 0.0% +github.com/thebtf/engram/internal/db/gorm/search_query_log_store.go:69: GetAnalytics 0.0% +github.com/thebtf/engram/internal/db/gorm/search_query_log_store.go:136: GetRecent 0.0% +github.com/thebtf/engram/internal/db/gorm/search_query_log_store.go:169: Cleanup 0.0% +github.com/thebtf/engram/internal/db/gorm/segment_store.go:22: TableName 0.0% +github.com/thebtf/engram/internal/db/gorm/segment_store.go:30: NewSegmentStore 0.0% +github.com/thebtf/engram/internal/db/gorm/segment_store.go:35: GetCurrentSegment 0.0% +github.com/thebtf/engram/internal/db/gorm/segment_store.go:51: CreateSegment 0.0% +github.com/thebtf/engram/internal/db/gorm/segment_store.go:90: GetSegments 0.0% +github.com/thebtf/engram/internal/db/gorm/segment_store.go:100: CloseAllSegments 0.0% +github.com/thebtf/engram/internal/db/gorm/session_store.go:31: NewSessionStore 0.0% +github.com/thebtf/engram/internal/db/gorm/session_store.go:41: CreateSDKSession 0.0% +github.com/thebtf/engram/internal/db/gorm/session_store.go:99: GetSessionByID 0.0% +github.com/thebtf/engram/internal/db/gorm/session_store.go:112: FindAnySDKSession 0.0% +github.com/thebtf/engram/internal/db/gorm/session_store.go:127: ResolveClaudeSessionID 0.0% +github.com/thebtf/engram/internal/db/gorm/session_store.go:142: IncrementPromptCounter 0.0% +github.com/thebtf/engram/internal/db/gorm/session_store.go:176: GetPromptCounter 0.0% +github.com/thebtf/engram/internal/db/gorm/session_store.go:188: GetSessionsToday 0.0% +github.com/thebtf/engram/internal/db/gorm/session_store.go:204: GetAllProjects 0.0% +github.com/thebtf/engram/internal/db/gorm/session_store.go:220: ListSDKSessions 0.0% +github.com/thebtf/engram/internal/db/gorm/session_store.go:257: UpdateSessionOutcome 0.0% +github.com/thebtf/engram/internal/db/gorm/session_store.go:354: GetOutcome 0.0% +github.com/thebtf/engram/internal/db/gorm/session_store.go:378: resolveSessionForOutcome 0.0% +github.com/thebtf/engram/internal/db/gorm/session_store.go:403: UpdateUtilityPropagatedAt 0.0% +github.com/thebtf/engram/internal/db/gorm/session_store.go:421: UpdateUtilityPropagatedAtIfStale 0.0% +github.com/thebtf/engram/internal/db/gorm/session_store.go:436: ClearUtilityPropagatedAt 0.0% +github.com/thebtf/engram/internal/db/gorm/session_store.go:451: GetStrategyStats 0.0% +github.com/thebtf/engram/internal/db/gorm/session_store.go:488: GetLearningCurve 0.0% +github.com/thebtf/engram/internal/db/gorm/session_store.go:534: UpdateInjectionStrategy 0.0% +github.com/thebtf/engram/internal/db/gorm/session_store.go:543: toModelSDKSession 0.0% +github.com/thebtf/engram/internal/db/gorm/settings_store.go:32: NewSettingsStore 0.0% +github.com/thebtf/engram/internal/db/gorm/settings_store.go:40: Set 0.0% +github.com/thebtf/engram/internal/db/gorm/settings_store.go:123: Get 0.0% +github.com/thebtf/engram/internal/db/gorm/settings_store.go:140: List 0.0% +github.com/thebtf/engram/internal/db/gorm/settings_store.go:159: Delete 0.0% +github.com/thebtf/engram/internal/db/gorm/settings_store.go:185: modelSettingRowToModel 0.0% +github.com/thebtf/engram/internal/db/gorm/snapshot_store.go:34: TableName 100.0% +github.com/thebtf/engram/internal/db/gorm/snapshot_store.go:39: Value 88.9% +github.com/thebtf/engram/internal/db/gorm/snapshot_store.go:55: Scan 33.3% +github.com/thebtf/engram/internal/db/gorm/snapshot_store.go:74: parsePostgresArray 86.4% +github.com/thebtf/engram/internal/db/gorm/snapshot_store.go:109: toDomainSnapshot 70.0% +github.com/thebtf/engram/internal/db/gorm/snapshot_store.go:139: fromDomainSnapshot 70.0% +github.com/thebtf/engram/internal/db/gorm/snapshot_store.go:173: NewSnapshotStore 100.0% +github.com/thebtf/engram/internal/db/gorm/snapshot_store.go:180: Create 0.0% +github.com/thebtf/engram/internal/db/gorm/snapshot_store.go:184: createTx 66.7% +github.com/thebtf/engram/internal/db/gorm/snapshot_store.go:201: Get 0.0% +github.com/thebtf/engram/internal/db/gorm/snapshot_store.go:212: GetForUpdateTx 0.0% +github.com/thebtf/engram/internal/db/gorm/snapshot_store.go:228: GetByID 0.0% +github.com/thebtf/engram/internal/db/gorm/snapshot_store.go:238: List 0.0% +github.com/thebtf/engram/internal/db/gorm/snapshot_store.go:261: MarkRolledBack 0.0% +github.com/thebtf/engram/internal/db/gorm/snapshot_store.go:268: MarkRolledBackTx 0.0% +github.com/thebtf/engram/internal/db/gorm/snapshot_store.go:289: Pin 0.0% +github.com/thebtf/engram/internal/db/gorm/snapshot_store.go:310: AmendPromoteEntries 0.0% +github.com/thebtf/engram/internal/db/gorm/snapshot_store.go:320: amendPromoteEntriesTx 73.5% +github.com/thebtf/engram/internal/db/gorm/snapshot_store.go:391: DeleteOlderThan 0.0% +github.com/thebtf/engram/internal/db/gorm/state_store.go:23: Value 0.0% +github.com/thebtf/engram/internal/db/gorm/state_store.go:30: Scan 0.0% +github.com/thebtf/engram/internal/db/gorm/state_store.go:59: TableName 0.0% +github.com/thebtf/engram/internal/db/gorm/state_store.go:72: TableName 0.0% +github.com/thebtf/engram/internal/db/gorm/state_store.go:83: NewStateStore 0.0% +github.com/thebtf/engram/internal/db/gorm/state_store.go:88: WriteSessionState 0.0% +github.com/thebtf/engram/internal/db/gorm/state_store.go:137: ReadSessionState 0.0% +github.com/thebtf/engram/internal/db/gorm/state_store.go:156: WriteProjectState 0.0% +github.com/thebtf/engram/internal/db/gorm/state_store.go:200: ReadProjectState 0.0% +github.com/thebtf/engram/internal/db/gorm/state_store.go:211: readProjectStateRow 0.0% +github.com/thebtf/engram/internal/db/gorm/state_store.go:222: projectStateFromRow 0.0% +github.com/thebtf/engram/internal/db/gorm/state_store.go:232: ReadResumePacket 0.0% +github.com/thebtf/engram/internal/db/gorm/state_store.go:323: normalizeStateStoreResumePacketRequest 0.0% +github.com/thebtf/engram/internal/db/gorm/state_store.go:333: canonicalizeStateStoreResumeScopes 0.0% +github.com/thebtf/engram/internal/db/gorm/state_store.go:367: validateStateStoreResumePacketRequest 0.0% +github.com/thebtf/engram/internal/db/gorm/state_store.go:403: hasStateStoreResumeScope 0.0% +github.com/thebtf/engram/internal/db/gorm/state_store.go:412: sessionStateFromRow 0.0% +github.com/thebtf/engram/internal/db/gorm/state_store.go:432: resumePacketID 0.0% +github.com/thebtf/engram/internal/db/gorm/state_store.go:456: stateVersionFromTime 0.0% +github.com/thebtf/engram/internal/db/gorm/state_store.go:463: stateEvidenceRefsFromSlots 0.0% +github.com/thebtf/engram/internal/db/gorm/state_store.go:483: stateEvidenceRefsFromProjectRow 0.0% +github.com/thebtf/engram/internal/db/gorm/state_store.go:487: appendUniqueStateEvidenceRefs 0.0% +github.com/thebtf/engram/internal/db/gorm/state_store.go:503: stateActionFromProjectRow 0.0% +github.com/thebtf/engram/internal/db/gorm/state_store.go:525: stateVerificationFromProjectRow 0.0% +github.com/thebtf/engram/internal/db/gorm/state_store.go:533: parseStateStringSlice 0.0% +github.com/thebtf/engram/internal/db/gorm/state_store.go:554: cleanStateStrings 0.0% +github.com/thebtf/engram/internal/db/gorm/state_store.go:566: requireDB 0.0% +github.com/thebtf/engram/internal/db/gorm/state_store.go:573: stateActionFromSlots 0.0% +github.com/thebtf/engram/internal/db/gorm/state_store.go:581: stateVerificationFromSlots 0.0% +github.com/thebtf/engram/internal/db/gorm/state_store.go:589: parseStateAction 0.0% +github.com/thebtf/engram/internal/db/gorm/state_store.go:628: parseStateVerification 0.0% +github.com/thebtf/engram/internal/db/gorm/state_store.go:667: mapString 0.0% +github.com/thebtf/engram/internal/db/gorm/state_store.go:678: inferActionKind 0.0% +github.com/thebtf/engram/internal/db/gorm/state_store.go:685: inferVerificationKind 0.0% +github.com/thebtf/engram/internal/db/gorm/state_store.go:692: validActionKind 0.0% +github.com/thebtf/engram/internal/db/gorm/state_store.go:701: validVerificationKind 0.0% +github.com/thebtf/engram/internal/db/gorm/state_store.go:710: marshalJSONObject 0.0% +github.com/thebtf/engram/internal/db/gorm/state_store.go:724: validateSessionStateBudget 0.0% +github.com/thebtf/engram/internal/db/gorm/state_store.go:728: unmarshalJSONObject 0.0% +github.com/thebtf/engram/internal/db/gorm/state_store.go:764: LogResumeReadAudit 0.0% +github.com/thebtf/engram/internal/db/gorm/state_store.go:786: resumeReadAuditStateFrom 0.0% +github.com/thebtf/engram/internal/db/gorm/state_store.go:812: firstNonEmpty 0.0% +github.com/thebtf/engram/internal/db/gorm/state_store.go:821: logAuditAsync 0.0% +github.com/thebtf/engram/internal/db/gorm/store.go:44: NewStore 0.0% +github.com/thebtf/engram/internal/db/gorm/store.go:84: openGORM 0.0% +github.com/thebtf/engram/internal/db/gorm/store.go:97: resolveMaxConns 0.0% +github.com/thebtf/engram/internal/db/gorm/store.go:109: configurePool 0.0% +github.com/thebtf/engram/internal/db/gorm/store.go:123: WarmPool 0.0% +github.com/thebtf/engram/internal/db/gorm/store.go:151: Close 0.0% +github.com/thebtf/engram/internal/db/gorm/store.go:156: Ping 0.0% +github.com/thebtf/engram/internal/db/gorm/store.go:164: GetRawDB 0.0% +github.com/thebtf/engram/internal/db/gorm/store.go:169: GetDB 0.0% +github.com/thebtf/engram/internal/db/gorm/store.go:175: Stats 0.0% +github.com/thebtf/engram/internal/db/gorm/store.go:184: Optimize 0.0% +github.com/thebtf/engram/internal/db/gorm/store.go:199: HealthCheck 0.0% +github.com/thebtf/engram/internal/db/gorm/store.go:222: HealthCheckForce 0.0% +github.com/thebtf/engram/internal/db/gorm/store.go:238: performHealthCheck 0.0% +github.com/thebtf/engram/internal/db/gorm/store.go:274: poolStatsFromDBStats 0.0% +github.com/thebtf/engram/internal/db/gorm/store.go:289: applyHealthThresholds 0.0% +github.com/thebtf/engram/internal/db/gorm/store.go:372: NewPoolMetrics 0.0% +github.com/thebtf/engram/internal/db/gorm/store.go:384: RecordLatency 0.0% +github.com/thebtf/engram/internal/db/gorm/store.go:398: RecordPoolStats 0.0% +github.com/thebtf/engram/internal/db/gorm/store.go:414: GetMetricsSummary 0.0% +github.com/thebtf/engram/internal/db/gorm/store.go:442: computeLatencyStats 0.0% +github.com/thebtf/engram/internal/db/gorm/store.go:461: computeP95 0.0% +github.com/thebtf/engram/internal/db/gorm/store.go:485: GetMetrics 0.0% +github.com/thebtf/engram/internal/db/gorm/store.go:495: ResetMetrics 0.0% +github.com/thebtf/engram/internal/db/gorm/store.go:504: WithTimeout 0.0% +github.com/thebtf/engram/internal/db/gorm/store.go:526: ExecWithTimeout 0.0% +github.com/thebtf/engram/internal/db/gorm/store.go:543: QueryRowWithTimeout 0.0% +github.com/thebtf/engram/internal/db/gorm/store.go:555: TransactionWithTimeout 0.0% +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:21: mustParseTemporalTruthSentinel 75.0% +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:44: TableName 0.0% +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:81: NewTemporalTruthStore 0.0% +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:87: LoadStoredRecords 0.0% +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:97: LoadSelectedRecords 0.0% +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:105: loadStoredRecordRows 0.0% +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:134: RefreshProject 0.0% +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:164: requireDB 0.0% +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:171: loadProjectMemories 0.0% +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:183: buildTemporalTruthRows 0.0% +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:238: collapseTemporalTruthChainByValidFrom 0.0% +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:261: temporalTruthRootID 0.0% +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:281: temporalTruthMemoryValidFrom 0.0% +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:294: temporalTruthRowFromMemory 0.0% +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:310: temporalTruthMemoryValidUntil 0.0% +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:327: temporalTruthHasExplicitValidUntil 0.0% +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:331: temporalTruthInvalidatedAt 0.0% +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:342: temporalTruthInvalidationRationale 0.0% +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:352: isTemporalTruthOpenEnded 0.0% +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:356: temporalTruthReadValidUntil 0.0% +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:364: temporalTruthReadInvalidatedAt 0.0% +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:372: temporalTruthRowsToStoredRecords 0.0% +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:390: temporalTruthStoredRecordsToRecords 0.0% +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:408: temporalTruthProvenanceFromSourceMemoryIDs 0.0% +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:424: deriveTemporalTruthFactClass 0.0% +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:430: temporalTruthFactClassKey 100.0% +github.com/thebtf/engram/internal/db/gorm/token_store.go:19: NewTokenStore 0.0% +github.com/thebtf/engram/internal/db/gorm/token_store.go:24: Create 0.0% +github.com/thebtf/engram/internal/db/gorm/token_store.go:30: CreateWithPrincipal 0.0% +github.com/thebtf/engram/internal/db/gorm/token_store.go:58: List 0.0% +github.com/thebtf/engram/internal/db/gorm/token_store.go:70: FindByPrefix 0.0% +github.com/thebtf/engram/internal/db/gorm/token_store.go:82: Revoke 0.0% +github.com/thebtf/engram/internal/db/gorm/token_store.go:98: IncrementStats 0.0% +github.com/thebtf/engram/internal/db/gorm/token_store.go:109: IncrementErrorCount 0.0% +github.com/thebtf/engram/internal/db/gorm/token_store.go:117: GetByID 0.0% +github.com/thebtf/engram/internal/db/gorm/token_store.go:132: BatchIncrementStats 0.0% +github.com/thebtf/engram/internal/db/gorm/transcript_store.go:25: TableName 0.0% +github.com/thebtf/engram/internal/db/gorm/transcript_store.go:33: NewTranscriptStore 0.0% +github.com/thebtf/engram/internal/db/gorm/transcript_store.go:43: Create 0.0% +github.com/thebtf/engram/internal/db/gorm/transcript_store.go:57: ListUnprocessedSince 0.0% +github.com/thebtf/engram/internal/db/gorm/transcript_store.go:71: MarkProcessed 0.0% +github.com/thebtf/engram/internal/db/gorm/transcript_store.go:87: PruneProcessed 0.0% +github.com/thebtf/engram/internal/db/gorm/transcript_store.go:100: PruneUnprocessedOlderThan 0.0% +github.com/thebtf/engram/internal/db/gorm/user_store.go:17: NewUserStore 0.0% +github.com/thebtf/engram/internal/db/gorm/user_store.go:22: CreateUser 0.0% +github.com/thebtf/engram/internal/db/gorm/user_store.go:36: GetUserByEmail 0.0% +github.com/thebtf/engram/internal/db/gorm/user_store.go:45: GetUserByID 0.0% +github.com/thebtf/engram/internal/db/gorm/user_store.go:54: ListUsers 0.0% +github.com/thebtf/engram/internal/db/gorm/user_store.go:63: UpdateUser 0.0% +github.com/thebtf/engram/internal/db/gorm/user_store.go:75: CountUsers 0.0% +github.com/thebtf/engram/internal/db/gorm/user_store.go:84: CountAdmins 0.0% +github.com/thebtf/engram/internal/db/gorm/user_store.go:95: UpdateUserWithLastAdminGuard 0.0% +github.com/thebtf/engram/internal/db/gorm/versioned_document_store.go:33: TableName 0.0% +github.com/thebtf/engram/internal/db/gorm/versioned_document_store.go:48: TableName 0.0% +github.com/thebtf/engram/internal/db/gorm/versioned_document_store.go:57: NewVersionedDocumentStore 0.0% +github.com/thebtf/engram/internal/db/gorm/versioned_document_store.go:62: versionedDocHashContent 0.0% +github.com/thebtf/engram/internal/db/gorm/versioned_document_store.go:70: Create 0.0% +github.com/thebtf/engram/internal/db/gorm/versioned_document_store.go:129: ReadLatest 0.0% +github.com/thebtf/engram/internal/db/gorm/versioned_document_store.go:144: ReadVersion 0.0% +github.com/thebtf/engram/internal/db/gorm/versioned_document_store.go:159: List 0.0% +github.com/thebtf/engram/internal/db/gorm/versioned_document_store.go:179: DeleteBySourceBookJobID 0.0% +github.com/thebtf/engram/internal/db/gorm/versioned_document_store.go:195: versionedDocBuildListFilters 0.0% +github.com/thebtf/engram/internal/db/gorm/versioned_document_store.go:217: GetHistory 0.0% +github.com/thebtf/engram/internal/db/gorm/versioned_document_store.go:236: AddComment 0.0% +github.com/thebtf/engram/internal/db/gorm/versioned_document_store.go:257: GetComments 0.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:33: effectiveAuditWriter 0.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:44: isAuditEnabled 0.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:52: runAuditAsync 0.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:77: marshalState 0.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:92: logAuditCreate 0.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:117: logAuditEdit 0.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:142: logAuditDelete 0.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:166: logAuditGeneric 0.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:189: logAuditSupersede 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:30: parseArgs 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:46: coerceString 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:67: coerceInt 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:97: coerceInt64 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:127: coerceFloat64 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:151: coerceBool 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:177: coerceStringSlice 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:204: coerceInt64Slice 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:222: clampToInt 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:236: clampInt64ToInt 0.0% +github.com/thebtf/engram/internal/mcp/context.go:17: extractProjectFromHeader 0.0% +github.com/thebtf/engram/internal/mcp/context.go:22: contextWithProject 0.0% +github.com/thebtf/engram/internal/mcp/context.go:29: ContextWithProject 0.0% +github.com/thebtf/engram/internal/mcp/context.go:35: projectFromContext 0.0% +github.com/thebtf/engram/internal/mcp/context.go:41: contextWithSession 0.0% +github.com/thebtf/engram/internal/mcp/context.go:48: ContextWithSession 0.0% +github.com/thebtf/engram/internal/mcp/context.go:54: sessionFromContext 0.0% +github.com/thebtf/engram/internal/mcp/context.go:61: actorFromContext 0.0% +github.com/thebtf/engram/internal/mcp/health.go:22: NewMCPHealth 0.0% +github.com/thebtf/engram/internal/mcp/health.go:29: RecordRequest 0.0% +github.com/thebtf/engram/internal/mcp/health.go:36: RecordError 0.0% +github.com/thebtf/engram/internal/mcp/health.go:42: rotateWindowIfNeeded 0.0% +github.com/thebtf/engram/internal/mcp/health.go:55: HandleHealth 0.0% +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:28: ruleGovernanceCaptureEnabled 0.0% +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:39: captureActiveRuleIntent 0.0% +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:104: ruleIntentFingerprint 0.0% +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:113: marshalRuleCandidateIntentResponse 0.0% +github.com/thebtf/engram/internal/mcp/server.go:127: NewServer 100.0% +github.com/thebtf/engram/internal/mcp/server.go:141: SetBackfillStatusFunc 0.0% +github.com/thebtf/engram/internal/mcp/server.go:146: SetVersionedDocumentStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:151: SetIssueStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:156: SetMemoryStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:161: SetMetaMemoryIndex 0.0% +github.com/thebtf/engram/internal/mcp/server.go:166: SetHintQueue 0.0% +github.com/thebtf/engram/internal/mcp/server.go:171: SetStateStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:176: SetDirectiveCaptureService 0.0% +github.com/thebtf/engram/internal/mcp/server.go:181: SetBehavioralRulesStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:186: SetRuleGovernanceStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:191: SetRuleInjectionTelemetryStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:195: SetPromotionStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:199: SetGraphStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:204: SetNodesStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:211: SetAuditStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:216: SetPurgeStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:222: SetCandidateStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:228: SetSnapshotStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:234: SetBulkFacade 0.0% +github.com/thebtf/engram/internal/mcp/server.go:240: setTestAuditWriter 0.0% +github.com/thebtf/engram/internal/mcp/server.go:246: setTestMemoryEditor 0.0% +github.com/thebtf/engram/internal/mcp/server.go:252: setTestMemorySignificanceUpdater 0.0% +github.com/thebtf/engram/internal/mcp/server.go:260: SetWriteLintOrchestrator 0.0% +github.com/thebtf/engram/internal/mcp/server.go:269: SetRedactionRules 0.0% +github.com/thebtf/engram/internal/mcp/server.go:274: SetEmbeddingStores 0.0% +github.com/thebtf/engram/internal/mcp/server.go:282: SetRerankClient 0.0% +github.com/thebtf/engram/internal/mcp/server.go:290: SetStatsDB 0.0% +github.com/thebtf/engram/internal/mcp/server.go:297: HandleRequest 0.0% +github.com/thebtf/engram/internal/mcp/server.go:303: ListTools 0.0% +github.com/thebtf/engram/internal/mcp/server.go:332: Version 0.0% +github.com/thebtf/engram/internal/mcp/server.go:383: Run 0.0% +github.com/thebtf/engram/internal/mcp/server.go:427: handleRequest 0.0% +github.com/thebtf/engram/internal/mcp/server.go:461: handleNotification 0.0% +github.com/thebtf/engram/internal/mcp/server.go:473: handleInitialize 0.0% +github.com/thebtf/engram/internal/mcp/server.go:496: buildInstructions 0.0% +github.com/thebtf/engram/internal/mcp/server.go:660: storeMemoryTool 0.0% +github.com/thebtf/engram/internal/mcp/server.go:712: recallMemoryTool 0.0% +github.com/thebtf/engram/internal/mcp/server.go:805: primaryTools 0.0% +github.com/thebtf/engram/internal/mcp/server.go:942: handleToolsList 0.0% +github.com/thebtf/engram/internal/mcp/server.go:1612: handleToolsCall 0.0% +github.com/thebtf/engram/internal/mcp/server.go:1644: sanitizeToolCallArgs 0.0% +github.com/thebtf/engram/internal/mcp/server.go:1656: callTool 5.2% +github.com/thebtf/engram/internal/mcp/server.go:1874: sendResponse 0.0% +github.com/thebtf/engram/internal/mcp/server.go:1884: sendError 0.0% +github.com/thebtf/engram/internal/mcp/server.go:1896: handleFindSimilarObservations 0.0% +github.com/thebtf/engram/internal/mcp/server.go:1927: handleGetMemoryStats 0.0% +github.com/thebtf/engram/internal/mcp/server.go:2055: handleBackfillStatus 0.0% +github.com/thebtf/engram/internal/mcp/server.go:2071: handleCheckSystemHealth 0.0% +github.com/thebtf/engram/internal/mcp/server.go:2216: handleAnalyzeSearchPatterns 0.0% +github.com/thebtf/engram/internal/mcp/server.go:2246: handleSearchSessions 0.0% +github.com/thebtf/engram/internal/mcp/server.go:2251: handleListSessions 0.0% +github.com/thebtf/engram/internal/mcp/tools_admin.go:18: buildAdminTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_admin.go:68: adminActionsForEnv 33.3% +github.com/thebtf/engram/internal/mcp/tools_admin.go:80: vnextEnabled 0.0% +github.com/thebtf/engram/internal/mcp/tools_admin.go:84: handleAdmin 0.0% +github.com/thebtf/engram/internal/mcp/tools_admin.go:120: handlePurgeProject 0.0% +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:27: ambientHintsEnabledFromEnv 0.0% +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:32: ambientHintsTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:48: handleGetAmbientHints 0.0% +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:86: normalizeAmbientHintsToolLimit 0.0% +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:96: ambientHintItems 0.0% +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:114: errMissingSessionID 0.0% +github.com/thebtf/engram/internal/mcp/tools_brief.go:31: handleGetMemoryBrief 0.0% +github.com/thebtf/engram/internal/mcp/tools_brief.go:107: memoryBriefUsesPrincipalScope 0.0% +github.com/thebtf/engram/internal/mcp/tools_brief.go:115: handlePrincipalMemoryBrief 0.0% +github.com/thebtf/engram/internal/mcp/tools_brief.go:259: truncateBriefContent 0.0% +github.com/thebtf/engram/internal/mcp/tools_brief.go:270: filterInjectionByScope 0.0% +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:29: parseBulkStructuredArgs 100.0% +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:69: bulkOpsTools 0.0% +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:139: handleBulkPromote 80.0% +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:196: handleBulkDelete 80.0% +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:251: handleBulkSupersede 80.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:31: candidateItemFromDomain 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:51: newCandidateReviewSnapshot 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:59: requireCandidateReviewSnapshot 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:68: candidateTools 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:165: handleListCandidates 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:208: handleGetCandidate 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:239: handlePromoteCandidate 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:348: handleRejectCandidate 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:402: handleSupersedeCandidate 0.0% +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:34: codeIntelEnabled 0.0% +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:42: SetCodeChunkStore 0.0% +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:48: codebaseSearchTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:79: codebaseStatusTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:100: handleCodebaseSearch 0.0% +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:194: handleCodebaseStatus 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:21: getVault 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:35: credentialStore 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:49: handleStoreCredential 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:130: handleGetCredential 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:192: handleListCredentials 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:243: handleDeleteCredential 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:302: handleVaultStatus 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:338: expandTagHierarchy 0.0% +github.com/thebtf/engram/internal/mcp/tools_directives.go:16: directivesCaptureEnabledFromEnv 0.0% +github.com/thebtf/engram/internal/mcp/tools_directives.go:20: rememberDirectiveTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_directives.go:38: currentDirectiveCaptureService 0.0% +github.com/thebtf/engram/internal/mcp/tools_directives.go:48: handleRememberDirective 0.0% +github.com/thebtf/engram/internal/mcp/tools_directives.go:72: parseRememberDirectiveArgs 0.0% +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:10: handleDocsConsolidated 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents.go:15: handleListCollections 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents.go:61: handleListDocuments 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents.go:121: handleGetDocument 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents.go:165: handleRemoveDocument 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents.go:197: handleIngestDocument 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents.go:235: handleSearchCollection 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:15: handleDocCreate 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:61: handleDocRead 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:117: handleDocUpdate 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:122: handleDocList 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:175: handleDocHistory 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:232: handleDocComment 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:19: SetExperienceProvider 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:23: experienceHistoryTools 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:40: experienceHistoryReadSchema 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:65: experienceHistoryDetailSchema 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:82: experienceHistoryTriggerEnum 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:91: handleExperienceHistoryRead 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:103: handleExperienceHistoryDetail 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:115: parseExperienceHistoryReadArgs 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:142: parseExperienceHistoryDetailArgs 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:157: experienceHistoryTriggersFromArgs 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:180: marshalExperienceHistory 0.0% +github.com/thebtf/engram/internal/mcp/tools_feedback.go:12: handleFeedbackConsolidated 0.0% +github.com/thebtf/engram/internal/mcp/tools_feedback.go:36: handleSetSessionOutcome 0.0% +github.com/thebtf/engram/internal/mcp/tools_governance.go:27: governanceTools 0.0% +github.com/thebtf/engram/internal/mcp/tools_governance.go:98: handleListSnapshots 0.0% +github.com/thebtf/engram/internal/mcp/tools_governance.go:167: handleRollbackSnapshot 0.0% +github.com/thebtf/engram/internal/mcp/tools_governance.go:215: handlePinSnapshot 0.0% +github.com/thebtf/engram/internal/mcp/tools_governance.go:258: handleRedactionRulesStatus 0.0% +github.com/thebtf/engram/internal/mcp/tools_governance.go:284: resolveGovernanceActor 60.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:64: handleGraph 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:100: graphAddEdge 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:216: mcpGraphEndpointExists 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:243: mcpGraphEdgeAlreadyExists 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:276: graphAddNode 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:317: graphRemoveEdge 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:332: graphGetEdges 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:397: filterEdgesByNodeType 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:457: graphTraverse 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:480: graphFindPath 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:502: graphSynonyms 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:23: graphCreateEdgeWithGuards 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:80: graphEndpointExistsWithGuards 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:114: graphDuplicateEdgeExists 0.0% +github.com/thebtf/engram/internal/mcp/tools_ingest.go:25: handleIngest 0.0% +github.com/thebtf/engram/internal/mcp/tools_ingest.go:43: ingestDocument 0.0% +github.com/thebtf/engram/internal/mcp/tools_instincts.go:20: handleImportInstincts 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:19: issuesToolSchema 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:109: validateIssueActionParams 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:143: handleIssues 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:189: resolveSourceProject 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:205: handleIssueCreate 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:250: handleIssueList 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:311: handleIssueGet 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:344: handleIssueUpdate 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:382: handleIssueComment 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:408: handleIssueReopen 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:425: handleIssueClose 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:22: handleLifecycle 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:48: lifecycleInfo 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:87: lifecyclePromote 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:118: lifecycleDemote 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:149: lifecycleSetConfidence 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:172: lifecycleSetDefeasibility 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:191: lifecycleSleepStatus 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:197: lifecycleDecayPreview 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:233: marshalJSON 75.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:35: vnextFEnabled 100.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:42: isValidPrivacyScope 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:54: derivePrivacyScopeFromLegacy 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:82: deriveLegacyScopeFromPrivacy 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:93: applyPrincipalMemoryMetadata 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:135: addPrincipalMemoryFields 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:161: newScopedWriteLintMemoryStore 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:172: writeLintVisibilityCaller 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:186: writeLintVisibilityOptions 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:192: scopedWriteLintMemoryStore 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:202: filterVisibleWriteGateCandidates 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:214: domainManageAllowed 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:218: List 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:272: writeLintVisibilityFetchLimit 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:286: Get 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:297: Create 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:301: Update 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:305: MarkSuperseded 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:319: effectiveMemoryEditor 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:329: isValidStoreObservationType 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:354: handleStoreMemory 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1111: handleEditMemory 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1218: computeTTLDays 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1258: truncateTitle 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1270: keepRecallMemory 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1280: keepRecallMemoryFilters 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1342: handleRecallMemory 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1690: staleAdvisory 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1700: marshalWithStaleAdvisory 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1727: Rank 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1751: handleRecallMemoryHybrid 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:2252: handleRateMemory 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:2281: handleSuppressMemory 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:17: SetDomainRegistryService 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:21: checkDomainWriteMCP 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:43: addDomainWriteDecisionFields 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:51: marshalStoreMemoryAugmented 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:26: newMemoryStoreSignificanceUpdater 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:33: s6OutcomeEnabledFromEnv 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:37: effectiveMemorySignificanceUpdater 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:47: currentMemorySignificanceUpdater 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:58: rateMemorySignificanceTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:74: handleRateMemorySignificance 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:109: RateMemorySignificance 0.0% +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:18: s2MetaMemoryEnabled 0.0% +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:22: knowAboutTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:39: handleKnowAbout 0.0% +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:104: parseKnowAboutLimit 0.0% +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:118: summarizeMetaIndexTags 0.0% +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:153: summarizeMetaIndexDateRange 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:23: SetPrincipalMemoryQueryService 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:27: principalMemoryQueryTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:52: handleQueryPrincipalMemory 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:134: principalMemoryQueryCaller 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:149: parsePrincipalMemoryQueryLimit 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:160: principalMemoryQueryText 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:167: parsePrincipalMemoryQueryVisibility 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:179: parsePrincipalMemoryQueryOffset 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:190: parsePrincipalMemoryQueryInt 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:215: parsePrincipalMemoryQueryBool 0.0% +github.com/thebtf/engram/internal/mcp/tools_recall.go:28: handleRecall 0.0% +github.com/thebtf/engram/internal/mcp/tools_recall.go:125: parseRecallIncludedPrincipals 0.0% +github.com/thebtf/engram/internal/mcp/tools_recall.go:165: appendRecallIncludedPrincipalMemories 0.0% +github.com/thebtf/engram/internal/mcp/tools_recall.go:223: recallIncludeTargetMatchesCaller 0.0% +github.com/thebtf/engram/internal/mcp/tools_recall.go:231: recallPrincipalQueryItemToMemory 0.0% +github.com/thebtf/engram/internal/mcp/tools_recall.go:247: handleRecallSearch 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:20: currentReviewLoopCandidateLister 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:30: reviewLoopCandidateTools 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:65: reviewLoopReadSchema 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:78: reviewPacketIDSchema 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:91: handleReviewMetricsRead 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:110: handleReviewQueueRead 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:140: handleReviewPacketDetail 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:151: handleReviewPacketPreviewAction 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:167: handleReviewPacketApplyAction 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:189: parseReviewLoopReadArgs 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:212: reviewLoopMCPPacketTypeSupported 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:217: reviewLoopActionFromArgs 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:225: reviewLoopReasonFromArgs 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:233: loadReviewPacketCandidate 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:256: applyReviewPacketPreserve 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:278: applyReviewPacketSuppress 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:296: reviewLoopMemoryFromCandidate 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:320: filterRiskyMCPReviewCandidates 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:330: marshalReviewLoop 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:17: ruleGovernanceReadTools 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:126: handleRuleGovernanceHealth 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:176: handleRuleGovernanceQueue 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:233: handleRuleGovernanceSnapshots 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:278: handleRuleGovernanceUsefulness 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:338: handleRuleGovernanceTransition 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:373: handleRuleGovernancePinSnapshot 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:406: handleRuleGovernanceRollback 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:483: requireRuleGovernanceReadAccess 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:495: requireRuleGovernanceProjectOrAdmin 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:505: ruleGovernanceCallerIsAdmin 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:510: requireRuleGovernanceAdminAccess 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:518: redactRuleGovernanceEvidenceHandles 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:535: redactRuleGovernanceEvidenceHandle 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:553: ruleGovernanceEvidenceHandleHasSensitiveText 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:559: isCanonicalRuleGovernanceEvidenceHandle 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:580: isSafeRuleGovernanceEvidenceID 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:594: parseRuleGovernanceTransitionRequest 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:604: parseRuleGovernanceSince 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:623: boundedRuleGovernanceLimit 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:634: formatRuleGovernanceTime 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:641: formatRuleGovernanceTimePtr 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:649: stringRuleCandidateStatusCounts 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:657: stringRuleVersionStateCounts 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:665: stringRuleArbiterRunStatusCounts 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:673: stringRuleInjectionEventTypeCounts 0.0% +github.com/thebtf/engram/internal/mcp/tools_rules.go:17: handleStoreRule 0.0% +github.com/thebtf/engram/internal/mcp/tools_rules.go:133: handleListRules 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:22: handleSettingsConsolidated 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:51: SetSettingsStore 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:57: settingsStore 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:67: isSecretSettingKey 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:74: requireAdmin 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:85: handleSetSetting 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:145: handleGetSetting 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:181: handleListSettings 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:216: handleDeleteSetting 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:35: resumeScopesFromFields 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:52: stateTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:82: setStateTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:142: handleGetState 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:219: handleSetState 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:274: decodeSessionStateForWrite 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:292: validateSessionStateBudget 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:303: validateNativeResumePacket 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:349: decodeProjectStateForWrite 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:364: requireStateObject 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:383: requireNestedObject 0.0% +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:10: handleStoreConsolidated 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:21: SetTemporalTruthProvider 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:25: temporalTruthEnabledFromEnv 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:30: temporalTruthTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:39: temporalTruthRefreshTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:48: temporalTruthRefreshSchema 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:58: temporalTruthSchema 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:72: currentTemporalTruthProvider 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:82: handleTemporalTruth 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:102: handleTemporalTruthRefresh 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:122: parseTemporalTruthArgs 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:151: parseTemporalTruthRefreshProject 0.0% +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:10: handleVaultConsolidated 0.0% +total: (statements) 9.0% +test_exit=0 +active_sessions_before_terminate=0 +database_residue=0 +activity_residue=0 +finished_utc=2026-07-10T08:47:10.7006897Z diff --git a/.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/16-final-residue.log b/.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/16-final-residue.log new file mode 100644 index 00000000..0f142b18 --- /dev/null +++ b/.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/16-final-residue.log @@ -0,0 +1,6 @@ +checked_utc=2026-07-10T09:10:54.3826001Z +database_query=SELECT count(*) FROM pg_database WHERE datname LIKE 'engram_mkr_bedge_%'; +database_residue=0 +activity_query=SELECT count(*) FROM pg_stat_activity WHERE datname LIKE 'engram_mkr_bedge_%'; +activity_residue=0 +exit_code=0 diff --git a/.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/17-review-red-authoritative-binding.log b/.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/17-review-red-authoritative-binding.log new file mode 100644 index 00000000..559bad2a --- /dev/null +++ b/.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/17-review-red-authoritative-binding.log @@ -0,0 +1,89 @@ +base_sha=68b2ce5835c7c6efdf1c68da9eedcb8d9c3837ef +head_sha=68b2ce5835c7c6efdf1c68da9eedcb8d9c3837ef +database=engram_mkr_bedge_review_red_auth_20260710a +command=go test -p=1 ./internal/db/gorm -run ^TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites$ -count=1 +started_utc=2026-07-10T09:00:25.4966846Z + +2026/07/10 12:00:28 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/migrations.go:483 ERROR: column "is_deprecated" does not exist (SQLSTATE 42703) +[2.500ms] [rows:0] CREATE INDEX IF NOT EXISTS idx_patterns_frequency + ON patterns(frequency DESC, last_seen_at_epoch DESC) + WHERE is_deprecated = 0 + +2026/07/10 12:00:28 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/migrations.go:578 ERROR: column "is_deprecated" does not exist (SQLSTATE 42703) +[0.999ms] [rows:0] CREATE INDEX IF NOT EXISTS idx_patterns_type_project + ON patterns(type, project, frequency DESC) + WHERE is_deprecated = 0 + +2026/07/10 12:00:28 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/migrations.go:578 ERROR: column "source_observation_id" does not exist (SQLSTATE 42703) +[1.001ms] [rows:0] CREATE INDEX IF NOT EXISTS idx_relations_source_type + ON observation_relations(source_observation_id, relation_type) + +2026/07/10 12:00:28 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/migrations.go:578 ERROR: column "target_observation_id" does not exist (SQLSTATE 42703) +[0.503ms] [rows:0] CREATE INDEX IF NOT EXISTS idx_relations_target_type + ON observation_relations(target_observation_id, relation_type) + +2026/07/10 12:00:28 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/migrations.go:670 ERROR: column "source_observation_id" does not exist (SQLSTATE 42703) +[1.000ms] [rows:0] CREATE INDEX IF NOT EXISTS idx_relations_source_type_target + ON observation_relations(source_observation_id, relation_type, target_observation_id) + +2026/07/10 12:00:28 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/migrations.go:670 ERROR: column "target_observation_id" does not exist (SQLSTATE 42703) +[0.498ms] [rows:0] CREATE INDEX IF NOT EXISTS idx_relations_target_type_source + ON observation_relations(target_observation_id, relation_type, source_observation_id) + +2026/07/10 12:00:28 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/migrations.go:1447 ERROR: relation "observation_vectors" does not exist (SQLSTATE 42P01) +[1.001ms] [rows:0] + DELETE FROM observation_vectors + WHERE id IN ( + SELECT ov.id FROM observation_vectors ov + LEFT JOIN observations o ON ov.metadata->>'sqlite_id' = o.id::text + WHERE o.id IS NULL + ) + +{"level":"warn","error":"ERROR: relation \"observation_vectors\" does not exist (SQLSTATE 42P01)","time":"2026-07-10T12:00:28+03:00","message":"migration 040: orphan vector cleanup failed (non-fatal)"} +{"level":"info","garbage_deleted":0,"orphan_vectors_deleted":0,"time":"2026-07-10T12:00:28+03:00","message":"migration 040: garbage cleanup complete"} +{"level":"info","orphan_vectors_deleted":0,"time":"2026-07-10T12:00:28+03:00","message":"migration 041: orphan vector purge complete"} +{"level":"info","patterns_deleted":0,"time":"2026-07-10T12:00:28+03:00","message":"migration 042: low-quality pattern purge complete"} +{"level":"info","total_deleted":0,"time":"2026-07-10T12:00:28+03:00","message":"migration 043: radical observation cleanup complete"} + +2026/07/10 12:00:29 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/migrations.go:3502 ERROR: extension "vectorscale" is not available (SQLSTATE 0A000) +[0.500ms] [rows:0] CREATE EXTENSION IF NOT EXISTS vectorscale CASCADE +{"level":"warn","error":"ERROR: extension \"vectorscale\" is not available (SQLSTATE 0A000)","time":"2026-07-10T12:00:29+03:00","message":"migration 109: vectorscale extension not available, skipping DiskANN index"} +--- FAIL: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites (3.71s) + --- FAIL: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/promote/forged_payload_and_source_session (0.04s) + candidate_store_test.go:858: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/candidate_store_test.go:858 + Error: An error is expected but got nil. + Test: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/promote/forged_payload_and_source_session + Messages: invalid candidate-review snapshot binding must fail closed + --- FAIL: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/preserve/forged_payload_and_source_session (0.02s) + candidate_store_test.go:858: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/candidate_store_test.go:858 + Error: An error is expected but got nil. + Test: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/preserve/forged_payload_and_source_session + Messages: invalid candidate-review snapshot binding must fail closed + --- FAIL: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/reject/forged_payload_and_source_session (0.02s) + candidate_store_test.go:858: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/candidate_store_test.go:858 + Error: An error is expected but got nil. + Test: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/reject/forged_payload_and_source_session + Messages: invalid candidate-review snapshot binding must fail closed + --- FAIL: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/suppress/forged_payload_and_source_session (0.02s) + candidate_store_test.go:858: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/candidate_store_test.go:858 + Error: An error is expected but got nil. + Test: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/suppress/forged_payload_and_source_session + Messages: invalid candidate-review snapshot binding must fail closed + --- FAIL: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/supersede/forged_payload_and_source_session (0.02s) + candidate_store_test.go:858: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/candidate_store_test.go:858 + Error: An error is expected but got nil. + Test: TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites/supersede/forged_payload_and_source_session + Messages: invalid candidate-review snapshot binding must fail closed +FAIL +FAIL github.com/thebtf/engram/internal/db/gorm 3.804s +FAIL +test_exit=1 +active_sessions_before_terminate=0 +database_residue=0 +activity_residue=0 +finished_utc=2026-07-10T09:00:33.1311874Z diff --git a/.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/18-review-green-authoritative-binding.log b/.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/18-review-green-authoritative-binding.log new file mode 100644 index 00000000..1d0ddcdb --- /dev/null +++ b/.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/18-review-green-authoritative-binding.log @@ -0,0 +1,88 @@ +base_sha=68b2ce5835c7c6efdf1c68da9eedcb8d9c3837ef +head_sha=68b2ce5835c7c6efdf1c68da9eedcb8d9c3837ef +database=engram_mkr_bedge_review_green_auth_20260710a +command=go test -p=1 ./internal/db/gorm ./internal/mcp -run ^(TestCandidateStore_PromoteWithMemoryAndSnapshot_AmendFailureRollsBackPromotion|TestCandidateStore_PreserveWithMemoryAndSnapshot_RequiresCandidateReviewSnapshotBeforeMutation|TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites|TestCandidateStore_AllCandidateReviewSnapshotSeamsCommitExactlyOneAudit|TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs|TestBulkOps_PublicDispatchPreservesExactIntegralIDsBeforeNormalization|TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade|TestBulkOps_WiredFacadeReceivesExactNormalizedIDsAndStrictDryRun)$ -count=1 +started_utc=2026-07-10T09:02:05.5443407Z + +2026/07/10 12:02:08 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/migrations.go:483 ERROR: column "is_deprecated" does not exist (SQLSTATE 42703) +[2.002ms] [rows:0] CREATE INDEX IF NOT EXISTS idx_patterns_frequency + ON patterns(frequency DESC, last_seen_at_epoch DESC) + WHERE is_deprecated = 0 + +2026/07/10 12:02:08 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/migrations.go:578 ERROR: column "is_deprecated" does not exist (SQLSTATE 42703) +[1.000ms] [rows:0] CREATE INDEX IF NOT EXISTS idx_patterns_type_project + ON patterns(type, project, frequency DESC) + WHERE is_deprecated = 0 + +2026/07/10 12:02:08 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/migrations.go:578 ERROR: column "source_observation_id" does not exist (SQLSTATE 42703) +[0.500ms] [rows:0] CREATE INDEX IF NOT EXISTS idx_relations_source_type + ON observation_relations(source_observation_id, relation_type) + +2026/07/10 12:02:08 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/migrations.go:578 ERROR: column "target_observation_id" does not exist (SQLSTATE 42703) +[1.000ms] [rows:0] CREATE INDEX IF NOT EXISTS idx_relations_target_type + ON observation_relations(target_observation_id, relation_type) + +2026/07/10 12:02:08 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/migrations.go:670 ERROR: column "source_observation_id" does not exist (SQLSTATE 42703) +[0.502ms] [rows:0] CREATE INDEX IF NOT EXISTS idx_relations_source_type_target + ON observation_relations(source_observation_id, relation_type, target_observation_id) + +2026/07/10 12:02:08 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/migrations.go:670 ERROR: column "target_observation_id" does not exist (SQLSTATE 42703) +[0.999ms] [rows:0] CREATE INDEX IF NOT EXISTS idx_relations_target_type_source + ON observation_relations(target_observation_id, relation_type, source_observation_id) + +2026/07/10 12:02:09 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/migrations.go:1447 ERROR: relation "observation_vectors" does not exist (SQLSTATE 42P01) +[0.500ms] [rows:0] + DELETE FROM observation_vectors + WHERE id IN ( + SELECT ov.id FROM observation_vectors ov + LEFT JOIN observations o ON ov.metadata->>'sqlite_id' = o.id::text + WHERE o.id IS NULL + ) + +{"level":"warn","error":"ERROR: relation \"observation_vectors\" does not exist (SQLSTATE 42P01)","time":"2026-07-10T12:02:09+03:00","message":"migration 040: orphan vector cleanup failed (non-fatal)"} +{"level":"info","garbage_deleted":0,"orphan_vectors_deleted":0,"time":"2026-07-10T12:02:09+03:00","message":"migration 040: garbage cleanup complete"} +{"level":"info","orphan_vectors_deleted":0,"time":"2026-07-10T12:02:09+03:00","message":"migration 041: orphan vector purge complete"} +{"level":"info","patterns_deleted":0,"time":"2026-07-10T12:02:09+03:00","message":"migration 042: low-quality pattern purge complete"} +{"level":"info","total_deleted":0,"time":"2026-07-10T12:02:09+03:00","message":"migration 043: radical observation cleanup complete"} + +2026/07/10 12:02:10 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/migrations.go:3502 ERROR: extension "vectorscale" is not available (SQLSTATE 0A000) +[0.500ms] [rows:0] CREATE EXTENSION IF NOT EXISTS vectorscale CASCADE +{"level":"warn","error":"ERROR: extension \"vectorscale\" is not available (SQLSTATE 0A000)","time":"2026-07-10T12:02:10+03:00","message":"migration 109: vectorscale extension not available, skipping DiskANN index"} +--- FAIL: TestCandidateStore_PromoteWithMemoryAndSnapshot_AmendFailureRollsBackPromotion (2.66s) + candidate_store_test.go:501: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/candidate_store_test.go:501 + Error: "promote_with_memory_snapshot: candidate review snapshot before payload does not match authoritative candidate" does not contain "forced snapshot amend failure" + Test: TestCandidateStore_PromoteWithMemoryAndSnapshot_AmendFailureRollsBackPromotion +--- FAIL: TestCandidateStore_PreserveWithMemoryAndSnapshot_RequiresCandidateReviewSnapshotBeforeMutation (0.00s) +panic: runtime error: invalid memory address or nil pointer dereference [recovered, repanicked] +[signal 0xc0000005 code=0x0 addr=0x0 pc=0x7ff73820555b] + +goroutine 16 [running]: +testing.tRunner.func1.2({0x7ff7387751a0, 0x7ff738f4d030}) + C:/Users/btf/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.25.11.windows-amd64/src/testing/testing.go:1872 +0x239 +testing.tRunner.func1() + C:/Users/btf/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.25.11.windows-amd64/src/testing/testing.go:1875 +0x35b +panic({0x7ff7387751a0?, 0x7ff738f4d030?}) + C:/Users/btf/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.25.11.windows-amd64/src/runtime/panic.go:783 +0x132 +gorm.io/gorm.(*DB).Session(0x0, 0xc000543b90) + C:/Users/btf/go/pkg/mod/gorm.io/gorm@v1.31.1/gorm.go:252 +0x3b +gorm.io/gorm.(*DB).WithContext(...) + C:/Users/btf/go/pkg/mod/gorm.io/gorm@v1.31.1/gorm.go:353 +github.com/thebtf/engram/internal/db/gorm.(*CandidateStore).promoteWithMemoryAndSnapshotAction(0xc00004df50, {0x7ff7389c6428, 0x7ff738fbfaa0}, 0x0, 0x2a, 0xc00004dd58, 0x0, {0x7ff73886bfc5, 0xe}, {0x7ff738866b58, ...}, ...) + D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/candidate_store.go:427 +0x128 +github.com/thebtf/engram/internal/db/gorm.(*CandidateStore).PreserveWithMemoryAndSnapshot(0x7ff738a21c37?, {0x7ff7389c6428?, 0x7ff738fbfaa0?}, 0x0?, 0x210022?, 0x0?, 0x7ff737f3a4d7?, {0x7ff73886bfc5?, 0x0?}) + D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/candidate_store.go:399 +0x54 +github.com/thebtf/engram/internal/db/gorm.TestCandidateStore_PreserveWithMemoryAndSnapshot_RequiresCandidateReviewSnapshotBeforeMutation(0xc0007821c0) + D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/candidate_store_test.go:556 +0x111 +testing.tRunner(0xc0007821c0, 0x7ff7388d3638) + C:/Users/btf/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.25.11.windows-amd64/src/testing/testing.go:1934 +0xc3 +created by testing.(*T).Run in goroutine 1 + C:/Users/btf/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.25.11.windows-amd64/src/testing/testing.go:1997 +0x44b +FAIL github.com/thebtf/engram/internal/db/gorm 2.759s +ok github.com/thebtf/engram/internal/mcp 0.091s +FAIL +test_exit=1 +active_sessions_before_terminate=0 +database_residue=0 +activity_residue=0 +finished_utc=2026-07-10T09:02:14.8179546Z diff --git a/.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/19-review-green-authoritative-binding.log b/.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/19-review-green-authoritative-binding.log new file mode 100644 index 00000000..376cd384 --- /dev/null +++ b/.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/19-review-green-authoritative-binding.log @@ -0,0 +1,12 @@ +base_sha=68b2ce5835c7c6efdf1c68da9eedcb8d9c3837ef +head_sha=68b2ce5835c7c6efdf1c68da9eedcb8d9c3837ef +database=engram_mkr_bedge_review_green_auth_20260710b +command=go test -p=1 ./internal/db/gorm ./internal/mcp -run ^(TestCandidateStore_PromoteWithMemoryAndSnapshot_AmendFailureRollsBackPromotion|TestCandidateStore_PreserveWithMemoryAndSnapshot_RequiresCandidateReviewSnapshotBeforeMutation|TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites|TestCandidateStore_AllCandidateReviewSnapshotSeamsCommitExactlyOneAudit|TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs|TestBulkOps_PublicDispatchPreservesExactIntegralIDsBeforeNormalization|TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade|TestBulkOps_WiredFacadeReceivesExactNormalizedIDsAndStrictDryRun)$ -count=1 +started_utc=2026-07-10T09:04:05.0529053Z +ok github.com/thebtf/engram/internal/db/gorm 3.640s +ok github.com/thebtf/engram/internal/mcp 0.100s +test_exit=0 +active_sessions_before_terminate=0 +database_residue=0 +activity_residue=0 +finished_utc=2026-07-10T09:04:15.0515007Z diff --git a/.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/20-review-repeat20.log b/.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/20-review-repeat20.log new file mode 100644 index 00000000..03eb34e0 --- /dev/null +++ b/.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/20-review-repeat20.log @@ -0,0 +1,12 @@ +base_sha=68b2ce5835c7c6efdf1c68da9eedcb8d9c3837ef +head_sha=68b2ce5835c7c6efdf1c68da9eedcb8d9c3837ef +database=engram_mkr_bedge_review_repeat20_20260710a +command=go test -p=1 ./internal/db/gorm ./internal/mcp -run ^(TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites|TestCandidateStore_AllCandidateReviewSnapshotSeamsCommitExactlyOneAudit|TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs|TestBulkOps_PublicDispatchPreservesExactIntegralIDsBeforeNormalization|TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade|TestBulkOps_WiredFacadeReceivesExactNormalizedIDsAndStrictDryRun)$ -count=20 +started_utc=2026-07-10T09:04:31.8618062Z +ok github.com/thebtf/engram/internal/db/gorm 30.402s +ok github.com/thebtf/engram/internal/mcp 0.119s +test_exit=0 +active_sessions_before_terminate=0 +database_residue=0 +activity_residue=0 +finished_utc=2026-07-10T09:05:06.0102152Z diff --git a/.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/21-review-race-focused.log b/.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/21-review-race-focused.log new file mode 100644 index 00000000..f59b4e6d --- /dev/null +++ b/.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/21-review-race-focused.log @@ -0,0 +1,12 @@ +base_sha=68b2ce5835c7c6efdf1c68da9eedcb8d9c3837ef +head_sha=68b2ce5835c7c6efdf1c68da9eedcb8d9c3837ef +database=engram_mkr_bedge_review_race_20260710a +command=go test -race -p=1 ./internal/db/gorm ./internal/mcp -run ^(TestCandidateStore_PromoteWithMemoryAndSnapshot_AmendFailureRollsBackPromotion|TestCandidateStore_PreserveWithMemoryAndSnapshot_RequiresCandidateReviewSnapshotBeforeMutation|TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites|TestCandidateStore_AllCandidateReviewSnapshotSeamsCommitExactlyOneAudit|TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs|TestBulkOps_PublicDispatchPreservesExactIntegralIDsBeforeNormalization|TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade|TestBulkOps_WiredFacadeReceivesExactNormalizedIDsAndStrictDryRun)$ -count=1 +started_utc=2026-07-10T09:05:21.1803510Z +ok github.com/thebtf/engram/internal/db/gorm 5.184s +ok github.com/thebtf/engram/internal/mcp 1.089s +test_exit=0 +active_sessions_before_terminate=0 +database_residue=0 +activity_residue=0 +finished_utc=2026-07-10T09:05:39.4393708Z diff --git a/.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/22-review-vet.log b/.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/22-review-vet.log new file mode 100644 index 00000000..e1502659 --- /dev/null +++ b/.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/22-review-vet.log @@ -0,0 +1,10 @@ +base_sha=68b2ce5835c7c6efdf1c68da9eedcb8d9c3837ef +head_sha=68b2ce5835c7c6efdf1c68da9eedcb8d9c3837ef +database=engram_mkr_bedge_review_vet_20260710a +command=go vet ./internal/db/gorm ./internal/mcp +started_utc=2026-07-10T09:05:52.8410044Z +test_exit=0 +active_sessions_before_terminate=0 +database_residue=0 +activity_residue=0 +finished_utc=2026-07-10T09:05:55.4729862Z diff --git a/.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/23-review-coverage.log b/.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/23-review-coverage.log new file mode 100644 index 00000000..83a276a2 --- /dev/null +++ b/.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/23-review-coverage.log @@ -0,0 +1,12 @@ +base_sha=68b2ce5835c7c6efdf1c68da9eedcb8d9c3837ef +head_sha=68b2ce5835c7c6efdf1c68da9eedcb8d9c3837ef +database=engram_mkr_bedge_review_coverage_20260710a +command=go test -p=1 ./internal/db/gorm ./internal/mcp -run ^(TestCandidateStore_PromoteWithMemoryAndSnapshot_AmendFailureRollsBackPromotion|TestCandidateStore_PreserveWithMemoryAndSnapshot_RequiresCandidateReviewSnapshotBeforeMutation|TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites|TestCandidateStore_AllCandidateReviewSnapshotSeamsCommitExactlyOneAudit|TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs|TestBulkOps_PublicDispatchPreservesExactIntegralIDsBeforeNormalization|TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade|TestBulkOps_WiredFacadeReceivesExactNormalizedIDsAndStrictDryRun)$ -count=1 -covermode=atomic -coverprofile= .agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/coverage.out +started_utc=2026-07-10T09:06:19.4994123Z +ok github.com/thebtf/engram/internal/db/gorm 4.357s coverage: 15.4% of statements +ok github.com/thebtf/engram/internal/mcp 0.115s coverage: 1.8% of statements +test_exit=0 +active_sessions_before_terminate=0 +database_residue=0 +activity_residue=0 +finished_utc=2026-07-10T09:06:31.6544016Z diff --git a/.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/24-review-cover-functions.log b/.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/24-review-cover-functions.log new file mode 100644 index 00000000..ab3b5647 --- /dev/null +++ b/.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/24-review-cover-functions.log @@ -0,0 +1,12 @@ +base_sha=68b2ce5835c7c6efdf1c68da9eedcb8d9c3837ef +head_sha=68b2ce5835c7c6efdf1c68da9eedcb8d9c3837ef +database=engram_mkr_bedge_review_coverfunc_20260710a +command=go tool cover -func= .agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/coverage.out +started_utc=2026-07-10T09:06:50.4458404Z +too many options +For usage information, run "go tool cover -help" +test_exit=2 +active_sessions_before_terminate=0 +database_residue=0 +activity_residue=0 +finished_utc=2026-07-10T09:06:52.3834483Z diff --git a/.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/25-review-cover-functions.log b/.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/25-review-cover-functions.log new file mode 100644 index 00000000..a237933a --- /dev/null +++ b/.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/25-review-cover-functions.log @@ -0,0 +1,952 @@ +base_sha=68b2ce5835c7c6efdf1c68da9eedcb8d9c3837ef +head_sha=68b2ce5835c7c6efdf1c68da9eedcb8d9c3837ef +database=engram_mkr_bedge_review_coverfunc_20260710b +command=go tool cover -func=.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/coverage.out +started_utc=2026-07-10T09:07:12.6414703Z +github.com/thebtf/engram/internal/db/gorm/attention_event_store.go:28: TableName 0.0% +github.com/thebtf/engram/internal/db/gorm/attention_event_store.go:34: NewAttentionEventStore 0.0% +github.com/thebtf/engram/internal/db/gorm/attention_event_store.go:38: Create 0.0% +github.com/thebtf/engram/internal/db/gorm/attention_event_store.go:52: Get 0.0% +github.com/thebtf/engram/internal/db/gorm/attention_event_store.go:66: ListByProject 0.0% +github.com/thebtf/engram/internal/db/gorm/attention_event_store.go:92: attentionEventRowFromRecord 0.0% +github.com/thebtf/engram/internal/db/gorm/attention_event_store.go:137: attentionEventRowToStored 0.0% +github.com/thebtf/engram/internal/db/gorm/attention_event_store.go:154: validAttentionEventHorizon 0.0% +github.com/thebtf/engram/internal/db/gorm/attention_event_store.go:163: validAttentionEventPrivacyClass 0.0% +github.com/thebtf/engram/internal/db/gorm/audit_store.go:25: TableName 100.0% +github.com/thebtf/engram/internal/db/gorm/audit_store.go:33: NewAuditStore 100.0% +github.com/thebtf/engram/internal/db/gorm/audit_store.go:38: Log 66.7% +github.com/thebtf/engram/internal/db/gorm/audit_store.go:45: logTx 66.7% +github.com/thebtf/engram/internal/db/gorm/audit_store.go:53: GetByMemory 0.0% +github.com/thebtf/engram/internal/db/gorm/audit_store.go:80: LogAudit 0.0% +github.com/thebtf/engram/internal/db/gorm/audit_store.go:92: DeleteOlderThan 0.0% +github.com/thebtf/engram/internal/db/gorm/auth_models.go:15: DashboardRoles 0.0% +github.com/thebtf/engram/internal/db/gorm/auth_models.go:20: NormalizeDashboardRole 0.0% +github.com/thebtf/engram/internal/db/gorm/auth_models.go:43: TableName 0.0% +github.com/thebtf/engram/internal/db/gorm/auth_models.go:61: TableName 0.0% +github.com/thebtf/engram/internal/db/gorm/auth_models.go:76: TableName 0.0% +github.com/thebtf/engram/internal/db/gorm/auth_session_store.go:26: NewAuthSessionStore 0.0% +github.com/thebtf/engram/internal/db/gorm/auth_session_store.go:31: CreateSession 0.0% +github.com/thebtf/engram/internal/db/gorm/auth_session_store.go:52: GetAnySession 0.0% +github.com/thebtf/engram/internal/db/gorm/auth_session_store.go:65: GetSession 0.0% +github.com/thebtf/engram/internal/db/gorm/auth_session_store.go:74: RevokeSession 0.0% +github.com/thebtf/engram/internal/db/gorm/auth_session_store.go:108: DeleteSession 0.0% +github.com/thebtf/engram/internal/db/gorm/auth_session_store.go:114: DeleteUserSessions 0.0% +github.com/thebtf/engram/internal/db/gorm/auth_session_store.go:134: CleanExpired 0.0% +github.com/thebtf/engram/internal/db/gorm/auth_session_store.go:139: validateSessionRow 0.0% +github.com/thebtf/engram/internal/db/gorm/auth_session_store.go:154: generateSessionID 0.0% +github.com/thebtf/engram/internal/db/gorm/behavioral_rules_store.go:28: NewBehavioralRulesStore 0.0% +github.com/thebtf/engram/internal/db/gorm/behavioral_rules_store.go:34: Create 0.0% +github.com/thebtf/engram/internal/db/gorm/behavioral_rules_store.go:74: Get 0.0% +github.com/thebtf/engram/internal/db/gorm/behavioral_rules_store.go:97: List 0.0% +github.com/thebtf/engram/internal/db/gorm/behavioral_rules_store.go:103: ListEnabled 0.0% +github.com/thebtf/engram/internal/db/gorm/behavioral_rules_store.go:107: list 0.0% +github.com/thebtf/engram/internal/db/gorm/behavioral_rules_store.go:140: ListAll 0.0% +github.com/thebtf/engram/internal/db/gorm/behavioral_rules_store.go:164: Update 0.0% +github.com/thebtf/engram/internal/db/gorm/behavioral_rules_store.go:201: SetEnabled 0.0% +github.com/thebtf/engram/internal/db/gorm/behavioral_rules_store.go:234: Delete 0.0% +github.com/thebtf/engram/internal/db/gorm/behavioral_rules_store.go:256: behavioralRuleRowToModel 0.0% +github.com/thebtf/engram/internal/db/gorm/books_store.go:22: TableName 0.0% +github.com/thebtf/engram/internal/db/gorm/books_store.go:33: NewBooksStore 0.0% +github.com/thebtf/engram/internal/db/gorm/books_store.go:41: Create 0.0% +github.com/thebtf/engram/internal/db/gorm/books_store.go:62: GetStatus 0.0% +github.com/thebtf/engram/internal/db/gorm/books_store.go:78: UpdateStatus 0.0% +github.com/thebtf/engram/internal/db/gorm/books_store.go:112: isValidBookStatus 0.0% +github.com/thebtf/engram/internal/db/gorm/books_store.go:121: booksJobFromRecord 0.0% +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:46: TableName 0.0% +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:51: Value 100.0% +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:58: Scan 57.1% +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:73: toDomainCandidate 100.0% +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:101: fromDomainCandidate 81.8% +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:140: NewCandidateStore 100.0% +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:147: Create 71.4% +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:160: Get 75.0% +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:171: ListByStatus 0.0% +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:195: ListExpiredPending 0.0% +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:236: transitionStatus 0.0% +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:289: transitionStatusTx 66.7% +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:331: TransitionToPromoted 0.0% +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:348: PromoteWithMemory 0.0% +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:377: PromoteWithMemoryAndSnapshot 100.0% +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:391: PreserveWithMemoryAndSnapshot 100.0% +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:402: promoteWithMemoryAndSnapshotAction 80.6% +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:466: validatePromoteMemory 80.0% +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:476: promoteWithMemoryTx 70.8% +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:519: logPromoteAudit 100.0% +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:538: normalizeCandidateReviewActor 50.0% +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:546: validateCandidateReviewSnapshotBinding 87.0% +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:640: candidateReviewPayloadMatchesAuthoritative 75.0% +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:681: logCandidateReviewAuditTx 100.0% +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:721: createCandidateReviewSnapshotTx 100.0% +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:738: TransitionToRejected 0.0% +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:745: TransitionToRejectedWithSnapshot 75.0% +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:759: TransitionToSuppressedWithSnapshot 50.0% +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:773: TransitionToSupersededWithSnapshot 50.0% +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:783: transitionWithSnapshot 63.6% +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:828: amendCandidateReviewAfterTx 0.0% +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:886: TransitionToSuperseded 0.0% +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:892: TransitionToDecayed 0.0% +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:902: RevertRawTx 0.0% +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:944: GetByFingerprintAnyStatus 0.0% +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:964: GetByFingerprint 0.0% +github.com/thebtf/engram/internal/db/gorm/citation_log_store.go:25: TableName 0.0% +github.com/thebtf/engram/internal/db/gorm/citation_log_store.go:33: NewCitationLogStore 0.0% +github.com/thebtf/engram/internal/db/gorm/citation_log_store.go:39: RecordBatch 0.0% +github.com/thebtf/engram/internal/db/gorm/citation_log_store.go:51: GetBySession 0.0% +github.com/thebtf/engram/internal/db/gorm/citation_log_store.go:71: GetByMemory 0.0% +github.com/thebtf/engram/internal/db/gorm/citation_log_store.go:91: DeleteOlderThan 0.0% +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:54: TableName 0.0% +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:67: NewCodeChunkStore 0.0% +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:78: Upsert 0.0% +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:119: DeleteByProjectFile 0.0% +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:144: DeleteStaleForProject 0.0% +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:172: ListByProject 0.0% +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:198: CountByProject 0.0% +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:220: UpdateEmbedding 0.0% +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:240: ListUnembedded 0.0% +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:264: StaleKey 0.0% +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:281: ListIdentityKeysByProject 0.0% +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:315: TouchSession 0.0% +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:354: RegisterSession 0.0% +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:387: DeleteBySessionMismatch 0.0% +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:447: SearchCodeFTS 0.0% +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:523: FindSimilarCode 0.0% +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:593: CountEmbeddedByProject 0.0% +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:611: MaxUpdatedAtByProject 0.0% +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:634: DeleteSession 0.0% +github.com/thebtf/engram/internal/db/gorm/credential_store.go:26: NewCredentialStore 0.0% +github.com/thebtf/engram/internal/db/gorm/credential_store.go:34: Create 0.0% +github.com/thebtf/engram/internal/db/gorm/credential_store.go:81: Get 0.0% +github.com/thebtf/engram/internal/db/gorm/credential_store.go:103: GetByName 0.0% +github.com/thebtf/engram/internal/db/gorm/credential_store.go:120: List 0.0% +github.com/thebtf/engram/internal/db/gorm/credential_store.go:141: ListAll 0.0% +github.com/thebtf/engram/internal/db/gorm/credential_store.go:169: Delete 0.0% +github.com/thebtf/engram/internal/db/gorm/credential_store.go:191: DeleteByName 0.0% +github.com/thebtf/engram/internal/db/gorm/credential_store.go:212: CountCredentials 0.0% +github.com/thebtf/engram/internal/db/gorm/credential_store.go:229: CountWithDifferentFingerprint 0.0% +github.com/thebtf/engram/internal/db/gorm/credential_store.go:247: DeleteOrphanedByFingerprint 0.0% +github.com/thebtf/engram/internal/db/gorm/credential_store.go:262: credentialRowToModel 0.0% +github.com/thebtf/engram/internal/db/gorm/document_store.go:29: NewDocumentStore 0.0% +github.com/thebtf/engram/internal/db/gorm/document_store.go:37: UpsertDocument 0.0% +github.com/thebtf/engram/internal/db/gorm/document_store.go:72: GetDocument 0.0% +github.com/thebtf/engram/internal/db/gorm/document_store.go:87: GetContent 0.0% +github.com/thebtf/engram/internal/db/gorm/document_store.go:100: ListDocuments 0.0% +github.com/thebtf/engram/internal/db/gorm/document_store.go:116: UpsertChunks 0.0% +github.com/thebtf/engram/internal/db/gorm/document_store.go:123: SearchChunks 0.0% +github.com/thebtf/engram/internal/db/gorm/document_store.go:129: ChunksExist 0.0% +github.com/thebtf/engram/internal/db/gorm/document_store.go:134: DeactivateDocument 0.0% +github.com/thebtf/engram/internal/db/gorm/document_store.go:147: CollectionDocCounts 0.0% +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:123: NewDomainOwnerStore 0.0% +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:129: Upsert 0.0% +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:157: UpdateIfUnchanged 0.0% +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:188: Get 0.0% +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:202: List 0.0% +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:240: Delete 0.0% +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:257: RegisterUserFromInvitation 0.0% +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:318: ListAccessRoles 0.0% +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:348: ListAccessInvitations 0.0% +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:353: ListAccessSessions 0.0% +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:358: ListAccessAudit 0.0% +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:363: GetAccessUserDrilldown 0.0% +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:400: LogAccessEvent 0.0% +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:404: logAccessEventTx 0.0% +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:436: normalizeDomainOwner 0.0% +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:461: normalizeDomainOwnerListOptions 0.0% +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:484: validDomainOwnerPrincipalKind 0.0% +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:493: validDomainOwnerMode 0.0% +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:519: listAccessInvitations 0.0% +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:591: listAccessSessions 0.0% +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:644: queryAccessAudit 0.0% +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:678: marshalAuditState 0.0% +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:690: decodeAuditJSON 0.0% +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:701: invitationStatusFromFields 0.0% +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:714: sessionStatusFromFields 0.0% +github.com/thebtf/engram/internal/db/gorm/helpers.go:22: EnsureSessionExists 0.0% +github.com/thebtf/engram/internal/db/gorm/helpers.go:48: sqlNullString 0.0% +github.com/thebtf/engram/internal/db/gorm/helpers.go:62: ParseLimitParam 0.0% +github.com/thebtf/engram/internal/db/gorm/helpers.go:74: ParseLimitParamWithMax 0.0% +github.com/thebtf/engram/internal/db/gorm/helpers.go:87: ParseOffsetParam 0.0% +github.com/thebtf/engram/internal/db/gorm/helpers.go:105: ParsePaginationParams 0.0% +github.com/thebtf/engram/internal/db/gorm/injection_log_store.go:20: NewInjectionLogStore 0.0% +github.com/thebtf/engram/internal/db/gorm/injection_log_store.go:26: Record 0.0% +github.com/thebtf/engram/internal/db/gorm/injection_log_store.go:55: GetBySession 0.0% +github.com/thebtf/engram/internal/db/gorm/injection_log_store.go:93: DeleteOlderThan 0.0% +github.com/thebtf/engram/internal/db/gorm/invitation_store.go:28: NewInvitationStore 0.0% +github.com/thebtf/engram/internal/db/gorm/invitation_store.go:33: GenerateCode 0.0% +github.com/thebtf/engram/internal/db/gorm/invitation_store.go:42: CreateInvitation 0.0% +github.com/thebtf/engram/internal/db/gorm/invitation_store.go:75: GetInvitationByID 0.0% +github.com/thebtf/engram/internal/db/gorm/invitation_store.go:87: GetValidInvitation 0.0% +github.com/thebtf/engram/internal/db/gorm/invitation_store.go:101: ConsumeInvitation 0.0% +github.com/thebtf/engram/internal/db/gorm/invitation_store.go:126: RevokeInvitation 0.0% +github.com/thebtf/engram/internal/db/gorm/invitation_store.go:162: ListInvitations 0.0% +github.com/thebtf/engram/internal/db/gorm/invitation_store.go:170: validateInvitationRow 0.0% +github.com/thebtf/engram/internal/db/gorm/issue_store.go:18: projectBareName 0.0% +github.com/thebtf/engram/internal/db/gorm/issue_store.go:33: NewIssueStore 0.0% +github.com/thebtf/engram/internal/db/gorm/issue_store.go:39: ResolveProject 0.0% +github.com/thebtf/engram/internal/db/gorm/issue_store.go:53: CreateIssue 0.0% +github.com/thebtf/engram/internal/db/gorm/issue_store.go:111: ListIssues 0.0% +github.com/thebtf/engram/internal/db/gorm/issue_store.go:121: ListIssuesEx 0.0% +github.com/thebtf/engram/internal/db/gorm/issue_store.go:172: GetIssue 0.0% +github.com/thebtf/engram/internal/db/gorm/issue_store.go:193: UpdateIssueStatus 0.0% +github.com/thebtf/engram/internal/db/gorm/issue_store.go:222: AddComment 0.0% +github.com/thebtf/engram/internal/db/gorm/issue_store.go:254: AcknowledgeIssues 0.0% +github.com/thebtf/engram/internal/db/gorm/issue_store.go:278: ReopenIssue 0.0% +github.com/thebtf/engram/internal/db/gorm/issue_store.go:321: CloseIssue 0.0% +github.com/thebtf/engram/internal/db/gorm/issue_store.go:333: CloseIssueFromAnySource 0.0% +github.com/thebtf/engram/internal/db/gorm/issue_store.go:426: formatCloseCallerProjects 0.0% +github.com/thebtf/engram/internal/db/gorm/issue_store.go:443: RejectIssue 0.0% +github.com/thebtf/engram/internal/db/gorm/issue_store.go:471: DeleteIssue 0.0% +github.com/thebtf/engram/internal/db/gorm/issue_store.go:489: UpdateIssueFields 0.0% +github.com/thebtf/engram/internal/db/gorm/issue_store.go:528: GetTrackedProjects 0.0% +github.com/thebtf/engram/internal/db/gorm/memory_store.go:34: NewMemoryStore 0.0% +github.com/thebtf/engram/internal/db/gorm/memory_store.go:91: normalizeMetaMemoryLimit 0.0% +github.com/thebtf/engram/internal/db/gorm/memory_store.go:101: normalizeMetaMemoryProbeLimit 0.0% +github.com/thebtf/engram/internal/db/gorm/memory_store.go:112: normalizeMetaMemoryFTSScanBudget 0.0% +github.com/thebtf/engram/internal/db/gorm/memory_store.go:116: sanitizeMetaText 0.0% +github.com/thebtf/engram/internal/db/gorm/memory_store.go:132: sanitizeMetaTags 0.0% +github.com/thebtf/engram/internal/db/gorm/memory_store.go:144: cloneMetaTags 0.0% +github.com/thebtf/engram/internal/db/gorm/memory_store.go:153: metaMemoryTitleFromLine 0.0% +github.com/thebtf/engram/internal/db/gorm/memory_store.go:161: metaMemoryRowsToRecords 0.0% +github.com/thebtf/engram/internal/db/gorm/memory_store.go:175: metaMemoryMatchesOptions 0.0% +github.com/thebtf/engram/internal/db/gorm/memory_store.go:209: validateMemoryForCreate 55.6% +github.com/thebtf/engram/internal/db/gorm/memory_store.go:225: validateMemoryOwnershipForCreate 50.0% +github.com/thebtf/engram/internal/db/gorm/memory_store.go:249: isValidMemoryOwnerPrincipalKind 0.0% +github.com/thebtf/engram/internal/db/gorm/memory_store.go:258: memoryRowForCreate 70.6% +github.com/thebtf/engram/internal/db/gorm/memory_store.go:309: copyPrivacyFields 40.0% +github.com/thebtf/engram/internal/db/gorm/memory_store.go:327: copyPrincipalMemoryFields 30.8% +github.com/thebtf/engram/internal/db/gorm/memory_store.go:351: advisoryLockKey 0.0% +github.com/thebtf/engram/internal/db/gorm/memory_store.go:361: tagContainmentJSON 0.0% +github.com/thebtf/engram/internal/db/gorm/memory_store.go:376: Create 0.0% +github.com/thebtf/engram/internal/db/gorm/memory_store.go:406: CreateWithLifecycle 0.0% +github.com/thebtf/engram/internal/db/gorm/memory_store.go:434: createMemoryWithLifecycleTx 85.7% +github.com/thebtf/engram/internal/db/gorm/memory_store.go:450: CreateWithLifecycleIfTagAbsent 0.0% +github.com/thebtf/engram/internal/db/gorm/memory_store.go:509: Get 0.0% +github.com/thebtf/engram/internal/db/gorm/memory_store.go:530: List 0.0% +github.com/thebtf/engram/internal/db/gorm/memory_store.go:606: ListWithFilters 0.0% +github.com/thebtf/engram/internal/db/gorm/memory_store.go:628: ListPrincipalMemory 0.0% +github.com/thebtf/engram/internal/db/gorm/memory_store.go:649: baseMemoryListQuery 0.0% +github.com/thebtf/engram/internal/db/gorm/memory_store.go:653: basePrincipalMemoryQuery 0.0% +github.com/thebtf/engram/internal/db/gorm/memory_store.go:661: applyCurrentMemoryValidity 0.0% +github.com/thebtf/engram/internal/db/gorm/memory_store.go:667: findMemoryRows 0.0% +github.com/thebtf/engram/internal/db/gorm/memory_store.go:685: applyMemoryListOptions 0.0% +github.com/thebtf/engram/internal/db/gorm/memory_store.go:730: normalizeMemoryListLimit 0.0% +github.com/thebtf/engram/internal/db/gorm/memory_store.go:744: normalizeMemoryListOffset 0.0% +github.com/thebtf/engram/internal/db/gorm/memory_store.go:751: escapeSQLLike 0.0% +github.com/thebtf/engram/internal/db/gorm/memory_store.go:767: ListWithOffset 0.0% +github.com/thebtf/engram/internal/db/gorm/memory_store.go:812: ListForInjection 0.0% +github.com/thebtf/engram/internal/db/gorm/memory_store.go:847: Update 0.0% +github.com/thebtf/engram/internal/db/gorm/memory_store.go:887: Delete 0.0% +github.com/thebtf/engram/internal/db/gorm/memory_store.go:913: Supersede 0.0% +github.com/thebtf/engram/internal/db/gorm/memory_store.go:950: MarkSuperseded 0.0% +github.com/thebtf/engram/internal/db/gorm/memory_store.go:978: UpdateLifecycleFields 0.0% +github.com/thebtf/engram/internal/db/gorm/memory_store.go:999: IncrementInjectionCount 0.0% +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1007: BatchIncrementCited 0.0% +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1022: BatchIncrementInjected 0.0% +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1034: BatchIncrementUncited 0.0% +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1044: GetProjectCitationRate 0.0% +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1082: BatchIncrementCitedN 0.0% +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1098: BatchIncrementUncitedN 0.0% +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1106: BatchIncrementViolated 0.0% +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1114: memoryRowToModel 50.0% +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1174: ListBySourceAgentAndTag 0.0% +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1208: SearchMetaMemoryTagPrefixIDs 0.0% +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1236: SearchMetaMemoryFTSIDs 0.0% +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1291: GetMetaMemoryByIDs 0.0% +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1332: QueryMetaIndex 0.0% +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1406: appendUniqueMetaIDs 0.0% +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1418: metaIDSet 0.0% +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1426: metaIndexScores 0.0% +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1437: metaIndexRRF 0.0% +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1481: metaIndexReason 0.0% +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1502: tokenizeFTSTerms 0.0% +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1541: hasNegationTerm 0.0% +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1557: SearchFTS 0.0% +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1581: normalizeSearchFTSLimit 0.0% +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1591: searchFTSQueryVariants 0.0% +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1603: searchFTSPage 0.0% +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1650: GetByIDs 0.0% +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1686: CountActiveSince 0.0% +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1700: MaxActiveID 0.0% +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1716: LockRawByIDsTx 0.0% +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1757: rawMemoryRestoreUpdates 0.0% +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1812: RestoreRaw 0.0% +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1836: RestoreRawTx 0.0% +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1862: HardDeleteTx 0.0% +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1878: GetDB 0.0% +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1883: ListAllActive 0.0% +github.com/thebtf/engram/internal/db/gorm/migration_access_milestone.go:14: accessMilestoneMigration156 71.4% +github.com/thebtf/engram/internal/db/gorm/migration_api_token_principals.go:10: apiTokenPrincipalsMigration148 45.5% +github.com/thebtf/engram/internal/db/gorm/migration_behavioral_rules_enabled.go:10: behavioralRulesEnabledMigration151 60.0% +github.com/thebtf/engram/internal/db/gorm/migration_books.go:16: booksJobsMigration155 71.4% +github.com/thebtf/engram/internal/db/gorm/migration_memory_domain_owners.go:10: memoryDomainOwnersMigration150 71.4% +github.com/thebtf/engram/internal/db/gorm/migration_memory_principals.go:10: memoryPrincipalsMigration149 45.5% +github.com/thebtf/engram/internal/db/gorm/migration_rule_arbiter.go:11: ruleArbiterBackgroundMigration145 45.5% +github.com/thebtf/engram/internal/db/gorm/migration_rule_governance.go:11: ruleGovernanceMigration144 45.5% +github.com/thebtf/engram/internal/db/gorm/migration_rule_governance_snapshot_statuses.go:10: ruleGovernanceSnapshotStatusesMigration147 45.5% +github.com/thebtf/engram/internal/db/gorm/migration_state.go:32: GetMigrationState 0.0% +github.com/thebtf/engram/internal/db/gorm/migration_state.go:62: sortAppliedMigrationIDs 0.0% +github.com/thebtf/engram/internal/db/gorm/migration_state.go:78: migrationSequence 0.0% +github.com/thebtf/engram/internal/db/gorm/migration_temporal_truth.go:13: temporalTruthRecordsMigration157 71.4% +github.com/thebtf/engram/internal/db/gorm/migrations.go:16: runMigrations 48.8% +github.com/thebtf/engram/internal/db/gorm/migrations.go:4799: candidateReviewSnapshotOpTypeMigration153 29.4% +github.com/thebtf/engram/internal/db/gorm/migrations.go:4845: forgettingReviewSnapshotOpTypeMigration154 29.4% +github.com/thebtf/engram/internal/db/gorm/migrations.go:4891: attentionEventsMigration158 55.6% +github.com/thebtf/engram/internal/db/gorm/models.go:44: TableName 100.0% +github.com/thebtf/engram/internal/db/gorm/models.go:47: BeforeCreate 0.0% +github.com/thebtf/engram/internal/db/gorm/models.go:75: TableName 0.0% +github.com/thebtf/engram/internal/db/gorm/models.go:92: TableName 0.0% +github.com/thebtf/engram/internal/db/gorm/models.go:109: TableName 0.0% +github.com/thebtf/engram/internal/db/gorm/models.go:122: TableName 0.0% +github.com/thebtf/engram/internal/db/gorm/models.go:140: TableName 0.0% +github.com/thebtf/engram/internal/db/gorm/models.go:160: TableName 0.0% +github.com/thebtf/engram/internal/db/gorm/models.go:188: TableName 0.0% +github.com/thebtf/engram/internal/db/gorm/models.go:200: TableName 0.0% +github.com/thebtf/engram/internal/db/gorm/models.go:220: TableName 0.0% +github.com/thebtf/engram/internal/db/gorm/models.go:249: TableName 0.0% +github.com/thebtf/engram/internal/db/gorm/models.go:304: TableName 100.0% +github.com/thebtf/engram/internal/db/gorm/models.go:317: TableName 0.0% +github.com/thebtf/engram/internal/db/gorm/models.go:334: TableName 0.0% +github.com/thebtf/engram/internal/db/gorm/project_store.go:23: UpsertProject 0.0% +github.com/thebtf/engram/internal/db/gorm/project_store.go:55: ResolveProjectID 0.0% +github.com/thebtf/engram/internal/db/gorm/promotion_store.go:21: TableName 0.0% +github.com/thebtf/engram/internal/db/gorm/promotion_store.go:29: NewPromotionStore 0.0% +github.com/thebtf/engram/internal/db/gorm/promotion_store.go:34: LogPromotion 0.0% +github.com/thebtf/engram/internal/db/gorm/promotion_store.go:48: GetHistory 0.0% +github.com/thebtf/engram/internal/db/gorm/purge_store.go:34: NewPurgeStore 0.0% +github.com/thebtf/engram/internal/db/gorm/purge_store.go:80: PurgeProject 0.0% +github.com/thebtf/engram/internal/db/gorm/retrieval_stats_log_store.go:23: TableName 0.0% +github.com/thebtf/engram/internal/db/gorm/retrieval_stats_log_store.go:41: NewRetrievalStatsLogStore 0.0% +github.com/thebtf/engram/internal/db/gorm/retrieval_stats_log_store.go:52: LogEvent 0.0% +github.com/thebtf/engram/internal/db/gorm/retrieval_stats_log_store.go:70: flusher 0.0% +github.com/thebtf/engram/internal/db/gorm/retrieval_stats_log_store.go:102: flush 0.0% +github.com/thebtf/engram/internal/db/gorm/retrieval_stats_log_store.go:109: Close 0.0% +github.com/thebtf/engram/internal/db/gorm/retrieval_stats_log_store.go:130: GetStats 0.0% +github.com/thebtf/engram/internal/db/gorm/retrieval_stats_log_store.go:174: Cleanup 0.0% +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:139: TableName 0.0% +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:157: TableName 0.0% +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:174: TableName 0.0% +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:176: nullableString 0.0% +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:180: stringFromNull 0.0% +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:187: validRuleConfidence 0.0% +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:199: TableName 0.0% +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:230: TableName 0.0% +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:247: TableName 0.0% +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:262: TableName 0.0% +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:268: NewRuleGovernanceStore 0.0% +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:272: CreateRuleCandidate 0.0% +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:304: GetRuleCandidate 0.0% +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:312: GetRuleCandidateByFingerprint 0.0% +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:333: ListRuleCandidates 0.0% +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:356: ListRenderableRuleVersions 0.0% +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:386: ListLegacyBehavioralRuleFallback 0.0% +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:412: ListPendingRuleCandidatesForArbiter 0.0% +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:478: StartRuleArbiterRun 0.0% +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:493: FinishRuleArbiterRun 0.0% +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:543: CreateRuleArbiterEvaluation 0.0% +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:590: AnnotateRuleCandidate 0.0% +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:646: CreateDraftFromCandidate 0.0% +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:733: RejectRuleCandidate 0.0% +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:768: TransitionRuleVersion 0.0% +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:825: CreateRuleSnapshot 0.0% +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:841: GetLifecycleHealth 0.0% +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:883: ListExceptionQueueGroups 0.0% +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1072: ListRuleGovernanceSnapshots 0.0% +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1095: PinRuleGovernanceSnapshot 0.0% +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1125: RollbackRuleGovernanceSnapshot 0.0% +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1202: fromRuleCandidate 0.0% +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1232: toRuleCandidate 0.0% +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1267: toRuleArbiterRun 0.0% +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1287: fromRuleArbiterEvaluation 0.0% +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1306: toRuleArbiterEvaluation 0.0% +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1323: toRuleVersion 0.0% +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1354: toRuleGovernanceSnapshot 0.0% +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1372: toRuleGovernanceSnapshotSummary 0.0% +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1384: projectFromRuleVersionRow 0.0% +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1394: projectFromSnapshotRow 0.0% +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1414: countCandidateStatuses 0.0% +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1443: countVersionStates 0.0% +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1459: countArbiterRunStatuses 0.0% +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1475: countTransitionActions 0.0% +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1495: countSnapshotStatuses 0.0% +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1513: countInjectionEventTypes 0.0% +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1531: applyRuleSince 0.0% +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1538: healthCountTotal 0.0% +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1571: ruleGovernanceSnapshotStateForRuleVersion 0.0% +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1586: decodeRuleGovernanceSnapshotState 0.0% +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1616: decodeRuleGovernanceSnapshotStatePtr 0.0% +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1623: getRuleVersionByCandidateTx 0.0% +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1635: ensureRuleFamilyTx 0.0% +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1650: createRuleTransitionLogTx 0.0% +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1670: createRuleSnapshotTx 0.0% +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1675: createRuleSnapshotRowTx 0.0% +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1698: validateCandidateToDraftRequest 0.0% +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1708: hasNonBlankEvidenceHandle 0.0% +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1717: hasNegativeRuleArbiterCount 0.0% +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1727: validateRuleCandidateForCreate 0.0% +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1749: objectJSONFromMap 0.0% +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1760: arrayJSONFromStrings 0.0% +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1771: objectJSON 0.0% +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1775: objectOrArrayJSON 0.0% +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1782: nullableObjectJSON 0.0% +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1790: decodeObject 0.0% +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1801: decodeStrings 0.0% +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1812: isUniqueViolation 0.0% +github.com/thebtf/engram/internal/db/gorm/rule_injection_event_store.go:28: TableName 0.0% +github.com/thebtf/engram/internal/db/gorm/rule_injection_event_store.go:55: NewRuleInjectionEventStore 0.0% +github.com/thebtf/engram/internal/db/gorm/rule_injection_event_store.go:59: RecordEvents 0.0% +github.com/thebtf/engram/internal/db/gorm/rule_injection_event_store.go:80: ListBySession 0.0% +github.com/thebtf/engram/internal/db/gorm/rule_injection_event_store.go:106: AggregateByProjectRuleAndEventType 0.0% +github.com/thebtf/engram/internal/db/gorm/rule_injection_event_store.go:160: telemetryQuery 0.0% +github.com/thebtf/engram/internal/db/gorm/rule_injection_event_store.go:171: telemetryReasons 0.0% +github.com/thebtf/engram/internal/db/gorm/rule_injection_event_store.go:183: fromRuleInjectionEvent 0.0% +github.com/thebtf/engram/internal/db/gorm/rule_injection_event_store.go:213: toRuleInjectionEvent 0.0% +github.com/thebtf/engram/internal/db/gorm/search_query_log_store.go:24: TableName 0.0% +github.com/thebtf/engram/internal/db/gorm/search_query_log_store.go:32: NewSearchQueryLogStore 0.0% +github.com/thebtf/engram/internal/db/gorm/search_query_log_store.go:38: LogQuery 0.0% +github.com/thebtf/engram/internal/db/gorm/search_query_log_store.go:69: GetAnalytics 0.0% +github.com/thebtf/engram/internal/db/gorm/search_query_log_store.go:136: GetRecent 0.0% +github.com/thebtf/engram/internal/db/gorm/search_query_log_store.go:169: Cleanup 0.0% +github.com/thebtf/engram/internal/db/gorm/segment_store.go:22: TableName 0.0% +github.com/thebtf/engram/internal/db/gorm/segment_store.go:30: NewSegmentStore 0.0% +github.com/thebtf/engram/internal/db/gorm/segment_store.go:35: GetCurrentSegment 0.0% +github.com/thebtf/engram/internal/db/gorm/segment_store.go:51: CreateSegment 0.0% +github.com/thebtf/engram/internal/db/gorm/segment_store.go:90: GetSegments 0.0% +github.com/thebtf/engram/internal/db/gorm/segment_store.go:100: CloseAllSegments 0.0% +github.com/thebtf/engram/internal/db/gorm/session_store.go:31: NewSessionStore 0.0% +github.com/thebtf/engram/internal/db/gorm/session_store.go:41: CreateSDKSession 0.0% +github.com/thebtf/engram/internal/db/gorm/session_store.go:99: GetSessionByID 0.0% +github.com/thebtf/engram/internal/db/gorm/session_store.go:112: FindAnySDKSession 0.0% +github.com/thebtf/engram/internal/db/gorm/session_store.go:127: ResolveClaudeSessionID 0.0% +github.com/thebtf/engram/internal/db/gorm/session_store.go:142: IncrementPromptCounter 0.0% +github.com/thebtf/engram/internal/db/gorm/session_store.go:176: GetPromptCounter 0.0% +github.com/thebtf/engram/internal/db/gorm/session_store.go:188: GetSessionsToday 0.0% +github.com/thebtf/engram/internal/db/gorm/session_store.go:204: GetAllProjects 0.0% +github.com/thebtf/engram/internal/db/gorm/session_store.go:220: ListSDKSessions 0.0% +github.com/thebtf/engram/internal/db/gorm/session_store.go:257: UpdateSessionOutcome 0.0% +github.com/thebtf/engram/internal/db/gorm/session_store.go:354: GetOutcome 0.0% +github.com/thebtf/engram/internal/db/gorm/session_store.go:378: resolveSessionForOutcome 0.0% +github.com/thebtf/engram/internal/db/gorm/session_store.go:403: UpdateUtilityPropagatedAt 0.0% +github.com/thebtf/engram/internal/db/gorm/session_store.go:421: UpdateUtilityPropagatedAtIfStale 0.0% +github.com/thebtf/engram/internal/db/gorm/session_store.go:436: ClearUtilityPropagatedAt 0.0% +github.com/thebtf/engram/internal/db/gorm/session_store.go:451: GetStrategyStats 0.0% +github.com/thebtf/engram/internal/db/gorm/session_store.go:488: GetLearningCurve 0.0% +github.com/thebtf/engram/internal/db/gorm/session_store.go:534: UpdateInjectionStrategy 0.0% +github.com/thebtf/engram/internal/db/gorm/session_store.go:543: toModelSDKSession 0.0% +github.com/thebtf/engram/internal/db/gorm/settings_store.go:32: NewSettingsStore 0.0% +github.com/thebtf/engram/internal/db/gorm/settings_store.go:40: Set 0.0% +github.com/thebtf/engram/internal/db/gorm/settings_store.go:123: Get 0.0% +github.com/thebtf/engram/internal/db/gorm/settings_store.go:140: List 0.0% +github.com/thebtf/engram/internal/db/gorm/settings_store.go:159: Delete 0.0% +github.com/thebtf/engram/internal/db/gorm/settings_store.go:185: modelSettingRowToModel 0.0% +github.com/thebtf/engram/internal/db/gorm/snapshot_store.go:34: TableName 100.0% +github.com/thebtf/engram/internal/db/gorm/snapshot_store.go:39: Value 88.9% +github.com/thebtf/engram/internal/db/gorm/snapshot_store.go:55: Scan 33.3% +github.com/thebtf/engram/internal/db/gorm/snapshot_store.go:74: parsePostgresArray 86.4% +github.com/thebtf/engram/internal/db/gorm/snapshot_store.go:109: toDomainSnapshot 70.0% +github.com/thebtf/engram/internal/db/gorm/snapshot_store.go:139: fromDomainSnapshot 70.0% +github.com/thebtf/engram/internal/db/gorm/snapshot_store.go:173: NewSnapshotStore 100.0% +github.com/thebtf/engram/internal/db/gorm/snapshot_store.go:180: Create 0.0% +github.com/thebtf/engram/internal/db/gorm/snapshot_store.go:184: createTx 66.7% +github.com/thebtf/engram/internal/db/gorm/snapshot_store.go:201: Get 0.0% +github.com/thebtf/engram/internal/db/gorm/snapshot_store.go:212: GetForUpdateTx 0.0% +github.com/thebtf/engram/internal/db/gorm/snapshot_store.go:228: GetByID 0.0% +github.com/thebtf/engram/internal/db/gorm/snapshot_store.go:238: List 0.0% +github.com/thebtf/engram/internal/db/gorm/snapshot_store.go:261: MarkRolledBack 0.0% +github.com/thebtf/engram/internal/db/gorm/snapshot_store.go:268: MarkRolledBackTx 0.0% +github.com/thebtf/engram/internal/db/gorm/snapshot_store.go:289: Pin 0.0% +github.com/thebtf/engram/internal/db/gorm/snapshot_store.go:310: AmendPromoteEntries 0.0% +github.com/thebtf/engram/internal/db/gorm/snapshot_store.go:320: amendPromoteEntriesTx 73.5% +github.com/thebtf/engram/internal/db/gorm/snapshot_store.go:391: DeleteOlderThan 0.0% +github.com/thebtf/engram/internal/db/gorm/state_store.go:23: Value 0.0% +github.com/thebtf/engram/internal/db/gorm/state_store.go:30: Scan 0.0% +github.com/thebtf/engram/internal/db/gorm/state_store.go:59: TableName 0.0% +github.com/thebtf/engram/internal/db/gorm/state_store.go:72: TableName 0.0% +github.com/thebtf/engram/internal/db/gorm/state_store.go:83: NewStateStore 0.0% +github.com/thebtf/engram/internal/db/gorm/state_store.go:88: WriteSessionState 0.0% +github.com/thebtf/engram/internal/db/gorm/state_store.go:137: ReadSessionState 0.0% +github.com/thebtf/engram/internal/db/gorm/state_store.go:156: WriteProjectState 0.0% +github.com/thebtf/engram/internal/db/gorm/state_store.go:200: ReadProjectState 0.0% +github.com/thebtf/engram/internal/db/gorm/state_store.go:211: readProjectStateRow 0.0% +github.com/thebtf/engram/internal/db/gorm/state_store.go:222: projectStateFromRow 0.0% +github.com/thebtf/engram/internal/db/gorm/state_store.go:232: ReadResumePacket 0.0% +github.com/thebtf/engram/internal/db/gorm/state_store.go:323: normalizeStateStoreResumePacketRequest 0.0% +github.com/thebtf/engram/internal/db/gorm/state_store.go:333: canonicalizeStateStoreResumeScopes 0.0% +github.com/thebtf/engram/internal/db/gorm/state_store.go:367: validateStateStoreResumePacketRequest 0.0% +github.com/thebtf/engram/internal/db/gorm/state_store.go:403: hasStateStoreResumeScope 0.0% +github.com/thebtf/engram/internal/db/gorm/state_store.go:412: sessionStateFromRow 0.0% +github.com/thebtf/engram/internal/db/gorm/state_store.go:432: resumePacketID 0.0% +github.com/thebtf/engram/internal/db/gorm/state_store.go:456: stateVersionFromTime 0.0% +github.com/thebtf/engram/internal/db/gorm/state_store.go:463: stateEvidenceRefsFromSlots 0.0% +github.com/thebtf/engram/internal/db/gorm/state_store.go:483: stateEvidenceRefsFromProjectRow 0.0% +github.com/thebtf/engram/internal/db/gorm/state_store.go:487: appendUniqueStateEvidenceRefs 0.0% +github.com/thebtf/engram/internal/db/gorm/state_store.go:503: stateActionFromProjectRow 0.0% +github.com/thebtf/engram/internal/db/gorm/state_store.go:525: stateVerificationFromProjectRow 0.0% +github.com/thebtf/engram/internal/db/gorm/state_store.go:533: parseStateStringSlice 0.0% +github.com/thebtf/engram/internal/db/gorm/state_store.go:554: cleanStateStrings 0.0% +github.com/thebtf/engram/internal/db/gorm/state_store.go:566: requireDB 0.0% +github.com/thebtf/engram/internal/db/gorm/state_store.go:573: stateActionFromSlots 0.0% +github.com/thebtf/engram/internal/db/gorm/state_store.go:581: stateVerificationFromSlots 0.0% +github.com/thebtf/engram/internal/db/gorm/state_store.go:589: parseStateAction 0.0% +github.com/thebtf/engram/internal/db/gorm/state_store.go:628: parseStateVerification 0.0% +github.com/thebtf/engram/internal/db/gorm/state_store.go:667: mapString 0.0% +github.com/thebtf/engram/internal/db/gorm/state_store.go:678: inferActionKind 0.0% +github.com/thebtf/engram/internal/db/gorm/state_store.go:685: inferVerificationKind 0.0% +github.com/thebtf/engram/internal/db/gorm/state_store.go:692: validActionKind 0.0% +github.com/thebtf/engram/internal/db/gorm/state_store.go:701: validVerificationKind 0.0% +github.com/thebtf/engram/internal/db/gorm/state_store.go:710: marshalJSONObject 0.0% +github.com/thebtf/engram/internal/db/gorm/state_store.go:724: validateSessionStateBudget 0.0% +github.com/thebtf/engram/internal/db/gorm/state_store.go:728: unmarshalJSONObject 0.0% +github.com/thebtf/engram/internal/db/gorm/state_store.go:764: LogResumeReadAudit 0.0% +github.com/thebtf/engram/internal/db/gorm/state_store.go:786: resumeReadAuditStateFrom 0.0% +github.com/thebtf/engram/internal/db/gorm/state_store.go:812: firstNonEmpty 0.0% +github.com/thebtf/engram/internal/db/gorm/state_store.go:821: logAuditAsync 0.0% +github.com/thebtf/engram/internal/db/gorm/store.go:44: NewStore 0.0% +github.com/thebtf/engram/internal/db/gorm/store.go:84: openGORM 0.0% +github.com/thebtf/engram/internal/db/gorm/store.go:97: resolveMaxConns 0.0% +github.com/thebtf/engram/internal/db/gorm/store.go:109: configurePool 0.0% +github.com/thebtf/engram/internal/db/gorm/store.go:123: WarmPool 0.0% +github.com/thebtf/engram/internal/db/gorm/store.go:151: Close 0.0% +github.com/thebtf/engram/internal/db/gorm/store.go:156: Ping 0.0% +github.com/thebtf/engram/internal/db/gorm/store.go:164: GetRawDB 0.0% +github.com/thebtf/engram/internal/db/gorm/store.go:169: GetDB 0.0% +github.com/thebtf/engram/internal/db/gorm/store.go:175: Stats 0.0% +github.com/thebtf/engram/internal/db/gorm/store.go:184: Optimize 0.0% +github.com/thebtf/engram/internal/db/gorm/store.go:199: HealthCheck 0.0% +github.com/thebtf/engram/internal/db/gorm/store.go:222: HealthCheckForce 0.0% +github.com/thebtf/engram/internal/db/gorm/store.go:238: performHealthCheck 0.0% +github.com/thebtf/engram/internal/db/gorm/store.go:274: poolStatsFromDBStats 0.0% +github.com/thebtf/engram/internal/db/gorm/store.go:289: applyHealthThresholds 0.0% +github.com/thebtf/engram/internal/db/gorm/store.go:372: NewPoolMetrics 0.0% +github.com/thebtf/engram/internal/db/gorm/store.go:384: RecordLatency 0.0% +github.com/thebtf/engram/internal/db/gorm/store.go:398: RecordPoolStats 0.0% +github.com/thebtf/engram/internal/db/gorm/store.go:414: GetMetricsSummary 0.0% +github.com/thebtf/engram/internal/db/gorm/store.go:442: computeLatencyStats 0.0% +github.com/thebtf/engram/internal/db/gorm/store.go:461: computeP95 0.0% +github.com/thebtf/engram/internal/db/gorm/store.go:485: GetMetrics 0.0% +github.com/thebtf/engram/internal/db/gorm/store.go:495: ResetMetrics 0.0% +github.com/thebtf/engram/internal/db/gorm/store.go:504: WithTimeout 0.0% +github.com/thebtf/engram/internal/db/gorm/store.go:526: ExecWithTimeout 0.0% +github.com/thebtf/engram/internal/db/gorm/store.go:543: QueryRowWithTimeout 0.0% +github.com/thebtf/engram/internal/db/gorm/store.go:555: TransactionWithTimeout 0.0% +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:21: mustParseTemporalTruthSentinel 75.0% +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:44: TableName 0.0% +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:81: NewTemporalTruthStore 0.0% +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:87: LoadStoredRecords 0.0% +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:97: LoadSelectedRecords 0.0% +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:105: loadStoredRecordRows 0.0% +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:134: RefreshProject 0.0% +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:164: requireDB 0.0% +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:171: loadProjectMemories 0.0% +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:183: buildTemporalTruthRows 0.0% +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:238: collapseTemporalTruthChainByValidFrom 0.0% +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:261: temporalTruthRootID 0.0% +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:281: temporalTruthMemoryValidFrom 0.0% +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:294: temporalTruthRowFromMemory 0.0% +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:310: temporalTruthMemoryValidUntil 0.0% +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:327: temporalTruthHasExplicitValidUntil 0.0% +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:331: temporalTruthInvalidatedAt 0.0% +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:342: temporalTruthInvalidationRationale 0.0% +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:352: isTemporalTruthOpenEnded 0.0% +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:356: temporalTruthReadValidUntil 0.0% +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:364: temporalTruthReadInvalidatedAt 0.0% +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:372: temporalTruthRowsToStoredRecords 0.0% +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:390: temporalTruthStoredRecordsToRecords 0.0% +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:408: temporalTruthProvenanceFromSourceMemoryIDs 0.0% +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:424: deriveTemporalTruthFactClass 0.0% +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:430: temporalTruthFactClassKey 100.0% +github.com/thebtf/engram/internal/db/gorm/token_store.go:19: NewTokenStore 0.0% +github.com/thebtf/engram/internal/db/gorm/token_store.go:24: Create 0.0% +github.com/thebtf/engram/internal/db/gorm/token_store.go:30: CreateWithPrincipal 0.0% +github.com/thebtf/engram/internal/db/gorm/token_store.go:58: List 0.0% +github.com/thebtf/engram/internal/db/gorm/token_store.go:70: FindByPrefix 0.0% +github.com/thebtf/engram/internal/db/gorm/token_store.go:82: Revoke 0.0% +github.com/thebtf/engram/internal/db/gorm/token_store.go:98: IncrementStats 0.0% +github.com/thebtf/engram/internal/db/gorm/token_store.go:109: IncrementErrorCount 0.0% +github.com/thebtf/engram/internal/db/gorm/token_store.go:117: GetByID 0.0% +github.com/thebtf/engram/internal/db/gorm/token_store.go:132: BatchIncrementStats 0.0% +github.com/thebtf/engram/internal/db/gorm/transcript_store.go:25: TableName 0.0% +github.com/thebtf/engram/internal/db/gorm/transcript_store.go:33: NewTranscriptStore 0.0% +github.com/thebtf/engram/internal/db/gorm/transcript_store.go:43: Create 0.0% +github.com/thebtf/engram/internal/db/gorm/transcript_store.go:57: ListUnprocessedSince 0.0% +github.com/thebtf/engram/internal/db/gorm/transcript_store.go:71: MarkProcessed 0.0% +github.com/thebtf/engram/internal/db/gorm/transcript_store.go:87: PruneProcessed 0.0% +github.com/thebtf/engram/internal/db/gorm/transcript_store.go:100: PruneUnprocessedOlderThan 0.0% +github.com/thebtf/engram/internal/db/gorm/user_store.go:17: NewUserStore 0.0% +github.com/thebtf/engram/internal/db/gorm/user_store.go:22: CreateUser 0.0% +github.com/thebtf/engram/internal/db/gorm/user_store.go:36: GetUserByEmail 0.0% +github.com/thebtf/engram/internal/db/gorm/user_store.go:45: GetUserByID 0.0% +github.com/thebtf/engram/internal/db/gorm/user_store.go:54: ListUsers 0.0% +github.com/thebtf/engram/internal/db/gorm/user_store.go:63: UpdateUser 0.0% +github.com/thebtf/engram/internal/db/gorm/user_store.go:75: CountUsers 0.0% +github.com/thebtf/engram/internal/db/gorm/user_store.go:84: CountAdmins 0.0% +github.com/thebtf/engram/internal/db/gorm/user_store.go:95: UpdateUserWithLastAdminGuard 0.0% +github.com/thebtf/engram/internal/db/gorm/versioned_document_store.go:33: TableName 0.0% +github.com/thebtf/engram/internal/db/gorm/versioned_document_store.go:48: TableName 0.0% +github.com/thebtf/engram/internal/db/gorm/versioned_document_store.go:57: NewVersionedDocumentStore 0.0% +github.com/thebtf/engram/internal/db/gorm/versioned_document_store.go:62: versionedDocHashContent 0.0% +github.com/thebtf/engram/internal/db/gorm/versioned_document_store.go:70: Create 0.0% +github.com/thebtf/engram/internal/db/gorm/versioned_document_store.go:129: ReadLatest 0.0% +github.com/thebtf/engram/internal/db/gorm/versioned_document_store.go:144: ReadVersion 0.0% +github.com/thebtf/engram/internal/db/gorm/versioned_document_store.go:159: List 0.0% +github.com/thebtf/engram/internal/db/gorm/versioned_document_store.go:179: DeleteBySourceBookJobID 0.0% +github.com/thebtf/engram/internal/db/gorm/versioned_document_store.go:195: versionedDocBuildListFilters 0.0% +github.com/thebtf/engram/internal/db/gorm/versioned_document_store.go:217: GetHistory 0.0% +github.com/thebtf/engram/internal/db/gorm/versioned_document_store.go:236: AddComment 0.0% +github.com/thebtf/engram/internal/db/gorm/versioned_document_store.go:257: GetComments 0.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:33: effectiveAuditWriter 0.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:44: isAuditEnabled 0.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:52: runAuditAsync 0.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:77: marshalState 0.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:92: logAuditCreate 0.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:117: logAuditEdit 0.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:142: logAuditDelete 0.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:166: logAuditGeneric 0.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:189: logAuditSupersede 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:30: parseArgs 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:46: coerceString 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:67: coerceInt 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:97: coerceInt64 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:127: coerceFloat64 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:151: coerceBool 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:177: coerceStringSlice 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:204: coerceInt64Slice 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:222: clampToInt 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:236: clampInt64ToInt 0.0% +github.com/thebtf/engram/internal/mcp/context.go:17: extractProjectFromHeader 0.0% +github.com/thebtf/engram/internal/mcp/context.go:22: contextWithProject 0.0% +github.com/thebtf/engram/internal/mcp/context.go:29: ContextWithProject 0.0% +github.com/thebtf/engram/internal/mcp/context.go:35: projectFromContext 0.0% +github.com/thebtf/engram/internal/mcp/context.go:41: contextWithSession 0.0% +github.com/thebtf/engram/internal/mcp/context.go:48: ContextWithSession 0.0% +github.com/thebtf/engram/internal/mcp/context.go:54: sessionFromContext 0.0% +github.com/thebtf/engram/internal/mcp/context.go:61: actorFromContext 0.0% +github.com/thebtf/engram/internal/mcp/health.go:22: NewMCPHealth 0.0% +github.com/thebtf/engram/internal/mcp/health.go:29: RecordRequest 0.0% +github.com/thebtf/engram/internal/mcp/health.go:36: RecordError 0.0% +github.com/thebtf/engram/internal/mcp/health.go:42: rotateWindowIfNeeded 0.0% +github.com/thebtf/engram/internal/mcp/health.go:55: HandleHealth 0.0% +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:28: ruleGovernanceCaptureEnabled 0.0% +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:39: captureActiveRuleIntent 0.0% +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:104: ruleIntentFingerprint 0.0% +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:113: marshalRuleCandidateIntentResponse 0.0% +github.com/thebtf/engram/internal/mcp/server.go:127: NewServer 100.0% +github.com/thebtf/engram/internal/mcp/server.go:141: SetBackfillStatusFunc 0.0% +github.com/thebtf/engram/internal/mcp/server.go:146: SetVersionedDocumentStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:151: SetIssueStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:156: SetMemoryStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:161: SetMetaMemoryIndex 0.0% +github.com/thebtf/engram/internal/mcp/server.go:166: SetHintQueue 0.0% +github.com/thebtf/engram/internal/mcp/server.go:171: SetStateStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:176: SetDirectiveCaptureService 0.0% +github.com/thebtf/engram/internal/mcp/server.go:181: SetBehavioralRulesStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:186: SetRuleGovernanceStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:191: SetRuleInjectionTelemetryStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:195: SetPromotionStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:199: SetGraphStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:204: SetNodesStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:211: SetAuditStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:216: SetPurgeStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:222: SetCandidateStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:228: SetSnapshotStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:234: SetBulkFacade 0.0% +github.com/thebtf/engram/internal/mcp/server.go:240: setTestAuditWriter 0.0% +github.com/thebtf/engram/internal/mcp/server.go:246: setTestMemoryEditor 0.0% +github.com/thebtf/engram/internal/mcp/server.go:252: setTestMemorySignificanceUpdater 0.0% +github.com/thebtf/engram/internal/mcp/server.go:260: SetWriteLintOrchestrator 0.0% +github.com/thebtf/engram/internal/mcp/server.go:269: SetRedactionRules 0.0% +github.com/thebtf/engram/internal/mcp/server.go:274: SetEmbeddingStores 0.0% +github.com/thebtf/engram/internal/mcp/server.go:282: SetRerankClient 0.0% +github.com/thebtf/engram/internal/mcp/server.go:290: SetStatsDB 0.0% +github.com/thebtf/engram/internal/mcp/server.go:297: HandleRequest 0.0% +github.com/thebtf/engram/internal/mcp/server.go:303: ListTools 0.0% +github.com/thebtf/engram/internal/mcp/server.go:332: Version 0.0% +github.com/thebtf/engram/internal/mcp/server.go:383: Run 0.0% +github.com/thebtf/engram/internal/mcp/server.go:427: handleRequest 0.0% +github.com/thebtf/engram/internal/mcp/server.go:461: handleNotification 0.0% +github.com/thebtf/engram/internal/mcp/server.go:473: handleInitialize 0.0% +github.com/thebtf/engram/internal/mcp/server.go:496: buildInstructions 0.0% +github.com/thebtf/engram/internal/mcp/server.go:660: storeMemoryTool 0.0% +github.com/thebtf/engram/internal/mcp/server.go:712: recallMemoryTool 0.0% +github.com/thebtf/engram/internal/mcp/server.go:805: primaryTools 0.0% +github.com/thebtf/engram/internal/mcp/server.go:942: handleToolsList 0.0% +github.com/thebtf/engram/internal/mcp/server.go:1612: handleToolsCall 0.0% +github.com/thebtf/engram/internal/mcp/server.go:1644: sanitizeToolCallArgs 0.0% +github.com/thebtf/engram/internal/mcp/server.go:1656: callTool 5.2% +github.com/thebtf/engram/internal/mcp/server.go:1874: sendResponse 0.0% +github.com/thebtf/engram/internal/mcp/server.go:1884: sendError 0.0% +github.com/thebtf/engram/internal/mcp/server.go:1896: handleFindSimilarObservations 0.0% +github.com/thebtf/engram/internal/mcp/server.go:1927: handleGetMemoryStats 0.0% +github.com/thebtf/engram/internal/mcp/server.go:2055: handleBackfillStatus 0.0% +github.com/thebtf/engram/internal/mcp/server.go:2071: handleCheckSystemHealth 0.0% +github.com/thebtf/engram/internal/mcp/server.go:2216: handleAnalyzeSearchPatterns 0.0% +github.com/thebtf/engram/internal/mcp/server.go:2246: handleSearchSessions 0.0% +github.com/thebtf/engram/internal/mcp/server.go:2251: handleListSessions 0.0% +github.com/thebtf/engram/internal/mcp/tools_admin.go:18: buildAdminTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_admin.go:68: adminActionsForEnv 33.3% +github.com/thebtf/engram/internal/mcp/tools_admin.go:80: vnextEnabled 0.0% +github.com/thebtf/engram/internal/mcp/tools_admin.go:84: handleAdmin 0.0% +github.com/thebtf/engram/internal/mcp/tools_admin.go:120: handlePurgeProject 0.0% +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:27: ambientHintsEnabledFromEnv 0.0% +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:32: ambientHintsTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:48: handleGetAmbientHints 0.0% +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:86: normalizeAmbientHintsToolLimit 0.0% +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:96: ambientHintItems 0.0% +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:114: errMissingSessionID 0.0% +github.com/thebtf/engram/internal/mcp/tools_brief.go:31: handleGetMemoryBrief 0.0% +github.com/thebtf/engram/internal/mcp/tools_brief.go:107: memoryBriefUsesPrincipalScope 0.0% +github.com/thebtf/engram/internal/mcp/tools_brief.go:115: handlePrincipalMemoryBrief 0.0% +github.com/thebtf/engram/internal/mcp/tools_brief.go:259: truncateBriefContent 0.0% +github.com/thebtf/engram/internal/mcp/tools_brief.go:270: filterInjectionByScope 0.0% +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:29: parseBulkStructuredArgs 100.0% +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:69: bulkOpsTools 0.0% +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:139: handleBulkPromote 80.0% +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:196: handleBulkDelete 80.0% +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:251: handleBulkSupersede 80.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:31: candidateItemFromDomain 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:51: newCandidateReviewSnapshot 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:59: requireCandidateReviewSnapshot 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:68: candidateTools 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:165: handleListCandidates 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:208: handleGetCandidate 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:239: handlePromoteCandidate 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:348: handleRejectCandidate 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:402: handleSupersedeCandidate 0.0% +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:34: codeIntelEnabled 0.0% +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:42: SetCodeChunkStore 0.0% +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:48: codebaseSearchTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:79: codebaseStatusTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:100: handleCodebaseSearch 0.0% +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:194: handleCodebaseStatus 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:21: getVault 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:35: credentialStore 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:49: handleStoreCredential 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:130: handleGetCredential 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:192: handleListCredentials 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:243: handleDeleteCredential 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:302: handleVaultStatus 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:338: expandTagHierarchy 0.0% +github.com/thebtf/engram/internal/mcp/tools_directives.go:16: directivesCaptureEnabledFromEnv 0.0% +github.com/thebtf/engram/internal/mcp/tools_directives.go:20: rememberDirectiveTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_directives.go:38: currentDirectiveCaptureService 0.0% +github.com/thebtf/engram/internal/mcp/tools_directives.go:48: handleRememberDirective 0.0% +github.com/thebtf/engram/internal/mcp/tools_directives.go:72: parseRememberDirectiveArgs 0.0% +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:10: handleDocsConsolidated 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents.go:15: handleListCollections 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents.go:61: handleListDocuments 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents.go:121: handleGetDocument 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents.go:165: handleRemoveDocument 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents.go:197: handleIngestDocument 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents.go:235: handleSearchCollection 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:15: handleDocCreate 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:61: handleDocRead 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:117: handleDocUpdate 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:122: handleDocList 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:175: handleDocHistory 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:232: handleDocComment 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:19: SetExperienceProvider 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:23: experienceHistoryTools 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:40: experienceHistoryReadSchema 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:65: experienceHistoryDetailSchema 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:82: experienceHistoryTriggerEnum 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:91: handleExperienceHistoryRead 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:103: handleExperienceHistoryDetail 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:115: parseExperienceHistoryReadArgs 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:142: parseExperienceHistoryDetailArgs 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:157: experienceHistoryTriggersFromArgs 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:180: marshalExperienceHistory 0.0% +github.com/thebtf/engram/internal/mcp/tools_feedback.go:12: handleFeedbackConsolidated 0.0% +github.com/thebtf/engram/internal/mcp/tools_feedback.go:36: handleSetSessionOutcome 0.0% +github.com/thebtf/engram/internal/mcp/tools_governance.go:27: governanceTools 0.0% +github.com/thebtf/engram/internal/mcp/tools_governance.go:98: handleListSnapshots 0.0% +github.com/thebtf/engram/internal/mcp/tools_governance.go:167: handleRollbackSnapshot 0.0% +github.com/thebtf/engram/internal/mcp/tools_governance.go:215: handlePinSnapshot 0.0% +github.com/thebtf/engram/internal/mcp/tools_governance.go:258: handleRedactionRulesStatus 0.0% +github.com/thebtf/engram/internal/mcp/tools_governance.go:284: resolveGovernanceActor 60.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:64: handleGraph 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:100: graphAddEdge 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:216: mcpGraphEndpointExists 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:243: mcpGraphEdgeAlreadyExists 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:276: graphAddNode 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:317: graphRemoveEdge 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:332: graphGetEdges 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:397: filterEdgesByNodeType 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:457: graphTraverse 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:480: graphFindPath 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:502: graphSynonyms 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:23: graphCreateEdgeWithGuards 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:80: graphEndpointExistsWithGuards 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:114: graphDuplicateEdgeExists 0.0% +github.com/thebtf/engram/internal/mcp/tools_ingest.go:25: handleIngest 0.0% +github.com/thebtf/engram/internal/mcp/tools_ingest.go:43: ingestDocument 0.0% +github.com/thebtf/engram/internal/mcp/tools_instincts.go:20: handleImportInstincts 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:19: issuesToolSchema 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:109: validateIssueActionParams 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:143: handleIssues 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:189: resolveSourceProject 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:205: handleIssueCreate 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:250: handleIssueList 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:311: handleIssueGet 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:344: handleIssueUpdate 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:382: handleIssueComment 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:408: handleIssueReopen 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:425: handleIssueClose 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:22: handleLifecycle 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:48: lifecycleInfo 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:87: lifecyclePromote 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:118: lifecycleDemote 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:149: lifecycleSetConfidence 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:172: lifecycleSetDefeasibility 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:191: lifecycleSleepStatus 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:197: lifecycleDecayPreview 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:233: marshalJSON 75.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:35: vnextFEnabled 100.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:42: isValidPrivacyScope 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:54: derivePrivacyScopeFromLegacy 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:82: deriveLegacyScopeFromPrivacy 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:93: applyPrincipalMemoryMetadata 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:135: addPrincipalMemoryFields 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:161: newScopedWriteLintMemoryStore 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:172: writeLintVisibilityCaller 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:186: writeLintVisibilityOptions 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:192: scopedWriteLintMemoryStore 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:202: filterVisibleWriteGateCandidates 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:214: domainManageAllowed 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:218: List 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:272: writeLintVisibilityFetchLimit 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:286: Get 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:297: Create 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:301: Update 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:305: MarkSuperseded 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:319: effectiveMemoryEditor 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:329: isValidStoreObservationType 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:354: handleStoreMemory 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1111: handleEditMemory 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1218: computeTTLDays 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1258: truncateTitle 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1270: keepRecallMemory 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1280: keepRecallMemoryFilters 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1342: handleRecallMemory 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1690: staleAdvisory 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1700: marshalWithStaleAdvisory 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1727: Rank 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1751: handleRecallMemoryHybrid 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:2252: handleRateMemory 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:2281: handleSuppressMemory 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:17: SetDomainRegistryService 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:21: checkDomainWriteMCP 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:43: addDomainWriteDecisionFields 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:51: marshalStoreMemoryAugmented 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:26: newMemoryStoreSignificanceUpdater 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:33: s6OutcomeEnabledFromEnv 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:37: effectiveMemorySignificanceUpdater 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:47: currentMemorySignificanceUpdater 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:58: rateMemorySignificanceTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:74: handleRateMemorySignificance 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:109: RateMemorySignificance 0.0% +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:18: s2MetaMemoryEnabled 0.0% +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:22: knowAboutTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:39: handleKnowAbout 0.0% +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:104: parseKnowAboutLimit 0.0% +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:118: summarizeMetaIndexTags 0.0% +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:153: summarizeMetaIndexDateRange 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:23: SetPrincipalMemoryQueryService 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:27: principalMemoryQueryTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:52: handleQueryPrincipalMemory 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:134: principalMemoryQueryCaller 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:149: parsePrincipalMemoryQueryLimit 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:160: principalMemoryQueryText 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:167: parsePrincipalMemoryQueryVisibility 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:179: parsePrincipalMemoryQueryOffset 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:190: parsePrincipalMemoryQueryInt 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:215: parsePrincipalMemoryQueryBool 0.0% +github.com/thebtf/engram/internal/mcp/tools_recall.go:28: handleRecall 0.0% +github.com/thebtf/engram/internal/mcp/tools_recall.go:125: parseRecallIncludedPrincipals 0.0% +github.com/thebtf/engram/internal/mcp/tools_recall.go:165: appendRecallIncludedPrincipalMemories 0.0% +github.com/thebtf/engram/internal/mcp/tools_recall.go:223: recallIncludeTargetMatchesCaller 0.0% +github.com/thebtf/engram/internal/mcp/tools_recall.go:231: recallPrincipalQueryItemToMemory 0.0% +github.com/thebtf/engram/internal/mcp/tools_recall.go:247: handleRecallSearch 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:20: currentReviewLoopCandidateLister 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:30: reviewLoopCandidateTools 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:65: reviewLoopReadSchema 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:78: reviewPacketIDSchema 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:91: handleReviewMetricsRead 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:110: handleReviewQueueRead 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:140: handleReviewPacketDetail 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:151: handleReviewPacketPreviewAction 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:167: handleReviewPacketApplyAction 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:189: parseReviewLoopReadArgs 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:212: reviewLoopMCPPacketTypeSupported 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:217: reviewLoopActionFromArgs 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:225: reviewLoopReasonFromArgs 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:233: loadReviewPacketCandidate 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:256: applyReviewPacketPreserve 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:278: applyReviewPacketSuppress 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:296: reviewLoopMemoryFromCandidate 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:320: filterRiskyMCPReviewCandidates 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:330: marshalReviewLoop 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:17: ruleGovernanceReadTools 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:126: handleRuleGovernanceHealth 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:176: handleRuleGovernanceQueue 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:233: handleRuleGovernanceSnapshots 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:278: handleRuleGovernanceUsefulness 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:338: handleRuleGovernanceTransition 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:373: handleRuleGovernancePinSnapshot 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:406: handleRuleGovernanceRollback 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:483: requireRuleGovernanceReadAccess 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:495: requireRuleGovernanceProjectOrAdmin 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:505: ruleGovernanceCallerIsAdmin 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:510: requireRuleGovernanceAdminAccess 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:518: redactRuleGovernanceEvidenceHandles 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:535: redactRuleGovernanceEvidenceHandle 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:553: ruleGovernanceEvidenceHandleHasSensitiveText 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:559: isCanonicalRuleGovernanceEvidenceHandle 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:580: isSafeRuleGovernanceEvidenceID 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:594: parseRuleGovernanceTransitionRequest 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:604: parseRuleGovernanceSince 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:623: boundedRuleGovernanceLimit 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:634: formatRuleGovernanceTime 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:641: formatRuleGovernanceTimePtr 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:649: stringRuleCandidateStatusCounts 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:657: stringRuleVersionStateCounts 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:665: stringRuleArbiterRunStatusCounts 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:673: stringRuleInjectionEventTypeCounts 0.0% +github.com/thebtf/engram/internal/mcp/tools_rules.go:17: handleStoreRule 0.0% +github.com/thebtf/engram/internal/mcp/tools_rules.go:133: handleListRules 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:22: handleSettingsConsolidated 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:51: SetSettingsStore 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:57: settingsStore 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:67: isSecretSettingKey 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:74: requireAdmin 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:85: handleSetSetting 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:145: handleGetSetting 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:181: handleListSettings 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:216: handleDeleteSetting 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:35: resumeScopesFromFields 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:52: stateTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:82: setStateTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:142: handleGetState 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:219: handleSetState 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:274: decodeSessionStateForWrite 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:292: validateSessionStateBudget 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:303: validateNativeResumePacket 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:349: decodeProjectStateForWrite 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:364: requireStateObject 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:383: requireNestedObject 0.0% +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:10: handleStoreConsolidated 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:21: SetTemporalTruthProvider 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:25: temporalTruthEnabledFromEnv 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:30: temporalTruthTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:39: temporalTruthRefreshTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:48: temporalTruthRefreshSchema 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:58: temporalTruthSchema 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:72: currentTemporalTruthProvider 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:82: handleTemporalTruth 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:102: handleTemporalTruthRefresh 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:122: parseTemporalTruthArgs 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:151: parseTemporalTruthRefreshProject 0.0% +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:10: handleVaultConsolidated 0.0% +total: (statements) 9.0% +test_exit=0 +active_sessions_before_terminate=0 +database_residue=0 +activity_residue=0 +finished_utc=2026-07-10T09:07:15.2380703Z diff --git a/.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/26-review-full-gorm.log b/.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/26-review-full-gorm.log new file mode 100644 index 00000000..0e02522f --- /dev/null +++ b/.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/26-review-full-gorm.log @@ -0,0 +1,356 @@ +base_sha=68b2ce5835c7c6efdf1c68da9eedcb8d9c3837ef +head_sha=68b2ce5835c7c6efdf1c68da9eedcb8d9c3837ef +database=engram_mkr_bedge_review_full_gorm_20260710a +command=go test -p=1 ./internal/db/gorm -count=1 +started_utc=2026-07-10T09:07:29.3624972Z +{"level":"warn","error":"ERROR: relation \"observation_vectors\" does not exist (SQLSTATE 42P01)","time":"2026-07-10T12:07:32+03:00","message":"migration 040: orphan vector cleanup failed (non-fatal)"} +{"level":"info","garbage_deleted":0,"orphan_vectors_deleted":0,"time":"2026-07-10T12:07:32+03:00","message":"migration 040: garbage cleanup complete"} +{"level":"info","orphan_vectors_deleted":0,"time":"2026-07-10T12:07:32+03:00","message":"migration 041: orphan vector purge complete"} +{"level":"info","patterns_deleted":0,"time":"2026-07-10T12:07:32+03:00","message":"migration 042: low-quality pattern purge complete"} +{"level":"info","total_deleted":0,"time":"2026-07-10T12:07:32+03:00","message":"migration 043: radical observation cleanup complete"} +{"level":"warn","error":"ERROR: extension \"vectorscale\" is not available (SQLSTATE 0A000)","time":"2026-07-10T12:07:33+03:00","message":"migration 109: vectorscale extension not available, skipping DiskANN index"} + +2026/07/10 12:07:35 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/candidate_store.go:152 ERROR: duplicate key value violates unique constraint "idx_candidates_fingerprint_pending" (SQLSTATE 23505) +[2.499ms] [rows:0] INSERT INTO "crystallization_candidates" ("created_at","updated_at","review_after","source_session_id","proposed_content","proposed_tier","proposed_epistemic_type","proposed_promotion_target","evidence_handles","privacy_scope","status","fingerprint","affected_projects","promoted_memory_id","confidence","recurrence_count") VALUES ('2026-07-10 12:07:35.834','2026-07-10 12:07:35.834','2026-07-17 09:07:35.834','session-fp-1783674455826591600','idempotent content','episodic','observation','rule','[]','project','pending','d7717189018819e9','{}',NULL,0.5,1) RETURNING "id" + +2026/07/10 12:07:36 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/snapshot_store.go:379 ERROR: forced snapshot amend failure (SQLSTATE P0001) +[1.500ms] [rows:0] UPDATE "bulk_op_snapshots" SET "affected_memory_ids"='{3}',"before_state"='{"candidate:16":{"kind":"restore","before":{"id":16,"status":"pending","confidence":0.5,"created_at":"2026-07-10T12:07:36.5636371+03:00","updated_at":"2026-07-10T12:07:36.5636371+03:00","fingerprint":"333f441010dbc8ca","review_after":"2026-07-17T09:07:36.5626386Z","privacy_scope":"project","proposed_tier":"episodic","proposed_content":"content for snapshot amend rollback test","recurrence_count":1,"affected_projects":["test-project"],"source_session_id":"session-promote-snapshot-rollback-1783674456562638600","proposed_epistemic_type":"observation","proposed_promotion_target":"rule"}},"memory:3":{"kind":"delete"}}' WHERE snapshot_id = 'candidate-review-9b4ed382-31fd-465f-9f55-0013ed58a326' + +2026/07/10 12:07:37 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/audit_store.go:46 ERROR: forced candidate_review audit failure (SQLSTATE P0001) +[1.500ms] [rows:0] INSERT INTO "audit_log" ("memory_id","action","actor","source_session_id","before_state","after_state","reason") VALUES (NULL,'candidate_review','agent/fail','session-candidate-review-supersede-audit-rollback-1783674457042805800','{"created_at":"2026-07-10T12:07:37.043305+03:00","updated_at":"2026-07-10T12:07:37.043305+03:00","review_after":"2026-07-17T12:07:37.042805+03:00","source_session_id":"session-candidate-review-supersede-audit-rollback-1783674457042805800","proposed_content":"content for candidate review transaction test","proposed_tier":"episodic","proposed_epistemic_type":"observation","proposed_promotion_target":"rule","privacy_scope":"project","status":"pending","fingerprint":"f87a1593a81b626f","affected_projects":["test-project"],"id":20,"confidence":0.5,"recurrence_count":1}','{"created_at":"2026-07-10T12:07:37.043305+03:00","updated_at":"2026-07-10T12:07:37.063845+03:00","review_after":"2026-07-17T12:07:37.042805+03:00","source_session_id":"session-candidate-review-supersede-audit-rollback-1783674457042805800","proposed_content":"content for candidate review transaction test","proposed_tier":"episodic","proposed_epistemic_type":"observation","proposed_promotion_target":"rule","privacy_scope":"project","status":"superseded","fingerprint":"f87a1593a81b626f","affected_projects":["test-project"],"id":20,"confidence":0.5,"recurrence_count":1}','candidate 20 review action supersede') RETURNING "id","created_at" +{"level":"debug","connections":2,"time":"2026-07-10T12:07:41+03:00","message":"Connection pool warmed"} +{"level":"debug","connections":2,"time":"2026-07-10T12:07:41+03:00","message":"Connection pool warmed"} +{"level":"debug","connections":2,"time":"2026-07-10T12:07:41+03:00","message":"Connection pool warmed"} +{"level":"debug","connections":2,"time":"2026-07-10T12:07:41+03:00","message":"Connection pool warmed"} +{"level":"debug","connections":2,"time":"2026-07-10T12:07:41+03:00","message":"Connection pool warmed"} +{"level":"info","time":"2026-07-10T12:07:41+03:00","message":"Starting database optimization"} +{"level":"info","duration":201.7541,"time":"2026-07-10T12:07:42+03:00","message":"Database optimization complete"} +{"level":"debug","connections":2,"time":"2026-07-10T12:07:42+03:00","message":"Connection pool warmed"} +{"level":"debug","connections":2,"time":"2026-07-10T12:07:42+03:00","message":"Connection pool warmed"} +{"level":"debug","connections":2,"time":"2026-07-10T12:07:42+03:00","message":"Connection pool warmed"} +{"level":"debug","connections":2,"time":"2026-07-10T12:07:42+03:00","message":"Connection pool warmed"} +{"level":"debug","connections":2,"time":"2026-07-10T12:07:42+03:00","message":"Connection pool warmed"} +{"level":"debug","connections":2,"time":"2026-07-10T12:07:42+03:00","message":"Connection pool warmed"} +{"level":"debug","connections":2,"time":"2026-07-10T12:07:42+03:00","message":"Connection pool warmed"} + +2026/07/10 12:07:48 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/migrations_integration_test.go:214 ERROR: new row for relation "memories" violates check constraint "memories_privacy_scope_chk" (SQLSTATE 23514) +[0.500ms] [rows:0] INSERT INTO memories (project, content, privacy_scope) VALUES ('t001-test', 'T001 invalid fixture', 'invalid_scope') + +2026/07/10 12:07:48 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/migrations_integration_test.go:175 sql: database is closed +[0.000ms] [rows:0] DELETE FROM memories WHERE project = 't001-test' + +2026/07/10 12:07:48 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/migrations_integration_test.go:260 sql: database is closed +[0.000ms] [rows:0] DELETE FROM memories WHERE project = 't006-backfill-test' + +2026/07/10 12:07:48 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/migrations_integration_test.go:379 sql: database is closed +[0.000ms] [rows:0] DELETE FROM memories WHERE project = 't001b-test' + +2026/07/10 12:07:48 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/migrations_integration_test.go:479 ERROR: new row for relation "knowledge_nodes" violates check constraint "knowledge_nodes_type_chk" (SQLSTATE 23514) +[1.000ms] [rows:0] INSERT INTO knowledge_nodes (node_type, external_ref, project) VALUES ('invalid_node_type', 'ref-invalid', 't009-test') + +2026/07/10 12:07:48 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/migrations_integration_test.go:490 ERROR: duplicate key value violates unique constraint "idx_knowledge_nodes_type_ref_active" (SQLSTATE 23505) +[1.000ms] [rows:0] INSERT INTO knowledge_nodes (node_type, external_ref, project) VALUES ('skill', 'unique-test-skill', 't009-test') + +2026/07/10 12:07:48 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/migrations_integration_test.go:444 sql: database is closed +[0.000ms] [rows:0] DELETE FROM knowledge_nodes WHERE project = 't009-test' + +2026/07/10 12:07:48 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/migrations_integration_test.go:573 sql: database is closed +[0.000ms] [rows:0] DELETE FROM memories WHERE project = 't010-test' + +2026/07/10 12:07:48 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/migrations_integration_test.go:574 sql: database is closed +[0.000ms] [rows:0] DELETE FROM knowledge_edges WHERE source_session_id = 't010-test' + +2026/07/10 12:07:48 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/migrations_integration_test.go:531 sql: database is closed +[0.000ms] [rows:0] DELETE FROM knowledge_nodes WHERE project = 't010-test' + +2026/07/10 12:07:49 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/migrations_integration_test.go:695 ERROR: new row for relation "crystallization_candidates" violates check constraint "crystallization_candidates_status_check" (SQLSTATE 23514) +[1.000ms] [rows:0] + INSERT INTO crystallization_candidates (proposed_content, status) + VALUES ('test', 'invalid_status') + + +2026/07/10 12:07:49 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/migrations_integration_test.go:823 ERROR: new row for relation "bulk_op_snapshots" violates check constraint "bulk_op_snapshots_op_type_check" (SQLSTATE 23514) +[1.004ms] [rows:0] + INSERT INTO bulk_op_snapshots (snapshot_id, op_type, actor, before_state) + VALUES ('test-snap-invalid', 'invalid_op', 'test-actor', '{}') + + +2026/07/10 12:07:49 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/migrations_integration_test.go:780 sql: database is closed +[0.000ms] [rows:0] DELETE FROM bulk_op_snapshots WHERE snapshot_id LIKE 'test-snap-%' + +2026/07/10 12:07:49 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/migrations_integration_test.go:884 ERROR: new row for relation "bulk_op_snapshots" violates check constraint "bulk_op_snapshots_op_type_check" (SQLSTATE 23514) +[1.502ms] [rows:0] + INSERT INTO bulk_op_snapshots (snapshot_id, op_type, actor, before_state) + VALUES ('test-m153-candidate-review-1783674469289279000-invalid', 'invalid_op_after_blocked_rollback', 'test-actor', '{}') + + +2026/07/10 12:07:49 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/migrations_integration_test.go:873 sql: database is closed +[0.000ms] [rows:0] DELETE FROM bulk_op_snapshots WHERE snapshot_id IN ('test-m153-candidate-review-1783674469289279000', 'test-m153-candidate-review-1783674469289279000-invalid') + +2026/07/10 12:07:49 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/migrations_integration_test.go:921 ERROR: new row for relation "bulk_op_snapshots" violates check constraint "bulk_op_snapshots_op_type_check" (SQLSTATE 23514) +[1.500ms] [rows:0] + INSERT INTO bulk_op_snapshots (snapshot_id, op_type, actor, before_state) + VALUES ('test-m154-forgetting-review-1783674469397280200-invalid', 'invalid_op_after_blocked_forgetting_rollback', 'test-actor', '{}') + + +2026/07/10 12:07:49 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/migrations_integration_test.go:910 sql: database is closed +[0.000ms] [rows:0] DELETE FROM bulk_op_snapshots WHERE snapshot_id IN ('test-m154-forgetting-review-1783674469397280200', 'test-m154-forgetting-review-1783674469397280200-invalid') + +2026/07/10 12:07:49 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/migrations_integration_test.go:947 sql: database is closed +[0.000ms] [rows:0] DELETE FROM rule_governance_snapshots WHERE snapshot_id = 'test-rg-snap-1783674469509816800' + +2026/07/10 12:07:49 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/migrations_integration_test.go:1034 ERROR: new row for relation "api_tokens" violates check constraint "api_tokens_principal_kind_chk" (SQLSTATE 23514) +[2.007ms] [rows:0] + INSERT INTO api_tokens (name, token_hash, token_prefix, scope, principal, principal_kind) + VALUES ('test-principal-1783674469633314800-invalid', 'hash-invalid', 'p148bad0', 'read-write', 'principal/bad', 'daemon') + + +2026/07/10 12:07:49 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/migrations_integration_test.go:981 sql: database is closed +[0.000ms] [rows:0] DELETE FROM api_tokens WHERE name LIKE 'test-principal-1783674469633314800%' + +2026/07/10 12:07:51 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/rule_governance_store.go:323 record not found +[2.000ms] [rows:0] SELECT * FROM "rule_candidates" WHERE fingerprint = 'rg0-arbiter-annotation-1783674471496051000' AND status IN ('pending','drafted') ORDER BY created_at ASC,"rule_candidates"."id" LIMIT 1 + +2026/07/10 12:07:51 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/rule_governance_store.go:323 record not found +[2.000ms] [rows:0] SELECT * FROM "rule_candidates" WHERE fingerprint = 'rg0-arbiter-terminal-run-1783674471636080300' AND status IN ('pending','drafted') ORDER BY created_at ASC,"rule_candidates"."id" LIMIT 1 + +2026/07/10 12:07:51 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/rule_governance_store.go:323 record not found +[2.000ms] [rows:0] SELECT * FROM "rule_candidates" WHERE fingerprint = 'rg0-arbiter-annotation-mismatch-1783674471766333700' AND status IN ('pending','drafted') ORDER BY created_at ASC,"rule_candidates"."id" LIMIT 1 + +2026/07/10 12:07:51 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/rule_governance_store.go:323 record not found +[0.500ms] [rows:0] SELECT * FROM "rule_candidates" WHERE fingerprint = 'rg0-arbiter-annotation-other-1783674471778333600' AND status IN ('pending','drafted') ORDER BY created_at ASC,"rule_candidates"."id" LIMIT 1 + +2026/07/10 12:07:51 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/rule_governance_store.go:627 record not found +[1.500ms] [rows:0] SELECT * FROM "rule_arbiter_evaluations" WHERE id = 2 AND candidate_id = 3 AND run_id = 3 AND action = 'hold' ORDER BY "rule_arbiter_evaluations"."id" LIMIT 1 + +2026/07/10 12:07:51 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/rule_governance_store.go:323 record not found +[1.500ms] [rows:0] SELECT * FROM "rule_candidates" WHERE fingerprint = 'rg0-arbiter-requeue-1783674471903409500' AND status IN ('pending','drafted') ORDER BY created_at ASC,"rule_candidates"."id" LIMIT 1 +--- FAIL: TestRuleGovernanceStore_AnnotatedCandidateWaitsUntilReviewAfter (0.16s) + rule_arbiter_store_test.go:195: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/rule_arbiter_store_test.go:195 + Error: []int64{1} does not contain 5 + Test: TestRuleGovernanceStore_AnnotatedCandidateWaitsUntilReviewAfter + +2026/07/10 12:07:52 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/rule_governance_store.go:323 record not found +[1.500ms] [rows:0] SELECT * FROM "rule_candidates" WHERE fingerprint = 'rg0-arbiter-claim-race-1783674472062914900' AND status IN ('pending','drafted') ORDER BY created_at ASC,"rule_candidates"."id" LIMIT 1 + +2026/07/10 12:07:52 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/rule_governance_store.go:323 record not found +[2.500ms] [rows:0] SELECT * FROM "rule_candidates" WHERE fingerprint = 'rg0-arbiter-confidence-1783674472207960600' AND status IN ('pending','drafted') ORDER BY created_at ASC,"rule_candidates"."id" LIMIT 1 + +2026/07/10 12:07:52 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/rule_governance_store.go:323 record not found +[2.000ms] [rows:0] SELECT * FROM "rule_candidates" WHERE fingerprint = 'rg0-rg3-health-1783674472341623000-pending-1783674472341623000' AND status IN ('pending','drafted') ORDER BY created_at ASC,"rule_candidates"."id" LIMIT 1 + +2026/07/10 12:07:52 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/rule_governance_store.go:323 record not found +[1.000ms] [rows:0] SELECT * FROM "rule_candidates" WHERE fingerprint = 'rg0-rg3-health-1783674472341623000-rejected-1783674472351622600' AND status IN ('pending','drafted') ORDER BY created_at ASC,"rule_candidates"."id" LIMIT 1 +--- FAIL: TestRuleGovernanceStore_GetLifecycleHealthAggregatesGovernanceTables (0.19s) + rule_governance_rg3_store_test.go:93: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/rule_governance_rg3_store_test.go:93 + Error: Not equal: + expected: 1 + actual : 5 + Test: TestRuleGovernanceStore_GetLifecycleHealthAggregatesGovernanceTables +--- FAIL: TestRuleGovernanceStore_GetLifecycleHealthOmitsGlobalArbiterRunsForProjectScopedReads (0.13s) + rule_governance_rg3_store_test.go:128: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/rule_governance_rg3_store_test.go:128 + Error: Not equal: + expected: 1 + actual : 6 + Test: TestRuleGovernanceStore_GetLifecycleHealthOmitsGlobalArbiterRunsForProjectScopedReads + +2026/07/10 12:07:52 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/rule_governance_store.go:323 record not found +[2.000ms] [rows:0] SELECT * FROM "rule_candidates" WHERE fingerprint = 'rg0-rg3-queue-1783674472679096500-global-1783674472679096500' AND status IN ('pending','drafted') ORDER BY created_at ASC,"rule_candidates"."id" LIMIT 1 + +2026/07/10 12:07:52 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/rule_governance_store.go:323 record not found +[0.999ms] [rows:0] SELECT * FROM "rule_candidates" WHERE fingerprint = 'rg0-rg3-queue-1783674472679096500-conflict-1783674472687596100' AND status IN ('pending','drafted') ORDER BY created_at ASC,"rule_candidates"."id" LIMIT 1 + +2026/07/10 12:07:52 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/rule_governance_store.go:323 record not found +[0.500ms] [rows:0] SELECT * FROM "rule_candidates" WHERE fingerprint = 'rg0-rg3-queue-1783674472679096500-hold-1783674472693093000' AND status IN ('pending','drafted') ORDER BY created_at ASC,"rule_candidates"."id" LIMIT 1 + +2026/07/10 12:07:52 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/rule_governance_store.go:323 record not found +[1.000ms] [rows:0] SELECT * FROM "rule_candidates" WHERE fingerprint = 'rg0-rg3-queue-1783674472679096500-unclear-1783674472698591000' AND status IN ('pending','drafted') ORDER BY created_at ASC,"rule_candidates"."id" LIMIT 1 + +2026/07/10 12:07:52 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/rule_governance_store.go:323 record not found +[2.005ms] [rows:0] SELECT * FROM "rule_candidates" WHERE fingerprint = 'rg0-rg3-queue-filter-1783674472844091400-live-conflict-1783674472844091400' AND status IN ('pending','drafted') ORDER BY created_at ASC,"rule_candidates"."id" LIMIT 1 + +2026/07/10 12:07:52 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/rule_governance_store.go:323 record not found +[0.500ms] [rows:0] SELECT * FROM "rule_candidates" WHERE fingerprint = 'rg0-rg3-queue-filter-1783674472844091400-resolved-conflict-1783674472852591300' AND status IN ('pending','drafted') ORDER BY created_at ASC,"rule_candidates"."id" LIMIT 1 + +2026/07/10 12:07:52 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/rule_governance_store.go:323 record not found +[0.498ms] [rows:0] SELECT * FROM "rule_candidates" WHERE fingerprint = 'rg0-rg3-queue-filter-1783674472844091400-noise-0-1783674472868094700' AND status IN ('pending','drafted') ORDER BY created_at ASC,"rule_candidates"."id" LIMIT 1 + +2026/07/10 12:07:52 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/rule_governance_store.go:323 record not found +[1.001ms] [rows:0] SELECT * FROM "rule_candidates" WHERE fingerprint = 'rg0-rg3-queue-filter-1783674472844091400-noise-1-1783674472873091600' AND status IN ('pending','drafted') ORDER BY created_at ASC,"rule_candidates"."id" LIMIT 1 + +2026/07/10 12:07:52 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/rule_governance_store.go:323 record not found +[1.000ms] [rows:0] SELECT * FROM "rule_candidates" WHERE fingerprint = 'rg0-rg3-queue-filter-1783674472844091400-noise-2-1783674472878592300' AND status IN ('pending','drafted') ORDER BY created_at ASC,"rule_candidates"."id" LIMIT 1 + +2026/07/10 12:07:53 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/migration_rule_governance.go:196 ERROR: cannot drop table rule_versions because other objects depend on it (SQLSTATE 2BP01) +[2.610ms] [rows:0] DROP TABLE IF EXISTS rule_versions +--- FAIL: TestMigration144_RuleGovernanceRollbackAndReapply (0.15s) + rule_governance_store_test.go:32: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/rule_governance_store_test.go:32 + Error: Received unexpected error: + ERROR: cannot drop table rule_versions because other objects depend on it (SQLSTATE 2BP01) + Test: TestMigration144_RuleGovernanceRollbackAndReapply + +2026/07/10 12:07:53 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/migration_rule_governance.go:196 ERROR: cannot drop table rule_versions because other objects depend on it (SQLSTATE 2BP01) +[1.002ms] [rows:0] DROP TABLE IF EXISTS rule_versions +--- FAIL: TestMigration144_RuleGovernanceEscapeConstraints (0.15s) + rule_governance_store_test.go:45: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/rule_governance_store_test.go:45 + Error: Received unexpected error: + ERROR: cannot drop table rule_versions because other objects depend on it (SQLSTATE 2BP01) + Test: TestMigration144_RuleGovernanceEscapeConstraints + +2026/07/10 12:07:54 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/rule_governance_store.go:323 record not found +[2.000ms] [rows:0] SELECT * FROM "rule_candidates" WHERE fingerprint = 'rg0-idempotent-fingerprint' AND status IN ('pending','drafted') ORDER BY created_at ASC,"rule_candidates"."id" LIMIT 1 + +2026/07/10 12:07:54 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/rule_governance_store.go:323 record not found +[2.502ms] [rows:0] SELECT * FROM "rule_candidates" WHERE fingerprint = 'rg0-draft-fingerprint' AND status IN ('pending','drafted') ORDER BY created_at ASC,"rule_candidates"."id" LIMIT 1 + +2026/07/10 12:07:54 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/rule_governance_store.go:1625 record not found +[1.500ms] [rows:0] SELECT * FROM "rule_versions" WHERE source_candidate_id = 21 ORDER BY "rule_versions"."id" LIMIT 1 + +2026/07/10 12:07:54 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/rule_governance_store.go:323 record not found +[2.500ms] [rows:0] SELECT * FROM "rule_candidates" WHERE fingerprint = 'rg0-unknown-actor-kind-1783674474954388900' AND status IN ('pending','drafted') ORDER BY created_at ASC,"rule_candidates"."id" LIMIT 1 + +2026/07/10 12:07:54 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/rule_governance_store.go:1625 record not found +[2.002ms] [rows:0] SELECT * FROM "rule_versions" WHERE source_candidate_id = 22 ORDER BY "rule_versions"."id" LIMIT 1 + +2026/07/10 12:07:55 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/rule_governance_store.go:323 record not found +[2.002ms] [rows:0] SELECT * FROM "rule_candidates" WHERE fingerprint = 'rg0-blank-transition-actor-1783674475071733700' AND status IN ('pending','drafted') ORDER BY created_at ASC,"rule_candidates"."id" LIMIT 1 + +2026/07/10 12:07:55 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/rule_governance_store.go:1625 record not found +[1.500ms] [rows:0] SELECT * FROM "rule_versions" WHERE source_candidate_id = 23 ORDER BY "rule_versions"."id" LIMIT 1 + +2026/07/10 12:07:55 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/rule_governance_store.go:323 record not found +[1.000ms] [rows:0] SELECT * FROM "rule_candidates" WHERE fingerprint = 'rg0-blank-transition-actor kind-1783674475084430500' AND status IN ('pending','drafted') ORDER BY created_at ASC,"rule_candidates"."id" LIMIT 1 + +2026/07/10 12:07:55 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/rule_governance_store.go:1625 record not found +[0.999ms] [rows:0] SELECT * FROM "rule_versions" WHERE source_candidate_id = 24 ORDER BY "rule_versions"."id" LIMIT 1 + +2026/07/10 12:07:55 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/rule_governance_store.go:323 record not found +[0.500ms] [rows:0] SELECT * FROM "rule_candidates" WHERE fingerprint = 'rg0-blank-transition-reason-1783674475093430900' AND status IN ('pending','drafted') ORDER BY created_at ASC,"rule_candidates"."id" LIMIT 1 + +2026/07/10 12:07:55 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/rule_governance_store.go:1625 record not found +[0.500ms] [rows:0] SELECT * FROM "rule_versions" WHERE source_candidate_id = 25 ORDER BY "rule_versions"."id" LIMIT 1 + +2026/07/10 12:07:55 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/rule_governance_store.go:323 record not found +[1.000ms] [rows:0] SELECT * FROM "rule_candidates" WHERE fingerprint = 'rg0-blank-transition-evidence handle-1783674475101931000' AND status IN ('pending','drafted') ORDER BY created_at ASC,"rule_candidates"."id" LIMIT 1 + +2026/07/10 12:07:55 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/rule_governance_store.go:1625 record not found +[1.001ms] [rows:0] SELECT * FROM "rule_versions" WHERE source_candidate_id = 26 ORDER BY "rule_versions"."id" LIMIT 1 + +2026/07/10 12:07:55 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/rule_governance_store.go:323 record not found +[2.998ms] [rows:0] SELECT * FROM "rule_candidates" WHERE fingerprint = 'rg0-snapshot-required-1783674475222995300' AND status IN ('pending','drafted') ORDER BY created_at ASC,"rule_candidates"."id" LIMIT 1 + +2026/07/10 12:07:55 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/rule_governance_store.go:1625 record not found +[1.997ms] [rows:0] SELECT * FROM "rule_versions" WHERE source_candidate_id = 27 ORDER BY "rule_versions"."id" LIMIT 1 + +2026/07/10 12:07:55 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/rule_governance_store.go:323 record not found +[2.001ms] [rows:0] SELECT * FROM "rule_candidates" WHERE fingerprint = 'rg0-snapshot-log-1783674475375906800' AND status IN ('pending','drafted') ORDER BY created_at ASC,"rule_candidates"."id" LIMIT 1 + +2026/07/10 12:07:55 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/rule_governance_store.go:1625 record not found +[1.999ms] [rows:0] SELECT * FROM "rule_versions" WHERE source_candidate_id = 28 ORDER BY "rule_versions"."id" LIMIT 1 + +2026/07/10 12:07:55 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/rule_governance_store.go:323 record not found +[2.497ms] [rows:0] SELECT * FROM "rule_candidates" WHERE fingerprint = 'rg0-authority-1783674475618907200' AND status IN ('pending','drafted') ORDER BY created_at ASC,"rule_candidates"."id" LIMIT 1 + +2026/07/10 12:07:55 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/rule_governance_store.go:1625 record not found +[1.501ms] [rows:0] SELECT * FROM "rule_versions" WHERE source_candidate_id = 29 ORDER BY "rule_versions"."id" LIMIT 1 + +2026/07/10 12:07:55 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/rule_governance_store.go:323 record not found +[2.001ms] [rows:0] SELECT * FROM "rule_candidates" WHERE fingerprint = 'rg0-log-rollback-1783674475770164300' AND status IN ('pending','drafted') ORDER BY created_at ASC,"rule_candidates"."id" LIMIT 1 + +2026/07/10 12:07:55 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/rule_governance_store.go:1625 record not found +[1.000ms] [rows:0] SELECT * FROM "rule_versions" WHERE source_candidate_id = 30 ORDER BY "rule_versions"."id" LIMIT 1 + +2026/07/10 12:07:55 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/rule_governance_store.go:1664 ERROR: new row for relation "rule_transition_log" violates check constraint "rg0_transition_log_fail_test" (SQLSTATE 23514) +[0.500ms] [rows:0] INSERT INTO "rule_transition_log" ("created_at","rule_version_id","candidate_id","actor","actor_kind","action","from_state","to_state","reason","evidence_handles_json","snapshot_id") VALUES ('2026-07-10 12:07:55.806',22,30,'codex','agent','rule_version_transition','shadow','canary','force-log-fail','["evidence:rg0-transition"]','') RETURNING "id" + +2026/07/10 12:07:55 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/rule_governance_store.go:323 record not found +[1.500ms] [rows:0] SELECT * FROM "rule_candidates" WHERE fingerprint = 'rg0-snapshot-rollback-1783674475906164000' AND status IN ('pending','drafted') ORDER BY created_at ASC,"rule_candidates"."id" LIMIT 1 + +2026/07/10 12:07:55 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/rule_governance_store.go:1625 record not found +[1.500ms] [rows:0] SELECT * FROM "rule_versions" WHERE source_candidate_id = 31 ORDER BY "rule_versions"."id" LIMIT 1 + +2026/07/10 12:07:55 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/rule_governance_store.go:1692 ERROR: duplicate key value violates unique constraint "rule_governance_snapshots_snapshot_id_key" (SQLSTATE 23505) +[1.000ms] [rows:0] INSERT INTO "rule_governance_snapshots" ("created_at","rolled_back_at","snapshot_id","op_type","actor","before_state_json","after_state_json","status","pinned") VALUES ('2026-07-10 12:07:55.947',NULL,'rg0-duplicate-1783674475940664300','rule_transition','codex','{"project":"rg0-project","rule_versions":[{"state":"canary","id":23}]}','{"project":"rg0-project","rule_versions":[{"state":"active_project","id":23}]}','committed',false) RETURNING "id" + +2026/07/10 12:07:56 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/migration_rule_governance.go:196 ERROR: cannot drop table rule_versions because other objects depend on it (SQLSTATE 2BP01) +[1.500ms] [rows:0] DROP TABLE IF EXISTS rule_versions +--- FAIL: TestMigration144_RuleGovernanceSnapshotStatusesAcceptExtendedStates (0.13s) + rule_governance_store_test.go:729: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/rule_governance_store_test.go:729 + Error: Received unexpected error: + ERROR: cannot drop table rule_versions because other objects depend on it (SQLSTATE 2BP01) + Test: TestMigration144_RuleGovernanceSnapshotStatusesAcceptExtendedStates + +2026/07/10 12:07:56 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/rule_injection_event_store_test.go:32 ERROR: new row for relation "rule_injection_events" violates check constraint "rule_injection_events_type_chk" (SQLSTATE 23514) +[1.500ms] [rows:0] + INSERT INTO rule_injection_events (session_id, project, surface, event_type) + VALUES ('rg2-invalid-session', 'rg2-project', 'session-start', 'invalid_event') + + +2026/07/10 12:08:01 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/state_store_test.go:188 record not found +[2.000ms] [rows:0] SELECT * FROM "audit_log" WHERE action = 'write_project_state' AND actor = 'agent' AND reason LIKE '%state-audit-project-1783674481107651500%' ORDER BY id DESC,"audit_log"."id" LIMIT 1 + +2026/07/10 12:08:01 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/state_store_test.go:293 record not found +[1.503ms] [rows:0] SELECT * FROM "audit_log" WHERE action = 'read_resume_conflict' AND actor = 'agent:developer' AND source_session_id = 'state-audit-conflict-1783674481365639500' ORDER BY id DESC,"audit_log"."id" LIMIT 1 + +2026/07/10 12:08:01 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/state_store_test.go:397 record not found +[1.499ms] [rows:0] SELECT * FROM "audit_log" WHERE action = 'read_resume_state' AND actor = 'agent:developer' AND source_session_id = 'state-resume-session-1783674481498169500' ORDER BY id DESC,"audit_log"."id" LIMIT 1 + +2026/07/10 12:08:02 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/state_store.go:216 record not found +[1.000ms] [rows:0] SELECT * FROM "agent_project_state" WHERE project = 'state-resume-project-scope-missing-1783674482009713700' ORDER BY "agent_project_state"."id" LIMIT 1 +{"level":"debug","connections":5,"time":"2026-07-10T12:08:02+03:00","message":"Connection pool warmed"} +{"level":"debug","connections":5,"time":"2026-07-10T12:08:02+03:00","message":"Connection pool warmed"} +{"level":"debug","connections":5,"time":"2026-07-10T12:08:02+03:00","message":"Connection pool warmed"} +{"level":"debug","connections":5,"time":"2026-07-10T12:08:02+03:00","message":"Connection pool warmed"} +{"level":"debug","connections":5,"time":"2026-07-10T12:08:02+03:00","message":"Connection pool warmed"} +{"level":"debug","connections":5,"time":"2026-07-10T12:08:02+03:00","message":"Connection pool warmed"} +{"level":"debug","connections":5,"time":"2026-07-10T12:08:02+03:00","message":"Connection pool warmed"} +{"level":"debug","connections":5,"time":"2026-07-10T12:08:03+03:00","message":"Connection pool warmed"} +{"level":"debug","connections":5,"time":"2026-07-10T12:08:03+03:00","message":"Connection pool warmed"} +{"level":"debug","connections":5,"time":"2026-07-10T12:08:03+03:00","message":"Connection pool warmed"} +{"level":"debug","connections":5,"time":"2026-07-10T12:08:03+03:00","message":"Connection pool warmed"} +{"level":"debug","connections":5,"time":"2026-07-10T12:08:03+03:00","message":"Connection pool warmed"} +{"level":"info","time":"2026-07-10T12:08:03+03:00","message":"Starting database optimization"} +{"level":"info","duration":199.4947,"time":"2026-07-10T12:08:03+03:00","message":"Database optimization complete"} + +2026/07/10 12:08:04 D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/candidate_store_test.go:29 +[error] failed to initialize database, got error failed to connect to `user=engram database=engram_mkr_bedge_review_full_gorm_20260710a`: 127.0.0.1:55432 (127.0.0.1): server error: FATAL: sorry, too many clients already (SQLSTATE 53300) +--- FAIL: TestTemporalTruthStore_LoadSelectedRecordsUsesDBNowForValidFrom (0.00s) + temporal_truth_store_test.go:377: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/candidate_store_test.go:30 + D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/temporal_truth_store_test.go:377 + Error: Received unexpected error: + failed to connect to `user=engram database=engram_mkr_bedge_review_full_gorm_20260710a`: 127.0.0.1:55432 (127.0.0.1): server error: FATAL: sorry, too many clients already (SQLSTATE 53300) + Test: TestTemporalTruthStore_LoadSelectedRecordsUsesDBNowForValidFrom + Messages: open test DB +--- FAIL: TestTokenStore_CreateWithPrincipalRoundTrip (0.00s) + token_store_test.go:14: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/credential_store_test.go:29 + D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/token_store_test.go:14 + Error: Received unexpected error: + failed to connect to `user=engram database=engram_mkr_bedge_review_full_gorm_20260710a`: 127.0.0.1:55432 (127.0.0.1): server error: FATAL: sorry, too many clients already (SQLSTATE 53300) + Test: TestTokenStore_CreateWithPrincipalRoundTrip + Messages: open test db +--- FAIL: TestTokenStore_CreateWithPrincipalRejectsKindWithoutPrincipal (0.00s) + token_store_test.go:51: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/credential_store_test.go:29 + D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/db/gorm/token_store_test.go:51 + Error: Received unexpected error: + failed to connect to `user=engram database=engram_mkr_bedge_review_full_gorm_20260710a`: 127.0.0.1:55432 (127.0.0.1): server error: FATAL: sorry, too many clients already (SQLSTATE 53300) + Test: TestTokenStore_CreateWithPrincipalRejectsKindWithoutPrincipal + Messages: open test db +--- FAIL: TestTranscriptStore_Lifecycle (0.00s) + transcript_store_test.go:64: open test db: failed to connect to `user=engram database=engram_mkr_bedge_review_full_gorm_20260710a`: 127.0.0.1:55432 (127.0.0.1): server error: FATAL: sorry, too many clients already (SQLSTATE 53300) +FAIL +FAIL github.com/thebtf/engram/internal/db/gorm 33.258s +FAIL +test_exit=1 +active_sessions_before_terminate=0 +database_residue=0 +activity_residue=0 +finished_utc=2026-07-10T09:08:06.2577895Z diff --git a/.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/27-review-full-mcp.log b/.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/27-review-full-mcp.log new file mode 100644 index 00000000..b34d83d6 --- /dev/null +++ b/.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/27-review-full-mcp.log @@ -0,0 +1,81 @@ +base_sha=68b2ce5835c7c6efdf1c68da9eedcb8d9c3837ef +head_sha=68b2ce5835c7c6efdf1c68da9eedcb8d9c3837ef +database=engram_mkr_bedge_review_full_mcp_20260710a +command=go test -p=1 ./internal/mcp -count=1 +started_utc=2026-07-10T09:08:23.3053868Z +{"level":"warn","error":"ERROR: relation \"observation_vectors\" does not exist (SQLSTATE 42P01)","time":"2026-07-10T12:08:26+03:00","message":"migration 040: orphan vector cleanup failed (non-fatal)"} +{"level":"info","garbage_deleted":0,"orphan_vectors_deleted":0,"time":"2026-07-10T12:08:26+03:00","message":"migration 040: garbage cleanup complete"} +{"level":"info","orphan_vectors_deleted":0,"time":"2026-07-10T12:08:26+03:00","message":"migration 041: orphan vector purge complete"} +{"level":"info","patterns_deleted":0,"time":"2026-07-10T12:08:26+03:00","message":"migration 042: low-quality pattern purge complete"} +{"level":"info","total_deleted":0,"time":"2026-07-10T12:08:26+03:00","message":"migration 043: radical observation cleanup complete"} +{"level":"warn","error":"ERROR: extension \"vectorscale\" is not available (SQLSTATE 0A000)","time":"2026-07-10T12:08:27+03:00","message":"migration 109: vectorscale extension not available, skipping DiskANN index"} +{"level":"debug","connections":1,"time":"2026-07-10T12:08:29+03:00","message":"Connection pool warmed"} +{"level":"debug","connections":1,"time":"2026-07-10T12:08:29+03:00","message":"Connection pool warmed"} +{"level":"debug","connections":1,"time":"2026-07-10T12:08:29+03:00","message":"Connection pool warmed"} +--- FAIL: TestHybridTG3_ConfidenceMin_FloorEnforced_T022 (0.13s) + integration_tg3_hybrid_test.go:83: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/integration_tg3_hybrid_test.go:83 + Error: Received unexpected error: + json: cannot unmarshal array into Go value of type map[string]interface {} + Test: TestHybridTG3_ConfidenceMin_FloorEnforced_T022 + Messages: response must be valid JSON +{"level":"debug","connections":1,"time":"2026-07-10T12:08:29+03:00","message":"Connection pool warmed"} +{"level":"debug","connections":1,"time":"2026-07-10T12:08:30+03:00","message":"Connection pool warmed"} +{"level":"debug","connections":1,"time":"2026-07-10T12:08:30+03:00","message":"Connection pool warmed"} +{"level":"debug","connections":1,"time":"2026-07-10T12:08:30+03:00","message":"Connection pool warmed"} +{"level":"debug","connections":1,"time":"2026-07-10T12:08:30+03:00","message":"Connection pool warmed"} +{"level":"debug","connections":1,"time":"2026-07-10T12:08:30+03:00","message":"Connection pool warmed"} +{"level":"debug","connections":1,"time":"2026-07-10T12:08:30+03:00","message":"Connection pool warmed"} +{"level":"debug","connections":5,"time":"2026-07-10T12:08:30+03:00","message":"Connection pool warmed"} +{"level":"debug","connections":5,"time":"2026-07-10T12:08:30+03:00","message":"Connection pool warmed"} +{"level":"debug","connections":1,"time":"2026-07-10T12:08:30+03:00","message":"Connection pool warmed"} +--- FAIL: TestEC_F1_TagDerivedBackfill_T007 (0.12s) + store_memory_compat_t007_test.go:157: + Error Trace: D:/Dev/engram/.agent/worktrees/prc-db-bulkops/internal/mcp/store_memory_compat_t007_test.go:157 + Error: Should be true + Test: TestEC_F1_TagDerivedBackfill_T007 + Messages: global-scoped row must be returned by MemoryStore.List within its own project +{"level":"debug","connections":1,"time":"2026-07-10T12:08:31+03:00","message":"Connection pool warmed"} +{"level":"debug","connections":1,"time":"2026-07-10T12:08:31+03:00","message":"Connection pool warmed"} +{"level":"debug","connections":1,"time":"2026-07-10T12:08:31+03:00","message":"Connection pool warmed"} +{"level":"debug","connections":1,"time":"2026-07-10T12:08:31+03:00","message":"Connection pool warmed"} +{"level":"debug","connections":1,"time":"2026-07-10T12:08:31+03:00","message":"Connection pool warmed"} +{"level":"debug","connections":5,"time":"2026-07-10T12:08:31+03:00","message":"Connection pool warmed"} +{"level":"debug","connections":5,"time":"2026-07-10T12:08:31+03:00","message":"Connection pool warmed"} +{"level":"debug","connections":5,"time":"2026-07-10T12:08:31+03:00","message":"Connection pool warmed"} +{"level":"debug","connections":1,"time":"2026-07-10T12:08:32+03:00","message":"Connection pool warmed"} +{"level":"debug","connections":1,"time":"2026-07-10T12:08:32+03:00","message":"Connection pool warmed"} +{"level":"debug","connections":1,"time":"2026-07-10T12:08:32+03:00","message":"Connection pool warmed"} +{"level":"debug","connections":1,"time":"2026-07-10T12:08:32+03:00","message":"Connection pool warmed"} +{"level":"debug","soft_limit":1000,"time":"2026-07-10T12:08:32+03:00","message":"edit_memory: content truncated to soft limit"} +{"level":"warn","time":"2026-07-10T12:08:32+03:00","message":"edit_memory: content contains secrets — redacting before storage"} +{"level":"error","audit_label":"test-panic","memory_id":99,"panic":"simulated audit panic","time":"2026-07-10T12:08:32+03:00","message":"audit: goroutine panic recovered"} +{"level":"error","error":"simulated db error","audit_label":"test-error","memory_id":88,"time":"2026-07-10T12:08:32+03:00","message":"audit: async write failed"} +{"level":"debug","connections":1,"time":"2026-07-10T12:08:32+03:00","message":"Connection pool warmed"} +{"level":"debug","connections":1,"time":"2026-07-10T12:08:33+03:00","message":"Connection pool warmed"} +{"level":"debug","connections":1,"time":"2026-07-10T12:08:33+03:00","message":"Connection pool warmed"} +{"level":"debug","connections":1,"time":"2026-07-10T12:08:33+03:00","message":"Connection pool warmed"} +{"level":"debug","connections":1,"time":"2026-07-10T12:08:33+03:00","message":"Connection pool warmed"} +{"level":"debug","connections":1,"time":"2026-07-10T12:08:33+03:00","message":"Connection pool warmed"} +{"level":"debug","connections":1,"time":"2026-07-10T12:08:33+03:00","message":"Connection pool warmed"} +{"level":"debug","connections":1,"time":"2026-07-10T12:08:33+03:00","message":"Connection pool warmed"} +{"level":"debug","connections":1,"time":"2026-07-10T12:08:33+03:00","message":"Connection pool warmed"} +{"level":"error","error":"temporal truth feature flag required","tool":"temporal_truth","args":"{\"fact_id\":\"42\",\"project\":\"engram\"}","time":"2026-07-10T12:08:34+03:00","message":"Tool call failed"} +{"level":"error","error":"temporal truth provider not configured","tool":"temporal_truth","args":"{\"fact_id\":\"42\",\"project\":\"engram\"}","time":"2026-07-10T12:08:34+03:00","message":"Tool call failed"} +{"level":"error","error":"temporal truth feature flag required","tool":"temporal_truth_refresh","args":"{\"project\":\"engram\"}","time":"2026-07-10T12:08:34+03:00","message":"Tool call failed"} +{"level":"error","error":"temporal truth provider not configured","tool":"temporal_truth_refresh","args":"{\"project\":\"engram\"}","time":"2026-07-10T12:08:34+03:00","message":"Tool call failed"} +{"level":"error","error":"codebase_search requires ENGRAM_CODE_INTEL_ENABLED=true","tool":"codebase_search","args":"{\"query\":\"hello\",\"project\":\"test\"}","time":"2026-07-10T12:08:34+03:00","message":"Tool call failed"} +{"level":"error","error":"unknown tool: no_such_tool","tool":"no_such_tool","args":"{}","time":"2026-07-10T12:08:34+03:00","message":"Tool call failed"} +{"level":"debug","method":"initialized","time":"2026-07-10T12:08:34+03:00","message":"MCP client initialized"} +{"level":"error","error":"unknown tool: ","tool":"","args":"","time":"2026-07-10T12:08:34+03:00","message":"Tool call failed"} +{"level":"debug","method":"initialized","time":"2026-07-10T12:08:34+03:00","message":"MCP client initialized"} +{"level":"debug","connections":5,"time":"2026-07-10T12:08:34+03:00","message":"Connection pool warmed"} +{"level":"debug","connections":5,"time":"2026-07-10T12:08:34+03:00","message":"Connection pool warmed"} +FAIL +FAIL github.com/thebtf/engram/internal/mcp 8.501s +FAIL +test_exit=1 +active_sessions_before_terminate=0 +database_residue=0 +activity_residue=0 +finished_utc=2026-07-10T09:08:35.4259701Z diff --git a/.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/A-candidate-review-snapshot-binding.red.json b/.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/A-candidate-review-snapshot-binding.red.json new file mode 100644 index 00000000..e100255b --- /dev/null +++ b/.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/A-candidate-review-snapshot-binding.red.json @@ -0,0 +1,14 @@ +{ + "phase": "RED", + "observed_at_utc": "2026-07-10T08:28:04.4170941Z", + "base_sha": "68b2ce5835c7c6efdf1c68da9eedcb8d9c3837ef", + "database": "engram_mkr_bedge_red_behavior_20260710a", + "command": "go test -p=1 ./internal/db/gorm ./internal/mcp -run ^(TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites|TestCandidateStore_AllCandidateReviewSnapshotSeamsCommitExactlyOneAudit|TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs|TestBulkOps_PublicDispatchPreservesExactIntegralIDsBeforeNormalization)$ -count=1 -v", + "exit_code": 1, + "test": "TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites", + "observed_failure": "Public candidate-review snapshot seams accepted invalid bindings, including nil or wrong-op snapshots on promote and mismatched operation, action, candidate, actor, before-state, affected-memory, and source-session fields.", + "representative_excerpt": "invalid candidate-review snapshot binding must fail closed: An error is expected but got nil", + "database_residue": 0, + "activity_residue": 0, + "raw_log": "01-red-behavior.log" +} diff --git a/.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/B-bulk-structured-input.red.json b/.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/B-bulk-structured-input.red.json new file mode 100644 index 00000000..445f4810 --- /dev/null +++ b/.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/B-bulk-structured-input.red.json @@ -0,0 +1,32 @@ +{ + "phase": "RED", + "observed_at_utc": "2026-07-10T08:29:50.2378967Z", + "base_sha": "68b2ce5835c7c6efdf1c68da9eedcb8d9c3837ef", + "databases": [ + "engram_mkr_bedge_red_behavior_20260710a", + "engram_mkr_bedge_red_spy_20260710a" + ], + "behavior_command_exit_code": 1, + "spy_command_exit_code": 1, + "tests": [ + "TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs", + "TestBulkOps_PublicDispatchPreservesExactIntegralIDsBeforeNormalization", + "TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade", + "TestBulkOps_WiredFacadeReceivesExactNormalizedIDsAndStrictDryRun" + ], + "observed_failures": [ + "Lossy coercion accepted strings, booleans, objects, nested arrays, fractions, overflows, and wrong dry_run types instead of rejecting the public request.", + "Numbers above 2^53 lost identity and delete/supersede previews did not normalize IDs.", + "The facade-spy test failed to compile because the pre-change handler had no executeBulkFacade seam, proving the required pre-facade invocation assertion was not yet expressible." + ], + "representative_excerpts": [ + "TestBulkOps_PublicDispatchPreservesExactIntegralIDsBeforeNormalization/bulk_promote: expected 5, actual 3", + "internal\\mcp\\tools_dryrun_test.go:295:21: undefined: executeBulkFacade" + ], + "database_residue": 0, + "activity_residue": 0, + "raw_logs": [ + "01-red-behavior.log", + "02-red-spy-seam.log" + ] +} diff --git a/.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/DB-BULKOPS-BEHAVIORAL-EDGE-REWORK.final.json b/.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/DB-BULKOPS-BEHAVIORAL-EDGE-REWORK.final.json new file mode 100644 index 00000000..e35dd6e5 --- /dev/null +++ b/.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/DB-BULKOPS-BEHAVIORAL-EDGE-REWORK.final.json @@ -0,0 +1,228 @@ +{ + "task": "DB-BULKOPS behavioral-edge rework", + "base_sha": "68b2ce5835c7c6efdf1c68da9eedcb8d9c3837ef", + "status": "READY_FOR_INDEPENDENT_CHECK", + "formal_acceptance": false, + "scope": { + "product_and_test_paths": [ + "internal/db/gorm/candidate_store.go", + "internal/db/gorm/candidate_store_test.go", + "internal/mcp/tools_bulkops.go", + "internal/mcp/tools_dryrun_test.go" + ], + "evidence_namespace": ".agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/", + "maker_report": ".agent/reports/2026-07-10-db-bulkops-behavioral-edge-rework-maker.md" + }, + "source_sha256": { + "internal/db/gorm/candidate_store.go": "e5102fc82df34cc85e2039cf62ce96155b725d3728518a196476eb2351b458c2", + "internal/db/gorm/candidate_store_test.go": "8fb5258f01557ca7991b5a211f51107e69e4acd5740c5b254e63308f8969e4ff", + "internal/mcp/tools_bulkops.go": "89ca7932ccafe7fa52c79099d6ecbca20a04aa7faff94ff5ec92c9d68dc7cefa", + "internal/mcp/tools_dryrun_test.go": "2a4fbe5e29548b3df2eb45f16ab8e08e7938e9e95a8604e4a6f7cfeac05d0a90" + }, + "cause_closure": { + "candidate_review": { + "class": "All public candidate-review WithSnapshot mutation seams previously trusted partially self-consistent snapshots instead of enforcing one complete binding invariant.", + "closed_invariant": [ + "promote, preserve, reject, suppress, and supersede route through the same fail-closed validator", + "snapshot, snapshot store, and audit store are required", + "op_type, parameters.operation, parameters.action, parameters.candidate_id, and normalized actor are bound", + "initial affected_memory_ids is empty", + "BeforeState contains exactly one candidate: restore entry with nonempty Before and empty After", + "the embedded payload ID and source session are bound", + "inside the same mutation transaction, SELECT FOR UPDATE loads the authoritative candidate before any snapshot or mutation write", + "the complete rollback-relevant payload is compared to the authoritative row, allowing only sub-microsecond PostgreSQL timestamp precision differences", + "invalid bindings produce zero candidate, memory, snapshot, and candidate_review audit writes", + "valid seams commit exactly one synchronous candidate_review audit" + ] + }, + "bulk_structured_input": { + "class": "Public bulk tools previously used lossy any/float64 coercion, allowing wrong types and losing exact IDs.", + "closed_invariant": [ + "bulk_promote, bulk_delete, and bulk_supersede parse raw json.RawMessage before facade invocation", + "ID fields must be arrays of exact integral int64 JSON numbers", + "1.0, 1e0, 9007199254740993, MinInt64, and MaxInt64 preserve exact identity", + "fractional, overflow, string, boolean, object, nested-array, null, malformed, and non-object inputs fail before the facade", + "present dry_run accepts only JSON true or false; missing dry_run defaults false", + "zero removal, deduplication, and sorting occur only after exact parsing", + "nil-facade dry-run and wired non-dry paths use the same normalized IDs" + ] + } + }, + "tdd": { + "red": [ + { + "log": "01-red-behavior.log", + "command": "go test -p=1 ./internal/db/gorm ./internal/mcp -run ^(TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites|TestCandidateStore_AllCandidateReviewSnapshotSeamsCommitExactlyOneAudit|TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs|TestBulkOps_PublicDispatchPreservesExactIntegralIDsBeforeNormalization)$ -count=1 -v", + "exit_code": 1, + "database": "engram_mkr_bedge_red_behavior_20260710a", + "residue": "0/0" + }, + { + "log": "02-red-spy-seam.log", + "command": "go test -p=1 ./internal/mcp -run ^(TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade|TestBulkOps_WiredFacadeReceivesExactNormalizedIDsAndStrictDryRun)$ -count=1 -v", + "exit_code": 1, + "database": "engram_mkr_bedge_red_spy_20260710a", + "residue": "0/0" + }, + { + "log": "05-prove-it-candidate.log", + "command": "go test -p=1 ./internal/db/gorm -run ^(TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites|TestCandidateStore_AllCandidateReviewSnapshotSeamsCommitExactlyOneAudit)$ -count=1", + "exit_code": 1, + "mutation": "temporarily bypassed the candidate-review validator", + "residue": "0/0" + }, + { + "log": "06-prove-it-parser.log", + "command": "go test -p=1 ./internal/mcp -run ^(TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs|TestBulkOps_PublicDispatchPreservesExactIntegralIDsBeforeNormalization|TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade|TestBulkOps_WiredFacadeReceivesExactNormalizedIDsAndStrictDryRun)$ -count=1", + "exit_code": 1, + "mutation": "temporarily bypassed the strict parser", + "residue": "0/0" + }, + { + "log": "17-review-red-authoritative-binding.log", + "command": "go test -p=1 ./internal/db/gorm -run ^TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites$ -count=1", + "exit_code": 1, + "database": "engram_mkr_bedge_review_red_auth_20260710a", + "observed": "A forged Before payload plus matching forged snapshot source session was accepted by all five public seams.", + "residue": "0/0" + } + ], + "final_green": [ + { + "log": "19-review-green-authoritative-binding.log", + "command": "go test -p=1 ./internal/db/gorm ./internal/mcp -run ^(TestCandidateStore_PromoteWithMemoryAndSnapshot_AmendFailureRollsBackPromotion|TestCandidateStore_PreserveWithMemoryAndSnapshot_RequiresCandidateReviewSnapshotBeforeMutation|TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites|TestCandidateStore_AllCandidateReviewSnapshotSeamsCommitExactlyOneAudit|TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs|TestBulkOps_PublicDispatchPreservesExactIntegralIDsBeforeNormalization|TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade|TestBulkOps_WiredFacadeReceivesExactNormalizedIDsAndStrictDryRun)$ -count=1", + "exit_code": 0, + "database": "engram_mkr_bedge_review_green_auth_20260710b", + "residue": "0/0" + }, + { + "log": "20-review-repeat20.log", + "command": "go test -p=1 ./internal/db/gorm ./internal/mcp -run ^(TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites|TestCandidateStore_AllCandidateReviewSnapshotSeamsCommitExactlyOneAudit|TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs|TestBulkOps_PublicDispatchPreservesExactIntegralIDsBeforeNormalization|TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade|TestBulkOps_WiredFacadeReceivesExactNormalizedIDsAndStrictDryRun)$ -count=20", + "exit_code": 0, + "database": "engram_mkr_bedge_review_repeat20_20260710a", + "residue": "0/0" + }, + { + "log": "21-review-race-focused.log", + "command": "go test -race -p=1 ./internal/db/gorm ./internal/mcp -run ^(TestCandidateStore_PromoteWithMemoryAndSnapshot_AmendFailureRollsBackPromotion|TestCandidateStore_PreserveWithMemoryAndSnapshot_RequiresCandidateReviewSnapshotBeforeMutation|TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites|TestCandidateStore_AllCandidateReviewSnapshotSeamsCommitExactlyOneAudit|TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs|TestBulkOps_PublicDispatchPreservesExactIntegralIDsBeforeNormalization|TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade|TestBulkOps_WiredFacadeReceivesExactNormalizedIDsAndStrictDryRun)$ -count=1", + "exit_code": 0, + "database": "engram_mkr_bedge_review_race_20260710a", + "residue": "0/0" + }, + { + "log": "22-review-vet.log", + "command": "go vet ./internal/db/gorm ./internal/mcp", + "exit_code": 0, + "database": "engram_mkr_bedge_review_vet_20260710a", + "residue": "0/0" + }, + { + "log": "23-review-coverage.log", + "command": "go test -p=1 ./internal/db/gorm ./internal/mcp -run ^(TestCandidateStore_PromoteWithMemoryAndSnapshot_AmendFailureRollsBackPromotion|TestCandidateStore_PreserveWithMemoryAndSnapshot_RequiresCandidateReviewSnapshotBeforeMutation|TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites|TestCandidateStore_AllCandidateReviewSnapshotSeamsCommitExactlyOneAudit|TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs|TestBulkOps_PublicDispatchPreservesExactIntegralIDsBeforeNormalization|TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade|TestBulkOps_WiredFacadeReceivesExactNormalizedIDsAndStrictDryRun)$ -count=1 -covermode=atomic -coverprofile=.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/coverage.out", + "exit_code": 0, + "database": "engram_mkr_bedge_review_coverage_20260710a", + "residue": "0/0" + }, + { + "log": "25-review-cover-functions.log", + "command": "go tool cover -func=.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/coverage.out", + "exit_code": 0, + "database": "engram_mkr_bedge_review_coverfunc_20260710b", + "residue": "0/0" + } + ] + }, + "coverage": { + "gorm_package": "15.4%", + "mcp_package": "1.8%", + "validateCandidateReviewSnapshotBinding": "87.0%", + "candidateReviewPayloadMatchesAuthoritative": "75.0%", + "promoteWithMemoryAndSnapshotAction": "80.6%", + "transitionWithSnapshot": "63.6%", + "parseBulkStructuredArgs": "100.0%", + "handleBulkPromote": "80.0%", + "handleBulkDelete": "80.0%", + "handleBulkSupersede": "80.0%" + }, + "full_package_gates": [ + { + "log": "26-review-full-gorm.log", + "command": "go test -p=1 ./internal/db/gorm -count=1", + "exit_code": 1, + "classification": "documented unrelated baseline plus PostgreSQL max-client cascade; no candidate-review test failed", + "known_baseline_failures": [ + "TestRuleGovernanceStore_AnnotatedCandidateWaitsUntilReviewAfter", + "TestRuleGovernanceStore_GetLifecycleHealthAggregatesGovernanceTables", + "TestRuleGovernanceStore_GetLifecycleHealthOmitsGlobalArbiterRunsForProjectScopedReads", + "TestMigration144_RuleGovernanceRollbackAndReapply", + "TestMigration144_RuleGovernanceEscapeConstraints", + "TestMigration144_RuleGovernanceSnapshotStatusesAcceptExtendedStates" + ], + "max_client_cascade": [ + "TestTemporalTruthStore_LoadSelectedRecordsUsesDBNowForValidFrom", + "TestTokenStore_CreateWithPrincipalRoundTrip", + "TestTokenStore_CreateWithPrincipalRejectsKindWithoutPrincipal", + "TestTranscriptStore_Lifecycle" + ], + "residue": "0/0" + }, + { + "log": "27-review-full-mcp.log", + "command": "go test -p=1 ./internal/mcp -count=1", + "exit_code": 1, + "classification": "documented unrelated baseline; no bulk structured-input test failed", + "known_baseline_failures": [ + "TestHybridTG3_ConfidenceMin_FloorEnforced_T022", + "TestEC_F1_TagDerivedBackfill_T007" + ], + "residue": "0/0" + } + ], + "precommit_review": { + "role": "maker-side hardening only; not formal independent acceptance", + "initial_verdict": "REVISE/BLOCK", + "finding": "Snapshot validation was self-consistent but not bound to the locked authoritative candidate.", + "resolution": "Added transaction-bound SELECT FOR UPDATE, complete payload comparison, and the forged payload plus forged source-session sibling case across all five seams.", + "formal_checker": "required after this commit" + }, + "diagnostics": { + "errors": 0, + "warnings": 0, + "notes": "Serena reported only pre-existing or non-blocking modernize hints (interface{} to any, maps.Copy, and Go 1.22 loop-copy hints)." + }, + "discrepancies": [ + { + "log": "08-full-packages.log", + "issue": "The first full-package run exposed an old amend-rollback fixture with an invalid snapshot and a preserve error-string compatibility mismatch.", + "resolution": "Updated the fixture to use the canonical reviewpacket snapshot and preserved the legacy candidate_review wording; 09-legacy-compat.log passed." + }, + { + "log": "18-review-green-authoritative-binding.log", + "issue": "The first authoritative-binding implementation compared raw timestamp JSON exactly and moved all validation inside the transaction, rejecting a legitimate sub-microsecond timestamp representation and panicking in a legacy nil-DB preflight test.", + "resolution": "Restored structural preflight before DB access, repeated validation inside the transaction, and limited timestamp tolerance to PostgreSQL precision while comparing every other candidate field exactly; 19, 20, and 21 passed." + }, + { + "log": "24-review-cover-functions.log", + "issue": "PowerShell argument binding split -func= and go tool cover exited 2.", + "resolution": "Reran with an explicit GoArgs array; 25-review-cover-functions.log exited 0." + }, + { + "issue": "Captured Go/GORM logs contained trailing spaces and tab-indented test output that failed the staged git diff whitespace check.", + "resolution": "Mechanically replaced tabs with spaces and removed only end-of-line whitespace in evidence *.log files before final hashing; command/output text, exit codes, and timestamps were otherwise preserved." + } + ], + "out_of_scope_audit_node": { + "id": "MCP-STRUCTURED-INPUT-VALIDATION", + "path": "store_memory.supersedes", + "finding": "The public handler still reaches lossy coercion without explicit raw structured-input type validation.", + "action": "Reported only. No edits were made to coerce.go or tools_memory.go under this task's strict scope." + }, + "cleanup": { + "log": "16-final-residue.log", + "checked_utc": "2026-07-10T09:10:54.3826001Z", + "database_prefix": "engram_mkr_bedge_%", + "database_residue": 0, + "activity_residue": 0, + "exit_code": 0 + } +} diff --git a/.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/Invoke-MakerGo.ps1 b/.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/Invoke-MakerGo.ps1 new file mode 100644 index 00000000..7d09e625 --- /dev/null +++ b/.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/Invoke-MakerGo.ps1 @@ -0,0 +1,118 @@ +param( + [Parameter(Mandatory = $true)] + [ValidatePattern('^engram_mkr_bedge_[a-z0-9_]+$')] + [string]$DatabaseName, + + [Parameter(Mandatory = $true)] + [string]$LogPath, + + [Parameter(Mandatory = $true, ValueFromRemainingArguments = $true)] + [string[]]$GoArgs +) + +$ErrorActionPreference = 'Stop' +$container = 'engram-prc-postgres' +$worktree = 'D:\Dev\engram\.agent\worktrees\prc-db-bulkops' +$baseCommit = '68b2ce5835c7c6efdf1c68da9eedcb8d9c3837ef' +$logDirectory = Split-Path -Parent $LogPath +New-Item -ItemType Directory -Force -Path $logDirectory | Out-Null + +$containerEnv = @{} +$inspectEnv = docker inspect --format '{{range .Config.Env}}{{println .}}{{end}}' $container +if ($LASTEXITCODE -ne 0) { + throw "docker inspect failed for $container" +} +foreach ($line in $inspectEnv) { + $parts = $line -split '=', 2 + if ($parts.Count -eq 2) { + $containerEnv[$parts[0]] = $parts[1] + } +} +$pgUser = $containerEnv['POSTGRES_USER'] +$pgPassword = $containerEnv['POSTGRES_PASSWORD'] +if ([string]::IsNullOrWhiteSpace($pgUser) -or [string]::IsNullOrWhiteSpace($pgPassword)) { + throw 'POSTGRES_USER/POSTGRES_PASSWORD are unavailable from the maker container' +} + +$portLine = docker port $container 5432/tcp | Select-Object -First 1 +if ($LASTEXITCODE -ne 0 -or $portLine -notmatch ':(\d+)$') { + throw "could not resolve host PostgreSQL port for $container" +} +$hostPort = $Matches[1] + +function Invoke-MakerPsql { + param([Parameter(Mandatory = $true)][string]$Sql) + $output = docker exec -e "PGPASSWORD=$pgPassword" $container psql -v ON_ERROR_STOP=1 -U $pgUser -d postgres -Atc $Sql + if ($LASTEXITCODE -ne 0) { + throw "psql failed: $Sql" + } + return $output +} + +function Write-MakerLog { + param([Parameter(Mandatory = $true)][AllowEmptyString()][string]$Line) + $Line | Tee-Object -FilePath $LogPath -Append +} + +if (Test-Path -LiteralPath $LogPath) { + Remove-Item -LiteralPath $LogPath -Force +} + +$existing = Invoke-MakerPsql "SELECT count(*) FROM pg_database WHERE datname = '$DatabaseName';" +if ([int]$existing -ne 0) { + throw "maker database already exists: $DatabaseName" +} + +$currentHead = git -C $worktree rev-parse HEAD +if ($LASTEXITCODE -ne 0) { + throw "could not resolve maker worktree HEAD" +} +Write-MakerLog "base_sha=$baseCommit" +Write-MakerLog "head_sha=$currentHead" +Write-MakerLog "database=$DatabaseName" +Write-MakerLog "command=go $($GoArgs -join ' ')" +Write-MakerLog "started_utc=$([DateTime]::UtcNow.ToString('o'))" + +$testExit = 99 +$cleanupFailed = $false +try { + Invoke-MakerPsql "CREATE DATABASE `"$DatabaseName`";" | Out-Null + $escapedUser = [uri]::EscapeDataString($pgUser) + $escapedPassword = [uri]::EscapeDataString($pgPassword) + $env:DATABASE_DSN = "postgres://${escapedUser}:${escapedPassword}@127.0.0.1:${hostPort}/${DatabaseName}?sslmode=disable" + + Push-Location $worktree + try { + & go @GoArgs 2>&1 | Tee-Object -FilePath $LogPath -Append + $testExit = $LASTEXITCODE + } + finally { + Pop-Location + } + Write-MakerLog "test_exit=$testExit" +} +finally { + try { + $activeBefore = Invoke-MakerPsql "SELECT count(*) FROM pg_stat_activity WHERE datname = '$DatabaseName' AND pid <> pg_backend_pid();" + Write-MakerLog "active_sessions_before_terminate=$activeBefore" + Invoke-MakerPsql "SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE datname = '$DatabaseName' AND pid <> pg_backend_pid();" | Out-Null + Invoke-MakerPsql "DROP DATABASE IF EXISTS `"$DatabaseName`" WITH (FORCE);" | Out-Null + $databaseResidue = Invoke-MakerPsql "SELECT count(*) FROM pg_database WHERE datname = '$DatabaseName';" + $activityResidue = Invoke-MakerPsql "SELECT count(*) FROM pg_stat_activity WHERE datname = '$DatabaseName';" + Write-MakerLog "database_residue=$databaseResidue" + Write-MakerLog "activity_residue=$activityResidue" + Write-MakerLog "finished_utc=$([DateTime]::UtcNow.ToString('o'))" + if ([int]$databaseResidue -ne 0 -or [int]$activityResidue -ne 0) { + $cleanupFailed = $true + } + } + catch { + $cleanupFailed = $true + Write-MakerLog "cleanup_error=$($_.Exception.Message)" + } +} + +if ($cleanupFailed) { + exit 97 +} +exit $testExit diff --git a/.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/SHA256SUMS.txt b/.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/SHA256SUMS.txt new file mode 100644 index 00000000..a2ad5978 --- /dev/null +++ b/.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/SHA256SUMS.txt @@ -0,0 +1,40 @@ +SHA-256 manifest for DB-BULKOPS behavioral-edge rework. +The manifest intentionally excludes itself. + +e5102fc82df34cc85e2039cf62ce96155b725d3728518a196476eb2351b458c2 internal/db/gorm/candidate_store.go +8fb5258f01557ca7991b5a211f51107e69e4acd5740c5b254e63308f8969e4ff internal/db/gorm/candidate_store_test.go +89ca7932ccafe7fa52c79099d6ecbca20a04aa7faff94ff5ec92c9d68dc7cefa internal/mcp/tools_bulkops.go +2a4fbe5e29548b3df2eb45f16ab8e08e7938e9e95a8604e4a6f7cfeac05d0a90 internal/mcp/tools_dryrun_test.go +c240b459475b6adf82c21156e691a0c33b547e0d84ce5dcd5acbfad72a9e1d90 .agent/reports/2026-07-10-db-bulkops-behavioral-edge-rework-maker.md +2a28984547833010d88ea54984a0019671b015a3cb0e4b0021a1b9061653dd3f .agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/01-red-behavior.log +85498937b436c88dcfe5b90f90a973fa981aea83d54e247b7482bf774d8ba8fb .agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/02-red-spy-seam.log +b1d8800aaeaafe788888afcb06d9a7aff8f0d9daf49ed81dd508da3398ca60c4 .agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/03-green-focused.log +abefd3e0fb0f54ddafb5a66c94e62add263919303c29080d8cbb17a9fecdb8c2 .agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/04-green-repeat20.log +579c484a1582b02bf3f889f6a78ad72561ff4183fa1a1f000bd4334834c65fd6 .agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/05-prove-it-candidate.log +830a038c705670a169263d6e7a6e1a9cf205678685c1d9627fccb36eb6039f2a .agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/06-prove-it-parser.log +cbe28b1a1f1c5d70fa52719963f80479d3ffe48694f2680cfc933b5e57d65bd0 .agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/07-post-prove-green.log +0194a116302b6c52dcb6afe6c2ba6cca157c71bdfd3808e0264345ac5c5996ae .agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/08-full-packages.log +98439330ddbb90c42e84b48eeed5e38b37844f6ca4cb450780aa9a3ab2b8d24b .agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/09-legacy-compat.log +11e1dc2b378a381480f122023bdb3f488c89911862fac8d567870aa768d428c9 .agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/10-full-gorm.log +a2de0f9f45b61b0bea7e8af9e09beb1b6f8b0a01e666c4fe0ebe5eeb98718a8c .agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/11-full-mcp.log +89c1378677eac6666d80271d911922abd3fa06173b0b4f8729aca47e8c247cf3 .agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/12-race-focused.log +bb715715ce14a1828b24c20e4a7e5d6ad5e51dc2f90a68dbd55ed63157189593 .agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/13-vet.log +db9bb770a062b9e6642dd8c6d6fea31e6a29a26638a5bb6ba6add062d0ffab90 .agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/14-coverage.log +0bcbb3cbdbc5923b1f23e9a0db6c0e63a14ed373f4261cc74476874fdcaf13f3 .agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/15-cover-functions.log +9dd91963763500496146c6d0ab0e066dd10c5c7ad16c1a751baeddcaa9956937 .agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/16-final-residue.log +0b783aacd7d74680a1df4cae7a17d25004330b18afaec4b64b1352f7e84609c3 .agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/17-review-red-authoritative-binding.log +07e5498ffeced631f856062ffb625bf2d66bb704dd0ef2351c149a80da8fd24f .agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/18-review-green-authoritative-binding.log +1602588251c80c486ba19f964735c616df26c4146e1bcfb828a75f9c76d2e183 .agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/19-review-green-authoritative-binding.log +a3104b089b02ceda788990ddb7ec9a2da375f1f6ece88126162435e6a1dea22b .agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/20-review-repeat20.log +49aa5a6cb698c8508529d1267fec2a674591939b4ef1600a059e95fe0f7b773d .agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/21-review-race-focused.log +01d417c93f189f6847e1f859930823053b93876038a6e75aee839bca5ea74260 .agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/22-review-vet.log +bb02a4e743d4d4d135c5b98461ad68dea8871f0f73afd48aadf15bf0f5fe4045 .agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/23-review-coverage.log +b3ff6f175364824a81801a4c00d45c4710fd5b6c24cfa2f7b9402b759eea8c3d .agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/24-review-cover-functions.log +3c7ea6ce11279100e6d566f6ec7006e8344b6625660d19be4a6cc0b5cb49402b .agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/25-review-cover-functions.log +a84299a00aa34d222761f70d5df62689afc07870590e23f0a097dc510dee5d30 .agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/26-review-full-gorm.log +3873bfb6896c9aede28079372c51c16011b307b880174b560a615fc9ba5c0b70 .agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/27-review-full-mcp.log +84914266ac9e2aae449eae713d8f0e5558fe4cdeb01ce119f6ef26e9f3418b1b .agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/A-candidate-review-snapshot-binding.red.json +21fdf6d0e388db9209e3598c3c7b29021bf7e5a0f5a9dc738159d95de10933a9 .agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/B-bulk-structured-input.red.json +807341616e0e93827c970bc166598157778d58d664d6c0e6a4a504706f0dce5f .agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/coverage.out +1dc790ebb00bd2a33c2569fe72792f03963bd9613b2190a8f636873707eb5008 .agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/DB-BULKOPS-BEHAVIORAL-EDGE-REWORK.final.json +f49e485bb531dae52b6de24c481e58ea68baccdc9744fd79e906ca29828b3a5f .agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/Invoke-MakerGo.ps1 diff --git a/.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/coverage.out b/.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/coverage.out new file mode 100644 index 00000000..b212d787 --- /dev/null +++ b/.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/coverage.out @@ -0,0 +1,7881 @@ +mode: atomic +github.com/thebtf/engram/internal/db/gorm/attention_event_store.go:28.45,28.74 1 0 +github.com/thebtf/engram/internal/db/gorm/attention_event_store.go:34.63,36.2 1 0 +github.com/thebtf/engram/internal/db/gorm/attention_event_store.go:38.141,39.29 1 0 +github.com/thebtf/engram/internal/db/gorm/attention_event_store.go:39.29,41.3 1 0 +github.com/thebtf/engram/internal/db/gorm/attention_event_store.go:42.2,43.16 2 0 +github.com/thebtf/engram/internal/db/gorm/attention_event_store.go:43.16,45.3 1 0 +github.com/thebtf/engram/internal/db/gorm/attention_event_store.go:46.2,46.64 1 0 +github.com/thebtf/engram/internal/db/gorm/attention_event_store.go:46.64,48.3 1 0 +github.com/thebtf/engram/internal/db/gorm/attention_event_store.go:49.2,49.44 1 0 +github.com/thebtf/engram/internal/db/gorm/attention_event_store.go:52.110,53.29 1 0 +github.com/thebtf/engram/internal/db/gorm/attention_event_store.go:53.29,55.3 1 0 +github.com/thebtf/engram/internal/db/gorm/attention_event_store.go:56.2,56.13 1 0 +github.com/thebtf/engram/internal/db/gorm/attention_event_store.go:56.13,58.3 1 0 +github.com/thebtf/engram/internal/db/gorm/attention_event_store.go:59.2,60.68 2 0 +github.com/thebtf/engram/internal/db/gorm/attention_event_store.go:60.68,62.3 1 0 +github.com/thebtf/engram/internal/db/gorm/attention_event_store.go:63.2,63.45 1 0 +github.com/thebtf/engram/internal/db/gorm/attention_event_store.go:66.138,67.29 1 0 +github.com/thebtf/engram/internal/db/gorm/attention_event_store.go:67.29,69.3 1 0 +github.com/thebtf/engram/internal/db/gorm/attention_event_store.go:70.2,71.19 2 0 +github.com/thebtf/engram/internal/db/gorm/attention_event_store.go:71.19,73.3 1 0 +github.com/thebtf/engram/internal/db/gorm/attention_event_store.go:74.2,74.16 1 0 +github.com/thebtf/engram/internal/db/gorm/attention_event_store.go:74.16,76.3 1 0 +github.com/thebtf/engram/internal/db/gorm/attention_event_store.go:77.2,82.33 2 0 +github.com/thebtf/engram/internal/db/gorm/attention_event_store.go:82.33,84.3 1 0 +github.com/thebtf/engram/internal/db/gorm/attention_event_store.go:85.2,86.22 2 0 +github.com/thebtf/engram/internal/db/gorm/attention_event_store.go:86.22,88.3 1 0 +github.com/thebtf/engram/internal/db/gorm/attention_event_store.go:89.2,89.21 1 0 +github.com/thebtf/engram/internal/db/gorm/attention_event_store.go:92.100,94.19 2 0 +github.com/thebtf/engram/internal/db/gorm/attention_event_store.go:94.19,96.3 1 0 +github.com/thebtf/engram/internal/db/gorm/attention_event_store.go:97.2,98.21 2 0 +github.com/thebtf/engram/internal/db/gorm/attention_event_store.go:98.21,100.3 1 0 +github.com/thebtf/engram/internal/db/gorm/attention_event_store.go:101.2,102.26 2 0 +github.com/thebtf/engram/internal/db/gorm/attention_event_store.go:102.26,104.3 1 0 +github.com/thebtf/engram/internal/db/gorm/attention_event_store.go:105.2,105.61 1 0 +github.com/thebtf/engram/internal/db/gorm/attention_event_store.go:105.61,107.3 1 0 +github.com/thebtf/engram/internal/db/gorm/attention_event_store.go:108.2,109.25 2 0 +github.com/thebtf/engram/internal/db/gorm/attention_event_store.go:109.25,111.3 1 0 +github.com/thebtf/engram/internal/db/gorm/attention_event_store.go:112.2,112.27 1 0 +github.com/thebtf/engram/internal/db/gorm/attention_event_store.go:112.27,114.3 1 0 +github.com/thebtf/engram/internal/db/gorm/attention_event_store.go:115.2,116.42 2 0 +github.com/thebtf/engram/internal/db/gorm/attention_event_store.go:116.42,118.3 1 0 +github.com/thebtf/engram/internal/db/gorm/attention_event_store.go:119.2,120.52 2 0 +github.com/thebtf/engram/internal/db/gorm/attention_event_store.go:120.52,122.3 1 0 +github.com/thebtf/engram/internal/db/gorm/attention_event_store.go:123.2,134.8 2 0 +github.com/thebtf/engram/internal/db/gorm/attention_event_store.go:137.91,138.16 1 0 +github.com/thebtf/engram/internal/db/gorm/attention_event_store.go:138.16,140.3 1 0 +github.com/thebtf/engram/internal/db/gorm/attention_event_store.go:141.2,151.3 1 0 +github.com/thebtf/engram/internal/db/gorm/attention_event_store.go:154.52,155.15 1 0 +github.com/thebtf/engram/internal/db/gorm/attention_event_store.go:156.41,157.14 1 0 +github.com/thebtf/engram/internal/db/gorm/attention_event_store.go:158.10,159.15 1 0 +github.com/thebtf/engram/internal/db/gorm/attention_event_store.go:163.57,164.15 1 0 +github.com/thebtf/engram/internal/db/gorm/attention_event_store.go:165.38,166.14 1 0 +github.com/thebtf/engram/internal/db/gorm/attention_event_store.go:167.10,168.15 1 0 +github.com/thebtf/engram/internal/db/gorm/audit_store.go:25.41,25.63 1 2 +github.com/thebtf/engram/internal/db/gorm/audit_store.go:33.45,35.2 1 72 +github.com/thebtf/engram/internal/db/gorm/audit_store.go:38.74,39.67 1 2 +github.com/thebtf/engram/internal/db/gorm/audit_store.go:39.67,41.3 1 0 +github.com/thebtf/engram/internal/db/gorm/audit_store.go:42.2,42.12 1 2 +github.com/thebtf/engram/internal/db/gorm/audit_store.go:45.89,46.65 1 5 +github.com/thebtf/engram/internal/db/gorm/audit_store.go:46.65,48.3 1 0 +github.com/thebtf/engram/internal/db/gorm/audit_store.go:49.2,49.12 1 5 +github.com/thebtf/engram/internal/db/gorm/audit_store.go:53.107,54.16 1 0 +github.com/thebtf/engram/internal/db/gorm/audit_store.go:54.16,56.3 1 0 +github.com/thebtf/engram/internal/db/gorm/audit_store.go:57.2,63.16 3 0 +github.com/thebtf/engram/internal/db/gorm/audit_store.go:63.16,65.3 1 0 +github.com/thebtf/engram/internal/db/gorm/audit_store.go:66.2,66.21 1 0 +github.com/thebtf/engram/internal/db/gorm/audit_store.go:80.96,85.19 2 0 +github.com/thebtf/engram/internal/db/gorm/audit_store.go:85.19,87.3 1 0 +github.com/thebtf/engram/internal/db/gorm/audit_store.go:88.2,88.26 1 0 +github.com/thebtf/engram/internal/db/gorm/audit_store.go:92.92,97.2 2 0 +github.com/thebtf/engram/internal/db/gorm/auth_models.go:15.32,17.2 1 0 +github.com/thebtf/engram/internal/db/gorm/auth_models.go:20.58,22.20 2 0 +github.com/thebtf/engram/internal/db/gorm/auth_models.go:23.33,24.36 1 0 +github.com/thebtf/engram/internal/db/gorm/auth_models.go:25.26,26.33 1 0 +github.com/thebtf/engram/internal/db/gorm/auth_models.go:27.10,28.97 1 0 +github.com/thebtf/engram/internal/db/gorm/auth_models.go:43.32,43.50 1 0 +github.com/thebtf/engram/internal/db/gorm/auth_models.go:61.38,61.62 1 0 +github.com/thebtf/engram/internal/db/gorm/auth_models.go:76.39,76.60 1 0 +github.com/thebtf/engram/internal/db/gorm/auth_session_store.go:26.57,28.2 1 0 +github.com/thebtf/engram/internal/db/gorm/auth_session_store.go:31.132,33.16 2 0 +github.com/thebtf/engram/internal/db/gorm/auth_session_store.go:33.16,35.3 1 0 +github.com/thebtf/engram/internal/db/gorm/auth_session_store.go:36.2,45.48 3 0 +github.com/thebtf/engram/internal/db/gorm/auth_session_store.go:45.48,47.3 1 0 +github.com/thebtf/engram/internal/db/gorm/auth_session_store.go:48.2,48.18 1 0 +github.com/thebtf/engram/internal/db/gorm/auth_session_store.go:52.75,54.14 2 0 +github.com/thebtf/engram/internal/db/gorm/auth_session_store.go:54.14,56.3 1 0 +github.com/thebtf/engram/internal/db/gorm/auth_session_store.go:57.2,58.68 2 0 +github.com/thebtf/engram/internal/db/gorm/auth_session_store.go:58.68,60.3 1 0 +github.com/thebtf/engram/internal/db/gorm/auth_session_store.go:61.2,61.19 1 0 +github.com/thebtf/engram/internal/db/gorm/auth_session_store.go:65.72,67.16 2 0 +github.com/thebtf/engram/internal/db/gorm/auth_session_store.go:67.16,69.3 1 0 +github.com/thebtf/engram/internal/db/gorm/auth_session_store.go:70.2,70.33 1 0 +github.com/thebtf/engram/internal/db/gorm/auth_session_store.go:74.100,76.14 2 0 +github.com/thebtf/engram/internal/db/gorm/auth_session_store.go:76.14,78.3 1 0 +github.com/thebtf/engram/internal/db/gorm/auth_session_store.go:79.2,81.50 3 0 +github.com/thebtf/engram/internal/db/gorm/auth_session_store.go:81.50,83.111 2 0 +github.com/thebtf/engram/internal/db/gorm/auth_session_store.go:83.111,85.4 1 0 +github.com/thebtf/engram/internal/db/gorm/auth_session_store.go:86.3,86.28 1 0 +github.com/thebtf/engram/internal/db/gorm/auth_session_store.go:86.28,89.4 2 0 +github.com/thebtf/engram/internal/db/gorm/auth_session_store.go:90.3,95.23 3 0 +github.com/thebtf/engram/internal/db/gorm/auth_session_store.go:95.23,97.4 1 0 +github.com/thebtf/engram/internal/db/gorm/auth_session_store.go:98.3,98.116 1 0 +github.com/thebtf/engram/internal/db/gorm/auth_session_store.go:98.116,100.4 1 0 +github.com/thebtf/engram/internal/db/gorm/auth_session_store.go:101.3,102.13 2 0 +github.com/thebtf/engram/internal/db/gorm/auth_session_store.go:104.2,104.21 1 0 +github.com/thebtf/engram/internal/db/gorm/auth_session_store.go:108.59,111.2 2 0 +github.com/thebtf/engram/internal/db/gorm/auth_session_store.go:114.100,115.17 1 0 +github.com/thebtf/engram/internal/db/gorm/auth_session_store.go:115.17,117.3 1 0 +github.com/thebtf/engram/internal/db/gorm/auth_session_store.go:118.2,124.22 4 0 +github.com/thebtf/engram/internal/db/gorm/auth_session_store.go:124.22,126.3 1 0 +github.com/thebtf/engram/internal/db/gorm/auth_session_store.go:127.2,129.25 1 0 +github.com/thebtf/engram/internal/db/gorm/auth_session_store.go:134.58,137.2 2 0 +github.com/thebtf/engram/internal/db/gorm/auth_session_store.go:139.66,140.17 1 0 +github.com/thebtf/engram/internal/db/gorm/auth_session_store.go:140.17,142.3 1 0 +github.com/thebtf/engram/internal/db/gorm/auth_session_store.go:143.2,144.27 2 0 +github.com/thebtf/engram/internal/db/gorm/auth_session_store.go:144.27,146.3 1 0 +github.com/thebtf/engram/internal/db/gorm/auth_session_store.go:147.2,147.32 1 0 +github.com/thebtf/engram/internal/db/gorm/auth_session_store.go:147.32,149.3 1 0 +github.com/thebtf/engram/internal/db/gorm/auth_session_store.go:150.2,150.18 1 0 +github.com/thebtf/engram/internal/db/gorm/auth_session_store.go:154.42,156.40 2 0 +github.com/thebtf/engram/internal/db/gorm/auth_session_store.go:156.40,158.3 1 0 +github.com/thebtf/engram/internal/db/gorm/auth_session_store.go:159.2,159.35 1 0 +github.com/thebtf/engram/internal/db/gorm/behavioral_rules_store.go:28.66,30.2 1 0 +github.com/thebtf/engram/internal/db/gorm/behavioral_rules_store.go:34.121,35.17 1 0 +github.com/thebtf/engram/internal/db/gorm/behavioral_rules_store.go:35.17,37.3 1 0 +github.com/thebtf/engram/internal/db/gorm/behavioral_rules_store.go:38.2,38.24 1 0 +github.com/thebtf/engram/internal/db/gorm/behavioral_rules_store.go:38.24,40.3 1 0 +github.com/thebtf/engram/internal/db/gorm/behavioral_rules_store.go:42.2,47.25 3 0 +github.com/thebtf/engram/internal/db/gorm/behavioral_rules_store.go:47.25,50.3 2 0 +github.com/thebtf/engram/internal/db/gorm/behavioral_rules_store.go:52.2,62.22 2 0 +github.com/thebtf/engram/internal/db/gorm/behavioral_rules_store.go:62.22,64.3 1 0 +github.com/thebtf/engram/internal/db/gorm/behavioral_rules_store.go:66.2,66.64 1 0 +github.com/thebtf/engram/internal/db/gorm/behavioral_rules_store.go:66.64,68.3 1 0 +github.com/thebtf/engram/internal/db/gorm/behavioral_rules_store.go:69.2,69.43 1 0 +github.com/thebtf/engram/internal/db/gorm/behavioral_rules_store.go:74.99,75.13 1 0 +github.com/thebtf/engram/internal/db/gorm/behavioral_rules_store.go:75.13,77.3 1 0 +github.com/thebtf/engram/internal/db/gorm/behavioral_rules_store.go:78.2,82.16 3 0 +github.com/thebtf/engram/internal/db/gorm/behavioral_rules_store.go:82.16,84.3 1 0 +github.com/thebtf/engram/internal/db/gorm/behavioral_rules_store.go:85.2,85.44 1 0 +github.com/thebtf/engram/internal/db/gorm/behavioral_rules_store.go:97.120,99.2 1 0 +github.com/thebtf/engram/internal/db/gorm/behavioral_rules_store.go:103.127,105.2 1 0 +github.com/thebtf/engram/internal/db/gorm/behavioral_rules_store.go:107.138,108.16 1 0 +github.com/thebtf/engram/internal/db/gorm/behavioral_rules_store.go:108.16,110.3 1 0 +github.com/thebtf/engram/internal/db/gorm/behavioral_rules_store.go:112.2,117.20 2 0 +github.com/thebtf/engram/internal/db/gorm/behavioral_rules_store.go:117.20,119.3 1 0 +github.com/thebtf/engram/internal/db/gorm/behavioral_rules_store.go:119.8,121.3 1 0 +github.com/thebtf/engram/internal/db/gorm/behavioral_rules_store.go:122.2,122.17 1 0 +github.com/thebtf/engram/internal/db/gorm/behavioral_rules_store.go:122.17,124.3 1 0 +github.com/thebtf/engram/internal/db/gorm/behavioral_rules_store.go:126.2,127.44 2 0 +github.com/thebtf/engram/internal/db/gorm/behavioral_rules_store.go:127.44,129.3 1 0 +github.com/thebtf/engram/internal/db/gorm/behavioral_rules_store.go:130.2,131.22 2 0 +github.com/thebtf/engram/internal/db/gorm/behavioral_rules_store.go:131.22,133.3 1 0 +github.com/thebtf/engram/internal/db/gorm/behavioral_rules_store.go:134.2,134.20 1 0 +github.com/thebtf/engram/internal/db/gorm/behavioral_rules_store.go:140.106,141.16 1 0 +github.com/thebtf/engram/internal/db/gorm/behavioral_rules_store.go:141.16,143.3 1 0 +github.com/thebtf/engram/internal/db/gorm/behavioral_rules_store.go:145.2,150.33 2 0 +github.com/thebtf/engram/internal/db/gorm/behavioral_rules_store.go:150.33,152.3 1 0 +github.com/thebtf/engram/internal/db/gorm/behavioral_rules_store.go:154.2,155.22 2 0 +github.com/thebtf/engram/internal/db/gorm/behavioral_rules_store.go:155.22,157.3 1 0 +github.com/thebtf/engram/internal/db/gorm/behavioral_rules_store.go:158.2,158.20 1 0 +github.com/thebtf/engram/internal/db/gorm/behavioral_rules_store.go:164.121,165.17 1 0 +github.com/thebtf/engram/internal/db/gorm/behavioral_rules_store.go:165.17,167.3 1 0 +github.com/thebtf/engram/internal/db/gorm/behavioral_rules_store.go:168.2,168.18 1 0 +github.com/thebtf/engram/internal/db/gorm/behavioral_rules_store.go:168.18,170.3 1 0 +github.com/thebtf/engram/internal/db/gorm/behavioral_rules_store.go:171.2,171.24 1 0 +github.com/thebtf/engram/internal/db/gorm/behavioral_rules_store.go:171.24,173.3 1 0 +github.com/thebtf/engram/internal/db/gorm/behavioral_rules_store.go:175.2,190.25 4 0 +github.com/thebtf/engram/internal/db/gorm/behavioral_rules_store.go:190.25,192.3 1 0 +github.com/thebtf/engram/internal/db/gorm/behavioral_rules_store.go:193.2,193.30 1 0 +github.com/thebtf/engram/internal/db/gorm/behavioral_rules_store.go:193.30,195.3 1 0 +github.com/thebtf/engram/internal/db/gorm/behavioral_rules_store.go:197.2,197.28 1 0 +github.com/thebtf/engram/internal/db/gorm/behavioral_rules_store.go:201.138,202.13 1 0 +github.com/thebtf/engram/internal/db/gorm/behavioral_rules_store.go:202.13,204.3 1 0 +github.com/thebtf/engram/internal/db/gorm/behavioral_rules_store.go:206.2,212.21 3 0 +github.com/thebtf/engram/internal/db/gorm/behavioral_rules_store.go:212.21,213.61 1 0 +github.com/thebtf/engram/internal/db/gorm/behavioral_rules_store.go:213.61,215.4 1 0 +github.com/thebtf/engram/internal/db/gorm/behavioral_rules_store.go:218.2,222.25 2 0 +github.com/thebtf/engram/internal/db/gorm/behavioral_rules_store.go:222.25,224.3 1 0 +github.com/thebtf/engram/internal/db/gorm/behavioral_rules_store.go:225.2,225.30 1 0 +github.com/thebtf/engram/internal/db/gorm/behavioral_rules_store.go:225.30,227.3 1 0 +github.com/thebtf/engram/internal/db/gorm/behavioral_rules_store.go:229.2,229.23 1 0 +github.com/thebtf/engram/internal/db/gorm/behavioral_rules_store.go:234.76,235.13 1 0 +github.com/thebtf/engram/internal/db/gorm/behavioral_rules_store.go:235.13,237.3 1 0 +github.com/thebtf/engram/internal/db/gorm/behavioral_rules_store.go:238.2,246.25 3 0 +github.com/thebtf/engram/internal/db/gorm/behavioral_rules_store.go:246.25,248.3 1 0 +github.com/thebtf/engram/internal/db/gorm/behavioral_rules_store.go:249.2,249.30 1 0 +github.com/thebtf/engram/internal/db/gorm/behavioral_rules_store.go:249.30,251.3 1 0 +github.com/thebtf/engram/internal/db/gorm/behavioral_rules_store.go:252.2,252.12 1 0 +github.com/thebtf/engram/internal/db/gorm/behavioral_rules_store.go:256.75,269.2 1 0 +github.com/thebtf/engram/internal/db/gorm/books_store.go:22.42,22.65 1 0 +github.com/thebtf/engram/internal/db/gorm/books_store.go:33.46,34.18 1 0 +github.com/thebtf/engram/internal/db/gorm/books_store.go:34.18,36.3 1 0 +github.com/thebtf/engram/internal/db/gorm/books_store.go:37.2,37.39 1 0 +github.com/thebtf/engram/internal/db/gorm/books_store.go:41.94,42.29 1 0 +github.com/thebtf/engram/internal/db/gorm/books_store.go:42.29,44.3 1 0 +github.com/thebtf/engram/internal/db/gorm/books_store.go:46.2,47.21 2 0 +github.com/thebtf/engram/internal/db/gorm/books_store.go:47.21,49.3 1 0 +github.com/thebtf/engram/internal/db/gorm/books_store.go:51.2,55.68 2 0 +github.com/thebtf/engram/internal/db/gorm/books_store.go:55.68,57.3 1 0 +github.com/thebtf/engram/internal/db/gorm/books_store.go:58.2,58.40 1 0 +github.com/thebtf/engram/internal/db/gorm/books_store.go:62.89,63.29 1 0 +github.com/thebtf/engram/internal/db/gorm/books_store.go:63.29,65.3 1 0 +github.com/thebtf/engram/internal/db/gorm/books_store.go:66.2,66.13 1 0 +github.com/thebtf/engram/internal/db/gorm/books_store.go:66.13,68.3 1 0 +github.com/thebtf/engram/internal/db/gorm/books_store.go:70.2,71.87 2 0 +github.com/thebtf/engram/internal/db/gorm/books_store.go:71.87,73.3 1 0 +github.com/thebtf/engram/internal/db/gorm/books_store.go:74.2,74.40 1 0 +github.com/thebtf/engram/internal/db/gorm/books_store.go:78.140,79.29 1 0 +github.com/thebtf/engram/internal/db/gorm/books_store.go:79.29,81.3 1 0 +github.com/thebtf/engram/internal/db/gorm/books_store.go:82.2,82.13 1 0 +github.com/thebtf/engram/internal/db/gorm/books_store.go:82.13,84.3 1 0 +github.com/thebtf/engram/internal/db/gorm/books_store.go:85.2,85.32 1 0 +github.com/thebtf/engram/internal/db/gorm/books_store.go:85.32,87.3 1 0 +github.com/thebtf/engram/internal/db/gorm/books_store.go:89.2,93.40 2 0 +github.com/thebtf/engram/internal/db/gorm/books_store.go:93.40,95.3 1 0 +github.com/thebtf/engram/internal/db/gorm/books_store.go:95.8,97.3 1 0 +github.com/thebtf/engram/internal/db/gorm/books_store.go:99.2,103.25 2 0 +github.com/thebtf/engram/internal/db/gorm/books_store.go:103.25,105.3 1 0 +github.com/thebtf/engram/internal/db/gorm/books_store.go:106.2,106.30 1 0 +github.com/thebtf/engram/internal/db/gorm/books_store.go:106.30,108.3 1 0 +github.com/thebtf/engram/internal/db/gorm/books_store.go:109.2,109.29 1 0 +github.com/thebtf/engram/internal/db/gorm/books_store.go:112.56,113.16 1 0 +github.com/thebtf/engram/internal/db/gorm/books_store.go:114.113,115.14 1 0 +github.com/thebtf/engram/internal/db/gorm/books_store.go:116.10,117.15 1 0 +github.com/thebtf/engram/internal/db/gorm/books_store.go:121.65,130.2 1 0 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:45.40,45.79 1 3 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:50.48,51.17 1 106 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:51.17,53.3 1 9 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:54.2,54.23 1 97 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:57.47,58.16 1 104 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:58.16,61.3 2 0 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:62.2,62.25 1 104 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:63.14,64.30 1 104 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:65.14,66.17 1 0 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:68.2,68.12 1 104 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:72.74,74.32 2 164 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:74.32,76.3 1 164 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:77.2,96.10 2 164 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:100.76,102.28 2 76 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:102.28,104.3 1 76 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:105.2,106.29 2 76 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:106.29,108.3 1 0 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:109.2,126.20 3 76 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:126.20,128.3 1 0 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:129.2,129.10 1 76 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:139.77,141.2 1 78 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:146.132,147.14 1 76 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:147.14,149.3 1 0 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:150.2,152.25 3 76 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:152.25,154.3 1 0 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:155.2,155.36 1 76 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:159.103,161.68 2 76 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:161.68,163.3 1 0 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:164.2,164.37 1 76 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:170.162,171.16 1 0 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:171.16,173.3 1 0 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:174.2,178.19 2 0 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:178.19,180.3 1 0 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:181.2,182.44 2 0 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:182.44,184.3 1 0 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:185.2,186.22 2 0 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:186.22,188.3 1 0 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:189.2,189.17 1 0 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:194.140,195.20 1 0 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:195.20,197.3 1 0 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:198.2,204.16 4 0 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:204.16,206.3 1 0 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:207.2,208.22 2 0 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:208.22,210.3 1 0 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:211.2,211.17 1 0 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:242.45,245.67 2 0 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:245.67,249.3 3 0 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:250.2,250.16 1 0 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:250.16,252.3 1 0 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:258.2,258.25 1 0 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:258.25,260.22 2 0 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:260.22,262.4 1 0 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:263.3,270.13 3 0 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:270.13,271.17 1 0 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:271.17,272.33 1 0 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:272.33,275.6 1 0 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:277.4,279.64 3 0 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:279.64,282.5 1 0 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:285.2,285.20 1 0 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:294.79,298.37 2 3 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:298.37,300.3 1 0 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:302.2,303.43 2 3 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:303.43,305.3 1 0 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:306.2,312.33 3 3 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:312.33,314.3 1 0 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:316.2,316.110 1 3 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:316.110,318.3 1 0 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:321.2,321.66 1 3 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:321.66,323.3 1 0 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:324.2,324.45 1 3 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:330.144,333.2 1 0 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:351.61,352.51 1 0 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:352.51,354.3 1 0 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:356.2,358.67 3 0 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:358.67,362.3 3 0 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:363.2,363.16 1 0 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:363.16,365.3 1 0 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:367.2,368.45 2 0 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:383.85,385.2 1 16 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:397.85,399.2 1 16 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:410.85,411.51 1 32 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:411.51,413.3 1 0 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:414.2,415.24 2 32 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:415.24,417.3 1 0 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:418.2,419.21 2 32 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:419.21,421.3 1 0 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:422.2,422.135 1 32 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:422.135,424.3 1 29 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:426.2,430.67 5 3 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:430.67,433.17 3 3 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:433.17,435.4 1 0 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:437.3,438.17 2 3 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:438.17,440.4 1 0 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:442.3,442.28 1 3 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:442.28,443.126 1 3 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:443.126,445.5 1 1 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:447.3,448.17 2 2 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:448.17,450.4 1 0 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:451.3,452.106 2 2 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:454.2,454.16 1 3 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:454.16,456.3 1 1 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:458.2,459.62 2 2 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:462.54,463.16 1 32 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:463.16,465.3 1 0 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:466.2,466.53 1 32 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:466.53,468.3 1 0 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:469.2,469.12 1 32 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:472.211,476.46 2 3 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:476.46,478.3 1 0 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:479.2,480.64 2 3 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:480.64,482.3 1 0 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:483.2,485.28 2 3 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:485.28,489.3 3 3 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:492.2,493.16 2 3 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:493.16,495.3 1 0 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:496.2,496.20 1 3 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:496.20,498.3 1 0 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:501.2,506.119 2 3 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:506.119,508.3 1 0 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:509.2,509.75 1 3 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:509.75,511.3 1 0 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:512.2,512.54 1 3 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:515.142,516.76 1 2 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:516.76,518.3 1 0 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:519.2,526.12 3 2 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:526.12,527.16 1 2 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:527.16,527.29 1 2 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:528.3,530.38 3 2 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:534.57,536.17 2 61 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:536.17,538.3 1 0 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:539.2,539.14 1 61 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:549.9,550.21 1 77 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:550.21,552.3 1 6 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:553.2,553.26 1 71 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:553.26,555.3 1 5 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:556.2,556.25 1 66 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:556.25,558.3 1 5 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:559.2,559.63 1 61 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:559.63,561.3 1 5 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:562.2,563.60 2 56 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:563.60,565.3 1 5 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:566.2,566.42 1 51 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:566.42,568.3 1 5 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:570.2,571.94 2 46 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:571.94,573.3 1 0 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:574.2,575.136 2 46 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:575.136,577.3 1 5 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:578.2,579.116 2 41 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:579.116,581.3 1 5 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:582.2,583.129 2 36 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:583.129,585.3 1 5 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:587.2,588.89 2 31 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:588.89,590.3 1 0 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:591.2,591.23 1 31 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:591.23,593.3 1 5 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:594.2,596.9 3 26 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:596.9,598.3 1 5 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:599.2,599.94 1 21 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:599.94,601.3 1 5 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:602.2,603.71 2 16 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:603.71,605.3 1 0 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:606.2,606.39 1 16 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:606.39,608.3 1 5 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:609.2,609.65 1 11 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:609.65,611.3 1 5 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:612.2,612.12 1 6 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:623.9,624.25 1 5 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:624.25,626.3 1 0 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:627.2,627.35 1 5 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:627.35,629.3 1 0 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:630.2,631.16 2 5 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:631.16,633.3 1 0 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:634.2,635.16 2 5 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:635.16,637.3 1 0 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:638.2,641.18 4 5 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:641.18,643.3 1 2 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:644.2,652.43 2 5 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:655.205,656.21 1 6 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:656.21,658.3 1 0 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:659.2,659.26 1 6 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:659.26,661.3 1 0 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:662.2,663.16 2 6 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:663.16,665.3 1 0 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:666.2,666.29 1 6 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:672.135,674.2 1 0 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:686.69,688.2 1 15 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:700.69,702.2 1 15 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:713.69,715.2 1 15 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:726.69,728.120 2 45 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:728.120,730.3 1 42 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:732.2,734.67 3 3 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:734.67,737.17 3 3 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:737.17,739.4 1 0 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:741.3,742.17 2 3 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:742.17,744.4 1 0 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:745.3,747.17 3 3 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:747.17,749.4 1 0 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:750.3,751.102 2 3 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:753.2,753.16 1 3 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:753.16,755.3 1 0 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:756.2,756.47 1 3 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:764.28,765.53 1 5 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:765.53,767.3 1 0 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:769.2,772.33 2 5 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:772.33,774.3 1 0 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:775.2,775.66 1 5 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:775.66,777.3 1 0 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:779.2,780.74 2 5 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:780.74,782.3 1 0 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:783.2,785.9 3 5 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:785.9,787.3 1 0 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:788.2,788.43 1 5 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:788.43,790.3 1 0 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:792.2,793.16 2 5 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:793.16,795.3 1 0 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:796.2,799.16 4 5 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:799.16,801.3 1 0 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:803.2,806.25 2 5 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:806.25,808.3 1 0 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:809.2,809.30 1 5 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:809.30,811.3 1 0 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:812.2,812.38 1 5 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:817.122,819.2 1 0 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:823.119,825.2 1 0 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:833.114,834.14 1 0 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:834.14,836.3 1 0 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:837.2,837.15 1 0 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:837.15,839.3 1 0 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:840.2,862.25 4 0 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:862.25,864.3 1 0 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:865.2,865.30 1 0 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:865.30,867.3 1 0 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:868.2,868.12 1 0 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:875.135,876.23 1 0 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:876.23,878.3 1 0 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:879.2,884.44 3 0 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:884.44,886.3 1 0 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:887.2,887.16 1 0 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:887.16,889.3 1 0 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:890.2,890.37 1 0 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:895.126,896.23 1 0 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:896.23,898.3 1 0 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:899.2,903.44 3 0 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:903.44,905.3 1 0 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:906.2,906.16 1 0 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:906.16,908.3 1 0 +github.com/thebtf/engram/internal/db/gorm/candidate_store.go:909.2,909.37 1 0 +github.com/thebtf/engram/internal/db/gorm/citation_log_store.go:25.42,25.67 1 0 +github.com/thebtf/engram/internal/db/gorm/citation_log_store.go:33.58,35.2 1 0 +github.com/thebtf/engram/internal/db/gorm/citation_log_store.go:39.93,40.23 1 0 +github.com/thebtf/engram/internal/db/gorm/citation_log_store.go:40.23,42.3 1 0 +github.com/thebtf/engram/internal/db/gorm/citation_log_store.go:43.2,43.69 1 0 +github.com/thebtf/engram/internal/db/gorm/citation_log_store.go:43.69,45.3 1 0 +github.com/thebtf/engram/internal/db/gorm/citation_log_store.go:46.2,46.12 1 0 +github.com/thebtf/engram/internal/db/gorm/citation_log_store.go:51.106,52.21 1 0 +github.com/thebtf/engram/internal/db/gorm/citation_log_store.go:52.21,54.3 1 0 +github.com/thebtf/engram/internal/db/gorm/citation_log_store.go:55.2,60.16 3 0 +github.com/thebtf/engram/internal/db/gorm/citation_log_store.go:60.16,62.3 1 0 +github.com/thebtf/engram/internal/db/gorm/citation_log_store.go:63.2,63.17 1 0 +github.com/thebtf/engram/internal/db/gorm/citation_log_store.go:63.17,65.3 1 0 +github.com/thebtf/engram/internal/db/gorm/citation_log_store.go:66.2,66.18 1 0 +github.com/thebtf/engram/internal/db/gorm/citation_log_store.go:71.103,72.19 1 0 +github.com/thebtf/engram/internal/db/gorm/citation_log_store.go:72.19,74.3 1 0 +github.com/thebtf/engram/internal/db/gorm/citation_log_store.go:75.2,80.16 3 0 +github.com/thebtf/engram/internal/db/gorm/citation_log_store.go:80.16,82.3 1 0 +github.com/thebtf/engram/internal/db/gorm/citation_log_store.go:83.2,83.17 1 0 +github.com/thebtf/engram/internal/db/gorm/citation_log_store.go:83.17,85.3 1 0 +github.com/thebtf/engram/internal/db/gorm/citation_log_store.go:86.2,86.18 1 0 +github.com/thebtf/engram/internal/db/gorm/citation_log_store.go:91.101,95.25 2 0 +github.com/thebtf/engram/internal/db/gorm/citation_log_store.go:95.25,97.3 1 0 +github.com/thebtf/engram/internal/db/gorm/citation_log_store.go:98.2,98.33 1 0 +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:54.37,54.61 1 0 +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:67.53,69.2 1 0 +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:78.78,79.18 1 0 +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:79.18,81.3 1 0 +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:90.2,111.25 2 0 +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:111.25,113.3 1 0 +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:114.2,114.12 1 0 +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:119.101,120.21 1 0 +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:120.21,122.3 1 0 +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:123.2,123.20 1 0 +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:123.20,125.3 1 0 +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:126.2,129.25 2 0 +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:129.25,131.3 1 0 +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:132.2,132.12 1 0 +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:144.112,145.21 1 0 +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:145.21,147.3 1 0 +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:148.2,148.24 1 0 +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:148.24,151.3 1 0 +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:156.2,163.25 2 0 +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:163.25,165.3 1 0 +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:166.2,166.12 1 0 +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:172.112,173.21 1 0 +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:173.21,175.3 1 0 +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:176.2,176.16 1 0 +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:176.16,178.3 1 0 +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:179.2,184.76 2 0 +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:184.76,186.3 1 0 +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:187.2,188.22 2 0 +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:188.22,191.3 2 0 +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:192.2,192.17 1 0 +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:198.95,199.21 1 0 +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:199.21,201.3 1 0 +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:202.2,206.78 2 0 +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:206.78,208.3 1 0 +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:209.2,209.19 1 0 +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:220.100,221.13 1 0 +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:221.13,223.3 1 0 +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:224.2,226.25 2 0 +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:226.25,228.3 1 0 +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:229.2,229.12 1 0 +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:240.95,241.16 1 0 +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:241.16,243.3 1 0 +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:244.2,249.76 2 0 +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:249.76,251.3 1 0 +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:252.2,253.22 2 0 +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:253.22,256.3 2 0 +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:257.2,257.17 1 0 +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:264.76,266.2 1 0 +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:281.116,282.21 1 0 +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:282.21,284.3 1 0 +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:285.2,293.33 3 0 +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:293.33,295.3 1 0 +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:296.2,297.25 2 0 +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:297.25,303.3 1 0 +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:304.2,304.17 1 0 +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:315.123,316.21 1 0 +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:316.21,318.3 1 0 +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:319.2,319.21 1 0 +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:319.21,321.3 1 0 +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:322.2,322.24 1 0 +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:322.24,324.3 1 0 +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:325.2,334.25 2 0 +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:334.25,336.3 1 0 +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:337.2,337.33 1 0 +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:354.98,355.21 1 0 +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:355.21,357.3 1 0 +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:358.2,358.21 1 0 +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:358.21,360.3 1 0 +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:361.2,366.25 2 0 +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:366.25,368.3 1 0 +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:369.2,369.12 1 0 +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:387.115,388.21 1 0 +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:388.21,390.3 1 0 +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:391.2,391.21 1 0 +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:391.21,393.3 1 0 +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:399.2,402.39 2 0 +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:402.39,404.3 1 0 +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:405.2,405.21 1 0 +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:405.21,409.3 1 0 +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:411.2,413.25 2 0 +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:413.25,415.3 1 0 +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:416.2,416.33 1 0 +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:447.125,448.21 1 0 +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:448.21,450.3 1 0 +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:451.2,451.17 1 0 +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:451.17,453.3 1 0 +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:454.2,454.16 1 0 +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:454.16,456.3 1 0 +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:457.2,457.17 1 0 +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:457.17,459.3 1 0 +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:464.2,495.76 4 0 +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:495.76,497.3 1 0 +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:499.2,500.25 2 0 +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:500.25,510.3 1 0 +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:511.2,511.17 1 0 +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:523.159,524.21 1 0 +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:524.21,526.3 1 0 +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:527.2,527.24 1 0 +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:527.24,529.3 1 0 +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:530.2,530.16 1 0 +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:530.16,532.3 1 0 +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:533.2,533.20 1 0 +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:533.20,535.3 1 0 +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:537.2,570.76 5 0 +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:570.76,572.3 1 0 +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:574.2,575.25 2 0 +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:575.25,585.3 1 0 +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:586.2,586.17 1 0 +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:593.103,594.21 1 0 +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:594.21,596.3 1 0 +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:597.2,601.78 2 0 +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:601.78,603.3 1 0 +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:604.2,604.19 1 0 +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:611.112,612.21 1 0 +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:612.21,614.3 1 0 +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:615.2,620.35 2 0 +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:620.35,622.3 1 0 +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:623.2,623.25 1 0 +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:623.25,625.3 1 0 +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:626.2,626.33 1 0 +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:634.105,635.21 1 0 +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:635.21,637.3 1 0 +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:638.2,638.21 1 0 +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:638.21,640.3 1 0 +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:641.2,643.25 2 0 +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:643.25,645.3 1 0 +github.com/thebtf/engram/internal/db/gorm/code_chunk_store.go:646.2,646.33 1 0 +github.com/thebtf/engram/internal/db/gorm/credential_store.go:26.56,28.2 1 0 +github.com/thebtf/engram/internal/db/gorm/credential_store.go:34.108,35.17 1 0 +github.com/thebtf/engram/internal/db/gorm/credential_store.go:35.17,37.3 1 0 +github.com/thebtf/engram/internal/db/gorm/credential_store.go:38.2,38.24 1 0 +github.com/thebtf/engram/internal/db/gorm/credential_store.go:38.24,40.3 1 0 +github.com/thebtf/engram/internal/db/gorm/credential_store.go:41.2,41.20 1 0 +github.com/thebtf/engram/internal/db/gorm/credential_store.go:41.20,43.3 1 0 +github.com/thebtf/engram/internal/db/gorm/credential_store.go:44.2,44.36 1 0 +github.com/thebtf/engram/internal/db/gorm/credential_store.go:44.36,46.3 1 0 +github.com/thebtf/engram/internal/db/gorm/credential_store.go:47.2,47.41 1 0 +github.com/thebtf/engram/internal/db/gorm/credential_store.go:47.41,49.3 1 0 +github.com/thebtf/engram/internal/db/gorm/credential_store.go:55.2,69.22 4 0 +github.com/thebtf/engram/internal/db/gorm/credential_store.go:69.22,71.3 1 0 +github.com/thebtf/engram/internal/db/gorm/credential_store.go:73.2,73.64 1 0 +github.com/thebtf/engram/internal/db/gorm/credential_store.go:73.64,75.3 1 0 +github.com/thebtf/engram/internal/db/gorm/credential_store.go:76.2,76.39 1 0 +github.com/thebtf/engram/internal/db/gorm/credential_store.go:81.101,82.19 1 0 +github.com/thebtf/engram/internal/db/gorm/credential_store.go:82.19,84.3 1 0 +github.com/thebtf/engram/internal/db/gorm/credential_store.go:85.2,85.15 1 0 +github.com/thebtf/engram/internal/db/gorm/credential_store.go:85.15,87.3 1 0 +github.com/thebtf/engram/internal/db/gorm/credential_store.go:88.2,92.16 3 0 +github.com/thebtf/engram/internal/db/gorm/credential_store.go:92.16,94.3 1 0 +github.com/thebtf/engram/internal/db/gorm/credential_store.go:95.2,95.40 1 0 +github.com/thebtf/engram/internal/db/gorm/credential_store.go:103.98,104.15 1 0 +github.com/thebtf/engram/internal/db/gorm/credential_store.go:104.15,106.3 1 0 +github.com/thebtf/engram/internal/db/gorm/credential_store.go:107.2,112.16 3 0 +github.com/thebtf/engram/internal/db/gorm/credential_store.go:112.16,114.3 1 0 +github.com/thebtf/engram/internal/db/gorm/credential_store.go:115.2,115.40 1 0 +github.com/thebtf/engram/internal/db/gorm/credential_store.go:120.99,121.19 1 0 +github.com/thebtf/engram/internal/db/gorm/credential_store.go:121.19,123.3 1 0 +github.com/thebtf/engram/internal/db/gorm/credential_store.go:124.2,129.16 3 0 +github.com/thebtf/engram/internal/db/gorm/credential_store.go:129.16,131.3 1 0 +github.com/thebtf/engram/internal/db/gorm/credential_store.go:132.2,133.22 2 0 +github.com/thebtf/engram/internal/db/gorm/credential_store.go:133.22,135.3 1 0 +github.com/thebtf/engram/internal/db/gorm/credential_store.go:136.2,136.20 1 0 +github.com/thebtf/engram/internal/db/gorm/credential_store.go:141.86,147.16 3 0 +github.com/thebtf/engram/internal/db/gorm/credential_store.go:147.16,149.3 1 0 +github.com/thebtf/engram/internal/db/gorm/credential_store.go:150.2,151.22 2 0 +github.com/thebtf/engram/internal/db/gorm/credential_store.go:151.22,153.3 1 0 +github.com/thebtf/engram/internal/db/gorm/credential_store.go:154.2,154.20 1 0 +github.com/thebtf/engram/internal/db/gorm/credential_store.go:169.82,170.19 1 0 +github.com/thebtf/engram/internal/db/gorm/credential_store.go:170.19,172.3 1 0 +github.com/thebtf/engram/internal/db/gorm/credential_store.go:173.2,173.15 1 0 +github.com/thebtf/engram/internal/db/gorm/credential_store.go:173.15,175.3 1 0 +github.com/thebtf/engram/internal/db/gorm/credential_store.go:176.2,179.25 2 0 +github.com/thebtf/engram/internal/db/gorm/credential_store.go:179.25,181.3 1 0 +github.com/thebtf/engram/internal/db/gorm/credential_store.go:182.2,182.30 1 0 +github.com/thebtf/engram/internal/db/gorm/credential_store.go:182.30,184.3 1 0 +github.com/thebtf/engram/internal/db/gorm/credential_store.go:185.2,185.12 1 0 +github.com/thebtf/engram/internal/db/gorm/credential_store.go:191.79,192.15 1 0 +github.com/thebtf/engram/internal/db/gorm/credential_store.go:192.15,194.3 1 0 +github.com/thebtf/engram/internal/db/gorm/credential_store.go:196.2,200.33 2 0 +github.com/thebtf/engram/internal/db/gorm/credential_store.go:200.33,202.3 1 0 +github.com/thebtf/engram/internal/db/gorm/credential_store.go:203.2,204.25 2 0 +github.com/thebtf/engram/internal/db/gorm/credential_store.go:204.25,206.3 1 0 +github.com/thebtf/engram/internal/db/gorm/credential_store.go:207.2,207.12 1 0 +github.com/thebtf/engram/internal/db/gorm/credential_store.go:212.80,218.16 3 0 +github.com/thebtf/engram/internal/db/gorm/credential_store.go:218.16,220.3 1 0 +github.com/thebtf/engram/internal/db/gorm/credential_store.go:221.2,221.19 1 0 +github.com/thebtf/engram/internal/db/gorm/credential_store.go:229.120,236.16 3 0 +github.com/thebtf/engram/internal/db/gorm/credential_store.go:236.16,238.3 1 0 +github.com/thebtf/engram/internal/db/gorm/credential_store.go:239.2,239.19 1 0 +github.com/thebtf/engram/internal/db/gorm/credential_store.go:247.118,248.30 1 0 +github.com/thebtf/engram/internal/db/gorm/credential_store.go:248.30,250.3 1 0 +github.com/thebtf/engram/internal/db/gorm/credential_store.go:251.2,255.25 2 0 +github.com/thebtf/engram/internal/db/gorm/credential_store.go:255.25,257.3 1 0 +github.com/thebtf/engram/internal/db/gorm/credential_store.go:258.2,258.33 1 0 +github.com/thebtf/engram/internal/db/gorm/credential_store.go:262.63,276.2 1 0 +github.com/thebtf/engram/internal/db/gorm/document_store.go:29.52,34.2 1 0 +github.com/thebtf/engram/internal/db/gorm/document_store.go:37.125,44.21 3 0 +github.com/thebtf/engram/internal/db/gorm/document_store.go:44.21,46.3 1 0 +github.com/thebtf/engram/internal/db/gorm/document_store.go:48.2,59.111 2 0 +github.com/thebtf/engram/internal/db/gorm/document_store.go:59.111,61.3 1 0 +github.com/thebtf/engram/internal/db/gorm/document_store.go:63.2,64.119 2 0 +github.com/thebtf/engram/internal/db/gorm/document_store.go:64.119,66.3 1 0 +github.com/thebtf/engram/internal/db/gorm/document_store.go:68.2,68.18 1 0 +github.com/thebtf/engram/internal/db/gorm/document_store.go:72.102,76.33 2 0 +github.com/thebtf/engram/internal/db/gorm/document_store.go:76.33,77.36 1 0 +github.com/thebtf/engram/internal/db/gorm/document_store.go:77.36,79.4 1 0 +github.com/thebtf/engram/internal/db/gorm/document_store.go:80.3,80.50 1 0 +github.com/thebtf/engram/internal/db/gorm/document_store.go:83.2,83.18 1 0 +github.com/thebtf/engram/internal/db/gorm/document_store.go:87.88,89.86 2 0 +github.com/thebtf/engram/internal/db/gorm/document_store.go:89.86,90.36 1 0 +github.com/thebtf/engram/internal/db/gorm/document_store.go:90.36,92.4 1 0 +github.com/thebtf/engram/internal/db/gorm/document_store.go:93.3,93.49 1 0 +github.com/thebtf/engram/internal/db/gorm/document_store.go:96.2,96.22 1 0 +github.com/thebtf/engram/internal/db/gorm/document_store.go:100.116,102.16 2 0 +github.com/thebtf/engram/internal/db/gorm/document_store.go:102.16,104.3 1 0 +github.com/thebtf/engram/internal/db/gorm/document_store.go:106.2,107.66 2 0 +github.com/thebtf/engram/internal/db/gorm/document_store.go:107.66,109.3 1 0 +github.com/thebtf/engram/internal/db/gorm/document_store.go:111.2,111.18 1 0 +github.com/thebtf/engram/internal/db/gorm/document_store.go:116.91,118.2 1 0 +github.com/thebtf/engram/internal/db/gorm/document_store.go:123.111,125.2 1 0 +github.com/thebtf/engram/internal/db/gorm/document_store.go:129.80,131.2 1 0 +github.com/thebtf/engram/internal/db/gorm/document_store.go:134.96,139.21 1 0 +github.com/thebtf/engram/internal/db/gorm/document_store.go:139.21,141.3 1 0 +github.com/thebtf/engram/internal/db/gorm/document_store.go:143.2,143.12 1 0 +github.com/thebtf/engram/internal/db/gorm/document_store.go:147.92,156.16 3 0 +github.com/thebtf/engram/internal/db/gorm/document_store.go:156.16,158.3 1 0 +github.com/thebtf/engram/internal/db/gorm/document_store.go:159.2,162.18 3 0 +github.com/thebtf/engram/internal/db/gorm/document_store.go:162.18,165.56 3 0 +github.com/thebtf/engram/internal/db/gorm/document_store.go:165.56,167.4 1 0 +github.com/thebtf/engram/internal/db/gorm/document_store.go:168.3,168.29 1 0 +github.com/thebtf/engram/internal/db/gorm/document_store.go:171.2,171.35 1 0 +github.com/thebtf/engram/internal/db/gorm/document_store.go:171.35,173.3 1 0 +github.com/thebtf/engram/internal/db/gorm/document_store.go:175.2,175.20 1 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:123.58,125.2 1 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:129.95,131.16 2 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:131.16,133.3 1 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:135.2,148.16 5 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:148.16,150.3 1 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:151.2,151.31 1 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:157.135,159.16 2 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:159.16,161.3 1 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:162.2,162.32 1 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:162.32,164.3 1 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:166.2,175.22 3 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:175.22,177.3 1 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:178.2,178.27 1 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:178.27,179.57 1 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:179.57,181.4 1 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:182.3,182.91 1 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:184.2,184.31 1 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:188.90,190.18 2 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:190.18,192.3 1 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:193.2,194.86 2 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:194.86,196.3 1 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:197.2,197.18 1 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:202.107,204.16 2 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:204.16,206.3 1 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:208.2,209.29 2 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:209.29,211.3 1 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:212.2,212.37 1 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:212.37,214.3 1 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:215.2,215.41 1 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:215.41,217.3 1 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:218.2,218.27 1 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:218.27,220.3 1 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:221.2,222.27 2 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:222.27,224.3 1 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:226.2,227.48 2 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:227.48,229.3 1 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:230.2,231.22 2 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:231.22,233.3 1 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:234.2,234.20 1 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:240.77,242.18 2 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:242.18,244.3 1 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:245.2,246.22 2 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:246.22,248.3 1 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:249.2,249.27 1 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:249.27,251.3 1 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:252.2,252.12 1 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:257.126,261.16 4 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:261.16,263.3 1 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:264.2,264.17 1 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:264.17,266.3 1 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:267.2,267.43 1 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:267.43,269.3 1 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:271.2,272.70 2 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:272.70,274.114 2 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:274.114,276.4 1 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:277.3,277.56 1 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:277.56,279.4 1 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:280.3,280.96 1 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:280.96,282.4 1 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:283.3,284.17 2 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:284.17,286.4 1 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:287.3,294.47 3 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:294.47,296.4 1 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:297.3,299.82 1 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:299.82,301.4 1 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:302.3,309.5 2 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:311.2,311.16 1 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:311.16,313.3 1 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:314.2,314.21 1 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:318.94,328.33 3 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:328.33,330.3 1 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:331.2,332.27 2 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:332.27,334.3 1 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:335.2,339.34 2 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:339.34,340.66 1 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:340.66,342.4 1 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:344.2,344.20 1 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:348.114,350.2 1 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:353.129,355.2 1 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:358.104,360.2 1 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:363.127,364.17 1 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:364.17,366.3 1 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:367.2,367.16 1 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:367.16,369.3 1 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:370.2,371.73 2 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:371.73,373.3 1 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:374.2,375.16 2 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:375.16,377.3 1 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:378.2,379.16 2 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:379.16,381.3 1 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:382.2,383.16 2 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:383.16,385.3 1 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:386.2,387.16 2 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:387.16,389.3 1 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:390.2,396.8 1 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:400.96,402.2 1 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:404.114,407.18 3 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:407.18,409.3 1 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:410.2,410.17 1 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:410.17,412.3 1 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:413.2,414.16 2 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:414.16,416.3 1 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:417.2,418.16 2 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:418.16,420.3 1 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:421.2,422.24 2 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:422.24,424.3 1 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:425.2,433.49 2 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:436.65,437.15 1 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:437.15,439.3 1 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:440.2,446.22 2 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:446.22,448.3 1 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:449.2,449.30 1 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:449.30,451.3 1 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:452.2,452.60 1 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:452.60,454.3 1 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:455.2,455.37 1 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:455.37,457.3 1 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:458.2,458.17 1 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:461.99,466.94 5 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:466.94,468.3 1 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:469.2,469.57 1 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:469.57,471.3 1 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:472.2,472.21 1 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:472.21,474.3 1 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:475.2,475.22 1 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:475.22,477.3 1 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:478.2,478.21 1 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:478.21,480.3 1 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:481.2,481.18 1 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:484.54,485.14 1 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:486.101,487.14 1 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:488.10,489.15 1 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:493.45,494.14 1 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:495.70,496.14 1 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:497.10,498.15 1 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:519.147,520.16 1 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:520.16,522.3 1 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:523.2,542.22 2 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:542.22,544.3 1 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:545.2,545.19 1 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:545.19,547.3 1 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:548.2,550.44 3 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:550.44,552.3 1 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:553.2,554.27 2 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:554.27,572.3 1 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:573.2,573.20 1 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:591.144,592.16 1 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:592.16,594.3 1 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:595.2,612.19 3 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:612.19,614.3 1 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:615.2,615.21 1 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:615.21,617.3 1 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:618.2,620.44 3 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:620.44,622.3 1 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:623.2,624.27 2 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:624.27,640.3 1 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:641.2,641.20 1 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:644.145,645.16 1 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:645.16,647.3 1 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:648.2,649.25 2 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:649.25,651.23 2 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:651.23,653.4 1 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:653.9,655.4 1 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:656.8,656.29 1 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:656.29,658.3 1 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:659.2,660.82 2 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:660.82,662.3 1 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:663.2,664.27 2 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:664.27,674.3 1 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:675.2,675.20 1 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:678.57,679.14 1 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:679.14,681.3 1 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:682.2,683.16 2 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:683.16,685.3 1 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:686.2,687.18 2 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:690.59,691.34 1 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:691.34,693.3 1 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:694.2,695.51 2 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:695.51,697.3 1 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:698.2,698.12 1 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:701.91,702.19 1 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:702.19,704.3 1 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:705.2,705.22 1 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:705.22,707.3 1 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:708.2,708.40 1 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:708.40,710.3 1 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:711.2,711.18 1 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:714.80,715.22 1 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:715.22,717.3 1 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:718.2,718.40 1 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:718.40,720.3 1 0 +github.com/thebtf/engram/internal/db/gorm/domain_owner_store.go:721.2,721.17 1 0 +github.com/thebtf/engram/internal/db/gorm/helpers.go:22.96,42.2 3 0 +github.com/thebtf/engram/internal/db/gorm/helpers.go:48.45,49.13 1 0 +github.com/thebtf/engram/internal/db/gorm/helpers.go:49.13,51.3 1 0 +github.com/thebtf/engram/internal/db/gorm/helpers.go:52.2,52.47 1 0 +github.com/thebtf/engram/internal/db/gorm/helpers.go:62.61,63.46 1 0 +github.com/thebtf/engram/internal/db/gorm/helpers.go:63.46,64.63 1 0 +github.com/thebtf/engram/internal/db/gorm/helpers.go:64.63,66.4 1 0 +github.com/thebtf/engram/internal/db/gorm/helpers.go:68.2,68.21 1 0 +github.com/thebtf/engram/internal/db/gorm/helpers.go:74.78,75.19 1 0 +github.com/thebtf/engram/internal/db/gorm/helpers.go:75.19,77.3 1 0 +github.com/thebtf/engram/internal/db/gorm/helpers.go:78.2,79.22 2 0 +github.com/thebtf/engram/internal/db/gorm/helpers.go:79.22,81.3 1 0 +github.com/thebtf/engram/internal/db/gorm/helpers.go:82.2,82.14 1 0 +github.com/thebtf/engram/internal/db/gorm/helpers.go:87.44,88.47 1 0 +github.com/thebtf/engram/internal/db/gorm/helpers.go:88.47,89.64 1 0 +github.com/thebtf/engram/internal/db/gorm/helpers.go:89.64,91.4 1 0 +github.com/thebtf/engram/internal/db/gorm/helpers.go:93.2,93.10 1 0 +github.com/thebtf/engram/internal/db/gorm/helpers.go:105.80,110.2 1 0 +github.com/thebtf/engram/internal/db/gorm/injection_log_store.go:20.60,22.2 1 0 +github.com/thebtf/engram/internal/db/gorm/injection_log_store.go:26.109,27.21 1 0 +github.com/thebtf/engram/internal/db/gorm/injection_log_store.go:27.21,29.3 1 0 +github.com/thebtf/engram/internal/db/gorm/injection_log_store.go:30.2,30.19 1 0 +github.com/thebtf/engram/internal/db/gorm/injection_log_store.go:30.19,32.3 1 0 +github.com/thebtf/engram/internal/db/gorm/injection_log_store.go:33.2,33.25 1 0 +github.com/thebtf/engram/internal/db/gorm/injection_log_store.go:33.25,35.3 1 0 +github.com/thebtf/engram/internal/db/gorm/injection_log_store.go:37.2,38.16 2 0 +github.com/thebtf/engram/internal/db/gorm/injection_log_store.go:38.16,40.3 1 0 +github.com/thebtf/engram/internal/db/gorm/injection_log_store.go:42.2,46.16 2 0 +github.com/thebtf/engram/internal/db/gorm/injection_log_store.go:46.16,48.3 1 0 +github.com/thebtf/engram/internal/db/gorm/injection_log_store.go:49.2,49.12 1 0 +github.com/thebtf/engram/internal/db/gorm/injection_log_store.go:55.98,56.21 1 0 +github.com/thebtf/engram/internal/db/gorm/injection_log_store.go:56.21,58.3 1 0 +github.com/thebtf/engram/internal/db/gorm/injection_log_store.go:60.2,61.16 2 0 +github.com/thebtf/engram/internal/db/gorm/injection_log_store.go:61.16,63.3 1 0 +github.com/thebtf/engram/internal/db/gorm/injection_log_store.go:65.2,69.16 2 0 +github.com/thebtf/engram/internal/db/gorm/injection_log_store.go:69.16,71.3 1 0 +github.com/thebtf/engram/internal/db/gorm/injection_log_store.go:72.2,75.18 3 0 +github.com/thebtf/engram/internal/db/gorm/injection_log_store.go:75.18,77.41 2 0 +github.com/thebtf/engram/internal/db/gorm/injection_log_store.go:77.41,79.4 1 0 +github.com/thebtf/engram/internal/db/gorm/injection_log_store.go:80.3,80.43 1 0 +github.com/thebtf/engram/internal/db/gorm/injection_log_store.go:82.2,82.35 1 0 +github.com/thebtf/engram/internal/db/gorm/injection_log_store.go:82.35,84.3 1 0 +github.com/thebtf/engram/internal/db/gorm/injection_log_store.go:85.2,85.19 1 0 +github.com/thebtf/engram/internal/db/gorm/injection_log_store.go:85.19,87.3 1 0 +github.com/thebtf/engram/internal/db/gorm/injection_log_store.go:88.2,88.20 1 0 +github.com/thebtf/engram/internal/db/gorm/injection_log_store.go:93.102,95.16 2 0 +github.com/thebtf/engram/internal/db/gorm/injection_log_store.go:95.16,97.3 1 0 +github.com/thebtf/engram/internal/db/gorm/injection_log_store.go:99.2,103.16 2 0 +github.com/thebtf/engram/internal/db/gorm/injection_log_store.go:103.16,105.3 1 0 +github.com/thebtf/engram/internal/db/gorm/injection_log_store.go:106.2,107.16 2 0 +github.com/thebtf/engram/internal/db/gorm/injection_log_store.go:107.16,109.3 1 0 +github.com/thebtf/engram/internal/db/gorm/injection_log_store.go:110.2,110.15 1 0 +github.com/thebtf/engram/internal/db/gorm/invitation_store.go:28.55,30.2 1 0 +github.com/thebtf/engram/internal/db/gorm/invitation_store.go:33.58,35.40 2 0 +github.com/thebtf/engram/internal/db/gorm/invitation_store.go:35.40,37.3 1 0 +github.com/thebtf/engram/internal/db/gorm/invitation_store.go:38.2,38.35 1 0 +github.com/thebtf/engram/internal/db/gorm/invitation_store.go:42.138,44.16 2 0 +github.com/thebtf/engram/internal/db/gorm/invitation_store.go:44.16,46.3 1 0 +github.com/thebtf/engram/internal/db/gorm/invitation_store.go:47.2,48.16 2 0 +github.com/thebtf/engram/internal/db/gorm/invitation_store.go:48.16,50.3 1 0 +github.com/thebtf/engram/internal/db/gorm/invitation_store.go:51.2,52.24 2 0 +github.com/thebtf/engram/internal/db/gorm/invitation_store.go:52.24,54.3 1 0 +github.com/thebtf/engram/internal/db/gorm/invitation_store.go:55.2,56.27 2 0 +github.com/thebtf/engram/internal/db/gorm/invitation_store.go:56.27,58.3 1 0 +github.com/thebtf/engram/internal/db/gorm/invitation_store.go:60.2,68.47 2 0 +github.com/thebtf/engram/internal/db/gorm/invitation_store.go:68.47,70.3 1 0 +github.com/thebtf/engram/internal/db/gorm/invitation_store.go:71.2,71.17 1 0 +github.com/thebtf/engram/internal/db/gorm/invitation_store.go:75.76,76.13 1 0 +github.com/thebtf/engram/internal/db/gorm/invitation_store.go:76.13,78.3 1 0 +github.com/thebtf/engram/internal/db/gorm/invitation_store.go:79.2,80.51 2 0 +github.com/thebtf/engram/internal/db/gorm/invitation_store.go:80.51,82.3 1 0 +github.com/thebtf/engram/internal/db/gorm/invitation_store.go:83.2,83.18 1 0 +github.com/thebtf/engram/internal/db/gorm/invitation_store.go:87.80,89.16 2 0 +github.com/thebtf/engram/internal/db/gorm/invitation_store.go:89.16,91.3 1 0 +github.com/thebtf/engram/internal/db/gorm/invitation_store.go:92.2,93.71 2 0 +github.com/thebtf/engram/internal/db/gorm/invitation_store.go:93.71,95.3 1 0 +github.com/thebtf/engram/internal/db/gorm/invitation_store.go:96.2,96.36 1 0 +github.com/thebtf/engram/internal/db/gorm/invitation_store.go:101.80,103.16 2 0 +github.com/thebtf/engram/internal/db/gorm/invitation_store.go:103.16,105.3 1 0 +github.com/thebtf/engram/internal/db/gorm/invitation_store.go:106.2,106.50 1 0 +github.com/thebtf/engram/internal/db/gorm/invitation_store.go:106.50,108.114 2 0 +github.com/thebtf/engram/internal/db/gorm/invitation_store.go:108.114,110.4 1 0 +github.com/thebtf/engram/internal/db/gorm/invitation_store.go:111.3,111.56 1 0 +github.com/thebtf/engram/internal/db/gorm/invitation_store.go:111.56,113.4 1 0 +github.com/thebtf/engram/internal/db/gorm/invitation_store.go:114.3,117.83 2 0 +github.com/thebtf/engram/internal/db/gorm/invitation_store.go:117.83,119.4 1 0 +github.com/thebtf/engram/internal/db/gorm/invitation_store.go:120.3,120.13 1 0 +github.com/thebtf/engram/internal/db/gorm/invitation_store.go:126.101,127.13 1 0 +github.com/thebtf/engram/internal/db/gorm/invitation_store.go:127.13,129.3 1 0 +github.com/thebtf/engram/internal/db/gorm/invitation_store.go:130.2,132.50 3 0 +github.com/thebtf/engram/internal/db/gorm/invitation_store.go:132.50,134.94 2 0 +github.com/thebtf/engram/internal/db/gorm/invitation_store.go:134.94,136.4 1 0 +github.com/thebtf/engram/internal/db/gorm/invitation_store.go:137.3,137.45 1 0 +github.com/thebtf/engram/internal/db/gorm/invitation_store.go:137.45,139.4 1 0 +github.com/thebtf/engram/internal/db/gorm/invitation_store.go:140.3,140.27 1 0 +github.com/thebtf/engram/internal/db/gorm/invitation_store.go:140.27,143.4 2 0 +github.com/thebtf/engram/internal/db/gorm/invitation_store.go:144.3,149.23 3 0 +github.com/thebtf/engram/internal/db/gorm/invitation_store.go:149.23,151.4 1 0 +github.com/thebtf/engram/internal/db/gorm/invitation_store.go:152.3,152.135 1 0 +github.com/thebtf/engram/internal/db/gorm/invitation_store.go:152.135,154.4 1 0 +github.com/thebtf/engram/internal/db/gorm/invitation_store.go:155.3,156.13 2 0 +github.com/thebtf/engram/internal/db/gorm/invitation_store.go:158.2,158.21 1 0 +github.com/thebtf/engram/internal/db/gorm/invitation_store.go:162.68,164.79 2 0 +github.com/thebtf/engram/internal/db/gorm/invitation_store.go:164.79,166.3 1 0 +github.com/thebtf/engram/internal/db/gorm/invitation_store.go:167.2,167.25 1 0 +github.com/thebtf/engram/internal/db/gorm/invitation_store.go:170.66,171.16 1 0 +github.com/thebtf/engram/internal/db/gorm/invitation_store.go:171.16,173.3 1 0 +github.com/thebtf/engram/internal/db/gorm/invitation_store.go:174.2,175.44 2 0 +github.com/thebtf/engram/internal/db/gorm/invitation_store.go:175.44,177.3 1 0 +github.com/thebtf/engram/internal/db/gorm/invitation_store.go:178.2,178.26 1 0 +github.com/thebtf/engram/internal/db/gorm/invitation_store.go:178.26,180.3 1 0 +github.com/thebtf/engram/internal/db/gorm/invitation_store.go:181.2,181.31 1 0 +github.com/thebtf/engram/internal/db/gorm/invitation_store.go:181.31,183.3 1 0 +github.com/thebtf/engram/internal/db/gorm/invitation_store.go:184.2,184.17 1 0 +github.com/thebtf/engram/internal/db/gorm/issue_store.go:18.47,20.2 1 0 +github.com/thebtf/engram/internal/db/gorm/issue_store.go:33.45,35.2 1 0 +github.com/thebtf/engram/internal/db/gorm/issue_store.go:39.83,41.2 1 0 +github.com/thebtf/engram/internal/db/gorm/issue_store.go:53.84,69.26 3 0 +github.com/thebtf/engram/internal/db/gorm/issue_store.go:69.26,71.3 1 0 +github.com/thebtf/engram/internal/db/gorm/issue_store.go:72.2,72.28 1 0 +github.com/thebtf/engram/internal/db/gorm/issue_store.go:72.28,74.3 1 0 +github.com/thebtf/engram/internal/db/gorm/issue_store.go:75.2,75.24 1 0 +github.com/thebtf/engram/internal/db/gorm/issue_store.go:75.24,77.3 1 0 +github.com/thebtf/engram/internal/db/gorm/issue_store.go:80.2,81.36 2 0 +github.com/thebtf/engram/internal/db/gorm/issue_store.go:81.36,83.3 1 0 +github.com/thebtf/engram/internal/db/gorm/issue_store.go:84.2,85.40 2 0 +github.com/thebtf/engram/internal/db/gorm/issue_store.go:85.40,87.3 1 0 +github.com/thebtf/engram/internal/db/gorm/issue_store.go:88.2,88.36 1 0 +github.com/thebtf/engram/internal/db/gorm/issue_store.go:88.36,90.3 1 0 +github.com/thebtf/engram/internal/db/gorm/issue_store.go:92.2,92.69 1 0 +github.com/thebtf/engram/internal/db/gorm/issue_store.go:92.69,94.3 1 0 +github.com/thebtf/engram/internal/db/gorm/issue_store.go:95.2,95.24 1 0 +github.com/thebtf/engram/internal/db/gorm/issue_store.go:111.147,118.2 1 0 +github.com/thebtf/engram/internal/db/gorm/issue_store.go:121.113,123.16 2 0 +github.com/thebtf/engram/internal/db/gorm/issue_store.go:123.16,125.3 1 0 +github.com/thebtf/engram/internal/db/gorm/issue_store.go:127.2,132.32 2 0 +github.com/thebtf/engram/internal/db/gorm/issue_store.go:132.32,136.3 2 0 +github.com/thebtf/engram/internal/db/gorm/issue_store.go:137.2,137.32 1 0 +github.com/thebtf/engram/internal/db/gorm/issue_store.go:137.32,141.3 2 0 +github.com/thebtf/engram/internal/db/gorm/issue_store.go:142.2,142.30 1 0 +github.com/thebtf/engram/internal/db/gorm/issue_store.go:142.30,144.3 1 0 +github.com/thebtf/engram/internal/db/gorm/issue_store.go:145.2,145.33 1 0 +github.com/thebtf/engram/internal/db/gorm/issue_store.go:145.33,147.3 1 0 +github.com/thebtf/engram/internal/db/gorm/issue_store.go:148.2,148.23 1 0 +github.com/thebtf/engram/internal/db/gorm/issue_store.go:148.23,150.3 1 0 +github.com/thebtf/engram/internal/db/gorm/issue_store.go:152.2,153.50 2 0 +github.com/thebtf/engram/internal/db/gorm/issue_store.go:153.50,155.3 1 0 +github.com/thebtf/engram/internal/db/gorm/issue_store.go:157.2,164.16 3 0 +github.com/thebtf/engram/internal/db/gorm/issue_store.go:164.16,166.3 1 0 +github.com/thebtf/engram/internal/db/gorm/issue_store.go:168.2,168.27 1 0 +github.com/thebtf/engram/internal/db/gorm/issue_store.go:172.94,174.70 2 0 +github.com/thebtf/engram/internal/db/gorm/issue_store.go:174.70,175.36 1 0 +github.com/thebtf/engram/internal/db/gorm/issue_store.go:175.36,177.4 1 0 +github.com/thebtf/engram/internal/db/gorm/issue_store.go:178.3,178.52 1 0 +github.com/thebtf/engram/internal/db/gorm/issue_store.go:181.2,185.37 2 0 +github.com/thebtf/engram/internal/db/gorm/issue_store.go:185.37,187.3 1 0 +github.com/thebtf/engram/internal/db/gorm/issue_store.go:189.2,189.30 1 0 +github.com/thebtf/engram/internal/db/gorm/issue_store.go:193.92,200.16 3 0 +github.com/thebtf/engram/internal/db/gorm/issue_store.go:201.18,202.31 1 0 +github.com/thebtf/engram/internal/db/gorm/issue_store.go:203.18,204.31 1 0 +github.com/thebtf/engram/internal/db/gorm/issue_store.go:205.22,206.35 1 0 +github.com/thebtf/engram/internal/db/gorm/issue_store.go:207.16,208.29 1 0 +github.com/thebtf/engram/internal/db/gorm/issue_store.go:211.2,212.25 2 0 +github.com/thebtf/engram/internal/db/gorm/issue_store.go:212.25,214.3 1 0 +github.com/thebtf/engram/internal/db/gorm/issue_store.go:215.2,215.30 1 0 +github.com/thebtf/engram/internal/db/gorm/issue_store.go:215.30,217.3 1 0 +github.com/thebtf/engram/internal/db/gorm/issue_store.go:218.2,218.12 1 0 +github.com/thebtf/engram/internal/db/gorm/issue_store.go:222.107,232.67 3 0 +github.com/thebtf/engram/internal/db/gorm/issue_store.go:232.67,235.89 2 0 +github.com/thebtf/engram/internal/db/gorm/issue_store.go:235.89,237.4 1 0 +github.com/thebtf/engram/internal/db/gorm/issue_store.go:238.3,238.17 1 0 +github.com/thebtf/engram/internal/db/gorm/issue_store.go:238.17,240.4 1 0 +github.com/thebtf/engram/internal/db/gorm/issue_store.go:241.3,241.51 1 0 +github.com/thebtf/engram/internal/db/gorm/issue_store.go:241.51,243.4 1 0 +github.com/thebtf/engram/internal/db/gorm/issue_store.go:244.3,244.85 1 0 +github.com/thebtf/engram/internal/db/gorm/issue_store.go:246.2,246.16 1 0 +github.com/thebtf/engram/internal/db/gorm/issue_store.go:246.16,248.3 1 0 +github.com/thebtf/engram/internal/db/gorm/issue_store.go:249.2,249.24 1 0 +github.com/thebtf/engram/internal/db/gorm/issue_store.go:254.89,255.19 1 0 +github.com/thebtf/engram/internal/db/gorm/issue_store.go:255.19,257.3 1 0 +github.com/thebtf/engram/internal/db/gorm/issue_store.go:259.2,269.25 3 0 +github.com/thebtf/engram/internal/db/gorm/issue_store.go:269.25,271.3 1 0 +github.com/thebtf/engram/internal/db/gorm/issue_store.go:272.2,272.33 1 0 +github.com/thebtf/engram/internal/db/gorm/issue_store.go:278.115,279.67 1 0 +github.com/thebtf/engram/internal/db/gorm/issue_store.go:279.67,282.52 2 0 +github.com/thebtf/engram/internal/db/gorm/issue_store.go:282.52,283.37 1 0 +github.com/thebtf/engram/internal/db/gorm/issue_store.go:283.37,285.5 1 0 +github.com/thebtf/engram/internal/db/gorm/issue_store.go:286.4,286.14 1 0 +github.com/thebtf/engram/internal/db/gorm/issue_store.go:288.3,288.33 1 0 +github.com/thebtf/engram/internal/db/gorm/issue_store.go:288.33,290.4 1 0 +github.com/thebtf/engram/internal/db/gorm/issue_store.go:293.3,299.26 3 0 +github.com/thebtf/engram/internal/db/gorm/issue_store.go:299.26,301.4 1 0 +github.com/thebtf/engram/internal/db/gorm/issue_store.go:302.3,302.31 1 0 +github.com/thebtf/engram/internal/db/gorm/issue_store.go:302.31,304.4 1 0 +github.com/thebtf/engram/internal/db/gorm/issue_store.go:307.3,307.20 1 0 +github.com/thebtf/engram/internal/db/gorm/issue_store.go:307.20,315.4 1 0 +github.com/thebtf/engram/internal/db/gorm/issue_store.go:317.3,317.13 1 0 +github.com/thebtf/engram/internal/db/gorm/issue_store.go:321.92,323.2 1 0 +github.com/thebtf/engram/internal/db/gorm/issue_store.go:333.109,334.67 1 0 +github.com/thebtf/engram/internal/db/gorm/issue_store.go:334.67,336.52 2 0 +github.com/thebtf/engram/internal/db/gorm/issue_store.go:336.52,337.37 1 0 +github.com/thebtf/engram/internal/db/gorm/issue_store.go:337.37,339.5 1 0 +github.com/thebtf/engram/internal/db/gorm/issue_store.go:340.4,340.14 1 0 +github.com/thebtf/engram/internal/db/gorm/issue_store.go:357.3,360.48 4 0 +github.com/thebtf/engram/internal/db/gorm/issue_store.go:360.48,362.27 2 0 +github.com/thebtf/engram/internal/db/gorm/issue_store.go:362.27,363.13 1 0 +github.com/thebtf/engram/internal/db/gorm/issue_store.go:365.4,365.36 1 0 +github.com/thebtf/engram/internal/db/gorm/issue_store.go:365.36,367.5 1 0 +github.com/thebtf/engram/internal/db/gorm/issue_store.go:368.4,368.40 1 0 +github.com/thebtf/engram/internal/db/gorm/issue_store.go:368.40,369.13 1 0 +github.com/thebtf/engram/internal/db/gorm/issue_store.go:371.4,372.76 2 0 +github.com/thebtf/engram/internal/db/gorm/issue_store.go:375.3,375.47 1 0 +github.com/thebtf/engram/internal/db/gorm/issue_store.go:375.47,380.30 3 0 +github.com/thebtf/engram/internal/db/gorm/issue_store.go:380.30,383.83 3 0 +github.com/thebtf/engram/internal/db/gorm/issue_store.go:383.83,385.11 2 0 +github.com/thebtf/engram/internal/db/gorm/issue_store.go:388.4,388.19 1 0 +github.com/thebtf/engram/internal/db/gorm/issue_store.go:388.19,395.5 1 0 +github.com/thebtf/engram/internal/db/gorm/issue_store.go:402.3,403.52 2 0 +github.com/thebtf/engram/internal/db/gorm/issue_store.go:403.52,405.4 1 0 +github.com/thebtf/engram/internal/db/gorm/issue_store.go:406.3,406.31 1 0 +github.com/thebtf/engram/internal/db/gorm/issue_store.go:406.31,408.4 1 0 +github.com/thebtf/engram/internal/db/gorm/issue_store.go:410.3,416.26 3 0 +github.com/thebtf/engram/internal/db/gorm/issue_store.go:416.26,418.4 1 0 +github.com/thebtf/engram/internal/db/gorm/issue_store.go:419.3,419.31 1 0 +github.com/thebtf/engram/internal/db/gorm/issue_store.go:419.31,421.4 1 0 +github.com/thebtf/engram/internal/db/gorm/issue_store.go:422.3,422.13 1 0 +github.com/thebtf/engram/internal/db/gorm/issue_store.go:426.73,427.26 1 0 +github.com/thebtf/engram/internal/db/gorm/issue_store.go:427.26,429.3 1 0 +github.com/thebtf/engram/internal/db/gorm/issue_store.go:430.2,431.39 2 0 +github.com/thebtf/engram/internal/db/gorm/issue_store.go:431.39,432.42 1 0 +github.com/thebtf/engram/internal/db/gorm/issue_store.go:432.42,434.12 2 0 +github.com/thebtf/engram/internal/db/gorm/issue_store.go:436.3,436.82 1 0 +github.com/thebtf/engram/internal/db/gorm/issue_store.go:438.2,438.46 1 0 +github.com/thebtf/engram/internal/db/gorm/issue_store.go:443.115,444.19 1 0 +github.com/thebtf/engram/internal/db/gorm/issue_store.go:444.19,446.3 1 0 +github.com/thebtf/engram/internal/db/gorm/issue_store.go:447.2,447.67 1 0 +github.com/thebtf/engram/internal/db/gorm/issue_store.go:447.67,454.26 3 0 +github.com/thebtf/engram/internal/db/gorm/issue_store.go:454.26,456.4 1 0 +github.com/thebtf/engram/internal/db/gorm/issue_store.go:457.3,457.31 1 0 +github.com/thebtf/engram/internal/db/gorm/issue_store.go:457.31,459.4 1 0 +github.com/thebtf/engram/internal/db/gorm/issue_store.go:460.3,466.11 1 0 +github.com/thebtf/engram/internal/db/gorm/issue_store.go:471.71,472.67 1 0 +github.com/thebtf/engram/internal/db/gorm/issue_store.go:472.67,473.84 1 0 +github.com/thebtf/engram/internal/db/gorm/issue_store.go:473.84,475.4 1 0 +github.com/thebtf/engram/internal/db/gorm/issue_store.go:476.3,477.26 2 0 +github.com/thebtf/engram/internal/db/gorm/issue_store.go:477.26,479.4 1 0 +github.com/thebtf/engram/internal/db/gorm/issue_store.go:480.3,480.31 1 0 +github.com/thebtf/engram/internal/db/gorm/issue_store.go:480.31,482.4 1 0 +github.com/thebtf/engram/internal/db/gorm/issue_store.go:483.3,483.13 1 0 +github.com/thebtf/engram/internal/db/gorm/issue_store.go:489.135,493.17 2 0 +github.com/thebtf/engram/internal/db/gorm/issue_store.go:493.17,495.3 1 0 +github.com/thebtf/engram/internal/db/gorm/issue_store.go:496.2,496.16 1 0 +github.com/thebtf/engram/internal/db/gorm/issue_store.go:496.16,498.3 1 0 +github.com/thebtf/engram/internal/db/gorm/issue_store.go:499.2,499.20 1 0 +github.com/thebtf/engram/internal/db/gorm/issue_store.go:499.20,501.33 2 0 +github.com/thebtf/engram/internal/db/gorm/issue_store.go:501.33,503.4 1 0 +github.com/thebtf/engram/internal/db/gorm/issue_store.go:504.3,504.33 1 0 +github.com/thebtf/engram/internal/db/gorm/issue_store.go:506.2,506.21 1 0 +github.com/thebtf/engram/internal/db/gorm/issue_store.go:506.21,507.34 1 0 +github.com/thebtf/engram/internal/db/gorm/issue_store.go:507.34,509.4 1 0 +github.com/thebtf/engram/internal/db/gorm/issue_store.go:510.3,510.30 1 0 +github.com/thebtf/engram/internal/db/gorm/issue_store.go:512.2,512.19 1 0 +github.com/thebtf/engram/internal/db/gorm/issue_store.go:512.19,514.3 1 0 +github.com/thebtf/engram/internal/db/gorm/issue_store.go:516.2,517.25 2 0 +github.com/thebtf/engram/internal/db/gorm/issue_store.go:517.25,519.3 1 0 +github.com/thebtf/engram/internal/db/gorm/issue_store.go:520.2,520.30 1 0 +github.com/thebtf/engram/internal/db/gorm/issue_store.go:520.30,522.3 1 0 +github.com/thebtf/engram/internal/db/gorm/issue_store.go:523.2,523.12 1 0 +github.com/thebtf/engram/internal/db/gorm/issue_store.go:528.80,539.16 3 0 +github.com/thebtf/engram/internal/db/gorm/issue_store.go:539.16,541.3 1 0 +github.com/thebtf/engram/internal/db/gorm/issue_store.go:542.2,542.22 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:34.48,36.2 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:91.46,92.16 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:92.16,94.3 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:95.2,95.32 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:95.32,97.3 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:98.2,98.14 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:101.51,103.32 2 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:103.32,105.3 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:106.2,106.17 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:106.17,108.3 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:109.2,109.14 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:112.54,114.2 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:116.58,117.68 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:117.68,118.27 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:118.27,120.4 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:121.3,121.11 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:123.2,123.18 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:123.18,125.28 2 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:125.28,127.4 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:129.2,129.33 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:132.47,134.27 2 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:134.27,136.16 2 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:136.16,137.12 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:139.3,139.31 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:141.2,141.15 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:144.44,145.17 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:145.17,147.3 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:148.2,150.15 3 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:153.50,155.16 2 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:155.16,157.3 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:158.2,158.13 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:161.77,163.22 2 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:163.22,171.3 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:172.2,172.15 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:175.74,176.16 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:176.16,178.3 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:179.2,179.97 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:179.97,181.3 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:182.2,182.155 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:182.155,184.3 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:185.2,185.114 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:185.114,187.3 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:188.2,188.84 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:188.84,190.3 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:191.2,191.67 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:191.67,193.3 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:194.2,194.23 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:194.23,196.31 2 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:196.31,197.20 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:197.20,199.10 2 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:202.3,202.15 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:202.15,204.4 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:206.2,206.13 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:209.56,210.16 1 32 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:210.16,212.3 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:213.2,213.23 1 32 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:213.23,215.3 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:216.2,216.23 1 32 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:216.23,218.3 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:219.2,219.62 1 32 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:219.62,221.3 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:222.2,222.12 1 32 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:225.65,230.17 4 32 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:230.17,231.17 1 32 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:231.17,233.4 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:234.3,234.23 1 32 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:234.23,236.4 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:237.3,237.13 1 32 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:240.2,240.58 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:240.58,242.3 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:243.2,243.68 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:243.68,245.3 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:246.2,246.12 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:249.56,250.14 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:251.35,252.14 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:253.10,254.15 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:258.91,273.21 2 3 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:273.21,275.3 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:276.2,276.22 1 3 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:276.22,278.3 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:279.2,279.28 1 3 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:279.28,281.3 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:282.2,282.29 1 3 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:282.29,284.3 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:285.2,285.22 1 3 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:285.22,287.21 1 3 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:287.21,289.4 1 3 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:290.3,290.30 1 3 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:290.30,292.4 1 3 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:293.3,293.30 1 3 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:293.30,295.4 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:297.2,297.12 1 3 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:309.57,310.28 1 3 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:310.28,312.3 1 3 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:312.8,314.30 2 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:314.30,315.27 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:315.27,317.10 2 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:321.2,322.33 2 3 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:322.33,324.3 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:327.65,331.17 3 3 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:331.17,333.3 1 3 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:335.2,336.16 2 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:336.16,338.3 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:339.2,340.22 2 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:340.22,344.3 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:346.2,348.34 3 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:351.45,353.29 2 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:353.29,356.3 2 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:357.2,358.48 2 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:361.53,363.16 2 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:363.16,365.3 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:366.2,366.30 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:376.95,377.53 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:377.53,379.3 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:381.2,392.64 5 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:392.64,394.3 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:395.2,395.35 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:406.108,407.53 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:407.53,409.3 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:411.2,422.64 5 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:422.64,424.3 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:425.2,425.35 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:434.112,439.62 5 3 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:439.62,441.3 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:442.2,442.35 1 3 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:454.33,455.53 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:455.53,457.3 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:458.2,458.27 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:458.27,460.3 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:461.2,461.21 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:461.21,463.3 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:465.2,468.67 4 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:468.67,469.83 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:469.83,471.4 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:473.3,474.17 2 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:474.17,476.4 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:477.3,482.17 3 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:482.17,485.4 2 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:486.3,486.46 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:486.46,488.4 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:490.3,495.46 4 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:495.46,497.4 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:498.3,499.13 2 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:501.2,501.16 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:501.16,503.3 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:504.2,504.32 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:509.82,510.13 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:510.13,512.3 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:513.2,517.16 3 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:517.16,519.3 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:520.2,520.36 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:530.102,532.16 2 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:532.16,534.3 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:535.2,535.20 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:606.120,607.19 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:607.19,609.3 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:611.2,615.16 3 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:615.16,617.3 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:618.2,618.20 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:628.124,630.53 2 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:630.53,632.3 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:634.2,635.57 2 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:635.57,637.3 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:639.2,640.16 2 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:640.16,641.20 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:641.20,643.4 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:644.3,644.85 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:646.2,646.20 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:649.47,651.2 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:653.70,655.46 2 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:655.46,657.3 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:658.2,658.38 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:661.54,665.2 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:667.77,675.16 4 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:675.16,677.3 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:678.2,679.22 2 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:679.22,681.3 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:682.2,682.20 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:685.68,686.28 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:686.28,688.3 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:688.8,690.3 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:691.2,691.28 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:691.28,693.3 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:694.2,694.71 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:694.71,696.3 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:697.2,697.38 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:697.38,700.48 3 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:700.48,702.15 2 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:702.15,703.13 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:705.4,706.66 2 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:708.3,708.21 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:708.21,710.4 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:712.2,712.23 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:712.23,714.3 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:715.2,715.66 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:715.66,717.3 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:718.2,718.85 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:718.85,720.3 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:721.2,721.77 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:721.77,723.3 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:724.2,724.60 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:724.60,726.3 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:727.2,727.10 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:730.46,735.16 2 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:735.16,737.3 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:738.2,738.32 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:738.32,740.3 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:741.2,741.14 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:744.48,745.16 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:745.16,747.3 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:748.2,748.15 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:751.41,754.2 2 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:767.124,768.19 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:768.19,770.3 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:771.2,771.16 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:771.16,773.3 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:774.2,774.16 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:774.16,776.3 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:778.2,799.16 3 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:799.16,801.3 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:802.2,803.22 2 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:803.22,805.3 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:806.2,806.20 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:812.114,813.19 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:813.19,815.3 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:816.2,816.16 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:816.16,818.3 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:819.2,826.22 4 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:826.22,829.3 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:831.2,834.16 2 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:834.16,836.3 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:837.2,838.22 2 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:838.22,840.3 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:841.2,841.20 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:847.95,848.16 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:848.16,850.3 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:851.2,851.17 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:851.17,853.3 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:854.2,854.23 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:854.23,856.3 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:858.2,874.25 4 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:874.25,876.3 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:877.2,877.30 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:877.30,879.3 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:882.2,882.27 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:887.67,888.13 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:888.13,890.3 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:891.2,899.25 3 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:899.25,901.3 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:902.2,902.30 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:902.30,904.3 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:905.2,905.12 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:913.99,914.13 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:914.13,916.3 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:918.2,919.107 2 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:919.107,921.3 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:922.2,932.25 4 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:932.25,934.3 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:935.2,935.30 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:935.30,937.3 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:938.2,938.27 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:950.87,951.18 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:951.18,953.3 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:954.2,954.16 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:954.16,956.3 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:957.2,965.25 3 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:965.25,967.3 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:970.2,970.30 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:970.30,972.3 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:973.2,973.12 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:978.105,979.13 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:979.13,981.3 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:982.2,982.19 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:982.19,984.3 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:985.2,989.25 3 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:989.25,991.3 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:992.2,992.30 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:992.30,994.3 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:995.2,995.12 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:999.84,1003.2 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1007.83,1012.2 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1022.86,1023.19 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1023.19,1025.3 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1026.2,1029.9 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1034.85,1039.2 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1044.116,1058.16 3 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1058.16,1060.3 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1061.2,1061.74 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1061.74,1063.3 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1064.2,1065.16 2 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1065.16,1067.3 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1068.2,1068.18 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1082.113,1094.2 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1098.97,1103.2 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1106.97,1111.2 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1114.51,1161.51 2 3 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1161.51,1165.3 3 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1166.2,1166.10 1 3 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1174.128,1175.19 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1175.19,1177.3 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1178.2,1178.23 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1178.23,1180.3 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1181.2,1181.15 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1181.15,1183.3 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1185.2,1186.16 2 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1186.16,1188.3 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1189.2,1195.16 3 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1195.16,1197.3 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1198.2,1199.22 2 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1199.22,1201.3 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1202.2,1202.20 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1208.143,1210.19 2 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1210.19,1212.3 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1213.2,1214.18 2 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1214.18,1216.3 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1217.2,1227.16 4 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1227.16,1229.3 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1230.2,1230.17 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1236.136,1238.19 2 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1238.19,1240.3 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1241.2,1242.17 2 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1242.17,1244.3 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1245.2,1250.35 6 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1250.35,1252.65 2 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1252.65,1254.63 2 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1254.63,1256.5 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1257.4,1257.22 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1257.22,1258.10 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1260.4,1261.18 2 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1261.18,1263.5 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1264.4,1264.23 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1264.23,1265.10 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1267.4,1267.30 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1267.30,1268.45 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1268.45,1269.14 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1271.5,1273.30 3 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1273.30,1274.11 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1277.4,1277.30 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1277.30,1278.10 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1280.4,1280.24 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1282.3,1282.46 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1282.46,1283.9 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1286.2,1286.17 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1291.120,1292.19 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1292.19,1294.3 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1295.2,1296.19 2 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1296.19,1298.3 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1299.2,1314.16 3 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1314.16,1316.3 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1317.2,1318.52 2 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1318.52,1320.3 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1321.2,1322.25 2 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1322.25,1323.30 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1323.30,1325.4 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1327.2,1327.20 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1332.105,1334.19 2 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1334.19,1336.3 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1337.2,1347.33 5 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1347.33,1349.16 2 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1349.16,1350.12 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1352.3,1354.17 3 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1354.17,1356.4 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1357.3,1357.44 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1360.2,1363.18 4 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1363.18,1365.17 2 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1365.17,1367.4 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1368.3,1368.44 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1371.2,1371.35 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1371.35,1373.3 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1374.2,1374.42 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1374.42,1376.3 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1378.2,1379.26 2 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1379.26,1381.3 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1382.2,1383.16 2 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1383.16,1385.3 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1386.2,1390.33 5 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1390.33,1402.3 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1403.2,1403.18 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1406.52,1408.25 2 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1408.25,1409.15 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1409.15,1410.12 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1412.3,1413.18 2 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1415.2,1415.12 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1418.44,1420.25 2 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1420.25,1422.3 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1423.2,1423.12 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1426.64,1428.31 2 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1428.31,1430.3 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1431.2,1431.31 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1431.31,1433.3 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1434.2,1434.15 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1437.58,1438.12 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1438.12,1440.3 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1441.2,1448.39 4 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1448.39,1449.51 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1449.51,1451.4 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1453.2,1453.31 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1453.31,1456.3 2 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1457.2,1457.31 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1457.31,1460.3 2 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1461.2,1462.32 2 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1462.32,1464.3 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1465.2,1465.41 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1465.41,1466.41 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1466.41,1468.4 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1469.3,1469.39 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1469.39,1471.4 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1472.3,1472.37 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1474.2,1475.24 2 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1475.24,1477.3 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1478.2,1478.16 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1481.69,1482.9 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1483.31,1484.26 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1485.18,1486.22 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1487.17,1488.15 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1489.10,1490.25 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1502.46,1506.18 4 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1506.18,1507.25 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1507.25,1509.4 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1510.3,1515.32 3 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1516.27,1517.10 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1519.3,1519.30 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1521.2,1521.26 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1521.26,1522.10 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1523.17,1525.24 2 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1526.71,1527.11 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1528.11,1529.24 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1532.2,1533.14 2 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1541.43,1542.26 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1542.26,1543.46 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1543.46,1545.4 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1547.2,1547.14 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1557.114,1558.19 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1558.19,1560.3 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1561.2,1561.17 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1561.17,1563.3 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1564.2,1566.35 3 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1566.35,1568.17 2 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1568.17,1569.13 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1569.13,1571.5 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1572.4,1572.68 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1574.3,1574.44 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1574.44,1576.4 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1578.2,1578.32 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1581.45,1582.16 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1582.16,1584.3 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1585.2,1585.17 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1585.17,1587.3 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1588.2,1588.14 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1591.52,1594.48 3 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1594.48,1596.23 2 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1596.23,1598.4 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1600.2,1600.17 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1603.130,1604.19 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1604.19,1606.3 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1607.2,1607.17 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1607.17,1609.3 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1610.2,1611.16 2 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1611.16,1613.3 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1614.2,1636.16 4 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1636.16,1638.3 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1639.2,1640.22 2 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1640.22,1642.3 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1643.2,1643.20 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1650.108,1651.19 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1651.19,1653.3 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1654.2,1654.19 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1654.19,1656.3 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1659.2,1665.16 3 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1665.16,1667.3 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1669.2,1670.22 2 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1670.22,1673.3 2 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1674.2,1675.25 2 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1675.25,1676.28 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1676.28,1678.4 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1680.2,1680.20 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1686.91,1692.16 3 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1692.16,1694.3 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1695.2,1695.19 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1700.71,1707.16 3 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1707.16,1709.3 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1710.2,1710.19 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1716.112,1718.19 2 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1718.19,1720.3 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1721.2,1721.15 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1721.15,1723.3 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1725.2,1727.25 3 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1727.25,1728.14 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1728.14,1729.12 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1731.3,1731.36 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1731.36,1732.12 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1734.3,1735.38 2 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1737.2,1737.45 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1737.45,1737.85 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1738.2,1738.26 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1738.26,1740.3 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1742.2,1748.33 2 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1748.33,1750.3 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1751.2,1751.22 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1751.22,1753.3 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1754.2,1754.22 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1757.65,1801.2 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1812.81,1813.16 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1813.16,1815.3 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1816.2,1816.17 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1816.17,1818.3 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1819.2,1824.25 2 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1824.25,1826.3 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1827.2,1827.30 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1827.30,1829.3 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1830.2,1830.12 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1836.96,1837.16 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1837.16,1839.3 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1840.2,1840.17 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1840.17,1842.3 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1843.2,1848.25 2 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1848.25,1850.3 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1851.2,1851.30 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1851.30,1853.3 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1854.2,1854.12 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1862.86,1863.13 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1863.13,1865.3 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1866.2,1869.25 2 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1869.25,1871.3 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1873.2,1873.12 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1878.40,1880.2 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1883.111,1884.20 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1884.20,1886.3 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1887.2,1894.16 3 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1894.16,1896.3 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1897.2,1898.22 2 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1898.22,1900.3 1 0 +github.com/thebtf/engram/internal/db/gorm/memory_store.go:1901.2,1901.20 1 0 +github.com/thebtf/engram/internal/db/gorm/migration_access_milestone.go:14.58,17.39 1 3 +github.com/thebtf/engram/internal/db/gorm/migration_access_milestone.go:17.39,45.31 2 1 +github.com/thebtf/engram/internal/db/gorm/migration_access_milestone.go:45.31,46.47 1 16 +github.com/thebtf/engram/internal/db/gorm/migration_access_milestone.go:46.47,48.6 1 0 +github.com/thebtf/engram/internal/db/gorm/migration_access_milestone.go:50.4,50.14 1 1 +github.com/thebtf/engram/internal/db/gorm/migration_access_milestone.go:52.40,55.4 1 0 +github.com/thebtf/engram/internal/db/gorm/migration_api_token_principals.go:10.61,13.36 1 3 +github.com/thebtf/engram/internal/db/gorm/migration_api_token_principals.go:13.36,35.30 2 1 +github.com/thebtf/engram/internal/db/gorm/migration_api_token_principals.go:35.30,36.47 1 4 +github.com/thebtf/engram/internal/db/gorm/migration_api_token_principals.go:36.47,38.6 1 0 +github.com/thebtf/engram/internal/db/gorm/migration_api_token_principals.go:40.4,40.14 1 1 +github.com/thebtf/engram/internal/db/gorm/migration_api_token_principals.go:42.37,52.30 2 0 +github.com/thebtf/engram/internal/db/gorm/migration_api_token_principals.go:52.30,53.47 1 0 +github.com/thebtf/engram/internal/db/gorm/migration_api_token_principals.go:53.47,55.6 1 0 +github.com/thebtf/engram/internal/db/gorm/migration_api_token_principals.go:57.4,57.14 1 0 +github.com/thebtf/engram/internal/db/gorm/migration_behavioral_rules_enabled.go:10.65,13.36 1 3 +github.com/thebtf/engram/internal/db/gorm/migration_behavioral_rules_enabled.go:13.36,14.135 1 1 +github.com/thebtf/engram/internal/db/gorm/migration_behavioral_rules_enabled.go:14.135,16.5 1 0 +github.com/thebtf/engram/internal/db/gorm/migration_behavioral_rules_enabled.go:17.4,17.14 1 1 +github.com/thebtf/engram/internal/db/gorm/migration_behavioral_rules_enabled.go:19.37,21.4 1 0 +github.com/thebtf/engram/internal/db/gorm/migration_books.go:16.52,19.36 1 3 +github.com/thebtf/engram/internal/db/gorm/migration_books.go:19.36,38.30 2 1 +github.com/thebtf/engram/internal/db/gorm/migration_books.go:38.30,39.47 1 3 +github.com/thebtf/engram/internal/db/gorm/migration_books.go:39.47,41.6 1 0 +github.com/thebtf/engram/internal/db/gorm/migration_books.go:43.4,43.14 1 1 +github.com/thebtf/engram/internal/db/gorm/migration_books.go:45.37,47.4 1 0 +github.com/thebtf/engram/internal/db/gorm/migration_memory_domain_owners.go:10.61,13.39 1 3 +github.com/thebtf/engram/internal/db/gorm/migration_memory_domain_owners.go:13.39,74.30 2 1 +github.com/thebtf/engram/internal/db/gorm/migration_memory_domain_owners.go:74.30,75.47 1 6 +github.com/thebtf/engram/internal/db/gorm/migration_memory_domain_owners.go:75.47,77.6 1 0 +github.com/thebtf/engram/internal/db/gorm/migration_memory_domain_owners.go:79.4,79.14 1 1 +github.com/thebtf/engram/internal/db/gorm/migration_memory_domain_owners.go:81.40,85.4 1 0 +github.com/thebtf/engram/internal/db/gorm/migration_memory_principals.go:10.59,13.36 1 3 +github.com/thebtf/engram/internal/db/gorm/migration_memory_principals.go:13.36,57.30 2 1 +github.com/thebtf/engram/internal/db/gorm/migration_memory_principals.go:57.30,58.47 1 9 +github.com/thebtf/engram/internal/db/gorm/migration_memory_principals.go:58.47,60.6 1 0 +github.com/thebtf/engram/internal/db/gorm/migration_memory_principals.go:62.4,62.14 1 1 +github.com/thebtf/engram/internal/db/gorm/migration_memory_principals.go:64.37,82.30 2 0 +github.com/thebtf/engram/internal/db/gorm/migration_memory_principals.go:82.30,83.47 1 0 +github.com/thebtf/engram/internal/db/gorm/migration_memory_principals.go:83.47,85.6 1 0 +github.com/thebtf/engram/internal/db/gorm/migration_memory_principals.go:87.4,87.14 1 0 +github.com/thebtf/engram/internal/db/gorm/migration_rule_arbiter.go:11.64,14.36 1 3 +github.com/thebtf/engram/internal/db/gorm/migration_rule_arbiter.go:14.36,105.27 2 1 +github.com/thebtf/engram/internal/db/gorm/migration_rule_arbiter.go:105.27,106.44 1 24 +github.com/thebtf/engram/internal/db/gorm/migration_rule_arbiter.go:106.44,108.6 1 0 +github.com/thebtf/engram/internal/db/gorm/migration_rule_arbiter.go:110.4,110.14 1 1 +github.com/thebtf/engram/internal/db/gorm/migration_rule_arbiter.go:112.37,131.27 2 0 +github.com/thebtf/engram/internal/db/gorm/migration_rule_arbiter.go:131.27,132.44 1 0 +github.com/thebtf/engram/internal/db/gorm/migration_rule_arbiter.go:132.44,134.6 1 0 +github.com/thebtf/engram/internal/db/gorm/migration_rule_arbiter.go:136.4,136.14 1 0 +github.com/thebtf/engram/internal/db/gorm/migration_rule_governance.go:11.57,14.36 1 3 +github.com/thebtf/engram/internal/db/gorm/migration_rule_governance.go:14.36,180.27 2 1 +github.com/thebtf/engram/internal/db/gorm/migration_rule_governance.go:180.27,181.44 1 18 +github.com/thebtf/engram/internal/db/gorm/migration_rule_governance.go:181.44,183.6 1 0 +github.com/thebtf/engram/internal/db/gorm/migration_rule_governance.go:185.4,185.14 1 1 +github.com/thebtf/engram/internal/db/gorm/migration_rule_governance.go:187.37,195.27 2 0 +github.com/thebtf/engram/internal/db/gorm/migration_rule_governance.go:195.27,196.44 1 0 +github.com/thebtf/engram/internal/db/gorm/migration_rule_governance.go:196.44,198.6 1 0 +github.com/thebtf/engram/internal/db/gorm/migration_rule_governance.go:200.4,200.14 1 0 +github.com/thebtf/engram/internal/db/gorm/migration_rule_governance_snapshot_statuses.go:10.73,13.36 1 3 +github.com/thebtf/engram/internal/db/gorm/migration_rule_governance_snapshot_statuses.go:13.36,21.30 2 1 +github.com/thebtf/engram/internal/db/gorm/migration_rule_governance_snapshot_statuses.go:21.30,22.47 1 2 +github.com/thebtf/engram/internal/db/gorm/migration_rule_governance_snapshot_statuses.go:22.47,24.6 1 0 +github.com/thebtf/engram/internal/db/gorm/migration_rule_governance_snapshot_statuses.go:26.4,26.14 1 1 +github.com/thebtf/engram/internal/db/gorm/migration_rule_governance_snapshot_statuses.go:28.37,39.30 2 0 +github.com/thebtf/engram/internal/db/gorm/migration_rule_governance_snapshot_statuses.go:39.30,40.47 1 0 +github.com/thebtf/engram/internal/db/gorm/migration_rule_governance_snapshot_statuses.go:40.47,42.6 1 0 +github.com/thebtf/engram/internal/db/gorm/migration_rule_governance_snapshot_statuses.go:44.4,44.14 1 0 +github.com/thebtf/engram/internal/db/gorm/migration_state.go:32.81,33.29 1 0 +github.com/thebtf/engram/internal/db/gorm/migration_state.go:33.29,35.3 1 0 +github.com/thebtf/engram/internal/db/gorm/migration_state.go:37.2,41.32 2 0 +github.com/thebtf/engram/internal/db/gorm/migration_state.go:41.32,43.3 1 0 +github.com/thebtf/engram/internal/db/gorm/migration_state.go:45.2,47.18 3 0 +github.com/thebtf/engram/internal/db/gorm/migration_state.go:47.18,49.3 1 0 +github.com/thebtf/engram/internal/db/gorm/migration_state.go:51.2,59.8 1 0 +github.com/thebtf/engram/internal/db/gorm/migration_state.go:62.53,64.48 2 0 +github.com/thebtf/engram/internal/db/gorm/migration_state.go:64.48,67.41 3 0 +github.com/thebtf/engram/internal/db/gorm/migration_state.go:67.41,69.4 1 0 +github.com/thebtf/engram/internal/db/gorm/migration_state.go:70.3,70.24 1 0 +github.com/thebtf/engram/internal/db/gorm/migration_state.go:70.24,72.4 1 0 +github.com/thebtf/engram/internal/db/gorm/migration_state.go:73.3,73.33 1 0 +github.com/thebtf/engram/internal/db/gorm/migration_state.go:75.2,75.16 1 0 +github.com/thebtf/engram/internal/db/gorm/migration_state.go:78.47,80.25 2 0 +github.com/thebtf/engram/internal/db/gorm/migration_state.go:80.25,82.3 1 0 +github.com/thebtf/engram/internal/db/gorm/migration_state.go:83.2,84.26 2 0 +github.com/thebtf/engram/internal/db/gorm/migration_temporal_truth.go:13.63,16.39 1 3 +github.com/thebtf/engram/internal/db/gorm/migration_temporal_truth.go:16.39,44.31 2 1 +github.com/thebtf/engram/internal/db/gorm/migration_temporal_truth.go:44.31,45.47 1 4 +github.com/thebtf/engram/internal/db/gorm/migration_temporal_truth.go:45.47,47.6 1 0 +github.com/thebtf/engram/internal/db/gorm/migration_temporal_truth.go:49.4,49.14 1 1 +github.com/thebtf/engram/internal/db/gorm/migration_temporal_truth.go:51.40,55.4 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:16.39,19.79 1 3 +github.com/thebtf/engram/internal/db/gorm/migrations.go:19.79,21.3 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:23.2,35.37 1 3 +github.com/thebtf/engram/internal/db/gorm/migrations.go:35.37,36.80 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:36.80,38.6 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:39.5,57.28 2 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:57.28,58.45 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:58.45,60.7 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:62.5,62.15 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:64.38,66.5 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:74.37,88.28 2 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:88.28,89.45 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:89.45,91.7 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:93.5,93.15 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:95.38,97.5 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:104.37,114.28 2 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:114.28,115.45 1 2 +github.com/thebtf/engram/internal/db/gorm/migrations.go:115.45,117.7 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:119.5,119.15 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:121.38,126.28 2 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:126.28,127.45 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:127.45,128.15 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:131.5,131.15 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:138.37,152.28 2 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:152.28,153.45 1 2 +github.com/thebtf/engram/internal/db/gorm/migrations.go:153.45,155.7 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:157.5,157.15 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:159.38,164.28 2 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:164.28,165.45 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:165.45,166.15 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:169.5,169.15 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:176.37,193.28 2 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:193.28,194.45 1 2 +github.com/thebtf/engram/internal/db/gorm/migrations.go:194.45,196.7 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:198.5,198.15 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:200.38,205.28 2 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:205.28,206.45 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:206.45,207.15 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:210.5,210.15 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:219.37,236.28 2 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:236.28,237.45 1 2 +github.com/thebtf/engram/internal/db/gorm/migrations.go:237.45,239.7 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:241.5,241.15 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:243.38,245.5 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:259.37,265.27 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:265.27,267.6 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:270.5,277.84 2 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:277.84,279.6 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:280.5,280.15 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:282.38,284.5 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:295.37,315.29 2 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:315.29,316.45 1 4 +github.com/thebtf/engram/internal/db/gorm/migrations.go:316.45,318.7 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:320.5,320.15 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:322.38,324.5 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:330.37,347.5 2 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:348.38,350.5 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:356.37,370.28 2 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:370.28,371.45 1 2 +github.com/thebtf/engram/internal/db/gorm/migrations.go:371.45,373.7 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:375.5,375.15 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:377.38,382.28 2 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:382.28,383.45 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:383.45,384.15 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:387.5,387.15 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:416.37,440.29 2 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:440.29,441.45 1 7 +github.com/thebtf/engram/internal/db/gorm/migrations.go:441.45,443.7 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:445.5,445.15 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:447.38,449.5 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:456.37,482.28 2 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:482.28,483.45 1 5 +github.com/thebtf/engram/internal/db/gorm/migrations.go:483.45,485.15 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:488.5,488.15 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:490.38,498.28 2 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:498.28,499.45 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:499.45,500.15 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:503.5,503.15 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:510.37,523.28 2 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:523.28,524.45 1 5 +github.com/thebtf/engram/internal/db/gorm/migrations.go:524.45,526.15 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:529.5,529.15 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:531.38,538.28 2 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:538.28,540.6 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:541.5,541.15 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:548.37,577.28 2 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:577.28,578.45 1 7 +github.com/thebtf/engram/internal/db/gorm/migrations.go:578.45,580.15 1 3 +github.com/thebtf/engram/internal/db/gorm/migrations.go:583.5,583.15 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:585.38,595.28 2 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:595.28,597.6 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:598.5,598.15 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:605.37,627.28 2 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:627.28,628.45 1 4 +github.com/thebtf/engram/internal/db/gorm/migrations.go:628.45,630.15 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:633.5,633.15 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:635.38,642.28 2 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:642.28,644.6 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:645.5,645.15 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:652.37,669.28 2 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:669.28,670.45 1 3 +github.com/thebtf/engram/internal/db/gorm/migrations.go:670.45,672.15 1 2 +github.com/thebtf/engram/internal/db/gorm/migrations.go:675.5,675.15 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:677.38,683.28 2 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:683.28,685.6 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:686.5,686.15 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:693.37,742.28 2 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:742.28,743.45 1 10 +github.com/thebtf/engram/internal/db/gorm/migrations.go:743.45,745.7 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:747.5,747.15 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:749.38,750.74 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:750.74,751.84 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:751.84,753.7 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:755.5,755.15 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:761.37,787.28 2 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:787.28,788.45 1 6 +github.com/thebtf/engram/internal/db/gorm/migrations.go:788.45,790.7 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:792.5,792.15 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:794.38,796.5 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:801.37,823.28 2 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:823.28,824.45 1 7 +github.com/thebtf/engram/internal/db/gorm/migrations.go:824.45,826.7 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:828.5,828.15 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:830.38,839.28 2 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:839.28,841.6 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:842.5,842.15 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:851.37,853.5 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:854.38,856.5 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:861.37,872.28 2 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:872.28,873.45 1 4 +github.com/thebtf/engram/internal/db/gorm/migrations.go:873.45,875.7 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:877.5,877.15 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:879.38,880.88 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:880.88,882.6 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:883.5,883.75 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:889.37,908.28 2 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:908.28,909.45 1 3 +github.com/thebtf/engram/internal/db/gorm/migrations.go:909.45,911.7 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:913.5,913.15 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:915.38,917.5 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:922.37,930.28 2 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:930.28,931.45 1 4 +github.com/thebtf/engram/internal/db/gorm/migrations.go:931.45,933.7 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:935.5,935.15 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:937.38,944.28 2 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:944.28,945.45 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:945.45,947.7 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:949.5,949.15 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:956.37,971.28 2 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:971.28,972.45 1 2 +github.com/thebtf/engram/internal/db/gorm/migrations.go:972.45,974.7 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:976.5,976.15 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:978.38,980.5 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:985.37,996.28 2 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:996.28,997.45 1 4 +github.com/thebtf/engram/internal/db/gorm/migrations.go:997.45,999.7 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1001.5,1001.15 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1003.38,1008.28 2 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1008.28,1009.45 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1009.45,1011.7 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1013.5,1013.15 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1019.37,1030.28 2 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1030.28,1031.45 1 2 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1031.45,1033.7 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1035.5,1035.15 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1037.38,1039.5 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1045.37,1056.28 2 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1056.28,1057.45 1 3 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1057.45,1059.7 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1061.5,1061.15 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1063.38,1068.28 2 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1068.28,1070.6 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1071.5,1071.15 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1077.37,1088.28 2 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1088.28,1089.45 1 2 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1089.45,1091.7 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1093.5,1093.15 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1095.38,1097.5 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1102.37,1104.5 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1105.38,1107.5 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1114.37,1133.28 2 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1133.28,1134.45 1 3 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1134.45,1136.7 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1138.5,1138.15 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1140.38,1142.5 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1147.37,1155.28 2 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1155.28,1156.45 1 4 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1156.45,1158.7 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1160.5,1160.15 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1162.38,1173.28 2 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1173.28,1174.45 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1174.45,1176.7 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1178.5,1178.15 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1184.37,1194.28 2 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1194.28,1195.45 1 4 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1195.45,1197.7 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1199.5,1199.15 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1201.38,1210.28 2 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1210.28,1211.45 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1211.45,1213.7 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1215.5,1215.15 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1220.37,1231.28 2 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1231.28,1232.45 1 3 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1232.45,1234.7 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1236.5,1236.15 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1238.38,1240.5 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1244.37,1251.28 2 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1251.28,1252.45 1 2 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1252.45,1254.7 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1256.5,1256.15 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1258.38,1263.28 2 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1263.28,1264.45 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1264.45,1266.7 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1268.5,1268.15 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1276.37,1278.5 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1279.38,1281.5 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1287.37,1304.28 2 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1304.28,1305.45 1 2 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1305.45,1307.7 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1309.5,1309.15 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1311.38,1313.5 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1318.37,1333.28 2 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1333.28,1334.45 1 3 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1334.45,1336.7 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1338.5,1338.15 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1340.38,1342.5 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1347.37,1358.28 2 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1358.28,1359.45 1 2 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1359.45,1361.7 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1363.5,1363.15 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1365.38,1367.5 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1373.37,1379.28 2 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1379.28,1380.45 1 3 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1380.45,1382.7 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1384.5,1384.15 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1386.38,1392.28 2 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1392.28,1393.45 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1393.45,1395.7 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1397.5,1397.15 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1405.37,1436.45 3 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1436.45,1438.29 2 26 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1438.29,1440.15 2 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1442.6,1442.41 1 26 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1447.5,1456.34 3 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1456.34,1459.6 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1459.11,1461.6 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1463.5,1467.15 2 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1469.38,1472.5 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1477.37,1479.28 2 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1479.28,1482.6 2 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1483.5,1484.15 2 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1486.38,1488.5 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1495.37,1497.28 2 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1497.28,1500.6 2 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1501.5,1502.15 2 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1504.38,1506.5 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1514.37,1584.45 3 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1584.45,1586.29 2 46 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1586.29,1588.15 2 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1590.6,1590.41 1 46 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1593.5,1594.15 2 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1596.38,1598.5 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1603.37,1605.5 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1606.38,1608.5 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1613.37,1615.5 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1616.38,1618.5 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1623.37,1631.26 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1631.26,1633.6 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1634.5,1634.137 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1634.137,1636.6 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1637.5,1637.123 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1637.123,1639.6 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1640.5,1640.113 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1642.38,1644.5 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1649.37,1651.5 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1652.38,1655.5 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1662.37,1664.147 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1664.147,1666.6 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1667.5,1667.159 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1667.159,1669.6 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1670.5,1670.151 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1670.151,1672.6 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1674.5,1674.138 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1674.138,1676.6 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1677.5,1677.150 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1677.150,1679.6 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1680.5,1680.142 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1680.142,1682.6 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1684.5,1684.172 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1686.38,1696.5 8 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1701.37,1708.5 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1709.38,1711.5 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1719.37,1725.5 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1726.38,1728.5 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1736.37,1749.26 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1749.26,1751.6 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1752.5,1752.161 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1752.161,1754.6 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1755.5,1755.138 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1755.138,1757.6 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1758.5,1767.26 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1767.26,1769.6 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1770.5,1770.136 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1772.38,1773.93 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1773.93,1775.6 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1776.5,1776.69 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1782.37,1784.5 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1785.38,1787.5 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1796.37,1798.5 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1799.38,1801.5 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1807.37,1808.132 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1808.132,1810.6 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1811.5,1811.113 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1811.113,1813.6 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1814.5,1814.104 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1816.38,1820.5 3 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1827.37,1829.5 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1830.38,1832.5 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1839.37,1854.5 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1855.38,1857.5 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1863.37,1864.107 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1864.107,1866.6 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1867.5,1867.114 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1867.114,1869.6 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1870.5,1870.126 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1870.126,1872.6 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1873.5,1873.102 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1875.38,1880.5 4 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1886.37,1893.26 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1893.26,1895.6 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1896.5,1896.137 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1896.137,1898.6 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1899.5,1899.121 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1901.38,1903.5 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1909.37,1910.129 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1910.129,1912.6 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1913.5,1913.133 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1913.133,1915.6 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1916.5,1916.116 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1918.38,1922.5 3 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1928.37,1939.5 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1940.38,1942.5 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1948.37,1957.26 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1957.26,1959.6 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1960.5,1960.117 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1962.38,1964.5 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1971.37,1973.5 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1974.38,1976.5 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1980.37,1999.31 2 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:1999.31,2000.36 1 10 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2000.36,2012.7 1 60 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2014.5,2014.15 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2016.38,2018.5 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2022.37,2034.31 2 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2034.31,2035.36 1 5 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2035.36,2046.7 1 38 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2048.5,2048.15 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2050.38,2052.5 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2056.37,2068.25 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2068.25,2070.6 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2071.5,2071.136 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2071.136,2073.6 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2074.5,2074.129 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2074.129,2076.6 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2077.5,2077.135 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2077.135,2079.6 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2080.5,2080.15 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2082.38,2084.5 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2091.37,2092.123 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2092.123,2094.6 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2095.5,2095.123 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2097.38,2100.5 2 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2104.37,2110.5 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2111.38,2114.5 2 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2118.37,2124.5 2 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2125.38,2128.5 2 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2132.37,2134.139 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2134.139,2136.6 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2137.5,2137.193 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2137.193,2140.6 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2142.5,2142.132 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2142.132,2144.6 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2146.5,2146.117 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2146.117,2148.6 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2149.5,2149.273 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2149.273,2151.6 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2153.5,2153.141 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2155.38,2157.117 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2157.117,2159.6 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2160.5,2160.235 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2160.235,2162.6 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2163.5,2167.88 3 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2172.37,2190.27 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2190.27,2192.6 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2194.5,2194.131 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2194.131,2196.6 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2197.5,2197.124 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2197.124,2199.6 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2201.5,2208.27 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2208.27,2210.6 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2211.5,2211.129 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2213.38,2216.5 2 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2220.37,2222.110 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2222.110,2224.6 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2226.5,2226.109 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2226.109,2228.6 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2229.5,2229.171 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2231.38,2235.5 3 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2239.37,2241.5 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2242.38,2244.5 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2253.37,2257.5 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2258.38,2260.5 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2264.37,2266.5 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2267.38,2269.5 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2274.37,2280.28 2 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2280.28,2281.45 1 3 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2281.45,2283.7 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2285.5,2285.15 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2287.38,2288.107 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2288.107,2290.6 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2291.5,2291.74 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2297.37,2307.28 2 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2307.28,2308.45 1 3 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2308.45,2310.7 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2312.5,2312.15 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2314.38,2324.28 2 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2324.28,2325.45 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2325.45,2326.15 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2329.5,2329.15 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2334.37,2345.28 2 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2345.28,2346.45 1 4 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2346.45,2348.7 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2350.5,2350.15 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2352.38,2366.5 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2373.37,2421.29 2 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2421.29,2425.119 2 27 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2425.119,2427.7 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2429.6,2429.127 1 27 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2429.127,2431.7 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2432.6,2432.127 1 27 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2432.127,2434.7 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2436.6,2439.59 2 27 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2443.5,2449.34 2 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2449.34,2452.42 2 4 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2452.42,2453.25 1 34 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2453.25,2455.13 2 4 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2458.6,2461.56 4 4 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2464.5,2464.15 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2466.38,2468.5 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2473.37,2480.29 2 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2480.29,2488.6 5 3 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2493.5,2525.37 2 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2525.37,2530.6 2 30 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2534.5,2540.37 2 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2540.37,2545.6 2 4 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2546.5,2546.15 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2548.38,2550.5 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2554.37,2564.27 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2564.27,2566.6 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2568.5,2575.27 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2575.27,2577.6 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2579.5,2584.14 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2586.38,2591.5 4 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2613.37,2615.116 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2615.116,2617.6 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2620.5,2623.79 2 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2623.79,2625.6 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2627.5,2627.30 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2627.30,2629.28 2 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2629.28,2630.15 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2632.6,2636.50 3 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2636.50,2637.15 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2639.6,2640.33 2 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2640.33,2641.62 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2641.62,2643.13 2 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2646.6,2646.16 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2646.16,2647.15 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2650.6,2658.27 6 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2658.27,2674.7 10 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2674.12,2691.7 9 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2702.5,2702.30 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2702.30,2703.39 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2703.39,2704.15 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2706.6,2706.110 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2706.110,2707.15 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2709.6,2709.46 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2709.46,2712.32 2 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2712.32,2713.63 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2713.63,2715.14 2 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2718.7,2718.16 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2718.16,2719.16 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2724.6,2726.36 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2729.5,2729.15 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2731.38,2738.5 2 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2746.37,2753.28 2 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2753.28,2754.45 1 4 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2754.45,2756.7 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2758.5,2758.15 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2760.38,2767.28 2 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2767.28,2768.45 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2768.45,2770.7 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2772.5,2772.15 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2781.37,2783.5 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2784.38,2795.28 2 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2795.28,2796.45 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2796.45,2798.7 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2800.5,2800.15 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2811.37,2813.5 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2814.38,2835.28 2 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2835.28,2836.45 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2836.45,2838.7 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2840.5,2840.15 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2851.37,2853.5 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2860.35,2864.5 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2871.37,2873.5 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2874.38,2876.5 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2898.37,2927.28 2 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2927.28,2928.45 1 3 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2928.45,2930.7 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2932.5,2932.15 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2934.38,2940.28 2 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2940.28,2941.45 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2941.45,2943.7 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2945.5,2945.15 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2961.37,2994.28 2 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2994.28,2995.45 1 4 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2995.45,2997.7 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:2999.5,2999.15 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:3001.38,3008.28 2 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:3008.28,3009.45 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:3009.45,3011.7 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:3013.5,3013.15 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:3029.37,3054.28 2 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:3054.28,3055.45 1 3 +github.com/thebtf/engram/internal/db/gorm/migrations.go:3055.45,3057.7 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:3059.5,3059.15 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:3061.38,3067.28 2 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:3067.28,3068.45 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:3068.45,3070.7 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:3072.5,3072.15 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:3094.37,3117.26 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:3117.26,3119.6 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:3124.5,3143.26 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:3143.26,3145.6 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:3150.5,3166.26 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:3166.26,3168.6 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:3174.5,3220.26 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:3220.26,3222.6 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:3224.5,3224.15 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:3226.38,3239.5 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:3249.37,3250.82 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:3250.82,3252.6 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:3253.5,3253.15 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:3255.38,3257.5 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:3267.37,3268.94 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:3268.94,3270.6 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:3271.5,3271.82 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:3271.82,3273.6 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:3274.5,3274.15 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:3276.38,3278.5 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:3286.37,3288.5 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:3289.38,3291.5 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:3298.37,3300.5 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:3301.38,3303.5 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:3310.37,3312.5 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:3313.38,3315.5 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:3322.37,3324.5 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:3325.38,3327.5 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:3334.37,3336.5 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:3337.38,3339.5 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:3348.37,3350.5 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:3351.38,3353.5 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:3362.37,3386.32 2 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:3386.32,3387.48 1 15 +github.com/thebtf/engram/internal/db/gorm/migrations.go:3387.48,3389.7 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:3391.5,3391.15 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:3393.38,3399.30 2 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:3399.30,3400.95 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:3400.95,3402.7 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:3404.5,3407.15 4 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:3414.37,3426.32 2 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:3426.32,3427.48 1 3 +github.com/thebtf/engram/internal/db/gorm/migrations.go:3427.48,3429.7 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:3431.5,3431.15 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:3433.38,3435.5 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:3441.37,3454.32 2 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:3454.32,3455.48 1 3 +github.com/thebtf/engram/internal/db/gorm/migrations.go:3455.48,3457.7 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:3459.5,3459.15 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:3461.38,3463.5 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:3470.37,3484.32 2 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:3484.32,3485.48 1 2 +github.com/thebtf/engram/internal/db/gorm/migrations.go:3485.48,3487.7 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:3489.5,3489.15 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:3491.38,3493.5 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:3501.37,3502.95 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:3502.95,3505.6 2 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:3506.5,3506.138 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:3508.38,3510.5 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:3516.37,3530.32 2 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:3530.32,3531.48 1 11 +github.com/thebtf/engram/internal/db/gorm/migrations.go:3531.48,3533.7 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:3535.5,3535.15 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:3537.38,3543.30 2 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:3543.30,3544.95 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:3544.95,3546.7 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:3548.5,3548.15 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:3555.37,3560.32 2 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:3560.32,3561.48 1 2 +github.com/thebtf/engram/internal/db/gorm/migrations.go:3561.48,3563.7 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:3565.5,3565.15 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:3567.38,3571.5 3 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:3577.37,3588.5 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:3589.38,3591.5 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:3596.37,3612.5 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:3613.38,3615.5 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:3621.37,3627.32 2 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:3627.32,3628.48 1 3 +github.com/thebtf/engram/internal/db/gorm/migrations.go:3628.48,3630.7 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:3632.5,3632.15 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:3634.38,3639.5 4 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:3644.37,3658.5 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:3659.38,3661.5 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:3667.37,3673.32 2 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:3673.32,3674.48 1 3 +github.com/thebtf/engram/internal/db/gorm/migrations.go:3674.48,3676.7 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:3678.5,3678.15 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:3680.38,3685.5 4 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:3692.37,3699.32 2 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:3699.32,3700.48 1 4 +github.com/thebtf/engram/internal/db/gorm/migrations.go:3700.48,3702.7 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:3704.5,3704.15 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:3706.38,3708.5 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:3712.37,3714.5 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:3715.38,3717.5 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:3721.37,3723.5 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:3724.38,3726.5 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:3730.37,3744.32 2 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:3744.32,3745.48 1 2 +github.com/thebtf/engram/internal/db/gorm/migrations.go:3745.48,3747.7 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:3749.5,3749.15 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:3751.38,3753.5 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:3761.37,3772.32 2 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:3772.32,3773.48 1 2 +github.com/thebtf/engram/internal/db/gorm/migrations.go:3773.48,3775.7 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:3777.5,3777.15 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:3779.38,3791.32 2 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:3791.32,3792.48 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:3792.48,3794.7 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:3796.5,3796.15 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:3818.37,3846.32 2 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:3846.32,3847.48 1 5 +github.com/thebtf/engram/internal/db/gorm/migrations.go:3847.48,3849.7 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:3851.5,3851.15 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:3853.38,3859.32 2 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:3859.32,3860.48 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:3860.48,3862.7 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:3864.5,3864.15 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:3884.37,3889.5 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:3890.38,3894.5 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:3921.37,3951.32 2 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:3951.32,3952.48 1 5 +github.com/thebtf/engram/internal/db/gorm/migrations.go:3952.48,3954.7 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:3956.5,3956.15 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:3958.38,3960.5 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:3986.37,4036.32 2 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:4036.32,4037.48 1 22 +github.com/thebtf/engram/internal/db/gorm/migrations.go:4037.48,4039.7 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:4041.5,4041.15 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:4043.38,4066.32 2 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:4066.32,4067.48 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:4067.48,4069.7 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:4071.5,4071.15 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:4093.37,4097.5 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:4098.38,4102.5 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:4121.37,4152.32 2 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:4152.32,4153.48 1 3 +github.com/thebtf/engram/internal/db/gorm/migrations.go:4153.48,4155.7 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:4157.5,4157.15 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:4159.38,4161.5 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:4171.37,4194.32 2 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:4194.32,4195.48 1 3 +github.com/thebtf/engram/internal/db/gorm/migrations.go:4195.48,4197.7 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:4199.5,4199.15 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:4201.38,4203.5 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:4212.37,4233.32 2 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:4233.32,4234.48 1 6 +github.com/thebtf/engram/internal/db/gorm/migrations.go:4234.48,4236.7 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:4238.5,4238.15 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:4240.38,4245.32 2 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:4245.32,4246.48 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:4246.48,4248.7 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:4250.5,4250.15 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:4260.37,4276.32 2 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:4276.32,4277.48 1 3 +github.com/thebtf/engram/internal/db/gorm/migrations.go:4277.48,4279.7 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:4281.5,4281.15 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:4283.38,4286.5 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:4304.37,4334.32 2 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:4334.32,4335.48 1 3 +github.com/thebtf/engram/internal/db/gorm/migrations.go:4335.48,4337.7 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:4339.5,4339.15 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:4341.38,4343.5 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:4374.37,4375.52 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:4375.52,4386.30 2 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:4386.30,4387.47 1 8 +github.com/thebtf/engram/internal/db/gorm/migrations.go:4387.47,4389.8 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:4391.6,4391.16 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:4394.38,4398.5 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:4419.37,4420.52 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:4420.52,4421.98 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:4421.98,4423.7 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:4424.6,4424.16 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:4427.38,4431.5 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:4446.37,4470.32 2 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:4470.32,4471.48 1 5 +github.com/thebtf/engram/internal/db/gorm/migrations.go:4471.48,4473.7 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:4475.5,4475.15 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:4477.38,4479.5 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:4488.37,4498.32 2 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:4498.32,4499.48 1 2 +github.com/thebtf/engram/internal/db/gorm/migrations.go:4499.48,4501.7 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:4503.5,4503.15 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:4505.38,4507.5 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:4521.37,4528.32 2 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:4528.32,4529.48 1 2 +github.com/thebtf/engram/internal/db/gorm/migrations.go:4529.48,4531.7 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:4533.5,4533.15 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:4535.38,4542.32 2 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:4542.32,4543.48 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:4543.48,4545.7 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:4547.5,4547.15 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:4576.37,4577.52 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:4577.52,4588.33 2 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:4588.33,4589.50 1 4 +github.com/thebtf/engram/internal/db/gorm/migrations.go:4589.50,4591.8 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:4593.6,4593.16 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:4596.38,4601.52 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:4601.52,4607.33 2 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:4607.33,4608.50 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:4608.50,4610.8 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:4614.6,4614.97 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:4614.97,4617.7 2 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:4618.6,4618.140 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:4629.37,4652.28 2 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:4652.28,4653.45 1 2 +github.com/thebtf/engram/internal/db/gorm/migrations.go:4653.45,4655.7 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:4657.5,4657.15 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:4659.38,4661.5 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:4667.37,4705.31 2 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:4705.31,4706.48 1 6 +github.com/thebtf/engram/internal/db/gorm/migrations.go:4706.48,4708.7 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:4710.5,4710.15 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:4712.38,4714.5 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:4723.37,4765.31 2 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:4765.31,4766.48 1 6 +github.com/thebtf/engram/internal/db/gorm/migrations.go:4766.48,4768.7 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:4770.5,4770.15 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:4772.38,4777.31 2 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:4777.31,4778.48 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:4778.48,4780.7 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:4782.5,4782.15 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:4792.2,4792.36 1 3 +github.com/thebtf/engram/internal/db/gorm/migrations.go:4792.36,4794.3 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:4796.2,4796.12 1 3 +github.com/thebtf/engram/internal/db/gorm/migrations.go:4799.72,4802.36 1 3 +github.com/thebtf/engram/internal/db/gorm/migrations.go:4802.36,4809.31 2 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:4809.31,4810.47 1 2 +github.com/thebtf/engram/internal/db/gorm/migrations.go:4810.47,4812.6 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:4814.4,4814.14 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:4816.37,4817.58 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:4817.58,4821.52 2 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:4821.52,4823.6 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:4824.5,4824.32 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:4824.32,4826.6 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:4828.5,4834.32 2 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:4834.32,4835.56 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:4835.56,4837.7 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:4839.5,4839.15 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:4845.73,4848.36 1 3 +github.com/thebtf/engram/internal/db/gorm/migrations.go:4848.36,4855.31 2 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:4855.31,4856.47 1 2 +github.com/thebtf/engram/internal/db/gorm/migrations.go:4856.47,4858.6 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:4860.4,4860.14 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:4862.37,4863.58 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:4863.58,4867.53 2 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:4867.53,4869.6 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:4870.5,4870.33 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:4870.33,4872.6 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:4874.5,4880.32 2 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:4880.32,4881.56 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:4881.56,4883.7 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:4885.5,4885.15 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:4891.58,4894.36 1 3 +github.com/thebtf/engram/internal/db/gorm/migrations.go:4894.36,4911.31 2 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:4911.31,4912.47 1 3 +github.com/thebtf/engram/internal/db/gorm/migrations.go:4912.47,4914.6 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:4916.4,4916.14 1 1 +github.com/thebtf/engram/internal/db/gorm/migrations.go:4918.37,4919.81 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:4919.81,4921.5 1 0 +github.com/thebtf/engram/internal/db/gorm/migrations.go:4922.4,4922.14 1 0 +github.com/thebtf/engram/internal/db/gorm/models.go:44.38,44.63 1 1 +github.com/thebtf/engram/internal/db/gorm/models.go:47.54,48.27 1 0 +github.com/thebtf/engram/internal/db/gorm/models.go:48.27,50.3 1 0 +github.com/thebtf/engram/internal/db/gorm/models.go:51.2,51.23 1 0 +github.com/thebtf/engram/internal/db/gorm/models.go:51.23,53.3 1 0 +github.com/thebtf/engram/internal/db/gorm/models.go:54.2,54.12 1 0 +github.com/thebtf/engram/internal/db/gorm/models.go:75.35,75.55 1 0 +github.com/thebtf/engram/internal/db/gorm/models.go:92.36,92.58 1 0 +github.com/thebtf/engram/internal/db/gorm/models.go:109.40,109.67 1 0 +github.com/thebtf/engram/internal/db/gorm/models.go:122.45,122.77 1 0 +github.com/thebtf/engram/internal/db/gorm/models.go:140.35,140.56 1 0 +github.com/thebtf/engram/internal/db/gorm/models.go:160.36,160.59 1 0 +github.com/thebtf/engram/internal/db/gorm/models.go:188.33,188.52 1 0 +github.com/thebtf/engram/internal/db/gorm/models.go:200.40,200.67 1 0 +github.com/thebtf/engram/internal/db/gorm/models.go:220.38,220.62 1 0 +github.com/thebtf/engram/internal/db/gorm/models.go:249.40,249.67 1 0 +github.com/thebtf/engram/internal/db/gorm/models.go:304.34,304.55 1 3 +github.com/thebtf/engram/internal/db/gorm/models.go:317.39,317.72 1 0 +github.com/thebtf/engram/internal/db/gorm/models.go:334.42,334.71 1 0 +github.com/thebtf/engram/internal/db/gorm/project_store.go:23.122,24.17 1 0 +github.com/thebtf/engram/internal/db/gorm/project_store.go:24.17,26.3 1 0 +github.com/thebtf/engram/internal/db/gorm/project_store.go:28.2,34.108 2 0 +github.com/thebtf/engram/internal/db/gorm/project_store.go:34.108,36.3 1 0 +github.com/thebtf/engram/internal/db/gorm/project_store.go:38.2,38.20 1 0 +github.com/thebtf/engram/internal/db/gorm/project_store.go:38.20,44.94 2 0 +github.com/thebtf/engram/internal/db/gorm/project_store.go:44.94,46.4 1 0 +github.com/thebtf/engram/internal/db/gorm/project_store.go:49.2,49.12 1 0 +github.com/thebtf/engram/internal/db/gorm/project_store.go:55.82,56.21 1 0 +github.com/thebtf/engram/internal/db/gorm/project_store.go:56.21,58.3 1 0 +github.com/thebtf/engram/internal/db/gorm/project_store.go:59.2,62.61 2 0 +github.com/thebtf/engram/internal/db/gorm/project_store.go:62.61,64.3 1 0 +github.com/thebtf/engram/internal/db/gorm/project_store.go:65.2,65.20 1 0 +github.com/thebtf/engram/internal/db/gorm/promotion_store.go:21.45,21.71 1 0 +github.com/thebtf/engram/internal/db/gorm/promotion_store.go:29.53,31.2 1 0 +github.com/thebtf/engram/internal/db/gorm/promotion_store.go:34.115,41.67 2 0 +github.com/thebtf/engram/internal/db/gorm/promotion_store.go:41.67,43.3 1 0 +github.com/thebtf/engram/internal/db/gorm/promotion_store.go:44.2,44.12 1 0 +github.com/thebtf/engram/internal/db/gorm/promotion_store.go:48.114,49.16 1 0 +github.com/thebtf/engram/internal/db/gorm/promotion_store.go:49.16,51.3 1 0 +github.com/thebtf/engram/internal/db/gorm/promotion_store.go:52.2,58.16 3 0 +github.com/thebtf/engram/internal/db/gorm/promotion_store.go:58.16,60.3 1 0 +github.com/thebtf/engram/internal/db/gorm/promotion_store.go:61.2,61.21 1 0 +github.com/thebtf/engram/internal/db/gorm/purge_store.go:34.46,36.2 1 0 +github.com/thebtf/engram/internal/db/gorm/purge_store.go:80.94,83.19 2 0 +github.com/thebtf/engram/internal/db/gorm/purge_store.go:83.19,85.3 1 0 +github.com/thebtf/engram/internal/db/gorm/purge_store.go:87.2,91.67 4 0 +github.com/thebtf/engram/internal/db/gorm/purge_store.go:91.67,99.23 1 0 +github.com/thebtf/engram/internal/db/gorm/purge_store.go:99.23,101.4 1 0 +github.com/thebtf/engram/internal/db/gorm/purge_store.go:105.3,109.21 2 0 +github.com/thebtf/engram/internal/db/gorm/purge_store.go:109.21,111.4 1 0 +github.com/thebtf/engram/internal/db/gorm/purge_store.go:112.3,120.21 3 0 +github.com/thebtf/engram/internal/db/gorm/purge_store.go:120.21,122.4 1 0 +github.com/thebtf/engram/internal/db/gorm/purge_store.go:123.3,131.21 3 0 +github.com/thebtf/engram/internal/db/gorm/purge_store.go:131.21,133.4 1 0 +github.com/thebtf/engram/internal/db/gorm/purge_store.go:134.3,142.21 3 0 +github.com/thebtf/engram/internal/db/gorm/purge_store.go:142.21,144.4 1 0 +github.com/thebtf/engram/internal/db/gorm/purge_store.go:145.3,155.21 3 0 +github.com/thebtf/engram/internal/db/gorm/purge_store.go:155.21,157.4 1 0 +github.com/thebtf/engram/internal/db/gorm/purge_store.go:158.3,162.21 3 0 +github.com/thebtf/engram/internal/db/gorm/purge_store.go:162.21,164.4 1 0 +github.com/thebtf/engram/internal/db/gorm/purge_store.go:165.3,174.23 2 0 +github.com/thebtf/engram/internal/db/gorm/purge_store.go:174.23,176.4 1 0 +github.com/thebtf/engram/internal/db/gorm/purge_store.go:179.3,180.21 2 0 +github.com/thebtf/engram/internal/db/gorm/purge_store.go:180.21,182.4 1 0 +github.com/thebtf/engram/internal/db/gorm/purge_store.go:183.3,188.21 3 0 +github.com/thebtf/engram/internal/db/gorm/purge_store.go:188.21,190.4 1 0 +github.com/thebtf/engram/internal/db/gorm/purge_store.go:191.3,205.17 3 0 +github.com/thebtf/engram/internal/db/gorm/purge_store.go:205.17,207.4 1 0 +github.com/thebtf/engram/internal/db/gorm/purge_store.go:208.3,215.54 3 0 +github.com/thebtf/engram/internal/db/gorm/purge_store.go:215.54,217.4 1 0 +github.com/thebtf/engram/internal/db/gorm/purge_store.go:219.3,219.13 1 0 +github.com/thebtf/engram/internal/db/gorm/purge_store.go:221.2,221.16 1 0 +github.com/thebtf/engram/internal/db/gorm/purge_store.go:221.16,223.3 1 0 +github.com/thebtf/engram/internal/db/gorm/purge_store.go:225.2,225.21 1 0 +github.com/thebtf/engram/internal/db/gorm/retrieval_stats_log_store.go:23.50,23.82 1 0 +github.com/thebtf/engram/internal/db/gorm/retrieval_stats_log_store.go:41.69,49.2 3 0 +github.com/thebtf/engram/internal/db/gorm/retrieval_stats_log_store.go:52.81,53.16 1 0 +github.com/thebtf/engram/internal/db/gorm/retrieval_stats_log_store.go:53.16,55.3 1 0 +github.com/thebtf/engram/internal/db/gorm/retrieval_stats_log_store.go:56.2,62.9 2 0 +github.com/thebtf/engram/internal/db/gorm/retrieval_stats_log_store.go:63.21,63.21 0 0 +github.com/thebtf/engram/internal/db/gorm/retrieval_stats_log_store.go:64.10,64.10 0 0 +github.com/thebtf/engram/internal/db/gorm/retrieval_stats_log_store.go:70.44,77.6 5 0 +github.com/thebtf/engram/internal/db/gorm/retrieval_stats_log_store.go:77.6,78.10 1 0 +github.com/thebtf/engram/internal/db/gorm/retrieval_stats_log_store.go:79.28,80.11 1 0 +github.com/thebtf/engram/internal/db/gorm/retrieval_stats_log_store.go:80.11,82.23 1 0 +github.com/thebtf/engram/internal/db/gorm/retrieval_stats_log_store.go:82.23,84.6 1 0 +github.com/thebtf/engram/internal/db/gorm/retrieval_stats_log_store.go:85.5,85.11 1 0 +github.com/thebtf/engram/internal/db/gorm/retrieval_stats_log_store.go:87.4,88.45 2 0 +github.com/thebtf/engram/internal/db/gorm/retrieval_stats_log_store.go:88.45,91.5 2 0 +github.com/thebtf/engram/internal/db/gorm/retrieval_stats_log_store.go:92.19,93.22 1 0 +github.com/thebtf/engram/internal/db/gorm/retrieval_stats_log_store.go:93.22,96.5 2 0 +github.com/thebtf/engram/internal/db/gorm/retrieval_stats_log_store.go:102.74,103.74 1 0 +github.com/thebtf/engram/internal/db/gorm/retrieval_stats_log_store.go:103.74,105.3 1 0 +github.com/thebtf/engram/internal/db/gorm/retrieval_stats_log_store.go:109.42,110.24 1 0 +github.com/thebtf/engram/internal/db/gorm/retrieval_stats_log_store.go:110.24,113.3 2 0 +github.com/thebtf/engram/internal/db/gorm/retrieval_stats_log_store.go:130.132,141.19 4 0 +github.com/thebtf/engram/internal/db/gorm/retrieval_stats_log_store.go:141.19,143.3 1 0 +github.com/thebtf/engram/internal/db/gorm/retrieval_stats_log_store.go:144.2,144.21 1 0 +github.com/thebtf/engram/internal/db/gorm/retrieval_stats_log_store.go:144.21,146.3 1 0 +github.com/thebtf/engram/internal/db/gorm/retrieval_stats_log_store.go:147.2,147.44 1 0 +github.com/thebtf/engram/internal/db/gorm/retrieval_stats_log_store.go:147.44,149.3 1 0 +github.com/thebtf/engram/internal/db/gorm/retrieval_stats_log_store.go:151.2,152.25 2 0 +github.com/thebtf/engram/internal/db/gorm/retrieval_stats_log_store.go:152.25,153.22 1 0 +github.com/thebtf/engram/internal/db/gorm/retrieval_stats_log_store.go:154.25,156.34 2 0 +github.com/thebtf/engram/internal/db/gorm/retrieval_stats_log_store.go:157.28,159.34 2 0 +github.com/thebtf/engram/internal/db/gorm/retrieval_stats_log_store.go:160.30,161.38 1 0 +github.com/thebtf/engram/internal/db/gorm/retrieval_stats_log_store.go:162.25,163.33 1 0 +github.com/thebtf/engram/internal/db/gorm/retrieval_stats_log_store.go:164.22,165.30 1 0 +github.com/thebtf/engram/internal/db/gorm/retrieval_stats_log_store.go:166.29,167.37 1 0 +github.com/thebtf/engram/internal/db/gorm/retrieval_stats_log_store.go:170.2,170.19 1 0 +github.com/thebtf/engram/internal/db/gorm/retrieval_stats_log_store.go:174.103,180.2 3 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:139.44,139.72 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:157.45,157.75 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:174.52,174.89 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:176.50,178.2 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:180.50,181.18 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:181.18,183.3 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:184.2,184.21 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:187.46,189.2 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:199.41,199.67 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:230.42,230.68 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:247.48,247.80 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:262.53,262.91 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:268.63,270.2 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:272.128,273.14 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:273.14,275.3 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:276.2,276.58 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:276.58,278.3 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:279.2,279.25 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:279.25,281.17 2 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:281.17,283.4 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:284.3,284.22 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:284.22,286.4 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:288.2,289.64 2 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:289.64,290.52 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:290.52,292.21 2 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:292.21,294.5 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:295.4,295.23 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:295.23,297.5 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:299.3,299.70 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:301.2,301.34 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:304.110,306.68 2 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:306.68,308.3 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:309.2,309.35 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:312.133,313.23 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:313.23,315.3 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:316.2,324.44 3 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:324.44,326.3 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:327.2,327.16 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:327.16,329.3 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:330.2,330.35 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:333.136,335.16 2 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:335.16,337.3 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:338.2,339.32 2 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:339.32,341.3 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:342.2,342.25 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:342.25,344.3 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:345.2,346.44 2 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:346.44,348.3 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:349.2,350.22 2 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:350.22,352.3 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:353.2,353.17 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:356.146,358.16 2 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:358.16,360.3 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:361.2,371.46 3 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:371.46,373.3 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:375.2,376.44 2 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:376.44,378.3 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:379.2,380.22 2 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:380.22,382.3 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:383.2,383.17 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:386.147,387.16 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:387.16,389.3 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:390.2,395.20 2 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:395.20,397.3 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:397.8,399.3 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:401.2,402.44 2 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:402.44,404.3 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:405.2,406.22 2 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:406.22,408.3 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:409.2,409.17 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:412.160,413.16 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:413.16,415.3 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:416.2,416.16 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:416.16,418.3 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:419.2,419.18 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:419.18,421.3 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:422.2,423.67 2 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:423.67,425.97 2 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:425.97,427.4 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:428.3,428.63 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:428.63,430.4 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:432.3,438.40 2 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:438.40,440.4 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:441.3,441.45 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:441.45,443.4 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:444.3,444.21 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:444.21,446.4 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:447.3,448.23 2 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:448.23,451.4 2 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:452.3,457.25 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:457.25,459.4 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:460.3,463.34 2 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:463.34,465.4 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:466.3,466.13 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:468.2,468.16 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:468.16,470.3 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:471.2,472.22 2 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:472.22,474.3 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:475.2,475.17 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:478.120,480.19 2 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:480.19,482.3 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:483.2,487.64 2 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:487.64,489.3 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:490.2,490.35 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:493.211,494.16 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:494.16,496.3 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:497.2,497.71 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:497.71,499.3 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:500.2,500.41 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:500.41,502.3 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:503.2,517.67 4 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:517.67,521.26 2 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:521.26,523.4 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:524.3,524.31 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:524.31,526.4 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:527.3,529.58 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:529.58,531.4 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:532.3,532.53 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:532.53,534.4 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:535.3,535.13 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:537.2,537.16 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:537.16,539.3 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:540.2,540.36 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:543.155,544.17 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:544.17,546.3 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:547.2,547.144 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:547.144,549.3 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:550.2,550.42 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:550.42,552.3 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:553.2,554.49 2 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:554.49,556.3 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:556.8,558.3 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:559.2,560.67 2 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:560.67,562.102 2 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:562.102,564.4 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:565.3,565.63 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:565.63,567.4 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:568.3,569.114 2 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:569.114,571.4 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:572.3,572.62 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:572.62,574.4 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:575.3,575.87 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:575.87,577.4 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:578.3,579.46 2 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:579.46,581.4 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:582.3,582.13 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:584.2,584.16 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:584.16,586.3 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:587.2,587.42 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:590.160,591.126 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:591.126,593.3 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:594.2,594.94 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:594.94,596.3 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:597.2,599.26 3 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:599.26,601.3 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:602.2,613.67 3 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:613.67,615.109 2 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:615.109,617.4 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:618.3,618.62 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:618.62,620.4 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:621.3,621.87 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:621.87,623.4 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:624.3,627.35 2 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:627.35,629.4 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:630.3,632.39 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:632.39,634.4 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:635.3,635.59 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:635.59,637.4 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:638.3,638.13 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:640.2,640.16 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:640.16,642.3 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:643.2,643.35 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:646.152,648.67 2 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:648.67,650.17 2 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:650.17,652.4 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:653.3,653.22 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:653.22,656.4 2 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:658.3,659.109 2 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:659.109,661.4 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:662.3,662.62 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:662.62,664.21 2 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:664.21,666.5 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:667.4,667.20 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:667.20,670.5 2 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:671.4,671.128 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:673.3,673.62 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:673.62,675.4 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:677.3,678.17 2 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:678.17,680.4 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:681.3,697.29 2 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:697.29,699.4 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:700.3,700.54 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:700.54,701.30 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:701.30,703.22 2 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:703.22,705.6 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:706.5,706.24 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:706.24,709.6 2 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:711.4,711.70 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:713.3,718.25 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:718.25,720.4 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:721.3,721.148 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:721.148,723.4 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:724.3,725.13 2 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:727.2,727.16 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:727.16,729.3 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:730.2,730.20 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:733.149,735.67 2 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:735.67,737.109 2 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:737.109,739.4 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:740.3,740.62 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:740.62,742.4 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:743.3,743.62 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:743.62,745.4 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:746.3,750.25 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:750.25,752.4 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:753.3,753.161 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:753.161,755.4 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:756.3,756.65 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:756.65,758.4 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:759.3,760.13 2 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:762.2,762.16 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:762.16,764.3 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:765.2,765.20 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:768.175,770.67 2 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:770.67,772.101 2 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:772.101,774.4 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:775.3,776.77 2 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:776.77,778.4 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:779.3,779.44 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:779.44,781.18 2 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:781.18,783.5 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:784.4,785.18 2 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:785.18,787.5 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:788.4,794.19 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:794.19,796.5 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:798.3,802.37 2 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:802.37,805.4 2 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:806.3,806.103 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:806.103,808.4 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:809.3,810.135 2 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:810.135,812.4 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:813.3,813.57 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:813.57,815.4 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:816.3,817.13 2 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:819.2,819.16 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:819.16,821.3 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:822.2,822.20 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:825.132,827.67 2 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:827.67,829.17 2 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:829.17,831.4 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:832.3,833.13 2 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:835.2,835.16 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:835.16,837.3 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:838.2,838.43 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:841.136,842.29 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:842.29,844.3 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:845.2,846.23 2 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:846.23,848.3 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:849.2,861.71 2 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:861.71,863.3 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:864.2,864.67 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:864.67,866.3 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:867.2,867.72 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:867.72,869.3 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:870.2,870.71 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:870.71,872.3 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:873.2,873.70 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:873.70,875.3 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:876.2,876.73 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:876.73,878.3 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:879.2,880.20 2 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:883.165,884.29 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:884.29,886.3 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:887.2,887.23 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:887.23,889.3 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:890.2,906.19 4 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:906.19,908.3 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:909.2,909.62 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:909.62,911.3 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:912.2,913.31 2 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:913.31,915.3 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:917.2,918.92 2 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:918.92,920.19 2 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:920.19,926.4 2 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:927.3,930.33 4 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:932.2,932.90 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:932.90,944.3 2 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:946.2,946.39 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:946.39,949.55 3 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:949.55,951.4 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:952.3,952.78 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:952.78,954.4 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:955.3,955.75 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:955.75,957.4 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:958.3,958.181 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:958.181,960.4 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:963.2,968.19 3 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:968.19,970.3 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:971.2,971.56 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:971.56,973.3 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:974.2,974.28 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:974.28,977.24 3 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:977.24,979.4 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:980.3,987.51 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:990.2,995.19 3 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:995.19,997.3 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:998.2,998.60 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:998.60,1000.3 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1001.2,1001.30 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1001.30,1011.3 2 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1013.2,1029.19 3 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1029.19,1031.3 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1032.2,1032.54 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1032.54,1034.3 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1035.2,1035.27 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1035.27,1038.30 3 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1038.30,1040.4 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1041.3,1041.39 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1041.39,1043.4 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1044.3,1051.58 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1054.2,1064.31 3 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1064.31,1065.44 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1065.44,1067.4 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1069.2,1069.17 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1072.162,1073.29 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1073.29,1075.3 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1076.2,1076.23 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1076.23,1078.3 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1079.2,1080.45 2 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1080.45,1083.3 2 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1084.2,1085.44 2 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1085.44,1087.3 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1088.2,1089.22 2 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1089.22,1091.3 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1092.2,1092.17 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1095.149,1096.29 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1096.29,1098.3 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1099.2,1100.22 2 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1100.22,1102.3 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1103.2,1104.67 2 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1104.67,1108.26 2 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1108.26,1110.4 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1111.3,1111.31 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1111.31,1113.4 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1114.3,1114.83 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1114.83,1116.4 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1117.3,1117.13 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1119.2,1119.16 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1119.16,1121.3 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1122.2,1122.51 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1125.167,1127.29 2 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1127.29,1129.3 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1130.2,1130.29 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1130.29,1132.3 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1133.2,1133.61 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1133.61,1135.3 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1137.2,1137.67 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1137.67,1139.134 2 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1139.134,1141.4 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1142.3,1142.32 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1142.32,1144.4 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1145.3,1146.36 2 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1146.36,1148.4 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1149.3,1151.32 3 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1151.32,1153.4 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1154.3,1154.44 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1154.44,1156.108 2 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1156.108,1158.5 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1159.4,1159.63 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1159.63,1161.13 2 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1163.4,1163.43 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1163.43,1165.5 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1167.3,1167.41 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1167.41,1169.4 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1170.3,1170.47 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1170.47,1175.105 2 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1175.105,1177.5 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1178.4,1178.77 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1180.3,1184.24 2 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1184.24,1186.4 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1187.3,1187.13 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1189.2,1189.16 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1189.16,1190.92 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1190.92,1193.67 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1193.67,1195.5 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1197.3,1197.21 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1199.2,1199.20 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1202.67,1223.33 2 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1223.33,1225.3 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1226.2,1226.22 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1226.22,1228.3 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1229.2,1229.12 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1232.67,1261.32 2 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1261.32,1263.3 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1264.2,1264.10 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1267.70,1285.2 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1287.94,1289.25 2 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1289.25,1291.3 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1292.2,1303.3 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1306.91,1321.2 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1323.61,1352.2 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1354.94,1366.27 2 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1366.27,1368.3 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1369.2,1369.13 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1372.100,1382.2 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1384.60,1385.16 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1385.16,1387.3 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1388.2,1388.80 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1388.80,1390.3 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1391.2,1391.11 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1394.68,1395.16 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1395.16,1397.3 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1398.2,1401.4 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1401.4,1402.45 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1402.45,1404.4 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1406.2,1406.11 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1414.146,1417.26 3 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1417.26,1419.3 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1420.2,1421.44 2 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1421.44,1423.3 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1424.2,1424.27 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1424.27,1426.3 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1428.2,1431.26 4 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1431.26,1433.3 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1434.2,1434.58 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1434.58,1436.3 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1437.2,1437.28 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1437.28,1439.3 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1440.2,1440.12 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1443.142,1446.26 3 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1446.26,1448.3 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1449.2,1450.44 2 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1450.44,1452.3 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1453.2,1453.27 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1453.27,1455.3 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1456.2,1456.12 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1459.147,1460.67 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1460.67,1462.3 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1463.2,1466.44 4 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1466.44,1468.3 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1469.2,1469.27 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1469.27,1471.3 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1472.2,1472.12 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1475.146,1482.26 3 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1482.26,1484.3 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1485.2,1486.44 2 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1486.44,1488.3 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1489.2,1489.27 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1489.27,1491.3 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1492.2,1492.12 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1495.145,1500.26 3 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1500.26,1502.3 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1503.2,1504.44 2 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1504.44,1506.3 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1507.2,1507.27 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1507.27,1509.3 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1510.2,1510.12 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1513.148,1518.26 3 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1518.26,1520.3 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1521.2,1522.44 2 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1522.44,1524.3 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1525.2,1525.27 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1525.27,1527.3 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1528.2,1528.12 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1531.74,1532.20 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1532.20,1534.3 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1535.2,1535.39 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1538.56,1540.53 2 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1540.53,1542.3 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1543.2,1543.50 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1543.50,1545.3 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1546.2,1546.54 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1546.54,1548.3 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1549.2,1549.54 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1549.54,1551.3 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1552.2,1552.52 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1552.52,1554.3 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1555.2,1555.56 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1555.56,1557.3 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1558.2,1558.14 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1571.116,1572.16 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1572.16,1574.3 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1575.2,1583.4 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1586.81,1588.19 2 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1588.19,1590.3 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1591.2,1592.75 2 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1592.75,1594.3 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1595.2,1600.70 2 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1600.70,1602.84 2 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1602.84,1604.4 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1605.3,1611.4 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1613.2,1613.14 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1616.85,1617.16 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1617.16,1619.3 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1620.2,1620.48 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1623.95,1626.44 3 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1626.44,1628.3 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1629.2,1629.16 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1629.16,1631.3 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1632.2,1632.33 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1635.81,1638.90 3 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1638.90,1640.3 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1641.2,1641.17 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1641.17,1643.3 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1644.2,1644.74 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1644.74,1646.3 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1647.2,1647.18 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1650.141,1664.46 3 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1664.46,1666.3 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1667.2,1667.12 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1670.67,1673.2 2 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1675.100,1676.122 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1676.122,1678.3 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1679.2,1680.22 2 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1680.22,1682.3 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1683.2,1692.45 2 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1692.45,1694.3 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1695.2,1695.17 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1698.71,1699.180 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1699.180,1701.3 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1702.2,1702.30 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1702.30,1704.3 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1705.2,1705.12 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1708.55,1709.33 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1709.33,1710.38 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1710.38,1712.4 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1714.2,1714.14 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1717.75,1725.2 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1727.68,1738.33 2 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1738.33,1739.65 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1739.65,1741.4 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1743.2,1743.63 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1743.63,1745.3 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1746.2,1746.12 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1749.54,1750.18 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1750.18,1752.3 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1753.2,1754.31 2 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1754.31,1756.3 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1757.2,1757.19 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1760.51,1761.18 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1761.18,1763.3 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1764.2,1765.31 2 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1765.31,1767.3 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1768.2,1768.19 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1771.40,1773.2 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1775.64,1776.21 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1776.21,1778.3 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1779.2,1779.14 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1782.48,1783.21 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1783.21,1785.3 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1786.2,1787.13 2 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1790.47,1791.19 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1791.19,1793.3 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1794.2,1795.50 2 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1795.50,1797.3 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1798.2,1798.12 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1801.42,1802.19 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1802.19,1804.3 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1805.2,1806.50 2 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1806.50,1808.3 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1809.2,1809.12 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1812.40,1813.43 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1813.43,1815.3 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1816.2,1817.53 2 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1817.53,1819.3 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_governance_store.go:1820.2,1821.56 2 0 +github.com/thebtf/engram/internal/db/gorm/rule_injection_event_store.go:28.49,28.83 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_injection_event_store.go:55.71,57.2 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_injection_event_store.go:59.112,60.29 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_injection_event_store.go:60.29,62.3 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_injection_event_store.go:63.2,63.22 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_injection_event_store.go:63.22,65.3 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_injection_event_store.go:66.2,67.31 2 0 +github.com/thebtf/engram/internal/db/gorm/rule_injection_event_store.go:67.31,69.17 2 0 +github.com/thebtf/engram/internal/db/gorm/rule_injection_event_store.go:69.17,71.4 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_injection_event_store.go:72.3,72.27 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_injection_event_store.go:74.2,74.66 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_injection_event_store.go:74.66,76.3 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_injection_event_store.go:77.2,77.12 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_injection_event_store.go:80.137,81.29 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_injection_event_store.go:81.29,83.3 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_injection_event_store.go:84.2,85.21 2 0 +github.com/thebtf/engram/internal/db/gorm/rule_injection_event_store.go:85.21,87.3 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_injection_event_store.go:88.2,88.16 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_injection_event_store.go:88.16,90.3 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_injection_event_store.go:91.2,96.33 2 0 +github.com/thebtf/engram/internal/db/gorm/rule_injection_event_store.go:96.33,98.3 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_injection_event_store.go:99.2,100.22 2 0 +github.com/thebtf/engram/internal/db/gorm/rule_injection_event_store.go:100.22,102.3 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_injection_event_store.go:103.2,103.17 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_injection_event_store.go:106.169,107.29 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_injection_event_store.go:107.29,109.3 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_injection_event_store.go:110.2,111.19 2 0 +github.com/thebtf/engram/internal/db/gorm/rule_injection_event_store.go:111.19,113.3 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_injection_event_store.go:114.2,115.16 2 0 +github.com/thebtf/engram/internal/db/gorm/rule_injection_event_store.go:115.16,117.3 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_injection_event_store.go:118.2,135.33 5 0 +github.com/thebtf/engram/internal/db/gorm/rule_injection_event_store.go:135.33,137.3 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_injection_event_store.go:138.2,138.20 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_injection_event_store.go:138.20,141.3 2 0 +github.com/thebtf/engram/internal/db/gorm/rule_injection_event_store.go:143.2,144.27 2 0 +github.com/thebtf/engram/internal/db/gorm/rule_injection_event_store.go:144.27,147.17 3 0 +github.com/thebtf/engram/internal/db/gorm/rule_injection_event_store.go:147.17,149.4 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_injection_event_store.go:150.3,155.5 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_injection_event_store.go:157.2,157.23 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_injection_event_store.go:160.134,162.23 2 0 +github.com/thebtf/engram/internal/db/gorm/rule_injection_event_store.go:162.23,164.3 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_injection_event_store.go:165.2,165.21 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_injection_event_store.go:165.21,167.3 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_injection_event_store.go:168.2,168.14 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_injection_event_store.go:171.186,177.47 2 0 +github.com/thebtf/engram/internal/db/gorm/rule_injection_event_store.go:177.47,179.3 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_injection_event_store.go:180.2,180.21 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_injection_event_store.go:183.94,184.18 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_injection_event_store.go:184.18,186.3 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_injection_event_store.go:187.2,190.85 4 0 +github.com/thebtf/engram/internal/db/gorm/rule_injection_event_store.go:190.85,192.3 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_injection_event_store.go:193.2,201.31 2 0 +github.com/thebtf/engram/internal/db/gorm/rule_injection_event_store.go:201.31,203.3 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_injection_event_store.go:204.2,204.60 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_injection_event_store.go:204.60,206.3 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_injection_event_store.go:207.2,207.78 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_injection_event_store.go:207.78,209.3 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_injection_event_store.go:210.2,210.17 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_injection_event_store.go:213.82,224.29 2 0 +github.com/thebtf/engram/internal/db/gorm/rule_injection_event_store.go:224.29,227.3 2 0 +github.com/thebtf/engram/internal/db/gorm/rule_injection_event_store.go:228.2,228.38 1 0 +github.com/thebtf/engram/internal/db/gorm/rule_injection_event_store.go:228.38,231.3 2 0 +github.com/thebtf/engram/internal/db/gorm/rule_injection_event_store.go:232.2,232.14 1 0 +github.com/thebtf/engram/internal/db/gorm/search_query_log_store.go:24.47,24.76 1 0 +github.com/thebtf/engram/internal/db/gorm/search_query_log_store.go:32.63,34.2 1 0 +github.com/thebtf/engram/internal/db/gorm/search_query_log_store.go:38.107,39.12 1 0 +github.com/thebtf/engram/internal/db/gorm/search_query_log_store.go:39.12,48.51 2 0 +github.com/thebtf/engram/internal/db/gorm/search_query_log_store.go:48.51,50.4 1 0 +github.com/thebtf/engram/internal/db/gorm/search_query_log_store.go:69.108,73.21 3 0 +github.com/thebtf/engram/internal/db/gorm/search_query_log_store.go:73.21,75.3 1 0 +github.com/thebtf/engram/internal/db/gorm/search_query_log_store.go:78.2,78.64 1 0 +github.com/thebtf/engram/internal/db/gorm/search_query_log_store.go:78.64,80.3 1 0 +github.com/thebtf/engram/internal/db/gorm/search_query_log_store.go:82.2,82.34 1 0 +github.com/thebtf/engram/internal/db/gorm/search_query_log_store.go:82.34,84.3 1 0 +github.com/thebtf/engram/internal/db/gorm/search_query_log_store.go:87.2,90.53 2 0 +github.com/thebtf/engram/internal/db/gorm/search_query_log_store.go:90.53,92.3 1 0 +github.com/thebtf/engram/internal/db/gorm/search_query_log_store.go:95.2,96.21 2 0 +github.com/thebtf/engram/internal/db/gorm/search_query_log_store.go:96.21,98.3 1 0 +github.com/thebtf/engram/internal/db/gorm/search_query_log_store.go:99.2,101.51 1 0 +github.com/thebtf/engram/internal/db/gorm/search_query_log_store.go:101.51,103.3 1 0 +github.com/thebtf/engram/internal/db/gorm/search_query_log_store.go:106.2,108.21 3 0 +github.com/thebtf/engram/internal/db/gorm/search_query_log_store.go:108.21,110.3 1 0 +github.com/thebtf/engram/internal/db/gorm/search_query_log_store.go:111.2,111.75 1 0 +github.com/thebtf/engram/internal/db/gorm/search_query_log_store.go:111.75,113.3 1 0 +github.com/thebtf/engram/internal/db/gorm/search_query_log_store.go:114.2,114.33 1 0 +github.com/thebtf/engram/internal/db/gorm/search_query_log_store.go:114.33,116.3 1 0 +github.com/thebtf/engram/internal/db/gorm/search_query_log_store.go:120.2,123.24 3 0 +github.com/thebtf/engram/internal/db/gorm/search_query_log_store.go:136.117,137.16 1 0 +github.com/thebtf/engram/internal/db/gorm/search_query_log_store.go:137.16,139.3 1 0 +github.com/thebtf/engram/internal/db/gorm/search_query_log_store.go:140.2,140.17 1 0 +github.com/thebtf/engram/internal/db/gorm/search_query_log_store.go:140.17,142.3 1 0 +github.com/thebtf/engram/internal/db/gorm/search_query_log_store.go:144.2,148.19 3 0 +github.com/thebtf/engram/internal/db/gorm/search_query_log_store.go:148.19,150.3 1 0 +github.com/thebtf/engram/internal/db/gorm/search_query_log_store.go:151.2,151.47 1 0 +github.com/thebtf/engram/internal/db/gorm/search_query_log_store.go:151.47,153.3 1 0 +github.com/thebtf/engram/internal/db/gorm/search_query_log_store.go:155.2,156.28 2 0 +github.com/thebtf/engram/internal/db/gorm/search_query_log_store.go:156.28,164.3 1 0 +github.com/thebtf/engram/internal/db/gorm/search_query_log_store.go:165.2,165.20 1 0 +github.com/thebtf/engram/internal/db/gorm/search_query_log_store.go:169.100,175.2 3 0 +github.com/thebtf/engram/internal/db/gorm/segment_store.go:22.42,22.71 1 0 +github.com/thebtf/engram/internal/db/gorm/segment_store.go:30.50,32.2 1 0 +github.com/thebtf/engram/internal/db/gorm/segment_store.go:35.106,41.16 3 0 +github.com/thebtf/engram/internal/db/gorm/segment_store.go:41.16,42.36 1 0 +github.com/thebtf/engram/internal/db/gorm/segment_store.go:42.36,44.4 1 0 +github.com/thebtf/engram/internal/db/gorm/segment_store.go:45.3,45.64 1 0 +github.com/thebtf/engram/internal/db/gorm/segment_store.go:47.2,47.18 1 0 +github.com/thebtf/engram/internal/db/gorm/segment_store.go:51.122,55.67 3 0 +github.com/thebtf/engram/internal/db/gorm/segment_store.go:55.67,59.46 1 0 +github.com/thebtf/engram/internal/db/gorm/segment_store.go:59.46,61.4 1 0 +github.com/thebtf/engram/internal/db/gorm/segment_store.go:65.3,69.38 2 0 +github.com/thebtf/engram/internal/db/gorm/segment_store.go:69.38,71.4 1 0 +github.com/thebtf/engram/internal/db/gorm/segment_store.go:73.3,80.47 2 0 +github.com/thebtf/engram/internal/db/gorm/segment_store.go:80.47,82.4 1 0 +github.com/thebtf/engram/internal/db/gorm/segment_store.go:83.3,84.13 2 0 +github.com/thebtf/engram/internal/db/gorm/segment_store.go:86.2,86.20 1 0 +github.com/thebtf/engram/internal/db/gorm/segment_store.go:90.101,97.2 3 0 +github.com/thebtf/engram/internal/db/gorm/segment_store.go:100.86,105.2 1 0 +github.com/thebtf/engram/internal/db/gorm/session_store.go:31.50,33.2 1 0 +github.com/thebtf/engram/internal/db/gorm/session_store.go:41.122,48.37 2 0 +github.com/thebtf/engram/internal/db/gorm/session_store.go:48.37,49.24 1 0 +github.com/thebtf/engram/internal/db/gorm/session_store.go:49.24,51.5 1 0 +github.com/thebtf/engram/internal/db/gorm/session_store.go:52.4,52.39 1 0 +github.com/thebtf/engram/internal/db/gorm/session_store.go:59.2,66.25 2 0 +github.com/thebtf/engram/internal/db/gorm/session_store.go:66.25,68.3 1 0 +github.com/thebtf/engram/internal/db/gorm/session_store.go:70.2,70.30 1 0 +github.com/thebtf/engram/internal/db/gorm/session_store.go:70.30,72.20 1 0 +github.com/thebtf/engram/internal/db/gorm/session_store.go:72.20,74.24 2 0 +github.com/thebtf/engram/internal/db/gorm/session_store.go:74.24,76.5 1 0 +github.com/thebtf/engram/internal/db/gorm/session_store.go:77.4,80.38 1 0 +github.com/thebtf/engram/internal/db/gorm/session_store.go:80.38,82.5 1 0 +github.com/thebtf/engram/internal/db/gorm/session_store.go:85.3,88.39 2 0 +github.com/thebtf/engram/internal/db/gorm/session_store.go:88.39,90.4 1 0 +github.com/thebtf/engram/internal/db/gorm/session_store.go:91.3,91.26 1 0 +github.com/thebtf/engram/internal/db/gorm/session_store.go:94.2,94.20 1 0 +github.com/thebtf/engram/internal/db/gorm/session_store.go:99.98,101.68 2 0 +github.com/thebtf/engram/internal/db/gorm/session_store.go:101.68,102.36 1 0 +github.com/thebtf/engram/internal/db/gorm/session_store.go:102.36,104.4 1 0 +github.com/thebtf/engram/internal/db/gorm/session_store.go:105.3,105.18 1 0 +github.com/thebtf/engram/internal/db/gorm/session_store.go:107.2,107.37 1 0 +github.com/thebtf/engram/internal/db/gorm/session_store.go:112.115,116.33 2 0 +github.com/thebtf/engram/internal/db/gorm/session_store.go:116.33,117.36 1 0 +github.com/thebtf/engram/internal/db/gorm/session_store.go:117.36,119.4 1 0 +github.com/thebtf/engram/internal/db/gorm/session_store.go:120.3,120.18 1 0 +github.com/thebtf/engram/internal/db/gorm/session_store.go:122.2,122.37 1 0 +github.com/thebtf/engram/internal/db/gorm/session_store.go:127.110,129.16 2 0 +github.com/thebtf/engram/internal/db/gorm/session_store.go:129.16,131.3 1 0 +github.com/thebtf/engram/internal/db/gorm/session_store.go:132.2,132.16 1 0 +github.com/thebtf/engram/internal/db/gorm/session_store.go:132.16,134.3 1 0 +github.com/thebtf/engram/internal/db/gorm/session_store.go:135.2,135.33 1 0 +github.com/thebtf/engram/internal/db/gorm/session_store.go:142.91,151.16 3 0 +github.com/thebtf/engram/internal/db/gorm/session_store.go:151.16,153.72 1 0 +github.com/thebtf/engram/internal/db/gorm/session_store.go:153.72,157.95 1 0 +github.com/thebtf/engram/internal/db/gorm/session_store.go:157.95,159.5 1 0 +github.com/thebtf/engram/internal/db/gorm/session_store.go:161.4,164.40 2 0 +github.com/thebtf/engram/internal/db/gorm/session_store.go:164.40,166.5 1 0 +github.com/thebtf/engram/internal/db/gorm/session_store.go:167.4,167.33 1 0 +github.com/thebtf/engram/internal/db/gorm/session_store.go:169.3,169.16 1 0 +github.com/thebtf/engram/internal/db/gorm/session_store.go:172.2,172.21 1 0 +github.com/thebtf/engram/internal/db/gorm/session_store.go:176.85,180.37 2 0 +github.com/thebtf/engram/internal/db/gorm/session_store.go:180.37,182.3 1 0 +github.com/thebtf/engram/internal/db/gorm/session_store.go:183.2,183.31 1 0 +github.com/thebtf/engram/internal/db/gorm/session_store.go:188.75,196.31 4 0 +github.com/thebtf/engram/internal/db/gorm/session_store.go:196.31,198.3 1 0 +github.com/thebtf/engram/internal/db/gorm/session_store.go:199.2,199.20 1 0 +github.com/thebtf/engram/internal/db/gorm/session_store.go:204.78,211.46 2 0 +github.com/thebtf/engram/internal/db/gorm/session_store.go:211.46,213.3 1 0 +github.com/thebtf/engram/internal/db/gorm/session_store.go:214.2,214.19 1 0 +github.com/thebtf/engram/internal/db/gorm/session_store.go:220.161,222.19 2 0 +github.com/thebtf/engram/internal/db/gorm/session_store.go:222.19,224.3 1 0 +github.com/thebtf/engram/internal/db/gorm/session_store.go:225.2,225.20 1 0 +github.com/thebtf/engram/internal/db/gorm/session_store.go:225.20,227.3 1 0 +github.com/thebtf/engram/internal/db/gorm/session_store.go:228.2,228.14 1 0 +github.com/thebtf/engram/internal/db/gorm/session_store.go:228.14,230.3 1 0 +github.com/thebtf/engram/internal/db/gorm/session_store.go:231.2,231.12 1 0 +github.com/thebtf/engram/internal/db/gorm/session_store.go:231.12,233.3 1 0 +github.com/thebtf/engram/internal/db/gorm/session_store.go:235.2,236.46 2 0 +github.com/thebtf/engram/internal/db/gorm/session_store.go:236.46,238.3 1 0 +github.com/thebtf/engram/internal/db/gorm/session_store.go:240.2,244.33 2 0 +github.com/thebtf/engram/internal/db/gorm/session_store.go:244.33,246.3 1 0 +github.com/thebtf/engram/internal/db/gorm/session_store.go:248.2,249.22 2 0 +github.com/thebtf/engram/internal/db/gorm/session_store.go:249.22,251.3 1 0 +github.com/thebtf/engram/internal/db/gorm/session_store.go:252.2,252.24 1 0 +github.com/thebtf/engram/internal/db/gorm/session_store.go:257.115,258.67 1 0 +github.com/thebtf/engram/internal/db/gorm/session_store.go:258.67,260.17 2 0 +github.com/thebtf/engram/internal/db/gorm/session_store.go:260.17,262.4 1 0 +github.com/thebtf/engram/internal/db/gorm/session_store.go:264.3,264.18 1 0 +github.com/thebtf/engram/internal/db/gorm/session_store.go:264.18,265.24 1 0 +github.com/thebtf/engram/internal/db/gorm/session_store.go:265.24,267.5 1 0 +github.com/thebtf/engram/internal/db/gorm/session_store.go:269.4,286.33 4 0 +github.com/thebtf/engram/internal/db/gorm/session_store.go:286.33,288.5 1 0 +github.com/thebtf/engram/internal/db/gorm/session_store.go:289.4,289.38 1 0 +github.com/thebtf/engram/internal/db/gorm/session_store.go:289.38,294.19 3 0 +github.com/thebtf/engram/internal/db/gorm/session_store.go:294.19,295.48 1 0 +github.com/thebtf/engram/internal/db/gorm/session_store.go:295.48,297.7 1 0 +github.com/thebtf/engram/internal/db/gorm/session_store.go:298.6,298.16 1 0 +github.com/thebtf/engram/internal/db/gorm/session_store.go:300.5,300.21 1 0 +github.com/thebtf/engram/internal/db/gorm/session_store.go:304.3,305.25 2 0 +github.com/thebtf/engram/internal/db/gorm/session_store.go:305.25,307.4 1 0 +github.com/thebtf/engram/internal/db/gorm/session_store.go:308.3,308.28 1 0 +github.com/thebtf/engram/internal/db/gorm/session_store.go:308.28,309.34 1 0 +github.com/thebtf/engram/internal/db/gorm/session_store.go:309.34,311.5 1 0 +github.com/thebtf/engram/internal/db/gorm/session_store.go:312.4,312.139 1 0 +github.com/thebtf/engram/internal/db/gorm/session_store.go:315.3,322.26 2 0 +github.com/thebtf/engram/internal/db/gorm/session_store.go:322.26,324.4 1 0 +github.com/thebtf/engram/internal/db/gorm/session_store.go:325.3,325.30 1 0 +github.com/thebtf/engram/internal/db/gorm/session_store.go:325.30,327.4 1 0 +github.com/thebtf/engram/internal/db/gorm/session_store.go:330.3,335.45 3 0 +github.com/thebtf/engram/internal/db/gorm/session_store.go:335.45,337.4 1 0 +github.com/thebtf/engram/internal/db/gorm/session_store.go:338.3,338.17 1 0 +github.com/thebtf/engram/internal/db/gorm/session_store.go:338.17,340.4 1 0 +github.com/thebtf/engram/internal/db/gorm/session_store.go:341.3,341.58 1 0 +github.com/thebtf/engram/internal/db/gorm/session_store.go:341.58,342.40 1 0 +github.com/thebtf/engram/internal/db/gorm/session_store.go:342.40,344.5 1 0 +github.com/thebtf/engram/internal/db/gorm/session_store.go:345.4,345.147 1 0 +github.com/thebtf/engram/internal/db/gorm/session_store.go:348.3,348.69 1 0 +github.com/thebtf/engram/internal/db/gorm/session_store.go:354.90,355.21 1 0 +github.com/thebtf/engram/internal/db/gorm/session_store.go:355.21,357.3 1 0 +github.com/thebtf/engram/internal/db/gorm/session_store.go:358.2,363.16 3 0 +github.com/thebtf/engram/internal/db/gorm/session_store.go:363.16,364.45 1 0 +github.com/thebtf/engram/internal/db/gorm/session_store.go:364.45,366.4 1 0 +github.com/thebtf/engram/internal/db/gorm/session_store.go:367.3,367.17 1 0 +github.com/thebtf/engram/internal/db/gorm/session_store.go:369.2,369.24 1 0 +github.com/thebtf/engram/internal/db/gorm/session_store.go:369.24,371.3 1 0 +github.com/thebtf/engram/internal/db/gorm/session_store.go:372.2,372.16 1 0 +github.com/thebtf/engram/internal/db/gorm/session_store.go:378.97,381.96 2 0 +github.com/thebtf/engram/internal/db/gorm/session_store.go:381.96,384.73 3 0 +github.com/thebtf/engram/internal/db/gorm/session_store.go:384.73,386.4 1 0 +github.com/thebtf/engram/internal/db/gorm/session_store.go:387.3,387.46 1 0 +github.com/thebtf/engram/internal/db/gorm/session_store.go:387.46,389.4 1 0 +github.com/thebtf/engram/internal/db/gorm/session_store.go:392.2,393.102 2 0 +github.com/thebtf/engram/internal/db/gorm/session_store.go:393.102,395.3 1 0 +github.com/thebtf/engram/internal/db/gorm/session_store.go:395.8,395.51 1 0 +github.com/thebtf/engram/internal/db/gorm/session_store.go:395.51,397.3 1 0 +github.com/thebtf/engram/internal/db/gorm/session_store.go:397.8,399.3 1 0 +github.com/thebtf/engram/internal/db/gorm/session_store.go:403.101,408.25 2 0 +github.com/thebtf/engram/internal/db/gorm/session_store.go:408.25,410.3 1 0 +github.com/thebtf/engram/internal/db/gorm/session_store.go:411.2,411.30 1 0 +github.com/thebtf/engram/internal/db/gorm/session_store.go:411.30,413.3 1 0 +github.com/thebtf/engram/internal/db/gorm/session_store.go:414.2,414.12 1 0 +github.com/thebtf/engram/internal/db/gorm/session_store.go:421.116,428.25 2 0 +github.com/thebtf/engram/internal/db/gorm/session_store.go:428.25,430.3 1 0 +github.com/thebtf/engram/internal/db/gorm/session_store.go:431.2,431.37 1 0 +github.com/thebtf/engram/internal/db/gorm/session_store.go:436.100,440.2 1 0 +github.com/thebtf/engram/internal/db/gorm/session_store.go:451.89,464.16 4 0 +github.com/thebtf/engram/internal/db/gorm/session_store.go:464.16,466.3 1 0 +github.com/thebtf/engram/internal/db/gorm/session_store.go:467.2,468.24 2 0 +github.com/thebtf/engram/internal/db/gorm/session_store.go:468.24,474.3 1 0 +github.com/thebtf/engram/internal/db/gorm/session_store.go:475.2,475.17 1 0 +github.com/thebtf/engram/internal/db/gorm/session_store.go:488.116,494.15 2 0 +github.com/thebtf/engram/internal/db/gorm/session_store.go:494.15,496.3 1 0 +github.com/thebtf/engram/internal/db/gorm/session_store.go:499.2,507.19 3 0 +github.com/thebtf/engram/internal/db/gorm/session_store.go:507.19,509.3 1 0 +github.com/thebtf/engram/internal/db/gorm/session_store.go:511.2,512.43 2 0 +github.com/thebtf/engram/internal/db/gorm/session_store.go:512.43,514.3 1 0 +github.com/thebtf/engram/internal/db/gorm/session_store.go:516.2,517.24 2 0 +github.com/thebtf/engram/internal/db/gorm/session_store.go:517.24,519.21 2 0 +github.com/thebtf/engram/internal/db/gorm/session_store.go:519.21,521.4 1 0 +github.com/thebtf/engram/internal/db/gorm/session_store.go:522.3,527.4 1 0 +github.com/thebtf/engram/internal/db/gorm/session_store.go:529.2,529.17 1 0 +github.com/thebtf/engram/internal/db/gorm/session_store.go:534.109,540.2 2 0 +github.com/thebtf/engram/internal/db/gorm/session_store.go:543.60,563.2 1 0 +github.com/thebtf/engram/internal/db/gorm/settings_store.go:32.52,34.2 1 0 +github.com/thebtf/engram/internal/db/gorm/settings_store.go:40.105,41.15 1 0 +github.com/thebtf/engram/internal/db/gorm/settings_store.go:41.15,43.3 1 0 +github.com/thebtf/engram/internal/db/gorm/settings_store.go:44.2,44.18 1 0 +github.com/thebtf/engram/internal/db/gorm/settings_store.go:44.18,46.3 1 0 +github.com/thebtf/engram/internal/db/gorm/settings_store.go:47.2,47.18 1 0 +github.com/thebtf/engram/internal/db/gorm/settings_store.go:47.18,49.21 1 0 +github.com/thebtf/engram/internal/db/gorm/settings_store.go:49.21,51.4 1 0 +github.com/thebtf/engram/internal/db/gorm/settings_store.go:52.3,52.34 1 0 +github.com/thebtf/engram/internal/db/gorm/settings_store.go:52.34,54.4 1 0 +github.com/thebtf/engram/internal/db/gorm/settings_store.go:55.3,55.40 1 0 +github.com/thebtf/engram/internal/db/gorm/settings_store.go:55.40,57.4 1 0 +github.com/thebtf/engram/internal/db/gorm/settings_store.go:58.8,58.39 1 0 +github.com/thebtf/engram/internal/db/gorm/settings_store.go:58.39,60.3 1 0 +github.com/thebtf/engram/internal/db/gorm/settings_store.go:62.2,64.32 3 0 +github.com/thebtf/engram/internal/db/gorm/settings_store.go:64.32,66.3 1 0 +github.com/thebtf/engram/internal/db/gorm/settings_store.go:72.2,73.69 2 0 +github.com/thebtf/engram/internal/db/gorm/settings_store.go:73.69,78.10 3 0 +github.com/thebtf/engram/internal/db/gorm/settings_store.go:79.38,92.47 2 0 +github.com/thebtf/engram/internal/db/gorm/settings_store.go:92.47,94.5 1 0 +github.com/thebtf/engram/internal/db/gorm/settings_store.go:95.4,96.14 2 0 +github.com/thebtf/engram/internal/db/gorm/settings_store.go:97.19,98.14 1 0 +github.com/thebtf/engram/internal/db/gorm/settings_store.go:99.11,110.104 2 0 +github.com/thebtf/engram/internal/db/gorm/settings_store.go:110.104,112.5 1 0 +github.com/thebtf/engram/internal/db/gorm/settings_store.go:113.4,113.47 1 0 +github.com/thebtf/engram/internal/db/gorm/settings_store.go:116.2,116.18 1 0 +github.com/thebtf/engram/internal/db/gorm/settings_store.go:116.18,118.3 1 0 +github.com/thebtf/engram/internal/db/gorm/settings_store.go:119.2,119.45 1 0 +github.com/thebtf/engram/internal/db/gorm/settings_store.go:123.92,124.15 1 0 +github.com/thebtf/engram/internal/db/gorm/settings_store.go:124.15,126.3 1 0 +github.com/thebtf/engram/internal/db/gorm/settings_store.go:127.2,131.16 3 0 +github.com/thebtf/engram/internal/db/gorm/settings_store.go:131.16,133.3 1 0 +github.com/thebtf/engram/internal/db/gorm/settings_store.go:134.2,134.42 1 0 +github.com/thebtf/engram/internal/db/gorm/settings_store.go:140.83,146.16 3 0 +github.com/thebtf/engram/internal/db/gorm/settings_store.go:146.16,148.3 1 0 +github.com/thebtf/engram/internal/db/gorm/settings_store.go:149.2,150.22 2 0 +github.com/thebtf/engram/internal/db/gorm/settings_store.go:150.22,152.3 1 0 +github.com/thebtf/engram/internal/db/gorm/settings_store.go:153.2,153.20 1 0 +github.com/thebtf/engram/internal/db/gorm/settings_store.go:159.71,160.15 1 0 +github.com/thebtf/engram/internal/db/gorm/settings_store.go:160.15,162.3 1 0 +github.com/thebtf/engram/internal/db/gorm/settings_store.go:163.2,175.25 3 0 +github.com/thebtf/engram/internal/db/gorm/settings_store.go:175.25,177.3 1 0 +github.com/thebtf/engram/internal/db/gorm/settings_store.go:178.2,178.30 1 0 +github.com/thebtf/engram/internal/db/gorm/settings_store.go:178.30,180.3 1 0 +github.com/thebtf/engram/internal/db/gorm/settings_store.go:181.2,181.12 1 0 +github.com/thebtf/engram/internal/db/gorm/settings_store.go:185.69,200.2 1 0 +github.com/thebtf/engram/internal/db/gorm/snapshot_store.go:34.39,34.69 1 3 +github.com/thebtf/engram/internal/db/gorm/snapshot_store.go:39.51,40.17 1 13 +github.com/thebtf/engram/internal/db/gorm/snapshot_store.go:40.17,42.3 1 9 +github.com/thebtf/engram/internal/db/gorm/snapshot_store.go:44.2,45.22 2 4 +github.com/thebtf/engram/internal/db/gorm/snapshot_store.go:45.22,46.12 1 4 +github.com/thebtf/engram/internal/db/gorm/snapshot_store.go:46.12,48.4 1 0 +github.com/thebtf/engram/internal/db/gorm/snapshot_store.go:49.3,49.28 1 4 +github.com/thebtf/engram/internal/db/gorm/snapshot_store.go:51.2,52.15 2 4 +github.com/thebtf/engram/internal/db/gorm/snapshot_store.go:55.50,56.16 1 8 +github.com/thebtf/engram/internal/db/gorm/snapshot_store.go:56.16,59.3 2 0 +github.com/thebtf/engram/internal/db/gorm/snapshot_store.go:61.2,61.25 1 8 +github.com/thebtf/engram/internal/db/gorm/snapshot_store.go:62.14,63.41 1 0 +github.com/thebtf/engram/internal/db/gorm/snapshot_store.go:64.14,65.33 1 8 +github.com/thebtf/engram/internal/db/gorm/snapshot_store.go:66.15,68.13 2 0 +github.com/thebtf/engram/internal/db/gorm/snapshot_store.go:70.2,70.72 1 0 +github.com/thebtf/engram/internal/db/gorm/snapshot_store.go:74.57,75.26 1 8 +github.com/thebtf/engram/internal/db/gorm/snapshot_store.go:75.26,78.3 2 6 +github.com/thebtf/engram/internal/db/gorm/snapshot_store.go:80.2,80.54 1 2 +github.com/thebtf/engram/internal/db/gorm/snapshot_store.go:80.54,82.3 1 2 +github.com/thebtf/engram/internal/db/gorm/snapshot_store.go:83.2,83.13 1 2 +github.com/thebtf/engram/internal/db/gorm/snapshot_store.go:83.13,86.3 2 0 +github.com/thebtf/engram/internal/db/gorm/snapshot_store.go:88.2,90.31 3 2 +github.com/thebtf/engram/internal/db/gorm/snapshot_store.go:90.31,91.33 1 4 +github.com/thebtf/engram/internal/db/gorm/snapshot_store.go:91.33,93.18 2 2 +github.com/thebtf/engram/internal/db/gorm/snapshot_store.go:93.18,96.19 3 2 +github.com/thebtf/engram/internal/db/gorm/snapshot_store.go:96.19,98.6 1 0 +github.com/thebtf/engram/internal/db/gorm/snapshot_store.go:99.5,99.25 1 2 +github.com/thebtf/engram/internal/db/gorm/snapshot_store.go:101.4,101.17 1 2 +github.com/thebtf/engram/internal/db/gorm/snapshot_store.go:104.2,105.12 2 2 +github.com/thebtf/engram/internal/db/gorm/snapshot_store.go:109.62,111.22 2 6 +github.com/thebtf/engram/internal/db/gorm/snapshot_store.go:111.22,113.3 1 0 +github.com/thebtf/engram/internal/db/gorm/snapshot_store.go:114.2,115.18 2 6 +github.com/thebtf/engram/internal/db/gorm/snapshot_store.go:115.18,117.3 1 0 +github.com/thebtf/engram/internal/db/gorm/snapshot_store.go:118.2,132.35 2 6 +github.com/thebtf/engram/internal/db/gorm/snapshot_store.go:132.35,134.3 1 0 +github.com/thebtf/engram/internal/db/gorm/snapshot_store.go:135.2,135.13 1 6 +github.com/thebtf/engram/internal/db/gorm/snapshot_store.go:139.64,141.22 2 6 +github.com/thebtf/engram/internal/db/gorm/snapshot_store.go:141.22,143.3 1 0 +github.com/thebtf/engram/internal/db/gorm/snapshot_store.go:144.2,145.18 2 6 +github.com/thebtf/engram/internal/db/gorm/snapshot_store.go:145.18,147.3 1 0 +github.com/thebtf/engram/internal/db/gorm/snapshot_store.go:148.2,161.20 2 6 +github.com/thebtf/engram/internal/db/gorm/snapshot_store.go:161.20,163.3 1 0 +github.com/thebtf/engram/internal/db/gorm/snapshot_store.go:164.2,164.10 1 6 +github.com/thebtf/engram/internal/db/gorm/snapshot_store.go:173.51,175.2 1 72 +github.com/thebtf/engram/internal/db/gorm/snapshot_store.go:180.114,182.2 1 0 +github.com/thebtf/engram/internal/db/gorm/snapshot_store.go:184.129,185.17 1 6 +github.com/thebtf/engram/internal/db/gorm/snapshot_store.go:185.17,187.3 1 0 +github.com/thebtf/engram/internal/db/gorm/snapshot_store.go:188.2,188.27 1 6 +github.com/thebtf/engram/internal/db/gorm/snapshot_store.go:188.27,190.3 1 0 +github.com/thebtf/engram/internal/db/gorm/snapshot_store.go:191.2,193.25 3 6 +github.com/thebtf/engram/internal/db/gorm/snapshot_store.go:193.25,195.3 1 0 +github.com/thebtf/engram/internal/db/gorm/snapshot_store.go:196.2,196.35 1 6 +github.com/thebtf/engram/internal/db/gorm/snapshot_store.go:201.101,203.101 2 0 +github.com/thebtf/engram/internal/db/gorm/snapshot_store.go:203.101,205.3 1 0 +github.com/thebtf/engram/internal/db/gorm/snapshot_store.go:206.2,206.36 1 0 +github.com/thebtf/engram/internal/db/gorm/snapshot_store.go:212.125,213.15 1 0 +github.com/thebtf/engram/internal/db/gorm/snapshot_store.go:213.15,215.3 1 0 +github.com/thebtf/engram/internal/db/gorm/snapshot_store.go:216.2,220.33 2 0 +github.com/thebtf/engram/internal/db/gorm/snapshot_store.go:220.33,222.3 1 0 +github.com/thebtf/engram/internal/db/gorm/snapshot_store.go:223.2,223.36 1 0 +github.com/thebtf/engram/internal/db/gorm/snapshot_store.go:228.96,230.68 2 0 +github.com/thebtf/engram/internal/db/gorm/snapshot_store.go:230.68,232.3 1 0 +github.com/thebtf/engram/internal/db/gorm/snapshot_store.go:233.2,233.36 1 0 +github.com/thebtf/engram/internal/db/gorm/snapshot_store.go:238.140,239.16 1 0 +github.com/thebtf/engram/internal/db/gorm/snapshot_store.go:239.16,241.3 1 0 +github.com/thebtf/engram/internal/db/gorm/snapshot_store.go:242.2,243.18 2 0 +github.com/thebtf/engram/internal/db/gorm/snapshot_store.go:243.18,245.3 1 0 +github.com/thebtf/engram/internal/db/gorm/snapshot_store.go:246.2,246.17 1 0 +github.com/thebtf/engram/internal/db/gorm/snapshot_store.go:246.17,248.3 1 0 +github.com/thebtf/engram/internal/db/gorm/snapshot_store.go:249.2,250.44 2 0 +github.com/thebtf/engram/internal/db/gorm/snapshot_store.go:250.44,252.3 1 0 +github.com/thebtf/engram/internal/db/gorm/snapshot_store.go:253.2,254.22 2 0 +github.com/thebtf/engram/internal/db/gorm/snapshot_store.go:254.22,256.3 1 0 +github.com/thebtf/engram/internal/db/gorm/snapshot_store.go:257.2,257.17 1 0 +github.com/thebtf/engram/internal/db/gorm/snapshot_store.go:261.86,263.2 1 0 +github.com/thebtf/engram/internal/db/gorm/snapshot_store.go:268.125,269.15 1 0 +github.com/thebtf/engram/internal/db/gorm/snapshot_store.go:269.15,271.3 1 0 +github.com/thebtf/engram/internal/db/gorm/snapshot_store.go:272.2,279.22 2 0 +github.com/thebtf/engram/internal/db/gorm/snapshot_store.go:279.22,281.3 1 0 +github.com/thebtf/engram/internal/db/gorm/snapshot_store.go:282.2,282.27 1 0 +github.com/thebtf/engram/internal/db/gorm/snapshot_store.go:282.27,284.3 1 0 +github.com/thebtf/engram/internal/db/gorm/snapshot_store.go:285.2,285.12 1 0 +github.com/thebtf/engram/internal/db/gorm/snapshot_store.go:289.75,294.22 2 0 +github.com/thebtf/engram/internal/db/gorm/snapshot_store.go:294.22,296.3 1 0 +github.com/thebtf/engram/internal/db/gorm/snapshot_store.go:297.2,297.27 1 0 +github.com/thebtf/engram/internal/db/gorm/snapshot_store.go:297.27,299.3 1 0 +github.com/thebtf/engram/internal/db/gorm/snapshot_store.go:300.2,300.12 1 0 +github.com/thebtf/engram/internal/db/gorm/snapshot_store.go:310.118,311.33 1 0 +github.com/thebtf/engram/internal/db/gorm/snapshot_store.go:311.33,313.3 1 0 +github.com/thebtf/engram/internal/db/gorm/snapshot_store.go:315.2,315.67 1 0 +github.com/thebtf/engram/internal/db/gorm/snapshot_store.go:315.67,317.3 1 0 +github.com/thebtf/engram/internal/db/gorm/snapshot_store.go:320.133,321.33 1 3 +github.com/thebtf/engram/internal/db/gorm/snapshot_store.go:321.33,323.3 1 0 +github.com/thebtf/engram/internal/db/gorm/snapshot_store.go:326.2,329.33 2 3 +github.com/thebtf/engram/internal/db/gorm/snapshot_store.go:329.33,331.3 1 0 +github.com/thebtf/engram/internal/db/gorm/snapshot_store.go:334.2,335.65 2 3 +github.com/thebtf/engram/internal/db/gorm/snapshot_store.go:335.65,336.76 1 3 +github.com/thebtf/engram/internal/db/gorm/snapshot_store.go:336.76,338.4 1 0 +github.com/thebtf/engram/internal/db/gorm/snapshot_store.go:344.2,345.42 2 3 +github.com/thebtf/engram/internal/db/gorm/snapshot_store.go:345.42,347.67 2 3 +github.com/thebtf/engram/internal/db/gorm/snapshot_store.go:347.67,349.4 1 3 +github.com/thebtf/engram/internal/db/gorm/snapshot_store.go:350.3,350.47 1 3 +github.com/thebtf/engram/internal/db/gorm/snapshot_store.go:354.2,356.43 3 3 +github.com/thebtf/engram/internal/db/gorm/snapshot_store.go:356.43,357.28 1 0 +github.com/thebtf/engram/internal/db/gorm/snapshot_store.go:357.28,358.12 1 0 +github.com/thebtf/engram/internal/db/gorm/snapshot_store.go:360.3,361.42 2 0 +github.com/thebtf/engram/internal/db/gorm/snapshot_store.go:363.2,363.39 1 3 +github.com/thebtf/engram/internal/db/gorm/snapshot_store.go:363.39,364.28 1 3 +github.com/thebtf/engram/internal/db/gorm/snapshot_store.go:364.28,365.12 1 0 +github.com/thebtf/engram/internal/db/gorm/snapshot_store.go:367.3,368.42 2 3 +github.com/thebtf/engram/internal/db/gorm/snapshot_store.go:372.2,373.16 2 3 +github.com/thebtf/engram/internal/db/gorm/snapshot_store.go:373.16,375.3 1 0 +github.com/thebtf/engram/internal/db/gorm/snapshot_store.go:377.2,383.22 2 3 +github.com/thebtf/engram/internal/db/gorm/snapshot_store.go:383.22,385.3 1 1 +github.com/thebtf/engram/internal/db/gorm/snapshot_store.go:386.2,386.12 1 2 +github.com/thebtf/engram/internal/db/gorm/snapshot_store.go:391.95,395.22 2 0 +github.com/thebtf/engram/internal/db/gorm/snapshot_store.go:395.22,397.3 1 0 +github.com/thebtf/engram/internal/db/gorm/snapshot_store.go:398.2,398.30 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:23.54,24.17 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:24.17,26.3 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:27.2,27.23 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:30.53,31.16 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:31.16,34.3 2 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:35.2,35.25 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:36.14,37.30 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:38.14,39.17 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:40.10,41.77 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:43.2,43.18 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:43.18,45.3 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:46.2,46.12 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:59.43,59.75 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:72.43,72.75 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:83.69,85.2 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:88.120,89.38 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:89.38,91.3 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:92.2,92.21 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:92.21,94.3 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:95.2,95.58 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:95.58,97.3 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:98.2,99.16 2 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:99.16,101.3 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:102.2,103.16 2 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:103.16,105.3 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:106.2,107.16 2 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:107.16,109.3 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:111.2,128.16 4 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:128.16,130.3 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:132.2,133.12 2 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:137.115,138.38 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:138.38,140.3 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:141.2,141.21 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:141.21,143.3 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:144.2,145.99 2 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:145.99,147.3 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:148.2,149.16 2 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:149.16,151.3 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:152.2,152.19 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:156.119,157.38 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:157.38,159.3 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:160.2,160.19 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:160.19,162.3 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:163.2,164.21 2 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:164.21,166.3 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:167.2,167.26 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:167.26,169.3 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:170.2,189.16 4 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:189.16,191.3 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:193.2,196.12 4 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:200.114,201.38 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:201.38,203.3 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:204.2,205.16 2 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:205.16,207.3 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:208.2,208.38 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:211.104,212.19 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:212.19,214.3 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:215.2,216.94 2 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:216.94,218.3 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:219.2,219.17 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:222.76,229.2 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:232.131,234.29 2 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:234.29,236.3 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:237.2,237.71 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:237.71,239.3 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:240.2,240.38 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:240.38,242.3 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:244.2,252.23 8 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:252.23,254.108 2 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:254.108,256.4 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:257.3,258.24 2 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:258.24,260.18 2 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:260.18,262.5 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:263.4,264.90 2 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:266.3,267.17 2 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:267.17,269.4 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:270.3,271.17 2 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:271.17,273.4 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:274.3,275.17 2 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:275.17,277.4 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:278.3,279.32 2 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:279.32,281.4 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:281.9,283.4 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:284.3,285.85 2 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:286.8,287.28 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:287.28,289.4 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:290.3,291.17 2 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:291.17,293.4 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:294.3,297.75 4 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:300.2,320.20 4 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:323.114,331.2 7 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:333.103,334.22 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:334.22,336.3 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:337.2,338.31 2 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:338.31,340.3 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:341.2,347.4 2 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:347.4,348.31 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:348.31,351.4 2 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:353.2,353.20 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:353.20,355.3 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:356.2,357.26 2 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:357.26,359.3 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:360.2,361.30 2 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:361.30,363.3 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:364.2,364.16 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:367.89,368.30 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:368.30,370.3 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:371.2,372.39 2 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:372.39,373.16 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:374.36,375.31 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:375.31,377.5 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:378.36,379.29 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:379.29,381.5 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:382.33,383.28 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:383.28,385.5 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:386.4,386.19 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:386.19,388.5 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:389.33,390.28 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:390.28,392.5 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:393.4,393.19 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:393.19,395.5 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:396.11,397.77 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:400.2,400.12 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:403.102,404.31 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:404.31,405.20 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:405.20,407.4 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:409.2,409.14 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:412.84,414.16 2 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:414.16,416.3 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:417.2,418.16 2 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:418.16,420.3 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:421.2,422.16 2 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:422.16,424.3 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:425.2,429.8 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:432.88,454.2 5 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:456.51,457.20 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:457.20,459.3 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:460.2,460.45 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:463.109,466.32 3 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:466.32,468.29 2 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:468.29,470.4 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:471.3,472.27 2 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:474.2,475.96 2 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:475.96,476.70 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:476.70,478.4 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:480.2,480.13 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:483.89,485.2 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:487.78,489.27 2 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:489.27,491.3 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:492.2,492.29 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:492.29,494.29 2 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:494.29,495.12 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:497.3,498.27 2 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:500.2,500.13 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:503.75,505.19 2 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:505.19,507.3 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:508.2,509.56 2 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:509.56,511.3 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:512.2,512.65 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:512.65,514.3 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:515.2,515.59 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:515.59,517.3 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:518.2,519.22 2 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:519.22,521.3 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:522.2,522.102 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:525.87,527.19 2 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:527.19,529.3 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:530.2,530.189 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:533.56,534.27 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:535.16,536.30 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:537.21,539.26 2 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:539.26,541.11 2 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:541.11,542.13 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:544.4,544.30 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:546.3,546.34 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:547.14,548.40 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:549.10,550.20 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:554.50,556.31 2 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:556.31,558.18 2 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:558.18,559.12 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:561.3,561.35 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:563.2,563.16 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:566.40,567.29 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:567.29,569.3 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:570.2,570.12 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:573.93,575.9 2 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:575.9,577.3 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:578.2,578.32 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:581.105,583.9 2 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:583.9,585.3 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:586.2,586.38 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:589.73,590.27 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:591.29,592.45 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:592.45,594.4 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:595.3,595.19 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:595.19,597.4 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:598.3,598.31 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:598.31,600.4 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:601.3,601.16 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:602.30,608.47 2 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:608.47,610.4 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:611.3,611.50 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:611.50,613.4 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:614.3,614.36 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:614.36,616.4 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:617.3,617.21 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:618.14,619.33 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:619.33,621.4 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:622.3,622.92 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:623.10,624.92 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:628.85,629.27 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:630.35,631.45 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:631.45,633.4 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:634.3,634.19 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:634.19,636.4 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:637.3,637.37 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:637.37,639.4 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:640.3,640.16 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:641.30,647.47 2 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:647.47,649.4 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:650.3,650.56 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:650.56,652.4 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:653.3,653.48 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:653.48,655.4 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:656.3,656.27 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:657.14,658.33 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:658.33,660.4 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:661.3,661.99 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:662.10,663.104 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:667.66,669.25 2 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:669.25,671.3 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:672.2,672.33 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:672.33,674.3 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:675.2,675.26 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:678.64,679.38 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:679.38,681.3 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:682.2,682.41 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:685.76,686.38 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:686.38,688.3 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:689.2,689.42 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:692.59,693.14 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:694.103,695.14 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:696.10,697.15 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:701.71,702.14 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:703.114,704.14 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:705.10,706.15 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:710.77,711.18 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:711.18,713.3 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:714.2,715.16 2 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:715.16,717.3 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:718.2,718.28 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:718.28,720.3 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:721.2,721.33 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:724.74,726.2 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:728.77,729.19 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:729.19,731.3 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:732.2,733.50 2 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:733.50,735.3 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:736.2,736.16 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:736.16,738.3 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:739.2,739.17 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:764.161,765.18 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:765.18,767.3 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:768.2,768.18 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:768.18,770.3 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:771.2,771.18 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:771.18,773.3 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:774.2,776.17 3 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:776.17,778.3 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:779.2,780.27 2 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:780.27,782.3 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:783.2,783.108 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:786.137,810.2 4 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:812.45,813.31 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:813.31,814.57 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:814.57,816.4 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:818.2,818.11 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:821.107,822.37 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:822.37,824.3 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:825.2,825.17 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:825.17,827.3 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:828.2,829.23 2 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:829.23,830.56 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:830.56,833.4 2 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:835.2,843.12 3 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:843.12,844.16 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:844.16,844.33 1 0 +github.com/thebtf/engram/internal/db/gorm/state_store.go:845.3,847.38 3 0 +github.com/thebtf/engram/internal/db/gorm/store.go:44.43,46.16 2 0 +github.com/thebtf/engram/internal/db/gorm/store.go:46.16,48.3 1 0 +github.com/thebtf/engram/internal/db/gorm/store.go:50.2,51.16 2 0 +github.com/thebtf/engram/internal/db/gorm/store.go:51.16,53.3 1 0 +github.com/thebtf/engram/internal/db/gorm/store.go:55.2,58.37 3 0 +github.com/thebtf/engram/internal/db/gorm/store.go:58.37,60.3 1 0 +github.com/thebtf/engram/internal/db/gorm/store.go:62.2,69.42 2 0 +github.com/thebtf/engram/internal/db/gorm/store.go:69.42,71.3 1 0 +github.com/thebtf/engram/internal/db/gorm/store.go:76.2,78.19 2 0 +github.com/thebtf/engram/internal/db/gorm/store.go:84.45,90.16 2 0 +github.com/thebtf/engram/internal/db/gorm/store.go:90.16,92.3 1 0 +github.com/thebtf/engram/internal/db/gorm/store.go:93.2,93.16 1 0 +github.com/thebtf/engram/internal/db/gorm/store.go:97.40,98.19 1 0 +github.com/thebtf/engram/internal/db/gorm/store.go:98.19,100.3 1 0 +github.com/thebtf/engram/internal/db/gorm/store.go:101.2,101.17 1 0 +github.com/thebtf/engram/internal/db/gorm/store.go:109.49,114.2 4 0 +github.com/thebtf/engram/internal/db/gorm/store.go:123.40,124.19 1 0 +github.com/thebtf/engram/internal/db/gorm/store.go:124.19,126.3 1 0 +github.com/thebtf/engram/internal/db/gorm/store.go:128.2,129.32 2 0 +github.com/thebtf/engram/internal/db/gorm/store.go:129.32,131.13 2 0 +github.com/thebtf/engram/internal/db/gorm/store.go:131.13,137.18 5 0 +github.com/thebtf/engram/internal/db/gorm/store.go:137.18,139.5 1 0 +github.com/thebtf/engram/internal/db/gorm/store.go:141.4,143.20 2 0 +github.com/thebtf/engram/internal/db/gorm/store.go:146.2,147.72 2 0 +github.com/thebtf/engram/internal/db/gorm/store.go:151.31,153.2 1 0 +github.com/thebtf/engram/internal/db/gorm/store.go:156.30,158.2 1 0 +github.com/thebtf/engram/internal/db/gorm/store.go:164.36,166.2 1 0 +github.com/thebtf/engram/internal/db/gorm/store.go:169.34,171.2 1 0 +github.com/thebtf/engram/internal/db/gorm/store.go:175.37,177.2 1 0 +github.com/thebtf/engram/internal/db/gorm/store.go:184.53,188.63 3 0 +github.com/thebtf/engram/internal/db/gorm/store.go:188.63,190.3 1 0 +github.com/thebtf/engram/internal/db/gorm/store.go:192.2,193.12 2 0 +github.com/thebtf/engram/internal/db/gorm/store.go:199.62,202.79 2 0 +github.com/thebtf/engram/internal/db/gorm/store.go:202.79,206.3 3 0 +github.com/thebtf/engram/internal/db/gorm/store.go:207.2,217.13 7 0 +github.com/thebtf/engram/internal/db/gorm/store.go:222.67,232.2 6 0 +github.com/thebtf/engram/internal/db/gorm/store.go:238.69,247.22 4 0 +github.com/thebtf/engram/internal/db/gorm/store.go:247.22,249.3 1 0 +github.com/thebtf/engram/internal/db/gorm/store.go:253.2,258.22 5 0 +github.com/thebtf/engram/internal/db/gorm/store.go:258.22,261.3 2 0 +github.com/thebtf/engram/internal/db/gorm/store.go:263.2,263.16 1 0 +github.com/thebtf/engram/internal/db/gorm/store.go:263.16,267.3 3 0 +github.com/thebtf/engram/internal/db/gorm/store.go:269.2,270.13 2 0 +github.com/thebtf/engram/internal/db/gorm/store.go:274.56,284.2 1 0 +github.com/thebtf/engram/internal/db/gorm/store.go:289.65,291.82 1 0 +github.com/thebtf/engram/internal/db/gorm/store.go:291.82,294.3 2 0 +github.com/thebtf/engram/internal/db/gorm/store.go:297.2,297.72 1 0 +github.com/thebtf/engram/internal/db/gorm/store.go:297.72,300.3 2 0 +github.com/thebtf/engram/internal/db/gorm/store.go:303.2,303.45 1 0 +github.com/thebtf/engram/internal/db/gorm/store.go:303.45,304.31 1 0 +github.com/thebtf/engram/internal/db/gorm/store.go:304.31,306.4 1 0 +github.com/thebtf/engram/internal/db/gorm/store.go:307.3,307.74 1 0 +github.com/thebtf/engram/internal/db/gorm/store.go:312.2,312.61 1 0 +github.com/thebtf/engram/internal/db/gorm/store.go:312.61,313.31 1 0 +github.com/thebtf/engram/internal/db/gorm/store.go:313.31,315.4 1 0 +github.com/thebtf/engram/internal/db/gorm/store.go:316.3,316.88 1 0 +github.com/thebtf/engram/internal/db/gorm/store.go:372.50,373.21 1 0 +github.com/thebtf/engram/internal/db/gorm/store.go:373.21,375.3 1 0 +github.com/thebtf/engram/internal/db/gorm/store.go:376.2,380.3 1 0 +github.com/thebtf/engram/internal/db/gorm/store.go:384.60,390.35 5 0 +github.com/thebtf/engram/internal/db/gorm/store.go:390.35,392.3 1 0 +github.com/thebtf/engram/internal/db/gorm/store.go:393.2,394.31 2 0 +github.com/thebtf/engram/internal/db/gorm/store.go:398.58,402.31 3 0 +github.com/thebtf/engram/internal/db/gorm/store.go:402.31,404.3 1 0 +github.com/thebtf/engram/internal/db/gorm/store.go:405.2,405.39 1 0 +github.com/thebtf/engram/internal/db/gorm/store.go:405.39,407.3 1 0 +github.com/thebtf/engram/internal/db/gorm/store.go:408.2,408.39 1 0 +github.com/thebtf/engram/internal/db/gorm/store.go:414.58,427.25 4 0 +github.com/thebtf/engram/internal/db/gorm/store.go:427.25,429.3 1 0 +github.com/thebtf/engram/internal/db/gorm/store.go:431.2,433.26 2 0 +github.com/thebtf/engram/internal/db/gorm/store.go:433.26,435.3 1 0 +github.com/thebtf/engram/internal/db/gorm/store.go:437.2,437.16 1 0 +github.com/thebtf/engram/internal/db/gorm/store.go:442.81,445.28 3 0 +github.com/thebtf/engram/internal/db/gorm/store.go:445.28,447.14 2 0 +github.com/thebtf/engram/internal/db/gorm/store.go:447.14,449.4 1 0 +github.com/thebtf/engram/internal/db/gorm/store.go:450.3,450.14 1 0 +github.com/thebtf/engram/internal/db/gorm/store.go:450.14,452.4 1 0 +github.com/thebtf/engram/internal/db/gorm/store.go:454.2,455.22 2 0 +github.com/thebtf/engram/internal/db/gorm/store.go:461.56,467.2 5 0 +github.com/thebtf/engram/internal/db/gorm/store.go:485.45,486.22 1 0 +github.com/thebtf/engram/internal/db/gorm/store.go:486.22,488.3 1 0 +github.com/thebtf/engram/internal/db/gorm/store.go:489.2,489.38 1 0 +github.com/thebtf/engram/internal/db/gorm/store.go:495.32,496.22 1 0 +github.com/thebtf/engram/internal/db/gorm/store.go:496.22,498.3 1 0 +github.com/thebtf/engram/internal/db/gorm/store.go:504.129,508.28 3 0 +github.com/thebtf/engram/internal/db/gorm/store.go:508.28,513.37 3 0 +github.com/thebtf/engram/internal/db/gorm/store.go:513.37,519.4 1 0 +github.com/thebtf/engram/internal/db/gorm/store.go:526.110,531.16 4 0 +github.com/thebtf/engram/internal/db/gorm/store.go:531.16,532.38 1 0 +github.com/thebtf/engram/internal/db/gorm/store.go:532.38,534.4 1 0 +github.com/thebtf/engram/internal/db/gorm/store.go:535.3,535.13 1 0 +github.com/thebtf/engram/internal/db/gorm/store.go:537.2,537.12 1 0 +github.com/thebtf/engram/internal/db/gorm/store.go:543.117,548.2 3 0 +github.com/thebtf/engram/internal/db/gorm/store.go:555.115,559.74 3 0 +github.com/thebtf/engram/internal/db/gorm/store.go:559.74,562.10 1 0 +github.com/thebtf/engram/internal/db/gorm/store.go:563.28,564.27 1 0 +github.com/thebtf/engram/internal/db/gorm/store.go:565.11,565.11 0 0 +github.com/thebtf/engram/internal/db/gorm/store.go:567.3,567.16 1 0 +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:21.49,23.16 2 1 +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:23.16,24.13 1 0 +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:26.2,26.21 1 1 +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:44.50,44.85 1 0 +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:81.61,83.2 1 0 +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:87.151,89.16 2 0 +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:89.16,91.3 1 0 +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:92.2,92.52 1 0 +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:97.148,99.16 2 0 +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:99.16,101.3 1 0 +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:102.2,102.57 1 0 +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:105.151,106.38 1 0 +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:106.38,108.3 1 0 +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:109.2,110.18 2 0 +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:110.18,112.3 1 0 +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:113.2,118.72 2 0 +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:118.72,120.3 1 0 +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:121.2,121.66 1 0 +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:121.66,123.3 1 0 +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:124.2,125.48 2 0 +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:125.48,127.3 1 0 +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:128.2,128.18 1 0 +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:134.120,136.38 2 0 +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:136.38,138.3 1 0 +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:139.2,139.26 1 0 +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:139.26,141.3 1 0 +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:142.2,143.16 2 0 +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:143.16,145.3 1 0 +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:146.2,147.70 2 0 +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:147.70,148.105 1 0 +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:148.105,150.4 1 0 +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:151.3,151.21 1 0 +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:151.21,153.4 1 0 +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:154.3,154.48 1 0 +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:154.48,156.4 1 0 +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:157.3,157.13 1 0 +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:158.17,160.3 1 0 +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:161.2,161.20 1 0 +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:164.48,165.29 1 0 +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:165.29,167.3 1 0 +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:168.2,168.12 1 0 +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:171.105,177.33 2 0 +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:177.33,179.3 1 0 +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:180.2,180.18 1 0 +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:183.121,185.24 2 0 +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:185.24,187.3 1 0 +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:188.2,189.26 2 0 +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:189.26,191.3 1 0 +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:192.2,194.26 3 0 +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:194.26,196.39 2 0 +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:196.39,198.4 1 0 +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:199.3,199.56 1 0 +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:201.2,202.38 2 0 +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:202.38,204.47 2 0 +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:204.47,207.26 3 0 +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:207.26,209.5 1 0 +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:210.4,210.53 1 0 +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:210.53,212.5 1 0 +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:213.4,213.36 1 0 +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:215.3,216.21 2 0 +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:216.21,218.12 2 0 +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:220.3,221.10 2 0 +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:221.10,223.12 2 0 +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:225.3,226.32 2 0 +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:226.32,228.24 2 0 +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:228.24,230.5 1 0 +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:231.4,232.28 2 0 +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:235.2,235.21 1 0 +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:238.71,239.20 1 0 +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:239.20,241.3 1 0 +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:242.2,243.30 2 0 +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:243.30,247.22 4 0 +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:247.22,249.39 2 0 +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:249.39,250.10 1 0 +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:252.4,253.7 2 0 +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:255.3,256.8 2 0 +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:258.2,258.18 1 0 +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:261.73,262.16 1 0 +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:262.16,264.3 1 0 +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:265.2,267.34 3 0 +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:267.34,268.38 1 0 +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:268.38,269.9 1 0 +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:271.3,273.20 3 0 +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:273.20,274.9 1 0 +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:276.3,276.19 1 0 +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:278.2,278.19 1 0 +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:281.58,282.67 1 0 +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:282.67,284.3 1 0 +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:285.2,285.43 1 0 +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:285.43,287.3 1 0 +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:288.2,288.43 1 0 +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:288.43,290.3 1 0 +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:291.2,291.30 1 0 +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:294.120,308.2 3 0 +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:310.79,311.45 1 0 +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:311.45,314.3 2 0 +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:315.2,315.22 1 0 +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:315.22,318.3 2 0 +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:319.2,319.70 1 0 +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:319.70,322.3 2 0 +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:323.2,324.15 2 0 +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:327.59,329.2 1 0 +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:331.99,332.64 1 0 +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:332.64,334.3 1 0 +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:335.2,335.110 1 0 +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:335.110,337.3 1 0 +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:338.2,339.15 2 0 +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:342.80,343.43 1 0 +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:343.43,345.3 1 0 +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:346.2,346.66 1 0 +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:346.66,348.3 1 0 +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:349.2,349.11 1 0 +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:352.53,354.2 1 0 +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:356.63,357.54 1 0 +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:357.54,359.3 1 0 +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:360.2,361.15 2 0 +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:364.66,365.18 1 0 +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:365.18,367.3 1 0 +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:368.2,369.15 2 0 +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:372.98,374.27 2 0 +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:374.27,386.3 1 0 +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:387.2,387.15 1 0 +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:390.101,392.29 2 0 +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:392.29,404.3 1 0 +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:405.2,405.16 1 0 +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:408.148,409.31 1 0 +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:409.31,411.3 1 0 +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:412.2,413.37 2 0 +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:413.37,420.3 1 0 +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:421.2,421.12 1 0 +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:424.80,428.2 3 0 +github.com/thebtf/engram/internal/db/gorm/temporal_truth_store.go:430.69,432.2 1 2 +github.com/thebtf/engram/internal/db/gorm/token_store.go:19.46,21.2 1 0 +github.com/thebtf/engram/internal/db/gorm/token_store.go:24.113,26.2 1 0 +github.com/thebtf/engram/internal/db/gorm/token_store.go:30.152,33.44 3 0 +github.com/thebtf/engram/internal/db/gorm/token_store.go:33.44,35.3 1 0 +github.com/thebtf/engram/internal/db/gorm/token_store.go:36.2,36.25 1 0 +github.com/thebtf/engram/internal/db/gorm/token_store.go:36.25,38.3 1 0 +github.com/thebtf/engram/internal/db/gorm/token_store.go:39.2,48.66 2 0 +github.com/thebtf/engram/internal/db/gorm/token_store.go:48.66,50.3 1 0 +github.com/thebtf/engram/internal/db/gorm/token_store.go:52.2,52.19 1 0 +github.com/thebtf/engram/internal/db/gorm/token_store.go:58.68,64.2 3 0 +github.com/thebtf/engram/internal/db/gorm/token_store.go:70.91,75.16 3 0 +github.com/thebtf/engram/internal/db/gorm/token_store.go:75.16,77.3 1 0 +github.com/thebtf/engram/internal/db/gorm/token_store.go:78.2,78.20 1 0 +github.com/thebtf/engram/internal/db/gorm/token_store.go:82.67,91.30 3 0 +github.com/thebtf/engram/internal/db/gorm/token_store.go:91.30,93.3 1 0 +github.com/thebtf/engram/internal/db/gorm/token_store.go:94.2,94.21 1 0 +github.com/thebtf/engram/internal/db/gorm/token_store.go:98.75,106.2 1 0 +github.com/thebtf/engram/internal/db/gorm/token_store.go:109.80,114.2 1 0 +github.com/thebtf/engram/internal/db/gorm/token_store.go:117.81,120.35 3 0 +github.com/thebtf/engram/internal/db/gorm/token_store.go:120.35,122.3 1 0 +github.com/thebtf/engram/internal/db/gorm/token_store.go:123.2,123.16 1 0 +github.com/thebtf/engram/internal/db/gorm/token_store.go:123.16,125.3 1 0 +github.com/thebtf/engram/internal/db/gorm/token_store.go:126.2,126.20 1 0 +github.com/thebtf/engram/internal/db/gorm/token_store.go:132.92,133.22 1 0 +github.com/thebtf/engram/internal/db/gorm/token_store.go:133.22,135.3 1 0 +github.com/thebtf/engram/internal/db/gorm/token_store.go:140.2,140.67 1 0 +github.com/thebtf/engram/internal/db/gorm/token_store.go:140.67,142.33 2 0 +github.com/thebtf/engram/internal/db/gorm/token_store.go:142.33,148.26 1 0 +github.com/thebtf/engram/internal/db/gorm/token_store.go:148.26,150.5 1 0 +github.com/thebtf/engram/internal/db/gorm/token_store.go:152.3,152.13 1 0 +github.com/thebtf/engram/internal/db/gorm/transcript_store.go:25.45,25.77 1 0 +github.com/thebtf/engram/internal/db/gorm/transcript_store.go:33.55,35.2 1 0 +github.com/thebtf/engram/internal/db/gorm/transcript_store.go:43.83,44.20 1 0 +github.com/thebtf/engram/internal/db/gorm/transcript_store.go:44.20,46.3 1 0 +github.com/thebtf/engram/internal/db/gorm/transcript_store.go:47.2,47.26 1 0 +github.com/thebtf/engram/internal/db/gorm/transcript_store.go:47.26,49.3 1 0 +github.com/thebtf/engram/internal/db/gorm/transcript_store.go:52.2,52.66 1 0 +github.com/thebtf/engram/internal/db/gorm/transcript_store.go:57.119,63.16 3 0 +github.com/thebtf/engram/internal/db/gorm/transcript_store.go:63.16,65.3 1 0 +github.com/thebtf/engram/internal/db/gorm/transcript_store.go:66.2,66.18 1 0 +github.com/thebtf/engram/internal/db/gorm/transcript_store.go:71.81,72.19 1 0 +github.com/thebtf/engram/internal/db/gorm/transcript_store.go:72.19,74.3 1 0 +github.com/thebtf/engram/internal/db/gorm/transcript_store.go:75.2,79.16 2 0 +github.com/thebtf/engram/internal/db/gorm/transcript_store.go:79.16,81.3 1 0 +github.com/thebtf/engram/internal/db/gorm/transcript_store.go:82.2,82.12 1 0 +github.com/thebtf/engram/internal/db/gorm/transcript_store.go:87.78,91.25 2 0 +github.com/thebtf/engram/internal/db/gorm/transcript_store.go:91.25,93.3 1 0 +github.com/thebtf/engram/internal/db/gorm/transcript_store.go:94.2,94.33 1 0 +github.com/thebtf/engram/internal/db/gorm/transcript_store.go:100.99,101.15 1 0 +github.com/thebtf/engram/internal/db/gorm/transcript_store.go:101.15,103.3 1 0 +github.com/thebtf/engram/internal/db/gorm/transcript_store.go:109.2,113.25 3 0 +github.com/thebtf/engram/internal/db/gorm/transcript_store.go:113.25,115.3 1 0 +github.com/thebtf/engram/internal/db/gorm/transcript_store.go:116.2,116.33 1 0 +github.com/thebtf/engram/internal/db/gorm/user_store.go:17.43,19.2 1 0 +github.com/thebtf/engram/internal/db/gorm/user_store.go:22.81,29.48 2 0 +github.com/thebtf/engram/internal/db/gorm/user_store.go:29.48,31.3 1 0 +github.com/thebtf/engram/internal/db/gorm/user_store.go:32.2,32.18 1 0 +github.com/thebtf/engram/internal/db/gorm/user_store.go:36.65,38.74 2 0 +github.com/thebtf/engram/internal/db/gorm/user_store.go:38.74,40.3 1 0 +github.com/thebtf/engram/internal/db/gorm/user_store.go:41.2,41.19 1 0 +github.com/thebtf/engram/internal/db/gorm/user_store.go:45.58,47.52 2 0 +github.com/thebtf/engram/internal/db/gorm/user_store.go:47.52,49.3 1 0 +github.com/thebtf/engram/internal/db/gorm/user_store.go:50.2,50.19 1 0 +github.com/thebtf/engram/internal/db/gorm/user_store.go:54.50,56.72 2 0 +github.com/thebtf/engram/internal/db/gorm/user_store.go:56.72,58.3 1 0 +github.com/thebtf/engram/internal/db/gorm/user_store.go:59.2,59.19 1 0 +github.com/thebtf/engram/internal/db/gorm/user_store.go:63.72,65.25 2 0 +github.com/thebtf/engram/internal/db/gorm/user_store.go:65.25,67.3 1 0 +github.com/thebtf/engram/internal/db/gorm/user_store.go:68.2,68.30 1 0 +github.com/thebtf/engram/internal/db/gorm/user_store.go:68.30,70.3 1 0 +github.com/thebtf/engram/internal/db/gorm/user_store.go:71.2,71.12 1 0 +github.com/thebtf/engram/internal/db/gorm/user_store.go:75.49,77.64 2 0 +github.com/thebtf/engram/internal/db/gorm/user_store.go:77.64,79.3 1 0 +github.com/thebtf/engram/internal/db/gorm/user_store.go:80.2,80.19 1 0 +github.com/thebtf/engram/internal/db/gorm/user_store.go:84.50,86.112 2 0 +github.com/thebtf/engram/internal/db/gorm/user_store.go:86.112,88.3 1 0 +github.com/thebtf/engram/internal/db/gorm/user_store.go:89.2,89.19 1 0 +github.com/thebtf/engram/internal/db/gorm/user_store.go:95.105,96.13 1 0 +github.com/thebtf/engram/internal/db/gorm/user_store.go:96.13,98.3 1 0 +github.com/thebtf/engram/internal/db/gorm/user_store.go:99.2,99.36 1 0 +github.com/thebtf/engram/internal/db/gorm/user_store.go:99.36,101.3 1 0 +github.com/thebtf/engram/internal/db/gorm/user_store.go:102.2,103.50 2 0 +github.com/thebtf/engram/internal/db/gorm/user_store.go:103.50,109.45 2 0 +github.com/thebtf/engram/internal/db/gorm/user_store.go:109.45,111.4 1 0 +github.com/thebtf/engram/internal/db/gorm/user_store.go:113.3,114.98 2 0 +github.com/thebtf/engram/internal/db/gorm/user_store.go:114.98,116.4 1 0 +github.com/thebtf/engram/internal/db/gorm/user_store.go:118.3,119.42 2 0 +github.com/thebtf/engram/internal/db/gorm/user_store.go:119.42,120.36 1 0 +github.com/thebtf/engram/internal/db/gorm/user_store.go:120.36,122.5 1 0 +github.com/thebtf/engram/internal/db/gorm/user_store.go:123.4,123.53 1 0 +github.com/thebtf/engram/internal/db/gorm/user_store.go:126.3,127.22 2 0 +github.com/thebtf/engram/internal/db/gorm/user_store.go:127.22,129.4 1 0 +github.com/thebtf/engram/internal/db/gorm/user_store.go:130.3,130.18 1 0 +github.com/thebtf/engram/internal/db/gorm/user_store.go:130.18,132.4 1 0 +github.com/thebtf/engram/internal/db/gorm/user_store.go:133.3,134.26 2 0 +github.com/thebtf/engram/internal/db/gorm/user_store.go:134.26,136.4 1 0 +github.com/thebtf/engram/internal/db/gorm/user_store.go:137.3,137.31 1 0 +github.com/thebtf/engram/internal/db/gorm/user_store.go:137.31,139.4 1 0 +github.com/thebtf/engram/internal/db/gorm/user_store.go:140.3,140.38 1 0 +github.com/thebtf/engram/internal/db/gorm/user_store.go:142.2,142.16 1 0 +github.com/thebtf/engram/internal/db/gorm/user_store.go:142.16,144.3 1 0 +github.com/thebtf/engram/internal/db/gorm/user_store.go:145.2,145.22 1 0 +github.com/thebtf/engram/internal/db/gorm/versioned_document_store.go:33.45,33.77 1 0 +github.com/thebtf/engram/internal/db/gorm/versioned_document_store.go:48.52,48.92 1 0 +github.com/thebtf/engram/internal/db/gorm/versioned_document_store.go:57.70,59.2 1 0 +github.com/thebtf/engram/internal/db/gorm/versioned_document_store.go:62.53,65.2 2 0 +github.com/thebtf/engram/internal/db/gorm/versioned_document_store.go:73.18,76.19 2 0 +github.com/thebtf/engram/internal/db/gorm/versioned_document_store.go:76.19,78.3 1 0 +github.com/thebtf/engram/internal/db/gorm/versioned_document_store.go:79.2,79.20 1 0 +github.com/thebtf/engram/internal/db/gorm/versioned_document_store.go:79.20,81.3 1 0 +github.com/thebtf/engram/internal/db/gorm/versioned_document_store.go:83.2,84.67 2 0 +github.com/thebtf/engram/internal/db/gorm/versioned_document_store.go:84.67,90.38 2 0 +github.com/thebtf/engram/internal/db/gorm/versioned_document_store.go:90.38,92.4 1 0 +github.com/thebtf/engram/internal/db/gorm/versioned_document_store.go:95.3,100.40 2 0 +github.com/thebtf/engram/internal/db/gorm/versioned_document_store.go:100.40,102.4 1 0 +github.com/thebtf/engram/internal/db/gorm/versioned_document_store.go:104.3,115.47 2 0 +github.com/thebtf/engram/internal/db/gorm/versioned_document_store.go:115.47,117.4 1 0 +github.com/thebtf/engram/internal/db/gorm/versioned_document_store.go:118.3,119.13 2 0 +github.com/thebtf/engram/internal/db/gorm/versioned_document_store.go:121.2,121.16 1 0 +github.com/thebtf/engram/internal/db/gorm/versioned_document_store.go:121.16,123.3 1 0 +github.com/thebtf/engram/internal/db/gorm/versioned_document_store.go:124.2,124.19 1 0 +github.com/thebtf/engram/internal/db/gorm/versioned_document_store.go:129.116,136.16 3 0 +github.com/thebtf/engram/internal/db/gorm/versioned_document_store.go:136.16,138.3 1 0 +github.com/thebtf/engram/internal/db/gorm/versioned_document_store.go:139.2,139.18 1 0 +github.com/thebtf/engram/internal/db/gorm/versioned_document_store.go:144.130,149.16 3 0 +github.com/thebtf/engram/internal/db/gorm/versioned_document_store.go:149.16,151.3 1 0 +github.com/thebtf/engram/internal/db/gorm/versioned_document_store.go:152.2,152.18 1 0 +github.com/thebtf/engram/internal/db/gorm/versioned_document_store.go:159.137,167.15 3 0 +github.com/thebtf/engram/internal/db/gorm/versioned_document_store.go:167.15,169.3 1 0 +github.com/thebtf/engram/internal/db/gorm/versioned_document_store.go:171.2,172.85 2 0 +github.com/thebtf/engram/internal/db/gorm/versioned_document_store.go:172.85,174.3 1 0 +github.com/thebtf/engram/internal/db/gorm/versioned_document_store.go:175.2,175.18 1 0 +github.com/thebtf/engram/internal/db/gorm/versioned_document_store.go:179.107,180.16 1 0 +github.com/thebtf/engram/internal/db/gorm/versioned_document_store.go:180.16,182.3 1 0 +github.com/thebtf/engram/internal/db/gorm/versioned_document_store.go:183.2,187.25 3 0 +github.com/thebtf/engram/internal/db/gorm/versioned_document_store.go:187.25,189.3 1 0 +github.com/thebtf/engram/internal/db/gorm/versioned_document_store.go:190.2,190.33 1 0 +github.com/thebtf/engram/internal/db/gorm/versioned_document_store.go:195.96,199.19 3 0 +github.com/thebtf/engram/internal/db/gorm/versioned_document_store.go:199.19,202.3 2 0 +github.com/thebtf/engram/internal/db/gorm/versioned_document_store.go:203.2,203.22 1 0 +github.com/thebtf/engram/internal/db/gorm/versioned_document_store.go:203.22,206.3 2 0 +github.com/thebtf/engram/internal/db/gorm/versioned_document_store.go:208.2,208.23 1 0 +github.com/thebtf/engram/internal/db/gorm/versioned_document_store.go:208.23,210.3 1 0 +github.com/thebtf/engram/internal/db/gorm/versioned_document_store.go:211.2,211.55 1 0 +github.com/thebtf/engram/internal/db/gorm/versioned_document_store.go:217.128,222.15 2 0 +github.com/thebtf/engram/internal/db/gorm/versioned_document_store.go:222.15,224.3 1 0 +github.com/thebtf/engram/internal/db/gorm/versioned_document_store.go:226.2,227.48 2 0 +github.com/thebtf/engram/internal/db/gorm/versioned_document_store.go:227.48,229.3 1 0 +github.com/thebtf/engram/internal/db/gorm/versioned_document_store.go:230.2,230.18 1 0 +github.com/thebtf/engram/internal/db/gorm/versioned_document_store.go:241.18,250.69 2 0 +github.com/thebtf/engram/internal/db/gorm/versioned_document_store.go:250.69,252.3 1 0 +github.com/thebtf/engram/internal/db/gorm/versioned_document_store.go:253.2,253.24 1 0 +github.com/thebtf/engram/internal/db/gorm/versioned_document_store.go:257.121,262.37 2 0 +github.com/thebtf/engram/internal/db/gorm/versioned_document_store.go:262.37,264.3 1 0 +github.com/thebtf/engram/internal/db/gorm/versioned_document_store.go:265.2,265.22 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:33.53,34.30 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:34.30,36.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:37.2,37.25 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:37.25,39.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:40.2,40.12 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:44.28,46.2 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:52.83,53.12 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:53.12,54.16 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:54.16,55.32 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:55.32,61.5 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:63.3,65.33 3 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:65.33,71.4 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:77.54,78.14 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:78.14,80.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:81.2,82.16 2 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:82.16,85.3 2 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:86.2,87.13 2 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:92.91,93.23 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:93.23,95.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:96.2,97.15 2 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:97.15,99.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:100.2,105.65 4 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:105.65,113.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:117.95,118.23 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:118.23,120.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:121.2,122.15 2 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:122.15,124.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:125.2,129.65 5 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:129.65,138.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:142.87,143.23 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:143.23,145.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:146.2,147.15 2 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:147.15,149.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:150.2,153.65 4 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:153.65,161.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:166.96,167.23 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:167.23,169.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:170.2,171.15 2 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:171.15,173.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:174.2,177.63 4 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:177.63,185.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:189.97,190.23 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:190.23,192.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:193.2,194.15 2 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:194.15,196.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:197.2,200.68 4 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:200.68,208.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:30.62,31.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:31.20,33.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:34.2,35.49 2 0 +github.com/thebtf/engram/internal/mcp/coerce.go:35.49,37.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:38.2,38.14 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:38.14,40.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:41.2,41.15 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:46.52,47.14 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:47.14,49.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:50.2,50.23 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:51.14,52.11 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:53.19,54.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:55.15,56.45 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:57.12,58.31 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:59.10,60.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:67.43,68.14 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:68.14,70.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:71.2,71.23 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:72.15,73.23 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:74.19,75.38 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:75.38,77.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:78.3,78.40 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:78.40,80.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:81.3,81.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:82.14,83.56 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:83.56,85.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:86.3,86.54 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:86.54,88.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:89.3,89.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:90.10,91.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:97.49,98.14 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:98.14,100.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:101.2,101.23 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:102.15,103.18 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:104.19,105.38 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:105.38,107.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:108.3,108.40 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:108.40,110.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:111.3,111.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:112.14,113.56 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:113.56,115.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:116.3,116.54 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:116.54,118.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:119.3,119.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:120.10,121.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:127.55,128.14 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:128.14,130.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:131.2,131.23 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:132.15,133.11 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:134.19,135.40 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:135.40,137.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:138.3,138.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:139.14,140.54 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:140.54,142.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:143.3,143.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:144.10,145.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:151.46,152.14 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:152.14,154.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:155.2,155.23 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:156.12,157.11 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:158.14,159.54 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:159.54,161.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:162.3,162.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:163.15,164.16 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:165.19,166.40 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:166.40,168.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:169.3,169.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:170.10,171.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:177.40,178.14 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:178.14,180.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:181.2,181.23 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:182.13,184.26 2 0 +github.com/thebtf/engram/internal/mcp/coerce.go:184.26,185.36 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:185.36,187.5 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:189.3,189.16 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:190.16,191.11 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:192.14,193.14 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:193.14,195.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:196.3,196.13 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:197.10,198.13 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:204.38,205.14 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:205.14,207.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:208.2,209.9 2 0 +github.com/thebtf/engram/internal/mcp/coerce.go:209.9,211.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:212.2,213.27 2 0 +github.com/thebtf/engram/internal/mcp/coerce.go:213.27,214.42 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:214.42,216.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:218.2,218.15 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:222.32,223.39 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:223.39,225.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:226.2,226.30 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:226.30,228.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:229.2,229.30 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:229.30,231.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:232.2,232.15 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:236.35,237.28 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:237.28,239.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:240.2,240.28 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:240.28,242.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:243.2,243.15 1 0 +github.com/thebtf/engram/internal/mcp/context.go:17.55,19.2 1 0 +github.com/thebtf/engram/internal/mcp/context.go:22.78,24.2 1 0 +github.com/thebtf/engram/internal/mcp/context.go:29.78,31.2 1 0 +github.com/thebtf/engram/internal/mcp/context.go:35.53,38.2 2 0 +github.com/thebtf/engram/internal/mcp/context.go:41.80,43.2 1 0 +github.com/thebtf/engram/internal/mcp/context.go:48.80,50.2 1 0 +github.com/thebtf/engram/internal/mcp/context.go:54.53,57.2 2 0 +github.com/thebtf/engram/internal/mcp/context.go:61.51,62.43 1 0 +github.com/thebtf/engram/internal/mcp/context.go:62.43,64.3 1 0 +github.com/thebtf/engram/internal/mcp/context.go:65.2,65.16 1 0 +github.com/thebtf/engram/internal/mcp/health.go:22.32,26.2 3 0 +github.com/thebtf/engram/internal/mcp/health.go:29.37,33.2 3 0 +github.com/thebtf/engram/internal/mcp/health.go:36.35,40.2 3 0 +github.com/thebtf/engram/internal/mcp/health.go:42.44,45.25 3 0 +github.com/thebtf/engram/internal/mcp/health.go:45.25,47.50 1 0 +github.com/thebtf/engram/internal/mcp/health.go:47.50,50.4 2 0 +github.com/thebtf/engram/internal/mcp/health.go:55.74,60.16 5 0 +github.com/thebtf/engram/internal/mcp/health.go:60.16,62.3 1 0 +github.com/thebtf/engram/internal/mcp/health.go:63.2,71.4 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:28.42,29.65 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:29.65,32.3 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:33.2,33.40 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:33.40,35.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:36.2,36.14 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:39.120,40.69 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:40.69,42.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:43.2,44.19 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:44.19,46.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:47.2,48.17 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:48.17,50.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:51.2,52.59 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:52.59,54.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:55.2,56.20 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:56.20,58.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:59.2,60.17 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:60.17,62.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:63.2,64.21 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:64.21,66.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:67.2,68.22 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:68.22,70.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:71.2,72.23 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:72.23,74.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:76.2,98.19 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:98.19,100.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:101.2,101.66 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:104.52,106.29 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:106.29,108.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:109.2,110.46 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:113.113,123.27 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:123.27,125.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:126.2,127.16 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:127.16,129.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:130.2,130.25 1 0 +github.com/thebtf/engram/internal/mcp/server.go:127.44,138.2 1 69 +github.com/thebtf/engram/internal/mcp/server.go:141.64,143.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:146.78,148.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:151.53,153.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:156.55,158.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:161.58,163.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:166.62,168.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:171.50,173.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:176.78,178.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:181.74,183.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:186.71,189.2 2 0 +github.com/thebtf/engram/internal/mcp/server.go:191.85,193.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:195.61,197.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:199.49,201.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:204.54,206.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:211.53,213.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:216.53,218.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:222.61,224.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:228.59,230.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:234.51,236.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:240.52,242.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:246.55,248.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:252.82,254.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:260.70,262.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:269.68,271.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:274.87,277.2 2 0 +github.com/thebtf/engram/internal/mcp/server.go:282.60,284.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:290.45,292.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:297.77,299.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:303.37,313.38 3 0 +github.com/thebtf/engram/internal/mcp/server.go:313.38,315.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:316.2,317.9 2 0 +github.com/thebtf/engram/internal/mcp/server.go:317.9,319.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:320.2,321.9 2 0 +github.com/thebtf/engram/internal/mcp/server.go:321.9,323.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:324.2,325.9 2 0 +github.com/thebtf/engram/internal/mcp/server.go:325.9,327.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:328.2,328.14 1 0 +github.com/thebtf/engram/internal/mcp/server.go:332.35,334.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:383.49,387.12 3 0 +github.com/thebtf/engram/internal/mcp/server.go:387.12,388.22 1 0 +github.com/thebtf/engram/internal/mcp/server.go:388.22,389.11 1 0 +github.com/thebtf/engram/internal/mcp/server.go:390.22,392.11 2 0 +github.com/thebtf/engram/internal/mcp/server.go:393.12,393.12 0 0 +github.com/thebtf/engram/internal/mcp/server.go:396.4,397.18 2 0 +github.com/thebtf/engram/internal/mcp/server.go:397.18,398.13 1 0 +github.com/thebtf/engram/internal/mcp/server.go:401.4,402.61 2 0 +github.com/thebtf/engram/internal/mcp/server.go:402.61,404.13 2 0 +github.com/thebtf/engram/internal/mcp/server.go:407.4,407.55 1 0 +github.com/thebtf/engram/internal/mcp/server.go:407.55,409.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:411.3,411.28 1 0 +github.com/thebtf/engram/internal/mcp/server.go:414.2,414.9 1 0 +github.com/thebtf/engram/internal/mcp/server.go:415.20,416.19 1 0 +github.com/thebtf/engram/internal/mcp/server.go:417.25,418.17 1 0 +github.com/thebtf/engram/internal/mcp/server.go:418.17,420.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:421.3,421.13 1 0 +github.com/thebtf/engram/internal/mcp/server.go:427.77,428.19 1 0 +github.com/thebtf/engram/internal/mcp/server.go:428.19,431.3 2 0 +github.com/thebtf/engram/internal/mcp/server.go:433.2,433.20 1 0 +github.com/thebtf/engram/internal/mcp/server.go:434.20,435.33 1 0 +github.com/thebtf/engram/internal/mcp/server.go:436.20,437.32 1 0 +github.com/thebtf/engram/internal/mcp/server.go:438.20,439.37 1 0 +github.com/thebtf/engram/internal/mcp/server.go:443.24,444.93 1 0 +github.com/thebtf/engram/internal/mcp/server.go:445.34,446.101 1 0 +github.com/thebtf/engram/internal/mcp/server.go:447.22,448.91 1 0 +github.com/thebtf/engram/internal/mcp/server.go:449.29,450.120 1 0 +github.com/thebtf/engram/internal/mcp/server.go:451.10,456.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:461.51,462.20 1 0 +github.com/thebtf/engram/internal/mcp/server.go:463.50,464.70 1 0 +github.com/thebtf/engram/internal/mcp/server.go:465.46,466.79 1 0 +github.com/thebtf/engram/internal/mcp/server.go:467.10,468.80 1 0 +github.com/thebtf/engram/internal/mcp/server.go:473.59,485.63 2 0 +github.com/thebtf/engram/internal/mcp/server.go:485.63,487.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:489.2,493.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:496.45,503.33 3 0 +github.com/thebtf/engram/internal/mcp/server.go:503.33,505.57 2 0 +github.com/thebtf/engram/internal/mcp/server.go:505.57,506.76 1 0 +github.com/thebtf/engram/internal/mcp/server.go:506.76,507.13 1 0 +github.com/thebtf/engram/internal/mcp/server.go:509.4,509.18 1 0 +github.com/thebtf/engram/internal/mcp/server.go:509.18,511.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:511.10,513.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:514.4,518.11 5 0 +github.com/thebtf/engram/internal/mcp/server.go:522.2,522.19 1 0 +github.com/thebtf/engram/internal/mcp/server.go:660.29,683.21 2 0 +github.com/thebtf/engram/internal/mcp/server.go:683.21,689.3 5 0 +github.com/thebtf/engram/internal/mcp/server.go:690.2,699.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:712.30,765.49 3 0 +github.com/thebtf/engram/internal/mcp/server.go:765.49,789.3 5 0 +github.com/thebtf/engram/internal/mcp/server.go:790.2,799.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:805.40,936.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:942.58,1048.35 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1048.35,1077.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1080.2,1080.33 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1080.33,1090.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1093.2,1093.26 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1093.26,1123.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1124.2,1124.80 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1124.80,1126.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1127.2,1127.55 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1127.55,1129.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1130.2,1130.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1130.38,1132.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1134.2,1134.25 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1134.25,1136.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1138.2,1138.33 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1138.33,1140.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1141.2,1141.69 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1141.69,1143.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1144.2,1144.75 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1144.75,1146.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1148.2,1148.27 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1148.27,1165.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1168.2,1168.76 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1168.76,1191.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1195.2,1195.48 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1195.48,1197.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1201.2,1201.47 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1201.47,1203.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1205.2,1205.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1205.38,1207.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1212.2,1212.21 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1212.21,1214.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1228.2,1228.51 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1228.51,1230.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1233.2,1233.56 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1233.56,1235.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1238.2,1238.71 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1238.71,1298.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1302.2,1302.104 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1302.104,1321.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1324.2,1324.72 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1324.72,1333.154 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1333.154,1334.26 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1334.26,1336.8 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1337.7,1337.16 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1338.35,1340.26 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1340.26,1342.8 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1343.7,1343.18 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1371.2,1371.26 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1371.26,1390.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1393.2,1393.28 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1393.28,1443.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1446.2,1446.28 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1446.28,1478.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1481.2,1481.37 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1481.37,1561.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1564.2,1568.23 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1568.23,1570.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1572.2,1588.57 3 0 +github.com/thebtf/engram/internal/mcp/server.go:1588.57,1591.29 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1591.29,1593.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1594.3,1594.27 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1594.27,1595.29 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1595.29,1597.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1601.2,1607.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1612.79,1614.60 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1614.60,1620.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1622.2,1623.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1623.16,1631.3 3 0 +github.com/thebtf/engram/internal/mcp/server.go:1633.2,1641.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1644.69,1645.34 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1645.34,1647.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1648.2,1649.22 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1649.22,1651.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1652.2,1652.37 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1656.99,1658.14 1 132 +github.com/thebtf/engram/internal/mcp/server.go:1659.16,1660.35 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1661.15,1662.46 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1663.18,1664.49 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1665.15,1666.46 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1667.18,1668.49 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1669.14,1670.45 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1671.15,1672.34 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1676.2,1676.14 1 132 +github.com/thebtf/engram/internal/mcp/server.go:1677.35,1678.52 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1679.26,1680.37 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1681.20,1682.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1683.20,1684.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1685.16,1686.35 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1687.29,1688.40 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1689.33,1690.50 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1691.25,1692.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1693.23,1694.41 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1696.26,1697.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1698.24,1699.42 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1700.22,1701.40 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1702.25,1703.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1704.27,1705.45 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1706.25,1707.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1709.30,1710.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1711.28,1712.42 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1713.17,1714.40 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1715.20,1716.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1717.20,1718.45 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1719.20,1720.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1722.20,1723.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1724.18,1725.36 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1726.20,1727.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1728.18,1729.36 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1730.21,1731.39 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1732.21,1733.39 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1734.26,1735.44 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1736.25,1737.34 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1738.26,1739.44 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1740.24,1741.42 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1742.26,1743.44 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1744.27,1745.45 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1746.22,1747.40 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1748.19,1749.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1750.15,1751.34 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1752.16,1753.35 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1755.21,1756.44 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1757.19,1758.42 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1759.20,1760.44 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1761.22,1762.45 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1763.22,1764.40 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1765.23,1766.41 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1767.20,1768.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1769.32,1770.49 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1771.19,1772.37 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1773.19,1774.37 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1775.33,1776.50 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1777.35,1778.52 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1779.24,1780.42 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1781.32,1782.49 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1783.28,1784.46 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1785.21,1786.39 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1787.34,1788.51 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1789.25,1790.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1791.29,1792.46 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1793.26,1794.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1795.27,1796.44 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1798.25,1799.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1800.23,1801.41 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1802.27,1803.45 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1804.26,1805.44 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1806.29,1807.47 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1809.29,1810.46 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1811.27,1812.44 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1813.30,1814.47 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1815.38,1816.54 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1817.36,1818.52 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1820.24,1821.42 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1822.27,1823.45 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1824.22,1825.40 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1826.32,1827.49 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1828.32,1829.49 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1830.31,1831.48 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1832.35,1833.52 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1834.36,1835.53 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1836.36,1837.53 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1838.38,1839.54 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1840.34,1841.51 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1843.22,1844.40 1 44 +github.com/thebtf/engram/internal/mcp/server.go:1845.21,1846.39 1 44 +github.com/thebtf/engram/internal/mcp/server.go:1847.24,1848.42 1 44 +github.com/thebtf/engram/internal/mcp/server.go:1850.25,1851.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1852.25,1853.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1859.2,1859.14 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1860.22,1863.131 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1866.51,1867.123 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1868.10,1869.50 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1874.47,1876.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1876.16,1879.3 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1880.2,1880.35 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1884.72,1890.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1896.105,1898.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1898.16,1900.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1902.2,1903.17 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1903.17,1905.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1907.2,1908.17 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1908.17,1910.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1912.2,1918.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1918.16,1920.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1921.2,1921.25 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1927.76,1933.15 3 0 +github.com/thebtf/engram/internal/mcp/server.go:1933.15,1936.17 3 0 +github.com/thebtf/engram/internal/mcp/server.go:1936.17,1938.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1939.3,1939.26 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1943.2,1950.36 3 0 +github.com/thebtf/engram/internal/mcp/server.go:1950.36,1952.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1952.8,1955.29 3 0 +github.com/thebtf/engram/internal/mcp/server.go:1955.29,1958.4 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1959.3,1962.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1966.2,1966.20 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1966.20,1977.20 6 0 +github.com/thebtf/engram/internal/mcp/server.go:1977.20,1979.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1980.3,1980.20 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1980.20,1982.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1985.3,1985.37 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1985.37,1987.30 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1987.30,1988.16 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1988.16,1990.6 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1990.11,1992.6 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1994.4,1995.56 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1995.56,1997.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1998.4,2003.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2008.2,2008.29 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2008.29,2009.63 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2009.63,2011.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2011.9,2013.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2021.2,2021.29 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2021.29,2029.38 3 0 +github.com/thebtf/engram/internal/mcp/server.go:2029.38,2031.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2031.9,2033.31 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2033.31,2035.30 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2035.30,2037.6 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2039.4,2042.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2046.2,2047.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2047.16,2049.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2050.2,2050.25 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2055.57,2056.33 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2056.33,2058.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2059.2,2060.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2060.16,2062.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2063.2,2064.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2064.16,2066.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2067.2,2067.23 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2071.79,2105.15 6 0 +github.com/thebtf/engram/internal/mcp/server.go:2105.15,2107.17 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2107.17,2111.4 3 0 +github.com/thebtf/engram/internal/mcp/server.go:2111.9,2112.17 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2112.17,2114.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2115.4,2117.26 3 0 +github.com/thebtf/engram/internal/mcp/server.go:2117.26,2119.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2119.10,2121.29 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2121.29,2123.6 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2125.4,2129.25 5 0 +github.com/thebtf/engram/internal/mcp/server.go:2130.19,2130.19 0 0 +github.com/thebtf/engram/internal/mcp/server.go:2132.20,2134.106 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2135.12,2137.103 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2140.8,2143.3 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2144.2,2150.49 3 0 +github.com/thebtf/engram/internal/mcp/server.go:2150.49,2152.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2152.8,2154.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2155.2,2168.27 4 0 +github.com/thebtf/engram/internal/mcp/server.go:2168.27,2170.17 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2170.17,2173.4 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2173.9,2175.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2177.2,2182.40 4 0 +github.com/thebtf/engram/internal/mcp/server.go:2182.40,2183.21 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2184.20,2185.20 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2186.19,2187.19 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2191.2,2191.24 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2191.24,2193.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2193.8,2193.30 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2193.30,2195.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2198.2,2198.28 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2198.28,2200.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2203.2,2203.29 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2203.29,2205.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2207.2,2208.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2208.16,2210.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2211.2,2211.28 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2216.103,2218.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2218.16,2220.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2222.2,2223.15 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2223.15,2225.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2227.2,2239.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2239.16,2241.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2242.2,2242.25 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2246.93,2248.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2251.91,2253.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:18.28,29.20 4 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:29.20,33.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:35.2,44.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:68.36,69.49 1 1 +github.com/thebtf/engram/internal/mcp/tools_admin.go:69.49,74.3 4 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:75.2,75.25 1 1 +github.com/thebtf/engram/internal/mcp/tools_admin.go:80.26,82.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:84.89,86.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:86.16,88.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:89.2,90.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:90.18,92.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:94.2,94.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:95.15,96.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:97.26,98.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:99.25,100.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:101.23,105.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:105.22,107.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:108.3,108.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:109.10,110.114 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:120.92,126.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:126.26,128.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:130.2,131.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:131.19,133.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:134.2,135.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:135.19,137.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:138.2,138.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:138.24,140.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:142.2,142.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:142.25,144.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:146.2,147.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:147.16,149.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:151.2,151.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:27.40,30.2 2 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:32.30,46.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:48.99,49.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:49.34,51.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:52.2,52.69 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:52.69,54.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:56.2,57.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:57.16,59.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:60.2,61.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:61.21,63.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:64.2,67.26 3 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:67.26,69.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:70.2,71.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:71.25,73.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:75.2,77.44 3 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:77.44,79.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:80.2,80.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:80.33,82.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:83.2,83.81 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:86.52,87.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:87.16,89.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:90.2,90.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:90.15,92.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:93.2,93.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:96.73,97.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:97.21,99.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:100.2,101.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:101.29,110.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:111.2,111.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:114.34,116.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:31.98,32.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:32.52,34.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:35.2,35.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:35.26,37.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:39.2,40.49 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:40.49,42.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:43.2,43.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:43.21,45.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:46.2,46.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:46.21,48.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:49.2,49.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:49.18,51.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:52.2,52.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:52.18,54.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:56.2,56.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:56.38,58.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:60.2,61.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:61.16,63.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:68.2,70.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:70.26,77.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:79.2,81.36 3 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:81.36,84.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:86.2,89.28 3 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:89.28,90.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:90.39,91.9 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:93.3,97.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:100.2,104.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:107.60,113.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:115.101,116.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:116.38,118.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:120.2,122.21 3 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:122.21,123.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:123.26,125.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:126.3,126.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:126.23,128.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:129.8,130.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:130.26,132.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:133.3,133.68 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:133.68,135.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:137.2,140.20 3 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:141.17,142.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:143.67,143.67 0 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:144.10,145.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:148.2,162.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:162.16,164.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:165.2,165.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:165.19,173.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:174.2,174.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:174.30,176.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:177.2,177.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:177.31,179.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:181.2,182.36 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:182.36,196.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:198.2,199.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:199.19,201.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:202.2,203.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:203.18,205.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:206.2,207.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:207.21,209.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:210.2,211.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:211.25,213.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:214.2,225.21 3 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:225.21,227.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:228.2,228.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:228.25,230.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:231.2,231.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:231.18,233.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:235.2,244.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:244.21,246.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:247.2,247.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:247.25,249.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:250.2,250.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:250.18,252.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:253.2,253.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:253.24,255.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:256.2,256.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:259.50,261.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:261.22,263.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:264.2,264.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:270.90,272.42 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:272.42,276.3 3 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:277.2,281.27 3 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:281.27,282.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:282.45,284.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:286.2,286.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:25.150,27.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:29.109,31.71 2 132 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:31.71,33.3 1 24 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:35.2,36.9 2 108 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:36.9,38.3 1 6 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:39.2,40.81 2 102 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:40.81,42.3 1 12 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:43.2,44.43 2 90 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:44.43,47.92 3 216 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:47.92,49.4 1 48 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:50.3,50.41 1 168 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:53.2,54.44 2 42 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:54.44,55.47 1 39 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:56.15,57.17 1 6 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:58.16,59.18 1 3 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:60.11,61.82 1 30 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:64.2,64.25 1 12 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:69.28,132.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:139.95,140.22 1 44 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:140.22,142.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:143.2,144.32 2 44 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:144.32,146.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:148.2,149.16 2 44 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:149.16,151.3 1 40 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:152.2,156.35 2 4 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:156.35,163.3 2 1 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:165.2,165.25 1 3 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:165.25,167.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:169.2,176.16 3 3 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:176.16,178.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:180.2,188.25 2 3 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:196.94,197.22 1 44 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:197.22,199.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:200.2,201.32 2 44 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:201.32,203.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:205.2,206.16 2 44 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:206.16,208.3 1 40 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:209.2,212.35 2 4 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:212.35,219.3 2 1 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:221.2,221.25 1 3 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:221.25,223.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:225.2,232.16 3 3 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:232.16,234.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:236.2,243.25 2 3 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:251.97,252.22 1 44 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:252.22,254.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:255.2,256.32 2 44 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:256.32,258.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:260.2,261.16 2 44 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:261.16,263.3 1 40 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:264.2,267.35 2 4 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:267.35,274.3 2 1 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:276.2,276.25 1 3 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:276.25,278.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:280.2,287.16 3 3 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:287.16,289.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:291.2,298.25 2 3 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:31.80,32.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:32.14,34.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:35.2,48.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:51.136,53.51 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:53.51,55.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:56.2,56.83 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:59.94,60.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:60.21,62.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:63.2,63.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:68.30,162.2 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:165.98,166.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:166.49,168.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:169.2,170.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:170.16,172.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:173.2,174.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:174.19,176.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:177.2,179.17 3 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:179.17,181.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:183.2,184.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:184.16,186.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:188.2,189.31 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:189.31,190.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:190.15,191.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:193.3,193.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:196.2,201.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:201.16,203.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:204.2,204.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:208.96,209.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:209.49,211.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:212.2,213.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:213.16,215.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:216.2,217.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:217.13,219.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:221.2,222.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:222.16,224.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:225.2,225.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:225.22,227.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:229.2,230.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:230.16,232.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:233.2,233.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:239.100,240.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:240.22,242.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:243.2,244.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:244.16,246.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:247.2,248.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:248.13,250.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:255.2,256.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:256.12,263.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:263.30,264.77 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:264.77,269.5 4 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:271.3,272.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:272.21,274.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:275.3,275.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:279.2,279.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:279.29,281.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:284.2,285.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:285.16,287.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:288.2,288.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:288.22,290.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:291.2,291.55 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:291.55,293.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:294.2,294.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:294.74,296.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:297.2,298.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:298.16,300.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:306.2,307.41 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:307.41,309.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:310.2,324.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:324.16,325.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:325.50,327.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:328.3,328.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:330.2,330.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:330.38,332.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:334.2,341.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:341.16,343.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:344.2,344.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:348.99,349.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:349.49,351.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:352.2,353.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:353.16,355.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:356.2,357.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:357.13,359.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:360.2,362.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:362.16,364.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:365.2,365.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:365.22,367.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:368.2,368.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:368.74,370.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:371.2,372.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:372.16,374.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:375.2,375.85 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:375.85,377.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:379.2,380.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:380.16,381.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:381.50,383.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:384.3,384.60 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:386.2,386.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:386.20,388.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:390.2,395.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:395.16,397.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:398.2,398.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:402.102,403.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:403.49,405.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:406.2,407.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:407.16,409.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:410.2,411.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:411.13,413.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:414.2,415.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:415.16,417.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:418.2,418.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:418.22,420.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:421.2,421.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:421.74,423.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:424.2,425.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:425.16,427.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:428.2,428.88 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:428.88,430.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:432.2,433.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:433.16,434.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:434.50,436.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:437.3,437.63 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:439.2,439.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:439.20,441.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:443.2,448.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:448.16,450.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:451.2,451.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:34.30,36.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:42.61,44.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:48.32,75.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:79.32,94.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:100.98,101.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:101.25,103.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:104.2,104.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:104.29,106.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:108.2,113.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:113.17,114.55 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:114.55,116.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:118.2,118.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:118.24,120.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:121.2,121.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:121.23,123.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:124.2,124.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:124.23,126.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:134.2,135.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:135.21,137.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:142.2,147.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:147.16,149.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:154.2,165.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:165.25,175.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:177.2,183.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:183.16,185.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:186.2,186.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:194.98,195.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:195.25,197.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:198.2,198.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:198.29,200.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:202.2,205.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:205.17,207.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:208.2,209.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:209.21,211.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:213.2,214.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:214.16,216.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:217.2,218.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:218.16,220.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:221.2,222.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:222.16,224.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:226.2,231.11 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:231.11,233.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:235.2,236.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:236.16,238.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:239.2,239.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:21.52,22.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:22.24,25.28 3 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:25.28,27.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:29.2,29.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:35.72,37.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:37.15,39.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:41.2,42.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:42.16,44.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:45.2,45.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:49.99,51.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:51.16,53.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:55.2,56.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:56.16,58.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:60.2,72.23 7 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:72.23,74.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:75.2,75.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:75.24,77.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:78.2,78.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:78.24,80.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:81.2,81.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:82.27,82.27 0 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:84.10,85.93 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:87.2,87.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:87.30,89.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:90.2,90.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:90.26,92.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:94.2,95.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:95.16,97.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:99.2,100.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:100.16,102.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:104.2,112.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:112.16,114.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:116.2,123.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:123.16,125.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:126.2,126.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:130.97,132.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:132.16,134.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:136.2,137.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:137.16,139.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:141.2,147.23 4 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:147.23,149.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:150.2,150.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:150.26,152.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:154.2,155.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:155.16,157.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:159.2,160.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:160.16,161.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:161.47,163.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:164.3,164.51 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:167.2,167.97 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:167.97,172.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:174.2,175.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:175.16,177.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:179.2,185.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:185.16,187.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:188.2,188.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:192.99,194.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:194.16,196.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:198.2,199.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:199.16,201.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:203.2,207.26 3 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:207.26,209.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:211.2,212.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:212.16,214.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:216.2,223.26 3 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:223.26,229.28 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:229.28,231.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:232.3,232.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:235.2,236.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:236.16,238.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:239.2,239.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:243.100,245.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:245.16,247.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:249.2,250.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:250.16,252.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:254.2,262.23 5 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:262.23,264.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:265.2,265.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:265.24,267.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:268.2,268.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:269.27,269.27 0 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:271.10,272.93 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:274.2,274.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:274.30,276.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:277.2,277.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:277.26,279.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:281.2,281.71 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:281.71,282.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:282.47,284.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:285.3,285.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:288.2,293.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:293.16,295.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:296.2,296.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:302.92,309.19 5 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:309.19,310.53 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:310.53,313.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:316.2,317.51 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:317.51,318.66 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:318.66,320.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:323.2,331.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:331.16,333.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:334.2,334.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:338.46,342.32 4 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:342.32,343.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:343.20,346.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:348.2,350.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:350.26,352.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:352.27,353.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:353.13,355.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:356.4,356.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:358.3,358.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:360.2,360.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:16.45,18.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:20.35,36.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:38.84,39.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:39.40,41.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:42.2,42.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:42.50,44.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:45.2,45.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:48.101,50.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:50.16,52.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:53.2,54.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:54.16,56.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:57.2,58.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:58.19,60.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:61.2,62.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:62.21,64.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:65.2,66.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:66.16,68.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:69.2,69.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:72.102,74.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:74.16,76.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:77.2,82.8 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:10.100,12.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:12.16,14.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:16.2,17.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:17.18,19.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:21.2,21.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:22.16,23.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:24.14,25.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:26.14,27.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:28.17,29.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:30.17,31.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:32.21,33.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:34.19,35.42 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:36.17,37.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:38.16,39.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:40.16,41.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:42.21,43.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:44.10,45.167 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:15.77,16.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:16.33,18.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:20.2,21.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:21.27,23.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:25.2,26.28 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:26.28,29.17 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:29.17,31.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:34.2,41.32 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:41.32,46.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:46.20,48.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:49.3,49.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:52.2,53.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:53.16,55.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:57.2,57.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:61.97,62.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:62.28,64.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:66.2,67.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:67.16,69.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:71.2,75.29 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:75.29,77.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:79.2,80.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:80.16,82.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:84.2,84.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:84.20,86.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:88.2,97.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:97.25,103.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:103.20,105.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:106.3,106.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:106.19,108.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:109.3,109.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:112.2,113.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:113.16,115.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:117.2,117.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:121.95,122.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:122.28,124.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:126.2,127.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:127.16,129.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:131.2,137.50 4 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:137.50,139.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:141.2,142.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:142.16,144.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:145.2,145.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:145.16,147.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:149.2,149.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:149.21,151.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:153.2,154.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:154.16,156.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:157.2,157.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:157.20,159.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:161.2,161.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:165.98,166.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:166.28,168.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:170.2,171.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:171.16,173.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:175.2,181.50 4 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:181.50,183.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:185.2,185.96 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:185.96,187.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:189.2,189.88 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:197.98,198.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:198.28,200.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:202.2,203.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:203.16,205.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:207.2,217.74 6 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:217.74,219.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:222.2,223.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:223.16,225.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:227.2,229.156 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:235.98,237.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:237.16,239.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:241.2,247.24 4 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:247.24,249.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:252.2,253.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:253.29,255.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:256.2,256.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:15.93,16.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:16.37,18.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:20.2,21.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:21.16,23.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:25.2,32.16 7 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:32.16,34.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:35.2,35.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:35.19,37.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:38.2,38.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:38.19,40.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:42.2,43.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:43.16,45.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:47.2,54.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:54.16,56.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:57.2,57.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:61.91,62.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:62.37,64.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:66.2,67.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:67.16,69.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:71.2,73.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:73.16,75.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:76.2,76.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:76.19,78.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:80.2,81.43 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:81.43,83.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:83.19,85.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:86.3,86.79 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:87.8,89.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:90.2,90.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:90.16,91.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:91.45,93.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:94.3,94.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:97.2,110.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:110.16,112.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:113.2,113.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:117.93,119.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:122.91,123.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:123.37,125.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:127.2,128.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:128.16,130.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:132.2,133.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:133.19,135.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:136.2,141.16 5 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:141.16,143.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:145.2,155.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:155.25,165.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:167.2,168.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:168.16,170.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:171.2,171.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:175.94,176.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:176.37,178.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:180.2,181.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:181.16,183.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:185.2,187.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:187.16,189.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:190.2,190.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:190.19,192.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:193.2,196.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:196.16,198.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:200.2,208.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:208.25,216.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:218.2,225.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:225.16,227.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:228.2,228.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:232.94,233.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:233.37,235.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:237.2,238.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:238.16,240.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:242.2,243.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:243.21,245.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:246.2,248.19 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:248.19,250.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:252.2,253.46 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:253.46,255.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:255.13,257.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:259.2,259.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:259.44,261.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:261.13,263.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:266.2,267.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:267.16,269.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:271.2,278.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:278.16,280.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:281.2,281.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:19.69,21.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:23.38,38.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:40.51,63.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:65.53,80.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:82.46,85.32 3 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:85.32,87.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:88.2,88.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:91.105,93.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:93.16,95.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:96.2,97.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:97.16,99.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:100.2,100.70 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:103.107,105.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:105.16,107.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:108.2,109.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:109.16,111.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:112.2,112.72 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:115.101,117.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:117.16,119.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:120.2,121.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:121.17,123.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:124.2,139.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:142.109,144.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:144.16,146.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:147.2,154.8 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:157.100,159.28 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:159.28,161.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:161.18,163.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:164.3,164.62 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:166.2,167.72 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:167.72,169.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:170.2,170.53 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:170.53,172.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:173.2,174.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:174.26,176.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:177.2,177.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:180.73,182.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:182.16,184.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:185.2,185.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:12.104,14.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:14.16,16.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:18.2,19.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:19.18,21.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:23.2,23.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:24.14,25.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:26.18,27.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:28.17,29.46 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:30.10,31.96 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:36.101,37.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:37.27,39.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:41.2,42.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:42.16,44.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:46.2,47.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:47.21,49.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:50.2,51.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:51.19,53.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:54.2,54.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:55.52,55.52 0 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:56.10,57.101 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:59.2,61.93 2 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:61.93,64.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:66.2,70.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:27.31,94.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:98.97,100.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:100.26,102.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:103.2,103.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:103.28,105.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:107.2,108.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:108.16,110.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:112.2,115.15 4 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:115.15,117.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:118.2,118.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:118.17,120.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:122.2,123.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:123.16,125.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:127.2,140.29 3 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:140.29,151.31 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:151.31,154.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:155.3,155.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:158.2,162.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:167.100,169.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:169.26,171.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:172.2,172.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:172.28,174.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:175.2,175.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:175.26,177.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:179.2,180.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:180.16,182.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:184.2,185.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:185.22,187.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:189.2,190.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:190.20,191.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:191.54,199.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:200.3,200.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:200.61,202.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:203.3,203.58 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:206.2,211.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:215.95,217.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:217.32,219.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:220.2,220.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:220.28,222.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:224.2,225.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:225.16,227.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:229.2,230.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:230.22,232.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:234.2,234.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:234.61,236.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:239.2,239.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:239.25,246.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:248.2,252.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:258.104,260.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:260.26,262.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:267.2,271.20 3 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:271.20,275.3 3 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:275.8,279.3 3 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:280.2,280.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:284.60,285.30 1 9 +github.com/thebtf/engram/internal/mcp/tools_governance.go:285.30,287.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:288.2,288.42 1 9 +github.com/thebtf/engram/internal/mcp/tools_governance.go:288.42,290.3 1 9 +github.com/thebtf/engram/internal/mcp/tools_governance.go:291.2,291.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:64.89,65.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:65.25,67.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:69.2,70.49 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:70.49,72.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:74.2,74.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:75.18,76.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:77.21,78.35 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:79.19,80.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:81.18,82.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:83.19,84.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:85.18,86.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:87.18,91.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:91.23,93.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:94.3,94.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:95.10,96.62 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:100.81,103.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:103.19,105.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:106.2,107.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:107.19,109.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:112.2,112.46 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:112.46,114.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:115.2,115.46 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:115.46,117.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:122.2,122.66 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:122.66,124.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:127.2,127.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:127.25,128.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:128.22,130.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:131.8,132.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:132.26,134.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:138.2,138.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:138.25,139.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:139.22,141.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:142.8,143.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:143.26,145.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:148.2,148.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:148.22,150.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:151.2,151.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:151.38,153.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:154.2,154.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:154.19,156.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:159.2,161.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:161.25,164.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:165.2,165.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:165.25,168.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:169.2,171.23 3 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:171.23,174.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:175.2,175.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:175.23,178.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:180.2,193.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:193.16,195.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:198.2,199.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:199.29,201.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:202.2,202.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:202.29,204.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:205.2,213.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:216.121,217.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:217.28,218.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:218.26,220.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:221.3,222.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:222.17,223.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:223.49,225.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:226.4,226.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:228.3,228.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:230.2,230.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:230.26,232.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:233.2,234.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:234.16,235.48 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:235.48,237.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:238.3,238.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:240.2,240.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:243.101,248.36 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:248.36,250.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:250.8,252.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:253.2,253.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:253.16,255.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:256.2,256.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:256.32,257.128 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:257.128,262.72 5 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:262.72,264.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:267.2,267.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:276.81,277.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:277.25,279.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:280.2,280.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:280.22,282.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:283.2,283.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:283.39,285.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:286.2,286.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:286.25,288.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:289.2,289.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:289.21,291.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:292.2,293.14 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:293.14,295.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:296.2,305.16 5 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:305.16,307.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:308.2,314.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:317.84,318.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:318.19,320.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:321.2,323.63 3 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:323.63,325.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:326.2,329.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:332.82,333.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:333.38,335.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:336.2,337.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:338.18,339.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:340.18,341.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:345.2,345.59 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:345.59,347.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:349.2,351.21 3 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:351.21,353.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:353.8,356.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:357.2,357.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:357.16,359.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:366.2,367.41 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:367.41,369.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:371.2,378.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:397.115,398.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:398.15,400.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:403.2,404.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:404.26,405.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:405.28,407.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:408.3,408.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:408.28,410.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:412.2,412.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:412.23,415.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:420.2,426.12 4 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:426.12,427.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:427.27,429.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:429.18,431.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:433.4,433.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:433.33,435.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:440.2,441.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:441.26,442.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:442.28,443.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:443.49,445.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:448.3,448.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:448.28,449.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:449.49,451.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:454.2,454.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:457.82,458.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:458.21,460.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:461.2,462.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:462.16,464.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:465.2,465.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:465.36,467.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:468.2,469.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:469.16,471.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:472.2,477.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:480.82,481.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:481.40,483.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:484.2,485.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:485.19,487.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:488.2,489.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:489.16,491.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:492.2,499.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:502.82,503.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:503.21,505.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:506.2,507.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:507.16,509.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:510.2,514.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:23.179,24.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:24.22,26.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:28.2,32.22 4 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:32.22,34.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:35.2,36.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:36.22,38.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:40.2,41.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:41.26,43.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:44.2,44.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:44.26,46.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:47.2,47.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:47.30,49.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:50.2,50.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:50.30,52.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:54.2,55.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:55.16,57.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:58.2,58.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:58.13,60.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:61.2,62.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:62.16,64.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:65.2,65.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:65.13,67.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:69.2,70.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:70.16,72.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:73.2,73.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:73.15,75.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:77.2,77.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:80.172,81.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:81.28,82.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:82.23,84.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:85.3,85.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:85.18,87.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:88.3,89.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:89.17,90.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:90.49,92.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:93.4,93.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:95.3,95.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:98.2,98.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:98.24,100.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:101.2,101.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:101.19,103.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:104.2,105.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:105.16,106.48 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:106.48,108.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:109.3,109.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:111.2,111.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:114.119,116.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:116.22,118.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:119.2,120.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:120.22,122.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:124.2,126.26 3 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:126.26,127.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:127.36,129.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:130.3,130.105 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:131.8,132.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:132.32,134.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:135.3,135.103 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:137.2,137.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:137.16,139.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:141.2,141.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:141.32,143.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:143.27,145.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:146.3,147.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:147.27,149.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:150.3,150.106 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:150.106,151.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:153.3,153.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:153.27,154.114 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:154.114,155.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:157.9,157.104 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:157.104,158.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:160.3,160.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:160.27,161.114 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:161.114,162.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:164.9,164.104 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:164.104,165.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:167.3,167.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:169.2,169.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:25.90,26.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:26.26,28.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:30.2,31.49 2 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:31.49,33.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:35.2,35.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:36.16,37.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:38.10,39.63 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:43.84,44.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:44.21,46.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:47.2,47.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:47.25,49.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:50.2,50.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:50.21,52.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:53.2,53.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:53.21,55.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:57.2,58.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:59.18,60.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:61.15,62.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:63.24,64.42 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:65.10,66.108 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:69.2,70.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:70.22,72.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:73.2,74.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:74.29,76.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:78.2,78.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:78.14,85.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:87.2,89.37 3 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:89.37,92.21 3 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:92.21,94.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:97.2,100.31 4 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:100.31,102.38 2 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:102.38,104.37 2 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:104.37,106.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:109.3,122.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:122.26,124.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:125.3,125.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:125.19,127.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:131.3,133.39 3 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:133.39,135.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:135.9,137.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:138.3,138.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:138.17,140.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:142.3,142.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:142.34,144.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:145.3,145.11 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:148.2,155.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:20.99,22.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:22.16,24.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:26.2,31.44 3 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:31.44,32.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:32.33,33.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:33.43,38.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:43.2,43.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:43.49,45.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:46.2,46.48 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:46.48,48.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:50.2,52.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:52.27,55.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:55.8,60.24 3 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:60.24,62.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:64.3,64.57 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:64.57,66.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:68.3,68.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:71.2,71.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:71.16,73.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:75.2,76.23 2 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:76.23,78.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:80.2,80.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:19.40,89.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:109.71,111.9 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:111.9,113.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:115.2,116.38 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:116.38,117.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:118.13,119.41 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:119.41,121.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:122.17,123.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:123.43,125.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:126.11,127.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:127.40,129.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:133.2,133.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:133.22,138.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:139.2,139.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:143.90,144.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:144.25,146.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:148.2,149.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:149.16,151.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:153.2,157.61 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:157.61,159.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:161.2,161.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:162.16,163.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:164.14,165.35 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:166.13,167.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:168.16,169.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:170.17,171.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:172.16,173.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:174.15,175.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:176.10,177.120 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:189.85,191.39 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:191.39,192.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:192.44,194.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:196.2,196.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:196.15,198.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:199.2,199.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:199.15,201.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:202.2,202.46 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:205.91,207.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:207.17,209.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:211.2,215.25 5 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:215.25,217.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:218.2,224.25 4 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:224.25,226.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:227.2,227.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:227.25,229.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:231.2,243.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:243.16,245.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:247.2,247.139 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:250.89,252.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:252.19,254.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:255.2,256.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:256.25,258.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:259.2,264.52 5 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:264.52,266.14 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:266.14,268.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:271.2,277.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:277.25,280.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:282.2,283.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:283.16,285.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:287.2,287.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:287.22,288.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:288.20,290.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:291.3,291.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:294.2,297.31 3 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:297.31,300.29 3 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:300.29,302.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:303.3,305.69 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:308.2,308.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:311.88,313.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:313.13,315.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:317.2,318.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:318.16,320.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:322.2,328.22 6 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:328.22,331.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:333.2,333.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:333.23,335.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:335.30,338.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:341.2,341.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:344.91,346.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:346.13,348.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:350.2,353.18 3 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:353.18,354.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:354.27,356.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:357.3,357.73 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:357.73,359.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:362.2,362.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:362.19,370.17 4 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:370.17,372.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:375.2,376.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:376.26,378.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:379.2,379.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:382.92,384.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:384.13,386.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:388.2,389.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:389.16,391.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:393.2,401.16 4 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:401.16,403.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:405.2,405.88 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:408.91,410.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:410.13,412.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:414.2,418.95 4 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:418.95,420.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:422.2,422.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:425.90,427.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:427.13,429.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:431.2,433.167 3 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:433.167,435.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:437.2,437.89 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:437.89,439.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:441.2,441.108 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:22.93,24.49 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:24.49,26.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:28.2,28.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:29.14,30.42 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:31.17,32.59 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:33.16,34.58 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:35.24,36.75 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:37.27,38.71 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:39.22,40.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:41.23,42.63 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:43.10,44.66 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:48.79,49.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:49.13,51.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:52.2,53.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:53.16,55.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:57.2,58.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:58.32,60.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:61.2,84.28 3 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:87.101,88.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:88.13,90.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:91.2,91.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:91.38,93.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:94.2,95.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:95.16,97.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:98.2,98.53 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:98.53,100.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:102.2,104.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:104.17,106.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:107.2,107.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:107.29,109.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:110.2,115.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:118.100,119.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:119.13,121.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:122.2,122.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:122.38,124.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:125.2,126.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:126.16,128.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:129.2,129.53 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:129.53,131.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:133.2,135.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:135.17,137.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:138.2,138.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:138.29,140.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:141.2,146.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:149.123,150.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:150.13,152.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:153.2,153.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:153.18,155.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:156.2,156.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:156.38,158.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:159.2,161.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:161.17,163.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:164.2,169.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:172.113,173.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:173.13,175.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:176.2,176.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:176.50,178.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:179.2,181.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:181.17,183.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:184.2,188.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:191.57,195.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:197.102,198.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:198.13,200.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:201.2,201.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:201.20,203.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:204.2,205.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:205.16,207.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:209.2,210.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:210.32,212.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:214.2,217.56 3 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:217.56,223.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:225.2,230.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:233.41,235.16 2 12 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:235.16,237.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:238.2,238.23 1 12 +github.com/thebtf/engram/internal/mcp/tools_memory.go:35.27,37.2 1 132 +github.com/thebtf/engram/internal/mcp/tools_memory.go:42.41,43.11 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:44.48,45.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:46.10,47.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:54.57,55.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:56.17,57.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:58.16,59.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:60.10,61.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:82.58,83.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:84.28,85.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:86.26,87.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:88.10,89.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:93.114,95.68 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:95.68,97.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:99.2,101.42 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:101.42,102.71 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:102.71,105.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:107.2,117.23 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:117.23,119.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:121.2,124.22 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:124.22,125.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:125.31,127.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:128.3,128.35 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:129.8,129.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:129.37,131.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:132.2,132.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:135.74,136.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:136.30,138.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:139.2,139.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:139.34,141.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:142.2,142.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:142.31,144.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:145.2,145.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:145.22,147.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:161.169,162.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:162.17,164.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:165.2,166.51 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:166.51,168.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:169.2,169.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:172.92,174.42 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:174.42,177.63 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:177.63,179.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:179.9,181.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:183.2,183.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:186.65,190.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:192.115,194.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:194.26,196.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:196.8,196.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:196.31,198.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:199.2,199.117 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:202.122,206.31 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:206.31,207.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:207.45,209.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:211.2,211.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:214.72,216.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:218.117,219.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:219.16,221.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:222.2,223.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:223.20,225.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:225.17,227.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:228.3,228.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:228.27,229.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:229.50,231.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:231.30,232.11 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:236.3,236.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:239.2,241.60 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:241.60,243.61 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:243.61,245.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:246.3,246.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:246.24,247.9 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:249.3,250.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:250.17,252.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:253.3,253.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:253.22,254.9 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:256.3,256.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:256.29,257.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:257.50,259.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:259.30,260.11 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:264.3,265.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:265.32,266.9 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:269.2,269.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:272.51,273.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:273.16,275.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:276.2,277.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:277.18,279.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:280.2,280.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:280.19,282.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:283.2,283.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:286.97,288.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:288.30,290.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:291.2,291.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:291.49,293.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:294.2,294.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:297.108,299.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:301.108,303.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:305.102,307.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:319.55,320.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:320.31,322.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:323.2,323.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:323.26,325.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:326.2,326.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:329.71,330.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:343.26,344.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:345.10,346.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:354.95,362.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:362.16,364.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:366.2,397.39 14 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:397.39,399.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:399.27,401.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:402.8,404.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:405.2,407.46 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:407.46,410.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:411.2,411.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:411.44,413.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:413.12,415.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:417.2,417.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:417.26,419.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:420.2,420.84 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:420.84,422.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:427.2,427.65 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:427.65,429.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:431.2,433.20 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:433.20,435.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:436.2,437.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:437.20,439.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:440.2,440.56 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:440.56,442.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:443.2,443.56 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:443.56,448.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:450.2,450.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:450.45,453.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:459.2,459.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:459.31,461.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:461.22,462.62 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:462.62,465.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:466.4,466.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:468.3,468.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:471.2,472.115 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:472.115,474.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:491.2,491.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:491.19,493.23 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:493.23,495.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:496.3,508.21 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:508.21,510.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:511.3,511.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:522.2,522.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:522.43,535.34 5 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:535.34,556.30 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:556.30,558.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:559.4,559.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:559.44,561.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:562.4,562.106 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:562.106,564.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:575.4,575.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:575.74,577.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:578.4,579.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:579.18,581.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:583.4,584.28 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:584.28,586.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:588.4,588.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:588.31,599.57 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:599.57,601.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:601.17,604.7 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:606.5,607.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:607.21,609.6 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:615.5,615.138 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:615.138,617.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:617.27,619.7 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:620.6,620.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:622.5,623.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:623.26,625.6 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:626.5,626.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:630.4,631.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:631.20,633.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:634.4,634.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:634.22,637.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:637.26,639.6 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:640.5,640.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:645.4,660.77 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:660.77,662.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:663.4,664.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:664.25,666.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:667.4,667.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:673.2,673.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:673.26,675.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:677.2,678.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:678.25,680.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:681.2,681.97 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:681.97,683.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:690.2,691.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:691.21,693.33 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:693.33,695.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:696.3,696.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:696.33,698.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:699.3,699.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:699.49,704.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:721.3,721.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:721.54,722.84 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:722.84,724.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:728.2,728.99 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:728.99,730.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:732.2,733.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:733.22,735.10 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:736.109,737.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:738.100,739.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:740.114,741.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:742.107,743.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:744.11,745.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:748.2,749.43 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:749.43,751.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:753.2,755.34 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:755.34,756.48 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:756.48,757.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:757.19,760.5 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:764.2,764.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:764.31,767.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:768.2,768.35 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:768.35,771.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:772.2,772.76 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:772.76,776.3 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:778.2,780.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:780.16,782.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:782.20,785.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:788.2,788.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:788.25,798.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:798.18,800.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:800.9,800.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:800.30,807.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:808.3,808.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:808.36,810.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:811.3,812.50 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:812.50,815.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:816.3,822.17 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:822.17,824.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:826.3,836.17 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:836.17,838.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:839.3,839.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:842.2,843.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:843.30,844.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:844.52,846.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:846.9,848.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:851.2,869.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:869.21,871.43 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:871.43,873.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:874.3,874.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:874.29,876.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:886.3,886.76 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:886.76,888.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:890.2,890.105 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:890.105,892.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:893.2,894.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:894.16,896.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:901.2,904.40 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:904.40,905.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:905.15,906.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:909.3,910.63 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:910.63,912.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:912.9,914.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:916.3,916.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:916.43,918.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:919.3,920.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:920.20,922.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:925.3,925.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:925.23,928.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:929.3,931.33 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:931.33,934.39 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:934.39,936.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:939.2,948.42 5 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:948.42,950.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:950.21,952.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:952.9,955.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:959.2,959.53 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:959.53,960.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:960.54,961.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:961.33,963.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:964.9,972.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:973.3,973.60 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:973.60,974.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:974.40,976.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:978.3,978.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:978.61,979.41 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:979.41,981.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:983.3,983.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:983.28,985.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:986.3,987.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:989.2,989.51 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:989.51,991.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:995.2,997.53 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:997.53,999.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:999.8,1001.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1002.2,1002.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1002.22,1004.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1008.2,1014.76 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1014.76,1016.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1021.2,1021.57 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1021.57,1026.13 5 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1026.13,1029.21 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1029.21,1032.5 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1033.4,1033.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1033.49,1035.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1036.4,1043.89 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1043.89,1046.5 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1048.4,1048.86 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1052.2,1063.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1063.21,1065.40 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1065.40,1067.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1068.3,1068.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1068.38,1070.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1072.2,1074.18 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1074.18,1081.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1082.2,1082.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1082.28,1084.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1085.2,1085.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1085.16,1087.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1088.2,1088.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1088.30,1090.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1091.2,1091.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1091.30,1093.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1098.2,1098.76 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1098.76,1100.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1101.2,1102.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1102.16,1104.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1105.2,1105.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1111.94,1113.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1113.15,1115.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1117.2,1118.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1118.16,1120.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1122.2,1123.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1123.13,1125.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1126.2,1131.16 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1131.16,1133.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1134.2,1134.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1134.19,1136.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1146.2,1146.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1146.39,1148.55 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1148.55,1150.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1152.2,1152.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1152.39,1154.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1157.2,1158.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1158.21,1163.21 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1163.21,1165.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1166.3,1167.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1167.21,1169.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1170.3,1170.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1170.52,1172.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1173.3,1173.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1173.52,1178.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1179.3,1179.41 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1179.41,1182.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1183.3,1183.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1188.2,1188.46 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1188.46,1190.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1191.2,1191.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1191.27,1193.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1195.2,1196.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1196.16,1198.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1201.2,1210.16 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1210.16,1212.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1213.2,1213.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1218.59,1220.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1220.38,1222.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1225.2,1226.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1226.29,1227.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1227.22,1229.9 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1232.2,1232.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1232.18,1234.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1237.2,1244.29 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1244.29,1245.67 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1245.67,1247.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1249.2,1249.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1249.16,1251.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1254.2,1254.11 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1258.55,1260.47 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1260.47,1262.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1263.2,1264.58 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1264.58,1266.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1267.2,1267.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1270.252,1271.108 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1271.108,1273.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1274.2,1274.55 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1274.55,1276.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1277.2,1277.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1280.184,1282.69 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1282.69,1284.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1284.32,1285.58 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1285.58,1287.10 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1290.3,1290.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1290.18,1292.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1294.2,1294.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1294.19,1297.32 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1297.32,1298.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1298.39,1300.10 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1303.3,1303.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1303.19,1305.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1307.2,1307.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1307.21,1309.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1309.32,1310.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1310.49,1312.10 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1315.3,1315.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1315.18,1317.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1319.2,1319.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1319.28,1321.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1321.17,1323.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1324.3,1324.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1324.27,1326.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1328.2,1328.76 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1328.76,1330.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1331.2,1331.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1342.96,1343.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1343.26,1345.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1347.2,1348.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1348.16,1350.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1352.2,1363.23 9 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1363.23,1364.58 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1364.58,1365.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1365.31,1367.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1367.10,1369.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1373.2,1373.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1373.17,1375.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1376.2,1376.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1376.16,1378.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1379.2,1379.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1379.16,1381.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1382.2,1382.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1382.18,1384.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1385.2,1385.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1385.19,1387.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1388.2,1388.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1388.19,1390.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1396.2,1399.18 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1399.18,1400.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1400.61,1401.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1402.50,1403.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1404.12,1405.108 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1409.2,1410.42 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1410.42,1414.3 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1415.2,1420.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1420.16,1422.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1429.2,1444.43 6 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1444.43,1446.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1449.2,1451.27 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1451.27,1453.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1458.2,1458.46 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1458.46,1460.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1461.2,1461.63 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1461.63,1463.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1465.2,1466.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1466.15,1472.29 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1472.29,1479.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1479.18,1481.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1482.4,1482.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1482.23,1483.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1485.4,1485.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1485.30,1486.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1486.24,1488.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1488.32,1489.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1493.4,1494.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1494.30,1495.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1498.8,1504.29 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1504.29,1506.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1506.18,1508.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1509.4,1509.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1509.23,1510.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1512.4,1512.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1512.30,1513.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1513.24,1515.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1515.32,1516.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1520.4,1521.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1521.30,1522.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1526.2,1526.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1526.26,1528.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1528.17,1530.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1535.2,1535.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1535.74,1536.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1536.13,1537.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1537.33,1542.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1542.26,1544.39 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1544.39,1546.7 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1548.5,1548.82 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1565.2,1565.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1565.38,1569.27 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1569.27,1571.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1572.3,1572.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1572.27,1574.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1576.3,1581.32 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1581.32,1586.4 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1588.3,1592.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1592.18,1594.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1595.3,1596.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1596.17,1598.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1599.3,1599.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1602.2,1602.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1603.15,1618.32 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1618.32,1620.33 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1620.33,1621.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1621.40,1623.11 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1626.4,1638.6 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1640.3,1641.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1641.17,1643.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1644.3,1644.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1646.18,1648.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1648.17,1650.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1651.3,1651.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1653.10,1654.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1654.25,1656.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1657.3,1659.32 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1659.32,1661.33 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1661.33,1662.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1662.40,1664.11 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1667.4,1669.26 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1669.26,1671.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1672.4,1673.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1673.25,1675.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1676.4,1676.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1678.3,1678.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1690.51,1695.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1700.73,1702.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1702.16,1704.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1705.2,1706.48 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1706.48,1710.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1711.2,1713.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1713.16,1715.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1716.2,1716.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1727.117,1731.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1731.21,1733.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1734.2,1735.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1735.16,1737.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1738.2,1739.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1739.27,1741.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1742.2,1742.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1764.19,1775.30 7 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1775.30,1777.37 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1777.37,1779.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1781.3,1781.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1781.20,1783.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1797.2,1797.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1797.39,1799.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1801.2,1811.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1811.25,1813.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1815.2,1816.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1816.29,1818.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1824.2,1824.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1824.27,1826.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1831.2,1833.22 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1833.22,1835.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1837.2,1846.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1846.16,1848.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1853.2,1855.27 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1855.27,1857.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1859.2,1876.33 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1876.33,1878.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1880.2,1881.28 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1881.28,1885.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1885.20,1888.33 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1888.33,1889.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1889.40,1891.11 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1894.4,1894.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1894.20,1895.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1900.3,1900.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1900.22,1902.33 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1902.33,1903.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1903.50,1905.11 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1908.4,1908.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1908.19,1909.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1918.3,1918.56 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1918.56,1919.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1927.3,1927.64 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1927.64,1928.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1932.3,1935.32 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1935.32,1936.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1936.39,1938.10 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1942.3,1956.14 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1956.14,1957.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1957.37,1959.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1961.3,1962.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1962.26,1963.9 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1975.2,1975.59 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1975.59,1986.17 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1986.17,1988.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1990.3,1991.34 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1991.34,1993.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1995.3,1996.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1996.29,1998.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1998.21,2001.34 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2001.34,2002.41 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2002.41,2004.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2007.5,2007.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2007.21,2008.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2011.4,2011.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2011.23,2013.34 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2013.34,2014.51 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2014.51,2016.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2019.5,2019.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2019.20,2020.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2023.4,2023.57 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2023.57,2024.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2027.4,2027.65 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2027.65,2028.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2030.4,2031.33 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2031.33,2032.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2032.40,2034.11 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2037.4,2051.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2051.15,2052.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2052.38,2054.6 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2056.4,2057.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2057.27,2058.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2065.2,2066.28 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2066.28,2068.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2072.2,2072.71 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2072.71,2080.30 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2080.30,2081.41 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2081.41,2087.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2089.3,2089.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2089.13,2090.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2090.31,2095.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2095.25,2097.38 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2097.38,2099.7 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2101.5,2101.81 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2112.2,2112.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2112.38,2115.27 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2115.27,2117.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2121.3,2138.30 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2138.30,2140.11 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2140.11,2141.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2143.4,2160.15 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2160.15,2161.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2161.39,2163.6 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2165.4,2165.46 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2167.3,2173.24 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2173.24,2175.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2176.3,2176.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2179.2,2179.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2180.15,2182.24 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2182.24,2184.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2185.3,2185.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2187.18,2199.30 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2199.30,2201.11 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2201.11,2202.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2204.4,2208.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2208.15,2209.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2209.39,2211.6 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2213.4,2213.35 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2215.3,2216.24 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2216.24,2218.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2219.3,2219.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2220.10,2221.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2221.22,2223.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2224.3,2226.27 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2226.27,2228.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2228.20,2230.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2231.4,2233.26 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2233.26,2235.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2236.4,2237.23 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2237.23,2239.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2240.4,2240.46 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2240.46,2244.5 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2245.4,2245.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2247.3,2247.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2252.94,2254.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2254.16,2256.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2258.2,2260.18 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2260.18,2261.59 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2261.59,2262.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2262.36,2264.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2264.10,2266.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2270.2,2270.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2270.13,2272.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2273.2,2273.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2273.50,2275.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2277.2,2277.98 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2281.98,2282.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2282.26,2284.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2286.2,2287.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2287.16,2289.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2291.2,2292.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2292.13,2294.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2297.2,2298.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2298.19,2299.51 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2299.51,2301.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2302.3,2302.55 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2304.2,2304.42 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2304.42,2306.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2308.2,2308.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2308.54,2309.48 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2309.48,2311.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2312.3,2312.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2316.2,2318.53 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:17.82,19.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:21.149,22.55 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:22.55,24.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:25.2,25.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:25.36,27.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:28.2,34.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:34.16,36.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:37.2,37.42 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:37.42,39.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:40.2,40.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:43.105,44.48 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:44.48,46.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:47.2,48.54 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:51.129,53.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:53.16,55.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:56.2,57.53 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:57.53,59.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:60.2,61.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:61.25,63.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:64.2,65.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:65.16,67.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:68.2,68.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:26.97,27.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:27.18,29.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:30.2,30.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:33.37,35.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:37.81,38.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:38.44,40.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:41.2,41.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:41.38,43.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:44.2,44.57 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:47.88,48.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:48.32,50.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:51.2,52.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:52.20,54.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:55.2,55.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:58.40,72.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:74.106,75.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:75.34,77.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:78.2,79.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:79.16,81.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:83.2,84.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:84.16,86.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:88.2,89.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:89.13,91.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:93.2,94.63 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:94.63,96.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:98.2,98.72 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:98.72,100.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:102.2,106.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:109.117,110.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:110.32,112.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:113.2,113.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:113.34,115.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:117.2,118.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:118.16,120.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:121.2,121.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:121.19,123.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:125.2,126.69 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:126.69,128.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:130.2,136.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:18.33,20.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:22.27,37.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:39.93,40.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:40.30,42.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:43.2,43.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:43.28,45.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:46.2,47.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:47.16,49.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:51.2,52.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:52.17,54.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:55.2,56.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:56.19,58.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:59.2,59.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:59.19,61.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:62.2,63.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:63.16,65.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:67.2,74.9 3 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:74.9,76.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:77.2,78.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:78.15,80.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:81.2,85.16 4 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:85.16,87.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:88.2,88.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:88.17,90.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:92.2,101.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:104.48,105.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:105.16,107.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:108.2,109.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:109.29,111.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:112.2,112.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:112.31,114.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:115.2,115.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:118.75,120.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:120.27,121.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:121.32,123.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:123.17,124.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:126.4,126.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:129.2,134.33 3 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:134.33,136.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:137.2,137.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:137.40,138.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:138.39,140.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:141.3,141.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:143.2,143.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:143.34,145.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:146.2,147.35 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:147.35,149.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:150.2,150.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:153.77,154.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:154.20,156.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:157.2,159.31 3 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:159.31,160.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:160.33,162.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:163.3,163.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:163.30,165.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:167.2,170.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:23.91,25.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:27.38,50.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:52.104,53.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:53.38,55.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:56.2,57.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:57.16,59.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:61.2,62.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:62.26,64.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:65.2,66.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:66.30,68.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:69.2,69.72 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:69.72,71.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:73.2,74.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:74.16,76.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:77.2,78.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:78.16,80.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:81.2,82.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:82.16,84.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:85.2,86.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:86.16,88.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:90.2,105.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:105.16,107.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:109.2,109.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:109.19,117.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:118.2,118.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:118.25,120.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:121.2,121.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:121.30,123.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:124.2,124.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:124.31,126.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:127.2,128.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:128.16,130.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:131.2,131.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:134.91,136.9 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:136.9,138.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:139.2,140.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:140.15,141.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:141.19,143.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:144.3,144.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:146.2,146.94 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:149.59,150.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:150.16,152.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:153.2,154.61 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:154.61,156.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:157.2,157.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:160.56,161.75 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:161.75,163.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:164.2,164.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:167.67,169.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:170.17,171.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:172.67,173.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:174.10,175.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:179.60,180.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:180.16,182.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:183.2,184.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:184.25,186.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:187.2,187.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:190.57,191.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:192.15,193.81 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:193.81,195.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:196.3,196.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:197.19,199.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:199.17,201.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:202.3,202.55 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:202.55,204.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:205.3,205.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:206.14,207.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:208.11,209.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:210.10,211.41 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:215.59,216.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:216.16,218.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:219.2,219.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:220.12,221.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:222.14,223.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:224.10,225.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:28.90,30.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:30.16,32.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:34.2,36.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:37.16,38.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:40.16,42.140 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:44.20,46.140 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:48.17,50.142 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:52.17,56.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:56.50,62.63 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:62.63,64.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:66.4,66.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:66.45,68.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:72.4,74.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:74.25,76.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:77.4,77.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:80.3,80.101 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:82.18,84.141 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:86.18,88.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:88.18,90.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:91.3,91.41 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:93.17,96.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:96.50,99.59 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:99.59,101.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:102.4,104.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:104.25,106.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:107.4,107.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:110.3,110.98 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:112.10,116.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:125.86,126.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:126.16,128.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:129.2,130.9 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:130.9,132.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:133.2,133.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:133.22,135.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:137.2,139.31 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:139.31,141.10 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:141.10,143.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:144.3,145.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:145.22,147.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:148.3,149.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:149.26,151.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:152.3,152.68 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:152.68,154.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:155.3,156.37 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:156.37,158.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:159.3,160.107 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:162.2,162.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:165.249,166.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:166.24,168.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:169.2,169.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:169.38,171.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:173.2,174.31 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:174.31,175.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:175.32,177.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:180.2,181.34 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:181.34,182.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:182.29,183.9 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:185.3,197.17 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:197.17,199.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:200.3,200.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:200.20,201.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:203.3,203.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:203.37,205.33 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:205.33,206.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:208.4,208.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:208.19,209.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:209.43,210.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:212.5,212.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:214.4,215.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:215.30,216.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:220.2,220.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:223.113,229.2 5 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:231.101,233.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:247.92,251.16 4 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:251.16,253.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:253.8,253.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:253.24,255.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:259.2,272.51 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:272.51,274.38 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:274.38,275.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:276.50,277.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:278.12,279.107 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:287.2,292.26 5 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:292.26,294.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:297.2,297.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:297.19,301.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:303.2,311.42 5 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:311.42,315.3 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:316.2,341.64 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:341.64,342.86 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:342.86,344.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:345.3,345.56 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:345.56,347.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:348.3,360.19 6 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:360.19,364.4 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:365.3,365.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:369.2,370.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:370.15,372.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:372.27,374.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:375.3,375.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:375.27,377.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:380.2,381.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:381.15,387.28 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:387.28,395.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:395.18,397.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:398.4,398.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:398.23,399.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:401.4,401.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:401.30,402.66 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:402.66,403.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:405.5,406.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:406.12,407.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:409.5,409.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:409.28,413.6 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:414.5,415.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:415.30,416.11 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:419.4,420.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:420.30,421.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:424.8,432.28 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:432.28,438.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:438.18,440.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:441.4,441.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:441.23,442.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:444.4,444.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:444.30,445.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:445.40,447.31 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:447.31,448.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:452.4,455.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:455.30,456.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:461.2,465.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:465.17,467.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:469.2,470.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:470.16,472.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:473.2,473.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:20.79,21.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:21.43,23.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:24.2,24.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:24.29,26.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:27.2,27.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:30.40,63.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:65.68,71.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:71.25,74.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:75.2,75.67 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:78.62,83.19 3 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:83.19,87.3 3 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:88.2,88.89 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:91.101,92.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:92.22,94.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:95.2,96.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:96.18,98.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:99.2,100.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:100.16,102.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:103.2,104.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:104.16,106.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:107.2,107.119 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:110.99,111.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:111.22,113.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:114.2,115.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:115.18,117.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:118.2,119.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:119.16,121.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:122.2,122.51 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:122.51,124.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:125.2,126.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:126.16,128.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:129.2,131.15 3 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:131.15,132.69 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:132.69,134.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:135.3,135.58 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:137.2,137.130 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:140.102,142.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:142.16,144.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:145.2,145.64 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:145.64,147.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:148.2,148.113 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:151.109,153.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:153.16,155.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:156.2,157.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:157.16,159.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:160.2,161.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:161.16,163.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:164.2,164.67 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:167.107,169.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:169.16,171.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:172.2,173.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:173.16,175.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:176.2,176.107 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:176.107,178.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:179.2,179.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:180.41,181.63 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:182.41,183.95 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:184.10,185.83 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:189.111,191.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:191.16,193.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:194.2,195.57 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:195.57,197.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:198.2,199.23 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:199.23,201.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:202.2,203.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:203.16,205.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:206.2,206.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:206.17,208.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:209.2,209.108 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:212.63,215.2 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:217.69,219.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:219.16,221.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:222.2,222.79 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:225.60,227.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:227.16,229.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:230.2,230.57 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:233.137,234.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:234.49,236.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:237.2,238.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:238.16,240.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:241.2,243.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:243.16,245.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:246.2,247.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:247.16,249.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:250.2,250.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:250.22,252.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:253.2,253.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:256.142,258.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:258.16,260.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:261.2,262.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:262.16,264.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:265.2,265.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:265.47,267.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:268.2,269.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:269.16,270.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:270.50,272.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:273.3,273.89 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:275.2,275.173 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:278.157,280.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:280.16,282.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:283.2,283.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:283.47,285.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:286.2,287.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:287.16,288.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:288.50,290.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:291.3,291.89 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:293.2,293.169 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:296.104,297.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:297.22,299.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:300.2,301.61 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:301.61,303.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:303.20,304.9 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:307.2,307.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:307.19,309.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:310.2,317.8 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:320.119,322.39 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:322.39,323.81 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:323.81,325.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:327.2,327.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:330.71,332.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:332.16,334.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:335.2,335.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:17.61,105.23 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:105.23,122.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:123.2,123.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:126.104,127.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:127.61,129.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:130.2,130.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:130.38,132.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:133.2,134.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:134.16,136.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:137.2,138.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:138.16,140.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:141.2,147.107 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:147.107,149.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:150.2,151.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:151.16,153.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:154.2,170.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:170.19,172.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:173.2,173.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:176.103,177.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:177.61,179.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:180.2,180.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:180.38,182.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:183.2,184.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:184.16,186.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:187.2,191.106 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:191.106,193.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:194.2,195.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:195.16,197.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:198.2,200.31 3 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:200.31,207.36 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:207.36,218.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:219.3,220.35 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:222.2,230.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:233.107,234.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:234.61,236.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:237.2,237.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:237.38,239.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:240.2,241.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:241.16,243.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:244.2,248.110 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:248.110,250.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:251.2,252.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:252.16,254.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:255.2,256.33 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:256.33,266.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:267.2,275.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:278.108,279.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:279.61,281.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:282.2,282.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:282.37,284.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:285.2,286.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:286.16,288.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:289.2,290.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:290.19,292.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:293.2,293.104 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:293.104,295.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:296.2,297.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:297.16,299.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:300.2,307.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:307.16,309.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:310.2,311.43 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:311.43,318.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:319.2,332.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:332.22,334.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:335.2,335.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:338.108,339.62 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:339.62,341.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:342.2,342.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:342.38,344.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:345.2,346.9 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:346.9,348.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:349.2,350.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:350.16,352.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:353.2,357.16 5 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:357.16,359.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:360.2,370.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:373.109,374.62 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:374.62,376.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:377.2,377.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:377.38,379.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:380.2,381.9 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:381.9,383.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:384.2,385.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:385.16,387.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:388.2,390.32 3 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:390.32,392.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:393.2,394.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:394.16,396.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:397.2,403.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:406.106,407.62 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:407.62,409.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:410.2,410.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:410.38,412.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:413.2,414.9 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:414.9,416.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:417.2,418.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:418.16,420.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:421.2,423.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:423.16,424.41 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:424.41,434.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:435.3,435.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:437.2,445.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:483.65,484.42 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:484.42,485.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:485.39,487.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:489.2,489.85 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:489.85,491.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:492.2,492.95 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:495.102,496.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:496.38,498.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:499.2,499.58 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:499.58,501.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:502.2,502.90 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:505.60,508.2 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:510.66,512.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:512.26,514.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:515.2,515.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:518.69,521.33 3 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:521.33,523.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:523.21,524.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:526.3,526.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:526.34,527.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:529.3,530.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:532.2,532.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:535.63,537.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:537.19,539.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:540.2,541.42 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:541.42,543.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:544.2,544.57 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:544.57,546.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:547.2,547.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:547.54,549.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:550.2,550.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:553.70,557.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:559.66,561.9 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:561.9,563.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:564.2,566.17 3 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:566.17,568.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:569.2,569.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:570.103,572.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:573.34,574.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:575.10,576.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:580.56,581.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:581.37,583.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:584.2,584.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:584.26,586.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:586.37,587.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:589.3,589.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:591.2,591.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:594.90,602.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:604.68,605.71 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:605.71,607.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:607.17,609.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:610.3,610.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:612.2,613.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:613.16,615.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:616.2,617.41 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:617.41,619.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:620.2,620.78 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:623.65,625.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:625.16,627.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:628.2,628.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:628.17,630.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:631.2,631.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:634.51,635.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:635.16,637.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:638.2,638.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:641.56,642.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:642.28,644.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:645.2,646.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:649.92,651.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:651.29,653.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:654.2,654.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:657.86,659.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:659.29,661.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:662.2,662.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:665.94,667.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:667.29,669.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:670.2,670.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:673.98,675.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:675.29,677.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:678.2,678.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:17.93,18.104 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:18.104,20.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:22.2,23.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:23.16,25.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:27.2,28.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:28.19,30.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:32.2,35.33 3 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:35.33,36.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:36.47,39.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:42.2,44.20 3 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:44.20,47.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:48.2,49.68 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:49.68,50.48 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:50.48,52.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:53.3,53.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:53.32,55.23 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:55.23,56.63 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:56.63,58.6 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:59.5,59.53 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:61.4,61.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:64.2,71.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:71.17,73.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:73.8,73.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:73.29,75.36 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:75.36,77.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:78.3,83.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:86.2,86.35 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:86.35,88.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:90.2,97.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:97.16,99.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:101.2,110.28 3 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:110.28,112.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:113.2,124.16 4 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:124.16,126.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:127.2,127.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:133.93,134.35 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:134.35,136.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:138.2,139.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:139.16,141.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:143.2,144.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:144.16,146.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:147.2,147.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:147.17,149.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:151.2,152.33 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:152.33,153.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:153.47,156.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:159.2,160.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:160.16,162.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:164.2,176.26 3 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:176.26,178.23 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:178.23,180.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:181.3,192.5 3 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:195.2,196.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:196.16,198.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:199.2,199.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:22.104,24.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:24.16,26.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:28.2,29.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:29.18,31.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:33.2,33.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:34.13,35.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:36.13,37.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:38.14,39.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:40.16,41.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:42.10,43.95 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:51.67,53.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:57.68,58.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:58.33,60.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:61.2,61.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:67.42,69.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:74.61,76.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:76.26,78.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:79.2,79.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:85.90,86.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:86.49,88.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:90.2,91.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:91.15,93.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:94.2,95.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:95.17,97.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:100.2,103.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:103.16,105.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:107.2,113.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:113.12,115.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:115.18,117.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:118.3,119.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:119.20,121.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:122.3,124.48 3 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:125.8,127.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:129.2,130.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:130.16,132.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:134.2,139.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:145.90,147.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:147.15,149.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:151.2,152.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:152.16,154.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:156.2,157.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:157.16,158.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:158.47,160.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:161.3,161.56 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:164.2,170.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:170.19,173.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:173.8,175.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:176.2,176.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:181.92,183.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:183.16,185.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:187.2,188.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:188.16,190.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:192.2,200.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:200.25,207.28 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:207.28,209.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:210.3,210.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:212.2,212.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:216.93,217.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:217.52,219.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:221.2,222.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:222.15,224.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:226.2,227.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:227.16,229.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:231.2,231.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:231.47,232.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:232.47,234.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:235.3,235.59 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:238.2,241.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:35.127,36.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:36.23,38.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:39.2,40.40 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:40.40,42.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:43.2,43.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:43.37,45.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:46.2,46.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:46.37,48.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:49.2,49.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:52.23,80.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:82.26,140.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:142.92,143.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:143.25,145.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:147.2,148.49 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:148.49,150.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:152.2,152.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:153.17,154.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:154.24,156.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:157.3,158.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:158.17,160.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:161.3,165.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:166.17,167.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:167.22,169.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:170.3,170.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:170.22,172.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:173.3,174.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:174.17,176.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:177.3,181.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:182.16,189.23 7 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:189.23,191.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:192.3,192.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:192.24,194.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:195.3,195.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:195.39,197.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:198.3,207.17 3 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:207.17,209.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:210.3,210.69 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:210.69,212.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:213.3,213.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:214.10,215.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:219.92,220.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:220.25,222.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:224.2,225.49 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:225.49,227.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:229.2,229.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:230.17,232.24 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:232.24,234.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:235.3,236.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:236.17,238.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:239.3,239.59 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:239.59,241.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:242.3,242.81 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:242.81,244.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:245.3,250.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:251.17,253.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:253.22,255.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:256.3,257.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:257.17,259.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:260.3,260.79 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:260.79,262.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:263.3,268.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:269.10,270.66 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:274.91,276.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:276.16,278.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:279.2,279.67 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:279.67,280.76 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:280.76,282.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:285.2,286.52 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:286.52,288.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:289.2,289.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:292.74,294.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:294.16,296.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:297.2,297.62 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:297.62,299.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:300.2,300.68 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:303.109,304.56 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:304.56,306.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:307.2,307.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:307.25,309.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:310.2,310.81 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:310.81,312.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:313.2,313.102 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:313.102,315.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:316.2,316.108 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:316.108,318.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:319.2,319.99 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:319.99,321.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:322.2,322.99 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:322.99,324.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:325.2,325.60 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:325.60,327.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:328.2,328.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:328.34,330.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:331.2,331.114 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:331.114,333.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:334.2,334.66 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:334.66,336.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:337.2,337.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:337.40,339.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:340.2,340.132 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:340.132,342.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:343.2,343.35 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:343.35,345.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:346.2,346.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:349.92,350.103 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:350.103,352.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:354.2,355.52 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:355.52,357.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:358.2,358.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:358.32,360.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:361.2,361.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:364.108,365.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:365.19,367.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:368.2,369.53 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:369.53,371.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:372.2,372.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:372.19,374.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:375.2,375.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:375.39,376.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:376.34,378.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:380.2,380.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:383.66,385.53 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:385.53,387.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:388.2,388.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:388.19,390.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:391.2,391.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:10.101,12.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:12.16,14.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:16.2,18.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:19.16,20.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:21.14,22.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:23.15,24.84 1 0 +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:25.16,26.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:27.10,28.97 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:21.75,23.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:25.41,28.2 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:30.31,37.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:39.38,46.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:48.50,56.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:58.43,70.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:72.80,73.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:73.36,75.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:76.2,76.48 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:76.48,78.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:79.2,79.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:82.97,84.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:84.16,86.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:87.2,88.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:88.16,90.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:91.2,92.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:92.16,94.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:95.2,96.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:96.16,98.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:99.2,99.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:102.104,104.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:104.16,106.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:107.2,108.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:108.16,110.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:111.2,112.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:112.16,114.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:115.2,116.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:116.16,118.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:119.2,119.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:122.96,124.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:124.16,126.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:127.2,128.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:128.19,130.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:131.2,132.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:132.18,134.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:135.2,141.79 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:141.79,143.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:143.17,145.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:146.3,146.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:148.2,148.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:151.77,153.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:153.16,155.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:156.2,157.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:157.19,159.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:160.2,160.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:10.101,12.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:12.16,14.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:16.2,17.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:17.18,19.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:21.2,21.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:22.15,23.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:24.13,25.42 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:26.14,27.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:28.16,29.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:30.16,31.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:32.10,33.102 1 0 diff --git a/internal/db/gorm/candidate_store.go b/internal/db/gorm/candidate_store.go index 59097e34..9efff1b6 100644 --- a/internal/db/gorm/candidate_store.go +++ b/internal/db/gorm/candidate_store.go @@ -2,6 +2,7 @@ package gorm import ( + "bytes" "context" "database/sql/driver" "encoding/json" @@ -395,9 +396,6 @@ func (s *CandidateStore) PreserveWithMemoryAndSnapshot( snapshot *models.BulkOpSnapshot, actor string, ) (*models.CrystallizationCandidate, *models.Memory, *models.BulkOpSnapshot, error) { - if !candidateReviewAuditRequired(snapshot) { - return nil, nil, nil, fmt.Errorf("preserve_with_memory_snapshot: candidate_review snapshot is required") - } return s.promoteWithMemoryAndSnapshotAction(ctx, snapshotStore, candidateID, mem, snapshot, actor, "preserve", "preserve_with_memory_snapshot") } @@ -422,46 +420,40 @@ func (s *CandidateStore) promoteWithMemoryAndSnapshotAction( if operation == "" { operation = "promote_with_memory_snapshot" } - if snapshot != nil && snapshotStore == nil { - return nil, nil, nil, fmt.Errorf("%s: snapshot store is required", operation) - } - if candidateReviewAuditRequired(snapshot) && s.auditStore == nil { - return nil, nil, nil, fmt.Errorf("%s: candidate_review audit store is required", operation) + if err := s.validateCandidateReviewSnapshotBinding(ctx, nil, snapshotStore, snapshot, reviewAction, candidateID, actor, operation); err != nil { + return nil, nil, nil, err } - var beforeCandidate *models.CrystallizationCandidate var updatedCandidate *models.CrystallizationCandidate var createdMemory *models.Memory var createdSnapshot *models.BulkOpSnapshot err := s.db.WithContext(ctx).Transaction(func(tx *gorm.DB) error { - if snapshot != nil { - var err error - createdSnapshot, err = snapshotStore.createTx(ctx, tx, snapshot) - if err != nil { - return err - } + if err := s.validateCandidateReviewSnapshotBinding(ctx, tx, snapshotStore, snapshot, reviewAction, candidateID, actor, operation); err != nil { + return err } var err error + createdSnapshot, err = s.createCandidateReviewSnapshotTx(ctx, tx, snapshotStore, snapshot, operation) + if err != nil { + return err + } + beforeCandidate, updatedCandidate, createdMemory, err = s.promoteWithMemoryTx(ctx, tx, candidateID, mem) if err != nil { return err } - if createdSnapshot != nil && createdMemory.ID != 0 { + if createdMemory.ID != 0 { if err := snapshotStore.amendPromoteEntriesTx(ctx, tx, createdSnapshot.SnapshotID, []int64{createdMemory.ID}); err != nil { return err } } - if candidateReviewAuditRequired(snapshot) { - amendedBeforeState, err := amendCandidateReviewAfterTx(ctx, tx, createdSnapshot.SnapshotID, updatedCandidate) - if err != nil { - return err - } - createdSnapshot.BeforeState = amendedBeforeState - return s.logCandidateReviewAuditTx(ctx, tx, reviewAction, actor, "", beforeCandidate, updatedCandidate) + amendedBeforeState, err := amendCandidateReviewAfterTx(ctx, tx, createdSnapshot.SnapshotID, updatedCandidate) + if err != nil { + return err } - return nil + createdSnapshot.BeforeState = amendedBeforeState + return s.logCandidateReviewAuditTx(ctx, tx, reviewAction, actor, "", beforeCandidate, updatedCandidate) }) if err != nil { return nil, nil, nil, err @@ -543,10 +535,6 @@ func (s *CandidateStore) logPromoteAudit(candidateID int64, updatedCandidate *mo }() } -func candidateReviewAuditRequired(snapshot *models.BulkOpSnapshot) bool { - return snapshot != nil && snapshot.OpType == models.SnapshotOpCandidateReviewAction -} - func normalizeCandidateReviewActor(actor string) string { actor = strings.TrimSpace(actor) if actor == "" { @@ -555,6 +543,141 @@ func normalizeCandidateReviewActor(actor string) string { return actor } +func (s *CandidateStore) validateCandidateReviewSnapshotBinding( + ctx context.Context, + tx *gorm.DB, + snapshotStore *SnapshotStore, + snapshot *models.BulkOpSnapshot, + expectedAction string, + candidateID int64, + actor string, + operation string, +) error { + if snapshot == nil { + return fmt.Errorf("%s: candidate_review snapshot is required", operation) + } + if snapshotStore == nil { + return fmt.Errorf("%s: candidate review snapshot store is required", operation) + } + if s.auditStore == nil { + return fmt.Errorf("%s: candidate_review audit store is required", operation) + } + if snapshot.OpType != models.SnapshotOpCandidateReviewAction { + return fmt.Errorf("%s: snapshot op_type must be %q", operation, models.SnapshotOpCandidateReviewAction) + } + expectedAction = strings.TrimSpace(expectedAction) + if snapshot.Actor != normalizeCandidateReviewActor(actor) { + return fmt.Errorf("%s: snapshot actor does not match review actor", operation) + } + if len(snapshot.AffectedMemoryIDs) != 0 { + return fmt.Errorf("%s: candidate review snapshot must not have affected memory ids before mutation", operation) + } + + var parameters map[string]json.RawMessage + if err := json.Unmarshal(snapshot.Parameters, ¶meters); err != nil || parameters == nil { + return fmt.Errorf("%s: invalid candidate review snapshot parameters", operation) + } + var parameterOperation string + if err := json.Unmarshal(parameters["operation"], ¶meterOperation); err != nil || parameterOperation != "candidate_review_action" { + return fmt.Errorf("%s: snapshot parameters.operation must be %q", operation, "candidate_review_action") + } + var parameterAction string + if err := json.Unmarshal(parameters["action"], ¶meterAction); err != nil || parameterAction != expectedAction { + return fmt.Errorf("%s: snapshot parameters.action must be %q", operation, expectedAction) + } + var parameterCandidateID int64 + if err := json.Unmarshal(parameters["candidate_id"], ¶meterCandidateID); err != nil || parameterCandidateID != candidateID { + return fmt.Errorf("%s: snapshot parameters.candidate_id must be %d", operation, candidateID) + } + + var entries map[string]models.SnapshotEntry + if err := json.Unmarshal(snapshot.BeforeState, &entries); err != nil || entries == nil { + return fmt.Errorf("%s: invalid candidate review snapshot before_state", operation) + } + if len(entries) != 1 { + return fmt.Errorf("%s: candidate review snapshot before_state must contain exactly one candidate entry", operation) + } + expectedKey := fmt.Sprintf("candidate:%d", candidateID) + entry, ok := entries[expectedKey] + if !ok { + return fmt.Errorf("%s: candidate review snapshot before_state must contain %q", operation, expectedKey) + } + if entry.Kind != models.EntryKindRestore || len(entry.Before) == 0 || len(entry.After) != 0 { + return fmt.Errorf("%s: candidate review snapshot entry %q must be an unamended restore entry", operation, expectedKey) + } + var beforeCandidate models.CrystallizationCandidate + if err := json.Unmarshal(entry.Before, &beforeCandidate); err != nil { + return fmt.Errorf("%s: candidate review snapshot entry %q has invalid before payload", operation, expectedKey) + } + if beforeCandidate.ID != candidateID { + return fmt.Errorf("%s: candidate review snapshot entry %q has candidate id %d", operation, expectedKey, beforeCandidate.ID) + } + if snapshot.SourceSessionID != beforeCandidate.SourceSessionID { + return fmt.Errorf("%s: candidate review snapshot source session does not match candidate payload", operation) + } + if tx == nil { + return nil + } + + var authoritativeRow candidateRow + if err := tx.WithContext(ctx).Clauses(clause.Locking{Strength: "UPDATE"}).First(&authoritativeRow, candidateID).Error; err != nil { + return fmt.Errorf("%s: load authoritative candidate %d: %w", operation, candidateID, err) + } + authoritativeCandidate := toDomainCandidate(&authoritativeRow) + if snapshot.SourceSessionID != authoritativeCandidate.SourceSessionID { + return fmt.Errorf("%s: candidate review snapshot source session does not match authoritative candidate", operation) + } + matches, err := candidateReviewPayloadMatchesAuthoritative(&beforeCandidate, authoritativeCandidate) + if err != nil { + return fmt.Errorf("%s: compare candidate review snapshot payload: %w", operation, err) + } + if !matches { + return fmt.Errorf("%s: candidate review snapshot before payload does not match authoritative candidate", operation) + } + return nil +} + +func candidateReviewPayloadMatchesAuthoritative(snapshotCandidate, authoritativeCandidate *models.CrystallizationCandidate) (bool, error) { + if snapshotCandidate == nil || authoritativeCandidate == nil { + return false, nil + } + withinPostgresPrecision := func(left, right time.Time) bool { + delta := left.Sub(right) + if delta < 0 { + delta = -delta + } + return delta < time.Microsecond + } + if !withinPostgresPrecision(snapshotCandidate.CreatedAt, authoritativeCandidate.CreatedAt) || + !withinPostgresPrecision(snapshotCandidate.UpdatedAt, authoritativeCandidate.UpdatedAt) { + return false, nil + } + if (snapshotCandidate.ReviewAfter == nil) != (authoritativeCandidate.ReviewAfter == nil) { + return false, nil + } + if snapshotCandidate.ReviewAfter != nil && !withinPostgresPrecision(*snapshotCandidate.ReviewAfter, *authoritativeCandidate.ReviewAfter) { + return false, nil + } + + snapshotCopy := *snapshotCandidate + authoritativeCopy := *authoritativeCandidate + snapshotCopy.CreatedAt = time.Time{} + snapshotCopy.UpdatedAt = time.Time{} + snapshotCopy.ReviewAfter = nil + authoritativeCopy.CreatedAt = time.Time{} + authoritativeCopy.UpdatedAt = time.Time{} + authoritativeCopy.ReviewAfter = nil + snapshotJSON, err := json.Marshal(&snapshotCopy) + if err != nil { + return false, err + } + authoritativeJSON, err := json.Marshal(&authoritativeCopy) + if err != nil { + return false, err + } + return bytes.Equal(snapshotJSON, authoritativeJSON), nil +} + func (s *CandidateStore) logCandidateReviewAuditTx( ctx context.Context, tx *gorm.DB, @@ -667,15 +790,19 @@ func (s *CandidateStore) transitionWithSnapshot( snapshot *models.BulkOpSnapshot, actor string, ) (*models.CrystallizationCandidate, *models.BulkOpSnapshot, error) { - if s.auditStore == nil { - return nil, nil, fmt.Errorf("%s_with_snapshot: candidate_review audit store is required", action) + operation := action + "_with_snapshot" + if err := s.validateCandidateReviewSnapshotBinding(ctx, nil, snapshotStore, snapshot, action, id, actor, operation); err != nil { + return nil, nil, err } - var updatedCandidate *models.CrystallizationCandidate var createdSnapshot *models.BulkOpSnapshot err := s.db.WithContext(ctx).Transaction(func(tx *gorm.DB) error { + if err := s.validateCandidateReviewSnapshotBinding(ctx, tx, snapshotStore, snapshot, action, id, actor, operation); err != nil { + return err + } + var err error - createdSnapshot, err = s.createCandidateReviewSnapshotTx(ctx, tx, snapshotStore, snapshot, action+"_with_snapshot") + createdSnapshot, err = s.createCandidateReviewSnapshotTx(ctx, tx, snapshotStore, snapshot, operation) if err != nil { return err } diff --git a/internal/db/gorm/candidate_store_test.go b/internal/db/gorm/candidate_store_test.go index d996351a..862f9598 100644 --- a/internal/db/gorm/candidate_store_test.go +++ b/internal/db/gorm/candidate_store_test.go @@ -466,14 +466,8 @@ func TestCandidateStore_PromoteWithMemoryAndSnapshot_AmendFailureRollsBackPromot var memCountBefore int64 require.NoError(t, db.Model(&Memory{}).Count(&memCountBefore).Error) - snapshot, err := models.NewBulkOpSnapshot( - fmt.Sprintf("candidate-promote-amend-failure-%d", time.Now().UnixNano()), - models.SnapshotOpCandidateReviewAction, - "system", - json.RawMessage(`{}`), - ) + snapshot, err := reviewpacket.NewCandidateReviewActionSnapshot("promote", createdCandidate, "agent/tester") require.NoError(t, err) - snapshot.SourceSessionID = createdCandidate.SourceSessionID suffix := time.Now().UnixNano() triggerName := fmt.Sprintf("test_fail_snapshot_amend_%d", suffix) @@ -656,6 +650,259 @@ EXECUTE FUNCTION %s()`, triggerName, functionName)).Error) require.Zero(t, snapshotCount) } +type candidateReviewSnapshotSeamCase struct { + name string + action string + wantStatus models.CandidateStatus + createsMemory bool +} + +func candidateReviewSnapshotSeamCases() []candidateReviewSnapshotSeamCase { + return []candidateReviewSnapshotSeamCase{ + {name: "promote", action: "promote", wantStatus: models.CandidateStatusPromoted, createsMemory: true}, + {name: "preserve", action: "preserve", wantStatus: models.CandidateStatusPromoted, createsMemory: true}, + {name: "reject", action: "reject", wantStatus: models.CandidateStatusRejected}, + {name: "suppress", action: "suppress", wantStatus: models.CandidateStatusRejected}, + {name: "supersede", action: "supersede", wantStatus: models.CandidateStatusSuperseded}, + } +} + +func candidateReviewStoreTestMemory(candidate *models.CrystallizationCandidate) *models.Memory { + return &models.Memory{ + Content: candidate.ProposedContent, + Project: "test-project", + EpistemicType: "decision", + Tier: "episodic", + SourceAgent: "crystallization", + } +} + +func callCandidateReviewSnapshotSeam( + ctx context.Context, + cs *CandidateStore, + snapshotStore *SnapshotStore, + seam candidateReviewSnapshotSeamCase, + candidate *models.CrystallizationCandidate, + snapshot *models.BulkOpSnapshot, + actor string, +) error { + switch seam.name { + case "promote": + _, _, _, err := cs.PromoteWithMemoryAndSnapshot(ctx, snapshotStore, candidate.ID, candidateReviewStoreTestMemory(candidate), snapshot, actor) + return err + case "preserve": + _, _, _, err := cs.PreserveWithMemoryAndSnapshot(ctx, snapshotStore, candidate.ID, candidateReviewStoreTestMemory(candidate), snapshot, actor) + return err + case "reject": + _, _, err := cs.TransitionToRejectedWithSnapshot(ctx, snapshotStore, candidate.ID, "not durable enough", snapshot, actor) + return err + case "suppress": + _, _, err := cs.TransitionToSuppressedWithSnapshot(ctx, snapshotStore, candidate.ID, "too noisy", snapshot, actor) + return err + case "supersede": + _, _, err := cs.TransitionToSupersededWithSnapshot(ctx, snapshotStore, candidate.ID, snapshot, actor) + return err + default: + return fmt.Errorf("unknown candidate-review seam %q", seam.name) + } +} + +func setCandidateReviewSnapshotParameter(t *testing.T, snapshot *models.BulkOpSnapshot, key string, value any) { + t.Helper() + var parameters map[string]any + require.NoError(t, json.Unmarshal(snapshot.Parameters, ¶meters)) + parameters[key] = value + updated, err := json.Marshal(parameters) + require.NoError(t, err) + snapshot.Parameters = updated +} + +func candidateReviewSnapshotEntries(t *testing.T, snapshot *models.BulkOpSnapshot) map[string]models.SnapshotEntry { + t.Helper() + var entries map[string]models.SnapshotEntry + require.NoError(t, json.Unmarshal(snapshot.BeforeState, &entries)) + return entries +} + +func setCandidateReviewSnapshotEntries(t *testing.T, snapshot *models.BulkOpSnapshot, entries map[string]models.SnapshotEntry) { + t.Helper() + updated, err := json.Marshal(entries) + require.NoError(t, err) + snapshot.BeforeState = updated +} + +func countCandidateReviewTestRows(t *testing.T, db *gorm.DB) (memories int64, snapshots int64) { + t.Helper() + require.NoError(t, db.Model(&Memory{}).Count(&memories).Error) + require.NoError(t, db.Model(&snapshotRow{}).Count(&snapshots).Error) + return memories, snapshots +} + +func TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectInvalidBindingsWithoutWrites(t *testing.T) { + db := openCandidateTestDB(t) + ctx := context.Background() + + invalidCases := []string{ + "nil_snapshot", + "nil_snapshot_store", + "nil_audit_store", + "wrong_op_type", + "wrong_operation_parameter", + "wrong_action_parameter", + "wrong_candidate_parameter", + "wrong_actor", + "wrong_before_key", + "wrong_before_payload_id", + "prepopulated_after", + "extra_before_entry", + "prepopulated_affected_memory_ids", + "wrong_source_session", + "forged_payload_and_source_session", + } + + for _, seam := range candidateReviewSnapshotSeamCases() { + seam := seam + for _, invalidCase := range invalidCases { + invalidCase := invalidCase + t.Run(seam.name+"/"+invalidCase, func(t *testing.T) { + auditStore := NewAuditStore(db) + candidateStore := NewCandidateStore(db, auditStore) + snapshotStore := NewSnapshotStore(db) + candidate := createCandidateReviewStoreTestCandidate(t, candidateStore, ctx, seam.name+"-"+invalidCase) + actor := "agent/tester" + snapshot := newCandidateReviewStoreTestSnapshot(t, candidate, seam.action, actor) + + invokeStore := candidateStore + invokeSnapshotStore := snapshotStore + invokeSnapshot := snapshot + invokeActor := actor + + switch invalidCase { + case "nil_snapshot": + invokeSnapshot = nil + case "nil_snapshot_store": + invokeSnapshotStore = nil + case "nil_audit_store": + invokeStore = NewCandidateStore(db, nil) + case "wrong_op_type": + snapshot.OpType = models.SnapshotOpBulkPromote + case "wrong_operation_parameter": + setCandidateReviewSnapshotParameter(t, snapshot, "operation", "bulk_promote") + case "wrong_action_parameter": + wrongAction := "reject" + if seam.action == wrongAction { + wrongAction = "promote" + } + setCandidateReviewSnapshotParameter(t, snapshot, "action", wrongAction) + case "wrong_candidate_parameter": + setCandidateReviewSnapshotParameter(t, snapshot, "candidate_id", candidate.ID+1) + case "wrong_actor": + snapshot.Actor = "agent/other" + case "wrong_before_key": + entries := candidateReviewSnapshotEntries(t, snapshot) + entry := entries[fmt.Sprintf("candidate:%d", candidate.ID)] + delete(entries, fmt.Sprintf("candidate:%d", candidate.ID)) + entries[fmt.Sprintf("candidate:%d", candidate.ID+1)] = entry + setCandidateReviewSnapshotEntries(t, snapshot, entries) + case "wrong_before_payload_id": + entries := candidateReviewSnapshotEntries(t, snapshot) + key := fmt.Sprintf("candidate:%d", candidate.ID) + entry := entries[key] + var beforeCandidate models.CrystallizationCandidate + require.NoError(t, json.Unmarshal(entry.Before, &beforeCandidate)) + beforeCandidate.ID++ + entry.Before, _ = json.Marshal(&beforeCandidate) + entries[key] = entry + setCandidateReviewSnapshotEntries(t, snapshot, entries) + case "prepopulated_after": + entries := candidateReviewSnapshotEntries(t, snapshot) + key := fmt.Sprintf("candidate:%d", candidate.ID) + entry := entries[key] + entry.After = append(json.RawMessage(nil), entry.Before...) + entries[key] = entry + setCandidateReviewSnapshotEntries(t, snapshot, entries) + case "extra_before_entry": + entries := candidateReviewSnapshotEntries(t, snapshot) + entries["memory:999"] = models.SnapshotEntry{Kind: models.EntryKindDelete} + setCandidateReviewSnapshotEntries(t, snapshot, entries) + case "prepopulated_affected_memory_ids": + snapshot.AffectedMemoryIDs = []int64{999} + case "wrong_source_session": + snapshot.SourceSessionID = "session-for-another-candidate" + case "forged_payload_and_source_session": + entries := candidateReviewSnapshotEntries(t, snapshot) + key := fmt.Sprintf("candidate:%d", candidate.ID) + entry := entries[key] + var beforeCandidate models.CrystallizationCandidate + require.NoError(t, json.Unmarshal(entry.Before, &beforeCandidate)) + beforeCandidate.ProposedContent = "forged rollback content" + beforeCandidate.SourceSessionID = "forged-source-session" + entry.Before, _ = json.Marshal(&beforeCandidate) + entries[key] = entry + setCandidateReviewSnapshotEntries(t, snapshot, entries) + snapshot.SourceSessionID = beforeCandidate.SourceSessionID + default: + t.Fatalf("unhandled invalid case %q", invalidCase) + } + + memoriesBefore, snapshotsBefore := countCandidateReviewTestRows(t, db) + auditsBefore := countAuditRows(t, db, "candidate_review") + + err := callCandidateReviewSnapshotSeam(ctx, invokeStore, invokeSnapshotStore, seam, candidate, invokeSnapshot, invokeActor) + + memoriesAfter, snapshotsAfter := countCandidateReviewTestRows(t, db) + auditsAfter := countAuditRows(t, db, "candidate_review") + storedCandidate, getErr := candidateStore.Get(ctx, candidate.ID) + require.NoError(t, getErr) + + require.Error(t, err, "invalid candidate-review snapshot binding must fail closed") + require.Equal(t, models.CandidateStatusPending, storedCandidate.Status) + require.Nil(t, storedCandidate.PromotedMemoryID) + require.Equal(t, memoriesBefore, memoriesAfter, "invalid binding must not create memory rows") + require.Equal(t, snapshotsBefore, snapshotsAfter, "invalid binding must not create snapshot rows") + require.Equal(t, auditsBefore, auditsAfter, "invalid binding must not create candidate_review audit rows") + }) + } + } +} + +func TestCandidateStore_AllCandidateReviewSnapshotSeamsCommitExactlyOneAudit(t *testing.T) { + db := openCandidateTestDB(t) + ctx := context.Background() + auditStore := NewAuditStore(db) + candidateStore := NewCandidateStore(db, auditStore) + snapshotStore := NewSnapshotStore(db) + + for _, seam := range candidateReviewSnapshotSeamCases() { + seam := seam + t.Run(seam.name, func(t *testing.T) { + candidate := createCandidateReviewStoreTestCandidate(t, candidateStore, ctx, "valid-"+seam.name) + actor := " agent/tester " + snapshot := newCandidateReviewStoreTestSnapshot(t, candidate, seam.action, actor) + memoriesBefore, snapshotsBefore := countCandidateReviewTestRows(t, db) + auditsBefore := countAuditRows(t, db, "candidate_review") + + err := callCandidateReviewSnapshotSeam(ctx, candidateStore, snapshotStore, seam, candidate, snapshot, actor) + + require.NoError(t, err) + storedCandidate, getErr := candidateStore.Get(ctx, candidate.ID) + require.NoError(t, getErr) + require.Equal(t, seam.wantStatus, storedCandidate.Status) + memoriesAfter, snapshotsAfter := countCandidateReviewTestRows(t, db) + auditsAfter := countAuditRows(t, db, "candidate_review") + require.Equal(t, snapshotsBefore+1, snapshotsAfter) + require.Equal(t, auditsBefore+1, auditsAfter, "valid candidate-review seam must write exactly one synchronous audit row") + if seam.createsMemory { + require.Equal(t, memoriesBefore+1, memoriesAfter) + require.NotNil(t, storedCandidate.PromotedMemoryID) + } else { + require.Equal(t, memoriesBefore, memoriesAfter) + require.Nil(t, storedCandidate.PromotedMemoryID) + } + }) + } +} + func createCandidateReviewStoreTestCandidate(t *testing.T, cs *CandidateStore, ctx context.Context, suffix string) *models.CrystallizationCandidate { t.Helper() candidate, err := models.NewCrystallizationCandidate( diff --git a/internal/mcp/tools_bulkops.go b/internal/mcp/tools_bulkops.go index 2c590922..0143b278 100644 --- a/internal/mcp/tools_bulkops.go +++ b/internal/mcp/tools_bulkops.go @@ -14,12 +14,56 @@ import ( "context" "encoding/json" "fmt" + "math/big" + "strings" "github.com/thebtf/engram/internal/auth" "github.com/thebtf/engram/internal/bulkops" "github.com/thebtf/engram/pkg/models" ) +var executeBulkFacade = func(facade *bulkops.Facade, ctx context.Context, identity auth.Identity, op bulkops.BulkOp) (*bulkops.ExecuteResult, error) { + return facade.Execute(ctx, identity, op) +} + +func parseBulkStructuredArgs(args json.RawMessage, idField string, operation string) ([]int64, bool, error) { + var fields map[string]json.RawMessage + if err := json.Unmarshal(args, &fields); err != nil || fields == nil { + return nil, false, fmt.Errorf("%s: arguments must be a JSON object", operation) + } + + rawIDs, ok := fields[idField] + if !ok { + return nil, false, fmt.Errorf("%s: %s is required", operation, idField) + } + var encodedIDs []json.RawMessage + if err := json.Unmarshal(rawIDs, &encodedIDs); err != nil || encodedIDs == nil { + return nil, false, fmt.Errorf("%s: %s must be an array of integral int64 JSON numbers", operation, idField) + } + ids := make([]int64, 0, len(encodedIDs)) + for index, encodedID := range encodedIDs { + numberText := strings.TrimSpace(string(encodedID)) + var exact big.Rat + if _, ok := exact.SetString(numberText); !ok || !exact.IsInt() || !exact.Num().IsInt64() { + return nil, false, fmt.Errorf("%s: %s[%d] must be an integral int64 JSON number", operation, idField, index) + } + ids = append(ids, exact.Num().Int64()) + } + + dryRun := false + if rawDryRun, ok := fields["dry_run"]; ok { + switch strings.TrimSpace(string(rawDryRun)) { + case "true": + dryRun = true + case "false": + dryRun = false + default: + return nil, false, fmt.Errorf("%s: dry_run must be a JSON boolean", operation) + } + } + return ids, dryRun, nil +} + // bulkOpsTools returns MCP tool definitions for bulk_promote, bulk_delete, bulk_supersede. // These are admin-only tools advertised only when ENGRAM_VNEXT_F_ENABLED=true. func bulkOpsTools() []Tool { @@ -101,13 +145,11 @@ func (s *Server) handleBulkPromote(ctx context.Context, args json.RawMessage) (s return "", fmt.Errorf("admin_required: bulk_promote requires admin identity") } - m, err := parseArgs(args) + candidateIDs, dryRun, err := parseBulkStructuredArgs(args, "candidate_ids", "bulk_promote") if err != nil { return "", err } - - candidateIDs := bulkops.NormalizeCandidateIDs(coerceInt64Slice(m["candidate_ids"])) - dryRun := coerceBool(m["dry_run"], false) + candidateIDs = bulkops.NormalizeCandidateIDs(candidateIDs) // Nil-safe TG5-absent dry-run seam: when facade is nil and dry_run=true, // return a preview using the facade's normalized ID contract — no DB access. @@ -130,7 +172,7 @@ func (s *Server) handleBulkPromote(ctx context.Context, args json.RawMessage) (s DryRun: dryRun, Actor: resolveGovernanceActor(identity), } - result, err := s.bulkFacade.Execute(ctx, identity, op) + result, err := executeBulkFacade(s.bulkFacade, ctx, identity, op) if err != nil { return "", fmt.Errorf("bulk_promote: %w", err) } @@ -160,20 +202,18 @@ func (s *Server) handleBulkDelete(ctx context.Context, args json.RawMessage) (st return "", fmt.Errorf("admin_required: bulk_delete requires admin identity") } - m, err := parseArgs(args) + memoryIDs, dryRun, err := parseBulkStructuredArgs(args, "memory_ids", "bulk_delete") if err != nil { return "", err } - - memoryIDs := coerceInt64Slice(m["memory_ids"]) - dryRun := coerceBool(m["dry_run"], false) + memoryIDs = bulkops.NormalizeCandidateIDs(memoryIDs) // Nil-safe TG5-absent dry-run seam. if dryRun && s.bulkFacade == nil { out := map[string]any{ "dry_run": true, "would_affect": len(memoryIDs), - "note": "bulk_delete preview (facade not wired — would_affect from input only)", + "note": "bulk_delete preview (facade not wired — normalized input only)", } return marshalJSON(out) } @@ -188,7 +228,7 @@ func (s *Server) handleBulkDelete(ctx context.Context, args json.RawMessage) (st DryRun: dryRun, Actor: resolveGovernanceActor(identity), } - result, err := s.bulkFacade.Execute(ctx, identity, op) + result, err := executeBulkFacade(s.bulkFacade, ctx, identity, op) if err != nil { return "", fmt.Errorf("bulk_delete: %w", err) } @@ -217,20 +257,18 @@ func (s *Server) handleBulkSupersede(ctx context.Context, args json.RawMessage) return "", fmt.Errorf("admin_required: bulk_supersede requires admin identity") } - m, err := parseArgs(args) + memoryIDs, dryRun, err := parseBulkStructuredArgs(args, "memory_ids", "bulk_supersede") if err != nil { return "", err } - - memoryIDs := coerceInt64Slice(m["memory_ids"]) - dryRun := coerceBool(m["dry_run"], false) + memoryIDs = bulkops.NormalizeCandidateIDs(memoryIDs) // Nil-safe TG5-absent dry-run seam. if dryRun && s.bulkFacade == nil { out := map[string]any{ "dry_run": true, "would_affect": len(memoryIDs), - "note": "bulk_supersede preview (facade not wired — would_affect from input only)", + "note": "bulk_supersede preview (facade not wired — normalized input only)", } return marshalJSON(out) } @@ -245,7 +283,7 @@ func (s *Server) handleBulkSupersede(ctx context.Context, args json.RawMessage) DryRun: dryRun, Actor: resolveGovernanceActor(identity), } - result, err := s.bulkFacade.Execute(ctx, identity, op) + result, err := executeBulkFacade(s.bulkFacade, ctx, identity, op) if err != nil { return "", fmt.Errorf("bulk_supersede: %w", err) } diff --git a/internal/mcp/tools_dryrun_test.go b/internal/mcp/tools_dryrun_test.go index c5f41de5..26ad9f12 100644 --- a/internal/mcp/tools_dryrun_test.go +++ b/internal/mcp/tools_dryrun_test.go @@ -9,12 +9,14 @@ package mcp import ( "context" "encoding/json" + "fmt" "os" "testing" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" "github.com/thebtf/engram/internal/auth" + "github.com/thebtf/engram/internal/bulkops" gormdb "github.com/thebtf/engram/internal/db/gorm" "gorm.io/gorm/logger" ) @@ -180,6 +182,271 @@ func TestBulkOps_FlagOff_NotAdvertised(t *testing.T) { } } +type bulkStructuredInputToolCase struct { + name string + idField string +} + +func bulkStructuredInputToolCases() []bulkStructuredInputToolCase { + return []bulkStructuredInputToolCase{ + {name: "bulk_promote", idField: "candidate_ids"}, + {name: "bulk_delete", idField: "memory_ids"}, + {name: "bulk_supersede", idField: "memory_ids"}, + } +} + +func bulkToolAdminContext() context.Context { + return auth.WithIdentity(context.Background(), auth.Identity{ + Role: auth.RoleAdmin, + Source: auth.SourceMaster, + }) +} + +func TestBulkOps_PublicDispatchRejectsInvalidStructuredInputs(t *testing.T) { + t.Setenv("ENGRAM_VNEXT_F_ENABLED", "true") + + idCases := []struct { + name string + value string + }{ + {name: "null", value: "null"}, + {name: "top_level_string", value: `"1"`}, + {name: "string_member", value: `[1,"2"]`}, + {name: "boolean_member", value: `[1,true]`}, + {name: "object_member", value: `[1,{"id":2}]`}, + {name: "nested_array", value: `[1,[2]]`}, + {name: "fraction", value: `[1,1.5]`}, + {name: "positive_overflow", value: `[9223372036854775808]`}, + {name: "negative_overflow", value: `[-9223372036854775809]`}, + {name: "mixed_invalid", value: `[1,9007199254740993,"2",3]`}, + } + dryRunCases := []struct { + name string + value string + }{ + {name: "string", value: `"true"`}, + {name: "number", value: `1`}, + {name: "null", value: `null`}, + {name: "object", value: `{}`}, + {name: "array", value: `[]`}, + } + + for _, toolCase := range bulkStructuredInputToolCases() { + toolCase := toolCase + t.Run(toolCase.name, func(t *testing.T) { + for _, topLevelCase := range []struct { + name string + args json.RawMessage + }{ + {name: "null_arguments", args: json.RawMessage(`null`)}, + {name: "array_arguments", args: json.RawMessage(`[]`)}, + {name: "string_arguments", args: json.RawMessage(`"invalid"`)}, + {name: "malformed_arguments", args: json.RawMessage(`{`)}, + } { + topLevelCase := topLevelCase + t.Run(topLevelCase.name, func(t *testing.T) { + s := NewServer(ServerOptions{Version: "test"}) + result, err := s.callTool(bulkToolAdminContext(), toolCase.name, topLevelCase.args) + require.Error(t, err) + assert.Contains(t, err.Error(), "arguments") + assert.Empty(t, result) + }) + } + + t.Run("missing_id_field", func(t *testing.T) { + s := NewServer(ServerOptions{Version: "test"}) + result, err := s.callTool(bulkToolAdminContext(), toolCase.name, json.RawMessage(`{"dry_run":true}`)) + require.Error(t, err) + assert.Contains(t, err.Error(), toolCase.idField) + assert.Empty(t, result) + }) + + for _, inputCase := range idCases { + inputCase := inputCase + t.Run("ids_"+inputCase.name, func(t *testing.T) { + s := NewServer(ServerOptions{Version: "test"}) + args := json.RawMessage(fmt.Sprintf(`{"%s":%s,"dry_run":true}`, toolCase.idField, inputCase.value)) + result, err := s.callTool(bulkToolAdminContext(), toolCase.name, args) + require.Error(t, err) + assert.Contains(t, err.Error(), toolCase.idField) + assert.Empty(t, result) + }) + } + + for _, inputCase := range dryRunCases { + inputCase := inputCase + t.Run("dry_run_"+inputCase.name, func(t *testing.T) { + s := NewServer(ServerOptions{Version: "test"}) + args := json.RawMessage(fmt.Sprintf(`{"%s":[1],"dry_run":%s}`, toolCase.idField, inputCase.value)) + result, err := s.callTool(bulkToolAdminContext(), toolCase.name, args) + require.Error(t, err) + assert.Contains(t, err.Error(), "dry_run") + assert.Empty(t, result) + }) + } + }) + } +} + +func TestBulkOps_PublicDispatchPreservesExactIntegralIDsBeforeNormalization(t *testing.T) { + t.Setenv("ENGRAM_VNEXT_F_ENABLED", "true") + + const exactIDs = `[1.0,1e0,9007199254740992,9007199254740993,9223372036854775807,-9223372036854775808,0,9007199254740993]` + for _, toolCase := range bulkStructuredInputToolCases() { + toolCase := toolCase + t.Run(toolCase.name, func(t *testing.T) { + s := NewServer(ServerOptions{Version: "test"}) + args := json.RawMessage(fmt.Sprintf(`{"%s":%s,"dry_run":true}`, toolCase.idField, exactIDs)) + result, err := s.callTool(bulkToolAdminContext(), toolCase.name, args) + require.NoError(t, err) + + var out map[string]any + require.NoError(t, json.Unmarshal([]byte(result), &out)) + assert.Equal(t, true, out["dry_run"]) + assert.Equal(t, float64(5), out["would_affect"]) + }) + } +} + +func TestBulkOps_InvalidStructuredInputsDoNotInvokeWiredFacade(t *testing.T) { + t.Setenv("ENGRAM_VNEXT_F_ENABLED", "true") + + originalExecute := executeBulkFacade + t.Cleanup(func() { executeBulkFacade = originalExecute }) + + invocations := 0 + executeBulkFacade = func(_ *bulkops.Facade, _ context.Context, _ auth.Identity, _ bulkops.BulkOp) (*bulkops.ExecuteResult, error) { + invocations++ + return &bulkops.ExecuteResult{}, nil + } + + idValues := []string{ + "null", + `"1"`, + `[1,"2"]`, + `[1,true]`, + `[1,{"id":2}]`, + `[1,[2]]`, + `[1,1.5]`, + `[9223372036854775808]`, + `[-9223372036854775809]`, + `[1,9007199254740993,"2",3]`, + } + dryRunValues := []string{`"true"`, `1`, `null`, `{}`, `[]`} + + for _, toolCase := range bulkStructuredInputToolCases() { + toolCase := toolCase + t.Run(toolCase.name, func(t *testing.T) { + s := NewServer(ServerOptions{Version: "test"}) + s.bulkFacade = bulkops.NewFacade(nil, nil, nil, nil) + + requests := []struct { + name string + args json.RawMessage + expectedField string + }{ + {name: "missing_id_field", args: json.RawMessage(`{}`), expectedField: toolCase.idField}, + {name: "null_arguments", args: json.RawMessage(`null`), expectedField: "arguments"}, + {name: "array_arguments", args: json.RawMessage(`[]`), expectedField: "arguments"}, + {name: "string_arguments", args: json.RawMessage(`"invalid"`), expectedField: "arguments"}, + {name: "malformed_arguments", args: json.RawMessage(`{`), expectedField: "arguments"}, + } + for i, value := range idValues { + requests = append(requests, struct { + name string + args json.RawMessage + expectedField string + }{ + name: fmt.Sprintf("invalid_ids_%d", i), + args: json.RawMessage(fmt.Sprintf(`{"%s":%s}`, toolCase.idField, value)), + expectedField: toolCase.idField, + }) + } + for i, value := range dryRunValues { + requests = append(requests, struct { + name string + args json.RawMessage + expectedField string + }{ + name: fmt.Sprintf("invalid_dry_run_%d", i), + args: json.RawMessage(fmt.Sprintf(`{"%s":[1],"dry_run":%s}`, toolCase.idField, value)), + expectedField: "dry_run", + }) + } + + for _, request := range requests { + request := request + t.Run(request.name, func(t *testing.T) { + invocations = 0 + result, err := s.callTool(bulkToolAdminContext(), toolCase.name, request.args) + require.Error(t, err) + assert.Contains(t, err.Error(), request.expectedField) + assert.Empty(t, result) + assert.Zero(t, invocations, "invalid public input must be rejected before facade invocation") + }) + } + }) + } +} + +func TestBulkOps_WiredFacadeReceivesExactNormalizedIDsAndStrictDryRun(t *testing.T) { + t.Setenv("ENGRAM_VNEXT_F_ENABLED", "true") + + originalExecute := executeBulkFacade + t.Cleanup(func() { executeBulkFacade = originalExecute }) + + const exactIDs = `[1.0,1e0,9007199254740992,9007199254740993,9223372036854775807,-9223372036854775808,0,9007199254740993]` + expectedIDs := []int64{-9223372036854775808, 1, 9007199254740992, 9007199254740993, 9223372036854775807} + + for _, toolCase := range bulkStructuredInputToolCases() { + toolCase := toolCase + t.Run(toolCase.name, func(t *testing.T) { + s := NewServer(ServerOptions{Version: "test"}) + s.bulkFacade = bulkops.NewFacade(nil, nil, nil, nil) + + for _, dryRunCase := range []struct { + name string + raw string + value bool + }{ + {name: "missing", value: false}, + {name: "false", raw: `,"dry_run":false`, value: false}, + {name: "true", raw: `,"dry_run":true`, value: true}, + } { + dryRunCase := dryRunCase + t.Run(dryRunCase.name, func(t *testing.T) { + invocations := 0 + var captured bulkops.BulkOp + executeBulkFacade = func(_ *bulkops.Facade, _ context.Context, _ auth.Identity, op bulkops.BulkOp) (*bulkops.ExecuteResult, error) { + invocations++ + captured = op + return &bulkops.ExecuteResult{ + DryRun: op.DryRun, + WouldAffect: len(op.CandidateIDs) + len(op.MemoryIDs), + AffectedCount: len(op.CandidateIDs) + len(op.MemoryIDs), + }, nil + } + + args := json.RawMessage(fmt.Sprintf(`{"%s":%s%s}`, toolCase.idField, exactIDs, dryRunCase.raw)) + result, err := s.callTool(bulkToolAdminContext(), toolCase.name, args) + require.NoError(t, err) + assert.NotEmpty(t, result) + assert.Equal(t, 1, invocations) + assert.Equal(t, dryRunCase.value, captured.DryRun) + + if toolCase.name == "bulk_promote" { + assert.Equal(t, expectedIDs, captured.CandidateIDs) + assert.Empty(t, captured.MemoryIDs) + } else { + assert.Equal(t, expectedIDs, captured.MemoryIDs) + assert.Empty(t, captured.CandidateIDs) + } + }) + } + }) + } +} + // TestDryRun_Integration_StoreMemory_ZeroSideEffects verifies store_memory dry_run=true // leaves the memories table unchanged. // Skipped when DATABASE_DSN is absent. From 38d6a4fb7ff5f5ae3b6c0066c0a1b806421137df Mon Sep 17 00:00:00 2001 From: Kirill Turanskiy Date: Fri, 10 Jul 2026 12:29:41 +0300 Subject: [PATCH 014/111] fix: handle empty embedding stats --- .../2026-07-10-db-embedding-stats-maker.md | 52 ++++ .../DB-EMBEDDING-STATS.final.json | 42 +++ .../db-embedding-stats/SHA256SUMS.txt | 7 + .../evidence/DB-EMBEDDING-STATS.red.json | 8 + .../evidence/DB-EMBEDDING-STATS.tdd.json | 35 +++ .../db-embedding-stats/evidence/coverage.out | 240 ++++++++++++++++++ internal/embedding/store.go | 7 +- internal/embedding/store_stats_test.go | 32 +++ 8 files changed, 421 insertions(+), 2 deletions(-) create mode 100644 .agent/reports/2026-07-10-db-embedding-stats-maker.md create mode 100644 .agent/reports/evidence/production-ready/db-embedding-stats/DB-EMBEDDING-STATS.final.json create mode 100644 .agent/reports/evidence/production-ready/db-embedding-stats/SHA256SUMS.txt create mode 100644 .agent/specs/db-embedding-stats/evidence/DB-EMBEDDING-STATS.red.json create mode 100644 .agent/specs/db-embedding-stats/evidence/DB-EMBEDDING-STATS.tdd.json create mode 100644 .agent/specs/db-embedding-stats/evidence/coverage.out diff --git a/.agent/reports/2026-07-10-db-embedding-stats-maker.md b/.agent/reports/2026-07-10-db-embedding-stats-maker.md new file mode 100644 index 00000000..8a3d4505 --- /dev/null +++ b/.agent/reports/2026-07-10-db-embedding-stats-maker.md @@ -0,0 +1,52 @@ +# DB-EMBEDDING-STATS Maker Report + +Date: 2026-07-10 + +Worktree: `D:/Dev/engram/.agent/worktrees/prc-db-embedding-stats` + +Branch: `work/prc-db-embedding-stats` + +Base: `origin/main@dc891b2d72b1fd63b83e4a630a249241fc389151` + +Finish state: `READY_FOR_INDEPENDENT_CHECK` + +## Classification and root cause + +The failure is a live production defect in `embedding.Store.Stats`, reached by fresh installs and by installations with no embedding chunks. PostgreSQL aggregate `max(created_at)` returns one row containing SQL NULL for an empty table. The current GORM path attempted to scan that NULL into `*time.Time` and returned: + +```text +unsupported Scan, storing driver.Value type into type *time.Time +``` + +The existing `TestStoreStats_Empty` was not deterministic evidence because it read the shared physical table and accepted populated state. The new regression shadows the shared relation with a transaction-local empty temporary `content_chunks` table, so the exact fresh-empty condition is proven without persistent schema or rows. + +## Change + +- Scan the nullable aggregate into `sql.NullTime`. +- Populate `LastChunkAt` only when the aggregate is valid. +- Add `TestStoreStats_EmptyPhysicalTableReturnsZeroValue`, which requires the entire `EmbeddingStats` result to be its zero value. + +No demolished graph, rerank, scoring, SDK extraction, or HTTP MCP path was restored. + +## TDD evidence + +- RED: the new regression failed on the unmodified production code with the exact NULL scan error. +- GREEN: focused test passed; repeat-20 passed; full `internal/embedding` package passed three times against a full-schema PostgreSQL database. +- Race: focused race repeat-3 and final full-package race passed. +- Vet: `go vet ./internal/embedding` passed. +- Prove-It: temporarily replacing `Store.Stats` with `panic("not implemented")` failed the regression; the controlled sentinel was removed and the test returned to GREEN. +- Coverage: package 47.8% WARN under the informational 80% default; touched `Stats` function 76.2%. No threshold was reduced. + +Canonical phase evidence is in `.agent/specs/db-embedding-stats/evidence/DB-EMBEDDING-STATS.tdd.json`. + +## Environment and cleanup + +- PostgreSQL 17 test container: `engram-prc-postgres`. +- Dedicated database: `engram_prc_embedding_stats`, with pgvector enabled only for the RED/GREEN fresh-empty proof. +- Final active sessions for that database: `0`. +- The dedicated database was dropped with forced cleanup; final database count: `0`. +- The full package gates used the existing full-schema `engram_prc_crystallization` database read/write transaction fixtures and left their normal rollback boundaries intact. + +## Required next action + +A different native agent must create a fresh detached checker worktree at the exact candidate commit, reproduce the empty-table behavior independently, inspect NULL/non-NULL timestamp semantics, run focused/repeat/race/vet gates, verify no shared-data dependency or residue, and issue PASS or FAIL. A separate root post-run code review remains mandatory before integration. diff --git a/.agent/reports/evidence/production-ready/db-embedding-stats/DB-EMBEDDING-STATS.final.json b/.agent/reports/evidence/production-ready/db-embedding-stats/DB-EMBEDDING-STATS.final.json new file mode 100644 index 00000000..1fa3cb6c --- /dev/null +++ b/.agent/reports/evidence/production-ready/db-embedding-stats/DB-EMBEDDING-STATS.final.json @@ -0,0 +1,42 @@ +{ + "schema_version": 1, + "slice": "DB-EMBEDDING-STATS", + "status": "READY_FOR_INDEPENDENT_CHECK", + "base": "dc891b2d72b1fd63b83e4a630a249241fc389151", + "classification": "live", + "root_cause": "PostgreSQL max(created_at) returns SQL NULL on an empty content_chunks table, which the production GORM path attempted to scan into *time.Time.", + "changed_paths": [ + "internal/embedding/store.go", + "internal/embedding/store_stats_test.go", + ".agent/specs/db-embedding-stats/evidence/DB-EMBEDDING-STATS.red.json", + ".agent/specs/db-embedding-stats/evidence/DB-EMBEDDING-STATS.tdd.json", + ".agent/specs/db-embedding-stats/evidence/coverage.out", + ".agent/reports/2026-07-10-db-embedding-stats-maker.md", + ".agent/reports/evidence/production-ready/db-embedding-stats/DB-EMBEDDING-STATS.final.json", + ".agent/reports/evidence/production-ready/db-embedding-stats/SHA256SUMS.txt" + ], + "gates": { + "red_observed": true, + "focused_green": true, + "repeat_20": true, + "package_repeat_3": true, + "focused_race_repeat_3": true, + "full_package_race": true, + "vet": true, + "prove_it_failed_against_sentinel": true, + "diff_check": true + }, + "coverage": { + "package_percent": 47.8, + "stats_function_percent": 76.2, + "threshold": 80, + "status": "WARN" + }, + "cleanup": { + "dedicated_database": "engram_prc_embedding_stats", + "active_sessions_before_drop": 0, + "database_count_after_drop": 0 + }, + "demolition_guard": "No v5-demolished path restored.", + "next_gate": "fresh independent checker, then root post-run code review" +} diff --git a/.agent/reports/evidence/production-ready/db-embedding-stats/SHA256SUMS.txt b/.agent/reports/evidence/production-ready/db-embedding-stats/SHA256SUMS.txt new file mode 100644 index 00000000..30f182e2 --- /dev/null +++ b/.agent/reports/evidence/production-ready/db-embedding-stats/SHA256SUMS.txt @@ -0,0 +1,7 @@ +7bfb06dfc0dda792147d5e2df9d2fe68b59edaac55d2396dece1b8a8a09eee5f internal/embedding/store.go +a35a234eb167c58bf201afc50954e43926a69ba2294536f2d0fabf4e015b12a4 internal/embedding/store_stats_test.go +12adb14f118dbf821ee1eabb569f6bbcae831875d3b8a7fb5928c18a4b323a56 .agent/specs/db-embedding-stats/evidence/DB-EMBEDDING-STATS.red.json +56022d4fb07816ca0ed3f841770605dc212a4cb39fcb9682c75a753f73c7776b .agent/specs/db-embedding-stats/evidence/DB-EMBEDDING-STATS.tdd.json +edd5fb10fe7a7d7aaddd2bfd96ea220fe42f94561d386712951eb70eabffb735 .agent/specs/db-embedding-stats/evidence/coverage.out +efad310616efa0878628e6af946f06349b16f0c7817432cbb3614ff5c74de025 .agent/reports/2026-07-10-db-embedding-stats-maker.md +a82aa7d911935e1327893faa266d49df97018a182fbe8498dc3e4976c59d9ada .agent/reports/evidence/production-ready/db-embedding-stats/DB-EMBEDDING-STATS.final.json diff --git a/.agent/specs/db-embedding-stats/evidence/DB-EMBEDDING-STATS.red.json b/.agent/specs/db-embedding-stats/evidence/DB-EMBEDDING-STATS.red.json new file mode 100644 index 00000000..48db3052 --- /dev/null +++ b/.agent/specs/db-embedding-stats/evidence/DB-EMBEDDING-STATS.red.json @@ -0,0 +1,8 @@ +{ + "task_id": "DB-EMBEDDING-STATS", + "observed_at": "2026-07-10T09:26:11.3028869Z", + "test_file": "internal/embedding/store_stats_test.go", + "test_name": "TestStoreStats_EmptyPhysicalTableReturnsZeroValue", + "failure_reason": "PostgreSQL max(created_at) returned NULL for an empty content_chunks table and GORM attempted to scan it into *time.Time.", + "runner_stdout_excerpt": "Stats on physically empty content_chunks: embedding stats: last chunk at: sql: Scan error on column index 0, name max: unsupported Scan, storing driver.Value type into type *time.Time" +} diff --git a/.agent/specs/db-embedding-stats/evidence/DB-EMBEDDING-STATS.tdd.json b/.agent/specs/db-embedding-stats/evidence/DB-EMBEDDING-STATS.tdd.json new file mode 100644 index 00000000..4d94a57d --- /dev/null +++ b/.agent/specs/db-embedding-stats/evidence/DB-EMBEDDING-STATS.tdd.json @@ -0,0 +1,35 @@ +{ + "task_id": "DB-EMBEDDING-STATS", + "stack": "GO", + "red": { + "observed_at": "2026-07-10T09:26:11.3028869Z", + "test_file": "internal/embedding/store_stats_test.go", + "test_name": "TestStoreStats_EmptyPhysicalTableReturnsZeroValue", + "failure_reason": "PostgreSQL max(created_at) returned NULL for an empty content_chunks table and GORM attempted to scan it into *time.Time.", + "runner_stdout_excerpt": "unsupported Scan, storing driver.Value type into type *time.Time" + }, + "green": { + "observed_at": "2026-07-10T09:28:32.6987371Z", + "passed_tests": 28, + "regressed_tests": 0, + "runner_stdout_excerpt": "focused PASS; repeat-20 PASS; race repeat-3 PASS; internal/embedding package PASS against full-schema PostgreSQL" + }, + "refactor": { + "applied": false, + "reason": "The minimal sql.NullTime conversion is already idiomatic and introduces no duplication." + }, + "prove_it": { + "substituted_files": [ + "internal/embedding/store.go" + ], + "failed_tests": 1, + "runner_stdout_excerpt": "TestStoreStats_EmptyPhysicalTableReturnsZeroValue failed with panic: not implemented after substituting Store.Stats.", + "reverted_at": "2026-07-10T09:31:25.3811023Z" + }, + "coverage": { + "percent": 47.8, + "threshold": 80, + "status": "WARN", + "notes": "Package-wide informational coverage is below the default gate; the touched Stats function measured 76.2%." + } +} diff --git a/.agent/specs/db-embedding-stats/evidence/coverage.out b/.agent/specs/db-embedding-stats/evidence/coverage.out new file mode 100644 index 00000000..457c38e0 --- /dev/null +++ b/.agent/specs/db-embedding-stats/evidence/coverage.out @@ -0,0 +1,240 @@ +mode: set +github.com/thebtf/engram/internal/embedding/backfill.go:17.123,18.15 1 0 +github.com/thebtf/engram/internal/embedding/backfill.go:18.15,20.3 1 0 +github.com/thebtf/engram/internal/embedding/backfill.go:21.2,21.35 1 0 +github.com/thebtf/engram/internal/embedding/backfill.go:21.35,23.3 1 0 +github.com/thebtf/engram/internal/embedding/backfill.go:24.2,24.20 1 0 +github.com/thebtf/engram/internal/embedding/backfill.go:24.20,26.3 1 0 +github.com/thebtf/engram/internal/embedding/backfill.go:28.2,29.6 2 0 +github.com/thebtf/engram/internal/embedding/backfill.go:29.6,30.10 1 0 +github.com/thebtf/engram/internal/embedding/backfill.go:31.21,33.20 2 0 +github.com/thebtf/engram/internal/embedding/backfill.go:34.11,34.11 0 0 +github.com/thebtf/engram/internal/embedding/backfill.go:38.3,46.17 3 0 +github.com/thebtf/engram/internal/embedding/backfill.go:46.17,48.4 1 0 +github.com/thebtf/engram/internal/embedding/backfill.go:49.3,49.26 1 0 +github.com/thebtf/engram/internal/embedding/backfill.go:49.26,52.4 2 0 +github.com/thebtf/engram/internal/embedding/backfill.go:55.3,62.35 3 0 +github.com/thebtf/engram/internal/embedding/backfill.go:62.35,64.4 1 0 +github.com/thebtf/engram/internal/embedding/backfill.go:67.3,68.26 2 0 +github.com/thebtf/engram/internal/embedding/backfill.go:68.26,70.4 1 0 +github.com/thebtf/engram/internal/embedding/backfill.go:71.3,72.17 2 0 +github.com/thebtf/engram/internal/embedding/backfill.go:72.17,74.18 2 0 +github.com/thebtf/engram/internal/embedding/backfill.go:74.18,76.5 1 0 +github.com/thebtf/engram/internal/embedding/backfill.go:77.4,77.11 1 0 +github.com/thebtf/engram/internal/embedding/backfill.go:78.22,79.21 1 0 +github.com/thebtf/engram/internal/embedding/backfill.go:80.39,80.39 0 0 +github.com/thebtf/engram/internal/embedding/backfill.go:82.4,82.12 1 0 +github.com/thebtf/engram/internal/embedding/backfill.go:84.3,84.24 1 0 +github.com/thebtf/engram/internal/embedding/backfill.go:84.24,86.12 2 0 +github.com/thebtf/engram/internal/embedding/backfill.go:92.3,93.26 2 0 +github.com/thebtf/engram/internal/embedding/backfill.go:93.26,94.47 1 0 +github.com/thebtf/engram/internal/embedding/backfill.go:94.47,102.5 1 0 +github.com/thebtf/engram/internal/embedding/backfill.go:104.3,104.23 1 0 +github.com/thebtf/engram/internal/embedding/backfill.go:104.23,106.12 2 0 +github.com/thebtf/engram/internal/embedding/backfill.go:108.3,108.56 1 0 +github.com/thebtf/engram/internal/embedding/backfill.go:108.56,110.18 2 0 +github.com/thebtf/engram/internal/embedding/backfill.go:110.18,112.5 1 0 +github.com/thebtf/engram/internal/embedding/backfill.go:113.4,113.11 1 0 +github.com/thebtf/engram/internal/embedding/backfill.go:114.22,115.21 1 0 +github.com/thebtf/engram/internal/embedding/backfill.go:116.39,116.39 0 0 +github.com/thebtf/engram/internal/embedding/backfill.go:118.4,118.12 1 0 +github.com/thebtf/engram/internal/embedding/backfill.go:121.3,121.17 1 0 +github.com/thebtf/engram/internal/embedding/backfill.go:121.17,123.4 1 0 +github.com/thebtf/engram/internal/embedding/backfill.go:124.3,125.55 2 0 +github.com/thebtf/engram/internal/embedding/backfill.go:125.55,127.4 1 0 +github.com/thebtf/engram/internal/embedding/client.go:32.51,34.16 2 1 +github.com/thebtf/engram/internal/embedding/client.go:34.16,37.3 1 0 +github.com/thebtf/engram/internal/embedding/client.go:42.2,43.36 2 1 +github.com/thebtf/engram/internal/embedding/client.go:43.36,45.3 1 1 +github.com/thebtf/engram/internal/embedding/client.go:45.8,47.3 1 1 +github.com/thebtf/engram/internal/embedding/client.go:48.2,48.48 1 1 +github.com/thebtf/engram/internal/embedding/client.go:67.35,69.2 1 1 +github.com/thebtf/engram/internal/embedding/client.go:100.93,102.18 2 1 +github.com/thebtf/engram/internal/embedding/client.go:102.18,104.3 1 1 +github.com/thebtf/engram/internal/embedding/client.go:105.2,107.17 3 1 +github.com/thebtf/engram/internal/embedding/client.go:107.17,109.3 1 1 +github.com/thebtf/engram/internal/embedding/client.go:124.2,125.64 2 1 +github.com/thebtf/engram/internal/embedding/client.go:125.64,126.46 1 1 +github.com/thebtf/engram/internal/embedding/client.go:126.46,129.4 1 0 +github.com/thebtf/engram/internal/embedding/client.go:129.9,129.41 1 1 +github.com/thebtf/engram/internal/embedding/client.go:129.41,131.4 1 1 +github.com/thebtf/engram/internal/embedding/client.go:131.9,135.4 1 1 +github.com/thebtf/engram/internal/embedding/client.go:137.2,145.8 1 1 +github.com/thebtf/engram/internal/embedding/client.go:150.103,151.37 1 1 +github.com/thebtf/engram/internal/embedding/client.go:151.37,153.3 1 1 +github.com/thebtf/engram/internal/embedding/client.go:154.2,154.21 1 1 +github.com/thebtf/engram/internal/embedding/client.go:154.21,155.49 1 1 +github.com/thebtf/engram/internal/embedding/client.go:155.49,157.4 1 1 +github.com/thebtf/engram/internal/embedding/client.go:159.2,159.11 1 1 +github.com/thebtf/engram/internal/embedding/client.go:180.33,182.2 1 0 +github.com/thebtf/engram/internal/embedding/client.go:186.82,187.21 1 1 +github.com/thebtf/engram/internal/embedding/client.go:187.21,189.3 1 0 +github.com/thebtf/engram/internal/embedding/client.go:191.2,195.22 2 1 +github.com/thebtf/engram/internal/embedding/client.go:195.22,197.3 1 1 +github.com/thebtf/engram/internal/embedding/client.go:198.2,199.16 2 1 +github.com/thebtf/engram/internal/embedding/client.go:199.16,201.3 1 0 +github.com/thebtf/engram/internal/embedding/client.go:203.2,205.16 3 1 +github.com/thebtf/engram/internal/embedding/client.go:205.16,207.3 1 0 +github.com/thebtf/engram/internal/embedding/client.go:208.2,209.20 2 1 +github.com/thebtf/engram/internal/embedding/client.go:209.20,211.3 1 1 +github.com/thebtf/engram/internal/embedding/client.go:214.2,215.43 2 1 +github.com/thebtf/engram/internal/embedding/client.go:215.43,216.18 1 1 +github.com/thebtf/engram/internal/embedding/client.go:216.18,217.11 1 0 +github.com/thebtf/engram/internal/embedding/client.go:218.22,219.26 1 0 +github.com/thebtf/engram/internal/embedding/client.go:220.63,220.63 0 0 +github.com/thebtf/engram/internal/embedding/client.go:222.4,222.50 1 0 +github.com/thebtf/engram/internal/embedding/client.go:225.3,226.19 2 1 +github.com/thebtf/engram/internal/embedding/client.go:226.19,228.12 2 0 +github.com/thebtf/engram/internal/embedding/client.go:231.3,233.21 3 1 +github.com/thebtf/engram/internal/embedding/client.go:233.21,235.12 2 0 +github.com/thebtf/engram/internal/embedding/client.go:238.3,238.39 1 1 +github.com/thebtf/engram/internal/embedding/client.go:238.39,240.12 2 0 +github.com/thebtf/engram/internal/embedding/client.go:243.3,244.59 2 1 +github.com/thebtf/engram/internal/embedding/client.go:244.59,246.4 1 0 +github.com/thebtf/engram/internal/embedding/client.go:248.3,249.33 2 1 +github.com/thebtf/engram/internal/embedding/client.go:249.33,250.46 1 1 +github.com/thebtf/engram/internal/embedding/client.go:250.46,252.5 1 1 +github.com/thebtf/engram/internal/embedding/client.go:254.3,254.22 1 1 +github.com/thebtf/engram/internal/embedding/client.go:256.2,256.68 1 0 +github.com/thebtf/engram/internal/embedding/code_backfill.go:64.131,65.18 1 1 +github.com/thebtf/engram/internal/embedding/code_backfill.go:65.18,67.3 1 1 +github.com/thebtf/engram/internal/embedding/code_backfill.go:68.2,68.19 1 0 +github.com/thebtf/engram/internal/embedding/code_backfill.go:68.19,70.3 1 0 +github.com/thebtf/engram/internal/embedding/code_backfill.go:71.2,71.60 1 0 +github.com/thebtf/engram/internal/embedding/code_backfill.go:77.127,78.20 1 1 +github.com/thebtf/engram/internal/embedding/code_backfill.go:78.20,80.3 1 0 +github.com/thebtf/engram/internal/embedding/code_backfill.go:82.2,83.6 2 1 +github.com/thebtf/engram/internal/embedding/code_backfill.go:83.6,87.10 1 1 +github.com/thebtf/engram/internal/embedding/code_backfill.go:88.21,90.20 2 0 +github.com/thebtf/engram/internal/embedding/code_backfill.go:91.11,91.11 0 1 +github.com/thebtf/engram/internal/embedding/code_backfill.go:95.3,96.17 2 1 +github.com/thebtf/engram/internal/embedding/code_backfill.go:96.17,98.18 2 0 +github.com/thebtf/engram/internal/embedding/code_backfill.go:98.18,100.5 1 0 +github.com/thebtf/engram/internal/embedding/code_backfill.go:101.4,101.11 1 0 +github.com/thebtf/engram/internal/embedding/code_backfill.go:102.22,103.21 1 0 +github.com/thebtf/engram/internal/embedding/code_backfill.go:104.39,104.39 0 0 +github.com/thebtf/engram/internal/embedding/code_backfill.go:106.4,106.12 1 0 +github.com/thebtf/engram/internal/embedding/code_backfill.go:108.3,108.23 1 1 +github.com/thebtf/engram/internal/embedding/code_backfill.go:108.23,111.4 2 1 +github.com/thebtf/engram/internal/embedding/code_backfill.go:114.3,115.28 2 1 +github.com/thebtf/engram/internal/embedding/code_backfill.go:115.28,117.4 1 1 +github.com/thebtf/engram/internal/embedding/code_backfill.go:119.3,120.17 2 1 +github.com/thebtf/engram/internal/embedding/code_backfill.go:120.17,122.18 2 0 +github.com/thebtf/engram/internal/embedding/code_backfill.go:122.18,124.5 1 0 +github.com/thebtf/engram/internal/embedding/code_backfill.go:125.4,125.11 1 0 +github.com/thebtf/engram/internal/embedding/code_backfill.go:126.22,127.21 1 0 +github.com/thebtf/engram/internal/embedding/code_backfill.go:128.39,128.39 0 0 +github.com/thebtf/engram/internal/embedding/code_backfill.go:130.4,130.12 1 0 +github.com/thebtf/engram/internal/embedding/code_backfill.go:132.3,132.24 1 1 +github.com/thebtf/engram/internal/embedding/code_backfill.go:132.24,139.18 2 1 +github.com/thebtf/engram/internal/embedding/code_backfill.go:139.18,141.5 1 1 +github.com/thebtf/engram/internal/embedding/code_backfill.go:142.4,142.11 1 1 +github.com/thebtf/engram/internal/embedding/code_backfill.go:143.22,144.21 1 1 +github.com/thebtf/engram/internal/embedding/code_backfill.go:145.39,145.39 0 0 +github.com/thebtf/engram/internal/embedding/code_backfill.go:147.4,147.12 1 0 +github.com/thebtf/engram/internal/embedding/code_backfill.go:156.3,158.32 3 1 +github.com/thebtf/engram/internal/embedding/code_backfill.go:158.32,159.25 1 1 +github.com/thebtf/engram/internal/embedding/code_backfill.go:159.25,167.10 2 0 +github.com/thebtf/engram/internal/embedding/code_backfill.go:169.4,170.21 2 1 +github.com/thebtf/engram/internal/embedding/code_backfill.go:170.21,172.19 2 1 +github.com/thebtf/engram/internal/embedding/code_backfill.go:172.19,174.6 1 1 +github.com/thebtf/engram/internal/embedding/code_backfill.go:175.5,175.13 1 1 +github.com/thebtf/engram/internal/embedding/code_backfill.go:177.4,177.31 1 1 +github.com/thebtf/engram/internal/embedding/code_backfill.go:177.31,185.19 2 1 +github.com/thebtf/engram/internal/embedding/code_backfill.go:185.19,187.6 1 1 +github.com/thebtf/engram/internal/embedding/code_backfill.go:188.5,189.13 2 1 +github.com/thebtf/engram/internal/embedding/code_backfill.go:191.4,191.88 1 1 +github.com/thebtf/engram/internal/embedding/code_backfill.go:191.88,193.19 2 0 +github.com/thebtf/engram/internal/embedding/code_backfill.go:193.19,195.6 1 0 +github.com/thebtf/engram/internal/embedding/code_backfill.go:196.5,196.13 1 0 +github.com/thebtf/engram/internal/embedding/code_backfill.go:198.4,198.18 1 1 +github.com/thebtf/engram/internal/embedding/code_backfill.go:201.3,201.37 1 1 +github.com/thebtf/engram/internal/embedding/code_backfill.go:201.37,203.4 1 1 +github.com/thebtf/engram/internal/embedding/code_backfill.go:204.3,216.54 2 1 +github.com/thebtf/engram/internal/embedding/code_backfill.go:216.54,222.18 2 1 +github.com/thebtf/engram/internal/embedding/code_backfill.go:222.18,224.5 1 1 +github.com/thebtf/engram/internal/embedding/code_backfill.go:225.4,225.14 1 1 +github.com/thebtf/engram/internal/embedding/code_backfill.go:234.3,234.24 1 1 +github.com/thebtf/engram/internal/embedding/code_backfill.go:234.24,237.11 2 1 +github.com/thebtf/engram/internal/embedding/code_backfill.go:238.22,239.21 1 1 +github.com/thebtf/engram/internal/embedding/code_backfill.go:240.39,240.39 0 0 +github.com/thebtf/engram/internal/embedding/code_backfill.go:242.4,242.12 1 0 +github.com/thebtf/engram/internal/embedding/code_backfill.go:245.3,245.52 1 1 +github.com/thebtf/engram/internal/embedding/code_backfill.go:245.52,247.4 1 1 +github.com/thebtf/engram/internal/embedding/dim_assert.go:48.72,49.15 1 0 +github.com/thebtf/engram/internal/embedding/dim_assert.go:49.15,51.3 1 0 +github.com/thebtf/engram/internal/embedding/dim_assert.go:52.2,52.35 1 0 +github.com/thebtf/engram/internal/embedding/dim_assert.go:52.35,69.17 3 0 +github.com/thebtf/engram/internal/embedding/dim_assert.go:69.17,71.4 1 0 +github.com/thebtf/engram/internal/embedding/dim_assert.go:72.3,72.22 1 0 +github.com/thebtf/engram/internal/embedding/dim_assert.go:72.22,74.12 1 0 +github.com/thebtf/engram/internal/embedding/dim_assert.go:76.3,77.15 2 0 +github.com/thebtf/engram/internal/embedding/dim_assert.go:77.15,82.4 1 0 +github.com/thebtf/engram/internal/embedding/dim_assert.go:83.3,84.21 2 0 +github.com/thebtf/engram/internal/embedding/dim_assert.go:84.21,86.4 1 0 +github.com/thebtf/engram/internal/embedding/dim_assert.go:87.3,87.26 1 0 +github.com/thebtf/engram/internal/embedding/dim_assert.go:87.26,93.4 1 0 +github.com/thebtf/engram/internal/embedding/dim_assert.go:95.2,95.12 1 0 +github.com/thebtf/engram/internal/embedding/recorder.go:28.49,32.2 3 1 +github.com/thebtf/engram/internal/embedding/recorder.go:38.70,40.42 2 1 +github.com/thebtf/engram/internal/embedding/recorder.go:40.42,42.3 1 1 +github.com/thebtf/engram/internal/embedding/recorder.go:43.2,50.15 4 1 +github.com/thebtf/engram/internal/embedding/recorder.go:54.94,61.2 6 1 +github.com/thebtf/engram/internal/embedding/store.go:27.68,33.88 2 1 +github.com/thebtf/engram/internal/embedding/store.go:33.88,35.3 1 0 +github.com/thebtf/engram/internal/embedding/store.go:38.2,40.96 1 1 +github.com/thebtf/engram/internal/embedding/store.go:40.96,42.3 1 0 +github.com/thebtf/engram/internal/embedding/store.go:45.2,48.78 2 1 +github.com/thebtf/engram/internal/embedding/store.go:48.78,50.3 1 0 +github.com/thebtf/engram/internal/embedding/store.go:51.2,51.18 1 1 +github.com/thebtf/engram/internal/embedding/store.go:51.18,53.3 1 1 +github.com/thebtf/engram/internal/embedding/store.go:56.2,59.77 2 1 +github.com/thebtf/engram/internal/embedding/store.go:59.77,61.3 1 0 +github.com/thebtf/engram/internal/embedding/store.go:62.2,62.18 1 1 +github.com/thebtf/engram/internal/embedding/store.go:62.18,64.3 1 1 +github.com/thebtf/engram/internal/embedding/store.go:67.2,70.75 2 1 +github.com/thebtf/engram/internal/embedding/store.go:70.75,72.3 1 0 +github.com/thebtf/engram/internal/embedding/store.go:73.2,73.16 1 1 +github.com/thebtf/engram/internal/embedding/store.go:73.16,75.3 1 1 +github.com/thebtf/engram/internal/embedding/store.go:77.2,77.19 1 1 +github.com/thebtf/engram/internal/embedding/store.go:94.79,96.16 2 1 +github.com/thebtf/engram/internal/embedding/store.go:96.16,98.3 1 0 +github.com/thebtf/engram/internal/embedding/store.go:100.2,103.83 2 1 +github.com/thebtf/engram/internal/embedding/store.go:103.83,105.3 1 0 +github.com/thebtf/engram/internal/embedding/store.go:107.2,108.21 2 1 +github.com/thebtf/engram/internal/embedding/store.go:108.21,110.21 2 1 +github.com/thebtf/engram/internal/embedding/store.go:110.21,112.4 1 0 +github.com/thebtf/engram/internal/embedding/store.go:115.2,119.8 1 1 +github.com/thebtf/engram/internal/embedding/store.go:138.33,138.60 1 0 +github.com/thebtf/engram/internal/embedding/store.go:146.35,148.2 1 1 +github.com/thebtf/engram/internal/embedding/store.go:160.72,161.22 1 0 +github.com/thebtf/engram/internal/embedding/store.go:161.22,163.3 1 0 +github.com/thebtf/engram/internal/embedding/store.go:164.2,165.27 2 0 +github.com/thebtf/engram/internal/embedding/store.go:165.27,166.59 1 0 +github.com/thebtf/engram/internal/embedding/store.go:166.59,172.12 2 0 +github.com/thebtf/engram/internal/embedding/store.go:174.3,174.27 1 0 +github.com/thebtf/engram/internal/embedding/store.go:176.2,176.21 1 0 +github.com/thebtf/engram/internal/embedding/store.go:176.21,178.3 1 0 +github.com/thebtf/engram/internal/embedding/store.go:179.2,179.51 1 0 +github.com/thebtf/engram/internal/embedding/store.go:193.125,194.24 1 0 +github.com/thebtf/engram/internal/embedding/store.go:194.24,196.3 1 0 +github.com/thebtf/engram/internal/embedding/store.go:197.2,197.16 1 0 +github.com/thebtf/engram/internal/embedding/store.go:197.16,199.3 1 0 +github.com/thebtf/engram/internal/embedding/store.go:200.2,200.20 1 0 +github.com/thebtf/engram/internal/embedding/store.go:200.20,202.3 1 0 +github.com/thebtf/engram/internal/embedding/store.go:204.2,220.16 4 0 +github.com/thebtf/engram/internal/embedding/store.go:220.16,222.3 1 0 +github.com/thebtf/engram/internal/embedding/store.go:223.2,223.21 1 0 +github.com/thebtf/engram/internal/embedding/store.go:229.151,230.19 1 0 +github.com/thebtf/engram/internal/embedding/store.go:230.19,232.3 1 0 +github.com/thebtf/engram/internal/embedding/store.go:233.2,233.24 1 0 +github.com/thebtf/engram/internal/embedding/store.go:233.24,235.3 1 0 +github.com/thebtf/engram/internal/embedding/store.go:236.2,236.16 1 0 +github.com/thebtf/engram/internal/embedding/store.go:236.16,238.3 1 0 +github.com/thebtf/engram/internal/embedding/store.go:239.2,239.20 1 0 +github.com/thebtf/engram/internal/embedding/store.go:239.20,241.3 1 0 +github.com/thebtf/engram/internal/embedding/store.go:243.2,267.16 4 0 +github.com/thebtf/engram/internal/embedding/store.go:267.16,269.3 1 0 +github.com/thebtf/engram/internal/embedding/store.go:270.2,270.21 1 0 +github.com/thebtf/engram/internal/embedding/store.go:274.78,280.2 3 0 +github.com/thebtf/engram/internal/embedding/store.go:283.75,287.2 1 0 diff --git a/internal/embedding/store.go b/internal/embedding/store.go index 270b0255..1abaee96 100644 --- a/internal/embedding/store.go +++ b/internal/embedding/store.go @@ -2,6 +2,7 @@ package embedding import ( "context" + "database/sql" "errors" "fmt" "time" @@ -41,13 +42,15 @@ func (s *Store) Stats(ctx context.Context) (EmbeddingStats, error) { } // Most-recent chunk timestamp (nullable — NULL when table is empty). - var lastAt *time.Time + var lastAt sql.NullTime if err := s.db.WithContext(ctx). Raw(`SELECT max(created_at) FROM content_chunks`). Scan(&lastAt).Error; err != nil && !errors.Is(err, gorm.ErrRecordNotFound) { return EmbeddingStats{}, fmt.Errorf("embedding stats: last chunk at: %w", err) } - stats.LastChunkAt = lastAt + if lastAt.Valid { + stats.LastChunkAt = &lastAt.Time + } // Most recently used model (empty string when table is empty). var model *string diff --git a/internal/embedding/store_stats_test.go b/internal/embedding/store_stats_test.go index d12cd868..d381643d 100644 --- a/internal/embedding/store_stats_test.go +++ b/internal/embedding/store_stats_test.go @@ -100,6 +100,38 @@ func TestStoreStats_Empty(t *testing.T) { } } +// TestStoreStats_EmptyPhysicalTableReturnsZeroValue protects the production +// fresh-install path. PostgreSQL aggregate max(...) returns one NULL row for an +// empty table; Stats must treat that as an absent timestamp, not a scan error. +// A transaction-local temporary table shadows any shared test data so this +// regression remains deterministic and leaves no persistent rows or schema. +func TestStoreStats_EmptyPhysicalTableReturnsZeroValue(t *testing.T) { + db, closeDB := openEmbeddingTestDB(t) + defer closeDB() + + tx, rollback := openTestTx(t, db) + defer rollback() + + if err := tx.Exec(` + CREATE TEMP TABLE content_chunks ( + memory_id BIGINT NOT NULL, + created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(), + model TEXT NOT NULL, + embedding VECTOR + ) ON COMMIT DROP + `).Error; err != nil { + t.Fatalf("create empty temporary content_chunks: %v", err) + } + + stats, err := NewStore(tx).Stats(context.Background()) + if err != nil { + t.Fatalf("Stats on physically empty content_chunks: %v", err) + } + if stats != (EmbeddingStats{}) { + t.Fatalf("Stats on physically empty content_chunks = %+v, want zero value", stats) + } +} + // TestStoreStats_Populated inserts a parent memory row + 2 chunks inside a // single rolled-back transaction, runs Stats on the tx-scoped DB handle, and // asserts the returned EmbeddingStats reflects the inserted data. From a1653abf5a1088f45df2c58487a74a886666adf1 Mon Sep 17 00:00:00 2001 From: Kirill Turanskiy Date: Fri, 10 Jul 2026 12:57:49 +0300 Subject: [PATCH 015/111] governance: pin production-ready plan authority --- ...-10-engram-production-ready-master-plan.md | 533 ++++++++++++++++++ ...gram-production-ready-ownership-state.json | 414 ++++++++++++++ 2 files changed, 947 insertions(+) create mode 100644 .agent/plans/2026-07-10-engram-production-ready-master-plan.md create mode 100644 .agent/plans/2026-07-10-engram-production-ready-ownership-state.json diff --git a/.agent/plans/2026-07-10-engram-production-ready-master-plan.md b/.agent/plans/2026-07-10-engram-production-ready-master-plan.md new file mode 100644 index 00000000..b6b48ba2 --- /dev/null +++ b/.agent/plans/2026-07-10-engram-production-ready-master-plan.md @@ -0,0 +1,533 @@ +# Engram Production-Ready Master Plan + +Status: PLAN_REVISION_3_PENDING_INDEPENDENT_CHALLENGE +Date: 2026-07-10 +Revision: 3 +Goal contract: `.agent/goals/2026-07-10-engram-production-ready-marathon.md` +Release baseline: `origin/main@dc891b2d72b1fd63b83e4a630a249241fc389151` (`v6.42.0`) +`core_safe_point_version`: candidate `v6.43.0-rc.1`, publish target `v6.43.0` after release analysis confirms it +`final_ready_version`: `BLOCKED_UNTIL_M6_INTEGRATED_DIFF`; root must resolve the exact version, release-note path, image/plugin identities, and compatibility artifact roots before `FINAL-PUBLIC-TRUTH` or M7 release work is dispatched + +## 1. Outcome + +Make Engram production-ready against PR-0 through PR-8 in the goal contract. Completion is permitted only after a fresh full production-ready check returns `VERIFIED READY`, the customer-mode emulation reaches `PRODUCT_WORKS`, release-git is clean and classified, and no in-scope blocker or unknown remains. + +## 2. Evidence Authority and Stable Blocker Classes + +Durable baseline evidence: + +- `.agent/reports/production-ready-baseline-pr3-pr7-2026-07-10.md` +- `.agent/reports/db-backed-failure-baseline-2026-07-10.md` +- `.agent/reports/worktree-inventory-2026-07-10.md` +- `.agent/reports/diffusion-whereami-2026-07-10.md` +- `.agent/reports/production-readiness-evidence-register.json` +- `.agent/reports/production-readiness-evidence-register.md` +- `.agent/reports/security-toolchain-maker-2026-07-10.md` +- `.agent/reports/db-auth-maker-2026-07-10.md` +- `.agent/reports/db-reaper-maker-2026-07-10.md` +- `.agent/reports/db-crystallization-maker-2026-07-10.md` +- `.agent/reviews/2026-07-10-production-ready-master-plan-challenge.md` +- `.agent/reviews/2026-07-10-production-ready-master-plan-rechallenge.md` +- `.agent/reviews/2026-07-10-production-ready-master-plan-final-challenge.md` +- `.agent/reviews/2026-07-10-production-ready-master-plan-revision-check.md` +- `.agent/reports/2026-07-10-production-ready-master-plan-revision-2-maker.md` +- `.agent/reviews/2026-07-10-production-ready-master-plan-revision-2-check.md` (SHA256 `C7A96460C34951C0876F3F87F3B404E037D246A974D9AC491D5A9C2FF455FCCB`, verdict `REVISE`) +- `.agent/reports/2026-07-10-openclaw-ingest-classification.md` (SHA256 `A095E9D7B69DC95CAC4022EB97D2EA9B403D5132F5602FDD85E7D3A93092F5D4`) +- `.agent/reports/2026-07-10-mcp-structured-input-classification.md` (SHA256 `3356F3AE6073F95E701707FCF451D63809AC186ED1DEA7321A7027C4C3122E7A`, verdict `CLASSIFIED_MUST_BUILD / BLOCKS_RELEASE`) +- `.agent/worktrees/prc-db-bulkops/.agent/reviews/2026-07-10-db-bulkops-sibling-rework-check.md` (SHA256 `EB9EB227363A27EA058C6654BD7E38EED1088252F79F837E377B2A3CBC1FAFB7`, verdict `FAIL / REVISE_HOLD`) +- `.agent/plans/2026-07-10-engram-production-ready-ownership-state.json` +- `.agent/reports/2026-07-10-image-remediation-prototype.md` +- `.agent/experiments/GE-003/experiment.yaml` +- `.agent/experiments/GE-003/journal.md` +- `.agent/experiments/GE-004/experiment.yaml` +- `.agent/experiments/GE-004/journal.md` +- `.agent/reports/engram-roadmap-progress-2026-07-06.html` + +The JSON/Markdown evidence register is the sole authority for mutable progress. This revision also contains immutable source-lock facts and a tracked ownership-state contract; neither substitutes for the register. Root updates the JSON register first, renders the Markdown register and HTML from that exact state, and only then makes a dispatch/integration decision. Every row records criterion, slice, branch/base/head, exact command, environment identity, raw artifact, exit code, checker artifact, review artifact, integration SHA, timestamp, and notes. An empty field remains UNKNOWN; it is never inferred as green. + +Revision-3 source lock: RELEASE-GATES is based on `2b3ef3e33bd19e630f8f67d07a9e2521cb98537f`; that base is failed/pending foundation authority, and this revision-3 maker head remains `PENDING` until committed, independently checked, post-reviewed, and integrated. DB-BULKOPS rejected composite head `68b2ce5835c7c6efdf1c68da9eedcb8d9c3837ef` has parent `6ea10496aa127fba7fdb194875044e770d0a1d8c`, checker artifact `.agent/worktrees/prc-db-bulkops/.agent/reviews/2026-07-10-db-bulkops-sibling-rework-check.md`, checker verdict `FAIL / REVISE_HOLD`, checker SHA256 `EB9EB227363A27EA058C6654BD7E38EED1088252F79F837E377B2A3CBC1FAFB7`, and two release-blocking HIGH defects: a wrong-type candidate-review snapshot can reach mutation without durable audit, and public bulk IDs are lossy-coerced so a fraction such as `1.9` becomes `1` and a numeric string such as `"2"` becomes `2`. Active owner DB-BULKOPS-BEHAVIORAL-EDGE-REWORK starts exactly from `68b2ce5835c7c6efdf1c68da9eedcb8d9c3837ef`; its head is `PENDING`. The rejected head and any dirty overlay are not dispatch authority. MCP structured-input classification is locked to `.agent/reports/2026-07-10-mcp-structured-input-classification.md` SHA256 `3356F3AE6073F95E701707FCF451D63809AC186ED1DEA7321A7027C4C3122E7A`: malformed present booleans can cross preview/confidentiality boundaries into live writes, lossy IDs can select the wrong durable row, malformed arrays can clear/drop data while the write succeeds, and schema/handler drift is release-blocking. The remedy is route-specific mutation validation from exact JSON numbers and present-vs-missing fields; globally tightening read/filter compatibility coercers is explicitly forbidden without a separate migration decision. + +The tracked state file binds this exact plan SHA256 to ordered owners, current owner, predecessor checker/post-review/integration evidence, and required successor base. `assert-plan-path-ownership.ps1` must fail when either file is missing, the expected/observed plan hashes differ, an epoch is reversed, a non-current owner changes a repeated path, predecessor evidence is incomplete, or a successor base omits the required integration. Historical rejected-head Diff proof may demonstrate zero undeclared paths, but it must still fail current-owner authority where the active rework owns the path. + +The exact image prototype evidence is `.agent/reports/2026-07-10-image-remediation-prototype.md` SHA256 `EA0DB2FB15BE986839D4CEB7A0BCCFED062EA3C4E27B812EC2415012039759E7`. The PostgreSQL prototype is exact image ID `sha256:6f1fcade7d5e873aa7624f821e593b4bb21e8f4c69c8f3d2de9f76134c175bbc`, zero findings at every severity, and runs as UID/GID `70:70` with read-only rootfs, cap-drop ALL, no-new-privileges, and UID-owned tmpfs only for `/tmp` and `/var/run/postgresql`. A tmpfs-only PGDATA lost the cluster and extension on restart and is rejected; an owned named volume at `/var/lib/postgresql/data` preserved PostgreSQL `17.10`, pgvector `0.8.1`, and the vector row across stop/remove/new-container recreation. The server prototype is image ID `sha256:3ef7a06856e7bf8bb5a248115157a7a621b85bcb12c6f4d45c0703e421d11838`, accepted security-toolchain binary image `engram-prc-security-check-server:b0955df`, 25 MB / 57 packages, and zero findings at every severity. Hardened boot and restart passed with `HOME=/var/lib/engram` plus an explicitly owned tmpfs at UID `65532`, GID `65532`, mode `0700`; an unowned tmpfs failed the restart permission contract. This proves runtime ownership requirements, not final persistence: IMAGE-REMEDIATION must provide a persistent named or bind volume with the same ownership/mode and prove data across container recreation. `ENGRAM_DATA_DIR` is not a live contract: current `internal/config.DataDir()` calls `os.UserHomeDir()` and appends `.engram`. The operator prototype is exact image ID `sha256:a16857bbeb229cc5f0457f9e740ccc5433870a85c37610ada38bd89638c34859`, 58 MB / 45 packages, zero findings at every severity, UID `65532`, and passed read-only/cap-drop/no-new-privileges/restart. Its wrong shipped target name reproduced root HTTP 200 plus timed-out API; `NUXT_OPERATOR_API_TARGET` made proxied `/api/ready` return exact ready before and after restart. IMAGE-REMEDIATION owns all three exact runtime contracts; no prototype is an integrated product verdict. + +Before any dispatch, root must prove that every active or pending slice in Section 4 has a register row, including PLAN-GOVERNANCE, DB-BULKOPS-BEHAVIORAL-EDGE-REWORK, MCP-STRUCTURED-INPUT-CLASSIFICATION, MCP-STRUCTURED-INPUT-VALIDATION, OPENCLAW-RELEASE, INGEST-DOC-SNAPSHOT-DEMOLITION, DOCUMENT-INGEST-PUBLIC-TRUTH, DB-GOVERNANCE, DB-EMBEDDING-STATS, CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK, AUTH-BOOTSTRAP-SECURITY, DURABLE-AUDIT-BOUNDARIES, IMAGE-REMEDIATION, T007-COMPAT-DEMOLITION-CLASSIFICATION, DB-RULES-ISOLATION, every M6 contract lane, and each checker/rework. A register/Markdown/HTML mismatch is itself a PR-0 blocker. + +Stable blocker classes, independent of mutable branch heads: + +1. The primary checkout is preserve-only and never an integration/release evidence source. +2. The measured full-project baseline is 27 failed tests, 25 skips, 53.0% overall statement coverage, and 64.77% `internal/handlers/loom` statement coverage. Section 4.2 maps all 27 failures exactly once; the floors remain 60% overall and 70% loom. +3. First-admin setup requires an operator-controlled one-time capability, pre-bcrypt rejection, cross-process/restart/replay proof, and bounded abuse handling. Public winner-takes-admin setup is release-fatal. +4. Auth setup and bulk mutation success must be committed with their audit record or a durable transactional outbox. A response may not report completed success when audit durability is unknown. +5. DB-BULKOPS must use lock-consistent capture and explicit rollback conflict semantics; stale restore may never erase a later committed candidate state. +6. RELEASE-GATES must prove itself fail-closed against blanket skip allowlists, early-failure cleanup ambiguity, CI/config repeat drift, raw/race DB skips, missing dev-stand credentials, and scans of unbuilt image tags. +7. GE-003 project identity and GE-004 external update ownership remain binding architecture contracts; no cosmetic hash patch or in-process self-mutation is accepted. +8. M5 is a bounded `PRODUCT_WORKS` safe point. CI-A/CI-B, BOOK, MEM/effectiveness/settings residuals remain in the active goal and must pass the M6 contract DAG before M7 can claim `VERIFIED READY`. +9. Candidate-review snapshots must carry the locked pre-action candidate in `Before` and the committed post-action candidate in `After`, written in the same transaction as the candidate mutation, audit row, and snapshot. Promote, preserve, reject, suppress, and supersede must all support immediate rollback and later-state conflict detection. +10. The verified parent image baseline is operator `5`, PostgreSQL `38`, and server `13` HIGH/CRITICAL findings. The accepted SECURITY-TOOLCHAIN candidate reduces server to three unfixed Perl findings but is still release-blocked. The image DAG must end at zero HIGH/CRITICAL for exact final server/operator/PostgreSQL tags and digests without allowlists or exception files. +11. The exact distroless server prototype boots as UID 65532 normally, but `--read-only --cap-drop ALL --no-new-privileges` fails initialization when the default `/home/nonroot/.engram` is not writable, while `/health` still returns HTTP 200 with `{"status":"error"}`. `/health` is the intentional liveness surface and its pre-ready HTTP-200 behavior remains unchanged unless a separate spec says otherwise; the defect is the current Docker/runtime `curl -f /health` readiness check. Current `internal/config.DataDir()` ignores `ENGRAM_DATA_DIR` and resolves `$HOME/.engram`; production therefore sets `HOME=/var/lib/engram`, mounts persistent writable storage at `/var/lib/engram` with UID/GID `65532:65532` and mode `0700`, rejects an unowned tmpfs as non-restart-safe, and makes the no-shell container HEALTHCHECK call `/api/ready`, parse the body, and succeed only on exact `status=ready`. +12. The live operator console reads `NUXT_OPERATOR_API_TARGET` in `apps/operator-console/nuxt.config.ts`, while `deploy/docker-compose.runtime.yml` still exports stale `NUXT_ENGRAM_API_TARGET`; the resulting image can return root HTTP 200 while `/api/health` times out against the default `http://unleashed.lan:37777`. Production must use the exact live variable, remove the stale standalone deployment consumer, and prove the proxy reaches the exact backend and returns semantic ready. A rendered root page is not operator health. +13. PostgreSQL tmpfs may be used only for ephemeral runtime paths. PGDATA must be an explicitly UID/GID-`70:70` owned persistent volume at `/var/lib/postgresql/data`; tmpfs-only PGDATA is a proved data-loss configuration and is release-fatal. Acceptance removes and recreates the container against the same volume and requires the exact server version, pgvector extension/version, migrations, and retained marker to survive. +14. Public MCP mutation arguments are not schema-safe today. `promote_candidate.dry_run`, `store_memory.dry_run`, and `settings.encrypt` can turn malformed present values into live mutation or plaintext storage; fractional/imprecise selectors and partial arrays can target or persist the wrong durable state. MCP-STRUCTURED-INPUT-VALIDATION is `CLASSIFIED_MUST_BUILD`, starts only from the accepted DB-BULKOPS composite, and must prove zero write/audit/transition delta for every malformed route-specific input. + +## 3. Delivery State Machine + +Every implementation slice follows this exact state machine: + +`bounded brief -> isolated maker worktree -> focused proof -> independent checker -> maker rework if needed -> post-run code review -> integration branch -> full affected gates -> merge/release safe point -> customer/readback proof` + +Rules: + +- New worktrees start from current `origin/main`, never the dirty primary checkout. +- Existing dirty/unique work is preserve-first and is reconciled by a dedicated integration maker; no cleanup occurs before preservation proof. +- Each brief records `repo_root`, `worktree_path`, `branch`, `allowed_paths`, `forbidden_paths`, baseline, acceptance commands, and finish-state handoff. +- Makers may edit only their allowed paths. Checkers are read-only and must challenge behavior edges, not just structure. +- Product/source/test/spec paths must be listed literally in the slice row. Each brief also declares one exact `evidence_namespace` and one exact `maker_report_namespace`; defaults are `.agent/reports/evidence/production-ready//**` and `.agent/reports/production-ready//**`. A non-default/legacy namespace is legal only when written literally in that slice row, as DB-BULKOPS does. No other `.agent/**` path is implicit. +- Before checker acceptance, the ownership gate compares the maker's actual `base..head` commit diff with the named slice row and the brief's declared evidence/report namespaces. A clean static ledger is necessary but not sufficient; any undeclared changed path or prefix fails the slice. +- Root owns architecture decisions, scope changes, integration order, merge conflict resolution, release classification, and final synthesis. +- No slice is accepted on skipped DB tests, stale docs, a mock-only proof, or a passing test whose production call path is unwired. +- Every accepted implementation receives a separate post-run code review before integration. +- Safe-point releases are cut only when the release rule set, version analysis, full gates, emulation/readback, tag consistency, and rollback evidence are green. + +## 4. Worktree and Ownership Matrix + +Durable local layout: `.agent/worktrees//` (already ignored through `.gitignore`). + +| Slice | Branch | Exclusive maker paths | Dependencies | Required proof | +| --- | --- | --- | --- | --- | +| PLAN-GOVERNANCE | `work/prc-release-gates` | `.agent/plans/2026-07-10-engram-production-ready-master-plan.md`, `.agent/plans/2026-07-10-engram-production-ready-ownership-state.json` only | exact base `2b3ef3e33bd19e630f8f67d07a9e2521cb98537f`; first revision-3 commit in this worktree; precedes RELEASE-GATES script commit | preserve all PR-0..PR-8 and M0-M7 obligations; record the exact rejected RELEASE-GATES and DB-BULKOPS source locks; declare every maker path literally; bind the tracked state to the final plan SHA256; require independent challenging-plans GO before broad dispatch | +| DB-BULKOPS | `work/prc-db-bulkops` | `internal/bulkops/facade.go`, `internal/bulkops/facade_test.go`, `internal/bulkops/rollback.go`, `internal/bulkops/rollback_test.go`, `internal/db/gorm/candidate_store.go`, `internal/db/gorm/candidate_store_test.go`, `internal/mcp/tools_bulkops.go`, `internal/mcp/tools_dryrun_test.go`, `pkg/models/snapshot.go`, legacy exact report `.agent/reports/2026-07-10-db-bulkops-capture-lock-rework-maker.md`, legacy exact report `.agent/reports/2026-07-10-db-bulkops-sibling-rework-maker.md`, legacy evidence prefix `.agent/specs/production-ready-db-bulkops/evidence/**`, legacy evidence prefix `.agent/reports/evidence/production-ready/db-bulkops-sibling-rework/**` | historical base `2b085de663d5ba9dfa97adf9ee58de062ee0997c`, rejected head `68b2ce5835c7c6efdf1c68da9eedcb8d9c3837ef`; no integration SHA; superseded as current writer on the four behavioral-edge paths | checker artifact `.agent/worktrees/prc-db-bulkops/.agent/reviews/2026-07-10-db-bulkops-sibling-rework-check.md`, verdict `FAIL / REVISE_HOLD`, SHA256 `EB9EB227363A27EA058C6654BD7E38EED1088252F79F837E377B2A3CBC1FAFB7`; exact Diff must report zero undeclared paths but fail epoch authority for paths now owned by DB-BULKOPS-BEHAVIORAL-EDGE-REWORK; preserve all lock-consistent capture/rollback evidence; never integrate this head alone | +| DB-BULKOPS-BEHAVIORAL-EDGE-REWORK | `work/prc-db-bulkops-behavioral-edge-rework` | `internal/db/gorm/candidate_store.go`, `internal/db/gorm/candidate_store_test.go`, `internal/mcp/tools_bulkops.go`, `internal/mcp/tools_dryrun_test.go`, legacy exact report `.agent/reports/2026-07-10-db-bulkops-behavioral-edge-rework-maker.md`, legacy evidence prefix `.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/**` | exact rejected predecessor/base `68b2ce5835c7c6efdf1c68da9eedcb8d9c3837ef`; head `PENDING`; rework transition requires the hash-bound rejected checker above and forbids an integration claim for that predecessor | reject wrong-type/missing candidate-review action snapshots before mutation and require the correct durable audit/snapshot contract; reject non-array bulk ID containers, non-number elements, fractions, numeric strings, zero/negative/overflow IDs without lossy coercion; keep ordinary valid integer-array behavior; permanent regressions cover wrong snapshot type, audit-less mutation must-not-occur, raw-vs-normalized request use, `1.9`, `"2"`, mixed arrays, and valid arrays; independent checker PASS, post-review PASS, exact integration SHA, then DB-GOVERNANCE rebases to that accepted composite | +| DB-GOVERNANCE | `work/prc-db-governance` | `internal/db/gorm/candidate_store.go`, `internal/db/gorm/candidate_store_test.go`, `internal/db/gorm/rule_arbiter_store_test.go`, `internal/db/gorm/rule_governance_store.go`, `internal/db/gorm/rule_governance_store_test.go`, `internal/db/gorm/rule_governance_rg3_store_test.go`, `internal/db/gorm/migration_rule_governance.go`, `internal/db/gorm/migration_rule_arbiter.go`, `internal/db/gorm/migration_rule_governance_snapshot_statuses.go` | accepted DB-BULKOPS-BEHAVIORAL-EDGE-REWORK composite integrated; exact integration SHA recorded; worktree rebased to that SHA; predecessor path evidence complete | fresh per-test DB/schema isolation; migration 144 apply/rollback/reapply/constraint proof; project/global aggregate boundaries; no closed-DB reuse or order dependence; checker/post-review precede the exact ownership transfer to CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK | +| CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK | `work/prc-candidate-review-snapshot-rollback` | `internal/reviewpacket/candidate.go`, `internal/reviewpacket/candidate_test.go`, `internal/db/gorm/candidate_store.go`, `internal/db/gorm/candidate_store_test.go`, `internal/db/gorm/snapshot_store.go`, `internal/db/gorm/snapshot_store_test.go`, `internal/bulkops/rollback_test.go`, new `tests/critical/candidate_review/candidate_review_snapshot_rollback_test.go` | accepted DB-BULKOPS-BEHAVIORAL-EDGE-REWORK composite plus accepted DB-GOVERNANCE integrated; exact predecessor SHAs recorded; worktree rebased to the latest integration SHA; final writer in the candidate-store epoch | predecessor candidate-review snapshots must already reject wrong types and carry durable audit; inside the same candidate transition transaction, persist locked `Before`, committed `After`, snapshot row, candidate mutation, promoted-memory amendment where applicable, and `candidate_review` audit; any failure rolls back all writes; cover promote, preserve, reject, suppress, and supersede; permanent immediate rollback and later-state conflict regressions; independent checker and post-review PASS before integration | +| INGEST-DOC-CLASSIFICATION | checker-only | read-only `.agent/reports/2026-07-10-openclaw-ingest-classification.md` | complete at SHA256 `A095E9D7B69DC95CAC4022EB97D2EA9B403D5132F5602FDD85E7D3A93092F5D4` | `SnapshotOpIngestDoc` / `executeIngestDoc` is `CLASSIFIED_pre-demolition-stale` in the taxonomy's stale/unwired bucket, historically introduced post-demolition; it blocks plan/audit closure and is never a live, dormant, or must-build scaffold | +| INGEST-DOC-SNAPSHOT-DEMOLITION | `work/prc-ingest-doc-snapshot-demolition` | `internal/bulkops/facade.go`, `internal/bulkops/facade_test.go`, `pkg/models/snapshot.go`, `pkg/models/snapshot_test.go`, new `internal/mcp/ingest_snapshot_contract_test.go` | accepted DB-BULKOPS-BEHAVIORAL-EDGE-REWORK integrated; worktree rebased to its exact integration SHA; runs before DURABLE-AUDIT-BOUNDARIES takes the facade epoch | classify `ingest_doc` as a persisted historical-only discriminator, remove `executeIngestDoc`, reject both dry-run and committed Facade execution without snapshot/audit/business mutation, retain migration/governance read compatibility, add an executable-op predicate that includes only promote/delete/supersede, prove the live MCP ingest path still stores chunks directly and creates no bulk-op snapshot, and forbid counting or wiring the historical type as durable-audit evidence; exact regressions `TestSnapshotOpIngestDoc_PersistedButNotExecutable`, `TestFacade_Execute_IngestDocHistoricalOnly_NoSnapshot`, and `TestIngestDocument_StoresChunksWithoutBulkOpSnapshot`; independent checker PASS and post-run review PASS under `.agent/reports/evidence/production-ready/ingest-doc-snapshot-demolition/**` | +| DB-AUTH | `work/prc-db-auth` | `internal/db/gorm/user_store.go`, `internal/db/gorm/user_store_test.go`, `internal/worker/auth_handlers.go`, `internal/worker/auth_handlers_lifecycle_test.go` | RELEASE-GATES foundation before mergeable checker verdict; first writer in the auth handler/store transfer chain | atomic cross-process first-admin database invariant: one committed active admin, typed conflict for the loser, concurrent last-active-admin invariant, disabled-admin edge, row-lock semantics, fresh DB identity and no global-row contamination; this lane does not by itself authorize a public setup winner and cannot integrate past M1 until AUTH-BOOTSTRAP-SECURITY and DURABLE-AUDIT-BOUNDARIES pass | +| AUTH-BOOTSTRAP-SECURITY | `work/prc-auth-bootstrap-security` | `internal/config/config.go`, `internal/config/config_test.go`, `internal/config/envnames.go`, `internal/db/gorm/user_store.go`, `internal/worker/middleware.go`, `internal/worker/middleware_test.go`, `internal/worker/auth_handlers.go`, new `internal/worker/auth_bootstrap_limiter.go`, new `internal/worker/auth_bootstrap_limiter_test.go`, new `internal/worker/auth_bootstrap_security_test.go`, `internal/worker/service.go`, new `tests/critical/auth_bootstrap/first_admin_bootstrap_test.go`, new `scripts/production-smoke/customer/run-auth-bootstrap-adversary.ps1` | accepted DB-AUTH integrated; worktree rebased to that exact integration SHA; owns `service.go` before V7-RUNTIME-WIRING; deployment/UI subproofs are owned by DEPLOYMENT-ROLLBACK and OC-INTEGRATION | zero-user setup requires a non-empty one-time out-of-band operator capability; missing/invalid/replayed/revoked capability fails before bcrypt, session creation, or mutation; capability consumption and first-admin creation are cross-process/restart safe; setup-specific per-source plus global bounded abuse control; two-server attacker-vs-operator, replay, restart, remote-network, and secret-free log/HTTP/OTLP negatives; exact command `pwsh ./scripts/production-smoke/customer/run-auth-bootstrap-adversary.ps1 -Processes 2 -Repeat 10 -ArtifactRoot .agent/reports/evidence/production-ready/auth-bootstrap` plus fresh-DB race/critical/browser proof | +| DURABLE-AUDIT-BOUNDARIES | `work/prc-durable-audit-boundaries` | `internal/db/gorm/domain_owner_store.go`, `internal/db/gorm/domain_owner_store_test.go`, `internal/db/gorm/user_store.go`, `internal/worker/auth_handlers.go`, new `internal/worker/auth_audit_durability_test.go`, `internal/bulkops/facade.go`, new `internal/bulkops/audit_durability_test.go`, new `scripts/production-smoke/customer/run-durable-audit-faults.ps1` | accepted INGEST-DOC-SNAPSHOT-DEMOLITION, CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK, and AUTH-BOOTSTRAP-SECURITY integrated; exact SHAs recorded; worktree rebased to the latest composite | auth setup and every retained bulk success path commit business mutation with its audit row in one transaction or a durable outbox; fault/retry/readback covers auth setup plus bulk promote/delete/supersede with no falsely complete unaudited response. The retained executable bulk-op set is exactly `bulk_promote`, `bulk_delete`, and `bulk_supersede`; `SnapshotOpIngestDoc` is a persisted historical-only discriminator, is non-executable after INGEST-DOC-SNAPSHOT-DEMOLITION, is excluded from this matrix, and may not be wired or cited as audit evidence. The separate live MCP `ingest` path is not covered by the bulk facade and requires its own explicit audit contract if whole-product mutation auditing is required. | +| DB-CRYSTALLIZATION | `work/prc-db-crystallization` | `internal/worker/handlers_hooks_crystallization_integration_test.go` | RELEASE-GATES foundation before mergeable checker verdict | session-end stores redacted transcript without direct decision-memory creation; flag-off/empty safety; concurrent delivery; downstream dream-cycle ownership; any production-source need requires root amendment before edit | +| DB-EMBEDDING-STATS | `work/prc-db-embedding-stats` | `internal/embedding/store.go`, `internal/embedding/store_stats_test.go` | RELEASE-GATES full diagnostic plus live call-path classification | empty `content_chunks` and zero active memories return zero-valued stats with `LastChunkAt=nil`, never a NULL-to-`time.Time` scan error; populated/model/dimension/coverage behavior unchanged; focused repeat >=20, package/race/vet, fresh schema and zero sessions | +| DB-REAPER | `work/prc-db-reaper` | `internal/worker/reaper/reaper.go`, `internal/worker/reaper/reaper_test.go` | RELEASE-GATES foundation before mergeable checker verdict | package/race/repeat proof; environment isolation; configured/default/invalid retention; unexpired preservation; expired purge; cancellation and idempotency | +| SECURITY-TOOLCHAIN | `work/prc-security-toolchain` | `go.mod`, `go.sum`, `Dockerfile` | preservation recorded + clean `origin/main` worktree; first writer in the `Dockerfile` transfer chain | build, vet, full unit/DB tests, zero reachable Go vulnerability release blocker, builder/runtime version proof; its server candidate currently leaves three unfixed Perl image findings and is not final image acceptance; checker/post-review precede transfer of `Dockerfile` to IMAGE-REMEDIATION | +| RELEASE-GATES | `work/prc-release-gates` | `.agent/critical-suite.config.yaml`, `.agent/dev-stand.config.yaml`, `.github/workflows/test.yml`, `scripts/production-gates/assert-coverage.ps1`, `scripts/production-gates/assert-go-test-json.ps1`, `scripts/production-gates/assert-plan-path-ownership.ps1`, `scripts/production-gates/cleanup-db-sessions.ps1`, `scripts/production-gates/run-critical-suite.ps1`, `scripts/production-gates/run-db-suite.ps1`, `scripts/production-gates/run-dev-stand.ps1`, new `scripts/production-gates/run-node-matrix.ps1`, legacy exact report `.agent/reports/2026-07-10-release-gates-foundation-revision-3-maker.md`, legacy evidence prefix `.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**` | exact base `2b3ef3e33bd19e630f8f67d07a9e2521cb98537f`; head `PENDING`; PLAN-GOVERNANCE commit first; first writer in `.github/workflows/test.yml` before IMAGE-REMEDIATION | preserve blanket/empty skip rejection, truthful early-failure finalization, repeat-3 CI/config parity, canonical full fresh-DB/race JSON/coverage/zero-session/cleanup proof, critical/dev-stand execution, all prior workflow mutations, immutable 60/70 plus 10/10/20/55/55/55 floors, actionlint/AST/vet/diff/gitleaks checks; ownership gate requires `-ExpectedPlanSha256` and tracked `-State`, records expected+observed hash, rejects reversed epochs, non-current owners, missing checker/post-review/integration evidence and wrong bases while accepting descendant bases; dev stand requires exact HTTP 200, `/health` liveness status in `starting|ready|error`, `/api/ready` exact `ready`, three distinct cryptographic process-local PostgreSQL/admin/bootstrap credentials, exact runtime injection, redacted evidence, blank/default/missing/reuse negatives, unconditional Down and zero residue; OpenClaw node matrix requires clean surface, tracked lock-root/package/plugin parity, exact `npm ci -> typecheck -> tests -> high audit -> npm pack dry-run`, raw evidence and unconditional exact-surface cleanup | +| IMAGE-REMEDIATION | `work/prc-image-remediation` | `Dockerfile`, new `cmd/engram-healthcheck/main.go`, new `cmd/engram-healthcheck/main_test.go`, `apps/operator-console/package.json`, `apps/operator-console/package-lock.json`, new `deploy/postgres/Dockerfile`, `docker-compose.yml`, `deploy/docker-compose.runtime.yml`, `docs/DEPLOYMENT.md`, `docs/PRODUCTION-TESTING-PLAYBOOK.md`, `.github/workflows/test.yml`, `.github/workflows/docker.yaml`, `.github/workflows/docker-publish.yml`, new `scripts/production-gates/build-and-scan-images.ps1`, new `tests/critical/runtime/image_runtime_contract_test.go`, new `tests/critical/runtime/postgres_image_contract_test.go` | accepted RELEASE-GATES and SECURITY-TOOLCHAIN integrated; worktree rebased to both exact SHAs; first writer before DEPLOYMENT-ROLLBACK, OC-INTEGRATION, and CORE-PUBLIC-TRUTH take their compose/operator/docs epochs | preserve exact parent scan RED `operator=5`, `postgres=38`, `server=13`; build one tiny `CGO_ENABLED=0` `engram-healthcheck` binary and copy it into both shell-free runtime stages with JSON-form `HEALTHCHECK`; both container healthchecks call their direct or proxied `/api/ready`, parse JSON, and exit zero only on exact `status=ready`; server `/health` remains the intentional liveness surface and is tested separately, never used as Docker readiness; server uses pinned multi-arch `gcr.io/distroless/base-debian13@sha256:b78832f41c8128046807c24840ebee4f1c18ba7870eed423d8750c272c15e147` and proves the CGO server's `ldd` dependencies are present at runtime, UID `65532`, non-writable/read-only rootfs operation, liveness `/health` plus dependency-aware `/api/ready`, `HOME=/var/lib/engram`, and a persistent writable named or bind volume at `/var/lib/engram` provisioned as UID/GID `65532:65532` mode `0700` while every other rootfs path remains read-only; current `internal/config.DataDir()` derives `$HOME/.engram`, so `ENGRAM_DATA_DIR` is explicitly forbidden from docs/tests unless a separately owned config change first makes it live; operator uses pinned multi-arch `gcr.io/distroless/nodejs22-debian13@sha256:773a62fbe24a3f8c8b24b16fd59154627f8b406737bc906f83bf1732bc8907dd`, image node entrypoint plus `CMD [".output/server/index.mjs"]`, UID `65532`, nonroot ownership, a locked graph without picomatch/sigstore findings, and exact runtime `NUXT_OPERATOR_API_TARGET=http://server:37777` matching `apps/operator-console/nuxt.config.ts`; rewrite `deploy/docker-compose.runtime.yml` from stale `operator-web`/`NUXT_ENGRAM_API_TARGET` to canonical `operator-console`/`ghcr.io/thebtf/engram-operator-console`/`NUXT_OPERATOR_API_TARGET`, while DEPLOYMENT-ROLLBACK removes the stale standalone deployment consumer after its zero-consumer proof; add permanent `TestOperatorConsoleRuntimeTargetContract` so root HTTP 200 is insufficient and proxied `/api/health` plus `/api/ready` must reach the exact backend and return semantic ready; PostgreSQL source lock is proven Wolfi prototype `engram-prc-pg17-wolfi:prototype` image ID `sha256:6f1fcade7d5e873aa7624f821e593b4bb21e8f4c69c8f3d2de9f76134c175bbc`, packages `postgresql-17=17.10-r1` and `pgvector-17=0.8.1-r0`, zero findings at every severity, and vector/restart persistence; `deploy/postgres/Dockerfile` pins the Wolfi base digest and packages, sets `ENV LANG=C.UTF-8 LC_ALL=C.UTF-8` because `LANG=en_US.UTF-8` deterministically fails `initdb`, and excludes cache/build residue; exact helper command remains `pwsh ./scripts/production-gates/build-and-scan-images.ps1 -ServerTag engram:prc-server -OperatorTag engram:prc-operator-console -PostgresTag engram:prc-postgres -Platform linux/amd64 -ArtifactRoot .agent/reports/evidence/production-ready/image-remediation -NoAllowlist`; it builds all tags, captures Dockerfile/base/package/image IDs, scans each exact image ID, starts the canonical three-image compose stand, proves all health/readiness/version/vector/migration/restart/container-recreation/retained-marker contracts, injects absent/unowned/unwritable `HOME` storage, first-boot/restart permission, stale/missing/wrong operator API target, unreachable-backend, and malformed/error-body/HTTP-200 `/api/ready` failures, proves Docker health never becomes healthy in every negative case, always tears down probe containers/networks/volumes, verifies zero residue, and writes `final-image-set.json`; docs must name only the accepted PostgreSQL image and canonical operator-console release stack; acceptance requires zero HIGH/CRITICAL and no scanner exception/allowlist; checker rebuilds without local cache and repeats scan/runtime/failure-cleanup proof before post-review | +| SECURITY-PROJECT-IDENTITY | `work/prc-security-project-identity` | `internal/proxy/identity.go`, `internal/proxy/identity_test.go`, `internal/handlers/engramcore/tools.go`, new `internal/handlers/engramcore/project_identity_v2_test.go`, `proto/engram/v1/engram.proto`, generated `proto/engram/v1/engram.pb.go`, generated `proto/engram/v1/engram_grpc.pb.go`, `internal/grpcserver/server.go`, new `internal/grpcserver/project_identity_v2_test.go`, `internal/db/gorm/project_store.go`, `internal/db/gorm/project_store_test.go`, `internal/worker/handlers_context.go`, new `internal/worker/project_identity_v2_test.go`, `plugin/engram/hooks/lib.js`, `plugin/engram/hooks/lib.test.js`, new `plugin/engram/hooks/project-identity-v2.test.js`, `plugin/openclaw-engram/src/identity.ts`, `plugin/openclaw-engram/src/identity.test.ts`, `docs/arch/architecture.md` | convergent GE-003 identity namespace/migration decision | versioned full identity metadata; synchronous transactionally consistent register-and-resolve before first gRPC/HTTP data access; existing unambiguous legacy namespace continuity; contradictory full identities never merge; ambiguous legacy-only request fails before mutation with upgrade action; strict versioned high-entropy non-git anchor plus legacy alias compatibility; Go/Claude/OpenClaw shared vectors; explicit anchor sharing works; private authorization remains keycard/principal based; candidate/current and mixed-version restart/rollback proof | +| OPENCLAW-RELEASE | `work/prc-openclaw-release` | `plugin/openclaw-engram/.gitignore`, `plugin/openclaw-engram/package.json`, new `plugin/openclaw-engram/package-lock.json`, `plugin/openclaw-engram/openclaw.plugin.json`, `plugin/openclaw-engram/README.md`, `.github/workflows/plugin-publish.yml`, `docs/RELEASE-PROTOCOL.md` | accepted SECURITY-PROJECT-IDENTITY integrated; worktree rebased to its exact integration SHA; accepted RELEASE-GATES `run-node-matrix.ps1` exists before checker execution; ordering edge `SECURITY-PROJECT-IDENTITY -> OPENCLAW-RELEASE -> INTEGRATION-RELEASE` | current baseline authority is package/plugin/npm `3.7.5`; record registry version and actual-diff semver decision after the identity source change, require the final local version to be publishable and greater than the current registry version when packageable source changed, align package/plugin/lock-top/lock-root versions, remove the lock ignore and track a generated lockfile v3, preserve declared dependency ranges unless a separately reviewed dependency change is recorded, replace publish-time `npm install` with `npm ci`, and prove from a fresh detached worktree with no pre-existing `node_modules`: tracked-lock/parity, `npm ci`, typecheck, tests, high-severity audit, package dry-run contents, clean Git status, publish/readback, independent checker PASS, and post-run review PASS under `.agent/reports/evidence/production-ready/openclaw-release/**` | +| UPDATE-LIFECYCLE | `work/prc-security-updater` | `internal/update/update.go`, `internal/update/update_test.go`, `internal/worker/handlers_update.go`, `internal/worker/handlers_update_test.go`, `scripts/install.sh`, `scripts/install.ps1`, `.goreleaser.yaml`, `.github/workflows/release.yaml`, `plugin/engram/hooks/hook-cli.test.js` | convergent GE-004 update ownership/provenance decision; avoid `internal/worker/service.go` overlap | read-only version discovery resolves real zip/tar assets; `/api/update/apply`, `/api/update/restart`, and `/api/restart` fail before download/write/goroutine/self-spawn with stable externally-managed receipts; container updates only by image digest redeploy/rollback; plugin assets only by marketplace/launcher versioned cache; standalone route only from an authenticated release bundle; signed checksum identity and exact archive entry are mandatory; missing verifier/metadata, bad signature/checksum, oversized download/extraction, interrupted staging, activation/readiness failure, retry and rollback are deterministic and leave the prior artifact byte-identical; release archives contain required installer/manifest material; raw curl/irm-pipe execution is not a production contract | +| SECURITY-REVIEW | checker-only | read-only review of SQL construction, template rendering, reverse proxy, updater/extraction, auth, secrets, and externally controlled inputs | SECURITY-TOOLCHAIN plus integrated candidate | no unresolved S3/S4 finding; dependency bump is not sufficient evidence | +| DOCUMENT-INGEST-PUBLIC-TRUTH | `work/prc-document-ingest-public-truth` | `internal/mcp/server.go`, new `internal/mcp/ingest_document_description_test.go` only | INGEST-DOC-CLASSIFICATION complete; disjoint from snapshot demolition; CORE-PUBLIC-TRUTH owns the later README epoch | change the public `ingest_document` schema description from retired chunk/embed/search claims to the live metadata-only `DocumentStore.UpsertDocument` behavior; exact schema-description regression; no snapshot branch wiring and no claim that the separate live memory `ingest` route is covered | +| MCP-STRUCTURED-INPUT-CLASSIFICATION | checker-only | read-only `.agent/reports/2026-07-10-mcp-structured-input-classification.md` | complete at SHA256 `3356F3AE6073F95E701707FCF451D63809AC186ED1DEA7321A7027C4C3122E7A` | verdict `CLASSIFIED_MUST_BUILD / BLOCKS_RELEASE`; exact hazards include malformed `promote_candidate.dry_run`, `store_memory.dry_run`, and `settings.encrypt`, lossy durable selectors, tag-clear ambiguity, partial `supersedes`, schema drift, and other route-specific mutation consumers; this row is diagnosis authority, not implementation permission | +| MCP-STRUCTURED-INPUT-VALIDATION | `work/prc-mcp-structured-input-validation` | `internal/mcp/coerce.go`, `internal/mcp/coerce_test.go`, `internal/mcp/tools_candidates.go`, `internal/mcp/tools_candidates_test.go`, `internal/mcp/tools_memory.go`, `internal/mcp/tools_memory_edit_test.go`, `internal/mcp/tools_memory_significance.go`, `internal/mcp/tools_memory_significance_test.go`, `internal/mcp/tools_store_consolidated.go`, `internal/mcp/tools_settings.go`, `internal/mcp/tools_settings_test.go`, `internal/mcp/tools_documents_v2.go`, `internal/mcp/tools_rule_governance.go`, `internal/mcp/tools_rule_governance_test.go`, new `internal/mcp/structured_input_validation_test.go` | exact accepted DB-BULKOPS-BEHAVIORAL-EDGE-REWORK integration SHA recorded; worktree rebased to that SHA; MCP-STRUCTURED-INPUT-CLASSIFICATION complete; may not rewrite accepted candidate-snapshot invariants; any additional mutation handler found by the mandatory inventory requires a plan/state ledger amendment before edit | inventory every public mutation and alias from advertised schema through handler to durable writes; decode load-bearing IDs with `json.Decoder.UseNumber` or equivalent exact representation before float64 loss; accept only integral in-range JSON numbers for integer contracts and document any route-specific numeric-string compatibility; distinguish missing from present for booleans/arrays so any malformed present value fails before facade/store/audit calls; align candidate, memory/store, settings, document-comment, rule-governance, significance, `promote_candidate.dry_run`, edit-tags, and `store_memory.supersedes` schema/handler contracts; do not globally tighten read/filter coercers; prove zero durable writes, zero transition/audit delta, and no false-success response across missing/null/wrong type/fraction/exponent/`2^53+1`/`MaxInt64`/overflow/mixed arrays/repeated concurrent calls; table/property/fuzz plus real-dispatch proof, independent checker PASS, and post-review PASS before transfer to retained mutation owners or INTEGRATION-RELEASE | +| DEMOLITION-SKIP-CLASSIFICATION | checker-only, then ROADMAP-RECONCILIATION owners | read-only classification of all 25 skip events plus four `internal/graph` T015/T016 failures and `internal/mcp/integration_tg3_hybrid_test.go` failure; any resulting edit is first assigned to an exact disjoint lane | RELEASE-GATES full diagnostic | every item classified `live`, `pre-demolition-stale`, `dormant-flag-gated`, `must-build`, `supported-platform allowlist`, or `release blocker`; no graph/rerank/scoring remnant is repaired merely because a test exists; each allowed skip has platform/prerequisite evidence and a separate proof lane where the behavior is required | +| T007-COMPAT-DEMOLITION-CLASSIFICATION | `work/prc-t007-compat-classification` | `internal/mcp/store_memory_compat_t007_test.go` only | RELEASE-GATES full diagnostic; independent read-only current-contract/demolition classification before edit | classify `TestEC_F1_TagDerivedBackfill_T007` as live, stale, dormant, must-build, or current-contract test correction; then, only if test correction is the accepted result, edit the owned test and run `pwsh ./scripts/production-gates/run-db-suite.ps1 -Package ./internal/mcp -Run '^TestEC_F1_TagDerivedBackfill_T007$' -FreshDatabase -Repeat 3 -FailOnUnexpectedSkip`; if production code is required, stop and amend this ledger with exact disjoint paths before edit; checker, post-review, zero-session artifact under `.agent/reports/evidence/production-ready/t007-compat/` | +| DB-RULES-ISOLATION | `work/prc-db-rules-isolation` | `internal/worker/handlers_rules_test.go`, new `scripts/production-gates/run-db-rules-isolation.ps1` | all preceding diagnostic functional lanes integrated; RELEASE-GATES foundation | classify production defect vs fixture contamination before edit; run `pwsh ./scripts/production-gates/run-db-rules-isolation.ps1 -Mode SharedSequence -Repeat 3 -FailOnUnexpectedSkip -ArtifactRoot .agent/reports/evidence/production-ready/db-rules-isolation/shared` so the three named tests execute after the preceding diagnostic packages against one fresh DB, then run the same command with `-Mode IsolatedSchemas -ArtifactRoot .agent/reports/evidence/production-ready/db-rules-isolation/isolated`; prove no global-row/order false failure or false green and zero residual sessions; any production-path need stops for a root ledger amendment; independent checker + post-review precede integration | +| COVERAGE-WORKER | `work/prc-coverage-worker` | new `internal/worker/production_readiness_coverage_test.go` only | accepted DB-AUTH, DB-CRYSTALLIZATION, OBSERVABILITY-OTLP, LAUNCHER and V7 runtime changes integrated | high-value startup/auth/update/readiness/failure contracts add real behavior coverage without source edits or mock-only line chasing; package and full profile evidence | +| COVERAGE-MCP | `work/prc-coverage-mcp` | new `internal/mcp/production_readiness_coverage_test.go` only | accepted project-identity/privacy and demolition classification integrated | supported store/recall/context/project/error boundaries covered through real handlers/stores; no removed scoring/rerank behavior resurrected; package and full profile evidence | +| COVERAGE-GORM | `work/prc-coverage-gorm` | new `internal/db/gorm/production_readiness_coverage_test.go` only | all DB functional lanes integrated | migration/error/transaction/recovery/empty-state boundaries covered on fresh schemas without order dependence; package and full profile evidence | +| COVERAGE-LOOM | `work/prc-coverage-loom` | new `internal/handlers/loom/production_readiness_coverage_test.go` only | DEMOLITION-SKIP-CLASSIFICATION identifies supported OS/tool prerequisites | raise live loom statement coverage from measured `64.77%` to at least `70%` with cancellation/empty-output/env/stderr/timeout behavior on a supported runner; platform skips are explicit, never generic success | +| DEPLOYMENT-ROLLBACK | `work/prc-deployment-rollback` | `docker-compose.yml`, `deploy/docker-compose.runtime.yml`, `deploy/docker-compose.operator-web-standalone.yml`, `deploy/entrypoint-server.sh`, `deploy/healthcheck-server.sh`, `deploy/verify-rollback.ps1`, `deploy/verify-runtime-policy.ps1` | accepted IMAGE-REMEDIATION and AUTH-BOOTSTRAP-SECURITY integrated; worktree rebased to both exact SHAs; compose ownership transfers from IMAGE-REMEDIATION; canonical UI decision | explicit non-empty ephemeral admin/bootstrap credentials with no default/fallback; setup is not claimable without operator capability even when host ports are reachable; PostgreSQL not host-published by default; immutable accepted image IDs/digests from `final-image-set.json`; external liveness records `/health` without redefining its pre-ready contract, while each shell-free Docker readiness probe calls direct or proxied `/api/ready`, parses JSON, and accepts only exact `status=ready`; server runs non-root with `read_only: true`, all capabilities dropped, `no-new-privileges`, `HOME=/var/lib/engram`, and a persistent writable named or bind volume mounted exactly there and provisioned UID/GID `65532:65532` mode `0700`; absent, unowned, or unwritable storage, an unowned tmpfs restart, and injected initialization failures must remain Docker-unhealthy even if liveness `/health` returns HTTP 200 with `status=error`; exact consumer inventory must prove `deploy/docker-compose.operator-web-standalone.yml` has no retained supported consumer, then this lane deletes it rather than shipping a second stale `operator-web`/`NUXT_ENGRAM_API_TARGET` deployment truth; canonical operator checks require proxied `/api/health` and `/api/ready` to reach the exact server, not merely root HTTP 200; executable rollback with retained marker; remote-attacker and secret-negative runtime proof; any compose edit triggers fresh exact-image scans | +| RECOVERY-DATA | `work/prc-recovery-data` | `scripts/recovery/start-disposable-postgres.ps1`, `scripts/recovery/verify-postgres-roundtrip.ps1`, `scripts/recovery/seed-recovery-fixture.ps1`, `scripts/recovery/assert-recovery-fixture.ps1`, `tests/critical/recovery/postgres_roundtrip_test.go` | accepted DB fixes + deployment stand | no-skip migrations; v6.42.0 -> candidate upgrade; pg_dump/destroy/restore; memory/rule/credential/issue/document/code-index verification; corrupt/wrong-key/interrupted/retry/target-not-empty cases | +| OBSERVABILITY-OTLP | `work/prc-observability-otlp` | `internal/module/obs/logging.go`, `internal/module/obs/logging_test.go`, `internal/module/obs/meter.go`, `internal/module/obs/meter_test.go`, `internal/module/obs/metrics.go`, `internal/module/obs/metrics_test.go`, `cmd/engram-server/main.go`, `cmd/engram-server/main_test.go`, `scripts/production-smoke/verify-otlp.ps1` | RELEASE-GATES foundation | disposable receiver sees named startup/MCP/DB/auth/worker/index/client success+error metrics; exporter-down/backpressure timeout behavior; log/payload secret-negative proof | +| PRIVACY-BOUNDARIES | `work/prc-privacy-boundaries` | `internal/scope/domain_policy.go`, `internal/scope/domain_policy_test.go`, `internal/scope/filter.go`, `internal/scope/filter_test.go`, `internal/scope/filter_principal_test.go`, `internal/scope/filter_w4_test.go`, `internal/principalmemory/access_policy.go`, `internal/principalmemory/access_policy_test.go`, `internal/principalmemory/domain_registry.go`, `internal/principalmemory/domain_registry_test.go`, `internal/principalmemory/query_service.go`, `internal/principalmemory/query_service_test.go`, `internal/mcp/tools_principal_memory.go`, `internal/mcp/tools_principal_memory_test.go`, `internal/mcp/tools_recall_principal_test.go`, `internal/mcp/recall_visibility_backfill_test.go`, `internal/mcp/store_memory_principal_test.go`, `internal/worker/handlers_principal_memory.go`, `internal/worker/handlers_principal_memory_test.go`, `internal/worker/scope_bypass_w4_test.go`, `internal/worker/retention.go`, `internal/worker/retention_test.go`, `internal/db/gorm/memory_store.go`, `internal/db/gorm/memory_store_principal_test.go`, `internal/db/gorm/memory_store_principal_query_test.go`, `internal/db/gorm/purge_store_test.go`, `tests/critical/data_boundaries/principal_project_retention_test.go` | RELEASE-GATES foundation; accepted DB-BULKOPS integrated; worktree rebased to exact integration SHA before `memory_store.go` ownership transfers | cross-principal/project negatives, two-workstation sharing, shared/public behavior, configured/disabled retention, destructive boundaries, flag-off vs production-profile behavior | +| CRITICAL-HARNESS | `work/prc-critical-harness` | `tests/critical/customer_mode/customer_mode_test.go`, `tests/critical/customer_mode/compatibility_test.go`, `tests/critical/customer_mode/cross_agent_test.go`, `scripts/production-smoke/customer/run-customer-mode.ps1`, `scripts/production-smoke/customer/run-client-compatibility.ps1`, `scripts/production-smoke/customer/run-cross-agent.ps1`, `scripts/production-smoke/customer/run-diagnostic-matrix.ps1`, `scripts/production-smoke/customer/assert-product-works.ps1` | integrated RELEASE-GATES foundation | wrapper/direct/customer/restart/upgrade/mixed-version/cross-agent/cross-workstation matrix and machine-readable `PRODUCT_WORKS`; forbidden path: `scripts/production-smoke/verify-otlp.ps1` | +| CORE-PUBLIC-TRUTH | `work/prc-core-public-truth` | `README.md`, `README.ru.md`, `README.zh.md`, `CONTRIBUTING.md`, `CHANGELOG.md`, `Makefile`, `.env.example`, `docs/DEPLOYMENT.md`, `docs/MIGRATION.md`, `docs/PRODUCTION-TESTING-PLAYBOOK.md`, `docs/arch/CONFIGURATION.md`, `docs/arch/QUICKSTART.md`, `docs/release-notes/v6.43.0.md`, `docs/public/engram.jpg`, `plugin/engram/commands/setup.md`, `plugin/engram/commands/doctor.md` | accepted IMAGE-REMEDIATION integrated and worktree rebased to its exact SHA; M5 commands proven by other lanes; `core_safe_point_version` release analysis | zero active HTTP-MCP/SSE/API-token resurrection; documented first run executed verbatim; one canonical operator-console deployment/support path and accepted PostgreSQL image identity; this row describes only the M5 safe point and cannot serve as M7 final public truth | +| FINAL-PUBLIC-TRUTH | `work/prc-final-public-truth` | `README.md`, `README.ru.md`, `README.zh.md`, `CONTRIBUTING.md`, `CHANGELOG.md`, `Makefile`, `.env.example`, `docs/DEPLOYMENT.md`, `docs/MIGRATION.md`, `docs/PRODUCTION-TESTING-PLAYBOOK.md`, `docs/arch/CONFIGURATION.md`, `docs/arch/QUICKSTART.md`, `docs/public/engram.jpg`, `plugin/engram/commands/setup.md`, `plugin/engram/commands/doctor.md`; no versioned release-note path is authorized yet | all M6 implementation CRs integrated; `.agent/reports/evidence/production-ready/release/final-version.json` records the actual-diff semver decision, exact release-note path, image tags/digests, plugin version, and rollback predecessor | `BLOCKED` until root amends this row with one exact versioned `docs/release-notes/...md` file and records the public-file epoch transfer; final docs/changelog/install/upgrade/rollback claims are rerun against final published artifacts; no placeholder path may be edited | +| LAUNCHER-FIRST-RUN | `work/prc-launcher-first-run` | `cmd/engram/main.go`, `cmd/engram/main_test.go`, `cmd/engram/wiring.go`, `cmd/engram/exec_windows.go`, `cmd/engram/exec_unix.go`, `plugin/engram/.engram-project`, `plugin/engram/scripts/run-engram.js`, `plugin/engram/scripts/run-engram.test.js`, `plugin/engram/scripts/ensure-binary.js`, `plugin/engram/scripts/ensure-binary.test.js` | M0; preserve dirty main and legacy launcher worktree; accepted SECURITY-PROJECT-IDENTITY protocol and shared vectors | fail-closed workstation keycard gate; marker format and wrapper identity implement the accepted GE-003 versioned anchor/legacy-alias protocol rather than independently freezing a format; direct/wrapper parity; version-skew repair; clean install; store -> new process -> recall and automatic injection; restart/upgrade | +| OC-INTEGRATION | `work/prc-operator-console-integration` | `apps/operator-console/**` only | accepted IMAGE-REMEDIATION and AUTH-BOOTSTRAP-SECURITY API/capability contract integrated; worktree rebased to both exact SHAs; `package.json`/`package-lock.json` ownership transfers from IMAGE-REMEDIATION; ROADMAP issues the reviewed OC contract; inventory legacy OC heads/dirt | current-base integration; exact required bootstrap artifacts `apps/operator-console/pages/setup.vue`, `apps/operator-console/composables/useOperatorBootstrap.ts`, and `apps/operator-console/tests/browser/production-auth-bootstrap.spec.ts`; preserve `nuxt.config.ts` live `NUXT_OPERATOR_API_TARGET` contract and add `apps/operator-console/tests/browser/production-api-proxy.spec.ts` proving the shipped runtime proxy reaches the exact backend `/api/health` and `/api/ready` before/after restart; root HTTP 200 with fallback `unleashed.lan`, timeout, or wrong backend is a failure; operator capability never enters URL/storage/log/screenshot/trace; remote attacker, missing/invalid/replay/revoked/restart states; keycard issue/use/revoke; live API readback; browser console/network/accessibility; no mock/placeholder dishonesty; rerun locked install, audit, build, browser proof, operator image rebuild and zero HIGH/CRITICAL scan after any dependency change | +| S4B-CONTRACT | `work/prc-s4b-contract` | `.agent/specs/engram-v7-directives-surfacing/**` only | M0 | remove operator-console contamination; preserve canonical `HintProposal` return contract; regenerate checklist/tasks and validate/challenge before code | +| V7-S4B-BACKEND | `work/prc-v7-s4b-backend` | `internal/cognitive/s4bsurfacing/**` | S4B-CONTRACT; S1/S2/S3/S4a live-path verification | CandidateProposer behavior/policy/privacy/deadline tests live inside the owned subtree; no specs, worker wiring, UI, queue or render ownership | +| V7-CORE-CALLPATH | `work/prc-v7-core-callpath` | `internal/cognitive/core/event_bus.go`, `internal/cognitive/core/event_bus_test.go`, `internal/cognitive/core/hint_queue.go`, `internal/cognitive/core/hint_queue_test.go`, `internal/cognitive/s3ambient/queue.go`, `internal/cognitive/s3ambient/subsystem.go` | independent live/stale/dormant/must-build classification | any required bus/queue production behavior is proved independently of S4B; no unused scaffold is extended merely because it exists | +| V7-RUNTIME-WIRING | `work/prc-v7-runtime-wiring` | `internal/worker/service.go`, `internal/worker/service_v7_integration_test.go`, `internal/worker/handlers_stats_v7.go`, `internal/worker/handlers_stats_v7_test.go` | accepted AUTH-BOOTSTRAP-SECURITY integrated; worktree rebased to its exact integration SHA before `service.go` ownership transfers; V7-S4B-BACKEND, V7-CORE-CALLPATH classification, V7-TELEMETRY-WIRING package API | real CandidateProposer registration/read path; auth/bootstrap route behavior unchanged by rebase; S3-owned fusion/queue/render delivery; real S5 source registration; full flag matrix | +| V7-TELEMETRY-WIRING | `work/prc-v7-telemetry-wiring` | `internal/cognitive/s5/metrics.go`, `internal/cognitive/s5/provider.go`, `internal/cognitive/s5/provider_test.go`, `internal/cognitive/s5/source_adapter.go`, `internal/cognitive/s5/source_adapter_test.go` | backend producer contract stabilized | production source adapter; `hint_precision n>=30`, `accepted_hint_action n>=20`, honest no-sample/below-threshold states, rolling burden/freshness evidence | +| ROADMAP-RECONCILIATION | `work/prc-roadmap-reconciliation` | `.agent/specs/roadmap.md`, `.agent/specs/ui-surface-ledger.md`, new `.agent/specs/operator-console-production-integration/**`, `.agent/specs/engram-v7-ambient/spec.md`, `.agent/specs/engram-v7-ambient/plan.md`, `.agent/specs/engram-v7-ambient/checklists/general.md`, `.agent/specs/engram-v7-ambient/changes/CR-001-initial-scope/change.md`, `.agent/specs/engram-v7-ambient/changes/CR-001-initial-scope/tasks.md` | audited implementation truth | zero contradictory shipped/pending labels; v5 demolition classification; OC contract authored before OC code; stale S3 task state corrected; every remaining obligation has CR/tasks/acceptance | +| NORTHSTAR-CI-A-CONTRACTS | `work/prc-northstar-ci-a-contracts` | new `.agent/specs/engram-absorption/ci-a-dense-vector/spec.md`, `.agent/specs/engram-absorption/ci-a-dense-vector/plan.md`, `.agent/specs/engram-absorption/ci-a-dense-vector/checklists/general.md`, `.agent/specs/engram-absorption/ci-a-dense-vector/changes/CR-001-initial-scope/change.md`, `.agent/specs/engram-absorption/ci-a-dense-vector/changes/CR-001-initial-scope/tasks.md` | M5 core safe point; current absorption PRD/ADR plus GE-003 and v5 demolition truth | exact agent commands `$nvmd-platform:nvmd-validate .agent/specs/engram-absorption/ci-a-dense-vector` and `$nvmd-platform:challenging-plans .agent/specs/engram-absorption/ci-a-dense-vector/plan.md`; no unresolved ambiguity; exact future code/test paths, clean-room boundary, dependency DAG, benchmark, customer `codebase_index/status/search` acceptance across two worktrees, maker/checker/review artifacts under `.agent/reports/evidence/production-ready/northstar-contracts/ci-a-dense-vector/`; no source edit before independent challenge `GO` | +| NORTHSTAR-CI-B-CONTRACTS | `work/prc-northstar-ci-b-contracts` | new `.agent/specs/engram-absorption/ci-b-graph-watcher-context/spec.md`, `.agent/specs/engram-absorption/ci-b-graph-watcher-context/plan.md`, `.agent/specs/engram-absorption/ci-b-graph-watcher-context/checklists/general.md`, `.agent/specs/engram-absorption/ci-b-graph-watcher-context/changes/CR-001-initial-scope/change.md`, `.agent/specs/engram-absorption/ci-b-graph-watcher-context/changes/CR-001-initial-scope/tasks.md` | M5 core safe point; NORTHSTAR-CI-A-CONTRACTS accepted; current demolition classification | exact commands `$nvmd-platform:nvmd-validate .agent/specs/engram-absorption/ci-b-graph-watcher-context` and `$nvmd-platform:challenging-plans .agent/specs/engram-absorption/ci-b-graph-watcher-context/plan.md`; exact future code/test paths and release-sized CR DAG; customer proof for incremental watcher reindex, graph impact/flow, and context-artifact stale-hash behavior without resurrecting removed memory graph/rerank stages; artifacts under `.agent/reports/evidence/production-ready/northstar-contracts/ci-b-graph-watcher-context/` | +| NORTHSTAR-BOOK-CONTRACTS | `work/prc-northstar-book-contracts` | new `.agent/specs/engram-absorption/book/prd.md`, `.agent/specs/engram-absorption/book/spec.md`, `.agent/specs/engram-absorption/book/plan.md`, `.agent/specs/engram-absorption/book/checklists/general.md`, `.agent/specs/engram-absorption/book/changes/CR-001-initial-scope/change.md`, `.agent/specs/engram-absorption/book/changes/CR-001-initial-scope/tasks.md` | M5 core safe point; absorption PRD BOOK inventory | exact commands `$nvmd-platform:nvmd-validate .agent/specs/engram-absorption/book` and `$nvmd-platform:challenging-plans .agent/specs/engram-absorption/book/plan.md`; complete BOOK PRD/spec/plan/checklist/change/tasks, exact future code/test paths and S1-S6 dependencies; customer proof ingests a licensed book, retrieves chapter-grounded citations in a new session, and produces any book-to-skill artifact with provenance/privacy/rollback; artifacts under `.agent/reports/evidence/production-ready/northstar-contracts/book/` | +| NORTHSTAR-MEM-CONTRACTS | `work/prc-northstar-mem-contracts` | new `.agent/specs/engram-absorption/mem-residual/spec.md`, `.agent/specs/engram-absorption/mem-residual/plan.md`, `.agent/specs/engram-absorption/mem-residual/checklists/general.md`, `.agent/specs/engram-absorption/mem-residual/changes/CR-001-initial-scope/change.md`, `.agent/specs/engram-absorption/mem-residual/changes/CR-001-initial-scope/tasks.md` | M5 core safe point; live/stale/dormant/must-build classification against current v5 code | exact commands `$nvmd-platform:nvmd-validate .agent/specs/engram-absorption/mem-residual` and `$nvmd-platform:challenging-plans .agent/specs/engram-absorption/mem-residual/plan.md`; each gap is classified against shipped retrieval/crystallization behavior, exact future code/test paths are named, and customer proof measures recall/import/lesson/skill behavior without restoring demolished cross-encoder or scoring stages; artifacts under `.agent/reports/evidence/production-ready/northstar-contracts/mem-residual/` | +| NORTHSTAR-EFFECTIVENESS-CONTRACTS | `work/prc-northstar-effectiveness-contracts` | new `.agent/specs/engram-effectiveness/production-ready-residual/spec.md`, `.agent/specs/engram-effectiveness/production-ready-residual/plan.md`, `.agent/specs/engram-effectiveness/production-ready-residual/checklists/general.md`, `.agent/specs/engram-effectiveness/production-ready-residual/changes/CR-001-initial-scope/change.md`, `.agent/specs/engram-effectiveness/production-ready-residual/changes/CR-001-initial-scope/tasks.md` | M5 core safe point; current effectiveness PRD/roadmap reconciled to live v5 code | exact commands `$nvmd-platform:nvmd-validate .agent/specs/engram-effectiveness/production-ready-residual` and `$nvmd-platform:challenging-plans .agent/specs/engram-effectiveness/production-ready-residual/plan.md`; exact future code/test paths; customer/dogfood proof for truthful staleness, citation/usefulness/noise, anti-poisoning, and any retained metric without fabricated zero or dormant flag output; artifacts under `.agent/reports/evidence/production-ready/northstar-contracts/effectiveness/` | +| NORTHSTAR-SETTINGS-CONTRACTS | `work/prc-northstar-settings-contracts` | new `.agent/specs/settings-store/production-ready-residual/spec.md`, `.agent/specs/settings-store/production-ready-residual/plan.md`, `.agent/specs/settings-store/production-ready-residual/checklists/general.md`, `.agent/specs/settings-store/production-ready-residual/changes/CR-001-initial-scope/change.md`, `.agent/specs/settings-store/production-ready-residual/changes/CR-001-initial-scope/tasks.md` | M5 core safe point; current settings PRD/architecture and partial implementation classified | exact commands `$nvmd-platform:nvmd-validate .agent/specs/settings-store/production-ready-residual` and `$nvmd-platform:challenging-plans .agent/specs/settings-store/production-ready-residual/plan.md`; exact future code/test paths; customer proof for secret-safe persisted settings, restart/readback, declared hot-reload versus restart-required behavior, unavailable-store fallback, and thin-client propagation where retained; artifacts under `.agent/reports/evidence/production-ready/northstar-contracts/settings/` | +| CONTROL-PLANE | root-owned, no maker worktree | `.agent/session-state/**` only through `C:\Users\btf\.codex\plugins\cache\nvmd-ai-kit\nvmd-platform\2.85.3\skills\session\scripts\state-ops.cjs`; no hand edits | independent lanes may proceed | seq74 is `STOOD_DOWN`, missed pickup preserved, assignment `omp=developer/codex=pm`, detector and `validate --all` recorded; no unclassified OPEN counter | + +The IMAGE-REMEDIATION PostgreSQL sub-contract is part of that row's owned `deploy/postgres/Dockerfile`, compose, helper, and critical-test paths: runtime UID/GID is `70:70`; rootfs is read-only; all capabilities are dropped; `no-new-privileges` is set; UID-owned tmpfs is limited to `/tmp` and `/var/run/postgresql`; PGDATA is an explicitly owned persistent named volume at `/var/lib/postgresql/data`. A tmpfs-only PGDATA negative must demonstrate the proved loss mode, while the positive removes the first container, creates a new one on the same volume, and re-proves PostgreSQL `17.10`, pgvector `0.8.1`, migrations, and retained vector/application markers. DEPLOYMENT-ROLLBACK must preserve this contract after compose transfer. + +Every path not listed in a maker row is forbidden to that maker. If a slice discovers a necessary unlisted or shared file, it stops before editing and sends the exact path/change to root. Root amends the ledger first, serializes ownership, or creates a named integration-only patch after both commits are reviewed. Conditional ownership phrases are not authorization. + +### 4.1 Ownership Epochs and Automated Overlap Gate + +Rows are exclusive within an ownership epoch. A repeated path below is a serialized transfer, not concurrent authorization: + +| Exact path | Current/first epoch | Next epoch | Transfer gate | +| --- | --- | --- | --- | +| `internal/db/gorm/candidate_store.go`, `internal/db/gorm/candidate_store_test.go` | DB-BULKOPS | DB-BULKOPS-BEHAVIORAL-EDGE-REWORK -> DB-GOVERNANCE -> CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK | rejected predecessor checker/hash recorded; rework uses exact base `68b2ce5835c7c6efdf1c68da9eedcb8d9c3837ef`; each accepted successor requires checker PASS, post-review PASS, integration SHA, and exact rebase before edit | +| `internal/mcp/tools_bulkops.go`, `internal/mcp/tools_dryrun_test.go` | DB-BULKOPS | DB-BULKOPS-BEHAVIORAL-EDGE-REWORK | rejected predecessor checker/hash recorded; rework base is exact rejected head; checker and post-review PASS plus integration SHA close the transfer | +| `internal/bulkops/facade.go` | DB-BULKOPS | INGEST-DOC-SNAPSHOT-DEMOLITION -> DURABLE-AUDIT-BOUNDARIES | behavioral-edge composite checker and post-review PASS; exact integration SHA recorded; demolition rebased before edit; historical ingest guard green before durable-audit fault work | +| `internal/bulkops/facade_test.go` | DB-BULKOPS | INGEST-DOC-SNAPSHOT-DEMOLITION | accepted behavioral-edge composite integrated; demolition worktree rebased; focused historical-only regressions PASS before integration | +| `internal/bulkops/rollback_test.go` | DB-BULKOPS | CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK | accepted behavioral-edge composite and DB-GOVERNANCE integrated; candidate-review successor rebased; combined checker and post-review PASS | +| `pkg/models/snapshot.go` | DB-BULKOPS | INGEST-DOC-SNAPSHOT-DEMOLITION | accepted behavioral-edge composite integrated; demolition successor rebased; persistence-compatibility and non-executable regressions PASS | +| `internal/db/gorm/user_store.go` | DB-AUTH | AUTH-BOOTSTRAP-SECURITY -> DURABLE-AUDIT-BOUNDARIES | each predecessor checker and post-review PASS, integration SHA recorded, successor rebased; no simultaneous writer | +| `internal/worker/auth_handlers.go` | DB-AUTH | AUTH-BOOTSTRAP-SECURITY -> DURABLE-AUDIT-BOUNDARIES | each predecessor checker and post-review PASS, integration SHA recorded, successor rebased; no simultaneous writer | +| `internal/worker/service.go` | AUTH-BOOTSTRAP-SECURITY | V7-RUNTIME-WIRING | auth bootstrap checker and post-review PASS, commit integrated, V7 worktree rebased, auth route regression rerun | +| `Dockerfile` | SECURITY-TOOLCHAIN | IMAGE-REMEDIATION | toolchain checker and post-review PASS, commit integrated, image worktree rebased, zero-finding rebuild and scan before successor integration | +| `.github/workflows/test.yml` | RELEASE-GATES | IMAGE-REMEDIATION | release-gates checker and post-review PASS, commit integrated, image worktree rebased before workflow image-identity changes | +| `docker-compose.yml`, `deploy/docker-compose.runtime.yml` | IMAGE-REMEDIATION | DEPLOYMENT-ROLLBACK | image checker and post-review PASS, `final-image-set.json` recorded, deployment worktree rebased, fresh scan after edits | +| `apps/operator-console/package.json`, `apps/operator-console/package-lock.json` | IMAGE-REMEDIATION | OC-INTEGRATION | image checker and post-review PASS, OC worktree rebased, any later dependency edit reruns audit/build/browser/image scan | +| `docs/DEPLOYMENT.md`, `docs/PRODUCTION-TESTING-PLAYBOOK.md` | IMAGE-REMEDIATION | CORE-PUBLIC-TRUTH -> FINAL-PUBLIC-TRUTH | image proof integrated; CORE rebased for M5; FINAL rebased to exact M6 integration and final-version artifact before edit | +| `README.md`, `README.ru.md`, `README.zh.md`, `CONTRIBUTING.md`, `CHANGELOG.md`, `Makefile`, `.env.example`, `docs/MIGRATION.md`, `docs/arch/CONFIGURATION.md`, `docs/arch/QUICKSTART.md`, `docs/public/engram.jpg`, `plugin/engram/commands/setup.md`, `plugin/engram/commands/doctor.md` | CORE-PUBLIC-TRUTH | FINAL-PUBLIC-TRUTH | M5 release published and proved; FINAL worktree rebased to exact M6 integration; final version artifact and exact release-note path recorded before edit | + +After PLAN-GOVERNANCE and RELEASE-GATES are committed, independently checked, post-reviewed, and integrated, root runs both modes after every ledger edit and before every checker/integration: + +```powershell +$Plan = '.agent/plans/2026-07-10-engram-production-ready-master-plan.md' +$State = '.agent/plans/2026-07-10-engram-production-ready-ownership-state.json' +$PlanSha = (Get-FileHash -LiteralPath $Plan -Algorithm SHA256).Hash +pwsh ./scripts/production-gates/assert-plan-path-ownership.ps1 -Mode Ledger -Plan $Plan -ExpectedPlanSha256 $PlanSha -State $State -Artifact .agent/reports/evidence/production-ready/ownership/path-ledger.json +pwsh ./scripts/production-gates/assert-plan-path-ownership.ps1 -Mode Diff -Slice DB-BULKOPS -Base 2b085de663d5ba9dfa97adf9ee58de062ee0997c -Head 68b2ce5835c7c6efdf1c68da9eedcb8d9c3837ef -EvidenceNamespace '.agent/specs/production-ready-db-bulkops/evidence/**' -ReportNamespace .agent/reports/2026-07-10-db-bulkops-sibling-rework-maker.md -Plan $Plan -ExpectedPlanSha256 $PlanSha -State $State -Artifact .agent/reports/evidence/production-ready/ownership/db-bulkops-rejected-68b2ce58.json +``` + +The historical DB-BULKOPS command is a required negative: all changed paths must be declared, while epoch authority fails because the active rework is current owner on four paths. For every active slice, substitute the exact register base/head and namespaces; a successor Diff is mergeable only when current-owner, checker, post-review, integration, and ancestry evidence pass. Ledger mode understands literal files and declared `/**` prefixes, requires epoch order to equal matrix declaration order, and rejects unknown scopes, undeclared duplicates, prefix intersections, missing state rows, or hash drift. Zero concurrent overlap and zero undeclared changed paths are PR-0 gates. + +### 4.2 Exact Ownership of the 27 Diagnostic Failures + +| Owner | Exact failures | Count | +| --- | --- | ---: | +| DB-BULKOPS | `TestEC_F3_ConflictDetected_Integration`, `TestFacade_BulkDelete_Committed_AuditLogWritten`, `TestFacade_BulkSupersede_Committed_AuditLogWritten`, `TestRollback_HappyPath` | 4 | +| DB-GOVERNANCE | `TestMigration144_RuleGovernanceEscapeConstraints`, `TestMigration144_RuleGovernanceRollbackAndReapply`, `TestMigration144_RuleGovernanceSnapshotStatusesAcceptExtendedStates`, `TestRuleGovernanceStore_AnnotatedCandidateWaitsUntilReviewAfter`, `TestRuleGovernanceStore_GetLifecycleHealthAggregatesGovernanceTables`, `TestRuleGovernanceStore_GetLifecycleHealthOmitsGlobalArbiterRunsForProjectScopedReads` | 6 | +| DB-EMBEDDING-STATS | `TestStatsWithCoverage_NoActiveMemories`, `TestStoreStats_Empty` | 2 | +| DEMOLITION-SKIP-CLASSIFICATION | `TestDangling_T016_DanglingEdgeReturnsFlag`, `TestPathC_T015_NodeCreatedAtTimestamp`, `TestPathC_T015_NodeTypedEdgeListFilter`, `TestPathC_T015_SkillNodeEdgeRoundtrip`, `TestHybridTG3_ConfidenceMin_FloorEnforced_T022` | 5 | +| T007-COMPAT-DEMOLITION-CLASSIFICATION | `TestEC_F1_TagDerivedBackfill_T007` | 1 | +| DB-AUTH | `TestAuthHandlersLifecycle_DisabledAdminCanBeDemotedWithoutLastAdminError`, `TestAuthHandlersLifecycle_LastAdminDemoteRaceLeavesOneAdmin` | 2 | +| DB-CRYSTALLIZATION | `TestCrystallizationIntegration_ConcurrentReplaySkipsDuplicateFingerprint`, `TestCrystallizationIntegration_DecisionsStoredWithCorrectFields`, `TestCrystallizationIntegration_PrivacyRedaction` | 3 | +| DB-RULES-ISOLATION | `TestHandleCreateBehavioralRule_Success`, `TestHandleListBehavioralRules_ProjectScope`, `TestHandleSetBehavioralRuleEnabled_Success` | 3 | +| DB-REAPER | `TestReaper_RespectsRetentionEnvVar` | 1 | +| **Total** | exact one-owner mapping | **27** | + +The release gate regenerates this mapping from the machine diagnostic and fails if a failed test has zero or multiple owners, or if the total differs from the current diagnostic. Classification may change the required fix, never the requirement for one owner and closing evidence. + +### 4.3 Evidence Plumbing + +- Canonical machine register: `.agent/reports/production-readiness-evidence-register.json`. +- Canonical human register: `.agent/reports/production-readiness-evidence-register.md`. +- Operator view: `.agent/reports/engram-roadmap-progress-2026-07-06.html`, rendered from the same register state. +- Default maker raw-output namespace: `.agent/reports/evidence/production-ready//**`; the brief records the exact namespace and any row-declared legacy exception. +- Default maker-report namespace: `.agent/reports/production-ready//**`; a legacy exact report path is accepted only when literal in the ownership row. +- Root is the sole register/Markdown/HTML writer. Makers/checkers may write only their declared evidence/report artifacts, return exact paths plus SHA256/verdict, and never update mutable progress authority. +- Ignored M6 SpecKit/review artifacts use the force-add/hash/evidence-commit protocol in M6; existence in a worktree is not persistence. + +### 4.4 Node, Image/Runtime, and Secret Matrix + +| Surface / classification | Exact command | Raw artifact | Failure rule / owner | +| --- | --- | --- | --- | +| `apps/operator-console` / canonical shipped UI | `npm --prefix apps/operator-console ci`; `npm --prefix apps/operator-console run parity`; `npm --prefix apps/operator-console run test:seam`; `npm --prefix apps/operator-console run build`; `npm --prefix apps/operator-console run test:browser`; `npm --prefix apps/operator-console audit --audit-level=high` | `.agent/reports/evidence/production-ready/node/operator-console/` | Any non-zero, stale generated asset, browser console/network error, high/critical advisory, or unexpected skip blocks PR-2/PR-6. RELEASE-GATES owns execution; OC owns fixes. | +| `docs` / shipped public site | `npm --prefix docs ci`; `npm --prefix docs run build`; `npm --prefix docs audit --audit-level=high` | `.agent/reports/evidence/production-ready/node/docs/` | Any non-zero, broken link/build, or high/critical advisory blocks Public Truth. | +| `plugin/openclaw-engram` / supported live plugin route | `pwsh ./scripts/production-gates/run-node-matrix.ps1 -Surface openclaw -Audit` in a fresh detached worktree after OPENCLAW-RELEASE | `.agent/reports/evidence/production-ready/node/openclaw/` and `.agent/reports/evidence/production-ready/openclaw-release/**` | Require no pre-existing `node_modules`/`dist`; tracked and non-ignored lockfile v3; exact package/lock-top/lock-root/plugin version plus dependency/devDependency parity; exact `npm ci -> typecheck -> tests -> audit --audit-level=high -> pack --dry-run --json`; required tarball contents and forbidden source/test/node_modules contents; clean Git status and unconditional cleanup. Missing lock currently fails and blocks release. After publish, npm latest readback must equal the recorded version. | +| `plugin/engram` hooks + launcher scripts / shipped | `node --test plugin/engram/hooks/*.test.js plugin/engram/scripts/*.test.js` | `.agent/reports/evidence/production-ready/node/engram-plugin/` | Any non-zero or omitted test file blocks PR-2/PR-3. | +| `ui` / legacy embedded-dashboard source, no canonical runtime consumer | `npm --prefix ui ci`; `npm --prefix ui run type-check`; `npm --prefix ui run build`; `npm --prefix ui audit --audit-level=high` | `.agent/reports/evidence/production-ready/node/legacy-ui/` | Must remain buildable until ROADMAP/CORE-PUBLIC-TRUTH removes the stale Docker stage and documents migration-only status. It cannot satisfy PR-6. | +| `apps/operator-web` / legacy standalone migration surface | `npm --prefix apps/operator-web ci`; `npm --prefix apps/operator-web run typecheck`; `npm --prefix apps/operator-web run build`; `npm --prefix apps/operator-web audit --audit-level=high` | `.agent/reports/evidence/production-ready/node/operator-web/` | Must remain buildable until deployment consumers are removed. It cannot be presented as the canonical console. | +| Server image / IMAGE-REMEDIATION | `docker build --pull --no-cache --target server -t engram:prc-server .`; `docker scout cves --platform linux/amd64 --only-severity critical,high --exit-code --format sarif engram:prc-server`; `pwsh ./scripts/production-gates/run-image-runtime-matrix.ps1 -Image engram:prc-server -Role server` | `.agent/reports/evidence/production-ready/image-remediation/server/` | Pinned distroless Debian 13 runtime; shared static `engram-healthcheck` is the JSON-form Docker HEALTHCHECK, calls dependency-aware `/api/ready`, parses JSON, and exits zero only for exact `status=ready`; `/health` remains a separately asserted liveness surface and is never Docker readiness; `ldd` capture proves every CGO server dependency is present; scan count exactly zero without exceptions; UID 65532, no ambient capabilities, `no-new-privileges`, read-only root, `HOME=/var/lib/engram` with one persistent writable named or bind volume exactly there provisioned UID/GID `65532:65532` mode `0700`, only port 37777, and no embedded secret; current `$HOME/.engram` resolution is source-proved and no ignored `ENGRAM_DATA_DIR` claim is allowed; absent/unowned/unwritable storage, unowned-tmpfs restart, injected init failure, and malformed/error HTTP-200 `/api/ready` fixtures remain unhealthy even though liveness `/health` may intentionally return 200. | +| Operator image / IMAGE-REMEDIATION | `docker build --pull --no-cache --target operator-console -t engram:prc-operator-console .`; `docker scout cves --platform linux/amd64 --only-severity critical,high --exit-code --format sarif engram:prc-operator-console`; `pwsh ./scripts/production-gates/run-image-runtime-matrix.ps1 -Image engram:prc-operator-console -Role operator` | `.agent/reports/evidence/production-ready/image-remediation/operator-console/` | Pinned distroless Node.js 22 Debian 13 runtime, image node entrypoint plus `.output/server/index.mjs` CMD, shared static JSON healthcheck that accepts only parsed semantic ready from proxied `/api/ready`, and clean locked dependency graph; scan count exactly zero; UID 65532, nonroot file ownership, same capability/read-only/secret rules, only port 3000, exact `NUXT_OPERATOR_API_TARGET` pointing at the recorded backend; root HTML/assets plus proxied `/api/health` and `/api/ready` pass before/after restart, while stale/missing/wrong target, unreachable backend, timeout, malformed/error body, and root-only HTTP 200 keep Docker health non-healthy; canonical runtime/service/image name is `operator-console`, never stale `operator-web`. | +| PostgreSQL image / IMAGE-REMEDIATION | `docker build --pull --no-cache -f deploy/postgres/Dockerfile -t engram:prc-postgres .`; `docker scout cves --platform linux/amd64 --only-severity critical,high --exit-code --format sarif engram:prc-postgres`; `go test -tags=critical ./tests/critical/runtime -run '^TestPostgresImageContract$' -count=1` | `.agent/reports/evidence/production-ready/image-remediation/postgres/` | Project-owned Wolfi runtime pins its base digest, `postgresql-17=17.10-r1`, and `pgvector-17=0.8.1-r0`; image sets `LANG=C.UTF-8` and `LC_ALL=C.UTF-8`, while a negative fixture proves `en_US.UTF-8` fails before readiness; exact image-ID scan is zero HIGH/CRITICAL without exception input; runtime is UID/GID `70:70`, read-only root, cap-drop ALL, and `no-new-privileges`, with owned tmpfs only for `/tmp` and `/var/run/postgresql`; `/var/lib/postgresql/data` is an owned persistent named volume, tmpfs-only PGDATA is a required data-loss negative, and stop/remove/new-container recreation on the same volume must preserve `SHOW server_version` `17.10`, `CREATE EXTENSION vector`, extversion `0.8.1`, migrations, vector/application markers, backup/restore, health, and zero residual probe containers/volumes. | +| Three-image identity manifest | `pwsh ./scripts/production-gates/build-and-scan-images.ps1 -ServerTag engram:prc-server -OperatorTag engram:prc-operator-console -PostgresTag engram:prc-postgres -Platform linux/amd64 -ArtifactRoot .agent/reports/evidence/production-ready/image-remediation -NoAllowlist` | `.agent/reports/evidence/production-ready/image-remediation/final-image-set.json` | Manifest records Dockerfile SHA, pinned base/source digests, exact built image IDs, SARIF SHA256, zero counts, runtime proof, and later published digests. A tag without matching ID/digest provenance is not scannable release evidence. | +| Secret-negative matrix | `gitleaks detect --source . --redact --report-format json --report-path .agent/reports/evidence/production-ready/secrets/repository.json`; `pwsh ./scripts/production-gates/run-secret-negative-matrix.ps1 -ServerImage engram:prc-server -OperatorImage engram:prc-operator-console` | `.agent/reports/evidence/production-ready/secrets/` | No secret in repository, generated console/docs/static assets, image filesystem/history/env, application/browser logs, URLs/query strings, cookies, MCP payloads, or OTLP payloads. Any unclassified hit blocks PR-5. | + +Critical-path coverage is not satisfied by the aggregate alone. `assert-coverage.ps1` enforces the exact immutable floors below plus an evidence row for every named behavior; a missing package, missing profile, unmapped behavior, or attempted threshold reduction is fatal even when overall coverage is at least 60%: + +| Surface | Statement floor | Required auditable behavior mapping | +| --- | ---: | --- | +| overall repository | 60% | statement-weighted aggregate over the complete `./...` profile | +| `internal/handlers/loom` | 70% | cancellation, empty output, environment, stderr, timeout, supported-platform behavior | +| `cmd/engram` | 10% | direct and wrapper initialize, fail-closed keycard, project identity propagation, version mismatch, transport-close error, restart/new-process recall | +| `cmd/engram-server` | 10% | invalid config exit, migration failure, DB-unavailable readiness, cmux HTTP+gRPC serving, clean shutdown | +| `internal/update` | 20% | read-only discovery, externally-managed refusal, archive/provenance verification, interrupted staging/rollback | +| `internal/worker` | 55% | first-admin capability, auth deny/revoke, route normalization, readiness, update refusal, audit failure | +| `internal/mcp` | 55% | initialize, store, recall, context/project boundary, typed invalid input, transport failure | +| `internal/db/gorm` | 55% | migration apply/rollback, empty aggregate, transaction conflict, durable audit, restore/rollback conflict, project/principal isolation | + +The historical `internal/module` 75% and `internal/handlers/engramcore` 60% floors also remain mandatory. Raw per-package percentages and the exact test-to-behavior map are stored under `.agent/reports/evidence/production-ready/coverage/critical-path/`. A self-test mutates each configured floor downward one at a time and requires `assert-coverage.ps1` to reject it; config values may raise but never lower these plan minima. + +### 4.5 Retention Matrix + +| Case | Exact command / setup | Expected result | Artifact | +| --- | --- | --- | --- | +| Default project retention | `pwsh ./scripts/production-gates/run-db-suite.ps1 -Package ./internal/worker/reaper -Run 'TestReaper_PurgesExpired\|TestReaper_PreservesUnexpired' -FreshDatabase -Repeat 3` | Older-than-30-day soft-deleted project is purged; 1-day row remains; project boundary is preserved. | `.agent/reports/evidence/production-ready/retention/project-default/` | +| Configured + invalid project retention | Same helper with `-Run 'TestReaper_RespectsRetentionEnvVar\|TestReaper_InvalidRetentionFallsBack'` | `1` day is honored; invalid/negative input fails safe to documented default, never purge-all. | `.agent/reports/evidence/production-ready/retention/project-config/` | +| Disabled transcript retention | `pwsh ./scripts/production-gates/run-db-suite.ps1 -Package ./internal/db/gorm -Run 'TestTranscriptStore_PruneUnprocessedOlderThan_ZeroDays' -FreshDatabase -Repeat 3` | `0` and negative values delete zero unprocessed rows. | `.agent/reports/evidence/production-ready/retention/transcript-disabled/` | +| Expired/not-expired transcript and audit records | `pwsh ./scripts/production-gates/run-db-suite.ps1 -Package './internal/db/gorm ./internal/worker' -Run 'TranscriptStore\|Retention_' -FreshDatabase -Repeat 3` | Only expired rows are deleted; configured scope and audit count are recorded; no cross-principal/project deletion. | `.agent/reports/evidence/production-ready/retention/transcript-audit/` | +| Restart/retry/idempotency/concurrency | `pwsh ./scripts/production-gates/run-db-suite.ps1 -Package './internal/worker/reaper ./internal/worker' -Run 'Reaper\|Retention' -FreshDatabase -Repeat 10 -FailOnUnexpectedSkip -Race` plus `pwsh ./scripts/production-gates/run-critical-suite.ps1 -Config .agent/critical-suite.config.yaml -Run Retention` | Repeated/concurrent cleanup is idempotent, no double-delete/data race, restart resumes safely, failure is logged and retried without boundary drift; both transcripts are JSON-parsed and cleanup-proved. | `.agent/reports/evidence/production-ready/retention/concurrency/` | +| Retention output secrecy | `pwsh ./scripts/production-gates/run-secret-negative-matrix.ps1 -ArtifactRoot .agent/reports/evidence/production-ready/retention` | Audit/log output contains IDs/counts and reason, not plaintext memory, keycard, token, DSN, or secret payload. | `.agent/reports/evidence/production-ready/retention/secret-negative.json` | + +### 4.6 Diagnostic Matrix + +All rows are executed by `pwsh ./scripts/production-smoke/customer/run-diagnostic-matrix.ps1 -Case -ArtifactRoot .agent/reports/evidence/production-ready/diagnostics`. Each row must record process exit, `/health`, `/api/ready`, stable log key, metric, UI result where applicable, timeout, and secret-negative result. + +| Case | Required observable contract | +| --- | --- | +| `startup-invalid-config` | Process exits non-zero before serving; log names invalid field without value/secret. | +| `mcp-transport-close` | Wrapper and direct client return bounded non-zero initialize/tool error with client/server versions and transport stage; no hang or stale success. | +| `postgres-unavailable` | `/health` reports process liveness, `/api/ready` is non-ready, DB error metric/log is present, recovery returns ready without restart when supported. | +| `migration-failure` | Server exits non-zero before mutation/service readiness; migration ID and safe recovery action are logged. | +| `auth-missing-invalid-revoked` | 401/403 as appropriate, auth failure metric/log, revoked keycard never reused, no credential in response/log. | +| `auth-bootstrap-attacker-replay` | Missing/invalid/replayed/revoked bootstrap capability fails before bcrypt/mutation across two server processes and restart; only the operator-controlled request may create the first admin; logs/HTTP/browser/OTLP contain no capability. | +| `worker-indexing-failure` | `codebase_index/status` exposes failed/degraded state with run ID; worker/index metric/log exists; normal memory paths remain honest. | +| `otlp-exporter-unavailable-backpressured` | Application remains within declared readiness policy, exporter errors are bounded/rate-limited, no request hang, no payload secret. | +| `client-version-mismatch` | Unsupported pair fails before mutation with both versions and upgrade action; supported pair converges. | +| `wrapper-download-failure` | Non-zero fail-closed result; no stale or partially downloaded binary is executed; previous valid binary remains intact. | +| `corrupt-state-or-config` | No silent reset; actionable error identifies artifact class and recovery path without dumping contents. | +| `operator-api-browser-failure` | Console renders explicit unavailable/error state, not zero/fake data; console/network log captured; retry/recovery works. | + +### 4.7 Compatibility and Cross-Agent/Workstation Matrix + +M5 and M7 are separate compatibility epochs. M5 uses candidate `v6.43.0-rc.1` against previous supported `v6.42.0`. After M5 publishes, its exact release becomes the mandatory predecessor for M6/M7. The final identity is read from `.agent/reports/evidence/production-ready/release/final-version.json`; that artifact is invalid unless it names `final_candidate_version`, `core_safe_point_version`, `release_note_path`, server/operator image tags and digests, plugin version, and rollback predecessor. M5 evidence cannot be reused as final evidence. + +| Epoch / producer -> consumer | Exact command | Expected result / artifact | +| --- | --- | --- | +| M5 candidate -> M5 candidate | `pwsh ./scripts/production-smoke/customer/run-client-compatibility.ps1 -ClientVersion v6.43.0-rc.1 -ServerVersion v6.43.0-rc.1` | initialize, store, new-process recall, automatic session-start injection; `.agent/reports/evidence/production-ready/compat/core-candidate-to-core-candidate/`. | +| M5 v6.42.0 -> M5 candidate | same helper with `-ClientVersion v6.42.0 -ServerVersion v6.43.0-rc.1` | Supported behavior or pre-mutation explicit unsupported-version error; `.agent/reports/evidence/production-ready/compat/v6.42.0-to-core-candidate/`. | +| M5 candidate -> v6.42.0 | same helper with `-ClientVersion v6.43.0-rc.1 -ServerVersion v6.42.0` | Supported behavior or pre-mutation explicit unsupported-version error; rollback path remains available; `.agent/reports/evidence/production-ready/compat/core-candidate-to-v6.42.0/`. | +| M7 final -> final | `$r=ConvertFrom-Json (Get-Content .agent/reports/evidence/production-ready/release/final-version.json -Raw); pwsh ./scripts/production-smoke/customer/run-client-compatibility.ps1 -ClientVersion $r.final_candidate_version -ServerVersion $r.final_candidate_version` | Full customer spine; `.agent/reports/evidence/production-ready/compat/final-candidate-to-final-candidate/`. | +| M7 M5 release -> final | same loaded `$r`; helper with `-ClientVersion $r.core_safe_point_version -ServerVersion $r.final_candidate_version` | Upgrade or explicit pre-mutation compatibility result; `.agent/reports/evidence/production-ready/compat/core-safe-point-to-final-candidate/`. | +| M7 final -> M5 release | same loaded `$r`; helper with `-ClientVersion $r.final_candidate_version -ServerVersion $r.core_safe_point_version` | Rollback/mixed-version safety; `.agent/reports/evidence/production-ready/compat/final-candidate-to-core-safe-point/`. | +| M7 separately supported older pair | same loaded `$r`; helper with the support-policy version recorded in `final-version.json` | Required only if support policy retains an older pair; otherwise an explicit policy artifact explains removal before mutation; `.agent/reports/evidence/production-ready/compat/final-supported-older-pair/`. | +| Claude Code workstation A -> Codex workstation B | `pwsh ./scripts/production-smoke/customer/run-cross-agent.ps1 -Producer claude -Consumer codex -ProducerIdentity workstation-a -ConsumerIdentity workstation-b` | Shared marker visible by explicit recall + session-start injection; private marker denied; artifact `cross-agent/claude-to-codex/`. | +| Codex workstation B -> Claude Code workstation A | same helper with producer/consumer reversed | Same allow/deny contract; artifact `cross-agent/codex-to-claude/`. | +| OpenClaw -> Claude/Codex | same helper with `-Producer openclaw` for each supported consumer | Plugin build/test plus initialize/store/recall and scope boundary pass; artifacts under `cross-agent/openclaw-*`. | +| Hermes | ROADMAP-RECONCILIATION records supported route and executable command, or an operator-approved deferral with readiness effect | Until one branch exists, Hermes is `BLOCKED` and final READY is forbidden. | + +### 4.8 Browser Matrix + +OC-INTEGRATION owns exact new tests `apps/operator-console/tests/browser/production-fresh-profile.spec.ts`, `production-responsive.spec.ts`, `production-accessibility.spec.ts`, `production-network-secrets.spec.ts`, and `production-auth-bootstrap.spec.ts`. Run `npm --prefix apps/operator-console run test:browser -- tests/browser/production-fresh-profile.spec.ts tests/browser/production-responsive.spec.ts tests/browser/production-accessibility.spec.ts tests/browser/production-network-secrets.spec.ts tests/browser/production-auth-bootstrap.spec.ts` against the live candidate. + +Required evidence: empty browser profile and fresh session; desktop `1440x900`, tablet `768x1024`, mobile `375x812`; keyboard-only primary flow; accessible names/focus/contrast/landmarks; zero unclassified console/page errors; every API request/response status captured; no keycard/token/secret in DOM, storage, URL, cookie, console, network body, screenshot, or trace; first-admin issue/use/revoke and unavailable/error/recovery states use real backend data. + +## 5. Dependency-Ordered Execution + +### M0 — Preserve and Establish Truth + +1. Freeze the dirty primary checkout as preserve-only evidence; record its diff and the legacy launcher/OC worktree inventory. +2. Create the clean integration and RELEASE-GATES worktrees from `origin/main`; root alone advances integration. +3. Commit PLAN-GOVERNANCE first, then finish RELEASE-GATES from exact base `2b3ef3e33bd19e630f8f67d07a9e2521cb98537f`. Its checker must bind the final plan hash/state; run every prior false-green mutation; prove exact HTTP-200 liveness/readiness semantics; three distinct non-default process-local credentials with actual container injection, redaction and cleanup; reversed-epoch/non-current/missing-evidence/wrong-base negatives plus descendant-base positive; and the OpenClaw clean-worktree matrix self-test plus current missing-lock FAIL. Commit, independent checker, post-run review, and integration are mandatory before any other checker verdict becomes mergeable. +4. DB-BULKOPS `68b2ce5835c7c6efdf1c68da9eedcb8d9c3837ef` is rejected. Dispatch DB-BULKOPS-BEHAVIORAL-EDGE-REWORK from that exact base on only its four paths; no other successor starts from the rejected head. After the rework checker/post-review/integration, rebase DB-GOVERNANCE and MCP-STRUCTURED-INPUT-VALIDATION independently to the exact accepted composite; only then rebase CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK after DB-GOVERNANCE. INGEST-DOC-SNAPSHOT-DEMOLITION also waits for the accepted composite and lands before DURABLE-AUDIT-BOUNDARIES. The MCP lane preserves the accepted bulk/candidate invariants while fixing the remaining route-specific mutation class; any newly inventoried handler is a plan/state amendment, not an implicit scope expansion. Final DB acceptance records fresh DB/schema identity, every exit code, unexpected SKIPs, numeric coverage floors, repetitions, raw streams, connection budget, zero post-test sessions, cleanup proof, and actual-diff ownership. +5. Create the remaining exact-scope worktrees above from `origin/main` with recorded boundaries; stacked rework lanes use the exact reviewed staging integration SHA required by their ownership epoch rather than silently editing a predecessor branch. +6. Set the production UI decision: `apps/operator-console` is canonical. `apps/operator-web` and `ui` are legacy/migration-only until consumers are removed; neither is a second production truth source. +7. Repair the S4B contract before implementation. The canonical subsystem returns bounded `HintProposal` values; S3 owns fusion/queue/rendering. Remove operator-console contamination, regenerate checklist/tasks, validate, and independently challenge. +8. Correct roadmap containers: operator console is not ENG-V7-S4B; backend S4B remains open; stale labels are reconciled; BOOK and all North Star obligations remain explicit. +9. Reconcile seq74 only through `C:\Users\btf\.codex\plugins\cache\nvmd-ai-kit\nvmd-platform\2.85.3\skills\session\scripts\state-ops.cjs`. Current truthful branch already executed: `set-handoff-status --role developer --actor pm --status stood_down --progress-note "Handoff 74 missed OMP pickup and is superseded by the operator-authorized native isolated-worktree maker/checker production-ready lane; preserved as missed-pickup history."`. Readback commands are `check-handoff-pickup --role developer --sla-ms 600000`, `validate --all`, and exact assignment/front-door/developer-oracle reads. If OMP work is later queued, issue a new counted handoff and require `ack-role-handoff --role developer --engine omp` before any pickup claim. +10. Record the current vulnerability graph and toolchain/runtime/image versions as the security baseline. Record GE-003 as the project-identity architecture contract: namespace continuity and collision safety are mandatory, while tenant/private authorization remains keycard/principal based. +11. Update the evidence register first, then render the Markdown register and HTML to the same status. No active/pending slice or checker/rework may lack a row. + +M0 exit: preservation proof exists, every active writer has exclusive paths, the DB-BULKOPS dirty overlay is preserved and every path has a non-overlapping owner before further edit, canonical UI/S4B contracts are decided, RELEASE-GATES is committed and independently proves false-green, cleanup, coverage-floor, dev-stand, ledger, and actual-diff negatives, seq74 is classified, DB-BULKOPS is truthfully marked HIGH/not accepted, and the plan checker finds no hidden overlap or omitted blocker. + +### M1 — Remove Immediate Release Blockers in Parallel + +With the RELEASE-GATES foundation integrated, execute M1 in ownership-safe waves: + +1. In parallel after foundation acceptance: DB-BULKOPS-BEHAVIORAL-EDGE-REWORK, DB-AUTH, DB-CRYSTALLIZATION, DB-EMBEDDING-STATS, DB-REAPER, SECURITY-TOOLCHAIN, SECURITY-PROJECT-IDENTITY, UPDATE-LIFECYCLE, DOCUMENT-INGEST-PUBLIC-TRUTH, and the read-only DEMOLITION-SKIP/T007 classifications. DB-GOVERNANCE is intentionally not in this wave because it must rebase onto the accepted behavioral-edge composite. +2. Integrate the accepted behavioral-edge composite, then rebase and run DB-GOVERNANCE. Rebase CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK only after both exact integrations. In parallel from the exact accepted behavioral-edge integration SHA, run INGEST-DOC-SNAPSHOT-DEMOLITION and MCP-STRUCTURED-INPUT-VALIDATION; the former must land before DURABLE-AUDIT-BOUNDARIES takes `facade.go`, while the latter inventories and validates the remaining route-specific public mutation boundaries without globally changing read/filter compatibility. After DB-AUTH, run AUTH-BOOTSTRAP-SECURITY. DURABLE-AUDIT-BOUNDARIES waits for ingest demolition, candidate-review rollback, and auth bootstrap. +3. Run DB-RULES-ISOLATION only after the preceding diagnostic functional lanes integrate so its shared-DB order proof is meaningful. T007 may edit only its exact test after classification; any production fix requires a prior ledger amendment. +4. Run IMAGE-REMEDIATION after RELEASE-GATES and SECURITY-TOOLCHAIN. After SECURITY-PROJECT-IDENTITY integrates, run OPENCLAW-RELEASE and require its clean detached-worktree matrix plus npm publish/readback before integration/release. Then transfer exact compose/package epochs to DEPLOYMENT-ROLLBACK and OC-INTEGRATION. Run RECOVERY-DATA, LAUNCHER-FIRST-RUN, and CORE-PUBLIC-TRUTH through their declared dependencies. LAUNCHER waits for accepted GE-003 identity vectors; deployment and OC bootstrap proof wait for accepted AUTH-BOOTSTRAP-SECURITY; every later Dockerfile/compose/dependency edit triggers the three-image rebuild and zero-finding scan again. +5. As functional lanes integrate, run the disjoint COVERAGE-WORKER/MCP/GORM/LOOM test-only maker/checker cycles until the exact full profile reaches the goal without weakening thresholds. A slice enters integration only after exact gate evidence, independent checker PASS, separate post-run code review PASS, and refreshed ownership/register artifacts. + +M1 integration gates: + +```powershell +go version +go build ./... +go vet ./... + +$integrationSha = (git rev-parse --verify HEAD).Trim() +$runId = "m1-full-race-$($integrationSha.Substring(0, 12))" +$artifactRoot = '.agent/reports/evidence/production-ready/release-gates-foundation' +pwsh ./scripts/production-gates/run-db-suite.ps1 -Package ./... -FreshDatabase -Repeat 3 -FailOnUnexpectedSkip -Race -CoveragePolicy Full -ArtifactRoot $artifactRoot -RunId $runId +if ($LASTEXITCODE -ne 0) { throw 'canonical M1 full fresh-DB/race gate failed' } +$runDirectory = Join-Path $artifactRoot $runId +$summary = Get-Content -Raw -LiteralPath (Join-Path $runDirectory 'summary.json') | ConvertFrom-Json +if ($summary.verdict -ne 'PASS' -or $summary.counts.requested_repeats -ne 3 -or $summary.counts.passed_repeats -ne 3 -or -not $summary.race -or $summary.coverage_policy -ne 'Full') { throw 'canonical M1 summary contract failed' } +1..3 | ForEach-Object { + $repeatDirectory = Join-Path $runDirectory ('repeat-{0:D2}' -f $_) + @('go-test-summary.json','coverage.out','coverage-summary.json','repeat-summary.json','cleanup/cleanup.json') | ForEach-Object { + if (-not (Test-Path -LiteralPath (Join-Path $repeatDirectory $_) -PathType Leaf)) { throw "missing M1 artifact: $_" } + } + $repeat = Get-Content -Raw -LiteralPath (Join-Path $repeatDirectory 'repeat-summary.json') | ConvertFrom-Json + $cleanup = Get-Content -Raw -LiteralPath (Join-Path $repeatDirectory 'cleanup/cleanup.json') | ConvertFrom-Json + if ($repeat.verdict -ne 'PASS' -or $repeat.go_test_exit -ne 0 -or $repeat.json_parser_exit -ne 0 -or $repeat.coverage_exit -ne 0 -or $repeat.cleanup_exit -ne 0 -or $repeat.sessions_after -ne 0 -or $cleanup.verdict -ne 'PASS' -or $cleanup.remaining_database_count -ne 0) { throw "M1 repeat $_ did not prove JSON/coverage/session/cleanup closure" } +} + +pwsh ./scripts/production-gates/run-critical-suite.ps1 -Config .agent/critical-suite.config.yaml +pwsh ./scripts/production-gates/run-dev-stand.ps1 -Config .agent/dev-stand.config.yaml +$Plan = '.agent/plans/2026-07-10-engram-production-ready-master-plan.md' +$State = '.agent/plans/2026-07-10-engram-production-ready-ownership-state.json' +$PlanSha = (Get-FileHash -LiteralPath $Plan -Algorithm SHA256).Hash +pwsh ./scripts/production-gates/assert-plan-path-ownership.ps1 -Mode Ledger -Plan $Plan -ExpectedPlanSha256 $PlanSha -State $State -Artifact .agent/reports/evidence/production-ready/ownership/path-ledger.json +pwsh ./scripts/production-gates/assert-plan-path-ownership.ps1 -Mode Diff -Slice DB-BULKOPS-BEHAVIORAL-EDGE-REWORK -Base 68b2ce5835c7c6efdf1c68da9eedcb8d9c3837ef -Head '' -EvidenceNamespace '.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/**' -ReportNamespace .agent/reports/2026-07-10-db-bulkops-behavioral-edge-rework-maker.md -Plan $Plan -ExpectedPlanSha256 $PlanSha -State $State -Artifact .agent/reports/evidence/production-ready/ownership/db-bulkops-behavioral-edge-rework.json +pwsh ./scripts/production-smoke/customer/run-auth-bootstrap-adversary.ps1 -Processes 2 -Repeat 10 -ArtifactRoot .agent/reports/evidence/production-ready/auth-bootstrap +node --test plugin/engram/scripts/*.test.js plugin/engram/hooks/*.test.js +pwsh ./scripts/production-gates/run-node-matrix.ps1 -Surface openclaw -Audit +govulncheck -test ./... +npm --prefix apps/operator-console ci +npm --prefix apps/operator-console audit --audit-level=high +gitleaks detect --source . --redact --report-format json --report-path .agent/reports/evidence/production-ready/secrets/repository.json +pwsh ./scripts/production-gates/build-and-scan-images.ps1 -ServerTag engram:prc-server -OperatorTag engram:prc-operator-console -PostgresTag engram:prc-postgres -Platform linux/amd64 -ArtifactRoot .agent/reports/evidence/production-ready/image-remediation -NoAllowlist +``` + +The command block becomes executable authority only after the named RELEASE-GATES and IMAGE-REMEDIATION scripts are committed, independently checked, post-reviewed, and integrated; until then it is their exact acceptance target, not evidence of closure. Run each command as an independently captured process; no trailing success may mask an earlier failure. M1 exit: all 27 baseline failures have one closing artifact; overall is at least 60%, loom at least 70%, and critical-path floors are exactly 10/10/20/55/55/55; no unexpected critical/DB SKIP exists; canonical repeat-3 full fresh-DB/race JSON/coverage/cleanup evidence is green; candidate-review immediate rollback and later-conflict semantics pass for every action; bootstrap attacker/replay/restart negatives pass; auth plus bulk promote/delete/supersede audits are durable; exact server/operator/PostgreSQL tags have zero HIGH/CRITICAL and a matching image-set manifest; server hardening proves restart-safe `HOME=/var/lib/engram` storage ownership plus semantic ready-only health under read-only/cap-drop/no-new-privileges policy; operator hardening proves exact `NUXT_OPERATOR_API_TARGET` and proxied backend readiness rather than root-only HTTP 200; PostgreSQL hardening proves UID/GID `70:70`, read-only/cap-drop/no-new-privileges, persistent PGDATA across container recreation, and rejection of tmpfs-only data; actual-diff ownership is green for every slice; and the thin customer spine runs after every integrated commit. + +### M2 — Build the Production Proof Substrate + +Complete DEPLOYMENT-ROLLBACK and RECOVERY-DATA, then run OBSERVABILITY-OTLP, PRIVACY-BOUNDARIES, and CRITICAL-HARNESS through independent maker/checker cycles. CORE-PUBLIC-TRUTH finalizes M5 normative instructions only from commands that have actually passed. The required diagnostic matrix includes PostgreSQL unavailable/recovering, migration failure, OTLP receiver unavailable/backpressured, invalid/missing keycard, revoked keycard reuse, corrupt config, version skew, wrapper download failure, and operator API/browser failures; every case needs an actionable non-secret log or UI result. + +M2 exit: a clean disposable stand can be created deterministically; readiness is dependency-aware; images and rollback targets are immutable; DB migration/backup/restore is executable; telemetry is observable; boundary negatives are automated; unexpected skips, overall below 60%, loom below 70%, or any critical-path package below 10/10/20/55/55/55 fail the gate. + +### M3 — First-Run and Operator Product Truth in Parallel + +1. LAUNCHER-FIRST-RUN reconciles the preserved primary-checkout launcher work with `engram-launcher-version-skew-fix` onto a clean current base and implements fail-closed worker-keycard validation before any dial/spawn. +2. OC-INTEGRATION inventories all accepted and dirty A-D/residual worktrees, separates clean commits from uncommitted residue, and builds one coherent `apps/operator-console` current-base integration CR without reviving stale APIs. +3. CRITICAL-HARNESS executes the thin customer spine after each integration: clean home -> first admin/keycard -> wrapper/direct initialize -> unique store -> new process recall -> actual session-start injection -> restart recall. +4. CORE-PUBLIC-TRUTH is reconciled only after the shipped commands and selected UI pass that spine. + +M3 exit: a clean workstation route works through wrapper and direct binary; an operator credential is rejected locally; the canonical operator console issues/uses/revokes keycards and reports real server state with browser/readback proof; the public path reproduces the result verbatim. + +### M4 — Complete the Canonical v7 Runtime Loop + +1. S4B-CONTRACT is already validated and challenged before code starts. +2. V7-S4B-BACKEND implements the missing CandidateProposer under the canonical `HintProposal` contract. +3. V7-CORE-CALLPATH independently classifies AttentionEventBus/HintQueue as live-required, stale, dormant, or must-build and closes only the architecture-required call path. S4B is not used as a justification to extend unrelated substrate. +4. V7-RUNTIME-WIRING closes the real CandidateProposer registration/read path and preserves S3 ownership of fusion, queueing, and rendering. +5. The full loop runs under the canonical flags: + - master: `ENGRAM_V7_PLUG_ENABLED`; + - subsystem: `ENGRAM_V7_S1_STATE`, `ENGRAM_V7_S2_METAMEM`, `ENGRAM_V7_S3_AMBIENT`, `ENGRAM_V7_S4A_DIRECTIVES_CAPTURE`, `ENGRAM_V7_S4B_DIRECTIVES_SURFACING`, `ENGRAM_V7_S5_TELEMETRY`, `ENGRAM_V7_S6_OUTCOME`. +6. V7-TELEMETRY-WIRING replaces empty dependencies with a production `MetricSource` and proves `hint_precision` readiness at `n>=30`, `accepted_hint_action` readiness at `n>=20`, honest below-threshold/no-sample states, rolling interruption burden, and state freshness without fabricated zeros. +7. Run a deterministic CandidateProposer workload with p95 inside the caller's 200ms budget, plus flag-off, single-flag, master-on, restart, load, ordinary-request must-not-trigger, and failure/degradation matrices. + +M4 exit: the loop is production-called rather than package-only, produces bounded auditable hints, survives restart, and exposes truthful metrics. + +### M5 — Activation, Customer-Mode Proof, and Safe-Point Release + +Run the refreshed production playbook against a clean disposable deployment: + +1. install/build and version match; +2. health/readiness and migration startup; +3. operator-controlled one-time first-admin bootstrap, attacker/replay/restart negatives, then keycard/auth paths and least privilege; +4. store memory in one session; +5. start a fresh session and prove retrieval plus automatic injection through the shipped wrapper; +6. direct binary parity; +7. operator-console API and browser readback; +8. restart with persistence; +9. upgrade from prior release with data retained; +10. backup, restore, and rollback drill; +11. failure/degraded dependency behavior and observable diagnostics. +12. two distinct workstation/principal identities share only data allowed by the explicit scope contract and cannot cross private boundaries; +13. both Claude Code and Codex supported client routes perform initialize, store, new-process recall, and session-start injection; +14. compatibility covers current-client/current-server, previous-supported-client/current-server, and current-client/previous-supported-server, or fails before mutation with a documented safe version error; +15. keycard one-time display, revoke and denied reuse, retention expiry, deletion, restore target-not-empty refusal, and destructive cross-scope negatives behave safely; +16. auth setup plus bulk promote/delete/supersede audit fault injection proves same-transaction or durable-outbox semantics, with no falsely complete unaudited success and idempotent pending/retry/readback; +17. candidate-review promote/preserve/reject/suppress/supersede snapshots contain atomic `Before` and `After`, immediately roll back, and preserve a later committed candidate through explicit conflict; +18. all three exact release images run under their declared hardened policies; the server sets `HOME=/var/lib/engram`, mounts persistent writable storage there as UID/GID `65532:65532` mode `0700`, survives restart, and never becomes Docker healthy with absent/unowned/unwritable storage, an unowned tmpfs, initialization failure, or any `/api/ready` response other than exact `status=ready`; intentional liveness `/health` HTTP 200 is not used as readiness. +19. the operator uses exact `NUXT_OPERATOR_API_TARGET`; root HTML/assets and proxied `/api/health` plus `/api/ready` reach the recorded server before/after restart, while the stale variable, default `unleashed.lan`, wrong backend, timeout, and root-only HTTP 200 all fail. +20. PostgreSQL runs as UID/GID `70:70` under read-only/cap-drop/no-new-privileges policy, uses tmpfs only for ephemeral runtime paths, rejects tmpfs-only PGDATA, and preserves version, pgvector, migrations, and retained markers after container removal and recreation on the same owned persistent volume. + +No deviation, UNKNOWN, or in-scope roadmap item may be converted to READY by PM wording. A scope deferral that affects the active goal requires an explicit operator amendment to the goal contract. + +After the complete customer spine, security/data/recovery/observability gates, critical suite, code review, and release-git checks pass, cut the first safe-point release before beginning the large remaining North Star program. Immediately rerun clean-install, new-process recall/injection, restart, upgrade, rollback, and browser readback against the published artifacts. + +M5 exit: the core safe-point verdict is `PRODUCT_WORKS`; the release is published and its post-release proof passes. The overall goal remains ACTIVE while M6 architecture obligations are still open; this milestone is not `VERIFIED READY` and may still list those named open obligations. + +### M6 — Dispatchable North Star Contract and Implementation DAG + +M6 starts from the published, post-release-proved M5 commit. It does not authorize any product-source edit from prose. + +1. Dispatch in parallel the six artifact-only contract makers in Section 4: NORTHSTAR-CI-A-CONTRACTS, NORTHSTAR-BOOK-CONTRACTS, NORTHSTAR-MEM-CONTRACTS, NORTHSTAR-EFFECTIVENESS-CONTRACTS, and NORTHSTAR-SETTINGS-CONTRACTS; NORTHSTAR-CI-B-CONTRACTS may draft in parallel but cannot finalize until CI-A contract acceptance fixes its dependency boundary. +2. Each maker may edit only the exact SpecKit files in its ownership row. It runs the exact `$nvmd-platform:nvmd-validate ` invocation and requires validator `PASS`, records the validator artifact in its declared evidence root, then stops for an independent `$nvmd-platform:challenging-plans ` checker. That checker emits exactly one of `GO`, `REVISE`, or `RETHINK`; only `GO` advances. A separate artifact-diff/post-run review uses `PASS`, `PASS_WITH_CONCERNS`, or `FAIL`; any concern touching scope, ownership, architecture, acceptance, licensing, or PR-0..PR-8 is non-mergeable. + +| Contract lane | Independent checker ownership / exact artifact | Separate post-review artifact | +| --- | --- | --- | +| NORTHSTAR-CI-A-CONTRACTS | fresh checker-only native subagent; `.agent/reviews/2026-07-10-ci-a-dense-vector-plan-challenge.md` | `.agent/reviews/2026-07-10-ci-a-dense-vector-contract-post-review.md` | +| NORTHSTAR-CI-B-CONTRACTS | fresh checker-only native subagent; `.agent/reviews/2026-07-10-ci-b-graph-watcher-context-plan-challenge.md` | `.agent/reviews/2026-07-10-ci-b-graph-watcher-context-contract-post-review.md` | +| NORTHSTAR-BOOK-CONTRACTS | fresh checker-only native subagent; `.agent/reviews/2026-07-10-book-plan-challenge.md` | `.agent/reviews/2026-07-10-book-contract-post-review.md` | +| NORTHSTAR-MEM-CONTRACTS | fresh checker-only native subagent; `.agent/reviews/2026-07-10-mem-residual-plan-challenge.md` | `.agent/reviews/2026-07-10-mem-residual-contract-post-review.md` | +| NORTHSTAR-EFFECTIVENESS-CONTRACTS | fresh checker-only native subagent; `.agent/reviews/2026-07-10-effectiveness-residual-plan-challenge.md` | `.agent/reviews/2026-07-10-effectiveness-residual-contract-post-review.md` | +| NORTHSTAR-SETTINGS-CONTRACTS | fresh checker-only native subagent; `.agent/reviews/2026-07-10-settings-residual-plan-challenge.md` | `.agent/reviews/2026-07-10-settings-residual-contract-post-review.md` | + +3. `.agent/` is ignored, so every new contract lane uses an explicit durable staging protocol. The maker materializes a literal `$owned` array from its ownership row, runs `git add -f -- $owned`, and requires `git diff --cached --name-only` to equal that array exactly; no glob, directory-wide force-add, or unrelated ignored file is permitted. It commits the SpecKit files, records `git rev-parse HEAD`, and returns SHA256 for every owned artifact. The actual-diff ownership gate runs against that maker commit before challenge. +4. The independent challenging-plans checker binds its report to the maker commit SHA and exact plan SHA256. The post-review binds to the same commit/diff. Because both review paths are also under ignored `.agent/`, root copies only the exact challenge and post-review files named in the table, verifies the checker-returned SHA256 values, uses `git add -f -- `, and commits them as a root-owned evidence commit after the maker commit is cherry-picked. The register records maker commit, validator artifact/hash, challenge verdict/hash, post-review verdict/hash, evidence commit, and integration SHA. A worktree-local uncommitted artifact is never acceptance evidence. +5. Every accepted contract must contain: current-source live/stale/dormant/must-build classification; exact production and test files; CR-sized dependency order; flags/migrations/rollback; exact commands and raw artifact roots; customer-observable acceptance; clean-room/license constraints where applicable; checker depth; and a release boundary. No `TBD`, `UNKNOWN`, wildcard source ownership, or unresolved implementation-shaping question is allowed. +6. Root then amends this master ledger with the exact code/test paths for the first resulting CR, adds register rows, runs Ledger plus actual Diff ownership modes, and creates its implementation worktree from the current M6 integration SHA. Only that amended hash can authorize an implementation maker. Each implementation follows maker -> focused proof -> independent checker -> rework -> post-review -> integration -> full gate -> customer proof. +7. Dependency order is CI-A dense/vector before CI-B graph/watcher/context. BOOK is independent after its contract challenge `GO` and post-review `PASS`. MEM, effectiveness, and settings implementation CRs may run in parallel only when their accepted exact paths do not overlap; shared retrieval/config/worker paths are serialized through new epoch-transfer rows. +8. Every customer-visible CR receives release analysis. A shippable, independently useful CR is published and post-release proved before its dependent CR; semantically inseparable CRs may share one release only when the accepted plan records why. CI customer proof covers two worktrees and index/search/status; CI-B covers incremental watcher, graph, and context artifacts; BOOK covers licensed ingest/citation/provenance; MEM/effectiveness/settings cover the exact observable outcomes in their matrix rows. +9. A classification result of genuinely out-of-product is not a silent deferral: it needs an explicit operator amendment to the active goal and roadmap/readiness effect. Without that amendment, an in-scope must-build result remains blocking. +10. After the final M6 implementation integrates, root performs actual-diff release analysis and writes `.agent/reports/evidence/production-ready/release/final-version.json`. Root then amends FINAL-PUBLIC-TRUTH with the exact versioned release-note path and regenerates Ledger plus Diff ownership artifacts before that maker starts. + +M6 exit: all six contract lanes have validator `PASS`, independent challenging-plans `GO`, artifact/post-review `PASS`, exact force-added maker commits, hash-bound review evidence commits, and recorded integration SHAs; every in-scope implementation CR is shipped and customer-proved; exact source ownership/release evidence exists for each; `final_ready_version` and the M5 predecessor are materialized; no in-scope UNKNOWN remains. + +### M7 — Final Release Closure + +1. Verify `final-version.json` against the actual M6 diff, page in release rules, and amend FINAL-PUBLIC-TRUTH with the exact versioned release-note path before any public-file edit. Rebase that worktree to the exact M6 integration SHA and run its maker/checker/post-review cycle. +2. Run code review over every integrated diff and semantic conformance against PR-0..PR-8. +3. Run the curated critical suite, canonical repeat-3 full fresh-DB/race JSON/coverage/zero-session/cleanup gate, immutable 60/70 plus 10/10/20/55/55/55 coverage audit, and required dev stand. +4. Run the complete M7 compatibility matrix: final<->final, M5 release<->final, and any separately supported older pair. Run full customer emulation, cross-agent/workstation identity, bootstrap adversary/replay, candidate-review immediate/later-conflict rollback, auth plus bulk promote/delete/supersede audit faults, browser, security, data integrity, backup/restore, migration, observability, and rollback gates against the final candidate. Rebuild the server/operator/PostgreSQL images from the final source, require the exact image-set manifest, Wolfi locale/version/vector/restart/container-recreation proof with UID/GID-`70:70` persistent PGDATA and tmpfs-only rejection, shell-free direct/proxied `/api/ready` healthchecks that accept only parsed exact ready state while preserving `/health` liveness semantics, `HOME=/var/lib/engram` with persistent UID/GID `65532:65532` mode-`0700` storage under read-only rootfs, exact `NUXT_OPERATOR_API_TARGET` with proxied backend identity before/after restart, absent/unowned/unwritable-storage plus stale-target/init/error-body negative fixtures that never become healthy, and zero-HIGH/CRITICAL scans. +5. Re-run `node C:\Users\btf\.codex\plugins\cache\nvmd-ai-kit\nvmd-platform\2.85.3\skills\session\scripts\state-ops.cjs --root D:\Dev\engram check-handoff-pickup --role developer --sla-ms 600000` and `node C:\Users\btf\.codex\plugins\cache\nvmd-ai-kit\nvmd-platform\2.85.3\skills\session\scripts\state-ops.cjs --root D:\Dev\engram validate --all`; read `.agent/session-state/roles/_assignment.json`, `.agent/session-state/current.json`, and `.agent/session-state/roles/developer/current.json`; require no `OPEN`/unclassified counter and preserve `DID_NOT_PICK_UP` history truthfully. +6. Classify every branch, PR, and worktree as merged, release-needed, parked with explicit owner, or blocked with preservation evidence. Require Ledger zero concurrent overlap plus per-slice actual Diff zero undeclared paths. +7. Verify local/remote tag consistency, publish the final version, server/operator/PostgreSQL images, and plugin, then rerun clean install, initialize, store, new-process recall/injection, restart, M5->final upgrade, final->M5 rollback, cross-agent proof, browser readback, image runtime/cleanup, and exact published-digest scans. Every image/plugin digest must match `final-version.json`; any HIGH/CRITICAL finding blocks release without allowlisting. +8. Update the JSON evidence register first, render the Markdown register and HTML from that exact state, and prove row/slice/worktree parity. +9. Run a fresh full production-ready check. Only `VERIFIED READY` may complete the goal; M5 `PRODUCT_WORKS` evidence alone is insufficient. + +## 6. Checker Protocol + +For each slice, the independent checker must answer: + +1. Does the implementation satisfy the named acceptance criteria on a clean current base? +2. Is the production call path wired and enabled under the documented flag/configuration? +3. Are wrong type, raw-vs-normalized, silent clamp, filtered-vs-full count, concurrency, failure, restart, and ordinary-request must-not-trigger edges covered where applicable? +4. Were any v5-demolished remnants used as contracts? +5. Are tests capable of false green through skips, shared state, order dependence, mock-only seams, or stale generated assets? +6. Are security, privacy, tenant/project boundaries, audit, and rollback behavior preserved? +7. Are docs and UI claims exactly supported by runtime evidence? +8. Is the branch clean, committed, and ready for post-run code review? +9. For bootstrap work, do missing/invalid/replayed/revoked capabilities fail before bcrypt and mutation, and did the checker run a two-process attacker-vs-operator schedule plus restart and secret-negative capture? +10. For audited mutations, did an injected audit-store failure prove same-transaction rollback or durable pending delivery, with no falsely complete unaudited response and idempotent retry? +11. For DB-BULKOPS and candidate-review rollback, did the two permanent lock/CAS regressions fail on the defective parent, did every candidate-review action persist atomic `Before` plus `After`, and did immediate rollback plus a later candidate mutation prove restore-or-explicit-conflict without data loss? +12. For RELEASE-GATES, did the checker prove every prior mutation plus blanket/empty skip rejection, truthful early-failure finalization, repeat-3 CI/config parity, canonical full fresh-DB/race JSON/coverage/zero-session/cleanup proof, critical/dev-stand execution, exact liveness/readiness HTTP contracts, three distinct runtime-injected/redacted credentials with unconditional cleanup, plan-hash/state binding, reversed/non-current/missing-evidence/wrong-base negatives, descendant-base positive, OpenClaw node-matrix sequence/cleanup, and immutable 60/70 plus 10/10/20/55/55/55 floors? +13. For DB-BULKOPS-BEHAVIORAL-EDGE-REWORK, did wrong snapshot type and every lossy ID shape fail before mutation/audit, while valid integer arrays preserved exact behavior? +14. For INGEST-DOC-SNAPSHOT-DEMOLITION, is `ingest_doc` historical/read-only, non-executable in dry-run and commit, absent from durable-audit success claims, while live memory ingest still bypasses the facade and document-ingest public text matches metadata-only behavior? +15. For OPENCLAW-RELEASE, did a fresh detached worktree prove tracked/non-ignored lock v3, four-field version parity, dependency parity, exact node sequence, package contents, clean cleanup, publish, and npm readback after SECURITY-PROJECT-IDENTITY? +16. For MCP-STRUCTURED-INPUT-VALIDATION, did the maker inventory every public mutation/alias, use exact-number and present-vs-missing decoding only at mutation boundaries, align schema and handler behavior, preserve any named legacy read/filter compatibility, and prove malformed values cause zero write/audit/transition delta for all critical/high routes including concurrency and precision edges? +17. For contract-only M6 lanes, did `nvmd-validate` return `PASS`, challenging-plans return `GO`, artifact post-review return `PASS`, literal `git add -f` include only the row's ignored SpecKit files, and hash-bound review evidence reach the integration commit before any source ownership was requested? + +Implementation/artifact checker verdicts are `PASS`, `PASS_WITH_CONCERNS`, or `FAIL`; `PASS_WITH_CONCERNS` is not mergeable while any concern touches a PR-0..PR-8 criterion. Challenging-plans verdicts are separately and exclusively `GO`, `REVISE`, or `RETHINK`. + +## 7. Production-Ready Audit Evidence Pack + +The final report must contain: + +- goal and criteria mapping PR-0..PR-8; +- release commit/tag/image/plugin version identities; +- clean source/build/vet/unit/DB/race/critical results; +- Go/Node/container/secret security reports, toolchain/module/image versions, and security-review verdict; +- migration, backup, restore, rollback, restart, and upgrade transcripts; +- operator-controlled first-admin bootstrap attacker/replay/restart evidence and secret-free browser/network/log/OTLP artifacts; +- auth/bulk durable-audit fault-injection, pending/retry/readback, and no-false-success evidence; +- candidate-review promote/preserve/reject/suppress/supersede snapshot `Before`/`After`, immediate rollback, later-conflict, and atomic-failure evidence; +- wrapper/direct binary customer-flow evidence; +- fresh-session retrieval and automatic-injection proof across Claude Code and Codex, two workstation identities, revoke/reuse, and supported mixed-version pairs; +- operator API/browser/accessibility/console/network readback; +- named readiness/dependency/exporter/version-skew diagnostic matrix with secret-redaction proof; +- flag and failure matrices for v7 subsystems; +- architecture/roadmap reconciliation and v5 demolition classification; +- maker/checker/code-review artifacts for every slice; +- path-ledger duplicate/prefix artifact, per-slice actual `base..head` diff artifact, derived/legacy evidence namespace proof, ownership-transfer integration/rebase evidence, and exact one-owner mapping for all diagnostic failures; +- server/operator/PostgreSQL build provenance, pinned base/source digests, exact image IDs and published digests, zero-HIGH/CRITICAL SARIF, PostgreSQL locale/version/vector/restart proof, and zero residual container/volume evidence; +- M5 core-safe-point and M7 final-version identities, final-version manifest, distinct compatibility matrices, and exact final release-note path; +- validator/challenge/review artifacts plus exact implementation ownership for every M6 North Star contract; +- PR/branch/worktree inventory and preservation/cleanup state; +- seq74/control-plane classification plus final `state-ops validate --all` evidence; +- full production-ready-check verdict `VERIFIED READY`. + +## 8. Dispatch Order After Plan GO + +1. Independently challenge this exact revision-3 hash plus tracked ownership-state hash with challenging-plans. Until the verdict is `GO`, the plan remains HOLD for new broad implementation; already-running bounded work may finish but cannot integrate on stale plan authority. +2. Root records PLAN-GOVERNANCE, RELEASE-GATES base `2b3ef3e3`, rejected DB-BULKOPS head `68b2ce58` with exact checker artifact/hash and two HIGH findings, active behavioral-edge rework, completed ingest/OpenClaw and MCP structured-input classifications, MCP-STRUCTURED-INPUT-VALIDATION and OPENCLAW-RELEASE blockers, and all new pending slices in JSON first; it then verifies Markdown/HTML parity and reruns hash-bound Ledger validation. +3. Rework/check/review/integrate RELEASE-GATES first against every false-green, cleanup, coverage, runner, and actual-diff negative. The three new runners are not treated as available until their exact commit is accepted. +4. Run M1 wave 1 on exact disjoint paths. Rework rejected DB-BULKOPS first, then DB-GOVERNANCE and CANDIDATE-REVIEW in order; run ingest demolition before durable audit; run OPENCLAW-RELEASE after SECURITY-PROJECT-IDENTITY; run IMAGE-REMEDIATION after SECURITY-TOOLCHAIN; route all 27 diagnostic failures exactly once and preserve 60/70 plus 10/10/20/55/55/55 floors. +5. Enforce transfer gates: rejected DB-BULKOPS -> DB-BULKOPS-BEHAVIORAL-EDGE-REWORK -> DB-GOVERNANCE -> CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK; accepted behavioral composite -> MCP-STRUCTURED-INPUT-VALIDATION -> retained mutation owners / INTEGRATION-RELEASE; accepted behavioral composite -> INGEST-DOC-SNAPSHOT-DEMOLITION -> DURABLE-AUDIT-BOUNDARIES; DB-AUTH -> AUTH-BOOTSTRAP -> DURABLE-AUDIT; SECURITY-TOOLCHAIN -> IMAGE-REMEDIATION -> DEPLOYMENT/OC; AUTH-BOOTSTRAP -> V7 service wiring. Each successor is rebased to the exact predecessor integration SHA before edit. +6. Dispatch GE-003 identity and GE-004 update lanes with perspective-diverse checkers; launcher waits for identity protocol acceptance, deployment/OC wait for bootstrap plus image contract acceptance. +7. Advance only accepted/reviewed commits into `work/prc-integration`; run actual Diff ownership before checker and integration; update register first and render Markdown/HTML after every maker, checker, rework, review, integration, release, or blocker transition; run the thin customer spine after each accepted commit. +8. Complete M2-M5 and publish only `PRODUCT_WORKS`, then dispatch the six M6 contract lanes in parallel as allowed by their dependency rows. No M6 source maker starts before force-added hash-bound contract commits, validator `PASS`, challenging-plans `GO`, artifact review `PASS`, exact ownership amendment, Ledger plus Diff proof, and register row. +9. Resolve `final_ready_version` from the integrated M6 diff, authorize one exact final release-note path, execute M7 against the final artifacts, and require fresh `VERIFIED READY` evidence for goal completion. diff --git a/.agent/plans/2026-07-10-engram-production-ready-ownership-state.json b/.agent/plans/2026-07-10-engram-production-ready-ownership-state.json new file mode 100644 index 00000000..9bc6dfe8 --- /dev/null +++ b/.agent/plans/2026-07-10-engram-production-ready-ownership-state.json @@ -0,0 +1,414 @@ +{ + "schema_version": 1, + "plan": { + "path": ".agent/plans/2026-07-10-engram-production-ready-master-plan.md", + "sha256": "d371e94dff1ea12767b9d0832240cb6caf52c6c3bbe2209fe4280159c4f03c52" + }, + "path_epochs": [ + { + "path": "internal/db/gorm/candidate_store.go", + "ordered_owners": [ + "DB-BULKOPS", + "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK", + "DB-GOVERNANCE", + "CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK" + ], + "current_owner": "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK", + "transition_kind": "rework", + "completed_predecessors": [ + { + "owner": "DB-BULKOPS", + "checker_verdict": "FAIL", + "checker_artifact": ".agent/worktrees/prc-db-bulkops/.agent/reviews/2026-07-10-db-bulkops-sibling-rework-check.md", + "checker_sha256": "EB9EB227363A27EA058C6654BD7E38EED1088252F79F837E377B2A3CBC1FAFB7", + "rejected_head_sha": "68b2ce5835c7c6efdf1c68da9eedcb8d9c3837ef", + "post_review_verdict": null, + "post_review_artifact": null, + "integration_sha": null + } + ], + "required_successor_base_sha": "68b2ce5835c7c6efdf1c68da9eedcb8d9c3837ef" + }, + { + "path": "internal/db/gorm/candidate_store_test.go", + "ordered_owners": [ + "DB-BULKOPS", + "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK", + "DB-GOVERNANCE", + "CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK" + ], + "current_owner": "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK", + "transition_kind": "rework", + "completed_predecessors": [ + { + "owner": "DB-BULKOPS", + "checker_verdict": "FAIL", + "checker_artifact": ".agent/worktrees/prc-db-bulkops/.agent/reviews/2026-07-10-db-bulkops-sibling-rework-check.md", + "checker_sha256": "EB9EB227363A27EA058C6654BD7E38EED1088252F79F837E377B2A3CBC1FAFB7", + "rejected_head_sha": "68b2ce5835c7c6efdf1c68da9eedcb8d9c3837ef", + "post_review_verdict": null, + "post_review_artifact": null, + "integration_sha": null + } + ], + "required_successor_base_sha": "68b2ce5835c7c6efdf1c68da9eedcb8d9c3837ef" + }, + { + "path": "internal/mcp/tools_bulkops.go", + "ordered_owners": [ + "DB-BULKOPS", + "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK" + ], + "current_owner": "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK", + "transition_kind": "rework", + "completed_predecessors": [ + { + "owner": "DB-BULKOPS", + "checker_verdict": "FAIL", + "checker_artifact": ".agent/worktrees/prc-db-bulkops/.agent/reviews/2026-07-10-db-bulkops-sibling-rework-check.md", + "checker_sha256": "EB9EB227363A27EA058C6654BD7E38EED1088252F79F837E377B2A3CBC1FAFB7", + "rejected_head_sha": "68b2ce5835c7c6efdf1c68da9eedcb8d9c3837ef", + "post_review_verdict": null, + "post_review_artifact": null, + "integration_sha": null + } + ], + "required_successor_base_sha": "68b2ce5835c7c6efdf1c68da9eedcb8d9c3837ef" + }, + { + "path": "internal/mcp/tools_dryrun_test.go", + "ordered_owners": [ + "DB-BULKOPS", + "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK" + ], + "current_owner": "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK", + "transition_kind": "rework", + "completed_predecessors": [ + { + "owner": "DB-BULKOPS", + "checker_verdict": "FAIL", + "checker_artifact": ".agent/worktrees/prc-db-bulkops/.agent/reviews/2026-07-10-db-bulkops-sibling-rework-check.md", + "checker_sha256": "EB9EB227363A27EA058C6654BD7E38EED1088252F79F837E377B2A3CBC1FAFB7", + "rejected_head_sha": "68b2ce5835c7c6efdf1c68da9eedcb8d9c3837ef", + "post_review_verdict": null, + "post_review_artifact": null, + "integration_sha": null + } + ], + "required_successor_base_sha": "68b2ce5835c7c6efdf1c68da9eedcb8d9c3837ef" + }, + { + "path": "internal/bulkops/facade.go", + "ordered_owners": [ + "DB-BULKOPS", + "INGEST-DOC-SNAPSHOT-DEMOLITION", + "DURABLE-AUDIT-BOUNDARIES" + ], + "current_owner": "DB-BULKOPS", + "transition_kind": "integration", + "completed_predecessors": [], + "required_successor_base_sha": null + }, + { + "path": "internal/bulkops/facade_test.go", + "ordered_owners": [ + "DB-BULKOPS", + "INGEST-DOC-SNAPSHOT-DEMOLITION" + ], + "current_owner": "DB-BULKOPS", + "transition_kind": "integration", + "completed_predecessors": [], + "required_successor_base_sha": null + }, + { + "path": "internal/bulkops/rollback_test.go", + "ordered_owners": [ + "DB-BULKOPS", + "CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK" + ], + "current_owner": "DB-BULKOPS", + "transition_kind": "integration", + "completed_predecessors": [], + "required_successor_base_sha": null + }, + { + "path": "pkg/models/snapshot.go", + "ordered_owners": [ + "DB-BULKOPS", + "INGEST-DOC-SNAPSHOT-DEMOLITION" + ], + "current_owner": "DB-BULKOPS", + "transition_kind": "integration", + "completed_predecessors": [], + "required_successor_base_sha": null + }, + { + "path": "internal/db/gorm/user_store.go", + "ordered_owners": [ + "DB-AUTH", + "AUTH-BOOTSTRAP-SECURITY", + "DURABLE-AUDIT-BOUNDARIES" + ], + "current_owner": "DB-AUTH", + "transition_kind": "integration", + "completed_predecessors": [], + "required_successor_base_sha": null + }, + { + "path": "internal/worker/auth_handlers.go", + "ordered_owners": [ + "DB-AUTH", + "AUTH-BOOTSTRAP-SECURITY", + "DURABLE-AUDIT-BOUNDARIES" + ], + "current_owner": "DB-AUTH", + "transition_kind": "integration", + "completed_predecessors": [], + "required_successor_base_sha": null + }, + { + "path": "internal/worker/service.go", + "ordered_owners": [ + "AUTH-BOOTSTRAP-SECURITY", + "V7-RUNTIME-WIRING" + ], + "current_owner": "AUTH-BOOTSTRAP-SECURITY", + "transition_kind": "integration", + "completed_predecessors": [], + "required_successor_base_sha": null + }, + { + "path": "Dockerfile", + "ordered_owners": [ + "SECURITY-TOOLCHAIN", + "IMAGE-REMEDIATION" + ], + "current_owner": "SECURITY-TOOLCHAIN", + "transition_kind": "integration", + "completed_predecessors": [], + "required_successor_base_sha": null + }, + { + "path": ".github/workflows/test.yml", + "ordered_owners": [ + "RELEASE-GATES", + "IMAGE-REMEDIATION" + ], + "current_owner": "RELEASE-GATES", + "transition_kind": "integration", + "completed_predecessors": [], + "required_successor_base_sha": null + }, + { + "path": "docker-compose.yml", + "ordered_owners": [ + "IMAGE-REMEDIATION", + "DEPLOYMENT-ROLLBACK" + ], + "current_owner": "IMAGE-REMEDIATION", + "transition_kind": "integration", + "completed_predecessors": [], + "required_successor_base_sha": null + }, + { + "path": "deploy/docker-compose.runtime.yml", + "ordered_owners": [ + "IMAGE-REMEDIATION", + "DEPLOYMENT-ROLLBACK" + ], + "current_owner": "IMAGE-REMEDIATION", + "transition_kind": "integration", + "completed_predecessors": [], + "required_successor_base_sha": null + }, + { + "path": "apps/operator-console/package.json", + "ordered_owners": [ + "IMAGE-REMEDIATION", + "OC-INTEGRATION" + ], + "current_owner": "IMAGE-REMEDIATION", + "transition_kind": "integration", + "completed_predecessors": [], + "required_successor_base_sha": null + }, + { + "path": "apps/operator-console/package-lock.json", + "ordered_owners": [ + "IMAGE-REMEDIATION", + "OC-INTEGRATION" + ], + "current_owner": "IMAGE-REMEDIATION", + "transition_kind": "integration", + "completed_predecessors": [], + "required_successor_base_sha": null + }, + { + "path": "docs/DEPLOYMENT.md", + "ordered_owners": [ + "IMAGE-REMEDIATION", + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "current_owner": "IMAGE-REMEDIATION", + "transition_kind": "integration", + "completed_predecessors": [], + "required_successor_base_sha": null + }, + { + "path": "docs/PRODUCTION-TESTING-PLAYBOOK.md", + "ordered_owners": [ + "IMAGE-REMEDIATION", + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "current_owner": "IMAGE-REMEDIATION", + "transition_kind": "integration", + "completed_predecessors": [], + "required_successor_base_sha": null + }, + { + "path": "README.md", + "ordered_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "current_owner": "CORE-PUBLIC-TRUTH", + "transition_kind": "integration", + "completed_predecessors": [], + "required_successor_base_sha": null + }, + { + "path": "README.ru.md", + "ordered_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "current_owner": "CORE-PUBLIC-TRUTH", + "transition_kind": "integration", + "completed_predecessors": [], + "required_successor_base_sha": null + }, + { + "path": "README.zh.md", + "ordered_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "current_owner": "CORE-PUBLIC-TRUTH", + "transition_kind": "integration", + "completed_predecessors": [], + "required_successor_base_sha": null + }, + { + "path": "CONTRIBUTING.md", + "ordered_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "current_owner": "CORE-PUBLIC-TRUTH", + "transition_kind": "integration", + "completed_predecessors": [], + "required_successor_base_sha": null + }, + { + "path": "CHANGELOG.md", + "ordered_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "current_owner": "CORE-PUBLIC-TRUTH", + "transition_kind": "integration", + "completed_predecessors": [], + "required_successor_base_sha": null + }, + { + "path": "Makefile", + "ordered_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "current_owner": "CORE-PUBLIC-TRUTH", + "transition_kind": "integration", + "completed_predecessors": [], + "required_successor_base_sha": null + }, + { + "path": ".env.example", + "ordered_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "current_owner": "CORE-PUBLIC-TRUTH", + "transition_kind": "integration", + "completed_predecessors": [], + "required_successor_base_sha": null + }, + { + "path": "docs/MIGRATION.md", + "ordered_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "current_owner": "CORE-PUBLIC-TRUTH", + "transition_kind": "integration", + "completed_predecessors": [], + "required_successor_base_sha": null + }, + { + "path": "docs/arch/CONFIGURATION.md", + "ordered_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "current_owner": "CORE-PUBLIC-TRUTH", + "transition_kind": "integration", + "completed_predecessors": [], + "required_successor_base_sha": null + }, + { + "path": "docs/arch/QUICKSTART.md", + "ordered_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "current_owner": "CORE-PUBLIC-TRUTH", + "transition_kind": "integration", + "completed_predecessors": [], + "required_successor_base_sha": null + }, + { + "path": "docs/public/engram.jpg", + "ordered_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "current_owner": "CORE-PUBLIC-TRUTH", + "transition_kind": "integration", + "completed_predecessors": [], + "required_successor_base_sha": null + }, + { + "path": "plugin/engram/commands/setup.md", + "ordered_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "current_owner": "CORE-PUBLIC-TRUTH", + "transition_kind": "integration", + "completed_predecessors": [], + "required_successor_base_sha": null + }, + { + "path": "plugin/engram/commands/doctor.md", + "ordered_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "current_owner": "CORE-PUBLIC-TRUTH", + "transition_kind": "integration", + "completed_predecessors": [], + "required_successor_base_sha": null + } + ] +} From badc408937dd6fad0e1dc7ee9fc573505aa617b2 Mon Sep 17 00:00:00 2001 From: Kirill Turanskiy Date: Fri, 10 Jul 2026 12:59:03 +0300 Subject: [PATCH 016/111] ci: harden production release gates --- .agent/dev-stand.config.yaml | 10 +- ...lease-gates-foundation-revision-3-maker.md | 186 + .../maker-runtime-1/commands.json | 110 + .../maker-runtime-1/down.stderr.log | 0 .../maker-runtime-1/down.stdout.log | 2 + .../maker-runtime-1-down/commands.json | 84 + .../compose-down.stderr.log | 16 + .../compose-down.stdout.log | 0 .../dev-stand-residual-containers.stderr.log | 0 .../dev-stand-residual-containers.stdout.log | 0 .../dev-stand-residual-networks.stderr.log | 0 .../dev-stand-residual-networks.stdout.log | 0 .../dev-stand-residual-volumes.stderr.log | 0 .../dev-stand-residual-volumes.stdout.log | 0 .../maker-runtime-1-down/summary.json | 46 + .../api-ready.stderr.log | 0 .../api-ready.stdout.log | 3 + .../maker-runtime-1-ready/commands.json | 251 + .../maker-runtime-1-ready/health.stderr.log | 0 .../maker-runtime-1-ready/health.stdout.log | 3 + .../image-inspect-operator-console.stderr.log | 0 .../image-inspect-operator-console.stdout.log | 1 + .../image-inspect-postgres.stderr.log | 0 .../image-inspect-postgres.stdout.log | 1 + .../image-inspect-server.stderr.log | 0 .../image-inspect-server.stdout.log | 1 + .../image-inventory.stderr.log | 0 .../image-inventory.stdout.log | 3 + ...ge-tag-inspect-operator-console.stderr.log | 0 ...ge-tag-inspect-operator-console.stdout.log | 1 + .../image-tag-inspect-postgres.stderr.log | 0 .../image-tag-inspect-postgres.stdout.log | 1 + .../image-tag-inspect-server.stderr.log | 0 .../image-tag-inspect-server.stdout.log | 1 + .../operator-api-health.stderr.log | 0 .../operator-api-health.stdout.log | 3 + .../operator-api-ready.stderr.log | 0 .../operator-api-ready.stdout.log | 3 + .../postgres-ready.stderr.log | 0 .../postgres-ready.stdout.log | 1 + .../maker-runtime-1-ready/summary.json | 92 + .../maker-runtime-1-scan/commands.json | 214 + .../docker-scout-operator-console.sarif.json | 381 ++ .../docker-scout-operator-console.stderr.log | 7 + .../docker-scout-operator-console.stdout.log | 0 .../docker-scout-postgres.sarif.json | 3142 +++++++++++++ .../docker-scout-postgres.stderr.log | 4 + .../docker-scout-postgres.stdout.log | 0 .../docker-scout-server.sarif.json | 731 +++ .../docker-scout-server.stderr.log | 7 + .../docker-scout-server.stdout.log | 0 .../image-inspect-operator-console.stderr.log | 0 .../image-inspect-operator-console.stdout.log | 1 + .../image-inspect-postgres.stderr.log | 0 .../image-inspect-postgres.stdout.log | 1 + .../image-inspect-server.stderr.log | 0 .../image-inspect-server.stdout.log | 1 + .../image-inventory.stderr.log | 0 .../image-inventory.stdout.log | 3 + ...ge-tag-inspect-operator-console.stderr.log | 0 ...ge-tag-inspect-operator-console.stdout.log | 1 + .../image-tag-inspect-postgres.stderr.log | 0 .../image-tag-inspect-postgres.stdout.log | 1 + .../image-tag-inspect-server.stderr.log | 0 .../image-tag-inspect-server.stdout.log | 1 + .../maker-runtime-1-scan/summary.json | 105 + .../maker-runtime-1-up/api-ready.stderr.log | 0 .../maker-runtime-1-up/api-ready.stdout.log | 3 + .../maker-runtime-1-up/commands.json | 404 ++ .../maker-runtime-1-up/compose-up.stderr.log | 26 + .../maker-runtime-1-up/compose-up.stdout.log | 194 + .../maker-runtime-1-up/health.stderr.log | 0 .../maker-runtime-1-up/health.stdout.log | 3 + .../image-inspect-operator-console.stderr.log | 0 .../image-inspect-operator-console.stdout.log | 1 + .../image-inspect-postgres.stderr.log | 0 .../image-inspect-postgres.stdout.log | 1 + .../image-inspect-server.stderr.log | 0 .../image-inspect-server.stdout.log | 1 + .../image-inventory.stderr.log | 0 .../image-inventory.stdout.log | 3 + ...ge-tag-inspect-operator-console.stderr.log | 0 ...ge-tag-inspect-operator-console.stdout.log | 1 + .../image-tag-inspect-postgres.stderr.log | 0 .../image-tag-inspect-postgres.stdout.log | 1 + .../image-tag-inspect-server.stderr.log | 0 .../image-tag-inspect-server.stdout.log | 1 + .../operator-api-health.stderr.log | 0 .../operator-api-health.stdout.log | 3 + .../operator-api-ready.stderr.log | 0 .../operator-api-ready.stdout.log | 3 + .../postgres-container-id.stderr.log | 0 .../postgres-container-id.stdout.log | 1 + .../postgres-credential-injection.stderr.log | 0 .../postgres-credential-injection.stdout.log | 1 + .../postgres-ready.stderr.log | 0 .../postgres-ready.stdout.log | 1 + .../server-container-id.stderr.log | 0 .../server-container-id.stdout.log | 1 + .../server-credential-injection.stderr.log | 0 .../server-credential-injection.stdout.log | 1 + .../dev-stand/maker-runtime-1-up/summary.json | 92 + .../maker-runtime-1/ready.stderr.log | 0 .../maker-runtime-1/ready.stdout.log | 2 + .../maker-runtime-1/scan.stderr.log | 0 .../maker-runtime-1/scan.stdout.log | 2 + .../maker-runtime-1/summary.json | 53 + .../maker-runtime-1/up.stderr.log | 0 .../maker-runtime-1/up.stdout.log | 2 + .../cleanup.json | 5 + .../commands.json | 42 + .../post-status.stderr.log | 0 .../post-status.stdout.log | 0 .../pre-status.stderr.log | 0 .../pre-status.stdout.log | 0 .../summary.json | 42 + .../cleanup.json | 5 + .../commands.json | 42 + .../post-status.stderr.log | 0 .../post-status.stdout.log | 0 .../pre-status.stderr.log | 0 .../pre-status.stdout.log | 0 .../summary.json | 42 + .../db-bulkops-rejected-negative.json | 673 +++ .../ownership/ledger-final.json | 4121 +++++++++++++++++ .../tdd/RG3-DEVSTAND.red.json | 9 + .../tdd/RG3-NODE.red.json | 9 + .../tdd/RG3-OWNERSHIP.red.json | 9 + .../verification-summary.json | 143 + .github/workflows/test.yml | 75 +- .../assert-plan-path-ownership.ps1 | 353 +- scripts/production-gates/run-db-suite.ps1 | 217 +- scripts/production-gates/run-dev-stand.ps1 | 44 +- scripts/production-gates/run-node-matrix.ps1 | 376 ++ 134 files changed, 12369 insertions(+), 58 deletions(-) create mode 100644 .agent/reports/2026-07-10-release-gates-foundation-revision-3-maker.md create mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/commands.json create mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/down.stderr.log create mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/down.stdout.log create mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-down/commands.json create mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-down/compose-down.stderr.log create mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-down/compose-down.stdout.log create mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-down/dev-stand-residual-containers.stderr.log create mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-down/dev-stand-residual-containers.stdout.log create mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-down/dev-stand-residual-networks.stderr.log create mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-down/dev-stand-residual-networks.stdout.log create mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-down/dev-stand-residual-volumes.stderr.log create mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-down/dev-stand-residual-volumes.stdout.log create mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-down/summary.json create mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/api-ready.stderr.log create mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/api-ready.stdout.log create mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/commands.json create mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/health.stderr.log create mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/health.stdout.log create mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-inspect-operator-console.stderr.log create mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-inspect-operator-console.stdout.log create mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-inspect-postgres.stderr.log create mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-inspect-postgres.stdout.log create mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-inspect-server.stderr.log create mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-inspect-server.stdout.log create mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-inventory.stderr.log create mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-inventory.stdout.log create mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-tag-inspect-operator-console.stderr.log create mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-tag-inspect-operator-console.stdout.log create mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-tag-inspect-postgres.stderr.log create mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-tag-inspect-postgres.stdout.log create mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-tag-inspect-server.stderr.log create mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-tag-inspect-server.stdout.log create mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/operator-api-health.stderr.log create mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/operator-api-health.stdout.log create mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/operator-api-ready.stderr.log create mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/operator-api-ready.stdout.log create mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/postgres-ready.stderr.log create mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/postgres-ready.stdout.log create mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/summary.json create mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/commands.json create mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/docker-scout-operator-console.sarif.json create mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/docker-scout-operator-console.stderr.log create mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/docker-scout-operator-console.stdout.log create mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/docker-scout-postgres.sarif.json create mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/docker-scout-postgres.stderr.log create mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/docker-scout-postgres.stdout.log create mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/docker-scout-server.sarif.json create mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/docker-scout-server.stderr.log create mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/docker-scout-server.stdout.log create mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-inspect-operator-console.stderr.log create mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-inspect-operator-console.stdout.log create mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-inspect-postgres.stderr.log create mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-inspect-postgres.stdout.log create mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-inspect-server.stderr.log create mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-inspect-server.stdout.log create mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-inventory.stderr.log create mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-inventory.stdout.log create mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-tag-inspect-operator-console.stderr.log create mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-tag-inspect-operator-console.stdout.log create mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-tag-inspect-postgres.stderr.log create mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-tag-inspect-postgres.stdout.log create mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-tag-inspect-server.stderr.log create mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-tag-inspect-server.stdout.log create mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/summary.json create mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/api-ready.stderr.log create mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/api-ready.stdout.log create mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/commands.json create mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/compose-up.stderr.log create mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/compose-up.stdout.log create mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/health.stderr.log create mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/health.stdout.log create mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-inspect-operator-console.stderr.log create mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-inspect-operator-console.stdout.log create mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-inspect-postgres.stderr.log create mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-inspect-postgres.stdout.log create mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-inspect-server.stderr.log create mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-inspect-server.stdout.log create mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-inventory.stderr.log create mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-inventory.stdout.log create mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-tag-inspect-operator-console.stderr.log create mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-tag-inspect-operator-console.stdout.log create mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-tag-inspect-postgres.stderr.log create mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-tag-inspect-postgres.stdout.log create mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-tag-inspect-server.stderr.log create mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-tag-inspect-server.stdout.log create mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/operator-api-health.stderr.log create mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/operator-api-health.stdout.log create mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/operator-api-ready.stderr.log create mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/operator-api-ready.stdout.log create mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/postgres-container-id.stderr.log create mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/postgres-container-id.stdout.log create mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/postgres-credential-injection.stderr.log create mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/postgres-credential-injection.stdout.log create mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/postgres-ready.stderr.log create mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/postgres-ready.stdout.log create mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/server-container-id.stderr.log create mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/server-container-id.stdout.log create mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/server-credential-injection.stderr.log create mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/server-credential-injection.stdout.log create mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/summary.json create mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/ready.stderr.log create mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/ready.stdout.log create mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/scan.stderr.log create mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/scan.stdout.log create mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/summary.json create mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/up.stderr.log create mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/up.stdout.log create mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-2/cleanup.json create mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-2/commands.json create mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-2/post-status.stderr.log create mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-2/post-status.stdout.log create mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-2/pre-status.stderr.log create mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-2/pre-status.stdout.log create mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-2/summary.json create mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-3/cleanup.json create mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-3/commands.json create mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-3/post-status.stderr.log create mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-3/post-status.stdout.log create mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-3/pre-status.stderr.log create mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-3/pre-status.stdout.log create mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-3/summary.json create mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/ownership/db-bulkops-rejected-negative.json create mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/ownership/ledger-final.json create mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/tdd/RG3-DEVSTAND.red.json create mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/tdd/RG3-NODE.red.json create mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/tdd/RG3-OWNERSHIP.red.json create mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/verification-summary.json create mode 100644 scripts/production-gates/run-node-matrix.ps1 diff --git a/.agent/dev-stand.config.yaml b/.agent/dev-stand.config.yaml index fda98411..639e65d8 100644 --- a/.agent/dev-stand.config.yaml +++ b/.agent/dev-stand.config.yaml @@ -19,15 +19,21 @@ env: POSTGRES_PORT: "55433" WORKER_PORT: "37778" OPERATOR_CONSOLE_PORT: "3001" - POSTGRES_PASSWORD: "engram" - DATABASE_DSN: "postgres://engram:engram@postgres:5432/engram?sslmode=disable" STAND_API_URL: "http://localhost:37778" STAND_OPERATOR_URL: "http://localhost:3001" NUXT_OPERATOR_API_TARGET: "http://server:37777" ENGRAM_AUTH_DISABLED: "false" credential_policy: + generation_scope: "three independent cryptographic 256-bit values generated inside the Up runner process" + postgres_password: "generated cryptographically inside the Up runner process" admin_token: "generated cryptographically inside the Up runner process" + bootstrap_capability: "generated cryptographically inside the Up runner process" + postgres_runtime_interface: "POSTGRES_PASSWORD plus generated DATABASE_DSN" + admin_runtime_interface: "ENGRAM_AUTH_ADMIN_TOKEN" + bootstrap_runtime_interface: "ENGRAM_AUTH_BOOTSTRAP_CAPABILITY via ephemeral compose override" + required_distinct: true + forbidden_defaults: ["engram", "password", "changeme", "change-me", "change-me-in-production", "default", "admin"] persistence: "never written to raw logs, machine summaries, config, or caller environment" auth_disabled_fallback: false diff --git a/.agent/reports/2026-07-10-release-gates-foundation-revision-3-maker.md b/.agent/reports/2026-07-10-release-gates-foundation-revision-3-maker.md new file mode 100644 index 00000000..693278ce --- /dev/null +++ b/.agent/reports/2026-07-10-release-gates-foundation-revision-3-maker.md @@ -0,0 +1,186 @@ +# RELEASE-GATES Foundation Revision 3 — Maker Report + +Date: 2026-07-10 + +Role: maker only; no independent checker verdict, post-review verdict, integration verdict, production-readiness verdict, or GO/NO-GO claim + +Worktree: `D:\Dev\engram\.agent\worktrees\prc-release-gates` + +Branch: `work/prc-release-gates` +Starting head: `2b3ef3e33bd19e630f8f67d07a9e2521cb98537f` + +Plan-governance commit: +`a1653abf5a1088f45df2c58487a74a886666adf1` + +## Outcome + +Revision 3 implements the release-gate foundation corrections required by the +independent revision-2 `REVISE` report. It provides durable plan authority, +ordered ownership-state enforcement, fail-closed dev-stand liveness/readiness and +credential proof, and a clean-checkout OpenClaw release matrix. The implemented +gates correctly expose two current product/release blockers rather than masking +them: + +1. the exact current three-image dev stand contains HIGH/CRITICAL findings + (`5` operator-console, `38` PostgreSQL, `13` server); and +2. `plugin/openclaw-engram/package-lock.json` is absent, so no npm release command + is allowed to run. + +The DB bulk-operations ownership state remains truthfully held at +`DB-BULKOPS-BEHAVIORAL-EDGE-REWORK`. Rejected head +`68b2ce5835c7c6efdf1c68da9eedcb8d9c3837ef` is recorded as rejected, with no +integration SHA. No later DB candidate is represented as accepted in these +artifacts. + +## Exact source locks + +| Artifact | SHA256 | +| --- | --- | +| revision-2 checker report | `C7A96460C34951C0876F3F87F3B404E037D246A974D9AC491D5A9C2FF455FCCB` | +| revision-3 master plan | `D371E94DFF1EA12767B9D0832240CB6CAF52C6C3BBE2209FE4280159C4F03C52` | +| revision-3 ownership state | `1419E2F7E5236E21DD9A2D8C3271CED2DEF16DC0A798435AD5A9401FE522D55B` | +| rejected DB bulk-ops checker | `EB9EB227363A27EA058C6654BD7E38EED1088252F79F837E377B2A3CBC1FAFB7` | +| OpenClaw/ingest classification | `A095E9A30D6F04D8918B96D41D790D1F8CA1FB42671FBCF57BD0E29609E0AC2A` | +| MCP structured-input classification | `3356F3AE6073F95E701707FCF451D63809AC186ED1DEA7321A7027C4C3122E7A` | + +The exact plan hash is embedded in the tracked ownership state and the executable +CI Ledger step. A different plan byte sequence fails closed. + +## Changed implementation surface + +- `.agent/dev-stand.config.yaml` +- `.github/workflows/test.yml` +- `scripts/production-gates/assert-plan-path-ownership.ps1` +- `scripts/production-gates/run-db-suite.ps1` +- `scripts/production-gates/run-dev-stand.ps1` +- new `scripts/production-gates/run-node-matrix.ps1` +- exact ignored governance artifacts: + `.agent/plans/2026-07-10-engram-production-ready-master-plan.md` and + `.agent/plans/2026-07-10-engram-production-ready-ownership-state.json` +- exact maker/evidence namespace under + `.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**` + +No DB bulk-ops product source, canonical root evidence register, rendered Markdown, +or HTML dashboard was edited by this slice. + +## Revision-2 F-1 through F-7 disposition + +| Finding | Revision-3 maker disposition | +| --- | --- | +| F-1 live DB-BULKOPS head unauthorized | Closed at authority level without accepting the defective head. The exact sibling/rework paths and ordered epochs exist; four overlapping paths are assigned to `DB-BULKOPS-BEHAVIORAL-EDGE-REWORK`; rejected head/checker/hash are pinned; integration is empty. The historical head produces zero path violations and exactly four current-owner errors. | +| F-2 owner sets accepted reversed order | Closed in the gate. Epoch owner sequences are compared exactly; current owner, predecessor evidence, required successor base, and Git ancestry are enforced. Reversed order, missing evidence, wrong base, and rejected-head mismatch all have negative fixtures. | +| F-3 plan authority ignored/unpinned | Closed in this branch's governance surface. The exact plan and ownership-state files are force-added, state is bound to the challenged plan SHA256, and CI invokes Ledger with `-ExpectedPlanSha256`. | +| F-4 OpenClaw release has no repair owner | Closed in the plan/gate design. `OPENCLAW-RELEASE` owns the manifest/lock release surface. The new runner requires clean pre/post state, a tracked non-ignored lockfile, four-way version parity, exact `npm ci -> typecheck -> test -> audit(high) -> pack --dry-run --json`, required package contents, and cleanup. Current expected-negative evidence stops before npm because the lockfile is absent. | +| F-5 `ingest_doc` unclassified | Closed in revision-3 plan authority using the source-backed classifier: `SnapshotOpIngestDoc/executeIngestDoc` is pre-demolition-stale/unwired for this release, cannot count as durable-audit proof, and has explicit demolition/public-truth owners. | +| F-6 current RELEASE-GATES liveness/credential defects | Closed in implementation, pending independent acceptance. Liveness is HTTP 200 plus exact `starting|ready|error`; readiness is HTTP 200 plus exact `ready`. Up generates three independent cryptographic 256-bit values, rejects blank/default/reused values, injects them at runtime, persists only redacted proof, and validates direct plus operator-proxied endpoints. | +| F-7 missing root register rows | Root-owned and still open at this maker snapshot. The canonical register has 54 unique rows, but comparison with the 47 revision-3 plan slices finds two missing rows: `DOCUMENT-INGEST-PUBLIC-TRUTH` and `INGEST-DOC-SNAPSHOT-DEMOLITION`. This discrepancy was sent to root; this slice did not silently patch root-owned JSON/Markdown/HTML. | + +## TDD and deterministic verification + +RED evidence is preserved at: + +- `tdd/RG3-OWNERSHIP.red.json` — + `051CC783F978E65B777A96D3897C1F2CB5CB4F29824C86506BCB939870919309` +- `tdd/RG3-DEVSTAND.red.json` — + `DA1948A48ADE2C830C8EEE570F4BA3C14D5B8020D7C4402B2C588CF8C0DF8622` +- `tdd/RG3-NODE.red.json` — + `C9E044E2D4560ECFC19F8E6828DA4C5BD1F1E3DC1B0AB7ABD974EF66E727797B` + +GREEN/fail-closed verification: + +| Proof | Result | +| --- | --- | +| PowerShell AST parse | PASS, 8 scripts, 0 errors | +| deterministic script self-tests | PASS, 8/8 | +| revision-3 ownership Ledger | PASS, 47 slices, 318 declarations, 32 repeated exact paths, 2 declared prefix intersections, 32 state epochs, 0 errors | +| rejected DB head Diff | expected FAIL, exit 1, 22 changed paths, 0 path violations, exactly 4 current-owner errors | +| workflow/config/runner conformance | PASS, 26 semantic mutations rejected | +| `actionlint` | PASS, v1.7.12 | +| `git diff --check` | PASS | +| evidence secret-pattern scan | PASS, 0 matching files | +| post-run Docker residue | PASS, 0 containers, 0 networks, 0 volumes | + +Machine summary: +`.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/verification-summary.json`. + +## Actual dev-stand runtime proof + +The real lifecycle used compose project `engram-critical-stand` and exact images +declared by `.agent/dev-stand.config.yaml`. + +- Up: PASS. PostgreSQL/admin/bootstrap values were independently generated, + distinct, non-default, runtime-injected, and not persisted. Direct and + operator-proxied liveness/readiness endpoints all returned HTTP 200 and passed + their distinct semantic contracts. +- Ready: PASS. +- Scan: FAIL as required by policy. Findings were `5`, `38`, and `13` for the exact + operator-console, PostgreSQL, and server images respectively. +- Down: PASS. Containers, networks, and volumes owned by the project were zero. +- Wrapper: expected FAIL because Scan failed; cleanup remained PASS. + +The wrapper summary SHA256 is +`2E8386AAC779F1EA3E68EDE005BF643B8EBCD37824101B8E7B80070AB9B311CF`. + +### Bootstrap capability claim boundary + +The runner proves that `ENGRAM_AUTH_BOOTSTRAP_CAPABILITY` reaches the server +container environment through an ephemeral override. Current Go configuration has +no live consumer for that variable. Therefore this report claims only generation, +non-default/distinct policy, runtime injection, redaction, and non-persistence. It +does **not** claim functional bootstrap authorization behavior. + +## OpenClaw release-matrix proof + +The current clean-surface run is an expected negative: + +- pre-surface clean: true; +- post-surface clean: true; +- release commands executed: 0; +- package dry-run: false; +- blocker: missing tracked `plugin/openclaw-engram/package-lock.json`. + +This is owned by `OPENCLAW-RELEASE`; RELEASE-GATES does not generate or repair the +manifest. Evidence SHA256: +`408424249909005FEC919E1E5E00C73596FCDB4FAACDBDC69295E3EBBC860472`. + +## S4 threat model + +### Assets + +- PostgreSQL credential, admin token, and bootstrap capability; +- exact challenged plan bytes and ordered ownership authority; +- npm lock/package/plugin release identity and packed artifact contents; +- cleanup ownership boundaries for Docker and Node artifacts. + +### Threats and controls + +| Threat | Control | +| --- | --- | +| blank/default/reused credentials | cryptographic 256-bit generation plus nonblank, non-default, pairwise-distinct assertions and negative fixtures | +| secrets in command arguments, raw logs, summaries, or config | environment-only process injection, redaction before persistence, machine-evidence scans, and no caller-environment export | +| shell-dependent runtime proof failing on distroless images | container IDs plus `docker inspect --format '{{json .Config.Env}}'`; no in-container `sh` execution | +| HTTP 200 false-green | separate liveness and readiness parsers with exact allowed status sets | +| locally altered/ignored plan authorizing work | tracked plan/state, exact expected SHA256, canonical state binding, CI Ledger | +| reversed ownership or successor omitting predecessor | exact sequence comparison, current-owner enforcement, predecessor evidence, exact required base, ancestor proof | +| lockfile ignored, stale, or version-drifted | presence/tracking/non-ignore proof plus package/lock-root/plugin version and dependency parity | +| source/tests or `node_modules` leaking into package | dry-run package allow/deny checks and unconditional exact-surface cleanup | +| cleanup escaping its owned scope | compose-label inventory and exact OpenClaw `node_modules`/`dist` removal with outside-sentinel self-test | + +### Residual risks + +- Current release images fail the zero HIGH/CRITICAL policy and require the separate + image-remediation lane. +- OpenClaw clean-install/package proof cannot start until the release owner commits + a valid tracked lockfile. +- Functional bootstrap capability remains a separate product/security contract. +- DB bulk-ops successor acceptance, root register parity/render, independent + revision-3 checker, post-review, integration, full project gates, and customer-mode + proof remain mandatory. + +## Handoff contract + +This maker handoff is suitable only for a fresh independent checker. The checker +must bind to the exact commits and hashes supplied after commit, rerun the +deterministic and runtime-relevant gates from a clean worktree, and preserve the two +expected-negative product blockers. No evidence in this report authorizes +integration or a production-ready claim. diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/commands.json b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/commands.json new file mode 100644 index 00000000..25df5ec4 --- /dev/null +++ b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/commands.json @@ -0,0 +1,110 @@ +[ + { + "name": "dev-stand-up", + "executable": "C:\\Program Files\\PowerShell\\7\\pwsh.exe", + "arguments": [ + "-NoProfile", + "-File", + "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\scripts\\production-gates\\run-db-suite.ps1", + "-DevStandAction", + "Up", + "-ComposeProject", + "engram-critical-stand", + "-ComposeFile", + "docker-compose.yml", + "-ArtifactRoot", + ".agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested", + "-RunId", + "maker-runtime-1" + ], + "command": "\"C:\\Program Files\\PowerShell\\7\\pwsh.exe\" -NoProfile -File \"D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\scripts\\production-gates\\run-db-suite.ps1\" -DevStandAction Up -ComposeProject engram-critical-stand -ComposeFile docker-compose.yml -ArtifactRoot \".agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\" -RunId maker-runtime-1", + "started_at": "2026-07-10T09:41:14.6889150+00:00", + "finished_at": "2026-07-10T09:42:08.4713805+00:00", + "duration_seconds": 53.782, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\up.stdout.log", + "stderr": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\up.stderr.log" + }, + { + "name": "dev-stand-ready", + "executable": "C:\\Program Files\\PowerShell\\7\\pwsh.exe", + "arguments": [ + "-NoProfile", + "-File", + "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\scripts\\production-gates\\run-db-suite.ps1", + "-DevStandAction", + "Ready", + "-ComposeProject", + "engram-critical-stand", + "-ComposeFile", + "docker-compose.yml", + "-ArtifactRoot", + ".agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested", + "-RunId", + "maker-runtime-1" + ], + "command": "\"C:\\Program Files\\PowerShell\\7\\pwsh.exe\" -NoProfile -File \"D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\scripts\\production-gates\\run-db-suite.ps1\" -DevStandAction Ready -ComposeProject engram-critical-stand -ComposeFile docker-compose.yml -ArtifactRoot \".agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\" -RunId maker-runtime-1", + "started_at": "2026-07-10T09:42:08.5154258+00:00", + "finished_at": "2026-07-10T09:42:11.4027295+00:00", + "duration_seconds": 2.887, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\ready.stdout.log", + "stderr": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\ready.stderr.log" + }, + { + "name": "dev-stand-scan", + "executable": "C:\\Program Files\\PowerShell\\7\\pwsh.exe", + "arguments": [ + "-NoProfile", + "-File", + "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\scripts\\production-gates\\run-db-suite.ps1", + "-DevStandAction", + "Scan", + "-ComposeProject", + "engram-critical-stand", + "-ComposeFile", + "docker-compose.yml", + "-ArtifactRoot", + ".agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested", + "-RunId", + "maker-runtime-1" + ], + "command": "\"C:\\Program Files\\PowerShell\\7\\pwsh.exe\" -NoProfile -File \"D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\scripts\\production-gates\\run-db-suite.ps1\" -DevStandAction Scan -ComposeProject engram-critical-stand -ComposeFile docker-compose.yml -ArtifactRoot \".agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\" -RunId maker-runtime-1", + "started_at": "2026-07-10T09:42:11.4090302+00:00", + "finished_at": "2026-07-10T09:42:38.4541081+00:00", + "duration_seconds": 27.045, + "exit_code": 1, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\scan.stdout.log", + "stderr": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\scan.stderr.log" + }, + { + "name": "dev-stand-down", + "executable": "C:\\Program Files\\PowerShell\\7\\pwsh.exe", + "arguments": [ + "-NoProfile", + "-File", + "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\scripts\\production-gates\\run-db-suite.ps1", + "-DevStandAction", + "Down", + "-ComposeProject", + "engram-critical-stand", + "-ComposeFile", + "docker-compose.yml", + "-ArtifactRoot", + ".agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested", + "-RunId", + "maker-runtime-1" + ], + "command": "\"C:\\Program Files\\PowerShell\\7\\pwsh.exe\" -NoProfile -File \"D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\scripts\\production-gates\\run-db-suite.ps1\" -DevStandAction Down -ComposeProject engram-critical-stand -ComposeFile docker-compose.yml -ArtifactRoot \".agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\" -RunId maker-runtime-1", + "started_at": "2026-07-10T09:42:38.4626898+00:00", + "finished_at": "2026-07-10T09:42:43.2598207+00:00", + "duration_seconds": 4.797, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\down.stdout.log", + "stderr": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\down.stderr.log" + } +] diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/down.stderr.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/down.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/down.stdout.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/down.stdout.log new file mode 100644 index 00000000..12dd95ed --- /dev/null +++ b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/down.stdout.log @@ -0,0 +1,2 @@ +dev-stand action=Down verdict=PASS child_commands=4 nonzero_children=0 +summary=D:\Dev\engram\.agent\worktrees\prc-release-gates\.agent\reports\evidence\production-ready\release-gates-foundation-revision-3\dev-stand-runtime\maker-runtime-1\nested\dev-stand\maker-runtime-1-down\summary.json diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-down/commands.json b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-down/commands.json new file mode 100644 index 00000000..4cbb4e77 --- /dev/null +++ b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-down/commands.json @@ -0,0 +1,84 @@ +[ + { + "name": "dev-stand-down", + "executable": "C:\\Program Files\\Docker\\Docker\\resources\\bin\\docker.exe", + "arguments": [ + "compose", + "-p", + "engram-critical-stand", + "-f", + "docker-compose.yml", + "down", + "-v", + "--remove-orphans" + ], + "environment_keys": [], + "command": "C:\\Program Files\\Docker\\Docker\\resources\\bin\\docker.exe compose -p engram-critical-stand -f docker-compose.yml down -v --remove-orphans", + "started_at": "2026-07-10T09:42:39.1363285+00:00", + "finished_at": "2026-07-10T09:42:42.5926281+00:00", + "duration_seconds": 3.456, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-down\\compose-down.stdout.log", + "stderr": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-down\\compose-down.stderr.log" + }, + { + "name": "dev-stand-residual-containers", + "executable": "C:\\Program Files\\Docker\\Docker\\resources\\bin\\docker.exe", + "arguments": [ + "ps", + "-aq", + "--filter", + "label=com.docker.compose.project=engram-critical-stand" + ], + "environment_keys": [], + "command": "C:\\Program Files\\Docker\\Docker\\resources\\bin\\docker.exe ps -aq --filter label=com.docker.compose.project=engram-critical-stand", + "started_at": "2026-07-10T09:42:42.6511628+00:00", + "finished_at": "2026-07-10T09:42:42.8095250+00:00", + "duration_seconds": 0.158, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-down\\dev-stand-residual-containers.stdout.log", + "stderr": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-down\\dev-stand-residual-containers.stderr.log" + }, + { + "name": "dev-stand-residual-volumes", + "executable": "C:\\Program Files\\Docker\\Docker\\resources\\bin\\docker.exe", + "arguments": [ + "volume", + "ls", + "-q", + "--filter", + "label=com.docker.compose.project=engram-critical-stand" + ], + "environment_keys": [], + "command": "C:\\Program Files\\Docker\\Docker\\resources\\bin\\docker.exe volume ls -q --filter label=com.docker.compose.project=engram-critical-stand", + "started_at": "2026-07-10T09:42:42.8109038+00:00", + "finished_at": "2026-07-10T09:42:42.9756446+00:00", + "duration_seconds": 0.165, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-down\\dev-stand-residual-volumes.stdout.log", + "stderr": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-down\\dev-stand-residual-volumes.stderr.log" + }, + { + "name": "dev-stand-residual-networks", + "executable": "C:\\Program Files\\Docker\\Docker\\resources\\bin\\docker.exe", + "arguments": [ + "network", + "ls", + "-q", + "--filter", + "label=com.docker.compose.project=engram-critical-stand" + ], + "environment_keys": [], + "command": "C:\\Program Files\\Docker\\Docker\\resources\\bin\\docker.exe network ls -q --filter label=com.docker.compose.project=engram-critical-stand", + "started_at": "2026-07-10T09:42:42.9762783+00:00", + "finished_at": "2026-07-10T09:42:43.1721199+00:00", + "duration_seconds": 0.196, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-down\\dev-stand-residual-networks.stdout.log", + "stderr": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-down\\dev-stand-residual-networks.stderr.log" + } +] diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-down/compose-down.stderr.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-down/compose-down.stderr.log new file mode 100644 index 00000000..9a3343de --- /dev/null +++ b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-down/compose-down.stderr.log @@ -0,0 +1,16 @@ + Container engram-critical-stand-operator-console-1 Stopping + Container engram-critical-stand-operator-console-1 Stopped + Container engram-critical-stand-operator-console-1 Removing + Container engram-critical-stand-operator-console-1 Removed + Container engram-critical-stand-server-1 Stopping + Container engram-critical-stand-server-1 Stopped + Container engram-critical-stand-server-1 Removing + Container engram-critical-stand-server-1 Removed + Container engram-critical-stand-postgres-1 Stopping + Container engram-critical-stand-postgres-1 Stopped + Container engram-critical-stand-postgres-1 Removing + Container engram-critical-stand-postgres-1 Removed + Network engram-critical-stand_default Removing + Volume engram-critical-stand_pgdata Removing + Volume engram-critical-stand_pgdata Removed + Network engram-critical-stand_default Removed diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-down/compose-down.stdout.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-down/compose-down.stdout.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-down/dev-stand-residual-containers.stderr.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-down/dev-stand-residual-containers.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-down/dev-stand-residual-containers.stdout.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-down/dev-stand-residual-containers.stdout.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-down/dev-stand-residual-networks.stderr.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-down/dev-stand-residual-networks.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-down/dev-stand-residual-networks.stdout.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-down/dev-stand-residual-networks.stdout.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-down/dev-stand-residual-volumes.stderr.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-down/dev-stand-residual-volumes.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-down/dev-stand-residual-volumes.stdout.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-down/dev-stand-residual-volumes.stdout.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-down/summary.json b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-down/summary.json new file mode 100644 index 00000000..ad7f26bb --- /dev/null +++ b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-down/summary.json @@ -0,0 +1,46 @@ +{ + "schema_version": 1, + "gate": "dev-stand-contract", + "action": "Down", + "run_id": "maker-runtime-1", + "started_at": "2026-07-10T09:42:39.1050055+00:00", + "finished_at": "2026-07-10T09:42:43.1727975+00:00", + "duration_seconds": 4.068, + "verdict": "PASS", + "compose_project": "engram-critical-stand", + "compose_file": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\docker-compose.yml", + "ephemeral_postgres_password_generated": false, + "ephemeral_admin_token_generated": false, + "ephemeral_bootstrap_capability_generated": false, + "ephemeral_credentials_distinct_and_nondefault": false, + "ephemeral_credentials_runtime_injected": false, + "ephemeral_postgres_password_persisted": false, + "ephemeral_admin_token_persisted": false, + "ephemeral_bootstrap_capability_persisted": false, + "exact_image_targets": { + "postgres": "pgvector/pgvector:pg17", + "server": "ghcr.io/thebtf/engram:main", + "operator-console": "ghcr.io/thebtf/engram-operator-console:main" + }, + "actual_images": {}, + "actual_image_ids": {}, + "tag_image_ids": {}, + "liveness_endpoints": [], + "semantic_ready_endpoints": [], + "vulnerability_scan": { + "scanner": "docker scout cves", + "severity_gate": [ + "critical", + "high" + ], + "scans": [] + }, + "automatic_failure_cleanup": false, + "residual_checks_performed": true, + "residual_resources_zero": true, + "child_commands": 4, + "nonzero_child_commands": 0, + "commands": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-down\\commands.json", + "errors": [], + "artifact_directory": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-down" +} diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/api-ready.stderr.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/api-ready.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/api-ready.stdout.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/api-ready.stdout.log new file mode 100644 index 00000000..36aa5929 --- /dev/null +++ b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/api-ready.stdout.log @@ -0,0 +1,3 @@ +{"status":"ready"} + +200 \ No newline at end of file diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/commands.json b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/commands.json new file mode 100644 index 00000000..5ac1f7fa --- /dev/null +++ b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/commands.json @@ -0,0 +1,251 @@ +[ + { + "name": "dev-stand-postgres-ready", + "executable": "C:\\Program Files\\Docker\\Docker\\resources\\bin\\docker.exe", + "arguments": [ + "compose", + "-p", + "engram-critical-stand", + "-f", + "docker-compose.yml", + "exec", + "-T", + "postgres", + "pg_isready", + "-U", + "engram", + "-d", + "engram" + ], + "environment_keys": [], + "command": "C:\\Program Files\\Docker\\Docker\\resources\\bin\\docker.exe compose -p engram-critical-stand -f docker-compose.yml exec -T postgres pg_isready -U engram -d engram", + "started_at": "2026-07-10T09:42:09.0886609+00:00", + "finished_at": "2026-07-10T09:42:09.6021086+00:00", + "duration_seconds": 0.513, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-ready\\postgres-ready.stdout.log", + "stderr": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-ready\\postgres-ready.stderr.log" + }, + { + "name": "dev-stand-health", + "executable": "C:\\WINDOWS\\system32\\curl.exe", + "arguments": [ + "-sS", + "--max-time", + "15", + "--write-out", + "\\n%{http_code}", + "http://localhost:37778/health" + ], + "environment_keys": [], + "command": "C:\\WINDOWS\\system32\\curl.exe -sS --max-time 15 --write-out \\n%{http_code} http://localhost:37778/health", + "started_at": "2026-07-10T09:42:09.6635118+00:00", + "finished_at": "2026-07-10T09:42:09.7174415+00:00", + "duration_seconds": 0.054, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-ready\\health.stdout.log", + "stderr": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-ready\\health.stderr.log" + }, + { + "name": "dev-stand-api-ready", + "executable": "C:\\WINDOWS\\system32\\curl.exe", + "arguments": [ + "-sS", + "--max-time", + "15", + "--write-out", + "\\n%{http_code}", + "http://localhost:37778/api/ready" + ], + "environment_keys": [], + "command": "C:\\WINDOWS\\system32\\curl.exe -sS --max-time 15 --write-out \\n%{http_code} http://localhost:37778/api/ready", + "started_at": "2026-07-10T09:42:09.7444015+00:00", + "finished_at": "2026-07-10T09:42:09.7818067+00:00", + "duration_seconds": 0.037, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-ready\\api-ready.stdout.log", + "stderr": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-ready\\api-ready.stderr.log" + }, + { + "name": "dev-stand-operator-api-health", + "executable": "C:\\WINDOWS\\system32\\curl.exe", + "arguments": [ + "-sS", + "--max-time", + "15", + "--write-out", + "\\n%{http_code}", + "http://localhost:3001/api/health" + ], + "environment_keys": [], + "command": "C:\\WINDOWS\\system32\\curl.exe -sS --max-time 15 --write-out \\n%{http_code} http://localhost:3001/api/health", + "started_at": "2026-07-10T09:42:09.7849574+00:00", + "finished_at": "2026-07-10T09:42:09.8244173+00:00", + "duration_seconds": 0.039, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-ready\\operator-api-health.stdout.log", + "stderr": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-ready\\operator-api-health.stderr.log" + }, + { + "name": "dev-stand-operator-api-ready", + "executable": "C:\\WINDOWS\\system32\\curl.exe", + "arguments": [ + "-sS", + "--max-time", + "15", + "--write-out", + "\\n%{http_code}", + "http://localhost:3001/api/ready" + ], + "environment_keys": [], + "command": "C:\\WINDOWS\\system32\\curl.exe -sS --max-time 15 --write-out \\n%{http_code} http://localhost:3001/api/ready", + "started_at": "2026-07-10T09:42:09.8253781+00:00", + "finished_at": "2026-07-10T09:42:09.8663613+00:00", + "duration_seconds": 0.041, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-ready\\operator-api-ready.stdout.log", + "stderr": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-ready\\operator-api-ready.stderr.log" + }, + { + "name": "dev-stand-image-inventory", + "executable": "C:\\Program Files\\Docker\\Docker\\resources\\bin\\docker.exe", + "arguments": [ + "ps", + "--filter", + "label=com.docker.compose.project=engram-critical-stand", + "--format", + "{{.ID}}|{{.Label \"com.docker.compose.service\"}}" + ], + "environment_keys": [], + "command": "C:\\Program Files\\Docker\\Docker\\resources\\bin\\docker.exe ps --filter label=com.docker.compose.project=engram-critical-stand --format {{.ID}}|{{.Label \"com.docker.compose.service\"}}", + "started_at": "2026-07-10T09:42:09.8673679+00:00", + "finished_at": "2026-07-10T09:42:10.0719320+00:00", + "duration_seconds": 0.205, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-ready\\image-inventory.stdout.log", + "stderr": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-ready\\image-inventory.stderr.log" + }, + { + "name": "dev-stand-image-inspect-operator-console", + "executable": "C:\\Program Files\\Docker\\Docker\\resources\\bin\\docker.exe", + "arguments": [ + "inspect", + "1f9e23d5284a", + "--format", + "{{.Config.Image}}|{{.Image}}" + ], + "environment_keys": [], + "command": "C:\\Program Files\\Docker\\Docker\\resources\\bin\\docker.exe inspect 1f9e23d5284a --format {{.Config.Image}}|{{.Image}}", + "started_at": "2026-07-10T09:42:10.0780100+00:00", + "finished_at": "2026-07-10T09:42:10.2598886+00:00", + "duration_seconds": 0.182, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-ready\\image-inspect-operator-console.stdout.log", + "stderr": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-ready\\image-inspect-operator-console.stderr.log" + }, + { + "name": "dev-stand-image-tag-inspect-operator-console", + "executable": "C:\\Program Files\\Docker\\Docker\\resources\\bin\\docker.exe", + "arguments": [ + "image", + "inspect", + "ghcr.io/thebtf/engram-operator-console:main", + "--format", + "{{.Id}}" + ], + "environment_keys": [], + "command": "C:\\Program Files\\Docker\\Docker\\resources\\bin\\docker.exe image inspect ghcr.io/thebtf/engram-operator-console:main --format {{.Id}}", + "started_at": "2026-07-10T09:42:10.2622080+00:00", + "finished_at": "2026-07-10T09:42:10.4863428+00:00", + "duration_seconds": 0.224, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-ready\\image-tag-inspect-operator-console.stdout.log", + "stderr": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-ready\\image-tag-inspect-operator-console.stderr.log" + }, + { + "name": "dev-stand-image-inspect-server", + "executable": "C:\\Program Files\\Docker\\Docker\\resources\\bin\\docker.exe", + "arguments": [ + "inspect", + "e6d119b206fa", + "--format", + "{{.Config.Image}}|{{.Image}}" + ], + "environment_keys": [], + "command": "C:\\Program Files\\Docker\\Docker\\resources\\bin\\docker.exe inspect e6d119b206fa --format {{.Config.Image}}|{{.Image}}", + "started_at": "2026-07-10T09:42:10.4891718+00:00", + "finished_at": "2026-07-10T09:42:10.6751444+00:00", + "duration_seconds": 0.186, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-ready\\image-inspect-server.stdout.log", + "stderr": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-ready\\image-inspect-server.stderr.log" + }, + { + "name": "dev-stand-image-tag-inspect-server", + "executable": "C:\\Program Files\\Docker\\Docker\\resources\\bin\\docker.exe", + "arguments": [ + "image", + "inspect", + "ghcr.io/thebtf/engram:main", + "--format", + "{{.Id}}" + ], + "environment_keys": [], + "command": "C:\\Program Files\\Docker\\Docker\\resources\\bin\\docker.exe image inspect ghcr.io/thebtf/engram:main --format {{.Id}}", + "started_at": "2026-07-10T09:42:10.6757467+00:00", + "finished_at": "2026-07-10T09:42:10.8945614+00:00", + "duration_seconds": 0.219, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-ready\\image-tag-inspect-server.stdout.log", + "stderr": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-ready\\image-tag-inspect-server.stderr.log" + }, + { + "name": "dev-stand-image-inspect-postgres", + "executable": "C:\\Program Files\\Docker\\Docker\\resources\\bin\\docker.exe", + "arguments": [ + "inspect", + "a230a1d63fb3", + "--format", + "{{.Config.Image}}|{{.Image}}" + ], + "environment_keys": [], + "command": "C:\\Program Files\\Docker\\Docker\\resources\\bin\\docker.exe inspect a230a1d63fb3 --format {{.Config.Image}}|{{.Image}}", + "started_at": "2026-07-10T09:42:10.8953514+00:00", + "finished_at": "2026-07-10T09:42:11.0626370+00:00", + "duration_seconds": 0.167, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-ready\\image-inspect-postgres.stdout.log", + "stderr": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-ready\\image-inspect-postgres.stderr.log" + }, + { + "name": "dev-stand-image-tag-inspect-postgres", + "executable": "C:\\Program Files\\Docker\\Docker\\resources\\bin\\docker.exe", + "arguments": [ + "image", + "inspect", + "pgvector/pgvector:pg17", + "--format", + "{{.Id}}" + ], + "environment_keys": [], + "command": "C:\\Program Files\\Docker\\Docker\\resources\\bin\\docker.exe image inspect pgvector/pgvector:pg17 --format {{.Id}}", + "started_at": "2026-07-10T09:42:11.0633176+00:00", + "finished_at": "2026-07-10T09:42:11.2955306+00:00", + "duration_seconds": 0.232, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-ready\\image-tag-inspect-postgres.stdout.log", + "stderr": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-ready\\image-tag-inspect-postgres.stderr.log" + } +] diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/health.stderr.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/health.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/health.stdout.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/health.stdout.log new file mode 100644 index 00000000..9cb44649 --- /dev/null +++ b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/health.stdout.log @@ -0,0 +1,3 @@ +{"status":"ready","version":"dev"} + +200 \ No newline at end of file diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-inspect-operator-console.stderr.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-inspect-operator-console.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-inspect-operator-console.stdout.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-inspect-operator-console.stdout.log new file mode 100644 index 00000000..ef06e692 --- /dev/null +++ b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-inspect-operator-console.stdout.log @@ -0,0 +1 @@ +ghcr.io/thebtf/engram-operator-console:main|sha256:74d7c0db215c0a40d716c24f0326a487d7822ec94d0d0edc74b5fcf014face18 diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-inspect-postgres.stderr.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-inspect-postgres.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-inspect-postgres.stdout.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-inspect-postgres.stdout.log new file mode 100644 index 00000000..0fda45fb --- /dev/null +++ b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-inspect-postgres.stdout.log @@ -0,0 +1 @@ +pgvector/pgvector:pg17|sha256:feb68f4f15446397d8cac7f4fe48fe4586de83160d1fc48b46283312d1a33966 diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-inspect-server.stderr.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-inspect-server.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-inspect-server.stdout.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-inspect-server.stdout.log new file mode 100644 index 00000000..a62e1c97 --- /dev/null +++ b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-inspect-server.stdout.log @@ -0,0 +1 @@ +ghcr.io/thebtf/engram:main|sha256:a6e55d692ddf31a94b0a1d29a4e615ff509c6dac19eccafca4bda3e51147b38f diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-inventory.stderr.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-inventory.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-inventory.stdout.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-inventory.stdout.log new file mode 100644 index 00000000..6f9b8ff4 --- /dev/null +++ b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-inventory.stdout.log @@ -0,0 +1,3 @@ +1f9e23d5284a|operator-console +e6d119b206fa|server +a230a1d63fb3|postgres diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-tag-inspect-operator-console.stderr.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-tag-inspect-operator-console.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-tag-inspect-operator-console.stdout.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-tag-inspect-operator-console.stdout.log new file mode 100644 index 00000000..0b0905aa --- /dev/null +++ b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-tag-inspect-operator-console.stdout.log @@ -0,0 +1 @@ +sha256:74d7c0db215c0a40d716c24f0326a487d7822ec94d0d0edc74b5fcf014face18 diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-tag-inspect-postgres.stderr.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-tag-inspect-postgres.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-tag-inspect-postgres.stdout.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-tag-inspect-postgres.stdout.log new file mode 100644 index 00000000..893200d5 --- /dev/null +++ b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-tag-inspect-postgres.stdout.log @@ -0,0 +1 @@ +sha256:feb68f4f15446397d8cac7f4fe48fe4586de83160d1fc48b46283312d1a33966 diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-tag-inspect-server.stderr.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-tag-inspect-server.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-tag-inspect-server.stdout.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-tag-inspect-server.stdout.log new file mode 100644 index 00000000..55054a50 --- /dev/null +++ b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-tag-inspect-server.stdout.log @@ -0,0 +1 @@ +sha256:a6e55d692ddf31a94b0a1d29a4e615ff509c6dac19eccafca4bda3e51147b38f diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/operator-api-health.stderr.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/operator-api-health.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/operator-api-health.stdout.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/operator-api-health.stdout.log new file mode 100644 index 00000000..9cb44649 --- /dev/null +++ b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/operator-api-health.stdout.log @@ -0,0 +1,3 @@ +{"status":"ready","version":"dev"} + +200 \ No newline at end of file diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/operator-api-ready.stderr.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/operator-api-ready.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/operator-api-ready.stdout.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/operator-api-ready.stdout.log new file mode 100644 index 00000000..36aa5929 --- /dev/null +++ b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/operator-api-ready.stdout.log @@ -0,0 +1,3 @@ +{"status":"ready"} + +200 \ No newline at end of file diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/postgres-ready.stderr.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/postgres-ready.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/postgres-ready.stdout.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/postgres-ready.stdout.log new file mode 100644 index 00000000..e9330303 --- /dev/null +++ b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/postgres-ready.stdout.log @@ -0,0 +1 @@ +/var/run/postgresql:5432 - accepting connections diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/summary.json b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/summary.json new file mode 100644 index 00000000..6ef14563 --- /dev/null +++ b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/summary.json @@ -0,0 +1,92 @@ +{ + "schema_version": 1, + "gate": "dev-stand-contract", + "action": "Ready", + "run_id": "maker-runtime-1", + "started_at": "2026-07-10T09:42:09.0630906+00:00", + "finished_at": "2026-07-10T09:42:11.3076041+00:00", + "duration_seconds": 2.245, + "verdict": "PASS", + "compose_project": "engram-critical-stand", + "compose_file": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\docker-compose.yml", + "ephemeral_postgres_password_generated": false, + "ephemeral_admin_token_generated": false, + "ephemeral_bootstrap_capability_generated": false, + "ephemeral_credentials_distinct_and_nondefault": false, + "ephemeral_credentials_runtime_injected": false, + "ephemeral_postgres_password_persisted": false, + "ephemeral_admin_token_persisted": false, + "ephemeral_bootstrap_capability_persisted": false, + "exact_image_targets": { + "postgres": "pgvector/pgvector:pg17", + "server": "ghcr.io/thebtf/engram:main", + "operator-console": "ghcr.io/thebtf/engram-operator-console:main" + }, + "actual_images": { + "server": "ghcr.io/thebtf/engram:main", + "operator-console": "ghcr.io/thebtf/engram-operator-console:main", + "postgres": "pgvector/pgvector:pg17" + }, + "actual_image_ids": { + "server": "sha256:a6e55d692ddf31a94b0a1d29a4e615ff509c6dac19eccafca4bda3e51147b38f", + "operator-console": "sha256:74d7c0db215c0a40d716c24f0326a487d7822ec94d0d0edc74b5fcf014face18", + "postgres": "sha256:feb68f4f15446397d8cac7f4fe48fe4586de83160d1fc48b46283312d1a33966" + }, + "tag_image_ids": { + "server": "sha256:a6e55d692ddf31a94b0a1d29a4e615ff509c6dac19eccafca4bda3e51147b38f", + "operator-console": "sha256:74d7c0db215c0a40d716c24f0326a487d7822ec94d0d0edc74b5fcf014face18", + "postgres": "sha256:feb68f4f15446397d8cac7f4fe48fe4586de83160d1fc48b46283312d1a33966" + }, + "liveness_endpoints": [ + { + "name": "health", + "url": "http://localhost:37778/health", + "path_kind": "direct-server", + "contract_kind": "liveness", + "http_status": "200", + "semantic_contract_pass": true + }, + { + "name": "operator-api-health", + "url": "http://localhost:3001/api/health", + "path_kind": "operator-console-proxy", + "contract_kind": "liveness", + "http_status": "200", + "semantic_contract_pass": true + } + ], + "semantic_ready_endpoints": [ + { + "name": "api-ready", + "url": "http://localhost:37778/api/ready", + "path_kind": "direct-server", + "contract_kind": "readiness", + "http_status": "200", + "semantic_contract_pass": true + }, + { + "name": "operator-api-ready", + "url": "http://localhost:3001/api/ready", + "path_kind": "operator-console-proxy", + "contract_kind": "readiness", + "http_status": "200", + "semantic_contract_pass": true + } + ], + "vulnerability_scan": { + "scanner": "docker scout cves", + "severity_gate": [ + "critical", + "high" + ], + "scans": [] + }, + "automatic_failure_cleanup": false, + "residual_checks_performed": false, + "residual_resources_zero": null, + "child_commands": 12, + "nonzero_child_commands": 0, + "commands": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-ready\\commands.json", + "errors": [], + "artifact_directory": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-ready" +} diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/commands.json b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/commands.json new file mode 100644 index 00000000..5520009b --- /dev/null +++ b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/commands.json @@ -0,0 +1,214 @@ +[ + { + "name": "dev-stand-image-inventory", + "executable": "C:\\Program Files\\Docker\\Docker\\resources\\bin\\docker.exe", + "arguments": [ + "ps", + "--filter", + "label=com.docker.compose.project=engram-critical-stand", + "--format", + "{{.ID}}|{{.Label \"com.docker.compose.service\"}}" + ], + "environment_keys": [], + "command": "C:\\Program Files\\Docker\\Docker\\resources\\bin\\docker.exe ps --filter label=com.docker.compose.project=engram-critical-stand --format {{.ID}}|{{.Label \"com.docker.compose.service\"}}", + "started_at": "2026-07-10T09:42:11.9439324+00:00", + "finished_at": "2026-07-10T09:42:12.1985114+00:00", + "duration_seconds": 0.255, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-scan\\image-inventory.stdout.log", + "stderr": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-scan\\image-inventory.stderr.log" + }, + { + "name": "dev-stand-image-inspect-operator-console", + "executable": "C:\\Program Files\\Docker\\Docker\\resources\\bin\\docker.exe", + "arguments": [ + "inspect", + "1f9e23d5284a", + "--format", + "{{.Config.Image}}|{{.Image}}" + ], + "environment_keys": [], + "command": "C:\\Program Files\\Docker\\Docker\\resources\\bin\\docker.exe inspect 1f9e23d5284a --format {{.Config.Image}}|{{.Image}}", + "started_at": "2026-07-10T09:42:12.2532773+00:00", + "finished_at": "2026-07-10T09:42:12.4206208+00:00", + "duration_seconds": 0.167, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-scan\\image-inspect-operator-console.stdout.log", + "stderr": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-scan\\image-inspect-operator-console.stderr.log" + }, + { + "name": "dev-stand-image-tag-inspect-operator-console", + "executable": "C:\\Program Files\\Docker\\Docker\\resources\\bin\\docker.exe", + "arguments": [ + "image", + "inspect", + "ghcr.io/thebtf/engram-operator-console:main", + "--format", + "{{.Id}}" + ], + "environment_keys": [], + "command": "C:\\Program Files\\Docker\\Docker\\resources\\bin\\docker.exe image inspect ghcr.io/thebtf/engram-operator-console:main --format {{.Id}}", + "started_at": "2026-07-10T09:42:12.4229507+00:00", + "finished_at": "2026-07-10T09:42:12.6118876+00:00", + "duration_seconds": 0.189, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-scan\\image-tag-inspect-operator-console.stdout.log", + "stderr": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-scan\\image-tag-inspect-operator-console.stderr.log" + }, + { + "name": "dev-stand-image-inspect-server", + "executable": "C:\\Program Files\\Docker\\Docker\\resources\\bin\\docker.exe", + "arguments": [ + "inspect", + "e6d119b206fa", + "--format", + "{{.Config.Image}}|{{.Image}}" + ], + "environment_keys": [], + "command": "C:\\Program Files\\Docker\\Docker\\resources\\bin\\docker.exe inspect e6d119b206fa --format {{.Config.Image}}|{{.Image}}", + "started_at": "2026-07-10T09:42:12.6144738+00:00", + "finished_at": "2026-07-10T09:42:12.8085464+00:00", + "duration_seconds": 0.194, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-scan\\image-inspect-server.stdout.log", + "stderr": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-scan\\image-inspect-server.stderr.log" + }, + { + "name": "dev-stand-image-tag-inspect-server", + "executable": "C:\\Program Files\\Docker\\Docker\\resources\\bin\\docker.exe", + "arguments": [ + "image", + "inspect", + "ghcr.io/thebtf/engram:main", + "--format", + "{{.Id}}" + ], + "environment_keys": [], + "command": "C:\\Program Files\\Docker\\Docker\\resources\\bin\\docker.exe image inspect ghcr.io/thebtf/engram:main --format {{.Id}}", + "started_at": "2026-07-10T09:42:12.8096304+00:00", + "finished_at": "2026-07-10T09:42:13.0177443+00:00", + "duration_seconds": 0.208, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-scan\\image-tag-inspect-server.stdout.log", + "stderr": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-scan\\image-tag-inspect-server.stderr.log" + }, + { + "name": "dev-stand-image-inspect-postgres", + "executable": "C:\\Program Files\\Docker\\Docker\\resources\\bin\\docker.exe", + "arguments": [ + "inspect", + "a230a1d63fb3", + "--format", + "{{.Config.Image}}|{{.Image}}" + ], + "environment_keys": [], + "command": "C:\\Program Files\\Docker\\Docker\\resources\\bin\\docker.exe inspect a230a1d63fb3 --format {{.Config.Image}}|{{.Image}}", + "started_at": "2026-07-10T09:42:13.0187988+00:00", + "finished_at": "2026-07-10T09:42:13.2135401+00:00", + "duration_seconds": 0.195, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-scan\\image-inspect-postgres.stdout.log", + "stderr": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-scan\\image-inspect-postgres.stderr.log" + }, + { + "name": "dev-stand-image-tag-inspect-postgres", + "executable": "C:\\Program Files\\Docker\\Docker\\resources\\bin\\docker.exe", + "arguments": [ + "image", + "inspect", + "pgvector/pgvector:pg17", + "--format", + "{{.Id}}" + ], + "environment_keys": [], + "command": "C:\\Program Files\\Docker\\Docker\\resources\\bin\\docker.exe image inspect pgvector/pgvector:pg17 --format {{.Id}}", + "started_at": "2026-07-10T09:42:13.2142470+00:00", + "finished_at": "2026-07-10T09:42:13.4476094+00:00", + "duration_seconds": 0.233, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-scan\\image-tag-inspect-postgres.stdout.log", + "stderr": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-scan\\image-tag-inspect-postgres.stderr.log" + }, + { + "name": "dev-stand-vulnerability-scan-operator-console", + "executable": "C:\\Program Files\\Docker\\Docker\\resources\\bin\\docker.exe", + "arguments": [ + "scout", + "cves", + "--exit-code", + "--only-severity", + "critical,high", + "--format", + "sarif", + "--output", + "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-scan\\docker-scout-operator-console.sarif.json", + "local://ghcr.io/thebtf/engram-operator-console:main" + ], + "environment_keys": [], + "command": "C:\\Program Files\\Docker\\Docker\\resources\\bin\\docker.exe scout cves --exit-code --only-severity critical,high --format sarif --output D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-scan\\docker-scout-operator-console.sarif.json local://ghcr.io/thebtf/engram-operator-console:main", + "started_at": "2026-07-10T09:42:13.4622964+00:00", + "finished_at": "2026-07-10T09:42:26.5093394+00:00", + "duration_seconds": 13.047, + "exit_code": 2, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-scan\\docker-scout-operator-console.stdout.log", + "stderr": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-scan\\docker-scout-operator-console.stderr.log" + }, + { + "name": "dev-stand-vulnerability-scan-postgres", + "executable": "C:\\Program Files\\Docker\\Docker\\resources\\bin\\docker.exe", + "arguments": [ + "scout", + "cves", + "--exit-code", + "--only-severity", + "critical,high", + "--format", + "sarif", + "--output", + "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-scan\\docker-scout-postgres.sarif.json", + "local://pgvector/pgvector:pg17" + ], + "environment_keys": [], + "command": "C:\\Program Files\\Docker\\Docker\\resources\\bin\\docker.exe scout cves --exit-code --only-severity critical,high --format sarif --output D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-scan\\docker-scout-postgres.sarif.json local://pgvector/pgvector:pg17", + "started_at": "2026-07-10T09:42:26.5410737+00:00", + "finished_at": "2026-07-10T09:42:29.9949837+00:00", + "duration_seconds": 3.454, + "exit_code": 2, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-scan\\docker-scout-postgres.stdout.log", + "stderr": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-scan\\docker-scout-postgres.stderr.log" + }, + { + "name": "dev-stand-vulnerability-scan-server", + "executable": "C:\\Program Files\\Docker\\Docker\\resources\\bin\\docker.exe", + "arguments": [ + "scout", + "cves", + "--exit-code", + "--only-severity", + "critical,high", + "--format", + "sarif", + "--output", + "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-scan\\docker-scout-server.sarif.json", + "local://ghcr.io/thebtf/engram:main" + ], + "environment_keys": [], + "command": "C:\\Program Files\\Docker\\Docker\\resources\\bin\\docker.exe scout cves --exit-code --only-severity critical,high --format sarif --output D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-scan\\docker-scout-server.sarif.json local://ghcr.io/thebtf/engram:main", + "started_at": "2026-07-10T09:42:30.0019572+00:00", + "finished_at": "2026-07-10T09:42:38.3902556+00:00", + "duration_seconds": 8.388, + "exit_code": 2, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-scan\\docker-scout-server.stdout.log", + "stderr": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-scan\\docker-scout-server.stderr.log" + } +] diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/docker-scout-operator-console.sarif.json b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/docker-scout-operator-console.sarif.json new file mode 100644 index 00000000..ca9cf893 --- /dev/null +++ b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/docker-scout-operator-console.sarif.json @@ -0,0 +1,381 @@ +{ + "version": "2.1.0", + "$schema": "https://raw.githubusercontent.com/oasis-tcs/sarif-spec/main/sarif-2.1/schema/sarif-schema-2.1.0.json", + "runs": [ + { + "tool": { + "driver": { + "fullName": "Docker Scout", + "informationUri": "https://docker.com/products/docker-scout", + "name": "docker scout", + "rules": [ + { + "id": "CVE-2026-48962", + "name": "OsPackageVulnerability", + "shortDescription": { + "text": "CVE-2026-48962" + }, + "helpUri": "https://scout.docker.com/v/CVE-2026-48962?s=debian&n=perl&ns=debian&t=deb&osn=debian&osv=12&vr=%3E0", + "help": { + "text": "IO::Compress versions before 2.220 for Perl can execute arbitrary code in File::GlobMapper via an attacker-controlled output glob. _parseOutputGlob() wraps the caller-supplied output glob string in double quotes and stores it in the parser state; _getFiles() then runs the stored expression through eval STRING. A literal double quote in the output glob closes the dquote wrapper, and the characters that follow are evaluated as Perl. Arbitrary Perl in the output glob executes at the calling process's privilege.\n\n---\n- libio-compress-perl 2.220-1 (bug https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1138055)\n[trixie] - libio-compress-perl (Minor issue)\n- perl 5.40.1-8 (bug https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1138854)\nhttps://lists.security.metacpan.org/cve-announce/msg/40434385/\nFixed by: https://github.com/pmqs/IO-Compress/commit/f2db247bf90d4cc7ee2710be384946081f3b4610 (v2.220)\n", + "markdown": "> IO::Compress versions before 2.220 for Perl can execute arbitrary code in File::GlobMapper via an attacker-controlled output glob. _parseOutputGlob() wraps the caller-supplied output glob string in double quotes and stores it in the parser state; _getFiles() then runs the stored expression through eval STRING. A literal double quote in the output glob closes the dquote wrapper, and the characters that follow are evaluated as Perl. Arbitrary Perl in the output glob executes at the calling process's privilege.\n\n---\n- libio-compress-perl 2.220-1 (bug https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1138055)\n[trixie] - libio-compress-perl (Minor issue)\n- perl 5.40.1-8 (bug https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1138854)\nhttps://lists.security.metacpan.org/cve-announce/msg/40434385/\nFixed by: https://github.com/pmqs/IO-Compress/commit/f2db247bf90d4cc7ee2710be384946081f3b4610 (v2.220)\n\n| | |\n|----------------|----------------------------------------------------------------------------------------|\n| Package | pkg:deb/debian/perl@5.36.0-7%2Bdeb12u3?os_distro=bookworm&os_name=debian&os_version=12 |\n| Affected range | >0 |\n| Fixed version | not fixed |\n" + }, + "properties": { + "affected_version": ">0", + "cvssV3_severity": "HIGH", + "fixed_version": "not fixed", + "purls": [ + "pkg:deb/debian/perl@5.36.0-7%2Bdeb12u3?os_distro=bookworm&os_name=debian&os_version=12" + ], + "security-severity": "7.3", + "tags": [ + "HIGH" + ] + } + }, + { + "id": "CVE-2026-33671", + "name": "OsPackageVulnerability", + "shortDescription": { + "text": "CVE-2026-33671: Inefficient Regular Expression Complexity" + }, + "helpUri": "https://scout.docker.com/v/CVE-2026-33671?s=github&n=picomatch&t=npm&vr=%3E%3D4.0.0%2C%3C4.0.4", + "help": { + "text": "### Impact\n`picomatch` is vulnerable to Regular Expression Denial of Service (ReDoS) when processing crafted extglob patterns. Certain patterns using extglob quantifiers such as `+()` and `*()`, especially when combined with overlapping alternatives or nested extglobs, are compiled into regular expressions that can exhibit catastrophic backtracking on non-matching input.\n\nExamples of problematic patterns include `+(a|aa)`, `+(*|?)`, `+(+(a))`, `*(+(a))`, and `+(+(+(a)))`. In local reproduction, these patterns caused multi-second event-loop blocking with relatively short inputs. For example, `+(a|aa)` compiled to `^(?:(?=.)(?:a|aa)+)$` and took about 2 seconds to reject a 41-character non-matching input, while nested patterns such as `+(+(a))` and `*(+(a))` took around 29 seconds to reject a 33-character input on a modern M1 MacBook.\n\nApplications are impacted when they allow untrusted users to supply glob patterns that are passed to `picomatch` for compilation or matching. In those cases, an attacker can cause excessive CPU consumption and block the Node.js event loop, resulting in a denial of service. Applications that only use trusted, developer-controlled glob patterns are much less likely to be exposed in a security-relevant way.\n\n### Patches\nThis issue is fixed in picomatch 4.0.4, 3.0.2 and 2.3.2.\n\nUsers should upgrade to one of these versions or later, depending on their supported release line.\n\n### Workarounds\nIf upgrading is not immediately possible, avoid passing untrusted glob patterns to `picomatch`.\n\nPossible mitigations include:\n- disable extglob support for untrusted patterns by using `noextglob: true`\n- reject or sanitize patterns containing nested extglobs or extglob quantifiers such as `+()` and `*()`\n- enforce strict allowlists for accepted pattern syntax\n- run matching in an isolated worker or separate process with time and resource limits\n- apply application-level request throttling and input validation for any endpoint that accepts glob patterns\n\n### Resources\n- Picomatch repository: https://github.com/micromatch/picomatch\n- `lib/parse.js` and `lib/constants.js` are involved in generating the vulnerable regex forms\n- Comparable ReDoS precedent: CVE-2024-4067 (`micromatch`)\n- Comparable generated-regex precedent: CVE-2024-45296 (`path-to-regexp`)\n", + "markdown": "> ### Impact\n`picomatch` is vulnerable to Regular Expression Denial of Service (ReDoS) when processing crafted extglob patterns. Certain patterns using extglob quantifiers such as `+()` and `*()`, especially when combined with overlapping alternatives or nested extglobs, are compiled into regular expressions that can exhibit catastrophic backtracking on non-matching input.\n\nExamples of problematic patterns include `+(a|aa)`, `+(*|?)`, `+(+(a))`, `*(+(a))`, and `+(+(+(a)))`. In local reproduction, these patterns caused multi-second event-loop blocking with relatively short inputs. For example, `+(a|aa)` compiled to `^(?:(?=.)(?:a|aa)+)$` and took about 2 seconds to reject a 41-character non-matching input, while nested patterns such as `+(+(a))` and `*(+(a))` took around 29 seconds to reject a 33-character input on a modern M1 MacBook.\n\nApplications are impacted when they allow untrusted users to supply glob patterns that are passed to `picomatch` for compilation or matching. In those cases, an attacker can cause excessive CPU consumption and block the Node.js event loop, resulting in a denial of service. Applications that only use trusted, developer-controlled glob patterns are much less likely to be exposed in a security-relevant way.\n\n### Patches\nThis issue is fixed in picomatch 4.0.4, 3.0.2 and 2.3.2.\n\nUsers should upgrade to one of these versions or later, depending on their supported release line.\n\n### Workarounds\nIf upgrading is not immediately possible, avoid passing untrusted glob patterns to `picomatch`.\n\nPossible mitigations include:\n- disable extglob support for untrusted patterns by using `noextglob: true`\n- reject or sanitize patterns containing nested extglobs or extglob quantifiers such as `+()` and `*()`\n- enforce strict allowlists for accepted pattern syntax\n- run matching in an isolated worker or separate process with time and resource limits\n- apply application-level request throttling and input validation for any endpoint that accepts glob patterns\n\n### Resources\n- Picomatch repository: https://github.com/micromatch/picomatch\n- `lib/parse.js` and `lib/constants.js` are involved in generating the vulnerable regex forms\n- Comparable ReDoS precedent: CVE-2024-4067 (`micromatch`)\n- Comparable generated-regex precedent: CVE-2024-45296 (`path-to-regexp`)\n\n| | |\n|----------------|----------------------------------------------|\n| Package | pkg:npm/picomatch@4.0.3 |\n| Affected range | >=4.0.0,<4.0.4 |\n| Fixed version | 4.0.4 |\n| CVSS Score | 7.5 |\n| CVSS Vector | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H |\n" + }, + "properties": { + "affected_version": ">=4.0.0,<4.0.4", + "cvssV3": 7.5, + "cvssV3_severity": "HIGH", + "cvssV3_vector": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H", + "fixed_version": "4.0.4", + "purls": [ + "pkg:npm/picomatch@4.0.3" + ], + "security-severity": "7.5", + "tags": [ + "HIGH" + ] + } + }, + { + "id": "CVE-2026-48815", + "name": "OsPackageVulnerability", + "shortDescription": { + "text": "CVE-2026-48815: Improper Verification of Cryptographic Signature" + }, + "helpUri": "https://scout.docker.com/v/CVE-2026-48815?s=github&n=sigstore&t=npm&vr=%3C%3D4.1.0", + "help": { + "text": "### Summary\n\nThe documented `certificateOIDs` option in `sigstore.verify()` is accepted by the public API but discarded before verification, so required certificate extension OIDs are never checked.\n\n### Details\n\nThe public verify options include `certificateOIDs` and the documentation says those OID/value pairs “must be present in the certificate’s extension list.” The policy-construction path used by `sigstore.verify()` and `createVerifier()` only copies the SAN and issuer settings into the verification policy and completely ignores `certificateOIDs`.\n\nAs a result, callers can believe they are constraining verification to certificates carrying specific Fulcio or workload-identifying OIDs, while the actual verifier never receives those constraints. Any bundle that satisfies the remaining checks is accepted even if the required OID extensions are absent or mismatched.\n\nThis is reachable from supported usage through the documented `certificateOIDs` verify option.\n\n### PoC\n\n```javascript\nconst { createVerificationPolicy } = require(\"sigstore/dist/config\");\n\nconst policy = createVerificationPolicy({\n certificateIssuer: \"https://issuer.example\",\n certificateIdentityEmail: \"victim@example.com\",\n certificateOIDs: {\n \"1.2.3.4\": \"required-value\",\n },\n});\n\nconsole.log(\"certificateOIDs\" in policy, JSON.stringify(policy));\n// false {\"subjectAlternativeName\":\"victim@example.com\",\"extensions\":{\"issuer\":\"https://issuer.example\"}}\n```\n\n### Impact\n\nApplications that rely on `certificateOIDs` to restrict which certificates may sign artifacts receive no such protection. Unauthorized certificates that should be rejected on extension policy can be accepted as long as they satisfy the remaining verification checks.\n", + "markdown": "> ### Summary\n\nThe documented `certificateOIDs` option in `sigstore.verify()` is accepted by the public API but discarded before verification, so required certificate extension OIDs are never checked.\n\n### Details\n\nThe public verify options include `certificateOIDs` and the documentation says those OID/value pairs “must be present in the certificate’s extension list.” The policy-construction path used by `sigstore.verify()` and `createVerifier()` only copies the SAN and issuer settings into the verification policy and completely ignores `certificateOIDs`.\n\nAs a result, callers can believe they are constraining verification to certificates carrying specific Fulcio or workload-identifying OIDs, while the actual verifier never receives those constraints. Any bundle that satisfies the remaining checks is accepted even if the required OID extensions are absent or mismatched.\n\nThis is reachable from supported usage through the documented `certificateOIDs` verify option.\n\n### PoC\n\n```javascript\nconst { createVerificationPolicy } = require(\"sigstore/dist/config\");\n\nconst policy = createVerificationPolicy({\n certificateIssuer: \"https://issuer.example\",\n certificateIdentityEmail: \"victim@example.com\",\n certificateOIDs: {\n \"1.2.3.4\": \"required-value\",\n },\n});\n\nconsole.log(\"certificateOIDs\" in policy, JSON.stringify(policy));\n// false {\"subjectAlternativeName\":\"victim@example.com\",\"extensions\":{\"issuer\":\"https://issuer.example\"}}\n```\n\n### Impact\n\nApplications that rely on `certificateOIDs` to restrict which certificates may sign artifacts receive no such protection. Unauthorized certificates that should be rejected on extension policy can be accepted as long as they satisfy the remaining verification checks.\n\n| | |\n|----------------|----------------------------------------------|\n| Package | pkg:npm/sigstore@3.1.0 |\n| Affected range | <=4.1.0 |\n| Fixed version | 4.1.1 |\n| CVSS Score | 7.5 |\n| CVSS Vector | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:N |\n" + }, + "properties": { + "affected_version": "<=4.1.0", + "cvssV3": 7.5, + "cvssV3_severity": "HIGH", + "cvssV3_vector": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:N", + "fixed_version": "4.1.1", + "purls": [ + "pkg:npm/sigstore@3.1.0" + ], + "security-severity": "7.5", + "tags": [ + "HIGH" + ] + } + }, + { + "id": "CVE-2026-48959", + "name": "OsPackageVulnerability", + "shortDescription": { + "text": "CVE-2026-48959" + }, + "helpUri": "https://scout.docker.com/v/CVE-2026-48959?s=debian&n=perl&ns=debian&t=deb&osn=debian&osv=12&vr=%3E0", + "help": { + "text": "IO::Uncompress::Unzip versions before 2.220 for Perl allow CPU exhaustion via per-byte read loop in fastForward. fastForward() compares length $offset (the digit count of the offset, 1 to 19) against the chunk size $c instead of $offset itself, so $c shrinks from 16 KiB to 1-19 bytes per iteration. Extracting a named entry from an attacker supplied zip via IO::Uncompress::Unzip->new($zip, Name => $target) drives a per-byte read loop scaling with the entry's compressed size, up to the non-Zip64 4 GiB cap.\n\n---\n- libio-compress-perl 2.220-1 (bug https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1138051)\n[trixie] - libio-compress-perl (Minor issue)\n- perl 5.40.1-8 (bug https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1138856)\nhttps://lists.security.metacpan.org/cve-announce/msg/40434381/\nFixed by: https://github.com/pmqs/IO-Compress/commit/68db44076f4c1a86a2ffe53a958eac6cabaf72e2 (v2.220)\n", + "markdown": "> IO::Uncompress::Unzip versions before 2.220 for Perl allow CPU exhaustion via per-byte read loop in fastForward. fastForward() compares length $offset (the digit count of the offset, 1 to 19) against the chunk size $c instead of $offset itself, so $c shrinks from 16 KiB to 1-19 bytes per iteration. Extracting a named entry from an attacker supplied zip via IO::Uncompress::Unzip->new($zip, Name => $target) drives a per-byte read loop scaling with the entry's compressed size, up to the non-Zip64 4 GiB cap.\n\n---\n- libio-compress-perl 2.220-1 (bug https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1138051)\n[trixie] - libio-compress-perl (Minor issue)\n- perl 5.40.1-8 (bug https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1138856)\nhttps://lists.security.metacpan.org/cve-announce/msg/40434381/\nFixed by: https://github.com/pmqs/IO-Compress/commit/68db44076f4c1a86a2ffe53a958eac6cabaf72e2 (v2.220)\n\n| | |\n|----------------|----------------------------------------------------------------------------------------|\n| Package | pkg:deb/debian/perl@5.36.0-7%2Bdeb12u3?os_distro=bookworm&os_name=debian&os_version=12 |\n| Affected range | >0 |\n| Fixed version | not fixed |\n" + }, + "properties": { + "affected_version": ">0", + "cvssV3_severity": "HIGH", + "fixed_version": "not fixed", + "purls": [ + "pkg:deb/debian/perl@5.36.0-7%2Bdeb12u3?os_distro=bookworm&os_name=debian&os_version=12" + ], + "security-severity": "7.5", + "tags": [ + "HIGH" + ] + } + }, + { + "id": "CVE-2026-12087", + "name": "OsPackageVulnerability", + "shortDescription": { + "text": "CVE-2026-12087" + }, + "helpUri": "https://scout.docker.com/v/CVE-2026-12087?s=debian&n=perl&ns=debian&t=deb&osn=debian&osv=12&vr=%3E0", + "help": { + "text": "Socket versions before 2.041 for Perl have an out-of-bounds heap read. In Socket.xs, pack_ip_mreq_source() checks the length of its source argument before the argument is read, so the check tests the byte length carried over from the preceding multiaddr argument instead. Both addresses occupy a 4-byte field, so a valid multiaddr lets a source of any length pass the check, and the source is then copied into the 4-byte imr_sourceaddr field with a fixed-size copy. A source shorter than 4 bytes is not rejected, and the copy reads up to 3 bytes past the end of its buffer. Calling pack_ip_mreq_source() with a source value shorter than 4 bytes copies adjacent heap memory into the returned packed structure.\n\n---\n- libsocket-perl 2.041-1\n[trixie] - libsocket-perl (Minor issue)\n- perl (bug https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1140152)\nhttps://lists.security.metacpan.org/cve-announce/msg/41020451/\nFixed by: https://github.com/Perl/perl5/commit/de19a0b0ad1900fef976c5c1400bd8f11ec6c6cb (v5.43.11)\n", + "markdown": "> Socket versions before 2.041 for Perl have an out-of-bounds heap read. In Socket.xs, pack_ip_mreq_source() checks the length of its source argument before the argument is read, so the check tests the byte length carried over from the preceding multiaddr argument instead. Both addresses occupy a 4-byte field, so a valid multiaddr lets a source of any length pass the check, and the source is then copied into the 4-byte imr_sourceaddr field with a fixed-size copy. A source shorter than 4 bytes is not rejected, and the copy reads up to 3 bytes past the end of its buffer. Calling pack_ip_mreq_source() with a source value shorter than 4 bytes copies adjacent heap memory into the returned packed structure.\n\n---\n- libsocket-perl 2.041-1\n[trixie] - libsocket-perl (Minor issue)\n- perl (bug https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1140152)\nhttps://lists.security.metacpan.org/cve-announce/msg/41020451/\nFixed by: https://github.com/Perl/perl5/commit/de19a0b0ad1900fef976c5c1400bd8f11ec6c6cb (v5.43.11)\n\n| | |\n|----------------|----------------------------------------------------------------------------------------|\n| Package | pkg:deb/debian/perl@5.36.0-7%2Bdeb12u3?os_distro=bookworm&os_name=debian&os_version=12 |\n| Affected range | >0 |\n| Fixed version | not fixed |\n" + }, + "properties": { + "affected_version": ">0", + "cvssV3_severity": "CRITICAL", + "fixed_version": "not fixed", + "purls": [ + "pkg:deb/debian/perl@5.36.0-7%2Bdeb12u3?os_distro=bookworm&os_name=debian&os_version=12" + ], + "security-severity": "9.1", + "tags": [ + "CRITICAL" + ] + } + } + ], + "version": "1.18.3" + } + }, + "results": [ + { + "ruleId": "CVE-2026-48962", + "ruleIndex": 0, + "kind": "fail", + "level": "error", + "message": { + "text": " Vulnerability : CVE-2026-48962 \n Severity : HIGH \n Package : pkg:deb/debian/perl@5.36.0-7%2Bdeb12u3?os_distro=bookworm&os_name=debian&os_version=12 \n Affected range : >0 \n Fixed version : not fixed \n EPSS Score : 0.002920 \n EPSS Percentile : 0.209720 \n" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "/usr/share/doc/perl-base/copyright" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/perl-base.list" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/perl-base.md5sums" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/perl-base.postinst" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/perl-base.postrm" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/perl-base.preinst" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/perl-base.prerm" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/status" + } + } + } + ] + }, + { + "ruleId": "CVE-2026-33671", + "ruleIndex": 1, + "kind": "fail", + "level": "error", + "message": { + "text": " Vulnerability : CVE-2026-33671 \n Severity : HIGH \n Package : pkg:npm/picomatch@4.0.3 \n Affected range : >=4.0.0,<4.0.4 \n Fixed version : 4.0.4 \n CVSS Score : 7.5 \n CVSS Vector : CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H \n EPSS Score : 0.004120 \n EPSS Percentile : 0.331630 \n" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "/usr/local/lib/node_modules/npm/node_modules/picomatch/package.json" + } + } + } + ] + }, + { + "ruleId": "CVE-2026-48815", + "ruleIndex": 2, + "kind": "fail", + "level": "error", + "message": { + "text": " Vulnerability : CVE-2026-48815 \n Severity : HIGH \n Package : pkg:npm/sigstore@3.1.0 \n Affected range : <=4.1.0 \n Fixed version : 4.1.1 \n CVSS Score : 7.5 \n CVSS Vector : CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:N \n" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "/usr/local/lib/node_modules/npm/node_modules/sigstore/package.json" + } + } + } + ] + }, + { + "ruleId": "CVE-2026-48959", + "ruleIndex": 3, + "kind": "fail", + "level": "error", + "message": { + "text": " Vulnerability : CVE-2026-48959 \n Severity : HIGH \n Package : pkg:deb/debian/perl@5.36.0-7%2Bdeb12u3?os_distro=bookworm&os_name=debian&os_version=12 \n Affected range : >0 \n Fixed version : not fixed \n EPSS Score : 0.003730 \n EPSS Percentile : 0.294000 \n" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "/usr/share/doc/perl-base/copyright" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/perl-base.list" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/perl-base.md5sums" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/perl-base.postinst" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/perl-base.postrm" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/perl-base.preinst" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/perl-base.prerm" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/status" + } + } + } + ] + }, + { + "ruleId": "CVE-2026-12087", + "ruleIndex": 4, + "kind": "fail", + "level": "error", + "message": { + "text": " Vulnerability : CVE-2026-12087 \n Severity : CRITICAL \n Package : pkg:deb/debian/perl@5.36.0-7%2Bdeb12u3?os_distro=bookworm&os_name=debian&os_version=12 \n Affected range : >0 \n Fixed version : not fixed \n EPSS Score : 0.003890 \n EPSS Percentile : 0.309730 \n" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "/usr/share/doc/perl-base/copyright" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/perl-base.list" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/perl-base.md5sums" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/perl-base.postinst" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/perl-base.postrm" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/perl-base.preinst" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/perl-base.prerm" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/status" + } + } + } + ] + } + ] + } + ] +} diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/docker-scout-operator-console.stderr.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/docker-scout-operator-console.stderr.log new file mode 100644 index 00000000..8644748a --- /dev/null +++ b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/docker-scout-operator-console.stderr.log @@ -0,0 +1,7 @@ + i New version 1.23.1 available (installed version is 1.18.3) at https://github.com/docker/scout-cli + ...Storing image for indexing + v Image stored for indexing + ...Indexing + v Indexed 340 packages + x Detected 3 vulnerable packages with a total of 5 vulnerabilities + v Report written to D:\Dev\engram\.agent\worktrees\prc-release-gates\.agent\reports\evidence\production-ready\release-gates-foundation-revision-3\dev-stand-runtime\maker-runtime-1\nested\dev-stand\maker-runtime-1-scan\docker-scout-operator-console.sarif.json diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/docker-scout-operator-console.stdout.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/docker-scout-operator-console.stdout.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/docker-scout-postgres.sarif.json b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/docker-scout-postgres.sarif.json new file mode 100644 index 00000000..2de644b7 --- /dev/null +++ b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/docker-scout-postgres.sarif.json @@ -0,0 +1,3142 @@ +{ + "version": "2.1.0", + "$schema": "https://raw.githubusercontent.com/oasis-tcs/sarif-spec/main/sarif-2.1/schema/sarif-schema-2.1.0.json", + "runs": [ + { + "tool": { + "driver": { + "fullName": "Docker Scout", + "informationUri": "https://docker.com/products/docker-scout", + "name": "docker scout", + "rules": [ + { + "id": "CVE-2026-42010", + "name": "OsPackageVulnerability", + "shortDescription": { + "text": "CVE-2026-42010" + }, + "helpUri": "https://scout.docker.com/v/CVE-2026-42010?s=debian&n=gnutls28&ns=debian&t=deb&osn=debian&osv=12&vr=%3C3.7.9-2%2Bdeb12u7", + "help": { + "text": "A flaw was found in gnutls. Servers configured with RSA-PSK (Rivest–Shamir–Adleman – Pre-Shared Key) wrongfully matched usernames containing a NUL character with truncated usernames. A remote attacker could exploit this by sending a specially crafted username, leading to an authentication bypass. This vulnerability allows an attacker to gain unauthorized access by circumventing the authentication process.\n\n---\n- gnutls28 3.8.13-1 (bug https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1135319)\nhttps://www.gnutls.org/security-new.html#GNUTLS-SA-2026-04-29-4\nhttps://gitlab.com/gnutls/gnutls/-/issues/1850\nFixed by: https://gitlab.com/gnutls/gnutls/-/commit/cb1833afd9b6309563211b1c0a7c291f52ca98d5 (3.8.13)\nIntroduced with: https://gitlab.com/gnutls/gnutls/-/commit/d00638997fa269a975095d852633b48b2b64fbf9 (3.6.13)\n", + "markdown": "> A flaw was found in gnutls. Servers configured with RSA-PSK (Rivest–Shamir–Adleman – Pre-Shared Key) wrongfully matched usernames containing a NUL character with truncated usernames. A remote attacker could exploit this by sending a specially crafted username, leading to an authentication bypass. This vulnerability allows an attacker to gain unauthorized access by circumventing the authentication process.\n\n---\n- gnutls28 3.8.13-1 (bug https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1135319)\nhttps://www.gnutls.org/security-new.html#GNUTLS-SA-2026-04-29-4\nhttps://gitlab.com/gnutls/gnutls/-/issues/1850\nFixed by: https://gitlab.com/gnutls/gnutls/-/commit/cb1833afd9b6309563211b1c0a7c291f52ca98d5 (3.8.13)\nIntroduced with: https://gitlab.com/gnutls/gnutls/-/commit/d00638997fa269a975095d852633b48b2b64fbf9 (3.6.13)\n\n| | |\n|----------------|-------------------------------------------------------------------------------------------|\n| Package | pkg:deb/debian/gnutls28@3.7.9-2%2Bdeb12u6?os_distro=bookworm&os_name=debian&os_version=12 |\n| Affected range | <3.7.9-2+deb12u7 |\n| Fixed version | 3.7.9-2+deb12u7 |\n" + }, + "properties": { + "affected_version": "<3.7.9-2+deb12u7", + "cvssV3_severity": "HIGH", + "fixed_version": "3.7.9-2+deb12u7", + "purls": [ + "pkg:deb/debian/gnutls28@3.7.9-2%2Bdeb12u6?os_distro=bookworm&os_name=debian&os_version=12" + ], + "security-severity": "7.1", + "tags": [ + "HIGH" + ] + } + }, + { + "id": "CVE-2026-42012", + "name": "OsPackageVulnerability", + "shortDescription": { + "text": "CVE-2026-42012" + }, + "helpUri": "https://scout.docker.com/v/CVE-2026-42012?s=debian&n=gnutls28&ns=debian&t=deb&osn=debian&osv=12&vr=%3C3.7.9-2%2Bdeb12u7", + "help": { + "text": "A flaw was found in gnutls. A remote attacker could exploit this vulnerability by presenting a specially crafted certificate that contains Uniform Resource Identifier (URI) or Service (SRV) Subject Alternative Names (SANs). This could cause the certificate validation process to incorrectly fall back to checking DNS hostnames against the Common Name (CN), potentially allowing the attacker to spoof legitimate services or intercept sensitive information.\n\n---\n- gnutls28 3.8.13-1 (bug https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1135319)\nhttps://www.gnutls.org/security-new.html#GNUTLS-SA-2026-04-29-7\nhttps://gitlab.com/gnutls/gnutls/-/issues/1802\nFixed by: https://gitlab.com/gnutls/gnutls/-/commit/8dcc6a1f48945997666ac9f10896819edd01a03b (3.8.13)\n", + "markdown": "> A flaw was found in gnutls. A remote attacker could exploit this vulnerability by presenting a specially crafted certificate that contains Uniform Resource Identifier (URI) or Service (SRV) Subject Alternative Names (SANs). This could cause the certificate validation process to incorrectly fall back to checking DNS hostnames against the Common Name (CN), potentially allowing the attacker to spoof legitimate services or intercept sensitive information.\n\n---\n- gnutls28 3.8.13-1 (bug https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1135319)\nhttps://www.gnutls.org/security-new.html#GNUTLS-SA-2026-04-29-7\nhttps://gitlab.com/gnutls/gnutls/-/issues/1802\nFixed by: https://gitlab.com/gnutls/gnutls/-/commit/8dcc6a1f48945997666ac9f10896819edd01a03b (3.8.13)\n\n| | |\n|----------------|-------------------------------------------------------------------------------------------|\n| Package | pkg:deb/debian/gnutls28@3.7.9-2%2Bdeb12u6?os_distro=bookworm&os_name=debian&os_version=12 |\n| Affected range | <3.7.9-2+deb12u7 |\n| Fixed version | 3.7.9-2+deb12u7 |\n" + }, + "properties": { + "affected_version": "<3.7.9-2+deb12u7", + "cvssV3_severity": "HIGH", + "fixed_version": "3.7.9-2+deb12u7", + "purls": [ + "pkg:deb/debian/gnutls28@3.7.9-2%2Bdeb12u6?os_distro=bookworm&os_name=debian&os_version=12" + ], + "security-severity": "7.1", + "tags": [ + "HIGH" + ] + } + }, + { + "id": "CVE-2026-48962", + "name": "OsPackageVulnerability", + "shortDescription": { + "text": "CVE-2026-48962" + }, + "helpUri": "https://scout.docker.com/v/CVE-2026-48962?s=debian&n=perl&ns=debian&t=deb&osn=debian&osv=12&vr=%3E0", + "help": { + "text": "IO::Compress versions before 2.220 for Perl can execute arbitrary code in File::GlobMapper via an attacker-controlled output glob. _parseOutputGlob() wraps the caller-supplied output glob string in double quotes and stores it in the parser state; _getFiles() then runs the stored expression through eval STRING. A literal double quote in the output glob closes the dquote wrapper, and the characters that follow are evaluated as Perl. Arbitrary Perl in the output glob executes at the calling process's privilege.\n\n---\n- libio-compress-perl 2.220-1 (bug https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1138055)\n[trixie] - libio-compress-perl (Minor issue)\n- perl 5.40.1-8 (bug https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1138854)\nhttps://lists.security.metacpan.org/cve-announce/msg/40434385/\nFixed by: https://github.com/pmqs/IO-Compress/commit/f2db247bf90d4cc7ee2710be384946081f3b4610 (v2.220)\n", + "markdown": "> IO::Compress versions before 2.220 for Perl can execute arbitrary code in File::GlobMapper via an attacker-controlled output glob. _parseOutputGlob() wraps the caller-supplied output glob string in double quotes and stores it in the parser state; _getFiles() then runs the stored expression through eval STRING. A literal double quote in the output glob closes the dquote wrapper, and the characters that follow are evaluated as Perl. Arbitrary Perl in the output glob executes at the calling process's privilege.\n\n---\n- libio-compress-perl 2.220-1 (bug https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1138055)\n[trixie] - libio-compress-perl (Minor issue)\n- perl 5.40.1-8 (bug https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1138854)\nhttps://lists.security.metacpan.org/cve-announce/msg/40434385/\nFixed by: https://github.com/pmqs/IO-Compress/commit/f2db247bf90d4cc7ee2710be384946081f3b4610 (v2.220)\n\n| | |\n|----------------|----------------------------------------------------------------------------------------|\n| Package | pkg:deb/debian/perl@5.36.0-7%2Bdeb12u3?os_distro=bookworm&os_name=debian&os_version=12 |\n| Affected range | >0 |\n| Fixed version | not fixed |\n" + }, + "properties": { + "affected_version": ">0", + "cvssV3_severity": "HIGH", + "fixed_version": "not fixed", + "purls": [ + "pkg:deb/debian/perl@5.36.0-7%2Bdeb12u3?os_distro=bookworm&os_name=debian&os_version=12" + ], + "security-severity": "7.3", + "tags": [ + "HIGH" + ] + } + }, + { + "id": "CVE-2026-42011", + "name": "OsPackageVulnerability", + "shortDescription": { + "text": "CVE-2026-42011" + }, + "helpUri": "https://scout.docker.com/v/CVE-2026-42011?s=debian&n=gnutls28&ns=debian&t=deb&osn=debian&osv=12&vr=%3C3.7.9-2%2Bdeb12u7", + "help": { + "text": "A flaw was found in gnutls. This vulnerability occurs because permitted name constraints were incorrectly ignored when previous Certificate Authorities (CAs) only had excluded name constraints. A remote attacker could exploit this to bypass critical name constraint checks during certificate validation. This bypass could lead to the acceptance of invalid certificates, potentially enabling spoofing or man-in-the-middle attacks against affected systems.\n\n---\n- gnutls28 3.8.13-1 (bug https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1135319)\nhttps://www.gnutls.org/security-new.html#GNUTLS-SA-2026-04-29-6\nhttps://gitlab.com/gnutls/gnutls/-/work_items/1824\nFixed by: https://gitlab.com/gnutls/gnutls/-/commit/1dead2faec6320aaba321eb56f20d442df192b83 (3.8.13)\n", + "markdown": "> A flaw was found in gnutls. This vulnerability occurs because permitted name constraints were incorrectly ignored when previous Certificate Authorities (CAs) only had excluded name constraints. A remote attacker could exploit this to bypass critical name constraint checks during certificate validation. This bypass could lead to the acceptance of invalid certificates, potentially enabling spoofing or man-in-the-middle attacks against affected systems.\n\n---\n- gnutls28 3.8.13-1 (bug https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1135319)\nhttps://www.gnutls.org/security-new.html#GNUTLS-SA-2026-04-29-6\nhttps://gitlab.com/gnutls/gnutls/-/work_items/1824\nFixed by: https://gitlab.com/gnutls/gnutls/-/commit/1dead2faec6320aaba321eb56f20d442df192b83 (3.8.13)\n\n| | |\n|----------------|-------------------------------------------------------------------------------------------|\n| Package | pkg:deb/debian/gnutls28@3.7.9-2%2Bdeb12u6?os_distro=bookworm&os_name=debian&os_version=12 |\n| Affected range | <3.7.9-2+deb12u7 |\n| Fixed version | 3.7.9-2+deb12u7 |\n" + }, + "properties": { + "affected_version": "<3.7.9-2+deb12u7", + "cvssV3_severity": "HIGH", + "fixed_version": "3.7.9-2+deb12u7", + "purls": [ + "pkg:deb/debian/gnutls28@3.7.9-2%2Bdeb12u6?os_distro=bookworm&os_name=debian&os_version=12" + ], + "security-severity": "7.4", + "tags": [ + "HIGH" + ] + } + }, + { + "id": "CVE-2025-15281", + "name": "OsPackageVulnerability", + "shortDescription": { + "text": "CVE-2025-15281" + }, + "helpUri": "https://scout.docker.com/v/CVE-2025-15281?s=debian&n=glibc&ns=debian&t=deb&osn=debian&osv=12&vr=%3C2.36-9%2Bdeb12u14", + "help": { + "text": "Calling wordexp with WRDE_REUSE in conjunction with WRDE_APPEND in the GNU C Library version 2.0 to version 2.42 may cause the interface to return uninitialized memory in the we_wordv member, which on subsequent calls to wordfree may abort the process.\n\n---\n- glibc 2.42-11 (bug https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1126266)\n[trixie] - glibc 2.41-12+deb13u2\n[bookworm] - glibc 2.36-9+deb12u14\nhttps://www.openwall.com/lists/oss-security/2026/01/20/3\nIntroduced with: https://sourceware.org/git/?p=glibc.git;a=commit;h=8f2ece695d8822e9ecc63ecd157e90bf17a6fe65 (glibc-2.0.92)\nFixed by: https://sourceware.org/git/?p=glibc.git;a=commit;h=80cc58ea2de214f85b0a1d902a3b668ad2ecb302 (glibc-2.43)\n", + "markdown": "> Calling wordexp with WRDE_REUSE in conjunction with WRDE_APPEND in the GNU C Library version 2.0 to version 2.42 may cause the interface to return uninitialized memory in the we_wordv member, which on subsequent calls to wordfree may abort the process.\n\n---\n- glibc 2.42-11 (bug https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1126266)\n[trixie] - glibc 2.41-12+deb13u2\n[bookworm] - glibc 2.36-9+deb12u14\nhttps://www.openwall.com/lists/oss-security/2026/01/20/3\nIntroduced with: https://sourceware.org/git/?p=glibc.git;a=commit;h=8f2ece695d8822e9ecc63ecd157e90bf17a6fe65 (glibc-2.0.92)\nFixed by: https://sourceware.org/git/?p=glibc.git;a=commit;h=80cc58ea2de214f85b0a1d902a3b668ad2ecb302 (glibc-2.43)\n\n| | |\n|----------------|----------------------------------------------------------------------------------------|\n| Package | pkg:deb/debian/glibc@2.36-9%2Bdeb12u13?os_distro=bookworm&os_name=debian&os_version=12 |\n| Affected range | <2.36-9+deb12u14 |\n| Fixed version | 2.36-9+deb12u14 |\n" + }, + "properties": { + "affected_version": "<2.36-9+deb12u14", + "cvssV3_severity": "HIGH", + "fixed_version": "2.36-9+deb12u14", + "purls": [ + "pkg:deb/debian/glibc@2.36-9%2Bdeb12u13?os_distro=bookworm&os_name=debian&os_version=12" + ], + "security-severity": "7.5", + "tags": [ + "HIGH" + ] + } + }, + { + "id": "CVE-2025-58187", + "name": "OsPackageVulnerability", + "shortDescription": { + "text": "CVE-2025-58187" + }, + "helpUri": "https://scout.docker.com/v/CVE-2025-58187?s=golang&n=stdlib&t=golang&vr=%3C1.24.9", + "help": { + "text": "Due to the design of the name constraint checking algorithm, the processing time of some inputs scale non-linearly with respect to the size of the certificate.\n\nThis affects programs which validate arbitrary certificate chains.\n", + "markdown": "> Due to the design of the name constraint checking algorithm, the processing time of some inputs scale non-linearly with respect to the size of the certificate.\n\nThis affects programs which validate arbitrary certificate chains.\n\n| | |\n|----------------|--------------------------|\n| Package | pkg:golang/stdlib@1.24.6 |\n| Affected range | <1.24.9 |\n| Fixed version | 1.24.9 |\n" + }, + "properties": { + "affected_version": "<1.24.9", + "cvssV3_severity": "HIGH", + "fixed_version": "1.24.9", + "purls": [ + "pkg:golang/stdlib@1.24.6" + ], + "security-severity": "7.5", + "tags": [ + "HIGH" + ] + } + }, + { + "id": "CVE-2025-58188", + "name": "OsPackageVulnerability", + "shortDescription": { + "text": "CVE-2025-58188" + }, + "helpUri": "https://scout.docker.com/v/CVE-2025-58188?s=golang&n=stdlib&t=golang&vr=%3C1.24.8", + "help": { + "text": "Validating certificate chains which contain DSA public keys can cause programs to panic, due to a interface cast that assumes they implement the Equal method.\n\nThis affects programs which validate arbitrary certificate chains.\n", + "markdown": "> Validating certificate chains which contain DSA public keys can cause programs to panic, due to a interface cast that assumes they implement the Equal method.\n\nThis affects programs which validate arbitrary certificate chains.\n\n| | |\n|----------------|--------------------------|\n| Package | pkg:golang/stdlib@1.24.6 |\n| Affected range | <1.24.8 |\n| Fixed version | 1.24.8 |\n" + }, + "properties": { + "affected_version": "<1.24.8", + "cvssV3_severity": "HIGH", + "fixed_version": "1.24.8", + "purls": [ + "pkg:golang/stdlib@1.24.6" + ], + "security-severity": "7.5", + "tags": [ + "HIGH" + ] + } + }, + { + "id": "CVE-2025-61723", + "name": "OsPackageVulnerability", + "shortDescription": { + "text": "CVE-2025-61723" + }, + "helpUri": "https://scout.docker.com/v/CVE-2025-61723?s=golang&n=stdlib&t=golang&vr=%3C1.24.8", + "help": { + "text": "The processing time for parsing some invalid inputs scales non-linearly with respect to the size of the input.\n\nThis affects programs which parse untrusted PEM inputs.\n", + "markdown": "> The processing time for parsing some invalid inputs scales non-linearly with respect to the size of the input.\n\nThis affects programs which parse untrusted PEM inputs.\n\n| | |\n|----------------|--------------------------|\n| Package | pkg:golang/stdlib@1.24.6 |\n| Affected range | <1.24.8 |\n| Fixed version | 1.24.8 |\n" + }, + "properties": { + "affected_version": "<1.24.8", + "cvssV3_severity": "HIGH", + "fixed_version": "1.24.8", + "purls": [ + "pkg:golang/stdlib@1.24.6" + ], + "security-severity": "7.5", + "tags": [ + "HIGH" + ] + } + }, + { + "id": "CVE-2025-61725", + "name": "OsPackageVulnerability", + "shortDescription": { + "text": "CVE-2025-61725" + }, + "helpUri": "https://scout.docker.com/v/CVE-2025-61725?s=golang&n=stdlib&t=golang&vr=%3C1.24.8", + "help": { + "text": "The ParseAddress function constructs domain-literal address components through repeated string concatenation. When parsing large domain-literal components, this can cause excessive CPU consumption.\n", + "markdown": "> The ParseAddress function constructs domain-literal address components through repeated string concatenation. When parsing large domain-literal components, this can cause excessive CPU consumption.\n\n| | |\n|----------------|--------------------------|\n| Package | pkg:golang/stdlib@1.24.6 |\n| Affected range | <1.24.8 |\n| Fixed version | 1.24.8 |\n" + }, + "properties": { + "affected_version": "<1.24.8", + "cvssV3_severity": "HIGH", + "fixed_version": "1.24.8", + "purls": [ + "pkg:golang/stdlib@1.24.6" + ], + "security-severity": "7.5", + "tags": [ + "HIGH" + ] + } + }, + { + "id": "CVE-2025-61726", + "name": "OsPackageVulnerability", + "shortDescription": { + "text": "CVE-2025-61726" + }, + "helpUri": "https://scout.docker.com/v/CVE-2025-61726?s=golang&n=stdlib&t=golang&vr=%3C1.24.12", + "help": { + "text": "The net/url package does not set a limit on the number of query parameters in a query.\n\nWhile the maximum size of query parameters in URLs is generally limited by the maximum request header size, the net/http.Request.ParseForm method can parse large URL-encoded forms. Parsing a large form containing many unique query parameters can cause excessive memory consumption.\n", + "markdown": "> The net/url package does not set a limit on the number of query parameters in a query.\n\nWhile the maximum size of query parameters in URLs is generally limited by the maximum request header size, the net/http.Request.ParseForm method can parse large URL-encoded forms. Parsing a large form containing many unique query parameters can cause excessive memory consumption.\n\n| | |\n|----------------|--------------------------|\n| Package | pkg:golang/stdlib@1.24.6 |\n| Affected range | <1.24.12 |\n| Fixed version | 1.24.12 |\n" + }, + "properties": { + "affected_version": "<1.24.12", + "cvssV3_severity": "HIGH", + "fixed_version": "1.24.12", + "purls": [ + "pkg:golang/stdlib@1.24.6" + ], + "security-severity": "7.5", + "tags": [ + "HIGH" + ] + } + }, + { + "id": "CVE-2025-61729", + "name": "OsPackageVulnerability", + "shortDescription": { + "text": "CVE-2025-61729" + }, + "helpUri": "https://scout.docker.com/v/CVE-2025-61729?s=golang&n=stdlib&t=golang&vr=%3C1.24.11", + "help": { + "text": "Within HostnameError.Error(), when constructing an error string, there is no limit to the number of hosts that will be printed out. Furthermore, the error string is constructed by repeated string concatenation, leading to quadratic runtime. Therefore, a certificate provided by a malicious actor can result in excessive resource consumption.\n", + "markdown": "> Within HostnameError.Error(), when constructing an error string, there is no limit to the number of hosts that will be printed out. Furthermore, the error string is constructed by repeated string concatenation, leading to quadratic runtime. Therefore, a certificate provided by a malicious actor can result in excessive resource consumption.\n\n| | |\n|----------------|--------------------------|\n| Package | pkg:golang/stdlib@1.24.6 |\n| Affected range | <1.24.11 |\n| Fixed version | 1.24.11 |\n" + }, + "properties": { + "affected_version": "<1.24.11", + "cvssV3_severity": "HIGH", + "fixed_version": "1.24.11", + "purls": [ + "pkg:golang/stdlib@1.24.6" + ], + "security-severity": "7.5", + "tags": [ + "HIGH" + ] + } + }, + { + "id": "CVE-2025-8194", + "name": "OsPackageVulnerability", + "shortDescription": { + "text": "CVE-2025-8194" + }, + "helpUri": "https://scout.docker.com/v/CVE-2025-8194?s=debian&n=python3.11&ns=debian&t=deb&osn=debian&osv=12&vr=%3C3.11.2-6%2Bdeb12u7", + "help": { + "text": "There is a defect in the CPython “tarfile” module affecting the “TarFile” extraction and entry enumeration APIs. The tar implementation would process tar archives with negative offsets without error, resulting in an infinite loop and deadlock during the parsing of maliciously crafted tar archives. This vulnerability can be mitigated by including the following patch after importing the “tarfile” module:  https://gist.github.com/sethmlarson/1716ac5b82b73dbcbf23ad2eff8b33e1\n\n---\n- python3.13 3.13.6-1 (bug https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1124764)\n[trixie] - python3.13 3.13.5-2+deb13u1\n- python3.12 \n- python3.11 \n[bookworm] - python3.11 3.11.2-6+deb12u7\n- python3.9 \n- python2.7 \n[bullseye] - python2.7 (EOL in bullseye LTS)\n- pypy3 7.3.21+dfsg-1 (bug https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1126758)\n[trixie] - pypy3 (Minor issue)\n[bookworm] - pypy3 (Minor issue)\n[bullseye] - pypy3 (Minor issue)\nhttps://github.com/python/cpython/issues/130577\nhttps://github.com/python/cpython/pull/137027\nhttps://mail.python.org/archives/list/security-announce@python.org/thread/ZULLF3IZ726XP5EY7XJ7YIN3K5MDYR2D/\nFixed by: https://github.com/python/cpython/commit/7040aa54f14676938970e10c5f74ea93cd56aa38 (main)\nFixed by: https://github.com/python/cpython/commit/cdae923ffe187d6ef916c0f665a31249619193fe (v3.13.6)\nFixed by: https://github.com/python/cpython/commit/b4ec17488eedec36d3c05fec127df71c0071f6cb (v3.11.14)\n", + "markdown": "> There is a defect in the CPython “tarfile” module affecting the “TarFile” extraction and entry enumeration APIs. The tar implementation would process tar archives with negative offsets without error, resulting in an infinite loop and deadlock during the parsing of maliciously crafted tar archives. This vulnerability can be mitigated by including the following patch after importing the “tarfile” module:  https://gist.github.com/sethmlarson/1716ac5b82b73dbcbf23ad2eff8b33e1\n\n---\n- python3.13 3.13.6-1 (bug https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1124764)\n[trixie] - python3.13 3.13.5-2+deb13u1\n- python3.12 \n- python3.11 \n[bookworm] - python3.11 3.11.2-6+deb12u7\n- python3.9 \n- python2.7 \n[bullseye] - python2.7 (EOL in bullseye LTS)\n- pypy3 7.3.21+dfsg-1 (bug https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1126758)\n[trixie] - pypy3 (Minor issue)\n[bookworm] - pypy3 (Minor issue)\n[bullseye] - pypy3 (Minor issue)\nhttps://github.com/python/cpython/issues/130577\nhttps://github.com/python/cpython/pull/137027\nhttps://mail.python.org/archives/list/security-announce@python.org/thread/ZULLF3IZ726XP5EY7XJ7YIN3K5MDYR2D/\nFixed by: https://github.com/python/cpython/commit/7040aa54f14676938970e10c5f74ea93cd56aa38 (main)\nFixed by: https://github.com/python/cpython/commit/cdae923ffe187d6ef916c0f665a31249619193fe (v3.13.6)\nFixed by: https://github.com/python/cpython/commit/b4ec17488eedec36d3c05fec127df71c0071f6cb (v3.11.14)\n\n| | |\n|----------------|----------------------------------------------------------------------------------------------|\n| Package | pkg:deb/debian/python3.11@3.11.2-6%2Bdeb12u6?os_distro=bookworm&os_name=debian&os_version=12 |\n| Affected range | <3.11.2-6+deb12u7 |\n| Fixed version | 3.11.2-6+deb12u7 |\n" + }, + "properties": { + "affected_version": "<3.11.2-6+deb12u7", + "cvssV3_severity": "HIGH", + "fixed_version": "3.11.2-6+deb12u7", + "purls": [ + "pkg:deb/debian/python3.11@3.11.2-6%2Bdeb12u6?os_distro=bookworm&os_name=debian&os_version=12" + ], + "security-severity": "7.5", + "tags": [ + "HIGH" + ] + } + }, + { + "id": "CVE-2026-0915", + "name": "OsPackageVulnerability", + "shortDescription": { + "text": "CVE-2026-0915" + }, + "helpUri": "https://scout.docker.com/v/CVE-2026-0915?s=debian&n=glibc&ns=debian&t=deb&osn=debian&osv=12&vr=%3C2.36-9%2Bdeb12u14", + "help": { + "text": "Calling getnetbyaddr or getnetbyaddr_r with a configured nsswitch.conf that specifies the library's DNS backend for networks and queries for a zero-valued network in the GNU C Library version 2.0 to version 2.42 can leak stack contents to the configured DNS resolver.\n\n---\n- glibc 2.42-8 (bug https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1125748)\n[trixie] - glibc 2.41-12+deb13u2\n[bookworm] - glibc 2.36-9+deb12u14\nhttps://sourceware.org/bugzilla/show_bug.cgi?id=33802\nhttps://www.openwall.com/lists/oss-security/2026/01/16/6\nIntroduced with: https://sourceware.org/git/?p=glibc.git;a=commit;h=5f0e6fc702296840d2daa39f83f6cb1e40073d58 (glibc-1.93)\nFixed by: https://sourceware.org/git/?p=glibc.git;a=commit;h=e56ff82d5034ec66c6a78f517af6faa427f65b0b (glibc-2.43)\n", + "markdown": "> Calling getnetbyaddr or getnetbyaddr_r with a configured nsswitch.conf that specifies the library's DNS backend for networks and queries for a zero-valued network in the GNU C Library version 2.0 to version 2.42 can leak stack contents to the configured DNS resolver.\n\n---\n- glibc 2.42-8 (bug https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1125748)\n[trixie] - glibc 2.41-12+deb13u2\n[bookworm] - glibc 2.36-9+deb12u14\nhttps://sourceware.org/bugzilla/show_bug.cgi?id=33802\nhttps://www.openwall.com/lists/oss-security/2026/01/16/6\nIntroduced with: https://sourceware.org/git/?p=glibc.git;a=commit;h=5f0e6fc702296840d2daa39f83f6cb1e40073d58 (glibc-1.93)\nFixed by: https://sourceware.org/git/?p=glibc.git;a=commit;h=e56ff82d5034ec66c6a78f517af6faa427f65b0b (glibc-2.43)\n\n| | |\n|----------------|----------------------------------------------------------------------------------------|\n| Package | pkg:deb/debian/glibc@2.36-9%2Bdeb12u13?os_distro=bookworm&os_name=debian&os_version=12 |\n| Affected range | <2.36-9+deb12u14 |\n| Fixed version | 2.36-9+deb12u14 |\n" + }, + "properties": { + "affected_version": "<2.36-9+deb12u14", + "cvssV3_severity": "HIGH", + "fixed_version": "2.36-9+deb12u14", + "purls": [ + "pkg:deb/debian/glibc@2.36-9%2Bdeb12u13?os_distro=bookworm&os_name=debian&os_version=12" + ], + "security-severity": "7.5", + "tags": [ + "HIGH" + ] + } + }, + { + "id": "CVE-2026-25679", + "name": "OsPackageVulnerability", + "shortDescription": { + "text": "CVE-2026-25679" + }, + "helpUri": "https://scout.docker.com/v/CVE-2026-25679?s=golang&n=stdlib&t=golang&vr=%3C1.25.8", + "help": { + "text": "url.Parse insufficiently validated the host/authority component and accepted some invalid URLs.\n", + "markdown": "> url.Parse insufficiently validated the host/authority component and accepted some invalid URLs.\n\n| | |\n|----------------|--------------------------|\n| Package | pkg:golang/stdlib@1.24.6 |\n| Affected range | <1.25.8 |\n| Fixed version | 1.25.8 |\n" + }, + "properties": { + "affected_version": "<1.25.8", + "cvssV3_severity": "HIGH", + "fixed_version": "1.25.8", + "purls": [ + "pkg:golang/stdlib@1.24.6" + ], + "security-severity": "7.5", + "tags": [ + "HIGH" + ] + } + }, + { + "id": "CVE-2026-32280", + "name": "OsPackageVulnerability", + "shortDescription": { + "text": "CVE-2026-32280" + }, + "helpUri": "https://scout.docker.com/v/CVE-2026-32280?s=golang&n=stdlib&t=golang&vr=%3C1.25.9", + "help": { + "text": "During chain building, the amount of work that is done is not correctly limited when a large number of intermediate certificates are passed in VerifyOptions.Intermediates, which can lead to a denial of service. This affects both direct users of crypto/x509 and users of crypto/tls.\n", + "markdown": "> During chain building, the amount of work that is done is not correctly limited when a large number of intermediate certificates are passed in VerifyOptions.Intermediates, which can lead to a denial of service. This affects both direct users of crypto/x509 and users of crypto/tls.\n\n| | |\n|----------------|--------------------------|\n| Package | pkg:golang/stdlib@1.24.6 |\n| Affected range | <1.25.9 |\n| Fixed version | 1.25.9 |\n" + }, + "properties": { + "affected_version": "<1.25.9", + "cvssV3_severity": "HIGH", + "fixed_version": "1.25.9", + "purls": [ + "pkg:golang/stdlib@1.24.6" + ], + "security-severity": "7.5", + "tags": [ + "HIGH" + ] + } + }, + { + "id": "CVE-2026-32281", + "name": "OsPackageVulnerability", + "shortDescription": { + "text": "CVE-2026-32281" + }, + "helpUri": "https://scout.docker.com/v/CVE-2026-32281?s=golang&n=stdlib&t=golang&vr=%3C1.25.9", + "help": { + "text": "Validating certificate chains which use policies is unexpectedly inefficient when certificates in the chain contain a very large number of policy mappings, possibly causing denial of service.\n\nThis only affects validation of otherwise trusted certificate chains, issued by a root CA in the VerifyOptions.Roots CertPool, or in the system certificate pool.\n", + "markdown": "> Validating certificate chains which use policies is unexpectedly inefficient when certificates in the chain contain a very large number of policy mappings, possibly causing denial of service.\n\nThis only affects validation of otherwise trusted certificate chains, issued by a root CA in the VerifyOptions.Roots CertPool, or in the system certificate pool.\n\n| | |\n|----------------|--------------------------|\n| Package | pkg:golang/stdlib@1.24.6 |\n| Affected range | <1.25.9 |\n| Fixed version | 1.25.9 |\n" + }, + "properties": { + "affected_version": "<1.25.9", + "cvssV3_severity": "HIGH", + "fixed_version": "1.25.9", + "purls": [ + "pkg:golang/stdlib@1.24.6" + ], + "security-severity": "7.5", + "tags": [ + "HIGH" + ] + } + }, + { + "id": "CVE-2026-32283", + "name": "OsPackageVulnerability", + "shortDescription": { + "text": "CVE-2026-32283" + }, + "helpUri": "https://scout.docker.com/v/CVE-2026-32283?s=golang&n=stdlib&t=golang&vr=%3C1.25.9", + "help": { + "text": "If one side of the TLS connection sends multiple key update messages post-handshake in a single record, the connection can deadlock, causing uncontrolled consumption of resources. This can lead to a denial of service.\n\nThis only affects TLS 1.3.\n", + "markdown": "> If one side of the TLS connection sends multiple key update messages post-handshake in a single record, the connection can deadlock, causing uncontrolled consumption of resources. This can lead to a denial of service.\n\nThis only affects TLS 1.3.\n\n| | |\n|----------------|--------------------------|\n| Package | pkg:golang/stdlib@1.24.6 |\n| Affected range | <1.25.9 |\n| Fixed version | 1.25.9 |\n" + }, + "properties": { + "affected_version": "<1.25.9", + "cvssV3_severity": "HIGH", + "fixed_version": "1.25.9", + "purls": [ + "pkg:golang/stdlib@1.24.6" + ], + "security-severity": "7.5", + "tags": [ + "HIGH" + ] + } + }, + { + "id": "CVE-2026-33811", + "name": "OsPackageVulnerability", + "shortDescription": { + "text": "CVE-2026-33811" + }, + "helpUri": "https://scout.docker.com/v/CVE-2026-33811?s=golang&n=stdlib&t=golang&vr=%3C1.25.10", + "help": { + "text": "When using LookupCNAME with the cgo DNS resolver, a very long CNAME response can trigger a double-free of C memory and a crash.\n", + "markdown": "> When using LookupCNAME with the cgo DNS resolver, a very long CNAME response can trigger a double-free of C memory and a crash.\n\n| | |\n|----------------|--------------------------|\n| Package | pkg:golang/stdlib@1.24.6 |\n| Affected range | <1.25.10 |\n| Fixed version | 1.25.10 |\n" + }, + "properties": { + "affected_version": "<1.25.10", + "cvssV3_severity": "HIGH", + "fixed_version": "1.25.10", + "purls": [ + "pkg:golang/stdlib@1.24.6" + ], + "security-severity": "7.5", + "tags": [ + "HIGH" + ] + } + }, + { + "id": "CVE-2026-33814", + "name": "OsPackageVulnerability", + "shortDescription": { + "text": "CVE-2026-33814" + }, + "helpUri": "https://scout.docker.com/v/CVE-2026-33814?s=golang&n=stdlib&t=golang&vr=%3C1.25.10", + "help": { + "text": "When processing HTTP/2 SETTINGS frames, transport will enter an infinite loop of writing CONTINUATION frames if it receives a SETTINGS_MAX_FRAME_SIZE with a value of 0.\n", + "markdown": "> When processing HTTP/2 SETTINGS frames, transport will enter an infinite loop of writing CONTINUATION frames if it receives a SETTINGS_MAX_FRAME_SIZE with a value of 0.\n\n| | |\n|----------------|--------------------------|\n| Package | pkg:golang/stdlib@1.24.6 |\n| Affected range | <1.25.10 |\n| Fixed version | 1.25.10 |\n" + }, + "properties": { + "affected_version": "<1.25.10", + "cvssV3_severity": "HIGH", + "fixed_version": "1.25.10", + "purls": [ + "pkg:golang/stdlib@1.24.6" + ], + "security-severity": "7.5", + "tags": [ + "HIGH" + ] + } + }, + { + "id": "CVE-2026-33845", + "name": "OsPackageVulnerability", + "shortDescription": { + "text": "CVE-2026-33845" + }, + "helpUri": "https://scout.docker.com/v/CVE-2026-33845?s=debian&n=gnutls28&ns=debian&t=deb&osn=debian&osv=12&vr=%3C3.7.9-2%2Bdeb12u7", + "help": { + "text": "A flaw in GnuTLS DTLS handshake parsing allows malformed fragments with zero length and non-zero offset, leading to an integer underflow during reassembly and resulting in an out-of-bounds read. This issue is remotely exploitable and may cause information disclosure or denial of service.\n\n---\n- gnutls28 3.8.13-1 (bug https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1135319)\nhttps://www.gnutls.org/security-new.html#GNUTLS-SA-2026-04-29-3\nhttps://gitlab.com/gnutls/gnutls/-/issues/1811\nFixed by: https://gitlab.com/gnutls/gnutls/-/commit/e5b72c53c7d789d19d1d1cd10b275e87d0415413 (3.8.13)\n", + "markdown": "> A flaw in GnuTLS DTLS handshake parsing allows malformed fragments with zero length and non-zero offset, leading to an integer underflow during reassembly and resulting in an out-of-bounds read. This issue is remotely exploitable and may cause information disclosure or denial of service.\n\n---\n- gnutls28 3.8.13-1 (bug https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1135319)\nhttps://www.gnutls.org/security-new.html#GNUTLS-SA-2026-04-29-3\nhttps://gitlab.com/gnutls/gnutls/-/issues/1811\nFixed by: https://gitlab.com/gnutls/gnutls/-/commit/e5b72c53c7d789d19d1d1cd10b275e87d0415413 (3.8.13)\n\n| | |\n|----------------|-------------------------------------------------------------------------------------------|\n| Package | pkg:deb/debian/gnutls28@3.7.9-2%2Bdeb12u6?os_distro=bookworm&os_name=debian&os_version=12 |\n| Affected range | <3.7.9-2+deb12u7 |\n| Fixed version | 3.7.9-2+deb12u7 |\n" + }, + "properties": { + "affected_version": "<3.7.9-2+deb12u7", + "cvssV3_severity": "HIGH", + "fixed_version": "3.7.9-2+deb12u7", + "purls": [ + "pkg:deb/debian/gnutls28@3.7.9-2%2Bdeb12u6?os_distro=bookworm&os_name=debian&os_version=12" + ], + "security-severity": "7.5", + "tags": [ + "HIGH" + ] + } + }, + { + "id": "CVE-2026-33846", + "name": "OsPackageVulnerability", + "shortDescription": { + "text": "CVE-2026-33846" + }, + "helpUri": "https://scout.docker.com/v/CVE-2026-33846?s=debian&n=gnutls28&ns=debian&t=deb&osn=debian&osv=12&vr=%3C3.7.9-2%2Bdeb12u7", + "help": { + "text": "A heap buffer overflow vulnerability exists in the DTLS handshake fragment reassembly logic of GnuTLS. The issue arises in merge_handshake_packet() where incoming handshake fragments are matched and merged based solely on handshake type, without validating that the message_length field remains consistent across all fragments of the same logical message. An attacker can exploit this by sending crafted DTLS fragments with conflicting message_length values, causing the implementation to allocate a buffer based on a smaller initial fragment and subsequently write beyond its bounds using larger, inconsistent fragments. Because the merge operation does not enforce proper bounds checking against the allocated buffer size, this results in an out-of-bounds write on the heap. The vulnerability is remotely exploitable without authentication via the DTLS handshake path and can lead to application crashes or potential memory corruption.\n\n---\n- gnutls28 3.8.13-1 (bug https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1135319)\nhttps://www.gnutls.org/security-new.html#GNUTLS-SA-2026-04-29-1\nhttps://gitlab.com/gnutls/gnutls/-/work_items/1816\nhttps://gitlab.com/gnutls/gnutls/-/work_items/1838\nhttps://gitlab.com/gnutls/gnutls/-/work_items/1839\nFixed by: https://gitlab.com/gnutls/gnutls/-/commit/65ab33fa54e34fba69d793735b7df3d383d1ff78 (3.8.13)\n", + "markdown": "> A heap buffer overflow vulnerability exists in the DTLS handshake fragment reassembly logic of GnuTLS. The issue arises in merge_handshake_packet() where incoming handshake fragments are matched and merged based solely on handshake type, without validating that the message_length field remains consistent across all fragments of the same logical message. An attacker can exploit this by sending crafted DTLS fragments with conflicting message_length values, causing the implementation to allocate a buffer based on a smaller initial fragment and subsequently write beyond its bounds using larger, inconsistent fragments. Because the merge operation does not enforce proper bounds checking against the allocated buffer size, this results in an out-of-bounds write on the heap. The vulnerability is remotely exploitable without authentication via the DTLS handshake path and can lead to application crashes or potential memory corruption.\n\n---\n- gnutls28 3.8.13-1 (bug https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1135319)\nhttps://www.gnutls.org/security-new.html#GNUTLS-SA-2026-04-29-1\nhttps://gitlab.com/gnutls/gnutls/-/work_items/1816\nhttps://gitlab.com/gnutls/gnutls/-/work_items/1838\nhttps://gitlab.com/gnutls/gnutls/-/work_items/1839\nFixed by: https://gitlab.com/gnutls/gnutls/-/commit/65ab33fa54e34fba69d793735b7df3d383d1ff78 (3.8.13)\n\n| | |\n|----------------|-------------------------------------------------------------------------------------------|\n| Package | pkg:deb/debian/gnutls28@3.7.9-2%2Bdeb12u6?os_distro=bookworm&os_name=debian&os_version=12 |\n| Affected range | <3.7.9-2+deb12u7 |\n| Fixed version | 3.7.9-2+deb12u7 |\n" + }, + "properties": { + "affected_version": "<3.7.9-2+deb12u7", + "cvssV3_severity": "HIGH", + "fixed_version": "3.7.9-2+deb12u7", + "purls": [ + "pkg:deb/debian/gnutls28@3.7.9-2%2Bdeb12u6?os_distro=bookworm&os_name=debian&os_version=12" + ], + "security-severity": "7.5", + "tags": [ + "HIGH" + ] + } + }, + { + "id": "CVE-2026-34180", + "name": "OsPackageVulnerability", + "shortDescription": { + "text": "CVE-2026-34180" + }, + "helpUri": "https://scout.docker.com/v/CVE-2026-34180?s=debian&n=openssl&ns=debian&t=deb&osn=debian&osv=12&vr=%3C3.0.20-1%7Edeb12u2", + "help": { + "text": "Issue summary: Parsing a crafted DER-encoded ASN.1 structure with a primitive element whose content exceeds 2 gigabytes in length may cause a heap buffer over-read on 64-bit Unix and Unix-like platforms. Impact summary: The heap buffer over-read may crash the application (Denial of Service) or to load into the decoded ASN.1 object contents of memory beyond the end of the input buffer. More typically such ASN.1 elements would instead be truncated. An integer truncation in OpenSSL's ASN.1 decoder causes the content length of an ASN.1 primitive element to be mishandled when it exceeds 2 gigabytes. In the worst case the truncated length is treated as a request to scan the binary content for a terminating zero byte, possibly causing OpenSSL to read either less than or beyond the end of the allocated buffer. Applications that pass attacker-supplied data to d2i_X509(), d2i_PKCS7(), or any other d2i_* decoding function are affected. OpenSSL's own command-line tools are not vulnerable, as data read through the BIO layer is checked before it reaches the affected code. The issue only affects 64-bit Unix and Unix-like platforms; 32-bit platforms and 64-bit Windows are not affected. The FIPS modules in 4.0, 3.6, 3.5, 3.4 and 3.0 are not affected by this issue, as the affected code is outside the OpenSSL FIPS module boundary.\n\n---\n- openssl 3.6.3-1 (bug https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1139674)\nhttps://openssl-library.org/news/secadv/20260609.txt\nFixed by: https://github.com/openssl/openssl/commit/cbe418ae978539cf14a398a207dba834c0e93e83 (openssl-3.0.21)\n", + "markdown": "> Issue summary: Parsing a crafted DER-encoded ASN.1 structure with a primitive element whose content exceeds 2 gigabytes in length may cause a heap buffer over-read on 64-bit Unix and Unix-like platforms. Impact summary: The heap buffer over-read may crash the application (Denial of Service) or to load into the decoded ASN.1 object contents of memory beyond the end of the input buffer. More typically such ASN.1 elements would instead be truncated. An integer truncation in OpenSSL's ASN.1 decoder causes the content length of an ASN.1 primitive element to be mishandled when it exceeds 2 gigabytes. In the worst case the truncated length is treated as a request to scan the binary content for a terminating zero byte, possibly causing OpenSSL to read either less than or beyond the end of the allocated buffer. Applications that pass attacker-supplied data to d2i_X509(), d2i_PKCS7(), or any other d2i_* decoding function are affected. OpenSSL's own command-line tools are not vulnerable, as data read through the BIO layer is checked before it reaches the affected code. The issue only affects 64-bit Unix and Unix-like platforms; 32-bit platforms and 64-bit Windows are not affected. The FIPS modules in 4.0, 3.6, 3.5, 3.4 and 3.0 are not affected by this issue, as the affected code is outside the OpenSSL FIPS module boundary.\n\n---\n- openssl 3.6.3-1 (bug https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1139674)\nhttps://openssl-library.org/news/secadv/20260609.txt\nFixed by: https://github.com/openssl/openssl/commit/cbe418ae978539cf14a398a207dba834c0e93e83 (openssl-3.0.21)\n\n| | |\n|----------------|-----------------------------------------------------------------------------------------|\n| Package | pkg:deb/debian/openssl@3.0.19-1~deb12u2?os_distro=bookworm&os_name=debian&os_version=12 |\n| Affected range | <3.0.20-1~deb12u2 |\n| Fixed version | 3.0.20-1~deb12u2 |\n" + }, + "properties": { + "affected_version": "<3.0.20-1~deb12u2", + "cvssV3_severity": "HIGH", + "fixed_version": "3.0.20-1~deb12u2", + "purls": [ + "pkg:deb/debian/openssl@3.0.19-1~deb12u2?os_distro=bookworm&os_name=debian&os_version=12" + ], + "security-severity": "7.5", + "tags": [ + "HIGH" + ] + } + }, + { + "id": "CVE-2026-39820", + "name": "OsPackageVulnerability", + "shortDescription": { + "text": "CVE-2026-39820" + }, + "helpUri": "https://scout.docker.com/v/CVE-2026-39820?s=golang&n=stdlib&t=golang&vr=%3C1.25.10", + "help": { + "text": "Well-crafted inputs reaching ParseAddress, ParseAddressList, and ParseDate were able to trigger excessive CPU exhaustion and memory allocations.\n", + "markdown": "> Well-crafted inputs reaching ParseAddress, ParseAddressList, and ParseDate were able to trigger excessive CPU exhaustion and memory allocations.\n\n| | |\n|----------------|--------------------------|\n| Package | pkg:golang/stdlib@1.24.6 |\n| Affected range | <1.25.10 |\n| Fixed version | 1.25.10 |\n" + }, + "properties": { + "affected_version": "<1.25.10", + "cvssV3_severity": "HIGH", + "fixed_version": "1.25.10", + "purls": [ + "pkg:golang/stdlib@1.24.6" + ], + "security-severity": "7.5", + "tags": [ + "HIGH" + ] + } + }, + { + "id": "CVE-2026-39836", + "name": "OsPackageVulnerability", + "shortDescription": { + "text": "CVE-2026-39836" + }, + "helpUri": "https://scout.docker.com/v/CVE-2026-39836?s=golang&n=stdlib&t=golang&vr=%3C1.25.10", + "help": { + "text": "The Dial and LookupPort functions panic on Windows when provided with an input containing a NUL (0).\n", + "markdown": "> The Dial and LookupPort functions panic on Windows when provided with an input containing a NUL (0).\n\n| | |\n|----------------|--------------------------|\n| Package | pkg:golang/stdlib@1.24.6 |\n| Affected range | <1.25.10 |\n| Fixed version | 1.25.10 |\n" + }, + "properties": { + "affected_version": "<1.25.10", + "cvssV3_severity": "HIGH", + "fixed_version": "1.25.10", + "purls": [ + "pkg:golang/stdlib@1.24.6" + ], + "security-severity": "7.5", + "tags": [ + "HIGH" + ] + } + }, + { + "id": "CVE-2026-4046", + "name": "OsPackageVulnerability", + "shortDescription": { + "text": "CVE-2026-4046" + }, + "helpUri": "https://scout.docker.com/v/CVE-2026-4046?s=debian&n=glibc&ns=debian&t=deb&osn=debian&osv=12&vr=%3C2.36-9%2Bdeb12u14", + "help": { + "text": "The iconv() function in the GNU C Library versions 2.43 and earlier may crash due to an assertion failure when converting inputs from the IBM1390 or IBM1399 character sets, which may be used to remotely crash an application. This vulnerability can be trivially mitigated by removing the IBM1390 and IBM1399 character sets from systems that do not need them.\n\n---\n- glibc 2.42-15 (bug https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1132499)\n[trixie] - glibc 2.41-12+deb13u3\n[bookworm] - glibc 2.36-9+deb12u14\nhttps://sourceware.org/bugzilla/show_bug.cgi?id=33980\nhttps://sourceware.org/git/?p=glibc.git;a=blob_plain;f=advisories/GLIBC-SA-2026-0007\nFixed by: https://sourceware.org/git/?p=glibc.git;a=commit;h=d6f08d1cf027f4eb2ba289a6cc66853722d4badc\n", + "markdown": "> The iconv() function in the GNU C Library versions 2.43 and earlier may crash due to an assertion failure when converting inputs from the IBM1390 or IBM1399 character sets, which may be used to remotely crash an application. This vulnerability can be trivially mitigated by removing the IBM1390 and IBM1399 character sets from systems that do not need them.\n\n---\n- glibc 2.42-15 (bug https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1132499)\n[trixie] - glibc 2.41-12+deb13u3\n[bookworm] - glibc 2.36-9+deb12u14\nhttps://sourceware.org/bugzilla/show_bug.cgi?id=33980\nhttps://sourceware.org/git/?p=glibc.git;a=blob_plain;f=advisories/GLIBC-SA-2026-0007\nFixed by: https://sourceware.org/git/?p=glibc.git;a=commit;h=d6f08d1cf027f4eb2ba289a6cc66853722d4badc\n\n| | |\n|----------------|----------------------------------------------------------------------------------------|\n| Package | pkg:deb/debian/glibc@2.36-9%2Bdeb12u13?os_distro=bookworm&os_name=debian&os_version=12 |\n| Affected range | <2.36-9+deb12u14 |\n| Fixed version | 2.36-9+deb12u14 |\n" + }, + "properties": { + "affected_version": "<2.36-9+deb12u14", + "cvssV3_severity": "HIGH", + "fixed_version": "2.36-9+deb12u14", + "purls": [ + "pkg:deb/debian/glibc@2.36-9%2Bdeb12u13?os_distro=bookworm&os_name=debian&os_version=12" + ], + "security-severity": "7.5", + "tags": [ + "HIGH" + ] + } + }, + { + "id": "CVE-2026-42009", + "name": "OsPackageVulnerability", + "shortDescription": { + "text": "CVE-2026-42009" + }, + "helpUri": "https://scout.docker.com/v/CVE-2026-42009?s=debian&n=gnutls28&ns=debian&t=deb&osn=debian&osv=12&vr=%3C3.7.9-2%2Bdeb12u7", + "help": { + "text": "A flaw was found in gnutls. A remote attacker could exploit an issue in the Datagram Transport Layer Security (DTLS) packet reordering logic. The comparator function, responsible for ordering DTLS packets by sequence numbers, did not correctly handle packets with duplicate sequence numbers. This could lead to unstable packet ordering or undefined behavior, resulting in a denial of service.\n\n---\n- gnutls28 3.8.13-1 (bug https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1135319)\nhttps://www.gnutls.org/security-new.html#GNUTLS-SA-2026-04-29-2\nhttps://gitlab.com/gnutls/gnutls/-/issues/1848\nFixed by: https://gitlab.com/gnutls/gnutls/-/commit/f01e21441e29052a6f0963840794c41d3b3ee66d (3.8.13)\nFixed by: https://gitlab.com/gnutls/gnutls/-/commit/f341441fad91142897d83b44a175ffc8f925b76f (3.8.13)\n", + "markdown": "> A flaw was found in gnutls. A remote attacker could exploit an issue in the Datagram Transport Layer Security (DTLS) packet reordering logic. The comparator function, responsible for ordering DTLS packets by sequence numbers, did not correctly handle packets with duplicate sequence numbers. This could lead to unstable packet ordering or undefined behavior, resulting in a denial of service.\n\n---\n- gnutls28 3.8.13-1 (bug https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1135319)\nhttps://www.gnutls.org/security-new.html#GNUTLS-SA-2026-04-29-2\nhttps://gitlab.com/gnutls/gnutls/-/issues/1848\nFixed by: https://gitlab.com/gnutls/gnutls/-/commit/f01e21441e29052a6f0963840794c41d3b3ee66d (3.8.13)\nFixed by: https://gitlab.com/gnutls/gnutls/-/commit/f341441fad91142897d83b44a175ffc8f925b76f (3.8.13)\n\n| | |\n|----------------|-------------------------------------------------------------------------------------------|\n| Package | pkg:deb/debian/gnutls28@3.7.9-2%2Bdeb12u6?os_distro=bookworm&os_name=debian&os_version=12 |\n| Affected range | <3.7.9-2+deb12u7 |\n| Fixed version | 3.7.9-2+deb12u7 |\n" + }, + "properties": { + "affected_version": "<3.7.9-2+deb12u7", + "cvssV3_severity": "HIGH", + "fixed_version": "3.7.9-2+deb12u7", + "purls": [ + "pkg:deb/debian/gnutls28@3.7.9-2%2Bdeb12u6?os_distro=bookworm&os_name=debian&os_version=12" + ], + "security-severity": "7.5", + "tags": [ + "HIGH" + ] + } + }, + { + "id": "CVE-2026-42499", + "name": "OsPackageVulnerability", + "shortDescription": { + "text": "CVE-2026-42499" + }, + "helpUri": "https://scout.docker.com/v/CVE-2026-42499?s=golang&n=stdlib&t=golang&vr=%3C1.25.10", + "help": { + "text": "Pathological inputs could cause DoS through consumePhrase when parsing an email address according to RFC 5322.\n", + "markdown": "> Pathological inputs could cause DoS through consumePhrase when parsing an email address according to RFC 5322.\n\n| | |\n|----------------|--------------------------|\n| Package | pkg:golang/stdlib@1.24.6 |\n| Affected range | <1.25.10 |\n| Fixed version | 1.25.10 |\n" + }, + "properties": { + "affected_version": "<1.25.10", + "cvssV3_severity": "HIGH", + "fixed_version": "1.25.10", + "purls": [ + "pkg:golang/stdlib@1.24.6" + ], + "security-severity": "7.5", + "tags": [ + "HIGH" + ] + } + }, + { + "id": "CVE-2026-42504", + "name": "OsPackageVulnerability", + "shortDescription": { + "text": "CVE-2026-42504" + }, + "helpUri": "https://scout.docker.com/v/CVE-2026-42504?s=golang&n=stdlib&t=golang&vr=%3C1.25.11", + "help": { + "text": "Decoding a maliciously-crafted MIME header containing many invalid encoded-words can consume excessive CPU.\n", + "markdown": "> Decoding a maliciously-crafted MIME header containing many invalid encoded-words can consume excessive CPU.\n\n| | |\n|----------------|--------------------------|\n| Package | pkg:golang/stdlib@1.24.6 |\n| Affected range | <1.25.11 |\n| Fixed version | 1.25.11 |\n" + }, + "properties": { + "affected_version": "<1.25.11", + "cvssV3_severity": "HIGH", + "fixed_version": "1.25.11", + "purls": [ + "pkg:golang/stdlib@1.24.6" + ], + "security-severity": "7.5", + "tags": [ + "HIGH" + ] + } + }, + { + "id": "CVE-2026-48959", + "name": "OsPackageVulnerability", + "shortDescription": { + "text": "CVE-2026-48959" + }, + "helpUri": "https://scout.docker.com/v/CVE-2026-48959?s=debian&n=perl&ns=debian&t=deb&osn=debian&osv=12&vr=%3E0", + "help": { + "text": "IO::Uncompress::Unzip versions before 2.220 for Perl allow CPU exhaustion via per-byte read loop in fastForward. fastForward() compares length $offset (the digit count of the offset, 1 to 19) against the chunk size $c instead of $offset itself, so $c shrinks from 16 KiB to 1-19 bytes per iteration. Extracting a named entry from an attacker supplied zip via IO::Uncompress::Unzip->new($zip, Name => $target) drives a per-byte read loop scaling with the entry's compressed size, up to the non-Zip64 4 GiB cap.\n\n---\n- libio-compress-perl 2.220-1 (bug https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1138051)\n[trixie] - libio-compress-perl (Minor issue)\n- perl 5.40.1-8 (bug https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1138856)\nhttps://lists.security.metacpan.org/cve-announce/msg/40434381/\nFixed by: https://github.com/pmqs/IO-Compress/commit/68db44076f4c1a86a2ffe53a958eac6cabaf72e2 (v2.220)\n", + "markdown": "> IO::Uncompress::Unzip versions before 2.220 for Perl allow CPU exhaustion via per-byte read loop in fastForward. fastForward() compares length $offset (the digit count of the offset, 1 to 19) against the chunk size $c instead of $offset itself, so $c shrinks from 16 KiB to 1-19 bytes per iteration. Extracting a named entry from an attacker supplied zip via IO::Uncompress::Unzip->new($zip, Name => $target) drives a per-byte read loop scaling with the entry's compressed size, up to the non-Zip64 4 GiB cap.\n\n---\n- libio-compress-perl 2.220-1 (bug https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1138051)\n[trixie] - libio-compress-perl (Minor issue)\n- perl 5.40.1-8 (bug https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1138856)\nhttps://lists.security.metacpan.org/cve-announce/msg/40434381/\nFixed by: https://github.com/pmqs/IO-Compress/commit/68db44076f4c1a86a2ffe53a958eac6cabaf72e2 (v2.220)\n\n| | |\n|----------------|----------------------------------------------------------------------------------------|\n| Package | pkg:deb/debian/perl@5.36.0-7%2Bdeb12u3?os_distro=bookworm&os_name=debian&os_version=12 |\n| Affected range | >0 |\n| Fixed version | not fixed |\n" + }, + "properties": { + "affected_version": ">0", + "cvssV3_severity": "HIGH", + "fixed_version": "not fixed", + "purls": [ + "pkg:deb/debian/perl@5.36.0-7%2Bdeb12u3?os_distro=bookworm&os_name=debian&os_version=12" + ], + "security-severity": "7.5", + "tags": [ + "HIGH" + ] + } + }, + { + "id": "CVE-2026-9076", + "name": "OsPackageVulnerability", + "shortDescription": { + "text": "CVE-2026-9076" + }, + "helpUri": "https://scout.docker.com/v/CVE-2026-9076?s=debian&n=openssl&ns=debian&t=deb&osn=debian&osv=12&vr=%3C3.0.20-1%7Edeb12u2", + "help": { + "text": "Issue summary: When CMS password-based decryption (RFC 3211 / PWRI key unwrap) processes attacker-supplied CMS data, an attacker-chosen stream-mode KEK cipher can trigger a heap out-of-bounds read in kek_unwrap_key(). Impact summary: A heap buffer over-read may trigger a crash which leads to Denial of Service for an application if the input buffer ends at a memory page boundary and the following page is unmapped. There is no information disclosure as the over-read bytes are not revealed to the attacker. The key unwrapping function performs a check-byte test as specified in the RFC that reads 7 bytes from a heap allocation that is based on the wrapped key length from the message. There is a minimum length check based on the block length of the wrapping cipher. However the cipher is selected from an OID carried in the attacker's PWRI keyEncryptionAlgorithm with no requirement that the cipher be a block cipher. When an attacker selects a stream-mode cipher the guard will be ineffective and the allocated buffer containing the unwrapped key can be too small to fit the check-bytes specified in the RFC and a buffer over-read can happen. Applications calling CMS_decrypt() or CMS_decrypt_set1_password() (equivalently openssl cms -decrypt -pwri_password ...) on untrusted CMS data are vulnerable to this issue. No password knowledge is required: the over-read happens during the unwrap attempt before any authentication succeeds. The over-read is limited to a few bytes and is not written to output, so there is no information disclosure. Triggering a crash requires the allocation to border unmapped memory, which is unlikely with the normal allocator. The FIPS modules are not affected by this issue.\n\n---\n- openssl 3.6.3-1 (bug https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1139674)\nhttps://openssl-library.org/news/secadv/20260609.txt\nFixed by: https://github.com/openssl/openssl/commit/eecbe330977e8d023aae1ca2d9bdbe983ef3fdc6 (openssl-3.0.21)\n", + "markdown": "> Issue summary: When CMS password-based decryption (RFC 3211 / PWRI key unwrap) processes attacker-supplied CMS data, an attacker-chosen stream-mode KEK cipher can trigger a heap out-of-bounds read in kek_unwrap_key(). Impact summary: A heap buffer over-read may trigger a crash which leads to Denial of Service for an application if the input buffer ends at a memory page boundary and the following page is unmapped. There is no information disclosure as the over-read bytes are not revealed to the attacker. The key unwrapping function performs a check-byte test as specified in the RFC that reads 7 bytes from a heap allocation that is based on the wrapped key length from the message. There is a minimum length check based on the block length of the wrapping cipher. However the cipher is selected from an OID carried in the attacker's PWRI keyEncryptionAlgorithm with no requirement that the cipher be a block cipher. When an attacker selects a stream-mode cipher the guard will be ineffective and the allocated buffer containing the unwrapped key can be too small to fit the check-bytes specified in the RFC and a buffer over-read can happen. Applications calling CMS_decrypt() or CMS_decrypt_set1_password() (equivalently openssl cms -decrypt -pwri_password ...) on untrusted CMS data are vulnerable to this issue. No password knowledge is required: the over-read happens during the unwrap attempt before any authentication succeeds. The over-read is limited to a few bytes and is not written to output, so there is no information disclosure. Triggering a crash requires the allocation to border unmapped memory, which is unlikely with the normal allocator. The FIPS modules are not affected by this issue.\n\n---\n- openssl 3.6.3-1 (bug https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1139674)\nhttps://openssl-library.org/news/secadv/20260609.txt\nFixed by: https://github.com/openssl/openssl/commit/eecbe330977e8d023aae1ca2d9bdbe983ef3fdc6 (openssl-3.0.21)\n\n| | |\n|----------------|-----------------------------------------------------------------------------------------|\n| Package | pkg:deb/debian/openssl@3.0.19-1~deb12u2?os_distro=bookworm&os_name=debian&os_version=12 |\n| Affected range | <3.0.20-1~deb12u2 |\n| Fixed version | 3.0.20-1~deb12u2 |\n" + }, + "properties": { + "affected_version": "<3.0.20-1~deb12u2", + "cvssV3_severity": "HIGH", + "fixed_version": "3.0.20-1~deb12u2", + "purls": [ + "pkg:deb/debian/openssl@3.0.19-1~deb12u2?os_distro=bookworm&os_name=debian&os_version=12" + ], + "security-severity": "7.5", + "tags": [ + "HIGH" + ] + } + }, + { + "id": "CVE-2026-7383", + "name": "OsPackageVulnerability", + "shortDescription": { + "text": "CVE-2026-7383" + }, + "helpUri": "https://scout.docker.com/v/CVE-2026-7383?s=debian&n=openssl&ns=debian&t=deb&osn=debian&osv=12&vr=%3C3.0.20-1%7Edeb12u2", + "help": { + "text": "Issue summary: A signed integer overflow when sizing the destination buffer for Unicode output in ASN1_mbstring_ncopy() can lead to a heap buffer overflow. Impact summary: A heap buffer overflow may lead to a crash or possibly attacker controlled code execution or other undefined behaviour. In ASN1_mbstring_copy() and ASN1_mbstring_ncopy() the destination size for Unicode output is computed in a signed int: by left shift of the input character count for BMPSTRING (UTF-16) and UNIVERSALSTRING (UTF-32), and by summing per-character byte counts for UTF8STRING. The calculation overflows when the input reaches around 2^30 characters. In the worst case (UNIVERSALSTRING at 2^30 characters) the size wraps to zero, OPENSSL_malloc(1) is called, and the subsequent character copy writes several gigabytes past the one-byte allocation. X.509 certificate processing routes through ASN1_STRING_set_by_NID(), whose DIRSTRING_TYPE mask excludes UNIVERSALSTRING and whose per-NID size limits cap the input length; no network protocol or certificate-handling path in OpenSSL exercises the overflow. Triggering the bug requires an application that calls ASN1_mbstring_copy() or ASN1_mbstring_ncopy() directly, or registers a custom string type via ASN1_STRING_TABLE_add(), with attacker-controlled input on the order of half a gigabyte or more. For these reasons this issue was assigned Low severity. The FIPS modules in 4.0, 3.6, 3.5, 3.4 and 3.0 are not affected by this issue, as the affected code is outside the OpenSSL FIPS module boundary.\n\n---\n- openssl 3.6.3-1 (bug https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1139674)\nhttps://openssl-library.org/news/secadv/20260609.txt\nFixed by: https://github.com/openssl/openssl/commit/bd17511070fb39a67bfa19682affb765e706a974 (openssl-3.0.21)\n", + "markdown": "> Issue summary: A signed integer overflow when sizing the destination buffer for Unicode output in ASN1_mbstring_ncopy() can lead to a heap buffer overflow. Impact summary: A heap buffer overflow may lead to a crash or possibly attacker controlled code execution or other undefined behaviour. In ASN1_mbstring_copy() and ASN1_mbstring_ncopy() the destination size for Unicode output is computed in a signed int: by left shift of the input character count for BMPSTRING (UTF-16) and UNIVERSALSTRING (UTF-32), and by summing per-character byte counts for UTF8STRING. The calculation overflows when the input reaches around 2^30 characters. In the worst case (UNIVERSALSTRING at 2^30 characters) the size wraps to zero, OPENSSL_malloc(1) is called, and the subsequent character copy writes several gigabytes past the one-byte allocation. X.509 certificate processing routes through ASN1_STRING_set_by_NID(), whose DIRSTRING_TYPE mask excludes UNIVERSALSTRING and whose per-NID size limits cap the input length; no network protocol or certificate-handling path in OpenSSL exercises the overflow. Triggering the bug requires an application that calls ASN1_mbstring_copy() or ASN1_mbstring_ncopy() directly, or registers a custom string type via ASN1_STRING_TABLE_add(), with attacker-controlled input on the order of half a gigabyte or more. For these reasons this issue was assigned Low severity. The FIPS modules in 4.0, 3.6, 3.5, 3.4 and 3.0 are not affected by this issue, as the affected code is outside the OpenSSL FIPS module boundary.\n\n---\n- openssl 3.6.3-1 (bug https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1139674)\nhttps://openssl-library.org/news/secadv/20260609.txt\nFixed by: https://github.com/openssl/openssl/commit/bd17511070fb39a67bfa19682affb765e706a974 (openssl-3.0.21)\n\n| | |\n|----------------|-----------------------------------------------------------------------------------------|\n| Package | pkg:deb/debian/openssl@3.0.19-1~deb12u2?os_distro=bookworm&os_name=debian&os_version=12 |\n| Affected range | <3.0.20-1~deb12u2 |\n| Fixed version | 3.0.20-1~deb12u2 |\n" + }, + "properties": { + "affected_version": "<3.0.20-1~deb12u2", + "cvssV3_severity": "HIGH", + "fixed_version": "3.0.20-1~deb12u2", + "purls": [ + "pkg:deb/debian/openssl@3.0.19-1~deb12u2?os_distro=bookworm&os_name=debian&os_version=12" + ], + "security-severity": "8.1", + "tags": [ + "HIGH" + ] + } + }, + { + "id": "CVE-2025-6297", + "name": "OsPackageVulnerability", + "shortDescription": { + "text": "CVE-2025-6297" + }, + "helpUri": "https://scout.docker.com/v/CVE-2025-6297?s=debian&n=dpkg&ns=debian&t=deb&osn=debian&osv=12&vr=%3C1.21.23", + "help": { + "text": "It was discovered that dpkg-deb does not properly sanitize directory permissions when extracting a control member into a temporary directory, which is documented as being a safe operation even on untrusted data. This may result in leaving temporary files behind on cleanup. Given automated and repeated execution of dpkg-deb commands on adversarial .deb packages or with well compressible files, placed inside a directory with permissions not allowing removal by a non-root user, this can end up in a DoS scenario due to causing disk quota exhaustion or disk full conditions.\n\n---\n- dpkg 1.22.21\n[bookworm] - dpkg 1.21.23\nFixed by: https://git.dpkg.org/cgit/dpkg/dpkg.git/commit/?id=ed6bbd445dd8800308c67236ba35d08004c98e82 (main)\nFixed by: https://git.dpkg.org/cgit/dpkg/dpkg.git/commit/?id=98c623c8d6814ae46a3b30ca22e584c77d47d86b (1.22.21)\n", + "markdown": "> It was discovered that dpkg-deb does not properly sanitize directory permissions when extracting a control member into a temporary directory, which is documented as being a safe operation even on untrusted data. This may result in leaving temporary files behind on cleanup. Given automated and repeated execution of dpkg-deb commands on adversarial .deb packages or with well compressible files, placed inside a directory with permissions not allowing removal by a non-root user, this can end up in a DoS scenario due to causing disk quota exhaustion or disk full conditions.\n\n---\n- dpkg 1.22.21\n[bookworm] - dpkg 1.21.23\nFixed by: https://git.dpkg.org/cgit/dpkg/dpkg.git/commit/?id=ed6bbd445dd8800308c67236ba35d08004c98e82 (main)\nFixed by: https://git.dpkg.org/cgit/dpkg/dpkg.git/commit/?id=98c623c8d6814ae46a3b30ca22e584c77d47d86b (1.22.21)\n\n| | |\n|----------------|-----------------------------------------------------------------------------|\n| Package | pkg:deb/debian/dpkg@1.21.22?os_distro=bookworm&os_name=debian&os_version=12 |\n| Affected range | <1.21.23 |\n| Fixed version | 1.21.23 |\n" + }, + "properties": { + "affected_version": "<1.21.23", + "cvssV3_severity": "HIGH", + "fixed_version": "1.21.23", + "purls": [ + "pkg:deb/debian/dpkg@1.21.22?os_distro=bookworm&os_name=debian&os_version=12" + ], + "security-severity": "8.2", + "tags": [ + "HIGH" + ] + } + }, + { + "id": "CVE-2026-42013", + "name": "OsPackageVulnerability", + "shortDescription": { + "text": "CVE-2026-42013" + }, + "helpUri": "https://scout.docker.com/v/CVE-2026-42013?s=debian&n=gnutls28&ns=debian&t=deb&osn=debian&osv=12&vr=%3C3.7.9-2%2Bdeb12u7", + "help": { + "text": "A flaw was found in gnutls. When validating certificates, an oversized Subject Alternative Name (SAN) could cause the validation process to incorrectly fall back to checking the Common Name (CN) field. This could allow a remote attacker to bypass proper certificate validation, potentially leading to spoofing or man-in-the-middle attacks.\n\n---\n- gnutls28 3.8.13-1 (bug https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1135319)\nhttps://www.gnutls.org/security-new.html#GNUTLS-SA-2026-04-29-8\nhttps://gitlab.com/gnutls/gnutls/-/work_items/1825\nhttps://gitlab.com/gnutls/gnutls/-/issues/1849\nFixed by: https://gitlab.com/gnutls/gnutls/-/commit/29801bef00ecc0f23c0bac4cd333b269cd2c1af4 (3.8.13)\n", + "markdown": "> A flaw was found in gnutls. When validating certificates, an oversized Subject Alternative Name (SAN) could cause the validation process to incorrectly fall back to checking the Common Name (CN) field. This could allow a remote attacker to bypass proper certificate validation, potentially leading to spoofing or man-in-the-middle attacks.\n\n---\n- gnutls28 3.8.13-1 (bug https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1135319)\nhttps://www.gnutls.org/security-new.html#GNUTLS-SA-2026-04-29-8\nhttps://gitlab.com/gnutls/gnutls/-/work_items/1825\nhttps://gitlab.com/gnutls/gnutls/-/issues/1849\nFixed by: https://gitlab.com/gnutls/gnutls/-/commit/29801bef00ecc0f23c0bac4cd333b269cd2c1af4 (3.8.13)\n\n| | |\n|----------------|-------------------------------------------------------------------------------------------|\n| Package | pkg:deb/debian/gnutls28@3.7.9-2%2Bdeb12u6?os_distro=bookworm&os_name=debian&os_version=12 |\n| Affected range | <3.7.9-2+deb12u7 |\n| Fixed version | 3.7.9-2+deb12u7 |\n" + }, + "properties": { + "affected_version": "<3.7.9-2+deb12u7", + "cvssV3_severity": "HIGH", + "fixed_version": "3.7.9-2+deb12u7", + "purls": [ + "pkg:deb/debian/gnutls28@3.7.9-2%2Bdeb12u6?os_distro=bookworm&os_name=debian&os_version=12" + ], + "security-severity": "8.2", + "tags": [ + "HIGH" + ] + } + }, + { + "id": "CVE-2026-5260", + "name": "OsPackageVulnerability", + "shortDescription": { + "text": "CVE-2026-5260" + }, + "helpUri": "https://scout.docker.com/v/CVE-2026-5260?s=debian&n=gnutls28&ns=debian&t=deb&osn=debian&osv=12&vr=%3C3.7.9-2%2Bdeb12u7", + "help": { + "text": "A flaw was found in libgnutls. A remote attacker, by sending an extremely short premaster secret during an RSA key exchange to a server using an RSA key backed by a PKCS#11 token, could trigger a short heap overread. This memory corruption vulnerability could lead to information disclosure.\n\n---\n- gnutls28 3.8.13-1 (bug https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1135319)\nhttps://www.gnutls.org/security-new.html#GNUTLS-SA-2026-04-29-10\nhttps://gitlab.com/gnutls/gnutls/-/issues/1814\nFixed by: https://gitlab.com/gnutls/gnutls/-/commit/77228f2d1ac207d2f894e5a168fbb47e5378e42f (3.8.13)\nFixed by: https://gitlab.com/gnutls/gnutls/-/commit/cf6bdc5e4df49e5583d3fb4d2296779785f10683 (3.8.13)\nIntroduced with: https://gitlab.com/gnutls/gnutls/-/commit/4804febddc2ed958e5ae774de2a8f85edeeff538 (gnutls_3_6_5)\n", + "markdown": "> A flaw was found in libgnutls. A remote attacker, by sending an extremely short premaster secret during an RSA key exchange to a server using an RSA key backed by a PKCS#11 token, could trigger a short heap overread. This memory corruption vulnerability could lead to information disclosure.\n\n---\n- gnutls28 3.8.13-1 (bug https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1135319)\nhttps://www.gnutls.org/security-new.html#GNUTLS-SA-2026-04-29-10\nhttps://gitlab.com/gnutls/gnutls/-/issues/1814\nFixed by: https://gitlab.com/gnutls/gnutls/-/commit/77228f2d1ac207d2f894e5a168fbb47e5378e42f (3.8.13)\nFixed by: https://gitlab.com/gnutls/gnutls/-/commit/cf6bdc5e4df49e5583d3fb4d2296779785f10683 (3.8.13)\nIntroduced with: https://gitlab.com/gnutls/gnutls/-/commit/4804febddc2ed958e5ae774de2a8f85edeeff538 (gnutls_3_6_5)\n\n| | |\n|----------------|-------------------------------------------------------------------------------------------|\n| Package | pkg:deb/debian/gnutls28@3.7.9-2%2Bdeb12u6?os_distro=bookworm&os_name=debian&os_version=12 |\n| Affected range | <3.7.9-2+deb12u7 |\n| Fixed version | 3.7.9-2+deb12u7 |\n" + }, + "properties": { + "affected_version": "<3.7.9-2+deb12u7", + "cvssV3_severity": "HIGH", + "fixed_version": "3.7.9-2+deb12u7", + "purls": [ + "pkg:deb/debian/gnutls28@3.7.9-2%2Bdeb12u6?os_distro=bookworm&os_name=debian&os_version=12" + ], + "security-severity": "8.2", + "tags": [ + "HIGH" + ] + } + }, + { + "id": "CVE-2026-0861", + "name": "OsPackageVulnerability", + "shortDescription": { + "text": "CVE-2026-0861" + }, + "helpUri": "https://scout.docker.com/v/CVE-2026-0861?s=debian&n=glibc&ns=debian&t=deb&osn=debian&osv=12&vr=%3C2.36-9%2Bdeb12u14", + "help": { + "text": "Passing too large an alignment to the memalign suite of functions (memalign, posix_memalign, aligned_alloc) in the GNU C Library version 2.30 to 2.42 may result in an integer overflow, which could consequently result in a heap corruption. Note that the attacker must have control over both, the size as well as the alignment arguments of the memalign function to be able to exploit this. The size parameter must be close enough to PTRDIFF_MAX so as to overflow size_t along with the large alignment argument. This limits the malicious inputs for the alignment for memalign to the range [1<<62+ 1, 1<<63] and exactly 1<<63 for posix_memalign and aligned_alloc. Typically the alignment argument passed to such functions is a known constrained quantity (e.g. page size, block size, struct sizes) and is not attacker controlled, because of which this may not be easily exploitable in practice. An application bug could potentially result in the input alignment being too large, e.g. due to a different buffer overflow or integer overflow in the application or its dependent libraries, but that is again an uncommon usage pattern given typical sources of alignments.\n\n---\n- glibc 2.42-8 (bug https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1125678)\n[trixie] - glibc 2.41-12+deb13u2\n[bookworm] - glibc 2.36-9+deb12u14\nhttps://sourceware.org/bugzilla/show_bug.cgi?id=33796\nhttps://www.openwall.com/lists/oss-security/2026/01/16/5\nIntroduced with: https://sourceware.org/git/?p=glibc.git;a=commit;h=9bf8e29ca136094f73f69f725f15c51facc97206 (glibc-2.30)\nFixed by: https://sourceware.org/git/?p=glibc.git;a=commit;h=c9188d333717d3ceb7e3020011651f424f749f93 (glibc-2.43)\n", + "markdown": "> Passing too large an alignment to the memalign suite of functions (memalign, posix_memalign, aligned_alloc) in the GNU C Library version 2.30 to 2.42 may result in an integer overflow, which could consequently result in a heap corruption. Note that the attacker must have control over both, the size as well as the alignment arguments of the memalign function to be able to exploit this. The size parameter must be close enough to PTRDIFF_MAX so as to overflow size_t along with the large alignment argument. This limits the malicious inputs for the alignment for memalign to the range [1<<62+ 1, 1<<63] and exactly 1<<63 for posix_memalign and aligned_alloc. Typically the alignment argument passed to such functions is a known constrained quantity (e.g. page size, block size, struct sizes) and is not attacker controlled, because of which this may not be easily exploitable in practice. An application bug could potentially result in the input alignment being too large, e.g. due to a different buffer overflow or integer overflow in the application or its dependent libraries, but that is again an uncommon usage pattern given typical sources of alignments.\n\n---\n- glibc 2.42-8 (bug https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1125678)\n[trixie] - glibc 2.41-12+deb13u2\n[bookworm] - glibc 2.36-9+deb12u14\nhttps://sourceware.org/bugzilla/show_bug.cgi?id=33796\nhttps://www.openwall.com/lists/oss-security/2026/01/16/5\nIntroduced with: https://sourceware.org/git/?p=glibc.git;a=commit;h=9bf8e29ca136094f73f69f725f15c51facc97206 (glibc-2.30)\nFixed by: https://sourceware.org/git/?p=glibc.git;a=commit;h=c9188d333717d3ceb7e3020011651f424f749f93 (glibc-2.43)\n\n| | |\n|----------------|----------------------------------------------------------------------------------------|\n| Package | pkg:deb/debian/glibc@2.36-9%2Bdeb12u13?os_distro=bookworm&os_name=debian&os_version=12 |\n| Affected range | <2.36-9+deb12u14 |\n| Fixed version | 2.36-9+deb12u14 |\n" + }, + "properties": { + "affected_version": "<2.36-9+deb12u14", + "cvssV3_severity": "HIGH", + "fixed_version": "2.36-9+deb12u14", + "purls": [ + "pkg:deb/debian/glibc@2.36-9%2Bdeb12u13?os_distro=bookworm&os_name=debian&os_version=12" + ], + "security-severity": "8.4", + "tags": [ + "HIGH" + ] + } + }, + { + "id": "CVE-2026-45447", + "name": "OsPackageVulnerability", + "shortDescription": { + "text": "CVE-2026-45447" + }, + "helpUri": "https://scout.docker.com/v/CVE-2026-45447?s=debian&n=openssl&ns=debian&t=deb&osn=debian&osv=12&vr=%3C3.0.20-1%7Edeb12u2", + "help": { + "text": "Issue summary: A specially crafted PKCS#7 or S/MIME signed message could trigger a use-after-free during PKCS#7 signature verification. Impact summary: A use-after-free may result in process crashes, heap corruption, or potentially remote code execution. When processing a PKCS#7 or S/MIME signed message, if the SignedData digestAlgorithms field is present as an empty ASN.1 SET, OpenSSL may incorrectly free a caller-owned BIO during PKCS7_verify(). A subsequent use of the BIO by the calling application results in a use-after-free condition. In the common case this occurs when the application later calls BIO_free() on the BIO originally passed to PKCS7_verify(). Depending on allocator behavior and application-specific BIO usage patterns, this may result in a crash or other memory corruption. In some application contexts this may potentially be exploitable for remote code execution. Applications that process PKCS#7 or S/MIME signed messages using OpenSSL PKCS#7 APIs may be affected. Applications using the CMS APIs for this processing are not affected. The FIPS modules in 4.0, 3.6, 3.5, 3.4, and 3.0 are not affected by this issue, as the affected code is outside the OpenSSL FIPS module boundary.\n\n---\n- openssl 3.6.3-1 (bug https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1139674)\nhttps://openssl-library.org/news/secadv/20260609.txt\nFixed by: https://github.com/openssl/openssl/commit/9dfd688ad2290fc5075cacbc9bf0c9a93eefed54 (openssl-3.0.21)\nFixed by: https://github.com/openssl/openssl/commit/18de9aba8294b5fb0915866cf3a1bb45f9599b8d (openssl-3.0.21)\n", + "markdown": "> Issue summary: A specially crafted PKCS#7 or S/MIME signed message could trigger a use-after-free during PKCS#7 signature verification. Impact summary: A use-after-free may result in process crashes, heap corruption, or potentially remote code execution. When processing a PKCS#7 or S/MIME signed message, if the SignedData digestAlgorithms field is present as an empty ASN.1 SET, OpenSSL may incorrectly free a caller-owned BIO during PKCS7_verify(). A subsequent use of the BIO by the calling application results in a use-after-free condition. In the common case this occurs when the application later calls BIO_free() on the BIO originally passed to PKCS7_verify(). Depending on allocator behavior and application-specific BIO usage patterns, this may result in a crash or other memory corruption. In some application contexts this may potentially be exploitable for remote code execution. Applications that process PKCS#7 or S/MIME signed messages using OpenSSL PKCS#7 APIs may be affected. Applications using the CMS APIs for this processing are not affected. The FIPS modules in 4.0, 3.6, 3.5, 3.4, and 3.0 are not affected by this issue, as the affected code is outside the OpenSSL FIPS module boundary.\n\n---\n- openssl 3.6.3-1 (bug https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1139674)\nhttps://openssl-library.org/news/secadv/20260609.txt\nFixed by: https://github.com/openssl/openssl/commit/9dfd688ad2290fc5075cacbc9bf0c9a93eefed54 (openssl-3.0.21)\nFixed by: https://github.com/openssl/openssl/commit/18de9aba8294b5fb0915866cf3a1bb45f9599b8d (openssl-3.0.21)\n\n| | |\n|----------------|-----------------------------------------------------------------------------------------|\n| Package | pkg:deb/debian/openssl@3.0.19-1~deb12u2?os_distro=bookworm&os_name=debian&os_version=12 |\n| Affected range | <3.0.20-1~deb12u2 |\n| Fixed version | 3.0.20-1~deb12u2 |\n" + }, + "properties": { + "affected_version": "<3.0.20-1~deb12u2", + "cvssV3_severity": "HIGH", + "fixed_version": "3.0.20-1~deb12u2", + "purls": [ + "pkg:deb/debian/openssl@3.0.19-1~deb12u2?os_distro=bookworm&os_name=debian&os_version=12" + ], + "security-severity": "8.8", + "tags": [ + "HIGH" + ] + } + }, + { + "id": "CVE-2026-12087", + "name": "OsPackageVulnerability", + "shortDescription": { + "text": "CVE-2026-12087" + }, + "helpUri": "https://scout.docker.com/v/CVE-2026-12087?s=debian&n=perl&ns=debian&t=deb&osn=debian&osv=12&vr=%3E0", + "help": { + "text": "Socket versions before 2.041 for Perl have an out-of-bounds heap read. In Socket.xs, pack_ip_mreq_source() checks the length of its source argument before the argument is read, so the check tests the byte length carried over from the preceding multiaddr argument instead. Both addresses occupy a 4-byte field, so a valid multiaddr lets a source of any length pass the check, and the source is then copied into the 4-byte imr_sourceaddr field with a fixed-size copy. A source shorter than 4 bytes is not rejected, and the copy reads up to 3 bytes past the end of its buffer. Calling pack_ip_mreq_source() with a source value shorter than 4 bytes copies adjacent heap memory into the returned packed structure.\n\n---\n- libsocket-perl 2.041-1\n[trixie] - libsocket-perl (Minor issue)\n- perl (bug https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1140152)\nhttps://lists.security.metacpan.org/cve-announce/msg/41020451/\nFixed by: https://github.com/Perl/perl5/commit/de19a0b0ad1900fef976c5c1400bd8f11ec6c6cb (v5.43.11)\n", + "markdown": "> Socket versions before 2.041 for Perl have an out-of-bounds heap read. In Socket.xs, pack_ip_mreq_source() checks the length of its source argument before the argument is read, so the check tests the byte length carried over from the preceding multiaddr argument instead. Both addresses occupy a 4-byte field, so a valid multiaddr lets a source of any length pass the check, and the source is then copied into the 4-byte imr_sourceaddr field with a fixed-size copy. A source shorter than 4 bytes is not rejected, and the copy reads up to 3 bytes past the end of its buffer. Calling pack_ip_mreq_source() with a source value shorter than 4 bytes copies adjacent heap memory into the returned packed structure.\n\n---\n- libsocket-perl 2.041-1\n[trixie] - libsocket-perl (Minor issue)\n- perl (bug https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1140152)\nhttps://lists.security.metacpan.org/cve-announce/msg/41020451/\nFixed by: https://github.com/Perl/perl5/commit/de19a0b0ad1900fef976c5c1400bd8f11ec6c6cb (v5.43.11)\n\n| | |\n|----------------|----------------------------------------------------------------------------------------|\n| Package | pkg:deb/debian/perl@5.36.0-7%2Bdeb12u3?os_distro=bookworm&os_name=debian&os_version=12 |\n| Affected range | >0 |\n| Fixed version | not fixed |\n" + }, + "properties": { + "affected_version": ">0", + "cvssV3_severity": "CRITICAL", + "fixed_version": "not fixed", + "purls": [ + "pkg:deb/debian/perl@5.36.0-7%2Bdeb12u3?os_distro=bookworm&os_name=debian&os_version=12" + ], + "security-severity": "9.1", + "tags": [ + "CRITICAL" + ] + } + }, + { + "id": "CVE-2025-68121", + "name": "OsPackageVulnerability", + "shortDescription": { + "text": "CVE-2025-68121" + }, + "helpUri": "https://scout.docker.com/v/CVE-2025-68121?s=golang&n=stdlib&t=golang&vr=%3C1.24.13", + "help": { + "text": "During session resumption in crypto/tls, if the underlying Config has its ClientCAs or RootCAs fields mutated between the initial handshake and the resumed handshake, the resumed handshake may succeed when it should have failed. This may happen when a user calls Config.Clone and mutates the returned Config, or uses Config.GetConfigForClient. This can cause a client to resume a session with a server that it would not have resumed with during the initial handshake, or cause a server to resume a session with a client that it would not have resumed with during the initial handshake.\n", + "markdown": "> During session resumption in crypto/tls, if the underlying Config has its ClientCAs or RootCAs fields mutated between the initial handshake and the resumed handshake, the resumed handshake may succeed when it should have failed. This may happen when a user calls Config.Clone and mutates the returned Config, or uses Config.GetConfigForClient. This can cause a client to resume a session with a server that it would not have resumed with during the initial handshake, or cause a server to resume a session with a client that it would not have resumed with during the initial handshake.\n\n| | |\n|----------------|--------------------------|\n| Package | pkg:golang/stdlib@1.24.6 |\n| Affected range | <1.24.13 |\n| Fixed version | 1.24.13 |\n" + }, + "properties": { + "affected_version": "<1.24.13", + "cvssV3_severity": "CRITICAL", + "fixed_version": "1.24.13", + "purls": [ + "pkg:golang/stdlib@1.24.6" + ], + "security-severity": "10.0", + "tags": [ + "CRITICAL" + ] + } + } + ], + "version": "1.18.3" + } + }, + "results": [ + { + "ruleId": "CVE-2026-42010", + "ruleIndex": 0, + "kind": "fail", + "level": "error", + "message": { + "text": " Vulnerability : CVE-2026-42010 \n Severity : HIGH \n Package : pkg:deb/debian/gnutls28@3.7.9-2%2Bdeb12u6?os_distro=bookworm&os_name=debian&os_version=12 \n Affected range : <3.7.9-2+deb12u7 \n Fixed version : 3.7.9-2+deb12u7 \n EPSS Score : 0.010500 \n EPSS Percentile : 0.602280 \n" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "/usr/share/doc/libgnutls30/copyright" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/status" + } + } + } + ] + }, + { + "ruleId": "CVE-2026-42012", + "ruleIndex": 1, + "kind": "fail", + "level": "error", + "message": { + "text": " Vulnerability : CVE-2026-42012 \n Severity : HIGH \n Package : pkg:deb/debian/gnutls28@3.7.9-2%2Bdeb12u6?os_distro=bookworm&os_name=debian&os_version=12 \n Affected range : <3.7.9-2+deb12u7 \n Fixed version : 3.7.9-2+deb12u7 \n EPSS Score : 0.003540 \n EPSS Percentile : 0.274550 \n" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "/usr/share/doc/libgnutls30/copyright" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/status" + } + } + } + ] + }, + { + "ruleId": "CVE-2026-48962", + "ruleIndex": 2, + "kind": "fail", + "level": "error", + "message": { + "text": " Vulnerability : CVE-2026-48962 \n Severity : HIGH \n Package : pkg:deb/debian/perl@5.36.0-7%2Bdeb12u3?os_distro=bookworm&os_name=debian&os_version=12 \n Affected range : >0 \n Fixed version : not fixed \n EPSS Score : 0.002920 \n EPSS Percentile : 0.209720 \n" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "/usr/share/doc/libperl5.36/copyright" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/usr/share/doc/perl-base/copyright" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/usr/share/doc/perl-modules-5.36/copyright" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/usr/share/doc/perl/copyright" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/perl-base.list" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/perl-base.md5sums" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/perl-base.postinst" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/perl-base.postrm" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/perl-base.preinst" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/perl-base.prerm" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/perl-modules-5.36.list" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/perl-modules-5.36.md5sums" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/perl.conffiles" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/perl.list" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/perl.md5sums" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/perl.postinst" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/perl.postrm" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/perl.preinst" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/perl.prerm" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/status" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/etc/perl/Net/libnet.cfg" + } + } + } + ] + }, + { + "ruleId": "CVE-2026-42011", + "ruleIndex": 3, + "kind": "fail", + "level": "error", + "message": { + "text": " Vulnerability : CVE-2026-42011 \n Severity : HIGH \n Package : pkg:deb/debian/gnutls28@3.7.9-2%2Bdeb12u6?os_distro=bookworm&os_name=debian&os_version=12 \n Affected range : <3.7.9-2+deb12u7 \n Fixed version : 3.7.9-2+deb12u7 \n EPSS Score : 0.004750 \n EPSS Percentile : 0.377510 \n" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "/usr/share/doc/libgnutls30/copyright" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/status" + } + } + } + ] + }, + { + "ruleId": "CVE-2025-15281", + "ruleIndex": 4, + "kind": "fail", + "level": "error", + "message": { + "text": " Vulnerability : CVE-2025-15281 \n Severity : HIGH \n Package : pkg:deb/debian/glibc@2.36-9%2Bdeb12u13?os_distro=bookworm&os_name=debian&os_version=12 \n Affected range : <2.36-9+deb12u14 \n Fixed version : 2.36-9+deb12u14 \n EPSS Score : 0.002860 \n EPSS Percentile : 0.204610 \n" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "/usr/share/doc/libc-bin/copyright" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/usr/share/doc/libc-l10n/copyright" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/usr/share/doc/libc6/copyright" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/usr/share/doc/locales/copyright" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/libc-bin.conffiles" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/libc-bin.list" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/libc-bin.md5sums" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/libc-bin.postinst" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/libc-bin.triggers" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/libc-l10n.list" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/libc-l10n.md5sums" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/locales.conffiles" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/locales.config" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/locales.list" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/locales.md5sums" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/locales.postinst" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/locales.postrm" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/locales.prerm" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/locales.templates" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/status" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/etc/bindresvport.blacklist" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/etc/default/nss" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/etc/gai.conf" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/etc/ld.so.conf" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/etc/ld.so.conf.d/libc.conf" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/etc/ld.so.conf.d/x86_64-linux-gnu.conf" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/etc/locale.alias" + } + } + } + ] + }, + { + "ruleId": "CVE-2025-58187", + "ruleIndex": 5, + "kind": "fail", + "level": "error", + "message": { + "text": " Vulnerability : CVE-2025-58187 \n Severity : HIGH \n Package : pkg:golang/stdlib@1.24.6 \n Affected range : <1.24.9 \n Fixed version : 1.24.9 \n EPSS Score : 0.003840 \n EPSS Percentile : 0.304870 \n" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "/usr/local/bin/gosu" + } + } + } + ] + }, + { + "ruleId": "CVE-2025-58188", + "ruleIndex": 6, + "kind": "fail", + "level": "error", + "message": { + "text": " Vulnerability : CVE-2025-58188 \n Severity : HIGH \n Package : pkg:golang/stdlib@1.24.6 \n Affected range : <1.24.8 \n Fixed version : 1.24.8 \n EPSS Score : 0.003610 \n EPSS Percentile : 0.282020 \n" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "/usr/local/bin/gosu" + } + } + } + ] + }, + { + "ruleId": "CVE-2025-61723", + "ruleIndex": 7, + "kind": "fail", + "level": "error", + "message": { + "text": " Vulnerability : CVE-2025-61723 \n Severity : HIGH \n Package : pkg:golang/stdlib@1.24.6 \n Affected range : <1.24.8 \n Fixed version : 1.24.8 \n EPSS Score : 0.006260 \n EPSS Percentile : 0.457500 \n" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "/usr/local/bin/gosu" + } + } + } + ] + }, + { + "ruleId": "CVE-2025-61725", + "ruleIndex": 8, + "kind": "fail", + "level": "error", + "message": { + "text": " Vulnerability : CVE-2025-61725 \n Severity : HIGH \n Package : pkg:golang/stdlib@1.24.6 \n Affected range : <1.24.8 \n Fixed version : 1.24.8 \n EPSS Score : 0.006130 \n EPSS Percentile : 0.451170 \n" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "/usr/local/bin/gosu" + } + } + } + ] + }, + { + "ruleId": "CVE-2025-61726", + "ruleIndex": 9, + "kind": "fail", + "level": "error", + "message": { + "text": " Vulnerability : CVE-2025-61726 \n Severity : HIGH \n Package : pkg:golang/stdlib@1.24.6 \n Affected range : <1.24.12 \n Fixed version : 1.24.12 \n EPSS Score : 0.019450 \n EPSS Percentile : 0.777810 \n" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "/usr/local/bin/gosu" + } + } + } + ] + }, + { + "ruleId": "CVE-2025-61729", + "ruleIndex": 10, + "kind": "fail", + "level": "error", + "message": { + "text": " Vulnerability : CVE-2025-61729 \n Severity : HIGH \n Package : pkg:golang/stdlib@1.24.6 \n Affected range : <1.24.11 \n Fixed version : 1.24.11 \n EPSS Score : 0.004590 \n EPSS Percentile : 0.367000 \n" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "/usr/local/bin/gosu" + } + } + } + ] + }, + { + "ruleId": "CVE-2025-8194", + "ruleIndex": 11, + "kind": "fail", + "level": "error", + "message": { + "text": " Vulnerability : CVE-2025-8194 \n Severity : HIGH \n Package : pkg:deb/debian/python3.11@3.11.2-6%2Bdeb12u6?os_distro=bookworm&os_name=debian&os_version=12 \n Affected range : <3.11.2-6+deb12u7 \n Fixed version : 3.11.2-6+deb12u7 \n EPSS Score : 0.006110 \n EPSS Percentile : 0.450400 \n" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/python3.11-minimal.list" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/python3.11-minimal.postrm" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/status" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/etc/python3.11/sitecustomize.py" + } + } + } + ] + }, + { + "ruleId": "CVE-2026-0915", + "ruleIndex": 12, + "kind": "fail", + "level": "error", + "message": { + "text": " Vulnerability : CVE-2026-0915 \n Severity : HIGH \n Package : pkg:deb/debian/glibc@2.36-9%2Bdeb12u13?os_distro=bookworm&os_name=debian&os_version=12 \n Affected range : <2.36-9+deb12u14 \n Fixed version : 2.36-9+deb12u14 \n EPSS Score : 0.005640 \n EPSS Percentile : 0.428420 \n" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "/usr/share/doc/libc-bin/copyright" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/usr/share/doc/libc-l10n/copyright" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/usr/share/doc/libc6/copyright" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/usr/share/doc/locales/copyright" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/libc-bin.conffiles" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/libc-bin.list" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/libc-bin.md5sums" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/libc-bin.postinst" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/libc-bin.triggers" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/libc-l10n.list" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/libc-l10n.md5sums" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/locales.conffiles" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/locales.config" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/locales.list" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/locales.md5sums" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/locales.postinst" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/locales.postrm" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/locales.prerm" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/locales.templates" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/status" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/etc/bindresvport.blacklist" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/etc/default/nss" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/etc/gai.conf" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/etc/ld.so.conf" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/etc/ld.so.conf.d/libc.conf" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/etc/ld.so.conf.d/x86_64-linux-gnu.conf" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/etc/locale.alias" + } + } + } + ] + }, + { + "ruleId": "CVE-2026-25679", + "ruleIndex": 13, + "kind": "fail", + "level": "error", + "message": { + "text": " Vulnerability : CVE-2026-25679 \n Severity : HIGH \n Package : pkg:golang/stdlib@1.24.6 \n Affected range : <1.25.8 \n Fixed version : 1.25.8 \n EPSS Score : 0.007280 \n EPSS Percentile : 0.498210 \n" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "/usr/local/bin/gosu" + } + } + } + ] + }, + { + "ruleId": "CVE-2026-32280", + "ruleIndex": 14, + "kind": "fail", + "level": "error", + "message": { + "text": " Vulnerability : CVE-2026-32280 \n Severity : HIGH \n Package : pkg:golang/stdlib@1.24.6 \n Affected range : <1.25.9 \n Fixed version : 1.25.9 \n EPSS Score : 0.006150 \n EPSS Percentile : 0.452240 \n" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "/usr/local/bin/gosu" + } + } + } + ] + }, + { + "ruleId": "CVE-2026-32281", + "ruleIndex": 15, + "kind": "fail", + "level": "error", + "message": { + "text": " Vulnerability : CVE-2026-32281 \n Severity : HIGH \n Package : pkg:golang/stdlib@1.24.6 \n Affected range : <1.25.9 \n Fixed version : 1.25.9 \n EPSS Score : 0.003490 \n EPSS Percentile : 0.269600 \n" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "/usr/local/bin/gosu" + } + } + } + ] + }, + { + "ruleId": "CVE-2026-32283", + "ruleIndex": 16, + "kind": "fail", + "level": "error", + "message": { + "text": " Vulnerability : CVE-2026-32283 \n Severity : HIGH \n Package : pkg:golang/stdlib@1.24.6 \n Affected range : <1.25.9 \n Fixed version : 1.25.9 \n EPSS Score : 0.006210 \n EPSS Percentile : 0.455450 \n" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "/usr/local/bin/gosu" + } + } + } + ] + }, + { + "ruleId": "CVE-2026-33811", + "ruleIndex": 17, + "kind": "fail", + "level": "error", + "message": { + "text": " Vulnerability : CVE-2026-33811 \n Severity : HIGH \n Package : pkg:golang/stdlib@1.24.6 \n Affected range : <1.25.10 \n Fixed version : 1.25.10 \n EPSS Score : 0.008130 \n EPSS Percentile : 0.526530 \n" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "/usr/local/bin/gosu" + } + } + } + ] + }, + { + "ruleId": "CVE-2026-33814", + "ruleIndex": 18, + "kind": "fail", + "level": "error", + "message": { + "text": " Vulnerability : CVE-2026-33814 \n Severity : HIGH \n Package : pkg:golang/stdlib@1.24.6 \n Affected range : <1.25.10 \n Fixed version : 1.25.10 \n EPSS Score : 0.007810 \n EPSS Percentile : 0.516100 \n" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "/usr/local/bin/gosu" + } + } + } + ] + }, + { + "ruleId": "CVE-2026-33845", + "ruleIndex": 19, + "kind": "fail", + "level": "error", + "message": { + "text": " Vulnerability : CVE-2026-33845 \n Severity : HIGH \n Package : pkg:deb/debian/gnutls28@3.7.9-2%2Bdeb12u6?os_distro=bookworm&os_name=debian&os_version=12 \n Affected range : <3.7.9-2+deb12u7 \n Fixed version : 3.7.9-2+deb12u7 \n EPSS Score : 0.008050 \n EPSS Percentile : 0.524240 \n" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "/usr/share/doc/libgnutls30/copyright" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/status" + } + } + } + ] + }, + { + "ruleId": "CVE-2026-33846", + "ruleIndex": 20, + "kind": "fail", + "level": "error", + "message": { + "text": " Vulnerability : CVE-2026-33846 \n Severity : HIGH \n Package : pkg:deb/debian/gnutls28@3.7.9-2%2Bdeb12u6?os_distro=bookworm&os_name=debian&os_version=12 \n Affected range : <3.7.9-2+deb12u7 \n Fixed version : 3.7.9-2+deb12u7 \n EPSS Score : 0.012630 \n EPSS Percentile : 0.662070 \n" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "/usr/share/doc/libgnutls30/copyright" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/status" + } + } + } + ] + }, + { + "ruleId": "CVE-2026-34180", + "ruleIndex": 21, + "kind": "fail", + "level": "error", + "message": { + "text": " Vulnerability : CVE-2026-34180 \n Severity : HIGH \n Package : pkg:deb/debian/openssl@3.0.19-1~deb12u2?os_distro=bookworm&os_name=debian&os_version=12 \n Affected range : <3.0.20-1~deb12u2 \n Fixed version : 3.0.20-1~deb12u2 \n EPSS Score : 0.005130 \n EPSS Percentile : 0.400250 \n" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "/usr/share/doc/libssl3/copyright" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/usr/share/doc/openssl/copyright" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/openssl.conffiles" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/openssl.list" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/openssl.md5sums" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/openssl.postinst" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/status" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/etc/ssl/openssl.cnf" + } + } + } + ] + }, + { + "ruleId": "CVE-2026-39820", + "ruleIndex": 22, + "kind": "fail", + "level": "error", + "message": { + "text": " Vulnerability : CVE-2026-39820 \n Severity : HIGH \n Package : pkg:golang/stdlib@1.24.6 \n Affected range : <1.25.10 \n Fixed version : 1.25.10 \n EPSS Score : 0.007840 \n EPSS Percentile : 0.516880 \n" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "/usr/local/bin/gosu" + } + } + } + ] + }, + { + "ruleId": "CVE-2026-39836", + "ruleIndex": 23, + "kind": "fail", + "level": "error", + "message": { + "text": " Vulnerability : CVE-2026-39836 \n Severity : HIGH \n Package : pkg:golang/stdlib@1.24.6 \n Affected range : <1.25.10 \n Fixed version : 1.25.10 \n EPSS Score : 0.005880 \n EPSS Percentile : 0.439570 \n" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "/usr/local/bin/gosu" + } + } + } + ] + }, + { + "ruleId": "CVE-2026-4046", + "ruleIndex": 24, + "kind": "fail", + "level": "error", + "message": { + "text": " Vulnerability : CVE-2026-4046 \n Severity : HIGH \n Package : pkg:deb/debian/glibc@2.36-9%2Bdeb12u13?os_distro=bookworm&os_name=debian&os_version=12 \n Affected range : <2.36-9+deb12u14 \n Fixed version : 2.36-9+deb12u14 \n EPSS Score : 0.003570 \n EPSS Percentile : 0.278290 \n" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "/usr/share/doc/libc-bin/copyright" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/usr/share/doc/libc-l10n/copyright" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/usr/share/doc/libc6/copyright" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/usr/share/doc/locales/copyright" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/libc-bin.conffiles" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/libc-bin.list" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/libc-bin.md5sums" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/libc-bin.postinst" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/libc-bin.triggers" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/libc-l10n.list" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/libc-l10n.md5sums" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/locales.conffiles" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/locales.config" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/locales.list" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/locales.md5sums" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/locales.postinst" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/locales.postrm" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/locales.prerm" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/locales.templates" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/status" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/etc/bindresvport.blacklist" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/etc/default/nss" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/etc/gai.conf" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/etc/ld.so.conf" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/etc/ld.so.conf.d/libc.conf" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/etc/ld.so.conf.d/x86_64-linux-gnu.conf" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/etc/locale.alias" + } + } + } + ] + }, + { + "ruleId": "CVE-2026-42009", + "ruleIndex": 25, + "kind": "fail", + "level": "error", + "message": { + "text": " Vulnerability : CVE-2026-42009 \n Severity : HIGH \n Package : pkg:deb/debian/gnutls28@3.7.9-2%2Bdeb12u6?os_distro=bookworm&os_name=debian&os_version=12 \n Affected range : <3.7.9-2+deb12u7 \n Fixed version : 3.7.9-2+deb12u7 \n EPSS Score : 0.013350 \n EPSS Percentile : 0.677970 \n" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "/usr/share/doc/libgnutls30/copyright" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/status" + } + } + } + ] + }, + { + "ruleId": "CVE-2026-42499", + "ruleIndex": 26, + "kind": "fail", + "level": "error", + "message": { + "text": " Vulnerability : CVE-2026-42499 \n Severity : HIGH \n Package : pkg:golang/stdlib@1.24.6 \n Affected range : <1.25.10 \n Fixed version : 1.25.10 \n EPSS Score : 0.007980 \n EPSS Percentile : 0.521580 \n" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "/usr/local/bin/gosu" + } + } + } + ] + }, + { + "ruleId": "CVE-2026-42504", + "ruleIndex": 27, + "kind": "fail", + "level": "error", + "message": { + "text": " Vulnerability : CVE-2026-42504 \n Severity : HIGH \n Package : pkg:golang/stdlib@1.24.6 \n Affected range : <1.25.11 \n Fixed version : 1.25.11 \n EPSS Score : 0.005600 \n EPSS Percentile : 0.426280 \n" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "/usr/local/bin/gosu" + } + } + } + ] + }, + { + "ruleId": "CVE-2026-48959", + "ruleIndex": 28, + "kind": "fail", + "level": "error", + "message": { + "text": " Vulnerability : CVE-2026-48959 \n Severity : HIGH \n Package : pkg:deb/debian/perl@5.36.0-7%2Bdeb12u3?os_distro=bookworm&os_name=debian&os_version=12 \n Affected range : >0 \n Fixed version : not fixed \n EPSS Score : 0.003730 \n EPSS Percentile : 0.294000 \n" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "/usr/share/doc/libperl5.36/copyright" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/usr/share/doc/perl-base/copyright" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/usr/share/doc/perl-modules-5.36/copyright" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/usr/share/doc/perl/copyright" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/perl-base.list" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/perl-base.md5sums" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/perl-base.postinst" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/perl-base.postrm" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/perl-base.preinst" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/perl-base.prerm" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/perl-modules-5.36.list" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/perl-modules-5.36.md5sums" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/perl.conffiles" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/perl.list" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/perl.md5sums" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/perl.postinst" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/perl.postrm" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/perl.preinst" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/perl.prerm" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/status" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/etc/perl/Net/libnet.cfg" + } + } + } + ] + }, + { + "ruleId": "CVE-2026-9076", + "ruleIndex": 29, + "kind": "fail", + "level": "error", + "message": { + "text": " Vulnerability : CVE-2026-9076 \n Severity : HIGH \n Package : pkg:deb/debian/openssl@3.0.19-1~deb12u2?os_distro=bookworm&os_name=debian&os_version=12 \n Affected range : <3.0.20-1~deb12u2 \n Fixed version : 3.0.20-1~deb12u2 \n EPSS Score : 0.002970 \n EPSS Percentile : 0.214650 \n" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "/usr/share/doc/libssl3/copyright" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/usr/share/doc/openssl/copyright" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/openssl.conffiles" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/openssl.list" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/openssl.md5sums" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/openssl.postinst" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/status" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/etc/ssl/openssl.cnf" + } + } + } + ] + }, + { + "ruleId": "CVE-2026-7383", + "ruleIndex": 30, + "kind": "fail", + "level": "error", + "message": { + "text": " Vulnerability : CVE-2026-7383 \n Severity : HIGH \n Package : pkg:deb/debian/openssl@3.0.19-1~deb12u2?os_distro=bookworm&os_name=debian&os_version=12 \n Affected range : <3.0.20-1~deb12u2 \n Fixed version : 3.0.20-1~deb12u2 \n EPSS Score : 0.003580 \n EPSS Percentile : 0.278500 \n" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "/usr/share/doc/libssl3/copyright" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/usr/share/doc/openssl/copyright" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/openssl.conffiles" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/openssl.list" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/openssl.md5sums" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/openssl.postinst" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/status" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/etc/ssl/openssl.cnf" + } + } + } + ] + }, + { + "ruleId": "CVE-2025-6297", + "ruleIndex": 31, + "kind": "fail", + "level": "error", + "message": { + "text": " Vulnerability : CVE-2025-6297 \n Severity : HIGH \n Package : pkg:deb/debian/dpkg@1.21.22?os_distro=bookworm&os_name=debian&os_version=12 \n Affected range : <1.21.23 \n Fixed version : 1.21.23 \n EPSS Score : 0.003410 \n EPSS Percentile : 0.261660 \n" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "/usr/share/doc/dpkg/copyright" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/dpkg-dev.list" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/dpkg.conffiles" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/dpkg.list" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/dpkg.md5sums" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/dpkg.postinst" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/dpkg.postrm" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/dpkg.prerm" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/status" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/etc/alternatives/README" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/etc/cron.daily/dpkg" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/etc/dpkg/dpkg.cfg" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/etc/dpkg/shlibs.default" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/etc/dpkg/shlibs.override" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/etc/logrotate.d/alternatives" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/etc/logrotate.d/dpkg" + } + } + } + ] + }, + { + "ruleId": "CVE-2026-42013", + "ruleIndex": 32, + "kind": "fail", + "level": "error", + "message": { + "text": " Vulnerability : CVE-2026-42013 \n Severity : HIGH \n Package : pkg:deb/debian/gnutls28@3.7.9-2%2Bdeb12u6?os_distro=bookworm&os_name=debian&os_version=12 \n Affected range : <3.7.9-2+deb12u7 \n Fixed version : 3.7.9-2+deb12u7 \n EPSS Score : 0.004230 \n EPSS Percentile : 0.341120 \n" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "/usr/share/doc/libgnutls30/copyright" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/status" + } + } + } + ] + }, + { + "ruleId": "CVE-2026-5260", + "ruleIndex": 33, + "kind": "fail", + "level": "error", + "message": { + "text": " Vulnerability : CVE-2026-5260 \n Severity : HIGH \n Package : pkg:deb/debian/gnutls28@3.7.9-2%2Bdeb12u6?os_distro=bookworm&os_name=debian&os_version=12 \n Affected range : <3.7.9-2+deb12u7 \n Fixed version : 3.7.9-2+deb12u7 \n EPSS Score : 0.007270 \n EPSS Percentile : 0.497840 \n" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "/usr/share/doc/libgnutls30/copyright" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/status" + } + } + } + ] + }, + { + "ruleId": "CVE-2026-0861", + "ruleIndex": 34, + "kind": "fail", + "level": "error", + "message": { + "text": " Vulnerability : CVE-2026-0861 \n Severity : HIGH \n Package : pkg:deb/debian/glibc@2.36-9%2Bdeb12u13?os_distro=bookworm&os_name=debian&os_version=12 \n Affected range : <2.36-9+deb12u14 \n Fixed version : 2.36-9+deb12u14 \n EPSS Score : 0.003520 \n EPSS Percentile : 0.273210 \n" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "/usr/share/doc/libc-bin/copyright" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/usr/share/doc/libc-l10n/copyright" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/usr/share/doc/libc6/copyright" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/usr/share/doc/locales/copyright" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/libc-bin.conffiles" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/libc-bin.list" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/libc-bin.md5sums" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/libc-bin.postinst" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/libc-bin.triggers" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/libc-l10n.list" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/libc-l10n.md5sums" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/locales.conffiles" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/locales.config" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/locales.list" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/locales.md5sums" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/locales.postinst" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/locales.postrm" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/locales.prerm" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/locales.templates" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/status" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/etc/bindresvport.blacklist" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/etc/default/nss" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/etc/gai.conf" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/etc/ld.so.conf" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/etc/ld.so.conf.d/libc.conf" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/etc/ld.so.conf.d/x86_64-linux-gnu.conf" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/etc/locale.alias" + } + } + } + ] + }, + { + "ruleId": "CVE-2026-45447", + "ruleIndex": 35, + "kind": "fail", + "level": "error", + "message": { + "text": " Vulnerability : CVE-2026-45447 \n Severity : HIGH \n Package : pkg:deb/debian/openssl@3.0.19-1~deb12u2?os_distro=bookworm&os_name=debian&os_version=12 \n Affected range : <3.0.20-1~deb12u2 \n Fixed version : 3.0.20-1~deb12u2 \n EPSS Score : 0.027190 \n EPSS Percentile : 0.842740 \n" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "/usr/share/doc/libssl3/copyright" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/usr/share/doc/openssl/copyright" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/openssl.conffiles" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/openssl.list" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/openssl.md5sums" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/openssl.postinst" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/status" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/etc/ssl/openssl.cnf" + } + } + } + ] + }, + { + "ruleId": "CVE-2026-12087", + "ruleIndex": 36, + "kind": "fail", + "level": "error", + "message": { + "text": " Vulnerability : CVE-2026-12087 \n Severity : CRITICAL \n Package : pkg:deb/debian/perl@5.36.0-7%2Bdeb12u3?os_distro=bookworm&os_name=debian&os_version=12 \n Affected range : >0 \n Fixed version : not fixed \n EPSS Score : 0.003890 \n EPSS Percentile : 0.309730 \n" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "/usr/share/doc/libperl5.36/copyright" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/usr/share/doc/perl-base/copyright" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/usr/share/doc/perl-modules-5.36/copyright" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/usr/share/doc/perl/copyright" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/perl-base.list" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/perl-base.md5sums" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/perl-base.postinst" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/perl-base.postrm" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/perl-base.preinst" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/perl-base.prerm" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/perl-modules-5.36.list" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/perl-modules-5.36.md5sums" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/perl.conffiles" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/perl.list" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/perl.md5sums" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/perl.postinst" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/perl.postrm" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/perl.preinst" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/perl.prerm" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/status" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/etc/perl/Net/libnet.cfg" + } + } + } + ] + }, + { + "ruleId": "CVE-2025-68121", + "ruleIndex": 37, + "kind": "fail", + "level": "error", + "message": { + "text": " Vulnerability : CVE-2025-68121 \n Severity : CRITICAL \n Package : pkg:golang/stdlib@1.24.6 \n Affected range : <1.24.13 \n Fixed version : 1.24.13 \n EPSS Score : 0.007650 \n EPSS Percentile : 0.510700 \n" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "/usr/local/bin/gosu" + } + } + } + ] + } + ] + } + ] +} diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/docker-scout-postgres.stderr.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/docker-scout-postgres.stderr.log new file mode 100644 index 00000000..9f4227a1 --- /dev/null +++ b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/docker-scout-postgres.stderr.log @@ -0,0 +1,4 @@ + i New version 1.23.1 available (installed version is 1.18.3) at https://github.com/docker/scout-cli + v SBOM of image already cached, 223 packages indexed + x Detected 7 vulnerable packages with a total of 38 vulnerabilities + v Report written to D:\Dev\engram\.agent\worktrees\prc-release-gates\.agent\reports\evidence\production-ready\release-gates-foundation-revision-3\dev-stand-runtime\maker-runtime-1\nested\dev-stand\maker-runtime-1-scan\docker-scout-postgres.sarif.json diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/docker-scout-postgres.stdout.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/docker-scout-postgres.stdout.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/docker-scout-server.sarif.json b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/docker-scout-server.sarif.json new file mode 100644 index 00000000..00175a18 --- /dev/null +++ b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/docker-scout-server.sarif.json @@ -0,0 +1,731 @@ +{ + "version": "2.1.0", + "$schema": "https://raw.githubusercontent.com/oasis-tcs/sarif-spec/main/sarif-2.1/schema/sarif-schema-2.1.0.json", + "runs": [ + { + "tool": { + "driver": { + "fullName": "Docker Scout", + "informationUri": "https://docker.com/products/docker-scout", + "name": "docker scout", + "rules": [ + { + "id": "CVE-2026-48962", + "name": "OsPackageVulnerability", + "shortDescription": { + "text": "CVE-2026-48962" + }, + "helpUri": "https://scout.docker.com/v/CVE-2026-48962?s=debian&n=perl&ns=debian&t=deb&osn=debian&osv=12&vr=%3E0", + "help": { + "text": "IO::Compress versions before 2.220 for Perl can execute arbitrary code in File::GlobMapper via an attacker-controlled output glob. _parseOutputGlob() wraps the caller-supplied output glob string in double quotes and stores it in the parser state; _getFiles() then runs the stored expression through eval STRING. A literal double quote in the output glob closes the dquote wrapper, and the characters that follow are evaluated as Perl. Arbitrary Perl in the output glob executes at the calling process's privilege.\n\n---\n- libio-compress-perl 2.220-1 (bug https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1138055)\n[trixie] - libio-compress-perl (Minor issue)\n- perl 5.40.1-8 (bug https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1138854)\nhttps://lists.security.metacpan.org/cve-announce/msg/40434385/\nFixed by: https://github.com/pmqs/IO-Compress/commit/f2db247bf90d4cc7ee2710be384946081f3b4610 (v2.220)\n", + "markdown": "> IO::Compress versions before 2.220 for Perl can execute arbitrary code in File::GlobMapper via an attacker-controlled output glob. _parseOutputGlob() wraps the caller-supplied output glob string in double quotes and stores it in the parser state; _getFiles() then runs the stored expression through eval STRING. A literal double quote in the output glob closes the dquote wrapper, and the characters that follow are evaluated as Perl. Arbitrary Perl in the output glob executes at the calling process's privilege.\n\n---\n- libio-compress-perl 2.220-1 (bug https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1138055)\n[trixie] - libio-compress-perl (Minor issue)\n- perl 5.40.1-8 (bug https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1138854)\nhttps://lists.security.metacpan.org/cve-announce/msg/40434385/\nFixed by: https://github.com/pmqs/IO-Compress/commit/f2db247bf90d4cc7ee2710be384946081f3b4610 (v2.220)\n\n| | |\n|----------------|----------------------------------------------------------------------------------------|\n| Package | pkg:deb/debian/perl@5.36.0-7%2Bdeb12u3?os_distro=bookworm&os_name=debian&os_version=12 |\n| Affected range | >0 |\n| Fixed version | not fixed |\n" + }, + "properties": { + "affected_version": ">0", + "cvssV3_severity": "HIGH", + "fixed_version": "not fixed", + "purls": [ + "pkg:deb/debian/perl@5.36.0-7%2Bdeb12u3?os_distro=bookworm&os_name=debian&os_version=12" + ], + "security-severity": "7.3", + "tags": [ + "HIGH" + ] + } + }, + { + "id": "CVE-2026-39829", + "name": "OsPackageVulnerability", + "shortDescription": { + "text": "CVE-2026-39829: Improper Validation of Specified Quantity in Input" + }, + "helpUri": "https://scout.docker.com/v/CVE-2026-39829?s=github&n=crypto&ns=golang.org%2Fx&t=golang&vr=%3C0.52.0", + "help": { + "text": "The RSA and DSA public key parsers did not enforce size limits on key parameters. A crafted public key with an excessively large modulus or DSA parameter could cause several minutes of CPU consumption during signature verification. This could be triggered by unauthenticated clients during public key authentication. RSA moduli are now limited to 8192 bits, and DSA parameters are validated per FIPS 186-2.\n", + "markdown": "> The RSA and DSA public key parsers did not enforce size limits on key parameters. A crafted public key with an excessively large modulus or DSA parameter could cause several minutes of CPU consumption during signature verification. This could be triggered by unauthenticated clients during public key authentication. RSA moduli are now limited to 8192 bits, and DSA parameters are validated per FIPS 186-2.\n\n| | |\n|----------------|----------------------------------------------|\n| Package | pkg:golang/golang.org/x/crypto@0.50.0 |\n| Affected range | <0.52.0 |\n| Fixed version | 0.52.0 |\n| CVSS Score | 7.5 |\n| CVSS Vector | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H |\n" + }, + "properties": { + "affected_version": "<0.52.0", + "cvssV3": 7.5, + "cvssV3_severity": "HIGH", + "cvssV3_vector": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H", + "fixed_version": "0.52.0", + "purls": [ + "pkg:golang/golang.org/x/crypto@0.50.0" + ], + "security-severity": "7.5", + "tags": [ + "HIGH" + ] + } + }, + { + "id": "CVE-2026-46597", + "name": "OsPackageVulnerability", + "shortDescription": { + "text": "CVE-2026-46597: Incorrect Type Conversion or Cast" + }, + "helpUri": "https://scout.docker.com/v/CVE-2026-46597?s=github&n=crypto&ns=golang.org%2Fx&t=golang&vr=%3C0.52.0", + "help": { + "text": "An incorrectly placed cast from bytes to int allowed for server-side panic in the AES-GCM packet decoder for well-crafted inputs.\n", + "markdown": "> An incorrectly placed cast from bytes to int allowed for server-side panic in the AES-GCM packet decoder for well-crafted inputs.\n\n| | |\n|----------------|----------------------------------------------|\n| Package | pkg:golang/golang.org/x/crypto@0.50.0 |\n| Affected range | <0.52.0 |\n| Fixed version | 0.52.0 |\n| CVSS Score | 7.5 |\n| CVSS Vector | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H |\n" + }, + "properties": { + "affected_version": "<0.52.0", + "cvssV3": 7.5, + "cvssV3_severity": "HIGH", + "cvssV3_vector": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H", + "fixed_version": "0.52.0", + "purls": [ + "pkg:golang/golang.org/x/crypto@0.50.0" + ], + "security-severity": "7.5", + "tags": [ + "HIGH" + ] + } + }, + { + "id": "CVE-2026-48959", + "name": "OsPackageVulnerability", + "shortDescription": { + "text": "CVE-2026-48959" + }, + "helpUri": "https://scout.docker.com/v/CVE-2026-48959?s=debian&n=perl&ns=debian&t=deb&osn=debian&osv=12&vr=%3E0", + "help": { + "text": "IO::Uncompress::Unzip versions before 2.220 for Perl allow CPU exhaustion via per-byte read loop in fastForward. fastForward() compares length $offset (the digit count of the offset, 1 to 19) against the chunk size $c instead of $offset itself, so $c shrinks from 16 KiB to 1-19 bytes per iteration. Extracting a named entry from an attacker supplied zip via IO::Uncompress::Unzip->new($zip, Name => $target) drives a per-byte read loop scaling with the entry's compressed size, up to the non-Zip64 4 GiB cap.\n\n---\n- libio-compress-perl 2.220-1 (bug https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1138051)\n[trixie] - libio-compress-perl (Minor issue)\n- perl 5.40.1-8 (bug https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1138856)\nhttps://lists.security.metacpan.org/cve-announce/msg/40434381/\nFixed by: https://github.com/pmqs/IO-Compress/commit/68db44076f4c1a86a2ffe53a958eac6cabaf72e2 (v2.220)\n", + "markdown": "> IO::Uncompress::Unzip versions before 2.220 for Perl allow CPU exhaustion via per-byte read loop in fastForward. fastForward() compares length $offset (the digit count of the offset, 1 to 19) against the chunk size $c instead of $offset itself, so $c shrinks from 16 KiB to 1-19 bytes per iteration. Extracting a named entry from an attacker supplied zip via IO::Uncompress::Unzip->new($zip, Name => $target) drives a per-byte read loop scaling with the entry's compressed size, up to the non-Zip64 4 GiB cap.\n\n---\n- libio-compress-perl 2.220-1 (bug https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1138051)\n[trixie] - libio-compress-perl (Minor issue)\n- perl 5.40.1-8 (bug https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1138856)\nhttps://lists.security.metacpan.org/cve-announce/msg/40434381/\nFixed by: https://github.com/pmqs/IO-Compress/commit/68db44076f4c1a86a2ffe53a958eac6cabaf72e2 (v2.220)\n\n| | |\n|----------------|----------------------------------------------------------------------------------------|\n| Package | pkg:deb/debian/perl@5.36.0-7%2Bdeb12u3?os_distro=bookworm&os_name=debian&os_version=12 |\n| Affected range | >0 |\n| Fixed version | not fixed |\n" + }, + "properties": { + "affected_version": ">0", + "cvssV3_severity": "HIGH", + "fixed_version": "not fixed", + "purls": [ + "pkg:deb/debian/perl@5.36.0-7%2Bdeb12u3?os_distro=bookworm&os_name=debian&os_version=12" + ], + "security-severity": "7.5", + "tags": [ + "HIGH" + ] + } + }, + { + "id": "CVE-2026-12087", + "name": "OsPackageVulnerability", + "shortDescription": { + "text": "CVE-2026-12087" + }, + "helpUri": "https://scout.docker.com/v/CVE-2026-12087?s=debian&n=perl&ns=debian&t=deb&osn=debian&osv=12&vr=%3E0", + "help": { + "text": "Socket versions before 2.041 for Perl have an out-of-bounds heap read. In Socket.xs, pack_ip_mreq_source() checks the length of its source argument before the argument is read, so the check tests the byte length carried over from the preceding multiaddr argument instead. Both addresses occupy a 4-byte field, so a valid multiaddr lets a source of any length pass the check, and the source is then copied into the 4-byte imr_sourceaddr field with a fixed-size copy. A source shorter than 4 bytes is not rejected, and the copy reads up to 3 bytes past the end of its buffer. Calling pack_ip_mreq_source() with a source value shorter than 4 bytes copies adjacent heap memory into the returned packed structure.\n\n---\n- libsocket-perl 2.041-1\n[trixie] - libsocket-perl (Minor issue)\n- perl (bug https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1140152)\nhttps://lists.security.metacpan.org/cve-announce/msg/41020451/\nFixed by: https://github.com/Perl/perl5/commit/de19a0b0ad1900fef976c5c1400bd8f11ec6c6cb (v5.43.11)\n", + "markdown": "> Socket versions before 2.041 for Perl have an out-of-bounds heap read. In Socket.xs, pack_ip_mreq_source() checks the length of its source argument before the argument is read, so the check tests the byte length carried over from the preceding multiaddr argument instead. Both addresses occupy a 4-byte field, so a valid multiaddr lets a source of any length pass the check, and the source is then copied into the 4-byte imr_sourceaddr field with a fixed-size copy. A source shorter than 4 bytes is not rejected, and the copy reads up to 3 bytes past the end of its buffer. Calling pack_ip_mreq_source() with a source value shorter than 4 bytes copies adjacent heap memory into the returned packed structure.\n\n---\n- libsocket-perl 2.041-1\n[trixie] - libsocket-perl (Minor issue)\n- perl (bug https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1140152)\nhttps://lists.security.metacpan.org/cve-announce/msg/41020451/\nFixed by: https://github.com/Perl/perl5/commit/de19a0b0ad1900fef976c5c1400bd8f11ec6c6cb (v5.43.11)\n\n| | |\n|----------------|----------------------------------------------------------------------------------------|\n| Package | pkg:deb/debian/perl@5.36.0-7%2Bdeb12u3?os_distro=bookworm&os_name=debian&os_version=12 |\n| Affected range | >0 |\n| Fixed version | not fixed |\n" + }, + "properties": { + "affected_version": ">0", + "cvssV3_severity": "CRITICAL", + "fixed_version": "not fixed", + "purls": [ + "pkg:deb/debian/perl@5.36.0-7%2Bdeb12u3?os_distro=bookworm&os_name=debian&os_version=12" + ], + "security-severity": "9.1", + "tags": [ + "CRITICAL" + ] + } + }, + { + "id": "CVE-2026-39830", + "name": "OsPackageVulnerability", + "shortDescription": { + "text": "CVE-2026-39830: Improper Restriction of Operations within the Bounds of a Memory Buffer" + }, + "helpUri": "https://scout.docker.com/v/CVE-2026-39830?s=github&n=crypto&ns=golang.org%2Fx&t=golang&vr=%3C0.52.0", + "help": { + "text": "A malicious SSH peer could send unsolicited global request responses to fill an internal buffer, blocking the connection's read loop. The blocked goroutine could not be released by calling Close(), resulting in a resource leak per connection. Unsolicited global responses are now discarded.\n", + "markdown": "> A malicious SSH peer could send unsolicited global request responses to fill an internal buffer, blocking the connection's read loop. The blocked goroutine could not be released by calling Close(), resulting in a resource leak per connection. Unsolicited global responses are now discarded.\n\n| | |\n|----------------|----------------------------------------------|\n| Package | pkg:golang/golang.org/x/crypto@0.50.0 |\n| Affected range | <0.52.0 |\n| Fixed version | 0.52.0 |\n| CVSS Score | 9.1 |\n| CVSS Vector | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:H |\n" + }, + "properties": { + "affected_version": "<0.52.0", + "cvssV3": 9.1, + "cvssV3_severity": "CRITICAL", + "cvssV3_vector": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:H", + "fixed_version": "0.52.0", + "purls": [ + "pkg:golang/golang.org/x/crypto@0.50.0" + ], + "security-severity": "9.1", + "tags": [ + "CRITICAL" + ] + } + }, + { + "id": "CVE-2026-39831", + "name": "OsPackageVulnerability", + "shortDescription": { + "text": "CVE-2026-39831: Missing Authorization" + }, + "helpUri": "https://scout.docker.com/v/CVE-2026-39831?s=github&n=crypto&ns=golang.org%2Fx&t=golang&vr=%3C0.52.0", + "help": { + "text": "The Verify() method for FIDO/U2F security key types (sk-ecdsa-sha2-nistp256@openssh.com, sk-ssh-ed25519@openssh.com) did not check the User Presence flag. Signatures generated without physical touch were accepted, allowing unattended use of a hardware security key. To restore the previous behavior, return a \"no-touch-required\" extension in Permissions.Extensions from PublicKeyCallback.\n", + "markdown": "> The Verify() method for FIDO/U2F security key types (sk-ecdsa-sha2-nistp256@openssh.com, sk-ssh-ed25519@openssh.com) did not check the User Presence flag. Signatures generated without physical touch were accepted, allowing unattended use of a hardware security key. To restore the previous behavior, return a \"no-touch-required\" extension in Permissions.Extensions from PublicKeyCallback.\n\n| | |\n|----------------|----------------------------------------------|\n| Package | pkg:golang/golang.org/x/crypto@0.50.0 |\n| Affected range | <0.52.0 |\n| Fixed version | 0.52.0 |\n| CVSS Score | 9.1 |\n| CVSS Vector | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N |\n" + }, + "properties": { + "affected_version": "<0.52.0", + "cvssV3": 9.1, + "cvssV3_severity": "CRITICAL", + "cvssV3_vector": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N", + "fixed_version": "0.52.0", + "purls": [ + "pkg:golang/golang.org/x/crypto@0.50.0" + ], + "security-severity": "9.1", + "tags": [ + "CRITICAL" + ] + } + }, + { + "id": "CVE-2026-39832", + "name": "OsPackageVulnerability", + "shortDescription": { + "text": "CVE-2026-39832: Improper Preservation of Permissions" + }, + "helpUri": "https://scout.docker.com/v/CVE-2026-39832?s=github&n=crypto&ns=golang.org%2Fx&t=golang&vr=%3C0.52.0", + "help": { + "text": "When adding a key to a remote agent constraint extensions such as restrict-destination-v00@openssh.com were not serialized in the request. Destination restrictions were silently stripped when forwarding keys, allowing unrestricted use of the key on the remote host. The client now serializes all constraint extensions. Additionally, the in-memory keyring returned by NewKeyring() now rejects keys with unsupported constraint extensions instead of silently ignoring them.\n", + "markdown": "> When adding a key to a remote agent constraint extensions such as restrict-destination-v00@openssh.com were not serialized in the request. Destination restrictions were silently stripped when forwarding keys, allowing unrestricted use of the key on the remote host. The client now serializes all constraint extensions. Additionally, the in-memory keyring returned by NewKeyring() now rejects keys with unsupported constraint extensions instead of silently ignoring them.\n\n| | |\n|----------------|----------------------------------------------|\n| Package | pkg:golang/golang.org/x/crypto@0.50.0 |\n| Affected range | <0.52.0 |\n| Fixed version | 0.52.0 |\n| CVSS Score | 9.1 |\n| CVSS Vector | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N |\n" + }, + "properties": { + "affected_version": "<0.52.0", + "cvssV3": 9.1, + "cvssV3_severity": "CRITICAL", + "cvssV3_vector": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N", + "fixed_version": "0.52.0", + "purls": [ + "pkg:golang/golang.org/x/crypto@0.50.0" + ], + "security-severity": "9.1", + "tags": [ + "CRITICAL" + ] + } + }, + { + "id": "CVE-2026-39833", + "name": "OsPackageVulnerability", + "shortDescription": { + "text": "CVE-2026-39833: Missing Authorization" + }, + "helpUri": "https://scout.docker.com/v/CVE-2026-39833?s=github&n=crypto&ns=golang.org%2Fx&t=golang&vr=%3C0.52.0", + "help": { + "text": "The in-memory keyring returned by NewKeyring() silently accepted keys with the ConfirmBeforeUse constraint but never enforced it. The key would sign without any confirmation prompt, with no indication to the caller that the constraint was not in effect. NewKeyring() now returns an error when unsupported constraints are requested.\n", + "markdown": "> The in-memory keyring returned by NewKeyring() silently accepted keys with the ConfirmBeforeUse constraint but never enforced it. The key would sign without any confirmation prompt, with no indication to the caller that the constraint was not in effect. NewKeyring() now returns an error when unsupported constraints are requested.\n\n| | |\n|----------------|----------------------------------------------|\n| Package | pkg:golang/golang.org/x/crypto@0.50.0 |\n| Affected range | <0.52.0 |\n| Fixed version | 0.52.0 |\n| CVSS Score | 9.1 |\n| CVSS Vector | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N |\n" + }, + "properties": { + "affected_version": "<0.52.0", + "cvssV3": 9.1, + "cvssV3_severity": "CRITICAL", + "cvssV3_vector": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N", + "fixed_version": "0.52.0", + "purls": [ + "pkg:golang/golang.org/x/crypto@0.50.0" + ], + "security-severity": "9.1", + "tags": [ + "CRITICAL" + ] + } + }, + { + "id": "CVE-2026-39834", + "name": "OsPackageVulnerability", + "shortDescription": { + "text": "CVE-2026-39834: Integer Overflow or Wraparound" + }, + "helpUri": "https://scout.docker.com/v/CVE-2026-39834?s=github&n=crypto&ns=golang.org%2Fx&t=golang&vr=%3C0.52.0", + "help": { + "text": "When writing data larger than 4GB in a single Write call on an SSH channel, an integer overflow in the internal payload size calculation caused the write loop to spin indefinitely, sending empty packets without making progress. The size comparison now uses int64 to prevent truncation.\n", + "markdown": "> When writing data larger than 4GB in a single Write call on an SSH channel, an integer overflow in the internal payload size calculation caused the write loop to spin indefinitely, sending empty packets without making progress. The size comparison now uses int64 to prevent truncation.\n\n| | |\n|----------------|----------------------------------------------|\n| Package | pkg:golang/golang.org/x/crypto@0.50.0 |\n| Affected range | <0.52.0 |\n| Fixed version | 0.52.0 |\n| CVSS Score | 9.1 |\n| CVSS Vector | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:H |\n" + }, + "properties": { + "affected_version": "<0.52.0", + "cvssV3": 9.1, + "cvssV3_severity": "CRITICAL", + "cvssV3_vector": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:H", + "fixed_version": "0.52.0", + "purls": [ + "pkg:golang/golang.org/x/crypto@0.50.0" + ], + "security-severity": "9.1", + "tags": [ + "CRITICAL" + ] + } + }, + { + "id": "CVE-2026-42508", + "name": "OsPackageVulnerability", + "shortDescription": { + "text": "CVE-2026-42508: Improper Certificate Validation" + }, + "helpUri": "https://scout.docker.com/v/CVE-2026-42508?s=github&n=crypto&ns=golang.org%2Fx&t=golang&vr=%3C0.52.0", + "help": { + "text": "Previously, a revoked 'SignatureKey' belonging to a CA was not correctly checked for revocation. Now, both the 'key' and 'key.SignatureKey' are checked for @revoked.\n", + "markdown": "> Previously, a revoked 'SignatureKey' belonging to a CA was not correctly checked for revocation. Now, both the 'key' and 'key.SignatureKey' are checked for @revoked.\n\n| | |\n|----------------|----------------------------------------------|\n| Package | pkg:golang/golang.org/x/crypto@0.50.0 |\n| Affected range | <0.52.0 |\n| Fixed version | 0.52.0 |\n| CVSS Score | 9.1 |\n| CVSS Vector | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N |\n" + }, + "properties": { + "affected_version": "<0.52.0", + "cvssV3": 9.1, + "cvssV3_severity": "CRITICAL", + "cvssV3_vector": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N", + "fixed_version": "0.52.0", + "purls": [ + "pkg:golang/golang.org/x/crypto@0.50.0" + ], + "security-severity": "9.1", + "tags": [ + "CRITICAL" + ] + } + }, + { + "id": "CVE-2026-39821", + "name": "OsPackageVulnerability", + "shortDescription": { + "text": "CVE-2026-39821" + }, + "helpUri": "https://scout.docker.com/v/CVE-2026-39821?s=golang&n=net&ns=golang.org%2Fx&t=golang&vr=%3C0.55.0", + "help": { + "text": "The ToASCII and ToUnicode functions incorrectly accept Punycode-encoded labels that decode to an ASCII-only label. For example, ToUnicode(\"xn--example-.com\") incorrectly returns the name \"example.com\" rather than an error.\n\nThis behavior can lead to privilege escalation in programs using the idna package. For example, a program which performs privilege checks on the ASCII hostname may reject \"example.com\" but permit \"xn--example-.com\". If that program subsequently converts the ASCII hostname to Unicode, it will inadvertently permits access to the Unicode name \"example.com\".\n", + "markdown": "> The ToASCII and ToUnicode functions incorrectly accept Punycode-encoded labels that decode to an ASCII-only label. For example, ToUnicode(\"xn--example-.com\") incorrectly returns the name \"example.com\" rather than an error.\n\nThis behavior can lead to privilege escalation in programs using the idna package. For example, a program which performs privilege checks on the ASCII hostname may reject \"example.com\" but permit \"xn--example-.com\". If that program subsequently converts the ASCII hostname to Unicode, it will inadvertently permits access to the Unicode name \"example.com\".\n\n| | |\n|----------------|------------------------------------|\n| Package | pkg:golang/golang.org/x/net@0.53.0 |\n| Affected range | <0.55.0 |\n| Fixed version | 0.55.0 |\n" + }, + "properties": { + "affected_version": "<0.55.0", + "cvssV3_severity": "CRITICAL", + "fixed_version": "0.55.0", + "purls": [ + "pkg:golang/golang.org/x/net@0.53.0" + ], + "security-severity": "9.6", + "tags": [ + "CRITICAL" + ] + } + }, + { + "id": "CVE-2026-46595", + "name": "OsPackageVulnerability", + "shortDescription": { + "text": "CVE-2026-46595: Incorrect Implementation of Authentication Algorithm" + }, + "helpUri": "https://scout.docker.com/v/CVE-2026-46595?s=github&n=crypto&ns=golang.org%2Fx&t=golang&vr=%3C0.52.0", + "help": { + "text": "Previously, CVE-2024-45337 fixed an authorization bypass for misused ssh server configurations; if any other type of callback is passed other than public key, then the source-address validation would be skipped.\n", + "markdown": "> Previously, CVE-2024-45337 fixed an authorization bypass for misused ssh server configurations; if any other type of callback is passed other than public key, then the source-address validation would be skipped.\n\n| | |\n|----------------|----------------------------------------------|\n| Package | pkg:golang/golang.org/x/crypto@0.50.0 |\n| Affected range | <0.52.0 |\n| Fixed version | 0.52.0 |\n| CVSS Score | 10.0 |\n| CVSS Vector | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:L |\n" + }, + "properties": { + "affected_version": "<0.52.0", + "cvssV3": 10, + "cvssV3_severity": "CRITICAL", + "cvssV3_vector": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:L", + "fixed_version": "0.52.0", + "purls": [ + "pkg:golang/golang.org/x/crypto@0.50.0" + ], + "security-severity": "10.0", + "tags": [ + "CRITICAL" + ] + } + } + ], + "version": "1.18.3" + } + }, + "results": [ + { + "ruleId": "CVE-2026-48962", + "ruleIndex": 0, + "kind": "fail", + "level": "error", + "message": { + "text": " Vulnerability : CVE-2026-48962 \n Severity : HIGH \n Package : pkg:deb/debian/perl@5.36.0-7%2Bdeb12u3?os_distro=bookworm&os_name=debian&os_version=12 \n Affected range : >0 \n Fixed version : not fixed \n EPSS Score : 0.002920 \n EPSS Percentile : 0.209720 \n" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "/usr/share/doc/perl-base/copyright" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/perl-base.list" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/perl-base.md5sums" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/perl-base.postinst" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/perl-base.postrm" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/perl-base.preinst" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/perl-base.prerm" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/status" + } + } + } + ] + }, + { + "ruleId": "CVE-2026-39829", + "ruleIndex": 1, + "kind": "fail", + "level": "error", + "message": { + "text": " Vulnerability : CVE-2026-39829 \n Severity : HIGH \n Package : pkg:golang/golang.org/x/crypto@0.50.0 \n Affected range : <0.52.0 \n Fixed version : 0.52.0 \n CVSS Score : 7.5 \n CVSS Vector : CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H \n EPSS Score : 0.004150 \n EPSS Percentile : 0.334980 \n" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "/usr/local/bin/engram-server" + } + } + } + ] + }, + { + "ruleId": "CVE-2026-46597", + "ruleIndex": 2, + "kind": "fail", + "level": "error", + "message": { + "text": " Vulnerability : CVE-2026-46597 \n Severity : HIGH \n Package : pkg:golang/golang.org/x/crypto@0.50.0 \n Affected range : <0.52.0 \n Fixed version : 0.52.0 \n CVSS Score : 7.5 \n CVSS Vector : CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H \n EPSS Score : 0.003590 \n EPSS Percentile : 0.280070 \n" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "/usr/local/bin/engram-server" + } + } + } + ] + }, + { + "ruleId": "CVE-2026-48959", + "ruleIndex": 3, + "kind": "fail", + "level": "error", + "message": { + "text": " Vulnerability : CVE-2026-48959 \n Severity : HIGH \n Package : pkg:deb/debian/perl@5.36.0-7%2Bdeb12u3?os_distro=bookworm&os_name=debian&os_version=12 \n Affected range : >0 \n Fixed version : not fixed \n EPSS Score : 0.003730 \n EPSS Percentile : 0.294000 \n" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "/usr/share/doc/perl-base/copyright" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/perl-base.list" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/perl-base.md5sums" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/perl-base.postinst" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/perl-base.postrm" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/perl-base.preinst" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/perl-base.prerm" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/status" + } + } + } + ] + }, + { + "ruleId": "CVE-2026-12087", + "ruleIndex": 4, + "kind": "fail", + "level": "error", + "message": { + "text": " Vulnerability : CVE-2026-12087 \n Severity : CRITICAL \n Package : pkg:deb/debian/perl@5.36.0-7%2Bdeb12u3?os_distro=bookworm&os_name=debian&os_version=12 \n Affected range : >0 \n Fixed version : not fixed \n EPSS Score : 0.003890 \n EPSS Percentile : 0.309730 \n" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "/usr/share/doc/perl-base/copyright" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/perl-base.list" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/perl-base.md5sums" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/perl-base.postinst" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/perl-base.postrm" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/perl-base.preinst" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/info/perl-base.prerm" + } + } + }, + { + "physicalLocation": { + "artifactLocation": { + "uri": "/var/lib/dpkg/status" + } + } + } + ] + }, + { + "ruleId": "CVE-2026-39830", + "ruleIndex": 5, + "kind": "fail", + "level": "error", + "message": { + "text": " Vulnerability : CVE-2026-39830 \n Severity : CRITICAL \n Package : pkg:golang/golang.org/x/crypto@0.50.0 \n Affected range : <0.52.0 \n Fixed version : 0.52.0 \n CVSS Score : 9.1 \n CVSS Vector : CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:H \n EPSS Score : 0.005330 \n EPSS Percentile : 0.411710 \n" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "/usr/local/bin/engram-server" + } + } + } + ] + }, + { + "ruleId": "CVE-2026-39831", + "ruleIndex": 6, + "kind": "fail", + "level": "error", + "message": { + "text": " Vulnerability : CVE-2026-39831 \n Severity : CRITICAL \n Package : pkg:golang/golang.org/x/crypto@0.50.0 \n Affected range : <0.52.0 \n Fixed version : 0.52.0 \n CVSS Score : 9.1 \n CVSS Vector : CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N \n EPSS Score : 0.003730 \n EPSS Percentile : 0.293870 \n" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "/usr/local/bin/engram-server" + } + } + } + ] + }, + { + "ruleId": "CVE-2026-39832", + "ruleIndex": 7, + "kind": "fail", + "level": "error", + "message": { + "text": " Vulnerability : CVE-2026-39832 \n Severity : CRITICAL \n Package : pkg:golang/golang.org/x/crypto@0.50.0 \n Affected range : <0.52.0 \n Fixed version : 0.52.0 \n CVSS Score : 9.1 \n CVSS Vector : CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N \n EPSS Score : 0.004030 \n EPSS Percentile : 0.324260 \n" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "/usr/local/bin/engram-server" + } + } + } + ] + }, + { + "ruleId": "CVE-2026-39833", + "ruleIndex": 8, + "kind": "fail", + "level": "error", + "message": { + "text": " Vulnerability : CVE-2026-39833 \n Severity : CRITICAL \n Package : pkg:golang/golang.org/x/crypto@0.50.0 \n Affected range : <0.52.0 \n Fixed version : 0.52.0 \n CVSS Score : 9.1 \n CVSS Vector : CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N \n EPSS Score : 0.003600 \n EPSS Percentile : 0.281200 \n" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "/usr/local/bin/engram-server" + } + } + } + ] + }, + { + "ruleId": "CVE-2026-39834", + "ruleIndex": 9, + "kind": "fail", + "level": "error", + "message": { + "text": " Vulnerability : CVE-2026-39834 \n Severity : CRITICAL \n Package : pkg:golang/golang.org/x/crypto@0.50.0 \n Affected range : <0.52.0 \n Fixed version : 0.52.0 \n CVSS Score : 9.1 \n CVSS Vector : CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:H \n EPSS Score : 0.004660 \n EPSS Percentile : 0.371630 \n" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "/usr/local/bin/engram-server" + } + } + } + ] + }, + { + "ruleId": "CVE-2026-42508", + "ruleIndex": 10, + "kind": "fail", + "level": "error", + "message": { + "text": " Vulnerability : CVE-2026-42508 \n Severity : CRITICAL \n Package : pkg:golang/golang.org/x/crypto@0.50.0 \n Affected range : <0.52.0 \n Fixed version : 0.52.0 \n CVSS Score : 9.1 \n CVSS Vector : CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N \n EPSS Score : 0.004870 \n EPSS Percentile : 0.385310 \n" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "/usr/local/bin/engram-server" + } + } + } + ] + }, + { + "ruleId": "CVE-2026-39821", + "ruleIndex": 11, + "kind": "fail", + "level": "error", + "message": { + "text": " Vulnerability : CVE-2026-39821 \n Severity : CRITICAL \n Package : pkg:golang/golang.org/x/net@0.53.0 \n Affected range : <0.55.0 \n Fixed version : 0.55.0 \n EPSS Score : 0.004780 \n EPSS Percentile : 0.379210 \n" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "/usr/local/bin/engram-server" + } + } + } + ] + }, + { + "ruleId": "CVE-2026-46595", + "ruleIndex": 12, + "kind": "fail", + "level": "error", + "message": { + "text": " Vulnerability : CVE-2026-46595 \n Severity : CRITICAL \n Package : pkg:golang/golang.org/x/crypto@0.50.0 \n Affected range : <0.52.0 \n Fixed version : 0.52.0 \n CVSS Score : 10.0 \n CVSS Vector : CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:L \n EPSS Score : 0.004400 \n EPSS Percentile : 0.354330 \n" + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "/usr/local/bin/engram-server" + } + } + } + ] + } + ] + } + ] +} diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/docker-scout-server.stderr.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/docker-scout-server.stderr.log new file mode 100644 index 00000000..580f574e --- /dev/null +++ b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/docker-scout-server.stderr.log @@ -0,0 +1,7 @@ + i New version 1.23.1 available (installed version is 1.18.3) at https://github.com/docker/scout-cli + ...Storing image for indexing + v Image stored for indexing + ...Indexing + v Indexed 202 packages + x Detected 3 vulnerable packages with a total of 13 vulnerabilities + v Report written to D:\Dev\engram\.agent\worktrees\prc-release-gates\.agent\reports\evidence\production-ready\release-gates-foundation-revision-3\dev-stand-runtime\maker-runtime-1\nested\dev-stand\maker-runtime-1-scan\docker-scout-server.sarif.json diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/docker-scout-server.stdout.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/docker-scout-server.stdout.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-inspect-operator-console.stderr.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-inspect-operator-console.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-inspect-operator-console.stdout.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-inspect-operator-console.stdout.log new file mode 100644 index 00000000..ef06e692 --- /dev/null +++ b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-inspect-operator-console.stdout.log @@ -0,0 +1 @@ +ghcr.io/thebtf/engram-operator-console:main|sha256:74d7c0db215c0a40d716c24f0326a487d7822ec94d0d0edc74b5fcf014face18 diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-inspect-postgres.stderr.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-inspect-postgres.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-inspect-postgres.stdout.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-inspect-postgres.stdout.log new file mode 100644 index 00000000..0fda45fb --- /dev/null +++ b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-inspect-postgres.stdout.log @@ -0,0 +1 @@ +pgvector/pgvector:pg17|sha256:feb68f4f15446397d8cac7f4fe48fe4586de83160d1fc48b46283312d1a33966 diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-inspect-server.stderr.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-inspect-server.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-inspect-server.stdout.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-inspect-server.stdout.log new file mode 100644 index 00000000..a62e1c97 --- /dev/null +++ b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-inspect-server.stdout.log @@ -0,0 +1 @@ +ghcr.io/thebtf/engram:main|sha256:a6e55d692ddf31a94b0a1d29a4e615ff509c6dac19eccafca4bda3e51147b38f diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-inventory.stderr.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-inventory.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-inventory.stdout.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-inventory.stdout.log new file mode 100644 index 00000000..6f9b8ff4 --- /dev/null +++ b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-inventory.stdout.log @@ -0,0 +1,3 @@ +1f9e23d5284a|operator-console +e6d119b206fa|server +a230a1d63fb3|postgres diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-tag-inspect-operator-console.stderr.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-tag-inspect-operator-console.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-tag-inspect-operator-console.stdout.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-tag-inspect-operator-console.stdout.log new file mode 100644 index 00000000..0b0905aa --- /dev/null +++ b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-tag-inspect-operator-console.stdout.log @@ -0,0 +1 @@ +sha256:74d7c0db215c0a40d716c24f0326a487d7822ec94d0d0edc74b5fcf014face18 diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-tag-inspect-postgres.stderr.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-tag-inspect-postgres.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-tag-inspect-postgres.stdout.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-tag-inspect-postgres.stdout.log new file mode 100644 index 00000000..893200d5 --- /dev/null +++ b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-tag-inspect-postgres.stdout.log @@ -0,0 +1 @@ +sha256:feb68f4f15446397d8cac7f4fe48fe4586de83160d1fc48b46283312d1a33966 diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-tag-inspect-server.stderr.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-tag-inspect-server.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-tag-inspect-server.stdout.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-tag-inspect-server.stdout.log new file mode 100644 index 00000000..55054a50 --- /dev/null +++ b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-tag-inspect-server.stdout.log @@ -0,0 +1 @@ +sha256:a6e55d692ddf31a94b0a1d29a4e615ff509c6dac19eccafca4bda3e51147b38f diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/summary.json b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/summary.json new file mode 100644 index 00000000..219bc025 --- /dev/null +++ b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/summary.json @@ -0,0 +1,105 @@ +{ + "schema_version": 1, + "gate": "dev-stand-contract", + "action": "Scan", + "run_id": "maker-runtime-1", + "started_at": "2026-07-10T09:42:11.9259138+00:00", + "finished_at": "2026-07-10T09:42:38.3932061+00:00", + "duration_seconds": 26.467, + "verdict": "FAIL", + "compose_project": "engram-critical-stand", + "compose_file": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\docker-compose.yml", + "ephemeral_postgres_password_generated": false, + "ephemeral_admin_token_generated": false, + "ephemeral_bootstrap_capability_generated": false, + "ephemeral_credentials_distinct_and_nondefault": false, + "ephemeral_credentials_runtime_injected": false, + "ephemeral_postgres_password_persisted": false, + "ephemeral_admin_token_persisted": false, + "ephemeral_bootstrap_capability_persisted": false, + "exact_image_targets": { + "postgres": "pgvector/pgvector:pg17", + "server": "ghcr.io/thebtf/engram:main", + "operator-console": "ghcr.io/thebtf/engram-operator-console:main" + }, + "actual_images": { + "operator-console": "ghcr.io/thebtf/engram-operator-console:main", + "postgres": "pgvector/pgvector:pg17", + "server": "ghcr.io/thebtf/engram:main" + }, + "actual_image_ids": { + "operator-console": "sha256:74d7c0db215c0a40d716c24f0326a487d7822ec94d0d0edc74b5fcf014face18", + "postgres": "sha256:feb68f4f15446397d8cac7f4fe48fe4586de83160d1fc48b46283312d1a33966", + "server": "sha256:a6e55d692ddf31a94b0a1d29a4e615ff509c6dac19eccafca4bda3e51147b38f" + }, + "tag_image_ids": { + "operator-console": "sha256:74d7c0db215c0a40d716c24f0326a487d7822ec94d0d0edc74b5fcf014face18", + "postgres": "sha256:feb68f4f15446397d8cac7f4fe48fe4586de83160d1fc48b46283312d1a33966", + "server": "sha256:a6e55d692ddf31a94b0a1d29a4e615ff509c6dac19eccafca4bda3e51147b38f" + }, + "liveness_endpoints": [], + "semantic_ready_endpoints": [], + "vulnerability_scan": { + "scanner": "docker scout cves", + "severity_gate": [ + "critical", + "high" + ], + "scans": [ + { + "service": "operator-console", + "image": "ghcr.io/thebtf/engram-operator-console:main", + "image_id": "sha256:74d7c0db215c0a40d716c24f0326a487d7822ec94d0d0edc74b5fcf014face18", + "scanner": "docker scout cves", + "severities": [ + "critical", + "high" + ], + "exit_code": 2, + "vulnerability_count": 5, + "sarif": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-scan\\docker-scout-operator-console.sarif.json", + "parse_error": null + }, + { + "service": "postgres", + "image": "pgvector/pgvector:pg17", + "image_id": "sha256:feb68f4f15446397d8cac7f4fe48fe4586de83160d1fc48b46283312d1a33966", + "scanner": "docker scout cves", + "severities": [ + "critical", + "high" + ], + "exit_code": 2, + "vulnerability_count": 38, + "sarif": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-scan\\docker-scout-postgres.sarif.json", + "parse_error": null + }, + { + "service": "server", + "image": "ghcr.io/thebtf/engram:main", + "image_id": "sha256:a6e55d692ddf31a94b0a1d29a4e615ff509c6dac19eccafca4bda3e51147b38f", + "scanner": "docker scout cves", + "severities": [ + "critical", + "high" + ], + "exit_code": 2, + "vulnerability_count": 13, + "sarif": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-scan\\docker-scout-server.sarif.json", + "parse_error": null + } + ] + }, + "automatic_failure_cleanup": false, + "residual_checks_performed": false, + "residual_resources_zero": null, + "child_commands": 10, + "nonzero_child_commands": 3, + "commands": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-scan\\commands.json", + "errors": [ + "HIGH/CRITICAL vulnerabilities detected in exact image 'ghcr.io/thebtf/engram-operator-console:main' (count=5)", + "HIGH/CRITICAL vulnerabilities detected in exact image 'pgvector/pgvector:pg17' (count=38)", + "HIGH/CRITICAL vulnerabilities detected in exact image 'ghcr.io/thebtf/engram:main' (count=13)" + ], + "artifact_directory": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-scan" +} diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/api-ready.stderr.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/api-ready.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/api-ready.stdout.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/api-ready.stdout.log new file mode 100644 index 00000000..36aa5929 --- /dev/null +++ b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/api-ready.stdout.log @@ -0,0 +1,3 @@ +{"status":"ready"} + +200 \ No newline at end of file diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/commands.json b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/commands.json new file mode 100644 index 00000000..a03f5e85 --- /dev/null +++ b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/commands.json @@ -0,0 +1,404 @@ +[ + { + "name": "dev-stand-up", + "executable": "C:\\Program Files\\Docker\\Docker\\resources\\bin\\docker.exe", + "arguments": [ + "compose", + "-p", + "engram-critical-stand", + "-f", + "docker-compose.yml", + "-f", + ".agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-up\\ephemeral-credential-injection.compose.yaml", + "up", + "-d", + "--build", + "--wait" + ], + "environment_keys": [ + "COMPOSE_PROJECT_NAME", + "DATABASE_DSN", + "ENGRAM_AUTH_ADMIN_TOKEN", + "ENGRAM_AUTH_BOOTSTRAP_CAPABILITY", + "ENGRAM_AUTH_DISABLED", + "NUXT_OPERATOR_API_TARGET", + "OPERATOR_CONSOLE_PORT", + "POSTGRES_PASSWORD", + "POSTGRES_PORT", + "STAND_API_URL", + "STAND_OPERATOR_URL", + "WORKER_PORT" + ], + "command": "C:\\Program Files\\Docker\\Docker\\resources\\bin\\docker.exe compose -p engram-critical-stand -f docker-compose.yml -f .agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-up\\ephemeral-credential-injection.compose.yaml up -d --build --wait", + "started_at": "2026-07-10T09:41:15.3269131+00:00", + "finished_at": "2026-07-10T09:42:05.0429591+00:00", + "duration_seconds": 49.716, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-up\\compose-up.stdout.log", + "stderr": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-up\\compose-up.stderr.log" + }, + { + "name": "dev-stand-postgres-container-id", + "executable": "C:\\Program Files\\Docker\\Docker\\resources\\bin\\docker.exe", + "arguments": [ + "compose", + "-p", + "engram-critical-stand", + "-f", + "docker-compose.yml", + "-f", + ".agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-up\\ephemeral-credential-injection.compose.yaml", + "ps", + "-q", + "postgres" + ], + "environment_keys": [ + "COMPOSE_PROJECT_NAME", + "DATABASE_DSN", + "ENGRAM_AUTH_ADMIN_TOKEN", + "ENGRAM_AUTH_BOOTSTRAP_CAPABILITY", + "ENGRAM_AUTH_DISABLED", + "NUXT_OPERATOR_API_TARGET", + "OPERATOR_CONSOLE_PORT", + "POSTGRES_PASSWORD", + "POSTGRES_PORT", + "STAND_API_URL", + "STAND_OPERATOR_URL", + "WORKER_PORT" + ], + "command": "C:\\Program Files\\Docker\\Docker\\resources\\bin\\docker.exe compose -p engram-critical-stand -f docker-compose.yml -f .agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-up\\ephemeral-credential-injection.compose.yaml ps -q postgres", + "started_at": "2026-07-10T09:42:05.0594634+00:00", + "finished_at": "2026-07-10T09:42:05.4818405+00:00", + "duration_seconds": 0.422, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-up\\postgres-container-id.stdout.log", + "stderr": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-up\\postgres-container-id.stderr.log" + }, + { + "name": "dev-stand-postgres-credential-injection", + "executable": "C:\\Program Files\\Docker\\Docker\\resources\\bin\\docker.exe", + "arguments": [ + "inspect", + "a230a1d63fb3eb73bed2c8a10b4406c1eca03103538afea7d26c3dcdef915e64", + "--format", + "{{json .Config.Env}}" + ], + "environment_keys": [], + "command": "C:\\Program Files\\Docker\\Docker\\resources\\bin\\docker.exe inspect a230a1d63fb3eb73bed2c8a10b4406c1eca03103538afea7d26c3dcdef915e64 --format {{json .Config.Env}}", + "started_at": "2026-07-10T09:42:05.4852761+00:00", + "finished_at": "2026-07-10T09:42:05.6585799+00:00", + "duration_seconds": 0.173, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-up\\postgres-credential-injection.stdout.log", + "stderr": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-up\\postgres-credential-injection.stderr.log" + }, + { + "name": "dev-stand-server-container-id", + "executable": "C:\\Program Files\\Docker\\Docker\\resources\\bin\\docker.exe", + "arguments": [ + "compose", + "-p", + "engram-critical-stand", + "-f", + "docker-compose.yml", + "-f", + ".agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-up\\ephemeral-credential-injection.compose.yaml", + "ps", + "-q", + "server" + ], + "environment_keys": [ + "COMPOSE_PROJECT_NAME", + "DATABASE_DSN", + "ENGRAM_AUTH_ADMIN_TOKEN", + "ENGRAM_AUTH_BOOTSTRAP_CAPABILITY", + "ENGRAM_AUTH_DISABLED", + "NUXT_OPERATOR_API_TARGET", + "OPERATOR_CONSOLE_PORT", + "POSTGRES_PASSWORD", + "POSTGRES_PORT", + "STAND_API_URL", + "STAND_OPERATOR_URL", + "WORKER_PORT" + ], + "command": "C:\\Program Files\\Docker\\Docker\\resources\\bin\\docker.exe compose -p engram-critical-stand -f docker-compose.yml -f .agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-up\\ephemeral-credential-injection.compose.yaml ps -q server", + "started_at": "2026-07-10T09:42:05.6644938+00:00", + "finished_at": "2026-07-10T09:42:06.0829788+00:00", + "duration_seconds": 0.418, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-up\\server-container-id.stdout.log", + "stderr": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-up\\server-container-id.stderr.log" + }, + { + "name": "dev-stand-server-credential-injection", + "executable": "C:\\Program Files\\Docker\\Docker\\resources\\bin\\docker.exe", + "arguments": [ + "inspect", + "e6d119b206fa9d86afd92507ed27c8fc4a3c519d2bc6b7c2a88318c4adbf1dca", + "--format", + "{{json .Config.Env}}" + ], + "environment_keys": [], + "command": "C:\\Program Files\\Docker\\Docker\\resources\\bin\\docker.exe inspect e6d119b206fa9d86afd92507ed27c8fc4a3c519d2bc6b7c2a88318c4adbf1dca --format {{json .Config.Env}}", + "started_at": "2026-07-10T09:42:06.0848803+00:00", + "finished_at": "2026-07-10T09:42:06.2492710+00:00", + "duration_seconds": 0.164, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-up\\server-credential-injection.stdout.log", + "stderr": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-up\\server-credential-injection.stderr.log" + }, + { + "name": "dev-stand-postgres-ready", + "executable": "C:\\Program Files\\Docker\\Docker\\resources\\bin\\docker.exe", + "arguments": [ + "compose", + "-p", + "engram-critical-stand", + "-f", + "docker-compose.yml", + "exec", + "-T", + "postgres", + "pg_isready", + "-U", + "engram", + "-d", + "engram" + ], + "environment_keys": [], + "command": "C:\\Program Files\\Docker\\Docker\\resources\\bin\\docker.exe compose -p engram-critical-stand -f docker-compose.yml exec -T postgres pg_isready -U engram -d engram", + "started_at": "2026-07-10T09:42:06.2504369+00:00", + "finished_at": "2026-07-10T09:42:06.7194229+00:00", + "duration_seconds": 0.469, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-up\\postgres-ready.stdout.log", + "stderr": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-up\\postgres-ready.stderr.log" + }, + { + "name": "dev-stand-health", + "executable": "C:\\WINDOWS\\system32\\curl.exe", + "arguments": [ + "-sS", + "--max-time", + "15", + "--write-out", + "\\n%{http_code}", + "http://localhost:37778/health" + ], + "environment_keys": [], + "command": "C:\\WINDOWS\\system32\\curl.exe -sS --max-time 15 --write-out \\n%{http_code} http://localhost:37778/health", + "started_at": "2026-07-10T09:42:06.7227496+00:00", + "finished_at": "2026-07-10T09:42:06.7659945+00:00", + "duration_seconds": 0.043, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-up\\health.stdout.log", + "stderr": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-up\\health.stderr.log" + }, + { + "name": "dev-stand-api-ready", + "executable": "C:\\WINDOWS\\system32\\curl.exe", + "arguments": [ + "-sS", + "--max-time", + "15", + "--write-out", + "\\n%{http_code}", + "http://localhost:37778/api/ready" + ], + "environment_keys": [], + "command": "C:\\WINDOWS\\system32\\curl.exe -sS --max-time 15 --write-out \\n%{http_code} http://localhost:37778/api/ready", + "started_at": "2026-07-10T09:42:06.7884453+00:00", + "finished_at": "2026-07-10T09:42:06.8308476+00:00", + "duration_seconds": 0.042, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-up\\api-ready.stdout.log", + "stderr": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-up\\api-ready.stderr.log" + }, + { + "name": "dev-stand-operator-api-health", + "executable": "C:\\WINDOWS\\system32\\curl.exe", + "arguments": [ + "-sS", + "--max-time", + "15", + "--write-out", + "\\n%{http_code}", + "http://localhost:3001/api/health" + ], + "environment_keys": [], + "command": "C:\\WINDOWS\\system32\\curl.exe -sS --max-time 15 --write-out \\n%{http_code} http://localhost:3001/api/health", + "started_at": "2026-07-10T09:42:06.8347616+00:00", + "finished_at": "2026-07-10T09:42:06.9035609+00:00", + "duration_seconds": 0.069, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-up\\operator-api-health.stdout.log", + "stderr": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-up\\operator-api-health.stderr.log" + }, + { + "name": "dev-stand-operator-api-ready", + "executable": "C:\\WINDOWS\\system32\\curl.exe", + "arguments": [ + "-sS", + "--max-time", + "15", + "--write-out", + "\\n%{http_code}", + "http://localhost:3001/api/ready" + ], + "environment_keys": [], + "command": "C:\\WINDOWS\\system32\\curl.exe -sS --max-time 15 --write-out \\n%{http_code} http://localhost:3001/api/ready", + "started_at": "2026-07-10T09:42:06.9048133+00:00", + "finished_at": "2026-07-10T09:42:06.9506383+00:00", + "duration_seconds": 0.046, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-up\\operator-api-ready.stdout.log", + "stderr": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-up\\operator-api-ready.stderr.log" + }, + { + "name": "dev-stand-image-inventory", + "executable": "C:\\Program Files\\Docker\\Docker\\resources\\bin\\docker.exe", + "arguments": [ + "ps", + "--filter", + "label=com.docker.compose.project=engram-critical-stand", + "--format", + "{{.ID}}|{{.Label \"com.docker.compose.service\"}}" + ], + "environment_keys": [], + "command": "C:\\Program Files\\Docker\\Docker\\resources\\bin\\docker.exe ps --filter label=com.docker.compose.project=engram-critical-stand --format {{.ID}}|{{.Label \"com.docker.compose.service\"}}", + "started_at": "2026-07-10T09:42:06.9519955+00:00", + "finished_at": "2026-07-10T09:42:07.1488772+00:00", + "duration_seconds": 0.197, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-up\\image-inventory.stdout.log", + "stderr": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-up\\image-inventory.stderr.log" + }, + { + "name": "dev-stand-image-inspect-operator-console", + "executable": "C:\\Program Files\\Docker\\Docker\\resources\\bin\\docker.exe", + "arguments": [ + "inspect", + "1f9e23d5284a", + "--format", + "{{.Config.Image}}|{{.Image}}" + ], + "environment_keys": [], + "command": "C:\\Program Files\\Docker\\Docker\\resources\\bin\\docker.exe inspect 1f9e23d5284a --format {{.Config.Image}}|{{.Image}}", + "started_at": "2026-07-10T09:42:07.1547396+00:00", + "finished_at": "2026-07-10T09:42:07.3503411+00:00", + "duration_seconds": 0.196, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-up\\image-inspect-operator-console.stdout.log", + "stderr": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-up\\image-inspect-operator-console.stderr.log" + }, + { + "name": "dev-stand-image-tag-inspect-operator-console", + "executable": "C:\\Program Files\\Docker\\Docker\\resources\\bin\\docker.exe", + "arguments": [ + "image", + "inspect", + "ghcr.io/thebtf/engram-operator-console:main", + "--format", + "{{.Id}}" + ], + "environment_keys": [], + "command": "C:\\Program Files\\Docker\\Docker\\resources\\bin\\docker.exe image inspect ghcr.io/thebtf/engram-operator-console:main --format {{.Id}}", + "started_at": "2026-07-10T09:42:07.3523182+00:00", + "finished_at": "2026-07-10T09:42:07.5620537+00:00", + "duration_seconds": 0.21, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-up\\image-tag-inspect-operator-console.stdout.log", + "stderr": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-up\\image-tag-inspect-operator-console.stderr.log" + }, + { + "name": "dev-stand-image-inspect-server", + "executable": "C:\\Program Files\\Docker\\Docker\\resources\\bin\\docker.exe", + "arguments": [ + "inspect", + "e6d119b206fa", + "--format", + "{{.Config.Image}}|{{.Image}}" + ], + "environment_keys": [], + "command": "C:\\Program Files\\Docker\\Docker\\resources\\bin\\docker.exe inspect e6d119b206fa --format {{.Config.Image}}|{{.Image}}", + "started_at": "2026-07-10T09:42:07.5652848+00:00", + "finished_at": "2026-07-10T09:42:07.7597138+00:00", + "duration_seconds": 0.194, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-up\\image-inspect-server.stdout.log", + "stderr": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-up\\image-inspect-server.stderr.log" + }, + { + "name": "dev-stand-image-tag-inspect-server", + "executable": "C:\\Program Files\\Docker\\Docker\\resources\\bin\\docker.exe", + "arguments": [ + "image", + "inspect", + "ghcr.io/thebtf/engram:main", + "--format", + "{{.Id}}" + ], + "environment_keys": [], + "command": "C:\\Program Files\\Docker\\Docker\\resources\\bin\\docker.exe image inspect ghcr.io/thebtf/engram:main --format {{.Id}}", + "started_at": "2026-07-10T09:42:07.7606471+00:00", + "finished_at": "2026-07-10T09:42:07.9511559+00:00", + "duration_seconds": 0.191, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-up\\image-tag-inspect-server.stdout.log", + "stderr": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-up\\image-tag-inspect-server.stderr.log" + }, + { + "name": "dev-stand-image-inspect-postgres", + "executable": "C:\\Program Files\\Docker\\Docker\\resources\\bin\\docker.exe", + "arguments": [ + "inspect", + "a230a1d63fb3", + "--format", + "{{.Config.Image}}|{{.Image}}" + ], + "environment_keys": [], + "command": "C:\\Program Files\\Docker\\Docker\\resources\\bin\\docker.exe inspect a230a1d63fb3 --format {{.Config.Image}}|{{.Image}}", + "started_at": "2026-07-10T09:42:07.9519107+00:00", + "finished_at": "2026-07-10T09:42:08.1364694+00:00", + "duration_seconds": 0.185, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-up\\image-inspect-postgres.stdout.log", + "stderr": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-up\\image-inspect-postgres.stderr.log" + }, + { + "name": "dev-stand-image-tag-inspect-postgres", + "executable": "C:\\Program Files\\Docker\\Docker\\resources\\bin\\docker.exe", + "arguments": [ + "image", + "inspect", + "pgvector/pgvector:pg17", + "--format", + "{{.Id}}" + ], + "environment_keys": [], + "command": "C:\\Program Files\\Docker\\Docker\\resources\\bin\\docker.exe image inspect pgvector/pgvector:pg17 --format {{.Id}}", + "started_at": "2026-07-10T09:42:08.1373387+00:00", + "finished_at": "2026-07-10T09:42:08.3825102+00:00", + "duration_seconds": 0.245, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-up\\image-tag-inspect-postgres.stdout.log", + "stderr": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-up\\image-tag-inspect-postgres.stderr.log" + } +] diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/compose-up.stderr.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/compose-up.stderr.log new file mode 100644 index 00000000..98f2828e --- /dev/null +++ b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/compose-up.stderr.log @@ -0,0 +1,26 @@ + ghcr.io/thebtf/engram-operator-console:main Built + ghcr.io/thebtf/engram:main Built + Network engram-critical-stand_default Creating + Network engram-critical-stand_default Created + Volume engram-critical-stand_pgdata Creating + Volume engram-critical-stand_pgdata Created + Container engram-critical-stand-postgres-1 Creating + Container engram-critical-stand-postgres-1 Created + Container engram-critical-stand-server-1 Creating + Container engram-critical-stand-server-1 Created + Container engram-critical-stand-operator-console-1 Creating + Container engram-critical-stand-operator-console-1 Created + Container engram-critical-stand-postgres-1 Starting + Container engram-critical-stand-postgres-1 Started + Container engram-critical-stand-postgres-1 Waiting + Container engram-critical-stand-postgres-1 Healthy + Container engram-critical-stand-server-1 Starting + Container engram-critical-stand-server-1 Started + Container engram-critical-stand-operator-console-1 Starting + Container engram-critical-stand-operator-console-1 Started + Container engram-critical-stand-postgres-1 Waiting + Container engram-critical-stand-server-1 Waiting + Container engram-critical-stand-operator-console-1 Waiting + Container engram-critical-stand-postgres-1 Healthy + Container engram-critical-stand-operator-console-1 Healthy + Container engram-critical-stand-server-1 Healthy diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/compose-up.stdout.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/compose-up.stdout.log new file mode 100644 index 00000000..dad9404c --- /dev/null +++ b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/compose-up.stdout.log @@ -0,0 +1,194 @@ +#1 [internal] load local bake definitions +#1 reading from stdin 1.19kB 0.0s done +#1 DONE 0.0s + +#2 [operator-console internal] load build definition from Dockerfile +#2 transferring dockerfile: 2.75kB 0.0s done +#2 DONE 0.0s + +#3 [server] resolve image config for docker-image://docker.io/docker/dockerfile:1 +#3 ... + +#4 [auth] docker/dockerfile:pull token for registry-1.docker.io +#4 DONE 0.0s + +#3 [server] resolve image config for docker-image://docker.io/docker/dockerfile:1 +#3 DONE 1.8s + +#5 [operator-console] docker-image://docker.io/docker/dockerfile:1@sha256:87999aa3d42bdc6bea60565083ee17e86d1f3339802f543c0d03998580f9cb89 +#5 resolve docker.io/docker/dockerfile:1@sha256:87999aa3d42bdc6bea60565083ee17e86d1f3339802f543c0d03998580f9cb89 0.1s done +#5 CACHED + +#6 [server internal] load metadata for docker.io/library/node:22-bookworm-slim +#6 ... + +#7 [auth] library/node:pull token for registry-1.docker.io +#7 DONE 0.0s + +#8 [auth] library/debian:pull token for registry-1.docker.io +#8 DONE 0.0s + +#9 [server internal] load metadata for docker.io/library/golang:1.25-bookworm +#9 ... + +#10 [server internal] load metadata for docker.io/library/debian:bookworm-slim +#10 DONE 0.8s + +#6 [operator-console internal] load metadata for docker.io/library/node:22-bookworm-slim +#6 DONE 1.0s + +#11 [operator-console internal] load .dockerignore +#11 transferring context: 919B done +#11 DONE 0.0s + +#12 [operator-console internal] load build context +#12 DONE 0.0s + +#13 [operator-console operator-console-build 1/7] FROM docker.io/library/node:22-bookworm-slim@sha256:53ada149d435c38b14476cb57e4a7da73c15595aba79bd6971b547ceb6d018bf +#13 resolve docker.io/library/node:22-bookworm-slim@sha256:53ada149d435c38b14476cb57e4a7da73c15595aba79bd6971b547ceb6d018bf 0.0s done +#13 DONE 0.0s + +#9 [server internal] load metadata for docker.io/library/golang:1.25-bookworm +#9 ... + +#13 [operator-console operator-console-build 1/7] FROM docker.io/library/node:22-bookworm-slim@sha256:53ada149d435c38b14476cb57e4a7da73c15595aba79bd6971b547ceb6d018bf +#13 DONE 0.0s + +#14 [auth] library/golang:pull token for registry-1.docker.io +#14 DONE 0.0s + +#12 [operator-console internal] load build context +#12 transferring context: 6.89kB 0.1s done +#12 DONE 0.2s + +#15 [operator-console operator-console-build 6/7] COPY design/operator-console/contracts /workspace/design/operator-console/contracts +#15 CACHED + +#16 [operator-console operator-console-build 7/7] RUN npm run parity && npm run build +#16 CACHED + +#17 [operator-console operator-console-build 3/7] COPY apps/operator-console/package.json apps/operator-console/package-lock.json ./ +#17 CACHED + +#18 [operator-console operator-console 2/3] WORKDIR /app +#18 CACHED + +#19 [operator-console operator-console-build 4/7] RUN npm ci +#19 CACHED + +#20 [operator-console operator-console-build 5/7] COPY apps/operator-console/ ./ +#20 CACHED + +#21 [operator-console operator-console-build 2/7] WORKDIR /workspace/apps/operator-console +#21 CACHED + +#22 [operator-console operator-console 3/3] COPY --from=operator-console-build /workspace/apps/operator-console/.output ./.output +#22 CACHED + +#23 [operator-console] exporting to image +#23 exporting layers done +#23 exporting manifest sha256:cbba3d866548304ea4cd8b13e551bd26b73caa6cd410a239426828c73ae3e4ae done +#23 exporting config sha256:0302492b244b010f203e4b8a043e657912c71290027e2134d81cb15323563bed done +#23 exporting attestation manifest sha256:4c45bcfad2f713e78f6065d7665d671fcd6bd071ab308301b7a82d2cb8b8caaf 0.1s done +#23 exporting manifest list sha256:74d7c0db215c0a40d716c24f0326a487d7822ec94d0d0edc74b5fcf014face18 +#23 exporting manifest list sha256:74d7c0db215c0a40d716c24f0326a487d7822ec94d0d0edc74b5fcf014face18 0.0s done +#23 naming to ghcr.io/thebtf/engram-operator-console:main done +#23 unpacking to ghcr.io/thebtf/engram-operator-console:main 0.0s done +#23 DONE 0.2s + +#9 [server internal] load metadata for docker.io/library/golang:1.25-bookworm +#9 DONE 1.7s + +#11 [server internal] load .dockerignore +#11 transferring context: 919B done +#11 DONE 0.0s + +#24 [operator-console] resolving provenance for metadata file +#24 DONE 0.0s + +#25 [server internal] load build context +#25 DONE 0.0s + +#26 [server server 1/4] FROM docker.io/library/debian:bookworm-slim@sha256:60eac759739651111db372c07be67863818726f754804b8707c90979bda511df +#26 resolve docker.io/library/debian:bookworm-slim@sha256:60eac759739651111db372c07be67863818726f754804b8707c90979bda511df 0.1s done +#26 DONE 0.1s + +#27 [server builder 1/9] FROM docker.io/library/golang:1.25-bookworm@sha256:a9c020ee3d1508c7be5435c262434e3d3fc1d0e76a11afeb9ddae7d60bc86aa4 +#27 resolve docker.io/library/golang:1.25-bookworm@sha256:a9c020ee3d1508c7be5435c262434e3d3fc1d0e76a11afeb9ddae7d60bc86aa4 0.1s done +#27 DONE 0.1s + +#13 [server operator-console-build 1/7] FROM docker.io/library/node:22-bookworm-slim@sha256:53ada149d435c38b14476cb57e4a7da73c15595aba79bd6971b547ceb6d018bf +#13 resolve docker.io/library/node:22-bookworm-slim@sha256:53ada149d435c38b14476cb57e4a7da73c15595aba79bd6971b547ceb6d018bf 0.1s done +#13 DONE 0.2s + +#25 [server internal] load build context +#25 transferring context: 10.81MB 0.6s done +#25 DONE 0.7s + +#28 [server builder 4/9] COPY go.mod go.sum ./ +#28 CACHED + +#29 [server builder 3/9] RUN apt-get update && apt-get install -y --no-install-recommends ca-certificates git build-essential && rm -rf /var/lib/apt/lists/* +#29 CACHED + +#30 [server builder 2/9] WORKDIR /src +#30 CACHED + +#21 [server operator-console-build 2/7] WORKDIR /workspace/apps/operator-console +#21 CACHED + +#31 [server operator-console-build 6/7] COPY design/operator-console/contracts /workspace/design/operator-console/contracts +#31 CACHED + +#32 [server operator-console-build 7/7] RUN npm run parity && npm run build +#32 CACHED + +#33 [server operator-console-build 3/7] COPY apps/operator-console/package.json apps/operator-console/package-lock.json ./ +#33 CACHED + +#34 [server operator-console-build 5/7] COPY apps/operator-console/ ./ +#34 CACHED + +#35 [server operator-console-build 4/7] RUN npm ci +#35 CACHED + +#36 [server builder 5/9] RUN go mod download +#36 CACHED + +#37 [server operator-console-static-build 1/1] RUN npm run generate +#37 CACHED + +#38 [server builder 6/9] COPY . . +#38 DONE 0.4s + +#39 [server builder 7/9] COPY --from=operator-console-static-build /workspace/apps/operator-console/.output/public/ internal/worker/static/ +#39 DONE 0.2s + +#40 [server builder 8/9] RUN CGO_ENABLED=1 go build -tags fts5 -ldflags "-X main.Version=dev -s -w" -o /out/engram-server ./cmd/engram-server +#40 DONE 15.6s + +#41 [server builder 9/9] RUN CGO_ENABLED=1 go build -tags fts5 -ldflags "-X main.Version=dev -X github.com/thebtf/engram/internal/version.Daemon=dev -s -w" -o /out/engram ./cmd/engram +#41 DONE 8.7s + +#42 [server server 2/4] WORKDIR /app +#42 CACHED + +#43 [server server 3/4] RUN apt-get update && apt-get install -y --no-install-recommends ca-certificates curl && rm -rf /var/lib/apt/lists/* +#43 CACHED + +#44 [server server 4/4] COPY --from=builder /out/engram-server /usr/local/bin/engram-server +#44 CACHED + +#45 [server] exporting to image +#45 exporting layers done +#45 exporting manifest sha256:0ab58bfb7c6cf49cfead3fd3607925a8bf41fb23665b781eafbba8cb938c4f55 done +#45 exporting config sha256:73fa98cc79a6011b45536b29dd4be0522597dd27f9b1ef39ce134db9c977e9ed done +#45 exporting attestation manifest sha256:18de53006f0f9f5c3eb8b720e2ef936438e3bbeb378cef4ce958500775191927 0.1s done +#45 exporting manifest list sha256:a6e55d692ddf31a94b0a1d29a4e615ff509c6dac19eccafca4bda3e51147b38f +#45 exporting manifest list sha256:a6e55d692ddf31a94b0a1d29a4e615ff509c6dac19eccafca4bda3e51147b38f 0.0s done +#45 naming to ghcr.io/thebtf/engram:main done +#45 unpacking to ghcr.io/thebtf/engram:main 0.0s done +#45 DONE 0.2s + +#46 [server] resolving provenance for metadata file +#46 DONE 0.0s diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/health.stderr.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/health.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/health.stdout.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/health.stdout.log new file mode 100644 index 00000000..9cb44649 --- /dev/null +++ b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/health.stdout.log @@ -0,0 +1,3 @@ +{"status":"ready","version":"dev"} + +200 \ No newline at end of file diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-inspect-operator-console.stderr.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-inspect-operator-console.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-inspect-operator-console.stdout.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-inspect-operator-console.stdout.log new file mode 100644 index 00000000..ef06e692 --- /dev/null +++ b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-inspect-operator-console.stdout.log @@ -0,0 +1 @@ +ghcr.io/thebtf/engram-operator-console:main|sha256:74d7c0db215c0a40d716c24f0326a487d7822ec94d0d0edc74b5fcf014face18 diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-inspect-postgres.stderr.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-inspect-postgres.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-inspect-postgres.stdout.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-inspect-postgres.stdout.log new file mode 100644 index 00000000..0fda45fb --- /dev/null +++ b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-inspect-postgres.stdout.log @@ -0,0 +1 @@ +pgvector/pgvector:pg17|sha256:feb68f4f15446397d8cac7f4fe48fe4586de83160d1fc48b46283312d1a33966 diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-inspect-server.stderr.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-inspect-server.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-inspect-server.stdout.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-inspect-server.stdout.log new file mode 100644 index 00000000..a62e1c97 --- /dev/null +++ b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-inspect-server.stdout.log @@ -0,0 +1 @@ +ghcr.io/thebtf/engram:main|sha256:a6e55d692ddf31a94b0a1d29a4e615ff509c6dac19eccafca4bda3e51147b38f diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-inventory.stderr.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-inventory.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-inventory.stdout.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-inventory.stdout.log new file mode 100644 index 00000000..6f9b8ff4 --- /dev/null +++ b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-inventory.stdout.log @@ -0,0 +1,3 @@ +1f9e23d5284a|operator-console +e6d119b206fa|server +a230a1d63fb3|postgres diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-tag-inspect-operator-console.stderr.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-tag-inspect-operator-console.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-tag-inspect-operator-console.stdout.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-tag-inspect-operator-console.stdout.log new file mode 100644 index 00000000..0b0905aa --- /dev/null +++ b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-tag-inspect-operator-console.stdout.log @@ -0,0 +1 @@ +sha256:74d7c0db215c0a40d716c24f0326a487d7822ec94d0d0edc74b5fcf014face18 diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-tag-inspect-postgres.stderr.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-tag-inspect-postgres.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-tag-inspect-postgres.stdout.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-tag-inspect-postgres.stdout.log new file mode 100644 index 00000000..893200d5 --- /dev/null +++ b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-tag-inspect-postgres.stdout.log @@ -0,0 +1 @@ +sha256:feb68f4f15446397d8cac7f4fe48fe4586de83160d1fc48b46283312d1a33966 diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-tag-inspect-server.stderr.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-tag-inspect-server.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-tag-inspect-server.stdout.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-tag-inspect-server.stdout.log new file mode 100644 index 00000000..55054a50 --- /dev/null +++ b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-tag-inspect-server.stdout.log @@ -0,0 +1 @@ +sha256:a6e55d692ddf31a94b0a1d29a4e615ff509c6dac19eccafca4bda3e51147b38f diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/operator-api-health.stderr.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/operator-api-health.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/operator-api-health.stdout.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/operator-api-health.stdout.log new file mode 100644 index 00000000..9cb44649 --- /dev/null +++ b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/operator-api-health.stdout.log @@ -0,0 +1,3 @@ +{"status":"ready","version":"dev"} + +200 \ No newline at end of file diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/operator-api-ready.stderr.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/operator-api-ready.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/operator-api-ready.stdout.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/operator-api-ready.stdout.log new file mode 100644 index 00000000..36aa5929 --- /dev/null +++ b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/operator-api-ready.stdout.log @@ -0,0 +1,3 @@ +{"status":"ready"} + +200 \ No newline at end of file diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/postgres-container-id.stderr.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/postgres-container-id.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/postgres-container-id.stdout.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/postgres-container-id.stdout.log new file mode 100644 index 00000000..74036c05 --- /dev/null +++ b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/postgres-container-id.stdout.log @@ -0,0 +1 @@ +a230a1d63fb3eb73bed2c8a10b4406c1eca03103538afea7d26c3dcdef915e64 diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/postgres-credential-injection.stderr.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/postgres-credential-injection.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/postgres-credential-injection.stdout.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/postgres-credential-injection.stdout.log new file mode 100644 index 00000000..46fc6878 --- /dev/null +++ b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/postgres-credential-injection.stdout.log @@ -0,0 +1 @@ +["POSTGRES_USER=engram","POSTGRES_PASSWORD=REDACTED_SENSITIVE_VALUE","POSTGRES_DB=engram","PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/lib/postgresql/17/bin","GOSU_VERSION=1.19","LANG=en_US.utf8","PG_MAJOR=17","PG_VERSION=17.10-1.pgdg12+1","PGDATA=/var/lib/postgresql/data"] diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/postgres-ready.stderr.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/postgres-ready.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/postgres-ready.stdout.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/postgres-ready.stdout.log new file mode 100644 index 00000000..e9330303 --- /dev/null +++ b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/postgres-ready.stdout.log @@ -0,0 +1 @@ +/var/run/postgresql:5432 - accepting connections diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/server-container-id.stderr.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/server-container-id.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/server-container-id.stdout.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/server-container-id.stdout.log new file mode 100644 index 00000000..9222b9d9 --- /dev/null +++ b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/server-container-id.stdout.log @@ -0,0 +1 @@ +e6d119b206fa9d86afd92507ed27c8fc4a3c519d2bc6b7c2a88318c4adbf1dca diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/server-credential-injection.stderr.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/server-credential-injection.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/server-credential-injection.stdout.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/server-credential-injection.stdout.log new file mode 100644 index 00000000..b4c75ac8 --- /dev/null +++ b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/server-credential-injection.stdout.log @@ -0,0 +1 @@ +["ENGRAM_VNEXT_F_ENABLED=false","ENGRAM_AUTH_DISABLED=false","ENGRAM_TEMPORAL_TRUTH_ENABLED=false","ENGRAM_CRYSTALLIZATION_ENABLED=false","ENGRAM_VNEXT_ENABLED=false","ENGRAM_WORKER_HOST=0.0.0.0","ENGRAM_LIFECYCLE_ENABLED=false","ENGRAM_EMBEDDING_API_KEY=","ENGRAM_AUTH_BOOTSTRAP_CAPABILITY=REDACTED_SENSITIVE_VALUE","ENGRAM_GRAPH_ENABLED=false","ENGRAM_EMBEDDING_MODEL=text-embedding","ENGRAM_WORKER_PORT=37777","DATABASE_DSN=postgres://engram:REDACTED_SENSITIVE_VALUE@postgres:5432/engram?sslmode=disable","ENGRAM_EMBEDDING_URL=","ENGRAM_VAULT_KEY=","ENGRAM_AUTH_ADMIN_TOKEN=REDACTED_SENSITIVE_VALUE","PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"] diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/summary.json b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/summary.json new file mode 100644 index 00000000..ddf3dd30 --- /dev/null +++ b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/summary.json @@ -0,0 +1,92 @@ +{ + "schema_version": 1, + "gate": "dev-stand-contract", + "action": "Up", + "run_id": "maker-runtime-1", + "started_at": "2026-07-10T09:41:15.2280294+00:00", + "finished_at": "2026-07-10T09:42:08.3896392+00:00", + "duration_seconds": 53.162, + "verdict": "PASS", + "compose_project": "engram-critical-stand", + "compose_file": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\docker-compose.yml", + "ephemeral_postgres_password_generated": true, + "ephemeral_admin_token_generated": true, + "ephemeral_bootstrap_capability_generated": true, + "ephemeral_credentials_distinct_and_nondefault": true, + "ephemeral_credentials_runtime_injected": true, + "ephemeral_postgres_password_persisted": false, + "ephemeral_admin_token_persisted": false, + "ephemeral_bootstrap_capability_persisted": false, + "exact_image_targets": { + "postgres": "pgvector/pgvector:pg17", + "server": "ghcr.io/thebtf/engram:main", + "operator-console": "ghcr.io/thebtf/engram-operator-console:main" + }, + "actual_images": { + "postgres": "pgvector/pgvector:pg17", + "operator-console": "ghcr.io/thebtf/engram-operator-console:main", + "server": "ghcr.io/thebtf/engram:main" + }, + "actual_image_ids": { + "postgres": "sha256:feb68f4f15446397d8cac7f4fe48fe4586de83160d1fc48b46283312d1a33966", + "operator-console": "sha256:74d7c0db215c0a40d716c24f0326a487d7822ec94d0d0edc74b5fcf014face18", + "server": "sha256:a6e55d692ddf31a94b0a1d29a4e615ff509c6dac19eccafca4bda3e51147b38f" + }, + "tag_image_ids": { + "postgres": "sha256:feb68f4f15446397d8cac7f4fe48fe4586de83160d1fc48b46283312d1a33966", + "operator-console": "sha256:74d7c0db215c0a40d716c24f0326a487d7822ec94d0d0edc74b5fcf014face18", + "server": "sha256:a6e55d692ddf31a94b0a1d29a4e615ff509c6dac19eccafca4bda3e51147b38f" + }, + "liveness_endpoints": [ + { + "name": "health", + "url": "http://localhost:37778/health", + "path_kind": "direct-server", + "contract_kind": "liveness", + "http_status": "200", + "semantic_contract_pass": true + }, + { + "name": "operator-api-health", + "url": "http://localhost:3001/api/health", + "path_kind": "operator-console-proxy", + "contract_kind": "liveness", + "http_status": "200", + "semantic_contract_pass": true + } + ], + "semantic_ready_endpoints": [ + { + "name": "api-ready", + "url": "http://localhost:37778/api/ready", + "path_kind": "direct-server", + "contract_kind": "readiness", + "http_status": "200", + "semantic_contract_pass": true + }, + { + "name": "operator-api-ready", + "url": "http://localhost:3001/api/ready", + "path_kind": "operator-console-proxy", + "contract_kind": "readiness", + "http_status": "200", + "semantic_contract_pass": true + } + ], + "vulnerability_scan": { + "scanner": "docker scout cves", + "severity_gate": [ + "critical", + "high" + ], + "scans": [] + }, + "automatic_failure_cleanup": false, + "residual_checks_performed": false, + "residual_resources_zero": null, + "child_commands": 17, + "nonzero_child_commands": 0, + "commands": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-up\\commands.json", + "errors": [], + "artifact_directory": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-up" +} diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/ready.stderr.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/ready.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/ready.stdout.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/ready.stdout.log new file mode 100644 index 00000000..8c39430b --- /dev/null +++ b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/ready.stdout.log @@ -0,0 +1,2 @@ +dev-stand action=Ready verdict=PASS child_commands=12 nonzero_children=0 +summary=D:\Dev\engram\.agent\worktrees\prc-release-gates\.agent\reports\evidence\production-ready\release-gates-foundation-revision-3\dev-stand-runtime\maker-runtime-1\nested\dev-stand\maker-runtime-1-ready\summary.json diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/scan.stderr.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/scan.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/scan.stdout.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/scan.stdout.log new file mode 100644 index 00000000..e3dffd8c --- /dev/null +++ b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/scan.stdout.log @@ -0,0 +1,2 @@ +dev-stand action=Scan verdict=FAIL child_commands=10 nonzero_children=3 +summary=D:\Dev\engram\.agent\worktrees\prc-release-gates\.agent\reports\evidence\production-ready\release-gates-foundation-revision-3\dev-stand-runtime\maker-runtime-1\nested\dev-stand\maker-runtime-1-scan\summary.json diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/summary.json b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/summary.json new file mode 100644 index 00000000..b2291ec5 --- /dev/null +++ b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/summary.json @@ -0,0 +1,53 @@ +{ + "schema_version": 1, + "gate": "dev-stand-lifecycle", + "run_id": "maker-runtime-1", + "started_at": "2026-07-10T09:41:14.4925587+00:00", + "finished_at": "2026-07-10T09:42:43.2740989+00:00", + "duration_seconds": 88.782, + "verdict": "FAIL", + "config": { + "path": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\dev-stand.config.yaml", + "sha256": "1BA20CEE8A3932988B8B503EA8419451165C46823D94A38010F93BC02A6933C3" + }, + "up_attempted": true, + "down_attempted": true, + "cleanup_status": "PASS", + "residual_resources_zero": true, + "actions": [ + { + "action": "Up", + "exit_code": 0, + "summary": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-up\\summary.json", + "verdict": "PASS" + }, + { + "action": "Ready", + "exit_code": 0, + "summary": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-ready\\summary.json", + "verdict": "PASS" + }, + { + "action": "Scan", + "exit_code": 1, + "summary": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-scan\\summary.json", + "verdict": "FAIL" + }, + { + "action": "Down", + "exit_code": 0, + "summary": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-down\\summary.json", + "verdict": "PASS" + } + ], + "child_commands": 4, + "nonzero_child_commands": 1, + "commands": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\commands.json", + "errors": [ + "dev-stand Scan failed with exit 1", + "Scan: HIGH/CRITICAL vulnerabilities detected in exact image 'ghcr.io/thebtf/engram-operator-console:main' (count=5)", + "Scan: HIGH/CRITICAL vulnerabilities detected in exact image 'pgvector/pgvector:pg17' (count=38)", + "Scan: HIGH/CRITICAL vulnerabilities detected in exact image 'ghcr.io/thebtf/engram:main' (count=13)" + ], + "artifact_directory": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1" +} diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/up.stderr.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/up.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/up.stdout.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/up.stdout.log new file mode 100644 index 00000000..1024e056 --- /dev/null +++ b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/up.stdout.log @@ -0,0 +1,2 @@ +dev-stand action=Up verdict=PASS child_commands=17 nonzero_children=0 +summary=D:\Dev\engram\.agent\worktrees\prc-release-gates\.agent\reports\evidence\production-ready\release-gates-foundation-revision-3\dev-stand-runtime\maker-runtime-1\nested\dev-stand\maker-runtime-1-up\summary.json diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-2/cleanup.json b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-2/cleanup.json new file mode 100644 index 00000000..5a0828c9 --- /dev/null +++ b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-2/cleanup.json @@ -0,0 +1,5 @@ +{ + "removed": [], + "errors": [], + "surface_clean": true +} diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-2/commands.json b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-2/commands.json new file mode 100644 index 00000000..d6fc5f7a --- /dev/null +++ b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-2/commands.json @@ -0,0 +1,42 @@ +[ + { + "name": "openclaw-pre-status", + "executable": "C:\\Program Files\\Git\\cmd\\git.exe", + "arguments": [ + "status", + "--porcelain=v1", + "--untracked-files=all", + "--", + "plugin/openclaw-engram" + ], + "command": "C:\\Program Files\\Git\\cmd\\git.exe status --porcelain=v1 --untracked-files=all -- plugin/openclaw-engram", + "working_directory": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates", + "started_at": "2026-07-10T09:44:06.1795680+00:00", + "finished_at": "2026-07-10T09:44:06.2721056+00:00", + "duration_seconds": 0.093, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\node-matrix\\pre-openclaw-release-r3-final-2\\pre-status.stdout.log", + "stderr": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\node-matrix\\pre-openclaw-release-r3-final-2\\pre-status.stderr.log" + }, + { + "name": "openclaw-post-cleanup-status", + "executable": "C:\\Program Files\\Git\\cmd\\git.exe", + "arguments": [ + "status", + "--porcelain=v1", + "--untracked-files=all", + "--", + "plugin/openclaw-engram" + ], + "command": "C:\\Program Files\\Git\\cmd\\git.exe status --porcelain=v1 --untracked-files=all -- plugin/openclaw-engram", + "working_directory": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates", + "started_at": "2026-07-10T09:44:06.3000868+00:00", + "finished_at": "2026-07-10T09:44:06.3819196+00:00", + "duration_seconds": 0.082, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\node-matrix\\pre-openclaw-release-r3-final-2\\post-status.stdout.log", + "stderr": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\node-matrix\\pre-openclaw-release-r3-final-2\\post-status.stderr.log" + } +] diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-2/post-status.stderr.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-2/post-status.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-2/post-status.stdout.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-2/post-status.stdout.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-2/pre-status.stderr.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-2/pre-status.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-2/pre-status.stdout.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-2/pre-status.stdout.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-2/summary.json b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-2/summary.json new file mode 100644 index 00000000..d08bbd68 --- /dev/null +++ b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-2/summary.json @@ -0,0 +1,42 @@ +{ + "schema_version": 1, + "gate": "node-release-matrix", + "surface": "openclaw", + "run_id": "pre-openclaw-release-r3-final-2", + "started_at": "2026-07-10T09:44:06.1284027+00:00", + "finished_at": "2026-07-10T09:44:06.4387660+00:00", + "duration_seconds": 0.31, + "verdict": "FAIL", + "surface_root": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\plugin\\openclaw-engram", + "pre_surface_clean": true, + "post_surface_clean": true, + "manifests_tracked_and_present": false, + "lock_non_ignored": false, + "manifest_parity": false, + "manifest_hashes": {}, + "required_sequence": [ + "npm-ci", + "npm-typecheck", + "npm-test", + "npm-audit-high", + "npm-pack-dry-run" + ], + "planned_sequence": [ + "npm-ci", + "npm-typecheck", + "npm-test", + "npm-audit-high", + "npm-pack-dry-run" + ], + "executed_sequence": [], + "audit_level": "high", + "package_dry_run": false, + "package_contents_valid": false, + "package_files": null, + "cleanup": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\node-matrix\\pre-openclaw-release-r3-final-2\\cleanup.json", + "commands": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\node-matrix\\pre-openclaw-release-r3-final-2\\commands.json", + "errors": [ + "required OpenClaw manifest is missing: D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\plugin\\openclaw-engram\\package-lock.json" + ], + "artifact_directory": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\node-matrix\\pre-openclaw-release-r3-final-2" +} diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-3/cleanup.json b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-3/cleanup.json new file mode 100644 index 00000000..5a0828c9 --- /dev/null +++ b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-3/cleanup.json @@ -0,0 +1,5 @@ +{ + "removed": [], + "errors": [], + "surface_clean": true +} diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-3/commands.json b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-3/commands.json new file mode 100644 index 00000000..8572882c --- /dev/null +++ b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-3/commands.json @@ -0,0 +1,42 @@ +[ + { + "name": "openclaw-pre-status", + "executable": "C:\\Program Files\\Git\\cmd\\git.exe", + "arguments": [ + "status", + "--porcelain=v1", + "--untracked-files=all", + "--", + "plugin/openclaw-engram" + ], + "command": "C:\\Program Files\\Git\\cmd\\git.exe status --porcelain=v1 --untracked-files=all -- plugin/openclaw-engram", + "working_directory": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates", + "started_at": "2026-07-10T09:50:09.5080704+00:00", + "finished_at": "2026-07-10T09:50:09.5948998+00:00", + "duration_seconds": 0.087, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\node-matrix\\pre-openclaw-release-r3-final-3\\pre-status.stdout.log", + "stderr": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\node-matrix\\pre-openclaw-release-r3-final-3\\pre-status.stderr.log" + }, + { + "name": "openclaw-post-cleanup-status", + "executable": "C:\\Program Files\\Git\\cmd\\git.exe", + "arguments": [ + "status", + "--porcelain=v1", + "--untracked-files=all", + "--", + "plugin/openclaw-engram" + ], + "command": "C:\\Program Files\\Git\\cmd\\git.exe status --porcelain=v1 --untracked-files=all -- plugin/openclaw-engram", + "working_directory": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates", + "started_at": "2026-07-10T09:50:09.6234898+00:00", + "finished_at": "2026-07-10T09:50:09.6741576+00:00", + "duration_seconds": 0.051, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\node-matrix\\pre-openclaw-release-r3-final-3\\post-status.stdout.log", + "stderr": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\node-matrix\\pre-openclaw-release-r3-final-3\\post-status.stderr.log" + } +] diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-3/post-status.stderr.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-3/post-status.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-3/post-status.stdout.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-3/post-status.stdout.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-3/pre-status.stderr.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-3/pre-status.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-3/pre-status.stdout.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-3/pre-status.stdout.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-3/summary.json b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-3/summary.json new file mode 100644 index 00000000..52c64610 --- /dev/null +++ b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-3/summary.json @@ -0,0 +1,42 @@ +{ + "schema_version": 1, + "gate": "node-release-matrix", + "surface": "openclaw", + "run_id": "pre-openclaw-release-r3-final-3", + "started_at": "2026-07-10T09:50:09.4573378+00:00", + "finished_at": "2026-07-10T09:50:09.7312050+00:00", + "duration_seconds": 0.274, + "verdict": "FAIL", + "surface_root": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\plugin\\openclaw-engram", + "pre_surface_clean": true, + "post_surface_clean": true, + "manifests_tracked_and_present": false, + "lock_non_ignored": false, + "manifest_parity": false, + "manifest_hashes": {}, + "required_sequence": [ + "npm-ci", + "npm-typecheck", + "npm-test", + "npm-audit-high", + "npm-pack-dry-run" + ], + "planned_sequence": [ + "npm-ci", + "npm-typecheck", + "npm-test", + "npm-audit-high", + "npm-pack-dry-run" + ], + "executed_sequence": [], + "audit_level": "high", + "package_dry_run": false, + "package_contents_valid": false, + "package_files": null, + "cleanup": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\node-matrix\\pre-openclaw-release-r3-final-3\\cleanup.json", + "commands": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\node-matrix\\pre-openclaw-release-r3-final-3\\commands.json", + "errors": [ + "required OpenClaw manifest is missing: D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\plugin\\openclaw-engram\\package-lock.json" + ], + "artifact_directory": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\node-matrix\\pre-openclaw-release-r3-final-3" +} diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/ownership/db-bulkops-rejected-negative.json b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/ownership/db-bulkops-rejected-negative.json new file mode 100644 index 00000000..c7df4beb --- /dev/null +++ b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/ownership/db-bulkops-rejected-negative.json @@ -0,0 +1,673 @@ +{ + "schema_version": 2, + "gate": "plan-path-ownership", + "mode": "Diff", + "verdict": "FAIL", + "started_at": "2026-07-10T09:48:51.8929495+00:00", + "finished_at": "2026-07-10T09:48:55.6700909+00:00", + "duration_seconds": 3.777, + "plan": { + "path": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\plans\\2026-07-10-engram-production-ready-master-plan.md", + "expected_sha256": "d371e94dff1ea12767b9d0832240cb6caf52c6c3bbe2209fe4280159c4f03c52", + "observed_sha256": "d371e94dff1ea12767b9d0832240cb6caf52c6c3bbe2209fe4280159c4f03c52", + "hash_match": true, + "ledger_verdict": "PASS" + }, + "state": { + "path": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\plans\\2026-07-10-engram-production-ready-ownership-state.json", + "sha256": "1419e2f7e5236e21dd9a2d8c3271ced2def16dc0a798435ad5a9401fe522d55b", + "verdict": "PASS", + "plan_sha256": "d371e94dff1ea12767b9d0832240cb6caf52c6c3bbe2209fe4280159c4f03c52" + }, + "slice": { + "name": "DB-BULKOPS", + "row_count": 1, + "declarations": [ + { + "owner": "DB-BULKOPS", + "branch": "work/prc-db-bulkops", + "path": "internal/bulkops/facade.go", + "display": "internal/bulkops/facade.go", + "kind": "exact", + "line": 7 + }, + { + "owner": "DB-BULKOPS", + "branch": "work/prc-db-bulkops", + "path": "internal/bulkops/facade_test.go", + "display": "internal/bulkops/facade_test.go", + "kind": "exact", + "line": 7 + }, + { + "owner": "DB-BULKOPS", + "branch": "work/prc-db-bulkops", + "path": "internal/bulkops/rollback.go", + "display": "internal/bulkops/rollback.go", + "kind": "exact", + "line": 7 + }, + { + "owner": "DB-BULKOPS", + "branch": "work/prc-db-bulkops", + "path": "internal/bulkops/rollback_test.go", + "display": "internal/bulkops/rollback_test.go", + "kind": "exact", + "line": 7 + }, + { + "owner": "DB-BULKOPS", + "branch": "work/prc-db-bulkops", + "path": "internal/db/gorm/candidate_store.go", + "display": "internal/db/gorm/candidate_store.go", + "kind": "exact", + "line": 7 + }, + { + "owner": "DB-BULKOPS", + "branch": "work/prc-db-bulkops", + "path": "internal/db/gorm/candidate_store_test.go", + "display": "internal/db/gorm/candidate_store_test.go", + "kind": "exact", + "line": 7 + }, + { + "owner": "DB-BULKOPS", + "branch": "work/prc-db-bulkops", + "path": "internal/mcp/tools_bulkops.go", + "display": "internal/mcp/tools_bulkops.go", + "kind": "exact", + "line": 7 + }, + { + "owner": "DB-BULKOPS", + "branch": "work/prc-db-bulkops", + "path": "internal/mcp/tools_dryrun_test.go", + "display": "internal/mcp/tools_dryrun_test.go", + "kind": "exact", + "line": 7 + }, + { + "owner": "DB-BULKOPS", + "branch": "work/prc-db-bulkops", + "path": "pkg/models/snapshot.go", + "display": "pkg/models/snapshot.go", + "kind": "exact", + "line": 7 + }, + { + "owner": "DB-BULKOPS", + "branch": "work/prc-db-bulkops", + "path": ".agent/reports/2026-07-10-db-bulkops-capture-lock-rework-maker.md", + "display": ".agent/reports/2026-07-10-db-bulkops-capture-lock-rework-maker.md", + "kind": "exact", + "line": 7 + }, + { + "owner": "DB-BULKOPS", + "branch": "work/prc-db-bulkops", + "path": ".agent/reports/2026-07-10-db-bulkops-sibling-rework-maker.md", + "display": ".agent/reports/2026-07-10-db-bulkops-sibling-rework-maker.md", + "kind": "exact", + "line": 7 + }, + { + "owner": "DB-BULKOPS", + "branch": "work/prc-db-bulkops", + "path": ".agent/specs/production-ready-db-bulkops/evidence", + "display": ".agent/specs/production-ready-db-bulkops/evidence/**", + "kind": "prefix", + "line": 7 + }, + { + "owner": "DB-BULKOPS", + "branch": "work/prc-db-bulkops", + "path": ".agent/reports/evidence/production-ready/db-bulkops-sibling-rework", + "display": ".agent/reports/evidence/production-ready/db-bulkops-sibling-rework/**", + "kind": "prefix", + "line": 7 + } + ], + "evidence_namespace": { + "kind": "evidence", + "path": ".agent/reports/evidence/production-ready/db-bulkops-sibling-rework", + "display": ".agent/reports/evidence/production-ready/db-bulkops-sibling-rework/**", + "match_kind": "prefix", + "policy": "literal-row-exception" + }, + "report_namespace": { + "kind": "report", + "path": ".agent/reports/2026-07-10-db-bulkops-sibling-rework-maker.md", + "display": ".agent/reports/2026-07-10-db-bulkops-sibling-rework-maker.md", + "match_kind": "exact", + "policy": "literal-row-exception" + } + }, + "git": { + "repository": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates", + "requested_base": "2b085de663d5ba9dfa97adf9ee58de062ee0997c", + "resolved_base": "2b085de663d5ba9dfa97adf9ee58de062ee0997c", + "requested_head": "68b2ce5835c7c6efdf1c68da9eedcb8d9c3837ef", + "resolved_head": "68b2ce5835c7c6efdf1c68da9eedcb8d9c3837ef", + "base_is_ancestor": true, + "name_status_command": "git -c core.quotepath=false diff --name-status --find-renames --find-copies 2b085de663d5ba9dfa97adf9ee58de062ee0997c..68b2ce5835c7c6efdf1c68da9eedcb8d9c3837ef --", + "raw_name_status": [ + "A\t.agent/reports/2026-07-10-db-bulkops-capture-lock-rework-maker.md", + "A\t.agent/reports/2026-07-10-db-bulkops-sibling-rework-maker.md", + "A\t.agent/reports/evidence/production-ready/db-bulkops-sibling-rework/DB-BULKOPS-SIBLING-REWORK.final.json", + "A\t.agent/reports/evidence/production-ready/db-bulkops-sibling-rework/DB-BULKOPS-SIBLING-REWORK.tdd.json", + "A\t.agent/reports/evidence/production-ready/db-bulkops-sibling-rework/H1-candidate-review-after.red.json", + "A\t.agent/reports/evidence/production-ready/db-bulkops-sibling-rework/M1-nil-facade-normalization.red.json", + "A\t.agent/reports/evidence/production-ready/db-bulkops-sibling-rework/M2-all-row-failure-audit.red.json", + "A\t.agent/specs/production-ready-db-bulkops/evidence/DB-BULKOPS-CAPTURE-LOCK-REWORK.red.json", + "A\t.agent/specs/production-ready-db-bulkops/evidence/DB-BULKOPS-CAPTURE-LOCK-REWORK.tdd.json", + "A\t.agent/specs/production-ready-db-bulkops/evidence/DB-BULKOPS-DRY-RUN-NORMALIZATION.red.json", + "A\t.agent/specs/production-ready-db-bulkops/evidence/DB-BULKOPS-FINAL.cover.out", + "A\t.agent/specs/production-ready-db-bulkops/evidence/DB-BULKOPS-LEGACY-CANDIDATE-NO-AFTER.red.json", + "A\t.agent/specs/production-ready-db-bulkops/evidence/DB-BULKOPS-ROLLBACK-CANDIDATE-CONFLICT.red.json", + "M\tinternal/bulkops/facade.go", + "M\tinternal/bulkops/facade_test.go", + "M\tinternal/bulkops/rollback.go", + "M\tinternal/bulkops/rollback_test.go", + "M\tinternal/db/gorm/candidate_store.go", + "M\tinternal/db/gorm/candidate_store_test.go", + "M\tinternal/mcp/tools_bulkops.go", + "M\tinternal/mcp/tools_dryrun_test.go", + "M\tpkg/models/snapshot.go" + ] + }, + "counts": { + "diff_entries": 22, + "changed_paths": 22, + "violations": 0, + "errors": 4 + }, + "diff_entries": [ + { + "status": "A", + "paths": [ + ".agent/reports/2026-07-10-db-bulkops-capture-lock-rework-maker.md" + ], + "raw": "A\t.agent/reports/2026-07-10-db-bulkops-capture-lock-rework-maker.md" + }, + { + "status": "A", + "paths": [ + ".agent/reports/2026-07-10-db-bulkops-sibling-rework-maker.md" + ], + "raw": "A\t.agent/reports/2026-07-10-db-bulkops-sibling-rework-maker.md" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/db-bulkops-sibling-rework/DB-BULKOPS-SIBLING-REWORK.final.json" + ], + "raw": "A\t.agent/reports/evidence/production-ready/db-bulkops-sibling-rework/DB-BULKOPS-SIBLING-REWORK.final.json" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/db-bulkops-sibling-rework/DB-BULKOPS-SIBLING-REWORK.tdd.json" + ], + "raw": "A\t.agent/reports/evidence/production-ready/db-bulkops-sibling-rework/DB-BULKOPS-SIBLING-REWORK.tdd.json" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/db-bulkops-sibling-rework/H1-candidate-review-after.red.json" + ], + "raw": "A\t.agent/reports/evidence/production-ready/db-bulkops-sibling-rework/H1-candidate-review-after.red.json" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/db-bulkops-sibling-rework/M1-nil-facade-normalization.red.json" + ], + "raw": "A\t.agent/reports/evidence/production-ready/db-bulkops-sibling-rework/M1-nil-facade-normalization.red.json" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/db-bulkops-sibling-rework/M2-all-row-failure-audit.red.json" + ], + "raw": "A\t.agent/reports/evidence/production-ready/db-bulkops-sibling-rework/M2-all-row-failure-audit.red.json" + }, + { + "status": "A", + "paths": [ + ".agent/specs/production-ready-db-bulkops/evidence/DB-BULKOPS-CAPTURE-LOCK-REWORK.red.json" + ], + "raw": "A\t.agent/specs/production-ready-db-bulkops/evidence/DB-BULKOPS-CAPTURE-LOCK-REWORK.red.json" + }, + { + "status": "A", + "paths": [ + ".agent/specs/production-ready-db-bulkops/evidence/DB-BULKOPS-CAPTURE-LOCK-REWORK.tdd.json" + ], + "raw": "A\t.agent/specs/production-ready-db-bulkops/evidence/DB-BULKOPS-CAPTURE-LOCK-REWORK.tdd.json" + }, + { + "status": "A", + "paths": [ + ".agent/specs/production-ready-db-bulkops/evidence/DB-BULKOPS-DRY-RUN-NORMALIZATION.red.json" + ], + "raw": "A\t.agent/specs/production-ready-db-bulkops/evidence/DB-BULKOPS-DRY-RUN-NORMALIZATION.red.json" + }, + { + "status": "A", + "paths": [ + ".agent/specs/production-ready-db-bulkops/evidence/DB-BULKOPS-FINAL.cover.out" + ], + "raw": "A\t.agent/specs/production-ready-db-bulkops/evidence/DB-BULKOPS-FINAL.cover.out" + }, + { + "status": "A", + "paths": [ + ".agent/specs/production-ready-db-bulkops/evidence/DB-BULKOPS-LEGACY-CANDIDATE-NO-AFTER.red.json" + ], + "raw": "A\t.agent/specs/production-ready-db-bulkops/evidence/DB-BULKOPS-LEGACY-CANDIDATE-NO-AFTER.red.json" + }, + { + "status": "A", + "paths": [ + ".agent/specs/production-ready-db-bulkops/evidence/DB-BULKOPS-ROLLBACK-CANDIDATE-CONFLICT.red.json" + ], + "raw": "A\t.agent/specs/production-ready-db-bulkops/evidence/DB-BULKOPS-ROLLBACK-CANDIDATE-CONFLICT.red.json" + }, + { + "status": "M", + "paths": [ + "internal/bulkops/facade.go" + ], + "raw": "M\tinternal/bulkops/facade.go" + }, + { + "status": "M", + "paths": [ + "internal/bulkops/facade_test.go" + ], + "raw": "M\tinternal/bulkops/facade_test.go" + }, + { + "status": "M", + "paths": [ + "internal/bulkops/rollback.go" + ], + "raw": "M\tinternal/bulkops/rollback.go" + }, + { + "status": "M", + "paths": [ + "internal/bulkops/rollback_test.go" + ], + "raw": "M\tinternal/bulkops/rollback_test.go" + }, + { + "status": "M", + "paths": [ + "internal/db/gorm/candidate_store.go" + ], + "raw": "M\tinternal/db/gorm/candidate_store.go" + }, + { + "status": "M", + "paths": [ + "internal/db/gorm/candidate_store_test.go" + ], + "raw": "M\tinternal/db/gorm/candidate_store_test.go" + }, + { + "status": "M", + "paths": [ + "internal/mcp/tools_bulkops.go" + ], + "raw": "M\tinternal/mcp/tools_bulkops.go" + }, + { + "status": "M", + "paths": [ + "internal/mcp/tools_dryrun_test.go" + ], + "raw": "M\tinternal/mcp/tools_dryrun_test.go" + }, + { + "status": "M", + "paths": [ + "pkg/models/snapshot.go" + ], + "raw": "M\tpkg/models/snapshot.go" + } + ], + "changed_paths": [ + { + "status": "A", + "path": ".agent/reports/2026-07-10-db-bulkops-capture-lock-rework-maker.md", + "allowed": true, + "allowed_by": [ + "slice-declaration" + ], + "ownership_matches": [ + ".agent/reports/2026-07-10-db-bulkops-capture-lock-rework-maker.md" + ] + }, + { + "status": "A", + "path": ".agent/reports/2026-07-10-db-bulkops-sibling-rework-maker.md", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "report-namespace" + ], + "ownership_matches": [ + ".agent/reports/2026-07-10-db-bulkops-sibling-rework-maker.md" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/db-bulkops-sibling-rework/DB-BULKOPS-SIBLING-REWORK.final.json", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/db-bulkops-sibling-rework/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/db-bulkops-sibling-rework/DB-BULKOPS-SIBLING-REWORK.tdd.json", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/db-bulkops-sibling-rework/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/db-bulkops-sibling-rework/H1-candidate-review-after.red.json", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/db-bulkops-sibling-rework/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/db-bulkops-sibling-rework/M1-nil-facade-normalization.red.json", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/db-bulkops-sibling-rework/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/db-bulkops-sibling-rework/M2-all-row-failure-audit.red.json", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/db-bulkops-sibling-rework/**" + ] + }, + { + "status": "A", + "path": ".agent/specs/production-ready-db-bulkops/evidence/DB-BULKOPS-CAPTURE-LOCK-REWORK.red.json", + "allowed": true, + "allowed_by": [ + "slice-declaration" + ], + "ownership_matches": [ + ".agent/specs/production-ready-db-bulkops/evidence/**" + ] + }, + { + "status": "A", + "path": ".agent/specs/production-ready-db-bulkops/evidence/DB-BULKOPS-CAPTURE-LOCK-REWORK.tdd.json", + "allowed": true, + "allowed_by": [ + "slice-declaration" + ], + "ownership_matches": [ + ".agent/specs/production-ready-db-bulkops/evidence/**" + ] + }, + { + "status": "A", + "path": ".agent/specs/production-ready-db-bulkops/evidence/DB-BULKOPS-DRY-RUN-NORMALIZATION.red.json", + "allowed": true, + "allowed_by": [ + "slice-declaration" + ], + "ownership_matches": [ + ".agent/specs/production-ready-db-bulkops/evidence/**" + ] + }, + { + "status": "A", + "path": ".agent/specs/production-ready-db-bulkops/evidence/DB-BULKOPS-FINAL.cover.out", + "allowed": true, + "allowed_by": [ + "slice-declaration" + ], + "ownership_matches": [ + ".agent/specs/production-ready-db-bulkops/evidence/**" + ] + }, + { + "status": "A", + "path": ".agent/specs/production-ready-db-bulkops/evidence/DB-BULKOPS-LEGACY-CANDIDATE-NO-AFTER.red.json", + "allowed": true, + "allowed_by": [ + "slice-declaration" + ], + "ownership_matches": [ + ".agent/specs/production-ready-db-bulkops/evidence/**" + ] + }, + { + "status": "A", + "path": ".agent/specs/production-ready-db-bulkops/evidence/DB-BULKOPS-ROLLBACK-CANDIDATE-CONFLICT.red.json", + "allowed": true, + "allowed_by": [ + "slice-declaration" + ], + "ownership_matches": [ + ".agent/specs/production-ready-db-bulkops/evidence/**" + ] + }, + { + "status": "M", + "path": "internal/bulkops/facade.go", + "allowed": true, + "allowed_by": [ + "slice-declaration" + ], + "ownership_matches": [ + "internal/bulkops/facade.go" + ] + }, + { + "status": "M", + "path": "internal/bulkops/facade_test.go", + "allowed": true, + "allowed_by": [ + "slice-declaration" + ], + "ownership_matches": [ + "internal/bulkops/facade_test.go" + ] + }, + { + "status": "M", + "path": "internal/bulkops/rollback.go", + "allowed": true, + "allowed_by": [ + "slice-declaration" + ], + "ownership_matches": [ + "internal/bulkops/rollback.go" + ] + }, + { + "status": "M", + "path": "internal/bulkops/rollback_test.go", + "allowed": true, + "allowed_by": [ + "slice-declaration" + ], + "ownership_matches": [ + "internal/bulkops/rollback_test.go" + ] + }, + { + "status": "M", + "path": "internal/db/gorm/candidate_store.go", + "allowed": true, + "allowed_by": [ + "slice-declaration" + ], + "ownership_matches": [ + "internal/db/gorm/candidate_store.go" + ] + }, + { + "status": "M", + "path": "internal/db/gorm/candidate_store_test.go", + "allowed": true, + "allowed_by": [ + "slice-declaration" + ], + "ownership_matches": [ + "internal/db/gorm/candidate_store_test.go" + ] + }, + { + "status": "M", + "path": "internal/mcp/tools_bulkops.go", + "allowed": true, + "allowed_by": [ + "slice-declaration" + ], + "ownership_matches": [ + "internal/mcp/tools_bulkops.go" + ] + }, + { + "status": "M", + "path": "internal/mcp/tools_dryrun_test.go", + "allowed": true, + "allowed_by": [ + "slice-declaration" + ], + "ownership_matches": [ + "internal/mcp/tools_dryrun_test.go" + ] + }, + { + "status": "M", + "path": "pkg/models/snapshot.go", + "allowed": true, + "allowed_by": [ + "slice-declaration" + ], + "ownership_matches": [ + "pkg/models/snapshot.go" + ] + } + ], + "violations": [], + "epoch_authority": { + "verdict": "FAIL", + "evaluated": [ + { + "path": "internal/bulkops/facade_test.go", + "current_owner": "DB-BULKOPS", + "owner_pass": true, + "transition_kind": "integration", + "required_base_sha": "", + "base_pass": true + }, + { + "path": "internal/bulkops/facade.go", + "current_owner": "DB-BULKOPS", + "owner_pass": true, + "transition_kind": "integration", + "required_base_sha": "", + "base_pass": true + }, + { + "path": "internal/bulkops/rollback_test.go", + "current_owner": "DB-BULKOPS", + "owner_pass": true, + "transition_kind": "integration", + "required_base_sha": "", + "base_pass": true + }, + { + "path": "internal/db/gorm/candidate_store_test.go", + "current_owner": "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK", + "owner_pass": false, + "transition_kind": "rework", + "required_base_sha": "68b2ce5835c7c6efdf1c68da9eedcb8d9c3837ef", + "base_pass": null + }, + { + "path": "internal/db/gorm/candidate_store.go", + "current_owner": "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK", + "owner_pass": false, + "transition_kind": "rework", + "required_base_sha": "68b2ce5835c7c6efdf1c68da9eedcb8d9c3837ef", + "base_pass": null + }, + { + "path": "internal/mcp/tools_bulkops.go", + "current_owner": "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK", + "owner_pass": false, + "transition_kind": "rework", + "required_base_sha": "68b2ce5835c7c6efdf1c68da9eedcb8d9c3837ef", + "base_pass": null + }, + { + "path": "internal/mcp/tools_dryrun_test.go", + "current_owner": "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK", + "owner_pass": false, + "transition_kind": "rework", + "required_base_sha": "68b2ce5835c7c6efdf1c68da9eedcb8d9c3837ef", + "base_pass": null + }, + { + "path": "pkg/models/snapshot.go", + "current_owner": "DB-BULKOPS", + "owner_pass": true, + "transition_kind": "integration", + "required_base_sha": "", + "base_pass": true + } + ], + "errors": [ + "changed epoch path 'internal/db/gorm/candidate_store_test.go' current owner is 'DB-BULKOPS-BEHAVIORAL-EDGE-REWORK', not 'DB-BULKOPS'", + "changed epoch path 'internal/db/gorm/candidate_store.go' current owner is 'DB-BULKOPS-BEHAVIORAL-EDGE-REWORK', not 'DB-BULKOPS'", + "changed epoch path 'internal/mcp/tools_bulkops.go' current owner is 'DB-BULKOPS-BEHAVIORAL-EDGE-REWORK', not 'DB-BULKOPS'", + "changed epoch path 'internal/mcp/tools_dryrun_test.go' current owner is 'DB-BULKOPS-BEHAVIORAL-EDGE-REWORK', not 'DB-BULKOPS'" + ] + }, + "errors": [ + "epoch: changed epoch path 'internal/db/gorm/candidate_store_test.go' current owner is 'DB-BULKOPS-BEHAVIORAL-EDGE-REWORK', not 'DB-BULKOPS'", + "epoch: changed epoch path 'internal/db/gorm/candidate_store.go' current owner is 'DB-BULKOPS-BEHAVIORAL-EDGE-REWORK', not 'DB-BULKOPS'", + "epoch: changed epoch path 'internal/mcp/tools_bulkops.go' current owner is 'DB-BULKOPS-BEHAVIORAL-EDGE-REWORK', not 'DB-BULKOPS'", + "epoch: changed epoch path 'internal/mcp/tools_dryrun_test.go' current owner is 'DB-BULKOPS-BEHAVIORAL-EDGE-REWORK', not 'DB-BULKOPS'" + ] +} diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/ownership/ledger-final.json b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/ownership/ledger-final.json new file mode 100644 index 00000000..6bdb4bab --- /dev/null +++ b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/ownership/ledger-final.json @@ -0,0 +1,4121 @@ +{ + "schema_version": 2, + "gate": "plan-path-ownership", + "mode": "Ledger", + "verdict": "PASS", + "started_at": "2026-07-10T09:48:18.8335376+00:00", + "finished_at": "2026-07-10T09:48:22.5071934+00:00", + "duration_seconds": 3.674, + "plan": { + "path": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\plans\\2026-07-10-engram-production-ready-master-plan.md", + "expected_sha256": "d371e94dff1ea12767b9d0832240cb6caf52c6c3bbe2209fe4280159c4f03c52", + "observed_sha256": "d371e94dff1ea12767b9d0832240cb6caf52c6c3bbe2209fe4280159c4f03c52", + "hash_match": true + }, + "state": { + "path": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\plans\\2026-07-10-engram-production-ready-ownership-state.json", + "sha256": "1419e2f7e5236e21dd9a2d8c3271ced2def16dc0a798435ad5a9401fe522d55b", + "verdict": "PASS", + "plan_sha256": "d371e94dff1ea12767b9d0832240cb6caf52c6c3bbe2209fe4280159c4f03c52" + }, + "counts": { + "maker_slices": 47, + "declarations": 318, + "exact_paths": 310, + "prefixes": 8, + "repeated_exact_paths": 32, + "prefix_intersections": 2, + "undeclared_prefix_intersections": 0, + "declared_epochs": 32, + "state_epochs": 32, + "errors": 0 + }, + "slices": [ + { + "slice": "PLAN-GOVERNANCE", + "branch": "work/prc-release-gates", + "paths": [ + ".agent/plans/2026-07-10-engram-production-ready-master-plan.md", + ".agent/plans/2026-07-10-engram-production-ready-ownership-state.json" + ], + "line": 6 + }, + { + "slice": "DB-BULKOPS", + "branch": "work/prc-db-bulkops", + "paths": [ + "internal/bulkops/facade.go", + "internal/bulkops/facade_test.go", + "internal/bulkops/rollback.go", + "internal/bulkops/rollback_test.go", + "internal/db/gorm/candidate_store.go", + "internal/db/gorm/candidate_store_test.go", + "internal/mcp/tools_bulkops.go", + "internal/mcp/tools_dryrun_test.go", + "pkg/models/snapshot.go", + ".agent/reports/2026-07-10-db-bulkops-capture-lock-rework-maker.md", + ".agent/reports/2026-07-10-db-bulkops-sibling-rework-maker.md", + ".agent/specs/production-ready-db-bulkops/evidence/**", + ".agent/reports/evidence/production-ready/db-bulkops-sibling-rework/**" + ], + "line": 7 + }, + { + "slice": "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK", + "branch": "work/prc-db-bulkops-behavioral-edge-rework", + "paths": [ + "internal/db/gorm/candidate_store.go", + "internal/db/gorm/candidate_store_test.go", + "internal/mcp/tools_bulkops.go", + "internal/mcp/tools_dryrun_test.go", + ".agent/reports/2026-07-10-db-bulkops-behavioral-edge-rework-maker.md", + ".agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/**" + ], + "line": 8 + }, + { + "slice": "DB-GOVERNANCE", + "branch": "work/prc-db-governance", + "paths": [ + "internal/db/gorm/candidate_store.go", + "internal/db/gorm/candidate_store_test.go", + "internal/db/gorm/rule_arbiter_store_test.go", + "internal/db/gorm/rule_governance_store.go", + "internal/db/gorm/rule_governance_store_test.go", + "internal/db/gorm/rule_governance_rg3_store_test.go", + "internal/db/gorm/migration_rule_governance.go", + "internal/db/gorm/migration_rule_arbiter.go", + "internal/db/gorm/migration_rule_governance_snapshot_statuses.go" + ], + "line": 9 + }, + { + "slice": "CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK", + "branch": "work/prc-candidate-review-snapshot-rollback", + "paths": [ + "internal/reviewpacket/candidate.go", + "internal/reviewpacket/candidate_test.go", + "internal/db/gorm/candidate_store.go", + "internal/db/gorm/candidate_store_test.go", + "internal/db/gorm/snapshot_store.go", + "internal/db/gorm/snapshot_store_test.go", + "internal/bulkops/rollback_test.go", + "tests/critical/candidate_review/candidate_review_snapshot_rollback_test.go" + ], + "line": 10 + }, + { + "slice": "INGEST-DOC-SNAPSHOT-DEMOLITION", + "branch": "work/prc-ingest-doc-snapshot-demolition", + "paths": [ + "internal/bulkops/facade.go", + "internal/bulkops/facade_test.go", + "pkg/models/snapshot.go", + "pkg/models/snapshot_test.go", + "internal/mcp/ingest_snapshot_contract_test.go" + ], + "line": 12 + }, + { + "slice": "DB-AUTH", + "branch": "work/prc-db-auth", + "paths": [ + "internal/db/gorm/user_store.go", + "internal/db/gorm/user_store_test.go", + "internal/worker/auth_handlers.go", + "internal/worker/auth_handlers_lifecycle_test.go" + ], + "line": 13 + }, + { + "slice": "AUTH-BOOTSTRAP-SECURITY", + "branch": "work/prc-auth-bootstrap-security", + "paths": [ + "internal/config/config.go", + "internal/config/config_test.go", + "internal/config/envnames.go", + "internal/db/gorm/user_store.go", + "internal/worker/middleware.go", + "internal/worker/middleware_test.go", + "internal/worker/auth_handlers.go", + "internal/worker/auth_bootstrap_limiter.go", + "internal/worker/auth_bootstrap_limiter_test.go", + "internal/worker/auth_bootstrap_security_test.go", + "internal/worker/service.go", + "tests/critical/auth_bootstrap/first_admin_bootstrap_test.go", + "scripts/production-smoke/customer/run-auth-bootstrap-adversary.ps1" + ], + "line": 14 + }, + { + "slice": "DURABLE-AUDIT-BOUNDARIES", + "branch": "work/prc-durable-audit-boundaries", + "paths": [ + "internal/db/gorm/domain_owner_store.go", + "internal/db/gorm/domain_owner_store_test.go", + "internal/db/gorm/user_store.go", + "internal/worker/auth_handlers.go", + "internal/worker/auth_audit_durability_test.go", + "internal/bulkops/facade.go", + "internal/bulkops/audit_durability_test.go", + "scripts/production-smoke/customer/run-durable-audit-faults.ps1" + ], + "line": 15 + }, + { + "slice": "DB-CRYSTALLIZATION", + "branch": "work/prc-db-crystallization", + "paths": [ + "internal/worker/handlers_hooks_crystallization_integration_test.go" + ], + "line": 16 + }, + { + "slice": "DB-EMBEDDING-STATS", + "branch": "work/prc-db-embedding-stats", + "paths": [ + "internal/embedding/store.go", + "internal/embedding/store_stats_test.go" + ], + "line": 17 + }, + { + "slice": "DB-REAPER", + "branch": "work/prc-db-reaper", + "paths": [ + "internal/worker/reaper/reaper.go", + "internal/worker/reaper/reaper_test.go" + ], + "line": 18 + }, + { + "slice": "SECURITY-TOOLCHAIN", + "branch": "work/prc-security-toolchain", + "paths": [ + "go.mod", + "go.sum", + "Dockerfile" + ], + "line": 19 + }, + { + "slice": "RELEASE-GATES", + "branch": "work/prc-release-gates", + "paths": [ + ".agent/critical-suite.config.yaml", + ".agent/dev-stand.config.yaml", + ".github/workflows/test.yml", + "scripts/production-gates/assert-coverage.ps1", + "scripts/production-gates/assert-go-test-json.ps1", + "scripts/production-gates/assert-plan-path-ownership.ps1", + "scripts/production-gates/cleanup-db-sessions.ps1", + "scripts/production-gates/run-critical-suite.ps1", + "scripts/production-gates/run-db-suite.ps1", + "scripts/production-gates/run-dev-stand.ps1", + "scripts/production-gates/run-node-matrix.ps1", + ".agent/reports/2026-07-10-release-gates-foundation-revision-3-maker.md", + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" + ], + "line": 20 + }, + { + "slice": "IMAGE-REMEDIATION", + "branch": "work/prc-image-remediation", + "paths": [ + "Dockerfile", + "cmd/engram-healthcheck/main.go", + "cmd/engram-healthcheck/main_test.go", + "apps/operator-console/package.json", + "apps/operator-console/package-lock.json", + "deploy/postgres/Dockerfile", + "docker-compose.yml", + "deploy/docker-compose.runtime.yml", + "docs/DEPLOYMENT.md", + "docs/PRODUCTION-TESTING-PLAYBOOK.md", + ".github/workflows/test.yml", + ".github/workflows/docker.yaml", + ".github/workflows/docker-publish.yml", + "scripts/production-gates/build-and-scan-images.ps1", + "tests/critical/runtime/image_runtime_contract_test.go", + "tests/critical/runtime/postgres_image_contract_test.go" + ], + "line": 21 + }, + { + "slice": "SECURITY-PROJECT-IDENTITY", + "branch": "work/prc-security-project-identity", + "paths": [ + "internal/proxy/identity.go", + "internal/proxy/identity_test.go", + "internal/handlers/engramcore/tools.go", + "internal/handlers/engramcore/project_identity_v2_test.go", + "proto/engram/v1/engram.proto", + "proto/engram/v1/engram.pb.go", + "proto/engram/v1/engram_grpc.pb.go", + "internal/grpcserver/server.go", + "internal/grpcserver/project_identity_v2_test.go", + "internal/db/gorm/project_store.go", + "internal/db/gorm/project_store_test.go", + "internal/worker/handlers_context.go", + "internal/worker/project_identity_v2_test.go", + "plugin/engram/hooks/lib.js", + "plugin/engram/hooks/lib.test.js", + "plugin/engram/hooks/project-identity-v2.test.js", + "plugin/openclaw-engram/src/identity.ts", + "plugin/openclaw-engram/src/identity.test.ts", + "docs/arch/architecture.md" + ], + "line": 22 + }, + { + "slice": "OPENCLAW-RELEASE", + "branch": "work/prc-openclaw-release", + "paths": [ + "plugin/openclaw-engram/.gitignore", + "plugin/openclaw-engram/package.json", + "plugin/openclaw-engram/package-lock.json", + "plugin/openclaw-engram/openclaw.plugin.json", + "plugin/openclaw-engram/README.md", + ".github/workflows/plugin-publish.yml", + "docs/RELEASE-PROTOCOL.md" + ], + "line": 23 + }, + { + "slice": "UPDATE-LIFECYCLE", + "branch": "work/prc-security-updater", + "paths": [ + "internal/update/update.go", + "internal/update/update_test.go", + "internal/worker/handlers_update.go", + "internal/worker/handlers_update_test.go", + "scripts/install.sh", + "scripts/install.ps1", + ".goreleaser.yaml", + ".github/workflows/release.yaml", + "plugin/engram/hooks/hook-cli.test.js" + ], + "line": 24 + }, + { + "slice": "DOCUMENT-INGEST-PUBLIC-TRUTH", + "branch": "work/prc-document-ingest-public-truth", + "paths": [ + "internal/mcp/server.go", + "internal/mcp/ingest_document_description_test.go" + ], + "line": 26 + }, + { + "slice": "MCP-STRUCTURED-INPUT-VALIDATION", + "branch": "work/prc-mcp-structured-input-validation", + "paths": [ + "internal/mcp/coerce.go", + "internal/mcp/coerce_test.go", + "internal/mcp/tools_candidates.go", + "internal/mcp/tools_candidates_test.go", + "internal/mcp/tools_memory.go", + "internal/mcp/tools_memory_edit_test.go", + "internal/mcp/tools_memory_significance.go", + "internal/mcp/tools_memory_significance_test.go", + "internal/mcp/tools_store_consolidated.go", + "internal/mcp/tools_settings.go", + "internal/mcp/tools_settings_test.go", + "internal/mcp/tools_documents_v2.go", + "internal/mcp/tools_rule_governance.go", + "internal/mcp/tools_rule_governance_test.go", + "internal/mcp/structured_input_validation_test.go" + ], + "line": 28 + }, + { + "slice": "T007-COMPAT-DEMOLITION-CLASSIFICATION", + "branch": "work/prc-t007-compat-classification", + "paths": [ + "internal/mcp/store_memory_compat_t007_test.go" + ], + "line": 30 + }, + { + "slice": "DB-RULES-ISOLATION", + "branch": "work/prc-db-rules-isolation", + "paths": [ + "internal/worker/handlers_rules_test.go", + "scripts/production-gates/run-db-rules-isolation.ps1" + ], + "line": 31 + }, + { + "slice": "COVERAGE-WORKER", + "branch": "work/prc-coverage-worker", + "paths": [ + "internal/worker/production_readiness_coverage_test.go" + ], + "line": 32 + }, + { + "slice": "COVERAGE-MCP", + "branch": "work/prc-coverage-mcp", + "paths": [ + "internal/mcp/production_readiness_coverage_test.go" + ], + "line": 33 + }, + { + "slice": "COVERAGE-GORM", + "branch": "work/prc-coverage-gorm", + "paths": [ + "internal/db/gorm/production_readiness_coverage_test.go" + ], + "line": 34 + }, + { + "slice": "COVERAGE-LOOM", + "branch": "work/prc-coverage-loom", + "paths": [ + "internal/handlers/loom/production_readiness_coverage_test.go" + ], + "line": 35 + }, + { + "slice": "DEPLOYMENT-ROLLBACK", + "branch": "work/prc-deployment-rollback", + "paths": [ + "docker-compose.yml", + "deploy/docker-compose.runtime.yml", + "deploy/docker-compose.operator-web-standalone.yml", + "deploy/entrypoint-server.sh", + "deploy/healthcheck-server.sh", + "deploy/verify-rollback.ps1", + "deploy/verify-runtime-policy.ps1" + ], + "line": 36 + }, + { + "slice": "RECOVERY-DATA", + "branch": "work/prc-recovery-data", + "paths": [ + "scripts/recovery/start-disposable-postgres.ps1", + "scripts/recovery/verify-postgres-roundtrip.ps1", + "scripts/recovery/seed-recovery-fixture.ps1", + "scripts/recovery/assert-recovery-fixture.ps1", + "tests/critical/recovery/postgres_roundtrip_test.go" + ], + "line": 37 + }, + { + "slice": "OBSERVABILITY-OTLP", + "branch": "work/prc-observability-otlp", + "paths": [ + "internal/module/obs/logging.go", + "internal/module/obs/logging_test.go", + "internal/module/obs/meter.go", + "internal/module/obs/meter_test.go", + "internal/module/obs/metrics.go", + "internal/module/obs/metrics_test.go", + "cmd/engram-server/main.go", + "cmd/engram-server/main_test.go", + "scripts/production-smoke/verify-otlp.ps1" + ], + "line": 38 + }, + { + "slice": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "paths": [ + "internal/scope/domain_policy.go", + "internal/scope/domain_policy_test.go", + "internal/scope/filter.go", + "internal/scope/filter_test.go", + "internal/scope/filter_principal_test.go", + "internal/scope/filter_w4_test.go", + "internal/principalmemory/access_policy.go", + "internal/principalmemory/access_policy_test.go", + "internal/principalmemory/domain_registry.go", + "internal/principalmemory/domain_registry_test.go", + "internal/principalmemory/query_service.go", + "internal/principalmemory/query_service_test.go", + "internal/mcp/tools_principal_memory.go", + "internal/mcp/tools_principal_memory_test.go", + "internal/mcp/tools_recall_principal_test.go", + "internal/mcp/recall_visibility_backfill_test.go", + "internal/mcp/store_memory_principal_test.go", + "internal/worker/handlers_principal_memory.go", + "internal/worker/handlers_principal_memory_test.go", + "internal/worker/scope_bypass_w4_test.go", + "internal/worker/retention.go", + "internal/worker/retention_test.go", + "internal/db/gorm/memory_store.go", + "internal/db/gorm/memory_store_principal_test.go", + "internal/db/gorm/memory_store_principal_query_test.go", + "internal/db/gorm/purge_store_test.go", + "tests/critical/data_boundaries/principal_project_retention_test.go" + ], + "line": 39 + }, + { + "slice": "CRITICAL-HARNESS", + "branch": "work/prc-critical-harness", + "paths": [ + "tests/critical/customer_mode/customer_mode_test.go", + "tests/critical/customer_mode/compatibility_test.go", + "tests/critical/customer_mode/cross_agent_test.go", + "scripts/production-smoke/customer/run-customer-mode.ps1", + "scripts/production-smoke/customer/run-client-compatibility.ps1", + "scripts/production-smoke/customer/run-cross-agent.ps1", + "scripts/production-smoke/customer/run-diagnostic-matrix.ps1", + "scripts/production-smoke/customer/assert-product-works.ps1" + ], + "line": 40 + }, + { + "slice": "CORE-PUBLIC-TRUTH", + "branch": "work/prc-core-public-truth", + "paths": [ + "README.md", + "README.ru.md", + "README.zh.md", + "CONTRIBUTING.md", + "CHANGELOG.md", + "Makefile", + ".env.example", + "docs/DEPLOYMENT.md", + "docs/MIGRATION.md", + "docs/PRODUCTION-TESTING-PLAYBOOK.md", + "docs/arch/CONFIGURATION.md", + "docs/arch/QUICKSTART.md", + "docs/release-notes/v6.43.0.md", + "docs/public/engram.jpg", + "plugin/engram/commands/setup.md", + "plugin/engram/commands/doctor.md" + ], + "line": 41 + }, + { + "slice": "FINAL-PUBLIC-TRUTH", + "branch": "work/prc-final-public-truth", + "paths": [ + "README.md", + "README.ru.md", + "README.zh.md", + "CONTRIBUTING.md", + "CHANGELOG.md", + "Makefile", + ".env.example", + "docs/DEPLOYMENT.md", + "docs/MIGRATION.md", + "docs/PRODUCTION-TESTING-PLAYBOOK.md", + "docs/arch/CONFIGURATION.md", + "docs/arch/QUICKSTART.md", + "docs/public/engram.jpg", + "plugin/engram/commands/setup.md", + "plugin/engram/commands/doctor.md" + ], + "line": 42 + }, + { + "slice": "LAUNCHER-FIRST-RUN", + "branch": "work/prc-launcher-first-run", + "paths": [ + "cmd/engram/main.go", + "cmd/engram/main_test.go", + "cmd/engram/wiring.go", + "cmd/engram/exec_windows.go", + "cmd/engram/exec_unix.go", + "plugin/engram/.engram-project", + "plugin/engram/scripts/run-engram.js", + "plugin/engram/scripts/run-engram.test.js", + "plugin/engram/scripts/ensure-binary.js", + "plugin/engram/scripts/ensure-binary.test.js" + ], + "line": 43 + }, + { + "slice": "OC-INTEGRATION", + "branch": "work/prc-operator-console-integration", + "paths": [ + "apps/operator-console/**" + ], + "line": 44 + }, + { + "slice": "S4B-CONTRACT", + "branch": "work/prc-s4b-contract", + "paths": [ + ".agent/specs/engram-v7-directives-surfacing/**" + ], + "line": 45 + }, + { + "slice": "V7-S4B-BACKEND", + "branch": "work/prc-v7-s4b-backend", + "paths": [ + "internal/cognitive/s4bsurfacing/**" + ], + "line": 46 + }, + { + "slice": "V7-CORE-CALLPATH", + "branch": "work/prc-v7-core-callpath", + "paths": [ + "internal/cognitive/core/event_bus.go", + "internal/cognitive/core/event_bus_test.go", + "internal/cognitive/core/hint_queue.go", + "internal/cognitive/core/hint_queue_test.go", + "internal/cognitive/s3ambient/queue.go", + "internal/cognitive/s3ambient/subsystem.go" + ], + "line": 47 + }, + { + "slice": "V7-RUNTIME-WIRING", + "branch": "work/prc-v7-runtime-wiring", + "paths": [ + "internal/worker/service.go", + "internal/worker/service_v7_integration_test.go", + "internal/worker/handlers_stats_v7.go", + "internal/worker/handlers_stats_v7_test.go" + ], + "line": 48 + }, + { + "slice": "V7-TELEMETRY-WIRING", + "branch": "work/prc-v7-telemetry-wiring", + "paths": [ + "internal/cognitive/s5/metrics.go", + "internal/cognitive/s5/provider.go", + "internal/cognitive/s5/provider_test.go", + "internal/cognitive/s5/source_adapter.go", + "internal/cognitive/s5/source_adapter_test.go" + ], + "line": 49 + }, + { + "slice": "ROADMAP-RECONCILIATION", + "branch": "work/prc-roadmap-reconciliation", + "paths": [ + ".agent/specs/roadmap.md", + ".agent/specs/ui-surface-ledger.md", + ".agent/specs/operator-console-production-integration/**", + ".agent/specs/engram-v7-ambient/spec.md", + ".agent/specs/engram-v7-ambient/plan.md", + ".agent/specs/engram-v7-ambient/checklists/general.md", + ".agent/specs/engram-v7-ambient/changes/CR-001-initial-scope/change.md", + ".agent/specs/engram-v7-ambient/changes/CR-001-initial-scope/tasks.md" + ], + "line": 50 + }, + { + "slice": "NORTHSTAR-CI-A-CONTRACTS", + "branch": "work/prc-northstar-ci-a-contracts", + "paths": [ + ".agent/specs/engram-absorption/ci-a-dense-vector/spec.md", + ".agent/specs/engram-absorption/ci-a-dense-vector/plan.md", + ".agent/specs/engram-absorption/ci-a-dense-vector/checklists/general.md", + ".agent/specs/engram-absorption/ci-a-dense-vector/changes/CR-001-initial-scope/change.md", + ".agent/specs/engram-absorption/ci-a-dense-vector/changes/CR-001-initial-scope/tasks.md" + ], + "line": 51 + }, + { + "slice": "NORTHSTAR-CI-B-CONTRACTS", + "branch": "work/prc-northstar-ci-b-contracts", + "paths": [ + ".agent/specs/engram-absorption/ci-b-graph-watcher-context/spec.md", + ".agent/specs/engram-absorption/ci-b-graph-watcher-context/plan.md", + ".agent/specs/engram-absorption/ci-b-graph-watcher-context/checklists/general.md", + ".agent/specs/engram-absorption/ci-b-graph-watcher-context/changes/CR-001-initial-scope/change.md", + ".agent/specs/engram-absorption/ci-b-graph-watcher-context/changes/CR-001-initial-scope/tasks.md" + ], + "line": 52 + }, + { + "slice": "NORTHSTAR-BOOK-CONTRACTS", + "branch": "work/prc-northstar-book-contracts", + "paths": [ + ".agent/specs/engram-absorption/book/prd.md", + ".agent/specs/engram-absorption/book/spec.md", + ".agent/specs/engram-absorption/book/plan.md", + ".agent/specs/engram-absorption/book/checklists/general.md", + ".agent/specs/engram-absorption/book/changes/CR-001-initial-scope/change.md", + ".agent/specs/engram-absorption/book/changes/CR-001-initial-scope/tasks.md" + ], + "line": 53 + }, + { + "slice": "NORTHSTAR-MEM-CONTRACTS", + "branch": "work/prc-northstar-mem-contracts", + "paths": [ + ".agent/specs/engram-absorption/mem-residual/spec.md", + ".agent/specs/engram-absorption/mem-residual/plan.md", + ".agent/specs/engram-absorption/mem-residual/checklists/general.md", + ".agent/specs/engram-absorption/mem-residual/changes/CR-001-initial-scope/change.md", + ".agent/specs/engram-absorption/mem-residual/changes/CR-001-initial-scope/tasks.md" + ], + "line": 54 + }, + { + "slice": "NORTHSTAR-EFFECTIVENESS-CONTRACTS", + "branch": "work/prc-northstar-effectiveness-contracts", + "paths": [ + ".agent/specs/engram-effectiveness/production-ready-residual/spec.md", + ".agent/specs/engram-effectiveness/production-ready-residual/plan.md", + ".agent/specs/engram-effectiveness/production-ready-residual/checklists/general.md", + ".agent/specs/engram-effectiveness/production-ready-residual/changes/CR-001-initial-scope/change.md", + ".agent/specs/engram-effectiveness/production-ready-residual/changes/CR-001-initial-scope/tasks.md" + ], + "line": 55 + }, + { + "slice": "NORTHSTAR-SETTINGS-CONTRACTS", + "branch": "work/prc-northstar-settings-contracts", + "paths": [ + ".agent/specs/settings-store/production-ready-residual/spec.md", + ".agent/specs/settings-store/production-ready-residual/plan.md", + ".agent/specs/settings-store/production-ready-residual/checklists/general.md", + ".agent/specs/settings-store/production-ready-residual/changes/CR-001-initial-scope/change.md", + ".agent/specs/settings-store/production-ready-residual/changes/CR-001-initial-scope/tasks.md" + ], + "line": 56 + } + ], + "declarations": [ + { + "owner": "PLAN-GOVERNANCE", + "branch": "work/prc-release-gates", + "path": ".agent/plans/2026-07-10-engram-production-ready-master-plan.md", + "display": ".agent/plans/2026-07-10-engram-production-ready-master-plan.md", + "kind": "exact", + "line": 6 + }, + { + "owner": "PLAN-GOVERNANCE", + "branch": "work/prc-release-gates", + "path": ".agent/plans/2026-07-10-engram-production-ready-ownership-state.json", + "display": ".agent/plans/2026-07-10-engram-production-ready-ownership-state.json", + "kind": "exact", + "line": 6 + }, + { + "owner": "DB-BULKOPS", + "branch": "work/prc-db-bulkops", + "path": "internal/bulkops/facade.go", + "display": "internal/bulkops/facade.go", + "kind": "exact", + "line": 7 + }, + { + "owner": "DB-BULKOPS", + "branch": "work/prc-db-bulkops", + "path": "internal/bulkops/facade_test.go", + "display": "internal/bulkops/facade_test.go", + "kind": "exact", + "line": 7 + }, + { + "owner": "DB-BULKOPS", + "branch": "work/prc-db-bulkops", + "path": "internal/bulkops/rollback.go", + "display": "internal/bulkops/rollback.go", + "kind": "exact", + "line": 7 + }, + { + "owner": "DB-BULKOPS", + "branch": "work/prc-db-bulkops", + "path": "internal/bulkops/rollback_test.go", + "display": "internal/bulkops/rollback_test.go", + "kind": "exact", + "line": 7 + }, + { + "owner": "DB-BULKOPS", + "branch": "work/prc-db-bulkops", + "path": "internal/db/gorm/candidate_store.go", + "display": "internal/db/gorm/candidate_store.go", + "kind": "exact", + "line": 7 + }, + { + "owner": "DB-BULKOPS", + "branch": "work/prc-db-bulkops", + "path": "internal/db/gorm/candidate_store_test.go", + "display": "internal/db/gorm/candidate_store_test.go", + "kind": "exact", + "line": 7 + }, + { + "owner": "DB-BULKOPS", + "branch": "work/prc-db-bulkops", + "path": "internal/mcp/tools_bulkops.go", + "display": "internal/mcp/tools_bulkops.go", + "kind": "exact", + "line": 7 + }, + { + "owner": "DB-BULKOPS", + "branch": "work/prc-db-bulkops", + "path": "internal/mcp/tools_dryrun_test.go", + "display": "internal/mcp/tools_dryrun_test.go", + "kind": "exact", + "line": 7 + }, + { + "owner": "DB-BULKOPS", + "branch": "work/prc-db-bulkops", + "path": "pkg/models/snapshot.go", + "display": "pkg/models/snapshot.go", + "kind": "exact", + "line": 7 + }, + { + "owner": "DB-BULKOPS", + "branch": "work/prc-db-bulkops", + "path": ".agent/reports/2026-07-10-db-bulkops-capture-lock-rework-maker.md", + "display": ".agent/reports/2026-07-10-db-bulkops-capture-lock-rework-maker.md", + "kind": "exact", + "line": 7 + }, + { + "owner": "DB-BULKOPS", + "branch": "work/prc-db-bulkops", + "path": ".agent/reports/2026-07-10-db-bulkops-sibling-rework-maker.md", + "display": ".agent/reports/2026-07-10-db-bulkops-sibling-rework-maker.md", + "kind": "exact", + "line": 7 + }, + { + "owner": "DB-BULKOPS", + "branch": "work/prc-db-bulkops", + "path": ".agent/specs/production-ready-db-bulkops/evidence", + "display": ".agent/specs/production-ready-db-bulkops/evidence/**", + "kind": "prefix", + "line": 7 + }, + { + "owner": "DB-BULKOPS", + "branch": "work/prc-db-bulkops", + "path": ".agent/reports/evidence/production-ready/db-bulkops-sibling-rework", + "display": ".agent/reports/evidence/production-ready/db-bulkops-sibling-rework/**", + "kind": "prefix", + "line": 7 + }, + { + "owner": "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK", + "branch": "work/prc-db-bulkops-behavioral-edge-rework", + "path": "internal/db/gorm/candidate_store.go", + "display": "internal/db/gorm/candidate_store.go", + "kind": "exact", + "line": 8 + }, + { + "owner": "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK", + "branch": "work/prc-db-bulkops-behavioral-edge-rework", + "path": "internal/db/gorm/candidate_store_test.go", + "display": "internal/db/gorm/candidate_store_test.go", + "kind": "exact", + "line": 8 + }, + { + "owner": "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK", + "branch": "work/prc-db-bulkops-behavioral-edge-rework", + "path": "internal/mcp/tools_bulkops.go", + "display": "internal/mcp/tools_bulkops.go", + "kind": "exact", + "line": 8 + }, + { + "owner": "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK", + "branch": "work/prc-db-bulkops-behavioral-edge-rework", + "path": "internal/mcp/tools_dryrun_test.go", + "display": "internal/mcp/tools_dryrun_test.go", + "kind": "exact", + "line": 8 + }, + { + "owner": "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK", + "branch": "work/prc-db-bulkops-behavioral-edge-rework", + "path": ".agent/reports/2026-07-10-db-bulkops-behavioral-edge-rework-maker.md", + "display": ".agent/reports/2026-07-10-db-bulkops-behavioral-edge-rework-maker.md", + "kind": "exact", + "line": 8 + }, + { + "owner": "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK", + "branch": "work/prc-db-bulkops-behavioral-edge-rework", + "path": ".agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework", + "display": ".agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/**", + "kind": "prefix", + "line": 8 + }, + { + "owner": "DB-GOVERNANCE", + "branch": "work/prc-db-governance", + "path": "internal/db/gorm/candidate_store.go", + "display": "internal/db/gorm/candidate_store.go", + "kind": "exact", + "line": 9 + }, + { + "owner": "DB-GOVERNANCE", + "branch": "work/prc-db-governance", + "path": "internal/db/gorm/candidate_store_test.go", + "display": "internal/db/gorm/candidate_store_test.go", + "kind": "exact", + "line": 9 + }, + { + "owner": "DB-GOVERNANCE", + "branch": "work/prc-db-governance", + "path": "internal/db/gorm/rule_arbiter_store_test.go", + "display": "internal/db/gorm/rule_arbiter_store_test.go", + "kind": "exact", + "line": 9 + }, + { + "owner": "DB-GOVERNANCE", + "branch": "work/prc-db-governance", + "path": "internal/db/gorm/rule_governance_store.go", + "display": "internal/db/gorm/rule_governance_store.go", + "kind": "exact", + "line": 9 + }, + { + "owner": "DB-GOVERNANCE", + "branch": "work/prc-db-governance", + "path": "internal/db/gorm/rule_governance_store_test.go", + "display": "internal/db/gorm/rule_governance_store_test.go", + "kind": "exact", + "line": 9 + }, + { + "owner": "DB-GOVERNANCE", + "branch": "work/prc-db-governance", + "path": "internal/db/gorm/rule_governance_rg3_store_test.go", + "display": "internal/db/gorm/rule_governance_rg3_store_test.go", + "kind": "exact", + "line": 9 + }, + { + "owner": "DB-GOVERNANCE", + "branch": "work/prc-db-governance", + "path": "internal/db/gorm/migration_rule_governance.go", + "display": "internal/db/gorm/migration_rule_governance.go", + "kind": "exact", + "line": 9 + }, + { + "owner": "DB-GOVERNANCE", + "branch": "work/prc-db-governance", + "path": "internal/db/gorm/migration_rule_arbiter.go", + "display": "internal/db/gorm/migration_rule_arbiter.go", + "kind": "exact", + "line": 9 + }, + { + "owner": "DB-GOVERNANCE", + "branch": "work/prc-db-governance", + "path": "internal/db/gorm/migration_rule_governance_snapshot_statuses.go", + "display": "internal/db/gorm/migration_rule_governance_snapshot_statuses.go", + "kind": "exact", + "line": 9 + }, + { + "owner": "CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK", + "branch": "work/prc-candidate-review-snapshot-rollback", + "path": "internal/reviewpacket/candidate.go", + "display": "internal/reviewpacket/candidate.go", + "kind": "exact", + "line": 10 + }, + { + "owner": "CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK", + "branch": "work/prc-candidate-review-snapshot-rollback", + "path": "internal/reviewpacket/candidate_test.go", + "display": "internal/reviewpacket/candidate_test.go", + "kind": "exact", + "line": 10 + }, + { + "owner": "CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK", + "branch": "work/prc-candidate-review-snapshot-rollback", + "path": "internal/db/gorm/candidate_store.go", + "display": "internal/db/gorm/candidate_store.go", + "kind": "exact", + "line": 10 + }, + { + "owner": "CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK", + "branch": "work/prc-candidate-review-snapshot-rollback", + "path": "internal/db/gorm/candidate_store_test.go", + "display": "internal/db/gorm/candidate_store_test.go", + "kind": "exact", + "line": 10 + }, + { + "owner": "CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK", + "branch": "work/prc-candidate-review-snapshot-rollback", + "path": "internal/db/gorm/snapshot_store.go", + "display": "internal/db/gorm/snapshot_store.go", + "kind": "exact", + "line": 10 + }, + { + "owner": "CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK", + "branch": "work/prc-candidate-review-snapshot-rollback", + "path": "internal/db/gorm/snapshot_store_test.go", + "display": "internal/db/gorm/snapshot_store_test.go", + "kind": "exact", + "line": 10 + }, + { + "owner": "CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK", + "branch": "work/prc-candidate-review-snapshot-rollback", + "path": "internal/bulkops/rollback_test.go", + "display": "internal/bulkops/rollback_test.go", + "kind": "exact", + "line": 10 + }, + { + "owner": "CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK", + "branch": "work/prc-candidate-review-snapshot-rollback", + "path": "tests/critical/candidate_review/candidate_review_snapshot_rollback_test.go", + "display": "tests/critical/candidate_review/candidate_review_snapshot_rollback_test.go", + "kind": "exact", + "line": 10 + }, + { + "owner": "INGEST-DOC-SNAPSHOT-DEMOLITION", + "branch": "work/prc-ingest-doc-snapshot-demolition", + "path": "internal/bulkops/facade.go", + "display": "internal/bulkops/facade.go", + "kind": "exact", + "line": 12 + }, + { + "owner": "INGEST-DOC-SNAPSHOT-DEMOLITION", + "branch": "work/prc-ingest-doc-snapshot-demolition", + "path": "internal/bulkops/facade_test.go", + "display": "internal/bulkops/facade_test.go", + "kind": "exact", + "line": 12 + }, + { + "owner": "INGEST-DOC-SNAPSHOT-DEMOLITION", + "branch": "work/prc-ingest-doc-snapshot-demolition", + "path": "pkg/models/snapshot.go", + "display": "pkg/models/snapshot.go", + "kind": "exact", + "line": 12 + }, + { + "owner": "INGEST-DOC-SNAPSHOT-DEMOLITION", + "branch": "work/prc-ingest-doc-snapshot-demolition", + "path": "pkg/models/snapshot_test.go", + "display": "pkg/models/snapshot_test.go", + "kind": "exact", + "line": 12 + }, + { + "owner": "INGEST-DOC-SNAPSHOT-DEMOLITION", + "branch": "work/prc-ingest-doc-snapshot-demolition", + "path": "internal/mcp/ingest_snapshot_contract_test.go", + "display": "internal/mcp/ingest_snapshot_contract_test.go", + "kind": "exact", + "line": 12 + }, + { + "owner": "DB-AUTH", + "branch": "work/prc-db-auth", + "path": "internal/db/gorm/user_store.go", + "display": "internal/db/gorm/user_store.go", + "kind": "exact", + "line": 13 + }, + { + "owner": "DB-AUTH", + "branch": "work/prc-db-auth", + "path": "internal/db/gorm/user_store_test.go", + "display": "internal/db/gorm/user_store_test.go", + "kind": "exact", + "line": 13 + }, + { + "owner": "DB-AUTH", + "branch": "work/prc-db-auth", + "path": "internal/worker/auth_handlers.go", + "display": "internal/worker/auth_handlers.go", + "kind": "exact", + "line": 13 + }, + { + "owner": "DB-AUTH", + "branch": "work/prc-db-auth", + "path": "internal/worker/auth_handlers_lifecycle_test.go", + "display": "internal/worker/auth_handlers_lifecycle_test.go", + "kind": "exact", + "line": 13 + }, + { + "owner": "AUTH-BOOTSTRAP-SECURITY", + "branch": "work/prc-auth-bootstrap-security", + "path": "internal/config/config.go", + "display": "internal/config/config.go", + "kind": "exact", + "line": 14 + }, + { + "owner": "AUTH-BOOTSTRAP-SECURITY", + "branch": "work/prc-auth-bootstrap-security", + "path": "internal/config/config_test.go", + "display": "internal/config/config_test.go", + "kind": "exact", + "line": 14 + }, + { + "owner": "AUTH-BOOTSTRAP-SECURITY", + "branch": "work/prc-auth-bootstrap-security", + "path": "internal/config/envnames.go", + "display": "internal/config/envnames.go", + "kind": "exact", + "line": 14 + }, + { + "owner": "AUTH-BOOTSTRAP-SECURITY", + "branch": "work/prc-auth-bootstrap-security", + "path": "internal/db/gorm/user_store.go", + "display": "internal/db/gorm/user_store.go", + "kind": "exact", + "line": 14 + }, + { + "owner": "AUTH-BOOTSTRAP-SECURITY", + "branch": "work/prc-auth-bootstrap-security", + "path": "internal/worker/middleware.go", + "display": "internal/worker/middleware.go", + "kind": "exact", + "line": 14 + }, + { + "owner": "AUTH-BOOTSTRAP-SECURITY", + "branch": "work/prc-auth-bootstrap-security", + "path": "internal/worker/middleware_test.go", + "display": "internal/worker/middleware_test.go", + "kind": "exact", + "line": 14 + }, + { + "owner": "AUTH-BOOTSTRAP-SECURITY", + "branch": "work/prc-auth-bootstrap-security", + "path": "internal/worker/auth_handlers.go", + "display": "internal/worker/auth_handlers.go", + "kind": "exact", + "line": 14 + }, + { + "owner": "AUTH-BOOTSTRAP-SECURITY", + "branch": "work/prc-auth-bootstrap-security", + "path": "internal/worker/auth_bootstrap_limiter.go", + "display": "internal/worker/auth_bootstrap_limiter.go", + "kind": "exact", + "line": 14 + }, + { + "owner": "AUTH-BOOTSTRAP-SECURITY", + "branch": "work/prc-auth-bootstrap-security", + "path": "internal/worker/auth_bootstrap_limiter_test.go", + "display": "internal/worker/auth_bootstrap_limiter_test.go", + "kind": "exact", + "line": 14 + }, + { + "owner": "AUTH-BOOTSTRAP-SECURITY", + "branch": "work/prc-auth-bootstrap-security", + "path": "internal/worker/auth_bootstrap_security_test.go", + "display": "internal/worker/auth_bootstrap_security_test.go", + "kind": "exact", + "line": 14 + }, + { + "owner": "AUTH-BOOTSTRAP-SECURITY", + "branch": "work/prc-auth-bootstrap-security", + "path": "internal/worker/service.go", + "display": "internal/worker/service.go", + "kind": "exact", + "line": 14 + }, + { + "owner": "AUTH-BOOTSTRAP-SECURITY", + "branch": "work/prc-auth-bootstrap-security", + "path": "tests/critical/auth_bootstrap/first_admin_bootstrap_test.go", + "display": "tests/critical/auth_bootstrap/first_admin_bootstrap_test.go", + "kind": "exact", + "line": 14 + }, + { + "owner": "AUTH-BOOTSTRAP-SECURITY", + "branch": "work/prc-auth-bootstrap-security", + "path": "scripts/production-smoke/customer/run-auth-bootstrap-adversary.ps1", + "display": "scripts/production-smoke/customer/run-auth-bootstrap-adversary.ps1", + "kind": "exact", + "line": 14 + }, + { + "owner": "DURABLE-AUDIT-BOUNDARIES", + "branch": "work/prc-durable-audit-boundaries", + "path": "internal/db/gorm/domain_owner_store.go", + "display": "internal/db/gorm/domain_owner_store.go", + "kind": "exact", + "line": 15 + }, + { + "owner": "DURABLE-AUDIT-BOUNDARIES", + "branch": "work/prc-durable-audit-boundaries", + "path": "internal/db/gorm/domain_owner_store_test.go", + "display": "internal/db/gorm/domain_owner_store_test.go", + "kind": "exact", + "line": 15 + }, + { + "owner": "DURABLE-AUDIT-BOUNDARIES", + "branch": "work/prc-durable-audit-boundaries", + "path": "internal/db/gorm/user_store.go", + "display": "internal/db/gorm/user_store.go", + "kind": "exact", + "line": 15 + }, + { + "owner": "DURABLE-AUDIT-BOUNDARIES", + "branch": "work/prc-durable-audit-boundaries", + "path": "internal/worker/auth_handlers.go", + "display": "internal/worker/auth_handlers.go", + "kind": "exact", + "line": 15 + }, + { + "owner": "DURABLE-AUDIT-BOUNDARIES", + "branch": "work/prc-durable-audit-boundaries", + "path": "internal/worker/auth_audit_durability_test.go", + "display": "internal/worker/auth_audit_durability_test.go", + "kind": "exact", + "line": 15 + }, + { + "owner": "DURABLE-AUDIT-BOUNDARIES", + "branch": "work/prc-durable-audit-boundaries", + "path": "internal/bulkops/facade.go", + "display": "internal/bulkops/facade.go", + "kind": "exact", + "line": 15 + }, + { + "owner": "DURABLE-AUDIT-BOUNDARIES", + "branch": "work/prc-durable-audit-boundaries", + "path": "internal/bulkops/audit_durability_test.go", + "display": "internal/bulkops/audit_durability_test.go", + "kind": "exact", + "line": 15 + }, + { + "owner": "DURABLE-AUDIT-BOUNDARIES", + "branch": "work/prc-durable-audit-boundaries", + "path": "scripts/production-smoke/customer/run-durable-audit-faults.ps1", + "display": "scripts/production-smoke/customer/run-durable-audit-faults.ps1", + "kind": "exact", + "line": 15 + }, + { + "owner": "DB-CRYSTALLIZATION", + "branch": "work/prc-db-crystallization", + "path": "internal/worker/handlers_hooks_crystallization_integration_test.go", + "display": "internal/worker/handlers_hooks_crystallization_integration_test.go", + "kind": "exact", + "line": 16 + }, + { + "owner": "DB-EMBEDDING-STATS", + "branch": "work/prc-db-embedding-stats", + "path": "internal/embedding/store.go", + "display": "internal/embedding/store.go", + "kind": "exact", + "line": 17 + }, + { + "owner": "DB-EMBEDDING-STATS", + "branch": "work/prc-db-embedding-stats", + "path": "internal/embedding/store_stats_test.go", + "display": "internal/embedding/store_stats_test.go", + "kind": "exact", + "line": 17 + }, + { + "owner": "DB-REAPER", + "branch": "work/prc-db-reaper", + "path": "internal/worker/reaper/reaper.go", + "display": "internal/worker/reaper/reaper.go", + "kind": "exact", + "line": 18 + }, + { + "owner": "DB-REAPER", + "branch": "work/prc-db-reaper", + "path": "internal/worker/reaper/reaper_test.go", + "display": "internal/worker/reaper/reaper_test.go", + "kind": "exact", + "line": 18 + }, + { + "owner": "SECURITY-TOOLCHAIN", + "branch": "work/prc-security-toolchain", + "path": "go.mod", + "display": "go.mod", + "kind": "exact", + "line": 19 + }, + { + "owner": "SECURITY-TOOLCHAIN", + "branch": "work/prc-security-toolchain", + "path": "go.sum", + "display": "go.sum", + "kind": "exact", + "line": 19 + }, + { + "owner": "SECURITY-TOOLCHAIN", + "branch": "work/prc-security-toolchain", + "path": "Dockerfile", + "display": "Dockerfile", + "kind": "exact", + "line": 19 + }, + { + "owner": "RELEASE-GATES", + "branch": "work/prc-release-gates", + "path": ".agent/critical-suite.config.yaml", + "display": ".agent/critical-suite.config.yaml", + "kind": "exact", + "line": 20 + }, + { + "owner": "RELEASE-GATES", + "branch": "work/prc-release-gates", + "path": ".agent/dev-stand.config.yaml", + "display": ".agent/dev-stand.config.yaml", + "kind": "exact", + "line": 20 + }, + { + "owner": "RELEASE-GATES", + "branch": "work/prc-release-gates", + "path": ".github/workflows/test.yml", + "display": ".github/workflows/test.yml", + "kind": "exact", + "line": 20 + }, + { + "owner": "RELEASE-GATES", + "branch": "work/prc-release-gates", + "path": "scripts/production-gates/assert-coverage.ps1", + "display": "scripts/production-gates/assert-coverage.ps1", + "kind": "exact", + "line": 20 + }, + { + "owner": "RELEASE-GATES", + "branch": "work/prc-release-gates", + "path": "scripts/production-gates/assert-go-test-json.ps1", + "display": "scripts/production-gates/assert-go-test-json.ps1", + "kind": "exact", + "line": 20 + }, + { + "owner": "RELEASE-GATES", + "branch": "work/prc-release-gates", + "path": "scripts/production-gates/assert-plan-path-ownership.ps1", + "display": "scripts/production-gates/assert-plan-path-ownership.ps1", + "kind": "exact", + "line": 20 + }, + { + "owner": "RELEASE-GATES", + "branch": "work/prc-release-gates", + "path": "scripts/production-gates/cleanup-db-sessions.ps1", + "display": "scripts/production-gates/cleanup-db-sessions.ps1", + "kind": "exact", + "line": 20 + }, + { + "owner": "RELEASE-GATES", + "branch": "work/prc-release-gates", + "path": "scripts/production-gates/run-critical-suite.ps1", + "display": "scripts/production-gates/run-critical-suite.ps1", + "kind": "exact", + "line": 20 + }, + { + "owner": "RELEASE-GATES", + "branch": "work/prc-release-gates", + "path": "scripts/production-gates/run-db-suite.ps1", + "display": "scripts/production-gates/run-db-suite.ps1", + "kind": "exact", + "line": 20 + }, + { + "owner": "RELEASE-GATES", + "branch": "work/prc-release-gates", + "path": "scripts/production-gates/run-dev-stand.ps1", + "display": "scripts/production-gates/run-dev-stand.ps1", + "kind": "exact", + "line": 20 + }, + { + "owner": "RELEASE-GATES", + "branch": "work/prc-release-gates", + "path": "scripts/production-gates/run-node-matrix.ps1", + "display": "scripts/production-gates/run-node-matrix.ps1", + "kind": "exact", + "line": 20 + }, + { + "owner": "RELEASE-GATES", + "branch": "work/prc-release-gates", + "path": ".agent/reports/2026-07-10-release-gates-foundation-revision-3-maker.md", + "display": ".agent/reports/2026-07-10-release-gates-foundation-revision-3-maker.md", + "kind": "exact", + "line": 20 + }, + { + "owner": "RELEASE-GATES", + "branch": "work/prc-release-gates", + "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3", + "display": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**", + "kind": "prefix", + "line": 20 + }, + { + "owner": "IMAGE-REMEDIATION", + "branch": "work/prc-image-remediation", + "path": "Dockerfile", + "display": "Dockerfile", + "kind": "exact", + "line": 21 + }, + { + "owner": "IMAGE-REMEDIATION", + "branch": "work/prc-image-remediation", + "path": "cmd/engram-healthcheck/main.go", + "display": "cmd/engram-healthcheck/main.go", + "kind": "exact", + "line": 21 + }, + { + "owner": "IMAGE-REMEDIATION", + "branch": "work/prc-image-remediation", + "path": "cmd/engram-healthcheck/main_test.go", + "display": "cmd/engram-healthcheck/main_test.go", + "kind": "exact", + "line": 21 + }, + { + "owner": "IMAGE-REMEDIATION", + "branch": "work/prc-image-remediation", + "path": "apps/operator-console/package.json", + "display": "apps/operator-console/package.json", + "kind": "exact", + "line": 21 + }, + { + "owner": "IMAGE-REMEDIATION", + "branch": "work/prc-image-remediation", + "path": "apps/operator-console/package-lock.json", + "display": "apps/operator-console/package-lock.json", + "kind": "exact", + "line": 21 + }, + { + "owner": "IMAGE-REMEDIATION", + "branch": "work/prc-image-remediation", + "path": "deploy/postgres/Dockerfile", + "display": "deploy/postgres/Dockerfile", + "kind": "exact", + "line": 21 + }, + { + "owner": "IMAGE-REMEDIATION", + "branch": "work/prc-image-remediation", + "path": "docker-compose.yml", + "display": "docker-compose.yml", + "kind": "exact", + "line": 21 + }, + { + "owner": "IMAGE-REMEDIATION", + "branch": "work/prc-image-remediation", + "path": "deploy/docker-compose.runtime.yml", + "display": "deploy/docker-compose.runtime.yml", + "kind": "exact", + "line": 21 + }, + { + "owner": "IMAGE-REMEDIATION", + "branch": "work/prc-image-remediation", + "path": "docs/DEPLOYMENT.md", + "display": "docs/DEPLOYMENT.md", + "kind": "exact", + "line": 21 + }, + { + "owner": "IMAGE-REMEDIATION", + "branch": "work/prc-image-remediation", + "path": "docs/PRODUCTION-TESTING-PLAYBOOK.md", + "display": "docs/PRODUCTION-TESTING-PLAYBOOK.md", + "kind": "exact", + "line": 21 + }, + { + "owner": "IMAGE-REMEDIATION", + "branch": "work/prc-image-remediation", + "path": ".github/workflows/test.yml", + "display": ".github/workflows/test.yml", + "kind": "exact", + "line": 21 + }, + { + "owner": "IMAGE-REMEDIATION", + "branch": "work/prc-image-remediation", + "path": ".github/workflows/docker.yaml", + "display": ".github/workflows/docker.yaml", + "kind": "exact", + "line": 21 + }, + { + "owner": "IMAGE-REMEDIATION", + "branch": "work/prc-image-remediation", + "path": ".github/workflows/docker-publish.yml", + "display": ".github/workflows/docker-publish.yml", + "kind": "exact", + "line": 21 + }, + { + "owner": "IMAGE-REMEDIATION", + "branch": "work/prc-image-remediation", + "path": "scripts/production-gates/build-and-scan-images.ps1", + "display": "scripts/production-gates/build-and-scan-images.ps1", + "kind": "exact", + "line": 21 + }, + { + "owner": "IMAGE-REMEDIATION", + "branch": "work/prc-image-remediation", + "path": "tests/critical/runtime/image_runtime_contract_test.go", + "display": "tests/critical/runtime/image_runtime_contract_test.go", + "kind": "exact", + "line": 21 + }, + { + "owner": "IMAGE-REMEDIATION", + "branch": "work/prc-image-remediation", + "path": "tests/critical/runtime/postgres_image_contract_test.go", + "display": "tests/critical/runtime/postgres_image_contract_test.go", + "kind": "exact", + "line": 21 + }, + { + "owner": "SECURITY-PROJECT-IDENTITY", + "branch": "work/prc-security-project-identity", + "path": "internal/proxy/identity.go", + "display": "internal/proxy/identity.go", + "kind": "exact", + "line": 22 + }, + { + "owner": "SECURITY-PROJECT-IDENTITY", + "branch": "work/prc-security-project-identity", + "path": "internal/proxy/identity_test.go", + "display": "internal/proxy/identity_test.go", + "kind": "exact", + "line": 22 + }, + { + "owner": "SECURITY-PROJECT-IDENTITY", + "branch": "work/prc-security-project-identity", + "path": "internal/handlers/engramcore/tools.go", + "display": "internal/handlers/engramcore/tools.go", + "kind": "exact", + "line": 22 + }, + { + "owner": "SECURITY-PROJECT-IDENTITY", + "branch": "work/prc-security-project-identity", + "path": "internal/handlers/engramcore/project_identity_v2_test.go", + "display": "internal/handlers/engramcore/project_identity_v2_test.go", + "kind": "exact", + "line": 22 + }, + { + "owner": "SECURITY-PROJECT-IDENTITY", + "branch": "work/prc-security-project-identity", + "path": "proto/engram/v1/engram.proto", + "display": "proto/engram/v1/engram.proto", + "kind": "exact", + "line": 22 + }, + { + "owner": "SECURITY-PROJECT-IDENTITY", + "branch": "work/prc-security-project-identity", + "path": "proto/engram/v1/engram.pb.go", + "display": "proto/engram/v1/engram.pb.go", + "kind": "exact", + "line": 22 + }, + { + "owner": "SECURITY-PROJECT-IDENTITY", + "branch": "work/prc-security-project-identity", + "path": "proto/engram/v1/engram_grpc.pb.go", + "display": "proto/engram/v1/engram_grpc.pb.go", + "kind": "exact", + "line": 22 + }, + { + "owner": "SECURITY-PROJECT-IDENTITY", + "branch": "work/prc-security-project-identity", + "path": "internal/grpcserver/server.go", + "display": "internal/grpcserver/server.go", + "kind": "exact", + "line": 22 + }, + { + "owner": "SECURITY-PROJECT-IDENTITY", + "branch": "work/prc-security-project-identity", + "path": "internal/grpcserver/project_identity_v2_test.go", + "display": "internal/grpcserver/project_identity_v2_test.go", + "kind": "exact", + "line": 22 + }, + { + "owner": "SECURITY-PROJECT-IDENTITY", + "branch": "work/prc-security-project-identity", + "path": "internal/db/gorm/project_store.go", + "display": "internal/db/gorm/project_store.go", + "kind": "exact", + "line": 22 + }, + { + "owner": "SECURITY-PROJECT-IDENTITY", + "branch": "work/prc-security-project-identity", + "path": "internal/db/gorm/project_store_test.go", + "display": "internal/db/gorm/project_store_test.go", + "kind": "exact", + "line": 22 + }, + { + "owner": "SECURITY-PROJECT-IDENTITY", + "branch": "work/prc-security-project-identity", + "path": "internal/worker/handlers_context.go", + "display": "internal/worker/handlers_context.go", + "kind": "exact", + "line": 22 + }, + { + "owner": "SECURITY-PROJECT-IDENTITY", + "branch": "work/prc-security-project-identity", + "path": "internal/worker/project_identity_v2_test.go", + "display": "internal/worker/project_identity_v2_test.go", + "kind": "exact", + "line": 22 + }, + { + "owner": "SECURITY-PROJECT-IDENTITY", + "branch": "work/prc-security-project-identity", + "path": "plugin/engram/hooks/lib.js", + "display": "plugin/engram/hooks/lib.js", + "kind": "exact", + "line": 22 + }, + { + "owner": "SECURITY-PROJECT-IDENTITY", + "branch": "work/prc-security-project-identity", + "path": "plugin/engram/hooks/lib.test.js", + "display": "plugin/engram/hooks/lib.test.js", + "kind": "exact", + "line": 22 + }, + { + "owner": "SECURITY-PROJECT-IDENTITY", + "branch": "work/prc-security-project-identity", + "path": "plugin/engram/hooks/project-identity-v2.test.js", + "display": "plugin/engram/hooks/project-identity-v2.test.js", + "kind": "exact", + "line": 22 + }, + { + "owner": "SECURITY-PROJECT-IDENTITY", + "branch": "work/prc-security-project-identity", + "path": "plugin/openclaw-engram/src/identity.ts", + "display": "plugin/openclaw-engram/src/identity.ts", + "kind": "exact", + "line": 22 + }, + { + "owner": "SECURITY-PROJECT-IDENTITY", + "branch": "work/prc-security-project-identity", + "path": "plugin/openclaw-engram/src/identity.test.ts", + "display": "plugin/openclaw-engram/src/identity.test.ts", + "kind": "exact", + "line": 22 + }, + { + "owner": "SECURITY-PROJECT-IDENTITY", + "branch": "work/prc-security-project-identity", + "path": "docs/arch/architecture.md", + "display": "docs/arch/architecture.md", + "kind": "exact", + "line": 22 + }, + { + "owner": "OPENCLAW-RELEASE", + "branch": "work/prc-openclaw-release", + "path": "plugin/openclaw-engram/.gitignore", + "display": "plugin/openclaw-engram/.gitignore", + "kind": "exact", + "line": 23 + }, + { + "owner": "OPENCLAW-RELEASE", + "branch": "work/prc-openclaw-release", + "path": "plugin/openclaw-engram/package.json", + "display": "plugin/openclaw-engram/package.json", + "kind": "exact", + "line": 23 + }, + { + "owner": "OPENCLAW-RELEASE", + "branch": "work/prc-openclaw-release", + "path": "plugin/openclaw-engram/package-lock.json", + "display": "plugin/openclaw-engram/package-lock.json", + "kind": "exact", + "line": 23 + }, + { + "owner": "OPENCLAW-RELEASE", + "branch": "work/prc-openclaw-release", + "path": "plugin/openclaw-engram/openclaw.plugin.json", + "display": "plugin/openclaw-engram/openclaw.plugin.json", + "kind": "exact", + "line": 23 + }, + { + "owner": "OPENCLAW-RELEASE", + "branch": "work/prc-openclaw-release", + "path": "plugin/openclaw-engram/README.md", + "display": "plugin/openclaw-engram/README.md", + "kind": "exact", + "line": 23 + }, + { + "owner": "OPENCLAW-RELEASE", + "branch": "work/prc-openclaw-release", + "path": ".github/workflows/plugin-publish.yml", + "display": ".github/workflows/plugin-publish.yml", + "kind": "exact", + "line": 23 + }, + { + "owner": "OPENCLAW-RELEASE", + "branch": "work/prc-openclaw-release", + "path": "docs/RELEASE-PROTOCOL.md", + "display": "docs/RELEASE-PROTOCOL.md", + "kind": "exact", + "line": 23 + }, + { + "owner": "UPDATE-LIFECYCLE", + "branch": "work/prc-security-updater", + "path": "internal/update/update.go", + "display": "internal/update/update.go", + "kind": "exact", + "line": 24 + }, + { + "owner": "UPDATE-LIFECYCLE", + "branch": "work/prc-security-updater", + "path": "internal/update/update_test.go", + "display": "internal/update/update_test.go", + "kind": "exact", + "line": 24 + }, + { + "owner": "UPDATE-LIFECYCLE", + "branch": "work/prc-security-updater", + "path": "internal/worker/handlers_update.go", + "display": "internal/worker/handlers_update.go", + "kind": "exact", + "line": 24 + }, + { + "owner": "UPDATE-LIFECYCLE", + "branch": "work/prc-security-updater", + "path": "internal/worker/handlers_update_test.go", + "display": "internal/worker/handlers_update_test.go", + "kind": "exact", + "line": 24 + }, + { + "owner": "UPDATE-LIFECYCLE", + "branch": "work/prc-security-updater", + "path": "scripts/install.sh", + "display": "scripts/install.sh", + "kind": "exact", + "line": 24 + }, + { + "owner": "UPDATE-LIFECYCLE", + "branch": "work/prc-security-updater", + "path": "scripts/install.ps1", + "display": "scripts/install.ps1", + "kind": "exact", + "line": 24 + }, + { + "owner": "UPDATE-LIFECYCLE", + "branch": "work/prc-security-updater", + "path": ".goreleaser.yaml", + "display": ".goreleaser.yaml", + "kind": "exact", + "line": 24 + }, + { + "owner": "UPDATE-LIFECYCLE", + "branch": "work/prc-security-updater", + "path": ".github/workflows/release.yaml", + "display": ".github/workflows/release.yaml", + "kind": "exact", + "line": 24 + }, + { + "owner": "UPDATE-LIFECYCLE", + "branch": "work/prc-security-updater", + "path": "plugin/engram/hooks/hook-cli.test.js", + "display": "plugin/engram/hooks/hook-cli.test.js", + "kind": "exact", + "line": 24 + }, + { + "owner": "DOCUMENT-INGEST-PUBLIC-TRUTH", + "branch": "work/prc-document-ingest-public-truth", + "path": "internal/mcp/server.go", + "display": "internal/mcp/server.go", + "kind": "exact", + "line": 26 + }, + { + "owner": "DOCUMENT-INGEST-PUBLIC-TRUTH", + "branch": "work/prc-document-ingest-public-truth", + "path": "internal/mcp/ingest_document_description_test.go", + "display": "internal/mcp/ingest_document_description_test.go", + "kind": "exact", + "line": 26 + }, + { + "owner": "MCP-STRUCTURED-INPUT-VALIDATION", + "branch": "work/prc-mcp-structured-input-validation", + "path": "internal/mcp/coerce.go", + "display": "internal/mcp/coerce.go", + "kind": "exact", + "line": 28 + }, + { + "owner": "MCP-STRUCTURED-INPUT-VALIDATION", + "branch": "work/prc-mcp-structured-input-validation", + "path": "internal/mcp/coerce_test.go", + "display": "internal/mcp/coerce_test.go", + "kind": "exact", + "line": 28 + }, + { + "owner": "MCP-STRUCTURED-INPUT-VALIDATION", + "branch": "work/prc-mcp-structured-input-validation", + "path": "internal/mcp/tools_candidates.go", + "display": "internal/mcp/tools_candidates.go", + "kind": "exact", + "line": 28 + }, + { + "owner": "MCP-STRUCTURED-INPUT-VALIDATION", + "branch": "work/prc-mcp-structured-input-validation", + "path": "internal/mcp/tools_candidates_test.go", + "display": "internal/mcp/tools_candidates_test.go", + "kind": "exact", + "line": 28 + }, + { + "owner": "MCP-STRUCTURED-INPUT-VALIDATION", + "branch": "work/prc-mcp-structured-input-validation", + "path": "internal/mcp/tools_memory.go", + "display": "internal/mcp/tools_memory.go", + "kind": "exact", + "line": 28 + }, + { + "owner": "MCP-STRUCTURED-INPUT-VALIDATION", + "branch": "work/prc-mcp-structured-input-validation", + "path": "internal/mcp/tools_memory_edit_test.go", + "display": "internal/mcp/tools_memory_edit_test.go", + "kind": "exact", + "line": 28 + }, + { + "owner": "MCP-STRUCTURED-INPUT-VALIDATION", + "branch": "work/prc-mcp-structured-input-validation", + "path": "internal/mcp/tools_memory_significance.go", + "display": "internal/mcp/tools_memory_significance.go", + "kind": "exact", + "line": 28 + }, + { + "owner": "MCP-STRUCTURED-INPUT-VALIDATION", + "branch": "work/prc-mcp-structured-input-validation", + "path": "internal/mcp/tools_memory_significance_test.go", + "display": "internal/mcp/tools_memory_significance_test.go", + "kind": "exact", + "line": 28 + }, + { + "owner": "MCP-STRUCTURED-INPUT-VALIDATION", + "branch": "work/prc-mcp-structured-input-validation", + "path": "internal/mcp/tools_store_consolidated.go", + "display": "internal/mcp/tools_store_consolidated.go", + "kind": "exact", + "line": 28 + }, + { + "owner": "MCP-STRUCTURED-INPUT-VALIDATION", + "branch": "work/prc-mcp-structured-input-validation", + "path": "internal/mcp/tools_settings.go", + "display": "internal/mcp/tools_settings.go", + "kind": "exact", + "line": 28 + }, + { + "owner": "MCP-STRUCTURED-INPUT-VALIDATION", + "branch": "work/prc-mcp-structured-input-validation", + "path": "internal/mcp/tools_settings_test.go", + "display": "internal/mcp/tools_settings_test.go", + "kind": "exact", + "line": 28 + }, + { + "owner": "MCP-STRUCTURED-INPUT-VALIDATION", + "branch": "work/prc-mcp-structured-input-validation", + "path": "internal/mcp/tools_documents_v2.go", + "display": "internal/mcp/tools_documents_v2.go", + "kind": "exact", + "line": 28 + }, + { + "owner": "MCP-STRUCTURED-INPUT-VALIDATION", + "branch": "work/prc-mcp-structured-input-validation", + "path": "internal/mcp/tools_rule_governance.go", + "display": "internal/mcp/tools_rule_governance.go", + "kind": "exact", + "line": 28 + }, + { + "owner": "MCP-STRUCTURED-INPUT-VALIDATION", + "branch": "work/prc-mcp-structured-input-validation", + "path": "internal/mcp/tools_rule_governance_test.go", + "display": "internal/mcp/tools_rule_governance_test.go", + "kind": "exact", + "line": 28 + }, + { + "owner": "MCP-STRUCTURED-INPUT-VALIDATION", + "branch": "work/prc-mcp-structured-input-validation", + "path": "internal/mcp/structured_input_validation_test.go", + "display": "internal/mcp/structured_input_validation_test.go", + "kind": "exact", + "line": 28 + }, + { + "owner": "T007-COMPAT-DEMOLITION-CLASSIFICATION", + "branch": "work/prc-t007-compat-classification", + "path": "internal/mcp/store_memory_compat_t007_test.go", + "display": "internal/mcp/store_memory_compat_t007_test.go", + "kind": "exact", + "line": 30 + }, + { + "owner": "DB-RULES-ISOLATION", + "branch": "work/prc-db-rules-isolation", + "path": "internal/worker/handlers_rules_test.go", + "display": "internal/worker/handlers_rules_test.go", + "kind": "exact", + "line": 31 + }, + { + "owner": "DB-RULES-ISOLATION", + "branch": "work/prc-db-rules-isolation", + "path": "scripts/production-gates/run-db-rules-isolation.ps1", + "display": "scripts/production-gates/run-db-rules-isolation.ps1", + "kind": "exact", + "line": 31 + }, + { + "owner": "COVERAGE-WORKER", + "branch": "work/prc-coverage-worker", + "path": "internal/worker/production_readiness_coverage_test.go", + "display": "internal/worker/production_readiness_coverage_test.go", + "kind": "exact", + "line": 32 + }, + { + "owner": "COVERAGE-MCP", + "branch": "work/prc-coverage-mcp", + "path": "internal/mcp/production_readiness_coverage_test.go", + "display": "internal/mcp/production_readiness_coverage_test.go", + "kind": "exact", + "line": 33 + }, + { + "owner": "COVERAGE-GORM", + "branch": "work/prc-coverage-gorm", + "path": "internal/db/gorm/production_readiness_coverage_test.go", + "display": "internal/db/gorm/production_readiness_coverage_test.go", + "kind": "exact", + "line": 34 + }, + { + "owner": "COVERAGE-LOOM", + "branch": "work/prc-coverage-loom", + "path": "internal/handlers/loom/production_readiness_coverage_test.go", + "display": "internal/handlers/loom/production_readiness_coverage_test.go", + "kind": "exact", + "line": 35 + }, + { + "owner": "DEPLOYMENT-ROLLBACK", + "branch": "work/prc-deployment-rollback", + "path": "docker-compose.yml", + "display": "docker-compose.yml", + "kind": "exact", + "line": 36 + }, + { + "owner": "DEPLOYMENT-ROLLBACK", + "branch": "work/prc-deployment-rollback", + "path": "deploy/docker-compose.runtime.yml", + "display": "deploy/docker-compose.runtime.yml", + "kind": "exact", + "line": 36 + }, + { + "owner": "DEPLOYMENT-ROLLBACK", + "branch": "work/prc-deployment-rollback", + "path": "deploy/docker-compose.operator-web-standalone.yml", + "display": "deploy/docker-compose.operator-web-standalone.yml", + "kind": "exact", + "line": 36 + }, + { + "owner": "DEPLOYMENT-ROLLBACK", + "branch": "work/prc-deployment-rollback", + "path": "deploy/entrypoint-server.sh", + "display": "deploy/entrypoint-server.sh", + "kind": "exact", + "line": 36 + }, + { + "owner": "DEPLOYMENT-ROLLBACK", + "branch": "work/prc-deployment-rollback", + "path": "deploy/healthcheck-server.sh", + "display": "deploy/healthcheck-server.sh", + "kind": "exact", + "line": 36 + }, + { + "owner": "DEPLOYMENT-ROLLBACK", + "branch": "work/prc-deployment-rollback", + "path": "deploy/verify-rollback.ps1", + "display": "deploy/verify-rollback.ps1", + "kind": "exact", + "line": 36 + }, + { + "owner": "DEPLOYMENT-ROLLBACK", + "branch": "work/prc-deployment-rollback", + "path": "deploy/verify-runtime-policy.ps1", + "display": "deploy/verify-runtime-policy.ps1", + "kind": "exact", + "line": 36 + }, + { + "owner": "RECOVERY-DATA", + "branch": "work/prc-recovery-data", + "path": "scripts/recovery/start-disposable-postgres.ps1", + "display": "scripts/recovery/start-disposable-postgres.ps1", + "kind": "exact", + "line": 37 + }, + { + "owner": "RECOVERY-DATA", + "branch": "work/prc-recovery-data", + "path": "scripts/recovery/verify-postgres-roundtrip.ps1", + "display": "scripts/recovery/verify-postgres-roundtrip.ps1", + "kind": "exact", + "line": 37 + }, + { + "owner": "RECOVERY-DATA", + "branch": "work/prc-recovery-data", + "path": "scripts/recovery/seed-recovery-fixture.ps1", + "display": "scripts/recovery/seed-recovery-fixture.ps1", + "kind": "exact", + "line": 37 + }, + { + "owner": "RECOVERY-DATA", + "branch": "work/prc-recovery-data", + "path": "scripts/recovery/assert-recovery-fixture.ps1", + "display": "scripts/recovery/assert-recovery-fixture.ps1", + "kind": "exact", + "line": 37 + }, + { + "owner": "RECOVERY-DATA", + "branch": "work/prc-recovery-data", + "path": "tests/critical/recovery/postgres_roundtrip_test.go", + "display": "tests/critical/recovery/postgres_roundtrip_test.go", + "kind": "exact", + "line": 37 + }, + { + "owner": "OBSERVABILITY-OTLP", + "branch": "work/prc-observability-otlp", + "path": "internal/module/obs/logging.go", + "display": "internal/module/obs/logging.go", + "kind": "exact", + "line": 38 + }, + { + "owner": "OBSERVABILITY-OTLP", + "branch": "work/prc-observability-otlp", + "path": "internal/module/obs/logging_test.go", + "display": "internal/module/obs/logging_test.go", + "kind": "exact", + "line": 38 + }, + { + "owner": "OBSERVABILITY-OTLP", + "branch": "work/prc-observability-otlp", + "path": "internal/module/obs/meter.go", + "display": "internal/module/obs/meter.go", + "kind": "exact", + "line": 38 + }, + { + "owner": "OBSERVABILITY-OTLP", + "branch": "work/prc-observability-otlp", + "path": "internal/module/obs/meter_test.go", + "display": "internal/module/obs/meter_test.go", + "kind": "exact", + "line": 38 + }, + { + "owner": "OBSERVABILITY-OTLP", + "branch": "work/prc-observability-otlp", + "path": "internal/module/obs/metrics.go", + "display": "internal/module/obs/metrics.go", + "kind": "exact", + "line": 38 + }, + { + "owner": "OBSERVABILITY-OTLP", + "branch": "work/prc-observability-otlp", + "path": "internal/module/obs/metrics_test.go", + "display": "internal/module/obs/metrics_test.go", + "kind": "exact", + "line": 38 + }, + { + "owner": "OBSERVABILITY-OTLP", + "branch": "work/prc-observability-otlp", + "path": "cmd/engram-server/main.go", + "display": "cmd/engram-server/main.go", + "kind": "exact", + "line": 38 + }, + { + "owner": "OBSERVABILITY-OTLP", + "branch": "work/prc-observability-otlp", + "path": "cmd/engram-server/main_test.go", + "display": "cmd/engram-server/main_test.go", + "kind": "exact", + "line": 38 + }, + { + "owner": "OBSERVABILITY-OTLP", + "branch": "work/prc-observability-otlp", + "path": "scripts/production-smoke/verify-otlp.ps1", + "display": "scripts/production-smoke/verify-otlp.ps1", + "kind": "exact", + "line": 38 + }, + { + "owner": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "path": "internal/scope/domain_policy.go", + "display": "internal/scope/domain_policy.go", + "kind": "exact", + "line": 39 + }, + { + "owner": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "path": "internal/scope/domain_policy_test.go", + "display": "internal/scope/domain_policy_test.go", + "kind": "exact", + "line": 39 + }, + { + "owner": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "path": "internal/scope/filter.go", + "display": "internal/scope/filter.go", + "kind": "exact", + "line": 39 + }, + { + "owner": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "path": "internal/scope/filter_test.go", + "display": "internal/scope/filter_test.go", + "kind": "exact", + "line": 39 + }, + { + "owner": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "path": "internal/scope/filter_principal_test.go", + "display": "internal/scope/filter_principal_test.go", + "kind": "exact", + "line": 39 + }, + { + "owner": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "path": "internal/scope/filter_w4_test.go", + "display": "internal/scope/filter_w4_test.go", + "kind": "exact", + "line": 39 + }, + { + "owner": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "path": "internal/principalmemory/access_policy.go", + "display": "internal/principalmemory/access_policy.go", + "kind": "exact", + "line": 39 + }, + { + "owner": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "path": "internal/principalmemory/access_policy_test.go", + "display": "internal/principalmemory/access_policy_test.go", + "kind": "exact", + "line": 39 + }, + { + "owner": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "path": "internal/principalmemory/domain_registry.go", + "display": "internal/principalmemory/domain_registry.go", + "kind": "exact", + "line": 39 + }, + { + "owner": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "path": "internal/principalmemory/domain_registry_test.go", + "display": "internal/principalmemory/domain_registry_test.go", + "kind": "exact", + "line": 39 + }, + { + "owner": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "path": "internal/principalmemory/query_service.go", + "display": "internal/principalmemory/query_service.go", + "kind": "exact", + "line": 39 + }, + { + "owner": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "path": "internal/principalmemory/query_service_test.go", + "display": "internal/principalmemory/query_service_test.go", + "kind": "exact", + "line": 39 + }, + { + "owner": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "path": "internal/mcp/tools_principal_memory.go", + "display": "internal/mcp/tools_principal_memory.go", + "kind": "exact", + "line": 39 + }, + { + "owner": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "path": "internal/mcp/tools_principal_memory_test.go", + "display": "internal/mcp/tools_principal_memory_test.go", + "kind": "exact", + "line": 39 + }, + { + "owner": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "path": "internal/mcp/tools_recall_principal_test.go", + "display": "internal/mcp/tools_recall_principal_test.go", + "kind": "exact", + "line": 39 + }, + { + "owner": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "path": "internal/mcp/recall_visibility_backfill_test.go", + "display": "internal/mcp/recall_visibility_backfill_test.go", + "kind": "exact", + "line": 39 + }, + { + "owner": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "path": "internal/mcp/store_memory_principal_test.go", + "display": "internal/mcp/store_memory_principal_test.go", + "kind": "exact", + "line": 39 + }, + { + "owner": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "path": "internal/worker/handlers_principal_memory.go", + "display": "internal/worker/handlers_principal_memory.go", + "kind": "exact", + "line": 39 + }, + { + "owner": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "path": "internal/worker/handlers_principal_memory_test.go", + "display": "internal/worker/handlers_principal_memory_test.go", + "kind": "exact", + "line": 39 + }, + { + "owner": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "path": "internal/worker/scope_bypass_w4_test.go", + "display": "internal/worker/scope_bypass_w4_test.go", + "kind": "exact", + "line": 39 + }, + { + "owner": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "path": "internal/worker/retention.go", + "display": "internal/worker/retention.go", + "kind": "exact", + "line": 39 + }, + { + "owner": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "path": "internal/worker/retention_test.go", + "display": "internal/worker/retention_test.go", + "kind": "exact", + "line": 39 + }, + { + "owner": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "path": "internal/db/gorm/memory_store.go", + "display": "internal/db/gorm/memory_store.go", + "kind": "exact", + "line": 39 + }, + { + "owner": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "path": "internal/db/gorm/memory_store_principal_test.go", + "display": "internal/db/gorm/memory_store_principal_test.go", + "kind": "exact", + "line": 39 + }, + { + "owner": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "path": "internal/db/gorm/memory_store_principal_query_test.go", + "display": "internal/db/gorm/memory_store_principal_query_test.go", + "kind": "exact", + "line": 39 + }, + { + "owner": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "path": "internal/db/gorm/purge_store_test.go", + "display": "internal/db/gorm/purge_store_test.go", + "kind": "exact", + "line": 39 + }, + { + "owner": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "path": "tests/critical/data_boundaries/principal_project_retention_test.go", + "display": "tests/critical/data_boundaries/principal_project_retention_test.go", + "kind": "exact", + "line": 39 + }, + { + "owner": "CRITICAL-HARNESS", + "branch": "work/prc-critical-harness", + "path": "tests/critical/customer_mode/customer_mode_test.go", + "display": "tests/critical/customer_mode/customer_mode_test.go", + "kind": "exact", + "line": 40 + }, + { + "owner": "CRITICAL-HARNESS", + "branch": "work/prc-critical-harness", + "path": "tests/critical/customer_mode/compatibility_test.go", + "display": "tests/critical/customer_mode/compatibility_test.go", + "kind": "exact", + "line": 40 + }, + { + "owner": "CRITICAL-HARNESS", + "branch": "work/prc-critical-harness", + "path": "tests/critical/customer_mode/cross_agent_test.go", + "display": "tests/critical/customer_mode/cross_agent_test.go", + "kind": "exact", + "line": 40 + }, + { + "owner": "CRITICAL-HARNESS", + "branch": "work/prc-critical-harness", + "path": "scripts/production-smoke/customer/run-customer-mode.ps1", + "display": "scripts/production-smoke/customer/run-customer-mode.ps1", + "kind": "exact", + "line": 40 + }, + { + "owner": "CRITICAL-HARNESS", + "branch": "work/prc-critical-harness", + "path": "scripts/production-smoke/customer/run-client-compatibility.ps1", + "display": "scripts/production-smoke/customer/run-client-compatibility.ps1", + "kind": "exact", + "line": 40 + }, + { + "owner": "CRITICAL-HARNESS", + "branch": "work/prc-critical-harness", + "path": "scripts/production-smoke/customer/run-cross-agent.ps1", + "display": "scripts/production-smoke/customer/run-cross-agent.ps1", + "kind": "exact", + "line": 40 + }, + { + "owner": "CRITICAL-HARNESS", + "branch": "work/prc-critical-harness", + "path": "scripts/production-smoke/customer/run-diagnostic-matrix.ps1", + "display": "scripts/production-smoke/customer/run-diagnostic-matrix.ps1", + "kind": "exact", + "line": 40 + }, + { + "owner": "CRITICAL-HARNESS", + "branch": "work/prc-critical-harness", + "path": "scripts/production-smoke/customer/assert-product-works.ps1", + "display": "scripts/production-smoke/customer/assert-product-works.ps1", + "kind": "exact", + "line": 40 + }, + { + "owner": "CORE-PUBLIC-TRUTH", + "branch": "work/prc-core-public-truth", + "path": "README.md", + "display": "README.md", + "kind": "exact", + "line": 41 + }, + { + "owner": "CORE-PUBLIC-TRUTH", + "branch": "work/prc-core-public-truth", + "path": "README.ru.md", + "display": "README.ru.md", + "kind": "exact", + "line": 41 + }, + { + "owner": "CORE-PUBLIC-TRUTH", + "branch": "work/prc-core-public-truth", + "path": "README.zh.md", + "display": "README.zh.md", + "kind": "exact", + "line": 41 + }, + { + "owner": "CORE-PUBLIC-TRUTH", + "branch": "work/prc-core-public-truth", + "path": "CONTRIBUTING.md", + "display": "CONTRIBUTING.md", + "kind": "exact", + "line": 41 + }, + { + "owner": "CORE-PUBLIC-TRUTH", + "branch": "work/prc-core-public-truth", + "path": "CHANGELOG.md", + "display": "CHANGELOG.md", + "kind": "exact", + "line": 41 + }, + { + "owner": "CORE-PUBLIC-TRUTH", + "branch": "work/prc-core-public-truth", + "path": "Makefile", + "display": "Makefile", + "kind": "exact", + "line": 41 + }, + { + "owner": "CORE-PUBLIC-TRUTH", + "branch": "work/prc-core-public-truth", + "path": ".env.example", + "display": ".env.example", + "kind": "exact", + "line": 41 + }, + { + "owner": "CORE-PUBLIC-TRUTH", + "branch": "work/prc-core-public-truth", + "path": "docs/DEPLOYMENT.md", + "display": "docs/DEPLOYMENT.md", + "kind": "exact", + "line": 41 + }, + { + "owner": "CORE-PUBLIC-TRUTH", + "branch": "work/prc-core-public-truth", + "path": "docs/MIGRATION.md", + "display": "docs/MIGRATION.md", + "kind": "exact", + "line": 41 + }, + { + "owner": "CORE-PUBLIC-TRUTH", + "branch": "work/prc-core-public-truth", + "path": "docs/PRODUCTION-TESTING-PLAYBOOK.md", + "display": "docs/PRODUCTION-TESTING-PLAYBOOK.md", + "kind": "exact", + "line": 41 + }, + { + "owner": "CORE-PUBLIC-TRUTH", + "branch": "work/prc-core-public-truth", + "path": "docs/arch/CONFIGURATION.md", + "display": "docs/arch/CONFIGURATION.md", + "kind": "exact", + "line": 41 + }, + { + "owner": "CORE-PUBLIC-TRUTH", + "branch": "work/prc-core-public-truth", + "path": "docs/arch/QUICKSTART.md", + "display": "docs/arch/QUICKSTART.md", + "kind": "exact", + "line": 41 + }, + { + "owner": "CORE-PUBLIC-TRUTH", + "branch": "work/prc-core-public-truth", + "path": "docs/release-notes/v6.43.0.md", + "display": "docs/release-notes/v6.43.0.md", + "kind": "exact", + "line": 41 + }, + { + "owner": "CORE-PUBLIC-TRUTH", + "branch": "work/prc-core-public-truth", + "path": "docs/public/engram.jpg", + "display": "docs/public/engram.jpg", + "kind": "exact", + "line": 41 + }, + { + "owner": "CORE-PUBLIC-TRUTH", + "branch": "work/prc-core-public-truth", + "path": "plugin/engram/commands/setup.md", + "display": "plugin/engram/commands/setup.md", + "kind": "exact", + "line": 41 + }, + { + "owner": "CORE-PUBLIC-TRUTH", + "branch": "work/prc-core-public-truth", + "path": "plugin/engram/commands/doctor.md", + "display": "plugin/engram/commands/doctor.md", + "kind": "exact", + "line": 41 + }, + { + "owner": "FINAL-PUBLIC-TRUTH", + "branch": "work/prc-final-public-truth", + "path": "README.md", + "display": "README.md", + "kind": "exact", + "line": 42 + }, + { + "owner": "FINAL-PUBLIC-TRUTH", + "branch": "work/prc-final-public-truth", + "path": "README.ru.md", + "display": "README.ru.md", + "kind": "exact", + "line": 42 + }, + { + "owner": "FINAL-PUBLIC-TRUTH", + "branch": "work/prc-final-public-truth", + "path": "README.zh.md", + "display": "README.zh.md", + "kind": "exact", + "line": 42 + }, + { + "owner": "FINAL-PUBLIC-TRUTH", + "branch": "work/prc-final-public-truth", + "path": "CONTRIBUTING.md", + "display": "CONTRIBUTING.md", + "kind": "exact", + "line": 42 + }, + { + "owner": "FINAL-PUBLIC-TRUTH", + "branch": "work/prc-final-public-truth", + "path": "CHANGELOG.md", + "display": "CHANGELOG.md", + "kind": "exact", + "line": 42 + }, + { + "owner": "FINAL-PUBLIC-TRUTH", + "branch": "work/prc-final-public-truth", + "path": "Makefile", + "display": "Makefile", + "kind": "exact", + "line": 42 + }, + { + "owner": "FINAL-PUBLIC-TRUTH", + "branch": "work/prc-final-public-truth", + "path": ".env.example", + "display": ".env.example", + "kind": "exact", + "line": 42 + }, + { + "owner": "FINAL-PUBLIC-TRUTH", + "branch": "work/prc-final-public-truth", + "path": "docs/DEPLOYMENT.md", + "display": "docs/DEPLOYMENT.md", + "kind": "exact", + "line": 42 + }, + { + "owner": "FINAL-PUBLIC-TRUTH", + "branch": "work/prc-final-public-truth", + "path": "docs/MIGRATION.md", + "display": "docs/MIGRATION.md", + "kind": "exact", + "line": 42 + }, + { + "owner": "FINAL-PUBLIC-TRUTH", + "branch": "work/prc-final-public-truth", + "path": "docs/PRODUCTION-TESTING-PLAYBOOK.md", + "display": "docs/PRODUCTION-TESTING-PLAYBOOK.md", + "kind": "exact", + "line": 42 + }, + { + "owner": "FINAL-PUBLIC-TRUTH", + "branch": "work/prc-final-public-truth", + "path": "docs/arch/CONFIGURATION.md", + "display": "docs/arch/CONFIGURATION.md", + "kind": "exact", + "line": 42 + }, + { + "owner": "FINAL-PUBLIC-TRUTH", + "branch": "work/prc-final-public-truth", + "path": "docs/arch/QUICKSTART.md", + "display": "docs/arch/QUICKSTART.md", + "kind": "exact", + "line": 42 + }, + { + "owner": "FINAL-PUBLIC-TRUTH", + "branch": "work/prc-final-public-truth", + "path": "docs/public/engram.jpg", + "display": "docs/public/engram.jpg", + "kind": "exact", + "line": 42 + }, + { + "owner": "FINAL-PUBLIC-TRUTH", + "branch": "work/prc-final-public-truth", + "path": "plugin/engram/commands/setup.md", + "display": "plugin/engram/commands/setup.md", + "kind": "exact", + "line": 42 + }, + { + "owner": "FINAL-PUBLIC-TRUTH", + "branch": "work/prc-final-public-truth", + "path": "plugin/engram/commands/doctor.md", + "display": "plugin/engram/commands/doctor.md", + "kind": "exact", + "line": 42 + }, + { + "owner": "LAUNCHER-FIRST-RUN", + "branch": "work/prc-launcher-first-run", + "path": "cmd/engram/main.go", + "display": "cmd/engram/main.go", + "kind": "exact", + "line": 43 + }, + { + "owner": "LAUNCHER-FIRST-RUN", + "branch": "work/prc-launcher-first-run", + "path": "cmd/engram/main_test.go", + "display": "cmd/engram/main_test.go", + "kind": "exact", + "line": 43 + }, + { + "owner": "LAUNCHER-FIRST-RUN", + "branch": "work/prc-launcher-first-run", + "path": "cmd/engram/wiring.go", + "display": "cmd/engram/wiring.go", + "kind": "exact", + "line": 43 + }, + { + "owner": "LAUNCHER-FIRST-RUN", + "branch": "work/prc-launcher-first-run", + "path": "cmd/engram/exec_windows.go", + "display": "cmd/engram/exec_windows.go", + "kind": "exact", + "line": 43 + }, + { + "owner": "LAUNCHER-FIRST-RUN", + "branch": "work/prc-launcher-first-run", + "path": "cmd/engram/exec_unix.go", + "display": "cmd/engram/exec_unix.go", + "kind": "exact", + "line": 43 + }, + { + "owner": "LAUNCHER-FIRST-RUN", + "branch": "work/prc-launcher-first-run", + "path": "plugin/engram/.engram-project", + "display": "plugin/engram/.engram-project", + "kind": "exact", + "line": 43 + }, + { + "owner": "LAUNCHER-FIRST-RUN", + "branch": "work/prc-launcher-first-run", + "path": "plugin/engram/scripts/run-engram.js", + "display": "plugin/engram/scripts/run-engram.js", + "kind": "exact", + "line": 43 + }, + { + "owner": "LAUNCHER-FIRST-RUN", + "branch": "work/prc-launcher-first-run", + "path": "plugin/engram/scripts/run-engram.test.js", + "display": "plugin/engram/scripts/run-engram.test.js", + "kind": "exact", + "line": 43 + }, + { + "owner": "LAUNCHER-FIRST-RUN", + "branch": "work/prc-launcher-first-run", + "path": "plugin/engram/scripts/ensure-binary.js", + "display": "plugin/engram/scripts/ensure-binary.js", + "kind": "exact", + "line": 43 + }, + { + "owner": "LAUNCHER-FIRST-RUN", + "branch": "work/prc-launcher-first-run", + "path": "plugin/engram/scripts/ensure-binary.test.js", + "display": "plugin/engram/scripts/ensure-binary.test.js", + "kind": "exact", + "line": 43 + }, + { + "owner": "OC-INTEGRATION", + "branch": "work/prc-operator-console-integration", + "path": "apps/operator-console", + "display": "apps/operator-console/**", + "kind": "prefix", + "line": 44 + }, + { + "owner": "S4B-CONTRACT", + "branch": "work/prc-s4b-contract", + "path": ".agent/specs/engram-v7-directives-surfacing", + "display": ".agent/specs/engram-v7-directives-surfacing/**", + "kind": "prefix", + "line": 45 + }, + { + "owner": "V7-S4B-BACKEND", + "branch": "work/prc-v7-s4b-backend", + "path": "internal/cognitive/s4bsurfacing", + "display": "internal/cognitive/s4bsurfacing/**", + "kind": "prefix", + "line": 46 + }, + { + "owner": "V7-CORE-CALLPATH", + "branch": "work/prc-v7-core-callpath", + "path": "internal/cognitive/core/event_bus.go", + "display": "internal/cognitive/core/event_bus.go", + "kind": "exact", + "line": 47 + }, + { + "owner": "V7-CORE-CALLPATH", + "branch": "work/prc-v7-core-callpath", + "path": "internal/cognitive/core/event_bus_test.go", + "display": "internal/cognitive/core/event_bus_test.go", + "kind": "exact", + "line": 47 + }, + { + "owner": "V7-CORE-CALLPATH", + "branch": "work/prc-v7-core-callpath", + "path": "internal/cognitive/core/hint_queue.go", + "display": "internal/cognitive/core/hint_queue.go", + "kind": "exact", + "line": 47 + }, + { + "owner": "V7-CORE-CALLPATH", + "branch": "work/prc-v7-core-callpath", + "path": "internal/cognitive/core/hint_queue_test.go", + "display": "internal/cognitive/core/hint_queue_test.go", + "kind": "exact", + "line": 47 + }, + { + "owner": "V7-CORE-CALLPATH", + "branch": "work/prc-v7-core-callpath", + "path": "internal/cognitive/s3ambient/queue.go", + "display": "internal/cognitive/s3ambient/queue.go", + "kind": "exact", + "line": 47 + }, + { + "owner": "V7-CORE-CALLPATH", + "branch": "work/prc-v7-core-callpath", + "path": "internal/cognitive/s3ambient/subsystem.go", + "display": "internal/cognitive/s3ambient/subsystem.go", + "kind": "exact", + "line": 47 + }, + { + "owner": "V7-RUNTIME-WIRING", + "branch": "work/prc-v7-runtime-wiring", + "path": "internal/worker/service.go", + "display": "internal/worker/service.go", + "kind": "exact", + "line": 48 + }, + { + "owner": "V7-RUNTIME-WIRING", + "branch": "work/prc-v7-runtime-wiring", + "path": "internal/worker/service_v7_integration_test.go", + "display": "internal/worker/service_v7_integration_test.go", + "kind": "exact", + "line": 48 + }, + { + "owner": "V7-RUNTIME-WIRING", + "branch": "work/prc-v7-runtime-wiring", + "path": "internal/worker/handlers_stats_v7.go", + "display": "internal/worker/handlers_stats_v7.go", + "kind": "exact", + "line": 48 + }, + { + "owner": "V7-RUNTIME-WIRING", + "branch": "work/prc-v7-runtime-wiring", + "path": "internal/worker/handlers_stats_v7_test.go", + "display": "internal/worker/handlers_stats_v7_test.go", + "kind": "exact", + "line": 48 + }, + { + "owner": "V7-TELEMETRY-WIRING", + "branch": "work/prc-v7-telemetry-wiring", + "path": "internal/cognitive/s5/metrics.go", + "display": "internal/cognitive/s5/metrics.go", + "kind": "exact", + "line": 49 + }, + { + "owner": "V7-TELEMETRY-WIRING", + "branch": "work/prc-v7-telemetry-wiring", + "path": "internal/cognitive/s5/provider.go", + "display": "internal/cognitive/s5/provider.go", + "kind": "exact", + "line": 49 + }, + { + "owner": "V7-TELEMETRY-WIRING", + "branch": "work/prc-v7-telemetry-wiring", + "path": "internal/cognitive/s5/provider_test.go", + "display": "internal/cognitive/s5/provider_test.go", + "kind": "exact", + "line": 49 + }, + { + "owner": "V7-TELEMETRY-WIRING", + "branch": "work/prc-v7-telemetry-wiring", + "path": "internal/cognitive/s5/source_adapter.go", + "display": "internal/cognitive/s5/source_adapter.go", + "kind": "exact", + "line": 49 + }, + { + "owner": "V7-TELEMETRY-WIRING", + "branch": "work/prc-v7-telemetry-wiring", + "path": "internal/cognitive/s5/source_adapter_test.go", + "display": "internal/cognitive/s5/source_adapter_test.go", + "kind": "exact", + "line": 49 + }, + { + "owner": "ROADMAP-RECONCILIATION", + "branch": "work/prc-roadmap-reconciliation", + "path": ".agent/specs/roadmap.md", + "display": ".agent/specs/roadmap.md", + "kind": "exact", + "line": 50 + }, + { + "owner": "ROADMAP-RECONCILIATION", + "branch": "work/prc-roadmap-reconciliation", + "path": ".agent/specs/ui-surface-ledger.md", + "display": ".agent/specs/ui-surface-ledger.md", + "kind": "exact", + "line": 50 + }, + { + "owner": "ROADMAP-RECONCILIATION", + "branch": "work/prc-roadmap-reconciliation", + "path": ".agent/specs/operator-console-production-integration", + "display": ".agent/specs/operator-console-production-integration/**", + "kind": "prefix", + "line": 50 + }, + { + "owner": "ROADMAP-RECONCILIATION", + "branch": "work/prc-roadmap-reconciliation", + "path": ".agent/specs/engram-v7-ambient/spec.md", + "display": ".agent/specs/engram-v7-ambient/spec.md", + "kind": "exact", + "line": 50 + }, + { + "owner": "ROADMAP-RECONCILIATION", + "branch": "work/prc-roadmap-reconciliation", + "path": ".agent/specs/engram-v7-ambient/plan.md", + "display": ".agent/specs/engram-v7-ambient/plan.md", + "kind": "exact", + "line": 50 + }, + { + "owner": "ROADMAP-RECONCILIATION", + "branch": "work/prc-roadmap-reconciliation", + "path": ".agent/specs/engram-v7-ambient/checklists/general.md", + "display": ".agent/specs/engram-v7-ambient/checklists/general.md", + "kind": "exact", + "line": 50 + }, + { + "owner": "ROADMAP-RECONCILIATION", + "branch": "work/prc-roadmap-reconciliation", + "path": ".agent/specs/engram-v7-ambient/changes/CR-001-initial-scope/change.md", + "display": ".agent/specs/engram-v7-ambient/changes/CR-001-initial-scope/change.md", + "kind": "exact", + "line": 50 + }, + { + "owner": "ROADMAP-RECONCILIATION", + "branch": "work/prc-roadmap-reconciliation", + "path": ".agent/specs/engram-v7-ambient/changes/CR-001-initial-scope/tasks.md", + "display": ".agent/specs/engram-v7-ambient/changes/CR-001-initial-scope/tasks.md", + "kind": "exact", + "line": 50 + }, + { + "owner": "NORTHSTAR-CI-A-CONTRACTS", + "branch": "work/prc-northstar-ci-a-contracts", + "path": ".agent/specs/engram-absorption/ci-a-dense-vector/spec.md", + "display": ".agent/specs/engram-absorption/ci-a-dense-vector/spec.md", + "kind": "exact", + "line": 51 + }, + { + "owner": "NORTHSTAR-CI-A-CONTRACTS", + "branch": "work/prc-northstar-ci-a-contracts", + "path": ".agent/specs/engram-absorption/ci-a-dense-vector/plan.md", + "display": ".agent/specs/engram-absorption/ci-a-dense-vector/plan.md", + "kind": "exact", + "line": 51 + }, + { + "owner": "NORTHSTAR-CI-A-CONTRACTS", + "branch": "work/prc-northstar-ci-a-contracts", + "path": ".agent/specs/engram-absorption/ci-a-dense-vector/checklists/general.md", + "display": ".agent/specs/engram-absorption/ci-a-dense-vector/checklists/general.md", + "kind": "exact", + "line": 51 + }, + { + "owner": "NORTHSTAR-CI-A-CONTRACTS", + "branch": "work/prc-northstar-ci-a-contracts", + "path": ".agent/specs/engram-absorption/ci-a-dense-vector/changes/CR-001-initial-scope/change.md", + "display": ".agent/specs/engram-absorption/ci-a-dense-vector/changes/CR-001-initial-scope/change.md", + "kind": "exact", + "line": 51 + }, + { + "owner": "NORTHSTAR-CI-A-CONTRACTS", + "branch": "work/prc-northstar-ci-a-contracts", + "path": ".agent/specs/engram-absorption/ci-a-dense-vector/changes/CR-001-initial-scope/tasks.md", + "display": ".agent/specs/engram-absorption/ci-a-dense-vector/changes/CR-001-initial-scope/tasks.md", + "kind": "exact", + "line": 51 + }, + { + "owner": "NORTHSTAR-CI-B-CONTRACTS", + "branch": "work/prc-northstar-ci-b-contracts", + "path": ".agent/specs/engram-absorption/ci-b-graph-watcher-context/spec.md", + "display": ".agent/specs/engram-absorption/ci-b-graph-watcher-context/spec.md", + "kind": "exact", + "line": 52 + }, + { + "owner": "NORTHSTAR-CI-B-CONTRACTS", + "branch": "work/prc-northstar-ci-b-contracts", + "path": ".agent/specs/engram-absorption/ci-b-graph-watcher-context/plan.md", + "display": ".agent/specs/engram-absorption/ci-b-graph-watcher-context/plan.md", + "kind": "exact", + "line": 52 + }, + { + "owner": "NORTHSTAR-CI-B-CONTRACTS", + "branch": "work/prc-northstar-ci-b-contracts", + "path": ".agent/specs/engram-absorption/ci-b-graph-watcher-context/checklists/general.md", + "display": ".agent/specs/engram-absorption/ci-b-graph-watcher-context/checklists/general.md", + "kind": "exact", + "line": 52 + }, + { + "owner": "NORTHSTAR-CI-B-CONTRACTS", + "branch": "work/prc-northstar-ci-b-contracts", + "path": ".agent/specs/engram-absorption/ci-b-graph-watcher-context/changes/CR-001-initial-scope/change.md", + "display": ".agent/specs/engram-absorption/ci-b-graph-watcher-context/changes/CR-001-initial-scope/change.md", + "kind": "exact", + "line": 52 + }, + { + "owner": "NORTHSTAR-CI-B-CONTRACTS", + "branch": "work/prc-northstar-ci-b-contracts", + "path": ".agent/specs/engram-absorption/ci-b-graph-watcher-context/changes/CR-001-initial-scope/tasks.md", + "display": ".agent/specs/engram-absorption/ci-b-graph-watcher-context/changes/CR-001-initial-scope/tasks.md", + "kind": "exact", + "line": 52 + }, + { + "owner": "NORTHSTAR-BOOK-CONTRACTS", + "branch": "work/prc-northstar-book-contracts", + "path": ".agent/specs/engram-absorption/book/prd.md", + "display": ".agent/specs/engram-absorption/book/prd.md", + "kind": "exact", + "line": 53 + }, + { + "owner": "NORTHSTAR-BOOK-CONTRACTS", + "branch": "work/prc-northstar-book-contracts", + "path": ".agent/specs/engram-absorption/book/spec.md", + "display": ".agent/specs/engram-absorption/book/spec.md", + "kind": "exact", + "line": 53 + }, + { + "owner": "NORTHSTAR-BOOK-CONTRACTS", + "branch": "work/prc-northstar-book-contracts", + "path": ".agent/specs/engram-absorption/book/plan.md", + "display": ".agent/specs/engram-absorption/book/plan.md", + "kind": "exact", + "line": 53 + }, + { + "owner": "NORTHSTAR-BOOK-CONTRACTS", + "branch": "work/prc-northstar-book-contracts", + "path": ".agent/specs/engram-absorption/book/checklists/general.md", + "display": ".agent/specs/engram-absorption/book/checklists/general.md", + "kind": "exact", + "line": 53 + }, + { + "owner": "NORTHSTAR-BOOK-CONTRACTS", + "branch": "work/prc-northstar-book-contracts", + "path": ".agent/specs/engram-absorption/book/changes/CR-001-initial-scope/change.md", + "display": ".agent/specs/engram-absorption/book/changes/CR-001-initial-scope/change.md", + "kind": "exact", + "line": 53 + }, + { + "owner": "NORTHSTAR-BOOK-CONTRACTS", + "branch": "work/prc-northstar-book-contracts", + "path": ".agent/specs/engram-absorption/book/changes/CR-001-initial-scope/tasks.md", + "display": ".agent/specs/engram-absorption/book/changes/CR-001-initial-scope/tasks.md", + "kind": "exact", + "line": 53 + }, + { + "owner": "NORTHSTAR-MEM-CONTRACTS", + "branch": "work/prc-northstar-mem-contracts", + "path": ".agent/specs/engram-absorption/mem-residual/spec.md", + "display": ".agent/specs/engram-absorption/mem-residual/spec.md", + "kind": "exact", + "line": 54 + }, + { + "owner": "NORTHSTAR-MEM-CONTRACTS", + "branch": "work/prc-northstar-mem-contracts", + "path": ".agent/specs/engram-absorption/mem-residual/plan.md", + "display": ".agent/specs/engram-absorption/mem-residual/plan.md", + "kind": "exact", + "line": 54 + }, + { + "owner": "NORTHSTAR-MEM-CONTRACTS", + "branch": "work/prc-northstar-mem-contracts", + "path": ".agent/specs/engram-absorption/mem-residual/checklists/general.md", + "display": ".agent/specs/engram-absorption/mem-residual/checklists/general.md", + "kind": "exact", + "line": 54 + }, + { + "owner": "NORTHSTAR-MEM-CONTRACTS", + "branch": "work/prc-northstar-mem-contracts", + "path": ".agent/specs/engram-absorption/mem-residual/changes/CR-001-initial-scope/change.md", + "display": ".agent/specs/engram-absorption/mem-residual/changes/CR-001-initial-scope/change.md", + "kind": "exact", + "line": 54 + }, + { + "owner": "NORTHSTAR-MEM-CONTRACTS", + "branch": "work/prc-northstar-mem-contracts", + "path": ".agent/specs/engram-absorption/mem-residual/changes/CR-001-initial-scope/tasks.md", + "display": ".agent/specs/engram-absorption/mem-residual/changes/CR-001-initial-scope/tasks.md", + "kind": "exact", + "line": 54 + }, + { + "owner": "NORTHSTAR-EFFECTIVENESS-CONTRACTS", + "branch": "work/prc-northstar-effectiveness-contracts", + "path": ".agent/specs/engram-effectiveness/production-ready-residual/spec.md", + "display": ".agent/specs/engram-effectiveness/production-ready-residual/spec.md", + "kind": "exact", + "line": 55 + }, + { + "owner": "NORTHSTAR-EFFECTIVENESS-CONTRACTS", + "branch": "work/prc-northstar-effectiveness-contracts", + "path": ".agent/specs/engram-effectiveness/production-ready-residual/plan.md", + "display": ".agent/specs/engram-effectiveness/production-ready-residual/plan.md", + "kind": "exact", + "line": 55 + }, + { + "owner": "NORTHSTAR-EFFECTIVENESS-CONTRACTS", + "branch": "work/prc-northstar-effectiveness-contracts", + "path": ".agent/specs/engram-effectiveness/production-ready-residual/checklists/general.md", + "display": ".agent/specs/engram-effectiveness/production-ready-residual/checklists/general.md", + "kind": "exact", + "line": 55 + }, + { + "owner": "NORTHSTAR-EFFECTIVENESS-CONTRACTS", + "branch": "work/prc-northstar-effectiveness-contracts", + "path": ".agent/specs/engram-effectiveness/production-ready-residual/changes/CR-001-initial-scope/change.md", + "display": ".agent/specs/engram-effectiveness/production-ready-residual/changes/CR-001-initial-scope/change.md", + "kind": "exact", + "line": 55 + }, + { + "owner": "NORTHSTAR-EFFECTIVENESS-CONTRACTS", + "branch": "work/prc-northstar-effectiveness-contracts", + "path": ".agent/specs/engram-effectiveness/production-ready-residual/changes/CR-001-initial-scope/tasks.md", + "display": ".agent/specs/engram-effectiveness/production-ready-residual/changes/CR-001-initial-scope/tasks.md", + "kind": "exact", + "line": 55 + }, + { + "owner": "NORTHSTAR-SETTINGS-CONTRACTS", + "branch": "work/prc-northstar-settings-contracts", + "path": ".agent/specs/settings-store/production-ready-residual/spec.md", + "display": ".agent/specs/settings-store/production-ready-residual/spec.md", + "kind": "exact", + "line": 56 + }, + { + "owner": "NORTHSTAR-SETTINGS-CONTRACTS", + "branch": "work/prc-northstar-settings-contracts", + "path": ".agent/specs/settings-store/production-ready-residual/plan.md", + "display": ".agent/specs/settings-store/production-ready-residual/plan.md", + "kind": "exact", + "line": 56 + }, + { + "owner": "NORTHSTAR-SETTINGS-CONTRACTS", + "branch": "work/prc-northstar-settings-contracts", + "path": ".agent/specs/settings-store/production-ready-residual/checklists/general.md", + "display": ".agent/specs/settings-store/production-ready-residual/checklists/general.md", + "kind": "exact", + "line": 56 + }, + { + "owner": "NORTHSTAR-SETTINGS-CONTRACTS", + "branch": "work/prc-northstar-settings-contracts", + "path": ".agent/specs/settings-store/production-ready-residual/changes/CR-001-initial-scope/change.md", + "display": ".agent/specs/settings-store/production-ready-residual/changes/CR-001-initial-scope/change.md", + "kind": "exact", + "line": 56 + }, + { + "owner": "NORTHSTAR-SETTINGS-CONTRACTS", + "branch": "work/prc-northstar-settings-contracts", + "path": ".agent/specs/settings-store/production-ready-residual/changes/CR-001-initial-scope/tasks.md", + "display": ".agent/specs/settings-store/production-ready-residual/changes/CR-001-initial-scope/tasks.md", + "kind": "exact", + "line": 56 + } + ], + "repeated_exact_paths": [ + { + "path": ".env.example", + "exact_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "prefix_owners": [], + "effective_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "declared_epoch": true, + "epoch_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ] + }, + { + "path": ".github/workflows/test.yml", + "exact_owners": [ + "RELEASE-GATES", + "IMAGE-REMEDIATION" + ], + "prefix_owners": [], + "effective_owners": [ + "RELEASE-GATES", + "IMAGE-REMEDIATION" + ], + "declared_epoch": true, + "epoch_owners": [ + "RELEASE-GATES", + "IMAGE-REMEDIATION" + ] + }, + { + "path": "apps/operator-console/package-lock.json", + "exact_owners": [ + "IMAGE-REMEDIATION" + ], + "prefix_owners": [ + "OC-INTEGRATION" + ], + "effective_owners": [ + "IMAGE-REMEDIATION", + "OC-INTEGRATION" + ], + "declared_epoch": true, + "epoch_owners": [ + "IMAGE-REMEDIATION", + "OC-INTEGRATION" + ] + }, + { + "path": "apps/operator-console/package.json", + "exact_owners": [ + "IMAGE-REMEDIATION" + ], + "prefix_owners": [ + "OC-INTEGRATION" + ], + "effective_owners": [ + "IMAGE-REMEDIATION", + "OC-INTEGRATION" + ], + "declared_epoch": true, + "epoch_owners": [ + "IMAGE-REMEDIATION", + "OC-INTEGRATION" + ] + }, + { + "path": "CHANGELOG.md", + "exact_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "prefix_owners": [], + "effective_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "declared_epoch": true, + "epoch_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ] + }, + { + "path": "CONTRIBUTING.md", + "exact_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "prefix_owners": [], + "effective_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "declared_epoch": true, + "epoch_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ] + }, + { + "path": "deploy/docker-compose.runtime.yml", + "exact_owners": [ + "IMAGE-REMEDIATION", + "DEPLOYMENT-ROLLBACK" + ], + "prefix_owners": [], + "effective_owners": [ + "IMAGE-REMEDIATION", + "DEPLOYMENT-ROLLBACK" + ], + "declared_epoch": true, + "epoch_owners": [ + "IMAGE-REMEDIATION", + "DEPLOYMENT-ROLLBACK" + ] + }, + { + "path": "docker-compose.yml", + "exact_owners": [ + "IMAGE-REMEDIATION", + "DEPLOYMENT-ROLLBACK" + ], + "prefix_owners": [], + "effective_owners": [ + "IMAGE-REMEDIATION", + "DEPLOYMENT-ROLLBACK" + ], + "declared_epoch": true, + "epoch_owners": [ + "IMAGE-REMEDIATION", + "DEPLOYMENT-ROLLBACK" + ] + }, + { + "path": "Dockerfile", + "exact_owners": [ + "SECURITY-TOOLCHAIN", + "IMAGE-REMEDIATION" + ], + "prefix_owners": [], + "effective_owners": [ + "SECURITY-TOOLCHAIN", + "IMAGE-REMEDIATION" + ], + "declared_epoch": true, + "epoch_owners": [ + "SECURITY-TOOLCHAIN", + "IMAGE-REMEDIATION" + ] + }, + { + "path": "docs/arch/CONFIGURATION.md", + "exact_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "prefix_owners": [], + "effective_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "declared_epoch": true, + "epoch_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ] + }, + { + "path": "docs/arch/QUICKSTART.md", + "exact_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "prefix_owners": [], + "effective_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "declared_epoch": true, + "epoch_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ] + }, + { + "path": "docs/DEPLOYMENT.md", + "exact_owners": [ + "IMAGE-REMEDIATION", + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "prefix_owners": [], + "effective_owners": [ + "IMAGE-REMEDIATION", + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "declared_epoch": true, + "epoch_owners": [ + "IMAGE-REMEDIATION", + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ] + }, + { + "path": "docs/MIGRATION.md", + "exact_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "prefix_owners": [], + "effective_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "declared_epoch": true, + "epoch_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ] + }, + { + "path": "docs/PRODUCTION-TESTING-PLAYBOOK.md", + "exact_owners": [ + "IMAGE-REMEDIATION", + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "prefix_owners": [], + "effective_owners": [ + "IMAGE-REMEDIATION", + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "declared_epoch": true, + "epoch_owners": [ + "IMAGE-REMEDIATION", + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ] + }, + { + "path": "docs/public/engram.jpg", + "exact_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "prefix_owners": [], + "effective_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "declared_epoch": true, + "epoch_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ] + }, + { + "path": "internal/bulkops/facade_test.go", + "exact_owners": [ + "DB-BULKOPS", + "INGEST-DOC-SNAPSHOT-DEMOLITION" + ], + "prefix_owners": [], + "effective_owners": [ + "DB-BULKOPS", + "INGEST-DOC-SNAPSHOT-DEMOLITION" + ], + "declared_epoch": true, + "epoch_owners": [ + "DB-BULKOPS", + "INGEST-DOC-SNAPSHOT-DEMOLITION" + ] + }, + { + "path": "internal/bulkops/facade.go", + "exact_owners": [ + "DB-BULKOPS", + "INGEST-DOC-SNAPSHOT-DEMOLITION", + "DURABLE-AUDIT-BOUNDARIES" + ], + "prefix_owners": [], + "effective_owners": [ + "DB-BULKOPS", + "INGEST-DOC-SNAPSHOT-DEMOLITION", + "DURABLE-AUDIT-BOUNDARIES" + ], + "declared_epoch": true, + "epoch_owners": [ + "DB-BULKOPS", + "INGEST-DOC-SNAPSHOT-DEMOLITION", + "DURABLE-AUDIT-BOUNDARIES" + ] + }, + { + "path": "internal/bulkops/rollback_test.go", + "exact_owners": [ + "DB-BULKOPS", + "CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK" + ], + "prefix_owners": [], + "effective_owners": [ + "DB-BULKOPS", + "CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK" + ], + "declared_epoch": true, + "epoch_owners": [ + "DB-BULKOPS", + "CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK" + ] + }, + { + "path": "internal/db/gorm/candidate_store_test.go", + "exact_owners": [ + "DB-BULKOPS", + "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK", + "DB-GOVERNANCE", + "CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK" + ], + "prefix_owners": [], + "effective_owners": [ + "DB-BULKOPS", + "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK", + "DB-GOVERNANCE", + "CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK" + ], + "declared_epoch": true, + "epoch_owners": [ + "DB-BULKOPS", + "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK", + "DB-GOVERNANCE", + "CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK" + ] + }, + { + "path": "internal/db/gorm/candidate_store.go", + "exact_owners": [ + "DB-BULKOPS", + "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK", + "DB-GOVERNANCE", + "CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK" + ], + "prefix_owners": [], + "effective_owners": [ + "DB-BULKOPS", + "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK", + "DB-GOVERNANCE", + "CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK" + ], + "declared_epoch": true, + "epoch_owners": [ + "DB-BULKOPS", + "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK", + "DB-GOVERNANCE", + "CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK" + ] + }, + { + "path": "internal/db/gorm/user_store.go", + "exact_owners": [ + "DB-AUTH", + "AUTH-BOOTSTRAP-SECURITY", + "DURABLE-AUDIT-BOUNDARIES" + ], + "prefix_owners": [], + "effective_owners": [ + "DB-AUTH", + "AUTH-BOOTSTRAP-SECURITY", + "DURABLE-AUDIT-BOUNDARIES" + ], + "declared_epoch": true, + "epoch_owners": [ + "DB-AUTH", + "AUTH-BOOTSTRAP-SECURITY", + "DURABLE-AUDIT-BOUNDARIES" + ] + }, + { + "path": "internal/mcp/tools_bulkops.go", + "exact_owners": [ + "DB-BULKOPS", + "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK" + ], + "prefix_owners": [], + "effective_owners": [ + "DB-BULKOPS", + "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK" + ], + "declared_epoch": true, + "epoch_owners": [ + "DB-BULKOPS", + "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK" + ] + }, + { + "path": "internal/mcp/tools_dryrun_test.go", + "exact_owners": [ + "DB-BULKOPS", + "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK" + ], + "prefix_owners": [], + "effective_owners": [ + "DB-BULKOPS", + "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK" + ], + "declared_epoch": true, + "epoch_owners": [ + "DB-BULKOPS", + "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK" + ] + }, + { + "path": "internal/worker/auth_handlers.go", + "exact_owners": [ + "DB-AUTH", + "AUTH-BOOTSTRAP-SECURITY", + "DURABLE-AUDIT-BOUNDARIES" + ], + "prefix_owners": [], + "effective_owners": [ + "DB-AUTH", + "AUTH-BOOTSTRAP-SECURITY", + "DURABLE-AUDIT-BOUNDARIES" + ], + "declared_epoch": true, + "epoch_owners": [ + "DB-AUTH", + "AUTH-BOOTSTRAP-SECURITY", + "DURABLE-AUDIT-BOUNDARIES" + ] + }, + { + "path": "internal/worker/service.go", + "exact_owners": [ + "AUTH-BOOTSTRAP-SECURITY", + "V7-RUNTIME-WIRING" + ], + "prefix_owners": [], + "effective_owners": [ + "AUTH-BOOTSTRAP-SECURITY", + "V7-RUNTIME-WIRING" + ], + "declared_epoch": true, + "epoch_owners": [ + "AUTH-BOOTSTRAP-SECURITY", + "V7-RUNTIME-WIRING" + ] + }, + { + "path": "Makefile", + "exact_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "prefix_owners": [], + "effective_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "declared_epoch": true, + "epoch_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ] + }, + { + "path": "pkg/models/snapshot.go", + "exact_owners": [ + "DB-BULKOPS", + "INGEST-DOC-SNAPSHOT-DEMOLITION" + ], + "prefix_owners": [], + "effective_owners": [ + "DB-BULKOPS", + "INGEST-DOC-SNAPSHOT-DEMOLITION" + ], + "declared_epoch": true, + "epoch_owners": [ + "DB-BULKOPS", + "INGEST-DOC-SNAPSHOT-DEMOLITION" + ] + }, + { + "path": "plugin/engram/commands/doctor.md", + "exact_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "prefix_owners": [], + "effective_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "declared_epoch": true, + "epoch_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ] + }, + { + "path": "plugin/engram/commands/setup.md", + "exact_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "prefix_owners": [], + "effective_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "declared_epoch": true, + "epoch_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ] + }, + { + "path": "README.md", + "exact_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "prefix_owners": [], + "effective_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "declared_epoch": true, + "epoch_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ] + }, + { + "path": "README.ru.md", + "exact_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "prefix_owners": [], + "effective_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "declared_epoch": true, + "epoch_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ] + }, + { + "path": "README.zh.md", + "exact_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "prefix_owners": [], + "effective_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "declared_epoch": true, + "epoch_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ] + } + ], + "prefix_intersections": [ + { + "left_owner": "IMAGE-REMEDIATION", + "left": "apps/operator-console/package.json", + "right_owner": "OC-INTEGRATION", + "right": "apps/operator-console/**", + "exact_path": "apps/operator-console/package.json", + "declared_epoch": true + }, + { + "left_owner": "IMAGE-REMEDIATION", + "left": "apps/operator-console/package-lock.json", + "right_owner": "OC-INTEGRATION", + "right": "apps/operator-console/**", + "exact_path": "apps/operator-console/package-lock.json", + "declared_epoch": true + } + ], + "epochs": [ + { + "path": "internal/db/gorm/candidate_store.go", + "owners": [ + "DB-BULKOPS", + "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK", + "DB-GOVERNANCE", + "CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK" + ], + "transfer_gate": "rejected predecessor checker/hash recorded; rework uses exact base `68b2ce5835c7c6efdf1c68da9eedcb8d9c3837ef`; each accepted successor requires checker PASS, post-review PASS, integration SHA, and exact rebase before edit", + "line": 6 + }, + { + "path": "internal/db/gorm/candidate_store_test.go", + "owners": [ + "DB-BULKOPS", + "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK", + "DB-GOVERNANCE", + "CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK" + ], + "transfer_gate": "rejected predecessor checker/hash recorded; rework uses exact base `68b2ce5835c7c6efdf1c68da9eedcb8d9c3837ef`; each accepted successor requires checker PASS, post-review PASS, integration SHA, and exact rebase before edit", + "line": 6 + }, + { + "path": "internal/mcp/tools_bulkops.go", + "owners": [ + "DB-BULKOPS", + "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK" + ], + "transfer_gate": "rejected predecessor checker/hash recorded; rework base is exact rejected head; checker and post-review PASS plus integration SHA close the transfer", + "line": 7 + }, + { + "path": "internal/mcp/tools_dryrun_test.go", + "owners": [ + "DB-BULKOPS", + "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK" + ], + "transfer_gate": "rejected predecessor checker/hash recorded; rework base is exact rejected head; checker and post-review PASS plus integration SHA close the transfer", + "line": 7 + }, + { + "path": "internal/bulkops/facade.go", + "owners": [ + "DB-BULKOPS", + "INGEST-DOC-SNAPSHOT-DEMOLITION", + "DURABLE-AUDIT-BOUNDARIES" + ], + "transfer_gate": "behavioral-edge composite checker and post-review PASS; exact integration SHA recorded; demolition rebased before edit; historical ingest guard green before durable-audit fault work", + "line": 8 + }, + { + "path": "internal/bulkops/facade_test.go", + "owners": [ + "DB-BULKOPS", + "INGEST-DOC-SNAPSHOT-DEMOLITION" + ], + "transfer_gate": "accepted behavioral-edge composite integrated; demolition worktree rebased; focused historical-only regressions PASS before integration", + "line": 9 + }, + { + "path": "internal/bulkops/rollback_test.go", + "owners": [ + "DB-BULKOPS", + "CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK" + ], + "transfer_gate": "accepted behavioral-edge composite and DB-GOVERNANCE integrated; candidate-review successor rebased; combined checker and post-review PASS", + "line": 10 + }, + { + "path": "pkg/models/snapshot.go", + "owners": [ + "DB-BULKOPS", + "INGEST-DOC-SNAPSHOT-DEMOLITION" + ], + "transfer_gate": "accepted behavioral-edge composite integrated; demolition successor rebased; persistence-compatibility and non-executable regressions PASS", + "line": 11 + }, + { + "path": "internal/db/gorm/user_store.go", + "owners": [ + "DB-AUTH", + "AUTH-BOOTSTRAP-SECURITY", + "DURABLE-AUDIT-BOUNDARIES" + ], + "transfer_gate": "each predecessor checker and post-review PASS, integration SHA recorded, successor rebased; no simultaneous writer", + "line": 12 + }, + { + "path": "internal/worker/auth_handlers.go", + "owners": [ + "DB-AUTH", + "AUTH-BOOTSTRAP-SECURITY", + "DURABLE-AUDIT-BOUNDARIES" + ], + "transfer_gate": "each predecessor checker and post-review PASS, integration SHA recorded, successor rebased; no simultaneous writer", + "line": 13 + }, + { + "path": "internal/worker/service.go", + "owners": [ + "AUTH-BOOTSTRAP-SECURITY", + "V7-RUNTIME-WIRING" + ], + "transfer_gate": "auth bootstrap checker and post-review PASS, commit integrated, V7 worktree rebased, auth route regression rerun", + "line": 14 + }, + { + "path": "Dockerfile", + "owners": [ + "SECURITY-TOOLCHAIN", + "IMAGE-REMEDIATION" + ], + "transfer_gate": "toolchain checker and post-review PASS, commit integrated, image worktree rebased, zero-finding rebuild and scan before successor integration", + "line": 15 + }, + { + "path": ".github/workflows/test.yml", + "owners": [ + "RELEASE-GATES", + "IMAGE-REMEDIATION" + ], + "transfer_gate": "release-gates checker and post-review PASS, commit integrated, image worktree rebased before workflow image-identity changes", + "line": 16 + }, + { + "path": "docker-compose.yml", + "owners": [ + "IMAGE-REMEDIATION", + "DEPLOYMENT-ROLLBACK" + ], + "transfer_gate": "image checker and post-review PASS, `final-image-set.json` recorded, deployment worktree rebased, fresh scan after edits", + "line": 17 + }, + { + "path": "deploy/docker-compose.runtime.yml", + "owners": [ + "IMAGE-REMEDIATION", + "DEPLOYMENT-ROLLBACK" + ], + "transfer_gate": "image checker and post-review PASS, `final-image-set.json` recorded, deployment worktree rebased, fresh scan after edits", + "line": 17 + }, + { + "path": "apps/operator-console/package.json", + "owners": [ + "IMAGE-REMEDIATION", + "OC-INTEGRATION" + ], + "transfer_gate": "image checker and post-review PASS, OC worktree rebased, any later dependency edit reruns audit/build/browser/image scan", + "line": 18 + }, + { + "path": "apps/operator-console/package-lock.json", + "owners": [ + "IMAGE-REMEDIATION", + "OC-INTEGRATION" + ], + "transfer_gate": "image checker and post-review PASS, OC worktree rebased, any later dependency edit reruns audit/build/browser/image scan", + "line": 18 + }, + { + "path": "docs/DEPLOYMENT.md", + "owners": [ + "IMAGE-REMEDIATION", + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "transfer_gate": "image proof integrated; CORE rebased for M5; FINAL rebased to exact M6 integration and final-version artifact before edit", + "line": 19 + }, + { + "path": "docs/PRODUCTION-TESTING-PLAYBOOK.md", + "owners": [ + "IMAGE-REMEDIATION", + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "transfer_gate": "image proof integrated; CORE rebased for M5; FINAL rebased to exact M6 integration and final-version artifact before edit", + "line": 19 + }, + { + "path": "README.md", + "owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "transfer_gate": "M5 release published and proved; FINAL worktree rebased to exact M6 integration; final version artifact and exact release-note path recorded before edit", + "line": 20 + }, + { + "path": "README.ru.md", + "owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "transfer_gate": "M5 release published and proved; FINAL worktree rebased to exact M6 integration; final version artifact and exact release-note path recorded before edit", + "line": 20 + }, + { + "path": "README.zh.md", + "owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "transfer_gate": "M5 release published and proved; FINAL worktree rebased to exact M6 integration; final version artifact and exact release-note path recorded before edit", + "line": 20 + }, + { + "path": "CONTRIBUTING.md", + "owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "transfer_gate": "M5 release published and proved; FINAL worktree rebased to exact M6 integration; final version artifact and exact release-note path recorded before edit", + "line": 20 + }, + { + "path": "CHANGELOG.md", + "owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "transfer_gate": "M5 release published and proved; FINAL worktree rebased to exact M6 integration; final version artifact and exact release-note path recorded before edit", + "line": 20 + }, + { + "path": "Makefile", + "owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "transfer_gate": "M5 release published and proved; FINAL worktree rebased to exact M6 integration; final version artifact and exact release-note path recorded before edit", + "line": 20 + }, + { + "path": ".env.example", + "owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "transfer_gate": "M5 release published and proved; FINAL worktree rebased to exact M6 integration; final version artifact and exact release-note path recorded before edit", + "line": 20 + }, + { + "path": "docs/MIGRATION.md", + "owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "transfer_gate": "M5 release published and proved; FINAL worktree rebased to exact M6 integration; final version artifact and exact release-note path recorded before edit", + "line": 20 + }, + { + "path": "docs/arch/CONFIGURATION.md", + "owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "transfer_gate": "M5 release published and proved; FINAL worktree rebased to exact M6 integration; final version artifact and exact release-note path recorded before edit", + "line": 20 + }, + { + "path": "docs/arch/QUICKSTART.md", + "owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "transfer_gate": "M5 release published and proved; FINAL worktree rebased to exact M6 integration; final version artifact and exact release-note path recorded before edit", + "line": 20 + }, + { + "path": "docs/public/engram.jpg", + "owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "transfer_gate": "M5 release published and proved; FINAL worktree rebased to exact M6 integration; final version artifact and exact release-note path recorded before edit", + "line": 20 + }, + { + "path": "plugin/engram/commands/setup.md", + "owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "transfer_gate": "M5 release published and proved; FINAL worktree rebased to exact M6 integration; final version artifact and exact release-note path recorded before edit", + "line": 20 + }, + { + "path": "plugin/engram/commands/doctor.md", + "owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "transfer_gate": "M5 release published and proved; FINAL worktree rebased to exact M6 integration; final version artifact and exact release-note path recorded before edit", + "line": 20 + } + ], + "errors": [] +} diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/tdd/RG3-DEVSTAND.red.json b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/tdd/RG3-DEVSTAND.red.json new file mode 100644 index 00000000..c4f7df87 --- /dev/null +++ b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/tdd/RG3-DEVSTAND.red.json @@ -0,0 +1,9 @@ +{ + "task_id": "RG3-DEVSTAND", + "observed_at": "2026-07-10T08:29:56.4884843Z", + "test_file": "scripts/production-gates/run-db-suite.ps1", + "test_name": "liveness/readiness separation and three distinct generated credentials", + "invariant": "HTTP-200 liveness accepts only starting, ready, or error; readiness accepts only exact ready; PostgreSQL, admin, and bootstrap credentials are random, non-default, distinct, runtime-injected, and absent from evidence.", + "failure_reason": "The implementation had no liveness predicate and hard-coded the PostgreSQL password.", + "runner_stdout_excerpt": "The term 'Test-LivenessStatusPayload' is not recognized" +} diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/tdd/RG3-NODE.red.json b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/tdd/RG3-NODE.red.json new file mode 100644 index 00000000..87c729b3 --- /dev/null +++ b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/tdd/RG3-NODE.red.json @@ -0,0 +1,9 @@ +{ + "task_id": "RG3-NODE", + "observed_at": "2026-07-10T08:29:56.4884843Z", + "test_file": "scripts/production-gates/run-node-matrix.ps1", + "test_name": "clean OpenClaw locked-install and package matrix", + "invariant": "A clean checkout with no node_modules proves manifest/lock/plugin parity and runs npm ci, typecheck, tests, high-severity audit, and package dry-run in that exact order with unconditional cleanup.", + "failure_reason": "The new foundation runner had tests but no manifest-parity implementation.", + "runner_stdout_excerpt": "The term 'Test-OpenClawManifestParity' is not recognized" +} diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/tdd/RG3-OWNERSHIP.red.json b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/tdd/RG3-OWNERSHIP.red.json new file mode 100644 index 00000000..b00fc1c2 --- /dev/null +++ b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/tdd/RG3-OWNERSHIP.red.json @@ -0,0 +1,9 @@ +{ + "task_id": "RG3-OWNERSHIP", + "observed_at": "2026-07-10T08:29:56.4884843Z", + "test_file": "scripts/production-gates/assert-plan-path-ownership.ps1", + "test_name": "reversed epoch, current owner, predecessor evidence, and successor-base authority", + "invariant": "A slice may change an epoch path only when it is the current owner and its base descends from every independently accepted, post-reviewed, integrated predecessor; challenged plan bytes must match the expected SHA256.", + "failure_reason": "The existing set-only ledger accepted the reversed B -> A epoch.", + "runner_stdout_excerpt": "SELFTEST FAIL: reversed epoch order was accepted" +} diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/verification-summary.json b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/verification-summary.json new file mode 100644 index 00000000..8c6ad1c0 --- /dev/null +++ b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/verification-summary.json @@ -0,0 +1,143 @@ +{ + "schema_version": 1, + "slice": "RELEASE-GATES", + "revision": 3, + "role": "maker", + "verified_at_utc": "2026-07-10T09:52:27.8798155Z", + "repository_head": "2b3ef3e33bd19e630f8f67d07a9e2521cb98537f", + "plan_governance_commit": "a1653abf5a1088f45df2c58487a74a886666adf1", + "plan": { + "path": ".agent/plans/2026-07-10-engram-production-ready-master-plan.md", + "sha256": "d371e94dff1ea12767b9d0832240cb6caf52c6c3bbe2209fe4280159c4f03c52" + }, + "ownership_state": { + "path": ".agent/plans/2026-07-10-engram-production-ready-ownership-state.json", + "sha256": "1419e2f7e5236e21dd9a2d8c3271ced2def16dc0a798435ad5a9401fe522d55b", + "db_bulkops_current_owner": "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK", + "db_bulkops_rejected_head": "68b2ce5835c7c6efdf1c68da9eedcb8d9c3837ef" + }, + "implementation_hashes": { + ".agent/dev-stand.config.yaml": "1ba20cee8a3932988b8b503ea8419451165c46823d94a38010f93bc02a6933c3", + ".github/workflows/test.yml": "1161a37fc0a3e659c7cd609828d8c0b2c93973e2a2c739b79f1467064deb7b8a", + "scripts/production-gates/assert-plan-path-ownership.ps1": "cf57be086c7118c36c0281d10e92ffe01d9ca7fc9a4f0c98b2b1e497cd8b2601", + "scripts/production-gates/run-db-suite.ps1": "1879cc7a1ecc63397184adfe0d6dc490537d7a45e4ccdbe701d48ee729ed78fb", + "scripts/production-gates/run-dev-stand.ps1": "f6053e41681184771302e06d8a650892695e51f98f6c6c9935a3aad55829f13e", + "scripts/production-gates/run-node-matrix.ps1": "3138322029c4d271ba2101a8baef13c65c34e54f742e6c130dab481498d184d4" + }, + "verification": { + "powershell_ast": { + "verdict": "PASS", + "scripts": 8, + "parse_errors": 0 + }, + "self_tests": { + "verdict": "PASS", + "scripts": 8 + }, + "ownership_ledger": { + "verdict": "PASS", + "slices": 47, + "declarations": 318, + "repeated_exact_paths": 32, + "prefix_intersections": 2, + "errors": 0, + "artifact": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/ownership/ledger-final.json", + "sha256": "39d3572086d4690def49d3cc56f2870384ba8c44bf52bf0e27b93a6b39976d57" + }, + "rejected_db_bulkops_negative": { + "verdict": "EXPECTED_FAIL", + "runner_exit_code": 1, + "changed_paths": 22, + "ownership_violations": 0, + "current_owner_errors": 4, + "artifact": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/ownership/db-bulkops-rejected-negative.json", + "sha256": "e230261479a9603697488901e815bc4b11a9e4bbfbe9e658d0927639cb3229f4" + }, + "workflow_conformance": { + "verdict": "PASS", + "mutations_rejected": 26 + }, + "root_register_plan_slice_parity": { + "verdict": "FAIL", + "plan_slices": 47, + "register_slices": 54, + "missing_plan_slices": [ + "DOCUMENT-INGEST-PUBLIC-TRUTH", + "INGEST-DOC-SNAPSHOT-DEMOLITION" + ], + "owner": "root" + }, + "actionlint": { + "verdict": "PASS", + "version": "1.7.12" + }, + "hygiene": { + "verdict": "PASS", + "git_diff_check": "PASS", + "sensitive_value_pattern_hits": 0, + "residual_containers": 0, + "residual_networks": 0, + "residual_volumes": 0 + } + }, + "tdd_red_evidence": { + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/tdd/RG3-OWNERSHIP.red.json": "051cc783f978e65b777a96d3897c1f2cb5cb4f29824c86506bcb939870919309", + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/tdd/RG3-DEVSTAND.red.json": "da1948a48ade2c830c8eee570f4ba3c14d5b8020d7c4402b2c588cf8c0df8622", + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/tdd/RG3-NODE.red.json": "c9e044e2d4560ecfc19f8e6828da4c5bd1f1e3dc1b0ab7abd974ef66e727797b" + }, + "runtime_dev_stand": { + "verdict": "EXPECTED_FAIL", + "reason": "The implemented gate correctly rejected existing HIGH/CRITICAL findings in the exact release images.", + "wrapper_summary": { + "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/summary.json", + "sha256": "2e8386aac779f1ea3e68ede005bf643b8ebcd37824101b8e7b80070ab9b311cf" + }, + "up": { + "verdict": "PASS", + "sha256": "f0bd9816ae5abf16818f3a3c24ff4335a80d55d2380954b8aa2d4743a8ccbddb", + "three_independent_256_bit_secrets": true, + "distinct_nondefault": true, + "runtime_injected": true, + "persisted": false, + "direct_liveness_http_200_semantic_pass": true, + "proxy_liveness_http_200_semantic_pass": true, + "direct_readiness_http_200_semantic_pass": true, + "proxy_readiness_http_200_semantic_pass": true + }, + "ready": { + "verdict": "PASS", + "sha256": "8a1f90a21b03727768a6d20a5df0dab2d7ed101fac8d2c72dea2b424398cc221" + }, + "scan": { + "verdict": "FAIL", + "sha256": "3895b0e63f6d39eda72fd09348d8c785c234e3a4a15721656a8787d0901fd983", + "high_or_critical_findings": { + "ghcr.io/thebtf/engram-operator-console:main": 5, + "pgvector/pgvector:pg17": 38, + "ghcr.io/thebtf/engram:main": 13 + } + }, + "down": { + "verdict": "PASS", + "sha256": "9e85b54cc1bf019c93a3b89cca590ecdc8ec10da7b68f22585ef787fdfd2caa7", + "residual_resources_zero": true + } + }, + "openclaw_node_matrix": { + "verdict": "EXPECTED_FAIL", + "reason": "The release surface currently has no tracked package-lock.json; no npm release command was executed.", + "release_commands_executed": 0, + "package_dry_run": false, + "pre_surface_clean": true, + "post_surface_clean": true, + "artifact": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-3/summary.json", + "sha256": "408424249909005fec919e1e5e00c73596fcdb4faacdbdc69295e3ebbc860472", + "owner": "OPENCLAW-RELEASE" + }, + "claims": { + "checker_verdict": null, + "production_ready": false, + "go_no_go": null, + "bootstrap_functionality": "NOT_CLAIMED" + } +} diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 1775d76c..6b2bb702 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -68,6 +68,20 @@ jobs: shell: pwsh run: ./scripts/production-gates/assert-plan-path-ownership.ps1 -SelfTest + - name: Self-test OpenClaw node release matrix + shell: pwsh + run: ./scripts/production-gates/run-node-matrix.ps1 -SelfTest + + - name: Assert tracked production-ready ownership ledger + shell: pwsh + run: >- + ./scripts/production-gates/assert-plan-path-ownership.ps1 + -Mode Ledger + -Plan .agent/plans/2026-07-10-engram-production-ready-master-plan.md + -ExpectedPlanSha256 d371e94dff1ea12767b9d0832240cb6caf52c6c3bbe2209fe4280159c4f03c52 + -State .agent/plans/2026-07-10-engram-production-ready-ownership-state.json + -Artifact .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/ownership/ci-ledger.json + - name: Assert tracked gate / CI conformance shell: pwsh run: | @@ -78,6 +92,14 @@ jobs: $dbRunner = Get-Content -Raw 'scripts/production-gates/run-db-suite.ps1' $criticalRunner = Get-Content -Raw 'scripts/production-gates/run-critical-suite.ps1' $devStandRunner = Get-Content -Raw 'scripts/production-gates/run-dev-stand.ps1' + $ownershipRunner = Get-Content -Raw 'scripts/production-gates/assert-plan-path-ownership.ps1' + $nodeRunner = Get-Content -Raw 'scripts/production-gates/run-node-matrix.ps1' + $ownershipState = Get-Content -Raw '.agent/plans/2026-07-10-engram-production-ready-ownership-state.json' + $expectedPlanSha = 'd371e94dff1ea12767b9d0832240cb6caf52c6c3bbe2209fe4280159c4f03c52' + $observedPlanSha = (Get-FileHash -Algorithm SHA256 -LiteralPath '.agent/plans/2026-07-10-engram-production-ready-master-plan.md').Hash.ToLowerInvariant() + $rejectedBulkHead = '68b2ce5835c7c6efdf1c68da9eedcb8d9c3837ef' + $rejectedBulkChecker = '.agent/worktrees/prc-db-bulkops/.agent/reviews/2026-07-10-db-bulkops-sibling-rework-check.md' + $rejectedBulkCheckerSha = 'EB9EB227363A27EA058C6654BD7E38EED1088252F79F837E377B2A3CBC1FAFB7' $trackedCriticalCommand = 'go test -tags=critical -json ./tests/critical/... -count=1' $trackedDatabaseCommand = 'pwsh -NoProfile -File scripts/production-gates/run-db-suite.ps1 -FreshDatabase -Package ./... -Race -FailOnUnexpectedSkip' $trackedCriticalWrapper = 'pwsh -NoProfile -File scripts/production-gates/run-critical-suite.ps1 -Config .agent/critical-suite.config.yaml' @@ -99,14 +121,24 @@ jobs: [string]$standText, [string]$dbRunnerText, [string]$criticalRunnerText, - [string]$devStandRunnerText + [string]$devStandRunnerText, + [string]$ownershipRunnerText = $ownershipRunner, + [string]$nodeRunnerText = $nodeRunner, + [string]$stateText = $ownershipState ) { $execution = Remove-ConformanceStep $workflowText + if ($observedPlanSha -cne $expectedPlanSha) { throw "tracked production-ready plan hash drifted: expected=$expectedPlanSha observed=$observedPlanSha" } $repeatToken = '(?i)(? npm-typecheck -> npm-test -> npm-audit-high -> npm-pack-dry-run')) { + if (-not $nodeRunnerText.Contains($required)) { throw "node release runner implementation is missing '$required'" } + } + + $stateObject = $stateText | ConvertFrom-Json -Depth 100 + if ([string]$stateObject.plan.sha256 -cne $expectedPlanSha) { throw 'ownership state is not bound to the exact challenged plan hash' } + foreach ($path in @('internal/db/gorm/candidate_store.go', 'internal/db/gorm/candidate_store_test.go', 'internal/mcp/tools_bulkops.go', 'internal/mcp/tools_dryrun_test.go')) { + $epoch = @($stateObject.path_epochs | Where-Object path -CEQ $path) + if ($epoch.Count -ne 1) { throw "ownership state must contain exactly one rework epoch for '$path'" } + if ([string]$epoch[0].current_owner -cne 'DB-BULKOPS-BEHAVIORAL-EDGE-REWORK' -or [string]$epoch[0].transition_kind -cne 'rework') { throw "ownership state current owner/transition drifted for '$path'" } + if ([string]$epoch[0].required_successor_base_sha -cne $rejectedBulkHead) { throw "ownership state rejected-base lock drifted for '$path'" } + $predecessor = @($epoch[0].completed_predecessors) + if ($predecessor.Count -ne 1 -or [string]$predecessor[0].owner -cne 'DB-BULKOPS' -or [string]$predecessor[0].checker_verdict -cne 'FAIL' -or [string]$predecessor[0].checker_artifact -cne $rejectedBulkChecker -or [string]$predecessor[0].checker_sha256 -cne $rejectedBulkCheckerSha -or [string]$predecessor[0].rejected_head_sha -cne $rejectedBulkHead -or -not [string]::IsNullOrWhiteSpace([string]$predecessor[0].integration_sha)) { + throw "ownership state rejected-predecessor evidence drifted for '$path'" + } + } + $trackedCommands = [regex]::Matches($standText, '(?m)^\s+(?:command|readiness_check):\s+"([^"]*run-db-suite\.ps1 -DevStandAction [^"]+)"\s*$') if ($trackedCommands.Count -ne 4) { throw "tracked dev-stand contract must declare Up, Ready, Scan, Down exactly once; found $($trackedCommands.Count)" } foreach ($match in $trackedCommands) { @@ -168,7 +227,7 @@ jobs: Assert-MutationRejected 'narrow canonical full package' { Assert-WorkflowContract ($workflow.Replace('-Package ./...', '-Package ./internal/db/gorm')) $critical $stand $dbRunner $criticalRunner $devStandRunner } Assert-MutationRejected 'narrow critical package' { Assert-WorkflowContract $workflow ($critical.Replace('./tests/critical/...', './tests/critical/auth/...')) $stand $dbRunner $criticalRunner $devStandRunner } Assert-MutationRejected 'remove critical parser execution' { Assert-WorkflowContract $workflow $critical $stand $dbRunner ($criticalRunner.Replace("Invoke-CapturedProcess 'critical-json-parser'", '')) $devStandRunner } - Assert-MutationRejected 'remove semantic readiness validation' { Assert-WorkflowContract $workflow $critical $stand ($dbRunner.Replace('Test-ReadyStatusPayload $http.Stdout', '$true')) $criticalRunner $devStandRunner } + Assert-MutationRejected 'remove semantic readiness validation' { Assert-WorkflowContract $workflow $critical $stand ($dbRunner.Replace('Get-HttpJsonContractResult -CapturedOutput $http.Stdout -ContractKind $endpoint.contract_kind', '$true')) $criticalRunner $devStandRunner } Assert-MutationRejected 'use stale operator target variable' { Assert-WorkflowContract $workflow $critical ($stand.Replace('NUXT_OPERATOR_API_TARGET', 'NUXT_ENGRAM_API_TARGET')) $dbRunner $criticalRunner $devStandRunner } Assert-MutationRejected 'remove proxied operator health proof' { Assert-WorkflowContract $workflow $critical $stand ($dbRunner.Replace('http://localhost:3001/api/health', '')) $criticalRunner $devStandRunner } Assert-MutationRejected 'remove wrapper proxied operator validation' { Assert-WorkflowContract $workflow $critical $stand $dbRunner $criticalRunner ($devStandRunner.Replace('dev-stand-operator-api-health', '')) } @@ -181,7 +240,11 @@ jobs: Assert-MutationRejected 'change timeout' { Assert-WorkflowContract ($workflow.Replace("'-timeout=30m'", "'-timeout=5m'")) $critical $stand $dbRunner $criticalRunner $devStandRunner } Assert-MutationRejected 'change race policy' { Assert-WorkflowContract ($workflow.Replace("RUNNER_OS -ne 'Windows'", "RUNNER_OS -eq 'Linux'")) $critical $stand $dbRunner $criticalRunner $devStandRunner } Assert-MutationRejected 'inject Repeat1' { Assert-WorkflowContract ($workflow.Replace('-Race', '-Race -Repeat 1')) $critical $stand $dbRunner $criticalRunner $devStandRunner } - Write-Output 'CONFORMANCE PASS: exact wrappers, direct/proxied semantic readiness, cleanup, and full/race semantics match; 22 mutations rejected' + Assert-MutationRejected 'change expected challenged plan hash' { Assert-WorkflowContract ($workflow.Replace($expectedPlanSha, ('0' * 64))) $critical $stand $dbRunner $criticalRunner $devStandRunner } + Assert-MutationRejected 'change ownership current owner' { Assert-WorkflowContract $workflow $critical $stand $dbRunner $criticalRunner $devStandRunner -stateText ($ownershipState.Replace('"current_owner": "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK"', '"current_owner": "DB-BULKOPS"')) } + Assert-MutationRejected 'remove rejected predecessor evidence' { Assert-WorkflowContract $workflow $critical $stand $dbRunner $criticalRunner $devStandRunner -stateText ($ownershipState.Replace($rejectedBulkCheckerSha, '')) } + Assert-MutationRejected 'change exact rejected successor base' { Assert-WorkflowContract $workflow $critical $stand $dbRunner $criticalRunner $devStandRunner -stateText ($ownershipState.Replace($rejectedBulkHead, ('1' * 40))) } + Write-Output 'CONFORMANCE PASS: exact wrappers, ownership hash/state, node matrix, readiness, cleanup, and full/race semantics match; 26 mutations rejected' - name: Resolve PostgreSQL service identity shell: pwsh @@ -214,7 +277,9 @@ jobs: uses: actions/upload-artifact@v4 with: name: release-gates-foundation - path: .agent/reports/evidence/production-ready/release-gates-foundation/ + path: | + .agent/reports/evidence/production-ready/release-gates-foundation/ + .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/ if-no-files-found: error test: diff --git a/scripts/production-gates/assert-plan-path-ownership.ps1 b/scripts/production-gates/assert-plan-path-ownership.ps1 index 7557de55..a2ffb9d3 100644 --- a/scripts/production-gates/assert-plan-path-ownership.ps1 +++ b/scripts/production-gates/assert-plan-path-ownership.ps1 @@ -6,6 +6,8 @@ param( [string]$Base, [string]$Head, [string]$Plan = '.agent/plans/2026-07-10-engram-production-ready-master-plan.md', + [string]$ExpectedPlanSha256, + [string]$State = '.agent/plans/2026-07-10-engram-production-ready-ownership-state.json', [string]$EvidenceNamespace, [string]$ReportNamespace, [string]$Artifact = '.agent/reports/evidence/production-ready/ownership/path-ledger.json', @@ -23,22 +25,29 @@ assert-plan-path-ownership.ps1 Ledger mode parses the production-ready master-plan ownership matrix. Only literal repository paths and explicit directory/** prefixes are accepted. Cross-owner exact and exact/prefix overlap requires one ownership epoch whose -owner set exactly matches the effective owners. Prefix/prefix overlap always -fails. +ordered owner sequence exactly matches the effective owners. Prefix/prefix +overlap always fails. The tracked ownership-state JSON must match the challenged +plan hash and every ordered epoch. Diff mode additionally enumerates git diff --name-status Base..Head and proves that every changed path belongs to the named slice or to its validated evidence -or maker-report namespace. Base and Head must be full commit object IDs. +or maker-report namespace. For repeated paths the slice must be the state-file +current owner; ordinary successor bases must descend from the exact independently +checked, post-reviewed, integrated predecessor SHA. Base and Head must be full +commit object IDs. Usage: pwsh ./scripts/production-gates/assert-plan-path-ownership.ps1 -Mode Ledger ` -Plan .agent/plans/2026-07-10-engram-production-ready-master-plan.md ` + -ExpectedPlanSha256 <64-hex-sha256> ` + -State .agent/plans/2026-07-10-engram-production-ready-ownership-state.json ` -Artifact .agent/reports/evidence/production-ready/ownership/path-ledger.json pwsh ./scripts/production-gates/assert-plan-path-ownership.ps1 -Mode Diff ` -Slice DB-BULKOPS -Base <40-hex-commit> -Head <40-hex-commit> ` -EvidenceNamespace '.agent/specs/production-ready-db-bulkops/evidence/**' ` - -ReportNamespace .agent/reports/db-bulkops-maker.md -Plan -Artifact + -ReportNamespace .agent/reports/db-bulkops-maker.md -Plan ` + -ExpectedPlanSha256 <64-hex-sha256> -State -Artifact '@ | Write-Output } @@ -219,6 +228,29 @@ function Test-SameStringSet { return $leftSet.SetEquals($rightSet) } +function Test-SameStringSequence { + param( + [Parameter(Mandatory)][AllowEmptyCollection()][object[]]$Left, + [Parameter(Mandatory)][AllowEmptyCollection()][object[]]$Right + ) + + if ($Left.Count -ne $Right.Count) { return $false } + for ($index = 0; $index -lt $Left.Count; $index++) { + if (-not [string]::Equals([string]$Left[$index], [string]$Right[$index], [System.StringComparison]::Ordinal)) { return $false } + } + return $true +} + +function Test-ExpectedPlanHash { + param( + [Parameter(Mandatory)][string]$ObservedSha256, + [Parameter(Mandatory)][string]$ExpectedSha256 + ) + + if ($ObservedSha256 -notmatch '^[0-9A-Fa-f]{64}$' -or $ExpectedSha256 -notmatch '^[0-9A-Fa-f]{64}$') { return $false } + return [string]::Equals($ObservedSha256, $ExpectedSha256, [System.StringComparison]::OrdinalIgnoreCase) +} + function Get-UniqueOwnersForExactPath { param( [Parameter(Mandatory)][AllowEmptyCollection()][object[]]$Declarations, @@ -486,8 +518,8 @@ function Invoke-OwnershipAudit { continue } $epochOwners = @($matchingEpoch[0].owners) - if (-not (Test-SameStringSet $effectiveOwners $epochOwners)) { - $errors.Add("epoch '$path' owner set differs: effective=$($effectiveOwners -join ', '), epoch=$($epochOwners -join ' -> ')") + if (-not (Test-SameStringSequence $effectiveOwners $epochOwners)) { + $errors.Add("epoch '$path' owner order differs: effective=$($effectiveOwners -join ' -> '), epoch=$($epochOwners -join ' -> ')") } } @@ -679,6 +711,196 @@ function Resolve-ExactCommit { return $resolved } +function Get-PropertyValue { + param( + [AllowNull()]$Object, + [Parameter(Mandatory)][string]$Name + ) + if ($null -eq $Object) { return $null } + $property = $Object.PSObject.Properties[$Name] + if ($null -eq $property) { return $null } + return $property.Value +} + +function Get-EpochEvidenceErrors { + param([Parameter(Mandatory)]$Epoch) + + $errors = [System.Collections.Generic.List[string]]::new() + $path = [string](Get-PropertyValue $Epoch 'path') + [object[]]$owners = @((Get-PropertyValue $Epoch 'ordered_owners') | ForEach-Object { [string]$_ }) + $currentOwner = [string](Get-PropertyValue $Epoch 'current_owner') + $transitionKind = [string](Get-PropertyValue $Epoch 'transition_kind') + [object[]]$predecessors = @((Get-PropertyValue $Epoch 'completed_predecessors')) + $requiredBase = [string](Get-PropertyValue $Epoch 'required_successor_base_sha') + $currentIndex = [array]::IndexOf($owners, $currentOwner) + $ownerCount = @($owners).Count + $predecessorCount = @($predecessors).Count + + if ($ownerCount -lt 2) { $errors.Add("state epoch '$path' must contain at least two ordered owners") } + if (@($owners | Select-Object -Unique).Count -ne $ownerCount) { $errors.Add("state epoch '$path' contains duplicate owners") } + if ($currentIndex -lt 0) { $errors.Add("state epoch '$path' current owner '$currentOwner' is not in its ordered owners") } + if ($transitionKind -notin @('integration', 'rework')) { $errors.Add("state epoch '$path' has unsupported transition_kind '$transitionKind'") } + + if ($transitionKind -eq 'integration' -and $currentIndex -ge 0) { + [object[]]$expectedPredecessors = if ($currentIndex -eq 0) { @() } else { @($owners[0..($currentIndex - 1)]) } + $expectedPredecessorCount = $currentIndex + if ($predecessorCount -ne $expectedPredecessorCount) { + $errors.Add("state epoch '$path' predecessor evidence count is $predecessorCount, expected $expectedPredecessorCount") + } + $integrationShas = [System.Collections.Generic.List[string]]::new() + foreach ($expectedOwner in $expectedPredecessors) { + $matches = @($predecessors | Where-Object { [string](Get-PropertyValue $_ 'owner') -ceq $expectedOwner }) + if ($matches.Count -ne 1) { + $errors.Add("state epoch '$path' predecessor '$expectedOwner' evidence count is $($matches.Count), expected 1") + continue + } + $entry = $matches[0] + $checkerVerdict = [string](Get-PropertyValue $entry 'checker_verdict') + $checkerArtifact = [string](Get-PropertyValue $entry 'checker_artifact') + $postReviewVerdict = [string](Get-PropertyValue $entry 'post_review_verdict') + $postReviewArtifact = [string](Get-PropertyValue $entry 'post_review_artifact') + $integrationSha = [string](Get-PropertyValue $entry 'integration_sha') + if ($checkerVerdict -cne 'PASS' -or [string]::IsNullOrWhiteSpace($checkerArtifact)) { $errors.Add("state epoch '$path' predecessor '$expectedOwner' lacks checker PASS evidence") } + if ($postReviewVerdict -cne 'PASS' -or [string]::IsNullOrWhiteSpace($postReviewArtifact)) { $errors.Add("state epoch '$path' predecessor '$expectedOwner' lacks post-review PASS evidence") } + if ($integrationSha -notmatch '^[0-9a-fA-F]{40}$') { $errors.Add("state epoch '$path' predecessor '$expectedOwner' lacks a full integration SHA") } + else { $integrationShas.Add($integrationSha.ToLowerInvariant()) } + } + if ($expectedPredecessorCount -eq 0) { + if (-not [string]::IsNullOrWhiteSpace($requiredBase)) { $errors.Add("state epoch '$path' first owner must not require a predecessor base") } + } + elseif ($requiredBase -notmatch '^[0-9a-fA-F]{40}$') { + $errors.Add("state epoch '$path' successor base requirement is missing or not a full SHA") + } + elseif ($integrationShas.Count -eq $expectedPredecessorCount -and -not [string]::Equals($requiredBase, $integrationShas[$integrationShas.Count - 1], [System.StringComparison]::OrdinalIgnoreCase)) { + $errors.Add("state epoch '$path' successor base '$requiredBase' does not equal the latest predecessor integration '$($integrationShas[$integrationShas.Count - 1])'") + } + } + elseif ($transitionKind -eq 'rework' -and $currentIndex -ge 0) { + if ($currentIndex -eq 0) { $errors.Add("state epoch '$path' rework transition has no rejected predecessor") } + if ($requiredBase -notmatch '^[0-9a-fA-F]{40}$') { $errors.Add("state epoch '$path' rework base must be a full SHA") } + if ($predecessorCount -ne $currentIndex) { $errors.Add("state epoch '$path' rework predecessor evidence count is $predecessorCount, expected $currentIndex") } + $immediateOwner = if ($currentIndex -gt 0) { $owners[$currentIndex - 1] } else { $null } + for ($ownerIndex = 0; $ownerIndex -lt [math]::Max(0, $currentIndex - 1); $ownerIndex++) { + $acceptedOwner = $owners[$ownerIndex] + $acceptedMatches = @($predecessors | Where-Object { [string](Get-PropertyValue $_ 'owner') -ceq $acceptedOwner }) + if ($acceptedMatches.Count -ne 1) { $errors.Add("state epoch '$path' accepted predecessor '$acceptedOwner' evidence count is $($acceptedMatches.Count), expected 1"); continue } + $accepted = $acceptedMatches[0] + if ([string](Get-PropertyValue $accepted 'checker_verdict') -cne 'PASS' -or [string]::IsNullOrWhiteSpace([string](Get-PropertyValue $accepted 'checker_artifact'))) { $errors.Add("state epoch '$path' accepted predecessor '$acceptedOwner' lacks checker PASS evidence") } + if ([string](Get-PropertyValue $accepted 'post_review_verdict') -cne 'PASS' -or [string]::IsNullOrWhiteSpace([string](Get-PropertyValue $accepted 'post_review_artifact'))) { $errors.Add("state epoch '$path' accepted predecessor '$acceptedOwner' lacks post-review PASS evidence") } + if ([string](Get-PropertyValue $accepted 'integration_sha') -notmatch '^[0-9a-fA-F]{40}$') { $errors.Add("state epoch '$path' accepted predecessor '$acceptedOwner' lacks a full integration SHA") } + } + $matches = @($predecessors | Where-Object { [string](Get-PropertyValue $_ 'owner') -ceq $immediateOwner }) + if ($matches.Count -ne 1) { $errors.Add("state epoch '$path' rework predecessor '$immediateOwner' evidence count is $($matches.Count), expected 1") } + else { + $entry = $matches[0] + $checkerVerdict = [string](Get-PropertyValue $entry 'checker_verdict') + $checkerArtifact = [string](Get-PropertyValue $entry 'checker_artifact') + $checkerSha = [string](Get-PropertyValue $entry 'checker_sha256') + $rejectedHead = [string](Get-PropertyValue $entry 'rejected_head_sha') + $integrationSha = [string](Get-PropertyValue $entry 'integration_sha') + if ($checkerVerdict -notin @('FAIL', 'REVISE_HOLD') -or [string]::IsNullOrWhiteSpace($checkerArtifact) -or $checkerSha -notmatch '^[0-9a-fA-F]{64}$') { + $errors.Add("state epoch '$path' rework predecessor '$immediateOwner' lacks exact rejected-checker evidence") + } + if ($rejectedHead -notmatch '^[0-9a-fA-F]{40}$' -or -not [string]::Equals($rejectedHead, $requiredBase, [System.StringComparison]::OrdinalIgnoreCase)) { $errors.Add("state epoch '$path' rework base does not equal the rejected predecessor head") } + if (-not [string]::IsNullOrWhiteSpace($integrationSha)) { $errors.Add("state epoch '$path' rejected rework predecessor '$immediateOwner' must not claim integration") } + } + } + + return @($errors) +} + +function Invoke-StateContractAudit { + param( + [Parameter(Mandatory)]$StateObject, + [Parameter(Mandatory)]$Ledger, + [Parameter(Mandatory)][string]$ObservedPlanSha256, + [Parameter(Mandatory)][string]$ExpectedPlanSha256 + ) + + $errors = [System.Collections.Generic.List[string]]::new() + if ((Get-PropertyValue $StateObject 'schema_version') -ne 1) { $errors.Add('ownership state schema_version must be 1') } + $statePlan = Get-PropertyValue $StateObject 'plan' + $statePlanPath = [string](Get-PropertyValue $statePlan 'path') + $statePlanSha = [string](Get-PropertyValue $statePlan 'sha256') + if ($statePlanPath -cne '.agent/plans/2026-07-10-engram-production-ready-master-plan.md') { $errors.Add("ownership state plan path '$statePlanPath' is not the canonical tracked master plan") } + if (-not (Test-ExpectedPlanHash -ObservedSha256 $ObservedPlanSha256 -ExpectedSha256 $ExpectedPlanSha256)) { $errors.Add("observed plan SHA256 '$ObservedPlanSha256' does not match expected '$ExpectedPlanSha256'") } + if (-not (Test-ExpectedPlanHash -ObservedSha256 $statePlanSha -ExpectedSha256 $ExpectedPlanSha256)) { $errors.Add("ownership state plan SHA256 '$statePlanSha' does not match expected '$ExpectedPlanSha256'") } + + [object[]]$stateEpochs = @((Get-PropertyValue $StateObject 'path_epochs')) + $seenPaths = [System.Collections.Generic.HashSet[string]]::new([System.StringComparer]::Ordinal) + foreach ($stateEpoch in $stateEpochs) { + $statePath = [string](Get-PropertyValue $stateEpoch 'path') + try { + $normalized = Normalize-OwnershipPath $statePath + if ($normalized.kind -ne 'exact' -or $normalized.path -cne $statePath) { throw "state epoch path must be normalized exact path: '$statePath'" } + } + catch { $errors.Add($_.Exception.Message); continue } + if (-not $seenPaths.Add($statePath)) { $errors.Add("ownership state repeats path '$statePath'") } + $ledgerMatches = @($Ledger.epochs | Where-Object { $_.path -ceq $statePath }) + if ($ledgerMatches.Count -ne 1) { $errors.Add("ownership state path '$statePath' has $($ledgerMatches.Count) matching plan epochs, expected 1") } + else { + $stateOwners = @((Get-PropertyValue $stateEpoch 'ordered_owners') | ForEach-Object { [string]$_ }) + if (-not (Test-SameStringSequence $ledgerMatches[0].owners $stateOwners)) { + $errors.Add("ownership state path '$statePath' order differs from plan: plan=$($ledgerMatches[0].owners -join ' -> '), state=$($stateOwners -join ' -> ')") + } + } + foreach ($evidenceError in @(Get-EpochEvidenceErrors $stateEpoch)) { $errors.Add($evidenceError) } + } + foreach ($planEpoch in $Ledger.epochs) { + if (-not $seenPaths.Contains($planEpoch.path)) { $errors.Add("plan epoch '$($planEpoch.path)' is missing from ownership state") } + } + + return [pscustomobject][ordered]@{ + schema_version = 1 + verdict = if ($errors.Count -eq 0) { 'PASS' } else { 'FAIL' } + plan_sha256 = $statePlanSha + path_epochs = $stateEpochs + errors = @($errors) + } +} + +function Invoke-DiffEpochAuthority { + param( + [Parameter(Mandatory)][string]$Slice, + [Parameter(Mandatory)][AllowEmptyCollection()][object[]]$ChangedPaths, + [Parameter(Mandatory)]$State, + [Parameter(Mandatory)][string]$Repository, + [Parameter(Mandatory)][string]$BaseResolved + ) + + $errors = [System.Collections.Generic.List[string]]::new() + $evaluated = [System.Collections.Generic.List[object]]::new() + [object[]]$stateEpochs = @((Get-PropertyValue $State 'path_epochs')) + foreach ($path in @($ChangedPaths | Sort-Object -Unique)) { + $matches = @($stateEpochs | Where-Object { [string](Get-PropertyValue $_ 'path') -ceq [string]$path }) + if ($matches.Count -eq 0) { continue } + if ($matches.Count -ne 1) { $errors.Add("changed epoch path '$path' has $($matches.Count) state records"); continue } + $epoch = $matches[0] + foreach ($evidenceError in @(Get-EpochEvidenceErrors $epoch)) { $errors.Add($evidenceError) } + $currentOwner = [string](Get-PropertyValue $epoch 'current_owner') + $transitionKind = [string](Get-PropertyValue $epoch 'transition_kind') + $requiredBase = [string](Get-PropertyValue $epoch 'required_successor_base_sha') + $ownerPass = $currentOwner -ceq $Slice + if (-not $ownerPass) { $errors.Add("changed epoch path '$path' current owner is '$currentOwner', not '$Slice'") } + $basePass = if ($ownerPass) { $true } else { $null } + if ($ownerPass -and -not [string]::IsNullOrWhiteSpace($requiredBase)) { + if ($transitionKind -eq 'rework') { + $basePass = [string]::Equals($requiredBase, $BaseResolved, [System.StringComparison]::OrdinalIgnoreCase) + if (-not $basePass) { $errors.Add("rework slice '$Slice' base '$BaseResolved' must equal rejected predecessor '$requiredBase' for '$path'") } + } + else { + & git -C $Repository merge-base --is-ancestor $requiredBase $BaseResolved 2>$null + $ancestorExit = $LASTEXITCODE + $basePass = $ancestorExit -eq 0 + if ($ancestorExit -eq 1) { $errors.Add("slice '$Slice' base '$BaseResolved' does not descend from predecessor integration '$requiredBase' for '$path'") } + elseif ($ancestorExit -ne 0) { $errors.Add("predecessor ancestry check failed with exit $ancestorExit for '$path'") } + } + } + $evaluated.Add([pscustomobject][ordered]@{ path = $path; current_owner = $currentOwner; owner_pass = $ownerPass; transition_kind = $transitionKind; required_base_sha = $requiredBase; base_pass = $basePass }) + } + return [pscustomobject][ordered]@{ verdict = if ($errors.Count -eq 0) { 'PASS' } else { 'FAIL' }; evaluated = @($evaluated); errors = @($errors) } +} + function New-SyntheticPlan { param( [Parameter(Mandatory)][string]$Rows, @@ -706,10 +928,80 @@ function Assert-SelfTestCondition { if (-not $Condition) { throw "SELFTEST FAIL: $Message" } } +function New-SyntheticOwnershipState { + param( + [Parameter(Mandatory)][string]$PlanSha256, + [Parameter(Mandatory)][string]$RequiredIntegrationSha, + [switch]$MissingPredecessorEvidence + ) + + $predecessors = if ($MissingPredecessorEvidence) { @() } else { + @([pscustomobject][ordered]@{ + owner = 'A' + checker_verdict = 'PASS' + checker_artifact = '.agent/reviews/a-check.md' + post_review_verdict = 'PASS' + post_review_artifact = '.agent/reviews/a-post-review.md' + integration_sha = $RequiredIntegrationSha + }) + } + return [pscustomobject][ordered]@{ + schema_version = 1 + plan = [pscustomobject][ordered]@{ path = '.agent/plans/synthetic.md'; sha256 = $PlanSha256 } + path_epochs = @([pscustomobject][ordered]@{ + path = 'src/shared.go' + ordered_owners = @('A', 'B') + current_owner = 'B' + transition_kind = 'integration' + completed_predecessors = $predecessors + required_successor_base_sha = $RequiredIntegrationSha + }) + } +} + function Invoke-SelfTest { $reorderedEpoch = New-SyntheticPlan -Rows "| A | ``work/a`` | ``src/shared.go`` | none | proof |`n| B | ``work/b`` | ``src/shared.go`` | A integrated | proof |" -EpochRows '| `src/shared.go` | B | A | B checker and post-review PASS, commit integrated, A rebased |' $reorderedResult = Invoke-OwnershipAudit $reorderedEpoch 'selftest-reordered-epoch' - Assert-SelfTestCondition ($reorderedResult.verdict -eq 'PASS') ("epoch owner set fixture failed: " + ($reorderedResult.errors -join '; ')) + Assert-SelfTestCondition ($reorderedResult.verdict -eq 'FAIL') 'reversed epoch order was accepted' + + $orderedEpoch = New-SyntheticPlan -Rows "| A | ``work/a`` | ``src/shared.go`` | none | proof |`n| B | ``work/b`` | ``src/shared.go`` | A integrated | proof |" -EpochRows '| `src/shared.go` | A | B | A checker and post-review PASS, commit integrated, B rebased |' + $orderedResult = Invoke-OwnershipAudit $orderedEpoch 'selftest-ordered-epoch' + Assert-SelfTestCondition ($orderedResult.verdict -eq 'PASS') ("correct epoch order was rejected: " + ($orderedResult.errors -join '; ')) + + $repository = ([string]@(& git rev-parse --show-toplevel 2>&1)[-1]).Trim() + $positiveBase = ([string]@(& git -C $repository rev-parse HEAD 2>&1)[-1]).Trim().ToLowerInvariant() + $requiredIntegration = ([string]@(& git -C $repository rev-parse HEAD^ 2>&1)[-1]).Trim().ToLowerInvariant() + $wrongBase = ([string]@(& git -C $repository rev-list --max-parents=0 HEAD 2>&1)[0]).Trim().ToLowerInvariant() + $syntheticPlanHash = ('a' * 64) + $state = New-SyntheticOwnershipState -PlanSha256 $syntheticPlanHash -RequiredIntegrationSha $requiredIntegration + $missingEvidenceState = New-SyntheticOwnershipState -PlanSha256 $syntheticPlanHash -RequiredIntegrationSha $requiredIntegration -MissingPredecessorEvidence + $firstOwnerState = [pscustomobject][ordered]@{ + path = 'src/shared.go'; ordered_owners = @('A', 'B'); current_owner = 'A'; transition_kind = 'integration' + completed_predecessors = @(); required_successor_base_sha = $null + } + Assert-SelfTestCondition (@(Get-EpochEvidenceErrors $firstOwnerState).Count -eq 0) 'first owner with an empty predecessor list was rejected or raised under StrictMode' + $reworkEpoch = [pscustomobject][ordered]@{ + path = 'src/shared.go'; ordered_owners = @('A', 'B'); current_owner = 'B'; transition_kind = 'rework' + completed_predecessors = @([pscustomobject][ordered]@{ + owner = 'A'; checker_verdict = 'FAIL'; checker_artifact = '.agent/reviews/a-check.md' + checker_sha256 = ('c' * 64); rejected_head_sha = $requiredIntegration; integration_sha = $null + }) + required_successor_base_sha = $requiredIntegration + } + Assert-SelfTestCondition (@(Get-EpochEvidenceErrors $reworkEpoch).Count -eq 0) 'valid rejected-head rework evidence was rejected' + $reworkWrongHead = $reworkEpoch.PSObject.Copy(); $reworkWrongHead.completed_predecessors = @($reworkEpoch.completed_predecessors | ForEach-Object { $_.PSObject.Copy() }); $reworkWrongHead.completed_predecessors[0].rejected_head_sha = $wrongBase + Assert-SelfTestCondition (@(Get-EpochEvidenceErrors $reworkWrongHead).Count -gt 0) 'rework state whose required base differs from the rejected head was accepted' + Assert-SelfTestCondition (Test-ExpectedPlanHash -ObservedSha256 $syntheticPlanHash -ExpectedSha256 $syntheticPlanHash) 'matching expected plan hash was rejected' + Assert-SelfTestCondition (-not (Test-ExpectedPlanHash -ObservedSha256 $syntheticPlanHash -ExpectedSha256 ('b' * 64))) 'mismatched expected plan hash was accepted' + $nonCurrentOwner = Invoke-DiffEpochAuthority -Slice A -ChangedPaths @('src/shared.go') -State $state -Repository $repository -BaseResolved $positiveBase + Assert-SelfTestCondition ($nonCurrentOwner.verdict -eq 'FAIL') 'non-current epoch owner was accepted' + Assert-SelfTestCondition (@($nonCurrentOwner.errors).Count -eq 1 -and $null -eq $nonCurrentOwner.evaluated[0].base_pass) 'non-current owner incorrectly evaluated the current successor base contract' + $missingEvidence = Invoke-DiffEpochAuthority -Slice B -ChangedPaths @('src/shared.go') -State $missingEvidenceState -Repository $repository -BaseResolved $positiveBase + Assert-SelfTestCondition ($missingEvidence.verdict -eq 'FAIL') 'successor without checker/post-review/integration evidence was accepted' + $wrongBaseResult = Invoke-DiffEpochAuthority -Slice B -ChangedPaths @('src/shared.go') -State $state -Repository $repository -BaseResolved $wrongBase + Assert-SelfTestCondition ($wrongBaseResult.verdict -eq 'FAIL') 'correct owner on a base that omits the predecessor integration was accepted' + $descendantBaseResult = Invoke-DiffEpochAuthority -Slice B -ChangedPaths @('src/shared.go') -State $state -Repository $repository -BaseResolved $positiveBase + Assert-SelfTestCondition ($descendantBaseResult.verdict -eq 'PASS') ("descendant successor base was rejected: " + ($descendantBaseResult.errors -join '; ')) $undeclared = New-SyntheticPlan -Rows "| A | ``work/a`` | ``src/shared.go`` | none | proof |`n| B | ``work/b`` | ``src/shared.go`` | none | proof |" -EpochRows '' Assert-SelfTestCondition ((Invoke-OwnershipAudit $undeclared 'selftest-undeclared').verdict -eq 'FAIL') 'undeclared exact overlap was accepted' @@ -795,39 +1087,63 @@ if ($SelfTest) { Invoke-SelfTest; exit 0 } $startedAt = [DateTimeOffset]::UtcNow $planHash = $null $planPath = if (Test-Path -LiteralPath $Plan) { [System.IO.Path]::GetFullPath($Plan) } else { $Plan } +$stateHash = $null +$statePath = if (Test-Path -LiteralPath $State) { [System.IO.Path]::GetFullPath($State) } else { $State } +$stateObject = $null +$stateAudit = $null $artifactObject = $null $exitCode = 1 try { if (-not (Test-Path -LiteralPath $Plan -PathType Leaf)) { throw "ownership plan does not exist: $Plan" } + if ([string]::IsNullOrWhiteSpace($ExpectedPlanSha256) -or $ExpectedPlanSha256 -notmatch '^[0-9A-Fa-f]{64}$') { throw '-ExpectedPlanSha256 is required and must be a full 64-hex SHA256' } + if (-not (Test-Path -LiteralPath $State -PathType Leaf)) { throw "ownership state does not exist: $State" } $planHash = (Get-FileHash -LiteralPath $Plan -Algorithm SHA256).Hash.ToLowerInvariant() + $stateHash = (Get-FileHash -LiteralPath $State -Algorithm SHA256).Hash.ToLowerInvariant() $text = Get-Content -LiteralPath $Plan -Raw $ledger = Invoke-OwnershipAudit $text $planPath + try { $stateObject = Get-Content -LiteralPath $State -Raw | ConvertFrom-Json -Depth 100 } + catch { throw "ownership state is invalid JSON: $($_.Exception.Message)" } + $stateAudit = Invoke-StateContractAudit -StateObject $stateObject -Ledger $ledger -ObservedPlanSha256 $planHash -ExpectedPlanSha256 $ExpectedPlanSha256 if ($Mode -eq 'Ledger') { + $authorityErrors = @($ledger.errors) + @($stateAudit.errors) $finishedAt = [DateTimeOffset]::UtcNow $artifactObject = [ordered]@{ schema_version = 2 gate = 'plan-path-ownership' mode = 'Ledger' - verdict = $ledger.verdict + verdict = if ($authorityErrors.Count -eq 0) { 'PASS' } else { 'FAIL' } started_at = $startedAt.ToString('O') finished_at = $finishedAt.ToString('O') duration_seconds = [math]::Round(($finishedAt - $startedAt).TotalSeconds, 3) - plan = [ordered]@{ path = $planPath; sha256 = $planHash } - counts = $ledger.counts + plan = [ordered]@{ path = $planPath; expected_sha256 = $ExpectedPlanSha256.ToLowerInvariant(); observed_sha256 = $planHash; hash_match = (Test-ExpectedPlanHash $planHash $ExpectedPlanSha256) } + state = [ordered]@{ path = $statePath; sha256 = $stateHash; verdict = $stateAudit.verdict; plan_sha256 = $stateAudit.plan_sha256 } + counts = [ordered]@{ + maker_slices = $ledger.counts.maker_slices + declarations = $ledger.counts.declarations + exact_paths = $ledger.counts.exact_paths + prefixes = $ledger.counts.prefixes + repeated_exact_paths = $ledger.counts.repeated_exact_paths + prefix_intersections = $ledger.counts.prefix_intersections + undeclared_prefix_intersections = $ledger.counts.undeclared_prefix_intersections + declared_epochs = $ledger.counts.declared_epochs + state_epochs = @($stateAudit.path_epochs).Count + errors = $authorityErrors.Count + } slices = $ledger.slices declarations = $ledger.declarations repeated_exact_paths = $ledger.repeated_exact_paths prefix_intersections = $ledger.prefix_intersections epochs = $ledger.epochs - errors = $ledger.errors + errors = $authorityErrors } - $exitCode = if ($ledger.verdict -eq 'PASS') { 0 } else { 1 } + $exitCode = if ($authorityErrors.Count -eq 0) { 0 } else { 1 } } else { $errors = [System.Collections.Generic.List[string]]::new() foreach ($ledgerError in $ledger.errors) { $errors.Add("ledger: $ledgerError") } + foreach ($stateError in $stateAudit.errors) { $errors.Add("state: $stateError") } if ([string]::IsNullOrWhiteSpace($Slice)) { $errors.Add('Diff mode requires -Slice') } if ([string]::IsNullOrWhiteSpace($Base)) { $errors.Add('Diff mode requires -Base') } if ([string]::IsNullOrWhiteSpace($Head)) { $errors.Add('Diff mode requires -Head') } @@ -890,6 +1206,12 @@ try { } } + $epochAuthority = [pscustomobject][ordered]@{ verdict = 'FAIL'; evaluated = @(); errors = @('epoch authority was not evaluated') } + if ($repoRoot -and $baseResolved -and $stateObject -and $parsedDiff.errors.Count -eq 0) { + $epochAuthority = Invoke-DiffEpochAuthority -Slice $Slice -ChangedPaths @($diffAudit.changed_paths | ForEach-Object path) -State $stateObject -Repository $repoRoot -BaseResolved $baseResolved + foreach ($epochError in $epochAuthority.errors) { $errors.Add("epoch: $epochError") } + } + $finishedAt = [DateTimeOffset]::UtcNow $verdict = if ($errors.Count -eq 0) { 'PASS' } else { 'FAIL' } $artifactObject = [ordered]@{ @@ -900,7 +1222,8 @@ try { started_at = $startedAt.ToString('O') finished_at = $finishedAt.ToString('O') duration_seconds = [math]::Round(($finishedAt - $startedAt).TotalSeconds, 3) - plan = [ordered]@{ path = $planPath; sha256 = $planHash; ledger_verdict = $ledger.verdict } + plan = [ordered]@{ path = $planPath; expected_sha256 = $ExpectedPlanSha256.ToLowerInvariant(); observed_sha256 = $planHash; hash_match = (Test-ExpectedPlanHash $planHash $ExpectedPlanSha256); ledger_verdict = $ledger.verdict } + state = [ordered]@{ path = $statePath; sha256 = $stateHash; verdict = $stateAudit.verdict; plan_sha256 = $stateAudit.plan_sha256 } slice = [ordered]@{ name = $Slice row_count = $sliceRows.Count @@ -927,6 +1250,7 @@ try { diff_entries = @($parsedDiff.entries) changed_paths = @($diffAudit.changed_paths) violations = @($diffAudit.violations) + epoch_authority = $epochAuthority errors = @($errors) } $exitCode = if ($verdict -eq 'PASS') { 0 } else { 1 } @@ -942,7 +1266,8 @@ catch { started_at = $startedAt.ToString('O') finished_at = $finishedAt.ToString('O') duration_seconds = [math]::Round(($finishedAt - $startedAt).TotalSeconds, 3) - plan = [ordered]@{ path = $planPath; sha256 = $planHash } + plan = [ordered]@{ path = $planPath; expected_sha256 = $ExpectedPlanSha256; observed_sha256 = $planHash } + state = [ordered]@{ path = $statePath; sha256 = $stateHash } errors = @($_.Exception.Message) } $exitCode = 1 diff --git a/scripts/production-gates/run-db-suite.ps1 b/scripts/production-gates/run-db-suite.ps1 index a2307a24..d3bd767c 100644 --- a/scripts/production-gates/run-db-suite.ps1 +++ b/scripts/production-gates/run-db-suite.ps1 @@ -72,9 +72,10 @@ Options: -AdminDsn Admin URL or ENGRAM_TEST_ADMIN_DSN; always redacted. -PostgresContainer Use psql through docker exec; else host psql. -DevStandAction Execute the tracked isolated stand lifecycle. Up - generates a process-local cryptographic admin token, + generates three distinct process-local cryptographic + PostgreSQL/admin/bootstrap credentials, validates exact compose service/image labels, and - proves /health + /api/ready without persisting token. + proves /health + /api/ready without persisting them. Scan runs Docker Scout against the exact running tags and fails on any HIGH or CRITICAL vulnerability. -ComposeProject Exact isolated compose project label. @@ -259,33 +260,107 @@ function Test-ReadyStatusPayload { return $null -ne $statusProperty -and [string]$statusProperty.Value -ceq 'ready' } +function Test-LivenessStatusPayload { + param([AllowNull()][AllowEmptyString()][string]$Payload) + if ([string]::IsNullOrWhiteSpace($Payload)) { return $false } + try { $parsed = $Payload | ConvertFrom-Json -Depth 20 } catch { return $false } + $statusProperty = $parsed.PSObject.Properties['status'] + return $null -ne $statusProperty -and [string]$statusProperty.Value -cin @('starting', 'ready', 'error') -and [string]$statusProperty.Value -ceq ([string]$statusProperty.Value).ToLowerInvariant() +} + +function Get-HttpJsonContractResult { + param( + [Parameter(Mandatory)][AllowEmptyString()][string]$CapturedOutput, + [Parameter(Mandatory)][ValidateSet('liveness', 'readiness')][string]$ContractKind + ) + + $normalized = $CapturedOutput.TrimEnd("`r", "`n") + $lastNewline = $normalized.LastIndexOf("`n") + if ($lastNewline -lt 0) { + return [pscustomobject]@{ Pass = $false; StatusCode = $null; Payload = $normalized; Error = 'curl output did not contain a trailing HTTP status line' } + } + $payload = $normalized.Substring(0, $lastNewline).TrimEnd("`r") + $statusCode = $normalized.Substring($lastNewline + 1).Trim() + if ($statusCode -cne '200') { + return [pscustomobject]@{ Pass = $false; StatusCode = $statusCode; Payload = $payload; Error = "expected HTTP 200, got '$statusCode'" } + } + $semanticPass = if ($ContractKind -ceq 'liveness') { Test-LivenessStatusPayload $payload } else { Test-ReadyStatusPayload $payload } + $required = if ($ContractKind -ceq 'liveness') { 'starting|ready|error' } else { 'ready' } + return [pscustomobject]@{ + Pass = $semanticPass; StatusCode = $statusCode; Payload = $payload + Error = if ($semanticPass) { $null } else { "HTTP 200 payload did not satisfy $ContractKind status contract '$required'" } + } +} + function Get-DevStandReadyEndpoints { return @( - [pscustomobject][ordered]@{ name = 'health'; url = 'http://localhost:37778/health'; path_kind = 'direct-server' }, - [pscustomobject][ordered]@{ name = 'api-ready'; url = 'http://localhost:37778/api/ready'; path_kind = 'direct-server' }, - [pscustomobject][ordered]@{ name = 'operator-api-health'; url = 'http://localhost:3001/api/health'; path_kind = 'operator-console-proxy' }, - [pscustomobject][ordered]@{ name = 'operator-api-ready'; url = 'http://localhost:3001/api/ready'; path_kind = 'operator-console-proxy' } + [pscustomobject][ordered]@{ name = 'health'; url = 'http://localhost:37778/health'; path_kind = 'direct-server'; contract_kind = 'liveness' }, + [pscustomobject][ordered]@{ name = 'api-ready'; url = 'http://localhost:37778/api/ready'; path_kind = 'direct-server'; contract_kind = 'readiness' }, + [pscustomobject][ordered]@{ name = 'operator-api-health'; url = 'http://localhost:3001/api/health'; path_kind = 'operator-console-proxy'; contract_kind = 'liveness' }, + [pscustomobject][ordered]@{ name = 'operator-api-ready'; url = 'http://localhost:3001/api/ready'; path_kind = 'operator-console-proxy'; contract_kind = 'readiness' } + ) +} + +function New-CryptographicSecret { + $bytes = [System.Security.Cryptography.RandomNumberGenerator]::GetBytes(32) + return [Convert]::ToHexString($bytes).ToLowerInvariant() +} + +function Assert-DevStandCredentials { + param([Parameter(Mandatory)][System.Collections.IDictionary]$Credentials) + + $required = @('postgres_password', 'admin_token', 'bootstrap_capability') + $values = [System.Collections.Generic.List[string]]::new() + $forbidden = @('engram', 'password', 'changeme', 'change-me', 'change-me-in-production', 'default', 'admin') + foreach ($name in $required) { + if (-not $Credentials.Contains($name)) { throw "dev-stand credential '$name' is missing" } + $value = [string]$Credentials[$name] + if ([string]::IsNullOrWhiteSpace($value)) { throw "dev-stand credential '$name' is blank" } + if ($value.Length -lt 16) { throw "dev-stand credential '$name' is too short to be cryptographically generated" } + if ($value.ToLowerInvariant() -in $forbidden) { throw "dev-stand credential '$name' uses a forbidden default" } + $values.Add($value) + } + if (@($values | Select-Object -Unique).Count -ne $values.Count) { throw 'dev-stand PostgreSQL, admin, and bootstrap credentials must be distinct' } +} + +function Test-RedactedContainerEnvironment { + param( + [Parameter(Mandatory)][AllowEmptyString()][string]$CapturedJson, + [Parameter(Mandatory)][AllowEmptyCollection()][string[]]$RequiredNames ) + try { $entries = @(ConvertFrom-Json -InputObject $CapturedJson -Depth 20) } catch { return $false } + foreach ($name in $RequiredNames) { + if ($name -notmatch '^[A-Z][A-Z0-9_]*$') { return $false } + if ($entries -cnotcontains "$name=REDACTED_SENSITIVE_VALUE") { return $false } + } + return $true } function Get-DevStandEnvironment { param( [Parameter(Mandatory)][string]$Project, + [Parameter(Mandatory)][string]$PostgresPassword, [Parameter(Mandatory)][string]$AdminToken, - [Parameter(Mandatory)][string]$DatabaseDsn + [Parameter(Mandatory)][string]$BootstrapCapability ) + $credentials = [ordered]@{ postgres_password = $PostgresPassword; admin_token = $AdminToken; bootstrap_capability = $BootstrapCapability } + Assert-DevStandCredentials $credentials + $escapedPassword = [uri]::EscapeDataString($PostgresPassword) + $databaseDsn = "postgres://engram:$escapedPassword@postgres:5432/engram?sslmode=disable" + return @{ COMPOSE_PROJECT_NAME = $Project POSTGRES_PORT = '55433' WORKER_PORT = '37778' OPERATOR_CONSOLE_PORT = '3001' - POSTGRES_PASSWORD = 'engram' - DATABASE_DSN = $DatabaseDsn + POSTGRES_PASSWORD = $PostgresPassword + DATABASE_DSN = $databaseDsn STAND_API_URL = 'http://localhost:37778' STAND_OPERATOR_URL = 'http://localhost:3001' NUXT_OPERATOR_API_TARGET = 'http://server:37777' ENGRAM_AUTH_ADMIN_TOKEN = $AdminToken + ENGRAM_AUTH_BOOTSTRAP_CAPABILITY = $BootstrapCapability ENGRAM_AUTH_DISABLED = 'false' } } @@ -373,9 +448,16 @@ function Invoke-DevStandContract { $tagImageIds = @{} $imageIdentityPass = $true $vulnerabilityScans = [System.Collections.Generic.List[object]]::new() - $tokenGenerated = $false - $ephemeralToken = $null - $tokenPersisted = $false + $credentialsGenerated = $false + $postgresPassword = $null + $adminToken = $null + $bootstrapCapability = $null + $credentialValuesPersisted = $false + $credentialPolicyPass = $false + $credentialRuntimeInjectionPass = $false + $endpointResults = [System.Collections.Generic.List[object]]::new() + $composeOverridePath = $null + $standEnvironment = @{} $automaticFailureCleanup = $false $residualChecksPerformed = $false $residualResourcesZero = $null @@ -383,26 +465,57 @@ function Invoke-DevStandContract { $dockerPath = Get-NativeCommandPath @('docker.exe', 'docker') $curlPath = $null if ($Action -in @('Up', 'Ready')) { $curlPath = Get-NativeCommandPath @('curl.exe', 'curl') } - $standDsn = 'postgres://engram:engram@postgres:5432/engram?sslmode=disable' - $sensitiveValues = [System.Collections.Generic.List[string]]::new(); $sensitiveValues.Add($standDsn) + $standDsn = $null + $sensitiveValues = [System.Collections.Generic.List[string]]::new() try { if ($Action -eq 'Up') { - $tokenBytes = [System.Security.Cryptography.RandomNumberGenerator]::GetBytes(32) - $ephemeralToken = [Convert]::ToHexString($tokenBytes).ToLowerInvariant() - $tokenGenerated = $true; $sensitiveValues.Add($ephemeralToken) - $standEnvironment = Get-DevStandEnvironment -Project $Project -AdminToken $ephemeralToken -DatabaseDsn $standDsn - $up = Invoke-CapturedProcess 'dev-stand-up' $dockerPath @('compose', '-p', $Project, '-f', $File, 'up', '-d', '--build', '--wait') $standEnvironment (Join-Path $actionDirectory 'compose-up.stdout.log') (Join-Path $actionDirectory 'compose-up.stderr.log') $connection @($sensitiveValues) 600 + $postgresPassword = New-CryptographicSecret + $adminToken = New-CryptographicSecret + $bootstrapCapability = New-CryptographicSecret + $credentials = [ordered]@{ postgres_password = $postgresPassword; admin_token = $adminToken; bootstrap_capability = $bootstrapCapability } + Assert-DevStandCredentials $credentials + $credentialPolicyPass = $true + $credentialsGenerated = $true + $standEnvironment = Get-DevStandEnvironment -Project $Project -PostgresPassword $postgresPassword -AdminToken $adminToken -BootstrapCapability $bootstrapCapability + $standDsn = [string]$standEnvironment.DATABASE_DSN + foreach ($secret in @($postgresPassword, $adminToken, $bootstrapCapability, $standDsn)) { $sensitiveValues.Add($secret) } + + $composeOverridePath = Join-Path $actionDirectory 'ephemeral-credential-injection.compose.yaml' + Write-Utf8NoBom $composeOverridePath @' +services: + server: + environment: + ENGRAM_AUTH_BOOTSTRAP_CAPABILITY: "${ENGRAM_AUTH_BOOTSTRAP_CAPABILITY:?required by production dev-stand}" +'@ + $composeArgs = @('compose', '-p', $Project, '-f', $File, '-f', $composeOverridePath) + $up = Invoke-CapturedProcess 'dev-stand-up' $dockerPath (@($composeArgs) + @('up', '-d', '--build', '--wait')) $standEnvironment (Join-Path $actionDirectory 'compose-up.stdout.log') (Join-Path $actionDirectory 'compose-up.stderr.log') $connection @($sensitiveValues) 600 if ($up.ExitCode -ne 0) { throw "compose up failed with exit $($up.ExitCode)" } + + $postgresContainer = Invoke-CapturedProcess 'dev-stand-postgres-container-id' $dockerPath (@($composeArgs) + @('ps', '-q', 'postgres')) $standEnvironment (Join-Path $actionDirectory 'postgres-container-id.stdout.log') (Join-Path $actionDirectory 'postgres-container-id.stderr.log') $connection @($sensitiveValues) 30 + if ($postgresContainer.ExitCode -ne 0 -or [string]::IsNullOrWhiteSpace($postgresContainer.Stdout)) { throw 'running postgres container ID could not be resolved for credential proof' } + $postgresCredential = Invoke-CapturedProcess 'dev-stand-postgres-credential-injection' $dockerPath @('inspect', $postgresContainer.Stdout.Trim(), '--format', '{{json .Config.Env}}') @{} (Join-Path $actionDirectory 'postgres-credential-injection.stdout.log') (Join-Path $actionDirectory 'postgres-credential-injection.stderr.log') $connection @($sensitiveValues) 30 + if ($postgresCredential.ExitCode -ne 0 -or -not (Test-RedactedContainerEnvironment $postgresCredential.Stdout @('POSTGRES_PASSWORD'))) { throw 'generated PostgreSQL password did not reach the running postgres service exactly' } + + $serverContainer = Invoke-CapturedProcess 'dev-stand-server-container-id' $dockerPath (@($composeArgs) + @('ps', '-q', 'server')) $standEnvironment (Join-Path $actionDirectory 'server-container-id.stdout.log') (Join-Path $actionDirectory 'server-container-id.stderr.log') $connection @($sensitiveValues) 30 + if ($serverContainer.ExitCode -ne 0 -or [string]::IsNullOrWhiteSpace($serverContainer.Stdout)) { throw 'running server container ID could not be resolved for credential proof' } + $serverCredential = Invoke-CapturedProcess 'dev-stand-server-credential-injection' $dockerPath @('inspect', $serverContainer.Stdout.Trim(), '--format', '{{json .Config.Env}}') @{} (Join-Path $actionDirectory 'server-credential-injection.stdout.log') (Join-Path $actionDirectory 'server-credential-injection.stderr.log') $connection @($sensitiveValues) 30 + if ($serverCredential.ExitCode -ne 0 -or -not (Test-RedactedContainerEnvironment $serverCredential.Stdout @('ENGRAM_AUTH_ADMIN_TOKEN', 'ENGRAM_AUTH_BOOTSTRAP_CAPABILITY'))) { throw 'generated admin token/bootstrap capability did not reach the running server service exactly' } + $credentialRuntimeInjectionPass = $true } if ($Action -in @('Up', 'Ready')) { $pgReady = Invoke-CapturedProcess 'dev-stand-postgres-ready' $dockerPath @('compose', '-p', $Project, '-f', $File, 'exec', '-T', 'postgres', 'pg_isready', '-U', 'engram', '-d', 'engram') @{} (Join-Path $actionDirectory 'postgres-ready.stdout.log') (Join-Path $actionDirectory 'postgres-ready.stderr.log') $connection @($sensitiveValues) 30 if ($pgReady.ExitCode -ne 0) { throw "PostgreSQL readiness failed with exit $($pgReady.ExitCode)" } foreach ($endpoint in @(Get-DevStandReadyEndpoints)) { - $http = Invoke-CapturedProcess "dev-stand-$($endpoint.name)" $curlPath @('-fsS', '--max-time', '15', $endpoint.url) @{} (Join-Path $actionDirectory "$($endpoint.name).stdout.log") (Join-Path $actionDirectory "$($endpoint.name).stderr.log") $connection @($sensitiveValues) 30 + $http = Invoke-CapturedProcess "dev-stand-$($endpoint.name)" $curlPath @('-sS', '--max-time', '15', '--write-out', '\n%{http_code}', $endpoint.url) @{} (Join-Path $actionDirectory "$($endpoint.name).stdout.log") (Join-Path $actionDirectory "$($endpoint.name).stderr.log") $connection @($sensitiveValues) 30 if ($http.ExitCode -ne 0) { throw "$($endpoint.url) failed with exit $($http.ExitCode)" } - if (-not (Test-ReadyStatusPayload $http.Stdout)) { throw "$($endpoint.url) returned HTTP success without semantic status=ready" } + $httpContract = Get-HttpJsonContractResult -CapturedOutput $http.Stdout -ContractKind $endpoint.contract_kind + $endpointResults.Add([pscustomobject][ordered]@{ + name = $endpoint.name; url = $endpoint.url; path_kind = $endpoint.path_kind; contract_kind = $endpoint.contract_kind + http_status = $httpContract.StatusCode; semantic_contract_pass = $httpContract.Pass + }) + if (-not $httpContract.Pass) { throw "$($endpoint.url) failed contract: $($httpContract.Error)" } } } @@ -483,7 +596,9 @@ function Invoke-DevStandContract { finally { if ($Action -eq 'Up' -and $errors.Count -gt 0) { $automaticFailureCleanup = $true - $failureDown = Invoke-CapturedProcess 'dev-stand-failure-cleanup' $dockerPath @('compose', '-p', $Project, '-f', $File, 'down', '-v', '--remove-orphans') @{} (Join-Path $actionDirectory 'failure-cleanup.stdout.log') (Join-Path $actionDirectory 'failure-cleanup.stderr.log') $connection @($sensitiveValues) 180 + $failureComposeArgs = @('compose', '-p', $Project, '-f', $File) + if ($composeOverridePath -and (Test-Path -LiteralPath $composeOverridePath -PathType Leaf)) { $failureComposeArgs += @('-f', $composeOverridePath) } + $failureDown = Invoke-CapturedProcess 'dev-stand-failure-cleanup' $dockerPath (@($failureComposeArgs) + @('down', '-v', '--remove-orphans')) $standEnvironment (Join-Path $actionDirectory 'failure-cleanup.stdout.log') (Join-Path $actionDirectory 'failure-cleanup.stderr.log') $connection @($sensitiveValues) 180 if ($failureDown.ExitCode -ne 0) { $errors.Add("automatic failure cleanup failed with exit $($failureDown.ExitCode)") } $residualChecksPerformed = $true $residualResourcesZero = Invoke-DevStandResidualChecks -NamePrefix 'dev-stand-failure-residual' -DockerPath $dockerPath -Project $Project -ActionDirectory $actionDirectory -Connection $connection -Errors $errors @@ -493,11 +608,18 @@ function Invoke-DevStandContract { $finishedAt = [DateTimeOffset]::UtcNow $commandsPath = Join-Path $actionDirectory 'commands.json' Write-Utf8NoBom $commandsPath ((ConvertTo-Json -InputObject @($script:CommandRecords.ToArray()) -Depth 10) + "`n") - if ($tokenGenerated -and -not [string]::IsNullOrWhiteSpace($ephemeralToken)) { + if ($composeOverridePath -and (Test-Path -LiteralPath $composeOverridePath)) { + Remove-Item -LiteralPath $composeOverridePath -Force -ErrorAction SilentlyContinue + } + if ($credentialsGenerated) { foreach ($evidenceFile in Get-ChildItem -LiteralPath $actionDirectory -Recurse -File) { try { - if ([System.IO.File]::ReadAllText($evidenceFile.FullName).Contains($ephemeralToken)) { - $tokenPersisted = $true; $errors.Add("ephemeral admin token persisted in evidence file '$($evidenceFile.FullName)'") + $evidenceText = [System.IO.File]::ReadAllText($evidenceFile.FullName) + foreach ($credential in @($postgresPassword, $adminToken, $bootstrapCapability)) { + if (-not [string]::IsNullOrWhiteSpace($credential) -and $evidenceText.Contains($credential)) { + $credentialValuesPersisted = $true; $errors.Add("ephemeral dev-stand credential persisted in evidence file '$($evidenceFile.FullName)'") + break + } } } catch { $errors.Add("could not secret-scan evidence file '$($evidenceFile.FullName)': $($_.Exception.Message)") } @@ -508,10 +630,18 @@ function Invoke-DevStandContract { started_at = $startedAt.ToString('O'); finished_at = $finishedAt.ToString('O'); duration_seconds = [math]::Round(($finishedAt - $startedAt).TotalSeconds, 3) verdict = if ($errors.Count -eq 0) { 'PASS' } else { 'FAIL' } compose_project = $Project; compose_file = [System.IO.Path]::GetFullPath($File) - ephemeral_admin_token_generated = $tokenGenerated; ephemeral_admin_token_persisted = $tokenPersisted + ephemeral_postgres_password_generated = $credentialsGenerated + ephemeral_admin_token_generated = $credentialsGenerated + ephemeral_bootstrap_capability_generated = $credentialsGenerated + ephemeral_credentials_distinct_and_nondefault = $credentialPolicyPass + ephemeral_credentials_runtime_injected = $credentialRuntimeInjectionPass + ephemeral_postgres_password_persisted = $credentialValuesPersisted + ephemeral_admin_token_persisted = $credentialValuesPersisted + ephemeral_bootstrap_capability_persisted = $credentialValuesPersisted exact_image_targets = [ordered]@{ postgres = 'pgvector/pgvector:pg17'; server = 'ghcr.io/thebtf/engram:main'; 'operator-console' = 'ghcr.io/thebtf/engram-operator-console:main' } actual_images = $actualImages; actual_image_ids = $actualImageIds; tag_image_ids = $tagImageIds - semantic_ready_endpoints = if ($Action -in @('Up', 'Ready')) { @(Get-DevStandReadyEndpoints | ForEach-Object { [ordered]@{ name = $_.name; url = $_.url; path_kind = $_.path_kind; required_status = 'ready' } }) } else { @() } + liveness_endpoints = @($endpointResults | Where-Object contract_kind -ceq 'liveness') + semantic_ready_endpoints = @($endpointResults | Where-Object contract_kind -ceq 'readiness') vulnerability_scan = [ordered]@{ scanner = 'docker scout cves'; severity_gate = @('critical', 'high'); scans = @($vulnerabilityScans) } automatic_failure_cleanup = $automaticFailureCleanup; residual_checks_performed = $residualChecksPerformed; residual_resources_zero = $residualResourcesZero child_commands = $script:CommandRecords.Count; nonzero_child_commands = @($script:CommandRecords | Where-Object exit_code -ne 0).Count @@ -555,13 +685,40 @@ function Invoke-SelfTest { Assert-SelfTestCondition (-not (Test-NoResidualRunSessions 1)) 'a residual post-test session was accepted within the pool budget' Assert-SelfTestCondition (Test-ReadyStatusPayload '{"status":"ready","version":"dev"}') 'semantic ready payload was rejected' foreach ($badPayload in @('{"status":"error"}', '{"status":"Ready"}', '{"version":"dev"}', 'not-json', '')) { Assert-SelfTestCondition (-not (Test-ReadyStatusPayload $badPayload)) "false-ready payload '$badPayload' was accepted" } + foreach ($liveStatus in @('starting', 'ready', 'error')) { Assert-SelfTestCondition (Test-LivenessStatusPayload ("{`"status`":`"$liveStatus`"}")) "valid liveness status '$liveStatus' was rejected" } + foreach ($badPayload in @('{"status":"Ready"}', '{"status":"degraded"}', '{"version":"dev"}', 'not-json', '')) { Assert-SelfTestCondition (-not (Test-LivenessStatusPayload $badPayload)) "invalid liveness payload '$badPayload' was accepted" } + Assert-SelfTestCondition (Get-HttpJsonContractResult -CapturedOutput "{`"status`":`"starting`"}`n200" -ContractKind liveness).Pass 'HTTP 200 liveness payload was rejected' + Assert-SelfTestCondition (Get-HttpJsonContractResult -CapturedOutput "{`"status`":`"ready`"}`n200" -ContractKind readiness).Pass 'HTTP 200 readiness payload was rejected' + Assert-SelfTestCondition (-not (Get-HttpJsonContractResult -CapturedOutput "{`"status`":`"ready`"}`n204" -ContractKind readiness).Pass) 'non-200 readiness response was accepted' + Assert-SelfTestCondition (-not (Get-HttpJsonContractResult -CapturedOutput "{`"status`":`"error`"}`n200" -ContractKind readiness).Pass) 'liveness-only error status was accepted as readiness' $readyEndpoints = @(Get-DevStandReadyEndpoints) Assert-SelfTestCondition ($readyEndpoints.Count -eq 4) 'dev stand does not require both direct and operator-proxied semantic endpoints' - Assert-SelfTestCondition (@($readyEndpoints | Where-Object { $_.name -eq 'operator-api-health' -and $_.url -eq 'http://localhost:3001/api/health' -and $_.path_kind -eq 'operator-console-proxy' }).Count -eq 1) 'operator-console proxied /api/health proof is missing' - Assert-SelfTestCondition (@($readyEndpoints | Where-Object { $_.name -eq 'operator-api-ready' -and $_.url -eq 'http://localhost:3001/api/ready' -and $_.path_kind -eq 'operator-console-proxy' }).Count -eq 1) 'operator-console proxied /api/ready proof is missing' - $standEnvironment = Get-DevStandEnvironment -Project 'engram-critical-stand' -AdminToken 'selftest-token' -DatabaseDsn 'postgres://engram:engram@postgres:5432/engram?sslmode=disable' + Assert-SelfTestCondition (@($readyEndpoints | Where-Object { $_.name -eq 'health' -and $_.contract_kind -eq 'liveness' }).Count -eq 1) 'direct /health is not classified as liveness' + Assert-SelfTestCondition (@($readyEndpoints | Where-Object { $_.name -eq 'api-ready' -and $_.contract_kind -eq 'readiness' }).Count -eq 1) 'direct /api/ready is not classified as readiness' + Assert-SelfTestCondition (@($readyEndpoints | Where-Object { $_.name -eq 'operator-api-health' -and $_.url -eq 'http://localhost:3001/api/health' -and $_.path_kind -eq 'operator-console-proxy' -and $_.contract_kind -eq 'liveness' }).Count -eq 1) 'operator-console proxied /api/health liveness proof is missing' + Assert-SelfTestCondition (@($readyEndpoints | Where-Object { $_.name -eq 'operator-api-ready' -and $_.url -eq 'http://localhost:3001/api/ready' -and $_.path_kind -eq 'operator-console-proxy' -and $_.contract_kind -eq 'readiness' }).Count -eq 1) 'operator-console proxied /api/ready readiness proof is missing' + $credentials = [ordered]@{ postgres_password = 'random-postgres-selftest'; admin_token = 'random-admin-selftest'; bootstrap_capability = 'random-bootstrap-selftest' } + Assert-DevStandCredentials $credentials + foreach ($invalidCredentials in @( + [ordered]@{ postgres_password = ''; admin_token = 'valid-admin-secret-0001'; bootstrap_capability = 'valid-bootstrap-secret-0001' }, + [ordered]@{ postgres_password = 'engram'; admin_token = 'valid-admin-secret-0002'; bootstrap_capability = 'valid-bootstrap-secret-0002' }, + [ordered]@{ postgres_password = 'valid-postgres-secret-0003'; admin_token = 'valid-admin-secret-0003' }, + [ordered]@{ postgres_password = 'same-valid-secret-0004'; admin_token = 'same-valid-secret-0004'; bootstrap_capability = 'same-valid-secret-0004' } + )) { + $rejected = $false + try { Assert-DevStandCredentials $invalidCredentials } catch { $rejected = $true } + Assert-SelfTestCondition $rejected 'blank/default/missing/reused dev-stand credentials were accepted' + } + $standEnvironment = Get-DevStandEnvironment -Project 'engram-critical-stand' -PostgresPassword $credentials.postgres_password -AdminToken $credentials.admin_token -BootstrapCapability $credentials.bootstrap_capability Assert-SelfTestCondition ($standEnvironment.NUXT_OPERATOR_API_TARGET -ceq 'http://server:37777') 'dev stand uses the wrong Nuxt operator API target variable or value' Assert-SelfTestCondition (-not $standEnvironment.ContainsKey('NUXT_ENGRAM_API_TARGET')) 'stale NUXT_ENGRAM_API_TARGET was accepted into the dev stand environment' + Assert-SelfTestCondition ($standEnvironment.POSTGRES_PASSWORD -ceq $credentials.postgres_password) 'generated PostgreSQL password did not reach the compose environment' + Assert-SelfTestCondition ($standEnvironment.ENGRAM_AUTH_ADMIN_TOKEN -ceq $credentials.admin_token) 'generated admin token did not reach the compose environment' + Assert-SelfTestCondition ($standEnvironment.ENGRAM_AUTH_BOOTSTRAP_CAPABILITY -ceq $credentials.bootstrap_capability) 'generated bootstrap capability did not reach the compose environment' + Assert-SelfTestCondition ($standEnvironment.DATABASE_DSN -match '^postgres://engram:[^@]+@postgres:5432/engram\?sslmode=disable$' -and -not $standEnvironment.DATABASE_DSN.Contains(':engram@')) 'generated PostgreSQL password did not reach DATABASE_DSN' + Assert-SelfTestCondition (Test-RedactedContainerEnvironment '["POSTGRES_PASSWORD=REDACTED_SENSITIVE_VALUE","OTHER=value"]' @('POSTGRES_PASSWORD')) 'redacted exact container environment proof was rejected' + Assert-SelfTestCondition (-not (Test-RedactedContainerEnvironment '["POSTGRES_PASSWORD=wrong"]' @('POSTGRES_PASSWORD'))) 'wrong runtime credential value was accepted' + Assert-SelfTestCondition (-not (Test-RedactedContainerEnvironment '["ENGRAM_AUTH_ADMIN_TOKEN=REDACTED_SENSITIVE_VALUE"]' @('ENGRAM_AUTH_ADMIN_TOKEN','ENGRAM_AUTH_BOOTSTRAP_CAPABILITY'))) 'missing runtime bootstrap capability was accepted' $validInventory = Test-ExactDevStandInventory @{ postgres = 'pgvector/pgvector:pg17'; server = 'ghcr.io/thebtf/engram:main'; 'operator-console' = 'ghcr.io/thebtf/engram-operator-console:main' } Assert-SelfTestCondition $validInventory.Pass 'exact compose service/image inventory was rejected' $invalidInventory = Test-ExactDevStandInventory @{ postgres = 'pgvector/pgvector:pg17'; server = 'engram:prc-candidate'; 'operator-console' = 'ghcr.io/thebtf/engram-operator-console:main' } diff --git a/scripts/production-gates/run-dev-stand.ps1 b/scripts/production-gates/run-dev-stand.ps1 index db543c98..a25567ad 100644 --- a/scripts/production-gates/run-dev-stand.ps1 +++ b/scripts/production-gates/run-dev-stand.ps1 @@ -82,6 +82,30 @@ function Assert-ContainsExactLine { if ($count -ne 1) { throw "dev-stand config $Name must appear exactly once; found $count" } } +function Assert-DevStandConfigCredentialPolicy { + param([Parameter(Mandatory)][string]$Text) + + foreach ($sensitiveEnvKey in @('POSTGRES_PASSWORD', 'DATABASE_DSN', 'ENGRAM_AUTH_ADMIN_TOKEN', 'ENGRAM_AUTH_BOOTSTRAP_CAPABILITY')) { + if ($Text -cmatch ("(?m)^\s+" + [regex]::Escape($sensitiveEnvKey) + ':')) { + throw "dev-stand config must not persist sensitive env key '$sensitiveEnvKey'" + } + } + $required = [ordered]@{ + 'generation scope' = ' generation_scope: "three independent cryptographic 256-bit values generated inside the Up runner process"' + 'PostgreSQL password generation' = ' postgres_password: "generated cryptographically inside the Up runner process"' + 'admin token generation' = ' admin_token: "generated cryptographically inside the Up runner process"' + 'bootstrap capability generation' = ' bootstrap_capability: "generated cryptographically inside the Up runner process"' + 'PostgreSQL runtime interface' = ' postgres_runtime_interface: "POSTGRES_PASSWORD plus generated DATABASE_DSN"' + 'admin runtime interface' = ' admin_runtime_interface: "ENGRAM_AUTH_ADMIN_TOKEN"' + 'bootstrap runtime interface' = ' bootstrap_runtime_interface: "ENGRAM_AUTH_BOOTSTRAP_CAPABILITY via ephemeral compose override"' + 'credential distinctness' = ' required_distinct: true' + 'credential forbidden defaults' = ' forbidden_defaults: ["engram", "password", "changeme", "change-me", "change-me-in-production", "default", "admin"]' + 'credential persistence policy' = ' persistence: "never written to raw logs, machine summaries, config, or caller environment"' + 'credential fallback policy' = ' auth_disabled_fallback: false' + } + foreach ($entry in $required.GetEnumerator()) { Assert-ContainsExactLine $Text $entry.Value $entry.Key } +} + function Read-DevStandConfig { param([Parameter(Mandatory)][string]$Path) if (-not (Test-Path -LiteralPath $Path -PathType Leaf)) { throw "dev-stand config does not exist: $Path" } @@ -106,15 +130,10 @@ function Read-DevStandConfig { 'PostgreSQL port' = ' POSTGRES_PORT: "55433"' 'worker port' = ' WORKER_PORT: "37778"' 'operator port' = ' OPERATOR_CONSOLE_PORT: "3001"' - 'PostgreSQL password' = ' POSTGRES_PASSWORD: "engram"' - 'database DSN' = ' DATABASE_DSN: "postgres://engram:engram@postgres:5432/engram?sslmode=disable"' 'stand API URL' = ' STAND_API_URL: "http://localhost:37778"' 'stand operator URL' = ' STAND_OPERATOR_URL: "http://localhost:3001"' 'operator-console API proxy target' = ' NUXT_OPERATOR_API_TARGET: "http://server:37777"' 'auth-disabled policy' = ' ENGRAM_AUTH_DISABLED: "false"' - 'credential generation policy' = ' admin_token: "generated cryptographically inside the Up runner process"' - 'credential persistence policy' = ' persistence: "never written to raw logs, machine summaries, config, or caller environment"' - 'credential fallback policy' = ' auth_disabled_fallback: false' 'image discovery' = ' discovery: "docker service inventory filtered by com.docker.compose.project=engram-critical-stand"' 'image scanner' = ' scanner: "docker scout cves"' 'image scan severities' = ' severities: ["critical", "high"]' @@ -130,6 +149,7 @@ function Read-DevStandConfig { foreach ($requiredLine in $requiredExactLines.GetEnumerator()) { Assert-ContainsExactLine $text $requiredLine.Value $requiredLine.Key } + Assert-DevStandConfigCredentialPolicy $text if ($text -match '(?m)^\s+NUXT_ENGRAM_API_TARGET:') { throw 'dev-stand config must not use stale NUXT_ENGRAM_API_TARGET' } if ($text -match '(?m)^\s+ENGRAM_AUTH_ADMIN_TOKEN:') { throw 'dev-stand config must not persist an admin token' } foreach ($requiredSection in @('up:', 'down:', 'logs:', 'env:', 'credential_policy:', 'image_scan:', 'database_evidence:')) { Assert-ContainsExactLine $text $requiredSection "section $requiredSection" } @@ -163,9 +183,12 @@ function Read-ActionSummary { if ($summary.verdict -cne $expectedVerdict) { throw "$Action exit/verdict mismatch: exit=$ChildExit verdict=$($summary.verdict)" } if ($Action -in @('Up', 'Ready', 'Scan') -and -not (Test-ExactImageMaps $summary)) { throw "$Action did not prove exact tag-to-running-image identity" } if ($Action -eq 'Up') { - if (-not $summary.ephemeral_admin_token_generated -or $summary.ephemeral_admin_token_persisted) { throw 'Up did not prove generated, non-persisted admin credentials' } + if (-not $summary.ephemeral_postgres_password_generated -or -not $summary.ephemeral_admin_token_generated -or -not $summary.ephemeral_bootstrap_capability_generated) { throw 'Up did not prove all three ephemeral credentials were generated' } + if (-not $summary.ephemeral_credentials_distinct_and_nondefault) { throw 'Up did not prove credentials are distinct and reject defaults' } + if (-not $summary.ephemeral_credentials_runtime_injected) { throw 'Up did not prove exact credentials reached the running compose services' } + if ($summary.ephemeral_postgres_password_persisted -or $summary.ephemeral_admin_token_persisted -or $summary.ephemeral_bootstrap_capability_persisted) { throw 'Up persisted an ephemeral credential in evidence' } $commands = Get-Content -LiteralPath $summary.commands -Raw | ConvertFrom-Json -Depth 100 - foreach ($name in @('dev-stand-postgres-ready', 'dev-stand-health', 'dev-stand-api-ready', 'dev-stand-operator-api-health', 'dev-stand-operator-api-ready')) { if (@($commands | Where-Object name -eq $name).Count -ne 1) { throw "Up did not execute '$name' exactly once" } } + foreach ($name in @('dev-stand-postgres-container-id', 'dev-stand-postgres-credential-injection', 'dev-stand-server-container-id', 'dev-stand-server-credential-injection', 'dev-stand-postgres-ready', 'dev-stand-health', 'dev-stand-api-ready', 'dev-stand-operator-api-health', 'dev-stand-operator-api-ready')) { if (@($commands | Where-Object name -eq $name).Count -ne 1) { throw "Up did not execute '$name' exactly once" } } } elseif ($Action -eq 'Ready') { $commands = Get-Content -LiteralPath $summary.commands -Raw | ConvertFrom-Json -Depth 100 @@ -193,6 +216,7 @@ function Invoke-SelfTest { try { if (-not (Test-Path -LiteralPath $Config -PathType Leaf)) { throw "SELFTEST FAIL: config fixture does not exist: $Config" } $base = Get-Content -LiteralPath $Config -Raw + Assert-DevStandConfigCredentialPolicy $base $validPath = Join-Path $root 'valid.yaml'; Write-Utf8NoBom $validPath $base $parsed = Read-DevStandConfig $validPath; Assert-SelfTestCondition ($parsed.Commands.Count -eq 4) 'valid lifecycle config was rejected' $mutations = @( @@ -201,6 +225,12 @@ function Invoke-SelfTest { @{ name = 'wrong operator port'; text = $base.Replace('OPERATOR_CONSOLE_PORT: "3001"', 'OPERATOR_CONSOLE_PORT: "3002"') }, @{ name = 'weaken up timeout'; text = $base.Replace('timeout_seconds: 600', 'timeout_seconds: 60') }, @{ name = 'static credential'; text = $base.Replace('generated cryptographically inside the Up runner process', 'static-token') }, + @{ name = 'blank postgres credential policy'; text = $base.Replace(' postgres_password: "generated cryptographically inside the Up runner process"', ' postgres_password: ""') }, + @{ name = 'default admin credential policy'; text = $base.Replace(' admin_token: "generated cryptographically inside the Up runner process"', ' admin_token: "engram"') }, + @{ name = 'missing bootstrap credential policy'; text = $base.Replace(' bootstrap_capability: "generated cryptographically inside the Up runner process"', '') }, + @{ name = 'reused runtime interface'; text = $base.Replace(' bootstrap_runtime_interface: "ENGRAM_AUTH_BOOTSTRAP_CAPABILITY via ephemeral compose override"', ' bootstrap_runtime_interface: "ENGRAM_AUTH_ADMIN_TOKEN"') }, + @{ name = 'distinct credentials disabled'; text = $base.Replace(' required_distinct: true', ' required_distinct: false') }, + @{ name = 'persisted postgres env'; text = $base.Replace(' POSTGRES_PORT: "55433"', " POSTGRES_PORT: `"55433`"`n POSTGRES_PASSWORD: `"engram`"") }, @{ name = 'remove scan'; text = $base.Replace('-DevStandAction Scan', '-DevStandAction Ready') }, @{ name = 'wrong image'; text = $base.Replace('ghcr.io/thebtf/engram:main', 'engram:prc-candidate') }, @{ name = 'allow findings'; text = $base.Replace('fail_on_findings: true', 'fail_on_findings: false') }, diff --git a/scripts/production-gates/run-node-matrix.ps1 b/scripts/production-gates/run-node-matrix.ps1 new file mode 100644 index 00000000..a4222898 --- /dev/null +++ b/scripts/production-gates/run-node-matrix.ps1 @@ -0,0 +1,376 @@ +[CmdletBinding()] +param( + [ValidateSet('openclaw')][string]$Surface = 'openclaw', + [string]$ArtifactRoot = '.agent/reports/evidence/production-ready/node/openclaw', + [string]$RunId, + [switch]$Audit, + [switch]$SelfTest, + [switch]$Help +) + +Set-StrictMode -Version Latest +$ErrorActionPreference = 'Stop' +$script:CommandRecords = [System.Collections.Generic.List[object]]::new() + +function Write-Utf8NoBom { + param([Parameter(Mandatory)][string]$Path, [Parameter(Mandatory)][AllowEmptyString()][string]$Content) + $parent = Split-Path -Parent $Path + if ($parent) { New-Item -ItemType Directory -Path $parent -Force | Out-Null } + [System.IO.File]::WriteAllText([System.IO.Path]::GetFullPath($Path), $Content, [System.Text.UTF8Encoding]::new($false)) +} + +function Get-Sha256 { + param([Parameter(Mandatory)][string]$Path) + return (Get-FileHash -LiteralPath $Path -Algorithm SHA256).Hash +} + +function Get-ObjectProperty { + param([AllowNull()]$Object, [Parameter(Mandatory)][AllowEmptyString()][string]$Name) + if ($null -eq $Object) { return $null } + if ($Object -is [System.Collections.IDictionary]) { + if ($Object.Contains($Name)) { return $Object[$Name] } + return $null + } + $property = $Object.PSObject.Properties[$Name] + if ($null -eq $property) { return $null } + return $property.Value +} + +function Get-StringMap { + param([AllowNull()]$Object) + $result = [ordered]@{} + if ($null -eq $Object) { return $result } + if ($Object -is [System.Collections.IDictionary]) { + foreach ($key in $Object.Keys) { $result[[string]$key] = [string]$Object[$key] } + return $result + } + foreach ($property in $Object.PSObject.Properties) { $result[$property.Name] = [string]$property.Value } + return $result +} + +function Compare-StringMaps { + param( + [Parameter(Mandatory)][System.Collections.IDictionary]$Expected, + [Parameter(Mandatory)][System.Collections.IDictionary]$Actual, + [Parameter(Mandatory)][string]$Label + ) + $errors = [System.Collections.Generic.List[string]]::new() + $expectedKeys = @($Expected.Keys | ForEach-Object { [string]$_ } | Sort-Object) + $actualKeys = @($Actual.Keys | ForEach-Object { [string]$_ } | Sort-Object) + if (($expectedKeys -join "`n") -cne ($actualKeys -join "`n")) { + $errors.Add("$Label keys differ: package=[$($expectedKeys -join ',')] lock=[$($actualKeys -join ',')]") + return @($errors) + } + foreach ($key in $expectedKeys) { + if ([string]$Expected[$key] -cne [string]$Actual[$key]) { $errors.Add("$Label '$key' differs: package='$($Expected[$key])' lock='$($Actual[$key])'") } + } + return @($errors) +} + +function Test-OpenClawManifestParity { + param( + [Parameter(Mandatory)]$Package, + [Parameter(Mandatory)]$Lock, + [Parameter(Mandatory)]$Plugin + ) + $errors = [System.Collections.Generic.List[string]]::new() + $packageName = [string](Get-ObjectProperty $Package 'name') + $packageVersion = [string](Get-ObjectProperty $Package 'version') + $lockRoot = Get-ObjectProperty (Get-ObjectProperty $Lock 'packages') '' + $lockVersion = Get-ObjectProperty $Lock 'lockfileVersion' + if ($packageName -cne 'openclaw-engram') { $errors.Add("package name must be exact 'openclaw-engram', got '$packageName'") } + if ([string](Get-ObjectProperty $Plugin 'name') -cne 'engram' -or [string](Get-ObjectProperty $Plugin 'id') -cne 'engram') { $errors.Add('openclaw.plugin.json name/id must both be exact engram') } + if ($null -eq $lockRoot) { $errors.Add("package-lock.json packages[''] root is missing") } + if ([string]$lockVersion -cne '3') { $errors.Add("package-lock.json lockfileVersion must be 3, got '$lockVersion'") } + if ([string]::IsNullOrWhiteSpace($packageVersion)) { $errors.Add('package.json version is missing') } + if ($null -ne $lockRoot) { + if ([string](Get-ObjectProperty $Lock 'name') -cne $packageName -or [string](Get-ObjectProperty $lockRoot 'name') -cne $packageName) { $errors.Add('package name differs between package.json and package-lock root/top-level') } + if ([string](Get-ObjectProperty $Lock 'version') -cne $packageVersion -or [string](Get-ObjectProperty $lockRoot 'version') -cne $packageVersion) { $errors.Add('package version differs between package.json and package-lock root/top-level') } + foreach ($errorText in @(Compare-StringMaps (Get-StringMap (Get-ObjectProperty $Package 'dependencies')) (Get-StringMap (Get-ObjectProperty $lockRoot 'dependencies')) 'dependencies')) { $errors.Add($errorText) } + foreach ($errorText in @(Compare-StringMaps (Get-StringMap (Get-ObjectProperty $Package 'devDependencies')) (Get-StringMap (Get-ObjectProperty $lockRoot 'devDependencies')) 'devDependencies')) { $errors.Add($errorText) } + } + if ([string](Get-ObjectProperty $Plugin 'version') -cne $packageVersion) { $errors.Add('openclaw.plugin.json version differs from package.json') } + return [pscustomobject]@{ Pass = $errors.Count -eq 0; Errors = @($errors); PackageName = $packageName; Version = $packageVersion } +} + +function Test-OpenClawPackContents { + param([Parameter(Mandatory)][AllowEmptyString()][string]$Json) + $errors = [System.Collections.Generic.List[string]]::new() + $files = @() + try { + $entries = @(ConvertFrom-Json -InputObject $Json -Depth 100) + if ($entries.Count -ne 1) { $errors.Add("npm pack JSON must contain exactly one package entry, got $($entries.Count)") } + if ($entries.Count -gt 0) { + $files = @((Get-ObjectProperty $entries[0] 'files') | ForEach-Object { + [string](Get-ObjectProperty $_ 'path') -replace '\\', '/' + } | Where-Object { -not [string]::IsNullOrWhiteSpace($_) }) + } + } + catch { $errors.Add("npm pack output is not valid JSON: $($_.Exception.Message)") } + + foreach ($required in @('package.json', 'openclaw.plugin.json', 'dist/index.js', 'dist/index.d.ts', 'scripts/install.sh')) { + if ($files -cnotcontains $required) { $errors.Add("npm pack is missing required file '$required'") } + } + foreach ($file in $files) { + if ($file -eq 'src' -or $file.StartsWith('src/', [System.StringComparison]::Ordinal) -or + $file -eq 'test' -or $file.StartsWith('test/', [System.StringComparison]::Ordinal) -or + $file -eq 'tests' -or $file.StartsWith('tests/', [System.StringComparison]::Ordinal) -or + $file -eq 'node_modules' -or $file.StartsWith('node_modules/', [System.StringComparison]::Ordinal)) { + $errors.Add("npm pack contains forbidden path '$file'") + } + } + return [pscustomobject]@{ Pass = $errors.Count -eq 0; Errors = @($errors); Files = @($files) } +} + +function Test-GitPathNonIgnored { + param([Parameter(Mandatory)][int]$CheckIgnoreExitCode) + return $CheckIgnoreExitCode -eq 1 +} + +function Test-CleanNodeSurface { + param([Parameter(Mandatory)][string]$SurfaceRoot) + return -not (Test-Path -LiteralPath (Join-Path $SurfaceRoot 'node_modules')) -and -not (Test-Path -LiteralPath (Join-Path $SurfaceRoot 'dist')) +} + +function Remove-NodeArtifacts { + param([Parameter(Mandatory)][string]$SurfaceRoot) + $root = [System.IO.Path]::GetFullPath($SurfaceRoot).TrimEnd([System.IO.Path]::DirectorySeparatorChar, [System.IO.Path]::AltDirectorySeparatorChar) + $removed = [System.Collections.Generic.List[string]]::new() + foreach ($name in @('node_modules', 'dist')) { + $target = [System.IO.Path]::GetFullPath((Join-Path $root $name)) + $requiredPrefix = $root + [System.IO.Path]::DirectorySeparatorChar + if (-not $target.StartsWith($requiredPrefix, [System.StringComparison]::OrdinalIgnoreCase)) { throw "refusing cleanup outside node surface: $target" } + if (Test-Path -LiteralPath $target) { Remove-Item -LiteralPath $target -Recurse -Force; $removed.Add($target) } + } + return @($removed) +} + +function Get-NodeMatrixCommandPlan { + param( + [Parameter(Mandatory)][string]$NpmPath, + [Parameter(Mandatory)][string]$SurfaceRoot, + [switch]$AuditEnabled + ) + if (-not $AuditEnabled) { throw 'release node matrix requires -Audit so HIGH findings are fail-closed' } + return @( + [pscustomobject][ordered]@{ name = 'npm-ci'; executable = $NpmPath; arguments = @('ci'); working_directory = $SurfaceRoot }, + [pscustomobject][ordered]@{ name = 'npm-typecheck'; executable = $NpmPath; arguments = @('run', 'typecheck'); working_directory = $SurfaceRoot }, + [pscustomobject][ordered]@{ name = 'npm-test'; executable = $NpmPath; arguments = @('test'); working_directory = $SurfaceRoot }, + [pscustomobject][ordered]@{ name = 'npm-audit-high'; executable = $NpmPath; arguments = @('audit', '--audit-level=high'); working_directory = $SurfaceRoot }, + [pscustomobject][ordered]@{ name = 'npm-pack-dry-run'; executable = $NpmPath; arguments = @('pack', '--dry-run', '--json'); working_directory = $SurfaceRoot } + ) +} + +function Invoke-CapturedProcess { + param( + [Parameter(Mandatory)][string]$Name, + [Parameter(Mandatory)][string]$FilePath, + [Parameter(Mandatory)][AllowEmptyCollection()][string[]]$ArgumentList, + [Parameter(Mandatory)][string]$WorkingDirectory, + [Parameter(Mandatory)][string]$StdoutPath, + [Parameter(Mandatory)][string]$StderrPath, + [ValidateRange(1, 3600)][int]$TimeoutSeconds = 900 + ) + $start = [DateTimeOffset]::UtcNow; $process = $null; $stdout = ''; $stderr = ''; $timedOut = $false; $exitCode = 127 + try { + $info = [System.Diagnostics.ProcessStartInfo]::new() + $info.FileName = $FilePath; $info.WorkingDirectory = $WorkingDirectory; $info.UseShellExecute = $false; $info.CreateNoWindow = $true + $info.RedirectStandardOutput = $true; $info.RedirectStandardError = $true + foreach ($argument in $ArgumentList) { [void]$info.ArgumentList.Add($argument) } + $process = [System.Diagnostics.Process]::new(); $process.StartInfo = $info + if (-not $process.Start()) { throw "process '$FilePath' did not start" } + $stdoutTask = $process.StandardOutput.ReadToEndAsync(); $stderrTask = $process.StandardError.ReadToEndAsync() + $timedOut = -not $process.WaitForExit($TimeoutSeconds * 1000) + if ($timedOut) { try { $process.Kill($true) } catch {}; $process.WaitForExit() } + $stdout = $stdoutTask.GetAwaiter().GetResult(); $stderr = $stderrTask.GetAwaiter().GetResult(); $exitCode = if ($timedOut) { 124 } else { $process.ExitCode } + if ($timedOut) { $stderr += "`nPROCESS_TIMEOUT after $TimeoutSeconds seconds`n" } + } + catch { $stderr = "PROCESS_START_OR_CAPTURE_ERROR: $($_.Exception.Message)`n"; $exitCode = 127 } + finally { if ($null -ne $process) { $process.Dispose() } } + Write-Utf8NoBom $StdoutPath $stdout; Write-Utf8NoBom $StderrPath $stderr + $finished = [DateTimeOffset]::UtcNow + $record = [pscustomobject][ordered]@{ + name = $Name; executable = $FilePath; arguments = @($ArgumentList); command = (@($FilePath) + @($ArgumentList)) -join ' ' + working_directory = [System.IO.Path]::GetFullPath($WorkingDirectory) + started_at = $start.ToString('O'); finished_at = $finished.ToString('O'); duration_seconds = [math]::Round(($finished - $start).TotalSeconds, 3) + exit_code = $exitCode; timed_out = $timedOut; stdout = [System.IO.Path]::GetFullPath($StdoutPath); stderr = [System.IO.Path]::GetFullPath($StderrPath) + } + $script:CommandRecords.Add($record) + return [pscustomobject]@{ ExitCode = $exitCode; Stdout = $stdout; Stderr = $stderr; Record = $record } +} + +function Assert-SelfTestCondition { + param([bool]$Condition, [string]$Message) + if (-not $Condition) { throw "SELFTEST FAIL: $Message" } +} + +function Invoke-SelfTest { + $root = Join-Path ([System.IO.Path]::GetTempPath()) ('run-node-matrix-' + [guid]::NewGuid().ToString('N')) + New-Item -ItemType Directory -Path $root -Force | Out-Null + try { + $package = [ordered]@{ name = 'openclaw-engram'; version = '3.7.5'; dependencies = [ordered]@{ zod = '^3.25.76' }; devDependencies = [ordered]@{ typescript = '^5.9.3' } } + $lock = [ordered]@{ name = 'openclaw-engram'; version = '3.7.5'; lockfileVersion = 3; packages = [ordered]@{ '' = [ordered]@{ name = 'openclaw-engram'; version = '3.7.5'; dependencies = [ordered]@{ zod = '^3.25.76' }; devDependencies = [ordered]@{ typescript = '^5.9.3' } } } } + $plugin = [ordered]@{ name = 'engram'; id = 'engram'; version = '3.7.5' } + $valid = Test-OpenClawManifestParity -Package $package -Lock $lock -Plugin $plugin + Assert-SelfTestCondition $valid.Pass ("matching manifests were rejected: " + ($valid.Errors -join '; ')) + $mismatch = [ordered]@{ name = 'engram'; id = 'engram'; version = '3.7.4' } + Assert-SelfTestCondition (-not (Test-OpenClawManifestParity -Package $package -Lock $lock -Plugin $mismatch).Pass) 'plugin version mismatch was accepted' + $missingLockRoot = [ordered]@{ name = 'openclaw-engram'; version = '3.7.5'; lockfileVersion = 3; packages = [ordered]@{} } + Assert-SelfTestCondition (-not (Test-OpenClawManifestParity -Package $package -Lock $missingLockRoot -Plugin $plugin).Pass) 'missing lock root was accepted' + + $packJson = @([ordered]@{ files = @( + [ordered]@{ path = 'package.json' }, + [ordered]@{ path = 'openclaw.plugin.json' }, + [ordered]@{ path = 'dist/index.js' }, + [ordered]@{ path = 'dist/index.d.ts' }, + [ordered]@{ path = 'scripts/install.sh' }, + [ordered]@{ path = 'README.md' } + ) }) | ConvertTo-Json -Depth 8 + Assert-SelfTestCondition (Test-OpenClawPackContents $packJson).Pass 'valid package dry-run contents were rejected' + $forbiddenPackJson = @([ordered]@{ files = @( + [ordered]@{ path = 'package.json' }, + [ordered]@{ path = 'openclaw.plugin.json' }, + [ordered]@{ path = 'dist/index.js' }, + [ordered]@{ path = 'dist/index.d.ts' }, + [ordered]@{ path = 'scripts/install.sh' }, + [ordered]@{ path = 'src/index.ts' } + ) }) | ConvertTo-Json -Depth 8 + Assert-SelfTestCondition (-not (Test-OpenClawPackContents $forbiddenPackJson).Pass) 'forbidden source path in package dry-run was accepted' + $missingPackJson = @([ordered]@{ files = @([ordered]@{ path = 'package.json' }) }) | ConvertTo-Json -Depth 8 + Assert-SelfTestCondition (-not (Test-OpenClawPackContents $missingPackJson).Pass) 'missing required package dry-run contents were accepted' + Assert-SelfTestCondition (Test-GitPathNonIgnored 1) 'git check-ignore exit 1 was not accepted as non-ignored' + Assert-SelfTestCondition (-not (Test-GitPathNonIgnored 0)) 'ignored lockfile was accepted' + Assert-SelfTestCondition (-not (Test-GitPathNonIgnored 2)) 'git check-ignore error was accepted' + + $surface = Join-Path $root 'surface'; New-Item -ItemType Directory -Path $surface | Out-Null + $outsideSentinel = Join-Path $root 'outside-sentinel'; New-Item -ItemType Directory -Path $outsideSentinel | Out-Null + Assert-SelfTestCondition (Test-CleanNodeSurface $surface) 'clean surface was rejected' + New-Item -ItemType Directory -Path (Join-Path $surface 'node_modules') | Out-Null + New-Item -ItemType Directory -Path (Join-Path $surface 'dist') | Out-Null + Assert-SelfTestCondition (-not (Test-CleanNodeSurface $surface)) 'pre-existing node artifacts were accepted as clean-checkout evidence' + [void](Remove-NodeArtifacts $surface) + Assert-SelfTestCondition (Test-CleanNodeSurface $surface) 'node cleanup left node_modules or dist behind' + Assert-SelfTestCondition (Test-Path -LiteralPath $outsideSentinel -PathType Container) 'node cleanup escaped the exact surface' + + $plan = @(Get-NodeMatrixCommandPlan -NpmPath 'npm' -SurfaceRoot $surface -AuditEnabled) + $names = @($plan | ForEach-Object name) + Assert-SelfTestCondition (($names -join ' -> ') -ceq 'npm-ci -> npm-typecheck -> npm-test -> npm-audit-high -> npm-pack-dry-run') 'node command order drifted' + Assert-SelfTestCondition ((($plan | Where-Object name -eq 'npm-audit-high').arguments -join ' ') -ceq 'audit --audit-level=high') 'high-severity audit command drifted' + Assert-SelfTestCondition ((($plan | Where-Object name -eq 'npm-pack-dry-run').arguments -join ' ') -ceq 'pack --dry-run --json') 'package dry-run command drifted' + Write-Output 'SELFTEST PASS: run-node-matrix.ps1' + } + finally { Remove-Item -LiteralPath $root -Recurse -Force -ErrorAction SilentlyContinue } +} + +if ($Help) { + Write-Output 'run-node-matrix.ps1 -Surface openclaw -Audit [-ArtifactRoot ] [-RunId ]' + Write-Output 'Requires a clean tracked surface and runs: npm ci -> typecheck -> tests -> HIGH audit -> npm pack dry-run.' + exit 0 +} +if ($SelfTest) { Invoke-SelfTest; exit 0 } + +$repoRoot = [System.IO.Path]::GetFullPath((Join-Path $PSScriptRoot '..\..')) +$surfaceRoot = [System.IO.Path]::GetFullPath((Join-Path $repoRoot 'plugin\openclaw-engram')) +$surfaceRelative = 'plugin/openclaw-engram' +$startedAt = [DateTimeOffset]::UtcNow +if ([string]::IsNullOrWhiteSpace($RunId)) { $RunId = $startedAt.ToString('yyyyMMddTHHmmssZ') + '-' + [guid]::NewGuid().ToString('N').Substring(0, 10) } +if ($RunId -notmatch '^[A-Za-z0-9._-]+$') { throw '-RunId may contain only letters, digits, dot, underscore, and hyphen.' } +$artifactDirectory = if ([System.IO.Path]::IsPathRooted($ArtifactRoot)) { Join-Path $ArtifactRoot $RunId } else { Join-Path (Join-Path $repoRoot $ArtifactRoot) $RunId } +if (Test-Path -LiteralPath $artifactDirectory) { throw "node matrix artifact directory already exists: $artifactDirectory" } +New-Item -ItemType Directory -Path $artifactDirectory -Force | Out-Null +$script:CommandRecords.Clear() +$errors = [System.Collections.Generic.List[string]]::new() +$cleanupErrors = [System.Collections.Generic.List[string]]::new() +$manifestParity = $null +$packContents = $null +$manifestHashes = [ordered]@{} +$manifestsTracked = $false +$lockNonIgnored = $false +$removedArtifacts = @() +$preSurfaceClean = $false +$postSurfaceClean = $false +$plannedCommands = @() +$npmPath = $null +$gitPath = $null + +try { + if (-not $Audit) { throw '-Audit is mandatory for the production node matrix' } + if (-not (Test-Path -LiteralPath $surfaceRoot -PathType Container)) { throw "OpenClaw surface is missing: $surfaceRoot" } + $gitPath = (Get-Command git -ErrorAction Stop).Source + $npmCommand = Get-Command npm.cmd -ErrorAction SilentlyContinue + if ($null -eq $npmCommand) { $npmCommand = Get-Command npm -ErrorAction Stop } + $npmPath = $npmCommand.Source + $plannedCommands = @(Get-NodeMatrixCommandPlan -NpmPath $npmPath -SurfaceRoot $surfaceRoot -AuditEnabled) + + $preStatus = Invoke-CapturedProcess 'openclaw-pre-status' $gitPath @('status', '--porcelain=v1', '--untracked-files=all', '--', $surfaceRelative) $repoRoot (Join-Path $artifactDirectory 'pre-status.stdout.log') (Join-Path $artifactDirectory 'pre-status.stderr.log') 30 + if ($preStatus.ExitCode -ne 0) { throw "git pre-status failed with exit $($preStatus.ExitCode)" } + $preSurfaceClean = [string]::IsNullOrWhiteSpace($preStatus.Stdout) -and (Test-CleanNodeSurface $surfaceRoot) + if (-not $preSurfaceClean) { throw 'OpenClaw node matrix requires a clean surface with no node_modules or dist' } + + $packagePath = Join-Path $surfaceRoot 'package.json'; $lockPath = Join-Path $surfaceRoot 'package-lock.json'; $pluginPath = Join-Path $surfaceRoot 'openclaw.plugin.json' + foreach ($requiredPath in @($packagePath, $lockPath, $pluginPath)) { if (-not (Test-Path -LiteralPath $requiredPath -PathType Leaf)) { throw "required OpenClaw manifest is missing: $requiredPath" } } + $tracked = Invoke-CapturedProcess 'openclaw-manifests-tracked' $gitPath @('ls-files', '--error-unmatch', '--', 'plugin/openclaw-engram/package.json', 'plugin/openclaw-engram/package-lock.json', 'plugin/openclaw-engram/openclaw.plugin.json') $repoRoot (Join-Path $artifactDirectory 'tracked.stdout.log') (Join-Path $artifactDirectory 'tracked.stderr.log') 30 + if ($tracked.ExitCode -ne 0) { throw 'OpenClaw package, lock, and plugin manifests must all be tracked' } + $manifestsTracked = $true + $ignored = Invoke-CapturedProcess 'openclaw-lock-non-ignored' $gitPath @('check-ignore', '--no-index', '--quiet', '--', 'plugin/openclaw-engram/package-lock.json') $repoRoot (Join-Path $artifactDirectory 'check-ignore.stdout.log') (Join-Path $artifactDirectory 'check-ignore.stderr.log') 30 + if ($ignored.ExitCode -eq 0) { throw 'OpenClaw package-lock.json is tracked but still matched by an ignore rule' } + if ($ignored.ExitCode -ne 1) { throw "git check-ignore failed with unexpected exit $($ignored.ExitCode)" } + $lockNonIgnored = Test-GitPathNonIgnored $ignored.ExitCode + + $package = Get-Content -LiteralPath $packagePath -Raw | ConvertFrom-Json -AsHashtable -Depth 100 + $lock = Get-Content -LiteralPath $lockPath -Raw | ConvertFrom-Json -AsHashtable -Depth 100 + $plugin = Get-Content -LiteralPath $pluginPath -Raw | ConvertFrom-Json -AsHashtable -Depth 100 + $manifestParity = Test-OpenClawManifestParity -Package $package -Lock $lock -Plugin $plugin + if (-not $manifestParity.Pass) { foreach ($parityError in $manifestParity.Errors) { $errors.Add($parityError) } } + $manifestHashes = [ordered]@{ package_json = Get-Sha256 $packagePath; package_lock_json = Get-Sha256 $lockPath; openclaw_plugin_json = Get-Sha256 $pluginPath } + + if ($errors.Count -eq 0) { + foreach ($command in $plannedCommands) { + $result = Invoke-CapturedProcess $command.name $command.executable @($command.arguments) $command.working_directory (Join-Path $artifactDirectory "$($command.name).stdout.log") (Join-Path $artifactDirectory "$($command.name).stderr.log") 1200 + if ($result.ExitCode -ne 0) { $errors.Add("$($command.name) failed with exit $($result.ExitCode)"); break } + if ($command.name -eq 'npm-pack-dry-run') { + $packContents = Test-OpenClawPackContents $result.Stdout + if (-not $packContents.Pass) { foreach ($packError in $packContents.Errors) { $errors.Add($packError) } } + } + } + } +} +catch { $errors.Add($_.Exception.Message) } +finally { + try { $removedArtifacts = @(Remove-NodeArtifacts $surfaceRoot) } catch { $cleanupErrors.Add($_.Exception.Message) } + try { + if ($null -eq $gitPath) { $gitPath = (Get-Command git -ErrorAction Stop).Source } + $postStatus = Invoke-CapturedProcess 'openclaw-post-cleanup-status' $gitPath @('status', '--porcelain=v1', '--untracked-files=all', '--', $surfaceRelative) $repoRoot (Join-Path $artifactDirectory 'post-status.stdout.log') (Join-Path $artifactDirectory 'post-status.stderr.log') 30 + if ($postStatus.ExitCode -ne 0) { $cleanupErrors.Add("git post-status failed with exit $($postStatus.ExitCode)") } + else { $postSurfaceClean = [string]::IsNullOrWhiteSpace($postStatus.Stdout) -and (Test-CleanNodeSurface $surfaceRoot) } + if (-not $postSurfaceClean) { $cleanupErrors.Add('OpenClaw surface is not clean after unconditional cleanup') } + } + catch { $cleanupErrors.Add($_.Exception.Message) } +} + +foreach ($cleanupError in $cleanupErrors) { $errors.Add("cleanup: $cleanupError") } +$commandsPath = Join-Path $artifactDirectory 'commands.json'; Write-Utf8NoBom $commandsPath ((ConvertTo-Json -InputObject @($script:CommandRecords.ToArray()) -Depth 14) + "`n") +$cleanupPath = Join-Path $artifactDirectory 'cleanup.json'; Write-Utf8NoBom $cleanupPath (([pscustomobject][ordered]@{ removed = @($removedArtifacts); errors = @($cleanupErrors); surface_clean = $postSurfaceClean } | ConvertTo-Json -Depth 8) + "`n") +$finishedAt = [DateTimeOffset]::UtcNow +$summary = [pscustomobject][ordered]@{ + schema_version = 1; gate = 'node-release-matrix'; surface = $Surface; run_id = $RunId + started_at = $startedAt.ToString('O'); finished_at = $finishedAt.ToString('O'); duration_seconds = [math]::Round(($finishedAt - $startedAt).TotalSeconds, 3) + verdict = if ($errors.Count -eq 0) { 'PASS' } else { 'FAIL' } + surface_root = $surfaceRoot; pre_surface_clean = $preSurfaceClean; post_surface_clean = $postSurfaceClean + manifests_tracked_and_present = $manifestsTracked -and $null -ne $manifestParity; lock_non_ignored = $lockNonIgnored + manifest_parity = if ($null -ne $manifestParity) { $manifestParity.Pass } else { $false } + manifest_hashes = $manifestHashes + required_sequence = @('npm-ci', 'npm-typecheck', 'npm-test', 'npm-audit-high', 'npm-pack-dry-run') + planned_sequence = @($plannedCommands | ForEach-Object name) + executed_sequence = @($script:CommandRecords | Where-Object { $_.name -like 'npm-*' } | ForEach-Object name) + audit_level = 'high'; package_dry_run = $null -ne $packContents + package_contents_valid = if ($null -ne $packContents) { $packContents.Pass } else { $false } + package_files = if ($null -ne $packContents) { @($packContents.Files) } else { @() } + cleanup = [System.IO.Path]::GetFullPath($cleanupPath); commands = [System.IO.Path]::GetFullPath($commandsPath) + errors = @($errors); artifact_directory = [System.IO.Path]::GetFullPath($artifactDirectory) +} +$summaryPath = Join-Path $artifactDirectory 'summary.json'; Write-Utf8NoBom $summaryPath (($summary | ConvertTo-Json -Depth 16) + "`n") +Write-Host ("node-matrix surface={0} verdict={1} executed={2} cleanup={3}" -f $Surface, $summary.verdict, $summary.executed_sequence.Count, $summary.post_surface_clean) +Write-Host "summary=$([System.IO.Path]::GetFullPath($summaryPath))" +if ($errors.Count -ne 0) { exit 1 } +exit 0 From 586b39df3465fb51779cf9225deaedbc212e4f9f Mon Sep 17 00:00:00 2001 From: Kirill Turanskiy Date: Fri, 10 Jul 2026 13:02:21 +0300 Subject: [PATCH 017/111] evidence: record release-gate maker handoff --- ...lease-gates-foundation-revision-3-maker.md | 5 + .../plan-governance-commit-diff.json | 124 + .../ownership/release-gates-commit-diff.json | 2857 +++++++++++++++++ .../verification-summary.json | 21 + 4 files changed, 3007 insertions(+) create mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/ownership/plan-governance-commit-diff.json create mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/ownership/release-gates-commit-diff.json diff --git a/.agent/reports/2026-07-10-release-gates-foundation-revision-3-maker.md b/.agent/reports/2026-07-10-release-gates-foundation-revision-3-maker.md index 693278ce..6dae65ae 100644 --- a/.agent/reports/2026-07-10-release-gates-foundation-revision-3-maker.md +++ b/.agent/reports/2026-07-10-release-gates-foundation-revision-3-maker.md @@ -12,6 +12,9 @@ Starting head: `2b3ef3e33bd19e630f8f67d07a9e2521cb98537f` Plan-governance commit: `a1653abf5a1088f45df2c58487a74a886666adf1` +Release-gates implementation/evidence commit: +`badc408937dd6fad0e1dc7ee9fc573505aa617b2` + ## Outcome Revision 3 implements the release-gate foundation corrections required by the @@ -93,6 +96,8 @@ GREEN/fail-closed verification: | PowerShell AST parse | PASS, 8 scripts, 0 errors | | deterministic script self-tests | PASS, 8/8 | | revision-3 ownership Ledger | PASS, 47 slices, 318 declarations, 32 repeated exact paths, 2 declared prefix intersections, 32 state epochs, 0 errors | +| plan-governance commit Diff | PASS, 2 changed paths, 0 violations, 0 errors; SHA256 `EE67CB0DF9ECB298F1E2DF7DAF6993B1111D126C6E34AC80904389D113B861C2` | +| RELEASE-GATES commit Diff | PASS, 134 changed paths, 0 violations, 0 errors; SHA256 `354EF8D59E693445CE7EC921CB62EEDD1B5E9B40DA86E5ACE43408E58FD406ED` | | rejected DB head Diff | expected FAIL, exit 1, 22 changed paths, 0 path violations, exactly 4 current-owner errors | | workflow/config/runner conformance | PASS, 26 semantic mutations rejected | | `actionlint` | PASS, v1.7.12 | diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/ownership/plan-governance-commit-diff.json b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/ownership/plan-governance-commit-diff.json new file mode 100644 index 00000000..89c4cf34 --- /dev/null +++ b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/ownership/plan-governance-commit-diff.json @@ -0,0 +1,124 @@ +{ + "schema_version": 2, + "gate": "plan-path-ownership", + "mode": "Diff", + "verdict": "PASS", + "started_at": "2026-07-10T10:00:53.1646562+00:00", + "finished_at": "2026-07-10T10:00:57.1680947+00:00", + "duration_seconds": 4.003, + "plan": { + "path": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\plans\\2026-07-10-engram-production-ready-master-plan.md", + "expected_sha256": "d371e94dff1ea12767b9d0832240cb6caf52c6c3bbe2209fe4280159c4f03c52", + "observed_sha256": "d371e94dff1ea12767b9d0832240cb6caf52c6c3bbe2209fe4280159c4f03c52", + "hash_match": true, + "ledger_verdict": "PASS" + }, + "state": { + "path": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\plans\\2026-07-10-engram-production-ready-ownership-state.json", + "sha256": "1419e2f7e5236e21dd9a2d8c3271ced2def16dc0a798435ad5a9401fe522d55b", + "verdict": "PASS", + "plan_sha256": "d371e94dff1ea12767b9d0832240cb6caf52c6c3bbe2209fe4280159c4f03c52" + }, + "slice": { + "name": "PLAN-GOVERNANCE", + "row_count": 1, + "declarations": [ + { + "owner": "PLAN-GOVERNANCE", + "branch": "work/prc-release-gates", + "path": ".agent/plans/2026-07-10-engram-production-ready-master-plan.md", + "display": ".agent/plans/2026-07-10-engram-production-ready-master-plan.md", + "kind": "exact", + "line": 6 + }, + { + "owner": "PLAN-GOVERNANCE", + "branch": "work/prc-release-gates", + "path": ".agent/plans/2026-07-10-engram-production-ready-ownership-state.json", + "display": ".agent/plans/2026-07-10-engram-production-ready-ownership-state.json", + "kind": "exact", + "line": 6 + } + ], + "evidence_namespace": { + "kind": "evidence", + "path": ".agent/reports/evidence/production-ready/plan-governance", + "display": ".agent/reports/evidence/production-ready/plan-governance/**", + "match_kind": "prefix", + "policy": "canonical-derived-default" + }, + "report_namespace": { + "kind": "report", + "path": ".agent/reports/production-ready/plan-governance", + "display": ".agent/reports/production-ready/plan-governance/**", + "match_kind": "prefix", + "policy": "canonical-derived-default" + } + }, + "git": { + "repository": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates", + "requested_base": "2b3ef3e33bd19e630f8f67d07a9e2521cb98537f", + "resolved_base": "2b3ef3e33bd19e630f8f67d07a9e2521cb98537f", + "requested_head": "a1653abf5a1088f45df2c58487a74a886666adf1", + "resolved_head": "a1653abf5a1088f45df2c58487a74a886666adf1", + "base_is_ancestor": true, + "name_status_command": "git -c core.quotepath=false diff --name-status --find-renames --find-copies 2b3ef3e33bd19e630f8f67d07a9e2521cb98537f..a1653abf5a1088f45df2c58487a74a886666adf1 --", + "raw_name_status": [ + "A\t.agent/plans/2026-07-10-engram-production-ready-master-plan.md", + "A\t.agent/plans/2026-07-10-engram-production-ready-ownership-state.json" + ] + }, + "counts": { + "diff_entries": 2, + "changed_paths": 2, + "violations": 0, + "errors": 0 + }, + "diff_entries": [ + { + "status": "A", + "paths": [ + ".agent/plans/2026-07-10-engram-production-ready-master-plan.md" + ], + "raw": "A\t.agent/plans/2026-07-10-engram-production-ready-master-plan.md" + }, + { + "status": "A", + "paths": [ + ".agent/plans/2026-07-10-engram-production-ready-ownership-state.json" + ], + "raw": "A\t.agent/plans/2026-07-10-engram-production-ready-ownership-state.json" + } + ], + "changed_paths": [ + { + "status": "A", + "path": ".agent/plans/2026-07-10-engram-production-ready-master-plan.md", + "allowed": true, + "allowed_by": [ + "slice-declaration" + ], + "ownership_matches": [ + ".agent/plans/2026-07-10-engram-production-ready-master-plan.md" + ] + }, + { + "status": "A", + "path": ".agent/plans/2026-07-10-engram-production-ready-ownership-state.json", + "allowed": true, + "allowed_by": [ + "slice-declaration" + ], + "ownership_matches": [ + ".agent/plans/2026-07-10-engram-production-ready-ownership-state.json" + ] + } + ], + "violations": [], + "epoch_authority": { + "verdict": "PASS", + "evaluated": [], + "errors": [] + }, + "errors": [] +} diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/ownership/release-gates-commit-diff.json b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/ownership/release-gates-commit-diff.json new file mode 100644 index 00000000..56d5aa65 --- /dev/null +++ b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/ownership/release-gates-commit-diff.json @@ -0,0 +1,2857 @@ +{ + "schema_version": 2, + "gate": "plan-path-ownership", + "mode": "Diff", + "verdict": "PASS", + "started_at": "2026-07-10T10:00:57.6893607+00:00", + "finished_at": "2026-07-10T10:01:01.6635757+00:00", + "duration_seconds": 3.974, + "plan": { + "path": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\plans\\2026-07-10-engram-production-ready-master-plan.md", + "expected_sha256": "d371e94dff1ea12767b9d0832240cb6caf52c6c3bbe2209fe4280159c4f03c52", + "observed_sha256": "d371e94dff1ea12767b9d0832240cb6caf52c6c3bbe2209fe4280159c4f03c52", + "hash_match": true, + "ledger_verdict": "PASS" + }, + "state": { + "path": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\plans\\2026-07-10-engram-production-ready-ownership-state.json", + "sha256": "1419e2f7e5236e21dd9a2d8c3271ced2def16dc0a798435ad5a9401fe522d55b", + "verdict": "PASS", + "plan_sha256": "d371e94dff1ea12767b9d0832240cb6caf52c6c3bbe2209fe4280159c4f03c52" + }, + "slice": { + "name": "RELEASE-GATES", + "row_count": 1, + "declarations": [ + { + "owner": "RELEASE-GATES", + "branch": "work/prc-release-gates", + "path": ".agent/critical-suite.config.yaml", + "display": ".agent/critical-suite.config.yaml", + "kind": "exact", + "line": 20 + }, + { + "owner": "RELEASE-GATES", + "branch": "work/prc-release-gates", + "path": ".agent/dev-stand.config.yaml", + "display": ".agent/dev-stand.config.yaml", + "kind": "exact", + "line": 20 + }, + { + "owner": "RELEASE-GATES", + "branch": "work/prc-release-gates", + "path": ".github/workflows/test.yml", + "display": ".github/workflows/test.yml", + "kind": "exact", + "line": 20 + }, + { + "owner": "RELEASE-GATES", + "branch": "work/prc-release-gates", + "path": "scripts/production-gates/assert-coverage.ps1", + "display": "scripts/production-gates/assert-coverage.ps1", + "kind": "exact", + "line": 20 + }, + { + "owner": "RELEASE-GATES", + "branch": "work/prc-release-gates", + "path": "scripts/production-gates/assert-go-test-json.ps1", + "display": "scripts/production-gates/assert-go-test-json.ps1", + "kind": "exact", + "line": 20 + }, + { + "owner": "RELEASE-GATES", + "branch": "work/prc-release-gates", + "path": "scripts/production-gates/assert-plan-path-ownership.ps1", + "display": "scripts/production-gates/assert-plan-path-ownership.ps1", + "kind": "exact", + "line": 20 + }, + { + "owner": "RELEASE-GATES", + "branch": "work/prc-release-gates", + "path": "scripts/production-gates/cleanup-db-sessions.ps1", + "display": "scripts/production-gates/cleanup-db-sessions.ps1", + "kind": "exact", + "line": 20 + }, + { + "owner": "RELEASE-GATES", + "branch": "work/prc-release-gates", + "path": "scripts/production-gates/run-critical-suite.ps1", + "display": "scripts/production-gates/run-critical-suite.ps1", + "kind": "exact", + "line": 20 + }, + { + "owner": "RELEASE-GATES", + "branch": "work/prc-release-gates", + "path": "scripts/production-gates/run-db-suite.ps1", + "display": "scripts/production-gates/run-db-suite.ps1", + "kind": "exact", + "line": 20 + }, + { + "owner": "RELEASE-GATES", + "branch": "work/prc-release-gates", + "path": "scripts/production-gates/run-dev-stand.ps1", + "display": "scripts/production-gates/run-dev-stand.ps1", + "kind": "exact", + "line": 20 + }, + { + "owner": "RELEASE-GATES", + "branch": "work/prc-release-gates", + "path": "scripts/production-gates/run-node-matrix.ps1", + "display": "scripts/production-gates/run-node-matrix.ps1", + "kind": "exact", + "line": 20 + }, + { + "owner": "RELEASE-GATES", + "branch": "work/prc-release-gates", + "path": ".agent/reports/2026-07-10-release-gates-foundation-revision-3-maker.md", + "display": ".agent/reports/2026-07-10-release-gates-foundation-revision-3-maker.md", + "kind": "exact", + "line": 20 + }, + { + "owner": "RELEASE-GATES", + "branch": "work/prc-release-gates", + "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3", + "display": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**", + "kind": "prefix", + "line": 20 + } + ], + "evidence_namespace": { + "kind": "evidence", + "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3", + "display": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**", + "match_kind": "prefix", + "policy": "literal-row-exception" + }, + "report_namespace": { + "kind": "report", + "path": ".agent/reports/2026-07-10-release-gates-foundation-revision-3-maker.md", + "display": ".agent/reports/2026-07-10-release-gates-foundation-revision-3-maker.md", + "match_kind": "exact", + "policy": "literal-row-exception" + } + }, + "git": { + "repository": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates", + "requested_base": "a1653abf5a1088f45df2c58487a74a886666adf1", + "resolved_base": "a1653abf5a1088f45df2c58487a74a886666adf1", + "requested_head": "badc408937dd6fad0e1dc7ee9fc573505aa617b2", + "resolved_head": "badc408937dd6fad0e1dc7ee9fc573505aa617b2", + "base_is_ancestor": true, + "name_status_command": "git -c core.quotepath=false diff --name-status --find-renames --find-copies a1653abf5a1088f45df2c58487a74a886666adf1..badc408937dd6fad0e1dc7ee9fc573505aa617b2 --", + "raw_name_status": [ + "M\t.agent/dev-stand.config.yaml", + "A\t.agent/reports/2026-07-10-release-gates-foundation-revision-3-maker.md", + "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/commands.json", + "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/down.stderr.log", + "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/down.stdout.log", + "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-down/commands.json", + "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-down/compose-down.stderr.log", + "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-down/compose-down.stdout.log", + "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-down/dev-stand-residual-containers.stderr.log", + "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-down/dev-stand-residual-containers.stdout.log", + "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-down/dev-stand-residual-networks.stderr.log", + "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-down/dev-stand-residual-networks.stdout.log", + "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-down/dev-stand-residual-volumes.stderr.log", + "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-down/dev-stand-residual-volumes.stdout.log", + "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-down/summary.json", + "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/api-ready.stderr.log", + "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/api-ready.stdout.log", + "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/commands.json", + "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/health.stderr.log", + "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/health.stdout.log", + "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-inspect-operator-console.stderr.log", + "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-inspect-operator-console.stdout.log", + "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-inspect-postgres.stderr.log", + "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-inspect-postgres.stdout.log", + "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-inspect-server.stderr.log", + "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-inspect-server.stdout.log", + "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-inventory.stderr.log", + "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-inventory.stdout.log", + "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-tag-inspect-operator-console.stderr.log", + "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-tag-inspect-operator-console.stdout.log", + "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-tag-inspect-postgres.stderr.log", + "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-tag-inspect-postgres.stdout.log", + "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-tag-inspect-server.stderr.log", + "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-tag-inspect-server.stdout.log", + "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/operator-api-health.stderr.log", + "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/operator-api-health.stdout.log", + "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/operator-api-ready.stderr.log", + "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/operator-api-ready.stdout.log", + "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/postgres-ready.stderr.log", + "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/postgres-ready.stdout.log", + "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/summary.json", + "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/commands.json", + "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/docker-scout-operator-console.sarif.json", + "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/docker-scout-operator-console.stderr.log", + "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/docker-scout-operator-console.stdout.log", + "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/docker-scout-postgres.sarif.json", + "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/docker-scout-postgres.stderr.log", + "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/docker-scout-postgres.stdout.log", + "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/docker-scout-server.sarif.json", + "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/docker-scout-server.stderr.log", + "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/docker-scout-server.stdout.log", + "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-inspect-operator-console.stderr.log", + "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-inspect-operator-console.stdout.log", + "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-inspect-postgres.stderr.log", + "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-inspect-postgres.stdout.log", + "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-inspect-server.stderr.log", + "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-inspect-server.stdout.log", + "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-inventory.stderr.log", + "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-inventory.stdout.log", + "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-tag-inspect-operator-console.stderr.log", + "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-tag-inspect-operator-console.stdout.log", + "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-tag-inspect-postgres.stderr.log", + "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-tag-inspect-postgres.stdout.log", + "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-tag-inspect-server.stderr.log", + "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-tag-inspect-server.stdout.log", + "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/summary.json", + "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/api-ready.stderr.log", + "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/api-ready.stdout.log", + "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/commands.json", + "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/compose-up.stderr.log", + "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/compose-up.stdout.log", + "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/health.stderr.log", + "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/health.stdout.log", + "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-inspect-operator-console.stderr.log", + "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-inspect-operator-console.stdout.log", + "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-inspect-postgres.stderr.log", + "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-inspect-postgres.stdout.log", + "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-inspect-server.stderr.log", + "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-inspect-server.stdout.log", + "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-inventory.stderr.log", + "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-inventory.stdout.log", + "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-tag-inspect-operator-console.stderr.log", + "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-tag-inspect-operator-console.stdout.log", + "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-tag-inspect-postgres.stderr.log", + "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-tag-inspect-postgres.stdout.log", + "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-tag-inspect-server.stderr.log", + "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-tag-inspect-server.stdout.log", + "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/operator-api-health.stderr.log", + "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/operator-api-health.stdout.log", + "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/operator-api-ready.stderr.log", + "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/operator-api-ready.stdout.log", + "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/postgres-container-id.stderr.log", + "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/postgres-container-id.stdout.log", + "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/postgres-credential-injection.stderr.log", + "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/postgres-credential-injection.stdout.log", + "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/postgres-ready.stderr.log", + "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/postgres-ready.stdout.log", + "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/server-container-id.stderr.log", + "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/server-container-id.stdout.log", + "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/server-credential-injection.stderr.log", + "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/server-credential-injection.stdout.log", + "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/summary.json", + "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/ready.stderr.log", + "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/ready.stdout.log", + "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/scan.stderr.log", + "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/scan.stdout.log", + "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/summary.json", + "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/up.stderr.log", + "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/up.stdout.log", + "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-2/cleanup.json", + "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-2/commands.json", + "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-2/post-status.stderr.log", + "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-2/post-status.stdout.log", + "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-2/pre-status.stderr.log", + "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-2/pre-status.stdout.log", + "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-2/summary.json", + "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-3/cleanup.json", + "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-3/commands.json", + "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-3/post-status.stderr.log", + "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-3/post-status.stdout.log", + "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-3/pre-status.stderr.log", + "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-3/pre-status.stdout.log", + "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-3/summary.json", + "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/ownership/db-bulkops-rejected-negative.json", + "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/ownership/ledger-final.json", + "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/tdd/RG3-DEVSTAND.red.json", + "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/tdd/RG3-NODE.red.json", + "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/tdd/RG3-OWNERSHIP.red.json", + "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/verification-summary.json", + "M\t.github/workflows/test.yml", + "M\tscripts/production-gates/assert-plan-path-ownership.ps1", + "M\tscripts/production-gates/run-db-suite.ps1", + "M\tscripts/production-gates/run-dev-stand.ps1", + "A\tscripts/production-gates/run-node-matrix.ps1" + ] + }, + "counts": { + "diff_entries": 134, + "changed_paths": 134, + "violations": 0, + "errors": 0 + }, + "diff_entries": [ + { + "status": "M", + "paths": [ + ".agent/dev-stand.config.yaml" + ], + "raw": "M\t.agent/dev-stand.config.yaml" + }, + { + "status": "A", + "paths": [ + ".agent/reports/2026-07-10-release-gates-foundation-revision-3-maker.md" + ], + "raw": "A\t.agent/reports/2026-07-10-release-gates-foundation-revision-3-maker.md" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/commands.json" + ], + "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/commands.json" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/down.stderr.log" + ], + "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/down.stderr.log" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/down.stdout.log" + ], + "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/down.stdout.log" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-down/commands.json" + ], + "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-down/commands.json" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-down/compose-down.stderr.log" + ], + "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-down/compose-down.stderr.log" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-down/compose-down.stdout.log" + ], + "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-down/compose-down.stdout.log" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-down/dev-stand-residual-containers.stderr.log" + ], + "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-down/dev-stand-residual-containers.stderr.log" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-down/dev-stand-residual-containers.stdout.log" + ], + "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-down/dev-stand-residual-containers.stdout.log" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-down/dev-stand-residual-networks.stderr.log" + ], + "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-down/dev-stand-residual-networks.stderr.log" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-down/dev-stand-residual-networks.stdout.log" + ], + "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-down/dev-stand-residual-networks.stdout.log" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-down/dev-stand-residual-volumes.stderr.log" + ], + "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-down/dev-stand-residual-volumes.stderr.log" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-down/dev-stand-residual-volumes.stdout.log" + ], + "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-down/dev-stand-residual-volumes.stdout.log" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-down/summary.json" + ], + "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-down/summary.json" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/api-ready.stderr.log" + ], + "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/api-ready.stderr.log" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/api-ready.stdout.log" + ], + "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/api-ready.stdout.log" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/commands.json" + ], + "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/commands.json" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/health.stderr.log" + ], + "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/health.stderr.log" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/health.stdout.log" + ], + "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/health.stdout.log" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-inspect-operator-console.stderr.log" + ], + "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-inspect-operator-console.stderr.log" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-inspect-operator-console.stdout.log" + ], + "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-inspect-operator-console.stdout.log" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-inspect-postgres.stderr.log" + ], + "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-inspect-postgres.stderr.log" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-inspect-postgres.stdout.log" + ], + "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-inspect-postgres.stdout.log" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-inspect-server.stderr.log" + ], + "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-inspect-server.stderr.log" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-inspect-server.stdout.log" + ], + "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-inspect-server.stdout.log" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-inventory.stderr.log" + ], + "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-inventory.stderr.log" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-inventory.stdout.log" + ], + "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-inventory.stdout.log" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-tag-inspect-operator-console.stderr.log" + ], + "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-tag-inspect-operator-console.stderr.log" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-tag-inspect-operator-console.stdout.log" + ], + "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-tag-inspect-operator-console.stdout.log" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-tag-inspect-postgres.stderr.log" + ], + "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-tag-inspect-postgres.stderr.log" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-tag-inspect-postgres.stdout.log" + ], + "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-tag-inspect-postgres.stdout.log" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-tag-inspect-server.stderr.log" + ], + "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-tag-inspect-server.stderr.log" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-tag-inspect-server.stdout.log" + ], + "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-tag-inspect-server.stdout.log" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/operator-api-health.stderr.log" + ], + "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/operator-api-health.stderr.log" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/operator-api-health.stdout.log" + ], + "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/operator-api-health.stdout.log" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/operator-api-ready.stderr.log" + ], + "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/operator-api-ready.stderr.log" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/operator-api-ready.stdout.log" + ], + "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/operator-api-ready.stdout.log" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/postgres-ready.stderr.log" + ], + "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/postgres-ready.stderr.log" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/postgres-ready.stdout.log" + ], + "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/postgres-ready.stdout.log" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/summary.json" + ], + "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/summary.json" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/commands.json" + ], + "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/commands.json" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/docker-scout-operator-console.sarif.json" + ], + "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/docker-scout-operator-console.sarif.json" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/docker-scout-operator-console.stderr.log" + ], + "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/docker-scout-operator-console.stderr.log" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/docker-scout-operator-console.stdout.log" + ], + "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/docker-scout-operator-console.stdout.log" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/docker-scout-postgres.sarif.json" + ], + "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/docker-scout-postgres.sarif.json" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/docker-scout-postgres.stderr.log" + ], + "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/docker-scout-postgres.stderr.log" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/docker-scout-postgres.stdout.log" + ], + "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/docker-scout-postgres.stdout.log" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/docker-scout-server.sarif.json" + ], + "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/docker-scout-server.sarif.json" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/docker-scout-server.stderr.log" + ], + "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/docker-scout-server.stderr.log" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/docker-scout-server.stdout.log" + ], + "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/docker-scout-server.stdout.log" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-inspect-operator-console.stderr.log" + ], + "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-inspect-operator-console.stderr.log" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-inspect-operator-console.stdout.log" + ], + "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-inspect-operator-console.stdout.log" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-inspect-postgres.stderr.log" + ], + "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-inspect-postgres.stderr.log" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-inspect-postgres.stdout.log" + ], + "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-inspect-postgres.stdout.log" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-inspect-server.stderr.log" + ], + "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-inspect-server.stderr.log" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-inspect-server.stdout.log" + ], + "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-inspect-server.stdout.log" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-inventory.stderr.log" + ], + "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-inventory.stderr.log" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-inventory.stdout.log" + ], + "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-inventory.stdout.log" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-tag-inspect-operator-console.stderr.log" + ], + "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-tag-inspect-operator-console.stderr.log" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-tag-inspect-operator-console.stdout.log" + ], + "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-tag-inspect-operator-console.stdout.log" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-tag-inspect-postgres.stderr.log" + ], + "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-tag-inspect-postgres.stderr.log" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-tag-inspect-postgres.stdout.log" + ], + "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-tag-inspect-postgres.stdout.log" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-tag-inspect-server.stderr.log" + ], + "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-tag-inspect-server.stderr.log" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-tag-inspect-server.stdout.log" + ], + "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-tag-inspect-server.stdout.log" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/summary.json" + ], + "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/summary.json" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/api-ready.stderr.log" + ], + "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/api-ready.stderr.log" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/api-ready.stdout.log" + ], + "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/api-ready.stdout.log" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/commands.json" + ], + "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/commands.json" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/compose-up.stderr.log" + ], + "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/compose-up.stderr.log" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/compose-up.stdout.log" + ], + "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/compose-up.stdout.log" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/health.stderr.log" + ], + "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/health.stderr.log" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/health.stdout.log" + ], + "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/health.stdout.log" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-inspect-operator-console.stderr.log" + ], + "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-inspect-operator-console.stderr.log" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-inspect-operator-console.stdout.log" + ], + "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-inspect-operator-console.stdout.log" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-inspect-postgres.stderr.log" + ], + "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-inspect-postgres.stderr.log" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-inspect-postgres.stdout.log" + ], + "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-inspect-postgres.stdout.log" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-inspect-server.stderr.log" + ], + "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-inspect-server.stderr.log" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-inspect-server.stdout.log" + ], + "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-inspect-server.stdout.log" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-inventory.stderr.log" + ], + "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-inventory.stderr.log" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-inventory.stdout.log" + ], + "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-inventory.stdout.log" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-tag-inspect-operator-console.stderr.log" + ], + "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-tag-inspect-operator-console.stderr.log" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-tag-inspect-operator-console.stdout.log" + ], + "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-tag-inspect-operator-console.stdout.log" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-tag-inspect-postgres.stderr.log" + ], + "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-tag-inspect-postgres.stderr.log" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-tag-inspect-postgres.stdout.log" + ], + "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-tag-inspect-postgres.stdout.log" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-tag-inspect-server.stderr.log" + ], + "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-tag-inspect-server.stderr.log" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-tag-inspect-server.stdout.log" + ], + "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-tag-inspect-server.stdout.log" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/operator-api-health.stderr.log" + ], + "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/operator-api-health.stderr.log" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/operator-api-health.stdout.log" + ], + "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/operator-api-health.stdout.log" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/operator-api-ready.stderr.log" + ], + "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/operator-api-ready.stderr.log" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/operator-api-ready.stdout.log" + ], + "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/operator-api-ready.stdout.log" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/postgres-container-id.stderr.log" + ], + "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/postgres-container-id.stderr.log" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/postgres-container-id.stdout.log" + ], + "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/postgres-container-id.stdout.log" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/postgres-credential-injection.stderr.log" + ], + "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/postgres-credential-injection.stderr.log" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/postgres-credential-injection.stdout.log" + ], + "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/postgres-credential-injection.stdout.log" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/postgres-ready.stderr.log" + ], + "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/postgres-ready.stderr.log" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/postgres-ready.stdout.log" + ], + "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/postgres-ready.stdout.log" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/server-container-id.stderr.log" + ], + "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/server-container-id.stderr.log" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/server-container-id.stdout.log" + ], + "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/server-container-id.stdout.log" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/server-credential-injection.stderr.log" + ], + "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/server-credential-injection.stderr.log" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/server-credential-injection.stdout.log" + ], + "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/server-credential-injection.stdout.log" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/summary.json" + ], + "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/summary.json" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/ready.stderr.log" + ], + "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/ready.stderr.log" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/ready.stdout.log" + ], + "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/ready.stdout.log" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/scan.stderr.log" + ], + "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/scan.stderr.log" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/scan.stdout.log" + ], + "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/scan.stdout.log" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/summary.json" + ], + "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/summary.json" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/up.stderr.log" + ], + "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/up.stderr.log" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/up.stdout.log" + ], + "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/up.stdout.log" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-2/cleanup.json" + ], + "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-2/cleanup.json" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-2/commands.json" + ], + "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-2/commands.json" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-2/post-status.stderr.log" + ], + "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-2/post-status.stderr.log" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-2/post-status.stdout.log" + ], + "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-2/post-status.stdout.log" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-2/pre-status.stderr.log" + ], + "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-2/pre-status.stderr.log" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-2/pre-status.stdout.log" + ], + "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-2/pre-status.stdout.log" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-2/summary.json" + ], + "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-2/summary.json" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-3/cleanup.json" + ], + "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-3/cleanup.json" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-3/commands.json" + ], + "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-3/commands.json" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-3/post-status.stderr.log" + ], + "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-3/post-status.stderr.log" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-3/post-status.stdout.log" + ], + "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-3/post-status.stdout.log" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-3/pre-status.stderr.log" + ], + "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-3/pre-status.stderr.log" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-3/pre-status.stdout.log" + ], + "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-3/pre-status.stdout.log" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-3/summary.json" + ], + "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-3/summary.json" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/ownership/db-bulkops-rejected-negative.json" + ], + "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/ownership/db-bulkops-rejected-negative.json" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/ownership/ledger-final.json" + ], + "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/ownership/ledger-final.json" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/tdd/RG3-DEVSTAND.red.json" + ], + "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/tdd/RG3-DEVSTAND.red.json" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/tdd/RG3-NODE.red.json" + ], + "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/tdd/RG3-NODE.red.json" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/tdd/RG3-OWNERSHIP.red.json" + ], + "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/tdd/RG3-OWNERSHIP.red.json" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/verification-summary.json" + ], + "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/verification-summary.json" + }, + { + "status": "M", + "paths": [ + ".github/workflows/test.yml" + ], + "raw": "M\t.github/workflows/test.yml" + }, + { + "status": "M", + "paths": [ + "scripts/production-gates/assert-plan-path-ownership.ps1" + ], + "raw": "M\tscripts/production-gates/assert-plan-path-ownership.ps1" + }, + { + "status": "M", + "paths": [ + "scripts/production-gates/run-db-suite.ps1" + ], + "raw": "M\tscripts/production-gates/run-db-suite.ps1" + }, + { + "status": "M", + "paths": [ + "scripts/production-gates/run-dev-stand.ps1" + ], + "raw": "M\tscripts/production-gates/run-dev-stand.ps1" + }, + { + "status": "A", + "paths": [ + "scripts/production-gates/run-node-matrix.ps1" + ], + "raw": "A\tscripts/production-gates/run-node-matrix.ps1" + } + ], + "changed_paths": [ + { + "status": "M", + "path": ".agent/dev-stand.config.yaml", + "allowed": true, + "allowed_by": [ + "slice-declaration" + ], + "ownership_matches": [ + ".agent/dev-stand.config.yaml" + ] + }, + { + "status": "A", + "path": ".agent/reports/2026-07-10-release-gates-foundation-revision-3-maker.md", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "report-namespace" + ], + "ownership_matches": [ + ".agent/reports/2026-07-10-release-gates-foundation-revision-3-maker.md" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/commands.json", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/down.stderr.log", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/down.stdout.log", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-down/commands.json", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-down/compose-down.stderr.log", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-down/compose-down.stdout.log", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-down/dev-stand-residual-containers.stderr.log", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-down/dev-stand-residual-containers.stdout.log", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-down/dev-stand-residual-networks.stderr.log", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-down/dev-stand-residual-networks.stdout.log", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-down/dev-stand-residual-volumes.stderr.log", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-down/dev-stand-residual-volumes.stdout.log", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-down/summary.json", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/api-ready.stderr.log", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/api-ready.stdout.log", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/commands.json", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/health.stderr.log", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/health.stdout.log", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-inspect-operator-console.stderr.log", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-inspect-operator-console.stdout.log", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-inspect-postgres.stderr.log", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-inspect-postgres.stdout.log", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-inspect-server.stderr.log", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-inspect-server.stdout.log", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-inventory.stderr.log", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-inventory.stdout.log", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-tag-inspect-operator-console.stderr.log", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-tag-inspect-operator-console.stdout.log", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-tag-inspect-postgres.stderr.log", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-tag-inspect-postgres.stdout.log", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-tag-inspect-server.stderr.log", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-tag-inspect-server.stdout.log", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/operator-api-health.stderr.log", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/operator-api-health.stdout.log", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/operator-api-ready.stderr.log", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/operator-api-ready.stdout.log", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/postgres-ready.stderr.log", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/postgres-ready.stdout.log", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/summary.json", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/commands.json", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/docker-scout-operator-console.sarif.json", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/docker-scout-operator-console.stderr.log", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/docker-scout-operator-console.stdout.log", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/docker-scout-postgres.sarif.json", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/docker-scout-postgres.stderr.log", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/docker-scout-postgres.stdout.log", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/docker-scout-server.sarif.json", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/docker-scout-server.stderr.log", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/docker-scout-server.stdout.log", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-inspect-operator-console.stderr.log", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-inspect-operator-console.stdout.log", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-inspect-postgres.stderr.log", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-inspect-postgres.stdout.log", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-inspect-server.stderr.log", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-inspect-server.stdout.log", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-inventory.stderr.log", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-inventory.stdout.log", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-tag-inspect-operator-console.stderr.log", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-tag-inspect-operator-console.stdout.log", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-tag-inspect-postgres.stderr.log", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-tag-inspect-postgres.stdout.log", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-tag-inspect-server.stderr.log", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-tag-inspect-server.stdout.log", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/summary.json", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/api-ready.stderr.log", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/api-ready.stdout.log", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/commands.json", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/compose-up.stderr.log", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/compose-up.stdout.log", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/health.stderr.log", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/health.stdout.log", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-inspect-operator-console.stderr.log", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-inspect-operator-console.stdout.log", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-inspect-postgres.stderr.log", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-inspect-postgres.stdout.log", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-inspect-server.stderr.log", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-inspect-server.stdout.log", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-inventory.stderr.log", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-inventory.stdout.log", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-tag-inspect-operator-console.stderr.log", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-tag-inspect-operator-console.stdout.log", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-tag-inspect-postgres.stderr.log", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-tag-inspect-postgres.stdout.log", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-tag-inspect-server.stderr.log", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-tag-inspect-server.stdout.log", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/operator-api-health.stderr.log", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/operator-api-health.stdout.log", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/operator-api-ready.stderr.log", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/operator-api-ready.stdout.log", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/postgres-container-id.stderr.log", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/postgres-container-id.stdout.log", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/postgres-credential-injection.stderr.log", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/postgres-credential-injection.stdout.log", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/postgres-ready.stderr.log", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/postgres-ready.stdout.log", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/server-container-id.stderr.log", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/server-container-id.stdout.log", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/server-credential-injection.stderr.log", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/server-credential-injection.stdout.log", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/summary.json", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/ready.stderr.log", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/ready.stdout.log", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/scan.stderr.log", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/scan.stdout.log", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/summary.json", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/up.stderr.log", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/up.stdout.log", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-2/cleanup.json", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-2/commands.json", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-2/post-status.stderr.log", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-2/post-status.stdout.log", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-2/pre-status.stderr.log", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-2/pre-status.stdout.log", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-2/summary.json", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-3/cleanup.json", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-3/commands.json", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-3/post-status.stderr.log", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-3/post-status.stdout.log", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-3/pre-status.stderr.log", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-3/pre-status.stdout.log", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-3/summary.json", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/ownership/db-bulkops-rejected-negative.json", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/ownership/ledger-final.json", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/tdd/RG3-DEVSTAND.red.json", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/tdd/RG3-NODE.red.json", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/tdd/RG3-OWNERSHIP.red.json", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/verification-summary.json", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" + ] + }, + { + "status": "M", + "path": ".github/workflows/test.yml", + "allowed": true, + "allowed_by": [ + "slice-declaration" + ], + "ownership_matches": [ + ".github/workflows/test.yml" + ] + }, + { + "status": "M", + "path": "scripts/production-gates/assert-plan-path-ownership.ps1", + "allowed": true, + "allowed_by": [ + "slice-declaration" + ], + "ownership_matches": [ + "scripts/production-gates/assert-plan-path-ownership.ps1" + ] + }, + { + "status": "M", + "path": "scripts/production-gates/run-db-suite.ps1", + "allowed": true, + "allowed_by": [ + "slice-declaration" + ], + "ownership_matches": [ + "scripts/production-gates/run-db-suite.ps1" + ] + }, + { + "status": "M", + "path": "scripts/production-gates/run-dev-stand.ps1", + "allowed": true, + "allowed_by": [ + "slice-declaration" + ], + "ownership_matches": [ + "scripts/production-gates/run-dev-stand.ps1" + ] + }, + { + "status": "A", + "path": "scripts/production-gates/run-node-matrix.ps1", + "allowed": true, + "allowed_by": [ + "slice-declaration" + ], + "ownership_matches": [ + "scripts/production-gates/run-node-matrix.ps1" + ] + } + ], + "violations": [], + "epoch_authority": { + "verdict": "PASS", + "evaluated": [ + { + "path": ".github/workflows/test.yml", + "current_owner": "RELEASE-GATES", + "owner_pass": true, + "transition_kind": "integration", + "required_base_sha": "", + "base_pass": true + } + ], + "errors": [] + }, + "errors": [] +} diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/verification-summary.json b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/verification-summary.json index 8c6ad1c0..77aa37b1 100644 --- a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/verification-summary.json +++ b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/verification-summary.json @@ -6,6 +6,7 @@ "verified_at_utc": "2026-07-10T09:52:27.8798155Z", "repository_head": "2b3ef3e33bd19e630f8f67d07a9e2521cb98537f", "plan_governance_commit": "a1653abf5a1088f45df2c58487a74a886666adf1", + "release_gates_commit": "badc408937dd6fad0e1dc7ee9fc573505aa617b2", "plan": { "path": ".agent/plans/2026-07-10-engram-production-ready-master-plan.md", "sha256": "d371e94dff1ea12767b9d0832240cb6caf52c6c3bbe2209fe4280159c4f03c52" @@ -44,6 +45,26 @@ "artifact": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/ownership/ledger-final.json", "sha256": "39d3572086d4690def49d3cc56f2870384ba8c44bf52bf0e27b93a6b39976d57" }, + "plan_governance_commit_diff": { + "verdict": "PASS", + "base": "2b3ef3e33bd19e630f8f67d07a9e2521cb98537f", + "head": "a1653abf5a1088f45df2c58487a74a886666adf1", + "changed_paths": 2, + "ownership_violations": 0, + "errors": 0, + "artifact": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/ownership/plan-governance-commit-diff.json", + "sha256": "ee67cb0df9ecb298f1e2df7daf6993b1111d126c6e34ac80904389d113b861c2" + }, + "release_gates_commit_diff": { + "verdict": "PASS", + "base": "a1653abf5a1088f45df2c58487a74a886666adf1", + "head": "badc408937dd6fad0e1dc7ee9fc573505aa617b2", + "changed_paths": 134, + "ownership_violations": 0, + "errors": 0, + "artifact": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/ownership/release-gates-commit-diff.json", + "sha256": "354ef8d59e693445ce7ec921cb62eedd1b5e9b40da86e5ace43408e58fd406ed" + }, "rejected_db_bulkops_negative": { "verdict": "EXPECTED_FAIL", "runner_exit_code": 1, From bd68c05baf4b7250096dd84f56bebea2aa555970 Mon Sep 17 00:00:00 2001 From: Kirill Turanskiy Date: Fri, 10 Jul 2026 13:39:37 +0300 Subject: [PATCH 018/111] fix: harden candidate review snapshot validation --- internal/db/gorm/candidate_store.go | 60 +++++-- internal/db/gorm/candidate_store_test.go | 192 +++++++++++++++++++++++ 2 files changed, 242 insertions(+), 10 deletions(-) diff --git a/internal/db/gorm/candidate_store.go b/internal/db/gorm/candidate_store.go index 9efff1b6..21ffd6fd 100644 --- a/internal/db/gorm/candidate_store.go +++ b/internal/db/gorm/candidate_store.go @@ -562,6 +562,29 @@ func (s *CandidateStore) validateCandidateReviewSnapshotBinding( if s.auditStore == nil { return fmt.Errorf("%s: candidate_review audit store is required", operation) } + // Candidate-review mutations accept only a constructor-shaped snapshot that + // has never been persisted or entered another lifecycle state. Empty status + // is rejected here instead of relying on SnapshotStore's legacy empty-to- + // committed normalization, so both preflight and transactional revalidation + // enforce one explicit rollback contract. + if strings.TrimSpace(snapshot.SnapshotID) == "" { + return fmt.Errorf("%s: candidate review snapshot_id is required", operation) + } + if snapshot.ID != 0 { + return fmt.Errorf("%s: candidate review snapshot must not have a database id before mutation", operation) + } + if snapshot.Status != models.SnapshotStatusCommitted { + return fmt.Errorf("%s: candidate review snapshot status must be %q", operation, models.SnapshotStatusCommitted) + } + if snapshot.RolledBackAt != nil { + return fmt.Errorf("%s: candidate review snapshot rolled_back_at must be nil before mutation", operation) + } + if snapshot.Pinned { + return fmt.Errorf("%s: candidate review snapshot must not be pinned before mutation", operation) + } + if snapshot.CreatedAt.IsZero() { + return fmt.Errorf("%s: candidate review snapshot created_at is required", operation) + } if snapshot.OpType != models.SnapshotOpCandidateReviewAction { return fmt.Errorf("%s: snapshot op_type must be %q", operation, models.SnapshotOpCandidateReviewAction) } @@ -641,21 +664,14 @@ func candidateReviewPayloadMatchesAuthoritative(snapshotCandidate, authoritative if snapshotCandidate == nil || authoritativeCandidate == nil { return false, nil } - withinPostgresPrecision := func(left, right time.Time) bool { - delta := left.Sub(right) - if delta < 0 { - delta = -delta - } - return delta < time.Microsecond - } - if !withinPostgresPrecision(snapshotCandidate.CreatedAt, authoritativeCandidate.CreatedAt) || - !withinPostgresPrecision(snapshotCandidate.UpdatedAt, authoritativeCandidate.UpdatedAt) { + if !candidateReviewTimestampsMatchPostgresPrecision(snapshotCandidate.CreatedAt, authoritativeCandidate.CreatedAt) || + !candidateReviewTimestampsMatchPostgresPrecision(snapshotCandidate.UpdatedAt, authoritativeCandidate.UpdatedAt) { return false, nil } if (snapshotCandidate.ReviewAfter == nil) != (authoritativeCandidate.ReviewAfter == nil) { return false, nil } - if snapshotCandidate.ReviewAfter != nil && !withinPostgresPrecision(*snapshotCandidate.ReviewAfter, *authoritativeCandidate.ReviewAfter) { + if snapshotCandidate.ReviewAfter != nil && !candidateReviewTimestampsMatchPostgresPrecision(*snapshotCandidate.ReviewAfter, *authoritativeCandidate.ReviewAfter) { return false, nil } @@ -678,6 +694,30 @@ func candidateReviewPayloadMatchesAuthoritative(snapshotCandidate, authoritative return bytes.Equal(snapshotJSON, authoritativeJSON), nil } +func candidateReviewTimestampsMatchPostgresPrecision(left, right time.Time) bool { + leftSeconds, rightSeconds := left.Unix(), right.Unix() + leftNanos, rightNanos := int64(left.Nanosecond()), int64(right.Nanosecond()) + precision := int64(time.Microsecond) + + switch { + case leftSeconds == rightSeconds: + if leftNanos < rightNanos { + return rightNanos-leftNanos < precision + } + return leftNanos-rightNanos < precision + case leftSeconds < rightSeconds: + if leftSeconds != rightSeconds-1 { + return false + } + return int64(time.Second)-leftNanos+rightNanos < precision + default: + if rightSeconds != leftSeconds-1 { + return false + } + return int64(time.Second)-rightNanos+leftNanos < precision + } +} + func (s *CandidateStore) logCandidateReviewAuditTx( ctx context.Context, tx *gorm.DB, diff --git a/internal/db/gorm/candidate_store_test.go b/internal/db/gorm/candidate_store_test.go index 862f9598..ad35a6d4 100644 --- a/internal/db/gorm/candidate_store_test.go +++ b/internal/db/gorm/candidate_store_test.go @@ -903,6 +903,198 @@ func TestCandidateStore_AllCandidateReviewSnapshotSeamsCommitExactlyOneAudit(t * } } +func TestCandidateStore_AllCandidateReviewSnapshotSeamsRejectTimestampDurationOverflowWithoutWrites(t *testing.T) { + db := openCandidateTestDB(t) + ctx := context.Background() + auditStore := NewAuditStore(db) + candidateStore := NewCandidateStore(db, auditStore) + snapshotStore := NewSnapshotStore(db) + + for _, seam := range candidateReviewSnapshotSeamCases() { + seam := seam + t.Run(seam.name, func(t *testing.T) { + candidate := createCandidateReviewStoreTestCandidate(t, candidateStore, ctx, "timestamp-overflow-"+seam.name) + actor := "agent/tester" + snapshot := newCandidateReviewStoreTestSnapshot(t, candidate, seam.action, actor) + + entries := candidateReviewSnapshotEntries(t, snapshot) + key := fmt.Sprintf("candidate:%d", candidate.ID) + entry := entries[key] + var forgedCandidate models.CrystallizationCandidate + require.NoError(t, json.Unmarshal(entry.Before, &forgedCandidate)) + forgedCandidate.CreatedAt = time.Date(1, time.January, 1, 0, 0, 0, 0, time.UTC) + forgedCandidate.UpdatedAt = forgedCandidate.CreatedAt + var err error + entry.Before, err = json.Marshal(&forgedCandidate) + require.NoError(t, err) + entries[key] = entry + setCandidateReviewSnapshotEntries(t, snapshot, entries) + + persistedBefore, err := candidateStore.Get(ctx, candidate.ID) + require.NoError(t, err) + memoriesBefore, snapshotsBefore := countCandidateReviewTestRows(t, db) + auditsBefore := countAuditRows(t, db, "candidate_review") + + err = callCandidateReviewSnapshotSeam(ctx, candidateStore, snapshotStore, seam, candidate, snapshot, actor) + + memoriesAfter, snapshotsAfter := countCandidateReviewTestRows(t, db) + auditsAfter := countAuditRows(t, db, "candidate_review") + storedCandidate, getErr := candidateStore.Get(ctx, candidate.ID) + require.NoError(t, getErr) + + require.Error(t, err, "timestamp values outside time.Duration range must fail closed") + require.Equal(t, persistedBefore, storedCandidate, "rejected snapshot must leave the candidate unchanged") + require.Equal(t, memoriesBefore, memoriesAfter, "rejected snapshot must not create memory rows") + require.Equal(t, snapshotsBefore, snapshotsAfter, "rejected snapshot must not create snapshot rows") + require.Equal(t, auditsBefore, auditsAfter, "rejected snapshot must not create candidate_review audit rows") + }) + } +} + +type candidateReviewInvalidInitialSnapshotCase struct { + name string + mutate func(*models.BulkOpSnapshot) +} + +func candidateReviewInvalidInitialSnapshotCases() []candidateReviewInvalidInitialSnapshotCase { + return []candidateReviewInvalidInitialSnapshotCase{ + {name: "empty_status", mutate: func(snapshot *models.BulkOpSnapshot) { + snapshot.Status = "" + }}, + {name: "preview_status", mutate: func(snapshot *models.BulkOpSnapshot) { + snapshot.Status = models.SnapshotStatusPreview + }}, + {name: "rolled_back_status", mutate: func(snapshot *models.BulkOpSnapshot) { + snapshot.Status = models.SnapshotStatusRolledBack + }}, + {name: "rolled_back_at_set", mutate: func(snapshot *models.BulkOpSnapshot) { + rolledBackAt := time.Now().UTC().Add(-time.Minute) + snapshot.RolledBackAt = &rolledBackAt + }}, + {name: "pinned", mutate: func(snapshot *models.BulkOpSnapshot) { + snapshot.Pinned = true + }}, + {name: "zero_created_at", mutate: func(snapshot *models.BulkOpSnapshot) { + snapshot.CreatedAt = time.Time{} + }}, + {name: "persisted_id", mutate: func(snapshot *models.BulkOpSnapshot) { + snapshot.ID = 99 + }}, + {name: "blank_snapshot_id", mutate: func(snapshot *models.BulkOpSnapshot) { + snapshot.SnapshotID = " " + }}, + } +} + +func TestCandidateStore_CandidateReviewInitialSnapshotShapeIsRejectedAtEveryValidationBoundary(t *testing.T) { + ctx := context.Background() + + t.Run("before_database_access", func(t *testing.T) { + candidate, err := models.NewCrystallizationCandidate( + "session-initial-shape-preflight", + "candidate snapshot shape must fail before database access", + "rule", + models.CandidateOptions{AffectedProjects: []string{"test-project"}}, + ) + require.NoError(t, err) + candidate.ID = 42 + candidateStore := NewCandidateStore(nil, NewAuditStore(nil)) + snapshotStore := NewSnapshotStore(nil) + + for _, seam := range candidateReviewSnapshotSeamCases() { + seam := seam + for _, invalidCase := range candidateReviewInvalidInitialSnapshotCases() { + invalidCase := invalidCase + t.Run(seam.name+"/"+invalidCase.name, func(t *testing.T) { + actor := "agent/tester" + snapshot := newCandidateReviewStoreTestSnapshot(t, candidate, seam.action, actor) + invalidCase.mutate(snapshot) + var callErr error + require.NotPanics(t, func() { + callErr = callCandidateReviewSnapshotSeam(ctx, candidateStore, snapshotStore, seam, candidate, snapshot, actor) + }, "invalid initial snapshot shape must be rejected before dereferencing the database") + require.Error(t, callErr) + }) + } + } + }) + + db := openCandidateTestDB(t) + auditStore := NewAuditStore(db) + candidateStore := NewCandidateStore(db, auditStore) + snapshotStore := NewSnapshotStore(db) + + t.Run("public_seams_without_writes", func(t *testing.T) { + for _, seam := range candidateReviewSnapshotSeamCases() { + seam := seam + for _, invalidCase := range candidateReviewInvalidInitialSnapshotCases() { + invalidCase := invalidCase + t.Run(seam.name+"/"+invalidCase.name, func(t *testing.T) { + candidate := createCandidateReviewStoreTestCandidate(t, candidateStore, ctx, "initial-shape-"+seam.name+"-"+invalidCase.name) + actor := "agent/tester" + snapshot := newCandidateReviewStoreTestSnapshot(t, candidate, seam.action, actor) + invalidCase.mutate(snapshot) + + persistedBefore, err := candidateStore.Get(ctx, candidate.ID) + require.NoError(t, err) + memoriesBefore, snapshotsBefore := countCandidateReviewTestRows(t, db) + auditsBefore := countAuditRows(t, db, "candidate_review") + + err = callCandidateReviewSnapshotSeam(ctx, candidateStore, snapshotStore, seam, candidate, snapshot, actor) + + memoriesAfter, snapshotsAfter := countCandidateReviewTestRows(t, db) + auditsAfter := countAuditRows(t, db, "candidate_review") + storedCandidate, getErr := candidateStore.Get(ctx, candidate.ID) + require.NoError(t, getErr) + + require.Error(t, err, "non-canonical initial candidate-review snapshots must fail closed") + require.Equal(t, persistedBefore, storedCandidate, "rejected snapshot must leave the candidate unchanged") + require.Equal(t, memoriesBefore, memoriesAfter, "rejected snapshot must not create memory rows") + require.Equal(t, snapshotsBefore, snapshotsAfter, "rejected snapshot must not create snapshot rows") + require.Equal(t, auditsBefore, auditsAfter, "rejected snapshot must not create candidate_review audit rows") + }) + } + } + }) + + t.Run("transaction_revalidation", func(t *testing.T) { + for _, seam := range candidateReviewSnapshotSeamCases() { + seam := seam + for _, invalidCase := range candidateReviewInvalidInitialSnapshotCases() { + invalidCase := invalidCase + t.Run(seam.name+"/"+invalidCase.name, func(t *testing.T) { + candidate := createCandidateReviewStoreTestCandidate(t, candidateStore, ctx, "tx-revalidation-"+seam.name+"-"+invalidCase.name) + actor := "agent/tester" + snapshot := newCandidateReviewStoreTestSnapshot(t, candidate, seam.action, actor) + operation := seam.action + "_with_snapshot" + require.NoError(t, candidateStore.validateCandidateReviewSnapshotBinding(ctx, nil, snapshotStore, snapshot, seam.action, candidate.ID, actor, operation)) + invalidCase.mutate(snapshot) + + persistedBefore, err := candidateStore.Get(ctx, candidate.ID) + require.NoError(t, err) + memoriesBefore, snapshotsBefore := countCandidateReviewTestRows(t, db) + auditsBefore := countAuditRows(t, db, "candidate_review") + + err = db.WithContext(ctx).Transaction(func(tx *gorm.DB) error { + return candidateStore.validateCandidateReviewSnapshotBinding(ctx, tx, snapshotStore, snapshot, seam.action, candidate.ID, actor, operation) + }) + + memoriesAfter, snapshotsAfter := countCandidateReviewTestRows(t, db) + auditsAfter := countAuditRows(t, db, "candidate_review") + storedCandidate, getErr := candidateStore.Get(ctx, candidate.ID) + require.NoError(t, getErr) + + require.Error(t, err, "transaction-bound validation must reject shape drift after preflight") + require.Equal(t, persistedBefore, storedCandidate, "transaction revalidation must leave the candidate unchanged") + require.Equal(t, memoriesBefore, memoriesAfter) + require.Equal(t, snapshotsBefore, snapshotsAfter) + require.Equal(t, auditsBefore, auditsAfter) + }) + } + } + }) +} + func createCandidateReviewStoreTestCandidate(t *testing.T, cs *CandidateStore, ctx context.Context, suffix string) *models.CrystallizationCandidate { t.Helper() candidate, err := models.NewCrystallizationCandidate( From 0f79e925c4ba537c5358cca64e2546bce914ff96 Mon Sep 17 00:00:00 2001 From: Kirill Turanskiy Date: Fri, 10 Jul 2026 13:28:36 +0300 Subject: [PATCH 019/111] fix(reaper): harden retention and lifecycle shutdown --- ...-07-10-db-reaper-lifecycle-rework-maker.md | 82 ++++ .../coverage/reaper.coverage.out | 68 ++++ .../db-reaper-lifecycle-rework/final.json | 31 ++ .../manifest.sha256 | 13 + .../residue-cleanup.json | 24 ++ .../tdd/concurrent-lifecycle.red.json | 11 + .../tdd/db-reaper-lifecycle-rework.tdd.json | 69 ++++ .../tdd/prove-it.json | 50 +++ .../tdd/purge-error.red.json | 11 + .../tdd/retention-config.red.json | 11 + .../tdd/service-partial-init.red.json | 11 + .../tdd/service-reaper-order.red.json | 11 + .../tdd/stop-before-start.red.json | 11 + .../verification-summary.json | 86 +++++ internal/worker/reaper/reaper.go | 243 +++++++++--- internal/worker/reaper/reaper_test.go | 363 +++++++++++++++++- internal/worker/service.go | 64 ++- .../worker/service_reaper_lifecycle_test.go | 194 ++++++++++ 18 files changed, 1276 insertions(+), 77 deletions(-) create mode 100644 .agent/reports/2026-07-10-db-reaper-lifecycle-rework-maker.md create mode 100644 .agent/reports/evidence/production-ready/db-reaper-lifecycle-rework/coverage/reaper.coverage.out create mode 100644 .agent/reports/evidence/production-ready/db-reaper-lifecycle-rework/final.json create mode 100644 .agent/reports/evidence/production-ready/db-reaper-lifecycle-rework/manifest.sha256 create mode 100644 .agent/reports/evidence/production-ready/db-reaper-lifecycle-rework/residue-cleanup.json create mode 100644 .agent/reports/evidence/production-ready/db-reaper-lifecycle-rework/tdd/concurrent-lifecycle.red.json create mode 100644 .agent/reports/evidence/production-ready/db-reaper-lifecycle-rework/tdd/db-reaper-lifecycle-rework.tdd.json create mode 100644 .agent/reports/evidence/production-ready/db-reaper-lifecycle-rework/tdd/prove-it.json create mode 100644 .agent/reports/evidence/production-ready/db-reaper-lifecycle-rework/tdd/purge-error.red.json create mode 100644 .agent/reports/evidence/production-ready/db-reaper-lifecycle-rework/tdd/retention-config.red.json create mode 100644 .agent/reports/evidence/production-ready/db-reaper-lifecycle-rework/tdd/service-partial-init.red.json create mode 100644 .agent/reports/evidence/production-ready/db-reaper-lifecycle-rework/tdd/service-reaper-order.red.json create mode 100644 .agent/reports/evidence/production-ready/db-reaper-lifecycle-rework/tdd/stop-before-start.red.json create mode 100644 .agent/reports/evidence/production-ready/db-reaper-lifecycle-rework/verification-summary.json create mode 100644 internal/worker/service_reaper_lifecycle_test.go diff --git a/.agent/reports/2026-07-10-db-reaper-lifecycle-rework-maker.md b/.agent/reports/2026-07-10-db-reaper-lifecycle-rework-maker.md new file mode 100644 index 00000000..56e431bd --- /dev/null +++ b/.agent/reports/2026-07-10-db-reaper-lifecycle-rework-maker.md @@ -0,0 +1,82 @@ +# DB Reaper Lifecycle Rework — Maker Report + +Date: 2026-07-10 + +Worktree: `D:/Dev/engram/.agent/worktrees/prc-db-reaper` + +Branch: `work/prc-db-reaper` + +Base: `dc891b2d72b1fd63b83e4a630a249241fc389151` + +Rejected predecessor retained: `88f6bbb58c228b843dc30aa00bd05d3e775f3558` + +Prior checker report SHA256: `45584C1A632801BDFC2F85B013FB681B4B37080CE2AA5C83D35D92E1DBB26B6E` + +## Outcome + +The rejected predecessor's valid removal of `t.Parallel()` from the environment-mutating test is preserved. This successor fixes the ordinary lifecycle and retention correctness gaps that predecessor did not address. + +- `ENGRAM_PROJECT_RETENTION_DAYS` now has explicit deterministic behavior: unset, malformed, zero, and negative values use the documented 30-day default; positive values through `106751` days are honored exactly; larger positive decimal values skip the sweep instead of overflowing or clamping downward and deleting newer rows. +- `PurgeOnce` now returns a failed `DELETE` to its caller with query context instead of logging the error and returning `nil`. +- Reaper `Start`/`Stop` is a mutex-guarded restartable state machine. Stop-before-start is a no-op; concurrent/repeated starts own at most one loop; concurrent/repeated stops share cancellation and join the same completion; the ticker is stopped before completion is published. +- Service shutdown is once-only and nil-safe, joins partial async initialization, stops and joins the project reaper, drains other tracked goroutines, then closes the database. The project-reaper field is represented by the minimum lifecycle interface so shutdown ordering can be tested without weakening production construction. + +## Why service lifecycle files changed + +Live call-path tracing found `initializeAsync` created and started the reaper after readiness, while `Shutdown` cancelled the root context but neither joined initialization nor called `projectReaper.Stop()` before `store.Close()`. The reaper was also outside the service wait group. The minimum service changes are therefore required to make the requested database-close ordering true under ordinary and partial initialization. + +## TDD evidence + +Observed RED evidence precedes each corresponding production edit: + +- `tdd/retention-config.red.json` — missing bounded parser/max-safe behavior. +- `tdd/purge-error.red.json` — closed database logged an error while `PurgeOnce` returned `nil`. +- `tdd/stop-before-start.red.json` — Stop blocked forever before Start. +- `tdd/concurrent-lifecycle.red.json` — no concurrency-safe lifecycle/ticker ownership seam. +- `tdd/service-partial-init.red.json` — partial service shutdown panicked on nil cancel. +- `tdd/service-reaper-order.red.json` — no initialization join or testable reaper-before-database contract. + +GREEN and coverage are consolidated in `tdd/db-reaper-lifecycle-rework.tdd.json`. Reaper statement coverage is `87.6%`. The committed-snapshot Prove-It audit substituted the retention parser, synchronous purge, reaper stop/run lifecycle, and service shutdown/once paths; every mutation failed the intended regression tests, then the exact production files were restored from the committed snapshot and the focused suites returned green. Full mutation evidence is `tdd/prove-it.json`. + +## Verification + +All commands below were run from this worktree. + +| Gate | Result | +| --- | --- | +| Focused retention/error/lifecycle edge matrix, `-count=20` | PASS — `internal/worker/reaper` | +| Full reaper package, `-count=3` | PASS | +| Full reaper race package, `-count=10` | PASS | +| Service shutdown tests, `-race -count=10` | PASS | +| Worker package with `DATABASE_DSN` unset | PASS | +| Worker package tree with `DATABASE_DSN` unset | PASS | +| Repository `go test ./... -count=1` with `DATABASE_DSN` unset | PASS | +| `go vet ./...` | PASS | +| `go build ./cmd/engram-server` | PASS; disposable binary SHA256 `FCF19C377C32F86071052F6C1DCBB8DA53F5E360F65C1DBF0D12BC1DB74E7760` | +| `git diff --check` | PASS | + +The full command/result matrix is `evidence/production-ready/db-reaper-lifecycle-rework/verification-summary.json`. + +Residue cleanup is recorded in `evidence/production-ready/db-reaper-lifecycle-rework/residue-cleanup.json`: both reaper test databases are absent, their PostgreSQL session count is zero, no worktree/test process remains, the disposable server binary is absent, and the interrupted worktree semantic index created during source routing was removed. The pre-existing PostgreSQL container was retained. + +## Discrepancy surfaced + +One broad DB-backed `go test ./internal/worker -count=1` run failed five tests outside this diff: two DB-AUTH lifecycle tests assigned to the separate DB-AUTH lane, and three crystallization tests that assert direct decision-memory behavior demolished in v5. No failing test touches `internal/worker/reaper/**`, `Service.Shutdown`, or the new shutdown test. This is recorded as `FAIL_OUT_OF_SCOPE` in the verification summary rather than silently presented as green. The affected DB-backed shutdown surface passes under repeat and race, and the worker/full-repository unit baselines pass with `DATABASE_DSN` unset. + +## Scope + +Production/test paths changed: + +- `internal/worker/reaper/reaper.go` +- `internal/worker/reaper/reaper_test.go` +- `internal/worker/service.go` +- `internal/worker/service_reaper_lifecycle_test.go` + +Durable report/evidence paths: + +- `.agent/reports/2026-07-10-db-reaper-lifecycle-rework-maker.md` +- `.agent/reports/evidence/production-ready/db-reaper-lifecycle-rework/**` + +## Handoff state + +Status: `READY_FOR_INDEPENDENT_CHECK`. This maker report is not an approval and does not authorize integration. diff --git a/.agent/reports/evidence/production-ready/db-reaper-lifecycle-rework/coverage/reaper.coverage.out b/.agent/reports/evidence/production-ready/db-reaper-lifecycle-rework/coverage/reaper.coverage.out new file mode 100644 index 00000000..2aec3328 --- /dev/null +++ b/.agent/reports/evidence/production-ready/db-reaper-lifecycle-rework/coverage/reaper.coverage.out @@ -0,0 +1,68 @@ +mode: set +github.com/thebtf/engram/internal/worker/reaper/reaper.go:67.51,67.65 1 0 +github.com/thebtf/engram/internal/worker/reaper/reaper.go:69.62,71.2 1 0 +github.com/thebtf/engram/internal/worker/reaper/reaper.go:87.31,92.2 1 1 +github.com/thebtf/engram/internal/worker/reaper/reaper.go:96.45,97.16 1 1 +github.com/thebtf/engram/internal/worker/reaper/reaper.go:97.16,99.3 1 0 +github.com/thebtf/engram/internal/worker/reaper/reaper.go:101.2,102.29 2 1 +github.com/thebtf/engram/internal/worker/reaper/reaper.go:102.29,105.3 2 1 +github.com/thebtf/engram/internal/worker/reaper/reaper.go:106.2,109.22 4 1 +github.com/thebtf/engram/internal/worker/reaper/reaper.go:109.22,111.3 1 0 +github.com/thebtf/engram/internal/worker/reaper/reaper.go:112.2,122.26 7 1 +github.com/thebtf/engram/internal/worker/reaper/reaper.go:122.26,124.3 1 1 +github.com/thebtf/engram/internal/worker/reaper/reaper.go:125.2,127.43 2 1 +github.com/thebtf/engram/internal/worker/reaper/reaper.go:131.25,133.19 2 1 +github.com/thebtf/engram/internal/worker/reaper/reaper.go:133.19,136.3 2 1 +github.com/thebtf/engram/internal/worker/reaper/reaper.go:137.2,142.19 5 1 +github.com/thebtf/engram/internal/worker/reaper/reaper.go:142.19,144.3 1 1 +github.com/thebtf/engram/internal/worker/reaper/reaper.go:145.2,148.20 3 1 +github.com/thebtf/engram/internal/worker/reaper/reaper.go:148.20,153.3 4 1 +github.com/thebtf/engram/internal/worker/reaper/reaper.go:154.2,154.24 1 1 +github.com/thebtf/engram/internal/worker/reaper/reaper.go:157.134,159.15 2 1 +github.com/thebtf/engram/internal/worker/reaper/reaper.go:159.15,164.21 4 1 +github.com/thebtf/engram/internal/worker/reaper/reaper.go:164.21,166.19 2 1 +github.com/thebtf/engram/internal/worker/reaper/reaper.go:166.19,169.5 2 0 +github.com/thebtf/engram/internal/worker/reaper/reaper.go:171.3,172.25 2 1 +github.com/thebtf/engram/internal/worker/reaper/reaper.go:175.2,175.6 1 1 +github.com/thebtf/engram/internal/worker/reaper/reaper.go:175.6,176.10 1 1 +github.com/thebtf/engram/internal/worker/reaper/reaper.go:177.21,179.10 2 1 +github.com/thebtf/engram/internal/worker/reaper/reaper.go:180.24,181.39 1 0 +github.com/thebtf/engram/internal/worker/reaper/reaper.go:181.39,183.5 1 0 +github.com/thebtf/engram/internal/worker/reaper/reaper.go:190.51,191.17 1 1 +github.com/thebtf/engram/internal/worker/reaper/reaper.go:191.17,193.3 1 0 +github.com/thebtf/engram/internal/worker/reaper/reaper.go:195.2,196.22 2 1 +github.com/thebtf/engram/internal/worker/reaper/reaper.go:196.22,199.3 2 1 +github.com/thebtf/engram/internal/worker/reaper/reaper.go:201.2,209.25 4 1 +github.com/thebtf/engram/internal/worker/reaper/reaper.go:209.25,211.3 1 1 +github.com/thebtf/engram/internal/worker/reaper/reaper.go:213.2,213.29 1 1 +github.com/thebtf/engram/internal/worker/reaper/reaper.go:213.29,218.3 1 1 +github.com/thebtf/engram/internal/worker/reaper/reaper.go:219.2,219.12 1 1 +github.com/thebtf/engram/internal/worker/reaper/reaper.go:224.44,226.2 1 1 +github.com/thebtf/engram/internal/worker/reaper/reaper.go:232.57,233.39 1 1 +github.com/thebtf/engram/internal/worker/reaper/reaper.go:233.39,235.3 1 1 +github.com/thebtf/engram/internal/worker/reaper/reaper.go:237.2,237.17 1 1 +github.com/thebtf/engram/internal/worker/reaper/reaper.go:237.17,239.3 1 1 +github.com/thebtf/engram/internal/worker/reaper/reaper.go:241.2,242.16 2 1 +github.com/thebtf/engram/internal/worker/reaper/reaper.go:242.16,243.31 1 1 +github.com/thebtf/engram/internal/worker/reaper/reaper.go:243.31,245.4 1 1 +github.com/thebtf/engram/internal/worker/reaper/reaper.go:246.3,246.22 1 1 +github.com/thebtf/engram/internal/worker/reaper/reaper.go:248.2,248.15 1 1 +github.com/thebtf/engram/internal/worker/reaper/reaper.go:248.15,250.3 1 1 +github.com/thebtf/engram/internal/worker/reaper/reaper.go:251.2,251.29 1 1 +github.com/thebtf/engram/internal/worker/reaper/reaper.go:251.29,253.3 1 1 +github.com/thebtf/engram/internal/worker/reaper/reaper.go:254.2,254.36 1 1 +github.com/thebtf/engram/internal/worker/reaper/reaper.go:257.43,258.17 1 1 +github.com/thebtf/engram/internal/worker/reaper/reaper.go:258.17,260.3 1 0 +github.com/thebtf/engram/internal/worker/reaper/reaper.go:261.2,261.21 1 1 +github.com/thebtf/engram/internal/worker/reaper/reaper.go:261.21,263.3 1 0 +github.com/thebtf/engram/internal/worker/reaper/reaper.go:264.2,264.17 1 1 +github.com/thebtf/engram/internal/worker/reaper/reaper.go:264.17,266.3 1 0 +github.com/thebtf/engram/internal/worker/reaper/reaper.go:268.2,269.30 2 1 +github.com/thebtf/engram/internal/worker/reaper/reaper.go:269.30,270.33 1 1 +github.com/thebtf/engram/internal/worker/reaper/reaper.go:270.33,272.4 1 1 +github.com/thebtf/engram/internal/worker/reaper/reaper.go:273.3,273.19 1 1 +github.com/thebtf/engram/internal/worker/reaper/reaper.go:273.19,275.4 1 1 +github.com/thebtf/engram/internal/worker/reaper/reaper.go:277.2,277.19 1 1 +github.com/thebtf/engram/internal/worker/reaper/reaper.go:282.55,283.17 1 1 +github.com/thebtf/engram/internal/worker/reaper/reaper.go:283.17,285.3 1 0 +github.com/thebtf/engram/internal/worker/reaper/reaper.go:286.2,286.21 1 1 diff --git a/.agent/reports/evidence/production-ready/db-reaper-lifecycle-rework/final.json b/.agent/reports/evidence/production-ready/db-reaper-lifecycle-rework/final.json new file mode 100644 index 00000000..1d7952c4 --- /dev/null +++ b/.agent/reports/evidence/production-ready/db-reaper-lifecycle-rework/final.json @@ -0,0 +1,31 @@ +{ + "schema_version": 1, + "status": "READY_FOR_INDEPENDENT_CHECK", + "role": "MAKER", + "self_approved": false, + "integration_authorized": false, + "branch": "work/prc-db-reaper", + "base_sha": "dc891b2d72b1fd63b83e4a630a249241fc389151", + "rejected_predecessor_sha": "88f6bbb58c228b843dc30aa00bd05d3e775f3558", + "final_commit_sha": "reported out-of-band because this JSON is contained by that commit", + "prior_checker_report_sha256": "45584C1A632801BDFC2F85B013FB681B4B37080CE2AA5C83D35D92E1DBB26B6E", + "report": ".agent/reports/2026-07-10-db-reaper-lifecycle-rework-maker.md", + "evidence_root": ".agent/reports/evidence/production-ready/db-reaper-lifecycle-rework", + "verification": { + "focused_edge_repeat": 20, + "reaper_race_repeat": 10, + "service_shutdown_race_repeat": 10, + "reaper_coverage_percent": 87.6, + "worker_unit_baseline": "PASS", + "repository_unit_baseline": "PASS", + "vet": "PASS", + "server_build": "PASS", + "diff_check": "PASS", + "prove_it": "PASS", + "residue_cleanup": "CLEAN" + }, + "discrepancy": { + "broad_db_worker_run": "FAIL_OUT_OF_SCOPE", + "details": "verification-summary.json" + } +} diff --git a/.agent/reports/evidence/production-ready/db-reaper-lifecycle-rework/manifest.sha256 b/.agent/reports/evidence/production-ready/db-reaper-lifecycle-rework/manifest.sha256 new file mode 100644 index 00000000..0c3cfbf3 --- /dev/null +++ b/.agent/reports/evidence/production-ready/db-reaper-lifecycle-rework/manifest.sha256 @@ -0,0 +1,13 @@ +37A2A6EFB4EC5E12C4DCC8A462DD5F3A03322CACBA5B5DEB8E32A066D00F1D04 .agent/reports/2026-07-10-db-reaper-lifecycle-rework-maker.md +424ED42B68C0CAF8B02D3592E7B18B2EE8205547033A3D08B44D73FA577D62E4 .agent/reports/evidence/production-ready/db-reaper-lifecycle-rework/coverage/reaper.coverage.out +8EF31C549A50EABAD58F51616EC7874ABC6BED9CA745F5778FFE6D36FF1AC7C1 .agent/reports/evidence/production-ready/db-reaper-lifecycle-rework/final.json +F9FEB83770D10C646FB5B877941C2E9CC76F0ABD7A8EBD763C63BF043B7E8D66 .agent/reports/evidence/production-ready/db-reaper-lifecycle-rework/residue-cleanup.json +144823F3B6AEBA10C4F04043C2E74A5F500C5B254AF2BBE2E849C185A44DA9BC .agent/reports/evidence/production-ready/db-reaper-lifecycle-rework/tdd/concurrent-lifecycle.red.json +C56EBA731C0740D08AF4CC0F69A08889E36921B4DC79B1A9954B11392555D5A3 .agent/reports/evidence/production-ready/db-reaper-lifecycle-rework/tdd/db-reaper-lifecycle-rework.tdd.json +B10CE4F2AD36A32D15CA5F540ED79CBD1C83045482995BB5E5B20941ABFB8F62 .agent/reports/evidence/production-ready/db-reaper-lifecycle-rework/tdd/prove-it.json +738CA64FA27CCD511E5E115DF71C588F9A47DA7DCDA225F2F57131C9821768BB .agent/reports/evidence/production-ready/db-reaper-lifecycle-rework/tdd/purge-error.red.json +EA18394C21C6B2CC9CCAC027ACADDF5BC876E23398910F2B7219B1D490A7E4F6 .agent/reports/evidence/production-ready/db-reaper-lifecycle-rework/tdd/retention-config.red.json +57766E202AA0CEF3DB57BA227EEFD674A8B08A3E3BD1FB033089DDC6180D0373 .agent/reports/evidence/production-ready/db-reaper-lifecycle-rework/tdd/service-partial-init.red.json +82415413CF0183AC2D3D5E5F3BCDAFEF4C652E96679503671852ECDE0C07B80D .agent/reports/evidence/production-ready/db-reaper-lifecycle-rework/tdd/service-reaper-order.red.json +7B7F3B2E304463E385C4D5DA5E33AF4D2C2962891041001A95A87F8C3EFFC946 .agent/reports/evidence/production-ready/db-reaper-lifecycle-rework/tdd/stop-before-start.red.json +1F936F8F94C854B4F84CE8D5E7F5E5A733A3F4ECC98BCECC4ACC72D9DEFCD135 .agent/reports/evidence/production-ready/db-reaper-lifecycle-rework/verification-summary.json diff --git a/.agent/reports/evidence/production-ready/db-reaper-lifecycle-rework/residue-cleanup.json b/.agent/reports/evidence/production-ready/db-reaper-lifecycle-rework/residue-cleanup.json new file mode 100644 index 00000000..741dce56 --- /dev/null +++ b/.agent/reports/evidence/production-ready/db-reaper-lifecycle-rework/residue-cleanup.json @@ -0,0 +1,24 @@ +{ + "observed_at": "2026-07-10T10:41:07.3899959Z", + "postgresql": { + "databases_checked": [ + "engram_prc_reaper", + "engram_prc_reaper_lifecycle_rework" + ], + "remaining_databases": 0, + "remaining_sessions": 0, + "container_retained": "engram-prc-postgres" + }, + "processes": { + "worktree_commandline_matches_excluding_probe": 0 + }, + "build_artifacts": { + "temporary_server_binary_exists": false, + "temporary_build_directory_exists": false + }, + "semantic_index": { + "worktree_index_removed": true, + "post_cleanup_status": "No index found for project" + }, + "status": "CLEAN" +} diff --git a/.agent/reports/evidence/production-ready/db-reaper-lifecycle-rework/tdd/concurrent-lifecycle.red.json b/.agent/reports/evidence/production-ready/db-reaper-lifecycle-rework/tdd/concurrent-lifecycle.red.json new file mode 100644 index 00000000..1b18bd68 --- /dev/null +++ b/.agent/reports/evidence/production-ready/db-reaper-lifecycle-rework/tdd/concurrent-lifecycle.red.json @@ -0,0 +1,11 @@ +{ + "task_id": "db-reaper-concurrent-lifecycle", + "observed_at": "2026-07-10T10:08:29.3755547Z", + "test_file": "internal/worker/reaper/reaper_test.go", + "test_name": "TestReaper_ConcurrentStartIsIdempotent and lifecycle siblings", + "invariant": "Concurrent and repeated Start/Stop own at most one loop, join cancellation, stop every ticker exactly once, and leave no active goroutine.", + "failure_reason": "The production Reaper had no concurrency-safe lifecycle state or injectable ticker ownership seam.", + "runner_command": "go test ./internal/worker/reaper -run '^TestReaper_(ConcurrentStartIsIdempotent|ConcurrentStopJoinsSingleLoop|StopWaitsForTickerCleanup|ConcurrentStartStopLeavesNoLoopOrTicker|StopsOnContextCancel)$' -count=1 -v", + "runner_exit_code": 1, + "runner_stdout_excerpt": "reaper_test.go:290:53: undefined: reaperTicker\nreaper_test.go:333:4: r.newTicker undefined\nreaper_test.go:408:36: undefined: reaperTicker\nFAIL github.com/thebtf/engram/internal/worker/reaper [build failed]" +} diff --git a/.agent/reports/evidence/production-ready/db-reaper-lifecycle-rework/tdd/db-reaper-lifecycle-rework.tdd.json b/.agent/reports/evidence/production-ready/db-reaper-lifecycle-rework/tdd/db-reaper-lifecycle-rework.tdd.json new file mode 100644 index 00000000..ada2dc42 --- /dev/null +++ b/.agent/reports/evidence/production-ready/db-reaper-lifecycle-rework/tdd/db-reaper-lifecycle-rework.tdd.json @@ -0,0 +1,69 @@ +{ + "task_id": "db-reaper-lifecycle-rework", + "stack": "GO", + "red": [ + { + "observed_at": "2026-07-10T10:02:01.0213459Z", + "test": "TestParseRetentionConfig_ExplicitInvalidAndLargeBehavior", + "evidence": "retention-config.red.json" + }, + { + "observed_at": "2026-07-10T10:04:17.5190633Z", + "test": "TestReaper_PurgeOnceReturnsQueryError", + "evidence": "purge-error.red.json" + }, + { + "observed_at": "2026-07-10T10:05:50.1611201Z", + "test": "TestReaper_StopBeforeStartReturns", + "evidence": "stop-before-start.red.json" + }, + { + "observed_at": "2026-07-10T10:08:29.3755547Z", + "test": "TestReaper_ConcurrentStartIsIdempotent and lifecycle siblings", + "evidence": "concurrent-lifecycle.red.json" + }, + { + "observed_at": "2026-07-10T10:10:30.4712439Z", + "test": "TestServiceShutdown_PartialInitIsNilSafeAndIdempotent", + "evidence": "service-partial-init.red.json" + }, + { + "observed_at": "2026-07-10T10:12:50.9687795Z", + "test": "TestServiceShutdown_ConcurrentCallsStopReaperOnce and shutdown-order siblings", + "evidence": "service-reaper-order.red.json" + } + ], + "green": { + "observed_at": "2026-07-10T10:23:33.1887949Z", + "focused_repeat": 20, + "reaper_race_repeat": 10, + "service_shutdown_race_repeat": 10, + "regressed_tests": 0, + "evidence": "../verification-summary.json" + }, + "refactor": { + "applied": true, + "patterns": [ + "replace shared close channels with a mutex-guarded lifecycle state machine", + "extract bounded retention parsing from environment access", + "split Shutdown once-wrapper from ordered shutdown implementation" + ], + "post_refactor_parity": true + }, + "prove_it": { + "status": "PASS", + "failed_tests": 5, + "substituted_files": [ + "internal/worker/reaper/reaper.go", + "internal/worker/service.go" + ], + "evidence": "prove-it.json", + "reverted_at": "2026-07-10T10:36:26.3898501Z" + }, + "coverage": { + "percent": 87.6, + "threshold": 80, + "status": "PASS", + "profile": "../coverage/reaper.coverage.out" + } +} diff --git a/.agent/reports/evidence/production-ready/db-reaper-lifecycle-rework/tdd/prove-it.json b/.agent/reports/evidence/production-ready/db-reaper-lifecycle-rework/tdd/prove-it.json new file mode 100644 index 00000000..3ba8e36c --- /dev/null +++ b/.agent/reports/evidence/production-ready/db-reaper-lifecycle-rework/tdd/prove-it.json @@ -0,0 +1,50 @@ +{ + "observed_at": "2026-07-10T10:36:26.3898501Z", + "snapshot_commit_before_amend": "d60b35be", + "substituted_files": [ + "internal/worker/reaper/reaper.go", + "internal/worker/service.go" + ], + "failed_tests": 5, + "mutations": [ + { + "symbol": "parseRetentionConfig", + "sentinel": "return retentionConfig{}", + "result": "FAIL", + "evidence": "All eight parser cases failed; invalid fallback purged the recent row; oversized retention purged the protected row." + }, + { + "symbol": "PurgeOnce", + "sentinel": "return nil", + "result": "FAIL", + "evidence": "TestReaper_PurgeOnceReturnsQueryError failed: PurgeOnce returned nil after the database was closed." + }, + { + "symbol": "Stop", + "sentinel": "return", + "result": "FAIL", + "evidence": "TestReaper_ConcurrentStopJoinsSingleLoop observed started:1 stopped:0 active:1 instead of 1/1/0." + }, + { + "symbol": "run", + "sentinel": "panic(\"not implemented\")", + "result": "FAIL", + "evidence": "TestReaper_ConcurrentStartIsIdempotent failed with the sentinel panic from Reaper.run." + }, + { + "symbol": "Service.Shutdown once-wrapper and shutdown body", + "sentinel": "bypass sync.Once, then return nil from shutdown", + "result": "FAIL", + "evidence": "Bypassing the body produced 0 reaper stops; bypassing sync.Once produced 32 reaper stops instead of 1." + } + ], + "restore": { + "method": "git restore --source=HEAD on only the substituted production file after each run", + "post_restore_tests": [ + "ok github.com/thebtf/engram/internal/worker/reaper 0.168s", + "ok github.com/thebtf/engram/internal/worker 0.262s" + ], + "reverted_at": "2026-07-10T10:36:26.3898501Z", + "status": "GREEN" + } +} diff --git a/.agent/reports/evidence/production-ready/db-reaper-lifecycle-rework/tdd/purge-error.red.json b/.agent/reports/evidence/production-ready/db-reaper-lifecycle-rework/tdd/purge-error.red.json new file mode 100644 index 00000000..b6df7401 --- /dev/null +++ b/.agent/reports/evidence/production-ready/db-reaper-lifecycle-rework/tdd/purge-error.red.json @@ -0,0 +1,11 @@ +{ + "task_id": "db-reaper-purge-error", + "observed_at": "2026-07-10T10:04:17.5190633Z", + "test_file": "internal/worker/reaper/reaper_test.go", + "test_name": "TestReaper_PurgeOnceReturnsQueryError", + "invariant": "The synchronous PurgeOnce API reports a failed DELETE to its caller instead of logging the failure and returning nil.", + "failure_reason": "purge logged sql: database is closed, but PurgeOnce returned nil.", + "runner_command": "$env:DATABASE_DSN='postgres://engram:engram@localhost:55432/engram_prc_reaper?sslmode=disable'; go test ./internal/worker/reaper -run '^TestReaper_PurgeOnceReturnsQueryError$' -count=1 -v", + "runner_exit_code": 1, + "runner_stdout_excerpt": "project reaper: purge query failed: sql: database is closed\nreaper_test.go:246: PurgeOnce returned nil after the database was closed\n--- FAIL: TestReaper_PurgeOnceReturnsQueryError" +} diff --git a/.agent/reports/evidence/production-ready/db-reaper-lifecycle-rework/tdd/retention-config.red.json b/.agent/reports/evidence/production-ready/db-reaper-lifecycle-rework/tdd/retention-config.red.json new file mode 100644 index 00000000..c4ce33f3 --- /dev/null +++ b/.agent/reports/evidence/production-ready/db-reaper-lifecycle-rework/tdd/retention-config.red.json @@ -0,0 +1,11 @@ +{ + "task_id": "db-reaper-retention-config", + "observed_at": "2026-07-10T10:02:01.0213459Z", + "test_file": "internal/worker/reaper/reaper_test.go", + "test_name": "TestParseRetentionConfig_ExplicitInvalidAndLargeBehavior", + "invariant": "Malformed, zero, and negative retention values use the documented default, while positive values beyond safe duration arithmetic skip the purge instead of wrapping into an over-delete cutoff.", + "failure_reason": "The production package had no bounded retention parser or maximum duration-safe retention constant.", + "runner_command": "$env:DATABASE_DSN='postgres://engram:engram@localhost:55432/engram_prc_reaper?sslmode=disable'; go test ./internal/worker/reaper -run '^(TestParseRetentionConfig_ExplicitInvalidAndLargeBehavior|TestReaper_InvalidRetentionFallsBack|TestReaper_LargeRetentionDoesNotWrapOrPurgeNewerRows)$' -count=1", + "runner_exit_code": 1, + "runner_stdout_excerpt": "internal\\worker\\reaper\\reaper_test.go:154:66: undefined: maxRetentionDays\ninternal\\worker\\reaper\\reaper_test.go:161:11: undefined: parseRetentionConfig\ninternal\\worker\\reaper\\reaper_test.go:208:62: undefined: maxRetentionDays\nFAIL github.com/thebtf/engram/internal/worker/reaper [build failed]" +} diff --git a/.agent/reports/evidence/production-ready/db-reaper-lifecycle-rework/tdd/service-partial-init.red.json b/.agent/reports/evidence/production-ready/db-reaper-lifecycle-rework/tdd/service-partial-init.red.json new file mode 100644 index 00000000..640842ef --- /dev/null +++ b/.agent/reports/evidence/production-ready/db-reaper-lifecycle-rework/tdd/service-partial-init.red.json @@ -0,0 +1,11 @@ +{ + "task_id": "db-reaper-service-partial-init", + "observed_at": "2026-07-10T10:10:30.4712439Z", + "test_file": "internal/worker/service_reaper_lifecycle_test.go", + "test_name": "TestServiceShutdown_PartialInitIsNilSafeAndIdempotent", + "invariant": "Shutdown is safe when construction or async initialization has not populated optional lifecycle fields.", + "failure_reason": "Shutdown unconditionally invoked a nil cancel function and panicked.", + "runner_command": "go test ./internal/worker -run '^TestServiceShutdown_PartialInitIsNilSafeAndIdempotent$' -count=1 -v", + "runner_exit_code": 1, + "runner_stdout_excerpt": "panic: runtime error: invalid memory address or nil pointer dereference\nService.Shutdown service.go:2220\nTestServiceShutdown_PartialInitIsNilSafeAndIdempotent service_reaper_lifecycle_test.go:12" +} diff --git a/.agent/reports/evidence/production-ready/db-reaper-lifecycle-rework/tdd/service-reaper-order.red.json b/.agent/reports/evidence/production-ready/db-reaper-lifecycle-rework/tdd/service-reaper-order.red.json new file mode 100644 index 00000000..0105c722 --- /dev/null +++ b/.agent/reports/evidence/production-ready/db-reaper-lifecycle-rework/tdd/service-reaper-order.red.json @@ -0,0 +1,11 @@ +{ + "task_id": "db-reaper-service-shutdown-order", + "observed_at": "2026-07-10T10:12:50.9687795Z", + "test_file": "internal/worker/service_reaper_lifecycle_test.go", + "test_name": "TestServiceShutdown_ConcurrentCallsStopReaperOnce and shutdown-order siblings", + "invariant": "Service shutdown runs once, joins partial initialization, joins the project reaper, and only then closes the database.", + "failure_reason": "Service exposed only a concrete reaper pointer, had no initialization join, and had no testable shutdown lifecycle contract.", + "runner_command": "$env:DATABASE_DSN='postgres://engram:engram@localhost:55432/engram_prc_reaper?sslmode=disable'; go test ./internal/worker -run '^TestServiceShutdown_(ConcurrentCallsStopReaperOnce|WaitsForPartialInitializationBeforeReaperStop|WaitsForReaperBeforeClosingDatabase)$' -count=1 -v", + "runner_exit_code": 1, + "runner_stdout_excerpt": "cannot use *blockingProjectReaper as *reaper.Reaper\nsvc.initWG undefined\nFAIL github.com/thebtf/engram/internal/worker [build failed]" +} diff --git a/.agent/reports/evidence/production-ready/db-reaper-lifecycle-rework/tdd/stop-before-start.red.json b/.agent/reports/evidence/production-ready/db-reaper-lifecycle-rework/tdd/stop-before-start.red.json new file mode 100644 index 00000000..5b99747c --- /dev/null +++ b/.agent/reports/evidence/production-ready/db-reaper-lifecycle-rework/tdd/stop-before-start.red.json @@ -0,0 +1,11 @@ +{ + "task_id": "db-reaper-stop-before-start", + "observed_at": "2026-07-10T10:05:50.1611201Z", + "test_file": "internal/worker/reaper/reaper_test.go", + "test_name": "TestReaper_StopBeforeStartReturns", + "invariant": "Stop is a safe idempotent no-op before the first Start.", + "failure_reason": "Stop closed the stop channel and waited forever on a done channel that no goroutine could close.", + "runner_command": "go test ./internal/worker/reaper -run '^TestReaper_StopBeforeStartReturns$' -count=1 -v", + "runner_exit_code": 1, + "runner_stdout_excerpt": "reaper_test.go:265: Stop blocked before Start\n--- FAIL: TestReaper_StopBeforeStartReturns (0.50s)" +} diff --git a/.agent/reports/evidence/production-ready/db-reaper-lifecycle-rework/verification-summary.json b/.agent/reports/evidence/production-ready/db-reaper-lifecycle-rework/verification-summary.json new file mode 100644 index 00000000..c468332b --- /dev/null +++ b/.agent/reports/evidence/production-ready/db-reaper-lifecycle-rework/verification-summary.json @@ -0,0 +1,86 @@ +{ + "observed_at": "2026-07-10T10:23:33.1887949Z", + "database": "engram_prc_reaper_lifecycle_rework", + "results": [ + { + "name": "focused_edge_matrix_repeat_20", + "command": "go test ./internal/worker/reaper -run -count=20", + "status": "PASS", + "output": "ok github.com/thebtf/engram/internal/worker/reaper 2.688s" + }, + { + "name": "reaper_race_repeat_10", + "command": "go test -race ./internal/worker/reaper -count=10", + "status": "PASS", + "output": "ok github.com/thebtf/engram/internal/worker/reaper 3.788s" + }, + { + "name": "service_shutdown_race_repeat_10", + "command": "go test -race ./internal/worker -run '^TestServiceShutdown_' -count=10", + "status": "PASS", + "output": "ok github.com/thebtf/engram/internal/worker 6.024s" + }, + { + "name": "reaper_package_repeat_3", + "command": "go test ./internal/worker/reaper -count=3", + "status": "PASS", + "output": "ok github.com/thebtf/engram/internal/worker/reaper 0.522s" + }, + { + "name": "worker_unit_baseline", + "command": "DATABASE_DSN unset; go test ./internal/worker -count=1", + "status": "PASS", + "output": "ok github.com/thebtf/engram/internal/worker 0.762s" + }, + { + "name": "worker_tree_unit_baseline", + "command": "DATABASE_DSN unset; go test ./internal/worker/... -count=1", + "status": "PASS", + "output": "worker, projectevents, reaper, sdk, session, and sse packages passed" + }, + { + "name": "repository_unit_baseline", + "command": "DATABASE_DSN unset; go test ./... -count=1", + "status": "PASS", + "output": "all repository packages passed; packages without tests were reported explicitly" + }, + { + "name": "reaper_coverage", + "command": "go test ./internal/worker/reaper -coverprofile=reaper.coverage.out -count=1", + "status": "PASS", + "output": "87.6% statements" + }, + { + "name": "vet", + "command": "go vet ./...", + "status": "PASS", + "output": "exit 0" + }, + { + "name": "server_build", + "command": "go build -o .agent/tmp/db-reaper-lifecycle/engram-server.exe ./cmd/engram-server", + "status": "PASS", + "output": "48905728 bytes; SHA256 FCF19C377C32F86071052F6C1DCBB8DA53F5E360F65C1DBF0D12BC1DB74E7760" + }, + { + "name": "diff_check", + "command": "git diff --check", + "status": "PASS", + "output": "exit 0" + } + ], + "discrepancies": [ + { + "command": "DATABASE_DSN=engram_prc_reaper_lifecycle_rework; go test ./internal/worker -count=1", + "status": "FAIL_OUT_OF_SCOPE", + "failures": [ + "TestAuthHandlersLifecycle_LastAdminDemoteRaceLeavesOneAdmin", + "TestAuthHandlersLifecycle_DisabledAdminCanBeDemotedWithoutLastAdminError", + "TestCrystallizationIntegration_DecisionsStoredWithCorrectFields", + "TestCrystallizationIntegration_PrivacyRedaction", + "TestCrystallizationIntegration_ConcurrentReplaySkipsDuplicateFingerprint" + ], + "classification": "No failing test touches the reaper/service lifecycle diff. The two auth failures belong to the separately assigned DB-AUTH isolation lane. The three crystallization tests assert demolished direct decision-memory behavior and are outside the DB-REAPER contract. The same worker package and full repository pass with DATABASE_DSN unset, while the DB-backed shutdown tests pass under repeat and race." + } + ] +} diff --git a/internal/worker/reaper/reaper.go b/internal/worker/reaper/reaper.go index 90bc26b0..637f4ef3 100644 --- a/internal/worker/reaper/reaper.go +++ b/internal/worker/reaper/reaper.go @@ -7,7 +7,7 @@ // - observations — project column is TEXT, no FK constraint // - sdk_sessions — project column is TEXT, no FK constraint // - injection_log — project column is TEXT, no FK constraint (table was -// dropped at migration 084 then restored at migration 106) +// dropped at migration 084 then restored at migration 106) // - patterns — no project FK column // - memory_blocks — not present in migrations (non-existent table) // - collections — not present in migrations (non-existent table) @@ -26,6 +26,7 @@ import ( "fmt" "os" "strconv" + "sync" "time" "github.com/rs/zerolog/log" @@ -36,76 +37,168 @@ const ( // defaultRetentionDays is the number of days a soft-deleted project is kept // before the reaper hard-deletes the row. defaultRetentionDays = 30 + retentionDay = 24 * time.Hour + + // maxRetentionDays is the largest whole-day retention that can be converted + // to time.Duration without overflow. Larger positive configurations fail safe + // by skipping the sweep; clamping them downward could delete rows newer than + // the operator-requested retention boundary. + maxRetentionDays = int64((1<<63 - 1) / retentionDay) // reaperInterval is how often the reaper runs its cleanup sweep. reaperInterval = 1 * time.Hour ) +type retentionConfig struct { + days int64 + skipPurge bool + usedDefault bool +} + +type reaperTicker interface { + Chan() <-chan time.Time + Stop() +} + +type wallClockTicker struct { + *time.Ticker +} + +func (t *wallClockTicker) Chan() <-chan time.Time { return t.C } + +func newWallClockTicker(interval time.Duration) reaperTicker { + return &wallClockTicker{Ticker: time.NewTicker(interval)} +} + // Reaper periodically hard-deletes project rows whose removed_at timestamp // has passed the retention window. type Reaper struct { - db *gorm.DB - stop chan struct{} - done chan struct{} + db *gorm.DB + + lifecycleMu sync.Mutex + running bool + stopping bool + cancel context.CancelFunc + done chan struct{} + newTicker func(time.Duration) reaperTicker } // New creates a Reaper backed by the given database connection. func New(db *gorm.DB) *Reaper { return &Reaper{ - db: db, - stop: make(chan struct{}), - done: make(chan struct{}), + db: db, + newTicker: newWallClockTicker, } } // Start launches the reaper loop in a background goroutine. It respects ctx for // graceful shutdown and also responds to Stop(). Returns immediately. func (r *Reaper) Start(ctx context.Context) { - log.Info(). + if ctx == nil { + ctx = context.Background() + } + + r.lifecycleMu.Lock() + if r.running || r.stopping { + r.lifecycleMu.Unlock() + return + } + runCtx, cancel := context.WithCancel(ctx) + done := make(chan struct{}) + newTicker := r.newTicker + if newTicker == nil { + newTicker = newWallClockTicker + } + r.running = true + r.cancel = cancel + r.done = done + r.lifecycleMu.Unlock() + + retention := loadRetentionConfig() + startLog := log.Info(). Dur("interval", reaperInterval). - Int("retention_days", retentionDays()). - Msg("project reaper started") - - go func() { - defer close(r.done) - - ticker := time.NewTicker(reaperInterval) - defer ticker.Stop() - - for { - select { - case <-ctx.Done(): - log.Info().Msg("project reaper stopped (context cancelled)") - return - case <-r.stop: - log.Info().Msg("project reaper stopped") - return - case <-ticker.C: - r.purge(ctx) - } - } - }() + Bool("purge_disabled", retention.skipPurge). + Bool("retention_defaulted", retention.usedDefault) + if !retention.skipPurge { + startLog.Int64("retention_days", retention.days) + } + startLog.Msg("project reaper started") + + go r.run(runCtx, cancel, done, newTicker) } // Stop signals the reaper to cease and waits for the goroutine to exit. func (r *Reaper) Stop() { - select { - case <-r.stop: - // Already closed — idempotent. - default: - close(r.stop) + r.lifecycleMu.Lock() + if r.done == nil { + r.lifecycleMu.Unlock() + return } - <-r.done + r.stopping = true + cancel := r.cancel + done := r.done + r.lifecycleMu.Unlock() + + if cancel != nil { + cancel() + } + <-done + + r.lifecycleMu.Lock() + if r.done == done { + r.running = false + r.stopping = false + r.cancel = nil + r.done = nil + } + r.lifecycleMu.Unlock() } -// purge deletes projects that were soft-deleted more than retentionDays() ago. -// It is idempotent and safe to call concurrently. -func (r *Reaper) purge(ctx context.Context) { +func (r *Reaper) run(ctx context.Context, cancel context.CancelFunc, done chan struct{}, newTicker func(time.Duration) reaperTicker) { + ticker := newTicker(reaperInterval) + defer func() { + ticker.Stop() + cancel() + + r.lifecycleMu.Lock() + if r.done == done { + r.running = false + if !r.stopping { + r.cancel = nil + r.done = nil + } + } + close(done) + r.lifecycleMu.Unlock() + }() + + for { + select { + case <-ctx.Done(): + log.Info().Msg("project reaper stopped (context cancelled)") + return + case <-ticker.Chan(): + if err := r.purge(ctx); err != nil { + log.Error().Err(err).Msg("project reaper: purge sweep failed") + } + } + } +} + +// purge deletes projects older than the configured retention boundary. It is +// idempotent and safe to call concurrently. +func (r *Reaper) purge(ctx context.Context) error { if r.db == nil { - return + return fmt.Errorf("reaper: db is nil") } - retention := time.Duration(retentionDays()) * 24 * time.Hour + config := loadRetentionConfig() + if config.skipPurge { + log.Warn().Msg("project reaper: configured retention exceeds safe duration; purge skipped") + return nil + } + + retention := time.Duration(config.days) * retentionDay cutoff := time.Now().UTC().Add(-retention) result := r.db.WithContext(ctx). @@ -114,8 +207,7 @@ func (r *Reaper) purge(ctx context.Context) { cutoff, ) if result.Error != nil { - log.Error().Err(result.Error).Msg("project reaper: purge query failed") - return + return fmt.Errorf("project reaper: purge query failed: %w", result.Error) } if result.RowsAffected > 0 { @@ -124,17 +216,65 @@ func (r *Reaper) purge(ctx context.Context) { Time("cutoff", cutoff). Msg("project reaper: purged soft-deleted projects") } + return nil +} + +// loadRetentionConfig reads ENGRAM_PROJECT_RETENTION_DAYS on each sweep so a +// process-level configuration refresh is observed without restarting the job. +func loadRetentionConfig() retentionConfig { + return parseRetentionConfig(os.Getenv("ENGRAM_PROJECT_RETENTION_DAYS")) +} + +// parseRetentionConfig defines the fail-safe retention behavior: +// - unset, malformed, zero, and negative values use the 30-day default; +// - positive values within time.Duration range are honored exactly; +// - larger positive values skip the purge rather than wrapping or clamping. +func parseRetentionConfig(value string) retentionConfig { + useDefault := func() retentionConfig { + return retentionConfig{days: defaultRetentionDays, usedDefault: true} + } + + if value == "" { + return useDefault() + } + + days, err := strconv.ParseInt(value, 10, 64) + if err != nil { + if isPositiveDecimal(value) { + return retentionConfig{skipPurge: true} + } + return useDefault() + } + if days <= 0 { + return useDefault() + } + if days > maxRetentionDays { + return retentionConfig{skipPurge: true} + } + return retentionConfig{days: days} } -// retentionDays returns the configured retention window in days. -// Reads ENGRAM_PROJECT_RETENTION_DAYS; falls back to defaultRetentionDays. -func retentionDays() int { - if v := os.Getenv("ENGRAM_PROJECT_RETENTION_DAYS"); v != "" { - if days, err := strconv.Atoi(v); err == nil && days > 0 { - return days +func isPositiveDecimal(value string) bool { + if value == "" { + return false + } + if value[0] == '+' { + value = value[1:] + } + if value == "" { + return false + } + + hasNonZero := false + for _, digit := range value { + if digit < '0' || digit > '9' { + return false + } + if digit != '0' { + hasNonZero = true } } - return defaultRetentionDays + return hasNonZero } // PurgeOnce runs a single purge sweep synchronously. Useful for integration @@ -143,6 +283,5 @@ func (r *Reaper) PurgeOnce(ctx context.Context) error { if r.db == nil { return fmt.Errorf("reaper: db is nil") } - r.purge(ctx) - return nil + return r.purge(ctx) } diff --git a/internal/worker/reaper/reaper_test.go b/internal/worker/reaper/reaper_test.go index 7c6f6721..e28f590d 100644 --- a/internal/worker/reaper/reaper_test.go +++ b/internal/worker/reaper/reaper_test.go @@ -3,6 +3,9 @@ package reaper import ( "context" "os" + "strconv" + "strings" + "sync" "testing" "time" @@ -137,35 +140,363 @@ func TestReaper_RespectsRetentionEnvVar(t *testing.T) { } } -func TestReaper_StopsOnContextCancel(t *testing.T) { - t.Parallel() +func TestParseRetentionConfig_ExplicitInvalidAndLargeBehavior(t *testing.T) { + tests := []struct { + name string + value string + wantDays int64 + wantSkip bool + wantDefault bool + }{ + {name: "unset uses default", value: "", wantDays: defaultRetentionDays, wantDefault: true}, + {name: "configured positive", value: "7", wantDays: 7}, + {name: "malformed uses default", value: "not-a-number", wantDays: defaultRetentionDays, wantDefault: true}, + {name: "zero uses default", value: "0", wantDays: defaultRetentionDays, wantDefault: true}, + {name: "negative uses default", value: "-9", wantDays: defaultRetentionDays, wantDefault: true}, + {name: "largest duration-safe value", value: strconv.FormatInt(maxRetentionDays, 10), wantDays: maxRetentionDays}, + {name: "one day beyond duration range skips purge", value: strconv.FormatInt(maxRetentionDays+1, 10), wantSkip: true}, + {name: "arbitrarily large positive skips purge", value: "999999999999999999999999999999999999999999", wantSkip: true}, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + got := parseRetentionConfig(tt.value) + if got.days != tt.wantDays { + t.Fatalf("days = %d, want %d", got.days, tt.wantDays) + } + if got.skipPurge != tt.wantSkip { + t.Fatalf("skipPurge = %v, want %v", got.skipPurge, tt.wantSkip) + } + if got.usedDefault != tt.wantDefault { + t.Fatalf("usedDefault = %v, want %v", got.usedDefault, tt.wantDefault) + } + }) + } +} +func TestReaper_InvalidRetentionFallsBack(t *testing.T) { db, cleanup := testReaperDB(t) defer cleanup() - r := New(db) + t.Setenv("ENGRAM_PROJECT_RETENTION_DAYS", "not-a-number") + + expiredID := "reaper-invalid-expired-" + t.Name() + recentID := "reaper-invalid-recent-" + t.Name() + if err := db.Exec( + "INSERT INTO projects (id, removed_at) VALUES (?, ?), (?, ?)", + expiredID, time.Now().UTC().Add(-60*24*time.Hour), + recentID, time.Now().UTC().Add(-24*time.Hour), + ).Error; err != nil { + t.Fatalf("insert invalid-retention fixtures: %v", err) + } + defer db.Exec("DELETE FROM projects WHERE id IN (?, ?)", expiredID, recentID) + + if err := New(db).PurgeOnce(context.Background()); err != nil { + t.Fatalf("PurgeOnce: %v", err) + } + + var expiredCount, recentCount int64 + db.Raw("SELECT COUNT(*) FROM projects WHERE id = ?", expiredID).Scan(&expiredCount) + db.Raw("SELECT COUNT(*) FROM projects WHERE id = ?", recentID).Scan(&recentCount) + if expiredCount != 0 || recentCount != 1 { + t.Fatalf("default fallback counts = expired:%d recent:%d, want expired:0 recent:1", expiredCount, recentCount) + } +} + +func TestReaper_LargeRetentionDoesNotWrapOrPurgeNewerRows(t *testing.T) { + db, cleanup := testReaperDB(t) + defer cleanup() + + t.Setenv("ENGRAM_PROJECT_RETENTION_DAYS", strconv.FormatInt(maxRetentionDays+1, 10)) + + id := "reaper-large-retention-" + t.Name() + removedAt := time.Now().UTC().Add(-60 * 24 * time.Hour) + if err := db.Exec( + "INSERT INTO projects (id, removed_at) VALUES (?, ?)", + id, removedAt, + ).Error; err != nil { + t.Fatalf("insert large-retention fixture: %v", err) + } + defer db.Exec("DELETE FROM projects WHERE id = ?", id) + + if err := New(db).PurgeOnce(context.Background()); err != nil { + t.Fatalf("PurgeOnce: %v", err) + } + + var count int64 + db.Raw("SELECT COUNT(*) FROM projects WHERE id = ?", id).Scan(&count) + if count != 1 { + t.Fatalf("large retention removed a row newer than requested; count = %d, want 1", count) + } +} + +func TestReaper_PurgeOnceReturnsQueryError(t *testing.T) { + db, cleanup := testReaperDB(t) + defer cleanup() + + sqlDB, err := db.DB() + if err != nil { + t.Fatalf("get sql DB: %v", err) + } + if err := sqlDB.Close(); err != nil { + t.Fatalf("close sql DB: %v", err) + } + + err = New(db).PurgeOnce(context.Background()) + if err == nil { + t.Fatal("PurgeOnce returned nil after the database was closed") + } + if !strings.Contains(err.Error(), "purge query failed") { + t.Fatalf("PurgeOnce error = %q, want purge query context", err) + } +} + +func TestReaper_StopBeforeStartReturns(t *testing.T) { + r := New(nil) + + returned := make(chan struct{}) + go func() { + r.Stop() + close(returned) + }() + + select { + case <-returned: + case <-time.After(500 * time.Millisecond): + t.Fatal("Stop blocked before Start") + } +} + +type trackingReaperTicker struct { + ticks chan time.Time + stopOnce sync.Once + onStop func() +} + +func (t *trackingReaperTicker) Chan() <-chan time.Time { return t.ticks } + +func (t *trackingReaperTicker) Stop() { + t.stopOnce.Do(t.onStop) +} + +type tickerLifecycleTracker struct { + mu sync.Mutex + started int + stopped int + active int + maxActive int +} + +func (t *tickerLifecycleTracker) New(time.Duration) reaperTicker { + t.mu.Lock() + t.started++ + t.active++ + if t.active > t.maxActive { + t.maxActive = t.active + } + t.mu.Unlock() + + return &trackingReaperTicker{ + ticks: make(chan time.Time), + onStop: func() { + t.mu.Lock() + t.stopped++ + t.active-- + t.mu.Unlock() + }, + } +} + +func (t *tickerLifecycleTracker) snapshot() (started, stopped, active, maxActive int) { + t.mu.Lock() + defer t.mu.Unlock() + return t.started, t.stopped, t.active, t.maxActive +} + +func (t *tickerLifecycleTracker) waitForStarts(tb testing.TB, want int) { + tb.Helper() + deadline := time.Now().Add(2 * time.Second) + for time.Now().Before(deadline) { + started, _, _, _ := t.snapshot() + if started >= want { + return + } + time.Sleep(time.Millisecond) + } + started, _, _, _ := t.snapshot() + tb.Fatalf("ticker starts = %d, want at least %d", started, want) +} + +func TestReaper_ConcurrentStartIsIdempotent(t *testing.T) { + r := New(nil) + tracker := &tickerLifecycleTracker{} + r.newTicker = tracker.New ctx, cancel := context.WithCancel(context.Background()) + defer cancel() - // Use a very short ticker for this test. We override via a minimal loop. - // Start the reaper. - r.Start(ctx) + start := make(chan struct{}) + var callers sync.WaitGroup + for range 32 { + callers.Add(1) + go func() { + defer callers.Done() + <-start + r.Start(ctx) + }() + } + close(start) + callers.Wait() + tracker.waitForStarts(t, 1) + + started, _, _, maxActive := tracker.snapshot() + if started != 1 || maxActive != 1 { + t.Fatalf("concurrent Start created %d loops with max active %d, want exactly one", started, maxActive) + } + r.Stop() +} + +func TestReaper_ConcurrentStopJoinsSingleLoop(t *testing.T) { + r := New(nil) + tracker := &tickerLifecycleTracker{} + r.newTicker = tracker.New + r.Start(context.Background()) + tracker.waitForStarts(t, 1) + + start := make(chan struct{}) + var callers sync.WaitGroup + for range 32 { + callers.Add(1) + go func() { + defer callers.Done() + <-start + r.Stop() + }() + } + close(start) + + allReturned := make(chan struct{}) + go func() { + callers.Wait() + close(allReturned) + }() + select { + case <-allReturned: + case <-time.After(2 * time.Second): + t.Fatal("concurrent Stop calls blocked") + } + + started, stopped, active, _ := tracker.snapshot() + if started != 1 || stopped != 1 || active != 0 { + t.Fatalf("ticker lifecycle = started:%d stopped:%d active:%d, want 1/1/0", started, stopped, active) + } +} - // Cancel context almost immediately — reaper should stop cleanly. +func TestReaper_StopWaitsForTickerCleanup(t *testing.T) { + stopEntered := make(chan struct{}) + releaseStop := make(chan struct{}) + ticker := &trackingReaperTicker{ + ticks: make(chan time.Time), + onStop: func() { + close(stopEntered) + <-releaseStop + }, + } + created := make(chan struct{}) + + r := New(nil) + r.newTicker = func(time.Duration) reaperTicker { + close(created) + return ticker + } + r.Start(context.Background()) + <-created + + stopReturned := make(chan struct{}) + go func() { + r.Stop() + close(stopReturned) + }() + + select { + case <-stopEntered: + case <-time.After(2 * time.Second): + t.Fatal("ticker cleanup did not start") + } + select { + case <-stopReturned: + t.Fatal("Stop returned before ticker cleanup completed") + default: + } + close(releaseStop) + select { + case <-stopReturned: + case <-time.After(2 * time.Second): + t.Fatal("Stop did not join the reaper goroutine") + } +} + +func TestReaper_ConcurrentStartStopLeavesNoLoopOrTicker(t *testing.T) { + r := New(nil) + tracker := &tickerLifecycleTracker{} + r.newTicker = tracker.New + + for round := 0; round < 25; round++ { + startedBefore, _, _, _ := tracker.snapshot() + r.Start(context.Background()) + tracker.waitForStarts(t, startedBefore+1) + + start := make(chan struct{}) + var callers sync.WaitGroup + for i := 0; i < 16; i++ { + callers.Add(1) + go func(stop bool) { + defer callers.Done() + <-start + if stop { + r.Stop() + return + } + r.Start(context.Background()) + }(i%2 == 0) + } + close(start) + callers.Wait() + r.Stop() + } + + started, stopped, active, maxActive := tracker.snapshot() + if started != stopped || active != 0 || maxActive > 1 { + t.Fatalf("ticker lifecycle = started:%d stopped:%d active:%d max_active:%d, want balanced with max_active <= 1", started, stopped, active, maxActive) + } +} + +func TestReaper_StopsOnContextCancel(t *testing.T) { + t.Parallel() + + r := New(nil) + tracker := &tickerLifecycleTracker{} + r.newTicker = tracker.New + + ctx, cancel := context.WithCancel(context.Background()) + r.Start(ctx) + tracker.waitForStarts(t, 1) cancel() - // Stop() waits for the goroutine — if it doesn't exit, the test will timeout. - done := make(chan struct{}) + stopped := make(chan struct{}) go func() { - // Wait for the done channel which is closed when the goroutine exits. - <-r.done - close(done) + r.Stop() + close(stopped) }() select { - case <-done: - // Clean exit. - case <-time.After(5 * time.Second): - t.Fatal("reaper goroutine did not stop within 5s after context cancel") + case <-stopped: + case <-time.After(2 * time.Second): + t.Fatal("reaper goroutine did not stop after context cancel") + } + + started, tickerStops, active, _ := tracker.snapshot() + if started != 1 || tickerStops != 1 || active != 0 { + t.Fatalf("context cancellation lifecycle = started:%d stopped:%d active:%d, want 1/1/0", started, tickerStops, active) } } diff --git a/internal/worker/service.go b/internal/worker/service.go index 6c6c5e3b..56538441 100644 --- a/internal/worker/service.go +++ b/internal/worker/service.go @@ -168,6 +168,9 @@ type Service struct { version string recentQueriesBuf [maxRecentQueries]RecentSearchQuery wg sync.WaitGroup + initWG sync.WaitGroup + shutdownOnce sync.Once + shutdownErr error recentQueriesLen int recentQueriesHead int statsCacheTTL time.Duration @@ -208,7 +211,7 @@ type Service struct { vaultErr error promptCache sync.Map // map[int64]promptCacheEntry — last user prompt per session eventBus *projectevents.Bus - projectReaper *reaper.Reaper + projectReaper projectReaperLifecycle // lastRequestAt tracks the Unix nanosecond timestamp of the most recent // MCP/REST request handled by this server. Updated atomically in // requestActivityMiddleware on every request. @@ -269,6 +272,10 @@ type lifecycleQueue interface { Stop() error } +type projectReaperLifecycle interface { + Stop() +} + // promptCacheEntry stores a user prompt with a timestamp for eviction. type promptCacheEntry struct { Prompt string @@ -737,7 +744,11 @@ func NewService(version string, logBuffer *logbuf.RingBuffer) (*Service, error) // Kick off heavy initialization in the background. The service is already // accepting requests at this point; data-plane routes gate on s.ready. - go svc.initializeAsync() + svc.initWG.Add(1) + go func() { + defer svc.initWG.Done() + svc.initializeAsync() + }() return svc, nil } @@ -757,6 +768,10 @@ func (s *Service) createChunkManager() *chunking.Manager { // On any fatal error it calls setInitError which surfaces through /api/health. func (s *Service) initializeAsync() { log.Info().Msg("background init: starting") + if s.ctx != nil && s.ctx.Err() != nil { + log.Info().Msg("background init: cancelled before database initialization") + return + } // Verify data directory layout and settings file presence before the first DB dial. if err := config.EnsureAll(); err != nil { @@ -1231,6 +1246,11 @@ func (s *Service) initializeAsync() { s.retrievalStatsLogStore = retrievalStatsLogStore s.initMu.Unlock() + if s.ctx != nil && s.ctx.Err() != nil { + log.Info().Msg("background init: cancelled before background workers started") + return + } + // All stores are wired. Flip the ready flag so /api/ready and requireReady // middleware start passing requests through to the data-plane handlers. s.ready.Store(true) @@ -1238,7 +1258,9 @@ func (s *Service) initializeAsync() { // Start project reaper (hourly cleanup of hard-expired soft-deleted projects). projectReaper := reaper.New(store.DB) + s.initMu.Lock() s.projectReaper = projectReaper + s.initMu.Unlock() projectReaper.Start(s.ctx) // Start retention cron for injection_log and citation_log cleanup. @@ -2202,22 +2224,40 @@ func (s *Service) processAllSessions() { // The phased sequence is: // // 1. Cancel root context — signals all goroutines to stop accepting new work -// 2. HTTP + gRPC servers — stop accepting new connections (in-flight requests drain) -// 3. Config watcher — avoid spurious hot-reload during teardown -// 4. Background workers — cognitive queue, write-lint janitor -// 5. Session manager — flush pending observation/summary messages -// 6. WaitGroup drain — wait up to the caller-supplied context deadline -// 7. Database — closed last because components above may still read it +// 2. Initialization join — prevent partially initialized workers appearing later +// 3. HTTP + gRPC servers — stop accepting new connections (in-flight requests drain) +// 4. Config watcher — avoid spurious hot-reload during teardown +// 5. Background workers — project reaper, cognitive queue, write-lint janitor +// 6. Session manager — flush pending observation/summary messages +// 7. WaitGroup drain — wait up to the caller-supplied context deadline +// 8. Database — closed last because components above may still read it // // The caller supplies the deadline via ctx. If the deadline fires before the // WaitGroup drains, teardown continues and a warning is logged. The first // component error (if any) is returned; subsequent errors are only logged. func (s *Service) Shutdown(ctx context.Context) error { + if ctx == nil { + ctx = context.Background() + } + s.shutdownOnce.Do(func() { + s.shutdownErr = s.shutdown(ctx) + }) + return s.shutdownErr +} + +func (s *Service) shutdown(ctx context.Context) error { log.Info().Msg("graceful shutdown: starting") start := time.Now() // Signal all background goroutines. - s.cancel() + if s.cancel != nil { + s.cancel() + } + + // initializeAsync owns construction of the database-backed workers. Join it + // before taking shutdown snapshots so a late project reaper cannot appear + // after teardown has already passed the worker phase. + s.initWG.Wait() var shutdownErrors []error var errMu sync.Mutex @@ -2248,6 +2288,12 @@ func (s *Service) Shutdown(ctx context.Context) error { // Phase 3: stop background workers. log.Debug().Msg("shutdown phase 3: background workers") + s.initMu.RLock() + projectReaper := s.projectReaper + s.initMu.RUnlock() + if projectReaper != nil { + projectReaper.Stop() + } if s.cognitiveQueueLifecycle != nil { collectError("cognitive_hint_queue", s.cognitiveQueueLifecycle.Stop()) } diff --git a/internal/worker/service_reaper_lifecycle_test.go b/internal/worker/service_reaper_lifecycle_test.go new file mode 100644 index 00000000..3626f9a9 --- /dev/null +++ b/internal/worker/service_reaper_lifecycle_test.go @@ -0,0 +1,194 @@ +package worker + +import ( + "context" + "fmt" + "os" + "sync" + "sync/atomic" + "testing" + "time" + + dbgorm "github.com/thebtf/engram/internal/db/gorm" +) + +func TestServiceShutdown_PartialInitIsNilSafeAndIdempotent(t *testing.T) { + svc := &Service{} + + contexts := []context.Context{nil, context.Background()} + for i, ctx := range contexts { + if err := svc.Shutdown(ctx); err != nil { + t.Fatalf("Shutdown call %d: %v", i+1, err) + } + } +} + +type blockingProjectReaper struct { + stopStarted chan struct{} + release <-chan struct{} + onStop func() + startOnce sync.Once + stopCalls atomic.Int32 +} + +func (r *blockingProjectReaper) Stop() { + r.stopCalls.Add(1) + if r.onStop != nil { + r.onStop() + } + if r.stopStarted != nil { + r.startOnce.Do(func() { close(r.stopStarted) }) + } + if r.release != nil { + <-r.release + } +} + +func TestServiceShutdown_ConcurrentCallsStopReaperOnce(t *testing.T) { + reaper := &blockingProjectReaper{} + svc := &Service{ + cancel: func() {}, + projectReaper: reaper, + } + + start := make(chan struct{}) + results := make(chan error, 32) + var callers sync.WaitGroup + for range 32 { + callers.Add(1) + go func() { + defer callers.Done() + <-start + results <- svc.Shutdown(context.Background()) + }() + } + close(start) + + returned := make(chan struct{}) + go func() { + callers.Wait() + close(returned) + }() + select { + case <-returned: + case <-time.After(2 * time.Second): + t.Fatal("concurrent Shutdown calls blocked") + } + close(results) + for err := range results { + if err != nil { + t.Fatalf("Shutdown: %v", err) + } + } + if got := reaper.stopCalls.Load(); got != 1 { + t.Fatalf("reaper Stop calls = %d, want 1", got) + } +} + +func TestServiceShutdown_WaitsForPartialInitializationBeforeReaperStop(t *testing.T) { + stopStarted := make(chan struct{}) + reaper := &blockingProjectReaper{stopStarted: stopStarted} + cancelled := make(chan struct{}) + var cancelOnce sync.Once + svc := &Service{ + cancel: func() { + cancelOnce.Do(func() { close(cancelled) }) + }, + projectReaper: reaper, + } + svc.initWG.Add(1) + initReleased := false + defer func() { + if !initReleased { + svc.initWG.Done() + } + }() + + shutdownDone := make(chan error, 1) + go func() { shutdownDone <- svc.Shutdown(context.Background()) }() + <-cancelled + + select { + case <-stopStarted: + t.Fatal("reaper Stop ran before partial initialization joined") + case <-time.After(50 * time.Millisecond): + } + + svc.initWG.Done() + initReleased = true + select { + case <-stopStarted: + case <-time.After(2 * time.Second): + t.Fatal("reaper Stop did not run after initialization joined") + } + if err := <-shutdownDone; err != nil { + t.Fatalf("Shutdown: %v", err) + } +} + +func TestServiceShutdown_WaitsForReaperBeforeClosingDatabase(t *testing.T) { + dsn := os.Getenv("DATABASE_DSN") + if dsn == "" { + t.Skip("DATABASE_DSN not set, skipping service shutdown database-order test") + } + + store, err := dbgorm.NewStore(dbgorm.Config{DSN: dsn, MaxConns: 2}) + if err != nil { + t.Fatalf("new store: %v", err) + } + t.Cleanup(func() { _ = store.Close() }) + sqlDB, err := store.DB.DB() + if err != nil { + t.Fatalf("get sql DB: %v", err) + } + + stopStarted := make(chan struct{}) + releaseStop := make(chan struct{}) + stopCheck := make(chan error, 1) + reaper := &blockingProjectReaper{ + stopStarted: stopStarted, + release: releaseStop, + onStop: func() { + if err := sqlDB.PingContext(context.Background()); err != nil { + stopCheck <- fmt.Errorf("database closed before reaper Stop: %w", err) + return + } + stopCheck <- nil + }, + } + svc := &Service{ + cancel: func() {}, + store: store, + projectReaper: reaper, + } + + shutdownDone := make(chan error, 1) + go func() { shutdownDone <- svc.Shutdown(context.Background()) }() + + select { + case <-stopStarted: + case err := <-shutdownDone: + t.Fatalf("Shutdown returned before stopping reaper: %v", err) + case <-time.After(2 * time.Second): + t.Fatal("Shutdown did not stop the reaper") + } + if err := <-stopCheck; err != nil { + t.Fatal(err) + } + select { + case err := <-shutdownDone: + t.Fatalf("Shutdown returned before reaper released: %v", err) + default: + } + if err := sqlDB.PingContext(context.Background()); err != nil { + t.Fatalf("database closed while reaper Stop was in progress: %v", err) + } + + close(releaseStop) + if err := <-shutdownDone; err != nil { + t.Fatalf("Shutdown: %v", err) + } + if err := sqlDB.PingContext(context.Background()); err == nil { + t.Fatal("database remained open after Shutdown completed") + } +} From f987ce16ee1a0777793bc95113edd2885b19e202 Mon Sep 17 00:00:00 2001 From: Kirill Turanskiy Date: Fri, 10 Jul 2026 14:24:39 +0300 Subject: [PATCH 020/111] governance: amend production-ready revision 4 authority --- ...-10-engram-production-ready-master-plan.md | 36 +++++++++++-------- ...gram-production-ready-ownership-state.json | 22 +++++++++++- 2 files changed, 43 insertions(+), 15 deletions(-) diff --git a/.agent/plans/2026-07-10-engram-production-ready-master-plan.md b/.agent/plans/2026-07-10-engram-production-ready-master-plan.md index b6b48ba2..dbcde493 100644 --- a/.agent/plans/2026-07-10-engram-production-ready-master-plan.md +++ b/.agent/plans/2026-07-10-engram-production-ready-master-plan.md @@ -1,11 +1,11 @@ # Engram Production-Ready Master Plan -Status: PLAN_REVISION_3_PENDING_INDEPENDENT_CHALLENGE -Date: 2026-07-10 -Revision: 3 -Goal contract: `.agent/goals/2026-07-10-engram-production-ready-marathon.md` -Release baseline: `origin/main@dc891b2d72b1fd63b83e4a630a249241fc389151` (`v6.42.0`) -`core_safe_point_version`: candidate `v6.43.0-rc.1`, publish target `v6.43.0` after release analysis confirms it +Status: PLAN_REVISION_4_PENDING_INDEPENDENT_CHALLENGE +Date: 2026-07-10 +Revision: 4 +Goal contract: `.agent/goals/2026-07-10-engram-production-ready-marathon.md` +Release baseline: `origin/main@dc891b2d72b1fd63b83e4a630a249241fc389151` (`v6.42.0`) +`core_safe_point_version`: candidate `v6.43.0-rc.1`, publish target `v6.43.0` after release analysis confirms it `final_ready_version`: `BLOCKED_UNTIL_M6_INTEGRATED_DIFF`; root must resolve the exact version, release-note path, image/plugin identities, and compatibility artifact roots before `FINAL-PUBLIC-TRUTH` or M7 release work is dispatched ## 1. Outcome @@ -32,6 +32,8 @@ Durable baseline evidence: - `.agent/reviews/2026-07-10-production-ready-master-plan-revision-check.md` - `.agent/reports/2026-07-10-production-ready-master-plan-revision-2-maker.md` - `.agent/reviews/2026-07-10-production-ready-master-plan-revision-2-check.md` (SHA256 `C7A96460C34951C0876F3F87F3B404E037D246A974D9AC491D5A9C2FF455FCCB`, verdict `REVISE`) +- `.agent/reviews/2026-07-10-release-gates-foundation-revision-3-independent-check.md` (root-owned checker artifact, SHA256 `E2B399BAA66C463D3301DBC9F7775ABF357D2411C74EBDBFDB11CD1A020619E0`, verdict `REVISE`) +- `.agent/reviews/2026-07-10-db-crystallization-independent-check.md` (root-owned checker artifact, SHA256 `84F7E0D424D354DB671719CBC9142FFDBFF9B7837CAFC4E62E248C31B1DB5AA6`, verdict `PASS_WITH_CONCERNS`; production blockers remain open) - `.agent/reports/2026-07-10-openclaw-ingest-classification.md` (SHA256 `A095E9D7B69DC95CAC4022EB97D2EA9B403D5132F5602FDD85E7D3A93092F5D4`) - `.agent/reports/2026-07-10-mcp-structured-input-classification.md` (SHA256 `3356F3AE6073F95E701707FCF451D63809AC186ED1DEA7321A7027C4C3122E7A`, verdict `CLASSIFIED_MUST_BUILD / BLOCKS_RELEASE`) - `.agent/worktrees/prc-db-bulkops/.agent/reviews/2026-07-10-db-bulkops-sibling-rework-check.md` (SHA256 `EB9EB227363A27EA058C6654BD7E38EED1088252F79F837E377B2A3CBC1FAFB7`, verdict `FAIL / REVISE_HOLD`) @@ -45,7 +47,7 @@ Durable baseline evidence: The JSON/Markdown evidence register is the sole authority for mutable progress. This revision also contains immutable source-lock facts and a tracked ownership-state contract; neither substitutes for the register. Root updates the JSON register first, renders the Markdown register and HTML from that exact state, and only then makes a dispatch/integration decision. Every row records criterion, slice, branch/base/head, exact command, environment identity, raw artifact, exit code, checker artifact, review artifact, integration SHA, timestamp, and notes. An empty field remains UNKNOWN; it is never inferred as green. -Revision-3 source lock: RELEASE-GATES is based on `2b3ef3e33bd19e630f8f67d07a9e2521cb98537f`; that base is failed/pending foundation authority, and this revision-3 maker head remains `PENDING` until committed, independently checked, post-reviewed, and integrated. DB-BULKOPS rejected composite head `68b2ce5835c7c6efdf1c68da9eedcb8d9c3837ef` has parent `6ea10496aa127fba7fdb194875044e770d0a1d8c`, checker artifact `.agent/worktrees/prc-db-bulkops/.agent/reviews/2026-07-10-db-bulkops-sibling-rework-check.md`, checker verdict `FAIL / REVISE_HOLD`, checker SHA256 `EB9EB227363A27EA058C6654BD7E38EED1088252F79F837E377B2A3CBC1FAFB7`, and two release-blocking HIGH defects: a wrong-type candidate-review snapshot can reach mutation without durable audit, and public bulk IDs are lossy-coerced so a fraction such as `1.9` becomes `1` and a numeric string such as `"2"` becomes `2`. Active owner DB-BULKOPS-BEHAVIORAL-EDGE-REWORK starts exactly from `68b2ce5835c7c6efdf1c68da9eedcb8d9c3837ef`; its head is `PENDING`. The rejected head and any dirty overlay are not dispatch authority. MCP structured-input classification is locked to `.agent/reports/2026-07-10-mcp-structured-input-classification.md` SHA256 `3356F3AE6073F95E701707FCF451D63809AC186ED1DEA7321A7027C4C3122E7A`: malformed present booleans can cross preview/confidentiality boundaries into live writes, lossy IDs can select the wrong durable row, malformed arrays can clear/drop data while the write succeeds, and schema/handler drift is release-blocking. The remedy is route-specific mutation validation from exact JSON numbers and present-vs-missing fields; globally tightening read/filter compatibility coercers is explicitly forbidden without a separate migration decision. +Revision-4 source lock: the rejected RELEASE-GATES handoff is exactly `586b39df3465fb51779cf9225deaedbc212e4f9f`, with direct parent `badc408937dd6fad0e1dc7ee9fc573505aa617b2`, plan-authority ancestor `a1653abf5a1088f45df2c58487a74a886666adf1`, and independent checker artifact/hash `E2B399BAA66C463D3301DBC9F7775ABF357D2411C74EBDBFDB11CD1A020619E0`; it is rejected for EOL-dependent authority hashing, a false-green missing-`--build` mutation, an omitted dream-cycle production lane, stale final-head evidence, and Windows path-budget failure. This revision-4 successor starts from that exact rejected handoff and remains `PENDING` until committed, independently checked, post-reviewed, and integrated. The OpenClaw/ingest classification lock is exactly `.agent/reports/2026-07-10-openclaw-ingest-classification.md` SHA256 `A095E9D7B69DC95CAC4022EB97D2EA9B403D5132F5602FDD85E7D3A93092F5D4`; the stale `A095E9A3...` value is invalid evidence and must not appear in revision-4 artifacts. DB-BULKOPS rejected composite head `68b2ce5835c7c6efdf1c68da9eedcb8d9c3837ef` has parent `6ea10496aa127fba7fdb194875044e770d0a1d8c`, checker artifact `.agent/worktrees/prc-db-bulkops/.agent/reviews/2026-07-10-db-bulkops-sibling-rework-check.md`, checker verdict `FAIL / REVISE_HOLD`, checker SHA256 `EB9EB227363A27EA058C6654BD7E38EED1088252F79F837E377B2A3CBC1FAFB7`, and two release-blocking HIGH defects: a wrong-type candidate-review snapshot can reach mutation without durable audit, and public bulk IDs are lossy-coerced so a fraction such as `1.9` becomes `1` and a numeric string such as `"2"` becomes `2`. Active owner DB-BULKOPS-BEHAVIORAL-EDGE-REWORK starts exactly from `68b2ce5835c7c6efdf1c68da9eedcb8d9c3837ef`; its head is `PENDING`. The rejected head and any dirty overlay are not dispatch authority. MCP structured-input classification is locked to `.agent/reports/2026-07-10-mcp-structured-input-classification.md` SHA256 `3356F3AE6073F95E701707FCF451D63809AC186ED1DEA7321A7027C4C3122E7A`: malformed present booleans can cross preview/confidentiality boundaries into live writes, lossy IDs can select the wrong durable row, malformed arrays can clear/drop data while the write succeeds, and schema/handler drift is release-blocking. The remedy is route-specific mutation validation from exact JSON numbers and present-vs-missing fields; globally tightening read/filter compatibility coercers is explicitly forbidden without a separate migration decision. The tracked state file binds this exact plan SHA256 to ordered owners, current owner, predecessor checker/post-review/integration evidence, and required successor base. `assert-plan-path-ownership.ps1` must fail when either file is missing, the expected/observed plan hashes differ, an epoch is reversed, a non-current owner changes a repeated path, predecessor evidence is incomplete, or a successor base omits the required integration. Historical rejected-head Diff proof may demonstrate zero undeclared paths, but it must still fail current-owner authority where the active rework owns the path. @@ -69,6 +71,7 @@ Stable blocker classes, independent of mutable branch heads: 12. The live operator console reads `NUXT_OPERATOR_API_TARGET` in `apps/operator-console/nuxt.config.ts`, while `deploy/docker-compose.runtime.yml` still exports stale `NUXT_ENGRAM_API_TARGET`; the resulting image can return root HTTP 200 while `/api/health` times out against the default `http://unleashed.lan:37777`. Production must use the exact live variable, remove the stale standalone deployment consumer, and prove the proxy reaches the exact backend and returns semantic ready. A rendered root page is not operator health. 13. PostgreSQL tmpfs may be used only for ephemeral runtime paths. PGDATA must be an explicitly UID/GID-`70:70` owned persistent volume at `/var/lib/postgresql/data`; tmpfs-only PGDATA is a proved data-loss configuration and is release-fatal. Acceptance removes and recreates the container against the same volume and requires the exact server version, pgvector extension/version, migrations, and retained marker to survive. 14. Public MCP mutation arguments are not schema-safe today. `promote_candidate.dry_run`, `store_memory.dry_run`, and `settings.encrypt` can turn malformed present values into live mutation or plaintext storage; fractional/imprecise selectors and partial arrays can target or persist the wrong durable state. MCP-STRUCTURED-INPUT-VALIDATION is `CLASSIFIED_MUST_BUILD`, starts only from the accepted DB-BULKOPS composite, and must prove zero write/audit/transition delta for every malformed route-specific input. +15. Dream-cycle crystallization is live but not production-safe: `CRYSTALLIZATION=true` with `VNEXT_F=false` can consume transcripts without a durable result, mixed-project input is attributed through the first transcript, and the fixture is not repeat-isolated. The correction is fail-closed and per-project/session; it must not restore the v5-demolished direct session-end regex-to-memory path. ## 3. Delivery State Machine @@ -95,7 +98,7 @@ Durable local layout: `.agent/worktrees//` (already ignored through `.git | Slice | Branch | Exclusive maker paths | Dependencies | Required proof | | --- | --- | --- | --- | --- | -| PLAN-GOVERNANCE | `work/prc-release-gates` | `.agent/plans/2026-07-10-engram-production-ready-master-plan.md`, `.agent/plans/2026-07-10-engram-production-ready-ownership-state.json` only | exact base `2b3ef3e33bd19e630f8f67d07a9e2521cb98537f`; first revision-3 commit in this worktree; precedes RELEASE-GATES script commit | preserve all PR-0..PR-8 and M0-M7 obligations; record the exact rejected RELEASE-GATES and DB-BULKOPS source locks; declare every maker path literally; bind the tracked state to the final plan SHA256; require independent challenging-plans GO before broad dispatch | +| PLAN-GOVERNANCE | `work/prc-release-gates-r4` | `.agent/plans/2026-07-10-engram-production-ready-master-plan.md`, `.agent/plans/2026-07-10-engram-production-ready-ownership-state.json` only | exact rejected predecessor/base `586b39df3465fb51779cf9225deaedbc212e4f9f`; first revision-4 commit in this worktree; precedes RELEASE-GATES revision-4 script commit | preserve all PR-0..PR-8 and M0-M7 obligations; record exact rejected RELEASE-GATES, DB-BULKOPS, OpenClaw/ingest, and dream-cycle source locks; declare every maker path literally; bind the tracked state to the canonical UTF-8/LF plan SHA256; require independent challenging-plans GO before broad dispatch | | DB-BULKOPS | `work/prc-db-bulkops` | `internal/bulkops/facade.go`, `internal/bulkops/facade_test.go`, `internal/bulkops/rollback.go`, `internal/bulkops/rollback_test.go`, `internal/db/gorm/candidate_store.go`, `internal/db/gorm/candidate_store_test.go`, `internal/mcp/tools_bulkops.go`, `internal/mcp/tools_dryrun_test.go`, `pkg/models/snapshot.go`, legacy exact report `.agent/reports/2026-07-10-db-bulkops-capture-lock-rework-maker.md`, legacy exact report `.agent/reports/2026-07-10-db-bulkops-sibling-rework-maker.md`, legacy evidence prefix `.agent/specs/production-ready-db-bulkops/evidence/**`, legacy evidence prefix `.agent/reports/evidence/production-ready/db-bulkops-sibling-rework/**` | historical base `2b085de663d5ba9dfa97adf9ee58de062ee0997c`, rejected head `68b2ce5835c7c6efdf1c68da9eedcb8d9c3837ef`; no integration SHA; superseded as current writer on the four behavioral-edge paths | checker artifact `.agent/worktrees/prc-db-bulkops/.agent/reviews/2026-07-10-db-bulkops-sibling-rework-check.md`, verdict `FAIL / REVISE_HOLD`, SHA256 `EB9EB227363A27EA058C6654BD7E38EED1088252F79F837E377B2A3CBC1FAFB7`; exact Diff must report zero undeclared paths but fail epoch authority for paths now owned by DB-BULKOPS-BEHAVIORAL-EDGE-REWORK; preserve all lock-consistent capture/rollback evidence; never integrate this head alone | | DB-BULKOPS-BEHAVIORAL-EDGE-REWORK | `work/prc-db-bulkops-behavioral-edge-rework` | `internal/db/gorm/candidate_store.go`, `internal/db/gorm/candidate_store_test.go`, `internal/mcp/tools_bulkops.go`, `internal/mcp/tools_dryrun_test.go`, legacy exact report `.agent/reports/2026-07-10-db-bulkops-behavioral-edge-rework-maker.md`, legacy evidence prefix `.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/**` | exact rejected predecessor/base `68b2ce5835c7c6efdf1c68da9eedcb8d9c3837ef`; head `PENDING`; rework transition requires the hash-bound rejected checker above and forbids an integration claim for that predecessor | reject wrong-type/missing candidate-review action snapshots before mutation and require the correct durable audit/snapshot contract; reject non-array bulk ID containers, non-number elements, fractions, numeric strings, zero/negative/overflow IDs without lossy coercion; keep ordinary valid integer-array behavior; permanent regressions cover wrong snapshot type, audit-less mutation must-not-occur, raw-vs-normalized request use, `1.9`, `"2"`, mixed arrays, and valid arrays; independent checker PASS, post-review PASS, exact integration SHA, then DB-GOVERNANCE rebases to that accepted composite | | DB-GOVERNANCE | `work/prc-db-governance` | `internal/db/gorm/candidate_store.go`, `internal/db/gorm/candidate_store_test.go`, `internal/db/gorm/rule_arbiter_store_test.go`, `internal/db/gorm/rule_governance_store.go`, `internal/db/gorm/rule_governance_store_test.go`, `internal/db/gorm/rule_governance_rg3_store_test.go`, `internal/db/gorm/migration_rule_governance.go`, `internal/db/gorm/migration_rule_arbiter.go`, `internal/db/gorm/migration_rule_governance_snapshot_statuses.go` | accepted DB-BULKOPS-BEHAVIORAL-EDGE-REWORK composite integrated; exact integration SHA recorded; worktree rebased to that SHA; predecessor path evidence complete | fresh per-test DB/schema isolation; migration 144 apply/rollback/reapply/constraint proof; project/global aggregate boundaries; no closed-DB reuse or order dependence; checker/post-review precede the exact ownership transfer to CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK | @@ -105,11 +108,12 @@ Durable local layout: `.agent/worktrees//` (already ignored through `.git | DB-AUTH | `work/prc-db-auth` | `internal/db/gorm/user_store.go`, `internal/db/gorm/user_store_test.go`, `internal/worker/auth_handlers.go`, `internal/worker/auth_handlers_lifecycle_test.go` | RELEASE-GATES foundation before mergeable checker verdict; first writer in the auth handler/store transfer chain | atomic cross-process first-admin database invariant: one committed active admin, typed conflict for the loser, concurrent last-active-admin invariant, disabled-admin edge, row-lock semantics, fresh DB identity and no global-row contamination; this lane does not by itself authorize a public setup winner and cannot integrate past M1 until AUTH-BOOTSTRAP-SECURITY and DURABLE-AUDIT-BOUNDARIES pass | | AUTH-BOOTSTRAP-SECURITY | `work/prc-auth-bootstrap-security` | `internal/config/config.go`, `internal/config/config_test.go`, `internal/config/envnames.go`, `internal/db/gorm/user_store.go`, `internal/worker/middleware.go`, `internal/worker/middleware_test.go`, `internal/worker/auth_handlers.go`, new `internal/worker/auth_bootstrap_limiter.go`, new `internal/worker/auth_bootstrap_limiter_test.go`, new `internal/worker/auth_bootstrap_security_test.go`, `internal/worker/service.go`, new `tests/critical/auth_bootstrap/first_admin_bootstrap_test.go`, new `scripts/production-smoke/customer/run-auth-bootstrap-adversary.ps1` | accepted DB-AUTH integrated; worktree rebased to that exact integration SHA; owns `service.go` before V7-RUNTIME-WIRING; deployment/UI subproofs are owned by DEPLOYMENT-ROLLBACK and OC-INTEGRATION | zero-user setup requires a non-empty one-time out-of-band operator capability; missing/invalid/replayed/revoked capability fails before bcrypt, session creation, or mutation; capability consumption and first-admin creation are cross-process/restart safe; setup-specific per-source plus global bounded abuse control; two-server attacker-vs-operator, replay, restart, remote-network, and secret-free log/HTTP/OTLP negatives; exact command `pwsh ./scripts/production-smoke/customer/run-auth-bootstrap-adversary.ps1 -Processes 2 -Repeat 10 -ArtifactRoot .agent/reports/evidence/production-ready/auth-bootstrap` plus fresh-DB race/critical/browser proof | | DURABLE-AUDIT-BOUNDARIES | `work/prc-durable-audit-boundaries` | `internal/db/gorm/domain_owner_store.go`, `internal/db/gorm/domain_owner_store_test.go`, `internal/db/gorm/user_store.go`, `internal/worker/auth_handlers.go`, new `internal/worker/auth_audit_durability_test.go`, `internal/bulkops/facade.go`, new `internal/bulkops/audit_durability_test.go`, new `scripts/production-smoke/customer/run-durable-audit-faults.ps1` | accepted INGEST-DOC-SNAPSHOT-DEMOLITION, CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK, and AUTH-BOOTSTRAP-SECURITY integrated; exact SHAs recorded; worktree rebased to the latest composite | auth setup and every retained bulk success path commit business mutation with its audit row in one transaction or a durable outbox; fault/retry/readback covers auth setup plus bulk promote/delete/supersede with no falsely complete unaudited response. The retained executable bulk-op set is exactly `bulk_promote`, `bulk_delete`, and `bulk_supersede`; `SnapshotOpIngestDoc` is a persisted historical-only discriminator, is non-executable after INGEST-DOC-SNAPSHOT-DEMOLITION, is excluded from this matrix, and may not be wired or cited as audit evidence. The separate live MCP `ingest` path is not covered by the bulk facade and requires its own explicit audit contract if whole-product mutation auditing is required. | -| DB-CRYSTALLIZATION | `work/prc-db-crystallization` | `internal/worker/handlers_hooks_crystallization_integration_test.go` | RELEASE-GATES foundation before mergeable checker verdict | session-end stores redacted transcript without direct decision-memory creation; flag-off/empty safety; concurrent delivery; downstream dream-cycle ownership; any production-source need requires root amendment before edit | +| DB-CRYSTALLIZATION | `work/prc-db-crystallization` | `internal/worker/handlers_hooks_crystallization_integration_test.go` | RELEASE-GATES foundation before mergeable checker verdict | session-end stores redacted transcript without direct decision-memory creation; flag-off/empty safety; concurrent delivery; this test-only lane does not authorize dream-cycle production edits and must hand the live defects to CRYSTALLIZATION-DREAM-CYCLE-CORRECTNESS | +| CRYSTALLIZATION-DREAM-CYCLE-CORRECTNESS | `work/prc-crystallization-dream-cycle-correctness` | `internal/worker/dream_cycle.go`, `internal/worker/dream_cycle_test.go`, new `.agent/reports/2026-07-10-crystallization-dream-cycle-correctness-maker.md`, new `.agent/e/cdc/**` | revision-4 RELEASE-GATES accepted and integrated; accepted DB-CRYSTALLIZATION test-only candidate checker/post-review integrated; worktree rebased to the latest exact integration SHA; first/current owner for both source/test paths | fail closed across the full `CRYSTALLIZATION` / `VNEXT_F` / LLM availability-result matrix: no read/extract/route/mark/watermark when crystallization is off; no mark or watermark when candidate persistence is unavailable, the F flag is off, LLM is disabled, extraction fails, routing returns nil, or any route errors; group transcript work by exact `(project, session_id)` so no digest or candidate crosses project/session provenance; mark only a batch whose every extracted decision reached a durable created-or-duplicate result; preserve unprocessed rows across restart/retry and prove exactly-once candidate persistence by fingerprint; use fresh migrated PostgreSQL per run, focused repeat at least 20, package repeat at least 3, race at least 3, process restart, zero residual sessions/databases, independent checker PASS, and post-review PASS; do not restore direct session-end regex extraction, direct memory creation, or any v5-demolished graph/rerank/scoring path; any proved need to change `internal/db/gorm/transcript_store.go` or its test stops for a root plan/state amendment before edit | | DB-EMBEDDING-STATS | `work/prc-db-embedding-stats` | `internal/embedding/store.go`, `internal/embedding/store_stats_test.go` | RELEASE-GATES full diagnostic plus live call-path classification | empty `content_chunks` and zero active memories return zero-valued stats with `LastChunkAt=nil`, never a NULL-to-`time.Time` scan error; populated/model/dimension/coverage behavior unchanged; focused repeat >=20, package/race/vet, fresh schema and zero sessions | | DB-REAPER | `work/prc-db-reaper` | `internal/worker/reaper/reaper.go`, `internal/worker/reaper/reaper_test.go` | RELEASE-GATES foundation before mergeable checker verdict | package/race/repeat proof; environment isolation; configured/default/invalid retention; unexpired preservation; expired purge; cancellation and idempotency | | SECURITY-TOOLCHAIN | `work/prc-security-toolchain` | `go.mod`, `go.sum`, `Dockerfile` | preservation recorded + clean `origin/main` worktree; first writer in the `Dockerfile` transfer chain | build, vet, full unit/DB tests, zero reachable Go vulnerability release blocker, builder/runtime version proof; its server candidate currently leaves three unfixed Perl image findings and is not final image acceptance; checker/post-review precede transfer of `Dockerfile` to IMAGE-REMEDIATION | -| RELEASE-GATES | `work/prc-release-gates` | `.agent/critical-suite.config.yaml`, `.agent/dev-stand.config.yaml`, `.github/workflows/test.yml`, `scripts/production-gates/assert-coverage.ps1`, `scripts/production-gates/assert-go-test-json.ps1`, `scripts/production-gates/assert-plan-path-ownership.ps1`, `scripts/production-gates/cleanup-db-sessions.ps1`, `scripts/production-gates/run-critical-suite.ps1`, `scripts/production-gates/run-db-suite.ps1`, `scripts/production-gates/run-dev-stand.ps1`, new `scripts/production-gates/run-node-matrix.ps1`, legacy exact report `.agent/reports/2026-07-10-release-gates-foundation-revision-3-maker.md`, legacy evidence prefix `.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**` | exact base `2b3ef3e33bd19e630f8f67d07a9e2521cb98537f`; head `PENDING`; PLAN-GOVERNANCE commit first; first writer in `.github/workflows/test.yml` before IMAGE-REMEDIATION | preserve blanket/empty skip rejection, truthful early-failure finalization, repeat-3 CI/config parity, canonical full fresh-DB/race JSON/coverage/zero-session/cleanup proof, critical/dev-stand execution, all prior workflow mutations, immutable 60/70 plus 10/10/20/55/55/55 floors, actionlint/AST/vet/diff/gitleaks checks; ownership gate requires `-ExpectedPlanSha256` and tracked `-State`, records expected+observed hash, rejects reversed epochs, non-current owners, missing checker/post-review/integration evidence and wrong bases while accepting descendant bases; dev stand requires exact HTTP 200, `/health` liveness status in `starting|ready|error`, `/api/ready` exact `ready`, three distinct cryptographic process-local PostgreSQL/admin/bootstrap credentials, exact runtime injection, redacted evidence, blank/default/missing/reuse negatives, unconditional Down and zero residue; OpenClaw node matrix requires clean surface, tracked lock-root/package/plugin parity, exact `npm ci -> typecheck -> tests -> high audit -> npm pack dry-run`, raw evidence and unconditional exact-surface cleanup | +| RELEASE-GATES | `work/prc-release-gates-r4` | `.agent/critical-suite.config.yaml`, `.agent/dev-stand.config.yaml`, `.github/workflows/test.yml`, `scripts/production-gates/assert-coverage.ps1`, `scripts/production-gates/assert-go-test-json.ps1`, `scripts/production-gates/assert-plan-path-ownership.ps1`, new `scripts/production-gates/assert-windows-path-budget.ps1`, `scripts/production-gates/cleanup-db-sessions.ps1`, `scripts/production-gates/run-critical-suite.ps1`, `scripts/production-gates/run-db-suite.ps1`, `scripts/production-gates/run-dev-stand.ps1`, `scripts/production-gates/run-node-matrix.ps1`, legacy exact report `.agent/reports/2026-07-10-release-gates-foundation-revision-3-maker.md`, legacy evidence prefix `.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**`, new `.agent/reports/2026-07-10-release-gates-foundation-revision-4-maker.md`, new `.agent/e/rg4/**` | exact rejected predecessor/base `586b39df3465fb51779cf9225deaedbc212e4f9f`; head `PENDING`; PLAN-GOVERNANCE revision-4 commit first; first writer in `.github/workflows/test.yml` before IMAGE-REMEDIATION | preserve every valid revision-3 gate; canonicalize authority identity as UTF-8 without BOM with all line endings normalized to LF and prove LF/CRLF equality plus semantic-mutation inequality; reject removal/bypass of explicit pre-launch compose build and require source-commit/clean-tree plus pre-launch tag IDs to equal running/scanned IDs; enforce a tracked-path budget for an ordinary Windows worktree with a 66-character prefix and `core.longpaths` unset, then prove an actual fresh checkout; replace the overlong revision-3 raw tree with compact revision-4 evidence; rerun blanket/empty skip, truthful finalization, repeat-3, full fresh-DB/race JSON/coverage/zero-session/cleanup, critical/dev-stand, OpenClaw, ownership, actionlint, AST/vet/diff/gitleaks, and all conformance mutations including CRLF and no-`--build`; immutable floors remain 60/70 plus 10/10/20/55/55/55 | | IMAGE-REMEDIATION | `work/prc-image-remediation` | `Dockerfile`, new `cmd/engram-healthcheck/main.go`, new `cmd/engram-healthcheck/main_test.go`, `apps/operator-console/package.json`, `apps/operator-console/package-lock.json`, new `deploy/postgres/Dockerfile`, `docker-compose.yml`, `deploy/docker-compose.runtime.yml`, `docs/DEPLOYMENT.md`, `docs/PRODUCTION-TESTING-PLAYBOOK.md`, `.github/workflows/test.yml`, `.github/workflows/docker.yaml`, `.github/workflows/docker-publish.yml`, new `scripts/production-gates/build-and-scan-images.ps1`, new `tests/critical/runtime/image_runtime_contract_test.go`, new `tests/critical/runtime/postgres_image_contract_test.go` | accepted RELEASE-GATES and SECURITY-TOOLCHAIN integrated; worktree rebased to both exact SHAs; first writer before DEPLOYMENT-ROLLBACK, OC-INTEGRATION, and CORE-PUBLIC-TRUTH take their compose/operator/docs epochs | preserve exact parent scan RED `operator=5`, `postgres=38`, `server=13`; build one tiny `CGO_ENABLED=0` `engram-healthcheck` binary and copy it into both shell-free runtime stages with JSON-form `HEALTHCHECK`; both container healthchecks call their direct or proxied `/api/ready`, parse JSON, and exit zero only on exact `status=ready`; server `/health` remains the intentional liveness surface and is tested separately, never used as Docker readiness; server uses pinned multi-arch `gcr.io/distroless/base-debian13@sha256:b78832f41c8128046807c24840ebee4f1c18ba7870eed423d8750c272c15e147` and proves the CGO server's `ldd` dependencies are present at runtime, UID `65532`, non-writable/read-only rootfs operation, liveness `/health` plus dependency-aware `/api/ready`, `HOME=/var/lib/engram`, and a persistent writable named or bind volume at `/var/lib/engram` provisioned as UID/GID `65532:65532` mode `0700` while every other rootfs path remains read-only; current `internal/config.DataDir()` derives `$HOME/.engram`, so `ENGRAM_DATA_DIR` is explicitly forbidden from docs/tests unless a separately owned config change first makes it live; operator uses pinned multi-arch `gcr.io/distroless/nodejs22-debian13@sha256:773a62fbe24a3f8c8b24b16fd59154627f8b406737bc906f83bf1732bc8907dd`, image node entrypoint plus `CMD [".output/server/index.mjs"]`, UID `65532`, nonroot ownership, a locked graph without picomatch/sigstore findings, and exact runtime `NUXT_OPERATOR_API_TARGET=http://server:37777` matching `apps/operator-console/nuxt.config.ts`; rewrite `deploy/docker-compose.runtime.yml` from stale `operator-web`/`NUXT_ENGRAM_API_TARGET` to canonical `operator-console`/`ghcr.io/thebtf/engram-operator-console`/`NUXT_OPERATOR_API_TARGET`, while DEPLOYMENT-ROLLBACK removes the stale standalone deployment consumer after its zero-consumer proof; add permanent `TestOperatorConsoleRuntimeTargetContract` so root HTTP 200 is insufficient and proxied `/api/health` plus `/api/ready` must reach the exact backend and return semantic ready; PostgreSQL source lock is proven Wolfi prototype `engram-prc-pg17-wolfi:prototype` image ID `sha256:6f1fcade7d5e873aa7624f821e593b4bb21e8f4c69c8f3d2de9f76134c175bbc`, packages `postgresql-17=17.10-r1` and `pgvector-17=0.8.1-r0`, zero findings at every severity, and vector/restart persistence; `deploy/postgres/Dockerfile` pins the Wolfi base digest and packages, sets `ENV LANG=C.UTF-8 LC_ALL=C.UTF-8` because `LANG=en_US.UTF-8` deterministically fails `initdb`, and excludes cache/build residue; exact helper command remains `pwsh ./scripts/production-gates/build-and-scan-images.ps1 -ServerTag engram:prc-server -OperatorTag engram:prc-operator-console -PostgresTag engram:prc-postgres -Platform linux/amd64 -ArtifactRoot .agent/reports/evidence/production-ready/image-remediation -NoAllowlist`; it builds all tags, captures Dockerfile/base/package/image IDs, scans each exact image ID, starts the canonical three-image compose stand, proves all health/readiness/version/vector/migration/restart/container-recreation/retained-marker contracts, injects absent/unowned/unwritable `HOME` storage, first-boot/restart permission, stale/missing/wrong operator API target, unreachable-backend, and malformed/error-body/HTTP-200 `/api/ready` failures, proves Docker health never becomes healthy in every negative case, always tears down probe containers/networks/volumes, verifies zero residue, and writes `final-image-set.json`; docs must name only the accepted PostgreSQL image and canonical operator-console release stack; acceptance requires zero HIGH/CRITICAL and no scanner exception/allowlist; checker rebuilds without local cache and repeats scan/runtime/failure-cleanup proof before post-review | | SECURITY-PROJECT-IDENTITY | `work/prc-security-project-identity` | `internal/proxy/identity.go`, `internal/proxy/identity_test.go`, `internal/handlers/engramcore/tools.go`, new `internal/handlers/engramcore/project_identity_v2_test.go`, `proto/engram/v1/engram.proto`, generated `proto/engram/v1/engram.pb.go`, generated `proto/engram/v1/engram_grpc.pb.go`, `internal/grpcserver/server.go`, new `internal/grpcserver/project_identity_v2_test.go`, `internal/db/gorm/project_store.go`, `internal/db/gorm/project_store_test.go`, `internal/worker/handlers_context.go`, new `internal/worker/project_identity_v2_test.go`, `plugin/engram/hooks/lib.js`, `plugin/engram/hooks/lib.test.js`, new `plugin/engram/hooks/project-identity-v2.test.js`, `plugin/openclaw-engram/src/identity.ts`, `plugin/openclaw-engram/src/identity.test.ts`, `docs/arch/architecture.md` | convergent GE-003 identity namespace/migration decision | versioned full identity metadata; synchronous transactionally consistent register-and-resolve before first gRPC/HTTP data access; existing unambiguous legacy namespace continuity; contradictory full identities never merge; ambiguous legacy-only request fails before mutation with upgrade action; strict versioned high-entropy non-git anchor plus legacy alias compatibility; Go/Claude/OpenClaw shared vectors; explicit anchor sharing works; private authorization remains keycard/principal based; candidate/current and mixed-version restart/rollback proof | | OPENCLAW-RELEASE | `work/prc-openclaw-release` | `plugin/openclaw-engram/.gitignore`, `plugin/openclaw-engram/package.json`, new `plugin/openclaw-engram/package-lock.json`, `plugin/openclaw-engram/openclaw.plugin.json`, `plugin/openclaw-engram/README.md`, `.github/workflows/plugin-publish.yml`, `docs/RELEASE-PROTOCOL.md` | accepted SECURITY-PROJECT-IDENTITY integrated; worktree rebased to its exact integration SHA; accepted RELEASE-GATES `run-node-matrix.ps1` exists before checker execution; ordering edge `SECURITY-PROJECT-IDENTITY -> OPENCLAW-RELEASE -> INTEGRATION-RELEASE` | current baseline authority is package/plugin/npm `3.7.5`; record registry version and actual-diff semver decision after the identity source change, require the final local version to be publishable and greater than the current registry version when packageable source changed, align package/plugin/lock-top/lock-root versions, remove the lock ignore and track a generated lockfile v3, preserve declared dependency ranges unless a separately reviewed dependency change is recorded, replace publish-time `npm install` with `npm ci`, and prove from a fresh detached worktree with no pre-existing `node_modules`: tracked-lock/parity, `npm ci`, typecheck, tests, high-severity audit, package dry-run contents, clean Git status, publish/readback, independent checker PASS, and post-run review PASS under `.agent/reports/evidence/production-ready/openclaw-release/**` | @@ -150,6 +154,8 @@ Durable local layout: `.agent/worktrees//` (already ignored through `.git The IMAGE-REMEDIATION PostgreSQL sub-contract is part of that row's owned `deploy/postgres/Dockerfile`, compose, helper, and critical-test paths: runtime UID/GID is `70:70`; rootfs is read-only; all capabilities are dropped; `no-new-privileges` is set; UID-owned tmpfs is limited to `/tmp` and `/var/run/postgresql`; PGDATA is an explicitly owned persistent named volume at `/var/lib/postgresql/data`. A tmpfs-only PGDATA negative must demonstrate the proved loss mode, while the positive removes the first container, creates a new one on the same volume, and re-proves PostgreSQL `17.10`, pgvector `0.8.1`, migrations, and retained vector/application markers. DEPLOYMENT-ROLLBACK must preserve this contract after compose transfer. +CRYSTALLIZATION-DREAM-CYCLE-CORRECTNESS is a fail-closed current-source correction, not a resurrection or a deferred contract. The maker starts from RED tests named `TestDreamCycle_FlagMatrixFailClosed`, `TestDreamCycle_PerProjectSessionProvenance`, `TestDreamCycle_RouteFailurePreservesBatch`, and `TestDreamCycle_RestartRetryExactlyOnce`. It then runs `go test ./internal/worker -run '^TestDreamCycle_(FlagMatrixFailClosed|PerProjectSessionProvenance|RouteFailurePreservesBatch|RestartRetryExactlyOnce)$' -count=20`, `go test ./internal/worker -run '^TestDreamCycle_' -count=3`, `go test -race ./internal/worker -run '^TestDreamCycle_' -count=3`, and `pwsh ./scripts/production-gates/run-db-suite.ps1 -Package ./internal/worker -Run '^TestDreamCycle_' -FreshDatabase -Repeat 3 -FailOnUnexpectedSkip -ArtifactRoot .agent/e/cdc/db`. The fresh-DB fixture must run migrations, reuse the same committed PostgreSQL rows across a new `Service` instance to model restart, prove unprocessed rows survive every unavailable/error branch, prove durable duplicates make retry exactly-once, and end with zero run sessions/databases. The checker also runs `go vet ./internal/worker` and `go build ./...`. A production-store API change, direct memory write, removed-path revival, or cross-project/session candidate is an immediate FAIL and requires a prior root amendment. + Every path not listed in a maker row is forbidden to that maker. If a slice discovers a necessary unlisted or shared file, it stops before editing and sends the exact path/change to root. Root amends the ledger first, serializes ownership, or creates a named integration-only patch after both commits are reviewed. Conditional ownership phrases are not authorization. ### 4.1 Ownership Epochs and Automated Overlap Gate @@ -173,13 +179,14 @@ Rows are exclusive within an ownership epoch. A repeated path below is a seriali | `apps/operator-console/package.json`, `apps/operator-console/package-lock.json` | IMAGE-REMEDIATION | OC-INTEGRATION | image checker and post-review PASS, OC worktree rebased, any later dependency edit reruns audit/build/browser/image scan | | `docs/DEPLOYMENT.md`, `docs/PRODUCTION-TESTING-PLAYBOOK.md` | IMAGE-REMEDIATION | CORE-PUBLIC-TRUTH -> FINAL-PUBLIC-TRUTH | image proof integrated; CORE rebased for M5; FINAL rebased to exact M6 integration and final-version artifact before edit | | `README.md`, `README.ru.md`, `README.zh.md`, `CONTRIBUTING.md`, `CHANGELOG.md`, `Makefile`, `.env.example`, `docs/MIGRATION.md`, `docs/arch/CONFIGURATION.md`, `docs/arch/QUICKSTART.md`, `docs/public/engram.jpg`, `plugin/engram/commands/setup.md`, `plugin/engram/commands/doctor.md` | CORE-PUBLIC-TRUTH | FINAL-PUBLIC-TRUTH | M5 release published and proved; FINAL worktree rebased to exact M6 integration; final version artifact and exact release-note path recorded before edit | +| `internal/worker/dream_cycle.go`, `internal/worker/dream_cycle_test.go` | CRYSTALLIZATION-DREAM-CYCLE-CORRECTNESS | — | single-owner tracked epoch with no predecessor; the maker starts only after the named dependencies, then requires checker PASS, post-review PASS, integration SHA, and a root plan/state amendment before any later writer | After PLAN-GOVERNANCE and RELEASE-GATES are committed, independently checked, post-reviewed, and integrated, root runs both modes after every ledger edit and before every checker/integration: ```powershell $Plan = '.agent/plans/2026-07-10-engram-production-ready-master-plan.md' $State = '.agent/plans/2026-07-10-engram-production-ready-ownership-state.json' -$PlanSha = (Get-FileHash -LiteralPath $Plan -Algorithm SHA256).Hash +$PlanSha = pwsh ./scripts/production-gates/assert-plan-path-ownership.ps1 -Plan $Plan -PrintCanonicalPlanSha256 pwsh ./scripts/production-gates/assert-plan-path-ownership.ps1 -Mode Ledger -Plan $Plan -ExpectedPlanSha256 $PlanSha -State $State -Artifact .agent/reports/evidence/production-ready/ownership/path-ledger.json pwsh ./scripts/production-gates/assert-plan-path-ownership.ps1 -Mode Diff -Slice DB-BULKOPS -Base 2b085de663d5ba9dfa97adf9ee58de062ee0997c -Head 68b2ce5835c7c6efdf1c68da9eedcb8d9c3837ef -EvidenceNamespace '.agent/specs/production-ready-db-bulkops/evidence/**' -ReportNamespace .agent/reports/2026-07-10-db-bulkops-sibling-rework-maker.md -Plan $Plan -ExpectedPlanSha256 $PlanSha -State $State -Artifact .agent/reports/evidence/production-ready/ownership/db-bulkops-rejected-68b2ce58.json ``` @@ -320,7 +327,7 @@ M0 exit: preservation proof exists, every active writer has exclusive paths, the With the RELEASE-GATES foundation integrated, execute M1 in ownership-safe waves: -1. In parallel after foundation acceptance: DB-BULKOPS-BEHAVIORAL-EDGE-REWORK, DB-AUTH, DB-CRYSTALLIZATION, DB-EMBEDDING-STATS, DB-REAPER, SECURITY-TOOLCHAIN, SECURITY-PROJECT-IDENTITY, UPDATE-LIFECYCLE, DOCUMENT-INGEST-PUBLIC-TRUTH, and the read-only DEMOLITION-SKIP/T007 classifications. DB-GOVERNANCE is intentionally not in this wave because it must rebase onto the accepted behavioral-edge composite. +1. In parallel after foundation acceptance: DB-BULKOPS-BEHAVIORAL-EDGE-REWORK, DB-AUTH, DB-CRYSTALLIZATION, DB-EMBEDDING-STATS, DB-REAPER, SECURITY-TOOLCHAIN, SECURITY-PROJECT-IDENTITY, UPDATE-LIFECYCLE, DOCUMENT-INGEST-PUBLIC-TRUTH, and the read-only DEMOLITION-SKIP/T007 classifications. After the DB-CRYSTALLIZATION test-only checker/post-review integration, immediately start CRYSTALLIZATION-DREAM-CYCLE-CORRECTNESS on its disjoint exact paths; it is a release blocker, not deferred roadmap work. DB-GOVERNANCE is intentionally not in this wave because it must rebase onto the accepted behavioral-edge composite. 2. Integrate the accepted behavioral-edge composite, then rebase and run DB-GOVERNANCE. Rebase CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK only after both exact integrations. In parallel from the exact accepted behavioral-edge integration SHA, run INGEST-DOC-SNAPSHOT-DEMOLITION and MCP-STRUCTURED-INPUT-VALIDATION; the former must land before DURABLE-AUDIT-BOUNDARIES takes `facade.go`, while the latter inventories and validates the remaining route-specific public mutation boundaries without globally changing read/filter compatibility. After DB-AUTH, run AUTH-BOOTSTRAP-SECURITY. DURABLE-AUDIT-BOUNDARIES waits for ingest demolition, candidate-review rollback, and auth bootstrap. 3. Run DB-RULES-ISOLATION only after the preceding diagnostic functional lanes integrate so its shared-DB order proof is meaningful. T007 may edit only its exact test after classification; any production fix requires a prior ledger amendment. 4. Run IMAGE-REMEDIATION after RELEASE-GATES and SECURITY-TOOLCHAIN. After SECURITY-PROJECT-IDENTITY integrates, run OPENCLAW-RELEASE and require its clean detached-worktree matrix plus npm publish/readback before integration/release. Then transfer exact compose/package epochs to DEPLOYMENT-ROLLBACK and OC-INTEGRATION. Run RECOVERY-DATA, LAUNCHER-FIRST-RUN, and CORE-PUBLIC-TRUTH through their declared dependencies. LAUNCHER waits for accepted GE-003 identity vectors; deployment and OC bootstrap proof wait for accepted AUTH-BOOTSTRAP-SECURITY; every later Dockerfile/compose/dependency edit triggers the three-image rebuild and zero-finding scan again. @@ -489,7 +496,8 @@ For each slice, the independent checker must answer: 14. For INGEST-DOC-SNAPSHOT-DEMOLITION, is `ingest_doc` historical/read-only, non-executable in dry-run and commit, absent from durable-audit success claims, while live memory ingest still bypasses the facade and document-ingest public text matches metadata-only behavior? 15. For OPENCLAW-RELEASE, did a fresh detached worktree prove tracked/non-ignored lock v3, four-field version parity, dependency parity, exact node sequence, package contents, clean cleanup, publish, and npm readback after SECURITY-PROJECT-IDENTITY? 16. For MCP-STRUCTURED-INPUT-VALIDATION, did the maker inventory every public mutation/alias, use exact-number and present-vs-missing decoding only at mutation boundaries, align schema and handler behavior, preserve any named legacy read/filter compatibility, and prove malformed values cause zero write/audit/transition delta for all critical/high routes including concurrency and precision edges? -17. For contract-only M6 lanes, did `nvmd-validate` return `PASS`, challenging-plans return `GO`, artifact post-review return `PASS`, literal `git add -f` include only the row's ignored SpecKit files, and hash-bound review evidence reach the integration commit before any source ownership was requested? +17. For CRYSTALLIZATION-DREAM-CYCLE-CORRECTNESS, did the full three-axis flag/failure matrix prove no processed mark or watermark without durable created-or-duplicate outcomes, exact per-project/session batching, restart/retry preservation, exactly-once persistence, fresh migrated repeat isolation, race, and zero residue without restoring the demolished direct-memory path? +18. For contract-only M6 lanes, did `nvmd-validate` return `PASS`, challenging-plans return `GO`, artifact post-review return `PASS`, literal `git add -f` include only the row's ignored SpecKit files, and hash-bound review evidence reach the integration commit before any source ownership was requested? Implementation/artifact checker verdicts are `PASS`, `PASS_WITH_CONCERNS`, or `FAIL`; `PASS_WITH_CONCERNS` is not mergeable while any concern touches a PR-0..PR-8 criterion. Challenging-plans verdicts are separately and exclusively `GO`, `REVISE`, or `RETHINK`. @@ -522,7 +530,7 @@ The final report must contain: ## 8. Dispatch Order After Plan GO -1. Independently challenge this exact revision-3 hash plus tracked ownership-state hash with challenging-plans. Until the verdict is `GO`, the plan remains HOLD for new broad implementation; already-running bounded work may finish but cannot integrate on stale plan authority. +1. Independently challenge this exact revision-4 canonical UTF-8/LF hash plus tracked ownership-state hash with challenging-plans. Until the verdict is `GO`, the plan remains HOLD for new broad implementation; already-running bounded work may finish but cannot integrate on stale plan authority. 2. Root records PLAN-GOVERNANCE, RELEASE-GATES base `2b3ef3e3`, rejected DB-BULKOPS head `68b2ce58` with exact checker artifact/hash and two HIGH findings, active behavioral-edge rework, completed ingest/OpenClaw and MCP structured-input classifications, MCP-STRUCTURED-INPUT-VALIDATION and OPENCLAW-RELEASE blockers, and all new pending slices in JSON first; it then verifies Markdown/HTML parity and reruns hash-bound Ledger validation. 3. Rework/check/review/integrate RELEASE-GATES first against every false-green, cleanup, coverage, runner, and actual-diff negative. The three new runners are not treated as available until their exact commit is accepted. 4. Run M1 wave 1 on exact disjoint paths. Rework rejected DB-BULKOPS first, then DB-GOVERNANCE and CANDIDATE-REVIEW in order; run ingest demolition before durable audit; run OPENCLAW-RELEASE after SECURITY-PROJECT-IDENTITY; run IMAGE-REMEDIATION after SECURITY-TOOLCHAIN; route all 27 diagnostic failures exactly once and preserve 60/70 plus 10/10/20/55/55/55 floors. diff --git a/.agent/plans/2026-07-10-engram-production-ready-ownership-state.json b/.agent/plans/2026-07-10-engram-production-ready-ownership-state.json index 9bc6dfe8..98fe181a 100644 --- a/.agent/plans/2026-07-10-engram-production-ready-ownership-state.json +++ b/.agent/plans/2026-07-10-engram-production-ready-ownership-state.json @@ -2,7 +2,7 @@ "schema_version": 1, "plan": { "path": ".agent/plans/2026-07-10-engram-production-ready-master-plan.md", - "sha256": "d371e94dff1ea12767b9d0832240cb6caf52c6c3bbe2209fe4280159c4f03c52" + "sha256": "d7bcfd122e456d9b764595524292d53b0c99447b7f716a1be0707341e4681bf9" }, "path_epochs": [ { @@ -409,6 +409,26 @@ "transition_kind": "integration", "completed_predecessors": [], "required_successor_base_sha": null + }, + { + "path": "internal/worker/dream_cycle.go", + "ordered_owners": [ + "CRYSTALLIZATION-DREAM-CYCLE-CORRECTNESS" + ], + "current_owner": "CRYSTALLIZATION-DREAM-CYCLE-CORRECTNESS", + "transition_kind": "integration", + "completed_predecessors": [], + "required_successor_base_sha": null + }, + { + "path": "internal/worker/dream_cycle_test.go", + "ordered_owners": [ + "CRYSTALLIZATION-DREAM-CYCLE-CORRECTNESS" + ], + "current_owner": "CRYSTALLIZATION-DREAM-CYCLE-CORRECTNESS", + "transition_kind": "integration", + "completed_predecessors": [], + "required_successor_base_sha": null } ] } From 46ccf27968055a670f2b89907cc6da4478ac04fd Mon Sep 17 00:00:00 2001 From: Kirill Turanskiy Date: Fri, 10 Jul 2026 14:48:04 +0300 Subject: [PATCH 021/111] ci: harden revision 4 production gates --- ...lease-gates-foundation-revision-3-maker.md | 191 - .../maker-runtime-1/commands.json | 110 - .../maker-runtime-1/down.stderr.log | 0 .../maker-runtime-1/down.stdout.log | 2 - .../maker-runtime-1-down/commands.json | 84 - .../compose-down.stderr.log | 16 - .../compose-down.stdout.log | 0 .../dev-stand-residual-containers.stderr.log | 0 .../dev-stand-residual-containers.stdout.log | 0 .../dev-stand-residual-networks.stderr.log | 0 .../dev-stand-residual-networks.stdout.log | 0 .../dev-stand-residual-volumes.stderr.log | 0 .../dev-stand-residual-volumes.stdout.log | 0 .../maker-runtime-1-down/summary.json | 46 - .../api-ready.stderr.log | 0 .../api-ready.stdout.log | 3 - .../maker-runtime-1-ready/commands.json | 251 - .../maker-runtime-1-ready/health.stderr.log | 0 .../maker-runtime-1-ready/health.stdout.log | 3 - .../image-inspect-operator-console.stderr.log | 0 .../image-inspect-operator-console.stdout.log | 1 - .../image-inspect-postgres.stderr.log | 0 .../image-inspect-postgres.stdout.log | 1 - .../image-inspect-server.stderr.log | 0 .../image-inspect-server.stdout.log | 1 - .../image-inventory.stderr.log | 0 .../image-inventory.stdout.log | 3 - ...ge-tag-inspect-operator-console.stderr.log | 0 ...ge-tag-inspect-operator-console.stdout.log | 1 - .../image-tag-inspect-postgres.stderr.log | 0 .../image-tag-inspect-postgres.stdout.log | 1 - .../image-tag-inspect-server.stderr.log | 0 .../image-tag-inspect-server.stdout.log | 1 - .../operator-api-health.stderr.log | 0 .../operator-api-health.stdout.log | 3 - .../operator-api-ready.stderr.log | 0 .../operator-api-ready.stdout.log | 3 - .../postgres-ready.stderr.log | 0 .../postgres-ready.stdout.log | 1 - .../maker-runtime-1-ready/summary.json | 92 - .../maker-runtime-1-scan/commands.json | 214 - .../docker-scout-operator-console.sarif.json | 381 -- .../docker-scout-operator-console.stderr.log | 7 - .../docker-scout-operator-console.stdout.log | 0 .../docker-scout-postgres.sarif.json | 3142 ------------- .../docker-scout-postgres.stderr.log | 4 - .../docker-scout-postgres.stdout.log | 0 .../docker-scout-server.sarif.json | 731 --- .../docker-scout-server.stderr.log | 7 - .../docker-scout-server.stdout.log | 0 .../image-inspect-operator-console.stderr.log | 0 .../image-inspect-operator-console.stdout.log | 1 - .../image-inspect-postgres.stderr.log | 0 .../image-inspect-postgres.stdout.log | 1 - .../image-inspect-server.stderr.log | 0 .../image-inspect-server.stdout.log | 1 - .../image-inventory.stderr.log | 0 .../image-inventory.stdout.log | 3 - ...ge-tag-inspect-operator-console.stderr.log | 0 ...ge-tag-inspect-operator-console.stdout.log | 1 - .../image-tag-inspect-postgres.stderr.log | 0 .../image-tag-inspect-postgres.stdout.log | 1 - .../image-tag-inspect-server.stderr.log | 0 .../image-tag-inspect-server.stdout.log | 1 - .../maker-runtime-1-scan/summary.json | 105 - .../maker-runtime-1-up/api-ready.stderr.log | 0 .../maker-runtime-1-up/api-ready.stdout.log | 3 - .../maker-runtime-1-up/commands.json | 404 -- .../maker-runtime-1-up/compose-up.stderr.log | 26 - .../maker-runtime-1-up/compose-up.stdout.log | 194 - .../maker-runtime-1-up/health.stderr.log | 0 .../maker-runtime-1-up/health.stdout.log | 3 - .../image-inspect-operator-console.stderr.log | 0 .../image-inspect-operator-console.stdout.log | 1 - .../image-inspect-postgres.stderr.log | 0 .../image-inspect-postgres.stdout.log | 1 - .../image-inspect-server.stderr.log | 0 .../image-inspect-server.stdout.log | 1 - .../image-inventory.stderr.log | 0 .../image-inventory.stdout.log | 3 - ...ge-tag-inspect-operator-console.stderr.log | 0 ...ge-tag-inspect-operator-console.stdout.log | 1 - .../image-tag-inspect-postgres.stderr.log | 0 .../image-tag-inspect-postgres.stdout.log | 1 - .../image-tag-inspect-server.stderr.log | 0 .../image-tag-inspect-server.stdout.log | 1 - .../operator-api-health.stderr.log | 0 .../operator-api-health.stdout.log | 3 - .../operator-api-ready.stderr.log | 0 .../operator-api-ready.stdout.log | 3 - .../postgres-container-id.stderr.log | 0 .../postgres-container-id.stdout.log | 1 - .../postgres-credential-injection.stderr.log | 0 .../postgres-credential-injection.stdout.log | 1 - .../postgres-ready.stderr.log | 0 .../postgres-ready.stdout.log | 1 - .../server-container-id.stderr.log | 0 .../server-container-id.stdout.log | 1 - .../server-credential-injection.stderr.log | 0 .../server-credential-injection.stdout.log | 1 - .../dev-stand/maker-runtime-1-up/summary.json | 92 - .../maker-runtime-1/ready.stderr.log | 0 .../maker-runtime-1/ready.stdout.log | 2 - .../maker-runtime-1/scan.stderr.log | 0 .../maker-runtime-1/scan.stdout.log | 2 - .../maker-runtime-1/summary.json | 53 - .../maker-runtime-1/up.stderr.log | 0 .../maker-runtime-1/up.stdout.log | 2 - .../cleanup.json | 5 - .../commands.json | 42 - .../post-status.stderr.log | 0 .../post-status.stdout.log | 0 .../pre-status.stderr.log | 0 .../pre-status.stdout.log | 0 .../summary.json | 42 - .../cleanup.json | 5 - .../commands.json | 42 - .../post-status.stderr.log | 0 .../post-status.stdout.log | 0 .../pre-status.stderr.log | 0 .../pre-status.stdout.log | 0 .../summary.json | 42 - .../db-bulkops-rejected-negative.json | 673 --- .../ownership/ledger-final.json | 4121 ----------------- .../plan-governance-commit-diff.json | 124 - .../ownership/release-gates-commit-diff.json | 2857 ------------ .../tdd/RG3-DEVSTAND.red.json | 9 - .../tdd/RG3-NODE.red.json | 9 - .../tdd/RG3-OWNERSHIP.red.json | 9 - .../verification-summary.json | 164 - .github/workflows/test.yml | 73 +- .../assert-plan-path-ownership.ps1 | 86 +- .../assert-windows-path-budget.ps1 | 180 + scripts/production-gates/run-db-suite.ps1 | 128 +- scripts/production-gates/run-dev-stand.ps1 | 58 +- 135 files changed, 482 insertions(+), 14402 deletions(-) delete mode 100644 .agent/reports/2026-07-10-release-gates-foundation-revision-3-maker.md delete mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/commands.json delete mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/down.stderr.log delete mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/down.stdout.log delete mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-down/commands.json delete mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-down/compose-down.stderr.log delete mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-down/compose-down.stdout.log delete mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-down/dev-stand-residual-containers.stderr.log delete mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-down/dev-stand-residual-containers.stdout.log delete mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-down/dev-stand-residual-networks.stderr.log delete mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-down/dev-stand-residual-networks.stdout.log delete mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-down/dev-stand-residual-volumes.stderr.log delete mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-down/dev-stand-residual-volumes.stdout.log delete mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-down/summary.json delete mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/api-ready.stderr.log delete mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/api-ready.stdout.log delete mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/commands.json delete mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/health.stderr.log delete mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/health.stdout.log delete mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-inspect-operator-console.stderr.log delete mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-inspect-operator-console.stdout.log delete mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-inspect-postgres.stderr.log delete mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-inspect-postgres.stdout.log delete mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-inspect-server.stderr.log delete mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-inspect-server.stdout.log delete mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-inventory.stderr.log delete mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-inventory.stdout.log delete mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-tag-inspect-operator-console.stderr.log delete mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-tag-inspect-operator-console.stdout.log delete mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-tag-inspect-postgres.stderr.log delete mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-tag-inspect-postgres.stdout.log delete mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-tag-inspect-server.stderr.log delete mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-tag-inspect-server.stdout.log delete mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/operator-api-health.stderr.log delete mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/operator-api-health.stdout.log delete mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/operator-api-ready.stderr.log delete mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/operator-api-ready.stdout.log delete mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/postgres-ready.stderr.log delete mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/postgres-ready.stdout.log delete mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/summary.json delete mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/commands.json delete mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/docker-scout-operator-console.sarif.json delete mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/docker-scout-operator-console.stderr.log delete mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/docker-scout-operator-console.stdout.log delete mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/docker-scout-postgres.sarif.json delete mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/docker-scout-postgres.stderr.log delete mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/docker-scout-postgres.stdout.log delete mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/docker-scout-server.sarif.json delete mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/docker-scout-server.stderr.log delete mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/docker-scout-server.stdout.log delete mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-inspect-operator-console.stderr.log delete mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-inspect-operator-console.stdout.log delete mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-inspect-postgres.stderr.log delete mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-inspect-postgres.stdout.log delete mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-inspect-server.stderr.log delete mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-inspect-server.stdout.log delete mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-inventory.stderr.log delete mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-inventory.stdout.log delete mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-tag-inspect-operator-console.stderr.log delete mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-tag-inspect-operator-console.stdout.log delete mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-tag-inspect-postgres.stderr.log delete mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-tag-inspect-postgres.stdout.log delete mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-tag-inspect-server.stderr.log delete mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-tag-inspect-server.stdout.log delete mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/summary.json delete mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/api-ready.stderr.log delete mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/api-ready.stdout.log delete mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/commands.json delete mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/compose-up.stderr.log delete mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/compose-up.stdout.log delete mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/health.stderr.log delete mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/health.stdout.log delete mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-inspect-operator-console.stderr.log delete mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-inspect-operator-console.stdout.log delete mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-inspect-postgres.stderr.log delete mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-inspect-postgres.stdout.log delete mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-inspect-server.stderr.log delete mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-inspect-server.stdout.log delete mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-inventory.stderr.log delete mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-inventory.stdout.log delete mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-tag-inspect-operator-console.stderr.log delete mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-tag-inspect-operator-console.stdout.log delete mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-tag-inspect-postgres.stderr.log delete mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-tag-inspect-postgres.stdout.log delete mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-tag-inspect-server.stderr.log delete mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-tag-inspect-server.stdout.log delete mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/operator-api-health.stderr.log delete mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/operator-api-health.stdout.log delete mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/operator-api-ready.stderr.log delete mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/operator-api-ready.stdout.log delete mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/postgres-container-id.stderr.log delete mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/postgres-container-id.stdout.log delete mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/postgres-credential-injection.stderr.log delete mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/postgres-credential-injection.stdout.log delete mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/postgres-ready.stderr.log delete mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/postgres-ready.stdout.log delete mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/server-container-id.stderr.log delete mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/server-container-id.stdout.log delete mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/server-credential-injection.stderr.log delete mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/server-credential-injection.stdout.log delete mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/summary.json delete mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/ready.stderr.log delete mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/ready.stdout.log delete mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/scan.stderr.log delete mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/scan.stdout.log delete mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/summary.json delete mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/up.stderr.log delete mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/up.stdout.log delete mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-2/cleanup.json delete mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-2/commands.json delete mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-2/post-status.stderr.log delete mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-2/post-status.stdout.log delete mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-2/pre-status.stderr.log delete mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-2/pre-status.stdout.log delete mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-2/summary.json delete mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-3/cleanup.json delete mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-3/commands.json delete mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-3/post-status.stderr.log delete mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-3/post-status.stdout.log delete mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-3/pre-status.stderr.log delete mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-3/pre-status.stdout.log delete mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-3/summary.json delete mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/ownership/db-bulkops-rejected-negative.json delete mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/ownership/ledger-final.json delete mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/ownership/plan-governance-commit-diff.json delete mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/ownership/release-gates-commit-diff.json delete mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/tdd/RG3-DEVSTAND.red.json delete mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/tdd/RG3-NODE.red.json delete mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/tdd/RG3-OWNERSHIP.red.json delete mode 100644 .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/verification-summary.json create mode 100644 scripts/production-gates/assert-windows-path-budget.ps1 diff --git a/.agent/reports/2026-07-10-release-gates-foundation-revision-3-maker.md b/.agent/reports/2026-07-10-release-gates-foundation-revision-3-maker.md deleted file mode 100644 index 6dae65ae..00000000 --- a/.agent/reports/2026-07-10-release-gates-foundation-revision-3-maker.md +++ /dev/null @@ -1,191 +0,0 @@ -# RELEASE-GATES Foundation Revision 3 — Maker Report - -Date: 2026-07-10 - -Role: maker only; no independent checker verdict, post-review verdict, integration verdict, production-readiness verdict, or GO/NO-GO claim - -Worktree: `D:\Dev\engram\.agent\worktrees\prc-release-gates` - -Branch: `work/prc-release-gates` -Starting head: `2b3ef3e33bd19e630f8f67d07a9e2521cb98537f` - -Plan-governance commit: -`a1653abf5a1088f45df2c58487a74a886666adf1` - -Release-gates implementation/evidence commit: -`badc408937dd6fad0e1dc7ee9fc573505aa617b2` - -## Outcome - -Revision 3 implements the release-gate foundation corrections required by the -independent revision-2 `REVISE` report. It provides durable plan authority, -ordered ownership-state enforcement, fail-closed dev-stand liveness/readiness and -credential proof, and a clean-checkout OpenClaw release matrix. The implemented -gates correctly expose two current product/release blockers rather than masking -them: - -1. the exact current three-image dev stand contains HIGH/CRITICAL findings - (`5` operator-console, `38` PostgreSQL, `13` server); and -2. `plugin/openclaw-engram/package-lock.json` is absent, so no npm release command - is allowed to run. - -The DB bulk-operations ownership state remains truthfully held at -`DB-BULKOPS-BEHAVIORAL-EDGE-REWORK`. Rejected head -`68b2ce5835c7c6efdf1c68da9eedcb8d9c3837ef` is recorded as rejected, with no -integration SHA. No later DB candidate is represented as accepted in these -artifacts. - -## Exact source locks - -| Artifact | SHA256 | -| --- | --- | -| revision-2 checker report | `C7A96460C34951C0876F3F87F3B404E037D246A974D9AC491D5A9C2FF455FCCB` | -| revision-3 master plan | `D371E94DFF1EA12767B9D0832240CB6CAF52C6C3BBE2209FE4280159C4F03C52` | -| revision-3 ownership state | `1419E2F7E5236E21DD9A2D8C3271CED2DEF16DC0A798435AD5A9401FE522D55B` | -| rejected DB bulk-ops checker | `EB9EB227363A27EA058C6654BD7E38EED1088252F79F837E377B2A3CBC1FAFB7` | -| OpenClaw/ingest classification | `A095E9A30D6F04D8918B96D41D790D1F8CA1FB42671FBCF57BD0E29609E0AC2A` | -| MCP structured-input classification | `3356F3AE6073F95E701707FCF451D63809AC186ED1DEA7321A7027C4C3122E7A` | - -The exact plan hash is embedded in the tracked ownership state and the executable -CI Ledger step. A different plan byte sequence fails closed. - -## Changed implementation surface - -- `.agent/dev-stand.config.yaml` -- `.github/workflows/test.yml` -- `scripts/production-gates/assert-plan-path-ownership.ps1` -- `scripts/production-gates/run-db-suite.ps1` -- `scripts/production-gates/run-dev-stand.ps1` -- new `scripts/production-gates/run-node-matrix.ps1` -- exact ignored governance artifacts: - `.agent/plans/2026-07-10-engram-production-ready-master-plan.md` and - `.agent/plans/2026-07-10-engram-production-ready-ownership-state.json` -- exact maker/evidence namespace under - `.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**` - -No DB bulk-ops product source, canonical root evidence register, rendered Markdown, -or HTML dashboard was edited by this slice. - -## Revision-2 F-1 through F-7 disposition - -| Finding | Revision-3 maker disposition | -| --- | --- | -| F-1 live DB-BULKOPS head unauthorized | Closed at authority level without accepting the defective head. The exact sibling/rework paths and ordered epochs exist; four overlapping paths are assigned to `DB-BULKOPS-BEHAVIORAL-EDGE-REWORK`; rejected head/checker/hash are pinned; integration is empty. The historical head produces zero path violations and exactly four current-owner errors. | -| F-2 owner sets accepted reversed order | Closed in the gate. Epoch owner sequences are compared exactly; current owner, predecessor evidence, required successor base, and Git ancestry are enforced. Reversed order, missing evidence, wrong base, and rejected-head mismatch all have negative fixtures. | -| F-3 plan authority ignored/unpinned | Closed in this branch's governance surface. The exact plan and ownership-state files are force-added, state is bound to the challenged plan SHA256, and CI invokes Ledger with `-ExpectedPlanSha256`. | -| F-4 OpenClaw release has no repair owner | Closed in the plan/gate design. `OPENCLAW-RELEASE` owns the manifest/lock release surface. The new runner requires clean pre/post state, a tracked non-ignored lockfile, four-way version parity, exact `npm ci -> typecheck -> test -> audit(high) -> pack --dry-run --json`, required package contents, and cleanup. Current expected-negative evidence stops before npm because the lockfile is absent. | -| F-5 `ingest_doc` unclassified | Closed in revision-3 plan authority using the source-backed classifier: `SnapshotOpIngestDoc/executeIngestDoc` is pre-demolition-stale/unwired for this release, cannot count as durable-audit proof, and has explicit demolition/public-truth owners. | -| F-6 current RELEASE-GATES liveness/credential defects | Closed in implementation, pending independent acceptance. Liveness is HTTP 200 plus exact `starting|ready|error`; readiness is HTTP 200 plus exact `ready`. Up generates three independent cryptographic 256-bit values, rejects blank/default/reused values, injects them at runtime, persists only redacted proof, and validates direct plus operator-proxied endpoints. | -| F-7 missing root register rows | Root-owned and still open at this maker snapshot. The canonical register has 54 unique rows, but comparison with the 47 revision-3 plan slices finds two missing rows: `DOCUMENT-INGEST-PUBLIC-TRUTH` and `INGEST-DOC-SNAPSHOT-DEMOLITION`. This discrepancy was sent to root; this slice did not silently patch root-owned JSON/Markdown/HTML. | - -## TDD and deterministic verification - -RED evidence is preserved at: - -- `tdd/RG3-OWNERSHIP.red.json` — - `051CC783F978E65B777A96D3897C1F2CB5CB4F29824C86506BCB939870919309` -- `tdd/RG3-DEVSTAND.red.json` — - `DA1948A48ADE2C830C8EEE570F4BA3C14D5B8020D7C4402B2C588CF8C0DF8622` -- `tdd/RG3-NODE.red.json` — - `C9E044E2D4560ECFC19F8E6828DA4C5BD1F1E3DC1B0AB7ABD974EF66E727797B` - -GREEN/fail-closed verification: - -| Proof | Result | -| --- | --- | -| PowerShell AST parse | PASS, 8 scripts, 0 errors | -| deterministic script self-tests | PASS, 8/8 | -| revision-3 ownership Ledger | PASS, 47 slices, 318 declarations, 32 repeated exact paths, 2 declared prefix intersections, 32 state epochs, 0 errors | -| plan-governance commit Diff | PASS, 2 changed paths, 0 violations, 0 errors; SHA256 `EE67CB0DF9ECB298F1E2DF7DAF6993B1111D126C6E34AC80904389D113B861C2` | -| RELEASE-GATES commit Diff | PASS, 134 changed paths, 0 violations, 0 errors; SHA256 `354EF8D59E693445CE7EC921CB62EEDD1B5E9B40DA86E5ACE43408E58FD406ED` | -| rejected DB head Diff | expected FAIL, exit 1, 22 changed paths, 0 path violations, exactly 4 current-owner errors | -| workflow/config/runner conformance | PASS, 26 semantic mutations rejected | -| `actionlint` | PASS, v1.7.12 | -| `git diff --check` | PASS | -| evidence secret-pattern scan | PASS, 0 matching files | -| post-run Docker residue | PASS, 0 containers, 0 networks, 0 volumes | - -Machine summary: -`.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/verification-summary.json`. - -## Actual dev-stand runtime proof - -The real lifecycle used compose project `engram-critical-stand` and exact images -declared by `.agent/dev-stand.config.yaml`. - -- Up: PASS. PostgreSQL/admin/bootstrap values were independently generated, - distinct, non-default, runtime-injected, and not persisted. Direct and - operator-proxied liveness/readiness endpoints all returned HTTP 200 and passed - their distinct semantic contracts. -- Ready: PASS. -- Scan: FAIL as required by policy. Findings were `5`, `38`, and `13` for the exact - operator-console, PostgreSQL, and server images respectively. -- Down: PASS. Containers, networks, and volumes owned by the project were zero. -- Wrapper: expected FAIL because Scan failed; cleanup remained PASS. - -The wrapper summary SHA256 is -`2E8386AAC779F1EA3E68EDE005BF643B8EBCD37824101B8E7B80070AB9B311CF`. - -### Bootstrap capability claim boundary - -The runner proves that `ENGRAM_AUTH_BOOTSTRAP_CAPABILITY` reaches the server -container environment through an ephemeral override. Current Go configuration has -no live consumer for that variable. Therefore this report claims only generation, -non-default/distinct policy, runtime injection, redaction, and non-persistence. It -does **not** claim functional bootstrap authorization behavior. - -## OpenClaw release-matrix proof - -The current clean-surface run is an expected negative: - -- pre-surface clean: true; -- post-surface clean: true; -- release commands executed: 0; -- package dry-run: false; -- blocker: missing tracked `plugin/openclaw-engram/package-lock.json`. - -This is owned by `OPENCLAW-RELEASE`; RELEASE-GATES does not generate or repair the -manifest. Evidence SHA256: -`408424249909005FEC919E1E5E00C73596FCDB4FAACDBDC69295E3EBBC860472`. - -## S4 threat model - -### Assets - -- PostgreSQL credential, admin token, and bootstrap capability; -- exact challenged plan bytes and ordered ownership authority; -- npm lock/package/plugin release identity and packed artifact contents; -- cleanup ownership boundaries for Docker and Node artifacts. - -### Threats and controls - -| Threat | Control | -| --- | --- | -| blank/default/reused credentials | cryptographic 256-bit generation plus nonblank, non-default, pairwise-distinct assertions and negative fixtures | -| secrets in command arguments, raw logs, summaries, or config | environment-only process injection, redaction before persistence, machine-evidence scans, and no caller-environment export | -| shell-dependent runtime proof failing on distroless images | container IDs plus `docker inspect --format '{{json .Config.Env}}'`; no in-container `sh` execution | -| HTTP 200 false-green | separate liveness and readiness parsers with exact allowed status sets | -| locally altered/ignored plan authorizing work | tracked plan/state, exact expected SHA256, canonical state binding, CI Ledger | -| reversed ownership or successor omitting predecessor | exact sequence comparison, current-owner enforcement, predecessor evidence, exact required base, ancestor proof | -| lockfile ignored, stale, or version-drifted | presence/tracking/non-ignore proof plus package/lock-root/plugin version and dependency parity | -| source/tests or `node_modules` leaking into package | dry-run package allow/deny checks and unconditional exact-surface cleanup | -| cleanup escaping its owned scope | compose-label inventory and exact OpenClaw `node_modules`/`dist` removal with outside-sentinel self-test | - -### Residual risks - -- Current release images fail the zero HIGH/CRITICAL policy and require the separate - image-remediation lane. -- OpenClaw clean-install/package proof cannot start until the release owner commits - a valid tracked lockfile. -- Functional bootstrap capability remains a separate product/security contract. -- DB bulk-ops successor acceptance, root register parity/render, independent - revision-3 checker, post-review, integration, full project gates, and customer-mode - proof remain mandatory. - -## Handoff contract - -This maker handoff is suitable only for a fresh independent checker. The checker -must bind to the exact commits and hashes supplied after commit, rerun the -deterministic and runtime-relevant gates from a clean worktree, and preserve the two -expected-negative product blockers. No evidence in this report authorizes -integration or a production-ready claim. diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/commands.json b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/commands.json deleted file mode 100644 index 25df5ec4..00000000 --- a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/commands.json +++ /dev/null @@ -1,110 +0,0 @@ -[ - { - "name": "dev-stand-up", - "executable": "C:\\Program Files\\PowerShell\\7\\pwsh.exe", - "arguments": [ - "-NoProfile", - "-File", - "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\scripts\\production-gates\\run-db-suite.ps1", - "-DevStandAction", - "Up", - "-ComposeProject", - "engram-critical-stand", - "-ComposeFile", - "docker-compose.yml", - "-ArtifactRoot", - ".agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested", - "-RunId", - "maker-runtime-1" - ], - "command": "\"C:\\Program Files\\PowerShell\\7\\pwsh.exe\" -NoProfile -File \"D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\scripts\\production-gates\\run-db-suite.ps1\" -DevStandAction Up -ComposeProject engram-critical-stand -ComposeFile docker-compose.yml -ArtifactRoot \".agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\" -RunId maker-runtime-1", - "started_at": "2026-07-10T09:41:14.6889150+00:00", - "finished_at": "2026-07-10T09:42:08.4713805+00:00", - "duration_seconds": 53.782, - "exit_code": 0, - "timed_out": false, - "stdout": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\up.stdout.log", - "stderr": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\up.stderr.log" - }, - { - "name": "dev-stand-ready", - "executable": "C:\\Program Files\\PowerShell\\7\\pwsh.exe", - "arguments": [ - "-NoProfile", - "-File", - "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\scripts\\production-gates\\run-db-suite.ps1", - "-DevStandAction", - "Ready", - "-ComposeProject", - "engram-critical-stand", - "-ComposeFile", - "docker-compose.yml", - "-ArtifactRoot", - ".agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested", - "-RunId", - "maker-runtime-1" - ], - "command": "\"C:\\Program Files\\PowerShell\\7\\pwsh.exe\" -NoProfile -File \"D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\scripts\\production-gates\\run-db-suite.ps1\" -DevStandAction Ready -ComposeProject engram-critical-stand -ComposeFile docker-compose.yml -ArtifactRoot \".agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\" -RunId maker-runtime-1", - "started_at": "2026-07-10T09:42:08.5154258+00:00", - "finished_at": "2026-07-10T09:42:11.4027295+00:00", - "duration_seconds": 2.887, - "exit_code": 0, - "timed_out": false, - "stdout": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\ready.stdout.log", - "stderr": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\ready.stderr.log" - }, - { - "name": "dev-stand-scan", - "executable": "C:\\Program Files\\PowerShell\\7\\pwsh.exe", - "arguments": [ - "-NoProfile", - "-File", - "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\scripts\\production-gates\\run-db-suite.ps1", - "-DevStandAction", - "Scan", - "-ComposeProject", - "engram-critical-stand", - "-ComposeFile", - "docker-compose.yml", - "-ArtifactRoot", - ".agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested", - "-RunId", - "maker-runtime-1" - ], - "command": "\"C:\\Program Files\\PowerShell\\7\\pwsh.exe\" -NoProfile -File \"D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\scripts\\production-gates\\run-db-suite.ps1\" -DevStandAction Scan -ComposeProject engram-critical-stand -ComposeFile docker-compose.yml -ArtifactRoot \".agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\" -RunId maker-runtime-1", - "started_at": "2026-07-10T09:42:11.4090302+00:00", - "finished_at": "2026-07-10T09:42:38.4541081+00:00", - "duration_seconds": 27.045, - "exit_code": 1, - "timed_out": false, - "stdout": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\scan.stdout.log", - "stderr": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\scan.stderr.log" - }, - { - "name": "dev-stand-down", - "executable": "C:\\Program Files\\PowerShell\\7\\pwsh.exe", - "arguments": [ - "-NoProfile", - "-File", - "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\scripts\\production-gates\\run-db-suite.ps1", - "-DevStandAction", - "Down", - "-ComposeProject", - "engram-critical-stand", - "-ComposeFile", - "docker-compose.yml", - "-ArtifactRoot", - ".agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested", - "-RunId", - "maker-runtime-1" - ], - "command": "\"C:\\Program Files\\PowerShell\\7\\pwsh.exe\" -NoProfile -File \"D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\scripts\\production-gates\\run-db-suite.ps1\" -DevStandAction Down -ComposeProject engram-critical-stand -ComposeFile docker-compose.yml -ArtifactRoot \".agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\" -RunId maker-runtime-1", - "started_at": "2026-07-10T09:42:38.4626898+00:00", - "finished_at": "2026-07-10T09:42:43.2598207+00:00", - "duration_seconds": 4.797, - "exit_code": 0, - "timed_out": false, - "stdout": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\down.stdout.log", - "stderr": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\down.stderr.log" - } -] diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/down.stderr.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/down.stderr.log deleted file mode 100644 index e69de29b..00000000 diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/down.stdout.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/down.stdout.log deleted file mode 100644 index 12dd95ed..00000000 --- a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/down.stdout.log +++ /dev/null @@ -1,2 +0,0 @@ -dev-stand action=Down verdict=PASS child_commands=4 nonzero_children=0 -summary=D:\Dev\engram\.agent\worktrees\prc-release-gates\.agent\reports\evidence\production-ready\release-gates-foundation-revision-3\dev-stand-runtime\maker-runtime-1\nested\dev-stand\maker-runtime-1-down\summary.json diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-down/commands.json b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-down/commands.json deleted file mode 100644 index 4cbb4e77..00000000 --- a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-down/commands.json +++ /dev/null @@ -1,84 +0,0 @@ -[ - { - "name": "dev-stand-down", - "executable": "C:\\Program Files\\Docker\\Docker\\resources\\bin\\docker.exe", - "arguments": [ - "compose", - "-p", - "engram-critical-stand", - "-f", - "docker-compose.yml", - "down", - "-v", - "--remove-orphans" - ], - "environment_keys": [], - "command": "C:\\Program Files\\Docker\\Docker\\resources\\bin\\docker.exe compose -p engram-critical-stand -f docker-compose.yml down -v --remove-orphans", - "started_at": "2026-07-10T09:42:39.1363285+00:00", - "finished_at": "2026-07-10T09:42:42.5926281+00:00", - "duration_seconds": 3.456, - "exit_code": 0, - "timed_out": false, - "stdout": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-down\\compose-down.stdout.log", - "stderr": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-down\\compose-down.stderr.log" - }, - { - "name": "dev-stand-residual-containers", - "executable": "C:\\Program Files\\Docker\\Docker\\resources\\bin\\docker.exe", - "arguments": [ - "ps", - "-aq", - "--filter", - "label=com.docker.compose.project=engram-critical-stand" - ], - "environment_keys": [], - "command": "C:\\Program Files\\Docker\\Docker\\resources\\bin\\docker.exe ps -aq --filter label=com.docker.compose.project=engram-critical-stand", - "started_at": "2026-07-10T09:42:42.6511628+00:00", - "finished_at": "2026-07-10T09:42:42.8095250+00:00", - "duration_seconds": 0.158, - "exit_code": 0, - "timed_out": false, - "stdout": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-down\\dev-stand-residual-containers.stdout.log", - "stderr": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-down\\dev-stand-residual-containers.stderr.log" - }, - { - "name": "dev-stand-residual-volumes", - "executable": "C:\\Program Files\\Docker\\Docker\\resources\\bin\\docker.exe", - "arguments": [ - "volume", - "ls", - "-q", - "--filter", - "label=com.docker.compose.project=engram-critical-stand" - ], - "environment_keys": [], - "command": "C:\\Program Files\\Docker\\Docker\\resources\\bin\\docker.exe volume ls -q --filter label=com.docker.compose.project=engram-critical-stand", - "started_at": "2026-07-10T09:42:42.8109038+00:00", - "finished_at": "2026-07-10T09:42:42.9756446+00:00", - "duration_seconds": 0.165, - "exit_code": 0, - "timed_out": false, - "stdout": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-down\\dev-stand-residual-volumes.stdout.log", - "stderr": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-down\\dev-stand-residual-volumes.stderr.log" - }, - { - "name": "dev-stand-residual-networks", - "executable": "C:\\Program Files\\Docker\\Docker\\resources\\bin\\docker.exe", - "arguments": [ - "network", - "ls", - "-q", - "--filter", - "label=com.docker.compose.project=engram-critical-stand" - ], - "environment_keys": [], - "command": "C:\\Program Files\\Docker\\Docker\\resources\\bin\\docker.exe network ls -q --filter label=com.docker.compose.project=engram-critical-stand", - "started_at": "2026-07-10T09:42:42.9762783+00:00", - "finished_at": "2026-07-10T09:42:43.1721199+00:00", - "duration_seconds": 0.196, - "exit_code": 0, - "timed_out": false, - "stdout": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-down\\dev-stand-residual-networks.stdout.log", - "stderr": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-down\\dev-stand-residual-networks.stderr.log" - } -] diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-down/compose-down.stderr.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-down/compose-down.stderr.log deleted file mode 100644 index 9a3343de..00000000 --- a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-down/compose-down.stderr.log +++ /dev/null @@ -1,16 +0,0 @@ - Container engram-critical-stand-operator-console-1 Stopping - Container engram-critical-stand-operator-console-1 Stopped - Container engram-critical-stand-operator-console-1 Removing - Container engram-critical-stand-operator-console-1 Removed - Container engram-critical-stand-server-1 Stopping - Container engram-critical-stand-server-1 Stopped - Container engram-critical-stand-server-1 Removing - Container engram-critical-stand-server-1 Removed - Container engram-critical-stand-postgres-1 Stopping - Container engram-critical-stand-postgres-1 Stopped - Container engram-critical-stand-postgres-1 Removing - Container engram-critical-stand-postgres-1 Removed - Network engram-critical-stand_default Removing - Volume engram-critical-stand_pgdata Removing - Volume engram-critical-stand_pgdata Removed - Network engram-critical-stand_default Removed diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-down/compose-down.stdout.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-down/compose-down.stdout.log deleted file mode 100644 index e69de29b..00000000 diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-down/dev-stand-residual-containers.stderr.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-down/dev-stand-residual-containers.stderr.log deleted file mode 100644 index e69de29b..00000000 diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-down/dev-stand-residual-containers.stdout.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-down/dev-stand-residual-containers.stdout.log deleted file mode 100644 index e69de29b..00000000 diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-down/dev-stand-residual-networks.stderr.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-down/dev-stand-residual-networks.stderr.log deleted file mode 100644 index e69de29b..00000000 diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-down/dev-stand-residual-networks.stdout.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-down/dev-stand-residual-networks.stdout.log deleted file mode 100644 index e69de29b..00000000 diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-down/dev-stand-residual-volumes.stderr.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-down/dev-stand-residual-volumes.stderr.log deleted file mode 100644 index e69de29b..00000000 diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-down/dev-stand-residual-volumes.stdout.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-down/dev-stand-residual-volumes.stdout.log deleted file mode 100644 index e69de29b..00000000 diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-down/summary.json b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-down/summary.json deleted file mode 100644 index ad7f26bb..00000000 --- a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-down/summary.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "schema_version": 1, - "gate": "dev-stand-contract", - "action": "Down", - "run_id": "maker-runtime-1", - "started_at": "2026-07-10T09:42:39.1050055+00:00", - "finished_at": "2026-07-10T09:42:43.1727975+00:00", - "duration_seconds": 4.068, - "verdict": "PASS", - "compose_project": "engram-critical-stand", - "compose_file": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\docker-compose.yml", - "ephemeral_postgres_password_generated": false, - "ephemeral_admin_token_generated": false, - "ephemeral_bootstrap_capability_generated": false, - "ephemeral_credentials_distinct_and_nondefault": false, - "ephemeral_credentials_runtime_injected": false, - "ephemeral_postgres_password_persisted": false, - "ephemeral_admin_token_persisted": false, - "ephemeral_bootstrap_capability_persisted": false, - "exact_image_targets": { - "postgres": "pgvector/pgvector:pg17", - "server": "ghcr.io/thebtf/engram:main", - "operator-console": "ghcr.io/thebtf/engram-operator-console:main" - }, - "actual_images": {}, - "actual_image_ids": {}, - "tag_image_ids": {}, - "liveness_endpoints": [], - "semantic_ready_endpoints": [], - "vulnerability_scan": { - "scanner": "docker scout cves", - "severity_gate": [ - "critical", - "high" - ], - "scans": [] - }, - "automatic_failure_cleanup": false, - "residual_checks_performed": true, - "residual_resources_zero": true, - "child_commands": 4, - "nonzero_child_commands": 0, - "commands": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-down\\commands.json", - "errors": [], - "artifact_directory": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-down" -} diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/api-ready.stderr.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/api-ready.stderr.log deleted file mode 100644 index e69de29b..00000000 diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/api-ready.stdout.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/api-ready.stdout.log deleted file mode 100644 index 36aa5929..00000000 --- a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/api-ready.stdout.log +++ /dev/null @@ -1,3 +0,0 @@ -{"status":"ready"} - -200 \ No newline at end of file diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/commands.json b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/commands.json deleted file mode 100644 index 5ac1f7fa..00000000 --- a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/commands.json +++ /dev/null @@ -1,251 +0,0 @@ -[ - { - "name": "dev-stand-postgres-ready", - "executable": "C:\\Program Files\\Docker\\Docker\\resources\\bin\\docker.exe", - "arguments": [ - "compose", - "-p", - "engram-critical-stand", - "-f", - "docker-compose.yml", - "exec", - "-T", - "postgres", - "pg_isready", - "-U", - "engram", - "-d", - "engram" - ], - "environment_keys": [], - "command": "C:\\Program Files\\Docker\\Docker\\resources\\bin\\docker.exe compose -p engram-critical-stand -f docker-compose.yml exec -T postgres pg_isready -U engram -d engram", - "started_at": "2026-07-10T09:42:09.0886609+00:00", - "finished_at": "2026-07-10T09:42:09.6021086+00:00", - "duration_seconds": 0.513, - "exit_code": 0, - "timed_out": false, - "stdout": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-ready\\postgres-ready.stdout.log", - "stderr": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-ready\\postgres-ready.stderr.log" - }, - { - "name": "dev-stand-health", - "executable": "C:\\WINDOWS\\system32\\curl.exe", - "arguments": [ - "-sS", - "--max-time", - "15", - "--write-out", - "\\n%{http_code}", - "http://localhost:37778/health" - ], - "environment_keys": [], - "command": "C:\\WINDOWS\\system32\\curl.exe -sS --max-time 15 --write-out \\n%{http_code} http://localhost:37778/health", - "started_at": "2026-07-10T09:42:09.6635118+00:00", - "finished_at": "2026-07-10T09:42:09.7174415+00:00", - "duration_seconds": 0.054, - "exit_code": 0, - "timed_out": false, - "stdout": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-ready\\health.stdout.log", - "stderr": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-ready\\health.stderr.log" - }, - { - "name": "dev-stand-api-ready", - "executable": "C:\\WINDOWS\\system32\\curl.exe", - "arguments": [ - "-sS", - "--max-time", - "15", - "--write-out", - "\\n%{http_code}", - "http://localhost:37778/api/ready" - ], - "environment_keys": [], - "command": "C:\\WINDOWS\\system32\\curl.exe -sS --max-time 15 --write-out \\n%{http_code} http://localhost:37778/api/ready", - "started_at": "2026-07-10T09:42:09.7444015+00:00", - "finished_at": "2026-07-10T09:42:09.7818067+00:00", - "duration_seconds": 0.037, - "exit_code": 0, - "timed_out": false, - "stdout": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-ready\\api-ready.stdout.log", - "stderr": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-ready\\api-ready.stderr.log" - }, - { - "name": "dev-stand-operator-api-health", - "executable": "C:\\WINDOWS\\system32\\curl.exe", - "arguments": [ - "-sS", - "--max-time", - "15", - "--write-out", - "\\n%{http_code}", - "http://localhost:3001/api/health" - ], - "environment_keys": [], - "command": "C:\\WINDOWS\\system32\\curl.exe -sS --max-time 15 --write-out \\n%{http_code} http://localhost:3001/api/health", - "started_at": "2026-07-10T09:42:09.7849574+00:00", - "finished_at": "2026-07-10T09:42:09.8244173+00:00", - "duration_seconds": 0.039, - "exit_code": 0, - "timed_out": false, - "stdout": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-ready\\operator-api-health.stdout.log", - "stderr": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-ready\\operator-api-health.stderr.log" - }, - { - "name": "dev-stand-operator-api-ready", - "executable": "C:\\WINDOWS\\system32\\curl.exe", - "arguments": [ - "-sS", - "--max-time", - "15", - "--write-out", - "\\n%{http_code}", - "http://localhost:3001/api/ready" - ], - "environment_keys": [], - "command": "C:\\WINDOWS\\system32\\curl.exe -sS --max-time 15 --write-out \\n%{http_code} http://localhost:3001/api/ready", - "started_at": "2026-07-10T09:42:09.8253781+00:00", - "finished_at": "2026-07-10T09:42:09.8663613+00:00", - "duration_seconds": 0.041, - "exit_code": 0, - "timed_out": false, - "stdout": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-ready\\operator-api-ready.stdout.log", - "stderr": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-ready\\operator-api-ready.stderr.log" - }, - { - "name": "dev-stand-image-inventory", - "executable": "C:\\Program Files\\Docker\\Docker\\resources\\bin\\docker.exe", - "arguments": [ - "ps", - "--filter", - "label=com.docker.compose.project=engram-critical-stand", - "--format", - "{{.ID}}|{{.Label \"com.docker.compose.service\"}}" - ], - "environment_keys": [], - "command": "C:\\Program Files\\Docker\\Docker\\resources\\bin\\docker.exe ps --filter label=com.docker.compose.project=engram-critical-stand --format {{.ID}}|{{.Label \"com.docker.compose.service\"}}", - "started_at": "2026-07-10T09:42:09.8673679+00:00", - "finished_at": "2026-07-10T09:42:10.0719320+00:00", - "duration_seconds": 0.205, - "exit_code": 0, - "timed_out": false, - "stdout": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-ready\\image-inventory.stdout.log", - "stderr": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-ready\\image-inventory.stderr.log" - }, - { - "name": "dev-stand-image-inspect-operator-console", - "executable": "C:\\Program Files\\Docker\\Docker\\resources\\bin\\docker.exe", - "arguments": [ - "inspect", - "1f9e23d5284a", - "--format", - "{{.Config.Image}}|{{.Image}}" - ], - "environment_keys": [], - "command": "C:\\Program Files\\Docker\\Docker\\resources\\bin\\docker.exe inspect 1f9e23d5284a --format {{.Config.Image}}|{{.Image}}", - "started_at": "2026-07-10T09:42:10.0780100+00:00", - "finished_at": "2026-07-10T09:42:10.2598886+00:00", - "duration_seconds": 0.182, - "exit_code": 0, - "timed_out": false, - "stdout": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-ready\\image-inspect-operator-console.stdout.log", - "stderr": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-ready\\image-inspect-operator-console.stderr.log" - }, - { - "name": "dev-stand-image-tag-inspect-operator-console", - "executable": "C:\\Program Files\\Docker\\Docker\\resources\\bin\\docker.exe", - "arguments": [ - "image", - "inspect", - "ghcr.io/thebtf/engram-operator-console:main", - "--format", - "{{.Id}}" - ], - "environment_keys": [], - "command": "C:\\Program Files\\Docker\\Docker\\resources\\bin\\docker.exe image inspect ghcr.io/thebtf/engram-operator-console:main --format {{.Id}}", - "started_at": "2026-07-10T09:42:10.2622080+00:00", - "finished_at": "2026-07-10T09:42:10.4863428+00:00", - "duration_seconds": 0.224, - "exit_code": 0, - "timed_out": false, - "stdout": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-ready\\image-tag-inspect-operator-console.stdout.log", - "stderr": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-ready\\image-tag-inspect-operator-console.stderr.log" - }, - { - "name": "dev-stand-image-inspect-server", - "executable": "C:\\Program Files\\Docker\\Docker\\resources\\bin\\docker.exe", - "arguments": [ - "inspect", - "e6d119b206fa", - "--format", - "{{.Config.Image}}|{{.Image}}" - ], - "environment_keys": [], - "command": "C:\\Program Files\\Docker\\Docker\\resources\\bin\\docker.exe inspect e6d119b206fa --format {{.Config.Image}}|{{.Image}}", - "started_at": "2026-07-10T09:42:10.4891718+00:00", - "finished_at": "2026-07-10T09:42:10.6751444+00:00", - "duration_seconds": 0.186, - "exit_code": 0, - "timed_out": false, - "stdout": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-ready\\image-inspect-server.stdout.log", - "stderr": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-ready\\image-inspect-server.stderr.log" - }, - { - "name": "dev-stand-image-tag-inspect-server", - "executable": "C:\\Program Files\\Docker\\Docker\\resources\\bin\\docker.exe", - "arguments": [ - "image", - "inspect", - "ghcr.io/thebtf/engram:main", - "--format", - "{{.Id}}" - ], - "environment_keys": [], - "command": "C:\\Program Files\\Docker\\Docker\\resources\\bin\\docker.exe image inspect ghcr.io/thebtf/engram:main --format {{.Id}}", - "started_at": "2026-07-10T09:42:10.6757467+00:00", - "finished_at": "2026-07-10T09:42:10.8945614+00:00", - "duration_seconds": 0.219, - "exit_code": 0, - "timed_out": false, - "stdout": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-ready\\image-tag-inspect-server.stdout.log", - "stderr": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-ready\\image-tag-inspect-server.stderr.log" - }, - { - "name": "dev-stand-image-inspect-postgres", - "executable": "C:\\Program Files\\Docker\\Docker\\resources\\bin\\docker.exe", - "arguments": [ - "inspect", - "a230a1d63fb3", - "--format", - "{{.Config.Image}}|{{.Image}}" - ], - "environment_keys": [], - "command": "C:\\Program Files\\Docker\\Docker\\resources\\bin\\docker.exe inspect a230a1d63fb3 --format {{.Config.Image}}|{{.Image}}", - "started_at": "2026-07-10T09:42:10.8953514+00:00", - "finished_at": "2026-07-10T09:42:11.0626370+00:00", - "duration_seconds": 0.167, - "exit_code": 0, - "timed_out": false, - "stdout": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-ready\\image-inspect-postgres.stdout.log", - "stderr": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-ready\\image-inspect-postgres.stderr.log" - }, - { - "name": "dev-stand-image-tag-inspect-postgres", - "executable": "C:\\Program Files\\Docker\\Docker\\resources\\bin\\docker.exe", - "arguments": [ - "image", - "inspect", - "pgvector/pgvector:pg17", - "--format", - "{{.Id}}" - ], - "environment_keys": [], - "command": "C:\\Program Files\\Docker\\Docker\\resources\\bin\\docker.exe image inspect pgvector/pgvector:pg17 --format {{.Id}}", - "started_at": "2026-07-10T09:42:11.0633176+00:00", - "finished_at": "2026-07-10T09:42:11.2955306+00:00", - "duration_seconds": 0.232, - "exit_code": 0, - "timed_out": false, - "stdout": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-ready\\image-tag-inspect-postgres.stdout.log", - "stderr": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-ready\\image-tag-inspect-postgres.stderr.log" - } -] diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/health.stderr.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/health.stderr.log deleted file mode 100644 index e69de29b..00000000 diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/health.stdout.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/health.stdout.log deleted file mode 100644 index 9cb44649..00000000 --- a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/health.stdout.log +++ /dev/null @@ -1,3 +0,0 @@ -{"status":"ready","version":"dev"} - -200 \ No newline at end of file diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-inspect-operator-console.stderr.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-inspect-operator-console.stderr.log deleted file mode 100644 index e69de29b..00000000 diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-inspect-operator-console.stdout.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-inspect-operator-console.stdout.log deleted file mode 100644 index ef06e692..00000000 --- a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-inspect-operator-console.stdout.log +++ /dev/null @@ -1 +0,0 @@ -ghcr.io/thebtf/engram-operator-console:main|sha256:74d7c0db215c0a40d716c24f0326a487d7822ec94d0d0edc74b5fcf014face18 diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-inspect-postgres.stderr.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-inspect-postgres.stderr.log deleted file mode 100644 index e69de29b..00000000 diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-inspect-postgres.stdout.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-inspect-postgres.stdout.log deleted file mode 100644 index 0fda45fb..00000000 --- a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-inspect-postgres.stdout.log +++ /dev/null @@ -1 +0,0 @@ -pgvector/pgvector:pg17|sha256:feb68f4f15446397d8cac7f4fe48fe4586de83160d1fc48b46283312d1a33966 diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-inspect-server.stderr.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-inspect-server.stderr.log deleted file mode 100644 index e69de29b..00000000 diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-inspect-server.stdout.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-inspect-server.stdout.log deleted file mode 100644 index a62e1c97..00000000 --- a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-inspect-server.stdout.log +++ /dev/null @@ -1 +0,0 @@ -ghcr.io/thebtf/engram:main|sha256:a6e55d692ddf31a94b0a1d29a4e615ff509c6dac19eccafca4bda3e51147b38f diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-inventory.stderr.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-inventory.stderr.log deleted file mode 100644 index e69de29b..00000000 diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-inventory.stdout.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-inventory.stdout.log deleted file mode 100644 index 6f9b8ff4..00000000 --- a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-inventory.stdout.log +++ /dev/null @@ -1,3 +0,0 @@ -1f9e23d5284a|operator-console -e6d119b206fa|server -a230a1d63fb3|postgres diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-tag-inspect-operator-console.stderr.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-tag-inspect-operator-console.stderr.log deleted file mode 100644 index e69de29b..00000000 diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-tag-inspect-operator-console.stdout.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-tag-inspect-operator-console.stdout.log deleted file mode 100644 index 0b0905aa..00000000 --- a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-tag-inspect-operator-console.stdout.log +++ /dev/null @@ -1 +0,0 @@ -sha256:74d7c0db215c0a40d716c24f0326a487d7822ec94d0d0edc74b5fcf014face18 diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-tag-inspect-postgres.stderr.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-tag-inspect-postgres.stderr.log deleted file mode 100644 index e69de29b..00000000 diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-tag-inspect-postgres.stdout.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-tag-inspect-postgres.stdout.log deleted file mode 100644 index 893200d5..00000000 --- a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-tag-inspect-postgres.stdout.log +++ /dev/null @@ -1 +0,0 @@ -sha256:feb68f4f15446397d8cac7f4fe48fe4586de83160d1fc48b46283312d1a33966 diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-tag-inspect-server.stderr.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-tag-inspect-server.stderr.log deleted file mode 100644 index e69de29b..00000000 diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-tag-inspect-server.stdout.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-tag-inspect-server.stdout.log deleted file mode 100644 index 55054a50..00000000 --- a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-tag-inspect-server.stdout.log +++ /dev/null @@ -1 +0,0 @@ -sha256:a6e55d692ddf31a94b0a1d29a4e615ff509c6dac19eccafca4bda3e51147b38f diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/operator-api-health.stderr.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/operator-api-health.stderr.log deleted file mode 100644 index e69de29b..00000000 diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/operator-api-health.stdout.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/operator-api-health.stdout.log deleted file mode 100644 index 9cb44649..00000000 --- a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/operator-api-health.stdout.log +++ /dev/null @@ -1,3 +0,0 @@ -{"status":"ready","version":"dev"} - -200 \ No newline at end of file diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/operator-api-ready.stderr.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/operator-api-ready.stderr.log deleted file mode 100644 index e69de29b..00000000 diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/operator-api-ready.stdout.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/operator-api-ready.stdout.log deleted file mode 100644 index 36aa5929..00000000 --- a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/operator-api-ready.stdout.log +++ /dev/null @@ -1,3 +0,0 @@ -{"status":"ready"} - -200 \ No newline at end of file diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/postgres-ready.stderr.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/postgres-ready.stderr.log deleted file mode 100644 index e69de29b..00000000 diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/postgres-ready.stdout.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/postgres-ready.stdout.log deleted file mode 100644 index e9330303..00000000 --- a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/postgres-ready.stdout.log +++ /dev/null @@ -1 +0,0 @@ -/var/run/postgresql:5432 - accepting connections diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/summary.json b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/summary.json deleted file mode 100644 index 6ef14563..00000000 --- a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/summary.json +++ /dev/null @@ -1,92 +0,0 @@ -{ - "schema_version": 1, - "gate": "dev-stand-contract", - "action": "Ready", - "run_id": "maker-runtime-1", - "started_at": "2026-07-10T09:42:09.0630906+00:00", - "finished_at": "2026-07-10T09:42:11.3076041+00:00", - "duration_seconds": 2.245, - "verdict": "PASS", - "compose_project": "engram-critical-stand", - "compose_file": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\docker-compose.yml", - "ephemeral_postgres_password_generated": false, - "ephemeral_admin_token_generated": false, - "ephemeral_bootstrap_capability_generated": false, - "ephemeral_credentials_distinct_and_nondefault": false, - "ephemeral_credentials_runtime_injected": false, - "ephemeral_postgres_password_persisted": false, - "ephemeral_admin_token_persisted": false, - "ephemeral_bootstrap_capability_persisted": false, - "exact_image_targets": { - "postgres": "pgvector/pgvector:pg17", - "server": "ghcr.io/thebtf/engram:main", - "operator-console": "ghcr.io/thebtf/engram-operator-console:main" - }, - "actual_images": { - "server": "ghcr.io/thebtf/engram:main", - "operator-console": "ghcr.io/thebtf/engram-operator-console:main", - "postgres": "pgvector/pgvector:pg17" - }, - "actual_image_ids": { - "server": "sha256:a6e55d692ddf31a94b0a1d29a4e615ff509c6dac19eccafca4bda3e51147b38f", - "operator-console": "sha256:74d7c0db215c0a40d716c24f0326a487d7822ec94d0d0edc74b5fcf014face18", - "postgres": "sha256:feb68f4f15446397d8cac7f4fe48fe4586de83160d1fc48b46283312d1a33966" - }, - "tag_image_ids": { - "server": "sha256:a6e55d692ddf31a94b0a1d29a4e615ff509c6dac19eccafca4bda3e51147b38f", - "operator-console": "sha256:74d7c0db215c0a40d716c24f0326a487d7822ec94d0d0edc74b5fcf014face18", - "postgres": "sha256:feb68f4f15446397d8cac7f4fe48fe4586de83160d1fc48b46283312d1a33966" - }, - "liveness_endpoints": [ - { - "name": "health", - "url": "http://localhost:37778/health", - "path_kind": "direct-server", - "contract_kind": "liveness", - "http_status": "200", - "semantic_contract_pass": true - }, - { - "name": "operator-api-health", - "url": "http://localhost:3001/api/health", - "path_kind": "operator-console-proxy", - "contract_kind": "liveness", - "http_status": "200", - "semantic_contract_pass": true - } - ], - "semantic_ready_endpoints": [ - { - "name": "api-ready", - "url": "http://localhost:37778/api/ready", - "path_kind": "direct-server", - "contract_kind": "readiness", - "http_status": "200", - "semantic_contract_pass": true - }, - { - "name": "operator-api-ready", - "url": "http://localhost:3001/api/ready", - "path_kind": "operator-console-proxy", - "contract_kind": "readiness", - "http_status": "200", - "semantic_contract_pass": true - } - ], - "vulnerability_scan": { - "scanner": "docker scout cves", - "severity_gate": [ - "critical", - "high" - ], - "scans": [] - }, - "automatic_failure_cleanup": false, - "residual_checks_performed": false, - "residual_resources_zero": null, - "child_commands": 12, - "nonzero_child_commands": 0, - "commands": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-ready\\commands.json", - "errors": [], - "artifact_directory": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-ready" -} diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/commands.json b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/commands.json deleted file mode 100644 index 5520009b..00000000 --- a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/commands.json +++ /dev/null @@ -1,214 +0,0 @@ -[ - { - "name": "dev-stand-image-inventory", - "executable": "C:\\Program Files\\Docker\\Docker\\resources\\bin\\docker.exe", - "arguments": [ - "ps", - "--filter", - "label=com.docker.compose.project=engram-critical-stand", - "--format", - "{{.ID}}|{{.Label \"com.docker.compose.service\"}}" - ], - "environment_keys": [], - "command": "C:\\Program Files\\Docker\\Docker\\resources\\bin\\docker.exe ps --filter label=com.docker.compose.project=engram-critical-stand --format {{.ID}}|{{.Label \"com.docker.compose.service\"}}", - "started_at": "2026-07-10T09:42:11.9439324+00:00", - "finished_at": "2026-07-10T09:42:12.1985114+00:00", - "duration_seconds": 0.255, - "exit_code": 0, - "timed_out": false, - "stdout": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-scan\\image-inventory.stdout.log", - "stderr": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-scan\\image-inventory.stderr.log" - }, - { - "name": "dev-stand-image-inspect-operator-console", - "executable": "C:\\Program Files\\Docker\\Docker\\resources\\bin\\docker.exe", - "arguments": [ - "inspect", - "1f9e23d5284a", - "--format", - "{{.Config.Image}}|{{.Image}}" - ], - "environment_keys": [], - "command": "C:\\Program Files\\Docker\\Docker\\resources\\bin\\docker.exe inspect 1f9e23d5284a --format {{.Config.Image}}|{{.Image}}", - "started_at": "2026-07-10T09:42:12.2532773+00:00", - "finished_at": "2026-07-10T09:42:12.4206208+00:00", - "duration_seconds": 0.167, - "exit_code": 0, - "timed_out": false, - "stdout": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-scan\\image-inspect-operator-console.stdout.log", - "stderr": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-scan\\image-inspect-operator-console.stderr.log" - }, - { - "name": "dev-stand-image-tag-inspect-operator-console", - "executable": "C:\\Program Files\\Docker\\Docker\\resources\\bin\\docker.exe", - "arguments": [ - "image", - "inspect", - "ghcr.io/thebtf/engram-operator-console:main", - "--format", - "{{.Id}}" - ], - "environment_keys": [], - "command": "C:\\Program Files\\Docker\\Docker\\resources\\bin\\docker.exe image inspect ghcr.io/thebtf/engram-operator-console:main --format {{.Id}}", - "started_at": "2026-07-10T09:42:12.4229507+00:00", - "finished_at": "2026-07-10T09:42:12.6118876+00:00", - "duration_seconds": 0.189, - "exit_code": 0, - "timed_out": false, - "stdout": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-scan\\image-tag-inspect-operator-console.stdout.log", - "stderr": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-scan\\image-tag-inspect-operator-console.stderr.log" - }, - { - "name": "dev-stand-image-inspect-server", - "executable": "C:\\Program Files\\Docker\\Docker\\resources\\bin\\docker.exe", - "arguments": [ - "inspect", - "e6d119b206fa", - "--format", - "{{.Config.Image}}|{{.Image}}" - ], - "environment_keys": [], - "command": "C:\\Program Files\\Docker\\Docker\\resources\\bin\\docker.exe inspect e6d119b206fa --format {{.Config.Image}}|{{.Image}}", - "started_at": "2026-07-10T09:42:12.6144738+00:00", - "finished_at": "2026-07-10T09:42:12.8085464+00:00", - "duration_seconds": 0.194, - "exit_code": 0, - "timed_out": false, - "stdout": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-scan\\image-inspect-server.stdout.log", - "stderr": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-scan\\image-inspect-server.stderr.log" - }, - { - "name": "dev-stand-image-tag-inspect-server", - "executable": "C:\\Program Files\\Docker\\Docker\\resources\\bin\\docker.exe", - "arguments": [ - "image", - "inspect", - "ghcr.io/thebtf/engram:main", - "--format", - "{{.Id}}" - ], - "environment_keys": [], - "command": "C:\\Program Files\\Docker\\Docker\\resources\\bin\\docker.exe image inspect ghcr.io/thebtf/engram:main --format {{.Id}}", - "started_at": "2026-07-10T09:42:12.8096304+00:00", - "finished_at": "2026-07-10T09:42:13.0177443+00:00", - "duration_seconds": 0.208, - "exit_code": 0, - "timed_out": false, - "stdout": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-scan\\image-tag-inspect-server.stdout.log", - "stderr": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-scan\\image-tag-inspect-server.stderr.log" - }, - { - "name": "dev-stand-image-inspect-postgres", - "executable": "C:\\Program Files\\Docker\\Docker\\resources\\bin\\docker.exe", - "arguments": [ - "inspect", - "a230a1d63fb3", - "--format", - "{{.Config.Image}}|{{.Image}}" - ], - "environment_keys": [], - "command": "C:\\Program Files\\Docker\\Docker\\resources\\bin\\docker.exe inspect a230a1d63fb3 --format {{.Config.Image}}|{{.Image}}", - "started_at": "2026-07-10T09:42:13.0187988+00:00", - "finished_at": "2026-07-10T09:42:13.2135401+00:00", - "duration_seconds": 0.195, - "exit_code": 0, - "timed_out": false, - "stdout": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-scan\\image-inspect-postgres.stdout.log", - "stderr": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-scan\\image-inspect-postgres.stderr.log" - }, - { - "name": "dev-stand-image-tag-inspect-postgres", - "executable": "C:\\Program Files\\Docker\\Docker\\resources\\bin\\docker.exe", - "arguments": [ - "image", - "inspect", - "pgvector/pgvector:pg17", - "--format", - "{{.Id}}" - ], - "environment_keys": [], - "command": "C:\\Program Files\\Docker\\Docker\\resources\\bin\\docker.exe image inspect pgvector/pgvector:pg17 --format {{.Id}}", - "started_at": "2026-07-10T09:42:13.2142470+00:00", - "finished_at": "2026-07-10T09:42:13.4476094+00:00", - "duration_seconds": 0.233, - "exit_code": 0, - "timed_out": false, - "stdout": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-scan\\image-tag-inspect-postgres.stdout.log", - "stderr": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-scan\\image-tag-inspect-postgres.stderr.log" - }, - { - "name": "dev-stand-vulnerability-scan-operator-console", - "executable": "C:\\Program Files\\Docker\\Docker\\resources\\bin\\docker.exe", - "arguments": [ - "scout", - "cves", - "--exit-code", - "--only-severity", - "critical,high", - "--format", - "sarif", - "--output", - "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-scan\\docker-scout-operator-console.sarif.json", - "local://ghcr.io/thebtf/engram-operator-console:main" - ], - "environment_keys": [], - "command": "C:\\Program Files\\Docker\\Docker\\resources\\bin\\docker.exe scout cves --exit-code --only-severity critical,high --format sarif --output D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-scan\\docker-scout-operator-console.sarif.json local://ghcr.io/thebtf/engram-operator-console:main", - "started_at": "2026-07-10T09:42:13.4622964+00:00", - "finished_at": "2026-07-10T09:42:26.5093394+00:00", - "duration_seconds": 13.047, - "exit_code": 2, - "timed_out": false, - "stdout": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-scan\\docker-scout-operator-console.stdout.log", - "stderr": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-scan\\docker-scout-operator-console.stderr.log" - }, - { - "name": "dev-stand-vulnerability-scan-postgres", - "executable": "C:\\Program Files\\Docker\\Docker\\resources\\bin\\docker.exe", - "arguments": [ - "scout", - "cves", - "--exit-code", - "--only-severity", - "critical,high", - "--format", - "sarif", - "--output", - "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-scan\\docker-scout-postgres.sarif.json", - "local://pgvector/pgvector:pg17" - ], - "environment_keys": [], - "command": "C:\\Program Files\\Docker\\Docker\\resources\\bin\\docker.exe scout cves --exit-code --only-severity critical,high --format sarif --output D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-scan\\docker-scout-postgres.sarif.json local://pgvector/pgvector:pg17", - "started_at": "2026-07-10T09:42:26.5410737+00:00", - "finished_at": "2026-07-10T09:42:29.9949837+00:00", - "duration_seconds": 3.454, - "exit_code": 2, - "timed_out": false, - "stdout": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-scan\\docker-scout-postgres.stdout.log", - "stderr": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-scan\\docker-scout-postgres.stderr.log" - }, - { - "name": "dev-stand-vulnerability-scan-server", - "executable": "C:\\Program Files\\Docker\\Docker\\resources\\bin\\docker.exe", - "arguments": [ - "scout", - "cves", - "--exit-code", - "--only-severity", - "critical,high", - "--format", - "sarif", - "--output", - "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-scan\\docker-scout-server.sarif.json", - "local://ghcr.io/thebtf/engram:main" - ], - "environment_keys": [], - "command": "C:\\Program Files\\Docker\\Docker\\resources\\bin\\docker.exe scout cves --exit-code --only-severity critical,high --format sarif --output D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-scan\\docker-scout-server.sarif.json local://ghcr.io/thebtf/engram:main", - "started_at": "2026-07-10T09:42:30.0019572+00:00", - "finished_at": "2026-07-10T09:42:38.3902556+00:00", - "duration_seconds": 8.388, - "exit_code": 2, - "timed_out": false, - "stdout": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-scan\\docker-scout-server.stdout.log", - "stderr": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-scan\\docker-scout-server.stderr.log" - } -] diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/docker-scout-operator-console.sarif.json b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/docker-scout-operator-console.sarif.json deleted file mode 100644 index ca9cf893..00000000 --- a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/docker-scout-operator-console.sarif.json +++ /dev/null @@ -1,381 +0,0 @@ -{ - "version": "2.1.0", - "$schema": "https://raw.githubusercontent.com/oasis-tcs/sarif-spec/main/sarif-2.1/schema/sarif-schema-2.1.0.json", - "runs": [ - { - "tool": { - "driver": { - "fullName": "Docker Scout", - "informationUri": "https://docker.com/products/docker-scout", - "name": "docker scout", - "rules": [ - { - "id": "CVE-2026-48962", - "name": "OsPackageVulnerability", - "shortDescription": { - "text": "CVE-2026-48962" - }, - "helpUri": "https://scout.docker.com/v/CVE-2026-48962?s=debian&n=perl&ns=debian&t=deb&osn=debian&osv=12&vr=%3E0", - "help": { - "text": "IO::Compress versions before 2.220 for Perl can execute arbitrary code in File::GlobMapper via an attacker-controlled output glob. _parseOutputGlob() wraps the caller-supplied output glob string in double quotes and stores it in the parser state; _getFiles() then runs the stored expression through eval STRING. A literal double quote in the output glob closes the dquote wrapper, and the characters that follow are evaluated as Perl. Arbitrary Perl in the output glob executes at the calling process's privilege.\n\n---\n- libio-compress-perl 2.220-1 (bug https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1138055)\n[trixie] - libio-compress-perl (Minor issue)\n- perl 5.40.1-8 (bug https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1138854)\nhttps://lists.security.metacpan.org/cve-announce/msg/40434385/\nFixed by: https://github.com/pmqs/IO-Compress/commit/f2db247bf90d4cc7ee2710be384946081f3b4610 (v2.220)\n", - "markdown": "> IO::Compress versions before 2.220 for Perl can execute arbitrary code in File::GlobMapper via an attacker-controlled output glob. _parseOutputGlob() wraps the caller-supplied output glob string in double quotes and stores it in the parser state; _getFiles() then runs the stored expression through eval STRING. A literal double quote in the output glob closes the dquote wrapper, and the characters that follow are evaluated as Perl. Arbitrary Perl in the output glob executes at the calling process's privilege.\n\n---\n- libio-compress-perl 2.220-1 (bug https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1138055)\n[trixie] - libio-compress-perl (Minor issue)\n- perl 5.40.1-8 (bug https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1138854)\nhttps://lists.security.metacpan.org/cve-announce/msg/40434385/\nFixed by: https://github.com/pmqs/IO-Compress/commit/f2db247bf90d4cc7ee2710be384946081f3b4610 (v2.220)\n\n| | |\n|----------------|----------------------------------------------------------------------------------------|\n| Package | pkg:deb/debian/perl@5.36.0-7%2Bdeb12u3?os_distro=bookworm&os_name=debian&os_version=12 |\n| Affected range | >0 |\n| Fixed version | not fixed |\n" - }, - "properties": { - "affected_version": ">0", - "cvssV3_severity": "HIGH", - "fixed_version": "not fixed", - "purls": [ - "pkg:deb/debian/perl@5.36.0-7%2Bdeb12u3?os_distro=bookworm&os_name=debian&os_version=12" - ], - "security-severity": "7.3", - "tags": [ - "HIGH" - ] - } - }, - { - "id": "CVE-2026-33671", - "name": "OsPackageVulnerability", - "shortDescription": { - "text": "CVE-2026-33671: Inefficient Regular Expression Complexity" - }, - "helpUri": "https://scout.docker.com/v/CVE-2026-33671?s=github&n=picomatch&t=npm&vr=%3E%3D4.0.0%2C%3C4.0.4", - "help": { - "text": "### Impact\n`picomatch` is vulnerable to Regular Expression Denial of Service (ReDoS) when processing crafted extglob patterns. Certain patterns using extglob quantifiers such as `+()` and `*()`, especially when combined with overlapping alternatives or nested extglobs, are compiled into regular expressions that can exhibit catastrophic backtracking on non-matching input.\n\nExamples of problematic patterns include `+(a|aa)`, `+(*|?)`, `+(+(a))`, `*(+(a))`, and `+(+(+(a)))`. In local reproduction, these patterns caused multi-second event-loop blocking with relatively short inputs. For example, `+(a|aa)` compiled to `^(?:(?=.)(?:a|aa)+)$` and took about 2 seconds to reject a 41-character non-matching input, while nested patterns such as `+(+(a))` and `*(+(a))` took around 29 seconds to reject a 33-character input on a modern M1 MacBook.\n\nApplications are impacted when they allow untrusted users to supply glob patterns that are passed to `picomatch` for compilation or matching. In those cases, an attacker can cause excessive CPU consumption and block the Node.js event loop, resulting in a denial of service. Applications that only use trusted, developer-controlled glob patterns are much less likely to be exposed in a security-relevant way.\n\n### Patches\nThis issue is fixed in picomatch 4.0.4, 3.0.2 and 2.3.2.\n\nUsers should upgrade to one of these versions or later, depending on their supported release line.\n\n### Workarounds\nIf upgrading is not immediately possible, avoid passing untrusted glob patterns to `picomatch`.\n\nPossible mitigations include:\n- disable extglob support for untrusted patterns by using `noextglob: true`\n- reject or sanitize patterns containing nested extglobs or extglob quantifiers such as `+()` and `*()`\n- enforce strict allowlists for accepted pattern syntax\n- run matching in an isolated worker or separate process with time and resource limits\n- apply application-level request throttling and input validation for any endpoint that accepts glob patterns\n\n### Resources\n- Picomatch repository: https://github.com/micromatch/picomatch\n- `lib/parse.js` and `lib/constants.js` are involved in generating the vulnerable regex forms\n- Comparable ReDoS precedent: CVE-2024-4067 (`micromatch`)\n- Comparable generated-regex precedent: CVE-2024-45296 (`path-to-regexp`)\n", - "markdown": "> ### Impact\n`picomatch` is vulnerable to Regular Expression Denial of Service (ReDoS) when processing crafted extglob patterns. Certain patterns using extglob quantifiers such as `+()` and `*()`, especially when combined with overlapping alternatives or nested extglobs, are compiled into regular expressions that can exhibit catastrophic backtracking on non-matching input.\n\nExamples of problematic patterns include `+(a|aa)`, `+(*|?)`, `+(+(a))`, `*(+(a))`, and `+(+(+(a)))`. In local reproduction, these patterns caused multi-second event-loop blocking with relatively short inputs. For example, `+(a|aa)` compiled to `^(?:(?=.)(?:a|aa)+)$` and took about 2 seconds to reject a 41-character non-matching input, while nested patterns such as `+(+(a))` and `*(+(a))` took around 29 seconds to reject a 33-character input on a modern M1 MacBook.\n\nApplications are impacted when they allow untrusted users to supply glob patterns that are passed to `picomatch` for compilation or matching. In those cases, an attacker can cause excessive CPU consumption and block the Node.js event loop, resulting in a denial of service. Applications that only use trusted, developer-controlled glob patterns are much less likely to be exposed in a security-relevant way.\n\n### Patches\nThis issue is fixed in picomatch 4.0.4, 3.0.2 and 2.3.2.\n\nUsers should upgrade to one of these versions or later, depending on their supported release line.\n\n### Workarounds\nIf upgrading is not immediately possible, avoid passing untrusted glob patterns to `picomatch`.\n\nPossible mitigations include:\n- disable extglob support for untrusted patterns by using `noextglob: true`\n- reject or sanitize patterns containing nested extglobs or extglob quantifiers such as `+()` and `*()`\n- enforce strict allowlists for accepted pattern syntax\n- run matching in an isolated worker or separate process with time and resource limits\n- apply application-level request throttling and input validation for any endpoint that accepts glob patterns\n\n### Resources\n- Picomatch repository: https://github.com/micromatch/picomatch\n- `lib/parse.js` and `lib/constants.js` are involved in generating the vulnerable regex forms\n- Comparable ReDoS precedent: CVE-2024-4067 (`micromatch`)\n- Comparable generated-regex precedent: CVE-2024-45296 (`path-to-regexp`)\n\n| | |\n|----------------|----------------------------------------------|\n| Package | pkg:npm/picomatch@4.0.3 |\n| Affected range | >=4.0.0,<4.0.4 |\n| Fixed version | 4.0.4 |\n| CVSS Score | 7.5 |\n| CVSS Vector | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H |\n" - }, - "properties": { - "affected_version": ">=4.0.0,<4.0.4", - "cvssV3": 7.5, - "cvssV3_severity": "HIGH", - "cvssV3_vector": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H", - "fixed_version": "4.0.4", - "purls": [ - "pkg:npm/picomatch@4.0.3" - ], - "security-severity": "7.5", - "tags": [ - "HIGH" - ] - } - }, - { - "id": "CVE-2026-48815", - "name": "OsPackageVulnerability", - "shortDescription": { - "text": "CVE-2026-48815: Improper Verification of Cryptographic Signature" - }, - "helpUri": "https://scout.docker.com/v/CVE-2026-48815?s=github&n=sigstore&t=npm&vr=%3C%3D4.1.0", - "help": { - "text": "### Summary\n\nThe documented `certificateOIDs` option in `sigstore.verify()` is accepted by the public API but discarded before verification, so required certificate extension OIDs are never checked.\n\n### Details\n\nThe public verify options include `certificateOIDs` and the documentation says those OID/value pairs “must be present in the certificate’s extension list.” The policy-construction path used by `sigstore.verify()` and `createVerifier()` only copies the SAN and issuer settings into the verification policy and completely ignores `certificateOIDs`.\n\nAs a result, callers can believe they are constraining verification to certificates carrying specific Fulcio or workload-identifying OIDs, while the actual verifier never receives those constraints. Any bundle that satisfies the remaining checks is accepted even if the required OID extensions are absent or mismatched.\n\nThis is reachable from supported usage through the documented `certificateOIDs` verify option.\n\n### PoC\n\n```javascript\nconst { createVerificationPolicy } = require(\"sigstore/dist/config\");\n\nconst policy = createVerificationPolicy({\n certificateIssuer: \"https://issuer.example\",\n certificateIdentityEmail: \"victim@example.com\",\n certificateOIDs: {\n \"1.2.3.4\": \"required-value\",\n },\n});\n\nconsole.log(\"certificateOIDs\" in policy, JSON.stringify(policy));\n// false {\"subjectAlternativeName\":\"victim@example.com\",\"extensions\":{\"issuer\":\"https://issuer.example\"}}\n```\n\n### Impact\n\nApplications that rely on `certificateOIDs` to restrict which certificates may sign artifacts receive no such protection. Unauthorized certificates that should be rejected on extension policy can be accepted as long as they satisfy the remaining verification checks.\n", - "markdown": "> ### Summary\n\nThe documented `certificateOIDs` option in `sigstore.verify()` is accepted by the public API but discarded before verification, so required certificate extension OIDs are never checked.\n\n### Details\n\nThe public verify options include `certificateOIDs` and the documentation says those OID/value pairs “must be present in the certificate’s extension list.” The policy-construction path used by `sigstore.verify()` and `createVerifier()` only copies the SAN and issuer settings into the verification policy and completely ignores `certificateOIDs`.\n\nAs a result, callers can believe they are constraining verification to certificates carrying specific Fulcio or workload-identifying OIDs, while the actual verifier never receives those constraints. Any bundle that satisfies the remaining checks is accepted even if the required OID extensions are absent or mismatched.\n\nThis is reachable from supported usage through the documented `certificateOIDs` verify option.\n\n### PoC\n\n```javascript\nconst { createVerificationPolicy } = require(\"sigstore/dist/config\");\n\nconst policy = createVerificationPolicy({\n certificateIssuer: \"https://issuer.example\",\n certificateIdentityEmail: \"victim@example.com\",\n certificateOIDs: {\n \"1.2.3.4\": \"required-value\",\n },\n});\n\nconsole.log(\"certificateOIDs\" in policy, JSON.stringify(policy));\n// false {\"subjectAlternativeName\":\"victim@example.com\",\"extensions\":{\"issuer\":\"https://issuer.example\"}}\n```\n\n### Impact\n\nApplications that rely on `certificateOIDs` to restrict which certificates may sign artifacts receive no such protection. Unauthorized certificates that should be rejected on extension policy can be accepted as long as they satisfy the remaining verification checks.\n\n| | |\n|----------------|----------------------------------------------|\n| Package | pkg:npm/sigstore@3.1.0 |\n| Affected range | <=4.1.0 |\n| Fixed version | 4.1.1 |\n| CVSS Score | 7.5 |\n| CVSS Vector | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:N |\n" - }, - "properties": { - "affected_version": "<=4.1.0", - "cvssV3": 7.5, - "cvssV3_severity": "HIGH", - "cvssV3_vector": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:N", - "fixed_version": "4.1.1", - "purls": [ - "pkg:npm/sigstore@3.1.0" - ], - "security-severity": "7.5", - "tags": [ - "HIGH" - ] - } - }, - { - "id": "CVE-2026-48959", - "name": "OsPackageVulnerability", - "shortDescription": { - "text": "CVE-2026-48959" - }, - "helpUri": "https://scout.docker.com/v/CVE-2026-48959?s=debian&n=perl&ns=debian&t=deb&osn=debian&osv=12&vr=%3E0", - "help": { - "text": "IO::Uncompress::Unzip versions before 2.220 for Perl allow CPU exhaustion via per-byte read loop in fastForward. fastForward() compares length $offset (the digit count of the offset, 1 to 19) against the chunk size $c instead of $offset itself, so $c shrinks from 16 KiB to 1-19 bytes per iteration. Extracting a named entry from an attacker supplied zip via IO::Uncompress::Unzip->new($zip, Name => $target) drives a per-byte read loop scaling with the entry's compressed size, up to the non-Zip64 4 GiB cap.\n\n---\n- libio-compress-perl 2.220-1 (bug https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1138051)\n[trixie] - libio-compress-perl (Minor issue)\n- perl 5.40.1-8 (bug https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1138856)\nhttps://lists.security.metacpan.org/cve-announce/msg/40434381/\nFixed by: https://github.com/pmqs/IO-Compress/commit/68db44076f4c1a86a2ffe53a958eac6cabaf72e2 (v2.220)\n", - "markdown": "> IO::Uncompress::Unzip versions before 2.220 for Perl allow CPU exhaustion via per-byte read loop in fastForward. fastForward() compares length $offset (the digit count of the offset, 1 to 19) against the chunk size $c instead of $offset itself, so $c shrinks from 16 KiB to 1-19 bytes per iteration. Extracting a named entry from an attacker supplied zip via IO::Uncompress::Unzip->new($zip, Name => $target) drives a per-byte read loop scaling with the entry's compressed size, up to the non-Zip64 4 GiB cap.\n\n---\n- libio-compress-perl 2.220-1 (bug https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1138051)\n[trixie] - libio-compress-perl (Minor issue)\n- perl 5.40.1-8 (bug https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1138856)\nhttps://lists.security.metacpan.org/cve-announce/msg/40434381/\nFixed by: https://github.com/pmqs/IO-Compress/commit/68db44076f4c1a86a2ffe53a958eac6cabaf72e2 (v2.220)\n\n| | |\n|----------------|----------------------------------------------------------------------------------------|\n| Package | pkg:deb/debian/perl@5.36.0-7%2Bdeb12u3?os_distro=bookworm&os_name=debian&os_version=12 |\n| Affected range | >0 |\n| Fixed version | not fixed |\n" - }, - "properties": { - "affected_version": ">0", - "cvssV3_severity": "HIGH", - "fixed_version": "not fixed", - "purls": [ - "pkg:deb/debian/perl@5.36.0-7%2Bdeb12u3?os_distro=bookworm&os_name=debian&os_version=12" - ], - "security-severity": "7.5", - "tags": [ - "HIGH" - ] - } - }, - { - "id": "CVE-2026-12087", - "name": "OsPackageVulnerability", - "shortDescription": { - "text": "CVE-2026-12087" - }, - "helpUri": "https://scout.docker.com/v/CVE-2026-12087?s=debian&n=perl&ns=debian&t=deb&osn=debian&osv=12&vr=%3E0", - "help": { - "text": "Socket versions before 2.041 for Perl have an out-of-bounds heap read. In Socket.xs, pack_ip_mreq_source() checks the length of its source argument before the argument is read, so the check tests the byte length carried over from the preceding multiaddr argument instead. Both addresses occupy a 4-byte field, so a valid multiaddr lets a source of any length pass the check, and the source is then copied into the 4-byte imr_sourceaddr field with a fixed-size copy. A source shorter than 4 bytes is not rejected, and the copy reads up to 3 bytes past the end of its buffer. Calling pack_ip_mreq_source() with a source value shorter than 4 bytes copies adjacent heap memory into the returned packed structure.\n\n---\n- libsocket-perl 2.041-1\n[trixie] - libsocket-perl (Minor issue)\n- perl (bug https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1140152)\nhttps://lists.security.metacpan.org/cve-announce/msg/41020451/\nFixed by: https://github.com/Perl/perl5/commit/de19a0b0ad1900fef976c5c1400bd8f11ec6c6cb (v5.43.11)\n", - "markdown": "> Socket versions before 2.041 for Perl have an out-of-bounds heap read. In Socket.xs, pack_ip_mreq_source() checks the length of its source argument before the argument is read, so the check tests the byte length carried over from the preceding multiaddr argument instead. Both addresses occupy a 4-byte field, so a valid multiaddr lets a source of any length pass the check, and the source is then copied into the 4-byte imr_sourceaddr field with a fixed-size copy. A source shorter than 4 bytes is not rejected, and the copy reads up to 3 bytes past the end of its buffer. Calling pack_ip_mreq_source() with a source value shorter than 4 bytes copies adjacent heap memory into the returned packed structure.\n\n---\n- libsocket-perl 2.041-1\n[trixie] - libsocket-perl (Minor issue)\n- perl (bug https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1140152)\nhttps://lists.security.metacpan.org/cve-announce/msg/41020451/\nFixed by: https://github.com/Perl/perl5/commit/de19a0b0ad1900fef976c5c1400bd8f11ec6c6cb (v5.43.11)\n\n| | |\n|----------------|----------------------------------------------------------------------------------------|\n| Package | pkg:deb/debian/perl@5.36.0-7%2Bdeb12u3?os_distro=bookworm&os_name=debian&os_version=12 |\n| Affected range | >0 |\n| Fixed version | not fixed |\n" - }, - "properties": { - "affected_version": ">0", - "cvssV3_severity": "CRITICAL", - "fixed_version": "not fixed", - "purls": [ - "pkg:deb/debian/perl@5.36.0-7%2Bdeb12u3?os_distro=bookworm&os_name=debian&os_version=12" - ], - "security-severity": "9.1", - "tags": [ - "CRITICAL" - ] - } - } - ], - "version": "1.18.3" - } - }, - "results": [ - { - "ruleId": "CVE-2026-48962", - "ruleIndex": 0, - "kind": "fail", - "level": "error", - "message": { - "text": " Vulnerability : CVE-2026-48962 \n Severity : HIGH \n Package : pkg:deb/debian/perl@5.36.0-7%2Bdeb12u3?os_distro=bookworm&os_name=debian&os_version=12 \n Affected range : >0 \n Fixed version : not fixed \n EPSS Score : 0.002920 \n EPSS Percentile : 0.209720 \n" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "/usr/share/doc/perl-base/copyright" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/perl-base.list" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/perl-base.md5sums" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/perl-base.postinst" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/perl-base.postrm" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/perl-base.preinst" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/perl-base.prerm" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/status" - } - } - } - ] - }, - { - "ruleId": "CVE-2026-33671", - "ruleIndex": 1, - "kind": "fail", - "level": "error", - "message": { - "text": " Vulnerability : CVE-2026-33671 \n Severity : HIGH \n Package : pkg:npm/picomatch@4.0.3 \n Affected range : >=4.0.0,<4.0.4 \n Fixed version : 4.0.4 \n CVSS Score : 7.5 \n CVSS Vector : CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H \n EPSS Score : 0.004120 \n EPSS Percentile : 0.331630 \n" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "/usr/local/lib/node_modules/npm/node_modules/picomatch/package.json" - } - } - } - ] - }, - { - "ruleId": "CVE-2026-48815", - "ruleIndex": 2, - "kind": "fail", - "level": "error", - "message": { - "text": " Vulnerability : CVE-2026-48815 \n Severity : HIGH \n Package : pkg:npm/sigstore@3.1.0 \n Affected range : <=4.1.0 \n Fixed version : 4.1.1 \n CVSS Score : 7.5 \n CVSS Vector : CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:N \n" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "/usr/local/lib/node_modules/npm/node_modules/sigstore/package.json" - } - } - } - ] - }, - { - "ruleId": "CVE-2026-48959", - "ruleIndex": 3, - "kind": "fail", - "level": "error", - "message": { - "text": " Vulnerability : CVE-2026-48959 \n Severity : HIGH \n Package : pkg:deb/debian/perl@5.36.0-7%2Bdeb12u3?os_distro=bookworm&os_name=debian&os_version=12 \n Affected range : >0 \n Fixed version : not fixed \n EPSS Score : 0.003730 \n EPSS Percentile : 0.294000 \n" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "/usr/share/doc/perl-base/copyright" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/perl-base.list" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/perl-base.md5sums" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/perl-base.postinst" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/perl-base.postrm" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/perl-base.preinst" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/perl-base.prerm" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/status" - } - } - } - ] - }, - { - "ruleId": "CVE-2026-12087", - "ruleIndex": 4, - "kind": "fail", - "level": "error", - "message": { - "text": " Vulnerability : CVE-2026-12087 \n Severity : CRITICAL \n Package : pkg:deb/debian/perl@5.36.0-7%2Bdeb12u3?os_distro=bookworm&os_name=debian&os_version=12 \n Affected range : >0 \n Fixed version : not fixed \n EPSS Score : 0.003890 \n EPSS Percentile : 0.309730 \n" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "/usr/share/doc/perl-base/copyright" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/perl-base.list" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/perl-base.md5sums" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/perl-base.postinst" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/perl-base.postrm" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/perl-base.preinst" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/perl-base.prerm" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/status" - } - } - } - ] - } - ] - } - ] -} diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/docker-scout-operator-console.stderr.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/docker-scout-operator-console.stderr.log deleted file mode 100644 index 8644748a..00000000 --- a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/docker-scout-operator-console.stderr.log +++ /dev/null @@ -1,7 +0,0 @@ - i New version 1.23.1 available (installed version is 1.18.3) at https://github.com/docker/scout-cli - ...Storing image for indexing - v Image stored for indexing - ...Indexing - v Indexed 340 packages - x Detected 3 vulnerable packages with a total of 5 vulnerabilities - v Report written to D:\Dev\engram\.agent\worktrees\prc-release-gates\.agent\reports\evidence\production-ready\release-gates-foundation-revision-3\dev-stand-runtime\maker-runtime-1\nested\dev-stand\maker-runtime-1-scan\docker-scout-operator-console.sarif.json diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/docker-scout-operator-console.stdout.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/docker-scout-operator-console.stdout.log deleted file mode 100644 index e69de29b..00000000 diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/docker-scout-postgres.sarif.json b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/docker-scout-postgres.sarif.json deleted file mode 100644 index 2de644b7..00000000 --- a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/docker-scout-postgres.sarif.json +++ /dev/null @@ -1,3142 +0,0 @@ -{ - "version": "2.1.0", - "$schema": "https://raw.githubusercontent.com/oasis-tcs/sarif-spec/main/sarif-2.1/schema/sarif-schema-2.1.0.json", - "runs": [ - { - "tool": { - "driver": { - "fullName": "Docker Scout", - "informationUri": "https://docker.com/products/docker-scout", - "name": "docker scout", - "rules": [ - { - "id": "CVE-2026-42010", - "name": "OsPackageVulnerability", - "shortDescription": { - "text": "CVE-2026-42010" - }, - "helpUri": "https://scout.docker.com/v/CVE-2026-42010?s=debian&n=gnutls28&ns=debian&t=deb&osn=debian&osv=12&vr=%3C3.7.9-2%2Bdeb12u7", - "help": { - "text": "A flaw was found in gnutls. Servers configured with RSA-PSK (Rivest–Shamir–Adleman – Pre-Shared Key) wrongfully matched usernames containing a NUL character with truncated usernames. A remote attacker could exploit this by sending a specially crafted username, leading to an authentication bypass. This vulnerability allows an attacker to gain unauthorized access by circumventing the authentication process.\n\n---\n- gnutls28 3.8.13-1 (bug https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1135319)\nhttps://www.gnutls.org/security-new.html#GNUTLS-SA-2026-04-29-4\nhttps://gitlab.com/gnutls/gnutls/-/issues/1850\nFixed by: https://gitlab.com/gnutls/gnutls/-/commit/cb1833afd9b6309563211b1c0a7c291f52ca98d5 (3.8.13)\nIntroduced with: https://gitlab.com/gnutls/gnutls/-/commit/d00638997fa269a975095d852633b48b2b64fbf9 (3.6.13)\n", - "markdown": "> A flaw was found in gnutls. Servers configured with RSA-PSK (Rivest–Shamir–Adleman – Pre-Shared Key) wrongfully matched usernames containing a NUL character with truncated usernames. A remote attacker could exploit this by sending a specially crafted username, leading to an authentication bypass. This vulnerability allows an attacker to gain unauthorized access by circumventing the authentication process.\n\n---\n- gnutls28 3.8.13-1 (bug https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1135319)\nhttps://www.gnutls.org/security-new.html#GNUTLS-SA-2026-04-29-4\nhttps://gitlab.com/gnutls/gnutls/-/issues/1850\nFixed by: https://gitlab.com/gnutls/gnutls/-/commit/cb1833afd9b6309563211b1c0a7c291f52ca98d5 (3.8.13)\nIntroduced with: https://gitlab.com/gnutls/gnutls/-/commit/d00638997fa269a975095d852633b48b2b64fbf9 (3.6.13)\n\n| | |\n|----------------|-------------------------------------------------------------------------------------------|\n| Package | pkg:deb/debian/gnutls28@3.7.9-2%2Bdeb12u6?os_distro=bookworm&os_name=debian&os_version=12 |\n| Affected range | <3.7.9-2+deb12u7 |\n| Fixed version | 3.7.9-2+deb12u7 |\n" - }, - "properties": { - "affected_version": "<3.7.9-2+deb12u7", - "cvssV3_severity": "HIGH", - "fixed_version": "3.7.9-2+deb12u7", - "purls": [ - "pkg:deb/debian/gnutls28@3.7.9-2%2Bdeb12u6?os_distro=bookworm&os_name=debian&os_version=12" - ], - "security-severity": "7.1", - "tags": [ - "HIGH" - ] - } - }, - { - "id": "CVE-2026-42012", - "name": "OsPackageVulnerability", - "shortDescription": { - "text": "CVE-2026-42012" - }, - "helpUri": "https://scout.docker.com/v/CVE-2026-42012?s=debian&n=gnutls28&ns=debian&t=deb&osn=debian&osv=12&vr=%3C3.7.9-2%2Bdeb12u7", - "help": { - "text": "A flaw was found in gnutls. A remote attacker could exploit this vulnerability by presenting a specially crafted certificate that contains Uniform Resource Identifier (URI) or Service (SRV) Subject Alternative Names (SANs). This could cause the certificate validation process to incorrectly fall back to checking DNS hostnames against the Common Name (CN), potentially allowing the attacker to spoof legitimate services or intercept sensitive information.\n\n---\n- gnutls28 3.8.13-1 (bug https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1135319)\nhttps://www.gnutls.org/security-new.html#GNUTLS-SA-2026-04-29-7\nhttps://gitlab.com/gnutls/gnutls/-/issues/1802\nFixed by: https://gitlab.com/gnutls/gnutls/-/commit/8dcc6a1f48945997666ac9f10896819edd01a03b (3.8.13)\n", - "markdown": "> A flaw was found in gnutls. A remote attacker could exploit this vulnerability by presenting a specially crafted certificate that contains Uniform Resource Identifier (URI) or Service (SRV) Subject Alternative Names (SANs). This could cause the certificate validation process to incorrectly fall back to checking DNS hostnames against the Common Name (CN), potentially allowing the attacker to spoof legitimate services or intercept sensitive information.\n\n---\n- gnutls28 3.8.13-1 (bug https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1135319)\nhttps://www.gnutls.org/security-new.html#GNUTLS-SA-2026-04-29-7\nhttps://gitlab.com/gnutls/gnutls/-/issues/1802\nFixed by: https://gitlab.com/gnutls/gnutls/-/commit/8dcc6a1f48945997666ac9f10896819edd01a03b (3.8.13)\n\n| | |\n|----------------|-------------------------------------------------------------------------------------------|\n| Package | pkg:deb/debian/gnutls28@3.7.9-2%2Bdeb12u6?os_distro=bookworm&os_name=debian&os_version=12 |\n| Affected range | <3.7.9-2+deb12u7 |\n| Fixed version | 3.7.9-2+deb12u7 |\n" - }, - "properties": { - "affected_version": "<3.7.9-2+deb12u7", - "cvssV3_severity": "HIGH", - "fixed_version": "3.7.9-2+deb12u7", - "purls": [ - "pkg:deb/debian/gnutls28@3.7.9-2%2Bdeb12u6?os_distro=bookworm&os_name=debian&os_version=12" - ], - "security-severity": "7.1", - "tags": [ - "HIGH" - ] - } - }, - { - "id": "CVE-2026-48962", - "name": "OsPackageVulnerability", - "shortDescription": { - "text": "CVE-2026-48962" - }, - "helpUri": "https://scout.docker.com/v/CVE-2026-48962?s=debian&n=perl&ns=debian&t=deb&osn=debian&osv=12&vr=%3E0", - "help": { - "text": "IO::Compress versions before 2.220 for Perl can execute arbitrary code in File::GlobMapper via an attacker-controlled output glob. _parseOutputGlob() wraps the caller-supplied output glob string in double quotes and stores it in the parser state; _getFiles() then runs the stored expression through eval STRING. A literal double quote in the output glob closes the dquote wrapper, and the characters that follow are evaluated as Perl. Arbitrary Perl in the output glob executes at the calling process's privilege.\n\n---\n- libio-compress-perl 2.220-1 (bug https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1138055)\n[trixie] - libio-compress-perl (Minor issue)\n- perl 5.40.1-8 (bug https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1138854)\nhttps://lists.security.metacpan.org/cve-announce/msg/40434385/\nFixed by: https://github.com/pmqs/IO-Compress/commit/f2db247bf90d4cc7ee2710be384946081f3b4610 (v2.220)\n", - "markdown": "> IO::Compress versions before 2.220 for Perl can execute arbitrary code in File::GlobMapper via an attacker-controlled output glob. _parseOutputGlob() wraps the caller-supplied output glob string in double quotes and stores it in the parser state; _getFiles() then runs the stored expression through eval STRING. A literal double quote in the output glob closes the dquote wrapper, and the characters that follow are evaluated as Perl. Arbitrary Perl in the output glob executes at the calling process's privilege.\n\n---\n- libio-compress-perl 2.220-1 (bug https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1138055)\n[trixie] - libio-compress-perl (Minor issue)\n- perl 5.40.1-8 (bug https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1138854)\nhttps://lists.security.metacpan.org/cve-announce/msg/40434385/\nFixed by: https://github.com/pmqs/IO-Compress/commit/f2db247bf90d4cc7ee2710be384946081f3b4610 (v2.220)\n\n| | |\n|----------------|----------------------------------------------------------------------------------------|\n| Package | pkg:deb/debian/perl@5.36.0-7%2Bdeb12u3?os_distro=bookworm&os_name=debian&os_version=12 |\n| Affected range | >0 |\n| Fixed version | not fixed |\n" - }, - "properties": { - "affected_version": ">0", - "cvssV3_severity": "HIGH", - "fixed_version": "not fixed", - "purls": [ - "pkg:deb/debian/perl@5.36.0-7%2Bdeb12u3?os_distro=bookworm&os_name=debian&os_version=12" - ], - "security-severity": "7.3", - "tags": [ - "HIGH" - ] - } - }, - { - "id": "CVE-2026-42011", - "name": "OsPackageVulnerability", - "shortDescription": { - "text": "CVE-2026-42011" - }, - "helpUri": "https://scout.docker.com/v/CVE-2026-42011?s=debian&n=gnutls28&ns=debian&t=deb&osn=debian&osv=12&vr=%3C3.7.9-2%2Bdeb12u7", - "help": { - "text": "A flaw was found in gnutls. This vulnerability occurs because permitted name constraints were incorrectly ignored when previous Certificate Authorities (CAs) only had excluded name constraints. A remote attacker could exploit this to bypass critical name constraint checks during certificate validation. This bypass could lead to the acceptance of invalid certificates, potentially enabling spoofing or man-in-the-middle attacks against affected systems.\n\n---\n- gnutls28 3.8.13-1 (bug https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1135319)\nhttps://www.gnutls.org/security-new.html#GNUTLS-SA-2026-04-29-6\nhttps://gitlab.com/gnutls/gnutls/-/work_items/1824\nFixed by: https://gitlab.com/gnutls/gnutls/-/commit/1dead2faec6320aaba321eb56f20d442df192b83 (3.8.13)\n", - "markdown": "> A flaw was found in gnutls. This vulnerability occurs because permitted name constraints were incorrectly ignored when previous Certificate Authorities (CAs) only had excluded name constraints. A remote attacker could exploit this to bypass critical name constraint checks during certificate validation. This bypass could lead to the acceptance of invalid certificates, potentially enabling spoofing or man-in-the-middle attacks against affected systems.\n\n---\n- gnutls28 3.8.13-1 (bug https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1135319)\nhttps://www.gnutls.org/security-new.html#GNUTLS-SA-2026-04-29-6\nhttps://gitlab.com/gnutls/gnutls/-/work_items/1824\nFixed by: https://gitlab.com/gnutls/gnutls/-/commit/1dead2faec6320aaba321eb56f20d442df192b83 (3.8.13)\n\n| | |\n|----------------|-------------------------------------------------------------------------------------------|\n| Package | pkg:deb/debian/gnutls28@3.7.9-2%2Bdeb12u6?os_distro=bookworm&os_name=debian&os_version=12 |\n| Affected range | <3.7.9-2+deb12u7 |\n| Fixed version | 3.7.9-2+deb12u7 |\n" - }, - "properties": { - "affected_version": "<3.7.9-2+deb12u7", - "cvssV3_severity": "HIGH", - "fixed_version": "3.7.9-2+deb12u7", - "purls": [ - "pkg:deb/debian/gnutls28@3.7.9-2%2Bdeb12u6?os_distro=bookworm&os_name=debian&os_version=12" - ], - "security-severity": "7.4", - "tags": [ - "HIGH" - ] - } - }, - { - "id": "CVE-2025-15281", - "name": "OsPackageVulnerability", - "shortDescription": { - "text": "CVE-2025-15281" - }, - "helpUri": "https://scout.docker.com/v/CVE-2025-15281?s=debian&n=glibc&ns=debian&t=deb&osn=debian&osv=12&vr=%3C2.36-9%2Bdeb12u14", - "help": { - "text": "Calling wordexp with WRDE_REUSE in conjunction with WRDE_APPEND in the GNU C Library version 2.0 to version 2.42 may cause the interface to return uninitialized memory in the we_wordv member, which on subsequent calls to wordfree may abort the process.\n\n---\n- glibc 2.42-11 (bug https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1126266)\n[trixie] - glibc 2.41-12+deb13u2\n[bookworm] - glibc 2.36-9+deb12u14\nhttps://www.openwall.com/lists/oss-security/2026/01/20/3\nIntroduced with: https://sourceware.org/git/?p=glibc.git;a=commit;h=8f2ece695d8822e9ecc63ecd157e90bf17a6fe65 (glibc-2.0.92)\nFixed by: https://sourceware.org/git/?p=glibc.git;a=commit;h=80cc58ea2de214f85b0a1d902a3b668ad2ecb302 (glibc-2.43)\n", - "markdown": "> Calling wordexp with WRDE_REUSE in conjunction with WRDE_APPEND in the GNU C Library version 2.0 to version 2.42 may cause the interface to return uninitialized memory in the we_wordv member, which on subsequent calls to wordfree may abort the process.\n\n---\n- glibc 2.42-11 (bug https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1126266)\n[trixie] - glibc 2.41-12+deb13u2\n[bookworm] - glibc 2.36-9+deb12u14\nhttps://www.openwall.com/lists/oss-security/2026/01/20/3\nIntroduced with: https://sourceware.org/git/?p=glibc.git;a=commit;h=8f2ece695d8822e9ecc63ecd157e90bf17a6fe65 (glibc-2.0.92)\nFixed by: https://sourceware.org/git/?p=glibc.git;a=commit;h=80cc58ea2de214f85b0a1d902a3b668ad2ecb302 (glibc-2.43)\n\n| | |\n|----------------|----------------------------------------------------------------------------------------|\n| Package | pkg:deb/debian/glibc@2.36-9%2Bdeb12u13?os_distro=bookworm&os_name=debian&os_version=12 |\n| Affected range | <2.36-9+deb12u14 |\n| Fixed version | 2.36-9+deb12u14 |\n" - }, - "properties": { - "affected_version": "<2.36-9+deb12u14", - "cvssV3_severity": "HIGH", - "fixed_version": "2.36-9+deb12u14", - "purls": [ - "pkg:deb/debian/glibc@2.36-9%2Bdeb12u13?os_distro=bookworm&os_name=debian&os_version=12" - ], - "security-severity": "7.5", - "tags": [ - "HIGH" - ] - } - }, - { - "id": "CVE-2025-58187", - "name": "OsPackageVulnerability", - "shortDescription": { - "text": "CVE-2025-58187" - }, - "helpUri": "https://scout.docker.com/v/CVE-2025-58187?s=golang&n=stdlib&t=golang&vr=%3C1.24.9", - "help": { - "text": "Due to the design of the name constraint checking algorithm, the processing time of some inputs scale non-linearly with respect to the size of the certificate.\n\nThis affects programs which validate arbitrary certificate chains.\n", - "markdown": "> Due to the design of the name constraint checking algorithm, the processing time of some inputs scale non-linearly with respect to the size of the certificate.\n\nThis affects programs which validate arbitrary certificate chains.\n\n| | |\n|----------------|--------------------------|\n| Package | pkg:golang/stdlib@1.24.6 |\n| Affected range | <1.24.9 |\n| Fixed version | 1.24.9 |\n" - }, - "properties": { - "affected_version": "<1.24.9", - "cvssV3_severity": "HIGH", - "fixed_version": "1.24.9", - "purls": [ - "pkg:golang/stdlib@1.24.6" - ], - "security-severity": "7.5", - "tags": [ - "HIGH" - ] - } - }, - { - "id": "CVE-2025-58188", - "name": "OsPackageVulnerability", - "shortDescription": { - "text": "CVE-2025-58188" - }, - "helpUri": "https://scout.docker.com/v/CVE-2025-58188?s=golang&n=stdlib&t=golang&vr=%3C1.24.8", - "help": { - "text": "Validating certificate chains which contain DSA public keys can cause programs to panic, due to a interface cast that assumes they implement the Equal method.\n\nThis affects programs which validate arbitrary certificate chains.\n", - "markdown": "> Validating certificate chains which contain DSA public keys can cause programs to panic, due to a interface cast that assumes they implement the Equal method.\n\nThis affects programs which validate arbitrary certificate chains.\n\n| | |\n|----------------|--------------------------|\n| Package | pkg:golang/stdlib@1.24.6 |\n| Affected range | <1.24.8 |\n| Fixed version | 1.24.8 |\n" - }, - "properties": { - "affected_version": "<1.24.8", - "cvssV3_severity": "HIGH", - "fixed_version": "1.24.8", - "purls": [ - "pkg:golang/stdlib@1.24.6" - ], - "security-severity": "7.5", - "tags": [ - "HIGH" - ] - } - }, - { - "id": "CVE-2025-61723", - "name": "OsPackageVulnerability", - "shortDescription": { - "text": "CVE-2025-61723" - }, - "helpUri": "https://scout.docker.com/v/CVE-2025-61723?s=golang&n=stdlib&t=golang&vr=%3C1.24.8", - "help": { - "text": "The processing time for parsing some invalid inputs scales non-linearly with respect to the size of the input.\n\nThis affects programs which parse untrusted PEM inputs.\n", - "markdown": "> The processing time for parsing some invalid inputs scales non-linearly with respect to the size of the input.\n\nThis affects programs which parse untrusted PEM inputs.\n\n| | |\n|----------------|--------------------------|\n| Package | pkg:golang/stdlib@1.24.6 |\n| Affected range | <1.24.8 |\n| Fixed version | 1.24.8 |\n" - }, - "properties": { - "affected_version": "<1.24.8", - "cvssV3_severity": "HIGH", - "fixed_version": "1.24.8", - "purls": [ - "pkg:golang/stdlib@1.24.6" - ], - "security-severity": "7.5", - "tags": [ - "HIGH" - ] - } - }, - { - "id": "CVE-2025-61725", - "name": "OsPackageVulnerability", - "shortDescription": { - "text": "CVE-2025-61725" - }, - "helpUri": "https://scout.docker.com/v/CVE-2025-61725?s=golang&n=stdlib&t=golang&vr=%3C1.24.8", - "help": { - "text": "The ParseAddress function constructs domain-literal address components through repeated string concatenation. When parsing large domain-literal components, this can cause excessive CPU consumption.\n", - "markdown": "> The ParseAddress function constructs domain-literal address components through repeated string concatenation. When parsing large domain-literal components, this can cause excessive CPU consumption.\n\n| | |\n|----------------|--------------------------|\n| Package | pkg:golang/stdlib@1.24.6 |\n| Affected range | <1.24.8 |\n| Fixed version | 1.24.8 |\n" - }, - "properties": { - "affected_version": "<1.24.8", - "cvssV3_severity": "HIGH", - "fixed_version": "1.24.8", - "purls": [ - "pkg:golang/stdlib@1.24.6" - ], - "security-severity": "7.5", - "tags": [ - "HIGH" - ] - } - }, - { - "id": "CVE-2025-61726", - "name": "OsPackageVulnerability", - "shortDescription": { - "text": "CVE-2025-61726" - }, - "helpUri": "https://scout.docker.com/v/CVE-2025-61726?s=golang&n=stdlib&t=golang&vr=%3C1.24.12", - "help": { - "text": "The net/url package does not set a limit on the number of query parameters in a query.\n\nWhile the maximum size of query parameters in URLs is generally limited by the maximum request header size, the net/http.Request.ParseForm method can parse large URL-encoded forms. Parsing a large form containing many unique query parameters can cause excessive memory consumption.\n", - "markdown": "> The net/url package does not set a limit on the number of query parameters in a query.\n\nWhile the maximum size of query parameters in URLs is generally limited by the maximum request header size, the net/http.Request.ParseForm method can parse large URL-encoded forms. Parsing a large form containing many unique query parameters can cause excessive memory consumption.\n\n| | |\n|----------------|--------------------------|\n| Package | pkg:golang/stdlib@1.24.6 |\n| Affected range | <1.24.12 |\n| Fixed version | 1.24.12 |\n" - }, - "properties": { - "affected_version": "<1.24.12", - "cvssV3_severity": "HIGH", - "fixed_version": "1.24.12", - "purls": [ - "pkg:golang/stdlib@1.24.6" - ], - "security-severity": "7.5", - "tags": [ - "HIGH" - ] - } - }, - { - "id": "CVE-2025-61729", - "name": "OsPackageVulnerability", - "shortDescription": { - "text": "CVE-2025-61729" - }, - "helpUri": "https://scout.docker.com/v/CVE-2025-61729?s=golang&n=stdlib&t=golang&vr=%3C1.24.11", - "help": { - "text": "Within HostnameError.Error(), when constructing an error string, there is no limit to the number of hosts that will be printed out. Furthermore, the error string is constructed by repeated string concatenation, leading to quadratic runtime. Therefore, a certificate provided by a malicious actor can result in excessive resource consumption.\n", - "markdown": "> Within HostnameError.Error(), when constructing an error string, there is no limit to the number of hosts that will be printed out. Furthermore, the error string is constructed by repeated string concatenation, leading to quadratic runtime. Therefore, a certificate provided by a malicious actor can result in excessive resource consumption.\n\n| | |\n|----------------|--------------------------|\n| Package | pkg:golang/stdlib@1.24.6 |\n| Affected range | <1.24.11 |\n| Fixed version | 1.24.11 |\n" - }, - "properties": { - "affected_version": "<1.24.11", - "cvssV3_severity": "HIGH", - "fixed_version": "1.24.11", - "purls": [ - "pkg:golang/stdlib@1.24.6" - ], - "security-severity": "7.5", - "tags": [ - "HIGH" - ] - } - }, - { - "id": "CVE-2025-8194", - "name": "OsPackageVulnerability", - "shortDescription": { - "text": "CVE-2025-8194" - }, - "helpUri": "https://scout.docker.com/v/CVE-2025-8194?s=debian&n=python3.11&ns=debian&t=deb&osn=debian&osv=12&vr=%3C3.11.2-6%2Bdeb12u7", - "help": { - "text": "There is a defect in the CPython “tarfile” module affecting the “TarFile” extraction and entry enumeration APIs. The tar implementation would process tar archives with negative offsets without error, resulting in an infinite loop and deadlock during the parsing of maliciously crafted tar archives. This vulnerability can be mitigated by including the following patch after importing the “tarfile” module:  https://gist.github.com/sethmlarson/1716ac5b82b73dbcbf23ad2eff8b33e1\n\n---\n- python3.13 3.13.6-1 (bug https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1124764)\n[trixie] - python3.13 3.13.5-2+deb13u1\n- python3.12 \n- python3.11 \n[bookworm] - python3.11 3.11.2-6+deb12u7\n- python3.9 \n- python2.7 \n[bullseye] - python2.7 (EOL in bullseye LTS)\n- pypy3 7.3.21+dfsg-1 (bug https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1126758)\n[trixie] - pypy3 (Minor issue)\n[bookworm] - pypy3 (Minor issue)\n[bullseye] - pypy3 (Minor issue)\nhttps://github.com/python/cpython/issues/130577\nhttps://github.com/python/cpython/pull/137027\nhttps://mail.python.org/archives/list/security-announce@python.org/thread/ZULLF3IZ726XP5EY7XJ7YIN3K5MDYR2D/\nFixed by: https://github.com/python/cpython/commit/7040aa54f14676938970e10c5f74ea93cd56aa38 (main)\nFixed by: https://github.com/python/cpython/commit/cdae923ffe187d6ef916c0f665a31249619193fe (v3.13.6)\nFixed by: https://github.com/python/cpython/commit/b4ec17488eedec36d3c05fec127df71c0071f6cb (v3.11.14)\n", - "markdown": "> There is a defect in the CPython “tarfile” module affecting the “TarFile” extraction and entry enumeration APIs. The tar implementation would process tar archives with negative offsets without error, resulting in an infinite loop and deadlock during the parsing of maliciously crafted tar archives. This vulnerability can be mitigated by including the following patch after importing the “tarfile” module:  https://gist.github.com/sethmlarson/1716ac5b82b73dbcbf23ad2eff8b33e1\n\n---\n- python3.13 3.13.6-1 (bug https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1124764)\n[trixie] - python3.13 3.13.5-2+deb13u1\n- python3.12 \n- python3.11 \n[bookworm] - python3.11 3.11.2-6+deb12u7\n- python3.9 \n- python2.7 \n[bullseye] - python2.7 (EOL in bullseye LTS)\n- pypy3 7.3.21+dfsg-1 (bug https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1126758)\n[trixie] - pypy3 (Minor issue)\n[bookworm] - pypy3 (Minor issue)\n[bullseye] - pypy3 (Minor issue)\nhttps://github.com/python/cpython/issues/130577\nhttps://github.com/python/cpython/pull/137027\nhttps://mail.python.org/archives/list/security-announce@python.org/thread/ZULLF3IZ726XP5EY7XJ7YIN3K5MDYR2D/\nFixed by: https://github.com/python/cpython/commit/7040aa54f14676938970e10c5f74ea93cd56aa38 (main)\nFixed by: https://github.com/python/cpython/commit/cdae923ffe187d6ef916c0f665a31249619193fe (v3.13.6)\nFixed by: https://github.com/python/cpython/commit/b4ec17488eedec36d3c05fec127df71c0071f6cb (v3.11.14)\n\n| | |\n|----------------|----------------------------------------------------------------------------------------------|\n| Package | pkg:deb/debian/python3.11@3.11.2-6%2Bdeb12u6?os_distro=bookworm&os_name=debian&os_version=12 |\n| Affected range | <3.11.2-6+deb12u7 |\n| Fixed version | 3.11.2-6+deb12u7 |\n" - }, - "properties": { - "affected_version": "<3.11.2-6+deb12u7", - "cvssV3_severity": "HIGH", - "fixed_version": "3.11.2-6+deb12u7", - "purls": [ - "pkg:deb/debian/python3.11@3.11.2-6%2Bdeb12u6?os_distro=bookworm&os_name=debian&os_version=12" - ], - "security-severity": "7.5", - "tags": [ - "HIGH" - ] - } - }, - { - "id": "CVE-2026-0915", - "name": "OsPackageVulnerability", - "shortDescription": { - "text": "CVE-2026-0915" - }, - "helpUri": "https://scout.docker.com/v/CVE-2026-0915?s=debian&n=glibc&ns=debian&t=deb&osn=debian&osv=12&vr=%3C2.36-9%2Bdeb12u14", - "help": { - "text": "Calling getnetbyaddr or getnetbyaddr_r with a configured nsswitch.conf that specifies the library's DNS backend for networks and queries for a zero-valued network in the GNU C Library version 2.0 to version 2.42 can leak stack contents to the configured DNS resolver.\n\n---\n- glibc 2.42-8 (bug https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1125748)\n[trixie] - glibc 2.41-12+deb13u2\n[bookworm] - glibc 2.36-9+deb12u14\nhttps://sourceware.org/bugzilla/show_bug.cgi?id=33802\nhttps://www.openwall.com/lists/oss-security/2026/01/16/6\nIntroduced with: https://sourceware.org/git/?p=glibc.git;a=commit;h=5f0e6fc702296840d2daa39f83f6cb1e40073d58 (glibc-1.93)\nFixed by: https://sourceware.org/git/?p=glibc.git;a=commit;h=e56ff82d5034ec66c6a78f517af6faa427f65b0b (glibc-2.43)\n", - "markdown": "> Calling getnetbyaddr or getnetbyaddr_r with a configured nsswitch.conf that specifies the library's DNS backend for networks and queries for a zero-valued network in the GNU C Library version 2.0 to version 2.42 can leak stack contents to the configured DNS resolver.\n\n---\n- glibc 2.42-8 (bug https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1125748)\n[trixie] - glibc 2.41-12+deb13u2\n[bookworm] - glibc 2.36-9+deb12u14\nhttps://sourceware.org/bugzilla/show_bug.cgi?id=33802\nhttps://www.openwall.com/lists/oss-security/2026/01/16/6\nIntroduced with: https://sourceware.org/git/?p=glibc.git;a=commit;h=5f0e6fc702296840d2daa39f83f6cb1e40073d58 (glibc-1.93)\nFixed by: https://sourceware.org/git/?p=glibc.git;a=commit;h=e56ff82d5034ec66c6a78f517af6faa427f65b0b (glibc-2.43)\n\n| | |\n|----------------|----------------------------------------------------------------------------------------|\n| Package | pkg:deb/debian/glibc@2.36-9%2Bdeb12u13?os_distro=bookworm&os_name=debian&os_version=12 |\n| Affected range | <2.36-9+deb12u14 |\n| Fixed version | 2.36-9+deb12u14 |\n" - }, - "properties": { - "affected_version": "<2.36-9+deb12u14", - "cvssV3_severity": "HIGH", - "fixed_version": "2.36-9+deb12u14", - "purls": [ - "pkg:deb/debian/glibc@2.36-9%2Bdeb12u13?os_distro=bookworm&os_name=debian&os_version=12" - ], - "security-severity": "7.5", - "tags": [ - "HIGH" - ] - } - }, - { - "id": "CVE-2026-25679", - "name": "OsPackageVulnerability", - "shortDescription": { - "text": "CVE-2026-25679" - }, - "helpUri": "https://scout.docker.com/v/CVE-2026-25679?s=golang&n=stdlib&t=golang&vr=%3C1.25.8", - "help": { - "text": "url.Parse insufficiently validated the host/authority component and accepted some invalid URLs.\n", - "markdown": "> url.Parse insufficiently validated the host/authority component and accepted some invalid URLs.\n\n| | |\n|----------------|--------------------------|\n| Package | pkg:golang/stdlib@1.24.6 |\n| Affected range | <1.25.8 |\n| Fixed version | 1.25.8 |\n" - }, - "properties": { - "affected_version": "<1.25.8", - "cvssV3_severity": "HIGH", - "fixed_version": "1.25.8", - "purls": [ - "pkg:golang/stdlib@1.24.6" - ], - "security-severity": "7.5", - "tags": [ - "HIGH" - ] - } - }, - { - "id": "CVE-2026-32280", - "name": "OsPackageVulnerability", - "shortDescription": { - "text": "CVE-2026-32280" - }, - "helpUri": "https://scout.docker.com/v/CVE-2026-32280?s=golang&n=stdlib&t=golang&vr=%3C1.25.9", - "help": { - "text": "During chain building, the amount of work that is done is not correctly limited when a large number of intermediate certificates are passed in VerifyOptions.Intermediates, which can lead to a denial of service. This affects both direct users of crypto/x509 and users of crypto/tls.\n", - "markdown": "> During chain building, the amount of work that is done is not correctly limited when a large number of intermediate certificates are passed in VerifyOptions.Intermediates, which can lead to a denial of service. This affects both direct users of crypto/x509 and users of crypto/tls.\n\n| | |\n|----------------|--------------------------|\n| Package | pkg:golang/stdlib@1.24.6 |\n| Affected range | <1.25.9 |\n| Fixed version | 1.25.9 |\n" - }, - "properties": { - "affected_version": "<1.25.9", - "cvssV3_severity": "HIGH", - "fixed_version": "1.25.9", - "purls": [ - "pkg:golang/stdlib@1.24.6" - ], - "security-severity": "7.5", - "tags": [ - "HIGH" - ] - } - }, - { - "id": "CVE-2026-32281", - "name": "OsPackageVulnerability", - "shortDescription": { - "text": "CVE-2026-32281" - }, - "helpUri": "https://scout.docker.com/v/CVE-2026-32281?s=golang&n=stdlib&t=golang&vr=%3C1.25.9", - "help": { - "text": "Validating certificate chains which use policies is unexpectedly inefficient when certificates in the chain contain a very large number of policy mappings, possibly causing denial of service.\n\nThis only affects validation of otherwise trusted certificate chains, issued by a root CA in the VerifyOptions.Roots CertPool, or in the system certificate pool.\n", - "markdown": "> Validating certificate chains which use policies is unexpectedly inefficient when certificates in the chain contain a very large number of policy mappings, possibly causing denial of service.\n\nThis only affects validation of otherwise trusted certificate chains, issued by a root CA in the VerifyOptions.Roots CertPool, or in the system certificate pool.\n\n| | |\n|----------------|--------------------------|\n| Package | pkg:golang/stdlib@1.24.6 |\n| Affected range | <1.25.9 |\n| Fixed version | 1.25.9 |\n" - }, - "properties": { - "affected_version": "<1.25.9", - "cvssV3_severity": "HIGH", - "fixed_version": "1.25.9", - "purls": [ - "pkg:golang/stdlib@1.24.6" - ], - "security-severity": "7.5", - "tags": [ - "HIGH" - ] - } - }, - { - "id": "CVE-2026-32283", - "name": "OsPackageVulnerability", - "shortDescription": { - "text": "CVE-2026-32283" - }, - "helpUri": "https://scout.docker.com/v/CVE-2026-32283?s=golang&n=stdlib&t=golang&vr=%3C1.25.9", - "help": { - "text": "If one side of the TLS connection sends multiple key update messages post-handshake in a single record, the connection can deadlock, causing uncontrolled consumption of resources. This can lead to a denial of service.\n\nThis only affects TLS 1.3.\n", - "markdown": "> If one side of the TLS connection sends multiple key update messages post-handshake in a single record, the connection can deadlock, causing uncontrolled consumption of resources. This can lead to a denial of service.\n\nThis only affects TLS 1.3.\n\n| | |\n|----------------|--------------------------|\n| Package | pkg:golang/stdlib@1.24.6 |\n| Affected range | <1.25.9 |\n| Fixed version | 1.25.9 |\n" - }, - "properties": { - "affected_version": "<1.25.9", - "cvssV3_severity": "HIGH", - "fixed_version": "1.25.9", - "purls": [ - "pkg:golang/stdlib@1.24.6" - ], - "security-severity": "7.5", - "tags": [ - "HIGH" - ] - } - }, - { - "id": "CVE-2026-33811", - "name": "OsPackageVulnerability", - "shortDescription": { - "text": "CVE-2026-33811" - }, - "helpUri": "https://scout.docker.com/v/CVE-2026-33811?s=golang&n=stdlib&t=golang&vr=%3C1.25.10", - "help": { - "text": "When using LookupCNAME with the cgo DNS resolver, a very long CNAME response can trigger a double-free of C memory and a crash.\n", - "markdown": "> When using LookupCNAME with the cgo DNS resolver, a very long CNAME response can trigger a double-free of C memory and a crash.\n\n| | |\n|----------------|--------------------------|\n| Package | pkg:golang/stdlib@1.24.6 |\n| Affected range | <1.25.10 |\n| Fixed version | 1.25.10 |\n" - }, - "properties": { - "affected_version": "<1.25.10", - "cvssV3_severity": "HIGH", - "fixed_version": "1.25.10", - "purls": [ - "pkg:golang/stdlib@1.24.6" - ], - "security-severity": "7.5", - "tags": [ - "HIGH" - ] - } - }, - { - "id": "CVE-2026-33814", - "name": "OsPackageVulnerability", - "shortDescription": { - "text": "CVE-2026-33814" - }, - "helpUri": "https://scout.docker.com/v/CVE-2026-33814?s=golang&n=stdlib&t=golang&vr=%3C1.25.10", - "help": { - "text": "When processing HTTP/2 SETTINGS frames, transport will enter an infinite loop of writing CONTINUATION frames if it receives a SETTINGS_MAX_FRAME_SIZE with a value of 0.\n", - "markdown": "> When processing HTTP/2 SETTINGS frames, transport will enter an infinite loop of writing CONTINUATION frames if it receives a SETTINGS_MAX_FRAME_SIZE with a value of 0.\n\n| | |\n|----------------|--------------------------|\n| Package | pkg:golang/stdlib@1.24.6 |\n| Affected range | <1.25.10 |\n| Fixed version | 1.25.10 |\n" - }, - "properties": { - "affected_version": "<1.25.10", - "cvssV3_severity": "HIGH", - "fixed_version": "1.25.10", - "purls": [ - "pkg:golang/stdlib@1.24.6" - ], - "security-severity": "7.5", - "tags": [ - "HIGH" - ] - } - }, - { - "id": "CVE-2026-33845", - "name": "OsPackageVulnerability", - "shortDescription": { - "text": "CVE-2026-33845" - }, - "helpUri": "https://scout.docker.com/v/CVE-2026-33845?s=debian&n=gnutls28&ns=debian&t=deb&osn=debian&osv=12&vr=%3C3.7.9-2%2Bdeb12u7", - "help": { - "text": "A flaw in GnuTLS DTLS handshake parsing allows malformed fragments with zero length and non-zero offset, leading to an integer underflow during reassembly and resulting in an out-of-bounds read. This issue is remotely exploitable and may cause information disclosure or denial of service.\n\n---\n- gnutls28 3.8.13-1 (bug https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1135319)\nhttps://www.gnutls.org/security-new.html#GNUTLS-SA-2026-04-29-3\nhttps://gitlab.com/gnutls/gnutls/-/issues/1811\nFixed by: https://gitlab.com/gnutls/gnutls/-/commit/e5b72c53c7d789d19d1d1cd10b275e87d0415413 (3.8.13)\n", - "markdown": "> A flaw in GnuTLS DTLS handshake parsing allows malformed fragments with zero length and non-zero offset, leading to an integer underflow during reassembly and resulting in an out-of-bounds read. This issue is remotely exploitable and may cause information disclosure or denial of service.\n\n---\n- gnutls28 3.8.13-1 (bug https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1135319)\nhttps://www.gnutls.org/security-new.html#GNUTLS-SA-2026-04-29-3\nhttps://gitlab.com/gnutls/gnutls/-/issues/1811\nFixed by: https://gitlab.com/gnutls/gnutls/-/commit/e5b72c53c7d789d19d1d1cd10b275e87d0415413 (3.8.13)\n\n| | |\n|----------------|-------------------------------------------------------------------------------------------|\n| Package | pkg:deb/debian/gnutls28@3.7.9-2%2Bdeb12u6?os_distro=bookworm&os_name=debian&os_version=12 |\n| Affected range | <3.7.9-2+deb12u7 |\n| Fixed version | 3.7.9-2+deb12u7 |\n" - }, - "properties": { - "affected_version": "<3.7.9-2+deb12u7", - "cvssV3_severity": "HIGH", - "fixed_version": "3.7.9-2+deb12u7", - "purls": [ - "pkg:deb/debian/gnutls28@3.7.9-2%2Bdeb12u6?os_distro=bookworm&os_name=debian&os_version=12" - ], - "security-severity": "7.5", - "tags": [ - "HIGH" - ] - } - }, - { - "id": "CVE-2026-33846", - "name": "OsPackageVulnerability", - "shortDescription": { - "text": "CVE-2026-33846" - }, - "helpUri": "https://scout.docker.com/v/CVE-2026-33846?s=debian&n=gnutls28&ns=debian&t=deb&osn=debian&osv=12&vr=%3C3.7.9-2%2Bdeb12u7", - "help": { - "text": "A heap buffer overflow vulnerability exists in the DTLS handshake fragment reassembly logic of GnuTLS. The issue arises in merge_handshake_packet() where incoming handshake fragments are matched and merged based solely on handshake type, without validating that the message_length field remains consistent across all fragments of the same logical message. An attacker can exploit this by sending crafted DTLS fragments with conflicting message_length values, causing the implementation to allocate a buffer based on a smaller initial fragment and subsequently write beyond its bounds using larger, inconsistent fragments. Because the merge operation does not enforce proper bounds checking against the allocated buffer size, this results in an out-of-bounds write on the heap. The vulnerability is remotely exploitable without authentication via the DTLS handshake path and can lead to application crashes or potential memory corruption.\n\n---\n- gnutls28 3.8.13-1 (bug https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1135319)\nhttps://www.gnutls.org/security-new.html#GNUTLS-SA-2026-04-29-1\nhttps://gitlab.com/gnutls/gnutls/-/work_items/1816\nhttps://gitlab.com/gnutls/gnutls/-/work_items/1838\nhttps://gitlab.com/gnutls/gnutls/-/work_items/1839\nFixed by: https://gitlab.com/gnutls/gnutls/-/commit/65ab33fa54e34fba69d793735b7df3d383d1ff78 (3.8.13)\n", - "markdown": "> A heap buffer overflow vulnerability exists in the DTLS handshake fragment reassembly logic of GnuTLS. The issue arises in merge_handshake_packet() where incoming handshake fragments are matched and merged based solely on handshake type, without validating that the message_length field remains consistent across all fragments of the same logical message. An attacker can exploit this by sending crafted DTLS fragments with conflicting message_length values, causing the implementation to allocate a buffer based on a smaller initial fragment and subsequently write beyond its bounds using larger, inconsistent fragments. Because the merge operation does not enforce proper bounds checking against the allocated buffer size, this results in an out-of-bounds write on the heap. The vulnerability is remotely exploitable without authentication via the DTLS handshake path and can lead to application crashes or potential memory corruption.\n\n---\n- gnutls28 3.8.13-1 (bug https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1135319)\nhttps://www.gnutls.org/security-new.html#GNUTLS-SA-2026-04-29-1\nhttps://gitlab.com/gnutls/gnutls/-/work_items/1816\nhttps://gitlab.com/gnutls/gnutls/-/work_items/1838\nhttps://gitlab.com/gnutls/gnutls/-/work_items/1839\nFixed by: https://gitlab.com/gnutls/gnutls/-/commit/65ab33fa54e34fba69d793735b7df3d383d1ff78 (3.8.13)\n\n| | |\n|----------------|-------------------------------------------------------------------------------------------|\n| Package | pkg:deb/debian/gnutls28@3.7.9-2%2Bdeb12u6?os_distro=bookworm&os_name=debian&os_version=12 |\n| Affected range | <3.7.9-2+deb12u7 |\n| Fixed version | 3.7.9-2+deb12u7 |\n" - }, - "properties": { - "affected_version": "<3.7.9-2+deb12u7", - "cvssV3_severity": "HIGH", - "fixed_version": "3.7.9-2+deb12u7", - "purls": [ - "pkg:deb/debian/gnutls28@3.7.9-2%2Bdeb12u6?os_distro=bookworm&os_name=debian&os_version=12" - ], - "security-severity": "7.5", - "tags": [ - "HIGH" - ] - } - }, - { - "id": "CVE-2026-34180", - "name": "OsPackageVulnerability", - "shortDescription": { - "text": "CVE-2026-34180" - }, - "helpUri": "https://scout.docker.com/v/CVE-2026-34180?s=debian&n=openssl&ns=debian&t=deb&osn=debian&osv=12&vr=%3C3.0.20-1%7Edeb12u2", - "help": { - "text": "Issue summary: Parsing a crafted DER-encoded ASN.1 structure with a primitive element whose content exceeds 2 gigabytes in length may cause a heap buffer over-read on 64-bit Unix and Unix-like platforms. Impact summary: The heap buffer over-read may crash the application (Denial of Service) or to load into the decoded ASN.1 object contents of memory beyond the end of the input buffer. More typically such ASN.1 elements would instead be truncated. An integer truncation in OpenSSL's ASN.1 decoder causes the content length of an ASN.1 primitive element to be mishandled when it exceeds 2 gigabytes. In the worst case the truncated length is treated as a request to scan the binary content for a terminating zero byte, possibly causing OpenSSL to read either less than or beyond the end of the allocated buffer. Applications that pass attacker-supplied data to d2i_X509(), d2i_PKCS7(), or any other d2i_* decoding function are affected. OpenSSL's own command-line tools are not vulnerable, as data read through the BIO layer is checked before it reaches the affected code. The issue only affects 64-bit Unix and Unix-like platforms; 32-bit platforms and 64-bit Windows are not affected. The FIPS modules in 4.0, 3.6, 3.5, 3.4 and 3.0 are not affected by this issue, as the affected code is outside the OpenSSL FIPS module boundary.\n\n---\n- openssl 3.6.3-1 (bug https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1139674)\nhttps://openssl-library.org/news/secadv/20260609.txt\nFixed by: https://github.com/openssl/openssl/commit/cbe418ae978539cf14a398a207dba834c0e93e83 (openssl-3.0.21)\n", - "markdown": "> Issue summary: Parsing a crafted DER-encoded ASN.1 structure with a primitive element whose content exceeds 2 gigabytes in length may cause a heap buffer over-read on 64-bit Unix and Unix-like platforms. Impact summary: The heap buffer over-read may crash the application (Denial of Service) or to load into the decoded ASN.1 object contents of memory beyond the end of the input buffer. More typically such ASN.1 elements would instead be truncated. An integer truncation in OpenSSL's ASN.1 decoder causes the content length of an ASN.1 primitive element to be mishandled when it exceeds 2 gigabytes. In the worst case the truncated length is treated as a request to scan the binary content for a terminating zero byte, possibly causing OpenSSL to read either less than or beyond the end of the allocated buffer. Applications that pass attacker-supplied data to d2i_X509(), d2i_PKCS7(), or any other d2i_* decoding function are affected. OpenSSL's own command-line tools are not vulnerable, as data read through the BIO layer is checked before it reaches the affected code. The issue only affects 64-bit Unix and Unix-like platforms; 32-bit platforms and 64-bit Windows are not affected. The FIPS modules in 4.0, 3.6, 3.5, 3.4 and 3.0 are not affected by this issue, as the affected code is outside the OpenSSL FIPS module boundary.\n\n---\n- openssl 3.6.3-1 (bug https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1139674)\nhttps://openssl-library.org/news/secadv/20260609.txt\nFixed by: https://github.com/openssl/openssl/commit/cbe418ae978539cf14a398a207dba834c0e93e83 (openssl-3.0.21)\n\n| | |\n|----------------|-----------------------------------------------------------------------------------------|\n| Package | pkg:deb/debian/openssl@3.0.19-1~deb12u2?os_distro=bookworm&os_name=debian&os_version=12 |\n| Affected range | <3.0.20-1~deb12u2 |\n| Fixed version | 3.0.20-1~deb12u2 |\n" - }, - "properties": { - "affected_version": "<3.0.20-1~deb12u2", - "cvssV3_severity": "HIGH", - "fixed_version": "3.0.20-1~deb12u2", - "purls": [ - "pkg:deb/debian/openssl@3.0.19-1~deb12u2?os_distro=bookworm&os_name=debian&os_version=12" - ], - "security-severity": "7.5", - "tags": [ - "HIGH" - ] - } - }, - { - "id": "CVE-2026-39820", - "name": "OsPackageVulnerability", - "shortDescription": { - "text": "CVE-2026-39820" - }, - "helpUri": "https://scout.docker.com/v/CVE-2026-39820?s=golang&n=stdlib&t=golang&vr=%3C1.25.10", - "help": { - "text": "Well-crafted inputs reaching ParseAddress, ParseAddressList, and ParseDate were able to trigger excessive CPU exhaustion and memory allocations.\n", - "markdown": "> Well-crafted inputs reaching ParseAddress, ParseAddressList, and ParseDate were able to trigger excessive CPU exhaustion and memory allocations.\n\n| | |\n|----------------|--------------------------|\n| Package | pkg:golang/stdlib@1.24.6 |\n| Affected range | <1.25.10 |\n| Fixed version | 1.25.10 |\n" - }, - "properties": { - "affected_version": "<1.25.10", - "cvssV3_severity": "HIGH", - "fixed_version": "1.25.10", - "purls": [ - "pkg:golang/stdlib@1.24.6" - ], - "security-severity": "7.5", - "tags": [ - "HIGH" - ] - } - }, - { - "id": "CVE-2026-39836", - "name": "OsPackageVulnerability", - "shortDescription": { - "text": "CVE-2026-39836" - }, - "helpUri": "https://scout.docker.com/v/CVE-2026-39836?s=golang&n=stdlib&t=golang&vr=%3C1.25.10", - "help": { - "text": "The Dial and LookupPort functions panic on Windows when provided with an input containing a NUL (0).\n", - "markdown": "> The Dial and LookupPort functions panic on Windows when provided with an input containing a NUL (0).\n\n| | |\n|----------------|--------------------------|\n| Package | pkg:golang/stdlib@1.24.6 |\n| Affected range | <1.25.10 |\n| Fixed version | 1.25.10 |\n" - }, - "properties": { - "affected_version": "<1.25.10", - "cvssV3_severity": "HIGH", - "fixed_version": "1.25.10", - "purls": [ - "pkg:golang/stdlib@1.24.6" - ], - "security-severity": "7.5", - "tags": [ - "HIGH" - ] - } - }, - { - "id": "CVE-2026-4046", - "name": "OsPackageVulnerability", - "shortDescription": { - "text": "CVE-2026-4046" - }, - "helpUri": "https://scout.docker.com/v/CVE-2026-4046?s=debian&n=glibc&ns=debian&t=deb&osn=debian&osv=12&vr=%3C2.36-9%2Bdeb12u14", - "help": { - "text": "The iconv() function in the GNU C Library versions 2.43 and earlier may crash due to an assertion failure when converting inputs from the IBM1390 or IBM1399 character sets, which may be used to remotely crash an application. This vulnerability can be trivially mitigated by removing the IBM1390 and IBM1399 character sets from systems that do not need them.\n\n---\n- glibc 2.42-15 (bug https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1132499)\n[trixie] - glibc 2.41-12+deb13u3\n[bookworm] - glibc 2.36-9+deb12u14\nhttps://sourceware.org/bugzilla/show_bug.cgi?id=33980\nhttps://sourceware.org/git/?p=glibc.git;a=blob_plain;f=advisories/GLIBC-SA-2026-0007\nFixed by: https://sourceware.org/git/?p=glibc.git;a=commit;h=d6f08d1cf027f4eb2ba289a6cc66853722d4badc\n", - "markdown": "> The iconv() function in the GNU C Library versions 2.43 and earlier may crash due to an assertion failure when converting inputs from the IBM1390 or IBM1399 character sets, which may be used to remotely crash an application. This vulnerability can be trivially mitigated by removing the IBM1390 and IBM1399 character sets from systems that do not need them.\n\n---\n- glibc 2.42-15 (bug https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1132499)\n[trixie] - glibc 2.41-12+deb13u3\n[bookworm] - glibc 2.36-9+deb12u14\nhttps://sourceware.org/bugzilla/show_bug.cgi?id=33980\nhttps://sourceware.org/git/?p=glibc.git;a=blob_plain;f=advisories/GLIBC-SA-2026-0007\nFixed by: https://sourceware.org/git/?p=glibc.git;a=commit;h=d6f08d1cf027f4eb2ba289a6cc66853722d4badc\n\n| | |\n|----------------|----------------------------------------------------------------------------------------|\n| Package | pkg:deb/debian/glibc@2.36-9%2Bdeb12u13?os_distro=bookworm&os_name=debian&os_version=12 |\n| Affected range | <2.36-9+deb12u14 |\n| Fixed version | 2.36-9+deb12u14 |\n" - }, - "properties": { - "affected_version": "<2.36-9+deb12u14", - "cvssV3_severity": "HIGH", - "fixed_version": "2.36-9+deb12u14", - "purls": [ - "pkg:deb/debian/glibc@2.36-9%2Bdeb12u13?os_distro=bookworm&os_name=debian&os_version=12" - ], - "security-severity": "7.5", - "tags": [ - "HIGH" - ] - } - }, - { - "id": "CVE-2026-42009", - "name": "OsPackageVulnerability", - "shortDescription": { - "text": "CVE-2026-42009" - }, - "helpUri": "https://scout.docker.com/v/CVE-2026-42009?s=debian&n=gnutls28&ns=debian&t=deb&osn=debian&osv=12&vr=%3C3.7.9-2%2Bdeb12u7", - "help": { - "text": "A flaw was found in gnutls. A remote attacker could exploit an issue in the Datagram Transport Layer Security (DTLS) packet reordering logic. The comparator function, responsible for ordering DTLS packets by sequence numbers, did not correctly handle packets with duplicate sequence numbers. This could lead to unstable packet ordering or undefined behavior, resulting in a denial of service.\n\n---\n- gnutls28 3.8.13-1 (bug https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1135319)\nhttps://www.gnutls.org/security-new.html#GNUTLS-SA-2026-04-29-2\nhttps://gitlab.com/gnutls/gnutls/-/issues/1848\nFixed by: https://gitlab.com/gnutls/gnutls/-/commit/f01e21441e29052a6f0963840794c41d3b3ee66d (3.8.13)\nFixed by: https://gitlab.com/gnutls/gnutls/-/commit/f341441fad91142897d83b44a175ffc8f925b76f (3.8.13)\n", - "markdown": "> A flaw was found in gnutls. A remote attacker could exploit an issue in the Datagram Transport Layer Security (DTLS) packet reordering logic. The comparator function, responsible for ordering DTLS packets by sequence numbers, did not correctly handle packets with duplicate sequence numbers. This could lead to unstable packet ordering or undefined behavior, resulting in a denial of service.\n\n---\n- gnutls28 3.8.13-1 (bug https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1135319)\nhttps://www.gnutls.org/security-new.html#GNUTLS-SA-2026-04-29-2\nhttps://gitlab.com/gnutls/gnutls/-/issues/1848\nFixed by: https://gitlab.com/gnutls/gnutls/-/commit/f01e21441e29052a6f0963840794c41d3b3ee66d (3.8.13)\nFixed by: https://gitlab.com/gnutls/gnutls/-/commit/f341441fad91142897d83b44a175ffc8f925b76f (3.8.13)\n\n| | |\n|----------------|-------------------------------------------------------------------------------------------|\n| Package | pkg:deb/debian/gnutls28@3.7.9-2%2Bdeb12u6?os_distro=bookworm&os_name=debian&os_version=12 |\n| Affected range | <3.7.9-2+deb12u7 |\n| Fixed version | 3.7.9-2+deb12u7 |\n" - }, - "properties": { - "affected_version": "<3.7.9-2+deb12u7", - "cvssV3_severity": "HIGH", - "fixed_version": "3.7.9-2+deb12u7", - "purls": [ - "pkg:deb/debian/gnutls28@3.7.9-2%2Bdeb12u6?os_distro=bookworm&os_name=debian&os_version=12" - ], - "security-severity": "7.5", - "tags": [ - "HIGH" - ] - } - }, - { - "id": "CVE-2026-42499", - "name": "OsPackageVulnerability", - "shortDescription": { - "text": "CVE-2026-42499" - }, - "helpUri": "https://scout.docker.com/v/CVE-2026-42499?s=golang&n=stdlib&t=golang&vr=%3C1.25.10", - "help": { - "text": "Pathological inputs could cause DoS through consumePhrase when parsing an email address according to RFC 5322.\n", - "markdown": "> Pathological inputs could cause DoS through consumePhrase when parsing an email address according to RFC 5322.\n\n| | |\n|----------------|--------------------------|\n| Package | pkg:golang/stdlib@1.24.6 |\n| Affected range | <1.25.10 |\n| Fixed version | 1.25.10 |\n" - }, - "properties": { - "affected_version": "<1.25.10", - "cvssV3_severity": "HIGH", - "fixed_version": "1.25.10", - "purls": [ - "pkg:golang/stdlib@1.24.6" - ], - "security-severity": "7.5", - "tags": [ - "HIGH" - ] - } - }, - { - "id": "CVE-2026-42504", - "name": "OsPackageVulnerability", - "shortDescription": { - "text": "CVE-2026-42504" - }, - "helpUri": "https://scout.docker.com/v/CVE-2026-42504?s=golang&n=stdlib&t=golang&vr=%3C1.25.11", - "help": { - "text": "Decoding a maliciously-crafted MIME header containing many invalid encoded-words can consume excessive CPU.\n", - "markdown": "> Decoding a maliciously-crafted MIME header containing many invalid encoded-words can consume excessive CPU.\n\n| | |\n|----------------|--------------------------|\n| Package | pkg:golang/stdlib@1.24.6 |\n| Affected range | <1.25.11 |\n| Fixed version | 1.25.11 |\n" - }, - "properties": { - "affected_version": "<1.25.11", - "cvssV3_severity": "HIGH", - "fixed_version": "1.25.11", - "purls": [ - "pkg:golang/stdlib@1.24.6" - ], - "security-severity": "7.5", - "tags": [ - "HIGH" - ] - } - }, - { - "id": "CVE-2026-48959", - "name": "OsPackageVulnerability", - "shortDescription": { - "text": "CVE-2026-48959" - }, - "helpUri": "https://scout.docker.com/v/CVE-2026-48959?s=debian&n=perl&ns=debian&t=deb&osn=debian&osv=12&vr=%3E0", - "help": { - "text": "IO::Uncompress::Unzip versions before 2.220 for Perl allow CPU exhaustion via per-byte read loop in fastForward. fastForward() compares length $offset (the digit count of the offset, 1 to 19) against the chunk size $c instead of $offset itself, so $c shrinks from 16 KiB to 1-19 bytes per iteration. Extracting a named entry from an attacker supplied zip via IO::Uncompress::Unzip->new($zip, Name => $target) drives a per-byte read loop scaling with the entry's compressed size, up to the non-Zip64 4 GiB cap.\n\n---\n- libio-compress-perl 2.220-1 (bug https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1138051)\n[trixie] - libio-compress-perl (Minor issue)\n- perl 5.40.1-8 (bug https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1138856)\nhttps://lists.security.metacpan.org/cve-announce/msg/40434381/\nFixed by: https://github.com/pmqs/IO-Compress/commit/68db44076f4c1a86a2ffe53a958eac6cabaf72e2 (v2.220)\n", - "markdown": "> IO::Uncompress::Unzip versions before 2.220 for Perl allow CPU exhaustion via per-byte read loop in fastForward. fastForward() compares length $offset (the digit count of the offset, 1 to 19) against the chunk size $c instead of $offset itself, so $c shrinks from 16 KiB to 1-19 bytes per iteration. Extracting a named entry from an attacker supplied zip via IO::Uncompress::Unzip->new($zip, Name => $target) drives a per-byte read loop scaling with the entry's compressed size, up to the non-Zip64 4 GiB cap.\n\n---\n- libio-compress-perl 2.220-1 (bug https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1138051)\n[trixie] - libio-compress-perl (Minor issue)\n- perl 5.40.1-8 (bug https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1138856)\nhttps://lists.security.metacpan.org/cve-announce/msg/40434381/\nFixed by: https://github.com/pmqs/IO-Compress/commit/68db44076f4c1a86a2ffe53a958eac6cabaf72e2 (v2.220)\n\n| | |\n|----------------|----------------------------------------------------------------------------------------|\n| Package | pkg:deb/debian/perl@5.36.0-7%2Bdeb12u3?os_distro=bookworm&os_name=debian&os_version=12 |\n| Affected range | >0 |\n| Fixed version | not fixed |\n" - }, - "properties": { - "affected_version": ">0", - "cvssV3_severity": "HIGH", - "fixed_version": "not fixed", - "purls": [ - "pkg:deb/debian/perl@5.36.0-7%2Bdeb12u3?os_distro=bookworm&os_name=debian&os_version=12" - ], - "security-severity": "7.5", - "tags": [ - "HIGH" - ] - } - }, - { - "id": "CVE-2026-9076", - "name": "OsPackageVulnerability", - "shortDescription": { - "text": "CVE-2026-9076" - }, - "helpUri": "https://scout.docker.com/v/CVE-2026-9076?s=debian&n=openssl&ns=debian&t=deb&osn=debian&osv=12&vr=%3C3.0.20-1%7Edeb12u2", - "help": { - "text": "Issue summary: When CMS password-based decryption (RFC 3211 / PWRI key unwrap) processes attacker-supplied CMS data, an attacker-chosen stream-mode KEK cipher can trigger a heap out-of-bounds read in kek_unwrap_key(). Impact summary: A heap buffer over-read may trigger a crash which leads to Denial of Service for an application if the input buffer ends at a memory page boundary and the following page is unmapped. There is no information disclosure as the over-read bytes are not revealed to the attacker. The key unwrapping function performs a check-byte test as specified in the RFC that reads 7 bytes from a heap allocation that is based on the wrapped key length from the message. There is a minimum length check based on the block length of the wrapping cipher. However the cipher is selected from an OID carried in the attacker's PWRI keyEncryptionAlgorithm with no requirement that the cipher be a block cipher. When an attacker selects a stream-mode cipher the guard will be ineffective and the allocated buffer containing the unwrapped key can be too small to fit the check-bytes specified in the RFC and a buffer over-read can happen. Applications calling CMS_decrypt() or CMS_decrypt_set1_password() (equivalently openssl cms -decrypt -pwri_password ...) on untrusted CMS data are vulnerable to this issue. No password knowledge is required: the over-read happens during the unwrap attempt before any authentication succeeds. The over-read is limited to a few bytes and is not written to output, so there is no information disclosure. Triggering a crash requires the allocation to border unmapped memory, which is unlikely with the normal allocator. The FIPS modules are not affected by this issue.\n\n---\n- openssl 3.6.3-1 (bug https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1139674)\nhttps://openssl-library.org/news/secadv/20260609.txt\nFixed by: https://github.com/openssl/openssl/commit/eecbe330977e8d023aae1ca2d9bdbe983ef3fdc6 (openssl-3.0.21)\n", - "markdown": "> Issue summary: When CMS password-based decryption (RFC 3211 / PWRI key unwrap) processes attacker-supplied CMS data, an attacker-chosen stream-mode KEK cipher can trigger a heap out-of-bounds read in kek_unwrap_key(). Impact summary: A heap buffer over-read may trigger a crash which leads to Denial of Service for an application if the input buffer ends at a memory page boundary and the following page is unmapped. There is no information disclosure as the over-read bytes are not revealed to the attacker. The key unwrapping function performs a check-byte test as specified in the RFC that reads 7 bytes from a heap allocation that is based on the wrapped key length from the message. There is a minimum length check based on the block length of the wrapping cipher. However the cipher is selected from an OID carried in the attacker's PWRI keyEncryptionAlgorithm with no requirement that the cipher be a block cipher. When an attacker selects a stream-mode cipher the guard will be ineffective and the allocated buffer containing the unwrapped key can be too small to fit the check-bytes specified in the RFC and a buffer over-read can happen. Applications calling CMS_decrypt() or CMS_decrypt_set1_password() (equivalently openssl cms -decrypt -pwri_password ...) on untrusted CMS data are vulnerable to this issue. No password knowledge is required: the over-read happens during the unwrap attempt before any authentication succeeds. The over-read is limited to a few bytes and is not written to output, so there is no information disclosure. Triggering a crash requires the allocation to border unmapped memory, which is unlikely with the normal allocator. The FIPS modules are not affected by this issue.\n\n---\n- openssl 3.6.3-1 (bug https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1139674)\nhttps://openssl-library.org/news/secadv/20260609.txt\nFixed by: https://github.com/openssl/openssl/commit/eecbe330977e8d023aae1ca2d9bdbe983ef3fdc6 (openssl-3.0.21)\n\n| | |\n|----------------|-----------------------------------------------------------------------------------------|\n| Package | pkg:deb/debian/openssl@3.0.19-1~deb12u2?os_distro=bookworm&os_name=debian&os_version=12 |\n| Affected range | <3.0.20-1~deb12u2 |\n| Fixed version | 3.0.20-1~deb12u2 |\n" - }, - "properties": { - "affected_version": "<3.0.20-1~deb12u2", - "cvssV3_severity": "HIGH", - "fixed_version": "3.0.20-1~deb12u2", - "purls": [ - "pkg:deb/debian/openssl@3.0.19-1~deb12u2?os_distro=bookworm&os_name=debian&os_version=12" - ], - "security-severity": "7.5", - "tags": [ - "HIGH" - ] - } - }, - { - "id": "CVE-2026-7383", - "name": "OsPackageVulnerability", - "shortDescription": { - "text": "CVE-2026-7383" - }, - "helpUri": "https://scout.docker.com/v/CVE-2026-7383?s=debian&n=openssl&ns=debian&t=deb&osn=debian&osv=12&vr=%3C3.0.20-1%7Edeb12u2", - "help": { - "text": "Issue summary: A signed integer overflow when sizing the destination buffer for Unicode output in ASN1_mbstring_ncopy() can lead to a heap buffer overflow. Impact summary: A heap buffer overflow may lead to a crash or possibly attacker controlled code execution or other undefined behaviour. In ASN1_mbstring_copy() and ASN1_mbstring_ncopy() the destination size for Unicode output is computed in a signed int: by left shift of the input character count for BMPSTRING (UTF-16) and UNIVERSALSTRING (UTF-32), and by summing per-character byte counts for UTF8STRING. The calculation overflows when the input reaches around 2^30 characters. In the worst case (UNIVERSALSTRING at 2^30 characters) the size wraps to zero, OPENSSL_malloc(1) is called, and the subsequent character copy writes several gigabytes past the one-byte allocation. X.509 certificate processing routes through ASN1_STRING_set_by_NID(), whose DIRSTRING_TYPE mask excludes UNIVERSALSTRING and whose per-NID size limits cap the input length; no network protocol or certificate-handling path in OpenSSL exercises the overflow. Triggering the bug requires an application that calls ASN1_mbstring_copy() or ASN1_mbstring_ncopy() directly, or registers a custom string type via ASN1_STRING_TABLE_add(), with attacker-controlled input on the order of half a gigabyte or more. For these reasons this issue was assigned Low severity. The FIPS modules in 4.0, 3.6, 3.5, 3.4 and 3.0 are not affected by this issue, as the affected code is outside the OpenSSL FIPS module boundary.\n\n---\n- openssl 3.6.3-1 (bug https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1139674)\nhttps://openssl-library.org/news/secadv/20260609.txt\nFixed by: https://github.com/openssl/openssl/commit/bd17511070fb39a67bfa19682affb765e706a974 (openssl-3.0.21)\n", - "markdown": "> Issue summary: A signed integer overflow when sizing the destination buffer for Unicode output in ASN1_mbstring_ncopy() can lead to a heap buffer overflow. Impact summary: A heap buffer overflow may lead to a crash or possibly attacker controlled code execution or other undefined behaviour. In ASN1_mbstring_copy() and ASN1_mbstring_ncopy() the destination size for Unicode output is computed in a signed int: by left shift of the input character count for BMPSTRING (UTF-16) and UNIVERSALSTRING (UTF-32), and by summing per-character byte counts for UTF8STRING. The calculation overflows when the input reaches around 2^30 characters. In the worst case (UNIVERSALSTRING at 2^30 characters) the size wraps to zero, OPENSSL_malloc(1) is called, and the subsequent character copy writes several gigabytes past the one-byte allocation. X.509 certificate processing routes through ASN1_STRING_set_by_NID(), whose DIRSTRING_TYPE mask excludes UNIVERSALSTRING and whose per-NID size limits cap the input length; no network protocol or certificate-handling path in OpenSSL exercises the overflow. Triggering the bug requires an application that calls ASN1_mbstring_copy() or ASN1_mbstring_ncopy() directly, or registers a custom string type via ASN1_STRING_TABLE_add(), with attacker-controlled input on the order of half a gigabyte or more. For these reasons this issue was assigned Low severity. The FIPS modules in 4.0, 3.6, 3.5, 3.4 and 3.0 are not affected by this issue, as the affected code is outside the OpenSSL FIPS module boundary.\n\n---\n- openssl 3.6.3-1 (bug https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1139674)\nhttps://openssl-library.org/news/secadv/20260609.txt\nFixed by: https://github.com/openssl/openssl/commit/bd17511070fb39a67bfa19682affb765e706a974 (openssl-3.0.21)\n\n| | |\n|----------------|-----------------------------------------------------------------------------------------|\n| Package | pkg:deb/debian/openssl@3.0.19-1~deb12u2?os_distro=bookworm&os_name=debian&os_version=12 |\n| Affected range | <3.0.20-1~deb12u2 |\n| Fixed version | 3.0.20-1~deb12u2 |\n" - }, - "properties": { - "affected_version": "<3.0.20-1~deb12u2", - "cvssV3_severity": "HIGH", - "fixed_version": "3.0.20-1~deb12u2", - "purls": [ - "pkg:deb/debian/openssl@3.0.19-1~deb12u2?os_distro=bookworm&os_name=debian&os_version=12" - ], - "security-severity": "8.1", - "tags": [ - "HIGH" - ] - } - }, - { - "id": "CVE-2025-6297", - "name": "OsPackageVulnerability", - "shortDescription": { - "text": "CVE-2025-6297" - }, - "helpUri": "https://scout.docker.com/v/CVE-2025-6297?s=debian&n=dpkg&ns=debian&t=deb&osn=debian&osv=12&vr=%3C1.21.23", - "help": { - "text": "It was discovered that dpkg-deb does not properly sanitize directory permissions when extracting a control member into a temporary directory, which is documented as being a safe operation even on untrusted data. This may result in leaving temporary files behind on cleanup. Given automated and repeated execution of dpkg-deb commands on adversarial .deb packages or with well compressible files, placed inside a directory with permissions not allowing removal by a non-root user, this can end up in a DoS scenario due to causing disk quota exhaustion or disk full conditions.\n\n---\n- dpkg 1.22.21\n[bookworm] - dpkg 1.21.23\nFixed by: https://git.dpkg.org/cgit/dpkg/dpkg.git/commit/?id=ed6bbd445dd8800308c67236ba35d08004c98e82 (main)\nFixed by: https://git.dpkg.org/cgit/dpkg/dpkg.git/commit/?id=98c623c8d6814ae46a3b30ca22e584c77d47d86b (1.22.21)\n", - "markdown": "> It was discovered that dpkg-deb does not properly sanitize directory permissions when extracting a control member into a temporary directory, which is documented as being a safe operation even on untrusted data. This may result in leaving temporary files behind on cleanup. Given automated and repeated execution of dpkg-deb commands on adversarial .deb packages or with well compressible files, placed inside a directory with permissions not allowing removal by a non-root user, this can end up in a DoS scenario due to causing disk quota exhaustion or disk full conditions.\n\n---\n- dpkg 1.22.21\n[bookworm] - dpkg 1.21.23\nFixed by: https://git.dpkg.org/cgit/dpkg/dpkg.git/commit/?id=ed6bbd445dd8800308c67236ba35d08004c98e82 (main)\nFixed by: https://git.dpkg.org/cgit/dpkg/dpkg.git/commit/?id=98c623c8d6814ae46a3b30ca22e584c77d47d86b (1.22.21)\n\n| | |\n|----------------|-----------------------------------------------------------------------------|\n| Package | pkg:deb/debian/dpkg@1.21.22?os_distro=bookworm&os_name=debian&os_version=12 |\n| Affected range | <1.21.23 |\n| Fixed version | 1.21.23 |\n" - }, - "properties": { - "affected_version": "<1.21.23", - "cvssV3_severity": "HIGH", - "fixed_version": "1.21.23", - "purls": [ - "pkg:deb/debian/dpkg@1.21.22?os_distro=bookworm&os_name=debian&os_version=12" - ], - "security-severity": "8.2", - "tags": [ - "HIGH" - ] - } - }, - { - "id": "CVE-2026-42013", - "name": "OsPackageVulnerability", - "shortDescription": { - "text": "CVE-2026-42013" - }, - "helpUri": "https://scout.docker.com/v/CVE-2026-42013?s=debian&n=gnutls28&ns=debian&t=deb&osn=debian&osv=12&vr=%3C3.7.9-2%2Bdeb12u7", - "help": { - "text": "A flaw was found in gnutls. When validating certificates, an oversized Subject Alternative Name (SAN) could cause the validation process to incorrectly fall back to checking the Common Name (CN) field. This could allow a remote attacker to bypass proper certificate validation, potentially leading to spoofing or man-in-the-middle attacks.\n\n---\n- gnutls28 3.8.13-1 (bug https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1135319)\nhttps://www.gnutls.org/security-new.html#GNUTLS-SA-2026-04-29-8\nhttps://gitlab.com/gnutls/gnutls/-/work_items/1825\nhttps://gitlab.com/gnutls/gnutls/-/issues/1849\nFixed by: https://gitlab.com/gnutls/gnutls/-/commit/29801bef00ecc0f23c0bac4cd333b269cd2c1af4 (3.8.13)\n", - "markdown": "> A flaw was found in gnutls. When validating certificates, an oversized Subject Alternative Name (SAN) could cause the validation process to incorrectly fall back to checking the Common Name (CN) field. This could allow a remote attacker to bypass proper certificate validation, potentially leading to spoofing or man-in-the-middle attacks.\n\n---\n- gnutls28 3.8.13-1 (bug https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1135319)\nhttps://www.gnutls.org/security-new.html#GNUTLS-SA-2026-04-29-8\nhttps://gitlab.com/gnutls/gnutls/-/work_items/1825\nhttps://gitlab.com/gnutls/gnutls/-/issues/1849\nFixed by: https://gitlab.com/gnutls/gnutls/-/commit/29801bef00ecc0f23c0bac4cd333b269cd2c1af4 (3.8.13)\n\n| | |\n|----------------|-------------------------------------------------------------------------------------------|\n| Package | pkg:deb/debian/gnutls28@3.7.9-2%2Bdeb12u6?os_distro=bookworm&os_name=debian&os_version=12 |\n| Affected range | <3.7.9-2+deb12u7 |\n| Fixed version | 3.7.9-2+deb12u7 |\n" - }, - "properties": { - "affected_version": "<3.7.9-2+deb12u7", - "cvssV3_severity": "HIGH", - "fixed_version": "3.7.9-2+deb12u7", - "purls": [ - "pkg:deb/debian/gnutls28@3.7.9-2%2Bdeb12u6?os_distro=bookworm&os_name=debian&os_version=12" - ], - "security-severity": "8.2", - "tags": [ - "HIGH" - ] - } - }, - { - "id": "CVE-2026-5260", - "name": "OsPackageVulnerability", - "shortDescription": { - "text": "CVE-2026-5260" - }, - "helpUri": "https://scout.docker.com/v/CVE-2026-5260?s=debian&n=gnutls28&ns=debian&t=deb&osn=debian&osv=12&vr=%3C3.7.9-2%2Bdeb12u7", - "help": { - "text": "A flaw was found in libgnutls. A remote attacker, by sending an extremely short premaster secret during an RSA key exchange to a server using an RSA key backed by a PKCS#11 token, could trigger a short heap overread. This memory corruption vulnerability could lead to information disclosure.\n\n---\n- gnutls28 3.8.13-1 (bug https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1135319)\nhttps://www.gnutls.org/security-new.html#GNUTLS-SA-2026-04-29-10\nhttps://gitlab.com/gnutls/gnutls/-/issues/1814\nFixed by: https://gitlab.com/gnutls/gnutls/-/commit/77228f2d1ac207d2f894e5a168fbb47e5378e42f (3.8.13)\nFixed by: https://gitlab.com/gnutls/gnutls/-/commit/cf6bdc5e4df49e5583d3fb4d2296779785f10683 (3.8.13)\nIntroduced with: https://gitlab.com/gnutls/gnutls/-/commit/4804febddc2ed958e5ae774de2a8f85edeeff538 (gnutls_3_6_5)\n", - "markdown": "> A flaw was found in libgnutls. A remote attacker, by sending an extremely short premaster secret during an RSA key exchange to a server using an RSA key backed by a PKCS#11 token, could trigger a short heap overread. This memory corruption vulnerability could lead to information disclosure.\n\n---\n- gnutls28 3.8.13-1 (bug https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1135319)\nhttps://www.gnutls.org/security-new.html#GNUTLS-SA-2026-04-29-10\nhttps://gitlab.com/gnutls/gnutls/-/issues/1814\nFixed by: https://gitlab.com/gnutls/gnutls/-/commit/77228f2d1ac207d2f894e5a168fbb47e5378e42f (3.8.13)\nFixed by: https://gitlab.com/gnutls/gnutls/-/commit/cf6bdc5e4df49e5583d3fb4d2296779785f10683 (3.8.13)\nIntroduced with: https://gitlab.com/gnutls/gnutls/-/commit/4804febddc2ed958e5ae774de2a8f85edeeff538 (gnutls_3_6_5)\n\n| | |\n|----------------|-------------------------------------------------------------------------------------------|\n| Package | pkg:deb/debian/gnutls28@3.7.9-2%2Bdeb12u6?os_distro=bookworm&os_name=debian&os_version=12 |\n| Affected range | <3.7.9-2+deb12u7 |\n| Fixed version | 3.7.9-2+deb12u7 |\n" - }, - "properties": { - "affected_version": "<3.7.9-2+deb12u7", - "cvssV3_severity": "HIGH", - "fixed_version": "3.7.9-2+deb12u7", - "purls": [ - "pkg:deb/debian/gnutls28@3.7.9-2%2Bdeb12u6?os_distro=bookworm&os_name=debian&os_version=12" - ], - "security-severity": "8.2", - "tags": [ - "HIGH" - ] - } - }, - { - "id": "CVE-2026-0861", - "name": "OsPackageVulnerability", - "shortDescription": { - "text": "CVE-2026-0861" - }, - "helpUri": "https://scout.docker.com/v/CVE-2026-0861?s=debian&n=glibc&ns=debian&t=deb&osn=debian&osv=12&vr=%3C2.36-9%2Bdeb12u14", - "help": { - "text": "Passing too large an alignment to the memalign suite of functions (memalign, posix_memalign, aligned_alloc) in the GNU C Library version 2.30 to 2.42 may result in an integer overflow, which could consequently result in a heap corruption. Note that the attacker must have control over both, the size as well as the alignment arguments of the memalign function to be able to exploit this. The size parameter must be close enough to PTRDIFF_MAX so as to overflow size_t along with the large alignment argument. This limits the malicious inputs for the alignment for memalign to the range [1<<62+ 1, 1<<63] and exactly 1<<63 for posix_memalign and aligned_alloc. Typically the alignment argument passed to such functions is a known constrained quantity (e.g. page size, block size, struct sizes) and is not attacker controlled, because of which this may not be easily exploitable in practice. An application bug could potentially result in the input alignment being too large, e.g. due to a different buffer overflow or integer overflow in the application or its dependent libraries, but that is again an uncommon usage pattern given typical sources of alignments.\n\n---\n- glibc 2.42-8 (bug https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1125678)\n[trixie] - glibc 2.41-12+deb13u2\n[bookworm] - glibc 2.36-9+deb12u14\nhttps://sourceware.org/bugzilla/show_bug.cgi?id=33796\nhttps://www.openwall.com/lists/oss-security/2026/01/16/5\nIntroduced with: https://sourceware.org/git/?p=glibc.git;a=commit;h=9bf8e29ca136094f73f69f725f15c51facc97206 (glibc-2.30)\nFixed by: https://sourceware.org/git/?p=glibc.git;a=commit;h=c9188d333717d3ceb7e3020011651f424f749f93 (glibc-2.43)\n", - "markdown": "> Passing too large an alignment to the memalign suite of functions (memalign, posix_memalign, aligned_alloc) in the GNU C Library version 2.30 to 2.42 may result in an integer overflow, which could consequently result in a heap corruption. Note that the attacker must have control over both, the size as well as the alignment arguments of the memalign function to be able to exploit this. The size parameter must be close enough to PTRDIFF_MAX so as to overflow size_t along with the large alignment argument. This limits the malicious inputs for the alignment for memalign to the range [1<<62+ 1, 1<<63] and exactly 1<<63 for posix_memalign and aligned_alloc. Typically the alignment argument passed to such functions is a known constrained quantity (e.g. page size, block size, struct sizes) and is not attacker controlled, because of which this may not be easily exploitable in practice. An application bug could potentially result in the input alignment being too large, e.g. due to a different buffer overflow or integer overflow in the application or its dependent libraries, but that is again an uncommon usage pattern given typical sources of alignments.\n\n---\n- glibc 2.42-8 (bug https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1125678)\n[trixie] - glibc 2.41-12+deb13u2\n[bookworm] - glibc 2.36-9+deb12u14\nhttps://sourceware.org/bugzilla/show_bug.cgi?id=33796\nhttps://www.openwall.com/lists/oss-security/2026/01/16/5\nIntroduced with: https://sourceware.org/git/?p=glibc.git;a=commit;h=9bf8e29ca136094f73f69f725f15c51facc97206 (glibc-2.30)\nFixed by: https://sourceware.org/git/?p=glibc.git;a=commit;h=c9188d333717d3ceb7e3020011651f424f749f93 (glibc-2.43)\n\n| | |\n|----------------|----------------------------------------------------------------------------------------|\n| Package | pkg:deb/debian/glibc@2.36-9%2Bdeb12u13?os_distro=bookworm&os_name=debian&os_version=12 |\n| Affected range | <2.36-9+deb12u14 |\n| Fixed version | 2.36-9+deb12u14 |\n" - }, - "properties": { - "affected_version": "<2.36-9+deb12u14", - "cvssV3_severity": "HIGH", - "fixed_version": "2.36-9+deb12u14", - "purls": [ - "pkg:deb/debian/glibc@2.36-9%2Bdeb12u13?os_distro=bookworm&os_name=debian&os_version=12" - ], - "security-severity": "8.4", - "tags": [ - "HIGH" - ] - } - }, - { - "id": "CVE-2026-45447", - "name": "OsPackageVulnerability", - "shortDescription": { - "text": "CVE-2026-45447" - }, - "helpUri": "https://scout.docker.com/v/CVE-2026-45447?s=debian&n=openssl&ns=debian&t=deb&osn=debian&osv=12&vr=%3C3.0.20-1%7Edeb12u2", - "help": { - "text": "Issue summary: A specially crafted PKCS#7 or S/MIME signed message could trigger a use-after-free during PKCS#7 signature verification. Impact summary: A use-after-free may result in process crashes, heap corruption, or potentially remote code execution. When processing a PKCS#7 or S/MIME signed message, if the SignedData digestAlgorithms field is present as an empty ASN.1 SET, OpenSSL may incorrectly free a caller-owned BIO during PKCS7_verify(). A subsequent use of the BIO by the calling application results in a use-after-free condition. In the common case this occurs when the application later calls BIO_free() on the BIO originally passed to PKCS7_verify(). Depending on allocator behavior and application-specific BIO usage patterns, this may result in a crash or other memory corruption. In some application contexts this may potentially be exploitable for remote code execution. Applications that process PKCS#7 or S/MIME signed messages using OpenSSL PKCS#7 APIs may be affected. Applications using the CMS APIs for this processing are not affected. The FIPS modules in 4.0, 3.6, 3.5, 3.4, and 3.0 are not affected by this issue, as the affected code is outside the OpenSSL FIPS module boundary.\n\n---\n- openssl 3.6.3-1 (bug https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1139674)\nhttps://openssl-library.org/news/secadv/20260609.txt\nFixed by: https://github.com/openssl/openssl/commit/9dfd688ad2290fc5075cacbc9bf0c9a93eefed54 (openssl-3.0.21)\nFixed by: https://github.com/openssl/openssl/commit/18de9aba8294b5fb0915866cf3a1bb45f9599b8d (openssl-3.0.21)\n", - "markdown": "> Issue summary: A specially crafted PKCS#7 or S/MIME signed message could trigger a use-after-free during PKCS#7 signature verification. Impact summary: A use-after-free may result in process crashes, heap corruption, or potentially remote code execution. When processing a PKCS#7 or S/MIME signed message, if the SignedData digestAlgorithms field is present as an empty ASN.1 SET, OpenSSL may incorrectly free a caller-owned BIO during PKCS7_verify(). A subsequent use of the BIO by the calling application results in a use-after-free condition. In the common case this occurs when the application later calls BIO_free() on the BIO originally passed to PKCS7_verify(). Depending on allocator behavior and application-specific BIO usage patterns, this may result in a crash or other memory corruption. In some application contexts this may potentially be exploitable for remote code execution. Applications that process PKCS#7 or S/MIME signed messages using OpenSSL PKCS#7 APIs may be affected. Applications using the CMS APIs for this processing are not affected. The FIPS modules in 4.0, 3.6, 3.5, 3.4, and 3.0 are not affected by this issue, as the affected code is outside the OpenSSL FIPS module boundary.\n\n---\n- openssl 3.6.3-1 (bug https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1139674)\nhttps://openssl-library.org/news/secadv/20260609.txt\nFixed by: https://github.com/openssl/openssl/commit/9dfd688ad2290fc5075cacbc9bf0c9a93eefed54 (openssl-3.0.21)\nFixed by: https://github.com/openssl/openssl/commit/18de9aba8294b5fb0915866cf3a1bb45f9599b8d (openssl-3.0.21)\n\n| | |\n|----------------|-----------------------------------------------------------------------------------------|\n| Package | pkg:deb/debian/openssl@3.0.19-1~deb12u2?os_distro=bookworm&os_name=debian&os_version=12 |\n| Affected range | <3.0.20-1~deb12u2 |\n| Fixed version | 3.0.20-1~deb12u2 |\n" - }, - "properties": { - "affected_version": "<3.0.20-1~deb12u2", - "cvssV3_severity": "HIGH", - "fixed_version": "3.0.20-1~deb12u2", - "purls": [ - "pkg:deb/debian/openssl@3.0.19-1~deb12u2?os_distro=bookworm&os_name=debian&os_version=12" - ], - "security-severity": "8.8", - "tags": [ - "HIGH" - ] - } - }, - { - "id": "CVE-2026-12087", - "name": "OsPackageVulnerability", - "shortDescription": { - "text": "CVE-2026-12087" - }, - "helpUri": "https://scout.docker.com/v/CVE-2026-12087?s=debian&n=perl&ns=debian&t=deb&osn=debian&osv=12&vr=%3E0", - "help": { - "text": "Socket versions before 2.041 for Perl have an out-of-bounds heap read. In Socket.xs, pack_ip_mreq_source() checks the length of its source argument before the argument is read, so the check tests the byte length carried over from the preceding multiaddr argument instead. Both addresses occupy a 4-byte field, so a valid multiaddr lets a source of any length pass the check, and the source is then copied into the 4-byte imr_sourceaddr field with a fixed-size copy. A source shorter than 4 bytes is not rejected, and the copy reads up to 3 bytes past the end of its buffer. Calling pack_ip_mreq_source() with a source value shorter than 4 bytes copies adjacent heap memory into the returned packed structure.\n\n---\n- libsocket-perl 2.041-1\n[trixie] - libsocket-perl (Minor issue)\n- perl (bug https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1140152)\nhttps://lists.security.metacpan.org/cve-announce/msg/41020451/\nFixed by: https://github.com/Perl/perl5/commit/de19a0b0ad1900fef976c5c1400bd8f11ec6c6cb (v5.43.11)\n", - "markdown": "> Socket versions before 2.041 for Perl have an out-of-bounds heap read. In Socket.xs, pack_ip_mreq_source() checks the length of its source argument before the argument is read, so the check tests the byte length carried over from the preceding multiaddr argument instead. Both addresses occupy a 4-byte field, so a valid multiaddr lets a source of any length pass the check, and the source is then copied into the 4-byte imr_sourceaddr field with a fixed-size copy. A source shorter than 4 bytes is not rejected, and the copy reads up to 3 bytes past the end of its buffer. Calling pack_ip_mreq_source() with a source value shorter than 4 bytes copies adjacent heap memory into the returned packed structure.\n\n---\n- libsocket-perl 2.041-1\n[trixie] - libsocket-perl (Minor issue)\n- perl (bug https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1140152)\nhttps://lists.security.metacpan.org/cve-announce/msg/41020451/\nFixed by: https://github.com/Perl/perl5/commit/de19a0b0ad1900fef976c5c1400bd8f11ec6c6cb (v5.43.11)\n\n| | |\n|----------------|----------------------------------------------------------------------------------------|\n| Package | pkg:deb/debian/perl@5.36.0-7%2Bdeb12u3?os_distro=bookworm&os_name=debian&os_version=12 |\n| Affected range | >0 |\n| Fixed version | not fixed |\n" - }, - "properties": { - "affected_version": ">0", - "cvssV3_severity": "CRITICAL", - "fixed_version": "not fixed", - "purls": [ - "pkg:deb/debian/perl@5.36.0-7%2Bdeb12u3?os_distro=bookworm&os_name=debian&os_version=12" - ], - "security-severity": "9.1", - "tags": [ - "CRITICAL" - ] - } - }, - { - "id": "CVE-2025-68121", - "name": "OsPackageVulnerability", - "shortDescription": { - "text": "CVE-2025-68121" - }, - "helpUri": "https://scout.docker.com/v/CVE-2025-68121?s=golang&n=stdlib&t=golang&vr=%3C1.24.13", - "help": { - "text": "During session resumption in crypto/tls, if the underlying Config has its ClientCAs or RootCAs fields mutated between the initial handshake and the resumed handshake, the resumed handshake may succeed when it should have failed. This may happen when a user calls Config.Clone and mutates the returned Config, or uses Config.GetConfigForClient. This can cause a client to resume a session with a server that it would not have resumed with during the initial handshake, or cause a server to resume a session with a client that it would not have resumed with during the initial handshake.\n", - "markdown": "> During session resumption in crypto/tls, if the underlying Config has its ClientCAs or RootCAs fields mutated between the initial handshake and the resumed handshake, the resumed handshake may succeed when it should have failed. This may happen when a user calls Config.Clone and mutates the returned Config, or uses Config.GetConfigForClient. This can cause a client to resume a session with a server that it would not have resumed with during the initial handshake, or cause a server to resume a session with a client that it would not have resumed with during the initial handshake.\n\n| | |\n|----------------|--------------------------|\n| Package | pkg:golang/stdlib@1.24.6 |\n| Affected range | <1.24.13 |\n| Fixed version | 1.24.13 |\n" - }, - "properties": { - "affected_version": "<1.24.13", - "cvssV3_severity": "CRITICAL", - "fixed_version": "1.24.13", - "purls": [ - "pkg:golang/stdlib@1.24.6" - ], - "security-severity": "10.0", - "tags": [ - "CRITICAL" - ] - } - } - ], - "version": "1.18.3" - } - }, - "results": [ - { - "ruleId": "CVE-2026-42010", - "ruleIndex": 0, - "kind": "fail", - "level": "error", - "message": { - "text": " Vulnerability : CVE-2026-42010 \n Severity : HIGH \n Package : pkg:deb/debian/gnutls28@3.7.9-2%2Bdeb12u6?os_distro=bookworm&os_name=debian&os_version=12 \n Affected range : <3.7.9-2+deb12u7 \n Fixed version : 3.7.9-2+deb12u7 \n EPSS Score : 0.010500 \n EPSS Percentile : 0.602280 \n" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "/usr/share/doc/libgnutls30/copyright" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/status" - } - } - } - ] - }, - { - "ruleId": "CVE-2026-42012", - "ruleIndex": 1, - "kind": "fail", - "level": "error", - "message": { - "text": " Vulnerability : CVE-2026-42012 \n Severity : HIGH \n Package : pkg:deb/debian/gnutls28@3.7.9-2%2Bdeb12u6?os_distro=bookworm&os_name=debian&os_version=12 \n Affected range : <3.7.9-2+deb12u7 \n Fixed version : 3.7.9-2+deb12u7 \n EPSS Score : 0.003540 \n EPSS Percentile : 0.274550 \n" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "/usr/share/doc/libgnutls30/copyright" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/status" - } - } - } - ] - }, - { - "ruleId": "CVE-2026-48962", - "ruleIndex": 2, - "kind": "fail", - "level": "error", - "message": { - "text": " Vulnerability : CVE-2026-48962 \n Severity : HIGH \n Package : pkg:deb/debian/perl@5.36.0-7%2Bdeb12u3?os_distro=bookworm&os_name=debian&os_version=12 \n Affected range : >0 \n Fixed version : not fixed \n EPSS Score : 0.002920 \n EPSS Percentile : 0.209720 \n" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "/usr/share/doc/libperl5.36/copyright" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/usr/share/doc/perl-base/copyright" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/usr/share/doc/perl-modules-5.36/copyright" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/usr/share/doc/perl/copyright" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/perl-base.list" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/perl-base.md5sums" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/perl-base.postinst" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/perl-base.postrm" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/perl-base.preinst" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/perl-base.prerm" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/perl-modules-5.36.list" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/perl-modules-5.36.md5sums" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/perl.conffiles" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/perl.list" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/perl.md5sums" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/perl.postinst" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/perl.postrm" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/perl.preinst" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/perl.prerm" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/status" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/etc/perl/Net/libnet.cfg" - } - } - } - ] - }, - { - "ruleId": "CVE-2026-42011", - "ruleIndex": 3, - "kind": "fail", - "level": "error", - "message": { - "text": " Vulnerability : CVE-2026-42011 \n Severity : HIGH \n Package : pkg:deb/debian/gnutls28@3.7.9-2%2Bdeb12u6?os_distro=bookworm&os_name=debian&os_version=12 \n Affected range : <3.7.9-2+deb12u7 \n Fixed version : 3.7.9-2+deb12u7 \n EPSS Score : 0.004750 \n EPSS Percentile : 0.377510 \n" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "/usr/share/doc/libgnutls30/copyright" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/status" - } - } - } - ] - }, - { - "ruleId": "CVE-2025-15281", - "ruleIndex": 4, - "kind": "fail", - "level": "error", - "message": { - "text": " Vulnerability : CVE-2025-15281 \n Severity : HIGH \n Package : pkg:deb/debian/glibc@2.36-9%2Bdeb12u13?os_distro=bookworm&os_name=debian&os_version=12 \n Affected range : <2.36-9+deb12u14 \n Fixed version : 2.36-9+deb12u14 \n EPSS Score : 0.002860 \n EPSS Percentile : 0.204610 \n" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "/usr/share/doc/libc-bin/copyright" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/usr/share/doc/libc-l10n/copyright" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/usr/share/doc/libc6/copyright" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/usr/share/doc/locales/copyright" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/libc-bin.conffiles" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/libc-bin.list" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/libc-bin.md5sums" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/libc-bin.postinst" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/libc-bin.triggers" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/libc-l10n.list" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/libc-l10n.md5sums" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/locales.conffiles" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/locales.config" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/locales.list" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/locales.md5sums" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/locales.postinst" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/locales.postrm" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/locales.prerm" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/locales.templates" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/status" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/etc/bindresvport.blacklist" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/etc/default/nss" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/etc/gai.conf" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/etc/ld.so.conf" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/etc/ld.so.conf.d/libc.conf" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/etc/ld.so.conf.d/x86_64-linux-gnu.conf" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/etc/locale.alias" - } - } - } - ] - }, - { - "ruleId": "CVE-2025-58187", - "ruleIndex": 5, - "kind": "fail", - "level": "error", - "message": { - "text": " Vulnerability : CVE-2025-58187 \n Severity : HIGH \n Package : pkg:golang/stdlib@1.24.6 \n Affected range : <1.24.9 \n Fixed version : 1.24.9 \n EPSS Score : 0.003840 \n EPSS Percentile : 0.304870 \n" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "/usr/local/bin/gosu" - } - } - } - ] - }, - { - "ruleId": "CVE-2025-58188", - "ruleIndex": 6, - "kind": "fail", - "level": "error", - "message": { - "text": " Vulnerability : CVE-2025-58188 \n Severity : HIGH \n Package : pkg:golang/stdlib@1.24.6 \n Affected range : <1.24.8 \n Fixed version : 1.24.8 \n EPSS Score : 0.003610 \n EPSS Percentile : 0.282020 \n" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "/usr/local/bin/gosu" - } - } - } - ] - }, - { - "ruleId": "CVE-2025-61723", - "ruleIndex": 7, - "kind": "fail", - "level": "error", - "message": { - "text": " Vulnerability : CVE-2025-61723 \n Severity : HIGH \n Package : pkg:golang/stdlib@1.24.6 \n Affected range : <1.24.8 \n Fixed version : 1.24.8 \n EPSS Score : 0.006260 \n EPSS Percentile : 0.457500 \n" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "/usr/local/bin/gosu" - } - } - } - ] - }, - { - "ruleId": "CVE-2025-61725", - "ruleIndex": 8, - "kind": "fail", - "level": "error", - "message": { - "text": " Vulnerability : CVE-2025-61725 \n Severity : HIGH \n Package : pkg:golang/stdlib@1.24.6 \n Affected range : <1.24.8 \n Fixed version : 1.24.8 \n EPSS Score : 0.006130 \n EPSS Percentile : 0.451170 \n" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "/usr/local/bin/gosu" - } - } - } - ] - }, - { - "ruleId": "CVE-2025-61726", - "ruleIndex": 9, - "kind": "fail", - "level": "error", - "message": { - "text": " Vulnerability : CVE-2025-61726 \n Severity : HIGH \n Package : pkg:golang/stdlib@1.24.6 \n Affected range : <1.24.12 \n Fixed version : 1.24.12 \n EPSS Score : 0.019450 \n EPSS Percentile : 0.777810 \n" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "/usr/local/bin/gosu" - } - } - } - ] - }, - { - "ruleId": "CVE-2025-61729", - "ruleIndex": 10, - "kind": "fail", - "level": "error", - "message": { - "text": " Vulnerability : CVE-2025-61729 \n Severity : HIGH \n Package : pkg:golang/stdlib@1.24.6 \n Affected range : <1.24.11 \n Fixed version : 1.24.11 \n EPSS Score : 0.004590 \n EPSS Percentile : 0.367000 \n" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "/usr/local/bin/gosu" - } - } - } - ] - }, - { - "ruleId": "CVE-2025-8194", - "ruleIndex": 11, - "kind": "fail", - "level": "error", - "message": { - "text": " Vulnerability : CVE-2025-8194 \n Severity : HIGH \n Package : pkg:deb/debian/python3.11@3.11.2-6%2Bdeb12u6?os_distro=bookworm&os_name=debian&os_version=12 \n Affected range : <3.11.2-6+deb12u7 \n Fixed version : 3.11.2-6+deb12u7 \n EPSS Score : 0.006110 \n EPSS Percentile : 0.450400 \n" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/python3.11-minimal.list" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/python3.11-minimal.postrm" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/status" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/etc/python3.11/sitecustomize.py" - } - } - } - ] - }, - { - "ruleId": "CVE-2026-0915", - "ruleIndex": 12, - "kind": "fail", - "level": "error", - "message": { - "text": " Vulnerability : CVE-2026-0915 \n Severity : HIGH \n Package : pkg:deb/debian/glibc@2.36-9%2Bdeb12u13?os_distro=bookworm&os_name=debian&os_version=12 \n Affected range : <2.36-9+deb12u14 \n Fixed version : 2.36-9+deb12u14 \n EPSS Score : 0.005640 \n EPSS Percentile : 0.428420 \n" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "/usr/share/doc/libc-bin/copyright" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/usr/share/doc/libc-l10n/copyright" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/usr/share/doc/libc6/copyright" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/usr/share/doc/locales/copyright" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/libc-bin.conffiles" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/libc-bin.list" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/libc-bin.md5sums" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/libc-bin.postinst" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/libc-bin.triggers" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/libc-l10n.list" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/libc-l10n.md5sums" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/locales.conffiles" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/locales.config" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/locales.list" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/locales.md5sums" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/locales.postinst" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/locales.postrm" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/locales.prerm" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/locales.templates" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/status" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/etc/bindresvport.blacklist" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/etc/default/nss" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/etc/gai.conf" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/etc/ld.so.conf" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/etc/ld.so.conf.d/libc.conf" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/etc/ld.so.conf.d/x86_64-linux-gnu.conf" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/etc/locale.alias" - } - } - } - ] - }, - { - "ruleId": "CVE-2026-25679", - "ruleIndex": 13, - "kind": "fail", - "level": "error", - "message": { - "text": " Vulnerability : CVE-2026-25679 \n Severity : HIGH \n Package : pkg:golang/stdlib@1.24.6 \n Affected range : <1.25.8 \n Fixed version : 1.25.8 \n EPSS Score : 0.007280 \n EPSS Percentile : 0.498210 \n" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "/usr/local/bin/gosu" - } - } - } - ] - }, - { - "ruleId": "CVE-2026-32280", - "ruleIndex": 14, - "kind": "fail", - "level": "error", - "message": { - "text": " Vulnerability : CVE-2026-32280 \n Severity : HIGH \n Package : pkg:golang/stdlib@1.24.6 \n Affected range : <1.25.9 \n Fixed version : 1.25.9 \n EPSS Score : 0.006150 \n EPSS Percentile : 0.452240 \n" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "/usr/local/bin/gosu" - } - } - } - ] - }, - { - "ruleId": "CVE-2026-32281", - "ruleIndex": 15, - "kind": "fail", - "level": "error", - "message": { - "text": " Vulnerability : CVE-2026-32281 \n Severity : HIGH \n Package : pkg:golang/stdlib@1.24.6 \n Affected range : <1.25.9 \n Fixed version : 1.25.9 \n EPSS Score : 0.003490 \n EPSS Percentile : 0.269600 \n" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "/usr/local/bin/gosu" - } - } - } - ] - }, - { - "ruleId": "CVE-2026-32283", - "ruleIndex": 16, - "kind": "fail", - "level": "error", - "message": { - "text": " Vulnerability : CVE-2026-32283 \n Severity : HIGH \n Package : pkg:golang/stdlib@1.24.6 \n Affected range : <1.25.9 \n Fixed version : 1.25.9 \n EPSS Score : 0.006210 \n EPSS Percentile : 0.455450 \n" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "/usr/local/bin/gosu" - } - } - } - ] - }, - { - "ruleId": "CVE-2026-33811", - "ruleIndex": 17, - "kind": "fail", - "level": "error", - "message": { - "text": " Vulnerability : CVE-2026-33811 \n Severity : HIGH \n Package : pkg:golang/stdlib@1.24.6 \n Affected range : <1.25.10 \n Fixed version : 1.25.10 \n EPSS Score : 0.008130 \n EPSS Percentile : 0.526530 \n" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "/usr/local/bin/gosu" - } - } - } - ] - }, - { - "ruleId": "CVE-2026-33814", - "ruleIndex": 18, - "kind": "fail", - "level": "error", - "message": { - "text": " Vulnerability : CVE-2026-33814 \n Severity : HIGH \n Package : pkg:golang/stdlib@1.24.6 \n Affected range : <1.25.10 \n Fixed version : 1.25.10 \n EPSS Score : 0.007810 \n EPSS Percentile : 0.516100 \n" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "/usr/local/bin/gosu" - } - } - } - ] - }, - { - "ruleId": "CVE-2026-33845", - "ruleIndex": 19, - "kind": "fail", - "level": "error", - "message": { - "text": " Vulnerability : CVE-2026-33845 \n Severity : HIGH \n Package : pkg:deb/debian/gnutls28@3.7.9-2%2Bdeb12u6?os_distro=bookworm&os_name=debian&os_version=12 \n Affected range : <3.7.9-2+deb12u7 \n Fixed version : 3.7.9-2+deb12u7 \n EPSS Score : 0.008050 \n EPSS Percentile : 0.524240 \n" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "/usr/share/doc/libgnutls30/copyright" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/status" - } - } - } - ] - }, - { - "ruleId": "CVE-2026-33846", - "ruleIndex": 20, - "kind": "fail", - "level": "error", - "message": { - "text": " Vulnerability : CVE-2026-33846 \n Severity : HIGH \n Package : pkg:deb/debian/gnutls28@3.7.9-2%2Bdeb12u6?os_distro=bookworm&os_name=debian&os_version=12 \n Affected range : <3.7.9-2+deb12u7 \n Fixed version : 3.7.9-2+deb12u7 \n EPSS Score : 0.012630 \n EPSS Percentile : 0.662070 \n" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "/usr/share/doc/libgnutls30/copyright" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/status" - } - } - } - ] - }, - { - "ruleId": "CVE-2026-34180", - "ruleIndex": 21, - "kind": "fail", - "level": "error", - "message": { - "text": " Vulnerability : CVE-2026-34180 \n Severity : HIGH \n Package : pkg:deb/debian/openssl@3.0.19-1~deb12u2?os_distro=bookworm&os_name=debian&os_version=12 \n Affected range : <3.0.20-1~deb12u2 \n Fixed version : 3.0.20-1~deb12u2 \n EPSS Score : 0.005130 \n EPSS Percentile : 0.400250 \n" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "/usr/share/doc/libssl3/copyright" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/usr/share/doc/openssl/copyright" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/openssl.conffiles" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/openssl.list" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/openssl.md5sums" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/openssl.postinst" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/status" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/etc/ssl/openssl.cnf" - } - } - } - ] - }, - { - "ruleId": "CVE-2026-39820", - "ruleIndex": 22, - "kind": "fail", - "level": "error", - "message": { - "text": " Vulnerability : CVE-2026-39820 \n Severity : HIGH \n Package : pkg:golang/stdlib@1.24.6 \n Affected range : <1.25.10 \n Fixed version : 1.25.10 \n EPSS Score : 0.007840 \n EPSS Percentile : 0.516880 \n" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "/usr/local/bin/gosu" - } - } - } - ] - }, - { - "ruleId": "CVE-2026-39836", - "ruleIndex": 23, - "kind": "fail", - "level": "error", - "message": { - "text": " Vulnerability : CVE-2026-39836 \n Severity : HIGH \n Package : pkg:golang/stdlib@1.24.6 \n Affected range : <1.25.10 \n Fixed version : 1.25.10 \n EPSS Score : 0.005880 \n EPSS Percentile : 0.439570 \n" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "/usr/local/bin/gosu" - } - } - } - ] - }, - { - "ruleId": "CVE-2026-4046", - "ruleIndex": 24, - "kind": "fail", - "level": "error", - "message": { - "text": " Vulnerability : CVE-2026-4046 \n Severity : HIGH \n Package : pkg:deb/debian/glibc@2.36-9%2Bdeb12u13?os_distro=bookworm&os_name=debian&os_version=12 \n Affected range : <2.36-9+deb12u14 \n Fixed version : 2.36-9+deb12u14 \n EPSS Score : 0.003570 \n EPSS Percentile : 0.278290 \n" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "/usr/share/doc/libc-bin/copyright" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/usr/share/doc/libc-l10n/copyright" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/usr/share/doc/libc6/copyright" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/usr/share/doc/locales/copyright" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/libc-bin.conffiles" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/libc-bin.list" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/libc-bin.md5sums" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/libc-bin.postinst" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/libc-bin.triggers" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/libc-l10n.list" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/libc-l10n.md5sums" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/locales.conffiles" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/locales.config" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/locales.list" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/locales.md5sums" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/locales.postinst" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/locales.postrm" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/locales.prerm" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/locales.templates" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/status" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/etc/bindresvport.blacklist" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/etc/default/nss" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/etc/gai.conf" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/etc/ld.so.conf" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/etc/ld.so.conf.d/libc.conf" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/etc/ld.so.conf.d/x86_64-linux-gnu.conf" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/etc/locale.alias" - } - } - } - ] - }, - { - "ruleId": "CVE-2026-42009", - "ruleIndex": 25, - "kind": "fail", - "level": "error", - "message": { - "text": " Vulnerability : CVE-2026-42009 \n Severity : HIGH \n Package : pkg:deb/debian/gnutls28@3.7.9-2%2Bdeb12u6?os_distro=bookworm&os_name=debian&os_version=12 \n Affected range : <3.7.9-2+deb12u7 \n Fixed version : 3.7.9-2+deb12u7 \n EPSS Score : 0.013350 \n EPSS Percentile : 0.677970 \n" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "/usr/share/doc/libgnutls30/copyright" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/status" - } - } - } - ] - }, - { - "ruleId": "CVE-2026-42499", - "ruleIndex": 26, - "kind": "fail", - "level": "error", - "message": { - "text": " Vulnerability : CVE-2026-42499 \n Severity : HIGH \n Package : pkg:golang/stdlib@1.24.6 \n Affected range : <1.25.10 \n Fixed version : 1.25.10 \n EPSS Score : 0.007980 \n EPSS Percentile : 0.521580 \n" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "/usr/local/bin/gosu" - } - } - } - ] - }, - { - "ruleId": "CVE-2026-42504", - "ruleIndex": 27, - "kind": "fail", - "level": "error", - "message": { - "text": " Vulnerability : CVE-2026-42504 \n Severity : HIGH \n Package : pkg:golang/stdlib@1.24.6 \n Affected range : <1.25.11 \n Fixed version : 1.25.11 \n EPSS Score : 0.005600 \n EPSS Percentile : 0.426280 \n" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "/usr/local/bin/gosu" - } - } - } - ] - }, - { - "ruleId": "CVE-2026-48959", - "ruleIndex": 28, - "kind": "fail", - "level": "error", - "message": { - "text": " Vulnerability : CVE-2026-48959 \n Severity : HIGH \n Package : pkg:deb/debian/perl@5.36.0-7%2Bdeb12u3?os_distro=bookworm&os_name=debian&os_version=12 \n Affected range : >0 \n Fixed version : not fixed \n EPSS Score : 0.003730 \n EPSS Percentile : 0.294000 \n" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "/usr/share/doc/libperl5.36/copyright" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/usr/share/doc/perl-base/copyright" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/usr/share/doc/perl-modules-5.36/copyright" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/usr/share/doc/perl/copyright" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/perl-base.list" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/perl-base.md5sums" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/perl-base.postinst" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/perl-base.postrm" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/perl-base.preinst" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/perl-base.prerm" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/perl-modules-5.36.list" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/perl-modules-5.36.md5sums" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/perl.conffiles" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/perl.list" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/perl.md5sums" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/perl.postinst" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/perl.postrm" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/perl.preinst" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/perl.prerm" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/status" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/etc/perl/Net/libnet.cfg" - } - } - } - ] - }, - { - "ruleId": "CVE-2026-9076", - "ruleIndex": 29, - "kind": "fail", - "level": "error", - "message": { - "text": " Vulnerability : CVE-2026-9076 \n Severity : HIGH \n Package : pkg:deb/debian/openssl@3.0.19-1~deb12u2?os_distro=bookworm&os_name=debian&os_version=12 \n Affected range : <3.0.20-1~deb12u2 \n Fixed version : 3.0.20-1~deb12u2 \n EPSS Score : 0.002970 \n EPSS Percentile : 0.214650 \n" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "/usr/share/doc/libssl3/copyright" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/usr/share/doc/openssl/copyright" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/openssl.conffiles" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/openssl.list" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/openssl.md5sums" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/openssl.postinst" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/status" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/etc/ssl/openssl.cnf" - } - } - } - ] - }, - { - "ruleId": "CVE-2026-7383", - "ruleIndex": 30, - "kind": "fail", - "level": "error", - "message": { - "text": " Vulnerability : CVE-2026-7383 \n Severity : HIGH \n Package : pkg:deb/debian/openssl@3.0.19-1~deb12u2?os_distro=bookworm&os_name=debian&os_version=12 \n Affected range : <3.0.20-1~deb12u2 \n Fixed version : 3.0.20-1~deb12u2 \n EPSS Score : 0.003580 \n EPSS Percentile : 0.278500 \n" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "/usr/share/doc/libssl3/copyright" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/usr/share/doc/openssl/copyright" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/openssl.conffiles" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/openssl.list" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/openssl.md5sums" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/openssl.postinst" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/status" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/etc/ssl/openssl.cnf" - } - } - } - ] - }, - { - "ruleId": "CVE-2025-6297", - "ruleIndex": 31, - "kind": "fail", - "level": "error", - "message": { - "text": " Vulnerability : CVE-2025-6297 \n Severity : HIGH \n Package : pkg:deb/debian/dpkg@1.21.22?os_distro=bookworm&os_name=debian&os_version=12 \n Affected range : <1.21.23 \n Fixed version : 1.21.23 \n EPSS Score : 0.003410 \n EPSS Percentile : 0.261660 \n" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "/usr/share/doc/dpkg/copyright" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/dpkg-dev.list" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/dpkg.conffiles" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/dpkg.list" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/dpkg.md5sums" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/dpkg.postinst" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/dpkg.postrm" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/dpkg.prerm" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/status" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/etc/alternatives/README" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/etc/cron.daily/dpkg" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/etc/dpkg/dpkg.cfg" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/etc/dpkg/shlibs.default" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/etc/dpkg/shlibs.override" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/etc/logrotate.d/alternatives" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/etc/logrotate.d/dpkg" - } - } - } - ] - }, - { - "ruleId": "CVE-2026-42013", - "ruleIndex": 32, - "kind": "fail", - "level": "error", - "message": { - "text": " Vulnerability : CVE-2026-42013 \n Severity : HIGH \n Package : pkg:deb/debian/gnutls28@3.7.9-2%2Bdeb12u6?os_distro=bookworm&os_name=debian&os_version=12 \n Affected range : <3.7.9-2+deb12u7 \n Fixed version : 3.7.9-2+deb12u7 \n EPSS Score : 0.004230 \n EPSS Percentile : 0.341120 \n" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "/usr/share/doc/libgnutls30/copyright" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/status" - } - } - } - ] - }, - { - "ruleId": "CVE-2026-5260", - "ruleIndex": 33, - "kind": "fail", - "level": "error", - "message": { - "text": " Vulnerability : CVE-2026-5260 \n Severity : HIGH \n Package : pkg:deb/debian/gnutls28@3.7.9-2%2Bdeb12u6?os_distro=bookworm&os_name=debian&os_version=12 \n Affected range : <3.7.9-2+deb12u7 \n Fixed version : 3.7.9-2+deb12u7 \n EPSS Score : 0.007270 \n EPSS Percentile : 0.497840 \n" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "/usr/share/doc/libgnutls30/copyright" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/status" - } - } - } - ] - }, - { - "ruleId": "CVE-2026-0861", - "ruleIndex": 34, - "kind": "fail", - "level": "error", - "message": { - "text": " Vulnerability : CVE-2026-0861 \n Severity : HIGH \n Package : pkg:deb/debian/glibc@2.36-9%2Bdeb12u13?os_distro=bookworm&os_name=debian&os_version=12 \n Affected range : <2.36-9+deb12u14 \n Fixed version : 2.36-9+deb12u14 \n EPSS Score : 0.003520 \n EPSS Percentile : 0.273210 \n" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "/usr/share/doc/libc-bin/copyright" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/usr/share/doc/libc-l10n/copyright" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/usr/share/doc/libc6/copyright" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/usr/share/doc/locales/copyright" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/libc-bin.conffiles" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/libc-bin.list" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/libc-bin.md5sums" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/libc-bin.postinst" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/libc-bin.triggers" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/libc-l10n.list" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/libc-l10n.md5sums" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/locales.conffiles" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/locales.config" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/locales.list" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/locales.md5sums" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/locales.postinst" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/locales.postrm" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/locales.prerm" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/locales.templates" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/status" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/etc/bindresvport.blacklist" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/etc/default/nss" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/etc/gai.conf" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/etc/ld.so.conf" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/etc/ld.so.conf.d/libc.conf" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/etc/ld.so.conf.d/x86_64-linux-gnu.conf" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/etc/locale.alias" - } - } - } - ] - }, - { - "ruleId": "CVE-2026-45447", - "ruleIndex": 35, - "kind": "fail", - "level": "error", - "message": { - "text": " Vulnerability : CVE-2026-45447 \n Severity : HIGH \n Package : pkg:deb/debian/openssl@3.0.19-1~deb12u2?os_distro=bookworm&os_name=debian&os_version=12 \n Affected range : <3.0.20-1~deb12u2 \n Fixed version : 3.0.20-1~deb12u2 \n EPSS Score : 0.027190 \n EPSS Percentile : 0.842740 \n" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "/usr/share/doc/libssl3/copyright" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/usr/share/doc/openssl/copyright" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/openssl.conffiles" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/openssl.list" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/openssl.md5sums" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/openssl.postinst" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/status" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/etc/ssl/openssl.cnf" - } - } - } - ] - }, - { - "ruleId": "CVE-2026-12087", - "ruleIndex": 36, - "kind": "fail", - "level": "error", - "message": { - "text": " Vulnerability : CVE-2026-12087 \n Severity : CRITICAL \n Package : pkg:deb/debian/perl@5.36.0-7%2Bdeb12u3?os_distro=bookworm&os_name=debian&os_version=12 \n Affected range : >0 \n Fixed version : not fixed \n EPSS Score : 0.003890 \n EPSS Percentile : 0.309730 \n" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "/usr/share/doc/libperl5.36/copyright" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/usr/share/doc/perl-base/copyright" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/usr/share/doc/perl-modules-5.36/copyright" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/usr/share/doc/perl/copyright" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/perl-base.list" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/perl-base.md5sums" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/perl-base.postinst" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/perl-base.postrm" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/perl-base.preinst" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/perl-base.prerm" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/perl-modules-5.36.list" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/perl-modules-5.36.md5sums" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/perl.conffiles" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/perl.list" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/perl.md5sums" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/perl.postinst" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/perl.postrm" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/perl.preinst" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/perl.prerm" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/status" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/etc/perl/Net/libnet.cfg" - } - } - } - ] - }, - { - "ruleId": "CVE-2025-68121", - "ruleIndex": 37, - "kind": "fail", - "level": "error", - "message": { - "text": " Vulnerability : CVE-2025-68121 \n Severity : CRITICAL \n Package : pkg:golang/stdlib@1.24.6 \n Affected range : <1.24.13 \n Fixed version : 1.24.13 \n EPSS Score : 0.007650 \n EPSS Percentile : 0.510700 \n" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "/usr/local/bin/gosu" - } - } - } - ] - } - ] - } - ] -} diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/docker-scout-postgres.stderr.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/docker-scout-postgres.stderr.log deleted file mode 100644 index 9f4227a1..00000000 --- a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/docker-scout-postgres.stderr.log +++ /dev/null @@ -1,4 +0,0 @@ - i New version 1.23.1 available (installed version is 1.18.3) at https://github.com/docker/scout-cli - v SBOM of image already cached, 223 packages indexed - x Detected 7 vulnerable packages with a total of 38 vulnerabilities - v Report written to D:\Dev\engram\.agent\worktrees\prc-release-gates\.agent\reports\evidence\production-ready\release-gates-foundation-revision-3\dev-stand-runtime\maker-runtime-1\nested\dev-stand\maker-runtime-1-scan\docker-scout-postgres.sarif.json diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/docker-scout-postgres.stdout.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/docker-scout-postgres.stdout.log deleted file mode 100644 index e69de29b..00000000 diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/docker-scout-server.sarif.json b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/docker-scout-server.sarif.json deleted file mode 100644 index 00175a18..00000000 --- a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/docker-scout-server.sarif.json +++ /dev/null @@ -1,731 +0,0 @@ -{ - "version": "2.1.0", - "$schema": "https://raw.githubusercontent.com/oasis-tcs/sarif-spec/main/sarif-2.1/schema/sarif-schema-2.1.0.json", - "runs": [ - { - "tool": { - "driver": { - "fullName": "Docker Scout", - "informationUri": "https://docker.com/products/docker-scout", - "name": "docker scout", - "rules": [ - { - "id": "CVE-2026-48962", - "name": "OsPackageVulnerability", - "shortDescription": { - "text": "CVE-2026-48962" - }, - "helpUri": "https://scout.docker.com/v/CVE-2026-48962?s=debian&n=perl&ns=debian&t=deb&osn=debian&osv=12&vr=%3E0", - "help": { - "text": "IO::Compress versions before 2.220 for Perl can execute arbitrary code in File::GlobMapper via an attacker-controlled output glob. _parseOutputGlob() wraps the caller-supplied output glob string in double quotes and stores it in the parser state; _getFiles() then runs the stored expression through eval STRING. A literal double quote in the output glob closes the dquote wrapper, and the characters that follow are evaluated as Perl. Arbitrary Perl in the output glob executes at the calling process's privilege.\n\n---\n- libio-compress-perl 2.220-1 (bug https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1138055)\n[trixie] - libio-compress-perl (Minor issue)\n- perl 5.40.1-8 (bug https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1138854)\nhttps://lists.security.metacpan.org/cve-announce/msg/40434385/\nFixed by: https://github.com/pmqs/IO-Compress/commit/f2db247bf90d4cc7ee2710be384946081f3b4610 (v2.220)\n", - "markdown": "> IO::Compress versions before 2.220 for Perl can execute arbitrary code in File::GlobMapper via an attacker-controlled output glob. _parseOutputGlob() wraps the caller-supplied output glob string in double quotes and stores it in the parser state; _getFiles() then runs the stored expression through eval STRING. A literal double quote in the output glob closes the dquote wrapper, and the characters that follow are evaluated as Perl. Arbitrary Perl in the output glob executes at the calling process's privilege.\n\n---\n- libio-compress-perl 2.220-1 (bug https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1138055)\n[trixie] - libio-compress-perl (Minor issue)\n- perl 5.40.1-8 (bug https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1138854)\nhttps://lists.security.metacpan.org/cve-announce/msg/40434385/\nFixed by: https://github.com/pmqs/IO-Compress/commit/f2db247bf90d4cc7ee2710be384946081f3b4610 (v2.220)\n\n| | |\n|----------------|----------------------------------------------------------------------------------------|\n| Package | pkg:deb/debian/perl@5.36.0-7%2Bdeb12u3?os_distro=bookworm&os_name=debian&os_version=12 |\n| Affected range | >0 |\n| Fixed version | not fixed |\n" - }, - "properties": { - "affected_version": ">0", - "cvssV3_severity": "HIGH", - "fixed_version": "not fixed", - "purls": [ - "pkg:deb/debian/perl@5.36.0-7%2Bdeb12u3?os_distro=bookworm&os_name=debian&os_version=12" - ], - "security-severity": "7.3", - "tags": [ - "HIGH" - ] - } - }, - { - "id": "CVE-2026-39829", - "name": "OsPackageVulnerability", - "shortDescription": { - "text": "CVE-2026-39829: Improper Validation of Specified Quantity in Input" - }, - "helpUri": "https://scout.docker.com/v/CVE-2026-39829?s=github&n=crypto&ns=golang.org%2Fx&t=golang&vr=%3C0.52.0", - "help": { - "text": "The RSA and DSA public key parsers did not enforce size limits on key parameters. A crafted public key with an excessively large modulus or DSA parameter could cause several minutes of CPU consumption during signature verification. This could be triggered by unauthenticated clients during public key authentication. RSA moduli are now limited to 8192 bits, and DSA parameters are validated per FIPS 186-2.\n", - "markdown": "> The RSA and DSA public key parsers did not enforce size limits on key parameters. A crafted public key with an excessively large modulus or DSA parameter could cause several minutes of CPU consumption during signature verification. This could be triggered by unauthenticated clients during public key authentication. RSA moduli are now limited to 8192 bits, and DSA parameters are validated per FIPS 186-2.\n\n| | |\n|----------------|----------------------------------------------|\n| Package | pkg:golang/golang.org/x/crypto@0.50.0 |\n| Affected range | <0.52.0 |\n| Fixed version | 0.52.0 |\n| CVSS Score | 7.5 |\n| CVSS Vector | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H |\n" - }, - "properties": { - "affected_version": "<0.52.0", - "cvssV3": 7.5, - "cvssV3_severity": "HIGH", - "cvssV3_vector": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H", - "fixed_version": "0.52.0", - "purls": [ - "pkg:golang/golang.org/x/crypto@0.50.0" - ], - "security-severity": "7.5", - "tags": [ - "HIGH" - ] - } - }, - { - "id": "CVE-2026-46597", - "name": "OsPackageVulnerability", - "shortDescription": { - "text": "CVE-2026-46597: Incorrect Type Conversion or Cast" - }, - "helpUri": "https://scout.docker.com/v/CVE-2026-46597?s=github&n=crypto&ns=golang.org%2Fx&t=golang&vr=%3C0.52.0", - "help": { - "text": "An incorrectly placed cast from bytes to int allowed for server-side panic in the AES-GCM packet decoder for well-crafted inputs.\n", - "markdown": "> An incorrectly placed cast from bytes to int allowed for server-side panic in the AES-GCM packet decoder for well-crafted inputs.\n\n| | |\n|----------------|----------------------------------------------|\n| Package | pkg:golang/golang.org/x/crypto@0.50.0 |\n| Affected range | <0.52.0 |\n| Fixed version | 0.52.0 |\n| CVSS Score | 7.5 |\n| CVSS Vector | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H |\n" - }, - "properties": { - "affected_version": "<0.52.0", - "cvssV3": 7.5, - "cvssV3_severity": "HIGH", - "cvssV3_vector": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H", - "fixed_version": "0.52.0", - "purls": [ - "pkg:golang/golang.org/x/crypto@0.50.0" - ], - "security-severity": "7.5", - "tags": [ - "HIGH" - ] - } - }, - { - "id": "CVE-2026-48959", - "name": "OsPackageVulnerability", - "shortDescription": { - "text": "CVE-2026-48959" - }, - "helpUri": "https://scout.docker.com/v/CVE-2026-48959?s=debian&n=perl&ns=debian&t=deb&osn=debian&osv=12&vr=%3E0", - "help": { - "text": "IO::Uncompress::Unzip versions before 2.220 for Perl allow CPU exhaustion via per-byte read loop in fastForward. fastForward() compares length $offset (the digit count of the offset, 1 to 19) against the chunk size $c instead of $offset itself, so $c shrinks from 16 KiB to 1-19 bytes per iteration. Extracting a named entry from an attacker supplied zip via IO::Uncompress::Unzip->new($zip, Name => $target) drives a per-byte read loop scaling with the entry's compressed size, up to the non-Zip64 4 GiB cap.\n\n---\n- libio-compress-perl 2.220-1 (bug https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1138051)\n[trixie] - libio-compress-perl (Minor issue)\n- perl 5.40.1-8 (bug https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1138856)\nhttps://lists.security.metacpan.org/cve-announce/msg/40434381/\nFixed by: https://github.com/pmqs/IO-Compress/commit/68db44076f4c1a86a2ffe53a958eac6cabaf72e2 (v2.220)\n", - "markdown": "> IO::Uncompress::Unzip versions before 2.220 for Perl allow CPU exhaustion via per-byte read loop in fastForward. fastForward() compares length $offset (the digit count of the offset, 1 to 19) against the chunk size $c instead of $offset itself, so $c shrinks from 16 KiB to 1-19 bytes per iteration. Extracting a named entry from an attacker supplied zip via IO::Uncompress::Unzip->new($zip, Name => $target) drives a per-byte read loop scaling with the entry's compressed size, up to the non-Zip64 4 GiB cap.\n\n---\n- libio-compress-perl 2.220-1 (bug https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1138051)\n[trixie] - libio-compress-perl (Minor issue)\n- perl 5.40.1-8 (bug https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1138856)\nhttps://lists.security.metacpan.org/cve-announce/msg/40434381/\nFixed by: https://github.com/pmqs/IO-Compress/commit/68db44076f4c1a86a2ffe53a958eac6cabaf72e2 (v2.220)\n\n| | |\n|----------------|----------------------------------------------------------------------------------------|\n| Package | pkg:deb/debian/perl@5.36.0-7%2Bdeb12u3?os_distro=bookworm&os_name=debian&os_version=12 |\n| Affected range | >0 |\n| Fixed version | not fixed |\n" - }, - "properties": { - "affected_version": ">0", - "cvssV3_severity": "HIGH", - "fixed_version": "not fixed", - "purls": [ - "pkg:deb/debian/perl@5.36.0-7%2Bdeb12u3?os_distro=bookworm&os_name=debian&os_version=12" - ], - "security-severity": "7.5", - "tags": [ - "HIGH" - ] - } - }, - { - "id": "CVE-2026-12087", - "name": "OsPackageVulnerability", - "shortDescription": { - "text": "CVE-2026-12087" - }, - "helpUri": "https://scout.docker.com/v/CVE-2026-12087?s=debian&n=perl&ns=debian&t=deb&osn=debian&osv=12&vr=%3E0", - "help": { - "text": "Socket versions before 2.041 for Perl have an out-of-bounds heap read. In Socket.xs, pack_ip_mreq_source() checks the length of its source argument before the argument is read, so the check tests the byte length carried over from the preceding multiaddr argument instead. Both addresses occupy a 4-byte field, so a valid multiaddr lets a source of any length pass the check, and the source is then copied into the 4-byte imr_sourceaddr field with a fixed-size copy. A source shorter than 4 bytes is not rejected, and the copy reads up to 3 bytes past the end of its buffer. Calling pack_ip_mreq_source() with a source value shorter than 4 bytes copies adjacent heap memory into the returned packed structure.\n\n---\n- libsocket-perl 2.041-1\n[trixie] - libsocket-perl (Minor issue)\n- perl (bug https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1140152)\nhttps://lists.security.metacpan.org/cve-announce/msg/41020451/\nFixed by: https://github.com/Perl/perl5/commit/de19a0b0ad1900fef976c5c1400bd8f11ec6c6cb (v5.43.11)\n", - "markdown": "> Socket versions before 2.041 for Perl have an out-of-bounds heap read. In Socket.xs, pack_ip_mreq_source() checks the length of its source argument before the argument is read, so the check tests the byte length carried over from the preceding multiaddr argument instead. Both addresses occupy a 4-byte field, so a valid multiaddr lets a source of any length pass the check, and the source is then copied into the 4-byte imr_sourceaddr field with a fixed-size copy. A source shorter than 4 bytes is not rejected, and the copy reads up to 3 bytes past the end of its buffer. Calling pack_ip_mreq_source() with a source value shorter than 4 bytes copies adjacent heap memory into the returned packed structure.\n\n---\n- libsocket-perl 2.041-1\n[trixie] - libsocket-perl (Minor issue)\n- perl (bug https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1140152)\nhttps://lists.security.metacpan.org/cve-announce/msg/41020451/\nFixed by: https://github.com/Perl/perl5/commit/de19a0b0ad1900fef976c5c1400bd8f11ec6c6cb (v5.43.11)\n\n| | |\n|----------------|----------------------------------------------------------------------------------------|\n| Package | pkg:deb/debian/perl@5.36.0-7%2Bdeb12u3?os_distro=bookworm&os_name=debian&os_version=12 |\n| Affected range | >0 |\n| Fixed version | not fixed |\n" - }, - "properties": { - "affected_version": ">0", - "cvssV3_severity": "CRITICAL", - "fixed_version": "not fixed", - "purls": [ - "pkg:deb/debian/perl@5.36.0-7%2Bdeb12u3?os_distro=bookworm&os_name=debian&os_version=12" - ], - "security-severity": "9.1", - "tags": [ - "CRITICAL" - ] - } - }, - { - "id": "CVE-2026-39830", - "name": "OsPackageVulnerability", - "shortDescription": { - "text": "CVE-2026-39830: Improper Restriction of Operations within the Bounds of a Memory Buffer" - }, - "helpUri": "https://scout.docker.com/v/CVE-2026-39830?s=github&n=crypto&ns=golang.org%2Fx&t=golang&vr=%3C0.52.0", - "help": { - "text": "A malicious SSH peer could send unsolicited global request responses to fill an internal buffer, blocking the connection's read loop. The blocked goroutine could not be released by calling Close(), resulting in a resource leak per connection. Unsolicited global responses are now discarded.\n", - "markdown": "> A malicious SSH peer could send unsolicited global request responses to fill an internal buffer, blocking the connection's read loop. The blocked goroutine could not be released by calling Close(), resulting in a resource leak per connection. Unsolicited global responses are now discarded.\n\n| | |\n|----------------|----------------------------------------------|\n| Package | pkg:golang/golang.org/x/crypto@0.50.0 |\n| Affected range | <0.52.0 |\n| Fixed version | 0.52.0 |\n| CVSS Score | 9.1 |\n| CVSS Vector | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:H |\n" - }, - "properties": { - "affected_version": "<0.52.0", - "cvssV3": 9.1, - "cvssV3_severity": "CRITICAL", - "cvssV3_vector": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:H", - "fixed_version": "0.52.0", - "purls": [ - "pkg:golang/golang.org/x/crypto@0.50.0" - ], - "security-severity": "9.1", - "tags": [ - "CRITICAL" - ] - } - }, - { - "id": "CVE-2026-39831", - "name": "OsPackageVulnerability", - "shortDescription": { - "text": "CVE-2026-39831: Missing Authorization" - }, - "helpUri": "https://scout.docker.com/v/CVE-2026-39831?s=github&n=crypto&ns=golang.org%2Fx&t=golang&vr=%3C0.52.0", - "help": { - "text": "The Verify() method for FIDO/U2F security key types (sk-ecdsa-sha2-nistp256@openssh.com, sk-ssh-ed25519@openssh.com) did not check the User Presence flag. Signatures generated without physical touch were accepted, allowing unattended use of a hardware security key. To restore the previous behavior, return a \"no-touch-required\" extension in Permissions.Extensions from PublicKeyCallback.\n", - "markdown": "> The Verify() method for FIDO/U2F security key types (sk-ecdsa-sha2-nistp256@openssh.com, sk-ssh-ed25519@openssh.com) did not check the User Presence flag. Signatures generated without physical touch were accepted, allowing unattended use of a hardware security key. To restore the previous behavior, return a \"no-touch-required\" extension in Permissions.Extensions from PublicKeyCallback.\n\n| | |\n|----------------|----------------------------------------------|\n| Package | pkg:golang/golang.org/x/crypto@0.50.0 |\n| Affected range | <0.52.0 |\n| Fixed version | 0.52.0 |\n| CVSS Score | 9.1 |\n| CVSS Vector | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N |\n" - }, - "properties": { - "affected_version": "<0.52.0", - "cvssV3": 9.1, - "cvssV3_severity": "CRITICAL", - "cvssV3_vector": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N", - "fixed_version": "0.52.0", - "purls": [ - "pkg:golang/golang.org/x/crypto@0.50.0" - ], - "security-severity": "9.1", - "tags": [ - "CRITICAL" - ] - } - }, - { - "id": "CVE-2026-39832", - "name": "OsPackageVulnerability", - "shortDescription": { - "text": "CVE-2026-39832: Improper Preservation of Permissions" - }, - "helpUri": "https://scout.docker.com/v/CVE-2026-39832?s=github&n=crypto&ns=golang.org%2Fx&t=golang&vr=%3C0.52.0", - "help": { - "text": "When adding a key to a remote agent constraint extensions such as restrict-destination-v00@openssh.com were not serialized in the request. Destination restrictions were silently stripped when forwarding keys, allowing unrestricted use of the key on the remote host. The client now serializes all constraint extensions. Additionally, the in-memory keyring returned by NewKeyring() now rejects keys with unsupported constraint extensions instead of silently ignoring them.\n", - "markdown": "> When adding a key to a remote agent constraint extensions such as restrict-destination-v00@openssh.com were not serialized in the request. Destination restrictions were silently stripped when forwarding keys, allowing unrestricted use of the key on the remote host. The client now serializes all constraint extensions. Additionally, the in-memory keyring returned by NewKeyring() now rejects keys with unsupported constraint extensions instead of silently ignoring them.\n\n| | |\n|----------------|----------------------------------------------|\n| Package | pkg:golang/golang.org/x/crypto@0.50.0 |\n| Affected range | <0.52.0 |\n| Fixed version | 0.52.0 |\n| CVSS Score | 9.1 |\n| CVSS Vector | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N |\n" - }, - "properties": { - "affected_version": "<0.52.0", - "cvssV3": 9.1, - "cvssV3_severity": "CRITICAL", - "cvssV3_vector": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N", - "fixed_version": "0.52.0", - "purls": [ - "pkg:golang/golang.org/x/crypto@0.50.0" - ], - "security-severity": "9.1", - "tags": [ - "CRITICAL" - ] - } - }, - { - "id": "CVE-2026-39833", - "name": "OsPackageVulnerability", - "shortDescription": { - "text": "CVE-2026-39833: Missing Authorization" - }, - "helpUri": "https://scout.docker.com/v/CVE-2026-39833?s=github&n=crypto&ns=golang.org%2Fx&t=golang&vr=%3C0.52.0", - "help": { - "text": "The in-memory keyring returned by NewKeyring() silently accepted keys with the ConfirmBeforeUse constraint but never enforced it. The key would sign without any confirmation prompt, with no indication to the caller that the constraint was not in effect. NewKeyring() now returns an error when unsupported constraints are requested.\n", - "markdown": "> The in-memory keyring returned by NewKeyring() silently accepted keys with the ConfirmBeforeUse constraint but never enforced it. The key would sign without any confirmation prompt, with no indication to the caller that the constraint was not in effect. NewKeyring() now returns an error when unsupported constraints are requested.\n\n| | |\n|----------------|----------------------------------------------|\n| Package | pkg:golang/golang.org/x/crypto@0.50.0 |\n| Affected range | <0.52.0 |\n| Fixed version | 0.52.0 |\n| CVSS Score | 9.1 |\n| CVSS Vector | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N |\n" - }, - "properties": { - "affected_version": "<0.52.0", - "cvssV3": 9.1, - "cvssV3_severity": "CRITICAL", - "cvssV3_vector": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N", - "fixed_version": "0.52.0", - "purls": [ - "pkg:golang/golang.org/x/crypto@0.50.0" - ], - "security-severity": "9.1", - "tags": [ - "CRITICAL" - ] - } - }, - { - "id": "CVE-2026-39834", - "name": "OsPackageVulnerability", - "shortDescription": { - "text": "CVE-2026-39834: Integer Overflow or Wraparound" - }, - "helpUri": "https://scout.docker.com/v/CVE-2026-39834?s=github&n=crypto&ns=golang.org%2Fx&t=golang&vr=%3C0.52.0", - "help": { - "text": "When writing data larger than 4GB in a single Write call on an SSH channel, an integer overflow in the internal payload size calculation caused the write loop to spin indefinitely, sending empty packets without making progress. The size comparison now uses int64 to prevent truncation.\n", - "markdown": "> When writing data larger than 4GB in a single Write call on an SSH channel, an integer overflow in the internal payload size calculation caused the write loop to spin indefinitely, sending empty packets without making progress. The size comparison now uses int64 to prevent truncation.\n\n| | |\n|----------------|----------------------------------------------|\n| Package | pkg:golang/golang.org/x/crypto@0.50.0 |\n| Affected range | <0.52.0 |\n| Fixed version | 0.52.0 |\n| CVSS Score | 9.1 |\n| CVSS Vector | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:H |\n" - }, - "properties": { - "affected_version": "<0.52.0", - "cvssV3": 9.1, - "cvssV3_severity": "CRITICAL", - "cvssV3_vector": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:H", - "fixed_version": "0.52.0", - "purls": [ - "pkg:golang/golang.org/x/crypto@0.50.0" - ], - "security-severity": "9.1", - "tags": [ - "CRITICAL" - ] - } - }, - { - "id": "CVE-2026-42508", - "name": "OsPackageVulnerability", - "shortDescription": { - "text": "CVE-2026-42508: Improper Certificate Validation" - }, - "helpUri": "https://scout.docker.com/v/CVE-2026-42508?s=github&n=crypto&ns=golang.org%2Fx&t=golang&vr=%3C0.52.0", - "help": { - "text": "Previously, a revoked 'SignatureKey' belonging to a CA was not correctly checked for revocation. Now, both the 'key' and 'key.SignatureKey' are checked for @revoked.\n", - "markdown": "> Previously, a revoked 'SignatureKey' belonging to a CA was not correctly checked for revocation. Now, both the 'key' and 'key.SignatureKey' are checked for @revoked.\n\n| | |\n|----------------|----------------------------------------------|\n| Package | pkg:golang/golang.org/x/crypto@0.50.0 |\n| Affected range | <0.52.0 |\n| Fixed version | 0.52.0 |\n| CVSS Score | 9.1 |\n| CVSS Vector | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N |\n" - }, - "properties": { - "affected_version": "<0.52.0", - "cvssV3": 9.1, - "cvssV3_severity": "CRITICAL", - "cvssV3_vector": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N", - "fixed_version": "0.52.0", - "purls": [ - "pkg:golang/golang.org/x/crypto@0.50.0" - ], - "security-severity": "9.1", - "tags": [ - "CRITICAL" - ] - } - }, - { - "id": "CVE-2026-39821", - "name": "OsPackageVulnerability", - "shortDescription": { - "text": "CVE-2026-39821" - }, - "helpUri": "https://scout.docker.com/v/CVE-2026-39821?s=golang&n=net&ns=golang.org%2Fx&t=golang&vr=%3C0.55.0", - "help": { - "text": "The ToASCII and ToUnicode functions incorrectly accept Punycode-encoded labels that decode to an ASCII-only label. For example, ToUnicode(\"xn--example-.com\") incorrectly returns the name \"example.com\" rather than an error.\n\nThis behavior can lead to privilege escalation in programs using the idna package. For example, a program which performs privilege checks on the ASCII hostname may reject \"example.com\" but permit \"xn--example-.com\". If that program subsequently converts the ASCII hostname to Unicode, it will inadvertently permits access to the Unicode name \"example.com\".\n", - "markdown": "> The ToASCII and ToUnicode functions incorrectly accept Punycode-encoded labels that decode to an ASCII-only label. For example, ToUnicode(\"xn--example-.com\") incorrectly returns the name \"example.com\" rather than an error.\n\nThis behavior can lead to privilege escalation in programs using the idna package. For example, a program which performs privilege checks on the ASCII hostname may reject \"example.com\" but permit \"xn--example-.com\". If that program subsequently converts the ASCII hostname to Unicode, it will inadvertently permits access to the Unicode name \"example.com\".\n\n| | |\n|----------------|------------------------------------|\n| Package | pkg:golang/golang.org/x/net@0.53.0 |\n| Affected range | <0.55.0 |\n| Fixed version | 0.55.0 |\n" - }, - "properties": { - "affected_version": "<0.55.0", - "cvssV3_severity": "CRITICAL", - "fixed_version": "0.55.0", - "purls": [ - "pkg:golang/golang.org/x/net@0.53.0" - ], - "security-severity": "9.6", - "tags": [ - "CRITICAL" - ] - } - }, - { - "id": "CVE-2026-46595", - "name": "OsPackageVulnerability", - "shortDescription": { - "text": "CVE-2026-46595: Incorrect Implementation of Authentication Algorithm" - }, - "helpUri": "https://scout.docker.com/v/CVE-2026-46595?s=github&n=crypto&ns=golang.org%2Fx&t=golang&vr=%3C0.52.0", - "help": { - "text": "Previously, CVE-2024-45337 fixed an authorization bypass for misused ssh server configurations; if any other type of callback is passed other than public key, then the source-address validation would be skipped.\n", - "markdown": "> Previously, CVE-2024-45337 fixed an authorization bypass for misused ssh server configurations; if any other type of callback is passed other than public key, then the source-address validation would be skipped.\n\n| | |\n|----------------|----------------------------------------------|\n| Package | pkg:golang/golang.org/x/crypto@0.50.0 |\n| Affected range | <0.52.0 |\n| Fixed version | 0.52.0 |\n| CVSS Score | 10.0 |\n| CVSS Vector | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:L |\n" - }, - "properties": { - "affected_version": "<0.52.0", - "cvssV3": 10, - "cvssV3_severity": "CRITICAL", - "cvssV3_vector": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:L", - "fixed_version": "0.52.0", - "purls": [ - "pkg:golang/golang.org/x/crypto@0.50.0" - ], - "security-severity": "10.0", - "tags": [ - "CRITICAL" - ] - } - } - ], - "version": "1.18.3" - } - }, - "results": [ - { - "ruleId": "CVE-2026-48962", - "ruleIndex": 0, - "kind": "fail", - "level": "error", - "message": { - "text": " Vulnerability : CVE-2026-48962 \n Severity : HIGH \n Package : pkg:deb/debian/perl@5.36.0-7%2Bdeb12u3?os_distro=bookworm&os_name=debian&os_version=12 \n Affected range : >0 \n Fixed version : not fixed \n EPSS Score : 0.002920 \n EPSS Percentile : 0.209720 \n" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "/usr/share/doc/perl-base/copyright" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/perl-base.list" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/perl-base.md5sums" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/perl-base.postinst" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/perl-base.postrm" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/perl-base.preinst" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/perl-base.prerm" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/status" - } - } - } - ] - }, - { - "ruleId": "CVE-2026-39829", - "ruleIndex": 1, - "kind": "fail", - "level": "error", - "message": { - "text": " Vulnerability : CVE-2026-39829 \n Severity : HIGH \n Package : pkg:golang/golang.org/x/crypto@0.50.0 \n Affected range : <0.52.0 \n Fixed version : 0.52.0 \n CVSS Score : 7.5 \n CVSS Vector : CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H \n EPSS Score : 0.004150 \n EPSS Percentile : 0.334980 \n" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "/usr/local/bin/engram-server" - } - } - } - ] - }, - { - "ruleId": "CVE-2026-46597", - "ruleIndex": 2, - "kind": "fail", - "level": "error", - "message": { - "text": " Vulnerability : CVE-2026-46597 \n Severity : HIGH \n Package : pkg:golang/golang.org/x/crypto@0.50.0 \n Affected range : <0.52.0 \n Fixed version : 0.52.0 \n CVSS Score : 7.5 \n CVSS Vector : CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H \n EPSS Score : 0.003590 \n EPSS Percentile : 0.280070 \n" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "/usr/local/bin/engram-server" - } - } - } - ] - }, - { - "ruleId": "CVE-2026-48959", - "ruleIndex": 3, - "kind": "fail", - "level": "error", - "message": { - "text": " Vulnerability : CVE-2026-48959 \n Severity : HIGH \n Package : pkg:deb/debian/perl@5.36.0-7%2Bdeb12u3?os_distro=bookworm&os_name=debian&os_version=12 \n Affected range : >0 \n Fixed version : not fixed \n EPSS Score : 0.003730 \n EPSS Percentile : 0.294000 \n" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "/usr/share/doc/perl-base/copyright" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/perl-base.list" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/perl-base.md5sums" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/perl-base.postinst" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/perl-base.postrm" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/perl-base.preinst" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/perl-base.prerm" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/status" - } - } - } - ] - }, - { - "ruleId": "CVE-2026-12087", - "ruleIndex": 4, - "kind": "fail", - "level": "error", - "message": { - "text": " Vulnerability : CVE-2026-12087 \n Severity : CRITICAL \n Package : pkg:deb/debian/perl@5.36.0-7%2Bdeb12u3?os_distro=bookworm&os_name=debian&os_version=12 \n Affected range : >0 \n Fixed version : not fixed \n EPSS Score : 0.003890 \n EPSS Percentile : 0.309730 \n" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "/usr/share/doc/perl-base/copyright" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/perl-base.list" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/perl-base.md5sums" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/perl-base.postinst" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/perl-base.postrm" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/perl-base.preinst" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/info/perl-base.prerm" - } - } - }, - { - "physicalLocation": { - "artifactLocation": { - "uri": "/var/lib/dpkg/status" - } - } - } - ] - }, - { - "ruleId": "CVE-2026-39830", - "ruleIndex": 5, - "kind": "fail", - "level": "error", - "message": { - "text": " Vulnerability : CVE-2026-39830 \n Severity : CRITICAL \n Package : pkg:golang/golang.org/x/crypto@0.50.0 \n Affected range : <0.52.0 \n Fixed version : 0.52.0 \n CVSS Score : 9.1 \n CVSS Vector : CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:H \n EPSS Score : 0.005330 \n EPSS Percentile : 0.411710 \n" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "/usr/local/bin/engram-server" - } - } - } - ] - }, - { - "ruleId": "CVE-2026-39831", - "ruleIndex": 6, - "kind": "fail", - "level": "error", - "message": { - "text": " Vulnerability : CVE-2026-39831 \n Severity : CRITICAL \n Package : pkg:golang/golang.org/x/crypto@0.50.0 \n Affected range : <0.52.0 \n Fixed version : 0.52.0 \n CVSS Score : 9.1 \n CVSS Vector : CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N \n EPSS Score : 0.003730 \n EPSS Percentile : 0.293870 \n" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "/usr/local/bin/engram-server" - } - } - } - ] - }, - { - "ruleId": "CVE-2026-39832", - "ruleIndex": 7, - "kind": "fail", - "level": "error", - "message": { - "text": " Vulnerability : CVE-2026-39832 \n Severity : CRITICAL \n Package : pkg:golang/golang.org/x/crypto@0.50.0 \n Affected range : <0.52.0 \n Fixed version : 0.52.0 \n CVSS Score : 9.1 \n CVSS Vector : CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N \n EPSS Score : 0.004030 \n EPSS Percentile : 0.324260 \n" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "/usr/local/bin/engram-server" - } - } - } - ] - }, - { - "ruleId": "CVE-2026-39833", - "ruleIndex": 8, - "kind": "fail", - "level": "error", - "message": { - "text": " Vulnerability : CVE-2026-39833 \n Severity : CRITICAL \n Package : pkg:golang/golang.org/x/crypto@0.50.0 \n Affected range : <0.52.0 \n Fixed version : 0.52.0 \n CVSS Score : 9.1 \n CVSS Vector : CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N \n EPSS Score : 0.003600 \n EPSS Percentile : 0.281200 \n" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "/usr/local/bin/engram-server" - } - } - } - ] - }, - { - "ruleId": "CVE-2026-39834", - "ruleIndex": 9, - "kind": "fail", - "level": "error", - "message": { - "text": " Vulnerability : CVE-2026-39834 \n Severity : CRITICAL \n Package : pkg:golang/golang.org/x/crypto@0.50.0 \n Affected range : <0.52.0 \n Fixed version : 0.52.0 \n CVSS Score : 9.1 \n CVSS Vector : CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:H \n EPSS Score : 0.004660 \n EPSS Percentile : 0.371630 \n" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "/usr/local/bin/engram-server" - } - } - } - ] - }, - { - "ruleId": "CVE-2026-42508", - "ruleIndex": 10, - "kind": "fail", - "level": "error", - "message": { - "text": " Vulnerability : CVE-2026-42508 \n Severity : CRITICAL \n Package : pkg:golang/golang.org/x/crypto@0.50.0 \n Affected range : <0.52.0 \n Fixed version : 0.52.0 \n CVSS Score : 9.1 \n CVSS Vector : CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N \n EPSS Score : 0.004870 \n EPSS Percentile : 0.385310 \n" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "/usr/local/bin/engram-server" - } - } - } - ] - }, - { - "ruleId": "CVE-2026-39821", - "ruleIndex": 11, - "kind": "fail", - "level": "error", - "message": { - "text": " Vulnerability : CVE-2026-39821 \n Severity : CRITICAL \n Package : pkg:golang/golang.org/x/net@0.53.0 \n Affected range : <0.55.0 \n Fixed version : 0.55.0 \n EPSS Score : 0.004780 \n EPSS Percentile : 0.379210 \n" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "/usr/local/bin/engram-server" - } - } - } - ] - }, - { - "ruleId": "CVE-2026-46595", - "ruleIndex": 12, - "kind": "fail", - "level": "error", - "message": { - "text": " Vulnerability : CVE-2026-46595 \n Severity : CRITICAL \n Package : pkg:golang/golang.org/x/crypto@0.50.0 \n Affected range : <0.52.0 \n Fixed version : 0.52.0 \n CVSS Score : 10.0 \n CVSS Vector : CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:L \n EPSS Score : 0.004400 \n EPSS Percentile : 0.354330 \n" - }, - "locations": [ - { - "physicalLocation": { - "artifactLocation": { - "uri": "/usr/local/bin/engram-server" - } - } - } - ] - } - ] - } - ] -} diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/docker-scout-server.stderr.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/docker-scout-server.stderr.log deleted file mode 100644 index 580f574e..00000000 --- a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/docker-scout-server.stderr.log +++ /dev/null @@ -1,7 +0,0 @@ - i New version 1.23.1 available (installed version is 1.18.3) at https://github.com/docker/scout-cli - ...Storing image for indexing - v Image stored for indexing - ...Indexing - v Indexed 202 packages - x Detected 3 vulnerable packages with a total of 13 vulnerabilities - v Report written to D:\Dev\engram\.agent\worktrees\prc-release-gates\.agent\reports\evidence\production-ready\release-gates-foundation-revision-3\dev-stand-runtime\maker-runtime-1\nested\dev-stand\maker-runtime-1-scan\docker-scout-server.sarif.json diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/docker-scout-server.stdout.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/docker-scout-server.stdout.log deleted file mode 100644 index e69de29b..00000000 diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-inspect-operator-console.stderr.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-inspect-operator-console.stderr.log deleted file mode 100644 index e69de29b..00000000 diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-inspect-operator-console.stdout.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-inspect-operator-console.stdout.log deleted file mode 100644 index ef06e692..00000000 --- a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-inspect-operator-console.stdout.log +++ /dev/null @@ -1 +0,0 @@ -ghcr.io/thebtf/engram-operator-console:main|sha256:74d7c0db215c0a40d716c24f0326a487d7822ec94d0d0edc74b5fcf014face18 diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-inspect-postgres.stderr.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-inspect-postgres.stderr.log deleted file mode 100644 index e69de29b..00000000 diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-inspect-postgres.stdout.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-inspect-postgres.stdout.log deleted file mode 100644 index 0fda45fb..00000000 --- a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-inspect-postgres.stdout.log +++ /dev/null @@ -1 +0,0 @@ -pgvector/pgvector:pg17|sha256:feb68f4f15446397d8cac7f4fe48fe4586de83160d1fc48b46283312d1a33966 diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-inspect-server.stderr.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-inspect-server.stderr.log deleted file mode 100644 index e69de29b..00000000 diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-inspect-server.stdout.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-inspect-server.stdout.log deleted file mode 100644 index a62e1c97..00000000 --- a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-inspect-server.stdout.log +++ /dev/null @@ -1 +0,0 @@ -ghcr.io/thebtf/engram:main|sha256:a6e55d692ddf31a94b0a1d29a4e615ff509c6dac19eccafca4bda3e51147b38f diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-inventory.stderr.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-inventory.stderr.log deleted file mode 100644 index e69de29b..00000000 diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-inventory.stdout.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-inventory.stdout.log deleted file mode 100644 index 6f9b8ff4..00000000 --- a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-inventory.stdout.log +++ /dev/null @@ -1,3 +0,0 @@ -1f9e23d5284a|operator-console -e6d119b206fa|server -a230a1d63fb3|postgres diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-tag-inspect-operator-console.stderr.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-tag-inspect-operator-console.stderr.log deleted file mode 100644 index e69de29b..00000000 diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-tag-inspect-operator-console.stdout.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-tag-inspect-operator-console.stdout.log deleted file mode 100644 index 0b0905aa..00000000 --- a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-tag-inspect-operator-console.stdout.log +++ /dev/null @@ -1 +0,0 @@ -sha256:74d7c0db215c0a40d716c24f0326a487d7822ec94d0d0edc74b5fcf014face18 diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-tag-inspect-postgres.stderr.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-tag-inspect-postgres.stderr.log deleted file mode 100644 index e69de29b..00000000 diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-tag-inspect-postgres.stdout.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-tag-inspect-postgres.stdout.log deleted file mode 100644 index 893200d5..00000000 --- a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-tag-inspect-postgres.stdout.log +++ /dev/null @@ -1 +0,0 @@ -sha256:feb68f4f15446397d8cac7f4fe48fe4586de83160d1fc48b46283312d1a33966 diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-tag-inspect-server.stderr.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-tag-inspect-server.stderr.log deleted file mode 100644 index e69de29b..00000000 diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-tag-inspect-server.stdout.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-tag-inspect-server.stdout.log deleted file mode 100644 index 55054a50..00000000 --- a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-tag-inspect-server.stdout.log +++ /dev/null @@ -1 +0,0 @@ -sha256:a6e55d692ddf31a94b0a1d29a4e615ff509c6dac19eccafca4bda3e51147b38f diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/summary.json b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/summary.json deleted file mode 100644 index 219bc025..00000000 --- a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/summary.json +++ /dev/null @@ -1,105 +0,0 @@ -{ - "schema_version": 1, - "gate": "dev-stand-contract", - "action": "Scan", - "run_id": "maker-runtime-1", - "started_at": "2026-07-10T09:42:11.9259138+00:00", - "finished_at": "2026-07-10T09:42:38.3932061+00:00", - "duration_seconds": 26.467, - "verdict": "FAIL", - "compose_project": "engram-critical-stand", - "compose_file": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\docker-compose.yml", - "ephemeral_postgres_password_generated": false, - "ephemeral_admin_token_generated": false, - "ephemeral_bootstrap_capability_generated": false, - "ephemeral_credentials_distinct_and_nondefault": false, - "ephemeral_credentials_runtime_injected": false, - "ephemeral_postgres_password_persisted": false, - "ephemeral_admin_token_persisted": false, - "ephemeral_bootstrap_capability_persisted": false, - "exact_image_targets": { - "postgres": "pgvector/pgvector:pg17", - "server": "ghcr.io/thebtf/engram:main", - "operator-console": "ghcr.io/thebtf/engram-operator-console:main" - }, - "actual_images": { - "operator-console": "ghcr.io/thebtf/engram-operator-console:main", - "postgres": "pgvector/pgvector:pg17", - "server": "ghcr.io/thebtf/engram:main" - }, - "actual_image_ids": { - "operator-console": "sha256:74d7c0db215c0a40d716c24f0326a487d7822ec94d0d0edc74b5fcf014face18", - "postgres": "sha256:feb68f4f15446397d8cac7f4fe48fe4586de83160d1fc48b46283312d1a33966", - "server": "sha256:a6e55d692ddf31a94b0a1d29a4e615ff509c6dac19eccafca4bda3e51147b38f" - }, - "tag_image_ids": { - "operator-console": "sha256:74d7c0db215c0a40d716c24f0326a487d7822ec94d0d0edc74b5fcf014face18", - "postgres": "sha256:feb68f4f15446397d8cac7f4fe48fe4586de83160d1fc48b46283312d1a33966", - "server": "sha256:a6e55d692ddf31a94b0a1d29a4e615ff509c6dac19eccafca4bda3e51147b38f" - }, - "liveness_endpoints": [], - "semantic_ready_endpoints": [], - "vulnerability_scan": { - "scanner": "docker scout cves", - "severity_gate": [ - "critical", - "high" - ], - "scans": [ - { - "service": "operator-console", - "image": "ghcr.io/thebtf/engram-operator-console:main", - "image_id": "sha256:74d7c0db215c0a40d716c24f0326a487d7822ec94d0d0edc74b5fcf014face18", - "scanner": "docker scout cves", - "severities": [ - "critical", - "high" - ], - "exit_code": 2, - "vulnerability_count": 5, - "sarif": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-scan\\docker-scout-operator-console.sarif.json", - "parse_error": null - }, - { - "service": "postgres", - "image": "pgvector/pgvector:pg17", - "image_id": "sha256:feb68f4f15446397d8cac7f4fe48fe4586de83160d1fc48b46283312d1a33966", - "scanner": "docker scout cves", - "severities": [ - "critical", - "high" - ], - "exit_code": 2, - "vulnerability_count": 38, - "sarif": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-scan\\docker-scout-postgres.sarif.json", - "parse_error": null - }, - { - "service": "server", - "image": "ghcr.io/thebtf/engram:main", - "image_id": "sha256:a6e55d692ddf31a94b0a1d29a4e615ff509c6dac19eccafca4bda3e51147b38f", - "scanner": "docker scout cves", - "severities": [ - "critical", - "high" - ], - "exit_code": 2, - "vulnerability_count": 13, - "sarif": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-scan\\docker-scout-server.sarif.json", - "parse_error": null - } - ] - }, - "automatic_failure_cleanup": false, - "residual_checks_performed": false, - "residual_resources_zero": null, - "child_commands": 10, - "nonzero_child_commands": 3, - "commands": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-scan\\commands.json", - "errors": [ - "HIGH/CRITICAL vulnerabilities detected in exact image 'ghcr.io/thebtf/engram-operator-console:main' (count=5)", - "HIGH/CRITICAL vulnerabilities detected in exact image 'pgvector/pgvector:pg17' (count=38)", - "HIGH/CRITICAL vulnerabilities detected in exact image 'ghcr.io/thebtf/engram:main' (count=13)" - ], - "artifact_directory": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-scan" -} diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/api-ready.stderr.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/api-ready.stderr.log deleted file mode 100644 index e69de29b..00000000 diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/api-ready.stdout.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/api-ready.stdout.log deleted file mode 100644 index 36aa5929..00000000 --- a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/api-ready.stdout.log +++ /dev/null @@ -1,3 +0,0 @@ -{"status":"ready"} - -200 \ No newline at end of file diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/commands.json b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/commands.json deleted file mode 100644 index a03f5e85..00000000 --- a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/commands.json +++ /dev/null @@ -1,404 +0,0 @@ -[ - { - "name": "dev-stand-up", - "executable": "C:\\Program Files\\Docker\\Docker\\resources\\bin\\docker.exe", - "arguments": [ - "compose", - "-p", - "engram-critical-stand", - "-f", - "docker-compose.yml", - "-f", - ".agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-up\\ephemeral-credential-injection.compose.yaml", - "up", - "-d", - "--build", - "--wait" - ], - "environment_keys": [ - "COMPOSE_PROJECT_NAME", - "DATABASE_DSN", - "ENGRAM_AUTH_ADMIN_TOKEN", - "ENGRAM_AUTH_BOOTSTRAP_CAPABILITY", - "ENGRAM_AUTH_DISABLED", - "NUXT_OPERATOR_API_TARGET", - "OPERATOR_CONSOLE_PORT", - "POSTGRES_PASSWORD", - "POSTGRES_PORT", - "STAND_API_URL", - "STAND_OPERATOR_URL", - "WORKER_PORT" - ], - "command": "C:\\Program Files\\Docker\\Docker\\resources\\bin\\docker.exe compose -p engram-critical-stand -f docker-compose.yml -f .agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-up\\ephemeral-credential-injection.compose.yaml up -d --build --wait", - "started_at": "2026-07-10T09:41:15.3269131+00:00", - "finished_at": "2026-07-10T09:42:05.0429591+00:00", - "duration_seconds": 49.716, - "exit_code": 0, - "timed_out": false, - "stdout": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-up\\compose-up.stdout.log", - "stderr": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-up\\compose-up.stderr.log" - }, - { - "name": "dev-stand-postgres-container-id", - "executable": "C:\\Program Files\\Docker\\Docker\\resources\\bin\\docker.exe", - "arguments": [ - "compose", - "-p", - "engram-critical-stand", - "-f", - "docker-compose.yml", - "-f", - ".agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-up\\ephemeral-credential-injection.compose.yaml", - "ps", - "-q", - "postgres" - ], - "environment_keys": [ - "COMPOSE_PROJECT_NAME", - "DATABASE_DSN", - "ENGRAM_AUTH_ADMIN_TOKEN", - "ENGRAM_AUTH_BOOTSTRAP_CAPABILITY", - "ENGRAM_AUTH_DISABLED", - "NUXT_OPERATOR_API_TARGET", - "OPERATOR_CONSOLE_PORT", - "POSTGRES_PASSWORD", - "POSTGRES_PORT", - "STAND_API_URL", - "STAND_OPERATOR_URL", - "WORKER_PORT" - ], - "command": "C:\\Program Files\\Docker\\Docker\\resources\\bin\\docker.exe compose -p engram-critical-stand -f docker-compose.yml -f .agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-up\\ephemeral-credential-injection.compose.yaml ps -q postgres", - "started_at": "2026-07-10T09:42:05.0594634+00:00", - "finished_at": "2026-07-10T09:42:05.4818405+00:00", - "duration_seconds": 0.422, - "exit_code": 0, - "timed_out": false, - "stdout": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-up\\postgres-container-id.stdout.log", - "stderr": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-up\\postgres-container-id.stderr.log" - }, - { - "name": "dev-stand-postgres-credential-injection", - "executable": "C:\\Program Files\\Docker\\Docker\\resources\\bin\\docker.exe", - "arguments": [ - "inspect", - "a230a1d63fb3eb73bed2c8a10b4406c1eca03103538afea7d26c3dcdef915e64", - "--format", - "{{json .Config.Env}}" - ], - "environment_keys": [], - "command": "C:\\Program Files\\Docker\\Docker\\resources\\bin\\docker.exe inspect a230a1d63fb3eb73bed2c8a10b4406c1eca03103538afea7d26c3dcdef915e64 --format {{json .Config.Env}}", - "started_at": "2026-07-10T09:42:05.4852761+00:00", - "finished_at": "2026-07-10T09:42:05.6585799+00:00", - "duration_seconds": 0.173, - "exit_code": 0, - "timed_out": false, - "stdout": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-up\\postgres-credential-injection.stdout.log", - "stderr": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-up\\postgres-credential-injection.stderr.log" - }, - { - "name": "dev-stand-server-container-id", - "executable": "C:\\Program Files\\Docker\\Docker\\resources\\bin\\docker.exe", - "arguments": [ - "compose", - "-p", - "engram-critical-stand", - "-f", - "docker-compose.yml", - "-f", - ".agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-up\\ephemeral-credential-injection.compose.yaml", - "ps", - "-q", - "server" - ], - "environment_keys": [ - "COMPOSE_PROJECT_NAME", - "DATABASE_DSN", - "ENGRAM_AUTH_ADMIN_TOKEN", - "ENGRAM_AUTH_BOOTSTRAP_CAPABILITY", - "ENGRAM_AUTH_DISABLED", - "NUXT_OPERATOR_API_TARGET", - "OPERATOR_CONSOLE_PORT", - "POSTGRES_PASSWORD", - "POSTGRES_PORT", - "STAND_API_URL", - "STAND_OPERATOR_URL", - "WORKER_PORT" - ], - "command": "C:\\Program Files\\Docker\\Docker\\resources\\bin\\docker.exe compose -p engram-critical-stand -f docker-compose.yml -f .agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-up\\ephemeral-credential-injection.compose.yaml ps -q server", - "started_at": "2026-07-10T09:42:05.6644938+00:00", - "finished_at": "2026-07-10T09:42:06.0829788+00:00", - "duration_seconds": 0.418, - "exit_code": 0, - "timed_out": false, - "stdout": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-up\\server-container-id.stdout.log", - "stderr": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-up\\server-container-id.stderr.log" - }, - { - "name": "dev-stand-server-credential-injection", - "executable": "C:\\Program Files\\Docker\\Docker\\resources\\bin\\docker.exe", - "arguments": [ - "inspect", - "e6d119b206fa9d86afd92507ed27c8fc4a3c519d2bc6b7c2a88318c4adbf1dca", - "--format", - "{{json .Config.Env}}" - ], - "environment_keys": [], - "command": "C:\\Program Files\\Docker\\Docker\\resources\\bin\\docker.exe inspect e6d119b206fa9d86afd92507ed27c8fc4a3c519d2bc6b7c2a88318c4adbf1dca --format {{json .Config.Env}}", - "started_at": "2026-07-10T09:42:06.0848803+00:00", - "finished_at": "2026-07-10T09:42:06.2492710+00:00", - "duration_seconds": 0.164, - "exit_code": 0, - "timed_out": false, - "stdout": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-up\\server-credential-injection.stdout.log", - "stderr": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-up\\server-credential-injection.stderr.log" - }, - { - "name": "dev-stand-postgres-ready", - "executable": "C:\\Program Files\\Docker\\Docker\\resources\\bin\\docker.exe", - "arguments": [ - "compose", - "-p", - "engram-critical-stand", - "-f", - "docker-compose.yml", - "exec", - "-T", - "postgres", - "pg_isready", - "-U", - "engram", - "-d", - "engram" - ], - "environment_keys": [], - "command": "C:\\Program Files\\Docker\\Docker\\resources\\bin\\docker.exe compose -p engram-critical-stand -f docker-compose.yml exec -T postgres pg_isready -U engram -d engram", - "started_at": "2026-07-10T09:42:06.2504369+00:00", - "finished_at": "2026-07-10T09:42:06.7194229+00:00", - "duration_seconds": 0.469, - "exit_code": 0, - "timed_out": false, - "stdout": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-up\\postgres-ready.stdout.log", - "stderr": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-up\\postgres-ready.stderr.log" - }, - { - "name": "dev-stand-health", - "executable": "C:\\WINDOWS\\system32\\curl.exe", - "arguments": [ - "-sS", - "--max-time", - "15", - "--write-out", - "\\n%{http_code}", - "http://localhost:37778/health" - ], - "environment_keys": [], - "command": "C:\\WINDOWS\\system32\\curl.exe -sS --max-time 15 --write-out \\n%{http_code} http://localhost:37778/health", - "started_at": "2026-07-10T09:42:06.7227496+00:00", - "finished_at": "2026-07-10T09:42:06.7659945+00:00", - "duration_seconds": 0.043, - "exit_code": 0, - "timed_out": false, - "stdout": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-up\\health.stdout.log", - "stderr": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-up\\health.stderr.log" - }, - { - "name": "dev-stand-api-ready", - "executable": "C:\\WINDOWS\\system32\\curl.exe", - "arguments": [ - "-sS", - "--max-time", - "15", - "--write-out", - "\\n%{http_code}", - "http://localhost:37778/api/ready" - ], - "environment_keys": [], - "command": "C:\\WINDOWS\\system32\\curl.exe -sS --max-time 15 --write-out \\n%{http_code} http://localhost:37778/api/ready", - "started_at": "2026-07-10T09:42:06.7884453+00:00", - "finished_at": "2026-07-10T09:42:06.8308476+00:00", - "duration_seconds": 0.042, - "exit_code": 0, - "timed_out": false, - "stdout": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-up\\api-ready.stdout.log", - "stderr": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-up\\api-ready.stderr.log" - }, - { - "name": "dev-stand-operator-api-health", - "executable": "C:\\WINDOWS\\system32\\curl.exe", - "arguments": [ - "-sS", - "--max-time", - "15", - "--write-out", - "\\n%{http_code}", - "http://localhost:3001/api/health" - ], - "environment_keys": [], - "command": "C:\\WINDOWS\\system32\\curl.exe -sS --max-time 15 --write-out \\n%{http_code} http://localhost:3001/api/health", - "started_at": "2026-07-10T09:42:06.8347616+00:00", - "finished_at": "2026-07-10T09:42:06.9035609+00:00", - "duration_seconds": 0.069, - "exit_code": 0, - "timed_out": false, - "stdout": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-up\\operator-api-health.stdout.log", - "stderr": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-up\\operator-api-health.stderr.log" - }, - { - "name": "dev-stand-operator-api-ready", - "executable": "C:\\WINDOWS\\system32\\curl.exe", - "arguments": [ - "-sS", - "--max-time", - "15", - "--write-out", - "\\n%{http_code}", - "http://localhost:3001/api/ready" - ], - "environment_keys": [], - "command": "C:\\WINDOWS\\system32\\curl.exe -sS --max-time 15 --write-out \\n%{http_code} http://localhost:3001/api/ready", - "started_at": "2026-07-10T09:42:06.9048133+00:00", - "finished_at": "2026-07-10T09:42:06.9506383+00:00", - "duration_seconds": 0.046, - "exit_code": 0, - "timed_out": false, - "stdout": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-up\\operator-api-ready.stdout.log", - "stderr": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-up\\operator-api-ready.stderr.log" - }, - { - "name": "dev-stand-image-inventory", - "executable": "C:\\Program Files\\Docker\\Docker\\resources\\bin\\docker.exe", - "arguments": [ - "ps", - "--filter", - "label=com.docker.compose.project=engram-critical-stand", - "--format", - "{{.ID}}|{{.Label \"com.docker.compose.service\"}}" - ], - "environment_keys": [], - "command": "C:\\Program Files\\Docker\\Docker\\resources\\bin\\docker.exe ps --filter label=com.docker.compose.project=engram-critical-stand --format {{.ID}}|{{.Label \"com.docker.compose.service\"}}", - "started_at": "2026-07-10T09:42:06.9519955+00:00", - "finished_at": "2026-07-10T09:42:07.1488772+00:00", - "duration_seconds": 0.197, - "exit_code": 0, - "timed_out": false, - "stdout": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-up\\image-inventory.stdout.log", - "stderr": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-up\\image-inventory.stderr.log" - }, - { - "name": "dev-stand-image-inspect-operator-console", - "executable": "C:\\Program Files\\Docker\\Docker\\resources\\bin\\docker.exe", - "arguments": [ - "inspect", - "1f9e23d5284a", - "--format", - "{{.Config.Image}}|{{.Image}}" - ], - "environment_keys": [], - "command": "C:\\Program Files\\Docker\\Docker\\resources\\bin\\docker.exe inspect 1f9e23d5284a --format {{.Config.Image}}|{{.Image}}", - "started_at": "2026-07-10T09:42:07.1547396+00:00", - "finished_at": "2026-07-10T09:42:07.3503411+00:00", - "duration_seconds": 0.196, - "exit_code": 0, - "timed_out": false, - "stdout": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-up\\image-inspect-operator-console.stdout.log", - "stderr": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-up\\image-inspect-operator-console.stderr.log" - }, - { - "name": "dev-stand-image-tag-inspect-operator-console", - "executable": "C:\\Program Files\\Docker\\Docker\\resources\\bin\\docker.exe", - "arguments": [ - "image", - "inspect", - "ghcr.io/thebtf/engram-operator-console:main", - "--format", - "{{.Id}}" - ], - "environment_keys": [], - "command": "C:\\Program Files\\Docker\\Docker\\resources\\bin\\docker.exe image inspect ghcr.io/thebtf/engram-operator-console:main --format {{.Id}}", - "started_at": "2026-07-10T09:42:07.3523182+00:00", - "finished_at": "2026-07-10T09:42:07.5620537+00:00", - "duration_seconds": 0.21, - "exit_code": 0, - "timed_out": false, - "stdout": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-up\\image-tag-inspect-operator-console.stdout.log", - "stderr": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-up\\image-tag-inspect-operator-console.stderr.log" - }, - { - "name": "dev-stand-image-inspect-server", - "executable": "C:\\Program Files\\Docker\\Docker\\resources\\bin\\docker.exe", - "arguments": [ - "inspect", - "e6d119b206fa", - "--format", - "{{.Config.Image}}|{{.Image}}" - ], - "environment_keys": [], - "command": "C:\\Program Files\\Docker\\Docker\\resources\\bin\\docker.exe inspect e6d119b206fa --format {{.Config.Image}}|{{.Image}}", - "started_at": "2026-07-10T09:42:07.5652848+00:00", - "finished_at": "2026-07-10T09:42:07.7597138+00:00", - "duration_seconds": 0.194, - "exit_code": 0, - "timed_out": false, - "stdout": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-up\\image-inspect-server.stdout.log", - "stderr": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-up\\image-inspect-server.stderr.log" - }, - { - "name": "dev-stand-image-tag-inspect-server", - "executable": "C:\\Program Files\\Docker\\Docker\\resources\\bin\\docker.exe", - "arguments": [ - "image", - "inspect", - "ghcr.io/thebtf/engram:main", - "--format", - "{{.Id}}" - ], - "environment_keys": [], - "command": "C:\\Program Files\\Docker\\Docker\\resources\\bin\\docker.exe image inspect ghcr.io/thebtf/engram:main --format {{.Id}}", - "started_at": "2026-07-10T09:42:07.7606471+00:00", - "finished_at": "2026-07-10T09:42:07.9511559+00:00", - "duration_seconds": 0.191, - "exit_code": 0, - "timed_out": false, - "stdout": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-up\\image-tag-inspect-server.stdout.log", - "stderr": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-up\\image-tag-inspect-server.stderr.log" - }, - { - "name": "dev-stand-image-inspect-postgres", - "executable": "C:\\Program Files\\Docker\\Docker\\resources\\bin\\docker.exe", - "arguments": [ - "inspect", - "a230a1d63fb3", - "--format", - "{{.Config.Image}}|{{.Image}}" - ], - "environment_keys": [], - "command": "C:\\Program Files\\Docker\\Docker\\resources\\bin\\docker.exe inspect a230a1d63fb3 --format {{.Config.Image}}|{{.Image}}", - "started_at": "2026-07-10T09:42:07.9519107+00:00", - "finished_at": "2026-07-10T09:42:08.1364694+00:00", - "duration_seconds": 0.185, - "exit_code": 0, - "timed_out": false, - "stdout": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-up\\image-inspect-postgres.stdout.log", - "stderr": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-up\\image-inspect-postgres.stderr.log" - }, - { - "name": "dev-stand-image-tag-inspect-postgres", - "executable": "C:\\Program Files\\Docker\\Docker\\resources\\bin\\docker.exe", - "arguments": [ - "image", - "inspect", - "pgvector/pgvector:pg17", - "--format", - "{{.Id}}" - ], - "environment_keys": [], - "command": "C:\\Program Files\\Docker\\Docker\\resources\\bin\\docker.exe image inspect pgvector/pgvector:pg17 --format {{.Id}}", - "started_at": "2026-07-10T09:42:08.1373387+00:00", - "finished_at": "2026-07-10T09:42:08.3825102+00:00", - "duration_seconds": 0.245, - "exit_code": 0, - "timed_out": false, - "stdout": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-up\\image-tag-inspect-postgres.stdout.log", - "stderr": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-up\\image-tag-inspect-postgres.stderr.log" - } -] diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/compose-up.stderr.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/compose-up.stderr.log deleted file mode 100644 index 98f2828e..00000000 --- a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/compose-up.stderr.log +++ /dev/null @@ -1,26 +0,0 @@ - ghcr.io/thebtf/engram-operator-console:main Built - ghcr.io/thebtf/engram:main Built - Network engram-critical-stand_default Creating - Network engram-critical-stand_default Created - Volume engram-critical-stand_pgdata Creating - Volume engram-critical-stand_pgdata Created - Container engram-critical-stand-postgres-1 Creating - Container engram-critical-stand-postgres-1 Created - Container engram-critical-stand-server-1 Creating - Container engram-critical-stand-server-1 Created - Container engram-critical-stand-operator-console-1 Creating - Container engram-critical-stand-operator-console-1 Created - Container engram-critical-stand-postgres-1 Starting - Container engram-critical-stand-postgres-1 Started - Container engram-critical-stand-postgres-1 Waiting - Container engram-critical-stand-postgres-1 Healthy - Container engram-critical-stand-server-1 Starting - Container engram-critical-stand-server-1 Started - Container engram-critical-stand-operator-console-1 Starting - Container engram-critical-stand-operator-console-1 Started - Container engram-critical-stand-postgres-1 Waiting - Container engram-critical-stand-server-1 Waiting - Container engram-critical-stand-operator-console-1 Waiting - Container engram-critical-stand-postgres-1 Healthy - Container engram-critical-stand-operator-console-1 Healthy - Container engram-critical-stand-server-1 Healthy diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/compose-up.stdout.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/compose-up.stdout.log deleted file mode 100644 index dad9404c..00000000 --- a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/compose-up.stdout.log +++ /dev/null @@ -1,194 +0,0 @@ -#1 [internal] load local bake definitions -#1 reading from stdin 1.19kB 0.0s done -#1 DONE 0.0s - -#2 [operator-console internal] load build definition from Dockerfile -#2 transferring dockerfile: 2.75kB 0.0s done -#2 DONE 0.0s - -#3 [server] resolve image config for docker-image://docker.io/docker/dockerfile:1 -#3 ... - -#4 [auth] docker/dockerfile:pull token for registry-1.docker.io -#4 DONE 0.0s - -#3 [server] resolve image config for docker-image://docker.io/docker/dockerfile:1 -#3 DONE 1.8s - -#5 [operator-console] docker-image://docker.io/docker/dockerfile:1@sha256:87999aa3d42bdc6bea60565083ee17e86d1f3339802f543c0d03998580f9cb89 -#5 resolve docker.io/docker/dockerfile:1@sha256:87999aa3d42bdc6bea60565083ee17e86d1f3339802f543c0d03998580f9cb89 0.1s done -#5 CACHED - -#6 [server internal] load metadata for docker.io/library/node:22-bookworm-slim -#6 ... - -#7 [auth] library/node:pull token for registry-1.docker.io -#7 DONE 0.0s - -#8 [auth] library/debian:pull token for registry-1.docker.io -#8 DONE 0.0s - -#9 [server internal] load metadata for docker.io/library/golang:1.25-bookworm -#9 ... - -#10 [server internal] load metadata for docker.io/library/debian:bookworm-slim -#10 DONE 0.8s - -#6 [operator-console internal] load metadata for docker.io/library/node:22-bookworm-slim -#6 DONE 1.0s - -#11 [operator-console internal] load .dockerignore -#11 transferring context: 919B done -#11 DONE 0.0s - -#12 [operator-console internal] load build context -#12 DONE 0.0s - -#13 [operator-console operator-console-build 1/7] FROM docker.io/library/node:22-bookworm-slim@sha256:53ada149d435c38b14476cb57e4a7da73c15595aba79bd6971b547ceb6d018bf -#13 resolve docker.io/library/node:22-bookworm-slim@sha256:53ada149d435c38b14476cb57e4a7da73c15595aba79bd6971b547ceb6d018bf 0.0s done -#13 DONE 0.0s - -#9 [server internal] load metadata for docker.io/library/golang:1.25-bookworm -#9 ... - -#13 [operator-console operator-console-build 1/7] FROM docker.io/library/node:22-bookworm-slim@sha256:53ada149d435c38b14476cb57e4a7da73c15595aba79bd6971b547ceb6d018bf -#13 DONE 0.0s - -#14 [auth] library/golang:pull token for registry-1.docker.io -#14 DONE 0.0s - -#12 [operator-console internal] load build context -#12 transferring context: 6.89kB 0.1s done -#12 DONE 0.2s - -#15 [operator-console operator-console-build 6/7] COPY design/operator-console/contracts /workspace/design/operator-console/contracts -#15 CACHED - -#16 [operator-console operator-console-build 7/7] RUN npm run parity && npm run build -#16 CACHED - -#17 [operator-console operator-console-build 3/7] COPY apps/operator-console/package.json apps/operator-console/package-lock.json ./ -#17 CACHED - -#18 [operator-console operator-console 2/3] WORKDIR /app -#18 CACHED - -#19 [operator-console operator-console-build 4/7] RUN npm ci -#19 CACHED - -#20 [operator-console operator-console-build 5/7] COPY apps/operator-console/ ./ -#20 CACHED - -#21 [operator-console operator-console-build 2/7] WORKDIR /workspace/apps/operator-console -#21 CACHED - -#22 [operator-console operator-console 3/3] COPY --from=operator-console-build /workspace/apps/operator-console/.output ./.output -#22 CACHED - -#23 [operator-console] exporting to image -#23 exporting layers done -#23 exporting manifest sha256:cbba3d866548304ea4cd8b13e551bd26b73caa6cd410a239426828c73ae3e4ae done -#23 exporting config sha256:0302492b244b010f203e4b8a043e657912c71290027e2134d81cb15323563bed done -#23 exporting attestation manifest sha256:4c45bcfad2f713e78f6065d7665d671fcd6bd071ab308301b7a82d2cb8b8caaf 0.1s done -#23 exporting manifest list sha256:74d7c0db215c0a40d716c24f0326a487d7822ec94d0d0edc74b5fcf014face18 -#23 exporting manifest list sha256:74d7c0db215c0a40d716c24f0326a487d7822ec94d0d0edc74b5fcf014face18 0.0s done -#23 naming to ghcr.io/thebtf/engram-operator-console:main done -#23 unpacking to ghcr.io/thebtf/engram-operator-console:main 0.0s done -#23 DONE 0.2s - -#9 [server internal] load metadata for docker.io/library/golang:1.25-bookworm -#9 DONE 1.7s - -#11 [server internal] load .dockerignore -#11 transferring context: 919B done -#11 DONE 0.0s - -#24 [operator-console] resolving provenance for metadata file -#24 DONE 0.0s - -#25 [server internal] load build context -#25 DONE 0.0s - -#26 [server server 1/4] FROM docker.io/library/debian:bookworm-slim@sha256:60eac759739651111db372c07be67863818726f754804b8707c90979bda511df -#26 resolve docker.io/library/debian:bookworm-slim@sha256:60eac759739651111db372c07be67863818726f754804b8707c90979bda511df 0.1s done -#26 DONE 0.1s - -#27 [server builder 1/9] FROM docker.io/library/golang:1.25-bookworm@sha256:a9c020ee3d1508c7be5435c262434e3d3fc1d0e76a11afeb9ddae7d60bc86aa4 -#27 resolve docker.io/library/golang:1.25-bookworm@sha256:a9c020ee3d1508c7be5435c262434e3d3fc1d0e76a11afeb9ddae7d60bc86aa4 0.1s done -#27 DONE 0.1s - -#13 [server operator-console-build 1/7] FROM docker.io/library/node:22-bookworm-slim@sha256:53ada149d435c38b14476cb57e4a7da73c15595aba79bd6971b547ceb6d018bf -#13 resolve docker.io/library/node:22-bookworm-slim@sha256:53ada149d435c38b14476cb57e4a7da73c15595aba79bd6971b547ceb6d018bf 0.1s done -#13 DONE 0.2s - -#25 [server internal] load build context -#25 transferring context: 10.81MB 0.6s done -#25 DONE 0.7s - -#28 [server builder 4/9] COPY go.mod go.sum ./ -#28 CACHED - -#29 [server builder 3/9] RUN apt-get update && apt-get install -y --no-install-recommends ca-certificates git build-essential && rm -rf /var/lib/apt/lists/* -#29 CACHED - -#30 [server builder 2/9] WORKDIR /src -#30 CACHED - -#21 [server operator-console-build 2/7] WORKDIR /workspace/apps/operator-console -#21 CACHED - -#31 [server operator-console-build 6/7] COPY design/operator-console/contracts /workspace/design/operator-console/contracts -#31 CACHED - -#32 [server operator-console-build 7/7] RUN npm run parity && npm run build -#32 CACHED - -#33 [server operator-console-build 3/7] COPY apps/operator-console/package.json apps/operator-console/package-lock.json ./ -#33 CACHED - -#34 [server operator-console-build 5/7] COPY apps/operator-console/ ./ -#34 CACHED - -#35 [server operator-console-build 4/7] RUN npm ci -#35 CACHED - -#36 [server builder 5/9] RUN go mod download -#36 CACHED - -#37 [server operator-console-static-build 1/1] RUN npm run generate -#37 CACHED - -#38 [server builder 6/9] COPY . . -#38 DONE 0.4s - -#39 [server builder 7/9] COPY --from=operator-console-static-build /workspace/apps/operator-console/.output/public/ internal/worker/static/ -#39 DONE 0.2s - -#40 [server builder 8/9] RUN CGO_ENABLED=1 go build -tags fts5 -ldflags "-X main.Version=dev -s -w" -o /out/engram-server ./cmd/engram-server -#40 DONE 15.6s - -#41 [server builder 9/9] RUN CGO_ENABLED=1 go build -tags fts5 -ldflags "-X main.Version=dev -X github.com/thebtf/engram/internal/version.Daemon=dev -s -w" -o /out/engram ./cmd/engram -#41 DONE 8.7s - -#42 [server server 2/4] WORKDIR /app -#42 CACHED - -#43 [server server 3/4] RUN apt-get update && apt-get install -y --no-install-recommends ca-certificates curl && rm -rf /var/lib/apt/lists/* -#43 CACHED - -#44 [server server 4/4] COPY --from=builder /out/engram-server /usr/local/bin/engram-server -#44 CACHED - -#45 [server] exporting to image -#45 exporting layers done -#45 exporting manifest sha256:0ab58bfb7c6cf49cfead3fd3607925a8bf41fb23665b781eafbba8cb938c4f55 done -#45 exporting config sha256:73fa98cc79a6011b45536b29dd4be0522597dd27f9b1ef39ce134db9c977e9ed done -#45 exporting attestation manifest sha256:18de53006f0f9f5c3eb8b720e2ef936438e3bbeb378cef4ce958500775191927 0.1s done -#45 exporting manifest list sha256:a6e55d692ddf31a94b0a1d29a4e615ff509c6dac19eccafca4bda3e51147b38f -#45 exporting manifest list sha256:a6e55d692ddf31a94b0a1d29a4e615ff509c6dac19eccafca4bda3e51147b38f 0.0s done -#45 naming to ghcr.io/thebtf/engram:main done -#45 unpacking to ghcr.io/thebtf/engram:main 0.0s done -#45 DONE 0.2s - -#46 [server] resolving provenance for metadata file -#46 DONE 0.0s diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/health.stderr.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/health.stderr.log deleted file mode 100644 index e69de29b..00000000 diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/health.stdout.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/health.stdout.log deleted file mode 100644 index 9cb44649..00000000 --- a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/health.stdout.log +++ /dev/null @@ -1,3 +0,0 @@ -{"status":"ready","version":"dev"} - -200 \ No newline at end of file diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-inspect-operator-console.stderr.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-inspect-operator-console.stderr.log deleted file mode 100644 index e69de29b..00000000 diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-inspect-operator-console.stdout.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-inspect-operator-console.stdout.log deleted file mode 100644 index ef06e692..00000000 --- a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-inspect-operator-console.stdout.log +++ /dev/null @@ -1 +0,0 @@ -ghcr.io/thebtf/engram-operator-console:main|sha256:74d7c0db215c0a40d716c24f0326a487d7822ec94d0d0edc74b5fcf014face18 diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-inspect-postgres.stderr.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-inspect-postgres.stderr.log deleted file mode 100644 index e69de29b..00000000 diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-inspect-postgres.stdout.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-inspect-postgres.stdout.log deleted file mode 100644 index 0fda45fb..00000000 --- a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-inspect-postgres.stdout.log +++ /dev/null @@ -1 +0,0 @@ -pgvector/pgvector:pg17|sha256:feb68f4f15446397d8cac7f4fe48fe4586de83160d1fc48b46283312d1a33966 diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-inspect-server.stderr.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-inspect-server.stderr.log deleted file mode 100644 index e69de29b..00000000 diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-inspect-server.stdout.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-inspect-server.stdout.log deleted file mode 100644 index a62e1c97..00000000 --- a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-inspect-server.stdout.log +++ /dev/null @@ -1 +0,0 @@ -ghcr.io/thebtf/engram:main|sha256:a6e55d692ddf31a94b0a1d29a4e615ff509c6dac19eccafca4bda3e51147b38f diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-inventory.stderr.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-inventory.stderr.log deleted file mode 100644 index e69de29b..00000000 diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-inventory.stdout.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-inventory.stdout.log deleted file mode 100644 index 6f9b8ff4..00000000 --- a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-inventory.stdout.log +++ /dev/null @@ -1,3 +0,0 @@ -1f9e23d5284a|operator-console -e6d119b206fa|server -a230a1d63fb3|postgres diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-tag-inspect-operator-console.stderr.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-tag-inspect-operator-console.stderr.log deleted file mode 100644 index e69de29b..00000000 diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-tag-inspect-operator-console.stdout.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-tag-inspect-operator-console.stdout.log deleted file mode 100644 index 0b0905aa..00000000 --- a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-tag-inspect-operator-console.stdout.log +++ /dev/null @@ -1 +0,0 @@ -sha256:74d7c0db215c0a40d716c24f0326a487d7822ec94d0d0edc74b5fcf014face18 diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-tag-inspect-postgres.stderr.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-tag-inspect-postgres.stderr.log deleted file mode 100644 index e69de29b..00000000 diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-tag-inspect-postgres.stdout.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-tag-inspect-postgres.stdout.log deleted file mode 100644 index 893200d5..00000000 --- a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-tag-inspect-postgres.stdout.log +++ /dev/null @@ -1 +0,0 @@ -sha256:feb68f4f15446397d8cac7f4fe48fe4586de83160d1fc48b46283312d1a33966 diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-tag-inspect-server.stderr.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-tag-inspect-server.stderr.log deleted file mode 100644 index e69de29b..00000000 diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-tag-inspect-server.stdout.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-tag-inspect-server.stdout.log deleted file mode 100644 index 55054a50..00000000 --- a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-tag-inspect-server.stdout.log +++ /dev/null @@ -1 +0,0 @@ -sha256:a6e55d692ddf31a94b0a1d29a4e615ff509c6dac19eccafca4bda3e51147b38f diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/operator-api-health.stderr.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/operator-api-health.stderr.log deleted file mode 100644 index e69de29b..00000000 diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/operator-api-health.stdout.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/operator-api-health.stdout.log deleted file mode 100644 index 9cb44649..00000000 --- a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/operator-api-health.stdout.log +++ /dev/null @@ -1,3 +0,0 @@ -{"status":"ready","version":"dev"} - -200 \ No newline at end of file diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/operator-api-ready.stderr.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/operator-api-ready.stderr.log deleted file mode 100644 index e69de29b..00000000 diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/operator-api-ready.stdout.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/operator-api-ready.stdout.log deleted file mode 100644 index 36aa5929..00000000 --- a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/operator-api-ready.stdout.log +++ /dev/null @@ -1,3 +0,0 @@ -{"status":"ready"} - -200 \ No newline at end of file diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/postgres-container-id.stderr.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/postgres-container-id.stderr.log deleted file mode 100644 index e69de29b..00000000 diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/postgres-container-id.stdout.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/postgres-container-id.stdout.log deleted file mode 100644 index 74036c05..00000000 --- a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/postgres-container-id.stdout.log +++ /dev/null @@ -1 +0,0 @@ -a230a1d63fb3eb73bed2c8a10b4406c1eca03103538afea7d26c3dcdef915e64 diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/postgres-credential-injection.stderr.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/postgres-credential-injection.stderr.log deleted file mode 100644 index e69de29b..00000000 diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/postgres-credential-injection.stdout.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/postgres-credential-injection.stdout.log deleted file mode 100644 index 46fc6878..00000000 --- a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/postgres-credential-injection.stdout.log +++ /dev/null @@ -1 +0,0 @@ -["POSTGRES_USER=engram","POSTGRES_PASSWORD=REDACTED_SENSITIVE_VALUE","POSTGRES_DB=engram","PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/lib/postgresql/17/bin","GOSU_VERSION=1.19","LANG=en_US.utf8","PG_MAJOR=17","PG_VERSION=17.10-1.pgdg12+1","PGDATA=/var/lib/postgresql/data"] diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/postgres-ready.stderr.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/postgres-ready.stderr.log deleted file mode 100644 index e69de29b..00000000 diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/postgres-ready.stdout.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/postgres-ready.stdout.log deleted file mode 100644 index e9330303..00000000 --- a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/postgres-ready.stdout.log +++ /dev/null @@ -1 +0,0 @@ -/var/run/postgresql:5432 - accepting connections diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/server-container-id.stderr.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/server-container-id.stderr.log deleted file mode 100644 index e69de29b..00000000 diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/server-container-id.stdout.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/server-container-id.stdout.log deleted file mode 100644 index 9222b9d9..00000000 --- a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/server-container-id.stdout.log +++ /dev/null @@ -1 +0,0 @@ -e6d119b206fa9d86afd92507ed27c8fc4a3c519d2bc6b7c2a88318c4adbf1dca diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/server-credential-injection.stderr.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/server-credential-injection.stderr.log deleted file mode 100644 index e69de29b..00000000 diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/server-credential-injection.stdout.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/server-credential-injection.stdout.log deleted file mode 100644 index b4c75ac8..00000000 --- a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/server-credential-injection.stdout.log +++ /dev/null @@ -1 +0,0 @@ -["ENGRAM_VNEXT_F_ENABLED=false","ENGRAM_AUTH_DISABLED=false","ENGRAM_TEMPORAL_TRUTH_ENABLED=false","ENGRAM_CRYSTALLIZATION_ENABLED=false","ENGRAM_VNEXT_ENABLED=false","ENGRAM_WORKER_HOST=0.0.0.0","ENGRAM_LIFECYCLE_ENABLED=false","ENGRAM_EMBEDDING_API_KEY=","ENGRAM_AUTH_BOOTSTRAP_CAPABILITY=REDACTED_SENSITIVE_VALUE","ENGRAM_GRAPH_ENABLED=false","ENGRAM_EMBEDDING_MODEL=text-embedding","ENGRAM_WORKER_PORT=37777","DATABASE_DSN=postgres://engram:REDACTED_SENSITIVE_VALUE@postgres:5432/engram?sslmode=disable","ENGRAM_EMBEDDING_URL=","ENGRAM_VAULT_KEY=","ENGRAM_AUTH_ADMIN_TOKEN=REDACTED_SENSITIVE_VALUE","PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"] diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/summary.json b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/summary.json deleted file mode 100644 index ddf3dd30..00000000 --- a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/summary.json +++ /dev/null @@ -1,92 +0,0 @@ -{ - "schema_version": 1, - "gate": "dev-stand-contract", - "action": "Up", - "run_id": "maker-runtime-1", - "started_at": "2026-07-10T09:41:15.2280294+00:00", - "finished_at": "2026-07-10T09:42:08.3896392+00:00", - "duration_seconds": 53.162, - "verdict": "PASS", - "compose_project": "engram-critical-stand", - "compose_file": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\docker-compose.yml", - "ephemeral_postgres_password_generated": true, - "ephemeral_admin_token_generated": true, - "ephemeral_bootstrap_capability_generated": true, - "ephemeral_credentials_distinct_and_nondefault": true, - "ephemeral_credentials_runtime_injected": true, - "ephemeral_postgres_password_persisted": false, - "ephemeral_admin_token_persisted": false, - "ephemeral_bootstrap_capability_persisted": false, - "exact_image_targets": { - "postgres": "pgvector/pgvector:pg17", - "server": "ghcr.io/thebtf/engram:main", - "operator-console": "ghcr.io/thebtf/engram-operator-console:main" - }, - "actual_images": { - "postgres": "pgvector/pgvector:pg17", - "operator-console": "ghcr.io/thebtf/engram-operator-console:main", - "server": "ghcr.io/thebtf/engram:main" - }, - "actual_image_ids": { - "postgres": "sha256:feb68f4f15446397d8cac7f4fe48fe4586de83160d1fc48b46283312d1a33966", - "operator-console": "sha256:74d7c0db215c0a40d716c24f0326a487d7822ec94d0d0edc74b5fcf014face18", - "server": "sha256:a6e55d692ddf31a94b0a1d29a4e615ff509c6dac19eccafca4bda3e51147b38f" - }, - "tag_image_ids": { - "postgres": "sha256:feb68f4f15446397d8cac7f4fe48fe4586de83160d1fc48b46283312d1a33966", - "operator-console": "sha256:74d7c0db215c0a40d716c24f0326a487d7822ec94d0d0edc74b5fcf014face18", - "server": "sha256:a6e55d692ddf31a94b0a1d29a4e615ff509c6dac19eccafca4bda3e51147b38f" - }, - "liveness_endpoints": [ - { - "name": "health", - "url": "http://localhost:37778/health", - "path_kind": "direct-server", - "contract_kind": "liveness", - "http_status": "200", - "semantic_contract_pass": true - }, - { - "name": "operator-api-health", - "url": "http://localhost:3001/api/health", - "path_kind": "operator-console-proxy", - "contract_kind": "liveness", - "http_status": "200", - "semantic_contract_pass": true - } - ], - "semantic_ready_endpoints": [ - { - "name": "api-ready", - "url": "http://localhost:37778/api/ready", - "path_kind": "direct-server", - "contract_kind": "readiness", - "http_status": "200", - "semantic_contract_pass": true - }, - { - "name": "operator-api-ready", - "url": "http://localhost:3001/api/ready", - "path_kind": "operator-console-proxy", - "contract_kind": "readiness", - "http_status": "200", - "semantic_contract_pass": true - } - ], - "vulnerability_scan": { - "scanner": "docker scout cves", - "severity_gate": [ - "critical", - "high" - ], - "scans": [] - }, - "automatic_failure_cleanup": false, - "residual_checks_performed": false, - "residual_resources_zero": null, - "child_commands": 17, - "nonzero_child_commands": 0, - "commands": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-up\\commands.json", - "errors": [], - "artifact_directory": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-up" -} diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/ready.stderr.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/ready.stderr.log deleted file mode 100644 index e69de29b..00000000 diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/ready.stdout.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/ready.stdout.log deleted file mode 100644 index 8c39430b..00000000 --- a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/ready.stdout.log +++ /dev/null @@ -1,2 +0,0 @@ -dev-stand action=Ready verdict=PASS child_commands=12 nonzero_children=0 -summary=D:\Dev\engram\.agent\worktrees\prc-release-gates\.agent\reports\evidence\production-ready\release-gates-foundation-revision-3\dev-stand-runtime\maker-runtime-1\nested\dev-stand\maker-runtime-1-ready\summary.json diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/scan.stderr.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/scan.stderr.log deleted file mode 100644 index e69de29b..00000000 diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/scan.stdout.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/scan.stdout.log deleted file mode 100644 index e3dffd8c..00000000 --- a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/scan.stdout.log +++ /dev/null @@ -1,2 +0,0 @@ -dev-stand action=Scan verdict=FAIL child_commands=10 nonzero_children=3 -summary=D:\Dev\engram\.agent\worktrees\prc-release-gates\.agent\reports\evidence\production-ready\release-gates-foundation-revision-3\dev-stand-runtime\maker-runtime-1\nested\dev-stand\maker-runtime-1-scan\summary.json diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/summary.json b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/summary.json deleted file mode 100644 index b2291ec5..00000000 --- a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/summary.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "schema_version": 1, - "gate": "dev-stand-lifecycle", - "run_id": "maker-runtime-1", - "started_at": "2026-07-10T09:41:14.4925587+00:00", - "finished_at": "2026-07-10T09:42:43.2740989+00:00", - "duration_seconds": 88.782, - "verdict": "FAIL", - "config": { - "path": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\dev-stand.config.yaml", - "sha256": "1BA20CEE8A3932988B8B503EA8419451165C46823D94A38010F93BC02A6933C3" - }, - "up_attempted": true, - "down_attempted": true, - "cleanup_status": "PASS", - "residual_resources_zero": true, - "actions": [ - { - "action": "Up", - "exit_code": 0, - "summary": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-up\\summary.json", - "verdict": "PASS" - }, - { - "action": "Ready", - "exit_code": 0, - "summary": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-ready\\summary.json", - "verdict": "PASS" - }, - { - "action": "Scan", - "exit_code": 1, - "summary": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-scan\\summary.json", - "verdict": "FAIL" - }, - { - "action": "Down", - "exit_code": 0, - "summary": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\nested\\dev-stand\\maker-runtime-1-down\\summary.json", - "verdict": "PASS" - } - ], - "child_commands": 4, - "nonzero_child_commands": 1, - "commands": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1\\commands.json", - "errors": [ - "dev-stand Scan failed with exit 1", - "Scan: HIGH/CRITICAL vulnerabilities detected in exact image 'ghcr.io/thebtf/engram-operator-console:main' (count=5)", - "Scan: HIGH/CRITICAL vulnerabilities detected in exact image 'pgvector/pgvector:pg17' (count=38)", - "Scan: HIGH/CRITICAL vulnerabilities detected in exact image 'ghcr.io/thebtf/engram:main' (count=13)" - ], - "artifact_directory": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\dev-stand-runtime\\maker-runtime-1" -} diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/up.stderr.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/up.stderr.log deleted file mode 100644 index e69de29b..00000000 diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/up.stdout.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/up.stdout.log deleted file mode 100644 index 1024e056..00000000 --- a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/up.stdout.log +++ /dev/null @@ -1,2 +0,0 @@ -dev-stand action=Up verdict=PASS child_commands=17 nonzero_children=0 -summary=D:\Dev\engram\.agent\worktrees\prc-release-gates\.agent\reports\evidence\production-ready\release-gates-foundation-revision-3\dev-stand-runtime\maker-runtime-1\nested\dev-stand\maker-runtime-1-up\summary.json diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-2/cleanup.json b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-2/cleanup.json deleted file mode 100644 index 5a0828c9..00000000 --- a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-2/cleanup.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "removed": [], - "errors": [], - "surface_clean": true -} diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-2/commands.json b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-2/commands.json deleted file mode 100644 index d6fc5f7a..00000000 --- a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-2/commands.json +++ /dev/null @@ -1,42 +0,0 @@ -[ - { - "name": "openclaw-pre-status", - "executable": "C:\\Program Files\\Git\\cmd\\git.exe", - "arguments": [ - "status", - "--porcelain=v1", - "--untracked-files=all", - "--", - "plugin/openclaw-engram" - ], - "command": "C:\\Program Files\\Git\\cmd\\git.exe status --porcelain=v1 --untracked-files=all -- plugin/openclaw-engram", - "working_directory": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates", - "started_at": "2026-07-10T09:44:06.1795680+00:00", - "finished_at": "2026-07-10T09:44:06.2721056+00:00", - "duration_seconds": 0.093, - "exit_code": 0, - "timed_out": false, - "stdout": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\node-matrix\\pre-openclaw-release-r3-final-2\\pre-status.stdout.log", - "stderr": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\node-matrix\\pre-openclaw-release-r3-final-2\\pre-status.stderr.log" - }, - { - "name": "openclaw-post-cleanup-status", - "executable": "C:\\Program Files\\Git\\cmd\\git.exe", - "arguments": [ - "status", - "--porcelain=v1", - "--untracked-files=all", - "--", - "plugin/openclaw-engram" - ], - "command": "C:\\Program Files\\Git\\cmd\\git.exe status --porcelain=v1 --untracked-files=all -- plugin/openclaw-engram", - "working_directory": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates", - "started_at": "2026-07-10T09:44:06.3000868+00:00", - "finished_at": "2026-07-10T09:44:06.3819196+00:00", - "duration_seconds": 0.082, - "exit_code": 0, - "timed_out": false, - "stdout": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\node-matrix\\pre-openclaw-release-r3-final-2\\post-status.stdout.log", - "stderr": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\node-matrix\\pre-openclaw-release-r3-final-2\\post-status.stderr.log" - } -] diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-2/post-status.stderr.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-2/post-status.stderr.log deleted file mode 100644 index e69de29b..00000000 diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-2/post-status.stdout.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-2/post-status.stdout.log deleted file mode 100644 index e69de29b..00000000 diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-2/pre-status.stderr.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-2/pre-status.stderr.log deleted file mode 100644 index e69de29b..00000000 diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-2/pre-status.stdout.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-2/pre-status.stdout.log deleted file mode 100644 index e69de29b..00000000 diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-2/summary.json b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-2/summary.json deleted file mode 100644 index d08bbd68..00000000 --- a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-2/summary.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "schema_version": 1, - "gate": "node-release-matrix", - "surface": "openclaw", - "run_id": "pre-openclaw-release-r3-final-2", - "started_at": "2026-07-10T09:44:06.1284027+00:00", - "finished_at": "2026-07-10T09:44:06.4387660+00:00", - "duration_seconds": 0.31, - "verdict": "FAIL", - "surface_root": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\plugin\\openclaw-engram", - "pre_surface_clean": true, - "post_surface_clean": true, - "manifests_tracked_and_present": false, - "lock_non_ignored": false, - "manifest_parity": false, - "manifest_hashes": {}, - "required_sequence": [ - "npm-ci", - "npm-typecheck", - "npm-test", - "npm-audit-high", - "npm-pack-dry-run" - ], - "planned_sequence": [ - "npm-ci", - "npm-typecheck", - "npm-test", - "npm-audit-high", - "npm-pack-dry-run" - ], - "executed_sequence": [], - "audit_level": "high", - "package_dry_run": false, - "package_contents_valid": false, - "package_files": null, - "cleanup": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\node-matrix\\pre-openclaw-release-r3-final-2\\cleanup.json", - "commands": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\node-matrix\\pre-openclaw-release-r3-final-2\\commands.json", - "errors": [ - "required OpenClaw manifest is missing: D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\plugin\\openclaw-engram\\package-lock.json" - ], - "artifact_directory": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\node-matrix\\pre-openclaw-release-r3-final-2" -} diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-3/cleanup.json b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-3/cleanup.json deleted file mode 100644 index 5a0828c9..00000000 --- a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-3/cleanup.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "removed": [], - "errors": [], - "surface_clean": true -} diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-3/commands.json b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-3/commands.json deleted file mode 100644 index 8572882c..00000000 --- a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-3/commands.json +++ /dev/null @@ -1,42 +0,0 @@ -[ - { - "name": "openclaw-pre-status", - "executable": "C:\\Program Files\\Git\\cmd\\git.exe", - "arguments": [ - "status", - "--porcelain=v1", - "--untracked-files=all", - "--", - "plugin/openclaw-engram" - ], - "command": "C:\\Program Files\\Git\\cmd\\git.exe status --porcelain=v1 --untracked-files=all -- plugin/openclaw-engram", - "working_directory": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates", - "started_at": "2026-07-10T09:50:09.5080704+00:00", - "finished_at": "2026-07-10T09:50:09.5948998+00:00", - "duration_seconds": 0.087, - "exit_code": 0, - "timed_out": false, - "stdout": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\node-matrix\\pre-openclaw-release-r3-final-3\\pre-status.stdout.log", - "stderr": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\node-matrix\\pre-openclaw-release-r3-final-3\\pre-status.stderr.log" - }, - { - "name": "openclaw-post-cleanup-status", - "executable": "C:\\Program Files\\Git\\cmd\\git.exe", - "arguments": [ - "status", - "--porcelain=v1", - "--untracked-files=all", - "--", - "plugin/openclaw-engram" - ], - "command": "C:\\Program Files\\Git\\cmd\\git.exe status --porcelain=v1 --untracked-files=all -- plugin/openclaw-engram", - "working_directory": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates", - "started_at": "2026-07-10T09:50:09.6234898+00:00", - "finished_at": "2026-07-10T09:50:09.6741576+00:00", - "duration_seconds": 0.051, - "exit_code": 0, - "timed_out": false, - "stdout": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\node-matrix\\pre-openclaw-release-r3-final-3\\post-status.stdout.log", - "stderr": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\node-matrix\\pre-openclaw-release-r3-final-3\\post-status.stderr.log" - } -] diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-3/post-status.stderr.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-3/post-status.stderr.log deleted file mode 100644 index e69de29b..00000000 diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-3/post-status.stdout.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-3/post-status.stdout.log deleted file mode 100644 index e69de29b..00000000 diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-3/pre-status.stderr.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-3/pre-status.stderr.log deleted file mode 100644 index e69de29b..00000000 diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-3/pre-status.stdout.log b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-3/pre-status.stdout.log deleted file mode 100644 index e69de29b..00000000 diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-3/summary.json b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-3/summary.json deleted file mode 100644 index 52c64610..00000000 --- a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-3/summary.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "schema_version": 1, - "gate": "node-release-matrix", - "surface": "openclaw", - "run_id": "pre-openclaw-release-r3-final-3", - "started_at": "2026-07-10T09:50:09.4573378+00:00", - "finished_at": "2026-07-10T09:50:09.7312050+00:00", - "duration_seconds": 0.274, - "verdict": "FAIL", - "surface_root": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\plugin\\openclaw-engram", - "pre_surface_clean": true, - "post_surface_clean": true, - "manifests_tracked_and_present": false, - "lock_non_ignored": false, - "manifest_parity": false, - "manifest_hashes": {}, - "required_sequence": [ - "npm-ci", - "npm-typecheck", - "npm-test", - "npm-audit-high", - "npm-pack-dry-run" - ], - "planned_sequence": [ - "npm-ci", - "npm-typecheck", - "npm-test", - "npm-audit-high", - "npm-pack-dry-run" - ], - "executed_sequence": [], - "audit_level": "high", - "package_dry_run": false, - "package_contents_valid": false, - "package_files": null, - "cleanup": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\node-matrix\\pre-openclaw-release-r3-final-3\\cleanup.json", - "commands": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\node-matrix\\pre-openclaw-release-r3-final-3\\commands.json", - "errors": [ - "required OpenClaw manifest is missing: D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\plugin\\openclaw-engram\\package-lock.json" - ], - "artifact_directory": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\reports\\evidence\\production-ready\\release-gates-foundation-revision-3\\node-matrix\\pre-openclaw-release-r3-final-3" -} diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/ownership/db-bulkops-rejected-negative.json b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/ownership/db-bulkops-rejected-negative.json deleted file mode 100644 index c7df4beb..00000000 --- a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/ownership/db-bulkops-rejected-negative.json +++ /dev/null @@ -1,673 +0,0 @@ -{ - "schema_version": 2, - "gate": "plan-path-ownership", - "mode": "Diff", - "verdict": "FAIL", - "started_at": "2026-07-10T09:48:51.8929495+00:00", - "finished_at": "2026-07-10T09:48:55.6700909+00:00", - "duration_seconds": 3.777, - "plan": { - "path": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\plans\\2026-07-10-engram-production-ready-master-plan.md", - "expected_sha256": "d371e94dff1ea12767b9d0832240cb6caf52c6c3bbe2209fe4280159c4f03c52", - "observed_sha256": "d371e94dff1ea12767b9d0832240cb6caf52c6c3bbe2209fe4280159c4f03c52", - "hash_match": true, - "ledger_verdict": "PASS" - }, - "state": { - "path": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\plans\\2026-07-10-engram-production-ready-ownership-state.json", - "sha256": "1419e2f7e5236e21dd9a2d8c3271ced2def16dc0a798435ad5a9401fe522d55b", - "verdict": "PASS", - "plan_sha256": "d371e94dff1ea12767b9d0832240cb6caf52c6c3bbe2209fe4280159c4f03c52" - }, - "slice": { - "name": "DB-BULKOPS", - "row_count": 1, - "declarations": [ - { - "owner": "DB-BULKOPS", - "branch": "work/prc-db-bulkops", - "path": "internal/bulkops/facade.go", - "display": "internal/bulkops/facade.go", - "kind": "exact", - "line": 7 - }, - { - "owner": "DB-BULKOPS", - "branch": "work/prc-db-bulkops", - "path": "internal/bulkops/facade_test.go", - "display": "internal/bulkops/facade_test.go", - "kind": "exact", - "line": 7 - }, - { - "owner": "DB-BULKOPS", - "branch": "work/prc-db-bulkops", - "path": "internal/bulkops/rollback.go", - "display": "internal/bulkops/rollback.go", - "kind": "exact", - "line": 7 - }, - { - "owner": "DB-BULKOPS", - "branch": "work/prc-db-bulkops", - "path": "internal/bulkops/rollback_test.go", - "display": "internal/bulkops/rollback_test.go", - "kind": "exact", - "line": 7 - }, - { - "owner": "DB-BULKOPS", - "branch": "work/prc-db-bulkops", - "path": "internal/db/gorm/candidate_store.go", - "display": "internal/db/gorm/candidate_store.go", - "kind": "exact", - "line": 7 - }, - { - "owner": "DB-BULKOPS", - "branch": "work/prc-db-bulkops", - "path": "internal/db/gorm/candidate_store_test.go", - "display": "internal/db/gorm/candidate_store_test.go", - "kind": "exact", - "line": 7 - }, - { - "owner": "DB-BULKOPS", - "branch": "work/prc-db-bulkops", - "path": "internal/mcp/tools_bulkops.go", - "display": "internal/mcp/tools_bulkops.go", - "kind": "exact", - "line": 7 - }, - { - "owner": "DB-BULKOPS", - "branch": "work/prc-db-bulkops", - "path": "internal/mcp/tools_dryrun_test.go", - "display": "internal/mcp/tools_dryrun_test.go", - "kind": "exact", - "line": 7 - }, - { - "owner": "DB-BULKOPS", - "branch": "work/prc-db-bulkops", - "path": "pkg/models/snapshot.go", - "display": "pkg/models/snapshot.go", - "kind": "exact", - "line": 7 - }, - { - "owner": "DB-BULKOPS", - "branch": "work/prc-db-bulkops", - "path": ".agent/reports/2026-07-10-db-bulkops-capture-lock-rework-maker.md", - "display": ".agent/reports/2026-07-10-db-bulkops-capture-lock-rework-maker.md", - "kind": "exact", - "line": 7 - }, - { - "owner": "DB-BULKOPS", - "branch": "work/prc-db-bulkops", - "path": ".agent/reports/2026-07-10-db-bulkops-sibling-rework-maker.md", - "display": ".agent/reports/2026-07-10-db-bulkops-sibling-rework-maker.md", - "kind": "exact", - "line": 7 - }, - { - "owner": "DB-BULKOPS", - "branch": "work/prc-db-bulkops", - "path": ".agent/specs/production-ready-db-bulkops/evidence", - "display": ".agent/specs/production-ready-db-bulkops/evidence/**", - "kind": "prefix", - "line": 7 - }, - { - "owner": "DB-BULKOPS", - "branch": "work/prc-db-bulkops", - "path": ".agent/reports/evidence/production-ready/db-bulkops-sibling-rework", - "display": ".agent/reports/evidence/production-ready/db-bulkops-sibling-rework/**", - "kind": "prefix", - "line": 7 - } - ], - "evidence_namespace": { - "kind": "evidence", - "path": ".agent/reports/evidence/production-ready/db-bulkops-sibling-rework", - "display": ".agent/reports/evidence/production-ready/db-bulkops-sibling-rework/**", - "match_kind": "prefix", - "policy": "literal-row-exception" - }, - "report_namespace": { - "kind": "report", - "path": ".agent/reports/2026-07-10-db-bulkops-sibling-rework-maker.md", - "display": ".agent/reports/2026-07-10-db-bulkops-sibling-rework-maker.md", - "match_kind": "exact", - "policy": "literal-row-exception" - } - }, - "git": { - "repository": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates", - "requested_base": "2b085de663d5ba9dfa97adf9ee58de062ee0997c", - "resolved_base": "2b085de663d5ba9dfa97adf9ee58de062ee0997c", - "requested_head": "68b2ce5835c7c6efdf1c68da9eedcb8d9c3837ef", - "resolved_head": "68b2ce5835c7c6efdf1c68da9eedcb8d9c3837ef", - "base_is_ancestor": true, - "name_status_command": "git -c core.quotepath=false diff --name-status --find-renames --find-copies 2b085de663d5ba9dfa97adf9ee58de062ee0997c..68b2ce5835c7c6efdf1c68da9eedcb8d9c3837ef --", - "raw_name_status": [ - "A\t.agent/reports/2026-07-10-db-bulkops-capture-lock-rework-maker.md", - "A\t.agent/reports/2026-07-10-db-bulkops-sibling-rework-maker.md", - "A\t.agent/reports/evidence/production-ready/db-bulkops-sibling-rework/DB-BULKOPS-SIBLING-REWORK.final.json", - "A\t.agent/reports/evidence/production-ready/db-bulkops-sibling-rework/DB-BULKOPS-SIBLING-REWORK.tdd.json", - "A\t.agent/reports/evidence/production-ready/db-bulkops-sibling-rework/H1-candidate-review-after.red.json", - "A\t.agent/reports/evidence/production-ready/db-bulkops-sibling-rework/M1-nil-facade-normalization.red.json", - "A\t.agent/reports/evidence/production-ready/db-bulkops-sibling-rework/M2-all-row-failure-audit.red.json", - "A\t.agent/specs/production-ready-db-bulkops/evidence/DB-BULKOPS-CAPTURE-LOCK-REWORK.red.json", - "A\t.agent/specs/production-ready-db-bulkops/evidence/DB-BULKOPS-CAPTURE-LOCK-REWORK.tdd.json", - "A\t.agent/specs/production-ready-db-bulkops/evidence/DB-BULKOPS-DRY-RUN-NORMALIZATION.red.json", - "A\t.agent/specs/production-ready-db-bulkops/evidence/DB-BULKOPS-FINAL.cover.out", - "A\t.agent/specs/production-ready-db-bulkops/evidence/DB-BULKOPS-LEGACY-CANDIDATE-NO-AFTER.red.json", - "A\t.agent/specs/production-ready-db-bulkops/evidence/DB-BULKOPS-ROLLBACK-CANDIDATE-CONFLICT.red.json", - "M\tinternal/bulkops/facade.go", - "M\tinternal/bulkops/facade_test.go", - "M\tinternal/bulkops/rollback.go", - "M\tinternal/bulkops/rollback_test.go", - "M\tinternal/db/gorm/candidate_store.go", - "M\tinternal/db/gorm/candidate_store_test.go", - "M\tinternal/mcp/tools_bulkops.go", - "M\tinternal/mcp/tools_dryrun_test.go", - "M\tpkg/models/snapshot.go" - ] - }, - "counts": { - "diff_entries": 22, - "changed_paths": 22, - "violations": 0, - "errors": 4 - }, - "diff_entries": [ - { - "status": "A", - "paths": [ - ".agent/reports/2026-07-10-db-bulkops-capture-lock-rework-maker.md" - ], - "raw": "A\t.agent/reports/2026-07-10-db-bulkops-capture-lock-rework-maker.md" - }, - { - "status": "A", - "paths": [ - ".agent/reports/2026-07-10-db-bulkops-sibling-rework-maker.md" - ], - "raw": "A\t.agent/reports/2026-07-10-db-bulkops-sibling-rework-maker.md" - }, - { - "status": "A", - "paths": [ - ".agent/reports/evidence/production-ready/db-bulkops-sibling-rework/DB-BULKOPS-SIBLING-REWORK.final.json" - ], - "raw": "A\t.agent/reports/evidence/production-ready/db-bulkops-sibling-rework/DB-BULKOPS-SIBLING-REWORK.final.json" - }, - { - "status": "A", - "paths": [ - ".agent/reports/evidence/production-ready/db-bulkops-sibling-rework/DB-BULKOPS-SIBLING-REWORK.tdd.json" - ], - "raw": "A\t.agent/reports/evidence/production-ready/db-bulkops-sibling-rework/DB-BULKOPS-SIBLING-REWORK.tdd.json" - }, - { - "status": "A", - "paths": [ - ".agent/reports/evidence/production-ready/db-bulkops-sibling-rework/H1-candidate-review-after.red.json" - ], - "raw": "A\t.agent/reports/evidence/production-ready/db-bulkops-sibling-rework/H1-candidate-review-after.red.json" - }, - { - "status": "A", - "paths": [ - ".agent/reports/evidence/production-ready/db-bulkops-sibling-rework/M1-nil-facade-normalization.red.json" - ], - "raw": "A\t.agent/reports/evidence/production-ready/db-bulkops-sibling-rework/M1-nil-facade-normalization.red.json" - }, - { - "status": "A", - "paths": [ - ".agent/reports/evidence/production-ready/db-bulkops-sibling-rework/M2-all-row-failure-audit.red.json" - ], - "raw": "A\t.agent/reports/evidence/production-ready/db-bulkops-sibling-rework/M2-all-row-failure-audit.red.json" - }, - { - "status": "A", - "paths": [ - ".agent/specs/production-ready-db-bulkops/evidence/DB-BULKOPS-CAPTURE-LOCK-REWORK.red.json" - ], - "raw": "A\t.agent/specs/production-ready-db-bulkops/evidence/DB-BULKOPS-CAPTURE-LOCK-REWORK.red.json" - }, - { - "status": "A", - "paths": [ - ".agent/specs/production-ready-db-bulkops/evidence/DB-BULKOPS-CAPTURE-LOCK-REWORK.tdd.json" - ], - "raw": "A\t.agent/specs/production-ready-db-bulkops/evidence/DB-BULKOPS-CAPTURE-LOCK-REWORK.tdd.json" - }, - { - "status": "A", - "paths": [ - ".agent/specs/production-ready-db-bulkops/evidence/DB-BULKOPS-DRY-RUN-NORMALIZATION.red.json" - ], - "raw": "A\t.agent/specs/production-ready-db-bulkops/evidence/DB-BULKOPS-DRY-RUN-NORMALIZATION.red.json" - }, - { - "status": "A", - "paths": [ - ".agent/specs/production-ready-db-bulkops/evidence/DB-BULKOPS-FINAL.cover.out" - ], - "raw": "A\t.agent/specs/production-ready-db-bulkops/evidence/DB-BULKOPS-FINAL.cover.out" - }, - { - "status": "A", - "paths": [ - ".agent/specs/production-ready-db-bulkops/evidence/DB-BULKOPS-LEGACY-CANDIDATE-NO-AFTER.red.json" - ], - "raw": "A\t.agent/specs/production-ready-db-bulkops/evidence/DB-BULKOPS-LEGACY-CANDIDATE-NO-AFTER.red.json" - }, - { - "status": "A", - "paths": [ - ".agent/specs/production-ready-db-bulkops/evidence/DB-BULKOPS-ROLLBACK-CANDIDATE-CONFLICT.red.json" - ], - "raw": "A\t.agent/specs/production-ready-db-bulkops/evidence/DB-BULKOPS-ROLLBACK-CANDIDATE-CONFLICT.red.json" - }, - { - "status": "M", - "paths": [ - "internal/bulkops/facade.go" - ], - "raw": "M\tinternal/bulkops/facade.go" - }, - { - "status": "M", - "paths": [ - "internal/bulkops/facade_test.go" - ], - "raw": "M\tinternal/bulkops/facade_test.go" - }, - { - "status": "M", - "paths": [ - "internal/bulkops/rollback.go" - ], - "raw": "M\tinternal/bulkops/rollback.go" - }, - { - "status": "M", - "paths": [ - "internal/bulkops/rollback_test.go" - ], - "raw": "M\tinternal/bulkops/rollback_test.go" - }, - { - "status": "M", - "paths": [ - "internal/db/gorm/candidate_store.go" - ], - "raw": "M\tinternal/db/gorm/candidate_store.go" - }, - { - "status": "M", - "paths": [ - "internal/db/gorm/candidate_store_test.go" - ], - "raw": "M\tinternal/db/gorm/candidate_store_test.go" - }, - { - "status": "M", - "paths": [ - "internal/mcp/tools_bulkops.go" - ], - "raw": "M\tinternal/mcp/tools_bulkops.go" - }, - { - "status": "M", - "paths": [ - "internal/mcp/tools_dryrun_test.go" - ], - "raw": "M\tinternal/mcp/tools_dryrun_test.go" - }, - { - "status": "M", - "paths": [ - "pkg/models/snapshot.go" - ], - "raw": "M\tpkg/models/snapshot.go" - } - ], - "changed_paths": [ - { - "status": "A", - "path": ".agent/reports/2026-07-10-db-bulkops-capture-lock-rework-maker.md", - "allowed": true, - "allowed_by": [ - "slice-declaration" - ], - "ownership_matches": [ - ".agent/reports/2026-07-10-db-bulkops-capture-lock-rework-maker.md" - ] - }, - { - "status": "A", - "path": ".agent/reports/2026-07-10-db-bulkops-sibling-rework-maker.md", - "allowed": true, - "allowed_by": [ - "slice-declaration", - "report-namespace" - ], - "ownership_matches": [ - ".agent/reports/2026-07-10-db-bulkops-sibling-rework-maker.md" - ] - }, - { - "status": "A", - "path": ".agent/reports/evidence/production-ready/db-bulkops-sibling-rework/DB-BULKOPS-SIBLING-REWORK.final.json", - "allowed": true, - "allowed_by": [ - "slice-declaration", - "evidence-namespace" - ], - "ownership_matches": [ - ".agent/reports/evidence/production-ready/db-bulkops-sibling-rework/**" - ] - }, - { - "status": "A", - "path": ".agent/reports/evidence/production-ready/db-bulkops-sibling-rework/DB-BULKOPS-SIBLING-REWORK.tdd.json", - "allowed": true, - "allowed_by": [ - "slice-declaration", - "evidence-namespace" - ], - "ownership_matches": [ - ".agent/reports/evidence/production-ready/db-bulkops-sibling-rework/**" - ] - }, - { - "status": "A", - "path": ".agent/reports/evidence/production-ready/db-bulkops-sibling-rework/H1-candidate-review-after.red.json", - "allowed": true, - "allowed_by": [ - "slice-declaration", - "evidence-namespace" - ], - "ownership_matches": [ - ".agent/reports/evidence/production-ready/db-bulkops-sibling-rework/**" - ] - }, - { - "status": "A", - "path": ".agent/reports/evidence/production-ready/db-bulkops-sibling-rework/M1-nil-facade-normalization.red.json", - "allowed": true, - "allowed_by": [ - "slice-declaration", - "evidence-namespace" - ], - "ownership_matches": [ - ".agent/reports/evidence/production-ready/db-bulkops-sibling-rework/**" - ] - }, - { - "status": "A", - "path": ".agent/reports/evidence/production-ready/db-bulkops-sibling-rework/M2-all-row-failure-audit.red.json", - "allowed": true, - "allowed_by": [ - "slice-declaration", - "evidence-namespace" - ], - "ownership_matches": [ - ".agent/reports/evidence/production-ready/db-bulkops-sibling-rework/**" - ] - }, - { - "status": "A", - "path": ".agent/specs/production-ready-db-bulkops/evidence/DB-BULKOPS-CAPTURE-LOCK-REWORK.red.json", - "allowed": true, - "allowed_by": [ - "slice-declaration" - ], - "ownership_matches": [ - ".agent/specs/production-ready-db-bulkops/evidence/**" - ] - }, - { - "status": "A", - "path": ".agent/specs/production-ready-db-bulkops/evidence/DB-BULKOPS-CAPTURE-LOCK-REWORK.tdd.json", - "allowed": true, - "allowed_by": [ - "slice-declaration" - ], - "ownership_matches": [ - ".agent/specs/production-ready-db-bulkops/evidence/**" - ] - }, - { - "status": "A", - "path": ".agent/specs/production-ready-db-bulkops/evidence/DB-BULKOPS-DRY-RUN-NORMALIZATION.red.json", - "allowed": true, - "allowed_by": [ - "slice-declaration" - ], - "ownership_matches": [ - ".agent/specs/production-ready-db-bulkops/evidence/**" - ] - }, - { - "status": "A", - "path": ".agent/specs/production-ready-db-bulkops/evidence/DB-BULKOPS-FINAL.cover.out", - "allowed": true, - "allowed_by": [ - "slice-declaration" - ], - "ownership_matches": [ - ".agent/specs/production-ready-db-bulkops/evidence/**" - ] - }, - { - "status": "A", - "path": ".agent/specs/production-ready-db-bulkops/evidence/DB-BULKOPS-LEGACY-CANDIDATE-NO-AFTER.red.json", - "allowed": true, - "allowed_by": [ - "slice-declaration" - ], - "ownership_matches": [ - ".agent/specs/production-ready-db-bulkops/evidence/**" - ] - }, - { - "status": "A", - "path": ".agent/specs/production-ready-db-bulkops/evidence/DB-BULKOPS-ROLLBACK-CANDIDATE-CONFLICT.red.json", - "allowed": true, - "allowed_by": [ - "slice-declaration" - ], - "ownership_matches": [ - ".agent/specs/production-ready-db-bulkops/evidence/**" - ] - }, - { - "status": "M", - "path": "internal/bulkops/facade.go", - "allowed": true, - "allowed_by": [ - "slice-declaration" - ], - "ownership_matches": [ - "internal/bulkops/facade.go" - ] - }, - { - "status": "M", - "path": "internal/bulkops/facade_test.go", - "allowed": true, - "allowed_by": [ - "slice-declaration" - ], - "ownership_matches": [ - "internal/bulkops/facade_test.go" - ] - }, - { - "status": "M", - "path": "internal/bulkops/rollback.go", - "allowed": true, - "allowed_by": [ - "slice-declaration" - ], - "ownership_matches": [ - "internal/bulkops/rollback.go" - ] - }, - { - "status": "M", - "path": "internal/bulkops/rollback_test.go", - "allowed": true, - "allowed_by": [ - "slice-declaration" - ], - "ownership_matches": [ - "internal/bulkops/rollback_test.go" - ] - }, - { - "status": "M", - "path": "internal/db/gorm/candidate_store.go", - "allowed": true, - "allowed_by": [ - "slice-declaration" - ], - "ownership_matches": [ - "internal/db/gorm/candidate_store.go" - ] - }, - { - "status": "M", - "path": "internal/db/gorm/candidate_store_test.go", - "allowed": true, - "allowed_by": [ - "slice-declaration" - ], - "ownership_matches": [ - "internal/db/gorm/candidate_store_test.go" - ] - }, - { - "status": "M", - "path": "internal/mcp/tools_bulkops.go", - "allowed": true, - "allowed_by": [ - "slice-declaration" - ], - "ownership_matches": [ - "internal/mcp/tools_bulkops.go" - ] - }, - { - "status": "M", - "path": "internal/mcp/tools_dryrun_test.go", - "allowed": true, - "allowed_by": [ - "slice-declaration" - ], - "ownership_matches": [ - "internal/mcp/tools_dryrun_test.go" - ] - }, - { - "status": "M", - "path": "pkg/models/snapshot.go", - "allowed": true, - "allowed_by": [ - "slice-declaration" - ], - "ownership_matches": [ - "pkg/models/snapshot.go" - ] - } - ], - "violations": [], - "epoch_authority": { - "verdict": "FAIL", - "evaluated": [ - { - "path": "internal/bulkops/facade_test.go", - "current_owner": "DB-BULKOPS", - "owner_pass": true, - "transition_kind": "integration", - "required_base_sha": "", - "base_pass": true - }, - { - "path": "internal/bulkops/facade.go", - "current_owner": "DB-BULKOPS", - "owner_pass": true, - "transition_kind": "integration", - "required_base_sha": "", - "base_pass": true - }, - { - "path": "internal/bulkops/rollback_test.go", - "current_owner": "DB-BULKOPS", - "owner_pass": true, - "transition_kind": "integration", - "required_base_sha": "", - "base_pass": true - }, - { - "path": "internal/db/gorm/candidate_store_test.go", - "current_owner": "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK", - "owner_pass": false, - "transition_kind": "rework", - "required_base_sha": "68b2ce5835c7c6efdf1c68da9eedcb8d9c3837ef", - "base_pass": null - }, - { - "path": "internal/db/gorm/candidate_store.go", - "current_owner": "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK", - "owner_pass": false, - "transition_kind": "rework", - "required_base_sha": "68b2ce5835c7c6efdf1c68da9eedcb8d9c3837ef", - "base_pass": null - }, - { - "path": "internal/mcp/tools_bulkops.go", - "current_owner": "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK", - "owner_pass": false, - "transition_kind": "rework", - "required_base_sha": "68b2ce5835c7c6efdf1c68da9eedcb8d9c3837ef", - "base_pass": null - }, - { - "path": "internal/mcp/tools_dryrun_test.go", - "current_owner": "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK", - "owner_pass": false, - "transition_kind": "rework", - "required_base_sha": "68b2ce5835c7c6efdf1c68da9eedcb8d9c3837ef", - "base_pass": null - }, - { - "path": "pkg/models/snapshot.go", - "current_owner": "DB-BULKOPS", - "owner_pass": true, - "transition_kind": "integration", - "required_base_sha": "", - "base_pass": true - } - ], - "errors": [ - "changed epoch path 'internal/db/gorm/candidate_store_test.go' current owner is 'DB-BULKOPS-BEHAVIORAL-EDGE-REWORK', not 'DB-BULKOPS'", - "changed epoch path 'internal/db/gorm/candidate_store.go' current owner is 'DB-BULKOPS-BEHAVIORAL-EDGE-REWORK', not 'DB-BULKOPS'", - "changed epoch path 'internal/mcp/tools_bulkops.go' current owner is 'DB-BULKOPS-BEHAVIORAL-EDGE-REWORK', not 'DB-BULKOPS'", - "changed epoch path 'internal/mcp/tools_dryrun_test.go' current owner is 'DB-BULKOPS-BEHAVIORAL-EDGE-REWORK', not 'DB-BULKOPS'" - ] - }, - "errors": [ - "epoch: changed epoch path 'internal/db/gorm/candidate_store_test.go' current owner is 'DB-BULKOPS-BEHAVIORAL-EDGE-REWORK', not 'DB-BULKOPS'", - "epoch: changed epoch path 'internal/db/gorm/candidate_store.go' current owner is 'DB-BULKOPS-BEHAVIORAL-EDGE-REWORK', not 'DB-BULKOPS'", - "epoch: changed epoch path 'internal/mcp/tools_bulkops.go' current owner is 'DB-BULKOPS-BEHAVIORAL-EDGE-REWORK', not 'DB-BULKOPS'", - "epoch: changed epoch path 'internal/mcp/tools_dryrun_test.go' current owner is 'DB-BULKOPS-BEHAVIORAL-EDGE-REWORK', not 'DB-BULKOPS'" - ] -} diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/ownership/ledger-final.json b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/ownership/ledger-final.json deleted file mode 100644 index 6bdb4bab..00000000 --- a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/ownership/ledger-final.json +++ /dev/null @@ -1,4121 +0,0 @@ -{ - "schema_version": 2, - "gate": "plan-path-ownership", - "mode": "Ledger", - "verdict": "PASS", - "started_at": "2026-07-10T09:48:18.8335376+00:00", - "finished_at": "2026-07-10T09:48:22.5071934+00:00", - "duration_seconds": 3.674, - "plan": { - "path": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\plans\\2026-07-10-engram-production-ready-master-plan.md", - "expected_sha256": "d371e94dff1ea12767b9d0832240cb6caf52c6c3bbe2209fe4280159c4f03c52", - "observed_sha256": "d371e94dff1ea12767b9d0832240cb6caf52c6c3bbe2209fe4280159c4f03c52", - "hash_match": true - }, - "state": { - "path": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\plans\\2026-07-10-engram-production-ready-ownership-state.json", - "sha256": "1419e2f7e5236e21dd9a2d8c3271ced2def16dc0a798435ad5a9401fe522d55b", - "verdict": "PASS", - "plan_sha256": "d371e94dff1ea12767b9d0832240cb6caf52c6c3bbe2209fe4280159c4f03c52" - }, - "counts": { - "maker_slices": 47, - "declarations": 318, - "exact_paths": 310, - "prefixes": 8, - "repeated_exact_paths": 32, - "prefix_intersections": 2, - "undeclared_prefix_intersections": 0, - "declared_epochs": 32, - "state_epochs": 32, - "errors": 0 - }, - "slices": [ - { - "slice": "PLAN-GOVERNANCE", - "branch": "work/prc-release-gates", - "paths": [ - ".agent/plans/2026-07-10-engram-production-ready-master-plan.md", - ".agent/plans/2026-07-10-engram-production-ready-ownership-state.json" - ], - "line": 6 - }, - { - "slice": "DB-BULKOPS", - "branch": "work/prc-db-bulkops", - "paths": [ - "internal/bulkops/facade.go", - "internal/bulkops/facade_test.go", - "internal/bulkops/rollback.go", - "internal/bulkops/rollback_test.go", - "internal/db/gorm/candidate_store.go", - "internal/db/gorm/candidate_store_test.go", - "internal/mcp/tools_bulkops.go", - "internal/mcp/tools_dryrun_test.go", - "pkg/models/snapshot.go", - ".agent/reports/2026-07-10-db-bulkops-capture-lock-rework-maker.md", - ".agent/reports/2026-07-10-db-bulkops-sibling-rework-maker.md", - ".agent/specs/production-ready-db-bulkops/evidence/**", - ".agent/reports/evidence/production-ready/db-bulkops-sibling-rework/**" - ], - "line": 7 - }, - { - "slice": "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK", - "branch": "work/prc-db-bulkops-behavioral-edge-rework", - "paths": [ - "internal/db/gorm/candidate_store.go", - "internal/db/gorm/candidate_store_test.go", - "internal/mcp/tools_bulkops.go", - "internal/mcp/tools_dryrun_test.go", - ".agent/reports/2026-07-10-db-bulkops-behavioral-edge-rework-maker.md", - ".agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/**" - ], - "line": 8 - }, - { - "slice": "DB-GOVERNANCE", - "branch": "work/prc-db-governance", - "paths": [ - "internal/db/gorm/candidate_store.go", - "internal/db/gorm/candidate_store_test.go", - "internal/db/gorm/rule_arbiter_store_test.go", - "internal/db/gorm/rule_governance_store.go", - "internal/db/gorm/rule_governance_store_test.go", - "internal/db/gorm/rule_governance_rg3_store_test.go", - "internal/db/gorm/migration_rule_governance.go", - "internal/db/gorm/migration_rule_arbiter.go", - "internal/db/gorm/migration_rule_governance_snapshot_statuses.go" - ], - "line": 9 - }, - { - "slice": "CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK", - "branch": "work/prc-candidate-review-snapshot-rollback", - "paths": [ - "internal/reviewpacket/candidate.go", - "internal/reviewpacket/candidate_test.go", - "internal/db/gorm/candidate_store.go", - "internal/db/gorm/candidate_store_test.go", - "internal/db/gorm/snapshot_store.go", - "internal/db/gorm/snapshot_store_test.go", - "internal/bulkops/rollback_test.go", - "tests/critical/candidate_review/candidate_review_snapshot_rollback_test.go" - ], - "line": 10 - }, - { - "slice": "INGEST-DOC-SNAPSHOT-DEMOLITION", - "branch": "work/prc-ingest-doc-snapshot-demolition", - "paths": [ - "internal/bulkops/facade.go", - "internal/bulkops/facade_test.go", - "pkg/models/snapshot.go", - "pkg/models/snapshot_test.go", - "internal/mcp/ingest_snapshot_contract_test.go" - ], - "line": 12 - }, - { - "slice": "DB-AUTH", - "branch": "work/prc-db-auth", - "paths": [ - "internal/db/gorm/user_store.go", - "internal/db/gorm/user_store_test.go", - "internal/worker/auth_handlers.go", - "internal/worker/auth_handlers_lifecycle_test.go" - ], - "line": 13 - }, - { - "slice": "AUTH-BOOTSTRAP-SECURITY", - "branch": "work/prc-auth-bootstrap-security", - "paths": [ - "internal/config/config.go", - "internal/config/config_test.go", - "internal/config/envnames.go", - "internal/db/gorm/user_store.go", - "internal/worker/middleware.go", - "internal/worker/middleware_test.go", - "internal/worker/auth_handlers.go", - "internal/worker/auth_bootstrap_limiter.go", - "internal/worker/auth_bootstrap_limiter_test.go", - "internal/worker/auth_bootstrap_security_test.go", - "internal/worker/service.go", - "tests/critical/auth_bootstrap/first_admin_bootstrap_test.go", - "scripts/production-smoke/customer/run-auth-bootstrap-adversary.ps1" - ], - "line": 14 - }, - { - "slice": "DURABLE-AUDIT-BOUNDARIES", - "branch": "work/prc-durable-audit-boundaries", - "paths": [ - "internal/db/gorm/domain_owner_store.go", - "internal/db/gorm/domain_owner_store_test.go", - "internal/db/gorm/user_store.go", - "internal/worker/auth_handlers.go", - "internal/worker/auth_audit_durability_test.go", - "internal/bulkops/facade.go", - "internal/bulkops/audit_durability_test.go", - "scripts/production-smoke/customer/run-durable-audit-faults.ps1" - ], - "line": 15 - }, - { - "slice": "DB-CRYSTALLIZATION", - "branch": "work/prc-db-crystallization", - "paths": [ - "internal/worker/handlers_hooks_crystallization_integration_test.go" - ], - "line": 16 - }, - { - "slice": "DB-EMBEDDING-STATS", - "branch": "work/prc-db-embedding-stats", - "paths": [ - "internal/embedding/store.go", - "internal/embedding/store_stats_test.go" - ], - "line": 17 - }, - { - "slice": "DB-REAPER", - "branch": "work/prc-db-reaper", - "paths": [ - "internal/worker/reaper/reaper.go", - "internal/worker/reaper/reaper_test.go" - ], - "line": 18 - }, - { - "slice": "SECURITY-TOOLCHAIN", - "branch": "work/prc-security-toolchain", - "paths": [ - "go.mod", - "go.sum", - "Dockerfile" - ], - "line": 19 - }, - { - "slice": "RELEASE-GATES", - "branch": "work/prc-release-gates", - "paths": [ - ".agent/critical-suite.config.yaml", - ".agent/dev-stand.config.yaml", - ".github/workflows/test.yml", - "scripts/production-gates/assert-coverage.ps1", - "scripts/production-gates/assert-go-test-json.ps1", - "scripts/production-gates/assert-plan-path-ownership.ps1", - "scripts/production-gates/cleanup-db-sessions.ps1", - "scripts/production-gates/run-critical-suite.ps1", - "scripts/production-gates/run-db-suite.ps1", - "scripts/production-gates/run-dev-stand.ps1", - "scripts/production-gates/run-node-matrix.ps1", - ".agent/reports/2026-07-10-release-gates-foundation-revision-3-maker.md", - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" - ], - "line": 20 - }, - { - "slice": "IMAGE-REMEDIATION", - "branch": "work/prc-image-remediation", - "paths": [ - "Dockerfile", - "cmd/engram-healthcheck/main.go", - "cmd/engram-healthcheck/main_test.go", - "apps/operator-console/package.json", - "apps/operator-console/package-lock.json", - "deploy/postgres/Dockerfile", - "docker-compose.yml", - "deploy/docker-compose.runtime.yml", - "docs/DEPLOYMENT.md", - "docs/PRODUCTION-TESTING-PLAYBOOK.md", - ".github/workflows/test.yml", - ".github/workflows/docker.yaml", - ".github/workflows/docker-publish.yml", - "scripts/production-gates/build-and-scan-images.ps1", - "tests/critical/runtime/image_runtime_contract_test.go", - "tests/critical/runtime/postgres_image_contract_test.go" - ], - "line": 21 - }, - { - "slice": "SECURITY-PROJECT-IDENTITY", - "branch": "work/prc-security-project-identity", - "paths": [ - "internal/proxy/identity.go", - "internal/proxy/identity_test.go", - "internal/handlers/engramcore/tools.go", - "internal/handlers/engramcore/project_identity_v2_test.go", - "proto/engram/v1/engram.proto", - "proto/engram/v1/engram.pb.go", - "proto/engram/v1/engram_grpc.pb.go", - "internal/grpcserver/server.go", - "internal/grpcserver/project_identity_v2_test.go", - "internal/db/gorm/project_store.go", - "internal/db/gorm/project_store_test.go", - "internal/worker/handlers_context.go", - "internal/worker/project_identity_v2_test.go", - "plugin/engram/hooks/lib.js", - "plugin/engram/hooks/lib.test.js", - "plugin/engram/hooks/project-identity-v2.test.js", - "plugin/openclaw-engram/src/identity.ts", - "plugin/openclaw-engram/src/identity.test.ts", - "docs/arch/architecture.md" - ], - "line": 22 - }, - { - "slice": "OPENCLAW-RELEASE", - "branch": "work/prc-openclaw-release", - "paths": [ - "plugin/openclaw-engram/.gitignore", - "plugin/openclaw-engram/package.json", - "plugin/openclaw-engram/package-lock.json", - "plugin/openclaw-engram/openclaw.plugin.json", - "plugin/openclaw-engram/README.md", - ".github/workflows/plugin-publish.yml", - "docs/RELEASE-PROTOCOL.md" - ], - "line": 23 - }, - { - "slice": "UPDATE-LIFECYCLE", - "branch": "work/prc-security-updater", - "paths": [ - "internal/update/update.go", - "internal/update/update_test.go", - "internal/worker/handlers_update.go", - "internal/worker/handlers_update_test.go", - "scripts/install.sh", - "scripts/install.ps1", - ".goreleaser.yaml", - ".github/workflows/release.yaml", - "plugin/engram/hooks/hook-cli.test.js" - ], - "line": 24 - }, - { - "slice": "DOCUMENT-INGEST-PUBLIC-TRUTH", - "branch": "work/prc-document-ingest-public-truth", - "paths": [ - "internal/mcp/server.go", - "internal/mcp/ingest_document_description_test.go" - ], - "line": 26 - }, - { - "slice": "MCP-STRUCTURED-INPUT-VALIDATION", - "branch": "work/prc-mcp-structured-input-validation", - "paths": [ - "internal/mcp/coerce.go", - "internal/mcp/coerce_test.go", - "internal/mcp/tools_candidates.go", - "internal/mcp/tools_candidates_test.go", - "internal/mcp/tools_memory.go", - "internal/mcp/tools_memory_edit_test.go", - "internal/mcp/tools_memory_significance.go", - "internal/mcp/tools_memory_significance_test.go", - "internal/mcp/tools_store_consolidated.go", - "internal/mcp/tools_settings.go", - "internal/mcp/tools_settings_test.go", - "internal/mcp/tools_documents_v2.go", - "internal/mcp/tools_rule_governance.go", - "internal/mcp/tools_rule_governance_test.go", - "internal/mcp/structured_input_validation_test.go" - ], - "line": 28 - }, - { - "slice": "T007-COMPAT-DEMOLITION-CLASSIFICATION", - "branch": "work/prc-t007-compat-classification", - "paths": [ - "internal/mcp/store_memory_compat_t007_test.go" - ], - "line": 30 - }, - { - "slice": "DB-RULES-ISOLATION", - "branch": "work/prc-db-rules-isolation", - "paths": [ - "internal/worker/handlers_rules_test.go", - "scripts/production-gates/run-db-rules-isolation.ps1" - ], - "line": 31 - }, - { - "slice": "COVERAGE-WORKER", - "branch": "work/prc-coverage-worker", - "paths": [ - "internal/worker/production_readiness_coverage_test.go" - ], - "line": 32 - }, - { - "slice": "COVERAGE-MCP", - "branch": "work/prc-coverage-mcp", - "paths": [ - "internal/mcp/production_readiness_coverage_test.go" - ], - "line": 33 - }, - { - "slice": "COVERAGE-GORM", - "branch": "work/prc-coverage-gorm", - "paths": [ - "internal/db/gorm/production_readiness_coverage_test.go" - ], - "line": 34 - }, - { - "slice": "COVERAGE-LOOM", - "branch": "work/prc-coverage-loom", - "paths": [ - "internal/handlers/loom/production_readiness_coverage_test.go" - ], - "line": 35 - }, - { - "slice": "DEPLOYMENT-ROLLBACK", - "branch": "work/prc-deployment-rollback", - "paths": [ - "docker-compose.yml", - "deploy/docker-compose.runtime.yml", - "deploy/docker-compose.operator-web-standalone.yml", - "deploy/entrypoint-server.sh", - "deploy/healthcheck-server.sh", - "deploy/verify-rollback.ps1", - "deploy/verify-runtime-policy.ps1" - ], - "line": 36 - }, - { - "slice": "RECOVERY-DATA", - "branch": "work/prc-recovery-data", - "paths": [ - "scripts/recovery/start-disposable-postgres.ps1", - "scripts/recovery/verify-postgres-roundtrip.ps1", - "scripts/recovery/seed-recovery-fixture.ps1", - "scripts/recovery/assert-recovery-fixture.ps1", - "tests/critical/recovery/postgres_roundtrip_test.go" - ], - "line": 37 - }, - { - "slice": "OBSERVABILITY-OTLP", - "branch": "work/prc-observability-otlp", - "paths": [ - "internal/module/obs/logging.go", - "internal/module/obs/logging_test.go", - "internal/module/obs/meter.go", - "internal/module/obs/meter_test.go", - "internal/module/obs/metrics.go", - "internal/module/obs/metrics_test.go", - "cmd/engram-server/main.go", - "cmd/engram-server/main_test.go", - "scripts/production-smoke/verify-otlp.ps1" - ], - "line": 38 - }, - { - "slice": "PRIVACY-BOUNDARIES", - "branch": "work/prc-privacy-boundaries", - "paths": [ - "internal/scope/domain_policy.go", - "internal/scope/domain_policy_test.go", - "internal/scope/filter.go", - "internal/scope/filter_test.go", - "internal/scope/filter_principal_test.go", - "internal/scope/filter_w4_test.go", - "internal/principalmemory/access_policy.go", - "internal/principalmemory/access_policy_test.go", - "internal/principalmemory/domain_registry.go", - "internal/principalmemory/domain_registry_test.go", - "internal/principalmemory/query_service.go", - "internal/principalmemory/query_service_test.go", - "internal/mcp/tools_principal_memory.go", - "internal/mcp/tools_principal_memory_test.go", - "internal/mcp/tools_recall_principal_test.go", - "internal/mcp/recall_visibility_backfill_test.go", - "internal/mcp/store_memory_principal_test.go", - "internal/worker/handlers_principal_memory.go", - "internal/worker/handlers_principal_memory_test.go", - "internal/worker/scope_bypass_w4_test.go", - "internal/worker/retention.go", - "internal/worker/retention_test.go", - "internal/db/gorm/memory_store.go", - "internal/db/gorm/memory_store_principal_test.go", - "internal/db/gorm/memory_store_principal_query_test.go", - "internal/db/gorm/purge_store_test.go", - "tests/critical/data_boundaries/principal_project_retention_test.go" - ], - "line": 39 - }, - { - "slice": "CRITICAL-HARNESS", - "branch": "work/prc-critical-harness", - "paths": [ - "tests/critical/customer_mode/customer_mode_test.go", - "tests/critical/customer_mode/compatibility_test.go", - "tests/critical/customer_mode/cross_agent_test.go", - "scripts/production-smoke/customer/run-customer-mode.ps1", - "scripts/production-smoke/customer/run-client-compatibility.ps1", - "scripts/production-smoke/customer/run-cross-agent.ps1", - "scripts/production-smoke/customer/run-diagnostic-matrix.ps1", - "scripts/production-smoke/customer/assert-product-works.ps1" - ], - "line": 40 - }, - { - "slice": "CORE-PUBLIC-TRUTH", - "branch": "work/prc-core-public-truth", - "paths": [ - "README.md", - "README.ru.md", - "README.zh.md", - "CONTRIBUTING.md", - "CHANGELOG.md", - "Makefile", - ".env.example", - "docs/DEPLOYMENT.md", - "docs/MIGRATION.md", - "docs/PRODUCTION-TESTING-PLAYBOOK.md", - "docs/arch/CONFIGURATION.md", - "docs/arch/QUICKSTART.md", - "docs/release-notes/v6.43.0.md", - "docs/public/engram.jpg", - "plugin/engram/commands/setup.md", - "plugin/engram/commands/doctor.md" - ], - "line": 41 - }, - { - "slice": "FINAL-PUBLIC-TRUTH", - "branch": "work/prc-final-public-truth", - "paths": [ - "README.md", - "README.ru.md", - "README.zh.md", - "CONTRIBUTING.md", - "CHANGELOG.md", - "Makefile", - ".env.example", - "docs/DEPLOYMENT.md", - "docs/MIGRATION.md", - "docs/PRODUCTION-TESTING-PLAYBOOK.md", - "docs/arch/CONFIGURATION.md", - "docs/arch/QUICKSTART.md", - "docs/public/engram.jpg", - "plugin/engram/commands/setup.md", - "plugin/engram/commands/doctor.md" - ], - "line": 42 - }, - { - "slice": "LAUNCHER-FIRST-RUN", - "branch": "work/prc-launcher-first-run", - "paths": [ - "cmd/engram/main.go", - "cmd/engram/main_test.go", - "cmd/engram/wiring.go", - "cmd/engram/exec_windows.go", - "cmd/engram/exec_unix.go", - "plugin/engram/.engram-project", - "plugin/engram/scripts/run-engram.js", - "plugin/engram/scripts/run-engram.test.js", - "plugin/engram/scripts/ensure-binary.js", - "plugin/engram/scripts/ensure-binary.test.js" - ], - "line": 43 - }, - { - "slice": "OC-INTEGRATION", - "branch": "work/prc-operator-console-integration", - "paths": [ - "apps/operator-console/**" - ], - "line": 44 - }, - { - "slice": "S4B-CONTRACT", - "branch": "work/prc-s4b-contract", - "paths": [ - ".agent/specs/engram-v7-directives-surfacing/**" - ], - "line": 45 - }, - { - "slice": "V7-S4B-BACKEND", - "branch": "work/prc-v7-s4b-backend", - "paths": [ - "internal/cognitive/s4bsurfacing/**" - ], - "line": 46 - }, - { - "slice": "V7-CORE-CALLPATH", - "branch": "work/prc-v7-core-callpath", - "paths": [ - "internal/cognitive/core/event_bus.go", - "internal/cognitive/core/event_bus_test.go", - "internal/cognitive/core/hint_queue.go", - "internal/cognitive/core/hint_queue_test.go", - "internal/cognitive/s3ambient/queue.go", - "internal/cognitive/s3ambient/subsystem.go" - ], - "line": 47 - }, - { - "slice": "V7-RUNTIME-WIRING", - "branch": "work/prc-v7-runtime-wiring", - "paths": [ - "internal/worker/service.go", - "internal/worker/service_v7_integration_test.go", - "internal/worker/handlers_stats_v7.go", - "internal/worker/handlers_stats_v7_test.go" - ], - "line": 48 - }, - { - "slice": "V7-TELEMETRY-WIRING", - "branch": "work/prc-v7-telemetry-wiring", - "paths": [ - "internal/cognitive/s5/metrics.go", - "internal/cognitive/s5/provider.go", - "internal/cognitive/s5/provider_test.go", - "internal/cognitive/s5/source_adapter.go", - "internal/cognitive/s5/source_adapter_test.go" - ], - "line": 49 - }, - { - "slice": "ROADMAP-RECONCILIATION", - "branch": "work/prc-roadmap-reconciliation", - "paths": [ - ".agent/specs/roadmap.md", - ".agent/specs/ui-surface-ledger.md", - ".agent/specs/operator-console-production-integration/**", - ".agent/specs/engram-v7-ambient/spec.md", - ".agent/specs/engram-v7-ambient/plan.md", - ".agent/specs/engram-v7-ambient/checklists/general.md", - ".agent/specs/engram-v7-ambient/changes/CR-001-initial-scope/change.md", - ".agent/specs/engram-v7-ambient/changes/CR-001-initial-scope/tasks.md" - ], - "line": 50 - }, - { - "slice": "NORTHSTAR-CI-A-CONTRACTS", - "branch": "work/prc-northstar-ci-a-contracts", - "paths": [ - ".agent/specs/engram-absorption/ci-a-dense-vector/spec.md", - ".agent/specs/engram-absorption/ci-a-dense-vector/plan.md", - ".agent/specs/engram-absorption/ci-a-dense-vector/checklists/general.md", - ".agent/specs/engram-absorption/ci-a-dense-vector/changes/CR-001-initial-scope/change.md", - ".agent/specs/engram-absorption/ci-a-dense-vector/changes/CR-001-initial-scope/tasks.md" - ], - "line": 51 - }, - { - "slice": "NORTHSTAR-CI-B-CONTRACTS", - "branch": "work/prc-northstar-ci-b-contracts", - "paths": [ - ".agent/specs/engram-absorption/ci-b-graph-watcher-context/spec.md", - ".agent/specs/engram-absorption/ci-b-graph-watcher-context/plan.md", - ".agent/specs/engram-absorption/ci-b-graph-watcher-context/checklists/general.md", - ".agent/specs/engram-absorption/ci-b-graph-watcher-context/changes/CR-001-initial-scope/change.md", - ".agent/specs/engram-absorption/ci-b-graph-watcher-context/changes/CR-001-initial-scope/tasks.md" - ], - "line": 52 - }, - { - "slice": "NORTHSTAR-BOOK-CONTRACTS", - "branch": "work/prc-northstar-book-contracts", - "paths": [ - ".agent/specs/engram-absorption/book/prd.md", - ".agent/specs/engram-absorption/book/spec.md", - ".agent/specs/engram-absorption/book/plan.md", - ".agent/specs/engram-absorption/book/checklists/general.md", - ".agent/specs/engram-absorption/book/changes/CR-001-initial-scope/change.md", - ".agent/specs/engram-absorption/book/changes/CR-001-initial-scope/tasks.md" - ], - "line": 53 - }, - { - "slice": "NORTHSTAR-MEM-CONTRACTS", - "branch": "work/prc-northstar-mem-contracts", - "paths": [ - ".agent/specs/engram-absorption/mem-residual/spec.md", - ".agent/specs/engram-absorption/mem-residual/plan.md", - ".agent/specs/engram-absorption/mem-residual/checklists/general.md", - ".agent/specs/engram-absorption/mem-residual/changes/CR-001-initial-scope/change.md", - ".agent/specs/engram-absorption/mem-residual/changes/CR-001-initial-scope/tasks.md" - ], - "line": 54 - }, - { - "slice": "NORTHSTAR-EFFECTIVENESS-CONTRACTS", - "branch": "work/prc-northstar-effectiveness-contracts", - "paths": [ - ".agent/specs/engram-effectiveness/production-ready-residual/spec.md", - ".agent/specs/engram-effectiveness/production-ready-residual/plan.md", - ".agent/specs/engram-effectiveness/production-ready-residual/checklists/general.md", - ".agent/specs/engram-effectiveness/production-ready-residual/changes/CR-001-initial-scope/change.md", - ".agent/specs/engram-effectiveness/production-ready-residual/changes/CR-001-initial-scope/tasks.md" - ], - "line": 55 - }, - { - "slice": "NORTHSTAR-SETTINGS-CONTRACTS", - "branch": "work/prc-northstar-settings-contracts", - "paths": [ - ".agent/specs/settings-store/production-ready-residual/spec.md", - ".agent/specs/settings-store/production-ready-residual/plan.md", - ".agent/specs/settings-store/production-ready-residual/checklists/general.md", - ".agent/specs/settings-store/production-ready-residual/changes/CR-001-initial-scope/change.md", - ".agent/specs/settings-store/production-ready-residual/changes/CR-001-initial-scope/tasks.md" - ], - "line": 56 - } - ], - "declarations": [ - { - "owner": "PLAN-GOVERNANCE", - "branch": "work/prc-release-gates", - "path": ".agent/plans/2026-07-10-engram-production-ready-master-plan.md", - "display": ".agent/plans/2026-07-10-engram-production-ready-master-plan.md", - "kind": "exact", - "line": 6 - }, - { - "owner": "PLAN-GOVERNANCE", - "branch": "work/prc-release-gates", - "path": ".agent/plans/2026-07-10-engram-production-ready-ownership-state.json", - "display": ".agent/plans/2026-07-10-engram-production-ready-ownership-state.json", - "kind": "exact", - "line": 6 - }, - { - "owner": "DB-BULKOPS", - "branch": "work/prc-db-bulkops", - "path": "internal/bulkops/facade.go", - "display": "internal/bulkops/facade.go", - "kind": "exact", - "line": 7 - }, - { - "owner": "DB-BULKOPS", - "branch": "work/prc-db-bulkops", - "path": "internal/bulkops/facade_test.go", - "display": "internal/bulkops/facade_test.go", - "kind": "exact", - "line": 7 - }, - { - "owner": "DB-BULKOPS", - "branch": "work/prc-db-bulkops", - "path": "internal/bulkops/rollback.go", - "display": "internal/bulkops/rollback.go", - "kind": "exact", - "line": 7 - }, - { - "owner": "DB-BULKOPS", - "branch": "work/prc-db-bulkops", - "path": "internal/bulkops/rollback_test.go", - "display": "internal/bulkops/rollback_test.go", - "kind": "exact", - "line": 7 - }, - { - "owner": "DB-BULKOPS", - "branch": "work/prc-db-bulkops", - "path": "internal/db/gorm/candidate_store.go", - "display": "internal/db/gorm/candidate_store.go", - "kind": "exact", - "line": 7 - }, - { - "owner": "DB-BULKOPS", - "branch": "work/prc-db-bulkops", - "path": "internal/db/gorm/candidate_store_test.go", - "display": "internal/db/gorm/candidate_store_test.go", - "kind": "exact", - "line": 7 - }, - { - "owner": "DB-BULKOPS", - "branch": "work/prc-db-bulkops", - "path": "internal/mcp/tools_bulkops.go", - "display": "internal/mcp/tools_bulkops.go", - "kind": "exact", - "line": 7 - }, - { - "owner": "DB-BULKOPS", - "branch": "work/prc-db-bulkops", - "path": "internal/mcp/tools_dryrun_test.go", - "display": "internal/mcp/tools_dryrun_test.go", - "kind": "exact", - "line": 7 - }, - { - "owner": "DB-BULKOPS", - "branch": "work/prc-db-bulkops", - "path": "pkg/models/snapshot.go", - "display": "pkg/models/snapshot.go", - "kind": "exact", - "line": 7 - }, - { - "owner": "DB-BULKOPS", - "branch": "work/prc-db-bulkops", - "path": ".agent/reports/2026-07-10-db-bulkops-capture-lock-rework-maker.md", - "display": ".agent/reports/2026-07-10-db-bulkops-capture-lock-rework-maker.md", - "kind": "exact", - "line": 7 - }, - { - "owner": "DB-BULKOPS", - "branch": "work/prc-db-bulkops", - "path": ".agent/reports/2026-07-10-db-bulkops-sibling-rework-maker.md", - "display": ".agent/reports/2026-07-10-db-bulkops-sibling-rework-maker.md", - "kind": "exact", - "line": 7 - }, - { - "owner": "DB-BULKOPS", - "branch": "work/prc-db-bulkops", - "path": ".agent/specs/production-ready-db-bulkops/evidence", - "display": ".agent/specs/production-ready-db-bulkops/evidence/**", - "kind": "prefix", - "line": 7 - }, - { - "owner": "DB-BULKOPS", - "branch": "work/prc-db-bulkops", - "path": ".agent/reports/evidence/production-ready/db-bulkops-sibling-rework", - "display": ".agent/reports/evidence/production-ready/db-bulkops-sibling-rework/**", - "kind": "prefix", - "line": 7 - }, - { - "owner": "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK", - "branch": "work/prc-db-bulkops-behavioral-edge-rework", - "path": "internal/db/gorm/candidate_store.go", - "display": "internal/db/gorm/candidate_store.go", - "kind": "exact", - "line": 8 - }, - { - "owner": "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK", - "branch": "work/prc-db-bulkops-behavioral-edge-rework", - "path": "internal/db/gorm/candidate_store_test.go", - "display": "internal/db/gorm/candidate_store_test.go", - "kind": "exact", - "line": 8 - }, - { - "owner": "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK", - "branch": "work/prc-db-bulkops-behavioral-edge-rework", - "path": "internal/mcp/tools_bulkops.go", - "display": "internal/mcp/tools_bulkops.go", - "kind": "exact", - "line": 8 - }, - { - "owner": "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK", - "branch": "work/prc-db-bulkops-behavioral-edge-rework", - "path": "internal/mcp/tools_dryrun_test.go", - "display": "internal/mcp/tools_dryrun_test.go", - "kind": "exact", - "line": 8 - }, - { - "owner": "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK", - "branch": "work/prc-db-bulkops-behavioral-edge-rework", - "path": ".agent/reports/2026-07-10-db-bulkops-behavioral-edge-rework-maker.md", - "display": ".agent/reports/2026-07-10-db-bulkops-behavioral-edge-rework-maker.md", - "kind": "exact", - "line": 8 - }, - { - "owner": "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK", - "branch": "work/prc-db-bulkops-behavioral-edge-rework", - "path": ".agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework", - "display": ".agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/**", - "kind": "prefix", - "line": 8 - }, - { - "owner": "DB-GOVERNANCE", - "branch": "work/prc-db-governance", - "path": "internal/db/gorm/candidate_store.go", - "display": "internal/db/gorm/candidate_store.go", - "kind": "exact", - "line": 9 - }, - { - "owner": "DB-GOVERNANCE", - "branch": "work/prc-db-governance", - "path": "internal/db/gorm/candidate_store_test.go", - "display": "internal/db/gorm/candidate_store_test.go", - "kind": "exact", - "line": 9 - }, - { - "owner": "DB-GOVERNANCE", - "branch": "work/prc-db-governance", - "path": "internal/db/gorm/rule_arbiter_store_test.go", - "display": "internal/db/gorm/rule_arbiter_store_test.go", - "kind": "exact", - "line": 9 - }, - { - "owner": "DB-GOVERNANCE", - "branch": "work/prc-db-governance", - "path": "internal/db/gorm/rule_governance_store.go", - "display": "internal/db/gorm/rule_governance_store.go", - "kind": "exact", - "line": 9 - }, - { - "owner": "DB-GOVERNANCE", - "branch": "work/prc-db-governance", - "path": "internal/db/gorm/rule_governance_store_test.go", - "display": "internal/db/gorm/rule_governance_store_test.go", - "kind": "exact", - "line": 9 - }, - { - "owner": "DB-GOVERNANCE", - "branch": "work/prc-db-governance", - "path": "internal/db/gorm/rule_governance_rg3_store_test.go", - "display": "internal/db/gorm/rule_governance_rg3_store_test.go", - "kind": "exact", - "line": 9 - }, - { - "owner": "DB-GOVERNANCE", - "branch": "work/prc-db-governance", - "path": "internal/db/gorm/migration_rule_governance.go", - "display": "internal/db/gorm/migration_rule_governance.go", - "kind": "exact", - "line": 9 - }, - { - "owner": "DB-GOVERNANCE", - "branch": "work/prc-db-governance", - "path": "internal/db/gorm/migration_rule_arbiter.go", - "display": "internal/db/gorm/migration_rule_arbiter.go", - "kind": "exact", - "line": 9 - }, - { - "owner": "DB-GOVERNANCE", - "branch": "work/prc-db-governance", - "path": "internal/db/gorm/migration_rule_governance_snapshot_statuses.go", - "display": "internal/db/gorm/migration_rule_governance_snapshot_statuses.go", - "kind": "exact", - "line": 9 - }, - { - "owner": "CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK", - "branch": "work/prc-candidate-review-snapshot-rollback", - "path": "internal/reviewpacket/candidate.go", - "display": "internal/reviewpacket/candidate.go", - "kind": "exact", - "line": 10 - }, - { - "owner": "CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK", - "branch": "work/prc-candidate-review-snapshot-rollback", - "path": "internal/reviewpacket/candidate_test.go", - "display": "internal/reviewpacket/candidate_test.go", - "kind": "exact", - "line": 10 - }, - { - "owner": "CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK", - "branch": "work/prc-candidate-review-snapshot-rollback", - "path": "internal/db/gorm/candidate_store.go", - "display": "internal/db/gorm/candidate_store.go", - "kind": "exact", - "line": 10 - }, - { - "owner": "CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK", - "branch": "work/prc-candidate-review-snapshot-rollback", - "path": "internal/db/gorm/candidate_store_test.go", - "display": "internal/db/gorm/candidate_store_test.go", - "kind": "exact", - "line": 10 - }, - { - "owner": "CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK", - "branch": "work/prc-candidate-review-snapshot-rollback", - "path": "internal/db/gorm/snapshot_store.go", - "display": "internal/db/gorm/snapshot_store.go", - "kind": "exact", - "line": 10 - }, - { - "owner": "CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK", - "branch": "work/prc-candidate-review-snapshot-rollback", - "path": "internal/db/gorm/snapshot_store_test.go", - "display": "internal/db/gorm/snapshot_store_test.go", - "kind": "exact", - "line": 10 - }, - { - "owner": "CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK", - "branch": "work/prc-candidate-review-snapshot-rollback", - "path": "internal/bulkops/rollback_test.go", - "display": "internal/bulkops/rollback_test.go", - "kind": "exact", - "line": 10 - }, - { - "owner": "CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK", - "branch": "work/prc-candidate-review-snapshot-rollback", - "path": "tests/critical/candidate_review/candidate_review_snapshot_rollback_test.go", - "display": "tests/critical/candidate_review/candidate_review_snapshot_rollback_test.go", - "kind": "exact", - "line": 10 - }, - { - "owner": "INGEST-DOC-SNAPSHOT-DEMOLITION", - "branch": "work/prc-ingest-doc-snapshot-demolition", - "path": "internal/bulkops/facade.go", - "display": "internal/bulkops/facade.go", - "kind": "exact", - "line": 12 - }, - { - "owner": "INGEST-DOC-SNAPSHOT-DEMOLITION", - "branch": "work/prc-ingest-doc-snapshot-demolition", - "path": "internal/bulkops/facade_test.go", - "display": "internal/bulkops/facade_test.go", - "kind": "exact", - "line": 12 - }, - { - "owner": "INGEST-DOC-SNAPSHOT-DEMOLITION", - "branch": "work/prc-ingest-doc-snapshot-demolition", - "path": "pkg/models/snapshot.go", - "display": "pkg/models/snapshot.go", - "kind": "exact", - "line": 12 - }, - { - "owner": "INGEST-DOC-SNAPSHOT-DEMOLITION", - "branch": "work/prc-ingest-doc-snapshot-demolition", - "path": "pkg/models/snapshot_test.go", - "display": "pkg/models/snapshot_test.go", - "kind": "exact", - "line": 12 - }, - { - "owner": "INGEST-DOC-SNAPSHOT-DEMOLITION", - "branch": "work/prc-ingest-doc-snapshot-demolition", - "path": "internal/mcp/ingest_snapshot_contract_test.go", - "display": "internal/mcp/ingest_snapshot_contract_test.go", - "kind": "exact", - "line": 12 - }, - { - "owner": "DB-AUTH", - "branch": "work/prc-db-auth", - "path": "internal/db/gorm/user_store.go", - "display": "internal/db/gorm/user_store.go", - "kind": "exact", - "line": 13 - }, - { - "owner": "DB-AUTH", - "branch": "work/prc-db-auth", - "path": "internal/db/gorm/user_store_test.go", - "display": "internal/db/gorm/user_store_test.go", - "kind": "exact", - "line": 13 - }, - { - "owner": "DB-AUTH", - "branch": "work/prc-db-auth", - "path": "internal/worker/auth_handlers.go", - "display": "internal/worker/auth_handlers.go", - "kind": "exact", - "line": 13 - }, - { - "owner": "DB-AUTH", - "branch": "work/prc-db-auth", - "path": "internal/worker/auth_handlers_lifecycle_test.go", - "display": "internal/worker/auth_handlers_lifecycle_test.go", - "kind": "exact", - "line": 13 - }, - { - "owner": "AUTH-BOOTSTRAP-SECURITY", - "branch": "work/prc-auth-bootstrap-security", - "path": "internal/config/config.go", - "display": "internal/config/config.go", - "kind": "exact", - "line": 14 - }, - { - "owner": "AUTH-BOOTSTRAP-SECURITY", - "branch": "work/prc-auth-bootstrap-security", - "path": "internal/config/config_test.go", - "display": "internal/config/config_test.go", - "kind": "exact", - "line": 14 - }, - { - "owner": "AUTH-BOOTSTRAP-SECURITY", - "branch": "work/prc-auth-bootstrap-security", - "path": "internal/config/envnames.go", - "display": "internal/config/envnames.go", - "kind": "exact", - "line": 14 - }, - { - "owner": "AUTH-BOOTSTRAP-SECURITY", - "branch": "work/prc-auth-bootstrap-security", - "path": "internal/db/gorm/user_store.go", - "display": "internal/db/gorm/user_store.go", - "kind": "exact", - "line": 14 - }, - { - "owner": "AUTH-BOOTSTRAP-SECURITY", - "branch": "work/prc-auth-bootstrap-security", - "path": "internal/worker/middleware.go", - "display": "internal/worker/middleware.go", - "kind": "exact", - "line": 14 - }, - { - "owner": "AUTH-BOOTSTRAP-SECURITY", - "branch": "work/prc-auth-bootstrap-security", - "path": "internal/worker/middleware_test.go", - "display": "internal/worker/middleware_test.go", - "kind": "exact", - "line": 14 - }, - { - "owner": "AUTH-BOOTSTRAP-SECURITY", - "branch": "work/prc-auth-bootstrap-security", - "path": "internal/worker/auth_handlers.go", - "display": "internal/worker/auth_handlers.go", - "kind": "exact", - "line": 14 - }, - { - "owner": "AUTH-BOOTSTRAP-SECURITY", - "branch": "work/prc-auth-bootstrap-security", - "path": "internal/worker/auth_bootstrap_limiter.go", - "display": "internal/worker/auth_bootstrap_limiter.go", - "kind": "exact", - "line": 14 - }, - { - "owner": "AUTH-BOOTSTRAP-SECURITY", - "branch": "work/prc-auth-bootstrap-security", - "path": "internal/worker/auth_bootstrap_limiter_test.go", - "display": "internal/worker/auth_bootstrap_limiter_test.go", - "kind": "exact", - "line": 14 - }, - { - "owner": "AUTH-BOOTSTRAP-SECURITY", - "branch": "work/prc-auth-bootstrap-security", - "path": "internal/worker/auth_bootstrap_security_test.go", - "display": "internal/worker/auth_bootstrap_security_test.go", - "kind": "exact", - "line": 14 - }, - { - "owner": "AUTH-BOOTSTRAP-SECURITY", - "branch": "work/prc-auth-bootstrap-security", - "path": "internal/worker/service.go", - "display": "internal/worker/service.go", - "kind": "exact", - "line": 14 - }, - { - "owner": "AUTH-BOOTSTRAP-SECURITY", - "branch": "work/prc-auth-bootstrap-security", - "path": "tests/critical/auth_bootstrap/first_admin_bootstrap_test.go", - "display": "tests/critical/auth_bootstrap/first_admin_bootstrap_test.go", - "kind": "exact", - "line": 14 - }, - { - "owner": "AUTH-BOOTSTRAP-SECURITY", - "branch": "work/prc-auth-bootstrap-security", - "path": "scripts/production-smoke/customer/run-auth-bootstrap-adversary.ps1", - "display": "scripts/production-smoke/customer/run-auth-bootstrap-adversary.ps1", - "kind": "exact", - "line": 14 - }, - { - "owner": "DURABLE-AUDIT-BOUNDARIES", - "branch": "work/prc-durable-audit-boundaries", - "path": "internal/db/gorm/domain_owner_store.go", - "display": "internal/db/gorm/domain_owner_store.go", - "kind": "exact", - "line": 15 - }, - { - "owner": "DURABLE-AUDIT-BOUNDARIES", - "branch": "work/prc-durable-audit-boundaries", - "path": "internal/db/gorm/domain_owner_store_test.go", - "display": "internal/db/gorm/domain_owner_store_test.go", - "kind": "exact", - "line": 15 - }, - { - "owner": "DURABLE-AUDIT-BOUNDARIES", - "branch": "work/prc-durable-audit-boundaries", - "path": "internal/db/gorm/user_store.go", - "display": "internal/db/gorm/user_store.go", - "kind": "exact", - "line": 15 - }, - { - "owner": "DURABLE-AUDIT-BOUNDARIES", - "branch": "work/prc-durable-audit-boundaries", - "path": "internal/worker/auth_handlers.go", - "display": "internal/worker/auth_handlers.go", - "kind": "exact", - "line": 15 - }, - { - "owner": "DURABLE-AUDIT-BOUNDARIES", - "branch": "work/prc-durable-audit-boundaries", - "path": "internal/worker/auth_audit_durability_test.go", - "display": "internal/worker/auth_audit_durability_test.go", - "kind": "exact", - "line": 15 - }, - { - "owner": "DURABLE-AUDIT-BOUNDARIES", - "branch": "work/prc-durable-audit-boundaries", - "path": "internal/bulkops/facade.go", - "display": "internal/bulkops/facade.go", - "kind": "exact", - "line": 15 - }, - { - "owner": "DURABLE-AUDIT-BOUNDARIES", - "branch": "work/prc-durable-audit-boundaries", - "path": "internal/bulkops/audit_durability_test.go", - "display": "internal/bulkops/audit_durability_test.go", - "kind": "exact", - "line": 15 - }, - { - "owner": "DURABLE-AUDIT-BOUNDARIES", - "branch": "work/prc-durable-audit-boundaries", - "path": "scripts/production-smoke/customer/run-durable-audit-faults.ps1", - "display": "scripts/production-smoke/customer/run-durable-audit-faults.ps1", - "kind": "exact", - "line": 15 - }, - { - "owner": "DB-CRYSTALLIZATION", - "branch": "work/prc-db-crystallization", - "path": "internal/worker/handlers_hooks_crystallization_integration_test.go", - "display": "internal/worker/handlers_hooks_crystallization_integration_test.go", - "kind": "exact", - "line": 16 - }, - { - "owner": "DB-EMBEDDING-STATS", - "branch": "work/prc-db-embedding-stats", - "path": "internal/embedding/store.go", - "display": "internal/embedding/store.go", - "kind": "exact", - "line": 17 - }, - { - "owner": "DB-EMBEDDING-STATS", - "branch": "work/prc-db-embedding-stats", - "path": "internal/embedding/store_stats_test.go", - "display": "internal/embedding/store_stats_test.go", - "kind": "exact", - "line": 17 - }, - { - "owner": "DB-REAPER", - "branch": "work/prc-db-reaper", - "path": "internal/worker/reaper/reaper.go", - "display": "internal/worker/reaper/reaper.go", - "kind": "exact", - "line": 18 - }, - { - "owner": "DB-REAPER", - "branch": "work/prc-db-reaper", - "path": "internal/worker/reaper/reaper_test.go", - "display": "internal/worker/reaper/reaper_test.go", - "kind": "exact", - "line": 18 - }, - { - "owner": "SECURITY-TOOLCHAIN", - "branch": "work/prc-security-toolchain", - "path": "go.mod", - "display": "go.mod", - "kind": "exact", - "line": 19 - }, - { - "owner": "SECURITY-TOOLCHAIN", - "branch": "work/prc-security-toolchain", - "path": "go.sum", - "display": "go.sum", - "kind": "exact", - "line": 19 - }, - { - "owner": "SECURITY-TOOLCHAIN", - "branch": "work/prc-security-toolchain", - "path": "Dockerfile", - "display": "Dockerfile", - "kind": "exact", - "line": 19 - }, - { - "owner": "RELEASE-GATES", - "branch": "work/prc-release-gates", - "path": ".agent/critical-suite.config.yaml", - "display": ".agent/critical-suite.config.yaml", - "kind": "exact", - "line": 20 - }, - { - "owner": "RELEASE-GATES", - "branch": "work/prc-release-gates", - "path": ".agent/dev-stand.config.yaml", - "display": ".agent/dev-stand.config.yaml", - "kind": "exact", - "line": 20 - }, - { - "owner": "RELEASE-GATES", - "branch": "work/prc-release-gates", - "path": ".github/workflows/test.yml", - "display": ".github/workflows/test.yml", - "kind": "exact", - "line": 20 - }, - { - "owner": "RELEASE-GATES", - "branch": "work/prc-release-gates", - "path": "scripts/production-gates/assert-coverage.ps1", - "display": "scripts/production-gates/assert-coverage.ps1", - "kind": "exact", - "line": 20 - }, - { - "owner": "RELEASE-GATES", - "branch": "work/prc-release-gates", - "path": "scripts/production-gates/assert-go-test-json.ps1", - "display": "scripts/production-gates/assert-go-test-json.ps1", - "kind": "exact", - "line": 20 - }, - { - "owner": "RELEASE-GATES", - "branch": "work/prc-release-gates", - "path": "scripts/production-gates/assert-plan-path-ownership.ps1", - "display": "scripts/production-gates/assert-plan-path-ownership.ps1", - "kind": "exact", - "line": 20 - }, - { - "owner": "RELEASE-GATES", - "branch": "work/prc-release-gates", - "path": "scripts/production-gates/cleanup-db-sessions.ps1", - "display": "scripts/production-gates/cleanup-db-sessions.ps1", - "kind": "exact", - "line": 20 - }, - { - "owner": "RELEASE-GATES", - "branch": "work/prc-release-gates", - "path": "scripts/production-gates/run-critical-suite.ps1", - "display": "scripts/production-gates/run-critical-suite.ps1", - "kind": "exact", - "line": 20 - }, - { - "owner": "RELEASE-GATES", - "branch": "work/prc-release-gates", - "path": "scripts/production-gates/run-db-suite.ps1", - "display": "scripts/production-gates/run-db-suite.ps1", - "kind": "exact", - "line": 20 - }, - { - "owner": "RELEASE-GATES", - "branch": "work/prc-release-gates", - "path": "scripts/production-gates/run-dev-stand.ps1", - "display": "scripts/production-gates/run-dev-stand.ps1", - "kind": "exact", - "line": 20 - }, - { - "owner": "RELEASE-GATES", - "branch": "work/prc-release-gates", - "path": "scripts/production-gates/run-node-matrix.ps1", - "display": "scripts/production-gates/run-node-matrix.ps1", - "kind": "exact", - "line": 20 - }, - { - "owner": "RELEASE-GATES", - "branch": "work/prc-release-gates", - "path": ".agent/reports/2026-07-10-release-gates-foundation-revision-3-maker.md", - "display": ".agent/reports/2026-07-10-release-gates-foundation-revision-3-maker.md", - "kind": "exact", - "line": 20 - }, - { - "owner": "RELEASE-GATES", - "branch": "work/prc-release-gates", - "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3", - "display": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**", - "kind": "prefix", - "line": 20 - }, - { - "owner": "IMAGE-REMEDIATION", - "branch": "work/prc-image-remediation", - "path": "Dockerfile", - "display": "Dockerfile", - "kind": "exact", - "line": 21 - }, - { - "owner": "IMAGE-REMEDIATION", - "branch": "work/prc-image-remediation", - "path": "cmd/engram-healthcheck/main.go", - "display": "cmd/engram-healthcheck/main.go", - "kind": "exact", - "line": 21 - }, - { - "owner": "IMAGE-REMEDIATION", - "branch": "work/prc-image-remediation", - "path": "cmd/engram-healthcheck/main_test.go", - "display": "cmd/engram-healthcheck/main_test.go", - "kind": "exact", - "line": 21 - }, - { - "owner": "IMAGE-REMEDIATION", - "branch": "work/prc-image-remediation", - "path": "apps/operator-console/package.json", - "display": "apps/operator-console/package.json", - "kind": "exact", - "line": 21 - }, - { - "owner": "IMAGE-REMEDIATION", - "branch": "work/prc-image-remediation", - "path": "apps/operator-console/package-lock.json", - "display": "apps/operator-console/package-lock.json", - "kind": "exact", - "line": 21 - }, - { - "owner": "IMAGE-REMEDIATION", - "branch": "work/prc-image-remediation", - "path": "deploy/postgres/Dockerfile", - "display": "deploy/postgres/Dockerfile", - "kind": "exact", - "line": 21 - }, - { - "owner": "IMAGE-REMEDIATION", - "branch": "work/prc-image-remediation", - "path": "docker-compose.yml", - "display": "docker-compose.yml", - "kind": "exact", - "line": 21 - }, - { - "owner": "IMAGE-REMEDIATION", - "branch": "work/prc-image-remediation", - "path": "deploy/docker-compose.runtime.yml", - "display": "deploy/docker-compose.runtime.yml", - "kind": "exact", - "line": 21 - }, - { - "owner": "IMAGE-REMEDIATION", - "branch": "work/prc-image-remediation", - "path": "docs/DEPLOYMENT.md", - "display": "docs/DEPLOYMENT.md", - "kind": "exact", - "line": 21 - }, - { - "owner": "IMAGE-REMEDIATION", - "branch": "work/prc-image-remediation", - "path": "docs/PRODUCTION-TESTING-PLAYBOOK.md", - "display": "docs/PRODUCTION-TESTING-PLAYBOOK.md", - "kind": "exact", - "line": 21 - }, - { - "owner": "IMAGE-REMEDIATION", - "branch": "work/prc-image-remediation", - "path": ".github/workflows/test.yml", - "display": ".github/workflows/test.yml", - "kind": "exact", - "line": 21 - }, - { - "owner": "IMAGE-REMEDIATION", - "branch": "work/prc-image-remediation", - "path": ".github/workflows/docker.yaml", - "display": ".github/workflows/docker.yaml", - "kind": "exact", - "line": 21 - }, - { - "owner": "IMAGE-REMEDIATION", - "branch": "work/prc-image-remediation", - "path": ".github/workflows/docker-publish.yml", - "display": ".github/workflows/docker-publish.yml", - "kind": "exact", - "line": 21 - }, - { - "owner": "IMAGE-REMEDIATION", - "branch": "work/prc-image-remediation", - "path": "scripts/production-gates/build-and-scan-images.ps1", - "display": "scripts/production-gates/build-and-scan-images.ps1", - "kind": "exact", - "line": 21 - }, - { - "owner": "IMAGE-REMEDIATION", - "branch": "work/prc-image-remediation", - "path": "tests/critical/runtime/image_runtime_contract_test.go", - "display": "tests/critical/runtime/image_runtime_contract_test.go", - "kind": "exact", - "line": 21 - }, - { - "owner": "IMAGE-REMEDIATION", - "branch": "work/prc-image-remediation", - "path": "tests/critical/runtime/postgres_image_contract_test.go", - "display": "tests/critical/runtime/postgres_image_contract_test.go", - "kind": "exact", - "line": 21 - }, - { - "owner": "SECURITY-PROJECT-IDENTITY", - "branch": "work/prc-security-project-identity", - "path": "internal/proxy/identity.go", - "display": "internal/proxy/identity.go", - "kind": "exact", - "line": 22 - }, - { - "owner": "SECURITY-PROJECT-IDENTITY", - "branch": "work/prc-security-project-identity", - "path": "internal/proxy/identity_test.go", - "display": "internal/proxy/identity_test.go", - "kind": "exact", - "line": 22 - }, - { - "owner": "SECURITY-PROJECT-IDENTITY", - "branch": "work/prc-security-project-identity", - "path": "internal/handlers/engramcore/tools.go", - "display": "internal/handlers/engramcore/tools.go", - "kind": "exact", - "line": 22 - }, - { - "owner": "SECURITY-PROJECT-IDENTITY", - "branch": "work/prc-security-project-identity", - "path": "internal/handlers/engramcore/project_identity_v2_test.go", - "display": "internal/handlers/engramcore/project_identity_v2_test.go", - "kind": "exact", - "line": 22 - }, - { - "owner": "SECURITY-PROJECT-IDENTITY", - "branch": "work/prc-security-project-identity", - "path": "proto/engram/v1/engram.proto", - "display": "proto/engram/v1/engram.proto", - "kind": "exact", - "line": 22 - }, - { - "owner": "SECURITY-PROJECT-IDENTITY", - "branch": "work/prc-security-project-identity", - "path": "proto/engram/v1/engram.pb.go", - "display": "proto/engram/v1/engram.pb.go", - "kind": "exact", - "line": 22 - }, - { - "owner": "SECURITY-PROJECT-IDENTITY", - "branch": "work/prc-security-project-identity", - "path": "proto/engram/v1/engram_grpc.pb.go", - "display": "proto/engram/v1/engram_grpc.pb.go", - "kind": "exact", - "line": 22 - }, - { - "owner": "SECURITY-PROJECT-IDENTITY", - "branch": "work/prc-security-project-identity", - "path": "internal/grpcserver/server.go", - "display": "internal/grpcserver/server.go", - "kind": "exact", - "line": 22 - }, - { - "owner": "SECURITY-PROJECT-IDENTITY", - "branch": "work/prc-security-project-identity", - "path": "internal/grpcserver/project_identity_v2_test.go", - "display": "internal/grpcserver/project_identity_v2_test.go", - "kind": "exact", - "line": 22 - }, - { - "owner": "SECURITY-PROJECT-IDENTITY", - "branch": "work/prc-security-project-identity", - "path": "internal/db/gorm/project_store.go", - "display": "internal/db/gorm/project_store.go", - "kind": "exact", - "line": 22 - }, - { - "owner": "SECURITY-PROJECT-IDENTITY", - "branch": "work/prc-security-project-identity", - "path": "internal/db/gorm/project_store_test.go", - "display": "internal/db/gorm/project_store_test.go", - "kind": "exact", - "line": 22 - }, - { - "owner": "SECURITY-PROJECT-IDENTITY", - "branch": "work/prc-security-project-identity", - "path": "internal/worker/handlers_context.go", - "display": "internal/worker/handlers_context.go", - "kind": "exact", - "line": 22 - }, - { - "owner": "SECURITY-PROJECT-IDENTITY", - "branch": "work/prc-security-project-identity", - "path": "internal/worker/project_identity_v2_test.go", - "display": "internal/worker/project_identity_v2_test.go", - "kind": "exact", - "line": 22 - }, - { - "owner": "SECURITY-PROJECT-IDENTITY", - "branch": "work/prc-security-project-identity", - "path": "plugin/engram/hooks/lib.js", - "display": "plugin/engram/hooks/lib.js", - "kind": "exact", - "line": 22 - }, - { - "owner": "SECURITY-PROJECT-IDENTITY", - "branch": "work/prc-security-project-identity", - "path": "plugin/engram/hooks/lib.test.js", - "display": "plugin/engram/hooks/lib.test.js", - "kind": "exact", - "line": 22 - }, - { - "owner": "SECURITY-PROJECT-IDENTITY", - "branch": "work/prc-security-project-identity", - "path": "plugin/engram/hooks/project-identity-v2.test.js", - "display": "plugin/engram/hooks/project-identity-v2.test.js", - "kind": "exact", - "line": 22 - }, - { - "owner": "SECURITY-PROJECT-IDENTITY", - "branch": "work/prc-security-project-identity", - "path": "plugin/openclaw-engram/src/identity.ts", - "display": "plugin/openclaw-engram/src/identity.ts", - "kind": "exact", - "line": 22 - }, - { - "owner": "SECURITY-PROJECT-IDENTITY", - "branch": "work/prc-security-project-identity", - "path": "plugin/openclaw-engram/src/identity.test.ts", - "display": "plugin/openclaw-engram/src/identity.test.ts", - "kind": "exact", - "line": 22 - }, - { - "owner": "SECURITY-PROJECT-IDENTITY", - "branch": "work/prc-security-project-identity", - "path": "docs/arch/architecture.md", - "display": "docs/arch/architecture.md", - "kind": "exact", - "line": 22 - }, - { - "owner": "OPENCLAW-RELEASE", - "branch": "work/prc-openclaw-release", - "path": "plugin/openclaw-engram/.gitignore", - "display": "plugin/openclaw-engram/.gitignore", - "kind": "exact", - "line": 23 - }, - { - "owner": "OPENCLAW-RELEASE", - "branch": "work/prc-openclaw-release", - "path": "plugin/openclaw-engram/package.json", - "display": "plugin/openclaw-engram/package.json", - "kind": "exact", - "line": 23 - }, - { - "owner": "OPENCLAW-RELEASE", - "branch": "work/prc-openclaw-release", - "path": "plugin/openclaw-engram/package-lock.json", - "display": "plugin/openclaw-engram/package-lock.json", - "kind": "exact", - "line": 23 - }, - { - "owner": "OPENCLAW-RELEASE", - "branch": "work/prc-openclaw-release", - "path": "plugin/openclaw-engram/openclaw.plugin.json", - "display": "plugin/openclaw-engram/openclaw.plugin.json", - "kind": "exact", - "line": 23 - }, - { - "owner": "OPENCLAW-RELEASE", - "branch": "work/prc-openclaw-release", - "path": "plugin/openclaw-engram/README.md", - "display": "plugin/openclaw-engram/README.md", - "kind": "exact", - "line": 23 - }, - { - "owner": "OPENCLAW-RELEASE", - "branch": "work/prc-openclaw-release", - "path": ".github/workflows/plugin-publish.yml", - "display": ".github/workflows/plugin-publish.yml", - "kind": "exact", - "line": 23 - }, - { - "owner": "OPENCLAW-RELEASE", - "branch": "work/prc-openclaw-release", - "path": "docs/RELEASE-PROTOCOL.md", - "display": "docs/RELEASE-PROTOCOL.md", - "kind": "exact", - "line": 23 - }, - { - "owner": "UPDATE-LIFECYCLE", - "branch": "work/prc-security-updater", - "path": "internal/update/update.go", - "display": "internal/update/update.go", - "kind": "exact", - "line": 24 - }, - { - "owner": "UPDATE-LIFECYCLE", - "branch": "work/prc-security-updater", - "path": "internal/update/update_test.go", - "display": "internal/update/update_test.go", - "kind": "exact", - "line": 24 - }, - { - "owner": "UPDATE-LIFECYCLE", - "branch": "work/prc-security-updater", - "path": "internal/worker/handlers_update.go", - "display": "internal/worker/handlers_update.go", - "kind": "exact", - "line": 24 - }, - { - "owner": "UPDATE-LIFECYCLE", - "branch": "work/prc-security-updater", - "path": "internal/worker/handlers_update_test.go", - "display": "internal/worker/handlers_update_test.go", - "kind": "exact", - "line": 24 - }, - { - "owner": "UPDATE-LIFECYCLE", - "branch": "work/prc-security-updater", - "path": "scripts/install.sh", - "display": "scripts/install.sh", - "kind": "exact", - "line": 24 - }, - { - "owner": "UPDATE-LIFECYCLE", - "branch": "work/prc-security-updater", - "path": "scripts/install.ps1", - "display": "scripts/install.ps1", - "kind": "exact", - "line": 24 - }, - { - "owner": "UPDATE-LIFECYCLE", - "branch": "work/prc-security-updater", - "path": ".goreleaser.yaml", - "display": ".goreleaser.yaml", - "kind": "exact", - "line": 24 - }, - { - "owner": "UPDATE-LIFECYCLE", - "branch": "work/prc-security-updater", - "path": ".github/workflows/release.yaml", - "display": ".github/workflows/release.yaml", - "kind": "exact", - "line": 24 - }, - { - "owner": "UPDATE-LIFECYCLE", - "branch": "work/prc-security-updater", - "path": "plugin/engram/hooks/hook-cli.test.js", - "display": "plugin/engram/hooks/hook-cli.test.js", - "kind": "exact", - "line": 24 - }, - { - "owner": "DOCUMENT-INGEST-PUBLIC-TRUTH", - "branch": "work/prc-document-ingest-public-truth", - "path": "internal/mcp/server.go", - "display": "internal/mcp/server.go", - "kind": "exact", - "line": 26 - }, - { - "owner": "DOCUMENT-INGEST-PUBLIC-TRUTH", - "branch": "work/prc-document-ingest-public-truth", - "path": "internal/mcp/ingest_document_description_test.go", - "display": "internal/mcp/ingest_document_description_test.go", - "kind": "exact", - "line": 26 - }, - { - "owner": "MCP-STRUCTURED-INPUT-VALIDATION", - "branch": "work/prc-mcp-structured-input-validation", - "path": "internal/mcp/coerce.go", - "display": "internal/mcp/coerce.go", - "kind": "exact", - "line": 28 - }, - { - "owner": "MCP-STRUCTURED-INPUT-VALIDATION", - "branch": "work/prc-mcp-structured-input-validation", - "path": "internal/mcp/coerce_test.go", - "display": "internal/mcp/coerce_test.go", - "kind": "exact", - "line": 28 - }, - { - "owner": "MCP-STRUCTURED-INPUT-VALIDATION", - "branch": "work/prc-mcp-structured-input-validation", - "path": "internal/mcp/tools_candidates.go", - "display": "internal/mcp/tools_candidates.go", - "kind": "exact", - "line": 28 - }, - { - "owner": "MCP-STRUCTURED-INPUT-VALIDATION", - "branch": "work/prc-mcp-structured-input-validation", - "path": "internal/mcp/tools_candidates_test.go", - "display": "internal/mcp/tools_candidates_test.go", - "kind": "exact", - "line": 28 - }, - { - "owner": "MCP-STRUCTURED-INPUT-VALIDATION", - "branch": "work/prc-mcp-structured-input-validation", - "path": "internal/mcp/tools_memory.go", - "display": "internal/mcp/tools_memory.go", - "kind": "exact", - "line": 28 - }, - { - "owner": "MCP-STRUCTURED-INPUT-VALIDATION", - "branch": "work/prc-mcp-structured-input-validation", - "path": "internal/mcp/tools_memory_edit_test.go", - "display": "internal/mcp/tools_memory_edit_test.go", - "kind": "exact", - "line": 28 - }, - { - "owner": "MCP-STRUCTURED-INPUT-VALIDATION", - "branch": "work/prc-mcp-structured-input-validation", - "path": "internal/mcp/tools_memory_significance.go", - "display": "internal/mcp/tools_memory_significance.go", - "kind": "exact", - "line": 28 - }, - { - "owner": "MCP-STRUCTURED-INPUT-VALIDATION", - "branch": "work/prc-mcp-structured-input-validation", - "path": "internal/mcp/tools_memory_significance_test.go", - "display": "internal/mcp/tools_memory_significance_test.go", - "kind": "exact", - "line": 28 - }, - { - "owner": "MCP-STRUCTURED-INPUT-VALIDATION", - "branch": "work/prc-mcp-structured-input-validation", - "path": "internal/mcp/tools_store_consolidated.go", - "display": "internal/mcp/tools_store_consolidated.go", - "kind": "exact", - "line": 28 - }, - { - "owner": "MCP-STRUCTURED-INPUT-VALIDATION", - "branch": "work/prc-mcp-structured-input-validation", - "path": "internal/mcp/tools_settings.go", - "display": "internal/mcp/tools_settings.go", - "kind": "exact", - "line": 28 - }, - { - "owner": "MCP-STRUCTURED-INPUT-VALIDATION", - "branch": "work/prc-mcp-structured-input-validation", - "path": "internal/mcp/tools_settings_test.go", - "display": "internal/mcp/tools_settings_test.go", - "kind": "exact", - "line": 28 - }, - { - "owner": "MCP-STRUCTURED-INPUT-VALIDATION", - "branch": "work/prc-mcp-structured-input-validation", - "path": "internal/mcp/tools_documents_v2.go", - "display": "internal/mcp/tools_documents_v2.go", - "kind": "exact", - "line": 28 - }, - { - "owner": "MCP-STRUCTURED-INPUT-VALIDATION", - "branch": "work/prc-mcp-structured-input-validation", - "path": "internal/mcp/tools_rule_governance.go", - "display": "internal/mcp/tools_rule_governance.go", - "kind": "exact", - "line": 28 - }, - { - "owner": "MCP-STRUCTURED-INPUT-VALIDATION", - "branch": "work/prc-mcp-structured-input-validation", - "path": "internal/mcp/tools_rule_governance_test.go", - "display": "internal/mcp/tools_rule_governance_test.go", - "kind": "exact", - "line": 28 - }, - { - "owner": "MCP-STRUCTURED-INPUT-VALIDATION", - "branch": "work/prc-mcp-structured-input-validation", - "path": "internal/mcp/structured_input_validation_test.go", - "display": "internal/mcp/structured_input_validation_test.go", - "kind": "exact", - "line": 28 - }, - { - "owner": "T007-COMPAT-DEMOLITION-CLASSIFICATION", - "branch": "work/prc-t007-compat-classification", - "path": "internal/mcp/store_memory_compat_t007_test.go", - "display": "internal/mcp/store_memory_compat_t007_test.go", - "kind": "exact", - "line": 30 - }, - { - "owner": "DB-RULES-ISOLATION", - "branch": "work/prc-db-rules-isolation", - "path": "internal/worker/handlers_rules_test.go", - "display": "internal/worker/handlers_rules_test.go", - "kind": "exact", - "line": 31 - }, - { - "owner": "DB-RULES-ISOLATION", - "branch": "work/prc-db-rules-isolation", - "path": "scripts/production-gates/run-db-rules-isolation.ps1", - "display": "scripts/production-gates/run-db-rules-isolation.ps1", - "kind": "exact", - "line": 31 - }, - { - "owner": "COVERAGE-WORKER", - "branch": "work/prc-coverage-worker", - "path": "internal/worker/production_readiness_coverage_test.go", - "display": "internal/worker/production_readiness_coverage_test.go", - "kind": "exact", - "line": 32 - }, - { - "owner": "COVERAGE-MCP", - "branch": "work/prc-coverage-mcp", - "path": "internal/mcp/production_readiness_coverage_test.go", - "display": "internal/mcp/production_readiness_coverage_test.go", - "kind": "exact", - "line": 33 - }, - { - "owner": "COVERAGE-GORM", - "branch": "work/prc-coverage-gorm", - "path": "internal/db/gorm/production_readiness_coverage_test.go", - "display": "internal/db/gorm/production_readiness_coverage_test.go", - "kind": "exact", - "line": 34 - }, - { - "owner": "COVERAGE-LOOM", - "branch": "work/prc-coverage-loom", - "path": "internal/handlers/loom/production_readiness_coverage_test.go", - "display": "internal/handlers/loom/production_readiness_coverage_test.go", - "kind": "exact", - "line": 35 - }, - { - "owner": "DEPLOYMENT-ROLLBACK", - "branch": "work/prc-deployment-rollback", - "path": "docker-compose.yml", - "display": "docker-compose.yml", - "kind": "exact", - "line": 36 - }, - { - "owner": "DEPLOYMENT-ROLLBACK", - "branch": "work/prc-deployment-rollback", - "path": "deploy/docker-compose.runtime.yml", - "display": "deploy/docker-compose.runtime.yml", - "kind": "exact", - "line": 36 - }, - { - "owner": "DEPLOYMENT-ROLLBACK", - "branch": "work/prc-deployment-rollback", - "path": "deploy/docker-compose.operator-web-standalone.yml", - "display": "deploy/docker-compose.operator-web-standalone.yml", - "kind": "exact", - "line": 36 - }, - { - "owner": "DEPLOYMENT-ROLLBACK", - "branch": "work/prc-deployment-rollback", - "path": "deploy/entrypoint-server.sh", - "display": "deploy/entrypoint-server.sh", - "kind": "exact", - "line": 36 - }, - { - "owner": "DEPLOYMENT-ROLLBACK", - "branch": "work/prc-deployment-rollback", - "path": "deploy/healthcheck-server.sh", - "display": "deploy/healthcheck-server.sh", - "kind": "exact", - "line": 36 - }, - { - "owner": "DEPLOYMENT-ROLLBACK", - "branch": "work/prc-deployment-rollback", - "path": "deploy/verify-rollback.ps1", - "display": "deploy/verify-rollback.ps1", - "kind": "exact", - "line": 36 - }, - { - "owner": "DEPLOYMENT-ROLLBACK", - "branch": "work/prc-deployment-rollback", - "path": "deploy/verify-runtime-policy.ps1", - "display": "deploy/verify-runtime-policy.ps1", - "kind": "exact", - "line": 36 - }, - { - "owner": "RECOVERY-DATA", - "branch": "work/prc-recovery-data", - "path": "scripts/recovery/start-disposable-postgres.ps1", - "display": "scripts/recovery/start-disposable-postgres.ps1", - "kind": "exact", - "line": 37 - }, - { - "owner": "RECOVERY-DATA", - "branch": "work/prc-recovery-data", - "path": "scripts/recovery/verify-postgres-roundtrip.ps1", - "display": "scripts/recovery/verify-postgres-roundtrip.ps1", - "kind": "exact", - "line": 37 - }, - { - "owner": "RECOVERY-DATA", - "branch": "work/prc-recovery-data", - "path": "scripts/recovery/seed-recovery-fixture.ps1", - "display": "scripts/recovery/seed-recovery-fixture.ps1", - "kind": "exact", - "line": 37 - }, - { - "owner": "RECOVERY-DATA", - "branch": "work/prc-recovery-data", - "path": "scripts/recovery/assert-recovery-fixture.ps1", - "display": "scripts/recovery/assert-recovery-fixture.ps1", - "kind": "exact", - "line": 37 - }, - { - "owner": "RECOVERY-DATA", - "branch": "work/prc-recovery-data", - "path": "tests/critical/recovery/postgres_roundtrip_test.go", - "display": "tests/critical/recovery/postgres_roundtrip_test.go", - "kind": "exact", - "line": 37 - }, - { - "owner": "OBSERVABILITY-OTLP", - "branch": "work/prc-observability-otlp", - "path": "internal/module/obs/logging.go", - "display": "internal/module/obs/logging.go", - "kind": "exact", - "line": 38 - }, - { - "owner": "OBSERVABILITY-OTLP", - "branch": "work/prc-observability-otlp", - "path": "internal/module/obs/logging_test.go", - "display": "internal/module/obs/logging_test.go", - "kind": "exact", - "line": 38 - }, - { - "owner": "OBSERVABILITY-OTLP", - "branch": "work/prc-observability-otlp", - "path": "internal/module/obs/meter.go", - "display": "internal/module/obs/meter.go", - "kind": "exact", - "line": 38 - }, - { - "owner": "OBSERVABILITY-OTLP", - "branch": "work/prc-observability-otlp", - "path": "internal/module/obs/meter_test.go", - "display": "internal/module/obs/meter_test.go", - "kind": "exact", - "line": 38 - }, - { - "owner": "OBSERVABILITY-OTLP", - "branch": "work/prc-observability-otlp", - "path": "internal/module/obs/metrics.go", - "display": "internal/module/obs/metrics.go", - "kind": "exact", - "line": 38 - }, - { - "owner": "OBSERVABILITY-OTLP", - "branch": "work/prc-observability-otlp", - "path": "internal/module/obs/metrics_test.go", - "display": "internal/module/obs/metrics_test.go", - "kind": "exact", - "line": 38 - }, - { - "owner": "OBSERVABILITY-OTLP", - "branch": "work/prc-observability-otlp", - "path": "cmd/engram-server/main.go", - "display": "cmd/engram-server/main.go", - "kind": "exact", - "line": 38 - }, - { - "owner": "OBSERVABILITY-OTLP", - "branch": "work/prc-observability-otlp", - "path": "cmd/engram-server/main_test.go", - "display": "cmd/engram-server/main_test.go", - "kind": "exact", - "line": 38 - }, - { - "owner": "OBSERVABILITY-OTLP", - "branch": "work/prc-observability-otlp", - "path": "scripts/production-smoke/verify-otlp.ps1", - "display": "scripts/production-smoke/verify-otlp.ps1", - "kind": "exact", - "line": 38 - }, - { - "owner": "PRIVACY-BOUNDARIES", - "branch": "work/prc-privacy-boundaries", - "path": "internal/scope/domain_policy.go", - "display": "internal/scope/domain_policy.go", - "kind": "exact", - "line": 39 - }, - { - "owner": "PRIVACY-BOUNDARIES", - "branch": "work/prc-privacy-boundaries", - "path": "internal/scope/domain_policy_test.go", - "display": "internal/scope/domain_policy_test.go", - "kind": "exact", - "line": 39 - }, - { - "owner": "PRIVACY-BOUNDARIES", - "branch": "work/prc-privacy-boundaries", - "path": "internal/scope/filter.go", - "display": "internal/scope/filter.go", - "kind": "exact", - "line": 39 - }, - { - "owner": "PRIVACY-BOUNDARIES", - "branch": "work/prc-privacy-boundaries", - "path": "internal/scope/filter_test.go", - "display": "internal/scope/filter_test.go", - "kind": "exact", - "line": 39 - }, - { - "owner": "PRIVACY-BOUNDARIES", - "branch": "work/prc-privacy-boundaries", - "path": "internal/scope/filter_principal_test.go", - "display": "internal/scope/filter_principal_test.go", - "kind": "exact", - "line": 39 - }, - { - "owner": "PRIVACY-BOUNDARIES", - "branch": "work/prc-privacy-boundaries", - "path": "internal/scope/filter_w4_test.go", - "display": "internal/scope/filter_w4_test.go", - "kind": "exact", - "line": 39 - }, - { - "owner": "PRIVACY-BOUNDARIES", - "branch": "work/prc-privacy-boundaries", - "path": "internal/principalmemory/access_policy.go", - "display": "internal/principalmemory/access_policy.go", - "kind": "exact", - "line": 39 - }, - { - "owner": "PRIVACY-BOUNDARIES", - "branch": "work/prc-privacy-boundaries", - "path": "internal/principalmemory/access_policy_test.go", - "display": "internal/principalmemory/access_policy_test.go", - "kind": "exact", - "line": 39 - }, - { - "owner": "PRIVACY-BOUNDARIES", - "branch": "work/prc-privacy-boundaries", - "path": "internal/principalmemory/domain_registry.go", - "display": "internal/principalmemory/domain_registry.go", - "kind": "exact", - "line": 39 - }, - { - "owner": "PRIVACY-BOUNDARIES", - "branch": "work/prc-privacy-boundaries", - "path": "internal/principalmemory/domain_registry_test.go", - "display": "internal/principalmemory/domain_registry_test.go", - "kind": "exact", - "line": 39 - }, - { - "owner": "PRIVACY-BOUNDARIES", - "branch": "work/prc-privacy-boundaries", - "path": "internal/principalmemory/query_service.go", - "display": "internal/principalmemory/query_service.go", - "kind": "exact", - "line": 39 - }, - { - "owner": "PRIVACY-BOUNDARIES", - "branch": "work/prc-privacy-boundaries", - "path": "internal/principalmemory/query_service_test.go", - "display": "internal/principalmemory/query_service_test.go", - "kind": "exact", - "line": 39 - }, - { - "owner": "PRIVACY-BOUNDARIES", - "branch": "work/prc-privacy-boundaries", - "path": "internal/mcp/tools_principal_memory.go", - "display": "internal/mcp/tools_principal_memory.go", - "kind": "exact", - "line": 39 - }, - { - "owner": "PRIVACY-BOUNDARIES", - "branch": "work/prc-privacy-boundaries", - "path": "internal/mcp/tools_principal_memory_test.go", - "display": "internal/mcp/tools_principal_memory_test.go", - "kind": "exact", - "line": 39 - }, - { - "owner": "PRIVACY-BOUNDARIES", - "branch": "work/prc-privacy-boundaries", - "path": "internal/mcp/tools_recall_principal_test.go", - "display": "internal/mcp/tools_recall_principal_test.go", - "kind": "exact", - "line": 39 - }, - { - "owner": "PRIVACY-BOUNDARIES", - "branch": "work/prc-privacy-boundaries", - "path": "internal/mcp/recall_visibility_backfill_test.go", - "display": "internal/mcp/recall_visibility_backfill_test.go", - "kind": "exact", - "line": 39 - }, - { - "owner": "PRIVACY-BOUNDARIES", - "branch": "work/prc-privacy-boundaries", - "path": "internal/mcp/store_memory_principal_test.go", - "display": "internal/mcp/store_memory_principal_test.go", - "kind": "exact", - "line": 39 - }, - { - "owner": "PRIVACY-BOUNDARIES", - "branch": "work/prc-privacy-boundaries", - "path": "internal/worker/handlers_principal_memory.go", - "display": "internal/worker/handlers_principal_memory.go", - "kind": "exact", - "line": 39 - }, - { - "owner": "PRIVACY-BOUNDARIES", - "branch": "work/prc-privacy-boundaries", - "path": "internal/worker/handlers_principal_memory_test.go", - "display": "internal/worker/handlers_principal_memory_test.go", - "kind": "exact", - "line": 39 - }, - { - "owner": "PRIVACY-BOUNDARIES", - "branch": "work/prc-privacy-boundaries", - "path": "internal/worker/scope_bypass_w4_test.go", - "display": "internal/worker/scope_bypass_w4_test.go", - "kind": "exact", - "line": 39 - }, - { - "owner": "PRIVACY-BOUNDARIES", - "branch": "work/prc-privacy-boundaries", - "path": "internal/worker/retention.go", - "display": "internal/worker/retention.go", - "kind": "exact", - "line": 39 - }, - { - "owner": "PRIVACY-BOUNDARIES", - "branch": "work/prc-privacy-boundaries", - "path": "internal/worker/retention_test.go", - "display": "internal/worker/retention_test.go", - "kind": "exact", - "line": 39 - }, - { - "owner": "PRIVACY-BOUNDARIES", - "branch": "work/prc-privacy-boundaries", - "path": "internal/db/gorm/memory_store.go", - "display": "internal/db/gorm/memory_store.go", - "kind": "exact", - "line": 39 - }, - { - "owner": "PRIVACY-BOUNDARIES", - "branch": "work/prc-privacy-boundaries", - "path": "internal/db/gorm/memory_store_principal_test.go", - "display": "internal/db/gorm/memory_store_principal_test.go", - "kind": "exact", - "line": 39 - }, - { - "owner": "PRIVACY-BOUNDARIES", - "branch": "work/prc-privacy-boundaries", - "path": "internal/db/gorm/memory_store_principal_query_test.go", - "display": "internal/db/gorm/memory_store_principal_query_test.go", - "kind": "exact", - "line": 39 - }, - { - "owner": "PRIVACY-BOUNDARIES", - "branch": "work/prc-privacy-boundaries", - "path": "internal/db/gorm/purge_store_test.go", - "display": "internal/db/gorm/purge_store_test.go", - "kind": "exact", - "line": 39 - }, - { - "owner": "PRIVACY-BOUNDARIES", - "branch": "work/prc-privacy-boundaries", - "path": "tests/critical/data_boundaries/principal_project_retention_test.go", - "display": "tests/critical/data_boundaries/principal_project_retention_test.go", - "kind": "exact", - "line": 39 - }, - { - "owner": "CRITICAL-HARNESS", - "branch": "work/prc-critical-harness", - "path": "tests/critical/customer_mode/customer_mode_test.go", - "display": "tests/critical/customer_mode/customer_mode_test.go", - "kind": "exact", - "line": 40 - }, - { - "owner": "CRITICAL-HARNESS", - "branch": "work/prc-critical-harness", - "path": "tests/critical/customer_mode/compatibility_test.go", - "display": "tests/critical/customer_mode/compatibility_test.go", - "kind": "exact", - "line": 40 - }, - { - "owner": "CRITICAL-HARNESS", - "branch": "work/prc-critical-harness", - "path": "tests/critical/customer_mode/cross_agent_test.go", - "display": "tests/critical/customer_mode/cross_agent_test.go", - "kind": "exact", - "line": 40 - }, - { - "owner": "CRITICAL-HARNESS", - "branch": "work/prc-critical-harness", - "path": "scripts/production-smoke/customer/run-customer-mode.ps1", - "display": "scripts/production-smoke/customer/run-customer-mode.ps1", - "kind": "exact", - "line": 40 - }, - { - "owner": "CRITICAL-HARNESS", - "branch": "work/prc-critical-harness", - "path": "scripts/production-smoke/customer/run-client-compatibility.ps1", - "display": "scripts/production-smoke/customer/run-client-compatibility.ps1", - "kind": "exact", - "line": 40 - }, - { - "owner": "CRITICAL-HARNESS", - "branch": "work/prc-critical-harness", - "path": "scripts/production-smoke/customer/run-cross-agent.ps1", - "display": "scripts/production-smoke/customer/run-cross-agent.ps1", - "kind": "exact", - "line": 40 - }, - { - "owner": "CRITICAL-HARNESS", - "branch": "work/prc-critical-harness", - "path": "scripts/production-smoke/customer/run-diagnostic-matrix.ps1", - "display": "scripts/production-smoke/customer/run-diagnostic-matrix.ps1", - "kind": "exact", - "line": 40 - }, - { - "owner": "CRITICAL-HARNESS", - "branch": "work/prc-critical-harness", - "path": "scripts/production-smoke/customer/assert-product-works.ps1", - "display": "scripts/production-smoke/customer/assert-product-works.ps1", - "kind": "exact", - "line": 40 - }, - { - "owner": "CORE-PUBLIC-TRUTH", - "branch": "work/prc-core-public-truth", - "path": "README.md", - "display": "README.md", - "kind": "exact", - "line": 41 - }, - { - "owner": "CORE-PUBLIC-TRUTH", - "branch": "work/prc-core-public-truth", - "path": "README.ru.md", - "display": "README.ru.md", - "kind": "exact", - "line": 41 - }, - { - "owner": "CORE-PUBLIC-TRUTH", - "branch": "work/prc-core-public-truth", - "path": "README.zh.md", - "display": "README.zh.md", - "kind": "exact", - "line": 41 - }, - { - "owner": "CORE-PUBLIC-TRUTH", - "branch": "work/prc-core-public-truth", - "path": "CONTRIBUTING.md", - "display": "CONTRIBUTING.md", - "kind": "exact", - "line": 41 - }, - { - "owner": "CORE-PUBLIC-TRUTH", - "branch": "work/prc-core-public-truth", - "path": "CHANGELOG.md", - "display": "CHANGELOG.md", - "kind": "exact", - "line": 41 - }, - { - "owner": "CORE-PUBLIC-TRUTH", - "branch": "work/prc-core-public-truth", - "path": "Makefile", - "display": "Makefile", - "kind": "exact", - "line": 41 - }, - { - "owner": "CORE-PUBLIC-TRUTH", - "branch": "work/prc-core-public-truth", - "path": ".env.example", - "display": ".env.example", - "kind": "exact", - "line": 41 - }, - { - "owner": "CORE-PUBLIC-TRUTH", - "branch": "work/prc-core-public-truth", - "path": "docs/DEPLOYMENT.md", - "display": "docs/DEPLOYMENT.md", - "kind": "exact", - "line": 41 - }, - { - "owner": "CORE-PUBLIC-TRUTH", - "branch": "work/prc-core-public-truth", - "path": "docs/MIGRATION.md", - "display": "docs/MIGRATION.md", - "kind": "exact", - "line": 41 - }, - { - "owner": "CORE-PUBLIC-TRUTH", - "branch": "work/prc-core-public-truth", - "path": "docs/PRODUCTION-TESTING-PLAYBOOK.md", - "display": "docs/PRODUCTION-TESTING-PLAYBOOK.md", - "kind": "exact", - "line": 41 - }, - { - "owner": "CORE-PUBLIC-TRUTH", - "branch": "work/prc-core-public-truth", - "path": "docs/arch/CONFIGURATION.md", - "display": "docs/arch/CONFIGURATION.md", - "kind": "exact", - "line": 41 - }, - { - "owner": "CORE-PUBLIC-TRUTH", - "branch": "work/prc-core-public-truth", - "path": "docs/arch/QUICKSTART.md", - "display": "docs/arch/QUICKSTART.md", - "kind": "exact", - "line": 41 - }, - { - "owner": "CORE-PUBLIC-TRUTH", - "branch": "work/prc-core-public-truth", - "path": "docs/release-notes/v6.43.0.md", - "display": "docs/release-notes/v6.43.0.md", - "kind": "exact", - "line": 41 - }, - { - "owner": "CORE-PUBLIC-TRUTH", - "branch": "work/prc-core-public-truth", - "path": "docs/public/engram.jpg", - "display": "docs/public/engram.jpg", - "kind": "exact", - "line": 41 - }, - { - "owner": "CORE-PUBLIC-TRUTH", - "branch": "work/prc-core-public-truth", - "path": "plugin/engram/commands/setup.md", - "display": "plugin/engram/commands/setup.md", - "kind": "exact", - "line": 41 - }, - { - "owner": "CORE-PUBLIC-TRUTH", - "branch": "work/prc-core-public-truth", - "path": "plugin/engram/commands/doctor.md", - "display": "plugin/engram/commands/doctor.md", - "kind": "exact", - "line": 41 - }, - { - "owner": "FINAL-PUBLIC-TRUTH", - "branch": "work/prc-final-public-truth", - "path": "README.md", - "display": "README.md", - "kind": "exact", - "line": 42 - }, - { - "owner": "FINAL-PUBLIC-TRUTH", - "branch": "work/prc-final-public-truth", - "path": "README.ru.md", - "display": "README.ru.md", - "kind": "exact", - "line": 42 - }, - { - "owner": "FINAL-PUBLIC-TRUTH", - "branch": "work/prc-final-public-truth", - "path": "README.zh.md", - "display": "README.zh.md", - "kind": "exact", - "line": 42 - }, - { - "owner": "FINAL-PUBLIC-TRUTH", - "branch": "work/prc-final-public-truth", - "path": "CONTRIBUTING.md", - "display": "CONTRIBUTING.md", - "kind": "exact", - "line": 42 - }, - { - "owner": "FINAL-PUBLIC-TRUTH", - "branch": "work/prc-final-public-truth", - "path": "CHANGELOG.md", - "display": "CHANGELOG.md", - "kind": "exact", - "line": 42 - }, - { - "owner": "FINAL-PUBLIC-TRUTH", - "branch": "work/prc-final-public-truth", - "path": "Makefile", - "display": "Makefile", - "kind": "exact", - "line": 42 - }, - { - "owner": "FINAL-PUBLIC-TRUTH", - "branch": "work/prc-final-public-truth", - "path": ".env.example", - "display": ".env.example", - "kind": "exact", - "line": 42 - }, - { - "owner": "FINAL-PUBLIC-TRUTH", - "branch": "work/prc-final-public-truth", - "path": "docs/DEPLOYMENT.md", - "display": "docs/DEPLOYMENT.md", - "kind": "exact", - "line": 42 - }, - { - "owner": "FINAL-PUBLIC-TRUTH", - "branch": "work/prc-final-public-truth", - "path": "docs/MIGRATION.md", - "display": "docs/MIGRATION.md", - "kind": "exact", - "line": 42 - }, - { - "owner": "FINAL-PUBLIC-TRUTH", - "branch": "work/prc-final-public-truth", - "path": "docs/PRODUCTION-TESTING-PLAYBOOK.md", - "display": "docs/PRODUCTION-TESTING-PLAYBOOK.md", - "kind": "exact", - "line": 42 - }, - { - "owner": "FINAL-PUBLIC-TRUTH", - "branch": "work/prc-final-public-truth", - "path": "docs/arch/CONFIGURATION.md", - "display": "docs/arch/CONFIGURATION.md", - "kind": "exact", - "line": 42 - }, - { - "owner": "FINAL-PUBLIC-TRUTH", - "branch": "work/prc-final-public-truth", - "path": "docs/arch/QUICKSTART.md", - "display": "docs/arch/QUICKSTART.md", - "kind": "exact", - "line": 42 - }, - { - "owner": "FINAL-PUBLIC-TRUTH", - "branch": "work/prc-final-public-truth", - "path": "docs/public/engram.jpg", - "display": "docs/public/engram.jpg", - "kind": "exact", - "line": 42 - }, - { - "owner": "FINAL-PUBLIC-TRUTH", - "branch": "work/prc-final-public-truth", - "path": "plugin/engram/commands/setup.md", - "display": "plugin/engram/commands/setup.md", - "kind": "exact", - "line": 42 - }, - { - "owner": "FINAL-PUBLIC-TRUTH", - "branch": "work/prc-final-public-truth", - "path": "plugin/engram/commands/doctor.md", - "display": "plugin/engram/commands/doctor.md", - "kind": "exact", - "line": 42 - }, - { - "owner": "LAUNCHER-FIRST-RUN", - "branch": "work/prc-launcher-first-run", - "path": "cmd/engram/main.go", - "display": "cmd/engram/main.go", - "kind": "exact", - "line": 43 - }, - { - "owner": "LAUNCHER-FIRST-RUN", - "branch": "work/prc-launcher-first-run", - "path": "cmd/engram/main_test.go", - "display": "cmd/engram/main_test.go", - "kind": "exact", - "line": 43 - }, - { - "owner": "LAUNCHER-FIRST-RUN", - "branch": "work/prc-launcher-first-run", - "path": "cmd/engram/wiring.go", - "display": "cmd/engram/wiring.go", - "kind": "exact", - "line": 43 - }, - { - "owner": "LAUNCHER-FIRST-RUN", - "branch": "work/prc-launcher-first-run", - "path": "cmd/engram/exec_windows.go", - "display": "cmd/engram/exec_windows.go", - "kind": "exact", - "line": 43 - }, - { - "owner": "LAUNCHER-FIRST-RUN", - "branch": "work/prc-launcher-first-run", - "path": "cmd/engram/exec_unix.go", - "display": "cmd/engram/exec_unix.go", - "kind": "exact", - "line": 43 - }, - { - "owner": "LAUNCHER-FIRST-RUN", - "branch": "work/prc-launcher-first-run", - "path": "plugin/engram/.engram-project", - "display": "plugin/engram/.engram-project", - "kind": "exact", - "line": 43 - }, - { - "owner": "LAUNCHER-FIRST-RUN", - "branch": "work/prc-launcher-first-run", - "path": "plugin/engram/scripts/run-engram.js", - "display": "plugin/engram/scripts/run-engram.js", - "kind": "exact", - "line": 43 - }, - { - "owner": "LAUNCHER-FIRST-RUN", - "branch": "work/prc-launcher-first-run", - "path": "plugin/engram/scripts/run-engram.test.js", - "display": "plugin/engram/scripts/run-engram.test.js", - "kind": "exact", - "line": 43 - }, - { - "owner": "LAUNCHER-FIRST-RUN", - "branch": "work/prc-launcher-first-run", - "path": "plugin/engram/scripts/ensure-binary.js", - "display": "plugin/engram/scripts/ensure-binary.js", - "kind": "exact", - "line": 43 - }, - { - "owner": "LAUNCHER-FIRST-RUN", - "branch": "work/prc-launcher-first-run", - "path": "plugin/engram/scripts/ensure-binary.test.js", - "display": "plugin/engram/scripts/ensure-binary.test.js", - "kind": "exact", - "line": 43 - }, - { - "owner": "OC-INTEGRATION", - "branch": "work/prc-operator-console-integration", - "path": "apps/operator-console", - "display": "apps/operator-console/**", - "kind": "prefix", - "line": 44 - }, - { - "owner": "S4B-CONTRACT", - "branch": "work/prc-s4b-contract", - "path": ".agent/specs/engram-v7-directives-surfacing", - "display": ".agent/specs/engram-v7-directives-surfacing/**", - "kind": "prefix", - "line": 45 - }, - { - "owner": "V7-S4B-BACKEND", - "branch": "work/prc-v7-s4b-backend", - "path": "internal/cognitive/s4bsurfacing", - "display": "internal/cognitive/s4bsurfacing/**", - "kind": "prefix", - "line": 46 - }, - { - "owner": "V7-CORE-CALLPATH", - "branch": "work/prc-v7-core-callpath", - "path": "internal/cognitive/core/event_bus.go", - "display": "internal/cognitive/core/event_bus.go", - "kind": "exact", - "line": 47 - }, - { - "owner": "V7-CORE-CALLPATH", - "branch": "work/prc-v7-core-callpath", - "path": "internal/cognitive/core/event_bus_test.go", - "display": "internal/cognitive/core/event_bus_test.go", - "kind": "exact", - "line": 47 - }, - { - "owner": "V7-CORE-CALLPATH", - "branch": "work/prc-v7-core-callpath", - "path": "internal/cognitive/core/hint_queue.go", - "display": "internal/cognitive/core/hint_queue.go", - "kind": "exact", - "line": 47 - }, - { - "owner": "V7-CORE-CALLPATH", - "branch": "work/prc-v7-core-callpath", - "path": "internal/cognitive/core/hint_queue_test.go", - "display": "internal/cognitive/core/hint_queue_test.go", - "kind": "exact", - "line": 47 - }, - { - "owner": "V7-CORE-CALLPATH", - "branch": "work/prc-v7-core-callpath", - "path": "internal/cognitive/s3ambient/queue.go", - "display": "internal/cognitive/s3ambient/queue.go", - "kind": "exact", - "line": 47 - }, - { - "owner": "V7-CORE-CALLPATH", - "branch": "work/prc-v7-core-callpath", - "path": "internal/cognitive/s3ambient/subsystem.go", - "display": "internal/cognitive/s3ambient/subsystem.go", - "kind": "exact", - "line": 47 - }, - { - "owner": "V7-RUNTIME-WIRING", - "branch": "work/prc-v7-runtime-wiring", - "path": "internal/worker/service.go", - "display": "internal/worker/service.go", - "kind": "exact", - "line": 48 - }, - { - "owner": "V7-RUNTIME-WIRING", - "branch": "work/prc-v7-runtime-wiring", - "path": "internal/worker/service_v7_integration_test.go", - "display": "internal/worker/service_v7_integration_test.go", - "kind": "exact", - "line": 48 - }, - { - "owner": "V7-RUNTIME-WIRING", - "branch": "work/prc-v7-runtime-wiring", - "path": "internal/worker/handlers_stats_v7.go", - "display": "internal/worker/handlers_stats_v7.go", - "kind": "exact", - "line": 48 - }, - { - "owner": "V7-RUNTIME-WIRING", - "branch": "work/prc-v7-runtime-wiring", - "path": "internal/worker/handlers_stats_v7_test.go", - "display": "internal/worker/handlers_stats_v7_test.go", - "kind": "exact", - "line": 48 - }, - { - "owner": "V7-TELEMETRY-WIRING", - "branch": "work/prc-v7-telemetry-wiring", - "path": "internal/cognitive/s5/metrics.go", - "display": "internal/cognitive/s5/metrics.go", - "kind": "exact", - "line": 49 - }, - { - "owner": "V7-TELEMETRY-WIRING", - "branch": "work/prc-v7-telemetry-wiring", - "path": "internal/cognitive/s5/provider.go", - "display": "internal/cognitive/s5/provider.go", - "kind": "exact", - "line": 49 - }, - { - "owner": "V7-TELEMETRY-WIRING", - "branch": "work/prc-v7-telemetry-wiring", - "path": "internal/cognitive/s5/provider_test.go", - "display": "internal/cognitive/s5/provider_test.go", - "kind": "exact", - "line": 49 - }, - { - "owner": "V7-TELEMETRY-WIRING", - "branch": "work/prc-v7-telemetry-wiring", - "path": "internal/cognitive/s5/source_adapter.go", - "display": "internal/cognitive/s5/source_adapter.go", - "kind": "exact", - "line": 49 - }, - { - "owner": "V7-TELEMETRY-WIRING", - "branch": "work/prc-v7-telemetry-wiring", - "path": "internal/cognitive/s5/source_adapter_test.go", - "display": "internal/cognitive/s5/source_adapter_test.go", - "kind": "exact", - "line": 49 - }, - { - "owner": "ROADMAP-RECONCILIATION", - "branch": "work/prc-roadmap-reconciliation", - "path": ".agent/specs/roadmap.md", - "display": ".agent/specs/roadmap.md", - "kind": "exact", - "line": 50 - }, - { - "owner": "ROADMAP-RECONCILIATION", - "branch": "work/prc-roadmap-reconciliation", - "path": ".agent/specs/ui-surface-ledger.md", - "display": ".agent/specs/ui-surface-ledger.md", - "kind": "exact", - "line": 50 - }, - { - "owner": "ROADMAP-RECONCILIATION", - "branch": "work/prc-roadmap-reconciliation", - "path": ".agent/specs/operator-console-production-integration", - "display": ".agent/specs/operator-console-production-integration/**", - "kind": "prefix", - "line": 50 - }, - { - "owner": "ROADMAP-RECONCILIATION", - "branch": "work/prc-roadmap-reconciliation", - "path": ".agent/specs/engram-v7-ambient/spec.md", - "display": ".agent/specs/engram-v7-ambient/spec.md", - "kind": "exact", - "line": 50 - }, - { - "owner": "ROADMAP-RECONCILIATION", - "branch": "work/prc-roadmap-reconciliation", - "path": ".agent/specs/engram-v7-ambient/plan.md", - "display": ".agent/specs/engram-v7-ambient/plan.md", - "kind": "exact", - "line": 50 - }, - { - "owner": "ROADMAP-RECONCILIATION", - "branch": "work/prc-roadmap-reconciliation", - "path": ".agent/specs/engram-v7-ambient/checklists/general.md", - "display": ".agent/specs/engram-v7-ambient/checklists/general.md", - "kind": "exact", - "line": 50 - }, - { - "owner": "ROADMAP-RECONCILIATION", - "branch": "work/prc-roadmap-reconciliation", - "path": ".agent/specs/engram-v7-ambient/changes/CR-001-initial-scope/change.md", - "display": ".agent/specs/engram-v7-ambient/changes/CR-001-initial-scope/change.md", - "kind": "exact", - "line": 50 - }, - { - "owner": "ROADMAP-RECONCILIATION", - "branch": "work/prc-roadmap-reconciliation", - "path": ".agent/specs/engram-v7-ambient/changes/CR-001-initial-scope/tasks.md", - "display": ".agent/specs/engram-v7-ambient/changes/CR-001-initial-scope/tasks.md", - "kind": "exact", - "line": 50 - }, - { - "owner": "NORTHSTAR-CI-A-CONTRACTS", - "branch": "work/prc-northstar-ci-a-contracts", - "path": ".agent/specs/engram-absorption/ci-a-dense-vector/spec.md", - "display": ".agent/specs/engram-absorption/ci-a-dense-vector/spec.md", - "kind": "exact", - "line": 51 - }, - { - "owner": "NORTHSTAR-CI-A-CONTRACTS", - "branch": "work/prc-northstar-ci-a-contracts", - "path": ".agent/specs/engram-absorption/ci-a-dense-vector/plan.md", - "display": ".agent/specs/engram-absorption/ci-a-dense-vector/plan.md", - "kind": "exact", - "line": 51 - }, - { - "owner": "NORTHSTAR-CI-A-CONTRACTS", - "branch": "work/prc-northstar-ci-a-contracts", - "path": ".agent/specs/engram-absorption/ci-a-dense-vector/checklists/general.md", - "display": ".agent/specs/engram-absorption/ci-a-dense-vector/checklists/general.md", - "kind": "exact", - "line": 51 - }, - { - "owner": "NORTHSTAR-CI-A-CONTRACTS", - "branch": "work/prc-northstar-ci-a-contracts", - "path": ".agent/specs/engram-absorption/ci-a-dense-vector/changes/CR-001-initial-scope/change.md", - "display": ".agent/specs/engram-absorption/ci-a-dense-vector/changes/CR-001-initial-scope/change.md", - "kind": "exact", - "line": 51 - }, - { - "owner": "NORTHSTAR-CI-A-CONTRACTS", - "branch": "work/prc-northstar-ci-a-contracts", - "path": ".agent/specs/engram-absorption/ci-a-dense-vector/changes/CR-001-initial-scope/tasks.md", - "display": ".agent/specs/engram-absorption/ci-a-dense-vector/changes/CR-001-initial-scope/tasks.md", - "kind": "exact", - "line": 51 - }, - { - "owner": "NORTHSTAR-CI-B-CONTRACTS", - "branch": "work/prc-northstar-ci-b-contracts", - "path": ".agent/specs/engram-absorption/ci-b-graph-watcher-context/spec.md", - "display": ".agent/specs/engram-absorption/ci-b-graph-watcher-context/spec.md", - "kind": "exact", - "line": 52 - }, - { - "owner": "NORTHSTAR-CI-B-CONTRACTS", - "branch": "work/prc-northstar-ci-b-contracts", - "path": ".agent/specs/engram-absorption/ci-b-graph-watcher-context/plan.md", - "display": ".agent/specs/engram-absorption/ci-b-graph-watcher-context/plan.md", - "kind": "exact", - "line": 52 - }, - { - "owner": "NORTHSTAR-CI-B-CONTRACTS", - "branch": "work/prc-northstar-ci-b-contracts", - "path": ".agent/specs/engram-absorption/ci-b-graph-watcher-context/checklists/general.md", - "display": ".agent/specs/engram-absorption/ci-b-graph-watcher-context/checklists/general.md", - "kind": "exact", - "line": 52 - }, - { - "owner": "NORTHSTAR-CI-B-CONTRACTS", - "branch": "work/prc-northstar-ci-b-contracts", - "path": ".agent/specs/engram-absorption/ci-b-graph-watcher-context/changes/CR-001-initial-scope/change.md", - "display": ".agent/specs/engram-absorption/ci-b-graph-watcher-context/changes/CR-001-initial-scope/change.md", - "kind": "exact", - "line": 52 - }, - { - "owner": "NORTHSTAR-CI-B-CONTRACTS", - "branch": "work/prc-northstar-ci-b-contracts", - "path": ".agent/specs/engram-absorption/ci-b-graph-watcher-context/changes/CR-001-initial-scope/tasks.md", - "display": ".agent/specs/engram-absorption/ci-b-graph-watcher-context/changes/CR-001-initial-scope/tasks.md", - "kind": "exact", - "line": 52 - }, - { - "owner": "NORTHSTAR-BOOK-CONTRACTS", - "branch": "work/prc-northstar-book-contracts", - "path": ".agent/specs/engram-absorption/book/prd.md", - "display": ".agent/specs/engram-absorption/book/prd.md", - "kind": "exact", - "line": 53 - }, - { - "owner": "NORTHSTAR-BOOK-CONTRACTS", - "branch": "work/prc-northstar-book-contracts", - "path": ".agent/specs/engram-absorption/book/spec.md", - "display": ".agent/specs/engram-absorption/book/spec.md", - "kind": "exact", - "line": 53 - }, - { - "owner": "NORTHSTAR-BOOK-CONTRACTS", - "branch": "work/prc-northstar-book-contracts", - "path": ".agent/specs/engram-absorption/book/plan.md", - "display": ".agent/specs/engram-absorption/book/plan.md", - "kind": "exact", - "line": 53 - }, - { - "owner": "NORTHSTAR-BOOK-CONTRACTS", - "branch": "work/prc-northstar-book-contracts", - "path": ".agent/specs/engram-absorption/book/checklists/general.md", - "display": ".agent/specs/engram-absorption/book/checklists/general.md", - "kind": "exact", - "line": 53 - }, - { - "owner": "NORTHSTAR-BOOK-CONTRACTS", - "branch": "work/prc-northstar-book-contracts", - "path": ".agent/specs/engram-absorption/book/changes/CR-001-initial-scope/change.md", - "display": ".agent/specs/engram-absorption/book/changes/CR-001-initial-scope/change.md", - "kind": "exact", - "line": 53 - }, - { - "owner": "NORTHSTAR-BOOK-CONTRACTS", - "branch": "work/prc-northstar-book-contracts", - "path": ".agent/specs/engram-absorption/book/changes/CR-001-initial-scope/tasks.md", - "display": ".agent/specs/engram-absorption/book/changes/CR-001-initial-scope/tasks.md", - "kind": "exact", - "line": 53 - }, - { - "owner": "NORTHSTAR-MEM-CONTRACTS", - "branch": "work/prc-northstar-mem-contracts", - "path": ".agent/specs/engram-absorption/mem-residual/spec.md", - "display": ".agent/specs/engram-absorption/mem-residual/spec.md", - "kind": "exact", - "line": 54 - }, - { - "owner": "NORTHSTAR-MEM-CONTRACTS", - "branch": "work/prc-northstar-mem-contracts", - "path": ".agent/specs/engram-absorption/mem-residual/plan.md", - "display": ".agent/specs/engram-absorption/mem-residual/plan.md", - "kind": "exact", - "line": 54 - }, - { - "owner": "NORTHSTAR-MEM-CONTRACTS", - "branch": "work/prc-northstar-mem-contracts", - "path": ".agent/specs/engram-absorption/mem-residual/checklists/general.md", - "display": ".agent/specs/engram-absorption/mem-residual/checklists/general.md", - "kind": "exact", - "line": 54 - }, - { - "owner": "NORTHSTAR-MEM-CONTRACTS", - "branch": "work/prc-northstar-mem-contracts", - "path": ".agent/specs/engram-absorption/mem-residual/changes/CR-001-initial-scope/change.md", - "display": ".agent/specs/engram-absorption/mem-residual/changes/CR-001-initial-scope/change.md", - "kind": "exact", - "line": 54 - }, - { - "owner": "NORTHSTAR-MEM-CONTRACTS", - "branch": "work/prc-northstar-mem-contracts", - "path": ".agent/specs/engram-absorption/mem-residual/changes/CR-001-initial-scope/tasks.md", - "display": ".agent/specs/engram-absorption/mem-residual/changes/CR-001-initial-scope/tasks.md", - "kind": "exact", - "line": 54 - }, - { - "owner": "NORTHSTAR-EFFECTIVENESS-CONTRACTS", - "branch": "work/prc-northstar-effectiveness-contracts", - "path": ".agent/specs/engram-effectiveness/production-ready-residual/spec.md", - "display": ".agent/specs/engram-effectiveness/production-ready-residual/spec.md", - "kind": "exact", - "line": 55 - }, - { - "owner": "NORTHSTAR-EFFECTIVENESS-CONTRACTS", - "branch": "work/prc-northstar-effectiveness-contracts", - "path": ".agent/specs/engram-effectiveness/production-ready-residual/plan.md", - "display": ".agent/specs/engram-effectiveness/production-ready-residual/plan.md", - "kind": "exact", - "line": 55 - }, - { - "owner": "NORTHSTAR-EFFECTIVENESS-CONTRACTS", - "branch": "work/prc-northstar-effectiveness-contracts", - "path": ".agent/specs/engram-effectiveness/production-ready-residual/checklists/general.md", - "display": ".agent/specs/engram-effectiveness/production-ready-residual/checklists/general.md", - "kind": "exact", - "line": 55 - }, - { - "owner": "NORTHSTAR-EFFECTIVENESS-CONTRACTS", - "branch": "work/prc-northstar-effectiveness-contracts", - "path": ".agent/specs/engram-effectiveness/production-ready-residual/changes/CR-001-initial-scope/change.md", - "display": ".agent/specs/engram-effectiveness/production-ready-residual/changes/CR-001-initial-scope/change.md", - "kind": "exact", - "line": 55 - }, - { - "owner": "NORTHSTAR-EFFECTIVENESS-CONTRACTS", - "branch": "work/prc-northstar-effectiveness-contracts", - "path": ".agent/specs/engram-effectiveness/production-ready-residual/changes/CR-001-initial-scope/tasks.md", - "display": ".agent/specs/engram-effectiveness/production-ready-residual/changes/CR-001-initial-scope/tasks.md", - "kind": "exact", - "line": 55 - }, - { - "owner": "NORTHSTAR-SETTINGS-CONTRACTS", - "branch": "work/prc-northstar-settings-contracts", - "path": ".agent/specs/settings-store/production-ready-residual/spec.md", - "display": ".agent/specs/settings-store/production-ready-residual/spec.md", - "kind": "exact", - "line": 56 - }, - { - "owner": "NORTHSTAR-SETTINGS-CONTRACTS", - "branch": "work/prc-northstar-settings-contracts", - "path": ".agent/specs/settings-store/production-ready-residual/plan.md", - "display": ".agent/specs/settings-store/production-ready-residual/plan.md", - "kind": "exact", - "line": 56 - }, - { - "owner": "NORTHSTAR-SETTINGS-CONTRACTS", - "branch": "work/prc-northstar-settings-contracts", - "path": ".agent/specs/settings-store/production-ready-residual/checklists/general.md", - "display": ".agent/specs/settings-store/production-ready-residual/checklists/general.md", - "kind": "exact", - "line": 56 - }, - { - "owner": "NORTHSTAR-SETTINGS-CONTRACTS", - "branch": "work/prc-northstar-settings-contracts", - "path": ".agent/specs/settings-store/production-ready-residual/changes/CR-001-initial-scope/change.md", - "display": ".agent/specs/settings-store/production-ready-residual/changes/CR-001-initial-scope/change.md", - "kind": "exact", - "line": 56 - }, - { - "owner": "NORTHSTAR-SETTINGS-CONTRACTS", - "branch": "work/prc-northstar-settings-contracts", - "path": ".agent/specs/settings-store/production-ready-residual/changes/CR-001-initial-scope/tasks.md", - "display": ".agent/specs/settings-store/production-ready-residual/changes/CR-001-initial-scope/tasks.md", - "kind": "exact", - "line": 56 - } - ], - "repeated_exact_paths": [ - { - "path": ".env.example", - "exact_owners": [ - "CORE-PUBLIC-TRUTH", - "FINAL-PUBLIC-TRUTH" - ], - "prefix_owners": [], - "effective_owners": [ - "CORE-PUBLIC-TRUTH", - "FINAL-PUBLIC-TRUTH" - ], - "declared_epoch": true, - "epoch_owners": [ - "CORE-PUBLIC-TRUTH", - "FINAL-PUBLIC-TRUTH" - ] - }, - { - "path": ".github/workflows/test.yml", - "exact_owners": [ - "RELEASE-GATES", - "IMAGE-REMEDIATION" - ], - "prefix_owners": [], - "effective_owners": [ - "RELEASE-GATES", - "IMAGE-REMEDIATION" - ], - "declared_epoch": true, - "epoch_owners": [ - "RELEASE-GATES", - "IMAGE-REMEDIATION" - ] - }, - { - "path": "apps/operator-console/package-lock.json", - "exact_owners": [ - "IMAGE-REMEDIATION" - ], - "prefix_owners": [ - "OC-INTEGRATION" - ], - "effective_owners": [ - "IMAGE-REMEDIATION", - "OC-INTEGRATION" - ], - "declared_epoch": true, - "epoch_owners": [ - "IMAGE-REMEDIATION", - "OC-INTEGRATION" - ] - }, - { - "path": "apps/operator-console/package.json", - "exact_owners": [ - "IMAGE-REMEDIATION" - ], - "prefix_owners": [ - "OC-INTEGRATION" - ], - "effective_owners": [ - "IMAGE-REMEDIATION", - "OC-INTEGRATION" - ], - "declared_epoch": true, - "epoch_owners": [ - "IMAGE-REMEDIATION", - "OC-INTEGRATION" - ] - }, - { - "path": "CHANGELOG.md", - "exact_owners": [ - "CORE-PUBLIC-TRUTH", - "FINAL-PUBLIC-TRUTH" - ], - "prefix_owners": [], - "effective_owners": [ - "CORE-PUBLIC-TRUTH", - "FINAL-PUBLIC-TRUTH" - ], - "declared_epoch": true, - "epoch_owners": [ - "CORE-PUBLIC-TRUTH", - "FINAL-PUBLIC-TRUTH" - ] - }, - { - "path": "CONTRIBUTING.md", - "exact_owners": [ - "CORE-PUBLIC-TRUTH", - "FINAL-PUBLIC-TRUTH" - ], - "prefix_owners": [], - "effective_owners": [ - "CORE-PUBLIC-TRUTH", - "FINAL-PUBLIC-TRUTH" - ], - "declared_epoch": true, - "epoch_owners": [ - "CORE-PUBLIC-TRUTH", - "FINAL-PUBLIC-TRUTH" - ] - }, - { - "path": "deploy/docker-compose.runtime.yml", - "exact_owners": [ - "IMAGE-REMEDIATION", - "DEPLOYMENT-ROLLBACK" - ], - "prefix_owners": [], - "effective_owners": [ - "IMAGE-REMEDIATION", - "DEPLOYMENT-ROLLBACK" - ], - "declared_epoch": true, - "epoch_owners": [ - "IMAGE-REMEDIATION", - "DEPLOYMENT-ROLLBACK" - ] - }, - { - "path": "docker-compose.yml", - "exact_owners": [ - "IMAGE-REMEDIATION", - "DEPLOYMENT-ROLLBACK" - ], - "prefix_owners": [], - "effective_owners": [ - "IMAGE-REMEDIATION", - "DEPLOYMENT-ROLLBACK" - ], - "declared_epoch": true, - "epoch_owners": [ - "IMAGE-REMEDIATION", - "DEPLOYMENT-ROLLBACK" - ] - }, - { - "path": "Dockerfile", - "exact_owners": [ - "SECURITY-TOOLCHAIN", - "IMAGE-REMEDIATION" - ], - "prefix_owners": [], - "effective_owners": [ - "SECURITY-TOOLCHAIN", - "IMAGE-REMEDIATION" - ], - "declared_epoch": true, - "epoch_owners": [ - "SECURITY-TOOLCHAIN", - "IMAGE-REMEDIATION" - ] - }, - { - "path": "docs/arch/CONFIGURATION.md", - "exact_owners": [ - "CORE-PUBLIC-TRUTH", - "FINAL-PUBLIC-TRUTH" - ], - "prefix_owners": [], - "effective_owners": [ - "CORE-PUBLIC-TRUTH", - "FINAL-PUBLIC-TRUTH" - ], - "declared_epoch": true, - "epoch_owners": [ - "CORE-PUBLIC-TRUTH", - "FINAL-PUBLIC-TRUTH" - ] - }, - { - "path": "docs/arch/QUICKSTART.md", - "exact_owners": [ - "CORE-PUBLIC-TRUTH", - "FINAL-PUBLIC-TRUTH" - ], - "prefix_owners": [], - "effective_owners": [ - "CORE-PUBLIC-TRUTH", - "FINAL-PUBLIC-TRUTH" - ], - "declared_epoch": true, - "epoch_owners": [ - "CORE-PUBLIC-TRUTH", - "FINAL-PUBLIC-TRUTH" - ] - }, - { - "path": "docs/DEPLOYMENT.md", - "exact_owners": [ - "IMAGE-REMEDIATION", - "CORE-PUBLIC-TRUTH", - "FINAL-PUBLIC-TRUTH" - ], - "prefix_owners": [], - "effective_owners": [ - "IMAGE-REMEDIATION", - "CORE-PUBLIC-TRUTH", - "FINAL-PUBLIC-TRUTH" - ], - "declared_epoch": true, - "epoch_owners": [ - "IMAGE-REMEDIATION", - "CORE-PUBLIC-TRUTH", - "FINAL-PUBLIC-TRUTH" - ] - }, - { - "path": "docs/MIGRATION.md", - "exact_owners": [ - "CORE-PUBLIC-TRUTH", - "FINAL-PUBLIC-TRUTH" - ], - "prefix_owners": [], - "effective_owners": [ - "CORE-PUBLIC-TRUTH", - "FINAL-PUBLIC-TRUTH" - ], - "declared_epoch": true, - "epoch_owners": [ - "CORE-PUBLIC-TRUTH", - "FINAL-PUBLIC-TRUTH" - ] - }, - { - "path": "docs/PRODUCTION-TESTING-PLAYBOOK.md", - "exact_owners": [ - "IMAGE-REMEDIATION", - "CORE-PUBLIC-TRUTH", - "FINAL-PUBLIC-TRUTH" - ], - "prefix_owners": [], - "effective_owners": [ - "IMAGE-REMEDIATION", - "CORE-PUBLIC-TRUTH", - "FINAL-PUBLIC-TRUTH" - ], - "declared_epoch": true, - "epoch_owners": [ - "IMAGE-REMEDIATION", - "CORE-PUBLIC-TRUTH", - "FINAL-PUBLIC-TRUTH" - ] - }, - { - "path": "docs/public/engram.jpg", - "exact_owners": [ - "CORE-PUBLIC-TRUTH", - "FINAL-PUBLIC-TRUTH" - ], - "prefix_owners": [], - "effective_owners": [ - "CORE-PUBLIC-TRUTH", - "FINAL-PUBLIC-TRUTH" - ], - "declared_epoch": true, - "epoch_owners": [ - "CORE-PUBLIC-TRUTH", - "FINAL-PUBLIC-TRUTH" - ] - }, - { - "path": "internal/bulkops/facade_test.go", - "exact_owners": [ - "DB-BULKOPS", - "INGEST-DOC-SNAPSHOT-DEMOLITION" - ], - "prefix_owners": [], - "effective_owners": [ - "DB-BULKOPS", - "INGEST-DOC-SNAPSHOT-DEMOLITION" - ], - "declared_epoch": true, - "epoch_owners": [ - "DB-BULKOPS", - "INGEST-DOC-SNAPSHOT-DEMOLITION" - ] - }, - { - "path": "internal/bulkops/facade.go", - "exact_owners": [ - "DB-BULKOPS", - "INGEST-DOC-SNAPSHOT-DEMOLITION", - "DURABLE-AUDIT-BOUNDARIES" - ], - "prefix_owners": [], - "effective_owners": [ - "DB-BULKOPS", - "INGEST-DOC-SNAPSHOT-DEMOLITION", - "DURABLE-AUDIT-BOUNDARIES" - ], - "declared_epoch": true, - "epoch_owners": [ - "DB-BULKOPS", - "INGEST-DOC-SNAPSHOT-DEMOLITION", - "DURABLE-AUDIT-BOUNDARIES" - ] - }, - { - "path": "internal/bulkops/rollback_test.go", - "exact_owners": [ - "DB-BULKOPS", - "CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK" - ], - "prefix_owners": [], - "effective_owners": [ - "DB-BULKOPS", - "CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK" - ], - "declared_epoch": true, - "epoch_owners": [ - "DB-BULKOPS", - "CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK" - ] - }, - { - "path": "internal/db/gorm/candidate_store_test.go", - "exact_owners": [ - "DB-BULKOPS", - "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK", - "DB-GOVERNANCE", - "CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK" - ], - "prefix_owners": [], - "effective_owners": [ - "DB-BULKOPS", - "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK", - "DB-GOVERNANCE", - "CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK" - ], - "declared_epoch": true, - "epoch_owners": [ - "DB-BULKOPS", - "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK", - "DB-GOVERNANCE", - "CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK" - ] - }, - { - "path": "internal/db/gorm/candidate_store.go", - "exact_owners": [ - "DB-BULKOPS", - "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK", - "DB-GOVERNANCE", - "CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK" - ], - "prefix_owners": [], - "effective_owners": [ - "DB-BULKOPS", - "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK", - "DB-GOVERNANCE", - "CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK" - ], - "declared_epoch": true, - "epoch_owners": [ - "DB-BULKOPS", - "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK", - "DB-GOVERNANCE", - "CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK" - ] - }, - { - "path": "internal/db/gorm/user_store.go", - "exact_owners": [ - "DB-AUTH", - "AUTH-BOOTSTRAP-SECURITY", - "DURABLE-AUDIT-BOUNDARIES" - ], - "prefix_owners": [], - "effective_owners": [ - "DB-AUTH", - "AUTH-BOOTSTRAP-SECURITY", - "DURABLE-AUDIT-BOUNDARIES" - ], - "declared_epoch": true, - "epoch_owners": [ - "DB-AUTH", - "AUTH-BOOTSTRAP-SECURITY", - "DURABLE-AUDIT-BOUNDARIES" - ] - }, - { - "path": "internal/mcp/tools_bulkops.go", - "exact_owners": [ - "DB-BULKOPS", - "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK" - ], - "prefix_owners": [], - "effective_owners": [ - "DB-BULKOPS", - "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK" - ], - "declared_epoch": true, - "epoch_owners": [ - "DB-BULKOPS", - "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK" - ] - }, - { - "path": "internal/mcp/tools_dryrun_test.go", - "exact_owners": [ - "DB-BULKOPS", - "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK" - ], - "prefix_owners": [], - "effective_owners": [ - "DB-BULKOPS", - "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK" - ], - "declared_epoch": true, - "epoch_owners": [ - "DB-BULKOPS", - "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK" - ] - }, - { - "path": "internal/worker/auth_handlers.go", - "exact_owners": [ - "DB-AUTH", - "AUTH-BOOTSTRAP-SECURITY", - "DURABLE-AUDIT-BOUNDARIES" - ], - "prefix_owners": [], - "effective_owners": [ - "DB-AUTH", - "AUTH-BOOTSTRAP-SECURITY", - "DURABLE-AUDIT-BOUNDARIES" - ], - "declared_epoch": true, - "epoch_owners": [ - "DB-AUTH", - "AUTH-BOOTSTRAP-SECURITY", - "DURABLE-AUDIT-BOUNDARIES" - ] - }, - { - "path": "internal/worker/service.go", - "exact_owners": [ - "AUTH-BOOTSTRAP-SECURITY", - "V7-RUNTIME-WIRING" - ], - "prefix_owners": [], - "effective_owners": [ - "AUTH-BOOTSTRAP-SECURITY", - "V7-RUNTIME-WIRING" - ], - "declared_epoch": true, - "epoch_owners": [ - "AUTH-BOOTSTRAP-SECURITY", - "V7-RUNTIME-WIRING" - ] - }, - { - "path": "Makefile", - "exact_owners": [ - "CORE-PUBLIC-TRUTH", - "FINAL-PUBLIC-TRUTH" - ], - "prefix_owners": [], - "effective_owners": [ - "CORE-PUBLIC-TRUTH", - "FINAL-PUBLIC-TRUTH" - ], - "declared_epoch": true, - "epoch_owners": [ - "CORE-PUBLIC-TRUTH", - "FINAL-PUBLIC-TRUTH" - ] - }, - { - "path": "pkg/models/snapshot.go", - "exact_owners": [ - "DB-BULKOPS", - "INGEST-DOC-SNAPSHOT-DEMOLITION" - ], - "prefix_owners": [], - "effective_owners": [ - "DB-BULKOPS", - "INGEST-DOC-SNAPSHOT-DEMOLITION" - ], - "declared_epoch": true, - "epoch_owners": [ - "DB-BULKOPS", - "INGEST-DOC-SNAPSHOT-DEMOLITION" - ] - }, - { - "path": "plugin/engram/commands/doctor.md", - "exact_owners": [ - "CORE-PUBLIC-TRUTH", - "FINAL-PUBLIC-TRUTH" - ], - "prefix_owners": [], - "effective_owners": [ - "CORE-PUBLIC-TRUTH", - "FINAL-PUBLIC-TRUTH" - ], - "declared_epoch": true, - "epoch_owners": [ - "CORE-PUBLIC-TRUTH", - "FINAL-PUBLIC-TRUTH" - ] - }, - { - "path": "plugin/engram/commands/setup.md", - "exact_owners": [ - "CORE-PUBLIC-TRUTH", - "FINAL-PUBLIC-TRUTH" - ], - "prefix_owners": [], - "effective_owners": [ - "CORE-PUBLIC-TRUTH", - "FINAL-PUBLIC-TRUTH" - ], - "declared_epoch": true, - "epoch_owners": [ - "CORE-PUBLIC-TRUTH", - "FINAL-PUBLIC-TRUTH" - ] - }, - { - "path": "README.md", - "exact_owners": [ - "CORE-PUBLIC-TRUTH", - "FINAL-PUBLIC-TRUTH" - ], - "prefix_owners": [], - "effective_owners": [ - "CORE-PUBLIC-TRUTH", - "FINAL-PUBLIC-TRUTH" - ], - "declared_epoch": true, - "epoch_owners": [ - "CORE-PUBLIC-TRUTH", - "FINAL-PUBLIC-TRUTH" - ] - }, - { - "path": "README.ru.md", - "exact_owners": [ - "CORE-PUBLIC-TRUTH", - "FINAL-PUBLIC-TRUTH" - ], - "prefix_owners": [], - "effective_owners": [ - "CORE-PUBLIC-TRUTH", - "FINAL-PUBLIC-TRUTH" - ], - "declared_epoch": true, - "epoch_owners": [ - "CORE-PUBLIC-TRUTH", - "FINAL-PUBLIC-TRUTH" - ] - }, - { - "path": "README.zh.md", - "exact_owners": [ - "CORE-PUBLIC-TRUTH", - "FINAL-PUBLIC-TRUTH" - ], - "prefix_owners": [], - "effective_owners": [ - "CORE-PUBLIC-TRUTH", - "FINAL-PUBLIC-TRUTH" - ], - "declared_epoch": true, - "epoch_owners": [ - "CORE-PUBLIC-TRUTH", - "FINAL-PUBLIC-TRUTH" - ] - } - ], - "prefix_intersections": [ - { - "left_owner": "IMAGE-REMEDIATION", - "left": "apps/operator-console/package.json", - "right_owner": "OC-INTEGRATION", - "right": "apps/operator-console/**", - "exact_path": "apps/operator-console/package.json", - "declared_epoch": true - }, - { - "left_owner": "IMAGE-REMEDIATION", - "left": "apps/operator-console/package-lock.json", - "right_owner": "OC-INTEGRATION", - "right": "apps/operator-console/**", - "exact_path": "apps/operator-console/package-lock.json", - "declared_epoch": true - } - ], - "epochs": [ - { - "path": "internal/db/gorm/candidate_store.go", - "owners": [ - "DB-BULKOPS", - "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK", - "DB-GOVERNANCE", - "CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK" - ], - "transfer_gate": "rejected predecessor checker/hash recorded; rework uses exact base `68b2ce5835c7c6efdf1c68da9eedcb8d9c3837ef`; each accepted successor requires checker PASS, post-review PASS, integration SHA, and exact rebase before edit", - "line": 6 - }, - { - "path": "internal/db/gorm/candidate_store_test.go", - "owners": [ - "DB-BULKOPS", - "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK", - "DB-GOVERNANCE", - "CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK" - ], - "transfer_gate": "rejected predecessor checker/hash recorded; rework uses exact base `68b2ce5835c7c6efdf1c68da9eedcb8d9c3837ef`; each accepted successor requires checker PASS, post-review PASS, integration SHA, and exact rebase before edit", - "line": 6 - }, - { - "path": "internal/mcp/tools_bulkops.go", - "owners": [ - "DB-BULKOPS", - "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK" - ], - "transfer_gate": "rejected predecessor checker/hash recorded; rework base is exact rejected head; checker and post-review PASS plus integration SHA close the transfer", - "line": 7 - }, - { - "path": "internal/mcp/tools_dryrun_test.go", - "owners": [ - "DB-BULKOPS", - "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK" - ], - "transfer_gate": "rejected predecessor checker/hash recorded; rework base is exact rejected head; checker and post-review PASS plus integration SHA close the transfer", - "line": 7 - }, - { - "path": "internal/bulkops/facade.go", - "owners": [ - "DB-BULKOPS", - "INGEST-DOC-SNAPSHOT-DEMOLITION", - "DURABLE-AUDIT-BOUNDARIES" - ], - "transfer_gate": "behavioral-edge composite checker and post-review PASS; exact integration SHA recorded; demolition rebased before edit; historical ingest guard green before durable-audit fault work", - "line": 8 - }, - { - "path": "internal/bulkops/facade_test.go", - "owners": [ - "DB-BULKOPS", - "INGEST-DOC-SNAPSHOT-DEMOLITION" - ], - "transfer_gate": "accepted behavioral-edge composite integrated; demolition worktree rebased; focused historical-only regressions PASS before integration", - "line": 9 - }, - { - "path": "internal/bulkops/rollback_test.go", - "owners": [ - "DB-BULKOPS", - "CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK" - ], - "transfer_gate": "accepted behavioral-edge composite and DB-GOVERNANCE integrated; candidate-review successor rebased; combined checker and post-review PASS", - "line": 10 - }, - { - "path": "pkg/models/snapshot.go", - "owners": [ - "DB-BULKOPS", - "INGEST-DOC-SNAPSHOT-DEMOLITION" - ], - "transfer_gate": "accepted behavioral-edge composite integrated; demolition successor rebased; persistence-compatibility and non-executable regressions PASS", - "line": 11 - }, - { - "path": "internal/db/gorm/user_store.go", - "owners": [ - "DB-AUTH", - "AUTH-BOOTSTRAP-SECURITY", - "DURABLE-AUDIT-BOUNDARIES" - ], - "transfer_gate": "each predecessor checker and post-review PASS, integration SHA recorded, successor rebased; no simultaneous writer", - "line": 12 - }, - { - "path": "internal/worker/auth_handlers.go", - "owners": [ - "DB-AUTH", - "AUTH-BOOTSTRAP-SECURITY", - "DURABLE-AUDIT-BOUNDARIES" - ], - "transfer_gate": "each predecessor checker and post-review PASS, integration SHA recorded, successor rebased; no simultaneous writer", - "line": 13 - }, - { - "path": "internal/worker/service.go", - "owners": [ - "AUTH-BOOTSTRAP-SECURITY", - "V7-RUNTIME-WIRING" - ], - "transfer_gate": "auth bootstrap checker and post-review PASS, commit integrated, V7 worktree rebased, auth route regression rerun", - "line": 14 - }, - { - "path": "Dockerfile", - "owners": [ - "SECURITY-TOOLCHAIN", - "IMAGE-REMEDIATION" - ], - "transfer_gate": "toolchain checker and post-review PASS, commit integrated, image worktree rebased, zero-finding rebuild and scan before successor integration", - "line": 15 - }, - { - "path": ".github/workflows/test.yml", - "owners": [ - "RELEASE-GATES", - "IMAGE-REMEDIATION" - ], - "transfer_gate": "release-gates checker and post-review PASS, commit integrated, image worktree rebased before workflow image-identity changes", - "line": 16 - }, - { - "path": "docker-compose.yml", - "owners": [ - "IMAGE-REMEDIATION", - "DEPLOYMENT-ROLLBACK" - ], - "transfer_gate": "image checker and post-review PASS, `final-image-set.json` recorded, deployment worktree rebased, fresh scan after edits", - "line": 17 - }, - { - "path": "deploy/docker-compose.runtime.yml", - "owners": [ - "IMAGE-REMEDIATION", - "DEPLOYMENT-ROLLBACK" - ], - "transfer_gate": "image checker and post-review PASS, `final-image-set.json` recorded, deployment worktree rebased, fresh scan after edits", - "line": 17 - }, - { - "path": "apps/operator-console/package.json", - "owners": [ - "IMAGE-REMEDIATION", - "OC-INTEGRATION" - ], - "transfer_gate": "image checker and post-review PASS, OC worktree rebased, any later dependency edit reruns audit/build/browser/image scan", - "line": 18 - }, - { - "path": "apps/operator-console/package-lock.json", - "owners": [ - "IMAGE-REMEDIATION", - "OC-INTEGRATION" - ], - "transfer_gate": "image checker and post-review PASS, OC worktree rebased, any later dependency edit reruns audit/build/browser/image scan", - "line": 18 - }, - { - "path": "docs/DEPLOYMENT.md", - "owners": [ - "IMAGE-REMEDIATION", - "CORE-PUBLIC-TRUTH", - "FINAL-PUBLIC-TRUTH" - ], - "transfer_gate": "image proof integrated; CORE rebased for M5; FINAL rebased to exact M6 integration and final-version artifact before edit", - "line": 19 - }, - { - "path": "docs/PRODUCTION-TESTING-PLAYBOOK.md", - "owners": [ - "IMAGE-REMEDIATION", - "CORE-PUBLIC-TRUTH", - "FINAL-PUBLIC-TRUTH" - ], - "transfer_gate": "image proof integrated; CORE rebased for M5; FINAL rebased to exact M6 integration and final-version artifact before edit", - "line": 19 - }, - { - "path": "README.md", - "owners": [ - "CORE-PUBLIC-TRUTH", - "FINAL-PUBLIC-TRUTH" - ], - "transfer_gate": "M5 release published and proved; FINAL worktree rebased to exact M6 integration; final version artifact and exact release-note path recorded before edit", - "line": 20 - }, - { - "path": "README.ru.md", - "owners": [ - "CORE-PUBLIC-TRUTH", - "FINAL-PUBLIC-TRUTH" - ], - "transfer_gate": "M5 release published and proved; FINAL worktree rebased to exact M6 integration; final version artifact and exact release-note path recorded before edit", - "line": 20 - }, - { - "path": "README.zh.md", - "owners": [ - "CORE-PUBLIC-TRUTH", - "FINAL-PUBLIC-TRUTH" - ], - "transfer_gate": "M5 release published and proved; FINAL worktree rebased to exact M6 integration; final version artifact and exact release-note path recorded before edit", - "line": 20 - }, - { - "path": "CONTRIBUTING.md", - "owners": [ - "CORE-PUBLIC-TRUTH", - "FINAL-PUBLIC-TRUTH" - ], - "transfer_gate": "M5 release published and proved; FINAL worktree rebased to exact M6 integration; final version artifact and exact release-note path recorded before edit", - "line": 20 - }, - { - "path": "CHANGELOG.md", - "owners": [ - "CORE-PUBLIC-TRUTH", - "FINAL-PUBLIC-TRUTH" - ], - "transfer_gate": "M5 release published and proved; FINAL worktree rebased to exact M6 integration; final version artifact and exact release-note path recorded before edit", - "line": 20 - }, - { - "path": "Makefile", - "owners": [ - "CORE-PUBLIC-TRUTH", - "FINAL-PUBLIC-TRUTH" - ], - "transfer_gate": "M5 release published and proved; FINAL worktree rebased to exact M6 integration; final version artifact and exact release-note path recorded before edit", - "line": 20 - }, - { - "path": ".env.example", - "owners": [ - "CORE-PUBLIC-TRUTH", - "FINAL-PUBLIC-TRUTH" - ], - "transfer_gate": "M5 release published and proved; FINAL worktree rebased to exact M6 integration; final version artifact and exact release-note path recorded before edit", - "line": 20 - }, - { - "path": "docs/MIGRATION.md", - "owners": [ - "CORE-PUBLIC-TRUTH", - "FINAL-PUBLIC-TRUTH" - ], - "transfer_gate": "M5 release published and proved; FINAL worktree rebased to exact M6 integration; final version artifact and exact release-note path recorded before edit", - "line": 20 - }, - { - "path": "docs/arch/CONFIGURATION.md", - "owners": [ - "CORE-PUBLIC-TRUTH", - "FINAL-PUBLIC-TRUTH" - ], - "transfer_gate": "M5 release published and proved; FINAL worktree rebased to exact M6 integration; final version artifact and exact release-note path recorded before edit", - "line": 20 - }, - { - "path": "docs/arch/QUICKSTART.md", - "owners": [ - "CORE-PUBLIC-TRUTH", - "FINAL-PUBLIC-TRUTH" - ], - "transfer_gate": "M5 release published and proved; FINAL worktree rebased to exact M6 integration; final version artifact and exact release-note path recorded before edit", - "line": 20 - }, - { - "path": "docs/public/engram.jpg", - "owners": [ - "CORE-PUBLIC-TRUTH", - "FINAL-PUBLIC-TRUTH" - ], - "transfer_gate": "M5 release published and proved; FINAL worktree rebased to exact M6 integration; final version artifact and exact release-note path recorded before edit", - "line": 20 - }, - { - "path": "plugin/engram/commands/setup.md", - "owners": [ - "CORE-PUBLIC-TRUTH", - "FINAL-PUBLIC-TRUTH" - ], - "transfer_gate": "M5 release published and proved; FINAL worktree rebased to exact M6 integration; final version artifact and exact release-note path recorded before edit", - "line": 20 - }, - { - "path": "plugin/engram/commands/doctor.md", - "owners": [ - "CORE-PUBLIC-TRUTH", - "FINAL-PUBLIC-TRUTH" - ], - "transfer_gate": "M5 release published and proved; FINAL worktree rebased to exact M6 integration; final version artifact and exact release-note path recorded before edit", - "line": 20 - } - ], - "errors": [] -} diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/ownership/plan-governance-commit-diff.json b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/ownership/plan-governance-commit-diff.json deleted file mode 100644 index 89c4cf34..00000000 --- a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/ownership/plan-governance-commit-diff.json +++ /dev/null @@ -1,124 +0,0 @@ -{ - "schema_version": 2, - "gate": "plan-path-ownership", - "mode": "Diff", - "verdict": "PASS", - "started_at": "2026-07-10T10:00:53.1646562+00:00", - "finished_at": "2026-07-10T10:00:57.1680947+00:00", - "duration_seconds": 4.003, - "plan": { - "path": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\plans\\2026-07-10-engram-production-ready-master-plan.md", - "expected_sha256": "d371e94dff1ea12767b9d0832240cb6caf52c6c3bbe2209fe4280159c4f03c52", - "observed_sha256": "d371e94dff1ea12767b9d0832240cb6caf52c6c3bbe2209fe4280159c4f03c52", - "hash_match": true, - "ledger_verdict": "PASS" - }, - "state": { - "path": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\plans\\2026-07-10-engram-production-ready-ownership-state.json", - "sha256": "1419e2f7e5236e21dd9a2d8c3271ced2def16dc0a798435ad5a9401fe522d55b", - "verdict": "PASS", - "plan_sha256": "d371e94dff1ea12767b9d0832240cb6caf52c6c3bbe2209fe4280159c4f03c52" - }, - "slice": { - "name": "PLAN-GOVERNANCE", - "row_count": 1, - "declarations": [ - { - "owner": "PLAN-GOVERNANCE", - "branch": "work/prc-release-gates", - "path": ".agent/plans/2026-07-10-engram-production-ready-master-plan.md", - "display": ".agent/plans/2026-07-10-engram-production-ready-master-plan.md", - "kind": "exact", - "line": 6 - }, - { - "owner": "PLAN-GOVERNANCE", - "branch": "work/prc-release-gates", - "path": ".agent/plans/2026-07-10-engram-production-ready-ownership-state.json", - "display": ".agent/plans/2026-07-10-engram-production-ready-ownership-state.json", - "kind": "exact", - "line": 6 - } - ], - "evidence_namespace": { - "kind": "evidence", - "path": ".agent/reports/evidence/production-ready/plan-governance", - "display": ".agent/reports/evidence/production-ready/plan-governance/**", - "match_kind": "prefix", - "policy": "canonical-derived-default" - }, - "report_namespace": { - "kind": "report", - "path": ".agent/reports/production-ready/plan-governance", - "display": ".agent/reports/production-ready/plan-governance/**", - "match_kind": "prefix", - "policy": "canonical-derived-default" - } - }, - "git": { - "repository": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates", - "requested_base": "2b3ef3e33bd19e630f8f67d07a9e2521cb98537f", - "resolved_base": "2b3ef3e33bd19e630f8f67d07a9e2521cb98537f", - "requested_head": "a1653abf5a1088f45df2c58487a74a886666adf1", - "resolved_head": "a1653abf5a1088f45df2c58487a74a886666adf1", - "base_is_ancestor": true, - "name_status_command": "git -c core.quotepath=false diff --name-status --find-renames --find-copies 2b3ef3e33bd19e630f8f67d07a9e2521cb98537f..a1653abf5a1088f45df2c58487a74a886666adf1 --", - "raw_name_status": [ - "A\t.agent/plans/2026-07-10-engram-production-ready-master-plan.md", - "A\t.agent/plans/2026-07-10-engram-production-ready-ownership-state.json" - ] - }, - "counts": { - "diff_entries": 2, - "changed_paths": 2, - "violations": 0, - "errors": 0 - }, - "diff_entries": [ - { - "status": "A", - "paths": [ - ".agent/plans/2026-07-10-engram-production-ready-master-plan.md" - ], - "raw": "A\t.agent/plans/2026-07-10-engram-production-ready-master-plan.md" - }, - { - "status": "A", - "paths": [ - ".agent/plans/2026-07-10-engram-production-ready-ownership-state.json" - ], - "raw": "A\t.agent/plans/2026-07-10-engram-production-ready-ownership-state.json" - } - ], - "changed_paths": [ - { - "status": "A", - "path": ".agent/plans/2026-07-10-engram-production-ready-master-plan.md", - "allowed": true, - "allowed_by": [ - "slice-declaration" - ], - "ownership_matches": [ - ".agent/plans/2026-07-10-engram-production-ready-master-plan.md" - ] - }, - { - "status": "A", - "path": ".agent/plans/2026-07-10-engram-production-ready-ownership-state.json", - "allowed": true, - "allowed_by": [ - "slice-declaration" - ], - "ownership_matches": [ - ".agent/plans/2026-07-10-engram-production-ready-ownership-state.json" - ] - } - ], - "violations": [], - "epoch_authority": { - "verdict": "PASS", - "evaluated": [], - "errors": [] - }, - "errors": [] -} diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/ownership/release-gates-commit-diff.json b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/ownership/release-gates-commit-diff.json deleted file mode 100644 index 56d5aa65..00000000 --- a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/ownership/release-gates-commit-diff.json +++ /dev/null @@ -1,2857 +0,0 @@ -{ - "schema_version": 2, - "gate": "plan-path-ownership", - "mode": "Diff", - "verdict": "PASS", - "started_at": "2026-07-10T10:00:57.6893607+00:00", - "finished_at": "2026-07-10T10:01:01.6635757+00:00", - "duration_seconds": 3.974, - "plan": { - "path": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\plans\\2026-07-10-engram-production-ready-master-plan.md", - "expected_sha256": "d371e94dff1ea12767b9d0832240cb6caf52c6c3bbe2209fe4280159c4f03c52", - "observed_sha256": "d371e94dff1ea12767b9d0832240cb6caf52c6c3bbe2209fe4280159c4f03c52", - "hash_match": true, - "ledger_verdict": "PASS" - }, - "state": { - "path": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates\\.agent\\plans\\2026-07-10-engram-production-ready-ownership-state.json", - "sha256": "1419e2f7e5236e21dd9a2d8c3271ced2def16dc0a798435ad5a9401fe522d55b", - "verdict": "PASS", - "plan_sha256": "d371e94dff1ea12767b9d0832240cb6caf52c6c3bbe2209fe4280159c4f03c52" - }, - "slice": { - "name": "RELEASE-GATES", - "row_count": 1, - "declarations": [ - { - "owner": "RELEASE-GATES", - "branch": "work/prc-release-gates", - "path": ".agent/critical-suite.config.yaml", - "display": ".agent/critical-suite.config.yaml", - "kind": "exact", - "line": 20 - }, - { - "owner": "RELEASE-GATES", - "branch": "work/prc-release-gates", - "path": ".agent/dev-stand.config.yaml", - "display": ".agent/dev-stand.config.yaml", - "kind": "exact", - "line": 20 - }, - { - "owner": "RELEASE-GATES", - "branch": "work/prc-release-gates", - "path": ".github/workflows/test.yml", - "display": ".github/workflows/test.yml", - "kind": "exact", - "line": 20 - }, - { - "owner": "RELEASE-GATES", - "branch": "work/prc-release-gates", - "path": "scripts/production-gates/assert-coverage.ps1", - "display": "scripts/production-gates/assert-coverage.ps1", - "kind": "exact", - "line": 20 - }, - { - "owner": "RELEASE-GATES", - "branch": "work/prc-release-gates", - "path": "scripts/production-gates/assert-go-test-json.ps1", - "display": "scripts/production-gates/assert-go-test-json.ps1", - "kind": "exact", - "line": 20 - }, - { - "owner": "RELEASE-GATES", - "branch": "work/prc-release-gates", - "path": "scripts/production-gates/assert-plan-path-ownership.ps1", - "display": "scripts/production-gates/assert-plan-path-ownership.ps1", - "kind": "exact", - "line": 20 - }, - { - "owner": "RELEASE-GATES", - "branch": "work/prc-release-gates", - "path": "scripts/production-gates/cleanup-db-sessions.ps1", - "display": "scripts/production-gates/cleanup-db-sessions.ps1", - "kind": "exact", - "line": 20 - }, - { - "owner": "RELEASE-GATES", - "branch": "work/prc-release-gates", - "path": "scripts/production-gates/run-critical-suite.ps1", - "display": "scripts/production-gates/run-critical-suite.ps1", - "kind": "exact", - "line": 20 - }, - { - "owner": "RELEASE-GATES", - "branch": "work/prc-release-gates", - "path": "scripts/production-gates/run-db-suite.ps1", - "display": "scripts/production-gates/run-db-suite.ps1", - "kind": "exact", - "line": 20 - }, - { - "owner": "RELEASE-GATES", - "branch": "work/prc-release-gates", - "path": "scripts/production-gates/run-dev-stand.ps1", - "display": "scripts/production-gates/run-dev-stand.ps1", - "kind": "exact", - "line": 20 - }, - { - "owner": "RELEASE-GATES", - "branch": "work/prc-release-gates", - "path": "scripts/production-gates/run-node-matrix.ps1", - "display": "scripts/production-gates/run-node-matrix.ps1", - "kind": "exact", - "line": 20 - }, - { - "owner": "RELEASE-GATES", - "branch": "work/prc-release-gates", - "path": ".agent/reports/2026-07-10-release-gates-foundation-revision-3-maker.md", - "display": ".agent/reports/2026-07-10-release-gates-foundation-revision-3-maker.md", - "kind": "exact", - "line": 20 - }, - { - "owner": "RELEASE-GATES", - "branch": "work/prc-release-gates", - "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3", - "display": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**", - "kind": "prefix", - "line": 20 - } - ], - "evidence_namespace": { - "kind": "evidence", - "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3", - "display": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**", - "match_kind": "prefix", - "policy": "literal-row-exception" - }, - "report_namespace": { - "kind": "report", - "path": ".agent/reports/2026-07-10-release-gates-foundation-revision-3-maker.md", - "display": ".agent/reports/2026-07-10-release-gates-foundation-revision-3-maker.md", - "match_kind": "exact", - "policy": "literal-row-exception" - } - }, - "git": { - "repository": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates", - "requested_base": "a1653abf5a1088f45df2c58487a74a886666adf1", - "resolved_base": "a1653abf5a1088f45df2c58487a74a886666adf1", - "requested_head": "badc408937dd6fad0e1dc7ee9fc573505aa617b2", - "resolved_head": "badc408937dd6fad0e1dc7ee9fc573505aa617b2", - "base_is_ancestor": true, - "name_status_command": "git -c core.quotepath=false diff --name-status --find-renames --find-copies a1653abf5a1088f45df2c58487a74a886666adf1..badc408937dd6fad0e1dc7ee9fc573505aa617b2 --", - "raw_name_status": [ - "M\t.agent/dev-stand.config.yaml", - "A\t.agent/reports/2026-07-10-release-gates-foundation-revision-3-maker.md", - "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/commands.json", - "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/down.stderr.log", - "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/down.stdout.log", - "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-down/commands.json", - "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-down/compose-down.stderr.log", - "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-down/compose-down.stdout.log", - "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-down/dev-stand-residual-containers.stderr.log", - "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-down/dev-stand-residual-containers.stdout.log", - "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-down/dev-stand-residual-networks.stderr.log", - "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-down/dev-stand-residual-networks.stdout.log", - "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-down/dev-stand-residual-volumes.stderr.log", - "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-down/dev-stand-residual-volumes.stdout.log", - "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-down/summary.json", - "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/api-ready.stderr.log", - "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/api-ready.stdout.log", - "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/commands.json", - "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/health.stderr.log", - "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/health.stdout.log", - "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-inspect-operator-console.stderr.log", - "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-inspect-operator-console.stdout.log", - "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-inspect-postgres.stderr.log", - "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-inspect-postgres.stdout.log", - "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-inspect-server.stderr.log", - "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-inspect-server.stdout.log", - "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-inventory.stderr.log", - "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-inventory.stdout.log", - "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-tag-inspect-operator-console.stderr.log", - "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-tag-inspect-operator-console.stdout.log", - "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-tag-inspect-postgres.stderr.log", - "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-tag-inspect-postgres.stdout.log", - "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-tag-inspect-server.stderr.log", - "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-tag-inspect-server.stdout.log", - "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/operator-api-health.stderr.log", - "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/operator-api-health.stdout.log", - "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/operator-api-ready.stderr.log", - "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/operator-api-ready.stdout.log", - "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/postgres-ready.stderr.log", - "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/postgres-ready.stdout.log", - "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/summary.json", - "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/commands.json", - "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/docker-scout-operator-console.sarif.json", - "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/docker-scout-operator-console.stderr.log", - "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/docker-scout-operator-console.stdout.log", - "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/docker-scout-postgres.sarif.json", - "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/docker-scout-postgres.stderr.log", - "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/docker-scout-postgres.stdout.log", - "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/docker-scout-server.sarif.json", - "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/docker-scout-server.stderr.log", - "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/docker-scout-server.stdout.log", - "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-inspect-operator-console.stderr.log", - "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-inspect-operator-console.stdout.log", - "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-inspect-postgres.stderr.log", - "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-inspect-postgres.stdout.log", - "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-inspect-server.stderr.log", - "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-inspect-server.stdout.log", - "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-inventory.stderr.log", - "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-inventory.stdout.log", - "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-tag-inspect-operator-console.stderr.log", - "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-tag-inspect-operator-console.stdout.log", - "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-tag-inspect-postgres.stderr.log", - "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-tag-inspect-postgres.stdout.log", - "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-tag-inspect-server.stderr.log", - "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-tag-inspect-server.stdout.log", - "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/summary.json", - "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/api-ready.stderr.log", - "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/api-ready.stdout.log", - "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/commands.json", - "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/compose-up.stderr.log", - "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/compose-up.stdout.log", - "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/health.stderr.log", - "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/health.stdout.log", - "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-inspect-operator-console.stderr.log", - "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-inspect-operator-console.stdout.log", - "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-inspect-postgres.stderr.log", - "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-inspect-postgres.stdout.log", - "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-inspect-server.stderr.log", - "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-inspect-server.stdout.log", - "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-inventory.stderr.log", - "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-inventory.stdout.log", - "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-tag-inspect-operator-console.stderr.log", - "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-tag-inspect-operator-console.stdout.log", - "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-tag-inspect-postgres.stderr.log", - "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-tag-inspect-postgres.stdout.log", - "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-tag-inspect-server.stderr.log", - "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-tag-inspect-server.stdout.log", - "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/operator-api-health.stderr.log", - "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/operator-api-health.stdout.log", - "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/operator-api-ready.stderr.log", - "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/operator-api-ready.stdout.log", - "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/postgres-container-id.stderr.log", - "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/postgres-container-id.stdout.log", - "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/postgres-credential-injection.stderr.log", - "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/postgres-credential-injection.stdout.log", - "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/postgres-ready.stderr.log", - "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/postgres-ready.stdout.log", - "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/server-container-id.stderr.log", - "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/server-container-id.stdout.log", - "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/server-credential-injection.stderr.log", - "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/server-credential-injection.stdout.log", - "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/summary.json", - "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/ready.stderr.log", - "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/ready.stdout.log", - "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/scan.stderr.log", - "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/scan.stdout.log", - "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/summary.json", - "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/up.stderr.log", - "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/up.stdout.log", - "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-2/cleanup.json", - "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-2/commands.json", - "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-2/post-status.stderr.log", - "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-2/post-status.stdout.log", - "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-2/pre-status.stderr.log", - "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-2/pre-status.stdout.log", - "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-2/summary.json", - "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-3/cleanup.json", - "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-3/commands.json", - "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-3/post-status.stderr.log", - "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-3/post-status.stdout.log", - "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-3/pre-status.stderr.log", - "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-3/pre-status.stdout.log", - "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-3/summary.json", - "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/ownership/db-bulkops-rejected-negative.json", - "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/ownership/ledger-final.json", - "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/tdd/RG3-DEVSTAND.red.json", - "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/tdd/RG3-NODE.red.json", - "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/tdd/RG3-OWNERSHIP.red.json", - "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/verification-summary.json", - "M\t.github/workflows/test.yml", - "M\tscripts/production-gates/assert-plan-path-ownership.ps1", - "M\tscripts/production-gates/run-db-suite.ps1", - "M\tscripts/production-gates/run-dev-stand.ps1", - "A\tscripts/production-gates/run-node-matrix.ps1" - ] - }, - "counts": { - "diff_entries": 134, - "changed_paths": 134, - "violations": 0, - "errors": 0 - }, - "diff_entries": [ - { - "status": "M", - "paths": [ - ".agent/dev-stand.config.yaml" - ], - "raw": "M\t.agent/dev-stand.config.yaml" - }, - { - "status": "A", - "paths": [ - ".agent/reports/2026-07-10-release-gates-foundation-revision-3-maker.md" - ], - "raw": "A\t.agent/reports/2026-07-10-release-gates-foundation-revision-3-maker.md" - }, - { - "status": "A", - "paths": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/commands.json" - ], - "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/commands.json" - }, - { - "status": "A", - "paths": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/down.stderr.log" - ], - "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/down.stderr.log" - }, - { - "status": "A", - "paths": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/down.stdout.log" - ], - "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/down.stdout.log" - }, - { - "status": "A", - "paths": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-down/commands.json" - ], - "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-down/commands.json" - }, - { - "status": "A", - "paths": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-down/compose-down.stderr.log" - ], - "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-down/compose-down.stderr.log" - }, - { - "status": "A", - "paths": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-down/compose-down.stdout.log" - ], - "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-down/compose-down.stdout.log" - }, - { - "status": "A", - "paths": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-down/dev-stand-residual-containers.stderr.log" - ], - "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-down/dev-stand-residual-containers.stderr.log" - }, - { - "status": "A", - "paths": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-down/dev-stand-residual-containers.stdout.log" - ], - "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-down/dev-stand-residual-containers.stdout.log" - }, - { - "status": "A", - "paths": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-down/dev-stand-residual-networks.stderr.log" - ], - "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-down/dev-stand-residual-networks.stderr.log" - }, - { - "status": "A", - "paths": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-down/dev-stand-residual-networks.stdout.log" - ], - "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-down/dev-stand-residual-networks.stdout.log" - }, - { - "status": "A", - "paths": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-down/dev-stand-residual-volumes.stderr.log" - ], - "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-down/dev-stand-residual-volumes.stderr.log" - }, - { - "status": "A", - "paths": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-down/dev-stand-residual-volumes.stdout.log" - ], - "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-down/dev-stand-residual-volumes.stdout.log" - }, - { - "status": "A", - "paths": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-down/summary.json" - ], - "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-down/summary.json" - }, - { - "status": "A", - "paths": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/api-ready.stderr.log" - ], - "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/api-ready.stderr.log" - }, - { - "status": "A", - "paths": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/api-ready.stdout.log" - ], - "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/api-ready.stdout.log" - }, - { - "status": "A", - "paths": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/commands.json" - ], - "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/commands.json" - }, - { - "status": "A", - "paths": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/health.stderr.log" - ], - "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/health.stderr.log" - }, - { - "status": "A", - "paths": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/health.stdout.log" - ], - "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/health.stdout.log" - }, - { - "status": "A", - "paths": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-inspect-operator-console.stderr.log" - ], - "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-inspect-operator-console.stderr.log" - }, - { - "status": "A", - "paths": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-inspect-operator-console.stdout.log" - ], - "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-inspect-operator-console.stdout.log" - }, - { - "status": "A", - "paths": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-inspect-postgres.stderr.log" - ], - "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-inspect-postgres.stderr.log" - }, - { - "status": "A", - "paths": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-inspect-postgres.stdout.log" - ], - "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-inspect-postgres.stdout.log" - }, - { - "status": "A", - "paths": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-inspect-server.stderr.log" - ], - "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-inspect-server.stderr.log" - }, - { - "status": "A", - "paths": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-inspect-server.stdout.log" - ], - "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-inspect-server.stdout.log" - }, - { - "status": "A", - "paths": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-inventory.stderr.log" - ], - "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-inventory.stderr.log" - }, - { - "status": "A", - "paths": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-inventory.stdout.log" - ], - "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-inventory.stdout.log" - }, - { - "status": "A", - "paths": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-tag-inspect-operator-console.stderr.log" - ], - "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-tag-inspect-operator-console.stderr.log" - }, - { - "status": "A", - "paths": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-tag-inspect-operator-console.stdout.log" - ], - "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-tag-inspect-operator-console.stdout.log" - }, - { - "status": "A", - "paths": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-tag-inspect-postgres.stderr.log" - ], - "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-tag-inspect-postgres.stderr.log" - }, - { - "status": "A", - "paths": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-tag-inspect-postgres.stdout.log" - ], - "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-tag-inspect-postgres.stdout.log" - }, - { - "status": "A", - "paths": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-tag-inspect-server.stderr.log" - ], - "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-tag-inspect-server.stderr.log" - }, - { - "status": "A", - "paths": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-tag-inspect-server.stdout.log" - ], - "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-tag-inspect-server.stdout.log" - }, - { - "status": "A", - "paths": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/operator-api-health.stderr.log" - ], - "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/operator-api-health.stderr.log" - }, - { - "status": "A", - "paths": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/operator-api-health.stdout.log" - ], - "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/operator-api-health.stdout.log" - }, - { - "status": "A", - "paths": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/operator-api-ready.stderr.log" - ], - "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/operator-api-ready.stderr.log" - }, - { - "status": "A", - "paths": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/operator-api-ready.stdout.log" - ], - "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/operator-api-ready.stdout.log" - }, - { - "status": "A", - "paths": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/postgres-ready.stderr.log" - ], - "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/postgres-ready.stderr.log" - }, - { - "status": "A", - "paths": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/postgres-ready.stdout.log" - ], - "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/postgres-ready.stdout.log" - }, - { - "status": "A", - "paths": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/summary.json" - ], - "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/summary.json" - }, - { - "status": "A", - "paths": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/commands.json" - ], - "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/commands.json" - }, - { - "status": "A", - "paths": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/docker-scout-operator-console.sarif.json" - ], - "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/docker-scout-operator-console.sarif.json" - }, - { - "status": "A", - "paths": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/docker-scout-operator-console.stderr.log" - ], - "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/docker-scout-operator-console.stderr.log" - }, - { - "status": "A", - "paths": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/docker-scout-operator-console.stdout.log" - ], - "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/docker-scout-operator-console.stdout.log" - }, - { - "status": "A", - "paths": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/docker-scout-postgres.sarif.json" - ], - "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/docker-scout-postgres.sarif.json" - }, - { - "status": "A", - "paths": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/docker-scout-postgres.stderr.log" - ], - "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/docker-scout-postgres.stderr.log" - }, - { - "status": "A", - "paths": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/docker-scout-postgres.stdout.log" - ], - "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/docker-scout-postgres.stdout.log" - }, - { - "status": "A", - "paths": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/docker-scout-server.sarif.json" - ], - "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/docker-scout-server.sarif.json" - }, - { - "status": "A", - "paths": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/docker-scout-server.stderr.log" - ], - "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/docker-scout-server.stderr.log" - }, - { - "status": "A", - "paths": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/docker-scout-server.stdout.log" - ], - "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/docker-scout-server.stdout.log" - }, - { - "status": "A", - "paths": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-inspect-operator-console.stderr.log" - ], - "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-inspect-operator-console.stderr.log" - }, - { - "status": "A", - "paths": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-inspect-operator-console.stdout.log" - ], - "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-inspect-operator-console.stdout.log" - }, - { - "status": "A", - "paths": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-inspect-postgres.stderr.log" - ], - "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-inspect-postgres.stderr.log" - }, - { - "status": "A", - "paths": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-inspect-postgres.stdout.log" - ], - "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-inspect-postgres.stdout.log" - }, - { - "status": "A", - "paths": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-inspect-server.stderr.log" - ], - "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-inspect-server.stderr.log" - }, - { - "status": "A", - "paths": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-inspect-server.stdout.log" - ], - "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-inspect-server.stdout.log" - }, - { - "status": "A", - "paths": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-inventory.stderr.log" - ], - "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-inventory.stderr.log" - }, - { - "status": "A", - "paths": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-inventory.stdout.log" - ], - "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-inventory.stdout.log" - }, - { - "status": "A", - "paths": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-tag-inspect-operator-console.stderr.log" - ], - "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-tag-inspect-operator-console.stderr.log" - }, - { - "status": "A", - "paths": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-tag-inspect-operator-console.stdout.log" - ], - "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-tag-inspect-operator-console.stdout.log" - }, - { - "status": "A", - "paths": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-tag-inspect-postgres.stderr.log" - ], - "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-tag-inspect-postgres.stderr.log" - }, - { - "status": "A", - "paths": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-tag-inspect-postgres.stdout.log" - ], - "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-tag-inspect-postgres.stdout.log" - }, - { - "status": "A", - "paths": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-tag-inspect-server.stderr.log" - ], - "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-tag-inspect-server.stderr.log" - }, - { - "status": "A", - "paths": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-tag-inspect-server.stdout.log" - ], - "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-tag-inspect-server.stdout.log" - }, - { - "status": "A", - "paths": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/summary.json" - ], - "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/summary.json" - }, - { - "status": "A", - "paths": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/api-ready.stderr.log" - ], - "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/api-ready.stderr.log" - }, - { - "status": "A", - "paths": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/api-ready.stdout.log" - ], - "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/api-ready.stdout.log" - }, - { - "status": "A", - "paths": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/commands.json" - ], - "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/commands.json" - }, - { - "status": "A", - "paths": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/compose-up.stderr.log" - ], - "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/compose-up.stderr.log" - }, - { - "status": "A", - "paths": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/compose-up.stdout.log" - ], - "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/compose-up.stdout.log" - }, - { - "status": "A", - "paths": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/health.stderr.log" - ], - "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/health.stderr.log" - }, - { - "status": "A", - "paths": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/health.stdout.log" - ], - "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/health.stdout.log" - }, - { - "status": "A", - "paths": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-inspect-operator-console.stderr.log" - ], - "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-inspect-operator-console.stderr.log" - }, - { - "status": "A", - "paths": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-inspect-operator-console.stdout.log" - ], - "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-inspect-operator-console.stdout.log" - }, - { - "status": "A", - "paths": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-inspect-postgres.stderr.log" - ], - "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-inspect-postgres.stderr.log" - }, - { - "status": "A", - "paths": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-inspect-postgres.stdout.log" - ], - "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-inspect-postgres.stdout.log" - }, - { - "status": "A", - "paths": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-inspect-server.stderr.log" - ], - "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-inspect-server.stderr.log" - }, - { - "status": "A", - "paths": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-inspect-server.stdout.log" - ], - "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-inspect-server.stdout.log" - }, - { - "status": "A", - "paths": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-inventory.stderr.log" - ], - "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-inventory.stderr.log" - }, - { - "status": "A", - "paths": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-inventory.stdout.log" - ], - "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-inventory.stdout.log" - }, - { - "status": "A", - "paths": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-tag-inspect-operator-console.stderr.log" - ], - "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-tag-inspect-operator-console.stderr.log" - }, - { - "status": "A", - "paths": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-tag-inspect-operator-console.stdout.log" - ], - "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-tag-inspect-operator-console.stdout.log" - }, - { - "status": "A", - "paths": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-tag-inspect-postgres.stderr.log" - ], - "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-tag-inspect-postgres.stderr.log" - }, - { - "status": "A", - "paths": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-tag-inspect-postgres.stdout.log" - ], - "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-tag-inspect-postgres.stdout.log" - }, - { - "status": "A", - "paths": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-tag-inspect-server.stderr.log" - ], - "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-tag-inspect-server.stderr.log" - }, - { - "status": "A", - "paths": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-tag-inspect-server.stdout.log" - ], - "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-tag-inspect-server.stdout.log" - }, - { - "status": "A", - "paths": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/operator-api-health.stderr.log" - ], - "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/operator-api-health.stderr.log" - }, - { - "status": "A", - "paths": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/operator-api-health.stdout.log" - ], - "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/operator-api-health.stdout.log" - }, - { - "status": "A", - "paths": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/operator-api-ready.stderr.log" - ], - "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/operator-api-ready.stderr.log" - }, - { - "status": "A", - "paths": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/operator-api-ready.stdout.log" - ], - "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/operator-api-ready.stdout.log" - }, - { - "status": "A", - "paths": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/postgres-container-id.stderr.log" - ], - "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/postgres-container-id.stderr.log" - }, - { - "status": "A", - "paths": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/postgres-container-id.stdout.log" - ], - "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/postgres-container-id.stdout.log" - }, - { - "status": "A", - "paths": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/postgres-credential-injection.stderr.log" - ], - "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/postgres-credential-injection.stderr.log" - }, - { - "status": "A", - "paths": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/postgres-credential-injection.stdout.log" - ], - "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/postgres-credential-injection.stdout.log" - }, - { - "status": "A", - "paths": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/postgres-ready.stderr.log" - ], - "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/postgres-ready.stderr.log" - }, - { - "status": "A", - "paths": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/postgres-ready.stdout.log" - ], - "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/postgres-ready.stdout.log" - }, - { - "status": "A", - "paths": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/server-container-id.stderr.log" - ], - "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/server-container-id.stderr.log" - }, - { - "status": "A", - "paths": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/server-container-id.stdout.log" - ], - "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/server-container-id.stdout.log" - }, - { - "status": "A", - "paths": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/server-credential-injection.stderr.log" - ], - "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/server-credential-injection.stderr.log" - }, - { - "status": "A", - "paths": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/server-credential-injection.stdout.log" - ], - "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/server-credential-injection.stdout.log" - }, - { - "status": "A", - "paths": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/summary.json" - ], - "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/summary.json" - }, - { - "status": "A", - "paths": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/ready.stderr.log" - ], - "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/ready.stderr.log" - }, - { - "status": "A", - "paths": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/ready.stdout.log" - ], - "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/ready.stdout.log" - }, - { - "status": "A", - "paths": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/scan.stderr.log" - ], - "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/scan.stderr.log" - }, - { - "status": "A", - "paths": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/scan.stdout.log" - ], - "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/scan.stdout.log" - }, - { - "status": "A", - "paths": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/summary.json" - ], - "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/summary.json" - }, - { - "status": "A", - "paths": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/up.stderr.log" - ], - "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/up.stderr.log" - }, - { - "status": "A", - "paths": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/up.stdout.log" - ], - "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/up.stdout.log" - }, - { - "status": "A", - "paths": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-2/cleanup.json" - ], - "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-2/cleanup.json" - }, - { - "status": "A", - "paths": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-2/commands.json" - ], - "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-2/commands.json" - }, - { - "status": "A", - "paths": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-2/post-status.stderr.log" - ], - "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-2/post-status.stderr.log" - }, - { - "status": "A", - "paths": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-2/post-status.stdout.log" - ], - "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-2/post-status.stdout.log" - }, - { - "status": "A", - "paths": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-2/pre-status.stderr.log" - ], - "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-2/pre-status.stderr.log" - }, - { - "status": "A", - "paths": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-2/pre-status.stdout.log" - ], - "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-2/pre-status.stdout.log" - }, - { - "status": "A", - "paths": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-2/summary.json" - ], - "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-2/summary.json" - }, - { - "status": "A", - "paths": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-3/cleanup.json" - ], - "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-3/cleanup.json" - }, - { - "status": "A", - "paths": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-3/commands.json" - ], - "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-3/commands.json" - }, - { - "status": "A", - "paths": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-3/post-status.stderr.log" - ], - "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-3/post-status.stderr.log" - }, - { - "status": "A", - "paths": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-3/post-status.stdout.log" - ], - "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-3/post-status.stdout.log" - }, - { - "status": "A", - "paths": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-3/pre-status.stderr.log" - ], - "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-3/pre-status.stderr.log" - }, - { - "status": "A", - "paths": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-3/pre-status.stdout.log" - ], - "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-3/pre-status.stdout.log" - }, - { - "status": "A", - "paths": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-3/summary.json" - ], - "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-3/summary.json" - }, - { - "status": "A", - "paths": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/ownership/db-bulkops-rejected-negative.json" - ], - "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/ownership/db-bulkops-rejected-negative.json" - }, - { - "status": "A", - "paths": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/ownership/ledger-final.json" - ], - "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/ownership/ledger-final.json" - }, - { - "status": "A", - "paths": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/tdd/RG3-DEVSTAND.red.json" - ], - "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/tdd/RG3-DEVSTAND.red.json" - }, - { - "status": "A", - "paths": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/tdd/RG3-NODE.red.json" - ], - "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/tdd/RG3-NODE.red.json" - }, - { - "status": "A", - "paths": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/tdd/RG3-OWNERSHIP.red.json" - ], - "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/tdd/RG3-OWNERSHIP.red.json" - }, - { - "status": "A", - "paths": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/verification-summary.json" - ], - "raw": "A\t.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/verification-summary.json" - }, - { - "status": "M", - "paths": [ - ".github/workflows/test.yml" - ], - "raw": "M\t.github/workflows/test.yml" - }, - { - "status": "M", - "paths": [ - "scripts/production-gates/assert-plan-path-ownership.ps1" - ], - "raw": "M\tscripts/production-gates/assert-plan-path-ownership.ps1" - }, - { - "status": "M", - "paths": [ - "scripts/production-gates/run-db-suite.ps1" - ], - "raw": "M\tscripts/production-gates/run-db-suite.ps1" - }, - { - "status": "M", - "paths": [ - "scripts/production-gates/run-dev-stand.ps1" - ], - "raw": "M\tscripts/production-gates/run-dev-stand.ps1" - }, - { - "status": "A", - "paths": [ - "scripts/production-gates/run-node-matrix.ps1" - ], - "raw": "A\tscripts/production-gates/run-node-matrix.ps1" - } - ], - "changed_paths": [ - { - "status": "M", - "path": ".agent/dev-stand.config.yaml", - "allowed": true, - "allowed_by": [ - "slice-declaration" - ], - "ownership_matches": [ - ".agent/dev-stand.config.yaml" - ] - }, - { - "status": "A", - "path": ".agent/reports/2026-07-10-release-gates-foundation-revision-3-maker.md", - "allowed": true, - "allowed_by": [ - "slice-declaration", - "report-namespace" - ], - "ownership_matches": [ - ".agent/reports/2026-07-10-release-gates-foundation-revision-3-maker.md" - ] - }, - { - "status": "A", - "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/commands.json", - "allowed": true, - "allowed_by": [ - "slice-declaration", - "evidence-namespace" - ], - "ownership_matches": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" - ] - }, - { - "status": "A", - "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/down.stderr.log", - "allowed": true, - "allowed_by": [ - "slice-declaration", - "evidence-namespace" - ], - "ownership_matches": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" - ] - }, - { - "status": "A", - "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/down.stdout.log", - "allowed": true, - "allowed_by": [ - "slice-declaration", - "evidence-namespace" - ], - "ownership_matches": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" - ] - }, - { - "status": "A", - "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-down/commands.json", - "allowed": true, - "allowed_by": [ - "slice-declaration", - "evidence-namespace" - ], - "ownership_matches": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" - ] - }, - { - "status": "A", - "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-down/compose-down.stderr.log", - "allowed": true, - "allowed_by": [ - "slice-declaration", - "evidence-namespace" - ], - "ownership_matches": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" - ] - }, - { - "status": "A", - "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-down/compose-down.stdout.log", - "allowed": true, - "allowed_by": [ - "slice-declaration", - "evidence-namespace" - ], - "ownership_matches": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" - ] - }, - { - "status": "A", - "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-down/dev-stand-residual-containers.stderr.log", - "allowed": true, - "allowed_by": [ - "slice-declaration", - "evidence-namespace" - ], - "ownership_matches": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" - ] - }, - { - "status": "A", - "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-down/dev-stand-residual-containers.stdout.log", - "allowed": true, - "allowed_by": [ - "slice-declaration", - "evidence-namespace" - ], - "ownership_matches": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" - ] - }, - { - "status": "A", - "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-down/dev-stand-residual-networks.stderr.log", - "allowed": true, - "allowed_by": [ - "slice-declaration", - "evidence-namespace" - ], - "ownership_matches": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" - ] - }, - { - "status": "A", - "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-down/dev-stand-residual-networks.stdout.log", - "allowed": true, - "allowed_by": [ - "slice-declaration", - "evidence-namespace" - ], - "ownership_matches": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" - ] - }, - { - "status": "A", - "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-down/dev-stand-residual-volumes.stderr.log", - "allowed": true, - "allowed_by": [ - "slice-declaration", - "evidence-namespace" - ], - "ownership_matches": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" - ] - }, - { - "status": "A", - "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-down/dev-stand-residual-volumes.stdout.log", - "allowed": true, - "allowed_by": [ - "slice-declaration", - "evidence-namespace" - ], - "ownership_matches": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" - ] - }, - { - "status": "A", - "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-down/summary.json", - "allowed": true, - "allowed_by": [ - "slice-declaration", - "evidence-namespace" - ], - "ownership_matches": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" - ] - }, - { - "status": "A", - "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/api-ready.stderr.log", - "allowed": true, - "allowed_by": [ - "slice-declaration", - "evidence-namespace" - ], - "ownership_matches": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" - ] - }, - { - "status": "A", - "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/api-ready.stdout.log", - "allowed": true, - "allowed_by": [ - "slice-declaration", - "evidence-namespace" - ], - "ownership_matches": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" - ] - }, - { - "status": "A", - "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/commands.json", - "allowed": true, - "allowed_by": [ - "slice-declaration", - "evidence-namespace" - ], - "ownership_matches": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" - ] - }, - { - "status": "A", - "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/health.stderr.log", - "allowed": true, - "allowed_by": [ - "slice-declaration", - "evidence-namespace" - ], - "ownership_matches": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" - ] - }, - { - "status": "A", - "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/health.stdout.log", - "allowed": true, - "allowed_by": [ - "slice-declaration", - "evidence-namespace" - ], - "ownership_matches": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" - ] - }, - { - "status": "A", - "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-inspect-operator-console.stderr.log", - "allowed": true, - "allowed_by": [ - "slice-declaration", - "evidence-namespace" - ], - "ownership_matches": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" - ] - }, - { - "status": "A", - "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-inspect-operator-console.stdout.log", - "allowed": true, - "allowed_by": [ - "slice-declaration", - "evidence-namespace" - ], - "ownership_matches": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" - ] - }, - { - "status": "A", - "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-inspect-postgres.stderr.log", - "allowed": true, - "allowed_by": [ - "slice-declaration", - "evidence-namespace" - ], - "ownership_matches": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" - ] - }, - { - "status": "A", - "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-inspect-postgres.stdout.log", - "allowed": true, - "allowed_by": [ - "slice-declaration", - "evidence-namespace" - ], - "ownership_matches": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" - ] - }, - { - "status": "A", - "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-inspect-server.stderr.log", - "allowed": true, - "allowed_by": [ - "slice-declaration", - "evidence-namespace" - ], - "ownership_matches": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" - ] - }, - { - "status": "A", - "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-inspect-server.stdout.log", - "allowed": true, - "allowed_by": [ - "slice-declaration", - "evidence-namespace" - ], - "ownership_matches": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" - ] - }, - { - "status": "A", - "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-inventory.stderr.log", - "allowed": true, - "allowed_by": [ - "slice-declaration", - "evidence-namespace" - ], - "ownership_matches": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" - ] - }, - { - "status": "A", - "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-inventory.stdout.log", - "allowed": true, - "allowed_by": [ - "slice-declaration", - "evidence-namespace" - ], - "ownership_matches": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" - ] - }, - { - "status": "A", - "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-tag-inspect-operator-console.stderr.log", - "allowed": true, - "allowed_by": [ - "slice-declaration", - "evidence-namespace" - ], - "ownership_matches": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" - ] - }, - { - "status": "A", - "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-tag-inspect-operator-console.stdout.log", - "allowed": true, - "allowed_by": [ - "slice-declaration", - "evidence-namespace" - ], - "ownership_matches": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" - ] - }, - { - "status": "A", - "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-tag-inspect-postgres.stderr.log", - "allowed": true, - "allowed_by": [ - "slice-declaration", - "evidence-namespace" - ], - "ownership_matches": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" - ] - }, - { - "status": "A", - "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-tag-inspect-postgres.stdout.log", - "allowed": true, - "allowed_by": [ - "slice-declaration", - "evidence-namespace" - ], - "ownership_matches": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" - ] - }, - { - "status": "A", - "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-tag-inspect-server.stderr.log", - "allowed": true, - "allowed_by": [ - "slice-declaration", - "evidence-namespace" - ], - "ownership_matches": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" - ] - }, - { - "status": "A", - "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/image-tag-inspect-server.stdout.log", - "allowed": true, - "allowed_by": [ - "slice-declaration", - "evidence-namespace" - ], - "ownership_matches": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" - ] - }, - { - "status": "A", - "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/operator-api-health.stderr.log", - "allowed": true, - "allowed_by": [ - "slice-declaration", - "evidence-namespace" - ], - "ownership_matches": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" - ] - }, - { - "status": "A", - "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/operator-api-health.stdout.log", - "allowed": true, - "allowed_by": [ - "slice-declaration", - "evidence-namespace" - ], - "ownership_matches": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" - ] - }, - { - "status": "A", - "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/operator-api-ready.stderr.log", - "allowed": true, - "allowed_by": [ - "slice-declaration", - "evidence-namespace" - ], - "ownership_matches": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" - ] - }, - { - "status": "A", - "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/operator-api-ready.stdout.log", - "allowed": true, - "allowed_by": [ - "slice-declaration", - "evidence-namespace" - ], - "ownership_matches": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" - ] - }, - { - "status": "A", - "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/postgres-ready.stderr.log", - "allowed": true, - "allowed_by": [ - "slice-declaration", - "evidence-namespace" - ], - "ownership_matches": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" - ] - }, - { - "status": "A", - "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/postgres-ready.stdout.log", - "allowed": true, - "allowed_by": [ - "slice-declaration", - "evidence-namespace" - ], - "ownership_matches": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" - ] - }, - { - "status": "A", - "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-ready/summary.json", - "allowed": true, - "allowed_by": [ - "slice-declaration", - "evidence-namespace" - ], - "ownership_matches": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" - ] - }, - { - "status": "A", - "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/commands.json", - "allowed": true, - "allowed_by": [ - "slice-declaration", - "evidence-namespace" - ], - "ownership_matches": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" - ] - }, - { - "status": "A", - "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/docker-scout-operator-console.sarif.json", - "allowed": true, - "allowed_by": [ - "slice-declaration", - "evidence-namespace" - ], - "ownership_matches": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" - ] - }, - { - "status": "A", - "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/docker-scout-operator-console.stderr.log", - "allowed": true, - "allowed_by": [ - "slice-declaration", - "evidence-namespace" - ], - "ownership_matches": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" - ] - }, - { - "status": "A", - "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/docker-scout-operator-console.stdout.log", - "allowed": true, - "allowed_by": [ - "slice-declaration", - "evidence-namespace" - ], - "ownership_matches": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" - ] - }, - { - "status": "A", - "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/docker-scout-postgres.sarif.json", - "allowed": true, - "allowed_by": [ - "slice-declaration", - "evidence-namespace" - ], - "ownership_matches": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" - ] - }, - { - "status": "A", - "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/docker-scout-postgres.stderr.log", - "allowed": true, - "allowed_by": [ - "slice-declaration", - "evidence-namespace" - ], - "ownership_matches": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" - ] - }, - { - "status": "A", - "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/docker-scout-postgres.stdout.log", - "allowed": true, - "allowed_by": [ - "slice-declaration", - "evidence-namespace" - ], - "ownership_matches": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" - ] - }, - { - "status": "A", - "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/docker-scout-server.sarif.json", - "allowed": true, - "allowed_by": [ - "slice-declaration", - "evidence-namespace" - ], - "ownership_matches": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" - ] - }, - { - "status": "A", - "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/docker-scout-server.stderr.log", - "allowed": true, - "allowed_by": [ - "slice-declaration", - "evidence-namespace" - ], - "ownership_matches": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" - ] - }, - { - "status": "A", - "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/docker-scout-server.stdout.log", - "allowed": true, - "allowed_by": [ - "slice-declaration", - "evidence-namespace" - ], - "ownership_matches": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" - ] - }, - { - "status": "A", - "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-inspect-operator-console.stderr.log", - "allowed": true, - "allowed_by": [ - "slice-declaration", - "evidence-namespace" - ], - "ownership_matches": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" - ] - }, - { - "status": "A", - "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-inspect-operator-console.stdout.log", - "allowed": true, - "allowed_by": [ - "slice-declaration", - "evidence-namespace" - ], - "ownership_matches": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" - ] - }, - { - "status": "A", - "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-inspect-postgres.stderr.log", - "allowed": true, - "allowed_by": [ - "slice-declaration", - "evidence-namespace" - ], - "ownership_matches": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" - ] - }, - { - "status": "A", - "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-inspect-postgres.stdout.log", - "allowed": true, - "allowed_by": [ - "slice-declaration", - "evidence-namespace" - ], - "ownership_matches": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" - ] - }, - { - "status": "A", - "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-inspect-server.stderr.log", - "allowed": true, - "allowed_by": [ - "slice-declaration", - "evidence-namespace" - ], - "ownership_matches": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" - ] - }, - { - "status": "A", - "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-inspect-server.stdout.log", - "allowed": true, - "allowed_by": [ - "slice-declaration", - "evidence-namespace" - ], - "ownership_matches": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" - ] - }, - { - "status": "A", - "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-inventory.stderr.log", - "allowed": true, - "allowed_by": [ - "slice-declaration", - "evidence-namespace" - ], - "ownership_matches": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" - ] - }, - { - "status": "A", - "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-inventory.stdout.log", - "allowed": true, - "allowed_by": [ - "slice-declaration", - "evidence-namespace" - ], - "ownership_matches": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" - ] - }, - { - "status": "A", - "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-tag-inspect-operator-console.stderr.log", - "allowed": true, - "allowed_by": [ - "slice-declaration", - "evidence-namespace" - ], - "ownership_matches": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" - ] - }, - { - "status": "A", - "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-tag-inspect-operator-console.stdout.log", - "allowed": true, - "allowed_by": [ - "slice-declaration", - "evidence-namespace" - ], - "ownership_matches": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" - ] - }, - { - "status": "A", - "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-tag-inspect-postgres.stderr.log", - "allowed": true, - "allowed_by": [ - "slice-declaration", - "evidence-namespace" - ], - "ownership_matches": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" - ] - }, - { - "status": "A", - "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-tag-inspect-postgres.stdout.log", - "allowed": true, - "allowed_by": [ - "slice-declaration", - "evidence-namespace" - ], - "ownership_matches": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" - ] - }, - { - "status": "A", - "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-tag-inspect-server.stderr.log", - "allowed": true, - "allowed_by": [ - "slice-declaration", - "evidence-namespace" - ], - "ownership_matches": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" - ] - }, - { - "status": "A", - "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/image-tag-inspect-server.stdout.log", - "allowed": true, - "allowed_by": [ - "slice-declaration", - "evidence-namespace" - ], - "ownership_matches": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" - ] - }, - { - "status": "A", - "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-scan/summary.json", - "allowed": true, - "allowed_by": [ - "slice-declaration", - "evidence-namespace" - ], - "ownership_matches": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" - ] - }, - { - "status": "A", - "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/api-ready.stderr.log", - "allowed": true, - "allowed_by": [ - "slice-declaration", - "evidence-namespace" - ], - "ownership_matches": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" - ] - }, - { - "status": "A", - "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/api-ready.stdout.log", - "allowed": true, - "allowed_by": [ - "slice-declaration", - "evidence-namespace" - ], - "ownership_matches": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" - ] - }, - { - "status": "A", - "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/commands.json", - "allowed": true, - "allowed_by": [ - "slice-declaration", - "evidence-namespace" - ], - "ownership_matches": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" - ] - }, - { - "status": "A", - "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/compose-up.stderr.log", - "allowed": true, - "allowed_by": [ - "slice-declaration", - "evidence-namespace" - ], - "ownership_matches": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" - ] - }, - { - "status": "A", - "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/compose-up.stdout.log", - "allowed": true, - "allowed_by": [ - "slice-declaration", - "evidence-namespace" - ], - "ownership_matches": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" - ] - }, - { - "status": "A", - "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/health.stderr.log", - "allowed": true, - "allowed_by": [ - "slice-declaration", - "evidence-namespace" - ], - "ownership_matches": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" - ] - }, - { - "status": "A", - "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/health.stdout.log", - "allowed": true, - "allowed_by": [ - "slice-declaration", - "evidence-namespace" - ], - "ownership_matches": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" - ] - }, - { - "status": "A", - "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-inspect-operator-console.stderr.log", - "allowed": true, - "allowed_by": [ - "slice-declaration", - "evidence-namespace" - ], - "ownership_matches": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" - ] - }, - { - "status": "A", - "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-inspect-operator-console.stdout.log", - "allowed": true, - "allowed_by": [ - "slice-declaration", - "evidence-namespace" - ], - "ownership_matches": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" - ] - }, - { - "status": "A", - "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-inspect-postgres.stderr.log", - "allowed": true, - "allowed_by": [ - "slice-declaration", - "evidence-namespace" - ], - "ownership_matches": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" - ] - }, - { - "status": "A", - "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-inspect-postgres.stdout.log", - "allowed": true, - "allowed_by": [ - "slice-declaration", - "evidence-namespace" - ], - "ownership_matches": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" - ] - }, - { - "status": "A", - "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-inspect-server.stderr.log", - "allowed": true, - "allowed_by": [ - "slice-declaration", - "evidence-namespace" - ], - "ownership_matches": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" - ] - }, - { - "status": "A", - "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-inspect-server.stdout.log", - "allowed": true, - "allowed_by": [ - "slice-declaration", - "evidence-namespace" - ], - "ownership_matches": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" - ] - }, - { - "status": "A", - "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-inventory.stderr.log", - "allowed": true, - "allowed_by": [ - "slice-declaration", - "evidence-namespace" - ], - "ownership_matches": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" - ] - }, - { - "status": "A", - "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-inventory.stdout.log", - "allowed": true, - "allowed_by": [ - "slice-declaration", - "evidence-namespace" - ], - "ownership_matches": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" - ] - }, - { - "status": "A", - "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-tag-inspect-operator-console.stderr.log", - "allowed": true, - "allowed_by": [ - "slice-declaration", - "evidence-namespace" - ], - "ownership_matches": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" - ] - }, - { - "status": "A", - "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-tag-inspect-operator-console.stdout.log", - "allowed": true, - "allowed_by": [ - "slice-declaration", - "evidence-namespace" - ], - "ownership_matches": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" - ] - }, - { - "status": "A", - "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-tag-inspect-postgres.stderr.log", - "allowed": true, - "allowed_by": [ - "slice-declaration", - "evidence-namespace" - ], - "ownership_matches": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" - ] - }, - { - "status": "A", - "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-tag-inspect-postgres.stdout.log", - "allowed": true, - "allowed_by": [ - "slice-declaration", - "evidence-namespace" - ], - "ownership_matches": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" - ] - }, - { - "status": "A", - "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-tag-inspect-server.stderr.log", - "allowed": true, - "allowed_by": [ - "slice-declaration", - "evidence-namespace" - ], - "ownership_matches": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" - ] - }, - { - "status": "A", - "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/image-tag-inspect-server.stdout.log", - "allowed": true, - "allowed_by": [ - "slice-declaration", - "evidence-namespace" - ], - "ownership_matches": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" - ] - }, - { - "status": "A", - "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/operator-api-health.stderr.log", - "allowed": true, - "allowed_by": [ - "slice-declaration", - "evidence-namespace" - ], - "ownership_matches": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" - ] - }, - { - "status": "A", - "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/operator-api-health.stdout.log", - "allowed": true, - "allowed_by": [ - "slice-declaration", - "evidence-namespace" - ], - "ownership_matches": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" - ] - }, - { - "status": "A", - "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/operator-api-ready.stderr.log", - "allowed": true, - "allowed_by": [ - "slice-declaration", - "evidence-namespace" - ], - "ownership_matches": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" - ] - }, - { - "status": "A", - "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/operator-api-ready.stdout.log", - "allowed": true, - "allowed_by": [ - "slice-declaration", - "evidence-namespace" - ], - "ownership_matches": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" - ] - }, - { - "status": "A", - "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/postgres-container-id.stderr.log", - "allowed": true, - "allowed_by": [ - "slice-declaration", - "evidence-namespace" - ], - "ownership_matches": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" - ] - }, - { - "status": "A", - "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/postgres-container-id.stdout.log", - "allowed": true, - "allowed_by": [ - "slice-declaration", - "evidence-namespace" - ], - "ownership_matches": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" - ] - }, - { - "status": "A", - "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/postgres-credential-injection.stderr.log", - "allowed": true, - "allowed_by": [ - "slice-declaration", - "evidence-namespace" - ], - "ownership_matches": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" - ] - }, - { - "status": "A", - "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/postgres-credential-injection.stdout.log", - "allowed": true, - "allowed_by": [ - "slice-declaration", - "evidence-namespace" - ], - "ownership_matches": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" - ] - }, - { - "status": "A", - "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/postgres-ready.stderr.log", - "allowed": true, - "allowed_by": [ - "slice-declaration", - "evidence-namespace" - ], - "ownership_matches": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" - ] - }, - { - "status": "A", - "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/postgres-ready.stdout.log", - "allowed": true, - "allowed_by": [ - "slice-declaration", - "evidence-namespace" - ], - "ownership_matches": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" - ] - }, - { - "status": "A", - "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/server-container-id.stderr.log", - "allowed": true, - "allowed_by": [ - "slice-declaration", - "evidence-namespace" - ], - "ownership_matches": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" - ] - }, - { - "status": "A", - "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/server-container-id.stdout.log", - "allowed": true, - "allowed_by": [ - "slice-declaration", - "evidence-namespace" - ], - "ownership_matches": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" - ] - }, - { - "status": "A", - "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/server-credential-injection.stderr.log", - "allowed": true, - "allowed_by": [ - "slice-declaration", - "evidence-namespace" - ], - "ownership_matches": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" - ] - }, - { - "status": "A", - "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/server-credential-injection.stdout.log", - "allowed": true, - "allowed_by": [ - "slice-declaration", - "evidence-namespace" - ], - "ownership_matches": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" - ] - }, - { - "status": "A", - "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/nested/dev-stand/maker-runtime-1-up/summary.json", - "allowed": true, - "allowed_by": [ - "slice-declaration", - "evidence-namespace" - ], - "ownership_matches": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" - ] - }, - { - "status": "A", - "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/ready.stderr.log", - "allowed": true, - "allowed_by": [ - "slice-declaration", - "evidence-namespace" - ], - "ownership_matches": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" - ] - }, - { - "status": "A", - "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/ready.stdout.log", - "allowed": true, - "allowed_by": [ - "slice-declaration", - "evidence-namespace" - ], - "ownership_matches": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" - ] - }, - { - "status": "A", - "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/scan.stderr.log", - "allowed": true, - "allowed_by": [ - "slice-declaration", - "evidence-namespace" - ], - "ownership_matches": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" - ] - }, - { - "status": "A", - "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/scan.stdout.log", - "allowed": true, - "allowed_by": [ - "slice-declaration", - "evidence-namespace" - ], - "ownership_matches": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" - ] - }, - { - "status": "A", - "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/summary.json", - "allowed": true, - "allowed_by": [ - "slice-declaration", - "evidence-namespace" - ], - "ownership_matches": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" - ] - }, - { - "status": "A", - "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/up.stderr.log", - "allowed": true, - "allowed_by": [ - "slice-declaration", - "evidence-namespace" - ], - "ownership_matches": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" - ] - }, - { - "status": "A", - "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/up.stdout.log", - "allowed": true, - "allowed_by": [ - "slice-declaration", - "evidence-namespace" - ], - "ownership_matches": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" - ] - }, - { - "status": "A", - "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-2/cleanup.json", - "allowed": true, - "allowed_by": [ - "slice-declaration", - "evidence-namespace" - ], - "ownership_matches": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" - ] - }, - { - "status": "A", - "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-2/commands.json", - "allowed": true, - "allowed_by": [ - "slice-declaration", - "evidence-namespace" - ], - "ownership_matches": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" - ] - }, - { - "status": "A", - "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-2/post-status.stderr.log", - "allowed": true, - "allowed_by": [ - "slice-declaration", - "evidence-namespace" - ], - "ownership_matches": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" - ] - }, - { - "status": "A", - "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-2/post-status.stdout.log", - "allowed": true, - "allowed_by": [ - "slice-declaration", - "evidence-namespace" - ], - "ownership_matches": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" - ] - }, - { - "status": "A", - "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-2/pre-status.stderr.log", - "allowed": true, - "allowed_by": [ - "slice-declaration", - "evidence-namespace" - ], - "ownership_matches": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" - ] - }, - { - "status": "A", - "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-2/pre-status.stdout.log", - "allowed": true, - "allowed_by": [ - "slice-declaration", - "evidence-namespace" - ], - "ownership_matches": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" - ] - }, - { - "status": "A", - "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-2/summary.json", - "allowed": true, - "allowed_by": [ - "slice-declaration", - "evidence-namespace" - ], - "ownership_matches": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" - ] - }, - { - "status": "A", - "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-3/cleanup.json", - "allowed": true, - "allowed_by": [ - "slice-declaration", - "evidence-namespace" - ], - "ownership_matches": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" - ] - }, - { - "status": "A", - "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-3/commands.json", - "allowed": true, - "allowed_by": [ - "slice-declaration", - "evidence-namespace" - ], - "ownership_matches": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" - ] - }, - { - "status": "A", - "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-3/post-status.stderr.log", - "allowed": true, - "allowed_by": [ - "slice-declaration", - "evidence-namespace" - ], - "ownership_matches": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" - ] - }, - { - "status": "A", - "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-3/post-status.stdout.log", - "allowed": true, - "allowed_by": [ - "slice-declaration", - "evidence-namespace" - ], - "ownership_matches": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" - ] - }, - { - "status": "A", - "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-3/pre-status.stderr.log", - "allowed": true, - "allowed_by": [ - "slice-declaration", - "evidence-namespace" - ], - "ownership_matches": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" - ] - }, - { - "status": "A", - "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-3/pre-status.stdout.log", - "allowed": true, - "allowed_by": [ - "slice-declaration", - "evidence-namespace" - ], - "ownership_matches": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" - ] - }, - { - "status": "A", - "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-3/summary.json", - "allowed": true, - "allowed_by": [ - "slice-declaration", - "evidence-namespace" - ], - "ownership_matches": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" - ] - }, - { - "status": "A", - "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/ownership/db-bulkops-rejected-negative.json", - "allowed": true, - "allowed_by": [ - "slice-declaration", - "evidence-namespace" - ], - "ownership_matches": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" - ] - }, - { - "status": "A", - "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/ownership/ledger-final.json", - "allowed": true, - "allowed_by": [ - "slice-declaration", - "evidence-namespace" - ], - "ownership_matches": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" - ] - }, - { - "status": "A", - "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/tdd/RG3-DEVSTAND.red.json", - "allowed": true, - "allowed_by": [ - "slice-declaration", - "evidence-namespace" - ], - "ownership_matches": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" - ] - }, - { - "status": "A", - "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/tdd/RG3-NODE.red.json", - "allowed": true, - "allowed_by": [ - "slice-declaration", - "evidence-namespace" - ], - "ownership_matches": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" - ] - }, - { - "status": "A", - "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/tdd/RG3-OWNERSHIP.red.json", - "allowed": true, - "allowed_by": [ - "slice-declaration", - "evidence-namespace" - ], - "ownership_matches": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" - ] - }, - { - "status": "A", - "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/verification-summary.json", - "allowed": true, - "allowed_by": [ - "slice-declaration", - "evidence-namespace" - ], - "ownership_matches": [ - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**" - ] - }, - { - "status": "M", - "path": ".github/workflows/test.yml", - "allowed": true, - "allowed_by": [ - "slice-declaration" - ], - "ownership_matches": [ - ".github/workflows/test.yml" - ] - }, - { - "status": "M", - "path": "scripts/production-gates/assert-plan-path-ownership.ps1", - "allowed": true, - "allowed_by": [ - "slice-declaration" - ], - "ownership_matches": [ - "scripts/production-gates/assert-plan-path-ownership.ps1" - ] - }, - { - "status": "M", - "path": "scripts/production-gates/run-db-suite.ps1", - "allowed": true, - "allowed_by": [ - "slice-declaration" - ], - "ownership_matches": [ - "scripts/production-gates/run-db-suite.ps1" - ] - }, - { - "status": "M", - "path": "scripts/production-gates/run-dev-stand.ps1", - "allowed": true, - "allowed_by": [ - "slice-declaration" - ], - "ownership_matches": [ - "scripts/production-gates/run-dev-stand.ps1" - ] - }, - { - "status": "A", - "path": "scripts/production-gates/run-node-matrix.ps1", - "allowed": true, - "allowed_by": [ - "slice-declaration" - ], - "ownership_matches": [ - "scripts/production-gates/run-node-matrix.ps1" - ] - } - ], - "violations": [], - "epoch_authority": { - "verdict": "PASS", - "evaluated": [ - { - "path": ".github/workflows/test.yml", - "current_owner": "RELEASE-GATES", - "owner_pass": true, - "transition_kind": "integration", - "required_base_sha": "", - "base_pass": true - } - ], - "errors": [] - }, - "errors": [] -} diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/tdd/RG3-DEVSTAND.red.json b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/tdd/RG3-DEVSTAND.red.json deleted file mode 100644 index c4f7df87..00000000 --- a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/tdd/RG3-DEVSTAND.red.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "task_id": "RG3-DEVSTAND", - "observed_at": "2026-07-10T08:29:56.4884843Z", - "test_file": "scripts/production-gates/run-db-suite.ps1", - "test_name": "liveness/readiness separation and three distinct generated credentials", - "invariant": "HTTP-200 liveness accepts only starting, ready, or error; readiness accepts only exact ready; PostgreSQL, admin, and bootstrap credentials are random, non-default, distinct, runtime-injected, and absent from evidence.", - "failure_reason": "The implementation had no liveness predicate and hard-coded the PostgreSQL password.", - "runner_stdout_excerpt": "The term 'Test-LivenessStatusPayload' is not recognized" -} diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/tdd/RG3-NODE.red.json b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/tdd/RG3-NODE.red.json deleted file mode 100644 index 87c729b3..00000000 --- a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/tdd/RG3-NODE.red.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "task_id": "RG3-NODE", - "observed_at": "2026-07-10T08:29:56.4884843Z", - "test_file": "scripts/production-gates/run-node-matrix.ps1", - "test_name": "clean OpenClaw locked-install and package matrix", - "invariant": "A clean checkout with no node_modules proves manifest/lock/plugin parity and runs npm ci, typecheck, tests, high-severity audit, and package dry-run in that exact order with unconditional cleanup.", - "failure_reason": "The new foundation runner had tests but no manifest-parity implementation.", - "runner_stdout_excerpt": "The term 'Test-OpenClawManifestParity' is not recognized" -} diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/tdd/RG3-OWNERSHIP.red.json b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/tdd/RG3-OWNERSHIP.red.json deleted file mode 100644 index b00fc1c2..00000000 --- a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/tdd/RG3-OWNERSHIP.red.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "task_id": "RG3-OWNERSHIP", - "observed_at": "2026-07-10T08:29:56.4884843Z", - "test_file": "scripts/production-gates/assert-plan-path-ownership.ps1", - "test_name": "reversed epoch, current owner, predecessor evidence, and successor-base authority", - "invariant": "A slice may change an epoch path only when it is the current owner and its base descends from every independently accepted, post-reviewed, integrated predecessor; challenged plan bytes must match the expected SHA256.", - "failure_reason": "The existing set-only ledger accepted the reversed B -> A epoch.", - "runner_stdout_excerpt": "SELFTEST FAIL: reversed epoch order was accepted" -} diff --git a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/verification-summary.json b/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/verification-summary.json deleted file mode 100644 index 77aa37b1..00000000 --- a/.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/verification-summary.json +++ /dev/null @@ -1,164 +0,0 @@ -{ - "schema_version": 1, - "slice": "RELEASE-GATES", - "revision": 3, - "role": "maker", - "verified_at_utc": "2026-07-10T09:52:27.8798155Z", - "repository_head": "2b3ef3e33bd19e630f8f67d07a9e2521cb98537f", - "plan_governance_commit": "a1653abf5a1088f45df2c58487a74a886666adf1", - "release_gates_commit": "badc408937dd6fad0e1dc7ee9fc573505aa617b2", - "plan": { - "path": ".agent/plans/2026-07-10-engram-production-ready-master-plan.md", - "sha256": "d371e94dff1ea12767b9d0832240cb6caf52c6c3bbe2209fe4280159c4f03c52" - }, - "ownership_state": { - "path": ".agent/plans/2026-07-10-engram-production-ready-ownership-state.json", - "sha256": "1419e2f7e5236e21dd9a2d8c3271ced2def16dc0a798435ad5a9401fe522d55b", - "db_bulkops_current_owner": "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK", - "db_bulkops_rejected_head": "68b2ce5835c7c6efdf1c68da9eedcb8d9c3837ef" - }, - "implementation_hashes": { - ".agent/dev-stand.config.yaml": "1ba20cee8a3932988b8b503ea8419451165c46823d94a38010f93bc02a6933c3", - ".github/workflows/test.yml": "1161a37fc0a3e659c7cd609828d8c0b2c93973e2a2c739b79f1467064deb7b8a", - "scripts/production-gates/assert-plan-path-ownership.ps1": "cf57be086c7118c36c0281d10e92ffe01d9ca7fc9a4f0c98b2b1e497cd8b2601", - "scripts/production-gates/run-db-suite.ps1": "1879cc7a1ecc63397184adfe0d6dc490537d7a45e4ccdbe701d48ee729ed78fb", - "scripts/production-gates/run-dev-stand.ps1": "f6053e41681184771302e06d8a650892695e51f98f6c6c9935a3aad55829f13e", - "scripts/production-gates/run-node-matrix.ps1": "3138322029c4d271ba2101a8baef13c65c34e54f742e6c130dab481498d184d4" - }, - "verification": { - "powershell_ast": { - "verdict": "PASS", - "scripts": 8, - "parse_errors": 0 - }, - "self_tests": { - "verdict": "PASS", - "scripts": 8 - }, - "ownership_ledger": { - "verdict": "PASS", - "slices": 47, - "declarations": 318, - "repeated_exact_paths": 32, - "prefix_intersections": 2, - "errors": 0, - "artifact": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/ownership/ledger-final.json", - "sha256": "39d3572086d4690def49d3cc56f2870384ba8c44bf52bf0e27b93a6b39976d57" - }, - "plan_governance_commit_diff": { - "verdict": "PASS", - "base": "2b3ef3e33bd19e630f8f67d07a9e2521cb98537f", - "head": "a1653abf5a1088f45df2c58487a74a886666adf1", - "changed_paths": 2, - "ownership_violations": 0, - "errors": 0, - "artifact": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/ownership/plan-governance-commit-diff.json", - "sha256": "ee67cb0df9ecb298f1e2df7daf6993b1111d126c6e34ac80904389d113b861c2" - }, - "release_gates_commit_diff": { - "verdict": "PASS", - "base": "a1653abf5a1088f45df2c58487a74a886666adf1", - "head": "badc408937dd6fad0e1dc7ee9fc573505aa617b2", - "changed_paths": 134, - "ownership_violations": 0, - "errors": 0, - "artifact": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/ownership/release-gates-commit-diff.json", - "sha256": "354ef8d59e693445ce7ec921cb62eedd1b5e9b40da86e5ace43408e58fd406ed" - }, - "rejected_db_bulkops_negative": { - "verdict": "EXPECTED_FAIL", - "runner_exit_code": 1, - "changed_paths": 22, - "ownership_violations": 0, - "current_owner_errors": 4, - "artifact": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/ownership/db-bulkops-rejected-negative.json", - "sha256": "e230261479a9603697488901e815bc4b11a9e4bbfbe9e658d0927639cb3229f4" - }, - "workflow_conformance": { - "verdict": "PASS", - "mutations_rejected": 26 - }, - "root_register_plan_slice_parity": { - "verdict": "FAIL", - "plan_slices": 47, - "register_slices": 54, - "missing_plan_slices": [ - "DOCUMENT-INGEST-PUBLIC-TRUTH", - "INGEST-DOC-SNAPSHOT-DEMOLITION" - ], - "owner": "root" - }, - "actionlint": { - "verdict": "PASS", - "version": "1.7.12" - }, - "hygiene": { - "verdict": "PASS", - "git_diff_check": "PASS", - "sensitive_value_pattern_hits": 0, - "residual_containers": 0, - "residual_networks": 0, - "residual_volumes": 0 - } - }, - "tdd_red_evidence": { - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/tdd/RG3-OWNERSHIP.red.json": "051cc783f978e65b777a96d3897c1f2cb5cb4f29824c86506bcb939870919309", - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/tdd/RG3-DEVSTAND.red.json": "da1948a48ade2c830c8eee570f4ba3c14d5b8020d7c4402b2c588cf8c0df8622", - ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/tdd/RG3-NODE.red.json": "c9e044e2d4560ecfc19f8e6828da4c5bd1f1e3dc1b0ab7abd974ef66e727797b" - }, - "runtime_dev_stand": { - "verdict": "EXPECTED_FAIL", - "reason": "The implemented gate correctly rejected existing HIGH/CRITICAL findings in the exact release images.", - "wrapper_summary": { - "path": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/dev-stand-runtime/maker-runtime-1/summary.json", - "sha256": "2e8386aac779f1ea3e68ede005bf643b8ebcd37824101b8e7b80070ab9b311cf" - }, - "up": { - "verdict": "PASS", - "sha256": "f0bd9816ae5abf16818f3a3c24ff4335a80d55d2380954b8aa2d4743a8ccbddb", - "three_independent_256_bit_secrets": true, - "distinct_nondefault": true, - "runtime_injected": true, - "persisted": false, - "direct_liveness_http_200_semantic_pass": true, - "proxy_liveness_http_200_semantic_pass": true, - "direct_readiness_http_200_semantic_pass": true, - "proxy_readiness_http_200_semantic_pass": true - }, - "ready": { - "verdict": "PASS", - "sha256": "8a1f90a21b03727768a6d20a5df0dab2d7ed101fac8d2c72dea2b424398cc221" - }, - "scan": { - "verdict": "FAIL", - "sha256": "3895b0e63f6d39eda72fd09348d8c785c234e3a4a15721656a8787d0901fd983", - "high_or_critical_findings": { - "ghcr.io/thebtf/engram-operator-console:main": 5, - "pgvector/pgvector:pg17": 38, - "ghcr.io/thebtf/engram:main": 13 - } - }, - "down": { - "verdict": "PASS", - "sha256": "9e85b54cc1bf019c93a3b89cca590ecdc8ec10da7b68f22585ef787fdfd2caa7", - "residual_resources_zero": true - } - }, - "openclaw_node_matrix": { - "verdict": "EXPECTED_FAIL", - "reason": "The release surface currently has no tracked package-lock.json; no npm release command was executed.", - "release_commands_executed": 0, - "package_dry_run": false, - "pre_surface_clean": true, - "post_surface_clean": true, - "artifact": ".agent/reports/evidence/production-ready/release-gates-foundation-revision-3/node-matrix/pre-openclaw-release-r3-final-3/summary.json", - "sha256": "408424249909005fec919e1e5e00c73596fcdb4faacdbdc69295e3ebbc860472", - "owner": "OPENCLAW-RELEASE" - }, - "claims": { - "checker_verdict": null, - "production_ready": false, - "go_no_go": null, - "bootstrap_functionality": "NOT_CLAIMED" - } -} diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 6b2bb702..6b93dac8 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -68,6 +68,10 @@ jobs: shell: pwsh run: ./scripts/production-gates/assert-plan-path-ownership.ps1 -SelfTest + - name: Self-test Windows tracked path budget + shell: pwsh + run: ./scripts/production-gates/assert-windows-path-budget.ps1 -SelfTest + - name: Self-test OpenClaw node release matrix shell: pwsh run: ./scripts/production-gates/run-node-matrix.ps1 -SelfTest @@ -78,9 +82,13 @@ jobs: ./scripts/production-gates/assert-plan-path-ownership.ps1 -Mode Ledger -Plan .agent/plans/2026-07-10-engram-production-ready-master-plan.md - -ExpectedPlanSha256 d371e94dff1ea12767b9d0832240cb6caf52c6c3bbe2209fe4280159c4f03c52 + -ExpectedPlanSha256 d7bcfd122e456d9b764595524292d53b0c99447b7f716a1be0707341e4681bf9 -State .agent/plans/2026-07-10-engram-production-ready-ownership-state.json - -Artifact .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/ownership/ci-ledger.json + -Artifact .agent/e/rg4/ci-ledger.json + + - name: Assert Windows tracked path budget + shell: pwsh + run: pwsh -NoProfile -File scripts/production-gates/assert-windows-path-budget.ps1 -Repository . -Ref HEAD -CheckoutPrefixLength 66 -MaximumCombinedPathLength 240 -Artifact .agent/e/rg4/ci-path-budget.json - name: Assert tracked gate / CI conformance shell: pwsh @@ -93,10 +101,11 @@ jobs: $criticalRunner = Get-Content -Raw 'scripts/production-gates/run-critical-suite.ps1' $devStandRunner = Get-Content -Raw 'scripts/production-gates/run-dev-stand.ps1' $ownershipRunner = Get-Content -Raw 'scripts/production-gates/assert-plan-path-ownership.ps1' + $pathBudgetRunner = Get-Content -Raw 'scripts/production-gates/assert-windows-path-budget.ps1' $nodeRunner = Get-Content -Raw 'scripts/production-gates/run-node-matrix.ps1' $ownershipState = Get-Content -Raw '.agent/plans/2026-07-10-engram-production-ready-ownership-state.json' - $expectedPlanSha = 'd371e94dff1ea12767b9d0832240cb6caf52c6c3bbe2209fe4280159c4f03c52' - $observedPlanSha = (Get-FileHash -Algorithm SHA256 -LiteralPath '.agent/plans/2026-07-10-engram-production-ready-master-plan.md').Hash.ToLowerInvariant() + $expectedPlanSha = 'd7bcfd122e456d9b764595524292d53b0c99447b7f716a1be0707341e4681bf9' + $observedPlanSha = ([string](& pwsh -NoProfile -File scripts/production-gates/assert-plan-path-ownership.ps1 -Plan .agent/plans/2026-07-10-engram-production-ready-master-plan.md -PrintCanonicalPlanSha256)).Trim() $rejectedBulkHead = '68b2ce5835c7c6efdf1c68da9eedcb8d9c3837ef' $rejectedBulkChecker = '.agent/worktrees/prc-db-bulkops/.agent/reviews/2026-07-10-db-bulkops-sibling-rework-check.md' $rejectedBulkCheckerSha = 'EB9EB227363A27EA058C6654BD7E38EED1088252F79F837E377B2A3CBC1FAFB7' @@ -104,6 +113,7 @@ jobs: $trackedDatabaseCommand = 'pwsh -NoProfile -File scripts/production-gates/run-db-suite.ps1 -FreshDatabase -Package ./... -Race -FailOnUnexpectedSkip' $trackedCriticalWrapper = 'pwsh -NoProfile -File scripts/production-gates/run-critical-suite.ps1 -Config .agent/critical-suite.config.yaml' $trackedDevStandWrapper = 'pwsh -NoProfile -File scripts/production-gates/run-dev-stand.ps1 -Config .agent/dev-stand.config.yaml' + $trackedPathBudgetWrapper = 'pwsh -NoProfile -File scripts/production-gates/assert-windows-path-budget.ps1 -Repository . -Ref HEAD -CheckoutPrefixLength 66 -MaximumCombinedPathLength 240 -Artifact .agent/e/rg4/ci-path-budget.json' function Remove-ConformanceStep([string]$text) { return [regex]::Replace($text, '(?ms)^ - name: Assert tracked gate / CI conformance\r?\n.*?(?=^ - name: |\z)', '') @@ -115,6 +125,16 @@ jobs: return $match.Groups['body'].Value } + function Assert-TokenOrder([string]$text, [string[]]$tokens) { + $previous = -1 + foreach ($token in $tokens) { + $index = $text.IndexOf($token, [System.StringComparison]::Ordinal) + if ($index -lt 0) { throw "ordered contract token is missing '$token'" } + if ($index -le $previous) { throw "ordered contract token '$token' appears out of order" } + $previous = $index + } + } + function Assert-WorkflowContract( [string]$workflowText, [string]$criticalText, @@ -147,15 +167,26 @@ jobs: if ($criticalText -notmatch ('(?m)^\s{2}command:\s*"' + [regex]::Escape($trackedDatabaseCommand) + '"\s*$')) { throw 'tracked full fresh-DB runner command drifted' } $ledgerStep = Get-StepBody $execution 'Assert tracked production-ready ownership ledger' - foreach ($required in @('-Mode Ledger', '-Plan .agent/plans/2026-07-10-engram-production-ready-master-plan.md', "-ExpectedPlanSha256 $expectedPlanSha", '-State .agent/plans/2026-07-10-engram-production-ready-ownership-state.json', '-Artifact .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/ownership/ci-ledger.json')) { + foreach ($required in @('-Mode Ledger', '-Plan .agent/plans/2026-07-10-engram-production-ready-master-plan.md', "-ExpectedPlanSha256 $expectedPlanSha", '-State .agent/plans/2026-07-10-engram-production-ready-ownership-state.json', '-Artifact .agent/e/rg4/ci-ledger.json')) { if (-not $ledgerStep.Contains($required)) { throw "tracked ownership Ledger step is missing '$required'" } } + $pathBudgetSelfTest = Get-StepBody $execution 'Self-test Windows tracked path budget' + if (-not $pathBudgetSelfTest.Contains('assert-windows-path-budget.ps1 -SelfTest')) { throw 'workflow does not self-test the Windows path-budget gate' } + $pathBudgetStep = Get-StepBody $execution 'Assert Windows tracked path budget' + if (-not $pathBudgetStep.Contains("run: $trackedPathBudgetWrapper")) { throw 'workflow does not execute the tracked Windows path-budget gate exactly' } + foreach ($required in @('Measure-TrackedPathBudget', 'CheckoutPrefixLength = 66', 'MaximumCombinedPathLength = 240', 'git -c core.quotepath=false', 'ls-tree -r --name-only --full-tree')) { + if (-not $pathBudgetRunner.Contains($required)) { throw "Windows path-budget runner implementation is missing '$required'" } + } $nodeSelfTest = Get-StepBody $execution 'Self-test OpenClaw node release matrix' if (-not $nodeSelfTest.Contains('run-node-matrix.ps1 -SelfTest')) { throw 'workflow does not self-test the OpenClaw node release matrix' } - foreach ($required in @('Test-SameStringSequence', "current owner is '`$currentOwner', not '`$Slice'", 'lacks exact rejected-checker evidence', 'must equal rejected predecessor', 'does not descend from predecessor integration')) { + foreach ($required in @('Get-CanonicalUtf8LfFileSha256', 'PrintCanonicalPlanSha256', 'Test-SameStringSequence', "current owner is '`$currentOwner', not '`$Slice'", 'lacks exact rejected-checker evidence', 'must equal rejected predecessor', 'does not descend from predecessor integration')) { if (-not $ownershipRunnerText.Contains($required)) { throw "ownership runner implementation is missing '$required'" } } + foreach ($required in @('Test-StrictBoolean', '--untracked-files=all', 'dev-stand-source-commit', 'dev-stand-source-commit-post-build', 'dev-stand-source-tracked-status-post-build', 'dev-stand-compose-build', "@('build', '--pull', 'server', 'operator-console')", 'dev-stand-postgres-pull', "@('pull', 'postgres')", "@('up', '-d', '--no-build', '--pull', 'never', '--wait')", 'source_commit = $sourceCommit', 'source_tracked_clean = $sourceTrackedClean', 'prelaunch_image_ids = $prelaunchImageIds', 'prelaunch_to_running_image_identity = $prelaunchToRunningImageIdentity', 'scanned_reference = $scanReference')) { + if (-not $dbRunnerText.Contains($required)) { throw "dev-stand source/build provenance contract is missing '$required'" } + } + Assert-TokenOrder $dbRunnerText @("Invoke-CapturedProcess 'dev-stand-source-tracked-status'", "Invoke-CapturedProcess 'dev-stand-compose-build'", "Invoke-CapturedProcess 'dev-stand-postgres-pull'", 'dev-stand-source-tracked-status-post-build', 'dev-stand-prelaunch-image-inspect-', "Invoke-CapturedProcess 'dev-stand-up'") foreach ($required in @('openclaw-lock-non-ignored', "@('check-ignore', '--no-index', '--quiet'", 'npm pack contains forbidden path', 'dist/index.js', 'dist/index.d.ts', 'scripts/install.sh', 'npm-ci -> npm-typecheck -> npm-test -> npm-audit-high -> npm-pack-dry-run')) { if (-not $nodeRunnerText.Contains($required)) { throw "node release runner implementation is missing '$required'" } } @@ -194,7 +225,7 @@ jobs: $devStandStep = Get-StepBody $execution 'Run tracked dev-stand lifecycle runner' if (-not $devStandStep.Contains("run: $trackedDevStandWrapper")) { throw 'workflow does not execute the tracked dev-stand wrapper exactly' } - foreach ($required in @("foreach (`$action in @('Up', 'Ready', 'Scan'))", 'if ($upAttempted)', "Read-ActionSummary 'Down'", 'residual_resources_zero', 'dev-stand-operator-api-health', 'dev-stand-operator-api-ready')) { + foreach ($required in @("foreach (`$action in @('Up', 'Ready', 'Scan'))", 'if ($upAttempted)', "Read-ActionSummary 'Down'", 'residual_resources_zero', 'dev-stand-operator-api-health', 'dev-stand-operator-api-ready', 'Test-StrictBoolean', 'source_commit', 'source_tracked_clean', 'prelaunch_image_ids', 'dev-stand-compose-build', 'dev-stand-postgres-pull', 'Scan image ID is not the exact prelaunch/running ID', 'Scan command arguments do not end in the recorded immutable reference')) { if (-not $devStandRunnerText.Contains($required)) { throw "dev-stand runner implementation is missing '$required'" } } @@ -212,12 +243,32 @@ jobs: } Assert-WorkflowContract $workflow $critical $stand $dbRunner $criticalRunner $devStandRunner + $canonicalFixtureRoot = Join-Path $env:RUNNER_TEMP ('plan-authority-' + [guid]::NewGuid().ToString('N')) + New-Item -ItemType Directory -Path $canonicalFixtureRoot -Force | Out-Null + try { + $planText = [System.IO.File]::ReadAllText((Resolve-Path '.agent/plans/2026-07-10-engram-production-ready-master-plan.md')) + $lfText = ($planText -replace "`r`n", "`n") -replace "`r", "`n" + $crlfText = $lfText -replace "`n", "`r`n" + $semanticText = $lfText.Replace('Revision: 4', 'Revision: 5') + if ($semanticText -ceq $lfText) { throw 'semantic plan mutation fixture did not change the plan' } + $utf8NoBom = [System.Text.UTF8Encoding]::new($false) + $lfPath = Join-Path $canonicalFixtureRoot 'plan-lf.md'; [System.IO.File]::WriteAllText($lfPath, $lfText, $utf8NoBom) + $crlfPath = Join-Path $canonicalFixtureRoot 'plan-crlf.md'; [System.IO.File]::WriteAllText($crlfPath, $crlfText, $utf8NoBom) + $semanticPath = Join-Path $canonicalFixtureRoot 'plan-semantic.md'; [System.IO.File]::WriteAllText($semanticPath, $semanticText, $utf8NoBom) + $lfHash = ([string](& pwsh -NoProfile -File scripts/production-gates/assert-plan-path-ownership.ps1 -Plan $lfPath -PrintCanonicalPlanSha256)).Trim() + $crlfHash = ([string](& pwsh -NoProfile -File scripts/production-gates/assert-plan-path-ownership.ps1 -Plan $crlfPath -PrintCanonicalPlanSha256)).Trim() + $semanticHash = ([string](& pwsh -NoProfile -File scripts/production-gates/assert-plan-path-ownership.ps1 -Plan $semanticPath -PrintCanonicalPlanSha256)).Trim() + if ($lfHash -cne $expectedPlanSha -or $crlfHash -cne $expectedPlanSha) { throw 'LF/CRLF canonical plan authority hashes diverged' } + if ($semanticHash -ceq $expectedPlanSha) { throw 'semantic plan mutation preserved the authority hash' } + } + finally { Remove-Item -LiteralPath $canonicalFixtureRoot -Recurse -Force -ErrorAction SilentlyContinue } foreach ($mutation in @( @{ name = 'remove fresh database'; token = '-FreshDatabase' }, @{ name = 'remove database race'; token = '-Race' }, @{ name = 'remove skip enforcement'; token = '-FailOnUnexpectedSkip' }, @{ name = 'remove critical wrapper'; token = $trackedCriticalWrapper }, @{ name = 'remove dev-stand wrapper'; token = $trackedDevStandWrapper }, + @{ name = 'remove Windows path-budget wrapper'; token = $trackedPathBudgetWrapper }, @{ name = 'remove full JSON mode'; token = "'-json'" } )) { $mutated = $workflow.Replace($mutation.token, '') @@ -233,6 +284,10 @@ jobs: Assert-MutationRejected 'remove wrapper proxied operator validation' { Assert-WorkflowContract $workflow $critical $stand $dbRunner $criticalRunner ($devStandRunner.Replace('dev-stand-operator-api-health', '')) } Assert-MutationRejected 'remove dev-stand Scan action' { Assert-WorkflowContract $workflow $critical $stand $dbRunner $criticalRunner ($devStandRunner.Replace("@('Up', 'Ready', 'Scan')", "@('Up', 'Ready')")) } Assert-MutationRejected 'remove unconditional Down validation' { Assert-WorkflowContract $workflow $critical $stand $dbRunner $criticalRunner ($devStandRunner.Replace("Read-ActionSummary 'Down'", '')) } + Assert-MutationRejected 'remove prelaunch compose build' { Assert-WorkflowContract $workflow $critical $stand ($dbRunner.Replace("@('build', '--pull', 'server', 'operator-console')", "@('config')")) $criticalRunner $devStandRunner } + $lateBuildRunner = $dbRunner.Replace("Invoke-CapturedProcess 'dev-stand-compose-build'", "Invoke-CapturedProcess 'dev-stand-compose-build-placeholder'") + "`n# Invoke-CapturedProcess 'dev-stand-compose-build'" + Assert-MutationRejected 'move prelaunch compose build after launch' { Assert-WorkflowContract $workflow $critical $stand $lateBuildRunner $criticalRunner $devStandRunner } + Assert-MutationRejected 'remove no-build launch lock' { Assert-WorkflowContract $workflow $critical $stand ($dbRunner.Replace("'--no-build'", "'--renew-anon-volumes'")) $criticalRunner $devStandRunner } Assert-MutationRejected 'narrow compatibility full package' { Assert-WorkflowContract ($workflow.Replace("`$arguments.Add('./...')", "`$arguments.Add('./internal/...')")) $critical $stand $dbRunner $criticalRunner $devStandRunner } Assert-MutationRejected 'change count semantics' { Assert-WorkflowContract ($workflow.Replace("'-count=1'", "'-count=2'")) $critical $stand $dbRunner $criticalRunner $devStandRunner } Assert-MutationRejected 'change coverage mode' { Assert-WorkflowContract ($workflow.Replace("'-covermode=atomic'", "'-covermode=set'")) $critical $stand $dbRunner $criticalRunner $devStandRunner } @@ -244,7 +299,7 @@ jobs: Assert-MutationRejected 'change ownership current owner' { Assert-WorkflowContract $workflow $critical $stand $dbRunner $criticalRunner $devStandRunner -stateText ($ownershipState.Replace('"current_owner": "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK"', '"current_owner": "DB-BULKOPS"')) } Assert-MutationRejected 'remove rejected predecessor evidence' { Assert-WorkflowContract $workflow $critical $stand $dbRunner $criticalRunner $devStandRunner -stateText ($ownershipState.Replace($rejectedBulkCheckerSha, '')) } Assert-MutationRejected 'change exact rejected successor base' { Assert-WorkflowContract $workflow $critical $stand $dbRunner $criticalRunner $devStandRunner -stateText ($ownershipState.Replace($rejectedBulkHead, ('1' * 40))) } - Write-Output 'CONFORMANCE PASS: exact wrappers, ownership hash/state, node matrix, readiness, cleanup, and full/race semantics match; 26 mutations rejected' + Write-Output 'CONFORMANCE PASS: canonical LF/CRLF authority, exact wrappers, path budget, ordered source-built image provenance, ownership state, node matrix, readiness, cleanup, and full/race semantics match; 30 mutations rejected' - name: Resolve PostgreSQL service identity shell: pwsh @@ -279,7 +334,7 @@ jobs: name: release-gates-foundation path: | .agent/reports/evidence/production-ready/release-gates-foundation/ - .agent/reports/evidence/production-ready/release-gates-foundation-revision-3/ + .agent/e/rg4/ if-no-files-found: error test: diff --git a/scripts/production-gates/assert-plan-path-ownership.ps1 b/scripts/production-gates/assert-plan-path-ownership.ps1 index a2ffb9d3..3203e43b 100644 --- a/scripts/production-gates/assert-plan-path-ownership.ps1 +++ b/scripts/production-gates/assert-plan-path-ownership.ps1 @@ -11,6 +11,7 @@ param( [string]$EvidenceNamespace, [string]$ReportNamespace, [string]$Artifact = '.agent/reports/evidence/production-ready/ownership/path-ledger.json', + [switch]$PrintCanonicalPlanSha256, [switch]$SelfTest, [switch]$Help ) @@ -25,9 +26,10 @@ assert-plan-path-ownership.ps1 Ledger mode parses the production-ready master-plan ownership matrix. Only literal repository paths and explicit directory/** prefixes are accepted. Cross-owner exact and exact/prefix overlap requires one ownership epoch whose -ordered owner sequence exactly matches the effective owners. Prefix/prefix -overlap always fails. The tracked ownership-state JSON must match the challenged -plan hash and every ordered epoch. +ordered owner sequence exactly matches the effective owners. An explicitly +tracked single-owner exact path may use an em dash in the Next epoch column. +Prefix/prefix overlap always fails. The tracked ownership-state JSON must match +the challenged canonical UTF-8/LF plan hash and every ordered epoch. Diff mode additionally enumerates git diff --name-status Base..Head and proves that every changed path belongs to the named slice or to its validated evidence @@ -48,6 +50,9 @@ Usage: -EvidenceNamespace '.agent/specs/production-ready-db-bulkops/evidence/**' ` -ReportNamespace .agent/reports/db-bulkops-maker.md -Plan ` -ExpectedPlanSha256 <64-hex-sha256> -State -Artifact + + pwsh ./scripts/production-gates/assert-plan-path-ownership.ps1 ` + -Plan -PrintCanonicalPlanSha256 '@ | Write-Output } @@ -66,6 +71,16 @@ function Write-Utf8NoBom { ) } +function Get-CanonicalUtf8LfFileSha256 { + param([Parameter(Mandatory)][string]$Path) + + $fullPath = [System.IO.Path]::GetFullPath($Path) + $text = [System.IO.File]::ReadAllText($fullPath) + $canonicalText = ($text -replace "`r`n", "`n") -replace "`r", "`n" + $canonicalBytes = [System.Text.UTF8Encoding]::new($false).GetBytes($canonicalText) + return [Convert]::ToHexString([System.Security.Cryptography.SHA256]::HashData($canonicalBytes)).ToLowerInvariant() +} + function Split-MarkdownRow { param([Parameter(Mandatory)][string]$Line) @@ -387,12 +402,15 @@ function Invoke-OwnershipAudit { $next = ($row.cells[2].Trim() -replace '`', '') $chain = [System.Collections.Generic.List[string]]::new() if (-not [string]::IsNullOrWhiteSpace($current)) { $chain.Add($current) } - foreach ($owner in ($next -split '\s*->\s*')) { - $trimmedOwner = $owner.Trim() - if (-not [string]::IsNullOrWhiteSpace($trimmedOwner)) { $chain.Add($trimmedOwner) } + $hasSuccessor = $next -notmatch '^(?:—|–|-|none|n/?a)$' + if ($hasSuccessor) { + foreach ($owner in ($next -split '\s*->\s*')) { + $trimmedOwner = $owner.Trim() + if (-not [string]::IsNullOrWhiteSpace($trimmedOwner)) { $chain.Add($trimmedOwner) } + } } - if ($chain.Count -lt 2) { - $errors.Add("line $($row.line_number): epoch chain must contain at least two owners") + if ($chain.Count -lt 1) { + $errors.Add("line $($row.line_number): epoch chain must contain a current owner") } if (@($chain | Select-Object -Unique).Count -ne $chain.Count) { $errors.Add("line $($row.line_number): epoch chain contains a duplicate owner") @@ -498,7 +516,15 @@ function Invoke-OwnershipAudit { if ($effectiveOwners.Count -lt 2) { if ($matchingEpoch.Count -gt 0) { - $errors.Add("declared epoch '$path' is not an actual repeated exact or exact/prefix path") + if ($effectiveOwners.Count -eq 1 -and $matchingEpoch.Count -eq 1) { + $epochOwners = @($matchingEpoch[0].owners) + if (-not (Test-SameStringSequence $effectiveOwners $epochOwners)) { + $errors.Add("single-owner epoch '$path' differs: effective=$($effectiveOwners -join ' -> '), epoch=$($epochOwners -join ' -> ')") + } + } + else { + $errors.Add("declared epoch '$path' is not an actual exact ownership declaration") + } } continue } @@ -736,7 +762,7 @@ function Get-EpochEvidenceErrors { $ownerCount = @($owners).Count $predecessorCount = @($predecessors).Count - if ($ownerCount -lt 2) { $errors.Add("state epoch '$path' must contain at least two ordered owners") } + if ($ownerCount -lt 1) { $errors.Add("state epoch '$path' must contain at least one ordered owner") } if (@($owners | Select-Object -Unique).Count -ne $ownerCount) { $errors.Add("state epoch '$path' contains duplicate owners") } if ($currentIndex -lt 0) { $errors.Add("state epoch '$path' current owner '$currentOwner' is not in its ordered owners") } if ($transitionKind -notin @('integration', 'rework')) { $errors.Add("state epoch '$path' has unsupported transition_kind '$transitionKind'") } @@ -960,6 +986,30 @@ function New-SyntheticOwnershipState { } function Invoke-SelfTest { + $singleOwnerEpoch = New-SyntheticPlan -Rows '| SOLO | `work/solo` | `src/single.go` | none | proof |' -EpochRows '| `src/single.go` | SOLO | — | SOLO checker and post-review PASS, commit integrated before any successor |' + $singleOwnerResult = Invoke-OwnershipAudit $singleOwnerEpoch 'selftest-single-owner-epoch' + Assert-SelfTestCondition ($singleOwnerResult.verdict -eq 'PASS') ("single-owner tracked epoch was rejected: " + ($singleOwnerResult.errors -join '; ')) + + $hashFixtureRoot = Join-Path ([System.IO.Path]::GetTempPath()) ("engram-plan-hash-selftest-" + [guid]::NewGuid().ToString('N')) + New-Item -ItemType Directory -Path $hashFixtureRoot -Force | Out-Null + try { + $lfFixture = Join-Path $hashFixtureRoot 'plan-lf.md' + $crlfFixture = Join-Path $hashFixtureRoot 'plan-crlf.md' + $semanticFixture = Join-Path $hashFixtureRoot 'plan-semantic.md' + $utf8NoBom = [System.Text.UTF8Encoding]::new($false) + [System.IO.File]::WriteAllText($lfFixture, "alpha`nbeta`n", $utf8NoBom) + [System.IO.File]::WriteAllText($crlfFixture, "alpha`r`nbeta`r`n", $utf8NoBom) + [System.IO.File]::WriteAllText($semanticFixture, "alpha`ngamma`n", $utf8NoBom) + $lfHash = Get-CanonicalUtf8LfFileSha256 -Path $lfFixture + $crlfHash = Get-CanonicalUtf8LfFileSha256 -Path $crlfFixture + $semanticHash = Get-CanonicalUtf8LfFileSha256 -Path $semanticFixture + Assert-SelfTestCondition ($lfHash -ceq $crlfHash) 'canonical authority hash differs between LF and CRLF checkout forms' + Assert-SelfTestCondition ($lfHash -cne $semanticHash) 'canonical authority hash accepted a semantic mutation' + } + finally { + Remove-Item -LiteralPath $hashFixtureRoot -Recurse -Force -ErrorAction SilentlyContinue + } + $reorderedEpoch = New-SyntheticPlan -Rows "| A | ``work/a`` | ``src/shared.go`` | none | proof |`n| B | ``work/b`` | ``src/shared.go`` | A integrated | proof |" -EpochRows '| `src/shared.go` | B | A | B checker and post-review PASS, commit integrated, A rebased |' $reorderedResult = Invoke-OwnershipAudit $reorderedEpoch 'selftest-reordered-epoch' Assert-SelfTestCondition ($reorderedResult.verdict -eq 'FAIL') 'reversed epoch order was accepted' @@ -980,6 +1030,11 @@ function Invoke-SelfTest { completed_predecessors = @(); required_successor_base_sha = $null } Assert-SelfTestCondition (@(Get-EpochEvidenceErrors $firstOwnerState).Count -eq 0) 'first owner with an empty predecessor list was rejected or raised under StrictMode' + $singleOwnerState = [pscustomobject][ordered]@{ + path = 'src/single.go'; ordered_owners = @('SOLO'); current_owner = 'SOLO'; transition_kind = 'integration' + completed_predecessors = @(); required_successor_base_sha = $null + } + Assert-SelfTestCondition (@(Get-EpochEvidenceErrors $singleOwnerState).Count -eq 0) 'single-owner state epoch was rejected' $reworkEpoch = [pscustomobject][ordered]@{ path = 'src/shared.go'; ordered_owners = @('A', 'B'); current_owner = 'B'; transition_kind = 'rework' completed_predecessors = @([pscustomobject][ordered]@{ @@ -1083,6 +1138,11 @@ function Invoke-SelfTest { if ($Help) { Show-Help; exit 0 } if ($SelfTest) { Invoke-SelfTest; exit 0 } +if ($PrintCanonicalPlanSha256) { + if (-not (Test-Path -LiteralPath $Plan -PathType Leaf)) { throw "ownership plan does not exist: $Plan" } + Write-Output (Get-CanonicalUtf8LfFileSha256 -Path $Plan) + exit 0 +} $startedAt = [DateTimeOffset]::UtcNow $planHash = $null @@ -1098,9 +1158,9 @@ try { if (-not (Test-Path -LiteralPath $Plan -PathType Leaf)) { throw "ownership plan does not exist: $Plan" } if ([string]::IsNullOrWhiteSpace($ExpectedPlanSha256) -or $ExpectedPlanSha256 -notmatch '^[0-9A-Fa-f]{64}$') { throw '-ExpectedPlanSha256 is required and must be a full 64-hex SHA256' } if (-not (Test-Path -LiteralPath $State -PathType Leaf)) { throw "ownership state does not exist: $State" } - $planHash = (Get-FileHash -LiteralPath $Plan -Algorithm SHA256).Hash.ToLowerInvariant() - $stateHash = (Get-FileHash -LiteralPath $State -Algorithm SHA256).Hash.ToLowerInvariant() - $text = Get-Content -LiteralPath $Plan -Raw + $planHash = Get-CanonicalUtf8LfFileSha256 -Path $Plan + $stateHash = Get-CanonicalUtf8LfFileSha256 -Path $State + $text = [System.IO.File]::ReadAllText([System.IO.Path]::GetFullPath($Plan)) $ledger = Invoke-OwnershipAudit $text $planPath try { $stateObject = Get-Content -LiteralPath $State -Raw | ConvertFrom-Json -Depth 100 } catch { throw "ownership state is invalid JSON: $($_.Exception.Message)" } diff --git a/scripts/production-gates/assert-windows-path-budget.ps1 b/scripts/production-gates/assert-windows-path-budget.ps1 new file mode 100644 index 00000000..d0800b47 --- /dev/null +++ b/scripts/production-gates/assert-windows-path-budget.ps1 @@ -0,0 +1,180 @@ +[CmdletBinding()] +param( + [string]$Repository = '.', + [string]$Ref = 'HEAD', + [ValidateRange(1, 240)] + [int]$CheckoutPrefixLength = 66, + [ValidateRange(32, 259)] + [int]$MaximumCombinedPathLength = 240, + [string]$Artifact = '.agent/e/rg4/path-budget.json', + [switch]$SelfTest, + [switch]$Help +) + +Set-StrictMode -Version Latest +$ErrorActionPreference = 'Stop' + +function Show-Help { + @' +assert-windows-path-budget.ps1 + +Fails when any path tracked at Ref would exceed the declared ordinary-Windows +checkout budget once placed below a checkout root whose absolute path has the +declared prefix length. The default 240-character ceiling intentionally leaves +headroom below legacy MAX_PATH. This gate never changes global or repository Git +configuration; a separate fresh-checkout proof must still run with +core.longpaths unset/false. + +Usage: + pwsh ./scripts/production-gates/assert-windows-path-budget.ps1 ` + -Repository . -Ref HEAD -CheckoutPrefixLength 66 ` + -MaximumCombinedPathLength 240 -Artifact .agent/e/rg4/path-budget.json + + pwsh ./scripts/production-gates/assert-windows-path-budget.ps1 -SelfTest +'@ | Write-Output +} + +function Write-Utf8NoBom { + param( + [Parameter(Mandatory)][string]$Path, + [Parameter(Mandatory)][AllowEmptyString()][string]$Content + ) + + $parent = Split-Path -Parent $Path + if ($parent) { New-Item -ItemType Directory -Path $parent -Force | Out-Null } + [System.IO.File]::WriteAllText( + [System.IO.Path]::GetFullPath($Path), + $Content, + [System.Text.UTF8Encoding]::new($false) + ) +} + +function Measure-TrackedPathBudget { + param( + [Parameter(Mandatory)][AllowEmptyCollection()][string[]]$Paths, + [Parameter(Mandatory)][int]$PrefixLength, + [Parameter(Mandatory)][int]$MaximumLength + ) + + $entries = [System.Collections.Generic.List[object]]::new() + $errors = [System.Collections.Generic.List[string]]::new() + foreach ($rawPath in $Paths) { + $path = ([string]$rawPath).Replace('\', '/') + if ([string]::IsNullOrWhiteSpace($path)) { + $errors.Add('tracked path list contains an empty path') + continue + } + if ($path.StartsWith('/') -or $path -match '^[A-Za-z]:' -or $path -match '(^|/)\.\.(?:/|$)') { + $errors.Add("tracked path is not repository-relative: '$path'") + continue + } + $combinedLength = $PrefixLength + 1 + $path.Length + $entries.Add([pscustomobject][ordered]@{ + path = $path + relative_length = $path.Length + combined_length = $combinedLength + within_budget = $combinedLength -le $MaximumLength + }) + } + + $ordered = @($entries | Sort-Object @{ Expression = 'combined_length'; Descending = $true }, @{ Expression = 'path'; Descending = $false }) + $violations = @($ordered | Where-Object { -not $_.within_budget }) + foreach ($violation in $violations) { + $errors.Add("tracked path exceeds Windows checkout budget ($($violation.combined_length) > $MaximumLength): '$($violation.path)'") + } + return [pscustomobject][ordered]@{ + verdict = if ($errors.Count -eq 0) { 'PASS' } else { 'FAIL' } + prefix_length = $PrefixLength + maximum_combined_length = $MaximumLength + longest_combined_length = if ($ordered.Count -gt 0) { $ordered[0].combined_length } else { $null } + path_count = $ordered.Count + violation_count = $violations.Count + longest_paths = @($ordered | Select-Object -First 20) + violations = $violations + errors = @($errors) + } +} + +function Assert-SelfTestCondition { + param([bool]$Condition, [string]$Message) + if (-not $Condition) { throw "SELFTEST FAIL: $Message" } +} + +function Invoke-SelfTest { + $boundaryPath = 'a' * 173 + $overPath = 'b' * 174 + $boundary = Measure-TrackedPathBudget -Paths @($boundaryPath) -PrefixLength 66 -MaximumLength 240 + $over = Measure-TrackedPathBudget -Paths @($overPath) -PrefixLength 66 -MaximumLength 240 + Assert-SelfTestCondition ($boundary.verdict -eq 'PASS' -and $boundary.longest_combined_length -eq 240) 'exact path-budget boundary was rejected' + Assert-SelfTestCondition ($over.verdict -eq 'FAIL' -and $over.longest_combined_length -eq 241 -and $over.violation_count -eq 1) 'over-budget path was accepted' + Assert-SelfTestCondition ((Measure-TrackedPathBudget -Paths @('../escape') -PrefixLength 66 -MaximumLength 240).verdict -eq 'FAIL') 'path traversal was accepted' + Write-Output 'SELFTEST PASS: assert-windows-path-budget.ps1' +} + +if ($Help) { Show-Help; exit 0 } +if ($SelfTest) { Invoke-SelfTest; exit 0 } + +$startedAt = [DateTimeOffset]::UtcNow +$artifactObject = $null +$exitCode = 1 +try { + $repoRootOutput = @(& git -C $Repository rev-parse --show-toplevel 2>&1) + if ($LASTEXITCODE -ne 0) { throw "repository is not a Git worktree: $($repoRootOutput -join ' ')" } + $repoRoot = ([string]$repoRootOutput[-1]).Trim() + + $commitOutput = @(& git -C $repoRoot rev-parse --verify "$Ref^{commit}" 2>&1) + if ($LASTEXITCODE -ne 0) { throw "ref '$Ref' is not a commit: $($commitOutput -join ' ')" } + $commit = ([string]$commitOutput[-1]).Trim().ToLowerInvariant() + if ($commit -notmatch '^[0-9a-f]{40}$') { throw "ref '$Ref' resolved to invalid commit '$commit'" } + + $rawPaths = @(& git -c core.quotepath=false -C $repoRoot ls-tree -r --name-only --full-tree $commit -- 2>&1) + if ($LASTEXITCODE -ne 0) { throw "git ls-tree failed: $($rawPaths -join ' ')" } + $paths = @($rawPaths | ForEach-Object { [string]$_ }) + if ($paths.Count -eq 0) { throw "ref '$commit' contains no tracked paths" } + + $measurement = Measure-TrackedPathBudget -Paths $paths -PrefixLength $CheckoutPrefixLength -MaximumLength $MaximumCombinedPathLength + $finishedAt = [DateTimeOffset]::UtcNow + $artifactObject = [ordered]@{ + schema_version = 1 + gate = 'windows-tracked-path-budget' + verdict = $measurement.verdict + started_at = $startedAt.ToString('O') + finished_at = $finishedAt.ToString('O') + duration_seconds = [math]::Round(($finishedAt - $startedAt).TotalSeconds, 3) + repository = $repoRoot + requested_ref = $Ref + commit = $commit + checkout_prefix_length = $CheckoutPrefixLength + maximum_combined_path_length = $MaximumCombinedPathLength + longest_combined_path_length = $measurement.longest_combined_length + path_count = $measurement.path_count + violation_count = $measurement.violation_count + longest_paths = $measurement.longest_paths + violations = $measurement.violations + errors = $measurement.errors + } + $exitCode = if ($measurement.verdict -eq 'PASS') { 0 } else { 1 } +} +catch { + $finishedAt = [DateTimeOffset]::UtcNow + $artifactObject = [ordered]@{ + schema_version = 1 + gate = 'windows-tracked-path-budget' + verdict = 'FAIL' + started_at = $startedAt.ToString('O') + finished_at = $finishedAt.ToString('O') + duration_seconds = [math]::Round(($finishedAt - $startedAt).TotalSeconds, 3) + repository = $Repository + requested_ref = $Ref + path_count = $null + longest_combined_path_length = $null + maximum_combined_path_length = $MaximumCombinedPathLength + violation_count = $null + errors = @($_.Exception.Message) + } + $exitCode = 1 +} + +Write-Utf8NoBom -Path $Artifact -Content (($artifactObject | ConvertTo-Json -Depth 12) + "`n") +Write-Host ("windows-path-budget verdict={0} paths={1} longest={2} ceiling={3} violations={4}" -f $artifactObject.verdict, $artifactObject.path_count, $artifactObject.longest_combined_path_length, $artifactObject.maximum_combined_path_length, $artifactObject.violation_count) +exit $exitCode diff --git a/scripts/production-gates/run-db-suite.ps1 b/scripts/production-gates/run-db-suite.ps1 index d3bd767c..1f0b8baf 100644 --- a/scripts/production-gates/run-db-suite.ps1 +++ b/scripts/production-gates/run-db-suite.ps1 @@ -374,13 +374,41 @@ function Get-NativeCommandPath { throw "required native command was not found: $($Names -join ', ')" } -function Test-ExactDevStandInventory { - param([Parameter(Mandatory)][hashtable]$ActualImages) - $expectedImages = [ordered]@{ +function Get-DevStandImageTargets { + return [ordered]@{ postgres = 'pgvector/pgvector:pg17' server = 'ghcr.io/thebtf/engram:main' 'operator-console' = 'ghcr.io/thebtf/engram-operator-console:main' } +} + +function Get-MapStringValue { + param( + [AllowNull()]$Map, + [Parameter(Mandatory)][string]$Key + ) + + if ($null -eq $Map) { return $null } + if ($Map -is [System.Collections.IDictionary]) { + if (-not $Map.Contains($Key)) { return $null } + return [string]$Map[$Key] + } + $property = $Map.PSObject.Properties[$Key] + if ($null -eq $property) { return $null } + return [string]$property.Value +} + +function Test-StrictBoolean { + param( + [AllowNull()]$Value, + [Parameter(Mandatory)][bool]$Expected + ) + return ($Value -is [bool]) -and ($Value -ceq $Expected) +} + +function Test-ExactDevStandInventory { + param([Parameter(Mandatory)][hashtable]$ActualImages) + $expectedImages = Get-DevStandImageTargets $errors = [System.Collections.Generic.List[string]]::new() foreach ($entry in $expectedImages.GetEnumerator()) { if (-not $ActualImages.ContainsKey($entry.Key)) { $errors.Add("compose service '$($entry.Key)' is missing from the project inventory"); continue } @@ -446,7 +474,16 @@ function Invoke-DevStandContract { $actualImages = @{} $actualImageIds = @{} $tagImageIds = @{} + $prelaunchImageIds = @{} $imageIdentityPass = $true + $prelaunchToRunningImageIdentity = $false + $sourceRepository = $null + $sourceCommit = $null + $sourceTrackedClean = $false + $composeBuildCompleted = $false + $postgresPullCompleted = $false + $launchNoBuild = $false + $upProvenanceSummary = $null $vulnerabilityScans = [System.Collections.Generic.List[object]]::new() $credentialsGenerated = $false $postgresPassword = $null @@ -463,12 +500,48 @@ function Invoke-DevStandContract { $residualResourcesZero = $null $connection = [pscustomobject]@{ Original = ''; Password = ''; Uri = $null; User = ''; Host = ''; Port = 0; Database = ''; SslMode = $null } $dockerPath = Get-NativeCommandPath @('docker.exe', 'docker') + $gitPath = $null $curlPath = $null if ($Action -in @('Up', 'Ready')) { $curlPath = Get-NativeCommandPath @('curl.exe', 'curl') } $standDsn = $null $sensitiveValues = [System.Collections.Generic.List[string]]::new() try { + if ($Action -in @('Up', 'Ready', 'Scan')) { + $gitPath = Get-NativeCommandPath @('git.exe', 'git') + $composeFilePath = [System.IO.Path]::GetFullPath($File) + $composeDirectory = Split-Path -Parent $composeFilePath + $sourceRoot = Invoke-CapturedProcess 'dev-stand-source-root' $gitPath @('-C', $composeDirectory, 'rev-parse', '--show-toplevel') @{} (Join-Path $actionDirectory 'source-root.stdout.log') (Join-Path $actionDirectory 'source-root.stderr.log') $connection @() 30 + if ($sourceRoot.ExitCode -ne 0 -or [string]::IsNullOrWhiteSpace($sourceRoot.Stdout)) { throw 'challenged source repository root could not be resolved' } + $sourceRepository = $sourceRoot.Stdout.Trim() + $sourceHead = Invoke-CapturedProcess 'dev-stand-source-commit' $gitPath @('-C', $sourceRepository, 'rev-parse', '--verify', 'HEAD^{commit}') @{} (Join-Path $actionDirectory 'source-commit.stdout.log') (Join-Path $actionDirectory 'source-commit.stderr.log') $connection @() 30 + if ($sourceHead.ExitCode -ne 0) { throw "challenged source commit could not be resolved (exit=$($sourceHead.ExitCode))" } + $sourceCommit = $sourceHead.Stdout.Trim().ToLowerInvariant() + if ($sourceCommit -notmatch '^[a-f0-9]{40}$') { throw "challenged source commit is malformed: '$sourceCommit'" } + $sourceStatus = Invoke-CapturedProcess 'dev-stand-source-tracked-status' $gitPath @('-C', $sourceRepository, 'status', '--porcelain=v1', '--untracked-files=all') @{} (Join-Path $actionDirectory 'source-tracked-status.stdout.log') (Join-Path $actionDirectory 'source-tracked-status.stderr.log') $connection @() 30 + if ($sourceStatus.ExitCode -ne 0) { throw "challenged source tracked-status check failed (exit=$($sourceStatus.ExitCode))" } + $sourceTrackedClean = [string]::IsNullOrWhiteSpace($sourceStatus.Stdout) + if (-not $sourceTrackedClean) { throw 'challenged source has tracked modifications; image provenance is not commit-exact' } + + if ($Action -in @('Ready', 'Scan')) { + $upSummaryPath = Join-Path (Join-Path (Join-Path $EvidenceRoot 'dev-stand') "$RequestedRunId-up") 'summary.json' + if (-not (Test-Path -LiteralPath $upSummaryPath -PathType Leaf)) { throw "Up provenance summary is missing: $upSummaryPath" } + try { $upProvenanceSummary = Get-Content -LiteralPath $upSummaryPath -Raw | ConvertFrom-Json -Depth 100 } + catch { throw "Up provenance summary is invalid: $($_.Exception.Message)" } + if ([string]$upProvenanceSummary.action -cne 'Up' -or [string]$upProvenanceSummary.verdict -cne 'PASS') { throw 'Ready/Scan requires a passing Up provenance summary' } + if ([string]$upProvenanceSummary.source_commit -cne $sourceCommit -or -not (Test-StrictBoolean $upProvenanceSummary.source_tracked_clean $true)) { throw 'Ready/Scan source identity differs from the passing Up build source' } + $composeBuildCompleted = Test-StrictBoolean $upProvenanceSummary.compose_build_completed $true + $postgresPullCompleted = Test-StrictBoolean $upProvenanceSummary.postgres_pull_completed $true + $launchNoBuild = Test-StrictBoolean $upProvenanceSummary.launch_no_build $true + if (-not $composeBuildCompleted -or -not $postgresPullCompleted -or -not $launchNoBuild -or -not (Test-StrictBoolean $upProvenanceSummary.prelaunch_to_running_image_identity $true)) { throw 'passing Up summary lacks complete prelaunch build/image provenance' } + foreach ($target in (Get-DevStandImageTargets).GetEnumerator()) { + $prelaunchId = Get-MapStringValue -Map $upProvenanceSummary.prelaunch_image_ids -Key $target.Key + if ($prelaunchId -notmatch '^sha256:[a-f0-9]{64}$') { throw "Up prelaunch image ID is missing or malformed for '$($target.Key)'" } + $prelaunchImageIds[$target.Key] = $prelaunchId + } + } + } + if ($Action -eq 'Up') { $postgresPassword = New-CryptographicSecret $adminToken = New-CryptographicSecret @@ -489,8 +562,26 @@ services: ENGRAM_AUTH_BOOTSTRAP_CAPABILITY: "${ENGRAM_AUTH_BOOTSTRAP_CAPABILITY:?required by production dev-stand}" '@ $composeArgs = @('compose', '-p', $Project, '-f', $File, '-f', $composeOverridePath) - $up = Invoke-CapturedProcess 'dev-stand-up' $dockerPath (@($composeArgs) + @('up', '-d', '--build', '--wait')) $standEnvironment (Join-Path $actionDirectory 'compose-up.stdout.log') (Join-Path $actionDirectory 'compose-up.stderr.log') $connection @($sensitiveValues) 600 + $build = Invoke-CapturedProcess 'dev-stand-compose-build' $dockerPath (@($composeArgs) + @('build', '--pull', 'server', 'operator-console')) $standEnvironment (Join-Path $actionDirectory 'compose-build.stdout.log') (Join-Path $actionDirectory 'compose-build.stderr.log') $connection @($sensitiveValues) 900 + if ($build.ExitCode -ne 0) { throw "compose source build failed with exit $($build.ExitCode)" } + $composeBuildCompleted = $true + $pull = Invoke-CapturedProcess 'dev-stand-postgres-pull' $dockerPath (@($composeArgs) + @('pull', 'postgres')) $standEnvironment (Join-Path $actionDirectory 'compose-pull-postgres.stdout.log') (Join-Path $actionDirectory 'compose-pull-postgres.stderr.log') $connection @($sensitiveValues) 600 + if ($pull.ExitCode -ne 0) { throw "compose PostgreSQL pull failed with exit $($pull.ExitCode)" } + $postgresPullCompleted = $true + $postBuildHead = Invoke-CapturedProcess 'dev-stand-source-commit-post-build' $gitPath @('-C', $sourceRepository, 'rev-parse', '--verify', 'HEAD^{commit}') @{} (Join-Path $actionDirectory 'source-commit-post-build.stdout.log') (Join-Path $actionDirectory 'source-commit-post-build.stderr.log') $connection @() 30 + if ($postBuildHead.ExitCode -ne 0 -or $postBuildHead.Stdout.Trim().ToLowerInvariant() -cne $sourceCommit) { throw 'source HEAD changed during compose build/pull' } + $postBuildStatus = Invoke-CapturedProcess 'dev-stand-source-tracked-status-post-build' $gitPath @('-C', $sourceRepository, 'status', '--porcelain=v1', '--untracked-files=all') @{} (Join-Path $actionDirectory 'source-tracked-status-post-build.stdout.log') (Join-Path $actionDirectory 'source-tracked-status-post-build.stderr.log') $connection @() 30 + if ($postBuildStatus.ExitCode -ne 0 -or -not [string]::IsNullOrWhiteSpace($postBuildStatus.Stdout)) { throw 'source tree changed during compose build/pull' } + foreach ($target in (Get-DevStandImageTargets).GetEnumerator()) { + $prelaunchInspect = Invoke-CapturedProcess "dev-stand-prelaunch-image-inspect-$($target.Key)" $dockerPath @('image', 'inspect', $target.Value, '--format', '{{.Id}}') @{} (Join-Path $actionDirectory "prelaunch-image-inspect-$($target.Key).stdout.log") (Join-Path $actionDirectory "prelaunch-image-inspect-$($target.Key).stderr.log") $connection @() 30 + if ($prelaunchInspect.ExitCode -ne 0) { throw "prelaunch image '$($target.Value)' is unavailable for service '$($target.Key)'" } + $prelaunchId = $prelaunchInspect.Stdout.Trim() + if ($prelaunchId -notmatch '^sha256:[a-f0-9]{64}$') { throw "prelaunch image ID is malformed for service '$($target.Key)': '$prelaunchId'" } + $prelaunchImageIds[$target.Key] = $prelaunchId + } + $up = Invoke-CapturedProcess 'dev-stand-up' $dockerPath (@($composeArgs) + @('up', '-d', '--no-build', '--pull', 'never', '--wait')) $standEnvironment (Join-Path $actionDirectory 'compose-up.stdout.log') (Join-Path $actionDirectory 'compose-up.stderr.log') $connection @($sensitiveValues) 600 if ($up.ExitCode -ne 0) { throw "compose up failed with exit $($up.ExitCode)" } + $launchNoBuild = $true $postgresContainer = Invoke-CapturedProcess 'dev-stand-postgres-container-id' $dockerPath (@($composeArgs) + @('ps', '-q', 'postgres')) $standEnvironment (Join-Path $actionDirectory 'postgres-container-id.stdout.log') (Join-Path $actionDirectory 'postgres-container-id.stderr.log') $connection @($sensitiveValues) 30 if ($postgresContainer.ExitCode -ne 0 -or [string]::IsNullOrWhiteSpace($postgresContainer.Stdout)) { throw 'running postgres container ID could not be resolved for credential proof' } @@ -555,12 +646,22 @@ services: } $inventoryAssertion = Test-ExactDevStandInventory $actualImages foreach ($inventoryError in $inventoryAssertion.Errors) { $errors.Add($inventoryError) } + $prelaunchToRunningImageIdentity = $inventoryAssertion.Pass -and $prelaunchImageIds.Count -eq 3 + foreach ($target in (Get-DevStandImageTargets).GetEnumerator()) { + $prelaunchId = Get-MapStringValue -Map $prelaunchImageIds -Key $target.Key + $runningId = Get-MapStringValue -Map $actualImageIds -Key $target.Key + if ($prelaunchId -notmatch '^sha256:[a-f0-9]{64}$' -or $runningId -notmatch '^sha256:[a-f0-9]{64}$' -or -not [string]::Equals($prelaunchId, $runningId, [System.StringComparison]::Ordinal)) { + $prelaunchToRunningImageIdentity = $false + $errors.Add("prelaunch image ID does not equal running image ID for service '$($target.Key)'") + } + } - if ($Action -eq 'Scan' -and $inventoryAssertion.Pass -and $imageIdentityPass) { + if ($Action -eq 'Scan' -and $inventoryAssertion.Pass -and $imageIdentityPass -and $prelaunchToRunningImageIdentity) { foreach ($entry in @($actualImages.GetEnumerator() | Sort-Object Key)) { $sarifPath = [System.IO.Path]::GetFullPath((Join-Path $actionDirectory ("docker-scout-$($entry.Key).sarif.json"))) $imageId = $actualImageIds[$entry.Key] - $scan = Invoke-CapturedProcess "dev-stand-vulnerability-scan-$($entry.Key)" $dockerPath @('scout', 'cves', '--exit-code', '--only-severity', 'critical,high', '--format', 'sarif', '--output', $sarifPath, "local://$($entry.Value)") @{} (Join-Path $actionDirectory "docker-scout-$($entry.Key).stdout.log") (Join-Path $actionDirectory "docker-scout-$($entry.Key).stderr.log") $connection @() 600 + $scanReference = "local://$imageId" + $scan = Invoke-CapturedProcess "dev-stand-vulnerability-scan-$($entry.Key)" $dockerPath @('scout', 'cves', '--exit-code', '--only-severity', 'critical,high', '--format', 'sarif', '--output', $sarifPath, $scanReference) @{} (Join-Path $actionDirectory "docker-scout-$($entry.Key).stdout.log") (Join-Path $actionDirectory "docker-scout-$($entry.Key).stderr.log") $connection @() 600 $vulnerabilityCount = $null $scanParseError = $null if (Test-Path -LiteralPath $sarifPath -PathType Leaf) { @@ -573,7 +674,7 @@ services: else { $scanParseError = "Docker Scout did not produce SARIF for '$($entry.Value)'"; $errors.Add($scanParseError) } $vulnerabilityScans.Add([pscustomobject][ordered]@{ - service = $entry.Key; image = $entry.Value; image_id = $imageId; scanner = 'docker scout cves' + service = $entry.Key; image = $entry.Value; image_id = $imageId; scanned_reference = $scanReference; scanner = 'docker scout cves' severities = @('critical', 'high'); exit_code = $scan.ExitCode vulnerability_count = $vulnerabilityCount; sarif = $sarifPath; parse_error = $scanParseError }) @@ -638,7 +739,15 @@ services: ephemeral_postgres_password_persisted = $credentialValuesPersisted ephemeral_admin_token_persisted = $credentialValuesPersisted ephemeral_bootstrap_capability_persisted = $credentialValuesPersisted - exact_image_targets = [ordered]@{ postgres = 'pgvector/pgvector:pg17'; server = 'ghcr.io/thebtf/engram:main'; 'operator-console' = 'ghcr.io/thebtf/engram-operator-console:main' } + source_repository = $sourceRepository + source_commit = $sourceCommit + source_tracked_clean = $sourceTrackedClean + compose_build_completed = $composeBuildCompleted + postgres_pull_completed = $postgresPullCompleted + launch_no_build = $launchNoBuild + prelaunch_to_running_image_identity = $prelaunchToRunningImageIdentity + exact_image_targets = Get-DevStandImageTargets + prelaunch_image_ids = $prelaunchImageIds actual_images = $actualImages; actual_image_ids = $actualImageIds; tag_image_ids = $tagImageIds liveness_endpoints = @($endpointResults | Where-Object contract_kind -ceq 'liveness') semantic_ready_endpoints = @($endpointResults | Where-Object contract_kind -ceq 'readiness') @@ -669,6 +778,9 @@ function Invoke-SelfTest { Assert-SelfTestCondition ($succeeded.ExitCode -eq 0) 'later success did not execute' Assert-SelfTestCondition $aggregateFailed 'later success masked the earlier failure' Assert-SelfTestCondition ($missingProcess.ExitCode -eq 127 -and $missingProcess.Stderr -match 'PROCESS_START_OR_CAPTURE_ERROR') 'process start failure did not produce captured raw evidence and exit 127' + Assert-SelfTestCondition (Test-StrictBoolean $true $true) 'strict Boolean helper rejected true' + Assert-SelfTestCondition (Test-StrictBoolean $false $false) 'strict Boolean helper rejected false' + foreach ($coercedTrue in @('true', 1, '1')) { Assert-SelfTestCondition (-not (Test-StrictBoolean $coercedTrue $true)) "strict Boolean helper accepted wrong-type true '$coercedTrue'" } $targetDsn = New-DatabaseDsn $connection.Original 'engram_prc_rg_selftest' 'engram-prc-selftest' $redacted = Protect-Text "DATABASE_DSN=$targetDsn" $connection @($targetDsn) Assert-SelfTestCondition (-not $redacted.Contains('s3cr3t') -and -not $redacted.Contains('engram_prc_rg_selftest')) 'generated DATABASE_DSN was not fully redacted' diff --git a/scripts/production-gates/run-dev-stand.ps1 b/scripts/production-gates/run-dev-stand.ps1 index a25567ad..b7d0fee3 100644 --- a/scripts/production-gates/run-dev-stand.ps1 +++ b/scripts/production-gates/run-dev-stand.ps1 @@ -163,11 +163,20 @@ function Test-ExactImageMaps { $imageProperty = $Summary.actual_images.PSObject.Properties[$entry.Key] $runningProperty = $Summary.actual_image_ids.PSObject.Properties[$entry.Key] $tagProperty = $Summary.tag_image_ids.PSObject.Properties[$entry.Key] - if ($null -eq $imageProperty -or [string]$imageProperty.Value -cne $entry.Value -or $null -eq $runningProperty -or $null -eq $tagProperty) { return $false } - $runningId = [string]$runningProperty.Value; $tagId = [string]$tagProperty.Value - if ($runningId -notmatch '^sha256:[a-f0-9]{64}$' -or $runningId -cne $tagId) { return $false } + $prelaunchProperty = $Summary.prelaunch_image_ids.PSObject.Properties[$entry.Key] + if ($null -eq $imageProperty -or [string]$imageProperty.Value -cne $entry.Value -or $null -eq $runningProperty -or $null -eq $tagProperty -or $null -eq $prelaunchProperty) { return $false } + $runningId = [string]$runningProperty.Value; $tagId = [string]$tagProperty.Value; $prelaunchId = [string]$prelaunchProperty.Value + if ($runningId -notmatch '^sha256:[a-f0-9]{64}$' -or $runningId -cne $tagId -or $runningId -cne $prelaunchId) { return $false } } - return @($Summary.actual_images.PSObject.Properties).Count -eq 3 + return @($Summary.actual_images.PSObject.Properties).Count -eq 3 -and @($Summary.prelaunch_image_ids.PSObject.Properties).Count -eq 3 +} + +function Test-StrictBoolean { + param( + [AllowNull()]$Value, + [Parameter(Mandatory)][bool]$Expected + ) + return ($Value -is [bool]) -and ($Value -ceq $Expected) } function Read-ActionSummary { @@ -182,28 +191,49 @@ function Read-ActionSummary { $expectedVerdict = if ($ChildExit -eq 0) { 'PASS' } else { 'FAIL' } if ($summary.verdict -cne $expectedVerdict) { throw "$Action exit/verdict mismatch: exit=$ChildExit verdict=$($summary.verdict)" } if ($Action -in @('Up', 'Ready', 'Scan') -and -not (Test-ExactImageMaps $summary)) { throw "$Action did not prove exact tag-to-running-image identity" } + if ($Action -in @('Up', 'Ready', 'Scan')) { + if ([string]$summary.source_commit -notmatch '^[a-f0-9]{40}$' -or -not (Test-StrictBoolean $summary.source_tracked_clean $true)) { throw "$Action did not prove a clean exact source commit" } + foreach ($field in @('compose_build_completed', 'postgres_pull_completed', 'launch_no_build', 'prelaunch_to_running_image_identity')) { + if (-not (Test-StrictBoolean $summary.$field $true)) { throw "$Action did not preserve strict-Boolean source-build/prelaunch/running image provenance for '$field'" } + } + } if ($Action -eq 'Up') { - if (-not $summary.ephemeral_postgres_password_generated -or -not $summary.ephemeral_admin_token_generated -or -not $summary.ephemeral_bootstrap_capability_generated) { throw 'Up did not prove all three ephemeral credentials were generated' } - if (-not $summary.ephemeral_credentials_distinct_and_nondefault) { throw 'Up did not prove credentials are distinct and reject defaults' } - if (-not $summary.ephemeral_credentials_runtime_injected) { throw 'Up did not prove exact credentials reached the running compose services' } - if ($summary.ephemeral_postgres_password_persisted -or $summary.ephemeral_admin_token_persisted -or $summary.ephemeral_bootstrap_capability_persisted) { throw 'Up persisted an ephemeral credential in evidence' } + foreach ($field in @('ephemeral_postgres_password_generated', 'ephemeral_admin_token_generated', 'ephemeral_bootstrap_capability_generated', 'ephemeral_credentials_distinct_and_nondefault', 'ephemeral_credentials_runtime_injected')) { + if (-not (Test-StrictBoolean $summary.$field $true)) { throw "Up lacks strict true credential proof '$field'" } + } + foreach ($field in @('ephemeral_postgres_password_persisted', 'ephemeral_admin_token_persisted', 'ephemeral_bootstrap_capability_persisted')) { + if (-not (Test-StrictBoolean $summary.$field $false)) { throw "Up credential persistence proof '$field' is not strict false" } + } $commands = Get-Content -LiteralPath $summary.commands -Raw | ConvertFrom-Json -Depth 100 - foreach ($name in @('dev-stand-postgres-container-id', 'dev-stand-postgres-credential-injection', 'dev-stand-server-container-id', 'dev-stand-server-credential-injection', 'dev-stand-postgres-ready', 'dev-stand-health', 'dev-stand-api-ready', 'dev-stand-operator-api-health', 'dev-stand-operator-api-ready')) { if (@($commands | Where-Object name -eq $name).Count -ne 1) { throw "Up did not execute '$name' exactly once" } } + foreach ($name in @('dev-stand-source-root', 'dev-stand-source-commit', 'dev-stand-source-tracked-status', 'dev-stand-compose-build', 'dev-stand-postgres-pull', 'dev-stand-prelaunch-image-inspect-postgres', 'dev-stand-prelaunch-image-inspect-server', 'dev-stand-prelaunch-image-inspect-operator-console', 'dev-stand-up', 'dev-stand-postgres-container-id', 'dev-stand-postgres-credential-injection', 'dev-stand-server-container-id', 'dev-stand-server-credential-injection', 'dev-stand-postgres-ready', 'dev-stand-health', 'dev-stand-api-ready', 'dev-stand-operator-api-health', 'dev-stand-operator-api-ready')) { if (@($commands | Where-Object name -eq $name).Count -ne 1) { throw "Up did not execute '$name' exactly once" } } } elseif ($Action -eq 'Ready') { $commands = Get-Content -LiteralPath $summary.commands -Raw | ConvertFrom-Json -Depth 100 - foreach ($name in @('dev-stand-postgres-ready', 'dev-stand-health', 'dev-stand-api-ready', 'dev-stand-operator-api-health', 'dev-stand-operator-api-ready')) { if (@($commands | Where-Object name -eq $name).Count -ne 1) { throw "Ready did not execute '$name' exactly once" } } + foreach ($name in @('dev-stand-source-root', 'dev-stand-source-commit', 'dev-stand-source-tracked-status', 'dev-stand-postgres-ready', 'dev-stand-health', 'dev-stand-api-ready', 'dev-stand-operator-api-health', 'dev-stand-operator-api-ready')) { if (@($commands | Where-Object name -eq $name).Count -ne 1) { throw "Ready did not execute '$name' exactly once" } } } elseif ($Action -eq 'Scan') { + $commands = Get-Content -LiteralPath $summary.commands -Raw | ConvertFrom-Json -Depth 100 + foreach ($name in @('dev-stand-source-root', 'dev-stand-source-commit', 'dev-stand-source-tracked-status', 'dev-stand-image-inventory', 'dev-stand-vulnerability-scan-postgres', 'dev-stand-vulnerability-scan-server', 'dev-stand-vulnerability-scan-operator-console')) { if (@($commands | Where-Object name -eq $name).Count -ne 1) { throw "Scan did not execute '$name' exactly once" } } $scans = @($summary.vulnerability_scan.scans) if ($scans.Count -ne 3) { throw "Scan must emit three exact image results; found $($scans.Count)" } - foreach ($scan in $scans) { - if ($scan.image -notin @('pgvector/pgvector:pg17', 'ghcr.io/thebtf/engram:main', 'ghcr.io/thebtf/engram-operator-console:main')) { throw "Scan used untracked image '$($scan.image)'" } + $expectedScans = [ordered]@{ postgres = 'pgvector/pgvector:pg17'; server = 'ghcr.io/thebtf/engram:main'; 'operator-console' = 'ghcr.io/thebtf/engram-operator-console:main' } + foreach ($entry in $expectedScans.GetEnumerator()) { + $matches = @($scans | Where-Object { [string]$_.service -ceq $entry.Key }) + if ($matches.Count -ne 1) { throw "Scan must contain exactly one result for service '$($entry.Key)'; found $($matches.Count)" } + $scan = $matches[0] + $actualId = [string]$summary.actual_image_ids.PSObject.Properties[$entry.Key].Value + $prelaunchId = [string]$summary.prelaunch_image_ids.PSObject.Properties[$entry.Key].Value + if ([string]$scan.image -cne $entry.Value) { throw "Scan image mismatch for service '$($entry.Key)'" } + if ([string]$scan.image_id -notmatch '^sha256:[a-f0-9]{64}$' -or [string]$scan.image_id -cne $actualId -or [string]$scan.image_id -cne $prelaunchId) { throw "Scan image ID is not the exact prelaunch/running ID for service '$($entry.Key)'" } + if ([string]$scan.scanned_reference -cne "local://$($scan.image_id)") { throw "Scan did not target the exact running image ID for '$($scan.image)'" } + $command = @($commands | Where-Object { [string]$_.name -ceq "dev-stand-vulnerability-scan-$($entry.Key)" })[0] + $arguments = @($command.arguments | ForEach-Object { [string]$_ }) + if ($arguments.Count -eq 0 -or $arguments[-1] -cne [string]$scan.scanned_reference) { throw "Scan command arguments do not end in the recorded immutable reference for service '$($entry.Key)'" } if (-not (Test-Path -LiteralPath $scan.sarif -PathType Leaf)) { throw "Scan SARIF is missing for '$($scan.image)'" } } } elseif ($Action -eq 'Down') { - if (-not $summary.residual_checks_performed -or $summary.residual_resources_zero -ne $true) { throw 'Down did not prove zero residual containers, volumes, and networks' } + if (-not (Test-StrictBoolean $summary.residual_checks_performed $true) -or -not (Test-StrictBoolean $summary.residual_resources_zero $true)) { throw 'Down did not prove strict-Boolean zero residual containers, volumes, and networks' } } return $summary } @@ -216,6 +246,8 @@ function Invoke-SelfTest { try { if (-not (Test-Path -LiteralPath $Config -PathType Leaf)) { throw "SELFTEST FAIL: config fixture does not exist: $Config" } $base = Get-Content -LiteralPath $Config -Raw + Assert-SelfTestCondition (Test-StrictBoolean $true $true) 'strict Boolean helper rejected true' + foreach ($coercedTrue in @('true', 1, '1')) { Assert-SelfTestCondition (-not (Test-StrictBoolean $coercedTrue $true)) "strict Boolean helper accepted wrong-type true '$coercedTrue'" } Assert-DevStandConfigCredentialPolicy $base $validPath = Join-Path $root 'valid.yaml'; Write-Utf8NoBom $validPath $base $parsed = Read-DevStandConfig $validPath; Assert-SelfTestCondition ($parsed.Commands.Count -eq 4) 'valid lifecycle config was rejected' From 0d5cfa5c67ddbc331d7e812f98679742541b32ca Mon Sep 17 00:00:00 2001 From: Kirill Turanskiy Date: Fri, 10 Jul 2026 14:49:00 +0300 Subject: [PATCH 022/111] fix(reaper): bound shutdown wait by caller context --- internal/worker/service.go | 34 ++++++++++-- .../worker/service_reaper_lifecycle_test.go | 54 +++++++++++++++++++ 2 files changed, 83 insertions(+), 5 deletions(-) diff --git a/internal/worker/service.go b/internal/worker/service.go index 56538441..2dadbd70 100644 --- a/internal/worker/service.go +++ b/internal/worker/service.go @@ -170,6 +170,7 @@ type Service struct { wg sync.WaitGroup initWG sync.WaitGroup shutdownOnce sync.Once + shutdownDone chan struct{} shutdownErr error recentQueriesLen int recentQueriesHead int @@ -2232,17 +2233,40 @@ func (s *Service) processAllSessions() { // 7. WaitGroup drain — wait up to the caller-supplied context deadline // 8. Database — closed last because components above may still read it // -// The caller supplies the deadline via ctx. If the deadline fires before the -// WaitGroup drains, teardown continues and a warning is logged. The first -// component error (if any) is returned; subsequent errors are only logged. +// The caller supplies the deadline via ctx. Shutdown returns ctx.Err when that +// deadline fires, while the single shutdown coordinator retains ownership and +// continues the ordered teardown once initialization releases. This prevents a +// late initializer from publishing workers after teardown without allowing the +// initialization join to hold callers past their deadline. The first component +// error (if any) is returned to callers that wait for coordinator completion; +// subsequent errors are only logged. func (s *Service) Shutdown(ctx context.Context) error { if ctx == nil { ctx = context.Background() } s.shutdownOnce.Do(func() { - s.shutdownErr = s.shutdown(ctx) + s.shutdownDone = make(chan struct{}) + go func() { + s.shutdownErr = s.shutdown(ctx) + close(s.shutdownDone) + }() }) - return s.shutdownErr + + // The shutdown coordinator keeps ownership of initialization and teardown + // even when this caller's deadline expires. This preserves the critical + // init-before-reaper-before-database ordering without making a blocked + // initializer capable of holding every Shutdown caller past ctx.Done(). + select { + case <-s.shutdownDone: + return s.shutdownErr + default: + } + select { + case <-s.shutdownDone: + return s.shutdownErr + case <-ctx.Done(): + return ctx.Err() + } } func (s *Service) shutdown(ctx context.Context) error { diff --git a/internal/worker/service_reaper_lifecycle_test.go b/internal/worker/service_reaper_lifecycle_test.go index 3626f9a9..e584d262 100644 --- a/internal/worker/service_reaper_lifecycle_test.go +++ b/internal/worker/service_reaper_lifecycle_test.go @@ -2,6 +2,7 @@ package worker import ( "context" + "errors" "fmt" "os" "sync" @@ -126,6 +127,59 @@ func TestServiceShutdown_WaitsForPartialInitializationBeforeReaperStop(t *testin } } +func TestServiceShutdown_PartialInitializationHonorsCallerDeadline(t *testing.T) { + stopStarted := make(chan struct{}) + reaper := &blockingProjectReaper{stopStarted: stopStarted} + svc := &Service{ + cancel: func() {}, + projectReaper: reaper, + } + svc.initWG.Add(1) + var releaseOnce sync.Once + releaseInit := func() { releaseOnce.Do(svc.initWG.Done) } + defer releaseInit() + + ctx, cancel := context.WithTimeout(context.Background(), 25*time.Millisecond) + defer cancel() + + started := time.Now() + result := make(chan error, 1) + go func() { result <- svc.Shutdown(ctx) }() + + select { + case err := <-result: + if !errors.Is(err, context.DeadlineExceeded) { + t.Fatalf("Shutdown error = %v, want context deadline exceeded", err) + } + if elapsed := time.Since(started); elapsed > 250*time.Millisecond { + t.Fatalf("Shutdown returned after %v, want <= 250ms", elapsed) + } + case <-time.After(250 * time.Millisecond): + releaseInit() + err := <-result + t.Fatalf("Shutdown ignored caller deadline while joining initialization; eventual error = %v", err) + } + + select { + case <-stopStarted: + t.Fatal("reaper Stop ran before partial initialization joined") + default: + } + + releaseInit() + select { + case <-stopStarted: + case <-time.After(2 * time.Second): + t.Fatal("shutdown coordinator did not resume after initialization joined") + } + if err := svc.Shutdown(context.Background()); err != nil { + t.Fatalf("Shutdown after coordinator completion: %v", err) + } + if got := reaper.stopCalls.Load(); got != 1 { + t.Fatalf("reaper Stop calls = %d, want 1", got) + } +} + func TestServiceShutdown_WaitsForReaperBeforeClosingDatabase(t *testing.T) { dsn := os.Getenv("DATABASE_DSN") if dsn == "" { From 4812589b9920c187a92a03d210d2e9d5eb53862f Mon Sep 17 00:00:00 2001 From: Kirill Turanskiy Date: Fri, 10 Jul 2026 15:27:51 +0300 Subject: [PATCH 023/111] evidence: record release-gate revision 4 handoff --- .agent/e/rg4/fail.json | 98 +++++++++++ .agent/e/rg4/proof.json | 153 ++++++++++++++++++ ...lease-gates-foundation-revision-4-maker.md | 130 +++++++++++++++ 3 files changed, 381 insertions(+) create mode 100644 .agent/e/rg4/fail.json create mode 100644 .agent/e/rg4/proof.json create mode 100644 .agent/reports/2026-07-10-release-gates-foundation-revision-4-maker.md diff --git a/.agent/e/rg4/fail.json b/.agent/e/rg4/fail.json new file mode 100644 index 00000000..f5a64316 --- /dev/null +++ b/.agent/e/rg4/fail.json @@ -0,0 +1,98 @@ +{ + "schema_version": 1, + "gate": "full-project-fresh-db-race-repeat-3", + "verdict": "FAIL", + "repeat_test_failures": [27, 28, 27], + "stable_failed_tests": { + "internal/bulkops": [ + "TestEC_F3_ConflictDetected_Integration", + "TestFacade_BulkDelete_Committed_AuditLogWritten", + "TestFacade_BulkSupersede_Committed_AuditLogWritten", + "TestRollback_HappyPath" + ], + "internal/db/gorm": [ + "TestMigration144_RuleGovernanceEscapeConstraints", + "TestMigration144_RuleGovernanceRollbackAndReapply", + "TestMigration144_RuleGovernanceSnapshotStatusesAcceptExtendedStates", + "TestRuleGovernanceStore_AnnotatedCandidateWaitsUntilReviewAfter", + "TestRuleGovernanceStore_GetLifecycleHealthAggregatesGovernanceTables", + "TestRuleGovernanceStore_GetLifecycleHealthOmitsGlobalArbiterRunsForProjectScopedReads" + ], + "internal/embedding": [ + "TestStatsWithCoverage_NoActiveMemories", + "TestStoreStats_Empty" + ], + "internal/graph": [ + "TestDangling_T016_DanglingEdgeReturnsFlag", + "TestPathC_T015_NodeCreatedAtTimestamp", + "TestPathC_T015_NodeTypedEdgeListFilter", + "TestPathC_T015_SkillNodeEdgeRoundtrip" + ], + "internal/mcp": [ + "TestEC_F1_TagDerivedBackfill_T007", + "TestHybridTG3_ConfidenceMin_FloorEnforced_T022" + ], + "internal/worker": [ + "TestAuthHandlersLifecycle_DisabledAdminCanBeDemotedWithoutLastAdminError", + "TestAuthHandlersLifecycle_LastAdminDemoteRaceLeavesOneAdmin", + "TestCrystallizationIntegration_ConcurrentReplaySkipsDuplicateFingerprint", + "TestCrystallizationIntegration_DecisionsStoredWithCorrectFields", + "TestCrystallizationIntegration_PrivacyRedaction", + "TestHandleCreateBehavioralRule_Success", + "TestHandleListBehavioralRules_ProjectScope", + "TestHandleSetBehavioralRuleEnabled_Success" + ], + "internal/worker/reaper": [ + "TestReaper_RespectsRetentionEnvVar: panic because t.Setenv is used under t.Parallel" + ] + }, + "repeat_2_only_failure": "internal/bulkops::TestRollback_Conflict_EC_F3", + "unexpected_skips_each_repeat": 25, + "unexpected_skip_inventory": [ + "internal/db/gorm::TestMigrationsIntegration_AddsCommandsRunColumn", + "internal/grpcserver::TestCredentialDecryptRoundTripAfterMigration", + "internal/grpcserver::TestEC_F1_P1_GRPCSessionStart_FlagOff_ByteIdentity", + "internal/grpcserver::TestEC_F1_P1_GRPCSessionStart_FlagOn_NoCallerIdentity_PrivateInvisible", + "internal/grpcserver::TestEC_F1_P1_GRPCSessionStart_FlagOn_PrivateCrossWorkstationInvisible", + "internal/grpcserver::TestGetSessionStartContext_DefaultLimits", + "internal/grpcserver::TestGetSessionStartContext_HappyPath", + "internal/grpcserver::TestGetSessionStartContext_MetaSummaryCountsBeyondResponseCap", + "internal/grpcserver::TestGetSessionStartContext_MetaSummaryFlagOffOmitted", + "internal/grpcserver::TestGetSessionStartContext_MetaSummaryFlagOnDescribesMemoryLandscape", + "internal/grpcserver::TestGetSessionStartContext_MetaSummaryFlagOnEmptyProjectIsBoundedAndContentFree", + "internal/grpcserver::TestGetSessionStartContext_PrincipalPrivateCrossPrincipalInvisible_FlagOff", + "internal/grpcserver::TestGetSessionStartContext_RuleRouterEnabledPacketShape", + "internal/grpcserver::TestGetSessionStartContext_T014_MetaSummaryRequiresMasterAndS2Flags", + "internal/handlers/loom::TestCliWorker_ContextCancellation", + "internal/handlers/loom::TestCliWorker_EmptyStdoutTriggersRetry", + "internal/handlers/loom::TestCliWorker_EnvMerge", + "internal/handlers/loom::TestCliWorker_HappyPath", + "internal/handlers/loom::TestCliWorker_InvalidEnvKey", + "internal/handlers/loom::TestCliWorker_StderrCapture", + "internal/handlers/loom::TestCliWorker_Timeout", + "internal/redaction::TestEC_F5_FullRedactionRejected", + "internal/redaction::TestEC_F9_HotReloadNotSupported", + "internal/retrieval::TestIntegration_HybridWithVector", + "internal/worker::TestStaticEmbedIncludesUnderscoreNuxtChunks" + ], + "coverage": { + "overall_percent": [53.0, 52.99, 52.99], + "overall_floor": 60.0, + "failed_package_floors": { + "internal/handlers/loom": "64.77 < 70", + "cmd/engram": "6.39 < 10", + "cmd/engram-server": "0 < 10", + "internal/update": "0 < 20", + "internal/worker": "46.77 < 55", + "internal/mcp": "46.23 < 55", + "internal/db/gorm": "49.10 < 55" + } + }, + "cleanup": { + "repeat_cleanup_exit_codes": [0, 0, 0], + "direct_sql_residual_databases": 0, + "direct_sql_residual_sessions": 0, + "shared_postgres_container_left_running": true + }, + "routing": "Existing master-plan lanes own these product/test/coverage blockers. RELEASE-GATES does not allowlist, suppress, or patch them." +} diff --git a/.agent/e/rg4/proof.json b/.agent/e/rg4/proof.json new file mode 100644 index 00000000..811e05f0 --- /dev/null +++ b/.agent/e/rg4/proof.json @@ -0,0 +1,153 @@ +{ + "schema_version": 1, + "scope": "RELEASE-GATES revision 4 maker evidence", + "authority": { + "rejected_base": "586b39df3465fb51779cf9225deaedbc212e4f9f", + "plan_commit": "f987ce16ee1a0777793bc95113edd2885b19e202", + "implementation_commit": "46ccf27968055a670f2b89907cc6da4478ac04fd", + "canonical_plan_sha256": "d7bcfd122e456d9b764595524292d53b0c99447b7f716a1be0707341e4681bf9", + "ownership_state_plan_sha256": "d7bcfd122e456d9b764595524292d53b0c99447b7f716a1be0707341e4681bf9", + "revision_3_checker_sha256": "E2B399BAA66C463D3301DBC9F7775ABF357D2411C74EBDBFDB11CD1A020619E0", + "openclaw_ingest_source_lock_sha256": "A095E9D7B69DC95CAC4022EB97D2EA9B403D5132F5602FDD85E7D3A93092F5D4" + }, + "tdd": { + "ownership_red": "single-owner tracked epoch rejected; raw LF and CRLF SHA256 values differed", + "ownership_green": "canonical UTF-8/LF hash, semantic-mutation inequality, singleton plan/state epoch accepted", + "path_budget_red": { + "commit": "f987ce16ee1a0777793bc95113edd2885b19e202", + "longest_combined_length": 262, + "ceiling": 240, + "violations": 73 + }, + "path_budget_green": { + "commit": "46ccf27968055a670f2b89907cc6da4478ac04fd", + "tracked_paths": 1402, + "longest_combined_length": 166, + "ceiling": 240, + "violations": 0 + }, + "conformance_red": "missing dev-stand-source-commit/source-build provenance contract", + "conformance_green": "LF/CRLF equality plus 30 adversarial mutations rejected, including removed/late build and removed --no-build" + }, + "foundation_gates": { + "selftests": { + "verdict": "PASS", + "count": 9, + "names": [ + "assert-coverage", + "assert-go-test-json", + "assert-plan-path-ownership", + "assert-windows-path-budget", + "cleanup-db-sessions", + "run-critical-suite", + "run-db-suite", + "run-dev-stand", + "run-node-matrix" + ] + }, + "powershell_parse": "PASS", + "actionlint": "PASS", + "workflow_conformance": { + "verdict": "PASS", + "mutations_rejected": 30 + }, + "ownership": { + "ledger": "PASS", + "maker_slices": 48, + "declarations": 325, + "declared_epochs": 34, + "plan_governance_diff": { + "verdict": "PASS", + "changed_paths": 2, + "violations": 0 + }, + "release_gates_diff": { + "verdict": "PASS", + "changed_paths": 135, + "violations": 0 + } + }, + "critical_suite": { + "verdict": "PASS", + "tests": 7, + "passed": 7, + "failed": 0, + "unexpected_skips": 0, + "raw_summary_sha256": "0D866822CD951FBD25CF4078BA8EA1C11BD4BDFE2B9C78B66B8E8C72371C5C7F" + } + }, + "runtime": { + "dev_stand": { + "overall_verdict": "EXPECTED_NEGATIVE", + "up": "PASS", + "ready": "PASS", + "scan": "FAIL_FINDINGS", + "down": "PASS", + "cleanup": "PASS", + "residual_resources_zero": true, + "source_commit": "46ccf27968055a670f2b89907cc6da4478ac04fd", + "source_tracked_clean": true, + "compose_build_completed": true, + "postgres_pull_completed": true, + "launch_no_build": true, + "prelaunch_running_scan_identity": true, + "raw_summary_sha256": "EE8EF87AD2207B73EA9CDD50811484183DE3E5C96E7728CE24F18CD9A0524D1C", + "scan_results": [ + { + "service": "operator-console", + "image_id": "sha256:96e2cd855b10543df86e6c9c040186d0cc3631f1bc9015f1de2936e17af45c82", + "high_critical_findings": 5, + "sarif_sha256": "06309B2CE48D82004B46A5E8535AB7A657ECC0D7D367170708E4C204C311A69B" + }, + { + "service": "postgres", + "image_id": "sha256:d2ef61f42ef767baa5a1475393303cc235bcd92febd9d7014eddb48b41f3bad0", + "high_critical_findings": 20, + "sarif_sha256": "5ED64C4E1917921AF7D4FD53D404A8580F869DB29D5411E686553A9347F2F0F4" + }, + { + "service": "server", + "image_id": "sha256:cc352864b145278ce98e1d601775e8be0b2d05fae7385704cc7d6d3aeb93418c", + "high_critical_findings": 13, + "sarif_sha256": "91D0F44AAA530066E04E859720462E1E8FA8B20DE9BC7890B5321E95FBA60FD3" + } + ] + }, + "openclaw_matrix": { + "verdict": "EXPECTED_NEGATIVE", + "executed_steps": 0, + "reason": "required plugin/openclaw-engram/package-lock.json is absent", + "pre_surface_clean": true, + "post_surface_clean": true, + "cleanup": true, + "raw_summary_sha256": "DAD1420859061D457F9CA9255DAEC177949EDC9EE7D143EDED9D7049FAEDBB04" + } + }, + "project_wide_gate": { + "verdict": "BLOCKED", + "command_scope": "./... with race, fresh database, repeat 3, JSON assertion, skip enforcement, coverage floors", + "repeat_failures": [27, 28, 27], + "unexpected_skips_each_repeat": 25, + "coverage_percent": [53.0, 52.99, 52.99], + "cleanup_exit_zero_each_repeat": true, + "direct_sql_residual_databases": 0, + "direct_sql_residual_sessions": 0, + "shared_postgres_left_running": true, + "raw_summary_sha256": "7F0D634D6C0D4FC46D4F2B929D5AEF3564502A2D3DE5EDE19FC4B35B976A607F", + "inventory": ".agent/e/rg4/fail.json" + }, + "environment": { + "os": "windows/amd64", + "go": "1.25.11", + "powershell": "7.6.1", + "git": "2.51.1.windows.1", + "core_autocrlf": true, + "core_longpaths": "unset", + "docker_client": "29.1.3", + "docker_server": "29.1.3", + "docker_compose": "2.40.3-desktop.1", + "actionlint": "1.7.12" + }, + "maker_handoff": "READY_FOR_INDEPENDENT_CHECK", + "project_release_readiness": "BLOCKED" +} diff --git a/.agent/reports/2026-07-10-release-gates-foundation-revision-4-maker.md b/.agent/reports/2026-07-10-release-gates-foundation-revision-4-maker.md new file mode 100644 index 00000000..32134780 --- /dev/null +++ b/.agent/reports/2026-07-10-release-gates-foundation-revision-4-maker.md @@ -0,0 +1,130 @@ +# RELEASE-GATES Foundation Revision 4 — Maker Handoff + +Status: `REVIEW_REQUIRED` +Foundation/conformance verdict: `READY_FOR_INDEPENDENT_CHECK` +Project-wide release verdict: `BLOCKED` +Rejected predecessor/base: `586b39df3465fb51779cf9225deaedbc212e4f9f` +Plan authority commit: `f987ce16ee1a0777793bc95113edd2885b19e202` +Implementation commit: `46ccf27968055a670f2b89907cc6da4478ac04fd` +Canonical UTF-8/LF plan SHA256: `d7bcfd122e456d9b764595524292d53b0c99447b7f716a1be0707341e4681bf9` + +## Outcome + +Revision 4 closes the five independent-check rejection classes in the release-gate foundation: + +1. Plan authority is now hashed after UTF-8/no-BOM and LF canonicalization. LF and CRLF checkout forms produce the same authority hash; a semantic mutation does not. +2. Workflow conformance now rejects removal or reordering of the explicit source build and rejects removal of `--no-build` from launch. The runtime chain is clean source commit -> server/operator build plus PostgreSQL pull -> post-build source recheck -> prelaunch image IDs -> `up --no-build --pull never` -> running IDs -> immutable-ID Scout inputs. +3. The master plan contains an exact, fail-closed `CRYSTALLIZATION-DREAM-CYCLE-CORRECTNESS` lane on `internal/worker/dream_cycle.go` and `internal/worker/dream_cycle_test.go`; store expansion requires a prior root amendment. The lane forbids resurrection of the v5-demolished direct-memory path. +4. The OpenClaw/ingest source lock is the actual root-owned artifact hash `A095E9D7B69DC95CAC4022EB97D2EA9B403D5132F5602FDD85E7D3A93092F5D4`. +5. The overlong revision-3 raw evidence tree and stale maker report were removed. A deterministic 66-character-prefix path-budget gate is tracked and the compact revision-4 evidence is under `.agent/e/rg4/`. + +This is not a project-wide PASS. The foundation fails closed and exposes the remaining product, test, image, OpenClaw, skip, and coverage blockers instead of suppressing them. + +## TDD and adversarial proof + +- RED: the old ownership runner rejected the single-owner dream epoch; raw LF and CRLF hashes differed. +- GREEN: ownership selftest proves LF == CRLF, semantic mutation != authority hash, and singleton plan/state epochs are valid. +- RED: before compaction, a 66-character checkout prefix produced length 262 with 73 tracked-path violations against the 240 ceiling. +- GREEN: implementation head has 1,402 tracked paths, longest combined length 166, zero violations. +- RED: conformance accepted the old stand without a source/build provenance contract. +- GREEN: conformance rejects 30 mutations, including removed build, build moved after launch, removed `--no-build`, wrapper removals, narrowed packages, changed race/count/coverage semantics, CRLF drift, and authority/state corruption. +- A bounded maker/checker review found wrong-type Boolean coercion, weak Scan linkage, order-only false greens, and untracked source contamination. The fixes use strict Boolean types, exact per-service scan/map/command binding, ordered conformance, `--untracked-files=all`, and a post-build HEAD/status recheck. Re-review found no blocker in that bounded scope. + +## Foundation evidence + +- Nine gate selftests: PASS. +- PowerShell parser: PASS for all changed scripts. +- `actionlint .github/workflows/test.yml`: PASS. +- Workflow conformance: PASS; 30 mutations rejected. +- Ownership Ledger: PASS; 48 slices, 325 declarations, 34 epochs. +- PLAN-GOVERNANCE Diff `586b39df..f987ce16`: PASS; 2 changed paths, zero violations. +- RELEASE-GATES Diff `f987ce16..46ccf279`: PASS; 135 changed paths, zero violations. +- Critical suite: PASS; 7/7 tests, zero failures/skips/malformed JSON. +- Dev stand on clean `46ccf279`: Up PASS, Ready PASS, Down PASS, zero residual resources. Build/pull/no-build and prelaunch/running identity all passed. +- Scout expected-negative used exact immutable image IDs: operator-console 5 findings, PostgreSQL 20, server 13. These are release blockers owned by image remediation, not foundation false greens. +- OpenClaw matrix expected-negative stopped before npm because the required tracked `package-lock.json` is absent; pre/post surface clean and cleanup passed. + +Compact machine evidence: `.agent/e/rg4/proof.json`. + +## Truthful project-wide RED + +The canonical full gate was executed without scope reduction: + +```powershell +pwsh ./scripts/production-gates/run-db-suite.ps1 ` + -FreshDatabase -Package ./... -Race -FailOnUnexpectedSkip ` + -Repeat 3 -PostgresContainer ` + -PostgresImage pgvector/pgvector:pg17 +``` + +It returned FAIL in all three repetitions: + +- test failures: 27 / 28 / 27; +- unexpected skips: 25 in every repetition; +- overall coverage: 53.00 / 52.99 / 52.99, below 60; +- seven package coverage floors remain below contract; +- cleanup exit: 0 / 0 / 0; +- direct SQL after the run: zero `engram_prc_rg_%` databases and zero matching sessions; +- the operator-owned PostgreSQL container remained running. + +The exact test, skip, and coverage inventory is `.agent/e/rg4/fail.json`. No allowlist, skip suppression, threshold reduction, or out-of-scope product patch was introduced. + +## Changed foundation surfaces + +- `.agent/plans/2026-07-10-engram-production-ready-master-plan.md` +- `.agent/plans/2026-07-10-engram-production-ready-ownership-state.json` +- `.github/workflows/test.yml` +- `scripts/production-gates/assert-plan-path-ownership.ps1` +- `scripts/production-gates/assert-windows-path-budget.ps1` +- `scripts/production-gates/run-db-suite.ps1` +- `scripts/production-gates/run-dev-stand.ps1` +- compact revision-4 report/evidence paths declared by the plan +- deletion of the declared legacy revision-3 maker report/evidence prefix + +## Independent checker commands + +Use the final candidate SHA from `git rev-parse HEAD`; the report cannot embed the hash of the commit that contains itself. The maker must provide that exact SHA out of band after this report commit and prove it from a clean worktree. + +```powershell +$Plan = '.agent/plans/2026-07-10-engram-production-ready-master-plan.md' +$State = '.agent/plans/2026-07-10-engram-production-ready-ownership-state.json' +$PlanSha = pwsh ./scripts/production-gates/assert-plan-path-ownership.ps1 -Plan $Plan -PrintCanonicalPlanSha256 +$Head = git rev-parse HEAD + +pwsh ./scripts/production-gates/assert-plan-path-ownership.ps1 -SelfTest +pwsh ./scripts/production-gates/assert-windows-path-budget.ps1 -SelfTest +pwsh ./scripts/production-gates/run-db-suite.ps1 -SelfTest +pwsh ./scripts/production-gates/run-dev-stand.ps1 -Config .agent/dev-stand.config.yaml -SelfTest +actionlint .github/workflows/test.yml + +pwsh ./scripts/production-gates/assert-plan-path-ownership.ps1 ` + -Mode Ledger -Plan $Plan -ExpectedPlanSha256 $PlanSha -State $State ` + -Artifact .agent/e/rg4-check/ledger.json + +pwsh ./scripts/production-gates/assert-plan-path-ownership.ps1 ` + -Mode Diff -Slice PLAN-GOVERNANCE ` + -Base 586b39df3465fb51779cf9225deaedbc212e4f9f ` + -Head f987ce16ee1a0777793bc95113edd2885b19e202 ` + -EvidenceNamespace '.agent/reports/evidence/production-ready/plan-governance/**' ` + -ReportNamespace '.agent/reports/production-ready/plan-governance/**' ` + -Plan $Plan -ExpectedPlanSha256 $PlanSha -State $State ` + -Artifact .agent/e/rg4-check/diff-plan.json + +pwsh ./scripts/production-gates/assert-plan-path-ownership.ps1 ` + -Mode Diff -Slice RELEASE-GATES ` + -Base f987ce16ee1a0777793bc95113edd2885b19e202 -Head $Head ` + -EvidenceNamespace '.agent/e/rg4/**' ` + -ReportNamespace .agent/reports/2026-07-10-release-gates-foundation-revision-4-maker.md ` + -Plan $Plan -ExpectedPlanSha256 $PlanSha -State $State ` + -Artifact .agent/e/rg4-check/diff-gate.json + +pwsh ./scripts/production-gates/assert-windows-path-budget.ps1 ` + -Repository . -Ref $Head -CheckoutPrefixLength 66 ` + -MaximumCombinedPathLength 240 -Artifact .agent/e/rg4-check/path.json +``` + +The checker must also extract and run the workflow conformance block, challenge strict Boolean types, duplicate/mismatched Scan services and IDs, late/dead build tokens, `--no-build` removal, CRLF checkout mutation, and an actual fresh 66-character-prefix checkout with `core.longpaths` unset/false. + +## Handoff + +Maker position: `READY_FOR_INDEPENDENT_CHECK` for the revision-4 foundation only. Independent checker and post-review remain mandatory. Project-wide production readiness remains `BLOCKED` by `.agent/e/rg4/fail.json`, exact image findings, and the missing OpenClaw lock/release lane. From 462c97dd889b4afbc84d1ddc07613d748604afee Mon Sep 17 00:00:00 2001 From: Kirill Turanskiy Date: Fri, 10 Jul 2026 16:05:33 +0300 Subject: [PATCH 024/111] docs(evidence): define embedding manifest bytes --- .../content-manifest.v1.json | 60 ++++ .../verify-manifest.cjs | 287 ++++++++++++++++++ .../db-embedding-stats/SHA256SUMS.txt | 7 + 3 files changed, 354 insertions(+) create mode 100644 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/content-manifest.v1.json create mode 100644 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.cjs diff --git a/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/content-manifest.v1.json b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/content-manifest.v1.json new file mode 100644 index 00000000..3742010a --- /dev/null +++ b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/content-manifest.v1.json @@ -0,0 +1,60 @@ +{ + "schema_version": 1, + "slice": "DB-EMBEDDING-EVIDENCE-TRANSPORT", + "algorithm": "sha256", + "representation": { + "kind": "git-blob-content", + "source_commit": "38d6a4fb7ff5f5ae3b6c0066c0a1b806421137df", + "checkout_equivalence": { + "transform": "replace each CRLF byte pair with LF", + "bare_cr": "reject", + "required_result": "byte-identical to the source commit Git blob" + } + }, + "legacy_manifest": ".agent/reports/evidence/production-ready/db-embedding-stats/SHA256SUMS.txt", + "verifier": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.cjs", + "entries": [ + { + "path": "internal/embedding/store.go", + "git_blob_oid": "1abaee96b07583f9fd824ed03c40b043c490b567", + "byte_length": 10934, + "sha256": "7bfb06dfc0dda792147d5e2df9d2fe68b59edaac55d2396dece1b8a8a09eee5f" + }, + { + "path": "internal/embedding/store_stats_test.go", + "git_blob_oid": "d381643deadbb42e8a9a07fc9375a6cdfedbdccc", + "byte_length": 9189, + "sha256": "a35a234eb167c58bf201afc50954e43926a69ba2294536f2d0fabf4e015b12a4" + }, + { + "path": ".agent/specs/db-embedding-stats/evidence/DB-EMBEDDING-STATS.red.json", + "git_blob_oid": "48db3052d1ff53fa7cd5f61d0371dd1be0e780bd", + "byte_length": 577, + "sha256": "12adb14f118dbf821ee1eabb569f6bbcae831875d3b8a7fb5928c18a4b323a56" + }, + { + "path": ".agent/specs/db-embedding-stats/evidence/DB-EMBEDDING-STATS.tdd.json", + "git_blob_oid": "4d94a57de67a41b718073e403cd894843dcffa0d", + "byte_length": 1429, + "sha256": "56022d4fb07816ca0ed3f841770605dc212a4cb39fcb9682c75a753f73c7776b" + }, + { + "path": ".agent/specs/db-embedding-stats/evidence/coverage.out", + "git_blob_oid": "457c38e08408c534032a7a962969c762fa1fad8c", + "byte_length": 17413, + "sha256": "edd5fb10fe7a7d7aaddd2bfd96ea220fe42f94561d386712951eb70eabffb735" + }, + { + "path": ".agent/reports/2026-07-10-db-embedding-stats-maker.md", + "git_blob_oid": "8a3d45057e7c869e3eec8925a25a341158209f01", + "byte_length": 3054, + "sha256": "efad310616efa0878628e6af946f06349b16f0c7817432cbb3614ff5c74de025" + }, + { + "path": ".agent/reports/evidence/production-ready/db-embedding-stats/DB-EMBEDDING-STATS.final.json", + "git_blob_oid": "1fa3cb6c4dc1fba849f50f33a42a3f2d1f2b23fd", + "byte_length": 1592, + "sha256": "a82aa7d911935e1327893faa266d49df97018a182fbe8498dc3e4976c59d9ada" + } + ] +} diff --git a/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.cjs b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.cjs new file mode 100644 index 00000000..e6447463 --- /dev/null +++ b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.cjs @@ -0,0 +1,287 @@ +#!/usr/bin/env node +'use strict'; + +const crypto = require('node:crypto'); +const fs = require('node:fs'); +const path = require('node:path'); +const { spawnSync } = require('node:child_process'); + +const allowedModes = new Set(['git-object', 'checkout-lf', 'legacy-raw-audit']); +const modeArgument = process.argv.find((argument) => argument.startsWith('--mode=')); +const mode = modeArgument ? modeArgument.slice('--mode='.length) : 'git-object'; + +if (!allowedModes.has(mode)) { + process.stderr.write(`unsupported mode: ${mode}\n`); + process.exit(2); +} + +function runGit(args, options = {}) { + const result = spawnSync('git', args, { + cwd: options.cwd, + encoding: options.encoding === undefined ? null : options.encoding, + maxBuffer: 64 * 1024 * 1024, + windowsHide: true, + }); + + if (result.error) { + throw result.error; + } + if (result.status !== 0) { + const stderr = Buffer.isBuffer(result.stderr) + ? result.stderr.toString('utf8').trim() + : String(result.stderr || '').trim(); + throw new Error(`git ${args.join(' ')} failed (${result.status}): ${stderr}`); + } + return result.stdout; +} + +function sha256(bytes) { + return crypto.createHash('sha256').update(bytes).digest('hex'); +} + +function canonicalizeCheckout(bytes) { + const output = []; + let crlfPairs = 0; + let bareCarriageReturns = 0; + let lineFeeds = 0; + + for (let index = 0; index < bytes.length; index += 1) { + const value = bytes[index]; + if (value === 13) { + if (bytes[index + 1] === 10) { + output.push(10); + crlfPairs += 1; + lineFeeds += 1; + index += 1; + } else { + output.push(value); + bareCarriageReturns += 1; + } + } else { + output.push(value); + if (value === 10) { + lineFeeds += 1; + } + } + } + + return { + bytes: Buffer.from(output), + crlf_pairs: crlfPairs, + bare_carriage_returns: bareCarriageReturns, + line_feeds: lineFeeds, + }; +} + +function eolStyle(canonical) { + if (canonical.bare_carriage_returns > 0) return 'bare-cr-present'; + if (canonical.crlf_pairs > 0) return 'crlf'; + if (canonical.line_feeds > 0) return 'lf'; + return 'no-line-ending'; +} + +function parseAnnotatedManifest(manifestPath) { + const metadata = {}; + const entries = []; + const lines = fs.readFileSync(manifestPath, 'utf8').split(/\r?\n/); + + for (const line of lines) { + if (!line) continue; + const metadataMatch = line.match(/^# ([a-z0-9-]+)=(.+)$/); + if (metadataMatch) { + metadata[metadataMatch[1]] = metadataMatch[2]; + continue; + } + if (line.startsWith('#')) continue; + + const entryMatch = line.match(/^([0-9a-f]{64}) (.+)$/); + if (!entryMatch) { + throw new Error(`invalid manifest line: ${line}`); + } + entries.push({ sha256: entryMatch[1], path: entryMatch[2] }); + } + + return { metadata, entries }; +} + +function compareEntryShape(contractEntries, manifestEntries) { + if (contractEntries.length !== manifestEntries.length) return false; + return contractEntries.every((entry, index) => + entry.path === manifestEntries[index].path && + entry.sha256 === manifestEntries[index].sha256, + ); +} + +function getCoreAutocrlf(repoRoot) { + const result = spawnSync('git', ['config', '--get', 'core.autocrlf'], { + cwd: repoRoot, + encoding: 'utf8', + windowsHide: true, + }); + if (result.status === 1) return null; + if (result.status !== 0) { + throw new Error(`git config --get core.autocrlf failed (${result.status})`); + } + return result.stdout.trim(); +} + +function isAncestor(repoRoot, ancestor, descendant) { + const result = spawnSync('git', ['merge-base', '--is-ancestor', ancestor, descendant], { + cwd: repoRoot, + encoding: 'utf8', + windowsHide: true, + }); + if (result.status === 0) return true; + if (result.status === 1) return false; + throw new Error(`git merge-base --is-ancestor failed (${result.status})`); +} + +function main() { + const repoRoot = runGit(['rev-parse', '--show-toplevel'], { encoding: 'utf8' }).trim(); + const scriptDirectory = __dirname; + const contractPath = path.join(scriptDirectory, 'content-manifest.v1.json'); + const contract = JSON.parse(fs.readFileSync(contractPath, 'utf8')); + const legacyManifestPath = path.join(repoRoot, ...contract.legacy_manifest.split('/')); + const manifest = parseAnnotatedManifest(legacyManifestPath); + + const structuralErrors = []; + if (contract.schema_version !== 1) structuralErrors.push('schema_version must be 1'); + if (contract.algorithm !== 'sha256') structuralErrors.push('algorithm must be sha256'); + if (contract.representation?.kind !== 'git-blob-content') { + structuralErrors.push('representation.kind must be git-blob-content'); + } + if (!/^[0-9a-f]{40}$/.test(contract.representation?.source_commit || '')) { + structuralErrors.push('representation.source_commit must be a full Git commit SHA'); + } + if (manifest.metadata['manifest-version'] !== '1') { + structuralErrors.push('legacy manifest annotation manifest-version=1 missing'); + } + if (manifest.metadata.algorithm !== contract.algorithm) { + structuralErrors.push('legacy manifest algorithm annotation disagrees with contract'); + } + if (manifest.metadata.representation !== contract.representation.kind) { + structuralErrors.push('legacy manifest representation annotation disagrees with contract'); + } + if (manifest.metadata['source-commit'] !== contract.representation.source_commit) { + structuralErrors.push('legacy manifest source-commit annotation disagrees with contract'); + } + if (manifest.metadata.contract !== path.relative(repoRoot, contractPath).split(path.sep).join('/')) { + structuralErrors.push('legacy manifest contract path annotation disagrees with verifier location'); + } + if (manifest.metadata.verifier !== path.relative(repoRoot, __filename).split(path.sep).join('/')) { + structuralErrors.push('legacy manifest verifier path annotation disagrees with executing verifier'); + } + if (!compareEntryShape(contract.entries, manifest.entries)) { + structuralErrors.push('legacy manifest entries disagree with contract entries or order'); + } + if (new Set(contract.entries.map((entry) => entry.path)).size !== contract.entries.length) { + structuralErrors.push('contract paths must be unique'); + } + + const sourceCommit = contract.representation.source_commit; + const sourceCommitIsAncestor = isAncestor(repoRoot, sourceCommit, 'HEAD'); + if (!sourceCommitIsAncestor) { + structuralErrors.push('source commit is not an ancestor of the executing checkout HEAD'); + } + const entryResults = contract.entries.map((entry) => { + const objectSpec = `${sourceCommit}:${entry.path}`; + const blob = runGit(['cat-file', 'blob', objectSpec], { cwd: repoRoot }); + const blobOid = runGit(['rev-parse', objectSpec], { cwd: repoRoot, encoding: 'utf8' }).trim(); + const checkout = fs.readFileSync(path.join(repoRoot, ...entry.path.split('/'))); + const canonical = canonicalizeCheckout(checkout); + const rawHash = sha256(checkout); + const canonicalHash = sha256(canonical.bytes); + const objectHash = sha256(blob); + const objectChecks = + blobOid === entry.git_blob_oid && + blob.length === entry.byte_length && + objectHash === entry.sha256; + const checkoutLfChecks = + canonical.bare_carriage_returns === 0 && + canonical.bytes.equals(blob) && + canonical.bytes.length === entry.byte_length && + canonicalHash === entry.sha256; + + return { + path: entry.path, + git_blob_oid: blobOid, + expected_sha256: entry.sha256, + git_object_sha256: objectHash, + raw_checkout_sha256: rawHash, + checkout_lf_sha256: canonicalHash, + git_object_match: objectChecks, + raw_checkout_match: rawHash === entry.sha256 && checkout.length === entry.byte_length, + checkout_lf_match: checkoutLfChecks, + checkout_eol: eolStyle(canonical), + crlf_pairs: canonical.crlf_pairs, + bare_carriage_returns: canonical.bare_carriage_returns, + }; + }); + + const total = entryResults.length; + const gitObjectMatches = entryResults.filter((entry) => entry.git_object_match).length; + const rawCheckoutMatches = entryResults.filter((entry) => entry.raw_checkout_match).length; + const checkoutLfMatches = entryResults.filter((entry) => entry.checkout_lf_match).length; + const eolCounts = entryResults.reduce((counts, entry) => { + counts[entry.checkout_eol] = (counts[entry.checkout_eol] || 0) + 1; + return counts; + }, {}); + + let status = 'FAIL'; + let matched = 0; + if (mode === 'git-object') { + matched = gitObjectMatches; + if (structuralErrors.length === 0 && matched === total) status = 'PASS'; + } else if (mode === 'checkout-lf') { + matched = checkoutLfMatches; + if (structuralErrors.length === 0 && gitObjectMatches === total && matched === total) status = 'PASS'; + } else { + matched = checkoutLfMatches; + if (structuralErrors.length === 0 && gitObjectMatches === total && checkoutLfMatches === total) { + status = rawCheckoutMatches === total + ? 'RAW_CHECKOUT_HAPPENS_TO_MATCH' + : 'AMBIGUOUS_RAW_CHECKOUT_CONFIRMED'; + } + } + + const result = { + schema_version: 1, + slice: contract.slice, + mode, + status, + source_commit: sourceCommit, + source_commit_is_ancestor: sourceCommitIsAncestor, + algorithm: contract.algorithm, + representation: contract.representation.kind, + total, + matched, + git_object_matches: gitObjectMatches, + raw_checkout_matches: rawCheckoutMatches, + checkout_lf_matches: checkoutLfMatches, + checkout: { + core_autocrlf: getCoreAutocrlf(repoRoot), + eol_counts: eolCounts, + }, + structural_errors: structuralErrors, + entries: entryResults.map((entry) => ({ + path: entry.path, + git_blob_oid: entry.git_blob_oid, + git_object_match: entry.git_object_match, + raw_checkout_match: entry.raw_checkout_match, + checkout_lf_match: entry.checkout_lf_match, + checkout_eol: entry.checkout_eol, + crlf_pairs: entry.crlf_pairs, + bare_carriage_returns: entry.bare_carriage_returns, + })), + }; + + process.stdout.write(`${JSON.stringify(result, null, 2)}\n`); + if (status === 'FAIL') process.exit(1); +} + +try { + main(); +} catch (error) { + process.stderr.write(`${error.stack || error.message}\n`); + process.exit(1); +} diff --git a/.agent/reports/evidence/production-ready/db-embedding-stats/SHA256SUMS.txt b/.agent/reports/evidence/production-ready/db-embedding-stats/SHA256SUMS.txt index 30f182e2..0ab8f31e 100644 --- a/.agent/reports/evidence/production-ready/db-embedding-stats/SHA256SUMS.txt +++ b/.agent/reports/evidence/production-ready/db-embedding-stats/SHA256SUMS.txt @@ -1,3 +1,10 @@ +# manifest-version=1 +# algorithm=sha256 +# representation=git-blob-content +# source-commit=38d6a4fb7ff5f5ae3b6c0066c0a1b806421137df +# contract=.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/content-manifest.v1.json +# verifier=.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.cjs +# checkout-equivalence=crlf-to-lf-with-no-bare-cr 7bfb06dfc0dda792147d5e2df9d2fe68b59edaac55d2396dece1b8a8a09eee5f internal/embedding/store.go a35a234eb167c58bf201afc50954e43926a69ba2294536f2d0fabf4e015b12a4 internal/embedding/store_stats_test.go 12adb14f118dbf821ee1eabb569f6bbcae831875d3b8a7fb5928c18a4b323a56 .agent/specs/db-embedding-stats/evidence/DB-EMBEDDING-STATS.red.json From 276337b3e96aa5af6d2e7dd9a0002ff957e5ffc9 Mon Sep 17 00:00:00 2001 From: Kirill Turanskiy Date: Fri, 10 Jul 2026 16:09:07 +0300 Subject: [PATCH 025/111] test(db): close candidate test pools at owner cleanup --- .../2026-07-10-db-test-pool-hygiene-maker.md | 119 +++++++++++++++++ .../01-parent-broad.summary.log | 40 ++++++ .../db-test-pool-hygiene/02-parent-red.log | 87 ++++++++++++ .../db-test-pool-hygiene/03-green-focused.log | 82 ++++++++++++ .../db-test-pool-hygiene/04-prove-it.log | 87 ++++++++++++ .../05-post-prove-green.log | 14 ++ .../db-test-pool-hygiene/06-repeat20.log | 14 ++ .../db-test-pool-hygiene/07-race.log | 14 ++ .../08-successor-broad.summary.log | 25 ++++ .../09-candidate-repeat5.log | 14 ++ .../10-candidate-race.log | 14 ++ .../11-parent-successor-comparison.txt | 34 +++++ .../db-test-pool-hygiene/12-static-gates.txt | 8 ++ .../db-test-pool-hygiene/13-final-residue.log | 11 ++ .../DB-TEST-POOL-HYGIENE.final.json | 43 ++++++ .../DB-TEST-POOL-HYGIENE.red.json | 14 ++ .../Invoke-DBPoolHygieneGo.ps1 | 124 ++++++++++++++++++ .../db-test-pool-hygiene/MANIFEST.json | 98 ++++++++++++++ .../db-test-pool-hygiene/SHA256SUMS.txt | 19 +++ internal/db/gorm/candidate_store_test.go | 52 ++++++++ 20 files changed, 913 insertions(+) create mode 100644 .agent/reports/2026-07-10-db-test-pool-hygiene-maker.md create mode 100644 .agent/reports/evidence/production-ready/db-test-pool-hygiene/01-parent-broad.summary.log create mode 100644 .agent/reports/evidence/production-ready/db-test-pool-hygiene/02-parent-red.log create mode 100644 .agent/reports/evidence/production-ready/db-test-pool-hygiene/03-green-focused.log create mode 100644 .agent/reports/evidence/production-ready/db-test-pool-hygiene/04-prove-it.log create mode 100644 .agent/reports/evidence/production-ready/db-test-pool-hygiene/05-post-prove-green.log create mode 100644 .agent/reports/evidence/production-ready/db-test-pool-hygiene/06-repeat20.log create mode 100644 .agent/reports/evidence/production-ready/db-test-pool-hygiene/07-race.log create mode 100644 .agent/reports/evidence/production-ready/db-test-pool-hygiene/08-successor-broad.summary.log create mode 100644 .agent/reports/evidence/production-ready/db-test-pool-hygiene/09-candidate-repeat5.log create mode 100644 .agent/reports/evidence/production-ready/db-test-pool-hygiene/10-candidate-race.log create mode 100644 .agent/reports/evidence/production-ready/db-test-pool-hygiene/11-parent-successor-comparison.txt create mode 100644 .agent/reports/evidence/production-ready/db-test-pool-hygiene/12-static-gates.txt create mode 100644 .agent/reports/evidence/production-ready/db-test-pool-hygiene/13-final-residue.log create mode 100644 .agent/reports/evidence/production-ready/db-test-pool-hygiene/DB-TEST-POOL-HYGIENE.final.json create mode 100644 .agent/reports/evidence/production-ready/db-test-pool-hygiene/DB-TEST-POOL-HYGIENE.red.json create mode 100644 .agent/reports/evidence/production-ready/db-test-pool-hygiene/Invoke-DBPoolHygieneGo.ps1 create mode 100644 .agent/reports/evidence/production-ready/db-test-pool-hygiene/MANIFEST.json create mode 100644 .agent/reports/evidence/production-ready/db-test-pool-hygiene/SHA256SUMS.txt diff --git a/.agent/reports/2026-07-10-db-test-pool-hygiene-maker.md b/.agent/reports/2026-07-10-db-test-pool-hygiene-maker.md new file mode 100644 index 00000000..c937e54d --- /dev/null +++ b/.agent/reports/2026-07-10-db-test-pool-hygiene-maker.md @@ -0,0 +1,119 @@ +# DB-TEST-POOL-HYGIENE maker report + +Status: **READY_FOR_CHECK** + +This is a maker handoff, not a PASS/acceptance verdict. A fresh checker must +review the successor before integration. + +## Boundary + +- Exact parent: `bd68c05baf4b7250096dd84f56bebea2aa555970` +- Branch: `work/prc-db-test-pool-hygiene` +- Worktree: `D:\Dev\engram\.agent\worktrees\dbph` +- Product scope: none; only `internal/db/gorm/candidate_store_test.go` changed. +- Forbidden canonical register/Markdown/HTML, integration, tag, remote, and + unrelated product paths were not changed. +- Exact handoff SHA is supplied by the maker handoff after the single commit; + a commit cannot embed its own hash without changing that hash. + +## Cause and closure + +`openCandidateTestDB` created a GORM/`database/sql` PostgreSQL pool but never +closed it. It is a package-wide test owner, not a two-test local helper: exact +current-source reference counting found 76 pre-existing call sites across six +`*_test.go` files. Sequential top-level tests therefore retained idle pools for +the lifetime of one `go test` process and exhausted PostgreSQL's +`max_connections=100` budget. + +The shared owner now registers `sqlDB.Close()` with `t.Cleanup` immediately +after obtaining `*sql.DB`, before ping or migrations. Cleanup failures are +reported on the owning test. This closes the resource class for every caller, +including failure paths, without changing production code. + +The permanent regression opens one parent observer and four child-owned pools. +Each child proves its pool remains queryable and visible during the subtest; +after `t.Run` returns, `pg_stat_activity` must converge to the parent's baseline +within one second. This checks both non-premature close and owner cleanup. + +## TDD evidence + +All PostgreSQL runs used a fresh `engram_mkr_dbph_*` database and recorded +`max_connections`, command, timestamps, exit code, and post-drop DB/session +residue. + +| Evidence | Result | +|---|---| +| `01-parent-broad.summary.log` | Exact parent full package: exit 1; six pre-existing semantic failures followed by six client-exhaustion failures; nine `too many clients` records. | +| `02-parent-red.log` | RED: four child subtests accumulated sessions `1 -> 4` above baseline; exit 1. | +| `03-green-focused.log` | GREEN: each child was live at `1`, then returned to baseline `0`; exit 0. | +| `04-prove-it.log` | Final tolerant regression with only cleanup removed accumulated `1 -> 4`; exit 1. | +| `05-post-prove-green.log` | Cleanup restored; focused regression exit 0. | +| `06-repeat20.log` | Focused regression `-count=20`; exit 0. | +| `07-race.log` | Focused `-race`; exit 0. | +| `09-candidate-repeat5.log` | All candidate/helper-local tests `-count=5`; exit 0. | +| `10-candidate-race.log` | All candidate/helper-local tests under `-race`; exit 0. | +| `08-successor-broad.summary.log` | Full package: exit 1 only for the exact six unrelated semantic failures; zero client exhaustion. | + +Every row above finished with `database_residue=0` and +`activity_residue=0`. + +## Exact-parent comparison + +The parent and successor broad commands were byte-identical: + +```text +go test -p=1 ./internal/db/gorm -count=1 -v +``` + +Both expose the same six existing governance/migration failures: + +- `TestMigration144_RuleGovernanceEscapeConstraints` +- `TestMigration144_RuleGovernanceRollbackAndReapply` +- `TestMigration144_RuleGovernanceSnapshotStatusesAcceptExtendedStates` +- `TestRuleGovernanceStore_AnnotatedCandidateWaitsUntilReviewAfter` +- `TestRuleGovernanceStore_GetLifecycleHealthAggregatesGovernanceTables` +- `TestRuleGovernanceStore_GetLifecycleHealthOmitsGlobalArbiterRunsForProjectScopedReads` + +Only the parent additionally fails three TemporalTruth, two TokenStore, and one +TranscriptStore test after the pool budget is exhausted. The successor has no +new failure and zero `too many clients` occurrence. The full machine comparison +is `11-parent-successor-comparison.txt`; this broad package remains truthfully +FAIL/WARN, not green or allowlisted. + +## Static gates and scope proof + +- `go vet ./...`: exit 0. +- `go build ./...`: exit 0. +- `git diff --check`: exit 0 before evidence staging. +- Coverage: N/A; the only implementation is in `*_test.go`, which Go production + coverage does not instrument. +- Changed implementation file SHA-256: + `62260c1a2e0705b065295322dd23fcf9b17fd47cb5ebc64134630788e2d23e09`. + +## Discrepancy ledger + +1. The first GREEN assertion expected `pg_stat_activity` to drop synchronously. + Subsequent immediate observations sometimes retained one row briefly. A + bounded 10 ms poll proved convergence, so the permanent test requires the + exact baseline within one second; the parent/prove-it leak remains stable and + still fails at `1 -> 4`. +2. Fresh migrations emit existing non-fatal stale pattern/relation-index, + absent `observation_vectors`, and unavailable `vectorscale` warnings. They + were not patched or reclassified. +3. Serena diagnostics for the changed file did not return and was terminated. + This degradation is explicit; `gofmt`, full-repo vet, full-repo build, + focused/race/repeat, and parent-vs-successor runtime evidence are present. +4. The six unrelated broad semantic failures remain visible and block calling + the full package green. +5. Tracked `*.log` evidence was mechanically normalized to UTF-8/LF, tabs were + expanded, and end-of-line whitespace was removed; command text, output + content, exit codes, and timestamps were otherwise unchanged. +6. The two full-package outputs were captured in full, then reduced to compact + metadata/failure/package-result summaries for the tracked packet. The + summaries retain every top-level failure, every client-exhaustion record, + command/limit metadata, exit code, and residue result. + +## Finish state + +`review-needed`: one clean successor commit is handed to a fresh checker. No +integration, release, tag, push, or self-acceptance action was taken. diff --git a/.agent/reports/evidence/production-ready/db-test-pool-hygiene/01-parent-broad.summary.log b/.agent/reports/evidence/production-ready/db-test-pool-hygiene/01-parent-broad.summary.log new file mode 100644 index 00000000..95738976 --- /dev/null +++ b/.agent/reports/evidence/production-ready/db-test-pool-hygiene/01-parent-broad.summary.log @@ -0,0 +1,40 @@ +format=compact status/failure extraction from complete go test output +full_output_captured=true +filter=run metadata, top-level failures, client-exhaustion records, package result, exit and residue +base_sha=bd68c05baf4b7250096dd84f56bebea2aa555970 +head_sha=bd68c05baf4b7250096dd84f56bebea2aa555970 +database=engram_mkr_dbph_parent_broad_a +command=go test -p=1 ./internal/db/gorm -count=1 -v +max_connections=100 +superuser_reserved_connections=3 +started_utc=2026-07-10T12:39:54.7843328Z +activity_before_test=0 +--- FAIL: TestRuleGovernanceStore_AnnotatedCandidateWaitsUntilReviewAfter (0.16s) +--- FAIL: TestRuleGovernanceStore_GetLifecycleHealthAggregatesGovernanceTables (0.18s) +--- FAIL: TestRuleGovernanceStore_GetLifecycleHealthOmitsGlobalArbiterRunsForProjectScopedReads (0.12s) +--- FAIL: TestMigration144_RuleGovernanceRollbackAndReapply (0.14s) +--- FAIL: TestMigration144_RuleGovernanceEscapeConstraints (0.13s) +--- FAIL: TestMigration144_RuleGovernanceSnapshotStatusesAcceptExtendedStates (0.13s) +[error] failed to initialize database, got error failed to connect to `user=engram database=engram_mkr_dbph_parent_broad_a`: 127.0.0.1:55432 (127.0.0.1): server error: FATAL: sorry, too many clients already (SQLSTATE 53300) + failed to connect to `user=engram database=engram_mkr_dbph_parent_broad_a`: 127.0.0.1:55432 (127.0.0.1): server error: FATAL: sorry, too many clients already (SQLSTATE 53300) +--- FAIL: TestTemporalTruthStore_RefreshProjectBoundsPredecessorFromSuccessorChain (0.00s) +[error] failed to initialize database, got error failed to connect to `user=engram database=engram_mkr_dbph_parent_broad_a`: 127.0.0.1:55432 (127.0.0.1): server error: FATAL: sorry, too many clients already (SQLSTATE 53300) + failed to connect to `user=engram database=engram_mkr_dbph_parent_broad_a`: 127.0.0.1:55432 (127.0.0.1): server error: FATAL: sorry, too many clients already (SQLSTATE 53300) +--- FAIL: TestTemporalTruthStore_RefreshProjectRejectsSingleWriteAndUnsupportedChains (0.00s) +[error] failed to initialize database, got error failed to connect to `user=engram database=engram_mkr_dbph_parent_broad_a`: 127.0.0.1:55432 (127.0.0.1): server error: FATAL: sorry, too many clients already (SQLSTATE 53300) + failed to connect to `user=engram database=engram_mkr_dbph_parent_broad_a`: 127.0.0.1:55432 (127.0.0.1): server error: FATAL: sorry, too many clients already (SQLSTATE 53300) +--- FAIL: TestTemporalTruthStore_LoadSelectedRecordsUsesDBNowForValidFrom (0.00s) + failed to connect to `user=engram database=engram_mkr_dbph_parent_broad_a`: 127.0.0.1:55432 (127.0.0.1): server error: FATAL: sorry, too many clients already (SQLSTATE 53300) +--- FAIL: TestTokenStore_CreateWithPrincipalRoundTrip (0.00s) + failed to connect to `user=engram database=engram_mkr_dbph_parent_broad_a`: 127.0.0.1:55432 (127.0.0.1): server error: FATAL: sorry, too many clients already (SQLSTATE 53300) +--- FAIL: TestTokenStore_CreateWithPrincipalRejectsKindWithoutPrincipal (0.00s) + transcript_store_test.go:64: open test db: failed to connect to `user=engram database=engram_mkr_dbph_parent_broad_a`: 127.0.0.1:55432 (127.0.0.1): server error: FATAL: sorry, too many clients already (SQLSTATE 53300) +--- FAIL: TestTranscriptStore_Lifecycle (0.00s) +FAIL +FAIL github.com/thebtf/engram/internal/db/gorm 32.929s +FAIL +test_exit=1 +activity_after_test_process=0 +database_residue=0 +activity_residue=0 +finished_utc=2026-07-10T12:40:30.7792674Z diff --git a/.agent/reports/evidence/production-ready/db-test-pool-hygiene/02-parent-red.log b/.agent/reports/evidence/production-ready/db-test-pool-hygiene/02-parent-red.log new file mode 100644 index 00000000..75147bf5 --- /dev/null +++ b/.agent/reports/evidence/production-ready/db-test-pool-hygiene/02-parent-red.log @@ -0,0 +1,87 @@ +base_sha=bd68c05baf4b7250096dd84f56bebea2aa555970 +head_sha=bd68c05baf4b7250096dd84f56bebea2aa555970 +database=engram_mkr_dbph_parent_red_a +command=go test -p=1 ./internal/db/gorm -run ^TestOpenCandidateTestDB_SubtestOwnerClosesPoolWithoutPrematureClose$ -count=1 -v +max_connections=100 +superuser_reserved_connections=3 +started_utc=2026-07-10T12:41:32.2303434Z +activity_before_test=0 +=== RUN TestOpenCandidateTestDB_SubtestOwnerClosesPoolWithoutPrematureClose + +2026/07/10 15:41:34 D:/Dev/engram/.agent/worktrees/dbph/internal/db/gorm/migrations.go:483 ERROR: column "is_deprecated" does not exist (SQLSTATE 42703) +[1.000ms] [rows:0] CREATE INDEX IF NOT EXISTS idx_patterns_frequency + ON patterns(frequency DESC, last_seen_at_epoch DESC) + WHERE is_deprecated = 0 + +2026/07/10 15:41:34 D:/Dev/engram/.agent/worktrees/dbph/internal/db/gorm/migrations.go:578 ERROR: column "is_deprecated" does not exist (SQLSTATE 42703) +[0.501ms] [rows:0] CREATE INDEX IF NOT EXISTS idx_patterns_type_project + ON patterns(type, project, frequency DESC) + WHERE is_deprecated = 0 + +2026/07/10 15:41:34 D:/Dev/engram/.agent/worktrees/dbph/internal/db/gorm/migrations.go:578 ERROR: column "source_observation_id" does not exist (SQLSTATE 42703) +[0.999ms] [rows:0] CREATE INDEX IF NOT EXISTS idx_relations_source_type + ON observation_relations(source_observation_id, relation_type) + +2026/07/10 15:41:34 D:/Dev/engram/.agent/worktrees/dbph/internal/db/gorm/migrations.go:578 ERROR: column "target_observation_id" does not exist (SQLSTATE 42703) +[0.500ms] [rows:0] CREATE INDEX IF NOT EXISTS idx_relations_target_type + ON observation_relations(target_observation_id, relation_type) + +2026/07/10 15:41:34 D:/Dev/engram/.agent/worktrees/dbph/internal/db/gorm/migrations.go:670 ERROR: column "source_observation_id" does not exist (SQLSTATE 42703) +[0.499ms] [rows:0] CREATE INDEX IF NOT EXISTS idx_relations_source_type_target + ON observation_relations(source_observation_id, relation_type, target_observation_id) + +2026/07/10 15:41:34 D:/Dev/engram/.agent/worktrees/dbph/internal/db/gorm/migrations.go:670 ERROR: column "target_observation_id" does not exist (SQLSTATE 42703) +[1.000ms] [rows:0] CREATE INDEX IF NOT EXISTS idx_relations_target_type_source + ON observation_relations(target_observation_id, relation_type, source_observation_id) + +2026/07/10 15:41:35 D:/Dev/engram/.agent/worktrees/dbph/internal/db/gorm/migrations.go:1447 ERROR: relation "observation_vectors" does not exist (SQLSTATE 42P01) +[0.502ms] [rows:0] + DELETE FROM observation_vectors + WHERE id IN ( + SELECT ov.id FROM observation_vectors ov + LEFT JOIN observations o ON ov.metadata->>'sqlite_id' = o.id::text + WHERE o.id IS NULL + ) + +{"level":"warn","error":"ERROR: relation \"observation_vectors\" does not exist (SQLSTATE 42P01)","time":"2026-07-10T15:41:35+03:00","message":"migration 040: orphan vector cleanup failed (non-fatal)"} +{"level":"info","garbage_deleted":0,"orphan_vectors_deleted":0,"time":"2026-07-10T15:41:35+03:00","message":"migration 040: garbage cleanup complete"} +{"level":"info","orphan_vectors_deleted":0,"time":"2026-07-10T15:41:35+03:00","message":"migration 041: orphan vector purge complete"} +{"level":"info","patterns_deleted":0,"time":"2026-07-10T15:41:35+03:00","message":"migration 042: low-quality pattern purge complete"} +{"level":"info","total_deleted":0,"time":"2026-07-10T15:41:35+03:00","message":"migration 043: radical observation cleanup complete"} + +2026/07/10 15:41:36 D:/Dev/engram/.agent/worktrees/dbph/internal/db/gorm/migrations.go:3502 ERROR: extension "vectorscale" is not available (SQLSTATE 0A000) +[0.500ms] [rows:0] CREATE EXTENSION IF NOT EXISTS vectorscale CASCADE +{"level":"warn","error":"ERROR: extension \"vectorscale\" is not available (SQLSTATE 0A000)","time":"2026-07-10T15:41:36+03:00","message":"migration 109: vectorscale extension not available, skipping DiskANN index"} +=== RUN TestOpenCandidateTestDB_SubtestOwnerClosesPoolWithoutPrematureClose/owner-0 + candidate_store_test.go:58: baseline_sessions=0 child_live_sessions=1 +=== NAME TestOpenCandidateTestDB_SubtestOwnerClosesPoolWithoutPrematureClose + candidate_store_test.go:63: baseline_sessions=0 sessions_after_owner_cleanup=1 + candidate_store_test.go:65: child pool leaked past owner cleanup: baseline=0 after=1 +=== RUN TestOpenCandidateTestDB_SubtestOwnerClosesPoolWithoutPrematureClose/owner-1 + candidate_store_test.go:58: baseline_sessions=0 child_live_sessions=2 +=== NAME TestOpenCandidateTestDB_SubtestOwnerClosesPoolWithoutPrematureClose + candidate_store_test.go:63: baseline_sessions=0 sessions_after_owner_cleanup=2 + candidate_store_test.go:65: child pool leaked past owner cleanup: baseline=0 after=2 +=== RUN TestOpenCandidateTestDB_SubtestOwnerClosesPoolWithoutPrematureClose/owner-2 + candidate_store_test.go:58: baseline_sessions=0 child_live_sessions=3 +=== NAME TestOpenCandidateTestDB_SubtestOwnerClosesPoolWithoutPrematureClose + candidate_store_test.go:63: baseline_sessions=0 sessions_after_owner_cleanup=3 + candidate_store_test.go:65: child pool leaked past owner cleanup: baseline=0 after=3 +=== RUN TestOpenCandidateTestDB_SubtestOwnerClosesPoolWithoutPrematureClose/owner-3 + candidate_store_test.go:58: baseline_sessions=0 child_live_sessions=4 +=== NAME TestOpenCandidateTestDB_SubtestOwnerClosesPoolWithoutPrematureClose + candidate_store_test.go:63: baseline_sessions=0 sessions_after_owner_cleanup=4 + candidate_store_test.go:65: child pool leaked past owner cleanup: baseline=0 after=4 +--- FAIL: TestOpenCandidateTestDB_SubtestOwnerClosesPoolWithoutPrematureClose (2.87s) + --- PASS: TestOpenCandidateTestDB_SubtestOwnerClosesPoolWithoutPrematureClose/owner-0 (0.09s) + --- PASS: TestOpenCandidateTestDB_SubtestOwnerClosesPoolWithoutPrematureClose/owner-1 (0.10s) + --- PASS: TestOpenCandidateTestDB_SubtestOwnerClosesPoolWithoutPrematureClose/owner-2 (0.09s) + --- PASS: TestOpenCandidateTestDB_SubtestOwnerClosesPoolWithoutPrematureClose/owner-3 (0.09s) +FAIL +FAIL github.com/thebtf/engram/internal/db/gorm 2.956s +FAIL +test_exit=1 +activity_after_test_process=0 +database_residue=0 +activity_residue=0 +finished_utc=2026-07-10T12:41:38.9724244Z diff --git a/.agent/reports/evidence/production-ready/db-test-pool-hygiene/03-green-focused.log b/.agent/reports/evidence/production-ready/db-test-pool-hygiene/03-green-focused.log new file mode 100644 index 00000000..af10330d --- /dev/null +++ b/.agent/reports/evidence/production-ready/db-test-pool-hygiene/03-green-focused.log @@ -0,0 +1,82 @@ +base_sha=bd68c05baf4b7250096dd84f56bebea2aa555970 +head_sha=bd68c05baf4b7250096dd84f56bebea2aa555970 +database=engram_mkr_dbph_green_focus_b +command=go test -p=1 ./internal/db/gorm -run ^TestOpenCandidateTestDB_SubtestOwnerClosesPoolWithoutPrematureClose$ -count=1 -v +max_connections=100 +superuser_reserved_connections=3 +started_utc=2026-07-10T12:43:34.3764837Z +activity_before_test=0 +=== RUN TestOpenCandidateTestDB_SubtestOwnerClosesPoolWithoutPrematureClose + +2026/07/10 15:43:37 D:/Dev/engram/.agent/worktrees/dbph/internal/db/gorm/migrations.go:483 ERROR: column "is_deprecated" does not exist (SQLSTATE 42703) +[0.499ms] [rows:0] CREATE INDEX IF NOT EXISTS idx_patterns_frequency + ON patterns(frequency DESC, last_seen_at_epoch DESC) + WHERE is_deprecated = 0 + +2026/07/10 15:43:37 D:/Dev/engram/.agent/worktrees/dbph/internal/db/gorm/migrations.go:578 ERROR: column "is_deprecated" does not exist (SQLSTATE 42703) +[1.003ms] [rows:0] CREATE INDEX IF NOT EXISTS idx_patterns_type_project + ON patterns(type, project, frequency DESC) + WHERE is_deprecated = 0 + +2026/07/10 15:43:37 D:/Dev/engram/.agent/worktrees/dbph/internal/db/gorm/migrations.go:578 ERROR: column "source_observation_id" does not exist (SQLSTATE 42703) +[0.997ms] [rows:0] CREATE INDEX IF NOT EXISTS idx_relations_source_type + ON observation_relations(source_observation_id, relation_type) + +2026/07/10 15:43:37 D:/Dev/engram/.agent/worktrees/dbph/internal/db/gorm/migrations.go:578 ERROR: column "target_observation_id" does not exist (SQLSTATE 42703) +[0.501ms] [rows:0] CREATE INDEX IF NOT EXISTS idx_relations_target_type + ON observation_relations(target_observation_id, relation_type) + +2026/07/10 15:43:37 D:/Dev/engram/.agent/worktrees/dbph/internal/db/gorm/migrations.go:670 ERROR: column "source_observation_id" does not exist (SQLSTATE 42703) +[0.500ms] [rows:0] CREATE INDEX IF NOT EXISTS idx_relations_source_type_target + ON observation_relations(source_observation_id, relation_type, target_observation_id) + +2026/07/10 15:43:37 D:/Dev/engram/.agent/worktrees/dbph/internal/db/gorm/migrations.go:670 ERROR: column "target_observation_id" does not exist (SQLSTATE 42703) +[0.500ms] [rows:0] CREATE INDEX IF NOT EXISTS idx_relations_target_type_source + ON observation_relations(target_observation_id, relation_type, source_observation_id) + +2026/07/10 15:43:37 D:/Dev/engram/.agent/worktrees/dbph/internal/db/gorm/migrations.go:1447 ERROR: relation "observation_vectors" does not exist (SQLSTATE 42P01) +[0.501ms] [rows:0] + DELETE FROM observation_vectors + WHERE id IN ( + SELECT ov.id FROM observation_vectors ov + LEFT JOIN observations o ON ov.metadata->>'sqlite_id' = o.id::text + WHERE o.id IS NULL + ) + +{"level":"warn","error":"ERROR: relation \"observation_vectors\" does not exist (SQLSTATE 42P01)","time":"2026-07-10T15:43:37+03:00","message":"migration 040: orphan vector cleanup failed (non-fatal)"} +{"level":"info","garbage_deleted":0,"orphan_vectors_deleted":0,"time":"2026-07-10T15:43:37+03:00","message":"migration 040: garbage cleanup complete"} +{"level":"info","orphan_vectors_deleted":0,"time":"2026-07-10T15:43:37+03:00","message":"migration 041: orphan vector purge complete"} +{"level":"info","patterns_deleted":0,"time":"2026-07-10T15:43:37+03:00","message":"migration 042: low-quality pattern purge complete"} +{"level":"info","total_deleted":0,"time":"2026-07-10T15:43:37+03:00","message":"migration 043: radical observation cleanup complete"} + +2026/07/10 15:43:38 D:/Dev/engram/.agent/worktrees/dbph/internal/db/gorm/migrations.go:3502 ERROR: extension "vectorscale" is not available (SQLSTATE 0A000) +[0.500ms] [rows:0] CREATE EXTENSION IF NOT EXISTS vectorscale CASCADE +{"level":"warn","error":"ERROR: extension \"vectorscale\" is not available (SQLSTATE 0A000)","time":"2026-07-10T15:43:38+03:00","message":"migration 109: vectorscale extension not available, skipping DiskANN index"} +=== RUN TestOpenCandidateTestDB_SubtestOwnerClosesPoolWithoutPrematureClose/owner-0 + candidate_store_test.go:63: baseline_sessions=0 child_live_sessions=1 +=== NAME TestOpenCandidateTestDB_SubtestOwnerClosesPoolWithoutPrematureClose + candidate_store_test.go:73: baseline_sessions=0 sessions_after_owner_cleanup=0 +=== RUN TestOpenCandidateTestDB_SubtestOwnerClosesPoolWithoutPrematureClose/owner-1 + candidate_store_test.go:63: baseline_sessions=0 child_live_sessions=1 +=== NAME TestOpenCandidateTestDB_SubtestOwnerClosesPoolWithoutPrematureClose + candidate_store_test.go:73: baseline_sessions=0 sessions_after_owner_cleanup=0 +=== RUN TestOpenCandidateTestDB_SubtestOwnerClosesPoolWithoutPrematureClose/owner-2 + candidate_store_test.go:63: baseline_sessions=0 child_live_sessions=1 +=== NAME TestOpenCandidateTestDB_SubtestOwnerClosesPoolWithoutPrematureClose + candidate_store_test.go:73: baseline_sessions=0 sessions_after_owner_cleanup=0 +=== RUN TestOpenCandidateTestDB_SubtestOwnerClosesPoolWithoutPrematureClose/owner-3 + candidate_store_test.go:63: baseline_sessions=0 child_live_sessions=1 +=== NAME TestOpenCandidateTestDB_SubtestOwnerClosesPoolWithoutPrematureClose + candidate_store_test.go:73: baseline_sessions=0 sessions_after_owner_cleanup=0 +--- PASS: TestOpenCandidateTestDB_SubtestOwnerClosesPoolWithoutPrematureClose (3.20s) + --- PASS: TestOpenCandidateTestDB_SubtestOwnerClosesPoolWithoutPrematureClose/owner-0 (0.11s) + --- PASS: TestOpenCandidateTestDB_SubtestOwnerClosesPoolWithoutPrematureClose/owner-1 (0.10s) + --- PASS: TestOpenCandidateTestDB_SubtestOwnerClosesPoolWithoutPrematureClose/owner-2 (0.10s) + --- PASS: TestOpenCandidateTestDB_SubtestOwnerClosesPoolWithoutPrematureClose/owner-3 (0.10s) +PASS +ok github.com/thebtf/engram/internal/db/gorm 3.335s +test_exit=0 +activity_after_test_process=0 +database_residue=0 +activity_residue=0 +finished_utc=2026-07-10T12:43:41.6527231Z diff --git a/.agent/reports/evidence/production-ready/db-test-pool-hygiene/04-prove-it.log b/.agent/reports/evidence/production-ready/db-test-pool-hygiene/04-prove-it.log new file mode 100644 index 00000000..476eb561 --- /dev/null +++ b/.agent/reports/evidence/production-ready/db-test-pool-hygiene/04-prove-it.log @@ -0,0 +1,87 @@ +base_sha=bd68c05baf4b7250096dd84f56bebea2aa555970 +head_sha=bd68c05baf4b7250096dd84f56bebea2aa555970 +database=engram_mkr_dbph_prove_it_a +command=go test -p=1 ./internal/db/gorm -run ^TestOpenCandidateTestDB_SubtestOwnerClosesPoolWithoutPrematureClose$ -count=1 -v +max_connections=100 +superuser_reserved_connections=3 +started_utc=2026-07-10T12:44:13.6263569Z +activity_before_test=0 +=== RUN TestOpenCandidateTestDB_SubtestOwnerClosesPoolWithoutPrematureClose + +2026/07/10 15:44:16 D:/Dev/engram/.agent/worktrees/dbph/internal/db/gorm/migrations.go:483 ERROR: column "is_deprecated" does not exist (SQLSTATE 42703) +[0.999ms] [rows:0] CREATE INDEX IF NOT EXISTS idx_patterns_frequency + ON patterns(frequency DESC, last_seen_at_epoch DESC) + WHERE is_deprecated = 0 + +2026/07/10 15:44:16 D:/Dev/engram/.agent/worktrees/dbph/internal/db/gorm/migrations.go:578 ERROR: column "is_deprecated" does not exist (SQLSTATE 42703) +[0.500ms] [rows:0] CREATE INDEX IF NOT EXISTS idx_patterns_type_project + ON patterns(type, project, frequency DESC) + WHERE is_deprecated = 0 + +2026/07/10 15:44:16 D:/Dev/engram/.agent/worktrees/dbph/internal/db/gorm/migrations.go:578 ERROR: column "source_observation_id" does not exist (SQLSTATE 42703) +[0.497ms] [rows:0] CREATE INDEX IF NOT EXISTS idx_relations_source_type + ON observation_relations(source_observation_id, relation_type) + +2026/07/10 15:44:16 D:/Dev/engram/.agent/worktrees/dbph/internal/db/gorm/migrations.go:578 ERROR: column "target_observation_id" does not exist (SQLSTATE 42703) +[1.002ms] [rows:0] CREATE INDEX IF NOT EXISTS idx_relations_target_type + ON observation_relations(target_observation_id, relation_type) + +2026/07/10 15:44:16 D:/Dev/engram/.agent/worktrees/dbph/internal/db/gorm/migrations.go:670 ERROR: column "source_observation_id" does not exist (SQLSTATE 42703) +[0.501ms] [rows:0] CREATE INDEX IF NOT EXISTS idx_relations_source_type_target + ON observation_relations(source_observation_id, relation_type, target_observation_id) + +2026/07/10 15:44:16 D:/Dev/engram/.agent/worktrees/dbph/internal/db/gorm/migrations.go:670 ERROR: column "target_observation_id" does not exist (SQLSTATE 42703) +[1.000ms] [rows:0] CREATE INDEX IF NOT EXISTS idx_relations_target_type_source + ON observation_relations(target_observation_id, relation_type, source_observation_id) + +2026/07/10 15:44:16 D:/Dev/engram/.agent/worktrees/dbph/internal/db/gorm/migrations.go:1447 ERROR: relation "observation_vectors" does not exist (SQLSTATE 42P01) +[1.001ms] [rows:0] + DELETE FROM observation_vectors + WHERE id IN ( + SELECT ov.id FROM observation_vectors ov + LEFT JOIN observations o ON ov.metadata->>'sqlite_id' = o.id::text + WHERE o.id IS NULL + ) + +{"level":"warn","error":"ERROR: relation \"observation_vectors\" does not exist (SQLSTATE 42P01)","time":"2026-07-10T15:44:16+03:00","message":"migration 040: orphan vector cleanup failed (non-fatal)"} +{"level":"info","garbage_deleted":0,"orphan_vectors_deleted":0,"time":"2026-07-10T15:44:16+03:00","message":"migration 040: garbage cleanup complete"} +{"level":"info","orphan_vectors_deleted":0,"time":"2026-07-10T15:44:16+03:00","message":"migration 041: orphan vector purge complete"} +{"level":"info","patterns_deleted":0,"time":"2026-07-10T15:44:16+03:00","message":"migration 042: low-quality pattern purge complete"} +{"level":"info","total_deleted":0,"time":"2026-07-10T15:44:17+03:00","message":"migration 043: radical observation cleanup complete"} + +2026/07/10 15:44:17 D:/Dev/engram/.agent/worktrees/dbph/internal/db/gorm/migrations.go:3502 ERROR: extension "vectorscale" is not available (SQLSTATE 0A000) +[0.500ms] [rows:0] CREATE EXTENSION IF NOT EXISTS vectorscale CASCADE +{"level":"warn","error":"ERROR: extension \"vectorscale\" is not available (SQLSTATE 0A000)","time":"2026-07-10T15:44:17+03:00","message":"migration 109: vectorscale extension not available, skipping DiskANN index"} +=== RUN TestOpenCandidateTestDB_SubtestOwnerClosesPoolWithoutPrematureClose/owner-0 + candidate_store_test.go:58: baseline_sessions=0 child_live_sessions=1 +=== NAME TestOpenCandidateTestDB_SubtestOwnerClosesPoolWithoutPrematureClose + candidate_store_test.go:68: baseline_sessions=0 sessions_after_owner_cleanup=1 + candidate_store_test.go:70: child pool leaked past owner cleanup: baseline=0 after=1 +=== RUN TestOpenCandidateTestDB_SubtestOwnerClosesPoolWithoutPrematureClose/owner-1 + candidate_store_test.go:58: baseline_sessions=0 child_live_sessions=2 +=== NAME TestOpenCandidateTestDB_SubtestOwnerClosesPoolWithoutPrematureClose + candidate_store_test.go:68: baseline_sessions=0 sessions_after_owner_cleanup=2 + candidate_store_test.go:70: child pool leaked past owner cleanup: baseline=0 after=2 +=== RUN TestOpenCandidateTestDB_SubtestOwnerClosesPoolWithoutPrematureClose/owner-2 + candidate_store_test.go:58: baseline_sessions=0 child_live_sessions=3 +=== NAME TestOpenCandidateTestDB_SubtestOwnerClosesPoolWithoutPrematureClose + candidate_store_test.go:68: baseline_sessions=0 sessions_after_owner_cleanup=3 + candidate_store_test.go:70: child pool leaked past owner cleanup: baseline=0 after=3 +=== RUN TestOpenCandidateTestDB_SubtestOwnerClosesPoolWithoutPrematureClose/owner-3 + candidate_store_test.go:58: baseline_sessions=0 child_live_sessions=4 +=== NAME TestOpenCandidateTestDB_SubtestOwnerClosesPoolWithoutPrematureClose + candidate_store_test.go:68: baseline_sessions=0 sessions_after_owner_cleanup=4 + candidate_store_test.go:70: child pool leaked past owner cleanup: baseline=0 after=4 +--- FAIL: TestOpenCandidateTestDB_SubtestOwnerClosesPoolWithoutPrematureClose (7.20s) + --- PASS: TestOpenCandidateTestDB_SubtestOwnerClosesPoolWithoutPrematureClose/owner-0 (0.10s) + --- PASS: TestOpenCandidateTestDB_SubtestOwnerClosesPoolWithoutPrematureClose/owner-1 (0.11s) + --- PASS: TestOpenCandidateTestDB_SubtestOwnerClosesPoolWithoutPrematureClose/owner-2 (0.11s) + --- PASS: TestOpenCandidateTestDB_SubtestOwnerClosesPoolWithoutPrematureClose/owner-3 (0.11s) +FAIL +FAIL github.com/thebtf/engram/internal/db/gorm 7.356s +FAIL +test_exit=1 +activity_after_test_process=0 +database_residue=0 +activity_residue=0 +finished_utc=2026-07-10T12:44:24.7787771Z diff --git a/.agent/reports/evidence/production-ready/db-test-pool-hygiene/05-post-prove-green.log b/.agent/reports/evidence/production-ready/db-test-pool-hygiene/05-post-prove-green.log new file mode 100644 index 00000000..fc72ec58 --- /dev/null +++ b/.agent/reports/evidence/production-ready/db-test-pool-hygiene/05-post-prove-green.log @@ -0,0 +1,14 @@ +base_sha=bd68c05baf4b7250096dd84f56bebea2aa555970 +head_sha=bd68c05baf4b7250096dd84f56bebea2aa555970 +database=engram_mkr_dbph_post_prove_a +command=go test -p=1 ./internal/db/gorm -run ^TestOpenCandidateTestDB_SubtestOwnerClosesPoolWithoutPrematureClose$ -count=1 +max_connections=100 +superuser_reserved_connections=3 +started_utc=2026-07-10T12:44:54.3836591Z +activity_before_test=0 +ok github.com/thebtf/engram/internal/db/gorm 3.499s +test_exit=0 +activity_after_test_process=0 +database_residue=0 +activity_residue=0 +finished_utc=2026-07-10T12:45:01.5262006Z diff --git a/.agent/reports/evidence/production-ready/db-test-pool-hygiene/06-repeat20.log b/.agent/reports/evidence/production-ready/db-test-pool-hygiene/06-repeat20.log new file mode 100644 index 00000000..e7c7bbaf --- /dev/null +++ b/.agent/reports/evidence/production-ready/db-test-pool-hygiene/06-repeat20.log @@ -0,0 +1,14 @@ +base_sha=bd68c05baf4b7250096dd84f56bebea2aa555970 +head_sha=bd68c05baf4b7250096dd84f56bebea2aa555970 +database=engram_mkr_dbph_repeat_a +command=go test -p=1 ./internal/db/gorm -run ^TestOpenCandidateTestDB_SubtestOwnerClosesPoolWithoutPrematureClose$ -count=20 +max_connections=100 +superuser_reserved_connections=3 +started_utc=2026-07-10T12:45:15.8162838Z +activity_before_test=0 +ok github.com/thebtf/engram/internal/db/gorm 14.802s +test_exit=0 +activity_after_test_process=0 +database_residue=0 +activity_residue=0 +finished_utc=2026-07-10T12:45:33.8890373Z diff --git a/.agent/reports/evidence/production-ready/db-test-pool-hygiene/07-race.log b/.agent/reports/evidence/production-ready/db-test-pool-hygiene/07-race.log new file mode 100644 index 00000000..b985980b --- /dev/null +++ b/.agent/reports/evidence/production-ready/db-test-pool-hygiene/07-race.log @@ -0,0 +1,14 @@ +base_sha=bd68c05baf4b7250096dd84f56bebea2aa555970 +head_sha=bd68c05baf4b7250096dd84f56bebea2aa555970 +database=engram_mkr_dbph_race_a +command=go test -race -p=1 ./internal/db/gorm -run ^TestOpenCandidateTestDB_SubtestOwnerClosesPoolWithoutPrematureClose$ -count=1 +max_connections=100 +superuser_reserved_connections=3 +started_utc=2026-07-10T12:45:51.8676905Z +activity_before_test=0 +ok github.com/thebtf/engram/internal/db/gorm 4.711s +test_exit=0 +activity_after_test_process=0 +database_residue=0 +activity_residue=0 +finished_utc=2026-07-10T12:46:04.8094754Z diff --git a/.agent/reports/evidence/production-ready/db-test-pool-hygiene/08-successor-broad.summary.log b/.agent/reports/evidence/production-ready/db-test-pool-hygiene/08-successor-broad.summary.log new file mode 100644 index 00000000..3de11652 --- /dev/null +++ b/.agent/reports/evidence/production-ready/db-test-pool-hygiene/08-successor-broad.summary.log @@ -0,0 +1,25 @@ +format=compact status/failure extraction from complete go test output +full_output_captured=true +filter=run metadata, top-level failures, client-exhaustion records, package result, exit and residue +base_sha=bd68c05baf4b7250096dd84f56bebea2aa555970 +head_sha=bd68c05baf4b7250096dd84f56bebea2aa555970 +database=engram_mkr_dbph_successor_broad_a +command=go test -p=1 ./internal/db/gorm -count=1 -v +max_connections=100 +superuser_reserved_connections=3 +started_utc=2026-07-10T12:46:28.7916082Z +activity_before_test=0 +--- FAIL: TestRuleGovernanceStore_AnnotatedCandidateWaitsUntilReviewAfter (0.20s) +--- FAIL: TestRuleGovernanceStore_GetLifecycleHealthAggregatesGovernanceTables (0.21s) +--- FAIL: TestRuleGovernanceStore_GetLifecycleHealthOmitsGlobalArbiterRunsForProjectScopedReads (0.14s) +--- FAIL: TestMigration144_RuleGovernanceRollbackAndReapply (0.16s) +--- FAIL: TestMigration144_RuleGovernanceEscapeConstraints (0.16s) +--- FAIL: TestMigration144_RuleGovernanceSnapshotStatusesAcceptExtendedStates (0.17s) +FAIL +FAIL github.com/thebtf/engram/internal/db/gorm 35.530s +FAIL +test_exit=1 +activity_after_test_process=0 +database_residue=0 +activity_residue=0 +finished_utc=2026-07-10T12:47:07.4812942Z diff --git a/.agent/reports/evidence/production-ready/db-test-pool-hygiene/09-candidate-repeat5.log b/.agent/reports/evidence/production-ready/db-test-pool-hygiene/09-candidate-repeat5.log new file mode 100644 index 00000000..c97977d6 --- /dev/null +++ b/.agent/reports/evidence/production-ready/db-test-pool-hygiene/09-candidate-repeat5.log @@ -0,0 +1,14 @@ +base_sha=bd68c05baf4b7250096dd84f56bebea2aa555970 +head_sha=bd68c05baf4b7250096dd84f56bebea2aa555970 +database=engram_mkr_dbph_candidate_repeat_a +command=go test -p=1 ./internal/db/gorm -run ^(TestOpenCandidateTestDB_|TestCandidateStore_) -count=5 +max_connections=100 +superuser_reserved_connections=3 +started_utc=2026-07-10T12:48:32.4925113Z +activity_before_test=0 +ok github.com/thebtf/engram/internal/db/gorm 24.267s +test_exit=0 +activity_after_test_process=0 +database_residue=0 +activity_residue=0 +finished_utc=2026-07-10T12:49:00.3129799Z diff --git a/.agent/reports/evidence/production-ready/db-test-pool-hygiene/10-candidate-race.log b/.agent/reports/evidence/production-ready/db-test-pool-hygiene/10-candidate-race.log new file mode 100644 index 00000000..164fd019 --- /dev/null +++ b/.agent/reports/evidence/production-ready/db-test-pool-hygiene/10-candidate-race.log @@ -0,0 +1,14 @@ +base_sha=bd68c05baf4b7250096dd84f56bebea2aa555970 +head_sha=bd68c05baf4b7250096dd84f56bebea2aa555970 +database=engram_mkr_dbph_candidate_race_a +command=go test -race -p=1 ./internal/db/gorm -run ^(TestOpenCandidateTestDB_|TestCandidateStore_) -count=1 +max_connections=100 +superuser_reserved_connections=3 +started_utc=2026-07-10T12:49:15.0953890Z +activity_before_test=0 +ok github.com/thebtf/engram/internal/db/gorm 8.798s +test_exit=0 +activity_after_test_process=0 +database_residue=0 +activity_residue=0 +finished_utc=2026-07-10T12:49:28.3723859Z diff --git a/.agent/reports/evidence/production-ready/db-test-pool-hygiene/11-parent-successor-comparison.txt b/.agent/reports/evidence/production-ready/db-test-pool-hygiene/11-parent-successor-comparison.txt new file mode 100644 index 00000000..736ee7c6 --- /dev/null +++ b/.agent/reports/evidence/production-ready/db-test-pool-hygiene/11-parent-successor-comparison.txt @@ -0,0 +1,34 @@ +base_sha=bd68c05baf4b7250096dd84f56bebea2aa555970 +parent_command=go test -p=1 ./internal/db/gorm -count=1 -v +successor_command=go test -p=1 ./internal/db/gorm -count=1 -v +max_connections=100 +superuser_reserved_connections=3 + +parent_semantic_failures=6 +successor_semantic_failures=6 +shared_semantic_failure_set: +- TestMigration144_RuleGovernanceEscapeConstraints +- TestMigration144_RuleGovernanceRollbackAndReapply +- TestMigration144_RuleGovernanceSnapshotStatusesAcceptExtendedStates +- TestRuleGovernanceStore_AnnotatedCandidateWaitsUntilReviewAfter +- TestRuleGovernanceStore_GetLifecycleHealthAggregatesGovernanceTables +- TestRuleGovernanceStore_GetLifecycleHealthOmitsGlobalArbiterRunsForProjectScopedReads + +parent_secondary_client_exhaustion_failures=6 +parent_only_failure_set: +- TestTemporalTruthStore_LoadSelectedRecordsUsesDBNowForValidFrom +- TestTemporalTruthStore_RefreshProjectBoundsPredecessorFromSuccessorChain +- TestTemporalTruthStore_RefreshProjectRejectsSingleWriteAndUnsupportedChains +- TestTokenStore_CreateWithPrincipalRejectsKindWithoutPrincipal +- TestTokenStore_CreateWithPrincipalRoundTrip +- TestTranscriptStore_Lifecycle + +successor_only_failure_set=none +parent_too_many_clients_occurrences=9 +successor_too_many_clients_occurrences=0 +parent_database_residue=0 +parent_activity_residue=0 +successor_database_residue=0 +successor_activity_residue=0 + +verdict=client-exhaustion class removed; the exact six unrelated governance/migration failures remain visible and unchanged diff --git a/.agent/reports/evidence/production-ready/db-test-pool-hygiene/12-static-gates.txt b/.agent/reports/evidence/production-ready/db-test-pool-hygiene/12-static-gates.txt new file mode 100644 index 00000000..184376c2 --- /dev/null +++ b/.agent/reports/evidence/production-ready/db-test-pool-hygiene/12-static-gates.txt @@ -0,0 +1,8 @@ +go_version=go1.25.11 windows/amd64 +command=go vet ./... +exit_code=0 +command=go build ./... +exit_code=0 +command=git diff --check +exit_code=0 +coverage=N/A: only *_test.go infrastructure changed; Go production coverage does not instrument test helpers diff --git a/.agent/reports/evidence/production-ready/db-test-pool-hygiene/13-final-residue.log b/.agent/reports/evidence/production-ready/db-test-pool-hygiene/13-final-residue.log new file mode 100644 index 00000000..8e13b980 --- /dev/null +++ b/.agent/reports/evidence/production-ready/db-test-pool-hygiene/13-final-residue.log @@ -0,0 +1,11 @@ +checked_utc=2026-07-10T13:00:03.1981568Z +database_prefix=engram_mkr_dbph_ +database_residue=0 +activity_residue=0 +go_or_test_process_residue=0 +socraticode_index_residue=0 +socraticode_watcher_residue=0 +serena_generated_dir_exists=false +temporary_worktree_residue=0 +maker_worktree_entries=1 +maker_worktree_note=the single assigned dbph worktree is intentionally retained for checker handoff diff --git a/.agent/reports/evidence/production-ready/db-test-pool-hygiene/DB-TEST-POOL-HYGIENE.final.json b/.agent/reports/evidence/production-ready/db-test-pool-hygiene/DB-TEST-POOL-HYGIENE.final.json new file mode 100644 index 00000000..369b6179 --- /dev/null +++ b/.agent/reports/evidence/production-ready/db-test-pool-hygiene/DB-TEST-POOL-HYGIENE.final.json @@ -0,0 +1,43 @@ +{ + "status": "READY_FOR_CHECK", + "parent_sha": "bd68c05baf4b7250096dd84f56bebea2aa555970", + "branch": "work/prc-db-test-pool-hygiene", + "changed_implementation_paths": [ + "internal/db/gorm/candidate_store_test.go" + ], + "preexisting_helper_call_sites_closed": 76, + "parent_red": { + "session_baseline": 0, + "sessions_after_child_owners": [1, 2, 3, 4], + "exit_code": 1 + }, + "successor_green": { + "child_live_sessions": 1, + "sessions_after_owner_cleanup": 0, + "repeat_count": 20, + "focused_race_exit": 0, + "candidate_repeat_count": 5, + "candidate_race_exit": 0 + }, + "broad_comparison": { + "max_connections": 100, + "parent_semantic_failures": 6, + "successor_semantic_failures": 6, + "parent_secondary_client_exhaustion_failures": 6, + "parent_too_many_clients_occurrences": 9, + "successor_too_many_clients_occurrences": 0 + }, + "static_gates": { + "go_vet_all": 0, + "go_build_all": 0, + "git_diff_check": 0, + "coverage": null, + "coverage_reason": "only *_test.go infrastructure changed" + }, + "residue": { + "database": 0, + "postgres_sessions": 0 + }, + "handoff_sha": null, + "handoff_sha_reason": "reported after the single commit because a commit cannot contain its own hash" +} diff --git a/.agent/reports/evidence/production-ready/db-test-pool-hygiene/DB-TEST-POOL-HYGIENE.red.json b/.agent/reports/evidence/production-ready/db-test-pool-hygiene/DB-TEST-POOL-HYGIENE.red.json new file mode 100644 index 00000000..145b3e36 --- /dev/null +++ b/.agent/reports/evidence/production-ready/db-test-pool-hygiene/DB-TEST-POOL-HYGIENE.red.json @@ -0,0 +1,14 @@ +{ + "task_id": "DB-TEST-POOL-HYGIENE", + "parent_sha": "bd68c05baf4b7250096dd84f56bebea2aa555970", + "observed_at": "2026-07-10T12:41:38.9724244Z", + "test_file": "internal/db/gorm/candidate_store_test.go", + "test_name": "TestOpenCandidateTestDB_SubtestOwnerClosesPoolWithoutPrematureClose", + "invariant": "a child-owned candidate test DB pool remains usable inside the subtest and is closed before t.Run returns to its parent", + "failure_reason": "four sequential child subtests accumulated four PostgreSQL sessions instead of returning to the zero-session baseline", + "runner_stdout_excerpt": "baseline_sessions=0 child_live_sessions=1; sessions_after_owner_cleanup=1 ... child_live_sessions=4; sessions_after_owner_cleanup=4", + "evidence_log": "02-parent-red.log", + "exit_code": 1, + "database_residue": 0, + "activity_residue": 0 +} diff --git a/.agent/reports/evidence/production-ready/db-test-pool-hygiene/Invoke-DBPoolHygieneGo.ps1 b/.agent/reports/evidence/production-ready/db-test-pool-hygiene/Invoke-DBPoolHygieneGo.ps1 new file mode 100644 index 00000000..9f3d063e --- /dev/null +++ b/.agent/reports/evidence/production-ready/db-test-pool-hygiene/Invoke-DBPoolHygieneGo.ps1 @@ -0,0 +1,124 @@ +param( + [Parameter(Mandatory = $true)] + [ValidatePattern('^engram_mkr_dbph_[a-z0-9_]+$')] + [string]$DatabaseName, + + [Parameter(Mandatory = $true)] + [string]$LogPath, + + [Parameter(Mandatory = $true, ValueFromRemainingArguments = $true)] + [string[]]$GoArgs +) + +$ErrorActionPreference = 'Stop' +$container = 'engram-prc-postgres' +$worktree = 'D:\Dev\engram\.agent\worktrees\dbph' +$baseCommit = 'bd68c05baf4b7250096dd84f56bebea2aa555970' +$logDirectory = Split-Path -Parent $LogPath +New-Item -ItemType Directory -Force -Path $logDirectory | Out-Null + +$containerEnv = @{} +$inspectEnv = docker inspect --format '{{range .Config.Env}}{{println .}}{{end}}' $container +if ($LASTEXITCODE -ne 0) { + throw "docker inspect failed for $container" +} +foreach ($line in $inspectEnv) { + $parts = $line -split '=', 2 + if ($parts.Count -eq 2) { + $containerEnv[$parts[0]] = $parts[1] + } +} +$pgUser = $containerEnv['POSTGRES_USER'] +$pgPassword = $containerEnv['POSTGRES_PASSWORD'] +if ([string]::IsNullOrWhiteSpace($pgUser) -or [string]::IsNullOrWhiteSpace($pgPassword)) { + throw 'POSTGRES_USER/POSTGRES_PASSWORD are unavailable from the test container' +} + +$portLine = docker port $container 5432/tcp | Select-Object -First 1 +if ($LASTEXITCODE -ne 0 -or $portLine -notmatch ':(\d+)$') { + throw "could not resolve host PostgreSQL port for $container" +} +$hostPort = $Matches[1] + +function Invoke-TestPsql { + param( + [Parameter(Mandatory = $true)][string]$Database, + [Parameter(Mandatory = $true)][string]$Sql + ) + $output = docker exec -e "PGPASSWORD=$pgPassword" $container psql -v ON_ERROR_STOP=1 -U $pgUser -d $Database -Atc $Sql + if ($LASTEXITCODE -ne 0) { + throw "psql failed against $Database" + } + return $output +} + +function Write-Evidence { + param([Parameter(Mandatory = $true)][AllowEmptyString()][string]$Line) + $Line | Tee-Object -FilePath $LogPath -Append +} + +if (Test-Path -LiteralPath $LogPath) { + Remove-Item -LiteralPath $LogPath -Force +} + +$existing = Invoke-TestPsql -Database postgres -Sql "SELECT count(*) FROM pg_database WHERE datname = '$DatabaseName';" +if ([int]$existing -ne 0) { + throw "test database already exists: $DatabaseName" +} + +$currentHead = git -C $worktree rev-parse HEAD +if ($LASTEXITCODE -ne 0) { + throw 'could not resolve maker worktree HEAD' +} +Write-Evidence "base_sha=$baseCommit" +Write-Evidence "head_sha=$currentHead" +Write-Evidence "database=$DatabaseName" +Write-Evidence "command=go $($GoArgs -join ' ')" +Write-Evidence "max_connections=$(Invoke-TestPsql -Database postgres -Sql 'SHOW max_connections;')" +Write-Evidence "superuser_reserved_connections=$(Invoke-TestPsql -Database postgres -Sql 'SHOW superuser_reserved_connections;')" +Write-Evidence "started_utc=$([DateTime]::UtcNow.ToString('o'))" + +$testExit = 99 +$cleanupFailed = $false +try { + Invoke-TestPsql -Database postgres -Sql "CREATE DATABASE `"$DatabaseName`";" | Out-Null + $escapedUser = [uri]::EscapeDataString($pgUser) + $escapedPassword = [uri]::EscapeDataString($pgPassword) + $env:DATABASE_DSN = "postgres://${escapedUser}:${escapedPassword}@127.0.0.1:${hostPort}/${DatabaseName}?sslmode=disable" + Write-Evidence "activity_before_test=$(Invoke-TestPsql -Database postgres -Sql "SELECT count(*) FROM pg_stat_activity WHERE datname = '$DatabaseName';")" + + Push-Location $worktree + try { + & go @GoArgs 2>&1 | Tee-Object -FilePath $LogPath -Append + $testExit = $LASTEXITCODE + } + finally { + Pop-Location + } + Write-Evidence "test_exit=$testExit" +} +finally { + try { + $activeAfter = Invoke-TestPsql -Database postgres -Sql "SELECT count(*) FROM pg_stat_activity WHERE datname = '$DatabaseName';" + Write-Evidence "activity_after_test_process=$activeAfter" + Invoke-TestPsql -Database postgres -Sql "SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE datname = '$DatabaseName' AND pid <> pg_backend_pid();" | Out-Null + Invoke-TestPsql -Database postgres -Sql "DROP DATABASE IF EXISTS `"$DatabaseName`" WITH (FORCE);" | Out-Null + $databaseResidue = Invoke-TestPsql -Database postgres -Sql "SELECT count(*) FROM pg_database WHERE datname = '$DatabaseName';" + $activityResidue = Invoke-TestPsql -Database postgres -Sql "SELECT count(*) FROM pg_stat_activity WHERE datname = '$DatabaseName';" + Write-Evidence "database_residue=$databaseResidue" + Write-Evidence "activity_residue=$activityResidue" + Write-Evidence "finished_utc=$([DateTime]::UtcNow.ToString('o'))" + if ([int]$databaseResidue -ne 0 -or [int]$activityResidue -ne 0) { + $cleanupFailed = $true + } + } + catch { + $cleanupFailed = $true + Write-Evidence "cleanup_error=$($_.Exception.Message)" + } +} + +if ($cleanupFailed) { + exit 97 +} +exit $testExit diff --git a/.agent/reports/evidence/production-ready/db-test-pool-hygiene/MANIFEST.json b/.agent/reports/evidence/production-ready/db-test-pool-hygiene/MANIFEST.json new file mode 100644 index 00000000..d4bac5e7 --- /dev/null +++ b/.agent/reports/evidence/production-ready/db-test-pool-hygiene/MANIFEST.json @@ -0,0 +1,98 @@ +{ + "generated_utc": "2026-07-10T13:06:01.5072722Z", + "parent_sha": "bd68c05baf4b7250096dd84f56bebea2aa555970", + "branch": "work/prc-db-test-pool-hygiene", + "status": "READY_FOR_CHECK", + "entries": [ + { + "path": ".agent/reports/2026-07-10-db-test-pool-hygiene-maker.md", + "bytes": 5908, + "sha256": "937c4b815e8a96d72ca514a1e0fd36bbc46f6e2c20be360604b9c5acdb92cab6" + }, + { + "path": ".agent/reports/evidence/production-ready/db-test-pool-hygiene/01-parent-broad.summary.log", + "bytes": 3598, + "sha256": "d1aa9c7a603a140be74bccc1170e78bfa2007f8aca0e48473c5b5a749a97c435" + }, + { + "path": ".agent/reports/evidence/production-ready/db-test-pool-hygiene/02-parent-red.log", + "bytes": 6718, + "sha256": "765e7e93a5b9a2384d0417199cdd66dc816f97e178219473d18b7b0a93cd31a7" + }, + { + "path": ".agent/reports/evidence/production-ready/db-test-pool-hygiene/03-green-focused.log", + "bytes": 6358, + "sha256": "9fbe284df01cece683d0dc6938b370dabbea030af3e39047f382e9e3c3cd4d9b" + }, + { + "path": ".agent/reports/evidence/production-ready/db-test-pool-hygiene/04-prove-it.log", + "bytes": 6716, + "sha256": "b9acc25599272b3942beaaaabd5a042c86128765e3d8b1b9ad142b6b0d1fc20f" + }, + { + "path": ".agent/reports/evidence/production-ready/db-test-pool-hygiene/05-post-prove-green.log", + "bytes": 561, + "sha256": "053f89d836427c51e34214ea20d708f6cca16b5078034f08263a9af2caec0f9c" + }, + { + "path": ".agent/reports/evidence/production-ready/db-test-pool-hygiene/06-repeat20.log", + "bytes": 559, + "sha256": "27f91058ef2f24c18445f0757373e27040f0004154ef93ad4017b612c830eca9" + }, + { + "path": ".agent/reports/evidence/production-ready/db-test-pool-hygiene/07-race.log", + "bytes": 561, + "sha256": "3d1b59a1852b5cb6709b3a2997c34f6b0d940dfd0bec18984776363b0a027a5f" + }, + { + "path": ".agent/reports/evidence/production-ready/db-test-pool-hygiene/08-successor-broad.summary.log", + "bytes": 1196, + "sha256": "69486af589b72b841163a134b26ae21396156be6b737f9750ffc1c17c1151db2" + }, + { + "path": ".agent/reports/evidence/production-ready/db-test-pool-hygiene/09-candidate-repeat5.log", + "bytes": 546, + "sha256": "432f97671e9a9b0c3a37f25a54cc9ea8b623e4904f69c846c0fffa70c3557e49" + }, + { + "path": ".agent/reports/evidence/production-ready/db-test-pool-hygiene/10-candidate-race.log", + "bytes": 549, + "sha256": "57a31b83602ce023094fd05bdbcea11dee6cc4c5cca0b21df25b70010bfd224b" + }, + { + "path": ".agent/reports/evidence/production-ready/db-test-pool-hygiene/11-parent-successor-comparison.txt", + "bytes": 1489, + "sha256": "1137da3adb9e75c178072ae942fadd1c23c56721388e202c942d56901ea17db1" + }, + { + "path": ".agent/reports/evidence/production-ready/db-test-pool-hygiene/12-static-gates.txt", + "bytes": 249, + "sha256": "94ca19b3d51903449acefc41241e8c397198453f4c6674bed1a2dc61ea49b5f4" + }, + { + "path": ".agent/reports/evidence/production-ready/db-test-pool-hygiene/13-final-residue.log", + "bytes": 387, + "sha256": "31b07bacde4ad835c55a4aa85e09f01edd2dfeb0887011547b4b17d4f686b40e" + }, + { + "path": ".agent/reports/evidence/production-ready/db-test-pool-hygiene/DB-TEST-POOL-HYGIENE.final.json", + "bytes": 1253, + "sha256": "1c0d9251885329624a470bb2872feabe4f1c5e09c8434d8784561da92a13a645" + }, + { + "path": ".agent/reports/evidence/production-ready/db-test-pool-hygiene/DB-TEST-POOL-HYGIENE.red.json", + "bytes": 842, + "sha256": "98398e3e46628fd0f3f08ca54b1baa1b96f70554ac7316712a4e1906d96e0cb0" + }, + { + "path": ".agent/reports/evidence/production-ready/db-test-pool-hygiene/Invoke-DBPoolHygieneGo.ps1", + "bytes": 4848, + "sha256": "fb886ee1749c7b2d45adf9bd43ac2a1434cab24c9ce35bb548f1751bd9e71861" + }, + { + "path": "internal/db/gorm/candidate_store_test.go", + "bytes": 47016, + "sha256": "62260c1a2e0705b065295322dd23fcf9b17fd47cb5ebc64134630788e2d23e09" + } + ] +} diff --git a/.agent/reports/evidence/production-ready/db-test-pool-hygiene/SHA256SUMS.txt b/.agent/reports/evidence/production-ready/db-test-pool-hygiene/SHA256SUMS.txt new file mode 100644 index 00000000..d676da06 --- /dev/null +++ b/.agent/reports/evidence/production-ready/db-test-pool-hygiene/SHA256SUMS.txt @@ -0,0 +1,19 @@ +937c4b815e8a96d72ca514a1e0fd36bbc46f6e2c20be360604b9c5acdb92cab6 .agent/reports/2026-07-10-db-test-pool-hygiene-maker.md +d1aa9c7a603a140be74bccc1170e78bfa2007f8aca0e48473c5b5a749a97c435 .agent/reports/evidence/production-ready/db-test-pool-hygiene/01-parent-broad.summary.log +765e7e93a5b9a2384d0417199cdd66dc816f97e178219473d18b7b0a93cd31a7 .agent/reports/evidence/production-ready/db-test-pool-hygiene/02-parent-red.log +9fbe284df01cece683d0dc6938b370dabbea030af3e39047f382e9e3c3cd4d9b .agent/reports/evidence/production-ready/db-test-pool-hygiene/03-green-focused.log +b9acc25599272b3942beaaaabd5a042c86128765e3d8b1b9ad142b6b0d1fc20f .agent/reports/evidence/production-ready/db-test-pool-hygiene/04-prove-it.log +053f89d836427c51e34214ea20d708f6cca16b5078034f08263a9af2caec0f9c .agent/reports/evidence/production-ready/db-test-pool-hygiene/05-post-prove-green.log +27f91058ef2f24c18445f0757373e27040f0004154ef93ad4017b612c830eca9 .agent/reports/evidence/production-ready/db-test-pool-hygiene/06-repeat20.log +3d1b59a1852b5cb6709b3a2997c34f6b0d940dfd0bec18984776363b0a027a5f .agent/reports/evidence/production-ready/db-test-pool-hygiene/07-race.log +69486af589b72b841163a134b26ae21396156be6b737f9750ffc1c17c1151db2 .agent/reports/evidence/production-ready/db-test-pool-hygiene/08-successor-broad.summary.log +432f97671e9a9b0c3a37f25a54cc9ea8b623e4904f69c846c0fffa70c3557e49 .agent/reports/evidence/production-ready/db-test-pool-hygiene/09-candidate-repeat5.log +57a31b83602ce023094fd05bdbcea11dee6cc4c5cca0b21df25b70010bfd224b .agent/reports/evidence/production-ready/db-test-pool-hygiene/10-candidate-race.log +1137da3adb9e75c178072ae942fadd1c23c56721388e202c942d56901ea17db1 .agent/reports/evidence/production-ready/db-test-pool-hygiene/11-parent-successor-comparison.txt +94ca19b3d51903449acefc41241e8c397198453f4c6674bed1a2dc61ea49b5f4 .agent/reports/evidence/production-ready/db-test-pool-hygiene/12-static-gates.txt +31b07bacde4ad835c55a4aa85e09f01edd2dfeb0887011547b4b17d4f686b40e .agent/reports/evidence/production-ready/db-test-pool-hygiene/13-final-residue.log +1c0d9251885329624a470bb2872feabe4f1c5e09c8434d8784561da92a13a645 .agent/reports/evidence/production-ready/db-test-pool-hygiene/DB-TEST-POOL-HYGIENE.final.json +98398e3e46628fd0f3f08ca54b1baa1b96f70554ac7316712a4e1906d96e0cb0 .agent/reports/evidence/production-ready/db-test-pool-hygiene/DB-TEST-POOL-HYGIENE.red.json +fb886ee1749c7b2d45adf9bd43ac2a1434cab24c9ce35bb548f1751bd9e71861 .agent/reports/evidence/production-ready/db-test-pool-hygiene/Invoke-DBPoolHygieneGo.ps1 +9af2a11b4a9aeea2ac0fc8466eb0a0070b4f832df8106043823a5cc5ddb289f2 .agent/reports/evidence/production-ready/db-test-pool-hygiene/MANIFEST.json +62260c1a2e0705b065295322dd23fcf9b17fd47cb5ebc64134630788e2d23e09 internal/db/gorm/candidate_store_test.go diff --git a/internal/db/gorm/candidate_store_test.go b/internal/db/gorm/candidate_store_test.go index ad35a6d4..7337f1bd 100644 --- a/internal/db/gorm/candidate_store_test.go +++ b/internal/db/gorm/candidate_store_test.go @@ -31,6 +31,11 @@ func openCandidateTestDB(t *testing.T) *gorm.DB { sqlDB, err := db.DB() require.NoError(t, err) + t.Cleanup(func() { + if err := sqlDB.Close(); err != nil { + t.Errorf("close candidate test DB pool: %v", err) + } + }) require.NoError(t, sqlDB.Ping()) // Ensure migration chain is applied. @@ -38,6 +43,53 @@ func openCandidateTestDB(t *testing.T) *gorm.DB { return db } +// TestOpenCandidateTestDB_SubtestOwnerClosesPoolWithoutPrematureClose protects +// the test-process connection budget. Each child owns the pool it opens: the +// pool must remain usable for the child's body, then disappear before t.Run +// returns control to the parent. +func TestOpenCandidateTestDB_SubtestOwnerClosesPoolWithoutPrematureClose(t *testing.T) { + observer := openCandidateTestDB(t) + baseline := candidateTestDBOtherSessionCount(t, observer) + + for i := 0; i < 4; i++ { + t.Run(fmt.Sprintf("owner-%d", i), func(t *testing.T) { + child := openCandidateTestDB(t) + + var one int + require.NoError(t, child.Raw("SELECT 1").Scan(&one).Error) + require.Equal(t, 1, one, "owner pool must remain usable during the subtest") + + live := candidateTestDBOtherSessionCount(t, observer) + t.Logf("baseline_sessions=%d child_live_sessions=%d", baseline, live) + require.Greater(t, live, baseline, "child pool must be observable before owner cleanup") + }) + + deadline := time.Now().Add(time.Second) + after := candidateTestDBOtherSessionCount(t, observer) + for after != baseline && time.Now().Before(deadline) { + time.Sleep(10 * time.Millisecond) + after = candidateTestDBOtherSessionCount(t, observer) + } + t.Logf("baseline_sessions=%d sessions_after_owner_cleanup=%d", baseline, after) + if after != baseline { + t.Errorf("child pool leaked past owner cleanup: baseline=%d after=%d", baseline, after) + } + } +} + +func candidateTestDBOtherSessionCount(t *testing.T, observer *gorm.DB) int64 { + t.Helper() + + var count int64 + require.NoError(t, observer.Raw(` + SELECT count(*) + FROM pg_stat_activity + WHERE datname = current_database() + AND pid <> pg_backend_pid() + `).Scan(&count).Error) + return count +} + // TestCandidateStore_CRUDRoundtrip creates, retrieves, and lists a candidate. func TestCandidateStore_CRUDRoundtrip(t *testing.T) { db := openCandidateTestDB(t) From 580b0cd0ff38bb55a5195a8004e60234a824b7a8 Mon Sep 17 00:00:00 2001 From: Kirill Turanskiy Date: Fri, 10 Jul 2026 16:13:53 +0300 Subject: [PATCH 026/111] docs(evidence): prove portable embedding hashes --- .../ARTIFACTS.sha256 | 10 ++ .../maker-report.md | 114 ++++++++++++++++++ .../verification-observations.v1.json | 96 +++++++++++++++ .../verify-manifest.cjs | 101 +++++++++++++++- 4 files changed, 319 insertions(+), 2 deletions(-) create mode 100644 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/ARTIFACTS.sha256 create mode 100644 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/maker-report.md create mode 100644 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verification-observations.v1.json diff --git a/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/ARTIFACTS.sha256 b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/ARTIFACTS.sha256 new file mode 100644 index 00000000..2a62166c --- /dev/null +++ b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/ARTIFACTS.sha256 @@ -0,0 +1,10 @@ +# manifest-version=1 +# algorithm=sha256 +# representation=canonical-lf-files +# checkout-equivalence=crlf-to-lf-with-no-bare-cr +# self-entry=excluded-to-avoid-recursion +5d932e6acf104bf9eff291409b50961007512e09e91d78401257a018fcb780f4 .agent/reports/evidence/production-ready/db-embedding-stats/SHA256SUMS.txt +e3e9fd6250d4ead502a01ec81bb7901ad658d74845184a10b6f153276a1bd12f .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/content-manifest.v1.json +e0a397c8002a1722ad5d8b4b251316dc4b2edd456f37ec0827c97ccf126dccad .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.cjs +a6d16bdc957c16906491b071c4d7e6b9995070c8a8b5e4309a22c3bce0bafe7c .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verification-observations.v1.json +d53b54055b08069a897f372fcd70e150ab24e4da9838630deef4e4e219955b8c .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/maker-report.md diff --git a/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/maker-report.md b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/maker-report.md new file mode 100644 index 00000000..cf3956cd --- /dev/null +++ b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/maker-report.md @@ -0,0 +1,114 @@ +# DB-EMBEDDING-EVIDENCE-TRANSPORT Maker Report + +Date: 2026-07-10 +Role: maker +Finish state: **READY_FOR_CHECK** + +## Exact boundary + +- Accepted product source commit: `38d6a4fb7ff5f5ae3b6c0066c0a1b806421137df` +- Product parent: `dc891b2d72b1fd63b83e4a630a249241fc389151` +- Evidence implementation commit: `462c97dd889b4afbc84d1ddc07613d748604afee` +- Branch: `work/prc-db-embedding-evidence-transport` +- Worktree: `D:/Dev/engram/.agent/worktrees/db-embedding-evidence-transport` +- Allowed writes: embedding evidence/report namespace only +- Forbidden writes honored: product/source/test bytes, canonical register/Markdown/HTML, integration branch, protected role/session/oracle state + +This slice repairs evidence transport only. It neither changes nor re-accepts product behavior. + +## Defect reproduced + +The original seven-line `SHA256SUMS.txt` contained correct SHA-256 values for the exact source commit Git blob contents but did not name that representation. A normal Windows checkout inherited `core.autocrlf=true`; `git ls-files --eol` reported `i/lf w/crlf` for all seven entries. Therefore: + +- raw checkout hashes matched `0/7`; +- exact Git object hashes matched `7/7`; +- strict CRLF-to-LF canonical checkout hashes matched `7/7`; +- no file contained a bare carriage return. + +The old generic fresh-checkout interpretation was therefore ambiguous, not corrupt. + +## Repair + +The existing manifest now carries parseable metadata: + +- `algorithm=sha256` +- `representation=git-blob-content` +- full `source-commit` +- contract and verifier paths +- checkout equivalence: replace CRLF byte pairs with LF and reject bare CR + +`content-manifest.v1.json` is the authoritative machine-readable contract. Every one of its seven entries binds: + +- repository-relative path; +- exact SHA-1 Git blob OID at the accepted source commit; +- exact Git blob byte length; +- SHA-256 of the Git blob content. + +`verify-manifest.cjs` fails closed on metadata disagreement, entry/order disagreement, duplicate paths, non-ancestor execution, blob OID/length/SHA disagreement, checkout content disagreement, or a bare CR. It supports: + +- `--mode=git-object` — reads exact bytes with `git cat-file blob :`; +- `--mode=checkout-lf` — canonicalizes only CRLF pairs, rejects bare CR, then requires byte identity with the Git blob; +- `--mode=legacy-raw-audit` — exposes raw-checkout mismatch without treating raw bytes as the contract. + +## Two-checkout proof + +### Normal Windows checkout + +Materialization: + +```text +git worktree add -b work/prc-db-embedding-evidence-transport .agent/worktrees/db-embedding-evidence-transport 38d6a4fb7ff5f5ae3b6c0066c0a1b806421137df +``` + +Observed `core.autocrlf=true` and `w/crlf` for all seven paths. + +| Command mode | Exit | Status | Result | +| --- | ---: | --- | --- | +| `legacy-raw-audit` | 0 | `AMBIGUOUS_RAW_CHECKOUT_CONFIRMED` | raw `0/7`, Git object `7/7`, canonical LF `7/7` | +| `git-object` | 0 | `PASS` | declared representation `7/7` | +| `checkout-lf` | 0 | `PASS` | declared checkout equivalence `7/7`, bare CR `0` | + +### LF-materialized checkout + +Materialization: + +```text +git -c core.autocrlf=false worktree add --detach .agent/worktrees/db-embedding-evidence-lf-proof 462c97dd889b4afbc84d1ddc07613d748604afee +``` + +`git ls-files --eol` reported `i/lf w/lf` for all seven paths. + +| Command mode | Exit | Status | Result | +| --- | ---: | --- | --- | +| `git-object` | 0 | `PASS` | declared representation `7/7`; raw and canonical views also `7/7` | +| `checkout-lf` | 0 | `PASS` | declared checkout equivalence `7/7`, bare CR `0` | + +The LF proof worktree was clean before removal. Its path and Git worktree registration were removed. + +Machine-readable observations: `verification-observations.v1.json`. + +## No-product-change proof + +The accepted product files retain their exact source-commit blobs and SHA-256 values: + +| Path | Git blob OID | Git-blob SHA-256 | +| --- | --- | --- | +| `internal/embedding/store.go` | `1abaee96b07583f9fd824ed03c40b043c490b567` | `7bfb06dfc0dda792147d5e2df9d2fe68b59edaac55d2396dece1b8a8a09eee5f` | +| `internal/embedding/store_stats_test.go` | `d381643deadbb42e8a9a07fc9375a6cdfedbdccc` | `a35a234eb167c58bf201afc50954e43926a69ba2294536f2d0fabf4e015b12a4` | + +`git diff 38d6a4fb... -- internal/embedding/store.go internal/embedding/store_stats_test.go` is empty. The full branch delta is restricted to the augmented embedding manifest and the new embedding evidence-transport namespace. + +No Go test or PostgreSQL mutation was needed because this follow-up changes no executable product/test byte. Verification is the executable Node verifier, exact Git ancestry/diff/blob checks, both checkout forms, and artifact hashing. + +## Reproduction commands + +Run from either checkout form: + +```text +node --check .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.cjs +node .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.cjs --mode=git-object +node .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.cjs --mode=checkout-lf +node .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.cjs --mode=artifact-files +``` + +The independent checker must run these against the exact branch head in a fresh checkout, verify the two product blob OIDs and SHA-256 values remain unchanged, challenge the manifest parser/fail-closed behavior, and confirm no residue or out-of-bound path exists. diff --git a/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verification-observations.v1.json b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verification-observations.v1.json new file mode 100644 index 00000000..398fffc4 --- /dev/null +++ b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verification-observations.v1.json @@ -0,0 +1,96 @@ +{ + "schema_version": 1, + "slice": "DB-EMBEDDING-EVIDENCE-TRANSPORT", + "source_commit": "38d6a4fb7ff5f5ae3b6c0066c0a1b806421137df", + "contract_implementation_commit": "462c97dd889b4afbc84d1ddc07613d748604afee", + "raw_checkout_bytes_are_not_the_contract": true, + "observations": [ + { + "checkout": "windows-autocrlf-true", + "materialization": "git worktree add -b work/prc-db-embedding-evidence-transport .agent/worktrees/db-embedding-evidence-transport 38d6a4fb7ff5f5ae3b6c0066c0a1b806421137df", + "core_autocrlf": "true", + "tracked_eol_counts": { + "crlf": 7 + }, + "command": "node .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.cjs --mode=legacy-raw-audit", + "exit_code": 0, + "status": "AMBIGUOUS_RAW_CHECKOUT_CONFIRMED", + "total": 7, + "raw_checkout_matches": 0, + "git_object_matches": 7, + "checkout_lf_matches": 7, + "structural_errors": 0 + }, + { + "checkout": "windows-autocrlf-true", + "core_autocrlf": "true", + "tracked_eol_counts": { + "crlf": 7 + }, + "command": "node .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.cjs --mode=git-object", + "exit_code": 0, + "status": "PASS", + "total": 7, + "matched": 7, + "git_object_matches": 7, + "source_commit_is_ancestor": true, + "structural_errors": 0 + }, + { + "checkout": "windows-autocrlf-true", + "core_autocrlf": "true", + "tracked_eol_counts": { + "crlf": 7 + }, + "command": "node .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.cjs --mode=checkout-lf", + "exit_code": 0, + "status": "PASS", + "total": 7, + "matched": 7, + "checkout_lf_matches": 7, + "bare_carriage_returns": 0, + "source_commit_is_ancestor": true, + "structural_errors": 0 + }, + { + "checkout": "lf-materialized", + "materialization": "git -c core.autocrlf=false worktree add --detach .agent/worktrees/db-embedding-evidence-lf-proof 462c97dd889b4afbc84d1ddc07613d748604afee", + "tracked_eol_counts": { + "lf": 7 + }, + "command": "node .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.cjs --mode=git-object", + "exit_code": 0, + "status": "PASS", + "total": 7, + "matched": 7, + "git_object_matches": 7, + "raw_checkout_matches": 7, + "checkout_lf_matches": 7, + "source_commit_is_ancestor": true, + "structural_errors": 0 + }, + { + "checkout": "lf-materialized", + "tracked_eol_counts": { + "lf": 7 + }, + "command": "node .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.cjs --mode=checkout-lf", + "exit_code": 0, + "status": "PASS", + "total": 7, + "matched": 7, + "git_object_matches": 7, + "raw_checkout_matches": 7, + "checkout_lf_matches": 7, + "bare_carriage_returns": 0, + "source_commit_is_ancestor": true, + "structural_errors": 0 + } + ], + "temporary_lf_worktree_cleanup": { + "path": "D:/Dev/engram/.agent/worktrees/db-embedding-evidence-lf-proof", + "clean_before_remove": true, + "path_removed": true, + "registration_removed": true + } +} diff --git a/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.cjs b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.cjs index e6447463..9d368676 100644 --- a/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.cjs +++ b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.cjs @@ -6,7 +6,7 @@ const fs = require('node:fs'); const path = require('node:path'); const { spawnSync } = require('node:child_process'); -const allowedModes = new Set(['git-object', 'checkout-lf', 'legacy-raw-audit']); +const allowedModes = new Set(['git-object', 'checkout-lf', 'legacy-raw-audit', 'artifact-files']); const modeArgument = process.argv.find((argument) => argument.startsWith('--mode=')); const mode = modeArgument ? modeArgument.slice('--mode='.length) : 'git-object'; @@ -136,8 +136,95 @@ function isAncestor(repoRoot, ancestor, descendant) { throw new Error(`git merge-base --is-ancestor failed (${result.status})`); } +function verifyArtifactFiles(repoRoot, scriptDirectory, sourceCommit, sourceCommitIsAncestor, inheritedErrors) { + const artifactManifestPath = path.join(scriptDirectory, 'ARTIFACTS.sha256'); + const manifest = parseAnnotatedManifest(artifactManifestPath); + const structuralErrors = [...inheritedErrors]; + + if (manifest.metadata['manifest-version'] !== '1') { + structuralErrors.push('artifact manifest-version must be 1'); + } + if (manifest.metadata.algorithm !== 'sha256') { + structuralErrors.push('artifact algorithm must be sha256'); + } + if (manifest.metadata.representation !== 'canonical-lf-files') { + structuralErrors.push('artifact representation must be canonical-lf-files'); + } + if (manifest.metadata['checkout-equivalence'] !== 'crlf-to-lf-with-no-bare-cr') { + structuralErrors.push('artifact checkout equivalence must reject bare CR'); + } + if (manifest.metadata['self-entry'] !== 'excluded-to-avoid-recursion') { + structuralErrors.push('artifact manifest must explicitly declare self exclusion'); + } + if (new Set(manifest.entries.map((entry) => entry.path)).size !== manifest.entries.length) { + structuralErrors.push('artifact manifest paths must be unique'); + } + + const artifactManifestRelativePath = path.relative(repoRoot, artifactManifestPath).split(path.sep).join('/'); + const allowedExactPath = '.agent/reports/evidence/production-ready/db-embedding-stats/SHA256SUMS.txt'; + const allowedPrefix = '.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/'; + const entryResults = manifest.entries.map((entry) => { + const entryPath = path.resolve(repoRoot, ...entry.path.split('/')); + const relativeEntryPath = path.relative(repoRoot, entryPath); + const insideRepository = + relativeEntryPath.length > 0 && + !relativeEntryPath.startsWith(`..${path.sep}`) && + relativeEntryPath !== '..' && + !path.isAbsolute(relativeEntryPath); + const insideOwnedNamespace = entry.path === allowedExactPath || entry.path.startsWith(allowedPrefix); + if (!insideRepository || !insideOwnedNamespace || entry.path === artifactManifestRelativePath) { + return { + path: entry.path, + match: false, + checkout_eol: 'not-read-outside-boundary', + bare_carriage_returns: null, + }; + } + const canonical = canonicalizeCheckout(fs.readFileSync(entryPath)); + const actualHash = sha256(canonical.bytes); + const matches = + canonical.bare_carriage_returns === 0 && + actualHash === entry.sha256; + + return { + path: entry.path, + match: matches, + checkout_eol: eolStyle(canonical), + bare_carriage_returns: canonical.bare_carriage_returns, + }; + }); + + const matched = entryResults.filter((entry) => entry.match).length; + const eolCounts = entryResults.reduce((counts, entry) => { + counts[entry.checkout_eol] = (counts[entry.checkout_eol] || 0) + 1; + return counts; + }, {}); + const status = structuralErrors.length === 0 && matched === entryResults.length ? 'PASS' : 'FAIL'; + const result = { + schema_version: 1, + slice: 'DB-EMBEDDING-EVIDENCE-TRANSPORT', + mode: 'artifact-files', + status, + source_commit: sourceCommit, + source_commit_is_ancestor: sourceCommitIsAncestor, + algorithm: 'sha256', + representation: 'canonical-lf-files', + total: entryResults.length, + matched, + checkout: { + core_autocrlf: getCoreAutocrlf(repoRoot), + eol_counts: eolCounts, + }, + structural_errors: structuralErrors, + entries: entryResults, + }; + + process.stdout.write(`${JSON.stringify(result, null, 2)}\n`); + if (status === 'FAIL') process.exit(1); +} + function main() { - const repoRoot = runGit(['rev-parse', '--show-toplevel'], { encoding: 'utf8' }).trim(); + const repoRoot = path.resolve(runGit(['rev-parse', '--show-toplevel'], { encoding: 'utf8' }).trim()); const scriptDirectory = __dirname; const contractPath = path.join(scriptDirectory, 'content-manifest.v1.json'); const contract = JSON.parse(fs.readFileSync(contractPath, 'utf8')); @@ -183,6 +270,16 @@ function main() { if (!sourceCommitIsAncestor) { structuralErrors.push('source commit is not an ancestor of the executing checkout HEAD'); } + if (mode === 'artifact-files') { + verifyArtifactFiles( + repoRoot, + scriptDirectory, + sourceCommit, + sourceCommitIsAncestor, + structuralErrors, + ); + return; + } const entryResults = contract.entries.map((entry) => { const objectSpec = `${sourceCommit}:${entry.path}`; const blob = runGit(['cat-file', 'blob', objectSpec], { cwd: repoRoot }); From db2cf891dd9c6315fd17220ffe2d02302bea8844 Mon Sep 17 00:00:00 2001 From: Kirill Turanskiy Date: Fri, 10 Jul 2026 16:55:36 +0300 Subject: [PATCH 027/111] fix(evidence): harden embedding manifest verifier --- .../SHA256SUMS.txt | 14 + .../maker-summary.v1.json | 46 +++ .../ARTIFACTS.sha256 | 6 +- .../maker-report.md | 203 +++++++---- .../verification-observations.v1.json | 135 +++++-- .../verify-manifest.cjs | 334 ++++++++++++++++-- .../verify-manifest.test.cjs | 277 +++++++++++++++ ...B-EMBEDDING-EVIDENCE-TRANSPORT-R2.red.json | 9 + ...B-EMBEDDING-EVIDENCE-TRANSPORT-R2.tdd.json | 56 +++ 9 files changed, 936 insertions(+), 144 deletions(-) create mode 100644 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r2/SHA256SUMS.txt create mode 100644 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r2/maker-summary.v1.json create mode 100644 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.test.cjs create mode 100644 .agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R2.red.json create mode 100644 .agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R2.tdd.json diff --git a/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r2/SHA256SUMS.txt b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r2/SHA256SUMS.txt new file mode 100644 index 00000000..6fbef4d2 --- /dev/null +++ b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r2/SHA256SUMS.txt @@ -0,0 +1,14 @@ +# manifest-version=1 +# slice=DB-EMBEDDING-EVIDENCE-TRANSPORT-R2 +# algorithm=sha256 +# representation=canonical-lf-files +# self-entry=excluded-to-avoid-recursion +a08508ce15f5ba89c60971536bd6ef0aa5127b102c52560bcda1c3a829f7fecb .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/ARTIFACTS.sha256 +e3e9fd6250d4ead502a01ec81bb7901ad658d74845184a10b6f153276a1bd12f .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/content-manifest.v1.json +4f46e0f020fd7aae39b327adac7a9070d744f66fa26124f652d25470fa409114 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.cjs +d0fc0a8b57a3dc1f31210a69ec0b85443995883c41ea8ba818e8d95837b315b3 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.test.cjs +d99f3499b2e5c371ababdffc84410e1dcc8b028373ae00483136ae0eb6bf509a .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verification-observations.v1.json +3b7f5ad0abcccd39f0d5ce9349fceb8cca4794e1bf537943e4b38ce629357dbb .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/maker-report.md +5a01028809f642d299891de75148170fa2ade1d2e3e949b86f45a5aa92423249 .agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R2.red.json +ca517588d678f59b86b627a109bdbc0bd8fc1b49cdd5df4a605ec6cb57da206c .agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R2.tdd.json +5e6271fe6eaa8361247221263ac640af426e25be01c88f558e2d85a84773fd65 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r2/maker-summary.v1.json diff --git a/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r2/maker-summary.v1.json b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r2/maker-summary.v1.json new file mode 100644 index 00000000..1e2b5709 --- /dev/null +++ b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r2/maker-summary.v1.json @@ -0,0 +1,46 @@ +{ + "schema_version": 1, + "slice": "DB-EMBEDDING-EVIDENCE-TRANSPORT", + "role": "revision-maker", + "generated_at": "2026-07-10T17:00:14.1820935+03:00", + "exact_base": "580b0cd0ff38bb55a5195a8004e60234a824b7a8", + "product_source_commit": "38d6a4fb7ff5f5ae3b6c0066c0a1b806421137df", + "revision_checkpoint_commit": "53b2ef1931c534e27183126a1aad2d46b3a854b2", + "commit_binding": "containing commit; exact SHA is reported by the handoff to avoid self-reference", + "branch": "work/prc-db-embedding-evidence-transport-r2", + "worktree": "D:/Dev/engram/.agent/worktrees/db-embedding-evidence-transport-r2", + "finish_state": "READY_FOR_CHECK", + "acceptance": { + "canonical_path_validation": "PASS", + "exact_artifact_set_5": "PASS", + "strict_schema_and_semantics": "PASS", + "permanent_adversarial_tests": "18/18", + "crlf_git_object": "7/7", + "crlf_checkout_lf": "7/7", + "crlf_raw": "0/7", + "crlf_artifacts": "5/5", + "lf_git_object": "7/7", + "lf_checkout_lf": "7/7", + "lf_raw": "7/7", + "lf_artifacts": "5/5", + "lf_adversarial_tests": "18/18", + "product_source_test_delta": 0, + "coverage_line_percent": 88.89, + "prove_it_failed_tests": 27 + }, + "temporary_cleanup": { + "lf_path_removed": true, + "lf_registration_removed": true, + "manifest_mutations_restored": true + }, + "forbidden_mutations": { + "primary": 0, + "integration": 0, + "canonical_register_markdown_html": 0, + "role_session_oracle": 0, + "database": 0, + "container": 0, + "product_source_test": 0 + }, + "next_gate": "fresh independent checker" +} diff --git a/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/ARTIFACTS.sha256 b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/ARTIFACTS.sha256 index 2a62166c..92585baa 100644 --- a/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/ARTIFACTS.sha256 +++ b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/ARTIFACTS.sha256 @@ -5,6 +5,6 @@ # self-entry=excluded-to-avoid-recursion 5d932e6acf104bf9eff291409b50961007512e09e91d78401257a018fcb780f4 .agent/reports/evidence/production-ready/db-embedding-stats/SHA256SUMS.txt e3e9fd6250d4ead502a01ec81bb7901ad658d74845184a10b6f153276a1bd12f .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/content-manifest.v1.json -e0a397c8002a1722ad5d8b4b251316dc4b2edd456f37ec0827c97ccf126dccad .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.cjs -a6d16bdc957c16906491b071c4d7e6b9995070c8a8b5e4309a22c3bce0bafe7c .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verification-observations.v1.json -d53b54055b08069a897f372fcd70e150ab24e4da9838630deef4e4e219955b8c .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/maker-report.md +4f46e0f020fd7aae39b327adac7a9070d744f66fa26124f652d25470fa409114 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.cjs +d99f3499b2e5c371ababdffc84410e1dcc8b028373ae00483136ae0eb6bf509a .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verification-observations.v1.json +3b7f5ad0abcccd39f0d5ce9349fceb8cca4794e1bf537943e4b38ce629357dbb .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/maker-report.md diff --git a/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/maker-report.md b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/maker-report.md index cf3956cd..c8271099 100644 --- a/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/maker-report.md +++ b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/maker-report.md @@ -1,114 +1,177 @@ -# DB-EMBEDDING-EVIDENCE-TRANSPORT Maker Report +# DB-EMBEDDING-EVIDENCE-TRANSPORT Revision Maker Report Date: 2026-07-10 -Role: maker +Role: revision maker Finish state: **READY_FOR_CHECK** ## Exact boundary - Accepted product source commit: `38d6a4fb7ff5f5ae3b6c0066c0a1b806421137df` -- Product parent: `dc891b2d72b1fd63b83e4a630a249241fc389151` -- Evidence implementation commit: `462c97dd889b4afbc84d1ddc07613d748604afee` -- Branch: `work/prc-db-embedding-evidence-transport` -- Worktree: `D:/Dev/engram/.agent/worktrees/db-embedding-evidence-transport` -- Allowed writes: embedding evidence/report namespace only -- Forbidden writes honored: product/source/test bytes, canonical register/Markdown/HTML, integration branch, protected role/session/oracle state +- Rejected evidence candidate and exact revision base: + `580b0cd0ff38bb55a5195a8004e60234a824b7a8` +- Pre-packet verification checkpoint: + `53b2ef1931c534e27183126a1aad2d46b3a854b2` +- Branch: `work/prc-db-embedding-evidence-transport-r2` +- Worktree: + `D:/Dev/engram/.agent/worktrees/db-embedding-evidence-transport-r2` +- Allowed writes: this evidence verifier, its permanent self-test, and + DB-EMBEDDING-EVIDENCE-TRANSPORT evidence/report artifacts. +- Forbidden writes honored: product/source/test bytes, primary and integration + worktrees, canonical production-readiness register/Markdown/HTML, and + protected role/session/oracle state. + +The revision is based directly on the rejected evidence candidate, not on the +independent checker commit. It changes no product behavior and does not +self-accept. + +## Reproduced failure + +A permanent Node self-test was written before the verifier changed. Against the +exact rejected candidate it executed 18 test/subtest cases: + +- pass: `1`; +- fail: `17`; +- skipped: `0`; +- process exit: `1`. + +The rejected verifier returned exit `0` for header-only zero entries, missing +and extra entries, namespace traversal, a non-canonical dot alias, invalid +`checkout_equivalence` values, and unknown schema keys. The existing duplicate +entry rejection was the single passing RED case. + +RED evidence: +`.agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R2.red.json`. -This slice repairs evidence transport only. It neither changes nor re-accepts product behavior. +## Repair -## Defect reproduced +### Exact artifact set -The original seven-line `SHA256SUMS.txt` contained correct SHA-256 values for the exact source commit Git blob contents but did not name that representation. A normal Windows checkout inherited `core.autocrlf=true`; `git ls-files --eol` reported `i/lf w/crlf` for all seven entries. Therefore: +`artifact-files` now requires exactly these five canonical paths: -- raw checkout hashes matched `0/7`; -- exact Git object hashes matched `7/7`; -- strict CRLF-to-LF canonical checkout hashes matched `7/7`; -- no file contained a bare carriage return. +1. `.agent/reports/evidence/production-ready/db-embedding-stats/SHA256SUMS.txt` +2. `.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/content-manifest.v1.json` +3. `.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.cjs` +4. `.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verification-observations.v1.json` +5. `.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/maker-report.md` -The old generic fresh-checkout interpretation was therefore ambiguous, not corrupt. +Zero, missing, extra, replaced, and duplicate canonical paths are structural +errors before a PASS can be computed. -## Repair +### Canonical path boundary -The existing manifest now carries parseable metadata: +Every manifest path is validated before filesystem access. Paths must be +non-empty repository-relative POSIX paths that are already normalized. Absolute +paths, backslashes, drive/URI separators, empty segments, `.`, `..`, NUL, +normalization changes, repository escapes, and raw/resolved disagreement are +rejected. Exact-set and containment decisions use the validated normalized path, +never a raw prefix. -- `algorithm=sha256` -- `representation=git-blob-content` -- full `source-commit` -- contract and verifier paths -- checkout equivalence: replace CRLF byte pairs with LF and reject bare CR +### Strict schema and semantics -`content-manifest.v1.json` is the authoritative machine-readable contract. Every one of its seven entries binds: +The JSON contract now rejects missing and unknown keys at the top level, +`representation`, `checkout_equivalence`, and each entry. It pins: -- repository-relative path; -- exact SHA-1 Git blob OID at the accepted source commit; -- exact Git blob byte length; -- SHA-256 of the Git blob content. +- `schema_version=1`; +- `slice=DB-EMBEDDING-EVIDENCE-TRANSPORT`; +- `algorithm=sha256`; +- `representation.kind=git-blob-content`; +- full source commit and blob OIDs; +- exact legacy-manifest and verifier paths; +- `checkout_equivalence.transform=replace each CRLF byte pair with LF`; +- `checkout_equivalence.bare_cr=reject`; +- the exact source-Git-blob result contract. -`verify-manifest.cjs` fails closed on metadata disagreement, entry/order disagreement, duplicate paths, non-ancestor execution, blob OID/length/SHA disagreement, checkout content disagreement, or a bare CR. It supports: +Legacy and artifact annotated manifests also reject duplicate, missing, and +unknown metadata keys and invalid semantic values. -- `--mode=git-object` — reads exact bytes with `git cat-file blob :`; -- `--mode=checkout-lf` — canonicalizes only CRLF pairs, rejects bare CR, then requires byte identity with the Git blob; -- `--mode=legacy-raw-audit` — exposes raw-checkout mismatch without treating raw bytes as the contract. +## Permanent adversarial suite -## Two-checkout proof +Command: -### Normal Windows checkout +`node --test --test-concurrency=1 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.test.cjs` -Materialization: +GREEN result in the normal Windows checkout: + +- tests: `18`; +- pass: `18`; +- fail/skipped/cancelled/todo: `0`; +- exit: `0`. -```text -git worktree add -b work/prc-db-embedding-evidence-transport .agent/worktrees/db-embedding-evidence-transport 38d6a4fb7ff5f5ae3b6c0066c0a1b806421137df -``` +The suite covers header-only zero entries, missing, extra, duplicate, traversal, +dot alias, absolute path, backslash separator, all three checkout-equivalence +values, and unknown keys at every contract object level. Every mutation is +limited to the maker worktree and restored byte-for-byte in `finally` plus a +process-level cleanup hook. -Observed `core.autocrlf=true` and `w/crlf` for all seven paths. +## Positive representation rails -| Command mode | Exit | Status | Result | +### Normal Windows CRLF checkout + +`git ls-files --eol` reported `i/lf w/crlf` for all seven declared source +records. + +| Mode | Exit | Status | Result | | --- | ---: | --- | --- | -| `legacy-raw-audit` | 0 | `AMBIGUOUS_RAW_CHECKOUT_CONFIRMED` | raw `0/7`, Git object `7/7`, canonical LF `7/7` | -| `git-object` | 0 | `PASS` | declared representation `7/7` | -| `checkout-lf` | 0 | `PASS` | declared checkout equivalence `7/7`, bare CR `0` | +| `legacy-raw-audit` | 0 | `AMBIGUOUS_RAW_CHECKOUT_CONFIRMED` | raw `0/7`, Git object `7/7`, checkout-LF `7/7` | +| `git-object` | 0 | `PASS` | `7/7`, structural errors `0` | +| `checkout-lf` | 0 | `PASS` | `7/7`, bare CR `0`, structural errors `0` | +| `artifact-files` | 0 | `PASS` | exact required set `5/5`, structural errors `0` | -### LF-materialized checkout +### Fresh LF materialization Materialization: -```text -git -c core.autocrlf=false worktree add --detach .agent/worktrees/db-embedding-evidence-lf-proof 462c97dd889b4afbc84d1ddc07613d748604afee -``` +`git -c core.autocrlf=false worktree add --detach +D:/Dev/engram/.agent/worktrees/db-embedding-evidence-transport-r2-lf-proof +53b2ef1931c534e27183126a1aad2d46b3a854b2` -`git ls-files --eol` reported `i/lf w/lf` for all seven paths. +`git ls-files --eol` reported `i/lf w/lf` for all seven source records. -| Command mode | Exit | Status | Result | +| Mode | Exit | Status | Result | | --- | ---: | --- | --- | -| `git-object` | 0 | `PASS` | declared representation `7/7`; raw and canonical views also `7/7` | -| `checkout-lf` | 0 | `PASS` | declared checkout equivalence `7/7`, bare CR `0` | +| `legacy-raw-audit` | 0 | `RAW_CHECKOUT_HAPPENS_TO_MATCH` | raw/Git-object/checkout-LF `7/7` | +| `git-object` | 0 | `PASS` | `7/7` | +| `checkout-lf` | 0 | `PASS` | `7/7`, bare CR `0` | +| `artifact-files` | 0 | `PASS` | exact required set `5/5` | +| permanent adversarial suite | 0 | `PASS` | `18/18` | -The LF proof worktree was clean before removal. Its path and Git worktree registration were removed. +The LF proof worktree was clean before removal; its filesystem path and Git +registration were removed. -Machine-readable observations: `verification-observations.v1.json`. +## TDD and Prove-It evidence -## No-product-change proof +- RED: `18` total, `1` pass, `17` fail, exit `1`. +- GREEN: `18/18`, exit `0`. +- Prove-It, `validateContractSchema` sentinel: `18` failures, exit `1`. +- Prove-It, `verifyArtifactFiles` sentinel: `9` failures, exit `1`. +- Both sentinels were restored from the clean checkpoint. +- Post-restore: `18/18`, exit `0`. +- Node experimental coverage: all files line `88.89%` and branch `65.33%`; + verifier line `84.46%`; functions `100%`; exit `0`. -The accepted product files retain their exact source-commit blobs and SHA-256 values: +Full TDD evidence: +`.agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R2.tdd.json`. -| Path | Git blob OID | Git-blob SHA-256 | -| --- | --- | --- | -| `internal/embedding/store.go` | `1abaee96b07583f9fd824ed03c40b043c490b567` | `7bfb06dfc0dda792147d5e2df9d2fe68b59edaac55d2396dece1b8a8a09eee5f` | -| `internal/embedding/store_stats_test.go` | `d381643deadbb42e8a9a07fc9375a6cdfedbdccc` | `a35a234eb167c58bf201afc50954e43926a69ba2294536f2d0fabf4e015b12a4` | +## No-product-change proof -`git diff 38d6a4fb... -- internal/embedding/store.go internal/embedding/store_stats_test.go` is empty. The full branch delta is restricted to the augmented embedding manifest and the new embedding evidence-transport namespace. +`git diff --exit-code 38d6a4fb... -- cmd internal plugin tests scripts go.mod +go.sum Makefile Dockerfile docker-compose.yml` exits `0`. In particular: -No Go test or PostgreSQL mutation was needed because this follow-up changes no executable product/test byte. Verification is the executable Node verifier, exact Git ancestry/diff/blob checks, both checkout forms, and artifact hashing. +- `internal/embedding/store.go` remains blob + `1abaee96b07583f9fd824ed03c40b043c490b567`; +- `internal/embedding/store_stats_test.go` remains blob + `d381643deadbb42e8a9a07fc9375a6cdfedbdccc`. -## Reproduction commands +No Go product test, PostgreSQL statement, container mutation, integration, +push, tag, release, or protected state write is part of this evidence-only +revision. -Run from either checkout form: +## Handoff -```text -node --check .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.cjs -node .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.cjs --mode=git-object -node .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.cjs --mode=checkout-lf -node .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.cjs --mode=artifact-files -``` +The compact summary and revision checksum manifest live under +`.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r2/`. +The containing commit and artifact hashes are reported by the maker handoff +after commit, avoiding a self-hash or self-commit paradox. -The independent checker must run these against the exact branch head in a fresh checkout, verify the two product blob OIDs and SHA-256 values remain unchanged, challenge the manifest parser/fail-closed behavior, and confirm no residue or out-of-bound path exists. +Finish state: **READY_FOR_CHECK**. A fresh independent checker must reproduce +the adversarial and CRLF/LF rails before post-review or integration. diff --git a/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verification-observations.v1.json b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verification-observations.v1.json index 398fffc4..c73fa547 100644 --- a/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verification-observations.v1.json +++ b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verification-observations.v1.json @@ -1,18 +1,64 @@ { "schema_version": 1, "slice": "DB-EMBEDDING-EVIDENCE-TRANSPORT", - "source_commit": "38d6a4fb7ff5f5ae3b6c0066c0a1b806421137df", - "contract_implementation_commit": "462c97dd889b4afbc84d1ddc07613d748604afee", + "role": "revision-maker", + "product_source_commit": "38d6a4fb7ff5f5ae3b6c0066c0a1b806421137df", + "rejected_candidate_commit": "580b0cd0ff38bb55a5195a8004e60234a824b7a8", + "revision_checkpoint_commit": "53b2ef1931c534e27183126a1aad2d46b3a854b2", "raw_checkout_bytes_are_not_the_contract": true, + "required_artifact_paths": [ + ".agent/reports/evidence/production-ready/db-embedding-stats/SHA256SUMS.txt", + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/content-manifest.v1.json", + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.cjs", + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verification-observations.v1.json", + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/maker-report.md" + ], + "tdd": { + "red": { + "exit_code": 1, + "tests": 18, + "passed": 1, + "failed": 17 + }, + "green": { + "exit_code": 0, + "tests": 18, + "passed": 18, + "failed": 0 + }, + "prove_it": [ + { + "sentinel_function": "validateContractSchema", + "exit_code": 1, + "failed_tests": 18 + }, + { + "sentinel_function": "verifyArtifactFiles", + "exit_code": 1, + "failed_tests": 9 + } + ], + "post_restore": { + "exit_code": 0, + "tests": 18, + "passed": 18, + "failed": 0 + }, + "coverage": { + "exit_code": 0, + "all_files_line_percent": 88.89, + "verifier_line_percent": 84.46, + "branch_percent": 65.33, + "functions_percent": 100.0 + } + }, "observations": [ { "checkout": "windows-autocrlf-true", - "materialization": "git worktree add -b work/prc-db-embedding-evidence-transport .agent/worktrees/db-embedding-evidence-transport 38d6a4fb7ff5f5ae3b6c0066c0a1b806421137df", - "core_autocrlf": "true", "tracked_eol_counts": { "crlf": 7 }, - "command": "node .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.cjs --mode=legacy-raw-audit", + "mode": "legacy-raw-audit", "exit_code": 0, "status": "AMBIGUOUS_RAW_CHECKOUT_CONFIRMED", "total": 7, @@ -23,74 +69,89 @@ }, { "checkout": "windows-autocrlf-true", - "core_autocrlf": "true", - "tracked_eol_counts": { - "crlf": 7 - }, - "command": "node .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.cjs --mode=git-object", + "mode": "git-object", "exit_code": 0, "status": "PASS", - "total": 7, "matched": 7, - "git_object_matches": 7, - "source_commit_is_ancestor": true, + "total": 7, "structural_errors": 0 }, { "checkout": "windows-autocrlf-true", - "core_autocrlf": "true", - "tracked_eol_counts": { - "crlf": 7 - }, - "command": "node .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.cjs --mode=checkout-lf", + "mode": "checkout-lf", "exit_code": 0, "status": "PASS", - "total": 7, "matched": 7, - "checkout_lf_matches": 7, + "total": 7, "bare_carriage_returns": 0, - "source_commit_is_ancestor": true, + "structural_errors": 0 + }, + { + "checkout": "windows-autocrlf-true", + "mode": "artifact-files", + "exit_code": 0, + "status": "PASS", + "matched": 5, + "total": 5, "structural_errors": 0 }, { "checkout": "lf-materialized", - "materialization": "git -c core.autocrlf=false worktree add --detach .agent/worktrees/db-embedding-evidence-lf-proof 462c97dd889b4afbc84d1ddc07613d748604afee", "tracked_eol_counts": { "lf": 7 }, - "command": "node .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.cjs --mode=git-object", + "mode": "legacy-raw-audit", "exit_code": 0, - "status": "PASS", + "status": "RAW_CHECKOUT_HAPPENS_TO_MATCH", "total": 7, - "matched": 7, - "git_object_matches": 7, "raw_checkout_matches": 7, + "git_object_matches": 7, "checkout_lf_matches": 7, - "source_commit_is_ancestor": true, "structural_errors": 0 }, { "checkout": "lf-materialized", - "tracked_eol_counts": { - "lf": 7 - }, - "command": "node .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.cjs --mode=checkout-lf", + "mode": "git-object", "exit_code": 0, "status": "PASS", + "matched": 7, "total": 7, + "structural_errors": 0 + }, + { + "checkout": "lf-materialized", + "mode": "checkout-lf", + "exit_code": 0, + "status": "PASS", "matched": 7, - "git_object_matches": 7, - "raw_checkout_matches": 7, - "checkout_lf_matches": 7, + "total": 7, "bare_carriage_returns": 0, - "source_commit_is_ancestor": true, "structural_errors": 0 + }, + { + "checkout": "lf-materialized", + "mode": "artifact-files", + "exit_code": 0, + "status": "PASS", + "matched": 5, + "total": 5, + "structural_errors": 0 + }, + { + "checkout": "lf-materialized", + "mode": "permanent-adversarial-self-test", + "exit_code": 0, + "status": "PASS", + "matched": 18, + "total": 18 } ], "temporary_lf_worktree_cleanup": { - "path": "D:/Dev/engram/.agent/worktrees/db-embedding-evidence-lf-proof", + "path": "D:/Dev/engram/.agent/worktrees/db-embedding-evidence-transport-r2-lf-proof", "clean_before_remove": true, "path_removed": true, "registration_removed": true - } + }, + "product_source_test_delta": 0, + "finish_state": "READY_FOR_CHECK" } diff --git a/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.cjs b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.cjs index 9d368676..9f8424f1 100644 --- a/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.cjs +++ b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.cjs @@ -10,6 +10,66 @@ const allowedModes = new Set(['git-object', 'checkout-lf', 'legacy-raw-audit', ' const modeArgument = process.argv.find((argument) => argument.startsWith('--mode=')); const mode = modeArgument ? modeArgument.slice('--mode='.length) : 'git-object'; +const SLICE = 'DB-EMBEDDING-EVIDENCE-TRANSPORT'; +const LEGACY_MANIFEST_PATH = + '.agent/reports/evidence/production-ready/db-embedding-stats/SHA256SUMS.txt'; +const VERIFIER_PATH = + '.agent/reports/evidence/production-ready/' + + 'db-embedding-stats-evidence-transport/verify-manifest.cjs'; +const CONTRACT_PATH = + '.agent/reports/evidence/production-ready/' + + 'db-embedding-stats-evidence-transport/content-manifest.v1.json'; +const REQUIRED_ARTIFACT_PATHS = Object.freeze([ + LEGACY_MANIFEST_PATH, + CONTRACT_PATH, + VERIFIER_PATH, + '.agent/reports/evidence/production-ready/' + + 'db-embedding-stats-evidence-transport/verification-observations.v1.json', + '.agent/reports/evidence/production-ready/' + + 'db-embedding-stats-evidence-transport/maker-report.md', +]); +const CONTRACT_TOP_LEVEL_KEYS = Object.freeze([ + 'schema_version', + 'slice', + 'algorithm', + 'representation', + 'legacy_manifest', + 'verifier', + 'entries', +]); +const REPRESENTATION_KEYS = Object.freeze([ + 'kind', + 'source_commit', + 'checkout_equivalence', +]); +const CHECKOUT_EQUIVALENCE_KEYS = Object.freeze([ + 'transform', + 'bare_cr', + 'required_result', +]); +const CONTRACT_ENTRY_KEYS = Object.freeze([ + 'path', + 'git_blob_oid', + 'byte_length', + 'sha256', +]); +const LEGACY_METADATA_KEYS = Object.freeze([ + 'manifest-version', + 'algorithm', + 'representation', + 'source-commit', + 'contract', + 'verifier', + 'checkout-equivalence', +]); +const ARTIFACT_METADATA_KEYS = Object.freeze([ + 'manifest-version', + 'algorithm', + 'representation', + 'checkout-equivalence', + 'self-entry', +]); + if (!allowedModes.has(mode)) { process.stderr.write(`unsupported mode: ${mode}\n`); process.exit(2); @@ -89,10 +149,15 @@ function parseAnnotatedManifest(manifestPath) { if (!line) continue; const metadataMatch = line.match(/^# ([a-z0-9-]+)=(.+)$/); if (metadataMatch) { + if (Object.hasOwn(metadata, metadataMatch[1])) { + throw new Error(`duplicate manifest metadata key: ${metadataMatch[1]}`); + } metadata[metadataMatch[1]] = metadataMatch[2]; continue; } - if (line.startsWith('#')) continue; + if (line.startsWith('#')) { + throw new Error(`invalid manifest metadata line: ${line}`); + } const entryMatch = line.match(/^([0-9a-f]{64}) (.+)$/); if (!entryMatch) { @@ -112,6 +177,168 @@ function compareEntryShape(contractEntries, manifestEntries) { ); } +function isPlainObject(value) { + return value !== null && typeof value === 'object' && !Array.isArray(value); +} + +function validateExactKeys(value, requiredKeys, label, structuralErrors) { + if (!isPlainObject(value)) { + structuralErrors.push(`${label} must be an object`); + return false; + } + const required = new Set(requiredKeys); + for (const key of requiredKeys) { + if (!Object.hasOwn(value, key)) { + structuralErrors.push(`${label} is missing required key: ${key}`); + } + } + for (const key of Object.keys(value)) { + if (!required.has(key)) { + structuralErrors.push(`${label} contains unknown key: ${key}`); + } + } + return true; +} + +function analyzeRepositoryRelativePath(repoRoot, rawPath) { + const errors = []; + if (typeof rawPath !== 'string' || rawPath.length === 0) { + errors.push('path must be a non-empty string'); + return { errors, absolute_path: null, normalized_path: null }; + } + if (rawPath.includes('\\')) errors.push('path must use POSIX separators'); + if (rawPath.includes('\0')) errors.push('path must not contain NUL'); + if (path.posix.isAbsolute(rawPath) || path.win32.isAbsolute(rawPath)) { + errors.push('path must be repository-relative'); + } + + const segments = rawPath.split('/'); + if (segments.some((segment) => segment === '' || segment === '.' || segment === '..')) { + errors.push('path must not contain empty, dot, or dot-dot segments'); + } + if (segments.some((segment) => segment.includes(':'))) { + errors.push('path must not contain a drive or URI separator'); + } + + const normalizedPath = path.posix.normalize(rawPath); + if (normalizedPath !== rawPath) errors.push('path must already be POSIX-normalized'); + + const absolutePath = path.resolve(repoRoot, ...segments); + const relativePath = path.relative(repoRoot, absolutePath); + const relativePosix = relativePath.split(path.sep).join('/'); + const insideRepository = + relativePath.length > 0 && + relativePath !== '..' && + !relativePath.startsWith(`..${path.sep}`) && + !path.isAbsolute(relativePath); + if (!insideRepository || relativePosix !== rawPath) { + errors.push('path must resolve to the same repository-relative path'); + } + + return { + errors, + absolute_path: errors.length === 0 ? absolutePath : null, + normalized_path: errors.length === 0 ? normalizedPath : null, + }; +} + +function validateContractSchema(contract, repoRoot) { + const structuralErrors = []; + const topLevelIsObject = validateExactKeys( + contract, + CONTRACT_TOP_LEVEL_KEYS, + 'contract', + structuralErrors, + ); + if (!topLevelIsObject) return structuralErrors; + + if (contract.schema_version !== 1) structuralErrors.push('schema_version must be 1'); + if (contract.slice !== SLICE) structuralErrors.push(`slice must be ${SLICE}`); + if (contract.algorithm !== 'sha256') structuralErrors.push('algorithm must be sha256'); + if (contract.legacy_manifest !== LEGACY_MANIFEST_PATH) { + structuralErrors.push(`legacy_manifest must be ${LEGACY_MANIFEST_PATH}`); + } + if (contract.verifier !== VERIFIER_PATH) { + structuralErrors.push(`verifier must be ${VERIFIER_PATH}`); + } + + const representationIsObject = validateExactKeys( + contract.representation, + REPRESENTATION_KEYS, + 'contract.representation', + structuralErrors, + ); + if (representationIsObject) { + if (contract.representation.kind !== 'git-blob-content') { + structuralErrors.push('representation.kind must be git-blob-content'); + } + if (!/^[0-9a-f]{40}$/.test(contract.representation.source_commit || '')) { + structuralErrors.push('representation.source_commit must be a full Git commit SHA'); + } + const checkoutEquivalenceIsObject = validateExactKeys( + contract.representation.checkout_equivalence, + CHECKOUT_EQUIVALENCE_KEYS, + 'contract.representation.checkout_equivalence', + structuralErrors, + ); + if (checkoutEquivalenceIsObject) { + const equivalence = contract.representation.checkout_equivalence; + if (equivalence.transform !== 'replace each CRLF byte pair with LF') { + structuralErrors.push( + 'checkout_equivalence.transform must be replace each CRLF byte pair with LF', + ); + } + if (equivalence.bare_cr !== 'reject') { + structuralErrors.push('checkout_equivalence.bare_cr must be reject'); + } + if (equivalence.required_result !== 'byte-identical to the source commit Git blob') { + structuralErrors.push( + 'checkout_equivalence.required_result must bind to the source commit Git blob', + ); + } + } + } + + if (!Array.isArray(contract.entries) || contract.entries.length === 0) { + structuralErrors.push('entries must be a non-empty array'); + return structuralErrors; + } + + const canonicalPaths = []; + contract.entries.forEach((entry, index) => { + const label = `contract.entries[${index}]`; + const entryIsObject = validateExactKeys( + entry, + CONTRACT_ENTRY_KEYS, + label, + structuralErrors, + ); + if (!entryIsObject) return; + + const pathAnalysis = analyzeRepositoryRelativePath(repoRoot, entry.path); + for (const error of pathAnalysis.errors) structuralErrors.push(`${label}.path ${error}`); + if (pathAnalysis.normalized_path) canonicalPaths.push(pathAnalysis.normalized_path); + if (!/^[0-9a-f]{40}$/.test(entry.git_blob_oid || '')) { + structuralErrors.push(`${label}.git_blob_oid must be a full Git blob OID`); + } + if (!Number.isSafeInteger(entry.byte_length) || entry.byte_length < 0) { + structuralErrors.push(`${label}.byte_length must be a non-negative safe integer`); + } + if (!/^[0-9a-f]{64}$/.test(entry.sha256 || '')) { + structuralErrors.push(`${label}.sha256 must be a lowercase SHA-256`); + } + }); + + if (new Set(canonicalPaths).size !== contract.entries.length) { + structuralErrors.push('contract paths must be unique canonical paths'); + } + return structuralErrors; +} + +function validateManifestMetadata(metadata, requiredKeys, label, structuralErrors) { + validateExactKeys(metadata, requiredKeys, label, structuralErrors); +} + function getCoreAutocrlf(repoRoot) { const result = spawnSync('git', ['config', '--get', 'core.autocrlf'], { cwd: repoRoot, @@ -141,6 +368,12 @@ function verifyArtifactFiles(repoRoot, scriptDirectory, sourceCommit, sourceComm const manifest = parseAnnotatedManifest(artifactManifestPath); const structuralErrors = [...inheritedErrors]; + validateManifestMetadata( + manifest.metadata, + ARTIFACT_METADATA_KEYS, + 'artifact manifest metadata', + structuralErrors, + ); if (manifest.metadata['manifest-version'] !== '1') { structuralErrors.push('artifact manifest-version must be 1'); } @@ -156,31 +389,49 @@ function verifyArtifactFiles(repoRoot, scriptDirectory, sourceCommit, sourceComm if (manifest.metadata['self-entry'] !== 'excluded-to-avoid-recursion') { structuralErrors.push('artifact manifest must explicitly declare self exclusion'); } - if (new Set(manifest.entries.map((entry) => entry.path)).size !== manifest.entries.length) { - structuralErrors.push('artifact manifest paths must be unique'); + if (manifest.entries.length !== REQUIRED_ARTIFACT_PATHS.length) { + structuralErrors.push( + `artifact manifest must contain exactly ${REQUIRED_ARTIFACT_PATHS.length} entries`, + ); } - const artifactManifestRelativePath = path.relative(repoRoot, artifactManifestPath).split(path.sep).join('/'); - const allowedExactPath = '.agent/reports/evidence/production-ready/db-embedding-stats/SHA256SUMS.txt'; - const allowedPrefix = '.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/'; + const requiredPaths = new Set(REQUIRED_ARTIFACT_PATHS); + const canonicalPaths = []; const entryResults = manifest.entries.map((entry) => { - const entryPath = path.resolve(repoRoot, ...entry.path.split('/')); - const relativeEntryPath = path.relative(repoRoot, entryPath); - const insideRepository = - relativeEntryPath.length > 0 && - !relativeEntryPath.startsWith(`..${path.sep}`) && - relativeEntryPath !== '..' && - !path.isAbsolute(relativeEntryPath); - const insideOwnedNamespace = entry.path === allowedExactPath || entry.path.startsWith(allowedPrefix); - if (!insideRepository || !insideOwnedNamespace || entry.path === artifactManifestRelativePath) { + const pathAnalysis = analyzeRepositoryRelativePath(repoRoot, entry.path); + for (const error of pathAnalysis.errors) { + structuralErrors.push(`artifact manifest entry ${entry.path}: ${error}`); + } + if (pathAnalysis.normalized_path) canonicalPaths.push(pathAnalysis.normalized_path); + + const isRequiredPath = + pathAnalysis.normalized_path !== null && + requiredPaths.has(pathAnalysis.normalized_path); + if (!isRequiredPath) { return { path: entry.path, + normalized_path: pathAnalysis.normalized_path, match: false, checkout_eol: 'not-read-outside-boundary', bare_carriage_returns: null, }; } - const canonical = canonicalizeCheckout(fs.readFileSync(entryPath)); + + let checkoutBytes; + try { + checkoutBytes = fs.readFileSync(pathAnalysis.absolute_path); + } catch (error) { + structuralErrors.push(`artifact file is not readable: ${entry.path}: ${error.code || error.message}`); + return { + path: entry.path, + normalized_path: pathAnalysis.normalized_path, + match: false, + checkout_eol: 'not-readable', + bare_carriage_returns: null, + }; + } + + const canonical = canonicalizeCheckout(checkoutBytes); const actualHash = sha256(canonical.bytes); const matches = canonical.bare_carriage_returns === 0 && @@ -188,12 +439,26 @@ function verifyArtifactFiles(repoRoot, scriptDirectory, sourceCommit, sourceComm return { path: entry.path, + normalized_path: pathAnalysis.normalized_path, match: matches, checkout_eol: eolStyle(canonical), bare_carriage_returns: canonical.bare_carriage_returns, }; }); + const canonicalPathSet = new Set(canonicalPaths); + if (canonicalPathSet.size !== canonicalPaths.length) { + structuralErrors.push('artifact manifest paths must be unique canonical paths'); + } + const missingPaths = REQUIRED_ARTIFACT_PATHS.filter((entryPath) => !canonicalPathSet.has(entryPath)); + const extraPaths = [...canonicalPathSet].filter((entryPath) => !requiredPaths.has(entryPath)); + if (missingPaths.length > 0) { + structuralErrors.push(`artifact manifest missing required paths: ${missingPaths.join(', ')}`); + } + if (extraPaths.length > 0) { + structuralErrors.push(`artifact manifest contains extra paths: ${extraPaths.join(', ')}`); + } + const matched = entryResults.filter((entry) => entry.match).length; const eolCounts = entryResults.reduce((counts, entry) => { counts[entry.checkout_eol] = (counts[entry.checkout_eol] || 0) + 1; @@ -202,7 +467,7 @@ function verifyArtifactFiles(repoRoot, scriptDirectory, sourceCommit, sourceComm const status = structuralErrors.length === 0 && matched === entryResults.length ? 'PASS' : 'FAIL'; const result = { schema_version: 1, - slice: 'DB-EMBEDDING-EVIDENCE-TRANSPORT', + slice: SLICE, mode: 'artifact-files', status, source_commit: sourceCommit, @@ -228,18 +493,16 @@ function main() { const scriptDirectory = __dirname; const contractPath = path.join(scriptDirectory, 'content-manifest.v1.json'); const contract = JSON.parse(fs.readFileSync(contractPath, 'utf8')); - const legacyManifestPath = path.join(repoRoot, ...contract.legacy_manifest.split('/')); + const structuralErrors = validateContractSchema(contract, repoRoot); + const legacyManifestPath = path.join(repoRoot, ...LEGACY_MANIFEST_PATH.split('/')); const manifest = parseAnnotatedManifest(legacyManifestPath); - const structuralErrors = []; - if (contract.schema_version !== 1) structuralErrors.push('schema_version must be 1'); - if (contract.algorithm !== 'sha256') structuralErrors.push('algorithm must be sha256'); - if (contract.representation?.kind !== 'git-blob-content') { - structuralErrors.push('representation.kind must be git-blob-content'); - } - if (!/^[0-9a-f]{40}$/.test(contract.representation?.source_commit || '')) { - structuralErrors.push('representation.source_commit must be a full Git commit SHA'); - } + validateManifestMetadata( + manifest.metadata, + LEGACY_METADATA_KEYS, + 'legacy manifest metadata', + structuralErrors, + ); if (manifest.metadata['manifest-version'] !== '1') { structuralErrors.push('legacy manifest annotation manifest-version=1 missing'); } @@ -258,15 +521,18 @@ function main() { if (manifest.metadata.verifier !== path.relative(repoRoot, __filename).split(path.sep).join('/')) { structuralErrors.push('legacy manifest verifier path annotation disagrees with executing verifier'); } - if (!compareEntryShape(contract.entries, manifest.entries)) { - structuralErrors.push('legacy manifest entries disagree with contract entries or order'); + if (manifest.metadata['checkout-equivalence'] !== 'crlf-to-lf-with-no-bare-cr') { + structuralErrors.push('legacy manifest checkout equivalence must reject bare CR'); } - if (new Set(contract.entries.map((entry) => entry.path)).size !== contract.entries.length) { - structuralErrors.push('contract paths must be unique'); + const contractEntries = Array.isArray(contract.entries) ? contract.entries : []; + if (!compareEntryShape(contractEntries, manifest.entries)) { + structuralErrors.push('legacy manifest entries disagree with contract entries or order'); } - const sourceCommit = contract.representation.source_commit; - const sourceCommitIsAncestor = isAncestor(repoRoot, sourceCommit, 'HEAD'); + const sourceCommit = contract.representation?.source_commit || ''; + const sourceCommitIsAncestor = + /^[0-9a-f]{40}$/.test(sourceCommit || '') && + isAncestor(repoRoot, sourceCommit, 'HEAD'); if (!sourceCommitIsAncestor) { structuralErrors.push('source commit is not an ancestor of the executing checkout HEAD'); } @@ -280,7 +546,7 @@ function main() { ); return; } - const entryResults = contract.entries.map((entry) => { + const entryResults = contractEntries.map((entry) => { const objectSpec = `${sourceCommit}:${entry.path}`; const blob = runGit(['cat-file', 'blob', objectSpec], { cwd: repoRoot }); const blobOid = runGit(['rev-parse', objectSpec], { cwd: repoRoot, encoding: 'utf8' }).trim(); diff --git a/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.test.cjs b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.test.cjs new file mode 100644 index 00000000..c9c08dd9 --- /dev/null +++ b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.test.cjs @@ -0,0 +1,277 @@ +#!/usr/bin/env node +'use strict'; + +// Behavioral signal: release-evidence-false-pass-rate. +// Measurement: deterministic local mutation suite; target: zero false PASS results. +// Source: DB-EMBEDDING-EVIDENCE-TRANSPORT independent checker findings ET-001/ET-002. + +const assert = require('node:assert/strict'); +const crypto = require('node:crypto'); +const fs = require('node:fs'); +const path = require('node:path'); +const { spawnSync } = require('node:child_process'); +const { after, test } = require('node:test'); + +const scriptDirectory = __dirname; +const verifierPath = path.join(scriptDirectory, 'verify-manifest.cjs'); +const artifactManifestPath = path.join(scriptDirectory, 'ARTIFACTS.sha256'); +const contractPath = path.join(scriptDirectory, 'content-manifest.v1.json'); +const testPath = __filename; +const repoRoot = path.resolve( + spawnSync('git', ['rev-parse', '--show-toplevel'], { + cwd: scriptDirectory, + encoding: 'utf8', + windowsHide: true, + }).stdout.trim(), +); + +const originalBytes = new Map([ + [artifactManifestPath, fs.readFileSync(artifactManifestPath)], + [contractPath, fs.readFileSync(contractPath)], +]); + +function restoreOriginals() { + for (const [filePath, bytes] of originalBytes) { + fs.writeFileSync(filePath, bytes); + } +} + +after(restoreOriginals); + +function withMutation(filePath, mutate, verify) { + const original = fs.readFileSync(filePath); + try { + fs.writeFileSync(filePath, mutate(Buffer.from(original))); + return verify(); + } finally { + fs.writeFileSync(filePath, original); + } +} + +function runVerifier(mode) { + const result = spawnSync(process.execPath, [verifierPath, `--mode=${mode}`], { + cwd: repoRoot, + encoding: 'utf8', + windowsHide: true, + }); + let output = null; + if (result.stdout.trim()) { + output = JSON.parse(result.stdout); + } + return { + exit_code: result.status, + output, + stderr: result.stderr.trim(), + }; +} + +function expectFailClosed(result) { + assert.notEqual(result.exit_code, 0, 'mutation must return a non-zero exit code'); + assert.equal(result.output?.status, 'FAIL', result.stderr || 'mutation must emit FAIL'); + assert.ok( + Array.isArray(result.output?.structural_errors) && + result.output.structural_errors.length > 0, + 'mutation must emit at least one structural error', + ); +} + +function mutateArtifactManifest(mutator) { + return (bytes) => { + const text = bytes.toString('utf8'); + const eol = text.includes('\r\n') ? '\r\n' : '\n'; + const lines = text.split(/\r?\n/); + if (lines.at(-1) === '') lines.pop(); + mutator(lines); + return Buffer.from(`${lines.join(eol)}${eol}`, 'utf8'); + }; +} + +function dataLineIndexes(lines) { + return lines + .map((line, index) => ({ line, index })) + .filter(({ line }) => /^[0-9a-f]{64} /.test(line)) + .map(({ index }) => index); +} + +function canonicalLf(bytes) { + const output = []; + for (let index = 0; index < bytes.length; index += 1) { + if (bytes[index] === 13 && bytes[index + 1] === 10) { + output.push(10); + index += 1; + } else { + assert.notEqual(bytes[index], 13, 'fixture must not contain a bare CR'); + output.push(bytes[index]); + } + } + return Buffer.from(output); +} + +function sha256(bytes) { + return crypto.createHash('sha256').update(bytes).digest('hex'); +} + +function mutateContract(mutator) { + return (bytes) => { + const text = bytes.toString('utf8'); + const eol = text.includes('\r\n') ? '\r\n' : '\n'; + const contract = JSON.parse(text); + mutator(contract); + return Buffer.from(`${JSON.stringify(contract, null, 2).replace(/\n/g, eol)}${eol}`); + }; +} + +test('artifact manifest rejects a header-only zero-entry set', () => { + const result = withMutation( + artifactManifestPath, + mutateArtifactManifest((lines) => { + for (const index of dataLineIndexes(lines).reverse()) lines.splice(index, 1); + }), + () => runVerifier('artifact-files'), + ); + expectFailClosed(result); +}); + +test('artifact manifest rejects a missing required entry', () => { + const result = withMutation( + artifactManifestPath, + mutateArtifactManifest((lines) => { + const index = lines.findIndex((line) => line.endsWith('/content-manifest.v1.json')); + assert.notEqual(index, -1); + lines.splice(index, 1); + }), + () => runVerifier('artifact-files'), + ); + expectFailClosed(result); +}); + +test('artifact manifest rejects an extra entry', () => { + const testRelativePath = path.relative(repoRoot, testPath).split(path.sep).join('/'); + const testHash = sha256(canonicalLf(fs.readFileSync(testPath))); + const result = withMutation( + artifactManifestPath, + mutateArtifactManifest((lines) => { + lines.push(`${testHash} ${testRelativePath}`); + }), + () => runVerifier('artifact-files'), + ); + expectFailClosed(result); +}); + +test('artifact manifest rejects a duplicate entry', () => { + const result = withMutation( + artifactManifestPath, + mutateArtifactManifest((lines) => { + const firstDataLine = lines.find((line) => /^[0-9a-f]{64} /.test(line)); + assert.ok(firstDataLine); + lines.push(firstDataLine); + }), + () => runVerifier('artifact-files'), + ); + expectFailClosed(result); +}); + +test('artifact manifest rejects dot-segment traversal outside the evidence namespace', () => { + const traversalPath = + '.agent/reports/evidence/production-ready/' + + 'db-embedding-stats-evidence-transport/../../../../../internal/embedding/store.go'; + const storeHash = '7bfb06dfc0dda792147d5e2df9d2fe68b59edaac55d2396dece1b8a8a09eee5f'; + const result = withMutation( + artifactManifestPath, + mutateArtifactManifest((lines) => { + const index = lines.findIndex((line) => line.endsWith('/content-manifest.v1.json')); + assert.notEqual(index, -1); + lines[index] = `${storeHash} ${traversalPath}`; + }), + () => runVerifier('artifact-files'), + ); + expectFailClosed(result); +}); + +test('artifact manifest rejects a non-canonical dot-segment alias', () => { + const result = withMutation( + artifactManifestPath, + mutateArtifactManifest((lines) => { + const index = lines.findIndex((line) => line.endsWith('/content-manifest.v1.json')); + assert.notEqual(index, -1); + lines[index] = lines[index].replace( + '/content-manifest.v1.json', + '/./content-manifest.v1.json', + ); + }), + () => runVerifier('artifact-files'), + ); + expectFailClosed(result); +}); + +test('artifact manifest rejects absolute and backslash-separated paths', async (t) => { + await t.test('absolute path', () => { + const result = withMutation( + artifactManifestPath, + mutateArtifactManifest((lines) => { + const index = lines.findIndex((line) => line.endsWith('/content-manifest.v1.json')); + assert.notEqual(index, -1); + lines[index] = lines[index].replace( + '.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/content-manifest.v1.json', + path.resolve(contractPath), + ); + }), + () => runVerifier('artifact-files'), + ); + expectFailClosed(result); + }); + + await t.test('backslash-separated path', () => { + const result = withMutation( + artifactManifestPath, + mutateArtifactManifest((lines) => { + const index = lines.findIndex((line) => line.endsWith('/content-manifest.v1.json')); + assert.notEqual(index, -1); + lines[index] = lines[index].replaceAll('/', '\\'); + }), + () => runVerifier('artifact-files'), + ); + expectFailClosed(result); + }); +}); + +test('contract rejects unsupported checkout-equivalence policy values', async (t) => { + const cases = [ + ['bare_cr', (contract) => { contract.representation.checkout_equivalence.bare_cr = 'accept'; }], + ['transform', (contract) => { contract.representation.checkout_equivalence.transform = 'identity'; }], + ['required_result', (contract) => { + contract.representation.checkout_equivalence.required_result = 'checkout bytes'; + }], + ]; + for (const [name, mutate] of cases) { + await t.test(name, () => { + const result = withMutation( + contractPath, + mutateContract(mutate), + () => runVerifier('checkout-lf'), + ); + expectFailClosed(result); + }); + } +}); + +test('contract rejects unknown schema keys', async (t) => { + const cases = [ + ['top-level', (contract) => { contract.unknown = true; }], + ['representation', (contract) => { contract.representation.unknown = true; }], + ['checkout-equivalence', (contract) => { + contract.representation.checkout_equivalence.unknown = true; + }], + ['entry', (contract) => { contract.entries[0].unknown = true; }], + ]; + for (const [name, mutate] of cases) { + await t.test(name, () => { + const result = withMutation( + contractPath, + mutateContract(mutate), + () => runVerifier('git-object'), + ); + expectFailClosed(result); + }); + } +}); diff --git a/.agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R2.red.json b/.agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R2.red.json new file mode 100644 index 00000000..8c8d439d --- /dev/null +++ b/.agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R2.red.json @@ -0,0 +1,9 @@ +{ + "task_id": "DB-EMBEDDING-EVIDENCE-TRANSPORT-R2", + "stack": "GO repository with Node.js evidence verifier", + "observed_at": "2026-07-10T13:49:08.1979550Z", + "test_file": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.test.cjs", + "test_name": "artifact-set and contract-schema mutations fail closed", + "failure_reason": "The rejected verifier returned exit 0 for empty, missing, extra, traversal, dot-alias, and invalid contract-policy mutations.", + "runner_stdout_excerpt": "tests 18; pass 1; fail 17; captured_exit=1; false-pass assertions observed actual exit 0" +} diff --git a/.agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R2.tdd.json b/.agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R2.tdd.json new file mode 100644 index 00000000..73f3aa07 --- /dev/null +++ b/.agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R2.tdd.json @@ -0,0 +1,56 @@ +{ + "task_id": "DB-EMBEDDING-EVIDENCE-TRANSPORT-R2", + "stack": "GO repository with Node.js evidence verifier", + "red": { + "observed_at": "2026-07-10T13:49:08.1979550Z", + "test_file": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.test.cjs", + "test_name": "artifact-set and contract-schema mutations fail closed", + "failure_reason": "Rejected verifier returned exit 0 for fail-closed mutations.", + "passed_tests": 1, + "failed_tests": 17, + "runner_stdout_excerpt": "tests 18; pass 1; fail 17; captured_exit=1" + }, + "green": { + "observed_at": "2026-07-10T14:00:14.1815032Z", + "passed_tests": 18, + "failed_tests": 0, + "skipped_tests": 0, + "regressed_tests": 0, + "runner_stdout_excerpt": "tests 18; pass 18; fail 0; captured_exit=0" + }, + "refactor": { + "applied": false, + "reason": "GREEN implementation already separates schema, canonical-path, and artifact-set validation without duplicated behavior." + }, + "prove_it": { + "substituted_files": [ + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.cjs" + ], + "substituted_functions": [ + "validateContractSchema", + "verifyArtifactFiles" + ], + "failed_tests": 27, + "runner_stdout_excerpt": "validateContractSchema sentinel: 18 failed; verifyArtifactFiles sentinel: 9 failed; both exits 1", + "reverted_at": "2026-07-10T14:00:14.1815032Z", + "post_restore_passed_tests": 18, + "post_restore_exit_code": 0 + }, + "coverage": { + "runner": "node --test --experimental-test-coverage", + "all_files_line_percent": 88.89, + "verifier_line_percent": 84.46, + "branch_percent": 65.33, + "functions_percent": 100.0, + "threshold": 80, + "status": "PASS", + "exit_code": 0 + }, + "behavioral_signal": { + "name": "release-evidence-false-pass-rate", + "measurement_window": "each verifier self-test run", + "target": "0 false PASS results across the permanent mutation set", + "measurement_method": "Node built-in test runner executes verifier subprocesses against byte-restored manifest mutations", + "evidence_source": "independent checker findings ET-001 and ET-002" + } +} From 68242c48aaad62ec087166eeb9ea32f14d189450 Mon Sep 17 00:00:00 2001 From: Kirill Turanskiy Date: Fri, 10 Jul 2026 17:13:36 +0300 Subject: [PATCH 028/111] docs(evidence): repair DB pool hygiene audit packet --- ...st-pool-hygiene-evidence-revision-maker.md | 109 ++++++ .../2026-07-10-db-test-pool-hygiene-maker.md | 24 +- .../14-evidence-r2-focused.log | 14 + .../15-evidence-r2-static.txt | 11 + .../DB-TEST-POOL-HYGIENE.evidence-r2.json | 71 ++++ .../DB-TEST-POOL-HYGIENE.final.json | 16 +- .../db-test-pool-hygiene/INVENTORY.json | 53 +++ .../db-test-pool-hygiene/MANIFEST.json | 104 +++++- .../db-test-pool-hygiene/SHA256SUMS.txt | 16 +- .../Test-DBPoolHygieneEvidenceAdversarial.ps1 | 210 +++++++++++ .../Verify-DBPoolHygieneEvidence.ps1 | 332 ++++++++++++++++++ .../adversarial-proof.json | 70 ++++ .../db-test-pool-hygiene/verifier-proof.json | 12 + 13 files changed, 1023 insertions(+), 19 deletions(-) create mode 100644 .agent/reports/2026-07-10-db-test-pool-hygiene-evidence-revision-maker.md create mode 100644 .agent/reports/evidence/production-ready/db-test-pool-hygiene/14-evidence-r2-focused.log create mode 100644 .agent/reports/evidence/production-ready/db-test-pool-hygiene/15-evidence-r2-static.txt create mode 100644 .agent/reports/evidence/production-ready/db-test-pool-hygiene/DB-TEST-POOL-HYGIENE.evidence-r2.json create mode 100644 .agent/reports/evidence/production-ready/db-test-pool-hygiene/INVENTORY.json create mode 100644 .agent/reports/evidence/production-ready/db-test-pool-hygiene/Test-DBPoolHygieneEvidenceAdversarial.ps1 create mode 100644 .agent/reports/evidence/production-ready/db-test-pool-hygiene/Verify-DBPoolHygieneEvidence.ps1 create mode 100644 .agent/reports/evidence/production-ready/db-test-pool-hygiene/adversarial-proof.json create mode 100644 .agent/reports/evidence/production-ready/db-test-pool-hygiene/verifier-proof.json diff --git a/.agent/reports/2026-07-10-db-test-pool-hygiene-evidence-revision-maker.md b/.agent/reports/2026-07-10-db-test-pool-hygiene-evidence-revision-maker.md new file mode 100644 index 00000000..88960a7d --- /dev/null +++ b/.agent/reports/2026-07-10-db-test-pool-hygiene-evidence-revision-maker.md @@ -0,0 +1,109 @@ +# DB-TEST-POOL-HYGIENE evidence revision 2 maker report + +Status: **READY_FOR_RECHECK** + +This is an evidence-only maker handoff. It is not an acceptance verdict. A +different independent checker must verify the final commit before integration. + +## Immutable product boundary + +- Product parent: `bd68c05baf4b7250096dd84f56bebea2aa555970` +- Exact product/evidence candidate and revision base: + `276337b3e96aa5af6d2e7dd9a0002ff957e5ffc9` +- Branch: `work/prc-db-test-pool-hygiene-evidence-r2` +- Worktree: `D:\Dev\engram\.agent\worktrees\dbph-evidence-r2` +- Product/test paths changed by this revision: none. +- `internal/db/gorm/candidate_store_test.go` remains Git blob + `7337f1bd8da4fb315de842eea2e3cce5476250a3`, SHA-256 + `62260c1a2e0705b065295322dd23fcf9b17fd47cb5ebc64134630788e2d23e09`. +- The exact revision commit is reported after the atomic commit because a + commit cannot embed its own hash without changing that hash. + +## Corrected inventory + +The prior packet's 76-call/six-file statement was false for the exact parent. +Mechanical enumeration of every `internal/db/gorm/*_test.go` Git blob at +`bd68c05b...` proves **83 call sites across eight files**. The seven omitted +sites are one call in `temporal_truth_store_migration_test.go` and six calls in +`temporal_truth_store_test.go`. + +`INVENTORY.json` stores every path and parent line number. The permanent +verifier independently regenerates the list from the exact parent and rejects +any total, file set, or line list that differs from 83/8. + +## Preserved product evidence + +The product evidence is unchanged: + +- Exact parent broad package at `max_connections=100`: six governance/migration + semantic failures plus six secondary pool-exhaustion failures and nine + `too many clients` records. +- Exact candidate broad package: the same six semantic failures, zero secondary + exhaustion failures, zero `too many clients` records, and no candidate-only + failure. +- Focused cleanup regression `-count=20`: exit 0. +- Focused cleanup regression under `-race`: exit 0. +- Candidate/helper suite `-count=5`: exit 0. +- Candidate/helper suite under `-race`: exit 0. +- `go vet ./...` and `go build ./...`: exit 0. +- Every recorded fresh database and PostgreSQL session residue count: zero. + +Revision 2 reruns a focused exact-candidate smoke plus vet/build to bind the +unchanged product blob to this handoff; it does not rewrite or reclassify the +existing broad failures. + +The revision-2 commands and exits are recorded verbatim in `14-evidence-r2-focused.log` +and `15-evidence-r2-static.txt`: + +- `go test -p=1 ./internal/db/gorm -run ^TestOpenCandidateTestDB_SubtestOwnerClosesPoolWithoutPrematureClose$ -count=3`: exit 0; +- `go vet ./...`: exit 0; +- `go build ./...`: exit 0. + +The focused run used fresh database `engram_chk_dbph_evr2_focus_a` and ended +with zero database and PostgreSQL activity residue. Its detached temporary +worktree `D:\Dev\engram\.agent\worktrees\dbph-evidence-r2-runtime` was removed +and is no longer registered. No LF/CRLF verification worktree is used: the +adversarial harness mutates GUID-scoped ordinary files and removes them. + +## Non-paradox checksum contract + +The representation is machine-explicit: `git-blob-bytes-v1`. + +- A manifest entry binds path, Git blob OID, SHA-256, and exact blob byte count. +- Checked-out working-tree bytes are never checksum contract bytes. +- Text blobs in this packet are clean-filtered LF Git blobs. CRLF/raw checkout + substitution must fail. +- `MANIFEST.json` excludes itself and the outer sums file. +- Final `MANIFEST.json` is generated first. +- `SHA256SUMS.txt` is generated second, includes the final manifest, and excludes + itself. No self-referential hash is claimed. + +`Verify-DBPoolHygieneEvidence.ps1` checks the Git object type, path-to-OID +binding, SHA-256, byte count, complete outer sum set, generation-order headers, +and regenerated exact-parent inventory. + +## Permanent fail-closed adversarial proof + +`Test-DBPoolHygieneEvidenceAdversarial.ps1` runs one valid baseline and four +mutations. The harness succeeds only when the baseline exits zero and every +mutation exits nonzero with its expected failure class: + +1. stale/mutated manifest entry; +2. raw CRLF manifest bytes under an LF/Git-blob contract; +3. unsupported raw-checkout representation contract; +4. forged 76-call/six-file inventory. + +The harness uses a GUID-scoped directory under the operating-system temp root, +verifies that path before recursive deletion, and requires zero temp residue. +It creates no Git worktree and no PostgreSQL database. + +The staged-index proof commands are: + +- `pwsh -NoProfile -File Verify-DBPoolHygieneEvidence.ps1 -RepositoryRoot -SourceMode GitIndex -OutputPath verifier-proof.json`: exit 0, PASS, 25 manifest entries, 26 checksum entries, and regenerated 83/8 inventory; +- `pwsh -NoProfile -File Test-DBPoolHygieneEvidenceAdversarial.ps1 -RepositoryRoot -SourceMode GitIndex -OutputPath adversarial-proof.json`: exit 0, with baseline exit 0 and each of the four required mutations exit 1. + +## Finish state + +`review-needed`: one atomic, clean, evidence-only successor is ready for a new +independent checker. No merge, push, rebase, tag, release, integration, primary +checkout, canonical roadmap, or shared control-plane mutation was performed. diff --git a/.agent/reports/2026-07-10-db-test-pool-hygiene-maker.md b/.agent/reports/2026-07-10-db-test-pool-hygiene-maker.md index c937e54d..d951bf50 100644 --- a/.agent/reports/2026-07-10-db-test-pool-hygiene-maker.md +++ b/.agent/reports/2026-07-10-db-test-pool-hygiene-maker.md @@ -1,6 +1,6 @@ # DB-TEST-POOL-HYGIENE maker report -Status: **READY_FOR_CHECK** +Status: **READY_FOR_RECHECK — EVIDENCE REVISION 2** This is a maker handoff, not a PASS/acceptance verdict. A fresh checker must review the successor before integration. @@ -8,9 +8,12 @@ review the successor before integration. ## Boundary - Exact parent: `bd68c05baf4b7250096dd84f56bebea2aa555970` -- Branch: `work/prc-db-test-pool-hygiene` -- Worktree: `D:\Dev\engram\.agent\worktrees\dbph` +- Product/evidence candidate: `276337b3e96aa5af6d2e7dd9a0002ff957e5ffc9` +- Evidence revision branch: `work/prc-db-test-pool-hygiene-evidence-r2` +- Evidence revision worktree: `D:\Dev\engram\.agent\worktrees\dbph-evidence-r2` - Product scope: none; only `internal/db/gorm/candidate_store_test.go` changed. +- Revision-2 scope: evidence/report/verifier bytes only. The product/test file is + byte-identical to the candidate (`62260c1a...`). - Forbidden canonical register/Markdown/HTML, integration, tag, remote, and unrelated product paths were not changed. - Exact handoff SHA is supplied by the maker handoff after the single commit; @@ -20,7 +23,7 @@ review the successor before integration. `openCandidateTestDB` created a GORM/`database/sql` PostgreSQL pool but never closed it. It is a package-wide test owner, not a two-test local helper: exact -current-source reference counting found 76 pre-existing call sites across six +exact-parent mechanical inventory found 83 pre-existing call sites across eight `*_test.go` files. Sequential top-level tests therefore retained idle pools for the lifetime of one `go test` process and exhausted PostgreSQL's `max_connections=100` budget. @@ -112,8 +115,19 @@ FAIL/WARN, not green or allowlisted. metadata/failure/package-result summaries for the tracked packet. The summaries retain every top-level failure, every client-exhaustion record, command/limit metadata, exit code, and residue result. +7. Independent checking found that the first packet omitted seven exact-parent + call sites in the two temporal-truth test files, advertised 76/6 instead of + 83/8, and wrote a stale outer checksum for the final manifest. Revision 2 + closes those audit defects without changing product/test implementation. +8. Revision 2 uses the machine-explicit `git-blob-bytes-v1` representation. + `MANIFEST.json` excludes itself and the outer sums file; the outer sums file + is generated only after the final manifest and includes the manifest. This + avoids a self-hash paradox. The permanent verifier rejects CRLF/raw-file + substitution, stale manifest entries, and false 76/6 inventory. ## Finish state -`review-needed`: one clean successor commit is handed to a fresh checker. No +`review-needed`: one clean evidence-only successor commit is handed to a fresh +checker. The exact revision commit is reported after commit creation because a +commit cannot embed its own hash. No integration, release, tag, push, or self-acceptance action was taken. diff --git a/.agent/reports/evidence/production-ready/db-test-pool-hygiene/14-evidence-r2-focused.log b/.agent/reports/evidence/production-ready/db-test-pool-hygiene/14-evidence-r2-focused.log new file mode 100644 index 00000000..5aa37f3b --- /dev/null +++ b/.agent/reports/evidence/production-ready/db-test-pool-hygiene/14-evidence-r2-focused.log @@ -0,0 +1,14 @@ +head_sha=276337b3e96aa5af6d2e7dd9a0002ff957e5ffc9 +worktree=D:\Dev\engram\.agent\worktrees\dbph-evidence-r2-runtime +database=engram_chk_dbph_evr2_focus_a +command=go test -p=1 ./internal/db/gorm -run ^TestOpenCandidateTestDB_SubtestOwnerClosesPoolWithoutPrematureClose$ -count=3 +max_connections=100 +superuser_reserved_connections=3 +started_utc=2026-07-10T13:56:26.7004264Z +activity_before_test=0 +ok github.com/thebtf/engram/internal/db/gorm 5.014s +test_exit=0 +activity_after_test_process=0 +database_residue=0 +activity_residue=0 +finished_utc=2026-07-10T13:56:38.3299151Z diff --git a/.agent/reports/evidence/production-ready/db-test-pool-hygiene/15-evidence-r2-static.txt b/.agent/reports/evidence/production-ready/db-test-pool-hygiene/15-evidence-r2-static.txt new file mode 100644 index 00000000..bad863bb --- /dev/null +++ b/.agent/reports/evidence/production-ready/db-test-pool-hygiene/15-evidence-r2-static.txt @@ -0,0 +1,11 @@ +product_candidate_sha=276337b3e96aa5af6d2e7dd9a0002ff957e5ffc9 +runtime_worktree=D:\Dev\engram\.agent\worktrees\dbph-evidence-r2-runtime +go_vet_command=go vet ./... +go_vet_exit=0 +go_build_command=go build ./... +go_build_exit=0 +focused_command=go test -p=1 ./internal/db/gorm -run ^TestOpenCandidateTestDB_SubtestOwnerClosesPoolWithoutPrematureClose$ -count=3 +focused_exit=0 +focused_database=engram_chk_dbph_evr2_focus_a +focused_database_residue=0 +focused_activity_residue=0 diff --git a/.agent/reports/evidence/production-ready/db-test-pool-hygiene/DB-TEST-POOL-HYGIENE.evidence-r2.json b/.agent/reports/evidence/production-ready/db-test-pool-hygiene/DB-TEST-POOL-HYGIENE.evidence-r2.json new file mode 100644 index 00000000..73438a1e --- /dev/null +++ b/.agent/reports/evidence/production-ready/db-test-pool-hygiene/DB-TEST-POOL-HYGIENE.evidence-r2.json @@ -0,0 +1,71 @@ +{ + "schema_version": 1, + "generated_utc": "2026-07-10T13:50:06.3759908Z", + "status": "READY_FOR_RECHECK", + "product_parent_sha": "bd68c05baf4b7250096dd84f56bebea2aa555970", + "product_candidate_sha": "276337b3e96aa5af6d2e7dd9a0002ff957e5ffc9", + "evidence_revision_base_sha": "276337b3e96aa5af6d2e7dd9a0002ff957e5ffc9", + "evidence_revision_head_sha": null, + "evidence_revision_head_reason": "reported after the atomic commit because a commit cannot embed its own hash", + "branch": "work/prc-db-test-pool-hygiene-evidence-r2", + "worktree": "D:\\Dev\\engram\\.agent\\worktrees\\dbph-evidence-r2", + "product_or_test_paths_changed_by_revision": [], + "product_test_blob": { + "path": "internal/db/gorm/candidate_store_test.go", + "git_blob_oid": "7337f1bd8da4fb315de842eea2e3cce5476250a3", + "sha256": "62260c1a2e0705b065295322dd23fcf9b17fd47cb5ebc64134630788e2d23e09", + "byte_identical_to_product_candidate": true + }, + "inventory": { + "parent_sha": "bd68c05baf4b7250096dd84f56bebea2aa555970", + "call_sites": 83, + "files": 8, + "artifact": ".agent/reports/evidence/production-ready/db-test-pool-hygiene/INVENTORY.json" + }, + "runtime_evidence": { + "max_connections": 100, + "parent_semantic_failures": 6, + "parent_secondary_exhaustion_failures": 6, + "parent_too_many_clients_records": 9, + "candidate_semantic_failures": 6, + "candidate_secondary_exhaustion_failures": 0, + "candidate_too_many_clients_records": 0, + "focused_repeat20_exit": 0, + "focused_race_exit": 0, + "candidate_repeat5_exit": 0, + "candidate_race_exit": 0, + "go_vet_all_exit": 0, + "go_build_all_exit": 0, + "revision2_focused_count": 3, + "revision2_focused_exit": 0, + "revision2_go_vet_all_exit": 0, + "revision2_go_build_all_exit": 0, + "database_residue": 0, + "postgres_session_residue": 0 + }, + "representation_contract": { + "id": "git-blob-bytes-v1", + "digest": "SHA-256", + "path_binding": "Git blob OID plus SHA-256 plus byte count", + "working_tree_bytes_are_not_contract_bytes": true, + "manifest_generation_order": "final MANIFEST.json first, SHA256SUMS.txt second", + "manifest_self_reference": "excluded", + "outer_checksum_self_reference": "excluded" + }, + "adversarial_cases_required": [ + "stale_manifest_entry", + "crlf_raw_representation", + "incorrect_representation_contract", + "false_inventory_76_6" + ], + "evidence_verification": { + "source_mode": "GitIndex", + "verifier_exit": 0, + "verifier_status": "PASS", + "adversarial_harness_exit": 0, + "baseline_exit": 0, + "mutation_exits": [1, 1, 1, 1], + "adversarial_temp_root_removed": true, + "runtime_worktree_removed_and_unregistered": true + } +} diff --git a/.agent/reports/evidence/production-ready/db-test-pool-hygiene/DB-TEST-POOL-HYGIENE.final.json b/.agent/reports/evidence/production-ready/db-test-pool-hygiene/DB-TEST-POOL-HYGIENE.final.json index 369b6179..49fdd939 100644 --- a/.agent/reports/evidence/production-ready/db-test-pool-hygiene/DB-TEST-POOL-HYGIENE.final.json +++ b/.agent/reports/evidence/production-ready/db-test-pool-hygiene/DB-TEST-POOL-HYGIENE.final.json @@ -1,11 +1,13 @@ { - "status": "READY_FOR_CHECK", + "status": "READY_FOR_RECHECK_EVIDENCE_R2", "parent_sha": "bd68c05baf4b7250096dd84f56bebea2aa555970", - "branch": "work/prc-db-test-pool-hygiene", + "product_candidate_sha": "276337b3e96aa5af6d2e7dd9a0002ff957e5ffc9", + "branch": "work/prc-db-test-pool-hygiene-evidence-r2", "changed_implementation_paths": [ "internal/db/gorm/candidate_store_test.go" ], - "preexisting_helper_call_sites_closed": 76, + "preexisting_helper_call_sites_closed": 83, + "preexisting_helper_call_site_files": 8, "parent_red": { "session_baseline": 0, "sessions_after_child_owners": [1, 2, 3, 4], @@ -38,6 +40,14 @@ "database": 0, "postgres_sessions": 0 }, + "evidence_contract": { + "representation": "git-blob-bytes-v1", + "manifest_self_reference": "excluded", + "outer_checksum_generation_order": "final manifest first; outer checksum second", + "inventory_parent_sha": "bd68c05baf4b7250096dd84f56bebea2aa555970", + "inventory_required_call_sites": 83, + "inventory_required_files": 8 + }, "handoff_sha": null, "handoff_sha_reason": "reported after the single commit because a commit cannot contain its own hash" } diff --git a/.agent/reports/evidence/production-ready/db-test-pool-hygiene/INVENTORY.json b/.agent/reports/evidence/production-ready/db-test-pool-hygiene/INVENTORY.json new file mode 100644 index 00000000..6c634686 --- /dev/null +++ b/.agent/reports/evidence/production-ready/db-test-pool-hygiene/INVENTORY.json @@ -0,0 +1,53 @@ +{ + "schema_version": 1, + "parent_sha": "bd68c05baf4b7250096dd84f56bebea2aa555970", + "symbol": "openCandidateTestDB", + "definition": "internal/db/gorm/candidate_store_test.go:23", + "method": "enumerate every internal/db/gorm/*_test.go Git blob at parent_sha; count lines containing openCandidateTestDB( except the func definition", + "required_call_sites": 83, + "required_files": 8, + "actual_call_sites": 83, + "actual_files": 8, + "entries": [ + { + "path": "internal/db/gorm/candidate_store_test.go", + "count": 19, + "lines": [43, 88, 165, 193, 236, 262, 290, 325, 367, 411, 450, 522, 566, 589, 611, 742, 870, 907, 1022] + }, + { + "path": "internal/db/gorm/rule_arbiter_store_test.go", + "count": 8, + "lines": [15, 23, 37, 92, 120, 153, 199, 234] + }, + { + "path": "internal/db/gorm/rule_governance_rg3_store_test.go", + "count": 9, + "lines": [16, 103, 133, 223, 268, 331, 364, 392, 427] + }, + { + "path": "internal/db/gorm/rule_governance_store_test.go", + "count": 21, + "lines": [20, 25, 39, 116, 152, 187, 228, 258, 318, 334, 371, 394, 443, 460, 489, 536, 561, 581, 606, 723, 745] + }, + { + "path": "internal/db/gorm/rule_injection_event_store_test.go", + "count": 5, + "lines": [15, 40, 99, 167, 184] + }, + { + "path": "internal/db/gorm/state_store_test.go", + "count": 14, + "lines": [28, 61, 82, 113, 135, 167, 201, 251, 309, 407, 451, 511, 553, 598] + }, + { + "path": "internal/db/gorm/temporal_truth_store_migration_test.go", + "count": 1, + "lines": [10] + }, + { + "path": "internal/db/gorm/temporal_truth_store_test.go", + "count": 6, + "lines": [18, 91, 152, 236, 296, 377] + } + ] +} diff --git a/.agent/reports/evidence/production-ready/db-test-pool-hygiene/MANIFEST.json b/.agent/reports/evidence/production-ready/db-test-pool-hygiene/MANIFEST.json index d4bac5e7..551bae16 100644 --- a/.agent/reports/evidence/production-ready/db-test-pool-hygiene/MANIFEST.json +++ b/.agent/reports/evidence/production-ready/db-test-pool-hygiene/MANIFEST.json @@ -1,96 +1,184 @@ { - "generated_utc": "2026-07-10T13:06:01.5072722Z", - "parent_sha": "bd68c05baf4b7250096dd84f56bebea2aa555970", - "branch": "work/prc-db-test-pool-hygiene", - "status": "READY_FOR_CHECK", + "schema_version": 2, + "generated_utc": "2026-07-10T14:10:39.8450122Z", + "status": "READY_FOR_RECHECK", + "product_parent_sha": "bd68c05baf4b7250096dd84f56bebea2aa555970", + "product_candidate_sha": "276337b3e96aa5af6d2e7dd9a0002ff957e5ffc9", + "evidence_revision_base_sha": "276337b3e96aa5af6d2e7dd9a0002ff957e5ffc9", + "evidence_revision_head_sha": null, + "evidence_revision_head_reason": "reported after the atomic commit because a commit cannot embed its own hash", + "representation_contract": { + "id": "git-blob-bytes-v1", + "digest": "SHA-256", + "object_type": "blob", + "path_binding": "each path at the verified Git index/revision must resolve to git_blob_oid", + "contract_bytes": "git cat-file blob exact stdout bytes", + "working_tree_bytes": "excluded; raw CRLF checkout bytes are expected to fail", + "text_git_blob_line_endings": "LF", + "manifest_self_reference": "excluded", + "outer_checksum_path": ".agent/reports/evidence/production-ready/db-test-pool-hygiene/SHA256SUMS.txt", + "outer_checksum_generation_order": "manifest-first-checksum-second", + "outer_checksum_self_reference": "excluded", + "dynamic_attestations_excluded": [ + ".agent/reports/evidence/production-ready/db-test-pool-hygiene/adversarial-proof.json", + ".agent/reports/evidence/production-ready/db-test-pool-hygiene/verifier-proof.json" + ], + "exclusion_reason": "dynamic run attestations are anchored by the final Git commit; including them would require rewriting checksums after verification" + }, + "inventory": { + "parent_sha": "bd68c05baf4b7250096dd84f56bebea2aa555970", + "required_call_sites": 83, + "required_files": 8, + "path": ".agent/reports/evidence/production-ready/db-test-pool-hygiene/INVENTORY.json" + }, "entries": [ { "path": ".agent/reports/2026-07-10-db-test-pool-hygiene-maker.md", - "bytes": 5908, - "sha256": "937c4b815e8a96d72ca514a1e0fd36bbc46f6e2c20be360604b9c5acdb92cab6" + "git_blob_oid": "d951bf50086e78699edbcc59be2a7126461e9f80", + "bytes": 7008, + "sha256": "51c95f8471312f6fd81e1ba2d58f206d7bb368032079c47b55bd0e7147cd8001" + }, + { + "path": ".agent/reports/2026-07-10-db-test-pool-hygiene-evidence-revision-maker.md", + "git_blob_oid": "88960a7d51986a1c0de49ac4b8d4e447f0866bac", + "bytes": 5303, + "sha256": "86a843700a146ad46dfcb6e8c7cb9b8433312dcd755383761e2313d3b13c72dc" }, { "path": ".agent/reports/evidence/production-ready/db-test-pool-hygiene/01-parent-broad.summary.log", + "git_blob_oid": "95738976368ef9ca6efc765fc93107d7ea1085e8", "bytes": 3598, "sha256": "d1aa9c7a603a140be74bccc1170e78bfa2007f8aca0e48473c5b5a749a97c435" }, { "path": ".agent/reports/evidence/production-ready/db-test-pool-hygiene/02-parent-red.log", + "git_blob_oid": "75147bf5cf8eb415b060777125753122910bc063", "bytes": 6718, "sha256": "765e7e93a5b9a2384d0417199cdd66dc816f97e178219473d18b7b0a93cd31a7" }, { "path": ".agent/reports/evidence/production-ready/db-test-pool-hygiene/03-green-focused.log", + "git_blob_oid": "af10330dc3ce95ca785f9fc686a7266bc36ea80c", "bytes": 6358, "sha256": "9fbe284df01cece683d0dc6938b370dabbea030af3e39047f382e9e3c3cd4d9b" }, { "path": ".agent/reports/evidence/production-ready/db-test-pool-hygiene/04-prove-it.log", + "git_blob_oid": "476eb561d1700cf5e41f82a6e15f266de03e585e", "bytes": 6716, "sha256": "b9acc25599272b3942beaaaabd5a042c86128765e3d8b1b9ad142b6b0d1fc20f" }, { "path": ".agent/reports/evidence/production-ready/db-test-pool-hygiene/05-post-prove-green.log", + "git_blob_oid": "fc72ec588c82340927d61aa81b83e1685eddd520", "bytes": 561, "sha256": "053f89d836427c51e34214ea20d708f6cca16b5078034f08263a9af2caec0f9c" }, { "path": ".agent/reports/evidence/production-ready/db-test-pool-hygiene/06-repeat20.log", + "git_blob_oid": "e7c7bbaf80c6f85101883f4087a74ccb7fb0997c", "bytes": 559, "sha256": "27f91058ef2f24c18445f0757373e27040f0004154ef93ad4017b612c830eca9" }, { "path": ".agent/reports/evidence/production-ready/db-test-pool-hygiene/07-race.log", + "git_blob_oid": "b985980b1e82e4db302090b650ac2c5d30004b99", "bytes": 561, "sha256": "3d1b59a1852b5cb6709b3a2997c34f6b0d940dfd0bec18984776363b0a027a5f" }, { "path": ".agent/reports/evidence/production-ready/db-test-pool-hygiene/08-successor-broad.summary.log", + "git_blob_oid": "3de11652d1d4bd86d3229f5f6282a4a001276bff", "bytes": 1196, "sha256": "69486af589b72b841163a134b26ae21396156be6b737f9750ffc1c17c1151db2" }, { "path": ".agent/reports/evidence/production-ready/db-test-pool-hygiene/09-candidate-repeat5.log", + "git_blob_oid": "c97977d6093c39ebd4c817f150883bd49cfb7ee1", "bytes": 546, "sha256": "432f97671e9a9b0c3a37f25a54cc9ea8b623e4904f69c846c0fffa70c3557e49" }, { "path": ".agent/reports/evidence/production-ready/db-test-pool-hygiene/10-candidate-race.log", + "git_blob_oid": "164fd019b9d72797b621fbe5bbb93d0679fd33af", "bytes": 549, "sha256": "57a31b83602ce023094fd05bdbcea11dee6cc4c5cca0b21df25b70010bfd224b" }, { "path": ".agent/reports/evidence/production-ready/db-test-pool-hygiene/11-parent-successor-comparison.txt", + "git_blob_oid": "736ee7c69b7cfd77cc2ca8fe36a879f6ae645eeb", "bytes": 1489, "sha256": "1137da3adb9e75c178072ae942fadd1c23c56721388e202c942d56901ea17db1" }, { "path": ".agent/reports/evidence/production-ready/db-test-pool-hygiene/12-static-gates.txt", + "git_blob_oid": "184376c2504810ff20f4a0728ce0044cffc0089a", "bytes": 249, "sha256": "94ca19b3d51903449acefc41241e8c397198453f4c6674bed1a2dc61ea49b5f4" }, { "path": ".agent/reports/evidence/production-ready/db-test-pool-hygiene/13-final-residue.log", + "git_blob_oid": "8e13b980d7323c64a2a51b54f218a601f468a7be", "bytes": 387, "sha256": "31b07bacde4ad835c55a4aa85e09f01edd2dfeb0887011547b4b17d4f686b40e" }, + { + "path": ".agent/reports/evidence/production-ready/db-test-pool-hygiene/14-evidence-r2-focused.log", + "git_blob_oid": "5aa37f3b16a497ae035fe1f885790f72cd274f50", + "bytes": 570, + "sha256": "4c544c5ea7e5e0f7d6518f3af222054589bd258e6aa373c833789ec2532f7a2d" + }, + { + "path": ".agent/reports/evidence/production-ready/db-test-pool-hygiene/15-evidence-r2-static.txt", + "git_blob_oid": "bad863bb9df549f69dd5df0910232b45df588611", + "bytes": 473, + "sha256": "6b74e1f64b909f8ffe0042fbc7d2dc6d8310752f2c7398352a395d6d6362b677" + }, + { + "path": ".agent/reports/evidence/production-ready/db-test-pool-hygiene/DB-TEST-POOL-HYGIENE.evidence-r2.json", + "git_blob_oid": "73438a1ea8917c62666d779a356e09eaa7768a85", + "bytes": 2711, + "sha256": "c4fdaad603d5c03954cd1026afc9a9c01c0e0963c367390247a795b5382584e1" + }, { "path": ".agent/reports/evidence/production-ready/db-test-pool-hygiene/DB-TEST-POOL-HYGIENE.final.json", - "bytes": 1253, - "sha256": "1c0d9251885329624a470bb2872feabe4f1c5e09c8434d8784561da92a13a645" + "git_blob_oid": "49fdd939d5b3af05cedc9a2dc1c0a2845ce9d421", + "bytes": 1742, + "sha256": "91d76ab5a76e0ad0758aa3ba6962e0e93b8d912ac2a8166f438976d63a7c7918" }, { "path": ".agent/reports/evidence/production-ready/db-test-pool-hygiene/DB-TEST-POOL-HYGIENE.red.json", + "git_blob_oid": "145b3e367a1509f4a663d57e94eea29081afa533", "bytes": 842, "sha256": "98398e3e46628fd0f3f08ca54b1baa1b96f70554ac7316712a4e1906d96e0cb0" }, + { + "path": ".agent/reports/evidence/production-ready/db-test-pool-hygiene/INVENTORY.json", + "git_blob_oid": "6c63468628a1501bc5188ae1067448b9e89a9d73", + "bytes": 1742, + "sha256": "64a1b454068b5480af0aa512d5157222a4760798f4e9689aa9887643939ccb10" + }, { "path": ".agent/reports/evidence/production-ready/db-test-pool-hygiene/Invoke-DBPoolHygieneGo.ps1", + "git_blob_oid": "9f3d063e9e60307818f45ef6e4f0939a8a286315", "bytes": 4848, "sha256": "fb886ee1749c7b2d45adf9bd43ac2a1434cab24c9ce35bb548f1751bd9e71861" }, + { + "path": ".agent/reports/evidence/production-ready/db-test-pool-hygiene/Test-DBPoolHygieneEvidenceAdversarial.ps1", + "git_blob_oid": "cd6754d9bf926aaabda85dfe775f5e7fa716b3dc", + "bytes": 9341, + "sha256": "d82926f353a9f3924c6047a279eb22dfb201da59fe190098d3fef4a6c058a502" + }, + { + "path": ".agent/reports/evidence/production-ready/db-test-pool-hygiene/Verify-DBPoolHygieneEvidence.ps1", + "git_blob_oid": "1a83d15c370cc74e3eed7b41316c7dac11f175c5", + "bytes": 12657, + "sha256": "56b807d244df9c0f8ac2f8405d2eb6bfec90a6198ae8f9a695a97e71a3d16632" + }, { "path": "internal/db/gorm/candidate_store_test.go", + "git_blob_oid": "7337f1bd8da4fb315de842eea2e3cce5476250a3", "bytes": 47016, "sha256": "62260c1a2e0705b065295322dd23fcf9b17fd47cb5ebc64134630788e2d23e09" } diff --git a/.agent/reports/evidence/production-ready/db-test-pool-hygiene/SHA256SUMS.txt b/.agent/reports/evidence/production-ready/db-test-pool-hygiene/SHA256SUMS.txt index d676da06..36b957e7 100644 --- a/.agent/reports/evidence/production-ready/db-test-pool-hygiene/SHA256SUMS.txt +++ b/.agent/reports/evidence/production-ready/db-test-pool-hygiene/SHA256SUMS.txt @@ -1,4 +1,8 @@ -937c4b815e8a96d72ca514a1e0fd36bbc46f6e2c20be360604b9c5acdb92cab6 .agent/reports/2026-07-10-db-test-pool-hygiene-maker.md +# representation_contract=git-blob-bytes-v1 +# manifest_generation_order=manifest-first-checksum-second +# checksum_self_reference=excluded +51c95f8471312f6fd81e1ba2d58f206d7bb368032079c47b55bd0e7147cd8001 .agent/reports/2026-07-10-db-test-pool-hygiene-maker.md +86a843700a146ad46dfcb6e8c7cb9b8433312dcd755383761e2313d3b13c72dc .agent/reports/2026-07-10-db-test-pool-hygiene-evidence-revision-maker.md d1aa9c7a603a140be74bccc1170e78bfa2007f8aca0e48473c5b5a749a97c435 .agent/reports/evidence/production-ready/db-test-pool-hygiene/01-parent-broad.summary.log 765e7e93a5b9a2384d0417199cdd66dc816f97e178219473d18b7b0a93cd31a7 .agent/reports/evidence/production-ready/db-test-pool-hygiene/02-parent-red.log 9fbe284df01cece683d0dc6938b370dabbea030af3e39047f382e9e3c3cd4d9b .agent/reports/evidence/production-ready/db-test-pool-hygiene/03-green-focused.log @@ -12,8 +16,14 @@ b9acc25599272b3942beaaaabd5a042c86128765e3d8b1b9ad142b6b0d1fc20f .agent/reports 1137da3adb9e75c178072ae942fadd1c23c56721388e202c942d56901ea17db1 .agent/reports/evidence/production-ready/db-test-pool-hygiene/11-parent-successor-comparison.txt 94ca19b3d51903449acefc41241e8c397198453f4c6674bed1a2dc61ea49b5f4 .agent/reports/evidence/production-ready/db-test-pool-hygiene/12-static-gates.txt 31b07bacde4ad835c55a4aa85e09f01edd2dfeb0887011547b4b17d4f686b40e .agent/reports/evidence/production-ready/db-test-pool-hygiene/13-final-residue.log -1c0d9251885329624a470bb2872feabe4f1c5e09c8434d8784561da92a13a645 .agent/reports/evidence/production-ready/db-test-pool-hygiene/DB-TEST-POOL-HYGIENE.final.json +4c544c5ea7e5e0f7d6518f3af222054589bd258e6aa373c833789ec2532f7a2d .agent/reports/evidence/production-ready/db-test-pool-hygiene/14-evidence-r2-focused.log +6b74e1f64b909f8ffe0042fbc7d2dc6d8310752f2c7398352a395d6d6362b677 .agent/reports/evidence/production-ready/db-test-pool-hygiene/15-evidence-r2-static.txt +c4fdaad603d5c03954cd1026afc9a9c01c0e0963c367390247a795b5382584e1 .agent/reports/evidence/production-ready/db-test-pool-hygiene/DB-TEST-POOL-HYGIENE.evidence-r2.json +91d76ab5a76e0ad0758aa3ba6962e0e93b8d912ac2a8166f438976d63a7c7918 .agent/reports/evidence/production-ready/db-test-pool-hygiene/DB-TEST-POOL-HYGIENE.final.json 98398e3e46628fd0f3f08ca54b1baa1b96f70554ac7316712a4e1906d96e0cb0 .agent/reports/evidence/production-ready/db-test-pool-hygiene/DB-TEST-POOL-HYGIENE.red.json +64a1b454068b5480af0aa512d5157222a4760798f4e9689aa9887643939ccb10 .agent/reports/evidence/production-ready/db-test-pool-hygiene/INVENTORY.json fb886ee1749c7b2d45adf9bd43ac2a1434cab24c9ce35bb548f1751bd9e71861 .agent/reports/evidence/production-ready/db-test-pool-hygiene/Invoke-DBPoolHygieneGo.ps1 -9af2a11b4a9aeea2ac0fc8466eb0a0070b4f832df8106043823a5cc5ddb289f2 .agent/reports/evidence/production-ready/db-test-pool-hygiene/MANIFEST.json +d82926f353a9f3924c6047a279eb22dfb201da59fe190098d3fef4a6c058a502 .agent/reports/evidence/production-ready/db-test-pool-hygiene/Test-DBPoolHygieneEvidenceAdversarial.ps1 +56b807d244df9c0f8ac2f8405d2eb6bfec90a6198ae8f9a695a97e71a3d16632 .agent/reports/evidence/production-ready/db-test-pool-hygiene/Verify-DBPoolHygieneEvidence.ps1 62260c1a2e0705b065295322dd23fcf9b17fd47cb5ebc64134630788e2d23e09 internal/db/gorm/candidate_store_test.go +9c208ea68ebff542e14b937f69fce785dce75abaadadabe8c80a4b018b76206b .agent/reports/evidence/production-ready/db-test-pool-hygiene/MANIFEST.json diff --git a/.agent/reports/evidence/production-ready/db-test-pool-hygiene/Test-DBPoolHygieneEvidenceAdversarial.ps1 b/.agent/reports/evidence/production-ready/db-test-pool-hygiene/Test-DBPoolHygieneEvidenceAdversarial.ps1 new file mode 100644 index 00000000..cd6754d9 --- /dev/null +++ b/.agent/reports/evidence/production-ready/db-test-pool-hygiene/Test-DBPoolHygieneEvidenceAdversarial.ps1 @@ -0,0 +1,210 @@ +param( + [Parameter(Mandatory = $true)] + [string]$RepositoryRoot, + + [ValidateSet('GitRevision', 'GitIndex')] + [string]$SourceMode = 'GitRevision', + + [string]$Revision = 'HEAD', + + [string]$OutputPath, + + [string]$VerifierPath = '.agent/reports/evidence/production-ready/db-test-pool-hygiene/Verify-DBPoolHygieneEvidence.ps1', + + [string]$ManifestPath = '.agent/reports/evidence/production-ready/db-test-pool-hygiene/MANIFEST.json', + + [string]$SumsPath = '.agent/reports/evidence/production-ready/db-test-pool-hygiene/SHA256SUMS.txt', + + [string]$InventoryPath = '.agent/reports/evidence/production-ready/db-test-pool-hygiene/INVENTORY.json' +) + +$ErrorActionPreference = 'Stop' +$utf8NoBom = [Text.UTF8Encoding]::new($false) +$resolvedRepository = (Resolve-Path -LiteralPath $RepositoryRoot).Path +$resolvedVerifier = (Resolve-Path -LiteralPath (Join-Path $resolvedRepository $VerifierPath)).Path +$tempBase = [IO.Path]::GetFullPath([IO.Path]::GetTempPath()) +$tempRoot = Join-Path $tempBase ("engram-dbph-evidence-r2-" + [Guid]::NewGuid().ToString('N')) +if (-not $tempRoot.StartsWith($tempBase, [StringComparison]::OrdinalIgnoreCase) -or + -not [IO.Path]::GetFileName($tempRoot).StartsWith('engram-dbph-evidence-r2-', [StringComparison]::Ordinal)) { + throw "unsafe temporary root: $tempRoot" +} +[IO.Directory]::CreateDirectory($tempRoot) | Out-Null + +function Invoke-GitRaw { + param([Parameter(Mandatory = $true)][string[]]$Arguments) + $startInfo = [Diagnostics.ProcessStartInfo]::new() + $startInfo.FileName = 'git' + $startInfo.WorkingDirectory = $resolvedRepository + $startInfo.UseShellExecute = $false + $startInfo.RedirectStandardOutput = $true + $startInfo.RedirectStandardError = $true + foreach ($argument in $Arguments) { + $startInfo.ArgumentList.Add($argument) + } + $process = [Diagnostics.Process]::Start($startInfo) + $stream = [IO.MemoryStream]::new() + $process.StandardOutput.BaseStream.CopyTo($stream) + $standardError = $process.StandardError.ReadToEnd() + $process.WaitForExit() + if ($process.ExitCode -ne 0) { + throw "git $($Arguments -join ' ') failed: $standardError" + } + return $stream.ToArray() +} + +function Get-CanonicalBytes { + param([Parameter(Mandatory = $true)][string]$Path) + if ($SourceMode -eq 'GitIndex') { + return Invoke-GitRaw -Arguments @('show', ":$Path") + } + return Invoke-GitRaw -Arguments @('show', "${Revision}:$Path") +} + +function Write-JsonNoBom { + param( + [Parameter(Mandatory = $true)]$Value, + [Parameter(Mandatory = $true)][string]$Path + ) + $json = (($Value | ConvertTo-Json -Depth 16) -replace "`r`n", "`n") + [IO.File]::WriteAllText($Path, $json + "`n", $utf8NoBom) +} + +function Invoke-VerifierCase { + param( + [Parameter(Mandatory = $true)][string]$Name, + [string]$ManifestOverride, + [string]$SumsOverride, + [string]$InventoryOverride, + [Parameter(Mandatory = $true)][int]$ExpectedExit, + [string]$ExpectedFailure + ) + + $resultPath = Join-Path $tempRoot "$Name.result.json" + $logPath = Join-Path $tempRoot "$Name.console.log" + $arguments = @( + '-NoProfile', + '-File', $resolvedVerifier, + '-RepositoryRoot', $resolvedRepository, + '-SourceMode', $SourceMode, + '-Revision', $Revision, + '-ManifestPath', $ManifestPath, + '-SumsPath', $SumsPath, + '-InventoryPath', $InventoryPath, + '-OutputPath', $resultPath, + '-Quiet' + ) + if (-not [string]::IsNullOrWhiteSpace($ManifestOverride)) { + $arguments += @('-ManifestOverridePath', $ManifestOverride) + } + if (-not [string]::IsNullOrWhiteSpace($SumsOverride)) { + $arguments += @('-SumsOverridePath', $SumsOverride) + } + if (-not [string]::IsNullOrWhiteSpace($InventoryOverride)) { + $arguments += @('-InventoryOverridePath', $InventoryOverride) + } + + & pwsh @arguments *> $logPath + $exitCode = $LASTEXITCODE + $result = if (Test-Path -LiteralPath $resultPath) { + Get-Content -Raw -LiteralPath $resultPath | ConvertFrom-Json + } else { + $null + } + $failureText = if ($null -eq $result) { '' } else { @($result.failures) -join ' | ' } + $exitMatches = if ($ExpectedExit -eq 0) { $exitCode -eq 0 } else { $exitCode -ne 0 } + $failureMatches = if ([string]::IsNullOrWhiteSpace($ExpectedFailure)) { + $true + } else { + $failureText.Contains($ExpectedFailure) + } + return [pscustomobject]@{ + name = $Name + expected_exit = if ($ExpectedExit -eq 0) { 0 } else { 'nonzero' } + actual_exit = $exitCode + verifier_status = if ($null -eq $result) { 'NO_RESULT' } else { $result.status } + expected_failure = $ExpectedFailure + observed_failures = if ($null -eq $result) { @('verifier did not write result JSON') } else { @($result.failures) } + pass = $exitMatches -and $failureMatches -and $null -ne $result + } +} + +$cases = [Collections.Generic.List[object]]::new() +$cleanupError = $null +try { + $canonicalManifest = Get-CanonicalBytes -Path $ManifestPath + $canonicalSums = Get-CanonicalBytes -Path $SumsPath + $canonicalInventory = Get-CanonicalBytes -Path $InventoryPath + $manifestFixture = Join-Path $tempRoot 'MANIFEST.canonical.json' + $sumsFixture = Join-Path $tempRoot 'SHA256SUMS.canonical.txt' + $inventoryFixture = Join-Path $tempRoot 'INVENTORY.canonical.json' + [IO.File]::WriteAllBytes($manifestFixture, $canonicalManifest) + [IO.File]::WriteAllBytes($sumsFixture, $canonicalSums) + [IO.File]::WriteAllBytes($inventoryFixture, $canonicalInventory) + + $cases.Add((Invoke-VerifierCase -Name 'baseline' -ExpectedExit 0)) + + $staleManifest = (Get-Content -Raw -LiteralPath $manifestFixture | ConvertFrom-Json) + $staleManifest.entries[0].sha256 = '0000000000000000000000000000000000000000000000000000000000000000' + $staleManifestPath = Join-Path $tempRoot 'MANIFEST.stale-entry.json' + Write-JsonNoBom -Value $staleManifest -Path $staleManifestPath + $cases.Add((Invoke-VerifierCase -Name 'stale_manifest_entry' -ManifestOverride $staleManifestPath -ExpectedExit 1 -ExpectedFailure 'manifest SHA-256 mismatch')) + + $manifestText = $utf8NoBom.GetString($canonicalManifest) + $crlfManifestPath = Join-Path $tempRoot 'MANIFEST.raw-crlf.json' + [IO.File]::WriteAllText($crlfManifestPath, ($manifestText -replace "(? Date: Fri, 10 Jul 2026 17:28:43 +0300 Subject: [PATCH 029/111] ci: close release gate false greens --- .github/workflows/test.yml | 341 +++++++++++++++++++++- scripts/production-gates/run-db-suite.ps1 | 146 ++++++++- 2 files changed, 474 insertions(+), 13 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 6b93dac8..ce38dd86 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -125,16 +125,290 @@ jobs: return $match.Groups['body'].Value } - function Assert-TokenOrder([string]$text, [string[]]$tokens) { - $previous = -1 - foreach ($token in $tokens) { - $index = $text.IndexOf($token, [System.StringComparison]::Ordinal) - if ($index -lt 0) { throw "ordered contract token is missing '$token'" } - if ($index -le $previous) { throw "ordered contract token '$token' appears out of order" } - $previous = $index + function ConvertTo-AstShape([string]$text) { + return [regex]::Replace($text, '\s+', '') + } + + function Get-PowerShellAst([string]$text) { + $tokens = $null + $parseErrors = $null + $ast = [System.Management.Automation.Language.Parser]::ParseInput($text, [ref]$tokens, [ref]$parseErrors) + if ($parseErrors.Count -ne 0) { + throw "PowerShell source has $($parseErrors.Count) parse error(s): $([string]::Join('; ', @($parseErrors | ForEach-Object Message)))" + } + return $ast + } + + function Get-Ancestor([System.Management.Automation.Language.Ast]$node, [type]$type) { + $cursor = $node.Parent + while ($null -ne $cursor) { + if ($cursor -is $type) { return $cursor } + $cursor = $cursor.Parent + } + return $null + } + + function Test-InExactIfClause([System.Management.Automation.Language.Ast]$node, [string]$expectedCondition) { + $expectedShape = ConvertTo-AstShape $expectedCondition + $cursor = $node.Parent + while ($null -ne $cursor) { + if ($cursor -is [System.Management.Automation.Language.IfStatementAst]) { + foreach ($clause in $cursor.Clauses) { + $body = $clause.Item2 + if ($node.Extent.StartOffset -ge $body.Extent.StartOffset -and $node.Extent.EndOffset -le $body.Extent.EndOffset -and (ConvertTo-AstShape $clause.Item1.Extent.Text) -ceq $expectedShape) { + return $true + } + } + } + $cursor = $cursor.Parent + } + return $false + } + + function Assert-ExactCommandControlFlow( + [System.Management.Automation.Language.CommandAst]$node, + [string[]]$expectedIfConditions, + [string[]]$expectedLoopConditions + ) { + $actualIfConditions = [System.Collections.Generic.List[string]]::new() + $actualLoopConditions = [System.Collections.Generic.List[string]]::new() + $cursor = $node.Parent + while ($null -ne $cursor -and $cursor -isnot [System.Management.Automation.Language.FunctionDefinitionAst]) { + if ($cursor -is [System.Management.Automation.Language.IfStatementAst]) { + $matchedClause = $false + foreach ($clause in $cursor.Clauses) { + if ($node.Extent.StartOffset -ge $clause.Item2.Extent.StartOffset -and $node.Extent.EndOffset -le $clause.Item2.Extent.EndOffset) { + $actualIfConditions.Add((ConvertTo-AstShape $clause.Item1.Extent.Text)) + $matchedClause = $true + break + } + } + if (-not $matchedClause) { + $clauseShapes = @($cursor.Clauses | ForEach-Object { ConvertTo-AstShape $_.Item1.Extent.Text }) + $actualIfConditions.Add(('')) + } + } + elseif ($cursor -is [System.Management.Automation.Language.ForEachStatementAst]) { + $actualLoopConditions.Add(('foreach:' + (ConvertTo-AstShape $cursor.Condition.Extent.Text))) + } + elseif ($cursor -is [System.Management.Automation.Language.ForStatementAst]) { + $actualLoopConditions.Add(('for:' + (ConvertTo-AstShape $cursor.Condition.Extent.Text))) + } + elseif ($cursor -is [System.Management.Automation.Language.LoopStatementAst] -or + $cursor -is [System.Management.Automation.Language.SwitchStatementAst] -or + $cursor -is [System.Management.Automation.Language.TrapStatementAst] -or + $cursor -is [System.Management.Automation.Language.DataStatementAst] -or + $cursor -is [System.Management.Automation.Language.ScriptBlockExpressionAst]) { + throw "live invocation '$([string]$node.CommandElements[1].Value)' is hidden in unsupported or potentially unreachable control flow '$($cursor.GetType().Name)'" + } + $cursor = $cursor.Parent + } + + $expectedIfShapes = @($expectedIfConditions | ForEach-Object { ConvertTo-AstShape $_ }) + $expectedLoopShapes = @($expectedLoopConditions | ForEach-Object { ConvertTo-AstShape $_ }) + if ($actualIfConditions.Count -ne $expectedIfShapes.Count) { + throw "live invocation '$([string]$node.CommandElements[1].Value)' has $($actualIfConditions.Count) if-branch ancestor(s), expected $($expectedIfShapes.Count)" + } + foreach ($condition in $expectedIfShapes) { + if (-not $actualIfConditions.Contains($condition)) { throw "live invocation '$([string]$node.CommandElements[1].Value)' is missing exact live if-branch '$condition'" } + } + if ($actualLoopConditions.Count -ne $expectedLoopShapes.Count) { + throw "live invocation '$([string]$node.CommandElements[1].Value)' has $($actualLoopConditions.Count) loop ancestor(s), expected $($expectedLoopShapes.Count)" + } + foreach ($condition in $expectedLoopShapes) { + if (-not $actualLoopConditions.Contains($condition)) { throw "live invocation '$([string]$node.CommandElements[1].Value)' is missing exact live loop '$condition'" } } } + function Get-ExactCapturedInvocation( + [System.Management.Automation.Language.ScriptBlockAst]$ast, + [string]$name, + [string]$expectedExecutable, + [string]$expectedArguments, + [string]$expectedAssignment, + [string]$expectedIfCondition + ) { + $commands = @($ast.FindAll({ + param($node) + if ($node -isnot [System.Management.Automation.Language.CommandAst] -or $node.GetCommandName() -cne 'Invoke-CapturedProcess' -or $node.CommandElements.Count -lt 2) { return $false } + $nameNode = $node.CommandElements[1] + return ($nameNode -is [System.Management.Automation.Language.StringConstantExpressionAst] -or $nameNode -is [System.Management.Automation.Language.ExpandableStringExpressionAst]) -and [string]$nameNode.Value -ceq $name + }, $true)) + if ($commands.Count -ne 1) { throw "live Invoke-CapturedProcess '$name' cardinality must be exactly 1; found $($commands.Count)" } + $command = $commands[0] + if ($command.CommandElements.Count -ne 10) { throw "live invocation '$name' argument cardinality drifted: found $($command.CommandElements.Count - 1), expected 9" } + if ($command.CommandElements[2].Extent.Text -cne $expectedExecutable) { throw "live invocation '$name' executable drifted: '$($command.CommandElements[2].Extent.Text)'" } + if ((ConvertTo-AstShape $command.CommandElements[3].Extent.Text) -cne (ConvertTo-AstShape $expectedArguments)) { throw "live invocation '$name' command arguments drifted: '$($command.CommandElements[3].Extent.Text)'" } + $assignment = Get-Ancestor $command ([System.Management.Automation.Language.AssignmentStatementAst]) + if ($null -eq $assignment -or $assignment.Left.Extent.Text -cne $expectedAssignment) { throw "live invocation '$name' is not assigned to $expectedAssignment" } + $function = Get-Ancestor $command ([System.Management.Automation.Language.FunctionDefinitionAst]) + if ($null -eq $function -or $function.Name -cne 'Invoke-DevStandContract') { throw "live invocation '$name' is outside Invoke-DevStandContract" } + if (-not (Test-InExactIfClause $command $expectedIfCondition)) { throw "live invocation '$name' is outside the required branch '$expectedIfCondition'" } + return $command + } + + function Assert-ExactImageTargetMap([System.Management.Automation.Language.ScriptBlockAst]$ast) { + $functions = @($ast.FindAll({ param($node) $node -is [System.Management.Automation.Language.FunctionDefinitionAst] -and $node.Name -ceq 'Get-DevStandImageTargets' }, $true)) + if ($functions.Count -ne 1) { throw "Get-DevStandImageTargets cardinality must be exactly 1; found $($functions.Count)" } + $maps = @($functions[0].Body.FindAll({ param($node) $node -is [System.Management.Automation.Language.HashtableAst] }, $true)) + if ($maps.Count -ne 1) { throw "Get-DevStandImageTargets must contain exactly one live hashtable; found $($maps.Count)" } + $expected = [ordered]@{ postgres = "'pgvector/pgvector:pg17'"; server = "'ghcr.io/thebtf/engram:main'"; 'operator-console' = "'ghcr.io/thebtf/engram-operator-console:main'" } + if ($maps[0].KeyValuePairs.Count -ne $expected.Count) { throw "exact image target map must contain 3 services; found $($maps[0].KeyValuePairs.Count)" } + $actual = @{} + foreach ($pair in $maps[0].KeyValuePairs) { + $key = $pair.Item1.Extent.Text.Trim("'", '"') + if ($actual.ContainsKey($key)) { throw "duplicate exact image target '$key'" } + $actual[$key] = ConvertTo-AstShape $pair.Item2.Extent.Text + } + foreach ($entry in $expected.GetEnumerator()) { + if (-not $actual.ContainsKey($entry.Key) -or $actual[$entry.Key] -cne (ConvertTo-AstShape $entry.Value)) { throw "exact image target '$($entry.Key)' drifted" } + } + } + + function Get-ExactRuntimeAssignment( + [System.Management.Automation.Language.ScriptBlockAst]$ast, + [string]$left, + [string]$right + ) { + $rightShape = ConvertTo-AstShape $right + $assignments = @($ast.FindAll({ + param($node) + $node -is [System.Management.Automation.Language.AssignmentStatementAst] -and + $node.Left.Extent.Text -ceq $left -and + (ConvertTo-AstShape $node.Right.Extent.Text) -ceq $rightShape + }, $true) | Where-Object { $null -eq (Get-Ancestor $_ ([System.Management.Automation.Language.FunctionDefinitionAst])) }) + if ($assignments.Count -ne 1) { throw "live runtime assignment '$left = $right' cardinality must be exactly 1; found $($assignments.Count)" } + return $assignments[0] + } + + function Assert-ExactRepeatLoop([System.Management.Automation.Language.Ast]$node) { + $loop = Get-Ancestor $node ([System.Management.Automation.Language.ForStatementAst]) + if ($null -eq $loop -or + (ConvertTo-AstShape $loop.Initializer.Extent.Text) -cne (ConvertTo-AstShape '$repeatIndex = 1') -or + (ConvertTo-AstShape $loop.Condition.Extent.Text) -cne (ConvertTo-AstShape '$repeatIndex -le $Repeat') -or + (ConvertTo-AstShape $loop.Iterator.Extent.Text) -cne (ConvertTo-AstShape '$repeatIndex++')) { + throw 'runtime release proof is not inside the exact 1..Repeat execution loop' + } + } + + function Assert-LiveSessionStartExecutionContract([System.Management.Automation.Language.ScriptBlockAst]$ast) { + $nameFunctions = @($ast.FindAll({ param($node) $node -is [System.Management.Automation.Language.FunctionDefinitionAst] -and $node.Name -ceq 'New-RunDatabaseName' }, $true)) + if ($nameFunctions.Count -ne 1) { throw "New-RunDatabaseName cardinality must be exactly 1; found $($nameFunctions.Count)" } + $nameAssignments = @($nameFunctions[0].Body.FindAll({ + param($node) + $node -is [System.Management.Automation.Language.AssignmentStatementAst] -and $node.Left.Extent.Text -ceq '$name' -and + (ConvertTo-AstShape $node.Right.Extent.Text) -ceq (ConvertTo-AstShape '"engram_prc_rg_test_${runHash}_r$RepeatIndex"') + }, $true)) + if ($nameAssignments.Count -ne 1) { throw 'live fresh-database naming does not contain the exact literal-test identity' } + + [void](Get-ExactRuntimeAssignment $ast '$requireSessionStartExecution' "[string]::IsNullOrWhiteSpace(`$Run) -and `$packages.Count -eq 1 -and `$packages[0] -ceq './...'") + $databaseAssignment = Get-ExactRuntimeAssignment $ast '$databaseName' 'New-RunDatabaseName -RequestedRunId $RunId -RepeatIndex $repeatIndex' + Assert-ExactRepeatLoop $databaseAssignment + $databaseCommands = @($databaseAssignment.Right.FindAll({ param($node) $node -is [System.Management.Automation.Language.CommandAst] -and $node.GetCommandName() -ceq 'New-RunDatabaseName' }, $true)) + if ($databaseCommands.Count -ne 1) { throw 'fresh-database identity assignment is not one live New-RunDatabaseName invocation' } + Assert-ExactCommandControlFlow -node $databaseCommands[0] -expectedIfConditions @() -expectedLoopConditions @('for:$repeatIndex -le $Repeat') + + $proofAssignment = Get-ExactRuntimeAssignment $ast '$sessionStartExecutionProof' 'Get-RequiredSessionStartExecutionProof $goTestSummary' + Assert-ExactRepeatLoop $proofAssignment + $proofCommands = @($proofAssignment.Right.FindAll({ param($node) $node -is [System.Management.Automation.Language.CommandAst] -and $node.GetCommandName() -ceq 'Get-RequiredSessionStartExecutionProof' }, $true)) + if ($proofCommands.Count -ne 1) { throw 'parsed go-test summary is not consumed by one live session-start execution proof invocation' } + $missingSummaryBranch = '-not (Test-Path -LiteralPath $goTestSummaryPath -PathType Leaf)' + Assert-ExactCommandControlFlow -node $proofCommands[0] -expectedIfConditions @('$requireSessionStartExecution', "") -expectedLoopConditions @('for:$repeatIndex -le $Repeat') + + $proofWrites = @($ast.FindAll({ + param($node) + $node -is [System.Management.Automation.Language.CommandAst] -and $node.GetCommandName() -ceq 'Write-Utf8NoBom' -and $node.CommandElements.Count -ge 2 -and + (ConvertTo-AstShape $node.CommandElements[1].Extent.Text) -ceq (ConvertTo-AstShape "(Join-Path `$repeatDirectory 'required-session-start-execution.json')") + }, $true) | Where-Object { $null -eq (Get-Ancestor $_ ([System.Management.Automation.Language.FunctionDefinitionAst])) }) + if ($proofWrites.Count -ne 1) { throw "required session-start proof artifact write cardinality must be exactly 1; found $($proofWrites.Count)" } + Assert-ExactRepeatLoop $proofWrites[0] + Assert-ExactCommandControlFlow -node $proofWrites[0] -expectedIfConditions @('$requireSessionStartExecution') -expectedLoopConditions @('for:$repeatIndex -le $Repeat') + + $verdictIfs = @($ast.FindAll({ + param($node) + $node -is [System.Management.Automation.Language.IfStatementAst] -and $node.Clauses.Count -eq 1 -and + (ConvertTo-AstShape $node.Clauses[0].Item1.Extent.Text) -ceq (ConvertTo-AstShape "`$sessionStartExecutionProof.verdict -ne 'PASS'") + }, $true) | Where-Object { $null -eq (Get-Ancestor $_ ([System.Management.Automation.Language.FunctionDefinitionAst])) }) + if ($verdictIfs.Count -ne 1) { throw "required session-start fail-closed verdict branch cardinality must be exactly 1; found $($verdictIfs.Count)" } + $verdictIf = $verdictIfs[0] + Assert-ExactRepeatLoop $verdictIf + if (-not (Test-InExactIfClause $verdictIf '$requireSessionStartExecution')) { throw 'required session-start fail-closed verdict is outside its canonical runtime gate' } + $failAssignments = @($verdictIf.Clauses[0].Item2.FindAll({ + param($node) + $node -is [System.Management.Automation.Language.AssignmentStatementAst] -and $node.Left.Extent.Text -ceq '$repeatFailed' -and $node.Right.Extent.Text -ceq '$true' + }, $true)) + $errorAdds = @($verdictIf.Clauses[0].Item2.FindAll({ + param($node) + $node -is [System.Management.Automation.Language.InvokeMemberExpressionAst] -and $node.Expression.Extent.Text -ceq '$repeatErrors' -and $node.Member.Extent.Text -ceq 'Add' + }, $true)) + if ($failAssignments.Count -ne 1 -or $errorAdds.Count -ne 1) { throw 'required session-start proof failure does not fail the repeat and retain one error' } + + $proofSummaryPairs = @($ast.FindAll({ param($node) $node -is [System.Management.Automation.Language.HashtableAst] }, $true) | ForEach-Object { $_.KeyValuePairs } | Where-Object { + $_.Item1.Extent.Text.Trim("'", '"') -ceq 'required_session_start_execution' -and $_.Item2.Extent.Text -ceq '$sessionStartExecutionProof' + }) + if ($proofSummaryPairs.Count -ne 1) { throw "repeat summary must bind the live required session-start proof exactly once; found $($proofSummaryPairs.Count)" } + } + + function Assert-LiveDevStandInvocationContract([string]$dbRunnerText) { + $ast = Get-PowerShellAst $dbRunnerText + Assert-ExactImageTargetMap $ast + Assert-LiveSessionStartExecutionContract $ast + $outerBranch = "`$Action -in @('Up', 'Ready', 'Scan')" + $upBranch = "`$Action -eq 'Up'" + $scanBranch = "`$Action -eq 'Scan' -and `$inventoryAssertion.Pass -and `$imageIdentityPass -and `$prelaunchToRunningImageIdentity" + $sourceRoot = Get-ExactCapturedInvocation $ast 'dev-stand-source-root' '$gitPath' "@('-C', `$composeDirectory, 'rev-parse', '--show-toplevel')" '$sourceRoot' $outerBranch + $sourceCommit = Get-ExactCapturedInvocation $ast 'dev-stand-source-commit' '$gitPath' "@('-C', `$sourceRepository, 'rev-parse', '--verify', 'HEAD^{commit}')" '$sourceHead' $outerBranch + $sourceStatus = Get-ExactCapturedInvocation $ast 'dev-stand-source-tracked-status' '$gitPath' "@('-C', `$sourceRepository, 'status', '--porcelain=v1', '--untracked-files=all')" '$sourceStatus' $outerBranch + $build = Get-ExactCapturedInvocation $ast 'dev-stand-compose-build' '$dockerPath' "(@(`$composeArgs) + @('build', '--pull', 'server', 'operator-console'))" '$build' $upBranch + $pull = Get-ExactCapturedInvocation $ast 'dev-stand-postgres-pull' '$dockerPath' "(@(`$composeArgs) + @('pull', 'postgres'))" '$pull' $upBranch + $postHead = Get-ExactCapturedInvocation $ast 'dev-stand-source-commit-post-build' '$gitPath' "@('-C', `$sourceRepository, 'rev-parse', '--verify', 'HEAD^{commit}')" '$postBuildHead' $upBranch + $postStatus = Get-ExactCapturedInvocation $ast 'dev-stand-source-tracked-status-post-build' '$gitPath' "@('-C', `$sourceRepository, 'status', '--porcelain=v1', '--untracked-files=all')" '$postBuildStatus' $upBranch + $prelaunch = Get-ExactCapturedInvocation $ast 'dev-stand-prelaunch-image-inspect-$($target.Key)' '$dockerPath' "@('image', 'inspect', `$target.Value, '--format', '{{.Id}}')" '$prelaunchInspect' $upBranch + $up = Get-ExactCapturedInvocation $ast 'dev-stand-up' '$dockerPath' "(@(`$composeArgs) + @('up', '-d', '--no-build', '--pull', 'never', '--wait'))" '$up' $upBranch + $scan = Get-ExactCapturedInvocation $ast 'dev-stand-vulnerability-scan-$($entry.Key)' '$dockerPath' "@('scout', 'cves', '--exit-code', '--only-severity', 'critical,high', '--format', 'sarif', '--output', `$sarifPath, `$scanReference)" '$scan' $scanBranch + + foreach ($command in @($sourceRoot, $sourceCommit, $sourceStatus)) { + Assert-ExactCommandControlFlow -node $command -expectedIfConditions @($outerBranch) -expectedLoopConditions @() + } + foreach ($command in @($build, $pull, $postHead, $postStatus, $up)) { + Assert-ExactCommandControlFlow -node $command -expectedIfConditions @($upBranch) -expectedLoopConditions @() + } + Assert-ExactCommandControlFlow -node $prelaunch -expectedIfConditions @($upBranch) -expectedLoopConditions @('foreach:(Get-DevStandImageTargets).GetEnumerator()') + Assert-ExactCommandControlFlow -node $scan -expectedIfConditions @($outerBranch, $scanBranch) -expectedLoopConditions @('foreach:@($actualImages.GetEnumerator() | Sort-Object Key)') + + $capturedInContract = @($ast.FindAll({ param($node) $node -is [System.Management.Automation.Language.CommandAst] -and $node.GetCommandName() -ceq 'Invoke-CapturedProcess' -and $node.CommandElements.Count -ge 4 }, $true) | Where-Object { + $owner = Get-Ancestor $_ ([System.Management.Automation.Language.FunctionDefinitionAst]) + $null -ne $owner -and $owner.Name -ceq 'Invoke-DevStandContract' -and $_.CommandElements[2].Extent.Text -ceq '$dockerPath' + }) + $liveBuilds = @($capturedInContract | Where-Object { + $literals = @($_.CommandElements[3].FindAll({ param($node) $node -is [System.Management.Automation.Language.StringConstantExpressionAst] }, $true) | ForEach-Object Value) + $literals -ccontains 'build' + }) + if ($liveBuilds.Count -ne 1 -or $liveBuilds[0].Extent.StartOffset -ne $build.Extent.StartOffset) { throw "live Docker build invocation cardinality must be exactly 1; found $($liveBuilds.Count)" } + $liveScouts = @($capturedInContract | Where-Object { + $literals = @($_.CommandElements[3].FindAll({ param($node) $node -is [System.Management.Automation.Language.StringConstantExpressionAst] }, $true) | ForEach-Object Value) + $literals -ccontains 'scout' -and $literals -ccontains 'cves' + }) + if ($liveScouts.Count -ne 1 -or $liveScouts[0].Extent.StartOffset -ne $scan.Extent.StartOffset) { throw "live Docker Scout invocation cardinality must be exactly 1; found $($liveScouts.Count)" } + + $ordered = @($sourceRoot, $sourceCommit, $sourceStatus, $build, $pull, $postHead, $postStatus, $prelaunch, $up) + for ($i = 1; $i -lt $ordered.Count; $i++) { + if ($ordered[$i].Extent.StartOffset -le $ordered[$i - 1].Extent.StartOffset) { throw "live dev-stand invocation order is invalid at '$([string]$ordered[$i].CommandElements[1].Value)'" } + } + + $targetLoop = Get-Ancestor $prelaunch ([System.Management.Automation.Language.ForEachStatementAst]) + if ($null -eq $targetLoop -or $targetLoop.Variable.Extent.Text -cne '$target' -or (ConvertTo-AstShape $targetLoop.Condition.Extent.Text) -cne (ConvertTo-AstShape '(Get-DevStandImageTargets).GetEnumerator()')) { throw 'prelaunch inspect does not iterate the exact image target map' } + $scanLoop = Get-Ancestor $scan ([System.Management.Automation.Language.ForEachStatementAst]) + if ($null -eq $scanLoop -or $scanLoop.Variable.Extent.Text -cne '$entry' -or (ConvertTo-AstShape $scanLoop.Condition.Extent.Text) -cne (ConvertTo-AstShape '@($actualImages.GetEnumerator() | Sort-Object Key)')) { throw 'Scout does not iterate the exact running image inventory' } + $scanReferences = @($scanLoop.Body.FindAll({ param($node) $node -is [System.Management.Automation.Language.AssignmentStatementAst] -and $node.Left.Extent.Text -ceq '$scanReference' }, $true)) + if ($scanReferences.Count -ne 1 -or (ConvertTo-AstShape $scanReferences[0].Right.Extent.Text) -cne (ConvertTo-AstShape '"local://$imageId"') -or $scanReferences[0].Extent.StartOffset -ge $scan.Extent.StartOffset) { throw 'Scout reference is not exactly one live immutable local:// image-ID assignment before the scan' } + $inventoryAssertions = @($ast.FindAll({ param($node) $node -is [System.Management.Automation.Language.CommandAst] -and $node.GetCommandName() -ceq 'Test-ExactDevStandInventory' }, $true) | Where-Object { + $owner = Get-Ancestor $_ ([System.Management.Automation.Language.FunctionDefinitionAst]) + $null -ne $owner -and $owner.Name -ceq 'Invoke-DevStandContract' + }) + if ($inventoryAssertions.Count -ne 1 -or $inventoryAssertions[0].CommandElements.Count -ne 2 -or $inventoryAssertions[0].CommandElements[1].Extent.Text -cne '$actualImages' -or $inventoryAssertions[0].Extent.StartOffset -ge $scan.Extent.StartOffset) { throw 'exact running image inventory assertion must execute exactly once before Scout' } + } + function Assert-WorkflowContract( [string]$workflowText, [string]$criticalText, @@ -147,6 +421,7 @@ jobs: [string]$stateText = $ownershipState ) { $execution = Remove-ConformanceStep $workflowText + Assert-LiveDevStandInvocationContract $dbRunnerText if ($observedPlanSha -cne $expectedPlanSha) { throw "tracked production-ready plan hash drifted: expected=$expectedPlanSha observed=$observedPlanSha" } $repeatToken = '(?i)(? npm-typecheck -> npm-test -> npm-audit-high -> npm-pack-dry-run')) { if (-not $nodeRunnerText.Contains($required)) { throw "node release runner implementation is missing '$required'" } } @@ -287,6 +561,53 @@ jobs: Assert-MutationRejected 'remove prelaunch compose build' { Assert-WorkflowContract $workflow $critical $stand ($dbRunner.Replace("@('build', '--pull', 'server', 'operator-console')", "@('config')")) $criticalRunner $devStandRunner } $lateBuildRunner = $dbRunner.Replace("Invoke-CapturedProcess 'dev-stand-compose-build'", "Invoke-CapturedProcess 'dev-stand-compose-build-placeholder'") + "`n# Invoke-CapturedProcess 'dev-stand-compose-build'" Assert-MutationRejected 'move prelaunch compose build after launch' { Assert-WorkflowContract $workflow $critical $stand $lateBuildRunner $criticalRunner $devStandRunner } + $buildLines = @($dbRunner -split "`r?`n" | Where-Object { $_.Contains('$build = Invoke-CapturedProcess ''dev-stand-compose-build''') }) + if ($buildLines.Count -ne 1) { throw "canonical build fixture must resolve exactly one line; found $($buildLines.Count)" } + $buildLine = $buildLines[0] + $buildIndent = [regex]::Match($buildLine, '^\s*').Value + $deadBuildReplacement = $buildIndent + '# ' + $buildLine.TrimStart() + "`n" + $buildIndent + '$build = [pscustomobject]@{ ExitCode = 0 }' + $deadBuildRunner = $dbRunner.Replace($buildLine, $deadBuildReplacement) + Assert-MutationRejected 'dead/comment-only build invocation' { Assert-WorkflowContract $workflow $critical $stand $deadBuildRunner $criticalRunner $devStandRunner } + $quotedBuildLine = "'" + $buildLine.Replace("'", "''") + "'" + $deadStringBuildReplacement = $buildIndent + '$deadBuildInvocation = ' + $quotedBuildLine + "`n" + $buildIndent + '$build = [pscustomobject]@{ ExitCode = 0 }' + $deadStringBuildRunner = $dbRunner.Replace($buildLine, $deadStringBuildReplacement) + Assert-MutationRejected 'dead string-only build invocation' { Assert-WorkflowContract $workflow $critical $stand $deadStringBuildRunner $criticalRunner $devStandRunner } + $unreachableBuildReplacement = $buildIndent + 'if ($false) {' + "`n" + $buildIndent + ' ' + $buildLine.TrimStart() + "`n" + $buildIndent + '}' + "`n" + $buildIndent + '$build = [pscustomobject]@{ ExitCode = 0 }' + $unreachableBuildRunner = $dbRunner.Replace($buildLine, $unreachableBuildReplacement) + Assert-MutationRejected 'unreachable live build invocation' { Assert-WorkflowContract $workflow $critical $stand $unreachableBuildRunner $criticalRunner $devStandRunner } + $duplicateBuildRunner = $dbRunner.Replace($buildLine, ($buildLine + "`n" + $buildLine)) + Assert-MutationRejected 'duplicate live build invocation' { Assert-WorkflowContract $workflow $critical $stand $duplicateBuildRunner $criticalRunner $devStandRunner } + $renamedDuplicateBuildLine = $buildLine.Replace("'dev-stand-compose-build'", "'dev-stand-compose-build-shadow'") + $renamedDuplicateBuildRunner = $dbRunner.Replace($buildLine, ($buildLine + "`n" + $renamedDuplicateBuildLine)) + Assert-MutationRejected 'renamed duplicate live build invocation' { Assert-WorkflowContract $workflow $critical $stand $renamedDuplicateBuildRunner $criticalRunner $devStandRunner } + $scanLines = @($dbRunner -split "`r?`n" | Where-Object { $_.Contains('$scan = Invoke-CapturedProcess "dev-stand-vulnerability-scan-$($entry.Key)"') }) + if ($scanLines.Count -ne 1) { throw "canonical Scout fixture must resolve exactly one line; found $($scanLines.Count)" } + $scanLine = $scanLines[0] + $scanIndent = [regex]::Match($scanLine, '^\s*').Value + $unreachableScoutReplacement = $scanIndent + 'if ($false) {' + "`n" + $scanIndent + ' ' + $scanLine.TrimStart() + "`n" + $scanIndent + '}' + $unreachableScoutRunner = $dbRunner.Replace($scanLine, $unreachableScoutReplacement) + Assert-MutationRejected 'unreachable live Scout invocation' { Assert-WorkflowContract $workflow $critical $stand $unreachableScoutRunner $criticalRunner $devStandRunner } + $duplicateScoutRunner = $dbRunner.Replace($scanLine, ($scanLine + "`n" + $scanLine)) + Assert-MutationRejected 'duplicate live Scout invocation' { Assert-WorkflowContract $workflow $critical $stand $duplicateScoutRunner $criticalRunner $devStandRunner } + $renamedDuplicateScoutLine = $scanLine.Replace('dev-stand-vulnerability-scan-$($entry.Key)', 'dev-stand-vulnerability-scan-shadow-$($entry.Key)') + $renamedDuplicateScoutRunner = $dbRunner.Replace($scanLine, ($scanLine + "`n" + $renamedDuplicateScoutLine)) + Assert-MutationRejected 'renamed duplicate live Scout invocation' { Assert-WorkflowContract $workflow $critical $stand $renamedDuplicateScoutRunner $criticalRunner $devStandRunner } + $databaseLines = @($dbRunner -split "`r?`n" | Where-Object { $_.Contains('$databaseName = New-RunDatabaseName -RequestedRunId $RunId -RepeatIndex $repeatIndex') }) + if ($databaseLines.Count -ne 1) { throw "canonical fresh-database assignment fixture must resolve exactly one line; found $($databaseLines.Count)" } + $databaseLine = $databaseLines[0] + $databaseIndent = [regex]::Match($databaseLine, '^\s*').Value + $deadDatabaseReplacement = $databaseIndent + '# ' + $databaseLine.TrimStart() + "`n" + $databaseIndent + '$databaseName = "engram_prc_rg_unsafe_r$repeatIndex"; $schemaName = ''public''; $applicationName = "engram-prc-$safeRunToken-r$repeatIndex"' + $deadDatabaseRunner = $dbRunner.Replace($databaseLine, $deadDatabaseReplacement) + Assert-MutationRejected 'comment-only literal-test database assignment' { Assert-WorkflowContract $workflow $critical $stand $deadDatabaseRunner $criticalRunner $devStandRunner } + $proofLines = @($dbRunner -split "`r?`n" | Where-Object { $_.Contains('$sessionStartExecutionProof = Get-RequiredSessionStartExecutionProof $goTestSummary') }) + if ($proofLines.Count -ne 1) { throw "canonical session-start proof fixture must resolve exactly one line; found $($proofLines.Count)" } + $proofLine = $proofLines[0] + $proofIndent = [regex]::Match($proofLine, '^\s*').Value + $deadProofReplacement = $proofIndent + '# ' + $proofLine.TrimStart() + "`n" + $proofIndent + '$sessionStartExecutionProof = [pscustomobject]@{ verdict = ''PASS''; executed = 12; skipped = 0; missing = 0 }' + $deadProofRunner = $dbRunner.Replace($proofLine, $deadProofReplacement) + Assert-MutationRejected 'comment-only session-start execution proof' { Assert-WorkflowContract $workflow $critical $stand $deadProofRunner $criticalRunner $devStandRunner } + Assert-MutationRejected 'remove literal-test database identity' { Assert-WorkflowContract $workflow $critical $stand ($dbRunner.Replace('$databaseName = New-RunDatabaseName -RequestedRunId $RunId -RepeatIndex $repeatIndex', '$databaseName = "engram_prc_rg_${safeRunToken}_r$repeatIndex"')) $criticalRunner $devStandRunner } + Assert-MutationRejected 'bypass required session-start execution proof' { Assert-WorkflowContract $workflow $critical $stand ($dbRunner.Replace('$sessionStartExecutionProof = Get-RequiredSessionStartExecutionProof $goTestSummary', '$sessionStartExecutionProof = [pscustomobject]@{ verdict = ''PASS''; executed = 12; skipped = 0; missing = 0 }')) $criticalRunner $devStandRunner } Assert-MutationRejected 'remove no-build launch lock' { Assert-WorkflowContract $workflow $critical $stand ($dbRunner.Replace("'--no-build'", "'--renew-anon-volumes'")) $criticalRunner $devStandRunner } Assert-MutationRejected 'narrow compatibility full package' { Assert-WorkflowContract ($workflow.Replace("`$arguments.Add('./...')", "`$arguments.Add('./internal/...')")) $critical $stand $dbRunner $criticalRunner $devStandRunner } Assert-MutationRejected 'change count semantics' { Assert-WorkflowContract ($workflow.Replace("'-count=1'", "'-count=2'")) $critical $stand $dbRunner $criticalRunner $devStandRunner } @@ -299,7 +620,7 @@ jobs: Assert-MutationRejected 'change ownership current owner' { Assert-WorkflowContract $workflow $critical $stand $dbRunner $criticalRunner $devStandRunner -stateText ($ownershipState.Replace('"current_owner": "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK"', '"current_owner": "DB-BULKOPS"')) } Assert-MutationRejected 'remove rejected predecessor evidence' { Assert-WorkflowContract $workflow $critical $stand $dbRunner $criticalRunner $devStandRunner -stateText ($ownershipState.Replace($rejectedBulkCheckerSha, '')) } Assert-MutationRejected 'change exact rejected successor base' { Assert-WorkflowContract $workflow $critical $stand $dbRunner $criticalRunner $devStandRunner -stateText ($ownershipState.Replace($rejectedBulkHead, ('1' * 40))) } - Write-Output 'CONFORMANCE PASS: canonical LF/CRLF authority, exact wrappers, path budget, ordered source-built image provenance, ownership state, node matrix, readiness, cleanup, and full/race semantics match; 30 mutations rejected' + Write-Output 'CONFORMANCE PASS: canonical LF/CRLF authority, exact wrappers, path budget, AST-validated reachable exactly-once source-built image provenance and Scout, 12-test zero-skip DB execution proof, ownership state, node matrix, readiness, cleanup, and full/race semantics match; 42 mutations rejected' - name: Resolve PostgreSQL service identity shell: pwsh diff --git a/scripts/production-gates/run-db-suite.ps1 b/scripts/production-gates/run-db-suite.ps1 index 1f0b8baf..b9212620 100644 --- a/scripts/production-gates/run-db-suite.ps1 +++ b/scripts/production-gates/run-db-suite.ps1 @@ -48,13 +48,16 @@ Usage: Required behavior: * -FreshDatabase is mandatory. - * Each repeat creates a unique `.public` identity. + * Each repeat creates a unique `engram_prc_rg_test__rN.public` + identity that is test-only regardless of the caller-supplied run id. * `go test` runs with `-json -p 1 -parallel 1 -count=1`. * Missing coverage is fatal. Full `./...` runs enforce >=60% overall and the historical package floors. Scoped runs retain mandatory targeted coverage. * pg_stat_activity and server headroom are captured before/after tests. Pool capacity is bounded by -ConnectionBudget; post-test run-DB sessions must be exactly zero before cleanup. Cleanup still terminates/drops after failure. + * An unfiltered canonical ./... run proves all 12 required gRPC session-start + tests reached pass/fail (executed) outcomes with zero skip/missing entries. Options: -Help Print this help and exit 0. @@ -252,6 +255,99 @@ function Test-NoResidualRunSessions { return $SessionCount -eq 0 } +function New-RunDatabaseName { + param( + [Parameter(Mandatory)][string]$RequestedRunId, + [Parameter(Mandatory)][ValidateRange(1, 20)][int]$RepeatIndex + ) + + # session_start_test.go intentionally refuses a DATABASE_DSN that is not + # unmistakably test-only. Hash the operator-supplied run id so even values + # containing "prod"/"production"/"staging" cannot poison that guard, and + # retain a literal test marker plus the cleanup-owned prefix. + $sha256 = [System.Security.Cryptography.SHA256]::Create() + try { + $digest = $sha256.ComputeHash([System.Text.Encoding]::UTF8.GetBytes($RequestedRunId)) + } + finally { $sha256.Dispose() } + $runHash = ([System.BitConverter]::ToString($digest).Replace('-', '').ToLowerInvariant()).Substring(0, 16) + $name = "engram_prc_rg_test_${runHash}_r$RepeatIndex" + if ($name -notmatch '^engram_prc_rg_test_[a-f0-9]{16}_r(?:[1-9]|1\d|20)$') { + throw "generated release-gate database name is malformed: '$name'" + } + return $name +} + +function Get-RequiredSessionStartTestNames { + return @( + 'TestEC_F1_P1_GRPCSessionStart_FlagOff_ByteIdentity', + 'TestEC_F1_P1_GRPCSessionStart_FlagOn_PrivateCrossWorkstationInvisible', + 'TestEC_F1_P1_GRPCSessionStart_FlagOn_NoCallerIdentity_PrivateInvisible', + 'TestGetSessionStartContext_HappyPath', + 'TestGetSessionStartContext_PrincipalPrivateCrossPrincipalInvisible_FlagOff', + 'TestGetSessionStartContext_MetaSummaryFlagOnDescribesMemoryLandscape', + 'TestGetSessionStartContext_MetaSummaryCountsBeyondResponseCap', + 'TestGetSessionStartContext_MetaSummaryFlagOffOmitted', + 'TestGetSessionStartContext_MetaSummaryFlagOnEmptyProjectIsBoundedAndContentFree', + 'TestGetSessionStartContext_T014_MetaSummaryRequiresMasterAndS2Flags', + 'TestGetSessionStartContext_RuleRouterEnabledPacketShape', + 'TestGetSessionStartContext_DefaultLimits' + ) +} + +function Get-RequiredSessionStartExecutionProof { + param([AllowNull()]$GoTestSummary) + + $package = 'github.com/thebtf/engram/internal/grpcserver' + $expectedNames = @(Get-RequiredSessionStartTestNames) + $results = [System.Collections.Generic.List[object]]::new() + $errors = [System.Collections.Generic.List[string]]::new() + $passed = 0; $failed = 0; $skipped = 0; $incomplete = 0; $missing = 0; $duplicate = 0 + $allTests = if ($null -ne $GoTestSummary -and $null -ne $GoTestSummary.PSObject.Properties['tests']) { @($GoTestSummary.tests) } else { @() } + + foreach ($name in $expectedNames) { + $matches = @($allTests | Where-Object { [string]$_.package -ceq $package -and [string]$_.test -ceq $name }) + if ($matches.Count -eq 0) { + $missing++ + $errors.Add("required session-start test was not observed: $package/$name") + $results.Add([pscustomobject]@{ package = $package; test = $name; outcome = 'missing'; executed = $false }) + continue + } + if ($matches.Count -ne 1) { + $duplicate += $matches.Count - 1 + $errors.Add("required session-start test appeared $($matches.Count) times: $package/$name") + $results.Add([pscustomobject]@{ package = $package; test = $name; outcome = 'duplicate'; executed = $false }) + continue + } + $outcome = [string]$matches[0].outcome + switch -CaseSensitive ($outcome) { + 'pass' { $passed++ } + 'fail' { $failed++ } + 'skip' { $skipped++; $errors.Add("required session-start test skipped: $package/$name") } + default { $incomplete++; $errors.Add("required session-start test has non-terminal outcome '$outcome': $package/$name") } + } + $results.Add([pscustomobject]@{ package = $package; test = $name; outcome = $outcome; executed = $outcome -in @('pass', 'fail') }) + } + + $executed = $passed + $failed + [pscustomobject][ordered]@{ + schema_version = 1 + verdict = if ($expectedNames.Count -eq 12 -and $executed -eq 12 -and $skipped -eq 0 -and $missing -eq 0 -and $duplicate -eq 0 -and $incomplete -eq 0) { 'PASS' } else { 'FAIL' } + package = $package + expected = $expectedNames.Count + observed = $expectedNames.Count - $missing + executed = $executed + passed = $passed + failed = $failed + skipped = $skipped + missing = $missing + duplicate = $duplicate + incomplete = $incomplete + tests = @($results) + errors = @($errors) + } +} + function Test-ReadyStatusPayload { param([AllowNull()][AllowEmptyString()][string]$Payload) if ([string]::IsNullOrWhiteSpace($Payload)) { return $false } @@ -835,8 +931,27 @@ function Invoke-SelfTest { Assert-SelfTestCondition $validInventory.Pass 'exact compose service/image inventory was rejected' $invalidInventory = Test-ExactDevStandInventory @{ postgres = 'pgvector/pgvector:pg17'; server = 'engram:prc-candidate'; 'operator-console' = 'ghcr.io/thebtf/engram-operator-console:main' } Assert-SelfTestCondition (-not $invalidInventory.Pass) 'non-produced engram:prc-candidate image was accepted' + $testOnlyDatabase = New-RunDatabaseName -RequestedRunId 'prod-production-staging-is-operator-controlled' -RepeatIndex 20 + Assert-SelfTestCondition ($testOnlyDatabase -match '^engram_prc_rg_test_[a-f0-9]{16}_r20$') 'fresh database name is not an unambiguous literal-test identity' + Assert-SelfTestCondition ($testOnlyDatabase -notmatch '(?i)prod|production|staging') 'operator run id leaked a production-like token into the test database name' + $requiredPackage = 'github.com/thebtf/engram/internal/grpcserver' + $requiredTests = @(Get-RequiredSessionStartTestNames) + Assert-SelfTestCondition ($requiredTests.Count -eq 12) 'required session-start execution inventory is not exactly 12 tests' + $passingEvents = @($requiredTests | ForEach-Object { [pscustomobject]@{ package = $requiredPackage; test = $_; outcome = 'pass' } }) + $passingProof = Get-RequiredSessionStartExecutionProof ([pscustomobject]@{ tests = $passingEvents }) + Assert-SelfTestCondition ($passingProof.verdict -eq 'PASS' -and $passingProof.executed -eq 12 -and $passingProof.skipped -eq 0) '12/12 executed session-start tests were rejected' + $skipEvents = @($passingEvents | ForEach-Object { [pscustomobject]@{ package = $_.package; test = $_.test; outcome = $_.outcome } }) + $skipEvents[0].outcome = 'skip' + $skipProof = Get-RequiredSessionStartExecutionProof ([pscustomobject]@{ tests = $skipEvents }) + Assert-SelfTestCondition ($skipProof.verdict -eq 'FAIL' -and $skipProof.executed -eq 11 -and $skipProof.skipped -eq 1) 'one required session-start skip did not fail the execution proof' + $missingProof = Get-RequiredSessionStartExecutionProof ([pscustomobject]@{ tests = @($passingEvents | Select-Object -Skip 1) }) + Assert-SelfTestCondition ($missingProof.verdict -eq 'FAIL' -and $missingProof.missing -eq 1) 'one missing required session-start test did not fail the execution proof' + $failingEvents = @($passingEvents | ForEach-Object { [pscustomobject]@{ package = $_.package; test = $_.test; outcome = $_.outcome } }) + $failingEvents[0].outcome = 'fail' + $failingProof = Get-RequiredSessionStartExecutionProof ([pscustomobject]@{ tests = $failingEvents }) + Assert-SelfTestCondition ($failingProof.verdict -eq 'PASS' -and $failingProof.executed -eq 12 -and $failingProof.failed -eq 1) 'an executed product failure was misclassified as a naming/skip defect' Assert-SelfTestCondition ($Repeat -eq 3) 'default release repetition count is not 3' - Write-Output 'SELFTEST PASS: run-db-suite.ps1 (earlier exit 7 remained fatal after later exit 0)' + Write-Output 'SELFTEST PASS: run-db-suite.ps1 (exit aggregation, test-only database identity, and 12-test zero-skip execution proof)' } finally { Remove-Item -LiteralPath $root -Recurse -Force -ErrorAction SilentlyContinue } } @@ -853,6 +968,7 @@ if ([string]::IsNullOrWhiteSpace($AdminDsn)) { Write-Error '-AdminDsn or ENGRAM_ [string[]]$packages = @(Get-NormalizedPackages $Package) $effectiveCoverage = Get-EffectiveCoveragePolicy $CoveragePolicy $packages +$requireSessionStartExecution = [string]::IsNullOrWhiteSpace($Run) -and $packages.Count -eq 1 -and $packages[0] -ceq './...' $connection = Get-ConnectionInfo $AdminDsn $safeRunToken = [guid]::NewGuid().ToString('N').Substring(0, 10) if ([string]::IsNullOrWhiteSpace($RunId)) { $RunId = [DateTimeOffset]::UtcNow.ToString('yyyyMMddTHHmmssZ') + '-' + $safeRunToken } @@ -913,10 +1029,11 @@ if ($null -ne $serverIdentityObject) { for ($repeatIndex = 1; $repeatIndex -le $Repeat; $repeatIndex++) { $repeatDirectory = Join-Path $runDirectory ("repeat-{0:D2}" -f $repeatIndex); New-Item -ItemType Directory -Path $repeatDirectory -Force | Out-Null - $databaseName = "engram_prc_rg_${safeRunToken}_r$repeatIndex"; $schemaName = 'public'; $applicationName = "engram-prc-$safeRunToken-r$repeatIndex" + $databaseName = New-RunDatabaseName -RequestedRunId $RunId -RepeatIndex $repeatIndex; $schemaName = 'public'; $applicationName = "engram-prc-$safeRunToken-r$repeatIndex" $targetDsn = New-DatabaseDsn $AdminDsn $databaseName $applicationName $repeatErrors = [System.Collections.Generic.List[string]]::new(); $repeatFailed = $false; $databaseCreated = $false $goTestExit = $null; $parserExit = $null; $coverageExit = $null; $cleanupExit = $null; $cleanupStatus = $null; $sessionsBefore = $null; $sessionsAfter = $null; $serverSessionsBefore = $null; $serverSessionsAfter = $null + $sessionStartExecutionProof = [pscustomobject][ordered]@{ schema_version = 1; verdict = 'NOT_APPLICABLE'; reason = 'only an unfiltered canonical ./... run requires the 12-test session-start execution proof' } $cleanupSummaryPath = Join-Path $repeatDirectory 'cleanup/cleanup.json' try { @@ -961,6 +1078,27 @@ for ($repeatIndex = 1; $repeatIndex -le $Repeat; $repeatIndex++) { if ($AllowedSkipIdentity.Count -gt 0) { $parserArguments.Add('-AllowedSkipIdentity'); foreach ($identity in $AllowedSkipIdentity) { $parserArguments.Add($identity) } } $parser = Invoke-CapturedProcess "repeat-$repeatIndex-assert-go-test-json" $pwshPath @($parserArguments) @{} (Join-Path $repeatDirectory 'assert-go-test-json.stdout.log') (Join-Path $repeatDirectory 'assert-go-test-json.stderr.log') $connection @($targetDsn) 120 $parserExit = $parser.ExitCode; if ($parserExit -ne 0) { $repeatFailed = $true; $repeatErrors.Add("go test JSON assertion failed with exit $parserExit") } + if ($requireSessionStartExecution) { + $goTestSummaryPath = Join-Path $repeatDirectory 'go-test-summary.json' + if (-not (Test-Path -LiteralPath $goTestSummaryPath -PathType Leaf)) { + $sessionStartExecutionProof = Get-RequiredSessionStartExecutionProof $null + } + else { + try { + $goTestSummary = Get-Content -Raw -LiteralPath $goTestSummaryPath | ConvertFrom-Json -Depth 100 + $sessionStartExecutionProof = Get-RequiredSessionStartExecutionProof $goTestSummary + } + catch { + $sessionStartExecutionProof = Get-RequiredSessionStartExecutionProof $null + $sessionStartExecutionProof.errors = @(@($sessionStartExecutionProof.errors) + "go-test summary could not be read for required session-start proof: $($_.Exception.Message)") + } + } + Write-Utf8NoBom (Join-Path $repeatDirectory 'required-session-start-execution.json') (($sessionStartExecutionProof | ConvertTo-Json -Depth 12) + "`n") + if ($sessionStartExecutionProof.verdict -ne 'PASS') { + $repeatFailed = $true + $repeatErrors.Add("required session-start execution proof failed: executed=$($sessionStartExecutionProof.executed)/12 skipped=$($sessionStartExecutionProof.skipped) missing=$($sessionStartExecutionProof.missing)") + } + } if ($effectiveCoverage -eq 'Full') { $coverage = Invoke-CapturedProcess "repeat-$repeatIndex-assert-coverage" $pwshPath @('-NoProfile', '-File', $coverageAssertionScript, '-CoverageProfile', $coveragePath, '-SummaryPath', (Join-Path $repeatDirectory 'coverage-summary.json'), '-OverallThreshold', '60') @{} (Join-Path $repeatDirectory 'assert-coverage.stdout.log') (Join-Path $repeatDirectory 'assert-coverage.stderr.log') $connection @($targetDsn) 120 @@ -1016,6 +1154,7 @@ for ($repeatIndex = 1; $repeatIndex -le $Repeat; $repeatIndex++) { database_create_confirmed = $databaseCreated; sequential_execution = [ordered]@{ package_parallelism = 1; test_parallelism = 1 }; race = [bool]$Race connection_budget = $ConnectionBudget; server_sessions_before = $serverSessionsBefore; server_sessions_after = $serverSessionsAfter; sessions_before = $sessionsBefore; sessions_after = $sessionsAfter go_test_exit = $goTestExit; json_parser_exit = $parserExit; coverage_policy = $effectiveCoverage; coverage_exit = $coverageExit; cleanup_exit = $cleanupExit; cleanup_status = $cleanupStatus + required_session_start_execution = $sessionStartExecutionProof cleanup_summary = if (Test-Path -LiteralPath $cleanupSummaryPath) { [System.IO.Path]::GetFullPath($cleanupSummaryPath) } else { $null } errors = @($repeatErrors); artifact_directory = [System.IO.Path]::GetFullPath($repeatDirectory) } @@ -1031,6 +1170,7 @@ $environmentSummary = [pscustomobject]@{ packages = $packages; run_pattern = if ($Run) { $Run } else { $null }; repeat = $Repeat fail_on_unexpected_skip = [bool]$FailOnUnexpectedSkip; allowed_skip_identities = @($AllowedSkipIdentity) coverage_policy = $effectiveCoverage; connection_budget = $ConnectionBudget; race = [bool]$Race + require_session_start_execution = $requireSessionStartExecution; required_session_start_test_count = 12 sequential_execution = [ordered]@{ go_package_parallelism = 1; go_test_parallelism = 1; database_max_connections = $ConnectionBudget } govulncheck_policy = [ordered]@{ authoritative = @('source scan with tests', 'unstripped binary scan'); non_authoritative = 'stripped binary scan (module-level fallback when symbols are absent)' } } From 135e4a0a180f112906e89c211f976ce519212347 Mon Sep 17 00:00:00 2001 From: Kirill Turanskiy Date: Fri, 10 Jul 2026 17:41:55 +0300 Subject: [PATCH 030/111] docs: record release gate revision 5 evidence --- .agent/e/rg4/r5-maker/SHA256SUMS | 4 + .agent/e/rg4/r5-maker/fail.json | 107 +++++++++++++++++++++ .agent/e/rg4/r5-maker/manifest.json | 81 ++++++++++++++++ .agent/e/rg4/r5-maker/proof.json | 143 ++++++++++++++++++++++++++++ .agent/e/rg4/r5-maker/report.md | 108 +++++++++++++++++++++ 5 files changed, 443 insertions(+) create mode 100644 .agent/e/rg4/r5-maker/SHA256SUMS create mode 100644 .agent/e/rg4/r5-maker/fail.json create mode 100644 .agent/e/rg4/r5-maker/manifest.json create mode 100644 .agent/e/rg4/r5-maker/proof.json create mode 100644 .agent/e/rg4/r5-maker/report.md diff --git a/.agent/e/rg4/r5-maker/SHA256SUMS b/.agent/e/rg4/r5-maker/SHA256SUMS new file mode 100644 index 00000000..18190a34 --- /dev/null +++ b/.agent/e/rg4/r5-maker/SHA256SUMS @@ -0,0 +1,4 @@ +12B183D6B1B65C83D991F29BC91787F41CC971E9F10D39D82EE583DE204109EF .agent/e/rg4/r5-maker/report.md +2E1EAD4AEAC35762319EE508FE9D1DE3CEDBAE17D0A9020DB5E23115CD699FED .agent/e/rg4/r5-maker/proof.json +AFBAA86743F852D49B46B05BC687EC50C5176B85B94B9477A9E71A43C41D11CF .agent/e/rg4/r5-maker/fail.json +05B390493E0D123FBA9AC5E58E35CA7CAC1D65A46630E7E1AB5F46F65B3F2928 .agent/e/rg4/r5-maker/manifest.json diff --git a/.agent/e/rg4/r5-maker/fail.json b/.agent/e/rg4/r5-maker/fail.json new file mode 100644 index 00000000..9606f12f --- /dev/null +++ b/.agent/e/rg4/r5-maker/fail.json @@ -0,0 +1,107 @@ +{ + "schema_version": 1, + "gate": "revision-5-truthful-project-red", + "verdict": "BLOCKED", + "full_project_gate": { + "repeat_test_failures": [29, 30, 29], + "stable_failed_tests": [ + "internal/bulkops::TestEC_F3_ConflictDetected_Integration", + "internal/bulkops::TestFacade_BulkDelete_Committed_AuditLogWritten", + "internal/bulkops::TestFacade_BulkSupersede_Committed_AuditLogWritten", + "internal/bulkops::TestRollback_HappyPath", + "internal/db/gorm::TestMigration144_RuleGovernanceEscapeConstraints", + "internal/db/gorm::TestMigration144_RuleGovernanceRollbackAndReapply", + "internal/db/gorm::TestMigration144_RuleGovernanceSnapshotStatusesAcceptExtendedStates", + "internal/db/gorm::TestRuleGovernanceStore_AnnotatedCandidateWaitsUntilReviewAfter", + "internal/db/gorm::TestRuleGovernanceStore_GetLifecycleHealthAggregatesGovernanceTables", + "internal/db/gorm::TestRuleGovernanceStore_GetLifecycleHealthOmitsGlobalArbiterRunsForProjectScopedReads", + "internal/embedding::TestStatsWithCoverage_NoActiveMemories", + "internal/embedding::TestStoreStats_Empty", + "internal/graph::TestDangling_T016_DanglingEdgeReturnsFlag", + "internal/graph::TestPathC_T015_NodeCreatedAtTimestamp", + "internal/graph::TestPathC_T015_NodeTypedEdgeListFilter", + "internal/graph::TestPathC_T015_SkillNodeEdgeRoundtrip", + "internal/grpcserver::TestGetSessionStartContext_HappyPath", + "internal/grpcserver::TestGetSessionStartContext_RuleRouterEnabledPacketShape", + "internal/mcp::TestEC_F1_TagDerivedBackfill_T007", + "internal/mcp::TestHybridTG3_ConfidenceMin_FloorEnforced_T022", + "internal/worker::TestAuthHandlersLifecycle_DisabledAdminCanBeDemotedWithoutLastAdminError", + "internal/worker::TestAuthHandlersLifecycle_LastAdminDemoteRaceLeavesOneAdmin", + "internal/worker::TestCrystallizationIntegration_ConcurrentReplaySkipsDuplicateFingerprint", + "internal/worker::TestCrystallizationIntegration_DecisionsStoredWithCorrectFields", + "internal/worker::TestCrystallizationIntegration_PrivacyRedaction", + "internal/worker::TestHandleCreateBehavioralRule_Success", + "internal/worker::TestHandleListBehavioralRules_ProjectScope", + "internal/worker::TestHandleSetBehavioralRuleEnabled_Success", + "internal/worker/reaper::TestReaper_RespectsRetentionEnvVar" + ], + "repeat_2_only_failure": "internal/bulkops::TestRollback_Conflict_EC_F3", + "unexpected_skips_each_repeat": 13, + "unexpected_skip_inventory": [ + "internal/db/gorm::TestMigrationsIntegration_AddsCommandsRunColumn", + "internal/grpcserver::TestCredentialDecryptRoundTripAfterMigration", + "internal/handlers/loom::TestCliWorker_ContextCancellation", + "internal/handlers/loom::TestCliWorker_EmptyStdoutTriggersRetry", + "internal/handlers/loom::TestCliWorker_EnvMerge", + "internal/handlers/loom::TestCliWorker_HappyPath", + "internal/handlers/loom::TestCliWorker_InvalidEnvKey", + "internal/handlers/loom::TestCliWorker_StderrCapture", + "internal/handlers/loom::TestCliWorker_Timeout", + "internal/redaction::TestEC_F5_FullRedactionRejected", + "internal/redaction::TestEC_F9_HotReloadNotSupported", + "internal/retrieval::TestIntegration_HybridWithVector", + "internal/worker::TestStaticEmbedIncludesUnderscoreNuxtChunks" + ], + "required_session_start_tests": { + "expected_each_repeat": 12, + "executed_each_repeat": 12, + "skipped_each_repeat": 0, + "missing_each_repeat": 0, + "failed_product_assertions_each_repeat": [ + "internal/grpcserver::TestGetSessionStartContext_HappyPath", + "internal/grpcserver::TestGetSessionStartContext_RuleRouterEnabledPacketShape" + ] + }, + "coverage": { + "overall_percent": [53.35, 53.35, 53.35], + "overall_floor": 60.0, + "failed_package_floors": { + "internal/handlers/loom": "64.77 < 70", + "cmd/engram": "6.39 < 10", + "cmd/engram-server": "0 < 10", + "internal/update": "0 < 20", + "internal/worker": "46.77 < 55", + "internal/mcp": "46.23 < 55", + "internal/db/gorm": "49.17 < 55" + } + }, + "cleanup": { + "repeat_cleanup_exit_codes": [0, 0, 0], + "direct_sql_residual_databases": 0, + "direct_sql_residual_sessions": 0, + "shared_postgres_container_left_running": true + } + }, + "image_scan": { + "verdict": "FAIL_FINDINGS", + "exact_immutable_image_findings": { + "operator-console": 5, + "postgres": 20, + "server": 13 + }, + "down_cleanup": "PASS", + "residual_resources_zero": true + }, + "openclaw": { + "verdict": "FAIL_MISSING_TRACKED_LOCK", + "executed_steps": 0, + "cleanup": "PASS" + }, + "gitleaks_diagnostic": { + "implementation_patch_findings": 0, + "working_tree_no_git_findings": 30, + "working_tree_breakdown": "16 ignored raw runtime-evidence hits plus 14 existing tracked fixture/doc/script hits", + "routing": "Project-wide secret-negative classification remains release work; revision 5 introduced no patch finding." + }, + "routing": "Existing master-plan lanes own product/test/coverage/image/OpenClaw/secret blockers. RELEASE-GATES does not allowlist, suppress, threshold-reduce, or patch them. v5-demolished graph paths remain classification-only." +} diff --git a/.agent/e/rg4/r5-maker/manifest.json b/.agent/e/rg4/r5-maker/manifest.json new file mode 100644 index 00000000..01c9f049 --- /dev/null +++ b/.agent/e/rg4/r5-maker/manifest.json @@ -0,0 +1,81 @@ +{ + "schema_version": 1, + "scope": "RELEASE-GATES revision 5 compact evidence", + "representation_contract": { + "name": "git-blob-lf", + "definition": "Exact bytes returned by git cat-file blob for the recorded object ID; LF line endings, no CR bytes, UTF-8 without BOM.", + "verification": "Resolve commit:path to the recorded blob OID, read the raw blob bytes, assert SHA256/byte count/zero CR/no BOM.", + "working_tree_bytes_are_not_authority": true + }, + "authority": { + "base": "4812589b9920c187a92a03d210d2e9d5eb53862f", + "implementation_commit": "eb44a8e694c60856176c93c64080002231648b4b", + "implementation_parent": "4812589b9920c187a92a03d210d2e9d5eb53862f", + "final_evidence_commit": "SUPPLIED_OUT_OF_BAND_AFTER_COMMIT", + "final_evidence_parent_required": "eb44a8e694c60856176c93c64080002231648b4b" + }, + "entries": [ + { + "path": ".github/workflows/test.yml", + "commit": "eb44a8e694c60856176c93c64080002231648b4b", + "representation": "git-blob-lf", + "git_blob_oid_sha1": "ce38dd8676c8b8113b5a8cfe7eebc3b01d0d4d90", + "sha256": "3291F5D40C7E00FC4A60E7546FE0D43EACF5721C87918CADF995A42AA51354AD", + "bytes": 65789, + "cr_bytes": 0, + "utf8_bom": false + }, + { + "path": "scripts/production-gates/run-db-suite.ps1", + "commit": "eb44a8e694c60856176c93c64080002231648b4b", + "representation": "git-blob-lf", + "git_blob_oid_sha1": "b9212620920aaf1cba28029f80e108735033a5cb", + "sha256": "312D2C690951E0645AA0168312C50BFF26DF21D56F2AE9EC5A88829BCCCA2E58", + "bytes": 94835, + "cr_bytes": 0, + "utf8_bom": false + }, + { + "path": ".agent/e/rg4/r5-maker/report.md", + "commit": "FINAL_EVIDENCE_COMMIT", + "representation": "git-blob-lf", + "git_blob_oid_sha1": "0921168175b0551ce3fc96318113d59187a33423", + "sha256": "12B183D6B1B65C83D991F29BC91787F41CC971E9F10D39D82EE583DE204109EF", + "bytes": 7337, + "cr_bytes": 0, + "utf8_bom": false + }, + { + "path": ".agent/e/rg4/r5-maker/proof.json", + "commit": "FINAL_EVIDENCE_COMMIT", + "representation": "git-blob-lf", + "git_blob_oid_sha1": "d79b4bb4e43be6ee9a5582e09ede6ff0df888ce6", + "sha256": "2E1EAD4AEAC35762319EE508FE9D1DE3CEDBAE17D0A9020DB5E23115CD699FED", + "bytes": 6792, + "cr_bytes": 0, + "utf8_bom": false + }, + { + "path": ".agent/e/rg4/r5-maker/fail.json", + "commit": "FINAL_EVIDENCE_COMMIT", + "representation": "git-blob-lf", + "git_blob_oid_sha1": "9606f12f3ffb64bfb30fccf718c6f14cb50ac180", + "sha256": "AFBAA86743F852D49B46B05BC687EC50C5176B85B94B9477A9E71A43C41D11CF", + "bytes": 5336, + "cr_bytes": 0, + "utf8_bom": false + } + ], + "entry_count": 5, + "excluded_from_manifest_entries": [ + { + "path": ".agent/e/rg4/r5-maker/manifest.json", + "reason": "A manifest cannot contain its own stable digest or blob OID." + }, + { + "path": ".agent/e/rg4/r5-maker/SHA256SUMS", + "reason": "SHA256SUMS hashes the finalized manifest and excludes itself, avoiding a checksum cycle." + } + ], + "self_hash_paradox": false +} diff --git a/.agent/e/rg4/r5-maker/proof.json b/.agent/e/rg4/r5-maker/proof.json new file mode 100644 index 00000000..d79b4bb4 --- /dev/null +++ b/.agent/e/rg4/r5-maker/proof.json @@ -0,0 +1,143 @@ +{ + "schema_version": 1, + "scope": "RELEASE-GATES revision 5 maker evidence", + "authority": { + "base": "4812589b9920c187a92a03d210d2e9d5eb53862f", + "base_tree": "764fd987cc606754f037de0647f8a10e7080adc2", + "revision_4_checker_commit": "bd6af3dcd1fa0c2675102a1b91e7c59c8c7c85df", + "revision_4_checker_report_blob": "27519369cc3e5b79d5188eaf07026cb7076cec13", + "implementation_commit": "eb44a8e694c60856176c93c64080002231648b4b", + "implementation_parent": "4812589b9920c187a92a03d210d2e9d5eb53862f", + "implementation_tree": "8b2ea748407f850222d03bfa1f6662ba9e666e30", + "canonical_plan_sha256": "d7bcfd122e456d9b764595524292d53b0c99447b7f716a1be0707341e4681bf9", + "branch": "work/prc-release-gates-revision5-maker", + "worktree": "D:/Dev/engram/.agent/worktrees/prc-release-gates-r5-maker" + }, + "implementation": { + "changed_paths": [ + ".github/workflows/test.yml", + "scripts/production-gates/run-db-suite.ps1" + ], + "workflow": { + "git_blob_oid": "ce38dd8676c8b8113b5a8cfe7eebc3b01d0d4d90", + "representation": "git-blob-lf", + "sha256": "3291F5D40C7E00FC4A60E7546FE0D43EACF5721C87918CADF995A42AA51354AD", + "bytes": 65789, + "cr_bytes": 0, + "utf8_bom": false + }, + "db_runner": { + "git_blob_oid": "b9212620920aaf1cba28029f80e108735033a5cb", + "representation": "git-blob-lf", + "sha256": "312D2C690951E0645AA0168312C50BFF26DF21D56F2AE9EC5A88829BCCCA2E58", + "bytes": 94835, + "cr_bytes": 0, + "utf8_bom": false + } + }, + "foundation_gates": { + "selftests": { "command_exit": 0, "verdict": "PASS", "count": 9 }, + "workflow_conformance": { "command_exit": 0, "verdict": "PASS", "mutations_rejected": 42, "parser": "PowerShell AST" }, + "powershell_parse": { "command_exit": 0, "verdict": "PASS" }, + "actionlint": { "command_exit": 0, "verdict": "PASS" }, + "diff_check": { "command_exit": 0, "verdict": "PASS" }, + "go_vet": { "command": "go vet ./...", "command_exit": 0, "verdict": "PASS" }, + "gitleaks_implementation_patch": { "command": "git show --format= --patch eb44a8e6... | gitleaks detect --pipe --redact", "command_exit": 0, "verdict": "PASS", "findings": 0 }, + "critical_suite": { + "command_exit": 0, + "verdict": "PASS", + "tests": 7, + "passed": 7, + "failed": 0, + "skipped": 0, + "raw_summary_sha256": "B40AF0A226FDEE976E4CA2243492D387CEC1CCC015179B76386C3AAA54F1E6FA" + }, + "ownership": { + "ledger": { "command_exit": 0, "verdict": "PASS", "slices": 48, "declarations": 325, "raw_sha256": "59A6448A48E2FEFC388103E34DE107CCC10385EEBB849EE7ABC5120356E356EE" }, + "implementation_diff": { "command_exit": 0, "verdict": "PASS", "changed_paths": 2, "violations": 0, "raw_sha256": "23958E373BC478FEEDFA00B015E166CC375128B3691CD6EE8C61F653E032ADAE" } + }, + "path_budget": { + "command_exit": 0, + "verdict": "PASS", + "tracked_paths": 1405, + "longest_combined_length": 166, + "ceiling": 240, + "violations": 0, + "raw_sha256": "6030C014DD6AD0EF2A3212E76A653753DFAB7633C842B0AC70DD6DCA27E45D10", + "fresh_checkout": { "root_length": 66, "core_longpaths": "UNSET", "head_exact": true, "clean": true, "cleanup": true } + } + }, + "database_gate": { + "command_exit": 1, + "verdict": "EXPECTED_PROJECT_RED", + "command_scope": "./... fresh database race repeat 3 fail-on-unexpected-skip full coverage", + "database_name_pattern": "engram_prc_rg_test_<16-lower-hex>_rN", + "required_session_start_execution": [ + { "repeat": 1, "verdict": "PASS", "expected": 12, "observed": 12, "executed": 12, "passed": 10, "failed": 2, "skipped": 0, "missing": 0, "duplicate": 0, "incomplete": 0, "raw_sha256": "0AF9EBDF4B242ED394D13CE4AB410F7A94E7A0A367B66BB0ABBF1C177DDD0316" }, + { "repeat": 2, "verdict": "PASS", "expected": 12, "observed": 12, "executed": 12, "passed": 10, "failed": 2, "skipped": 0, "missing": 0, "duplicate": 0, "incomplete": 0, "raw_sha256": "0AF9EBDF4B242ED394D13CE4AB410F7A94E7A0A367B66BB0ABBF1C177DDD0316" }, + { "repeat": 3, "verdict": "PASS", "expected": 12, "observed": 12, "executed": 12, "passed": 10, "failed": 2, "skipped": 0, "missing": 0, "duplicate": 0, "incomplete": 0, "raw_sha256": "0AF9EBDF4B242ED394D13CE4AB410F7A94E7A0A367B66BB0ABBF1C177DDD0316" } + ], + "project_results": { + "test_failures": [29, 30, 29], + "unexpected_skips": [13, 13, 13], + "coverage_percent": [53.35, 53.35, 53.35], + "overall_floor": 60.0, + "cleanup_exit": [0, 0, 0], + "sessions_before": [0, 0, 0], + "sessions_after": [0, 0, 0] + }, + "direct_residue": { "databases": 0, "sessions": 0, "shared_postgres": "/engram-prc-postgres|pgvector/pgvector:pg17|true" }, + "raw_summary_sha256": "BD76E6D835C8535E61C057542FABD6E43FE008CBA4AE87FA59DAA926A26BD0F1" + }, + "runtime": { + "dev_stand": { + "command_exit": 1, + "overall_verdict": "EXPECTED_SCAN_RED", + "source_commit": "eb44a8e694c60856176c93c64080002231648b4b", + "source_tracked_clean": true, + "up": "PASS", + "ready": "PASS", + "scan": "FAIL_FINDINGS", + "down": "PASS", + "compose_build_completed": true, + "postgres_pull_completed": true, + "launch_no_build": true, + "prelaunch_running_scan_identity": true, + "credentials_distinct_injected_not_persisted": true, + "residual_resources_zero": true, + "findings": { "operator-console": 5, "postgres": 20, "server": 13 }, + "raw_summary_sha256": "5B12038479E0B8CF507372B84B417FF648C43CB3DCE3AAB9907E2EA0A797251F", + "action_sha256": { + "up": "11B2FA012EE7CB3C5C522D1E69C1DC14EB1F90E613578B9214105105F05045D0", + "ready": "432DAEAA3D34D125E2C4A5FEC13E2C0279430DA911DC6DDE6E9FEF9CBCAB2507", + "scan": "B7D2BFAC82202FDDBF2DCF5F04EBA74FFF5E11247D48064C140AA02BC9FFDAD4", + "down": "524D0C102F7E5EA2A8E58517889895592FB321B5F94112C8E505B8E2A1412D9B" + } + }, + "openclaw_matrix": { + "command_exit": 1, + "verdict": "EXPECTED_NEGATIVE", + "reason": "required plugin/openclaw-engram/package-lock.json is absent", + "executed_steps": 0, + "pre_surface_clean": true, + "post_surface_clean": true, + "cleanup": true, + "raw_summary_sha256": "5449C64632EF3B3A79EB3603CEA8B051DA52B25A861F2759F6B6DF3E61A745CE" + } + }, + "environment": { + "os": "Microsoft Windows 10.0.26200", + "arch": "X64", + "go": "1.25.11 windows/amd64", + "powershell": "7.6.1", + "git": "2.51.1.windows.1", + "actionlint": "1.7.12", + "docker_client": "29.1.3", + "docker_server": "29.1.3", + "docker_compose": "2.40.3-desktop.1", + "core_autocrlf": true, + "core_longpaths": "UNSET" + }, + "maker_handoff": "READY_FOR_INDEPENDENT_CHECK", + "project_release_readiness": "BLOCKED" +} diff --git a/.agent/e/rg4/r5-maker/report.md b/.agent/e/rg4/r5-maker/report.md new file mode 100644 index 00000000..09211681 --- /dev/null +++ b/.agent/e/rg4/r5-maker/report.md @@ -0,0 +1,108 @@ +# RELEASE-GATES Foundation Revision 5 — Maker Handoff + +Status: `REVIEW_REQUIRED` +Foundation verdict: `READY_FOR_INDEPENDENT_CHECK` +Project-wide production verdict: `BLOCKED` +Exact revision-4 candidate/base: `4812589b9920c187a92a03d210d2e9d5eb53862f` +Revision-4 checker evidence commit: `bd6af3dcd1fa0c2675102a1b91e7c59c8c7c85df` +Revision-4 checker report blob: `27519369cc3e5b79d5188eaf07026cb7076cec13` +Revision-5 implementation commit: `eb44a8e694c60856176c93c64080002231648b4b` +Canonical UTF-8/LF plan SHA256: `d7bcfd122e456d9b764595524292d53b0c99447b7f716a1be0707341e4681bf9` + +## Outcome + +Revision 5 closes both release-gate false-green classes found by the independent revision-4 checker. + +1. Workflow conformance now parses the actual PowerShell AST. It binds exact executable/argument/assignment/function/branch/loop shapes, rejects parse errors, requires one reachable live Docker build and one reachable live Docker Scout command, and rejects comments, dead strings, unreachable branches, duplicate canonical calls, and renamed duplicate calls. The live source/build/pull/post-build/image/launch/scan order and exact image map remain locked. +2. Fresh database identities are now `engram_prc_rg_test__rN`. The caller run ID is hashed so operator-controlled `prod`, `production`, or `staging` text cannot poison the test-only guard. Every unfiltered canonical `./...` repeat emits a fail-closed proof for the exact 12 required gRPC session-start tests. Pass and fail are both executed terminal outcomes; skip, missing, duplicate, or incomplete is fatal. + +The conformance suite rejects 42 permanent mutations. New revision-5 mutations cover comment-only, dead-string, and unreachable build calls; duplicate and renamed-duplicate live build calls; unreachable, duplicate, and renamed-duplicate Scout calls; comment-only/unsafe database assignment; comment-only/bypassed session-start proof; and removal of the literal-test identity. + +No product code, product tests, plan/state authority, or v5-demolished graph/rerank/composite-scoring/SDK-extraction/server-HTTP-MCP path was changed. + +## Verification + +| Gate | Exit | Result | +|---|---:|---| +| Nine production-gate self-tests | 0 | PASS, 9/9 | +| Extracted workflow conformance block | 0 | PASS, 42/42 mutations rejected | +| PowerShell parser | 0 | PASS | +| `actionlint .github/workflows/test.yml` | 0 | PASS | +| `git diff --check` | 0 | PASS | +| `go vet ./...` | 0 | PASS | +| Critical suite | 0 | PASS, 7/7, skip=0 | +| RELEASE-GATES Ledger | 0 | PASS, 48 slices / 325 declarations | +| RELEASE-GATES implementation Diff | 0 | PASS, 2 changed paths / 0 violations | +| Windows path budget at implementation commit | 0 | PASS, 1,405 paths, longest 166, ceiling 240 | +| Actual 66-character fresh detached checkout | 0 | PASS, exact implementation HEAD, `core.longpaths=UNSET`, clean; worktree removed | +| R5 implementation patch gitleaks scan | 0 | PASS, no leak found | +| OpenClaw node matrix | 1 | Expected fail-closed: tracked `package-lock.json` absent; 0 npm steps, pre/post clean, cleanup PASS | +| Canonical full fresh-DB/race/repeat-3 gate | 1 | Expected project RED; foundation invariants below all passed | +| Exact-head dev stand lifecycle | 1 | Up/Ready/Down PASS; Scan correctly failed on exact-image findings; residue zero | + +## Exact 12-test execution proof + +The canonical command used the shared `engram-prc-postgres` PostgreSQL 17 + pgvector service without stopping or removing it: + +```powershell +$env:ENGRAM_TEST_ADMIN_DSN = 'postgres://@127.0.0.1:55432/postgres?sslmode=disable' +pwsh -NoProfile -File scripts/production-gates/run-db-suite.ps1 ` + -FreshDatabase -Package ./... -Race -FailOnUnexpectedSkip ` + -Repeat 3 -CoveragePolicy Full ` + -PostgresContainer engram-prc-postgres ` + -PostgresImage pgvector/pgvector:pg17 ` + -ArtifactRoot .agent/e/rg4/r5-maker/runtime ` + -RunId canonical-full-race-repeat3 +``` + +All three repeats produced the same required-test proof: + +- expected=12, observed=12, executed=12; +- passed=10, failed=2, skipped=0; +- missing=0, duplicate=0, incomplete=0; +- proof verdict `PASS`; +- generated identities ended in `_r1`, `_r2`, `_r3` and all contained the literal `test` marker; +- sessions_before=0, sessions_after=0, cleanup exit=0 and cleanup verdict `PASS` in every repeat. + +The two required tests that reached a real failing terminal outcome were `TestGetSessionStartContext_HappyPath` and `TestGetSessionStartContext_RuleRouterEnabledPacketShape`. They remain visible product blockers; they were not converted to skips or treated as successful product behavior. + +## Truthful project-wide RED + +The full gate returned FAIL in all three repetitions, as required by the current project state: + +- failing tests: 29 / 30 / 29; +- unexpected skips: 13 / 13 / 13; +- overall coverage: 53.35% / 53.35% / 53.35%, below 60%; +- seven package floors remain below contract; +- cleanup exit: 0 / 0 / 0; +- direct SQL after the run found zero `engram_prc_rg_test_%` databases and zero matching sessions; +- shared container remained `/engram-prc-postgres|pgvector/pgvector:pg17|true`. + +The stable test/skip inventory and coverage floors are in `fail.json`. Graph T015/T016 failures are recorded as demolition-classification work, not repaired or resurrected by this slice. + +## Exact-head dev stand + +The lifecycle challenged clean commit `eb44a8e694c60856176c93c64080002231648b4b`: + +- Up PASS: source clean, compose build PASS, PostgreSQL pull PASS, launch used `--no-build --pull never`, all three prelaunch image IDs equalled running IDs, three cryptographic credentials were distinct/runtime-injected/not persisted. +- Ready PASS: direct and operator-proxied liveness/readiness endpoints returned HTTP 200 with the required semantic payloads. +- Scan FAIL as expected: immutable `local://sha256:...` references found operator-console=5, PostgreSQL=20, server=13 HIGH/CRITICAL findings. +- Down PASS: zero compose containers, volumes, or networks remained. + +## Evidence integrity + +`manifest.json` uses the explicit `git-blob-lf` representation. Source entries bind the exact implementation commit, Git blob OID, SHA256 of the raw Git blob bytes, zero CR bytes, and no UTF-8 BOM. This avoids ambiguity from the Windows checkout's `core.autocrlf=true` working-tree representation. + +The manifest deliberately excludes itself and `SHA256SUMS`. `SHA256SUMS` hashes `report.md`, `proof.json`, `fail.json`, and `manifest.json`, and deliberately excludes itself. There is no self-hash or manifest/checksum cycle. The final evidence commit cannot name its own commit ID; its exact final candidate SHA is supplied out of band after commit and must have implementation commit `eb44a8e6...` as its direct parent. + +## Changed paths + +- `.github/workflows/test.yml` +- `scripts/production-gates/run-db-suite.ps1` +- `.agent/e/rg4/r5-maker/report.md` +- `.agent/e/rg4/r5-maker/proof.json` +- `.agent/e/rg4/r5-maker/fail.json` +- `.agent/e/rg4/r5-maker/manifest.json` +- `.agent/e/rg4/r5-maker/SHA256SUMS` + +Maker position: `READY_FOR_INDEPENDENT_CHECK` for the release-gate foundation. Independent checker and post-review remain mandatory. Project-wide readiness remains `BLOCKED` by the exact failures, skips, coverage deficits, image findings, existing tracked-tree gitleaks classifications, and missing OpenClaw lock recorded in compact evidence. From 8dac7910de52d2744fcf67f79a0a1597beebac72 Mon Sep 17 00:00:00 2001 From: Kirill Turanskiy Date: Fri, 10 Jul 2026 17:49:11 +0300 Subject: [PATCH 031/111] docs(review): reject embedding evidence transport R2 --- .../CHECKER-SHA256SUMS.txt | 30 + .../checker-edge-mutations.cjs | 282 ++++++++ .../checker-report.md | 160 +++++ .../checker-summary.v1.json | 109 ++++ .../checksum-audit.json | 330 ++++++++++ .../runs/checker-edge-mutations.json | 607 ++++++++++++++++++ .../runs/lf-adversarial.tap | 29 + .../runs/lf-artifact-files.json | 56 ++ .../runs/lf-checkout-lf.json | 94 +++ .../runs/lf-git-object.json | 94 +++ .../runs/lf-legacy-raw-audit.json | 94 +++ .../runs/proveit-baseline.tap | 29 + .../runs/proveit-post-restore.tap | 29 + ...roveit-validateContractSchema-sentinel.tap | 527 +++++++++++++++ .../proveit-verifyArtifactFiles-sentinel.tap | 174 +++++ .../runs/red-base.tap | 284 ++++++++ .../runs/windows-adversarial.tap | 29 + .../runs/windows-artifact-files.json | 56 ++ .../runs/windows-checkout-lf.json | 94 +++ .../runs/windows-coverage-repeat2.tap | 44 ++ .../runs/windows-coverage.tap | 44 ++ .../runs/windows-git-object.json | 94 +++ .../runs/windows-legacy-raw-audit.json | 94 +++ .../target-audit.json | 80 +++ 24 files changed, 3463 insertions(+) create mode 100644 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r2-checker/CHECKER-SHA256SUMS.txt create mode 100644 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r2-checker/checker-edge-mutations.cjs create mode 100644 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r2-checker/checker-report.md create mode 100644 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r2-checker/checker-summary.v1.json create mode 100644 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r2-checker/checksum-audit.json create mode 100644 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r2-checker/runs/checker-edge-mutations.json create mode 100644 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r2-checker/runs/lf-adversarial.tap create mode 100644 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r2-checker/runs/lf-artifact-files.json create mode 100644 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r2-checker/runs/lf-checkout-lf.json create mode 100644 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r2-checker/runs/lf-git-object.json create mode 100644 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r2-checker/runs/lf-legacy-raw-audit.json create mode 100644 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r2-checker/runs/proveit-baseline.tap create mode 100644 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r2-checker/runs/proveit-post-restore.tap create mode 100644 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r2-checker/runs/proveit-validateContractSchema-sentinel.tap create mode 100644 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r2-checker/runs/proveit-verifyArtifactFiles-sentinel.tap create mode 100644 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r2-checker/runs/red-base.tap create mode 100644 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r2-checker/runs/windows-adversarial.tap create mode 100644 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r2-checker/runs/windows-artifact-files.json create mode 100644 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r2-checker/runs/windows-checkout-lf.json create mode 100644 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r2-checker/runs/windows-coverage-repeat2.tap create mode 100644 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r2-checker/runs/windows-coverage.tap create mode 100644 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r2-checker/runs/windows-git-object.json create mode 100644 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r2-checker/runs/windows-legacy-raw-audit.json create mode 100644 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r2-checker/target-audit.json diff --git a/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r2-checker/CHECKER-SHA256SUMS.txt b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r2-checker/CHECKER-SHA256SUMS.txt new file mode 100644 index 00000000..d2026a2d --- /dev/null +++ b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r2-checker/CHECKER-SHA256SUMS.txt @@ -0,0 +1,30 @@ +# manifest-version=1 +# slice=DB-EMBEDDING-EVIDENCE-TRANSPORT-R2-CHECKER +# algorithm=sha256 +# representation=git-index-blob-content +# target=db2cf891dd9c6315fd17220ffe2d02302bea8844 +# checker-head=containing-commit-reported-out-of-band +# self-entry=excluded-to-avoid-recursion +96e753a3a284930a8ac1b1ab5537f6afd2cf244ae6600d43463693acf0a207ac .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r2-checker/checker-edge-mutations.cjs +a6ac61a7731b82916515c8cd83e99ecb0fa06bb6e0d0bb180ce811602403a822 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r2-checker/checker-report.md +9a21e070ed37cd332fc968c6a0f2088a83a506da8ec8472483b01afbf585f15f .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r2-checker/checker-summary.v1.json +041ae7f10aaaf66eb2bfd7d5fe06e59d857887ab04d31bd74bb668f95b70f93b .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r2-checker/checksum-audit.json +2aeaf581cdb79d2865ff616b495bd07d1ac3d08240063146f8b9067a6cdd79a6 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r2-checker/runs/checker-edge-mutations.json +2274e6486f11ad291a44b65fa4e0e41b08c944c48ce975f98f0d366ceb00f3f4 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r2-checker/runs/lf-adversarial.tap +8d5bd452204aeb5cb9f487e36b3dc885fd602c0a974752b583f99493a3d7d2d3 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r2-checker/runs/lf-artifact-files.json +1ae4a5c71c9d55fe3cc536d4d6affcfd7e296c072aadaa244324b5b3158c6fde .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r2-checker/runs/lf-checkout-lf.json +0f2974b8828909a15abc4d32309fe520152c5208505c3b09c6a20f2cbf627211 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r2-checker/runs/lf-git-object.json +21570ca6a8c57859425bae784a5a89af1f4665adfa76cb51e92d4137f58d939b .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r2-checker/runs/lf-legacy-raw-audit.json +f8c7dda5fe46cdcfa512fe0876dcdd34d08e4e9d1800f7e73fe9c82cedbd72e9 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r2-checker/runs/proveit-baseline.tap +654d7e4a666a2bb4336f5918478a4aae10af384e2b474c84db827ce641dba500 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r2-checker/runs/proveit-post-restore.tap +a75216702634d62811d2bc275f286487e14c90cb0a4775901f4f4fcfcd6068f4 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r2-checker/runs/proveit-validateContractSchema-sentinel.tap +0bedd0384b3fc2c984dd4af60b2f09058efad005b920e42cfb19c74846dec96d .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r2-checker/runs/proveit-verifyArtifactFiles-sentinel.tap +9eee68c358c4e9c47222b5964c0899788120b34912094684c7e8a3cd175967d9 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r2-checker/runs/red-base.tap +02b385f261000733c3a887e415b6c6afb2ee732ea57d7c2ade9b9a334d92ce4b .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r2-checker/runs/windows-adversarial.tap +4c6e46d4d88041cffca2ef761bf4216912ac025af3210b2b0cf136cb2f380765 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r2-checker/runs/windows-artifact-files.json +8a8bc7439431ab1d05a40cb5fe14ff6058c4c99c7b370c3a6966f870b0c3115e .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r2-checker/runs/windows-checkout-lf.json +7155ffdf54cd19bf35f99f30b9d62c124351b4cf3e1f14889656fc52f8f53b6b .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r2-checker/runs/windows-coverage-repeat2.tap +681a47a8639fb7626a527d070611fdddd1374175af4398ca212793b65563eb54 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r2-checker/runs/windows-coverage.tap +71543f1377ff75287758cde47f9fa052aeb8f5748a4a6db8f16f62a92c60c96f .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r2-checker/runs/windows-git-object.json +de7b8356ff867787faae220e21c82f473e7ea32bbc35288e2738531b9b18267a .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r2-checker/runs/windows-legacy-raw-audit.json +c91be5dab44fec0a0cc4e2b91381acbf42477714a2ffabba143d5fd27a98ece3 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r2-checker/target-audit.json diff --git a/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r2-checker/checker-edge-mutations.cjs b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r2-checker/checker-edge-mutations.cjs new file mode 100644 index 00000000..36c1f043 --- /dev/null +++ b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r2-checker/checker-edge-mutations.cjs @@ -0,0 +1,282 @@ +#!/usr/bin/env node +'use strict'; + +const crypto = require('node:crypto'); +const fs = require('node:fs'); +const path = require('node:path'); +const { spawnSync } = require('node:child_process'); + +const TARGET = 'db2cf891dd9c6315fd17220ffe2d02302bea8844'; +const ALTERNATE_ANCESTOR = '580b0cd0ff38bb55a5195a8004e60234a824b7a8'; +const SOURCE = '38d6a4fb7ff5f5ae3b6c0066c0a1b806421137df'; +const repositoryArgument = process.argv.find((value) => value.startsWith('--repository=')); + +if (!repositoryArgument) { + process.stderr.write('usage: checker-edge-mutations.cjs --repository=\n'); + process.exit(2); +} + +const repoRoot = path.resolve(repositoryArgument.slice('--repository='.length)); +const evidenceDirectory = path.join( + repoRoot, + '.agent', + 'reports', + 'evidence', + 'production-ready', + 'db-embedding-stats-evidence-transport', +); +const verifierPath = path.join(evidenceDirectory, 'verify-manifest.cjs'); +const contractPath = path.join(evidenceDirectory, 'content-manifest.v1.json'); +const artifactManifestPath = path.join(evidenceDirectory, 'ARTIFACTS.sha256'); +const legacyManifestPath = path.join( + repoRoot, + '.agent', + 'reports', + 'evidence', + 'production-ready', + 'db-embedding-stats', + 'SHA256SUMS.txt', +); + +function run(command, args, options = {}) { + const result = spawnSync(command, args, { + cwd: options.cwd || repoRoot, + encoding: options.encoding === undefined ? 'utf8' : options.encoding, + windowsHide: true, + maxBuffer: 64 * 1024 * 1024, + }); + if (result.error) throw result.error; + return result; +} + +function gitText(args) { + const result = run('git', args); + if (result.status !== 0) throw new Error(result.stderr.trim()); + return result.stdout.trim(); +} + +function gitBytes(args) { + const result = run('git', args, { encoding: null }); + if (result.status !== 0) throw new Error(result.stderr.toString('utf8').trim()); + return result.stdout; +} + +function sha256(bytes) { + return crypto.createHash('sha256').update(bytes).digest('hex'); +} + +function serializeJsonLike(original, value) { + const eol = original.includes(Buffer.from('\r\n')) ? '\r\n' : '\n'; + return Buffer.from(`${JSON.stringify(value, null, 2).replace(/\n/g, eol)}${eol}`, 'utf8'); +} + +function mutateAnnotated(original, mutate) { + const text = original.toString('utf8'); + const eol = text.includes('\r\n') ? '\r\n' : '\n'; + const lines = text.split(/\r?\n/); + if (lines.at(-1) === '') lines.pop(); + mutate(lines); + return Buffer.from(`${lines.join(eol)}${eol}`, 'utf8'); +} + +function runVerifier(mode) { + const result = run(process.execPath, [verifierPath, `--mode=${mode}`]); + let output = null; + try { + if (result.stdout.trim()) output = JSON.parse(result.stdout); + } catch { + output = null; + } + return { + exit_code: result.status, + status: output?.status || null, + total: output?.total ?? null, + matched: output?.matched ?? null, + structural_errors: output?.structural_errors || [], + entries: output?.entries || [], + stderr: result.stderr.trim(), + }; +} + +function withMutations(mutations, action) { + const originals = new Map(); + try { + for (const [filePath, bytes] of mutations) { + originals.set(filePath, fs.readFileSync(filePath)); + fs.writeFileSync(filePath, bytes); + } + return action(); + } finally { + for (const [filePath, bytes] of originals) fs.writeFileSync(filePath, bytes); + } +} + +function expectRejected(name, result, extraCheck = () => true) { + const pass = result.exit_code !== 0 && result.status !== 'PASS' && extraCheck(result); + return { name, expectation: 'reject', pass, ...result }; +} + +function expectAccepted(name, result, extraCheck = () => true) { + const pass = result.exit_code === 0 && result.status === 'PASS' && extraCheck(result); + return { name, expectation: 'accept', pass, ...result }; +} + +if (gitText(['rev-parse', 'HEAD']) !== TARGET) { + throw new Error(`mutation worktree must be at exact target ${TARGET}`); +} +if (gitText(['status', '--porcelain']) !== '') { + throw new Error('mutation worktree must start clean'); +} + +const cases = []; +cases.push(expectAccepted('baseline_git_object', runVerifier('git-object'), (result) => result.total === 7)); + +{ + const originalContract = fs.readFileSync(contractPath); + const originalLegacy = fs.readFileSync(legacyManifestPath); + const contract = JSON.parse(originalContract); + const removed = contract.entries.pop(); + const legacy = mutateAnnotated(originalLegacy, (lines) => { + const index = lines.findIndex((line) => line.endsWith(` ${removed.path}`)); + if (index < 0) throw new Error('removed entry not present in legacy manifest'); + lines.splice(index, 1); + }); + const result = withMutations( + [ + [contractPath, serializeJsonLike(originalContract, contract)], + [legacyManifestPath, legacy], + ], + () => runVerifier('git-object'), + ); + cases.push(expectRejected('content_manifest_rejects_six_of_seven_when_legacy_agrees', result)); +} + +{ + const originalContract = fs.readFileSync(contractPath); + const originalLegacy = fs.readFileSync(legacyManifestPath); + const contract = JSON.parse(originalContract); + const replaced = contract.entries.at(-1); + const substitutePath = 'go.mod'; + const substituteBytes = gitBytes(['cat-file', 'blob', `${SOURCE}:${substitutePath}`]); + const substitute = { + path: substitutePath, + git_blob_oid: gitText(['rev-parse', `${SOURCE}:${substitutePath}`]), + byte_length: substituteBytes.length, + sha256: sha256(substituteBytes), + }; + contract.entries[contract.entries.length - 1] = substitute; + const legacy = mutateAnnotated(originalLegacy, (lines) => { + const index = lines.findIndex((line) => line.endsWith(` ${replaced.path}`)); + if (index < 0) throw new Error('replaced entry not present in legacy manifest'); + lines[index] = `${substitute.sha256} ${substitute.path}`; + }); + const result = withMutations( + [ + [contractPath, serializeJsonLike(originalContract, contract)], + [legacyManifestPath, legacy], + ], + () => runVerifier('git-object'), + ); + cases.push(expectRejected('content_manifest_rejects_wrong_path_with_same_cardinality', result)); +} + +{ + const originalContract = fs.readFileSync(contractPath); + const originalLegacy = fs.readFileSync(legacyManifestPath); + const contract = JSON.parse(originalContract); + contract.representation.source_commit = ALTERNATE_ANCESTOR; + const legacy = mutateAnnotated(originalLegacy, (lines) => { + const index = lines.findIndex((line) => line.startsWith('# source-commit=')); + if (index < 0) throw new Error('source-commit metadata not present'); + lines[index] = `# source-commit=${ALTERNATE_ANCESTOR}`; + }); + const result = withMutations( + [ + [contractPath, serializeJsonLike(originalContract, contract)], + [legacyManifestPath, legacy], + ], + () => runVerifier('git-object'), + ); + cases.push(expectRejected('representation_rejects_alternate_ancestor_source_commit', result)); +} + +{ + const originalContract = fs.readFileSync(contractPath); + const originalLegacy = fs.readFileSync(legacyManifestPath); + const contract = JSON.parse(originalContract); + contract.entries[1] = structuredClone(contract.entries[0]); + const legacy = mutateAnnotated(originalLegacy, (lines) => { + const dataIndexes = lines + .map((line, index) => ({ line, index })) + .filter(({ line }) => /^[0-9a-f]{64} /.test(line)) + .map(({ index }) => index); + lines[dataIndexes[1]] = lines[dataIndexes[0]]; + }); + const result = withMutations( + [ + [contractPath, serializeJsonLike(originalContract, contract)], + [legacyManifestPath, legacy], + ], + () => runVerifier('git-object'), + ); + cases.push(expectRejected('content_manifest_rejects_duplicate_canonical_path', result)); +} + +{ + const storePath = path.join(repoRoot, 'internal', 'embedding', 'store.go'); + const original = fs.readFileSync(storePath); + const result = withMutations( + [[storePath, Buffer.concat([original, Buffer.from([13])])]], + () => runVerifier('checkout-lf'), + ); + cases.push(expectRejected( + 'checkout_lf_rejects_real_bare_cr_byte', + result, + (value) => value.entries.some((entry) => entry.bare_carriage_returns > 0), + )); +} + +{ + const original = fs.readFileSync(artifactManifestPath); + const mutated = mutateAnnotated(original, (lines) => { + const index = lines.findIndex((line) => line.startsWith('# representation=')); + if (index < 0) throw new Error('artifact representation metadata not present'); + lines[index] = '# representation=raw-checkout-files'; + }); + const result = withMutations([[artifactManifestPath, mutated]], () => runVerifier('artifact-files')); + cases.push(expectRejected('artifact_manifest_rejects_representation_drift', result)); +} + +{ + const makerReportPath = path.join(evidenceDirectory, 'maker-report.md'); + const original = fs.readFileSync(makerReportPath); + const result = withMutations( + [[makerReportPath, Buffer.concat([original, Buffer.from([13])])]], + () => runVerifier('artifact-files'), + ); + cases.push(expectRejected( + 'artifact_files_reject_real_bare_cr_byte', + result, + (value) => value.entries.some((entry) => entry.bare_carriage_returns > 0), + )); +} + +const residue = gitText(['status', '--porcelain']); +const falsePasses = cases.filter((entry) => !entry.pass); +const result = { + schema_version: 1, + checker: 'DB-EMBEDDING-EVIDENCE-TRANSPORT-R2', + target: TARGET, + source_commit: SOURCE, + alternate_ancestor: ALTERNATE_ANCESTOR, + status: falsePasses.length === 0 && residue === '' ? 'PASS' : 'FAIL', + total: cases.length, + passed: cases.length - falsePasses.length, + failed: falsePasses.length, + false_pass_cases: falsePasses.map((entry) => entry.name), + worktree_residue: residue, + cases, +}; + +process.stdout.write(`${JSON.stringify(result, null, 2)}\n`); +if (result.status !== 'PASS') process.exit(1); diff --git a/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r2-checker/checker-report.md b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r2-checker/checker-report.md new file mode 100644 index 00000000..7defabd8 --- /dev/null +++ b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r2-checker/checker-report.md @@ -0,0 +1,160 @@ +# DB-EMBEDDING-EVIDENCE-TRANSPORT R2 independent checker report + +Date: 2026-07-10 +Role: independent checker/verifier +Status: **DONE_WITH_CONCERNS** +Verdict: **REVISE / NOT_READY** + +The target improves the rejected verifier substantially, but it still permits +three independently reproduced false-PASS states. Under the assigned contract, +any false PASS or raw-path trust blocks post-review. This report does not modify +or repair maker, verifier, product, or test artifacts. + +## Immutable boundary + +- Exact target: `db2cf891dd9c6315fd17220ffe2d02302bea8844` +- Exact target tree: `6a450d3f0b83ce2afd95910da1516411a2134514` +- Exact parent/base: `580b0cd0ff38bb55a5195a8004e60234a824b7a8` +- Accepted product source: `38d6a4fb7ff5f5ae3b6c0066c0a1b806421137df` +- Source branch: `work/prc-db-embedding-evidence-transport-r2` +- Checker branch: `review/prc-db-embedding-evidence-r2-checker` +- Checker worktree: + `D:/Dev/engram/.agent/worktrees/db-embedding-evidence-r2-checker` +- Target ancestry: exactly one commit from the base; target parent equals base. +- Target delta: nine `.agent/` evidence/spec paths; product/source/test delta is + zero both from the accepted product source and from the exact base. +- Checker writes: this checker evidence directory only. + +The checker commit is reported after commit because a commit cannot embed its +own SHA or tree without changing them. + +## Blocking findings + +### HIGH ETR2-C001 — the seven-record source manifest is not an exact set + +`verify-manifest.cjs:302` requires only a non-empty array. The legacy manifest +is compared to the same mutable contract at `verify-manifest.cjs:528`, and PASS +is computed against the resulting dynamic `total` at lines 584-600. There is no +constant for the seven required paths or required cardinality. + +Two independent mutations therefore false-PASS: + +1. Remove one content-contract entry and the corresponding legacy entry: + exit `0`, status `PASS`, `6/6`, structural errors `0`. +2. Replace one required path with a correctly described `go.mod` blob while + preserving cardinality and the matching legacy entry: exit `0`, status + `PASS`, `7/7`, structural errors `0`. + +This permits a complete-looking evidence result for an incomplete or different +source artifact set. + +### HIGH ETR2-C002 — the accepted source commit can be rebound + +`verify-manifest.cjs:275` checks only that `representation.source_commit` is a +40-hex value. Lines 532-537 require only that it is some ancestor of `HEAD`. +The accepted source `38d6a4fb...` is not pinned by the executable verifier. + +Changing both mutable source-commit declarations to alternate ancestor +`580b0cd0ff38bb55a5195a8004e60234a824b7a8` produced exit `0`, status `PASS`, +`7/7`, structural errors `0`. This is representation/source drift accepted as +valid evidence. + +### HIGH ETR2-C003 — invalid contract paths are not gated before raw access + +The schema pass computes normalized/contained paths, but source verification at +`verify-manifest.cjs:549-553` still passes raw `entry.path` to Git and then to +`fs.readFileSync(path.join(...entry.path.split('/')))`, even when validation has +already recorded path errors. Artifact-file mode correctly gates reads on the +validated normalized required-path set; source modes do not. Invalid tested +paths return nonzero today because Git rejects them first, but the code does not +honor the claimed “validated before filesystem access” boundary. + +### MEDIUM ETR2-C004 — committed aggregate coverage values are stale + +The TDD JSON and maker report claim all-files line `88.89%` and branch `65.33%`. +Two fresh exact-target runs with Node `v24.2.0` were identical at line `89.10%` +and branch `66.50%`; verifier line `84.46%` and functions `100%` do match. +Coverage remains above the claimed threshold, so this is not a coverage +regression, but the committed exact aggregate values are not reproducible. + +## Acceptance replay + +| Rail | Independent result | +| --- | --- | +| One-commit ancestry and exact parent | PASS | +| Product/source/test delta versus source and base | PASS, zero paths | +| Declared contract shape | PASS, seven unique entries | +| Windows EOL materialization | PASS, `i/lf w/crlf` for `7/7` | +| Windows raw/Git-object/checkout-LF | PASS, `0/7`, `7/7`, `7/7` | +| Windows artifact set | PASS, exact `5/5` | +| Permanent maker adversarial suite | PASS, `18/18`, exit `0` | +| Fresh LF materialization | PASS, `i/lf w/lf` for `7/7` | +| Fresh LF raw/Git-object/checkout-LF | PASS, `7/7`, `7/7`, `7/7` | +| Fresh LF artifact set and adversarial suite | PASS, `5/5` and `18/18` | +| RED against exact base | PASS as evidence: exit `1`, pass `1`, fail `17` | +| `validateContractSchema` Prove-It sentinel | PASS as evidence: exit `1`, fail `18` | +| `verifyArtifactFiles` Prove-It sentinel | PASS as evidence: exit `1`, pass `9`, fail `9` | +| Post-sentinel byte restore | PASS, `18/18`, verifier byte-identical | +| Outer/artifact/legacy checksum manifests | PASS, `9/9`, `5/5`, `7/7` | +| Self-reference discipline | PASS: both checksum manifests exclude themselves | +| Node syntax and target diff check | PASS | +| Temporary worktrees/process/DB/session residue | PASS, all zero | + +The positive rails above do not override ETR2-C001 or ETR2-C002: the permanent +18-case suite never couples the two mutable source manifests or tries a valid +alternate ancestor, so it cannot detect those false-PASS classes. + +## Commands and exits + +- `node verify-manifest.cjs --mode=legacy-raw-audit`: exit `0`, + `AMBIGUOUS_RAW_CHECKOUT_CONFIRMED`, raw/Git/LF `0/7`, `7/7`, `7/7`. +- `node verify-manifest.cjs --mode=git-object`: exit `0`, PASS `7/7`. +- `node verify-manifest.cjs --mode=checkout-lf`: exit `0`, PASS `7/7`. +- `node verify-manifest.cjs --mode=artifact-files`: exit `0`, PASS `5/5`. +- `node --test --test-concurrency=1 verify-manifest.test.cjs`: exit `0`, + `18/18` in both Windows and LF checkouts. +- `node --test --test-concurrency=1 --experimental-test-coverage + verify-manifest.test.cjs`: exit `0` twice; line `89.10%`, branch `66.50%`, + functions `100%` across all files. +- Target test materialized into exact-base detached worktree: exit `1`, pass + `1`, fail `17`. +- Empty `validateContractSchema` sentinel: exit `1`, fail `18`; empty + `verifyArtifactFiles` sentinel: exit `1`, pass `9`, fail `9`; post-restore + exit `0`, pass `18`. +- `node checker-edge-mutations.cjs --repository=`: + exit `1`, checker status FAIL, eight cases, five expected outcomes and three + false-PASS findings. +- `node --check` for verifier, maker test, and checker mutation harness: exit + `0` each. +- `git diff --check 580b0cd0..db2cf891`: exit `0`. + +## Checksums and cleanup + +`checksum-audit.json` records every Git blob OID, SHA-256, byte length, raw +checkout hash, canonical-LF hash, and bare-CR count. All committed maker hashes +match. The outer R2 manifest Git blob is +`6fbef4d23f5a647952d694549d3d3f55cf6ab034`, SHA-256 +`a723782459ee52b40db3c3105a138347a62354b48f1ec7fab4c3378a58617780`. + +The mutation, LF, RED, and Prove-It worktrees were each clean/restored before +removal. Their paths and normalized Git registrations are absent. Checker-owned +Node processes, matching PostgreSQL databases, and matching PostgreSQL sessions +are zero. Shared container `engram-prc-postgres` remains running. + +## Code-quality review + +- Correctness and validation completeness: blocked by ETR2-C001/C002/C003. +- Readability: the validator is organized into understandable helpers. +- Architecture: no product dependency or source-code coupling was introduced. +- Security: artifact paths use an exact normalized allowlist, but source-mode + raw path use weakens the intended trust boundary. +- Performance: bounded seven/five-entry work; no material concern. +- Reusability candidates: none; evaluated as an evidence-slice-specific gate. + +## Required next action + +Keep the target out of post-review. A maker revision must pin the accepted +source commit and exact seven source paths/cardinality in executable validation, +gate all source access on validated canonical paths, add permanent regressions +for the three false-PASS cases, refresh coverage evidence, and return to a fresh +independent checker. diff --git a/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r2-checker/checker-summary.v1.json b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r2-checker/checker-summary.v1.json new file mode 100644 index 00000000..f222152e --- /dev/null +++ b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r2-checker/checker-summary.v1.json @@ -0,0 +1,109 @@ +{ + "schema_version": 1, + "slice": "DB-EMBEDDING-EVIDENCE-TRANSPORT-R2", + "role": "independent-checker", + "generated_at": "2026-07-10T14:42:22.0608356Z", + "status": "DONE_WITH_CONCERNS", + "verdict": "REVISE", + "readiness": "NOT_READY", + "target": "db2cf891dd9c6315fd17220ffe2d02302bea8844", + "target_tree": "6a450d3f0b83ce2afd95910da1516411a2134514", + "base": "580b0cd0ff38bb55a5195a8004e60234a824b7a8", + "accepted_product_source": "38d6a4fb7ff5f5ae3b6c0066c0a1b806421137df", + "checker_branch": "review/prc-db-embedding-evidence-r2-checker", + "checker_worktree": "D:/Dev/engram/.agent/worktrees/db-embedding-evidence-r2-checker", + "checker_head": null, + "checker_head_reason": "reported after the evidence-only commit to avoid self-reference", + "target_contract": { + "parent_exact": true, + "base_to_target_commits": 1, + "changed_paths": 9, + "changed_paths_outside_agent": 0, + "product_source_test_delta_vs_source": 0, + "product_source_test_delta_vs_base": 0 + }, + "findings": [ + { + "id": "ETR2-C001", + "severity": "HIGH", + "blocking": true, + "class": "false-pass-exact-source-set", + "evidence": [ + "six synchronized entries: exit 0, PASS 6/6", + "go.mod substitution at cardinality seven: exit 0, PASS 7/7" + ] + }, + { + "id": "ETR2-C002", + "severity": "HIGH", + "blocking": true, + "class": "false-pass-source-commit-rebind", + "evidence": "alternate ancestor 580b0cd0: exit 0, PASS 7/7" + }, + { + "id": "ETR2-C003", + "severity": "HIGH", + "blocking": true, + "class": "raw-path-access-after-validation-error", + "evidence": "source modes use raw entry.path at verify-manifest.cjs:549-553" + }, + { + "id": "ETR2-C004", + "severity": "MEDIUM", + "blocking": false, + "class": "coverage-evidence-drift", + "evidence": "two fresh runs 89.10 line / 66.50 branch versus committed 88.89 / 65.33" + } + ], + "positive_rails": { + "windows_raw_git_checkout_lf": "0/7,7/7,7/7", + "windows_artifacts": "5/5", + "windows_adversarial": "18/18", + "fresh_lf_raw_git_checkout_lf": "7/7,7/7,7/7", + "fresh_lf_artifacts": "5/5", + "fresh_lf_adversarial": "18/18", + "red_base": "exit 1; pass 1; fail 17", + "prove_it_validate_contract_schema": "exit 1; fail 18", + "prove_it_verify_artifact_files": "exit 1; pass 9; fail 9", + "prove_it_post_restore": "exit 0; pass 18; byte-identical", + "outer_artifact_legacy_checksums": "9/9,5/5,7/7", + "checksum_self_reference": "excluded", + "node_syntax": "PASS", + "git_diff_check": "PASS" + }, + "fresh_coverage": { + "runs": 2, + "node_version": "v24.2.0", + "all_files_line_percent": 89.10, + "all_files_branch_percent": 66.50, + "verifier_line_percent": 84.46, + "verifier_branch_percent": 50.38, + "functions_percent": 100.0, + "committed_all_files_line_percent": 88.89, + "committed_all_files_branch_percent": 65.33 + }, + "extra_behavioral_edges": { + "total": 8, + "expected_outcomes": 5, + "false_passes": 3, + "content_duplicate_rejected": true, + "real_checkout_bare_cr_rejected": true, + "artifact_representation_drift_rejected": true, + "real_artifact_bare_cr_rejected": true + }, + "residue": { + "temporary_worktree_paths": 0, + "temporary_worktree_registrations": 0, + "checker_node_processes": 0, + "matching_databases": 0, + "matching_postgres_sessions": 0, + "shared_postgres_container_running": true + }, + "evidence": { + "target_audit": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r2-checker/target-audit.json", + "checksum_audit": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r2-checker/checksum-audit.json", + "edge_mutations": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r2-checker/runs/checker-edge-mutations.json", + "runs": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r2-checker/runs/" + }, + "next_gate": "maker revision then fresh independent checker" +} diff --git a/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r2-checker/checksum-audit.json b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r2-checker/checksum-audit.json new file mode 100644 index 00000000..ec280400 --- /dev/null +++ b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r2-checker/checksum-audit.json @@ -0,0 +1,330 @@ +{ + "schema_version": 1, + "target": "db2cf891dd9c6315fd17220ffe2d02302bea8844", + "source_commit": "38d6a4fb7ff5f5ae3b6c0066c0a1b806421137df", + "status": "PASS", + "outer_manifest": { + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r2/SHA256SUMS.txt", + "commit": "db2cf891dd9c6315fd17220ffe2d02302bea8844", + "entry_count": 9, + "expected_count": 9, + "self_excluded": true, + "duplicates": [], + "errors": [], + "entries": [ + { + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/ARTIFACTS.sha256", + "expected_sha256": "a08508ce15f5ba89c60971536bd6ef0aa5127b102c52560bcda1c3a829f7fecb", + "git_blob_oid": "92585baa7da8767348794394d63e63ff35de37be", + "git_blob_sha256": "a08508ce15f5ba89c60971536bd6ef0aa5127b102c52560bcda1c3a829f7fecb", + "canonical_checkout_sha256": "a08508ce15f5ba89c60971536bd6ef0aa5127b102c52560bcda1c3a829f7fecb", + "raw_checkout_sha256": "556681fa01c803d0fd61e28cd95d55e451b729c25cfe264771755a7f38913e2e", + "crlf_pairs": 10, + "bare_cr": 0, + "match": true + }, + { + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/content-manifest.v1.json", + "expected_sha256": "e3e9fd6250d4ead502a01ec81bb7901ad658d74845184a10b6f153276a1bd12f", + "git_blob_oid": "3742010a65ac00015ff7b297c3c9b520052985d1", + "git_blob_sha256": "e3e9fd6250d4ead502a01ec81bb7901ad658d74845184a10b6f153276a1bd12f", + "canonical_checkout_sha256": "e3e9fd6250d4ead502a01ec81bb7901ad658d74845184a10b6f153276a1bd12f", + "raw_checkout_sha256": "d93b48f02204375ef50e4a936f7927cee02a3459a925cfd3395538c474901496", + "crlf_pairs": 60, + "bare_cr": 0, + "match": true + }, + { + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.cjs", + "expected_sha256": "4f46e0f020fd7aae39b327adac7a9070d744f66fa26124f652d25470fa409114", + "git_blob_oid": "9f8424f1ea8ed5accac11ff6f019efdad9573cf9", + "git_blob_sha256": "4f46e0f020fd7aae39b327adac7a9070d744f66fa26124f652d25470fa409114", + "canonical_checkout_sha256": "4f46e0f020fd7aae39b327adac7a9070d744f66fa26124f652d25470fa409114", + "raw_checkout_sha256": "3cac528efa0b61046c58b6dea6eeaa5d3a12de0e07dc607c27a55c0058280f42", + "crlf_pairs": 650, + "bare_cr": 0, + "match": true + }, + { + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.test.cjs", + "expected_sha256": "d0fc0a8b57a3dc1f31210a69ec0b85443995883c41ea8ba818e8d95837b315b3", + "git_blob_oid": "c9c08dd99095190cc316479eb04c28154fb1ffce", + "git_blob_sha256": "d0fc0a8b57a3dc1f31210a69ec0b85443995883c41ea8ba818e8d95837b315b3", + "canonical_checkout_sha256": "d0fc0a8b57a3dc1f31210a69ec0b85443995883c41ea8ba818e8d95837b315b3", + "raw_checkout_sha256": "65276da409abc83a4a5a2323d58bde38253f023989ae7d137dbe3a66b6f0513c", + "crlf_pairs": 277, + "bare_cr": 0, + "match": true + }, + { + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verification-observations.v1.json", + "expected_sha256": "d99f3499b2e5c371ababdffc84410e1dcc8b028373ae00483136ae0eb6bf509a", + "git_blob_oid": "c73fa547cb74c7b6d33a88f98bf5cd5f6805053f", + "git_blob_sha256": "d99f3499b2e5c371ababdffc84410e1dcc8b028373ae00483136ae0eb6bf509a", + "canonical_checkout_sha256": "d99f3499b2e5c371ababdffc84410e1dcc8b028373ae00483136ae0eb6bf509a", + "raw_checkout_sha256": "efbd1f5f4d28b061ea0c137c95ef94fd986a15a215635086c92cf75b636f4180", + "crlf_pairs": 157, + "bare_cr": 0, + "match": true + }, + { + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/maker-report.md", + "expected_sha256": "3b7f5ad0abcccd39f0d5ce9349fceb8cca4794e1bf537943e4b38ce629357dbb", + "git_blob_oid": "c827109915a379df03f943af58853bb3459d5866", + "git_blob_sha256": "3b7f5ad0abcccd39f0d5ce9349fceb8cca4794e1bf537943e4b38ce629357dbb", + "canonical_checkout_sha256": "3b7f5ad0abcccd39f0d5ce9349fceb8cca4794e1bf537943e4b38ce629357dbb", + "raw_checkout_sha256": "1634caaaf23da2c9f4a2aa542caf538154d160bde01b3f76cf2f3ceec4814d1e", + "crlf_pairs": 177, + "bare_cr": 0, + "match": true + }, + { + "path": ".agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R2.red.json", + "expected_sha256": "5a01028809f642d299891de75148170fa2ade1d2e3e949b86f45a5aa92423249", + "git_blob_oid": "8c8d439d0bcb448242a05bfef7b0175489f99305", + "git_blob_sha256": "5a01028809f642d299891de75148170fa2ade1d2e3e949b86f45a5aa92423249", + "canonical_checkout_sha256": "5a01028809f642d299891de75148170fa2ade1d2e3e949b86f45a5aa92423249", + "raw_checkout_sha256": "5b43e6bf93bbe63e55c758d4852e6acfc9a8ae2a5b21d6610c5eea2f85ae5e55", + "crlf_pairs": 9, + "bare_cr": 0, + "match": true + }, + { + "path": ".agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R2.tdd.json", + "expected_sha256": "ca517588d678f59b86b627a109bdbc0bd8fc1b49cdd5df4a605ec6cb57da206c", + "git_blob_oid": "73f3aa076a2572302cf7717923f35c663e705ba5", + "git_blob_sha256": "ca517588d678f59b86b627a109bdbc0bd8fc1b49cdd5df4a605ec6cb57da206c", + "canonical_checkout_sha256": "ca517588d678f59b86b627a109bdbc0bd8fc1b49cdd5df4a605ec6cb57da206c", + "raw_checkout_sha256": "2e60b51da392ae72517a3dc403b82d75c5d31cab68f6af94340c2ce90a7d52b6", + "crlf_pairs": 56, + "bare_cr": 0, + "match": true + }, + { + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r2/maker-summary.v1.json", + "expected_sha256": "5e6271fe6eaa8361247221263ac640af426e25be01c88f558e2d85a84773fd65", + "git_blob_oid": "1e2b57092c1f6129d708f0dd1c37da79307f58cd", + "git_blob_sha256": "5e6271fe6eaa8361247221263ac640af426e25be01c88f558e2d85a84773fd65", + "canonical_checkout_sha256": "5e6271fe6eaa8361247221263ac640af426e25be01c88f558e2d85a84773fd65", + "raw_checkout_sha256": "06167411f9dc0c77525cae52554ebd032d7283b317997cc3eb9263c057aeef5e", + "crlf_pairs": 46, + "bare_cr": 0, + "match": true + } + ] + }, + "outer_manifest_self": { + "git_blob_oid": "6fbef4d23f5a647952d694549d3d3f55cf6ab034", + "sha256": "a723782459ee52b40db3c3105a138347a62354b48f1ec7fab4c3378a58617780", + "self_entry_excluded": true + }, + "artifact_manifest": { + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/ARTIFACTS.sha256", + "commit": "db2cf891dd9c6315fd17220ffe2d02302bea8844", + "entry_count": 5, + "expected_count": 5, + "self_excluded": true, + "duplicates": [], + "errors": [], + "entries": [ + { + "path": ".agent/reports/evidence/production-ready/db-embedding-stats/SHA256SUMS.txt", + "expected_sha256": "5d932e6acf104bf9eff291409b50961007512e09e91d78401257a018fcb780f4", + "git_blob_oid": "0ab8f31ebd44aac4cd2884e6de7531d0e578bd83", + "git_blob_sha256": "5d932e6acf104bf9eff291409b50961007512e09e91d78401257a018fcb780f4", + "canonical_checkout_sha256": "5d932e6acf104bf9eff291409b50961007512e09e91d78401257a018fcb780f4", + "raw_checkout_sha256": "129d0a37b20658f0d53e00afc76d5f9c2b0aeaaa035a1a683fe6cbc9f3051956", + "crlf_pairs": 14, + "bare_cr": 0, + "match": true + }, + { + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/content-manifest.v1.json", + "expected_sha256": "e3e9fd6250d4ead502a01ec81bb7901ad658d74845184a10b6f153276a1bd12f", + "git_blob_oid": "3742010a65ac00015ff7b297c3c9b520052985d1", + "git_blob_sha256": "e3e9fd6250d4ead502a01ec81bb7901ad658d74845184a10b6f153276a1bd12f", + "canonical_checkout_sha256": "e3e9fd6250d4ead502a01ec81bb7901ad658d74845184a10b6f153276a1bd12f", + "raw_checkout_sha256": "d93b48f02204375ef50e4a936f7927cee02a3459a925cfd3395538c474901496", + "crlf_pairs": 60, + "bare_cr": 0, + "match": true + }, + { + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.cjs", + "expected_sha256": "4f46e0f020fd7aae39b327adac7a9070d744f66fa26124f652d25470fa409114", + "git_blob_oid": "9f8424f1ea8ed5accac11ff6f019efdad9573cf9", + "git_blob_sha256": "4f46e0f020fd7aae39b327adac7a9070d744f66fa26124f652d25470fa409114", + "canonical_checkout_sha256": "4f46e0f020fd7aae39b327adac7a9070d744f66fa26124f652d25470fa409114", + "raw_checkout_sha256": "3cac528efa0b61046c58b6dea6eeaa5d3a12de0e07dc607c27a55c0058280f42", + "crlf_pairs": 650, + "bare_cr": 0, + "match": true + }, + { + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verification-observations.v1.json", + "expected_sha256": "d99f3499b2e5c371ababdffc84410e1dcc8b028373ae00483136ae0eb6bf509a", + "git_blob_oid": "c73fa547cb74c7b6d33a88f98bf5cd5f6805053f", + "git_blob_sha256": "d99f3499b2e5c371ababdffc84410e1dcc8b028373ae00483136ae0eb6bf509a", + "canonical_checkout_sha256": "d99f3499b2e5c371ababdffc84410e1dcc8b028373ae00483136ae0eb6bf509a", + "raw_checkout_sha256": "efbd1f5f4d28b061ea0c137c95ef94fd986a15a215635086c92cf75b636f4180", + "crlf_pairs": 157, + "bare_cr": 0, + "match": true + }, + { + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/maker-report.md", + "expected_sha256": "3b7f5ad0abcccd39f0d5ce9349fceb8cca4794e1bf537943e4b38ce629357dbb", + "git_blob_oid": "c827109915a379df03f943af58853bb3459d5866", + "git_blob_sha256": "3b7f5ad0abcccd39f0d5ce9349fceb8cca4794e1bf537943e4b38ce629357dbb", + "canonical_checkout_sha256": "3b7f5ad0abcccd39f0d5ce9349fceb8cca4794e1bf537943e4b38ce629357dbb", + "raw_checkout_sha256": "1634caaaf23da2c9f4a2aa542caf538154d160bde01b3f76cf2f3ceec4814d1e", + "crlf_pairs": 177, + "bare_cr": 0, + "match": true + } + ] + }, + "legacy_manifest": { + "path": ".agent/reports/evidence/production-ready/db-embedding-stats/SHA256SUMS.txt", + "commit": "38d6a4fb7ff5f5ae3b6c0066c0a1b806421137df", + "entry_count": 7, + "expected_count": 7, + "self_excluded": true, + "duplicates": [], + "errors": [], + "entries": [ + { + "path": "internal/embedding/store.go", + "expected_sha256": "7bfb06dfc0dda792147d5e2df9d2fe68b59edaac55d2396dece1b8a8a09eee5f", + "git_blob_oid": "1abaee96b07583f9fd824ed03c40b043c490b567", + "git_blob_sha256": "7bfb06dfc0dda792147d5e2df9d2fe68b59edaac55d2396dece1b8a8a09eee5f", + "canonical_checkout_sha256": "7bfb06dfc0dda792147d5e2df9d2fe68b59edaac55d2396dece1b8a8a09eee5f", + "raw_checkout_sha256": "fa0086be3074d0fa7bbf21986382fdc4b3fd82a00215939d445bd2624319017d", + "crlf_pairs": 287, + "bare_cr": 0, + "match": true + }, + { + "path": "internal/embedding/store_stats_test.go", + "expected_sha256": "a35a234eb167c58bf201afc50954e43926a69ba2294536f2d0fabf4e015b12a4", + "git_blob_oid": "d381643deadbb42e8a9a07fc9375a6cdfedbdccc", + "git_blob_sha256": "a35a234eb167c58bf201afc50954e43926a69ba2294536f2d0fabf4e015b12a4", + "canonical_checkout_sha256": "a35a234eb167c58bf201afc50954e43926a69ba2294536f2d0fabf4e015b12a4", + "raw_checkout_sha256": "56a351c380232cb8ec11826c2b41e7da3e9495999278aacbfdaee8d9cab267c9", + "crlf_pairs": 268, + "bare_cr": 0, + "match": true + }, + { + "path": ".agent/specs/db-embedding-stats/evidence/DB-EMBEDDING-STATS.red.json", + "expected_sha256": "12adb14f118dbf821ee1eabb569f6bbcae831875d3b8a7fb5928c18a4b323a56", + "git_blob_oid": "48db3052d1ff53fa7cd5f61d0371dd1be0e780bd", + "git_blob_sha256": "12adb14f118dbf821ee1eabb569f6bbcae831875d3b8a7fb5928c18a4b323a56", + "canonical_checkout_sha256": "12adb14f118dbf821ee1eabb569f6bbcae831875d3b8a7fb5928c18a4b323a56", + "raw_checkout_sha256": "ee6931d853b7b7daca7ce3f1d9e6b2b2964d50264cb824a417b74f4ba56482d0", + "crlf_pairs": 8, + "bare_cr": 0, + "match": true + }, + { + "path": ".agent/specs/db-embedding-stats/evidence/DB-EMBEDDING-STATS.tdd.json", + "expected_sha256": "56022d4fb07816ca0ed3f841770605dc212a4cb39fcb9682c75a753f73c7776b", + "git_blob_oid": "4d94a57de67a41b718073e403cd894843dcffa0d", + "git_blob_sha256": "56022d4fb07816ca0ed3f841770605dc212a4cb39fcb9682c75a753f73c7776b", + "canonical_checkout_sha256": "56022d4fb07816ca0ed3f841770605dc212a4cb39fcb9682c75a753f73c7776b", + "raw_checkout_sha256": "944392172735231a45141fbc4ccfa0e02f44c0c4b1ac4ed78923fde4fb032c63", + "crlf_pairs": 35, + "bare_cr": 0, + "match": true + }, + { + "path": ".agent/specs/db-embedding-stats/evidence/coverage.out", + "expected_sha256": "edd5fb10fe7a7d7aaddd2bfd96ea220fe42f94561d386712951eb70eabffb735", + "git_blob_oid": "457c38e08408c534032a7a962969c762fa1fad8c", + "git_blob_sha256": "edd5fb10fe7a7d7aaddd2bfd96ea220fe42f94561d386712951eb70eabffb735", + "canonical_checkout_sha256": "edd5fb10fe7a7d7aaddd2bfd96ea220fe42f94561d386712951eb70eabffb735", + "raw_checkout_sha256": "e046f339ff8fdeae86e7dc435bb0eb2832837199f68f08721206e19c06e9533e", + "crlf_pairs": 240, + "bare_cr": 0, + "match": true + }, + { + "path": ".agent/reports/2026-07-10-db-embedding-stats-maker.md", + "expected_sha256": "efad310616efa0878628e6af946f06349b16f0c7817432cbb3614ff5c74de025", + "git_blob_oid": "8a3d45057e7c869e3eec8925a25a341158209f01", + "git_blob_sha256": "efad310616efa0878628e6af946f06349b16f0c7817432cbb3614ff5c74de025", + "canonical_checkout_sha256": "efad310616efa0878628e6af946f06349b16f0c7817432cbb3614ff5c74de025", + "raw_checkout_sha256": "abf5a30d77153dd2d822d151a03ee03eb3160a27d6649dcd79f99c4280276be0", + "crlf_pairs": 52, + "bare_cr": 0, + "match": true + }, + { + "path": ".agent/reports/evidence/production-ready/db-embedding-stats/DB-EMBEDDING-STATS.final.json", + "expected_sha256": "a82aa7d911935e1327893faa266d49df97018a182fbe8498dc3e4976c59d9ada", + "git_blob_oid": "1fa3cb6c4dc1fba849f50f33a42a3f2d1f2b23fd", + "git_blob_sha256": "a82aa7d911935e1327893faa266d49df97018a182fbe8498dc3e4976c59d9ada", + "canonical_checkout_sha256": "a82aa7d911935e1327893faa266d49df97018a182fbe8498dc3e4976c59d9ada", + "raw_checkout_sha256": "c2e54992c982edb42510d8f4374fc551b4985bf25bd1543e93b9b881f40614ae", + "crlf_pairs": 42, + "bare_cr": 0, + "match": true + } + ] + }, + "contract": { + "entry_count": 7, + "errors": [], + "entries": [ + { + "path": "internal/embedding/store.go", + "git_blob_oid": "1abaee96b07583f9fd824ed03c40b043c490b567", + "byte_length": 10934, + "sha256": "7bfb06dfc0dda792147d5e2df9d2fe68b59edaac55d2396dece1b8a8a09eee5f", + "match": true + }, + { + "path": "internal/embedding/store_stats_test.go", + "git_blob_oid": "d381643deadbb42e8a9a07fc9375a6cdfedbdccc", + "byte_length": 9189, + "sha256": "a35a234eb167c58bf201afc50954e43926a69ba2294536f2d0fabf4e015b12a4", + "match": true + }, + { + "path": ".agent/specs/db-embedding-stats/evidence/DB-EMBEDDING-STATS.red.json", + "git_blob_oid": "48db3052d1ff53fa7cd5f61d0371dd1be0e780bd", + "byte_length": 577, + "sha256": "12adb14f118dbf821ee1eabb569f6bbcae831875d3b8a7fb5928c18a4b323a56", + "match": true + }, + { + "path": ".agent/specs/db-embedding-stats/evidence/DB-EMBEDDING-STATS.tdd.json", + "git_blob_oid": "4d94a57de67a41b718073e403cd894843dcffa0d", + "byte_length": 1429, + "sha256": "56022d4fb07816ca0ed3f841770605dc212a4cb39fcb9682c75a753f73c7776b", + "match": true + }, + { + "path": ".agent/specs/db-embedding-stats/evidence/coverage.out", + "git_blob_oid": "457c38e08408c534032a7a962969c762fa1fad8c", + "byte_length": 17413, + "sha256": "edd5fb10fe7a7d7aaddd2bfd96ea220fe42f94561d386712951eb70eabffb735", + "match": true + }, + { + "path": ".agent/reports/2026-07-10-db-embedding-stats-maker.md", + "git_blob_oid": "8a3d45057e7c869e3eec8925a25a341158209f01", + "byte_length": 3054, + "sha256": "efad310616efa0878628e6af946f06349b16f0c7817432cbb3614ff5c74de025", + "match": true + }, + { + "path": ".agent/reports/evidence/production-ready/db-embedding-stats/DB-EMBEDDING-STATS.final.json", + "git_blob_oid": "1fa3cb6c4dc1fba849f50f33a42a3f2d1f2b23fd", + "byte_length": 1592, + "sha256": "a82aa7d911935e1327893faa266d49df97018a182fbe8498dc3e4976c59d9ada", + "match": true + } + ] + } +} diff --git a/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r2-checker/runs/checker-edge-mutations.json b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r2-checker/runs/checker-edge-mutations.json new file mode 100644 index 00000000..8a21fb26 --- /dev/null +++ b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r2-checker/runs/checker-edge-mutations.json @@ -0,0 +1,607 @@ +{ + "schema_version": 1, + "checker": "DB-EMBEDDING-EVIDENCE-TRANSPORT-R2", + "target": "db2cf891dd9c6315fd17220ffe2d02302bea8844", + "source_commit": "38d6a4fb7ff5f5ae3b6c0066c0a1b806421137df", + "alternate_ancestor": "580b0cd0ff38bb55a5195a8004e60234a824b7a8", + "status": "FAIL", + "total": 8, + "passed": 5, + "failed": 3, + "false_pass_cases": [ + "content_manifest_rejects_six_of_seven_when_legacy_agrees", + "content_manifest_rejects_wrong_path_with_same_cardinality", + "representation_rejects_alternate_ancestor_source_commit" + ], + "worktree_residue": "", + "cases": [ + { + "name": "baseline_git_object", + "expectation": "accept", + "pass": true, + "exit_code": 0, + "status": "PASS", + "total": 7, + "matched": 7, + "structural_errors": [], + "entries": [ + { + "path": "internal/embedding/store.go", + "git_blob_oid": "1abaee96b07583f9fd824ed03c40b043c490b567", + "git_object_match": true, + "raw_checkout_match": false, + "checkout_lf_match": true, + "checkout_eol": "crlf", + "crlf_pairs": 287, + "bare_carriage_returns": 0 + }, + { + "path": "internal/embedding/store_stats_test.go", + "git_blob_oid": "d381643deadbb42e8a9a07fc9375a6cdfedbdccc", + "git_object_match": true, + "raw_checkout_match": false, + "checkout_lf_match": true, + "checkout_eol": "crlf", + "crlf_pairs": 268, + "bare_carriage_returns": 0 + }, + { + "path": ".agent/specs/db-embedding-stats/evidence/DB-EMBEDDING-STATS.red.json", + "git_blob_oid": "48db3052d1ff53fa7cd5f61d0371dd1be0e780bd", + "git_object_match": true, + "raw_checkout_match": false, + "checkout_lf_match": true, + "checkout_eol": "crlf", + "crlf_pairs": 8, + "bare_carriage_returns": 0 + }, + { + "path": ".agent/specs/db-embedding-stats/evidence/DB-EMBEDDING-STATS.tdd.json", + "git_blob_oid": "4d94a57de67a41b718073e403cd894843dcffa0d", + "git_object_match": true, + "raw_checkout_match": false, + "checkout_lf_match": true, + "checkout_eol": "crlf", + "crlf_pairs": 35, + "bare_carriage_returns": 0 + }, + { + "path": ".agent/specs/db-embedding-stats/evidence/coverage.out", + "git_blob_oid": "457c38e08408c534032a7a962969c762fa1fad8c", + "git_object_match": true, + "raw_checkout_match": false, + "checkout_lf_match": true, + "checkout_eol": "crlf", + "crlf_pairs": 240, + "bare_carriage_returns": 0 + }, + { + "path": ".agent/reports/2026-07-10-db-embedding-stats-maker.md", + "git_blob_oid": "8a3d45057e7c869e3eec8925a25a341158209f01", + "git_object_match": true, + "raw_checkout_match": false, + "checkout_lf_match": true, + "checkout_eol": "crlf", + "crlf_pairs": 52, + "bare_carriage_returns": 0 + }, + { + "path": ".agent/reports/evidence/production-ready/db-embedding-stats/DB-EMBEDDING-STATS.final.json", + "git_blob_oid": "1fa3cb6c4dc1fba849f50f33a42a3f2d1f2b23fd", + "git_object_match": true, + "raw_checkout_match": false, + "checkout_lf_match": true, + "checkout_eol": "crlf", + "crlf_pairs": 42, + "bare_carriage_returns": 0 + } + ], + "stderr": "" + }, + { + "name": "content_manifest_rejects_six_of_seven_when_legacy_agrees", + "expectation": "reject", + "pass": false, + "exit_code": 0, + "status": "PASS", + "total": 6, + "matched": 6, + "structural_errors": [], + "entries": [ + { + "path": "internal/embedding/store.go", + "git_blob_oid": "1abaee96b07583f9fd824ed03c40b043c490b567", + "git_object_match": true, + "raw_checkout_match": false, + "checkout_lf_match": true, + "checkout_eol": "crlf", + "crlf_pairs": 287, + "bare_carriage_returns": 0 + }, + { + "path": "internal/embedding/store_stats_test.go", + "git_blob_oid": "d381643deadbb42e8a9a07fc9375a6cdfedbdccc", + "git_object_match": true, + "raw_checkout_match": false, + "checkout_lf_match": true, + "checkout_eol": "crlf", + "crlf_pairs": 268, + "bare_carriage_returns": 0 + }, + { + "path": ".agent/specs/db-embedding-stats/evidence/DB-EMBEDDING-STATS.red.json", + "git_blob_oid": "48db3052d1ff53fa7cd5f61d0371dd1be0e780bd", + "git_object_match": true, + "raw_checkout_match": false, + "checkout_lf_match": true, + "checkout_eol": "crlf", + "crlf_pairs": 8, + "bare_carriage_returns": 0 + }, + { + "path": ".agent/specs/db-embedding-stats/evidence/DB-EMBEDDING-STATS.tdd.json", + "git_blob_oid": "4d94a57de67a41b718073e403cd894843dcffa0d", + "git_object_match": true, + "raw_checkout_match": false, + "checkout_lf_match": true, + "checkout_eol": "crlf", + "crlf_pairs": 35, + "bare_carriage_returns": 0 + }, + { + "path": ".agent/specs/db-embedding-stats/evidence/coverage.out", + "git_blob_oid": "457c38e08408c534032a7a962969c762fa1fad8c", + "git_object_match": true, + "raw_checkout_match": false, + "checkout_lf_match": true, + "checkout_eol": "crlf", + "crlf_pairs": 240, + "bare_carriage_returns": 0 + }, + { + "path": ".agent/reports/2026-07-10-db-embedding-stats-maker.md", + "git_blob_oid": "8a3d45057e7c869e3eec8925a25a341158209f01", + "git_object_match": true, + "raw_checkout_match": false, + "checkout_lf_match": true, + "checkout_eol": "crlf", + "crlf_pairs": 52, + "bare_carriage_returns": 0 + } + ], + "stderr": "" + }, + { + "name": "content_manifest_rejects_wrong_path_with_same_cardinality", + "expectation": "reject", + "pass": false, + "exit_code": 0, + "status": "PASS", + "total": 7, + "matched": 7, + "structural_errors": [], + "entries": [ + { + "path": "internal/embedding/store.go", + "git_blob_oid": "1abaee96b07583f9fd824ed03c40b043c490b567", + "git_object_match": true, + "raw_checkout_match": false, + "checkout_lf_match": true, + "checkout_eol": "crlf", + "crlf_pairs": 287, + "bare_carriage_returns": 0 + }, + { + "path": "internal/embedding/store_stats_test.go", + "git_blob_oid": "d381643deadbb42e8a9a07fc9375a6cdfedbdccc", + "git_object_match": true, + "raw_checkout_match": false, + "checkout_lf_match": true, + "checkout_eol": "crlf", + "crlf_pairs": 268, + "bare_carriage_returns": 0 + }, + { + "path": ".agent/specs/db-embedding-stats/evidence/DB-EMBEDDING-STATS.red.json", + "git_blob_oid": "48db3052d1ff53fa7cd5f61d0371dd1be0e780bd", + "git_object_match": true, + "raw_checkout_match": false, + "checkout_lf_match": true, + "checkout_eol": "crlf", + "crlf_pairs": 8, + "bare_carriage_returns": 0 + }, + { + "path": ".agent/specs/db-embedding-stats/evidence/DB-EMBEDDING-STATS.tdd.json", + "git_blob_oid": "4d94a57de67a41b718073e403cd894843dcffa0d", + "git_object_match": true, + "raw_checkout_match": false, + "checkout_lf_match": true, + "checkout_eol": "crlf", + "crlf_pairs": 35, + "bare_carriage_returns": 0 + }, + { + "path": ".agent/specs/db-embedding-stats/evidence/coverage.out", + "git_blob_oid": "457c38e08408c534032a7a962969c762fa1fad8c", + "git_object_match": true, + "raw_checkout_match": false, + "checkout_lf_match": true, + "checkout_eol": "crlf", + "crlf_pairs": 240, + "bare_carriage_returns": 0 + }, + { + "path": ".agent/reports/2026-07-10-db-embedding-stats-maker.md", + "git_blob_oid": "8a3d45057e7c869e3eec8925a25a341158209f01", + "git_object_match": true, + "raw_checkout_match": false, + "checkout_lf_match": true, + "checkout_eol": "crlf", + "crlf_pairs": 52, + "bare_carriage_returns": 0 + }, + { + "path": "go.mod", + "git_blob_oid": "84086897cde6f9205ffd9dcab48fc62a9a2a7af5", + "git_object_match": true, + "raw_checkout_match": false, + "checkout_lf_match": true, + "checkout_eol": "crlf", + "crlf_pairs": 72, + "bare_carriage_returns": 0 + } + ], + "stderr": "" + }, + { + "name": "representation_rejects_alternate_ancestor_source_commit", + "expectation": "reject", + "pass": false, + "exit_code": 0, + "status": "PASS", + "total": 7, + "matched": 7, + "structural_errors": [], + "entries": [ + { + "path": "internal/embedding/store.go", + "git_blob_oid": "1abaee96b07583f9fd824ed03c40b043c490b567", + "git_object_match": true, + "raw_checkout_match": false, + "checkout_lf_match": true, + "checkout_eol": "crlf", + "crlf_pairs": 287, + "bare_carriage_returns": 0 + }, + { + "path": "internal/embedding/store_stats_test.go", + "git_blob_oid": "d381643deadbb42e8a9a07fc9375a6cdfedbdccc", + "git_object_match": true, + "raw_checkout_match": false, + "checkout_lf_match": true, + "checkout_eol": "crlf", + "crlf_pairs": 268, + "bare_carriage_returns": 0 + }, + { + "path": ".agent/specs/db-embedding-stats/evidence/DB-EMBEDDING-STATS.red.json", + "git_blob_oid": "48db3052d1ff53fa7cd5f61d0371dd1be0e780bd", + "git_object_match": true, + "raw_checkout_match": false, + "checkout_lf_match": true, + "checkout_eol": "crlf", + "crlf_pairs": 8, + "bare_carriage_returns": 0 + }, + { + "path": ".agent/specs/db-embedding-stats/evidence/DB-EMBEDDING-STATS.tdd.json", + "git_blob_oid": "4d94a57de67a41b718073e403cd894843dcffa0d", + "git_object_match": true, + "raw_checkout_match": false, + "checkout_lf_match": true, + "checkout_eol": "crlf", + "crlf_pairs": 35, + "bare_carriage_returns": 0 + }, + { + "path": ".agent/specs/db-embedding-stats/evidence/coverage.out", + "git_blob_oid": "457c38e08408c534032a7a962969c762fa1fad8c", + "git_object_match": true, + "raw_checkout_match": false, + "checkout_lf_match": true, + "checkout_eol": "crlf", + "crlf_pairs": 240, + "bare_carriage_returns": 0 + }, + { + "path": ".agent/reports/2026-07-10-db-embedding-stats-maker.md", + "git_blob_oid": "8a3d45057e7c869e3eec8925a25a341158209f01", + "git_object_match": true, + "raw_checkout_match": false, + "checkout_lf_match": true, + "checkout_eol": "crlf", + "crlf_pairs": 52, + "bare_carriage_returns": 0 + }, + { + "path": ".agent/reports/evidence/production-ready/db-embedding-stats/DB-EMBEDDING-STATS.final.json", + "git_blob_oid": "1fa3cb6c4dc1fba849f50f33a42a3f2d1f2b23fd", + "git_object_match": true, + "raw_checkout_match": false, + "checkout_lf_match": true, + "checkout_eol": "crlf", + "crlf_pairs": 42, + "bare_carriage_returns": 0 + } + ], + "stderr": "" + }, + { + "name": "content_manifest_rejects_duplicate_canonical_path", + "expectation": "reject", + "pass": true, + "exit_code": 1, + "status": "FAIL", + "total": 7, + "matched": 7, + "structural_errors": [ + "contract paths must be unique canonical paths" + ], + "entries": [ + { + "path": "internal/embedding/store.go", + "git_blob_oid": "1abaee96b07583f9fd824ed03c40b043c490b567", + "git_object_match": true, + "raw_checkout_match": false, + "checkout_lf_match": true, + "checkout_eol": "crlf", + "crlf_pairs": 287, + "bare_carriage_returns": 0 + }, + { + "path": "internal/embedding/store.go", + "git_blob_oid": "1abaee96b07583f9fd824ed03c40b043c490b567", + "git_object_match": true, + "raw_checkout_match": false, + "checkout_lf_match": true, + "checkout_eol": "crlf", + "crlf_pairs": 287, + "bare_carriage_returns": 0 + }, + { + "path": ".agent/specs/db-embedding-stats/evidence/DB-EMBEDDING-STATS.red.json", + "git_blob_oid": "48db3052d1ff53fa7cd5f61d0371dd1be0e780bd", + "git_object_match": true, + "raw_checkout_match": false, + "checkout_lf_match": true, + "checkout_eol": "crlf", + "crlf_pairs": 8, + "bare_carriage_returns": 0 + }, + { + "path": ".agent/specs/db-embedding-stats/evidence/DB-EMBEDDING-STATS.tdd.json", + "git_blob_oid": "4d94a57de67a41b718073e403cd894843dcffa0d", + "git_object_match": true, + "raw_checkout_match": false, + "checkout_lf_match": true, + "checkout_eol": "crlf", + "crlf_pairs": 35, + "bare_carriage_returns": 0 + }, + { + "path": ".agent/specs/db-embedding-stats/evidence/coverage.out", + "git_blob_oid": "457c38e08408c534032a7a962969c762fa1fad8c", + "git_object_match": true, + "raw_checkout_match": false, + "checkout_lf_match": true, + "checkout_eol": "crlf", + "crlf_pairs": 240, + "bare_carriage_returns": 0 + }, + { + "path": ".agent/reports/2026-07-10-db-embedding-stats-maker.md", + "git_blob_oid": "8a3d45057e7c869e3eec8925a25a341158209f01", + "git_object_match": true, + "raw_checkout_match": false, + "checkout_lf_match": true, + "checkout_eol": "crlf", + "crlf_pairs": 52, + "bare_carriage_returns": 0 + }, + { + "path": ".agent/reports/evidence/production-ready/db-embedding-stats/DB-EMBEDDING-STATS.final.json", + "git_blob_oid": "1fa3cb6c4dc1fba849f50f33a42a3f2d1f2b23fd", + "git_object_match": true, + "raw_checkout_match": false, + "checkout_lf_match": true, + "checkout_eol": "crlf", + "crlf_pairs": 42, + "bare_carriage_returns": 0 + } + ], + "stderr": "" + }, + { + "name": "checkout_lf_rejects_real_bare_cr_byte", + "expectation": "reject", + "pass": true, + "exit_code": 1, + "status": "FAIL", + "total": 7, + "matched": 6, + "structural_errors": [], + "entries": [ + { + "path": "internal/embedding/store.go", + "git_blob_oid": "1abaee96b07583f9fd824ed03c40b043c490b567", + "git_object_match": true, + "raw_checkout_match": false, + "checkout_lf_match": false, + "checkout_eol": "bare-cr-present", + "crlf_pairs": 287, + "bare_carriage_returns": 1 + }, + { + "path": "internal/embedding/store_stats_test.go", + "git_blob_oid": "d381643deadbb42e8a9a07fc9375a6cdfedbdccc", + "git_object_match": true, + "raw_checkout_match": false, + "checkout_lf_match": true, + "checkout_eol": "crlf", + "crlf_pairs": 268, + "bare_carriage_returns": 0 + }, + { + "path": ".agent/specs/db-embedding-stats/evidence/DB-EMBEDDING-STATS.red.json", + "git_blob_oid": "48db3052d1ff53fa7cd5f61d0371dd1be0e780bd", + "git_object_match": true, + "raw_checkout_match": false, + "checkout_lf_match": true, + "checkout_eol": "crlf", + "crlf_pairs": 8, + "bare_carriage_returns": 0 + }, + { + "path": ".agent/specs/db-embedding-stats/evidence/DB-EMBEDDING-STATS.tdd.json", + "git_blob_oid": "4d94a57de67a41b718073e403cd894843dcffa0d", + "git_object_match": true, + "raw_checkout_match": false, + "checkout_lf_match": true, + "checkout_eol": "crlf", + "crlf_pairs": 35, + "bare_carriage_returns": 0 + }, + { + "path": ".agent/specs/db-embedding-stats/evidence/coverage.out", + "git_blob_oid": "457c38e08408c534032a7a962969c762fa1fad8c", + "git_object_match": true, + "raw_checkout_match": false, + "checkout_lf_match": true, + "checkout_eol": "crlf", + "crlf_pairs": 240, + "bare_carriage_returns": 0 + }, + { + "path": ".agent/reports/2026-07-10-db-embedding-stats-maker.md", + "git_blob_oid": "8a3d45057e7c869e3eec8925a25a341158209f01", + "git_object_match": true, + "raw_checkout_match": false, + "checkout_lf_match": true, + "checkout_eol": "crlf", + "crlf_pairs": 52, + "bare_carriage_returns": 0 + }, + { + "path": ".agent/reports/evidence/production-ready/db-embedding-stats/DB-EMBEDDING-STATS.final.json", + "git_blob_oid": "1fa3cb6c4dc1fba849f50f33a42a3f2d1f2b23fd", + "git_object_match": true, + "raw_checkout_match": false, + "checkout_lf_match": true, + "checkout_eol": "crlf", + "crlf_pairs": 42, + "bare_carriage_returns": 0 + } + ], + "stderr": "" + }, + { + "name": "artifact_manifest_rejects_representation_drift", + "expectation": "reject", + "pass": true, + "exit_code": 1, + "status": "FAIL", + "total": 5, + "matched": 5, + "structural_errors": [ + "artifact representation must be canonical-lf-files" + ], + "entries": [ + { + "path": ".agent/reports/evidence/production-ready/db-embedding-stats/SHA256SUMS.txt", + "normalized_path": ".agent/reports/evidence/production-ready/db-embedding-stats/SHA256SUMS.txt", + "match": true, + "checkout_eol": "crlf", + "bare_carriage_returns": 0 + }, + { + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/content-manifest.v1.json", + "normalized_path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/content-manifest.v1.json", + "match": true, + "checkout_eol": "crlf", + "bare_carriage_returns": 0 + }, + { + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.cjs", + "normalized_path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.cjs", + "match": true, + "checkout_eol": "crlf", + "bare_carriage_returns": 0 + }, + { + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verification-observations.v1.json", + "normalized_path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verification-observations.v1.json", + "match": true, + "checkout_eol": "crlf", + "bare_carriage_returns": 0 + }, + { + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/maker-report.md", + "normalized_path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/maker-report.md", + "match": true, + "checkout_eol": "crlf", + "bare_carriage_returns": 0 + } + ], + "stderr": "" + }, + { + "name": "artifact_files_reject_real_bare_cr_byte", + "expectation": "reject", + "pass": true, + "exit_code": 1, + "status": "FAIL", + "total": 5, + "matched": 4, + "structural_errors": [], + "entries": [ + { + "path": ".agent/reports/evidence/production-ready/db-embedding-stats/SHA256SUMS.txt", + "normalized_path": ".agent/reports/evidence/production-ready/db-embedding-stats/SHA256SUMS.txt", + "match": true, + "checkout_eol": "crlf", + "bare_carriage_returns": 0 + }, + { + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/content-manifest.v1.json", + "normalized_path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/content-manifest.v1.json", + "match": true, + "checkout_eol": "crlf", + "bare_carriage_returns": 0 + }, + { + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.cjs", + "normalized_path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.cjs", + "match": true, + "checkout_eol": "crlf", + "bare_carriage_returns": 0 + }, + { + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verification-observations.v1.json", + "normalized_path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verification-observations.v1.json", + "match": true, + "checkout_eol": "crlf", + "bare_carriage_returns": 0 + }, + { + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/maker-report.md", + "normalized_path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/maker-report.md", + "match": false, + "checkout_eol": "bare-cr-present", + "bare_carriage_returns": 1 + } + ], + "stderr": "" + } + ] +} diff --git a/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r2-checker/runs/lf-adversarial.tap b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r2-checker/runs/lf-adversarial.tap new file mode 100644 index 00000000..cd4916e8 --- /dev/null +++ b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r2-checker/runs/lf-adversarial.tap @@ -0,0 +1,29 @@ +✔ artifact manifest rejects a header-only zero-entry set (204.7241ms) +✔ artifact manifest rejects a missing required entry (206.2446ms) +✔ artifact manifest rejects an extra entry (249.4738ms) +✔ artifact manifest rejects a duplicate entry (295.9448ms) +✔ artifact manifest rejects dot-segment traversal outside the evidence namespace (229.5158ms) +✔ artifact manifest rejects a non-canonical dot-segment alias (271.7093ms) +▶ artifact manifest rejects absolute and backslash-separated paths + ✔ absolute path (234.0029ms) + ✔ backslash-separated path (270.4852ms) +✔ artifact manifest rejects absolute and backslash-separated paths (504.8722ms) +▶ contract rejects unsupported checkout-equivalence policy values + ✔ bare_cr (1081.7052ms) + ✔ transform (965.7797ms) + ✔ required_result (1094.4142ms) +✔ contract rejects unsupported checkout-equivalence policy values (3142.2364ms) +▶ contract rejects unknown schema keys + ✔ top-level (1160.8405ms) + ✔ representation (1060.4887ms) + ✔ checkout-equivalence (1058.3076ms) + ✔ entry (995.6682ms) +✔ contract rejects unknown schema keys (4275.7094ms) +ℹ tests 18 +ℹ suites 0 +ℹ pass 18 +ℹ fail 0 +ℹ cancelled 0 +ℹ skipped 0 +ℹ todo 0 +ℹ duration_ms 9495.3843 diff --git a/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r2-checker/runs/lf-artifact-files.json b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r2-checker/runs/lf-artifact-files.json new file mode 100644 index 00000000..bb630f40 --- /dev/null +++ b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r2-checker/runs/lf-artifact-files.json @@ -0,0 +1,56 @@ +{ + "schema_version": 1, + "slice": "DB-EMBEDDING-EVIDENCE-TRANSPORT", + "mode": "artifact-files", + "status": "PASS", + "source_commit": "38d6a4fb7ff5f5ae3b6c0066c0a1b806421137df", + "source_commit_is_ancestor": true, + "algorithm": "sha256", + "representation": "canonical-lf-files", + "total": 5, + "matched": 5, + "checkout": { + "core_autocrlf": "true", + "eol_counts": { + "lf": 5 + } + }, + "structural_errors": [], + "entries": [ + { + "path": ".agent/reports/evidence/production-ready/db-embedding-stats/SHA256SUMS.txt", + "normalized_path": ".agent/reports/evidence/production-ready/db-embedding-stats/SHA256SUMS.txt", + "match": true, + "checkout_eol": "lf", + "bare_carriage_returns": 0 + }, + { + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/content-manifest.v1.json", + "normalized_path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/content-manifest.v1.json", + "match": true, + "checkout_eol": "lf", + "bare_carriage_returns": 0 + }, + { + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.cjs", + "normalized_path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.cjs", + "match": true, + "checkout_eol": "lf", + "bare_carriage_returns": 0 + }, + { + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verification-observations.v1.json", + "normalized_path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verification-observations.v1.json", + "match": true, + "checkout_eol": "lf", + "bare_carriage_returns": 0 + }, + { + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/maker-report.md", + "normalized_path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/maker-report.md", + "match": true, + "checkout_eol": "lf", + "bare_carriage_returns": 0 + } + ] +} diff --git a/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r2-checker/runs/lf-checkout-lf.json b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r2-checker/runs/lf-checkout-lf.json new file mode 100644 index 00000000..f74f0991 --- /dev/null +++ b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r2-checker/runs/lf-checkout-lf.json @@ -0,0 +1,94 @@ +{ + "schema_version": 1, + "slice": "DB-EMBEDDING-EVIDENCE-TRANSPORT", + "mode": "checkout-lf", + "status": "PASS", + "source_commit": "38d6a4fb7ff5f5ae3b6c0066c0a1b806421137df", + "source_commit_is_ancestor": true, + "algorithm": "sha256", + "representation": "git-blob-content", + "total": 7, + "matched": 7, + "git_object_matches": 7, + "raw_checkout_matches": 7, + "checkout_lf_matches": 7, + "checkout": { + "core_autocrlf": "true", + "eol_counts": { + "lf": 7 + } + }, + "structural_errors": [], + "entries": [ + { + "path": "internal/embedding/store.go", + "git_blob_oid": "1abaee96b07583f9fd824ed03c40b043c490b567", + "git_object_match": true, + "raw_checkout_match": true, + "checkout_lf_match": true, + "checkout_eol": "lf", + "crlf_pairs": 0, + "bare_carriage_returns": 0 + }, + { + "path": "internal/embedding/store_stats_test.go", + "git_blob_oid": "d381643deadbb42e8a9a07fc9375a6cdfedbdccc", + "git_object_match": true, + "raw_checkout_match": true, + "checkout_lf_match": true, + "checkout_eol": "lf", + "crlf_pairs": 0, + "bare_carriage_returns": 0 + }, + { + "path": ".agent/specs/db-embedding-stats/evidence/DB-EMBEDDING-STATS.red.json", + "git_blob_oid": "48db3052d1ff53fa7cd5f61d0371dd1be0e780bd", + "git_object_match": true, + "raw_checkout_match": true, + "checkout_lf_match": true, + "checkout_eol": "lf", + "crlf_pairs": 0, + "bare_carriage_returns": 0 + }, + { + "path": ".agent/specs/db-embedding-stats/evidence/DB-EMBEDDING-STATS.tdd.json", + "git_blob_oid": "4d94a57de67a41b718073e403cd894843dcffa0d", + "git_object_match": true, + "raw_checkout_match": true, + "checkout_lf_match": true, + "checkout_eol": "lf", + "crlf_pairs": 0, + "bare_carriage_returns": 0 + }, + { + "path": ".agent/specs/db-embedding-stats/evidence/coverage.out", + "git_blob_oid": "457c38e08408c534032a7a962969c762fa1fad8c", + "git_object_match": true, + "raw_checkout_match": true, + "checkout_lf_match": true, + "checkout_eol": "lf", + "crlf_pairs": 0, + "bare_carriage_returns": 0 + }, + { + "path": ".agent/reports/2026-07-10-db-embedding-stats-maker.md", + "git_blob_oid": "8a3d45057e7c869e3eec8925a25a341158209f01", + "git_object_match": true, + "raw_checkout_match": true, + "checkout_lf_match": true, + "checkout_eol": "lf", + "crlf_pairs": 0, + "bare_carriage_returns": 0 + }, + { + "path": ".agent/reports/evidence/production-ready/db-embedding-stats/DB-EMBEDDING-STATS.final.json", + "git_blob_oid": "1fa3cb6c4dc1fba849f50f33a42a3f2d1f2b23fd", + "git_object_match": true, + "raw_checkout_match": true, + "checkout_lf_match": true, + "checkout_eol": "lf", + "crlf_pairs": 0, + "bare_carriage_returns": 0 + } + ] +} diff --git a/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r2-checker/runs/lf-git-object.json b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r2-checker/runs/lf-git-object.json new file mode 100644 index 00000000..167b31d6 --- /dev/null +++ b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r2-checker/runs/lf-git-object.json @@ -0,0 +1,94 @@ +{ + "schema_version": 1, + "slice": "DB-EMBEDDING-EVIDENCE-TRANSPORT", + "mode": "git-object", + "status": "PASS", + "source_commit": "38d6a4fb7ff5f5ae3b6c0066c0a1b806421137df", + "source_commit_is_ancestor": true, + "algorithm": "sha256", + "representation": "git-blob-content", + "total": 7, + "matched": 7, + "git_object_matches": 7, + "raw_checkout_matches": 7, + "checkout_lf_matches": 7, + "checkout": { + "core_autocrlf": "true", + "eol_counts": { + "lf": 7 + } + }, + "structural_errors": [], + "entries": [ + { + "path": "internal/embedding/store.go", + "git_blob_oid": "1abaee96b07583f9fd824ed03c40b043c490b567", + "git_object_match": true, + "raw_checkout_match": true, + "checkout_lf_match": true, + "checkout_eol": "lf", + "crlf_pairs": 0, + "bare_carriage_returns": 0 + }, + { + "path": "internal/embedding/store_stats_test.go", + "git_blob_oid": "d381643deadbb42e8a9a07fc9375a6cdfedbdccc", + "git_object_match": true, + "raw_checkout_match": true, + "checkout_lf_match": true, + "checkout_eol": "lf", + "crlf_pairs": 0, + "bare_carriage_returns": 0 + }, + { + "path": ".agent/specs/db-embedding-stats/evidence/DB-EMBEDDING-STATS.red.json", + "git_blob_oid": "48db3052d1ff53fa7cd5f61d0371dd1be0e780bd", + "git_object_match": true, + "raw_checkout_match": true, + "checkout_lf_match": true, + "checkout_eol": "lf", + "crlf_pairs": 0, + "bare_carriage_returns": 0 + }, + { + "path": ".agent/specs/db-embedding-stats/evidence/DB-EMBEDDING-STATS.tdd.json", + "git_blob_oid": "4d94a57de67a41b718073e403cd894843dcffa0d", + "git_object_match": true, + "raw_checkout_match": true, + "checkout_lf_match": true, + "checkout_eol": "lf", + "crlf_pairs": 0, + "bare_carriage_returns": 0 + }, + { + "path": ".agent/specs/db-embedding-stats/evidence/coverage.out", + "git_blob_oid": "457c38e08408c534032a7a962969c762fa1fad8c", + "git_object_match": true, + "raw_checkout_match": true, + "checkout_lf_match": true, + "checkout_eol": "lf", + "crlf_pairs": 0, + "bare_carriage_returns": 0 + }, + { + "path": ".agent/reports/2026-07-10-db-embedding-stats-maker.md", + "git_blob_oid": "8a3d45057e7c869e3eec8925a25a341158209f01", + "git_object_match": true, + "raw_checkout_match": true, + "checkout_lf_match": true, + "checkout_eol": "lf", + "crlf_pairs": 0, + "bare_carriage_returns": 0 + }, + { + "path": ".agent/reports/evidence/production-ready/db-embedding-stats/DB-EMBEDDING-STATS.final.json", + "git_blob_oid": "1fa3cb6c4dc1fba849f50f33a42a3f2d1f2b23fd", + "git_object_match": true, + "raw_checkout_match": true, + "checkout_lf_match": true, + "checkout_eol": "lf", + "crlf_pairs": 0, + "bare_carriage_returns": 0 + } + ] +} diff --git a/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r2-checker/runs/lf-legacy-raw-audit.json b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r2-checker/runs/lf-legacy-raw-audit.json new file mode 100644 index 00000000..9f388aa0 --- /dev/null +++ b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r2-checker/runs/lf-legacy-raw-audit.json @@ -0,0 +1,94 @@ +{ + "schema_version": 1, + "slice": "DB-EMBEDDING-EVIDENCE-TRANSPORT", + "mode": "legacy-raw-audit", + "status": "RAW_CHECKOUT_HAPPENS_TO_MATCH", + "source_commit": "38d6a4fb7ff5f5ae3b6c0066c0a1b806421137df", + "source_commit_is_ancestor": true, + "algorithm": "sha256", + "representation": "git-blob-content", + "total": 7, + "matched": 7, + "git_object_matches": 7, + "raw_checkout_matches": 7, + "checkout_lf_matches": 7, + "checkout": { + "core_autocrlf": "true", + "eol_counts": { + "lf": 7 + } + }, + "structural_errors": [], + "entries": [ + { + "path": "internal/embedding/store.go", + "git_blob_oid": "1abaee96b07583f9fd824ed03c40b043c490b567", + "git_object_match": true, + "raw_checkout_match": true, + "checkout_lf_match": true, + "checkout_eol": "lf", + "crlf_pairs": 0, + "bare_carriage_returns": 0 + }, + { + "path": "internal/embedding/store_stats_test.go", + "git_blob_oid": "d381643deadbb42e8a9a07fc9375a6cdfedbdccc", + "git_object_match": true, + "raw_checkout_match": true, + "checkout_lf_match": true, + "checkout_eol": "lf", + "crlf_pairs": 0, + "bare_carriage_returns": 0 + }, + { + "path": ".agent/specs/db-embedding-stats/evidence/DB-EMBEDDING-STATS.red.json", + "git_blob_oid": "48db3052d1ff53fa7cd5f61d0371dd1be0e780bd", + "git_object_match": true, + "raw_checkout_match": true, + "checkout_lf_match": true, + "checkout_eol": "lf", + "crlf_pairs": 0, + "bare_carriage_returns": 0 + }, + { + "path": ".agent/specs/db-embedding-stats/evidence/DB-EMBEDDING-STATS.tdd.json", + "git_blob_oid": "4d94a57de67a41b718073e403cd894843dcffa0d", + "git_object_match": true, + "raw_checkout_match": true, + "checkout_lf_match": true, + "checkout_eol": "lf", + "crlf_pairs": 0, + "bare_carriage_returns": 0 + }, + { + "path": ".agent/specs/db-embedding-stats/evidence/coverage.out", + "git_blob_oid": "457c38e08408c534032a7a962969c762fa1fad8c", + "git_object_match": true, + "raw_checkout_match": true, + "checkout_lf_match": true, + "checkout_eol": "lf", + "crlf_pairs": 0, + "bare_carriage_returns": 0 + }, + { + "path": ".agent/reports/2026-07-10-db-embedding-stats-maker.md", + "git_blob_oid": "8a3d45057e7c869e3eec8925a25a341158209f01", + "git_object_match": true, + "raw_checkout_match": true, + "checkout_lf_match": true, + "checkout_eol": "lf", + "crlf_pairs": 0, + "bare_carriage_returns": 0 + }, + { + "path": ".agent/reports/evidence/production-ready/db-embedding-stats/DB-EMBEDDING-STATS.final.json", + "git_blob_oid": "1fa3cb6c4dc1fba849f50f33a42a3f2d1f2b23fd", + "git_object_match": true, + "raw_checkout_match": true, + "checkout_lf_match": true, + "checkout_eol": "lf", + "crlf_pairs": 0, + "bare_carriage_returns": 0 + } + ] +} diff --git a/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r2-checker/runs/proveit-baseline.tap b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r2-checker/runs/proveit-baseline.tap new file mode 100644 index 00000000..4d067b33 --- /dev/null +++ b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r2-checker/runs/proveit-baseline.tap @@ -0,0 +1,29 @@ +✔ artifact manifest rejects a header-only zero-entry set (264.5586ms) +✔ artifact manifest rejects a missing required entry (263.6641ms) +✔ artifact manifest rejects an extra entry (276.7694ms) +✔ artifact manifest rejects a duplicate entry (328.1281ms) +✔ artifact manifest rejects dot-segment traversal outside the evidence namespace (263.2965ms) +✔ artifact manifest rejects a non-canonical dot-segment alias (241.7838ms) +▶ artifact manifest rejects absolute and backslash-separated paths + ✔ absolute path (264.2814ms) + ✔ backslash-separated path (280.7472ms) +✔ artifact manifest rejects absolute and backslash-separated paths (545.5467ms) +▶ contract rejects unsupported checkout-equivalence policy values + ✔ bare_cr (1091.5844ms) + ✔ transform (1178.3839ms) + ✔ required_result (1032.044ms) +✔ contract rejects unsupported checkout-equivalence policy values (3302.4338ms) +▶ contract rejects unknown schema keys + ✔ top-level (997.2345ms) + ✔ representation (1007.8329ms) + ✔ checkout-equivalence (949.5694ms) + ✔ entry (1300.4581ms) +✔ contract rejects unknown schema keys (4255.5179ms) +ℹ tests 18 +ℹ suites 0 +ℹ pass 18 +ℹ fail 0 +ℹ cancelled 0 +ℹ skipped 0 +ℹ todo 0 +ℹ duration_ms 9883.4873 diff --git a/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r2-checker/runs/proveit-post-restore.tap b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r2-checker/runs/proveit-post-restore.tap new file mode 100644 index 00000000..d2e62d8d --- /dev/null +++ b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r2-checker/runs/proveit-post-restore.tap @@ -0,0 +1,29 @@ +✔ artifact manifest rejects a header-only zero-entry set (247.9456ms) +✔ artifact manifest rejects a missing required entry (329.4117ms) +✔ artifact manifest rejects an extra entry (280.002ms) +✔ artifact manifest rejects a duplicate entry (269.1473ms) +✔ artifact manifest rejects dot-segment traversal outside the evidence namespace (315.7552ms) +✔ artifact manifest rejects a non-canonical dot-segment alias (336.6983ms) +▶ artifact manifest rejects absolute and backslash-separated paths + ✔ absolute path (313.2702ms) + ✔ backslash-separated path (228.8392ms) +✔ artifact manifest rejects absolute and backslash-separated paths (542.5308ms) +▶ contract rejects unsupported checkout-equivalence policy values + ✔ bare_cr (992.5601ms) + ✔ transform (981.8976ms) + ✔ required_result (964.511ms) +✔ contract rejects unsupported checkout-equivalence policy values (2939.3526ms) +▶ contract rejects unknown schema keys + ✔ top-level (948.6809ms) + ✔ representation (967.1724ms) + ✔ checkout-equivalence (953.5405ms) + ✔ entry (1265.4804ms) +✔ contract rejects unknown schema keys (4135.2438ms) +ℹ tests 18 +ℹ suites 0 +ℹ pass 18 +ℹ fail 0 +ℹ cancelled 0 +ℹ skipped 0 +ℹ todo 0 +ℹ duration_ms 9525.007 diff --git a/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r2-checker/runs/proveit-validateContractSchema-sentinel.tap b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r2-checker/runs/proveit-validateContractSchema-sentinel.tap new file mode 100644 index 00000000..21f5da8e --- /dev/null +++ b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r2-checker/runs/proveit-validateContractSchema-sentinel.tap @@ -0,0 +1,527 @@ +✖ artifact manifest rejects a header-only zero-entry set (169.5923ms) +✖ artifact manifest rejects a missing required entry (154.591ms) +✖ artifact manifest rejects an extra entry (163.6925ms) +✖ artifact manifest rejects a duplicate entry (299.5376ms) +✖ artifact manifest rejects dot-segment traversal outside the evidence namespace (256.6538ms) +✖ artifact manifest rejects a non-canonical dot-segment alias (180.914ms) +▶ artifact manifest rejects absolute and backslash-separated paths + ✖ absolute path (204.6057ms) + ✖ backslash-separated path (192.2898ms) +✖ artifact manifest rejects absolute and backslash-separated paths (397.531ms) +▶ contract rejects unsupported checkout-equivalence policy values + ✖ bare_cr (1260.7754ms) + ✖ transform (1548.12ms) + ✖ required_result (1857.544ms) +✖ contract rejects unsupported checkout-equivalence policy values (4666.8941ms) +▶ contract rejects unknown schema keys + ✖ top-level (1762.5524ms) + ✖ representation (1762.781ms) + ✖ checkout-equivalence (1057.4985ms) + ✖ entry (976.1872ms) +✖ contract rejects unknown schema keys (5559.4425ms) +ℹ tests 18 +ℹ suites 0 +ℹ pass 0 +ℹ fail 18 +ℹ cancelled 0 +ℹ skipped 0 +ℹ todo 0 +ℹ duration_ms 11987.5511 + +✖ failing tests: + +test at .agent\reports\evidence\production-ready\db-embedding-stats-evidence-transport\verify-manifest.test.cjs:124:1 +✖ artifact manifest rejects a header-only zero-entry set (169.5923ms) + AssertionError [ERR_ASSERTION]: TypeError: inheritedErrors is not iterable + at verifyArtifactFiles (D:\Dev\engram\.agent\worktrees\db-embedding-evidence-r2-checker-proveit\.agent\reports\evidence\production-ready\db-embedding-stats-evidence-transport\verify-manifest.cjs:279:32) + at main (D:\Dev\engram\.agent\worktrees\db-embedding-evidence-r2-checker-proveit\.agent\reports\evidence\production-ready\db-embedding-stats-evidence-transport\verify-manifest.cjs:450:5) + at Object. (D:\Dev\engram\.agent\worktrees\db-embedding-evidence-r2-checker-proveit\.agent\reports\evidence\production-ready\db-embedding-stats-evidence-transport\verify-manifest.cjs:556:3) + at Module._compile (node:internal/modules/cjs/loader:1734:14) + at Object..js (node:internal/modules/cjs/loader:1899:10) + at Module.load (node:internal/modules/cjs/loader:1469:32) + at Module._load (node:internal/modules/cjs/loader:1286:12) + at TracingChannel.traceSync (node:diagnostics_channel:322:14) + at wrapModuleLoad (node:internal/modules/cjs/loader:235:24) + at Module.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:152:5) + + actual - expected + + + undefined + - 'FAIL' + + at expectFailClosed (D:\Dev\engram\.agent\worktrees\db-embedding-evidence-r2-checker-proveit\.agent\reports\evidence\production-ready\db-embedding-stats-evidence-transport\verify-manifest.test.cjs:70:10) + at TestContext. (D:\Dev\engram\.agent\worktrees\db-embedding-evidence-r2-checker-proveit\.agent\reports\evidence\production-ready\db-embedding-stats-evidence-transport\verify-manifest.test.cjs:132:3) + at Test.runInAsyncScope (node:async_hooks:214:14) + at Test.run (node:internal/test_runner/test:1062:25) + at Test.start (node:internal/test_runner/test:959:17) + at startSubtestAfterBootstrap (node:internal/test_runner/harness:332:17) { + generatedMessage: false, + code: 'ERR_ASSERTION', + actual: undefined, + expected: 'FAIL', + operator: 'strictEqual' + } + +test at .agent\reports\evidence\production-ready\db-embedding-stats-evidence-transport\verify-manifest.test.cjs:135:1 +✖ artifact manifest rejects a missing required entry (154.591ms) + AssertionError [ERR_ASSERTION]: TypeError: inheritedErrors is not iterable + at verifyArtifactFiles (D:\Dev\engram\.agent\worktrees\db-embedding-evidence-r2-checker-proveit\.agent\reports\evidence\production-ready\db-embedding-stats-evidence-transport\verify-manifest.cjs:279:32) + at main (D:\Dev\engram\.agent\worktrees\db-embedding-evidence-r2-checker-proveit\.agent\reports\evidence\production-ready\db-embedding-stats-evidence-transport\verify-manifest.cjs:450:5) + at Object. (D:\Dev\engram\.agent\worktrees\db-embedding-evidence-r2-checker-proveit\.agent\reports\evidence\production-ready\db-embedding-stats-evidence-transport\verify-manifest.cjs:556:3) + at Module._compile (node:internal/modules/cjs/loader:1734:14) + at Object..js (node:internal/modules/cjs/loader:1899:10) + at Module.load (node:internal/modules/cjs/loader:1469:32) + at Module._load (node:internal/modules/cjs/loader:1286:12) + at TracingChannel.traceSync (node:diagnostics_channel:322:14) + at wrapModuleLoad (node:internal/modules/cjs/loader:235:24) + at Module.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:152:5) + + actual - expected + + + undefined + - 'FAIL' + + at expectFailClosed (D:\Dev\engram\.agent\worktrees\db-embedding-evidence-r2-checker-proveit\.agent\reports\evidence\production-ready\db-embedding-stats-evidence-transport\verify-manifest.test.cjs:70:10) + at TestContext. (D:\Dev\engram\.agent\worktrees\db-embedding-evidence-r2-checker-proveit\.agent\reports\evidence\production-ready\db-embedding-stats-evidence-transport\verify-manifest.test.cjs:145:3) + at Test.runInAsyncScope (node:async_hooks:214:14) + at Test.run (node:internal/test_runner/test:1062:25) + at Test.processPendingSubtests (node:internal/test_runner/test:752:18) + at Test.postRun (node:internal/test_runner/test:1191:19) + at Test.run (node:internal/test_runner/test:1119:12) + at async startSubtestAfterBootstrap (node:internal/test_runner/harness:332:3) { + generatedMessage: false, + code: 'ERR_ASSERTION', + actual: undefined, + expected: 'FAIL', + operator: 'strictEqual' + } + +test at .agent\reports\evidence\production-ready\db-embedding-stats-evidence-transport\verify-manifest.test.cjs:148:1 +✖ artifact manifest rejects an extra entry (163.6925ms) + AssertionError [ERR_ASSERTION]: TypeError: inheritedErrors is not iterable + at verifyArtifactFiles (D:\Dev\engram\.agent\worktrees\db-embedding-evidence-r2-checker-proveit\.agent\reports\evidence\production-ready\db-embedding-stats-evidence-transport\verify-manifest.cjs:279:32) + at main (D:\Dev\engram\.agent\worktrees\db-embedding-evidence-r2-checker-proveit\.agent\reports\evidence\production-ready\db-embedding-stats-evidence-transport\verify-manifest.cjs:450:5) + at Object. (D:\Dev\engram\.agent\worktrees\db-embedding-evidence-r2-checker-proveit\.agent\reports\evidence\production-ready\db-embedding-stats-evidence-transport\verify-manifest.cjs:556:3) + at Module._compile (node:internal/modules/cjs/loader:1734:14) + at Object..js (node:internal/modules/cjs/loader:1899:10) + at Module.load (node:internal/modules/cjs/loader:1469:32) + at Module._load (node:internal/modules/cjs/loader:1286:12) + at TracingChannel.traceSync (node:diagnostics_channel:322:14) + at wrapModuleLoad (node:internal/modules/cjs/loader:235:24) + at Module.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:152:5) + + actual - expected + + + undefined + - 'FAIL' + + at expectFailClosed (D:\Dev\engram\.agent\worktrees\db-embedding-evidence-r2-checker-proveit\.agent\reports\evidence\production-ready\db-embedding-stats-evidence-transport\verify-manifest.test.cjs:70:10) + at TestContext. (D:\Dev\engram\.agent\worktrees\db-embedding-evidence-r2-checker-proveit\.agent\reports\evidence\production-ready\db-embedding-stats-evidence-transport\verify-manifest.test.cjs:158:3) + at Test.runInAsyncScope (node:async_hooks:214:14) + at Test.run (node:internal/test_runner/test:1062:25) + at Test.processPendingSubtests (node:internal/test_runner/test:752:18) + at Test.postRun (node:internal/test_runner/test:1191:19) + at Test.run (node:internal/test_runner/test:1119:12) + at async Test.processPendingSubtests (node:internal/test_runner/test:752:7) { + generatedMessage: false, + code: 'ERR_ASSERTION', + actual: undefined, + expected: 'FAIL', + operator: 'strictEqual' + } + +test at .agent\reports\evidence\production-ready\db-embedding-stats-evidence-transport\verify-manifest.test.cjs:161:1 +✖ artifact manifest rejects a duplicate entry (299.5376ms) + AssertionError [ERR_ASSERTION]: TypeError: inheritedErrors is not iterable + at verifyArtifactFiles (D:\Dev\engram\.agent\worktrees\db-embedding-evidence-r2-checker-proveit\.agent\reports\evidence\production-ready\db-embedding-stats-evidence-transport\verify-manifest.cjs:279:32) + at main (D:\Dev\engram\.agent\worktrees\db-embedding-evidence-r2-checker-proveit\.agent\reports\evidence\production-ready\db-embedding-stats-evidence-transport\verify-manifest.cjs:450:5) + at Object. (D:\Dev\engram\.agent\worktrees\db-embedding-evidence-r2-checker-proveit\.agent\reports\evidence\production-ready\db-embedding-stats-evidence-transport\verify-manifest.cjs:556:3) + at Module._compile (node:internal/modules/cjs/loader:1734:14) + at Object..js (node:internal/modules/cjs/loader:1899:10) + at Module.load (node:internal/modules/cjs/loader:1469:32) + at Module._load (node:internal/modules/cjs/loader:1286:12) + at TracingChannel.traceSync (node:diagnostics_channel:322:14) + at wrapModuleLoad (node:internal/modules/cjs/loader:235:24) + at Module.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:152:5) + + actual - expected + + + undefined + - 'FAIL' + + at expectFailClosed (D:\Dev\engram\.agent\worktrees\db-embedding-evidence-r2-checker-proveit\.agent\reports\evidence\production-ready\db-embedding-stats-evidence-transport\verify-manifest.test.cjs:70:10) + at TestContext. (D:\Dev\engram\.agent\worktrees\db-embedding-evidence-r2-checker-proveit\.agent\reports\evidence\production-ready\db-embedding-stats-evidence-transport\verify-manifest.test.cjs:171:3) + at Test.runInAsyncScope (node:async_hooks:214:14) + at Test.run (node:internal/test_runner/test:1062:25) + at Test.processPendingSubtests (node:internal/test_runner/test:752:18) + at Test.postRun (node:internal/test_runner/test:1191:19) + at Test.run (node:internal/test_runner/test:1119:12) + at async Test.processPendingSubtests (node:internal/test_runner/test:752:7) { + generatedMessage: false, + code: 'ERR_ASSERTION', + actual: undefined, + expected: 'FAIL', + operator: 'strictEqual' + } + +test at .agent\reports\evidence\production-ready\db-embedding-stats-evidence-transport\verify-manifest.test.cjs:174:1 +✖ artifact manifest rejects dot-segment traversal outside the evidence namespace (256.6538ms) + AssertionError [ERR_ASSERTION]: TypeError: inheritedErrors is not iterable + at verifyArtifactFiles (D:\Dev\engram\.agent\worktrees\db-embedding-evidence-r2-checker-proveit\.agent\reports\evidence\production-ready\db-embedding-stats-evidence-transport\verify-manifest.cjs:279:32) + at main (D:\Dev\engram\.agent\worktrees\db-embedding-evidence-r2-checker-proveit\.agent\reports\evidence\production-ready\db-embedding-stats-evidence-transport\verify-manifest.cjs:450:5) + at Object. (D:\Dev\engram\.agent\worktrees\db-embedding-evidence-r2-checker-proveit\.agent\reports\evidence\production-ready\db-embedding-stats-evidence-transport\verify-manifest.cjs:556:3) + at Module._compile (node:internal/modules/cjs/loader:1734:14) + at Object..js (node:internal/modules/cjs/loader:1899:10) + at Module.load (node:internal/modules/cjs/loader:1469:32) + at Module._load (node:internal/modules/cjs/loader:1286:12) + at TracingChannel.traceSync (node:diagnostics_channel:322:14) + at wrapModuleLoad (node:internal/modules/cjs/loader:235:24) + at Module.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:152:5) + + actual - expected + + + undefined + - 'FAIL' + + at expectFailClosed (D:\Dev\engram\.agent\worktrees\db-embedding-evidence-r2-checker-proveit\.agent\reports\evidence\production-ready\db-embedding-stats-evidence-transport\verify-manifest.test.cjs:70:10) + at TestContext. (D:\Dev\engram\.agent\worktrees\db-embedding-evidence-r2-checker-proveit\.agent\reports\evidence\production-ready\db-embedding-stats-evidence-transport\verify-manifest.test.cjs:188:3) + at Test.runInAsyncScope (node:async_hooks:214:14) + at Test.run (node:internal/test_runner/test:1062:25) + at Test.processPendingSubtests (node:internal/test_runner/test:752:18) + at Test.postRun (node:internal/test_runner/test:1191:19) + at Test.run (node:internal/test_runner/test:1119:12) + at async Test.processPendingSubtests (node:internal/test_runner/test:752:7) { + generatedMessage: false, + code: 'ERR_ASSERTION', + actual: undefined, + expected: 'FAIL', + operator: 'strictEqual' + } + +test at .agent\reports\evidence\production-ready\db-embedding-stats-evidence-transport\verify-manifest.test.cjs:191:1 +✖ artifact manifest rejects a non-canonical dot-segment alias (180.914ms) + AssertionError [ERR_ASSERTION]: TypeError: inheritedErrors is not iterable + at verifyArtifactFiles (D:\Dev\engram\.agent\worktrees\db-embedding-evidence-r2-checker-proveit\.agent\reports\evidence\production-ready\db-embedding-stats-evidence-transport\verify-manifest.cjs:279:32) + at main (D:\Dev\engram\.agent\worktrees\db-embedding-evidence-r2-checker-proveit\.agent\reports\evidence\production-ready\db-embedding-stats-evidence-transport\verify-manifest.cjs:450:5) + at Object. (D:\Dev\engram\.agent\worktrees\db-embedding-evidence-r2-checker-proveit\.agent\reports\evidence\production-ready\db-embedding-stats-evidence-transport\verify-manifest.cjs:556:3) + at Module._compile (node:internal/modules/cjs/loader:1734:14) + at Object..js (node:internal/modules/cjs/loader:1899:10) + at Module.load (node:internal/modules/cjs/loader:1469:32) + at Module._load (node:internal/modules/cjs/loader:1286:12) + at TracingChannel.traceSync (node:diagnostics_channel:322:14) + at wrapModuleLoad (node:internal/modules/cjs/loader:235:24) + at Module.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:152:5) + + actual - expected + + + undefined + - 'FAIL' + + at expectFailClosed (D:\Dev\engram\.agent\worktrees\db-embedding-evidence-r2-checker-proveit\.agent\reports\evidence\production-ready\db-embedding-stats-evidence-transport\verify-manifest.test.cjs:70:10) + at TestContext. (D:\Dev\engram\.agent\worktrees\db-embedding-evidence-r2-checker-proveit\.agent\reports\evidence\production-ready\db-embedding-stats-evidence-transport\verify-manifest.test.cjs:204:3) + at Test.runInAsyncScope (node:async_hooks:214:14) + at Test.run (node:internal/test_runner/test:1062:25) + at Test.processPendingSubtests (node:internal/test_runner/test:752:18) + at Test.postRun (node:internal/test_runner/test:1191:19) + at Test.run (node:internal/test_runner/test:1119:12) + at async Test.processPendingSubtests (node:internal/test_runner/test:752:7) { + generatedMessage: false, + code: 'ERR_ASSERTION', + actual: undefined, + expected: 'FAIL', + operator: 'strictEqual' + } + +test at .agent\reports\evidence\production-ready\db-embedding-stats-evidence-transport\verify-manifest.test.cjs:208:11 +✖ absolute path (204.6057ms) + AssertionError [ERR_ASSERTION]: TypeError: inheritedErrors is not iterable + at verifyArtifactFiles (D:\Dev\engram\.agent\worktrees\db-embedding-evidence-r2-checker-proveit\.agent\reports\evidence\production-ready\db-embedding-stats-evidence-transport\verify-manifest.cjs:279:32) + at main (D:\Dev\engram\.agent\worktrees\db-embedding-evidence-r2-checker-proveit\.agent\reports\evidence\production-ready\db-embedding-stats-evidence-transport\verify-manifest.cjs:450:5) + at Object. (D:\Dev\engram\.agent\worktrees\db-embedding-evidence-r2-checker-proveit\.agent\reports\evidence\production-ready\db-embedding-stats-evidence-transport\verify-manifest.cjs:556:3) + at Module._compile (node:internal/modules/cjs/loader:1734:14) + at Object..js (node:internal/modules/cjs/loader:1899:10) + at Module.load (node:internal/modules/cjs/loader:1469:32) + at Module._load (node:internal/modules/cjs/loader:1286:12) + at TracingChannel.traceSync (node:diagnostics_channel:322:14) + at wrapModuleLoad (node:internal/modules/cjs/loader:235:24) + at Module.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:152:5) + + actual - expected + + + undefined + - 'FAIL' + + at expectFailClosed (D:\Dev\engram\.agent\worktrees\db-embedding-evidence-r2-checker-proveit\.agent\reports\evidence\production-ready\db-embedding-stats-evidence-transport\verify-manifest.test.cjs:70:10) + at TestContext. (D:\Dev\engram\.agent\worktrees\db-embedding-evidence-r2-checker-proveit\.agent\reports\evidence\production-ready\db-embedding-stats-evidence-transport\verify-manifest.test.cjs:221:5) + at Test.runInAsyncScope (node:async_hooks:214:14) + at Test.run (node:internal/test_runner/test:1062:25) + at Test.start (node:internal/test_runner/test:959:17) + at TestContext.test (node:internal/test_runner/test:373:13) + at TestContext. (D:\Dev\engram\.agent\worktrees\db-embedding-evidence-r2-checker-proveit\.agent\reports\evidence\production-ready\db-embedding-stats-evidence-transport\verify-manifest.test.cjs:208:11) + at Test.runInAsyncScope (node:async_hooks:214:14) + at Test.run (node:internal/test_runner/test:1062:25) + at Test.processPendingSubtests (node:internal/test_runner/test:752:18) { + generatedMessage: false, + code: 'ERR_ASSERTION', + actual: undefined, + expected: 'FAIL', + operator: 'strictEqual' + } + +test at .agent\reports\evidence\production-ready\db-embedding-stats-evidence-transport\verify-manifest.test.cjs:224:11 +✖ backslash-separated path (192.2898ms) + AssertionError [ERR_ASSERTION]: TypeError: inheritedErrors is not iterable + at verifyArtifactFiles (D:\Dev\engram\.agent\worktrees\db-embedding-evidence-r2-checker-proveit\.agent\reports\evidence\production-ready\db-embedding-stats-evidence-transport\verify-manifest.cjs:279:32) + at main (D:\Dev\engram\.agent\worktrees\db-embedding-evidence-r2-checker-proveit\.agent\reports\evidence\production-ready\db-embedding-stats-evidence-transport\verify-manifest.cjs:450:5) + at Object. (D:\Dev\engram\.agent\worktrees\db-embedding-evidence-r2-checker-proveit\.agent\reports\evidence\production-ready\db-embedding-stats-evidence-transport\verify-manifest.cjs:556:3) + at Module._compile (node:internal/modules/cjs/loader:1734:14) + at Object..js (node:internal/modules/cjs/loader:1899:10) + at Module.load (node:internal/modules/cjs/loader:1469:32) + at Module._load (node:internal/modules/cjs/loader:1286:12) + at TracingChannel.traceSync (node:diagnostics_channel:322:14) + at wrapModuleLoad (node:internal/modules/cjs/loader:235:24) + at Module.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:152:5) + + actual - expected + + + undefined + - 'FAIL' + + at expectFailClosed (D:\Dev\engram\.agent\worktrees\db-embedding-evidence-r2-checker-proveit\.agent\reports\evidence\production-ready\db-embedding-stats-evidence-transport\verify-manifest.test.cjs:70:10) + at TestContext. (D:\Dev\engram\.agent\worktrees\db-embedding-evidence-r2-checker-proveit\.agent\reports\evidence\production-ready\db-embedding-stats-evidence-transport\verify-manifest.test.cjs:234:5) + at Test.runInAsyncScope (node:async_hooks:214:14) + at Test.run (node:internal/test_runner/test:1062:25) + at Test.processPendingSubtests (node:internal/test_runner/test:752:18) + at Test.postRun (node:internal/test_runner/test:1191:19) + at Test.run (node:internal/test_runner/test:1119:12) { + generatedMessage: false, + code: 'ERR_ASSERTION', + actual: undefined, + expected: 'FAIL', + operator: 'strictEqual' + } + +test at .agent\reports\evidence\production-ready\db-embedding-stats-evidence-transport\verify-manifest.test.cjs:247:13 +✖ bare_cr (1260.7754ms) + AssertionError [ERR_ASSERTION]: TypeError: Cannot read properties of undefined (reading 'length') + at main (D:\Dev\engram\.agent\worktrees\db-embedding-evidence-r2-checker-proveit\.agent\reports\evidence\production-ready\db-embedding-stats-evidence-transport\verify-manifest.cjs:510:26) + at Object. (D:\Dev\engram\.agent\worktrees\db-embedding-evidence-r2-checker-proveit\.agent\reports\evidence\production-ready\db-embedding-stats-evidence-transport\verify-manifest.cjs:556:3) + at Module._compile (node:internal/modules/cjs/loader:1734:14) + at Object..js (node:internal/modules/cjs/loader:1899:10) + at Module.load (node:internal/modules/cjs/loader:1469:32) + at Module._load (node:internal/modules/cjs/loader:1286:12) + at TracingChannel.traceSync (node:diagnostics_channel:322:14) + at wrapModuleLoad (node:internal/modules/cjs/loader:235:24) + at Module.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:152:5) + at node:internal/main/run_main_module:33:47 + + actual - expected + + + undefined + - 'FAIL' + + at expectFailClosed (D:\Dev\engram\.agent\worktrees\db-embedding-evidence-r2-checker-proveit\.agent\reports\evidence\production-ready\db-embedding-stats-evidence-transport\verify-manifest.test.cjs:70:10) + at TestContext. (D:\Dev\engram\.agent\worktrees\db-embedding-evidence-r2-checker-proveit\.agent\reports\evidence\production-ready\db-embedding-stats-evidence-transport\verify-manifest.test.cjs:253:7) + at Test.runInAsyncScope (node:async_hooks:214:14) + at Test.run (node:internal/test_runner/test:1062:25) + at Test.start (node:internal/test_runner/test:959:17) + at TestContext.test (node:internal/test_runner/test:373:13) + at TestContext. (D:\Dev\engram\.agent\worktrees\db-embedding-evidence-r2-checker-proveit\.agent\reports\evidence\production-ready\db-embedding-stats-evidence-transport\verify-manifest.test.cjs:247:13) + at Test.runInAsyncScope (node:async_hooks:214:14) + at Test.run (node:internal/test_runner/test:1062:25) + at Test.processPendingSubtests (node:internal/test_runner/test:752:18) { + generatedMessage: false, + code: 'ERR_ASSERTION', + actual: undefined, + expected: 'FAIL', + operator: 'strictEqual' + } + +test at .agent\reports\evidence\production-ready\db-embedding-stats-evidence-transport\verify-manifest.test.cjs:247:13 +✖ transform (1548.12ms) + AssertionError [ERR_ASSERTION]: TypeError: Cannot read properties of undefined (reading 'length') + at main (D:\Dev\engram\.agent\worktrees\db-embedding-evidence-r2-checker-proveit\.agent\reports\evidence\production-ready\db-embedding-stats-evidence-transport\verify-manifest.cjs:510:26) + at Object. (D:\Dev\engram\.agent\worktrees\db-embedding-evidence-r2-checker-proveit\.agent\reports\evidence\production-ready\db-embedding-stats-evidence-transport\verify-manifest.cjs:556:3) + at Module._compile (node:internal/modules/cjs/loader:1734:14) + at Object..js (node:internal/modules/cjs/loader:1899:10) + at Module.load (node:internal/modules/cjs/loader:1469:32) + at Module._load (node:internal/modules/cjs/loader:1286:12) + at TracingChannel.traceSync (node:diagnostics_channel:322:14) + at wrapModuleLoad (node:internal/modules/cjs/loader:235:24) + at Module.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:152:5) + at node:internal/main/run_main_module:33:47 + + actual - expected + + + undefined + - 'FAIL' + + at expectFailClosed (D:\Dev\engram\.agent\worktrees\db-embedding-evidence-r2-checker-proveit\.agent\reports\evidence\production-ready\db-embedding-stats-evidence-transport\verify-manifest.test.cjs:70:10) + at TestContext. (D:\Dev\engram\.agent\worktrees\db-embedding-evidence-r2-checker-proveit\.agent\reports\evidence\production-ready\db-embedding-stats-evidence-transport\verify-manifest.test.cjs:253:7) + at Test.runInAsyncScope (node:async_hooks:214:14) + at Test.run (node:internal/test_runner/test:1062:25) + at Test.processPendingSubtests (node:internal/test_runner/test:752:18) + at Test.postRun (node:internal/test_runner/test:1191:19) + at Test.run (node:internal/test_runner/test:1119:12) { + generatedMessage: false, + code: 'ERR_ASSERTION', + actual: undefined, + expected: 'FAIL', + operator: 'strictEqual' + } + +test at .agent\reports\evidence\production-ready\db-embedding-stats-evidence-transport\verify-manifest.test.cjs:247:13 +✖ required_result (1857.544ms) + AssertionError [ERR_ASSERTION]: TypeError: Cannot read properties of undefined (reading 'length') + at main (D:\Dev\engram\.agent\worktrees\db-embedding-evidence-r2-checker-proveit\.agent\reports\evidence\production-ready\db-embedding-stats-evidence-transport\verify-manifest.cjs:510:26) + at Object. (D:\Dev\engram\.agent\worktrees\db-embedding-evidence-r2-checker-proveit\.agent\reports\evidence\production-ready\db-embedding-stats-evidence-transport\verify-manifest.cjs:556:3) + at Module._compile (node:internal/modules/cjs/loader:1734:14) + at Object..js (node:internal/modules/cjs/loader:1899:10) + at Module.load (node:internal/modules/cjs/loader:1469:32) + at Module._load (node:internal/modules/cjs/loader:1286:12) + at TracingChannel.traceSync (node:diagnostics_channel:322:14) + at wrapModuleLoad (node:internal/modules/cjs/loader:235:24) + at Module.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:152:5) + at node:internal/main/run_main_module:33:47 + + actual - expected + + + undefined + - 'FAIL' + + at expectFailClosed (D:\Dev\engram\.agent\worktrees\db-embedding-evidence-r2-checker-proveit\.agent\reports\evidence\production-ready\db-embedding-stats-evidence-transport\verify-manifest.test.cjs:70:10) + at TestContext. (D:\Dev\engram\.agent\worktrees\db-embedding-evidence-r2-checker-proveit\.agent\reports\evidence\production-ready\db-embedding-stats-evidence-transport\verify-manifest.test.cjs:253:7) + at Test.runInAsyncScope (node:async_hooks:214:14) + at Test.run (node:internal/test_runner/test:1062:25) + at Test.processPendingSubtests (node:internal/test_runner/test:752:18) + at Test.postRun (node:internal/test_runner/test:1191:19) + at Test.run (node:internal/test_runner/test:1119:12) + at async Test.processPendingSubtests (node:internal/test_runner/test:752:7) { + generatedMessage: false, + code: 'ERR_ASSERTION', + actual: undefined, + expected: 'FAIL', + operator: 'strictEqual' + } + +test at .agent\reports\evidence\production-ready\db-embedding-stats-evidence-transport\verify-manifest.test.cjs:268:13 +✖ top-level (1762.5524ms) + AssertionError [ERR_ASSERTION]: TypeError: Cannot read properties of undefined (reading 'length') + at main (D:\Dev\engram\.agent\worktrees\db-embedding-evidence-r2-checker-proveit\.agent\reports\evidence\production-ready\db-embedding-stats-evidence-transport\verify-manifest.cjs:507:26) + at Object. (D:\Dev\engram\.agent\worktrees\db-embedding-evidence-r2-checker-proveit\.agent\reports\evidence\production-ready\db-embedding-stats-evidence-transport\verify-manifest.cjs:556:3) + at Module._compile (node:internal/modules/cjs/loader:1734:14) + at Object..js (node:internal/modules/cjs/loader:1899:10) + at Module.load (node:internal/modules/cjs/loader:1469:32) + at Module._load (node:internal/modules/cjs/loader:1286:12) + at TracingChannel.traceSync (node:diagnostics_channel:322:14) + at wrapModuleLoad (node:internal/modules/cjs/loader:235:24) + at Module.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:152:5) + at node:internal/main/run_main_module:33:47 + + actual - expected + + + undefined + - 'FAIL' + + at expectFailClosed (D:\Dev\engram\.agent\worktrees\db-embedding-evidence-r2-checker-proveit\.agent\reports\evidence\production-ready\db-embedding-stats-evidence-transport\verify-manifest.test.cjs:70:10) + at TestContext. (D:\Dev\engram\.agent\worktrees\db-embedding-evidence-r2-checker-proveit\.agent\reports\evidence\production-ready\db-embedding-stats-evidence-transport\verify-manifest.test.cjs:274:7) + at Test.runInAsyncScope (node:async_hooks:214:14) + at Test.run (node:internal/test_runner/test:1062:25) + at Test.start (node:internal/test_runner/test:959:17) + at TestContext.test (node:internal/test_runner/test:373:13) + at TestContext. (D:\Dev\engram\.agent\worktrees\db-embedding-evidence-r2-checker-proveit\.agent\reports\evidence\production-ready\db-embedding-stats-evidence-transport\verify-manifest.test.cjs:268:13) + at Test.runInAsyncScope (node:async_hooks:214:14) + at Test.run (node:internal/test_runner/test:1062:25) + at Test.processPendingSubtests (node:internal/test_runner/test:752:18) { + generatedMessage: false, + code: 'ERR_ASSERTION', + actual: undefined, + expected: 'FAIL', + operator: 'strictEqual' + } + +test at .agent\reports\evidence\production-ready\db-embedding-stats-evidence-transport\verify-manifest.test.cjs:268:13 +✖ representation (1762.781ms) + AssertionError [ERR_ASSERTION]: TypeError: Cannot read properties of undefined (reading 'length') + at main (D:\Dev\engram\.agent\worktrees\db-embedding-evidence-r2-checker-proveit\.agent\reports\evidence\production-ready\db-embedding-stats-evidence-transport\verify-manifest.cjs:507:26) + at Object. (D:\Dev\engram\.agent\worktrees\db-embedding-evidence-r2-checker-proveit\.agent\reports\evidence\production-ready\db-embedding-stats-evidence-transport\verify-manifest.cjs:556:3) + at Module._compile (node:internal/modules/cjs/loader:1734:14) + at Object..js (node:internal/modules/cjs/loader:1899:10) + at Module.load (node:internal/modules/cjs/loader:1469:32) + at Module._load (node:internal/modules/cjs/loader:1286:12) + at TracingChannel.traceSync (node:diagnostics_channel:322:14) + at wrapModuleLoad (node:internal/modules/cjs/loader:235:24) + at Module.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:152:5) + at node:internal/main/run_main_module:33:47 + + actual - expected + + + undefined + - 'FAIL' + + at expectFailClosed (D:\Dev\engram\.agent\worktrees\db-embedding-evidence-r2-checker-proveit\.agent\reports\evidence\production-ready\db-embedding-stats-evidence-transport\verify-manifest.test.cjs:70:10) + at TestContext. (D:\Dev\engram\.agent\worktrees\db-embedding-evidence-r2-checker-proveit\.agent\reports\evidence\production-ready\db-embedding-stats-evidence-transport\verify-manifest.test.cjs:274:7) + at Test.runInAsyncScope (node:async_hooks:214:14) + at Test.run (node:internal/test_runner/test:1062:25) + at Test.processPendingSubtests (node:internal/test_runner/test:752:18) + at Test.postRun (node:internal/test_runner/test:1191:19) + at Test.run (node:internal/test_runner/test:1119:12) { + generatedMessage: false, + code: 'ERR_ASSERTION', + actual: undefined, + expected: 'FAIL', + operator: 'strictEqual' + } + +test at .agent\reports\evidence\production-ready\db-embedding-stats-evidence-transport\verify-manifest.test.cjs:268:13 +✖ checkout-equivalence (1057.4985ms) + AssertionError [ERR_ASSERTION]: TypeError: Cannot read properties of undefined (reading 'length') + at main (D:\Dev\engram\.agent\worktrees\db-embedding-evidence-r2-checker-proveit\.agent\reports\evidence\production-ready\db-embedding-stats-evidence-transport\verify-manifest.cjs:507:26) + at Object. (D:\Dev\engram\.agent\worktrees\db-embedding-evidence-r2-checker-proveit\.agent\reports\evidence\production-ready\db-embedding-stats-evidence-transport\verify-manifest.cjs:556:3) + at Module._compile (node:internal/modules/cjs/loader:1734:14) + at Object..js (node:internal/modules/cjs/loader:1899:10) + at Module.load (node:internal/modules/cjs/loader:1469:32) + at Module._load (node:internal/modules/cjs/loader:1286:12) + at TracingChannel.traceSync (node:diagnostics_channel:322:14) + at wrapModuleLoad (node:internal/modules/cjs/loader:235:24) + at Module.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:152:5) + at node:internal/main/run_main_module:33:47 + + actual - expected + + + undefined + - 'FAIL' + + at expectFailClosed (D:\Dev\engram\.agent\worktrees\db-embedding-evidence-r2-checker-proveit\.agent\reports\evidence\production-ready\db-embedding-stats-evidence-transport\verify-manifest.test.cjs:70:10) + at TestContext. (D:\Dev\engram\.agent\worktrees\db-embedding-evidence-r2-checker-proveit\.agent\reports\evidence\production-ready\db-embedding-stats-evidence-transport\verify-manifest.test.cjs:274:7) + at Test.runInAsyncScope (node:async_hooks:214:14) + at Test.run (node:internal/test_runner/test:1062:25) + at Test.processPendingSubtests (node:internal/test_runner/test:752:18) + at Test.postRun (node:internal/test_runner/test:1191:19) + at Test.run (node:internal/test_runner/test:1119:12) + at async Test.processPendingSubtests (node:internal/test_runner/test:752:7) { + generatedMessage: false, + code: 'ERR_ASSERTION', + actual: undefined, + expected: 'FAIL', + operator: 'strictEqual' + } + +test at .agent\reports\evidence\production-ready\db-embedding-stats-evidence-transport\verify-manifest.test.cjs:268:13 +✖ entry (976.1872ms) + AssertionError [ERR_ASSERTION]: TypeError: Cannot read properties of undefined (reading 'length') + at main (D:\Dev\engram\.agent\worktrees\db-embedding-evidence-r2-checker-proveit\.agent\reports\evidence\production-ready\db-embedding-stats-evidence-transport\verify-manifest.cjs:507:26) + at Object. (D:\Dev\engram\.agent\worktrees\db-embedding-evidence-r2-checker-proveit\.agent\reports\evidence\production-ready\db-embedding-stats-evidence-transport\verify-manifest.cjs:556:3) + at Module._compile (node:internal/modules/cjs/loader:1734:14) + at Object..js (node:internal/modules/cjs/loader:1899:10) + at Module.load (node:internal/modules/cjs/loader:1469:32) + at Module._load (node:internal/modules/cjs/loader:1286:12) + at TracingChannel.traceSync (node:diagnostics_channel:322:14) + at wrapModuleLoad (node:internal/modules/cjs/loader:235:24) + at Module.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:152:5) + at node:internal/main/run_main_module:33:47 + + actual - expected + + + undefined + - 'FAIL' + + at expectFailClosed (D:\Dev\engram\.agent\worktrees\db-embedding-evidence-r2-checker-proveit\.agent\reports\evidence\production-ready\db-embedding-stats-evidence-transport\verify-manifest.test.cjs:70:10) + at TestContext. (D:\Dev\engram\.agent\worktrees\db-embedding-evidence-r2-checker-proveit\.agent\reports\evidence\production-ready\db-embedding-stats-evidence-transport\verify-manifest.test.cjs:274:7) + at Test.runInAsyncScope (node:async_hooks:214:14) + at Test.run (node:internal/test_runner/test:1062:25) + at Test.processPendingSubtests (node:internal/test_runner/test:752:18) + at Test.postRun (node:internal/test_runner/test:1191:19) + at Test.run (node:internal/test_runner/test:1119:12) + at async Test.processPendingSubtests (node:internal/test_runner/test:752:7) { + generatedMessage: false, + code: 'ERR_ASSERTION', + actual: undefined, + expected: 'FAIL', + operator: 'strictEqual' + } diff --git a/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r2-checker/runs/proveit-verifyArtifactFiles-sentinel.tap b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r2-checker/runs/proveit-verifyArtifactFiles-sentinel.tap new file mode 100644 index 00000000..221221d0 --- /dev/null +++ b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r2-checker/runs/proveit-verifyArtifactFiles-sentinel.tap @@ -0,0 +1,174 @@ +✖ artifact manifest rejects a header-only zero-entry set (168.0584ms) +✖ artifact manifest rejects a missing required entry (164.8353ms) +✖ artifact manifest rejects an extra entry (171.1679ms) +✖ artifact manifest rejects a duplicate entry (162.5527ms) +✖ artifact manifest rejects dot-segment traversal outside the evidence namespace (168.471ms) +✖ artifact manifest rejects a non-canonical dot-segment alias (167.3466ms) +▶ artifact manifest rejects absolute and backslash-separated paths + ✖ absolute path (218.0499ms) + ✖ backslash-separated path (179.5181ms) +✖ artifact manifest rejects absolute and backslash-separated paths (398.1991ms) +▶ contract rejects unsupported checkout-equivalence policy values + ✔ bare_cr (1078.829ms) + ✔ transform (1048.8443ms) + ✔ required_result (1005.0466ms) +✔ contract rejects unsupported checkout-equivalence policy values (3133.1215ms) +▶ contract rejects unknown schema keys + ✔ top-level (1032.465ms) + ✔ representation (1206.6913ms) + ✔ checkout-equivalence (1241.0031ms) + ✔ entry (1647.2061ms) +✔ contract rejects unknown schema keys (5127.8335ms) +ℹ tests 18 +ℹ suites 0 +ℹ pass 9 +ℹ fail 9 +ℹ cancelled 0 +ℹ skipped 0 +ℹ todo 0 +ℹ duration_ms 9783.0338 + +✖ failing tests: + +test at .agent\reports\evidence\production-ready\db-embedding-stats-evidence-transport\verify-manifest.test.cjs:124:1 +✖ artifact manifest rejects a header-only zero-entry set (168.0584ms) + AssertionError [ERR_ASSERTION]: mutation must return a non-zero exit code + at expectFailClosed (D:\Dev\engram\.agent\worktrees\db-embedding-evidence-r2-checker-proveit\.agent\reports\evidence\production-ready\db-embedding-stats-evidence-transport\verify-manifest.test.cjs:69:10) + at TestContext. (D:\Dev\engram\.agent\worktrees\db-embedding-evidence-r2-checker-proveit\.agent\reports\evidence\production-ready\db-embedding-stats-evidence-transport\verify-manifest.test.cjs:132:3) + at Test.runInAsyncScope (node:async_hooks:214:14) + at Test.run (node:internal/test_runner/test:1062:25) + at Test.start (node:internal/test_runner/test:959:17) + at startSubtestAfterBootstrap (node:internal/test_runner/harness:332:17) { + generatedMessage: false, + code: 'ERR_ASSERTION', + actual: 0, + expected: 0, + operator: 'notStrictEqual' + } + +test at .agent\reports\evidence\production-ready\db-embedding-stats-evidence-transport\verify-manifest.test.cjs:135:1 +✖ artifact manifest rejects a missing required entry (164.8353ms) + AssertionError [ERR_ASSERTION]: mutation must return a non-zero exit code + at expectFailClosed (D:\Dev\engram\.agent\worktrees\db-embedding-evidence-r2-checker-proveit\.agent\reports\evidence\production-ready\db-embedding-stats-evidence-transport\verify-manifest.test.cjs:69:10) + at TestContext. (D:\Dev\engram\.agent\worktrees\db-embedding-evidence-r2-checker-proveit\.agent\reports\evidence\production-ready\db-embedding-stats-evidence-transport\verify-manifest.test.cjs:145:3) + at Test.runInAsyncScope (node:async_hooks:214:14) + at Test.run (node:internal/test_runner/test:1062:25) + at Test.processPendingSubtests (node:internal/test_runner/test:752:18) + at Test.postRun (node:internal/test_runner/test:1191:19) + at Test.run (node:internal/test_runner/test:1119:12) + at async startSubtestAfterBootstrap (node:internal/test_runner/harness:332:3) { + generatedMessage: false, + code: 'ERR_ASSERTION', + actual: 0, + expected: 0, + operator: 'notStrictEqual' + } + +test at .agent\reports\evidence\production-ready\db-embedding-stats-evidence-transport\verify-manifest.test.cjs:148:1 +✖ artifact manifest rejects an extra entry (171.1679ms) + AssertionError [ERR_ASSERTION]: mutation must return a non-zero exit code + at expectFailClosed (D:\Dev\engram\.agent\worktrees\db-embedding-evidence-r2-checker-proveit\.agent\reports\evidence\production-ready\db-embedding-stats-evidence-transport\verify-manifest.test.cjs:69:10) + at TestContext. (D:\Dev\engram\.agent\worktrees\db-embedding-evidence-r2-checker-proveit\.agent\reports\evidence\production-ready\db-embedding-stats-evidence-transport\verify-manifest.test.cjs:158:3) + at Test.runInAsyncScope (node:async_hooks:214:14) + at Test.run (node:internal/test_runner/test:1062:25) + at Test.processPendingSubtests (node:internal/test_runner/test:752:18) + at Test.postRun (node:internal/test_runner/test:1191:19) + at Test.run (node:internal/test_runner/test:1119:12) + at async Test.processPendingSubtests (node:internal/test_runner/test:752:7) { + generatedMessage: false, + code: 'ERR_ASSERTION', + actual: 0, + expected: 0, + operator: 'notStrictEqual' + } + +test at .agent\reports\evidence\production-ready\db-embedding-stats-evidence-transport\verify-manifest.test.cjs:161:1 +✖ artifact manifest rejects a duplicate entry (162.5527ms) + AssertionError [ERR_ASSERTION]: mutation must return a non-zero exit code + at expectFailClosed (D:\Dev\engram\.agent\worktrees\db-embedding-evidence-r2-checker-proveit\.agent\reports\evidence\production-ready\db-embedding-stats-evidence-transport\verify-manifest.test.cjs:69:10) + at TestContext. (D:\Dev\engram\.agent\worktrees\db-embedding-evidence-r2-checker-proveit\.agent\reports\evidence\production-ready\db-embedding-stats-evidence-transport\verify-manifest.test.cjs:171:3) + at Test.runInAsyncScope (node:async_hooks:214:14) + at Test.run (node:internal/test_runner/test:1062:25) + at Test.processPendingSubtests (node:internal/test_runner/test:752:18) + at Test.postRun (node:internal/test_runner/test:1191:19) + at Test.run (node:internal/test_runner/test:1119:12) + at async Test.processPendingSubtests (node:internal/test_runner/test:752:7) { + generatedMessage: false, + code: 'ERR_ASSERTION', + actual: 0, + expected: 0, + operator: 'notStrictEqual' + } + +test at .agent\reports\evidence\production-ready\db-embedding-stats-evidence-transport\verify-manifest.test.cjs:174:1 +✖ artifact manifest rejects dot-segment traversal outside the evidence namespace (168.471ms) + AssertionError [ERR_ASSERTION]: mutation must return a non-zero exit code + at expectFailClosed (D:\Dev\engram\.agent\worktrees\db-embedding-evidence-r2-checker-proveit\.agent\reports\evidence\production-ready\db-embedding-stats-evidence-transport\verify-manifest.test.cjs:69:10) + at TestContext. (D:\Dev\engram\.agent\worktrees\db-embedding-evidence-r2-checker-proveit\.agent\reports\evidence\production-ready\db-embedding-stats-evidence-transport\verify-manifest.test.cjs:188:3) + at Test.runInAsyncScope (node:async_hooks:214:14) + at Test.run (node:internal/test_runner/test:1062:25) + at Test.processPendingSubtests (node:internal/test_runner/test:752:18) + at Test.postRun (node:internal/test_runner/test:1191:19) + at Test.run (node:internal/test_runner/test:1119:12) + at async Test.processPendingSubtests (node:internal/test_runner/test:752:7) { + generatedMessage: false, + code: 'ERR_ASSERTION', + actual: 0, + expected: 0, + operator: 'notStrictEqual' + } + +test at .agent\reports\evidence\production-ready\db-embedding-stats-evidence-transport\verify-manifest.test.cjs:191:1 +✖ artifact manifest rejects a non-canonical dot-segment alias (167.3466ms) + AssertionError [ERR_ASSERTION]: mutation must return a non-zero exit code + at expectFailClosed (D:\Dev\engram\.agent\worktrees\db-embedding-evidence-r2-checker-proveit\.agent\reports\evidence\production-ready\db-embedding-stats-evidence-transport\verify-manifest.test.cjs:69:10) + at TestContext. (D:\Dev\engram\.agent\worktrees\db-embedding-evidence-r2-checker-proveit\.agent\reports\evidence\production-ready\db-embedding-stats-evidence-transport\verify-manifest.test.cjs:204:3) + at Test.runInAsyncScope (node:async_hooks:214:14) + at Test.run (node:internal/test_runner/test:1062:25) + at Test.processPendingSubtests (node:internal/test_runner/test:752:18) + at Test.postRun (node:internal/test_runner/test:1191:19) + at Test.run (node:internal/test_runner/test:1119:12) + at async Test.processPendingSubtests (node:internal/test_runner/test:752:7) { + generatedMessage: false, + code: 'ERR_ASSERTION', + actual: 0, + expected: 0, + operator: 'notStrictEqual' + } + +test at .agent\reports\evidence\production-ready\db-embedding-stats-evidence-transport\verify-manifest.test.cjs:208:11 +✖ absolute path (218.0499ms) + AssertionError [ERR_ASSERTION]: mutation must return a non-zero exit code + at expectFailClosed (D:\Dev\engram\.agent\worktrees\db-embedding-evidence-r2-checker-proveit\.agent\reports\evidence\production-ready\db-embedding-stats-evidence-transport\verify-manifest.test.cjs:69:10) + at TestContext. (D:\Dev\engram\.agent\worktrees\db-embedding-evidence-r2-checker-proveit\.agent\reports\evidence\production-ready\db-embedding-stats-evidence-transport\verify-manifest.test.cjs:221:5) + at Test.runInAsyncScope (node:async_hooks:214:14) + at Test.run (node:internal/test_runner/test:1062:25) + at Test.start (node:internal/test_runner/test:959:17) + at TestContext.test (node:internal/test_runner/test:373:13) + at TestContext. (D:\Dev\engram\.agent\worktrees\db-embedding-evidence-r2-checker-proveit\.agent\reports\evidence\production-ready\db-embedding-stats-evidence-transport\verify-manifest.test.cjs:208:11) + at Test.runInAsyncScope (node:async_hooks:214:14) + at Test.run (node:internal/test_runner/test:1062:25) + at Test.processPendingSubtests (node:internal/test_runner/test:752:18) { + generatedMessage: false, + code: 'ERR_ASSERTION', + actual: 0, + expected: 0, + operator: 'notStrictEqual' + } + +test at .agent\reports\evidence\production-ready\db-embedding-stats-evidence-transport\verify-manifest.test.cjs:224:11 +✖ backslash-separated path (179.5181ms) + AssertionError [ERR_ASSERTION]: mutation must return a non-zero exit code + at expectFailClosed (D:\Dev\engram\.agent\worktrees\db-embedding-evidence-r2-checker-proveit\.agent\reports\evidence\production-ready\db-embedding-stats-evidence-transport\verify-manifest.test.cjs:69:10) + at TestContext. (D:\Dev\engram\.agent\worktrees\db-embedding-evidence-r2-checker-proveit\.agent\reports\evidence\production-ready\db-embedding-stats-evidence-transport\verify-manifest.test.cjs:234:5) + at Test.runInAsyncScope (node:async_hooks:214:14) + at Test.run (node:internal/test_runner/test:1062:25) + at Test.processPendingSubtests (node:internal/test_runner/test:752:18) + at Test.postRun (node:internal/test_runner/test:1191:19) + at Test.run (node:internal/test_runner/test:1119:12) { + generatedMessage: false, + code: 'ERR_ASSERTION', + actual: 0, + expected: 0, + operator: 'notStrictEqual' + } diff --git a/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r2-checker/runs/red-base.tap b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r2-checker/runs/red-base.tap new file mode 100644 index 00000000..58f8c874 --- /dev/null +++ b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r2-checker/runs/red-base.tap @@ -0,0 +1,284 @@ +✖ artifact manifest rejects a header-only zero-entry set (416.1425ms) +✖ artifact manifest rejects a missing required entry (243.163ms) +✖ artifact manifest rejects an extra entry (219.7015ms) +✔ artifact manifest rejects a duplicate entry (276.0339ms) +✖ artifact manifest rejects dot-segment traversal outside the evidence namespace (248.3367ms) +✖ artifact manifest rejects a non-canonical dot-segment alias (267.0129ms) +▶ artifact manifest rejects absolute and backslash-separated paths + ✖ absolute path (253.4442ms) + ✖ backslash-separated path (214.5218ms) +✖ artifact manifest rejects absolute and backslash-separated paths (468.4208ms) +▶ contract rejects unsupported checkout-equivalence policy values + ✖ bare_cr (1040.6159ms) + ✖ transform (1013.1123ms) + ✖ required_result (974.4161ms) +✖ contract rejects unsupported checkout-equivalence policy values (3028.4907ms) +▶ contract rejects unknown schema keys + ✖ top-level (1009.0265ms) + ✖ representation (923.5985ms) + ✖ checkout-equivalence (945.77ms) + ✖ entry (943.6975ms) +✖ contract rejects unknown schema keys (3822.4337ms) +ℹ tests 18 +ℹ suites 0 +ℹ pass 1 +ℹ fail 17 +ℹ cancelled 0 +ℹ skipped 0 +ℹ todo 0 +ℹ duration_ms 9266.2928 + +✖ failing tests: + +test at .agent\reports\evidence\production-ready\db-embedding-stats-evidence-transport\verify-manifest.test.cjs:124:1 +✖ artifact manifest rejects a header-only zero-entry set (416.1425ms) + AssertionError [ERR_ASSERTION]: mutation must return a non-zero exit code + at expectFailClosed (D:\Dev\engram\.agent\worktrees\db-embedding-evidence-r2-checker-red\.agent\reports\evidence\production-ready\db-embedding-stats-evidence-transport\verify-manifest.test.cjs:69:10) + at TestContext. (D:\Dev\engram\.agent\worktrees\db-embedding-evidence-r2-checker-red\.agent\reports\evidence\production-ready\db-embedding-stats-evidence-transport\verify-manifest.test.cjs:132:3) + at Test.runInAsyncScope (node:async_hooks:214:14) + at Test.run (node:internal/test_runner/test:1062:25) + at Test.start (node:internal/test_runner/test:959:17) + at startSubtestAfterBootstrap (node:internal/test_runner/harness:332:17) { + generatedMessage: false, + code: 'ERR_ASSERTION', + actual: 0, + expected: 0, + operator: 'notStrictEqual' + } + +test at .agent\reports\evidence\production-ready\db-embedding-stats-evidence-transport\verify-manifest.test.cjs:135:1 +✖ artifact manifest rejects a missing required entry (243.163ms) + AssertionError [ERR_ASSERTION]: mutation must return a non-zero exit code + at expectFailClosed (D:\Dev\engram\.agent\worktrees\db-embedding-evidence-r2-checker-red\.agent\reports\evidence\production-ready\db-embedding-stats-evidence-transport\verify-manifest.test.cjs:69:10) + at TestContext. (D:\Dev\engram\.agent\worktrees\db-embedding-evidence-r2-checker-red\.agent\reports\evidence\production-ready\db-embedding-stats-evidence-transport\verify-manifest.test.cjs:145:3) + at Test.runInAsyncScope (node:async_hooks:214:14) + at Test.run (node:internal/test_runner/test:1062:25) + at Test.processPendingSubtests (node:internal/test_runner/test:752:18) + at Test.postRun (node:internal/test_runner/test:1191:19) + at Test.run (node:internal/test_runner/test:1119:12) + at async startSubtestAfterBootstrap (node:internal/test_runner/harness:332:3) { + generatedMessage: false, + code: 'ERR_ASSERTION', + actual: 0, + expected: 0, + operator: 'notStrictEqual' + } + +test at .agent\reports\evidence\production-ready\db-embedding-stats-evidence-transport\verify-manifest.test.cjs:148:1 +✖ artifact manifest rejects an extra entry (219.7015ms) + AssertionError [ERR_ASSERTION]: mutation must return a non-zero exit code + at expectFailClosed (D:\Dev\engram\.agent\worktrees\db-embedding-evidence-r2-checker-red\.agent\reports\evidence\production-ready\db-embedding-stats-evidence-transport\verify-manifest.test.cjs:69:10) + at TestContext. (D:\Dev\engram\.agent\worktrees\db-embedding-evidence-r2-checker-red\.agent\reports\evidence\production-ready\db-embedding-stats-evidence-transport\verify-manifest.test.cjs:158:3) + at Test.runInAsyncScope (node:async_hooks:214:14) + at Test.run (node:internal/test_runner/test:1062:25) + at Test.processPendingSubtests (node:internal/test_runner/test:752:18) + at Test.postRun (node:internal/test_runner/test:1191:19) + at Test.run (node:internal/test_runner/test:1119:12) + at async Test.processPendingSubtests (node:internal/test_runner/test:752:7) { + generatedMessage: false, + code: 'ERR_ASSERTION', + actual: 0, + expected: 0, + operator: 'notStrictEqual' + } + +test at .agent\reports\evidence\production-ready\db-embedding-stats-evidence-transport\verify-manifest.test.cjs:174:1 +✖ artifact manifest rejects dot-segment traversal outside the evidence namespace (248.3367ms) + AssertionError [ERR_ASSERTION]: mutation must return a non-zero exit code + at expectFailClosed (D:\Dev\engram\.agent\worktrees\db-embedding-evidence-r2-checker-red\.agent\reports\evidence\production-ready\db-embedding-stats-evidence-transport\verify-manifest.test.cjs:69:10) + at TestContext. (D:\Dev\engram\.agent\worktrees\db-embedding-evidence-r2-checker-red\.agent\reports\evidence\production-ready\db-embedding-stats-evidence-transport\verify-manifest.test.cjs:188:3) + at Test.runInAsyncScope (node:async_hooks:214:14) + at Test.run (node:internal/test_runner/test:1062:25) + at Test.processPendingSubtests (node:internal/test_runner/test:752:18) + at Test.postRun (node:internal/test_runner/test:1191:19) + at Test.run (node:internal/test_runner/test:1119:12) + at async Test.processPendingSubtests (node:internal/test_runner/test:752:7) { + generatedMessage: false, + code: 'ERR_ASSERTION', + actual: 0, + expected: 0, + operator: 'notStrictEqual' + } + +test at .agent\reports\evidence\production-ready\db-embedding-stats-evidence-transport\verify-manifest.test.cjs:191:1 +✖ artifact manifest rejects a non-canonical dot-segment alias (267.0129ms) + AssertionError [ERR_ASSERTION]: mutation must return a non-zero exit code + at expectFailClosed (D:\Dev\engram\.agent\worktrees\db-embedding-evidence-r2-checker-red\.agent\reports\evidence\production-ready\db-embedding-stats-evidence-transport\verify-manifest.test.cjs:69:10) + at TestContext. (D:\Dev\engram\.agent\worktrees\db-embedding-evidence-r2-checker-red\.agent\reports\evidence\production-ready\db-embedding-stats-evidence-transport\verify-manifest.test.cjs:204:3) + at Test.runInAsyncScope (node:async_hooks:214:14) + at Test.run (node:internal/test_runner/test:1062:25) + at Test.processPendingSubtests (node:internal/test_runner/test:752:18) + at Test.postRun (node:internal/test_runner/test:1191:19) + at Test.run (node:internal/test_runner/test:1119:12) + at async Test.processPendingSubtests (node:internal/test_runner/test:752:7) { + generatedMessage: false, + code: 'ERR_ASSERTION', + actual: 0, + expected: 0, + operator: 'notStrictEqual' + } + +test at .agent\reports\evidence\production-ready\db-embedding-stats-evidence-transport\verify-manifest.test.cjs:208:11 +✖ absolute path (253.4442ms) + AssertionError [ERR_ASSERTION]: mutation must emit at least one structural error + at expectFailClosed (D:\Dev\engram\.agent\worktrees\db-embedding-evidence-r2-checker-red\.agent\reports\evidence\production-ready\db-embedding-stats-evidence-transport\verify-manifest.test.cjs:71:10) + at TestContext. (D:\Dev\engram\.agent\worktrees\db-embedding-evidence-r2-checker-red\.agent\reports\evidence\production-ready\db-embedding-stats-evidence-transport\verify-manifest.test.cjs:221:5) + at Test.runInAsyncScope (node:async_hooks:214:14) + at Test.run (node:internal/test_runner/test:1062:25) + at Test.start (node:internal/test_runner/test:959:17) + at TestContext.test (node:internal/test_runner/test:373:13) + at TestContext. (D:\Dev\engram\.agent\worktrees\db-embedding-evidence-r2-checker-red\.agent\reports\evidence\production-ready\db-embedding-stats-evidence-transport\verify-manifest.test.cjs:208:11) + at Test.runInAsyncScope (node:async_hooks:214:14) + at Test.run (node:internal/test_runner/test:1062:25) + at Test.processPendingSubtests (node:internal/test_runner/test:752:18) { + generatedMessage: false, + code: 'ERR_ASSERTION', + actual: false, + expected: true, + operator: '==' + } + +test at .agent\reports\evidence\production-ready\db-embedding-stats-evidence-transport\verify-manifest.test.cjs:224:11 +✖ backslash-separated path (214.5218ms) + AssertionError [ERR_ASSERTION]: mutation must emit at least one structural error + at expectFailClosed (D:\Dev\engram\.agent\worktrees\db-embedding-evidence-r2-checker-red\.agent\reports\evidence\production-ready\db-embedding-stats-evidence-transport\verify-manifest.test.cjs:71:10) + at TestContext. (D:\Dev\engram\.agent\worktrees\db-embedding-evidence-r2-checker-red\.agent\reports\evidence\production-ready\db-embedding-stats-evidence-transport\verify-manifest.test.cjs:234:5) + at Test.runInAsyncScope (node:async_hooks:214:14) + at Test.run (node:internal/test_runner/test:1062:25) + at Test.processPendingSubtests (node:internal/test_runner/test:752:18) + at Test.postRun (node:internal/test_runner/test:1191:19) + at Test.run (node:internal/test_runner/test:1119:12) { + generatedMessage: false, + code: 'ERR_ASSERTION', + actual: false, + expected: true, + operator: '==' + } + +test at .agent\reports\evidence\production-ready\db-embedding-stats-evidence-transport\verify-manifest.test.cjs:247:13 +✖ bare_cr (1040.6159ms) + AssertionError [ERR_ASSERTION]: mutation must return a non-zero exit code + at expectFailClosed (D:\Dev\engram\.agent\worktrees\db-embedding-evidence-r2-checker-red\.agent\reports\evidence\production-ready\db-embedding-stats-evidence-transport\verify-manifest.test.cjs:69:10) + at TestContext. (D:\Dev\engram\.agent\worktrees\db-embedding-evidence-r2-checker-red\.agent\reports\evidence\production-ready\db-embedding-stats-evidence-transport\verify-manifest.test.cjs:253:7) + at Test.runInAsyncScope (node:async_hooks:214:14) + at Test.run (node:internal/test_runner/test:1062:25) + at Test.start (node:internal/test_runner/test:959:17) + at TestContext.test (node:internal/test_runner/test:373:13) + at TestContext. (D:\Dev\engram\.agent\worktrees\db-embedding-evidence-r2-checker-red\.agent\reports\evidence\production-ready\db-embedding-stats-evidence-transport\verify-manifest.test.cjs:247:13) + at Test.runInAsyncScope (node:async_hooks:214:14) + at Test.run (node:internal/test_runner/test:1062:25) + at Test.processPendingSubtests (node:internal/test_runner/test:752:18) { + generatedMessage: false, + code: 'ERR_ASSERTION', + actual: 0, + expected: 0, + operator: 'notStrictEqual' + } + +test at .agent\reports\evidence\production-ready\db-embedding-stats-evidence-transport\verify-manifest.test.cjs:247:13 +✖ transform (1013.1123ms) + AssertionError [ERR_ASSERTION]: mutation must return a non-zero exit code + at expectFailClosed (D:\Dev\engram\.agent\worktrees\db-embedding-evidence-r2-checker-red\.agent\reports\evidence\production-ready\db-embedding-stats-evidence-transport\verify-manifest.test.cjs:69:10) + at TestContext. (D:\Dev\engram\.agent\worktrees\db-embedding-evidence-r2-checker-red\.agent\reports\evidence\production-ready\db-embedding-stats-evidence-transport\verify-manifest.test.cjs:253:7) + at Test.runInAsyncScope (node:async_hooks:214:14) + at Test.run (node:internal/test_runner/test:1062:25) + at Test.processPendingSubtests (node:internal/test_runner/test:752:18) + at Test.postRun (node:internal/test_runner/test:1191:19) + at Test.run (node:internal/test_runner/test:1119:12) { + generatedMessage: false, + code: 'ERR_ASSERTION', + actual: 0, + expected: 0, + operator: 'notStrictEqual' + } + +test at .agent\reports\evidence\production-ready\db-embedding-stats-evidence-transport\verify-manifest.test.cjs:247:13 +✖ required_result (974.4161ms) + AssertionError [ERR_ASSERTION]: mutation must return a non-zero exit code + at expectFailClosed (D:\Dev\engram\.agent\worktrees\db-embedding-evidence-r2-checker-red\.agent\reports\evidence\production-ready\db-embedding-stats-evidence-transport\verify-manifest.test.cjs:69:10) + at TestContext. (D:\Dev\engram\.agent\worktrees\db-embedding-evidence-r2-checker-red\.agent\reports\evidence\production-ready\db-embedding-stats-evidence-transport\verify-manifest.test.cjs:253:7) + at Test.runInAsyncScope (node:async_hooks:214:14) + at Test.run (node:internal/test_runner/test:1062:25) + at Test.processPendingSubtests (node:internal/test_runner/test:752:18) + at Test.postRun (node:internal/test_runner/test:1191:19) + at Test.run (node:internal/test_runner/test:1119:12) + at async Test.processPendingSubtests (node:internal/test_runner/test:752:7) { + generatedMessage: false, + code: 'ERR_ASSERTION', + actual: 0, + expected: 0, + operator: 'notStrictEqual' + } + +test at .agent\reports\evidence\production-ready\db-embedding-stats-evidence-transport\verify-manifest.test.cjs:268:13 +✖ top-level (1009.0265ms) + AssertionError [ERR_ASSERTION]: mutation must return a non-zero exit code + at expectFailClosed (D:\Dev\engram\.agent\worktrees\db-embedding-evidence-r2-checker-red\.agent\reports\evidence\production-ready\db-embedding-stats-evidence-transport\verify-manifest.test.cjs:69:10) + at TestContext. (D:\Dev\engram\.agent\worktrees\db-embedding-evidence-r2-checker-red\.agent\reports\evidence\production-ready\db-embedding-stats-evidence-transport\verify-manifest.test.cjs:274:7) + at Test.runInAsyncScope (node:async_hooks:214:14) + at Test.run (node:internal/test_runner/test:1062:25) + at Test.start (node:internal/test_runner/test:959:17) + at TestContext.test (node:internal/test_runner/test:373:13) + at TestContext. (D:\Dev\engram\.agent\worktrees\db-embedding-evidence-r2-checker-red\.agent\reports\evidence\production-ready\db-embedding-stats-evidence-transport\verify-manifest.test.cjs:268:13) + at Test.runInAsyncScope (node:async_hooks:214:14) + at Test.run (node:internal/test_runner/test:1062:25) + at Test.processPendingSubtests (node:internal/test_runner/test:752:18) { + generatedMessage: false, + code: 'ERR_ASSERTION', + actual: 0, + expected: 0, + operator: 'notStrictEqual' + } + +test at .agent\reports\evidence\production-ready\db-embedding-stats-evidence-transport\verify-manifest.test.cjs:268:13 +✖ representation (923.5985ms) + AssertionError [ERR_ASSERTION]: mutation must return a non-zero exit code + at expectFailClosed (D:\Dev\engram\.agent\worktrees\db-embedding-evidence-r2-checker-red\.agent\reports\evidence\production-ready\db-embedding-stats-evidence-transport\verify-manifest.test.cjs:69:10) + at TestContext. (D:\Dev\engram\.agent\worktrees\db-embedding-evidence-r2-checker-red\.agent\reports\evidence\production-ready\db-embedding-stats-evidence-transport\verify-manifest.test.cjs:274:7) + at Test.runInAsyncScope (node:async_hooks:214:14) + at Test.run (node:internal/test_runner/test:1062:25) + at Test.processPendingSubtests (node:internal/test_runner/test:752:18) + at Test.postRun (node:internal/test_runner/test:1191:19) + at Test.run (node:internal/test_runner/test:1119:12) { + generatedMessage: false, + code: 'ERR_ASSERTION', + actual: 0, + expected: 0, + operator: 'notStrictEqual' + } + +test at .agent\reports\evidence\production-ready\db-embedding-stats-evidence-transport\verify-manifest.test.cjs:268:13 +✖ checkout-equivalence (945.77ms) + AssertionError [ERR_ASSERTION]: mutation must return a non-zero exit code + at expectFailClosed (D:\Dev\engram\.agent\worktrees\db-embedding-evidence-r2-checker-red\.agent\reports\evidence\production-ready\db-embedding-stats-evidence-transport\verify-manifest.test.cjs:69:10) + at TestContext. (D:\Dev\engram\.agent\worktrees\db-embedding-evidence-r2-checker-red\.agent\reports\evidence\production-ready\db-embedding-stats-evidence-transport\verify-manifest.test.cjs:274:7) + at Test.runInAsyncScope (node:async_hooks:214:14) + at Test.run (node:internal/test_runner/test:1062:25) + at Test.processPendingSubtests (node:internal/test_runner/test:752:18) + at Test.postRun (node:internal/test_runner/test:1191:19) + at Test.run (node:internal/test_runner/test:1119:12) + at async Test.processPendingSubtests (node:internal/test_runner/test:752:7) { + generatedMessage: false, + code: 'ERR_ASSERTION', + actual: 0, + expected: 0, + operator: 'notStrictEqual' + } + +test at .agent\reports\evidence\production-ready\db-embedding-stats-evidence-transport\verify-manifest.test.cjs:268:13 +✖ entry (943.6975ms) + AssertionError [ERR_ASSERTION]: mutation must return a non-zero exit code + at expectFailClosed (D:\Dev\engram\.agent\worktrees\db-embedding-evidence-r2-checker-red\.agent\reports\evidence\production-ready\db-embedding-stats-evidence-transport\verify-manifest.test.cjs:69:10) + at TestContext. (D:\Dev\engram\.agent\worktrees\db-embedding-evidence-r2-checker-red\.agent\reports\evidence\production-ready\db-embedding-stats-evidence-transport\verify-manifest.test.cjs:274:7) + at Test.runInAsyncScope (node:async_hooks:214:14) + at Test.run (node:internal/test_runner/test:1062:25) + at Test.processPendingSubtests (node:internal/test_runner/test:752:18) + at Test.postRun (node:internal/test_runner/test:1191:19) + at Test.run (node:internal/test_runner/test:1119:12) + at async Test.processPendingSubtests (node:internal/test_runner/test:752:7) { + generatedMessage: false, + code: 'ERR_ASSERTION', + actual: 0, + expected: 0, + operator: 'notStrictEqual' + } diff --git a/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r2-checker/runs/windows-adversarial.tap b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r2-checker/runs/windows-adversarial.tap new file mode 100644 index 00000000..143a4b4c --- /dev/null +++ b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r2-checker/runs/windows-adversarial.tap @@ -0,0 +1,29 @@ +✔ artifact manifest rejects a header-only zero-entry set (215.1624ms) +✔ artifact manifest rejects a missing required entry (218.8411ms) +✔ artifact manifest rejects an extra entry (263.3854ms) +✔ artifact manifest rejects a duplicate entry (214.6611ms) +✔ artifact manifest rejects dot-segment traversal outside the evidence namespace (272.7374ms) +✔ artifact manifest rejects a non-canonical dot-segment alias (220.9037ms) +▶ artifact manifest rejects absolute and backslash-separated paths + ✔ absolute path (262.5827ms) + ✔ backslash-separated path (210.148ms) +✔ artifact manifest rejects absolute and backslash-separated paths (473.2949ms) +▶ contract rejects unsupported checkout-equivalence policy values + ✔ bare_cr (1242.3442ms) + ✔ transform (1059.7569ms) + ✔ required_result (1113.0429ms) +✔ contract rejects unsupported checkout-equivalence policy values (3415.4676ms) +▶ contract rejects unknown schema keys + ✔ top-level (1153.1603ms) + ✔ representation (979.1553ms) + ✔ checkout-equivalence (1145.8368ms) + ✔ entry (1476.5739ms) +✔ contract rejects unknown schema keys (4755.1286ms) +ℹ tests 18 +ℹ suites 0 +ℹ pass 18 +ℹ fail 0 +ℹ cancelled 0 +ℹ skipped 0 +ℹ todo 0 +ℹ duration_ms 10169.7448 diff --git a/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r2-checker/runs/windows-artifact-files.json b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r2-checker/runs/windows-artifact-files.json new file mode 100644 index 00000000..91dcf133 --- /dev/null +++ b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r2-checker/runs/windows-artifact-files.json @@ -0,0 +1,56 @@ +{ + "schema_version": 1, + "slice": "DB-EMBEDDING-EVIDENCE-TRANSPORT", + "mode": "artifact-files", + "status": "PASS", + "source_commit": "38d6a4fb7ff5f5ae3b6c0066c0a1b806421137df", + "source_commit_is_ancestor": true, + "algorithm": "sha256", + "representation": "canonical-lf-files", + "total": 5, + "matched": 5, + "checkout": { + "core_autocrlf": "true", + "eol_counts": { + "crlf": 5 + } + }, + "structural_errors": [], + "entries": [ + { + "path": ".agent/reports/evidence/production-ready/db-embedding-stats/SHA256SUMS.txt", + "normalized_path": ".agent/reports/evidence/production-ready/db-embedding-stats/SHA256SUMS.txt", + "match": true, + "checkout_eol": "crlf", + "bare_carriage_returns": 0 + }, + { + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/content-manifest.v1.json", + "normalized_path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/content-manifest.v1.json", + "match": true, + "checkout_eol": "crlf", + "bare_carriage_returns": 0 + }, + { + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.cjs", + "normalized_path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.cjs", + "match": true, + "checkout_eol": "crlf", + "bare_carriage_returns": 0 + }, + { + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verification-observations.v1.json", + "normalized_path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verification-observations.v1.json", + "match": true, + "checkout_eol": "crlf", + "bare_carriage_returns": 0 + }, + { + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/maker-report.md", + "normalized_path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/maker-report.md", + "match": true, + "checkout_eol": "crlf", + "bare_carriage_returns": 0 + } + ] +} diff --git a/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r2-checker/runs/windows-checkout-lf.json b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r2-checker/runs/windows-checkout-lf.json new file mode 100644 index 00000000..4bfaeded --- /dev/null +++ b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r2-checker/runs/windows-checkout-lf.json @@ -0,0 +1,94 @@ +{ + "schema_version": 1, + "slice": "DB-EMBEDDING-EVIDENCE-TRANSPORT", + "mode": "checkout-lf", + "status": "PASS", + "source_commit": "38d6a4fb7ff5f5ae3b6c0066c0a1b806421137df", + "source_commit_is_ancestor": true, + "algorithm": "sha256", + "representation": "git-blob-content", + "total": 7, + "matched": 7, + "git_object_matches": 7, + "raw_checkout_matches": 0, + "checkout_lf_matches": 7, + "checkout": { + "core_autocrlf": "true", + "eol_counts": { + "crlf": 7 + } + }, + "structural_errors": [], + "entries": [ + { + "path": "internal/embedding/store.go", + "git_blob_oid": "1abaee96b07583f9fd824ed03c40b043c490b567", + "git_object_match": true, + "raw_checkout_match": false, + "checkout_lf_match": true, + "checkout_eol": "crlf", + "crlf_pairs": 287, + "bare_carriage_returns": 0 + }, + { + "path": "internal/embedding/store_stats_test.go", + "git_blob_oid": "d381643deadbb42e8a9a07fc9375a6cdfedbdccc", + "git_object_match": true, + "raw_checkout_match": false, + "checkout_lf_match": true, + "checkout_eol": "crlf", + "crlf_pairs": 268, + "bare_carriage_returns": 0 + }, + { + "path": ".agent/specs/db-embedding-stats/evidence/DB-EMBEDDING-STATS.red.json", + "git_blob_oid": "48db3052d1ff53fa7cd5f61d0371dd1be0e780bd", + "git_object_match": true, + "raw_checkout_match": false, + "checkout_lf_match": true, + "checkout_eol": "crlf", + "crlf_pairs": 8, + "bare_carriage_returns": 0 + }, + { + "path": ".agent/specs/db-embedding-stats/evidence/DB-EMBEDDING-STATS.tdd.json", + "git_blob_oid": "4d94a57de67a41b718073e403cd894843dcffa0d", + "git_object_match": true, + "raw_checkout_match": false, + "checkout_lf_match": true, + "checkout_eol": "crlf", + "crlf_pairs": 35, + "bare_carriage_returns": 0 + }, + { + "path": ".agent/specs/db-embedding-stats/evidence/coverage.out", + "git_blob_oid": "457c38e08408c534032a7a962969c762fa1fad8c", + "git_object_match": true, + "raw_checkout_match": false, + "checkout_lf_match": true, + "checkout_eol": "crlf", + "crlf_pairs": 240, + "bare_carriage_returns": 0 + }, + { + "path": ".agent/reports/2026-07-10-db-embedding-stats-maker.md", + "git_blob_oid": "8a3d45057e7c869e3eec8925a25a341158209f01", + "git_object_match": true, + "raw_checkout_match": false, + "checkout_lf_match": true, + "checkout_eol": "crlf", + "crlf_pairs": 52, + "bare_carriage_returns": 0 + }, + { + "path": ".agent/reports/evidence/production-ready/db-embedding-stats/DB-EMBEDDING-STATS.final.json", + "git_blob_oid": "1fa3cb6c4dc1fba849f50f33a42a3f2d1f2b23fd", + "git_object_match": true, + "raw_checkout_match": false, + "checkout_lf_match": true, + "checkout_eol": "crlf", + "crlf_pairs": 42, + "bare_carriage_returns": 0 + } + ] +} diff --git a/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r2-checker/runs/windows-coverage-repeat2.tap b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r2-checker/runs/windows-coverage-repeat2.tap new file mode 100644 index 00000000..66738ea2 --- /dev/null +++ b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r2-checker/runs/windows-coverage-repeat2.tap @@ -0,0 +1,44 @@ +✔ artifact manifest rejects a header-only zero-entry set (239.2793ms) +✔ artifact manifest rejects a missing required entry (262.5874ms) +✔ artifact manifest rejects an extra entry (248.7811ms) +✔ artifact manifest rejects a duplicate entry (284.9805ms) +✔ artifact manifest rejects dot-segment traversal outside the evidence namespace (244.4631ms) +✔ artifact manifest rejects a non-canonical dot-segment alias (251.1357ms) +▶ artifact manifest rejects absolute and backslash-separated paths + ✔ absolute path (285.4964ms) + ✔ backslash-separated path (226.2903ms) +✔ artifact manifest rejects absolute and backslash-separated paths (512.133ms) +▶ contract rejects unsupported checkout-equivalence policy values + ✔ bare_cr (992.5589ms) + ✔ transform (1061.8701ms) + ✔ required_result (1045.7829ms) +✔ contract rejects unsupported checkout-equivalence policy values (3100.4902ms) +▶ contract rejects unknown schema keys + ✔ top-level (986.9021ms) + ✔ representation (1001.3605ms) + ✔ checkout-equivalence (993.1817ms) + ✔ entry (1317.75ms) +✔ contract rejects unknown schema keys (4300.0483ms) +ℹ tests 18 +ℹ suites 0 +ℹ pass 18 +ℹ fail 0 +ℹ cancelled 0 +ℹ skipped 0 +ℹ todo 0 +ℹ duration_ms 9586.2176 +ℹ start of coverage report +ℹ ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +ℹ file | line % | branch % | funcs % | uncovered lines +ℹ ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +ℹ .agent | | | | +ℹ reports | | | | +ℹ evidence | | | | +ℹ production-ready | | | | +ℹ db-embedding-stats-evidence-transport | | | | +ℹ verify-manifest.cjs | 84.46 | 50.38 | 100.00 | 74-76 87-88 90-94 117-119 123-124 139-140 153-154 159-160 164-165 186-188 192-193 206-208 259-260 262-263 273-274 276-277 303-305 322-323 325-326 328-329 333-334 350-351 362-363 378-379 381-382 384-385 387-388 390-391 424-432 507-508 510-511 513-514 516-517 519-520 522-523 525-526 529-530 537-538 602-608 648-650 +ℹ verify-manifest.test.cjs | 100.00 | 97.10 | 100.00 | +ℹ ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +ℹ all files | 89.10 | 66.50 | 100.00 | +ℹ ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +ℹ end of coverage report diff --git a/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r2-checker/runs/windows-coverage.tap b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r2-checker/runs/windows-coverage.tap new file mode 100644 index 00000000..b5fc5a1e --- /dev/null +++ b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r2-checker/runs/windows-coverage.tap @@ -0,0 +1,44 @@ +✔ artifact manifest rejects a header-only zero-entry set (219.888ms) +✔ artifact manifest rejects a missing required entry (217.5285ms) +✔ artifact manifest rejects an extra entry (219.3406ms) +✔ artifact manifest rejects a duplicate entry (403.5221ms) +✔ artifact manifest rejects dot-segment traversal outside the evidence namespace (261.2655ms) +✔ artifact manifest rejects a non-canonical dot-segment alias (210.5878ms) +▶ artifact manifest rejects absolute and backslash-separated paths + ✔ absolute path (223.0607ms) + ✔ backslash-separated path (249.8671ms) +✔ artifact manifest rejects absolute and backslash-separated paths (473.3417ms) +▶ contract rejects unsupported checkout-equivalence policy values + ✔ bare_cr (963.0427ms) + ✔ transform (977.858ms) + ✔ required_result (959.2091ms) +✔ contract rejects unsupported checkout-equivalence policy values (2900.3876ms) +▶ contract rejects unknown schema keys + ✔ top-level (1056.6354ms) + ✔ representation (945.0011ms) + ✔ checkout-equivalence (1036.3399ms) + ✔ entry (979.4867ms) +✔ contract rejects unknown schema keys (4018.3135ms) +ℹ tests 18 +ℹ suites 0 +ℹ pass 18 +ℹ fail 0 +ℹ cancelled 0 +ℹ skipped 0 +ℹ todo 0 +ℹ duration_ms 9110.0766 +ℹ start of coverage report +ℹ ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +ℹ file | line % | branch % | funcs % | uncovered lines +ℹ ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +ℹ .agent | | | | +ℹ reports | | | | +ℹ evidence | | | | +ℹ production-ready | | | | +ℹ db-embedding-stats-evidence-transport | | | | +ℹ verify-manifest.cjs | 84.46 | 50.38 | 100.00 | 74-76 87-88 90-94 117-119 123-124 139-140 153-154 159-160 164-165 186-188 192-193 206-208 259-260 262-263 273-274 276-277 303-305 322-323 325-326 328-329 333-334 350-351 362-363 378-379 381-382 384-385 387-388 390-391 424-432 507-508 510-511 513-514 516-517 519-520 522-523 525-526 529-530 537-538 602-608 648-650 +ℹ verify-manifest.test.cjs | 100.00 | 97.10 | 100.00 | +ℹ ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +ℹ all files | 89.10 | 66.50 | 100.00 | +ℹ ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +ℹ end of coverage report diff --git a/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r2-checker/runs/windows-git-object.json b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r2-checker/runs/windows-git-object.json new file mode 100644 index 00000000..116a222b --- /dev/null +++ b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r2-checker/runs/windows-git-object.json @@ -0,0 +1,94 @@ +{ + "schema_version": 1, + "slice": "DB-EMBEDDING-EVIDENCE-TRANSPORT", + "mode": "git-object", + "status": "PASS", + "source_commit": "38d6a4fb7ff5f5ae3b6c0066c0a1b806421137df", + "source_commit_is_ancestor": true, + "algorithm": "sha256", + "representation": "git-blob-content", + "total": 7, + "matched": 7, + "git_object_matches": 7, + "raw_checkout_matches": 0, + "checkout_lf_matches": 7, + "checkout": { + "core_autocrlf": "true", + "eol_counts": { + "crlf": 7 + } + }, + "structural_errors": [], + "entries": [ + { + "path": "internal/embedding/store.go", + "git_blob_oid": "1abaee96b07583f9fd824ed03c40b043c490b567", + "git_object_match": true, + "raw_checkout_match": false, + "checkout_lf_match": true, + "checkout_eol": "crlf", + "crlf_pairs": 287, + "bare_carriage_returns": 0 + }, + { + "path": "internal/embedding/store_stats_test.go", + "git_blob_oid": "d381643deadbb42e8a9a07fc9375a6cdfedbdccc", + "git_object_match": true, + "raw_checkout_match": false, + "checkout_lf_match": true, + "checkout_eol": "crlf", + "crlf_pairs": 268, + "bare_carriage_returns": 0 + }, + { + "path": ".agent/specs/db-embedding-stats/evidence/DB-EMBEDDING-STATS.red.json", + "git_blob_oid": "48db3052d1ff53fa7cd5f61d0371dd1be0e780bd", + "git_object_match": true, + "raw_checkout_match": false, + "checkout_lf_match": true, + "checkout_eol": "crlf", + "crlf_pairs": 8, + "bare_carriage_returns": 0 + }, + { + "path": ".agent/specs/db-embedding-stats/evidence/DB-EMBEDDING-STATS.tdd.json", + "git_blob_oid": "4d94a57de67a41b718073e403cd894843dcffa0d", + "git_object_match": true, + "raw_checkout_match": false, + "checkout_lf_match": true, + "checkout_eol": "crlf", + "crlf_pairs": 35, + "bare_carriage_returns": 0 + }, + { + "path": ".agent/specs/db-embedding-stats/evidence/coverage.out", + "git_blob_oid": "457c38e08408c534032a7a962969c762fa1fad8c", + "git_object_match": true, + "raw_checkout_match": false, + "checkout_lf_match": true, + "checkout_eol": "crlf", + "crlf_pairs": 240, + "bare_carriage_returns": 0 + }, + { + "path": ".agent/reports/2026-07-10-db-embedding-stats-maker.md", + "git_blob_oid": "8a3d45057e7c869e3eec8925a25a341158209f01", + "git_object_match": true, + "raw_checkout_match": false, + "checkout_lf_match": true, + "checkout_eol": "crlf", + "crlf_pairs": 52, + "bare_carriage_returns": 0 + }, + { + "path": ".agent/reports/evidence/production-ready/db-embedding-stats/DB-EMBEDDING-STATS.final.json", + "git_blob_oid": "1fa3cb6c4dc1fba849f50f33a42a3f2d1f2b23fd", + "git_object_match": true, + "raw_checkout_match": false, + "checkout_lf_match": true, + "checkout_eol": "crlf", + "crlf_pairs": 42, + "bare_carriage_returns": 0 + } + ] +} diff --git a/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r2-checker/runs/windows-legacy-raw-audit.json b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r2-checker/runs/windows-legacy-raw-audit.json new file mode 100644 index 00000000..f16b5626 --- /dev/null +++ b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r2-checker/runs/windows-legacy-raw-audit.json @@ -0,0 +1,94 @@ +{ + "schema_version": 1, + "slice": "DB-EMBEDDING-EVIDENCE-TRANSPORT", + "mode": "legacy-raw-audit", + "status": "AMBIGUOUS_RAW_CHECKOUT_CONFIRMED", + "source_commit": "38d6a4fb7ff5f5ae3b6c0066c0a1b806421137df", + "source_commit_is_ancestor": true, + "algorithm": "sha256", + "representation": "git-blob-content", + "total": 7, + "matched": 7, + "git_object_matches": 7, + "raw_checkout_matches": 0, + "checkout_lf_matches": 7, + "checkout": { + "core_autocrlf": "true", + "eol_counts": { + "crlf": 7 + } + }, + "structural_errors": [], + "entries": [ + { + "path": "internal/embedding/store.go", + "git_blob_oid": "1abaee96b07583f9fd824ed03c40b043c490b567", + "git_object_match": true, + "raw_checkout_match": false, + "checkout_lf_match": true, + "checkout_eol": "crlf", + "crlf_pairs": 287, + "bare_carriage_returns": 0 + }, + { + "path": "internal/embedding/store_stats_test.go", + "git_blob_oid": "d381643deadbb42e8a9a07fc9375a6cdfedbdccc", + "git_object_match": true, + "raw_checkout_match": false, + "checkout_lf_match": true, + "checkout_eol": "crlf", + "crlf_pairs": 268, + "bare_carriage_returns": 0 + }, + { + "path": ".agent/specs/db-embedding-stats/evidence/DB-EMBEDDING-STATS.red.json", + "git_blob_oid": "48db3052d1ff53fa7cd5f61d0371dd1be0e780bd", + "git_object_match": true, + "raw_checkout_match": false, + "checkout_lf_match": true, + "checkout_eol": "crlf", + "crlf_pairs": 8, + "bare_carriage_returns": 0 + }, + { + "path": ".agent/specs/db-embedding-stats/evidence/DB-EMBEDDING-STATS.tdd.json", + "git_blob_oid": "4d94a57de67a41b718073e403cd894843dcffa0d", + "git_object_match": true, + "raw_checkout_match": false, + "checkout_lf_match": true, + "checkout_eol": "crlf", + "crlf_pairs": 35, + "bare_carriage_returns": 0 + }, + { + "path": ".agent/specs/db-embedding-stats/evidence/coverage.out", + "git_blob_oid": "457c38e08408c534032a7a962969c762fa1fad8c", + "git_object_match": true, + "raw_checkout_match": false, + "checkout_lf_match": true, + "checkout_eol": "crlf", + "crlf_pairs": 240, + "bare_carriage_returns": 0 + }, + { + "path": ".agent/reports/2026-07-10-db-embedding-stats-maker.md", + "git_blob_oid": "8a3d45057e7c869e3eec8925a25a341158209f01", + "git_object_match": true, + "raw_checkout_match": false, + "checkout_lf_match": true, + "checkout_eol": "crlf", + "crlf_pairs": 52, + "bare_carriage_returns": 0 + }, + { + "path": ".agent/reports/evidence/production-ready/db-embedding-stats/DB-EMBEDDING-STATS.final.json", + "git_blob_oid": "1fa3cb6c4dc1fba849f50f33a42a3f2d1f2b23fd", + "git_object_match": true, + "raw_checkout_match": false, + "checkout_lf_match": true, + "checkout_eol": "crlf", + "crlf_pairs": 42, + "bare_carriage_returns": 0 + } + ] +} diff --git a/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r2-checker/target-audit.json b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r2-checker/target-audit.json new file mode 100644 index 00000000..d88baa0f --- /dev/null +++ b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r2-checker/target-audit.json @@ -0,0 +1,80 @@ +{ + "schema_version": 1, + "target": "db2cf891dd9c6315fd17220ffe2d02302bea8844", + "target_tree": "6a450d3f0b83ce2afd95910da1516411a2134514", + "parent": "580b0cd0ff38bb55a5195a8004e60234a824b7a8", + "base": "580b0cd0ff38bb55a5195a8004e60234a824b7a8", + "base_to_target_commit_count": 1, + "source_commit": "38d6a4fb7ff5f5ae3b6c0066c0a1b806421137df", + "source_is_ancestor": true, + "checkpoint": "53b2ef1931c534e27183126a1aad2d46b3a854b2", + "checkpoint_is_ancestor": false, + "changed_path_count": 9, + "changed_paths": [ + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r2/SHA256SUMS.txt", + "git_blob_oid": "6fbef4d23f5a647952d694549d3d3f55cf6ab034", + "sha256": "a723782459ee52b40db3c3105a138347a62354b48f1ec7fab4c3378a58617780", + "bytes": 1677 + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r2/maker-summary.v1.json", + "git_blob_oid": "1e2b57092c1f6129d708f0dd1c37da79307f58cd", + "sha256": "5e6271fe6eaa8361247221263ac640af426e25be01c88f558e2d85a84773fd65", + "bytes": 1583 + }, + { + "status": "M", + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/ARTIFACTS.sha256", + "git_blob_oid": "92585baa7da8767348794394d63e63ff35de37be", + "sha256": "a08508ce15f5ba89c60971536bd6ef0aa5127b102c52560bcda1c3a829f7fecb", + "bytes": 983 + }, + { + "status": "M", + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/maker-report.md", + "git_blob_oid": "c827109915a379df03f943af58853bb3459d5866", + "sha256": "3b7f5ad0abcccd39f0d5ce9349fceb8cca4794e1bf537943e4b38ce629357dbb", + "bytes": 7029 + }, + { + "status": "M", + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verification-observations.v1.json", + "git_blob_oid": "c73fa547cb74c7b6d33a88f98bf5cd5f6805053f", + "sha256": "d99f3499b2e5c371ababdffc84410e1dcc8b028373ae00483136ae0eb6bf509a", + "bytes": 4168 + }, + { + "status": "M", + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.cjs", + "git_blob_oid": "9f8424f1ea8ed5accac11ff6f019efdad9573cf9", + "sha256": "4f46e0f020fd7aae39b327adac7a9070d744f66fa26124f652d25470fa409114", + "bytes": 22901 + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.test.cjs", + "git_blob_oid": "c9c08dd99095190cc316479eb04c28154fb1ffce", + "sha256": "d0fc0a8b57a3dc1f31210a69ec0b85443995883c41ea8ba818e8d95837b315b3", + "bytes": 8910 + }, + { + "status": "A", + "path": ".agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R2.red.json", + "git_blob_oid": "8c8d439d0bcb448242a05bfef7b0175489f99305", + "sha256": "5a01028809f642d299891de75148170fa2ade1d2e3e949b86f45a5aa92423249", + "bytes": 625 + }, + { + "status": "A", + "path": ".agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R2.tdd.json", + "git_blob_oid": "73f3aa076a2572302cf7717923f35c663e705ba5", + "sha256": "ca517588d678f59b86b627a109bdbc0bd8fc1b49cdd5df4a605ec6cb57da206c", + "bytes": 2219 + } + ], + "product_source_test_delta_vs_source": [], + "product_source_test_delta_vs_base": [] +} From 5dd3e3c4e2f87a52a44465d8a3a63d3b68a55f65 Mon Sep 17 00:00:00 2001 From: Kirill Turanskiy Date: Fri, 10 Jul 2026 17:52:10 +0300 Subject: [PATCH 032/111] ci: pin required session start inventory --- .github/workflows/test.yml | 46 ++++++++++++++++++++++- scripts/production-gates/run-db-suite.ps1 | 17 +++++++++ 2 files changed, 62 insertions(+), 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index ce38dd86..c460afae 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -265,6 +265,47 @@ jobs: } } + function Assert-ExactRequiredSessionStartInventory([System.Management.Automation.Language.ScriptBlockAst]$ast) { + $expectedPackage = 'github.com/thebtf/engram/internal/grpcserver' + $expectedNames = @( + 'TestEC_F1_P1_GRPCSessionStart_FlagOff_ByteIdentity', + 'TestEC_F1_P1_GRPCSessionStart_FlagOn_PrivateCrossWorkstationInvisible', + 'TestEC_F1_P1_GRPCSessionStart_FlagOn_NoCallerIdentity_PrivateInvisible', + 'TestGetSessionStartContext_HappyPath', + 'TestGetSessionStartContext_PrincipalPrivateCrossPrincipalInvisible_FlagOff', + 'TestGetSessionStartContext_MetaSummaryFlagOnDescribesMemoryLandscape', + 'TestGetSessionStartContext_MetaSummaryCountsBeyondResponseCap', + 'TestGetSessionStartContext_MetaSummaryFlagOffOmitted', + 'TestGetSessionStartContext_MetaSummaryFlagOnEmptyProjectIsBoundedAndContentFree', + 'TestGetSessionStartContext_T014_MetaSummaryRequiresMasterAndS2Flags', + 'TestGetSessionStartContext_RuleRouterEnabledPacketShape', + 'TestGetSessionStartContext_DefaultLimits' + ) + + $inventoryFunctions = @($ast.FindAll({ param($node) $node -is [System.Management.Automation.Language.FunctionDefinitionAst] -and $node.Name -ceq 'Get-RequiredSessionStartTestNames' }, $true)) + if ($inventoryFunctions.Count -ne 1) { throw "Get-RequiredSessionStartTestNames cardinality must be exactly 1; found $($inventoryFunctions.Count)" } + $actualNames = @($inventoryFunctions[0].Body.FindAll({ param($node) $node -is [System.Management.Automation.Language.StringConstantExpressionAst] }, $true) | ForEach-Object Value) + if ($actualNames.Count -ne $expectedNames.Count) { throw "required session-start identity cardinality must be exactly 12; found $($actualNames.Count)" } + for ($identityIndex = 0; $identityIndex -lt $expectedNames.Count; $identityIndex++) { + if ([string]$actualNames[$identityIndex] -cne $expectedNames[$identityIndex]) { throw "required session-start identity drifted at index ${identityIndex}: '$([string]$actualNames[$identityIndex])'" } + } + + $proofFunctions = @($ast.FindAll({ param($node) $node -is [System.Management.Automation.Language.FunctionDefinitionAst] -and $node.Name -ceq 'Get-RequiredSessionStartExecutionProof' }, $true)) + if ($proofFunctions.Count -ne 1) { throw "Get-RequiredSessionStartExecutionProof cardinality must be exactly 1; found $($proofFunctions.Count)" } + $packageAssignments = @($proofFunctions[0].Body.FindAll({ + param($node) + $node -is [System.Management.Automation.Language.AssignmentStatementAst] -and $node.Left.Extent.Text -ceq '$package' -and + (ConvertTo-AstShape $node.Right.Extent.Text) -ceq (ConvertTo-AstShape ("'" + $expectedPackage + "'")) + }, $true)) + if ($packageAssignments.Count -ne 1) { throw "required session-start package must be exactly '$expectedPackage'" } + $inventoryAssignments = @($proofFunctions[0].Body.FindAll({ + param($node) + $node -is [System.Management.Automation.Language.AssignmentStatementAst] -and $node.Left.Extent.Text -ceq '$expectedNames' -and + (ConvertTo-AstShape $node.Right.Extent.Text) -ceq (ConvertTo-AstShape '@(Get-RequiredSessionStartTestNames)') + }, $true)) + if ($inventoryAssignments.Count -ne 1) { throw 'execution proof does not consume the pinned required session-start identity inventory exactly once' } + } + function Get-ExactRuntimeAssignment( [System.Management.Automation.Language.ScriptBlockAst]$ast, [string]$left, @@ -292,6 +333,7 @@ jobs: } function Assert-LiveSessionStartExecutionContract([System.Management.Automation.Language.ScriptBlockAst]$ast) { + Assert-ExactRequiredSessionStartInventory $ast $nameFunctions = @($ast.FindAll({ param($node) $node -is [System.Management.Automation.Language.FunctionDefinitionAst] -and $node.Name -ceq 'New-RunDatabaseName' }, $true)) if ($nameFunctions.Count -ne 1) { throw "New-RunDatabaseName cardinality must be exactly 1; found $($nameFunctions.Count)" } $nameAssignments = @($nameFunctions[0].Body.FindAll({ @@ -606,6 +648,8 @@ jobs: $deadProofReplacement = $proofIndent + '# ' + $proofLine.TrimStart() + "`n" + $proofIndent + '$sessionStartExecutionProof = [pscustomobject]@{ verdict = ''PASS''; executed = 12; skipped = 0; missing = 0 }' $deadProofRunner = $dbRunner.Replace($proofLine, $deadProofReplacement) Assert-MutationRejected 'comment-only session-start execution proof' { Assert-WorkflowContract $workflow $critical $stand $deadProofRunner $criticalRunner $devStandRunner } + Assert-MutationRejected 'substitute one required session-start identity' { Assert-WorkflowContract $workflow $critical $stand ($dbRunner.Replace("'TestEC_F1_P1_GRPCSessionStart_FlagOff_ByteIdentity'", "'TestCredentialDecryptRoundTripAfterMigration'")) $criticalRunner $devStandRunner } + Assert-MutationRejected 'substitute required session-start package' { Assert-WorkflowContract $workflow $critical $stand ($dbRunner.Replace("'github.com/thebtf/engram/internal/grpcserver'", "'github.com/thebtf/engram/internal/mcp'")) $criticalRunner $devStandRunner } Assert-MutationRejected 'remove literal-test database identity' { Assert-WorkflowContract $workflow $critical $stand ($dbRunner.Replace('$databaseName = New-RunDatabaseName -RequestedRunId $RunId -RepeatIndex $repeatIndex', '$databaseName = "engram_prc_rg_${safeRunToken}_r$repeatIndex"')) $criticalRunner $devStandRunner } Assert-MutationRejected 'bypass required session-start execution proof' { Assert-WorkflowContract $workflow $critical $stand ($dbRunner.Replace('$sessionStartExecutionProof = Get-RequiredSessionStartExecutionProof $goTestSummary', '$sessionStartExecutionProof = [pscustomobject]@{ verdict = ''PASS''; executed = 12; skipped = 0; missing = 0 }')) $criticalRunner $devStandRunner } Assert-MutationRejected 'remove no-build launch lock' { Assert-WorkflowContract $workflow $critical $stand ($dbRunner.Replace("'--no-build'", "'--renew-anon-volumes'")) $criticalRunner $devStandRunner } @@ -620,7 +664,7 @@ jobs: Assert-MutationRejected 'change ownership current owner' { Assert-WorkflowContract $workflow $critical $stand $dbRunner $criticalRunner $devStandRunner -stateText ($ownershipState.Replace('"current_owner": "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK"', '"current_owner": "DB-BULKOPS"')) } Assert-MutationRejected 'remove rejected predecessor evidence' { Assert-WorkflowContract $workflow $critical $stand $dbRunner $criticalRunner $devStandRunner -stateText ($ownershipState.Replace($rejectedBulkCheckerSha, '')) } Assert-MutationRejected 'change exact rejected successor base' { Assert-WorkflowContract $workflow $critical $stand $dbRunner $criticalRunner $devStandRunner -stateText ($ownershipState.Replace($rejectedBulkHead, ('1' * 40))) } - Write-Output 'CONFORMANCE PASS: canonical LF/CRLF authority, exact wrappers, path budget, AST-validated reachable exactly-once source-built image provenance and Scout, 12-test zero-skip DB execution proof, ownership state, node matrix, readiness, cleanup, and full/race semantics match; 42 mutations rejected' + Write-Output 'CONFORMANCE PASS: canonical LF/CRLF authority, exact wrappers, path budget, AST-validated reachable exactly-once source-built image provenance and Scout, immutable package plus 12-test zero-skip DB execution proof, ownership state, node matrix, readiness, cleanup, and full/race semantics match; 44 mutations rejected' - name: Resolve PostgreSQL service identity shell: pwsh diff --git a/scripts/production-gates/run-db-suite.ps1 b/scripts/production-gates/run-db-suite.ps1 index b9212620..5740f1f0 100644 --- a/scripts/production-gates/run-db-suite.ps1 +++ b/scripts/production-gates/run-db-suite.ps1 @@ -935,8 +935,25 @@ function Invoke-SelfTest { Assert-SelfTestCondition ($testOnlyDatabase -match '^engram_prc_rg_test_[a-f0-9]{16}_r20$') 'fresh database name is not an unambiguous literal-test identity' Assert-SelfTestCondition ($testOnlyDatabase -notmatch '(?i)prod|production|staging') 'operator run id leaked a production-like token into the test database name' $requiredPackage = 'github.com/thebtf/engram/internal/grpcserver' + $pinnedRequiredTests = @( + 'TestEC_F1_P1_GRPCSessionStart_FlagOff_ByteIdentity', + 'TestEC_F1_P1_GRPCSessionStart_FlagOn_PrivateCrossWorkstationInvisible', + 'TestEC_F1_P1_GRPCSessionStart_FlagOn_NoCallerIdentity_PrivateInvisible', + 'TestGetSessionStartContext_HappyPath', + 'TestGetSessionStartContext_PrincipalPrivateCrossPrincipalInvisible_FlagOff', + 'TestGetSessionStartContext_MetaSummaryFlagOnDescribesMemoryLandscape', + 'TestGetSessionStartContext_MetaSummaryCountsBeyondResponseCap', + 'TestGetSessionStartContext_MetaSummaryFlagOffOmitted', + 'TestGetSessionStartContext_MetaSummaryFlagOnEmptyProjectIsBoundedAndContentFree', + 'TestGetSessionStartContext_T014_MetaSummaryRequiresMasterAndS2Flags', + 'TestGetSessionStartContext_RuleRouterEnabledPacketShape', + 'TestGetSessionStartContext_DefaultLimits' + ) $requiredTests = @(Get-RequiredSessionStartTestNames) Assert-SelfTestCondition ($requiredTests.Count -eq 12) 'required session-start execution inventory is not exactly 12 tests' + for ($requiredIndex = 0; $requiredIndex -lt $pinnedRequiredTests.Count; $requiredIndex++) { + Assert-SelfTestCondition ($requiredTests[$requiredIndex] -ceq $pinnedRequiredTests[$requiredIndex]) "required session-start identity drifted at index $requiredIndex" + } $passingEvents = @($requiredTests | ForEach-Object { [pscustomobject]@{ package = $requiredPackage; test = $_; outcome = 'pass' } }) $passingProof = Get-RequiredSessionStartExecutionProof ([pscustomobject]@{ tests = $passingEvents }) Assert-SelfTestCondition ($passingProof.verdict -eq 'PASS' -and $passingProof.executed -eq 12 -and $passingProof.skipped -eq 0) '12/12 executed session-start tests were rejected' From d59d1605969b1f567506e96ded524dfd1e4be08a Mon Sep 17 00:00:00 2001 From: Kirill Turanskiy Date: Fri, 10 Jul 2026 18:32:50 +0300 Subject: [PATCH 033/111] docs: refresh release gate revision 5 evidence --- .agent/e/rg4/r5-maker/SHA256SUMS | 8 +- .agent/e/rg4/r5-maker/fail.json | 60 ++++++++----- .agent/e/rg4/r5-maker/manifest.json | 42 ++++----- .agent/e/rg4/r5-maker/proof.json | 77 +++++++++++------ .agent/e/rg4/r5-maker/report.md | 128 ++++++++++++++-------------- 5 files changed, 181 insertions(+), 134 deletions(-) diff --git a/.agent/e/rg4/r5-maker/SHA256SUMS b/.agent/e/rg4/r5-maker/SHA256SUMS index 18190a34..1467fe5c 100644 --- a/.agent/e/rg4/r5-maker/SHA256SUMS +++ b/.agent/e/rg4/r5-maker/SHA256SUMS @@ -1,4 +1,4 @@ -12B183D6B1B65C83D991F29BC91787F41CC971E9F10D39D82EE583DE204109EF .agent/e/rg4/r5-maker/report.md -2E1EAD4AEAC35762319EE508FE9D1DE3CEDBAE17D0A9020DB5E23115CD699FED .agent/e/rg4/r5-maker/proof.json -AFBAA86743F852D49B46B05BC687EC50C5176B85B94B9477A9E71A43C41D11CF .agent/e/rg4/r5-maker/fail.json -05B390493E0D123FBA9AC5E58E35CA7CAC1D65A46630E7E1AB5F46F65B3F2928 .agent/e/rg4/r5-maker/manifest.json +D4E24193A128FEC73731D436493FB1B3383A7D207C38091E8ED2592C7D28EBC1 .agent/e/rg4/r5-maker/report.md +9BC8EF996EB63E31FA1AA0C85B5A706150D9DE07804DC12B5300156C60667535 .agent/e/rg4/r5-maker/proof.json +D8038B65FE07AFDB4826CCC30617025B7114C9083E9BB492BE0112CBC4BF80B1 .agent/e/rg4/r5-maker/fail.json +46C0E13CA2F21329976901DCB73AE8391882225DB6E7ECAD0670658955620DD5 .agent/e/rg4/r5-maker/manifest.json diff --git a/.agent/e/rg4/r5-maker/fail.json b/.agent/e/rg4/r5-maker/fail.json index 9606f12f..2ed33d01 100644 --- a/.agent/e/rg4/r5-maker/fail.json +++ b/.agent/e/rg4/r5-maker/fail.json @@ -3,7 +3,9 @@ "gate": "revision-5-truthful-project-red", "verdict": "BLOCKED", "full_project_gate": { - "repeat_test_failures": [29, 30, 29], + "repeat_test_counts": [3516, 3516, 3516], + "repeat_passed": [3472, 3471, 3473], + "repeat_failed": [30, 29, 30], "stable_failed_tests": [ "internal/bulkops::TestEC_F3_ConflictDetected_Integration", "internal/bulkops::TestFacade_BulkDelete_Committed_AuditLogWritten", @@ -35,7 +37,16 @@ "internal/worker::TestHandleSetBehavioralRuleEnabled_Success", "internal/worker/reaper::TestReaper_RespectsRetentionEnvVar" ], - "repeat_2_only_failure": "internal/bulkops::TestRollback_Conflict_EC_F3", + "intermittent_failure": { + "test": "internal/bulkops::TestRollback_Conflict_EC_F3", + "failed_repeats": [1, 3], + "passed_repeat": 2 + }, + "incomplete_terminal_records": [ + { "repeat": 1, "count": 1, "tests": ["internal/worker/reaper::TestReaper_StopsOnContextCancel"] }, + { "repeat": 2, "count": 3, "tests": ["internal/worker/reaper::TestReaper_PreservesUnexpired", "internal/worker/reaper::TestReaper_PurgesExpired", "internal/worker/reaper::TestReaper_StopsOnContextCancel"] }, + { "repeat": 3, "count": 0, "tests": [] } + ], "unexpected_skips_each_repeat": 13, "unexpected_skip_inventory": [ "internal/db/gorm::TestMigrationsIntegration_AddsCommandsRunColumn", @@ -53,41 +64,48 @@ "internal/worker::TestStaticEmbedIncludesUnderscoreNuxtChunks" ], "required_session_start_tests": { + "package": "github.com/thebtf/engram/internal/grpcserver", "expected_each_repeat": 12, + "observed_each_repeat": 12, "executed_each_repeat": 12, "skipped_each_repeat": 0, "missing_each_repeat": 0, + "duplicate_each_repeat": 0, + "incomplete_each_repeat": 0, "failed_product_assertions_each_repeat": [ "internal/grpcserver::TestGetSessionStartContext_HappyPath", "internal/grpcserver::TestGetSessionStartContext_RuleRouterEnabledPacketShape" ] }, "coverage": { - "overall_percent": [53.35, 53.35, 53.35], + "overall_percent": [53.33, 53.35, 53.35], "overall_floor": 60.0, "failed_package_floors": { - "internal/handlers/loom": "64.77 < 70", - "cmd/engram": "6.39 < 10", - "cmd/engram-server": "0 < 10", - "internal/update": "0 < 20", - "internal/worker": "46.77 < 55", - "internal/mcp": "46.23 < 55", - "internal/db/gorm": "49.17 < 55" + "internal/handlers/loom": { "actual": [64.77, 64.77, 64.77], "floor": 70.0 }, + "cmd/engram": { "actual": [6.39, 6.39, 6.39], "floor": 10.0 }, + "cmd/engram-server": { "actual": [0.0, 0.0, 0.0], "floor": 10.0 }, + "internal/update": { "actual": [0.0, 0.0, 0.0], "floor": 20.0 }, + "internal/worker": { "actual": [46.77, 46.77, 46.77], "floor": 55.0 }, + "internal/mcp": { "actual": [46.23, 46.23, 46.23], "floor": 55.0 }, + "internal/db/gorm": { "actual": [49.10, 49.17, 49.17], "floor": 55.0 } } }, "cleanup": { "repeat_cleanup_exit_codes": [0, 0, 0], "direct_sql_residual_databases": 0, "direct_sql_residual_sessions": 0, + "compose_containers": 0, + "compose_volumes": 0, + "compose_networks": 0, "shared_postgres_container_left_running": true } }, "image_scan": { "verdict": "FAIL_FINDINGS", - "exact_immutable_image_findings": { - "operator-console": 5, - "postgres": 20, - "server": 13 + "exact_immutable_images": { + "operator-console": { "id": "sha256:d701b9ace90ed8b689f45b90fbdf87ed1c9b2a81b7a237fa5d7fd909405df9f9", "findings": 5 }, + "postgres": { "id": "sha256:d2ef61f42ef767baa5a1475393303cc235bcd92febd9d7014eddb48b41f3bad0", "findings": 20 }, + "server": { "id": "sha256:c75d6cd0fd5fd5a569d1c5c4eca0200e4c9de3374dbf7d316390c064af9e4bf0", "findings": 13 } }, "down_cleanup": "PASS", "residual_resources_zero": true @@ -95,13 +113,17 @@ "openclaw": { "verdict": "FAIL_MISSING_TRACKED_LOCK", "executed_steps": 0, + "pre_surface_clean": true, + "post_surface_clean": true, "cleanup": "PASS" }, "gitleaks_diagnostic": { - "implementation_patch_findings": 0, - "working_tree_no_git_findings": 30, - "working_tree_breakdown": "16 ignored raw runtime-evidence hits plus 14 existing tracked fixture/doc/script hits", - "routing": "Project-wide secret-negative classification remains release work; revision 5 introduced no patch finding." + "implementation_diff_findings": 0, + "working_tree_no_git_findings": 62, + "ignored_runtime_evidence_findings": 48, + "existing_tracked_fixture_doc_script_findings": 14, + "redacted_report_sha256": "60FC8185A4E4207129D6076AF27C2E6E58922D34720A0E19C266C6BC7A3D6F42", + "routing": "Project-wide secret-negative classification remains release work; revision 5 introduced no implementation-diff finding." }, - "routing": "Existing master-plan lanes own product/test/coverage/image/OpenClaw/secret blockers. RELEASE-GATES does not allowlist, suppress, threshold-reduce, or patch them. v5-demolished graph paths remain classification-only." + "routing": "Existing master-plan lanes own product/test/incomplete/coverage/image/OpenClaw/secret blockers. RELEASE-GATES does not allowlist, suppress, threshold-reduce, or patch them. v5-demolished graph paths remain classification-only." } diff --git a/.agent/e/rg4/r5-maker/manifest.json b/.agent/e/rg4/r5-maker/manifest.json index 01c9f049..c1abe985 100644 --- a/.agent/e/rg4/r5-maker/manifest.json +++ b/.agent/e/rg4/r5-maker/manifest.json @@ -9,29 +9,31 @@ }, "authority": { "base": "4812589b9920c187a92a03d210d2e9d5eb53862f", - "implementation_commit": "eb44a8e694c60856176c93c64080002231648b4b", - "implementation_parent": "4812589b9920c187a92a03d210d2e9d5eb53862f", + "primary_implementation_commit": "eb44a8e694c60856176c93c64080002231648b4b", + "superseded_evidence_commit": "135e4a0a180f112906e89c211f976ce519212347", + "effective_implementation_commit": "5dd3e3c4e2f87a52a44465d8a3a63d3b68a55f65", + "effective_implementation_parent": "135e4a0a180f112906e89c211f976ce519212347", "final_evidence_commit": "SUPPLIED_OUT_OF_BAND_AFTER_COMMIT", - "final_evidence_parent_required": "eb44a8e694c60856176c93c64080002231648b4b" + "final_evidence_parent_required": "5dd3e3c4e2f87a52a44465d8a3a63d3b68a55f65" }, "entries": [ { "path": ".github/workflows/test.yml", - "commit": "eb44a8e694c60856176c93c64080002231648b4b", + "commit": "5dd3e3c4e2f87a52a44465d8a3a63d3b68a55f65", "representation": "git-blob-lf", - "git_blob_oid_sha1": "ce38dd8676c8b8113b5a8cfe7eebc3b01d0d4d90", - "sha256": "3291F5D40C7E00FC4A60E7546FE0D43EACF5721C87918CADF995A42AA51354AD", - "bytes": 65789, + "git_blob_oid_sha1": "c460afae38da5ee9c008b5273f4808fc961d91cf", + "sha256": "5AEABA51399575B1E12B13C4260BDA7BC476D36313D9ED1AFDC499D5013E3A50", + "bytes": 70106, "cr_bytes": 0, "utf8_bom": false }, { "path": "scripts/production-gates/run-db-suite.ps1", - "commit": "eb44a8e694c60856176c93c64080002231648b4b", + "commit": "5dd3e3c4e2f87a52a44465d8a3a63d3b68a55f65", "representation": "git-blob-lf", - "git_blob_oid_sha1": "b9212620920aaf1cba28029f80e108735033a5cb", - "sha256": "312D2C690951E0645AA0168312C50BFF26DF21D56F2AE9EC5A88829BCCCA2E58", - "bytes": 94835, + "git_blob_oid_sha1": "5740f1f0db48ad5299cc8649395ef77e3d5bcf6c", + "sha256": "61DC18574F07E45C573302D4D938C082D29E10876E2E56EEC51F20B3DA4902BD", + "bytes": 96079, "cr_bytes": 0, "utf8_bom": false }, @@ -39,9 +41,9 @@ "path": ".agent/e/rg4/r5-maker/report.md", "commit": "FINAL_EVIDENCE_COMMIT", "representation": "git-blob-lf", - "git_blob_oid_sha1": "0921168175b0551ce3fc96318113d59187a33423", - "sha256": "12B183D6B1B65C83D991F29BC91787F41CC971E9F10D39D82EE583DE204109EF", - "bytes": 7337, + "git_blob_oid_sha1": "50fc17b9a18eb8eaa6422f175d549a2000b49697", + "sha256": "D4E24193A128FEC73731D436493FB1B3383A7D207C38091E8ED2592C7D28EBC1", + "bytes": 8364, "cr_bytes": 0, "utf8_bom": false }, @@ -49,9 +51,9 @@ "path": ".agent/e/rg4/r5-maker/proof.json", "commit": "FINAL_EVIDENCE_COMMIT", "representation": "git-blob-lf", - "git_blob_oid_sha1": "d79b4bb4e43be6ee9a5582e09ede6ff0df888ce6", - "sha256": "2E1EAD4AEAC35762319EE508FE9D1DE3CEDBAE17D0A9020DB5E23115CD699FED", - "bytes": 6792, + "git_blob_oid_sha1": "6519b85899e7580dcb9efc5ed74e75b329034fd2", + "sha256": "9BC8EF996EB63E31FA1AA0C85B5A706150D9DE07804DC12B5300156C60667535", + "bytes": 8160, "cr_bytes": 0, "utf8_bom": false }, @@ -59,9 +61,9 @@ "path": ".agent/e/rg4/r5-maker/fail.json", "commit": "FINAL_EVIDENCE_COMMIT", "representation": "git-blob-lf", - "git_blob_oid_sha1": "9606f12f3ffb64bfb30fccf718c6f14cb50ac180", - "sha256": "AFBAA86743F852D49B46B05BC687EC50C5176B85B94B9477A9E71A43C41D11CF", - "bytes": 5336, + "git_blob_oid_sha1": "2ed33d01dbf08f25584377fa3d7c7cb3ca632dbd", + "sha256": "D8038B65FE07AFDB4826CCC30617025B7114C9083E9BB492BE0112CBC4BF80B1", + "bytes": 6871, "cr_bytes": 0, "utf8_bom": false } diff --git a/.agent/e/rg4/r5-maker/proof.json b/.agent/e/rg4/r5-maker/proof.json index d79b4bb4..6519b858 100644 --- a/.agent/e/rg4/r5-maker/proof.json +++ b/.agent/e/rg4/r5-maker/proof.json @@ -6,9 +6,12 @@ "base_tree": "764fd987cc606754f037de0647f8a10e7080adc2", "revision_4_checker_commit": "bd6af3dcd1fa0c2675102a1b91e7c59c8c7c85df", "revision_4_checker_report_blob": "27519369cc3e5b79d5188eaf07026cb7076cec13", - "implementation_commit": "eb44a8e694c60856176c93c64080002231648b4b", - "implementation_parent": "4812589b9920c187a92a03d210d2e9d5eb53862f", - "implementation_tree": "8b2ea748407f850222d03bfa1f6662ba9e666e30", + "primary_implementation_commit": "eb44a8e694c60856176c93c64080002231648b4b", + "primary_implementation_parent": "4812589b9920c187a92a03d210d2e9d5eb53862f", + "superseded_evidence_commit": "135e4a0a180f112906e89c211f976ce519212347", + "effective_implementation_commit": "5dd3e3c4e2f87a52a44465d8a3a63d3b68a55f65", + "effective_implementation_parent": "135e4a0a180f112906e89c211f976ce519212347", + "effective_implementation_tree": "5f6465deaebcd0899e27af231550726f2adc37f6", "canonical_plan_sha256": "d7bcfd122e456d9b764595524292d53b0c99447b7f716a1be0707341e4681bf9", "branch": "work/prc-release-gates-revision5-maker", "worktree": "D:/Dev/engram/.agent/worktrees/prc-release-gates-r5-maker" @@ -19,30 +22,31 @@ "scripts/production-gates/run-db-suite.ps1" ], "workflow": { - "git_blob_oid": "ce38dd8676c8b8113b5a8cfe7eebc3b01d0d4d90", + "git_blob_oid": "c460afae38da5ee9c008b5273f4808fc961d91cf", "representation": "git-blob-lf", - "sha256": "3291F5D40C7E00FC4A60E7546FE0D43EACF5721C87918CADF995A42AA51354AD", - "bytes": 65789, + "sha256": "5AEABA51399575B1E12B13C4260BDA7BC476D36313D9ED1AFDC499D5013E3A50", + "bytes": 70106, "cr_bytes": 0, "utf8_bom": false }, "db_runner": { - "git_blob_oid": "b9212620920aaf1cba28029f80e108735033a5cb", + "git_blob_oid": "5740f1f0db48ad5299cc8649395ef77e3d5bcf6c", "representation": "git-blob-lf", - "sha256": "312D2C690951E0645AA0168312C50BFF26DF21D56F2AE9EC5A88829BCCCA2E58", - "bytes": 94835, + "sha256": "61DC18574F07E45C573302D4D938C082D29E10876E2E56EEC51F20B3DA4902BD", + "bytes": 96079, "cr_bytes": 0, "utf8_bom": false } }, "foundation_gates": { "selftests": { "command_exit": 0, "verdict": "PASS", "count": 9 }, - "workflow_conformance": { "command_exit": 0, "verdict": "PASS", "mutations_rejected": 42, "parser": "PowerShell AST" }, - "powershell_parse": { "command_exit": 0, "verdict": "PASS" }, + "workflow_conformance": { "command_exit": 0, "verdict": "PASS", "mutations_rejected": 44, "parser": "PowerShell AST" }, + "powershell_parse": { "command_exit": 0, "verdict": "PASS", "scope": "DB runner and extracted workflow conformance block" }, "actionlint": { "command_exit": 0, "verdict": "PASS" }, "diff_check": { "command_exit": 0, "verdict": "PASS" }, "go_vet": { "command": "go vet ./...", "command_exit": 0, "verdict": "PASS" }, - "gitleaks_implementation_patch": { "command": "git show --format= --patch eb44a8e6... | gitleaks detect --pipe --redact", "command_exit": 0, "verdict": "PASS", "findings": 0 }, + "go_build": { "command": "go build ./...", "command_exit": 0, "verdict": "PASS" }, + "gitleaks_implementation_diff": { "command_exit": 0, "verdict": "PASS", "findings": 0, "base": "4812589b9920c187a92a03d210d2e9d5eb53862f", "head": "5dd3e3c4e2f87a52a44465d8a3a63d3b68a55f65" }, "critical_suite": { "command_exit": 0, "verdict": "PASS", @@ -50,50 +54,55 @@ "passed": 7, "failed": 0, "skipped": 0, - "raw_summary_sha256": "B40AF0A226FDEE976E4CA2243492D387CEC1CCC015179B76386C3AAA54F1E6FA" + "raw_summary_sha256": "C696FEDF8898460DADC89871905AD73F69A0360E8764526584B80BFB4554754E" }, "ownership": { - "ledger": { "command_exit": 0, "verdict": "PASS", "slices": 48, "declarations": 325, "raw_sha256": "59A6448A48E2FEFC388103E34DE107CCC10385EEBB849EE7ABC5120356E356EE" }, - "implementation_diff": { "command_exit": 0, "verdict": "PASS", "changed_paths": 2, "violations": 0, "raw_sha256": "23958E373BC478FEEDFA00B015E166CC375128B3691CD6EE8C61F653E032ADAE" } + "ledger": { "command_exit": 0, "verdict": "PASS", "slices": 48, "declarations": 325, "raw_sha256": "1711F32FE49412F5ED887952EE9ED84E8E62E655724F01B70F325170C775CB20" }, + "implementation_diff": { "command_exit": 0, "verdict": "PASS", "changed_paths": 7, "violations": 0, "raw_sha256": "2F1BDDD39288C8F6B929AF4F268E692E9F206AC8FADE28E51C12ECCF68B502D4" } }, "path_budget": { "command_exit": 0, "verdict": "PASS", - "tracked_paths": 1405, + "tracked_paths": 1410, "longest_combined_length": 166, "ceiling": 240, "violations": 0, - "raw_sha256": "6030C014DD6AD0EF2A3212E76A653753DFAB7633C842B0AC70DD6DCA27E45D10", + "raw_sha256": "F3BECD4CCDB0F08D9613CF2895E00B92BAC655F64DA0CCA70BB8AD39BE1638C5", "fresh_checkout": { "root_length": 66, "core_longpaths": "UNSET", "head_exact": true, "clean": true, "cleanup": true } } }, "database_gate": { + "run_id": "canonical-full-race-repeat3-r5-inventory-pin", "command_exit": 1, "verdict": "EXPECTED_PROJECT_RED", "command_scope": "./... fresh database race repeat 3 fail-on-unexpected-skip full coverage", "database_name_pattern": "engram_prc_rg_test_<16-lower-hex>_rN", + "required_package": "github.com/thebtf/engram/internal/grpcserver", "required_session_start_execution": [ { "repeat": 1, "verdict": "PASS", "expected": 12, "observed": 12, "executed": 12, "passed": 10, "failed": 2, "skipped": 0, "missing": 0, "duplicate": 0, "incomplete": 0, "raw_sha256": "0AF9EBDF4B242ED394D13CE4AB410F7A94E7A0A367B66BB0ABBF1C177DDD0316" }, { "repeat": 2, "verdict": "PASS", "expected": 12, "observed": 12, "executed": 12, "passed": 10, "failed": 2, "skipped": 0, "missing": 0, "duplicate": 0, "incomplete": 0, "raw_sha256": "0AF9EBDF4B242ED394D13CE4AB410F7A94E7A0A367B66BB0ABBF1C177DDD0316" }, { "repeat": 3, "verdict": "PASS", "expected": 12, "observed": 12, "executed": 12, "passed": 10, "failed": 2, "skipped": 0, "missing": 0, "duplicate": 0, "incomplete": 0, "raw_sha256": "0AF9EBDF4B242ED394D13CE4AB410F7A94E7A0A367B66BB0ABBF1C177DDD0316" } ], "project_results": { - "test_failures": [29, 30, 29], + "tests": [3516, 3516, 3516], + "passed": [3472, 3471, 3473], + "failed": [30, 29, 30], "unexpected_skips": [13, 13, 13], - "coverage_percent": [53.35, 53.35, 53.35], + "incomplete": [1, 3, 0], + "coverage_percent": [53.33, 53.35, 53.35], "overall_floor": 60.0, "cleanup_exit": [0, 0, 0], "sessions_before": [0, 0, 0], "sessions_after": [0, 0, 0] }, - "direct_residue": { "databases": 0, "sessions": 0, "shared_postgres": "/engram-prc-postgres|pgvector/pgvector:pg17|true" }, - "raw_summary_sha256": "BD76E6D835C8535E61C057542FABD6E43FE008CBA4AE87FA59DAA926A26BD0F1" + "direct_residue": { "databases": 0, "sessions": 0, "compose_containers": 0, "compose_volumes": 0, "compose_networks": 0, "shared_postgres": "/engram-prc-postgres|pgvector/pgvector:pg17|true" }, + "raw_summary_sha256": "4B98F3D1E296440DFDC1A6023D4EDAE3B6D4B5255083DB666CC0B8CC8339BE15" }, "runtime": { "dev_stand": { "command_exit": 1, "overall_verdict": "EXPECTED_SCAN_RED", - "source_commit": "eb44a8e694c60856176c93c64080002231648b4b", + "source_commit": "5dd3e3c4e2f87a52a44465d8a3a63d3b68a55f65", "source_tracked_clean": true, "up": "PASS", "ready": "PASS", @@ -105,13 +114,17 @@ "prelaunch_running_scan_identity": true, "credentials_distinct_injected_not_persisted": true, "residual_resources_zero": true, - "findings": { "operator-console": 5, "postgres": 20, "server": 13 }, - "raw_summary_sha256": "5B12038479E0B8CF507372B84B417FF648C43CB3DCE3AAB9907E2EA0A797251F", + "images": { + "operator-console": { "id": "sha256:d701b9ace90ed8b689f45b90fbdf87ed1c9b2a81b7a237fa5d7fd909405df9f9", "findings": 5 }, + "postgres": { "id": "sha256:d2ef61f42ef767baa5a1475393303cc235bcd92febd9d7014eddb48b41f3bad0", "findings": 20 }, + "server": { "id": "sha256:c75d6cd0fd5fd5a569d1c5c4eca0200e4c9de3374dbf7d316390c064af9e4bf0", "findings": 13 } + }, + "raw_summary_sha256": "C76843F17D36BBF42427C86FE0A8CDD43F192C3F744EC03D8AAE3A84BF58D067", "action_sha256": { - "up": "11B2FA012EE7CB3C5C522D1E69C1DC14EB1F90E613578B9214105105F05045D0", - "ready": "432DAEAA3D34D125E2C4A5FEC13E2C0279430DA911DC6DDE6E9FEF9CBCAB2507", - "scan": "B7D2BFAC82202FDDBF2DCF5F04EBA74FFF5E11247D48064C140AA02BC9FFDAD4", - "down": "524D0C102F7E5EA2A8E58517889895592FB321B5F94112C8E505B8E2A1412D9B" + "up": "E67D4DC6FA06281E245680D1B3C34243BABF39E7BA4036AE767DE25D4A513A67", + "ready": "240F3D588C37D39B6C4F7AF60F3AEA5F5DE12D730355AC377A07A8CDCB4D84A5", + "scan": "7AA1CDBE7076E5E85D8A4AA798088029B9F6F29B79234B1B94AE2C9B2D8E24C8", + "down": "32F23A2587252A5AFB8BECCAAD0147AB8469C133564F748C1D0DC3BE936F3D17" } }, "openclaw_matrix": { @@ -125,6 +138,14 @@ "raw_summary_sha256": "5449C64632EF3B3A79EB3603CEA8B051DA52B25A861F2759F6B6DF3E61A745CE" } }, + "secret_diagnostic": { + "implementation_diff_findings": 0, + "working_tree_no_git_exit": 1, + "working_tree_no_git_findings": 62, + "ignored_runtime_findings": 48, + "existing_tracked_findings": 14, + "redacted_report_sha256": "60FC8185A4E4207129D6076AF27C2E6E58922D34720A0E19C266C6BC7A3D6F42" + }, "environment": { "os": "Microsoft Windows 10.0.26200", "arch": "X64", diff --git a/.agent/e/rg4/r5-maker/report.md b/.agent/e/rg4/r5-maker/report.md index 09211681..50fc17b9 100644 --- a/.agent/e/rg4/r5-maker/report.md +++ b/.agent/e/rg4/r5-maker/report.md @@ -1,48 +1,51 @@ -# RELEASE-GATES Foundation Revision 5 — Maker Handoff +# RELEASE-GATES Revision 5 Maker Evidence -Status: `REVIEW_REQUIRED` -Foundation verdict: `READY_FOR_INDEPENDENT_CHECK` -Project-wide production verdict: `BLOCKED` -Exact revision-4 candidate/base: `4812589b9920c187a92a03d210d2e9d5eb53862f` -Revision-4 checker evidence commit: `bd6af3dcd1fa0c2675102a1b91e7c59c8c7c85df` -Revision-4 checker report blob: `27519369cc3e5b79d5188eaf07026cb7076cec13` -Revision-5 implementation commit: `eb44a8e694c60856176c93c64080002231648b4b` -Canonical UTF-8/LF plan SHA256: `d7bcfd122e456d9b764595524292d53b0c99447b7f716a1be0707341e4681bf9` +Maker verdict: `READY_FOR_INDEPENDENT_CHECK` for the release-gate foundation only. -## Outcome +Project release verdict: `BLOCKED`. The gate now reports the current failures, skips, coverage deficits, image vulnerabilities, OpenClaw lock defect, and secret-scan classifications without converting them into success. -Revision 5 closes both release-gate false-green classes found by the independent revision-4 checker. +## Authority -1. Workflow conformance now parses the actual PowerShell AST. It binds exact executable/argument/assignment/function/branch/loop shapes, rejects parse errors, requires one reachable live Docker build and one reachable live Docker Scout command, and rejects comments, dead strings, unreachable branches, duplicate canonical calls, and renamed duplicate calls. The live source/build/pull/post-build/image/launch/scan order and exact image map remain locked. -2. Fresh database identities are now `engram_prc_rg_test__rN`. The caller run ID is hashed so operator-controlled `prod`, `production`, or `staging` text cannot poison the test-only guard. Every unfiltered canonical `./...` repeat emits a fail-closed proof for the exact 12 required gRPC session-start tests. Pass and fail are both executed terminal outcomes; skip, missing, duplicate, or incomplete is fatal. +- Challenged revision-4 candidate/base: `4812589b9920c187a92a03d210d2e9d5eb53862f` (tree `764fd987cc606754f037de0647f8a10e7080adc2`). +- Revision-4 independent checker: commit `bd6af3dcd1fa0c2675102a1b91e7c59c8c7c85df`, report blob `27519369cc3e5b79d5188eaf07026cb7076cec13`. +- Primary revision-5 implementation: `eb44a8e694c60856176c93c64080002231648b4b`, direct parent `4812589b9920c187a92a03d210d2e9d5eb53862f`. +- Superseded evidence commit: `135e4a0a180f112906e89c211f976ce519212347`. Its evidence predates the static pre-review correction and is not final authority. +- Static pre-review correction and effective implementation head: `5dd3e3c4e2f87a52a44465d8a3a63d3b68a55f65`, direct parent `135e4a0a180f112906e89c211f976ce519212347`, tree `5f6465deaebcd0899e27af231550726f2adc37f6`. +- Canonical plan SHA256: `d7bcfd122e456d9b764595524292d53b0c99447b7f716a1be0707341e4681bf9`. -The conformance suite rejects 42 permanent mutations. New revision-5 mutations cover comment-only, dead-string, and unreachable build calls; duplicate and renamed-duplicate live build calls; unreachable, duplicate, and renamed-duplicate Scout calls; comment-only/unsafe database assignment; comment-only/bypassed session-start proof; and removal of the literal-test identity. +The branch is `work/prc-release-gates-revision5-maker` in `D:/Dev/engram/.agent/worktrees/prc-release-gates-r5-maker`. No merge, push, tag, release, or primary-worktree write was performed. -No product code, product tests, plan/state authority, or v5-demolished graph/rerank/composite-scoring/SDK-extraction/server-HTTP-MCP path was changed. +## Closed false-green classes -## Verification +1. The workflow conformance gate now parses the PowerShell AST and proves the source-built compose invocation and each exact-image Docker Scout invocation are reachable, structurally correct, and present exactly once. Text in comments, strings, or unreachable blocks cannot satisfy the contract. +2. Fresh databases use an unambiguous test-only identity, `engram_prc_rg_test_<16-lower-hex>_rN`. Every repeat emits an exact execution proof for the required session-start package and rejects skip, missing, duplicate, incomplete, wrong-package, or substituted-test inventory. +3. Root static pre-review found that the first revision-5 self-test derived synthetic events from the same mutable inventory it challenged. Commit `5dd3e3c4...` fixed this by independently pinning the exact package and ordered 12-test list in both the runner self-test and workflow conformance. Permanent mutations now substitute one test identity and the package; both are rejected. + +No product failure, skip, coverage floor, vulnerability, or OpenClaw precondition was allowlisted or suppressed. No v5-demolished graph/rerank/scoring behavior was restored. + +## Foundation verification at effective implementation head | Gate | Exit | Result | |---|---:|---| -| Nine production-gate self-tests | 0 | PASS, 9/9 | -| Extracted workflow conformance block | 0 | PASS, 42/42 mutations rejected | -| PowerShell parser | 0 | PASS | -| `actionlint .github/workflows/test.yml` | 0 | PASS | -| `git diff --check` | 0 | PASS | +| Nine production-gate self-tests | 0 | PASS 9/9 | +| Extracted workflow conformance | 0 | PASS; PowerShell AST; 44 mutations rejected | +| PowerShell parse: DB runner + extracted conformance block | 0 | PASS | +| actionlint | 0 | PASS | +| `git diff --check 4812589b...5dd3e3c4` | 0 | PASS | | `go vet ./...` | 0 | PASS | -| Critical suite | 0 | PASS, 7/7, skip=0 | -| RELEASE-GATES Ledger | 0 | PASS, 48 slices / 325 declarations | -| RELEASE-GATES implementation Diff | 0 | PASS, 2 changed paths / 0 violations | -| Windows path budget at implementation commit | 0 | PASS, 1,405 paths, longest 166, ceiling 240 | -| Actual 66-character fresh detached checkout | 0 | PASS, exact implementation HEAD, `core.longpaths=UNSET`, clean; worktree removed | -| R5 implementation patch gitleaks scan | 0 | PASS, no leak found | -| OpenClaw node matrix | 1 | Expected fail-closed: tracked `package-lock.json` absent; 0 npm steps, pre/post clean, cleanup PASS | -| Canonical full fresh-DB/race/repeat-3 gate | 1 | Expected project RED; foundation invariants below all passed | -| Exact-head dev stand lifecycle | 1 | Up/Ready/Down PASS; Scan correctly failed on exact-image findings; residue zero | +| `go build ./...` | 0 | PASS | +| gitleaks over both implementation files, base through effective head | 0 | PASS; 0 findings | +| Critical suite | 0 | PASS 7/7; skip=0 | +| Ownership Ledger | 0 | PASS; 48 slices, 325 declarations | +| Ownership Diff at code head | 0 | PASS; RELEASE-GATES; 7 changed paths, 0 violations | +| Windows tracked path budget | 0 | PASS; 1,410 paths, longest=166, ceiling=240 | +| Actual 66-character fresh checkout | 0 | PASS; exact head, clean, `core.longpaths=UNSET`, removed | -## Exact 12-test execution proof +Critical-suite raw summary SHA256: `C696FEDF8898460DADC89871905AD73F69A0360E8764526584B80BFB4554754E`. -The canonical command used the shared `engram-prc-postgres` PostgreSQL 17 + pgvector service without stopping or removing it: +## Canonical full fresh-DB race proof + +The shared `engram-prc-postgres` PostgreSQL 17 + pgvector service was used without stopping or removing it: ```powershell $env:ENGRAM_TEST_ADMIN_DSN = 'postgres://@127.0.0.1:55432/postgres?sslmode=disable' @@ -52,50 +55,49 @@ pwsh -NoProfile -File scripts/production-gates/run-db-suite.ps1 ` -PostgresContainer engram-prc-postgres ` -PostgresImage pgvector/pgvector:pg17 ` -ArtifactRoot .agent/e/rg4/r5-maker/runtime ` - -RunId canonical-full-race-repeat3 + -RunId canonical-full-race-repeat3-r5-inventory-pin ``` -All three repeats produced the same required-test proof: - -- expected=12, observed=12, executed=12; -- passed=10, failed=2, skipped=0; -- missing=0, duplicate=0, incomplete=0; -- proof verdict `PASS`; -- generated identities ended in `_r1`, `_r2`, `_r3` and all contained the literal `test` marker; -- sessions_before=0, sessions_after=0, cleanup exit=0 and cleanup verdict `PASS` in every repeat. +The command exited 1 because the project is red, not because the release gate lost execution proof. -The two required tests that reached a real failing terminal outcome were `TestGetSessionStartContext_HappyPath` and `TestGetSessionStartContext_RuleRouterEnabledPacketShape`. They remain visible product blockers; they were not converted to skips or treated as successful product behavior. +- Required package: `github.com/thebtf/engram/internal/grpcserver`. +- Each repeat: expected=12, observed=12, executed=12, passed=10, failed=2, skipped=0, missing=0, duplicate=0, incomplete=0, proof verdict `PASS`. +- The two executed product failures were `TestGetSessionStartContext_HappyPath` and `TestGetSessionStartContext_RuleRouterEnabledPacketShape`. +- Fresh identities were `engram_prc_rg_test_fc4f603aeda0760d_r1`, `_r2`, and `_r3`. +- Tests observed: 3,516 / 3,516 / 3,516. +- Passed: 3,472 / 3,471 / 3,473. +- Failed: 30 / 29 / 30. Twenty-nine were stable; `internal/bulkops::TestRollback_Conflict_EC_F3` additionally failed in repeats 1 and 3. +- Unexpected skips: 13 / 13 / 13. +- General incomplete terminal records: 1 / 3 / 0; their exact identities are retained in `fail.json`. +- Overall coverage: 53.33% / 53.35% / 53.35%, below the immutable 60% floor. Seven package floors remain red. +- Cleanup exit: 0 / 0 / 0; targeted sessions before/after: 0 / 0 / 0. -## Truthful project-wide RED +Direct post-run checks found zero `engram_prc_rg_test_%` databases, zero matching PostgreSQL sessions, and zero `engram-critical-stand` containers, volumes, or networks. The shared service remained `/engram-prc-postgres|pgvector/pgvector:pg17|true`. -The full gate returned FAIL in all three repetitions, as required by the current project state: - -- failing tests: 29 / 30 / 29; -- unexpected skips: 13 / 13 / 13; -- overall coverage: 53.35% / 53.35% / 53.35%, below 60%; -- seven package floors remain below contract; -- cleanup exit: 0 / 0 / 0; -- direct SQL after the run found zero `engram_prc_rg_test_%` databases and zero matching sessions; -- shared container remained `/engram-prc-postgres|pgvector/pgvector:pg17|true`. - -The stable test/skip inventory and coverage floors are in `fail.json`. Graph T015/T016 failures are recorded as demolition-classification work, not repaired or resurrected by this slice. +Canonical summary SHA256: `4B98F3D1E296440DFDC1A6023D4EDAE3B6D4B5255083DB666CC0B8CC8339BE15`. Each required-execution proof has SHA256 `0AF9EBDF4B242ED394D13CE4AB410F7A94E7A0A367B66BB0ABBF1C177DDD0316`. ## Exact-head dev stand -The lifecycle challenged clean commit `eb44a8e694c60856176c93c64080002231648b4b`: +The lifecycle challenged clean source commit `5dd3e3c4e2f87a52a44465d8a3a63d3b68a55f65`. -- Up PASS: source clean, compose build PASS, PostgreSQL pull PASS, launch used `--no-build --pull never`, all three prelaunch image IDs equalled running IDs, three cryptographic credentials were distinct/runtime-injected/not persisted. +- Up PASS: compose build and PostgreSQL pull completed; launch used no build/pull; all prelaunch, tag, running, and scanned IDs matched; three generated credentials were distinct, runtime-injected, and not persisted. - Ready PASS: direct and operator-proxied liveness/readiness endpoints returned HTTP 200 with the required semantic payloads. -- Scan FAIL as expected: immutable `local://sha256:...` references found operator-console=5, PostgreSQL=20, server=13 HIGH/CRITICAL findings. -- Down PASS: zero compose containers, volumes, or networks remained. +- Scan correctly failed on immutable local image IDs: operator-console `sha256:d701b9ace90ed8b689f45b90fbdf87ed1c9b2a81b7a237fa5d7fd909405df9f9` = 5 findings; PostgreSQL `sha256:d2ef61f42ef767baa5a1475393303cc235bcd92febd9d7014eddb48b41f3bad0` = 20; server `sha256:c75d6cd0fd5fd5a569d1c5c4eca0200e4c9de3374dbf7d316390c064af9e4bf0` = 13. +- Down PASS: residual compose resources were zero. + +Lifecycle/up/ready/scan/down SHA256 values are recorded in `proof.json`. + +## Other release blockers -## Evidence integrity +- OpenClaw matrix exited 1 before npm execution because tracked `plugin/openclaw-engram/package-lock.json` is absent. Pre/post surfaces were clean and cleanup passed. +- Current whole-working-tree gitleaks diagnostic reports 62 findings: 48 in ignored raw runtime evidence from the two canonical diagnostic runs and 14 in existing tracked fixtures/docs/scripts. Its redacted report SHA256 is `60FC8185A4E4207129D6076AF27C2E6E58922D34720A0E19C266C6BC7A3D6F42`. This is release classification work; the revision-5 implementation diff itself has zero findings. +- Product failures, skips, incomplete records, coverage floors, image findings, OpenClaw lock, and secret classifications remain routed to their declared master-plan lanes. This maker did not repair or reclassify them. -`manifest.json` uses the explicit `git-blob-lf` representation. Source entries bind the exact implementation commit, Git blob OID, SHA256 of the raw Git blob bytes, zero CR bytes, and no UTF-8 BOM. This avoids ambiguity from the Windows checkout's `core.autocrlf=true` working-tree representation. +## Evidence integrity and changed paths -The manifest deliberately excludes itself and `SHA256SUMS`. `SHA256SUMS` hashes `report.md`, `proof.json`, `fail.json`, and `manifest.json`, and deliberately excludes itself. There is no self-hash or manifest/checksum cycle. The final evidence commit cannot name its own commit ID; its exact final candidate SHA is supplied out of band after commit and must have implementation commit `eb44a8e6...` as its direct parent. +`manifest.json` uses exact `git-blob-lf` bytes for both source files and the three compact evidence files. The manifest excludes itself and `SHA256SUMS`; `SHA256SUMS` hashes the finalized report, proof, fail inventory, and manifest while excluding itself. The final evidence commit cannot contain its own commit ID, so its exact SHA is supplied out of band and must have `5dd3e3c4...` as direct parent. -## Changed paths +Changed paths relative to the challenged base: - `.github/workflows/test.yml` - `scripts/production-gates/run-db-suite.ps1` @@ -105,4 +107,4 @@ The manifest deliberately excludes itself and `SHA256SUMS`. `SHA256SUMS` hashes - `.agent/e/rg4/r5-maker/manifest.json` - `.agent/e/rg4/r5-maker/SHA256SUMS` -Maker position: `READY_FOR_INDEPENDENT_CHECK` for the release-gate foundation. Independent checker and post-review remain mandatory. Project-wide readiness remains `BLOCKED` by the exact failures, skips, coverage deficits, image findings, existing tracked-tree gitleaks classifications, and missing OpenClaw lock recorded in compact evidence. +Independent checker and post-review remain mandatory. This maker handoff does not claim project production readiness. From d650df5c4271cdb50aa1f443d2f95b2f4b672541 Mon Sep 17 00:00:00 2001 From: Kirill Turanskiy Date: Fri, 10 Jul 2026 18:40:34 +0300 Subject: [PATCH 034/111] docs(evidence): repair embedding transport R3 --- .../R3-SHA256SUMS.txt | 21 ++ .../coverage-repeat.v1.json | 58 +++++ .../maker-report.md | 30 +++ .../maker-summary.v1.json | 64 ++++++ .../verification-matrix.v1.json | 95 ++++++++ .../ARTIFACTS.sha256 | 6 +- .../maker-report.md | 211 +++++++----------- .../verification-observations.v1.json | 97 ++++++-- .../verify-manifest.cjs | 168 +++++++++----- .../verify-manifest.test.cjs | 156 +++++++++++++ ...B-EMBEDDING-EVIDENCE-TRANSPORT-R3.red.json | 23 ++ ...B-EMBEDDING-EVIDENCE-TRANSPORT-R3.tdd.json | 86 +++++++ 12 files changed, 802 insertions(+), 213 deletions(-) create mode 100644 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/R3-SHA256SUMS.txt create mode 100644 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/coverage-repeat.v1.json create mode 100644 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/maker-report.md create mode 100644 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/maker-summary.v1.json create mode 100644 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/verification-matrix.v1.json create mode 100644 .agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R3.red.json create mode 100644 .agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R3.tdd.json diff --git a/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/R3-SHA256SUMS.txt b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/R3-SHA256SUMS.txt new file mode 100644 index 00000000..652b9436 --- /dev/null +++ b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/R3-SHA256SUMS.txt @@ -0,0 +1,21 @@ +# manifest-version=1 +# algorithm=sha256 +# representation=canonical-lf-files +# checkout-equivalence=crlf-to-lf-with-no-bare-cr +# parent=8dac7910de52d2744fcf67f79a0a1597beebac72 +# accepted-product-source=38d6a4fb7ff5f5ae3b6c0066c0a1b806421137df +# maker-commit=reported-out-of-band-after-commit +# self-entry=excluded-to-avoid-recursion +5d932e6acf104bf9eff291409b50961007512e09e91d78401257a018fcb780f4 .agent/reports/evidence/production-ready/db-embedding-stats/SHA256SUMS.txt +e3e9fd6250d4ead502a01ec81bb7901ad658d74845184a10b6f153276a1bd12f .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/content-manifest.v1.json +e9190c0c09199b43931bb53286b7165401e030bae1290de669ad04dea21bd287 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/ARTIFACTS.sha256 +2b70221b41b570db6d4e245de7f73bba5b1c2d65af1c00d025946a2fb0af9463 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.cjs +5241f81a2872dbd88062c6c82fc0018029373f0ebef8ae67924a070b124fba26 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.test.cjs +6c392da36f0a1eb54425cfddb08d8dab9164434f1c8a294aef451c822eea419d .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verification-observations.v1.json +1de9db676a8ca4618fd44892b8a26e68fd569f5524219514458cdc9039828014 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/maker-report.md +8777110d8681c895fd821664ca733d959e940353490ae9ed8bc0f0c1e27f8b3b .agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R3.red.json +4f40787b460bd5b811f84c73e200586a9f0d89bd8265c1af52eb7b77fc6dabfa .agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R3.tdd.json +44bee7a74ab71495540271f399401cc9a79d833324a51c1f76ccf74db0b6176c .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/coverage-repeat.v1.json +9fa36518bb1211ad9c2e2eda5a97fafd1aeb29cd9c3aa07016af9abad2ad14ed .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/verification-matrix.v1.json +812f1e5b6bc8846b7bbcace5a5f93dbf9c4aa2f14936f5898d6db3947f8124f2 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/maker-summary.v1.json +bdf0afdded29b50b43c6ae72438986a9b447930a6a5a7d795edac0dbc1d9c730 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/maker-report.md diff --git a/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/coverage-repeat.v1.json b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/coverage-repeat.v1.json new file mode 100644 index 00000000..6a34abfc --- /dev/null +++ b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/coverage-repeat.v1.json @@ -0,0 +1,58 @@ +{ + "schema_version": 1, + "slice": "DB-EMBEDDING-EVIDENCE-TRANSPORT-R3", + "node_version": "v24.2.0", + "command": "node --test --test-concurrency=1 --experimental-test-coverage .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.test.cjs", + "runs": [ + { + "run": 1, + "exit_code": 0, + "tests": 22, + "passed": 22, + "failed": 0, + "aggregate": { + "line_percent": 87.27, + "branch_percent": 71.75, + "functions_percent": 94.87 + }, + "verifier": { + "line_percent": 79.55, + "branch_percent": 51.59, + "functions_percent": 81.82 + }, + "test_harness": { + "line_percent": 100.0, + "branch_percent": 97.94, + "functions_percent": 100.0 + } + }, + { + "run": 2, + "exit_code": 0, + "tests": 22, + "passed": 22, + "failed": 0, + "aggregate": { + "line_percent": 87.27, + "branch_percent": 71.75, + "functions_percent": 94.87 + }, + "verifier": { + "line_percent": 79.55, + "branch_percent": 51.59, + "functions_percent": 81.82 + }, + "test_harness": { + "line_percent": 100.0, + "branch_percent": 97.94, + "functions_percent": 100.0 + } + } + ], + "reproducible": true, + "threshold": { + "percent": 80, + "basis": "aggregate line coverage", + "status": "PASS" + } +} diff --git a/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/maker-report.md b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/maker-report.md new file mode 100644 index 00000000..c3f176f5 --- /dev/null +++ b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/maker-report.md @@ -0,0 +1,30 @@ +# DB-EMBEDDING-EVIDENCE-TRANSPORT R3 compact handoff + +Status: **READY_FOR_CHECK** + +R3 is based on the immutable independent checker commit `8dac7910...` and +preserves accepted product commit `38d6a4fb...` byte-for-byte. It repairs all +four blocking checker reproductions: exact source commit, exact seven-source +set, valid-substitution rejection, and canonical-path pre-access gating. + +Evidence summary: + +- exact-parent RED: `18 pass / 4 fail`, exit `1`; +- GREEN and post-restore: `22/22`, exit `0`; +- Prove-It sentinels: `12` and `9` failed tests, both exit `1`; +- Windows: raw/Git/LF `0/7`, `7/7`, `7/7`; artifacts `5/5`; +- fresh LF: raw/Git/LF `7/7`; artifacts `5/5`; suite `22/22`; +- coverage repeated identically twice: aggregate line `87.27%`, branch + `71.75%`, functions `94.87%`; verifier-only metrics are separately labeled; +- product/source/test delta, temporary worktree residue, maker Node residue, + matching PostgreSQL databases, and matching PostgreSQL sessions are zero. + +One diagnostic discrepancy was surfaced rather than hidden: the first +read-only residue query assumed a nonexistent PostgreSQL role `postgres` and +failed authentication. Container configuration identified the actual role and +database as `engram` / `engram_test`; the corrected read-only query returned +database residue `0` and session residue `0`. + +The packet checksum manifest excludes itself. Final commit/tree identity and +the manifest's own hash are reported after commit. A fresh independent checker +must replay the four repaired mutations; this maker does not self-accept. diff --git a/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/maker-summary.v1.json b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/maker-summary.v1.json new file mode 100644 index 00000000..549677fd --- /dev/null +++ b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/maker-summary.v1.json @@ -0,0 +1,64 @@ +{ + "schema_version": 1, + "slice": "DB-EMBEDDING-EVIDENCE-TRANSPORT-R3", + "role": "maker", + "status": "READY_FOR_CHECK", + "parent": "8dac7910de52d2744fcf67f79a0a1597beebac72", + "rejected_r2_target": "db2cf891dd9c6315fd17220ffe2d02302bea8844", + "accepted_product_source": "38d6a4fb7ff5f5ae3b6c0066c0a1b806421137df", + "branch": "work/prc-db-embedding-evidence-transport-r3", + "worktree": "D:/Dev/engram/.agent/worktrees/db-embedding-evidence-r3-maker", + "commit": null, + "commit_reason": "reported out-of-band after the atomic commit to avoid self-reference", + "repairs": [ + { + "finding": "ETR2-C001", + "result": "exact seven-path source set and cardinality enforced" + }, + { + "finding": "ETR2-C002", + "result": "source commit pinned by exact equality to the accepted product source" + }, + { + "finding": "ETR2-C003", + "result": "all source Git and filesystem access consumes only validated canonical paths after a zero-error gate" + }, + { + "finding": "ETR2-C004", + "result": "two reproducible coverage runs recorded with aggregate, verifier, and harness scopes labeled separately" + } + ], + "tests": { + "baseline": "18/18 PASS", + "red": "18 pass / 4 fail, exit 1", + "green": "22/22 PASS", + "prove_it_validate_contract_schema": "12 failed, exit 1", + "prove_it_verify_artifact_files": "9 failed, exit 1", + "post_restore": "22/22 PASS" + }, + "representation": { + "windows": "raw 0/7, Git 7/7, checkout-LF 7/7, artifacts 5/5", + "fresh_lf": "raw/Git/checkout-LF 7/7, artifacts 5/5, suite 22/22" + }, + "coverage": { + "repeat_identical": true, + "aggregate_line_percent": 87.27, + "aggregate_branch_percent": 71.75, + "aggregate_functions_percent": 94.87, + "verifier_line_percent": 79.55, + "verifier_branch_percent": 51.59, + "verifier_functions_percent": 81.82, + "threshold_basis": "aggregate line coverage", + "threshold_percent": 80, + "status": "PASS" + }, + "product_source_test_delta": 0, + "residue": { + "temporary_worktrees": 0, + "maker_node_processes": 0, + "matching_postgresql_databases": 0, + "matching_postgresql_sessions": 0 + }, + "checksum_manifest": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/R3-SHA256SUMS.txt", + "next_action": "fresh independent checker; no maker self-acceptance" +} diff --git a/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/verification-matrix.v1.json b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/verification-matrix.v1.json new file mode 100644 index 00000000..9ca8065a --- /dev/null +++ b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/verification-matrix.v1.json @@ -0,0 +1,95 @@ +{ + "schema_version": 1, + "slice": "DB-EMBEDDING-EVIDENCE-TRANSPORT-R3", + "parent": "8dac7910de52d2744fcf67f79a0a1597beebac72", + "accepted_product_source": "38d6a4fb7ff5f5ae3b6c0066c0a1b806421137df", + "rails": { + "source_commit_exact_equality": "PASS", + "required_source_set_exact_7": "PASS", + "canonical_source_access_only": "PASS", + "schema_invalid_source_access_zero": "PASS", + "windows_crlf": { + "tracked_eol": "7/7 i/lf w/crlf", + "legacy_raw_audit": { + "exit_code": 0, + "status": "AMBIGUOUS_RAW_CHECKOUT_CONFIRMED", + "raw": 0, + "git_object": 7, + "checkout_lf": 7 + }, + "git_object": { + "exit_code": 0, + "matched": 7, + "total": 7 + }, + "checkout_lf": { + "exit_code": 0, + "matched": 7, + "total": 7, + "bare_cr": 0 + }, + "artifact_files": { + "exit_code": 0, + "matched": 5, + "total": 5 + }, + "permanent_suite": { + "exit_code": 0, + "passed": 22, + "total": 22 + } + }, + "fresh_lf": { + "tracked_eol": "7/7 i/lf w/lf", + "legacy_raw_audit": { + "exit_code": 0, + "status": "RAW_CHECKOUT_HAPPENS_TO_MATCH", + "raw": 7, + "git_object": 7, + "checkout_lf": 7 + }, + "git_object": { + "exit_code": 0, + "matched": 7, + "total": 7 + }, + "checkout_lf": { + "exit_code": 0, + "matched": 7, + "total": 7, + "bare_cr": 0 + }, + "artifact_files": { + "exit_code": 0, + "matched": 5, + "total": 5 + }, + "permanent_suite": { + "exit_code": 0, + "passed": 22, + "total": 22 + } + }, + "exact_parent_red": { + "exit_code": 1, + "passed": 18, + "failed": 4, + "total": 22 + }, + "prove_it": { + "validate_contract_schema_failed": 12, + "verify_artifact_files_failed": 9, + "post_restore_passed": 22, + "post_restore_exit_code": 0 + }, + "coverage_repeat_identical": "PASS", + "node_syntax": "PASS", + "json_parse": "PASS", + "diff_check": "PASS", + "product_source_test_delta": 0, + "temporary_worktree_residue": 0, + "maker_node_process_residue": 0, + "matching_postgresql_database_residue": 0, + "matching_postgresql_session_residue": 0 + } +} diff --git a/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/ARTIFACTS.sha256 b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/ARTIFACTS.sha256 index 92585baa..0cd5c56c 100644 --- a/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/ARTIFACTS.sha256 +++ b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/ARTIFACTS.sha256 @@ -5,6 +5,6 @@ # self-entry=excluded-to-avoid-recursion 5d932e6acf104bf9eff291409b50961007512e09e91d78401257a018fcb780f4 .agent/reports/evidence/production-ready/db-embedding-stats/SHA256SUMS.txt e3e9fd6250d4ead502a01ec81bb7901ad658d74845184a10b6f153276a1bd12f .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/content-manifest.v1.json -4f46e0f020fd7aae39b327adac7a9070d744f66fa26124f652d25470fa409114 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.cjs -d99f3499b2e5c371ababdffc84410e1dcc8b028373ae00483136ae0eb6bf509a .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verification-observations.v1.json -3b7f5ad0abcccd39f0d5ce9349fceb8cca4794e1bf537943e4b38ce629357dbb .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/maker-report.md +2b70221b41b570db6d4e245de7f73bba5b1c2d65af1c00d025946a2fb0af9463 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.cjs +6c392da36f0a1eb54425cfddb08d8dab9164434f1c8a294aef451c822eea419d .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verification-observations.v1.json +1de9db676a8ca4618fd44892b8a26e68fd569f5524219514458cdc9039828014 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/maker-report.md diff --git a/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/maker-report.md b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/maker-report.md index c8271099..493176e0 100644 --- a/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/maker-report.md +++ b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/maker-report.md @@ -1,177 +1,120 @@ -# DB-EMBEDDING-EVIDENCE-TRANSPORT Revision Maker Report +# DB-EMBEDDING-EVIDENCE-TRANSPORT R3 maker report Date: 2026-07-10 Role: revision maker Finish state: **READY_FOR_CHECK** -## Exact boundary +## Immutable boundary -- Accepted product source commit: `38d6a4fb7ff5f5ae3b6c0066c0a1b806421137df` -- Rejected evidence candidate and exact revision base: - `580b0cd0ff38bb55a5195a8004e60234a824b7a8` -- Pre-packet verification checkpoint: - `53b2ef1931c534e27183126a1aad2d46b3a854b2` -- Branch: `work/prc-db-embedding-evidence-transport-r2` +- Accepted product source: `38d6a4fb7ff5f5ae3b6c0066c0a1b806421137df`. +- Rejected R2 target: `db2cf891dd9c6315fd17220ffe2d02302bea8844`. +- Independent R2 checker and exact R3 parent: + `8dac7910de52d2744fcf67f79a0a1597beebac72`. +- Branch: `work/prc-db-embedding-evidence-transport-r3`. - Worktree: - `D:/Dev/engram/.agent/worktrees/db-embedding-evidence-transport-r2` -- Allowed writes: this evidence verifier, its permanent self-test, and - DB-EMBEDDING-EVIDENCE-TRANSPORT evidence/report artifacts. -- Forbidden writes honored: product/source/test bytes, primary and integration - worktrees, canonical production-readiness register/Markdown/HTML, and - protected role/session/oracle state. + `D:/Dev/engram/.agent/worktrees/db-embedding-evidence-r3-maker`. +- Product/source/test code is byte-identical to the accepted product source. +- The R2 checker directory is inherited unchanged. This maker does not merge, + push, edit the root readiness report, or self-accept. -The revision is based directly on the rejected evidence candidate, not on the -independent checker commit. It changes no product behavior and does not -self-accept. +## Checker findings reproduced before repair -## Reproduced failure +The existing `18/18` R2 suite passed first. Four permanent tests were then +added while the R2 verifier remained unchanged. The RED run was `18 pass / 4 +fail`, exit `1`: -A permanent Node self-test was written before the verifier changed. Against the -exact rejected candidate it executed 18 test/subtest cases: +1. deleting one required source and the matching legacy line false-PASSED `6/6`; +2. replacing a required source with the valid `go.mod` blob false-PASSED `7/7`; +3. rebinding both source-commit declarations to ancestor `580b0cd0...` + false-PASSED `7/7`; +4. an invalid raw path reached `git cat-file` instead of returning a structured + pre-access rejection. -- pass: `1`; -- fail: `17`; -- skipped: `0`; -- process exit: `1`. - -The rejected verifier returned exit `0` for header-only zero entries, missing -and extra entries, namespace traversal, a non-canonical dot alias, invalid -`checkout_equivalence` values, and unknown schema keys. The existing duplicate -entry rejection was the single passing RED case. - -RED evidence: -`.agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R2.red.json`. +The same new test bytes against exact parent verifier blob +`9f8424f1ea8ed5accac11ff6f019efdad9573cf9` reproduced `18 pass / 4 fail`. ## Repair -### Exact artifact set - -`artifact-files` now requires exactly these five canonical paths: - -1. `.agent/reports/evidence/production-ready/db-embedding-stats/SHA256SUMS.txt` -2. `.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/content-manifest.v1.json` -3. `.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.cjs` -4. `.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verification-observations.v1.json` -5. `.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/maker-report.md` - -Zero, missing, extra, replaced, and duplicate canonical paths are structural -errors before a PASS can be computed. - -### Canonical path boundary - -Every manifest path is validated before filesystem access. Paths must be -non-empty repository-relative POSIX paths that are already normalized. Absolute -paths, backslashes, drive/URI separators, empty segments, `.`, `..`, NUL, -normalization changes, repository escapes, and raw/resolved disagreement are -rejected. Exact-set and containment decisions use the validated normalized path, -never a raw prefix. - -### Strict schema and semantics - -The JSON contract now rejects missing and unknown keys at the top level, -`representation`, `checkout_equivalence`, and each entry. It pins: +The executable verifier now pins: -- `schema_version=1`; -- `slice=DB-EMBEDDING-EVIDENCE-TRANSPORT`; -- `algorithm=sha256`; -- `representation.kind=git-blob-content`; -- full source commit and blob OIDs; -- exact legacy-manifest and verifier paths; -- `checkout_equivalence.transform=replace each CRLF byte pair with LF`; -- `checkout_equivalence.bare_cr=reject`; -- the exact source-Git-blob result contract. +- `EXPECTED_SOURCE_COMMIT` exactly to + `38d6a4fb7ff5f5ae3b6c0066c0a1b806421137df`; +- exact cardinality `7`; +- exactly the seven accepted source paths declared in + `content-manifest.v1.json` and the legacy manifest. -Legacy and artifact annotated manifests also reject duplicate, missing, and -unknown metadata keys and invalid semantic values. +Schema validation produces canonical contained paths and absolute paths as one +validated record set. Source Git object lookup and checkout-file reads consume +only that validated set. Any schema, source-lock, metadata, or shape error +leaves the validated set empty and returns `FAIL` with +`source_accesses.git_objects=0`, `source_accesses.checkout_files=0`, and no +verified entries. Raw contract paths never reach source Git or filesystem APIs. -## Permanent adversarial suite +## Permanent adversarial suite and TDD Command: `node --test --test-concurrency=1 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.test.cjs` -GREEN result in the normal Windows checkout: +- GREEN and post-restore: `22/22`, exit `0`. +- Exact-parent RED: `18 pass / 4 fail`, exit `1`. +- `validateContractSchema` sentinel: `10 pass / 12 fail`, exit `1`. +- `verifyArtifactFiles` sentinel: `13 pass / 9 fail`, exit `1`. +- Both sentinels restored byte-identically; post-restore `22/22`. -- tests: `18`; -- pass: `18`; -- fail/skipped/cancelled/todo: `0`; -- exit: `0`. +Two fresh Node `v24.2.0` coverage runs were identical: -The suite covers header-only zero entries, missing, extra, duplicate, traversal, -dot alias, absolute path, backslash separator, all three checkout-equivalence -values, and unknown keys at every contract object level. Every mutation is -limited to the maker worktree and restored byte-for-byte in `finally` plus a -process-level cleanup hook. +| Scope | Line | Branch | Functions | +| --- | ---: | ---: | ---: | +| aggregate | `87.27%` | `71.75%` | `94.87%` | +| verifier | `79.55%` | `51.59%` | `81.82%` | +| test harness | `100.00%` | `97.94%` | `100.00%` | -## Positive representation rails +The `80%` TDD threshold is explicitly evaluated against aggregate line +coverage. No verifier-only or aggregate metric is relabeled as another scope. -### Normal Windows CRLF checkout +## Representation rails -`git ls-files --eol` reported `i/lf w/crlf` for all seven declared source -records. +In the normal Windows checkout, all seven source records are `i/lf w/crlf`: | Mode | Exit | Status | Result | | --- | ---: | --- | --- | -| `legacy-raw-audit` | 0 | `AMBIGUOUS_RAW_CHECKOUT_CONFIRMED` | raw `0/7`, Git object `7/7`, checkout-LF `7/7` | -| `git-object` | 0 | `PASS` | `7/7`, structural errors `0` | -| `checkout-lf` | 0 | `PASS` | `7/7`, bare CR `0`, structural errors `0` | -| `artifact-files` | 0 | `PASS` | exact required set `5/5`, structural errors `0` | +| `legacy-raw-audit` | 0 | `AMBIGUOUS_RAW_CHECKOUT_CONFIRMED` | raw `0/7`, Git `7/7`, LF `7/7` | +| `git-object` | 0 | `PASS` | `7/7`, source accesses `7/7`, errors `0` | +| `checkout-lf` | 0 | `PASS` | `7/7`, bare CR `0`, errors `0` | +| `artifact-files` | 0 | `PASS` | exact required artifacts `5/5` | -### Fresh LF materialization - -Materialization: - -`git -c core.autocrlf=false worktree add --detach -D:/Dev/engram/.agent/worktrees/db-embedding-evidence-transport-r2-lf-proof -53b2ef1931c534e27183126a1aad2d46b3a854b2` - -`git ls-files --eol` reported `i/lf w/lf` for all seven source records. +In a fresh `core.autocrlf=false` materialization, all seven records are +`i/lf w/lf`: | Mode | Exit | Status | Result | | --- | ---: | --- | --- | -| `legacy-raw-audit` | 0 | `RAW_CHECKOUT_HAPPENS_TO_MATCH` | raw/Git-object/checkout-LF `7/7` | -| `git-object` | 0 | `PASS` | `7/7` | +| `legacy-raw-audit` | 0 | `RAW_CHECKOUT_HAPPENS_TO_MATCH` | raw/Git/LF `7/7` | +| `git-object` | 0 | `PASS` | `7/7`, errors `0` | | `checkout-lf` | 0 | `PASS` | `7/7`, bare CR `0` | -| `artifact-files` | 0 | `PASS` | exact required set `5/5` | -| permanent adversarial suite | 0 | `PASS` | `18/18` | - -The LF proof worktree was clean before removal; its filesystem path and Git -registration were removed. - -## TDD and Prove-It evidence +| `artifact-files` | 0 | `PASS` | exact required artifacts `5/5` | +| permanent suite | 0 | `PASS` | `22/22` | -- RED: `18` total, `1` pass, `17` fail, exit `1`. -- GREEN: `18/18`, exit `0`. -- Prove-It, `validateContractSchema` sentinel: `18` failures, exit `1`. -- Prove-It, `verifyArtifactFiles` sentinel: `9` failures, exit `1`. -- Both sentinels were restored from the clean checkpoint. -- Post-restore: `18/18`, exit `0`. -- Node experimental coverage: all files line `88.89%` and branch `65.33%`; - verifier line `84.46%`; functions `100%`; exit `0`. +All temporary RED, Prove-It, and LF worktrees were restored/clean before +removal; their paths and Git registrations were removed. -Full TDD evidence: -`.agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R2.tdd.json`. - -## No-product-change proof - -`git diff --exit-code 38d6a4fb... -- cmd internal plugin tests scripts go.mod -go.sum Makefile Dockerfile docker-compose.yml` exits `0`. In particular: +## Integrity and product preservation +- The legacy source manifest remains seven Git-blob records from the accepted + source commit. +- The artifact manifest remains an exact five-path canonical-LF set and + explicitly excludes itself to avoid recursion. - `internal/embedding/store.go` remains blob - `1abaee96b07583f9fd824ed03c40b043c490b567`; + `1abaee96b07583f9fd824ed03c40b043c490b567`. - `internal/embedding/store_stats_test.go` remains blob `d381643deadbb42e8a9a07fc9375a6cdfedbdccc`. +- Node syntax checks, JSON parsing, checksum/self-reference checks, diff checks, + and process/worktree/DB/session residue checks pass. -No Go product test, PostgreSQL statement, container mutation, integration, -push, tag, release, or protected state write is part of this evidence-only -revision. - -## Handoff - -The compact summary and revision checksum manifest live under -`.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r2/`. -The containing commit and artifact hashes are reported by the maker handoff -after commit, avoiding a self-hash or self-commit paradox. +The compact R3 packet is under +`.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/`. +The final commit, tree, and packet hashes are reported out-of-band after the +single evidence-only commit to avoid self-reference. -Finish state: **READY_FOR_CHECK**. A fresh independent checker must reproduce -the adversarial and CRLF/LF rails before post-review or integration. +Finish state: **READY_FOR_CHECK**. A fresh independent checker must replay all +four repaired false-PASS classes and both EOL materializations. diff --git a/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verification-observations.v1.json b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verification-observations.v1.json index c73fa547..63bab584 100644 --- a/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verification-observations.v1.json +++ b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verification-observations.v1.json @@ -1,11 +1,21 @@ { "schema_version": 1, - "slice": "DB-EMBEDDING-EVIDENCE-TRANSPORT", + "slice": "DB-EMBEDDING-EVIDENCE-TRANSPORT-R3", "role": "revision-maker", "product_source_commit": "38d6a4fb7ff5f5ae3b6c0066c0a1b806421137df", - "rejected_candidate_commit": "580b0cd0ff38bb55a5195a8004e60234a824b7a8", - "revision_checkpoint_commit": "53b2ef1931c534e27183126a1aad2d46b3a854b2", + "rejected_r2_commit": "db2cf891dd9c6315fd17220ffe2d02302bea8844", + "parent_checker_commit": "8dac7910de52d2744fcf67f79a0a1597beebac72", "raw_checkout_bytes_are_not_the_contract": true, + "source_lock": { + "expected_source_commit": "38d6a4fb7ff5f5ae3b6c0066c0a1b806421137df", + "required_cardinality": 7, + "exact_required_set": true, + "validated_canonical_paths_only": true, + "schema_invalid_source_accesses": { + "git_objects": 0, + "checkout_files": 0 + } + }, "required_artifact_paths": [ ".agent/reports/evidence/production-ready/db-embedding-stats/SHA256SUMS.txt", ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/content-manifest.v1.json", @@ -14,42 +24,68 @@ ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/maker-report.md" ], "tdd": { + "baseline": { + "exit_code": 0, + "tests": 18, + "passed": 18, + "failed": 0 + }, "red": { "exit_code": 1, - "tests": 18, - "passed": 1, - "failed": 17 + "tests": 22, + "passed": 18, + "failed": 4 }, "green": { "exit_code": 0, - "tests": 18, - "passed": 18, + "tests": 22, + "passed": 22, "failed": 0 }, "prove_it": [ { "sentinel_function": "validateContractSchema", "exit_code": 1, - "failed_tests": 18 + "passed_tests": 10, + "failed_tests": 12 }, { "sentinel_function": "verifyArtifactFiles", "exit_code": 1, + "passed_tests": 13, "failed_tests": 9 } ], "post_restore": { "exit_code": 0, - "tests": 18, - "passed": 18, - "failed": 0 + "tests": 22, + "passed": 22, + "failed": 0, + "verifier_byte_identical": true }, "coverage": { - "exit_code": 0, - "all_files_line_percent": 88.89, - "verifier_line_percent": 84.46, - "branch_percent": 65.33, - "functions_percent": 100.0 + "node_version": "v24.2.0", + "repeat_count": 2, + "reproducible": true, + "aggregate": { + "line_percent": 87.27, + "branch_percent": 71.75, + "functions_percent": 94.87 + }, + "verifier": { + "line_percent": 79.55, + "branch_percent": 51.59, + "functions_percent": 81.82 + }, + "test_harness": { + "line_percent": 100.0, + "branch_percent": 97.94, + "functions_percent": 100.0 + }, + "threshold_basis": "aggregate line coverage", + "threshold_percent": 80, + "status": "PASS", + "exit_code": 0 } }, "observations": [ @@ -65,6 +101,8 @@ "raw_checkout_matches": 0, "git_object_matches": 7, "checkout_lf_matches": 7, + "source_git_accesses": 7, + "source_checkout_accesses": 7, "structural_errors": 0 }, { @@ -142,15 +180,26 @@ "mode": "permanent-adversarial-self-test", "exit_code": 0, "status": "PASS", - "matched": 18, - "total": 18 + "matched": 22, + "total": 22 } ], - "temporary_lf_worktree_cleanup": { - "path": "D:/Dev/engram/.agent/worktrees/db-embedding-evidence-transport-r2-lf-proof", - "clean_before_remove": true, - "path_removed": true, - "registration_removed": true + "temporary_worktree_cleanup": { + "red": { + "clean_before_remove": true, + "path_removed": true, + "registration_removed": true + }, + "prove_it": { + "clean_before_remove": true, + "path_removed": true, + "registration_removed": true + }, + "lf": { + "clean_before_remove": true, + "path_removed": true, + "registration_removed": true + } }, "product_source_test_delta": 0, "finish_state": "READY_FOR_CHECK" diff --git a/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.cjs b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.cjs index 9f8424f1..93d8fe88 100644 --- a/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.cjs +++ b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.cjs @@ -11,6 +11,7 @@ const modeArgument = process.argv.find((argument) => argument.startsWith('--mode const mode = modeArgument ? modeArgument.slice('--mode='.length) : 'git-object'; const SLICE = 'DB-EMBEDDING-EVIDENCE-TRANSPORT'; +const EXPECTED_SOURCE_COMMIT = '38d6a4fb7ff5f5ae3b6c0066c0a1b806421137df'; const LEGACY_MANIFEST_PATH = '.agent/reports/evidence/production-ready/db-embedding-stats/SHA256SUMS.txt'; const VERIFIER_PATH = @@ -19,6 +20,15 @@ const VERIFIER_PATH = const CONTRACT_PATH = '.agent/reports/evidence/production-ready/' + 'db-embedding-stats-evidence-transport/content-manifest.v1.json'; +const REQUIRED_SOURCE_PATHS = Object.freeze([ + 'internal/embedding/store.go', + 'internal/embedding/store_stats_test.go', + '.agent/specs/db-embedding-stats/evidence/DB-EMBEDDING-STATS.red.json', + '.agent/specs/db-embedding-stats/evidence/DB-EMBEDDING-STATS.tdd.json', + '.agent/specs/db-embedding-stats/evidence/coverage.out', + '.agent/reports/2026-07-10-db-embedding-stats-maker.md', + '.agent/reports/evidence/production-ready/db-embedding-stats/DB-EMBEDDING-STATS.final.json', +]); const REQUIRED_ARTIFACT_PATHS = Object.freeze([ LEGACY_MANIFEST_PATH, CONTRACT_PATH, @@ -244,13 +254,16 @@ function analyzeRepositoryRelativePath(repoRoot, rawPath) { function validateContractSchema(contract, repoRoot) { const structuralErrors = []; + const validatedEntries = []; const topLevelIsObject = validateExactKeys( contract, CONTRACT_TOP_LEVEL_KEYS, 'contract', structuralErrors, ); - if (!topLevelIsObject) return structuralErrors; + if (!topLevelIsObject) { + return { structural_errors: structuralErrors, validated_entries: validatedEntries }; + } if (contract.schema_version !== 1) structuralErrors.push('schema_version must be 1'); if (contract.slice !== SLICE) structuralErrors.push(`slice must be ${SLICE}`); @@ -272,8 +285,10 @@ function validateContractSchema(contract, repoRoot) { if (contract.representation.kind !== 'git-blob-content') { structuralErrors.push('representation.kind must be git-blob-content'); } - if (!/^[0-9a-f]{40}$/.test(contract.representation.source_commit || '')) { - structuralErrors.push('representation.source_commit must be a full Git commit SHA'); + if (contract.representation.source_commit !== EXPECTED_SOURCE_COMMIT) { + structuralErrors.push( + `representation.source_commit must equal accepted source ${EXPECTED_SOURCE_COMMIT}`, + ); } const checkoutEquivalenceIsObject = validateExactKeys( contract.representation.checkout_equivalence, @@ -299,9 +314,14 @@ function validateContractSchema(contract, repoRoot) { } } - if (!Array.isArray(contract.entries) || contract.entries.length === 0) { - structuralErrors.push('entries must be a non-empty array'); - return structuralErrors; + if (!Array.isArray(contract.entries)) { + structuralErrors.push('entries must be an array'); + return { structural_errors: structuralErrors, validated_entries: validatedEntries }; + } + if (contract.entries.length !== REQUIRED_SOURCE_PATHS.length) { + structuralErrors.push( + `entries must contain exactly ${REQUIRED_SOURCE_PATHS.length} required source paths`, + ); } const canonicalPaths = []; @@ -317,7 +337,14 @@ function validateContractSchema(contract, repoRoot) { const pathAnalysis = analyzeRepositoryRelativePath(repoRoot, entry.path); for (const error of pathAnalysis.errors) structuralErrors.push(`${label}.path ${error}`); - if (pathAnalysis.normalized_path) canonicalPaths.push(pathAnalysis.normalized_path); + if (pathAnalysis.normalized_path) { + canonicalPaths.push(pathAnalysis.normalized_path); + validatedEntries.push({ + ...entry, + path: pathAnalysis.normalized_path, + absolute_path: pathAnalysis.absolute_path, + }); + } if (!/^[0-9a-f]{40}$/.test(entry.git_blob_oid || '')) { structuralErrors.push(`${label}.git_blob_oid must be a full Git blob OID`); } @@ -329,10 +356,28 @@ function validateContractSchema(contract, repoRoot) { } }); - if (new Set(canonicalPaths).size !== contract.entries.length) { + if (new Set(canonicalPaths).size !== canonicalPaths.length) { structuralErrors.push('contract paths must be unique canonical paths'); } - return structuralErrors; + const canonicalPathSet = new Set(canonicalPaths); + const requiredPathSet = new Set(REQUIRED_SOURCE_PATHS); + const missingPaths = REQUIRED_SOURCE_PATHS.filter( + (entryPath) => !canonicalPathSet.has(entryPath), + ); + const extraPaths = [...canonicalPathSet].filter( + (entryPath) => !requiredPathSet.has(entryPath), + ); + if (missingPaths.length > 0) { + structuralErrors.push(`contract missing required source paths: ${missingPaths.join(', ')}`); + } + if (extraPaths.length > 0) { + structuralErrors.push(`contract contains non-required source paths: ${extraPaths.join(', ')}`); + } + + return { + structural_errors: structuralErrors, + validated_entries: structuralErrors.length === 0 ? validatedEntries : [], + }; } function validateManifestMetadata(metadata, requiredKeys, label, structuralErrors) { @@ -476,6 +521,10 @@ function verifyArtifactFiles(repoRoot, scriptDirectory, sourceCommit, sourceComm representation: 'canonical-lf-files', total: entryResults.length, matched, + source_accesses: { + git_objects: 0, + checkout_files: 0, + }, checkout: { core_autocrlf: getCoreAutocrlf(repoRoot), eol_counts: eolCounts, @@ -493,7 +542,8 @@ function main() { const scriptDirectory = __dirname; const contractPath = path.join(scriptDirectory, 'content-manifest.v1.json'); const contract = JSON.parse(fs.readFileSync(contractPath, 'utf8')); - const structuralErrors = validateContractSchema(contract, repoRoot); + const contractValidation = validateContractSchema(contract, repoRoot); + const structuralErrors = [...contractValidation.structural_errors]; const legacyManifestPath = path.join(repoRoot, ...LEGACY_MANIFEST_PATH.split('/')); const manifest = parseAnnotatedManifest(legacyManifestPath); @@ -524,17 +574,18 @@ function main() { if (manifest.metadata['checkout-equivalence'] !== 'crlf-to-lf-with-no-bare-cr') { structuralErrors.push('legacy manifest checkout equivalence must reject bare CR'); } - const contractEntries = Array.isArray(contract.entries) ? contract.entries : []; - if (!compareEntryShape(contractEntries, manifest.entries)) { + const rawContractEntries = Array.isArray(contract.entries) ? contract.entries : []; + if (!compareEntryShape(rawContractEntries, manifest.entries)) { structuralErrors.push('legacy manifest entries disagree with contract entries or order'); } const sourceCommit = contract.representation?.source_commit || ''; - const sourceCommitIsAncestor = - /^[0-9a-f]{40}$/.test(sourceCommit || '') && - isAncestor(repoRoot, sourceCommit, 'HEAD'); - if (!sourceCommitIsAncestor) { - structuralErrors.push('source commit is not an ancestor of the executing checkout HEAD'); + let sourceCommitIsAncestor = false; + if (sourceCommit === EXPECTED_SOURCE_COMMIT && structuralErrors.length === 0) { + sourceCommitIsAncestor = isAncestor(repoRoot, sourceCommit, 'HEAD'); + if (!sourceCommitIsAncestor) { + structuralErrors.push('source commit is not an ancestor of the executing checkout HEAD'); + } } if (mode === 'artifact-files') { verifyArtifactFiles( @@ -546,42 +597,54 @@ function main() { ); return; } - const entryResults = contractEntries.map((entry) => { - const objectSpec = `${sourceCommit}:${entry.path}`; - const blob = runGit(['cat-file', 'blob', objectSpec], { cwd: repoRoot }); - const blobOid = runGit(['rev-parse', objectSpec], { cwd: repoRoot, encoding: 'utf8' }).trim(); - const checkout = fs.readFileSync(path.join(repoRoot, ...entry.path.split('/'))); - const canonical = canonicalizeCheckout(checkout); - const rawHash = sha256(checkout); - const canonicalHash = sha256(canonical.bytes); - const objectHash = sha256(blob); - const objectChecks = - blobOid === entry.git_blob_oid && - blob.length === entry.byte_length && - objectHash === entry.sha256; - const checkoutLfChecks = - canonical.bare_carriage_returns === 0 && - canonical.bytes.equals(blob) && - canonical.bytes.length === entry.byte_length && - canonicalHash === entry.sha256; - - return { - path: entry.path, - git_blob_oid: blobOid, - expected_sha256: entry.sha256, - git_object_sha256: objectHash, - raw_checkout_sha256: rawHash, - checkout_lf_sha256: canonicalHash, - git_object_match: objectChecks, - raw_checkout_match: rawHash === entry.sha256 && checkout.length === entry.byte_length, - checkout_lf_match: checkoutLfChecks, - checkout_eol: eolStyle(canonical), - crlf_pairs: canonical.crlf_pairs, - bare_carriage_returns: canonical.bare_carriage_returns, - }; - }); - const total = entryResults.length; + const sourceAccesses = { + git_objects: 0, + checkout_files: 0, + }; + const entryResults = structuralErrors.length === 0 + ? contractValidation.validated_entries.map((entry) => { + const objectSpec = `${sourceCommit}:${entry.path}`; + sourceAccesses.git_objects += 1; + const blob = runGit(['cat-file', 'blob', objectSpec], { cwd: repoRoot }); + const blobOid = runGit( + ['rev-parse', objectSpec], + { cwd: repoRoot, encoding: 'utf8' }, + ).trim(); + sourceAccesses.checkout_files += 1; + const checkout = fs.readFileSync(entry.absolute_path); + const canonical = canonicalizeCheckout(checkout); + const rawHash = sha256(checkout); + const canonicalHash = sha256(canonical.bytes); + const objectHash = sha256(blob); + const objectChecks = + blobOid === entry.git_blob_oid && + blob.length === entry.byte_length && + objectHash === entry.sha256; + const checkoutLfChecks = + canonical.bare_carriage_returns === 0 && + canonical.bytes.equals(blob) && + canonical.bytes.length === entry.byte_length && + canonicalHash === entry.sha256; + + return { + path: entry.path, + git_blob_oid: blobOid, + expected_sha256: entry.sha256, + git_object_sha256: objectHash, + raw_checkout_sha256: rawHash, + checkout_lf_sha256: canonicalHash, + git_object_match: objectChecks, + raw_checkout_match: rawHash === entry.sha256 && checkout.length === entry.byte_length, + checkout_lf_match: checkoutLfChecks, + checkout_eol: eolStyle(canonical), + crlf_pairs: canonical.crlf_pairs, + bare_carriage_returns: canonical.bare_carriage_returns, + }; + }) + : []; + + const total = REQUIRED_SOURCE_PATHS.length; const gitObjectMatches = entryResults.filter((entry) => entry.git_object_match).length; const rawCheckoutMatches = entryResults.filter((entry) => entry.raw_checkout_match).length; const checkoutLfMatches = entryResults.filter((entry) => entry.checkout_lf_match).length; @@ -618,6 +681,7 @@ function main() { representation: contract.representation.kind, total, matched, + source_accesses: sourceAccesses, git_object_matches: gitObjectMatches, raw_checkout_matches: rawCheckoutMatches, checkout_lf_matches: checkoutLfMatches, diff --git a/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.test.cjs b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.test.cjs index c9c08dd9..23e3a391 100644 --- a/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.test.cjs +++ b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.test.cjs @@ -17,6 +17,17 @@ const verifierPath = path.join(scriptDirectory, 'verify-manifest.cjs'); const artifactManifestPath = path.join(scriptDirectory, 'ARTIFACTS.sha256'); const contractPath = path.join(scriptDirectory, 'content-manifest.v1.json'); const testPath = __filename; +const ACCEPTED_SOURCE_COMMIT = '38d6a4fb7ff5f5ae3b6c0066c0a1b806421137df'; +const ALTERNATE_ANCESTOR = '580b0cd0ff38bb55a5195a8004e60234a824b7a8'; +const REQUIRED_SOURCE_PATHS = Object.freeze([ + 'internal/embedding/store.go', + 'internal/embedding/store_stats_test.go', + '.agent/specs/db-embedding-stats/evidence/DB-EMBEDDING-STATS.red.json', + '.agent/specs/db-embedding-stats/evidence/DB-EMBEDDING-STATS.tdd.json', + '.agent/specs/db-embedding-stats/evidence/coverage.out', + '.agent/reports/2026-07-10-db-embedding-stats-maker.md', + '.agent/reports/evidence/production-ready/db-embedding-stats/DB-EMBEDDING-STATS.final.json', +]); const repoRoot = path.resolve( spawnSync('git', ['rev-parse', '--show-toplevel'], { cwd: scriptDirectory, @@ -24,10 +35,20 @@ const repoRoot = path.resolve( windowsHide: true, }).stdout.trim(), ); +const legacyManifestPath = path.join( + repoRoot, + '.agent', + 'reports', + 'evidence', + 'production-ready', + 'db-embedding-stats', + 'SHA256SUMS.txt', +); const originalBytes = new Map([ [artifactManifestPath, fs.readFileSync(artifactManifestPath)], [contractPath, fs.readFileSync(contractPath)], + [legacyManifestPath, fs.readFileSync(legacyManifestPath)], ]); function restoreOriginals() { @@ -48,6 +69,19 @@ function withMutation(filePath, mutate, verify) { } } +function withReplacements(replacements, verify) { + const originals = new Map(); + try { + for (const [filePath, bytes] of replacements) { + originals.set(filePath, fs.readFileSync(filePath)); + fs.writeFileSync(filePath, bytes); + } + return verify(); + } finally { + for (const [filePath, bytes] of originals) fs.writeFileSync(filePath, bytes); + } +} + function runVerifier(mode) { const result = spawnSync(process.execPath, [verifierPath, `--mode=${mode}`], { cwd: repoRoot, @@ -75,6 +109,16 @@ function expectFailClosed(result) { ); } +function expectFailClosedBeforeSourceAccess(result) { + expectFailClosed(result); + assert.deepEqual( + result.output?.source_accesses, + { git_objects: 0, checkout_files: 0 }, + 'schema-invalid source paths must be rejected before Git or filesystem source access', + ); + assert.deepEqual(result.output?.entries, [], 'schema-invalid source paths must not be verified'); +} + function mutateArtifactManifest(mutator) { return (bytes) => { const text = bytes.toString('utf8'); @@ -111,6 +155,20 @@ function sha256(bytes) { return crypto.createHash('sha256').update(bytes).digest('hex'); } +function gitBytes(args) { + const result = spawnSync('git', args, { + cwd: repoRoot, + encoding: null, + windowsHide: true, + }); + assert.equal(result.status, 0, result.stderr.toString('utf8')); + return result.stdout; +} + +function gitText(args) { + return gitBytes(args).toString('utf8').trim(); +} + function mutateContract(mutator) { return (bytes) => { const text = bytes.toString('utf8'); @@ -275,3 +333,101 @@ test('contract rejects unknown schema keys', async (t) => { }); } }); + +test('contract rejects deleting one required source when the legacy manifest agrees', () => { + const removedPath = REQUIRED_SOURCE_PATHS.at(-1); + const contractBytes = mutateContract((contract) => { + contract.entries = contract.entries.filter((entry) => entry.path !== removedPath); + })(fs.readFileSync(contractPath)); + const legacyBytes = mutateArtifactManifest((lines) => { + const index = lines.findIndex((line) => line.endsWith(` ${removedPath}`)); + assert.notEqual(index, -1); + lines.splice(index, 1); + })(fs.readFileSync(legacyManifestPath)); + + const result = withReplacements( + [ + [contractPath, contractBytes], + [legacyManifestPath, legacyBytes], + ], + () => runVerifier('git-object'), + ); + expectFailClosed(result); +}); + +test('contract rejects a valid go.mod substitution that preserves cardinality', () => { + const replacedPath = REQUIRED_SOURCE_PATHS.at(-1); + const substitutePath = 'go.mod'; + const substituteBytes = gitBytes([ + 'cat-file', + 'blob', + `${ACCEPTED_SOURCE_COMMIT}:${substitutePath}`, + ]); + const substitute = { + path: substitutePath, + git_blob_oid: gitText(['rev-parse', `${ACCEPTED_SOURCE_COMMIT}:${substitutePath}`]), + byte_length: substituteBytes.length, + sha256: sha256(substituteBytes), + }; + const contractBytes = mutateContract((contract) => { + const index = contract.entries.findIndex((entry) => entry.path === replacedPath); + assert.notEqual(index, -1); + contract.entries[index] = substitute; + })(fs.readFileSync(contractPath)); + const legacyBytes = mutateArtifactManifest((lines) => { + const index = lines.findIndex((line) => line.endsWith(` ${replacedPath}`)); + assert.notEqual(index, -1); + lines[index] = `${substitute.sha256} ${substitute.path}`; + })(fs.readFileSync(legacyManifestPath)); + + const result = withReplacements( + [ + [contractPath, contractBytes], + [legacyManifestPath, legacyBytes], + ], + () => runVerifier('git-object'), + ); + expectFailClosed(result); +}); + +test('contract rejects rebinding source commit and legacy metadata to an ancestor', () => { + const contractBytes = mutateContract((contract) => { + contract.representation.source_commit = ALTERNATE_ANCESTOR; + })(fs.readFileSync(contractPath)); + const legacyBytes = mutateArtifactManifest((lines) => { + const index = lines.findIndex((line) => line.startsWith('# source-commit=')); + assert.notEqual(index, -1); + lines[index] = `# source-commit=${ALTERNATE_ANCESTOR}`; + })(fs.readFileSync(legacyManifestPath)); + + const result = withReplacements( + [ + [contractPath, contractBytes], + [legacyManifestPath, legacyBytes], + ], + () => runVerifier('git-object'), + ); + expectFailClosed(result); +}); + +test('contract rejects an invalid raw source path before source access', () => { + const invalidPath = 'internal/embedding/../embedding/store.go'; + const originalPath = REQUIRED_SOURCE_PATHS[0]; + const contractBytes = mutateContract((contract) => { + contract.entries[0].path = invalidPath; + })(fs.readFileSync(contractPath)); + const legacyBytes = mutateArtifactManifest((lines) => { + const index = lines.findIndex((line) => line.endsWith(` ${originalPath}`)); + assert.notEqual(index, -1); + lines[index] = lines[index].replace(originalPath, invalidPath); + })(fs.readFileSync(legacyManifestPath)); + + const result = withReplacements( + [ + [contractPath, contractBytes], + [legacyManifestPath, legacyBytes], + ], + () => runVerifier('git-object'), + ); + expectFailClosedBeforeSourceAccess(result); +}); diff --git a/.agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R3.red.json b/.agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R3.red.json new file mode 100644 index 00000000..6bedbc5c --- /dev/null +++ b/.agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R3.red.json @@ -0,0 +1,23 @@ +{ + "task_id": "DB-EMBEDDING-EVIDENCE-TRANSPORT-R3", + "stack": "GO repository with Node.js evidence verifier", + "observed_at": "2026-07-10T14:57:31.2279610Z", + "test_file": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.test.cjs", + "test_name": "R2 checker false-PASS regressions fail closed before source access", + "failure_reason": "The R2 verifier false-PASSED delete-one, valid go.mod substitution, and alternate-ancestor rebind mutations, and attempted Git access for a schema-invalid raw path.", + "baseline": { + "exit_code": 0, + "tests": 18, + "passed": 18, + "failed": 0 + }, + "red": { + "exit_code": 1, + "tests": 22, + "passed": 18, + "failed": 4, + "false_pass_failures": 3, + "pre_access_gate_failures": 1 + }, + "runner_stdout_excerpt": "tests 22; pass 18; fail 4; delete-one, go.mod substitution, and source rebind returned exit 0; invalid raw path reached git cat-file and emitted no structured FAIL" +} diff --git a/.agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R3.tdd.json b/.agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R3.tdd.json new file mode 100644 index 00000000..1da3eacf --- /dev/null +++ b/.agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R3.tdd.json @@ -0,0 +1,86 @@ +{ + "task_id": "DB-EMBEDDING-EVIDENCE-TRANSPORT-R3", + "stack": "GO repository with Node.js evidence verifier", + "red": { + "observed_at": "2026-07-10T14:57:31.2279610Z", + "test_file": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.test.cjs", + "test_name": "R2 checker false-PASS regressions fail closed before source access", + "baseline_passed_tests": 18, + "passed_tests": 18, + "failed_tests": 4, + "exit_code": 1, + "runner_stdout_excerpt": "tests 22; pass 18; fail 4; three verifier false PASS results plus one raw-path source-access violation" + }, + "green": { + "observed_at": "2026-07-10T15:13:31.3066559Z", + "passed_tests": 22, + "failed_tests": 0, + "skipped_tests": 0, + "regressed_tests": 0, + "exit_code": 0, + "runner_stdout_excerpt": "tests 22; pass 22; fail 0; captured_exit=0" + }, + "refactor": { + "applied": false, + "reason": "The GREEN implementation is a bounded source-lock allowlist and one pre-access gate; no behavior-preserving extraction was needed." + }, + "prove_it": { + "substituted_files": [ + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.cjs" + ], + "substituted_functions": [ + "validateContractSchema", + "verifyArtifactFiles" + ], + "runs": [ + { + "sentinel_function": "validateContractSchema", + "exit_code": 1, + "passed_tests": 10, + "failed_tests": 12 + }, + { + "sentinel_function": "verifyArtifactFiles", + "exit_code": 1, + "passed_tests": 13, + "failed_tests": 9 + } + ], + "failed_tests": 21, + "post_restore_passed_tests": 22, + "post_restore_failed_tests": 0, + "post_restore_exit_code": 0, + "restored_byte_identical": true + }, + "coverage": { + "runner": "node --test --test-concurrency=1 --experimental-test-coverage", + "repeat_count": 2, + "reproducible": true, + "aggregate": { + "line_percent": 87.27, + "branch_percent": 71.75, + "functions_percent": 94.87 + }, + "verifier": { + "line_percent": 79.55, + "branch_percent": 51.59, + "functions_percent": 81.82 + }, + "test_harness": { + "line_percent": 100.0, + "branch_percent": 97.94, + "functions_percent": 100.0 + }, + "threshold_basis": "aggregate line coverage", + "threshold": 80, + "status": "PASS", + "exit_code": 0 + }, + "behavioral_signal": { + "name": "release-evidence-false-pass-rate", + "measurement_window": "each verifier self-test run", + "target": "0 false PASS results across 22 permanent mutation cases", + "measurement_method": "Node built-in test runner executes verifier subprocesses against byte-restored contract and manifest mutations", + "evidence_source": "independent checker findings ETR2-C001, ETR2-C002, and ETR2-C003" + } +} From d22ebb9fe1914f514eaf9250e092dcd3b396f9cc Mon Sep 17 00:00:00 2001 From: Kirill Turanskiy Date: Fri, 10 Jul 2026 18:53:00 +0300 Subject: [PATCH 035/111] feat(security): enforce project identity v2 barriers --- .../maker-contract.md | 193 ++++++++ .../openclaw-consumer-map.md | 109 +++++ .../security-review.md | 74 +++ .../verification-manifest.md | 59 +++ .../SECURITY-PROJECT-IDENTITY.green.json | 89 ++++ .../SECURITY-PROJECT-IDENTITY.prove-it.json | 58 +++ .../SECURITY-PROJECT-IDENTITY.red.json | 70 +++ .../evidence/project-identity-v2-vectors.json | 46 ++ docs/arch/architecture.md | 42 +- internal/db/gorm/project_identity_v2_test.go | 214 +++++++++ internal/db/gorm/project_store.go | 427 ++++++++++++++++++ .../grpcserver/project_identity_v2_test.go | 128 ++++++ internal/grpcserver/server.go | 86 +++- internal/handlers/engramcore/contract_test.go | 14 +- .../engramcore/project_identity_v2_test.go | 68 +++ internal/handlers/engramcore/tools.go | 41 +- internal/proxy/identity.go | 186 ++++++++ internal/proxy/identity_test.go | 111 +++++ internal/worker/handlers_context.go | 102 +++-- ...ndlers_context_project_identity_v2_test.go | 144 ++++++ plugin/engram/hooks/lib.js | 152 +++++++ .../engram/hooks/project-identity-v2.test.js | 99 ++++ plugin/openclaw-engram/src/client.ts | 162 +++++++ .../openclaw-engram/src/commands/remember.ts | 7 +- .../src/hooks/after-tool-call.ts | 14 +- .../src/hooks/before-agent-start.ts | 9 +- .../src/hooks/before-compaction.ts | 14 +- .../src/hooks/before-prompt-build.ts | 8 +- .../src/hooks/before-tool-call.ts | 5 +- .../openclaw-engram/src/hooks/session-end.ts | 12 +- .../src/hooks/session-start.ts | 10 +- plugin/openclaw-engram/src/identity.ts | 121 ++++- plugin/openclaw-engram/src/index.ts | 16 +- .../src/services/file-watcher.ts | 13 +- .../src/tools/engram-decisions.ts | 7 +- .../src/tools/engram-find-by-file.ts | 7 +- .../src/tools/engram-issues.ts | 7 +- .../src/tools/engram-presets.ts | 7 +- .../src/tools/engram-remember.ts | 7 +- .../src/tools/engram-search.ts | 7 +- .../src/tools/engram-timeline.ts | 7 +- .../openclaw-engram/src/tools/engram-vault.ts | 7 +- .../openclaw-engram/src/tools/memory-get.ts | 14 +- .../src/tools/memory-migrate.ts | 7 +- .../test/project-identity-transport.test.mjs | 160 +++++++ .../test/project-identity-v2.test.mjs | 69 +++ .../test/prompt-safety.test.mjs | 3 + proto/engram/v1/engram.pb.go | 288 +++++++++--- proto/engram/v1/engram.proto | 22 + 49 files changed, 3362 insertions(+), 160 deletions(-) create mode 100644 .agent/reports/evidence/production-ready/security-project-identity/maker-contract.md create mode 100644 .agent/reports/evidence/production-ready/security-project-identity/openclaw-consumer-map.md create mode 100644 .agent/reports/evidence/production-ready/security-project-identity/security-review.md create mode 100644 .agent/reports/evidence/production-ready/security-project-identity/verification-manifest.md create mode 100644 .agent/specs/security-project-identity/evidence/SECURITY-PROJECT-IDENTITY.green.json create mode 100644 .agent/specs/security-project-identity/evidence/SECURITY-PROJECT-IDENTITY.prove-it.json create mode 100644 .agent/specs/security-project-identity/evidence/SECURITY-PROJECT-IDENTITY.red.json create mode 100644 .agent/specs/security-project-identity/evidence/project-identity-v2-vectors.json create mode 100644 internal/db/gorm/project_identity_v2_test.go create mode 100644 internal/grpcserver/project_identity_v2_test.go create mode 100644 internal/handlers/engramcore/project_identity_v2_test.go create mode 100644 internal/worker/handlers_context_project_identity_v2_test.go create mode 100644 plugin/engram/hooks/project-identity-v2.test.js create mode 100644 plugin/openclaw-engram/test/project-identity-transport.test.mjs create mode 100644 plugin/openclaw-engram/test/project-identity-v2.test.mjs diff --git a/.agent/reports/evidence/production-ready/security-project-identity/maker-contract.md b/.agent/reports/evidence/production-ready/security-project-identity/maker-contract.md new file mode 100644 index 00000000..4829b419 --- /dev/null +++ b/.agent/reports/evidence/production-ready/security-project-identity/maker-contract.md @@ -0,0 +1,193 @@ +# SECURITY-PROJECT-IDENTITY Maker Contract + +Observed at: 2026-07-10T14:28:51.0969752Z + +## Exact implementation boundary + +- Base: `dc891b2d72b1fd63b83e4a630a249241fc389151` +- Branch: `work/prc-security-project-identity` +- Worktree: `D:/Dev/engram/.agent/worktrees/prc-security-project-identity` +- Workspace classification: `already-isolated` +- Finish target: `review-needed` +- Product writes are limited to the owner paths named in the maker brief. +- Primary/integration worktrees, role/session/oracle state, release state, and + non-owned product paths are forbidden. + +## Pre-edit scaffold classification + +| Surface | Classification | Live-code evidence and decision | +| --- | --- | --- | +| `internal/proxy/identity.go:ResolveProjectSlug` | `live` | Called by `internal/handlers/engramcore/slugcache.go`, which is used by both `ProxyTools` and `ProxyHandleTool`; existing Go tests execute git, non-git, worktree, and anchor paths. Preserve the legacy selector contract while adding a separate v2 resolver. | +| Legacy `.engram-project` `{name,id}` handling | `live` | Non-git calls read/create it today. Its six-hex path-derived `id` is not a high-entropy anchor and must never be reclassified as one. Preserve it only as a legacy selector/display-name compatibility surface. | +| Versioned high-entropy non-git anchor | `must-build` | No version, cryptographic random anchor, strict validator, or explicit sharing bit exists in Go, Claude, or OpenClaw. Build an additive `.engram-project-v2.json` contract; old binaries ignore it on rollback. | +| `internal/handlers/engramcore/tools.go` request construction | `live` | Both first `tools/list` and first `tools/call` synchronously reach gRPC. Add full v2 metadata to both without depending on a lifecycle hook. | +| `proto/engram/v1/engram.proto` `Initialize*` / `CallTool*` | `live` | These are the current daemon/server wire messages. V2 metadata and canonical resolution fields are absent and therefore `must-build` additions to live messages. Existing tags remain untouched. | +| `internal/grpcserver/server.go` `Initialize` / `CallTool` | `live` | `CallTool` currently injects the raw selector directly into MCP context before any identity registration. `Initialize` ignores identity entirely. Both must synchronously call `RegisterAndResolve` before handler/data access. | +| `internal/db/gorm/project_store.go:UpsertProject` | `live` | Called by the HTTP context path. It creates a canonical row and appends an alias, but has no full-identity contradiction guard. Keep as a compatibility wrapper, not as the v2 convergence primitive. | +| `internal/db/gorm/project_store.go:ResolveProjectID` | `live` | Called by HTTP and issue paths. Its `LIMIT 1` makes duplicate aliases nondeterministic. V2 uses a new fail-closed resolver that counts all canonical candidates; the legacy wrapper remains for non-v2 callers outside this owner slice. | +| `internal/worker/handlers_context.go` async alias upsert | `live` | The handler resolves first, then launches `UpsertProject` in a goroutine after access has begun. Replace this owned path with synchronous resolve-before-access and an identity-only registration mode. | +| `plugin/engram/hooks/lib.js` identity helpers and `RunHook` | `live` | Every Claude hook constructs this context. Add a v2 generator and make `RunHook` complete identity registration before invoking a handler, so even late hooks are idempotent. | +| `plugin/openclaw-engram/src/identity.ts` | `live` | Current IDs include a repo-name prefix and agent-only fallback and therefore diverge from Go/Claude. Preserve the existing `projectId` as a compatibility selector; add the same full v2 metadata and shared vectors. | +| Proposed `project_identities_v2` persistence | `rejected/unowned` | Current schema governance is `gormigrate` in `internal/db/gorm/migrations.go`, which is outside this maker boundary. Request-time DDL or `AutoMigrate` would make readiness and rollback claims false. V2 therefore uses only the existing `projects` rows and their `git_remote`, `relative_path`, and `legacy_ids` relation. | +| Identity-only HTTP registration | `must-build` | No dedicated route exists in the allowed owner set. Add an `identity_only` request mode to the live `/api/context/inject` route and return the resolved canonical selector before retrieval/mutation. | +| `docs/arch/architecture.md` identity/data-flow description | `pre-demolition-stale` | It still describes a GET hook flow and omits current stdio-daemon/gRPC identity convergence. Use only as a documentation correction target, never as implementation evidence. | +| v5 graph/rerank/server-side HTTP MCP remnants | `pre-demolition-stale` | None is on the selected call path. No graph stage, reranker, removed `internal/search` pass, SDK extraction, or HTTP MCP transport will be restored. | +| `ENGRAM_ENFORCE_SOURCE_PROJECT` authorization checks | `live` | The flag is read in Go and defaults true. It remains an authorization/data-scope guard independent of identity convergence; a selector or resolved canonical ID never creates an authenticated principal or private-access grant. | + +No selected identity scaffold is dormant behind an unset feature flag. + +## Consumer map + +| Consumer | Input dependency | Output dependency | +| --- | --- | --- | +| stdio daemon | `muxcore.ProjectContext` plus local git/non-git metadata | Additive protobuf `ProjectIdentityV2`; resolved canonical is server-owned | +| Claude hooks | hook `cwd` plus v2 anchor file for non-git workspaces | Synchronous identity-only HTTP response updates `context.Project` before the hook handler | +| OpenClaw | `workspaceDir` when available; agent ID remains an agent identity, not a project proof | Existing `projectId` compatibility selector plus optional v2 metadata | +| gRPC server | selector plus optional v2 message | Canonical selector or stable gRPC status details before MCP handler access | +| HTTP context API | selector plus optional v2 JSON object | Canonical selector or stable JSON error before retrieval/mutation | +| PostgreSQL | existing `projects` namespace and metadata/alias relation | Transactionally consistent identity-to-canonical mapping; no request-path DDL | + +## Versioned input contract + +`ProjectIdentityV2` is version `2` and has exactly one source form: + +- Git: non-empty normalized `git_remote` and normalized repository-relative + POSIX `relative_path`; `non_git_anchor` absent and `anchor_shared` absent. +- Non-git: `non_git_anchor` is exactly 32 lowercase hexadecimal characters + generated from 16 bytes of `crypto/rand` / `crypto.randomBytes`; git fields + are absent; `anchor_shared` has explicit presence and is `false` unless a + human intentionally opts into sharing. + +Both forms carry the existing client selector as the outer request `project`, +an optional legacy path alias, and a display name. Empty selectors, unknown +versions, mixed source forms, malformed paths/remotes, weak anchors, and absent +non-git sharing presence are invalid before database mutation. + +Anchor convergence is explicit: + +- identical non-git anchors with `anchor_shared=true` may converge; +- copied anchors with `anchor_shared=false` remain distinct by selector; +- an unshared binding is never silently promoted to shared; +- agent IDs are not accepted as high-entropy project anchors. + +## RegisterAndResolve semantics + +1. Validate the complete request before opening a write transaction. +2. Take transaction-scoped advisory locks for the normalized full identity and + every supplied selector; do not create or migrate schema on the request path. +3. Git identities resolve by the existing `git_remote` + `relative_path` + relation. Non-git identities use a deterministic canonical ID derived from + `(v2, anchor, anchor_shared, selector-when-unshared)` and persist as ordinary + `projects` rows with nil git fields; the raw anchor is not stored. +4. A shared non-git anchor may return an existing explicitly shared binding. +5. A single existing legacy namespace remains canonical when it has not already + been bound to a contradictory full identity. +6. A contradictory full identity receives a separate deterministic v2 + canonical namespace and never merges with the existing binding. +7. A legacy-only request resolves only when zero-or-one canonical candidate + exists. Zero creates the legacy namespace for old-client compatibility; more + than one fails before tenant data mutation. +8. Registration and alias/binding writes commit atomically. Repeated and late + calls are idempotent; concurrent calls converge through database constraints + and transaction locks. + +## Stable error contract + +| Code | Transport | Meaning | Upgrade action | +| --- | --- | --- | --- | +| `PROJECT_IDENTITY_INVALID` | HTTP 400 / gRPC `InvalidArgument` | V2 metadata is malformed or unsupported | `regenerate_project_identity_v2` | +| `PROJECT_IDENTITY_AMBIGUOUS` | HTTP 409 / gRPC `FailedPrecondition` | A legacy-only selector maps to multiple canonical identities | `send_project_identity_v2` | +| `PROJECT_IDENTITY_UNAVAILABLE` | HTTP 503 / gRPC `Unavailable` | Resolver database is unavailable before access | `retry_project_identity_registration` | + +HTTP errors use `{error:{code,message,upgrade_action}}`. gRPC errors use +`google.rpc.ErrorInfo` with the same reason and `upgrade_action` metadata. +Messages are diagnostic; consumers branch on code/reason and action. + +## Authorization invariant and threat model + +Security classification: **S3 (High)** because this change selects tenant data +and can affect private-memory isolation. + +- Spoofing: project metadata never authenticates a principal; existing HTTP and + gRPC bearer validation remains authoritative. +- Tampering: strict source-form/path/anchor validation and transactional binding + prevent malformed or partial convergence. +- Repudiation: stable error codes/actions and persisted binding timestamps make + conflict outcomes observable without logging secrets. +- Information disclosure: the resolver returns only a canonical selector; it + does not enumerate conflicting private projects. +- Denial of service: bounded metadata sizes and indexed/locked keys prevent + unbounded input or process-local race loops. +- Elevation of privilege: selecting, guessing, or resolving a project never + grants private access. Authorization and principal visibility filters run + independently after identity resolution. + +## Compatibility and versioning decision + +- Protobuf classification: `ADDITIVE` and binary wire-safe. Existing field + numbers are unchanged; new fields/messages receive new tags only. +- New client -> old server: old protobuf runtimes ignore unknown fields; the + existing selector remains populated. +- Old client -> new server: absent-v2 resolution remains compatible only while + the selector is unambiguous; ambiguity intentionally fails closed with an + upgrade action. +- New client -> new server: full identity is registered synchronously before + first handler/data access. +- Database: no schema expansion and no request-path DDL. Existing `projects` + rows provide the binding relation; restart reuses their metadata/aliases and + rollback sees ordinary compatible project rows plus ignored protobuf fields. +- Anchor file: `.engram-project-v2.json` is additive; old clients continue using + `.engram-project` and ignore the v2 file. + +Primary-source lookup on 2026-07-10: + +- `https://protobuf.dev/programming-guides/proto3/` returned HTTP 200 and states + that adding fields is binary wire-safe, old binaries ignore new fields, new + binaries parse old messages, and unknown fields are preserved in binary form. +- `https://protobuf.dev/best-practices/dos-donts/` returned HTTP 200 and states + that tag numbers must never be reused and deleted tags should be reserved. +- `https://grpc.io/docs/languages/go/generated-code/` returned HTTP 200 and + documents the `protoc` plus `protoc-gen-go-grpc` generated client/server + interface contract. +- A guessed gRPC versioning guide URL returned HTTP 404. No compatibility claim + is grounded on that missing page; mixed-version behavior will be proven with + this repository's `protoc 34.0`, `protoc-gen-go v1.36.11`, + `protoc-gen-go-grpc v1.6.1`, generated bindings, and executable tests. + +## Verification contract + +- One shared JSON vector corpus is consumed by Go, Claude Node, and OpenClaw + TypeScript tests. +- RED precedes production edits and is recorded under + `.agent/specs/security-project-identity/evidence/`. +- GREEN covers collision/concurrency, contradictory identities, explicit + anchor sharing, first CallTool-before-hook, late/repeated hook registration, + old/new mixed versions, restart, rollback, and fresh migrated DB behavior. +- Prove-It substitutes resolver/generator bodies with sentinels and must produce + failures before restoration. +- Final gates include Go unit/integration/race/repeat, Node tests, TypeScript + build/tests, protobuf regeneration parity, coverage, residue, secret scan, + exact owned-path diff, and a clean atomic commit. + +## Maker self-review corrections + +The post-GREEN behavioral-edge pass found and fixed issues that the first +structural implementation did not prove: + +- old HTTP metadata initially resolved `legacy_project` first and could make it + canonical on a fresh database; the outer `project` is now always canonical and + `legacy_project` is only a conflict-checked alias; +- selector/metadata whitespace and control characters were initially normalized + or accepted; they now fail invalid before database access; +- a soft-deleted deterministic binding could initially receive aliases; active + row predicates now make that collision fail closed without mutation; +- raw PostgreSQL diagnostics initially reached HTTP/gRPC errors; transports now + serialize stable public messages only; +- JavaScript anchor readers initially ignored unknown fields; Go, Claude, and + OpenClaw now enforce the same exact three-field versioned file; +- Claude initially treated every non-HTTP exception as offline; only explicit + network/timeout failures retain offline fallback, while malformed + reached-server responses skip the handler. + +Each correction was preceded by a focused failing regression and is recorded in +the RED/GREEN/Prove-It evidence files. diff --git a/.agent/reports/evidence/production-ready/security-project-identity/openclaw-consumer-map.md b/.agent/reports/evidence/production-ready/security-project-identity/openclaw-consumer-map.md new file mode 100644 index 00000000..3a5bedc5 --- /dev/null +++ b/.agent/reports/evidence/production-ready/security-project-identity/openclaw-consumer-map.md @@ -0,0 +1,109 @@ +# OpenClaw Project Identity v2 propagation gap + +Status update: root authorized the bounded ownership amendment after this map +was produced. The client barrier and all consumers listed below are now wired; +the table remains the pre-change evidence and review checklist. Post-change +residue proof is `22 resolveIdentity call sites == 22 awaited +registerAndResolveProject call sites`, with transport tests covering ordering, +canonical substitution, in-flight/completed dedupe, stable error short-circuit, +config override, session-start, and invalid-bearer negative behavior. + +Observed on base `dc891b2d72b1fd63b83e4a630a249241fc389151` plus the maker's +owned `identity.ts` metadata implementation. This is a read-only consumer map; +no path below was edited outside the accepted ownership slice. + +## Exact gap + +`resolveIdentity()` now returns `projectIdentityV2`, but every live consumer +extracts only `identity.projectId`. `EngramRestClient` has no identity-only +registration method, no canonical-project cache, and no in-flight registration +dedupe. Therefore OpenClaw's first HTTP data access can precede +`RegisterAndResolve` even though the same invariant is already enforced for the +stdio daemon/gRPC path and Claude hooks. + +The earliest normal OpenClaw access is `hooks/session-start.ts`: it resolves the +identity and immediately schedules `client.initSession(...)` without awaiting a +registration. `hooks/before-agent-start.ts` later calls `getContextInject`, but +that request currently sends only `{agent_id,cwd}` and also performs retrieval; +it is not a registration barrier. + +## Client endpoint and request-shape map + +| Client method | Endpoint | Current project/identity shape | Data class | +| --- | --- | --- | --- | +| `getContextInject` | `POST /api/context/inject` | `{agent_id,cwd?}`; no `project`, no v2 metadata | project context read | +| `searchContext` | `POST /api/context/search` | `{project,query,...}`; selector only | project context read | +| `searchDecisions` | `POST /api/decisions/search` | `{project,query,limit?}`; selector only | project decision read | +| `trackSearchMiss` | `POST /api/analytics/search-misses` | `{project,query}`; selector only | project telemetry write | +| `ingestEvent` | `POST /api/events/ingest` | `{session_id,project,tool_*}`; selector only | project event write | +| `backfillSession` | `POST /api/backfill/session` | `{session_id,project,content}`; selector only | project memory write | +| `initSession` | `POST /api/sessions/init` | `{claudeSessionId,project,prompt?}`; selector only | project session write | +| `bulkImport` | `POST /api/observations/bulk-import` | `project` copied from first observation; selector only | project memory write | +| `getFileContext` | `GET /api/context/by-file` | `project` query parameter; selector only | project context read | +| `getTimeline` | `POST /api/context/search` | `{project,mode,...}`; selector only | project context read | +| `storeCredential` | `POST /api/vault/credentials` | `{...,scope,project}`; selector only | private credential write | +| issue methods | `/api/issues...` | optional project/source-project selectors; no v2 | cross-project private read/write | + +`getCredential`, observation-by-ID mutation helpers, session-outcome helpers, +health, and self-check do not accept a project selector. They still rely on +bearer/principal authorization; project identity must not be presented as an +authorization substitute. + +## Every live `resolveIdentity` consumer + +| Consumer | First HTTP operation after identity resolution | Ordering defect | +| --- | --- | --- | +| `src/hooks/session-start.ts:38` | `initSession` (`POST /api/sessions/init`) | fire-and-forget write is scheduled immediately | +| `src/hooks/before-agent-start.ts:47` | `getContextInject` (`POST /api/context/inject`) | retrieval request has only agent ID/cwd | +| `src/hooks/before-prompt-build.ts:60` | `searchContext` | read before registration | +| `src/hooks/before-tool-call.ts:77` | `getFileContext` | read before registration; 500 ms path | +| `src/hooks/after-tool-call.ts:74` | `ingestEvent`, then possible `searchDecisions` | fire-and-forget write before registration | +| `src/hooks/before-compaction.ts:40` | `backfillSession` | fire-and-forget write before registration | +| `src/hooks/session-end.ts:74` | `backfillSession` or `setSessionOutcome` | write before registration | +| `src/commands/remember.ts:38` | `bulkImport` | write before registration | +| `src/index.ts:195` | CLI `searchContext` | read before registration | +| `src/index.ts:218` | CLI `bulkImport` | write before registration | +| `src/services/file-watcher.ts:40` | later `bulkImport` in flush | constructor keeps selector only; metadata is discarded | +| `src/tools/engram-decisions.ts:43` | `searchDecisions` | read before registration | +| `src/tools/engram-find-by-file.ts:49` | `getFileContext` | read before registration | +| `src/tools/engram-issues.ts:190` | create/list/get/update issue by action | private read/write before registration | +| `src/tools/engram-presets.ts:47` | `searchContext` | read before registration | +| `src/tools/engram-remember.ts:77` | `bulkImport` | write before registration | +| `src/tools/engram-search.ts:47` | `searchContext` | read before registration | +| `src/tools/engram-timeline.ts:55` | `getTimeline` | read before registration | +| `src/tools/engram-vault.ts:61` | `storeCredential` or `getCredential` | private access before registration; get has no selector | +| `src/tools/memory-get.ts:58` | optional local-file `bulkImport` | write before registration | +| `src/tools/memory-get.ts:134` | remote `searchContext` | read before registration | +| `src/tools/memory-migrate.ts:169` | batched `bulkImport` | write before registration | + +## Bounded successor/amendment shape + +The smallest end-to-end amendment is: + +1. `src/client.ts`: add an awaited `registerAndResolveProject(identity, + selector)` barrier that sends + `{project,project_identity,identity_only:true}` to + `POST /api/context/inject`, returns `canonical_project`, and deduplicates + concurrent registration with an in-flight promise keyed by full identity. + Stable HTTP error code/action must propagate; no downstream request is sent + after registration failure. +2. Change `getContextInject` to accept the resolved canonical project and send + it explicitly; it remains a retrieval call, not the registration primitive. +3. At every consumer above, await the barrier immediately after + `resolveIdentity()` and before the first client call. Replace every + fire-and-forget first access with `await barrier; void dataCall(...)`. +4. `file-watcher.ts`: retain the full identity in the service and await the + barrier in `start()` before installing/flush-enabling the watcher. +5. Configured `config.project` is the outer compatibility selector. When a + workspace v2 identity exists it is sent with that selector; when workspace + metadata is unavailable, send legacy-only and fail closed if ambiguous. +6. Tests: a fake fetch sequence must prove registration is request 1 and data + access request 2; canonical substitution; concurrent dedupe; late-hook + idempotence; first session-start access; registration-error short circuit; + config-project override; missing-workspace legacy behavior; and that selector + knowledge without a bearer does not authorize private access. + +Likely amended owned paths: `src/client.ts`, the 20 consumer files above, +`test/project-identity-transport.test.mjs`, and any existing hook/client tests +whose request fixtures require the additive registration call. No server schema, +migration, auth, or unrelated OpenClaw behavior needs expansion. diff --git a/.agent/reports/evidence/production-ready/security-project-identity/security-review.md b/.agent/reports/evidence/production-ready/security-project-identity/security-review.md new file mode 100644 index 00000000..bdd156a7 --- /dev/null +++ b/.agent/reports/evidence/production-ready/security-project-identity/security-review.md @@ -0,0 +1,74 @@ +# SECURITY-PROJECT-IDENTITY Security Review + +Classification: **S3 / High**. Project identity selects a tenant namespace and +therefore sits on the path to private data, even though it is deliberately not +an authentication credential. + +## Security invariants + +- HTTP bearer/session middleware and the gRPC auth interceptor execute + independently of project resolution. A known selector, git remote/path, or + non-git anchor never creates a principal or grants private visibility. +- Full metadata is validated before database access. Unknown versions, mixed + source forms, raw-vs-normalized selectors, control characters, traversal, + overlong fields, weak anchors, and absent sharing presence fail with + `PROJECT_IDENTITY_INVALID`. +- Registration takes deterministic transaction-scoped PostgreSQL advisory + locks. Repeated/concurrent calls converge; legacy-only ambiguity counts every + candidate and fails closed rather than selecting `LIMIT 1`. +- The binding key is a 128-bit SHA-256 prefix. Raw non-git anchors are never + written to PostgreSQL, logs, errors, or response payloads. +- Soft-deleted deterministic bindings cannot receive aliases or be silently + revived. Registration returns the stable unavailable contract instead. +- Database diagnostics are not serialized. HTTP and gRPC expose only stable + public messages plus code/reason and `upgrade_action`. +- Every OpenClaw project consumer awaits registration before its first data + operation: 20 files, 22 resolve calls, 22 awaited barriers. Registration + failure permits zero downstream project requests. +- Claude continues its historical offline fallback only for positively + classified transport failures. HTTP failures, malformed reached-server + responses, and other errors are hard barriers and skip the hook handler. + +## STRIDE assessment + +| Threat | Control and executable evidence | +| --- | --- | +| Spoofing | Identity is namespace metadata only. gRPC auth-interceptor and invalid-bearer OpenClaw tests prove selector knowledge does not bypass bearer validation. | +| Tampering | Strict cross-language validation, exact three-field anchor documents, cryptographic generation, transaction locks, and soft-delete collision tests. | +| Repudiation | Stable machine-readable codes/actions make conflict outcomes auditable without logging raw anchors or database internals. | +| Information disclosure | Resolver returns only the canonical selector; ambiguity does not enumerate candidates; DB details and secrets are absent from added lines and transport errors. | +| Denial of service | Metadata is bounded, registration is timeout-controlled, lock keys are bounded/deterministic, and duplicate locks are removed. | +| Elevation of privilege | Principal authorization remains a separate middleware/interceptor and visibility-filter concern after identity resolution. | + +## Compatibility and rollback + +- Protobuf changes are additive; existing tags are unchanged. Regeneration is + byte-reproducible with the recorded toolchain. +- Old clients retain their outer `project` selector. The separate + `legacy_project` field remains an alias and cannot replace the outer canonical + selector on a fresh database. +- New clients to an old server retain the outer selector when additive metadata + or `canonical_project` is unknown. Old clients to a new server fail closed + only when a legacy selector is genuinely ambiguous. +- No migration or request-time DDL was introduced. Rollback binaries see + ordinary `projects` rows and aliases. A rollback also rolls back the new + ambiguity enforcement; operational compatibility is proven, but the security + improvement itself naturally requires the new server binary. + +## Residual risks and deliberate fail-closed behavior + +1. A process crash during first anchor-file write can leave a malformed partial + file. All clients then fail closed until the operator repairs/removes that + file; they never regenerate over an existing malformed identity. +2. A soft-deleted deterministic binding collision returns 503 and requires an + explicit operator lifecycle decision. Silent resurrection was rejected. +3. Identity remains global namespace routing in the existing `projects` table; + confidentiality still depends on the existing bearer/principal visibility + system, as designed and tested. +4. Fresh-database testing surfaced two existing non-fatal migration warnings: + historical migration 040 references the v5-demolished + `observation_vectors`, and migration 109 skips optional vectorscale in a + pgvector-only image. Neither warning changes identity correctness or schema. + +Verdict: **maker security gate PASS; independent checker required before +integration**. diff --git a/.agent/reports/evidence/production-ready/security-project-identity/verification-manifest.md b/.agent/reports/evidence/production-ready/security-project-identity/verification-manifest.md new file mode 100644 index 00000000..0f0d5334 --- /dev/null +++ b/.agent/reports/evidence/production-ready/security-project-identity/verification-manifest.md @@ -0,0 +1,59 @@ +# SECURITY-PROJECT-IDENTITY Verification Manifest + +- Base: `dc891b2d72b1fd63b83e4a630a249241fc389151` +- Branch: `work/prc-security-project-identity` +- Worktree: `D:/Dev/engram/.agent/worktrees/prc-security-project-identity` +- Finish target: `review-needed` +- Candidate commit: intentionally recorded in the maker handoff because a + commit cannot contain its own hash. + +## Delivered contract + +- Shared Project Identity v2 metadata and vectors for Go, Claude, and OpenClaw. +- Strict high-entropy non-git anchor with explicit opt-in sharing. +- Additive gRPC fields and synchronous canonical resolution before handler + dispatch on both Initialize and CallTool. +- Synchronous HTTP identity-only registration before retrieval/mutation. +- PostgreSQL convergence using only the existing `projects` table, advisory + transaction locks, strict ambiguity counting, and no raw-anchor persistence. +- Claude and every OpenClaw consumer enforce a registration barrier before data + access; OpenClaw deduplicates concurrent and late successful registration. +- Stable HTTP/gRPC error code and upgrade-action contracts with sanitized public + diagnostics. +- Architecture documentation corrected for current stdio daemon + gRPC and + HTTP/OpenClaw flows; no v5-demolished path was restored. + +## Auditable artifacts + +- `maker-contract.md` — boundary, classification, API/versioning decision. +- `openclaw-consumer-map.md` — complete pre-change consumer inventory and + post-change 22/22 closure. +- `security-review.md` — S3/STRIDE review and residual risks. +- `.agent/specs/security-project-identity/evidence/project-identity-v2-vectors.json` + — repository-wide cross-language vectors. +- `.agent/specs/security-project-identity/evidence/SECURITY-PROJECT-IDENTITY.red.json` + — initial and edge RED evidence. +- `.agent/specs/security-project-identity/evidence/SECURITY-PROJECT-IDENTITY.green.json` + — final executable gates and toolchain. +- `.agent/specs/security-project-identity/evidence/SECURITY-PROJECT-IDENTITY.prove-it.json` + — mutation failures and restored GREEN. + +## Final gate summary + +| Gate | Result | +| --- | --- | +| `go test ./... -count=1` | PASS | +| `go vet ./...` | PASS | +| targeted `go test -race` | PASS | +| targeted `-count=10` | PASS, residue 0 | +| fresh PostgreSQL 17 migration + DB/HTTP tests | PASS, table present, residue 0, database dropped | +| OpenClaw build/test | PASS 23/23 | +| Claude hook suite | PASS 72/72 | +| protobuf regeneration parity | PASS, byte-identical | +| consumer barrier map | PASS, 20 files / 22 calls / 22 awaits | +| sentinel/schema/raw-anchor/secret/demolition scans | PASS, zero matches | +| `git diff --check` | PASS | + +Status: **READY_FOR_CHECK** after the atomic candidate commit is created. No +push, merge, release, primary-worktree write, role/oracle write, or checker +launch is part of this maker handoff. diff --git a/.agent/specs/security-project-identity/evidence/SECURITY-PROJECT-IDENTITY.green.json b/.agent/specs/security-project-identity/evidence/SECURITY-PROJECT-IDENTITY.green.json new file mode 100644 index 00000000..0c2739df --- /dev/null +++ b/.agent/specs/security-project-identity/evidence/SECURITY-PROJECT-IDENTITY.green.json @@ -0,0 +1,89 @@ +{ + "change_request": "SECURITY-PROJECT-IDENTITY", + "phase": "GREEN", + "observed_at": "2026-07-10T15:47:34.8541692Z", + "base_commit": "dc891b2d72b1fd63b83e4a630a249241fc389151", + "branch": "work/prc-security-project-identity", + "toolchain": { + "go": "go1.25.11 windows/amd64", + "node": "v24.2.0", + "npm": "11.7.0", + "protoc": "34.0", + "protoc_gen_go": "v1.36.11", + "protoc_gen_go_grpc": "v1.6.1", + "postgres_image": "pgvector/pgvector:pg17" + }, + "gates": [ + { + "command": "go test ./... -count=1", + "result": "pass", + "scope": "all Go packages and tests/smoke" + }, + { + "command": "go vet ./...", + "result": "pass" + }, + { + "command": "DATABASE_DSN= go test -race ./internal/proxy ./internal/handlers/engramcore ./internal/grpcserver ./internal/db/gorm ./internal/worker -run -count=1", + "result": "pass" + }, + { + "command": "DATABASE_DSN= go test ./internal/proxy ./internal/handlers/engramcore ./internal/grpcserver ./internal/db/gorm ./internal/worker -run -count=10", + "result": "pass", + "residue": 0 + }, + { + "command": "DATABASE_DSN= go test -run -cover -count=1", + "result": "pass", + "coverage_percent": { + "internal/proxy": 68.0, + "internal/handlers/engramcore": 46.5, + "internal/grpcserver": 7.1, + "internal/db/gorm": 2.8, + "internal/worker": 0.8 + }, + "note": "package-wide percentages are informational; no project threshold is configured" + }, + { + "command": "npm run build && npm test", + "cwd": "plugin/openclaw-engram", + "result": "pass 23/23" + }, + { + "command": "node --test hook-cli.test.js lib.test.js pre-compact.test.js pre-tool-use.test.js project-identity-v2.test.js session-start.test.js stop.test.js user-prompt.test.js", + "cwd": "plugin/engram/hooks", + "result": "pass 72/72" + }, + { + "command": "fresh PostgreSQL database -> run migrations -> focused identity DB/HTTP tests -> residue query -> drop database", + "result": "pass", + "table": "projects", + "residue": 0, + "database_removed": true, + "non_blocking_existing_migration_warnings": [ + "historical migration 040 logged missing observation_vectors after the v5 demolition", + "migration 109 skipped optional vectorscale because the test image provides pgvector only" + ] + }, + { + "command": "protoc regeneration and SHA-256 comparison", + "result": "byte-identical", + "hashes": { + "proto/engram/v1/engram.pb.go": "5D8F6B93125D393F938A96E8F13B737266F01E9E4FC67A19CB6B7060C4E9E9F5", + "proto/engram/v1/engram_grpc.pb.go": "D45A8333BAE5B954C5E8A628C95FC5A7F908312B7B7F1C49D66B9835F8758858" + } + } + ], + "contract_proofs": { + "openclaw_consumer_files": 20, + "openclaw_resolve_calls": 22, + "openclaw_awaited_registration_barriers": 22, + "new_identity_schema_matches": 0, + "raw_anchor_sql_write_matches": 0, + "prove_it_sentinel_matches": 0, + "added_secret_matches": 0, + "demolished_path_added_matches": 0, + "git_diff_check": "pass" + }, + "conclusion": "Maker GREEN is complete and ready for an independent checker. No merge, push, release, or primary-worktree write was performed." +} diff --git a/.agent/specs/security-project-identity/evidence/SECURITY-PROJECT-IDENTITY.prove-it.json b/.agent/specs/security-project-identity/evidence/SECURITY-PROJECT-IDENTITY.prove-it.json new file mode 100644 index 00000000..436c58e9 --- /dev/null +++ b/.agent/specs/security-project-identity/evidence/SECURITY-PROJECT-IDENTITY.prove-it.json @@ -0,0 +1,58 @@ +{ + "change_request": "SECURITY-PROJECT-IDENTITY", + "phase": "PROVE_IT", + "observed_date": "2026-07-10", + "mutations": [ + { + "surface": "database binding key", + "mutation": "temporarily replaced the deterministic v2 binding key with one constant", + "expected_failure_observed": [ + "contradictory full identities returned PROJECT_IDENTITY_AMBIGUOUS", + "copied unshared anchors converged when they must remain distinct" + ] + }, + { + "surface": "Go non-git entropy", + "mutation": "zeroed the 16 random bytes before encoding", + "expected_failure_observed": "independent project anchors became equal" + }, + { + "surface": "Claude non-git entropy", + "mutation": "replaced crypto.randomBytes output with zero bytes", + "expected_failure_observed": "independent project anchors became equal" + }, + { + "surface": "OpenClaw non-git entropy", + "mutation": "replaced randomBytes output with zero bytes", + "expected_failure_observed": "independent project anchors became equal" + }, + { + "surface": "OpenClaw registration barrier", + "mutation": "returned selector success before performing the registration HTTP request", + "expected_failure_observed": [ + "request count was 0 instead of 1", + "stable 409 ambiguity was incorrectly reported as success", + "invalid bearer was incorrectly reported as success", + "three of five transport tests failed" + ] + }, + { + "surface": "Claude registration barrier", + "mutation": "returned the legacy selector before invoking the registration request", + "expected_failure_observed": "canonical selector remained legacy-selector instead of canonical-v2" + }, + { + "surface": "behavioral edge regressions", + "mutation": "added tests before fixes for raw-vs-normalized input, soft-deleted binding, legacy canonical direction, diagnostic leakage, strict anchor fields, and offline classification", + "expected_failure_observed": "all six defect classes failed for their intended reasons before implementation" + } + ], + "restoration": { + "sentinel_scan_matches": 0, + "full_go_suite": "pass", + "race_and_repeat": "pass", + "openclaw": "pass 23/23", + "claude_hooks": "pass 72/72", + "fresh_database_residue": 0 + } +} diff --git a/.agent/specs/security-project-identity/evidence/SECURITY-PROJECT-IDENTITY.red.json b/.agent/specs/security-project-identity/evidence/SECURITY-PROJECT-IDENTITY.red.json new file mode 100644 index 00000000..48adeaa5 --- /dev/null +++ b/.agent/specs/security-project-identity/evidence/SECURITY-PROJECT-IDENTITY.red.json @@ -0,0 +1,70 @@ +{ + "change_request": "SECURITY-PROJECT-IDENTITY", + "phase": "RED", + "observed_at": "2026-07-10T14:46:40.7196462Z", + "base_commit": "dc891b2d72b1fd63b83e4a630a249241fc389151", + "infrastructure_probe": { + "go_test_list": "pass", + "claude_node_baseline": "pass 5/5", + "openclaw_typecheck_build_baseline": "pass", + "openclaw_baseline_tests": "pass 15/15" + }, + "gates": [ + { + "command": "go test ./internal/proxy ./internal/handlers/engramcore ./internal/grpcserver ./internal/db/gorm ./internal/worker -run 'ProjectIdentityV2|RegisterAndResolve|IdentityOnly|AmbiguousLegacy|FirstCallBeforeHook|ProtoFieldNumbers' -count=1", + "result": "expected failure", + "evidence": [ + "proxy.ProjectIdentityVersionV2/ProjectIdentityV2/ValidateProjectIdentityV2/ResolveProjectIdentityV2 undefined", + "gorm RegisterAndResolve and stable identity error contract undefined", + "protobuf ProjectIdentityV2, project_identity, canonical_project undefined", + "grpc Server.identityResolver undefined", + "worker stable identity error constants undefined" + ] + }, + { + "command": "node --test project-identity-v2.test.js", + "result": "expected failure: 0 pass, 3 fail", + "evidence": [ + "PROJECT_IDENTITY_VERSION_V2 undefined", + "resolveProjectIdentityV2 is not a function", + "registerProjectIdentityV2 is not a function" + ] + }, + { + "command": "npm test", + "result": "expected failure: build passed; 15 baseline pass, 1 v2 module fail", + "evidence": [ + "named export PROJECT_IDENTITY_VERSION_V2 not found from dist/identity.js" + ] + }, + { + "command": "npm test after root-authorized OpenClaw transport amendment", + "result": "expected failure: build passed; 17 baseline/current identity pass, 5 transport fail", + "evidence": [ + "EngramRestClient.registerAndResolveProject is not a function", + "session-start first operation is data rather than registration", + "session-start registration failure still permits a write", + "invalid-bearer short-circuit cannot be enforced without the barrier" + ] + }, + { + "command": "edge-regression RED: go test ./internal/db/gorm ./internal/worker ./internal/grpcserver -run 'RawVsNormalized|SoftDeletedBinding|LegacyMetadataPreserves|DoesNotExposeDatabaseDiagnostics' -count=1", + "result": "expected failure", + "evidence": [ + "raw selector and metadata normalization reached the unavailable-DB path instead of failing invalid before access", + "soft-deleted deterministic binding was silently accepted and mutated", + "legacy HTTP metadata returned the path alias as canonical instead of preserving the outer canonical selector", + "HTTP and gRPC responses exposed injected PostgreSQL diagnostics" + ] + }, + { + "command": "edge-regression RED: Claude and OpenClaw project identity tests", + "result": "expected failure", + "evidence": [ + "both JavaScript implementations accepted non-normalized metadata and unknown anchor-file fields", + "Claude had no explicit classifier separating transport-offline fallback from malformed reached-server responses" + ] + } + ], + "red_gate_conclusion": "The runners and baselines are healthy. The focused tests fail for the intended reason: the production Project Identity v2 API and transport fields do not exist yet. Product edits may begin." +} diff --git a/.agent/specs/security-project-identity/evidence/project-identity-v2-vectors.json b/.agent/specs/security-project-identity/evidence/project-identity-v2-vectors.json new file mode 100644 index 00000000..4693e124 --- /dev/null +++ b/.agent/specs/security-project-identity/evidence/project-identity-v2-vectors.json @@ -0,0 +1,46 @@ +{ + "schema_version": 1, + "identity_version": 2, + "vectors": [ + { + "name": "git-monorepo-core", + "selector": "784f6804", + "display_name": "core", + "legacy_project_id": "core_18f246", + "git_remote": "https://example.invalid/acme/mono.git", + "relative_path": "packages/core/", + "non_git_anchor": "", + "anchor_shared": null + }, + { + "name": "git-contradictory-remote", + "selector": "784f6804", + "display_name": "core", + "legacy_project_id": "core_18f246", + "git_remote": "https://example.invalid/acme/other.git", + "relative_path": "packages/core/", + "non_git_anchor": "", + "anchor_shared": null + }, + { + "name": "non-git-unshared", + "selector": "workspace_a1b2c3", + "display_name": "workspace", + "legacy_project_id": "workspace_a1b2c3", + "git_remote": "", + "relative_path": "", + "non_git_anchor": "00112233445566778899aabbccddeeff", + "anchor_shared": false + }, + { + "name": "non-git-explicit-shared", + "selector": "workspace_d4e5f6", + "display_name": "workspace-copy", + "legacy_project_id": "workspace_d4e5f6", + "git_remote": "", + "relative_path": "", + "non_git_anchor": "00112233445566778899aabbccddeeff", + "anchor_shared": true + } + ] +} diff --git a/docs/arch/architecture.md b/docs/arch/architecture.md index 40f6b9ff..259607db 100644 --- a/docs/arch/architecture.md +++ b/docs/arch/architecture.md @@ -74,7 +74,7 @@ graph TB end %% Hook → Server - H1 -->|GET /context/inject| HTTP + H1 -->|POST /context/inject| HTTP H2 -->|POST| HTTP H3 -->|POST| HTTP H5 -->|POST| HTTP @@ -126,8 +126,12 @@ graph TB ``` Claude Code starts session → session-start.js hook fires - → GET /api/context/inject?project=X&cwd=Y - → MemoryStore: retrieve always-inject + project-scoped memories + → resolve versioned project identity (git metadata or strict non-git anchor) + → POST /api/context/inject with identity_only=true + → transactionally RegisterAndResolve in the existing projects registry + → return canonical_project before any project-scoped data access + → POST /api/context/inject with canonical selector + → retrieve project-scoped context → Format as ... → Return to Claude Code (injected into system prompt) ``` @@ -137,7 +141,8 @@ Claude Code starts session ``` Agent calls store_memory / store MCP tool → engram daemon receives stdio JSON-RPC - → gRPC call to engram-server + → gRPC CallTool carries outer legacy selector + ProjectIdentityV2 + → server transactionally resolves canonical project before dispatch → MemoryStore.Create(memory) → PostgreSQL INSERT into memories table → FTS tsvector auto-updated @@ -148,7 +153,8 @@ Agent calls store_memory / store MCP tool ``` Agent calls recall_memory / recall MCP tool → engram daemon receives stdio JSON-RPC - → gRPC call to engram-server + → gRPC CallTool carries outer legacy selector + ProjectIdentityV2 + → server transactionally resolves canonical project before dispatch → Hybrid search: FTS (tsvector) + optional vector (pgvector) → Ranked results returned ``` @@ -162,6 +168,20 @@ Claude Code tool call / user prompt / session end → SSE event broadcast to dashboard ``` +### OpenClaw Project Access + +``` +OpenClaw hook / tool / command / file watcher resolves workspace identity + → EngramRestClient.registerAndResolveProject(identity, outer selector) + → POST /api/context/inject {project, project_identity, identity_only:true} + → await canonical_project (concurrent and late calls are deduplicated) + → only then issue the context/session/memory/issue/vault data request +``` + +Registration failure is a hard short-circuit: no downstream project request is +sent. `config.project` remains the outer compatibility selector; it is not a +credential and does not override bearer/principal authorization. + ## Authentication Flow (v6) ``` @@ -173,6 +193,18 @@ Server starts with ENGRAM_AUTH_ADMIN_TOKEN → Server validates token → resolves workstation identity ``` +Project identity is a routing and convergence contract, not authentication. +Knowing or supplying a selector, git remote/path, or non-git anchor never grants +access to private data. HTTP/gRPC bearer validation and principal visibility +rules remain independent gates and run before tenant operations. + +`ProjectIdentityV2` is additive on the protobuf wire. Old clients continue with +the outer selector only and succeed only while it resolves unambiguously; an +ambiguous legacy selector fails closed with `PROJECT_IDENTITY_AMBIGUOUS` and the +machine-readable action `send_project_identity_v2`. Non-git anchors are 16 random +bytes encoded as 32 lowercase hexadecimal characters in +`.engram-project-v2.json`; sharing is opt-in via an explicit boolean. + ## Deployment ``` diff --git a/internal/db/gorm/project_identity_v2_test.go b/internal/db/gorm/project_identity_v2_test.go new file mode 100644 index 00000000..bc6b0e79 --- /dev/null +++ b/internal/db/gorm/project_identity_v2_test.go @@ -0,0 +1,214 @@ +package gorm + +import ( + "context" + "errors" + "sync" + "testing" + "time" + + gormio "gorm.io/gorm" +) + +func gitIdentityV2(legacy, remote string) *ProjectIdentityV2 { + return &ProjectIdentityV2{ + Version: ProjectIdentityVersionV2, + LegacyProjectID: legacy, + DisplayName: "identity-v2-test", + GitRemote: remote, + RelativePath: "packages/core/", + } +} + +func TestRegisterAndResolve_RejectsInvalidBeforeDatabaseAccess(t *testing.T) { + shared := false + _, err := RegisterAndResolve(context.Background(), nil, "selector", &ProjectIdentityV2{ + Version: ProjectIdentityVersionV2, + LegacyProjectID: "selector", + NonGitAnchor: "weak", + AnchorShared: &shared, + }) + var identityErr *ProjectIdentityError + if !errors.As(err, &identityErr) || identityErr.Code != ProjectIdentityInvalid { + t.Fatalf("error=%T %v", err, err) + } +} + +func TestRegisterAndResolve_RejectsRawVsNormalizedSelectorsAndMetadata(t *testing.T) { + tests := []struct { + name string + selector string + identity *ProjectIdentityV2 + }{ + {name: "selector whitespace", selector: " selector ", identity: nil}, + {name: "selector control", selector: "selector\tother", identity: nil}, + {name: "legacy selector whitespace", selector: "selector", identity: gitIdentityV2(" legacy ", "https://example.invalid/acme/mono.git")}, + {name: "relative path control", selector: "selector", identity: &ProjectIdentityV2{Version: 2, GitRemote: "https://example.invalid/acme/mono.git", RelativePath: "packages\t/core/"}}, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + _, err := RegisterAndResolve(context.Background(), nil, tt.selector, tt.identity) + var identityErr *ProjectIdentityError + if !errors.As(err, &identityErr) || identityErr.Code != ProjectIdentityInvalid { + t.Fatalf("error=%T %v, want PROJECT_IDENTITY_INVALID before DB access", err, err) + } + }) + } +} + +func TestRegisterAndResolve_ExistingLegacyCanonicalAndContradiction(t *testing.T) { + db, cleanup := openTestDB(t) + defer cleanup() + ctx := context.Background() + selector := "prc-v2-existing-selector" + canonical := "prc-v2-existing-canonical" + defer func() { + db.Exec(`DELETE FROM projects WHERE id = ? OR COALESCE(legacy_ids, ARRAY[]::TEXT[]) @> ARRAY[?]::TEXT[]`, canonical, selector) + db.Exec(`DELETE FROM projects WHERE id LIKE 'p2_%' AND COALESCE(legacy_ids, ARRAY[]::TEXT[]) @> ARRAY[?]::TEXT[]`, selector) + }() + db.Exec(`DELETE FROM projects WHERE id = ? OR COALESCE(legacy_ids, ARRAY[]::TEXT[]) @> ARRAY[?]::TEXT[]`, canonical, selector) + if err := UpsertProject(ctx, db, canonical, selector, "", "", "existing"); err != nil { + t.Fatalf("seed existing canonical: %v", err) + } + + first, err := RegisterAndResolve(ctx, db, selector, gitIdentityV2(selector, "https://example.invalid/acme/mono.git")) + if err != nil { + t.Fatalf("register first identity: %v", err) + } + if first.CanonicalProjectID != canonical { + t.Fatalf("canonical=%q, want existing %q", first.CanonicalProjectID, canonical) + } + + conflict, err := RegisterAndResolve(ctx, db, selector, gitIdentityV2(selector, "https://example.invalid/acme/other.git")) + if err != nil { + t.Fatalf("register contradictory identity: %v", err) + } + if conflict.CanonicalProjectID == canonical { + t.Fatal("contradictory full identities merged") + } + if conflict.CanonicalProjectID == "" { + t.Fatal("conflict canonical is empty") + } + + _, err = RegisterAndResolve(ctx, db, selector, nil) + var identityErr *ProjectIdentityError + if !errors.As(err, &identityErr) || identityErr.Code != ProjectIdentityAmbiguous || identityErr.UpgradeAction != UpgradeActionSendProjectIdentityV2 { + t.Fatalf("legacy-only ambiguity error=%T %v", err, err) + } +} + +func TestRegisterAndResolve_ConcurrentCallsConvergeAndSharingIsExplicit(t *testing.T) { + db, cleanup := openTestDB(t) + defer cleanup() + ctx := context.Background() + prefix := "prc-v2-concurrent-" + defer func() { + db.Exec(`DELETE FROM projects WHERE id LIKE ? OR EXISTS (SELECT 1 FROM unnest(COALESCE(legacy_ids, ARRAY[]::TEXT[])) alias WHERE alias LIKE ?)`, prefix+"%", prefix+"%") + db.Exec(`DELETE FROM projects WHERE id LIKE 'p2_%' AND EXISTS (SELECT 1 FROM unnest(COALESCE(legacy_ids, ARRAY[]::TEXT[])) alias WHERE alias LIKE ?)`, prefix+"%") + }() + db.Exec(`DELETE FROM projects WHERE EXISTS (SELECT 1 FROM unnest(COALESCE(legacy_ids, ARRAY[]::TEXT[])) alias WHERE alias LIKE ?)`, prefix+"%") + + selector := prefix + "same" + identity := gitIdentityV2(selector, "https://example.invalid/concurrent.git") + const callers = 16 + results := make([]ProjectIdentityResolution, callers) + errs := make([]error, callers) + var wg sync.WaitGroup + for i := range callers { + wg.Add(1) + go func(i int) { + defer wg.Done() + results[i], errs[i] = RegisterAndResolve(ctx, db, selector, identity) + }(i) + } + wg.Wait() + for i := range callers { + if errs[i] != nil { + t.Fatalf("caller %d: %v", i, errs[i]) + } + if results[i].CanonicalProjectID != results[0].CanonicalProjectID { + t.Fatalf("caller %d diverged: %q != %q", i, results[i].CanonicalProjectID, results[0].CanonicalProjectID) + } + } + + anchor := "00112233445566778899aabbccddeeff" + unshared := false + shared := true + makeNonGit := func(selector string, sharing *bool) *ProjectIdentityV2 { + return &ProjectIdentityV2{Version: 2, LegacyProjectID: selector, DisplayName: selector, NonGitAnchor: anchor, AnchorShared: sharing} + } + a, err := RegisterAndResolve(ctx, db, prefix+"unshared-a", makeNonGit(prefix+"unshared-a", &unshared)) + if err != nil { + t.Fatal(err) + } + b, err := RegisterAndResolve(ctx, db, prefix+"unshared-b", makeNonGit(prefix+"unshared-b", &unshared)) + if err != nil { + t.Fatal(err) + } + if a.CanonicalProjectID == b.CanonicalProjectID { + t.Fatal("copied unshared anchors converged") + } + c, err := RegisterAndResolve(ctx, db, prefix+"shared-a", makeNonGit(prefix+"shared-a", &shared)) + if err != nil { + t.Fatal(err) + } + d, err := RegisterAndResolve(ctx, db, prefix+"shared-b", makeNonGit(prefix+"shared-b", &shared)) + if err != nil { + t.Fatal(err) + } + if c.CanonicalProjectID != d.CanonicalProjectID { + t.Fatalf("explicit shared anchors did not converge: %q != %q", c.CanonicalProjectID, d.CanonicalProjectID) + } + var persisted Project + if err := db.Where("id = ?", c.CanonicalProjectID).First(&persisted).Error; err != nil { + t.Fatalf("load shared canonical: %v", err) + } + if persisted.GitRemote.Valid || persisted.RelativePath.Valid { + t.Fatalf("non-git binding polluted git metadata: %#v", persisted) + } + for _, alias := range persisted.LegacyIDs { + if alias == anchor { + t.Fatal("raw non-git anchor was persisted") + } + } + + // Restart/rollback compatibility: a legacy-only request sees the ordinary + // projects row after the v2 registration; no v2-only table is required. + restarted, err := RegisterAndResolve(ctx, db.Session(&gormio.Session{NewDB: true}), selector, nil) + if err != nil { + t.Fatalf("legacy-only resolution after logical restart: %v", err) + } + if restarted.CanonicalProjectID != results[0].CanonicalProjectID { + t.Fatalf("restart canonical=%q, want %q", restarted.CanonicalProjectID, results[0].CanonicalProjectID) + } +} + +func TestRegisterAndResolve_FailsClosedOnSoftDeletedBindingCollision(t *testing.T) { + db, cleanup := openTestDB(t) + defer cleanup() + selector := "prc-v2-removed-binding" + identity := gitIdentityV2(selector, "https://example.invalid/removed-binding.git") + bindingKey := projectIdentityBindingKey(selector, *identity) + now := time.Now().UTC() + db.Exec(`DELETE FROM projects WHERE id = ?`, bindingKey) + defer db.Exec(`DELETE FROM projects WHERE id = ?`, bindingKey) + if err := db.Create(&Project{ID: bindingKey, RemovedAt: &now}).Error; err != nil { + t.Fatalf("seed removed binding: %v", err) + } + + _, err := RegisterAndResolve(context.Background(), db, selector, identity) + var identityErr *ProjectIdentityError + if !errors.As(err, &identityErr) || identityErr.Code != ProjectIdentityUnavailable { + t.Fatalf("error=%T %v, want fail-closed unavailable", err, err) + } + var persisted Project + if err := db.Where("id = ?", bindingKey).First(&persisted).Error; err != nil { + t.Fatal(err) + } + if persisted.RemovedAt == nil { + t.Fatal("registration silently revived a soft-deleted binding") + } + if len(persisted.LegacyIDs) != 0 { + t.Fatalf("registration mutated removed binding aliases: %#v", persisted.LegacyIDs) + } +} diff --git a/internal/db/gorm/project_store.go b/internal/db/gorm/project_store.go index 869a6019..d738430f 100644 --- a/internal/db/gorm/project_store.go +++ b/internal/db/gorm/project_store.go @@ -3,13 +3,440 @@ package gorm import ( "context" + "crypto/sha256" "database/sql" + "errors" "fmt" + "regexp" + "sort" + "strings" + "unicode" "gorm.io/gorm" "gorm.io/gorm/clause" ) +const ( + ProjectIdentityVersionV2 uint32 = 2 + + ProjectIdentityInvalid = "PROJECT_IDENTITY_INVALID" + ProjectIdentityAmbiguous = "PROJECT_IDENTITY_AMBIGUOUS" + ProjectIdentityUnavailable = "PROJECT_IDENTITY_UNAVAILABLE" + + UpgradeActionRegenerateProjectIdentityV2 = "regenerate_project_identity_v2" + UpgradeActionSendProjectIdentityV2 = "send_project_identity_v2" + UpgradeActionRetryProjectRegistration = "retry_project_identity_registration" +) + +var strictProjectAnchorV2 = regexp.MustCompile(`^[0-9a-f]{32}$`) + +// ProjectIdentityV2 mirrors the additive protobuf/HTTP contract at the store +// boundary without coupling persistence to either transport package. +type ProjectIdentityV2 struct { + Version uint32 `json:"version"` + LegacyProjectID string `json:"legacy_project_id,omitempty"` + DisplayName string `json:"display_name,omitempty"` + GitRemote string `json:"git_remote,omitempty"` + RelativePath string `json:"relative_path,omitempty"` + NonGitAnchor string `json:"non_git_anchor,omitempty"` + AnchorShared *bool `json:"anchor_shared,omitempty"` +} + +type ProjectIdentityResolution struct { + CanonicalProjectID string `json:"canonical_project"` +} + +// ProjectIdentityError is stable across HTTP and gRPC. Err is diagnostic; +// clients branch only on Code and UpgradeAction. +type ProjectIdentityError struct { + Code string + UpgradeAction string + Err error +} + +func (e *ProjectIdentityError) Error() string { + if e == nil { + return "" + } + if e.Err == nil { + return e.Code + } + return e.Code + ": " + e.Err.Error() +} + +func (e *ProjectIdentityError) Unwrap() error { return e.Err } + +func invalidProjectIdentity(reason string) error { + return &ProjectIdentityError{Code: ProjectIdentityInvalid, UpgradeAction: UpgradeActionRegenerateProjectIdentityV2, Err: fmt.Errorf("%s", reason)} +} + +func ambiguousProjectIdentity(reason string) error { + return &ProjectIdentityError{Code: ProjectIdentityAmbiguous, UpgradeAction: UpgradeActionSendProjectIdentityV2, Err: fmt.Errorf("%s", reason)} +} + +func unavailableProjectIdentity(err error) error { + return &ProjectIdentityError{Code: ProjectIdentityUnavailable, UpgradeAction: UpgradeActionRetryProjectRegistration, Err: err} +} + +// ProjectIdentityPublicMessage returns a stable transport-safe diagnostic. Raw +// database errors remain server-side and must never be serialized to clients. +func ProjectIdentityPublicMessage(err error) string { + var identityErr *ProjectIdentityError + if errors.As(err, &identityErr) { + switch identityErr.Code { + case ProjectIdentityInvalid: + return "project identity metadata is invalid" + case ProjectIdentityAmbiguous: + return "project identity selector is ambiguous" + } + } + return "project identity registration is unavailable" +} + +// RegisterAndResolve validates and transactionally resolves a selector before +// tenant data access. It deliberately uses only the existing projects table: +// schema changes remain governed by gormigrate, never request-path DDL. +func RegisterAndResolve(ctx context.Context, db *gorm.DB, selector string, identity *ProjectIdentityV2) (ProjectIdentityResolution, error) { + if selector == "" || len(selector) > 256 || strings.TrimSpace(selector) != selector || containsProjectIdentityControl(selector) { + return ProjectIdentityResolution{}, invalidProjectIdentity("project selector is empty or malformed") + } + if identity != nil { + if err := validateStoredProjectIdentityV2(*identity); err != nil { + return ProjectIdentityResolution{}, err + } + } + if db == nil { + return ProjectIdentityResolution{}, unavailableProjectIdentity(fmt.Errorf("project identity database is not ready")) + } + + var resolution ProjectIdentityResolution + err := db.WithContext(ctx).Transaction(func(tx *gorm.DB) error { + lockKeys := []string{"selector:" + selector} + bindingKey := "" + if identity != nil { + bindingKey = projectIdentityBindingKey(selector, *identity) + lockKeys = append(lockKeys, "binding:"+bindingKey) + if identity.LegacyProjectID != "" { + lockKeys = append(lockKeys, "selector:"+identity.LegacyProjectID) + } + } + sort.Strings(lockKeys) + lastKey := "" + for _, key := range lockKeys { + if key == lastKey { + continue + } + lastKey = key + if err := tx.Exec(`SELECT pg_advisory_xact_lock(hashtextextended(?, 0))`, key).Error; err != nil { + return unavailableProjectIdentity(fmt.Errorf("lock project identity: %w", err)) + } + } + + if identity == nil { + projects, err := findProjectCandidates(ctx, tx, selector) + if err != nil { + return unavailableProjectIdentity(err) + } + switch len(projects) { + case 0: + if err := createProjectIdentityRow(ctx, tx, selector, "", "", selector, nil); err != nil { + return unavailableProjectIdentity(err) + } + resolution.CanonicalProjectID = selector + return nil + case 1: + resolution.CanonicalProjectID = projects[0].ID + return nil + default: + return ambiguousProjectIdentity("legacy selector maps to multiple canonical projects") + } + } + + // A binding key is either the deterministic p2 identity or an alias on + // an older canonical row. It stores no raw non-git anchor. + bound, err := findProjectCandidates(ctx, tx, bindingKey) + if err != nil { + return unavailableProjectIdentity(err) + } + if len(bound) > 1 { + return ambiguousProjectIdentity("full identity binding is duplicated") + } + if len(bound) == 1 { + canonical := bound[0].ID + if identity.GitRemote != "" && !projectHasGitIdentity(bound[0], identity.GitRemote, identity.RelativePath) { + return ambiguousProjectIdentity("binding key conflicts with stored git identity") + } + if err := appendProjectAliases(ctx, tx, canonical, selector, identity.LegacyProjectID, bindingKey); err != nil { + return unavailableProjectIdentity(err) + } + resolution.CanonicalProjectID = canonical + return nil + } + + if identity.GitRemote != "" { + exact, err := findGitIdentity(ctx, tx, identity.GitRemote, identity.RelativePath) + if err != nil { + return unavailableProjectIdentity(err) + } + if len(exact) > 1 { + return ambiguousProjectIdentity("git identity maps to multiple canonical projects") + } + if len(exact) == 1 { + canonical := exact[0].ID + if err := appendProjectAliases(ctx, tx, canonical, selector, identity.LegacyProjectID, bindingKey); err != nil { + return unavailableProjectIdentity(err) + } + resolution.CanonicalProjectID = canonical + return nil + } + } + + legacyCandidates, err := findCombinedProjectCandidates(ctx, tx, selector, identity.LegacyProjectID) + if err != nil { + return unavailableProjectIdentity(err) + } + canonical := bindingKey + if len(legacyCandidates) == 1 && projectIsUnboundLegacy(legacyCandidates[0]) { + canonical = legacyCandidates[0].ID + if identity.GitRemote != "" { + result := tx.WithContext(ctx).Model(&Project{}). + Where("id = ? AND (git_remote IS NULL OR git_remote = '')", canonical). + Updates(map[string]any{ + "git_remote": identity.GitRemote, + "relative_path": identity.RelativePath, + "display_name": nullStringValue(identity.DisplayName), + }) + if result.Error != nil { + return unavailableProjectIdentity(fmt.Errorf("bind legacy project: %w", result.Error)) + } + if result.RowsAffected != 1 { + canonical = bindingKey + } + } + } + + if canonical == bindingKey { + if err := createProjectIdentityRow(ctx, tx, canonical, identity.GitRemote, identity.RelativePath, identity.DisplayName, []string{selector, identity.LegacyProjectID}); err != nil { + return unavailableProjectIdentity(err) + } + } + if err := appendProjectAliases(ctx, tx, canonical, selector, identity.LegacyProjectID, bindingKey); err != nil { + return unavailableProjectIdentity(err) + } + resolution.CanonicalProjectID = canonical + return nil + }) + if err != nil { + return ProjectIdentityResolution{}, err + } + return resolution, nil +} + +// AttachLegacyAlias adds an old-client selector only when it is absent or +// already points to canonical. A conflicting alias fails before mutation. +func AttachLegacyAlias(ctx context.Context, db *gorm.DB, canonical, alias string) error { + if canonical == "" || alias == "" || len(canonical) > 256 || len(alias) > 256 || + strings.TrimSpace(canonical) != canonical || strings.TrimSpace(alias) != alias || + containsProjectIdentityControl(canonical) || containsProjectIdentityControl(alias) { + return invalidProjectIdentity("canonical project or alias is malformed") + } + if db == nil { + return unavailableProjectIdentity(fmt.Errorf("project identity database is not ready")) + } + return db.WithContext(ctx).Transaction(func(tx *gorm.DB) error { + locks := []string{"selector:" + alias, "selector:" + canonical} + sort.Strings(locks) + for _, key := range locks { + if err := tx.Exec(`SELECT pg_advisory_xact_lock(hashtextextended(?, 0))`, key).Error; err != nil { + return unavailableProjectIdentity(fmt.Errorf("lock project alias: %w", err)) + } + } + var canonicalCount int64 + if err := tx.WithContext(ctx).Model(&Project{}).Where("id = ? AND removed_at IS NULL", canonical).Count(&canonicalCount).Error; err != nil { + return unavailableProjectIdentity(err) + } + if canonicalCount != 1 { + return unavailableProjectIdentity(fmt.Errorf("canonical project %s is unavailable", canonical)) + } + candidates, err := findProjectCandidates(ctx, tx, alias) + if err != nil { + return unavailableProjectIdentity(err) + } + if len(candidates) > 1 || len(candidates) == 1 && candidates[0].ID != canonical { + return ambiguousProjectIdentity("legacy alias already selects a different canonical project") + } + if err := appendProjectAliases(ctx, tx, canonical, alias); err != nil { + return unavailableProjectIdentity(err) + } + return nil + }) +} + +func validateStoredProjectIdentityV2(identity ProjectIdentityV2) error { + if identity.Version != ProjectIdentityVersionV2 { + return invalidProjectIdentity("unsupported identity version") + } + if len(identity.LegacyProjectID) > 256 || len(identity.DisplayName) > 256 || + strings.TrimSpace(identity.LegacyProjectID) != identity.LegacyProjectID || + containsProjectIdentityControl(identity.LegacyProjectID) || containsProjectIdentityControl(identity.DisplayName) { + return invalidProjectIdentity("identity metadata is too long") + } + hasGit := identity.GitRemote != "" || identity.RelativePath != "" + hasAnchor := identity.NonGitAnchor != "" || identity.AnchorShared != nil + if hasGit == hasAnchor { + return invalidProjectIdentity("exactly one identity source is required") + } + if hasGit { + if identity.GitRemote == "" || len(identity.GitRemote) > 2048 || strings.TrimSpace(identity.GitRemote) != identity.GitRemote || containsProjectIdentityControl(identity.GitRemote) { + return invalidProjectIdentity("git_remote is missing or malformed") + } + if len(identity.RelativePath) > 4096 || strings.HasPrefix(identity.RelativePath, "/") || strings.Contains(identity.RelativePath, "\\") || containsProjectIdentityControl(identity.RelativePath) { + return invalidProjectIdentity("relative_path is not normalized") + } + for _, part := range strings.Split(identity.RelativePath, "/") { + if part == "." || part == ".." { + return invalidProjectIdentity("relative_path contains traversal") + } + } + if identity.NonGitAnchor != "" || identity.AnchorShared != nil { + return invalidProjectIdentity("git identity carries non-git fields") + } + return nil + } + if !strictProjectAnchorV2.MatchString(identity.NonGitAnchor) || identity.AnchorShared == nil { + return invalidProjectIdentity("non-git anchor must be 128-bit lowercase hex with explicit sharing") + } + return nil +} + +func projectIdentityBindingKey(selector string, identity ProjectIdentityV2) string { + var source string + prefix := "p2g_" + if identity.GitRemote != "" { + source = fmt.Sprintf("v2\x00git\x00%s\x00%s", identity.GitRemote, identity.RelativePath) + } else { + prefix = "p2n_" + source = fmt.Sprintf("v2\x00non-git\x00%s\x00%t", identity.NonGitAnchor, *identity.AnchorShared) + if !*identity.AnchorShared { + source += "\x00" + selector + } + } + sum := sha256.Sum256([]byte(source)) + return fmt.Sprintf("%s%x", prefix, sum[:16]) +} + +func findProjectCandidates(ctx context.Context, tx *gorm.DB, selector string) ([]Project, error) { + if selector == "" { + return nil, nil + } + var projects []Project + err := tx.WithContext(ctx). + Where(`removed_at IS NULL AND (id = ? OR COALESCE(legacy_ids, ARRAY[]::TEXT[]) @> ARRAY[?]::TEXT[])`, selector, selector). + Order("id ASC").Find(&projects).Error + return projects, err +} + +func findCombinedProjectCandidates(ctx context.Context, tx *gorm.DB, selectors ...string) ([]Project, error) { + byID := map[string]Project{} + for _, selector := range selectors { + projects, err := findProjectCandidates(ctx, tx, selector) + if err != nil { + return nil, err + } + for _, project := range projects { + byID[project.ID] = project + } + } + ids := make([]string, 0, len(byID)) + for id := range byID { + ids = append(ids, id) + } + sort.Strings(ids) + projects := make([]Project, 0, len(ids)) + for _, id := range ids { + projects = append(projects, byID[id]) + } + return projects, nil +} + +func findGitIdentity(ctx context.Context, tx *gorm.DB, remote, relativePath string) ([]Project, error) { + var projects []Project + err := tx.WithContext(ctx). + Where(`removed_at IS NULL AND git_remote = ? AND COALESCE(relative_path, '') = ?`, remote, relativePath). + Order("id ASC").Find(&projects).Error + return projects, err +} + +func projectHasGitIdentity(project Project, remote, relativePath string) bool { + return project.GitRemote.Valid && project.GitRemote.String == remote && + (!project.RelativePath.Valid && relativePath == "" || project.RelativePath.Valid && project.RelativePath.String == relativePath) +} + +func projectIsUnboundLegacy(project Project) bool { + if project.GitRemote.Valid && project.GitRemote.String != "" { + return false + } + for _, alias := range project.LegacyIDs { + if strings.HasPrefix(alias, "p2g_") || strings.HasPrefix(alias, "p2n_") { + return false + } + } + return !strings.HasPrefix(project.ID, "p2g_") && !strings.HasPrefix(project.ID, "p2n_") +} + +func createProjectIdentityRow(ctx context.Context, tx *gorm.DB, id, remote, relativePath, displayName string, aliases []string) error { + project := Project{ + ID: id, + GitRemote: sql.NullString{String: remote, Valid: remote != ""}, + RelativePath: sql.NullString{String: relativePath, Valid: remote != ""}, + DisplayName: sql.NullString{String: displayName, Valid: displayName != ""}, + } + if err := tx.WithContext(ctx).Clauses(clause.OnConflict{DoNothing: true}).Create(&project).Error; err != nil { + return fmt.Errorf("create project identity %s: %w", id, err) + } + return appendProjectAliases(ctx, tx, id, aliases...) +} + +func appendProjectAliases(ctx context.Context, tx *gorm.DB, canonical string, aliases ...string) error { + seen := map[string]struct{}{} + for _, alias := range aliases { + if alias == "" || alias == canonical { + continue + } + if strings.TrimSpace(alias) != alias || containsProjectIdentityControl(alias) { + return invalidProjectIdentity("project alias is not normalized") + } + if _, ok := seen[alias]; ok { + continue + } + seen[alias] = struct{}{} + result := tx.WithContext(ctx).Exec(`UPDATE projects + SET legacy_ids = array_append(COALESCE(legacy_ids, ARRAY[]::TEXT[]), ?) + WHERE id = ? AND removed_at IS NULL AND NOT (COALESCE(legacy_ids, ARRAY[]::TEXT[]) @> ARRAY[?]::TEXT[])`, alias, canonical, alias) + if result.Error != nil { + return fmt.Errorf("append project alias %s to %s: %w", alias, canonical, result.Error) + } + if result.RowsAffected == 0 { + var count int64 + if err := tx.WithContext(ctx).Model(&Project{}).Where("id = ? AND removed_at IS NULL", canonical).Count(&count).Error; err != nil || count != 1 { + return fmt.Errorf("canonical project %s is unavailable", canonical) + } + } + } + return nil +} + +func containsProjectIdentityControl(value string) bool { + return strings.IndexFunc(value, unicode.IsControl) >= 0 +} + +func nullStringValue(value string) any { + if value == "" { + return nil + } + return value +} + // UpsertProject registers or updates a project identity record. // // newID is the canonical git-remote-based project ID. diff --git a/internal/grpcserver/project_identity_v2_test.go b/internal/grpcserver/project_identity_v2_test.go new file mode 100644 index 00000000..5ddea180 --- /dev/null +++ b/internal/grpcserver/project_identity_v2_test.go @@ -0,0 +1,128 @@ +package grpcserver + +import ( + "context" + "errors" + "reflect" + "strings" + "testing" + + "github.com/thebtf/engram/internal/auth" + localgorm "github.com/thebtf/engram/internal/db/gorm" + pb "github.com/thebtf/engram/proto/engram/v1" + "google.golang.org/grpc" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" + gormlib "gorm.io/gorm" +) + +type identityOrderHandler struct { + steps *[]string +} + +func (h identityOrderHandler) HandleToolCall(_ context.Context, _ string, _ []byte) ([]byte, bool, error) { + *h.steps = append(*h.steps, "handler") + return []byte(`[]`), false, nil +} +func (identityOrderHandler) ToolDefinitions() []ToolDef { return nil } +func (identityOrderHandler) ServerInfo() (string, string) { return "test", "test" } + +func TestCallTool_RegistersAndResolvesBeforeHandler(t *testing.T) { + steps := []string{} + srv := &Server{handler: identityOrderHandler{steps: &steps}} + srv.identityResolver = func(_ context.Context, _ *gormlib.DB, selector string, identity *pb.ProjectIdentityV2) (string, error) { + steps = append(steps, "resolve") + if selector != "legacy" || identity == nil || identity.Version != 2 { + t.Fatalf("resolver input selector=%q identity=%#v", selector, identity) + } + return "canonical", nil + } + + resp, err := srv.CallTool(context.Background(), &pb.CallToolRequest{ + ToolName: "recall", + Project: "legacy", + ProjectIdentity: &pb.ProjectIdentityV2{ + Version: 2, + LegacyProjectId: "legacy", + GitRemote: "https://example.invalid/acme/mono.git", + RelativePath: "packages/core/", + }, + }) + if err != nil { + t.Fatalf("CallTool: %v", err) + } + if !reflect.DeepEqual(steps, []string{"resolve", "handler"}) { + t.Fatalf("order=%v", steps) + } + if resp.CanonicalProject != "canonical" { + t.Fatalf("canonical response=%q", resp.CanonicalProject) + } +} + +func TestInitialize_ResolvesBeforeReturningTools(t *testing.T) { + srv := &Server{handler: identityOrderHandler{steps: &[]string{}}} + srv.identityResolver = func(_ context.Context, _ *gormlib.DB, _ string, _ *pb.ProjectIdentityV2) (string, error) { + return "canonical", nil + } + resp, err := srv.Initialize(context.Background(), &pb.InitializeRequest{Project: "legacy", ProjectIdentity: &pb.ProjectIdentityV2{Version: 2, GitRemote: "https://example.invalid/acme/mono.git", RelativePath: "packages/core/"}}) + if err != nil { + t.Fatal(err) + } + if resp.CanonicalProject != "canonical" { + t.Fatalf("canonical response=%q", resp.CanonicalProject) + } +} + +func TestCallTool_StableIdentityErrorsPrecedeMutation(t *testing.T) { + srv := &Server{handler: identityOrderHandler{steps: &[]string{}}} + srv.identityResolver = func(_ context.Context, _ *gormlib.DB, _ string, _ *pb.ProjectIdentityV2) (string, error) { + return "", &localgorm.ProjectIdentityError{Code: localgorm.ProjectIdentityAmbiguous, UpgradeAction: localgorm.UpgradeActionSendProjectIdentityV2, Err: errors.New("ambiguous selector")} + } + _, err := srv.CallTool(context.Background(), &pb.CallToolRequest{ToolName: "recall", Project: "legacy"}) + if status.Code(err) != codes.FailedPrecondition { + t.Fatalf("status=%v error=%v", status.Code(err), err) + } + st, _ := status.FromError(err) + if len(st.Details()) != 1 { + t.Fatalf("stable machine-readable detail missing: %#v", st.Details()) + } +} + +func TestSelectorDoesNotBypassAuthentication(t *testing.T) { + srv := &Server{validator: auth.NewValidator("master-secret", &stubReader{})} + req := &pb.CallToolRequest{ + ToolName: "recall", + Project: "known-private-selector", + ProjectIdentity: &pb.ProjectIdentityV2{ + Version: 2, + LegacyProjectId: "known-private-selector", + GitRemote: "https://example.invalid/private.git", + }, + } + handler := func(_ context.Context, _ any) (any, error) { + t.Fatal("identity metadata must not bypass the auth interceptor") + return nil, nil + } + _, err := srv.authInterceptor(context.Background(), req, &grpc.UnaryServerInfo{FullMethod: pb.EngramService_CallTool_FullMethodName}, handler) + if status.Code(err) != codes.Unauthenticated { + t.Fatalf("status=%v error=%v", status.Code(err), err) + } +} + +func TestProjectIdentityUnavailable_DoesNotExposeDatabaseDiagnostics(t *testing.T) { + srv := &Server{handler: identityOrderHandler{steps: &[]string{}}} + srv.identityResolver = func(_ context.Context, _ *gormlib.DB, _ string, _ *pb.ProjectIdentityV2) (string, error) { + return "", &localgorm.ProjectIdentityError{ + Code: localgorm.ProjectIdentityUnavailable, + UpgradeAction: localgorm.UpgradeActionRetryProjectRegistration, + Err: errors.New("postgres internal-token-do-not-leak relation projects"), + } + } + _, err := srv.CallTool(context.Background(), &pb.CallToolRequest{ToolName: "recall", Project: "legacy"}) + if status.Code(err) != codes.Unavailable { + t.Fatalf("status=%v error=%v", status.Code(err), err) + } + if strings.Contains(err.Error(), "do-not-leak") || strings.Contains(err.Error(), "relation projects") { + t.Fatalf("database diagnostics leaked: %v", err) + } +} diff --git a/internal/grpcserver/server.go b/internal/grpcserver/server.go index 4deaff05..74021c18 100644 --- a/internal/grpcserver/server.go +++ b/internal/grpcserver/server.go @@ -6,6 +6,7 @@ import ( "strings" "sync" + "google.golang.org/genproto/googleapis/rpc/errdetails" "google.golang.org/grpc" "google.golang.org/grpc/codes" "google.golang.org/grpc/metadata" @@ -13,6 +14,7 @@ import ( "gorm.io/gorm" "github.com/thebtf/engram/internal/auth" + engramgorm "github.com/thebtf/engram/internal/db/gorm" "github.com/thebtf/engram/internal/mcp" "github.com/thebtf/engram/internal/worker/projectevents" pb "github.com/thebtf/engram/proto/engram/v1" @@ -45,11 +47,12 @@ type ToolDef struct { // nil ONLY when ENGRAM_AUTH_DISABLED=true is the operator's deliberate choice. type Server struct { pb.UnimplementedEngramServiceServer - handler MCPHandler - mu sync.RWMutex // guards validator pointer swaps - validator *auth.Validator // nil = auth disabled; read under mu.RLock - db *gorm.DB // injected by worker after DB is ready - bus *projectevents.Bus // in-process project lifecycle event bus + handler MCPHandler + mu sync.RWMutex // guards validator pointer swaps + validator *auth.Validator // nil = auth disabled; read under mu.RLock + db *gorm.DB // injected by worker after DB is ready + bus *projectevents.Bus // in-process project lifecycle event bus + identityResolver func(context.Context, *gorm.DB, string, *pb.ProjectIdentityV2) (string, error) } // New creates a new gRPC server. The returned *grpc.Server has EngramService @@ -125,7 +128,11 @@ func (s *Server) Ping(_ context.Context, _ *pb.PingRequest) (*pb.PingResponse, e } // Initialize returns server info and the complete list of available tools. -func (s *Server) Initialize(_ context.Context, _ *pb.InitializeRequest) (*pb.InitializeResponse, error) { +func (s *Server) Initialize(ctx context.Context, req *pb.InitializeRequest) (*pb.InitializeResponse, error) { + canonicalProject, err := s.resolveProjectIdentity(ctx, req.GetProject(), req.GetProjectIdentity()) + if err != nil { + return nil, err + } name, version := s.handler.ServerInfo() defs := s.handler.ToolDefinitions() @@ -139,17 +146,22 @@ func (s *Server) Initialize(_ context.Context, _ *pb.InitializeRequest) (*pb.Ini } return &pb.InitializeResponse{ - ServerName: name, - ServerVersion: version, - Tools: tools, + ServerName: name, + ServerVersion: version, + Tools: tools, + CanonicalProject: canonicalProject, }, nil } // CallTool dispatches a single MCP tool call. func (s *Server) CallTool(ctx context.Context, req *pb.CallToolRequest) (*pb.CallToolResponse, error) { + canonicalProject, err := s.resolveProjectIdentity(ctx, req.GetProject(), req.GetProjectIdentity()) + if err != nil { + return nil, err + } // Inject project identity using the same context key that internal/mcp reads. - if req.Project != "" { - ctx = mcp.ContextWithProject(ctx, req.Project) + if canonicalProject != "" { + ctx = mcp.ContextWithProject(ctx, canonicalProject) } // Finding 3: inject session identity so audit helpers can record the correct // SourceSessionID. Only set when the proto field is non-empty. @@ -163,11 +175,59 @@ func (s *Server) CallTool(ctx context.Context, req *pb.CallToolRequest) (*pb.Cal } return &pb.CallToolResponse{ - IsError: isError, - ContentJson: resultJSON, + IsError: isError, + ContentJson: resultJSON, + CanonicalProject: canonicalProject, }, nil } +func (s *Server) resolveProjectIdentity(ctx context.Context, selector string, identity *pb.ProjectIdentityV2) (string, error) { + resolver := s.identityResolver + if resolver == nil { + resolver = func(ctx context.Context, db *gorm.DB, selector string, wire *pb.ProjectIdentityV2) (string, error) { + var metadata *engramgorm.ProjectIdentityV2 + if wire != nil { + metadata = &engramgorm.ProjectIdentityV2{ + Version: wire.GetVersion(), + LegacyProjectID: wire.GetLegacyProjectId(), + DisplayName: wire.GetDisplayName(), + GitRemote: wire.GetGitRemote(), + RelativePath: wire.GetRelativePath(), + NonGitAnchor: wire.GetNonGitAnchor(), + AnchorShared: wire.AnchorShared, + } + } + resolved, err := engramgorm.RegisterAndResolve(ctx, db, selector, metadata) + return resolved.CanonicalProjectID, err + } + } + canonical, err := resolver(ctx, s.db, selector, identity) + if err == nil { + return canonical, nil + } + var identityErr *engramgorm.ProjectIdentityError + if !errors.As(err, &identityErr) { + return "", status.Error(codes.Unavailable, engramgorm.ProjectIdentityPublicMessage(err)) + } + code := codes.Unavailable + switch identityErr.Code { + case engramgorm.ProjectIdentityInvalid: + code = codes.InvalidArgument + case engramgorm.ProjectIdentityAmbiguous: + code = codes.FailedPrecondition + } + st := status.New(code, engramgorm.ProjectIdentityPublicMessage(identityErr)) + withDetails, detailsErr := st.WithDetails(&errdetails.ErrorInfo{ + Reason: identityErr.Code, + Domain: "engram.project_identity", + Metadata: map[string]string{"upgrade_action": identityErr.UpgradeAction}, + }) + if detailsErr != nil { + return "", st.Err() + } + return "", withDetails.Err() +} + // extractBearer pulls the bearer token from gRPC metadata, stripping the // optional "Bearer " prefix. Returns empty string when no authorization // header is present (caller decides whether that's an error). diff --git a/internal/handlers/engramcore/contract_test.go b/internal/handlers/engramcore/contract_test.go index f401b53f..67c3c411 100644 --- a/internal/handlers/engramcore/contract_test.go +++ b/internal/handlers/engramcore/contract_test.go @@ -12,6 +12,7 @@ import ( "fmt" "log/slog" "net" + "sync" "testing" "github.com/thebtf/engram/internal/module" @@ -33,6 +34,7 @@ import ( // Each test configures its behaviour via the exported fields below. type mockEngramServer struct { pb.UnimplementedEngramServiceServer + mu sync.Mutex // initResp is the response returned by Initialize. initResp *pb.InitializeResponse @@ -40,16 +42,24 @@ type mockEngramServer struct { callResp *pb.CallToolResponse // callErr, if non-nil, is returned as an error from CallTool. callErr error + initReq *pb.InitializeRequest + callReq *pb.CallToolRequest } -func (s *mockEngramServer) Initialize(_ context.Context, _ *pb.InitializeRequest) (*pb.InitializeResponse, error) { +func (s *mockEngramServer) Initialize(_ context.Context, req *pb.InitializeRequest) (*pb.InitializeResponse, error) { + s.mu.Lock() + s.initReq = req + s.mu.Unlock() if s.initResp == nil { return &pb.InitializeResponse{}, nil } return s.initResp, nil } -func (s *mockEngramServer) CallTool(_ context.Context, _ *pb.CallToolRequest) (*pb.CallToolResponse, error) { +func (s *mockEngramServer) CallTool(_ context.Context, req *pb.CallToolRequest) (*pb.CallToolResponse, error) { + s.mu.Lock() + s.callReq = req + s.mu.Unlock() if s.callErr != nil { return nil, s.callErr } diff --git a/internal/handlers/engramcore/project_identity_v2_test.go b/internal/handlers/engramcore/project_identity_v2_test.go new file mode 100644 index 00000000..43916283 --- /dev/null +++ b/internal/handlers/engramcore/project_identity_v2_test.go @@ -0,0 +1,68 @@ +package engramcore + +import ( + "context" + "encoding/json" + "testing" + + pb "github.com/thebtf/engram/proto/engram/v1" +) + +func TestProxyHandleTool_FirstCallBeforeHookSendsProjectIdentityV2(t *testing.T) { + srv := &mockEngramServer{callResp: &pb.CallToolResponse{ContentJson: []byte(`[]`)}} + grpcAddr := startMockGRPC(t, srv) + _, mod, project := buildContractDispatcher(t, grpcAddr) + + if _, err := mod.ProxyHandleTool(context.Background(), project, "recall", json.RawMessage(`{}`)); err != nil { + t.Fatalf("first CallTool before any hook/session-connect: %v", err) + } + + srv.mu.Lock() + req := srv.callReq + srv.mu.Unlock() + if req == nil || req.ProjectIdentity == nil { + t.Fatal("first CallTool did not carry project_identity v2") + } + if req.ProjectIdentity.Version != 2 { + t.Fatalf("identity version=%d", req.ProjectIdentity.Version) + } + if req.ProjectIdentity.LegacyProjectId == "" { + t.Fatal("legacy selector is required for mixed-version convergence") + } +} + +func TestProxyTools_SendsProjectIdentityV2OnInitialize(t *testing.T) { + srv := &mockEngramServer{initResp: &pb.InitializeResponse{}} + grpcAddr := startMockGRPC(t, srv) + _, mod, project := buildContractDispatcher(t, grpcAddr) + + if _, err := mod.ProxyTools(context.Background(), project); err != nil { + t.Fatalf("Initialize: %v", err) + } + + srv.mu.Lock() + req := srv.initReq + srv.mu.Unlock() + if req == nil || req.ProjectIdentity == nil || req.ProjectIdentity.Version != 2 { + t.Fatalf("Initialize project identity=%#v", req) + } +} + +func TestProjectIdentityV2_ProtoFieldNumbersRemainAdditive(t *testing.T) { + callReq := (&pb.CallToolRequest{}).ProtoReflect().Descriptor().Fields() + if got := callReq.ByName("project_identity").Number(); got != 5 { + t.Fatalf("CallToolRequest.project_identity tag=%d, want 5", got) + } + callResp := (&pb.CallToolResponse{}).ProtoReflect().Descriptor().Fields() + if got := callResp.ByName("canonical_project").Number(); got != 3 { + t.Fatalf("CallToolResponse.canonical_project tag=%d, want 3", got) + } + initReq := (&pb.InitializeRequest{}).ProtoReflect().Descriptor().Fields() + if got := initReq.ByName("project_identity").Number(); got != 4 { + t.Fatalf("InitializeRequest.project_identity tag=%d, want 4", got) + } + initResp := (&pb.InitializeResponse{}).ProtoReflect().Descriptor().Fields() + if got := initResp.ByName("canonical_project").Number(); got != 4 { + t.Fatalf("InitializeResponse.canonical_project tag=%d, want 4", got) + } +} diff --git a/internal/handlers/engramcore/tools.go b/internal/handlers/engramcore/tools.go index b5d1cc02..36466670 100644 --- a/internal/handlers/engramcore/tools.go +++ b/internal/handlers/engramcore/tools.go @@ -7,6 +7,7 @@ import ( "github.com/thebtf/engram/internal/config" "github.com/thebtf/engram/internal/module" + "github.com/thebtf/engram/internal/proxy" "github.com/thebtf/engram/internal/version" pb "github.com/thebtf/engram/proto/engram/v1" muxcore "github.com/thebtf/mcp-mux/muxcore" @@ -29,6 +30,10 @@ func (m *Module) ProxyTools(ctx context.Context, p muxcore.ProjectContext) ([]mo } token := m.envFor(p, config.EnvWorkstationToken) project := m.cache.Resolve(p) + projectIdentity, err := resolveProjectIdentityV2(p.Cwd) + if err != nil { + return nil, fmt.Errorf("project identity v2: %w", err) + } conn, err := m.pool.getOrDialGRPC(serverURL, token) if err != nil { @@ -37,9 +42,10 @@ func (m *Module) ProxyTools(ctx context.Context, p muxcore.ProjectContext) ([]mo client := pb.NewEngramServiceClient(conn) resp, err := client.Initialize(ctx, &pb.InitializeRequest{ - ClientName: "engram-daemon", - ClientVersion: daemonClientVersion, - Project: project, + ClientName: "engram-daemon", + ClientVersion: daemonClientVersion, + Project: project, + ProjectIdentity: projectIdentity, }) if err != nil { return nil, fmt.Errorf("gRPC Initialize: %w", err) @@ -83,6 +89,10 @@ func (m *Module) ProxyHandleTool(ctx context.Context, p muxcore.ProjectContext, } token := m.envFor(p, config.EnvWorkstationToken) project := m.cache.Resolve(p) + projectIdentity, err := resolveProjectIdentityV2(p.Cwd) + if err != nil { + return nil, fmt.Errorf("project identity v2: %w", err) + } conn, err := m.pool.getOrDialGRPC(serverURL, token) if err != nil { @@ -98,10 +108,11 @@ func (m *Module) ProxyHandleTool(ctx context.Context, p muxcore.ProjectContext, // when SessionId is non-empty (grpcserver/server.go). sessionID := m.envFor(p, config.EnvClaudeSessionID) resp, err := client.CallTool(ctx, &pb.CallToolRequest{ - ToolName: name, - ArgumentsJson: args, - Project: project, - SessionId: sessionID, + ToolName: name, + ArgumentsJson: args, + Project: project, + SessionId: sessionID, + ProjectIdentity: projectIdentity, }) if err != nil { return nil, fmt.Errorf("gRPC CallTool: %w", err) @@ -140,3 +151,19 @@ func buildInnerBlock(contentJSON []byte) (json.RawMessage, error) { // daemonClientVersion is the ClientVersion string sent in gRPC // InitializeRequest. Bumped alongside Constitution §15 unified version. var daemonClientVersion = version.Daemon + +func resolveProjectIdentityV2(cwd string) (*pb.ProjectIdentityV2, error) { + identity, err := proxy.ResolveProjectIdentityV2(cwd) + if err != nil { + return nil, err + } + return &pb.ProjectIdentityV2{ + Version: identity.Version, + LegacyProjectId: identity.LegacyProjectID, + DisplayName: identity.DisplayName, + GitRemote: identity.GitRemote, + RelativePath: identity.RelativePath, + NonGitAnchor: identity.NonGitAnchor, + AnchorShared: identity.AnchorShared, + }, nil +} diff --git a/internal/proxy/identity.go b/internal/proxy/identity.go index c334159c..a9bcb82b 100644 --- a/internal/proxy/identity.go +++ b/internal/proxy/identity.go @@ -3,16 +3,202 @@ package proxy import ( "bytes" "context" + "crypto/rand" "crypto/sha256" + "encoding/hex" "encoding/json" "fmt" + "io" "os" "os/exec" "path/filepath" + "regexp" "strings" "time" + "unicode" ) +const ( + // ProjectIdentityVersionV2 is the first full, versioned identity contract. + ProjectIdentityVersionV2 uint32 = 2 + projectIdentityV2File = ".engram-project-v2.json" +) + +var strictAnchorV2 = regexp.MustCompile(`^[0-9a-f]{32}$`) + +// ProjectIdentityV2 is complete project metadata sent before the first data +// access. Exactly one source form is valid: git remote+relative path, or a +// cryptographically random non-git anchor with explicit sharing presence. +type ProjectIdentityV2 struct { + Version uint32 `json:"version"` + LegacyProjectID string `json:"legacy_project_id,omitempty"` + DisplayName string `json:"display_name,omitempty"` + GitRemote string `json:"git_remote,omitempty"` + RelativePath string `json:"relative_path,omitempty"` + NonGitAnchor string `json:"non_git_anchor,omitempty"` + AnchorShared *bool `json:"anchor_shared,omitempty"` +} + +type projectAnchorV2 struct { + Version uint32 `json:"version"` + Anchor string `json:"anchor"` + Shared bool `json:"shared"` +} + +// ValidateProjectIdentityV2 validates the wire contract without filesystem or +// database access. Errors carry a stable machine-readable prefix. +func ValidateProjectIdentityV2(identity ProjectIdentityV2) error { + invalid := func(reason string) error { + return fmt.Errorf("PROJECT_IDENTITY_INVALID: %s", reason) + } + if identity.Version != ProjectIdentityVersionV2 { + return invalid("unsupported version") + } + if len(identity.LegacyProjectID) > 256 || len(identity.DisplayName) > 256 || + strings.TrimSpace(identity.LegacyProjectID) != identity.LegacyProjectID || + containsProjectIdentityControl(identity.LegacyProjectID) || containsProjectIdentityControl(identity.DisplayName) { + return invalid("selector or display name too long") + } + hasGit := identity.GitRemote != "" || identity.RelativePath != "" + hasAnchor := identity.NonGitAnchor != "" || identity.AnchorShared != nil + if hasGit == hasAnchor { + return invalid("exactly one identity source is required") + } + if hasGit { + if identity.GitRemote == "" || len(identity.GitRemote) > 2048 { + return invalid("git_remote is required and bounded") + } + if strings.TrimSpace(identity.GitRemote) != identity.GitRemote || containsProjectIdentityControl(identity.GitRemote) { + return invalid("git_remote is not normalized") + } + if identity.NonGitAnchor != "" || identity.AnchorShared != nil { + return invalid("git identity cannot carry an anchor") + } + if len(identity.RelativePath) > 4096 || strings.Contains(identity.RelativePath, "\\") || strings.HasPrefix(identity.RelativePath, "/") || containsProjectIdentityControl(identity.RelativePath) { + return invalid("relative_path is not normalized POSIX relative form") + } + for _, part := range strings.Split(identity.RelativePath, "/") { + if part == ".." || part == "." { + return invalid("relative_path contains traversal") + } + } + return nil + } + if !strictAnchorV2.MatchString(identity.NonGitAnchor) { + return invalid("non_git_anchor must be 128-bit lowercase hex") + } + if identity.AnchorShared == nil { + return invalid("anchor_shared presence is required") + } + if identity.GitRemote != "" || identity.RelativePath != "" { + return invalid("non-git identity cannot carry git metadata") + } + return nil +} + +func containsProjectIdentityControl(value string) bool { + return strings.IndexFunc(value, unicode.IsControl) >= 0 +} + +// ResolveProjectIdentityV2 builds full metadata for cwd. Git projects are +// content-addressed by normalized remote+relative path. Non-git projects use a +// strict additive anchor file created with O_EXCL so concurrent first use +// converges without overwriting another process's identity. +func ResolveProjectIdentityV2(cwd string) (ProjectIdentityV2, error) { + resolved, err := filepath.Abs(cwd) + if err != nil { + return ProjectIdentityV2{}, fmt.Errorf("resolve cwd: %w", err) + } + selector, displayName, _, err := ResolveProjectSlug(resolved) + if err != nil { + return ProjectIdentityV2{}, err + } + legacyID := filepath.Base(resolved) + "_" + sha256Hex(resolved)[:6] + remote, relativePath, gitErr := getGitInfo(resolved) + if gitErr == nil && remote != "" { + identity := ProjectIdentityV2{ + Version: ProjectIdentityVersionV2, + LegacyProjectID: legacyID, + DisplayName: displayName, + GitRemote: strings.TrimSpace(remote), + RelativePath: strings.ReplaceAll(strings.TrimSpace(relativePath), "\\", "/"), + } + if err := ValidateProjectIdentityV2(identity); err != nil { + return ProjectIdentityV2{}, err + } + _ = selector // selector remains the outer compatibility field. + return identity, nil + } + + anchor, err := readOrCreateProjectAnchorV2(resolved) + if err != nil { + return ProjectIdentityV2{}, err + } + shared := anchor.Shared + identity := ProjectIdentityV2{ + Version: ProjectIdentityVersionV2, + LegacyProjectID: legacyID, + DisplayName: displayName, + NonGitAnchor: anchor.Anchor, + AnchorShared: &shared, + } + if err := ValidateProjectIdentityV2(identity); err != nil { + return ProjectIdentityV2{}, err + } + return identity, nil +} + +func readOrCreateProjectAnchorV2(dir string) (projectAnchorV2, error) { + anchorPath := filepath.Join(dir, projectIdentityV2File) + for { + data, err := os.ReadFile(anchorPath) + if err == nil { + var anchor projectAnchorV2 + decoder := json.NewDecoder(bytes.NewReader(data)) + decoder.DisallowUnknownFields() + if decodeErr := decoder.Decode(&anchor); decodeErr != nil { + return projectAnchorV2{}, fmt.Errorf("PROJECT_IDENTITY_INVALID: decode %s: %w", projectIdentityV2File, decodeErr) + } + if trailingErr := decoder.Decode(&struct{}{}); trailingErr != io.EOF { + return projectAnchorV2{}, fmt.Errorf("PROJECT_IDENTITY_INVALID: trailing data in %s", projectIdentityV2File) + } + if anchor.Version != ProjectIdentityVersionV2 || !strictAnchorV2.MatchString(anchor.Anchor) { + return projectAnchorV2{}, fmt.Errorf("PROJECT_IDENTITY_INVALID: malformed %s", projectIdentityV2File) + } + return anchor, nil + } + if !os.IsNotExist(err) { + return projectAnchorV2{}, fmt.Errorf("read %s: %w", projectIdentityV2File, err) + } + + random := make([]byte, 16) + if _, err := rand.Read(random); err != nil { + return projectAnchorV2{}, fmt.Errorf("generate project anchor: %w", err) + } + anchor := projectAnchorV2{Version: ProjectIdentityVersionV2, Anchor: hex.EncodeToString(random), Shared: false} + data, err = json.MarshalIndent(anchor, "", " ") + if err != nil { + return projectAnchorV2{}, fmt.Errorf("encode project anchor: %w", err) + } + file, err := os.OpenFile(anchorPath, os.O_WRONLY|os.O_CREATE|os.O_EXCL, 0600) + if os.IsExist(err) { + continue + } + if err != nil { + return projectAnchorV2{}, fmt.Errorf("create %s: %w", projectIdentityV2File, err) + } + _, writeErr := file.Write(append(data, '\n')) + closeErr := file.Close() + if writeErr != nil { + return projectAnchorV2{}, fmt.Errorf("write %s: %w", projectIdentityV2File, writeErr) + } + if closeErr != nil { + return projectAnchorV2{}, fmt.Errorf("close %s: %w", projectIdentityV2File, closeErr) + } + return anchor, nil + } +} + // ResolveProjectSlug computes a stable, cross-platform project identity for the // given working directory. The algorithm mirrors plugin/engram/hooks/lib.js:37-66 // exactly so that JS hooks and Go server agree on project identity. diff --git a/internal/proxy/identity_test.go b/internal/proxy/identity_test.go index dc53db7d..b9a92e42 100644 --- a/internal/proxy/identity_test.go +++ b/internal/proxy/identity_test.go @@ -7,11 +7,122 @@ import ( "path/filepath" "regexp" "strings" + "sync" "testing" "github.com/thebtf/engram/internal/proxy" ) +type identityVectorFile struct { + IdentityVersion uint32 `json:"identity_version"` + Vectors []identityVector `json:"vectors"` +} + +type identityVector struct { + Name string `json:"name"` + Selector string `json:"selector"` + DisplayName string `json:"display_name"` + LegacyProjectID string `json:"legacy_project_id"` + GitRemote string `json:"git_remote"` + RelativePath string `json:"relative_path"` + NonGitAnchor string `json:"non_git_anchor"` + AnchorShared *bool `json:"anchor_shared"` +} + +func loadIdentityVectors(t *testing.T) identityVectorFile { + t.Helper() + data, err := os.ReadFile(filepath.Join("..", "..", ".agent", "specs", "security-project-identity", "evidence", "project-identity-v2-vectors.json")) + if err != nil { + t.Fatalf("read shared identity vectors: %v", err) + } + var vectors identityVectorFile + if err := json.Unmarshal(data, &vectors); err != nil { + t.Fatalf("decode shared identity vectors: %v", err) + } + return vectors +} + +func TestProjectIdentityV2_SharedVectors(t *testing.T) { + vectors := loadIdentityVectors(t) + if vectors.IdentityVersion != proxy.ProjectIdentityVersionV2 { + t.Fatalf("vector identity version=%d, implementation=%d", vectors.IdentityVersion, proxy.ProjectIdentityVersionV2) + } + for _, vector := range vectors.Vectors { + vector := vector + t.Run(vector.Name, func(t *testing.T) { + identity := proxy.ProjectIdentityV2{ + Version: vectors.IdentityVersion, + LegacyProjectID: vector.LegacyProjectID, + DisplayName: vector.DisplayName, + GitRemote: vector.GitRemote, + RelativePath: vector.RelativePath, + NonGitAnchor: vector.NonGitAnchor, + AnchorShared: vector.AnchorShared, + } + if err := proxy.ValidateProjectIdentityV2(identity); err != nil { + t.Fatalf("shared vector rejected: %v", err) + } + }) + } +} + +func TestResolveProjectIdentityV2_NonGitAnchorStrictAndStable(t *testing.T) { + dir := t.TempDir() + first, err := proxy.ResolveProjectIdentityV2(dir) + if err != nil { + t.Fatalf("first resolve: %v", err) + } + second, err := proxy.ResolveProjectIdentityV2(dir) + if err != nil { + t.Fatalf("second resolve: %v", err) + } + if first.NonGitAnchor != second.NonGitAnchor { + t.Fatalf("anchor changed: %q != %q", first.NonGitAnchor, second.NonGitAnchor) + } + if matched, _ := regexp.MatchString(`^[0-9a-f]{32}$`, first.NonGitAnchor); !matched { + t.Fatalf("anchor %q is not a strict 128-bit lowercase hex value", first.NonGitAnchor) + } + if first.AnchorShared == nil || *first.AnchorShared { + t.Fatalf("new anchor must explicitly default to unshared: %#v", first.AnchorShared) + } + other, err := proxy.ResolveProjectIdentityV2(t.TempDir()) + if err != nil { + t.Fatalf("resolve independent project: %v", err) + } + if other.NonGitAnchor == first.NonGitAnchor { + t.Fatal("independent projects received the same anchor; generator is not high entropy") + } + bad := first + bad.NonGitAnchor = "path-derived" + if err := proxy.ValidateProjectIdentityV2(bad); err == nil || !strings.Contains(err.Error(), "PROJECT_IDENTITY_INVALID") { + t.Fatalf("invalid anchor error=%v", err) + } +} + +func TestResolveProjectIdentityV2_ConcurrentFirstUseConverges(t *testing.T) { + dir := t.TempDir() + const callers = 24 + identities := make([]proxy.ProjectIdentityV2, callers) + errs := make([]error, callers) + var wg sync.WaitGroup + for i := range callers { + wg.Add(1) + go func(i int) { + defer wg.Done() + identities[i], errs[i] = proxy.ResolveProjectIdentityV2(dir) + }(i) + } + wg.Wait() + for i := range callers { + if errs[i] != nil { + t.Fatalf("caller %d: %v", i, errs[i]) + } + if identities[i].NonGitAnchor != identities[0].NonGitAnchor { + t.Fatalf("caller %d got divergent anchor %q != %q", i, identities[i].NonGitAnchor, identities[0].NonGitAnchor) + } + } +} + // findRealRepoRoot returns the absolute path of the current git repository // root. It exists solely for TestResolveProjectSlug_WorktreeMatchesMain, // which MUST inspect a real engram repo because its purpose is to verify diff --git a/internal/worker/handlers_context.go b/internal/worker/handlers_context.go index 8fac282e..3520fdd5 100644 --- a/internal/worker/handlers_context.go +++ b/internal/worker/handlers_context.go @@ -5,6 +5,8 @@ import ( "context" "database/sql" "encoding/json" + "errors" + "fmt" "net/http" "os" "strconv" @@ -756,26 +758,32 @@ func grpcCodeToHTTP(code codes.Code) int { // @Param project query string false "Project name (required)" // @Param agent_id query string false "Agent ID (acts as project scope if project empty)" // @Param format query string false "Response format: 'compact' for minimal payload" -// @Param body body object false "POST body: {project, agent_id, cwd, legacy_project, git_remote, relative_path}" +// @Param body body object false "POST body: {project, agent_id, cwd, legacy_project, project_identity, identity_only}" // @Success 200 {object} map[string]interface{} // @Failure 400 {string} string "project required" +// @Failure 409 {object} map[string]interface{} "ambiguous legacy project identity" +// @Failure 503 {object} map[string]interface{} "project identity registration unavailable" // @Failure 500 {string} string "internal error" // @Router /api/context/inject [post] // @Router /api/context/inject [get] func (s *Service) handleContextInject(w http.ResponseWriter, r *http.Request) { - var project, agentID, cwd, legacyProject, gitRemote, relativePath, sessionID string + var project, agentID, cwd, legacyProject, sessionID string var filesBeingEdited []string + var projectIdentity *gorm.ProjectIdentityV2 + var identityOnly bool if r.Method == http.MethodPost { var req struct { - Project string `json:"project"` - AgentID string `json:"agent_id"` - Cwd string `json:"cwd"` - LegacyProject string `json:"legacy_project"` - GitRemote string `json:"git_remote"` - RelativePath string `json:"relative_path"` - SessionID string `json:"session_id"` - FilesBeingEdited []string `json:"files_being_edited"` + Project string `json:"project"` + AgentID string `json:"agent_id"` + Cwd string `json:"cwd"` + LegacyProject string `json:"legacy_project"` + GitRemote string `json:"git_remote"` + RelativePath string `json:"relative_path"` + SessionID string `json:"session_id"` + FilesBeingEdited []string `json:"files_being_edited"` + ProjectIdentity *gorm.ProjectIdentityV2 `json:"project_identity"` + IdentityOnly bool `json:"identity_only"` } if err := json.NewDecoder(r.Body).Decode(&req); err != nil { http.Error(w, "Invalid JSON: "+err.Error(), http.StatusBadRequest) @@ -785,18 +793,16 @@ func (s *Service) handleContextInject(w http.ResponseWriter, r *http.Request) { agentID = req.AgentID cwd = req.Cwd legacyProject = req.LegacyProject - gitRemote = req.GitRemote - relativePath = req.RelativePath sessionID = req.SessionID filesBeingEdited = req.FilesBeingEdited + projectIdentity = req.ProjectIdentity + identityOnly = req.IdentityOnly } else { // GET (deprecated — use POST) project = r.URL.Query().Get("project") agentID = r.URL.Query().Get("agent_id") cwd = r.URL.Query().Get("cwd") legacyProject = r.URL.Query().Get("legacy_project") - gitRemote = r.URL.Query().Get("git_remote") - relativePath = r.URL.Query().Get("relative_path") sessionID = r.URL.Query().Get("session_id") filesBeingEdited = r.URL.Query()["files_being_edited"] } @@ -815,35 +821,44 @@ func (s *Service) handleContextInject(w http.ResponseWriter, r *http.Request) { return } - // Resolve project aliases: if the slug is a legacy ID, map it to the canonical one. + // Resolve/register synchronously before any retrieval or tenant mutation. + // Identity metadata selects a namespace; bearer/principal authorization is + // still enforced independently by the HTTP middleware. if s.store != nil { - project = gorm.ResolveProjectID(r.Context(), s.store.DB, project) + resolution, resolveErr := gorm.RegisterAndResolve(r.Context(), s.store.DB, project, projectIdentity) + if resolveErr != nil { + writeProjectIdentityHTTPError(w, resolveErr) + return + } + project = resolution.CanonicalProjectID + // Preserve the old HTTP contract: project is the canonical outer selector + // and legacy_project is only an alias. Never reverse them on a fresh DB. + if projectIdentity == nil && legacyProject != "" && legacyProject != project { + if err := gorm.AttachLegacyAlias(r.Context(), s.store.DB, project, legacyProject); err != nil { + writeProjectIdentityHTTPError(w, err) + return + } + } + } else if identityOnly || projectIdentity != nil { + writeProjectIdentityHTTPError(w, &gorm.ProjectIdentityError{Code: gorm.ProjectIdentityUnavailable, UpgradeAction: gorm.UpgradeActionRetryProjectRegistration, Err: fmt.Errorf("project identity database is not ready")}) + return } if err := ValidateProjectName(project); err != nil { http.Error(w, err.Error(), http.StatusBadRequest) return } + if identityOnly { + w.Header().Set("Content-Type", "application/json") + _ = json.NewEncoder(w).Encode(map[string]string{"canonical_project": project}) + return + } // Server-side: ignore client-provided cwd to prevent filesystem probing (S9-003). // File mtime staleness checks are only meaningful on the client; the server has no // access to client filesystems. cwd = "" - // When a legacy project ID is provided alongside a canonical one, upsert the - // mapping so future requests using the legacy ID resolve correctly. - if legacyProject != "" && legacyProject != project { - displayName := project - if idx := strings.Index(project, "_"); idx > 0 { - displayName = project[:idx] - } - go func() { - if err := gorm.UpsertProject(context.Background(), s.store.DB, project, legacyProject, gitRemote, relativePath, displayName); err != nil { - log.Warn().Err(err).Str("project", project).Str("legacy", legacyProject).Msg("project upsert failed") - } - }() - } - // Observation limits come from config; fall back to constants when config is absent. limit := s.config.ContextObservations if limit <= 0 { @@ -1292,6 +1307,33 @@ func (s *Service) handleContextInject(w http.ResponseWriter, r *http.Request) { } } +func writeProjectIdentityHTTPError(w http.ResponseWriter, err error) { + statusCode := http.StatusServiceUnavailable + code := gorm.ProjectIdentityUnavailable + action := gorm.UpgradeActionRetryProjectRegistration + message := gorm.ProjectIdentityPublicMessage(err) + var identityErr *gorm.ProjectIdentityError + if errors.As(err, &identityErr) { + code = identityErr.Code + action = identityErr.UpgradeAction + switch identityErr.Code { + case gorm.ProjectIdentityInvalid: + statusCode = http.StatusBadRequest + case gorm.ProjectIdentityAmbiguous: + statusCode = http.StatusConflict + } + } + w.Header().Set("Content-Type", "application/json") + w.WriteHeader(statusCode) + _ = json.NewEncoder(w).Encode(map[string]any{ + "error": map[string]string{ + "code": code, + "message": message, + "upgrade_action": action, + }, + }) +} + // handleSearchDecisions godoc // @Summary Search decisions // @Description Searches observations using decision-optimized semantic search. Thin REST wrapper over the search manager's Decisions method. diff --git a/internal/worker/handlers_context_project_identity_v2_test.go b/internal/worker/handlers_context_project_identity_v2_test.go new file mode 100644 index 00000000..72b5ba3e --- /dev/null +++ b/internal/worker/handlers_context_project_identity_v2_test.go @@ -0,0 +1,144 @@ +package worker + +import ( + "bytes" + "encoding/json" + "errors" + "net/http" + "net/http/httptest" + "testing" + + gormdb "github.com/thebtf/engram/internal/db/gorm" +) + +func TestContextInject_IdentityOnlyRegistersSynchronouslyAndIdempotently(t *testing.T) { + db, cleanup := setupProjectTestDB(t) + defer cleanup() + selector := "prc-http-identity-v2" + db.Exec(`DELETE FROM projects WHERE id = ? OR COALESCE(legacy_ids, ARRAY[]::TEXT[]) @> ARRAY[?]::TEXT[]`, selector, selector) + defer func() { + db.Exec(`DELETE FROM projects WHERE id = ? OR COALESCE(legacy_ids, ARRAY[]::TEXT[]) @> ARRAY[?]::TEXT[]`, selector, selector) + }() + + svc := &Service{store: &gormdb.Store{DB: db}} + body := map[string]any{ + "project": selector, + "identity_only": true, + "project_identity": map[string]any{ + "version": 2, + "legacy_project_id": selector, + "display_name": "http-v2", + "git_remote": "https://example.invalid/acme/http-v2.git", + "relative_path": "packages/core/", + }, + } + + var canonical string + for i := 0; i < 2; i++ { + payload, _ := json.Marshal(body) + req := httptest.NewRequest(http.MethodPost, "/api/context/inject", bytes.NewReader(payload)) + rec := httptest.NewRecorder() + svc.handleContextInject(rec, req) + if rec.Code != http.StatusOK { + t.Fatalf("attempt %d status=%d body=%s", i, rec.Code, rec.Body.String()) + } + var response struct { + CanonicalProject string `json:"canonical_project"` + } + if err := json.Unmarshal(rec.Body.Bytes(), &response); err != nil { + t.Fatal(err) + } + if response.CanonicalProject == "" { + t.Fatal("empty canonical project") + } + if i == 0 { + canonical = response.CanonicalProject + } + if response.CanonicalProject != canonical { + t.Fatalf("attempt %d diverged: %q != %q", i, response.CanonicalProject, canonical) + } + } +} + +func TestContextInject_LegacyMetadataPreservesOuterCanonical(t *testing.T) { + db, cleanup := setupProjectTestDB(t) + defer cleanup() + canonical := "prc-http-legacy-outer" + legacy := "prc-http-legacy-path" + db.Exec(`DELETE FROM projects WHERE id IN (?, ?) OR COALESCE(legacy_ids, ARRAY[]::TEXT[]) @> ARRAY[?]::TEXT[]`, canonical, legacy, legacy) + defer db.Exec(`DELETE FROM projects WHERE id IN (?, ?) OR COALESCE(legacy_ids, ARRAY[]::TEXT[]) @> ARRAY[?]::TEXT[]`, canonical, legacy, legacy) + + svc := &Service{store: &gormdb.Store{DB: db}} + payload, _ := json.Marshal(map[string]any{ + "project": canonical, + "legacy_project": legacy, + "identity_only": true, + }) + rec := httptest.NewRecorder() + svc.handleContextInject(rec, httptest.NewRequest(http.MethodPost, "/api/context/inject", bytes.NewReader(payload))) + if rec.Code != http.StatusOK { + t.Fatalf("status=%d body=%s", rec.Code, rec.Body.String()) + } + var response struct { + CanonicalProject string `json:"canonical_project"` + } + if err := json.Unmarshal(rec.Body.Bytes(), &response); err != nil { + t.Fatal(err) + } + if response.CanonicalProject != canonical { + t.Fatalf("canonical=%q, want outer selector %q", response.CanonicalProject, canonical) + } + if resolved := gormdb.ResolveProjectID(t.Context(), db, legacy); resolved != canonical { + t.Fatalf("legacy alias resolves to %q, want %q", resolved, canonical) + } +} + +func TestProjectIdentityHTTPError_DoesNotExposeDatabaseDiagnostics(t *testing.T) { + rec := httptest.NewRecorder() + writeProjectIdentityHTTPError(rec, &gormdb.ProjectIdentityError{ + Code: gormdb.ProjectIdentityUnavailable, + UpgradeAction: gormdb.UpgradeActionRetryProjectRegistration, + Err: errors.New("postgres internal-token-do-not-leak relation projects"), + }) + if rec.Code != http.StatusServiceUnavailable { + t.Fatalf("status=%d", rec.Code) + } + if bytes.Contains(rec.Body.Bytes(), []byte("do-not-leak")) || bytes.Contains(rec.Body.Bytes(), []byte("relation projects")) { + t.Fatalf("database diagnostics leaked: %s", rec.Body.String()) + } +} + +func TestContextInject_AmbiguousLegacyFailsWithUpgradeActionBeforeAccess(t *testing.T) { + db, cleanup := setupProjectTestDB(t) + defer cleanup() + selector := "prc-http-ambiguous-v2" + db.Exec(`DELETE FROM projects WHERE id IN (?, ?)`, selector+"-a", selector+"-b") + defer func() { db.Exec(`DELETE FROM projects WHERE id IN (?, ?)`, selector+"-a", selector+"-b") }() + if err := gormdb.UpsertProject(t.Context(), db, selector+"-a", selector, "", "", "a"); err != nil { + t.Fatal(err) + } + if err := gormdb.UpsertProject(t.Context(), db, selector+"-b", selector, "", "", "b"); err != nil { + t.Fatal(err) + } + + svc := &Service{store: &gormdb.Store{DB: db}} + payload, _ := json.Marshal(map[string]any{"project": selector, "identity_only": true}) + req := httptest.NewRequest(http.MethodPost, "/api/context/inject", bytes.NewReader(payload)) + rec := httptest.NewRecorder() + svc.handleContextInject(rec, req) + if rec.Code != http.StatusConflict { + t.Fatalf("status=%d body=%s", rec.Code, rec.Body.String()) + } + var response struct { + Error struct { + Code string `json:"code"` + UpgradeAction string `json:"upgrade_action"` + } `json:"error"` + } + if err := json.Unmarshal(rec.Body.Bytes(), &response); err != nil { + t.Fatal(err) + } + if response.Error.Code != gormdb.ProjectIdentityAmbiguous || response.Error.UpgradeAction != gormdb.UpgradeActionSendProjectIdentityV2 { + t.Fatalf("error response=%+v", response.Error) + } +} diff --git a/plugin/engram/hooks/lib.js b/plugin/engram/hooks/lib.js index a71f58cd..b756a227 100644 --- a/plugin/engram/hooks/lib.js +++ b/plugin/engram/hooks/lib.js @@ -352,6 +352,140 @@ function ProjectIDWithName(cwd) { return hash.slice(0, 6); } +const PROJECT_IDENTITY_VERSION_V2 = 2; +const PROJECT_IDENTITY_V2_FILE = '.engram-project-v2.json'; +const STRICT_ANCHOR_V2 = /^[0-9a-f]{32}$/; +const PROJECT_IDENTITY_CONTROL = /[\u0000-\u001f\u007f]/; +const PROJECT_ANCHOR_V2_KEYS = ['anchor', 'shared', 'version']; + +function buildProjectIdentityV2(value) { + return { + version: PROJECT_IDENTITY_VERSION_V2, + legacy_project_id: String(value.legacy_project_id || ''), + display_name: String(value.display_name || ''), + git_remote: String(value.git_remote || ''), + relative_path: String(value.relative_path || ''), + non_git_anchor: String(value.non_git_anchor || ''), + anchor_shared: value.anchor_shared == null ? null : Boolean(value.anchor_shared), + }; +} + +function validateProjectIdentityV2(identity) { + const invalid = (reason) => { + throw new Error(`PROJECT_IDENTITY_INVALID: ${reason}`); + }; + if (!identity || identity.version !== PROJECT_IDENTITY_VERSION_V2) { + invalid('unsupported version'); + } + if (identity.legacy_project_id.length > 256 || identity.display_name.length > 256 || + identity.legacy_project_id.trim() !== identity.legacy_project_id || + PROJECT_IDENTITY_CONTROL.test(identity.legacy_project_id) || PROJECT_IDENTITY_CONTROL.test(identity.display_name)) { + invalid('selector or display name too long'); + } + const hasGit = identity.git_remote !== '' || identity.relative_path !== ''; + const hasAnchor = identity.non_git_anchor !== '' || identity.anchor_shared !== null; + if (hasGit === hasAnchor) invalid('exactly one identity source is required'); + if (hasGit) { + if (!identity.git_remote || identity.git_remote.length > 2048 || identity.git_remote.trim() !== identity.git_remote || PROJECT_IDENTITY_CONTROL.test(identity.git_remote)) { + invalid('git_remote is missing or malformed'); + } + if (identity.relative_path.length > 4096 || identity.relative_path.startsWith('/') || identity.relative_path.includes('\\') || PROJECT_IDENTITY_CONTROL.test(identity.relative_path)) { + invalid('relative_path is not normalized'); + } + if (identity.relative_path.split('/').some((part) => part === '.' || part === '..')) { + invalid('relative_path contains traversal'); + } + } else { + if (!STRICT_ANCHOR_V2.test(identity.non_git_anchor) || typeof identity.anchor_shared !== 'boolean') { + invalid('non-git anchor must be 128-bit lowercase hex with explicit sharing'); + } + } + return identity; +} + +function readOrCreateProjectAnchorV2(cwd) { + const anchorPath = path.join(path.resolve(cwd || ''), PROJECT_IDENTITY_V2_FILE); + for (;;) { + try { + const parsed = JSON.parse(fs.readFileSync(anchorPath, 'utf8')); + const keys = parsed && typeof parsed === 'object' && !Array.isArray(parsed) ? Object.keys(parsed).sort() : []; + if (keys.length !== PROJECT_ANCHOR_V2_KEYS.length || keys.some((key, index) => key !== PROJECT_ANCHOR_V2_KEYS[index]) || + parsed.version !== PROJECT_IDENTITY_VERSION_V2 || !STRICT_ANCHOR_V2.test(parsed.anchor) || typeof parsed.shared !== 'boolean') { + throw new Error(`PROJECT_IDENTITY_INVALID: malformed ${PROJECT_IDENTITY_V2_FILE}`); + } + return parsed; + } catch (error) { + if (error && error.code !== 'ENOENT') throw error; + } + + const anchor = { + version: PROJECT_IDENTITY_VERSION_V2, + anchor: crypto.randomBytes(16).toString('hex'), + shared: false, + }; + let fd; + try { + fd = fs.openSync(anchorPath, 'wx', 0o600); + fs.writeFileSync(fd, `${JSON.stringify(anchor, null, 2)}\n`, 'utf8'); + fs.closeSync(fd); + return anchor; + } catch (error) { + if (fd !== undefined) { + try { fs.closeSync(fd); } catch (_) {} + } + if (error && error.code === 'EEXIST') continue; + throw error; + } + } +} + +function resolveProjectIdentityV2(cwd) { + const resolved = path.resolve(cwd || ''); + const git = getGitRemoteID(resolved); + const base = { + legacy_project_id: LegacyProjectID(resolved), + display_name: path.basename(resolved), + git_remote: git ? git.gitRemote : '', + relative_path: git ? git.relativePath.replace(/\\/g, '/') : '', + non_git_anchor: '', + anchor_shared: null, + }; + if (!git) { + const anchor = readOrCreateProjectAnchorV2(resolved); + base.non_git_anchor = anchor.anchor; + base.anchor_shared = anchor.shared; + } + return validateProjectIdentityV2(buildProjectIdentityV2(base)); +} + +async function registerProjectIdentityV2(context, requestFn = request) { + if (!context || !context.ProjectIdentityV2) { + throw new Error('PROJECT_IDENTITY_INVALID: hook context has no v2 identity'); + } + const response = await requestFn('POST', '/api/context/inject', { + project: context.Project, + legacy_project: context.LegacyProject, + git_remote: context.GitRemote, + relative_path: context.RelativePath, + project_identity: context.ProjectIdentityV2, + identity_only: true, + }); + if (response && typeof response.canonical_project === 'string' && response.canonical_project !== '') { + context.Project = response.canonical_project; + } + return context.Project; +} + +function isProjectIdentityTransportOffline(error) { + if (!error || typeof error !== 'object') return false; + if (error.name === 'AbortError') return true; + const code = error.code || (error.cause && error.cause.code); + if (['ECONNREFUSED', 'ECONNRESET', 'ETIMEDOUT', 'ENOTFOUND', 'EAI_AGAIN', 'EHOSTUNREACH', 'ENETUNREACH'].includes(code)) { + return true; + } + return error instanceof TypeError && /fetch failed|network/i.test(String(error.message || '')); +} + function buildRequestHeaders(includeJsonBody = false) { const headers = {}; const token = configuredPluginEnv( @@ -613,10 +747,22 @@ async function RunHook(hookName, handler) { LegacyProject: LegacyProjectID(cwd), GitRemote: gitResult ? gitResult.gitRemote : '', RelativePath: gitResult ? gitResult.relativePath : '', + ProjectIdentityV2: resolveProjectIdentityV2(cwd), RawInput: rawInput, }; try { + try { + await registerProjectIdentityV2(context); + } catch (registrationError) { + // A reached server that rejects registration (4xx/5xx) is a hard barrier: + // do not let the handler issue project-scoped requests. A transport-level + // offline failure cannot have performed data access, so preserve the + // hook's established local/offline fallback behavior. + const message = registrationError instanceof Error ? registrationError.message : String(registrationError); + if (!isProjectIdentityTransportOffline(registrationError)) throw registrationError; + console.error(`[engram] ${hookName} identity registration offline: ${message}`); + } const additionalContext = typeof handler === 'function' ? await handler(context, input) : ''; writeResponse(hookName, additionalContext); @@ -890,6 +1036,12 @@ module.exports = { writeJSONFile, ProjectIDWithName, LegacyProjectID, + PROJECT_IDENTITY_VERSION_V2, + buildProjectIdentityV2, + validateProjectIdentityV2, + resolveProjectIdentityV2, + registerProjectIdentityV2, + isProjectIdentityTransportOffline, requestGet, requestPost, RunHook, diff --git a/plugin/engram/hooks/project-identity-v2.test.js b/plugin/engram/hooks/project-identity-v2.test.js new file mode 100644 index 00000000..1ff91e22 --- /dev/null +++ b/plugin/engram/hooks/project-identity-v2.test.js @@ -0,0 +1,99 @@ +const assert = require('node:assert/strict'); +const fs = require('node:fs'); +const os = require('node:os'); +const path = require('node:path'); +const test = require('node:test'); + +const lib = require('./lib'); + +const vectorsPath = path.resolve(__dirname, '../../../.agent/specs/security-project-identity/evidence/project-identity-v2-vectors.json'); +const vectors = JSON.parse(fs.readFileSync(vectorsPath, 'utf8')); + +test('project identity v2 consumes the repository-wide vectors', () => { + assert.equal(vectors.identity_version, lib.PROJECT_IDENTITY_VERSION_V2); + for (const vector of vectors.vectors) { + const identity = lib.buildProjectIdentityV2(vector); + assert.equal(identity.version, 2, vector.name); + assert.equal(identity.legacy_project_id, vector.legacy_project_id, vector.name); + assert.equal(identity.git_remote, vector.git_remote, vector.name); + assert.equal(identity.relative_path, vector.relative_path, vector.name); + assert.equal(identity.non_git_anchor, vector.non_git_anchor, vector.name); + assert.equal(identity.anchor_shared, vector.anchor_shared, vector.name); + assert.doesNotThrow(() => lib.validateProjectIdentityV2(identity), vector.name); + } +}); + +test('non-git v2 anchor is strict, high-entropy, stable, and concurrent-safe', async (t) => { + const dir = fs.mkdtempSync(path.join(os.tmpdir(), 'engram-identity-v2-')); + t.after(() => fs.rmSync(dir, { recursive: true, force: true })); + + const identities = await Promise.all(Array.from({ length: 16 }, () => + lib.resolveProjectIdentityV2(dir))); + const anchors = new Set(identities.map((identity) => identity.non_git_anchor)); + assert.equal(anchors.size, 1); + assert.match(identities[0].non_git_anchor, /^[0-9a-f]{32}$/); + assert.equal(identities[0].anchor_shared, false); + + const otherDir = fs.mkdtempSync(path.join(os.tmpdir(), 'engram-identity-v2-other-')); + t.after(() => fs.rmSync(otherDir, { recursive: true, force: true })); + const other = lib.resolveProjectIdentityV2(otherDir); + assert.notEqual(other.non_git_anchor, identities[0].non_git_anchor, + 'independent projects must not receive the same anchor'); + + const bad = { ...identities[0], non_git_anchor: 'path-derived' }; + assert.throws(() => lib.validateProjectIdentityV2(bad), /PROJECT_IDENTITY_INVALID/); +}); + +test('v2 metadata and anchor files reject non-normalized or unknown input', (t) => { + const malformed = lib.buildProjectIdentityV2({ + legacy_project_id: ' selector ', + display_name: 'fixture', + git_remote: 'https://example.invalid/acme/mono.git', + relative_path: 'packages/core/', + }); + assert.throws(() => lib.validateProjectIdentityV2(malformed), /PROJECT_IDENTITY_INVALID/); + + const dir = fs.mkdtempSync(path.join(os.tmpdir(), 'engram-identity-v2-extra-')); + t.after(() => fs.rmSync(dir, { recursive: true, force: true })); + fs.writeFileSync(path.join(dir, '.engram-project-v2.json'), JSON.stringify({ + version: 2, + anchor: '00112233445566778899aabbccddeeff', + shared: false, + unexpected: true, + })); + assert.throws(() => lib.resolveProjectIdentityV2(dir), /PROJECT_IDENTITY_INVALID/); +}); + +test('registration offline fallback distinguishes transport failure from malformed reached-server response', () => { + const offline = new TypeError('fetch failed', { cause: Object.assign(new Error('connect'), { code: 'ECONNREFUSED' }) }); + assert.equal(lib.isProjectIdentityTransportOffline(offline), true); + assert.equal(lib.isProjectIdentityTransportOffline(new SyntaxError('Unexpected token')), false); +}); + +test('registration is synchronous, idempotent, and updates the hook canonical selector', async () => { + const calls = []; + const context = { + Project: 'legacy-selector', + ProjectIdentityV2: { + version: 2, + legacy_project_id: 'legacy-selector', + display_name: 'fixture', + git_remote: '', + relative_path: '', + non_git_anchor: '00112233445566778899aabbccddeeff', + anchor_shared: false, + }, + }; + const requestFn = async (_method, endpoint, body) => { + calls.push({ endpoint, body }); + return { canonical_project: 'canonical-v2' }; + }; + + await lib.registerProjectIdentityV2(context, requestFn); + await lib.registerProjectIdentityV2(context, requestFn); + + assert.equal(context.Project, 'canonical-v2'); + assert.equal(calls.length, 2); + assert.equal(calls[0].endpoint, '/api/context/inject'); + assert.equal(calls[0].body.identity_only, true); +}); diff --git a/plugin/openclaw-engram/src/client.ts b/plugin/openclaw-engram/src/client.ts index 8a056783..c0d5dbeb 100644 --- a/plugin/openclaw-engram/src/client.ts +++ b/plugin/openclaw-engram/src/client.ts @@ -7,6 +7,7 @@ import { AvailabilityTracker } from './availability.js'; import type { PluginConfig } from './config.js'; +import type { ProjectIdentity } from './identity.js'; // --------------------------------------------------------------------------- // Response types @@ -106,6 +107,18 @@ export interface BulkDeleteResponse { deleted: number; } +export type ProjectRegistrationResult = + | { ok: true; canonicalProject: string } + | { + ok: false; + error: { + code: string; + message: string; + upgradeAction: string; + httpStatus: number; + }; + }; + /** A single observation returned by the decisions search endpoint. */ export interface DecisionSearchObservation { title?: string; @@ -189,6 +202,8 @@ export class EngramRestClient { private readonly baseUrl: string; private readonly token: string; private readonly defaultTimeoutMs: number; + private readonly completedProjectRegistrations = new Map(); + private readonly inFlightProjectRegistrations = new Map>(); readonly availability: AvailabilityTracker; constructor(config: PluginConfig) { @@ -203,6 +218,112 @@ export class EngramRestClient { // Endpoints // --------------------------------------------------------------------------- + /** + * Registration barrier for every project-scoped OpenClaw access. + * + * The full identity and outer compatibility selector are resolved before a + * caller sends its first data request. Concurrent and late calls reuse the + * same result. Project metadata routes a namespace; the bearer header remains + * the independent authorization gate. + */ + async registerAndResolveProject( + identity: ProjectIdentity, + selector: string, + ): Promise { + const normalizedSelector = selector.trim(); + if (!normalizedSelector) { + return { + ok: false, + error: { + code: 'PROJECT_IDENTITY_INVALID', + message: 'project selector is empty', + upgradeAction: 'regenerate_project_identity_v2', + httpStatus: 400, + }, + }; + } + + const key = JSON.stringify([normalizedSelector, identity.projectIdentityV2 ?? null]); + const completed = this.completedProjectRegistrations.get(key); + if (completed) return completed; + const inFlight = this.inFlightProjectRegistrations.get(key); + if (inFlight) return inFlight; + + const registration = this.performProjectRegistration(identity, normalizedSelector); + this.inFlightProjectRegistrations.set(key, registration); + try { + const result = await registration; + if (result.ok) this.completedProjectRegistrations.set(key, result); + return result; + } finally { + this.inFlightProjectRegistrations.delete(key); + } + } + + private async performProjectRegistration( + identity: ProjectIdentity, + selector: string, + ): Promise { + if (!this.availability.isAvailable()) { + return projectRegistrationFailure( + 'PROJECT_IDENTITY_UNAVAILABLE', + 'engram is temporarily unavailable', + 'retry_project_identity_registration', + 503, + ); + } + + const path = '/api/context/inject'; + const url = this.baseUrl + path; + const controller = new AbortController(); + const timer = setTimeout(() => controller.abort(), this.defaultTimeoutMs); + const body = { + project: selector, + ...(identity.projectIdentityV2 ? { project_identity: identity.projectIdentityV2 } : {}), + identity_only: true, + }; + + try { + const response = await fetch(url, { + method: 'POST', + headers: { + 'Authorization': `Bearer ${this.token}`, + 'Content-Type': 'application/json', + }, + body: JSON.stringify(body), + signal: controller.signal, + }); + const text = await response.text(); + let payload: unknown = {}; + if (text) { + try { payload = JSON.parse(text); } catch { payload = {}; } + } + + if (!response.ok) { + if (response.status >= 500 || response.status === 401 || response.status === 403) { + this.availability.recordFailure(); + } + const parsed = parseProjectRegistrationError(payload, response.status); + return projectRegistrationFailure(parsed.code, parsed.message, parsed.upgradeAction, response.status); + } + + this.availability.recordSuccess(); + const canonical = readCanonicalProject(payload) || selector; + return { ok: true, canonicalProject: canonical }; + } catch (err: unknown) { + this.availability.recordFailure(); + const message = err instanceof Error ? err.message : String(err); + return projectRegistrationFailure( + 'PROJECT_IDENTITY_UNAVAILABLE', + message, + 'retry_project_identity_registration', + 503, + ); + } finally { + clearTimeout(timer); + } + } + /** * Fetch session context for injection (static session-level context). * POST /api/context/inject @@ -210,12 +331,14 @@ export class EngramRestClient { async getContextInject( agentId: string, cwd?: string, + project?: string, ): Promise { // Inject returns large payloads (80KB+) with vector search — needs more than default 5s. // Timeout failures here trigger availability cooldown, blocking ALL engram tools for 60s. return this.post('/api/context/inject', { agent_id: agentId, ...(cwd ? { cwd } : {}), + ...(project ? { project } : {}), }, 15_000); } @@ -648,3 +771,42 @@ function extractOrigin(rawUrl: string): string { return trimmed.replace(/\/$/, ''); } } + +function projectRegistrationFailure( + code: string, + message: string, + upgradeAction: string, + httpStatus: number, +): ProjectRegistrationResult { + return { ok: false, error: { code, message, upgradeAction, httpStatus } }; +} + +function readCanonicalProject(payload: unknown): string { + if (!payload || typeof payload !== 'object') return ''; + const value = (payload as { canonical_project?: unknown }).canonical_project; + return typeof value === 'string' ? value : ''; +} + +function parseProjectRegistrationError( + payload: unknown, + status: number, +): { code: string; message: string; upgradeAction: string } { + const fallback = status === 400 + ? { code: 'PROJECT_IDENTITY_INVALID', upgradeAction: 'regenerate_project_identity_v2' } + : status === 409 + ? { code: 'PROJECT_IDENTITY_AMBIGUOUS', upgradeAction: 'send_project_identity_v2' } + : { code: 'PROJECT_IDENTITY_UNAVAILABLE', upgradeAction: 'retry_project_identity_registration' }; + if (!payload || typeof payload !== 'object') { + return { ...fallback, message: `HTTP ${status} project identity registration failed` }; + } + const error = (payload as { error?: unknown }).error; + if (!error || typeof error !== 'object') { + return { ...fallback, message: `HTTP ${status} project identity registration failed` }; + } + const typed = error as { code?: unknown; message?: unknown; upgrade_action?: unknown }; + return { + code: typeof typed.code === 'string' ? typed.code : fallback.code, + message: typeof typed.message === 'string' ? typed.message : `HTTP ${status} project identity registration failed`, + upgradeAction: typeof typed.upgrade_action === 'string' ? typed.upgrade_action : fallback.upgradeAction, + }; +} diff --git a/plugin/openclaw-engram/src/commands/remember.ts b/plugin/openclaw-engram/src/commands/remember.ts index c726c5bf..86306207 100644 --- a/plugin/openclaw-engram/src/commands/remember.ts +++ b/plugin/openclaw-engram/src/commands/remember.ts @@ -36,7 +36,12 @@ export function buildRememberCommand( } const identity = resolveIdentity('', config.workspaceDir ?? process.cwd()); - const project = config.project ?? identity.projectId; + const selectedProject = config.project ?? identity.projectId; + const registration = await client.registerAndResolveProject(identity, selectedProject); + if (!registration.ok) { + return { text: `Project identity unavailable: ${registration.error.code} (${registration.error.upgradeAction})` }; + } + const project = registration.canonicalProject; // Use the first sentence (up to 80 chars) as the title const firstSentence = text.split(/[.!?]/)[0]?.trim() ?? text; diff --git a/plugin/openclaw-engram/src/hooks/after-tool-call.ts b/plugin/openclaw-engram/src/hooks/after-tool-call.ts index b902185a..146381f1 100644 --- a/plugin/openclaw-engram/src/hooks/after-tool-call.ts +++ b/plugin/openclaw-engram/src/hooks/after-tool-call.ts @@ -40,13 +40,13 @@ const HEARTBEAT_TOOL_NAMES = new Set([ * @param client - Shared engram REST client. * @param config - Resolved plugin config. */ -export function handleAfterToolCall( +export async function handleAfterToolCall( event: AfterToolCallEvent, ctx: PluginHookContext, client: EngramRestClient, config: PluginConfig, logger?: PluginLogger, -): void { +): Promise { if (!client.isAvailable()) return; if (!config.autoExtract) return; @@ -72,7 +72,13 @@ export function handleAfterToolCall( const sessionId = ctx.sessionId ?? ctx.sessionKey ?? agentId; if (!sessionId?.trim()) return; // no session identity available — skip const identity = resolveIdentity(agentId, ctx.workspaceDir); - const project = config.project ?? identity.projectId; + const selectedProject = config.project ?? identity.projectId; + const registration = await client.registerAndResolveProject(identity, selectedProject); + if (!registration.ok) { + (logger ?? console).warn(`[engram] after-tool-call: project registration failed: ${registration.error.code}`); + return; + } + const project = registration.canonicalProject; let toolInput: string; let toolResult: string; @@ -84,7 +90,7 @@ export function handleAfterToolCall( toolResult = '[unserializable]'; } - // Fire-and-forget — do not await + // Registration is awaited above; the data write may now be fire-and-forget. void client.ingestEvent({ session_id: sessionId, project, diff --git a/plugin/openclaw-engram/src/hooks/before-agent-start.ts b/plugin/openclaw-engram/src/hooks/before-agent-start.ts index 4634bd6d..cb887fcb 100644 --- a/plugin/openclaw-engram/src/hooks/before-agent-start.ts +++ b/plugin/openclaw-engram/src/hooks/before-agent-start.ts @@ -45,11 +45,18 @@ export async function handleBeforeAgentStart( const agentId = ctx.agentId ?? ''; const identity = resolveIdentity(agentId, ctx.workspaceDir); - const project = config.project ?? identity.projectId; + const selectedProject = config.project ?? identity.projectId; + const registration = await client.registerAndResolveProject(identity, selectedProject); + if (!registration.ok) { + (logger ?? console).warn(`[engram] before-agent-start: project registration failed: ${registration.error.code}`); + return; + } + const project = registration.canonicalProject; const response = await client.getContextInject( agentId, ctx.workspaceDir, + project, ); if (!response) return; diff --git a/plugin/openclaw-engram/src/hooks/before-compaction.ts b/plugin/openclaw-engram/src/hooks/before-compaction.ts index 921e25d7..5417fb5f 100644 --- a/plugin/openclaw-engram/src/hooks/before-compaction.ts +++ b/plugin/openclaw-engram/src/hooks/before-compaction.ts @@ -23,13 +23,13 @@ const MAX_MESSAGES = 20; * @param client - Shared engram REST client. * @param config - Resolved plugin config. */ -export function handleBeforeCompaction( +export async function handleBeforeCompaction( event: BeforeCompactionEvent, ctx: PluginHookContext, client: EngramRestClient, config: PluginConfig, logger?: PluginLogger, -): void { +): Promise { try { if (!client.isAvailable()) return; if (!config.autoExtract) return; @@ -38,7 +38,13 @@ export function handleBeforeCompaction( const sessionId = ctx.sessionId ?? ctx.sessionKey ?? agentId; if (!sessionId?.trim()) return; // no session identity available — skip const identity = resolveIdentity(agentId, ctx.workspaceDir); - const project = config.project ?? identity.projectId; + const selectedProject = config.project ?? identity.projectId; + const registration = await client.registerAndResolveProject(identity, selectedProject); + if (!registration.ok) { + (logger ?? console).warn(`[engram] before-compaction: project registration failed: ${registration.error.code}`); + return; + } + const project = registration.canonicalProject; const messages = Array.isArray(event.messages) ? event.messages : []; const recent = messages.slice(-MAX_MESSAGES); @@ -47,7 +53,7 @@ export function handleBeforeCompaction( const truncated = normalizeEngramContent(content); - // Fire-and-forget — do not await + // Registration is awaited above; the data write may now be fire-and-forget. void client.backfillSession({ session_id: sessionId, project, diff --git a/plugin/openclaw-engram/src/hooks/before-prompt-build.ts b/plugin/openclaw-engram/src/hooks/before-prompt-build.ts index 0efbea19..1040d4ac 100644 --- a/plugin/openclaw-engram/src/hooks/before-prompt-build.ts +++ b/plugin/openclaw-engram/src/hooks/before-prompt-build.ts @@ -58,7 +58,13 @@ export async function handleBeforePromptBuild( const agentId = ctx.agentId ?? ''; const identity = resolveIdentity(agentId, ctx.workspaceDir); - const project = config.project ?? identity.projectId; + const selectedProject = config.project ?? identity.projectId; + const registration = await client.registerAndResolveProject(identity, selectedProject); + if (!registration.ok) { + (logger ?? console).warn(`[engram] before-prompt-build: project registration failed: ${registration.error.code}`); + return; + } + const project = registration.canonicalProject; let response; try { diff --git a/plugin/openclaw-engram/src/hooks/before-tool-call.ts b/plugin/openclaw-engram/src/hooks/before-tool-call.ts index 2e2912c8..fb8a2b4f 100644 --- a/plugin/openclaw-engram/src/hooks/before-tool-call.ts +++ b/plugin/openclaw-engram/src/hooks/before-tool-call.ts @@ -75,7 +75,10 @@ export async function handleBeforeToolCall( if (!filePath) return; const identity = resolveIdentity(ctx.agentId ?? '', ctx.workspaceDir); - const project = config.project ?? identity.projectId; + const selectedProject = config.project ?? identity.projectId; + const registration = await client.registerAndResolveProject(identity, selectedProject); + if (!registration.ok) return; + const project = registration.canonicalProject; // 500ms timeout — must not noticeably delay Write/Edit tools const observations = await client.getFileContext(filePath, project, 5, 500); diff --git a/plugin/openclaw-engram/src/hooks/session-end.ts b/plugin/openclaw-engram/src/hooks/session-end.ts index 7208bbdf..b98ba556 100644 --- a/plugin/openclaw-engram/src/hooks/session-end.ts +++ b/plugin/openclaw-engram/src/hooks/session-end.ts @@ -60,19 +60,25 @@ function detectOutcome(messages: ConversationMessage[]): { outcome: string; reas * @param client - Shared engram REST client. * @param config - Resolved plugin config. */ -export function handleSessionEnd( +export async function handleSessionEnd( event: SessionEndEvent, ctx: PluginHookContext, client: EngramRestClient, config: PluginConfig, logger?: PluginLogger, -): void { +): Promise { try { if (!client.isAvailable()) return; const agentId = ctx.agentId ?? ''; const identity = resolveIdentity(agentId, ctx.workspaceDir); - const project = config.project ?? identity.projectId; + const selectedProject = config.project ?? identity.projectId; + const registration = await client.registerAndResolveProject(identity, selectedProject); + if (!registration.ok) { + (logger ?? console).warn(`[engram] session-end: project registration failed: ${registration.error.code}`); + return; + } + const project = registration.canonicalProject; const messages: ConversationMessage[] = Array.isArray(event.messages) ? event.messages : []; const sessionId = ctx.sessionId ?? ctx.sessionKey ?? agentId; diff --git a/plugin/openclaw-engram/src/hooks/session-start.ts b/plugin/openclaw-engram/src/hooks/session-start.ts index 377f9ec7..56bd4e9d 100644 --- a/plugin/openclaw-engram/src/hooks/session-start.ts +++ b/plugin/openclaw-engram/src/hooks/session-start.ts @@ -36,7 +36,13 @@ export async function handleSessionStart( const agentId = ctx.agentId ?? ''; const identity = resolveIdentity(agentId, ctx.workspaceDir); - const project = config.project ?? identity.projectId; + const selectedProject = config.project ?? identity.projectId; + const registration = await client.registerAndResolveProject(identity, selectedProject); + if (!registration.ok) { + (logger ?? console).warn(`[engram] session-start: project registration failed: ${registration.error.code}`); + return; + } + const project = registration.canonicalProject; const claudeSessionId = ctx.sessionId ?? agentId; if (!claudeSessionId) { @@ -46,7 +52,7 @@ export async function handleSessionStart( return; } - // Initialize session tracking (fire-and-forget) + // Registration is awaited above; the data write may now be fire-and-forget. void client.initSession({ claudeSessionId, project, diff --git a/plugin/openclaw-engram/src/identity.ts b/plugin/openclaw-engram/src/identity.ts index 55ce070f..cd4903e6 100644 --- a/plugin/openclaw-engram/src/identity.ts +++ b/plugin/openclaw-engram/src/identity.ts @@ -11,8 +11,9 @@ * observations can be shared across agents working in the same repository. */ -import { createHash } from 'node:crypto'; +import { createHash, randomBytes } from 'node:crypto'; import { execSync } from 'node:child_process'; +import { closeSync, openSync, readFileSync, writeFileSync } from 'node:fs'; import { resolve, basename } from 'node:path'; // Module-level memoization cache — keyed by resolved cwd path @@ -27,6 +28,110 @@ export interface ProjectIdentity { gitRemote?: string; /** Relative path within the git repo, if applicable. */ relativePath?: string; + /** Full metadata for v2-aware transports. Never derived from agentId. */ + projectIdentityV2?: ProjectIdentityV2; +} + +export const PROJECT_IDENTITY_VERSION_V2 = 2 as const; + +export interface ProjectIdentityV2 { + version: 2; + legacy_project_id: string; + display_name: string; + git_remote: string; + relative_path: string; + non_git_anchor: string; + anchor_shared: boolean | null; +} + +interface ProjectIdentityV2Input { + legacy_project_id?: string; + display_name?: string; + git_remote?: string; + relative_path?: string; + non_git_anchor?: string; + anchor_shared?: boolean | null; +} + +const projectIdentityV2File = '.engram-project-v2.json'; +const strictAnchorV2 = /^[0-9a-f]{32}$/; +const projectIdentityControl = /[\u0000-\u001f\u007f]/; +const projectAnchorV2Keys = ['anchor', 'shared', 'version']; + +export function buildProjectIdentityV2(input: ProjectIdentityV2Input): ProjectIdentityV2 { + return { + version: PROJECT_IDENTITY_VERSION_V2, + legacy_project_id: input.legacy_project_id ?? '', + display_name: input.display_name ?? '', + git_remote: input.git_remote ?? '', + relative_path: input.relative_path ?? '', + non_git_anchor: input.non_git_anchor ?? '', + anchor_shared: input.anchor_shared ?? null, + }; +} + +export function validateProjectIdentityV2(identity: ProjectIdentityV2): ProjectIdentityV2 { + const invalid = (reason: string): never => { + throw new Error(`PROJECT_IDENTITY_INVALID: ${reason}`); + }; + if (identity.version !== PROJECT_IDENTITY_VERSION_V2) invalid('unsupported version'); + if (identity.legacy_project_id.length > 256 || identity.display_name.length > 256 || + identity.legacy_project_id.trim() !== identity.legacy_project_id || + projectIdentityControl.test(identity.legacy_project_id) || projectIdentityControl.test(identity.display_name)) { + invalid('selector or display name too long'); + } + const hasGit = identity.git_remote !== '' || identity.relative_path !== ''; + const hasAnchor = identity.non_git_anchor !== '' || identity.anchor_shared !== null; + if (hasGit === hasAnchor) invalid('exactly one identity source is required'); + if (hasGit) { + if (!identity.git_remote || identity.git_remote.length > 2048 || identity.git_remote.trim() !== identity.git_remote || projectIdentityControl.test(identity.git_remote)) { + invalid('git_remote is missing or malformed'); + } + if (identity.relative_path.length > 4096 || identity.relative_path.startsWith('/') || identity.relative_path.includes('\\') || projectIdentityControl.test(identity.relative_path)) { + invalid('relative_path is not normalized'); + } + if (identity.relative_path.split('/').some((part) => part === '.' || part === '..')) invalid('relative_path contains traversal'); + } else if (!strictAnchorV2.test(identity.non_git_anchor) || typeof identity.anchor_shared !== 'boolean') { + invalid('non-git anchor must be 128-bit lowercase hex with explicit sharing'); + } + return identity; +} + +function readOrCreateProjectAnchorV2(workspaceDir: string): { version: 2; anchor: string; shared: boolean } { + const anchorPath = resolve(workspaceDir, projectIdentityV2File); + for (;;) { + try { + const parsed = JSON.parse(readFileSync(anchorPath, 'utf8')) as unknown; + const keys = parsed && typeof parsed === 'object' && !Array.isArray(parsed) ? Object.keys(parsed).sort() : []; + const anchor = parsed as { version?: number; anchor?: string; shared?: boolean }; + if (keys.length !== projectAnchorV2Keys.length || keys.some((key, index) => key !== projectAnchorV2Keys[index]) || + anchor.version !== PROJECT_IDENTITY_VERSION_V2 || typeof anchor.anchor !== 'string' || !strictAnchorV2.test(anchor.anchor) || typeof anchor.shared !== 'boolean') { + invalidAnchorFile(); + } + return { version: 2, anchor: anchor.anchor, shared: anchor.shared }; + } catch (error) { + if ((error as NodeJS.ErrnoException).code !== 'ENOENT') throw error; + } + + const anchor = { version: PROJECT_IDENTITY_VERSION_V2, anchor: randomBytes(16).toString('hex'), shared: false }; + let descriptor: number | undefined; + try { + descriptor = openSync(anchorPath, 'wx', 0o600); + writeFileSync(descriptor, `${JSON.stringify(anchor, null, 2)}\n`, 'utf8'); + closeSync(descriptor); + return anchor; + } catch (error) { + if (descriptor !== undefined) { + try { closeSync(descriptor); } catch { /* best effort */ } + } + if ((error as NodeJS.ErrnoException).code === 'EEXIST') continue; + throw error; + } + } +} + +function invalidAnchorFile(): never { + throw new Error(`PROJECT_IDENTITY_INVALID: malformed ${projectIdentityV2File}`); } // --------------------------------------------------------------------------- @@ -119,16 +224,30 @@ export function resolveIdentity( const gitResult = getGitRemoteID(workspaceDir); if (gitResult) { + const projectIdentityV2 = validateProjectIdentityV2(buildProjectIdentityV2({ + legacy_project_id: legacyProjectID(workspaceDir), + display_name: basename(resolve(workspaceDir)), + git_remote: gitResult.gitRemote, + relative_path: gitResult.relativePath.replace(/\\/g, '/'), + })); return { projectId: gitResult.projectId, agentId, gitRemote: gitResult.gitRemote, relativePath: gitResult.relativePath, + projectIdentityV2, }; } + const anchor = readOrCreateProjectAnchorV2(workspaceDir); return { projectId: legacyProjectID(workspaceDir), agentId, + projectIdentityV2: validateProjectIdentityV2(buildProjectIdentityV2({ + legacy_project_id: legacyProjectID(workspaceDir), + display_name: basename(resolve(workspaceDir)), + non_git_anchor: anchor.anchor, + anchor_shared: anchor.shared, + })), }; } diff --git a/plugin/openclaw-engram/src/index.ts b/plugin/openclaw-engram/src/index.ts index fd0b44ef..1f1f686f 100644 --- a/plugin/openclaw-engram/src/index.ts +++ b/plugin/openclaw-engram/src/index.ts @@ -193,8 +193,14 @@ const plugin: OpenClawPluginDefinition = { .argument('', 'Search query') .action(async (query: unknown) => { const identity = resolveIdentity('', process.cwd()); + const selectedProject = config.project ?? identity.projectId; + const registration = await client.registerAndResolveProject(identity, selectedProject); + if (!registration.ok) { + console.error(`Project identity unavailable: ${registration.error.code} (${registration.error.upgradeAction})`); + return; + } const response = await client.searchContext({ - project: config.project ?? identity.projectId, + project: registration.canonicalProject, query: String(query), }); const obs = response?.observations ?? []; @@ -216,11 +222,17 @@ const plugin: OpenClawPluginDefinition = { const textStr = String(text); const title = textStr.length > 80 ? textStr.slice(0, 77) + '...' : textStr; const storeIdentity = resolveIdentity('', process.cwd()); + const selectedProject = config.project ?? storeIdentity.projectId; + const registration = await client.registerAndResolveProject(storeIdentity, selectedProject); + if (!registration.ok) { + console.error(`Project identity unavailable: ${registration.error.code} (${registration.error.upgradeAction})`); + return; + } const response = await client.bulkImport([{ title, content: textStr.slice(0, 900), type: 'change', - project: config.project ?? storeIdentity.projectId, + project: registration.canonicalProject, scope: 'project', }]); if (response && response.imported > 0) { diff --git a/plugin/openclaw-engram/src/services/file-watcher.ts b/plugin/openclaw-engram/src/services/file-watcher.ts index 8fcac19e..5a666984 100644 --- a/plugin/openclaw-engram/src/services/file-watcher.ts +++ b/plugin/openclaw-engram/src/services/file-watcher.ts @@ -29,7 +29,8 @@ class FileWatcherService implements OpenClawPluginService { private readonly debounceTimers: Map> = new Map(); private readonly inFlight: Set = new Set(); private stopped = false; - private readonly projectId: string; + private projectId: string; + private readonly identity: ReturnType; constructor( private readonly workspaceDir: string, @@ -37,11 +38,17 @@ class FileWatcherService implements OpenClawPluginService { private readonly config: PluginConfig, private readonly logger: PluginLogger, ) { - const identity = resolveIdentity('file-watcher', workspaceDir); - this.projectId = config.project ?? identity.projectId; + this.identity = resolveIdentity('file-watcher', workspaceDir); + this.projectId = config.project ?? this.identity.projectId; } async start(_ctx: OpenClawPluginServiceContext): Promise { + const registration = await this.client.registerAndResolveProject(this.identity, this.projectId); + if (!registration.ok) { + this.logger.warn(`[file-watcher] project registration failed: ${registration.error.code}`); + return; + } + this.projectId = registration.canonicalProject; // Lazy-load chokidar to avoid blocking plugin discovery with native module init const chokidar = await import('chokidar'); const watchPaths = [ diff --git a/plugin/openclaw-engram/src/tools/engram-decisions.ts b/plugin/openclaw-engram/src/tools/engram-decisions.ts index e7599586..c4a8cd56 100644 --- a/plugin/openclaw-engram/src/tools/engram-decisions.ts +++ b/plugin/openclaw-engram/src/tools/engram-decisions.ts @@ -41,7 +41,12 @@ export function createEngramDecisionsTool( } const identity = resolveIdentity(ctx.agentId ?? '', ctx.workspaceDir); - const project = config.project ?? identity.projectId; + const selectedProject = config.project ?? identity.projectId; + const registration = await client.registerAndResolveProject(identity, selectedProject); + if (!registration.ok) { + return `Project identity unavailable: ${registration.error.code} (${registration.error.upgradeAction})`; + } + const project = registration.canonicalProject; const response = await client.searchDecisions({ project, diff --git a/plugin/openclaw-engram/src/tools/engram-find-by-file.ts b/plugin/openclaw-engram/src/tools/engram-find-by-file.ts index 3bc2da1c..9c086494 100644 --- a/plugin/openclaw-engram/src/tools/engram-find-by-file.ts +++ b/plugin/openclaw-engram/src/tools/engram-find-by-file.ts @@ -47,7 +47,12 @@ export function createEngramFindByFileTool( } const identity = resolveIdentity(ctx.agentId ?? '', ctx.workspaceDir); - const project = config.project ?? identity.projectId; + const selectedProject = config.project ?? identity.projectId; + const registration = await client.registerAndResolveProject(identity, selectedProject); + if (!registration.ok) { + return `Project identity unavailable: ${registration.error.code} (${registration.error.upgradeAction})`; + } + const project = registration.canonicalProject; const observations = await client.getFileContext( parsed.data.file, diff --git a/plugin/openclaw-engram/src/tools/engram-issues.ts b/plugin/openclaw-engram/src/tools/engram-issues.ts index 712d54b1..f506729b 100644 --- a/plugin/openclaw-engram/src/tools/engram-issues.ts +++ b/plugin/openclaw-engram/src/tools/engram-issues.ts @@ -188,7 +188,12 @@ export function createEngramIssuesTool( } const identity = resolveIdentity(ctx.agentId ?? '', ctx.workspaceDir); - const project = config.project ?? identity.projectId; + const selectedProject = config.project ?? identity.projectId; + const registration = await client.registerAndResolveProject(identity, selectedProject); + if (!registration.ok) { + return `Project identity unavailable: ${registration.error.code} (${registration.error.upgradeAction})`; + } + const project = registration.canonicalProject; switch (parsed.data.action) { case 'create': { diff --git a/plugin/openclaw-engram/src/tools/engram-presets.ts b/plugin/openclaw-engram/src/tools/engram-presets.ts index a6288f1b..83bae6e0 100644 --- a/plugin/openclaw-engram/src/tools/engram-presets.ts +++ b/plugin/openclaw-engram/src/tools/engram-presets.ts @@ -45,7 +45,12 @@ function createPresetTool( } const identity = resolveIdentity(ctx.agentId ?? '', ctx.workspaceDir); - const project = config.project ?? identity.projectId; + const selectedProject = config.project ?? identity.projectId; + const registration = await client.registerAndResolveProject(identity, selectedProject); + if (!registration.ok) { + return `Project identity unavailable: ${registration.error.code} (${registration.error.upgradeAction})`; + } + const project = registration.canonicalProject; const response = await client.searchContext({ project, diff --git a/plugin/openclaw-engram/src/tools/engram-remember.ts b/plugin/openclaw-engram/src/tools/engram-remember.ts index b5e1f4a5..3d6eafda 100644 --- a/plugin/openclaw-engram/src/tools/engram-remember.ts +++ b/plugin/openclaw-engram/src/tools/engram-remember.ts @@ -75,7 +75,12 @@ async function storeObservation( } const identity = resolveIdentity(ctx.agentId ?? '', ctx.workspaceDir); - const project = config.project ?? identity.projectId; + const selectedProject = config.project ?? identity.projectId; + const registration = await client.registerAndResolveProject(identity, selectedProject); + if (!registration.ok) { + return `Project identity unavailable: ${registration.error.code} (${registration.error.upgradeAction})`; + } + const project = registration.canonicalProject; const trimmedContent = content.length > CONTENT_MAX_CHARS ? content.slice(0, CONTENT_MAX_CHARS) : content; diff --git a/plugin/openclaw-engram/src/tools/engram-search.ts b/plugin/openclaw-engram/src/tools/engram-search.ts index 5b8b21b1..2d0ac7e6 100644 --- a/plugin/openclaw-engram/src/tools/engram-search.ts +++ b/plugin/openclaw-engram/src/tools/engram-search.ts @@ -45,7 +45,12 @@ function createSearchTool( } const identity = resolveIdentity(ctx.agentId ?? '', ctx.workspaceDir); - const project = config.project ?? identity.projectId; + const selectedProject = config.project ?? identity.projectId; + const registration = await client.registerAndResolveProject(identity, selectedProject); + if (!registration.ok) { + return `Project identity unavailable: ${registration.error.code} (${registration.error.upgradeAction})`; + } + const project = registration.canonicalProject; const response = await client.searchContext({ project, diff --git a/plugin/openclaw-engram/src/tools/engram-timeline.ts b/plugin/openclaw-engram/src/tools/engram-timeline.ts index bc2f4f0b..a8366dc9 100644 --- a/plugin/openclaw-engram/src/tools/engram-timeline.ts +++ b/plugin/openclaw-engram/src/tools/engram-timeline.ts @@ -53,7 +53,12 @@ export function createEngramTimelineTool( } const identity = resolveIdentity(ctx.agentId ?? '', ctx.workspaceDir); - const project = config.project ?? identity.projectId; + const selectedProject = config.project ?? identity.projectId; + const registration = await client.registerAndResolveProject(identity, selectedProject); + if (!registration.ok) { + return `Project identity unavailable: ${registration.error.code} (${registration.error.upgradeAction})`; + } + const project = registration.canonicalProject; const observations = await client.getTimeline(project, parsed.data.mode, { query: parsed.data.query, diff --git a/plugin/openclaw-engram/src/tools/engram-vault.ts b/plugin/openclaw-engram/src/tools/engram-vault.ts index 7861b62c..c8a11875 100644 --- a/plugin/openclaw-engram/src/tools/engram-vault.ts +++ b/plugin/openclaw-engram/src/tools/engram-vault.ts @@ -59,7 +59,12 @@ export function createEngramVaultStoreTool( } const identity = resolveIdentity(ctx.agentId ?? '', ctx.workspaceDir); - const project = config.project ?? identity.projectId; + const selectedProject = config.project ?? identity.projectId; + const registration = await client.registerAndResolveProject(identity, selectedProject); + if (!registration.ok) { + return `Project identity unavailable: ${registration.error.code} (${registration.error.upgradeAction})`; + } + const project = registration.canonicalProject; const success = await client.storeCredential( parsed.data.name, diff --git a/plugin/openclaw-engram/src/tools/memory-get.ts b/plugin/openclaw-engram/src/tools/memory-get.ts index fa5885e9..9c34044a 100644 --- a/plugin/openclaw-engram/src/tools/memory-get.ts +++ b/plugin/openclaw-engram/src/tools/memory-get.ts @@ -56,7 +56,12 @@ export function createMemoryGetTool( const content = localFile.content; if (parsed.data.store && client.isAvailable()) { const identity = resolveIdentity(ctx.agentId ?? '', ctx.workspaceDir); - const project = config.project ?? identity.projectId; + const selectedProject = config.project ?? identity.projectId; + const registration = await client.registerAndResolveProject(identity, selectedProject); + if (!registration.ok) { + return `Project identity unavailable: ${registration.error.code} (${registration.error.upgradeAction})`; + } + const project = registration.canonicalProject; const title = parsed.data.path.replace(/.*[/\\]/, '').replace(/\.(md|markdown)$/i, ''); await client.bulkImport([{ title, @@ -132,7 +137,12 @@ async function searchEngram( } const identity = resolveIdentity(ctx.agentId ?? '', ctx.workspaceDir); - const project = config.project ?? identity.projectId; + const selectedProject = config.project ?? identity.projectId; + const registration = await client.registerAndResolveProject(identity, selectedProject); + if (!registration.ok) { + return `Project identity unavailable: ${registration.error.code} (${registration.error.upgradeAction})`; + } + const project = registration.canonicalProject; const response = await client.searchContext({ project, diff --git a/plugin/openclaw-engram/src/tools/memory-migrate.ts b/plugin/openclaw-engram/src/tools/memory-migrate.ts index 9b1573f4..fb724fb2 100644 --- a/plugin/openclaw-engram/src/tools/memory-migrate.ts +++ b/plugin/openclaw-engram/src/tools/memory-migrate.ts @@ -167,7 +167,12 @@ async function runMigration( // Import const identity = resolveIdentity(ctx.agentId ?? '', workspaceDir); - const project = config.project ?? identity.projectId; + const selectedProject = config.project ?? identity.projectId; + const registration = await client.registerAndResolveProject(identity, selectedProject); + if (!registration.ok) { + return `Project identity unavailable: ${registration.error.code} (${registration.error.upgradeAction})`; + } + const project = registration.canonicalProject; const observations: BulkImportRequest[] = allChunks.map((chunk) => ({ title: chunk.title, diff --git a/plugin/openclaw-engram/test/project-identity-transport.test.mjs b/plugin/openclaw-engram/test/project-identity-transport.test.mjs new file mode 100644 index 00000000..e3ce4fc9 --- /dev/null +++ b/plugin/openclaw-engram/test/project-identity-transport.test.mjs @@ -0,0 +1,160 @@ +import assert from 'node:assert/strict'; +import test from 'node:test'; + +import { EngramRestClient } from '../dist/client.js'; +import { handleSessionStart } from '../dist/hooks/session-start.js'; + +function gitIdentity() { + return { + projectId: 'legacy-selector', + agentId: 'agent-a', + gitRemote: 'https://example.invalid/acme/mono.git', + relativePath: 'packages/core/', + projectIdentityV2: { + version: 2, + legacy_project_id: 'workspace_a1b2c3', + display_name: 'core', + git_remote: 'https://example.invalid/acme/mono.git', + relative_path: 'packages/core/', + non_git_anchor: '', + anchor_shared: null, + }, + }; +} + +function clientConfig(token = 'test-token') { + return { url: 'http://engram.test:37777', token, timeoutMs: 1000 }; +} + +test('registration sends full v2 metadata first, substitutes canonical, and deduplicates concurrent and late calls', async (t) => { + const originalFetch = globalThis.fetch; + t.after(() => { globalThis.fetch = originalFetch; }); + const requests = []; + globalThis.fetch = async (url, init) => { + requests.push({ url: String(url), init, body: JSON.parse(String(init.body)) }); + await new Promise((resolve) => setTimeout(resolve, 5)); + return new Response(JSON.stringify({ canonical_project: 'canonical-project' }), { + status: 200, + headers: { 'Content-Type': 'application/json' }, + }); + }; + + const client = new EngramRestClient(clientConfig()); + const identity = gitIdentity(); + const results = await Promise.all(Array.from({ length: 12 }, () => + client.registerAndResolveProject(identity, 'configured-selector'))); + const late = await client.registerAndResolveProject(identity, 'configured-selector'); + + assert.equal(requests.length, 1, 'one in-flight and one completed registration must be reused'); + assert.equal(requests[0].url, 'http://engram.test:37777/api/context/inject'); + assert.equal(requests[0].body.project, 'configured-selector'); + assert.equal(requests[0].body.identity_only, true); + assert.deepEqual(requests[0].body.project_identity, identity.projectIdentityV2); + for (const result of [...results, late]) { + assert.deepEqual(result, { ok: true, canonicalProject: 'canonical-project' }); + } +}); + +test('stable registration error preserves code/action and permits zero downstream requests', async (t) => { + const originalFetch = globalThis.fetch; + t.after(() => { globalThis.fetch = originalFetch; }); + const requests = []; + globalThis.fetch = async (url, init) => { + requests.push({ url: String(url), init }); + return new Response(JSON.stringify({ + error: { + code: 'PROJECT_IDENTITY_AMBIGUOUS', + message: 'legacy selector maps to multiple canonical projects', + upgrade_action: 'send_project_identity_v2', + }, + }), { status: 409, statusText: 'Conflict' }); + }; + + const client = new EngramRestClient(clientConfig()); + const result = await client.registerAndResolveProject({ projectId: 'legacy', agentId: 'agent' }, 'legacy'); + if (result.ok) { + await client.searchContext({ project: result.canonicalProject, query: 'must not run' }); + } + + assert.deepEqual(result, { + ok: false, + error: { + code: 'PROJECT_IDENTITY_AMBIGUOUS', + message: 'legacy selector maps to multiple canonical projects', + upgradeAction: 'send_project_identity_v2', + httpStatus: 409, + }, + }); + assert.equal(requests.length, 1, 'registration failure must short-circuit data access'); +}); + +test('session-start awaits registration before first write and honors config.project as outer selector', async () => { + const sequence = []; + const identity = gitIdentity(); + const fakeClient = { + isAvailable: () => true, + registerAndResolveProject: async (receivedIdentity, selector) => { + sequence.push(['register', receivedIdentity, selector]); + return { ok: true, canonicalProject: 'canonical-from-server' }; + }, + initSession: async (body) => { + sequence.push(['data', body]); + return { sessionDbId: 1, promptNumber: 1 }; + }, + }; + + await handleSessionStart( + { initialPrompt: 'hello' }, + { agentId: 'agent-a', sessionId: 'session-a', workspaceDir: undefined }, + fakeClient, + { project: 'configured-selector' }, + ); + + assert.equal(sequence[0][0], 'register'); + assert.equal(sequence[0][2], 'configured-selector'); + assert.equal(sequence[1][0], 'data'); + assert.equal(sequence[1][1].project, 'canonical-from-server'); +}); + +test('session-start stable registration failure sends no session write', async () => { + let writes = 0; + const fakeClient = { + isAvailable: () => true, + registerAndResolveProject: async () => ({ + ok: false, + error: { + code: 'PROJECT_IDENTITY_AMBIGUOUS', + message: 'ambiguous', + upgradeAction: 'send_project_identity_v2', + httpStatus: 409, + }, + }), + initSession: async () => { writes++; }, + }; + + await handleSessionStart( + { initialPrompt: 'hello' }, + { agentId: 'agent-a', sessionId: 'session-a' }, + fakeClient, + {}, + ); + assert.equal(writes, 0); +}); + +test('invalid bearer plus a known selector never reaches private data access', async (t) => { + const originalFetch = globalThis.fetch; + t.after(() => { globalThis.fetch = originalFetch; }); + const requests = []; + globalThis.fetch = async (url, init) => { + requests.push({ url: String(url), authorization: init.headers.Authorization }); + return new Response(JSON.stringify({ error: 'unauthorized' }), { status: 401, statusText: 'Unauthorized' }); + }; + const client = new EngramRestClient(clientConfig('invalid-bearer')); + const result = await client.registerAndResolveProject(gitIdentity(), 'known-private-selector'); + if (result.ok) { + await client.searchContext({ project: result.canonicalProject, query: 'private' }); + } + assert.equal(result.ok, false); + assert.equal(requests.length, 1); + assert.equal(requests[0].authorization, 'Bearer invalid-bearer'); +}); diff --git a/plugin/openclaw-engram/test/project-identity-v2.test.mjs b/plugin/openclaw-engram/test/project-identity-v2.test.mjs new file mode 100644 index 00000000..64cbd95a --- /dev/null +++ b/plugin/openclaw-engram/test/project-identity-v2.test.mjs @@ -0,0 +1,69 @@ +import assert from 'node:assert/strict'; +import fs from 'node:fs'; +import os from 'node:os'; +import path from 'node:path'; +import test from 'node:test'; +import { fileURLToPath } from 'node:url'; + +import { + PROJECT_IDENTITY_VERSION_V2, + buildProjectIdentityV2, + resolveIdentity, + validateProjectIdentityV2, +} from '../dist/identity.js'; + +const here = path.dirname(fileURLToPath(import.meta.url)); +const vectorsPath = path.resolve(here, '../../../.agent/specs/security-project-identity/evidence/project-identity-v2-vectors.json'); +const vectors = JSON.parse(fs.readFileSync(vectorsPath, 'utf8')); + +test('OpenClaw consumes the same v2 vectors as Go and Claude hooks', () => { + assert.equal(PROJECT_IDENTITY_VERSION_V2, vectors.identity_version); + for (const vector of vectors.vectors) { + const identity = buildProjectIdentityV2(vector); + assert.equal(identity.version, 2, vector.name); + assert.equal(identity.legacy_project_id, vector.legacy_project_id, vector.name); + assert.doesNotThrow(() => validateProjectIdentityV2(identity), vector.name); + } +}); + +test('OpenClaw non-git identity has a stable strict anchor, never the agent id', () => { + const workspace = fs.mkdtempSync(path.join(os.tmpdir(), 'openclaw-identity-v2-')); + const otherWorkspace = fs.mkdtempSync(path.join(os.tmpdir(), 'openclaw-identity-v2-other-')); + try { + const first = resolveIdentity('agent-secret-a', workspace); + const second = resolveIdentity('agent-secret-b', workspace); + assert.ok(first.projectIdentityV2); + assert.match(first.projectIdentityV2.non_git_anchor, /^[0-9a-f]{32}$/); + assert.equal(first.projectIdentityV2.non_git_anchor, second.projectIdentityV2.non_git_anchor); + assert.notEqual(first.projectIdentityV2.non_git_anchor, 'agent-secret-a'); + assert.equal(first.projectIdentityV2.anchor_shared, false); + const other = resolveIdentity('agent-secret-c', otherWorkspace); + assert.notEqual(first.projectIdentityV2.non_git_anchor, other.projectIdentityV2.non_git_anchor); + } finally { + fs.rmSync(workspace, { recursive: true, force: true }); + fs.rmSync(otherWorkspace, { recursive: true, force: true }); + } +}); + +test('OpenClaw rejects non-normalized metadata and unknown anchor-file fields', () => { + const malformed = buildProjectIdentityV2({ + legacy_project_id: ' selector ', + display_name: 'fixture', + git_remote: 'https://example.invalid/acme/mono.git', + relative_path: 'packages/core/', + }); + assert.throws(() => validateProjectIdentityV2(malformed), /PROJECT_IDENTITY_INVALID/); + + const workspace = fs.mkdtempSync(path.join(os.tmpdir(), 'openclaw-identity-v2-extra-')); + try { + fs.writeFileSync(path.join(workspace, '.engram-project-v2.json'), JSON.stringify({ + version: 2, + anchor: '00112233445566778899aabbccddeeff', + shared: false, + unexpected: true, + })); + assert.throws(() => resolveIdentity('agent-a', workspace), /PROJECT_IDENTITY_INVALID/); + } finally { + fs.rmSync(workspace, { recursive: true, force: true }); + } +}); diff --git a/plugin/openclaw-engram/test/prompt-safety.test.mjs b/plugin/openclaw-engram/test/prompt-safety.test.mjs index b3080fda..779421ac 100644 --- a/plugin/openclaw-engram/test/prompt-safety.test.mjs +++ b/plugin/openclaw-engram/test/prompt-safety.test.mjs @@ -128,6 +128,7 @@ test('rule router formatter renders routed packets without legacy always-active test('before-prompt-build prefers router packets over legacy always-inject wording', async () => { const client = { isAvailable: () => true, + registerAndResolveProject: async (_identity, selector) => ({ ok: true, canonicalProject: selector }), searchContext: async () => ({ observations: [], always_inject: [ @@ -182,6 +183,7 @@ test('before-prompt-build prefers router packets over legacy always-inject wordi test('before-agent-start renders router-only context payloads', async () => { const client = { isAvailable: () => true, + registerAndResolveProject: async (_identity, selector) => ({ ok: true, canonicalProject: selector }), getContextInject: async () => ({ observations: [], rule_router: { @@ -227,6 +229,7 @@ test('before-prompt-build keeps legacy always-inject when search observations ar let trackedMiss = false; const client = { isAvailable: () => true, + registerAndResolveProject: async (_identity, selector) => ({ ok: true, canonicalProject: selector }), searchContext: async () => ({ observations: [], always_inject: [ diff --git a/proto/engram/v1/engram.pb.go b/proto/engram/v1/engram.pb.go index cad6e895..828ecf1a 100644 --- a/proto/engram/v1/engram.pb.go +++ b/proto/engram/v1/engram.pb.go @@ -1384,9 +1384,11 @@ type CallToolRequest struct { // Project identity for scope isolation (from git-derived slug). Project string `protobuf:"bytes,3,opt,name=project,proto3" json:"project,omitempty"` // Claude session ID for tracking and outcome propagation. - SessionId string `protobuf:"bytes,4,opt,name=session_id,json=sessionId,proto3" json:"session_id,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache + SessionId string `protobuf:"bytes,4,opt,name=session_id,json=sessionId,proto3" json:"session_id,omitempty"` + // Full versioned identity metadata. Additive: old servers ignore it. + ProjectIdentity *ProjectIdentityV2 `protobuf:"bytes,5,opt,name=project_identity,json=projectIdentity,proto3" json:"project_identity,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *CallToolRequest) Reset() { @@ -1447,15 +1449,24 @@ func (x *CallToolRequest) GetSessionId() string { return "" } +func (x *CallToolRequest) GetProjectIdentity() *ProjectIdentityV2 { + if x != nil { + return x.ProjectIdentity + } + return nil +} + // CallToolResponse carries the result of an MCP tool call. type CallToolResponse struct { state protoimpl.MessageState `protogen:"open.v1"` // True if the tool returned an error result. IsError bool `protobuf:"varint,1,opt,name=is_error,json=isError,proto3" json:"is_error,omitempty"` // Tool result as JSON bytes (MCP content array serialized). - ContentJson []byte `protobuf:"bytes,2,opt,name=content_json,json=contentJson,proto3" json:"content_json,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache + ContentJson []byte `protobuf:"bytes,2,opt,name=content_json,json=contentJson,proto3" json:"content_json,omitempty"` + // Server-resolved canonical selector used for this call. + CanonicalProject string `protobuf:"bytes,3,opt,name=canonical_project,json=canonicalProject,proto3" json:"canonical_project,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *CallToolResponse) Reset() { @@ -1502,14 +1513,22 @@ func (x *CallToolResponse) GetContentJson() []byte { return nil } +func (x *CallToolResponse) GetCanonicalProject() string { + if x != nil { + return x.CanonicalProject + } + return "" +} + // InitializeRequest is the handshake from daemon to server. type InitializeRequest struct { - state protoimpl.MessageState `protogen:"open.v1"` - ClientName string `protobuf:"bytes,1,opt,name=client_name,json=clientName,proto3" json:"client_name,omitempty"` - ClientVersion string `protobuf:"bytes,2,opt,name=client_version,json=clientVersion,proto3" json:"client_version,omitempty"` - Project string `protobuf:"bytes,3,opt,name=project,proto3" json:"project,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + ClientName string `protobuf:"bytes,1,opt,name=client_name,json=clientName,proto3" json:"client_name,omitempty"` + ClientVersion string `protobuf:"bytes,2,opt,name=client_version,json=clientVersion,proto3" json:"client_version,omitempty"` + Project string `protobuf:"bytes,3,opt,name=project,proto3" json:"project,omitempty"` + ProjectIdentity *ProjectIdentityV2 `protobuf:"bytes,4,opt,name=project_identity,json=projectIdentity,proto3" json:"project_identity,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *InitializeRequest) Reset() { @@ -1563,14 +1582,22 @@ func (x *InitializeRequest) GetProject() string { return "" } +func (x *InitializeRequest) GetProjectIdentity() *ProjectIdentityV2 { + if x != nil { + return x.ProjectIdentity + } + return nil +} + // InitializeResponse carries server capabilities and tool definitions. type InitializeResponse struct { - state protoimpl.MessageState `protogen:"open.v1"` - ServerName string `protobuf:"bytes,1,opt,name=server_name,json=serverName,proto3" json:"server_name,omitempty"` - ServerVersion string `protobuf:"bytes,2,opt,name=server_version,json=serverVersion,proto3" json:"server_version,omitempty"` - Tools []*ToolDefinition `protobuf:"bytes,3,rep,name=tools,proto3" json:"tools,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + ServerName string `protobuf:"bytes,1,opt,name=server_name,json=serverName,proto3" json:"server_name,omitempty"` + ServerVersion string `protobuf:"bytes,2,opt,name=server_version,json=serverVersion,proto3" json:"server_version,omitempty"` + Tools []*ToolDefinition `protobuf:"bytes,3,rep,name=tools,proto3" json:"tools,omitempty"` + CanonicalProject string `protobuf:"bytes,4,opt,name=canonical_project,json=canonicalProject,proto3" json:"canonical_project,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *InitializeResponse) Reset() { @@ -1624,6 +1651,13 @@ func (x *InitializeResponse) GetTools() []*ToolDefinition { return nil } +func (x *InitializeResponse) GetCanonicalProject() string { + if x != nil { + return x.CanonicalProject + } + return "" +} + // ToolDefinition describes a single MCP tool. type ToolDefinition struct { state protoimpl.MessageState `protogen:"open.v1"` @@ -2116,6 +2150,104 @@ func (x *CodeIndexUploadReceipt) GetErrors() []string { return nil } +// ProjectIdentityV2 carries one complete identity source. Git identities use +// git_remote+relative_path. Non-git identities use a 128-bit anchor and require +// explicit anchor_shared presence. The selector remains on the outer request +// for old-server compatibility; metadata is not an authentication credential. +// Appended after the existing message declarations to minimize generated-code +// churn while preserving every pre-v2 descriptor index. +type ProjectIdentityV2 struct { + state protoimpl.MessageState `protogen:"open.v1"` + Version uint32 `protobuf:"varint,1,opt,name=version,proto3" json:"version,omitempty"` + LegacyProjectId string `protobuf:"bytes,2,opt,name=legacy_project_id,json=legacyProjectId,proto3" json:"legacy_project_id,omitempty"` + DisplayName string `protobuf:"bytes,3,opt,name=display_name,json=displayName,proto3" json:"display_name,omitempty"` + GitRemote string `protobuf:"bytes,4,opt,name=git_remote,json=gitRemote,proto3" json:"git_remote,omitempty"` + RelativePath string `protobuf:"bytes,5,opt,name=relative_path,json=relativePath,proto3" json:"relative_path,omitempty"` + NonGitAnchor string `protobuf:"bytes,6,opt,name=non_git_anchor,json=nonGitAnchor,proto3" json:"non_git_anchor,omitempty"` + AnchorShared *bool `protobuf:"varint,7,opt,name=anchor_shared,json=anchorShared,proto3,oneof" json:"anchor_shared,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ProjectIdentityV2) Reset() { + *x = ProjectIdentityV2{} + mi := &file_proto_engram_v1_engram_proto_msgTypes[27] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ProjectIdentityV2) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ProjectIdentityV2) ProtoMessage() {} + +func (x *ProjectIdentityV2) ProtoReflect() protoreflect.Message { + mi := &file_proto_engram_v1_engram_proto_msgTypes[27] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ProjectIdentityV2.ProtoReflect.Descriptor instead. +func (*ProjectIdentityV2) Descriptor() ([]byte, []int) { + return file_proto_engram_v1_engram_proto_rawDescGZIP(), []int{27} +} + +func (x *ProjectIdentityV2) GetVersion() uint32 { + if x != nil { + return x.Version + } + return 0 +} + +func (x *ProjectIdentityV2) GetLegacyProjectId() string { + if x != nil { + return x.LegacyProjectId + } + return "" +} + +func (x *ProjectIdentityV2) GetDisplayName() string { + if x != nil { + return x.DisplayName + } + return "" +} + +func (x *ProjectIdentityV2) GetGitRemote() string { + if x != nil { + return x.GitRemote + } + return "" +} + +func (x *ProjectIdentityV2) GetRelativePath() string { + if x != nil { + return x.RelativePath + } + return "" +} + +func (x *ProjectIdentityV2) GetNonGitAnchor() string { + if x != nil { + return x.NonGitAnchor + } + return "" +} + +func (x *ProjectIdentityV2) GetAnchorShared() bool { + if x != nil && x.AnchorShared != nil { + return *x.AnchorShared + } + return false +} + var File_proto_engram_v1_engram_proto protoreflect.FileDescriptor const file_proto_engram_v1_engram_proto_rawDesc = "" + @@ -2249,26 +2381,30 @@ const file_proto_engram_v1_engram_proto_rawDesc = "" + "compatible\x18\x01 \x01(\bR\n" + "compatible\x12%\n" + "\x0eserver_version\x18\x02 \x01(\tR\rserverVersion\x12'\n" + - "\x0fincompat_reason\x18\x03 \x01(\tR\x0eincompatReason\"\x8e\x01\n" + + "\x0fincompat_reason\x18\x03 \x01(\tR\x0eincompatReason\"\xd7\x01\n" + "\x0fCallToolRequest\x12\x1b\n" + "\ttool_name\x18\x01 \x01(\tR\btoolName\x12%\n" + "\x0earguments_json\x18\x02 \x01(\fR\rargumentsJson\x12\x18\n" + "\aproject\x18\x03 \x01(\tR\aproject\x12\x1d\n" + "\n" + - "session_id\x18\x04 \x01(\tR\tsessionId\"P\n" + + "session_id\x18\x04 \x01(\tR\tsessionId\x12G\n" + + "\x10project_identity\x18\x05 \x01(\v2\x1c.engram.v1.ProjectIdentityV2R\x0fprojectIdentity\"}\n" + "\x10CallToolResponse\x12\x19\n" + "\bis_error\x18\x01 \x01(\bR\aisError\x12!\n" + - "\fcontent_json\x18\x02 \x01(\fR\vcontentJson\"u\n" + + "\fcontent_json\x18\x02 \x01(\fR\vcontentJson\x12+\n" + + "\x11canonical_project\x18\x03 \x01(\tR\x10canonicalProject\"\xbe\x01\n" + "\x11InitializeRequest\x12\x1f\n" + "\vclient_name\x18\x01 \x01(\tR\n" + "clientName\x12%\n" + "\x0eclient_version\x18\x02 \x01(\tR\rclientVersion\x12\x18\n" + - "\aproject\x18\x03 \x01(\tR\aproject\"\x8d\x01\n" + + "\aproject\x18\x03 \x01(\tR\aproject\x12G\n" + + "\x10project_identity\x18\x04 \x01(\v2\x1c.engram.v1.ProjectIdentityV2R\x0fprojectIdentity\"\xba\x01\n" + "\x12InitializeResponse\x12\x1f\n" + "\vserver_name\x18\x01 \x01(\tR\n" + "serverName\x12%\n" + "\x0eserver_version\x18\x02 \x01(\tR\rserverVersion\x12/\n" + - "\x05tools\x18\x03 \x03(\v2\x19.engram.v1.ToolDefinitionR\x05tools\"r\n" + + "\x05tools\x18\x03 \x03(\v2\x19.engram.v1.ToolDefinitionR\x05tools\x12+\n" + + "\x11canonical_project\x18\x04 \x01(\tR\x10canonicalProject\"r\n" + "\x0eToolDefinition\x12\x12\n" + "\x04name\x18\x01 \x01(\tR\x04name\x12 \n" + "\vdescription\x18\x02 \x01(\tR\vdescription\x12*\n" + @@ -2304,7 +2440,17 @@ const file_proto_engram_v1_engram_proto_rawDesc = "" + "\x16CodeIndexUploadReceipt\x12\x1a\n" + "\bembedded\x18\x01 \x01(\x05R\bembedded\x12\x18\n" + "\adeleted\x18\x02 \x01(\x05R\adeleted\x12\x16\n" + - "\x06errors\x18\x03 \x03(\tR\x06errors*\x96\x01\n" + + "\x06errors\x18\x03 \x03(\tR\x06errors\"\xa2\x02\n" + + "\x11ProjectIdentityV2\x12\x18\n" + + "\aversion\x18\x01 \x01(\rR\aversion\x12*\n" + + "\x11legacy_project_id\x18\x02 \x01(\tR\x0flegacyProjectId\x12!\n" + + "\fdisplay_name\x18\x03 \x01(\tR\vdisplayName\x12\x1d\n" + + "\n" + + "git_remote\x18\x04 \x01(\tR\tgitRemote\x12#\n" + + "\rrelative_path\x18\x05 \x01(\tR\frelativePath\x12$\n" + + "\x0enon_git_anchor\x18\x06 \x01(\tR\fnonGitAnchor\x12(\n" + + "\ranchor_shared\x18\a \x01(\bH\x00R\fanchorShared\x88\x01\x01B\x10\n" + + "\x0e_anchor_shared*\x96\x01\n" + "\x10ProjectEventType\x12\"\n" + "\x1ePROJECT_EVENT_TYPE_UNSPECIFIED\x10\x00\x12\x1e\n" + "\x1aPROJECT_EVENT_TYPE_REMOVED\x10\x01\x12\x1e\n" + @@ -2335,7 +2481,7 @@ func file_proto_engram_v1_engram_proto_rawDescGZIP() []byte { } var file_proto_engram_v1_engram_proto_enumTypes = make([]protoimpl.EnumInfo, 1) -var file_proto_engram_v1_engram_proto_msgTypes = make([]protoimpl.MessageInfo, 28) +var file_proto_engram_v1_engram_proto_msgTypes = make([]protoimpl.MessageInfo, 29) var file_proto_engram_v1_engram_proto_goTypes = []any{ (ProjectEventType)(0), // 0: engram.v1.ProjectEventType (*SyncProjectStateRequest)(nil), // 1: engram.v1.SyncProjectStateRequest @@ -2365,61 +2511,64 @@ var file_proto_engram_v1_engram_proto_goTypes = []any{ (*CodeIndexNegotiateResponse)(nil), // 25: engram.v1.CodeIndexNegotiateResponse (*CodeChunkUpload)(nil), // 26: engram.v1.CodeChunkUpload (*CodeIndexUploadReceipt)(nil), // 27: engram.v1.CodeIndexUploadReceipt - nil, // 28: engram.v1.ProjectEvent.MetadataEntry - (*timestamppb.Timestamp)(nil), // 29: google.protobuf.Timestamp + (*ProjectIdentityV2)(nil), // 28: engram.v1.ProjectIdentityV2 + nil, // 29: engram.v1.ProjectEvent.MetadataEntry + (*timestamppb.Timestamp)(nil), // 30: google.protobuf.Timestamp } var file_proto_engram_v1_engram_proto_depIdxs = []int32{ 0, // 0: engram.v1.ProjectEvent.event_type:type_name -> engram.v1.ProjectEventType - 28, // 1: engram.v1.ProjectEvent.metadata:type_name -> engram.v1.ProjectEvent.MetadataEntry + 29, // 1: engram.v1.ProjectEvent.metadata:type_name -> engram.v1.ProjectEvent.MetadataEntry 7, // 2: engram.v1.GetSessionStartContextResponse.issues:type_name -> engram.v1.SessionStartIssue 8, // 3: engram.v1.GetSessionStartContextResponse.rules:type_name -> engram.v1.SessionStartRule 11, // 4: engram.v1.GetSessionStartContextResponse.memories:type_name -> engram.v1.SessionStartMemory - 29, // 5: engram.v1.GetSessionStartContextResponse.generated_at:type_name -> google.protobuf.Timestamp + 30, // 5: engram.v1.GetSessionStartContextResponse.generated_at:type_name -> google.protobuf.Timestamp 9, // 6: engram.v1.GetSessionStartContextResponse.rule_router:type_name -> engram.v1.SessionStartRuleRouter 13, // 7: engram.v1.GetSessionStartContextResponse.meta_summary:type_name -> engram.v1.SessionStartMetaSummary - 29, // 8: engram.v1.SessionStartIssue.acknowledged_at:type_name -> google.protobuf.Timestamp - 29, // 9: engram.v1.SessionStartIssue.resolved_at:type_name -> google.protobuf.Timestamp - 29, // 10: engram.v1.SessionStartIssue.reopened_at:type_name -> google.protobuf.Timestamp - 29, // 11: engram.v1.SessionStartIssue.closed_at:type_name -> google.protobuf.Timestamp - 29, // 12: engram.v1.SessionStartIssue.created_at:type_name -> google.protobuf.Timestamp - 29, // 13: engram.v1.SessionStartIssue.updated_at:type_name -> google.protobuf.Timestamp - 29, // 14: engram.v1.SessionStartRule.created_at:type_name -> google.protobuf.Timestamp - 29, // 15: engram.v1.SessionStartRule.updated_at:type_name -> google.protobuf.Timestamp + 30, // 8: engram.v1.SessionStartIssue.acknowledged_at:type_name -> google.protobuf.Timestamp + 30, // 9: engram.v1.SessionStartIssue.resolved_at:type_name -> google.protobuf.Timestamp + 30, // 10: engram.v1.SessionStartIssue.reopened_at:type_name -> google.protobuf.Timestamp + 30, // 11: engram.v1.SessionStartIssue.closed_at:type_name -> google.protobuf.Timestamp + 30, // 12: engram.v1.SessionStartIssue.created_at:type_name -> google.protobuf.Timestamp + 30, // 13: engram.v1.SessionStartIssue.updated_at:type_name -> google.protobuf.Timestamp + 30, // 14: engram.v1.SessionStartRule.created_at:type_name -> google.protobuf.Timestamp + 30, // 15: engram.v1.SessionStartRule.updated_at:type_name -> google.protobuf.Timestamp 10, // 16: engram.v1.SessionStartRuleRouter.kernel:type_name -> engram.v1.SessionStartRulePacket 10, // 17: engram.v1.SessionStartRuleRouter.contextual:type_name -> engram.v1.SessionStartRulePacket 10, // 18: engram.v1.SessionStartRuleRouter.suppressed:type_name -> engram.v1.SessionStartRulePacket - 29, // 19: engram.v1.SessionStartMemory.created_at:type_name -> google.protobuf.Timestamp - 29, // 20: engram.v1.SessionStartMemory.updated_at:type_name -> google.protobuf.Timestamp + 30, // 19: engram.v1.SessionStartMemory.created_at:type_name -> google.protobuf.Timestamp + 30, // 20: engram.v1.SessionStartMemory.updated_at:type_name -> google.protobuf.Timestamp 12, // 21: engram.v1.SessionStartMetaSummary.top_tags:type_name -> engram.v1.SessionStartMetaTagCount - 29, // 22: engram.v1.SessionStartMetaSummary.oldest_created_at:type_name -> google.protobuf.Timestamp - 29, // 23: engram.v1.SessionStartMetaSummary.newest_created_at:type_name -> google.protobuf.Timestamp - 29, // 24: engram.v1.SessionStartMetaSummary.generated_at:type_name -> google.protobuf.Timestamp - 20, // 25: engram.v1.InitializeResponse.tools:type_name -> engram.v1.ToolDefinition - 23, // 26: engram.v1.CodeIndexNegotiateRequest.manifest:type_name -> engram.v1.CodeChunkMeta - 23, // 27: engram.v1.CodeChunkUpload.meta:type_name -> engram.v1.CodeChunkMeta - 16, // 28: engram.v1.EngramService.CallTool:input_type -> engram.v1.CallToolRequest - 18, // 29: engram.v1.EngramService.Initialize:input_type -> engram.v1.InitializeRequest - 21, // 30: engram.v1.EngramService.Ping:input_type -> engram.v1.PingRequest - 1, // 31: engram.v1.EngramService.SyncProjectState:input_type -> engram.v1.SyncProjectStateRequest - 3, // 32: engram.v1.EngramService.ProjectEvents:input_type -> engram.v1.ProjectEventsRequest - 5, // 33: engram.v1.EngramService.GetSessionStartContext:input_type -> engram.v1.GetSessionStartContextRequest - 14, // 34: engram.v1.EngramService.NegotiateVersion:input_type -> engram.v1.NegotiateVersionRequest - 24, // 35: engram.v1.EngramService.CodeIndexNegotiate:input_type -> engram.v1.CodeIndexNegotiateRequest - 26, // 36: engram.v1.EngramService.CodeIndexUpload:input_type -> engram.v1.CodeChunkUpload - 17, // 37: engram.v1.EngramService.CallTool:output_type -> engram.v1.CallToolResponse - 19, // 38: engram.v1.EngramService.Initialize:output_type -> engram.v1.InitializeResponse - 22, // 39: engram.v1.EngramService.Ping:output_type -> engram.v1.PingResponse - 2, // 40: engram.v1.EngramService.SyncProjectState:output_type -> engram.v1.SyncProjectStateResponse - 4, // 41: engram.v1.EngramService.ProjectEvents:output_type -> engram.v1.ProjectEvent - 6, // 42: engram.v1.EngramService.GetSessionStartContext:output_type -> engram.v1.GetSessionStartContextResponse - 15, // 43: engram.v1.EngramService.NegotiateVersion:output_type -> engram.v1.NegotiateVersionResponse - 25, // 44: engram.v1.EngramService.CodeIndexNegotiate:output_type -> engram.v1.CodeIndexNegotiateResponse - 27, // 45: engram.v1.EngramService.CodeIndexUpload:output_type -> engram.v1.CodeIndexUploadReceipt - 37, // [37:46] is the sub-list for method output_type - 28, // [28:37] is the sub-list for method input_type - 28, // [28:28] is the sub-list for extension type_name - 28, // [28:28] is the sub-list for extension extendee - 0, // [0:28] is the sub-list for field type_name + 30, // 22: engram.v1.SessionStartMetaSummary.oldest_created_at:type_name -> google.protobuf.Timestamp + 30, // 23: engram.v1.SessionStartMetaSummary.newest_created_at:type_name -> google.protobuf.Timestamp + 30, // 24: engram.v1.SessionStartMetaSummary.generated_at:type_name -> google.protobuf.Timestamp + 28, // 25: engram.v1.CallToolRequest.project_identity:type_name -> engram.v1.ProjectIdentityV2 + 28, // 26: engram.v1.InitializeRequest.project_identity:type_name -> engram.v1.ProjectIdentityV2 + 20, // 27: engram.v1.InitializeResponse.tools:type_name -> engram.v1.ToolDefinition + 23, // 28: engram.v1.CodeIndexNegotiateRequest.manifest:type_name -> engram.v1.CodeChunkMeta + 23, // 29: engram.v1.CodeChunkUpload.meta:type_name -> engram.v1.CodeChunkMeta + 16, // 30: engram.v1.EngramService.CallTool:input_type -> engram.v1.CallToolRequest + 18, // 31: engram.v1.EngramService.Initialize:input_type -> engram.v1.InitializeRequest + 21, // 32: engram.v1.EngramService.Ping:input_type -> engram.v1.PingRequest + 1, // 33: engram.v1.EngramService.SyncProjectState:input_type -> engram.v1.SyncProjectStateRequest + 3, // 34: engram.v1.EngramService.ProjectEvents:input_type -> engram.v1.ProjectEventsRequest + 5, // 35: engram.v1.EngramService.GetSessionStartContext:input_type -> engram.v1.GetSessionStartContextRequest + 14, // 36: engram.v1.EngramService.NegotiateVersion:input_type -> engram.v1.NegotiateVersionRequest + 24, // 37: engram.v1.EngramService.CodeIndexNegotiate:input_type -> engram.v1.CodeIndexNegotiateRequest + 26, // 38: engram.v1.EngramService.CodeIndexUpload:input_type -> engram.v1.CodeChunkUpload + 17, // 39: engram.v1.EngramService.CallTool:output_type -> engram.v1.CallToolResponse + 19, // 40: engram.v1.EngramService.Initialize:output_type -> engram.v1.InitializeResponse + 22, // 41: engram.v1.EngramService.Ping:output_type -> engram.v1.PingResponse + 2, // 42: engram.v1.EngramService.SyncProjectState:output_type -> engram.v1.SyncProjectStateResponse + 4, // 43: engram.v1.EngramService.ProjectEvents:output_type -> engram.v1.ProjectEvent + 6, // 44: engram.v1.EngramService.GetSessionStartContext:output_type -> engram.v1.GetSessionStartContextResponse + 15, // 45: engram.v1.EngramService.NegotiateVersion:output_type -> engram.v1.NegotiateVersionResponse + 25, // 46: engram.v1.EngramService.CodeIndexNegotiate:output_type -> engram.v1.CodeIndexNegotiateResponse + 27, // 47: engram.v1.EngramService.CodeIndexUpload:output_type -> engram.v1.CodeIndexUploadReceipt + 39, // [39:48] is the sub-list for method output_type + 30, // [30:39] is the sub-list for method input_type + 30, // [30:30] is the sub-list for extension type_name + 30, // [30:30] is the sub-list for extension extendee + 0, // [0:30] is the sub-list for field type_name } func init() { file_proto_engram_v1_engram_proto_init() } @@ -2427,13 +2576,14 @@ func file_proto_engram_v1_engram_proto_init() { if File_proto_engram_v1_engram_proto != nil { return } + file_proto_engram_v1_engram_proto_msgTypes[27].OneofWrappers = []any{} type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: unsafe.Slice(unsafe.StringData(file_proto_engram_v1_engram_proto_rawDesc), len(file_proto_engram_v1_engram_proto_rawDesc)), NumEnums: 1, - NumMessages: 28, + NumMessages: 29, NumExtensions: 0, NumServices: 1, }, diff --git a/proto/engram/v1/engram.proto b/proto/engram/v1/engram.proto index 260ee503..89003975 100644 --- a/proto/engram/v1/engram.proto +++ b/proto/engram/v1/engram.proto @@ -269,6 +269,8 @@ message CallToolRequest { string project = 3; // Claude session ID for tracking and outcome propagation. string session_id = 4; + // Full versioned identity metadata. Additive: old servers ignore it. + ProjectIdentityV2 project_identity = 5; } // CallToolResponse carries the result of an MCP tool call. @@ -277,6 +279,8 @@ message CallToolResponse { bool is_error = 1; // Tool result as JSON bytes (MCP content array serialized). bytes content_json = 2; + // Server-resolved canonical selector used for this call. + string canonical_project = 3; } // InitializeRequest is the handshake from daemon to server. @@ -284,6 +288,7 @@ message InitializeRequest { string client_name = 1; string client_version = 2; string project = 3; + ProjectIdentityV2 project_identity = 4; } // InitializeResponse carries server capabilities and tool definitions. @@ -291,6 +296,7 @@ message InitializeResponse { string server_name = 1; string server_version = 2; repeated ToolDefinition tools = 3; + string canonical_project = 4; } // ToolDefinition describes a single MCP tool. @@ -360,3 +366,19 @@ message CodeIndexUploadReceipt { int32 deleted = 2; repeated string errors = 3; } + +// ProjectIdentityV2 carries one complete identity source. Git identities use +// git_remote+relative_path. Non-git identities use a 128-bit anchor and require +// explicit anchor_shared presence. The selector remains on the outer request +// for old-server compatibility; metadata is not an authentication credential. +// Appended after the existing message declarations to minimize generated-code +// churn while preserving every pre-v2 descriptor index. +message ProjectIdentityV2 { + uint32 version = 1; + string legacy_project_id = 2; + string display_name = 3; + string git_remote = 4; + string relative_path = 5; + string non_git_anchor = 6; + optional bool anchor_shared = 7; +} From 369951b61ee07cb0c405558e0f677cd1c9e90362 Mon Sep 17 00:00:00 2001 From: Kirill Turanskiy Date: Fri, 10 Jul 2026 20:18:38 +0300 Subject: [PATCH 036/111] docs(evidence): repair embedding transport R4 --- .../R3-SHA256SUMS.txt | 22 +- .../coverage-repeat.v1.json | 58 +---- .../maker-report.md | 38 +-- .../maker-summary.v1.json | 65 +----- .../verification-matrix.v1.json | 100 +------- .../R4-SHA256SUMS.txt | 28 +++ .../coverage-repeat.v1.json | 43 ++++ .../maker-report.md | 39 ++++ .../maker-summary.v1.json | 38 +++ .../verification-matrix.v1.json | 42 ++++ .../ARTIFACTS.sha256 | 6 +- .../maker-report.md | 148 ++++++------ .../verification-observations.v1.json | 221 +++++------------- .../verify-manifest.cjs | 12 +- .../verify-manifest.test.cjs | 123 +++++++++- ...B-EMBEDDING-EVIDENCE-TRANSPORT-R3.tdd.json | 75 +----- ...B-EMBEDDING-EVIDENCE-TRANSPORT-R4.red.json | 44 ++++ ...B-EMBEDDING-EVIDENCE-TRANSPORT-R4.tdd.json | 91 ++++++++ 18 files changed, 633 insertions(+), 560 deletions(-) create mode 100644 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4/R4-SHA256SUMS.txt create mode 100644 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4/coverage-repeat.v1.json create mode 100644 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4/maker-report.md create mode 100644 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4/maker-summary.v1.json create mode 100644 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4/verification-matrix.v1.json create mode 100644 .agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R4.red.json create mode 100644 .agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R4.tdd.json diff --git a/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/R3-SHA256SUMS.txt b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/R3-SHA256SUMS.txt index 652b9436..4df3e0d1 100644 --- a/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/R3-SHA256SUMS.txt +++ b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/R3-SHA256SUMS.txt @@ -4,18 +4,20 @@ # checkout-equivalence=crlf-to-lf-with-no-bare-cr # parent=8dac7910de52d2744fcf67f79a0a1597beebac72 # accepted-product-source=38d6a4fb7ff5f5ae3b6c0066c0a1b806421137df +# status=superseded-by-r4 +# refreshed-on-base=d650df5c4271cdb50aa1f443d2f95b2f4b672541 # maker-commit=reported-out-of-band-after-commit # self-entry=excluded-to-avoid-recursion 5d932e6acf104bf9eff291409b50961007512e09e91d78401257a018fcb780f4 .agent/reports/evidence/production-ready/db-embedding-stats/SHA256SUMS.txt e3e9fd6250d4ead502a01ec81bb7901ad658d74845184a10b6f153276a1bd12f .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/content-manifest.v1.json -e9190c0c09199b43931bb53286b7165401e030bae1290de669ad04dea21bd287 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/ARTIFACTS.sha256 -2b70221b41b570db6d4e245de7f73bba5b1c2d65af1c00d025946a2fb0af9463 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.cjs -5241f81a2872dbd88062c6c82fc0018029373f0ebef8ae67924a070b124fba26 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.test.cjs -6c392da36f0a1eb54425cfddb08d8dab9164434f1c8a294aef451c822eea419d .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verification-observations.v1.json -1de9db676a8ca4618fd44892b8a26e68fd569f5524219514458cdc9039828014 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/maker-report.md +9fc641fc8f86a161c81d100fc840e50ecf4d4bc7e83b829dab2899e430c097cf .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/ARTIFACTS.sha256 +a55e59dd870659330add8f840272aa1e8829f8161779db3e9be9e6e014cf1ba4 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.cjs +1d544562cd9273a91e6ce9eba524698fbef922603f5f3d67eb7e27f1a8c8e9e4 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.test.cjs +fd16ab3f6135a3af584a8f3589e9137c6bfcb62f474093492d15020db21ee3fc .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verification-observations.v1.json +cb73530f2c204f2c7e4110928971ffaac6c3cb172b59c72cf8047cecf610ab65 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/maker-report.md 8777110d8681c895fd821664ca733d959e940353490ae9ed8bc0f0c1e27f8b3b .agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R3.red.json -4f40787b460bd5b811f84c73e200586a9f0d89bd8265c1af52eb7b77fc6dabfa .agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R3.tdd.json -44bee7a74ab71495540271f399401cc9a79d833324a51c1f76ccf74db0b6176c .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/coverage-repeat.v1.json -9fa36518bb1211ad9c2e2eda5a97fafd1aeb29cd9c3aa07016af9abad2ad14ed .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/verification-matrix.v1.json -812f1e5b6bc8846b7bbcace5a5f93dbf9c4aa2f14936f5898d6db3947f8124f2 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/maker-summary.v1.json -bdf0afdded29b50b43c6ae72438986a9b447930a6a5a7d795edac0dbc1d9c730 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/maker-report.md +4ce40777286f76e86cd48a63b38ae42e30b10de0de40cb7c9771018381f893cb .agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R3.tdd.json +70251c81fc640a595d0ba0cbe377511de54822abcaf763cc866ca1034c91e6fe .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/coverage-repeat.v1.json +a829bdb938afb219fd1e3321b1ea3a8c1960e24d0d74fa304e008e3c6fe50aad .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/verification-matrix.v1.json +091286d8afe4f4b8a9ff4b556f875113620c318ebc613c5bbc3df16194d2832c .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/maker-summary.v1.json +14739f0a3deb055cd1ee6bda8799fcb6c964f2be527cb0230dc8c429225addd9 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/maker-report.md diff --git a/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/coverage-repeat.v1.json b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/coverage-repeat.v1.json index 6a34abfc..6fb00770 100644 --- a/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/coverage-repeat.v1.json +++ b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/coverage-repeat.v1.json @@ -1,58 +1,8 @@ { "schema_version": 1, "slice": "DB-EMBEDDING-EVIDENCE-TRANSPORT-R3", - "node_version": "v24.2.0", - "command": "node --test --test-concurrency=1 --experimental-test-coverage .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.test.cjs", - "runs": [ - { - "run": 1, - "exit_code": 0, - "tests": 22, - "passed": 22, - "failed": 0, - "aggregate": { - "line_percent": 87.27, - "branch_percent": 71.75, - "functions_percent": 94.87 - }, - "verifier": { - "line_percent": 79.55, - "branch_percent": 51.59, - "functions_percent": 81.82 - }, - "test_harness": { - "line_percent": 100.0, - "branch_percent": 97.94, - "functions_percent": 100.0 - } - }, - { - "run": 2, - "exit_code": 0, - "tests": 22, - "passed": 22, - "failed": 0, - "aggregate": { - "line_percent": 87.27, - "branch_percent": 71.75, - "functions_percent": 94.87 - }, - "verifier": { - "line_percent": 79.55, - "branch_percent": 51.59, - "functions_percent": 81.82 - }, - "test_harness": { - "line_percent": 100.0, - "branch_percent": 97.94, - "functions_percent": 100.0 - } - } - ], - "reproducible": true, - "threshold": { - "percent": 80, - "basis": "aggregate line coverage", - "status": "PASS" - } + "status": "SUPERSEDED_BY_R4", + "superseded_reason": "Independent checker reruns on Node v24.2.0 did not reproduce the committed R3 coverage values.", + "historical_numeric_claims_removed": true, + "replacement": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4/coverage-repeat.v1.json" } diff --git a/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/maker-report.md b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/maker-report.md index c3f176f5..af2effc3 100644 --- a/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/maker-report.md +++ b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/maker-report.md @@ -1,30 +1,16 @@ -# DB-EMBEDDING-EVIDENCE-TRANSPORT R3 compact handoff +# DB-EMBEDDING-EVIDENCE-TRANSPORT R3 supersession note -Status: **READY_FOR_CHECK** +R3 remains the historical repair that established the exact seven-path source +lock, exact accepted source commit, canonical pre-access validation, permanent +attack suite, Windows CRLF proof, fresh-LF proof, and zero product/source/test +delta. -R3 is based on the immutable independent checker commit `8dac7910...` and -preserves accepted product commit `38d6a4fb...` byte-for-byte. It repairs all -four blocking checker reproductions: exact source commit, exact seven-source -set, valid-substitution rejection, and canonical-path pre-access gating. +The independent R3 checker reproduced all behavioral rails but did not +reproduce the committed coverage values. Those numeric claims have therefore +been removed instead of being repeated as current evidence. -Evidence summary: +The exact R4 reruns, coverage scopes, fail-closed null regressions, checksums, +and current readiness packet are under +`.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4/`. -- exact-parent RED: `18 pass / 4 fail`, exit `1`; -- GREEN and post-restore: `22/22`, exit `0`; -- Prove-It sentinels: `12` and `9` failed tests, both exit `1`; -- Windows: raw/Git/LF `0/7`, `7/7`, `7/7`; artifacts `5/5`; -- fresh LF: raw/Git/LF `7/7`; artifacts `5/5`; suite `22/22`; -- coverage repeated identically twice: aggregate line `87.27%`, branch - `71.75%`, functions `94.87%`; verifier-only metrics are separately labeled; -- product/source/test delta, temporary worktree residue, maker Node residue, - matching PostgreSQL databases, and matching PostgreSQL sessions are zero. - -One diagnostic discrepancy was surfaced rather than hidden: the first -read-only residue query assumed a nonexistent PostgreSQL role `postgres` and -failed authentication. Container configuration identified the actual role and -database as `engram` / `engram_test`; the corrected read-only query returned -database residue `0` and session residue `0`. - -The packet checksum manifest excludes itself. Final commit/tree identity and -the manifest's own hash are reported after commit. A fresh independent checker -must replay the four repaired mutations; this maker does not self-accept. +Status: **SUPERSEDED_BY_R4**. diff --git a/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/maker-summary.v1.json b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/maker-summary.v1.json index 549677fd..58fea9fa 100644 --- a/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/maker-summary.v1.json +++ b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/maker-summary.v1.json @@ -2,63 +2,18 @@ "schema_version": 1, "slice": "DB-EMBEDDING-EVIDENCE-TRANSPORT-R3", "role": "maker", - "status": "READY_FOR_CHECK", + "status": "SUPERSEDED_BY_R4", "parent": "8dac7910de52d2744fcf67f79a0a1597beebac72", - "rejected_r2_target": "db2cf891dd9c6315fd17220ffe2d02302bea8844", "accepted_product_source": "38d6a4fb7ff5f5ae3b6c0066c0a1b806421137df", - "branch": "work/prc-db-embedding-evidence-transport-r3", - "worktree": "D:/Dev/engram/.agent/worktrees/db-embedding-evidence-r3-maker", - "commit": null, - "commit_reason": "reported out-of-band after the atomic commit to avoid self-reference", - "repairs": [ - { - "finding": "ETR2-C001", - "result": "exact seven-path source set and cardinality enforced" - }, - { - "finding": "ETR2-C002", - "result": "source commit pinned by exact equality to the accepted product source" - }, - { - "finding": "ETR2-C003", - "result": "all source Git and filesystem access consumes only validated canonical paths after a zero-error gate" - }, - { - "finding": "ETR2-C004", - "result": "two reproducible coverage runs recorded with aggregate, verifier, and harness scopes labeled separately" - } + "preserved_repairs": [ + "exact seven-path source lock", + "exact accepted source commit lock", + "validated canonical source paths before source access", + "Windows and fresh-LF representation proof" ], - "tests": { - "baseline": "18/18 PASS", - "red": "18 pass / 4 fail, exit 1", - "green": "22/22 PASS", - "prove_it_validate_contract_schema": "12 failed, exit 1", - "prove_it_verify_artifact_files": "9 failed, exit 1", - "post_restore": "22/22 PASS" + "coverage_claim": { + "status": "REMOVED_AS_NOT_REPRODUCIBLE", + "replacement": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4/coverage-repeat.v1.json" }, - "representation": { - "windows": "raw 0/7, Git 7/7, checkout-LF 7/7, artifacts 5/5", - "fresh_lf": "raw/Git/checkout-LF 7/7, artifacts 5/5, suite 22/22" - }, - "coverage": { - "repeat_identical": true, - "aggregate_line_percent": 87.27, - "aggregate_branch_percent": 71.75, - "aggregate_functions_percent": 94.87, - "verifier_line_percent": 79.55, - "verifier_branch_percent": 51.59, - "verifier_functions_percent": 81.82, - "threshold_basis": "aggregate line coverage", - "threshold_percent": 80, - "status": "PASS" - }, - "product_source_test_delta": 0, - "residue": { - "temporary_worktrees": 0, - "maker_node_processes": 0, - "matching_postgresql_databases": 0, - "matching_postgresql_sessions": 0 - }, - "checksum_manifest": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/R3-SHA256SUMS.txt", - "next_action": "fresh independent checker; no maker self-acceptance" + "next_action": "Use the R4 packet and a fresh independent checker." } diff --git a/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/verification-matrix.v1.json b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/verification-matrix.v1.json index 9ca8065a..c0933548 100644 --- a/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/verification-matrix.v1.json +++ b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/verification-matrix.v1.json @@ -1,95 +1,19 @@ { "schema_version": 1, "slice": "DB-EMBEDDING-EVIDENCE-TRANSPORT-R3", + "status": "SUPERSEDED_BY_R4", "parent": "8dac7910de52d2744fcf67f79a0a1597beebac72", "accepted_product_source": "38d6a4fb7ff5f5ae3b6c0066c0a1b806421137df", - "rails": { - "source_commit_exact_equality": "PASS", - "required_source_set_exact_7": "PASS", - "canonical_source_access_only": "PASS", - "schema_invalid_source_access_zero": "PASS", - "windows_crlf": { - "tracked_eol": "7/7 i/lf w/crlf", - "legacy_raw_audit": { - "exit_code": 0, - "status": "AMBIGUOUS_RAW_CHECKOUT_CONFIRMED", - "raw": 0, - "git_object": 7, - "checkout_lf": 7 - }, - "git_object": { - "exit_code": 0, - "matched": 7, - "total": 7 - }, - "checkout_lf": { - "exit_code": 0, - "matched": 7, - "total": 7, - "bare_cr": 0 - }, - "artifact_files": { - "exit_code": 0, - "matched": 5, - "total": 5 - }, - "permanent_suite": { - "exit_code": 0, - "passed": 22, - "total": 22 - } - }, - "fresh_lf": { - "tracked_eol": "7/7 i/lf w/lf", - "legacy_raw_audit": { - "exit_code": 0, - "status": "RAW_CHECKOUT_HAPPENS_TO_MATCH", - "raw": 7, - "git_object": 7, - "checkout_lf": 7 - }, - "git_object": { - "exit_code": 0, - "matched": 7, - "total": 7 - }, - "checkout_lf": { - "exit_code": 0, - "matched": 7, - "total": 7, - "bare_cr": 0 - }, - "artifact_files": { - "exit_code": 0, - "matched": 5, - "total": 5 - }, - "permanent_suite": { - "exit_code": 0, - "passed": 22, - "total": 22 - } - }, - "exact_parent_red": { - "exit_code": 1, - "passed": 18, - "failed": 4, - "total": 22 - }, - "prove_it": { - "validate_contract_schema_failed": 12, - "verify_artifact_files_failed": 9, - "post_restore_passed": 22, - "post_restore_exit_code": 0 - }, - "coverage_repeat_identical": "PASS", - "node_syntax": "PASS", - "json_parse": "PASS", - "diff_check": "PASS", - "product_source_test_delta": 0, - "temporary_worktree_residue": 0, - "maker_node_process_residue": 0, - "matching_postgresql_database_residue": 0, - "matching_postgresql_session_residue": 0 + "preserved_evidence": { + "exact_parent_red": "18 pass / 4 fail", + "green": "22/22 pass", + "prove_it": "validateContractSchema 12 failed; verifyArtifactFiles 9 failed", + "windows": "raw 0/7; Git 7/7; checkout-LF 7/7; artifacts 5/5", + "fresh_lf": "raw/Git/checkout-LF 7/7; artifacts 5/5; suite 22/22", + "product_source_test_delta": 0 + }, + "coverage": { + "status": "REMOVED_AS_NOT_REPRODUCIBLE", + "replacement": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4/coverage-repeat.v1.json" } } diff --git a/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4/R4-SHA256SUMS.txt b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4/R4-SHA256SUMS.txt new file mode 100644 index 00000000..998209ed --- /dev/null +++ b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4/R4-SHA256SUMS.txt @@ -0,0 +1,28 @@ +# manifest-version=1 +# algorithm=sha256 +# representation=canonical-lf-files +# checkout-equivalence=crlf-to-lf-with-no-bare-cr +# base=d650df5c4271cdb50aa1f443d2f95b2f4b672541 +# accepted-product-source=38d6a4fb7ff5f5ae3b6c0066c0a1b806421137df +# maker-commit=reported-out-of-band-after-commit +# self-entry=excluded-to-avoid-recursion +5d932e6acf104bf9eff291409b50961007512e09e91d78401257a018fcb780f4 .agent/reports/evidence/production-ready/db-embedding-stats/SHA256SUMS.txt +e3e9fd6250d4ead502a01ec81bb7901ad658d74845184a10b6f153276a1bd12f .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/content-manifest.v1.json +9fc641fc8f86a161c81d100fc840e50ecf4d4bc7e83b829dab2899e430c097cf .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/ARTIFACTS.sha256 +a55e59dd870659330add8f840272aa1e8829f8161779db3e9be9e6e014cf1ba4 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.cjs +1d544562cd9273a91e6ce9eba524698fbef922603f5f3d67eb7e27f1a8c8e9e4 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.test.cjs +fd16ab3f6135a3af584a8f3589e9137c6bfcb62f474093492d15020db21ee3fc .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verification-observations.v1.json +cb73530f2c204f2c7e4110928971ffaac6c3cb172b59c72cf8047cecf610ab65 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/maker-report.md +8777110d8681c895fd821664ca733d959e940353490ae9ed8bc0f0c1e27f8b3b .agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R3.red.json +4ce40777286f76e86cd48a63b38ae42e30b10de0de40cb7c9771018381f893cb .agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R3.tdd.json +70251c81fc640a595d0ba0cbe377511de54822abcaf763cc866ca1034c91e6fe .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/coverage-repeat.v1.json +a829bdb938afb219fd1e3321b1ea3a8c1960e24d0d74fa304e008e3c6fe50aad .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/verification-matrix.v1.json +091286d8afe4f4b8a9ff4b556f875113620c318ebc613c5bbc3df16194d2832c .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/maker-summary.v1.json +14739f0a3deb055cd1ee6bda8799fcb6c964f2be527cb0230dc8c429225addd9 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/maker-report.md +7ba5fa9698b6ab898df6e88d625c267cbf0262ed0b3db0aa5b190f6395028349 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/R3-SHA256SUMS.txt +0f5054c4e312b2159edd821700ebe665b8715dfdd3d3bc0ba7cc2c48c22ef7de .agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R4.red.json +08490a98a56d7843e923749bb04a6802cbd067a0a82175efa0f223ed8adbb45a .agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R4.tdd.json +d3ac6ef44dbde20d8a68d18b6bd3577170063b2117082b892689db7640052cb7 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4/coverage-repeat.v1.json +178716ab97ee5046ab4701e1749f9c1e5b4772ea9d189daa1122dfe1e481c04d .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4/verification-matrix.v1.json +2b79818f816a29f4d8c011f7d1ff824d3b13f0c77da0c1e6af28908055f48268 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4/maker-summary.v1.json +37f818d971287cb757bfeea44e9fd40f268b60fb0c9149a0772c9adac57d6daa .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4/maker-report.md diff --git a/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4/coverage-repeat.v1.json b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4/coverage-repeat.v1.json new file mode 100644 index 00000000..a514e0cb --- /dev/null +++ b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4/coverage-repeat.v1.json @@ -0,0 +1,43 @@ +{ + "schema_version": 1, + "slice": "DB-EMBEDDING-EVIDENCE-TRANSPORT-R4", + "node_version": "v24.2.0", + "command": "node.exe --test --test-concurrency=1 --experimental-test-coverage .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.test.cjs", + "covered_git_blob_oids": { + "verifier": "75bec9c41eb5abc435f13d90848074f6608f7fce", + "test_harness": "35d5015c51e78130b7293e0b09ad6494ab3a4f1a" + }, + "runs": [ + { + "run": 1, + "started_at_utc": "2026-07-10T17:06:15.9727862+00:00", + "completed_at_utc": "2026-07-10T17:06:22.1386826+00:00", + "exit_code": 0, + "tests": 24, + "passed": 24, + "failed": 0, + "aggregate": { "line_percent": 89.23, "branch_percent": 76.61, "functions_percent": 95.35 }, + "verifier": { "line_percent": 80.92, "branch_percent": 58.02, "functions_percent": 81.82 }, + "test_harness": { "line_percent": 100.0, "branch_percent": 97.44, "functions_percent": 100.0 } + }, + { + "run": 2, + "started_at_utc": "2026-07-10T17:06:38.0903377+00:00", + "completed_at_utc": "2026-07-10T17:06:44.2015599+00:00", + "exit_code": 0, + "tests": 24, + "passed": 24, + "failed": 0, + "aggregate": { "line_percent": 89.23, "branch_percent": 76.61, "functions_percent": 95.35 }, + "verifier": { "line_percent": 80.92, "branch_percent": 58.02, "functions_percent": 81.82 }, + "test_harness": { "line_percent": 100.0, "branch_percent": 97.44, "functions_percent": 100.0 } + } + ], + "reproducible": true, + "threshold": { + "percent": 80, + "basis": "aggregate line coverage", + "observed_percent": 89.23, + "status": "PASS" + } +} diff --git a/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4/maker-report.md b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4/maker-report.md new file mode 100644 index 00000000..dc09dfda --- /dev/null +++ b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4/maker-report.md @@ -0,0 +1,39 @@ +# DB-EMBEDDING-EVIDENCE-TRANSPORT R4 maker summary + +R4 starts from exact base `d650df5c4271cdb50aa1f443d2f95b2f4b672541` +and preserves the accepted product source +`38d6a4fb7ff5f5ae3b6c0066c0a1b806421137df` byte-for-byte. + +Two new permanent regressions reproduce the checker findings on the exact base: +`representation=null` escaped through a raw `TypeError` reading `kind`, and a +null entry escaped through a raw `TypeError` reading `path`. Exact-base RED was +`22 pass / 2 fail`; GREEN and post-restore are `24/24`. + +The repair is deliberately narrow. Entry-shape comparison now rejects a +non-object before dereference, and the already-validated representation is read +through a safe object. Both mutations now return stable JSON `status=FAIL`, a +specific structural error, empty entries, reported source accesses `0/0`, and +preload-observed `git cat-file` plus source-file reads `0/0`. + +Independent checker attacks remain `15/15` at the case level. Prove-It mutation +made `validateContractSchema` lose 15 tests and forced artifact PASS lost 9 +tests; restoration returned byte-identically to `24/24`. + +Node `v24.2.0` coverage was run twice against the final verifier/test blobs and +was identical on both runs: + +| Scope | Line | Branch | Functions | +| --- | ---: | ---: | ---: | +| aggregate | `89.23%` | `76.61%` | `95.35%` | +| verifier | `80.92%` | `58.02%` | `81.82%` | +| test harness | `100.00%` | `97.44%` | `100.00%` | + +The hard gate is aggregate line coverage: `89.23% >= 80%`. + +Windows materialization remains raw/Git/LF `0/7`, `7/7`, `7/7`; fresh LF is +`7/7` in all three views. Both materializations pass `git-object`, +`checkout-lf`, the `24/24` permanent suite, and the exact five-file artifact +set. Product/source/test delta and temporary worktree, Node, PostgreSQL database, +and PostgreSQL session residue are all zero. + +Status: **READY_FOR_CHECK**. The maker does not merge, push, tag, or self-accept. diff --git a/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4/maker-summary.v1.json b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4/maker-summary.v1.json new file mode 100644 index 00000000..4168c684 --- /dev/null +++ b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4/maker-summary.v1.json @@ -0,0 +1,38 @@ +{ + "schema_version": 1, + "slice": "DB-EMBEDDING-EVIDENCE-TRANSPORT-R4", + "role": "maker", + "status": "READY_FOR_CHECK", + "base": "d650df5c4271cdb50aa1f443d2f95b2f4b672541", + "branch": "work/prc-db-embedding-evidence-transport-r4", + "worktree": "D:/Dev/engram/.agent/worktrees/db-embedding-evidence-r4-maker", + "accepted_product_source": "38d6a4fb7ff5f5ae3b6c0066c0a1b806421137df", + "repairs": [ + "representation=null now emits stable structured FAIL", + "entries[n]=null now emits stable structured FAIL", + "both null cases fail before reported and actual source access", + "coverage claims refreshed from two identical Node v24.2.0 runs on final verifier and test bytes", + "unreproduced historical coverage claims removed from duplicate R3 surfaces" + ], + "tests": { + "exact_base_red": "22 pass / 2 fail", + "green": "24/24 PASS", + "independent_attacks": "15/15 cases PASS", + "prove_it_validateContractSchema": "15 failed", + "prove_it_verifyArtifactFiles": "9 failed", + "post_restore": "24/24 PASS" + }, + "coverage": { + "repeat_identical": true, + "aggregate": { "line_percent": 89.23, "branch_percent": 76.61, "functions_percent": 95.35 }, + "verifier": { "line_percent": 80.92, "branch_percent": 58.02, "functions_percent": 81.82 }, + "test_harness": { "line_percent": 100.0, "branch_percent": 97.44, "functions_percent": 100.0 }, + "threshold_basis": "aggregate line coverage", + "threshold_percent": 80, + "status": "PASS" + }, + "product_source_test_delta": 0, + "commit": null, + "commit_reason": "reported out-of-band after the single commit to avoid self-reference", + "next_action": "fresh R4 checker; no maker self-acceptance" +} diff --git a/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4/verification-matrix.v1.json b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4/verification-matrix.v1.json new file mode 100644 index 00000000..a3266a99 --- /dev/null +++ b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4/verification-matrix.v1.json @@ -0,0 +1,42 @@ +{ + "schema_version": 1, + "slice": "DB-EMBEDDING-EVIDENCE-TRANSPORT-R4", + "base": "d650df5c4271cdb50aa1f443d2f95b2f4b672541", + "accepted_product_source": "38d6a4fb7ff5f5ae3b6c0066c0a1b806421137df", + "rails": { + "exact_base_red": { "exit_code": 1, "passed": 22, "failed": 2, "total": 24 }, + "green": { "exit_code": 0, "passed": 24, "failed": 0, "total": 24 }, + "independent_attack_cases": { "passed": 15, "failed": 0, "total": 15 }, + "null_representation_structured_fail": "PASS", + "null_entry_structured_fail": "PASS", + "preload_spy_actual_source_access_zero": "PASS", + "windows_crlf": { + "tracked_eol": "7/7 i/lf w/crlf", + "legacy_raw_audit": "raw 0/7; Git 7/7; checkout-LF 7/7", + "git_object": "7/7 PASS", + "checkout_lf": "7/7 PASS; bare CR 0", + "artifact_files": "5/5 PASS", + "permanent_suite": "24/24 PASS" + }, + "fresh_lf": { + "tracked_eol": "7/7 i/lf w/lf", + "legacy_raw_audit": "raw/Git/checkout-LF 7/7", + "git_object": "7/7 PASS", + "checkout_lf": "7/7 PASS; bare CR 0", + "artifact_files": "5/5 PASS", + "permanent_suite": "24/24 PASS" + }, + "prove_it": { + "validateContractSchema": "15 failed; exit 1", + "verifyArtifactFiles": "9 failed; exit 1", + "post_restore": "24/24 PASS; verifier byte-identical" + }, + "coverage_repeat_identical": "PASS", + "aggregate_line_coverage_gate": "89.23 >= 80 PASS", + "product_source_test_delta": 0, + "temporary_worktree_residue": 0, + "maker_node_process_residue": 0, + "matching_postgresql_database_residue": 0, + "matching_postgresql_session_residue": 0 + } +} diff --git a/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/ARTIFACTS.sha256 b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/ARTIFACTS.sha256 index 0cd5c56c..f3a8f183 100644 --- a/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/ARTIFACTS.sha256 +++ b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/ARTIFACTS.sha256 @@ -5,6 +5,6 @@ # self-entry=excluded-to-avoid-recursion 5d932e6acf104bf9eff291409b50961007512e09e91d78401257a018fcb780f4 .agent/reports/evidence/production-ready/db-embedding-stats/SHA256SUMS.txt e3e9fd6250d4ead502a01ec81bb7901ad658d74845184a10b6f153276a1bd12f .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/content-manifest.v1.json -2b70221b41b570db6d4e245de7f73bba5b1c2d65af1c00d025946a2fb0af9463 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.cjs -6c392da36f0a1eb54425cfddb08d8dab9164434f1c8a294aef451c822eea419d .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verification-observations.v1.json -1de9db676a8ca4618fd44892b8a26e68fd569f5524219514458cdc9039828014 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/maker-report.md +a55e59dd870659330add8f840272aa1e8829f8161779db3e9be9e6e014cf1ba4 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.cjs +fd16ab3f6135a3af584a8f3589e9137c6bfcb62f474093492d15020db21ee3fc .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verification-observations.v1.json +cb73530f2c204f2c7e4110928971ffaac6c3cb172b59c72cf8047cecf610ab65 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/maker-report.md diff --git a/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/maker-report.md b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/maker-report.md index 493176e0..b99797bd 100644 --- a/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/maker-report.md +++ b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/maker-report.md @@ -1,4 +1,4 @@ -# DB-EMBEDDING-EVIDENCE-TRANSPORT R3 maker report +# DB-EMBEDDING-EVIDENCE-TRANSPORT R4 maker report Date: 2026-07-10 Role: revision maker @@ -6,115 +6,97 @@ Finish state: **READY_FOR_CHECK** ## Immutable boundary -- Accepted product source: `38d6a4fb7ff5f5ae3b6c0066c0a1b806421137df`. -- Rejected R2 target: `db2cf891dd9c6315fd17220ffe2d02302bea8844`. -- Independent R2 checker and exact R3 parent: - `8dac7910de52d2744fcf67f79a0a1597beebac72`. -- Branch: `work/prc-db-embedding-evidence-transport-r3`. +- Exact base and future commit parent: + `d650df5c4271cdb50aa1f443d2f95b2f4b672541`. +- Accepted product source: + `38d6a4fb7ff5f5ae3b6c0066c0a1b806421137df`. +- Branch: `work/prc-db-embedding-evidence-transport-r4`. - Worktree: - `D:/Dev/engram/.agent/worktrees/db-embedding-evidence-r3-maker`. -- Product/source/test code is byte-identical to the accepted product source. -- The R2 checker directory is inherited unchanged. This maker does not merge, - push, edit the root readiness report, or self-accept. + `D:/Dev/engram/.agent/worktrees/db-embedding-evidence-r4-maker`. +- Product/source/test blobs remain identical to the accepted source: `7/7`. +- The R3 checker commit is not an ancestor and is not included. -## Checker findings reproduced before repair +## Reproduced defects and repair -The existing `18/18` R2 suite passed first. Four permanent tests were then -added while the R2 verifier remained unchanged. The RED run was `18 pass / 4 -fail`, exit `1`: +Final test bytes over exact base reproduced `22 pass / 2 fail`, exit `1`: -1. deleting one required source and the matching legacy line false-PASSED `6/6`; -2. replacing a required source with the valid `go.mod` blob false-PASSED `7/7`; -3. rebinding both source-commit declarations to ancestor `580b0cd0...` - false-PASSED `7/7`; -4. an invalid raw path reached `git cat-file` instead of returning a structured - pre-access rejection. +1. `representation=null` escaped as raw `TypeError` while reading `kind`. +2. `entries[0]=null` escaped as raw `TypeError` while reading `path`. -The same new test bytes against exact parent verifier blob -`9f8424f1ea8ed5accac11ff6f019efdad9573cf9` reproduced `18 pass / 4 fail`. +The production change is limited to safe shape consumption after schema +validation: entry comparison requires a plain object before dereference, and +representation reads use a validated safe object. Both cases now emit stable +structured `FAIL` JSON with their exact schema error, empty entries, and no raw +exception. -## Repair +The permanent tests generate a preload observer that records real +`child_process.spawnSync` and `fs.readFileSync` calls. For both null cases: -The executable verifier now pins: +- reported Git/source-file accesses: `0/0`; +- observed `git cat-file blob`/required-source-file reads: `0/0`. -- `EXPECTED_SOURCE_COMMIT` exactly to - `38d6a4fb7ff5f5ae3b6c0066c0a1b806421137df`; -- exact cardinality `7`; -- exactly the seven accepted source paths declared in - `content-manifest.v1.json` and the legacy manifest. - -Schema validation produces canonical contained paths and absolute paths as one -validated record set. Source Git object lookup and checkout-file reads consume -only that validated set. Any schema, source-lock, metadata, or shape error -leaves the validated set empty and returns `FAIL` with -`source_accesses.git_objects=0`, `source_accesses.checkout_files=0`, and no -verified entries. Raw contract paths never reach source Git or filesystem APIs. - -## Permanent adversarial suite and TDD +## Tests, attacks, and mutation proof Command: -`node --test --test-concurrency=1 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.test.cjs` +`node.exe --test --test-concurrency=1 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.test.cjs` -- GREEN and post-restore: `22/22`, exit `0`. -- Exact-parent RED: `18 pass / 4 fail`, exit `1`. -- `validateContractSchema` sentinel: `10 pass / 12 fail`, exit `1`. -- `verifyArtifactFiles` sentinel: `13 pass / 9 fail`, exit `1`. -- Both sentinels restored byte-identically; post-restore `22/22`. +- GREEN and post-restore: `24/24`, exit `0`. +- Exact-base RED: `22 pass / 2 fail`, exit `1`. +- Independent checker attack cases: `15/15` pass. +- `validateContractSchema` fail-open sentinel: `9 pass / 15 fail`, exit `1`. +- forced artifact-PASS sentinel: `15 pass / 9 fail`, exit `1`. +- verifier restored to SHA-256 + `525a9cd937e26fb7f38b8b51792f3af0e95eafdbdb2670fa7aee7a15fa914673`; + post-restore suite `24/24`. -Two fresh Node `v24.2.0` coverage runs were identical: +## Reproducible coverage on final verifier/test content + +Both Node `v24.2.0` runs were identical: | Scope | Line | Branch | Functions | | --- | ---: | ---: | ---: | -| aggregate | `87.27%` | `71.75%` | `94.87%` | -| verifier | `79.55%` | `51.59%` | `81.82%` | -| test harness | `100.00%` | `97.94%` | `100.00%` | +| aggregate | `89.23%` | `76.61%` | `95.35%` | +| verifier | `80.92%` | `58.02%` | `81.82%` | +| test harness | `100.00%` | `97.44%` | `100.00%` | -The `80%` TDD threshold is explicitly evaluated against aggregate line -coverage. No verifier-only or aggregate metric is relabeled as another scope. +The hard threshold is aggregate line coverage: `89.23% >= 80%`, PASS. The +unreproduced historical coverage values were removed from every duplicate R3 +claim surface rather than retained as current evidence. ## Representation rails -In the normal Windows checkout, all seven source records are `i/lf w/crlf`: +Windows `core.autocrlf=true`, all seven source files `i/lf w/crlf`: | Mode | Exit | Status | Result | | --- | ---: | --- | --- | | `legacy-raw-audit` | 0 | `AMBIGUOUS_RAW_CHECKOUT_CONFIRMED` | raw `0/7`, Git `7/7`, LF `7/7` | -| `git-object` | 0 | `PASS` | `7/7`, source accesses `7/7`, errors `0` | -| `checkout-lf` | 0 | `PASS` | `7/7`, bare CR `0`, errors `0` | -| `artifact-files` | 0 | `PASS` | exact required artifacts `5/5` | +| `git-object` | 0 | `PASS` | `7/7` | +| `checkout-lf` | 0 | `PASS` | `7/7`, bare CR `0` | +| `artifact-files` | 0 | `PASS` | exact artifacts `5/5` | +| permanent suite | 0 | `PASS` | `24/24` | -In a fresh `core.autocrlf=false` materialization, all seven records are -`i/lf w/lf`: +Fresh `core.autocrlf=false`, all seven source files `i/lf w/lf`: | Mode | Exit | Status | Result | | --- | ---: | --- | --- | | `legacy-raw-audit` | 0 | `RAW_CHECKOUT_HAPPENS_TO_MATCH` | raw/Git/LF `7/7` | -| `git-object` | 0 | `PASS` | `7/7`, errors `0` | +| `git-object` | 0 | `PASS` | `7/7` | | `checkout-lf` | 0 | `PASS` | `7/7`, bare CR `0` | -| `artifact-files` | 0 | `PASS` | exact required artifacts `5/5` | -| permanent suite | 0 | `PASS` | `22/22` | - -All temporary RED, Prove-It, and LF worktrees were restored/clean before -removal; their paths and Git registrations were removed. - -## Integrity and product preservation - -- The legacy source manifest remains seven Git-blob records from the accepted - source commit. -- The artifact manifest remains an exact five-path canonical-LF set and - explicitly excludes itself to avoid recursion. -- `internal/embedding/store.go` remains blob - `1abaee96b07583f9fd824ed03c40b043c490b567`. -- `internal/embedding/store_stats_test.go` remains blob - `d381643deadbb42e8a9a07fc9375a6cdfedbdccc`. -- Node syntax checks, JSON parsing, checksum/self-reference checks, diff checks, - and process/worktree/DB/session residue checks pass. - -The compact R3 packet is under -`.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/`. -The final commit, tree, and packet hashes are reported out-of-band after the -single evidence-only commit to avoid self-reference. - -Finish state: **READY_FOR_CHECK**. A fresh independent checker must replay all -four repaired false-PASS classes and both EOL materializations. +| `artifact-files` | 0 | `PASS` | exact artifacts `5/5` | +| permanent suite | 0 | `PASS` | `24/24` | + +## Integrity and handoff + +- Artifact checksum set remains exactly five files and excludes itself. +- Compact R4 packet checksum excludes itself and covers the source manifest, + executable verifier/test, R4 TDD evidence, reports, and artifact manifest. +- Temporary RED, Prove-It, and LF worktrees are removed. +- Maker Node, matching PostgreSQL database, and matching PostgreSQL session + residue are zero. +- No merge, push, tag, release, root-report edit, or self-acceptance occurred. + +The final commit/tree/checksum identifiers are reported out-of-band after the +single commit to avoid self-reference. A fresh R4 checker must replay the null +attacks, exact-base RED, coverage, representation rails, artifact checksums, +and residue checks. diff --git a/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verification-observations.v1.json b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verification-observations.v1.json index 63bab584..b3e277d5 100644 --- a/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verification-observations.v1.json +++ b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verification-observations.v1.json @@ -1,65 +1,51 @@ { "schema_version": 1, - "slice": "DB-EMBEDDING-EVIDENCE-TRANSPORT-R3", + "slice": "DB-EMBEDDING-EVIDENCE-TRANSPORT-R4", "role": "revision-maker", + "base_commit": "d650df5c4271cdb50aa1f443d2f95b2f4b672541", "product_source_commit": "38d6a4fb7ff5f5ae3b6c0066c0a1b806421137df", - "rejected_r2_commit": "db2cf891dd9c6315fd17220ffe2d02302bea8844", - "parent_checker_commit": "8dac7910de52d2744fcf67f79a0a1597beebac72", "raw_checkout_bytes_are_not_the_contract": true, "source_lock": { "expected_source_commit": "38d6a4fb7ff5f5ae3b6c0066c0a1b806421137df", "required_cardinality": 7, "exact_required_set": true, - "validated_canonical_paths_only": true, - "schema_invalid_source_accesses": { - "git_objects": 0, - "checkout_files": 0 - } + "product_source_blobs_match": 7, + "product_source_test_delta": 0 }, - "required_artifact_paths": [ - ".agent/reports/evidence/production-ready/db-embedding-stats/SHA256SUMS.txt", - ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/content-manifest.v1.json", - ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.cjs", - ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verification-observations.v1.json", - ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/maker-report.md" - ], - "tdd": { - "baseline": { - "exit_code": 0, - "tests": 18, - "passed": 18, - "failed": 0 - }, - "red": { + "fail_closed_null_contracts": [ + { + "mutation": "representation=null", "exit_code": 1, - "tests": 22, - "passed": 18, - "failed": 4 - }, - "green": { - "exit_code": 0, - "tests": 22, - "passed": 22, - "failed": 0 + "status": "FAIL", + "stable_error": "contract.representation must be an object", + "reported_source_accesses": { "git_objects": 0, "checkout_files": 0 }, + "preload_observed_source_accesses": { "git_cat_file": 0, "source_files": 0 }, + "entries": 0, + "stderr": "" }, + { + "mutation": "entries[0]=null", + "exit_code": 1, + "status": "FAIL", + "stable_error": "contract.entries[0] must be an object", + "reported_source_accesses": { "git_objects": 0, "checkout_files": 0 }, + "preload_observed_source_accesses": { "git_cat_file": 0, "source_files": 0 }, + "entries": 0, + "stderr": "" + } + ], + "tdd": { + "exact_base_red": { "exit_code": 1, "tests": 24, "passed": 22, "failed": 2 }, + "green": { "exit_code": 0, "tests": 24, "passed": 24, "failed": 0 }, + "independent_attack_cases": { "passed": 15, "failed": 0, "total": 15 }, "prove_it": [ - { - "sentinel_function": "validateContractSchema", - "exit_code": 1, - "passed_tests": 10, - "failed_tests": 12 - }, - { - "sentinel_function": "verifyArtifactFiles", - "exit_code": 1, - "passed_tests": 13, - "failed_tests": 9 - } + { "sentinel_function": "validateContractSchema", "exit_code": 1, "passed_tests": 9, "failed_tests": 15 }, + { "sentinel_function": "verifyArtifactFiles", "exit_code": 1, "passed_tests": 15, "failed_tests": 9 } ], "post_restore": { "exit_code": 0, - "tests": 22, - "passed": 22, + "tests": 24, + "passed": 24, "failed": 0, "verifier_byte_identical": true }, @@ -67,140 +53,39 @@ "node_version": "v24.2.0", "repeat_count": 2, "reproducible": true, - "aggregate": { - "line_percent": 87.27, - "branch_percent": 71.75, - "functions_percent": 94.87 - }, - "verifier": { - "line_percent": 79.55, - "branch_percent": 51.59, - "functions_percent": 81.82 - }, - "test_harness": { - "line_percent": 100.0, - "branch_percent": 97.94, - "functions_percent": 100.0 - }, + "aggregate": { "line_percent": 89.23, "branch_percent": 76.61, "functions_percent": 95.35 }, + "verifier": { "line_percent": 80.92, "branch_percent": 58.02, "functions_percent": 81.82 }, + "test_harness": { "line_percent": 100.0, "branch_percent": 97.44, "functions_percent": 100.0 }, "threshold_basis": "aggregate line coverage", "threshold_percent": 80, - "status": "PASS", - "exit_code": 0 + "status": "PASS" } }, "observations": [ { "checkout": "windows-autocrlf-true", - "tracked_eol_counts": { - "crlf": 7 - }, - "mode": "legacy-raw-audit", - "exit_code": 0, - "status": "AMBIGUOUS_RAW_CHECKOUT_CONFIRMED", - "total": 7, - "raw_checkout_matches": 0, - "git_object_matches": 7, - "checkout_lf_matches": 7, - "source_git_accesses": 7, - "source_checkout_accesses": 7, - "structural_errors": 0 - }, - { - "checkout": "windows-autocrlf-true", - "mode": "git-object", - "exit_code": 0, - "status": "PASS", - "matched": 7, - "total": 7, - "structural_errors": 0 - }, - { - "checkout": "windows-autocrlf-true", - "mode": "checkout-lf", - "exit_code": 0, - "status": "PASS", - "matched": 7, - "total": 7, - "bare_carriage_returns": 0, - "structural_errors": 0 - }, - { - "checkout": "windows-autocrlf-true", - "mode": "artifact-files", - "exit_code": 0, - "status": "PASS", - "matched": 5, - "total": 5, - "structural_errors": 0 - }, - { - "checkout": "lf-materialized", - "tracked_eol_counts": { - "lf": 7 - }, - "mode": "legacy-raw-audit", - "exit_code": 0, - "status": "RAW_CHECKOUT_HAPPENS_TO_MATCH", - "total": 7, - "raw_checkout_matches": 7, - "git_object_matches": 7, - "checkout_lf_matches": 7, - "structural_errors": 0 - }, - { - "checkout": "lf-materialized", - "mode": "git-object", - "exit_code": 0, - "status": "PASS", - "matched": 7, - "total": 7, - "structural_errors": 0 + "tracked_eol": "7/7 i/lf w/crlf", + "legacy_raw_audit": { "exit_code": 0, "status": "AMBIGUOUS_RAW_CHECKOUT_CONFIRMED", "raw": 0, "git_object": 7, "checkout_lf": 7 }, + "git_object": { "exit_code": 0, "matched": 7, "total": 7 }, + "checkout_lf": { "exit_code": 0, "matched": 7, "total": 7, "bare_carriage_returns": 0 }, + "artifact_files": { "exit_code": 0, "matched": 5, "total": 5 }, + "permanent_suite": { "exit_code": 0, "passed": 24, "total": 24 } }, { "checkout": "lf-materialized", - "mode": "checkout-lf", - "exit_code": 0, - "status": "PASS", - "matched": 7, - "total": 7, - "bare_carriage_returns": 0, - "structural_errors": 0 - }, - { - "checkout": "lf-materialized", - "mode": "artifact-files", - "exit_code": 0, - "status": "PASS", - "matched": 5, - "total": 5, - "structural_errors": 0 - }, - { - "checkout": "lf-materialized", - "mode": "permanent-adversarial-self-test", - "exit_code": 0, - "status": "PASS", - "matched": 22, - "total": 22 + "tracked_eol": "7/7 i/lf w/lf", + "legacy_raw_audit": { "exit_code": 0, "status": "RAW_CHECKOUT_HAPPENS_TO_MATCH", "raw": 7, "git_object": 7, "checkout_lf": 7 }, + "git_object": { "exit_code": 0, "matched": 7, "total": 7 }, + "checkout_lf": { "exit_code": 0, "matched": 7, "total": 7, "bare_carriage_returns": 0 }, + "artifact_files": { "exit_code": 0, "matched": 5, "total": 5 }, + "permanent_suite": { "exit_code": 0, "passed": 24, "total": 24 } } ], - "temporary_worktree_cleanup": { - "red": { - "clean_before_remove": true, - "path_removed": true, - "registration_removed": true - }, - "prove_it": { - "clean_before_remove": true, - "path_removed": true, - "registration_removed": true - }, - "lf": { - "clean_before_remove": true, - "path_removed": true, - "registration_removed": true - } + "residue": { + "temporary_worktrees": 0, + "maker_node_processes": 0, + "matching_postgresql_databases": 0, + "matching_postgresql_sessions": 0 }, - "product_source_test_delta": 0, "finish_state": "READY_FOR_CHECK" } diff --git a/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.cjs b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.cjs index 93d8fe88..75bec9c4 100644 --- a/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.cjs +++ b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.cjs @@ -182,6 +182,7 @@ function parseAnnotatedManifest(manifestPath) { function compareEntryShape(contractEntries, manifestEntries) { if (contractEntries.length !== manifestEntries.length) return false; return contractEntries.every((entry, index) => + isPlainObject(entry) && entry.path === manifestEntries[index].path && entry.sha256 === manifestEntries[index].sha256, ); @@ -544,6 +545,9 @@ function main() { const contract = JSON.parse(fs.readFileSync(contractPath, 'utf8')); const contractValidation = validateContractSchema(contract, repoRoot); const structuralErrors = [...contractValidation.structural_errors]; + const contractRepresentation = isPlainObject(contract.representation) + ? contract.representation + : {}; const legacyManifestPath = path.join(repoRoot, ...LEGACY_MANIFEST_PATH.split('/')); const manifest = parseAnnotatedManifest(legacyManifestPath); @@ -559,10 +563,10 @@ function main() { if (manifest.metadata.algorithm !== contract.algorithm) { structuralErrors.push('legacy manifest algorithm annotation disagrees with contract'); } - if (manifest.metadata.representation !== contract.representation.kind) { + if (manifest.metadata.representation !== contractRepresentation.kind) { structuralErrors.push('legacy manifest representation annotation disagrees with contract'); } - if (manifest.metadata['source-commit'] !== contract.representation.source_commit) { + if (manifest.metadata['source-commit'] !== contractRepresentation.source_commit) { structuralErrors.push('legacy manifest source-commit annotation disagrees with contract'); } if (manifest.metadata.contract !== path.relative(repoRoot, contractPath).split(path.sep).join('/')) { @@ -579,7 +583,7 @@ function main() { structuralErrors.push('legacy manifest entries disagree with contract entries or order'); } - const sourceCommit = contract.representation?.source_commit || ''; + const sourceCommit = contractRepresentation.source_commit || ''; let sourceCommitIsAncestor = false; if (sourceCommit === EXPECTED_SOURCE_COMMIT && structuralErrors.length === 0) { sourceCommitIsAncestor = isAncestor(repoRoot, sourceCommit, 'HEAD'); @@ -678,7 +682,7 @@ function main() { source_commit: sourceCommit, source_commit_is_ancestor: sourceCommitIsAncestor, algorithm: contract.algorithm, - representation: contract.representation.kind, + representation: contractRepresentation.kind ?? null, total, matched, source_accesses: sourceAccesses, diff --git a/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.test.cjs b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.test.cjs index 23e3a391..35d5015c 100644 --- a/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.test.cjs +++ b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.test.cjs @@ -8,6 +8,7 @@ const assert = require('node:assert/strict'); const crypto = require('node:crypto'); const fs = require('node:fs'); +const os = require('node:os'); const path = require('node:path'); const { spawnSync } = require('node:child_process'); const { after, test } = require('node:test'); @@ -44,6 +45,47 @@ const legacyManifestPath = path.join( 'db-embedding-stats', 'SHA256SUMS.txt', ); +const sourceAbsolutePaths = new Set( + REQUIRED_SOURCE_PATHS.map((entryPath) => path.resolve(repoRoot, ...entryPath.split('/'))), +); +const accessSpyDirectory = fs.mkdtempSync( + path.join(os.tmpdir(), 'engram-embedding-evidence-access-spy-'), +); +const accessSpyPath = path.join(accessSpyDirectory, 'access-spy.cjs'); +fs.writeFileSync( + accessSpyPath, + `'use strict'; + +const fs = require('node:fs'); +const childProcess = require('node:child_process'); + +const logPath = process.env.EMBEDDING_EVIDENCE_ACCESS_LOG; +const originalReadFileSync = fs.readFileSync; +const originalSpawnSync = childProcess.spawnSync; + +function append(record) { + if (logPath) fs.appendFileSync(logPath, \`${'${JSON.stringify(record)}'}\\n\`, 'utf8'); +} + +fs.readFileSync = function observedReadFileSync(filePath, ...args) { + append({ + kind: 'fs.readFileSync', + path: Buffer.isBuffer(filePath) ? filePath.toString('utf8') : String(filePath), + }); + return originalReadFileSync.call(this, filePath, ...args); +}; + +childProcess.spawnSync = function observedSpawnSync(command, args, options) { + append({ + kind: 'child_process.spawnSync', + command: String(command), + args: Array.isArray(args) ? args.map(String) : [], + }); + return originalSpawnSync.call(this, command, args, options); +}; +`, + 'utf8', +); const originalBytes = new Map([ [artifactManifestPath, fs.readFileSync(artifactManifestPath)], @@ -55,6 +97,7 @@ function restoreOriginals() { for (const [filePath, bytes] of originalBytes) { fs.writeFileSync(filePath, bytes); } + fs.rmSync(accessSpyDirectory, { recursive: true, force: true }); } after(restoreOriginals); @@ -82,20 +125,55 @@ function withReplacements(replacements, verify) { } } -function runVerifier(mode) { +let accessSpyRun = 0; + +function parseAccessLog(logPath) { + if (!logPath || !fs.existsSync(logPath)) return []; + return fs.readFileSync(logPath, 'utf8') + .split(/\r?\n/) + .filter(Boolean) + .map((line) => JSON.parse(line)); +} + +function runVerifier(mode, options = {}) { + let accessLogPath = null; + const env = { ...process.env }; + if (options.preloadSpy) { + accessSpyRun += 1; + accessLogPath = path.join(accessSpyDirectory, `access-${accessSpyRun}.jsonl`); + env.EMBEDDING_EVIDENCE_ACCESS_LOG = accessLogPath; + env.NODE_OPTIONS = [process.env.NODE_OPTIONS, `--require=${accessSpyPath}`] + .filter(Boolean) + .join(' '); + } const result = spawnSync(process.execPath, [verifierPath, `--mode=${mode}`], { cwd: repoRoot, encoding: 'utf8', + env, windowsHide: true, }); let output = null; if (result.stdout.trim()) { output = JSON.parse(result.stdout); } + const accessLog = parseAccessLog(accessLogPath); + const actualSourceAccesses = { + git_cat_file: accessLog.filter((record) => + record.kind === 'child_process.spawnSync' && + path.basename(record.command).toLowerCase().startsWith('git') && + record.args[0] === 'cat-file' && + record.args[1] === 'blob', + ), + source_files: accessLog.filter((record) => + record.kind === 'fs.readFileSync' && + sourceAbsolutePaths.has(path.resolve(record.path)), + ), + }; return { exit_code: result.status, output, stderr: result.stderr.trim(), + actual_source_accesses: actualSourceAccesses, }; } @@ -119,6 +197,20 @@ function expectFailClosedBeforeSourceAccess(result) { assert.deepEqual(result.output?.entries, [], 'schema-invalid source paths must not be verified'); } +function expectStableFailClosedBeforeActualSourceAccess(result, expectedStructuralError) { + expectFailClosedBeforeSourceAccess(result); + assert.equal(result.stderr, '', 'schema rejection must not escape as a raw runtime exception'); + assert.ok( + result.output.structural_errors.includes(expectedStructuralError), + `missing stable structural error: ${expectedStructuralError}`, + ); + assert.deepEqual( + result.actual_source_accesses, + { git_cat_file: [], source_files: [] }, + 'preload spy observed source access before schema rejection', + ); +} + function mutateArtifactManifest(mutator) { return (bytes) => { const text = bytes.toString('utf8'); @@ -431,3 +523,32 @@ test('contract rejects an invalid raw source path before source access', () => { ); expectFailClosedBeforeSourceAccess(result); }); + +test('contract rejects null representation with structured FAIL before actual source access', () => { + const result = withMutation( + contractPath, + mutateContract((contract) => { + contract.representation = null; + }), + () => runVerifier('git-object', { preloadSpy: true }), + ); + expectStableFailClosedBeforeActualSourceAccess( + result, + 'contract.representation must be an object', + ); + assert.equal(result.output.representation, null); +}); + +test('contract rejects a null entry with structured FAIL before actual source access', () => { + const result = withMutation( + contractPath, + mutateContract((contract) => { + contract.entries[0] = null; + }), + () => runVerifier('git-object', { preloadSpy: true }), + ); + expectStableFailClosedBeforeActualSourceAccess( + result, + 'contract.entries[0] must be an object', + ); +}); diff --git a/.agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R3.tdd.json b/.agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R3.tdd.json index 1da3eacf..2a6c8edc 100644 --- a/.agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R3.tdd.json +++ b/.agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R3.tdd.json @@ -1,86 +1,25 @@ { "task_id": "DB-EMBEDDING-EVIDENCE-TRANSPORT-R3", "stack": "GO repository with Node.js evidence verifier", + "status": "SUPERSEDED_BY_R4", "red": { - "observed_at": "2026-07-10T14:57:31.2279610Z", - "test_file": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.test.cjs", - "test_name": "R2 checker false-PASS regressions fail closed before source access", - "baseline_passed_tests": 18, "passed_tests": 18, "failed_tests": 4, - "exit_code": 1, - "runner_stdout_excerpt": "tests 22; pass 18; fail 4; three verifier false PASS results plus one raw-path source-access violation" + "exit_code": 1 }, "green": { - "observed_at": "2026-07-10T15:13:31.3066559Z", "passed_tests": 22, "failed_tests": 0, - "skipped_tests": 0, - "regressed_tests": 0, - "exit_code": 0, - "runner_stdout_excerpt": "tests 22; pass 22; fail 0; captured_exit=0" - }, - "refactor": { - "applied": false, - "reason": "The GREEN implementation is a bounded source-lock allowlist and one pre-access gate; no behavior-preserving extraction was needed." + "exit_code": 0 }, "prove_it": { - "substituted_files": [ - ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.cjs" - ], - "substituted_functions": [ - "validateContractSchema", - "verifyArtifactFiles" - ], - "runs": [ - { - "sentinel_function": "validateContractSchema", - "exit_code": 1, - "passed_tests": 10, - "failed_tests": 12 - }, - { - "sentinel_function": "verifyArtifactFiles", - "exit_code": 1, - "passed_tests": 13, - "failed_tests": 9 - } - ], - "failed_tests": 21, + "validateContractSchema_failed_tests": 12, + "verifyArtifactFiles_failed_tests": 9, "post_restore_passed_tests": 22, - "post_restore_failed_tests": 0, - "post_restore_exit_code": 0, "restored_byte_identical": true }, "coverage": { - "runner": "node --test --test-concurrency=1 --experimental-test-coverage", - "repeat_count": 2, - "reproducible": true, - "aggregate": { - "line_percent": 87.27, - "branch_percent": 71.75, - "functions_percent": 94.87 - }, - "verifier": { - "line_percent": 79.55, - "branch_percent": 51.59, - "functions_percent": 81.82 - }, - "test_harness": { - "line_percent": 100.0, - "branch_percent": 97.94, - "functions_percent": 100.0 - }, - "threshold_basis": "aggregate line coverage", - "threshold": 80, - "status": "PASS", - "exit_code": 0 - }, - "behavioral_signal": { - "name": "release-evidence-false-pass-rate", - "measurement_window": "each verifier self-test run", - "target": "0 false PASS results across 22 permanent mutation cases", - "measurement_method": "Node built-in test runner executes verifier subprocesses against byte-restored contract and manifest mutations", - "evidence_source": "independent checker findings ETR2-C001, ETR2-C002, and ETR2-C003" + "status": "REMOVED_AS_NOT_REPRODUCIBLE", + "replacement": ".agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R4.tdd.json" } } diff --git a/.agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R4.red.json b/.agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R4.red.json new file mode 100644 index 00000000..f085568d --- /dev/null +++ b/.agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R4.red.json @@ -0,0 +1,44 @@ +{ + "schema_version": 1, + "slice": "DB-EMBEDDING-EVIDENCE-TRANSPORT-R4", + "phase": "RED", + "observed_at_utc": "2026-07-10T16:40:11.4799120+00:00", + "base_commit": "d650df5c4271cdb50aa1f443d2f95b2f4b672541", + "node_version": "v24.2.0", + "command": "node.exe --test --test-concurrency=1 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.test.cjs", + "exit_code": 1, + "tests": { + "total": 24, + "passed": 22, + "failed": 2 + }, + "failing_tests": [ + { + "name": "contract rejects null representation with structured FAIL before actual source access", + "observed_failure": "verifier emitted no FAIL JSON and escaped through TypeError: Cannot read properties of null (reading 'kind') at verify-manifest.cjs:562" + }, + { + "name": "contract rejects a null entry with structured FAIL before actual source access", + "observed_failure": "verifier emitted no FAIL JSON and escaped through TypeError: Cannot read properties of null (reading 'path') at verify-manifest.cjs:185" + } + ], + "preload_spy_contract": { + "instrumented_actual_accesses": [ + "child_process.spawnSync git cat-file blob", + "fs.readFileSync for every required source path" + ], + "green_requirement": "both mutations must emit stable structured FAIL with reported and observed source accesses equal to zero" + }, + "exact_base_replay": { + "observed_at_utc": "2026-07-10T16:42:42.2695231+00:00", + "base_commit": "d650df5c4271cdb50aa1f443d2f95b2f4b672541", + "final_test_bytes_overlaid": true, + "exit_code": 1, + "tests": { + "total": 24, + "passed": 22, + "failed": 2 + }, + "same_failures": true + } +} diff --git a/.agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R4.tdd.json b/.agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R4.tdd.json new file mode 100644 index 00000000..62a82c4c --- /dev/null +++ b/.agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R4.tdd.json @@ -0,0 +1,91 @@ +{ + "task_id": "DB-EMBEDDING-EVIDENCE-TRANSPORT-R4", + "stack": "GO repository with Node.js evidence verifier", + "base_commit": "d650df5c4271cdb50aa1f443d2f95b2f4b672541", + "node_version": "v24.2.0", + "red": { + "observed_at_utc": "2026-07-10T16:40:11.4799120+00:00", + "passed_tests": 22, + "failed_tests": 2, + "exit_code": 1, + "failures": [ + "representation=null escaped as a raw TypeError reading kind", + "entries[0]=null escaped as a raw TypeError reading path" + ] + }, + "exact_base_red": { + "observed_at_utc": "2026-07-10T16:42:42.2695231+00:00", + "base_commit": "d650df5c4271cdb50aa1f443d2f95b2f4b672541", + "final_test_bytes_overlaid": true, + "passed_tests": 22, + "failed_tests": 2, + "exit_code": 1 + }, + "green": { + "observed_at_utc": "2026-07-10T16:41:31.7931552+00:00", + "passed_tests": 24, + "failed_tests": 0, + "exit_code": 0, + "preload_spy": { + "null_representation_git_cat_file_reads": 0, + "null_representation_source_file_reads": 0, + "null_entry_git_cat_file_reads": 0, + "null_entry_source_file_reads": 0 + } + }, + "prove_it": { + "validateContractSchema": { + "observed_at_utc": "2026-07-10T16:45:55.4146451+00:00", + "sentinel": "discard structural errors and release validated subsets", + "passed_tests": 9, + "failed_tests": 15, + "exit_code": 1 + }, + "verifyArtifactFiles": { + "observed_at_utc": "2026-07-10T16:48:49.6474087+00:00", + "sentinel": "force artifact status PASS", + "passed_tests": 15, + "failed_tests": 9, + "exit_code": 1 + }, + "post_restore": { + "observed_at_utc": "2026-07-10T16:49:23.1957280+00:00", + "passed_tests": 24, + "failed_tests": 0, + "exit_code": 0, + "verifier_sha256_before_and_after": "525a9cd937e26fb7f38b8b51792f3af0e95eafdbdb2670fa7aee7a15fa914673" + } + }, + "coverage": { + "command": "node.exe --test --test-concurrency=1 --experimental-test-coverage .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.test.cjs", + "repeat_count": 2, + "reproducible": true, + "covered_git_blob_oids": { + "verifier": "75bec9c41eb5abc435f13d90848074f6608f7fce", + "test_harness": "35d5015c51e78130b7293e0b09ad6494ab3a4f1a" + }, + "aggregate": { + "line_percent": 89.23, + "branch_percent": 76.61, + "functions_percent": 95.35 + }, + "verifier": { + "line_percent": 80.92, + "branch_percent": 58.02, + "functions_percent": 81.82 + }, + "test_harness": { + "line_percent": 100.0, + "branch_percent": 97.44, + "functions_percent": 100.0 + }, + "threshold_basis": "aggregate line coverage", + "threshold_percent": 80, + "status": "PASS" + }, + "behavioral_signal": { + "name": "release-evidence-false-pass-rate", + "target": "0 false PASS results across 24 permanent mutation cases", + "measurement_method": "Node test runner plus preload observation of actual Git cat-file and source-file reads" + } +} From 9e2ce4e58a5cded69660ca9ac532d2167f315bb2 Mon Sep 17 00:00:00 2001 From: Kirill Turanskiy Date: Fri, 10 Jul 2026 20:25:00 +0300 Subject: [PATCH 037/111] fix(security): harden project identity fail-closed edges --- .../SECURITY-PROJECT-IDENTITY-R2.red.json | 58 ++++++++++++ .../SECURITY-PROJECT-IDENTITY-R2.tdd.json | 34 +++++++ ...RITY-PROJECT-IDENTITY-R2.verification.json | 50 ++++++++++ .../evidence/project-identity-v2-vectors.json | 90 ++++++++++++++++++ internal/db/gorm/project_identity_v2_test.go | 78 ++++++++++++++++ internal/db/gorm/project_store.go | 68 +++++++++++--- internal/proxy/identity.go | 27 ++++-- internal/proxy/identity_test.go | 26 ++++++ internal/worker/handlers_context.go | 22 ++++- ...ndlers_context_project_identity_v2_test.go | 91 +++++++++++++++++++ plugin/engram/hooks/lib.js | 72 ++++++++++++--- .../engram/hooks/project-identity-v2.test.js | 88 ++++++++++++++++++ plugin/openclaw-engram/src/client.ts | 31 +++++-- plugin/openclaw-engram/src/identity.ts | 30 +++++- .../test/project-identity-transport.test.mjs | 89 ++++++++++++++++++ .../test/project-identity-v2.test.mjs | 15 +++ 16 files changed, 817 insertions(+), 52 deletions(-) create mode 100644 .agent/specs/security-project-identity/evidence/SECURITY-PROJECT-IDENTITY-R2.red.json create mode 100644 .agent/specs/security-project-identity/evidence/SECURITY-PROJECT-IDENTITY-R2.tdd.json create mode 100644 .agent/specs/security-project-identity/evidence/SECURITY-PROJECT-IDENTITY-R2.verification.json diff --git a/.agent/specs/security-project-identity/evidence/SECURITY-PROJECT-IDENTITY-R2.red.json b/.agent/specs/security-project-identity/evidence/SECURITY-PROJECT-IDENTITY-R2.red.json new file mode 100644 index 00000000..f8031073 --- /dev/null +++ b/.agent/specs/security-project-identity/evidence/SECURITY-PROJECT-IDENTITY-R2.red.json @@ -0,0 +1,58 @@ +{ + "task_id": "SECURITY-PROJECT-IDENTITY-R2", + "change_request": "SECURITY-PROJECT-IDENTITY", + "phase": "RED", + "observed_at": "2026-07-10T16:57:23.6354439Z", + "base_commit": "d22ebb9fe1914f514eaf9250e092dcd3b396f9cc", + "infrastructure": { + "go": "go1.25.11; go test -list passed", + "node": "v24.2.0; node:test invocable", + "typescript": "typescript 5.9.3 installed; tsc build passed", + "postgresql": "17.10 on isolated database engram_prc_identity_r2_maker_d22" + }, + "red_cases": [ + { + "finding": "C1", + "test": "TestRegisterAndResolve_LegacyOnlySoftDeletedCanonicalFailsWithoutMutation", + "result": "FAIL", + "failure_reason": "legacy-only registration returned nil error for a soft-deleted canonical collision" + }, + { + "finding": "C2", + "test": "TestContextInject_RejectsRawSelectorAndMetadataBeforeProjectMutation", + "result": "FAIL 3/3 subtests", + "failure_reason": "invalid outer selector persisted one row; invalid display and relative metadata returned HTTP 200" + }, + { + "finding": "C3", + "test": "shared invalid vectors and wrong-type anchor sharing are rejected exactly", + "result": "FAIL", + "failure_reason": "Claude accepted display whitespace and Boolean-coerced wrong-type anchor_shared" + }, + { + "finding": "C4", + "test": "registration fails closed on malformed canonical responses without raw fallback / 2xx malformed canonical response is not cached", + "result": "FAIL in Claude and OpenClaw", + "failure_reason": "missing canonical_project returned raw-selector success and OpenClaw cached it" + }, + { + "finding": "C5", + "test": "shared invalid metadata vectors across store, proxy, Claude, and OpenClaw", + "result": "FAIL", + "failure_reason": "display whitespace and noncanonical relative path forms reached storage or passed validation; OpenClaw trimmed invalid selectors" + }, + { + "finding": "SELF-REVIEW-COMPAT-1", + "test": "TestContextInject_LegacyAliasWithInternalWhitespaceRemainsCompatible", + "result": "FAIL", + "failure_reason": "legacy alias with internal whitespace was rejected by the stricter canonical-selector validator" + }, + { + "finding": "SELF-REVIEW-COMPAT-2", + "test": "Claude and OpenClaw preserve legacy selector characters accepted by the HTTP boundary", + "result": "FAIL in both consumers", + "failure_reason": "the first selector allow-list rejected colon and backslash even though the established HTTP boundary accepts them" + } + ], + "red_gate_conclusion": "Runners were healthy; C1-C5 and both self-review compatibility regressions failed for the intended behavioral reasons before their fixes." +} diff --git a/.agent/specs/security-project-identity/evidence/SECURITY-PROJECT-IDENTITY-R2.tdd.json b/.agent/specs/security-project-identity/evidence/SECURITY-PROJECT-IDENTITY-R2.tdd.json new file mode 100644 index 00000000..61bf4a8b --- /dev/null +++ b/.agent/specs/security-project-identity/evidence/SECURITY-PROJECT-IDENTITY-R2.tdd.json @@ -0,0 +1,34 @@ +{ + "task_id": "SECURITY-PROJECT-IDENTITY-R2", + "stack": "GO+JAVASCRIPT+TYPESCRIPT", + "base_commit": "d22ebb9fe1914f514eaf9250e092dcd3b396f9cc", + "red": { + "observed_at": "2026-07-10T16:57:23.6354439Z", + "evidence_file": "SECURITY-PROJECT-IDENTITY-R2.red.json", + "findings": ["C1", "C2", "C3", "C4", "C5"] + }, + "green": { + "observed_at": "2026-07-10T17:23:50.0260245Z", + "passed_tests": 26, + "regressed_tests": 0, + "runner_stdout_excerpt": "focused Go identity packages PASS; Claude project identity 9/9; OpenClaw identity focused 12/12" + }, + "refactor": { + "applied": false, + "reason": "GREEN implementation is already localized to existing validation and registration seams" + }, + "prove_it": { + "observed_at": "2026-07-10T17:31:35.9604105Z", + "mutations": [ + "Go selector/metadata/alias/soft-delete/HTTP/proxy barriers bypassed: focused suites failed in all affected layers", + "Claude type/selector/relative-path/canonical-response barriers bypassed: 4 of 9 project-identity tests failed", + "OpenClaw type/selector/relative-path/canonical-response barriers bypassed: TypeScript build failed and 4 of 12 focused tests failed" + ], + "survived_mutations": 0, + "restoration": "all production files restored byte-for-byte to the checkpoint and focused GREEN rerun passed" + }, + "coverage": { + "command": "go test ./internal/db/gorm ./internal/worker ./internal/proxy -run identity-focused-regex -cover -count=1", + "result": "informational package coverage: db/gorm 3.0%, worker 0.9%, proxy 70.3%; behavior gates and full suites are authoritative for this cross-cutting patch" + } +} diff --git a/.agent/specs/security-project-identity/evidence/SECURITY-PROJECT-IDENTITY-R2.verification.json b/.agent/specs/security-project-identity/evidence/SECURITY-PROJECT-IDENTITY-R2.verification.json new file mode 100644 index 00000000..2a8fac13 --- /dev/null +++ b/.agent/specs/security-project-identity/evidence/SECURITY-PROJECT-IDENTITY-R2.verification.json @@ -0,0 +1,50 @@ +{ + "task_id": "SECURITY-PROJECT-IDENTITY-R2", + "base_commit": "d22ebb9fe1914f514eaf9250e092dcd3b396f9cc", + "branch": "work/prc-security-project-identity-r2", + "observed_at": "2026-07-10T17:31:35.9604105Z", + "verdict": "PASS", + "findings_closed": { + "C1": "soft-deleted legacy-only canonical collision returns stable unavailable and mutates zero rows", + "C2": "HTTP validates raw project, legacy alias, and full v2 metadata before registration writes", + "C3": "Claude requires an exact JSON boolean or null for anchor_shared", + "C4": "Claude and OpenClaw reject malformed 2xx canonical_project responses without raw fallback, cache, or downstream access", + "C5": "Go, Claude, and OpenClaw reject shared raw-vs-normalized invalid vectors" + }, + "compatibility_review": [ + "legacy aliases retain established support for internal whitespace while edge whitespace and controls fail closed", + "Claude and OpenClaw retain colon and backslash selector characters already accepted by the HTTP boundary" + ], + "gates": { + "postgresql": "17.10 isolated DB; race + repeat count=10 PASS for DB/HTTP/proxy identity paths", + "go_full": "go test ./... -count=1 PASS", + "go_vet": "go vet ./... PASS", + "claude_hooks": "76/76 PASS with external ENGRAM_URL/TOKEN/QUIET removed from runner environment", + "openclaw": "27/27 PASS; npm run typecheck PASS", + "gitleaks": "staged scan PASS, no leaks", + "diff_check": "PASS", + "proto_parity": "zero proto diff from exact base", + "request_path_ddl": "zero added AutoMigrate/CREATE TABLE/ALTER TABLE/gormigrate calls", + "v5_demolition_guard": "zero added demolished scoring or server-side MCP HTTP references" + }, + "scope": { + "owned_product_test_paths": 12, + "owned_product_test_parity": true, + "index_ts_changed": false, + "other_changes": "evidence namespace only" + }, + "database_residue": { + "matching_project_rows": 0, + "query_scope": "all prc-* ids and aliases in isolated R2 database" + }, + "prove_it": { + "mutation_groups": 3, + "survived_mutations": 0 + }, + "changed_code_review": { + "axes": ["correctness", "validation completeness", "readability", "architecture", "security", "performance"], + "behavioral_edges": ["wrong type", "raw versus normalized", "zero mutation", "malformed 2xx", "no cache", "no downstream", "authorization independence", "compatibility"], + "open_findings": 0, + "verdict": "PASS" + } +} diff --git a/.agent/specs/security-project-identity/evidence/project-identity-v2-vectors.json b/.agent/specs/security-project-identity/evidence/project-identity-v2-vectors.json index 4693e124..5c46a35e 100644 --- a/.agent/specs/security-project-identity/evidence/project-identity-v2-vectors.json +++ b/.agent/specs/security-project-identity/evidence/project-identity-v2-vectors.json @@ -42,5 +42,95 @@ "non_git_anchor": "00112233445566778899aabbccddeeff", "anchor_shared": true } + ], + "invalid_vectors": [ + { + "name": "selector-leading-whitespace", + "invalid_target": "selector", + "selector": " configured-selector", + "display_name": "core", + "legacy_project_id": "core_18f246", + "git_remote": "https://example.invalid/acme/mono.git", + "relative_path": "packages/core/", + "non_git_anchor": "", + "anchor_shared": null + }, + { + "name": "selector-trailing-whitespace", + "invalid_target": "selector", + "selector": "configured-selector ", + "display_name": "core", + "legacy_project_id": "core_18f246", + "git_remote": "https://example.invalid/acme/mono.git", + "relative_path": "packages/core/", + "non_git_anchor": "", + "anchor_shared": null + }, + { + "name": "display-leading-whitespace", + "invalid_target": "identity", + "selector": "configured-selector", + "display_name": " core", + "legacy_project_id": "core_18f246", + "git_remote": "https://example.invalid/acme/mono.git", + "relative_path": "packages/core/", + "non_git_anchor": "", + "anchor_shared": null + }, + { + "name": "display-control-character", + "invalid_target": "identity", + "selector": "configured-selector", + "display_name": "core\tworkspace", + "legacy_project_id": "core_18f246", + "git_remote": "https://example.invalid/acme/mono.git", + "relative_path": "packages/core/", + "non_git_anchor": "", + "anchor_shared": null + }, + { + "name": "relative-leading-whitespace", + "invalid_target": "identity", + "selector": "configured-selector", + "display_name": "core", + "legacy_project_id": "core_18f246", + "git_remote": "https://example.invalid/acme/mono.git", + "relative_path": " packages/core/", + "non_git_anchor": "", + "anchor_shared": null + }, + { + "name": "relative-empty-segment", + "invalid_target": "identity", + "selector": "configured-selector", + "display_name": "core", + "legacy_project_id": "core_18f246", + "git_remote": "https://example.invalid/acme/mono.git", + "relative_path": "packages//core/", + "non_git_anchor": "", + "anchor_shared": null + }, + { + "name": "relative-missing-trailing-slash", + "invalid_target": "identity", + "selector": "configured-selector", + "display_name": "core", + "legacy_project_id": "core_18f246", + "git_remote": "https://example.invalid/acme/mono.git", + "relative_path": "packages/core", + "non_git_anchor": "", + "anchor_shared": null + }, + { + "name": "relative-segment-whitespace", + "invalid_target": "identity", + "selector": "configured-selector", + "display_name": "core", + "legacy_project_id": "core_18f246", + "git_remote": "https://example.invalid/acme/mono.git", + "relative_path": "packages/ core/", + "non_git_anchor": "", + "anchor_shared": null + } ] } diff --git a/internal/db/gorm/project_identity_v2_test.go b/internal/db/gorm/project_identity_v2_test.go index bc6b0e79..2b1b8803 100644 --- a/internal/db/gorm/project_identity_v2_test.go +++ b/internal/db/gorm/project_identity_v2_test.go @@ -2,7 +2,10 @@ package gorm import ( "context" + "encoding/json" "errors" + "os" + "path/filepath" "sync" "testing" "time" @@ -10,6 +13,33 @@ import ( gormio "gorm.io/gorm" ) +type invalidIdentityVector struct { + Name string `json:"name"` + InvalidTarget string `json:"invalid_target"` + Selector string `json:"selector"` + DisplayName string `json:"display_name"` + LegacyProjectID string `json:"legacy_project_id"` + GitRemote string `json:"git_remote"` + RelativePath string `json:"relative_path"` + NonGitAnchor string `json:"non_git_anchor"` + AnchorShared *bool `json:"anchor_shared"` +} + +func loadInvalidIdentityVectors(t *testing.T) []invalidIdentityVector { + t.Helper() + data, err := os.ReadFile(filepath.Join("..", "..", "..", ".agent", "specs", "security-project-identity", "evidence", "project-identity-v2-vectors.json")) + if err != nil { + t.Fatal(err) + } + var corpus struct { + Invalid []invalidIdentityVector `json:"invalid_vectors"` + } + if err := json.Unmarshal(data, &corpus); err != nil { + t.Fatal(err) + } + return corpus.Invalid +} + func gitIdentityV2(legacy, remote string) *ProjectIdentityV2 { return &ProjectIdentityV2{ Version: ProjectIdentityVersionV2, @@ -54,6 +84,24 @@ func TestRegisterAndResolve_RejectsRawVsNormalizedSelectorsAndMetadata(t *testin } }) } + for _, vector := range loadInvalidIdentityVectors(t) { + vector := vector + t.Run("shared-vector/"+vector.Name, func(t *testing.T) { + _, err := RegisterAndResolve(context.Background(), nil, vector.Selector, &ProjectIdentityV2{ + Version: ProjectIdentityVersionV2, + LegacyProjectID: vector.LegacyProjectID, + DisplayName: vector.DisplayName, + GitRemote: vector.GitRemote, + RelativePath: vector.RelativePath, + NonGitAnchor: vector.NonGitAnchor, + AnchorShared: vector.AnchorShared, + }) + var identityErr *ProjectIdentityError + if !errors.As(err, &identityErr) || identityErr.Code != ProjectIdentityInvalid { + t.Fatalf("error=%T %v, want PROJECT_IDENTITY_INVALID before DB access", err, err) + } + }) + } } func TestRegisterAndResolve_ExistingLegacyCanonicalAndContradiction(t *testing.T) { @@ -212,3 +260,33 @@ func TestRegisterAndResolve_FailsClosedOnSoftDeletedBindingCollision(t *testing. t.Fatalf("registration mutated removed binding aliases: %#v", persisted.LegacyIDs) } } + +func TestRegisterAndResolve_LegacyOnlySoftDeletedCanonicalFailsWithoutMutation(t *testing.T) { + db, cleanup := openTestDB(t) + defer cleanup() + selector := "prc-v2-r2-removed-legacy" + now := time.Now().UTC() + db.Unscoped().Exec(`DELETE FROM projects WHERE id = ?`, selector) + defer db.Unscoped().Exec(`DELETE FROM projects WHERE id = ?`, selector) + seed := Project{ID: selector, LegacyIDs: []string{"preserve-existing-alias"}, RemovedAt: &now} + if err := db.Create(&seed).Error; err != nil { + t.Fatal(err) + } + + _, err := RegisterAndResolve(context.Background(), db, selector, nil) + var identityErr *ProjectIdentityError + if !errors.As(err, &identityErr) || identityErr.Code != ProjectIdentityUnavailable || identityErr.UpgradeAction != UpgradeActionRetryProjectRegistration { + t.Fatalf("error=%T %v, want stable PROJECT_IDENTITY_UNAVAILABLE", err, err) + } + + var rows []Project + if err := db.Unscoped().Where("id = ?", selector).Find(&rows).Error; err != nil { + t.Fatal(err) + } + if len(rows) != 1 || rows[0].RemovedAt == nil { + t.Fatalf("soft-deleted canonical changed: %#v", rows) + } + if len(rows[0].LegacyIDs) != 1 || rows[0].LegacyIDs[0] != "preserve-existing-alias" { + t.Fatalf("aliases mutated: %#v", rows[0].LegacyIDs) + } +} diff --git a/internal/db/gorm/project_store.go b/internal/db/gorm/project_store.go index d738430f..7283abee 100644 --- a/internal/db/gorm/project_store.go +++ b/internal/db/gorm/project_store.go @@ -101,7 +101,7 @@ func RegisterAndResolve(ctx context.Context, db *gorm.DB, selector string, ident return ProjectIdentityResolution{}, invalidProjectIdentity("project selector is empty or malformed") } if identity != nil { - if err := validateStoredProjectIdentityV2(*identity); err != nil { + if err := ValidateProjectIdentityV2(*identity); err != nil { return ProjectIdentityResolution{}, err } } @@ -235,10 +235,11 @@ func RegisterAndResolve(ctx context.Context, db *gorm.DB, selector string, ident // AttachLegacyAlias adds an old-client selector only when it is absent or // already points to canonical. A conflicting alias fails before mutation. func AttachLegacyAlias(ctx context.Context, db *gorm.DB, canonical, alias string) error { - if canonical == "" || alias == "" || len(canonical) > 256 || len(alias) > 256 || - strings.TrimSpace(canonical) != canonical || strings.TrimSpace(alias) != alias || - containsProjectIdentityControl(canonical) || containsProjectIdentityControl(alias) { - return invalidProjectIdentity("canonical project or alias is malformed") + if err := ValidateProjectAliasV2(canonical); err != nil { + return err + } + if err := ValidateProjectAliasV2(alias); err != nil { + return err } if db == nil { return unavailableProjectIdentity(fmt.Errorf("project identity database is not ready")) @@ -272,14 +273,29 @@ func AttachLegacyAlias(ctx context.Context, db *gorm.DB, canonical, alias string }) } -func validateStoredProjectIdentityV2(identity ProjectIdentityV2) error { +// ValidateProjectAliasV2 validates a legacy selector without applying the +// stricter canonical selector character allow-list. Legacy directory-derived +// identifiers may contain internal spaces, but never edge whitespace, +// controls, or values too large for the projects identity columns. +func ValidateProjectAliasV2(alias string) error { + if alias == "" || len(alias) > 256 || strings.TrimSpace(alias) != alias || containsProjectIdentityControl(alias) { + return invalidProjectIdentity("project alias is malformed") + } + return nil +} + +// ValidateProjectIdentityV2 validates the complete transport metadata without +// opening a transaction. HTTP callers use it before any registration write; +// RegisterAndResolve repeats it to keep every transport fail-closed. +func ValidateProjectIdentityV2(identity ProjectIdentityV2) error { if identity.Version != ProjectIdentityVersionV2 { return invalidProjectIdentity("unsupported identity version") } if len(identity.LegacyProjectID) > 256 || len(identity.DisplayName) > 256 || strings.TrimSpace(identity.LegacyProjectID) != identity.LegacyProjectID || + strings.TrimSpace(identity.DisplayName) != identity.DisplayName || containsProjectIdentityControl(identity.LegacyProjectID) || containsProjectIdentityControl(identity.DisplayName) { - return invalidProjectIdentity("identity metadata is too long") + return invalidProjectIdentity("identity selector or display name is malformed") } hasGit := identity.GitRemote != "" || identity.RelativePath != "" hasAnchor := identity.NonGitAnchor != "" || identity.AnchorShared != nil @@ -290,14 +306,9 @@ func validateStoredProjectIdentityV2(identity ProjectIdentityV2) error { if identity.GitRemote == "" || len(identity.GitRemote) > 2048 || strings.TrimSpace(identity.GitRemote) != identity.GitRemote || containsProjectIdentityControl(identity.GitRemote) { return invalidProjectIdentity("git_remote is missing or malformed") } - if len(identity.RelativePath) > 4096 || strings.HasPrefix(identity.RelativePath, "/") || strings.Contains(identity.RelativePath, "\\") || containsProjectIdentityControl(identity.RelativePath) { + if !normalizedProjectRelativePathV2(identity.RelativePath) { return invalidProjectIdentity("relative_path is not normalized") } - for _, part := range strings.Split(identity.RelativePath, "/") { - if part == "." || part == ".." { - return invalidProjectIdentity("relative_path contains traversal") - } - } if identity.NonGitAnchor != "" || identity.AnchorShared != nil { return invalidProjectIdentity("git identity carries non-git fields") } @@ -309,6 +320,23 @@ func validateStoredProjectIdentityV2(identity ProjectIdentityV2) error { return nil } +func normalizedProjectRelativePathV2(value string) bool { + if value == "" { + return true + } + if len(value) > 4096 || strings.TrimSpace(value) != value || + strings.HasPrefix(value, "/") || !strings.HasSuffix(value, "/") || + strings.Contains(value, "\\") || containsProjectIdentityControl(value) { + return false + } + for _, part := range strings.Split(strings.TrimSuffix(value, "/"), "/") { + if part == "" || part == "." || part == ".." || strings.TrimSpace(part) != part { + return false + } + } + return true +} + func projectIdentityBindingKey(selector string, identity ProjectIdentityV2) string { var source string prefix := "p2g_" @@ -391,8 +419,18 @@ func createProjectIdentityRow(ctx context.Context, tx *gorm.DB, id, remote, rela RelativePath: sql.NullString{String: relativePath, Valid: remote != ""}, DisplayName: sql.NullString{String: displayName, Valid: displayName != ""}, } - if err := tx.WithContext(ctx).Clauses(clause.OnConflict{DoNothing: true}).Create(&project).Error; err != nil { - return fmt.Errorf("create project identity %s: %w", id, err) + result := tx.WithContext(ctx).Clauses(clause.OnConflict{DoNothing: true}).Create(&project) + if result.Error != nil { + return fmt.Errorf("create project identity %s: %w", id, result.Error) + } + if result.RowsAffected == 0 { + var active int64 + if err := tx.WithContext(ctx).Model(&Project{}).Where("id = ? AND removed_at IS NULL", id).Count(&active).Error; err != nil { + return fmt.Errorf("verify project identity %s: %w", id, err) + } + if active != 1 { + return fmt.Errorf("canonical project %s is unavailable", id) + } } return appendProjectAliases(ctx, tx, id, aliases...) } diff --git a/internal/proxy/identity.go b/internal/proxy/identity.go index a9bcb82b..5e750884 100644 --- a/internal/proxy/identity.go +++ b/internal/proxy/identity.go @@ -56,8 +56,9 @@ func ValidateProjectIdentityV2(identity ProjectIdentityV2) error { } if len(identity.LegacyProjectID) > 256 || len(identity.DisplayName) > 256 || strings.TrimSpace(identity.LegacyProjectID) != identity.LegacyProjectID || + strings.TrimSpace(identity.DisplayName) != identity.DisplayName || containsProjectIdentityControl(identity.LegacyProjectID) || containsProjectIdentityControl(identity.DisplayName) { - return invalid("selector or display name too long") + return invalid("selector or display name is malformed") } hasGit := identity.GitRemote != "" || identity.RelativePath != "" hasAnchor := identity.NonGitAnchor != "" || identity.AnchorShared != nil @@ -74,14 +75,9 @@ func ValidateProjectIdentityV2(identity ProjectIdentityV2) error { if identity.NonGitAnchor != "" || identity.AnchorShared != nil { return invalid("git identity cannot carry an anchor") } - if len(identity.RelativePath) > 4096 || strings.Contains(identity.RelativePath, "\\") || strings.HasPrefix(identity.RelativePath, "/") || containsProjectIdentityControl(identity.RelativePath) { + if !normalizedProjectRelativePathV2(identity.RelativePath) { return invalid("relative_path is not normalized POSIX relative form") } - for _, part := range strings.Split(identity.RelativePath, "/") { - if part == ".." || part == "." { - return invalid("relative_path contains traversal") - } - } return nil } if !strictAnchorV2.MatchString(identity.NonGitAnchor) { @@ -96,6 +92,23 @@ func ValidateProjectIdentityV2(identity ProjectIdentityV2) error { return nil } +func normalizedProjectRelativePathV2(value string) bool { + if value == "" { + return true + } + if len(value) > 4096 || strings.TrimSpace(value) != value || + strings.HasPrefix(value, "/") || !strings.HasSuffix(value, "/") || + strings.Contains(value, "\\") || containsProjectIdentityControl(value) { + return false + } + for _, part := range strings.Split(strings.TrimSuffix(value, "/"), "/") { + if part == "" || part == "." || part == ".." || strings.TrimSpace(part) != part { + return false + } + } + return true +} + func containsProjectIdentityControl(value string) bool { return strings.IndexFunc(value, unicode.IsControl) >= 0 } diff --git a/internal/proxy/identity_test.go b/internal/proxy/identity_test.go index b9a92e42..3e48cc9a 100644 --- a/internal/proxy/identity_test.go +++ b/internal/proxy/identity_test.go @@ -16,10 +16,12 @@ import ( type identityVectorFile struct { IdentityVersion uint32 `json:"identity_version"` Vectors []identityVector `json:"vectors"` + InvalidVectors []identityVector `json:"invalid_vectors"` } type identityVector struct { Name string `json:"name"` + InvalidTarget string `json:"invalid_target"` Selector string `json:"selector"` DisplayName string `json:"display_name"` LegacyProjectID string `json:"legacy_project_id"` @@ -29,6 +31,30 @@ type identityVector struct { AnchorShared *bool `json:"anchor_shared"` } +func TestProjectIdentityV2_RejectsSharedInvalidMetadataVectors(t *testing.T) { + vectors := loadIdentityVectors(t) + for _, vector := range vectors.InvalidVectors { + if vector.InvalidTarget != "identity" { + continue + } + vector := vector + t.Run(vector.Name, func(t *testing.T) { + err := proxy.ValidateProjectIdentityV2(proxy.ProjectIdentityV2{ + Version: vectors.IdentityVersion, + LegacyProjectID: vector.LegacyProjectID, + DisplayName: vector.DisplayName, + GitRemote: vector.GitRemote, + RelativePath: vector.RelativePath, + NonGitAnchor: vector.NonGitAnchor, + AnchorShared: vector.AnchorShared, + }) + if err == nil || !strings.Contains(err.Error(), "PROJECT_IDENTITY_INVALID") { + t.Fatalf("invalid shared vector accepted: %v", err) + } + }) + } +} + func loadIdentityVectors(t *testing.T) identityVectorFile { t.Helper() data, err := os.ReadFile(filepath.Join("..", "..", ".agent", "specs", "security-project-identity", "evidence", "project-identity-v2-vectors.json")) diff --git a/internal/worker/handlers_context.go b/internal/worker/handlers_context.go index 3520fdd5..78dbb445 100644 --- a/internal/worker/handlers_context.go +++ b/internal/worker/handlers_context.go @@ -820,6 +820,24 @@ func (s *Service) handleContextInject(w http.ResponseWriter, r *http.Request) { http.Error(w, "project required", http.StatusBadRequest) return } + // Validate every raw selector and the complete v2 metadata before identity + // registration can create a project row or append an alias. + if err := ValidateProjectName(project); err != nil { + http.Error(w, err.Error(), http.StatusBadRequest) + return + } + if legacyProject != "" { + if err := gorm.ValidateProjectAliasV2(legacyProject); err != nil { + writeProjectIdentityHTTPError(w, err) + return + } + } + if projectIdentity != nil { + if err := gorm.ValidateProjectIdentityV2(*projectIdentity); err != nil { + writeProjectIdentityHTTPError(w, err) + return + } + } // Resolve/register synchronously before any retrieval or tenant mutation. // Identity metadata selects a namespace; bearer/principal authorization is @@ -844,10 +862,6 @@ func (s *Service) handleContextInject(w http.ResponseWriter, r *http.Request) { return } - if err := ValidateProjectName(project); err != nil { - http.Error(w, err.Error(), http.StatusBadRequest) - return - } if identityOnly { w.Header().Set("Content-Type", "application/json") _ = json.NewEncoder(w).Encode(map[string]string{"canonical_project": project}) diff --git a/internal/worker/handlers_context_project_identity_v2_test.go b/internal/worker/handlers_context_project_identity_v2_test.go index 72b5ba3e..bc7491ba 100644 --- a/internal/worker/handlers_context_project_identity_v2_test.go +++ b/internal/worker/handlers_context_project_identity_v2_test.go @@ -93,6 +93,30 @@ func TestContextInject_LegacyMetadataPreservesOuterCanonical(t *testing.T) { } } +func TestContextInject_LegacyAliasWithInternalWhitespaceRemainsCompatible(t *testing.T) { + db, cleanup := setupProjectTestDB(t) + defer cleanup() + canonical := "prc-http-r2-legacy-space-canonical" + legacy := "prc http r2 legacy path" + db.Unscoped().Exec(`DELETE FROM projects WHERE id IN (?, ?) OR COALESCE(legacy_ids, ARRAY[]::TEXT[]) @> ARRAY[?]::TEXT[]`, canonical, legacy, legacy) + defer db.Unscoped().Exec(`DELETE FROM projects WHERE id IN (?, ?) OR COALESCE(legacy_ids, ARRAY[]::TEXT[]) @> ARRAY[?]::TEXT[]`, canonical, legacy, legacy) + + svc := &Service{store: &gormdb.Store{DB: db}} + payload, _ := json.Marshal(map[string]any{ + "project": canonical, + "legacy_project": legacy, + "identity_only": true, + }) + rec := httptest.NewRecorder() + svc.handleContextInject(rec, httptest.NewRequest(http.MethodPost, "/api/context/inject", bytes.NewReader(payload))) + if rec.Code != http.StatusOK { + t.Fatalf("status=%d body=%s", rec.Code, rec.Body.String()) + } + if resolved := gormdb.ResolveProjectID(t.Context(), db, legacy); resolved != canonical { + t.Fatalf("legacy alias resolves to %q, want %q", resolved, canonical) + } +} + func TestProjectIdentityHTTPError_DoesNotExposeDatabaseDiagnostics(t *testing.T) { rec := httptest.NewRecorder() writeProjectIdentityHTTPError(rec, &gormdb.ProjectIdentityError{ @@ -142,3 +166,70 @@ func TestContextInject_AmbiguousLegacyFailsWithUpgradeActionBeforeAccess(t *test t.Fatalf("error response=%+v", response.Error) } } + +func TestContextInject_RejectsRawSelectorAndMetadataBeforeProjectMutation(t *testing.T) { + db, cleanup := setupProjectTestDB(t) + defer cleanup() + cases := []struct { + name string + body map[string]any + key string + }{ + { + name: "outer selector with internal whitespace", + key: "prc-http-r2-invalid selector", + body: map[string]any{"project": "prc-http-r2-invalid selector", "identity_only": true}, + }, + { + name: "legacy alias with edge whitespace", + key: "prc-http-r2-invalid-legacy-alias", + body: map[string]any{ + "project": "prc-http-r2-invalid-legacy-alias", "legacy_project": " legacy-alias ", "identity_only": true, + }, + }, + { + name: "display name with leading whitespace", + key: "prc-http-r2-invalid-display", + body: map[string]any{ + "project": "prc-http-r2-invalid-display", "identity_only": true, + "project_identity": map[string]any{ + "version": 2, "legacy_project_id": "prc-http-r2-invalid-display", "display_name": " display", + "git_remote": "https://example.invalid/r2/display.git", "relative_path": "packages/core/", + }, + }, + }, + { + name: "relative path with empty segment", + key: "prc-http-r2-invalid-relative", + body: map[string]any{ + "project": "prc-http-r2-invalid-relative", "identity_only": true, + "project_identity": map[string]any{ + "version": 2, "legacy_project_id": "prc-http-r2-invalid-relative", "display_name": "relative", + "git_remote": "https://example.invalid/r2/relative.git", "relative_path": "packages//core/", + }, + }, + }, + } + for _, tc := range cases { + t.Run(tc.name, func(t *testing.T) { + db.Unscoped().Exec(`DELETE FROM projects WHERE id = ? OR COALESCE(legacy_ids, ARRAY[]::TEXT[]) @> ARRAY[?]::TEXT[]`, tc.key, tc.key) + defer db.Unscoped().Exec(`DELETE FROM projects WHERE id = ? OR COALESCE(legacy_ids, ARRAY[]::TEXT[]) @> ARRAY[?]::TEXT[]`, tc.key, tc.key) + payload, _ := json.Marshal(tc.body) + rec := httptest.NewRecorder() + svc := &Service{store: &gormdb.Store{DB: db}} + svc.handleContextInject(rec, httptest.NewRequest(http.MethodPost, "/api/context/inject", bytes.NewReader(payload))) + if rec.Code != http.StatusBadRequest { + t.Fatalf("status=%d body=%s", rec.Code, rec.Body.String()) + } + var count int64 + if err := db.Unscoped().Model(&gormdb.Project{}). + Where(`id = ? OR COALESCE(legacy_ids, ARRAY[]::TEXT[]) @> ARRAY[?]::TEXT[]`, tc.key, tc.key). + Count(&count).Error; err != nil { + t.Fatal(err) + } + if count != 0 { + t.Fatalf("invalid request mutated %d project rows", count) + } + }) + } +} diff --git a/plugin/engram/hooks/lib.js b/plugin/engram/hooks/lib.js index b756a227..c68f67b3 100644 --- a/plugin/engram/hooks/lib.js +++ b/plugin/engram/hooks/lib.js @@ -356,17 +356,42 @@ const PROJECT_IDENTITY_VERSION_V2 = 2; const PROJECT_IDENTITY_V2_FILE = '.engram-project-v2.json'; const STRICT_ANCHOR_V2 = /^[0-9a-f]{32}$/; const PROJECT_IDENTITY_CONTROL = /[\u0000-\u001f\u007f]/; +const PROJECT_SELECTOR_V2 = /^[A-Za-z0-9_.\/:\\-]+$/; const PROJECT_ANCHOR_V2_KEYS = ['anchor', 'shared', 'version']; +function projectIdentityInvalid(reason) { + return new Error(`PROJECT_IDENTITY_INVALID: ${reason}`); +} + +function validateProjectSelectorV2(selector) { + if (typeof selector !== 'string' || selector === '' || selector.length > 256 || + selector.trim() !== selector || selector.includes('..') || + PROJECT_IDENTITY_CONTROL.test(selector) || !PROJECT_SELECTOR_V2.test(selector)) { + throw projectIdentityInvalid('project selector is empty or malformed'); + } + return selector; +} + function buildProjectIdentityV2(value) { + if (!value || typeof value !== 'object' || Array.isArray(value)) { + throw projectIdentityInvalid('identity metadata must be an object'); + } + for (const field of ['legacy_project_id', 'display_name', 'git_remote', 'relative_path', 'non_git_anchor']) { + if (value[field] != null && typeof value[field] !== 'string') { + throw projectIdentityInvalid(`${field} must be a string`); + } + } + if (value.anchor_shared != null && typeof value.anchor_shared !== 'boolean') { + throw projectIdentityInvalid('anchor_shared must be a JSON boolean or null'); + } return { version: PROJECT_IDENTITY_VERSION_V2, - legacy_project_id: String(value.legacy_project_id || ''), - display_name: String(value.display_name || ''), - git_remote: String(value.git_remote || ''), - relative_path: String(value.relative_path || ''), - non_git_anchor: String(value.non_git_anchor || ''), - anchor_shared: value.anchor_shared == null ? null : Boolean(value.anchor_shared), + legacy_project_id: value.legacy_project_id || '', + display_name: value.display_name || '', + git_remote: value.git_remote || '', + relative_path: value.relative_path || '', + non_git_anchor: value.non_git_anchor || '', + anchor_shared: value.anchor_shared == null ? null : value.anchor_shared, }; } @@ -377,10 +402,17 @@ function validateProjectIdentityV2(identity) { if (!identity || identity.version !== PROJECT_IDENTITY_VERSION_V2) { invalid('unsupported version'); } + for (const field of ['legacy_project_id', 'display_name', 'git_remote', 'relative_path', 'non_git_anchor']) { + if (typeof identity[field] !== 'string') invalid(`${field} must be a string`); + } + if (identity.anchor_shared !== null && typeof identity.anchor_shared !== 'boolean') { + invalid('anchor_shared must be a JSON boolean or null'); + } if (identity.legacy_project_id.length > 256 || identity.display_name.length > 256 || identity.legacy_project_id.trim() !== identity.legacy_project_id || + identity.display_name.trim() !== identity.display_name || PROJECT_IDENTITY_CONTROL.test(identity.legacy_project_id) || PROJECT_IDENTITY_CONTROL.test(identity.display_name)) { - invalid('selector or display name too long'); + invalid('selector or display name is malformed'); } const hasGit = identity.git_remote !== '' || identity.relative_path !== ''; const hasAnchor = identity.non_git_anchor !== '' || identity.anchor_shared !== null; @@ -389,12 +421,9 @@ function validateProjectIdentityV2(identity) { if (!identity.git_remote || identity.git_remote.length > 2048 || identity.git_remote.trim() !== identity.git_remote || PROJECT_IDENTITY_CONTROL.test(identity.git_remote)) { invalid('git_remote is missing or malformed'); } - if (identity.relative_path.length > 4096 || identity.relative_path.startsWith('/') || identity.relative_path.includes('\\') || PROJECT_IDENTITY_CONTROL.test(identity.relative_path)) { + if (!normalizedProjectRelativePathV2(identity.relative_path)) { invalid('relative_path is not normalized'); } - if (identity.relative_path.split('/').some((part) => part === '.' || part === '..')) { - invalid('relative_path contains traversal'); - } } else { if (!STRICT_ANCHOR_V2.test(identity.non_git_anchor) || typeof identity.anchor_shared !== 'boolean') { invalid('non-git anchor must be 128-bit lowercase hex with explicit sharing'); @@ -403,6 +432,14 @@ function validateProjectIdentityV2(identity) { return identity; } +function normalizedProjectRelativePathV2(value) { + if (value === '') return true; + if (value.length > 4096 || value.trim() !== value || value.startsWith('/') || + !value.endsWith('/') || value.includes('\\') || PROJECT_IDENTITY_CONTROL.test(value)) return false; + return value.slice(0, -1).split('/').every((part) => + part !== '' && part !== '.' && part !== '..' && part.trim() === part); +} + function readOrCreateProjectAnchorV2(cwd) { const anchorPath = path.join(path.resolve(cwd || ''), PROJECT_IDENTITY_V2_FILE); for (;;) { @@ -462,17 +499,23 @@ async function registerProjectIdentityV2(context, requestFn = request) { if (!context || !context.ProjectIdentityV2) { throw new Error('PROJECT_IDENTITY_INVALID: hook context has no v2 identity'); } + const selector = validateProjectSelectorV2(context.Project); + validateProjectIdentityV2(context.ProjectIdentityV2); const response = await requestFn('POST', '/api/context/inject', { - project: context.Project, + project: selector, legacy_project: context.LegacyProject, git_remote: context.GitRemote, relative_path: context.RelativePath, project_identity: context.ProjectIdentityV2, identity_only: true, }); - if (response && typeof response.canonical_project === 'string' && response.canonical_project !== '') { - context.Project = response.canonical_project; + let canonical; + try { + canonical = validateProjectSelectorV2(response && response.canonical_project); + } catch { + throw new Error('PROJECT_IDENTITY_UNAVAILABLE: project identity registration response is malformed'); } + context.Project = canonical; return context.Project; } @@ -1039,6 +1082,7 @@ module.exports = { PROJECT_IDENTITY_VERSION_V2, buildProjectIdentityV2, validateProjectIdentityV2, + validateProjectSelectorV2, resolveProjectIdentityV2, registerProjectIdentityV2, isProjectIdentityTransportOffline, diff --git a/plugin/engram/hooks/project-identity-v2.test.js b/plugin/engram/hooks/project-identity-v2.test.js index 1ff91e22..9d5caf96 100644 --- a/plugin/engram/hooks/project-identity-v2.test.js +++ b/plugin/engram/hooks/project-identity-v2.test.js @@ -64,6 +64,20 @@ test('v2 metadata and anchor files reject non-normalized or unknown input', (t) assert.throws(() => lib.resolveProjectIdentityV2(dir), /PROJECT_IDENTITY_INVALID/); }); +test('shared invalid vectors and wrong-type anchor sharing are rejected exactly', () => { + for (const vector of vectors.invalid_vectors) { + if (vector.invalid_target !== 'identity') continue; + const identity = lib.buildProjectIdentityV2(vector); + assert.throws(() => lib.validateProjectIdentityV2(identity), /PROJECT_IDENTITY_INVALID/, vector.name); + } + assert.throws(() => lib.buildProjectIdentityV2({ + legacy_project_id: 'workspace', + display_name: 'workspace', + non_git_anchor: '00112233445566778899aabbccddeeff', + anchor_shared: 'false', + }), /PROJECT_IDENTITY_INVALID/); +}); + test('registration offline fallback distinguishes transport failure from malformed reached-server response', () => { const offline = new TypeError('fetch failed', { cause: Object.assign(new Error('connect'), { code: 'ECONNREFUSED' }) }); assert.equal(lib.isProjectIdentityTransportOffline(offline), true); @@ -97,3 +111,77 @@ test('registration is synchronous, idempotent, and updates the hook canonical se assert.equal(calls[0].endpoint, '/api/context/inject'); assert.equal(calls[0].body.identity_only, true); }); + +test('registration rejects shared invalid selectors before transport', async () => { + for (const vector of vectors.invalid_vectors) { + if (vector.invalid_target !== 'selector') continue; + let requests = 0; + const context = { + Project: vector.selector, + ProjectIdentityV2: lib.buildProjectIdentityV2(vector), + }; + await assert.rejects( + () => lib.registerProjectIdentityV2(context, async () => { + requests++; + return { canonical_project: 'must-not-run' }; + }), + /PROJECT_IDENTITY_INVALID/, + vector.name, + ); + assert.equal(requests, 0, vector.name); + } +}); + +test('registration preserves legacy selector characters accepted by the HTTP boundary', async () => { + const selector = 'legacy:C\\workspace'; + const context = { + Project: selector, + ProjectIdentityV2: { + version: 2, + legacy_project_id: selector, + display_name: 'workspace', + git_remote: 'https://example.invalid/acme/mono.git', + relative_path: 'packages/core/', + non_git_anchor: '', + anchor_shared: null, + }, + }; + let sentSelector = ''; + await lib.registerProjectIdentityV2(context, async (_method, _endpoint, body) => { + sentSelector = body.project; + return { canonical_project: selector }; + }); + assert.equal(sentSelector, selector); + assert.equal(context.Project, selector); +}); + +test('registration fails closed on malformed canonical responses without raw fallback', async () => { + const payloads = [ + {}, + { canonical_project: '' }, + { canonical_project: 42 }, + { canonical_project: ' invalid-canonical ' }, + { canonical_project: '../private' }, + ]; + for (const payload of payloads) { + const context = { + Project: 'legacy-selector', + ProjectIdentityV2: { + version: 2, + legacy_project_id: 'legacy-selector', + display_name: 'fixture', + git_remote: 'https://example.invalid/acme/mono.git', + relative_path: 'packages/core/', + non_git_anchor: '', + anchor_shared: null, + }, + }; + let downstream = 0; + await assert.rejects(async () => { + await lib.registerProjectIdentityV2(context, async () => payload); + downstream++; + }, /PROJECT_IDENTITY_UNAVAILABLE/); + assert.equal(context.Project, 'legacy-selector'); + assert.equal(downstream, 0); + } +}); diff --git a/plugin/openclaw-engram/src/client.ts b/plugin/openclaw-engram/src/client.ts index c0d5dbeb..4731d497 100644 --- a/plugin/openclaw-engram/src/client.ts +++ b/plugin/openclaw-engram/src/client.ts @@ -7,7 +7,7 @@ import { AvailabilityTracker } from './availability.js'; import type { PluginConfig } from './config.js'; -import type { ProjectIdentity } from './identity.js'; +import { validateProjectSelectorV2, type ProjectIdentity } from './identity.js'; // --------------------------------------------------------------------------- // Response types @@ -230,26 +230,28 @@ export class EngramRestClient { identity: ProjectIdentity, selector: string, ): Promise { - const normalizedSelector = selector.trim(); - if (!normalizedSelector) { + let validatedSelector: string; + try { + validatedSelector = validateProjectSelectorV2(selector); + } catch { return { ok: false, error: { code: 'PROJECT_IDENTITY_INVALID', - message: 'project selector is empty', + message: 'project selector is empty or malformed', upgradeAction: 'regenerate_project_identity_v2', httpStatus: 400, }, }; } - const key = JSON.stringify([normalizedSelector, identity.projectIdentityV2 ?? null]); + const key = JSON.stringify([validatedSelector, identity.projectIdentityV2 ?? null]); const completed = this.completedProjectRegistrations.get(key); if (completed) return completed; const inFlight = this.inFlightProjectRegistrations.get(key); if (inFlight) return inFlight; - const registration = this.performProjectRegistration(identity, normalizedSelector); + const registration = this.performProjectRegistration(identity, validatedSelector); this.inFlightProjectRegistrations.set(key, registration); try { const result = await registration; @@ -307,8 +309,17 @@ export class EngramRestClient { return projectRegistrationFailure(parsed.code, parsed.message, parsed.upgradeAction, response.status); } + const canonical = readCanonicalProject(payload); + if (!canonical) { + this.availability.recordFailure(); + return projectRegistrationFailure( + 'PROJECT_IDENTITY_UNAVAILABLE', + 'project identity registration response is malformed', + 'retry_project_identity_registration', + 503, + ); + } this.availability.recordSuccess(); - const canonical = readCanonicalProject(payload) || selector; return { ok: true, canonicalProject: canonical }; } catch (err: unknown) { this.availability.recordFailure(); @@ -784,7 +795,11 @@ function projectRegistrationFailure( function readCanonicalProject(payload: unknown): string { if (!payload || typeof payload !== 'object') return ''; const value = (payload as { canonical_project?: unknown }).canonical_project; - return typeof value === 'string' ? value : ''; + try { + return validateProjectSelectorV2(value); + } catch { + return ''; + } } function parseProjectRegistrationError( diff --git a/plugin/openclaw-engram/src/identity.ts b/plugin/openclaw-engram/src/identity.ts index cd4903e6..1cce6fc3 100644 --- a/plugin/openclaw-engram/src/identity.ts +++ b/plugin/openclaw-engram/src/identity.ts @@ -56,8 +56,18 @@ interface ProjectIdentityV2Input { const projectIdentityV2File = '.engram-project-v2.json'; const strictAnchorV2 = /^[0-9a-f]{32}$/; const projectIdentityControl = /[\u0000-\u001f\u007f]/; +const projectSelectorV2 = /^[A-Za-z0-9_.\/:\\-]+$/; const projectAnchorV2Keys = ['anchor', 'shared', 'version']; +export function validateProjectSelectorV2(selector: unknown): string { + if (typeof selector !== 'string' || selector === '' || selector.length > 256 || + selector.trim() !== selector || selector.includes('..') || + projectIdentityControl.test(selector) || !projectSelectorV2.test(selector)) { + throw new Error('PROJECT_IDENTITY_INVALID: project selector is empty or malformed'); + } + return selector; +} + export function buildProjectIdentityV2(input: ProjectIdentityV2Input): ProjectIdentityV2 { return { version: PROJECT_IDENTITY_VERSION_V2, @@ -74,11 +84,16 @@ export function validateProjectIdentityV2(identity: ProjectIdentityV2): ProjectI const invalid = (reason: string): never => { throw new Error(`PROJECT_IDENTITY_INVALID: ${reason}`); }; - if (identity.version !== PROJECT_IDENTITY_VERSION_V2) invalid('unsupported version'); + if (!identity || typeof identity !== 'object' || identity.version !== PROJECT_IDENTITY_VERSION_V2) invalid('unsupported version'); + for (const field of ['legacy_project_id', 'display_name', 'git_remote', 'relative_path', 'non_git_anchor'] as const) { + if (typeof identity[field] !== 'string') invalid(`${field} must be a string`); + } + if (identity.anchor_shared !== null && typeof identity.anchor_shared !== 'boolean') invalid('anchor_shared must be a JSON boolean or null'); if (identity.legacy_project_id.length > 256 || identity.display_name.length > 256 || identity.legacy_project_id.trim() !== identity.legacy_project_id || + identity.display_name.trim() !== identity.display_name || projectIdentityControl.test(identity.legacy_project_id) || projectIdentityControl.test(identity.display_name)) { - invalid('selector or display name too long'); + invalid('selector or display name is malformed'); } const hasGit = identity.git_remote !== '' || identity.relative_path !== ''; const hasAnchor = identity.non_git_anchor !== '' || identity.anchor_shared !== null; @@ -87,16 +102,23 @@ export function validateProjectIdentityV2(identity: ProjectIdentityV2): ProjectI if (!identity.git_remote || identity.git_remote.length > 2048 || identity.git_remote.trim() !== identity.git_remote || projectIdentityControl.test(identity.git_remote)) { invalid('git_remote is missing or malformed'); } - if (identity.relative_path.length > 4096 || identity.relative_path.startsWith('/') || identity.relative_path.includes('\\') || projectIdentityControl.test(identity.relative_path)) { + if (!normalizedProjectRelativePathV2(identity.relative_path)) { invalid('relative_path is not normalized'); } - if (identity.relative_path.split('/').some((part) => part === '.' || part === '..')) invalid('relative_path contains traversal'); } else if (!strictAnchorV2.test(identity.non_git_anchor) || typeof identity.anchor_shared !== 'boolean') { invalid('non-git anchor must be 128-bit lowercase hex with explicit sharing'); } return identity; } +function normalizedProjectRelativePathV2(value: string): boolean { + if (value === '') return true; + if (value.length > 4096 || value.trim() !== value || value.startsWith('/') || + !value.endsWith('/') || value.includes('\\') || projectIdentityControl.test(value)) return false; + return value.slice(0, -1).split('/').every((part) => + part !== '' && part !== '.' && part !== '..' && part.trim() === part); +} + function readOrCreateProjectAnchorV2(workspaceDir: string): { version: 2; anchor: string; shared: boolean } { const anchorPath = resolve(workspaceDir, projectIdentityV2File); for (;;) { diff --git a/plugin/openclaw-engram/test/project-identity-transport.test.mjs b/plugin/openclaw-engram/test/project-identity-transport.test.mjs index e3ce4fc9..9cc52d3b 100644 --- a/plugin/openclaw-engram/test/project-identity-transport.test.mjs +++ b/plugin/openclaw-engram/test/project-identity-transport.test.mjs @@ -1,9 +1,18 @@ import assert from 'node:assert/strict'; +import fs from 'node:fs'; +import path from 'node:path'; import test from 'node:test'; +import { fileURLToPath } from 'node:url'; import { EngramRestClient } from '../dist/client.js'; import { handleSessionStart } from '../dist/hooks/session-start.js'; +const here = path.dirname(fileURLToPath(import.meta.url)); +const vectors = JSON.parse(fs.readFileSync( + path.resolve(here, '../../../.agent/specs/security-project-identity/evidence/project-identity-v2-vectors.json'), + 'utf8', +)); + function gitIdentity() { return { projectId: 'legacy-selector', @@ -158,3 +167,83 @@ test('invalid bearer plus a known selector never reaches private data access', a assert.equal(requests.length, 1); assert.equal(requests[0].authorization, 'Bearer invalid-bearer'); }); + +test('registration rejects shared invalid selectors before fetch and never trims them', async (t) => { + const originalFetch = globalThis.fetch; + t.after(() => { globalThis.fetch = originalFetch; }); + for (const vector of vectors.invalid_vectors) { + if (vector.invalid_target !== 'selector') continue; + let requests = 0; + globalThis.fetch = async () => { + requests++; + return new Response(JSON.stringify({ canonical_project: 'must-not-run' }), { status: 200 }); + }; + const client = new EngramRestClient(clientConfig()); + const result = await client.registerAndResolveProject(gitIdentity(), vector.selector); + assert.deepEqual(result, { + ok: false, + error: { + code: 'PROJECT_IDENTITY_INVALID', + message: 'project selector is empty or malformed', + upgradeAction: 'regenerate_project_identity_v2', + httpStatus: 400, + }, + }, vector.name); + assert.equal(requests, 0, vector.name); + } +}); + +test('registration preserves legacy selector characters accepted by the HTTP boundary', async (t) => { + const originalFetch = globalThis.fetch; + t.after(() => { globalThis.fetch = originalFetch; }); + const selector = 'legacy:C\\workspace'; + let sentSelector = ''; + globalThis.fetch = async (_url, init) => { + sentSelector = JSON.parse(String(init?.body)).project; + return new Response(JSON.stringify({ canonical_project: selector }), { status: 200 }); + }; + const client = new EngramRestClient(clientConfig()); + const result = await client.registerAndResolveProject(gitIdentity(), selector); + assert.deepEqual(result, { ok: true, canonicalProject: selector }); + assert.equal(sentSelector, selector); +}); + +test('2xx malformed canonical response is not cached and cannot reach downstream data', async (t) => { + const originalFetch = globalThis.fetch; + t.after(() => { globalThis.fetch = originalFetch; }); + const payloads = [ + {}, + { canonical_project: '' }, + { canonical_project: 42 }, + { canonical_project: ' invalid-canonical ' }, + { canonical_project: '../private' }, + ]; + for (const payload of payloads) { + const paths = []; + globalThis.fetch = async (url) => { + paths.push(new URL(String(url)).pathname); + return new Response(JSON.stringify(payload), { + status: 200, + headers: { 'Content-Type': 'application/json' }, + }); + }; + const client = new EngramRestClient(clientConfig()); + const first = await client.registerAndResolveProject(gitIdentity(), 'legacy-selector'); + if (first.ok) { + await client.searchContext({ project: first.canonicalProject, query: 'must-not-run' }); + } + const second = await client.registerAndResolveProject(gitIdentity(), 'legacy-selector'); + const expected = { + ok: false, + error: { + code: 'PROJECT_IDENTITY_UNAVAILABLE', + message: 'project identity registration response is malformed', + upgradeAction: 'retry_project_identity_registration', + httpStatus: 503, + }, + }; + assert.deepEqual(first, expected); + assert.deepEqual(second, expected); + assert.deepEqual(paths, ['/api/context/inject', '/api/context/inject']); + } +}); diff --git a/plugin/openclaw-engram/test/project-identity-v2.test.mjs b/plugin/openclaw-engram/test/project-identity-v2.test.mjs index 64cbd95a..6a9b3a09 100644 --- a/plugin/openclaw-engram/test/project-identity-v2.test.mjs +++ b/plugin/openclaw-engram/test/project-identity-v2.test.mjs @@ -67,3 +67,18 @@ test('OpenClaw rejects non-normalized metadata and unknown anchor-file fields', fs.rmSync(workspace, { recursive: true, force: true }); } }); + +test('OpenClaw rejects every shared invalid metadata vector', () => { + for (const vector of vectors.invalid_vectors) { + if (vector.invalid_target !== 'identity') continue; + const identity = buildProjectIdentityV2(vector); + assert.throws(() => validateProjectIdentityV2(identity), /PROJECT_IDENTITY_INVALID/, vector.name); + } + const wrongBoolean = buildProjectIdentityV2({ + legacy_project_id: 'workspace', + display_name: 'workspace', + non_git_anchor: '00112233445566778899aabbccddeeff', + anchor_shared: 'false', + }); + assert.throws(() => validateProjectIdentityV2(wrongBoolean), /PROJECT_IDENTITY_INVALID/); +}); From 37d185b33b8f9411564fda49cf8b0d58321b62fd Mon Sep 17 00:00:00 2001 From: Kirill Turanskiy Date: Fri, 10 Jul 2026 23:11:15 +0300 Subject: [PATCH 038/111] docs(governance): reconcile production scope map r8 --- ...-10-engram-production-ready-master-plan.md | 43 +- ...gram-production-ready-ownership-state.json | 52 +- ...-10-engram-production-ready-scope-map.json | 98 + ...-07-10-release-gates-r8-plan-governance.md | 32 + .../evidence/plan-governance/authority.json | 46 + .../evidence/plan-governance/ledger.json | 4402 +++++++++++++++++ .../plan-governance/scope-map-parity.json | 51 + 7 files changed, 4707 insertions(+), 17 deletions(-) create mode 100644 .agent/plans/2026-07-10-engram-production-ready-scope-map.json create mode 100644 .agent/reports/2026-07-10-release-gates-r8-plan-governance.md create mode 100644 .agent/specs/release-gates-r8/evidence/plan-governance/authority.json create mode 100644 .agent/specs/release-gates-r8/evidence/plan-governance/ledger.json create mode 100644 .agent/specs/release-gates-r8/evidence/plan-governance/scope-map-parity.json diff --git a/.agent/plans/2026-07-10-engram-production-ready-master-plan.md b/.agent/plans/2026-07-10-engram-production-ready-master-plan.md index dbcde493..ccda16a0 100644 --- a/.agent/plans/2026-07-10-engram-production-ready-master-plan.md +++ b/.agent/plans/2026-07-10-engram-production-ready-master-plan.md @@ -1,8 +1,8 @@ # Engram Production-Ready Master Plan -Status: PLAN_REVISION_4_PENDING_INDEPENDENT_CHALLENGE +Status: PLAN_GOVERNANCE_R8_PENDING_INDEPENDENT_CHALLENGE Date: 2026-07-10 -Revision: 4 +Revision: 8 Goal contract: `.agent/goals/2026-07-10-engram-production-ready-marathon.md` Release baseline: `origin/main@dc891b2d72b1fd63b83e4a630a249241fc389151` (`v6.42.0`) `core_safe_point_version`: candidate `v6.43.0-rc.1`, publish target `v6.43.0` after release analysis confirms it @@ -38,6 +38,7 @@ Durable baseline evidence: - `.agent/reports/2026-07-10-mcp-structured-input-classification.md` (SHA256 `3356F3AE6073F95E701707FCF451D63809AC186ED1DEA7321A7027C4C3122E7A`, verdict `CLASSIFIED_MUST_BUILD / BLOCKS_RELEASE`) - `.agent/worktrees/prc-db-bulkops/.agent/reviews/2026-07-10-db-bulkops-sibling-rework-check.md` (SHA256 `EB9EB227363A27EA058C6654BD7E38EED1088252F79F837E377B2A3CBC1FAFB7`, verdict `FAIL / REVISE_HOLD`) - `.agent/plans/2026-07-10-engram-production-ready-ownership-state.json` +- `.agent/plans/2026-07-10-engram-production-ready-scope-map.json` (register freeze provenance `AB5F882FA110CA823A317061ECBCA0C62516702735325893A56206F9E7A29415`, 67/67 unique slices, `updated_at=2026-07-10T22:46:01.2938194+03:00`) - `.agent/reports/2026-07-10-image-remediation-prototype.md` - `.agent/experiments/GE-003/experiment.yaml` - `.agent/experiments/GE-003/journal.md` @@ -45,7 +46,11 @@ Durable baseline evidence: - `.agent/experiments/GE-004/journal.md` - `.agent/reports/engram-roadmap-progress-2026-07-06.html` -The JSON/Markdown evidence register is the sole authority for mutable progress. This revision also contains immutable source-lock facts and a tracked ownership-state contract; neither substitutes for the register. Root updates the JSON register first, renders the Markdown register and HTML from that exact state, and only then makes a dispatch/integration decision. Every row records criterion, slice, branch/base/head, exact command, environment identity, raw artifact, exit code, checker artifact, review artifact, integration SHA, timestamp, and notes. An empty field remains UNKNOWN; it is never inferred as green. +The JSON/Markdown evidence register is the sole authority for mutable progress. This revision also contains immutable source-lock facts, a tracked ownership-state contract, and a tracked scope map; none substitutes for the register. Root updates the JSON register first, renders the Markdown register and HTML from that exact state, and only then makes a dispatch/integration decision. Every row records criterion, slice, branch/base/head, exact command, environment identity, raw artifact, exit code, checker artifact, review artifact, integration SHA, timestamp, and notes. An empty field remains `UNKNOWN`; it is never inferred as green. + +R8 scope authority is the structural projection frozen from register snapshot SHA256 `AB5F882FA110CA823A317061ECBCA0C62516702735325893A56206F9E7A29415`, `updated_at=2026-07-10T22:46:01.2938194+03:00`, with 67 criteria and 67 unique slice identities. The SHA and timestamp are immutable provenance, not a perpetual byte-equality gate. `.agent/plans/2026-07-10-engram-production-ready-scope-map.json` maps every frozen row to a literal maker/checker owner, a named fold, historical provenance, or root-only integration. Live conformance requires the exact unique slice set, classifications, owner/fold targets, required plan rows and ownership epochs, plus only the status/head policies explicitly marked `load_bearing`; ordinary progress/head advancement inside an unchanged lane and changes to timestamps, commands, artifacts, or notes do not invalidate plan authority. A new/deleted slice, changed classification/owner/fold, missing required predecessor, or a marked rejected head presented as accepted does. `CONTROL-PLANE` remains `RUNNING_GOAL_STATE_REACTIVATION_UNAVAILABLE` because the native goal service reports the user-resumed goal as blocked and refuses exact-objective recreation; execution continues under the verbatim objective without misreporting the tool state. `DB-EMBEDDING-EVIDENCE-TRANSPORT` is `R5_INTERIM_REVISE_REAL_METRICS_REQUIRED`: the interim staged-LF run passed 24/24 tests but measured only 66.65% aggregate line coverage after denominator expansion, so placeholder 80.0 values and stale mixed-worktree metrics are rejected. `SECURITY-PROJECT-IDENTITY` R2 remains unaccepted at `9e2ce4e58a5cded69660ca9ac532d2167f315bb2`: checker status `R2_CHECKER_REVISE_TWO_BLOCKERS_CONFIRMED` covers both the outer-selector classification gap and the concurrent `O_EXCL` final-file partial-read/EOF race. + +R7 PLAN-GOVERNANCE commit `a99ce0dfe4d415f90c0f192cbf96bd88710a48f5` and diagnostic RELEASE-GATES commit `144eeefa003c3e1c0009c4264f41236ee3453b65` are rejected/diagnostic predecessors only. R7's wrong-package repair is carried forward in the second R8 commit, but no R7 plan hash, live verdict, or acceptance status is current authority. The R7 checker verdict is `REVISE` at `d8ba52d29f1c7f2169e3f76576248ab32d3b6646` because deleting a required plan row and its epoch could still pass the internally consistent Ledger. The following revision-4 paragraph is historical chronology only; every dispatch and acceptance decision uses the R8 authority above. Revision-4 source lock: the rejected RELEASE-GATES handoff is exactly `586b39df3465fb51779cf9225deaedbc212e4f9f`, with direct parent `badc408937dd6fad0e1dc7ee9fc573505aa617b2`, plan-authority ancestor `a1653abf5a1088f45df2c58487a74a886666adf1`, and independent checker artifact/hash `E2B399BAA66C463D3301DBC9F7775ABF357D2411C74EBDBFDB11CD1A020619E0`; it is rejected for EOL-dependent authority hashing, a false-green missing-`--build` mutation, an omitted dream-cycle production lane, stale final-head evidence, and Windows path-budget failure. This revision-4 successor starts from that exact rejected handoff and remains `PENDING` until committed, independently checked, post-reviewed, and integrated. The OpenClaw/ingest classification lock is exactly `.agent/reports/2026-07-10-openclaw-ingest-classification.md` SHA256 `A095E9D7B69DC95CAC4022EB97D2EA9B403D5132F5602FDD85E7D3A93092F5D4`; the stale `A095E9A3...` value is invalid evidence and must not appear in revision-4 artifacts. DB-BULKOPS rejected composite head `68b2ce5835c7c6efdf1c68da9eedcb8d9c3837ef` has parent `6ea10496aa127fba7fdb194875044e770d0a1d8c`, checker artifact `.agent/worktrees/prc-db-bulkops/.agent/reviews/2026-07-10-db-bulkops-sibling-rework-check.md`, checker verdict `FAIL / REVISE_HOLD`, checker SHA256 `EB9EB227363A27EA058C6654BD7E38EED1088252F79F837E377B2A3CBC1FAFB7`, and two release-blocking HIGH defects: a wrong-type candidate-review snapshot can reach mutation without durable audit, and public bulk IDs are lossy-coerced so a fraction such as `1.9` becomes `1` and a numeric string such as `"2"` becomes `2`. Active owner DB-BULKOPS-BEHAVIORAL-EDGE-REWORK starts exactly from `68b2ce5835c7c6efdf1c68da9eedcb8d9c3837ef`; its head is `PENDING`. The rejected head and any dirty overlay are not dispatch authority. MCP structured-input classification is locked to `.agent/reports/2026-07-10-mcp-structured-input-classification.md` SHA256 `3356F3AE6073F95E701707FCF451D63809AC186ED1DEA7321A7027C4C3122E7A`: malformed present booleans can cross preview/confidentiality boundaries into live writes, lossy IDs can select the wrong durable row, malformed arrays can clear/drop data while the write succeeds, and schema/handler drift is release-blocking. The remedy is route-specific mutation validation from exact JSON numbers and present-vs-missing fields; globally tightening read/filter compatibility coercers is explicitly forbidden without a separate migration decision. @@ -98,9 +103,10 @@ Durable local layout: `.agent/worktrees//` (already ignored through `.git | Slice | Branch | Exclusive maker paths | Dependencies | Required proof | | --- | --- | --- | --- | --- | -| PLAN-GOVERNANCE | `work/prc-release-gates-r4` | `.agent/plans/2026-07-10-engram-production-ready-master-plan.md`, `.agent/plans/2026-07-10-engram-production-ready-ownership-state.json` only | exact rejected predecessor/base `586b39df3465fb51779cf9225deaedbc212e4f9f`; first revision-4 commit in this worktree; precedes RELEASE-GATES revision-4 script commit | preserve all PR-0..PR-8 and M0-M7 obligations; record exact rejected RELEASE-GATES, DB-BULKOPS, OpenClaw/ingest, and dream-cycle source locks; declare every maker path literally; bind the tracked state to the canonical UTF-8/LF plan SHA256; require independent challenging-plans GO before broad dispatch | +| PLAN-GOVERNANCE | `work/prc-release-gates-revision8-maker` | `.agent/plans/2026-07-10-engram-production-ready-master-plan.md`, `.agent/plans/2026-07-10-engram-production-ready-ownership-state.json`, new `.agent/plans/2026-07-10-engram-production-ready-scope-map.json`, `.agent/specs/release-gates-r8/evidence/plan-governance/**`, `.agent/reports/2026-07-10-release-gates-r8-plan-governance.md` | exact reconstruction base `d59d1605969b1f567506e96ded524dfd1e4be08a`; rejected R7 plan `a99ce0dfe4d415f90c0f192cbf96bd88710a48f5`; checker `d8ba52d29f1c7f2169e3f76576248ab32d3b6646`; first R8 commit and direct predecessor of RELEASE-GATES-R8 | preserve every PR-0..PR-8 and M0..M7 obligation plus all eight explicit predecessor rows; bind all 67 unique register slices to the structural projection frozen at SHA256 `AB5F882FA110CA823A317061ECBCA0C62516702735325893A56206F9E7A29415`; classify literal maker/checker, four current meta folds, one historical prototype, and root-only control/integration; preserve current DB and SECURITY-PROJECT-IDENTITY blocker lineage; canonical UTF-8/LF plan hash, state hash, scope-map parity, Ledger, deletion/rejected-head/fold/register mutations, exact Diff, checker and root post-review must pass | | DB-BULKOPS | `work/prc-db-bulkops` | `internal/bulkops/facade.go`, `internal/bulkops/facade_test.go`, `internal/bulkops/rollback.go`, `internal/bulkops/rollback_test.go`, `internal/db/gorm/candidate_store.go`, `internal/db/gorm/candidate_store_test.go`, `internal/mcp/tools_bulkops.go`, `internal/mcp/tools_dryrun_test.go`, `pkg/models/snapshot.go`, legacy exact report `.agent/reports/2026-07-10-db-bulkops-capture-lock-rework-maker.md`, legacy exact report `.agent/reports/2026-07-10-db-bulkops-sibling-rework-maker.md`, legacy evidence prefix `.agent/specs/production-ready-db-bulkops/evidence/**`, legacy evidence prefix `.agent/reports/evidence/production-ready/db-bulkops-sibling-rework/**` | historical base `2b085de663d5ba9dfa97adf9ee58de062ee0997c`, rejected head `68b2ce5835c7c6efdf1c68da9eedcb8d9c3837ef`; no integration SHA; superseded as current writer on the four behavioral-edge paths | checker artifact `.agent/worktrees/prc-db-bulkops/.agent/reviews/2026-07-10-db-bulkops-sibling-rework-check.md`, verdict `FAIL / REVISE_HOLD`, SHA256 `EB9EB227363A27EA058C6654BD7E38EED1088252F79F837E377B2A3CBC1FAFB7`; exact Diff must report zero undeclared paths but fail epoch authority for paths now owned by DB-BULKOPS-BEHAVIORAL-EDGE-REWORK; preserve all lock-consistent capture/rollback evidence; never integrate this head alone | -| DB-BULKOPS-BEHAVIORAL-EDGE-REWORK | `work/prc-db-bulkops-behavioral-edge-rework` | `internal/db/gorm/candidate_store.go`, `internal/db/gorm/candidate_store_test.go`, `internal/mcp/tools_bulkops.go`, `internal/mcp/tools_dryrun_test.go`, legacy exact report `.agent/reports/2026-07-10-db-bulkops-behavioral-edge-rework-maker.md`, legacy evidence prefix `.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/**` | exact rejected predecessor/base `68b2ce5835c7c6efdf1c68da9eedcb8d9c3837ef`; head `PENDING`; rework transition requires the hash-bound rejected checker above and forbids an integration claim for that predecessor | reject wrong-type/missing candidate-review action snapshots before mutation and require the correct durable audit/snapshot contract; reject non-array bulk ID containers, non-number elements, fractions, numeric strings, zero/negative/overflow IDs without lossy coercion; keep ordinary valid integer-array behavior; permanent regressions cover wrong snapshot type, audit-less mutation must-not-occur, raw-vs-normalized request use, `1.9`, `"2"`, mixed arrays, and valid arrays; independent checker PASS, post-review PASS, exact integration SHA, then DB-GOVERNANCE rebases to that accepted composite | +| DB-BULKOPS-BEHAVIORAL-EDGE-REWORK | `work/prc-db-bulkops` | `internal/db/gorm/candidate_store.go`, `internal/db/gorm/candidate_store_test.go`, `internal/mcp/tools_bulkops.go`, `internal/mcp/tools_dryrun_test.go`, `.agent/reports/2026-07-10-db-bulkops-behavioral-edge-rework-maker-3.md`, `.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/**` | rejected historical target `68b2ce5835c7c6efdf1c68da9eedcb8d9c3837ef`; accepted/reviewed product successor base `cd098397764e13388aef3b4da9448172c7092fdb`, head `bd68c05baf4b7250096dd84f56bebea2aa555970`; checker/post-review are `PASS_WITH_CONCERNS`; integration SHA remains unset | both behavioral defect classes are closed across promote/preserve/reject/suppress/supersede with canonical preflight plus transaction-bound snapshot validation, exact integer decoding, wrong-type/TOCTOU rejection, audit-fault rollback, and ordinary non-snapshot exclusion; do not present rejected `68b2ce58` as current acceptance; the remaining test-pool concern transfers `candidate_store_test.go` to DB-TEST-POOL-HYGIENE and remains release-blocking until its fresh checker passes | +| DB-TEST-POOL-HYGIENE | `work/prc-db-test-pool-hygiene-evidence-r2` | `internal/db/gorm/candidate_store_test.go`, `.agent/reports/2026-07-10-db-test-pool-hygiene-maker.md`, `.agent/reports/2026-07-10-db-test-pool-hygiene-evidence-revision-maker.md`, `.agent/reports/evidence/production-ready/db-test-pool-hygiene/**` | accepted behavioral-edge product head `bd68c05baf4b7250096dd84f56bebea2aa555970`; product successor `276337b3e96aa5af6d2e7dd9a0002ff957e5ffc9`; evidence-only successor `68242c48aaad62ec087166eeb9ea32f14d189450`; live status `READY_FOR_CHECK` | close every `openCandidateTestDB` pool at owner cleanup without changing production behavior; preserve exact 83 call sites across 8 files and Git-blob/LF representation; evidence-only revision must remain product-delta-free and reject stale manifest, CRLF, wrong representation, false 76/6 inventory, and missing artifact mutations; fresh checker plus root post-review precede integration or transfer to DB-GOVERNANCE | | DB-GOVERNANCE | `work/prc-db-governance` | `internal/db/gorm/candidate_store.go`, `internal/db/gorm/candidate_store_test.go`, `internal/db/gorm/rule_arbiter_store_test.go`, `internal/db/gorm/rule_governance_store.go`, `internal/db/gorm/rule_governance_store_test.go`, `internal/db/gorm/rule_governance_rg3_store_test.go`, `internal/db/gorm/migration_rule_governance.go`, `internal/db/gorm/migration_rule_arbiter.go`, `internal/db/gorm/migration_rule_governance_snapshot_statuses.go` | accepted DB-BULKOPS-BEHAVIORAL-EDGE-REWORK composite integrated; exact integration SHA recorded; worktree rebased to that SHA; predecessor path evidence complete | fresh per-test DB/schema isolation; migration 144 apply/rollback/reapply/constraint proof; project/global aggregate boundaries; no closed-DB reuse or order dependence; checker/post-review precede the exact ownership transfer to CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK | | CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK | `work/prc-candidate-review-snapshot-rollback` | `internal/reviewpacket/candidate.go`, `internal/reviewpacket/candidate_test.go`, `internal/db/gorm/candidate_store.go`, `internal/db/gorm/candidate_store_test.go`, `internal/db/gorm/snapshot_store.go`, `internal/db/gorm/snapshot_store_test.go`, `internal/bulkops/rollback_test.go`, new `tests/critical/candidate_review/candidate_review_snapshot_rollback_test.go` | accepted DB-BULKOPS-BEHAVIORAL-EDGE-REWORK composite plus accepted DB-GOVERNANCE integrated; exact predecessor SHAs recorded; worktree rebased to the latest integration SHA; final writer in the candidate-store epoch | predecessor candidate-review snapshots must already reject wrong types and carry durable audit; inside the same candidate transition transaction, persist locked `Before`, committed `After`, snapshot row, candidate mutation, promoted-memory amendment where applicable, and `candidate_review` audit; any failure rolls back all writes; cover promote, preserve, reject, suppress, and supersede; permanent immediate rollback and later-state conflict regressions; independent checker and post-review PASS before integration | | INGEST-DOC-CLASSIFICATION | checker-only | read-only `.agent/reports/2026-07-10-openclaw-ingest-classification.md` | complete at SHA256 `A095E9D7B69DC95CAC4022EB97D2EA9B403D5132F5602FDD85E7D3A93092F5D4` | `SnapshotOpIngestDoc` / `executeIngestDoc` is `CLASSIFIED_pre-demolition-stale` in the taxonomy's stale/unwired bucket, historically introduced post-demolition; it blocks plan/audit closure and is never a live, dormant, or must-build scaffold | @@ -110,21 +116,30 @@ Durable local layout: `.agent/worktrees//` (already ignored through `.git | DURABLE-AUDIT-BOUNDARIES | `work/prc-durable-audit-boundaries` | `internal/db/gorm/domain_owner_store.go`, `internal/db/gorm/domain_owner_store_test.go`, `internal/db/gorm/user_store.go`, `internal/worker/auth_handlers.go`, new `internal/worker/auth_audit_durability_test.go`, `internal/bulkops/facade.go`, new `internal/bulkops/audit_durability_test.go`, new `scripts/production-smoke/customer/run-durable-audit-faults.ps1` | accepted INGEST-DOC-SNAPSHOT-DEMOLITION, CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK, and AUTH-BOOTSTRAP-SECURITY integrated; exact SHAs recorded; worktree rebased to the latest composite | auth setup and every retained bulk success path commit business mutation with its audit row in one transaction or a durable outbox; fault/retry/readback covers auth setup plus bulk promote/delete/supersede with no falsely complete unaudited response. The retained executable bulk-op set is exactly `bulk_promote`, `bulk_delete`, and `bulk_supersede`; `SnapshotOpIngestDoc` is a persisted historical-only discriminator, is non-executable after INGEST-DOC-SNAPSHOT-DEMOLITION, is excluded from this matrix, and may not be wired or cited as audit evidence. The separate live MCP `ingest` path is not covered by the bulk facade and requires its own explicit audit contract if whole-product mutation auditing is required. | | DB-CRYSTALLIZATION | `work/prc-db-crystallization` | `internal/worker/handlers_hooks_crystallization_integration_test.go` | RELEASE-GATES foundation before mergeable checker verdict | session-end stores redacted transcript without direct decision-memory creation; flag-off/empty safety; concurrent delivery; this test-only lane does not authorize dream-cycle production edits and must hand the live defects to CRYSTALLIZATION-DREAM-CYCLE-CORRECTNESS | | CRYSTALLIZATION-DREAM-CYCLE-CORRECTNESS | `work/prc-crystallization-dream-cycle-correctness` | `internal/worker/dream_cycle.go`, `internal/worker/dream_cycle_test.go`, new `.agent/reports/2026-07-10-crystallization-dream-cycle-correctness-maker.md`, new `.agent/e/cdc/**` | revision-4 RELEASE-GATES accepted and integrated; accepted DB-CRYSTALLIZATION test-only candidate checker/post-review integrated; worktree rebased to the latest exact integration SHA; first/current owner for both source/test paths | fail closed across the full `CRYSTALLIZATION` / `VNEXT_F` / LLM availability-result matrix: no read/extract/route/mark/watermark when crystallization is off; no mark or watermark when candidate persistence is unavailable, the F flag is off, LLM is disabled, extraction fails, routing returns nil, or any route errors; group transcript work by exact `(project, session_id)` so no digest or candidate crosses project/session provenance; mark only a batch whose every extracted decision reached a durable created-or-duplicate result; preserve unprocessed rows across restart/retry and prove exactly-once candidate persistence by fingerprint; use fresh migrated PostgreSQL per run, focused repeat at least 20, package repeat at least 3, race at least 3, process restart, zero residual sessions/databases, independent checker PASS, and post-review PASS; do not restore direct session-end regex extraction, direct memory creation, or any v5-demolished graph/rerank/scoring path; any proved need to change `internal/db/gorm/transcript_store.go` or its test stops for a root plan/state amendment before edit | -| DB-EMBEDDING-STATS | `work/prc-db-embedding-stats` | `internal/embedding/store.go`, `internal/embedding/store_stats_test.go` | RELEASE-GATES full diagnostic plus live call-path classification | empty `content_chunks` and zero active memories return zero-valued stats with `LastChunkAt=nil`, never a NULL-to-`time.Time` scan error; populated/model/dimension/coverage behavior unchanged; focused repeat >=20, package/race/vet, fresh schema and zero sessions | +| DB-EMBEDDING-STATS | `work/prc-db-embedding-stats` | `internal/embedding/store.go`, `internal/embedding/store_stats_test.go` | RELEASE-GATES full diagnostic plus live call-path classification; immutable accepted product source `38d6a4fb7ff5f5ae3b6c0066c0a1b806421137df` remains separate from every evidence-transport revision | empty `content_chunks` and zero active memories return zero-valued stats with `LastChunkAt=nil`, never a NULL-to-`time.Time` scan error; populated/model/dimension/coverage behavior unchanged; focused repeat >=20, package/race/vet, fresh schema and zero sessions; no evidence-only commit may alter or rebind the accepted product source | +| DB-EMBEDDING-EVIDENCE-TRANSPORT | `work/prc-db-embedding-evidence-transport-r5` | `.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/**`, `.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/**`, `.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4/**`, `.agent/specs/db-embedding-stats-evidence-transport/evidence/**` only | immutable product source `38d6a4fb7ff5f5ae3b6c0066c0a1b806421137df`; current evidence target `369951b61ee07cb0c405558e0f677cd1c9e90362`; live status `R5_INTERIM_REVISE_REAL_METRICS_REQUIRED`; no product edits or integration are authorized | preserve manifest/path/null-access/Prove-It rails, but reject placeholder `80.0/0.0/0.0` and stale mixed-worktree metrics; staged LF execution passed 24/24 while actual aggregate coverage was 66.65% line / 59.64% branch / 88.17% functions after the in-band denominator expansion; R5 must simplify or revert that expansion, bind two real raw transcripts, prove fresh LF/CRLF materialization, and receive a fresh checker plus root post-review before the evidence transport is accepted | | DB-REAPER | `work/prc-db-reaper` | `internal/worker/reaper/reaper.go`, `internal/worker/reaper/reaper_test.go` | RELEASE-GATES foundation before mergeable checker verdict | package/race/repeat proof; environment isolation; configured/default/invalid retention; unexpired preservation; expired purge; cancellation and idempotency | | SECURITY-TOOLCHAIN | `work/prc-security-toolchain` | `go.mod`, `go.sum`, `Dockerfile` | preservation recorded + clean `origin/main` worktree; first writer in the `Dockerfile` transfer chain | build, vet, full unit/DB tests, zero reachable Go vulnerability release blocker, builder/runtime version proof; its server candidate currently leaves three unfixed Perl image findings and is not final image acceptance; checker/post-review precede transfer of `Dockerfile` to IMAGE-REMEDIATION | -| RELEASE-GATES | `work/prc-release-gates-r4` | `.agent/critical-suite.config.yaml`, `.agent/dev-stand.config.yaml`, `.github/workflows/test.yml`, `scripts/production-gates/assert-coverage.ps1`, `scripts/production-gates/assert-go-test-json.ps1`, `scripts/production-gates/assert-plan-path-ownership.ps1`, new `scripts/production-gates/assert-windows-path-budget.ps1`, `scripts/production-gates/cleanup-db-sessions.ps1`, `scripts/production-gates/run-critical-suite.ps1`, `scripts/production-gates/run-db-suite.ps1`, `scripts/production-gates/run-dev-stand.ps1`, `scripts/production-gates/run-node-matrix.ps1`, legacy exact report `.agent/reports/2026-07-10-release-gates-foundation-revision-3-maker.md`, legacy evidence prefix `.agent/reports/evidence/production-ready/release-gates-foundation-revision-3/**`, new `.agent/reports/2026-07-10-release-gates-foundation-revision-4-maker.md`, new `.agent/e/rg4/**` | exact rejected predecessor/base `586b39df3465fb51779cf9225deaedbc212e4f9f`; head `PENDING`; PLAN-GOVERNANCE revision-4 commit first; first writer in `.github/workflows/test.yml` before IMAGE-REMEDIATION | preserve every valid revision-3 gate; canonicalize authority identity as UTF-8 without BOM with all line endings normalized to LF and prove LF/CRLF equality plus semantic-mutation inequality; reject removal/bypass of explicit pre-launch compose build and require source-commit/clean-tree plus pre-launch tag IDs to equal running/scanned IDs; enforce a tracked-path budget for an ordinary Windows worktree with a 66-character prefix and `core.longpaths` unset, then prove an actual fresh checkout; replace the overlong revision-3 raw tree with compact revision-4 evidence; rerun blanket/empty skip, truthful finalization, repeat-3, full fresh-DB/race JSON/coverage/zero-session/cleanup, critical/dev-stand, OpenClaw, ownership, actionlint, AST/vet/diff/gitleaks, and all conformance mutations including CRLF and no-`--build`; immutable floors remain 60/70 plus 10/10/20/55/55/55 | +| RELEASE-GATES | `work/prc-release-gates-revision8-maker` | `.github/workflows/test.yml`, `scripts/production-gates/assert-plan-path-ownership.ps1`, `scripts/production-gates/run-db-suite.ps1`, `.agent/specs/release-gates-r8/evidence/release-gates/**`, `.agent/reports/2026-07-10-release-gates-r8-maker.md` | exact PLAN-GOVERNANCE-R8 commit is the direct parent; R7 diagnostic `144eeefa003c3e1c0009c4264f41236ee3453b65` is a source-only predecessor and never acceptance authority; first writer in `.github/workflows/test.yml` before IMAGE-REMEDIATION | carry forward the wrong-package zero-acceptance repair and exact live package-plus-test workflow predicate; bind the exact canonical plan SHA, ownership state, scope map, and register freeze provenance; fail closed when a required plan row and epoch disappear together, any live slice is unmapped, a fold/root/historical owner is missing or misclassified, a marked rejected head is presented as accepted, or the live unique slice set changes; allow timestamps, notes, commands, artifacts, and ordinary same-lane status/head progress to drift; preserve all R7 LF/CRLF, semantic/state/epoch, actual-Diff, combined-Diff and undeclared `.agent/**` rails; rerun actionlint, AST/vet/build/diff/gitleaks/critical and later exact DB/dev-stand gates without amending the immutable target; immutable floors remain 60/70 plus 10/10/20/55/55/55 | | IMAGE-REMEDIATION | `work/prc-image-remediation` | `Dockerfile`, new `cmd/engram-healthcheck/main.go`, new `cmd/engram-healthcheck/main_test.go`, `apps/operator-console/package.json`, `apps/operator-console/package-lock.json`, new `deploy/postgres/Dockerfile`, `docker-compose.yml`, `deploy/docker-compose.runtime.yml`, `docs/DEPLOYMENT.md`, `docs/PRODUCTION-TESTING-PLAYBOOK.md`, `.github/workflows/test.yml`, `.github/workflows/docker.yaml`, `.github/workflows/docker-publish.yml`, new `scripts/production-gates/build-and-scan-images.ps1`, new `tests/critical/runtime/image_runtime_contract_test.go`, new `tests/critical/runtime/postgres_image_contract_test.go` | accepted RELEASE-GATES and SECURITY-TOOLCHAIN integrated; worktree rebased to both exact SHAs; first writer before DEPLOYMENT-ROLLBACK, OC-INTEGRATION, and CORE-PUBLIC-TRUTH take their compose/operator/docs epochs | preserve exact parent scan RED `operator=5`, `postgres=38`, `server=13`; build one tiny `CGO_ENABLED=0` `engram-healthcheck` binary and copy it into both shell-free runtime stages with JSON-form `HEALTHCHECK`; both container healthchecks call their direct or proxied `/api/ready`, parse JSON, and exit zero only on exact `status=ready`; server `/health` remains the intentional liveness surface and is tested separately, never used as Docker readiness; server uses pinned multi-arch `gcr.io/distroless/base-debian13@sha256:b78832f41c8128046807c24840ebee4f1c18ba7870eed423d8750c272c15e147` and proves the CGO server's `ldd` dependencies are present at runtime, UID `65532`, non-writable/read-only rootfs operation, liveness `/health` plus dependency-aware `/api/ready`, `HOME=/var/lib/engram`, and a persistent writable named or bind volume at `/var/lib/engram` provisioned as UID/GID `65532:65532` mode `0700` while every other rootfs path remains read-only; current `internal/config.DataDir()` derives `$HOME/.engram`, so `ENGRAM_DATA_DIR` is explicitly forbidden from docs/tests unless a separately owned config change first makes it live; operator uses pinned multi-arch `gcr.io/distroless/nodejs22-debian13@sha256:773a62fbe24a3f8c8b24b16fd59154627f8b406737bc906f83bf1732bc8907dd`, image node entrypoint plus `CMD [".output/server/index.mjs"]`, UID `65532`, nonroot ownership, a locked graph without picomatch/sigstore findings, and exact runtime `NUXT_OPERATOR_API_TARGET=http://server:37777` matching `apps/operator-console/nuxt.config.ts`; rewrite `deploy/docker-compose.runtime.yml` from stale `operator-web`/`NUXT_ENGRAM_API_TARGET` to canonical `operator-console`/`ghcr.io/thebtf/engram-operator-console`/`NUXT_OPERATOR_API_TARGET`, while DEPLOYMENT-ROLLBACK removes the stale standalone deployment consumer after its zero-consumer proof; add permanent `TestOperatorConsoleRuntimeTargetContract` so root HTTP 200 is insufficient and proxied `/api/health` plus `/api/ready` must reach the exact backend and return semantic ready; PostgreSQL source lock is proven Wolfi prototype `engram-prc-pg17-wolfi:prototype` image ID `sha256:6f1fcade7d5e873aa7624f821e593b4bb21e8f4c69c8f3d2de9f76134c175bbc`, packages `postgresql-17=17.10-r1` and `pgvector-17=0.8.1-r0`, zero findings at every severity, and vector/restart persistence; `deploy/postgres/Dockerfile` pins the Wolfi base digest and packages, sets `ENV LANG=C.UTF-8 LC_ALL=C.UTF-8` because `LANG=en_US.UTF-8` deterministically fails `initdb`, and excludes cache/build residue; exact helper command remains `pwsh ./scripts/production-gates/build-and-scan-images.ps1 -ServerTag engram:prc-server -OperatorTag engram:prc-operator-console -PostgresTag engram:prc-postgres -Platform linux/amd64 -ArtifactRoot .agent/reports/evidence/production-ready/image-remediation -NoAllowlist`; it builds all tags, captures Dockerfile/base/package/image IDs, scans each exact image ID, starts the canonical three-image compose stand, proves all health/readiness/version/vector/migration/restart/container-recreation/retained-marker contracts, injects absent/unowned/unwritable `HOME` storage, first-boot/restart permission, stale/missing/wrong operator API target, unreachable-backend, and malformed/error-body/HTTP-200 `/api/ready` failures, proves Docker health never becomes healthy in every negative case, always tears down probe containers/networks/volumes, verifies zero residue, and writes `final-image-set.json`; docs must name only the accepted PostgreSQL image and canonical operator-console release stack; acceptance requires zero HIGH/CRITICAL and no scanner exception/allowlist; checker rebuilds without local cache and repeats scan/runtime/failure-cleanup proof before post-review | -| SECURITY-PROJECT-IDENTITY | `work/prc-security-project-identity` | `internal/proxy/identity.go`, `internal/proxy/identity_test.go`, `internal/handlers/engramcore/tools.go`, new `internal/handlers/engramcore/project_identity_v2_test.go`, `proto/engram/v1/engram.proto`, generated `proto/engram/v1/engram.pb.go`, generated `proto/engram/v1/engram_grpc.pb.go`, `internal/grpcserver/server.go`, new `internal/grpcserver/project_identity_v2_test.go`, `internal/db/gorm/project_store.go`, `internal/db/gorm/project_store_test.go`, `internal/worker/handlers_context.go`, new `internal/worker/project_identity_v2_test.go`, `plugin/engram/hooks/lib.js`, `plugin/engram/hooks/lib.test.js`, new `plugin/engram/hooks/project-identity-v2.test.js`, `plugin/openclaw-engram/src/identity.ts`, `plugin/openclaw-engram/src/identity.test.ts`, `docs/arch/architecture.md` | convergent GE-003 identity namespace/migration decision | versioned full identity metadata; synchronous transactionally consistent register-and-resolve before first gRPC/HTTP data access; existing unambiguous legacy namespace continuity; contradictory full identities never merge; ambiguous legacy-only request fails before mutation with upgrade action; strict versioned high-entropy non-git anchor plus legacy alias compatibility; Go/Claude/OpenClaw shared vectors; explicit anchor sharing works; private authorization remains keycard/principal based; candidate/current and mixed-version restart/rollback proof | +| SECURITY-PROJECT-IDENTITY | `work/prc-security-project-identity-r3` | `internal/db/gorm/project_store.go`, `internal/db/gorm/project_store_test.go`, `internal/grpcserver/project_identity_v2_test.go` only | convergent GE-003 contract; R2 base `d22ebb9fe1914f514eaf9250e092dcd3b396f9cc`, head `9e2ce4e58a5cded69660ca9ac532d2167f315bb2`, live status `R2_CHECKER_REVISE_TWO_BLOCKERS_CONFIRMED`; R2 is not accepted and R3 must start from that exact head | close both confirmed checker defects: direct store and default gRPC reject `"a b"` and `"../x"` as `PROJECT_IDENTITY_INVALID` before DB/handler access, while colon/backslash outer selectors and legacy-alias internal whitespace retain required compatibility; concurrent same-anchor creation must not expose an `O_EXCL` winner's partially written final file or transient EOF to a loser, and must converge on complete durable bytes; preserve all other R2 C1-C5 claims as unaccepted hypotheses until checker replay; focused RED/GREEN/Prove-It, race/concurrency proof, full PG17/client parity, fresh checker and root post-review are mandatory before SECURITY-PROJECT-IDENTITY may unblock OPENCLAW-RELEASE | | OPENCLAW-RELEASE | `work/prc-openclaw-release` | `plugin/openclaw-engram/.gitignore`, `plugin/openclaw-engram/package.json`, new `plugin/openclaw-engram/package-lock.json`, `plugin/openclaw-engram/openclaw.plugin.json`, `plugin/openclaw-engram/README.md`, `.github/workflows/plugin-publish.yml`, `docs/RELEASE-PROTOCOL.md` | accepted SECURITY-PROJECT-IDENTITY integrated; worktree rebased to its exact integration SHA; accepted RELEASE-GATES `run-node-matrix.ps1` exists before checker execution; ordering edge `SECURITY-PROJECT-IDENTITY -> OPENCLAW-RELEASE -> INTEGRATION-RELEASE` | current baseline authority is package/plugin/npm `3.7.5`; record registry version and actual-diff semver decision after the identity source change, require the final local version to be publishable and greater than the current registry version when packageable source changed, align package/plugin/lock-top/lock-root versions, remove the lock ignore and track a generated lockfile v3, preserve declared dependency ranges unless a separately reviewed dependency change is recorded, replace publish-time `npm install` with `npm ci`, and prove from a fresh detached worktree with no pre-existing `node_modules`: tracked-lock/parity, `npm ci`, typecheck, tests, high-severity audit, package dry-run contents, clean Git status, publish/readback, independent checker PASS, and post-run review PASS under `.agent/reports/evidence/production-ready/openclaw-release/**` | | UPDATE-LIFECYCLE | `work/prc-security-updater` | `internal/update/update.go`, `internal/update/update_test.go`, `internal/worker/handlers_update.go`, `internal/worker/handlers_update_test.go`, `scripts/install.sh`, `scripts/install.ps1`, `.goreleaser.yaml`, `.github/workflows/release.yaml`, `plugin/engram/hooks/hook-cli.test.js` | convergent GE-004 update ownership/provenance decision; avoid `internal/worker/service.go` overlap | read-only version discovery resolves real zip/tar assets; `/api/update/apply`, `/api/update/restart`, and `/api/restart` fail before download/write/goroutine/self-spawn with stable externally-managed receipts; container updates only by image digest redeploy/rollback; plugin assets only by marketplace/launcher versioned cache; standalone route only from an authenticated release bundle; signed checksum identity and exact archive entry are mandatory; missing verifier/metadata, bad signature/checksum, oversized download/extraction, interrupted staging, activation/readiness failure, retry and rollback are deterministic and leave the prior artifact byte-identical; release archives contain required installer/manifest material; raw curl/irm-pipe execution is not a production contract | | SECURITY-REVIEW | checker-only | read-only review of SQL construction, template rendering, reverse proxy, updater/extraction, auth, secrets, and externally controlled inputs | SECURITY-TOOLCHAIN plus integrated candidate | no unresolved S3/S4 finding; dependency bump is not sufficient evidence | | DOCUMENT-INGEST-PUBLIC-TRUTH | `work/prc-document-ingest-public-truth` | `internal/mcp/server.go`, new `internal/mcp/ingest_document_description_test.go` only | INGEST-DOC-CLASSIFICATION complete; disjoint from snapshot demolition; CORE-PUBLIC-TRUTH owns the later README epoch | change the public `ingest_document` schema description from retired chunk/embed/search claims to the live metadata-only `DocumentStore.UpsertDocument` behavior; exact schema-description regression; no snapshot branch wiring and no claim that the separate live memory `ingest` route is covered | | MCP-STRUCTURED-INPUT-CLASSIFICATION | checker-only | read-only `.agent/reports/2026-07-10-mcp-structured-input-classification.md` | complete at SHA256 `3356F3AE6073F95E701707FCF451D63809AC186ED1DEA7321A7027C4C3122E7A` | verdict `CLASSIFIED_MUST_BUILD / BLOCKS_RELEASE`; exact hazards include malformed `promote_candidate.dry_run`, `store_memory.dry_run`, and `settings.encrypt`, lossy durable selectors, tag-clear ambiguity, partial `supersedes`, schema drift, and other route-specific mutation consumers; this row is diagnosis authority, not implementation permission | | MCP-STRUCTURED-INPUT-VALIDATION | `work/prc-mcp-structured-input-validation` | `internal/mcp/coerce.go`, `internal/mcp/coerce_test.go`, `internal/mcp/tools_candidates.go`, `internal/mcp/tools_candidates_test.go`, `internal/mcp/tools_memory.go`, `internal/mcp/tools_memory_edit_test.go`, `internal/mcp/tools_memory_significance.go`, `internal/mcp/tools_memory_significance_test.go`, `internal/mcp/tools_store_consolidated.go`, `internal/mcp/tools_settings.go`, `internal/mcp/tools_settings_test.go`, `internal/mcp/tools_documents_v2.go`, `internal/mcp/tools_rule_governance.go`, `internal/mcp/tools_rule_governance_test.go`, new `internal/mcp/structured_input_validation_test.go` | exact accepted DB-BULKOPS-BEHAVIORAL-EDGE-REWORK integration SHA recorded; worktree rebased to that SHA; MCP-STRUCTURED-INPUT-CLASSIFICATION complete; may not rewrite accepted candidate-snapshot invariants; any additional mutation handler found by the mandatory inventory requires a plan/state ledger amendment before edit | inventory every public mutation and alias from advertised schema through handler to durable writes; decode load-bearing IDs with `json.Decoder.UseNumber` or equivalent exact representation before float64 loss; accept only integral in-range JSON numbers for integer contracts and document any route-specific numeric-string compatibility; distinguish missing from present for booleans/arrays so any malformed present value fails before facade/store/audit calls; align candidate, memory/store, settings, document-comment, rule-governance, significance, `promote_candidate.dry_run`, edit-tags, and `store_memory.supersedes` schema/handler contracts; do not globally tighten read/filter coercers; prove zero durable writes, zero transition/audit delta, and no false-success response across missing/null/wrong type/fraction/exponent/`2^53+1`/`MaxInt64`/overflow/mixed arrays/repeated concurrent calls; table/property/fuzz plus real-dispatch proof, independent checker PASS, and post-review PASS before transfer to retained mutation owners or INTEGRATION-RELEASE | +| REDACTION-LIVE-CONTRACT | `work/prc-redaction-live-contract` | `internal/redaction/layer.go`, `internal/redaction/layer_test.go`, `internal/redaction/rejection_test.go`, new `internal/mcp/redaction_guard.go`, new `internal/mcp/redaction_guard_test.go`, `internal/mcp/tools_memory.go`, `internal/mcp/tools_rules.go`, new `internal/mcp/tools_memory_redaction_audit_test.go`, new `internal/mcp/tools_rules_redaction_audit_test.go`, `internal/worker/service.go`, new `internal/worker/service_redaction_test.go`, `docs/operating-engram.md`, `.agent/reports/evidence/production-ready/redaction-live-contract/**` | root challenge verdict `REVISE`; accepted AUTH-BOOTSTRAP-SECURITY integrated and worktree rebased to its exact SHA; `internal/mcp/tools_memory.go` transfers from MCP-STRUCTURED-INPUT-VALIDATION so malformed input remains zero-audit/zero-write; owns `service.go` after AUTH and before V7-RUNTIME-WIRING | classify the two skipped T051 tests as stale placeholders over a live dormant-flag-gated TG5 path; compute SHA-256 from the exact bytes compiled into the boot-captured rule set; validate non-empty bounded unique rule IDs; every matched non-dry-run memory/rule mutation synchronously persists a content-free pre-mutation redaction audit or fails before mutation; full rejection is durable; dry-run is zero-write; restart is required for rule-byte changes; RED/checksum/audit-fault/fresh-DB/race/repeat/secret-negative proof, independent checker and root post-review; no async audit fallback or demolished path resurrection | | DEMOLITION-SKIP-CLASSIFICATION | checker-only, then ROADMAP-RECONCILIATION owners | read-only classification of all 25 skip events plus four `internal/graph` T015/T016 failures and `internal/mcp/integration_tg3_hybrid_test.go` failure; any resulting edit is first assigned to an exact disjoint lane | RELEASE-GATES full diagnostic | every item classified `live`, `pre-demolition-stale`, `dormant-flag-gated`, `must-build`, `supported-platform allowlist`, or `release blocker`; no graph/rerank/scoring remnant is repaired merely because a test exists; each allowed skip has platform/prerequisite evidence and a separate proof lane where the behavior is required | +| RETRIEVAL-VECTOR-CONTRACT | `work/prc-retrieval-vector-contract` | `internal/retrieval/hybrid_integration_test.go` only | accepted DB-EMBEDDING-STATS product candidate plus exact skip classification; fresh PostgreSQL with pgvector | remove the external `ENGRAM_EMBEDDING_URL` skip by serving a deterministic in-process OpenAI-compatible `/v1/embeddings` endpoint; assert request model/dimensions/input, return exact `embedding.EmbeddingDim` vectors, persist the seed chunk, use a lexical-miss query and prove HybridSearch returns the seeded memory through positive vector contribution rather than FTS fallback; endpoint error/wrong-dimension negatives remain explicit; repeat/race/fresh-DB/zero-residue, checker and post-review | +| STATIC-EMBED-CONTRACT | `work/prc-static-embed-contract` | `internal/worker/static_embed_test.go` only | exact skip classification; IMAGE-REMEDIATION retains runtime generated-asset proof | eliminate the source-checkout skip by parsing `internal/worker/static.go` and requiring the exact `//go:embed all:static` directive; if generated `_nuxt/_*.js` files exist, continue requiring every disk file in `staticSubFS`; the test must fail if `all:` is removed even when no generated asset exists; IMAGE-REMEDIATION separately builds the operator console and proves underscore chunks are present and served from the final image; focused/full no-skip proof, checker and post-review | +| PRE-V5-UPGRADE-CONTRACT | `work/prc-pre-v5-upgrade-contract` | `internal/db/gorm/migrations_integration_test.go`, `internal/grpcserver/credential_migration_test.go`, new `tests/fixtures/pre-v5/**`, new `tests/critical/recovery/pre_v5_upgrade_test.go`, new `scripts/production-smoke/customer/run-pre-v5-upgrade.ps1` | exact skip classification; immutable source tag `v4.5.0`; accepted security/data candidates; disposable PostgreSQL 17 | never recreate a legacy table in the current fresh schema: replace the migration-074 skip with an ordering/final-schema assertion; move the credential roundtrip test behind explicit `legacyupgrade` build tag so ordinary suites contain zero skip, then generate or verify a checksum-pinned v4.5.0 fixture with encrypted credential, memory/rule inputs and exact historical migration state; upgrade with the candidate, prove migration 090 preserves ciphertext/fingerprint and decrypts every fixture secret byte-for-byte, migration 099 drops observations only after copied counts match, current reads/restart work, wrong key/corrupt ciphertext/interrupted upgrade fail safely, and zero foreign DB/session residue remains; dedicated tagged test may not skip; checker verifies fixture provenance and mutations to copy/drop order fail | | T007-COMPAT-DEMOLITION-CLASSIFICATION | `work/prc-t007-compat-classification` | `internal/mcp/store_memory_compat_t007_test.go` only | RELEASE-GATES full diagnostic; independent read-only current-contract/demolition classification before edit | classify `TestEC_F1_TagDerivedBackfill_T007` as live, stale, dormant, must-build, or current-contract test correction; then, only if test correction is the accepted result, edit the owned test and run `pwsh ./scripts/production-gates/run-db-suite.ps1 -Package ./internal/mcp -Run '^TestEC_F1_TagDerivedBackfill_T007$' -FreshDatabase -Repeat 3 -FailOnUnexpectedSkip`; if production code is required, stop and amend this ledger with exact disjoint paths before edit; checker, post-review, zero-session artifact under `.agent/reports/evidence/production-ready/t007-compat/` | | DB-RULES-ISOLATION | `work/prc-db-rules-isolation` | `internal/worker/handlers_rules_test.go`, new `scripts/production-gates/run-db-rules-isolation.ps1` | all preceding diagnostic functional lanes integrated; RELEASE-GATES foundation | classify production defect vs fixture contamination before edit; run `pwsh ./scripts/production-gates/run-db-rules-isolation.ps1 -Mode SharedSequence -Repeat 3 -FailOnUnexpectedSkip -ArtifactRoot .agent/reports/evidence/production-ready/db-rules-isolation/shared` so the three named tests execute after the preceding diagnostic packages against one fresh DB, then run the same command with `-Mode IsolatedSchemas -ArtifactRoot .agent/reports/evidence/production-ready/db-rules-isolation/isolated`; prove no global-row/order false failure or false green and zero residual sessions; any production-path need stops for a root ledger amendment; independent checker + post-review precede integration | +| COVERAGE-CMD-ENGRAM | `work/prc-coverage-cmd-engram` | new `cmd/engram/production_readiness_coverage_test.go` only | accepted LAUNCHER-FIRST-RUN and SECURITY-PROJECT-IDENTITY integrated; exact package floor remains immutable | raise live `cmd/engram` statement coverage from measured 6.39% to at least 10% through launcher/version-skew/identity/failure behavior; no source edit, threshold reduction, generated-code padding, mock-only line chasing, or generic skip; focused/full profile, checker and post-review | +| COVERAGE-CMD-SERVER | `work/prc-coverage-cmd-server` | new `cmd/engram-server/production_readiness_coverage_test.go` only | accepted runtime/readiness/identity/observability owners integrated; exact package floor remains immutable | raise live `cmd/engram-server` statement coverage from measured 0.00% to at least 10% through startup/config/readiness/failure behavior; no source edit, threshold reduction, generated-code padding, mock-only line chasing, or generic skip; focused/full profile, checker and post-review | +| COVERAGE-UPDATE | `work/prc-coverage-update` | new `internal/update/production_readiness_coverage_test.go` only | accepted UPDATE-LIFECYCLE integrated; exact package floor remains immutable | raise live `internal/update` statement coverage from measured 0.00% to at least 20% across read-only discovery, signed/checksummed staging, atomic activation/readiness, retry and rollback contracts; no in-process self-mutation resurrection, source edit, threshold reduction, or generic skip; focused/full profile, checker and post-review | +| COVERAGE-OVERALL-ROLLUP | checker-only | evidence prefix `.agent/reports/evidence/production-ready/coverage-overall-rollup/**` only | all package-floor owners integrated; complete repository profile from the exact integrated candidate | run the complete repository profile without package omission and require immutable overall statement coverage at least 60%, loom at least 70%, cmd floors 10/10, update 20, and worker/mcp/gorm 55/55/55; compare package inventory to `go list ./...`; no threshold reduction, rounding-up, stale profile, filtered subset, or maker-authored acceptance; fresh checker evidence and root post-review | | COVERAGE-WORKER | `work/prc-coverage-worker` | new `internal/worker/production_readiness_coverage_test.go` only | accepted DB-AUTH, DB-CRYSTALLIZATION, OBSERVABILITY-OTLP, LAUNCHER and V7 runtime changes integrated | high-value startup/auth/update/readiness/failure contracts add real behavior coverage without source edits or mock-only line chasing; package and full profile evidence | | COVERAGE-MCP | `work/prc-coverage-mcp` | new `internal/mcp/production_readiness_coverage_test.go` only | accepted project-identity/privacy and demolition classification integrated | supported store/recall/context/project/error boundaries covered through real handlers/stores; no removed scoring/rerank behavior resurrected; package and full profile evidence | | COVERAGE-GORM | `work/prc-coverage-gorm` | new `internal/db/gorm/production_readiness_coverage_test.go` only | all DB functional lanes integrated | migration/error/transaction/recovery/empty-state boundaries covered on fresh schemas without order dependence; package and full profile evidence | @@ -135,7 +150,7 @@ Durable local layout: `.agent/worktrees//` (already ignored through `.git | PRIVACY-BOUNDARIES | `work/prc-privacy-boundaries` | `internal/scope/domain_policy.go`, `internal/scope/domain_policy_test.go`, `internal/scope/filter.go`, `internal/scope/filter_test.go`, `internal/scope/filter_principal_test.go`, `internal/scope/filter_w4_test.go`, `internal/principalmemory/access_policy.go`, `internal/principalmemory/access_policy_test.go`, `internal/principalmemory/domain_registry.go`, `internal/principalmemory/domain_registry_test.go`, `internal/principalmemory/query_service.go`, `internal/principalmemory/query_service_test.go`, `internal/mcp/tools_principal_memory.go`, `internal/mcp/tools_principal_memory_test.go`, `internal/mcp/tools_recall_principal_test.go`, `internal/mcp/recall_visibility_backfill_test.go`, `internal/mcp/store_memory_principal_test.go`, `internal/worker/handlers_principal_memory.go`, `internal/worker/handlers_principal_memory_test.go`, `internal/worker/scope_bypass_w4_test.go`, `internal/worker/retention.go`, `internal/worker/retention_test.go`, `internal/db/gorm/memory_store.go`, `internal/db/gorm/memory_store_principal_test.go`, `internal/db/gorm/memory_store_principal_query_test.go`, `internal/db/gorm/purge_store_test.go`, `tests/critical/data_boundaries/principal_project_retention_test.go` | RELEASE-GATES foundation; accepted DB-BULKOPS integrated; worktree rebased to exact integration SHA before `memory_store.go` ownership transfers | cross-principal/project negatives, two-workstation sharing, shared/public behavior, configured/disabled retention, destructive boundaries, flag-off vs production-profile behavior | | CRITICAL-HARNESS | `work/prc-critical-harness` | `tests/critical/customer_mode/customer_mode_test.go`, `tests/critical/customer_mode/compatibility_test.go`, `tests/critical/customer_mode/cross_agent_test.go`, `scripts/production-smoke/customer/run-customer-mode.ps1`, `scripts/production-smoke/customer/run-client-compatibility.ps1`, `scripts/production-smoke/customer/run-cross-agent.ps1`, `scripts/production-smoke/customer/run-diagnostic-matrix.ps1`, `scripts/production-smoke/customer/assert-product-works.ps1` | integrated RELEASE-GATES foundation | wrapper/direct/customer/restart/upgrade/mixed-version/cross-agent/cross-workstation matrix and machine-readable `PRODUCT_WORKS`; forbidden path: `scripts/production-smoke/verify-otlp.ps1` | | CORE-PUBLIC-TRUTH | `work/prc-core-public-truth` | `README.md`, `README.ru.md`, `README.zh.md`, `CONTRIBUTING.md`, `CHANGELOG.md`, `Makefile`, `.env.example`, `docs/DEPLOYMENT.md`, `docs/MIGRATION.md`, `docs/PRODUCTION-TESTING-PLAYBOOK.md`, `docs/arch/CONFIGURATION.md`, `docs/arch/QUICKSTART.md`, `docs/release-notes/v6.43.0.md`, `docs/public/engram.jpg`, `plugin/engram/commands/setup.md`, `plugin/engram/commands/doctor.md` | accepted IMAGE-REMEDIATION integrated and worktree rebased to its exact SHA; M5 commands proven by other lanes; `core_safe_point_version` release analysis | zero active HTTP-MCP/SSE/API-token resurrection; documented first run executed verbatim; one canonical operator-console deployment/support path and accepted PostgreSQL image identity; this row describes only the M5 safe point and cannot serve as M7 final public truth | -| FINAL-PUBLIC-TRUTH | `work/prc-final-public-truth` | `README.md`, `README.ru.md`, `README.zh.md`, `CONTRIBUTING.md`, `CHANGELOG.md`, `Makefile`, `.env.example`, `docs/DEPLOYMENT.md`, `docs/MIGRATION.md`, `docs/PRODUCTION-TESTING-PLAYBOOK.md`, `docs/arch/CONFIGURATION.md`, `docs/arch/QUICKSTART.md`, `docs/public/engram.jpg`, `plugin/engram/commands/setup.md`, `plugin/engram/commands/doctor.md`; no versioned release-note path is authorized yet | all M6 implementation CRs integrated; `.agent/reports/evidence/production-ready/release/final-version.json` records the actual-diff semver decision, exact release-note path, image tags/digests, plugin version, and rollback predecessor | `BLOCKED` until root amends this row with one exact versioned `docs/release-notes/...md` file and records the public-file epoch transfer; final docs/changelog/install/upgrade/rollback claims are rerun against final published artifacts; no placeholder path may be edited | +| FINAL-PUBLIC-TRUTH | `work/prc-final-public-truth` | `README.md`, `README.ru.md`, `README.zh.md`, `CONTRIBUTING.md`, `CHANGELOG.md`, `Makefile`, `.env.example`, `docs/DEPLOYMENT.md`, `docs/MIGRATION.md`, `docs/PRODUCTION-TESTING-PLAYBOOK.md`, `docs/operating-engram.md`, `docs/arch/CONFIGURATION.md`, `docs/arch/QUICKSTART.md`, `docs/public/engram.jpg`, `plugin/engram/commands/setup.md`, `plugin/engram/commands/doctor.md`; no versioned release-note path is authorized yet | all M6 implementation CRs integrated; `.agent/reports/evidence/production-ready/release/final-version.json` records the actual-diff semver decision, exact release-note path, image tags/digests, plugin version, and rollback predecessor | `BLOCKED` until root amends this row with one exact versioned `docs/release-notes/...md` file and records the public-file epoch transfer; final docs/changelog/install/upgrade/rollback claims are rerun against final published artifacts; no placeholder path may be edited | | LAUNCHER-FIRST-RUN | `work/prc-launcher-first-run` | `cmd/engram/main.go`, `cmd/engram/main_test.go`, `cmd/engram/wiring.go`, `cmd/engram/exec_windows.go`, `cmd/engram/exec_unix.go`, `plugin/engram/.engram-project`, `plugin/engram/scripts/run-engram.js`, `plugin/engram/scripts/run-engram.test.js`, `plugin/engram/scripts/ensure-binary.js`, `plugin/engram/scripts/ensure-binary.test.js` | M0; preserve dirty main and legacy launcher worktree; accepted SECURITY-PROJECT-IDENTITY protocol and shared vectors | fail-closed workstation keycard gate; marker format and wrapper identity implement the accepted GE-003 versioned anchor/legacy-alias protocol rather than independently freezing a format; direct/wrapper parity; version-skew repair; clean install; store -> new process -> recall and automatic injection; restart/upgrade | | OC-INTEGRATION | `work/prc-operator-console-integration` | `apps/operator-console/**` only | accepted IMAGE-REMEDIATION and AUTH-BOOTSTRAP-SECURITY API/capability contract integrated; worktree rebased to both exact SHAs; `package.json`/`package-lock.json` ownership transfers from IMAGE-REMEDIATION; ROADMAP issues the reviewed OC contract; inventory legacy OC heads/dirt | current-base integration; exact required bootstrap artifacts `apps/operator-console/pages/setup.vue`, `apps/operator-console/composables/useOperatorBootstrap.ts`, and `apps/operator-console/tests/browser/production-auth-bootstrap.spec.ts`; preserve `nuxt.config.ts` live `NUXT_OPERATOR_API_TARGET` contract and add `apps/operator-console/tests/browser/production-api-proxy.spec.ts` proving the shipped runtime proxy reaches the exact backend `/api/health` and `/api/ready` before/after restart; root HTTP 200 with fallback `unleashed.lan`, timeout, or wrong backend is a failure; operator capability never enters URL/storage/log/screenshot/trace; remote attacker, missing/invalid/replay/revoked/restart states; keycard issue/use/revoke; live API readback; browser console/network/accessibility; no mock/placeholder dishonesty; rerun locked install, audit, build, browser proof, operator image rebuild and zero HIGH/CRITICAL scan after any dependency change | | S4B-CONTRACT | `work/prc-s4b-contract` | `.agent/specs/engram-v7-directives-surfacing/**` only | M0 | remove operator-console contamination; preserve canonical `HintProposal` return contract; regenerate checklist/tasks and validate/challenge before code | @@ -150,7 +165,8 @@ Durable local layout: `.agent/worktrees//` (already ignored through `.git | NORTHSTAR-MEM-CONTRACTS | `work/prc-northstar-mem-contracts` | new `.agent/specs/engram-absorption/mem-residual/spec.md`, `.agent/specs/engram-absorption/mem-residual/plan.md`, `.agent/specs/engram-absorption/mem-residual/checklists/general.md`, `.agent/specs/engram-absorption/mem-residual/changes/CR-001-initial-scope/change.md`, `.agent/specs/engram-absorption/mem-residual/changes/CR-001-initial-scope/tasks.md` | M5 core safe point; live/stale/dormant/must-build classification against current v5 code | exact commands `$nvmd-platform:nvmd-validate .agent/specs/engram-absorption/mem-residual` and `$nvmd-platform:challenging-plans .agent/specs/engram-absorption/mem-residual/plan.md`; each gap is classified against shipped retrieval/crystallization behavior, exact future code/test paths are named, and customer proof measures recall/import/lesson/skill behavior without restoring demolished cross-encoder or scoring stages; artifacts under `.agent/reports/evidence/production-ready/northstar-contracts/mem-residual/` | | NORTHSTAR-EFFECTIVENESS-CONTRACTS | `work/prc-northstar-effectiveness-contracts` | new `.agent/specs/engram-effectiveness/production-ready-residual/spec.md`, `.agent/specs/engram-effectiveness/production-ready-residual/plan.md`, `.agent/specs/engram-effectiveness/production-ready-residual/checklists/general.md`, `.agent/specs/engram-effectiveness/production-ready-residual/changes/CR-001-initial-scope/change.md`, `.agent/specs/engram-effectiveness/production-ready-residual/changes/CR-001-initial-scope/tasks.md` | M5 core safe point; current effectiveness PRD/roadmap reconciled to live v5 code | exact commands `$nvmd-platform:nvmd-validate .agent/specs/engram-effectiveness/production-ready-residual` and `$nvmd-platform:challenging-plans .agent/specs/engram-effectiveness/production-ready-residual/plan.md`; exact future code/test paths; customer/dogfood proof for truthful staleness, citation/usefulness/noise, anti-poisoning, and any retained metric without fabricated zero or dormant flag output; artifacts under `.agent/reports/evidence/production-ready/northstar-contracts/effectiveness/` | | NORTHSTAR-SETTINGS-CONTRACTS | `work/prc-northstar-settings-contracts` | new `.agent/specs/settings-store/production-ready-residual/spec.md`, `.agent/specs/settings-store/production-ready-residual/plan.md`, `.agent/specs/settings-store/production-ready-residual/checklists/general.md`, `.agent/specs/settings-store/production-ready-residual/changes/CR-001-initial-scope/change.md`, `.agent/specs/settings-store/production-ready-residual/changes/CR-001-initial-scope/tasks.md` | M5 core safe point; current settings PRD/architecture and partial implementation classified | exact commands `$nvmd-platform:nvmd-validate .agent/specs/settings-store/production-ready-residual` and `$nvmd-platform:challenging-plans .agent/specs/settings-store/production-ready-residual/plan.md`; exact future code/test paths; customer proof for secret-safe persisted settings, restart/readback, declared hot-reload versus restart-required behavior, unavailable-store fallback, and thin-client propagation where retained; artifacts under `.agent/reports/evidence/production-ready/northstar-contracts/settings/` | -| CONTROL-PLANE | root-owned, no maker worktree | `.agent/session-state/**` only through `C:\Users\btf\.codex\plugins\cache\nvmd-ai-kit\nvmd-platform\2.85.3\skills\session\scripts\state-ops.cjs`; no hand edits | independent lanes may proceed | seq74 is `STOOD_DOWN`, missed pickup preserved, assignment `omp=developer/codex=pm`, detector and `validate --all` recorded; no unclassified OPEN counter | +| CONTROL-PLANE | root-owned, no maker worktree | `.agent/session-state/**` through the installed session/goal control-plane tooling only; no subordinate or hand-authored assignment/front-door writes | independent lanes may proceed under the verbatim user-resumed objective | live register status is `RUNNING_GOAL_STATE_REACTIVATION_UNAVAILABLE`: the native goal service still reports BLOCKED and refuses recreation as an unfinished goal; preserve that mismatch truthfully, do not report ACTIVE or fabricate a replacement goal object, and keep prior seq74/missed-pickup evidence as history | +| INTEGRATION-RELEASE | root-owned, no maker worktree | `.agent/reports/evidence/production-ready/integration-release/**`, `.agent/reports/evidence/production-ready/release/**` only; no product path is granted by this row | every predecessor maker/checker/post-review verdict accepted; exact integration ancestry and current scope-map/register freeze revalidated; release autonomy and coordination gates satisfied | root alone integrates accepted commits in declared epoch order, reruns the complete immutable release gate set, executes CUSTOMER-MODE M7 emulation, resolves `final_ready_version`, publishes only from a clean exact release commit, and records tag/image/plugin/readback/rollback identities; current status `BLOCKED_BY_RELEASE_GATES_PREVIEW_MEASURED` is not an acceptance or permission signal | The IMAGE-REMEDIATION PostgreSQL sub-contract is part of that row's owned `deploy/postgres/Dockerfile`, compose, helper, and critical-test paths: runtime UID/GID is `70:70`; rootfs is read-only; all capabilities are dropped; `no-new-privileges` is set; UID-owned tmpfs is limited to `/tmp` and `/var/run/postgresql`; PGDATA is an explicitly owned persistent named volume at `/var/lib/postgresql/data`. A tmpfs-only PGDATA negative must demonstrate the proved loss mode, while the positive removes the first container, creates a new one on the same volume, and re-proves PostgreSQL `17.10`, pgvector `0.8.1`, migrations, and retained vector/application markers. DEPLOYMENT-ROLLBACK must preserve this contract after compose transfer. @@ -164,7 +180,8 @@ Rows are exclusive within an ownership epoch. A repeated path below is a seriali | Exact path | Current/first epoch | Next epoch | Transfer gate | | --- | --- | --- | --- | -| `internal/db/gorm/candidate_store.go`, `internal/db/gorm/candidate_store_test.go` | DB-BULKOPS | DB-BULKOPS-BEHAVIORAL-EDGE-REWORK -> DB-GOVERNANCE -> CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK | rejected predecessor checker/hash recorded; rework uses exact base `68b2ce5835c7c6efdf1c68da9eedcb8d9c3837ef`; each accepted successor requires checker PASS, post-review PASS, integration SHA, and exact rebase before edit | +| `internal/db/gorm/candidate_store.go` | DB-BULKOPS | DB-BULKOPS-BEHAVIORAL-EDGE-REWORK -> DB-GOVERNANCE -> CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK | rejected predecessor checker/hash recorded; rework uses exact base `68b2ce5835c7c6efdf1c68da9eedcb8d9c3837ef`; each accepted successor requires checker PASS, post-review PASS, integration SHA, and exact rebase before edit | +| `internal/db/gorm/candidate_store_test.go` | DB-BULKOPS | DB-BULKOPS-BEHAVIORAL-EDGE-REWORK -> DB-TEST-POOL-HYGIENE -> DB-GOVERNANCE -> CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK | behavioral-edge head `bd68c05baf4b7250096dd84f56bebea2aa555970` remains current authority until pool-hygiene product `276337b3e96aa5af6d2e7dd9a0002ff957e5ffc9` plus evidence `68242c48aaad62ec087166eeb9ea32f14d189450` receive fresh checker and post-review; later successors require exact integration and rebase | | `internal/mcp/tools_bulkops.go`, `internal/mcp/tools_dryrun_test.go` | DB-BULKOPS | DB-BULKOPS-BEHAVIORAL-EDGE-REWORK | rejected predecessor checker/hash recorded; rework base is exact rejected head; checker and post-review PASS plus integration SHA close the transfer | | `internal/bulkops/facade.go` | DB-BULKOPS | INGEST-DOC-SNAPSHOT-DEMOLITION -> DURABLE-AUDIT-BOUNDARIES | behavioral-edge composite checker and post-review PASS; exact integration SHA recorded; demolition rebased before edit; historical ingest guard green before durable-audit fault work | | `internal/bulkops/facade_test.go` | DB-BULKOPS | INGEST-DOC-SNAPSHOT-DEMOLITION | accepted behavioral-edge composite integrated; demolition worktree rebased; focused historical-only regressions PASS before integration | @@ -172,7 +189,9 @@ Rows are exclusive within an ownership epoch. A repeated path below is a seriali | `pkg/models/snapshot.go` | DB-BULKOPS | INGEST-DOC-SNAPSHOT-DEMOLITION | accepted behavioral-edge composite integrated; demolition successor rebased; persistence-compatibility and non-executable regressions PASS | | `internal/db/gorm/user_store.go` | DB-AUTH | AUTH-BOOTSTRAP-SECURITY -> DURABLE-AUDIT-BOUNDARIES | each predecessor checker and post-review PASS, integration SHA recorded, successor rebased; no simultaneous writer | | `internal/worker/auth_handlers.go` | DB-AUTH | AUTH-BOOTSTRAP-SECURITY -> DURABLE-AUDIT-BOUNDARIES | each predecessor checker and post-review PASS, integration SHA recorded, successor rebased; no simultaneous writer | -| `internal/worker/service.go` | AUTH-BOOTSTRAP-SECURITY | V7-RUNTIME-WIRING | auth bootstrap checker and post-review PASS, commit integrated, V7 worktree rebased, auth route regression rerun | +| `internal/worker/service.go` | AUTH-BOOTSTRAP-SECURITY | REDACTION-LIVE-CONTRACT -> V7-RUNTIME-WIRING | auth bootstrap checker and post-review PASS, commit integrated, redaction worktree rebased and boot-captured rules proved; V7 later rebases the redaction integration and reruns both auth and redaction route regressions | +| `internal/mcp/tools_memory.go` | MCP-STRUCTURED-INPUT-VALIDATION | REDACTION-LIVE-CONTRACT | structured-input checker/post-review PASS and exact integration SHA; redaction successor rebased so malformed input remains zero-audit/zero-write before matched-mutation audit enforcement | +| `docs/operating-engram.md` | REDACTION-LIVE-CONTRACT | FINAL-PUBLIC-TRUTH | redaction live contract checker/post-review PASS and exact integration SHA; FINAL rebased and revalidates the operator claims against final published artifacts | | `Dockerfile` | SECURITY-TOOLCHAIN | IMAGE-REMEDIATION | toolchain checker and post-review PASS, commit integrated, image worktree rebased, zero-finding rebuild and scan before successor integration | | `.github/workflows/test.yml` | RELEASE-GATES | IMAGE-REMEDIATION | release-gates checker and post-review PASS, commit integrated, image worktree rebased before workflow image-identity changes | | `docker-compose.yml`, `deploy/docker-compose.runtime.yml` | IMAGE-REMEDIATION | DEPLOYMENT-ROLLBACK | image checker and post-review PASS, `final-image-set.json` recorded, deployment worktree rebased, fresh scan after edits | diff --git a/.agent/plans/2026-07-10-engram-production-ready-ownership-state.json b/.agent/plans/2026-07-10-engram-production-ready-ownership-state.json index 98fe181a..a1f30a35 100644 --- a/.agent/plans/2026-07-10-engram-production-ready-ownership-state.json +++ b/.agent/plans/2026-07-10-engram-production-ready-ownership-state.json @@ -2,7 +2,11 @@ "schema_version": 1, "plan": { "path": ".agent/plans/2026-07-10-engram-production-ready-master-plan.md", - "sha256": "d7bcfd122e456d9b764595524292d53b0c99447b7f716a1be0707341e4681bf9" + "sha256": "fd2b223a9a62848efc39e1c33bf739bada191508bccb7ba9a73140185638e43d" + }, + "scope_map": { + "path": ".agent/plans/2026-07-10-engram-production-ready-scope-map.json", + "sha256": "81093184036672008d6b85dfa88a431998ef70b587ab11475aa2b315f03ddf79" }, "path_epochs": [ { @@ -27,13 +31,16 @@ "integration_sha": null } ], - "required_successor_base_sha": "68b2ce5835c7c6efdf1c68da9eedcb8d9c3837ef" + "required_successor_base_sha": "68b2ce5835c7c6efdf1c68da9eedcb8d9c3837ef", + "current_owner_head_sha": "bd68c05baf4b7250096dd84f56bebea2aa555970", + "current_owner_status": "PASS_WITH_CONCERNS_NOT_INTEGRATED" }, { "path": "internal/db/gorm/candidate_store_test.go", "ordered_owners": [ "DB-BULKOPS", "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK", + "DB-TEST-POOL-HYGIENE", "DB-GOVERNANCE", "CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK" ], @@ -51,7 +58,15 @@ "integration_sha": null } ], - "required_successor_base_sha": "68b2ce5835c7c6efdf1c68da9eedcb8d9c3837ef" + "required_successor_base_sha": "68b2ce5835c7c6efdf1c68da9eedcb8d9c3837ef", + "current_owner_head_sha": "bd68c05baf4b7250096dd84f56bebea2aa555970", + "current_owner_status": "PASS_WITH_CONCERNS_NOT_INTEGRATED", + "pending_transition": { + "owner": "DB-TEST-POOL-HYGIENE", + "product_sha": "276337b3e96aa5af6d2e7dd9a0002ff957e5ffc9", + "evidence_sha": "68242c48aaad62ec087166eeb9ea32f14d189450", + "status": "READY_FOR_CHECK_NOT_CURRENT_AUTHORITY" + } }, { "path": "internal/mcp/tools_bulkops.go", @@ -73,7 +88,9 @@ "integration_sha": null } ], - "required_successor_base_sha": "68b2ce5835c7c6efdf1c68da9eedcb8d9c3837ef" + "required_successor_base_sha": "68b2ce5835c7c6efdf1c68da9eedcb8d9c3837ef", + "current_owner_head_sha": "bd68c05baf4b7250096dd84f56bebea2aa555970", + "current_owner_status": "PASS_WITH_CONCERNS_NOT_INTEGRATED" }, { "path": "internal/mcp/tools_dryrun_test.go", @@ -95,7 +112,9 @@ "integration_sha": null } ], - "required_successor_base_sha": "68b2ce5835c7c6efdf1c68da9eedcb8d9c3837ef" + "required_successor_base_sha": "68b2ce5835c7c6efdf1c68da9eedcb8d9c3837ef", + "current_owner_head_sha": "bd68c05baf4b7250096dd84f56bebea2aa555970", + "current_owner_status": "PASS_WITH_CONCERNS_NOT_INTEGRATED" }, { "path": "internal/bulkops/facade.go", @@ -170,6 +189,7 @@ "path": "internal/worker/service.go", "ordered_owners": [ "AUTH-BOOTSTRAP-SECURITY", + "REDACTION-LIVE-CONTRACT", "V7-RUNTIME-WIRING" ], "current_owner": "AUTH-BOOTSTRAP-SECURITY", @@ -410,6 +430,28 @@ "completed_predecessors": [], "required_successor_base_sha": null }, + { + "path": "internal/mcp/tools_memory.go", + "ordered_owners": [ + "MCP-STRUCTURED-INPUT-VALIDATION", + "REDACTION-LIVE-CONTRACT" + ], + "current_owner": "MCP-STRUCTURED-INPUT-VALIDATION", + "transition_kind": "integration", + "completed_predecessors": [], + "required_successor_base_sha": null + }, + { + "path": "docs/operating-engram.md", + "ordered_owners": [ + "REDACTION-LIVE-CONTRACT", + "FINAL-PUBLIC-TRUTH" + ], + "current_owner": "REDACTION-LIVE-CONTRACT", + "transition_kind": "integration", + "completed_predecessors": [], + "required_successor_base_sha": null + }, { "path": "internal/worker/dream_cycle.go", "ordered_owners": [ diff --git a/.agent/plans/2026-07-10-engram-production-ready-scope-map.json b/.agent/plans/2026-07-10-engram-production-ready-scope-map.json new file mode 100644 index 00000000..9615241f --- /dev/null +++ b/.agent/plans/2026-07-10-engram-production-ready-scope-map.json @@ -0,0 +1,98 @@ +{ + "schema_version": 1, + "kind": "production-ready-scope-map", + "plan_path": ".agent/plans/2026-07-10-engram-production-ready-master-plan.md", + "ownership_state_path": ".agent/plans/2026-07-10-engram-production-ready-ownership-state.json", + "register_snapshot": { + "source_path": "D:\\Dev\\engram\\.agent\\reports\\production-readiness-evidence-register.json", + "sha256": "AB5F882FA110CA823A317061ECBCA0C62516702735325893A56206F9E7A29415", + "updated_at": "2026-07-10T22:46:01.2938194+03:00", + "row_count": 67, + "unique_slice_count": 67, + "goal_status": "USER_RESUMED_TOOL_STATUS_BLOCKED" + }, + "allowed_classifications": [ + "maker", + "checker-evidence", + "meta-fold", + "historical", + "root-integration" + ], + "live_conformance_policy": { + "mode": "structural-projection", + "exact_fields": ["slice", "classification", "plan_owners"], + "snapshot_only_fields": ["register_snapshot.sha256", "register_snapshot.updated_at", "register_status", "register_head", "register_notes"], + "load_bearing_entry_field": "load_bearing", + "acceptance_tokens": ["PASS", "READY_FOR_INTEGRATION", "PRODUCT_ACCEPTED", "ACCEPTED", "INTEGRATED", "COMPLETE"], + "rejection_tokens": ["REVISE", "REJECT", "FAIL", "DIAGNOSTIC", "HOLD", "BLOCKED", "PENDING", "UNACCEPTED", "NOT_ACCEPTED"] + }, + "entries": [ + {"slice":"AUTH-BOOTSTRAP-SECURITY","classification":"maker","plan_owners":["AUTH-BOOTSTRAP-SECURITY"],"register_status":"BLOCKED_BY_DB_AUTH","register_head":""}, + {"slice":"CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK","classification":"maker","plan_owners":["CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK"],"register_status":"BLOCKED_BY_DB_GOVERNANCE","register_head":""}, + {"slice":"CONTROL-PLANE","classification":"root-integration","plan_owners":["CONTROL-PLANE"],"register_status":"RUNNING_GOAL_STATE_REACTIVATION_UNAVAILABLE","register_head":""}, + {"slice":"CORE-PUBLIC-TRUTH","classification":"maker","plan_owners":["CORE-PUBLIC-TRUTH"],"register_status":"BLOCKED_BY_M5_IMPLEMENTATION","register_head":""}, + {"slice":"COVERAGE-CMD-ENGRAM","classification":"maker","plan_owners":["COVERAGE-CMD-ENGRAM"],"register_status":"READY_FOR_PLAN_AMENDMENT","register_head":""}, + {"slice":"COVERAGE-CMD-SERVER","classification":"maker","plan_owners":["COVERAGE-CMD-SERVER"],"register_status":"READY_FOR_PLAN_AMENDMENT","register_head":""}, + {"slice":"COVERAGE-GORM","classification":"maker","plan_owners":["COVERAGE-GORM"],"register_status":"PENDING","register_head":""}, + {"slice":"COVERAGE-LOOM","classification":"maker","plan_owners":["COVERAGE-LOOM"],"register_status":"READY_FOR_MAKER_NO_GENERIC_SKIPS","register_head":""}, + {"slice":"COVERAGE-MCP","classification":"maker","plan_owners":["COVERAGE-MCP"],"register_status":"PENDING","register_head":""}, + {"slice":"COVERAGE-OVERALL-ROLLUP","classification":"checker-evidence","plan_owners":["COVERAGE-OVERALL-ROLLUP"],"register_status":"BLOCKED_BY_PACKAGE_FLOORS","register_head":""}, + {"slice":"COVERAGE-UPDATE","classification":"maker","plan_owners":["COVERAGE-UPDATE"],"register_status":"READY_FOR_PLAN_AMENDMENT","register_head":""}, + {"slice":"COVERAGE-WORKER","classification":"maker","plan_owners":["COVERAGE-WORKER"],"register_status":"PENDING","register_head":""}, + {"slice":"CRITICAL-HARNESS","classification":"maker","plan_owners":["CRITICAL-HARNESS"],"register_status":"BLOCKED_BY_RELEASE_GATES","register_head":""}, + {"slice":"CRYSTALLIZATION-DREAM-CYCLE-CORRECTNESS","classification":"maker","plan_owners":["CRYSTALLIZATION-DREAM-CYCLE-CORRECTNESS"],"register_status":"CLASSIFIED_MUST_BUILD","register_head":""}, + {"slice":"CUSTOMER-MODE","classification":"meta-fold","plan_owners":["CRITICAL-HARNESS","INTEGRATION-RELEASE"],"register_status":"PENDING","register_head":""}, + {"slice":"DB-AUTH","classification":"maker","plan_owners":["DB-AUTH"],"register_status":"READY_FOR_INTEGRATION","register_head":"da97c88be6753703bac112be8431dc373e4d9dda"}, + {"slice":"DB-BULKOPS","classification":"maker","plan_owners":["DB-BULKOPS"],"register_status":"REVISE_HOLD","register_head":"68b2ce5835c7c6efdf1c68da9eedcb8d9c3837ef","load_bearing":{"policy":"rejected_heads_must_not_be_accepted","rejected_heads":["68b2ce5835c7c6efdf1c68da9eedcb8d9c3837ef"]}}, + {"slice":"DB-BULKOPS-BEHAVIORAL-EDGE-REWORK","classification":"maker","plan_owners":["DB-BULKOPS-BEHAVIORAL-EDGE-REWORK"],"register_status":"READY_FOR_INTEGRATION_WITH_CONCERNS","register_head":"bd68c05baf4b7250096dd84f56bebea2aa555970"}, + {"slice":"DB-CRYSTALLIZATION","classification":"maker","plan_owners":["DB-CRYSTALLIZATION"],"register_status":"READY_FOR_INTEGRATION_WITH_CONCERNS","register_head":"2ab6211494e51aeb7b787a99e78cff8bf2d5694a"}, + {"slice":"DB-EMBEDDING-EVIDENCE-TRANSPORT","classification":"checker-evidence","plan_owners":["DB-EMBEDDING-EVIDENCE-TRANSPORT"],"register_status":"R5_INTERIM_REVISE_REAL_METRICS_REQUIRED","register_head":"369951b61ee07cb0c405558e0f677cd1c9e90362","register_notes":"Root caught a non-acceptable interim coverage artifact declaring identical 80.0/0.0/0.0 values without the actual Node report. Independent execution on the staged LF bytes passed 24/24 tests but measured aggregate 66.65 line / 59.64 branch / 88.17 functions; verifier 46.17/42.86/69.70 and harness 99.68/95.93/100.00. The added 289-line in-band coverage mode caused the line floor to fail. R5 must simplify/revert that denominator expansion and bind a separate representation verifier to two real raw transcripts; no rounding, threshold reduction, or old mixed-worktree numbers are acceptable.","load_bearing":{"policy":"rejected_heads_must_not_be_accepted","rejected_heads":["369951b61ee07cb0c405558e0f677cd1c9e90362"]}}, + {"slice":"DB-EMBEDDING-STATS","classification":"maker","plan_owners":["DB-EMBEDDING-STATS"],"register_status":"PRODUCT_ACCEPTED_EVIDENCE_R3_CHECKER_ACTIVE","register_head":"38d6a4fb7ff5f5ae3b6c0066c0a1b806421137df"}, + {"slice":"DB-GOVERNANCE","classification":"maker","plan_owners":["DB-GOVERNANCE"],"register_status":"BLOCKED_BY_RELEASE_GATES","register_head":""}, + {"slice":"DB-REAPER","classification":"maker","plan_owners":["DB-REAPER"],"register_status":"READY_FOR_INTEGRATION_WITH_CONCERNS","register_head":"0d5cfa5c67ddbc331d7e812f98679742541b32ca"}, + {"slice":"DB-RULES-ISOLATION","classification":"maker","plan_owners":["DB-RULES-ISOLATION"],"register_status":"BLOCKED_BY_DIAGNOSTIC_LANES","register_head":""}, + {"slice":"DB-TEST-POOL-HYGIENE","classification":"maker","plan_owners":["DB-TEST-POOL-HYGIENE"],"register_status":"READY_FOR_CHECK","register_head":"68242c48aaad62ec087166eeb9ea32f14d189450"}, + {"slice":"DEMOLITION-SKIP-CLASSIFICATION","classification":"checker-evidence","plan_owners":["DEMOLITION-SKIP-CLASSIFICATION"],"register_status":"ALL_25_CLASSIFIED_OWNER_LANES_ACTIVE","register_head":"d59d1605969b1f567506e96ded524dfd1e4be08a"}, + {"slice":"DEPLOYMENT-ROLLBACK","classification":"maker","plan_owners":["DEPLOYMENT-ROLLBACK"],"register_status":"BLOCKED_BY_IMAGE_REMEDIATION","register_head":""}, + {"slice":"DOCUMENT-INGEST-PUBLIC-TRUTH","classification":"maker","plan_owners":["DOCUMENT-INGEST-PUBLIC-TRUTH"],"register_status":"READY_TO_DISPATCH","register_head":""}, + {"slice":"DURABLE-AUDIT-BOUNDARIES","classification":"maker","plan_owners":["DURABLE-AUDIT-BOUNDARIES"],"register_status":"BLOCKED_BY_CANDIDATE_AND_AUTH_STACKS","register_head":""}, + {"slice":"FINAL-PUBLIC-TRUTH","classification":"maker","plan_owners":["FINAL-PUBLIC-TRUTH"],"register_status":"BLOCKED_BY_M6","register_head":""}, + {"slice":"IMAGE-REMEDIATION","classification":"maker","plan_owners":["IMAGE-REMEDIATION"],"register_status":"PENDING","register_head":""}, + {"slice":"IMAGE-STACK-PROTOTYPE","classification":"historical","plan_owners":["IMAGE-REMEDIATION"],"register_status":"PASS","register_head":""}, + {"slice":"INGEST-DOC-CLASSIFICATION","classification":"checker-evidence","plan_owners":["INGEST-DOC-CLASSIFICATION"],"register_status":"CLASSIFIED_PRE_DEMOLITION_STALE","register_head":""}, + {"slice":"INGEST-DOC-SNAPSHOT-DEMOLITION","classification":"maker","plan_owners":["INGEST-DOC-SNAPSHOT-DEMOLITION"],"register_status":"BLOCKED_BY_DB_BULKOPS","register_head":""}, + {"slice":"INTEGRATION-RELEASE","classification":"root-integration","plan_owners":["INTEGRATION-RELEASE"],"register_status":"BLOCKED_BY_RELEASE_GATES_PREVIEW_MEASURED","register_head":""}, + {"slice":"LAUNCHER-FIRST-RUN","classification":"maker","plan_owners":["LAUNCHER-FIRST-RUN"],"register_status":"BLOCKED_BY_IDENTITY_AND_RELEASE_GATES","register_head":""}, + {"slice":"MASTER-PLAN","classification":"meta-fold","plan_owners":["PLAN-GOVERNANCE"],"register_status":"R8_RECONCILIATION_MAKER_ACTIVE","register_head":"d59d1605969b1f567506e96ded524dfd1e4be08a"}, + {"slice":"MCP-STRUCTURED-INPUT-VALIDATION","classification":"maker","plan_owners":["MCP-STRUCTURED-INPUT-VALIDATION"],"register_status":"CLASSIFIED_MUST_BUILD","register_head":""}, + {"slice":"NORTHSTAR-BOOK-CONTRACTS","classification":"maker","plan_owners":["NORTHSTAR-BOOK-CONTRACTS"],"register_status":"BLOCKED_BY_M5","register_head":""}, + {"slice":"NORTHSTAR-CI-A-CONTRACTS","classification":"maker","plan_owners":["NORTHSTAR-CI-A-CONTRACTS"],"register_status":"BLOCKED_BY_M5","register_head":""}, + {"slice":"NORTHSTAR-CI-B-CONTRACTS","classification":"maker","plan_owners":["NORTHSTAR-CI-B-CONTRACTS"],"register_status":"BLOCKED_BY_CI_A","register_head":""}, + {"slice":"NORTHSTAR-EFFECTIVENESS-CONTRACTS","classification":"maker","plan_owners":["NORTHSTAR-EFFECTIVENESS-CONTRACTS"],"register_status":"BLOCKED_BY_M5","register_head":""}, + {"slice":"NORTHSTAR-MEM-CONTRACTS","classification":"maker","plan_owners":["NORTHSTAR-MEM-CONTRACTS"],"register_status":"BLOCKED_BY_M5","register_head":""}, + {"slice":"NORTHSTAR-SETTINGS-CONTRACTS","classification":"maker","plan_owners":["NORTHSTAR-SETTINGS-CONTRACTS"],"register_status":"BLOCKED_BY_M5","register_head":""}, + {"slice":"OBSERVABILITY-OTLP","classification":"maker","plan_owners":["OBSERVABILITY-OTLP"],"register_status":"BLOCKED_BY_RUNTIME","register_head":""}, + {"slice":"OC-INTEGRATION","classification":"maker","plan_owners":["OC-INTEGRATION"],"register_status":"BLOCKED_BY_IMAGE_AND_AUTH","register_head":""}, + {"slice":"OPENCLAW-RELEASE","classification":"maker","plan_owners":["OPENCLAW-RELEASE"],"register_status":"BLOCKED_BY_SECURITY_PROJECT_IDENTITY","register_head":""}, + {"slice":"OPERATIONS","classification":"meta-fold","plan_owners":["DEPLOYMENT-ROLLBACK","RECOVERY-DATA","OBSERVABILITY-OTLP","PRIVACY-BOUNDARIES","CORE-PUBLIC-TRUTH","FINAL-PUBLIC-TRUTH"],"register_status":"PENDING","register_head":""}, + {"slice":"OPERATOR-CONSOLE","classification":"meta-fold","plan_owners":["IMAGE-REMEDIATION","OC-INTEGRATION"],"register_status":"PENDING","register_head":""}, + {"slice":"PLAN-GOVERNANCE","classification":"maker","plan_owners":["PLAN-GOVERNANCE"],"register_status":"R7_CHECKER_REVISE_R8_MAKER_ACTIVE","register_head":"d59d1605969b1f567506e96ded524dfd1e4be08a"}, + {"slice":"PRE-V5-UPGRADE-CONTRACT","classification":"maker","plan_owners":["PRE-V5-UPGRADE-CONTRACT"],"register_status":"READY_FOR_MAKER_HISTORICAL_FIXTURE_REQUIRED","register_head":""}, + {"slice":"PRIVACY-BOUNDARIES","classification":"maker","plan_owners":["PRIVACY-BOUNDARIES"],"register_status":"BLOCKED_BY_DATA_STACK","register_head":""}, + {"slice":"RECOVERY-DATA","classification":"maker","plan_owners":["RECOVERY-DATA"],"register_status":"BLOCKED_BY_DEPLOYMENT","register_head":""}, + {"slice":"REDACTION-LIVE-CONTRACT","classification":"maker","plan_owners":["REDACTION-LIVE-CONTRACT"],"register_status":"CLASSIFIED_RELEASE_BLOCKER_PLAN_REVISED","register_head":""}, + {"slice":"RELEASE-GATES","classification":"maker","plan_owners":["RELEASE-GATES"],"register_status":"REVISION_7_DIAGNOSTIC_COMPLETE_R8_REBUILD_ACTIVE","register_head":"144eeefa003c3e1c0009c4264f41236ee3453b65","load_bearing":{"policy":"rejected_heads_must_not_be_accepted","rejected_heads":["144eeefa003c3e1c0009c4264f41236ee3453b65"]}}, + {"slice":"RETRIEVAL-VECTOR-CONTRACT","classification":"maker","plan_owners":["RETRIEVAL-VECTOR-CONTRACT"],"register_status":"READY_FOR_MAKER","register_head":""}, + {"slice":"ROADMAP-RECONCILIATION","classification":"maker","plan_owners":["ROADMAP-RECONCILIATION"],"register_status":"BLOCKED_BY_IMPLEMENTATION_TRUTH","register_head":""}, + {"slice":"S4B-CONTRACT","classification":"maker","plan_owners":["S4B-CONTRACT"],"register_status":"BLOCKED_BY_PLAN_GOVERNANCE","register_head":""}, + {"slice":"SECURITY-PROJECT-IDENTITY","classification":"maker","plan_owners":["SECURITY-PROJECT-IDENTITY"],"register_status":"R2_CHECKER_REVISE_TWO_BLOCKERS_CONFIRMED","register_head":"9e2ce4e58a5cded69660ca9ac532d2167f315bb2","load_bearing":{"policy":"rejected_heads_must_not_be_accepted","rejected_heads":["9e2ce4e58a5cded69660ca9ac532d2167f315bb2"]}}, + {"slice":"SECURITY-TOOLCHAIN","classification":"maker","plan_owners":["SECURITY-TOOLCHAIN"],"register_status":"READY_FOR_INTEGRATION","register_head":"b0955dfd61b4ea7364f6d400579247b475a1a680"}, + {"slice":"STATIC-EMBED-CONTRACT","classification":"maker","plan_owners":["STATIC-EMBED-CONTRACT"],"register_status":"READY_FOR_MAKER_SOURCE_AND_IMAGE_SPLIT","register_head":""}, + {"slice":"T007-COMPAT-DEMOLITION-CLASSIFICATION","classification":"maker","plan_owners":["T007-COMPAT-DEMOLITION-CLASSIFICATION"],"register_status":"CURRENT_CONTRACT_TEST_CORRECTION_CLASSIFIED","register_head":""}, + {"slice":"UPDATE-LIFECYCLE","classification":"maker","plan_owners":["UPDATE-LIFECYCLE"],"register_status":"PENDING","register_head":""}, + {"slice":"V7-CORE-CALLPATH","classification":"maker","plan_owners":["V7-CORE-CALLPATH"],"register_status":"BLOCKED_BY_CLASSIFICATION","register_head":""}, + {"slice":"V7-RUNTIME-WIRING","classification":"maker","plan_owners":["V7-RUNTIME-WIRING"],"register_status":"BLOCKED_BY_AUTH_AND_V7_BACKEND","register_head":""}, + {"slice":"V7-S4B-BACKEND","classification":"maker","plan_owners":["V7-S4B-BACKEND"],"register_status":"BLOCKED_BY_S4B_CONTRACT","register_head":""}, + {"slice":"V7-TELEMETRY-WIRING","classification":"maker","plan_owners":["V7-TELEMETRY-WIRING"],"register_status":"BLOCKED_BY_BACKEND_CONTRACT","register_head":""} + ] +} diff --git a/.agent/reports/2026-07-10-release-gates-r8-plan-governance.md b/.agent/reports/2026-07-10-release-gates-r8-plan-governance.md new file mode 100644 index 00000000..cabc8009 --- /dev/null +++ b/.agent/reports/2026-07-10-release-gates-r8-plan-governance.md @@ -0,0 +1,32 @@ +# PLAN-GOVERNANCE-R8 maker report + +Verdict: `PASS_PENDING_INDEPENDENT_CHECKER` + +## Authority + +- Reconstruction base: `d59d1605969b1f567506e96ded524dfd1e4be08a`. +- Rejected R7 plan: `a99ce0dfe4d415f90c0f192cbf96bd88710a48f5`. +- Diagnostic R7 release-gates source: `144eeefa003c3e1c0009c4264f41236ee3453b65`. +- R7 checker: `d8ba52d29f1c7f2169e3f76576248ab32d3b6646` (`REVISE`). +- Register freeze provenance: `AB5F882FA110CA823A317061ECBCA0C62516702735325893A56206F9E7A29415`, `updated_at=2026-07-10T22:46:01.2938194+03:00`, 67 rows / 67 unique slices. +- Canonical UTF-8/LF plan SHA256: `fd2b223a9a62848efc39e1c33bf739bada191508bccb7ba9a73140185638e43d`. +- Scope-map SHA256: `81093184036672008d6b85dfa88a431998ef70b587ab11475aa2b315f03ddf79`. + +The register SHA and timestamp freeze provenance only. Live conformance uses the exact unique slice set, classifications, literal owner/fold targets, required plan rows/epochs, and the four explicitly marked rejected-head policies. Same-lane status/head progress plus timestamp, command, artifact, and notes changes do not self-invalidate the plan. + +## Reconciliation + +- Restored all eight omitted predecessor obligations. +- Added all six newly explicit implementation/evidence lanes. +- Mapped all 67 register slices: 56 maker, 4 checker-evidence, 4 meta-fold, 1 historical, and 2 root-integration. +- Kept `MCP-STRUCTURED-INPUT-CLASSIFICATION` and `SECURITY-REVIEW` as plan-only authority rows. +- Reconciled the accepted DB behavioral-edge head, pending pool-hygiene stack, immutable DB embedding product head, rejected interim embedding evidence, and both confirmed SECURITY-PROJECT-IDENTITY R2 blockers. +- Expanded the ownership state from 34 to 36 epochs for `internal/mcp/tools_memory.go` and `docs/operating-engram.md`; updated `candidate_store_test.go` and `internal/worker/service.go` serialization. + +## Verification + +`assert-plan-path-ownership.ps1 -SelfTest` passed. Ledger passed with 57 parsed maker rows, 333 declarations, 34 repeated exact paths, 36 declared/state epochs, and zero errors. Scope parity passed at 67/67 with no missing owner or fold target. Full machine-readable evidence is under `.agent/specs/release-gates-r8/evidence/plan-governance/`. + +TDD is not applicable to this first commit because it changes only governance data and reports. Executable RED/GREEN/Prove-It work belongs to the directly stacked RELEASE-GATES-R8 commit. + +This is maker evidence, not checker acceptance, post-review, integration, or release authorization. diff --git a/.agent/specs/release-gates-r8/evidence/plan-governance/authority.json b/.agent/specs/release-gates-r8/evidence/plan-governance/authority.json new file mode 100644 index 00000000..a4c93666 --- /dev/null +++ b/.agent/specs/release-gates-r8/evidence/plan-governance/authority.json @@ -0,0 +1,46 @@ +{ + "schema_version": 1, + "gate": "r8-plan-governance-authority", + "checked_at": "2026-07-10T23:07:40.2283397+03:00", + "verdict": "PASS", + "reconstruction_base": "d59d1605969b1f567506e96ded524dfd1e4be08a", + "rejected_r7_plan": "a99ce0dfe4d415f90c0f192cbf96bd88710a48f5", + "diagnostic_r7_release_gates": "144eeefa003c3e1c0009c4264f41236ee3453b65", + "r7_checker": "d8ba52d29f1c7f2169e3f76576248ab32d3b6646", + "plan": { + "path": ".agent/plans/2026-07-10-engram-production-ready-master-plan.md", + "canonical_utf8_lf_sha256": "fd2b223a9a62848efc39e1c33bf739bada191508bccb7ba9a73140185638e43d" + }, + "ownership_state": { + "path": ".agent/plans/2026-07-10-engram-production-ready-ownership-state.json", + "canonical_utf8_lf_sha256": "c14eaba5a9615af7196af913aedf8bb3c6e51e05880d47d391e8d07e4367a192", + "epochs": 36 + }, + "scope_map": { + "path": ".agent/plans/2026-07-10-engram-production-ready-scope-map.json", + "sha256": "81093184036672008d6b85dfa88a431998ef70b587ab11475aa2b315f03ddf79", + "register_freeze_sha256": "ab5f882fa110ca823a317061ecbca0c62516702735325893a56206f9e7a29415" + }, + "ledger": { + "path": ".agent/specs/release-gates-r8/evidence/plan-governance/ledger.json", + "verdict": "PASS", + "maker_slices": 57, + "declarations": 333, + "repeated_exact_paths": 34, + "declared_epochs": 36, + "state_epochs": 36, + "errors": 0 + }, + "restored_predecessor_rows": [ + "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK", + "INGEST-DOC-CLASSIFICATION", + "INGEST-DOC-SNAPSHOT-DEMOLITION", + "CRYSTALLIZATION-DREAM-CYCLE-CORRECTNESS", + "OPENCLAW-RELEASE", + "DOCUMENT-INGEST-PUBLIC-TRUTH", + "MCP-STRUCTURED-INPUT-CLASSIFICATION", + "MCP-STRUCTURED-INPUT-VALIDATION" + ], + "plan_only_authority_rows": ["MCP-STRUCTURED-INPUT-CLASSIFICATION", "SECURITY-REVIEW"], + "errors": [] +} diff --git a/.agent/specs/release-gates-r8/evidence/plan-governance/ledger.json b/.agent/specs/release-gates-r8/evidence/plan-governance/ledger.json new file mode 100644 index 00000000..93be4d05 --- /dev/null +++ b/.agent/specs/release-gates-r8/evidence/plan-governance/ledger.json @@ -0,0 +1,4402 @@ +{ + "schema_version": 2, + "gate": "plan-path-ownership", + "mode": "Ledger", + "verdict": "PASS", + "started_at": "2026-07-10T20:06:44.9415811+00:00", + "finished_at": "2026-07-10T20:06:49.8561890+00:00", + "duration_seconds": 4.915, + "plan": { + "path": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates-r8-maker\\.agent\\plans\\2026-07-10-engram-production-ready-master-plan.md", + "expected_sha256": "fd2b223a9a62848efc39e1c33bf739bada191508bccb7ba9a73140185638e43d", + "observed_sha256": "fd2b223a9a62848efc39e1c33bf739bada191508bccb7ba9a73140185638e43d", + "hash_match": true + }, + "state": { + "path": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates-r8-maker\\.agent\\plans\\2026-07-10-engram-production-ready-ownership-state.json", + "sha256": "c14eaba5a9615af7196af913aedf8bb3c6e51e05880d47d391e8d07e4367a192", + "verdict": "PASS", + "plan_sha256": "fd2b223a9a62848efc39e1c33bf739bada191508bccb7ba9a73140185638e43d" + }, + "counts": { + "maker_slices": 57, + "declarations": 333, + "exact_paths": 316, + "prefixes": 17, + "repeated_exact_paths": 34, + "prefix_intersections": 2, + "undeclared_prefix_intersections": 0, + "declared_epochs": 36, + "state_epochs": 36, + "errors": 0 + }, + "slices": [ + { + "slice": "PLAN-GOVERNANCE", + "branch": "work/prc-release-gates-revision8-maker", + "paths": [ + ".agent/plans/2026-07-10-engram-production-ready-master-plan.md", + ".agent/plans/2026-07-10-engram-production-ready-ownership-state.json", + ".agent/plans/2026-07-10-engram-production-ready-scope-map.json", + ".agent/specs/release-gates-r8/evidence/plan-governance/**", + ".agent/reports/2026-07-10-release-gates-r8-plan-governance.md" + ], + "line": 6 + }, + { + "slice": "DB-BULKOPS", + "branch": "work/prc-db-bulkops", + "paths": [ + "internal/bulkops/facade.go", + "internal/bulkops/facade_test.go", + "internal/bulkops/rollback.go", + "internal/bulkops/rollback_test.go", + "internal/db/gorm/candidate_store.go", + "internal/db/gorm/candidate_store_test.go", + "internal/mcp/tools_bulkops.go", + "internal/mcp/tools_dryrun_test.go", + "pkg/models/snapshot.go", + ".agent/reports/2026-07-10-db-bulkops-capture-lock-rework-maker.md", + ".agent/reports/2026-07-10-db-bulkops-sibling-rework-maker.md", + ".agent/specs/production-ready-db-bulkops/evidence/**", + ".agent/reports/evidence/production-ready/db-bulkops-sibling-rework/**" + ], + "line": 7 + }, + { + "slice": "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK", + "branch": "work/prc-db-bulkops", + "paths": [ + "internal/db/gorm/candidate_store.go", + "internal/db/gorm/candidate_store_test.go", + "internal/mcp/tools_bulkops.go", + "internal/mcp/tools_dryrun_test.go", + ".agent/reports/2026-07-10-db-bulkops-behavioral-edge-rework-maker-3.md", + ".agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/**" + ], + "line": 8 + }, + { + "slice": "DB-TEST-POOL-HYGIENE", + "branch": "work/prc-db-test-pool-hygiene-evidence-r2", + "paths": [ + "internal/db/gorm/candidate_store_test.go", + ".agent/reports/2026-07-10-db-test-pool-hygiene-maker.md", + ".agent/reports/2026-07-10-db-test-pool-hygiene-evidence-revision-maker.md", + ".agent/reports/evidence/production-ready/db-test-pool-hygiene/**" + ], + "line": 9 + }, + { + "slice": "DB-GOVERNANCE", + "branch": "work/prc-db-governance", + "paths": [ + "internal/db/gorm/candidate_store.go", + "internal/db/gorm/candidate_store_test.go", + "internal/db/gorm/rule_arbiter_store_test.go", + "internal/db/gorm/rule_governance_store.go", + "internal/db/gorm/rule_governance_store_test.go", + "internal/db/gorm/rule_governance_rg3_store_test.go", + "internal/db/gorm/migration_rule_governance.go", + "internal/db/gorm/migration_rule_arbiter.go", + "internal/db/gorm/migration_rule_governance_snapshot_statuses.go" + ], + "line": 10 + }, + { + "slice": "CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK", + "branch": "work/prc-candidate-review-snapshot-rollback", + "paths": [ + "internal/reviewpacket/candidate.go", + "internal/reviewpacket/candidate_test.go", + "internal/db/gorm/candidate_store.go", + "internal/db/gorm/candidate_store_test.go", + "internal/db/gorm/snapshot_store.go", + "internal/db/gorm/snapshot_store_test.go", + "internal/bulkops/rollback_test.go", + "tests/critical/candidate_review/candidate_review_snapshot_rollback_test.go" + ], + "line": 11 + }, + { + "slice": "INGEST-DOC-SNAPSHOT-DEMOLITION", + "branch": "work/prc-ingest-doc-snapshot-demolition", + "paths": [ + "internal/bulkops/facade.go", + "internal/bulkops/facade_test.go", + "pkg/models/snapshot.go", + "pkg/models/snapshot_test.go", + "internal/mcp/ingest_snapshot_contract_test.go" + ], + "line": 13 + }, + { + "slice": "DB-AUTH", + "branch": "work/prc-db-auth", + "paths": [ + "internal/db/gorm/user_store.go", + "internal/db/gorm/user_store_test.go", + "internal/worker/auth_handlers.go", + "internal/worker/auth_handlers_lifecycle_test.go" + ], + "line": 14 + }, + { + "slice": "AUTH-BOOTSTRAP-SECURITY", + "branch": "work/prc-auth-bootstrap-security", + "paths": [ + "internal/config/config.go", + "internal/config/config_test.go", + "internal/config/envnames.go", + "internal/db/gorm/user_store.go", + "internal/worker/middleware.go", + "internal/worker/middleware_test.go", + "internal/worker/auth_handlers.go", + "internal/worker/auth_bootstrap_limiter.go", + "internal/worker/auth_bootstrap_limiter_test.go", + "internal/worker/auth_bootstrap_security_test.go", + "internal/worker/service.go", + "tests/critical/auth_bootstrap/first_admin_bootstrap_test.go", + "scripts/production-smoke/customer/run-auth-bootstrap-adversary.ps1" + ], + "line": 15 + }, + { + "slice": "DURABLE-AUDIT-BOUNDARIES", + "branch": "work/prc-durable-audit-boundaries", + "paths": [ + "internal/db/gorm/domain_owner_store.go", + "internal/db/gorm/domain_owner_store_test.go", + "internal/db/gorm/user_store.go", + "internal/worker/auth_handlers.go", + "internal/worker/auth_audit_durability_test.go", + "internal/bulkops/facade.go", + "internal/bulkops/audit_durability_test.go", + "scripts/production-smoke/customer/run-durable-audit-faults.ps1" + ], + "line": 16 + }, + { + "slice": "DB-CRYSTALLIZATION", + "branch": "work/prc-db-crystallization", + "paths": [ + "internal/worker/handlers_hooks_crystallization_integration_test.go" + ], + "line": 17 + }, + { + "slice": "CRYSTALLIZATION-DREAM-CYCLE-CORRECTNESS", + "branch": "work/prc-crystallization-dream-cycle-correctness", + "paths": [ + "internal/worker/dream_cycle.go", + "internal/worker/dream_cycle_test.go", + ".agent/reports/2026-07-10-crystallization-dream-cycle-correctness-maker.md", + ".agent/e/cdc/**" + ], + "line": 18 + }, + { + "slice": "DB-EMBEDDING-STATS", + "branch": "work/prc-db-embedding-stats", + "paths": [ + "internal/embedding/store.go", + "internal/embedding/store_stats_test.go" + ], + "line": 19 + }, + { + "slice": "DB-EMBEDDING-EVIDENCE-TRANSPORT", + "branch": "work/prc-db-embedding-evidence-transport-r5", + "paths": [ + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/**", + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/**", + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4/**", + ".agent/specs/db-embedding-stats-evidence-transport/evidence/**" + ], + "line": 20 + }, + { + "slice": "DB-REAPER", + "branch": "work/prc-db-reaper", + "paths": [ + "internal/worker/reaper/reaper.go", + "internal/worker/reaper/reaper_test.go" + ], + "line": 21 + }, + { + "slice": "SECURITY-TOOLCHAIN", + "branch": "work/prc-security-toolchain", + "paths": [ + "go.mod", + "go.sum", + "Dockerfile" + ], + "line": 22 + }, + { + "slice": "RELEASE-GATES", + "branch": "work/prc-release-gates-revision8-maker", + "paths": [ + ".github/workflows/test.yml", + "scripts/production-gates/assert-plan-path-ownership.ps1", + "scripts/production-gates/run-db-suite.ps1", + ".agent/specs/release-gates-r8/evidence/release-gates/**", + ".agent/reports/2026-07-10-release-gates-r8-maker.md" + ], + "line": 23 + }, + { + "slice": "IMAGE-REMEDIATION", + "branch": "work/prc-image-remediation", + "paths": [ + "Dockerfile", + "cmd/engram-healthcheck/main.go", + "cmd/engram-healthcheck/main_test.go", + "apps/operator-console/package.json", + "apps/operator-console/package-lock.json", + "deploy/postgres/Dockerfile", + "docker-compose.yml", + "deploy/docker-compose.runtime.yml", + "docs/DEPLOYMENT.md", + "docs/PRODUCTION-TESTING-PLAYBOOK.md", + ".github/workflows/test.yml", + ".github/workflows/docker.yaml", + ".github/workflows/docker-publish.yml", + "scripts/production-gates/build-and-scan-images.ps1", + "tests/critical/runtime/image_runtime_contract_test.go", + "tests/critical/runtime/postgres_image_contract_test.go" + ], + "line": 24 + }, + { + "slice": "SECURITY-PROJECT-IDENTITY", + "branch": "work/prc-security-project-identity-r3", + "paths": [ + "internal/db/gorm/project_store.go", + "internal/db/gorm/project_store_test.go", + "internal/grpcserver/project_identity_v2_test.go" + ], + "line": 25 + }, + { + "slice": "OPENCLAW-RELEASE", + "branch": "work/prc-openclaw-release", + "paths": [ + "plugin/openclaw-engram/.gitignore", + "plugin/openclaw-engram/package.json", + "plugin/openclaw-engram/package-lock.json", + "plugin/openclaw-engram/openclaw.plugin.json", + "plugin/openclaw-engram/README.md", + ".github/workflows/plugin-publish.yml", + "docs/RELEASE-PROTOCOL.md" + ], + "line": 26 + }, + { + "slice": "UPDATE-LIFECYCLE", + "branch": "work/prc-security-updater", + "paths": [ + "internal/update/update.go", + "internal/update/update_test.go", + "internal/worker/handlers_update.go", + "internal/worker/handlers_update_test.go", + "scripts/install.sh", + "scripts/install.ps1", + ".goreleaser.yaml", + ".github/workflows/release.yaml", + "plugin/engram/hooks/hook-cli.test.js" + ], + "line": 27 + }, + { + "slice": "DOCUMENT-INGEST-PUBLIC-TRUTH", + "branch": "work/prc-document-ingest-public-truth", + "paths": [ + "internal/mcp/server.go", + "internal/mcp/ingest_document_description_test.go" + ], + "line": 29 + }, + { + "slice": "MCP-STRUCTURED-INPUT-VALIDATION", + "branch": "work/prc-mcp-structured-input-validation", + "paths": [ + "internal/mcp/coerce.go", + "internal/mcp/coerce_test.go", + "internal/mcp/tools_candidates.go", + "internal/mcp/tools_candidates_test.go", + "internal/mcp/tools_memory.go", + "internal/mcp/tools_memory_edit_test.go", + "internal/mcp/tools_memory_significance.go", + "internal/mcp/tools_memory_significance_test.go", + "internal/mcp/tools_store_consolidated.go", + "internal/mcp/tools_settings.go", + "internal/mcp/tools_settings_test.go", + "internal/mcp/tools_documents_v2.go", + "internal/mcp/tools_rule_governance.go", + "internal/mcp/tools_rule_governance_test.go", + "internal/mcp/structured_input_validation_test.go" + ], + "line": 31 + }, + { + "slice": "REDACTION-LIVE-CONTRACT", + "branch": "work/prc-redaction-live-contract", + "paths": [ + "internal/redaction/layer.go", + "internal/redaction/layer_test.go", + "internal/redaction/rejection_test.go", + "internal/mcp/redaction_guard.go", + "internal/mcp/redaction_guard_test.go", + "internal/mcp/tools_memory.go", + "internal/mcp/tools_rules.go", + "internal/mcp/tools_memory_redaction_audit_test.go", + "internal/mcp/tools_rules_redaction_audit_test.go", + "internal/worker/service.go", + "internal/worker/service_redaction_test.go", + "docs/operating-engram.md", + ".agent/reports/evidence/production-ready/redaction-live-contract/**" + ], + "line": 32 + }, + { + "slice": "RETRIEVAL-VECTOR-CONTRACT", + "branch": "work/prc-retrieval-vector-contract", + "paths": [ + "internal/retrieval/hybrid_integration_test.go" + ], + "line": 34 + }, + { + "slice": "STATIC-EMBED-CONTRACT", + "branch": "work/prc-static-embed-contract", + "paths": [ + "internal/worker/static_embed_test.go" + ], + "line": 35 + }, + { + "slice": "PRE-V5-UPGRADE-CONTRACT", + "branch": "work/prc-pre-v5-upgrade-contract", + "paths": [ + "internal/db/gorm/migrations_integration_test.go", + "internal/grpcserver/credential_migration_test.go", + "tests/fixtures/pre-v5/**", + "tests/critical/recovery/pre_v5_upgrade_test.go", + "scripts/production-smoke/customer/run-pre-v5-upgrade.ps1" + ], + "line": 36 + }, + { + "slice": "T007-COMPAT-DEMOLITION-CLASSIFICATION", + "branch": "work/prc-t007-compat-classification", + "paths": [ + "internal/mcp/store_memory_compat_t007_test.go" + ], + "line": 37 + }, + { + "slice": "DB-RULES-ISOLATION", + "branch": "work/prc-db-rules-isolation", + "paths": [ + "internal/worker/handlers_rules_test.go", + "scripts/production-gates/run-db-rules-isolation.ps1" + ], + "line": 38 + }, + { + "slice": "COVERAGE-CMD-ENGRAM", + "branch": "work/prc-coverage-cmd-engram", + "paths": [ + "cmd/engram/production_readiness_coverage_test.go" + ], + "line": 39 + }, + { + "slice": "COVERAGE-CMD-SERVER", + "branch": "work/prc-coverage-cmd-server", + "paths": [ + "cmd/engram-server/production_readiness_coverage_test.go" + ], + "line": 40 + }, + { + "slice": "COVERAGE-UPDATE", + "branch": "work/prc-coverage-update", + "paths": [ + "internal/update/production_readiness_coverage_test.go" + ], + "line": 41 + }, + { + "slice": "COVERAGE-WORKER", + "branch": "work/prc-coverage-worker", + "paths": [ + "internal/worker/production_readiness_coverage_test.go" + ], + "line": 43 + }, + { + "slice": "COVERAGE-MCP", + "branch": "work/prc-coverage-mcp", + "paths": [ + "internal/mcp/production_readiness_coverage_test.go" + ], + "line": 44 + }, + { + "slice": "COVERAGE-GORM", + "branch": "work/prc-coverage-gorm", + "paths": [ + "internal/db/gorm/production_readiness_coverage_test.go" + ], + "line": 45 + }, + { + "slice": "COVERAGE-LOOM", + "branch": "work/prc-coverage-loom", + "paths": [ + "internal/handlers/loom/production_readiness_coverage_test.go" + ], + "line": 46 + }, + { + "slice": "DEPLOYMENT-ROLLBACK", + "branch": "work/prc-deployment-rollback", + "paths": [ + "docker-compose.yml", + "deploy/docker-compose.runtime.yml", + "deploy/docker-compose.operator-web-standalone.yml", + "deploy/entrypoint-server.sh", + "deploy/healthcheck-server.sh", + "deploy/verify-rollback.ps1", + "deploy/verify-runtime-policy.ps1" + ], + "line": 47 + }, + { + "slice": "RECOVERY-DATA", + "branch": "work/prc-recovery-data", + "paths": [ + "scripts/recovery/start-disposable-postgres.ps1", + "scripts/recovery/verify-postgres-roundtrip.ps1", + "scripts/recovery/seed-recovery-fixture.ps1", + "scripts/recovery/assert-recovery-fixture.ps1", + "tests/critical/recovery/postgres_roundtrip_test.go" + ], + "line": 48 + }, + { + "slice": "OBSERVABILITY-OTLP", + "branch": "work/prc-observability-otlp", + "paths": [ + "internal/module/obs/logging.go", + "internal/module/obs/logging_test.go", + "internal/module/obs/meter.go", + "internal/module/obs/meter_test.go", + "internal/module/obs/metrics.go", + "internal/module/obs/metrics_test.go", + "cmd/engram-server/main.go", + "cmd/engram-server/main_test.go", + "scripts/production-smoke/verify-otlp.ps1" + ], + "line": 49 + }, + { + "slice": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "paths": [ + "internal/scope/domain_policy.go", + "internal/scope/domain_policy_test.go", + "internal/scope/filter.go", + "internal/scope/filter_test.go", + "internal/scope/filter_principal_test.go", + "internal/scope/filter_w4_test.go", + "internal/principalmemory/access_policy.go", + "internal/principalmemory/access_policy_test.go", + "internal/principalmemory/domain_registry.go", + "internal/principalmemory/domain_registry_test.go", + "internal/principalmemory/query_service.go", + "internal/principalmemory/query_service_test.go", + "internal/mcp/tools_principal_memory.go", + "internal/mcp/tools_principal_memory_test.go", + "internal/mcp/tools_recall_principal_test.go", + "internal/mcp/recall_visibility_backfill_test.go", + "internal/mcp/store_memory_principal_test.go", + "internal/worker/handlers_principal_memory.go", + "internal/worker/handlers_principal_memory_test.go", + "internal/worker/scope_bypass_w4_test.go", + "internal/worker/retention.go", + "internal/worker/retention_test.go", + "internal/db/gorm/memory_store.go", + "internal/db/gorm/memory_store_principal_test.go", + "internal/db/gorm/memory_store_principal_query_test.go", + "internal/db/gorm/purge_store_test.go", + "tests/critical/data_boundaries/principal_project_retention_test.go" + ], + "line": 50 + }, + { + "slice": "CRITICAL-HARNESS", + "branch": "work/prc-critical-harness", + "paths": [ + "tests/critical/customer_mode/customer_mode_test.go", + "tests/critical/customer_mode/compatibility_test.go", + "tests/critical/customer_mode/cross_agent_test.go", + "scripts/production-smoke/customer/run-customer-mode.ps1", + "scripts/production-smoke/customer/run-client-compatibility.ps1", + "scripts/production-smoke/customer/run-cross-agent.ps1", + "scripts/production-smoke/customer/run-diagnostic-matrix.ps1", + "scripts/production-smoke/customer/assert-product-works.ps1" + ], + "line": 51 + }, + { + "slice": "CORE-PUBLIC-TRUTH", + "branch": "work/prc-core-public-truth", + "paths": [ + "README.md", + "README.ru.md", + "README.zh.md", + "CONTRIBUTING.md", + "CHANGELOG.md", + "Makefile", + ".env.example", + "docs/DEPLOYMENT.md", + "docs/MIGRATION.md", + "docs/PRODUCTION-TESTING-PLAYBOOK.md", + "docs/arch/CONFIGURATION.md", + "docs/arch/QUICKSTART.md", + "docs/release-notes/v6.43.0.md", + "docs/public/engram.jpg", + "plugin/engram/commands/setup.md", + "plugin/engram/commands/doctor.md" + ], + "line": 52 + }, + { + "slice": "FINAL-PUBLIC-TRUTH", + "branch": "work/prc-final-public-truth", + "paths": [ + "README.md", + "README.ru.md", + "README.zh.md", + "CONTRIBUTING.md", + "CHANGELOG.md", + "Makefile", + ".env.example", + "docs/DEPLOYMENT.md", + "docs/MIGRATION.md", + "docs/PRODUCTION-TESTING-PLAYBOOK.md", + "docs/operating-engram.md", + "docs/arch/CONFIGURATION.md", + "docs/arch/QUICKSTART.md", + "docs/public/engram.jpg", + "plugin/engram/commands/setup.md", + "plugin/engram/commands/doctor.md" + ], + "line": 53 + }, + { + "slice": "LAUNCHER-FIRST-RUN", + "branch": "work/prc-launcher-first-run", + "paths": [ + "cmd/engram/main.go", + "cmd/engram/main_test.go", + "cmd/engram/wiring.go", + "cmd/engram/exec_windows.go", + "cmd/engram/exec_unix.go", + "plugin/engram/.engram-project", + "plugin/engram/scripts/run-engram.js", + "plugin/engram/scripts/run-engram.test.js", + "plugin/engram/scripts/ensure-binary.js", + "plugin/engram/scripts/ensure-binary.test.js" + ], + "line": 54 + }, + { + "slice": "OC-INTEGRATION", + "branch": "work/prc-operator-console-integration", + "paths": [ + "apps/operator-console/**" + ], + "line": 55 + }, + { + "slice": "S4B-CONTRACT", + "branch": "work/prc-s4b-contract", + "paths": [ + ".agent/specs/engram-v7-directives-surfacing/**" + ], + "line": 56 + }, + { + "slice": "V7-S4B-BACKEND", + "branch": "work/prc-v7-s4b-backend", + "paths": [ + "internal/cognitive/s4bsurfacing/**" + ], + "line": 57 + }, + { + "slice": "V7-CORE-CALLPATH", + "branch": "work/prc-v7-core-callpath", + "paths": [ + "internal/cognitive/core/event_bus.go", + "internal/cognitive/core/event_bus_test.go", + "internal/cognitive/core/hint_queue.go", + "internal/cognitive/core/hint_queue_test.go", + "internal/cognitive/s3ambient/queue.go", + "internal/cognitive/s3ambient/subsystem.go" + ], + "line": 58 + }, + { + "slice": "V7-RUNTIME-WIRING", + "branch": "work/prc-v7-runtime-wiring", + "paths": [ + "internal/worker/service.go", + "internal/worker/service_v7_integration_test.go", + "internal/worker/handlers_stats_v7.go", + "internal/worker/handlers_stats_v7_test.go" + ], + "line": 59 + }, + { + "slice": "V7-TELEMETRY-WIRING", + "branch": "work/prc-v7-telemetry-wiring", + "paths": [ + "internal/cognitive/s5/metrics.go", + "internal/cognitive/s5/provider.go", + "internal/cognitive/s5/provider_test.go", + "internal/cognitive/s5/source_adapter.go", + "internal/cognitive/s5/source_adapter_test.go" + ], + "line": 60 + }, + { + "slice": "ROADMAP-RECONCILIATION", + "branch": "work/prc-roadmap-reconciliation", + "paths": [ + ".agent/specs/roadmap.md", + ".agent/specs/ui-surface-ledger.md", + ".agent/specs/operator-console-production-integration/**", + ".agent/specs/engram-v7-ambient/spec.md", + ".agent/specs/engram-v7-ambient/plan.md", + ".agent/specs/engram-v7-ambient/checklists/general.md", + ".agent/specs/engram-v7-ambient/changes/CR-001-initial-scope/change.md", + ".agent/specs/engram-v7-ambient/changes/CR-001-initial-scope/tasks.md" + ], + "line": 61 + }, + { + "slice": "NORTHSTAR-CI-A-CONTRACTS", + "branch": "work/prc-northstar-ci-a-contracts", + "paths": [ + ".agent/specs/engram-absorption/ci-a-dense-vector/spec.md", + ".agent/specs/engram-absorption/ci-a-dense-vector/plan.md", + ".agent/specs/engram-absorption/ci-a-dense-vector/checklists/general.md", + ".agent/specs/engram-absorption/ci-a-dense-vector/changes/CR-001-initial-scope/change.md", + ".agent/specs/engram-absorption/ci-a-dense-vector/changes/CR-001-initial-scope/tasks.md" + ], + "line": 62 + }, + { + "slice": "NORTHSTAR-CI-B-CONTRACTS", + "branch": "work/prc-northstar-ci-b-contracts", + "paths": [ + ".agent/specs/engram-absorption/ci-b-graph-watcher-context/spec.md", + ".agent/specs/engram-absorption/ci-b-graph-watcher-context/plan.md", + ".agent/specs/engram-absorption/ci-b-graph-watcher-context/checklists/general.md", + ".agent/specs/engram-absorption/ci-b-graph-watcher-context/changes/CR-001-initial-scope/change.md", + ".agent/specs/engram-absorption/ci-b-graph-watcher-context/changes/CR-001-initial-scope/tasks.md" + ], + "line": 63 + }, + { + "slice": "NORTHSTAR-BOOK-CONTRACTS", + "branch": "work/prc-northstar-book-contracts", + "paths": [ + ".agent/specs/engram-absorption/book/prd.md", + ".agent/specs/engram-absorption/book/spec.md", + ".agent/specs/engram-absorption/book/plan.md", + ".agent/specs/engram-absorption/book/checklists/general.md", + ".agent/specs/engram-absorption/book/changes/CR-001-initial-scope/change.md", + ".agent/specs/engram-absorption/book/changes/CR-001-initial-scope/tasks.md" + ], + "line": 64 + }, + { + "slice": "NORTHSTAR-MEM-CONTRACTS", + "branch": "work/prc-northstar-mem-contracts", + "paths": [ + ".agent/specs/engram-absorption/mem-residual/spec.md", + ".agent/specs/engram-absorption/mem-residual/plan.md", + ".agent/specs/engram-absorption/mem-residual/checklists/general.md", + ".agent/specs/engram-absorption/mem-residual/changes/CR-001-initial-scope/change.md", + ".agent/specs/engram-absorption/mem-residual/changes/CR-001-initial-scope/tasks.md" + ], + "line": 65 + }, + { + "slice": "NORTHSTAR-EFFECTIVENESS-CONTRACTS", + "branch": "work/prc-northstar-effectiveness-contracts", + "paths": [ + ".agent/specs/engram-effectiveness/production-ready-residual/spec.md", + ".agent/specs/engram-effectiveness/production-ready-residual/plan.md", + ".agent/specs/engram-effectiveness/production-ready-residual/checklists/general.md", + ".agent/specs/engram-effectiveness/production-ready-residual/changes/CR-001-initial-scope/change.md", + ".agent/specs/engram-effectiveness/production-ready-residual/changes/CR-001-initial-scope/tasks.md" + ], + "line": 66 + }, + { + "slice": "NORTHSTAR-SETTINGS-CONTRACTS", + "branch": "work/prc-northstar-settings-contracts", + "paths": [ + ".agent/specs/settings-store/production-ready-residual/spec.md", + ".agent/specs/settings-store/production-ready-residual/plan.md", + ".agent/specs/settings-store/production-ready-residual/checklists/general.md", + ".agent/specs/settings-store/production-ready-residual/changes/CR-001-initial-scope/change.md", + ".agent/specs/settings-store/production-ready-residual/changes/CR-001-initial-scope/tasks.md" + ], + "line": 67 + } + ], + "declarations": [ + { + "owner": "PLAN-GOVERNANCE", + "branch": "work/prc-release-gates-revision8-maker", + "path": ".agent/plans/2026-07-10-engram-production-ready-master-plan.md", + "display": ".agent/plans/2026-07-10-engram-production-ready-master-plan.md", + "kind": "exact", + "line": 6 + }, + { + "owner": "PLAN-GOVERNANCE", + "branch": "work/prc-release-gates-revision8-maker", + "path": ".agent/plans/2026-07-10-engram-production-ready-ownership-state.json", + "display": ".agent/plans/2026-07-10-engram-production-ready-ownership-state.json", + "kind": "exact", + "line": 6 + }, + { + "owner": "PLAN-GOVERNANCE", + "branch": "work/prc-release-gates-revision8-maker", + "path": ".agent/plans/2026-07-10-engram-production-ready-scope-map.json", + "display": ".agent/plans/2026-07-10-engram-production-ready-scope-map.json", + "kind": "exact", + "line": 6 + }, + { + "owner": "PLAN-GOVERNANCE", + "branch": "work/prc-release-gates-revision8-maker", + "path": ".agent/specs/release-gates-r8/evidence/plan-governance", + "display": ".agent/specs/release-gates-r8/evidence/plan-governance/**", + "kind": "prefix", + "line": 6 + }, + { + "owner": "PLAN-GOVERNANCE", + "branch": "work/prc-release-gates-revision8-maker", + "path": ".agent/reports/2026-07-10-release-gates-r8-plan-governance.md", + "display": ".agent/reports/2026-07-10-release-gates-r8-plan-governance.md", + "kind": "exact", + "line": 6 + }, + { + "owner": "DB-BULKOPS", + "branch": "work/prc-db-bulkops", + "path": "internal/bulkops/facade.go", + "display": "internal/bulkops/facade.go", + "kind": "exact", + "line": 7 + }, + { + "owner": "DB-BULKOPS", + "branch": "work/prc-db-bulkops", + "path": "internal/bulkops/facade_test.go", + "display": "internal/bulkops/facade_test.go", + "kind": "exact", + "line": 7 + }, + { + "owner": "DB-BULKOPS", + "branch": "work/prc-db-bulkops", + "path": "internal/bulkops/rollback.go", + "display": "internal/bulkops/rollback.go", + "kind": "exact", + "line": 7 + }, + { + "owner": "DB-BULKOPS", + "branch": "work/prc-db-bulkops", + "path": "internal/bulkops/rollback_test.go", + "display": "internal/bulkops/rollback_test.go", + "kind": "exact", + "line": 7 + }, + { + "owner": "DB-BULKOPS", + "branch": "work/prc-db-bulkops", + "path": "internal/db/gorm/candidate_store.go", + "display": "internal/db/gorm/candidate_store.go", + "kind": "exact", + "line": 7 + }, + { + "owner": "DB-BULKOPS", + "branch": "work/prc-db-bulkops", + "path": "internal/db/gorm/candidate_store_test.go", + "display": "internal/db/gorm/candidate_store_test.go", + "kind": "exact", + "line": 7 + }, + { + "owner": "DB-BULKOPS", + "branch": "work/prc-db-bulkops", + "path": "internal/mcp/tools_bulkops.go", + "display": "internal/mcp/tools_bulkops.go", + "kind": "exact", + "line": 7 + }, + { + "owner": "DB-BULKOPS", + "branch": "work/prc-db-bulkops", + "path": "internal/mcp/tools_dryrun_test.go", + "display": "internal/mcp/tools_dryrun_test.go", + "kind": "exact", + "line": 7 + }, + { + "owner": "DB-BULKOPS", + "branch": "work/prc-db-bulkops", + "path": "pkg/models/snapshot.go", + "display": "pkg/models/snapshot.go", + "kind": "exact", + "line": 7 + }, + { + "owner": "DB-BULKOPS", + "branch": "work/prc-db-bulkops", + "path": ".agent/reports/2026-07-10-db-bulkops-capture-lock-rework-maker.md", + "display": ".agent/reports/2026-07-10-db-bulkops-capture-lock-rework-maker.md", + "kind": "exact", + "line": 7 + }, + { + "owner": "DB-BULKOPS", + "branch": "work/prc-db-bulkops", + "path": ".agent/reports/2026-07-10-db-bulkops-sibling-rework-maker.md", + "display": ".agent/reports/2026-07-10-db-bulkops-sibling-rework-maker.md", + "kind": "exact", + "line": 7 + }, + { + "owner": "DB-BULKOPS", + "branch": "work/prc-db-bulkops", + "path": ".agent/specs/production-ready-db-bulkops/evidence", + "display": ".agent/specs/production-ready-db-bulkops/evidence/**", + "kind": "prefix", + "line": 7 + }, + { + "owner": "DB-BULKOPS", + "branch": "work/prc-db-bulkops", + "path": ".agent/reports/evidence/production-ready/db-bulkops-sibling-rework", + "display": ".agent/reports/evidence/production-ready/db-bulkops-sibling-rework/**", + "kind": "prefix", + "line": 7 + }, + { + "owner": "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK", + "branch": "work/prc-db-bulkops", + "path": "internal/db/gorm/candidate_store.go", + "display": "internal/db/gorm/candidate_store.go", + "kind": "exact", + "line": 8 + }, + { + "owner": "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK", + "branch": "work/prc-db-bulkops", + "path": "internal/db/gorm/candidate_store_test.go", + "display": "internal/db/gorm/candidate_store_test.go", + "kind": "exact", + "line": 8 + }, + { + "owner": "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK", + "branch": "work/prc-db-bulkops", + "path": "internal/mcp/tools_bulkops.go", + "display": "internal/mcp/tools_bulkops.go", + "kind": "exact", + "line": 8 + }, + { + "owner": "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK", + "branch": "work/prc-db-bulkops", + "path": "internal/mcp/tools_dryrun_test.go", + "display": "internal/mcp/tools_dryrun_test.go", + "kind": "exact", + "line": 8 + }, + { + "owner": "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK", + "branch": "work/prc-db-bulkops", + "path": ".agent/reports/2026-07-10-db-bulkops-behavioral-edge-rework-maker-3.md", + "display": ".agent/reports/2026-07-10-db-bulkops-behavioral-edge-rework-maker-3.md", + "kind": "exact", + "line": 8 + }, + { + "owner": "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK", + "branch": "work/prc-db-bulkops", + "path": ".agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework", + "display": ".agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/**", + "kind": "prefix", + "line": 8 + }, + { + "owner": "DB-TEST-POOL-HYGIENE", + "branch": "work/prc-db-test-pool-hygiene-evidence-r2", + "path": "internal/db/gorm/candidate_store_test.go", + "display": "internal/db/gorm/candidate_store_test.go", + "kind": "exact", + "line": 9 + }, + { + "owner": "DB-TEST-POOL-HYGIENE", + "branch": "work/prc-db-test-pool-hygiene-evidence-r2", + "path": ".agent/reports/2026-07-10-db-test-pool-hygiene-maker.md", + "display": ".agent/reports/2026-07-10-db-test-pool-hygiene-maker.md", + "kind": "exact", + "line": 9 + }, + { + "owner": "DB-TEST-POOL-HYGIENE", + "branch": "work/prc-db-test-pool-hygiene-evidence-r2", + "path": ".agent/reports/2026-07-10-db-test-pool-hygiene-evidence-revision-maker.md", + "display": ".agent/reports/2026-07-10-db-test-pool-hygiene-evidence-revision-maker.md", + "kind": "exact", + "line": 9 + }, + { + "owner": "DB-TEST-POOL-HYGIENE", + "branch": "work/prc-db-test-pool-hygiene-evidence-r2", + "path": ".agent/reports/evidence/production-ready/db-test-pool-hygiene", + "display": ".agent/reports/evidence/production-ready/db-test-pool-hygiene/**", + "kind": "prefix", + "line": 9 + }, + { + "owner": "DB-GOVERNANCE", + "branch": "work/prc-db-governance", + "path": "internal/db/gorm/candidate_store.go", + "display": "internal/db/gorm/candidate_store.go", + "kind": "exact", + "line": 10 + }, + { + "owner": "DB-GOVERNANCE", + "branch": "work/prc-db-governance", + "path": "internal/db/gorm/candidate_store_test.go", + "display": "internal/db/gorm/candidate_store_test.go", + "kind": "exact", + "line": 10 + }, + { + "owner": "DB-GOVERNANCE", + "branch": "work/prc-db-governance", + "path": "internal/db/gorm/rule_arbiter_store_test.go", + "display": "internal/db/gorm/rule_arbiter_store_test.go", + "kind": "exact", + "line": 10 + }, + { + "owner": "DB-GOVERNANCE", + "branch": "work/prc-db-governance", + "path": "internal/db/gorm/rule_governance_store.go", + "display": "internal/db/gorm/rule_governance_store.go", + "kind": "exact", + "line": 10 + }, + { + "owner": "DB-GOVERNANCE", + "branch": "work/prc-db-governance", + "path": "internal/db/gorm/rule_governance_store_test.go", + "display": "internal/db/gorm/rule_governance_store_test.go", + "kind": "exact", + "line": 10 + }, + { + "owner": "DB-GOVERNANCE", + "branch": "work/prc-db-governance", + "path": "internal/db/gorm/rule_governance_rg3_store_test.go", + "display": "internal/db/gorm/rule_governance_rg3_store_test.go", + "kind": "exact", + "line": 10 + }, + { + "owner": "DB-GOVERNANCE", + "branch": "work/prc-db-governance", + "path": "internal/db/gorm/migration_rule_governance.go", + "display": "internal/db/gorm/migration_rule_governance.go", + "kind": "exact", + "line": 10 + }, + { + "owner": "DB-GOVERNANCE", + "branch": "work/prc-db-governance", + "path": "internal/db/gorm/migration_rule_arbiter.go", + "display": "internal/db/gorm/migration_rule_arbiter.go", + "kind": "exact", + "line": 10 + }, + { + "owner": "DB-GOVERNANCE", + "branch": "work/prc-db-governance", + "path": "internal/db/gorm/migration_rule_governance_snapshot_statuses.go", + "display": "internal/db/gorm/migration_rule_governance_snapshot_statuses.go", + "kind": "exact", + "line": 10 + }, + { + "owner": "CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK", + "branch": "work/prc-candidate-review-snapshot-rollback", + "path": "internal/reviewpacket/candidate.go", + "display": "internal/reviewpacket/candidate.go", + "kind": "exact", + "line": 11 + }, + { + "owner": "CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK", + "branch": "work/prc-candidate-review-snapshot-rollback", + "path": "internal/reviewpacket/candidate_test.go", + "display": "internal/reviewpacket/candidate_test.go", + "kind": "exact", + "line": 11 + }, + { + "owner": "CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK", + "branch": "work/prc-candidate-review-snapshot-rollback", + "path": "internal/db/gorm/candidate_store.go", + "display": "internal/db/gorm/candidate_store.go", + "kind": "exact", + "line": 11 + }, + { + "owner": "CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK", + "branch": "work/prc-candidate-review-snapshot-rollback", + "path": "internal/db/gorm/candidate_store_test.go", + "display": "internal/db/gorm/candidate_store_test.go", + "kind": "exact", + "line": 11 + }, + { + "owner": "CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK", + "branch": "work/prc-candidate-review-snapshot-rollback", + "path": "internal/db/gorm/snapshot_store.go", + "display": "internal/db/gorm/snapshot_store.go", + "kind": "exact", + "line": 11 + }, + { + "owner": "CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK", + "branch": "work/prc-candidate-review-snapshot-rollback", + "path": "internal/db/gorm/snapshot_store_test.go", + "display": "internal/db/gorm/snapshot_store_test.go", + "kind": "exact", + "line": 11 + }, + { + "owner": "CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK", + "branch": "work/prc-candidate-review-snapshot-rollback", + "path": "internal/bulkops/rollback_test.go", + "display": "internal/bulkops/rollback_test.go", + "kind": "exact", + "line": 11 + }, + { + "owner": "CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK", + "branch": "work/prc-candidate-review-snapshot-rollback", + "path": "tests/critical/candidate_review/candidate_review_snapshot_rollback_test.go", + "display": "tests/critical/candidate_review/candidate_review_snapshot_rollback_test.go", + "kind": "exact", + "line": 11 + }, + { + "owner": "INGEST-DOC-SNAPSHOT-DEMOLITION", + "branch": "work/prc-ingest-doc-snapshot-demolition", + "path": "internal/bulkops/facade.go", + "display": "internal/bulkops/facade.go", + "kind": "exact", + "line": 13 + }, + { + "owner": "INGEST-DOC-SNAPSHOT-DEMOLITION", + "branch": "work/prc-ingest-doc-snapshot-demolition", + "path": "internal/bulkops/facade_test.go", + "display": "internal/bulkops/facade_test.go", + "kind": "exact", + "line": 13 + }, + { + "owner": "INGEST-DOC-SNAPSHOT-DEMOLITION", + "branch": "work/prc-ingest-doc-snapshot-demolition", + "path": "pkg/models/snapshot.go", + "display": "pkg/models/snapshot.go", + "kind": "exact", + "line": 13 + }, + { + "owner": "INGEST-DOC-SNAPSHOT-DEMOLITION", + "branch": "work/prc-ingest-doc-snapshot-demolition", + "path": "pkg/models/snapshot_test.go", + "display": "pkg/models/snapshot_test.go", + "kind": "exact", + "line": 13 + }, + { + "owner": "INGEST-DOC-SNAPSHOT-DEMOLITION", + "branch": "work/prc-ingest-doc-snapshot-demolition", + "path": "internal/mcp/ingest_snapshot_contract_test.go", + "display": "internal/mcp/ingest_snapshot_contract_test.go", + "kind": "exact", + "line": 13 + }, + { + "owner": "DB-AUTH", + "branch": "work/prc-db-auth", + "path": "internal/db/gorm/user_store.go", + "display": "internal/db/gorm/user_store.go", + "kind": "exact", + "line": 14 + }, + { + "owner": "DB-AUTH", + "branch": "work/prc-db-auth", + "path": "internal/db/gorm/user_store_test.go", + "display": "internal/db/gorm/user_store_test.go", + "kind": "exact", + "line": 14 + }, + { + "owner": "DB-AUTH", + "branch": "work/prc-db-auth", + "path": "internal/worker/auth_handlers.go", + "display": "internal/worker/auth_handlers.go", + "kind": "exact", + "line": 14 + }, + { + "owner": "DB-AUTH", + "branch": "work/prc-db-auth", + "path": "internal/worker/auth_handlers_lifecycle_test.go", + "display": "internal/worker/auth_handlers_lifecycle_test.go", + "kind": "exact", + "line": 14 + }, + { + "owner": "AUTH-BOOTSTRAP-SECURITY", + "branch": "work/prc-auth-bootstrap-security", + "path": "internal/config/config.go", + "display": "internal/config/config.go", + "kind": "exact", + "line": 15 + }, + { + "owner": "AUTH-BOOTSTRAP-SECURITY", + "branch": "work/prc-auth-bootstrap-security", + "path": "internal/config/config_test.go", + "display": "internal/config/config_test.go", + "kind": "exact", + "line": 15 + }, + { + "owner": "AUTH-BOOTSTRAP-SECURITY", + "branch": "work/prc-auth-bootstrap-security", + "path": "internal/config/envnames.go", + "display": "internal/config/envnames.go", + "kind": "exact", + "line": 15 + }, + { + "owner": "AUTH-BOOTSTRAP-SECURITY", + "branch": "work/prc-auth-bootstrap-security", + "path": "internal/db/gorm/user_store.go", + "display": "internal/db/gorm/user_store.go", + "kind": "exact", + "line": 15 + }, + { + "owner": "AUTH-BOOTSTRAP-SECURITY", + "branch": "work/prc-auth-bootstrap-security", + "path": "internal/worker/middleware.go", + "display": "internal/worker/middleware.go", + "kind": "exact", + "line": 15 + }, + { + "owner": "AUTH-BOOTSTRAP-SECURITY", + "branch": "work/prc-auth-bootstrap-security", + "path": "internal/worker/middleware_test.go", + "display": "internal/worker/middleware_test.go", + "kind": "exact", + "line": 15 + }, + { + "owner": "AUTH-BOOTSTRAP-SECURITY", + "branch": "work/prc-auth-bootstrap-security", + "path": "internal/worker/auth_handlers.go", + "display": "internal/worker/auth_handlers.go", + "kind": "exact", + "line": 15 + }, + { + "owner": "AUTH-BOOTSTRAP-SECURITY", + "branch": "work/prc-auth-bootstrap-security", + "path": "internal/worker/auth_bootstrap_limiter.go", + "display": "internal/worker/auth_bootstrap_limiter.go", + "kind": "exact", + "line": 15 + }, + { + "owner": "AUTH-BOOTSTRAP-SECURITY", + "branch": "work/prc-auth-bootstrap-security", + "path": "internal/worker/auth_bootstrap_limiter_test.go", + "display": "internal/worker/auth_bootstrap_limiter_test.go", + "kind": "exact", + "line": 15 + }, + { + "owner": "AUTH-BOOTSTRAP-SECURITY", + "branch": "work/prc-auth-bootstrap-security", + "path": "internal/worker/auth_bootstrap_security_test.go", + "display": "internal/worker/auth_bootstrap_security_test.go", + "kind": "exact", + "line": 15 + }, + { + "owner": "AUTH-BOOTSTRAP-SECURITY", + "branch": "work/prc-auth-bootstrap-security", + "path": "internal/worker/service.go", + "display": "internal/worker/service.go", + "kind": "exact", + "line": 15 + }, + { + "owner": "AUTH-BOOTSTRAP-SECURITY", + "branch": "work/prc-auth-bootstrap-security", + "path": "tests/critical/auth_bootstrap/first_admin_bootstrap_test.go", + "display": "tests/critical/auth_bootstrap/first_admin_bootstrap_test.go", + "kind": "exact", + "line": 15 + }, + { + "owner": "AUTH-BOOTSTRAP-SECURITY", + "branch": "work/prc-auth-bootstrap-security", + "path": "scripts/production-smoke/customer/run-auth-bootstrap-adversary.ps1", + "display": "scripts/production-smoke/customer/run-auth-bootstrap-adversary.ps1", + "kind": "exact", + "line": 15 + }, + { + "owner": "DURABLE-AUDIT-BOUNDARIES", + "branch": "work/prc-durable-audit-boundaries", + "path": "internal/db/gorm/domain_owner_store.go", + "display": "internal/db/gorm/domain_owner_store.go", + "kind": "exact", + "line": 16 + }, + { + "owner": "DURABLE-AUDIT-BOUNDARIES", + "branch": "work/prc-durable-audit-boundaries", + "path": "internal/db/gorm/domain_owner_store_test.go", + "display": "internal/db/gorm/domain_owner_store_test.go", + "kind": "exact", + "line": 16 + }, + { + "owner": "DURABLE-AUDIT-BOUNDARIES", + "branch": "work/prc-durable-audit-boundaries", + "path": "internal/db/gorm/user_store.go", + "display": "internal/db/gorm/user_store.go", + "kind": "exact", + "line": 16 + }, + { + "owner": "DURABLE-AUDIT-BOUNDARIES", + "branch": "work/prc-durable-audit-boundaries", + "path": "internal/worker/auth_handlers.go", + "display": "internal/worker/auth_handlers.go", + "kind": "exact", + "line": 16 + }, + { + "owner": "DURABLE-AUDIT-BOUNDARIES", + "branch": "work/prc-durable-audit-boundaries", + "path": "internal/worker/auth_audit_durability_test.go", + "display": "internal/worker/auth_audit_durability_test.go", + "kind": "exact", + "line": 16 + }, + { + "owner": "DURABLE-AUDIT-BOUNDARIES", + "branch": "work/prc-durable-audit-boundaries", + "path": "internal/bulkops/facade.go", + "display": "internal/bulkops/facade.go", + "kind": "exact", + "line": 16 + }, + { + "owner": "DURABLE-AUDIT-BOUNDARIES", + "branch": "work/prc-durable-audit-boundaries", + "path": "internal/bulkops/audit_durability_test.go", + "display": "internal/bulkops/audit_durability_test.go", + "kind": "exact", + "line": 16 + }, + { + "owner": "DURABLE-AUDIT-BOUNDARIES", + "branch": "work/prc-durable-audit-boundaries", + "path": "scripts/production-smoke/customer/run-durable-audit-faults.ps1", + "display": "scripts/production-smoke/customer/run-durable-audit-faults.ps1", + "kind": "exact", + "line": 16 + }, + { + "owner": "DB-CRYSTALLIZATION", + "branch": "work/prc-db-crystallization", + "path": "internal/worker/handlers_hooks_crystallization_integration_test.go", + "display": "internal/worker/handlers_hooks_crystallization_integration_test.go", + "kind": "exact", + "line": 17 + }, + { + "owner": "CRYSTALLIZATION-DREAM-CYCLE-CORRECTNESS", + "branch": "work/prc-crystallization-dream-cycle-correctness", + "path": "internal/worker/dream_cycle.go", + "display": "internal/worker/dream_cycle.go", + "kind": "exact", + "line": 18 + }, + { + "owner": "CRYSTALLIZATION-DREAM-CYCLE-CORRECTNESS", + "branch": "work/prc-crystallization-dream-cycle-correctness", + "path": "internal/worker/dream_cycle_test.go", + "display": "internal/worker/dream_cycle_test.go", + "kind": "exact", + "line": 18 + }, + { + "owner": "CRYSTALLIZATION-DREAM-CYCLE-CORRECTNESS", + "branch": "work/prc-crystallization-dream-cycle-correctness", + "path": ".agent/reports/2026-07-10-crystallization-dream-cycle-correctness-maker.md", + "display": ".agent/reports/2026-07-10-crystallization-dream-cycle-correctness-maker.md", + "kind": "exact", + "line": 18 + }, + { + "owner": "CRYSTALLIZATION-DREAM-CYCLE-CORRECTNESS", + "branch": "work/prc-crystallization-dream-cycle-correctness", + "path": ".agent/e/cdc", + "display": ".agent/e/cdc/**", + "kind": "prefix", + "line": 18 + }, + { + "owner": "DB-EMBEDDING-STATS", + "branch": "work/prc-db-embedding-stats", + "path": "internal/embedding/store.go", + "display": "internal/embedding/store.go", + "kind": "exact", + "line": 19 + }, + { + "owner": "DB-EMBEDDING-STATS", + "branch": "work/prc-db-embedding-stats", + "path": "internal/embedding/store_stats_test.go", + "display": "internal/embedding/store_stats_test.go", + "kind": "exact", + "line": 19 + }, + { + "owner": "DB-EMBEDDING-EVIDENCE-TRANSPORT", + "branch": "work/prc-db-embedding-evidence-transport-r5", + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport", + "display": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/**", + "kind": "prefix", + "line": 20 + }, + { + "owner": "DB-EMBEDDING-EVIDENCE-TRANSPORT", + "branch": "work/prc-db-embedding-evidence-transport-r5", + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3", + "display": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/**", + "kind": "prefix", + "line": 20 + }, + { + "owner": "DB-EMBEDDING-EVIDENCE-TRANSPORT", + "branch": "work/prc-db-embedding-evidence-transport-r5", + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4", + "display": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4/**", + "kind": "prefix", + "line": 20 + }, + { + "owner": "DB-EMBEDDING-EVIDENCE-TRANSPORT", + "branch": "work/prc-db-embedding-evidence-transport-r5", + "path": ".agent/specs/db-embedding-stats-evidence-transport/evidence", + "display": ".agent/specs/db-embedding-stats-evidence-transport/evidence/**", + "kind": "prefix", + "line": 20 + }, + { + "owner": "DB-REAPER", + "branch": "work/prc-db-reaper", + "path": "internal/worker/reaper/reaper.go", + "display": "internal/worker/reaper/reaper.go", + "kind": "exact", + "line": 21 + }, + { + "owner": "DB-REAPER", + "branch": "work/prc-db-reaper", + "path": "internal/worker/reaper/reaper_test.go", + "display": "internal/worker/reaper/reaper_test.go", + "kind": "exact", + "line": 21 + }, + { + "owner": "SECURITY-TOOLCHAIN", + "branch": "work/prc-security-toolchain", + "path": "go.mod", + "display": "go.mod", + "kind": "exact", + "line": 22 + }, + { + "owner": "SECURITY-TOOLCHAIN", + "branch": "work/prc-security-toolchain", + "path": "go.sum", + "display": "go.sum", + "kind": "exact", + "line": 22 + }, + { + "owner": "SECURITY-TOOLCHAIN", + "branch": "work/prc-security-toolchain", + "path": "Dockerfile", + "display": "Dockerfile", + "kind": "exact", + "line": 22 + }, + { + "owner": "RELEASE-GATES", + "branch": "work/prc-release-gates-revision8-maker", + "path": ".github/workflows/test.yml", + "display": ".github/workflows/test.yml", + "kind": "exact", + "line": 23 + }, + { + "owner": "RELEASE-GATES", + "branch": "work/prc-release-gates-revision8-maker", + "path": "scripts/production-gates/assert-plan-path-ownership.ps1", + "display": "scripts/production-gates/assert-plan-path-ownership.ps1", + "kind": "exact", + "line": 23 + }, + { + "owner": "RELEASE-GATES", + "branch": "work/prc-release-gates-revision8-maker", + "path": "scripts/production-gates/run-db-suite.ps1", + "display": "scripts/production-gates/run-db-suite.ps1", + "kind": "exact", + "line": 23 + }, + { + "owner": "RELEASE-GATES", + "branch": "work/prc-release-gates-revision8-maker", + "path": ".agent/specs/release-gates-r8/evidence/release-gates", + "display": ".agent/specs/release-gates-r8/evidence/release-gates/**", + "kind": "prefix", + "line": 23 + }, + { + "owner": "RELEASE-GATES", + "branch": "work/prc-release-gates-revision8-maker", + "path": ".agent/reports/2026-07-10-release-gates-r8-maker.md", + "display": ".agent/reports/2026-07-10-release-gates-r8-maker.md", + "kind": "exact", + "line": 23 + }, + { + "owner": "IMAGE-REMEDIATION", + "branch": "work/prc-image-remediation", + "path": "Dockerfile", + "display": "Dockerfile", + "kind": "exact", + "line": 24 + }, + { + "owner": "IMAGE-REMEDIATION", + "branch": "work/prc-image-remediation", + "path": "cmd/engram-healthcheck/main.go", + "display": "cmd/engram-healthcheck/main.go", + "kind": "exact", + "line": 24 + }, + { + "owner": "IMAGE-REMEDIATION", + "branch": "work/prc-image-remediation", + "path": "cmd/engram-healthcheck/main_test.go", + "display": "cmd/engram-healthcheck/main_test.go", + "kind": "exact", + "line": 24 + }, + { + "owner": "IMAGE-REMEDIATION", + "branch": "work/prc-image-remediation", + "path": "apps/operator-console/package.json", + "display": "apps/operator-console/package.json", + "kind": "exact", + "line": 24 + }, + { + "owner": "IMAGE-REMEDIATION", + "branch": "work/prc-image-remediation", + "path": "apps/operator-console/package-lock.json", + "display": "apps/operator-console/package-lock.json", + "kind": "exact", + "line": 24 + }, + { + "owner": "IMAGE-REMEDIATION", + "branch": "work/prc-image-remediation", + "path": "deploy/postgres/Dockerfile", + "display": "deploy/postgres/Dockerfile", + "kind": "exact", + "line": 24 + }, + { + "owner": "IMAGE-REMEDIATION", + "branch": "work/prc-image-remediation", + "path": "docker-compose.yml", + "display": "docker-compose.yml", + "kind": "exact", + "line": 24 + }, + { + "owner": "IMAGE-REMEDIATION", + "branch": "work/prc-image-remediation", + "path": "deploy/docker-compose.runtime.yml", + "display": "deploy/docker-compose.runtime.yml", + "kind": "exact", + "line": 24 + }, + { + "owner": "IMAGE-REMEDIATION", + "branch": "work/prc-image-remediation", + "path": "docs/DEPLOYMENT.md", + "display": "docs/DEPLOYMENT.md", + "kind": "exact", + "line": 24 + }, + { + "owner": "IMAGE-REMEDIATION", + "branch": "work/prc-image-remediation", + "path": "docs/PRODUCTION-TESTING-PLAYBOOK.md", + "display": "docs/PRODUCTION-TESTING-PLAYBOOK.md", + "kind": "exact", + "line": 24 + }, + { + "owner": "IMAGE-REMEDIATION", + "branch": "work/prc-image-remediation", + "path": ".github/workflows/test.yml", + "display": ".github/workflows/test.yml", + "kind": "exact", + "line": 24 + }, + { + "owner": "IMAGE-REMEDIATION", + "branch": "work/prc-image-remediation", + "path": ".github/workflows/docker.yaml", + "display": ".github/workflows/docker.yaml", + "kind": "exact", + "line": 24 + }, + { + "owner": "IMAGE-REMEDIATION", + "branch": "work/prc-image-remediation", + "path": ".github/workflows/docker-publish.yml", + "display": ".github/workflows/docker-publish.yml", + "kind": "exact", + "line": 24 + }, + { + "owner": "IMAGE-REMEDIATION", + "branch": "work/prc-image-remediation", + "path": "scripts/production-gates/build-and-scan-images.ps1", + "display": "scripts/production-gates/build-and-scan-images.ps1", + "kind": "exact", + "line": 24 + }, + { + "owner": "IMAGE-REMEDIATION", + "branch": "work/prc-image-remediation", + "path": "tests/critical/runtime/image_runtime_contract_test.go", + "display": "tests/critical/runtime/image_runtime_contract_test.go", + "kind": "exact", + "line": 24 + }, + { + "owner": "IMAGE-REMEDIATION", + "branch": "work/prc-image-remediation", + "path": "tests/critical/runtime/postgres_image_contract_test.go", + "display": "tests/critical/runtime/postgres_image_contract_test.go", + "kind": "exact", + "line": 24 + }, + { + "owner": "SECURITY-PROJECT-IDENTITY", + "branch": "work/prc-security-project-identity-r3", + "path": "internal/db/gorm/project_store.go", + "display": "internal/db/gorm/project_store.go", + "kind": "exact", + "line": 25 + }, + { + "owner": "SECURITY-PROJECT-IDENTITY", + "branch": "work/prc-security-project-identity-r3", + "path": "internal/db/gorm/project_store_test.go", + "display": "internal/db/gorm/project_store_test.go", + "kind": "exact", + "line": 25 + }, + { + "owner": "SECURITY-PROJECT-IDENTITY", + "branch": "work/prc-security-project-identity-r3", + "path": "internal/grpcserver/project_identity_v2_test.go", + "display": "internal/grpcserver/project_identity_v2_test.go", + "kind": "exact", + "line": 25 + }, + { + "owner": "OPENCLAW-RELEASE", + "branch": "work/prc-openclaw-release", + "path": "plugin/openclaw-engram/.gitignore", + "display": "plugin/openclaw-engram/.gitignore", + "kind": "exact", + "line": 26 + }, + { + "owner": "OPENCLAW-RELEASE", + "branch": "work/prc-openclaw-release", + "path": "plugin/openclaw-engram/package.json", + "display": "plugin/openclaw-engram/package.json", + "kind": "exact", + "line": 26 + }, + { + "owner": "OPENCLAW-RELEASE", + "branch": "work/prc-openclaw-release", + "path": "plugin/openclaw-engram/package-lock.json", + "display": "plugin/openclaw-engram/package-lock.json", + "kind": "exact", + "line": 26 + }, + { + "owner": "OPENCLAW-RELEASE", + "branch": "work/prc-openclaw-release", + "path": "plugin/openclaw-engram/openclaw.plugin.json", + "display": "plugin/openclaw-engram/openclaw.plugin.json", + "kind": "exact", + "line": 26 + }, + { + "owner": "OPENCLAW-RELEASE", + "branch": "work/prc-openclaw-release", + "path": "plugin/openclaw-engram/README.md", + "display": "plugin/openclaw-engram/README.md", + "kind": "exact", + "line": 26 + }, + { + "owner": "OPENCLAW-RELEASE", + "branch": "work/prc-openclaw-release", + "path": ".github/workflows/plugin-publish.yml", + "display": ".github/workflows/plugin-publish.yml", + "kind": "exact", + "line": 26 + }, + { + "owner": "OPENCLAW-RELEASE", + "branch": "work/prc-openclaw-release", + "path": "docs/RELEASE-PROTOCOL.md", + "display": "docs/RELEASE-PROTOCOL.md", + "kind": "exact", + "line": 26 + }, + { + "owner": "UPDATE-LIFECYCLE", + "branch": "work/prc-security-updater", + "path": "internal/update/update.go", + "display": "internal/update/update.go", + "kind": "exact", + "line": 27 + }, + { + "owner": "UPDATE-LIFECYCLE", + "branch": "work/prc-security-updater", + "path": "internal/update/update_test.go", + "display": "internal/update/update_test.go", + "kind": "exact", + "line": 27 + }, + { + "owner": "UPDATE-LIFECYCLE", + "branch": "work/prc-security-updater", + "path": "internal/worker/handlers_update.go", + "display": "internal/worker/handlers_update.go", + "kind": "exact", + "line": 27 + }, + { + "owner": "UPDATE-LIFECYCLE", + "branch": "work/prc-security-updater", + "path": "internal/worker/handlers_update_test.go", + "display": "internal/worker/handlers_update_test.go", + "kind": "exact", + "line": 27 + }, + { + "owner": "UPDATE-LIFECYCLE", + "branch": "work/prc-security-updater", + "path": "scripts/install.sh", + "display": "scripts/install.sh", + "kind": "exact", + "line": 27 + }, + { + "owner": "UPDATE-LIFECYCLE", + "branch": "work/prc-security-updater", + "path": "scripts/install.ps1", + "display": "scripts/install.ps1", + "kind": "exact", + "line": 27 + }, + { + "owner": "UPDATE-LIFECYCLE", + "branch": "work/prc-security-updater", + "path": ".goreleaser.yaml", + "display": ".goreleaser.yaml", + "kind": "exact", + "line": 27 + }, + { + "owner": "UPDATE-LIFECYCLE", + "branch": "work/prc-security-updater", + "path": ".github/workflows/release.yaml", + "display": ".github/workflows/release.yaml", + "kind": "exact", + "line": 27 + }, + { + "owner": "UPDATE-LIFECYCLE", + "branch": "work/prc-security-updater", + "path": "plugin/engram/hooks/hook-cli.test.js", + "display": "plugin/engram/hooks/hook-cli.test.js", + "kind": "exact", + "line": 27 + }, + { + "owner": "DOCUMENT-INGEST-PUBLIC-TRUTH", + "branch": "work/prc-document-ingest-public-truth", + "path": "internal/mcp/server.go", + "display": "internal/mcp/server.go", + "kind": "exact", + "line": 29 + }, + { + "owner": "DOCUMENT-INGEST-PUBLIC-TRUTH", + "branch": "work/prc-document-ingest-public-truth", + "path": "internal/mcp/ingest_document_description_test.go", + "display": "internal/mcp/ingest_document_description_test.go", + "kind": "exact", + "line": 29 + }, + { + "owner": "MCP-STRUCTURED-INPUT-VALIDATION", + "branch": "work/prc-mcp-structured-input-validation", + "path": "internal/mcp/coerce.go", + "display": "internal/mcp/coerce.go", + "kind": "exact", + "line": 31 + }, + { + "owner": "MCP-STRUCTURED-INPUT-VALIDATION", + "branch": "work/prc-mcp-structured-input-validation", + "path": "internal/mcp/coerce_test.go", + "display": "internal/mcp/coerce_test.go", + "kind": "exact", + "line": 31 + }, + { + "owner": "MCP-STRUCTURED-INPUT-VALIDATION", + "branch": "work/prc-mcp-structured-input-validation", + "path": "internal/mcp/tools_candidates.go", + "display": "internal/mcp/tools_candidates.go", + "kind": "exact", + "line": 31 + }, + { + "owner": "MCP-STRUCTURED-INPUT-VALIDATION", + "branch": "work/prc-mcp-structured-input-validation", + "path": "internal/mcp/tools_candidates_test.go", + "display": "internal/mcp/tools_candidates_test.go", + "kind": "exact", + "line": 31 + }, + { + "owner": "MCP-STRUCTURED-INPUT-VALIDATION", + "branch": "work/prc-mcp-structured-input-validation", + "path": "internal/mcp/tools_memory.go", + "display": "internal/mcp/tools_memory.go", + "kind": "exact", + "line": 31 + }, + { + "owner": "MCP-STRUCTURED-INPUT-VALIDATION", + "branch": "work/prc-mcp-structured-input-validation", + "path": "internal/mcp/tools_memory_edit_test.go", + "display": "internal/mcp/tools_memory_edit_test.go", + "kind": "exact", + "line": 31 + }, + { + "owner": "MCP-STRUCTURED-INPUT-VALIDATION", + "branch": "work/prc-mcp-structured-input-validation", + "path": "internal/mcp/tools_memory_significance.go", + "display": "internal/mcp/tools_memory_significance.go", + "kind": "exact", + "line": 31 + }, + { + "owner": "MCP-STRUCTURED-INPUT-VALIDATION", + "branch": "work/prc-mcp-structured-input-validation", + "path": "internal/mcp/tools_memory_significance_test.go", + "display": "internal/mcp/tools_memory_significance_test.go", + "kind": "exact", + "line": 31 + }, + { + "owner": "MCP-STRUCTURED-INPUT-VALIDATION", + "branch": "work/prc-mcp-structured-input-validation", + "path": "internal/mcp/tools_store_consolidated.go", + "display": "internal/mcp/tools_store_consolidated.go", + "kind": "exact", + "line": 31 + }, + { + "owner": "MCP-STRUCTURED-INPUT-VALIDATION", + "branch": "work/prc-mcp-structured-input-validation", + "path": "internal/mcp/tools_settings.go", + "display": "internal/mcp/tools_settings.go", + "kind": "exact", + "line": 31 + }, + { + "owner": "MCP-STRUCTURED-INPUT-VALIDATION", + "branch": "work/prc-mcp-structured-input-validation", + "path": "internal/mcp/tools_settings_test.go", + "display": "internal/mcp/tools_settings_test.go", + "kind": "exact", + "line": 31 + }, + { + "owner": "MCP-STRUCTURED-INPUT-VALIDATION", + "branch": "work/prc-mcp-structured-input-validation", + "path": "internal/mcp/tools_documents_v2.go", + "display": "internal/mcp/tools_documents_v2.go", + "kind": "exact", + "line": 31 + }, + { + "owner": "MCP-STRUCTURED-INPUT-VALIDATION", + "branch": "work/prc-mcp-structured-input-validation", + "path": "internal/mcp/tools_rule_governance.go", + "display": "internal/mcp/tools_rule_governance.go", + "kind": "exact", + "line": 31 + }, + { + "owner": "MCP-STRUCTURED-INPUT-VALIDATION", + "branch": "work/prc-mcp-structured-input-validation", + "path": "internal/mcp/tools_rule_governance_test.go", + "display": "internal/mcp/tools_rule_governance_test.go", + "kind": "exact", + "line": 31 + }, + { + "owner": "MCP-STRUCTURED-INPUT-VALIDATION", + "branch": "work/prc-mcp-structured-input-validation", + "path": "internal/mcp/structured_input_validation_test.go", + "display": "internal/mcp/structured_input_validation_test.go", + "kind": "exact", + "line": 31 + }, + { + "owner": "REDACTION-LIVE-CONTRACT", + "branch": "work/prc-redaction-live-contract", + "path": "internal/redaction/layer.go", + "display": "internal/redaction/layer.go", + "kind": "exact", + "line": 32 + }, + { + "owner": "REDACTION-LIVE-CONTRACT", + "branch": "work/prc-redaction-live-contract", + "path": "internal/redaction/layer_test.go", + "display": "internal/redaction/layer_test.go", + "kind": "exact", + "line": 32 + }, + { + "owner": "REDACTION-LIVE-CONTRACT", + "branch": "work/prc-redaction-live-contract", + "path": "internal/redaction/rejection_test.go", + "display": "internal/redaction/rejection_test.go", + "kind": "exact", + "line": 32 + }, + { + "owner": "REDACTION-LIVE-CONTRACT", + "branch": "work/prc-redaction-live-contract", + "path": "internal/mcp/redaction_guard.go", + "display": "internal/mcp/redaction_guard.go", + "kind": "exact", + "line": 32 + }, + { + "owner": "REDACTION-LIVE-CONTRACT", + "branch": "work/prc-redaction-live-contract", + "path": "internal/mcp/redaction_guard_test.go", + "display": "internal/mcp/redaction_guard_test.go", + "kind": "exact", + "line": 32 + }, + { + "owner": "REDACTION-LIVE-CONTRACT", + "branch": "work/prc-redaction-live-contract", + "path": "internal/mcp/tools_memory.go", + "display": "internal/mcp/tools_memory.go", + "kind": "exact", + "line": 32 + }, + { + "owner": "REDACTION-LIVE-CONTRACT", + "branch": "work/prc-redaction-live-contract", + "path": "internal/mcp/tools_rules.go", + "display": "internal/mcp/tools_rules.go", + "kind": "exact", + "line": 32 + }, + { + "owner": "REDACTION-LIVE-CONTRACT", + "branch": "work/prc-redaction-live-contract", + "path": "internal/mcp/tools_memory_redaction_audit_test.go", + "display": "internal/mcp/tools_memory_redaction_audit_test.go", + "kind": "exact", + "line": 32 + }, + { + "owner": "REDACTION-LIVE-CONTRACT", + "branch": "work/prc-redaction-live-contract", + "path": "internal/mcp/tools_rules_redaction_audit_test.go", + "display": "internal/mcp/tools_rules_redaction_audit_test.go", + "kind": "exact", + "line": 32 + }, + { + "owner": "REDACTION-LIVE-CONTRACT", + "branch": "work/prc-redaction-live-contract", + "path": "internal/worker/service.go", + "display": "internal/worker/service.go", + "kind": "exact", + "line": 32 + }, + { + "owner": "REDACTION-LIVE-CONTRACT", + "branch": "work/prc-redaction-live-contract", + "path": "internal/worker/service_redaction_test.go", + "display": "internal/worker/service_redaction_test.go", + "kind": "exact", + "line": 32 + }, + { + "owner": "REDACTION-LIVE-CONTRACT", + "branch": "work/prc-redaction-live-contract", + "path": "docs/operating-engram.md", + "display": "docs/operating-engram.md", + "kind": "exact", + "line": 32 + }, + { + "owner": "REDACTION-LIVE-CONTRACT", + "branch": "work/prc-redaction-live-contract", + "path": ".agent/reports/evidence/production-ready/redaction-live-contract", + "display": ".agent/reports/evidence/production-ready/redaction-live-contract/**", + "kind": "prefix", + "line": 32 + }, + { + "owner": "RETRIEVAL-VECTOR-CONTRACT", + "branch": "work/prc-retrieval-vector-contract", + "path": "internal/retrieval/hybrid_integration_test.go", + "display": "internal/retrieval/hybrid_integration_test.go", + "kind": "exact", + "line": 34 + }, + { + "owner": "STATIC-EMBED-CONTRACT", + "branch": "work/prc-static-embed-contract", + "path": "internal/worker/static_embed_test.go", + "display": "internal/worker/static_embed_test.go", + "kind": "exact", + "line": 35 + }, + { + "owner": "PRE-V5-UPGRADE-CONTRACT", + "branch": "work/prc-pre-v5-upgrade-contract", + "path": "internal/db/gorm/migrations_integration_test.go", + "display": "internal/db/gorm/migrations_integration_test.go", + "kind": "exact", + "line": 36 + }, + { + "owner": "PRE-V5-UPGRADE-CONTRACT", + "branch": "work/prc-pre-v5-upgrade-contract", + "path": "internal/grpcserver/credential_migration_test.go", + "display": "internal/grpcserver/credential_migration_test.go", + "kind": "exact", + "line": 36 + }, + { + "owner": "PRE-V5-UPGRADE-CONTRACT", + "branch": "work/prc-pre-v5-upgrade-contract", + "path": "tests/fixtures/pre-v5", + "display": "tests/fixtures/pre-v5/**", + "kind": "prefix", + "line": 36 + }, + { + "owner": "PRE-V5-UPGRADE-CONTRACT", + "branch": "work/prc-pre-v5-upgrade-contract", + "path": "tests/critical/recovery/pre_v5_upgrade_test.go", + "display": "tests/critical/recovery/pre_v5_upgrade_test.go", + "kind": "exact", + "line": 36 + }, + { + "owner": "PRE-V5-UPGRADE-CONTRACT", + "branch": "work/prc-pre-v5-upgrade-contract", + "path": "scripts/production-smoke/customer/run-pre-v5-upgrade.ps1", + "display": "scripts/production-smoke/customer/run-pre-v5-upgrade.ps1", + "kind": "exact", + "line": 36 + }, + { + "owner": "T007-COMPAT-DEMOLITION-CLASSIFICATION", + "branch": "work/prc-t007-compat-classification", + "path": "internal/mcp/store_memory_compat_t007_test.go", + "display": "internal/mcp/store_memory_compat_t007_test.go", + "kind": "exact", + "line": 37 + }, + { + "owner": "DB-RULES-ISOLATION", + "branch": "work/prc-db-rules-isolation", + "path": "internal/worker/handlers_rules_test.go", + "display": "internal/worker/handlers_rules_test.go", + "kind": "exact", + "line": 38 + }, + { + "owner": "DB-RULES-ISOLATION", + "branch": "work/prc-db-rules-isolation", + "path": "scripts/production-gates/run-db-rules-isolation.ps1", + "display": "scripts/production-gates/run-db-rules-isolation.ps1", + "kind": "exact", + "line": 38 + }, + { + "owner": "COVERAGE-CMD-ENGRAM", + "branch": "work/prc-coverage-cmd-engram", + "path": "cmd/engram/production_readiness_coverage_test.go", + "display": "cmd/engram/production_readiness_coverage_test.go", + "kind": "exact", + "line": 39 + }, + { + "owner": "COVERAGE-CMD-SERVER", + "branch": "work/prc-coverage-cmd-server", + "path": "cmd/engram-server/production_readiness_coverage_test.go", + "display": "cmd/engram-server/production_readiness_coverage_test.go", + "kind": "exact", + "line": 40 + }, + { + "owner": "COVERAGE-UPDATE", + "branch": "work/prc-coverage-update", + "path": "internal/update/production_readiness_coverage_test.go", + "display": "internal/update/production_readiness_coverage_test.go", + "kind": "exact", + "line": 41 + }, + { + "owner": "COVERAGE-WORKER", + "branch": "work/prc-coverage-worker", + "path": "internal/worker/production_readiness_coverage_test.go", + "display": "internal/worker/production_readiness_coverage_test.go", + "kind": "exact", + "line": 43 + }, + { + "owner": "COVERAGE-MCP", + "branch": "work/prc-coverage-mcp", + "path": "internal/mcp/production_readiness_coverage_test.go", + "display": "internal/mcp/production_readiness_coverage_test.go", + "kind": "exact", + "line": 44 + }, + { + "owner": "COVERAGE-GORM", + "branch": "work/prc-coverage-gorm", + "path": "internal/db/gorm/production_readiness_coverage_test.go", + "display": "internal/db/gorm/production_readiness_coverage_test.go", + "kind": "exact", + "line": 45 + }, + { + "owner": "COVERAGE-LOOM", + "branch": "work/prc-coverage-loom", + "path": "internal/handlers/loom/production_readiness_coverage_test.go", + "display": "internal/handlers/loom/production_readiness_coverage_test.go", + "kind": "exact", + "line": 46 + }, + { + "owner": "DEPLOYMENT-ROLLBACK", + "branch": "work/prc-deployment-rollback", + "path": "docker-compose.yml", + "display": "docker-compose.yml", + "kind": "exact", + "line": 47 + }, + { + "owner": "DEPLOYMENT-ROLLBACK", + "branch": "work/prc-deployment-rollback", + "path": "deploy/docker-compose.runtime.yml", + "display": "deploy/docker-compose.runtime.yml", + "kind": "exact", + "line": 47 + }, + { + "owner": "DEPLOYMENT-ROLLBACK", + "branch": "work/prc-deployment-rollback", + "path": "deploy/docker-compose.operator-web-standalone.yml", + "display": "deploy/docker-compose.operator-web-standalone.yml", + "kind": "exact", + "line": 47 + }, + { + "owner": "DEPLOYMENT-ROLLBACK", + "branch": "work/prc-deployment-rollback", + "path": "deploy/entrypoint-server.sh", + "display": "deploy/entrypoint-server.sh", + "kind": "exact", + "line": 47 + }, + { + "owner": "DEPLOYMENT-ROLLBACK", + "branch": "work/prc-deployment-rollback", + "path": "deploy/healthcheck-server.sh", + "display": "deploy/healthcheck-server.sh", + "kind": "exact", + "line": 47 + }, + { + "owner": "DEPLOYMENT-ROLLBACK", + "branch": "work/prc-deployment-rollback", + "path": "deploy/verify-rollback.ps1", + "display": "deploy/verify-rollback.ps1", + "kind": "exact", + "line": 47 + }, + { + "owner": "DEPLOYMENT-ROLLBACK", + "branch": "work/prc-deployment-rollback", + "path": "deploy/verify-runtime-policy.ps1", + "display": "deploy/verify-runtime-policy.ps1", + "kind": "exact", + "line": 47 + }, + { + "owner": "RECOVERY-DATA", + "branch": "work/prc-recovery-data", + "path": "scripts/recovery/start-disposable-postgres.ps1", + "display": "scripts/recovery/start-disposable-postgres.ps1", + "kind": "exact", + "line": 48 + }, + { + "owner": "RECOVERY-DATA", + "branch": "work/prc-recovery-data", + "path": "scripts/recovery/verify-postgres-roundtrip.ps1", + "display": "scripts/recovery/verify-postgres-roundtrip.ps1", + "kind": "exact", + "line": 48 + }, + { + "owner": "RECOVERY-DATA", + "branch": "work/prc-recovery-data", + "path": "scripts/recovery/seed-recovery-fixture.ps1", + "display": "scripts/recovery/seed-recovery-fixture.ps1", + "kind": "exact", + "line": 48 + }, + { + "owner": "RECOVERY-DATA", + "branch": "work/prc-recovery-data", + "path": "scripts/recovery/assert-recovery-fixture.ps1", + "display": "scripts/recovery/assert-recovery-fixture.ps1", + "kind": "exact", + "line": 48 + }, + { + "owner": "RECOVERY-DATA", + "branch": "work/prc-recovery-data", + "path": "tests/critical/recovery/postgres_roundtrip_test.go", + "display": "tests/critical/recovery/postgres_roundtrip_test.go", + "kind": "exact", + "line": 48 + }, + { + "owner": "OBSERVABILITY-OTLP", + "branch": "work/prc-observability-otlp", + "path": "internal/module/obs/logging.go", + "display": "internal/module/obs/logging.go", + "kind": "exact", + "line": 49 + }, + { + "owner": "OBSERVABILITY-OTLP", + "branch": "work/prc-observability-otlp", + "path": "internal/module/obs/logging_test.go", + "display": "internal/module/obs/logging_test.go", + "kind": "exact", + "line": 49 + }, + { + "owner": "OBSERVABILITY-OTLP", + "branch": "work/prc-observability-otlp", + "path": "internal/module/obs/meter.go", + "display": "internal/module/obs/meter.go", + "kind": "exact", + "line": 49 + }, + { + "owner": "OBSERVABILITY-OTLP", + "branch": "work/prc-observability-otlp", + "path": "internal/module/obs/meter_test.go", + "display": "internal/module/obs/meter_test.go", + "kind": "exact", + "line": 49 + }, + { + "owner": "OBSERVABILITY-OTLP", + "branch": "work/prc-observability-otlp", + "path": "internal/module/obs/metrics.go", + "display": "internal/module/obs/metrics.go", + "kind": "exact", + "line": 49 + }, + { + "owner": "OBSERVABILITY-OTLP", + "branch": "work/prc-observability-otlp", + "path": "internal/module/obs/metrics_test.go", + "display": "internal/module/obs/metrics_test.go", + "kind": "exact", + "line": 49 + }, + { + "owner": "OBSERVABILITY-OTLP", + "branch": "work/prc-observability-otlp", + "path": "cmd/engram-server/main.go", + "display": "cmd/engram-server/main.go", + "kind": "exact", + "line": 49 + }, + { + "owner": "OBSERVABILITY-OTLP", + "branch": "work/prc-observability-otlp", + "path": "cmd/engram-server/main_test.go", + "display": "cmd/engram-server/main_test.go", + "kind": "exact", + "line": 49 + }, + { + "owner": "OBSERVABILITY-OTLP", + "branch": "work/prc-observability-otlp", + "path": "scripts/production-smoke/verify-otlp.ps1", + "display": "scripts/production-smoke/verify-otlp.ps1", + "kind": "exact", + "line": 49 + }, + { + "owner": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "path": "internal/scope/domain_policy.go", + "display": "internal/scope/domain_policy.go", + "kind": "exact", + "line": 50 + }, + { + "owner": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "path": "internal/scope/domain_policy_test.go", + "display": "internal/scope/domain_policy_test.go", + "kind": "exact", + "line": 50 + }, + { + "owner": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "path": "internal/scope/filter.go", + "display": "internal/scope/filter.go", + "kind": "exact", + "line": 50 + }, + { + "owner": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "path": "internal/scope/filter_test.go", + "display": "internal/scope/filter_test.go", + "kind": "exact", + "line": 50 + }, + { + "owner": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "path": "internal/scope/filter_principal_test.go", + "display": "internal/scope/filter_principal_test.go", + "kind": "exact", + "line": 50 + }, + { + "owner": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "path": "internal/scope/filter_w4_test.go", + "display": "internal/scope/filter_w4_test.go", + "kind": "exact", + "line": 50 + }, + { + "owner": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "path": "internal/principalmemory/access_policy.go", + "display": "internal/principalmemory/access_policy.go", + "kind": "exact", + "line": 50 + }, + { + "owner": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "path": "internal/principalmemory/access_policy_test.go", + "display": "internal/principalmemory/access_policy_test.go", + "kind": "exact", + "line": 50 + }, + { + "owner": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "path": "internal/principalmemory/domain_registry.go", + "display": "internal/principalmemory/domain_registry.go", + "kind": "exact", + "line": 50 + }, + { + "owner": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "path": "internal/principalmemory/domain_registry_test.go", + "display": "internal/principalmemory/domain_registry_test.go", + "kind": "exact", + "line": 50 + }, + { + "owner": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "path": "internal/principalmemory/query_service.go", + "display": "internal/principalmemory/query_service.go", + "kind": "exact", + "line": 50 + }, + { + "owner": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "path": "internal/principalmemory/query_service_test.go", + "display": "internal/principalmemory/query_service_test.go", + "kind": "exact", + "line": 50 + }, + { + "owner": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "path": "internal/mcp/tools_principal_memory.go", + "display": "internal/mcp/tools_principal_memory.go", + "kind": "exact", + "line": 50 + }, + { + "owner": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "path": "internal/mcp/tools_principal_memory_test.go", + "display": "internal/mcp/tools_principal_memory_test.go", + "kind": "exact", + "line": 50 + }, + { + "owner": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "path": "internal/mcp/tools_recall_principal_test.go", + "display": "internal/mcp/tools_recall_principal_test.go", + "kind": "exact", + "line": 50 + }, + { + "owner": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "path": "internal/mcp/recall_visibility_backfill_test.go", + "display": "internal/mcp/recall_visibility_backfill_test.go", + "kind": "exact", + "line": 50 + }, + { + "owner": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "path": "internal/mcp/store_memory_principal_test.go", + "display": "internal/mcp/store_memory_principal_test.go", + "kind": "exact", + "line": 50 + }, + { + "owner": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "path": "internal/worker/handlers_principal_memory.go", + "display": "internal/worker/handlers_principal_memory.go", + "kind": "exact", + "line": 50 + }, + { + "owner": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "path": "internal/worker/handlers_principal_memory_test.go", + "display": "internal/worker/handlers_principal_memory_test.go", + "kind": "exact", + "line": 50 + }, + { + "owner": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "path": "internal/worker/scope_bypass_w4_test.go", + "display": "internal/worker/scope_bypass_w4_test.go", + "kind": "exact", + "line": 50 + }, + { + "owner": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "path": "internal/worker/retention.go", + "display": "internal/worker/retention.go", + "kind": "exact", + "line": 50 + }, + { + "owner": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "path": "internal/worker/retention_test.go", + "display": "internal/worker/retention_test.go", + "kind": "exact", + "line": 50 + }, + { + "owner": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "path": "internal/db/gorm/memory_store.go", + "display": "internal/db/gorm/memory_store.go", + "kind": "exact", + "line": 50 + }, + { + "owner": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "path": "internal/db/gorm/memory_store_principal_test.go", + "display": "internal/db/gorm/memory_store_principal_test.go", + "kind": "exact", + "line": 50 + }, + { + "owner": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "path": "internal/db/gorm/memory_store_principal_query_test.go", + "display": "internal/db/gorm/memory_store_principal_query_test.go", + "kind": "exact", + "line": 50 + }, + { + "owner": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "path": "internal/db/gorm/purge_store_test.go", + "display": "internal/db/gorm/purge_store_test.go", + "kind": "exact", + "line": 50 + }, + { + "owner": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "path": "tests/critical/data_boundaries/principal_project_retention_test.go", + "display": "tests/critical/data_boundaries/principal_project_retention_test.go", + "kind": "exact", + "line": 50 + }, + { + "owner": "CRITICAL-HARNESS", + "branch": "work/prc-critical-harness", + "path": "tests/critical/customer_mode/customer_mode_test.go", + "display": "tests/critical/customer_mode/customer_mode_test.go", + "kind": "exact", + "line": 51 + }, + { + "owner": "CRITICAL-HARNESS", + "branch": "work/prc-critical-harness", + "path": "tests/critical/customer_mode/compatibility_test.go", + "display": "tests/critical/customer_mode/compatibility_test.go", + "kind": "exact", + "line": 51 + }, + { + "owner": "CRITICAL-HARNESS", + "branch": "work/prc-critical-harness", + "path": "tests/critical/customer_mode/cross_agent_test.go", + "display": "tests/critical/customer_mode/cross_agent_test.go", + "kind": "exact", + "line": 51 + }, + { + "owner": "CRITICAL-HARNESS", + "branch": "work/prc-critical-harness", + "path": "scripts/production-smoke/customer/run-customer-mode.ps1", + "display": "scripts/production-smoke/customer/run-customer-mode.ps1", + "kind": "exact", + "line": 51 + }, + { + "owner": "CRITICAL-HARNESS", + "branch": "work/prc-critical-harness", + "path": "scripts/production-smoke/customer/run-client-compatibility.ps1", + "display": "scripts/production-smoke/customer/run-client-compatibility.ps1", + "kind": "exact", + "line": 51 + }, + { + "owner": "CRITICAL-HARNESS", + "branch": "work/prc-critical-harness", + "path": "scripts/production-smoke/customer/run-cross-agent.ps1", + "display": "scripts/production-smoke/customer/run-cross-agent.ps1", + "kind": "exact", + "line": 51 + }, + { + "owner": "CRITICAL-HARNESS", + "branch": "work/prc-critical-harness", + "path": "scripts/production-smoke/customer/run-diagnostic-matrix.ps1", + "display": "scripts/production-smoke/customer/run-diagnostic-matrix.ps1", + "kind": "exact", + "line": 51 + }, + { + "owner": "CRITICAL-HARNESS", + "branch": "work/prc-critical-harness", + "path": "scripts/production-smoke/customer/assert-product-works.ps1", + "display": "scripts/production-smoke/customer/assert-product-works.ps1", + "kind": "exact", + "line": 51 + }, + { + "owner": "CORE-PUBLIC-TRUTH", + "branch": "work/prc-core-public-truth", + "path": "README.md", + "display": "README.md", + "kind": "exact", + "line": 52 + }, + { + "owner": "CORE-PUBLIC-TRUTH", + "branch": "work/prc-core-public-truth", + "path": "README.ru.md", + "display": "README.ru.md", + "kind": "exact", + "line": 52 + }, + { + "owner": "CORE-PUBLIC-TRUTH", + "branch": "work/prc-core-public-truth", + "path": "README.zh.md", + "display": "README.zh.md", + "kind": "exact", + "line": 52 + }, + { + "owner": "CORE-PUBLIC-TRUTH", + "branch": "work/prc-core-public-truth", + "path": "CONTRIBUTING.md", + "display": "CONTRIBUTING.md", + "kind": "exact", + "line": 52 + }, + { + "owner": "CORE-PUBLIC-TRUTH", + "branch": "work/prc-core-public-truth", + "path": "CHANGELOG.md", + "display": "CHANGELOG.md", + "kind": "exact", + "line": 52 + }, + { + "owner": "CORE-PUBLIC-TRUTH", + "branch": "work/prc-core-public-truth", + "path": "Makefile", + "display": "Makefile", + "kind": "exact", + "line": 52 + }, + { + "owner": "CORE-PUBLIC-TRUTH", + "branch": "work/prc-core-public-truth", + "path": ".env.example", + "display": ".env.example", + "kind": "exact", + "line": 52 + }, + { + "owner": "CORE-PUBLIC-TRUTH", + "branch": "work/prc-core-public-truth", + "path": "docs/DEPLOYMENT.md", + "display": "docs/DEPLOYMENT.md", + "kind": "exact", + "line": 52 + }, + { + "owner": "CORE-PUBLIC-TRUTH", + "branch": "work/prc-core-public-truth", + "path": "docs/MIGRATION.md", + "display": "docs/MIGRATION.md", + "kind": "exact", + "line": 52 + }, + { + "owner": "CORE-PUBLIC-TRUTH", + "branch": "work/prc-core-public-truth", + "path": "docs/PRODUCTION-TESTING-PLAYBOOK.md", + "display": "docs/PRODUCTION-TESTING-PLAYBOOK.md", + "kind": "exact", + "line": 52 + }, + { + "owner": "CORE-PUBLIC-TRUTH", + "branch": "work/prc-core-public-truth", + "path": "docs/arch/CONFIGURATION.md", + "display": "docs/arch/CONFIGURATION.md", + "kind": "exact", + "line": 52 + }, + { + "owner": "CORE-PUBLIC-TRUTH", + "branch": "work/prc-core-public-truth", + "path": "docs/arch/QUICKSTART.md", + "display": "docs/arch/QUICKSTART.md", + "kind": "exact", + "line": 52 + }, + { + "owner": "CORE-PUBLIC-TRUTH", + "branch": "work/prc-core-public-truth", + "path": "docs/release-notes/v6.43.0.md", + "display": "docs/release-notes/v6.43.0.md", + "kind": "exact", + "line": 52 + }, + { + "owner": "CORE-PUBLIC-TRUTH", + "branch": "work/prc-core-public-truth", + "path": "docs/public/engram.jpg", + "display": "docs/public/engram.jpg", + "kind": "exact", + "line": 52 + }, + { + "owner": "CORE-PUBLIC-TRUTH", + "branch": "work/prc-core-public-truth", + "path": "plugin/engram/commands/setup.md", + "display": "plugin/engram/commands/setup.md", + "kind": "exact", + "line": 52 + }, + { + "owner": "CORE-PUBLIC-TRUTH", + "branch": "work/prc-core-public-truth", + "path": "plugin/engram/commands/doctor.md", + "display": "plugin/engram/commands/doctor.md", + "kind": "exact", + "line": 52 + }, + { + "owner": "FINAL-PUBLIC-TRUTH", + "branch": "work/prc-final-public-truth", + "path": "README.md", + "display": "README.md", + "kind": "exact", + "line": 53 + }, + { + "owner": "FINAL-PUBLIC-TRUTH", + "branch": "work/prc-final-public-truth", + "path": "README.ru.md", + "display": "README.ru.md", + "kind": "exact", + "line": 53 + }, + { + "owner": "FINAL-PUBLIC-TRUTH", + "branch": "work/prc-final-public-truth", + "path": "README.zh.md", + "display": "README.zh.md", + "kind": "exact", + "line": 53 + }, + { + "owner": "FINAL-PUBLIC-TRUTH", + "branch": "work/prc-final-public-truth", + "path": "CONTRIBUTING.md", + "display": "CONTRIBUTING.md", + "kind": "exact", + "line": 53 + }, + { + "owner": "FINAL-PUBLIC-TRUTH", + "branch": "work/prc-final-public-truth", + "path": "CHANGELOG.md", + "display": "CHANGELOG.md", + "kind": "exact", + "line": 53 + }, + { + "owner": "FINAL-PUBLIC-TRUTH", + "branch": "work/prc-final-public-truth", + "path": "Makefile", + "display": "Makefile", + "kind": "exact", + "line": 53 + }, + { + "owner": "FINAL-PUBLIC-TRUTH", + "branch": "work/prc-final-public-truth", + "path": ".env.example", + "display": ".env.example", + "kind": "exact", + "line": 53 + }, + { + "owner": "FINAL-PUBLIC-TRUTH", + "branch": "work/prc-final-public-truth", + "path": "docs/DEPLOYMENT.md", + "display": "docs/DEPLOYMENT.md", + "kind": "exact", + "line": 53 + }, + { + "owner": "FINAL-PUBLIC-TRUTH", + "branch": "work/prc-final-public-truth", + "path": "docs/MIGRATION.md", + "display": "docs/MIGRATION.md", + "kind": "exact", + "line": 53 + }, + { + "owner": "FINAL-PUBLIC-TRUTH", + "branch": "work/prc-final-public-truth", + "path": "docs/PRODUCTION-TESTING-PLAYBOOK.md", + "display": "docs/PRODUCTION-TESTING-PLAYBOOK.md", + "kind": "exact", + "line": 53 + }, + { + "owner": "FINAL-PUBLIC-TRUTH", + "branch": "work/prc-final-public-truth", + "path": "docs/operating-engram.md", + "display": "docs/operating-engram.md", + "kind": "exact", + "line": 53 + }, + { + "owner": "FINAL-PUBLIC-TRUTH", + "branch": "work/prc-final-public-truth", + "path": "docs/arch/CONFIGURATION.md", + "display": "docs/arch/CONFIGURATION.md", + "kind": "exact", + "line": 53 + }, + { + "owner": "FINAL-PUBLIC-TRUTH", + "branch": "work/prc-final-public-truth", + "path": "docs/arch/QUICKSTART.md", + "display": "docs/arch/QUICKSTART.md", + "kind": "exact", + "line": 53 + }, + { + "owner": "FINAL-PUBLIC-TRUTH", + "branch": "work/prc-final-public-truth", + "path": "docs/public/engram.jpg", + "display": "docs/public/engram.jpg", + "kind": "exact", + "line": 53 + }, + { + "owner": "FINAL-PUBLIC-TRUTH", + "branch": "work/prc-final-public-truth", + "path": "plugin/engram/commands/setup.md", + "display": "plugin/engram/commands/setup.md", + "kind": "exact", + "line": 53 + }, + { + "owner": "FINAL-PUBLIC-TRUTH", + "branch": "work/prc-final-public-truth", + "path": "plugin/engram/commands/doctor.md", + "display": "plugin/engram/commands/doctor.md", + "kind": "exact", + "line": 53 + }, + { + "owner": "LAUNCHER-FIRST-RUN", + "branch": "work/prc-launcher-first-run", + "path": "cmd/engram/main.go", + "display": "cmd/engram/main.go", + "kind": "exact", + "line": 54 + }, + { + "owner": "LAUNCHER-FIRST-RUN", + "branch": "work/prc-launcher-first-run", + "path": "cmd/engram/main_test.go", + "display": "cmd/engram/main_test.go", + "kind": "exact", + "line": 54 + }, + { + "owner": "LAUNCHER-FIRST-RUN", + "branch": "work/prc-launcher-first-run", + "path": "cmd/engram/wiring.go", + "display": "cmd/engram/wiring.go", + "kind": "exact", + "line": 54 + }, + { + "owner": "LAUNCHER-FIRST-RUN", + "branch": "work/prc-launcher-first-run", + "path": "cmd/engram/exec_windows.go", + "display": "cmd/engram/exec_windows.go", + "kind": "exact", + "line": 54 + }, + { + "owner": "LAUNCHER-FIRST-RUN", + "branch": "work/prc-launcher-first-run", + "path": "cmd/engram/exec_unix.go", + "display": "cmd/engram/exec_unix.go", + "kind": "exact", + "line": 54 + }, + { + "owner": "LAUNCHER-FIRST-RUN", + "branch": "work/prc-launcher-first-run", + "path": "plugin/engram/.engram-project", + "display": "plugin/engram/.engram-project", + "kind": "exact", + "line": 54 + }, + { + "owner": "LAUNCHER-FIRST-RUN", + "branch": "work/prc-launcher-first-run", + "path": "plugin/engram/scripts/run-engram.js", + "display": "plugin/engram/scripts/run-engram.js", + "kind": "exact", + "line": 54 + }, + { + "owner": "LAUNCHER-FIRST-RUN", + "branch": "work/prc-launcher-first-run", + "path": "plugin/engram/scripts/run-engram.test.js", + "display": "plugin/engram/scripts/run-engram.test.js", + "kind": "exact", + "line": 54 + }, + { + "owner": "LAUNCHER-FIRST-RUN", + "branch": "work/prc-launcher-first-run", + "path": "plugin/engram/scripts/ensure-binary.js", + "display": "plugin/engram/scripts/ensure-binary.js", + "kind": "exact", + "line": 54 + }, + { + "owner": "LAUNCHER-FIRST-RUN", + "branch": "work/prc-launcher-first-run", + "path": "plugin/engram/scripts/ensure-binary.test.js", + "display": "plugin/engram/scripts/ensure-binary.test.js", + "kind": "exact", + "line": 54 + }, + { + "owner": "OC-INTEGRATION", + "branch": "work/prc-operator-console-integration", + "path": "apps/operator-console", + "display": "apps/operator-console/**", + "kind": "prefix", + "line": 55 + }, + { + "owner": "S4B-CONTRACT", + "branch": "work/prc-s4b-contract", + "path": ".agent/specs/engram-v7-directives-surfacing", + "display": ".agent/specs/engram-v7-directives-surfacing/**", + "kind": "prefix", + "line": 56 + }, + { + "owner": "V7-S4B-BACKEND", + "branch": "work/prc-v7-s4b-backend", + "path": "internal/cognitive/s4bsurfacing", + "display": "internal/cognitive/s4bsurfacing/**", + "kind": "prefix", + "line": 57 + }, + { + "owner": "V7-CORE-CALLPATH", + "branch": "work/prc-v7-core-callpath", + "path": "internal/cognitive/core/event_bus.go", + "display": "internal/cognitive/core/event_bus.go", + "kind": "exact", + "line": 58 + }, + { + "owner": "V7-CORE-CALLPATH", + "branch": "work/prc-v7-core-callpath", + "path": "internal/cognitive/core/event_bus_test.go", + "display": "internal/cognitive/core/event_bus_test.go", + "kind": "exact", + "line": 58 + }, + { + "owner": "V7-CORE-CALLPATH", + "branch": "work/prc-v7-core-callpath", + "path": "internal/cognitive/core/hint_queue.go", + "display": "internal/cognitive/core/hint_queue.go", + "kind": "exact", + "line": 58 + }, + { + "owner": "V7-CORE-CALLPATH", + "branch": "work/prc-v7-core-callpath", + "path": "internal/cognitive/core/hint_queue_test.go", + "display": "internal/cognitive/core/hint_queue_test.go", + "kind": "exact", + "line": 58 + }, + { + "owner": "V7-CORE-CALLPATH", + "branch": "work/prc-v7-core-callpath", + "path": "internal/cognitive/s3ambient/queue.go", + "display": "internal/cognitive/s3ambient/queue.go", + "kind": "exact", + "line": 58 + }, + { + "owner": "V7-CORE-CALLPATH", + "branch": "work/prc-v7-core-callpath", + "path": "internal/cognitive/s3ambient/subsystem.go", + "display": "internal/cognitive/s3ambient/subsystem.go", + "kind": "exact", + "line": 58 + }, + { + "owner": "V7-RUNTIME-WIRING", + "branch": "work/prc-v7-runtime-wiring", + "path": "internal/worker/service.go", + "display": "internal/worker/service.go", + "kind": "exact", + "line": 59 + }, + { + "owner": "V7-RUNTIME-WIRING", + "branch": "work/prc-v7-runtime-wiring", + "path": "internal/worker/service_v7_integration_test.go", + "display": "internal/worker/service_v7_integration_test.go", + "kind": "exact", + "line": 59 + }, + { + "owner": "V7-RUNTIME-WIRING", + "branch": "work/prc-v7-runtime-wiring", + "path": "internal/worker/handlers_stats_v7.go", + "display": "internal/worker/handlers_stats_v7.go", + "kind": "exact", + "line": 59 + }, + { + "owner": "V7-RUNTIME-WIRING", + "branch": "work/prc-v7-runtime-wiring", + "path": "internal/worker/handlers_stats_v7_test.go", + "display": "internal/worker/handlers_stats_v7_test.go", + "kind": "exact", + "line": 59 + }, + { + "owner": "V7-TELEMETRY-WIRING", + "branch": "work/prc-v7-telemetry-wiring", + "path": "internal/cognitive/s5/metrics.go", + "display": "internal/cognitive/s5/metrics.go", + "kind": "exact", + "line": 60 + }, + { + "owner": "V7-TELEMETRY-WIRING", + "branch": "work/prc-v7-telemetry-wiring", + "path": "internal/cognitive/s5/provider.go", + "display": "internal/cognitive/s5/provider.go", + "kind": "exact", + "line": 60 + }, + { + "owner": "V7-TELEMETRY-WIRING", + "branch": "work/prc-v7-telemetry-wiring", + "path": "internal/cognitive/s5/provider_test.go", + "display": "internal/cognitive/s5/provider_test.go", + "kind": "exact", + "line": 60 + }, + { + "owner": "V7-TELEMETRY-WIRING", + "branch": "work/prc-v7-telemetry-wiring", + "path": "internal/cognitive/s5/source_adapter.go", + "display": "internal/cognitive/s5/source_adapter.go", + "kind": "exact", + "line": 60 + }, + { + "owner": "V7-TELEMETRY-WIRING", + "branch": "work/prc-v7-telemetry-wiring", + "path": "internal/cognitive/s5/source_adapter_test.go", + "display": "internal/cognitive/s5/source_adapter_test.go", + "kind": "exact", + "line": 60 + }, + { + "owner": "ROADMAP-RECONCILIATION", + "branch": "work/prc-roadmap-reconciliation", + "path": ".agent/specs/roadmap.md", + "display": ".agent/specs/roadmap.md", + "kind": "exact", + "line": 61 + }, + { + "owner": "ROADMAP-RECONCILIATION", + "branch": "work/prc-roadmap-reconciliation", + "path": ".agent/specs/ui-surface-ledger.md", + "display": ".agent/specs/ui-surface-ledger.md", + "kind": "exact", + "line": 61 + }, + { + "owner": "ROADMAP-RECONCILIATION", + "branch": "work/prc-roadmap-reconciliation", + "path": ".agent/specs/operator-console-production-integration", + "display": ".agent/specs/operator-console-production-integration/**", + "kind": "prefix", + "line": 61 + }, + { + "owner": "ROADMAP-RECONCILIATION", + "branch": "work/prc-roadmap-reconciliation", + "path": ".agent/specs/engram-v7-ambient/spec.md", + "display": ".agent/specs/engram-v7-ambient/spec.md", + "kind": "exact", + "line": 61 + }, + { + "owner": "ROADMAP-RECONCILIATION", + "branch": "work/prc-roadmap-reconciliation", + "path": ".agent/specs/engram-v7-ambient/plan.md", + "display": ".agent/specs/engram-v7-ambient/plan.md", + "kind": "exact", + "line": 61 + }, + { + "owner": "ROADMAP-RECONCILIATION", + "branch": "work/prc-roadmap-reconciliation", + "path": ".agent/specs/engram-v7-ambient/checklists/general.md", + "display": ".agent/specs/engram-v7-ambient/checklists/general.md", + "kind": "exact", + "line": 61 + }, + { + "owner": "ROADMAP-RECONCILIATION", + "branch": "work/prc-roadmap-reconciliation", + "path": ".agent/specs/engram-v7-ambient/changes/CR-001-initial-scope/change.md", + "display": ".agent/specs/engram-v7-ambient/changes/CR-001-initial-scope/change.md", + "kind": "exact", + "line": 61 + }, + { + "owner": "ROADMAP-RECONCILIATION", + "branch": "work/prc-roadmap-reconciliation", + "path": ".agent/specs/engram-v7-ambient/changes/CR-001-initial-scope/tasks.md", + "display": ".agent/specs/engram-v7-ambient/changes/CR-001-initial-scope/tasks.md", + "kind": "exact", + "line": 61 + }, + { + "owner": "NORTHSTAR-CI-A-CONTRACTS", + "branch": "work/prc-northstar-ci-a-contracts", + "path": ".agent/specs/engram-absorption/ci-a-dense-vector/spec.md", + "display": ".agent/specs/engram-absorption/ci-a-dense-vector/spec.md", + "kind": "exact", + "line": 62 + }, + { + "owner": "NORTHSTAR-CI-A-CONTRACTS", + "branch": "work/prc-northstar-ci-a-contracts", + "path": ".agent/specs/engram-absorption/ci-a-dense-vector/plan.md", + "display": ".agent/specs/engram-absorption/ci-a-dense-vector/plan.md", + "kind": "exact", + "line": 62 + }, + { + "owner": "NORTHSTAR-CI-A-CONTRACTS", + "branch": "work/prc-northstar-ci-a-contracts", + "path": ".agent/specs/engram-absorption/ci-a-dense-vector/checklists/general.md", + "display": ".agent/specs/engram-absorption/ci-a-dense-vector/checklists/general.md", + "kind": "exact", + "line": 62 + }, + { + "owner": "NORTHSTAR-CI-A-CONTRACTS", + "branch": "work/prc-northstar-ci-a-contracts", + "path": ".agent/specs/engram-absorption/ci-a-dense-vector/changes/CR-001-initial-scope/change.md", + "display": ".agent/specs/engram-absorption/ci-a-dense-vector/changes/CR-001-initial-scope/change.md", + "kind": "exact", + "line": 62 + }, + { + "owner": "NORTHSTAR-CI-A-CONTRACTS", + "branch": "work/prc-northstar-ci-a-contracts", + "path": ".agent/specs/engram-absorption/ci-a-dense-vector/changes/CR-001-initial-scope/tasks.md", + "display": ".agent/specs/engram-absorption/ci-a-dense-vector/changes/CR-001-initial-scope/tasks.md", + "kind": "exact", + "line": 62 + }, + { + "owner": "NORTHSTAR-CI-B-CONTRACTS", + "branch": "work/prc-northstar-ci-b-contracts", + "path": ".agent/specs/engram-absorption/ci-b-graph-watcher-context/spec.md", + "display": ".agent/specs/engram-absorption/ci-b-graph-watcher-context/spec.md", + "kind": "exact", + "line": 63 + }, + { + "owner": "NORTHSTAR-CI-B-CONTRACTS", + "branch": "work/prc-northstar-ci-b-contracts", + "path": ".agent/specs/engram-absorption/ci-b-graph-watcher-context/plan.md", + "display": ".agent/specs/engram-absorption/ci-b-graph-watcher-context/plan.md", + "kind": "exact", + "line": 63 + }, + { + "owner": "NORTHSTAR-CI-B-CONTRACTS", + "branch": "work/prc-northstar-ci-b-contracts", + "path": ".agent/specs/engram-absorption/ci-b-graph-watcher-context/checklists/general.md", + "display": ".agent/specs/engram-absorption/ci-b-graph-watcher-context/checklists/general.md", + "kind": "exact", + "line": 63 + }, + { + "owner": "NORTHSTAR-CI-B-CONTRACTS", + "branch": "work/prc-northstar-ci-b-contracts", + "path": ".agent/specs/engram-absorption/ci-b-graph-watcher-context/changes/CR-001-initial-scope/change.md", + "display": ".agent/specs/engram-absorption/ci-b-graph-watcher-context/changes/CR-001-initial-scope/change.md", + "kind": "exact", + "line": 63 + }, + { + "owner": "NORTHSTAR-CI-B-CONTRACTS", + "branch": "work/prc-northstar-ci-b-contracts", + "path": ".agent/specs/engram-absorption/ci-b-graph-watcher-context/changes/CR-001-initial-scope/tasks.md", + "display": ".agent/specs/engram-absorption/ci-b-graph-watcher-context/changes/CR-001-initial-scope/tasks.md", + "kind": "exact", + "line": 63 + }, + { + "owner": "NORTHSTAR-BOOK-CONTRACTS", + "branch": "work/prc-northstar-book-contracts", + "path": ".agent/specs/engram-absorption/book/prd.md", + "display": ".agent/specs/engram-absorption/book/prd.md", + "kind": "exact", + "line": 64 + }, + { + "owner": "NORTHSTAR-BOOK-CONTRACTS", + "branch": "work/prc-northstar-book-contracts", + "path": ".agent/specs/engram-absorption/book/spec.md", + "display": ".agent/specs/engram-absorption/book/spec.md", + "kind": "exact", + "line": 64 + }, + { + "owner": "NORTHSTAR-BOOK-CONTRACTS", + "branch": "work/prc-northstar-book-contracts", + "path": ".agent/specs/engram-absorption/book/plan.md", + "display": ".agent/specs/engram-absorption/book/plan.md", + "kind": "exact", + "line": 64 + }, + { + "owner": "NORTHSTAR-BOOK-CONTRACTS", + "branch": "work/prc-northstar-book-contracts", + "path": ".agent/specs/engram-absorption/book/checklists/general.md", + "display": ".agent/specs/engram-absorption/book/checklists/general.md", + "kind": "exact", + "line": 64 + }, + { + "owner": "NORTHSTAR-BOOK-CONTRACTS", + "branch": "work/prc-northstar-book-contracts", + "path": ".agent/specs/engram-absorption/book/changes/CR-001-initial-scope/change.md", + "display": ".agent/specs/engram-absorption/book/changes/CR-001-initial-scope/change.md", + "kind": "exact", + "line": 64 + }, + { + "owner": "NORTHSTAR-BOOK-CONTRACTS", + "branch": "work/prc-northstar-book-contracts", + "path": ".agent/specs/engram-absorption/book/changes/CR-001-initial-scope/tasks.md", + "display": ".agent/specs/engram-absorption/book/changes/CR-001-initial-scope/tasks.md", + "kind": "exact", + "line": 64 + }, + { + "owner": "NORTHSTAR-MEM-CONTRACTS", + "branch": "work/prc-northstar-mem-contracts", + "path": ".agent/specs/engram-absorption/mem-residual/spec.md", + "display": ".agent/specs/engram-absorption/mem-residual/spec.md", + "kind": "exact", + "line": 65 + }, + { + "owner": "NORTHSTAR-MEM-CONTRACTS", + "branch": "work/prc-northstar-mem-contracts", + "path": ".agent/specs/engram-absorption/mem-residual/plan.md", + "display": ".agent/specs/engram-absorption/mem-residual/plan.md", + "kind": "exact", + "line": 65 + }, + { + "owner": "NORTHSTAR-MEM-CONTRACTS", + "branch": "work/prc-northstar-mem-contracts", + "path": ".agent/specs/engram-absorption/mem-residual/checklists/general.md", + "display": ".agent/specs/engram-absorption/mem-residual/checklists/general.md", + "kind": "exact", + "line": 65 + }, + { + "owner": "NORTHSTAR-MEM-CONTRACTS", + "branch": "work/prc-northstar-mem-contracts", + "path": ".agent/specs/engram-absorption/mem-residual/changes/CR-001-initial-scope/change.md", + "display": ".agent/specs/engram-absorption/mem-residual/changes/CR-001-initial-scope/change.md", + "kind": "exact", + "line": 65 + }, + { + "owner": "NORTHSTAR-MEM-CONTRACTS", + "branch": "work/prc-northstar-mem-contracts", + "path": ".agent/specs/engram-absorption/mem-residual/changes/CR-001-initial-scope/tasks.md", + "display": ".agent/specs/engram-absorption/mem-residual/changes/CR-001-initial-scope/tasks.md", + "kind": "exact", + "line": 65 + }, + { + "owner": "NORTHSTAR-EFFECTIVENESS-CONTRACTS", + "branch": "work/prc-northstar-effectiveness-contracts", + "path": ".agent/specs/engram-effectiveness/production-ready-residual/spec.md", + "display": ".agent/specs/engram-effectiveness/production-ready-residual/spec.md", + "kind": "exact", + "line": 66 + }, + { + "owner": "NORTHSTAR-EFFECTIVENESS-CONTRACTS", + "branch": "work/prc-northstar-effectiveness-contracts", + "path": ".agent/specs/engram-effectiveness/production-ready-residual/plan.md", + "display": ".agent/specs/engram-effectiveness/production-ready-residual/plan.md", + "kind": "exact", + "line": 66 + }, + { + "owner": "NORTHSTAR-EFFECTIVENESS-CONTRACTS", + "branch": "work/prc-northstar-effectiveness-contracts", + "path": ".agent/specs/engram-effectiveness/production-ready-residual/checklists/general.md", + "display": ".agent/specs/engram-effectiveness/production-ready-residual/checklists/general.md", + "kind": "exact", + "line": 66 + }, + { + "owner": "NORTHSTAR-EFFECTIVENESS-CONTRACTS", + "branch": "work/prc-northstar-effectiveness-contracts", + "path": ".agent/specs/engram-effectiveness/production-ready-residual/changes/CR-001-initial-scope/change.md", + "display": ".agent/specs/engram-effectiveness/production-ready-residual/changes/CR-001-initial-scope/change.md", + "kind": "exact", + "line": 66 + }, + { + "owner": "NORTHSTAR-EFFECTIVENESS-CONTRACTS", + "branch": "work/prc-northstar-effectiveness-contracts", + "path": ".agent/specs/engram-effectiveness/production-ready-residual/changes/CR-001-initial-scope/tasks.md", + "display": ".agent/specs/engram-effectiveness/production-ready-residual/changes/CR-001-initial-scope/tasks.md", + "kind": "exact", + "line": 66 + }, + { + "owner": "NORTHSTAR-SETTINGS-CONTRACTS", + "branch": "work/prc-northstar-settings-contracts", + "path": ".agent/specs/settings-store/production-ready-residual/spec.md", + "display": ".agent/specs/settings-store/production-ready-residual/spec.md", + "kind": "exact", + "line": 67 + }, + { + "owner": "NORTHSTAR-SETTINGS-CONTRACTS", + "branch": "work/prc-northstar-settings-contracts", + "path": ".agent/specs/settings-store/production-ready-residual/plan.md", + "display": ".agent/specs/settings-store/production-ready-residual/plan.md", + "kind": "exact", + "line": 67 + }, + { + "owner": "NORTHSTAR-SETTINGS-CONTRACTS", + "branch": "work/prc-northstar-settings-contracts", + "path": ".agent/specs/settings-store/production-ready-residual/checklists/general.md", + "display": ".agent/specs/settings-store/production-ready-residual/checklists/general.md", + "kind": "exact", + "line": 67 + }, + { + "owner": "NORTHSTAR-SETTINGS-CONTRACTS", + "branch": "work/prc-northstar-settings-contracts", + "path": ".agent/specs/settings-store/production-ready-residual/changes/CR-001-initial-scope/change.md", + "display": ".agent/specs/settings-store/production-ready-residual/changes/CR-001-initial-scope/change.md", + "kind": "exact", + "line": 67 + }, + { + "owner": "NORTHSTAR-SETTINGS-CONTRACTS", + "branch": "work/prc-northstar-settings-contracts", + "path": ".agent/specs/settings-store/production-ready-residual/changes/CR-001-initial-scope/tasks.md", + "display": ".agent/specs/settings-store/production-ready-residual/changes/CR-001-initial-scope/tasks.md", + "kind": "exact", + "line": 67 + } + ], + "repeated_exact_paths": [ + { + "path": ".env.example", + "exact_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "prefix_owners": [], + "effective_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "declared_epoch": true, + "epoch_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ] + }, + { + "path": ".github/workflows/test.yml", + "exact_owners": [ + "RELEASE-GATES", + "IMAGE-REMEDIATION" + ], + "prefix_owners": [], + "effective_owners": [ + "RELEASE-GATES", + "IMAGE-REMEDIATION" + ], + "declared_epoch": true, + "epoch_owners": [ + "RELEASE-GATES", + "IMAGE-REMEDIATION" + ] + }, + { + "path": "apps/operator-console/package-lock.json", + "exact_owners": [ + "IMAGE-REMEDIATION" + ], + "prefix_owners": [ + "OC-INTEGRATION" + ], + "effective_owners": [ + "IMAGE-REMEDIATION", + "OC-INTEGRATION" + ], + "declared_epoch": true, + "epoch_owners": [ + "IMAGE-REMEDIATION", + "OC-INTEGRATION" + ] + }, + { + "path": "apps/operator-console/package.json", + "exact_owners": [ + "IMAGE-REMEDIATION" + ], + "prefix_owners": [ + "OC-INTEGRATION" + ], + "effective_owners": [ + "IMAGE-REMEDIATION", + "OC-INTEGRATION" + ], + "declared_epoch": true, + "epoch_owners": [ + "IMAGE-REMEDIATION", + "OC-INTEGRATION" + ] + }, + { + "path": "CHANGELOG.md", + "exact_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "prefix_owners": [], + "effective_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "declared_epoch": true, + "epoch_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ] + }, + { + "path": "CONTRIBUTING.md", + "exact_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "prefix_owners": [], + "effective_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "declared_epoch": true, + "epoch_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ] + }, + { + "path": "deploy/docker-compose.runtime.yml", + "exact_owners": [ + "IMAGE-REMEDIATION", + "DEPLOYMENT-ROLLBACK" + ], + "prefix_owners": [], + "effective_owners": [ + "IMAGE-REMEDIATION", + "DEPLOYMENT-ROLLBACK" + ], + "declared_epoch": true, + "epoch_owners": [ + "IMAGE-REMEDIATION", + "DEPLOYMENT-ROLLBACK" + ] + }, + { + "path": "docker-compose.yml", + "exact_owners": [ + "IMAGE-REMEDIATION", + "DEPLOYMENT-ROLLBACK" + ], + "prefix_owners": [], + "effective_owners": [ + "IMAGE-REMEDIATION", + "DEPLOYMENT-ROLLBACK" + ], + "declared_epoch": true, + "epoch_owners": [ + "IMAGE-REMEDIATION", + "DEPLOYMENT-ROLLBACK" + ] + }, + { + "path": "Dockerfile", + "exact_owners": [ + "SECURITY-TOOLCHAIN", + "IMAGE-REMEDIATION" + ], + "prefix_owners": [], + "effective_owners": [ + "SECURITY-TOOLCHAIN", + "IMAGE-REMEDIATION" + ], + "declared_epoch": true, + "epoch_owners": [ + "SECURITY-TOOLCHAIN", + "IMAGE-REMEDIATION" + ] + }, + { + "path": "docs/arch/CONFIGURATION.md", + "exact_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "prefix_owners": [], + "effective_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "declared_epoch": true, + "epoch_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ] + }, + { + "path": "docs/arch/QUICKSTART.md", + "exact_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "prefix_owners": [], + "effective_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "declared_epoch": true, + "epoch_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ] + }, + { + "path": "docs/DEPLOYMENT.md", + "exact_owners": [ + "IMAGE-REMEDIATION", + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "prefix_owners": [], + "effective_owners": [ + "IMAGE-REMEDIATION", + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "declared_epoch": true, + "epoch_owners": [ + "IMAGE-REMEDIATION", + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ] + }, + { + "path": "docs/MIGRATION.md", + "exact_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "prefix_owners": [], + "effective_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "declared_epoch": true, + "epoch_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ] + }, + { + "path": "docs/operating-engram.md", + "exact_owners": [ + "REDACTION-LIVE-CONTRACT", + "FINAL-PUBLIC-TRUTH" + ], + "prefix_owners": [], + "effective_owners": [ + "REDACTION-LIVE-CONTRACT", + "FINAL-PUBLIC-TRUTH" + ], + "declared_epoch": true, + "epoch_owners": [ + "REDACTION-LIVE-CONTRACT", + "FINAL-PUBLIC-TRUTH" + ] + }, + { + "path": "docs/PRODUCTION-TESTING-PLAYBOOK.md", + "exact_owners": [ + "IMAGE-REMEDIATION", + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "prefix_owners": [], + "effective_owners": [ + "IMAGE-REMEDIATION", + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "declared_epoch": true, + "epoch_owners": [ + "IMAGE-REMEDIATION", + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ] + }, + { + "path": "docs/public/engram.jpg", + "exact_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "prefix_owners": [], + "effective_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "declared_epoch": true, + "epoch_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ] + }, + { + "path": "internal/bulkops/facade_test.go", + "exact_owners": [ + "DB-BULKOPS", + "INGEST-DOC-SNAPSHOT-DEMOLITION" + ], + "prefix_owners": [], + "effective_owners": [ + "DB-BULKOPS", + "INGEST-DOC-SNAPSHOT-DEMOLITION" + ], + "declared_epoch": true, + "epoch_owners": [ + "DB-BULKOPS", + "INGEST-DOC-SNAPSHOT-DEMOLITION" + ] + }, + { + "path": "internal/bulkops/facade.go", + "exact_owners": [ + "DB-BULKOPS", + "INGEST-DOC-SNAPSHOT-DEMOLITION", + "DURABLE-AUDIT-BOUNDARIES" + ], + "prefix_owners": [], + "effective_owners": [ + "DB-BULKOPS", + "INGEST-DOC-SNAPSHOT-DEMOLITION", + "DURABLE-AUDIT-BOUNDARIES" + ], + "declared_epoch": true, + "epoch_owners": [ + "DB-BULKOPS", + "INGEST-DOC-SNAPSHOT-DEMOLITION", + "DURABLE-AUDIT-BOUNDARIES" + ] + }, + { + "path": "internal/bulkops/rollback_test.go", + "exact_owners": [ + "DB-BULKOPS", + "CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK" + ], + "prefix_owners": [], + "effective_owners": [ + "DB-BULKOPS", + "CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK" + ], + "declared_epoch": true, + "epoch_owners": [ + "DB-BULKOPS", + "CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK" + ] + }, + { + "path": "internal/db/gorm/candidate_store_test.go", + "exact_owners": [ + "DB-BULKOPS", + "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK", + "DB-TEST-POOL-HYGIENE", + "DB-GOVERNANCE", + "CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK" + ], + "prefix_owners": [], + "effective_owners": [ + "DB-BULKOPS", + "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK", + "DB-TEST-POOL-HYGIENE", + "DB-GOVERNANCE", + "CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK" + ], + "declared_epoch": true, + "epoch_owners": [ + "DB-BULKOPS", + "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK", + "DB-TEST-POOL-HYGIENE", + "DB-GOVERNANCE", + "CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK" + ] + }, + { + "path": "internal/db/gorm/candidate_store.go", + "exact_owners": [ + "DB-BULKOPS", + "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK", + "DB-GOVERNANCE", + "CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK" + ], + "prefix_owners": [], + "effective_owners": [ + "DB-BULKOPS", + "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK", + "DB-GOVERNANCE", + "CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK" + ], + "declared_epoch": true, + "epoch_owners": [ + "DB-BULKOPS", + "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK", + "DB-GOVERNANCE", + "CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK" + ] + }, + { + "path": "internal/db/gorm/user_store.go", + "exact_owners": [ + "DB-AUTH", + "AUTH-BOOTSTRAP-SECURITY", + "DURABLE-AUDIT-BOUNDARIES" + ], + "prefix_owners": [], + "effective_owners": [ + "DB-AUTH", + "AUTH-BOOTSTRAP-SECURITY", + "DURABLE-AUDIT-BOUNDARIES" + ], + "declared_epoch": true, + "epoch_owners": [ + "DB-AUTH", + "AUTH-BOOTSTRAP-SECURITY", + "DURABLE-AUDIT-BOUNDARIES" + ] + }, + { + "path": "internal/mcp/tools_bulkops.go", + "exact_owners": [ + "DB-BULKOPS", + "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK" + ], + "prefix_owners": [], + "effective_owners": [ + "DB-BULKOPS", + "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK" + ], + "declared_epoch": true, + "epoch_owners": [ + "DB-BULKOPS", + "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK" + ] + }, + { + "path": "internal/mcp/tools_dryrun_test.go", + "exact_owners": [ + "DB-BULKOPS", + "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK" + ], + "prefix_owners": [], + "effective_owners": [ + "DB-BULKOPS", + "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK" + ], + "declared_epoch": true, + "epoch_owners": [ + "DB-BULKOPS", + "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK" + ] + }, + { + "path": "internal/mcp/tools_memory.go", + "exact_owners": [ + "MCP-STRUCTURED-INPUT-VALIDATION", + "REDACTION-LIVE-CONTRACT" + ], + "prefix_owners": [], + "effective_owners": [ + "MCP-STRUCTURED-INPUT-VALIDATION", + "REDACTION-LIVE-CONTRACT" + ], + "declared_epoch": true, + "epoch_owners": [ + "MCP-STRUCTURED-INPUT-VALIDATION", + "REDACTION-LIVE-CONTRACT" + ] + }, + { + "path": "internal/worker/auth_handlers.go", + "exact_owners": [ + "DB-AUTH", + "AUTH-BOOTSTRAP-SECURITY", + "DURABLE-AUDIT-BOUNDARIES" + ], + "prefix_owners": [], + "effective_owners": [ + "DB-AUTH", + "AUTH-BOOTSTRAP-SECURITY", + "DURABLE-AUDIT-BOUNDARIES" + ], + "declared_epoch": true, + "epoch_owners": [ + "DB-AUTH", + "AUTH-BOOTSTRAP-SECURITY", + "DURABLE-AUDIT-BOUNDARIES" + ] + }, + { + "path": "internal/worker/service.go", + "exact_owners": [ + "AUTH-BOOTSTRAP-SECURITY", + "REDACTION-LIVE-CONTRACT", + "V7-RUNTIME-WIRING" + ], + "prefix_owners": [], + "effective_owners": [ + "AUTH-BOOTSTRAP-SECURITY", + "REDACTION-LIVE-CONTRACT", + "V7-RUNTIME-WIRING" + ], + "declared_epoch": true, + "epoch_owners": [ + "AUTH-BOOTSTRAP-SECURITY", + "REDACTION-LIVE-CONTRACT", + "V7-RUNTIME-WIRING" + ] + }, + { + "path": "Makefile", + "exact_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "prefix_owners": [], + "effective_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "declared_epoch": true, + "epoch_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ] + }, + { + "path": "pkg/models/snapshot.go", + "exact_owners": [ + "DB-BULKOPS", + "INGEST-DOC-SNAPSHOT-DEMOLITION" + ], + "prefix_owners": [], + "effective_owners": [ + "DB-BULKOPS", + "INGEST-DOC-SNAPSHOT-DEMOLITION" + ], + "declared_epoch": true, + "epoch_owners": [ + "DB-BULKOPS", + "INGEST-DOC-SNAPSHOT-DEMOLITION" + ] + }, + { + "path": "plugin/engram/commands/doctor.md", + "exact_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "prefix_owners": [], + "effective_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "declared_epoch": true, + "epoch_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ] + }, + { + "path": "plugin/engram/commands/setup.md", + "exact_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "prefix_owners": [], + "effective_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "declared_epoch": true, + "epoch_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ] + }, + { + "path": "README.md", + "exact_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "prefix_owners": [], + "effective_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "declared_epoch": true, + "epoch_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ] + }, + { + "path": "README.ru.md", + "exact_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "prefix_owners": [], + "effective_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "declared_epoch": true, + "epoch_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ] + }, + { + "path": "README.zh.md", + "exact_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "prefix_owners": [], + "effective_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "declared_epoch": true, + "epoch_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ] + } + ], + "prefix_intersections": [ + { + "left_owner": "IMAGE-REMEDIATION", + "left": "apps/operator-console/package.json", + "right_owner": "OC-INTEGRATION", + "right": "apps/operator-console/**", + "exact_path": "apps/operator-console/package.json", + "declared_epoch": true + }, + { + "left_owner": "IMAGE-REMEDIATION", + "left": "apps/operator-console/package-lock.json", + "right_owner": "OC-INTEGRATION", + "right": "apps/operator-console/**", + "exact_path": "apps/operator-console/package-lock.json", + "declared_epoch": true + } + ], + "epochs": [ + { + "path": "internal/db/gorm/candidate_store.go", + "owners": [ + "DB-BULKOPS", + "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK", + "DB-GOVERNANCE", + "CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK" + ], + "transfer_gate": "rejected predecessor checker/hash recorded; rework uses exact base `68b2ce5835c7c6efdf1c68da9eedcb8d9c3837ef`; each accepted successor requires checker PASS, post-review PASS, integration SHA, and exact rebase before edit", + "line": 6 + }, + { + "path": "internal/db/gorm/candidate_store_test.go", + "owners": [ + "DB-BULKOPS", + "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK", + "DB-TEST-POOL-HYGIENE", + "DB-GOVERNANCE", + "CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK" + ], + "transfer_gate": "behavioral-edge head `bd68c05baf4b7250096dd84f56bebea2aa555970` remains current authority until pool-hygiene product `276337b3e96aa5af6d2e7dd9a0002ff957e5ffc9` plus evidence `68242c48aaad62ec087166eeb9ea32f14d189450` receive fresh checker and post-review; later successors require exact integration and rebase", + "line": 7 + }, + { + "path": "internal/mcp/tools_bulkops.go", + "owners": [ + "DB-BULKOPS", + "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK" + ], + "transfer_gate": "rejected predecessor checker/hash recorded; rework base is exact rejected head; checker and post-review PASS plus integration SHA close the transfer", + "line": 8 + }, + { + "path": "internal/mcp/tools_dryrun_test.go", + "owners": [ + "DB-BULKOPS", + "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK" + ], + "transfer_gate": "rejected predecessor checker/hash recorded; rework base is exact rejected head; checker and post-review PASS plus integration SHA close the transfer", + "line": 8 + }, + { + "path": "internal/bulkops/facade.go", + "owners": [ + "DB-BULKOPS", + "INGEST-DOC-SNAPSHOT-DEMOLITION", + "DURABLE-AUDIT-BOUNDARIES" + ], + "transfer_gate": "behavioral-edge composite checker and post-review PASS; exact integration SHA recorded; demolition rebased before edit; historical ingest guard green before durable-audit fault work", + "line": 9 + }, + { + "path": "internal/bulkops/facade_test.go", + "owners": [ + "DB-BULKOPS", + "INGEST-DOC-SNAPSHOT-DEMOLITION" + ], + "transfer_gate": "accepted behavioral-edge composite integrated; demolition worktree rebased; focused historical-only regressions PASS before integration", + "line": 10 + }, + { + "path": "internal/bulkops/rollback_test.go", + "owners": [ + "DB-BULKOPS", + "CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK" + ], + "transfer_gate": "accepted behavioral-edge composite and DB-GOVERNANCE integrated; candidate-review successor rebased; combined checker and post-review PASS", + "line": 11 + }, + { + "path": "pkg/models/snapshot.go", + "owners": [ + "DB-BULKOPS", + "INGEST-DOC-SNAPSHOT-DEMOLITION" + ], + "transfer_gate": "accepted behavioral-edge composite integrated; demolition successor rebased; persistence-compatibility and non-executable regressions PASS", + "line": 12 + }, + { + "path": "internal/db/gorm/user_store.go", + "owners": [ + "DB-AUTH", + "AUTH-BOOTSTRAP-SECURITY", + "DURABLE-AUDIT-BOUNDARIES" + ], + "transfer_gate": "each predecessor checker and post-review PASS, integration SHA recorded, successor rebased; no simultaneous writer", + "line": 13 + }, + { + "path": "internal/worker/auth_handlers.go", + "owners": [ + "DB-AUTH", + "AUTH-BOOTSTRAP-SECURITY", + "DURABLE-AUDIT-BOUNDARIES" + ], + "transfer_gate": "each predecessor checker and post-review PASS, integration SHA recorded, successor rebased; no simultaneous writer", + "line": 14 + }, + { + "path": "internal/worker/service.go", + "owners": [ + "AUTH-BOOTSTRAP-SECURITY", + "REDACTION-LIVE-CONTRACT", + "V7-RUNTIME-WIRING" + ], + "transfer_gate": "auth bootstrap checker and post-review PASS, commit integrated, redaction worktree rebased and boot-captured rules proved; V7 later rebases the redaction integration and reruns both auth and redaction route regressions", + "line": 15 + }, + { + "path": "internal/mcp/tools_memory.go", + "owners": [ + "MCP-STRUCTURED-INPUT-VALIDATION", + "REDACTION-LIVE-CONTRACT" + ], + "transfer_gate": "structured-input checker/post-review PASS and exact integration SHA; redaction successor rebased so malformed input remains zero-audit/zero-write before matched-mutation audit enforcement", + "line": 16 + }, + { + "path": "docs/operating-engram.md", + "owners": [ + "REDACTION-LIVE-CONTRACT", + "FINAL-PUBLIC-TRUTH" + ], + "transfer_gate": "redaction live contract checker/post-review PASS and exact integration SHA; FINAL rebased and revalidates the operator claims against final published artifacts", + "line": 17 + }, + { + "path": "Dockerfile", + "owners": [ + "SECURITY-TOOLCHAIN", + "IMAGE-REMEDIATION" + ], + "transfer_gate": "toolchain checker and post-review PASS, commit integrated, image worktree rebased, zero-finding rebuild and scan before successor integration", + "line": 18 + }, + { + "path": ".github/workflows/test.yml", + "owners": [ + "RELEASE-GATES", + "IMAGE-REMEDIATION" + ], + "transfer_gate": "release-gates checker and post-review PASS, commit integrated, image worktree rebased before workflow image-identity changes", + "line": 19 + }, + { + "path": "docker-compose.yml", + "owners": [ + "IMAGE-REMEDIATION", + "DEPLOYMENT-ROLLBACK" + ], + "transfer_gate": "image checker and post-review PASS, `final-image-set.json` recorded, deployment worktree rebased, fresh scan after edits", + "line": 20 + }, + { + "path": "deploy/docker-compose.runtime.yml", + "owners": [ + "IMAGE-REMEDIATION", + "DEPLOYMENT-ROLLBACK" + ], + "transfer_gate": "image checker and post-review PASS, `final-image-set.json` recorded, deployment worktree rebased, fresh scan after edits", + "line": 20 + }, + { + "path": "apps/operator-console/package.json", + "owners": [ + "IMAGE-REMEDIATION", + "OC-INTEGRATION" + ], + "transfer_gate": "image checker and post-review PASS, OC worktree rebased, any later dependency edit reruns audit/build/browser/image scan", + "line": 21 + }, + { + "path": "apps/operator-console/package-lock.json", + "owners": [ + "IMAGE-REMEDIATION", + "OC-INTEGRATION" + ], + "transfer_gate": "image checker and post-review PASS, OC worktree rebased, any later dependency edit reruns audit/build/browser/image scan", + "line": 21 + }, + { + "path": "docs/DEPLOYMENT.md", + "owners": [ + "IMAGE-REMEDIATION", + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "transfer_gate": "image proof integrated; CORE rebased for M5; FINAL rebased to exact M6 integration and final-version artifact before edit", + "line": 22 + }, + { + "path": "docs/PRODUCTION-TESTING-PLAYBOOK.md", + "owners": [ + "IMAGE-REMEDIATION", + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "transfer_gate": "image proof integrated; CORE rebased for M5; FINAL rebased to exact M6 integration and final-version artifact before edit", + "line": 22 + }, + { + "path": "README.md", + "owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "transfer_gate": "M5 release published and proved; FINAL worktree rebased to exact M6 integration; final version artifact and exact release-note path recorded before edit", + "line": 23 + }, + { + "path": "README.ru.md", + "owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "transfer_gate": "M5 release published and proved; FINAL worktree rebased to exact M6 integration; final version artifact and exact release-note path recorded before edit", + "line": 23 + }, + { + "path": "README.zh.md", + "owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "transfer_gate": "M5 release published and proved; FINAL worktree rebased to exact M6 integration; final version artifact and exact release-note path recorded before edit", + "line": 23 + }, + { + "path": "CONTRIBUTING.md", + "owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "transfer_gate": "M5 release published and proved; FINAL worktree rebased to exact M6 integration; final version artifact and exact release-note path recorded before edit", + "line": 23 + }, + { + "path": "CHANGELOG.md", + "owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "transfer_gate": "M5 release published and proved; FINAL worktree rebased to exact M6 integration; final version artifact and exact release-note path recorded before edit", + "line": 23 + }, + { + "path": "Makefile", + "owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "transfer_gate": "M5 release published and proved; FINAL worktree rebased to exact M6 integration; final version artifact and exact release-note path recorded before edit", + "line": 23 + }, + { + "path": ".env.example", + "owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "transfer_gate": "M5 release published and proved; FINAL worktree rebased to exact M6 integration; final version artifact and exact release-note path recorded before edit", + "line": 23 + }, + { + "path": "docs/MIGRATION.md", + "owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "transfer_gate": "M5 release published and proved; FINAL worktree rebased to exact M6 integration; final version artifact and exact release-note path recorded before edit", + "line": 23 + }, + { + "path": "docs/arch/CONFIGURATION.md", + "owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "transfer_gate": "M5 release published and proved; FINAL worktree rebased to exact M6 integration; final version artifact and exact release-note path recorded before edit", + "line": 23 + }, + { + "path": "docs/arch/QUICKSTART.md", + "owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "transfer_gate": "M5 release published and proved; FINAL worktree rebased to exact M6 integration; final version artifact and exact release-note path recorded before edit", + "line": 23 + }, + { + "path": "docs/public/engram.jpg", + "owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "transfer_gate": "M5 release published and proved; FINAL worktree rebased to exact M6 integration; final version artifact and exact release-note path recorded before edit", + "line": 23 + }, + { + "path": "plugin/engram/commands/setup.md", + "owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "transfer_gate": "M5 release published and proved; FINAL worktree rebased to exact M6 integration; final version artifact and exact release-note path recorded before edit", + "line": 23 + }, + { + "path": "plugin/engram/commands/doctor.md", + "owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "transfer_gate": "M5 release published and proved; FINAL worktree rebased to exact M6 integration; final version artifact and exact release-note path recorded before edit", + "line": 23 + }, + { + "path": "internal/worker/dream_cycle.go", + "owners": [ + "CRYSTALLIZATION-DREAM-CYCLE-CORRECTNESS" + ], + "transfer_gate": "single-owner tracked epoch with no predecessor; the maker starts only after the named dependencies, then requires checker PASS, post-review PASS, integration SHA, and a root plan/state amendment before any later writer", + "line": 24 + }, + { + "path": "internal/worker/dream_cycle_test.go", + "owners": [ + "CRYSTALLIZATION-DREAM-CYCLE-CORRECTNESS" + ], + "transfer_gate": "single-owner tracked epoch with no predecessor; the maker starts only after the named dependencies, then requires checker PASS, post-review PASS, integration SHA, and a root plan/state amendment before any later writer", + "line": 24 + } + ], + "errors": [] +} diff --git a/.agent/specs/release-gates-r8/evidence/plan-governance/scope-map-parity.json b/.agent/specs/release-gates-r8/evidence/plan-governance/scope-map-parity.json new file mode 100644 index 00000000..37bd4ded --- /dev/null +++ b/.agent/specs/release-gates-r8/evidence/plan-governance/scope-map-parity.json @@ -0,0 +1,51 @@ +{ + "schema_version": 1, + "gate": "r8-scope-map-parity", + "checked_at": "2026-07-10T23:07:40.2283397+03:00", + "verdict": "PASS", + "register_freeze": { + "path": "D:\\Dev\\engram\\.agent\\reports\\production-readiness-evidence-register.json", + "sha256": "ab5f882fa110ca823a317061ecbca0c62516702735325893a56206f9e7a29415", + "updated_at": "2026-07-10T22:46:01.2938194+03:00", + "rows": 67, + "unique_slices": 67, + "goal_status": "USER_RESUMED_TOOL_STATUS_BLOCKED" + }, + "scope_map": { + "path": ".agent/plans/2026-07-10-engram-production-ready-scope-map.json", + "sha256": "81093184036672008d6b85dfa88a431998ef70b587ab11475aa2b315f03ddf79", + "rows": 67, + "unique_slices": 67, + "slice_set_matches_register": true, + "snapshot_status_head_matches_register": true, + "missing_plan_owners": [], + "classification_counts": { + "maker": 56, + "checker-evidence": 4, + "meta-fold": 4, + "historical": 1, + "root-integration": 2 + } + }, + "meta_folds": { + "CUSTOMER-MODE": ["CRITICAL-HARNESS", "INTEGRATION-RELEASE"], + "MASTER-PLAN": ["PLAN-GOVERNANCE"], + "OPERATIONS": ["DEPLOYMENT-ROLLBACK", "RECOVERY-DATA", "OBSERVABILITY-OTLP", "PRIVACY-BOUNDARIES", "CORE-PUBLIC-TRUTH", "FINAL-PUBLIC-TRUTH"], + "OPERATOR-CONSOLE": ["IMAGE-REMEDIATION", "OC-INTEGRATION"] + }, + "load_bearing_rejected_heads": { + "DB-BULKOPS": ["68b2ce5835c7c6efdf1c68da9eedcb8d9c3837ef"], + "DB-EMBEDDING-EVIDENCE-TRANSPORT": ["369951b61ee07cb0c405558e0f677cd1c9e90362"], + "RELEASE-GATES": ["144eeefa003c3e1c0009c4264f41236ee3453b65"], + "SECURITY-PROJECT-IDENTITY": ["9e2ce4e58a5cded69660ca9ac532d2167f315bb2"] + }, + "snapshot_only_fields": [ + "register_snapshot.sha256", + "register_snapshot.updated_at", + "register_status", + "register_head", + "register_notes" + ], + "ordinary_same_lane_progress_may_drift": true, + "errors": [] +} From a538f6224ef31f612152470a4ecd45e78ff9d0f2 Mon Sep 17 00:00:00 2001 From: Kirill Turanskiy Date: Fri, 10 Jul 2026 23:36:11 +0300 Subject: [PATCH 039/111] docs(evidence): make embedding coverage capture reproducible --- .../R3-SHA256SUMS.txt | 22 +- .../coverage-repeat.v1.json | 6 +- .../maker-report.md | 6 +- .../maker-summary.v1.json | 6 +- .../verification-matrix.v1.json | 4 +- .../R4-SHA256SUMS.txt | 32 +- .../coverage-repeat.v1.json | 44 +- .../maker-report.md | 50 +-- .../maker-summary.v1.json | 40 +- .../verification-matrix.v1.json | 45 +- .../R5-SHA256SUMS.txt | 42 ++ .../coverage-capture.v1.json | 33 ++ .../coverage-repeat.v1.json | 50 +++ .../coverage-run-1.tap | 50 +++ .../coverage-run-2.tap | 50 +++ .../maker-report.md | 51 +++ .../maker-summary.v1.json | 74 ++++ .../run-coverage-capture-verifier.cmd | 4 + .../verification-matrix.v1.json | 27 ++ .../verify-coverage-capture.cjs | 405 ++++++++++++++++++ .../ARTIFACTS.sha256 | 4 +- .../maker-report.md | 165 ++++--- .../verification-observations.v1.json | 111 +++-- .../verify-manifest.test.cjs | 82 +++- ...B-EMBEDDING-EVIDENCE-TRANSPORT-R3.tdd.json | 4 +- ...B-EMBEDDING-EVIDENCE-TRANSPORT-R4.tdd.json | 28 +- ...B-EMBEDDING-EVIDENCE-TRANSPORT-R5.red.json | 11 + ...B-EMBEDDING-EVIDENCE-TRANSPORT-R5.tdd.json | 101 +++++ 28 files changed, 1200 insertions(+), 347 deletions(-) create mode 100644 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/R5-SHA256SUMS.txt create mode 100644 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/coverage-capture.v1.json create mode 100644 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/coverage-repeat.v1.json create mode 100644 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/coverage-run-1.tap create mode 100644 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/coverage-run-2.tap create mode 100644 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/maker-report.md create mode 100644 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/maker-summary.v1.json create mode 100644 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/run-coverage-capture-verifier.cmd create mode 100644 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/verification-matrix.v1.json create mode 100644 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/verify-coverage-capture.cjs create mode 100644 .agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R5.red.json create mode 100644 .agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R5.tdd.json diff --git a/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/R3-SHA256SUMS.txt b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/R3-SHA256SUMS.txt index 4df3e0d1..f2fd03d0 100644 --- a/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/R3-SHA256SUMS.txt +++ b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/R3-SHA256SUMS.txt @@ -4,20 +4,20 @@ # checkout-equivalence=crlf-to-lf-with-no-bare-cr # parent=8dac7910de52d2744fcf67f79a0a1597beebac72 # accepted-product-source=38d6a4fb7ff5f5ae3b6c0066c0a1b806421137df -# status=superseded-by-r4 -# refreshed-on-base=d650df5c4271cdb50aa1f443d2f95b2f4b672541 +# status=superseded-by-r5 +# refreshed-on-base=369951b61ee07cb0c405558e0f677cd1c9e90362 # maker-commit=reported-out-of-band-after-commit # self-entry=excluded-to-avoid-recursion 5d932e6acf104bf9eff291409b50961007512e09e91d78401257a018fcb780f4 .agent/reports/evidence/production-ready/db-embedding-stats/SHA256SUMS.txt e3e9fd6250d4ead502a01ec81bb7901ad658d74845184a10b6f153276a1bd12f .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/content-manifest.v1.json -9fc641fc8f86a161c81d100fc840e50ecf4d4bc7e83b829dab2899e430c097cf .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/ARTIFACTS.sha256 +05ed45d295c3520fbbbc23419d6d57796127d71bd324c6ddb8f60191dc125f00 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/ARTIFACTS.sha256 a55e59dd870659330add8f840272aa1e8829f8161779db3e9be9e6e014cf1ba4 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.cjs -1d544562cd9273a91e6ce9eba524698fbef922603f5f3d67eb7e27f1a8c8e9e4 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.test.cjs -fd16ab3f6135a3af584a8f3589e9137c6bfcb62f474093492d15020db21ee3fc .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verification-observations.v1.json -cb73530f2c204f2c7e4110928971ffaac6c3cb172b59c72cf8047cecf610ab65 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/maker-report.md +970a7a4a322b8aa5a0ed434d68ef5ce41c5085c986007f15aadf34d69c0172aa .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.test.cjs +4f62630b651d6805ffe894e643159dfdef41176081878f303de12a64a56dca52 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verification-observations.v1.json +5d7a49dd716c25679e133c9aa2c0b59fd40525fb0540cc8b4556429df1d37fc6 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/maker-report.md 8777110d8681c895fd821664ca733d959e940353490ae9ed8bc0f0c1e27f8b3b .agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R3.red.json -4ce40777286f76e86cd48a63b38ae42e30b10de0de40cb7c9771018381f893cb .agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R3.tdd.json -70251c81fc640a595d0ba0cbe377511de54822abcaf763cc866ca1034c91e6fe .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/coverage-repeat.v1.json -a829bdb938afb219fd1e3321b1ea3a8c1960e24d0d74fa304e008e3c6fe50aad .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/verification-matrix.v1.json -091286d8afe4f4b8a9ff4b556f875113620c318ebc613c5bbc3df16194d2832c .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/maker-summary.v1.json -14739f0a3deb055cd1ee6bda8799fcb6c964f2be527cb0230dc8c429225addd9 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/maker-report.md +d01e168c7eb75427c18d6b3f05c33af66b9d9f92342574007089494cb9f98c04 .agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R3.tdd.json +1811b1c83b3c948380b35ab5037a574067a7d2e60bcb27629269301c233a76d7 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/coverage-repeat.v1.json +ea5083eb4fb90c573fd645db53ed5d8bb99dcdf56905c6db6c84b8580951257d .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/verification-matrix.v1.json +d60d6dd98a0534b4b0295e68db7694b0b1e9ba0ec300982ff2f65fad0a364e3e .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/maker-summary.v1.json +b2d24a62e3ac60dd2bc94d6a018f0669ae20dc092b028414cb05083a1f54caa4 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/maker-report.md diff --git a/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/coverage-repeat.v1.json b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/coverage-repeat.v1.json index 6fb00770..602faba7 100644 --- a/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/coverage-repeat.v1.json +++ b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/coverage-repeat.v1.json @@ -1,8 +1,8 @@ { "schema_version": 1, "slice": "DB-EMBEDDING-EVIDENCE-TRANSPORT-R3", - "status": "SUPERSEDED_BY_R4", - "superseded_reason": "Independent checker reruns on Node v24.2.0 did not reproduce the committed R3 coverage values.", + "status": "SUPERSEDED_BY_R5", + "superseded_reason": "R3 values were not reproducible and the R4 replacement was later found to depend on maker-only mixed EOL bytes.", "historical_numeric_claims_removed": true, - "replacement": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4/coverage-repeat.v1.json" + "replacement": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/coverage-repeat.v1.json" } diff --git a/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/maker-report.md b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/maker-report.md index af2effc3..95d5f258 100644 --- a/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/maker-report.md +++ b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/maker-report.md @@ -9,8 +9,8 @@ The independent R3 checker reproduced all behavioral rails but did not reproduce the committed coverage values. Those numeric claims have therefore been removed instead of being repeated as current evidence. -The exact R4 reruns, coverage scopes, fail-closed null regressions, checksums, +The exact R5 reruns, coverage scopes, fail-closed null regressions, checksums, and current readiness packet are under -`.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4/`. +`.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/`. -Status: **SUPERSEDED_BY_R4**. +Status: **SUPERSEDED_BY_R5**. diff --git a/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/maker-summary.v1.json b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/maker-summary.v1.json index 58fea9fa..c5770753 100644 --- a/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/maker-summary.v1.json +++ b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/maker-summary.v1.json @@ -2,7 +2,7 @@ "schema_version": 1, "slice": "DB-EMBEDDING-EVIDENCE-TRANSPORT-R3", "role": "maker", - "status": "SUPERSEDED_BY_R4", + "status": "SUPERSEDED_BY_R5", "parent": "8dac7910de52d2744fcf67f79a0a1597beebac72", "accepted_product_source": "38d6a4fb7ff5f5ae3b6c0066c0a1b806421137df", "preserved_repairs": [ @@ -13,7 +13,7 @@ ], "coverage_claim": { "status": "REMOVED_AS_NOT_REPRODUCIBLE", - "replacement": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4/coverage-repeat.v1.json" + "replacement": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/coverage-repeat.v1.json" }, - "next_action": "Use the R4 packet and a fresh independent checker." + "next_action": "Use the R5 packet and its transcript-parsing verifier." } diff --git a/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/verification-matrix.v1.json b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/verification-matrix.v1.json index c0933548..67cd3407 100644 --- a/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/verification-matrix.v1.json +++ b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/verification-matrix.v1.json @@ -1,7 +1,7 @@ { "schema_version": 1, "slice": "DB-EMBEDDING-EVIDENCE-TRANSPORT-R3", - "status": "SUPERSEDED_BY_R4", + "status": "SUPERSEDED_BY_R5", "parent": "8dac7910de52d2744fcf67f79a0a1597beebac72", "accepted_product_source": "38d6a4fb7ff5f5ae3b6c0066c0a1b806421137df", "preserved_evidence": { @@ -14,6 +14,6 @@ }, "coverage": { "status": "REMOVED_AS_NOT_REPRODUCIBLE", - "replacement": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4/coverage-repeat.v1.json" + "replacement": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/coverage-repeat.v1.json" } } diff --git a/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4/R4-SHA256SUMS.txt b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4/R4-SHA256SUMS.txt index 998209ed..cd9bc30a 100644 --- a/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4/R4-SHA256SUMS.txt +++ b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4/R4-SHA256SUMS.txt @@ -4,25 +4,27 @@ # checkout-equivalence=crlf-to-lf-with-no-bare-cr # base=d650df5c4271cdb50aa1f443d2f95b2f4b672541 # accepted-product-source=38d6a4fb7ff5f5ae3b6c0066c0a1b806421137df +# status=superseded-by-r5 +# refreshed-on-base=369951b61ee07cb0c405558e0f677cd1c9e90362 # maker-commit=reported-out-of-band-after-commit # self-entry=excluded-to-avoid-recursion 5d932e6acf104bf9eff291409b50961007512e09e91d78401257a018fcb780f4 .agent/reports/evidence/production-ready/db-embedding-stats/SHA256SUMS.txt e3e9fd6250d4ead502a01ec81bb7901ad658d74845184a10b6f153276a1bd12f .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/content-manifest.v1.json -9fc641fc8f86a161c81d100fc840e50ecf4d4bc7e83b829dab2899e430c097cf .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/ARTIFACTS.sha256 +05ed45d295c3520fbbbc23419d6d57796127d71bd324c6ddb8f60191dc125f00 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/ARTIFACTS.sha256 a55e59dd870659330add8f840272aa1e8829f8161779db3e9be9e6e014cf1ba4 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.cjs -1d544562cd9273a91e6ce9eba524698fbef922603f5f3d67eb7e27f1a8c8e9e4 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.test.cjs -fd16ab3f6135a3af584a8f3589e9137c6bfcb62f474093492d15020db21ee3fc .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verification-observations.v1.json -cb73530f2c204f2c7e4110928971ffaac6c3cb172b59c72cf8047cecf610ab65 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/maker-report.md +970a7a4a322b8aa5a0ed434d68ef5ce41c5085c986007f15aadf34d69c0172aa .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.test.cjs +4f62630b651d6805ffe894e643159dfdef41176081878f303de12a64a56dca52 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verification-observations.v1.json +5d7a49dd716c25679e133c9aa2c0b59fd40525fb0540cc8b4556429df1d37fc6 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/maker-report.md 8777110d8681c895fd821664ca733d959e940353490ae9ed8bc0f0c1e27f8b3b .agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R3.red.json -4ce40777286f76e86cd48a63b38ae42e30b10de0de40cb7c9771018381f893cb .agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R3.tdd.json -70251c81fc640a595d0ba0cbe377511de54822abcaf763cc866ca1034c91e6fe .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/coverage-repeat.v1.json -a829bdb938afb219fd1e3321b1ea3a8c1960e24d0d74fa304e008e3c6fe50aad .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/verification-matrix.v1.json -091286d8afe4f4b8a9ff4b556f875113620c318ebc613c5bbc3df16194d2832c .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/maker-summary.v1.json -14739f0a3deb055cd1ee6bda8799fcb6c964f2be527cb0230dc8c429225addd9 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/maker-report.md -7ba5fa9698b6ab898df6e88d625c267cbf0262ed0b3db0aa5b190f6395028349 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/R3-SHA256SUMS.txt +d01e168c7eb75427c18d6b3f05c33af66b9d9f92342574007089494cb9f98c04 .agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R3.tdd.json +1811b1c83b3c948380b35ab5037a574067a7d2e60bcb27629269301c233a76d7 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/coverage-repeat.v1.json +ea5083eb4fb90c573fd645db53ed5d8bb99dcdf56905c6db6c84b8580951257d .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/verification-matrix.v1.json +d60d6dd98a0534b4b0295e68db7694b0b1e9ba0ec300982ff2f65fad0a364e3e .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/maker-summary.v1.json +b2d24a62e3ac60dd2bc94d6a018f0669ae20dc092b028414cb05083a1f54caa4 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/maker-report.md +1f985a357031dd4b7e101c1ab15ee71083d2fb340efeb29e8ddc3a305b4e599a .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/R3-SHA256SUMS.txt 0f5054c4e312b2159edd821700ebe665b8715dfdd3d3bc0ba7cc2c48c22ef7de .agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R4.red.json -08490a98a56d7843e923749bb04a6802cbd067a0a82175efa0f223ed8adbb45a .agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R4.tdd.json -d3ac6ef44dbde20d8a68d18b6bd3577170063b2117082b892689db7640052cb7 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4/coverage-repeat.v1.json -178716ab97ee5046ab4701e1749f9c1e5b4772ea9d189daa1122dfe1e481c04d .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4/verification-matrix.v1.json -2b79818f816a29f4d8c011f7d1ff824d3b13f0c77da0c1e6af28908055f48268 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4/maker-summary.v1.json -37f818d971287cb757bfeea44e9fd40f268b60fb0c9149a0772c9adac57d6daa .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4/maker-report.md +bdc69720f8bab1c4f2f446202e21917c6db475824fcdac17ca2b0f668f052c90 .agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R4.tdd.json +7208503ef9dc002bf8bb659e44ffcba4ace76c224136e4e4b30b6f034633ba7b .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4/coverage-repeat.v1.json +4eb5199000a011e4e685900daa07d98773770d78753032db6b152147ac50aaf8 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4/verification-matrix.v1.json +afea6437d06ee2ff4d2eb1574464184c31e9c7441aa07f4a2ac6258b11039cfd .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4/maker-summary.v1.json +78500814f2918040c5c8c0e3a9f26cdc858bf33027a07e51e782e02ea88329f6 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4/maker-report.md diff --git a/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4/coverage-repeat.v1.json b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4/coverage-repeat.v1.json index a514e0cb..031da238 100644 --- a/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4/coverage-repeat.v1.json +++ b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4/coverage-repeat.v1.json @@ -1,43 +1,9 @@ { "schema_version": 1, "slice": "DB-EMBEDDING-EVIDENCE-TRANSPORT-R4", - "node_version": "v24.2.0", - "command": "node.exe --test --test-concurrency=1 --experimental-test-coverage .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.test.cjs", - "covered_git_blob_oids": { - "verifier": "75bec9c41eb5abc435f13d90848074f6608f7fce", - "test_harness": "35d5015c51e78130b7293e0b09ad6494ab3a4f1a" - }, - "runs": [ - { - "run": 1, - "started_at_utc": "2026-07-10T17:06:15.9727862+00:00", - "completed_at_utc": "2026-07-10T17:06:22.1386826+00:00", - "exit_code": 0, - "tests": 24, - "passed": 24, - "failed": 0, - "aggregate": { "line_percent": 89.23, "branch_percent": 76.61, "functions_percent": 95.35 }, - "verifier": { "line_percent": 80.92, "branch_percent": 58.02, "functions_percent": 81.82 }, - "test_harness": { "line_percent": 100.0, "branch_percent": 97.44, "functions_percent": 100.0 } - }, - { - "run": 2, - "started_at_utc": "2026-07-10T17:06:38.0903377+00:00", - "completed_at_utc": "2026-07-10T17:06:44.2015599+00:00", - "exit_code": 0, - "tests": 24, - "passed": 24, - "failed": 0, - "aggregate": { "line_percent": 89.23, "branch_percent": 76.61, "functions_percent": 95.35 }, - "verifier": { "line_percent": 80.92, "branch_percent": 58.02, "functions_percent": 81.82 }, - "test_harness": { "line_percent": 100.0, "branch_percent": 97.44, "functions_percent": 100.0 } - } - ], - "reproducible": true, - "threshold": { - "percent": 80, - "basis": "aggregate line coverage", - "observed_percent": 89.23, - "status": "PASS" - } + "status": "SUPERSEDED_BY_R5", + "superseded_reason": "Independent R4 checker proved that the recorded exact values were produced from maker-only mixed EOL working-tree bytes, not from the committed Git blob bytes in a fresh checkout.", + "historical_numeric_claims_removed": true, + "replacement": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/coverage-repeat.v1.json", + "checker_report": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4-checker/checker-report.md" } diff --git a/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4/maker-report.md b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4/maker-report.md index dc09dfda..9fad3d87 100644 --- a/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4/maker-report.md +++ b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4/maker-report.md @@ -1,39 +1,19 @@ -# DB-EMBEDDING-EVIDENCE-TRANSPORT R4 maker summary +# DB-EMBEDDING-EVIDENCE-TRANSPORT R4 supersession note -R4 starts from exact base `d650df5c4271cdb50aa1f443d2f95b2f4b672541` -and preserves the accepted product source -`38d6a4fb7ff5f5ae3b6c0066c0a1b806421137df` byte-for-byte. +R4 remains the historical repair that closed the two raw-exception findings: +`representation=null` and `entries[0]=null` now produce structured `FAIL`, empty +stderr, empty entries, and zero reported plus preload-observed source access. +Its exact-base RED `22/2`, GREEN `24/24`, permanent attacks, Prove-It mutations, +Windows/fresh-LF source rails, and product parity remain valid. -Two new permanent regressions reproduce the checker findings on the exact base: -`representation=null` escaped through a raw `TypeError` reading `kind`, and a -null entry escaped through a raw `TypeError` reading `path`. Exact-base RED was -`22 pass / 2 fail`; GREEN and post-restore are `24/24`. +The independent R4 checker found one evidence-integrity defect: the exact +coverage values were reproduced only from the maker worktree's mixed EOL raw +files. They were not reproducible from the committed target in either a fresh +CRLF or fresh LF checkout. The numeric coverage claim has therefore been +removed rather than preserved as history. -The repair is deliberately narrow. Entry-shape comparison now rejects a -non-object before dereference, and the already-validated representation is read -through a safe object. Both mutations now return stable JSON `status=FAIL`, a -specific structural error, empty entries, reported source accesses `0/0`, and -preload-observed `git cat-file` plus source-file reads `0/0`. +The authoritative LF capture, raw transcripts, parsed metrics, exact staged +blob/filesystem hashes, and current checksum packet are under +`.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/`. -Independent checker attacks remain `15/15` at the case level. Prove-It mutation -made `validateContractSchema` lose 15 tests and forced artifact PASS lost 9 -tests; restoration returned byte-identically to `24/24`. - -Node `v24.2.0` coverage was run twice against the final verifier/test blobs and -was identical on both runs: - -| Scope | Line | Branch | Functions | -| --- | ---: | ---: | ---: | -| aggregate | `89.23%` | `76.61%` | `95.35%` | -| verifier | `80.92%` | `58.02%` | `81.82%` | -| test harness | `100.00%` | `97.44%` | `100.00%` | - -The hard gate is aggregate line coverage: `89.23% >= 80%`. - -Windows materialization remains raw/Git/LF `0/7`, `7/7`, `7/7`; fresh LF is -`7/7` in all three views. Both materializations pass `git-object`, -`checkout-lf`, the `24/24` permanent suite, and the exact five-file artifact -set. Product/source/test delta and temporary worktree, Node, PostgreSQL database, -and PostgreSQL session residue are all zero. - -Status: **READY_FOR_CHECK**. The maker does not merge, push, tag, or self-accept. +Status: **SUPERSEDED_BY_R5**. diff --git a/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4/maker-summary.v1.json b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4/maker-summary.v1.json index 4168c684..f4a91acb 100644 --- a/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4/maker-summary.v1.json +++ b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4/maker-summary.v1.json @@ -2,37 +2,19 @@ "schema_version": 1, "slice": "DB-EMBEDDING-EVIDENCE-TRANSPORT-R4", "role": "maker", - "status": "READY_FOR_CHECK", + "status": "SUPERSEDED_BY_R5", "base": "d650df5c4271cdb50aa1f443d2f95b2f4b672541", - "branch": "work/prc-db-embedding-evidence-transport-r4", - "worktree": "D:/Dev/engram/.agent/worktrees/db-embedding-evidence-r4-maker", "accepted_product_source": "38d6a4fb7ff5f5ae3b6c0066c0a1b806421137df", - "repairs": [ - "representation=null now emits stable structured FAIL", - "entries[n]=null now emits stable structured FAIL", - "both null cases fail before reported and actual source access", - "coverage claims refreshed from two identical Node v24.2.0 runs on final verifier and test bytes", - "unreproduced historical coverage claims removed from duplicate R3 surfaces" + "preserved_repairs": [ + "structured FAIL for representation=null", + "structured FAIL for entries[0]=null", + "preload-observed source access remains zero", + "24/24 permanent mutation suite", + "Windows and fresh-LF representation rails" ], - "tests": { - "exact_base_red": "22 pass / 2 fail", - "green": "24/24 PASS", - "independent_attacks": "15/15 cases PASS", - "prove_it_validateContractSchema": "15 failed", - "prove_it_verifyArtifactFiles": "9 failed", - "post_restore": "24/24 PASS" + "coverage_claim": { + "status": "REMOVED_AS_MIXED_EOL_MATERIALIZATION", + "replacement": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/coverage-repeat.v1.json" }, - "coverage": { - "repeat_identical": true, - "aggregate": { "line_percent": 89.23, "branch_percent": 76.61, "functions_percent": 95.35 }, - "verifier": { "line_percent": 80.92, "branch_percent": 58.02, "functions_percent": 81.82 }, - "test_harness": { "line_percent": 100.0, "branch_percent": 97.44, "functions_percent": 100.0 }, - "threshold_basis": "aggregate line coverage", - "threshold_percent": 80, - "status": "PASS" - }, - "product_source_test_delta": 0, - "commit": null, - "commit_reason": "reported out-of-band after the single commit to avoid self-reference", - "next_action": "fresh R4 checker; no maker self-acceptance" + "next_action": "Use the R5 transcript-backed packet and a fresh checker." } diff --git a/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4/verification-matrix.v1.json b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4/verification-matrix.v1.json index a3266a99..daa34701 100644 --- a/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4/verification-matrix.v1.json +++ b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4/verification-matrix.v1.json @@ -1,42 +1,23 @@ { "schema_version": 1, "slice": "DB-EMBEDDING-EVIDENCE-TRANSPORT-R4", + "status": "SUPERSEDED_BY_R5", "base": "d650df5c4271cdb50aa1f443d2f95b2f4b672541", "accepted_product_source": "38d6a4fb7ff5f5ae3b6c0066c0a1b806421137df", - "rails": { - "exact_base_red": { "exit_code": 1, "passed": 22, "failed": 2, "total": 24 }, - "green": { "exit_code": 0, "passed": 24, "failed": 0, "total": 24 }, - "independent_attack_cases": { "passed": 15, "failed": 0, "total": 15 }, + "preserved_evidence": { + "exact_base_red": "22 pass / 2 fail", + "green": "24/24 pass", + "independent_attack_cases": "15/15 pass", "null_representation_structured_fail": "PASS", "null_entry_structured_fail": "PASS", "preload_spy_actual_source_access_zero": "PASS", - "windows_crlf": { - "tracked_eol": "7/7 i/lf w/crlf", - "legacy_raw_audit": "raw 0/7; Git 7/7; checkout-LF 7/7", - "git_object": "7/7 PASS", - "checkout_lf": "7/7 PASS; bare CR 0", - "artifact_files": "5/5 PASS", - "permanent_suite": "24/24 PASS" - }, - "fresh_lf": { - "tracked_eol": "7/7 i/lf w/lf", - "legacy_raw_audit": "raw/Git/checkout-LF 7/7", - "git_object": "7/7 PASS", - "checkout_lf": "7/7 PASS; bare CR 0", - "artifact_files": "5/5 PASS", - "permanent_suite": "24/24 PASS" - }, - "prove_it": { - "validateContractSchema": "15 failed; exit 1", - "verifyArtifactFiles": "9 failed; exit 1", - "post_restore": "24/24 PASS; verifier byte-identical" - }, - "coverage_repeat_identical": "PASS", - "aggregate_line_coverage_gate": "89.23 >= 80 PASS", - "product_source_test_delta": 0, - "temporary_worktree_residue": 0, - "maker_node_process_residue": 0, - "matching_postgresql_database_residue": 0, - "matching_postgresql_session_residue": 0 + "prove_it": "validateContractSchema 15 failed; verifyArtifactFiles 9 failed", + "windows": "raw 0/7; Git 7/7; checkout-LF 7/7; artifacts 5/5", + "fresh_lf": "raw/Git/checkout-LF 7/7; artifacts 5/5; suite 24/24", + "product_source_test_delta": 0 + }, + "coverage": { + "status": "REMOVED_AS_MIXED_EOL_MATERIALIZATION", + "replacement": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/coverage-repeat.v1.json" } } diff --git a/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/R5-SHA256SUMS.txt b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/R5-SHA256SUMS.txt new file mode 100644 index 00000000..02b97b37 --- /dev/null +++ b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/R5-SHA256SUMS.txt @@ -0,0 +1,42 @@ +# manifest-version=1 +# algorithm=sha256 +# representation=canonical-lf-files +# checkout-equivalence=crlf-to-lf-with-no-bare-cr +# base=369951b61ee07cb0c405558e0f677cd1c9e90362 +# accepted-product-source=38d6a4fb7ff5f5ae3b6c0066c0a1b806421137df +# closed-finding=ET-R4-001 +# coverage-materialization=core.autocrlf=false; index=lf; filesystem=lf +# maker-commit=reported-out-of-band-after-commit +# self-entry=excluded-to-avoid-recursion +5d932e6acf104bf9eff291409b50961007512e09e91d78401257a018fcb780f4 .agent/reports/evidence/production-ready/db-embedding-stats/SHA256SUMS.txt +e3e9fd6250d4ead502a01ec81bb7901ad658d74845184a10b6f153276a1bd12f .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/content-manifest.v1.json +05ed45d295c3520fbbbc23419d6d57796127d71bd324c6ddb8f60191dc125f00 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/ARTIFACTS.sha256 +a55e59dd870659330add8f840272aa1e8829f8161779db3e9be9e6e014cf1ba4 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.cjs +970a7a4a322b8aa5a0ed434d68ef5ce41c5085c986007f15aadf34d69c0172aa .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.test.cjs +4f62630b651d6805ffe894e643159dfdef41176081878f303de12a64a56dca52 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verification-observations.v1.json +5d7a49dd716c25679e133c9aa2c0b59fd40525fb0540cc8b4556429df1d37fc6 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/maker-report.md +8777110d8681c895fd821664ca733d959e940353490ae9ed8bc0f0c1e27f8b3b .agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R3.red.json +d01e168c7eb75427c18d6b3f05c33af66b9d9f92342574007089494cb9f98c04 .agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R3.tdd.json +1811b1c83b3c948380b35ab5037a574067a7d2e60bcb27629269301c233a76d7 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/coverage-repeat.v1.json +ea5083eb4fb90c573fd645db53ed5d8bb99dcdf56905c6db6c84b8580951257d .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/verification-matrix.v1.json +d60d6dd98a0534b4b0295e68db7694b0b1e9ba0ec300982ff2f65fad0a364e3e .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/maker-summary.v1.json +b2d24a62e3ac60dd2bc94d6a018f0669ae20dc092b028414cb05083a1f54caa4 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/maker-report.md +1f985a357031dd4b7e101c1ab15ee71083d2fb340efeb29e8ddc3a305b4e599a .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/R3-SHA256SUMS.txt +0f5054c4e312b2159edd821700ebe665b8715dfdd3d3bc0ba7cc2c48c22ef7de .agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R4.red.json +bdc69720f8bab1c4f2f446202e21917c6db475824fcdac17ca2b0f668f052c90 .agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R4.tdd.json +7208503ef9dc002bf8bb659e44ffcba4ace76c224136e4e4b30b6f034633ba7b .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4/coverage-repeat.v1.json +4eb5199000a011e4e685900daa07d98773770d78753032db6b152147ac50aaf8 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4/verification-matrix.v1.json +afea6437d06ee2ff4d2eb1574464184c31e9c7441aa07f4a2ac6258b11039cfd .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4/maker-summary.v1.json +78500814f2918040c5c8c0e3a9f26cdc858bf33027a07e51e782e02ea88329f6 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4/maker-report.md +ee566e63906c1a4fe4ce665501c293f8d155935d7f65b24e5095477c3dd6c7ce .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4/R4-SHA256SUMS.txt +3fa766468f339d100a825879182cfeb9ffe3c1be59214dd06913124db6050e3f .agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R5.red.json +9c91222e6f1ffcb4fffeac777a8c98586ff9bae6e5e7579bec8ffbfabd2422db .agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R5.tdd.json +2da06a50cd5cd808f471aecd21450d6211f58d66330dbc1d85cb1889b6730913 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/coverage-capture.v1.json +b6211a4dc4ffea14b6a08fe07a1cf99516ee5bd066daa4ade0b6c241d955560b .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/coverage-repeat.v1.json +52a871ca44112dc2d4e7540f7e9548079a05619f967b4c4d9445b999d7a42daf .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/coverage-run-1.tap +d88556d5e8e437eba50505db6ac200e52910353ced62ad4eafbf6195147387a5 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/coverage-run-2.tap +1450b253c9058d5bc36886a4c5d6d6969c29dbc5e85efb06b506bb6c20a33fea .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/maker-report.md +77ae62452d6e02f2164a9c0471700aac13b3c3a1a200e0f45c4ca13f4daf6cec .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/maker-summary.v1.json +04010949acbef7a0427751be7c96aedcb4e6aa2e0d76c22c662e55693dae5082 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/run-coverage-capture-verifier.cmd +f01b0b254c054297aa2452177a0a137f9ecc430957daf986054a0087f4ff34c5 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/verification-matrix.v1.json +55aa4498ca2247ce4fbe1ed660966a907358b6d842af1bd9e88b3dba9bbb0a48 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/verify-coverage-capture.cjs diff --git a/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/coverage-capture.v1.json b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/coverage-capture.v1.json new file mode 100644 index 00000000..0254bc04 --- /dev/null +++ b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/coverage-capture.v1.json @@ -0,0 +1,33 @@ +{ + "schema_version": 1, + "slice": "DB-EMBEDDING-EVIDENCE-TRANSPORT-R5", + "materialization": "fresh-core-autocrlf-false-lf", + "base_commit": "369951b61ee07cb0c405558e0f677cd1c9e90362", + "core_autocrlf": "false", + "tracked_eol": "2/2 i/lf w/lf", + "line_endings": "lf-only", + "files": [ + { + "role": "verifier", + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.cjs", + "git_blob_oid": "75bec9c41eb5abc435f13d90848074f6608f7fce", + "git_blob_sha256": "a55e59dd870659330add8f840272aa1e8829f8161779db3e9be9e6e014cf1ba4", + "filesystem_sha256": "a55e59dd870659330add8f840272aa1e8829f8161779db3e9be9e6e014cf1ba4", + "byte_length": 25465, + "crlf_pairs": 0, + "lone_lf": 718, + "bare_carriage_returns": 0 + }, + { + "role": "test_harness", + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.test.cjs", + "git_blob_oid": "8e814737c8d5f4437aeb2a97dc52220e115cba0b", + "git_blob_sha256": "970a7a4a322b8aa5a0ed434d68ef5ce41c5085c986007f15aadf34d69c0172aa", + "filesystem_sha256": "970a7a4a322b8aa5a0ed434d68ef5ce41c5085c986007f15aadf34d69c0172aa", + "byte_length": 20692, + "crlf_pairs": 0, + "lone_lf": 634, + "bare_carriage_returns": 0 + } + ] +} diff --git a/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/coverage-repeat.v1.json b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/coverage-repeat.v1.json new file mode 100644 index 00000000..c3f53c54 --- /dev/null +++ b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/coverage-repeat.v1.json @@ -0,0 +1,50 @@ +{ + "schema_version": 1, + "slice": "DB-EMBEDDING-EVIDENCE-TRANSPORT-R5", + "node_version": "v24.2.0", + "command": "node.exe --test --test-concurrency=1 --experimental-test-coverage .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.test.cjs", + "capture_manifest_path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/coverage-capture.v1.json", + "capture_manifest_sha256": "2da06a50cd5cd808f471aecd21450d6211f58d66330dbc1d85cb1889b6730913", + "transcript_representation": "canonical-lf-tap-trim-trailing-table-padding", + "transcripts": [ + { + "run": 1, + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/coverage-run-1.tap", + "sha256": "52a871ca44112dc2d4e7540f7e9548079a05619f967b4c4d9445b999d7a42daf" + }, + { + "run": 2, + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/coverage-run-2.tap", + "sha256": "d88556d5e8e437eba50505db6ac200e52910353ced62ad4eafbf6195147387a5" + } + ], + "runs": [ + { + "run": 1, + "exit_code": 0, + "tests": 24, + "passed": 24, + "failed": 0, + "aggregate": { "line_percent": 89.28, "branch_percent": 75.30, "functions_percent": 95.59 }, + "verifier": { "line_percent": 80.08, "branch_percent": 55.91, "functions_percent": 81.82 }, + "test_harness": { "line_percent": 99.68, "branch_percent": 95.16, "functions_percent": 100.00 } + }, + { + "run": 2, + "exit_code": 0, + "tests": 24, + "passed": 24, + "failed": 0, + "aggregate": { "line_percent": 89.28, "branch_percent": 75.30, "functions_percent": 95.59 }, + "verifier": { "line_percent": 80.08, "branch_percent": 55.91, "functions_percent": 81.82 }, + "test_harness": { "line_percent": 99.68, "branch_percent": 95.16, "functions_percent": 100.00 } + } + ], + "reproducible": true, + "threshold": { + "percent": 80, + "basis": "aggregate line coverage", + "observed_percent": 89.28, + "status": "PASS" + } +} diff --git a/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/coverage-run-1.tap b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/coverage-run-1.tap new file mode 100644 index 00000000..5de6ac35 --- /dev/null +++ b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/coverage-run-1.tap @@ -0,0 +1,50 @@ +✔ evidence manifests reject incomplete sets and undeclared or mixed coverage capture (1881.253ms) +✔ artifact manifest rejects a missing required entry (240.6627ms) +✔ artifact manifest rejects an extra entry (253.9315ms) +✔ artifact manifest rejects a duplicate entry (244.4152ms) +✔ artifact manifest rejects dot-segment traversal outside the evidence namespace (256.764ms) +✔ artifact manifest rejects a non-canonical dot-segment alias (239.2076ms) +▶ artifact manifest rejects absolute and backslash-separated paths + ✔ absolute path (234.95ms) + ✔ backslash-separated path (238.7502ms) +✔ artifact manifest rejects absolute and backslash-separated paths (474.1093ms) +▶ contract rejects unsupported checkout-equivalence policy values + ✔ bare_cr (197.1022ms) + ✔ transform (185.8811ms) + ✔ required_result (206.0154ms) +✔ contract rejects unsupported checkout-equivalence policy values (589.4272ms) +▶ contract rejects unknown schema keys + ✔ top-level (192.365ms) + ✔ representation (219.8375ms) + ✔ checkout-equivalence (177.5542ms) + ✔ entry (180.9451ms) +✔ contract rejects unknown schema keys (771.1816ms) +✔ contract rejects deleting one required source when the legacy manifest agrees (186.7732ms) +✔ contract rejects a valid go.mod substitution that preserves cardinality (292.7169ms) +✔ contract rejects rebinding source commit and legacy metadata to an ancestor (187.7705ms) +✔ contract rejects an invalid raw source path before source access (182.7753ms) +✔ contract rejects null representation with structured FAIL before actual source access (194.6107ms) +✔ contract rejects a null entry with structured FAIL before actual source access (204.4823ms) +ℹ tests 24 +ℹ suites 0 +ℹ pass 24 +ℹ fail 0 +ℹ cancelled 0 +ℹ skipped 0 +ℹ todo 0 +ℹ duration_ms 6354.4069 +ℹ start of coverage report +ℹ ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +ℹ file | line % | branch % | funcs % | uncovered lines +ℹ ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +ℹ .agent | | | | +ℹ reports | | | | +ℹ evidence | | | | +ℹ production-ready | | | | +ℹ db-embedding-stats-evidence-transport | | | | +ℹ verify-manifest.cjs | 80.08 | 55.91 | 81.82 | 84-86 97-98 100-104 121-129 150 163-164 169-170 174-175 203-204 217-219 266-267 273-274 276-277 287-288 319-321 350-351 353-354 356-357 361-362 396-397 408-409 424-425 427-428 430-431 433-434 436-437 470-478 561-562 564-565 573-574 576-577 579-580 591-592 611-648 656-657 669-675 698-705 716-718 +ℹ verify-manifest.test.cjs | 99.68 | 95.16 | 100.00 | 266-267 +ℹ ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +ℹ all files | 89.28 | 75.30 | 95.59 | +ℹ ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +ℹ end of coverage report diff --git a/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/coverage-run-2.tap b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/coverage-run-2.tap new file mode 100644 index 00000000..5bd35532 --- /dev/null +++ b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/coverage-run-2.tap @@ -0,0 +1,50 @@ +✔ evidence manifests reject incomplete sets and undeclared or mixed coverage capture (1835.0842ms) +✔ artifact manifest rejects a missing required entry (218.5669ms) +✔ artifact manifest rejects an extra entry (231.9993ms) +✔ artifact manifest rejects a duplicate entry (224.1648ms) +✔ artifact manifest rejects dot-segment traversal outside the evidence namespace (225.4047ms) +✔ artifact manifest rejects a non-canonical dot-segment alias (228.5756ms) +▶ artifact manifest rejects absolute and backslash-separated paths + ✔ absolute path (222.7844ms) + ✔ backslash-separated path (222.3721ms) +✔ artifact manifest rejects absolute and backslash-separated paths (445.51ms) +▶ contract rejects unsupported checkout-equivalence policy values + ✔ bare_cr (240.1264ms) + ✔ transform (204.2461ms) + ✔ required_result (241.3657ms) +✔ contract rejects unsupported checkout-equivalence policy values (686.0509ms) +▶ contract rejects unknown schema keys + ✔ top-level (219.2129ms) + ✔ representation (207.1767ms) + ✔ checkout-equivalence (189.3415ms) + ✔ entry (205.2447ms) +✔ contract rejects unknown schema keys (821.3554ms) +✔ contract rejects deleting one required source when the legacy manifest agrees (245.3686ms) +✔ contract rejects a valid go.mod substitution that preserves cardinality (368.3836ms) +✔ contract rejects rebinding source commit and legacy metadata to an ancestor (196.1688ms) +✔ contract rejects an invalid raw source path before source access (214.4525ms) +✔ contract rejects null representation with structured FAIL before actual source access (209.8751ms) +✔ contract rejects a null entry with structured FAIL before actual source access (206.5256ms) +ℹ tests 24 +ℹ suites 0 +ℹ pass 24 +ℹ fail 0 +ℹ cancelled 0 +ℹ skipped 0 +ℹ todo 0 +ℹ duration_ms 6495.7296 +ℹ start of coverage report +ℹ ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +ℹ file | line % | branch % | funcs % | uncovered lines +ℹ ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +ℹ .agent | | | | +ℹ reports | | | | +ℹ evidence | | | | +ℹ production-ready | | | | +ℹ db-embedding-stats-evidence-transport | | | | +ℹ verify-manifest.cjs | 80.08 | 55.91 | 81.82 | 84-86 97-98 100-104 121-129 150 163-164 169-170 174-175 203-204 217-219 266-267 273-274 276-277 287-288 319-321 350-351 353-354 356-357 361-362 396-397 408-409 424-425 427-428 430-431 433-434 436-437 470-478 561-562 564-565 573-574 576-577 579-580 591-592 611-648 656-657 669-675 698-705 716-718 +ℹ verify-manifest.test.cjs | 99.68 | 95.16 | 100.00 | 266-267 +ℹ ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +ℹ all files | 89.28 | 75.30 | 95.59 | +ℹ ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +ℹ end of coverage report diff --git a/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/maker-report.md b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/maker-report.md new file mode 100644 index 00000000..294d0373 --- /dev/null +++ b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/maker-report.md @@ -0,0 +1,51 @@ +# DB-EMBEDDING-EVIDENCE-TRANSPORT R5 maker summary + +R5 closes checker finding ET-R4-001 without changing product code. The covered +R4 verifier remains exact blob `75bec9c41eb5abc435f13d90848074f6608f7fce`. +The final test blob is `8e814737c8d5f4437aeb2a97dc52220e115cba0b`. +Both are bound to LF-only Git-index and filesystem hashes by +`coverage-capture.v1.json`. + +The permanent 24-case suite rejects both an undeclared capture and a real mixed +EOL mutation. An evidence-side verifier, launched outside the Node coverage +environment, parses two committed canonical-LF TAP transcripts and compares +their hashes and metrics exactly with `coverage-repeat.v1.json`. Only the +coverage table's non-semantic trailing padding is trimmed. + +Authoritative repeated coverage is aggregate `89.28 / 75.30 / 95.59`, verifier +`80.08 / 55.91 / 81.82`, and harness `99.68 / 95.16 / 100.00`. Both runs are +`24/24`, and the aggregate line floor passes at `89.28% >= 80%`. + +All inherited fail-closed, Prove-It, Windows/fresh-LF, checksum, product-parity, +and residue rails pass. Status: **READY_FOR_FRESH_CHECKER**. + +## Exact changed-path inventory (28 paths) + +1. `.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/R3-SHA256SUMS.txt` +2. `.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/coverage-repeat.v1.json` +3. `.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/maker-report.md` +4. `.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/maker-summary.v1.json` +5. `.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/verification-matrix.v1.json` +6. `.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4/R4-SHA256SUMS.txt` +7. `.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4/coverage-repeat.v1.json` +8. `.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4/maker-report.md` +9. `.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4/maker-summary.v1.json` +10. `.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4/verification-matrix.v1.json` +11. `.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/R5-SHA256SUMS.txt` +12. `.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/coverage-capture.v1.json` +13. `.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/coverage-repeat.v1.json` +14. `.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/coverage-run-1.tap` +15. `.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/coverage-run-2.tap` +16. `.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/maker-report.md` +17. `.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/maker-summary.v1.json` +18. `.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/run-coverage-capture-verifier.cmd` +19. `.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/verification-matrix.v1.json` +20. `.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/verify-coverage-capture.cjs` +21. `.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/ARTIFACTS.sha256` +22. `.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/maker-report.md` +23. `.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verification-observations.v1.json` +24. `.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.test.cjs` +25. `.agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R3.tdd.json` +26. `.agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R4.tdd.json` +27. `.agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R5.red.json` +28. `.agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R5.tdd.json` diff --git a/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/maker-summary.v1.json b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/maker-summary.v1.json new file mode 100644 index 00000000..ae17cd0e --- /dev/null +++ b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/maker-summary.v1.json @@ -0,0 +1,74 @@ +{ + "schema_version": 1, + "slice": "DB-EMBEDDING-EVIDENCE-TRANSPORT-R5", + "role": "maker", + "status": "READY_FOR_FRESH_CHECKER", + "base": "369951b61ee07cb0c405558e0f677cd1c9e90362", + "r4_checker_commit_is_ancestor": false, + "accepted_product_source": "38d6a4fb7ff5f5ae3b6c0066c0a1b806421137df", + "closed_finding": "ET-R4-001", + "repairs": [ + "preserved covered R4 verifier exact blob and LF bytes", + "bound final test harness to exact Git-index and filesystem LF bytes", + "added permanent undeclared-capture and real mixed-EOL rejection", + "moved representation and transcript parsing outside the coverage target", + "stored and hashed two canonical-LF Node v24.2.0 TAP transcripts with only trailing table padding trimmed", + "removed R3/R4 superseded numeric coverage claims" + ], + "coverage": { + "materialization": "fresh-core-autocrlf-false-lf", + "metrics_source": "parsed canonical-LF TAP transcripts", + "repeat_count": 2, + "metrics_identical": true, + "aggregate": { "line_percent": 89.28, "branch_percent": 75.30, "functions_percent": 95.59 }, + "verifier": { "line_percent": 80.08, "branch_percent": 55.91, "functions_percent": 81.82 }, + "test_harness": { "line_percent": 99.68, "branch_percent": 95.16, "functions_percent": 100.00 }, + "threshold_basis": "aggregate line coverage", + "threshold_percent": 80, + "status": "PASS" + }, + "rails": { + "exact_base_red": "22 pass / 2 fail", + "r5_red": "23 pass / 1 fail", + "green_and_restore": "24/24 pass", + "top_level_attacks": "15/15 pass", + "prove_it": "schema 15 failed; artifact 9 failed; capture verifier 1 failed", + "windows_source_artifact_parity": "PASS", + "fresh_lf_source_artifact_parity": "PASS", + "product_source_test_delta": 0, + "checksum_layers": "5/5 + 13/13 + 20/20 + 32/32", + "residue": 0 + }, + "changed_path_count": 28, + "changed_paths": [ + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/R3-SHA256SUMS.txt", + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/coverage-repeat.v1.json", + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/maker-report.md", + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/maker-summary.v1.json", + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/verification-matrix.v1.json", + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4/R4-SHA256SUMS.txt", + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4/coverage-repeat.v1.json", + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4/maker-report.md", + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4/maker-summary.v1.json", + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4/verification-matrix.v1.json", + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/R5-SHA256SUMS.txt", + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/coverage-capture.v1.json", + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/coverage-repeat.v1.json", + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/coverage-run-1.tap", + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/coverage-run-2.tap", + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/maker-report.md", + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/maker-summary.v1.json", + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/run-coverage-capture-verifier.cmd", + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/verification-matrix.v1.json", + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/verify-coverage-capture.cjs", + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/ARTIFACTS.sha256", + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/maker-report.md", + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verification-observations.v1.json", + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.test.cjs", + ".agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R3.tdd.json", + ".agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R4.tdd.json", + ".agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R5.red.json", + ".agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R5.tdd.json" + ], + "next_action": "Fresh independent checker; no maker self-acceptance." +} diff --git a/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/run-coverage-capture-verifier.cmd b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/run-coverage-capture-verifier.cmd new file mode 100644 index 00000000..4a2602b9 --- /dev/null +++ b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/run-coverage-capture-verifier.cmd @@ -0,0 +1,4 @@ +@echo off +set "NODE_V8_COVERAGE=" +set "NODE_TEST_CONTEXT=" +node.exe "%~dp0verify-coverage-capture.cjs" %* diff --git a/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/verification-matrix.v1.json b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/verification-matrix.v1.json new file mode 100644 index 00000000..cfd22279 --- /dev/null +++ b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/verification-matrix.v1.json @@ -0,0 +1,27 @@ +{ + "schema_version": 1, + "slice": "DB-EMBEDDING-EVIDENCE-TRANSPORT-R5", + "base": "369951b61ee07cb0c405558e0f677cd1c9e90362", + "accepted_product_source": "38d6a4fb7ff5f5ae3b6c0066c0a1b806421137df", + "rails": { + "r4_verifier_preserved": "75bec9c41eb5abc435f13d90848074f6608f7fce PASS", + "capture_materialization": "core.autocrlf=false; 2/2 i/lf w/lf; LF-only PASS", + "undeclared_capture_rejection": "PASS", + "mixed_eol_capture_rejection": "PASS", + "transcript_hashes": "2/2 PASS", + "transcript_metrics_parse": "2/2 exact PASS", + "coverage_repeat": "24/24 twice; metrics identical PASS", + "coverage_floor": "89.28 >= 80 PASS", + "exact_base_red": "22/2 exit 1 PASS", + "r5_red": "23/1 exit 1 PASS", + "green": "24/24 exit 0 PASS", + "attacks": "15/15 PASS", + "null_fail_closed": "structured FAIL; empty stderr; reported/preload source access 0 PASS", + "prove_it": "15 + 9 + 1 failures PASS", + "windows": "raw 0/7; Git 7/7; checkout-LF 7/7; artifacts 5/5 PASS", + "fresh_lf": "raw/Git/checkout-LF 7/7; artifacts 5/5; suite 24/24 PASS", + "checksums": "5/5 + 13/13 + 20/20 + 32/32 PASS", + "product_blobs": "7/7 exact accepted source PASS", + "residue": "0 PASS" + } +} diff --git a/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/verify-coverage-capture.cjs b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/verify-coverage-capture.cjs new file mode 100644 index 00000000..b4eff200 --- /dev/null +++ b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/verify-coverage-capture.cjs @@ -0,0 +1,405 @@ +#!/usr/bin/env node +'use strict'; + +const crypto = require('node:crypto'); +const fs = require('node:fs'); +const path = require('node:path'); +const { spawnSync } = require('node:child_process'); + +const allowedModes = new Set(['materialization', 'coverage-evidence']); +const modeArgument = process.argv.find((argument) => argument.startsWith('--mode=')); +const mode = modeArgument ? modeArgument.slice('--mode='.length) : 'coverage-evidence'; +const SLICE = 'DB-EMBEDDING-EVIDENCE-TRANSPORT-R5'; +const BASE_COMMIT = '369951b61ee07cb0c405558e0f677cd1c9e90362'; +const COVERAGE_COMMAND = + 'node.exe --test --test-concurrency=1 --experimental-test-coverage ' + + '.agent/reports/evidence/production-ready/' + + 'db-embedding-stats-evidence-transport/verify-manifest.test.cjs'; +const EVIDENCE_DIRECTORY = + '.agent/reports/evidence/production-ready/' + + 'db-embedding-stats-evidence-transport-r5'; +const CAPTURE_PATH = `${EVIDENCE_DIRECTORY}/coverage-capture.v1.json`; +const COVERAGE_PATH = `${EVIDENCE_DIRECTORY}/coverage-repeat.v1.json`; +const REQUIRED_FILES = Object.freeze([ + Object.freeze({ + role: 'verifier', + path: + '.agent/reports/evidence/production-ready/' + + 'db-embedding-stats-evidence-transport/verify-manifest.cjs', + }), + Object.freeze({ + role: 'test_harness', + path: + '.agent/reports/evidence/production-ready/' + + 'db-embedding-stats-evidence-transport/verify-manifest.test.cjs', + }), +]); +const CAPTURE_KEYS = Object.freeze([ + 'schema_version', + 'slice', + 'materialization', + 'base_commit', + 'core_autocrlf', + 'tracked_eol', + 'line_endings', + 'files', +]); +const FILE_KEYS = Object.freeze([ + 'role', + 'path', + 'git_blob_oid', + 'git_blob_sha256', + 'filesystem_sha256', + 'byte_length', + 'crlf_pairs', + 'lone_lf', + 'bare_carriage_returns', +]); +const COVERAGE_KEYS = Object.freeze([ + 'schema_version', + 'slice', + 'node_version', + 'command', + 'capture_manifest_path', + 'capture_manifest_sha256', + 'transcript_representation', + 'transcripts', + 'runs', + 'reproducible', + 'threshold', +]); +const TRANSCRIPT_KEYS = Object.freeze(['run', 'path', 'sha256']); +const RUN_KEYS = Object.freeze([ + 'run', + 'exit_code', + 'tests', + 'passed', + 'failed', + 'aggregate', + 'verifier', + 'test_harness', +]); +const METRIC_KEYS = Object.freeze(['line_percent', 'branch_percent', 'functions_percent']); +const THRESHOLD_KEYS = Object.freeze(['percent', 'basis', 'observed_percent', 'status']); + +if (!allowedModes.has(mode)) { + process.stderr.write(`unsupported mode: ${mode}\n`); + process.exit(2); +} + +function runGit(args, options = {}) { + const result = spawnSync('git', args, { + cwd: options.cwd, + encoding: options.encoding === undefined ? null : options.encoding, + maxBuffer: 64 * 1024 * 1024, + windowsHide: true, + }); + if (result.error) throw result.error; + if (result.status !== 0) { + const stderr = Buffer.isBuffer(result.stderr) + ? result.stderr.toString('utf8').trim() + : String(result.stderr || '').trim(); + throw new Error(`git ${args.join(' ')} failed (${result.status}): ${stderr}`); + } + return result.stdout; +} + +function sha256(bytes) { + return crypto.createHash('sha256').update(bytes).digest('hex'); +} + +function isPlainObject(value) { + return value !== null && typeof value === 'object' && !Array.isArray(value); +} + +function validateExactKeys(value, requiredKeys, label, errors) { + if (!isPlainObject(value)) { + errors.push(`${label} must be an object`); + return false; + } + const required = new Set(requiredKeys); + for (const key of requiredKeys) { + if (!Object.hasOwn(value, key)) errors.push(`${label} is missing required key: ${key}`); + } + for (const key of Object.keys(value)) { + if (!required.has(key)) errors.push(`${label} contains unknown key: ${key}`); + } + return true; +} + +function analyzeLineEndings(bytes) { + let crlfPairs = 0; + let loneLf = 0; + let bareCarriageReturns = 0; + for (let index = 0; index < bytes.length; index += 1) { + if (bytes[index] === 13) { + if (bytes[index + 1] === 10) { + crlfPairs += 1; + index += 1; + } else { + bareCarriageReturns += 1; + } + } else if (bytes[index] === 10) { + loneLf += 1; + } + } + return { crlfPairs, loneLf, bareCarriageReturns }; +} + +function readJson(repoRoot, relativePath) { + return JSON.parse(fs.readFileSync(path.join(repoRoot, ...relativePath.split('/')), 'utf8')); +} + +function getCoreAutocrlf(repoRoot) { + const result = spawnSync('git', ['config', '--get', 'core.autocrlf'], { + cwd: repoRoot, + encoding: 'utf8', + windowsHide: true, + }); + if (result.status === 1) return null; + if (result.status !== 0) throw new Error('git config --get core.autocrlf failed'); + return result.stdout.trim(); +} + +function verifyMaterialization(repoRoot, errors) { + const capture = readJson(repoRoot, CAPTURE_PATH); + const captureIsObject = validateExactKeys(capture, CAPTURE_KEYS, 'capture', errors); + if (captureIsObject) { + if (capture.schema_version !== 1) errors.push('capture.schema_version must be 1'); + if (capture.slice !== SLICE) errors.push(`capture.slice must be ${SLICE}`); + if (capture.materialization !== 'fresh-core-autocrlf-false-lf') { + errors.push('capture.materialization must be fresh-core-autocrlf-false-lf'); + } + if (capture.base_commit !== BASE_COMMIT) errors.push('capture.base_commit must equal R4 target'); + if (capture.core_autocrlf !== 'false') errors.push('capture.core_autocrlf must be false'); + if (capture.tracked_eol !== '2/2 i/lf w/lf') { + errors.push('capture.tracked_eol must be 2/2 i/lf w/lf'); + } + if (capture.line_endings !== 'lf-only') errors.push('capture.line_endings must be lf-only'); + } + if (getCoreAutocrlf(repoRoot) !== 'false') { + errors.push('executing checkout core.autocrlf must be false'); + } + + const declaredFiles = Array.isArray(capture.files) ? capture.files : []; + if (!Array.isArray(capture.files)) errors.push('capture.files must be an array'); + if (declaredFiles.length !== REQUIRED_FILES.length) { + errors.push(`capture.files must contain exactly ${REQUIRED_FILES.length} entries`); + } + + return REQUIRED_FILES.map((required, index) => { + const entry = declaredFiles[index]; + const label = `capture.files[${index}]`; + if (!validateExactKeys(entry, FILE_KEYS, label, errors)) { + return { role: required.role, path: required.path, match: false }; + } + if (entry.role !== required.role) errors.push(`${label}.role must be ${required.role}`); + if (entry.path !== required.path) errors.push(`${label}.path must be ${required.path}`); + + const indexBlobOid = runGit(['rev-parse', `:${required.path}`], { + cwd: repoRoot, + encoding: 'utf8', + }).trim(); + const indexBlob = runGit(['cat-file', 'blob', indexBlobOid], { cwd: repoRoot }); + const checkoutBytes = fs.readFileSync(path.join(repoRoot, ...required.path.split('/'))); + const trackedEol = runGit(['ls-files', '--eol', '--', required.path], { + cwd: repoRoot, + encoding: 'utf8', + }).trim(); + const lineEndings = analyzeLineEndings(checkoutBytes); + const gitBlobSha256 = sha256(indexBlob); + const filesystemSha256 = sha256(checkoutBytes); + const lfExact = + lineEndings.crlfPairs === 0 && + lineEndings.bareCarriageReturns === 0 && + lineEndings.loneLf > 0 && + checkoutBytes.equals(indexBlob) && + /^i\/lf\s+w\/lf\s+/.test(trackedEol); + if (!lfExact) { + errors.push( + `coverage file must be LF-only and byte-identical to the Git index: ${required.path}`, + ); + } + const declaredMatch = + entry.git_blob_oid === indexBlobOid && + entry.git_blob_sha256 === gitBlobSha256 && + entry.filesystem_sha256 === filesystemSha256 && + entry.byte_length === checkoutBytes.length && + entry.crlf_pairs === lineEndings.crlfPairs && + entry.lone_lf === lineEndings.loneLf && + entry.bare_carriage_returns === lineEndings.bareCarriageReturns; + if (!declaredMatch) { + errors.push(`coverage file declaration disagrees with actual bytes: ${required.path}`); + } + return { + role: required.role, + path: required.path, + git_blob_oid: indexBlobOid, + git_blob_sha256: gitBlobSha256, + filesystem_sha256: filesystemSha256, + byte_length: checkoutBytes.length, + crlf_pairs: lineEndings.crlfPairs, + lone_lf: lineEndings.loneLf, + bare_carriage_returns: lineEndings.bareCarriageReturns, + tracked_eol: trackedEol, + match: lfExact && declaredMatch, + }; + }); +} + +function parseMetricLine(text, filename) { + const escaped = filename.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); + const match = text.match( + new RegExp(`${escaped}\\s+\\|\\s+([0-9.]+)\\s+\\|\\s+([0-9.]+)\\s+\\|\\s+([0-9.]+)\\s+\\|`), + ); + if (!match) throw new Error(`coverage transcript is missing metric row: ${filename}`); + return { + line_percent: Number(match[1]), + branch_percent: Number(match[2]), + functions_percent: Number(match[3]), + }; +} + +function parseCoverageTranscript(bytes) { + const text = bytes.toString('utf8'); + const count = (label) => { + const match = text.match(new RegExp(`(?:ℹ|#) ${label} ([0-9]+)`)); + if (!match) throw new Error(`coverage transcript is missing ${label} count`); + return Number(match[1]); + }; + return { + exit_code: 0, + tests: count('tests'), + passed: count('pass'), + failed: count('fail'), + aggregate: parseMetricLine(text, 'all files'), + verifier: parseMetricLine(text, 'verify-manifest.cjs'), + test_harness: parseMetricLine(text, 'verify-manifest.test.cjs'), + }; +} + +function validateMetricObject(value, label, errors) { + if (!validateExactKeys(value, METRIC_KEYS, label, errors)) return; + for (const key of METRIC_KEYS) { + if (typeof value[key] !== 'number' || !Number.isFinite(value[key])) { + errors.push(`${label}.${key} must be a finite number`); + } + } +} + +function verifyCoverageEvidence(repoRoot, errors) { + const coverage = readJson(repoRoot, COVERAGE_PATH); + const coverageIsObject = validateExactKeys(coverage, COVERAGE_KEYS, 'coverage', errors); + if (coverageIsObject) { + if (coverage.schema_version !== 1) errors.push('coverage.schema_version must be 1'); + if (coverage.slice !== SLICE) errors.push(`coverage.slice must be ${SLICE}`); + if (coverage.node_version !== process.version) { + errors.push(`coverage.node_version must equal executing Node ${process.version}`); + } + if (coverage.command !== COVERAGE_COMMAND) errors.push('coverage.command is not canonical'); + if (coverage.capture_manifest_path !== CAPTURE_PATH) { + errors.push(`coverage.capture_manifest_path must be ${CAPTURE_PATH}`); + } + if (coverage.transcript_representation !== 'canonical-lf-tap-trim-trailing-table-padding') { + errors.push('coverage.transcript_representation is not canonical'); + } + } + const captureBytes = fs.readFileSync(path.join(repoRoot, ...CAPTURE_PATH.split('/'))); + if (coverage.capture_manifest_sha256 !== sha256(captureBytes)) { + errors.push('coverage.capture_manifest_sha256 disagrees with capture manifest bytes'); + } + + const transcripts = Array.isArray(coverage.transcripts) ? coverage.transcripts : []; + const declaredRuns = Array.isArray(coverage.runs) ? coverage.runs : []; + if (transcripts.length !== 2) errors.push('coverage.transcripts must contain exactly two entries'); + if (declaredRuns.length !== 2) errors.push('coverage.runs must contain exactly two entries'); + const parsedRuns = transcripts.map((entry, index) => { + const label = `coverage.transcripts[${index}]`; + validateExactKeys(entry, TRANSCRIPT_KEYS, label, errors); + const expectedPath = `${EVIDENCE_DIRECTORY}/coverage-run-${index + 1}.tap`; + if (entry.run !== index + 1) errors.push(`${label}.run must be ${index + 1}`); + if (entry.path !== expectedPath) errors.push(`${label}.path must be ${expectedPath}`); + const bytes = fs.readFileSync(path.join(repoRoot, ...expectedPath.split('/'))); + if (entry.sha256 !== sha256(bytes)) errors.push(`${label}.sha256 disagrees with transcript`); + return { run: index + 1, ...parseCoverageTranscript(bytes) }; + }); + + declaredRuns.forEach((run, index) => { + const label = `coverage.runs[${index}]`; + if (!validateExactKeys(run, RUN_KEYS, label, errors)) return; + validateMetricObject(run.aggregate, `${label}.aggregate`, errors); + validateMetricObject(run.verifier, `${label}.verifier`, errors); + validateMetricObject(run.test_harness, `${label}.test_harness`, errors); + if (JSON.stringify(run) !== JSON.stringify(parsedRuns[index])) { + errors.push(`${label} disagrees with parsed canonical transcript`); + } + }); + if (parsedRuns.some((run) => run.tests !== 24 || run.passed !== 24 || run.failed !== 0)) { + errors.push('coverage transcripts must record 24/24 passing tests'); + } + if (parsedRuns.length === 2) { + const firstMetrics = JSON.stringify({ + aggregate: parsedRuns[0].aggregate, + verifier: parsedRuns[0].verifier, + test_harness: parsedRuns[0].test_harness, + }); + const secondMetrics = JSON.stringify({ + aggregate: parsedRuns[1].aggregate, + verifier: parsedRuns[1].verifier, + test_harness: parsedRuns[1].test_harness, + }); + if (firstMetrics !== secondMetrics) errors.push('coverage metrics must be identical across runs'); + } + if (coverage.reproducible !== true) errors.push('coverage.reproducible must be true'); + + const threshold = isPlainObject(coverage.threshold) ? coverage.threshold : {}; + validateExactKeys(threshold, THRESHOLD_KEYS, 'coverage.threshold', errors); + const observed = parsedRuns[0]?.aggregate?.line_percent; + if (threshold.percent !== 80) errors.push('coverage.threshold.percent must be 80'); + if (threshold.basis !== 'aggregate line coverage') { + errors.push('coverage.threshold.basis must be aggregate line coverage'); + } + if (threshold.observed_percent !== observed) { + errors.push('coverage.threshold.observed_percent must equal parsed aggregate line percent'); + } + if (typeof observed !== 'number' || observed < 80) { + errors.push('coverage aggregate line percent must be at least 80'); + } + if (threshold.status !== 'PASS') errors.push('coverage.threshold.status must be PASS'); + + return { coverage, parsed_runs: parsedRuns }; +} + +function main() { + const repoRoot = path.resolve( + runGit(['rev-parse', '--show-toplevel'], { encoding: 'utf8' }).trim(), + ); + const structuralErrors = []; + const entries = verifyMaterialization(repoRoot, structuralErrors); + const coverageResult = mode === 'coverage-evidence' + ? verifyCoverageEvidence(repoRoot, structuralErrors) + : null; + const matched = entries.filter((entry) => entry.match).length; + const status = structuralErrors.length === 0 && matched === entries.length ? 'PASS' : 'FAIL'; + const result = { + schema_version: 1, + slice: SLICE, + mode, + status, + representation: 'fresh-core-autocrlf-false-lf', + total: entries.length, + matched, + structural_errors: structuralErrors, + entries, + coverage: coverageResult, + }; + process.stdout.write(`${JSON.stringify(result, null, 2)}\n`); + if (status === 'FAIL') process.exit(1); +} + +try { + main(); +} catch (error) { + process.stderr.write(`${error.stack || error.message}\n`); + process.exit(1); +} diff --git a/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/ARTIFACTS.sha256 b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/ARTIFACTS.sha256 index f3a8f183..7fcdce22 100644 --- a/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/ARTIFACTS.sha256 +++ b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/ARTIFACTS.sha256 @@ -6,5 +6,5 @@ 5d932e6acf104bf9eff291409b50961007512e09e91d78401257a018fcb780f4 .agent/reports/evidence/production-ready/db-embedding-stats/SHA256SUMS.txt e3e9fd6250d4ead502a01ec81bb7901ad658d74845184a10b6f153276a1bd12f .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/content-manifest.v1.json a55e59dd870659330add8f840272aa1e8829f8161779db3e9be9e6e014cf1ba4 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.cjs -fd16ab3f6135a3af584a8f3589e9137c6bfcb62f474093492d15020db21ee3fc .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verification-observations.v1.json -cb73530f2c204f2c7e4110928971ffaac6c3cb172b59c72cf8047cecf610ab65 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/maker-report.md +4f62630b651d6805ffe894e643159dfdef41176081878f303de12a64a56dca52 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verification-observations.v1.json +5d7a49dd716c25679e133c9aa2c0b59fd40525fb0540cc8b4556429df1d37fc6 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/maker-report.md diff --git a/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/maker-report.md b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/maker-report.md index b99797bd..62f97a6f 100644 --- a/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/maker-report.md +++ b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/maker-report.md @@ -1,102 +1,93 @@ -# DB-EMBEDDING-EVIDENCE-TRANSPORT R4 maker report +# DB-EMBEDDING-EVIDENCE-TRANSPORT R5 maker report -Date: 2026-07-10 -Role: revision maker -Finish state: **READY_FOR_CHECK** +R5 starts from exact R4 target +`369951b61ee07cb0c405558e0f677cd1c9e90362`. The R4 checker commit +`24bf45cb773dfbe4e42d662b3c35bd0a65b51f45` is not an ancestor. Product, +source, and product-test blobs remain exact to accepted source +`38d6a4fb7ff5f5ae3b6c0066c0a1b806421137df` (`7/7`). -## Immutable boundary +## ET-R4-001 closure -- Exact base and future commit parent: - `d650df5c4271cdb50aa1f443d2f95b2f4b672541`. -- Accepted product source: - `38d6a4fb7ff5f5ae3b6c0066c0a1b806421137df`. -- Branch: `work/prc-db-embedding-evidence-transport-r4`. -- Worktree: - `D:/Dev/engram/.agent/worktrees/db-embedding-evidence-r4-maker`. -- Product/source/test blobs remain identical to the accepted source: `7/7`. -- The R3 checker commit is not an ancestor and is not included. +The covered R4 verifier is preserved exactly: -## Reproduced defects and repair +- Git blob OID: `75bec9c41eb5abc435f13d90848074f6608f7fce` +- LF-byte SHA-256: `a55e59dd870659330add8f840272aa1e8829f8161779db3e9be9e6e014cf1ba4` +- bytes / LF / CR: `25465 / 718 / 0` -Final test bytes over exact base reproduced `22 pass / 2 fail`, exit `1`: +The final R5 test harness is captured as: -1. `representation=null` escaped as raw `TypeError` while reading `kind`. -2. `entries[0]=null` escaped as raw `TypeError` while reading `path`. +- Git blob OID: `8e814737c8d5f4437aeb2a97dc52220e115cba0b` +- LF-byte SHA-256: `970a7a4a322b8aa5a0ed434d68ef5ce41c5085c986007f15aadf34d69c0172aa` +- bytes / LF / CR: `20692 / 634 / 0` -The production change is limited to safe shape consumption after schema -validation: entry comparison requires a plain object before dereference, and -representation reads use a validated safe object. Both cases now emit stable -structured `FAIL` JSON with their exact schema error, empty entries, and no raw -exception. +`coverage-capture.v1.json` binds both exact Git-index blobs to their filesystem +bytes and declares `core.autocrlf=false`, `2/2 i/lf w/lf`, and LF-only +materialization. `verify-coverage-capture.cjs` rejects missing/unknown capture +fields, mixed EOL, CRLF, bare CR, index/filesystem disagreement, wrong hashes, +and a coverage JSON that disagrees with either canonical transcript. The permanent +24-case suite now proves both undeclared capture and a real mixed-EOL mutation +fail closed. The R5 verifier is launched through a small environment-clearing +wrapper, so it is not included in the coverage target. -The permanent tests generate a preload observer that records real -`child_process.spawnSync` and `fs.readFileSync` calls. For both null cases: +## TDD and attack rails -- reported Git/source-file accesses: `0/0`; -- observed `git cat-file blob`/required-source-file reads: `0/0`. - -## Tests, attacks, and mutation proof - -Command: +- R5 RED over exact R4 target: `23 pass / 1 fail`, exit `1`; the new mode did + not exist. +- Historical exact-base RED over + `d650df5c4271cdb50aa1f443d2f95b2f4b672541` with the R4 final test blob: + `22 pass / 2 fail`, exit `1`. +- GREEN and post-restore: `24/24`, exit `0`. +- Permanent top-level attack cases: `15/15`. +- `representation=null` and `entries[0]=null`: structured `FAIL`, empty stderr, + empty entries, reported source access `0/0`, preload-observed Git/source-file + access `0/0`. +- Prove-It `validateContractSchema`: `9 pass / 15 fail`, exit `1`. +- Prove-It `verifyArtifactFiles`: `15 pass / 9 fail`, exit `1`. +- Prove-It R5 capture verifier forced-PASS sentinel: `23 pass / 1 fail`, exit + `1`; restored script passes syntax and evidence verification. -`node.exe --test --test-concurrency=1 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.test.cjs` +## Transcript-backed final LF coverage -- GREEN and post-restore: `24/24`, exit `0`. -- Exact-base RED: `22 pass / 2 fail`, exit `1`. -- Independent checker attack cases: `15/15` pass. -- `validateContractSchema` fail-open sentinel: `9 pass / 15 fail`, exit `1`. -- forced artifact-PASS sentinel: `15 pass / 9 fail`, exit `1`. -- verifier restored to SHA-256 - `525a9cd937e26fb7f38b8b51792f3af0e95eafdbdb2670fa7aee7a15fa914673`; - post-restore suite `24/24`. +Exact command, run twice after final staged covered bytes stopped changing: -## Reproducible coverage on final verifier/test content +```text +node.exe --test --test-concurrency=1 --experimental-test-coverage .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.test.cjs +``` -Both Node `v24.2.0` runs were identical: +Both runs are `24/24`, exit `0`, with identical metrics: -| Scope | Line | Branch | Functions | +| Scope | Lines | Branches | Functions | | --- | ---: | ---: | ---: | -| aggregate | `89.23%` | `76.61%` | `95.35%` | -| verifier | `80.92%` | `58.02%` | `81.82%` | -| test harness | `100.00%` | `97.44%` | `100.00%` | - -The hard threshold is aggregate line coverage: `89.23% >= 80%`, PASS. The -unreproduced historical coverage values were removed from every duplicate R3 -claim surface rather than retained as current evidence. - -## Representation rails - -Windows `core.autocrlf=true`, all seven source files `i/lf w/crlf`: - -| Mode | Exit | Status | Result | -| --- | ---: | --- | --- | -| `legacy-raw-audit` | 0 | `AMBIGUOUS_RAW_CHECKOUT_CONFIRMED` | raw `0/7`, Git `7/7`, LF `7/7` | -| `git-object` | 0 | `PASS` | `7/7` | -| `checkout-lf` | 0 | `PASS` | `7/7`, bare CR `0` | -| `artifact-files` | 0 | `PASS` | exact artifacts `5/5` | -| permanent suite | 0 | `PASS` | `24/24` | - -Fresh `core.autocrlf=false`, all seven source files `i/lf w/lf`: - -| Mode | Exit | Status | Result | -| --- | ---: | --- | --- | -| `legacy-raw-audit` | 0 | `RAW_CHECKOUT_HAPPENS_TO_MATCH` | raw/Git/LF `7/7` | -| `git-object` | 0 | `PASS` | `7/7` | -| `checkout-lf` | 0 | `PASS` | `7/7`, bare CR `0` | -| `artifact-files` | 0 | `PASS` | exact artifacts `5/5` | -| permanent suite | 0 | `PASS` | `24/24` | - -## Integrity and handoff - -- Artifact checksum set remains exactly five files and excludes itself. -- Compact R4 packet checksum excludes itself and covers the source manifest, - executable verifier/test, R4 TDD evidence, reports, and artifact manifest. -- Temporary RED, Prove-It, and LF worktrees are removed. -- Maker Node, matching PostgreSQL database, and matching PostgreSQL session - residue are zero. -- No merge, push, tag, release, root-report edit, or self-acceptance occurred. - -The final commit/tree/checksum identifiers are reported out-of-band after the -single commit to avoid self-reference. A fresh R4 checker must replay the null -attacks, exact-base RED, coverage, representation rails, artifact checksums, -and residue checks. +| aggregate | `89.28%` | `75.30%` | `95.59%` | +| verifier | `80.08%` | `55.91%` | `81.82%` | +| test harness | `99.68%` | `95.16%` | `100.00%` | + +The aggregate line floor is `89.28% >= 80%`, PASS. Canonical transcript SHA-256 +(LF TAP; only non-semantic coverage-table trailing padding trimmed): + +- run 1: `52a871ca44112dc2d4e7540f7e9548079a05619f967b4c4d9445b999d7a42daf` +- run 2: `d88556d5e8e437eba50505db6ac200e52910353ced62ad4eafbf6195147387a5` + +The evidence-side verifier parses the two canonical tables itself, verifies both +transcript hashes, and compares the parsed values exactly with +`coverage-repeat.v1.json`. No maker-only mixed materialization is accepted. + +## Representation, checksum, and cleanup rails + +- Fresh LF source modes: raw/Git/checkout-LF `7/7`, bare CR `0`. +- Windows CRLF source modes: raw `0/7`, Git `7/7`, checkout-LF `7/7`, bare CR + `0`. +- Canonical artifact mode: `5/5` in LF and Windows materializations. +- Layered checksum manifests exclude themselves and verify `5/5`, `13/13`, + `20/20`, and R5 `32/32` using canonical LF bytes. +- Temporary worktrees, task-owned Node processes, access-spy directories, + matching PostgreSQL databases, and matching PostgreSQL sessions: `0` at + handoff. + +## Handoff + +The maker commit is intentionally reported out-of-band after commit to avoid +self-reference. No merge, push, tag, primary-worktree edit, or integration edit +is part of this slice. A fresh checker must independently parse the transcripts, +recompute coverage, replay the mutations, verify all checksum layers, and audit +the exact evidence-only path inventory before acceptance. diff --git a/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verification-observations.v1.json b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verification-observations.v1.json index b3e277d5..8f9b7fbb 100644 --- a/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verification-observations.v1.json +++ b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verification-observations.v1.json @@ -1,89 +1,84 @@ { "schema_version": 1, - "slice": "DB-EMBEDDING-EVIDENCE-TRANSPORT-R4", + "slice": "DB-EMBEDDING-EVIDENCE-TRANSPORT-R5", "role": "revision-maker", - "base_commit": "d650df5c4271cdb50aa1f443d2f95b2f4b672541", + "base_commit": "369951b61ee07cb0c405558e0f677cd1c9e90362", + "r4_checker_commit_is_ancestor": false, "product_source_commit": "38d6a4fb7ff5f5ae3b6c0066c0a1b806421137df", - "raw_checkout_bytes_are_not_the_contract": true, "source_lock": { - "expected_source_commit": "38d6a4fb7ff5f5ae3b6c0066c0a1b806421137df", "required_cardinality": 7, "exact_required_set": true, "product_source_blobs_match": 7, "product_source_test_delta": 0 }, - "fail_closed_null_contracts": [ - { - "mutation": "representation=null", - "exit_code": 1, - "status": "FAIL", - "stable_error": "contract.representation must be an object", - "reported_source_accesses": { "git_objects": 0, "checkout_files": 0 }, - "preload_observed_source_accesses": { "git_cat_file": 0, "source_files": 0 }, - "entries": 0, - "stderr": "" - }, - { - "mutation": "entries[0]=null", - "exit_code": 1, - "status": "FAIL", - "stable_error": "contract.entries[0] must be an object", - "reported_source_accesses": { "git_objects": 0, "checkout_files": 0 }, - "preload_observed_source_accesses": { "git_cat_file": 0, "source_files": 0 }, - "entries": 0, - "stderr": "" - } - ], + "coverage_capture": { + "materialization": "fresh-core-autocrlf-false-lf", + "tracked_eol": "2/2 i/lf w/lf", + "line_endings": "lf-only", + "verifier_git_blob_oid": "75bec9c41eb5abc435f13d90848074f6608f7fce", + "verifier_sha256": "a55e59dd870659330add8f840272aa1e8829f8161779db3e9be9e6e014cf1ba4", + "test_harness_git_blob_oid": "8e814737c8d5f4437aeb2a97dc52220e115cba0b", + "test_harness_sha256": "970a7a4a322b8aa5a0ed434d68ef5ce41c5085c986007f15aadf34d69c0172aa", + "undeclared_capture_rejected": true, + "mixed_eol_capture_rejected": true, + "transcript_parser_status": "PASS" + }, "tdd": { + "r5_red": { "exit_code": 1, "tests": 24, "passed": 23, "failed": 1 }, "exact_base_red": { "exit_code": 1, "tests": 24, "passed": 22, "failed": 2 }, "green": { "exit_code": 0, "tests": 24, "passed": 24, "failed": 0 }, "independent_attack_cases": { "passed": 15, "failed": 0, "total": 15 }, "prove_it": [ - { "sentinel_function": "validateContractSchema", "exit_code": 1, "passed_tests": 9, "failed_tests": 15 }, - { "sentinel_function": "verifyArtifactFiles", "exit_code": 1, "passed_tests": 15, "failed_tests": 9 } + { "sentinel": "discard schema structural errors", "passed": 9, "failed": 15, "exit_code": 1 }, + { "sentinel": "force artifact status PASS", "passed": 15, "failed": 9, "exit_code": 1 }, + { "sentinel": "force R5 capture verifier status PASS", "passed": 23, "failed": 1, "exit_code": 1 } ], - "post_restore": { - "exit_code": 0, - "tests": 24, - "passed": 24, - "failed": 0, - "verifier_byte_identical": true - }, - "coverage": { - "node_version": "v24.2.0", - "repeat_count": 2, - "reproducible": true, - "aggregate": { "line_percent": 89.23, "branch_percent": 76.61, "functions_percent": 95.35 }, - "verifier": { "line_percent": 80.92, "branch_percent": 58.02, "functions_percent": 81.82 }, - "test_harness": { "line_percent": 100.0, "branch_percent": 97.44, "functions_percent": 100.0 }, - "threshold_basis": "aggregate line coverage", - "threshold_percent": 80, - "status": "PASS" - } + "post_restore": { "exit_code": 0, "tests": 24, "passed": 24, "failed": 0 } + }, + "coverage": { + "node_version": "v24.2.0", + "repeat_count": 2, + "canonical_lf_transcripts_committed": true, + "transcript_representation": "canonical-lf-tap-trim-trailing-table-padding", + "transcript_hashes_verified": true, + "metrics_parsed_from_transcripts": true, + "metrics_identical": true, + "aggregate": { "line_percent": 89.28, "branch_percent": 75.30, "functions_percent": 95.59 }, + "verifier": { "line_percent": 80.08, "branch_percent": 55.91, "functions_percent": 81.82 }, + "test_harness": { "line_percent": 99.68, "branch_percent": 95.16, "functions_percent": 100.00 }, + "threshold_basis": "aggregate line coverage", + "threshold_percent": 80, + "status": "PASS" }, "observations": [ { "checkout": "windows-autocrlf-true", "tracked_eol": "7/7 i/lf w/crlf", - "legacy_raw_audit": { "exit_code": 0, "status": "AMBIGUOUS_RAW_CHECKOUT_CONFIRMED", "raw": 0, "git_object": 7, "checkout_lf": 7 }, - "git_object": { "exit_code": 0, "matched": 7, "total": 7 }, - "checkout_lf": { "exit_code": 0, "matched": 7, "total": 7, "bare_carriage_returns": 0 }, - "artifact_files": { "exit_code": 0, "matched": 5, "total": 5 }, - "permanent_suite": { "exit_code": 0, "passed": 24, "total": 24 } + "legacy_raw_audit": { "status": "AMBIGUOUS_RAW_CHECKOUT_CONFIRMED", "raw": 0, "git_object": 7, "checkout_lf": 7 }, + "git_object": { "matched": 7, "total": 7 }, + "checkout_lf": { "matched": 7, "total": 7, "bare_carriage_returns": 0 }, + "artifact_files": { "matched": 5, "total": 5 } }, { - "checkout": "lf-materialized", + "checkout": "fresh-core-autocrlf-false-lf", "tracked_eol": "7/7 i/lf w/lf", - "legacy_raw_audit": { "exit_code": 0, "status": "RAW_CHECKOUT_HAPPENS_TO_MATCH", "raw": 7, "git_object": 7, "checkout_lf": 7 }, - "git_object": { "exit_code": 0, "matched": 7, "total": 7 }, - "checkout_lf": { "exit_code": 0, "matched": 7, "total": 7, "bare_carriage_returns": 0 }, - "artifact_files": { "exit_code": 0, "matched": 5, "total": 5 }, - "permanent_suite": { "exit_code": 0, "passed": 24, "total": 24 } + "legacy_raw_audit": { "status": "RAW_CHECKOUT_HAPPENS_TO_MATCH", "raw": 7, "git_object": 7, "checkout_lf": 7 }, + "git_object": { "matched": 7, "total": 7 }, + "checkout_lf": { "matched": 7, "total": 7, "bare_carriage_returns": 0 }, + "artifact_files": { "matched": 5, "total": 5 }, + "permanent_suite": { "passed": 24, "total": 24 } } ], + "checksums": { + "artifact_layer": "5/5", + "r3_layer": "13/13", + "r4_layer": "20/20", + "r5_layer": "32/32" + }, "residue": { "temporary_worktrees": 0, - "maker_node_processes": 0, + "task_node_processes": 0, + "access_spy_directories": 0, "matching_postgresql_databases": 0, "matching_postgresql_sessions": 0 }, diff --git a/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.test.cjs b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.test.cjs index 35d5015c..8e814737 100644 --- a/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.test.cjs +++ b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.test.cjs @@ -36,6 +36,19 @@ const repoRoot = path.resolve( windowsHide: true, }).stdout.trim(), ); +const coverageCaptureDirectory = path.join( + repoRoot, + '.agent', + 'reports', + 'evidence', + 'production-ready', + 'db-embedding-stats-evidence-transport-r5', +); +const coverageCapturePath = path.join(coverageCaptureDirectory, 'coverage-capture.v1.json'); +const coverageCaptureVerifierWrapperPath = path.join( + coverageCaptureDirectory, + 'run-coverage-capture-verifier.cmd', +); const legacyManifestPath = path.join( repoRoot, '.agent', @@ -177,6 +190,23 @@ function runVerifier(mode, options = {}) { }; } +function runCoverageCaptureVerifier(mode) { + const result = spawnSync( + 'cmd.exe', + ['/d', '/c', coverageCaptureVerifierWrapperPath, `--mode=${mode}`], + { + cwd: repoRoot, + encoding: 'utf8', + windowsHide: true, + }, + ); + return { + exit_code: result.status, + output: result.stdout.trim() ? JSON.parse(result.stdout) : null, + stderr: result.stderr.trim(), + }; +} + function expectFailClosed(result) { assert.notEqual(result.exit_code, 0, 'mutation must return a non-zero exit code'); assert.equal(result.output?.status, 'FAIL', result.stderr || 'mutation must emit FAIL'); @@ -271,7 +301,25 @@ function mutateContract(mutator) { }; } -test('artifact manifest rejects a header-only zero-entry set', () => { +function mutateJson(mutator) { + return (bytes) => { + const value = JSON.parse(bytes.toString('utf8')); + mutator(value); + return Buffer.from(`${JSON.stringify(value, null, 2)}\n`, 'utf8'); + }; +} + +function makeMixedLineEndings(bytes) { + const firstLf = bytes.indexOf(10); + assert.notEqual(firstLf, -1, 'fixture must contain an LF'); + return Buffer.concat([ + bytes.subarray(0, firstLf), + Buffer.from('\r\n', 'utf8'), + bytes.subarray(firstLf + 1), + ]); +} + +test('evidence manifests reject incomplete sets and undeclared or mixed coverage capture', () => { const result = withMutation( artifactManifestPath, mutateArtifactManifest((lines) => { @@ -280,6 +328,38 @@ test('artifact manifest rejects a header-only zero-entry set', () => { () => runVerifier('artifact-files'), ); expectFailClosed(result); + + const baseline = runCoverageCaptureVerifier('materialization'); + assert.equal(baseline.exit_code, 0, baseline.stderr || JSON.stringify(baseline.output)); + assert.equal(baseline.output?.status, 'PASS'); + + const undeclared = withMutation( + coverageCapturePath, + mutateJson((coverage) => { + delete coverage.materialization; + }), + () => runCoverageCaptureVerifier('materialization'), + ); + expectFailClosed(undeclared); + assert.ok( + undeclared.output.structural_errors.includes( + 'capture is missing required key: materialization', + ), + ); + + const mixed = withMutation( + verifierPath, + makeMixedLineEndings, + () => runCoverageCaptureVerifier('materialization'), + ); + expectFailClosed(mixed); + assert.ok( + mixed.output.structural_errors.includes( + 'coverage file must be LF-only and byte-identical to the Git index: ' + + '.agent/reports/evidence/production-ready/' + + 'db-embedding-stats-evidence-transport/verify-manifest.cjs', + ), + ); }); test('artifact manifest rejects a missing required entry', () => { diff --git a/.agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R3.tdd.json b/.agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R3.tdd.json index 2a6c8edc..f3a26e44 100644 --- a/.agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R3.tdd.json +++ b/.agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R3.tdd.json @@ -1,7 +1,7 @@ { "task_id": "DB-EMBEDDING-EVIDENCE-TRANSPORT-R3", "stack": "GO repository with Node.js evidence verifier", - "status": "SUPERSEDED_BY_R4", + "status": "SUPERSEDED_BY_R5", "red": { "passed_tests": 18, "failed_tests": 4, @@ -20,6 +20,6 @@ }, "coverage": { "status": "REMOVED_AS_NOT_REPRODUCIBLE", - "replacement": ".agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R4.tdd.json" + "replacement": ".agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R5.tdd.json" } } diff --git a/.agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R4.tdd.json b/.agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R4.tdd.json index 62a82c4c..e3680d8b 100644 --- a/.agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R4.tdd.json +++ b/.agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R4.tdd.json @@ -57,31 +57,9 @@ } }, "coverage": { - "command": "node.exe --test --test-concurrency=1 --experimental-test-coverage .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.test.cjs", - "repeat_count": 2, - "reproducible": true, - "covered_git_blob_oids": { - "verifier": "75bec9c41eb5abc435f13d90848074f6608f7fce", - "test_harness": "35d5015c51e78130b7293e0b09ad6494ab3a4f1a" - }, - "aggregate": { - "line_percent": 89.23, - "branch_percent": 76.61, - "functions_percent": 95.35 - }, - "verifier": { - "line_percent": 80.92, - "branch_percent": 58.02, - "functions_percent": 81.82 - }, - "test_harness": { - "line_percent": 100.0, - "branch_percent": 97.44, - "functions_percent": 100.0 - }, - "threshold_basis": "aggregate line coverage", - "threshold_percent": 80, - "status": "PASS" + "status": "REMOVED_AS_MIXED_EOL_MATERIALIZATION", + "checker_finding": "The recorded exact values were tied to maker-only mixed EOL working-tree bytes rather than the committed target representation.", + "replacement": ".agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R5.tdd.json" }, "behavioral_signal": { "name": "release-evidence-false-pass-rate", diff --git a/.agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R5.red.json b/.agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R5.red.json new file mode 100644 index 00000000..466b24d4 --- /dev/null +++ b/.agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R5.red.json @@ -0,0 +1,11 @@ +{ + "task_id": "DB-EMBEDDING-EVIDENCE-TRANSPORT-R5", + "observed_at": "2026-07-10T19:18:54.3616699Z", + "test_file": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.test.cjs", + "test_name": "evidence manifests reject incomplete sets and undeclared or mixed coverage capture", + "failure_reason": "R4 verifier rejected the new coverage-evidence mode as unsupported, so it could not prove the declared materialization or reject mixed working-tree bytes.", + "runner_stdout_excerpt": "tests 24; pass 23; fail 1; AssertionError: unsupported mode: coverage-evidence", + "exit_code": 1, + "passed_tests": 23, + "failed_tests": 1 +} diff --git a/.agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R5.tdd.json b/.agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R5.tdd.json new file mode 100644 index 00000000..d9b8579b --- /dev/null +++ b/.agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R5.tdd.json @@ -0,0 +1,101 @@ +{ + "task_id": "DB-EMBEDDING-EVIDENCE-TRANSPORT-R5", + "stack": "GO repository with Node.js evidence verifiers", + "base_commit": "369951b61ee07cb0c405558e0f677cd1c9e90362", + "node_version": "v24.2.0", + "red": { + "observed_at_utc": "2026-07-10T19:18:54.3616699Z", + "test_name": "evidence manifests reject incomplete sets and undeclared or mixed coverage capture", + "passed_tests": 23, + "failed_tests": 1, + "exit_code": 1, + "failure": "coverage materialization verifier was absent" + }, + "exact_base_red": { + "base_commit": "d650df5c4271cdb50aa1f443d2f95b2f4b672541", + "r4_final_test_blob_overlaid": true, + "passed_tests": 22, + "failed_tests": 2, + "exit_code": 1, + "failures": [ + "representation=null escaped as raw TypeError", + "entries[0]=null escaped as raw TypeError" + ] + }, + "green": { + "passed_tests": 24, + "failed_tests": 0, + "exit_code": 0, + "permanent_attack_cases": 15, + "undeclared_capture_structured_fail": true, + "mixed_eol_capture_structured_fail": true, + "null_representation_structured_fail": true, + "null_entry_structured_fail": true, + "null_reported_and_preload_source_access_zero": true + }, + "refactor": { + "applied": true, + "patterns": [ + "preserve covered R4 verifier unchanged", + "isolate representation and transcript validation in evidence-side verifier", + "clear Node coverage environment in wrapper before evidence-side verifier launch" + ], + "post_refactor_parity": true, + "tests_before": 24, + "tests_after": 24 + }, + "prove_it": { + "validateContractSchema": { + "sentinel": "discard structural errors and release validated subsets", + "passed_tests": 9, + "failed_tests": 15, + "exit_code": 1 + }, + "verifyArtifactFiles": { + "sentinel": "force artifact status PASS", + "passed_tests": 15, + "failed_tests": 9, + "exit_code": 1 + }, + "verifyCoverageCapture": { + "sentinel": "force evidence-side verifier status PASS", + "passed_tests": 23, + "failed_tests": 1, + "exit_code": 1 + }, + "post_restore": { + "passed_tests": 24, + "failed_tests": 0, + "exit_code": 0, + "r4_verifier_git_blob_oid": "75bec9c41eb5abc435f13d90848074f6608f7fce" + } + }, + "coverage": { + "command": "node.exe --test --test-concurrency=1 --experimental-test-coverage .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.test.cjs", + "capture_manifest": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/coverage-capture.v1.json", + "transcript_representation": "canonical-lf-tap-trim-trailing-table-padding", + "transcripts": [ + { + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/coverage-run-1.tap", + "sha256": "52a871ca44112dc2d4e7540f7e9548079a05619f967b4c4d9445b999d7a42daf" + }, + { + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/coverage-run-2.tap", + "sha256": "d88556d5e8e437eba50505db6ac200e52910353ced62ad4eafbf6195147387a5" + } + ], + "repeat_count": 2, + "metrics_identical": true, + "aggregate": { "line_percent": 89.28, "branch_percent": 75.30, "functions_percent": 95.59 }, + "verifier": { "line_percent": 80.08, "branch_percent": 55.91, "functions_percent": 81.82 }, + "test_harness": { "line_percent": 99.68, "branch_percent": 95.16, "functions_percent": 100.00 }, + "threshold_basis": "aggregate line coverage", + "threshold_percent": 80, + "status": "PASS" + }, + "behavioral_signal": { + "name": "release-evidence-false-pass-rate", + "target": "0 false PASS results across 15 top-level attacks and 24 Node test cases", + "measurement_method": "permanent mutation suite, preload source-access spy, LF/index capture verifier, and canonical transcript parser" + } +} From 406fe952c143eb8aaf5895427c568a41d4cec225 Mon Sep 17 00:00:00 2001 From: Kirill Turanskiy Date: Fri, 10 Jul 2026 23:42:08 +0300 Subject: [PATCH 040/111] ci(release): harden r8 scope and package gates --- .../2026-07-10-release-gates-r8-maker.md | 40 + .../evidence/release-gates/RG8-TDD.json | 61 + .../final-green.workflow-conformance.json | 14 + .../ledger-live-register.final.json | 4417 +++++++++++++++++ .../release-gates/local-code-review.md | 31 + ...it-package-final.workflow-conformance.json | 18 + .../release-gates/prove-it-scope-final.json | 17 + .../release-gates/verification-summary.json | 75 + .../release-gates/verify-scope-prove-it.ps1 | 47 + .../verify-workflow-conformance.ps1 | 91 + .github/workflows/test.yml | 110 +- .../assert-plan-path-ownership.ps1 | 314 +- scripts/production-gates/run-db-suite.ps1 | 27 +- 13 files changed, 5251 insertions(+), 11 deletions(-) create mode 100644 .agent/reports/2026-07-10-release-gates-r8-maker.md create mode 100644 .agent/specs/release-gates-r8/evidence/release-gates/RG8-TDD.json create mode 100644 .agent/specs/release-gates-r8/evidence/release-gates/final-green.workflow-conformance.json create mode 100644 .agent/specs/release-gates-r8/evidence/release-gates/ledger-live-register.final.json create mode 100644 .agent/specs/release-gates-r8/evidence/release-gates/local-code-review.md create mode 100644 .agent/specs/release-gates-r8/evidence/release-gates/prove-it-package-final.workflow-conformance.json create mode 100644 .agent/specs/release-gates-r8/evidence/release-gates/prove-it-scope-final.json create mode 100644 .agent/specs/release-gates-r8/evidence/release-gates/verification-summary.json create mode 100644 .agent/specs/release-gates-r8/evidence/release-gates/verify-scope-prove-it.ps1 create mode 100644 .agent/specs/release-gates-r8/evidence/release-gates/verify-workflow-conformance.ps1 diff --git a/.agent/reports/2026-07-10-release-gates-r8-maker.md b/.agent/reports/2026-07-10-release-gates-r8-maker.md new file mode 100644 index 00000000..7a422403 --- /dev/null +++ b/.agent/reports/2026-07-10-release-gates-r8-maker.md @@ -0,0 +1,40 @@ +# RELEASE-GATES-R8 maker report + +Verdict: `PASS_PENDING_INDEPENDENT_CHECKER_AND_ROOT_POST_REVIEW` + +## Authority + +- Direct parent: PLAN-GOVERNANCE-R8 commit `37d185b33b8f9411564fda49cf8b0d58321b62fd`. +- Reconstruction base: `d59d1605969b1f567506e96ded524dfd1e4be08a`. +- Canonical UTF-8/LF plan SHA256: `fd2b223a9a62848efc39e1c33bf739bada191508bccb7ba9a73140185638e43d`. +- Scope-map SHA256: `81093184036672008d6b85dfa88a431998ef70b587ab11475aa2b315f03ddf79`. +- Register freeze provenance remains `AB5F882FA110CA823A317061ECBCA0C62516702735325893A56206F9E7A29415`, `updated_at=2026-07-10T22:46:01.2938194+03:00`, 67/67. +- Live structural checks observed two later normal-progress register states, first `8F099B7564FDE5655541E04E7A075B3441F460FD1A2058AFBEE771736D9F83E0` and then `22F2AF0817F1A525EA4436E95326353617294E02CCF2CDAED1A9C94ADC1997FC`. Both passed 67/67 without rewriting the freeze; the latter advanced DB embedding evidence inside its existing owner. + +## Delivered + +- Carried forward the R7 wrong-package repair: twelve exact test names emitted by `internal/mcp` now prove zero observed/executed required tests and fail with all twelve exact missing identities. +- Hardened CI AST conformance so the sole live required-test consumer must match both the exact case-sensitive `internal/grpcserver` package and exact test name. +- Bound CI and the ownership runner to the exact R8 plan, ownership state, and scope-map hashes. +- Added structural scope conformance for deleted plan rows, owner/fold integrity, exact live slice parity, new register rows, and explicitly rejected heads presented as accepted. +- Preserved the corrected non-freezing semantics: ordinary same-lane status/head advancement and timestamp, command, artifact, or notes changes remain valid. + +## TDD and Prove-It + +The initial scope self-test failed RED because `Invoke-ScopeContractAudit` did not exist. GREEN passes both release-runner self-tests. Two final Prove-It mutations fail exactly as required: + +1. Disabling the live package predicate enforcement makes the conformance harness report that `remove live session-start package predicate` was accepted. +2. Disabling live unique-slice-set enforcement makes the scope self-test report that a live register slice missing from the map was accepted. + +The final extracted CI block passed and rejected all 51 mutations. Machine evidence is under `.agent/specs/release-gates-r8/evidence/release-gates/`. + +## Verification + +- `actionlint .github/workflows/test.yml`: exit 0. +- `assert-plan-path-ownership.ps1 -SelfTest`: PASS. +- `run-db-suite.ps1 -SelfTest`: PASS. +- Extracted CI conformance: PASS, 51/51 mutations rejected. +- Live structural Ledger: PASS; 57 maker rows, 333 declarations, 34 repeated exact paths, 36/36 epochs, 67/67 live scope rows, zero errors. +- Local six-axis changed-code review: PASS with one overconstraint corrected before final green. + +The full fresh-database repeat-3/race suite and Docker dev-stand were not run in this maker turn; they remain root-authorized expensive acceptance gates. A fresh independent checker and separate root post-review are mandatory before integration. Cross-model review was unavailable during the maker turn because all native agent slots were occupied, so this report does not claim independent acceptance, integration, or release authorization. diff --git a/.agent/specs/release-gates-r8/evidence/release-gates/RG8-TDD.json b/.agent/specs/release-gates-r8/evidence/release-gates/RG8-TDD.json new file mode 100644 index 00000000..86c390f5 --- /dev/null +++ b/.agent/specs/release-gates-r8/evidence/release-gates/RG8-TDD.json @@ -0,0 +1,61 @@ +{ + "schema_version": 1, + "slice": "RELEASE-GATES", + "recorded_at": "2026-07-10T23:38:40.7151525+03:00", + "direct_parent": "37d185b33b8f9411564fda49cf8b0d58321b62fd", + "contract": [ + "reject exact required test names reported only by the wrong Go package", + "reject a required plan row and its ownership epoch disappearing together", + "reject a missing scope entry, missing owner or fold target, a new live register slice, and an explicitly rejected head presented as accepted", + "allow ordinary same-lane status and head progress plus timestamp, command, artifact, and notes drift" + ], + "red": [ + { + "surface": "scope contract", + "command": "pwsh -NoProfile -File scripts/production-gates/assert-plan-path-ownership.ps1 -SelfTest", + "expected_exit_code": 1, + "observed_exit_code": 1, + "observed_failure": "Invoke-ScopeContractAudit was not recognized before the implementation existed" + } + ], + "green": [ + { + "surface": "ownership and structural scope self-test", + "command": "pwsh -NoProfile -File scripts/production-gates/assert-plan-path-ownership.ps1 -SelfTest", + "exit_code": 0, + "result": "SELFTEST PASS: assert-plan-path-ownership.ps1" + }, + { + "surface": "database execution-proof self-test", + "command": "pwsh -NoProfile -File scripts/production-gates/run-db-suite.ps1 -SelfTest", + "exit_code": 0, + "result": "SELFTEST PASS including exact package-plus-test rejection and 12-test zero-skip proof" + }, + { + "surface": "extracted live CI conformance block", + "command": "pwsh -NoProfile -File .agent/specs/release-gates-r8/evidence/release-gates/verify-workflow-conformance.ps1 -Repository . -Label final-green", + "exit_code": 0, + "mutations_rejected": 51, + "artifact": ".agent/specs/release-gates-r8/evidence/release-gates/final-green.workflow-conformance.json" + } + ], + "prove_it": [ + { + "surface": "live package-plus-test predicate", + "mutation": "disable the CI conformance enforcement that rejects removal of the live package predicate", + "expected_exit_code": 1, + "observed_exit_code": 1, + "observed_failure": "conformance mutation 'remove live session-start package predicate' was accepted", + "artifact": ".agent/specs/release-gates-r8/evidence/release-gates/prove-it-package-final.workflow-conformance.json" + }, + { + "surface": "live register structural slice set", + "mutation": "disable live unique-slice-set enforcement in the ownership runner", + "expected_exit_code": 1, + "observed_exit_code": 1, + "observed_failure": "SELFTEST FAIL: live register slice missing from the scope map was accepted", + "artifact": ".agent/specs/release-gates-r8/evidence/release-gates/prove-it-scope-final.json" + } + ], + "verdict": "PASS_PENDING_INDEPENDENT_CHECKER" +} diff --git a/.agent/specs/release-gates-r8/evidence/release-gates/final-green.workflow-conformance.json b/.agent/specs/release-gates-r8/evidence/release-gates/final-green.workflow-conformance.json new file mode 100644 index 00000000..fc4df755 --- /dev/null +++ b/.agent/specs/release-gates-r8/evidence/release-gates/final-green.workflow-conformance.json @@ -0,0 +1,14 @@ +{ + "schema_version": 1, + "label": "final-green", + "live_package_binding_disabled": false, + "observed_at": "2026-07-10T20:32:55.6737846+00:00", + "exit_code": 0, + "workflow_sha256": "eacb67531d1b96862812273d41a605b5c10b5b26a99f9b8f4a0445f02ff51452", + "runner_sha256": "910e78011381e6bbfcf2fb15a97d61f54c2f399528b87ec02c6d30191701a8b4", + "extracted_script_sha256": "b1e06ccef81627ef19ca1ad64035e418291197e776f60cc49dbadcb576457b60", + "stdout_tail": [ + "CONFORMANCE PASS: canonical LF/CRLF plan and structural scope authority, exact wrappers, path budget, AST-validated reachable exactly-once source-built image provenance and Scout, immutable live package-plus-test 12-test zero-skip DB execution proof, ownership state, node matrix, readiness, cleanup, and full/race semantics match; 51 mutations rejected" + ], + "stderr_tail": [] +} diff --git a/.agent/specs/release-gates-r8/evidence/release-gates/ledger-live-register.final.json b/.agent/specs/release-gates-r8/evidence/release-gates/ledger-live-register.final.json new file mode 100644 index 00000000..5bf4c2d0 --- /dev/null +++ b/.agent/specs/release-gates-r8/evidence/release-gates/ledger-live-register.final.json @@ -0,0 +1,4417 @@ +{ + "schema_version": 2, + "gate": "plan-path-ownership", + "mode": "Ledger", + "verdict": "PASS", + "started_at": "2026-07-10T20:43:16.1253203+00:00", + "finished_at": "2026-07-10T20:43:21.0342791+00:00", + "duration_seconds": 4.909, + "plan": { + "path": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates-r8-maker\\.agent\\plans\\2026-07-10-engram-production-ready-master-plan.md", + "expected_sha256": "fd2b223a9a62848efc39e1c33bf739bada191508bccb7ba9a73140185638e43d", + "observed_sha256": "fd2b223a9a62848efc39e1c33bf739bada191508bccb7ba9a73140185638e43d", + "hash_match": true + }, + "state": { + "path": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates-r8-maker\\.agent\\plans\\2026-07-10-engram-production-ready-ownership-state.json", + "sha256": "c14eaba5a9615af7196af913aedf8bb3c6e51e05880d47d391e8d07e4367a192", + "verdict": "PASS", + "plan_sha256": "fd2b223a9a62848efc39e1c33bf739bada191508bccb7ba9a73140185638e43d" + }, + "scope_map": { + "path": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates-r8-maker\\.agent\\plans\\2026-07-10-engram-production-ready-scope-map.json", + "expected_sha256": "81093184036672008d6b85dfa88a431998ef70b587ab11475aa2b315f03ddf79", + "observed_sha256": "81093184036672008d6b85dfa88a431998ef70b587ab11475aa2b315f03ddf79", + "verdict": "PASS", + "entries": 67, + "unique_slices": 67 + }, + "live_register": { + "supplied": true, + "path": "D:\\Dev\\engram\\.agent\\reports\\production-readiness-evidence-register.json", + "sha256": "22f2af0817f1a525ea4436e95326353617294e02ccf2cdaed1a9c94adc1997fc", + "checked": true, + "rows": 67 + }, + "counts": { + "maker_slices": 57, + "declarations": 333, + "exact_paths": 316, + "prefixes": 17, + "repeated_exact_paths": 34, + "prefix_intersections": 2, + "undeclared_prefix_intersections": 0, + "declared_epochs": 36, + "state_epochs": 36, + "errors": 0 + }, + "slices": [ + { + "slice": "PLAN-GOVERNANCE", + "branch": "work/prc-release-gates-revision8-maker", + "paths": [ + ".agent/plans/2026-07-10-engram-production-ready-master-plan.md", + ".agent/plans/2026-07-10-engram-production-ready-ownership-state.json", + ".agent/plans/2026-07-10-engram-production-ready-scope-map.json", + ".agent/specs/release-gates-r8/evidence/plan-governance/**", + ".agent/reports/2026-07-10-release-gates-r8-plan-governance.md" + ], + "line": 6 + }, + { + "slice": "DB-BULKOPS", + "branch": "work/prc-db-bulkops", + "paths": [ + "internal/bulkops/facade.go", + "internal/bulkops/facade_test.go", + "internal/bulkops/rollback.go", + "internal/bulkops/rollback_test.go", + "internal/db/gorm/candidate_store.go", + "internal/db/gorm/candidate_store_test.go", + "internal/mcp/tools_bulkops.go", + "internal/mcp/tools_dryrun_test.go", + "pkg/models/snapshot.go", + ".agent/reports/2026-07-10-db-bulkops-capture-lock-rework-maker.md", + ".agent/reports/2026-07-10-db-bulkops-sibling-rework-maker.md", + ".agent/specs/production-ready-db-bulkops/evidence/**", + ".agent/reports/evidence/production-ready/db-bulkops-sibling-rework/**" + ], + "line": 7 + }, + { + "slice": "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK", + "branch": "work/prc-db-bulkops", + "paths": [ + "internal/db/gorm/candidate_store.go", + "internal/db/gorm/candidate_store_test.go", + "internal/mcp/tools_bulkops.go", + "internal/mcp/tools_dryrun_test.go", + ".agent/reports/2026-07-10-db-bulkops-behavioral-edge-rework-maker-3.md", + ".agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/**" + ], + "line": 8 + }, + { + "slice": "DB-TEST-POOL-HYGIENE", + "branch": "work/prc-db-test-pool-hygiene-evidence-r2", + "paths": [ + "internal/db/gorm/candidate_store_test.go", + ".agent/reports/2026-07-10-db-test-pool-hygiene-maker.md", + ".agent/reports/2026-07-10-db-test-pool-hygiene-evidence-revision-maker.md", + ".agent/reports/evidence/production-ready/db-test-pool-hygiene/**" + ], + "line": 9 + }, + { + "slice": "DB-GOVERNANCE", + "branch": "work/prc-db-governance", + "paths": [ + "internal/db/gorm/candidate_store.go", + "internal/db/gorm/candidate_store_test.go", + "internal/db/gorm/rule_arbiter_store_test.go", + "internal/db/gorm/rule_governance_store.go", + "internal/db/gorm/rule_governance_store_test.go", + "internal/db/gorm/rule_governance_rg3_store_test.go", + "internal/db/gorm/migration_rule_governance.go", + "internal/db/gorm/migration_rule_arbiter.go", + "internal/db/gorm/migration_rule_governance_snapshot_statuses.go" + ], + "line": 10 + }, + { + "slice": "CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK", + "branch": "work/prc-candidate-review-snapshot-rollback", + "paths": [ + "internal/reviewpacket/candidate.go", + "internal/reviewpacket/candidate_test.go", + "internal/db/gorm/candidate_store.go", + "internal/db/gorm/candidate_store_test.go", + "internal/db/gorm/snapshot_store.go", + "internal/db/gorm/snapshot_store_test.go", + "internal/bulkops/rollback_test.go", + "tests/critical/candidate_review/candidate_review_snapshot_rollback_test.go" + ], + "line": 11 + }, + { + "slice": "INGEST-DOC-SNAPSHOT-DEMOLITION", + "branch": "work/prc-ingest-doc-snapshot-demolition", + "paths": [ + "internal/bulkops/facade.go", + "internal/bulkops/facade_test.go", + "pkg/models/snapshot.go", + "pkg/models/snapshot_test.go", + "internal/mcp/ingest_snapshot_contract_test.go" + ], + "line": 13 + }, + { + "slice": "DB-AUTH", + "branch": "work/prc-db-auth", + "paths": [ + "internal/db/gorm/user_store.go", + "internal/db/gorm/user_store_test.go", + "internal/worker/auth_handlers.go", + "internal/worker/auth_handlers_lifecycle_test.go" + ], + "line": 14 + }, + { + "slice": "AUTH-BOOTSTRAP-SECURITY", + "branch": "work/prc-auth-bootstrap-security", + "paths": [ + "internal/config/config.go", + "internal/config/config_test.go", + "internal/config/envnames.go", + "internal/db/gorm/user_store.go", + "internal/worker/middleware.go", + "internal/worker/middleware_test.go", + "internal/worker/auth_handlers.go", + "internal/worker/auth_bootstrap_limiter.go", + "internal/worker/auth_bootstrap_limiter_test.go", + "internal/worker/auth_bootstrap_security_test.go", + "internal/worker/service.go", + "tests/critical/auth_bootstrap/first_admin_bootstrap_test.go", + "scripts/production-smoke/customer/run-auth-bootstrap-adversary.ps1" + ], + "line": 15 + }, + { + "slice": "DURABLE-AUDIT-BOUNDARIES", + "branch": "work/prc-durable-audit-boundaries", + "paths": [ + "internal/db/gorm/domain_owner_store.go", + "internal/db/gorm/domain_owner_store_test.go", + "internal/db/gorm/user_store.go", + "internal/worker/auth_handlers.go", + "internal/worker/auth_audit_durability_test.go", + "internal/bulkops/facade.go", + "internal/bulkops/audit_durability_test.go", + "scripts/production-smoke/customer/run-durable-audit-faults.ps1" + ], + "line": 16 + }, + { + "slice": "DB-CRYSTALLIZATION", + "branch": "work/prc-db-crystallization", + "paths": [ + "internal/worker/handlers_hooks_crystallization_integration_test.go" + ], + "line": 17 + }, + { + "slice": "CRYSTALLIZATION-DREAM-CYCLE-CORRECTNESS", + "branch": "work/prc-crystallization-dream-cycle-correctness", + "paths": [ + "internal/worker/dream_cycle.go", + "internal/worker/dream_cycle_test.go", + ".agent/reports/2026-07-10-crystallization-dream-cycle-correctness-maker.md", + ".agent/e/cdc/**" + ], + "line": 18 + }, + { + "slice": "DB-EMBEDDING-STATS", + "branch": "work/prc-db-embedding-stats", + "paths": [ + "internal/embedding/store.go", + "internal/embedding/store_stats_test.go" + ], + "line": 19 + }, + { + "slice": "DB-EMBEDDING-EVIDENCE-TRANSPORT", + "branch": "work/prc-db-embedding-evidence-transport-r5", + "paths": [ + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/**", + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/**", + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4/**", + ".agent/specs/db-embedding-stats-evidence-transport/evidence/**" + ], + "line": 20 + }, + { + "slice": "DB-REAPER", + "branch": "work/prc-db-reaper", + "paths": [ + "internal/worker/reaper/reaper.go", + "internal/worker/reaper/reaper_test.go" + ], + "line": 21 + }, + { + "slice": "SECURITY-TOOLCHAIN", + "branch": "work/prc-security-toolchain", + "paths": [ + "go.mod", + "go.sum", + "Dockerfile" + ], + "line": 22 + }, + { + "slice": "RELEASE-GATES", + "branch": "work/prc-release-gates-revision8-maker", + "paths": [ + ".github/workflows/test.yml", + "scripts/production-gates/assert-plan-path-ownership.ps1", + "scripts/production-gates/run-db-suite.ps1", + ".agent/specs/release-gates-r8/evidence/release-gates/**", + ".agent/reports/2026-07-10-release-gates-r8-maker.md" + ], + "line": 23 + }, + { + "slice": "IMAGE-REMEDIATION", + "branch": "work/prc-image-remediation", + "paths": [ + "Dockerfile", + "cmd/engram-healthcheck/main.go", + "cmd/engram-healthcheck/main_test.go", + "apps/operator-console/package.json", + "apps/operator-console/package-lock.json", + "deploy/postgres/Dockerfile", + "docker-compose.yml", + "deploy/docker-compose.runtime.yml", + "docs/DEPLOYMENT.md", + "docs/PRODUCTION-TESTING-PLAYBOOK.md", + ".github/workflows/test.yml", + ".github/workflows/docker.yaml", + ".github/workflows/docker-publish.yml", + "scripts/production-gates/build-and-scan-images.ps1", + "tests/critical/runtime/image_runtime_contract_test.go", + "tests/critical/runtime/postgres_image_contract_test.go" + ], + "line": 24 + }, + { + "slice": "SECURITY-PROJECT-IDENTITY", + "branch": "work/prc-security-project-identity-r3", + "paths": [ + "internal/db/gorm/project_store.go", + "internal/db/gorm/project_store_test.go", + "internal/grpcserver/project_identity_v2_test.go" + ], + "line": 25 + }, + { + "slice": "OPENCLAW-RELEASE", + "branch": "work/prc-openclaw-release", + "paths": [ + "plugin/openclaw-engram/.gitignore", + "plugin/openclaw-engram/package.json", + "plugin/openclaw-engram/package-lock.json", + "plugin/openclaw-engram/openclaw.plugin.json", + "plugin/openclaw-engram/README.md", + ".github/workflows/plugin-publish.yml", + "docs/RELEASE-PROTOCOL.md" + ], + "line": 26 + }, + { + "slice": "UPDATE-LIFECYCLE", + "branch": "work/prc-security-updater", + "paths": [ + "internal/update/update.go", + "internal/update/update_test.go", + "internal/worker/handlers_update.go", + "internal/worker/handlers_update_test.go", + "scripts/install.sh", + "scripts/install.ps1", + ".goreleaser.yaml", + ".github/workflows/release.yaml", + "plugin/engram/hooks/hook-cli.test.js" + ], + "line": 27 + }, + { + "slice": "DOCUMENT-INGEST-PUBLIC-TRUTH", + "branch": "work/prc-document-ingest-public-truth", + "paths": [ + "internal/mcp/server.go", + "internal/mcp/ingest_document_description_test.go" + ], + "line": 29 + }, + { + "slice": "MCP-STRUCTURED-INPUT-VALIDATION", + "branch": "work/prc-mcp-structured-input-validation", + "paths": [ + "internal/mcp/coerce.go", + "internal/mcp/coerce_test.go", + "internal/mcp/tools_candidates.go", + "internal/mcp/tools_candidates_test.go", + "internal/mcp/tools_memory.go", + "internal/mcp/tools_memory_edit_test.go", + "internal/mcp/tools_memory_significance.go", + "internal/mcp/tools_memory_significance_test.go", + "internal/mcp/tools_store_consolidated.go", + "internal/mcp/tools_settings.go", + "internal/mcp/tools_settings_test.go", + "internal/mcp/tools_documents_v2.go", + "internal/mcp/tools_rule_governance.go", + "internal/mcp/tools_rule_governance_test.go", + "internal/mcp/structured_input_validation_test.go" + ], + "line": 31 + }, + { + "slice": "REDACTION-LIVE-CONTRACT", + "branch": "work/prc-redaction-live-contract", + "paths": [ + "internal/redaction/layer.go", + "internal/redaction/layer_test.go", + "internal/redaction/rejection_test.go", + "internal/mcp/redaction_guard.go", + "internal/mcp/redaction_guard_test.go", + "internal/mcp/tools_memory.go", + "internal/mcp/tools_rules.go", + "internal/mcp/tools_memory_redaction_audit_test.go", + "internal/mcp/tools_rules_redaction_audit_test.go", + "internal/worker/service.go", + "internal/worker/service_redaction_test.go", + "docs/operating-engram.md", + ".agent/reports/evidence/production-ready/redaction-live-contract/**" + ], + "line": 32 + }, + { + "slice": "RETRIEVAL-VECTOR-CONTRACT", + "branch": "work/prc-retrieval-vector-contract", + "paths": [ + "internal/retrieval/hybrid_integration_test.go" + ], + "line": 34 + }, + { + "slice": "STATIC-EMBED-CONTRACT", + "branch": "work/prc-static-embed-contract", + "paths": [ + "internal/worker/static_embed_test.go" + ], + "line": 35 + }, + { + "slice": "PRE-V5-UPGRADE-CONTRACT", + "branch": "work/prc-pre-v5-upgrade-contract", + "paths": [ + "internal/db/gorm/migrations_integration_test.go", + "internal/grpcserver/credential_migration_test.go", + "tests/fixtures/pre-v5/**", + "tests/critical/recovery/pre_v5_upgrade_test.go", + "scripts/production-smoke/customer/run-pre-v5-upgrade.ps1" + ], + "line": 36 + }, + { + "slice": "T007-COMPAT-DEMOLITION-CLASSIFICATION", + "branch": "work/prc-t007-compat-classification", + "paths": [ + "internal/mcp/store_memory_compat_t007_test.go" + ], + "line": 37 + }, + { + "slice": "DB-RULES-ISOLATION", + "branch": "work/prc-db-rules-isolation", + "paths": [ + "internal/worker/handlers_rules_test.go", + "scripts/production-gates/run-db-rules-isolation.ps1" + ], + "line": 38 + }, + { + "slice": "COVERAGE-CMD-ENGRAM", + "branch": "work/prc-coverage-cmd-engram", + "paths": [ + "cmd/engram/production_readiness_coverage_test.go" + ], + "line": 39 + }, + { + "slice": "COVERAGE-CMD-SERVER", + "branch": "work/prc-coverage-cmd-server", + "paths": [ + "cmd/engram-server/production_readiness_coverage_test.go" + ], + "line": 40 + }, + { + "slice": "COVERAGE-UPDATE", + "branch": "work/prc-coverage-update", + "paths": [ + "internal/update/production_readiness_coverage_test.go" + ], + "line": 41 + }, + { + "slice": "COVERAGE-WORKER", + "branch": "work/prc-coverage-worker", + "paths": [ + "internal/worker/production_readiness_coverage_test.go" + ], + "line": 43 + }, + { + "slice": "COVERAGE-MCP", + "branch": "work/prc-coverage-mcp", + "paths": [ + "internal/mcp/production_readiness_coverage_test.go" + ], + "line": 44 + }, + { + "slice": "COVERAGE-GORM", + "branch": "work/prc-coverage-gorm", + "paths": [ + "internal/db/gorm/production_readiness_coverage_test.go" + ], + "line": 45 + }, + { + "slice": "COVERAGE-LOOM", + "branch": "work/prc-coverage-loom", + "paths": [ + "internal/handlers/loom/production_readiness_coverage_test.go" + ], + "line": 46 + }, + { + "slice": "DEPLOYMENT-ROLLBACK", + "branch": "work/prc-deployment-rollback", + "paths": [ + "docker-compose.yml", + "deploy/docker-compose.runtime.yml", + "deploy/docker-compose.operator-web-standalone.yml", + "deploy/entrypoint-server.sh", + "deploy/healthcheck-server.sh", + "deploy/verify-rollback.ps1", + "deploy/verify-runtime-policy.ps1" + ], + "line": 47 + }, + { + "slice": "RECOVERY-DATA", + "branch": "work/prc-recovery-data", + "paths": [ + "scripts/recovery/start-disposable-postgres.ps1", + "scripts/recovery/verify-postgres-roundtrip.ps1", + "scripts/recovery/seed-recovery-fixture.ps1", + "scripts/recovery/assert-recovery-fixture.ps1", + "tests/critical/recovery/postgres_roundtrip_test.go" + ], + "line": 48 + }, + { + "slice": "OBSERVABILITY-OTLP", + "branch": "work/prc-observability-otlp", + "paths": [ + "internal/module/obs/logging.go", + "internal/module/obs/logging_test.go", + "internal/module/obs/meter.go", + "internal/module/obs/meter_test.go", + "internal/module/obs/metrics.go", + "internal/module/obs/metrics_test.go", + "cmd/engram-server/main.go", + "cmd/engram-server/main_test.go", + "scripts/production-smoke/verify-otlp.ps1" + ], + "line": 49 + }, + { + "slice": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "paths": [ + "internal/scope/domain_policy.go", + "internal/scope/domain_policy_test.go", + "internal/scope/filter.go", + "internal/scope/filter_test.go", + "internal/scope/filter_principal_test.go", + "internal/scope/filter_w4_test.go", + "internal/principalmemory/access_policy.go", + "internal/principalmemory/access_policy_test.go", + "internal/principalmemory/domain_registry.go", + "internal/principalmemory/domain_registry_test.go", + "internal/principalmemory/query_service.go", + "internal/principalmemory/query_service_test.go", + "internal/mcp/tools_principal_memory.go", + "internal/mcp/tools_principal_memory_test.go", + "internal/mcp/tools_recall_principal_test.go", + "internal/mcp/recall_visibility_backfill_test.go", + "internal/mcp/store_memory_principal_test.go", + "internal/worker/handlers_principal_memory.go", + "internal/worker/handlers_principal_memory_test.go", + "internal/worker/scope_bypass_w4_test.go", + "internal/worker/retention.go", + "internal/worker/retention_test.go", + "internal/db/gorm/memory_store.go", + "internal/db/gorm/memory_store_principal_test.go", + "internal/db/gorm/memory_store_principal_query_test.go", + "internal/db/gorm/purge_store_test.go", + "tests/critical/data_boundaries/principal_project_retention_test.go" + ], + "line": 50 + }, + { + "slice": "CRITICAL-HARNESS", + "branch": "work/prc-critical-harness", + "paths": [ + "tests/critical/customer_mode/customer_mode_test.go", + "tests/critical/customer_mode/compatibility_test.go", + "tests/critical/customer_mode/cross_agent_test.go", + "scripts/production-smoke/customer/run-customer-mode.ps1", + "scripts/production-smoke/customer/run-client-compatibility.ps1", + "scripts/production-smoke/customer/run-cross-agent.ps1", + "scripts/production-smoke/customer/run-diagnostic-matrix.ps1", + "scripts/production-smoke/customer/assert-product-works.ps1" + ], + "line": 51 + }, + { + "slice": "CORE-PUBLIC-TRUTH", + "branch": "work/prc-core-public-truth", + "paths": [ + "README.md", + "README.ru.md", + "README.zh.md", + "CONTRIBUTING.md", + "CHANGELOG.md", + "Makefile", + ".env.example", + "docs/DEPLOYMENT.md", + "docs/MIGRATION.md", + "docs/PRODUCTION-TESTING-PLAYBOOK.md", + "docs/arch/CONFIGURATION.md", + "docs/arch/QUICKSTART.md", + "docs/release-notes/v6.43.0.md", + "docs/public/engram.jpg", + "plugin/engram/commands/setup.md", + "plugin/engram/commands/doctor.md" + ], + "line": 52 + }, + { + "slice": "FINAL-PUBLIC-TRUTH", + "branch": "work/prc-final-public-truth", + "paths": [ + "README.md", + "README.ru.md", + "README.zh.md", + "CONTRIBUTING.md", + "CHANGELOG.md", + "Makefile", + ".env.example", + "docs/DEPLOYMENT.md", + "docs/MIGRATION.md", + "docs/PRODUCTION-TESTING-PLAYBOOK.md", + "docs/operating-engram.md", + "docs/arch/CONFIGURATION.md", + "docs/arch/QUICKSTART.md", + "docs/public/engram.jpg", + "plugin/engram/commands/setup.md", + "plugin/engram/commands/doctor.md" + ], + "line": 53 + }, + { + "slice": "LAUNCHER-FIRST-RUN", + "branch": "work/prc-launcher-first-run", + "paths": [ + "cmd/engram/main.go", + "cmd/engram/main_test.go", + "cmd/engram/wiring.go", + "cmd/engram/exec_windows.go", + "cmd/engram/exec_unix.go", + "plugin/engram/.engram-project", + "plugin/engram/scripts/run-engram.js", + "plugin/engram/scripts/run-engram.test.js", + "plugin/engram/scripts/ensure-binary.js", + "plugin/engram/scripts/ensure-binary.test.js" + ], + "line": 54 + }, + { + "slice": "OC-INTEGRATION", + "branch": "work/prc-operator-console-integration", + "paths": [ + "apps/operator-console/**" + ], + "line": 55 + }, + { + "slice": "S4B-CONTRACT", + "branch": "work/prc-s4b-contract", + "paths": [ + ".agent/specs/engram-v7-directives-surfacing/**" + ], + "line": 56 + }, + { + "slice": "V7-S4B-BACKEND", + "branch": "work/prc-v7-s4b-backend", + "paths": [ + "internal/cognitive/s4bsurfacing/**" + ], + "line": 57 + }, + { + "slice": "V7-CORE-CALLPATH", + "branch": "work/prc-v7-core-callpath", + "paths": [ + "internal/cognitive/core/event_bus.go", + "internal/cognitive/core/event_bus_test.go", + "internal/cognitive/core/hint_queue.go", + "internal/cognitive/core/hint_queue_test.go", + "internal/cognitive/s3ambient/queue.go", + "internal/cognitive/s3ambient/subsystem.go" + ], + "line": 58 + }, + { + "slice": "V7-RUNTIME-WIRING", + "branch": "work/prc-v7-runtime-wiring", + "paths": [ + "internal/worker/service.go", + "internal/worker/service_v7_integration_test.go", + "internal/worker/handlers_stats_v7.go", + "internal/worker/handlers_stats_v7_test.go" + ], + "line": 59 + }, + { + "slice": "V7-TELEMETRY-WIRING", + "branch": "work/prc-v7-telemetry-wiring", + "paths": [ + "internal/cognitive/s5/metrics.go", + "internal/cognitive/s5/provider.go", + "internal/cognitive/s5/provider_test.go", + "internal/cognitive/s5/source_adapter.go", + "internal/cognitive/s5/source_adapter_test.go" + ], + "line": 60 + }, + { + "slice": "ROADMAP-RECONCILIATION", + "branch": "work/prc-roadmap-reconciliation", + "paths": [ + ".agent/specs/roadmap.md", + ".agent/specs/ui-surface-ledger.md", + ".agent/specs/operator-console-production-integration/**", + ".agent/specs/engram-v7-ambient/spec.md", + ".agent/specs/engram-v7-ambient/plan.md", + ".agent/specs/engram-v7-ambient/checklists/general.md", + ".agent/specs/engram-v7-ambient/changes/CR-001-initial-scope/change.md", + ".agent/specs/engram-v7-ambient/changes/CR-001-initial-scope/tasks.md" + ], + "line": 61 + }, + { + "slice": "NORTHSTAR-CI-A-CONTRACTS", + "branch": "work/prc-northstar-ci-a-contracts", + "paths": [ + ".agent/specs/engram-absorption/ci-a-dense-vector/spec.md", + ".agent/specs/engram-absorption/ci-a-dense-vector/plan.md", + ".agent/specs/engram-absorption/ci-a-dense-vector/checklists/general.md", + ".agent/specs/engram-absorption/ci-a-dense-vector/changes/CR-001-initial-scope/change.md", + ".agent/specs/engram-absorption/ci-a-dense-vector/changes/CR-001-initial-scope/tasks.md" + ], + "line": 62 + }, + { + "slice": "NORTHSTAR-CI-B-CONTRACTS", + "branch": "work/prc-northstar-ci-b-contracts", + "paths": [ + ".agent/specs/engram-absorption/ci-b-graph-watcher-context/spec.md", + ".agent/specs/engram-absorption/ci-b-graph-watcher-context/plan.md", + ".agent/specs/engram-absorption/ci-b-graph-watcher-context/checklists/general.md", + ".agent/specs/engram-absorption/ci-b-graph-watcher-context/changes/CR-001-initial-scope/change.md", + ".agent/specs/engram-absorption/ci-b-graph-watcher-context/changes/CR-001-initial-scope/tasks.md" + ], + "line": 63 + }, + { + "slice": "NORTHSTAR-BOOK-CONTRACTS", + "branch": "work/prc-northstar-book-contracts", + "paths": [ + ".agent/specs/engram-absorption/book/prd.md", + ".agent/specs/engram-absorption/book/spec.md", + ".agent/specs/engram-absorption/book/plan.md", + ".agent/specs/engram-absorption/book/checklists/general.md", + ".agent/specs/engram-absorption/book/changes/CR-001-initial-scope/change.md", + ".agent/specs/engram-absorption/book/changes/CR-001-initial-scope/tasks.md" + ], + "line": 64 + }, + { + "slice": "NORTHSTAR-MEM-CONTRACTS", + "branch": "work/prc-northstar-mem-contracts", + "paths": [ + ".agent/specs/engram-absorption/mem-residual/spec.md", + ".agent/specs/engram-absorption/mem-residual/plan.md", + ".agent/specs/engram-absorption/mem-residual/checklists/general.md", + ".agent/specs/engram-absorption/mem-residual/changes/CR-001-initial-scope/change.md", + ".agent/specs/engram-absorption/mem-residual/changes/CR-001-initial-scope/tasks.md" + ], + "line": 65 + }, + { + "slice": "NORTHSTAR-EFFECTIVENESS-CONTRACTS", + "branch": "work/prc-northstar-effectiveness-contracts", + "paths": [ + ".agent/specs/engram-effectiveness/production-ready-residual/spec.md", + ".agent/specs/engram-effectiveness/production-ready-residual/plan.md", + ".agent/specs/engram-effectiveness/production-ready-residual/checklists/general.md", + ".agent/specs/engram-effectiveness/production-ready-residual/changes/CR-001-initial-scope/change.md", + ".agent/specs/engram-effectiveness/production-ready-residual/changes/CR-001-initial-scope/tasks.md" + ], + "line": 66 + }, + { + "slice": "NORTHSTAR-SETTINGS-CONTRACTS", + "branch": "work/prc-northstar-settings-contracts", + "paths": [ + ".agent/specs/settings-store/production-ready-residual/spec.md", + ".agent/specs/settings-store/production-ready-residual/plan.md", + ".agent/specs/settings-store/production-ready-residual/checklists/general.md", + ".agent/specs/settings-store/production-ready-residual/changes/CR-001-initial-scope/change.md", + ".agent/specs/settings-store/production-ready-residual/changes/CR-001-initial-scope/tasks.md" + ], + "line": 67 + } + ], + "declarations": [ + { + "owner": "PLAN-GOVERNANCE", + "branch": "work/prc-release-gates-revision8-maker", + "path": ".agent/plans/2026-07-10-engram-production-ready-master-plan.md", + "display": ".agent/plans/2026-07-10-engram-production-ready-master-plan.md", + "kind": "exact", + "line": 6 + }, + { + "owner": "PLAN-GOVERNANCE", + "branch": "work/prc-release-gates-revision8-maker", + "path": ".agent/plans/2026-07-10-engram-production-ready-ownership-state.json", + "display": ".agent/plans/2026-07-10-engram-production-ready-ownership-state.json", + "kind": "exact", + "line": 6 + }, + { + "owner": "PLAN-GOVERNANCE", + "branch": "work/prc-release-gates-revision8-maker", + "path": ".agent/plans/2026-07-10-engram-production-ready-scope-map.json", + "display": ".agent/plans/2026-07-10-engram-production-ready-scope-map.json", + "kind": "exact", + "line": 6 + }, + { + "owner": "PLAN-GOVERNANCE", + "branch": "work/prc-release-gates-revision8-maker", + "path": ".agent/specs/release-gates-r8/evidence/plan-governance", + "display": ".agent/specs/release-gates-r8/evidence/plan-governance/**", + "kind": "prefix", + "line": 6 + }, + { + "owner": "PLAN-GOVERNANCE", + "branch": "work/prc-release-gates-revision8-maker", + "path": ".agent/reports/2026-07-10-release-gates-r8-plan-governance.md", + "display": ".agent/reports/2026-07-10-release-gates-r8-plan-governance.md", + "kind": "exact", + "line": 6 + }, + { + "owner": "DB-BULKOPS", + "branch": "work/prc-db-bulkops", + "path": "internal/bulkops/facade.go", + "display": "internal/bulkops/facade.go", + "kind": "exact", + "line": 7 + }, + { + "owner": "DB-BULKOPS", + "branch": "work/prc-db-bulkops", + "path": "internal/bulkops/facade_test.go", + "display": "internal/bulkops/facade_test.go", + "kind": "exact", + "line": 7 + }, + { + "owner": "DB-BULKOPS", + "branch": "work/prc-db-bulkops", + "path": "internal/bulkops/rollback.go", + "display": "internal/bulkops/rollback.go", + "kind": "exact", + "line": 7 + }, + { + "owner": "DB-BULKOPS", + "branch": "work/prc-db-bulkops", + "path": "internal/bulkops/rollback_test.go", + "display": "internal/bulkops/rollback_test.go", + "kind": "exact", + "line": 7 + }, + { + "owner": "DB-BULKOPS", + "branch": "work/prc-db-bulkops", + "path": "internal/db/gorm/candidate_store.go", + "display": "internal/db/gorm/candidate_store.go", + "kind": "exact", + "line": 7 + }, + { + "owner": "DB-BULKOPS", + "branch": "work/prc-db-bulkops", + "path": "internal/db/gorm/candidate_store_test.go", + "display": "internal/db/gorm/candidate_store_test.go", + "kind": "exact", + "line": 7 + }, + { + "owner": "DB-BULKOPS", + "branch": "work/prc-db-bulkops", + "path": "internal/mcp/tools_bulkops.go", + "display": "internal/mcp/tools_bulkops.go", + "kind": "exact", + "line": 7 + }, + { + "owner": "DB-BULKOPS", + "branch": "work/prc-db-bulkops", + "path": "internal/mcp/tools_dryrun_test.go", + "display": "internal/mcp/tools_dryrun_test.go", + "kind": "exact", + "line": 7 + }, + { + "owner": "DB-BULKOPS", + "branch": "work/prc-db-bulkops", + "path": "pkg/models/snapshot.go", + "display": "pkg/models/snapshot.go", + "kind": "exact", + "line": 7 + }, + { + "owner": "DB-BULKOPS", + "branch": "work/prc-db-bulkops", + "path": ".agent/reports/2026-07-10-db-bulkops-capture-lock-rework-maker.md", + "display": ".agent/reports/2026-07-10-db-bulkops-capture-lock-rework-maker.md", + "kind": "exact", + "line": 7 + }, + { + "owner": "DB-BULKOPS", + "branch": "work/prc-db-bulkops", + "path": ".agent/reports/2026-07-10-db-bulkops-sibling-rework-maker.md", + "display": ".agent/reports/2026-07-10-db-bulkops-sibling-rework-maker.md", + "kind": "exact", + "line": 7 + }, + { + "owner": "DB-BULKOPS", + "branch": "work/prc-db-bulkops", + "path": ".agent/specs/production-ready-db-bulkops/evidence", + "display": ".agent/specs/production-ready-db-bulkops/evidence/**", + "kind": "prefix", + "line": 7 + }, + { + "owner": "DB-BULKOPS", + "branch": "work/prc-db-bulkops", + "path": ".agent/reports/evidence/production-ready/db-bulkops-sibling-rework", + "display": ".agent/reports/evidence/production-ready/db-bulkops-sibling-rework/**", + "kind": "prefix", + "line": 7 + }, + { + "owner": "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK", + "branch": "work/prc-db-bulkops", + "path": "internal/db/gorm/candidate_store.go", + "display": "internal/db/gorm/candidate_store.go", + "kind": "exact", + "line": 8 + }, + { + "owner": "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK", + "branch": "work/prc-db-bulkops", + "path": "internal/db/gorm/candidate_store_test.go", + "display": "internal/db/gorm/candidate_store_test.go", + "kind": "exact", + "line": 8 + }, + { + "owner": "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK", + "branch": "work/prc-db-bulkops", + "path": "internal/mcp/tools_bulkops.go", + "display": "internal/mcp/tools_bulkops.go", + "kind": "exact", + "line": 8 + }, + { + "owner": "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK", + "branch": "work/prc-db-bulkops", + "path": "internal/mcp/tools_dryrun_test.go", + "display": "internal/mcp/tools_dryrun_test.go", + "kind": "exact", + "line": 8 + }, + { + "owner": "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK", + "branch": "work/prc-db-bulkops", + "path": ".agent/reports/2026-07-10-db-bulkops-behavioral-edge-rework-maker-3.md", + "display": ".agent/reports/2026-07-10-db-bulkops-behavioral-edge-rework-maker-3.md", + "kind": "exact", + "line": 8 + }, + { + "owner": "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK", + "branch": "work/prc-db-bulkops", + "path": ".agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework", + "display": ".agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/**", + "kind": "prefix", + "line": 8 + }, + { + "owner": "DB-TEST-POOL-HYGIENE", + "branch": "work/prc-db-test-pool-hygiene-evidence-r2", + "path": "internal/db/gorm/candidate_store_test.go", + "display": "internal/db/gorm/candidate_store_test.go", + "kind": "exact", + "line": 9 + }, + { + "owner": "DB-TEST-POOL-HYGIENE", + "branch": "work/prc-db-test-pool-hygiene-evidence-r2", + "path": ".agent/reports/2026-07-10-db-test-pool-hygiene-maker.md", + "display": ".agent/reports/2026-07-10-db-test-pool-hygiene-maker.md", + "kind": "exact", + "line": 9 + }, + { + "owner": "DB-TEST-POOL-HYGIENE", + "branch": "work/prc-db-test-pool-hygiene-evidence-r2", + "path": ".agent/reports/2026-07-10-db-test-pool-hygiene-evidence-revision-maker.md", + "display": ".agent/reports/2026-07-10-db-test-pool-hygiene-evidence-revision-maker.md", + "kind": "exact", + "line": 9 + }, + { + "owner": "DB-TEST-POOL-HYGIENE", + "branch": "work/prc-db-test-pool-hygiene-evidence-r2", + "path": ".agent/reports/evidence/production-ready/db-test-pool-hygiene", + "display": ".agent/reports/evidence/production-ready/db-test-pool-hygiene/**", + "kind": "prefix", + "line": 9 + }, + { + "owner": "DB-GOVERNANCE", + "branch": "work/prc-db-governance", + "path": "internal/db/gorm/candidate_store.go", + "display": "internal/db/gorm/candidate_store.go", + "kind": "exact", + "line": 10 + }, + { + "owner": "DB-GOVERNANCE", + "branch": "work/prc-db-governance", + "path": "internal/db/gorm/candidate_store_test.go", + "display": "internal/db/gorm/candidate_store_test.go", + "kind": "exact", + "line": 10 + }, + { + "owner": "DB-GOVERNANCE", + "branch": "work/prc-db-governance", + "path": "internal/db/gorm/rule_arbiter_store_test.go", + "display": "internal/db/gorm/rule_arbiter_store_test.go", + "kind": "exact", + "line": 10 + }, + { + "owner": "DB-GOVERNANCE", + "branch": "work/prc-db-governance", + "path": "internal/db/gorm/rule_governance_store.go", + "display": "internal/db/gorm/rule_governance_store.go", + "kind": "exact", + "line": 10 + }, + { + "owner": "DB-GOVERNANCE", + "branch": "work/prc-db-governance", + "path": "internal/db/gorm/rule_governance_store_test.go", + "display": "internal/db/gorm/rule_governance_store_test.go", + "kind": "exact", + "line": 10 + }, + { + "owner": "DB-GOVERNANCE", + "branch": "work/prc-db-governance", + "path": "internal/db/gorm/rule_governance_rg3_store_test.go", + "display": "internal/db/gorm/rule_governance_rg3_store_test.go", + "kind": "exact", + "line": 10 + }, + { + "owner": "DB-GOVERNANCE", + "branch": "work/prc-db-governance", + "path": "internal/db/gorm/migration_rule_governance.go", + "display": "internal/db/gorm/migration_rule_governance.go", + "kind": "exact", + "line": 10 + }, + { + "owner": "DB-GOVERNANCE", + "branch": "work/prc-db-governance", + "path": "internal/db/gorm/migration_rule_arbiter.go", + "display": "internal/db/gorm/migration_rule_arbiter.go", + "kind": "exact", + "line": 10 + }, + { + "owner": "DB-GOVERNANCE", + "branch": "work/prc-db-governance", + "path": "internal/db/gorm/migration_rule_governance_snapshot_statuses.go", + "display": "internal/db/gorm/migration_rule_governance_snapshot_statuses.go", + "kind": "exact", + "line": 10 + }, + { + "owner": "CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK", + "branch": "work/prc-candidate-review-snapshot-rollback", + "path": "internal/reviewpacket/candidate.go", + "display": "internal/reviewpacket/candidate.go", + "kind": "exact", + "line": 11 + }, + { + "owner": "CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK", + "branch": "work/prc-candidate-review-snapshot-rollback", + "path": "internal/reviewpacket/candidate_test.go", + "display": "internal/reviewpacket/candidate_test.go", + "kind": "exact", + "line": 11 + }, + { + "owner": "CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK", + "branch": "work/prc-candidate-review-snapshot-rollback", + "path": "internal/db/gorm/candidate_store.go", + "display": "internal/db/gorm/candidate_store.go", + "kind": "exact", + "line": 11 + }, + { + "owner": "CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK", + "branch": "work/prc-candidate-review-snapshot-rollback", + "path": "internal/db/gorm/candidate_store_test.go", + "display": "internal/db/gorm/candidate_store_test.go", + "kind": "exact", + "line": 11 + }, + { + "owner": "CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK", + "branch": "work/prc-candidate-review-snapshot-rollback", + "path": "internal/db/gorm/snapshot_store.go", + "display": "internal/db/gorm/snapshot_store.go", + "kind": "exact", + "line": 11 + }, + { + "owner": "CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK", + "branch": "work/prc-candidate-review-snapshot-rollback", + "path": "internal/db/gorm/snapshot_store_test.go", + "display": "internal/db/gorm/snapshot_store_test.go", + "kind": "exact", + "line": 11 + }, + { + "owner": "CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK", + "branch": "work/prc-candidate-review-snapshot-rollback", + "path": "internal/bulkops/rollback_test.go", + "display": "internal/bulkops/rollback_test.go", + "kind": "exact", + "line": 11 + }, + { + "owner": "CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK", + "branch": "work/prc-candidate-review-snapshot-rollback", + "path": "tests/critical/candidate_review/candidate_review_snapshot_rollback_test.go", + "display": "tests/critical/candidate_review/candidate_review_snapshot_rollback_test.go", + "kind": "exact", + "line": 11 + }, + { + "owner": "INGEST-DOC-SNAPSHOT-DEMOLITION", + "branch": "work/prc-ingest-doc-snapshot-demolition", + "path": "internal/bulkops/facade.go", + "display": "internal/bulkops/facade.go", + "kind": "exact", + "line": 13 + }, + { + "owner": "INGEST-DOC-SNAPSHOT-DEMOLITION", + "branch": "work/prc-ingest-doc-snapshot-demolition", + "path": "internal/bulkops/facade_test.go", + "display": "internal/bulkops/facade_test.go", + "kind": "exact", + "line": 13 + }, + { + "owner": "INGEST-DOC-SNAPSHOT-DEMOLITION", + "branch": "work/prc-ingest-doc-snapshot-demolition", + "path": "pkg/models/snapshot.go", + "display": "pkg/models/snapshot.go", + "kind": "exact", + "line": 13 + }, + { + "owner": "INGEST-DOC-SNAPSHOT-DEMOLITION", + "branch": "work/prc-ingest-doc-snapshot-demolition", + "path": "pkg/models/snapshot_test.go", + "display": "pkg/models/snapshot_test.go", + "kind": "exact", + "line": 13 + }, + { + "owner": "INGEST-DOC-SNAPSHOT-DEMOLITION", + "branch": "work/prc-ingest-doc-snapshot-demolition", + "path": "internal/mcp/ingest_snapshot_contract_test.go", + "display": "internal/mcp/ingest_snapshot_contract_test.go", + "kind": "exact", + "line": 13 + }, + { + "owner": "DB-AUTH", + "branch": "work/prc-db-auth", + "path": "internal/db/gorm/user_store.go", + "display": "internal/db/gorm/user_store.go", + "kind": "exact", + "line": 14 + }, + { + "owner": "DB-AUTH", + "branch": "work/prc-db-auth", + "path": "internal/db/gorm/user_store_test.go", + "display": "internal/db/gorm/user_store_test.go", + "kind": "exact", + "line": 14 + }, + { + "owner": "DB-AUTH", + "branch": "work/prc-db-auth", + "path": "internal/worker/auth_handlers.go", + "display": "internal/worker/auth_handlers.go", + "kind": "exact", + "line": 14 + }, + { + "owner": "DB-AUTH", + "branch": "work/prc-db-auth", + "path": "internal/worker/auth_handlers_lifecycle_test.go", + "display": "internal/worker/auth_handlers_lifecycle_test.go", + "kind": "exact", + "line": 14 + }, + { + "owner": "AUTH-BOOTSTRAP-SECURITY", + "branch": "work/prc-auth-bootstrap-security", + "path": "internal/config/config.go", + "display": "internal/config/config.go", + "kind": "exact", + "line": 15 + }, + { + "owner": "AUTH-BOOTSTRAP-SECURITY", + "branch": "work/prc-auth-bootstrap-security", + "path": "internal/config/config_test.go", + "display": "internal/config/config_test.go", + "kind": "exact", + "line": 15 + }, + { + "owner": "AUTH-BOOTSTRAP-SECURITY", + "branch": "work/prc-auth-bootstrap-security", + "path": "internal/config/envnames.go", + "display": "internal/config/envnames.go", + "kind": "exact", + "line": 15 + }, + { + "owner": "AUTH-BOOTSTRAP-SECURITY", + "branch": "work/prc-auth-bootstrap-security", + "path": "internal/db/gorm/user_store.go", + "display": "internal/db/gorm/user_store.go", + "kind": "exact", + "line": 15 + }, + { + "owner": "AUTH-BOOTSTRAP-SECURITY", + "branch": "work/prc-auth-bootstrap-security", + "path": "internal/worker/middleware.go", + "display": "internal/worker/middleware.go", + "kind": "exact", + "line": 15 + }, + { + "owner": "AUTH-BOOTSTRAP-SECURITY", + "branch": "work/prc-auth-bootstrap-security", + "path": "internal/worker/middleware_test.go", + "display": "internal/worker/middleware_test.go", + "kind": "exact", + "line": 15 + }, + { + "owner": "AUTH-BOOTSTRAP-SECURITY", + "branch": "work/prc-auth-bootstrap-security", + "path": "internal/worker/auth_handlers.go", + "display": "internal/worker/auth_handlers.go", + "kind": "exact", + "line": 15 + }, + { + "owner": "AUTH-BOOTSTRAP-SECURITY", + "branch": "work/prc-auth-bootstrap-security", + "path": "internal/worker/auth_bootstrap_limiter.go", + "display": "internal/worker/auth_bootstrap_limiter.go", + "kind": "exact", + "line": 15 + }, + { + "owner": "AUTH-BOOTSTRAP-SECURITY", + "branch": "work/prc-auth-bootstrap-security", + "path": "internal/worker/auth_bootstrap_limiter_test.go", + "display": "internal/worker/auth_bootstrap_limiter_test.go", + "kind": "exact", + "line": 15 + }, + { + "owner": "AUTH-BOOTSTRAP-SECURITY", + "branch": "work/prc-auth-bootstrap-security", + "path": "internal/worker/auth_bootstrap_security_test.go", + "display": "internal/worker/auth_bootstrap_security_test.go", + "kind": "exact", + "line": 15 + }, + { + "owner": "AUTH-BOOTSTRAP-SECURITY", + "branch": "work/prc-auth-bootstrap-security", + "path": "internal/worker/service.go", + "display": "internal/worker/service.go", + "kind": "exact", + "line": 15 + }, + { + "owner": "AUTH-BOOTSTRAP-SECURITY", + "branch": "work/prc-auth-bootstrap-security", + "path": "tests/critical/auth_bootstrap/first_admin_bootstrap_test.go", + "display": "tests/critical/auth_bootstrap/first_admin_bootstrap_test.go", + "kind": "exact", + "line": 15 + }, + { + "owner": "AUTH-BOOTSTRAP-SECURITY", + "branch": "work/prc-auth-bootstrap-security", + "path": "scripts/production-smoke/customer/run-auth-bootstrap-adversary.ps1", + "display": "scripts/production-smoke/customer/run-auth-bootstrap-adversary.ps1", + "kind": "exact", + "line": 15 + }, + { + "owner": "DURABLE-AUDIT-BOUNDARIES", + "branch": "work/prc-durable-audit-boundaries", + "path": "internal/db/gorm/domain_owner_store.go", + "display": "internal/db/gorm/domain_owner_store.go", + "kind": "exact", + "line": 16 + }, + { + "owner": "DURABLE-AUDIT-BOUNDARIES", + "branch": "work/prc-durable-audit-boundaries", + "path": "internal/db/gorm/domain_owner_store_test.go", + "display": "internal/db/gorm/domain_owner_store_test.go", + "kind": "exact", + "line": 16 + }, + { + "owner": "DURABLE-AUDIT-BOUNDARIES", + "branch": "work/prc-durable-audit-boundaries", + "path": "internal/db/gorm/user_store.go", + "display": "internal/db/gorm/user_store.go", + "kind": "exact", + "line": 16 + }, + { + "owner": "DURABLE-AUDIT-BOUNDARIES", + "branch": "work/prc-durable-audit-boundaries", + "path": "internal/worker/auth_handlers.go", + "display": "internal/worker/auth_handlers.go", + "kind": "exact", + "line": 16 + }, + { + "owner": "DURABLE-AUDIT-BOUNDARIES", + "branch": "work/prc-durable-audit-boundaries", + "path": "internal/worker/auth_audit_durability_test.go", + "display": "internal/worker/auth_audit_durability_test.go", + "kind": "exact", + "line": 16 + }, + { + "owner": "DURABLE-AUDIT-BOUNDARIES", + "branch": "work/prc-durable-audit-boundaries", + "path": "internal/bulkops/facade.go", + "display": "internal/bulkops/facade.go", + "kind": "exact", + "line": 16 + }, + { + "owner": "DURABLE-AUDIT-BOUNDARIES", + "branch": "work/prc-durable-audit-boundaries", + "path": "internal/bulkops/audit_durability_test.go", + "display": "internal/bulkops/audit_durability_test.go", + "kind": "exact", + "line": 16 + }, + { + "owner": "DURABLE-AUDIT-BOUNDARIES", + "branch": "work/prc-durable-audit-boundaries", + "path": "scripts/production-smoke/customer/run-durable-audit-faults.ps1", + "display": "scripts/production-smoke/customer/run-durable-audit-faults.ps1", + "kind": "exact", + "line": 16 + }, + { + "owner": "DB-CRYSTALLIZATION", + "branch": "work/prc-db-crystallization", + "path": "internal/worker/handlers_hooks_crystallization_integration_test.go", + "display": "internal/worker/handlers_hooks_crystallization_integration_test.go", + "kind": "exact", + "line": 17 + }, + { + "owner": "CRYSTALLIZATION-DREAM-CYCLE-CORRECTNESS", + "branch": "work/prc-crystallization-dream-cycle-correctness", + "path": "internal/worker/dream_cycle.go", + "display": "internal/worker/dream_cycle.go", + "kind": "exact", + "line": 18 + }, + { + "owner": "CRYSTALLIZATION-DREAM-CYCLE-CORRECTNESS", + "branch": "work/prc-crystallization-dream-cycle-correctness", + "path": "internal/worker/dream_cycle_test.go", + "display": "internal/worker/dream_cycle_test.go", + "kind": "exact", + "line": 18 + }, + { + "owner": "CRYSTALLIZATION-DREAM-CYCLE-CORRECTNESS", + "branch": "work/prc-crystallization-dream-cycle-correctness", + "path": ".agent/reports/2026-07-10-crystallization-dream-cycle-correctness-maker.md", + "display": ".agent/reports/2026-07-10-crystallization-dream-cycle-correctness-maker.md", + "kind": "exact", + "line": 18 + }, + { + "owner": "CRYSTALLIZATION-DREAM-CYCLE-CORRECTNESS", + "branch": "work/prc-crystallization-dream-cycle-correctness", + "path": ".agent/e/cdc", + "display": ".agent/e/cdc/**", + "kind": "prefix", + "line": 18 + }, + { + "owner": "DB-EMBEDDING-STATS", + "branch": "work/prc-db-embedding-stats", + "path": "internal/embedding/store.go", + "display": "internal/embedding/store.go", + "kind": "exact", + "line": 19 + }, + { + "owner": "DB-EMBEDDING-STATS", + "branch": "work/prc-db-embedding-stats", + "path": "internal/embedding/store_stats_test.go", + "display": "internal/embedding/store_stats_test.go", + "kind": "exact", + "line": 19 + }, + { + "owner": "DB-EMBEDDING-EVIDENCE-TRANSPORT", + "branch": "work/prc-db-embedding-evidence-transport-r5", + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport", + "display": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/**", + "kind": "prefix", + "line": 20 + }, + { + "owner": "DB-EMBEDDING-EVIDENCE-TRANSPORT", + "branch": "work/prc-db-embedding-evidence-transport-r5", + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3", + "display": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/**", + "kind": "prefix", + "line": 20 + }, + { + "owner": "DB-EMBEDDING-EVIDENCE-TRANSPORT", + "branch": "work/prc-db-embedding-evidence-transport-r5", + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4", + "display": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4/**", + "kind": "prefix", + "line": 20 + }, + { + "owner": "DB-EMBEDDING-EVIDENCE-TRANSPORT", + "branch": "work/prc-db-embedding-evidence-transport-r5", + "path": ".agent/specs/db-embedding-stats-evidence-transport/evidence", + "display": ".agent/specs/db-embedding-stats-evidence-transport/evidence/**", + "kind": "prefix", + "line": 20 + }, + { + "owner": "DB-REAPER", + "branch": "work/prc-db-reaper", + "path": "internal/worker/reaper/reaper.go", + "display": "internal/worker/reaper/reaper.go", + "kind": "exact", + "line": 21 + }, + { + "owner": "DB-REAPER", + "branch": "work/prc-db-reaper", + "path": "internal/worker/reaper/reaper_test.go", + "display": "internal/worker/reaper/reaper_test.go", + "kind": "exact", + "line": 21 + }, + { + "owner": "SECURITY-TOOLCHAIN", + "branch": "work/prc-security-toolchain", + "path": "go.mod", + "display": "go.mod", + "kind": "exact", + "line": 22 + }, + { + "owner": "SECURITY-TOOLCHAIN", + "branch": "work/prc-security-toolchain", + "path": "go.sum", + "display": "go.sum", + "kind": "exact", + "line": 22 + }, + { + "owner": "SECURITY-TOOLCHAIN", + "branch": "work/prc-security-toolchain", + "path": "Dockerfile", + "display": "Dockerfile", + "kind": "exact", + "line": 22 + }, + { + "owner": "RELEASE-GATES", + "branch": "work/prc-release-gates-revision8-maker", + "path": ".github/workflows/test.yml", + "display": ".github/workflows/test.yml", + "kind": "exact", + "line": 23 + }, + { + "owner": "RELEASE-GATES", + "branch": "work/prc-release-gates-revision8-maker", + "path": "scripts/production-gates/assert-plan-path-ownership.ps1", + "display": "scripts/production-gates/assert-plan-path-ownership.ps1", + "kind": "exact", + "line": 23 + }, + { + "owner": "RELEASE-GATES", + "branch": "work/prc-release-gates-revision8-maker", + "path": "scripts/production-gates/run-db-suite.ps1", + "display": "scripts/production-gates/run-db-suite.ps1", + "kind": "exact", + "line": 23 + }, + { + "owner": "RELEASE-GATES", + "branch": "work/prc-release-gates-revision8-maker", + "path": ".agent/specs/release-gates-r8/evidence/release-gates", + "display": ".agent/specs/release-gates-r8/evidence/release-gates/**", + "kind": "prefix", + "line": 23 + }, + { + "owner": "RELEASE-GATES", + "branch": "work/prc-release-gates-revision8-maker", + "path": ".agent/reports/2026-07-10-release-gates-r8-maker.md", + "display": ".agent/reports/2026-07-10-release-gates-r8-maker.md", + "kind": "exact", + "line": 23 + }, + { + "owner": "IMAGE-REMEDIATION", + "branch": "work/prc-image-remediation", + "path": "Dockerfile", + "display": "Dockerfile", + "kind": "exact", + "line": 24 + }, + { + "owner": "IMAGE-REMEDIATION", + "branch": "work/prc-image-remediation", + "path": "cmd/engram-healthcheck/main.go", + "display": "cmd/engram-healthcheck/main.go", + "kind": "exact", + "line": 24 + }, + { + "owner": "IMAGE-REMEDIATION", + "branch": "work/prc-image-remediation", + "path": "cmd/engram-healthcheck/main_test.go", + "display": "cmd/engram-healthcheck/main_test.go", + "kind": "exact", + "line": 24 + }, + { + "owner": "IMAGE-REMEDIATION", + "branch": "work/prc-image-remediation", + "path": "apps/operator-console/package.json", + "display": "apps/operator-console/package.json", + "kind": "exact", + "line": 24 + }, + { + "owner": "IMAGE-REMEDIATION", + "branch": "work/prc-image-remediation", + "path": "apps/operator-console/package-lock.json", + "display": "apps/operator-console/package-lock.json", + "kind": "exact", + "line": 24 + }, + { + "owner": "IMAGE-REMEDIATION", + "branch": "work/prc-image-remediation", + "path": "deploy/postgres/Dockerfile", + "display": "deploy/postgres/Dockerfile", + "kind": "exact", + "line": 24 + }, + { + "owner": "IMAGE-REMEDIATION", + "branch": "work/prc-image-remediation", + "path": "docker-compose.yml", + "display": "docker-compose.yml", + "kind": "exact", + "line": 24 + }, + { + "owner": "IMAGE-REMEDIATION", + "branch": "work/prc-image-remediation", + "path": "deploy/docker-compose.runtime.yml", + "display": "deploy/docker-compose.runtime.yml", + "kind": "exact", + "line": 24 + }, + { + "owner": "IMAGE-REMEDIATION", + "branch": "work/prc-image-remediation", + "path": "docs/DEPLOYMENT.md", + "display": "docs/DEPLOYMENT.md", + "kind": "exact", + "line": 24 + }, + { + "owner": "IMAGE-REMEDIATION", + "branch": "work/prc-image-remediation", + "path": "docs/PRODUCTION-TESTING-PLAYBOOK.md", + "display": "docs/PRODUCTION-TESTING-PLAYBOOK.md", + "kind": "exact", + "line": 24 + }, + { + "owner": "IMAGE-REMEDIATION", + "branch": "work/prc-image-remediation", + "path": ".github/workflows/test.yml", + "display": ".github/workflows/test.yml", + "kind": "exact", + "line": 24 + }, + { + "owner": "IMAGE-REMEDIATION", + "branch": "work/prc-image-remediation", + "path": ".github/workflows/docker.yaml", + "display": ".github/workflows/docker.yaml", + "kind": "exact", + "line": 24 + }, + { + "owner": "IMAGE-REMEDIATION", + "branch": "work/prc-image-remediation", + "path": ".github/workflows/docker-publish.yml", + "display": ".github/workflows/docker-publish.yml", + "kind": "exact", + "line": 24 + }, + { + "owner": "IMAGE-REMEDIATION", + "branch": "work/prc-image-remediation", + "path": "scripts/production-gates/build-and-scan-images.ps1", + "display": "scripts/production-gates/build-and-scan-images.ps1", + "kind": "exact", + "line": 24 + }, + { + "owner": "IMAGE-REMEDIATION", + "branch": "work/prc-image-remediation", + "path": "tests/critical/runtime/image_runtime_contract_test.go", + "display": "tests/critical/runtime/image_runtime_contract_test.go", + "kind": "exact", + "line": 24 + }, + { + "owner": "IMAGE-REMEDIATION", + "branch": "work/prc-image-remediation", + "path": "tests/critical/runtime/postgres_image_contract_test.go", + "display": "tests/critical/runtime/postgres_image_contract_test.go", + "kind": "exact", + "line": 24 + }, + { + "owner": "SECURITY-PROJECT-IDENTITY", + "branch": "work/prc-security-project-identity-r3", + "path": "internal/db/gorm/project_store.go", + "display": "internal/db/gorm/project_store.go", + "kind": "exact", + "line": 25 + }, + { + "owner": "SECURITY-PROJECT-IDENTITY", + "branch": "work/prc-security-project-identity-r3", + "path": "internal/db/gorm/project_store_test.go", + "display": "internal/db/gorm/project_store_test.go", + "kind": "exact", + "line": 25 + }, + { + "owner": "SECURITY-PROJECT-IDENTITY", + "branch": "work/prc-security-project-identity-r3", + "path": "internal/grpcserver/project_identity_v2_test.go", + "display": "internal/grpcserver/project_identity_v2_test.go", + "kind": "exact", + "line": 25 + }, + { + "owner": "OPENCLAW-RELEASE", + "branch": "work/prc-openclaw-release", + "path": "plugin/openclaw-engram/.gitignore", + "display": "plugin/openclaw-engram/.gitignore", + "kind": "exact", + "line": 26 + }, + { + "owner": "OPENCLAW-RELEASE", + "branch": "work/prc-openclaw-release", + "path": "plugin/openclaw-engram/package.json", + "display": "plugin/openclaw-engram/package.json", + "kind": "exact", + "line": 26 + }, + { + "owner": "OPENCLAW-RELEASE", + "branch": "work/prc-openclaw-release", + "path": "plugin/openclaw-engram/package-lock.json", + "display": "plugin/openclaw-engram/package-lock.json", + "kind": "exact", + "line": 26 + }, + { + "owner": "OPENCLAW-RELEASE", + "branch": "work/prc-openclaw-release", + "path": "plugin/openclaw-engram/openclaw.plugin.json", + "display": "plugin/openclaw-engram/openclaw.plugin.json", + "kind": "exact", + "line": 26 + }, + { + "owner": "OPENCLAW-RELEASE", + "branch": "work/prc-openclaw-release", + "path": "plugin/openclaw-engram/README.md", + "display": "plugin/openclaw-engram/README.md", + "kind": "exact", + "line": 26 + }, + { + "owner": "OPENCLAW-RELEASE", + "branch": "work/prc-openclaw-release", + "path": ".github/workflows/plugin-publish.yml", + "display": ".github/workflows/plugin-publish.yml", + "kind": "exact", + "line": 26 + }, + { + "owner": "OPENCLAW-RELEASE", + "branch": "work/prc-openclaw-release", + "path": "docs/RELEASE-PROTOCOL.md", + "display": "docs/RELEASE-PROTOCOL.md", + "kind": "exact", + "line": 26 + }, + { + "owner": "UPDATE-LIFECYCLE", + "branch": "work/prc-security-updater", + "path": "internal/update/update.go", + "display": "internal/update/update.go", + "kind": "exact", + "line": 27 + }, + { + "owner": "UPDATE-LIFECYCLE", + "branch": "work/prc-security-updater", + "path": "internal/update/update_test.go", + "display": "internal/update/update_test.go", + "kind": "exact", + "line": 27 + }, + { + "owner": "UPDATE-LIFECYCLE", + "branch": "work/prc-security-updater", + "path": "internal/worker/handlers_update.go", + "display": "internal/worker/handlers_update.go", + "kind": "exact", + "line": 27 + }, + { + "owner": "UPDATE-LIFECYCLE", + "branch": "work/prc-security-updater", + "path": "internal/worker/handlers_update_test.go", + "display": "internal/worker/handlers_update_test.go", + "kind": "exact", + "line": 27 + }, + { + "owner": "UPDATE-LIFECYCLE", + "branch": "work/prc-security-updater", + "path": "scripts/install.sh", + "display": "scripts/install.sh", + "kind": "exact", + "line": 27 + }, + { + "owner": "UPDATE-LIFECYCLE", + "branch": "work/prc-security-updater", + "path": "scripts/install.ps1", + "display": "scripts/install.ps1", + "kind": "exact", + "line": 27 + }, + { + "owner": "UPDATE-LIFECYCLE", + "branch": "work/prc-security-updater", + "path": ".goreleaser.yaml", + "display": ".goreleaser.yaml", + "kind": "exact", + "line": 27 + }, + { + "owner": "UPDATE-LIFECYCLE", + "branch": "work/prc-security-updater", + "path": ".github/workflows/release.yaml", + "display": ".github/workflows/release.yaml", + "kind": "exact", + "line": 27 + }, + { + "owner": "UPDATE-LIFECYCLE", + "branch": "work/prc-security-updater", + "path": "plugin/engram/hooks/hook-cli.test.js", + "display": "plugin/engram/hooks/hook-cli.test.js", + "kind": "exact", + "line": 27 + }, + { + "owner": "DOCUMENT-INGEST-PUBLIC-TRUTH", + "branch": "work/prc-document-ingest-public-truth", + "path": "internal/mcp/server.go", + "display": "internal/mcp/server.go", + "kind": "exact", + "line": 29 + }, + { + "owner": "DOCUMENT-INGEST-PUBLIC-TRUTH", + "branch": "work/prc-document-ingest-public-truth", + "path": "internal/mcp/ingest_document_description_test.go", + "display": "internal/mcp/ingest_document_description_test.go", + "kind": "exact", + "line": 29 + }, + { + "owner": "MCP-STRUCTURED-INPUT-VALIDATION", + "branch": "work/prc-mcp-structured-input-validation", + "path": "internal/mcp/coerce.go", + "display": "internal/mcp/coerce.go", + "kind": "exact", + "line": 31 + }, + { + "owner": "MCP-STRUCTURED-INPUT-VALIDATION", + "branch": "work/prc-mcp-structured-input-validation", + "path": "internal/mcp/coerce_test.go", + "display": "internal/mcp/coerce_test.go", + "kind": "exact", + "line": 31 + }, + { + "owner": "MCP-STRUCTURED-INPUT-VALIDATION", + "branch": "work/prc-mcp-structured-input-validation", + "path": "internal/mcp/tools_candidates.go", + "display": "internal/mcp/tools_candidates.go", + "kind": "exact", + "line": 31 + }, + { + "owner": "MCP-STRUCTURED-INPUT-VALIDATION", + "branch": "work/prc-mcp-structured-input-validation", + "path": "internal/mcp/tools_candidates_test.go", + "display": "internal/mcp/tools_candidates_test.go", + "kind": "exact", + "line": 31 + }, + { + "owner": "MCP-STRUCTURED-INPUT-VALIDATION", + "branch": "work/prc-mcp-structured-input-validation", + "path": "internal/mcp/tools_memory.go", + "display": "internal/mcp/tools_memory.go", + "kind": "exact", + "line": 31 + }, + { + "owner": "MCP-STRUCTURED-INPUT-VALIDATION", + "branch": "work/prc-mcp-structured-input-validation", + "path": "internal/mcp/tools_memory_edit_test.go", + "display": "internal/mcp/tools_memory_edit_test.go", + "kind": "exact", + "line": 31 + }, + { + "owner": "MCP-STRUCTURED-INPUT-VALIDATION", + "branch": "work/prc-mcp-structured-input-validation", + "path": "internal/mcp/tools_memory_significance.go", + "display": "internal/mcp/tools_memory_significance.go", + "kind": "exact", + "line": 31 + }, + { + "owner": "MCP-STRUCTURED-INPUT-VALIDATION", + "branch": "work/prc-mcp-structured-input-validation", + "path": "internal/mcp/tools_memory_significance_test.go", + "display": "internal/mcp/tools_memory_significance_test.go", + "kind": "exact", + "line": 31 + }, + { + "owner": "MCP-STRUCTURED-INPUT-VALIDATION", + "branch": "work/prc-mcp-structured-input-validation", + "path": "internal/mcp/tools_store_consolidated.go", + "display": "internal/mcp/tools_store_consolidated.go", + "kind": "exact", + "line": 31 + }, + { + "owner": "MCP-STRUCTURED-INPUT-VALIDATION", + "branch": "work/prc-mcp-structured-input-validation", + "path": "internal/mcp/tools_settings.go", + "display": "internal/mcp/tools_settings.go", + "kind": "exact", + "line": 31 + }, + { + "owner": "MCP-STRUCTURED-INPUT-VALIDATION", + "branch": "work/prc-mcp-structured-input-validation", + "path": "internal/mcp/tools_settings_test.go", + "display": "internal/mcp/tools_settings_test.go", + "kind": "exact", + "line": 31 + }, + { + "owner": "MCP-STRUCTURED-INPUT-VALIDATION", + "branch": "work/prc-mcp-structured-input-validation", + "path": "internal/mcp/tools_documents_v2.go", + "display": "internal/mcp/tools_documents_v2.go", + "kind": "exact", + "line": 31 + }, + { + "owner": "MCP-STRUCTURED-INPUT-VALIDATION", + "branch": "work/prc-mcp-structured-input-validation", + "path": "internal/mcp/tools_rule_governance.go", + "display": "internal/mcp/tools_rule_governance.go", + "kind": "exact", + "line": 31 + }, + { + "owner": "MCP-STRUCTURED-INPUT-VALIDATION", + "branch": "work/prc-mcp-structured-input-validation", + "path": "internal/mcp/tools_rule_governance_test.go", + "display": "internal/mcp/tools_rule_governance_test.go", + "kind": "exact", + "line": 31 + }, + { + "owner": "MCP-STRUCTURED-INPUT-VALIDATION", + "branch": "work/prc-mcp-structured-input-validation", + "path": "internal/mcp/structured_input_validation_test.go", + "display": "internal/mcp/structured_input_validation_test.go", + "kind": "exact", + "line": 31 + }, + { + "owner": "REDACTION-LIVE-CONTRACT", + "branch": "work/prc-redaction-live-contract", + "path": "internal/redaction/layer.go", + "display": "internal/redaction/layer.go", + "kind": "exact", + "line": 32 + }, + { + "owner": "REDACTION-LIVE-CONTRACT", + "branch": "work/prc-redaction-live-contract", + "path": "internal/redaction/layer_test.go", + "display": "internal/redaction/layer_test.go", + "kind": "exact", + "line": 32 + }, + { + "owner": "REDACTION-LIVE-CONTRACT", + "branch": "work/prc-redaction-live-contract", + "path": "internal/redaction/rejection_test.go", + "display": "internal/redaction/rejection_test.go", + "kind": "exact", + "line": 32 + }, + { + "owner": "REDACTION-LIVE-CONTRACT", + "branch": "work/prc-redaction-live-contract", + "path": "internal/mcp/redaction_guard.go", + "display": "internal/mcp/redaction_guard.go", + "kind": "exact", + "line": 32 + }, + { + "owner": "REDACTION-LIVE-CONTRACT", + "branch": "work/prc-redaction-live-contract", + "path": "internal/mcp/redaction_guard_test.go", + "display": "internal/mcp/redaction_guard_test.go", + "kind": "exact", + "line": 32 + }, + { + "owner": "REDACTION-LIVE-CONTRACT", + "branch": "work/prc-redaction-live-contract", + "path": "internal/mcp/tools_memory.go", + "display": "internal/mcp/tools_memory.go", + "kind": "exact", + "line": 32 + }, + { + "owner": "REDACTION-LIVE-CONTRACT", + "branch": "work/prc-redaction-live-contract", + "path": "internal/mcp/tools_rules.go", + "display": "internal/mcp/tools_rules.go", + "kind": "exact", + "line": 32 + }, + { + "owner": "REDACTION-LIVE-CONTRACT", + "branch": "work/prc-redaction-live-contract", + "path": "internal/mcp/tools_memory_redaction_audit_test.go", + "display": "internal/mcp/tools_memory_redaction_audit_test.go", + "kind": "exact", + "line": 32 + }, + { + "owner": "REDACTION-LIVE-CONTRACT", + "branch": "work/prc-redaction-live-contract", + "path": "internal/mcp/tools_rules_redaction_audit_test.go", + "display": "internal/mcp/tools_rules_redaction_audit_test.go", + "kind": "exact", + "line": 32 + }, + { + "owner": "REDACTION-LIVE-CONTRACT", + "branch": "work/prc-redaction-live-contract", + "path": "internal/worker/service.go", + "display": "internal/worker/service.go", + "kind": "exact", + "line": 32 + }, + { + "owner": "REDACTION-LIVE-CONTRACT", + "branch": "work/prc-redaction-live-contract", + "path": "internal/worker/service_redaction_test.go", + "display": "internal/worker/service_redaction_test.go", + "kind": "exact", + "line": 32 + }, + { + "owner": "REDACTION-LIVE-CONTRACT", + "branch": "work/prc-redaction-live-contract", + "path": "docs/operating-engram.md", + "display": "docs/operating-engram.md", + "kind": "exact", + "line": 32 + }, + { + "owner": "REDACTION-LIVE-CONTRACT", + "branch": "work/prc-redaction-live-contract", + "path": ".agent/reports/evidence/production-ready/redaction-live-contract", + "display": ".agent/reports/evidence/production-ready/redaction-live-contract/**", + "kind": "prefix", + "line": 32 + }, + { + "owner": "RETRIEVAL-VECTOR-CONTRACT", + "branch": "work/prc-retrieval-vector-contract", + "path": "internal/retrieval/hybrid_integration_test.go", + "display": "internal/retrieval/hybrid_integration_test.go", + "kind": "exact", + "line": 34 + }, + { + "owner": "STATIC-EMBED-CONTRACT", + "branch": "work/prc-static-embed-contract", + "path": "internal/worker/static_embed_test.go", + "display": "internal/worker/static_embed_test.go", + "kind": "exact", + "line": 35 + }, + { + "owner": "PRE-V5-UPGRADE-CONTRACT", + "branch": "work/prc-pre-v5-upgrade-contract", + "path": "internal/db/gorm/migrations_integration_test.go", + "display": "internal/db/gorm/migrations_integration_test.go", + "kind": "exact", + "line": 36 + }, + { + "owner": "PRE-V5-UPGRADE-CONTRACT", + "branch": "work/prc-pre-v5-upgrade-contract", + "path": "internal/grpcserver/credential_migration_test.go", + "display": "internal/grpcserver/credential_migration_test.go", + "kind": "exact", + "line": 36 + }, + { + "owner": "PRE-V5-UPGRADE-CONTRACT", + "branch": "work/prc-pre-v5-upgrade-contract", + "path": "tests/fixtures/pre-v5", + "display": "tests/fixtures/pre-v5/**", + "kind": "prefix", + "line": 36 + }, + { + "owner": "PRE-V5-UPGRADE-CONTRACT", + "branch": "work/prc-pre-v5-upgrade-contract", + "path": "tests/critical/recovery/pre_v5_upgrade_test.go", + "display": "tests/critical/recovery/pre_v5_upgrade_test.go", + "kind": "exact", + "line": 36 + }, + { + "owner": "PRE-V5-UPGRADE-CONTRACT", + "branch": "work/prc-pre-v5-upgrade-contract", + "path": "scripts/production-smoke/customer/run-pre-v5-upgrade.ps1", + "display": "scripts/production-smoke/customer/run-pre-v5-upgrade.ps1", + "kind": "exact", + "line": 36 + }, + { + "owner": "T007-COMPAT-DEMOLITION-CLASSIFICATION", + "branch": "work/prc-t007-compat-classification", + "path": "internal/mcp/store_memory_compat_t007_test.go", + "display": "internal/mcp/store_memory_compat_t007_test.go", + "kind": "exact", + "line": 37 + }, + { + "owner": "DB-RULES-ISOLATION", + "branch": "work/prc-db-rules-isolation", + "path": "internal/worker/handlers_rules_test.go", + "display": "internal/worker/handlers_rules_test.go", + "kind": "exact", + "line": 38 + }, + { + "owner": "DB-RULES-ISOLATION", + "branch": "work/prc-db-rules-isolation", + "path": "scripts/production-gates/run-db-rules-isolation.ps1", + "display": "scripts/production-gates/run-db-rules-isolation.ps1", + "kind": "exact", + "line": 38 + }, + { + "owner": "COVERAGE-CMD-ENGRAM", + "branch": "work/prc-coverage-cmd-engram", + "path": "cmd/engram/production_readiness_coverage_test.go", + "display": "cmd/engram/production_readiness_coverage_test.go", + "kind": "exact", + "line": 39 + }, + { + "owner": "COVERAGE-CMD-SERVER", + "branch": "work/prc-coverage-cmd-server", + "path": "cmd/engram-server/production_readiness_coverage_test.go", + "display": "cmd/engram-server/production_readiness_coverage_test.go", + "kind": "exact", + "line": 40 + }, + { + "owner": "COVERAGE-UPDATE", + "branch": "work/prc-coverage-update", + "path": "internal/update/production_readiness_coverage_test.go", + "display": "internal/update/production_readiness_coverage_test.go", + "kind": "exact", + "line": 41 + }, + { + "owner": "COVERAGE-WORKER", + "branch": "work/prc-coverage-worker", + "path": "internal/worker/production_readiness_coverage_test.go", + "display": "internal/worker/production_readiness_coverage_test.go", + "kind": "exact", + "line": 43 + }, + { + "owner": "COVERAGE-MCP", + "branch": "work/prc-coverage-mcp", + "path": "internal/mcp/production_readiness_coverage_test.go", + "display": "internal/mcp/production_readiness_coverage_test.go", + "kind": "exact", + "line": 44 + }, + { + "owner": "COVERAGE-GORM", + "branch": "work/prc-coverage-gorm", + "path": "internal/db/gorm/production_readiness_coverage_test.go", + "display": "internal/db/gorm/production_readiness_coverage_test.go", + "kind": "exact", + "line": 45 + }, + { + "owner": "COVERAGE-LOOM", + "branch": "work/prc-coverage-loom", + "path": "internal/handlers/loom/production_readiness_coverage_test.go", + "display": "internal/handlers/loom/production_readiness_coverage_test.go", + "kind": "exact", + "line": 46 + }, + { + "owner": "DEPLOYMENT-ROLLBACK", + "branch": "work/prc-deployment-rollback", + "path": "docker-compose.yml", + "display": "docker-compose.yml", + "kind": "exact", + "line": 47 + }, + { + "owner": "DEPLOYMENT-ROLLBACK", + "branch": "work/prc-deployment-rollback", + "path": "deploy/docker-compose.runtime.yml", + "display": "deploy/docker-compose.runtime.yml", + "kind": "exact", + "line": 47 + }, + { + "owner": "DEPLOYMENT-ROLLBACK", + "branch": "work/prc-deployment-rollback", + "path": "deploy/docker-compose.operator-web-standalone.yml", + "display": "deploy/docker-compose.operator-web-standalone.yml", + "kind": "exact", + "line": 47 + }, + { + "owner": "DEPLOYMENT-ROLLBACK", + "branch": "work/prc-deployment-rollback", + "path": "deploy/entrypoint-server.sh", + "display": "deploy/entrypoint-server.sh", + "kind": "exact", + "line": 47 + }, + { + "owner": "DEPLOYMENT-ROLLBACK", + "branch": "work/prc-deployment-rollback", + "path": "deploy/healthcheck-server.sh", + "display": "deploy/healthcheck-server.sh", + "kind": "exact", + "line": 47 + }, + { + "owner": "DEPLOYMENT-ROLLBACK", + "branch": "work/prc-deployment-rollback", + "path": "deploy/verify-rollback.ps1", + "display": "deploy/verify-rollback.ps1", + "kind": "exact", + "line": 47 + }, + { + "owner": "DEPLOYMENT-ROLLBACK", + "branch": "work/prc-deployment-rollback", + "path": "deploy/verify-runtime-policy.ps1", + "display": "deploy/verify-runtime-policy.ps1", + "kind": "exact", + "line": 47 + }, + { + "owner": "RECOVERY-DATA", + "branch": "work/prc-recovery-data", + "path": "scripts/recovery/start-disposable-postgres.ps1", + "display": "scripts/recovery/start-disposable-postgres.ps1", + "kind": "exact", + "line": 48 + }, + { + "owner": "RECOVERY-DATA", + "branch": "work/prc-recovery-data", + "path": "scripts/recovery/verify-postgres-roundtrip.ps1", + "display": "scripts/recovery/verify-postgres-roundtrip.ps1", + "kind": "exact", + "line": 48 + }, + { + "owner": "RECOVERY-DATA", + "branch": "work/prc-recovery-data", + "path": "scripts/recovery/seed-recovery-fixture.ps1", + "display": "scripts/recovery/seed-recovery-fixture.ps1", + "kind": "exact", + "line": 48 + }, + { + "owner": "RECOVERY-DATA", + "branch": "work/prc-recovery-data", + "path": "scripts/recovery/assert-recovery-fixture.ps1", + "display": "scripts/recovery/assert-recovery-fixture.ps1", + "kind": "exact", + "line": 48 + }, + { + "owner": "RECOVERY-DATA", + "branch": "work/prc-recovery-data", + "path": "tests/critical/recovery/postgres_roundtrip_test.go", + "display": "tests/critical/recovery/postgres_roundtrip_test.go", + "kind": "exact", + "line": 48 + }, + { + "owner": "OBSERVABILITY-OTLP", + "branch": "work/prc-observability-otlp", + "path": "internal/module/obs/logging.go", + "display": "internal/module/obs/logging.go", + "kind": "exact", + "line": 49 + }, + { + "owner": "OBSERVABILITY-OTLP", + "branch": "work/prc-observability-otlp", + "path": "internal/module/obs/logging_test.go", + "display": "internal/module/obs/logging_test.go", + "kind": "exact", + "line": 49 + }, + { + "owner": "OBSERVABILITY-OTLP", + "branch": "work/prc-observability-otlp", + "path": "internal/module/obs/meter.go", + "display": "internal/module/obs/meter.go", + "kind": "exact", + "line": 49 + }, + { + "owner": "OBSERVABILITY-OTLP", + "branch": "work/prc-observability-otlp", + "path": "internal/module/obs/meter_test.go", + "display": "internal/module/obs/meter_test.go", + "kind": "exact", + "line": 49 + }, + { + "owner": "OBSERVABILITY-OTLP", + "branch": "work/prc-observability-otlp", + "path": "internal/module/obs/metrics.go", + "display": "internal/module/obs/metrics.go", + "kind": "exact", + "line": 49 + }, + { + "owner": "OBSERVABILITY-OTLP", + "branch": "work/prc-observability-otlp", + "path": "internal/module/obs/metrics_test.go", + "display": "internal/module/obs/metrics_test.go", + "kind": "exact", + "line": 49 + }, + { + "owner": "OBSERVABILITY-OTLP", + "branch": "work/prc-observability-otlp", + "path": "cmd/engram-server/main.go", + "display": "cmd/engram-server/main.go", + "kind": "exact", + "line": 49 + }, + { + "owner": "OBSERVABILITY-OTLP", + "branch": "work/prc-observability-otlp", + "path": "cmd/engram-server/main_test.go", + "display": "cmd/engram-server/main_test.go", + "kind": "exact", + "line": 49 + }, + { + "owner": "OBSERVABILITY-OTLP", + "branch": "work/prc-observability-otlp", + "path": "scripts/production-smoke/verify-otlp.ps1", + "display": "scripts/production-smoke/verify-otlp.ps1", + "kind": "exact", + "line": 49 + }, + { + "owner": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "path": "internal/scope/domain_policy.go", + "display": "internal/scope/domain_policy.go", + "kind": "exact", + "line": 50 + }, + { + "owner": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "path": "internal/scope/domain_policy_test.go", + "display": "internal/scope/domain_policy_test.go", + "kind": "exact", + "line": 50 + }, + { + "owner": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "path": "internal/scope/filter.go", + "display": "internal/scope/filter.go", + "kind": "exact", + "line": 50 + }, + { + "owner": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "path": "internal/scope/filter_test.go", + "display": "internal/scope/filter_test.go", + "kind": "exact", + "line": 50 + }, + { + "owner": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "path": "internal/scope/filter_principal_test.go", + "display": "internal/scope/filter_principal_test.go", + "kind": "exact", + "line": 50 + }, + { + "owner": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "path": "internal/scope/filter_w4_test.go", + "display": "internal/scope/filter_w4_test.go", + "kind": "exact", + "line": 50 + }, + { + "owner": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "path": "internal/principalmemory/access_policy.go", + "display": "internal/principalmemory/access_policy.go", + "kind": "exact", + "line": 50 + }, + { + "owner": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "path": "internal/principalmemory/access_policy_test.go", + "display": "internal/principalmemory/access_policy_test.go", + "kind": "exact", + "line": 50 + }, + { + "owner": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "path": "internal/principalmemory/domain_registry.go", + "display": "internal/principalmemory/domain_registry.go", + "kind": "exact", + "line": 50 + }, + { + "owner": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "path": "internal/principalmemory/domain_registry_test.go", + "display": "internal/principalmemory/domain_registry_test.go", + "kind": "exact", + "line": 50 + }, + { + "owner": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "path": "internal/principalmemory/query_service.go", + "display": "internal/principalmemory/query_service.go", + "kind": "exact", + "line": 50 + }, + { + "owner": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "path": "internal/principalmemory/query_service_test.go", + "display": "internal/principalmemory/query_service_test.go", + "kind": "exact", + "line": 50 + }, + { + "owner": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "path": "internal/mcp/tools_principal_memory.go", + "display": "internal/mcp/tools_principal_memory.go", + "kind": "exact", + "line": 50 + }, + { + "owner": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "path": "internal/mcp/tools_principal_memory_test.go", + "display": "internal/mcp/tools_principal_memory_test.go", + "kind": "exact", + "line": 50 + }, + { + "owner": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "path": "internal/mcp/tools_recall_principal_test.go", + "display": "internal/mcp/tools_recall_principal_test.go", + "kind": "exact", + "line": 50 + }, + { + "owner": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "path": "internal/mcp/recall_visibility_backfill_test.go", + "display": "internal/mcp/recall_visibility_backfill_test.go", + "kind": "exact", + "line": 50 + }, + { + "owner": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "path": "internal/mcp/store_memory_principal_test.go", + "display": "internal/mcp/store_memory_principal_test.go", + "kind": "exact", + "line": 50 + }, + { + "owner": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "path": "internal/worker/handlers_principal_memory.go", + "display": "internal/worker/handlers_principal_memory.go", + "kind": "exact", + "line": 50 + }, + { + "owner": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "path": "internal/worker/handlers_principal_memory_test.go", + "display": "internal/worker/handlers_principal_memory_test.go", + "kind": "exact", + "line": 50 + }, + { + "owner": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "path": "internal/worker/scope_bypass_w4_test.go", + "display": "internal/worker/scope_bypass_w4_test.go", + "kind": "exact", + "line": 50 + }, + { + "owner": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "path": "internal/worker/retention.go", + "display": "internal/worker/retention.go", + "kind": "exact", + "line": 50 + }, + { + "owner": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "path": "internal/worker/retention_test.go", + "display": "internal/worker/retention_test.go", + "kind": "exact", + "line": 50 + }, + { + "owner": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "path": "internal/db/gorm/memory_store.go", + "display": "internal/db/gorm/memory_store.go", + "kind": "exact", + "line": 50 + }, + { + "owner": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "path": "internal/db/gorm/memory_store_principal_test.go", + "display": "internal/db/gorm/memory_store_principal_test.go", + "kind": "exact", + "line": 50 + }, + { + "owner": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "path": "internal/db/gorm/memory_store_principal_query_test.go", + "display": "internal/db/gorm/memory_store_principal_query_test.go", + "kind": "exact", + "line": 50 + }, + { + "owner": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "path": "internal/db/gorm/purge_store_test.go", + "display": "internal/db/gorm/purge_store_test.go", + "kind": "exact", + "line": 50 + }, + { + "owner": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "path": "tests/critical/data_boundaries/principal_project_retention_test.go", + "display": "tests/critical/data_boundaries/principal_project_retention_test.go", + "kind": "exact", + "line": 50 + }, + { + "owner": "CRITICAL-HARNESS", + "branch": "work/prc-critical-harness", + "path": "tests/critical/customer_mode/customer_mode_test.go", + "display": "tests/critical/customer_mode/customer_mode_test.go", + "kind": "exact", + "line": 51 + }, + { + "owner": "CRITICAL-HARNESS", + "branch": "work/prc-critical-harness", + "path": "tests/critical/customer_mode/compatibility_test.go", + "display": "tests/critical/customer_mode/compatibility_test.go", + "kind": "exact", + "line": 51 + }, + { + "owner": "CRITICAL-HARNESS", + "branch": "work/prc-critical-harness", + "path": "tests/critical/customer_mode/cross_agent_test.go", + "display": "tests/critical/customer_mode/cross_agent_test.go", + "kind": "exact", + "line": 51 + }, + { + "owner": "CRITICAL-HARNESS", + "branch": "work/prc-critical-harness", + "path": "scripts/production-smoke/customer/run-customer-mode.ps1", + "display": "scripts/production-smoke/customer/run-customer-mode.ps1", + "kind": "exact", + "line": 51 + }, + { + "owner": "CRITICAL-HARNESS", + "branch": "work/prc-critical-harness", + "path": "scripts/production-smoke/customer/run-client-compatibility.ps1", + "display": "scripts/production-smoke/customer/run-client-compatibility.ps1", + "kind": "exact", + "line": 51 + }, + { + "owner": "CRITICAL-HARNESS", + "branch": "work/prc-critical-harness", + "path": "scripts/production-smoke/customer/run-cross-agent.ps1", + "display": "scripts/production-smoke/customer/run-cross-agent.ps1", + "kind": "exact", + "line": 51 + }, + { + "owner": "CRITICAL-HARNESS", + "branch": "work/prc-critical-harness", + "path": "scripts/production-smoke/customer/run-diagnostic-matrix.ps1", + "display": "scripts/production-smoke/customer/run-diagnostic-matrix.ps1", + "kind": "exact", + "line": 51 + }, + { + "owner": "CRITICAL-HARNESS", + "branch": "work/prc-critical-harness", + "path": "scripts/production-smoke/customer/assert-product-works.ps1", + "display": "scripts/production-smoke/customer/assert-product-works.ps1", + "kind": "exact", + "line": 51 + }, + { + "owner": "CORE-PUBLIC-TRUTH", + "branch": "work/prc-core-public-truth", + "path": "README.md", + "display": "README.md", + "kind": "exact", + "line": 52 + }, + { + "owner": "CORE-PUBLIC-TRUTH", + "branch": "work/prc-core-public-truth", + "path": "README.ru.md", + "display": "README.ru.md", + "kind": "exact", + "line": 52 + }, + { + "owner": "CORE-PUBLIC-TRUTH", + "branch": "work/prc-core-public-truth", + "path": "README.zh.md", + "display": "README.zh.md", + "kind": "exact", + "line": 52 + }, + { + "owner": "CORE-PUBLIC-TRUTH", + "branch": "work/prc-core-public-truth", + "path": "CONTRIBUTING.md", + "display": "CONTRIBUTING.md", + "kind": "exact", + "line": 52 + }, + { + "owner": "CORE-PUBLIC-TRUTH", + "branch": "work/prc-core-public-truth", + "path": "CHANGELOG.md", + "display": "CHANGELOG.md", + "kind": "exact", + "line": 52 + }, + { + "owner": "CORE-PUBLIC-TRUTH", + "branch": "work/prc-core-public-truth", + "path": "Makefile", + "display": "Makefile", + "kind": "exact", + "line": 52 + }, + { + "owner": "CORE-PUBLIC-TRUTH", + "branch": "work/prc-core-public-truth", + "path": ".env.example", + "display": ".env.example", + "kind": "exact", + "line": 52 + }, + { + "owner": "CORE-PUBLIC-TRUTH", + "branch": "work/prc-core-public-truth", + "path": "docs/DEPLOYMENT.md", + "display": "docs/DEPLOYMENT.md", + "kind": "exact", + "line": 52 + }, + { + "owner": "CORE-PUBLIC-TRUTH", + "branch": "work/prc-core-public-truth", + "path": "docs/MIGRATION.md", + "display": "docs/MIGRATION.md", + "kind": "exact", + "line": 52 + }, + { + "owner": "CORE-PUBLIC-TRUTH", + "branch": "work/prc-core-public-truth", + "path": "docs/PRODUCTION-TESTING-PLAYBOOK.md", + "display": "docs/PRODUCTION-TESTING-PLAYBOOK.md", + "kind": "exact", + "line": 52 + }, + { + "owner": "CORE-PUBLIC-TRUTH", + "branch": "work/prc-core-public-truth", + "path": "docs/arch/CONFIGURATION.md", + "display": "docs/arch/CONFIGURATION.md", + "kind": "exact", + "line": 52 + }, + { + "owner": "CORE-PUBLIC-TRUTH", + "branch": "work/prc-core-public-truth", + "path": "docs/arch/QUICKSTART.md", + "display": "docs/arch/QUICKSTART.md", + "kind": "exact", + "line": 52 + }, + { + "owner": "CORE-PUBLIC-TRUTH", + "branch": "work/prc-core-public-truth", + "path": "docs/release-notes/v6.43.0.md", + "display": "docs/release-notes/v6.43.0.md", + "kind": "exact", + "line": 52 + }, + { + "owner": "CORE-PUBLIC-TRUTH", + "branch": "work/prc-core-public-truth", + "path": "docs/public/engram.jpg", + "display": "docs/public/engram.jpg", + "kind": "exact", + "line": 52 + }, + { + "owner": "CORE-PUBLIC-TRUTH", + "branch": "work/prc-core-public-truth", + "path": "plugin/engram/commands/setup.md", + "display": "plugin/engram/commands/setup.md", + "kind": "exact", + "line": 52 + }, + { + "owner": "CORE-PUBLIC-TRUTH", + "branch": "work/prc-core-public-truth", + "path": "plugin/engram/commands/doctor.md", + "display": "plugin/engram/commands/doctor.md", + "kind": "exact", + "line": 52 + }, + { + "owner": "FINAL-PUBLIC-TRUTH", + "branch": "work/prc-final-public-truth", + "path": "README.md", + "display": "README.md", + "kind": "exact", + "line": 53 + }, + { + "owner": "FINAL-PUBLIC-TRUTH", + "branch": "work/prc-final-public-truth", + "path": "README.ru.md", + "display": "README.ru.md", + "kind": "exact", + "line": 53 + }, + { + "owner": "FINAL-PUBLIC-TRUTH", + "branch": "work/prc-final-public-truth", + "path": "README.zh.md", + "display": "README.zh.md", + "kind": "exact", + "line": 53 + }, + { + "owner": "FINAL-PUBLIC-TRUTH", + "branch": "work/prc-final-public-truth", + "path": "CONTRIBUTING.md", + "display": "CONTRIBUTING.md", + "kind": "exact", + "line": 53 + }, + { + "owner": "FINAL-PUBLIC-TRUTH", + "branch": "work/prc-final-public-truth", + "path": "CHANGELOG.md", + "display": "CHANGELOG.md", + "kind": "exact", + "line": 53 + }, + { + "owner": "FINAL-PUBLIC-TRUTH", + "branch": "work/prc-final-public-truth", + "path": "Makefile", + "display": "Makefile", + "kind": "exact", + "line": 53 + }, + { + "owner": "FINAL-PUBLIC-TRUTH", + "branch": "work/prc-final-public-truth", + "path": ".env.example", + "display": ".env.example", + "kind": "exact", + "line": 53 + }, + { + "owner": "FINAL-PUBLIC-TRUTH", + "branch": "work/prc-final-public-truth", + "path": "docs/DEPLOYMENT.md", + "display": "docs/DEPLOYMENT.md", + "kind": "exact", + "line": 53 + }, + { + "owner": "FINAL-PUBLIC-TRUTH", + "branch": "work/prc-final-public-truth", + "path": "docs/MIGRATION.md", + "display": "docs/MIGRATION.md", + "kind": "exact", + "line": 53 + }, + { + "owner": "FINAL-PUBLIC-TRUTH", + "branch": "work/prc-final-public-truth", + "path": "docs/PRODUCTION-TESTING-PLAYBOOK.md", + "display": "docs/PRODUCTION-TESTING-PLAYBOOK.md", + "kind": "exact", + "line": 53 + }, + { + "owner": "FINAL-PUBLIC-TRUTH", + "branch": "work/prc-final-public-truth", + "path": "docs/operating-engram.md", + "display": "docs/operating-engram.md", + "kind": "exact", + "line": 53 + }, + { + "owner": "FINAL-PUBLIC-TRUTH", + "branch": "work/prc-final-public-truth", + "path": "docs/arch/CONFIGURATION.md", + "display": "docs/arch/CONFIGURATION.md", + "kind": "exact", + "line": 53 + }, + { + "owner": "FINAL-PUBLIC-TRUTH", + "branch": "work/prc-final-public-truth", + "path": "docs/arch/QUICKSTART.md", + "display": "docs/arch/QUICKSTART.md", + "kind": "exact", + "line": 53 + }, + { + "owner": "FINAL-PUBLIC-TRUTH", + "branch": "work/prc-final-public-truth", + "path": "docs/public/engram.jpg", + "display": "docs/public/engram.jpg", + "kind": "exact", + "line": 53 + }, + { + "owner": "FINAL-PUBLIC-TRUTH", + "branch": "work/prc-final-public-truth", + "path": "plugin/engram/commands/setup.md", + "display": "plugin/engram/commands/setup.md", + "kind": "exact", + "line": 53 + }, + { + "owner": "FINAL-PUBLIC-TRUTH", + "branch": "work/prc-final-public-truth", + "path": "plugin/engram/commands/doctor.md", + "display": "plugin/engram/commands/doctor.md", + "kind": "exact", + "line": 53 + }, + { + "owner": "LAUNCHER-FIRST-RUN", + "branch": "work/prc-launcher-first-run", + "path": "cmd/engram/main.go", + "display": "cmd/engram/main.go", + "kind": "exact", + "line": 54 + }, + { + "owner": "LAUNCHER-FIRST-RUN", + "branch": "work/prc-launcher-first-run", + "path": "cmd/engram/main_test.go", + "display": "cmd/engram/main_test.go", + "kind": "exact", + "line": 54 + }, + { + "owner": "LAUNCHER-FIRST-RUN", + "branch": "work/prc-launcher-first-run", + "path": "cmd/engram/wiring.go", + "display": "cmd/engram/wiring.go", + "kind": "exact", + "line": 54 + }, + { + "owner": "LAUNCHER-FIRST-RUN", + "branch": "work/prc-launcher-first-run", + "path": "cmd/engram/exec_windows.go", + "display": "cmd/engram/exec_windows.go", + "kind": "exact", + "line": 54 + }, + { + "owner": "LAUNCHER-FIRST-RUN", + "branch": "work/prc-launcher-first-run", + "path": "cmd/engram/exec_unix.go", + "display": "cmd/engram/exec_unix.go", + "kind": "exact", + "line": 54 + }, + { + "owner": "LAUNCHER-FIRST-RUN", + "branch": "work/prc-launcher-first-run", + "path": "plugin/engram/.engram-project", + "display": "plugin/engram/.engram-project", + "kind": "exact", + "line": 54 + }, + { + "owner": "LAUNCHER-FIRST-RUN", + "branch": "work/prc-launcher-first-run", + "path": "plugin/engram/scripts/run-engram.js", + "display": "plugin/engram/scripts/run-engram.js", + "kind": "exact", + "line": 54 + }, + { + "owner": "LAUNCHER-FIRST-RUN", + "branch": "work/prc-launcher-first-run", + "path": "plugin/engram/scripts/run-engram.test.js", + "display": "plugin/engram/scripts/run-engram.test.js", + "kind": "exact", + "line": 54 + }, + { + "owner": "LAUNCHER-FIRST-RUN", + "branch": "work/prc-launcher-first-run", + "path": "plugin/engram/scripts/ensure-binary.js", + "display": "plugin/engram/scripts/ensure-binary.js", + "kind": "exact", + "line": 54 + }, + { + "owner": "LAUNCHER-FIRST-RUN", + "branch": "work/prc-launcher-first-run", + "path": "plugin/engram/scripts/ensure-binary.test.js", + "display": "plugin/engram/scripts/ensure-binary.test.js", + "kind": "exact", + "line": 54 + }, + { + "owner": "OC-INTEGRATION", + "branch": "work/prc-operator-console-integration", + "path": "apps/operator-console", + "display": "apps/operator-console/**", + "kind": "prefix", + "line": 55 + }, + { + "owner": "S4B-CONTRACT", + "branch": "work/prc-s4b-contract", + "path": ".agent/specs/engram-v7-directives-surfacing", + "display": ".agent/specs/engram-v7-directives-surfacing/**", + "kind": "prefix", + "line": 56 + }, + { + "owner": "V7-S4B-BACKEND", + "branch": "work/prc-v7-s4b-backend", + "path": "internal/cognitive/s4bsurfacing", + "display": "internal/cognitive/s4bsurfacing/**", + "kind": "prefix", + "line": 57 + }, + { + "owner": "V7-CORE-CALLPATH", + "branch": "work/prc-v7-core-callpath", + "path": "internal/cognitive/core/event_bus.go", + "display": "internal/cognitive/core/event_bus.go", + "kind": "exact", + "line": 58 + }, + { + "owner": "V7-CORE-CALLPATH", + "branch": "work/prc-v7-core-callpath", + "path": "internal/cognitive/core/event_bus_test.go", + "display": "internal/cognitive/core/event_bus_test.go", + "kind": "exact", + "line": 58 + }, + { + "owner": "V7-CORE-CALLPATH", + "branch": "work/prc-v7-core-callpath", + "path": "internal/cognitive/core/hint_queue.go", + "display": "internal/cognitive/core/hint_queue.go", + "kind": "exact", + "line": 58 + }, + { + "owner": "V7-CORE-CALLPATH", + "branch": "work/prc-v7-core-callpath", + "path": "internal/cognitive/core/hint_queue_test.go", + "display": "internal/cognitive/core/hint_queue_test.go", + "kind": "exact", + "line": 58 + }, + { + "owner": "V7-CORE-CALLPATH", + "branch": "work/prc-v7-core-callpath", + "path": "internal/cognitive/s3ambient/queue.go", + "display": "internal/cognitive/s3ambient/queue.go", + "kind": "exact", + "line": 58 + }, + { + "owner": "V7-CORE-CALLPATH", + "branch": "work/prc-v7-core-callpath", + "path": "internal/cognitive/s3ambient/subsystem.go", + "display": "internal/cognitive/s3ambient/subsystem.go", + "kind": "exact", + "line": 58 + }, + { + "owner": "V7-RUNTIME-WIRING", + "branch": "work/prc-v7-runtime-wiring", + "path": "internal/worker/service.go", + "display": "internal/worker/service.go", + "kind": "exact", + "line": 59 + }, + { + "owner": "V7-RUNTIME-WIRING", + "branch": "work/prc-v7-runtime-wiring", + "path": "internal/worker/service_v7_integration_test.go", + "display": "internal/worker/service_v7_integration_test.go", + "kind": "exact", + "line": 59 + }, + { + "owner": "V7-RUNTIME-WIRING", + "branch": "work/prc-v7-runtime-wiring", + "path": "internal/worker/handlers_stats_v7.go", + "display": "internal/worker/handlers_stats_v7.go", + "kind": "exact", + "line": 59 + }, + { + "owner": "V7-RUNTIME-WIRING", + "branch": "work/prc-v7-runtime-wiring", + "path": "internal/worker/handlers_stats_v7_test.go", + "display": "internal/worker/handlers_stats_v7_test.go", + "kind": "exact", + "line": 59 + }, + { + "owner": "V7-TELEMETRY-WIRING", + "branch": "work/prc-v7-telemetry-wiring", + "path": "internal/cognitive/s5/metrics.go", + "display": "internal/cognitive/s5/metrics.go", + "kind": "exact", + "line": 60 + }, + { + "owner": "V7-TELEMETRY-WIRING", + "branch": "work/prc-v7-telemetry-wiring", + "path": "internal/cognitive/s5/provider.go", + "display": "internal/cognitive/s5/provider.go", + "kind": "exact", + "line": 60 + }, + { + "owner": "V7-TELEMETRY-WIRING", + "branch": "work/prc-v7-telemetry-wiring", + "path": "internal/cognitive/s5/provider_test.go", + "display": "internal/cognitive/s5/provider_test.go", + "kind": "exact", + "line": 60 + }, + { + "owner": "V7-TELEMETRY-WIRING", + "branch": "work/prc-v7-telemetry-wiring", + "path": "internal/cognitive/s5/source_adapter.go", + "display": "internal/cognitive/s5/source_adapter.go", + "kind": "exact", + "line": 60 + }, + { + "owner": "V7-TELEMETRY-WIRING", + "branch": "work/prc-v7-telemetry-wiring", + "path": "internal/cognitive/s5/source_adapter_test.go", + "display": "internal/cognitive/s5/source_adapter_test.go", + "kind": "exact", + "line": 60 + }, + { + "owner": "ROADMAP-RECONCILIATION", + "branch": "work/prc-roadmap-reconciliation", + "path": ".agent/specs/roadmap.md", + "display": ".agent/specs/roadmap.md", + "kind": "exact", + "line": 61 + }, + { + "owner": "ROADMAP-RECONCILIATION", + "branch": "work/prc-roadmap-reconciliation", + "path": ".agent/specs/ui-surface-ledger.md", + "display": ".agent/specs/ui-surface-ledger.md", + "kind": "exact", + "line": 61 + }, + { + "owner": "ROADMAP-RECONCILIATION", + "branch": "work/prc-roadmap-reconciliation", + "path": ".agent/specs/operator-console-production-integration", + "display": ".agent/specs/operator-console-production-integration/**", + "kind": "prefix", + "line": 61 + }, + { + "owner": "ROADMAP-RECONCILIATION", + "branch": "work/prc-roadmap-reconciliation", + "path": ".agent/specs/engram-v7-ambient/spec.md", + "display": ".agent/specs/engram-v7-ambient/spec.md", + "kind": "exact", + "line": 61 + }, + { + "owner": "ROADMAP-RECONCILIATION", + "branch": "work/prc-roadmap-reconciliation", + "path": ".agent/specs/engram-v7-ambient/plan.md", + "display": ".agent/specs/engram-v7-ambient/plan.md", + "kind": "exact", + "line": 61 + }, + { + "owner": "ROADMAP-RECONCILIATION", + "branch": "work/prc-roadmap-reconciliation", + "path": ".agent/specs/engram-v7-ambient/checklists/general.md", + "display": ".agent/specs/engram-v7-ambient/checklists/general.md", + "kind": "exact", + "line": 61 + }, + { + "owner": "ROADMAP-RECONCILIATION", + "branch": "work/prc-roadmap-reconciliation", + "path": ".agent/specs/engram-v7-ambient/changes/CR-001-initial-scope/change.md", + "display": ".agent/specs/engram-v7-ambient/changes/CR-001-initial-scope/change.md", + "kind": "exact", + "line": 61 + }, + { + "owner": "ROADMAP-RECONCILIATION", + "branch": "work/prc-roadmap-reconciliation", + "path": ".agent/specs/engram-v7-ambient/changes/CR-001-initial-scope/tasks.md", + "display": ".agent/specs/engram-v7-ambient/changes/CR-001-initial-scope/tasks.md", + "kind": "exact", + "line": 61 + }, + { + "owner": "NORTHSTAR-CI-A-CONTRACTS", + "branch": "work/prc-northstar-ci-a-contracts", + "path": ".agent/specs/engram-absorption/ci-a-dense-vector/spec.md", + "display": ".agent/specs/engram-absorption/ci-a-dense-vector/spec.md", + "kind": "exact", + "line": 62 + }, + { + "owner": "NORTHSTAR-CI-A-CONTRACTS", + "branch": "work/prc-northstar-ci-a-contracts", + "path": ".agent/specs/engram-absorption/ci-a-dense-vector/plan.md", + "display": ".agent/specs/engram-absorption/ci-a-dense-vector/plan.md", + "kind": "exact", + "line": 62 + }, + { + "owner": "NORTHSTAR-CI-A-CONTRACTS", + "branch": "work/prc-northstar-ci-a-contracts", + "path": ".agent/specs/engram-absorption/ci-a-dense-vector/checklists/general.md", + "display": ".agent/specs/engram-absorption/ci-a-dense-vector/checklists/general.md", + "kind": "exact", + "line": 62 + }, + { + "owner": "NORTHSTAR-CI-A-CONTRACTS", + "branch": "work/prc-northstar-ci-a-contracts", + "path": ".agent/specs/engram-absorption/ci-a-dense-vector/changes/CR-001-initial-scope/change.md", + "display": ".agent/specs/engram-absorption/ci-a-dense-vector/changes/CR-001-initial-scope/change.md", + "kind": "exact", + "line": 62 + }, + { + "owner": "NORTHSTAR-CI-A-CONTRACTS", + "branch": "work/prc-northstar-ci-a-contracts", + "path": ".agent/specs/engram-absorption/ci-a-dense-vector/changes/CR-001-initial-scope/tasks.md", + "display": ".agent/specs/engram-absorption/ci-a-dense-vector/changes/CR-001-initial-scope/tasks.md", + "kind": "exact", + "line": 62 + }, + { + "owner": "NORTHSTAR-CI-B-CONTRACTS", + "branch": "work/prc-northstar-ci-b-contracts", + "path": ".agent/specs/engram-absorption/ci-b-graph-watcher-context/spec.md", + "display": ".agent/specs/engram-absorption/ci-b-graph-watcher-context/spec.md", + "kind": "exact", + "line": 63 + }, + { + "owner": "NORTHSTAR-CI-B-CONTRACTS", + "branch": "work/prc-northstar-ci-b-contracts", + "path": ".agent/specs/engram-absorption/ci-b-graph-watcher-context/plan.md", + "display": ".agent/specs/engram-absorption/ci-b-graph-watcher-context/plan.md", + "kind": "exact", + "line": 63 + }, + { + "owner": "NORTHSTAR-CI-B-CONTRACTS", + "branch": "work/prc-northstar-ci-b-contracts", + "path": ".agent/specs/engram-absorption/ci-b-graph-watcher-context/checklists/general.md", + "display": ".agent/specs/engram-absorption/ci-b-graph-watcher-context/checklists/general.md", + "kind": "exact", + "line": 63 + }, + { + "owner": "NORTHSTAR-CI-B-CONTRACTS", + "branch": "work/prc-northstar-ci-b-contracts", + "path": ".agent/specs/engram-absorption/ci-b-graph-watcher-context/changes/CR-001-initial-scope/change.md", + "display": ".agent/specs/engram-absorption/ci-b-graph-watcher-context/changes/CR-001-initial-scope/change.md", + "kind": "exact", + "line": 63 + }, + { + "owner": "NORTHSTAR-CI-B-CONTRACTS", + "branch": "work/prc-northstar-ci-b-contracts", + "path": ".agent/specs/engram-absorption/ci-b-graph-watcher-context/changes/CR-001-initial-scope/tasks.md", + "display": ".agent/specs/engram-absorption/ci-b-graph-watcher-context/changes/CR-001-initial-scope/tasks.md", + "kind": "exact", + "line": 63 + }, + { + "owner": "NORTHSTAR-BOOK-CONTRACTS", + "branch": "work/prc-northstar-book-contracts", + "path": ".agent/specs/engram-absorption/book/prd.md", + "display": ".agent/specs/engram-absorption/book/prd.md", + "kind": "exact", + "line": 64 + }, + { + "owner": "NORTHSTAR-BOOK-CONTRACTS", + "branch": "work/prc-northstar-book-contracts", + "path": ".agent/specs/engram-absorption/book/spec.md", + "display": ".agent/specs/engram-absorption/book/spec.md", + "kind": "exact", + "line": 64 + }, + { + "owner": "NORTHSTAR-BOOK-CONTRACTS", + "branch": "work/prc-northstar-book-contracts", + "path": ".agent/specs/engram-absorption/book/plan.md", + "display": ".agent/specs/engram-absorption/book/plan.md", + "kind": "exact", + "line": 64 + }, + { + "owner": "NORTHSTAR-BOOK-CONTRACTS", + "branch": "work/prc-northstar-book-contracts", + "path": ".agent/specs/engram-absorption/book/checklists/general.md", + "display": ".agent/specs/engram-absorption/book/checklists/general.md", + "kind": "exact", + "line": 64 + }, + { + "owner": "NORTHSTAR-BOOK-CONTRACTS", + "branch": "work/prc-northstar-book-contracts", + "path": ".agent/specs/engram-absorption/book/changes/CR-001-initial-scope/change.md", + "display": ".agent/specs/engram-absorption/book/changes/CR-001-initial-scope/change.md", + "kind": "exact", + "line": 64 + }, + { + "owner": "NORTHSTAR-BOOK-CONTRACTS", + "branch": "work/prc-northstar-book-contracts", + "path": ".agent/specs/engram-absorption/book/changes/CR-001-initial-scope/tasks.md", + "display": ".agent/specs/engram-absorption/book/changes/CR-001-initial-scope/tasks.md", + "kind": "exact", + "line": 64 + }, + { + "owner": "NORTHSTAR-MEM-CONTRACTS", + "branch": "work/prc-northstar-mem-contracts", + "path": ".agent/specs/engram-absorption/mem-residual/spec.md", + "display": ".agent/specs/engram-absorption/mem-residual/spec.md", + "kind": "exact", + "line": 65 + }, + { + "owner": "NORTHSTAR-MEM-CONTRACTS", + "branch": "work/prc-northstar-mem-contracts", + "path": ".agent/specs/engram-absorption/mem-residual/plan.md", + "display": ".agent/specs/engram-absorption/mem-residual/plan.md", + "kind": "exact", + "line": 65 + }, + { + "owner": "NORTHSTAR-MEM-CONTRACTS", + "branch": "work/prc-northstar-mem-contracts", + "path": ".agent/specs/engram-absorption/mem-residual/checklists/general.md", + "display": ".agent/specs/engram-absorption/mem-residual/checklists/general.md", + "kind": "exact", + "line": 65 + }, + { + "owner": "NORTHSTAR-MEM-CONTRACTS", + "branch": "work/prc-northstar-mem-contracts", + "path": ".agent/specs/engram-absorption/mem-residual/changes/CR-001-initial-scope/change.md", + "display": ".agent/specs/engram-absorption/mem-residual/changes/CR-001-initial-scope/change.md", + "kind": "exact", + "line": 65 + }, + { + "owner": "NORTHSTAR-MEM-CONTRACTS", + "branch": "work/prc-northstar-mem-contracts", + "path": ".agent/specs/engram-absorption/mem-residual/changes/CR-001-initial-scope/tasks.md", + "display": ".agent/specs/engram-absorption/mem-residual/changes/CR-001-initial-scope/tasks.md", + "kind": "exact", + "line": 65 + }, + { + "owner": "NORTHSTAR-EFFECTIVENESS-CONTRACTS", + "branch": "work/prc-northstar-effectiveness-contracts", + "path": ".agent/specs/engram-effectiveness/production-ready-residual/spec.md", + "display": ".agent/specs/engram-effectiveness/production-ready-residual/spec.md", + "kind": "exact", + "line": 66 + }, + { + "owner": "NORTHSTAR-EFFECTIVENESS-CONTRACTS", + "branch": "work/prc-northstar-effectiveness-contracts", + "path": ".agent/specs/engram-effectiveness/production-ready-residual/plan.md", + "display": ".agent/specs/engram-effectiveness/production-ready-residual/plan.md", + "kind": "exact", + "line": 66 + }, + { + "owner": "NORTHSTAR-EFFECTIVENESS-CONTRACTS", + "branch": "work/prc-northstar-effectiveness-contracts", + "path": ".agent/specs/engram-effectiveness/production-ready-residual/checklists/general.md", + "display": ".agent/specs/engram-effectiveness/production-ready-residual/checklists/general.md", + "kind": "exact", + "line": 66 + }, + { + "owner": "NORTHSTAR-EFFECTIVENESS-CONTRACTS", + "branch": "work/prc-northstar-effectiveness-contracts", + "path": ".agent/specs/engram-effectiveness/production-ready-residual/changes/CR-001-initial-scope/change.md", + "display": ".agent/specs/engram-effectiveness/production-ready-residual/changes/CR-001-initial-scope/change.md", + "kind": "exact", + "line": 66 + }, + { + "owner": "NORTHSTAR-EFFECTIVENESS-CONTRACTS", + "branch": "work/prc-northstar-effectiveness-contracts", + "path": ".agent/specs/engram-effectiveness/production-ready-residual/changes/CR-001-initial-scope/tasks.md", + "display": ".agent/specs/engram-effectiveness/production-ready-residual/changes/CR-001-initial-scope/tasks.md", + "kind": "exact", + "line": 66 + }, + { + "owner": "NORTHSTAR-SETTINGS-CONTRACTS", + "branch": "work/prc-northstar-settings-contracts", + "path": ".agent/specs/settings-store/production-ready-residual/spec.md", + "display": ".agent/specs/settings-store/production-ready-residual/spec.md", + "kind": "exact", + "line": 67 + }, + { + "owner": "NORTHSTAR-SETTINGS-CONTRACTS", + "branch": "work/prc-northstar-settings-contracts", + "path": ".agent/specs/settings-store/production-ready-residual/plan.md", + "display": ".agent/specs/settings-store/production-ready-residual/plan.md", + "kind": "exact", + "line": 67 + }, + { + "owner": "NORTHSTAR-SETTINGS-CONTRACTS", + "branch": "work/prc-northstar-settings-contracts", + "path": ".agent/specs/settings-store/production-ready-residual/checklists/general.md", + "display": ".agent/specs/settings-store/production-ready-residual/checklists/general.md", + "kind": "exact", + "line": 67 + }, + { + "owner": "NORTHSTAR-SETTINGS-CONTRACTS", + "branch": "work/prc-northstar-settings-contracts", + "path": ".agent/specs/settings-store/production-ready-residual/changes/CR-001-initial-scope/change.md", + "display": ".agent/specs/settings-store/production-ready-residual/changes/CR-001-initial-scope/change.md", + "kind": "exact", + "line": 67 + }, + { + "owner": "NORTHSTAR-SETTINGS-CONTRACTS", + "branch": "work/prc-northstar-settings-contracts", + "path": ".agent/specs/settings-store/production-ready-residual/changes/CR-001-initial-scope/tasks.md", + "display": ".agent/specs/settings-store/production-ready-residual/changes/CR-001-initial-scope/tasks.md", + "kind": "exact", + "line": 67 + } + ], + "repeated_exact_paths": [ + { + "path": ".env.example", + "exact_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "prefix_owners": [], + "effective_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "declared_epoch": true, + "epoch_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ] + }, + { + "path": ".github/workflows/test.yml", + "exact_owners": [ + "RELEASE-GATES", + "IMAGE-REMEDIATION" + ], + "prefix_owners": [], + "effective_owners": [ + "RELEASE-GATES", + "IMAGE-REMEDIATION" + ], + "declared_epoch": true, + "epoch_owners": [ + "RELEASE-GATES", + "IMAGE-REMEDIATION" + ] + }, + { + "path": "apps/operator-console/package-lock.json", + "exact_owners": [ + "IMAGE-REMEDIATION" + ], + "prefix_owners": [ + "OC-INTEGRATION" + ], + "effective_owners": [ + "IMAGE-REMEDIATION", + "OC-INTEGRATION" + ], + "declared_epoch": true, + "epoch_owners": [ + "IMAGE-REMEDIATION", + "OC-INTEGRATION" + ] + }, + { + "path": "apps/operator-console/package.json", + "exact_owners": [ + "IMAGE-REMEDIATION" + ], + "prefix_owners": [ + "OC-INTEGRATION" + ], + "effective_owners": [ + "IMAGE-REMEDIATION", + "OC-INTEGRATION" + ], + "declared_epoch": true, + "epoch_owners": [ + "IMAGE-REMEDIATION", + "OC-INTEGRATION" + ] + }, + { + "path": "CHANGELOG.md", + "exact_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "prefix_owners": [], + "effective_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "declared_epoch": true, + "epoch_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ] + }, + { + "path": "CONTRIBUTING.md", + "exact_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "prefix_owners": [], + "effective_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "declared_epoch": true, + "epoch_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ] + }, + { + "path": "deploy/docker-compose.runtime.yml", + "exact_owners": [ + "IMAGE-REMEDIATION", + "DEPLOYMENT-ROLLBACK" + ], + "prefix_owners": [], + "effective_owners": [ + "IMAGE-REMEDIATION", + "DEPLOYMENT-ROLLBACK" + ], + "declared_epoch": true, + "epoch_owners": [ + "IMAGE-REMEDIATION", + "DEPLOYMENT-ROLLBACK" + ] + }, + { + "path": "docker-compose.yml", + "exact_owners": [ + "IMAGE-REMEDIATION", + "DEPLOYMENT-ROLLBACK" + ], + "prefix_owners": [], + "effective_owners": [ + "IMAGE-REMEDIATION", + "DEPLOYMENT-ROLLBACK" + ], + "declared_epoch": true, + "epoch_owners": [ + "IMAGE-REMEDIATION", + "DEPLOYMENT-ROLLBACK" + ] + }, + { + "path": "Dockerfile", + "exact_owners": [ + "SECURITY-TOOLCHAIN", + "IMAGE-REMEDIATION" + ], + "prefix_owners": [], + "effective_owners": [ + "SECURITY-TOOLCHAIN", + "IMAGE-REMEDIATION" + ], + "declared_epoch": true, + "epoch_owners": [ + "SECURITY-TOOLCHAIN", + "IMAGE-REMEDIATION" + ] + }, + { + "path": "docs/arch/CONFIGURATION.md", + "exact_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "prefix_owners": [], + "effective_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "declared_epoch": true, + "epoch_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ] + }, + { + "path": "docs/arch/QUICKSTART.md", + "exact_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "prefix_owners": [], + "effective_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "declared_epoch": true, + "epoch_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ] + }, + { + "path": "docs/DEPLOYMENT.md", + "exact_owners": [ + "IMAGE-REMEDIATION", + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "prefix_owners": [], + "effective_owners": [ + "IMAGE-REMEDIATION", + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "declared_epoch": true, + "epoch_owners": [ + "IMAGE-REMEDIATION", + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ] + }, + { + "path": "docs/MIGRATION.md", + "exact_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "prefix_owners": [], + "effective_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "declared_epoch": true, + "epoch_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ] + }, + { + "path": "docs/operating-engram.md", + "exact_owners": [ + "REDACTION-LIVE-CONTRACT", + "FINAL-PUBLIC-TRUTH" + ], + "prefix_owners": [], + "effective_owners": [ + "REDACTION-LIVE-CONTRACT", + "FINAL-PUBLIC-TRUTH" + ], + "declared_epoch": true, + "epoch_owners": [ + "REDACTION-LIVE-CONTRACT", + "FINAL-PUBLIC-TRUTH" + ] + }, + { + "path": "docs/PRODUCTION-TESTING-PLAYBOOK.md", + "exact_owners": [ + "IMAGE-REMEDIATION", + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "prefix_owners": [], + "effective_owners": [ + "IMAGE-REMEDIATION", + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "declared_epoch": true, + "epoch_owners": [ + "IMAGE-REMEDIATION", + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ] + }, + { + "path": "docs/public/engram.jpg", + "exact_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "prefix_owners": [], + "effective_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "declared_epoch": true, + "epoch_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ] + }, + { + "path": "internal/bulkops/facade_test.go", + "exact_owners": [ + "DB-BULKOPS", + "INGEST-DOC-SNAPSHOT-DEMOLITION" + ], + "prefix_owners": [], + "effective_owners": [ + "DB-BULKOPS", + "INGEST-DOC-SNAPSHOT-DEMOLITION" + ], + "declared_epoch": true, + "epoch_owners": [ + "DB-BULKOPS", + "INGEST-DOC-SNAPSHOT-DEMOLITION" + ] + }, + { + "path": "internal/bulkops/facade.go", + "exact_owners": [ + "DB-BULKOPS", + "INGEST-DOC-SNAPSHOT-DEMOLITION", + "DURABLE-AUDIT-BOUNDARIES" + ], + "prefix_owners": [], + "effective_owners": [ + "DB-BULKOPS", + "INGEST-DOC-SNAPSHOT-DEMOLITION", + "DURABLE-AUDIT-BOUNDARIES" + ], + "declared_epoch": true, + "epoch_owners": [ + "DB-BULKOPS", + "INGEST-DOC-SNAPSHOT-DEMOLITION", + "DURABLE-AUDIT-BOUNDARIES" + ] + }, + { + "path": "internal/bulkops/rollback_test.go", + "exact_owners": [ + "DB-BULKOPS", + "CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK" + ], + "prefix_owners": [], + "effective_owners": [ + "DB-BULKOPS", + "CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK" + ], + "declared_epoch": true, + "epoch_owners": [ + "DB-BULKOPS", + "CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK" + ] + }, + { + "path": "internal/db/gorm/candidate_store_test.go", + "exact_owners": [ + "DB-BULKOPS", + "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK", + "DB-TEST-POOL-HYGIENE", + "DB-GOVERNANCE", + "CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK" + ], + "prefix_owners": [], + "effective_owners": [ + "DB-BULKOPS", + "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK", + "DB-TEST-POOL-HYGIENE", + "DB-GOVERNANCE", + "CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK" + ], + "declared_epoch": true, + "epoch_owners": [ + "DB-BULKOPS", + "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK", + "DB-TEST-POOL-HYGIENE", + "DB-GOVERNANCE", + "CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK" + ] + }, + { + "path": "internal/db/gorm/candidate_store.go", + "exact_owners": [ + "DB-BULKOPS", + "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK", + "DB-GOVERNANCE", + "CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK" + ], + "prefix_owners": [], + "effective_owners": [ + "DB-BULKOPS", + "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK", + "DB-GOVERNANCE", + "CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK" + ], + "declared_epoch": true, + "epoch_owners": [ + "DB-BULKOPS", + "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK", + "DB-GOVERNANCE", + "CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK" + ] + }, + { + "path": "internal/db/gorm/user_store.go", + "exact_owners": [ + "DB-AUTH", + "AUTH-BOOTSTRAP-SECURITY", + "DURABLE-AUDIT-BOUNDARIES" + ], + "prefix_owners": [], + "effective_owners": [ + "DB-AUTH", + "AUTH-BOOTSTRAP-SECURITY", + "DURABLE-AUDIT-BOUNDARIES" + ], + "declared_epoch": true, + "epoch_owners": [ + "DB-AUTH", + "AUTH-BOOTSTRAP-SECURITY", + "DURABLE-AUDIT-BOUNDARIES" + ] + }, + { + "path": "internal/mcp/tools_bulkops.go", + "exact_owners": [ + "DB-BULKOPS", + "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK" + ], + "prefix_owners": [], + "effective_owners": [ + "DB-BULKOPS", + "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK" + ], + "declared_epoch": true, + "epoch_owners": [ + "DB-BULKOPS", + "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK" + ] + }, + { + "path": "internal/mcp/tools_dryrun_test.go", + "exact_owners": [ + "DB-BULKOPS", + "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK" + ], + "prefix_owners": [], + "effective_owners": [ + "DB-BULKOPS", + "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK" + ], + "declared_epoch": true, + "epoch_owners": [ + "DB-BULKOPS", + "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK" + ] + }, + { + "path": "internal/mcp/tools_memory.go", + "exact_owners": [ + "MCP-STRUCTURED-INPUT-VALIDATION", + "REDACTION-LIVE-CONTRACT" + ], + "prefix_owners": [], + "effective_owners": [ + "MCP-STRUCTURED-INPUT-VALIDATION", + "REDACTION-LIVE-CONTRACT" + ], + "declared_epoch": true, + "epoch_owners": [ + "MCP-STRUCTURED-INPUT-VALIDATION", + "REDACTION-LIVE-CONTRACT" + ] + }, + { + "path": "internal/worker/auth_handlers.go", + "exact_owners": [ + "DB-AUTH", + "AUTH-BOOTSTRAP-SECURITY", + "DURABLE-AUDIT-BOUNDARIES" + ], + "prefix_owners": [], + "effective_owners": [ + "DB-AUTH", + "AUTH-BOOTSTRAP-SECURITY", + "DURABLE-AUDIT-BOUNDARIES" + ], + "declared_epoch": true, + "epoch_owners": [ + "DB-AUTH", + "AUTH-BOOTSTRAP-SECURITY", + "DURABLE-AUDIT-BOUNDARIES" + ] + }, + { + "path": "internal/worker/service.go", + "exact_owners": [ + "AUTH-BOOTSTRAP-SECURITY", + "REDACTION-LIVE-CONTRACT", + "V7-RUNTIME-WIRING" + ], + "prefix_owners": [], + "effective_owners": [ + "AUTH-BOOTSTRAP-SECURITY", + "REDACTION-LIVE-CONTRACT", + "V7-RUNTIME-WIRING" + ], + "declared_epoch": true, + "epoch_owners": [ + "AUTH-BOOTSTRAP-SECURITY", + "REDACTION-LIVE-CONTRACT", + "V7-RUNTIME-WIRING" + ] + }, + { + "path": "Makefile", + "exact_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "prefix_owners": [], + "effective_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "declared_epoch": true, + "epoch_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ] + }, + { + "path": "pkg/models/snapshot.go", + "exact_owners": [ + "DB-BULKOPS", + "INGEST-DOC-SNAPSHOT-DEMOLITION" + ], + "prefix_owners": [], + "effective_owners": [ + "DB-BULKOPS", + "INGEST-DOC-SNAPSHOT-DEMOLITION" + ], + "declared_epoch": true, + "epoch_owners": [ + "DB-BULKOPS", + "INGEST-DOC-SNAPSHOT-DEMOLITION" + ] + }, + { + "path": "plugin/engram/commands/doctor.md", + "exact_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "prefix_owners": [], + "effective_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "declared_epoch": true, + "epoch_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ] + }, + { + "path": "plugin/engram/commands/setup.md", + "exact_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "prefix_owners": [], + "effective_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "declared_epoch": true, + "epoch_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ] + }, + { + "path": "README.md", + "exact_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "prefix_owners": [], + "effective_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "declared_epoch": true, + "epoch_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ] + }, + { + "path": "README.ru.md", + "exact_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "prefix_owners": [], + "effective_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "declared_epoch": true, + "epoch_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ] + }, + { + "path": "README.zh.md", + "exact_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "prefix_owners": [], + "effective_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "declared_epoch": true, + "epoch_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ] + } + ], + "prefix_intersections": [ + { + "left_owner": "IMAGE-REMEDIATION", + "left": "apps/operator-console/package.json", + "right_owner": "OC-INTEGRATION", + "right": "apps/operator-console/**", + "exact_path": "apps/operator-console/package.json", + "declared_epoch": true + }, + { + "left_owner": "IMAGE-REMEDIATION", + "left": "apps/operator-console/package-lock.json", + "right_owner": "OC-INTEGRATION", + "right": "apps/operator-console/**", + "exact_path": "apps/operator-console/package-lock.json", + "declared_epoch": true + } + ], + "epochs": [ + { + "path": "internal/db/gorm/candidate_store.go", + "owners": [ + "DB-BULKOPS", + "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK", + "DB-GOVERNANCE", + "CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK" + ], + "transfer_gate": "rejected predecessor checker/hash recorded; rework uses exact base `68b2ce5835c7c6efdf1c68da9eedcb8d9c3837ef`; each accepted successor requires checker PASS, post-review PASS, integration SHA, and exact rebase before edit", + "line": 6 + }, + { + "path": "internal/db/gorm/candidate_store_test.go", + "owners": [ + "DB-BULKOPS", + "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK", + "DB-TEST-POOL-HYGIENE", + "DB-GOVERNANCE", + "CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK" + ], + "transfer_gate": "behavioral-edge head `bd68c05baf4b7250096dd84f56bebea2aa555970` remains current authority until pool-hygiene product `276337b3e96aa5af6d2e7dd9a0002ff957e5ffc9` plus evidence `68242c48aaad62ec087166eeb9ea32f14d189450` receive fresh checker and post-review; later successors require exact integration and rebase", + "line": 7 + }, + { + "path": "internal/mcp/tools_bulkops.go", + "owners": [ + "DB-BULKOPS", + "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK" + ], + "transfer_gate": "rejected predecessor checker/hash recorded; rework base is exact rejected head; checker and post-review PASS plus integration SHA close the transfer", + "line": 8 + }, + { + "path": "internal/mcp/tools_dryrun_test.go", + "owners": [ + "DB-BULKOPS", + "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK" + ], + "transfer_gate": "rejected predecessor checker/hash recorded; rework base is exact rejected head; checker and post-review PASS plus integration SHA close the transfer", + "line": 8 + }, + { + "path": "internal/bulkops/facade.go", + "owners": [ + "DB-BULKOPS", + "INGEST-DOC-SNAPSHOT-DEMOLITION", + "DURABLE-AUDIT-BOUNDARIES" + ], + "transfer_gate": "behavioral-edge composite checker and post-review PASS; exact integration SHA recorded; demolition rebased before edit; historical ingest guard green before durable-audit fault work", + "line": 9 + }, + { + "path": "internal/bulkops/facade_test.go", + "owners": [ + "DB-BULKOPS", + "INGEST-DOC-SNAPSHOT-DEMOLITION" + ], + "transfer_gate": "accepted behavioral-edge composite integrated; demolition worktree rebased; focused historical-only regressions PASS before integration", + "line": 10 + }, + { + "path": "internal/bulkops/rollback_test.go", + "owners": [ + "DB-BULKOPS", + "CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK" + ], + "transfer_gate": "accepted behavioral-edge composite and DB-GOVERNANCE integrated; candidate-review successor rebased; combined checker and post-review PASS", + "line": 11 + }, + { + "path": "pkg/models/snapshot.go", + "owners": [ + "DB-BULKOPS", + "INGEST-DOC-SNAPSHOT-DEMOLITION" + ], + "transfer_gate": "accepted behavioral-edge composite integrated; demolition successor rebased; persistence-compatibility and non-executable regressions PASS", + "line": 12 + }, + { + "path": "internal/db/gorm/user_store.go", + "owners": [ + "DB-AUTH", + "AUTH-BOOTSTRAP-SECURITY", + "DURABLE-AUDIT-BOUNDARIES" + ], + "transfer_gate": "each predecessor checker and post-review PASS, integration SHA recorded, successor rebased; no simultaneous writer", + "line": 13 + }, + { + "path": "internal/worker/auth_handlers.go", + "owners": [ + "DB-AUTH", + "AUTH-BOOTSTRAP-SECURITY", + "DURABLE-AUDIT-BOUNDARIES" + ], + "transfer_gate": "each predecessor checker and post-review PASS, integration SHA recorded, successor rebased; no simultaneous writer", + "line": 14 + }, + { + "path": "internal/worker/service.go", + "owners": [ + "AUTH-BOOTSTRAP-SECURITY", + "REDACTION-LIVE-CONTRACT", + "V7-RUNTIME-WIRING" + ], + "transfer_gate": "auth bootstrap checker and post-review PASS, commit integrated, redaction worktree rebased and boot-captured rules proved; V7 later rebases the redaction integration and reruns both auth and redaction route regressions", + "line": 15 + }, + { + "path": "internal/mcp/tools_memory.go", + "owners": [ + "MCP-STRUCTURED-INPUT-VALIDATION", + "REDACTION-LIVE-CONTRACT" + ], + "transfer_gate": "structured-input checker/post-review PASS and exact integration SHA; redaction successor rebased so malformed input remains zero-audit/zero-write before matched-mutation audit enforcement", + "line": 16 + }, + { + "path": "docs/operating-engram.md", + "owners": [ + "REDACTION-LIVE-CONTRACT", + "FINAL-PUBLIC-TRUTH" + ], + "transfer_gate": "redaction live contract checker/post-review PASS and exact integration SHA; FINAL rebased and revalidates the operator claims against final published artifacts", + "line": 17 + }, + { + "path": "Dockerfile", + "owners": [ + "SECURITY-TOOLCHAIN", + "IMAGE-REMEDIATION" + ], + "transfer_gate": "toolchain checker and post-review PASS, commit integrated, image worktree rebased, zero-finding rebuild and scan before successor integration", + "line": 18 + }, + { + "path": ".github/workflows/test.yml", + "owners": [ + "RELEASE-GATES", + "IMAGE-REMEDIATION" + ], + "transfer_gate": "release-gates checker and post-review PASS, commit integrated, image worktree rebased before workflow image-identity changes", + "line": 19 + }, + { + "path": "docker-compose.yml", + "owners": [ + "IMAGE-REMEDIATION", + "DEPLOYMENT-ROLLBACK" + ], + "transfer_gate": "image checker and post-review PASS, `final-image-set.json` recorded, deployment worktree rebased, fresh scan after edits", + "line": 20 + }, + { + "path": "deploy/docker-compose.runtime.yml", + "owners": [ + "IMAGE-REMEDIATION", + "DEPLOYMENT-ROLLBACK" + ], + "transfer_gate": "image checker and post-review PASS, `final-image-set.json` recorded, deployment worktree rebased, fresh scan after edits", + "line": 20 + }, + { + "path": "apps/operator-console/package.json", + "owners": [ + "IMAGE-REMEDIATION", + "OC-INTEGRATION" + ], + "transfer_gate": "image checker and post-review PASS, OC worktree rebased, any later dependency edit reruns audit/build/browser/image scan", + "line": 21 + }, + { + "path": "apps/operator-console/package-lock.json", + "owners": [ + "IMAGE-REMEDIATION", + "OC-INTEGRATION" + ], + "transfer_gate": "image checker and post-review PASS, OC worktree rebased, any later dependency edit reruns audit/build/browser/image scan", + "line": 21 + }, + { + "path": "docs/DEPLOYMENT.md", + "owners": [ + "IMAGE-REMEDIATION", + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "transfer_gate": "image proof integrated; CORE rebased for M5; FINAL rebased to exact M6 integration and final-version artifact before edit", + "line": 22 + }, + { + "path": "docs/PRODUCTION-TESTING-PLAYBOOK.md", + "owners": [ + "IMAGE-REMEDIATION", + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "transfer_gate": "image proof integrated; CORE rebased for M5; FINAL rebased to exact M6 integration and final-version artifact before edit", + "line": 22 + }, + { + "path": "README.md", + "owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "transfer_gate": "M5 release published and proved; FINAL worktree rebased to exact M6 integration; final version artifact and exact release-note path recorded before edit", + "line": 23 + }, + { + "path": "README.ru.md", + "owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "transfer_gate": "M5 release published and proved; FINAL worktree rebased to exact M6 integration; final version artifact and exact release-note path recorded before edit", + "line": 23 + }, + { + "path": "README.zh.md", + "owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "transfer_gate": "M5 release published and proved; FINAL worktree rebased to exact M6 integration; final version artifact and exact release-note path recorded before edit", + "line": 23 + }, + { + "path": "CONTRIBUTING.md", + "owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "transfer_gate": "M5 release published and proved; FINAL worktree rebased to exact M6 integration; final version artifact and exact release-note path recorded before edit", + "line": 23 + }, + { + "path": "CHANGELOG.md", + "owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "transfer_gate": "M5 release published and proved; FINAL worktree rebased to exact M6 integration; final version artifact and exact release-note path recorded before edit", + "line": 23 + }, + { + "path": "Makefile", + "owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "transfer_gate": "M5 release published and proved; FINAL worktree rebased to exact M6 integration; final version artifact and exact release-note path recorded before edit", + "line": 23 + }, + { + "path": ".env.example", + "owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "transfer_gate": "M5 release published and proved; FINAL worktree rebased to exact M6 integration; final version artifact and exact release-note path recorded before edit", + "line": 23 + }, + { + "path": "docs/MIGRATION.md", + "owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "transfer_gate": "M5 release published and proved; FINAL worktree rebased to exact M6 integration; final version artifact and exact release-note path recorded before edit", + "line": 23 + }, + { + "path": "docs/arch/CONFIGURATION.md", + "owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "transfer_gate": "M5 release published and proved; FINAL worktree rebased to exact M6 integration; final version artifact and exact release-note path recorded before edit", + "line": 23 + }, + { + "path": "docs/arch/QUICKSTART.md", + "owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "transfer_gate": "M5 release published and proved; FINAL worktree rebased to exact M6 integration; final version artifact and exact release-note path recorded before edit", + "line": 23 + }, + { + "path": "docs/public/engram.jpg", + "owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "transfer_gate": "M5 release published and proved; FINAL worktree rebased to exact M6 integration; final version artifact and exact release-note path recorded before edit", + "line": 23 + }, + { + "path": "plugin/engram/commands/setup.md", + "owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "transfer_gate": "M5 release published and proved; FINAL worktree rebased to exact M6 integration; final version artifact and exact release-note path recorded before edit", + "line": 23 + }, + { + "path": "plugin/engram/commands/doctor.md", + "owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "transfer_gate": "M5 release published and proved; FINAL worktree rebased to exact M6 integration; final version artifact and exact release-note path recorded before edit", + "line": 23 + }, + { + "path": "internal/worker/dream_cycle.go", + "owners": [ + "CRYSTALLIZATION-DREAM-CYCLE-CORRECTNESS" + ], + "transfer_gate": "single-owner tracked epoch with no predecessor; the maker starts only after the named dependencies, then requires checker PASS, post-review PASS, integration SHA, and a root plan/state amendment before any later writer", + "line": 24 + }, + { + "path": "internal/worker/dream_cycle_test.go", + "owners": [ + "CRYSTALLIZATION-DREAM-CYCLE-CORRECTNESS" + ], + "transfer_gate": "single-owner tracked epoch with no predecessor; the maker starts only after the named dependencies, then requires checker PASS, post-review PASS, integration SHA, and a root plan/state amendment before any later writer", + "line": 24 + } + ], + "errors": [] +} diff --git a/.agent/specs/release-gates-r8/evidence/release-gates/local-code-review.md b/.agent/specs/release-gates-r8/evidence/release-gates/local-code-review.md new file mode 100644 index 00000000..c4588292 --- /dev/null +++ b/.agent/specs/release-gates-r8/evidence/release-gates/local-code-review.md @@ -0,0 +1,31 @@ +# RELEASE-GATES-R8 local changed-code review + +Verdict: `PASS_PENDING_INDEPENDENT_CHECKER_AND_ROOT_POST_REVIEW` + +This is maker-side post-change review, not independent acceptance. + +## Regression detector + +- Product runtime, public APIs, data models, migrations, and UI behavior are unchanged. +- CI now fails closed when its exact package-plus-test execution proof is bypassed or when the R8 plan/state/scope authority loses a required row, owner, fold, slice, or rejected-head policy. +- The live register is intentionally not byte-frozen. Two successive live SHAs (`8F099B...`, then `22F2AF...`) with the same 67-slice structure passed against the immutable `AB5F...` freeze provenance; the second change advanced DB embedding evidence inside its existing owner. +- No unrelated caller of `assert-plan-path-ownership.ps1` exists outside the updated workflow and its own self-test/hash-only modes. + +## Six-axis review + +1. Correctness: the database proof matches both exact Go package and exact test identity at the live consumer. Scope conformance checks unique slice parity, direct owners, fold/historical classification constraints, required plan rows, scope/state hash binding, and explicitly rejected heads. +2. Validation completeness: self-tests cover row-plus-epoch deletion, missing map entry, missing fold owner, new register slice, rejected head falsely accepted, ordinary progress allowed, scope hash mismatch, and wrong-package zero acceptance. The extracted CI harness rejects 51 mutations. +3. Readability: structural parsing is isolated in `Get-PlanRowNames`, status policy helpers, and `Invoke-ScopeContractAudit`; the workflow retains one conformance entry point. +4. Architecture: the scope map remains an immutable structural projection while the JSON register remains the sole mutable progress authority. No demolished v5 runtime scaffold is touched. +5. Security: no credential, input, network, or secret-handling surface changed. Exact case-sensitive package/test matching removes a false proof path. +6. Performance: audits are linear over 67 scope rows and the existing plan ledger; no production hot path or dependency is added. + +## Review correction made before final green + +An overconstraint was removed: a frozen current head is not required to be one of the historical rejected heads. Only a live row that presents an explicitly rejected head with an accepted status fails. This preserves ordinary successor-head progress while keeping the load-bearing rejection rail. + +## Residual gates + +- A fresh native independent checker and root post-review remain mandatory. +- Cross-model review streams could not be launched during the maker turn because all native agent slots were occupied; this is recorded as degraded review coverage, not as acceptance. +- The full fresh-database repeat-3/race suite and Docker dev-stand are intentionally left for the root-authorized expensive gate run. diff --git a/.agent/specs/release-gates-r8/evidence/release-gates/prove-it-package-final.workflow-conformance.json b/.agent/specs/release-gates-r8/evidence/release-gates/prove-it-package-final.workflow-conformance.json new file mode 100644 index 00000000..1b197b6f --- /dev/null +++ b/.agent/specs/release-gates-r8/evidence/release-gates/prove-it-package-final.workflow-conformance.json @@ -0,0 +1,18 @@ +{ + "schema_version": 1, + "label": "prove-it-package-final", + "live_package_binding_disabled": true, + "observed_at": "2026-07-10T20:35:16.7297899+00:00", + "exit_code": 1, + "workflow_sha256": "eacb67531d1b96862812273d41a605b5c10b5b26a99f9b8f4a0445f02ff51452", + "runner_sha256": "910e78011381e6bbfcf2fb15a97d61f54c2f399528b87ec02c6d30191701a8b4", + "extracted_script_sha256": "f75d539325743785360542cd058757f8fd1cddcfb669ac5a6c76846865e9247c", + "stdout_tail": [], + "stderr_tail": [ + "Exception: D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates-r8-maker\\.agent\\specs\\release-gates-r8\\evidence\\release-gates\\prove-it-package-final.workflow-conformance.ps1:531", + "Line |", + " 531 | … -not $rejected) { throw \"conformance mutation '$name' was accepted\" }", + " | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~", + " | conformance mutation 'remove live session-start package predicate' was accepted" + ] +} diff --git a/.agent/specs/release-gates-r8/evidence/release-gates/prove-it-scope-final.json b/.agent/specs/release-gates-r8/evidence/release-gates/prove-it-scope-final.json new file mode 100644 index 00000000..1711f6c0 --- /dev/null +++ b/.agent/specs/release-gates-r8/evidence/release-gates/prove-it-scope-final.json @@ -0,0 +1,17 @@ +{ + "schema_version": 1, + "label": "prove-it-scope-final", + "mutation": "disable live unique-slice-set enforcement", + "observed_at": "2026-07-10T20:34:51.0681677+00:00", + "exit_code": 1, + "source_sha256": "3e82ac89be0888d31b58b9046395fe14aa7c673d8706ae95779bb5d9c231111a", + "mutated_sha256": "f4150f31285d43b76e42850fe14d092d26c7d9b0cf2cc4b8e33b5919334c1cd4", + "stdout_tail": [], + "stderr_tail": [ + "Exception: D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates-r8-maker\\.agent\\specs\\release-gates-r8\\evidence\\release-gates\\prove-it-scope-final.assert-plan-path-ownership.ps1:962", + "Line |", + " 962 | if (-not $Condition) { throw \"SELFTEST FAIL: $Message\" }", + " | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~", + " | SELFTEST FAIL: live register slice missing from the scope map was accepted" + ] +} diff --git a/.agent/specs/release-gates-r8/evidence/release-gates/verification-summary.json b/.agent/specs/release-gates-r8/evidence/release-gates/verification-summary.json new file mode 100644 index 00000000..529f630d --- /dev/null +++ b/.agent/specs/release-gates-r8/evidence/release-gates/verification-summary.json @@ -0,0 +1,75 @@ +{ + "schema_version": 1, + "slice": "RELEASE-GATES", + "observed_at": "2026-07-10T23:43:48.0976027+03:00", + "authority": { + "reconstruction_base": "d59d1605969b1f567506e96ded524dfd1e4be08a", + "plan_governance_commit": "37d185b33b8f9411564fda49cf8b0d58321b62fd", + "plan_sha256": "fd2b223a9a62848efc39e1c33bf739bada191508bccb7ba9a73140185638e43d", + "scope_map_sha256": "81093184036672008d6b85dfa88a431998ef70b587ab11475aa2b315f03ddf79", + "register_freeze_sha256": "ab5f882fa110ca823a317061ecbca0c62516702735325893a56206f9e7a29415", + "register_freeze_updated_at": "2026-07-10T22:46:01.2938194+03:00" + }, + "source_hashes": { + ".github/workflows/test.yml": "eacb67531d1b96862812273d41a605b5c10b5b26a99f9b8f4a0445f02ff51452", + "scripts/production-gates/assert-plan-path-ownership.ps1": "3e82ac89be0888d31b58b9046395fe14aa7c673d8706ae95779bb5d9c231111a", + "scripts/production-gates/run-db-suite.ps1": "910e78011381e6bbfcf2fb15a97d61f54c2f399528b87ec02c6d30191701a8b4" + }, + "checks": { + "actionlint": { + "command": "actionlint .github/workflows/test.yml", + "exit_code": 0 + }, + "ownership_self_test": { + "command": "pwsh -NoProfile -File scripts/production-gates/assert-plan-path-ownership.ps1 -SelfTest", + "exit_code": 0 + }, + "database_runner_self_test": { + "command": "pwsh -NoProfile -File scripts/production-gates/run-db-suite.ps1 -SelfTest", + "exit_code": 0 + }, + "workflow_conformance": { + "command": "pwsh -NoProfile -File .agent/specs/release-gates-r8/evidence/release-gates/verify-workflow-conformance.ps1 -Repository . -Label final-green", + "exit_code": 0, + "mutations_rejected": 51, + "artifact": ".agent/specs/release-gates-r8/evidence/release-gates/final-green.workflow-conformance.json" + }, + "live_structural_ledger": { + "exit_code": 0, + "verdict": "PASS", + "live_register_sha256": "22f2af0817f1a525ea4436e95326353617294e02ccf2cdaed1a9c94adc1997fc", + "live_register_rows": 67, + "scope_entries": 67, + "maker_slices": 57, + "declarations": 333, + "repeated_exact_paths": 34, + "declared_epochs": 36, + "state_epochs": 36, + "errors": 0, + "artifact": ".agent/specs/release-gates-r8/evidence/release-gates/ledger-live-register.final.json", + "artifact_sha256": "70ac624ea18f08f95bd6195707a15c77522fa07b2dbe105f05ea42d66a8765b5" + } + }, + "progress_drift_proof": { + "freeze_sha256": "ab5f882fa110ca823a317061ecbca0c62516702735325893a56206f9e7a29415", + "observed_live_sha256_sequence": [ + "8f099b7564fde5655541e04e7a075b3441f460fd1a2058afbee771736d9f83e0", + "22f2af0817f1a525ea4436e95326353617294e02ccf2cdaed1a9c94adc1997fc" + ], + "live_sha256": "22f2af0817f1a525ea4436e95326353617294e02ccf2cdaed1a9c94adc1997fc", + "same_sha": false, + "structural_verdict": "PASS", + "meaning": "normal register progress changed mutable bytes while the exact 67-slice structure and load-bearing rejected-head policies remained conformant" + }, + "not_run_in_maker": [ + "full fresh-database repeat-3/race suite", + "Docker dev-stand build, readiness, Scout scan, and cleanup" + ], + "review": { + "local_six_axis_review": "PASS", + "independent_checker": "REQUIRED", + "root_post_review": "REQUIRED", + "cross_model_review": "UNAVAILABLE_DURING_MAKER_DUE_TO_NATIVE_AGENT_SLOT_SATURATION" + }, + "verdict": "PASS_PENDING_INDEPENDENT_CHECKER_AND_ROOT_POST_REVIEW" +} diff --git a/.agent/specs/release-gates-r8/evidence/release-gates/verify-scope-prove-it.ps1 b/.agent/specs/release-gates-r8/evidence/release-gates/verify-scope-prove-it.ps1 new file mode 100644 index 00000000..770f2c2f --- /dev/null +++ b/.agent/specs/release-gates-r8/evidence/release-gates/verify-scope-prove-it.ps1 @@ -0,0 +1,47 @@ +param( + [string]$Repository = (Resolve-Path (Join-Path $PSScriptRoot '..\..\..\..\..')).Path, + [string]$Label = 'scope-prove-it' +) + +Set-StrictMode -Version Latest +$ErrorActionPreference = 'Stop' + +function Write-Utf8NoBom { + param([string]$Path, [string]$Content) + [System.IO.File]::WriteAllText([System.IO.Path]::GetFullPath($Path), $Content, [System.Text.UTF8Encoding]::new($false)) +} + +$repositoryPath = [System.IO.Path]::GetFullPath($Repository) +$sourcePath = Join-Path $repositoryPath 'scripts/production-gates/assert-plan-path-ownership.ps1' +$mutatedPath = Join-Path $PSScriptRoot "$Label.assert-plan-path-ownership.ps1" +$stdoutPath = Join-Path $PSScriptRoot "$Label.stdout.log" +$stderrPath = Join-Path $PSScriptRoot "$Label.stderr.log" +$resultPath = Join-Path $PSScriptRoot "$Label.json" + +$source = Get-Content -Raw -LiteralPath $sourcePath +$enforcement = "`$errors.Add('live register unique slice set differs from the frozen scope map')" +$count = ([regex]::Matches($source, [regex]::Escape($enforcement))).Count +if ($count -ne 1) { throw "scope-set enforcement fixture cardinality is $count, expected 1" } +Write-Utf8NoBom $mutatedPath ($source.Replace($enforcement, "`$null = 'scope-set enforcement disabled for Prove-It'")) + +Push-Location $repositoryPath +try { + & pwsh -NoProfile -File $mutatedPath -SelfTest 1> $stdoutPath 2> $stderrPath + $exitCode = $LASTEXITCODE +} +finally { Pop-Location } + +$result = [pscustomobject][ordered]@{ + schema_version = 1 + label = $Label + mutation = 'disable live unique-slice-set enforcement' + observed_at = [DateTimeOffset]::UtcNow.ToString('O') + exit_code = $exitCode + source_sha256 = (Get-FileHash -Algorithm SHA256 -LiteralPath $sourcePath).Hash.ToLowerInvariant() + mutated_sha256 = (Get-FileHash -Algorithm SHA256 -LiteralPath $mutatedPath).Hash.ToLowerInvariant() + stdout_tail = @((Get-Content -LiteralPath $stdoutPath -ErrorAction SilentlyContinue | Select-Object -Last 8)) + stderr_tail = @((Get-Content -LiteralPath $stderrPath -ErrorAction SilentlyContinue | Select-Object -Last 8)) +} +Write-Utf8NoBom $resultPath (($result | ConvertTo-Json -Depth 5) + "`n") +$result | ConvertTo-Json -Depth 5 +exit $exitCode diff --git a/.agent/specs/release-gates-r8/evidence/release-gates/verify-workflow-conformance.ps1 b/.agent/specs/release-gates-r8/evidence/release-gates/verify-workflow-conformance.ps1 new file mode 100644 index 00000000..760b6c7a --- /dev/null +++ b/.agent/specs/release-gates-r8/evidence/release-gates/verify-workflow-conformance.ps1 @@ -0,0 +1,91 @@ +param( + [string]$Repository = (Resolve-Path (Join-Path $PSScriptRoot '..\..\..\..\..')).Path, + [string]$Label = 'current', + [switch]$DisableLivePackageBinding +) + +Set-StrictMode -Version Latest +$ErrorActionPreference = 'Stop' + +function Assert-Condition { + param([bool]$Condition, [string]$Message) + if (-not $Condition) { throw $Message } +} + +function Write-Utf8NoBom { + param([string]$Path, [string]$Content) + [System.IO.File]::WriteAllText([System.IO.Path]::GetFullPath($Path), $Content, [System.Text.UTF8Encoding]::new($false)) +} + +function Get-WorkflowConformanceScript { + param([string]$WorkflowPath) + + $lines = [System.IO.File]::ReadAllLines($WorkflowPath) + $stepIndex = [Array]::IndexOf($lines, ' - name: Assert tracked gate / CI conformance') + Assert-Condition ($stepIndex -ge 0) 'workflow conformance step is missing' + + $runIndex = -1 + for ($index = $stepIndex + 1; $index -lt $lines.Count; $index++) { + if ($lines[$index] -ceq ' run: |') { $runIndex = $index; break } + if ($lines[$index] -match '^ - name: ') { break } + } + Assert-Condition ($runIndex -ge 0) 'workflow conformance run block is missing' + + $body = [System.Collections.Generic.List[string]]::new() + for ($index = $runIndex + 1; $index -lt $lines.Count; $index++) { + if ($lines[$index] -match '^ - name: ') { break } + $line = $lines[$index] + Assert-Condition ($line.Length -eq 0 -or $line.StartsWith(' ', [System.StringComparison]::Ordinal)) "workflow conformance line is not an exact YAML block at line $($index + 1)" + $body.Add($(if ($line.Length -eq 0) { '' } else { $line.Substring(10) })) + } + return (($body -join "`n") + "`n") +} + +$repositoryPath = [System.IO.Path]::GetFullPath($Repository) +$evidenceDirectory = [System.IO.Path]::GetFullPath($PSScriptRoot) +$workflowPath = Join-Path $repositoryPath '.github/workflows/test.yml' +$runnerPath = Join-Path $repositoryPath 'scripts/production-gates/run-db-suite.ps1' +$scriptPath = Join-Path $evidenceDirectory "$Label.workflow-conformance.ps1" +$stdoutPath = Join-Path $evidenceDirectory "$Label.workflow-conformance.stdout.log" +$stderrPath = Join-Path $evidenceDirectory "$Label.workflow-conformance.stderr.log" +$resultPath = Join-Path $evidenceDirectory "$Label.workflow-conformance.json" + +$workflowSourcePath = $workflowPath +if ($DisableLivePackageBinding) { + $workflowText = Get-Content -Raw -LiteralPath $workflowPath + $enforcement = "throw 'required session-start live consumer does not bind exact case-sensitive package plus test identity at the point of consumption'" + $enforcementCount = ([regex]::Matches($workflowText, [regex]::Escape($enforcement))).Count + Assert-Condition ($enforcementCount -eq 1) "live package-binding enforcement fixture cardinality is $enforcementCount, expected 1" + $workflowSourcePath = Join-Path $evidenceDirectory "$Label.workflow-under-test.yml" + Write-Utf8NoBom $workflowSourcePath ($workflowText.Replace($enforcement, '$null = $liveMatchesAssignment')) +} + +Write-Utf8NoBom $scriptPath (Get-WorkflowConformanceScript $workflowSourcePath) +$previousRunnerTemp = $env:RUNNER_TEMP +$env:RUNNER_TEMP = Join-Path $evidenceDirectory "$Label.runner-temp" +New-Item -ItemType Directory -Path $env:RUNNER_TEMP -Force | Out-Null +try { + Push-Location $repositoryPath + try { + & pwsh -NoProfile -File $scriptPath 1> $stdoutPath 2> $stderrPath + $exitCode = $LASTEXITCODE + } + finally { Pop-Location } +} +finally { $env:RUNNER_TEMP = $previousRunnerTemp } + +$result = [pscustomobject][ordered]@{ + schema_version = 1 + label = $Label + live_package_binding_disabled = [bool]$DisableLivePackageBinding + observed_at = [DateTimeOffset]::UtcNow.ToString('O') + exit_code = $exitCode + workflow_sha256 = (Get-FileHash -Algorithm SHA256 -LiteralPath $workflowPath).Hash.ToLowerInvariant() + runner_sha256 = (Get-FileHash -Algorithm SHA256 -LiteralPath $runnerPath).Hash.ToLowerInvariant() + extracted_script_sha256 = (Get-FileHash -Algorithm SHA256 -LiteralPath $scriptPath).Hash.ToLowerInvariant() + stdout_tail = @((Get-Content -LiteralPath $stdoutPath -ErrorAction SilentlyContinue | Select-Object -Last 8)) + stderr_tail = @((Get-Content -LiteralPath $stderrPath -ErrorAction SilentlyContinue | Select-Object -Last 8)) +} +Write-Utf8NoBom $resultPath (($result | ConvertTo-Json -Depth 5) + "`n") +$result | ConvertTo-Json -Depth 5 +exit $exitCode diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index c460afae..79470563 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -82,8 +82,10 @@ jobs: ./scripts/production-gates/assert-plan-path-ownership.ps1 -Mode Ledger -Plan .agent/plans/2026-07-10-engram-production-ready-master-plan.md - -ExpectedPlanSha256 d7bcfd122e456d9b764595524292d53b0c99447b7f716a1be0707341e4681bf9 + -ExpectedPlanSha256 fd2b223a9a62848efc39e1c33bf739bada191508bccb7ba9a73140185638e43d -State .agent/plans/2026-07-10-engram-production-ready-ownership-state.json + -ScopeMap .agent/plans/2026-07-10-engram-production-ready-scope-map.json + -ExpectedScopeMapSha256 81093184036672008d6b85dfa88a431998ef70b587ab11475aa2b315f03ddf79 -Artifact .agent/e/rg4/ci-ledger.json - name: Assert Windows tracked path budget @@ -94,6 +96,11 @@ jobs: shell: pwsh run: | $ErrorActionPreference = 'Stop' + function Get-CanonicalTextSha256([string]$text) { + $canonical = ($text -replace "`r`n", "`n") -replace "`r", "`n" + $bytes = [System.Text.UTF8Encoding]::new($false).GetBytes($canonical) + return [Convert]::ToHexString([System.Security.Cryptography.SHA256]::HashData($bytes)).ToLowerInvariant() + } $critical = Get-Content -Raw '.agent/critical-suite.config.yaml' $stand = Get-Content -Raw '.agent/dev-stand.config.yaml' $workflow = Get-Content -Raw '.github/workflows/test.yml' @@ -104,8 +111,12 @@ jobs: $pathBudgetRunner = Get-Content -Raw 'scripts/production-gates/assert-windows-path-budget.ps1' $nodeRunner = Get-Content -Raw 'scripts/production-gates/run-node-matrix.ps1' $ownershipState = Get-Content -Raw '.agent/plans/2026-07-10-engram-production-ready-ownership-state.json' - $expectedPlanSha = 'd7bcfd122e456d9b764595524292d53b0c99447b7f716a1be0707341e4681bf9' + $masterPlan = Get-Content -Raw '.agent/plans/2026-07-10-engram-production-ready-master-plan.md' + $scopeMap = Get-Content -Raw '.agent/plans/2026-07-10-engram-production-ready-scope-map.json' + $expectedPlanSha = 'fd2b223a9a62848efc39e1c33bf739bada191508bccb7ba9a73140185638e43d' + $expectedScopeMapSha = '81093184036672008d6b85dfa88a431998ef70b587ab11475aa2b315f03ddf79' $observedPlanSha = ([string](& pwsh -NoProfile -File scripts/production-gates/assert-plan-path-ownership.ps1 -Plan .agent/plans/2026-07-10-engram-production-ready-master-plan.md -PrintCanonicalPlanSha256)).Trim() + $observedScopeMapSha = Get-CanonicalTextSha256 $scopeMap $rejectedBulkHead = '68b2ce5835c7c6efdf1c68da9eedcb8d9c3837ef' $rejectedBulkChecker = '.agent/worktrees/prc-db-bulkops/.agent/reviews/2026-07-10-db-bulkops-sibling-rework-check.md' $rejectedBulkCheckerSha = 'EB9EB227363A27EA058C6654BD7E38EED1088252F79F837E377B2A3CBC1FAFB7' @@ -292,18 +303,45 @@ jobs: $proofFunctions = @($ast.FindAll({ param($node) $node -is [System.Management.Automation.Language.FunctionDefinitionAst] -and $node.Name -ceq 'Get-RequiredSessionStartExecutionProof' }, $true)) if ($proofFunctions.Count -ne 1) { throw "Get-RequiredSessionStartExecutionProof cardinality must be exactly 1; found $($proofFunctions.Count)" } + $allPackageAssignments = @($proofFunctions[0].Body.FindAll({ + param($node) + $node -is [System.Management.Automation.Language.AssignmentStatementAst] -and $node.Left.Extent.Text -ceq '$package' + }, $true)) + if ($allPackageAssignments.Count -ne 1) { throw "required session-start package assignment cardinality must be exactly 1; found $($allPackageAssignments.Count)" } $packageAssignments = @($proofFunctions[0].Body.FindAll({ param($node) $node -is [System.Management.Automation.Language.AssignmentStatementAst] -and $node.Left.Extent.Text -ceq '$package' -and (ConvertTo-AstShape $node.Right.Extent.Text) -ceq (ConvertTo-AstShape ("'" + $expectedPackage + "'")) }, $true)) - if ($packageAssignments.Count -ne 1) { throw "required session-start package must be exactly '$expectedPackage'" } + if ($packageAssignments.Count -ne 1 -or $packageAssignments[0].Extent.StartOffset -ne $allPackageAssignments[0].Extent.StartOffset) { throw "required session-start package must be assigned exactly once to '$expectedPackage'" } $inventoryAssignments = @($proofFunctions[0].Body.FindAll({ param($node) $node -is [System.Management.Automation.Language.AssignmentStatementAst] -and $node.Left.Extent.Text -ceq '$expectedNames' -and (ConvertTo-AstShape $node.Right.Extent.Text) -ceq (ConvertTo-AstShape '@(Get-RequiredSessionStartTestNames)') }, $true)) if ($inventoryAssignments.Count -ne 1) { throw 'execution proof does not consume the pinned required session-start identity inventory exactly once' } + + $consumerLoops = @($proofFunctions[0].Body.FindAll({ + param($node) + $node -is [System.Management.Automation.Language.ForEachStatementAst] -and + $node.Variable.Extent.Text -ceq '$name' -and + (ConvertTo-AstShape $node.Condition.Extent.Text) -ceq (ConvertTo-AstShape '$expectedNames') + }, $true)) + if ($consumerLoops.Count -ne 1) { throw "required session-start consumer loop cardinality must be exactly 1; found $($consumerLoops.Count)" } + $matchesAssignments = @($proofFunctions[0].Body.FindAll({ + param($node) + $node -is [System.Management.Automation.Language.AssignmentStatementAst] -and $node.Left.Extent.Text -ceq '$matches' + }, $true)) + if ($matchesAssignments.Count -ne 1) { throw "required session-start live matches assignment cardinality must be exactly 1; found $($matchesAssignments.Count)" } + $liveMatchesAssignment = $consumerLoops[0].Body.Statements[0] + $expectedMatchesExpression = '@($allTests | Where-Object { [string]$_.package -ceq $package -and [string]$_.test -ceq $name })' + if ($liveMatchesAssignment -isnot [System.Management.Automation.Language.AssignmentStatementAst] -or + $liveMatchesAssignment.Left.Extent.Text -cne '$matches' -or + $liveMatchesAssignment.Extent.StartOffset -ne $matchesAssignments[0].Extent.StartOffset -or + $packageAssignments[0].Extent.StartOffset -ge $liveMatchesAssignment.Extent.StartOffset -or + (ConvertTo-AstShape $liveMatchesAssignment.Right.Extent.Text) -cne (ConvertTo-AstShape $expectedMatchesExpression)) { + throw 'required session-start live consumer does not bind exact case-sensitive package plus test identity at the point of consumption' + } } function Get-ExactRuntimeAssignment( @@ -460,11 +498,15 @@ jobs: [string]$devStandRunnerText, [string]$ownershipRunnerText = $ownershipRunner, [string]$nodeRunnerText = $nodeRunner, - [string]$stateText = $ownershipState + [string]$stateText = $ownershipState, + [string]$planText = $masterPlan, + [string]$scopeText = $scopeMap ) { $execution = Remove-ConformanceStep $workflowText Assert-LiveDevStandInvocationContract $dbRunnerText if ($observedPlanSha -cne $expectedPlanSha) { throw "tracked production-ready plan hash drifted: expected=$expectedPlanSha observed=$observedPlanSha" } + if ((Get-CanonicalTextSha256 $planText) -cne $expectedPlanSha) { throw 'challenged plan text is not the exact canonical R8 authority' } + if ($observedScopeMapSha -cne $expectedScopeMapSha -or (Get-CanonicalTextSha256 $scopeText) -cne $expectedScopeMapSha) { throw "tracked R8 scope-map hash drifted: expected=$expectedScopeMapSha observed=$observedScopeMapSha" } $repeatToken = '(?i)(? DB-TEST-POOL-HYGIENE', '') + $deletedPlanState = $ownershipState | ConvertFrom-Json -Depth 100 + $deletedPlanEpoch = @($deletedPlanState.path_epochs | Where-Object path -CEQ 'internal/db/gorm/candidate_store_test.go')[0] + $deletedPlanEpoch.ordered_owners = @($deletedPlanEpoch.ordered_owners | Where-Object { [string]$_ -CNE 'DB-TEST-POOL-HYGIENE' }) + Assert-MutationRejected 'delete required plan row plus epoch owner together' { Assert-WorkflowContract $workflow $critical $stand $dbRunner $criticalRunner $devStandRunner -stateText ($deletedPlanState | ConvertTo-Json -Depth 100) -planText $deletedPlanAndEpoch } + Write-Output 'CONFORMANCE PASS: canonical LF/CRLF plan and structural scope authority, exact wrappers, path budget, AST-validated reachable exactly-once source-built image provenance and Scout, immutable live package-plus-test 12-test zero-skip DB execution proof, ownership state, node matrix, readiness, cleanup, and full/race semantics match; 51 mutations rejected' - name: Resolve PostgreSQL service identity shell: pwsh diff --git a/scripts/production-gates/assert-plan-path-ownership.ps1 b/scripts/production-gates/assert-plan-path-ownership.ps1 index 3203e43b..434969da 100644 --- a/scripts/production-gates/assert-plan-path-ownership.ps1 +++ b/scripts/production-gates/assert-plan-path-ownership.ps1 @@ -8,6 +8,9 @@ param( [string]$Plan = '.agent/plans/2026-07-10-engram-production-ready-master-plan.md', [string]$ExpectedPlanSha256, [string]$State = '.agent/plans/2026-07-10-engram-production-ready-ownership-state.json', + [string]$ScopeMap = '.agent/plans/2026-07-10-engram-production-ready-scope-map.json', + [string]$ExpectedScopeMapSha256, + [string]$Register, [string]$EvidenceNamespace, [string]$ReportNamespace, [string]$Artifact = '.agent/reports/evidence/production-ready/ownership/path-ledger.json', @@ -43,13 +46,18 @@ Usage: -Plan .agent/plans/2026-07-10-engram-production-ready-master-plan.md ` -ExpectedPlanSha256 <64-hex-sha256> ` -State .agent/plans/2026-07-10-engram-production-ready-ownership-state.json ` + -ScopeMap .agent/plans/2026-07-10-engram-production-ready-scope-map.json ` + -ExpectedScopeMapSha256 <64-hex-sha256> ` + -Register ` -Artifact .agent/reports/evidence/production-ready/ownership/path-ledger.json pwsh ./scripts/production-gates/assert-plan-path-ownership.ps1 -Mode Diff ` -Slice DB-BULKOPS -Base <40-hex-commit> -Head <40-hex-commit> ` -EvidenceNamespace '.agent/specs/production-ready-db-bulkops/evidence/**' ` -ReportNamespace .agent/reports/db-bulkops-maker.md -Plan ` - -ExpectedPlanSha256 <64-hex-sha256> -State -Artifact + -ExpectedPlanSha256 <64-hex-sha256> -State ` + -ScopeMap -ExpectedScopeMapSha256 <64-hex-sha256> ` + -Register -Artifact pwsh ./scripts/production-gates/assert-plan-path-ownership.ps1 ` -Plan -PrintCanonicalPlanSha256 @@ -1133,9 +1141,285 @@ function Invoke-SelfTest { $parsedAgentPath = ConvertFrom-GitNameStatusLines @("A`t.agent/specs/db-x/evidence/proof.json") Assert-SelfTestCondition ($parsedAgentPath.errors.Count -eq 0 -and $parsedAgentPath.entries[0].paths[0] -eq '.agent/specs/db-x/evidence/proof.json') '.agent path normalization stripped its leading dot' + $scopeSha = ('d' * 64) + $rejectedHead = ('e' * 40) + $scopePlan = New-SyntheticPlan -Rows "| A | ``work/a`` | ``src/shared.go`` | none | proof |`n| B | ``work/b`` | ``src/shared.go`` | A integrated | proof |`n| ROOT | root-owned | ``.agent/root/**`` only | A and B accepted | proof |" -EpochRows '| `src/shared.go` | A | B | A checker and post-review PASS, commit integrated, B rebased |' + $scopeState = [pscustomobject][ordered]@{ + schema_version = 1 + scope_map = [pscustomobject][ordered]@{ path = '.agent/plans/2026-07-10-engram-production-ready-scope-map.json'; sha256 = $scopeSha } + path_epochs = @() + } + $scopeFixture = [pscustomobject][ordered]@{ + schema_version = 1 + kind = 'production-ready-scope-map' + plan_path = '.agent/plans/2026-07-10-engram-production-ready-master-plan.md' + ownership_state_path = '.agent/plans/2026-07-10-engram-production-ready-ownership-state.json' + register_snapshot = [pscustomobject][ordered]@{ source_path = '.agent/reports/register.json'; sha256 = ('f' * 64); updated_at = '2026-07-10T00:00:00Z'; row_count = 5; unique_slice_count = 5; goal_status = 'ACTIVE' } + allowed_classifications = @('maker', 'checker-evidence', 'meta-fold', 'historical', 'root-integration') + live_conformance_policy = [pscustomobject][ordered]@{ + mode = 'structural-projection' + exact_fields = @('slice', 'classification', 'plan_owners') + snapshot_only_fields = @('register_snapshot.sha256', 'register_snapshot.updated_at', 'register_status', 'register_head', 'register_notes') + load_bearing_entry_field = 'load_bearing' + acceptance_tokens = @('PASS', 'READY_FOR_INTEGRATION', 'PRODUCT_ACCEPTED', 'ACCEPTED', 'INTEGRATED', 'COMPLETE') + rejection_tokens = @('REVISE', 'REJECT', 'FAIL', 'DIAGNOSTIC', 'HOLD', 'BLOCKED', 'PENDING', 'UNACCEPTED', 'NOT_ACCEPTED') + } + entries = @( + [pscustomobject][ordered]@{ slice = 'A'; classification = 'maker'; plan_owners = @('A'); register_status = 'PENDING'; register_head = '' }, + [pscustomobject][ordered]@{ slice = 'B'; classification = 'checker-evidence'; plan_owners = @('B'); register_status = 'PENDING'; register_head = '' }, + [pscustomobject][ordered]@{ slice = 'META'; classification = 'meta-fold'; plan_owners = @('A', 'B'); register_status = 'PENDING'; register_head = '' }, + [pscustomobject][ordered]@{ slice = 'OLD'; classification = 'historical'; plan_owners = @('A'); register_status = 'REVISE_HOLD'; register_head = $rejectedHead; load_bearing = [pscustomobject][ordered]@{ policy = 'rejected_heads_must_not_be_accepted'; rejected_heads = @($rejectedHead) } }, + [pscustomobject][ordered]@{ slice = 'ROOT'; classification = 'root-integration'; plan_owners = @('ROOT'); register_status = 'BLOCKED'; register_head = '' } + ) + } + $registerFixture = [pscustomobject][ordered]@{ + updated_at = '2026-07-10T01:00:00Z' + criteria = @( + [pscustomobject][ordered]@{ slice = 'A'; status = 'PENDING'; head = ''; notes = 'mutable' }, + [pscustomobject][ordered]@{ slice = 'B'; status = 'PENDING'; head = ''; notes = 'mutable' }, + [pscustomobject][ordered]@{ slice = 'META'; status = 'PENDING'; head = ''; notes = 'mutable' }, + [pscustomobject][ordered]@{ slice = 'OLD'; status = 'REVISE_HOLD'; head = $rejectedHead; notes = 'mutable' }, + [pscustomobject][ordered]@{ slice = 'ROOT'; status = 'BLOCKED'; head = ''; notes = 'mutable' } + ) + } + $validScope = Invoke-ScopeContractAudit -ScopeMapObject $scopeFixture -ObservedScopeMapSha256 $scopeSha -ExpectedScopeMapSha256 $scopeSha -StateObject $scopeState -PlanText $scopePlan -RegisterObject $registerFixture + Assert-SelfTestCondition ($validScope.verdict -eq 'PASS') ("valid structural scope fixture was rejected: " + ($validScope.errors -join '; ')) + + $deletedPlanAndEpoch = New-SyntheticPlan -Rows '| A | `work/a` | `src/shared.go` | none | proof |' -EpochRows '' + $deletedState = $scopeState | ConvertTo-Json -Depth 20 | ConvertFrom-Json -Depth 20 + $deletedState.path_epochs = @() + $deletedScopeResult = Invoke-ScopeContractAudit -ScopeMapObject $scopeFixture -ObservedScopeMapSha256 $scopeSha -ExpectedScopeMapSha256 $scopeSha -StateObject $deletedState -PlanText $deletedPlanAndEpoch -RegisterObject $registerFixture + Assert-SelfTestCondition ($deletedScopeResult.verdict -eq 'FAIL') 'plan row plus state epoch deletion was accepted while the frozen scope still required its owner' + + $missingEntry = $scopeFixture | ConvertTo-Json -Depth 20 | ConvertFrom-Json -Depth 20 + $missingEntry.entries = @($missingEntry.entries | Where-Object slice -CNE 'B') + $missingEntry.register_snapshot.row_count = 4 + $missingEntry.register_snapshot.unique_slice_count = 4 + $missingEntryResult = Invoke-ScopeContractAudit -ScopeMapObject $missingEntry -ObservedScopeMapSha256 $scopeSha -ExpectedScopeMapSha256 $scopeSha -StateObject $scopeState -PlanText $scopePlan -RegisterObject $registerFixture + Assert-SelfTestCondition ($missingEntryResult.verdict -eq 'FAIL') 'live register slice missing from the scope map was accepted' + + $missingFoldOwner = $scopeFixture | ConvertTo-Json -Depth 20 | ConvertFrom-Json -Depth 20 + @($missingFoldOwner.entries | Where-Object slice -CEQ 'META')[0].plan_owners = @('A', 'MISSING') + $missingFoldResult = Invoke-ScopeContractAudit -ScopeMapObject $missingFoldOwner -ObservedScopeMapSha256 $scopeSha -ExpectedScopeMapSha256 $scopeSha -StateObject $scopeState -PlanText $scopePlan -RegisterObject $registerFixture + Assert-SelfTestCondition ($missingFoldResult.verdict -eq 'FAIL') 'fold targeting a missing owner was accepted' + + $staleAcceptedRegister = $registerFixture | ConvertTo-Json -Depth 20 | ConvertFrom-Json -Depth 20 + @($staleAcceptedRegister.criteria | Where-Object slice -CEQ 'OLD')[0].status = 'READY_FOR_INTEGRATION' + $staleAcceptedResult = Invoke-ScopeContractAudit -ScopeMapObject $scopeFixture -ObservedScopeMapSha256 $scopeSha -ExpectedScopeMapSha256 $scopeSha -StateObject $scopeState -PlanText $scopePlan -RegisterObject $staleAcceptedRegister + Assert-SelfTestCondition ($staleAcceptedResult.verdict -eq 'FAIL') 'explicitly rejected historical head was accepted as current' + + $ordinaryProgressRegister = $registerFixture | ConvertTo-Json -Depth 20 | ConvertFrom-Json -Depth 20 + $ordinaryProgressRegister.updated_at = '2026-07-10T02:00:00Z' + $progressRow = @($ordinaryProgressRegister.criteria | Where-Object slice -CEQ 'B')[0] + $progressRow.status = 'READY_FOR_INTEGRATION' + $progressRow.head = ('1' * 40) + $progressRow.notes = 'ordinary same-lane progress changed evidence text' + $ordinaryProgressResult = Invoke-ScopeContractAudit -ScopeMapObject $scopeFixture -ObservedScopeMapSha256 $scopeSha -ExpectedScopeMapSha256 $scopeSha -StateObject $scopeState -PlanText $scopePlan -RegisterObject $ordinaryProgressRegister + Assert-SelfTestCondition ($ordinaryProgressResult.verdict -eq 'PASS') ("ordinary same-lane register progress was rejected: " + ($ordinaryProgressResult.errors -join '; ')) + + $newRegisterSlice = $registerFixture | ConvertTo-Json -Depth 20 | ConvertFrom-Json -Depth 20 + $newRegisterSlice.criteria = @($newRegisterSlice.criteria) + [pscustomobject][ordered]@{ slice = 'NEW'; status = 'PENDING'; head = ''; notes = '' } + $newRegisterResult = Invoke-ScopeContractAudit -ScopeMapObject $scopeFixture -ObservedScopeMapSha256 $scopeSha -ExpectedScopeMapSha256 $scopeSha -StateObject $scopeState -PlanText $scopePlan -RegisterObject $newRegisterSlice + Assert-SelfTestCondition ($newRegisterResult.verdict -eq 'FAIL') 'new live register slice without a refreshed scope map was accepted' + + $scopeHashMismatch = Invoke-ScopeContractAudit -ScopeMapObject $scopeFixture -ObservedScopeMapSha256 ('0' * 64) -ExpectedScopeMapSha256 $scopeSha -StateObject $scopeState -PlanText $scopePlan -RegisterObject $registerFixture + Assert-SelfTestCondition ($scopeHashMismatch.verdict -eq 'FAIL') 'scope map hash mismatch was accepted' + Write-Output 'SELFTEST PASS: assert-plan-path-ownership.ps1' } +function Get-PlanRowNames { + param([Parameter(Mandatory)][string]$Text) + + $matrixSection = Get-MarkdownSection $Text '^## 4\. Worktree and Ownership Matrix\s*$' '^### 4\.1\s+' + $matrixRows = @(Get-TableRows $matrixSection 'Slice') + $names = [System.Collections.Generic.List[string]]::new() + $seen = [System.Collections.Generic.HashSet[string]]::new([System.StringComparer]::Ordinal) + foreach ($row in $matrixRows) { + if ($row.cells.Count -lt 5) { throw "line $($row.line_number): ownership row has $($row.cells.Count) cells, expected at least 5" } + $name = $row.cells[0].Trim().Trim('`') + if ($name -notmatch '^[A-Z0-9][A-Z0-9-]*$') { throw "line $($row.line_number): plan row identity '$name' is not canonical" } + if (-not $seen.Add($name)) { throw "plan row identity '$name' appears more than once" } + $names.Add($name) + } + return @($names) +} + +function Test-StatusContainsPolicyToken { + param( + [Parameter(Mandatory)][string]$Status, + [Parameter(Mandatory)][string]$Token + ) + + if ([string]::IsNullOrWhiteSpace($Status) -or [string]::IsNullOrWhiteSpace($Token)) { return $false } + return [regex]::IsMatch( + $Status, + '(^|_)' + [regex]::Escape($Token) + '(_|$)', + [System.Text.RegularExpressions.RegexOptions]::IgnoreCase + ) +} + +function Test-RegisterStatusAccepted { + param( + [Parameter(Mandatory)][string]$Status, + [Parameter(Mandatory)][AllowEmptyCollection()][object[]]$AcceptanceTokens, + [Parameter(Mandatory)][AllowEmptyCollection()][object[]]$RejectionTokens + ) + + $accepted = @($AcceptanceTokens | Where-Object { Test-StatusContainsPolicyToken -Status $Status -Token ([string]$_) }).Count -gt 0 + $rejected = @($RejectionTokens | Where-Object { Test-StatusContainsPolicyToken -Status $Status -Token ([string]$_) }).Count -gt 0 + return $accepted -and -not $rejected +} + +function Invoke-ScopeContractAudit { + param( + [Parameter(Mandatory)]$ScopeMapObject, + [Parameter(Mandatory)][string]$ObservedScopeMapSha256, + [Parameter(Mandatory)][string]$ExpectedScopeMapSha256, + [Parameter(Mandatory)]$StateObject, + [Parameter(Mandatory)][string]$PlanText, + [AllowNull()]$RegisterObject = $null + ) + + $errors = [System.Collections.Generic.List[string]]::new() + $expectedClassifications = @('maker', 'checker-evidence', 'meta-fold', 'historical', 'root-integration') + $expectedExactFields = @('slice', 'classification', 'plan_owners') + $expectedSnapshotFields = @('register_snapshot.sha256', 'register_snapshot.updated_at', 'register_status', 'register_head', 'register_notes') + $expectedScopePath = '.agent/plans/2026-07-10-engram-production-ready-scope-map.json' + + if (-not (Test-ExpectedPlanHash -ObservedSha256 $ObservedScopeMapSha256 -ExpectedSha256 $ExpectedScopeMapSha256)) { + $errors.Add("observed scope-map SHA256 '$ObservedScopeMapSha256' does not match expected '$ExpectedScopeMapSha256'") + } + + $stateScope = Get-PropertyValue $StateObject 'scope_map' + $stateScopePath = [string](Get-PropertyValue $stateScope 'path') + $stateScopeSha = [string](Get-PropertyValue $stateScope 'sha256') + if ($stateScopePath -cne $expectedScopePath) { $errors.Add("ownership state scope-map path '$stateScopePath' is not canonical") } + if (-not (Test-ExpectedPlanHash -ObservedSha256 $stateScopeSha -ExpectedSha256 $ExpectedScopeMapSha256)) { + $errors.Add("ownership state scope-map SHA256 '$stateScopeSha' does not match expected '$ExpectedScopeMapSha256'") + } + + if ((Get-PropertyValue $ScopeMapObject 'schema_version') -ne 1) { $errors.Add('scope map schema_version must be 1') } + if ([string](Get-PropertyValue $ScopeMapObject 'kind') -cne 'production-ready-scope-map') { $errors.Add('scope map kind must be production-ready-scope-map') } + $scopePlanPath = [string](Get-PropertyValue $ScopeMapObject 'plan_path') + $scopeStatePath = [string](Get-PropertyValue $ScopeMapObject 'ownership_state_path') + if ($scopePlanPath -cne '.agent/plans/2026-07-10-engram-production-ready-master-plan.md') { $errors.Add("scope map plan_path '$scopePlanPath' is not canonical") } + if ($scopeStatePath -cne '.agent/plans/2026-07-10-engram-production-ready-ownership-state.json') { $errors.Add("scope map ownership_state_path '$scopeStatePath' is not canonical") } + + [object[]]$allowedClassifications = @((Get-PropertyValue $ScopeMapObject 'allowed_classifications') | ForEach-Object { [string]$_ }) + if (-not (Test-SameStringSequence $expectedClassifications $allowedClassifications)) { $errors.Add('scope map allowed_classifications drifted') } + + $policy = Get-PropertyValue $ScopeMapObject 'live_conformance_policy' + if ([string](Get-PropertyValue $policy 'mode') -cne 'structural-projection') { $errors.Add('scope map live policy must use structural-projection mode') } + [object[]]$exactFields = @((Get-PropertyValue $policy 'exact_fields') | ForEach-Object { [string]$_ }) + [object[]]$snapshotFields = @((Get-PropertyValue $policy 'snapshot_only_fields') | ForEach-Object { [string]$_ }) + [object[]]$acceptanceTokens = @((Get-PropertyValue $policy 'acceptance_tokens') | ForEach-Object { [string]$_ }) + [object[]]$rejectionTokens = @((Get-PropertyValue $policy 'rejection_tokens') | ForEach-Object { [string]$_ }) + if (-not (Test-SameStringSequence $expectedExactFields $exactFields)) { $errors.Add('scope map exact structural fields drifted') } + if (-not (Test-SameStringSequence $expectedSnapshotFields $snapshotFields)) { $errors.Add('scope map snapshot-only fields drifted') } + if ([string](Get-PropertyValue $policy 'load_bearing_entry_field') -cne 'load_bearing') { $errors.Add('scope map load-bearing field name drifted') } + if ($acceptanceTokens.Count -lt 1 -or @($acceptanceTokens | Select-Object -Unique).Count -ne $acceptanceTokens.Count) { $errors.Add('scope map acceptance tokens are empty or duplicated') } + if ($rejectionTokens.Count -lt 1 -or @($rejectionTokens | Select-Object -Unique).Count -ne $rejectionTokens.Count) { $errors.Add('scope map rejection tokens are empty or duplicated') } + + $snapshot = Get-PropertyValue $ScopeMapObject 'register_snapshot' + $snapshotSha = [string](Get-PropertyValue $snapshot 'sha256') + $snapshotUpdatedAt = [string](Get-PropertyValue $snapshot 'updated_at') + $snapshotRowCount = [int](Get-PropertyValue $snapshot 'row_count') + $snapshotUniqueCount = [int](Get-PropertyValue $snapshot 'unique_slice_count') + if ($snapshotSha -notmatch '^[0-9A-Fa-f]{64}$') { $errors.Add('scope map register freeze SHA256 is missing or invalid') } + if ([string]::IsNullOrWhiteSpace($snapshotUpdatedAt)) { $errors.Add('scope map register freeze updated_at is missing') } + if ($snapshotRowCount -lt 1 -or $snapshotUniqueCount -lt 1 -or $snapshotRowCount -ne $snapshotUniqueCount) { $errors.Add('scope map register freeze row/unique counts are invalid') } + + $planRows = @() + try { $planRows = @(Get-PlanRowNames -Text $PlanText) } + catch { $errors.Add($_.Exception.Message) } + $planRowSet = [System.Collections.Generic.HashSet[string]]::new([System.StringComparer]::Ordinal) + foreach ($planRow in $planRows) { [void]$planRowSet.Add([string]$planRow) } + + [object[]]$entries = @((Get-PropertyValue $ScopeMapObject 'entries')) + $entryBySlice = @{} + foreach ($entry in $entries) { + $slice = [string](Get-PropertyValue $entry 'slice') + $classification = [string](Get-PropertyValue $entry 'classification') + [object[]]$owners = @((Get-PropertyValue $entry 'plan_owners') | ForEach-Object { [string]$_ }) + if ($slice -notmatch '^[A-Z0-9][A-Z0-9-]*$') { $errors.Add("scope entry slice '$slice' is blank or non-canonical") } + elseif ($entryBySlice.ContainsKey($slice)) { $errors.Add("scope map repeats slice '$slice'") } + else { $entryBySlice[$slice] = $entry } + if ($classification -notin $expectedClassifications) { $errors.Add("scope entry '$slice' has unsupported classification '$classification'") } + if ($owners.Count -lt 1 -or @($owners | Select-Object -Unique).Count -ne $owners.Count) { $errors.Add("scope entry '$slice' has empty or duplicate plan owners") } + if ($classification -in @('maker', 'checker-evidence', 'root-integration') -and ($owners.Count -ne 1 -or $owners[0] -cne $slice)) { + $errors.Add("scope entry '$slice' classification '$classification' must map directly to its same-named plan row") + } + if ($classification -in @('meta-fold', 'historical') -and $planRowSet.Contains($slice)) { + $errors.Add("scope entry '$slice' classification '$classification' must not masquerade as a direct plan row") + } + foreach ($owner in $owners) { + if (-not $planRowSet.Contains($owner)) { $errors.Add("scope entry '$slice' points to missing plan owner '$owner'") } + } + + $statusProperty = $entry.PSObject.Properties['register_status'] + $headProperty = $entry.PSObject.Properties['register_head'] + if ($null -eq $statusProperty -or $null -eq $headProperty) { $errors.Add("scope entry '$slice' omits frozen register status/head facts") } + $snapshotEntryHead = [string](Get-PropertyValue $entry 'register_head') + if (-not [string]::IsNullOrWhiteSpace($snapshotEntryHead) -and $snapshotEntryHead -notmatch '^[0-9A-Fa-f]{40}$') { $errors.Add("scope entry '$slice' has invalid frozen register head '$snapshotEntryHead'") } + + $loadBearing = Get-PropertyValue $entry 'load_bearing' + if ($null -ne $loadBearing) { + if ([string](Get-PropertyValue $loadBearing 'policy') -cne 'rejected_heads_must_not_be_accepted') { $errors.Add("scope entry '$slice' has unsupported load-bearing policy") } + [object[]]$rejectedHeads = @((Get-PropertyValue $loadBearing 'rejected_heads') | ForEach-Object { [string]$_ }) + if ($rejectedHeads.Count -lt 1 -or @($rejectedHeads | Select-Object -Unique).Count -ne $rejectedHeads.Count -or @($rejectedHeads | Where-Object { $_ -notmatch '^[0-9A-Fa-f]{40}$' }).Count -gt 0) { + $errors.Add("scope entry '$slice' has invalid rejected-head policy data") + } + } + } + if ($entries.Count -ne $snapshotRowCount -or $entryBySlice.Count -ne $snapshotUniqueCount) { + $errors.Add("scope map entry cardinality $($entries.Count)/$($entryBySlice.Count) does not match frozen $snapshotRowCount/$snapshotUniqueCount") + } + + $liveRows = @() + if ($null -ne $RegisterObject) { + [object[]]$liveRows = @((Get-PropertyValue $RegisterObject 'criteria')) + $liveBySlice = @{} + foreach ($row in $liveRows) { + $slice = [string](Get-PropertyValue $row 'slice') + if ($slice -notmatch '^[A-Z0-9][A-Z0-9-]*$') { $errors.Add("live register slice '$slice' is blank or non-canonical"); continue } + if ($liveBySlice.ContainsKey($slice)) { $errors.Add("live register repeats slice '$slice'"); continue } + $liveBySlice[$slice] = $row + } + if ($liveRows.Count -ne $liveBySlice.Count) { $errors.Add("live register row/unique counts differ: $($liveRows.Count)/$($liveBySlice.Count)") } + if (-not (Test-SameStringSet @($entryBySlice.Keys) @($liveBySlice.Keys))) { $errors.Add('live register unique slice set differs from the frozen scope map') } + + foreach ($slice in $entryBySlice.Keys) { + if (-not $liveBySlice.ContainsKey($slice)) { continue } + $entry = $entryBySlice[$slice] + $loadBearing = Get-PropertyValue $entry 'load_bearing' + if ($null -eq $loadBearing) { continue } + $liveRow = $liveBySlice[$slice] + $liveHead = [string](Get-PropertyValue $liveRow 'head') + $liveStatus = [string](Get-PropertyValue $liveRow 'status') + [object[]]$rejectedHeads = @((Get-PropertyValue $loadBearing 'rejected_heads') | ForEach-Object { [string]$_ }) + if ($liveHead -in $rejectedHeads -and (Test-RegisterStatusAccepted -Status $liveStatus -AcceptanceTokens $acceptanceTokens -RejectionTokens $rejectionTokens)) { + $errors.Add("live register slice '$slice' presents rejected head '$liveHead' as accepted with status '$liveStatus'") + } + } + } + + return [pscustomobject][ordered]@{ + schema_version = 1 + verdict = if ($errors.Count -eq 0) { 'PASS' } else { 'FAIL' } + observed_sha256 = $ObservedScopeMapSha256 + expected_sha256 = $ExpectedScopeMapSha256 + snapshot_sha256 = $snapshotSha + snapshot_updated_at = $snapshotUpdatedAt + entries = $entries.Count + unique_slices = $entryBySlice.Count + plan_rows = $planRows.Count + live_register_checked = $null -ne $RegisterObject + live_rows = $liveRows.Count + errors = @($errors) + } +} + if ($Help) { Show-Help; exit 0 } if ($SelfTest) { Invoke-SelfTest; exit 0 } if ($PrintCanonicalPlanSha256) { @@ -1151,6 +1435,13 @@ $stateHash = $null $statePath = if (Test-Path -LiteralPath $State) { [System.IO.Path]::GetFullPath($State) } else { $State } $stateObject = $null $stateAudit = $null +$scopeMapHash = $null +$scopeMapPath = if (Test-Path -LiteralPath $ScopeMap) { [System.IO.Path]::GetFullPath($ScopeMap) } else { $ScopeMap } +$scopeMapObject = $null +$scopeAudit = $null +$registerHash = $null +$registerPath = if (-not [string]::IsNullOrWhiteSpace($Register) -and (Test-Path -LiteralPath $Register)) { [System.IO.Path]::GetFullPath($Register) } else { $Register } +$registerObject = $null $artifactObject = $null $exitCode = 1 @@ -1158,16 +1449,28 @@ try { if (-not (Test-Path -LiteralPath $Plan -PathType Leaf)) { throw "ownership plan does not exist: $Plan" } if ([string]::IsNullOrWhiteSpace($ExpectedPlanSha256) -or $ExpectedPlanSha256 -notmatch '^[0-9A-Fa-f]{64}$') { throw '-ExpectedPlanSha256 is required and must be a full 64-hex SHA256' } if (-not (Test-Path -LiteralPath $State -PathType Leaf)) { throw "ownership state does not exist: $State" } + if (-not (Test-Path -LiteralPath $ScopeMap -PathType Leaf)) { throw "scope map does not exist: $ScopeMap" } + if ([string]::IsNullOrWhiteSpace($ExpectedScopeMapSha256) -or $ExpectedScopeMapSha256 -notmatch '^[0-9A-Fa-f]{64}$') { throw '-ExpectedScopeMapSha256 is required and must be a full 64-hex SHA256' } + if (-not [string]::IsNullOrWhiteSpace($Register) -and -not (Test-Path -LiteralPath $Register -PathType Leaf)) { throw "live register does not exist: $Register" } $planHash = Get-CanonicalUtf8LfFileSha256 -Path $Plan $stateHash = Get-CanonicalUtf8LfFileSha256 -Path $State + $scopeMapHash = Get-CanonicalUtf8LfFileSha256 -Path $ScopeMap $text = [System.IO.File]::ReadAllText([System.IO.Path]::GetFullPath($Plan)) $ledger = Invoke-OwnershipAudit $text $planPath try { $stateObject = Get-Content -LiteralPath $State -Raw | ConvertFrom-Json -Depth 100 } catch { throw "ownership state is invalid JSON: $($_.Exception.Message)" } + try { $scopeMapObject = Get-Content -LiteralPath $ScopeMap -Raw | ConvertFrom-Json -Depth 100 } + catch { throw "scope map is invalid JSON: $($_.Exception.Message)" } + if (-not [string]::IsNullOrWhiteSpace($Register)) { + $registerHash = (Get-FileHash -Algorithm SHA256 -LiteralPath $Register).Hash.ToLowerInvariant() + try { $registerObject = Get-Content -LiteralPath $Register -Raw | ConvertFrom-Json -Depth 100 } + catch { throw "live register is invalid JSON: $($_.Exception.Message)" } + } $stateAudit = Invoke-StateContractAudit -StateObject $stateObject -Ledger $ledger -ObservedPlanSha256 $planHash -ExpectedPlanSha256 $ExpectedPlanSha256 + $scopeAudit = Invoke-ScopeContractAudit -ScopeMapObject $scopeMapObject -ObservedScopeMapSha256 $scopeMapHash -ExpectedScopeMapSha256 $ExpectedScopeMapSha256 -StateObject $stateObject -PlanText $text -RegisterObject $registerObject if ($Mode -eq 'Ledger') { - $authorityErrors = @($ledger.errors) + @($stateAudit.errors) + $authorityErrors = @($ledger.errors) + @($stateAudit.errors) + @($scopeAudit.errors) $finishedAt = [DateTimeOffset]::UtcNow $artifactObject = [ordered]@{ schema_version = 2 @@ -1179,6 +1482,8 @@ try { duration_seconds = [math]::Round(($finishedAt - $startedAt).TotalSeconds, 3) plan = [ordered]@{ path = $planPath; expected_sha256 = $ExpectedPlanSha256.ToLowerInvariant(); observed_sha256 = $planHash; hash_match = (Test-ExpectedPlanHash $planHash $ExpectedPlanSha256) } state = [ordered]@{ path = $statePath; sha256 = $stateHash; verdict = $stateAudit.verdict; plan_sha256 = $stateAudit.plan_sha256 } + scope_map = [ordered]@{ path = $scopeMapPath; expected_sha256 = $ExpectedScopeMapSha256.ToLowerInvariant(); observed_sha256 = $scopeMapHash; verdict = $scopeAudit.verdict; entries = $scopeAudit.entries; unique_slices = $scopeAudit.unique_slices } + live_register = [ordered]@{ supplied = -not [string]::IsNullOrWhiteSpace($Register); path = $registerPath; sha256 = $registerHash; checked = $scopeAudit.live_register_checked; rows = $scopeAudit.live_rows } counts = [ordered]@{ maker_slices = $ledger.counts.maker_slices declarations = $ledger.counts.declarations @@ -1204,6 +1509,7 @@ try { $errors = [System.Collections.Generic.List[string]]::new() foreach ($ledgerError in $ledger.errors) { $errors.Add("ledger: $ledgerError") } foreach ($stateError in $stateAudit.errors) { $errors.Add("state: $stateError") } + foreach ($scopeError in $scopeAudit.errors) { $errors.Add("scope: $scopeError") } if ([string]::IsNullOrWhiteSpace($Slice)) { $errors.Add('Diff mode requires -Slice') } if ([string]::IsNullOrWhiteSpace($Base)) { $errors.Add('Diff mode requires -Base') } if ([string]::IsNullOrWhiteSpace($Head)) { $errors.Add('Diff mode requires -Head') } @@ -1284,6 +1590,8 @@ try { duration_seconds = [math]::Round(($finishedAt - $startedAt).TotalSeconds, 3) plan = [ordered]@{ path = $planPath; expected_sha256 = $ExpectedPlanSha256.ToLowerInvariant(); observed_sha256 = $planHash; hash_match = (Test-ExpectedPlanHash $planHash $ExpectedPlanSha256); ledger_verdict = $ledger.verdict } state = [ordered]@{ path = $statePath; sha256 = $stateHash; verdict = $stateAudit.verdict; plan_sha256 = $stateAudit.plan_sha256 } + scope_map = [ordered]@{ path = $scopeMapPath; expected_sha256 = $ExpectedScopeMapSha256.ToLowerInvariant(); observed_sha256 = $scopeMapHash; verdict = $scopeAudit.verdict; entries = $scopeAudit.entries; unique_slices = $scopeAudit.unique_slices } + live_register = [ordered]@{ supplied = -not [string]::IsNullOrWhiteSpace($Register); path = $registerPath; sha256 = $registerHash; checked = $scopeAudit.live_register_checked; rows = $scopeAudit.live_rows } slice = [ordered]@{ name = $Slice row_count = $sliceRows.Count @@ -1328,6 +1636,8 @@ catch { duration_seconds = [math]::Round(($finishedAt - $startedAt).TotalSeconds, 3) plan = [ordered]@{ path = $planPath; expected_sha256 = $ExpectedPlanSha256; observed_sha256 = $planHash } state = [ordered]@{ path = $statePath; sha256 = $stateHash } + scope_map = [ordered]@{ path = $scopeMapPath; expected_sha256 = $ExpectedScopeMapSha256; observed_sha256 = $scopeMapHash } + live_register = [ordered]@{ supplied = -not [string]::IsNullOrWhiteSpace($Register); path = $registerPath; sha256 = $registerHash } errors = @($_.Exception.Message) } $exitCode = 1 diff --git a/scripts/production-gates/run-db-suite.ps1 b/scripts/production-gates/run-db-suite.ps1 index 5740f1f0..c5e9b035 100644 --- a/scripts/production-gates/run-db-suite.ps1 +++ b/scripts/production-gates/run-db-suite.ps1 @@ -957,6 +957,31 @@ function Invoke-SelfTest { $passingEvents = @($requiredTests | ForEach-Object { [pscustomobject]@{ package = $requiredPackage; test = $_; outcome = 'pass' } }) $passingProof = Get-RequiredSessionStartExecutionProof ([pscustomobject]@{ tests = $passingEvents }) Assert-SelfTestCondition ($passingProof.verdict -eq 'PASS' -and $passingProof.executed -eq 12 -and $passingProof.skipped -eq 0) '12/12 executed session-start tests were rejected' + $wrongPackage = 'github.com/thebtf/engram/internal/mcp' + $wrongPackageEvents = @($requiredTests | ForEach-Object { [pscustomobject]@{ package = $wrongPackage; test = $_; outcome = 'pass' } }) + $wrongPackageProof = Get-RequiredSessionStartExecutionProof ([pscustomobject]@{ tests = $wrongPackageEvents }) + $wrongPackageRejectedTests = @($wrongPackageProof.tests | Where-Object { $_.outcome -ceq 'missing' -and $_.executed -eq $false }) + $wrongPackageExpectedResults = @($requiredTests | ForEach-Object { "$requiredPackage|$_|missing|False" }) + $wrongPackageObservedResults = @($wrongPackageProof.tests | ForEach-Object { "{0}|{1}|{2}|{3}" -f $_.package, $_.test, $_.outcome, ([bool]$_.executed) }) + $wrongPackageExpectedErrors = @($requiredTests | ForEach-Object { "required session-start test was not observed: $requiredPackage/$_" }) + Assert-SelfTestCondition ( + $wrongPackageProof.verdict -ceq 'FAIL' -and + $wrongPackageProof.package -ceq $requiredPackage -and + $wrongPackageProof.expected -eq 12 -and + $wrongPackageProof.observed -eq 0 -and + $wrongPackageProof.executed -eq 0 -and + $wrongPackageProof.passed -eq 0 -and + $wrongPackageProof.failed -eq 0 -and + $wrongPackageProof.skipped -eq 0 -and + $wrongPackageProof.missing -eq 12 -and + $wrongPackageProof.duplicate -eq 0 -and + $wrongPackageProof.incomplete -eq 0 -and + $wrongPackageRejectedTests.Count -eq 12 -and + @($wrongPackageProof.tests).Count -eq 12 -and + @($wrongPackageProof.errors).Count -eq 12 -and + ($wrongPackageObservedResults -join "`n") -ceq ($wrongPackageExpectedResults -join "`n") -and + (@($wrongPackageProof.errors) -join "`n") -ceq ($wrongPackageExpectedErrors -join "`n") + ) 'twelve exact names from the wrong package were accepted by the required session-start execution proof' $skipEvents = @($passingEvents | ForEach-Object { [pscustomobject]@{ package = $_.package; test = $_.test; outcome = $_.outcome } }) $skipEvents[0].outcome = 'skip' $skipProof = Get-RequiredSessionStartExecutionProof ([pscustomobject]@{ tests = $skipEvents }) @@ -968,7 +993,7 @@ function Invoke-SelfTest { $failingProof = Get-RequiredSessionStartExecutionProof ([pscustomobject]@{ tests = $failingEvents }) Assert-SelfTestCondition ($failingProof.verdict -eq 'PASS' -and $failingProof.executed -eq 12 -and $failingProof.failed -eq 1) 'an executed product failure was misclassified as a naming/skip defect' Assert-SelfTestCondition ($Repeat -eq 3) 'default release repetition count is not 3' - Write-Output 'SELFTEST PASS: run-db-suite.ps1 (exit aggregation, test-only database identity, and 12-test zero-skip execution proof)' + Write-Output 'SELFTEST PASS: run-db-suite.ps1 (exit aggregation, test-only database identity, exact package-plus-test rejection, and 12-test zero-skip execution proof)' } finally { Remove-Item -LiteralPath $root -Recurse -Force -ErrorAction SilentlyContinue } } From 38344455754fe503acbd79d2134141f996adff7f Mon Sep 17 00:00:00 2001 From: Kirill Turanskiy Date: Fri, 10 Jul 2026 23:53:08 +0300 Subject: [PATCH 041/111] fix(security): close project identity R3 races --- ...CURITY-PROJECT-IDENTITY-R3-maker-report.md | 113 ++++++++++++++++ .../SECURITY-PROJECT-IDENTITY-R3.red.json | 35 +++++ .../SECURITY-PROJECT-IDENTITY-R3.tdd.json | 50 +++++++ ...RITY-PROJECT-IDENTITY-R3.verification.json | 57 ++++++++ .../evidence/project-identity-v2-vectors.json | 22 +++ internal/db/gorm/project_identity_v2_test.go | 51 +++++++ internal/db/gorm/project_store.go | 21 ++- .../grpcserver/project_identity_v2_test.go | 28 ++++ internal/proxy/identity.go | 127 +++++++++++++----- internal/proxy/identity_test.go | 109 +++++++++++++++ plugin/engram/hooks/lib.js | 84 +++++++++--- .../engram/hooks/project-identity-v2.test.js | 104 +++++++++++++- plugin/openclaw-engram/src/identity.ts | 86 +++++++++--- .../test/project-identity-v2.test.mjs | 113 ++++++++++++++-- 14 files changed, 912 insertions(+), 88 deletions(-) create mode 100644 .agent/reports/evidence/production-ready/security-project-identity/SECURITY-PROJECT-IDENTITY-R3-maker-report.md create mode 100644 .agent/specs/security-project-identity/evidence/SECURITY-PROJECT-IDENTITY-R3.red.json create mode 100644 .agent/specs/security-project-identity/evidence/SECURITY-PROJECT-IDENTITY-R3.tdd.json create mode 100644 .agent/specs/security-project-identity/evidence/SECURITY-PROJECT-IDENTITY-R3.verification.json diff --git a/.agent/reports/evidence/production-ready/security-project-identity/SECURITY-PROJECT-IDENTITY-R3-maker-report.md b/.agent/reports/evidence/production-ready/security-project-identity/SECURITY-PROJECT-IDENTITY-R3-maker-report.md new file mode 100644 index 00000000..65da64a1 --- /dev/null +++ b/.agent/reports/evidence/production-ready/security-project-identity/SECURITY-PROJECT-IDENTITY-R3-maker-report.md @@ -0,0 +1,113 @@ +# SECURITY-PROJECT-IDENTITY R3 maker report + +Verdict: **READY_FOR_FRESH_CHECKER** after the atomic maker commit is created. + +- Base: `9e2ce4e58a5cded69660ca9ac532d2167f315bb2` +- Checker evidence reviewed: `774047a3dfcd94de78c9e471fdcf05097aeff532` +- Checker is not an ancestor of this maker branch. +- Branch: `work/prc-security-project-identity-r3` +- Product/test ownership: exactly the nine paths named in the R3 brief. +- Additional writes: existing security-project-identity evidence namespaces plus this report. + +## Closed findings + +### SPI-R2-CHK-001 — strict transport-independent selector validation + +`RegisterAndResolve` now applies one store-local outer-selector validator before +metadata validation and before the nil-database seam. It rejects empty values, +more than 256 bytes, edge whitespace, controls, `..`, internal whitespace, and +characters outside `[A-Za-z0-9_.\\/:-]` as `PROJECT_IDENTITY_INVALID`. + +Direct-store tests prove malformed inputs never reach the database branch. +Default gRPC tests prove `a b` and `../x` become `codes.InvalidArgument` with one +`ErrorInfo` carrying `PROJECT_IDENTITY_INVALID`, domain +`engram.project_identity`, and `regenerate_project_identity_v2`; handler calls +remain zero. Colon, backslash, slash, dot, dash, underscore, and legacy alias +internal whitespace remain compatible. + +### SPI-R2-CHK-002 — complete atomic no-replace anchor publication + +Go, Claude hooks, and OpenClaw now use the same publication protocol: + +1. generate and validate the complete JSON payload; +2. create a random same-directory temporary file with mode `0600`; +3. write, sync, and close the temporary file; +4. atomically hard-link it to the final path, which is a no-replace operation; +5. remove the temporary name; +6. on an existing final path, discard the losing temporary file and read the winner. + +No code path opens the final path for writing. A valid existing anchor remains +byte-identical. A malformed existing anchor remains fail-closed and is never +overwritten. Any create/write/sync/close/publish/cleanup error returns without +claiming an identity. Filesystems without hard-link support fail closed rather +than falling back to an overwrite-capable rename. + +## Verification evidence + +| Gate | Result | +| --- | --- | +| RED store/default-gRPC classification | PASS: reproduced wrong unavailable classification | +| RED Go publication race | PASS: reproduced `decode .engram-project-v2.json: EOF` | +| RED Claude child-process race | PASS: failed on stress round 30 | +| RED OpenClaw child-process race | PASS: failed on stress round 6 | +| Focused store/gRPC/proxy GREEN | PASS | +| Go publication ordinary `-count=30` | PASS | +| Go publication `-race -count=30` | PASS | +| Claude true child-process concurrency, 30 rounds | PASS | +| OpenClaw true child-process concurrency, 30 rounds | PASS | +| Linux Go/Claude/OpenClaw mode `0600`, complete JSON, no temp residue | PASS | +| PostgreSQL 17.10 identity race `-count=10` | PASS; residue 0; ephemeral DB dropped | +| `go test ./... -count=1` | PASS | +| `go vet ./...` | PASS | +| Claude complete hooks | PASS 76/76 | +| OpenClaw build/tests/typecheck | PASS 27/27 | +| Prove-It mutations | PASS; zero survivors | +| Exact path parity | PASS; 14 paths; SHA-256 `341175c6056cfc424a252f7c47bc049b14f393bf419bd095df9a79c6ea77fed1` | +| Proto parity | PASS; zero paths | +| Request-path DDL / v5 demolition guards | PASS; zero added product hits | +| Gitleaks staged scan | PASS; 40.60 KB; no leaks | +| `git diff --check` | PASS | + +## Security review + +Classification: **S2 (medium)**. The changed trust boundaries are externally +supplied selectors and workspace-local anchor files shared by concurrent +processes. Relevant risks are malformed/path-like input, partial-file TOCTOU, +silent replacement of persistent identity, unsafe permissions, and cleanup +residue. SQL construction, authorization, credentials, network requests, +cryptographic algorithms, schema, and migrations are unchanged. + +OWASP A03/A04/A05/A08/A09 checks pass for this delta: selectors are rejected at +the final store boundary; publication is complete-before-visible and +no-replace; failures stay explicit and fail closed; random anchors continue to +use `crypto/rand` / `crypto.randomBytes`; no secret enters source or evidence. +The expected availability tradeoff is explicit: a filesystem that cannot make +same-filesystem hard links returns an error instead of weakening no-replace +atomicity. Security verdict: **PASS, no open finding**. + +## Maker changed-code review + +The staged diff was reviewed tests-first and then across correctness, +validation completeness, readability, architecture, security, and performance. +The review enumerated the store/default-gRPC selector path plus all three anchor +read/write paths. It found no blocking defect. Two readability-only fixes were +applied before the final rerun: hard-link no-replace intent is now documented at +each publication call, and child-process assertion failures serialize their +per-process results instead of emitting opaque `[object Object]` messages. + +No new dependency, schema, public API, background retry, silent clamp, filtered +count, raw-vs-normalized branch, or dormant/demolished call path was introduced. +The final full suites passed after these review fixes. This maker review is not +the independent acceptance verdict; a fresh checker and PM post-run review are +still required. + +## V5 demolition classification + +The touched code is live Project Identity v2 input/filesystem infrastructure. +No graph retrieval stage, cross-encoder reranker, composite/internal-search +scoring pass, SDK observation extraction, direct session-memory path, or +server-side HTTP MCP transport was introduced or restored. + +Fresh independent checker and root post-review remain mandatory. This maker did +not integrate, push, tag, release, modify the primary worktree, or alter role +oracles. diff --git a/.agent/specs/security-project-identity/evidence/SECURITY-PROJECT-IDENTITY-R3.red.json b/.agent/specs/security-project-identity/evidence/SECURITY-PROJECT-IDENTITY-R3.red.json new file mode 100644 index 00000000..cfd5f031 --- /dev/null +++ b/.agent/specs/security-project-identity/evidence/SECURITY-PROJECT-IDENTITY-R3.red.json @@ -0,0 +1,35 @@ +{ + "task_id": "SECURITY-PROJECT-IDENTITY-R3", + "stack": "GO+JAVASCRIPT+TYPESCRIPT", + "observed_at": "2026-07-10T20:26:15.4217526Z", + "test_file": "internal/db/gorm/project_identity_v2_test.go", + "test_name": "TestRegisterAndResolve_StrictOuterSelectorRejectsBeforeDatabaseAccess", + "failure_reason": "The store and default gRPC resolver misclassified malformed selectors before database access, while the existing publish-before-complete Go anchor path exposed EOF under race repetition.", + "runner_stdout_excerpt": "selector a b: PROJECT_IDENTITY_UNAVAILABLE; selector ../x: PROJECT_IDENTITY_UNAVAILABLE; default gRPC: Unavailable; proxy race: PROJECT_IDENTITY_INVALID decode .engram-project-v2.json: EOF", + "additional_red_observations": [ + { + "test_file": "internal/grpcserver/project_identity_v2_test.go", + "test_name": "TestCallTool_DefaultResolverRejectsMalformedSelectorsBeforeHandler", + "failure": "a b and ../x returned Unavailable instead of InvalidArgument" + }, + { + "test_file": "internal/proxy/identity_test.go", + "test_name": "TestResolveProjectIdentityV2_ConcurrentFirstUseConverges", + "runner": "go test -race ./internal/proxy -run ^TestResolveProjectIdentityV2_(ConcurrentFirstUseConverges|PreExistingAnchorsAreNeverReplaced)$ -count=30 -v", + "failure": "Two repetitions observed a losing reader decode the creator-owned final file as EOF" + }, + { + "test_file": "plugin/engram/hooks/project-identity-v2.test.js", + "test_name": "non-git v2 anchor is strict, high-entropy, stable, and child-process concurrent-safe", + "runner": "30 child-process rounds against the exact base", + "failure": "Round 30 returned at least one PROJECT_IDENTITY_INVALID child result from a partial final file" + }, + { + "test_file": "plugin/openclaw-engram/test/project-identity-v2.test.mjs", + "test_name": "OpenClaw non-git identity is stable and child-process concurrent-safe, never the agent id", + "runner": "30 child-process rounds against the exact base", + "failure": "Round 6 returned at least one PROJECT_IDENTITY_INVALID child result from a partial final file" + } + ], + "environment_note": "Windows reports writable regular-file permission bits as 0666; the 0600 assertion is enforced on POSIX and separately verified in the Linux acceptance rail." +} diff --git a/.agent/specs/security-project-identity/evidence/SECURITY-PROJECT-IDENTITY-R3.tdd.json b/.agent/specs/security-project-identity/evidence/SECURITY-PROJECT-IDENTITY-R3.tdd.json new file mode 100644 index 00000000..96500dd4 --- /dev/null +++ b/.agent/specs/security-project-identity/evidence/SECURITY-PROJECT-IDENTITY-R3.tdd.json @@ -0,0 +1,50 @@ +{ + "task_id": "SECURITY-PROJECT-IDENTITY-R3", + "stack": "GO+JAVASCRIPT+TYPESCRIPT", + "base_commit": "9e2ce4e58a5cded69660ca9ac532d2167f315bb2", + "red": { + "observed_at": "2026-07-10T20:26:15.4217526Z", + "evidence_file": "SECURITY-PROJECT-IDENTITY-R3.red.json", + "signals": [ + "store returned PROJECT_IDENTITY_UNAVAILABLE for malformed outer selectors", + "default gRPC returned Unavailable instead of InvalidArgument", + "Go race repetition observed partial-final-file EOF", + "Claude and OpenClaw child-process stress each observed a losing reader failure" + ] + }, + "green": { + "observed_at": "2026-07-10T20:44:36.1761574Z", + "passed_tests": 1, + "regressed_tests": 0, + "runner_stdout_excerpt": "focused store/gRPC/proxy PASS; Go ordinary and -race repetition PASS; Claude 76/76 PASS; OpenClaw 27/27 PASS" + }, + "refactor": { + "applied": false, + "reason": "The GREEN implementation is localized to the existing validation and anchor-publication seams; additional abstraction would not reduce the cross-language contract." + }, + "prove_it": { + "observed_at": "2026-07-10T20:44:36.1761574Z", + "substituted_files": [ + "internal/db/gorm/project_store.go", + "internal/proxy/identity.go", + "plugin/engram/hooks/lib.js", + "plugin/openclaw-engram/src/identity.ts" + ], + "failed_tests": 11, + "survived_mutations": 0, + "runner_stdout_excerpt": "selector validator bypass failed 7 store and 2 gRPC cases; Go and Claude publication sentinels failed one focused test each; OpenClaw publication sentinel failed TypeScript compilation", + "restoration": "Each controlled mutation was restored from the staged GREEN snapshot and its focused GREEN test reran successfully." + }, + "coverage": { + "command": "go test ./internal/db/gorm ./internal/proxy ./internal/grpcserver -run identity-r3-focused-regex -cover -count=1", + "percent_by_package": { + "internal/db/gorm": 0.6, + "internal/proxy": 63.4, + "internal/grpcserver": 4.2 + }, + "threshold": 80, + "status": "WARN", + "mode": "informational", + "note": "Cross-package package-wide coverage is diluted by unrelated stores and handlers; exact behavioral, race, child-process, full-suite, and Prove-It gates are authoritative for this bounded patch." + } +} diff --git a/.agent/specs/security-project-identity/evidence/SECURITY-PROJECT-IDENTITY-R3.verification.json b/.agent/specs/security-project-identity/evidence/SECURITY-PROJECT-IDENTITY-R3.verification.json new file mode 100644 index 00000000..47126e70 --- /dev/null +++ b/.agent/specs/security-project-identity/evidence/SECURITY-PROJECT-IDENTITY-R3.verification.json @@ -0,0 +1,57 @@ +{ + "task_id": "SECURITY-PROJECT-IDENTITY-R3", + "base_commit": "9e2ce4e58a5cded69660ca9ac532d2167f315bb2", + "checker_commit_reviewed": "774047a3dfcd94de78c9e471fdcf05097aeff532", + "checker_is_ancestor": false, + "branch": "work/prc-security-project-identity-r3", + "observed_at": "2026-07-10T20:44:36.1761574Z", + "verdict": "PASS_PENDING_COMMIT_OBJECT_AND_FRESH_CHECKER", + "findings_closed": { + "SPI-R2-CHK-001": "strict store-local outer-selector validation now precedes metadata and database access; default gRPC maps it to InvalidArgument", + "SPI-R2-CHK-002": "Go, Claude, and OpenClaw publish complete synced same-directory temporary files through atomic no-replace hard links" + }, + "compatibility": { + "outer_selectors_preserved": ["colon", "backslash", "slash", "dot", "dash", "underscore"], + "legacy_alias_internal_whitespace": "preserved", + "existing_valid_anchor": "byte-identical after concurrent resolution", + "existing_malformed_anchor": "PROJECT_IDENTITY_INVALID and byte-identical; never regenerated" + }, + "gates": { + "focused_store_grpc_proxy": "PASS", + "go_anchor_ordinary_count_30": "PASS", + "go_anchor_race_count_30": "PASS", + "claude_child_process_count_30": "PASS", + "openclaw_child_process_count_30": "PASS", + "linux_go_anchor_mode_and_publication": "PASS in golang:1.25-bookworm", + "linux_claude_anchor_mode_and_publication": "PASS in node:22.17.0-bookworm-slim", + "linux_openclaw_anchor_mode_and_publication": "PASS in node:22.17.0-bookworm-slim", + "postgresql": "PostgreSQL 17.10 isolated DB; identity race count=10 PASS; matching prc-* rows 0; database dropped", + "go_full": "go test ./... -count=1 PASS", + "go_vet": "go vet ./... PASS", + "claude_hooks": "76/76 PASS with ENGRAM_URL/TOKEN/QUIET removed", + "openclaw": "npm test 27/27 PASS; npm run typecheck PASS", + "prove_it": "four production files mutated; zero surviving mutations", + "gitleaks": "staged scan PASS; 40.60 KB; no leaks", + "diff_check": "PASS", + "proto_parity": "PASS; zero changed proto paths", + "request_path_ddl_guard": "PASS; zero added product hits", + "v5_demolition_guard": "PASS; zero added product hits", + "exact_path_parity": "PASS; 14 changed paths" + }, + "scope": { + "changed_path_count": 14, + "changed_paths_sha256_lf_sorted": "341175c6056cfc424a252f7c47bc049b14f393bf419bd095df9a79c6ea77fed1", + "owned_product_test_paths": 9, + "other_paths": "existing evidence namespaces plus one maker report" + }, + "database_cleanup": { + "database": "prc_spi_r3_20260710", + "matching_project_rows_before_drop": 0, + "database_remaining": 0 + }, + "security": { + "classification": "S2", + "verdict": "PASS", + "open_findings": 0 + } +} diff --git a/.agent/specs/security-project-identity/evidence/project-identity-v2-vectors.json b/.agent/specs/security-project-identity/evidence/project-identity-v2-vectors.json index 5c46a35e..86ad68fe 100644 --- a/.agent/specs/security-project-identity/evidence/project-identity-v2-vectors.json +++ b/.agent/specs/security-project-identity/evidence/project-identity-v2-vectors.json @@ -66,6 +66,28 @@ "non_git_anchor": "", "anchor_shared": null }, + { + "name": "selector-internal-whitespace", + "invalid_target": "selector", + "selector": "configured selector", + "display_name": "core", + "legacy_project_id": "core_18f246", + "git_remote": "https://example.invalid/acme/mono.git", + "relative_path": "packages/core/", + "non_git_anchor": "", + "anchor_shared": null + }, + { + "name": "selector-traversal", + "invalid_target": "selector", + "selector": "../configured-selector", + "display_name": "core", + "legacy_project_id": "core_18f246", + "git_remote": "https://example.invalid/acme/mono.git", + "relative_path": "packages/core/", + "non_git_anchor": "", + "anchor_shared": null + }, { "name": "display-leading-whitespace", "invalid_target": "identity", diff --git a/internal/db/gorm/project_identity_v2_test.go b/internal/db/gorm/project_identity_v2_test.go index 2b1b8803..8c167d24 100644 --- a/internal/db/gorm/project_identity_v2_test.go +++ b/internal/db/gorm/project_identity_v2_test.go @@ -6,6 +6,7 @@ import ( "errors" "os" "path/filepath" + "strings" "sync" "testing" "time" @@ -104,6 +105,56 @@ func TestRegisterAndResolve_RejectsRawVsNormalizedSelectorsAndMetadata(t *testin } } +func TestRegisterAndResolve_StrictOuterSelectorRejectsBeforeDatabaseAccess(t *testing.T) { + tests := []struct { + name string + selector string + }{ + {name: "empty", selector: ""}, + {name: "internal whitespace", selector: "a b"}, + {name: "traversal", selector: "../x"}, + {name: "illegal punctuation", selector: "repo?segment"}, + {name: "control", selector: "repo\u0001segment"}, + {name: "edge whitespace", selector: " repo"}, + {name: "over 256 bytes", selector: strings.Repeat("a", 257)}, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + _, err := RegisterAndResolve(context.Background(), nil, tt.selector, nil) + var identityErr *ProjectIdentityError + if !errors.As(err, &identityErr) || identityErr.Code != ProjectIdentityInvalid || identityErr.UpgradeAction != UpgradeActionRegenerateProjectIdentityV2 { + t.Fatalf("error=%T %v, want PROJECT_IDENTITY_INVALID before DB access", err, err) + } + }) + } +} + +func TestRegisterAndResolve_StrictOuterSelectorPreservesCompatibility(t *testing.T) { + selectors := []string{ + "repo:segment", + `repo\segment`, + "repo/segment", + "repo.segment", + "repo-segment", + "repo_segment", + } + for _, selector := range selectors { + t.Run(selector, func(t *testing.T) { + _, err := RegisterAndResolve(context.Background(), nil, selector, nil) + var identityErr *ProjectIdentityError + if !errors.As(err, &identityErr) || identityErr.Code != ProjectIdentityUnavailable { + t.Fatalf("error=%T %v, want selector accepted through nil-DB seam", err, err) + } + }) + } + + _, err := RegisterAndResolve(context.Background(), nil, "repo:segment", gitIdentityV2("legacy alias", "https://example.invalid/acme/mono.git")) + var identityErr *ProjectIdentityError + if !errors.As(err, &identityErr) || identityErr.Code != ProjectIdentityUnavailable { + t.Fatalf("legacy alias with internal whitespace was globally tightened: %T %v", err, err) + } +} + func TestRegisterAndResolve_ExistingLegacyCanonicalAndContradiction(t *testing.T) { db, cleanup := openTestDB(t) defer cleanup() diff --git a/internal/db/gorm/project_store.go b/internal/db/gorm/project_store.go index 7283abee..c9b7252c 100644 --- a/internal/db/gorm/project_store.go +++ b/internal/db/gorm/project_store.go @@ -28,7 +28,10 @@ const ( UpgradeActionRetryProjectRegistration = "retry_project_identity_registration" ) -var strictProjectAnchorV2 = regexp.MustCompile(`^[0-9a-f]{32}$`) +var ( + strictProjectAnchorV2 = regexp.MustCompile(`^[0-9a-f]{32}$`) + strictProjectSelectorV2 = regexp.MustCompile(`^[A-Za-z0-9_.\\/:-]+$`) +) // ProjectIdentityV2 mirrors the additive protobuf/HTTP contract at the store // boundary without coupling persistence to either transport package. @@ -97,8 +100,8 @@ func ProjectIdentityPublicMessage(err error) string { // tenant data access. It deliberately uses only the existing projects table: // schema changes remain governed by gormigrate, never request-path DDL. func RegisterAndResolve(ctx context.Context, db *gorm.DB, selector string, identity *ProjectIdentityV2) (ProjectIdentityResolution, error) { - if selector == "" || len(selector) > 256 || strings.TrimSpace(selector) != selector || containsProjectIdentityControl(selector) { - return ProjectIdentityResolution{}, invalidProjectIdentity("project selector is empty or malformed") + if err := validateProjectSelectorV2(selector); err != nil { + return ProjectIdentityResolution{}, err } if identity != nil { if err := ValidateProjectIdentityV2(*identity); err != nil { @@ -232,6 +235,18 @@ func RegisterAndResolve(ctx context.Context, db *gorm.DB, selector string, ident return resolution, nil } +// validateProjectSelectorV2 owns the strict transport-independent outer +// selector contract. Legacy alias metadata intentionally remains governed by +// ValidateProjectAliasV2 so established aliases may retain internal spaces. +func validateProjectSelectorV2(selector string) error { + if selector == "" || len(selector) > 256 || strings.TrimSpace(selector) != selector || + strings.Contains(selector, "..") || containsProjectIdentityControl(selector) || + !strictProjectSelectorV2.MatchString(selector) { + return invalidProjectIdentity("project selector is empty or malformed") + } + return nil +} + // AttachLegacyAlias adds an old-client selector only when it is absent or // already points to canonical. A conflicting alias fails before mutation. func AttachLegacyAlias(ctx context.Context, db *gorm.DB, canonical, alias string) error { diff --git a/internal/grpcserver/project_identity_v2_test.go b/internal/grpcserver/project_identity_v2_test.go index 5ddea180..075270d9 100644 --- a/internal/grpcserver/project_identity_v2_test.go +++ b/internal/grpcserver/project_identity_v2_test.go @@ -10,6 +10,7 @@ import ( "github.com/thebtf/engram/internal/auth" localgorm "github.com/thebtf/engram/internal/db/gorm" pb "github.com/thebtf/engram/proto/engram/v1" + "google.golang.org/genproto/googleapis/rpc/errdetails" "google.golang.org/grpc" "google.golang.org/grpc/codes" "google.golang.org/grpc/status" @@ -126,3 +127,30 @@ func TestProjectIdentityUnavailable_DoesNotExposeDatabaseDiagnostics(t *testing. t.Fatalf("database diagnostics leaked: %v", err) } } + +func TestCallTool_DefaultResolverRejectsMalformedSelectorsBeforeHandler(t *testing.T) { + for _, selector := range []string{"a b", "../x"} { + t.Run(selector, func(t *testing.T) { + steps := []string{} + srv := &Server{handler: identityOrderHandler{steps: &steps}} + _, err := srv.CallTool(context.Background(), &pb.CallToolRequest{ToolName: "recall", Project: selector}) + if status.Code(err) != codes.InvalidArgument { + t.Fatalf("status=%v error=%v, want InvalidArgument", status.Code(err), err) + } + st, ok := status.FromError(err) + if !ok || len(st.Details()) != 1 { + t.Fatalf("stable machine-readable detail missing: %#v", st.Details()) + } + detail, ok := st.Details()[0].(*errdetails.ErrorInfo) + if !ok { + t.Fatalf("detail=%T, want ErrorInfo", st.Details()[0]) + } + if detail.Reason != localgorm.ProjectIdentityInvalid || detail.Domain != "engram.project_identity" || detail.Metadata["upgrade_action"] != localgorm.UpgradeActionRegenerateProjectIdentityV2 { + t.Fatalf("detail=%#v", detail) + } + if len(steps) != 0 { + t.Fatalf("handler ran before selector rejection: %v", steps) + } + }) + } +} diff --git a/internal/proxy/identity.go b/internal/proxy/identity.go index 5e750884..9ecbad17 100644 --- a/internal/proxy/identity.go +++ b/internal/proxy/identity.go @@ -115,8 +115,8 @@ func containsProjectIdentityControl(value string) bool { // ResolveProjectIdentityV2 builds full metadata for cwd. Git projects are // content-addressed by normalized remote+relative path. Non-git projects use a -// strict additive anchor file created with O_EXCL so concurrent first use -// converges without overwriting another process's identity. +// strict additive anchor file published atomically without replacing an +// existing identity, so concurrent first use never exposes partial JSON. func ResolveProjectIdentityV2(cwd string) (ProjectIdentityV2, error) { resolved, err := filepath.Abs(cwd) if err != nil { @@ -164,52 +164,117 @@ func ResolveProjectIdentityV2(cwd string) (ProjectIdentityV2, error) { func readOrCreateProjectAnchorV2(dir string) (projectAnchorV2, error) { anchorPath := filepath.Join(dir, projectIdentityV2File) for { - data, err := os.ReadFile(anchorPath) + anchor, err := readProjectAnchorV2(anchorPath) if err == nil { - var anchor projectAnchorV2 - decoder := json.NewDecoder(bytes.NewReader(data)) - decoder.DisallowUnknownFields() - if decodeErr := decoder.Decode(&anchor); decodeErr != nil { - return projectAnchorV2{}, fmt.Errorf("PROJECT_IDENTITY_INVALID: decode %s: %w", projectIdentityV2File, decodeErr) - } - if trailingErr := decoder.Decode(&struct{}{}); trailingErr != io.EOF { - return projectAnchorV2{}, fmt.Errorf("PROJECT_IDENTITY_INVALID: trailing data in %s", projectIdentityV2File) - } - if anchor.Version != ProjectIdentityVersionV2 || !strictAnchorV2.MatchString(anchor.Anchor) { - return projectAnchorV2{}, fmt.Errorf("PROJECT_IDENTITY_INVALID: malformed %s", projectIdentityV2File) - } return anchor, nil } if !os.IsNotExist(err) { - return projectAnchorV2{}, fmt.Errorf("read %s: %w", projectIdentityV2File, err) + return projectAnchorV2{}, err } random := make([]byte, 16) if _, err := rand.Read(random); err != nil { return projectAnchorV2{}, fmt.Errorf("generate project anchor: %w", err) } - anchor := projectAnchorV2{Version: ProjectIdentityVersionV2, Anchor: hex.EncodeToString(random), Shared: false} - data, err = json.MarshalIndent(anchor, "", " ") + anchor = projectAnchorV2{Version: ProjectIdentityVersionV2, Anchor: hex.EncodeToString(random), Shared: false} + published, err := publishProjectAnchorV2(dir, anchorPath, anchor) if err != nil { - return projectAnchorV2{}, fmt.Errorf("encode project anchor: %w", err) + return projectAnchorV2{}, err } - file, err := os.OpenFile(anchorPath, os.O_WRONLY|os.O_CREATE|os.O_EXCL, 0600) - if os.IsExist(err) { - continue + if published { + return anchor, nil } - if err != nil { - return projectAnchorV2{}, fmt.Errorf("create %s: %w", projectIdentityV2File, err) + } +} + +func readProjectAnchorV2(anchorPath string) (projectAnchorV2, error) { + data, err := os.ReadFile(anchorPath) + if err != nil { + return projectAnchorV2{}, err + } + anchor, err := decodeProjectAnchorV2(data) + if err != nil { + return projectAnchorV2{}, fmt.Errorf("PROJECT_IDENTITY_INVALID: %w", err) + } + return anchor, nil +} + +func decodeProjectAnchorV2(data []byte) (projectAnchorV2, error) { + var anchor projectAnchorV2 + decoder := json.NewDecoder(bytes.NewReader(data)) + decoder.DisallowUnknownFields() + if err := decoder.Decode(&anchor); err != nil { + return projectAnchorV2{}, fmt.Errorf("decode %s: %w", projectIdentityV2File, err) + } + if err := decoder.Decode(&struct{}{}); err != io.EOF { + return projectAnchorV2{}, fmt.Errorf("trailing data in %s", projectIdentityV2File) + } + if anchor.Version != ProjectIdentityVersionV2 || !strictAnchorV2.MatchString(anchor.Anchor) { + return projectAnchorV2{}, fmt.Errorf("malformed %s", projectIdentityV2File) + } + return anchor, nil +} + +func publishProjectAnchorV2(dir, anchorPath string, anchor projectAnchorV2) (bool, error) { + data, err := json.MarshalIndent(anchor, "", " ") + if err != nil { + return false, fmt.Errorf("encode project anchor: %w", err) + } + data = append(data, '\n') + if _, err := decodeProjectAnchorV2(data); err != nil { + return false, fmt.Errorf("validate encoded project anchor: %w", err) + } + + temp, err := os.CreateTemp(dir, projectIdentityV2File+".tmp-") + if err != nil { + return false, fmt.Errorf("create temporary %s: %w", projectIdentityV2File, err) + } + tempPath := temp.Name() + fail := func(stage string, cause error, closeFile bool) (bool, error) { + if closeFile { + if closeErr := temp.Close(); closeErr != nil { + cause = fmt.Errorf("%v; close temporary %s: %w", cause, projectIdentityV2File, closeErr) + } } - _, writeErr := file.Write(append(data, '\n')) - closeErr := file.Close() - if writeErr != nil { - return projectAnchorV2{}, fmt.Errorf("write %s: %w", projectIdentityV2File, writeErr) + if cleanupErr := os.Remove(tempPath); cleanupErr != nil && !os.IsNotExist(cleanupErr) { + cause = fmt.Errorf("%v; cleanup temporary %s: %w", cause, projectIdentityV2File, cleanupErr) } - if closeErr != nil { - return projectAnchorV2{}, fmt.Errorf("close %s: %w", projectIdentityV2File, closeErr) + return false, fmt.Errorf("%s %s: %w", stage, projectIdentityV2File, cause) + } + + if err := temp.Chmod(0600); err != nil { + return fail("chmod temporary", err, true) + } + n, err := temp.Write(data) + if err == nil && n != len(data) { + err = io.ErrShortWrite + } + if err != nil { + return fail("write temporary", err, true) + } + if err := temp.Sync(); err != nil { + return fail("sync temporary", err, true) + } + if err := temp.Close(); err != nil { + return fail("close temporary", err, false) + } + + // A same-filesystem hard link makes the complete inode visible atomically + // and fails rather than replacing an existing final name. + if err := os.Link(tempPath, anchorPath); err != nil { + cleanupErr := os.Remove(tempPath) + if cleanupErr != nil && !os.IsNotExist(cleanupErr) { + return false, fmt.Errorf("publish %s: %v; cleanup temporary %s: %w", projectIdentityV2File, err, projectIdentityV2File, cleanupErr) + } + if os.IsExist(err) { + return false, nil } - return anchor, nil + return false, fmt.Errorf("publish %s: %w", projectIdentityV2File, err) + } + if err := os.Remove(tempPath); err != nil { + return false, fmt.Errorf("cleanup published temporary %s: %w", projectIdentityV2File, err) } + return true, nil } // ResolveProjectSlug computes a stable, cross-platform project identity for the diff --git a/internal/proxy/identity_test.go b/internal/proxy/identity_test.go index 3e48cc9a..f7e524cc 100644 --- a/internal/proxy/identity_test.go +++ b/internal/proxy/identity_test.go @@ -6,6 +6,7 @@ import ( "os/exec" "path/filepath" "regexp" + "runtime" "strings" "sync" "testing" @@ -147,6 +148,114 @@ func TestResolveProjectIdentityV2_ConcurrentFirstUseConverges(t *testing.T) { t.Fatalf("caller %d got divergent anchor %q != %q", i, identities[i].NonGitAnchor, identities[0].NonGitAnchor) } } + assertCompleteProjectAnchorV2(t, dir, identities[0].NonGitAnchor) +} + +func TestResolveProjectIdentityV2_PreExistingAnchorsAreNeverReplaced(t *testing.T) { + t.Run("valid", func(t *testing.T) { + dir := t.TempDir() + anchorPath := filepath.Join(dir, ".engram-project-v2.json") + original := []byte("{\n \"version\": 2,\n \"anchor\": \"00112233445566778899aabbccddeeff\",\n \"shared\": false\n}\n") + if err := os.WriteFile(anchorPath, original, 0600); err != nil { + t.Fatal(err) + } + const callers = 16 + var wg sync.WaitGroup + errs := make([]error, callers) + for i := range callers { + wg.Add(1) + go func(i int) { + defer wg.Done() + identity, err := proxy.ResolveProjectIdentityV2(dir) + errs[i] = err + if err == nil && identity.NonGitAnchor != "00112233445566778899aabbccddeeff" { + errs[i] = &identityTestError{message: "pre-existing anchor changed"} + } + }(i) + } + wg.Wait() + for i, err := range errs { + if err != nil { + t.Fatalf("caller %d: %v", i, err) + } + } + got, err := os.ReadFile(anchorPath) + if err != nil { + t.Fatal(err) + } + if string(got) != string(original) { + t.Fatalf("pre-existing valid anchor bytes changed:\n%s", got) + } + assertNoProjectAnchorTempFiles(t, dir) + }) + + t.Run("malformed", func(t *testing.T) { + dir := t.TempDir() + anchorPath := filepath.Join(dir, ".engram-project-v2.json") + original := []byte(`{"version":2`) + if err := os.WriteFile(anchorPath, original, 0600); err != nil { + t.Fatal(err) + } + for i := 0; i < 8; i++ { + _, err := proxy.ResolveProjectIdentityV2(dir) + if err == nil || !strings.Contains(err.Error(), "PROJECT_IDENTITY_INVALID") { + t.Fatalf("attempt %d error=%v, want fail-closed invalid", i, err) + } + } + got, err := os.ReadFile(anchorPath) + if err != nil { + t.Fatal(err) + } + if string(got) != string(original) { + t.Fatalf("malformed anchor was replaced: %q", got) + } + assertNoProjectAnchorTempFiles(t, dir) + }) +} + +type identityTestError struct{ message string } + +func (e *identityTestError) Error() string { return e.message } + +func assertCompleteProjectAnchorV2(t *testing.T, dir, expectedAnchor string) { + t.Helper() + anchorPath := filepath.Join(dir, ".engram-project-v2.json") + data, err := os.ReadFile(anchorPath) + if err != nil { + t.Fatal(err) + } + var anchor struct { + Version uint32 `json:"version"` + Anchor string `json:"anchor"` + Shared bool `json:"shared"` + } + if err := json.Unmarshal(data, &anchor); err != nil { + t.Fatalf("anchor is not complete JSON: %v\n%s", err, data) + } + if anchor.Version != 2 || anchor.Anchor != expectedAnchor || anchor.Shared { + t.Fatalf("anchor=%#v", anchor) + } + info, err := os.Stat(anchorPath) + if err != nil { + t.Fatal(err) + } + if runtime.GOOS != "windows" && info.Mode().Perm() != 0600 { + t.Fatalf("anchor mode=%#o, want 0600", info.Mode().Perm()) + } + assertNoProjectAnchorTempFiles(t, dir) +} + +func assertNoProjectAnchorTempFiles(t *testing.T, dir string) { + t.Helper() + entries, err := os.ReadDir(dir) + if err != nil { + t.Fatal(err) + } + for _, entry := range entries { + if strings.HasPrefix(entry.Name(), ".engram-project-v2.json.tmp-") { + t.Fatalf("temporary anchor residue: %s", entry.Name()) + } + } } // findRealRepoRoot returns the absolute path of the current git repository diff --git a/plugin/engram/hooks/lib.js b/plugin/engram/hooks/lib.js index c68f67b3..5945fbcc 100644 --- a/plugin/engram/hooks/lib.js +++ b/plugin/engram/hooks/lib.js @@ -444,13 +444,7 @@ function readOrCreateProjectAnchorV2(cwd) { const anchorPath = path.join(path.resolve(cwd || ''), PROJECT_IDENTITY_V2_FILE); for (;;) { try { - const parsed = JSON.parse(fs.readFileSync(anchorPath, 'utf8')); - const keys = parsed && typeof parsed === 'object' && !Array.isArray(parsed) ? Object.keys(parsed).sort() : []; - if (keys.length !== PROJECT_ANCHOR_V2_KEYS.length || keys.some((key, index) => key !== PROJECT_ANCHOR_V2_KEYS[index]) || - parsed.version !== PROJECT_IDENTITY_VERSION_V2 || !STRICT_ANCHOR_V2.test(parsed.anchor) || typeof parsed.shared !== 'boolean') { - throw new Error(`PROJECT_IDENTITY_INVALID: malformed ${PROJECT_IDENTITY_V2_FILE}`); - } - return parsed; + return decodeProjectAnchorV2(fs.readFileSync(anchorPath, 'utf8')); } catch (error) { if (error && error.code !== 'ENOENT') throw error; } @@ -460,22 +454,76 @@ function readOrCreateProjectAnchorV2(cwd) { anchor: crypto.randomBytes(16).toString('hex'), shared: false, }; - let fd; - try { - fd = fs.openSync(anchorPath, 'wx', 0o600); - fs.writeFileSync(fd, `${JSON.stringify(anchor, null, 2)}\n`, 'utf8'); - fs.closeSync(fd); + const payload = `${JSON.stringify(anchor, null, 2)}\n`; + decodeProjectAnchorV2(payload); + if (publishProjectAnchorV2(anchorPath, payload)) { return anchor; - } catch (error) { - if (fd !== undefined) { - try { fs.closeSync(fd); } catch (_) {} - } - if (error && error.code === 'EEXIST') continue; - throw error; } } } +function decodeProjectAnchorV2(data) { + let parsed; + try { + parsed = JSON.parse(data); + } catch (error) { + throw projectIdentityInvalid(`decode ${PROJECT_IDENTITY_V2_FILE}: ${error.message}`); + } + const keys = parsed && typeof parsed === 'object' && !Array.isArray(parsed) ? Object.keys(parsed).sort() : []; + if (keys.length !== PROJECT_ANCHOR_V2_KEYS.length || keys.some((key, index) => key !== PROJECT_ANCHOR_V2_KEYS[index]) || + parsed.version !== PROJECT_IDENTITY_VERSION_V2 || !STRICT_ANCHOR_V2.test(parsed.anchor) || typeof parsed.shared !== 'boolean') { + throw projectIdentityInvalid(`malformed ${PROJECT_IDENTITY_V2_FILE}`); + } + return parsed; +} + +function publishProjectAnchorV2(anchorPath, payload) { + const tempPath = `${anchorPath}.tmp-${process.pid}-${crypto.randomBytes(16).toString('hex')}`; + let fd; + let phase = 'create'; + let primaryError; + try { + fd = fs.openSync(tempPath, 'wx', 0o600); + phase = 'write'; + fs.writeFileSync(fd, payload, 'utf8'); + phase = 'sync'; + fs.fsyncSync(fd); + phase = 'close'; + fs.closeSync(fd); + fd = undefined; + phase = 'publish'; + // Hard-link publication is atomic and refuses to replace an existing name. + fs.linkSync(tempPath, anchorPath); + } catch (error) { + primaryError = error; + } + + if (fd === undefined && phase === 'create' && primaryError) { + throw primaryError; + } + let closeError; + if (fd !== undefined) { + try { fs.closeSync(fd); } catch (error) { closeError = error; } + } + let cleanupError; + try { fs.unlinkSync(tempPath); } catch (error) { + if (!error || error.code !== 'ENOENT') cleanupError = error; + } + if (cleanupError) throw projectAnchorPublicationError(primaryError, closeError, cleanupError); + if (primaryError) { + if (phase === 'publish' && primaryError.code === 'EEXIST' && !closeError) return false; + throw projectAnchorPublicationError(primaryError, closeError); + } + if (closeError) throw projectAnchorPublicationError(closeError); + return true; +} + +function projectAnchorPublicationError(...errors) { + const present = errors.filter(Boolean); + if (present.length === 1) return present[0]; + return new Error(present.map((error) => error.message || String(error)).join('; ')); +} + function resolveProjectIdentityV2(cwd) { const resolved = path.resolve(cwd || ''); const git = getGitRemoteID(resolved); diff --git a/plugin/engram/hooks/project-identity-v2.test.js b/plugin/engram/hooks/project-identity-v2.test.js index 9d5caf96..8c4dbe3f 100644 --- a/plugin/engram/hooks/project-identity-v2.test.js +++ b/plugin/engram/hooks/project-identity-v2.test.js @@ -1,4 +1,5 @@ const assert = require('node:assert/strict'); +const { spawn } = require('node:child_process'); const fs = require('node:fs'); const os = require('node:os'); const path = require('node:path'); @@ -9,6 +10,83 @@ const lib = require('./lib'); const vectorsPath = path.resolve(__dirname, '../../../.agent/specs/security-project-identity/evidence/project-identity-v2-vectors.json'); const vectors = JSON.parse(fs.readFileSync(vectorsPath, 'utf8')); +const claudeIdentityChild = String.raw` +const fs = require('node:fs'); +const path = require('node:path'); +const [modulePath, workspace, barrier, id] = process.argv.slice(1); +fs.writeFileSync(path.join(barrier, 'ready-' + id), ''); +const wait = new Int32Array(new SharedArrayBuffer(4)); +while (!fs.existsSync(path.join(barrier, 'go'))) Atomics.wait(wait, 0, 0, 5); +try { + const lib = require(modulePath); + process.stdout.write(JSON.stringify({ ok: true, value: lib.resolveProjectIdentityV2(workspace) })); +} catch (error) { + process.stdout.write(JSON.stringify({ ok: false, error: String(error && error.message || error) })); +} +`; + +async function resolveClaudeIdentityInChildProcesses(workspace, count) { + const barrier = fs.mkdtempSync(path.join(os.tmpdir(), 'engram-identity-v2-barrier-')); + const modulePath = require.resolve('./lib'); + const children = []; + try { + for (let id = 0; id < count; id++) { + const child = spawn(process.execPath, ['-e', claudeIdentityChild, modulePath, workspace, barrier, String(id)], { + stdio: ['ignore', 'pipe', 'pipe'], + windowsHide: true, + }); + let stdout = ''; + let stderr = ''; + const result = new Promise((resolve, reject) => { + child.stdout.setEncoding('utf8'); + child.stderr.setEncoding('utf8'); + child.stdout.on('data', (chunk) => { stdout += chunk; }); + child.stderr.on('data', (chunk) => { stderr += chunk; }); + child.once('error', reject); + child.once('close', (code) => { + if (code !== 0) { + reject(new Error(`identity child ${id} exited ${code}: ${stderr}`)); + return; + } + try { resolve(JSON.parse(stdout)); } catch (error) { + reject(new Error(`identity child ${id} returned invalid JSON: ${stdout}\n${stderr}`, { cause: error })); + } + }); + }); + children.push({ child, result }); + } + + const deadline = Date.now() + 15000; + while (fs.readdirSync(barrier).filter((name) => name.startsWith('ready-')).length !== count) { + if (Date.now() >= deadline) throw new Error('identity children did not reach the concurrency barrier'); + await new Promise((resolve) => setTimeout(resolve, 10)); + } + fs.writeFileSync(path.join(barrier, 'go'), ''); + return await Promise.all(children.map(({ result }) => result)); + } finally { + for (const { child } of children) { + if (child.exitCode === null) child.kill(); + } + fs.rmSync(barrier, { recursive: true, force: true }); + } +} + +function assertCompleteAnchorPublication(workspace, expectedAnchor) { + const anchorPath = path.join(workspace, '.engram-project-v2.json'); + const parsed = JSON.parse(fs.readFileSync(anchorPath, 'utf8')); + assert.deepEqual(Object.keys(parsed).sort(), ['anchor', 'shared', 'version']); + assert.equal(parsed.version, 2); + assert.equal(parsed.anchor, expectedAnchor); + assert.equal(parsed.shared, false); + if (process.platform !== 'win32') { + assert.equal(fs.statSync(anchorPath).mode & 0o777, 0o600); + } + assert.deepEqual( + fs.readdirSync(workspace).filter((name) => name.startsWith('.engram-project-v2.json.tmp-')), + [], + ); +} + test('project identity v2 consumes the repository-wide vectors', () => { assert.equal(vectors.identity_version, lib.PROJECT_IDENTITY_VERSION_V2); for (const vector of vectors.vectors) { @@ -23,16 +101,26 @@ test('project identity v2 consumes the repository-wide vectors', () => { } }); -test('non-git v2 anchor is strict, high-entropy, stable, and concurrent-safe', async (t) => { +test('non-git v2 anchor is strict, high-entropy, stable, and child-process concurrent-safe', async (t) => { const dir = fs.mkdtempSync(path.join(os.tmpdir(), 'engram-identity-v2-')); t.after(() => fs.rmSync(dir, { recursive: true, force: true })); - const identities = await Promise.all(Array.from({ length: 16 }, () => - lib.resolveProjectIdentityV2(dir))); + const firstRun = await resolveClaudeIdentityInChildProcesses(dir, 16); + assert.ok(firstRun.every((result) => result.ok), JSON.stringify(firstRun)); + const identities = firstRun.map((result) => result.value); const anchors = new Set(identities.map((identity) => identity.non_git_anchor)); assert.equal(anchors.size, 1); assert.match(identities[0].non_git_anchor, /^[0-9a-f]{32}$/); assert.equal(identities[0].anchor_shared, false); + assertCompleteAnchorPublication(dir, identities[0].non_git_anchor); + + const anchorPath = path.join(dir, '.engram-project-v2.json'); + const originalBytes = fs.readFileSync(anchorPath); + const secondRun = await resolveClaudeIdentityInChildProcesses(dir, 8); + assert.ok(secondRun.every((result) => result.ok), JSON.stringify(secondRun)); + assert.ok(secondRun.every((result) => result.value.non_git_anchor === identities[0].non_git_anchor)); + assert.deepEqual(fs.readFileSync(anchorPath), originalBytes, 'an existing anchor must remain byte-identical'); + assertCompleteAnchorPublication(dir, identities[0].non_git_anchor); const otherDir = fs.mkdtempSync(path.join(os.tmpdir(), 'engram-identity-v2-other-')); t.after(() => fs.rmSync(otherDir, { recursive: true, force: true })); @@ -44,7 +132,7 @@ test('non-git v2 anchor is strict, high-entropy, stable, and concurrent-safe', a assert.throws(() => lib.validateProjectIdentityV2(bad), /PROJECT_IDENTITY_INVALID/); }); -test('v2 metadata and anchor files reject non-normalized or unknown input', (t) => { +test('v2 metadata and anchor files reject non-normalized or unknown input without replacement', async (t) => { const malformed = lib.buildProjectIdentityV2({ legacy_project_id: ' selector ', display_name: 'fixture', @@ -55,13 +143,19 @@ test('v2 metadata and anchor files reject non-normalized or unknown input', (t) const dir = fs.mkdtempSync(path.join(os.tmpdir(), 'engram-identity-v2-extra-')); t.after(() => fs.rmSync(dir, { recursive: true, force: true })); - fs.writeFileSync(path.join(dir, '.engram-project-v2.json'), JSON.stringify({ + const anchorPath = path.join(dir, '.engram-project-v2.json'); + const malformedBytes = Buffer.from(JSON.stringify({ version: 2, anchor: '00112233445566778899aabbccddeeff', shared: false, unexpected: true, })); + fs.writeFileSync(anchorPath, malformedBytes, { mode: 0o600 }); assert.throws(() => lib.resolveProjectIdentityV2(dir), /PROJECT_IDENTITY_INVALID/); + const concurrent = await resolveClaudeIdentityInChildProcesses(dir, 8); + assert.ok(concurrent.every((result) => !result.ok && /PROJECT_IDENTITY_INVALID/.test(result.error)), JSON.stringify(concurrent)); + assert.deepEqual(fs.readFileSync(anchorPath), malformedBytes, 'malformed existing bytes must never be regenerated'); + assert.deepEqual(fs.readdirSync(dir).filter((name) => name.startsWith('.engram-project-v2.json.tmp-')), []); }); test('shared invalid vectors and wrong-type anchor sharing are rejected exactly', () => { diff --git a/plugin/openclaw-engram/src/identity.ts b/plugin/openclaw-engram/src/identity.ts index 1cce6fc3..f147484e 100644 --- a/plugin/openclaw-engram/src/identity.ts +++ b/plugin/openclaw-engram/src/identity.ts @@ -13,7 +13,7 @@ import { createHash, randomBytes } from 'node:crypto'; import { execSync } from 'node:child_process'; -import { closeSync, openSync, readFileSync, writeFileSync } from 'node:fs'; +import { closeSync, fsyncSync, linkSync, openSync, readFileSync, unlinkSync, writeFileSync } from 'node:fs'; import { resolve, basename } from 'node:path'; // Module-level memoization cache — keyed by resolved cwd path @@ -123,35 +123,81 @@ function readOrCreateProjectAnchorV2(workspaceDir: string): { version: 2; anchor const anchorPath = resolve(workspaceDir, projectIdentityV2File); for (;;) { try { - const parsed = JSON.parse(readFileSync(anchorPath, 'utf8')) as unknown; - const keys = parsed && typeof parsed === 'object' && !Array.isArray(parsed) ? Object.keys(parsed).sort() : []; - const anchor = parsed as { version?: number; anchor?: string; shared?: boolean }; - if (keys.length !== projectAnchorV2Keys.length || keys.some((key, index) => key !== projectAnchorV2Keys[index]) || - anchor.version !== PROJECT_IDENTITY_VERSION_V2 || typeof anchor.anchor !== 'string' || !strictAnchorV2.test(anchor.anchor) || typeof anchor.shared !== 'boolean') { - invalidAnchorFile(); - } - return { version: 2, anchor: anchor.anchor, shared: anchor.shared }; + return decodeProjectAnchorV2(readFileSync(anchorPath, 'utf8')); } catch (error) { if ((error as NodeJS.ErrnoException).code !== 'ENOENT') throw error; } const anchor = { version: PROJECT_IDENTITY_VERSION_V2, anchor: randomBytes(16).toString('hex'), shared: false }; - let descriptor: number | undefined; - try { - descriptor = openSync(anchorPath, 'wx', 0o600); - writeFileSync(descriptor, `${JSON.stringify(anchor, null, 2)}\n`, 'utf8'); - closeSync(descriptor); + const payload = `${JSON.stringify(anchor, null, 2)}\n`; + decodeProjectAnchorV2(payload); + if (publishProjectAnchorV2(anchorPath, payload)) { return anchor; - } catch (error) { - if (descriptor !== undefined) { - try { closeSync(descriptor); } catch { /* best effort */ } - } - if ((error as NodeJS.ErrnoException).code === 'EEXIST') continue; - throw error; } } } +function decodeProjectAnchorV2(data: string): { version: 2; anchor: string; shared: boolean } { + let parsed: unknown; + try { + parsed = JSON.parse(data) as unknown; + } catch { + invalidAnchorFile(); + } + const keys = parsed && typeof parsed === 'object' && !Array.isArray(parsed) ? Object.keys(parsed).sort() : []; + const anchor = parsed as { version?: number; anchor?: string; shared?: boolean }; + if (keys.length !== projectAnchorV2Keys.length || keys.some((key, index) => key !== projectAnchorV2Keys[index]) || + anchor.version !== PROJECT_IDENTITY_VERSION_V2 || typeof anchor.anchor !== 'string' || !strictAnchorV2.test(anchor.anchor) || typeof anchor.shared !== 'boolean') { + invalidAnchorFile(); + } + return { version: 2, anchor: anchor.anchor, shared: anchor.shared }; +} + +function publishProjectAnchorV2(anchorPath: string, payload: string): boolean { + const tempPath = `${anchorPath}.tmp-${process.pid}-${randomBytes(16).toString('hex')}`; + let descriptor: number | undefined; + let phase: 'create' | 'write' | 'sync' | 'close' | 'publish' = 'create'; + let primaryError: unknown; + try { + descriptor = openSync(tempPath, 'wx', 0o600); + phase = 'write'; + writeFileSync(descriptor, payload, 'utf8'); + phase = 'sync'; + fsyncSync(descriptor); + phase = 'close'; + closeSync(descriptor); + descriptor = undefined; + phase = 'publish'; + // Hard-link publication is atomic and refuses to replace an existing name. + linkSync(tempPath, anchorPath); + } catch (error) { + primaryError = error; + } + + if (descriptor === undefined && phase === 'create' && primaryError) throw primaryError; + let closeError: unknown; + if (descriptor !== undefined) { + try { closeSync(descriptor); } catch (error) { closeError = error; } + } + let cleanupError: unknown; + try { unlinkSync(tempPath); } catch (error) { + if ((error as NodeJS.ErrnoException).code !== 'ENOENT') cleanupError = error; + } + if (cleanupError) throw projectAnchorPublicationError(primaryError, closeError, cleanupError); + if (primaryError) { + if (phase === 'publish' && (primaryError as NodeJS.ErrnoException).code === 'EEXIST' && !closeError) return false; + throw projectAnchorPublicationError(primaryError, closeError); + } + if (closeError) throw projectAnchorPublicationError(closeError); + return true; +} + +function projectAnchorPublicationError(...errors: unknown[]): Error { + const present = errors.filter((error) => error != null); + if (present.length === 1 && present[0] instanceof Error) return present[0]; + return new Error(present.map((error) => error instanceof Error ? error.message : String(error)).join('; ')); +} + function invalidAnchorFile(): never { throw new Error(`PROJECT_IDENTITY_INVALID: malformed ${projectIdentityV2File}`); } diff --git a/plugin/openclaw-engram/test/project-identity-v2.test.mjs b/plugin/openclaw-engram/test/project-identity-v2.test.mjs index 6a9b3a09..9e93c136 100644 --- a/plugin/openclaw-engram/test/project-identity-v2.test.mjs +++ b/plugin/openclaw-engram/test/project-identity-v2.test.mjs @@ -1,4 +1,5 @@ import assert from 'node:assert/strict'; +import { spawn } from 'node:child_process'; import fs from 'node:fs'; import os from 'node:os'; import path from 'node:path'; @@ -15,6 +16,80 @@ import { const here = path.dirname(fileURLToPath(import.meta.url)); const vectorsPath = path.resolve(here, '../../../.agent/specs/security-project-identity/evidence/project-identity-v2-vectors.json'); const vectors = JSON.parse(fs.readFileSync(vectorsPath, 'utf8')); +const identityModulePath = path.resolve(here, '../dist/identity.js'); + +const openClawIdentityChild = String.raw` +const fs = require('node:fs'); +const path = require('node:path'); +const [modulePath, workspace, barrier, id] = process.argv.slice(1); +fs.writeFileSync(path.join(barrier, 'ready-' + id), ''); +const wait = new Int32Array(new SharedArrayBuffer(4)); +while (!fs.existsSync(path.join(barrier, 'go'))) Atomics.wait(wait, 0, 0, 5); +try { + const { resolveIdentity } = require(modulePath); + process.stdout.write(JSON.stringify({ ok: true, value: resolveIdentity('agent-' + id, workspace).projectIdentityV2 })); +} catch (error) { + process.stdout.write(JSON.stringify({ ok: false, error: String(error && error.message || error) })); +} +`; + +async function resolveOpenClawIdentityInChildProcesses(workspace, count) { + const barrier = fs.mkdtempSync(path.join(os.tmpdir(), 'openclaw-identity-v2-barrier-')); + const children = []; + try { + for (let id = 0; id < count; id++) { + const child = spawn(process.execPath, ['-e', openClawIdentityChild, identityModulePath, workspace, barrier, String(id)], { + stdio: ['ignore', 'pipe', 'pipe'], + windowsHide: true, + }); + let stdout = ''; + let stderr = ''; + const result = new Promise((resolve, reject) => { + child.stdout.setEncoding('utf8'); + child.stderr.setEncoding('utf8'); + child.stdout.on('data', (chunk) => { stdout += chunk; }); + child.stderr.on('data', (chunk) => { stderr += chunk; }); + child.once('error', reject); + child.once('close', (code) => { + if (code !== 0) { + reject(new Error(`identity child ${id} exited ${code}: ${stderr}`)); + return; + } + try { resolve(JSON.parse(stdout)); } catch (error) { + reject(new Error(`identity child ${id} returned invalid JSON: ${stdout}\n${stderr}`, { cause: error })); + } + }); + }); + children.push({ child, result }); + } + + const deadline = Date.now() + 15000; + while (fs.readdirSync(barrier).filter((name) => name.startsWith('ready-')).length !== count) { + if (Date.now() >= deadline) throw new Error('identity children did not reach the concurrency barrier'); + await new Promise((resolve) => setTimeout(resolve, 10)); + } + fs.writeFileSync(path.join(barrier, 'go'), ''); + return await Promise.all(children.map(({ result }) => result)); + } finally { + for (const { child } of children) { + if (child.exitCode === null) child.kill(); + } + fs.rmSync(barrier, { recursive: true, force: true }); + } +} + +function assertCompleteAnchorPublication(workspace, expectedAnchor) { + const anchorPath = path.join(workspace, '.engram-project-v2.json'); + const parsed = JSON.parse(fs.readFileSync(anchorPath, 'utf8')); + assert.deepEqual(Object.keys(parsed).sort(), ['anchor', 'shared', 'version']); + assert.equal(parsed.version, 2); + assert.equal(parsed.anchor, expectedAnchor); + assert.equal(parsed.shared, false); + if (process.platform !== 'win32') { + assert.equal(fs.statSync(anchorPath).mode & 0o777, 0o600); + } + assert.deepEqual(fs.readdirSync(workspace).filter((name) => name.startsWith('.engram-project-v2.json.tmp-')), []); +} test('OpenClaw consumes the same v2 vectors as Go and Claude hooks', () => { assert.equal(PROJECT_IDENTITY_VERSION_V2, vectors.identity_version); @@ -26,26 +101,36 @@ test('OpenClaw consumes the same v2 vectors as Go and Claude hooks', () => { } }); -test('OpenClaw non-git identity has a stable strict anchor, never the agent id', () => { +test('OpenClaw non-git identity is stable and child-process concurrent-safe, never the agent id', async () => { const workspace = fs.mkdtempSync(path.join(os.tmpdir(), 'openclaw-identity-v2-')); const otherWorkspace = fs.mkdtempSync(path.join(os.tmpdir(), 'openclaw-identity-v2-other-')); try { - const first = resolveIdentity('agent-secret-a', workspace); - const second = resolveIdentity('agent-secret-b', workspace); - assert.ok(first.projectIdentityV2); - assert.match(first.projectIdentityV2.non_git_anchor, /^[0-9a-f]{32}$/); - assert.equal(first.projectIdentityV2.non_git_anchor, second.projectIdentityV2.non_git_anchor); - assert.notEqual(first.projectIdentityV2.non_git_anchor, 'agent-secret-a'); - assert.equal(first.projectIdentityV2.anchor_shared, false); + const firstRun = await resolveOpenClawIdentityInChildProcesses(workspace, 16); + assert.ok(firstRun.every((result) => result.ok), JSON.stringify(firstRun)); + const identities = firstRun.map((result) => result.value); + assert.match(identities[0].non_git_anchor, /^[0-9a-f]{32}$/); + assert.ok(identities.every((identity) => identity.non_git_anchor === identities[0].non_git_anchor)); + assert.notEqual(identities[0].non_git_anchor, 'agent-secret-a'); + assert.equal(identities[0].anchor_shared, false); + assertCompleteAnchorPublication(workspace, identities[0].non_git_anchor); + + const anchorPath = path.join(workspace, '.engram-project-v2.json'); + const originalBytes = fs.readFileSync(anchorPath); + const secondRun = await resolveOpenClawIdentityInChildProcesses(workspace, 8); + assert.ok(secondRun.every((result) => result.ok), JSON.stringify(secondRun)); + assert.ok(secondRun.every((result) => result.value.non_git_anchor === identities[0].non_git_anchor)); + assert.deepEqual(fs.readFileSync(anchorPath), originalBytes, 'an existing anchor must remain byte-identical'); + assertCompleteAnchorPublication(workspace, identities[0].non_git_anchor); + const other = resolveIdentity('agent-secret-c', otherWorkspace); - assert.notEqual(first.projectIdentityV2.non_git_anchor, other.projectIdentityV2.non_git_anchor); + assert.notEqual(identities[0].non_git_anchor, other.projectIdentityV2.non_git_anchor); } finally { fs.rmSync(workspace, { recursive: true, force: true }); fs.rmSync(otherWorkspace, { recursive: true, force: true }); } }); -test('OpenClaw rejects non-normalized metadata and unknown anchor-file fields', () => { +test('OpenClaw rejects non-normalized metadata and unknown anchor-file fields without replacement', async () => { const malformed = buildProjectIdentityV2({ legacy_project_id: ' selector ', display_name: 'fixture', @@ -56,13 +141,19 @@ test('OpenClaw rejects non-normalized metadata and unknown anchor-file fields', const workspace = fs.mkdtempSync(path.join(os.tmpdir(), 'openclaw-identity-v2-extra-')); try { - fs.writeFileSync(path.join(workspace, '.engram-project-v2.json'), JSON.stringify({ + const anchorPath = path.join(workspace, '.engram-project-v2.json'); + const malformedBytes = Buffer.from(JSON.stringify({ version: 2, anchor: '00112233445566778899aabbccddeeff', shared: false, unexpected: true, })); + fs.writeFileSync(anchorPath, malformedBytes, { mode: 0o600 }); assert.throws(() => resolveIdentity('agent-a', workspace), /PROJECT_IDENTITY_INVALID/); + const concurrent = await resolveOpenClawIdentityInChildProcesses(workspace, 8); + assert.ok(concurrent.every((result) => !result.ok && /PROJECT_IDENTITY_INVALID/.test(result.error)), JSON.stringify(concurrent)); + assert.deepEqual(fs.readFileSync(anchorPath), malformedBytes, 'malformed existing bytes must never be regenerated'); + assert.deepEqual(fs.readdirSync(workspace).filter((name) => name.startsWith('.engram-project-v2.json.tmp-')), []); } finally { fs.rmSync(workspace, { recursive: true, force: true }); } From 8cb810095b2bea77ab9812832d9ab8a99c928d18 Mon Sep 17 00:00:00 2001 From: Kirill Turanskiy Date: Sat, 11 Jul 2026 00:55:45 +0300 Subject: [PATCH 042/111] PLAN-GOVERNANCE-R9: freeze exact candidate path authority --- ...roduction-ready-active-diff-contracts.json | 873 ++++ ...-10-engram-production-ready-master-plan.md | 25 +- ...gram-production-ready-ownership-state.json | 4 +- ...-10-engram-production-ready-scope-map.json | 16 +- ...-07-11-release-gates-r9-plan-governance.md | 65 + .../plan-governance/diff-db-auth.json | 238 + .../diff-db-bulkops-edge-full.json | 930 ++++ .../plan-governance/diff-db-embedding-r5.json | 685 +++ .../diff-db-embedding-stats.json | 281 + .../plan-governance/diff-security-r3.json | 452 ++ .../evidence/plan-governance/ledger-live.json | 4579 +++++++++++++++++ .../plan-governance/ledger-static.json | 4579 +++++++++++++++++ ...able-register-diff-mismatch-inventory.json | 814 +++ 13 files changed, 13520 insertions(+), 21 deletions(-) create mode 100644 .agent/plans/2026-07-10-engram-production-ready-active-diff-contracts.json create mode 100644 .agent/reports/2026-07-11-release-gates-r9-plan-governance.md create mode 100644 .agent/specs/release-gates-r9/evidence/plan-governance/diff-db-auth.json create mode 100644 .agent/specs/release-gates-r9/evidence/plan-governance/diff-db-bulkops-edge-full.json create mode 100644 .agent/specs/release-gates-r9/evidence/plan-governance/diff-db-embedding-r5.json create mode 100644 .agent/specs/release-gates-r9/evidence/plan-governance/diff-db-embedding-stats.json create mode 100644 .agent/specs/release-gates-r9/evidence/plan-governance/diff-security-r3.json create mode 100644 .agent/specs/release-gates-r9/evidence/plan-governance/ledger-live.json create mode 100644 .agent/specs/release-gates-r9/evidence/plan-governance/ledger-static.json create mode 100644 .agent/specs/release-gates-r9/evidence/plan-governance/resolvable-register-diff-mismatch-inventory.json diff --git a/.agent/plans/2026-07-10-engram-production-ready-active-diff-contracts.json b/.agent/plans/2026-07-10-engram-production-ready-active-diff-contracts.json new file mode 100644 index 00000000..0ca30de9 --- /dev/null +++ b/.agent/plans/2026-07-10-engram-production-ready-active-diff-contracts.json @@ -0,0 +1,873 @@ +{ + "schema_version": 1, + "kind": "production-ready-active-diff-contracts", + "revision": 9, + "authority": { + "plan_path": ".agent/plans/2026-07-10-engram-production-ready-master-plan.md", + "scope_map_path": ".agent/plans/2026-07-10-engram-production-ready-scope-map.json", + "ownership_state_path": ".agent/plans/2026-07-10-engram-production-ready-ownership-state.json", + "rejected_r8_head": "406fe952c143eb8aaf5895427c568a41d4cec225", + "r8_scope_provenance_sha256": "ab5f882fa110ca823a317061ecbca0c62516702735325893a56206f9e7a29415" + }, + "source_audit": { + "mutable_register_path": ".agent/reports/production-readiness-evidence-register.json", + "observed_sha256": "29865adc048cb3f64ec7d133b3bd901c95115e4ae5b95c98927607de889f77d4", + "observed_updated_at": "2026-07-11T00:23:18.8583196+03:00", + "use": "discovery-only; never required by the frozen CI gate" + }, + "digest_contract": { + "algorithm": "SHA-256", + "serialization": "ordinally sorted normalized repository paths, one UTF-8 path plus LF per entry", + "path_case": "ordinal-case-sensitive" + }, + "status_classes": { + "current": [ + "current-checker-active", + "current-ready", + "current-ready-for-check", + "current-ready-with-concerns" + ], + "rejected": [ + "rejected-evidence-revision", + "rejected-historical", + "rejected-security-r3" + ], + "pending": [ + "current-maker-in-progress" + ] + }, + "pending_namespaces": [ + { + "slice": "DB-EMBEDDING-EVIDENCE-TRANSPORT", + "plan_owner": "DB-EMBEDDING-EVIDENCE-TRANSPORT", + "status_class": "current-maker-in-progress", + "branch": "work/prc-db-embedding-evidence-transport-r6", + "base_anchor": "a538f6224ef31f612152470a4ecd45e78ff9d0f2", + "exact_prefixes": [ + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/**" + ], + "release_accepted": false + }, + { + "slice": "SECURITY-PROJECT-IDENTITY", + "plan_owner": "SECURITY-PROJECT-IDENTITY", + "status_class": "current-maker-in-progress", + "branch": "work/prc-security-project-identity-r4", + "base_anchor": "38344455754fe503acbd79d2134141f996adff7f", + "forbidden_base": "0d84047c280a873dd21baae2ecbf83ec422d497f", + "exact_paths": [ + "internal/proxy/identity_process_test.go", + "internal/proxy/identity_test.go" + ], + "forbidden_final_paths": [ + "internal/proxy/identity.go" + ], + "exact_prefixes": [ + ".agent/specs/security-project-identity/evidence/**", + ".agent/reports/evidence/production-ready/security-project-identity/**" + ], + "release_accepted": false + } + ], + "excluded_resolvable_rows": [ + { + "slice": "MASTER-PLAN", + "disposition": "in-progress-empty-diff", + "reason": "R9 base equals head until PLAN-GOVERNANCE-R9 is committed" + }, + { + "slice": "PLAN-GOVERNANCE", + "disposition": "in-progress-empty-diff", + "reason": "R9 base equals head until PLAN-GOVERNANCE-R9 is committed" + }, + { + "slice": "RELEASE-GATES", + "disposition": "in-progress-empty-diff", + "reason": "R9 base equals head until RELEASE-GATES-R9 is committed" + }, + { + "slice": "DEMOLITION-SKIP-CLASSIFICATION", + "disposition": "checker-classification", + "reason": "not a maker candidate and intentionally has no maker row" + }, + { + "slice": "DB-REAPER", + "disposition": "rejected-path-authority-conflict", + "reason": "actual service.go path is owned by AUTH-BOOTSTRAP-SECURITY and cannot be granted to DB-REAPER concurrently" + } + ], + "candidates": [ + { + "slice": "DB-AUTH", + "status_class": "current-ready", + "branch": "work/prc-db-auth", + "base": "b0c4ab4c07a4c6f512728da52b2e132bacd0289c", + "head": "da97c88be6753703bac112be8431dc373e4d9dda", + "path_count": 5, + "paths_sha256": "7a678254366c2bdcf5feba8e25ce1151a69ae0a0240d68e3af3cd15ffa1b9d9e", + "paths": [ + { + "path": ".agent/reports/db-auth-rework-maker-2026-07-10.md", + "git_status": "A", + "classification": "report" + }, + { + "path": "internal/db/gorm/user_store.go", + "git_status": "M", + "classification": "product" + }, + { + "path": "internal/db/gorm/user_store_test.go", + "git_status": "M", + "classification": "product" + }, + { + "path": "internal/worker/auth_handlers.go", + "git_status": "M", + "classification": "product" + }, + { + "path": "internal/worker/auth_handlers_lifecycle_test.go", + "git_status": "M", + "classification": "product" + } + ], + "plan_owner": "DB-AUTH", + "path_authority_eligible": true, + "release_accepted": false, + "lineage": { + "kind": "exact-live-register" + } + }, + { + "slice": "DB-EMBEDDING-STATS", + "status_class": "current-checker-active", + "branch": "work/prc-db-embedding-stats", + "base": "dc891b2d72b1fd63b83e4a630a249241fc389151", + "head": "38d6a4fb7ff5f5ae3b6c0066c0a1b806421137df", + "path_count": 8, + "paths_sha256": "b4d1c8176810630268759cedc909cd1042b063b81a14a01175b1a36f174d5c0f", + "paths": [ + { + "path": ".agent/reports/2026-07-10-db-embedding-stats-maker.md", + "git_status": "A", + "classification": "report" + }, + { + "path": ".agent/reports/evidence/production-ready/db-embedding-stats/DB-EMBEDDING-STATS.final.json", + "git_status": "A", + "classification": "evidence" + }, + { + "path": ".agent/reports/evidence/production-ready/db-embedding-stats/SHA256SUMS.txt", + "git_status": "A", + "classification": "evidence" + }, + { + "path": ".agent/specs/db-embedding-stats/evidence/DB-EMBEDDING-STATS.red.json", + "git_status": "A", + "classification": "evidence" + }, + { + "path": ".agent/specs/db-embedding-stats/evidence/DB-EMBEDDING-STATS.tdd.json", + "git_status": "A", + "classification": "evidence" + }, + { + "path": ".agent/specs/db-embedding-stats/evidence/coverage.out", + "git_status": "A", + "classification": "evidence" + }, + { + "path": "internal/embedding/store.go", + "git_status": "M", + "classification": "product" + }, + { + "path": "internal/embedding/store_stats_test.go", + "git_status": "M", + "classification": "product" + } + ], + "plan_owner": "DB-EMBEDDING-STATS", + "path_authority_eligible": true, + "release_accepted": false, + "lineage": { + "kind": "exact-live-register" + } + }, + { + "slice": "DB-EMBEDDING-EVIDENCE-TRANSPORT", + "status_class": "rejected-evidence-revision", + "branch": "work/prc-db-embedding-evidence-transport-r5", + "base": "369951b61ee07cb0c405558e0f677cd1c9e90362", + "head": "a538f6224ef31f612152470a4ecd45e78ff9d0f2", + "path_count": 28, + "paths_sha256": "a9e3eb9762bc3d597ac277c653ad30d10149cb10443fb0b0fc3edd21093c8217", + "paths": [ + { + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/R3-SHA256SUMS.txt", + "git_status": "M", + "classification": "evidence" + }, + { + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/coverage-repeat.v1.json", + "git_status": "M", + "classification": "evidence" + }, + { + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/maker-report.md", + "git_status": "M", + "classification": "evidence" + }, + { + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/maker-summary.v1.json", + "git_status": "M", + "classification": "evidence" + }, + { + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/verification-matrix.v1.json", + "git_status": "M", + "classification": "evidence" + }, + { + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4/R4-SHA256SUMS.txt", + "git_status": "M", + "classification": "evidence" + }, + { + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4/coverage-repeat.v1.json", + "git_status": "M", + "classification": "evidence" + }, + { + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4/maker-report.md", + "git_status": "M", + "classification": "evidence" + }, + { + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4/maker-summary.v1.json", + "git_status": "M", + "classification": "evidence" + }, + { + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4/verification-matrix.v1.json", + "git_status": "M", + "classification": "evidence" + }, + { + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/R5-SHA256SUMS.txt", + "git_status": "A", + "classification": "evidence" + }, + { + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/coverage-capture.v1.json", + "git_status": "A", + "classification": "evidence" + }, + { + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/coverage-repeat.v1.json", + "git_status": "A", + "classification": "evidence" + }, + { + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/coverage-run-1.tap", + "git_status": "A", + "classification": "evidence" + }, + { + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/coverage-run-2.tap", + "git_status": "A", + "classification": "evidence" + }, + { + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/maker-report.md", + "git_status": "A", + "classification": "evidence" + }, + { + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/maker-summary.v1.json", + "git_status": "A", + "classification": "evidence" + }, + { + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/run-coverage-capture-verifier.cmd", + "git_status": "A", + "classification": "evidence" + }, + { + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/verification-matrix.v1.json", + "git_status": "A", + "classification": "evidence" + }, + { + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/verify-coverage-capture.cjs", + "git_status": "A", + "classification": "evidence" + }, + { + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/ARTIFACTS.sha256", + "git_status": "M", + "classification": "evidence" + }, + { + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/maker-report.md", + "git_status": "M", + "classification": "evidence" + }, + { + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verification-observations.v1.json", + "git_status": "M", + "classification": "evidence" + }, + { + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.test.cjs", + "git_status": "M", + "classification": "evidence" + }, + { + "path": ".agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R3.tdd.json", + "git_status": "M", + "classification": "evidence" + }, + { + "path": ".agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R4.tdd.json", + "git_status": "M", + "classification": "evidence" + }, + { + "path": ".agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R5.red.json", + "git_status": "A", + "classification": "evidence" + }, + { + "path": ".agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R5.tdd.json", + "git_status": "A", + "classification": "evidence" + } + ], + "plan_owner": "DB-EMBEDDING-EVIDENCE-TRANSPORT", + "path_authority_eligible": true, + "release_accepted": false, + "lineage": { + "kind": "historical-rejected" + } + }, + { + "slice": "DB-BULKOPS", + "status_class": "rejected-historical", + "branch": "work/prc-db-bulkops", + "base": "6ea10496aa127fba7fdb194875044e770d0a1d8c", + "head": "68b2ce5835c7c6efdf1c68da9eedcb8d9c3837ef", + "path_count": 13, + "paths_sha256": "1c53f8aed2d97d91f9103a21d214856c5bb0f59dce6dcc0264e1ce04693c869a", + "paths": [ + { + "path": ".agent/reports/2026-07-10-db-bulkops-sibling-rework-maker.md", + "git_status": "A", + "classification": "report" + }, + { + "path": ".agent/reports/evidence/production-ready/db-bulkops-sibling-rework/DB-BULKOPS-SIBLING-REWORK.final.json", + "git_status": "A", + "classification": "evidence" + }, + { + "path": ".agent/reports/evidence/production-ready/db-bulkops-sibling-rework/DB-BULKOPS-SIBLING-REWORK.tdd.json", + "git_status": "A", + "classification": "evidence" + }, + { + "path": ".agent/reports/evidence/production-ready/db-bulkops-sibling-rework/H1-candidate-review-after.red.json", + "git_status": "A", + "classification": "evidence" + }, + { + "path": ".agent/reports/evidence/production-ready/db-bulkops-sibling-rework/M1-nil-facade-normalization.red.json", + "git_status": "A", + "classification": "evidence" + }, + { + "path": ".agent/reports/evidence/production-ready/db-bulkops-sibling-rework/M2-all-row-failure-audit.red.json", + "git_status": "A", + "classification": "evidence" + }, + { + "path": "internal/bulkops/facade.go", + "git_status": "M", + "classification": "product" + }, + { + "path": "internal/bulkops/facade_test.go", + "git_status": "M", + "classification": "product" + }, + { + "path": "internal/bulkops/rollback_test.go", + "git_status": "M", + "classification": "product" + }, + { + "path": "internal/db/gorm/candidate_store.go", + "git_status": "M", + "classification": "product" + }, + { + "path": "internal/db/gorm/candidate_store_test.go", + "git_status": "M", + "classification": "product" + }, + { + "path": "internal/mcp/tools_bulkops.go", + "git_status": "M", + "classification": "product" + }, + { + "path": "internal/mcp/tools_dryrun_test.go", + "git_status": "M", + "classification": "product" + } + ], + "plan_owner": "DB-BULKOPS", + "path_authority_eligible": true, + "release_accepted": false, + "lineage": { + "kind": "historical-rejected" + } + }, + { + "slice": "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK", + "status_class": "current-ready-with-concerns", + "branch": "work/prc-db-bulkops", + "base": "68b2ce5835c7c6efdf1c68da9eedcb8d9c3837ef", + "head": "bd68c05baf4b7250096dd84f56bebea2aa555970", + "path_count": 38, + "paths_sha256": "39a32b36dfac7f1148649ca092abc23320fda34e2535a828778e228aa8c0230d", + "paths": [ + { + "path": ".agent/reports/2026-07-10-db-bulkops-behavioral-edge-rework-maker.md", + "git_status": "A", + "classification": "report" + }, + { + "path": ".agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/01-red-behavior.log", + "git_status": "A", + "classification": "evidence" + }, + { + "path": ".agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/02-red-spy-seam.log", + "git_status": "A", + "classification": "evidence" + }, + { + "path": ".agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/03-green-focused.log", + "git_status": "A", + "classification": "evidence" + }, + { + "path": ".agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/04-green-repeat20.log", + "git_status": "A", + "classification": "evidence" + }, + { + "path": ".agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/05-prove-it-candidate.log", + "git_status": "A", + "classification": "evidence" + }, + { + "path": ".agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/06-prove-it-parser.log", + "git_status": "A", + "classification": "evidence" + }, + { + "path": ".agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/07-post-prove-green.log", + "git_status": "A", + "classification": "evidence" + }, + { + "path": ".agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/08-full-packages.log", + "git_status": "A", + "classification": "evidence" + }, + { + "path": ".agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/09-legacy-compat.log", + "git_status": "A", + "classification": "evidence" + }, + { + "path": ".agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/10-full-gorm.log", + "git_status": "A", + "classification": "evidence" + }, + { + "path": ".agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/11-full-mcp.log", + "git_status": "A", + "classification": "evidence" + }, + { + "path": ".agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/12-race-focused.log", + "git_status": "A", + "classification": "evidence" + }, + { + "path": ".agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/13-vet.log", + "git_status": "A", + "classification": "evidence" + }, + { + "path": ".agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/14-coverage.log", + "git_status": "A", + "classification": "evidence" + }, + { + "path": ".agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/15-cover-functions.log", + "git_status": "A", + "classification": "evidence" + }, + { + "path": ".agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/16-final-residue.log", + "git_status": "A", + "classification": "evidence" + }, + { + "path": ".agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/17-review-red-authoritative-binding.log", + "git_status": "A", + "classification": "evidence" + }, + { + "path": ".agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/18-review-green-authoritative-binding.log", + "git_status": "A", + "classification": "evidence" + }, + { + "path": ".agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/19-review-green-authoritative-binding.log", + "git_status": "A", + "classification": "evidence" + }, + { + "path": ".agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/20-review-repeat20.log", + "git_status": "A", + "classification": "evidence" + }, + { + "path": ".agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/21-review-race-focused.log", + "git_status": "A", + "classification": "evidence" + }, + { + "path": ".agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/22-review-vet.log", + "git_status": "A", + "classification": "evidence" + }, + { + "path": ".agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/23-review-coverage.log", + "git_status": "A", + "classification": "evidence" + }, + { + "path": ".agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/24-review-cover-functions.log", + "git_status": "A", + "classification": "evidence" + }, + { + "path": ".agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/25-review-cover-functions.log", + "git_status": "A", + "classification": "evidence" + }, + { + "path": ".agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/26-review-full-gorm.log", + "git_status": "A", + "classification": "evidence" + }, + { + "path": ".agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/27-review-full-mcp.log", + "git_status": "A", + "classification": "evidence" + }, + { + "path": ".agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/A-candidate-review-snapshot-binding.red.json", + "git_status": "A", + "classification": "evidence" + }, + { + "path": ".agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/B-bulk-structured-input.red.json", + "git_status": "A", + "classification": "evidence" + }, + { + "path": ".agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/DB-BULKOPS-BEHAVIORAL-EDGE-REWORK.final.json", + "git_status": "A", + "classification": "evidence" + }, + { + "path": ".agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/Invoke-MakerGo.ps1", + "git_status": "A", + "classification": "evidence" + }, + { + "path": ".agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/SHA256SUMS.txt", + "git_status": "A", + "classification": "evidence" + }, + { + "path": ".agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/coverage.out", + "git_status": "A", + "classification": "evidence" + }, + { + "path": "internal/db/gorm/candidate_store.go", + "git_status": "M", + "classification": "product" + }, + { + "path": "internal/db/gorm/candidate_store_test.go", + "git_status": "M", + "classification": "product" + }, + { + "path": "internal/mcp/tools_bulkops.go", + "git_status": "M", + "classification": "product" + }, + { + "path": "internal/mcp/tools_dryrun_test.go", + "git_status": "M", + "classification": "product" + } + ], + "plan_owner": "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK", + "path_authority_eligible": true, + "release_accepted": false, + "lineage": { + "kind": "corrected-full-candidate", + "register_partial_base": "cd098397764e13388aef3b4da9448172c7092fdb", + "required_rejected_predecessor_base": "68b2ce5835c7c6efdf1c68da9eedcb8d9c3837ef" + } + }, + { + "slice": "DB-CRYSTALLIZATION", + "status_class": "current-ready-with-concerns", + "branch": "work/prc-db-crystallization", + "base": "dc891b2d72b1fd63b83e4a630a249241fc389151", + "head": "2ab6211494e51aeb7b787a99e78cff8bf2d5694a", + "path_count": 1, + "paths_sha256": "8428c4f86e06bdab5367fd6678decdb49b8aa23a41f593b246b7e541ec84ab23", + "paths": [ + { + "path": "internal/worker/handlers_hooks_crystallization_integration_test.go", + "git_status": "M", + "classification": "product" + } + ], + "plan_owner": "DB-CRYSTALLIZATION", + "path_authority_eligible": true, + "release_accepted": false, + "lineage": { + "kind": "exact-live-register" + } + }, + { + "slice": "SECURITY-TOOLCHAIN", + "status_class": "current-ready", + "branch": "work/prc-security-toolchain", + "base": "dc891b2d72b1fd63b83e4a630a249241fc389151", + "head": "b0955dfd61b4ea7364f6d400579247b475a1a680", + "path_count": 3, + "paths_sha256": "5e49ddf6f66cc54d25f31cecd2fae96554d760f8c722f1c113a9d8e695468143", + "paths": [ + { + "path": "Dockerfile", + "git_status": "M", + "classification": "product" + }, + { + "path": "go.mod", + "git_status": "M", + "classification": "product" + }, + { + "path": "go.sum", + "git_status": "M", + "classification": "product" + } + ], + "plan_owner": "SECURITY-TOOLCHAIN", + "path_authority_eligible": true, + "release_accepted": false, + "lineage": { + "kind": "exact-live-register" + } + }, + { + "slice": "SECURITY-PROJECT-IDENTITY", + "status_class": "rejected-security-r3", + "branch": "work/prc-security-project-identity-r3", + "base": "9e2ce4e58a5cded69660ca9ac532d2167f315bb2", + "head": "38344455754fe503acbd79d2134141f996adff7f", + "path_count": 14, + "paths_sha256": "046360929bec61f3cbda420754aaab7056badf467d5e5c2c2e2fce68e2f5e21f", + "paths": [ + { + "path": ".agent/reports/evidence/production-ready/security-project-identity/SECURITY-PROJECT-IDENTITY-R3-maker-report.md", + "git_status": "A", + "classification": "report" + }, + { + "path": ".agent/specs/security-project-identity/evidence/SECURITY-PROJECT-IDENTITY-R3.red.json", + "git_status": "A", + "classification": "evidence" + }, + { + "path": ".agent/specs/security-project-identity/evidence/SECURITY-PROJECT-IDENTITY-R3.tdd.json", + "git_status": "A", + "classification": "evidence" + }, + { + "path": ".agent/specs/security-project-identity/evidence/SECURITY-PROJECT-IDENTITY-R3.verification.json", + "git_status": "A", + "classification": "evidence" + }, + { + "path": ".agent/specs/security-project-identity/evidence/project-identity-v2-vectors.json", + "git_status": "M", + "classification": "evidence" + }, + { + "path": "internal/db/gorm/project_identity_v2_test.go", + "git_status": "M", + "classification": "product" + }, + { + "path": "internal/db/gorm/project_store.go", + "git_status": "M", + "classification": "product" + }, + { + "path": "internal/grpcserver/project_identity_v2_test.go", + "git_status": "M", + "classification": "product" + }, + { + "path": "internal/proxy/identity.go", + "git_status": "M", + "classification": "product" + }, + { + "path": "internal/proxy/identity_test.go", + "git_status": "M", + "classification": "product" + }, + { + "path": "plugin/engram/hooks/lib.js", + "git_status": "M", + "classification": "product" + }, + { + "path": "plugin/engram/hooks/project-identity-v2.test.js", + "git_status": "M", + "classification": "product" + }, + { + "path": "plugin/openclaw-engram/src/identity.ts", + "git_status": "M", + "classification": "product" + }, + { + "path": "plugin/openclaw-engram/test/project-identity-v2.test.mjs", + "git_status": "M", + "classification": "product" + } + ], + "plan_owner": "SECURITY-PROJECT-IDENTITY", + "path_authority_eligible": true, + "release_accepted": false, + "lineage": { + "kind": "historical-rejected", + "checker_only_commit": "0d84047c280a873dd21baae2ecbf83ec422d497f", + "checker_verdict": "REVISE_HIGH_GOROUTINE_ONLY_PERMANENT_TEST" + } + }, + { + "slice": "DB-TEST-POOL-HYGIENE", + "status_class": "current-ready-for-check", + "branch": "work/prc-db-test-pool-hygiene-evidence-r2", + "base": "276337b3e96aa5af6d2e7dd9a0002ff957e5ffc9", + "head": "68242c48aaad62ec087166eeb9ea32f14d189450", + "path_count": 13, + "paths_sha256": "5b30cedca485ce89ce38bdb665413be59a3e2639e01e04c600172e68e503f3a0", + "paths": [ + { + "path": ".agent/reports/2026-07-10-db-test-pool-hygiene-evidence-revision-maker.md", + "git_status": "A", + "classification": "report" + }, + { + "path": ".agent/reports/2026-07-10-db-test-pool-hygiene-maker.md", + "git_status": "M", + "classification": "report" + }, + { + "path": ".agent/reports/evidence/production-ready/db-test-pool-hygiene/14-evidence-r2-focused.log", + "git_status": "A", + "classification": "evidence" + }, + { + "path": ".agent/reports/evidence/production-ready/db-test-pool-hygiene/15-evidence-r2-static.txt", + "git_status": "A", + "classification": "evidence" + }, + { + "path": ".agent/reports/evidence/production-ready/db-test-pool-hygiene/DB-TEST-POOL-HYGIENE.evidence-r2.json", + "git_status": "A", + "classification": "evidence" + }, + { + "path": ".agent/reports/evidence/production-ready/db-test-pool-hygiene/DB-TEST-POOL-HYGIENE.final.json", + "git_status": "M", + "classification": "evidence" + }, + { + "path": ".agent/reports/evidence/production-ready/db-test-pool-hygiene/INVENTORY.json", + "git_status": "A", + "classification": "evidence" + }, + { + "path": ".agent/reports/evidence/production-ready/db-test-pool-hygiene/MANIFEST.json", + "git_status": "M", + "classification": "evidence" + }, + { + "path": ".agent/reports/evidence/production-ready/db-test-pool-hygiene/SHA256SUMS.txt", + "git_status": "M", + "classification": "evidence" + }, + { + "path": ".agent/reports/evidence/production-ready/db-test-pool-hygiene/Test-DBPoolHygieneEvidenceAdversarial.ps1", + "git_status": "A", + "classification": "evidence" + }, + { + "path": ".agent/reports/evidence/production-ready/db-test-pool-hygiene/Verify-DBPoolHygieneEvidence.ps1", + "git_status": "A", + "classification": "evidence" + }, + { + "path": ".agent/reports/evidence/production-ready/db-test-pool-hygiene/adversarial-proof.json", + "git_status": "A", + "classification": "evidence" + }, + { + "path": ".agent/reports/evidence/production-ready/db-test-pool-hygiene/verifier-proof.json", + "git_status": "A", + "classification": "evidence" + } + ], + "plan_owner": "DB-TEST-POOL-HYGIENE", + "path_authority_eligible": true, + "release_accepted": false, + "lineage": { + "kind": "exact-live-register" + } + } + ] +} diff --git a/.agent/plans/2026-07-10-engram-production-ready-master-plan.md b/.agent/plans/2026-07-10-engram-production-ready-master-plan.md index ccda16a0..bba0c7aa 100644 --- a/.agent/plans/2026-07-10-engram-production-ready-master-plan.md +++ b/.agent/plans/2026-07-10-engram-production-ready-master-plan.md @@ -1,8 +1,8 @@ # Engram Production-Ready Master Plan -Status: PLAN_GOVERNANCE_R8_PENDING_INDEPENDENT_CHALLENGE +Status: PLAN_GOVERNANCE_R9_PENDING_INDEPENDENT_CHALLENGE Date: 2026-07-10 -Revision: 8 +Revision: 9 Goal contract: `.agent/goals/2026-07-10-engram-production-ready-marathon.md` Release baseline: `origin/main@dc891b2d72b1fd63b83e4a630a249241fc389151` (`v6.42.0`) `core_safe_point_version`: candidate `v6.43.0-rc.1`, publish target `v6.43.0` after release analysis confirms it @@ -39,6 +39,7 @@ Durable baseline evidence: - `.agent/worktrees/prc-db-bulkops/.agent/reviews/2026-07-10-db-bulkops-sibling-rework-check.md` (SHA256 `EB9EB227363A27EA058C6654BD7E38EED1088252F79F837E377B2A3CBC1FAFB7`, verdict `FAIL / REVISE_HOLD`) - `.agent/plans/2026-07-10-engram-production-ready-ownership-state.json` - `.agent/plans/2026-07-10-engram-production-ready-scope-map.json` (register freeze provenance `AB5F882FA110CA823A317061ECBCA0C62516702735325893A56206F9E7A29415`, 67/67 unique slices, `updated_at=2026-07-10T22:46:01.2938194+03:00`) +- `.agent/plans/2026-07-10-engram-production-ready-active-diff-contracts.json` (tracked, register-independent exact candidate path authority) - `.agent/reports/2026-07-10-image-remediation-prototype.md` - `.agent/experiments/GE-003/experiment.yaml` - `.agent/experiments/GE-003/journal.md` @@ -48,7 +49,9 @@ Durable baseline evidence: The JSON/Markdown evidence register is the sole authority for mutable progress. This revision also contains immutable source-lock facts, a tracked ownership-state contract, and a tracked scope map; none substitutes for the register. Root updates the JSON register first, renders the Markdown register and HTML from that exact state, and only then makes a dispatch/integration decision. Every row records criterion, slice, branch/base/head, exact command, environment identity, raw artifact, exit code, checker artifact, review artifact, integration SHA, timestamp, and notes. An empty field remains `UNKNOWN`; it is never inferred as green. -R8 scope authority is the structural projection frozen from register snapshot SHA256 `AB5F882FA110CA823A317061ECBCA0C62516702735325893A56206F9E7A29415`, `updated_at=2026-07-10T22:46:01.2938194+03:00`, with 67 criteria and 67 unique slice identities. The SHA and timestamp are immutable provenance, not a perpetual byte-equality gate. `.agent/plans/2026-07-10-engram-production-ready-scope-map.json` maps every frozen row to a literal maker/checker owner, a named fold, historical provenance, or root-only integration. Live conformance requires the exact unique slice set, classifications, owner/fold targets, required plan rows and ownership epochs, plus only the status/head policies explicitly marked `load_bearing`; ordinary progress/head advancement inside an unchanged lane and changes to timestamps, commands, artifacts, or notes do not invalidate plan authority. A new/deleted slice, changed classification/owner/fold, missing required predecessor, or a marked rejected head presented as accepted does. `CONTROL-PLANE` remains `RUNNING_GOAL_STATE_REACTIVATION_UNAVAILABLE` because the native goal service reports the user-resumed goal as blocked and refuses exact-objective recreation; execution continues under the verbatim objective without misreporting the tool state. `DB-EMBEDDING-EVIDENCE-TRANSPORT` is `R5_INTERIM_REVISE_REAL_METRICS_REQUIRED`: the interim staged-LF run passed 24/24 tests but measured only 66.65% aggregate line coverage after denominator expansion, so placeholder 80.0 values and stale mixed-worktree metrics are rejected. `SECURITY-PROJECT-IDENTITY` R2 remains unaccepted at `9e2ce4e58a5cded69660ca9ac532d2167f315bb2`: checker status `R2_CHECKER_REVISE_TWO_BLOCKERS_CONFIRMED` covers both the outer-selector classification gap and the concurrent `O_EXCL` final-file partial-read/EOF race. +R9 scope authority preserves the structural projection frozen from register snapshot SHA256 `AB5F882FA110CA823A317061ECBCA0C62516702735325893A56206F9E7A29415`, `updated_at=2026-07-10T22:46:01.2938194+03:00`, with 67 criteria and 67 unique slice identities. The SHA and timestamp are immutable R8 provenance, not a perpetual byte-equality gate. `.agent/plans/2026-07-10-engram-production-ready-scope-map.json` maps every frozen row to a literal maker/checker owner, a named fold, historical provenance, or root-only integration. Live conformance requires the exact unique slice set, classifications, owner/fold targets, required plan rows and ownership epochs, plus only the status/head policies explicitly marked `load_bearing`; ordinary progress/head advancement inside an unchanged lane and changes to timestamps, commands, artifacts, or notes do not invalidate plan authority. A new/deleted slice, changed classification/owner/fold, missing required predecessor, or a marked rejected head presented as accepted does. The tracked active-diff contract freezes exact sorted paths and SHA256 digests for current and rejected candidate classes so CI does not depend on the ignored mutable register or unfetched foreign commits; optional local Git replay must match those frozen paths byte-for-byte. `CONTROL-PLANE` remains `RUNNING_GOAL_STATE_REACTIVATION_UNAVAILABLE` because the native goal service reports the user-resumed goal as blocked and refuses exact-objective recreation; execution continues under the verbatim objective without misreporting the tool state. `DB-EMBEDDING-EVIDENCE-TRANSPORT` R5 at `a538f6224ef31f612152470a4ecd45e78ff9d0f2` is rejected; R6 starts exactly there and owns only the four prior bounded evidence families plus the literal R5 and R6 families. `SECURITY-PROJECT-IDENTITY` R3 product head `38344455754fe503acbd79d2134141f996adff7f` freezes the exact 14-path Go/proxy/Claude/OpenClaw/vector/evidence/report diff but is rejected by checker commit `0d84047c280a873dd21baae2ecbf83ec422d497f`; R4 starts from the product head, not the checker-only commit, and is bounded to `internal/proxy/identity_test.go` plus existing evidence/report namespaces. R2 at `9e2ce4e58a5cded69660ca9ac532d2167f315bb2` remains rejected history. + +R8 PLAN-GOVERNANCE commit `37d185b33b8f9411564fda49cf8b0d58321b62fd` and RELEASE-GATES commit `406fe952c143eb8aaf5895427c568a41d4cec225` are immutable rejected predecessors. Their structural 67/67 scope, AB5F provenance, 36 epochs, same-lane progress policy, rejected-head policy, wrong-package zero-acceptance repair, and prior mutations remain mandatory. R9 closes the rejected failure class by auditing every resolvable live-register base/head, freezing exact candidate paths, and separating current authority from historical/rejected and conflicting candidates. A path-authority correction does not turn a rejected candidate into acceptance. R7 PLAN-GOVERNANCE commit `a99ce0dfe4d415f90c0f192cbf96bd88710a48f5` and diagnostic RELEASE-GATES commit `144eeefa003c3e1c0009c4264f41236ee3453b65` are rejected/diagnostic predecessors only. R7's wrong-package repair is carried forward in the second R8 commit, but no R7 plan hash, live verdict, or acceptance status is current authority. The R7 checker verdict is `REVISE` at `d8ba52d29f1c7f2169e3f76576248ab32d3b6646` because deleting a required plan row and its epoch could still pass the internally consistent Ledger. The following revision-4 paragraph is historical chronology only; every dispatch and acceptance decision uses the R8 authority above. @@ -103,26 +106,26 @@ Durable local layout: `.agent/worktrees//` (already ignored through `.git | Slice | Branch | Exclusive maker paths | Dependencies | Required proof | | --- | --- | --- | --- | --- | -| PLAN-GOVERNANCE | `work/prc-release-gates-revision8-maker` | `.agent/plans/2026-07-10-engram-production-ready-master-plan.md`, `.agent/plans/2026-07-10-engram-production-ready-ownership-state.json`, new `.agent/plans/2026-07-10-engram-production-ready-scope-map.json`, `.agent/specs/release-gates-r8/evidence/plan-governance/**`, `.agent/reports/2026-07-10-release-gates-r8-plan-governance.md` | exact reconstruction base `d59d1605969b1f567506e96ded524dfd1e4be08a`; rejected R7 plan `a99ce0dfe4d415f90c0f192cbf96bd88710a48f5`; checker `d8ba52d29f1c7f2169e3f76576248ab32d3b6646`; first R8 commit and direct predecessor of RELEASE-GATES-R8 | preserve every PR-0..PR-8 and M0..M7 obligation plus all eight explicit predecessor rows; bind all 67 unique register slices to the structural projection frozen at SHA256 `AB5F882FA110CA823A317061ECBCA0C62516702735325893A56206F9E7A29415`; classify literal maker/checker, four current meta folds, one historical prototype, and root-only control/integration; preserve current DB and SECURITY-PROJECT-IDENTITY blocker lineage; canonical UTF-8/LF plan hash, state hash, scope-map parity, Ledger, deletion/rejected-head/fold/register mutations, exact Diff, checker and root post-review must pass | +| PLAN-GOVERNANCE | `work/prc-release-gates-revision9-maker` | `.agent/plans/2026-07-10-engram-production-ready-master-plan.md`, `.agent/plans/2026-07-10-engram-production-ready-ownership-state.json`, `.agent/plans/2026-07-10-engram-production-ready-scope-map.json`, new `.agent/plans/2026-07-10-engram-production-ready-active-diff-contracts.json`, `.agent/specs/release-gates-r9/evidence/plan-governance/**`, `.agent/reports/2026-07-11-release-gates-r9-plan-governance.md` | exact rejected R8 head/base `406fe952c143eb8aaf5895427c568a41d4cec225`; immutable R8 plan `37d185b33b8f9411564fda49cf8b0d58321b62fd`; first R9 commit and direct predecessor of RELEASE-GATES-R9 | preserve every PR-0..PR-8 and M0..M7 obligation plus all predecessor rows; audit every resolvable live-register diff and freeze exact sorted candidate paths/status classes without relying on the mutable register or foreign objects; bind all 67 unique register slices to the structural projection frozen at SHA256 `AB5F882FA110CA823A317061ECBCA0C62516702735325893A56206F9E7A29415`; classify literal maker/checker, four current meta folds, one historical prototype, and root-only control/integration; preserve current/rejected DB lineage; bind SECURITY-PROJECT-IDENTITY R3's exact 14-path cross-consumer diff and DB evidence R5/R6 namespaces; canonical UTF-8/LF plan hash, state hash, scope-map parity, Ledger, deletion/rejected-head/fold/register mutations, exact Diff, checker and root post-review must pass | | DB-BULKOPS | `work/prc-db-bulkops` | `internal/bulkops/facade.go`, `internal/bulkops/facade_test.go`, `internal/bulkops/rollback.go`, `internal/bulkops/rollback_test.go`, `internal/db/gorm/candidate_store.go`, `internal/db/gorm/candidate_store_test.go`, `internal/mcp/tools_bulkops.go`, `internal/mcp/tools_dryrun_test.go`, `pkg/models/snapshot.go`, legacy exact report `.agent/reports/2026-07-10-db-bulkops-capture-lock-rework-maker.md`, legacy exact report `.agent/reports/2026-07-10-db-bulkops-sibling-rework-maker.md`, legacy evidence prefix `.agent/specs/production-ready-db-bulkops/evidence/**`, legacy evidence prefix `.agent/reports/evidence/production-ready/db-bulkops-sibling-rework/**` | historical base `2b085de663d5ba9dfa97adf9ee58de062ee0997c`, rejected head `68b2ce5835c7c6efdf1c68da9eedcb8d9c3837ef`; no integration SHA; superseded as current writer on the four behavioral-edge paths | checker artifact `.agent/worktrees/prc-db-bulkops/.agent/reviews/2026-07-10-db-bulkops-sibling-rework-check.md`, verdict `FAIL / REVISE_HOLD`, SHA256 `EB9EB227363A27EA058C6654BD7E38EED1088252F79F837E377B2A3CBC1FAFB7`; exact Diff must report zero undeclared paths but fail epoch authority for paths now owned by DB-BULKOPS-BEHAVIORAL-EDGE-REWORK; preserve all lock-consistent capture/rollback evidence; never integrate this head alone | -| DB-BULKOPS-BEHAVIORAL-EDGE-REWORK | `work/prc-db-bulkops` | `internal/db/gorm/candidate_store.go`, `internal/db/gorm/candidate_store_test.go`, `internal/mcp/tools_bulkops.go`, `internal/mcp/tools_dryrun_test.go`, `.agent/reports/2026-07-10-db-bulkops-behavioral-edge-rework-maker-3.md`, `.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/**` | rejected historical target `68b2ce5835c7c6efdf1c68da9eedcb8d9c3837ef`; accepted/reviewed product successor base `cd098397764e13388aef3b4da9448172c7092fdb`, head `bd68c05baf4b7250096dd84f56bebea2aa555970`; checker/post-review are `PASS_WITH_CONCERNS`; integration SHA remains unset | both behavioral defect classes are closed across promote/preserve/reject/suppress/supersede with canonical preflight plus transaction-bound snapshot validation, exact integer decoding, wrong-type/TOCTOU rejection, audit-fault rollback, and ordinary non-snapshot exclusion; do not present rejected `68b2ce58` as current acceptance; the remaining test-pool concern transfers `candidate_store_test.go` to DB-TEST-POOL-HYGIENE and remains release-blocking until its fresh checker passes | +| DB-BULKOPS-BEHAVIORAL-EDGE-REWORK | `work/prc-db-bulkops` | `internal/db/gorm/candidate_store.go`, `internal/db/gorm/candidate_store_test.go`, `internal/mcp/tools_bulkops.go`, `internal/mcp/tools_dryrun_test.go`, `.agent/reports/2026-07-10-db-bulkops-behavioral-edge-rework-maker.md`, legacy exact report `.agent/reports/2026-07-10-db-bulkops-behavioral-edge-rework-maker-3.md`, `.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/**` | rejected historical target and exact authoritative candidate base `68b2ce5835c7c6efdf1c68da9eedcb8d9c3837ef`; accepted/reviewed product successor head `bd68c05baf4b7250096dd84f56bebea2aa555970`; live register's partial `cd098397764e13388aef3b4da9448172c7092fdb..bd68c05baf4b7250096dd84f56bebea2aa555970` view is not full candidate authority; checker/post-review are `PASS_WITH_CONCERNS`; integration SHA remains unset | both behavioral defect classes are closed across promote/preserve/reject/suppress/supersede with canonical preflight plus transaction-bound snapshot validation, exact integer decoding, wrong-type/TOCTOU rejection, audit-fault rollback, and ordinary non-snapshot exclusion; do not present rejected `68b2ce58` as current acceptance; the remaining test-pool concern transfers `candidate_store_test.go` to DB-TEST-POOL-HYGIENE and remains release-blocking until its fresh checker passes | | DB-TEST-POOL-HYGIENE | `work/prc-db-test-pool-hygiene-evidence-r2` | `internal/db/gorm/candidate_store_test.go`, `.agent/reports/2026-07-10-db-test-pool-hygiene-maker.md`, `.agent/reports/2026-07-10-db-test-pool-hygiene-evidence-revision-maker.md`, `.agent/reports/evidence/production-ready/db-test-pool-hygiene/**` | accepted behavioral-edge product head `bd68c05baf4b7250096dd84f56bebea2aa555970`; product successor `276337b3e96aa5af6d2e7dd9a0002ff957e5ffc9`; evidence-only successor `68242c48aaad62ec087166eeb9ea32f14d189450`; live status `READY_FOR_CHECK` | close every `openCandidateTestDB` pool at owner cleanup without changing production behavior; preserve exact 83 call sites across 8 files and Git-blob/LF representation; evidence-only revision must remain product-delta-free and reject stale manifest, CRLF, wrong representation, false 76/6 inventory, and missing artifact mutations; fresh checker plus root post-review precede integration or transfer to DB-GOVERNANCE | | DB-GOVERNANCE | `work/prc-db-governance` | `internal/db/gorm/candidate_store.go`, `internal/db/gorm/candidate_store_test.go`, `internal/db/gorm/rule_arbiter_store_test.go`, `internal/db/gorm/rule_governance_store.go`, `internal/db/gorm/rule_governance_store_test.go`, `internal/db/gorm/rule_governance_rg3_store_test.go`, `internal/db/gorm/migration_rule_governance.go`, `internal/db/gorm/migration_rule_arbiter.go`, `internal/db/gorm/migration_rule_governance_snapshot_statuses.go` | accepted DB-BULKOPS-BEHAVIORAL-EDGE-REWORK composite integrated; exact integration SHA recorded; worktree rebased to that SHA; predecessor path evidence complete | fresh per-test DB/schema isolation; migration 144 apply/rollback/reapply/constraint proof; project/global aggregate boundaries; no closed-DB reuse or order dependence; checker/post-review precede the exact ownership transfer to CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK | | CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK | `work/prc-candidate-review-snapshot-rollback` | `internal/reviewpacket/candidate.go`, `internal/reviewpacket/candidate_test.go`, `internal/db/gorm/candidate_store.go`, `internal/db/gorm/candidate_store_test.go`, `internal/db/gorm/snapshot_store.go`, `internal/db/gorm/snapshot_store_test.go`, `internal/bulkops/rollback_test.go`, new `tests/critical/candidate_review/candidate_review_snapshot_rollback_test.go` | accepted DB-BULKOPS-BEHAVIORAL-EDGE-REWORK composite plus accepted DB-GOVERNANCE integrated; exact predecessor SHAs recorded; worktree rebased to the latest integration SHA; final writer in the candidate-store epoch | predecessor candidate-review snapshots must already reject wrong types and carry durable audit; inside the same candidate transition transaction, persist locked `Before`, committed `After`, snapshot row, candidate mutation, promoted-memory amendment where applicable, and `candidate_review` audit; any failure rolls back all writes; cover promote, preserve, reject, suppress, and supersede; permanent immediate rollback and later-state conflict regressions; independent checker and post-review PASS before integration | | INGEST-DOC-CLASSIFICATION | checker-only | read-only `.agent/reports/2026-07-10-openclaw-ingest-classification.md` | complete at SHA256 `A095E9D7B69DC95CAC4022EB97D2EA9B403D5132F5602FDD85E7D3A93092F5D4` | `SnapshotOpIngestDoc` / `executeIngestDoc` is `CLASSIFIED_pre-demolition-stale` in the taxonomy's stale/unwired bucket, historically introduced post-demolition; it blocks plan/audit closure and is never a live, dormant, or must-build scaffold | | INGEST-DOC-SNAPSHOT-DEMOLITION | `work/prc-ingest-doc-snapshot-demolition` | `internal/bulkops/facade.go`, `internal/bulkops/facade_test.go`, `pkg/models/snapshot.go`, `pkg/models/snapshot_test.go`, new `internal/mcp/ingest_snapshot_contract_test.go` | accepted DB-BULKOPS-BEHAVIORAL-EDGE-REWORK integrated; worktree rebased to its exact integration SHA; runs before DURABLE-AUDIT-BOUNDARIES takes the facade epoch | classify `ingest_doc` as a persisted historical-only discriminator, remove `executeIngestDoc`, reject both dry-run and committed Facade execution without snapshot/audit/business mutation, retain migration/governance read compatibility, add an executable-op predicate that includes only promote/delete/supersede, prove the live MCP ingest path still stores chunks directly and creates no bulk-op snapshot, and forbid counting or wiring the historical type as durable-audit evidence; exact regressions `TestSnapshotOpIngestDoc_PersistedButNotExecutable`, `TestFacade_Execute_IngestDocHistoricalOnly_NoSnapshot`, and `TestIngestDocument_StoresChunksWithoutBulkOpSnapshot`; independent checker PASS and post-run review PASS under `.agent/reports/evidence/production-ready/ingest-doc-snapshot-demolition/**` | -| DB-AUTH | `work/prc-db-auth` | `internal/db/gorm/user_store.go`, `internal/db/gorm/user_store_test.go`, `internal/worker/auth_handlers.go`, `internal/worker/auth_handlers_lifecycle_test.go` | RELEASE-GATES foundation before mergeable checker verdict; first writer in the auth handler/store transfer chain | atomic cross-process first-admin database invariant: one committed active admin, typed conflict for the loser, concurrent last-active-admin invariant, disabled-admin edge, row-lock semantics, fresh DB identity and no global-row contamination; this lane does not by itself authorize a public setup winner and cannot integrate past M1 until AUTH-BOOTSTRAP-SECURITY and DURABLE-AUDIT-BOUNDARIES pass | +| DB-AUTH | `work/prc-db-auth` | `internal/db/gorm/user_store.go`, `internal/db/gorm/user_store_test.go`, `internal/worker/auth_handlers.go`, `internal/worker/auth_handlers_lifecycle_test.go`, `.agent/reports/db-auth-rework-maker-2026-07-10.md` | RELEASE-GATES foundation before mergeable checker verdict; first writer in the auth handler/store transfer chain | atomic cross-process first-admin database invariant: one committed active admin, typed conflict for the loser, concurrent last-active-admin invariant, disabled-admin edge, row-lock semantics, fresh DB identity and no global-row contamination; this lane does not by itself authorize a public setup winner and cannot integrate past M1 until AUTH-BOOTSTRAP-SECURITY and DURABLE-AUDIT-BOUNDARIES pass | | AUTH-BOOTSTRAP-SECURITY | `work/prc-auth-bootstrap-security` | `internal/config/config.go`, `internal/config/config_test.go`, `internal/config/envnames.go`, `internal/db/gorm/user_store.go`, `internal/worker/middleware.go`, `internal/worker/middleware_test.go`, `internal/worker/auth_handlers.go`, new `internal/worker/auth_bootstrap_limiter.go`, new `internal/worker/auth_bootstrap_limiter_test.go`, new `internal/worker/auth_bootstrap_security_test.go`, `internal/worker/service.go`, new `tests/critical/auth_bootstrap/first_admin_bootstrap_test.go`, new `scripts/production-smoke/customer/run-auth-bootstrap-adversary.ps1` | accepted DB-AUTH integrated; worktree rebased to that exact integration SHA; owns `service.go` before V7-RUNTIME-WIRING; deployment/UI subproofs are owned by DEPLOYMENT-ROLLBACK and OC-INTEGRATION | zero-user setup requires a non-empty one-time out-of-band operator capability; missing/invalid/replayed/revoked capability fails before bcrypt, session creation, or mutation; capability consumption and first-admin creation are cross-process/restart safe; setup-specific per-source plus global bounded abuse control; two-server attacker-vs-operator, replay, restart, remote-network, and secret-free log/HTTP/OTLP negatives; exact command `pwsh ./scripts/production-smoke/customer/run-auth-bootstrap-adversary.ps1 -Processes 2 -Repeat 10 -ArtifactRoot .agent/reports/evidence/production-ready/auth-bootstrap` plus fresh-DB race/critical/browser proof | | DURABLE-AUDIT-BOUNDARIES | `work/prc-durable-audit-boundaries` | `internal/db/gorm/domain_owner_store.go`, `internal/db/gorm/domain_owner_store_test.go`, `internal/db/gorm/user_store.go`, `internal/worker/auth_handlers.go`, new `internal/worker/auth_audit_durability_test.go`, `internal/bulkops/facade.go`, new `internal/bulkops/audit_durability_test.go`, new `scripts/production-smoke/customer/run-durable-audit-faults.ps1` | accepted INGEST-DOC-SNAPSHOT-DEMOLITION, CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK, and AUTH-BOOTSTRAP-SECURITY integrated; exact SHAs recorded; worktree rebased to the latest composite | auth setup and every retained bulk success path commit business mutation with its audit row in one transaction or a durable outbox; fault/retry/readback covers auth setup plus bulk promote/delete/supersede with no falsely complete unaudited response. The retained executable bulk-op set is exactly `bulk_promote`, `bulk_delete`, and `bulk_supersede`; `SnapshotOpIngestDoc` is a persisted historical-only discriminator, is non-executable after INGEST-DOC-SNAPSHOT-DEMOLITION, is excluded from this matrix, and may not be wired or cited as audit evidence. The separate live MCP `ingest` path is not covered by the bulk facade and requires its own explicit audit contract if whole-product mutation auditing is required. | | DB-CRYSTALLIZATION | `work/prc-db-crystallization` | `internal/worker/handlers_hooks_crystallization_integration_test.go` | RELEASE-GATES foundation before mergeable checker verdict | session-end stores redacted transcript without direct decision-memory creation; flag-off/empty safety; concurrent delivery; this test-only lane does not authorize dream-cycle production edits and must hand the live defects to CRYSTALLIZATION-DREAM-CYCLE-CORRECTNESS | | CRYSTALLIZATION-DREAM-CYCLE-CORRECTNESS | `work/prc-crystallization-dream-cycle-correctness` | `internal/worker/dream_cycle.go`, `internal/worker/dream_cycle_test.go`, new `.agent/reports/2026-07-10-crystallization-dream-cycle-correctness-maker.md`, new `.agent/e/cdc/**` | revision-4 RELEASE-GATES accepted and integrated; accepted DB-CRYSTALLIZATION test-only candidate checker/post-review integrated; worktree rebased to the latest exact integration SHA; first/current owner for both source/test paths | fail closed across the full `CRYSTALLIZATION` / `VNEXT_F` / LLM availability-result matrix: no read/extract/route/mark/watermark when crystallization is off; no mark or watermark when candidate persistence is unavailable, the F flag is off, LLM is disabled, extraction fails, routing returns nil, or any route errors; group transcript work by exact `(project, session_id)` so no digest or candidate crosses project/session provenance; mark only a batch whose every extracted decision reached a durable created-or-duplicate result; preserve unprocessed rows across restart/retry and prove exactly-once candidate persistence by fingerprint; use fresh migrated PostgreSQL per run, focused repeat at least 20, package repeat at least 3, race at least 3, process restart, zero residual sessions/databases, independent checker PASS, and post-review PASS; do not restore direct session-end regex extraction, direct memory creation, or any v5-demolished graph/rerank/scoring path; any proved need to change `internal/db/gorm/transcript_store.go` or its test stops for a root plan/state amendment before edit | -| DB-EMBEDDING-STATS | `work/prc-db-embedding-stats` | `internal/embedding/store.go`, `internal/embedding/store_stats_test.go` | RELEASE-GATES full diagnostic plus live call-path classification; immutable accepted product source `38d6a4fb7ff5f5ae3b6c0066c0a1b806421137df` remains separate from every evidence-transport revision | empty `content_chunks` and zero active memories return zero-valued stats with `LastChunkAt=nil`, never a NULL-to-`time.Time` scan error; populated/model/dimension/coverage behavior unchanged; focused repeat >=20, package/race/vet, fresh schema and zero sessions; no evidence-only commit may alter or rebind the accepted product source | -| DB-EMBEDDING-EVIDENCE-TRANSPORT | `work/prc-db-embedding-evidence-transport-r5` | `.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/**`, `.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/**`, `.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4/**`, `.agent/specs/db-embedding-stats-evidence-transport/evidence/**` only | immutable product source `38d6a4fb7ff5f5ae3b6c0066c0a1b806421137df`; current evidence target `369951b61ee07cb0c405558e0f677cd1c9e90362`; live status `R5_INTERIM_REVISE_REAL_METRICS_REQUIRED`; no product edits or integration are authorized | preserve manifest/path/null-access/Prove-It rails, but reject placeholder `80.0/0.0/0.0` and stale mixed-worktree metrics; staged LF execution passed 24/24 while actual aggregate coverage was 66.65% line / 59.64% branch / 88.17% functions after the in-band denominator expansion; R5 must simplify or revert that expansion, bind two real raw transcripts, prove fresh LF/CRLF materialization, and receive a fresh checker plus root post-review before the evidence transport is accepted | -| DB-REAPER | `work/prc-db-reaper` | `internal/worker/reaper/reaper.go`, `internal/worker/reaper/reaper_test.go` | RELEASE-GATES foundation before mergeable checker verdict | package/race/repeat proof; environment isolation; configured/default/invalid retention; unexpired preservation; expired purge; cancellation and idempotency | +| DB-EMBEDDING-STATS | `work/prc-db-embedding-stats` | `internal/embedding/store.go`, `internal/embedding/store_stats_test.go`, `.agent/reports/2026-07-10-db-embedding-stats-maker.md`, `.agent/reports/evidence/production-ready/db-embedding-stats/**`, `.agent/specs/db-embedding-stats/evidence/**` | RELEASE-GATES full diagnostic plus live call-path classification; immutable accepted product source `38d6a4fb7ff5f5ae3b6c0066c0a1b806421137df` remains separate from every evidence-transport revision | empty `content_chunks` and zero active memories return zero-valued stats with `LastChunkAt=nil`, never a NULL-to-`time.Time` scan error; populated/model/dimension/coverage behavior unchanged; focused repeat >=20, package/race/vet, fresh schema and zero sessions; no evidence-only commit may alter or rebind the accepted product source | +| DB-EMBEDDING-EVIDENCE-TRANSPORT | `work/prc-db-embedding-evidence-transport-r6` | `.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/**`, `.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/**`, `.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4/**`, `.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/**`, `.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/**`, `.agent/specs/db-embedding-stats-evidence-transport/evidence/**` only | immutable product source `38d6a4fb7ff5f5ae3b6c0066c0a1b806421137df`; rejected R5 base `369951b61ee07cb0c405558e0f677cd1c9e90362`, head `a538f6224ef31f612152470a4ecd45e78ff9d0f2`; R6 starts exactly at `a538f6224ef31f612152470a4ecd45e78ff9d0f2`; live status `R6_MAKER_ACTIVE_ON_EXACT_R5_BASE`; no product edits or integration are authorized | preserve manifest/path/null-access/Prove-It rails, but reject placeholder `80.0/0.0/0.0` and stale mixed-worktree metrics; staged LF execution passed 24/24 while actual aggregate coverage was 66.65% line / 59.64% branch / 88.17% functions after the in-band denominator expansion; R5 remains rejected for synthesized exit status, autocrlf 23/24 representation failure, and stale 9/15 Prove-It; R6 must close those exact classes inside the bounded R6 evidence family and receive a fresh checker plus root post-review before acceptance | +| DB-REAPER | `work/prc-db-reaper-shutdown-r4` | `internal/worker/reaper/reaper.go`, `internal/worker/reaper/reaper_test.go` | register candidate `0d5cfa5c67ddbc331d7e812f98679742541b32ca` is not path-authoritative: actual diff changes `internal/worker/service.go` and `internal/worker/service_reaper_lifecycle_test.go`, while `service.go` is currently owned by AUTH-BOOTSTRAP-SECURITY; a fresh candidate requires an explicit epoch-safe plan amendment | package/race/repeat proof; environment isolation; configured/default/invalid retention; unexpired preservation; expired purge; cancellation and idempotency | | SECURITY-TOOLCHAIN | `work/prc-security-toolchain` | `go.mod`, `go.sum`, `Dockerfile` | preservation recorded + clean `origin/main` worktree; first writer in the `Dockerfile` transfer chain | build, vet, full unit/DB tests, zero reachable Go vulnerability release blocker, builder/runtime version proof; its server candidate currently leaves three unfixed Perl image findings and is not final image acceptance; checker/post-review precede transfer of `Dockerfile` to IMAGE-REMEDIATION | -| RELEASE-GATES | `work/prc-release-gates-revision8-maker` | `.github/workflows/test.yml`, `scripts/production-gates/assert-plan-path-ownership.ps1`, `scripts/production-gates/run-db-suite.ps1`, `.agent/specs/release-gates-r8/evidence/release-gates/**`, `.agent/reports/2026-07-10-release-gates-r8-maker.md` | exact PLAN-GOVERNANCE-R8 commit is the direct parent; R7 diagnostic `144eeefa003c3e1c0009c4264f41236ee3453b65` is a source-only predecessor and never acceptance authority; first writer in `.github/workflows/test.yml` before IMAGE-REMEDIATION | carry forward the wrong-package zero-acceptance repair and exact live package-plus-test workflow predicate; bind the exact canonical plan SHA, ownership state, scope map, and register freeze provenance; fail closed when a required plan row and epoch disappear together, any live slice is unmapped, a fold/root/historical owner is missing or misclassified, a marked rejected head is presented as accepted, or the live unique slice set changes; allow timestamps, notes, commands, artifacts, and ordinary same-lane status/head progress to drift; preserve all R7 LF/CRLF, semantic/state/epoch, actual-Diff, combined-Diff and undeclared `.agent/**` rails; rerun actionlint, AST/vet/build/diff/gitleaks/critical and later exact DB/dev-stand gates without amending the immutable target; immutable floors remain 60/70 plus 10/10/20/55/55/55 | +| RELEASE-GATES | `work/prc-release-gates-revision9-maker` | `.github/workflows/test.yml`, `scripts/production-gates/assert-plan-path-ownership.ps1`, new `scripts/production-gates/assert-active-candidate-path-authority.ps1`, `scripts/production-gates/run-db-suite.ps1`, `.agent/specs/release-gates-r9/evidence/release-gates/**`, `.agent/reports/2026-07-11-release-gates-r9-maker.md` | exact PLAN-GOVERNANCE-R9 commit is the direct parent; rejected R8 head `406fe952c143eb8aaf5895427c568a41d4cec225` and R7 diagnostic `144eeefa003c3e1c0009c4264f41236ee3453b65` is a source-only predecessor and never acceptance authority; first writer in `.github/workflows/test.yml` before IMAGE-REMEDIATION | carry forward the wrong-package zero-acceptance repair and exact live package-plus-test workflow predicate; bind the exact canonical R9 plan SHA, ownership state, scope map, active-diff contract SHA, and AB5F register freeze provenance; execute self-contained frozen-candidate authority in CI and optional exact Git replay locally; fail closed when a required plan row and epoch disappear together, any live slice is unmapped, a fold/root/historical owner is missing or misclassified, a marked rejected head is presented as accepted, or the live unique slice set changes; allow timestamps, notes, commands, artifacts, and ordinary same-lane status/head progress to drift; preserve all R7 LF/CRLF, semantic/state/epoch, actual-Diff, combined-Diff and undeclared `.agent/**` rails; rerun actionlint, AST/vet/build/diff/gitleaks/critical and later exact DB/dev-stand gates without amending the immutable target; immutable floors remain 60/70 plus 10/10/20/55/55/55 | | IMAGE-REMEDIATION | `work/prc-image-remediation` | `Dockerfile`, new `cmd/engram-healthcheck/main.go`, new `cmd/engram-healthcheck/main_test.go`, `apps/operator-console/package.json`, `apps/operator-console/package-lock.json`, new `deploy/postgres/Dockerfile`, `docker-compose.yml`, `deploy/docker-compose.runtime.yml`, `docs/DEPLOYMENT.md`, `docs/PRODUCTION-TESTING-PLAYBOOK.md`, `.github/workflows/test.yml`, `.github/workflows/docker.yaml`, `.github/workflows/docker-publish.yml`, new `scripts/production-gates/build-and-scan-images.ps1`, new `tests/critical/runtime/image_runtime_contract_test.go`, new `tests/critical/runtime/postgres_image_contract_test.go` | accepted RELEASE-GATES and SECURITY-TOOLCHAIN integrated; worktree rebased to both exact SHAs; first writer before DEPLOYMENT-ROLLBACK, OC-INTEGRATION, and CORE-PUBLIC-TRUTH take their compose/operator/docs epochs | preserve exact parent scan RED `operator=5`, `postgres=38`, `server=13`; build one tiny `CGO_ENABLED=0` `engram-healthcheck` binary and copy it into both shell-free runtime stages with JSON-form `HEALTHCHECK`; both container healthchecks call their direct or proxied `/api/ready`, parse JSON, and exit zero only on exact `status=ready`; server `/health` remains the intentional liveness surface and is tested separately, never used as Docker readiness; server uses pinned multi-arch `gcr.io/distroless/base-debian13@sha256:b78832f41c8128046807c24840ebee4f1c18ba7870eed423d8750c272c15e147` and proves the CGO server's `ldd` dependencies are present at runtime, UID `65532`, non-writable/read-only rootfs operation, liveness `/health` plus dependency-aware `/api/ready`, `HOME=/var/lib/engram`, and a persistent writable named or bind volume at `/var/lib/engram` provisioned as UID/GID `65532:65532` mode `0700` while every other rootfs path remains read-only; current `internal/config.DataDir()` derives `$HOME/.engram`, so `ENGRAM_DATA_DIR` is explicitly forbidden from docs/tests unless a separately owned config change first makes it live; operator uses pinned multi-arch `gcr.io/distroless/nodejs22-debian13@sha256:773a62fbe24a3f8c8b24b16fd59154627f8b406737bc906f83bf1732bc8907dd`, image node entrypoint plus `CMD [".output/server/index.mjs"]`, UID `65532`, nonroot ownership, a locked graph without picomatch/sigstore findings, and exact runtime `NUXT_OPERATOR_API_TARGET=http://server:37777` matching `apps/operator-console/nuxt.config.ts`; rewrite `deploy/docker-compose.runtime.yml` from stale `operator-web`/`NUXT_ENGRAM_API_TARGET` to canonical `operator-console`/`ghcr.io/thebtf/engram-operator-console`/`NUXT_OPERATOR_API_TARGET`, while DEPLOYMENT-ROLLBACK removes the stale standalone deployment consumer after its zero-consumer proof; add permanent `TestOperatorConsoleRuntimeTargetContract` so root HTTP 200 is insufficient and proxied `/api/health` plus `/api/ready` must reach the exact backend and return semantic ready; PostgreSQL source lock is proven Wolfi prototype `engram-prc-pg17-wolfi:prototype` image ID `sha256:6f1fcade7d5e873aa7624f821e593b4bb21e8f4c69c8f3d2de9f76134c175bbc`, packages `postgresql-17=17.10-r1` and `pgvector-17=0.8.1-r0`, zero findings at every severity, and vector/restart persistence; `deploy/postgres/Dockerfile` pins the Wolfi base digest and packages, sets `ENV LANG=C.UTF-8 LC_ALL=C.UTF-8` because `LANG=en_US.UTF-8` deterministically fails `initdb`, and excludes cache/build residue; exact helper command remains `pwsh ./scripts/production-gates/build-and-scan-images.ps1 -ServerTag engram:prc-server -OperatorTag engram:prc-operator-console -PostgresTag engram:prc-postgres -Platform linux/amd64 -ArtifactRoot .agent/reports/evidence/production-ready/image-remediation -NoAllowlist`; it builds all tags, captures Dockerfile/base/package/image IDs, scans each exact image ID, starts the canonical three-image compose stand, proves all health/readiness/version/vector/migration/restart/container-recreation/retained-marker contracts, injects absent/unowned/unwritable `HOME` storage, first-boot/restart permission, stale/missing/wrong operator API target, unreachable-backend, and malformed/error-body/HTTP-200 `/api/ready` failures, proves Docker health never becomes healthy in every negative case, always tears down probe containers/networks/volumes, verifies zero residue, and writes `final-image-set.json`; docs must name only the accepted PostgreSQL image and canonical operator-console release stack; acceptance requires zero HIGH/CRITICAL and no scanner exception/allowlist; checker rebuilds without local cache and repeats scan/runtime/failure-cleanup proof before post-review | -| SECURITY-PROJECT-IDENTITY | `work/prc-security-project-identity-r3` | `internal/db/gorm/project_store.go`, `internal/db/gorm/project_store_test.go`, `internal/grpcserver/project_identity_v2_test.go` only | convergent GE-003 contract; R2 base `d22ebb9fe1914f514eaf9250e092dcd3b396f9cc`, head `9e2ce4e58a5cded69660ca9ac532d2167f315bb2`, live status `R2_CHECKER_REVISE_TWO_BLOCKERS_CONFIRMED`; R2 is not accepted and R3 must start from that exact head | close both confirmed checker defects: direct store and default gRPC reject `"a b"` and `"../x"` as `PROJECT_IDENTITY_INVALID` before DB/handler access, while colon/backslash outer selectors and legacy-alias internal whitespace retain required compatibility; concurrent same-anchor creation must not expose an `O_EXCL` winner's partially written final file or transient EOF to a loser, and must converge on complete durable bytes; preserve all other R2 C1-C5 claims as unaccepted hypotheses until checker replay; focused RED/GREEN/Prove-It, race/concurrency proof, full PG17/client parity, fresh checker and root post-review are mandatory before SECURITY-PROJECT-IDENTITY may unblock OPENCLAW-RELEASE | +| SECURITY-PROJECT-IDENTITY | `work/prc-security-project-identity-r4` | `internal/db/gorm/project_store.go`, `internal/db/gorm/project_identity_v2_test.go`, `internal/grpcserver/project_identity_v2_test.go`, `internal/proxy/identity.go`, `internal/proxy/identity_test.go`, new `internal/proxy/identity_process_test.go`, `plugin/engram/hooks/lib.js`, `plugin/engram/hooks/project-identity-v2.test.js`, `plugin/openclaw-engram/src/identity.ts`, `plugin/openclaw-engram/test/project-identity-v2.test.mjs`, `.agent/specs/security-project-identity/evidence/**`, `.agent/reports/evidence/production-ready/security-project-identity/**` | convergent GE-003 contract; R2 rejected head and exact R3 base `9e2ce4e58a5cded69660ca9ac532d2167f315bb2`; R3 product head `38344455754fe503acbd79d2134141f996adff7f` is rejected by checker commit `0d84047c280a873dd21baae2ecbf83ec422d497f` (`REVISE/HIGH`) because its permanent Go test is goroutine-only; R4 starts exactly at the R3 product head, never at the checker-only commit; live status `R4_MAKER_ACTIVE_ON_EXACT_R3_PRODUCT_HEAD`; no integration is authorized before fresh checker and root post-review | close both confirmed checker defects: direct store and default gRPC reject `"a b"` and `"../x"` as `PROJECT_IDENTITY_INVALID` before DB/handler access, while colon/backslash outer selectors and legacy-alias internal whitespace retain required compatibility; concurrent same-anchor creation must not expose an `O_EXCL` winner's partially written final file or transient EOF to a loser, and must converge on complete durable bytes; preserve all other R2 C1-C5 claims as unaccepted hypotheses until checker replay; R4 must add a permanent OS child-process contention proof while retaining the useful intra-process goroutine coverage while changing only `internal/proxy/identity_test.go` and/or new `internal/proxy/identity_process_test.go` plus the existing bounded evidence/report namespaces; temporary RED/Prove-It edits to `internal/proxy/identity.go` must be restored before commit; focused RED/GREEN/Prove-It, race/concurrency proof, full PG17/client parity, fresh checker and root post-review are mandatory before SECURITY-PROJECT-IDENTITY may unblock OPENCLAW-RELEASE | | OPENCLAW-RELEASE | `work/prc-openclaw-release` | `plugin/openclaw-engram/.gitignore`, `plugin/openclaw-engram/package.json`, new `plugin/openclaw-engram/package-lock.json`, `plugin/openclaw-engram/openclaw.plugin.json`, `plugin/openclaw-engram/README.md`, `.github/workflows/plugin-publish.yml`, `docs/RELEASE-PROTOCOL.md` | accepted SECURITY-PROJECT-IDENTITY integrated; worktree rebased to its exact integration SHA; accepted RELEASE-GATES `run-node-matrix.ps1` exists before checker execution; ordering edge `SECURITY-PROJECT-IDENTITY -> OPENCLAW-RELEASE -> INTEGRATION-RELEASE` | current baseline authority is package/plugin/npm `3.7.5`; record registry version and actual-diff semver decision after the identity source change, require the final local version to be publishable and greater than the current registry version when packageable source changed, align package/plugin/lock-top/lock-root versions, remove the lock ignore and track a generated lockfile v3, preserve declared dependency ranges unless a separately reviewed dependency change is recorded, replace publish-time `npm install` with `npm ci`, and prove from a fresh detached worktree with no pre-existing `node_modules`: tracked-lock/parity, `npm ci`, typecheck, tests, high-severity audit, package dry-run contents, clean Git status, publish/readback, independent checker PASS, and post-run review PASS under `.agent/reports/evidence/production-ready/openclaw-release/**` | | UPDATE-LIFECYCLE | `work/prc-security-updater` | `internal/update/update.go`, `internal/update/update_test.go`, `internal/worker/handlers_update.go`, `internal/worker/handlers_update_test.go`, `scripts/install.sh`, `scripts/install.ps1`, `.goreleaser.yaml`, `.github/workflows/release.yaml`, `plugin/engram/hooks/hook-cli.test.js` | convergent GE-004 update ownership/provenance decision; avoid `internal/worker/service.go` overlap | read-only version discovery resolves real zip/tar assets; `/api/update/apply`, `/api/update/restart`, and `/api/restart` fail before download/write/goroutine/self-spawn with stable externally-managed receipts; container updates only by image digest redeploy/rollback; plugin assets only by marketplace/launcher versioned cache; standalone route only from an authenticated release bundle; signed checksum identity and exact archive entry are mandatory; missing verifier/metadata, bad signature/checksum, oversized download/extraction, interrupted staging, activation/readiness failure, retry and rollback are deterministic and leave the prior artifact byte-identical; release archives contain required installer/manifest material; raw curl/irm-pipe execution is not a production contract | | SECURITY-REVIEW | checker-only | read-only review of SQL construction, template rendering, reverse proxy, updater/extraction, auth, secrets, and externally controlled inputs | SECURITY-TOOLCHAIN plus integrated candidate | no unresolved S3/S4 finding; dependency bump is not sufficient evidence | diff --git a/.agent/plans/2026-07-10-engram-production-ready-ownership-state.json b/.agent/plans/2026-07-10-engram-production-ready-ownership-state.json index a1f30a35..e3cea931 100644 --- a/.agent/plans/2026-07-10-engram-production-ready-ownership-state.json +++ b/.agent/plans/2026-07-10-engram-production-ready-ownership-state.json @@ -2,11 +2,11 @@ "schema_version": 1, "plan": { "path": ".agent/plans/2026-07-10-engram-production-ready-master-plan.md", - "sha256": "fd2b223a9a62848efc39e1c33bf739bada191508bccb7ba9a73140185638e43d" + "sha256": "4388337722e57b48e93515008e4220d6cd2c83de695c4c449387f071c59fb96f" }, "scope_map": { "path": ".agent/plans/2026-07-10-engram-production-ready-scope-map.json", - "sha256": "81093184036672008d6b85dfa88a431998ef70b587ab11475aa2b315f03ddf79" + "sha256": "fb170d59f3072117489402fd347cd1432c40adbc842811f92227498bcbc92693" }, "path_epochs": [ { diff --git a/.agent/plans/2026-07-10-engram-production-ready-scope-map.json b/.agent/plans/2026-07-10-engram-production-ready-scope-map.json index 9615241f..7777aaed 100644 --- a/.agent/plans/2026-07-10-engram-production-ready-scope-map.json +++ b/.agent/plans/2026-07-10-engram-production-ready-scope-map.json @@ -44,15 +44,15 @@ {"slice":"CUSTOMER-MODE","classification":"meta-fold","plan_owners":["CRITICAL-HARNESS","INTEGRATION-RELEASE"],"register_status":"PENDING","register_head":""}, {"slice":"DB-AUTH","classification":"maker","plan_owners":["DB-AUTH"],"register_status":"READY_FOR_INTEGRATION","register_head":"da97c88be6753703bac112be8431dc373e4d9dda"}, {"slice":"DB-BULKOPS","classification":"maker","plan_owners":["DB-BULKOPS"],"register_status":"REVISE_HOLD","register_head":"68b2ce5835c7c6efdf1c68da9eedcb8d9c3837ef","load_bearing":{"policy":"rejected_heads_must_not_be_accepted","rejected_heads":["68b2ce5835c7c6efdf1c68da9eedcb8d9c3837ef"]}}, - {"slice":"DB-BULKOPS-BEHAVIORAL-EDGE-REWORK","classification":"maker","plan_owners":["DB-BULKOPS-BEHAVIORAL-EDGE-REWORK"],"register_status":"READY_FOR_INTEGRATION_WITH_CONCERNS","register_head":"bd68c05baf4b7250096dd84f56bebea2aa555970"}, + {"slice":"DB-BULKOPS-BEHAVIORAL-EDGE-REWORK","classification":"maker","plan_owners":["DB-BULKOPS-BEHAVIORAL-EDGE-REWORK"],"register_status":"READY_FOR_INTEGRATION_WITH_CONCERNS","register_head":"bd68c05baf4b7250096dd84f56bebea2aa555970","register_notes":"Frozen full-candidate authority is 68b2ce5835c7c6efdf1c68da9eedcb8d9c3837ef..bd68c05baf4b7250096dd84f56bebea2aa555970. The live register partial base cd098397 omits the first rework commit and is discovery-only."}, {"slice":"DB-CRYSTALLIZATION","classification":"maker","plan_owners":["DB-CRYSTALLIZATION"],"register_status":"READY_FOR_INTEGRATION_WITH_CONCERNS","register_head":"2ab6211494e51aeb7b787a99e78cff8bf2d5694a"}, - {"slice":"DB-EMBEDDING-EVIDENCE-TRANSPORT","classification":"checker-evidence","plan_owners":["DB-EMBEDDING-EVIDENCE-TRANSPORT"],"register_status":"R5_INTERIM_REVISE_REAL_METRICS_REQUIRED","register_head":"369951b61ee07cb0c405558e0f677cd1c9e90362","register_notes":"Root caught a non-acceptable interim coverage artifact declaring identical 80.0/0.0/0.0 values without the actual Node report. Independent execution on the staged LF bytes passed 24/24 tests but measured aggregate 66.65 line / 59.64 branch / 88.17 functions; verifier 46.17/42.86/69.70 and harness 99.68/95.93/100.00. The added 289-line in-band coverage mode caused the line floor to fail. R5 must simplify/revert that denominator expansion and bind a separate representation verifier to two real raw transcripts; no rounding, threshold reduction, or old mixed-worktree numbers are acceptable.","load_bearing":{"policy":"rejected_heads_must_not_be_accepted","rejected_heads":["369951b61ee07cb0c405558e0f677cd1c9e90362"]}}, + {"slice":"DB-EMBEDDING-EVIDENCE-TRANSPORT","classification":"checker-evidence","plan_owners":["DB-EMBEDDING-EVIDENCE-TRANSPORT"],"register_status":"R6_MAKER_ACTIVE_ON_EXACT_R5_BASE","register_head":"a538f6224ef31f612152470a4ecd45e78ff9d0f2","register_notes":"R5 a538f622 is rejected for synthesized exit status, autocrlf 23/24 representation failure, and stale 9/15 Prove-It. R6 starts exactly at that head and is limited to baseline, R3, R4, R5, R6, and spec evidence families; no product path is authorized.","load_bearing":{"policy":"rejected_heads_must_not_be_accepted","rejected_heads":["369951b61ee07cb0c405558e0f677cd1c9e90362","a538f6224ef31f612152470a4ecd45e78ff9d0f2"]}}, {"slice":"DB-EMBEDDING-STATS","classification":"maker","plan_owners":["DB-EMBEDDING-STATS"],"register_status":"PRODUCT_ACCEPTED_EVIDENCE_R3_CHECKER_ACTIVE","register_head":"38d6a4fb7ff5f5ae3b6c0066c0a1b806421137df"}, {"slice":"DB-GOVERNANCE","classification":"maker","plan_owners":["DB-GOVERNANCE"],"register_status":"BLOCKED_BY_RELEASE_GATES","register_head":""}, - {"slice":"DB-REAPER","classification":"maker","plan_owners":["DB-REAPER"],"register_status":"READY_FOR_INTEGRATION_WITH_CONCERNS","register_head":"0d5cfa5c67ddbc331d7e812f98679742541b32ca"}, + {"slice":"DB-REAPER","classification":"maker","plan_owners":["DB-REAPER"],"register_status":"CANDIDATE_REJECTED_PATH_AUTHORITY_CONFLICT","register_head":"0d5cfa5c67ddbc331d7e812f98679742541b32ca","register_notes":"The observed candidate changes internal/worker/service.go, currently owned by AUTH-BOOTSTRAP-SECURITY, plus an undeclared lifecycle test. It is excluded from frozen current candidate authority; no simultaneous writer is granted."}, {"slice":"DB-RULES-ISOLATION","classification":"maker","plan_owners":["DB-RULES-ISOLATION"],"register_status":"BLOCKED_BY_DIAGNOSTIC_LANES","register_head":""}, {"slice":"DB-TEST-POOL-HYGIENE","classification":"maker","plan_owners":["DB-TEST-POOL-HYGIENE"],"register_status":"READY_FOR_CHECK","register_head":"68242c48aaad62ec087166eeb9ea32f14d189450"}, - {"slice":"DEMOLITION-SKIP-CLASSIFICATION","classification":"checker-evidence","plan_owners":["DEMOLITION-SKIP-CLASSIFICATION"],"register_status":"ALL_25_CLASSIFIED_OWNER_LANES_ACTIVE","register_head":"d59d1605969b1f567506e96ded524dfd1e4be08a"}, + {"slice":"DEMOLITION-SKIP-CLASSIFICATION","classification":"checker-evidence","plan_owners":["DEMOLITION-SKIP-CLASSIFICATION"],"register_status":"REGISTER_HEAD_MISBOUND_TO_R5_RELEASE_GATE_DIFF_REJECTED","register_head":"d59d1605969b1f567506e96ded524dfd1e4be08a","register_notes":"The canonical row's 4812589b..d59d1605 diff contains seven R5 release-gate paths, not demolition classification evidence. The checker-only plan row owns no paths. R8 Diff also throws a scalar Count internal error; R9 must return a clear zero-declarations/undeclared-diff failure.","load_bearing":{"policy":"rejected_heads_must_not_be_accepted","rejected_heads":["d59d1605969b1f567506e96ded524dfd1e4be08a"]}}, {"slice":"DEPLOYMENT-ROLLBACK","classification":"maker","plan_owners":["DEPLOYMENT-ROLLBACK"],"register_status":"BLOCKED_BY_IMAGE_REMEDIATION","register_head":""}, {"slice":"DOCUMENT-INGEST-PUBLIC-TRUTH","classification":"maker","plan_owners":["DOCUMENT-INGEST-PUBLIC-TRUTH"],"register_status":"READY_TO_DISPATCH","register_head":""}, {"slice":"DURABLE-AUDIT-BOUNDARIES","classification":"maker","plan_owners":["DURABLE-AUDIT-BOUNDARIES"],"register_status":"BLOCKED_BY_CANDIDATE_AND_AUTH_STACKS","register_head":""}, @@ -63,7 +63,7 @@ {"slice":"INGEST-DOC-SNAPSHOT-DEMOLITION","classification":"maker","plan_owners":["INGEST-DOC-SNAPSHOT-DEMOLITION"],"register_status":"BLOCKED_BY_DB_BULKOPS","register_head":""}, {"slice":"INTEGRATION-RELEASE","classification":"root-integration","plan_owners":["INTEGRATION-RELEASE"],"register_status":"BLOCKED_BY_RELEASE_GATES_PREVIEW_MEASURED","register_head":""}, {"slice":"LAUNCHER-FIRST-RUN","classification":"maker","plan_owners":["LAUNCHER-FIRST-RUN"],"register_status":"BLOCKED_BY_IDENTITY_AND_RELEASE_GATES","register_head":""}, - {"slice":"MASTER-PLAN","classification":"meta-fold","plan_owners":["PLAN-GOVERNANCE"],"register_status":"R8_RECONCILIATION_MAKER_ACTIVE","register_head":"d59d1605969b1f567506e96ded524dfd1e4be08a"}, + {"slice":"MASTER-PLAN","classification":"meta-fold","plan_owners":["PLAN-GOVERNANCE"],"register_status":"R9_MAKER_ACTIVE_ON_REJECTED_R8_BASE","register_head":"406fe952c143eb8aaf5895427c568a41d4cec225"}, {"slice":"MCP-STRUCTURED-INPUT-VALIDATION","classification":"maker","plan_owners":["MCP-STRUCTURED-INPUT-VALIDATION"],"register_status":"CLASSIFIED_MUST_BUILD","register_head":""}, {"slice":"NORTHSTAR-BOOK-CONTRACTS","classification":"maker","plan_owners":["NORTHSTAR-BOOK-CONTRACTS"],"register_status":"BLOCKED_BY_M5","register_head":""}, {"slice":"NORTHSTAR-CI-A-CONTRACTS","classification":"maker","plan_owners":["NORTHSTAR-CI-A-CONTRACTS"],"register_status":"BLOCKED_BY_M5","register_head":""}, @@ -76,16 +76,16 @@ {"slice":"OPENCLAW-RELEASE","classification":"maker","plan_owners":["OPENCLAW-RELEASE"],"register_status":"BLOCKED_BY_SECURITY_PROJECT_IDENTITY","register_head":""}, {"slice":"OPERATIONS","classification":"meta-fold","plan_owners":["DEPLOYMENT-ROLLBACK","RECOVERY-DATA","OBSERVABILITY-OTLP","PRIVACY-BOUNDARIES","CORE-PUBLIC-TRUTH","FINAL-PUBLIC-TRUTH"],"register_status":"PENDING","register_head":""}, {"slice":"OPERATOR-CONSOLE","classification":"meta-fold","plan_owners":["IMAGE-REMEDIATION","OC-INTEGRATION"],"register_status":"PENDING","register_head":""}, - {"slice":"PLAN-GOVERNANCE","classification":"maker","plan_owners":["PLAN-GOVERNANCE"],"register_status":"R7_CHECKER_REVISE_R8_MAKER_ACTIVE","register_head":"d59d1605969b1f567506e96ded524dfd1e4be08a"}, + {"slice":"PLAN-GOVERNANCE","classification":"maker","plan_owners":["PLAN-GOVERNANCE"],"register_status":"R9_MAKER_ACTIVE_FULL_DIFF_AUTHORITY_AUDIT","register_head":"406fe952c143eb8aaf5895427c568a41d4cec225"}, {"slice":"PRE-V5-UPGRADE-CONTRACT","classification":"maker","plan_owners":["PRE-V5-UPGRADE-CONTRACT"],"register_status":"READY_FOR_MAKER_HISTORICAL_FIXTURE_REQUIRED","register_head":""}, {"slice":"PRIVACY-BOUNDARIES","classification":"maker","plan_owners":["PRIVACY-BOUNDARIES"],"register_status":"BLOCKED_BY_DATA_STACK","register_head":""}, {"slice":"RECOVERY-DATA","classification":"maker","plan_owners":["RECOVERY-DATA"],"register_status":"BLOCKED_BY_DEPLOYMENT","register_head":""}, {"slice":"REDACTION-LIVE-CONTRACT","classification":"maker","plan_owners":["REDACTION-LIVE-CONTRACT"],"register_status":"CLASSIFIED_RELEASE_BLOCKER_PLAN_REVISED","register_head":""}, - {"slice":"RELEASE-GATES","classification":"maker","plan_owners":["RELEASE-GATES"],"register_status":"REVISION_7_DIAGNOSTIC_COMPLETE_R8_REBUILD_ACTIVE","register_head":"144eeefa003c3e1c0009c4264f41236ee3453b65","load_bearing":{"policy":"rejected_heads_must_not_be_accepted","rejected_heads":["144eeefa003c3e1c0009c4264f41236ee3453b65"]}}, + {"slice":"RELEASE-GATES","classification":"maker","plan_owners":["RELEASE-GATES"],"register_status":"R9_MAKER_ACTIVE_BLOCKED_PENDING_SUCCESSOR_COMMITS","register_head":"406fe952c143eb8aaf5895427c568a41d4cec225","load_bearing":{"policy":"rejected_heads_must_not_be_accepted","rejected_heads":["144eeefa003c3e1c0009c4264f41236ee3453b65","406fe952c143eb8aaf5895427c568a41d4cec225"]}}, {"slice":"RETRIEVAL-VECTOR-CONTRACT","classification":"maker","plan_owners":["RETRIEVAL-VECTOR-CONTRACT"],"register_status":"READY_FOR_MAKER","register_head":""}, {"slice":"ROADMAP-RECONCILIATION","classification":"maker","plan_owners":["ROADMAP-RECONCILIATION"],"register_status":"BLOCKED_BY_IMPLEMENTATION_TRUTH","register_head":""}, {"slice":"S4B-CONTRACT","classification":"maker","plan_owners":["S4B-CONTRACT"],"register_status":"BLOCKED_BY_PLAN_GOVERNANCE","register_head":""}, - {"slice":"SECURITY-PROJECT-IDENTITY","classification":"maker","plan_owners":["SECURITY-PROJECT-IDENTITY"],"register_status":"R2_CHECKER_REVISE_TWO_BLOCKERS_CONFIRMED","register_head":"9e2ce4e58a5cded69660ca9ac532d2167f315bb2","load_bearing":{"policy":"rejected_heads_must_not_be_accepted","rejected_heads":["9e2ce4e58a5cded69660ca9ac532d2167f315bb2"]}}, + {"slice":"SECURITY-PROJECT-IDENTITY","classification":"maker","plan_owners":["SECURITY-PROJECT-IDENTITY"],"register_status":"R4_MAKER_ACTIVE_ON_EXACT_R3_PRODUCT_HEAD","register_head":"38344455754fe503acbd79d2134141f996adff7f","load_bearing":{"policy":"rejected_heads_must_not_be_accepted","rejected_heads":["9e2ce4e58a5cded69660ca9ac532d2167f315bb2","38344455754fe503acbd79d2134141f996adff7f"]},"register_notes":"R3 product head 38344455 is rejected by checker-only commit 0d84047c (REVISE/HIGH: permanent Go test is goroutine-only). R4 starts at 38344455, never at the checker commit, and is bounded to internal/proxy/identity_test.go and/or new internal/proxy/identity_process_test.go plus existing security-project-identity evidence/report namespaces; temporary identity.go RED mutations must be absent from the final diff."}, {"slice":"SECURITY-TOOLCHAIN","classification":"maker","plan_owners":["SECURITY-TOOLCHAIN"],"register_status":"READY_FOR_INTEGRATION","register_head":"b0955dfd61b4ea7364f6d400579247b475a1a680"}, {"slice":"STATIC-EMBED-CONTRACT","classification":"maker","plan_owners":["STATIC-EMBED-CONTRACT"],"register_status":"READY_FOR_MAKER_SOURCE_AND_IMAGE_SPLIT","register_head":""}, {"slice":"T007-COMPAT-DEMOLITION-CLASSIFICATION","classification":"maker","plan_owners":["T007-COMPAT-DEMOLITION-CLASSIFICATION"],"register_status":"CURRENT_CONTRACT_TEST_CORRECTION_CLASSIFIED","register_head":""}, diff --git a/.agent/reports/2026-07-11-release-gates-r9-plan-governance.md b/.agent/reports/2026-07-11-release-gates-r9-plan-governance.md new file mode 100644 index 00000000..30e06960 --- /dev/null +++ b/.agent/reports/2026-07-11-release-gates-r9-plan-governance.md @@ -0,0 +1,65 @@ +# PLAN-GOVERNANCE-R9 maker report + +Status: `READY_FOR_COMMIT_A_VERIFICATION` + +## Decision + +R8 is rejected and immutable at `37d185b33b8f9411564fda49cf8b0d58321b62fd` / `406fe952c143eb8aaf5895427c568a41d4cec225`. R9 preserves its 67/67 structural projection, AB5F provenance, 36 ownership epochs, same-lane progress policy, rejected-head policy, and all predecessor obligations. It adds a tracked exact-diff authority so CI does not need the ignored mutable register or foreign candidate objects. + +Path authority never implies product acceptance. Current candidates, historical/rejected candidates, pending namespaces, classification-only rows, and path-conflicting candidates are distinct machine states. + +## Full resolvable-row audit + +The audit inspected all 14 canonical-register rows whose full base/head objects resolved locally. Exact machine evidence is `resolvable-register-diff-mismatch-inventory.json`. + +| Slice/class | R8 result | R9 disposition | +| --- | --- | --- | +| SECURITY-PROJECT-IDENTITY R3/R4 | FAIL: 11 undeclared of 14; subsequent checker `REVISE/HIGH` | Freeze R3's exact 14-path diff as rejected history; remove the wrong `project_store_test.go` declaration; start pending R4 from product head `38344455`, never checker-only `0d84047c`, bounded to existing `identity_test.go` and/or new black-box `identity_process_test.go` plus evidence/report namespaces; temporary `identity.go` RED mutations are forbidden in the final diff. | +| DB-EMBEDDING-EVIDENCE-TRANSPORT R5 | FAIL: 10 undeclared of 28 | Keep R5 rejected, authorize the literal R5 family, and reserve only the literal R6 family for its exact-base successor. | +| DB-AUTH | FAIL: 1 undeclared report of 5 | Add the exact report. | +| DB-EMBEDDING-STATS | FAIL: 4 undeclared of 8 under the R8 Diff namespaces | Add the exact report and both bounded evidence families. | +| DB-REAPER | FAIL: 2 undeclared of 2 plus `service.go` owner conflict | Reject from frozen current authority; do not create a simultaneous writer. A fresh candidate needs an epoch-safe amendment. | +| DB-BULKOPS | FAIL: 4 current-owner conflicts | Preserve as rejected historical evidence; no acceptance. | +| DB-BULKOPS-BEHAVIORAL-EDGE-REWORK | FAIL: partial register base violates the rejected-predecessor lock on 2 paths | Freeze the full `68b2ce58..bd68c05b` candidate and its 38 exact paths. | +| DEMOLITION-SKIP-CLASSIFICATION | 7 misbound R5 paths, no maker row; R8 Diff throws scalar `Count` error | Reject the register/head binding, preserve the checker classification as provenance, and require a clear zero-declarations/non-empty-diff failure. | +| DB-CRYSTALLIZATION | PASS | Freeze unchanged. | +| DB-TEST-POOL-HYGIENE | PASS | Freeze unchanged. | +| SECURITY-TOOLCHAIN | PASS | Freeze unchanged. | +| MASTER-PLAN / PLAN-GOVERNANCE / RELEASE-GATES | R9 base=head at observation | Explicit in-progress empty self rows; A/B receive separate exact Diff proof after commit. | + +## Frozen contract + +- Candidates: 9. +- Exact frozen paths: 123. +- Pending contracts: literal R6 evidence prefix; R4 exact proxy test plus existing bounded security evidence/report families. +- Path serialization: ordinal, case-sensitive, one normalized UTF-8 path plus LF. +- Excluded conflict: DB-REAPER `service.go` remains AUTH-BOOTSTRAP-SECURITY-owned. +- Corrected lineage: DB-BULKOPS-BEHAVIORAL-EDGE-REWORK starts from rejected predecessor `68b2ce5835c7c6efdf1c68da9eedcb8d9c3837ef`, not the live register's partial `cd098397..bd68c05b` window. + +## Authority hashes before commit A + +| Artifact | Canonical SHA256 | +| --- | --- | +| master plan | `4388337722e57b48e93515008e4220d6cd2c83de695c4c449387f071c59fb96f` | +| ownership state | `e41f52fbafa317eb1571c76a7d1de9add543da38a1b2471dbe587a849b21c032` | +| scope map | `fb170d59f3072117489402fd347cd1432c40adbc842811f92227498bcbc92693` | +| active-diff contract | `d8e7818d84831f047d30a8493f9c7d2a8cea288d5c381735960d11dd02988ae5` | +| mismatch inventory | `1f42fda4bc8fdd6121ecc894e017c7371cde75c300736b7b067ae89ba94d1a67` | + +The mutable register snapshot was discovery input only (`29865adc048cb3f64ec7d133b3bd901c95115e4ae5b95c98927607de889f77d4` at capture). Neither the frozen gate nor CI requires that ignored file. + +## Boundaries + +No product file, primary checkout, canonical register, HTML report, merge, push, or tag was changed. Commit A contains only plan/state/scope governance plus R9 plan-governance evidence/report. Commit B will add the executable gate/workflow bindings and its own evidence/report. + +## Verification before commit A + +- `assert-plan-path-ownership.ps1 -SelfTest`: PASS. +- Static Ledger: PASS, 57 maker rows, 351 declarations, 34 repeated exact paths, 36 epochs, 67/67 scope entries. +- Live/current Ledger against the ignored register: PASS with the same structural counts; mutable progress was not used as frozen authority. +- Exact SECURITY-PROJECT-IDENTITY R3 Diff: PASS, 14 paths, 0 violations. +- Exact rejected DB-EMBEDDING-EVIDENCE-TRANSPORT R5 Diff: PASS for path authority, 28 paths, 0 violations; status remains rejected. +- Corrected full DB-BULKOPS-BEHAVIORAL-EDGE-REWORK `68b2ce58..bd68c05b`: PASS, 38 paths, 0 violations, rejected-predecessor epoch satisfied. +- DB-AUTH: PASS, 5 paths, 0 violations. +- DB-EMBEDDING-STATS: PASS, 8 paths, 0 violations. +- Frozen-contract preflight: PASS, 9 candidates / 123 exact paths / 2 pending contracts; all digests, ordinal order, classifications, plan owners, branches, and pending declarations match. diff --git a/.agent/specs/release-gates-r9/evidence/plan-governance/diff-db-auth.json b/.agent/specs/release-gates-r9/evidence/plan-governance/diff-db-auth.json new file mode 100644 index 00000000..dc4b1a6e --- /dev/null +++ b/.agent/specs/release-gates-r9/evidence/plan-governance/diff-db-auth.json @@ -0,0 +1,238 @@ +{ + "schema_version": 2, + "gate": "plan-path-ownership", + "mode": "Diff", + "verdict": "PASS", + "started_at": "2026-07-10T21:53:21.0051974+00:00", + "finished_at": "2026-07-10T21:53:27.2918203+00:00", + "duration_seconds": 6.287, + "plan": { + "path": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates-r9-maker\\.agent\\plans\\2026-07-10-engram-production-ready-master-plan.md", + "expected_sha256": "4388337722e57b48e93515008e4220d6cd2c83de695c4c449387f071c59fb96f", + "observed_sha256": "4388337722e57b48e93515008e4220d6cd2c83de695c4c449387f071c59fb96f", + "hash_match": true, + "ledger_verdict": "PASS" + }, + "state": { + "path": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates-r9-maker\\.agent\\plans\\2026-07-10-engram-production-ready-ownership-state.json", + "sha256": "e41f52fbafa317eb1571c76a7d1de9add543da38a1b2471dbe587a849b21c032", + "verdict": "PASS", + "plan_sha256": "4388337722e57b48e93515008e4220d6cd2c83de695c4c449387f071c59fb96f" + }, + "scope_map": { + "path": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates-r9-maker\\.agent\\plans\\2026-07-10-engram-production-ready-scope-map.json", + "expected_sha256": "fb170d59f3072117489402fd347cd1432c40adbc842811f92227498bcbc92693", + "observed_sha256": "fb170d59f3072117489402fd347cd1432c40adbc842811f92227498bcbc92693", + "verdict": "PASS", + "entries": 67, + "unique_slices": 67 + }, + "live_register": { + "supplied": false, + "path": "", + "sha256": null, + "checked": false, + "rows": 0 + }, + "slice": { + "name": "DB-AUTH", + "row_count": 1, + "declarations": [ + { + "owner": "DB-AUTH", + "branch": "work/prc-db-auth", + "path": "internal/db/gorm/user_store.go", + "display": "internal/db/gorm/user_store.go", + "kind": "exact", + "line": 14 + }, + { + "owner": "DB-AUTH", + "branch": "work/prc-db-auth", + "path": "internal/db/gorm/user_store_test.go", + "display": "internal/db/gorm/user_store_test.go", + "kind": "exact", + "line": 14 + }, + { + "owner": "DB-AUTH", + "branch": "work/prc-db-auth", + "path": "internal/worker/auth_handlers.go", + "display": "internal/worker/auth_handlers.go", + "kind": "exact", + "line": 14 + }, + { + "owner": "DB-AUTH", + "branch": "work/prc-db-auth", + "path": "internal/worker/auth_handlers_lifecycle_test.go", + "display": "internal/worker/auth_handlers_lifecycle_test.go", + "kind": "exact", + "line": 14 + }, + { + "owner": "DB-AUTH", + "branch": "work/prc-db-auth", + "path": ".agent/reports/db-auth-rework-maker-2026-07-10.md", + "display": ".agent/reports/db-auth-rework-maker-2026-07-10.md", + "kind": "exact", + "line": 14 + } + ], + "evidence_namespace": { + "kind": "evidence", + "path": ".agent/reports/evidence/production-ready/db-auth", + "display": ".agent/reports/evidence/production-ready/db-auth/**", + "match_kind": "prefix", + "policy": "canonical-derived-default" + }, + "report_namespace": { + "kind": "report", + "path": ".agent/reports/db-auth-rework-maker-2026-07-10.md", + "display": ".agent/reports/db-auth-rework-maker-2026-07-10.md", + "match_kind": "exact", + "policy": "literal-row-exception" + } + }, + "git": { + "repository": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates-r9-maker", + "requested_base": "b0c4ab4c07a4c6f512728da52b2e132bacd0289c", + "resolved_base": "b0c4ab4c07a4c6f512728da52b2e132bacd0289c", + "requested_head": "da97c88be6753703bac112be8431dc373e4d9dda", + "resolved_head": "da97c88be6753703bac112be8431dc373e4d9dda", + "base_is_ancestor": true, + "name_status_command": "git -c core.quotepath=false diff --name-status --find-renames --find-copies b0c4ab4c07a4c6f512728da52b2e132bacd0289c..da97c88be6753703bac112be8431dc373e4d9dda --", + "raw_name_status": [ + "A\t.agent/reports/db-auth-rework-maker-2026-07-10.md", + "M\tinternal/db/gorm/user_store.go", + "M\tinternal/db/gorm/user_store_test.go", + "M\tinternal/worker/auth_handlers.go", + "M\tinternal/worker/auth_handlers_lifecycle_test.go" + ] + }, + "counts": { + "diff_entries": 5, + "changed_paths": 5, + "violations": 0, + "errors": 0 + }, + "diff_entries": [ + { + "status": "A", + "paths": [ + ".agent/reports/db-auth-rework-maker-2026-07-10.md" + ], + "raw": "A\t.agent/reports/db-auth-rework-maker-2026-07-10.md" + }, + { + "status": "M", + "paths": [ + "internal/db/gorm/user_store.go" + ], + "raw": "M\tinternal/db/gorm/user_store.go" + }, + { + "status": "M", + "paths": [ + "internal/db/gorm/user_store_test.go" + ], + "raw": "M\tinternal/db/gorm/user_store_test.go" + }, + { + "status": "M", + "paths": [ + "internal/worker/auth_handlers.go" + ], + "raw": "M\tinternal/worker/auth_handlers.go" + }, + { + "status": "M", + "paths": [ + "internal/worker/auth_handlers_lifecycle_test.go" + ], + "raw": "M\tinternal/worker/auth_handlers_lifecycle_test.go" + } + ], + "changed_paths": [ + { + "status": "A", + "path": ".agent/reports/db-auth-rework-maker-2026-07-10.md", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "report-namespace" + ], + "ownership_matches": [ + ".agent/reports/db-auth-rework-maker-2026-07-10.md" + ] + }, + { + "status": "M", + "path": "internal/db/gorm/user_store.go", + "allowed": true, + "allowed_by": [ + "slice-declaration" + ], + "ownership_matches": [ + "internal/db/gorm/user_store.go" + ] + }, + { + "status": "M", + "path": "internal/db/gorm/user_store_test.go", + "allowed": true, + "allowed_by": [ + "slice-declaration" + ], + "ownership_matches": [ + "internal/db/gorm/user_store_test.go" + ] + }, + { + "status": "M", + "path": "internal/worker/auth_handlers.go", + "allowed": true, + "allowed_by": [ + "slice-declaration" + ], + "ownership_matches": [ + "internal/worker/auth_handlers.go" + ] + }, + { + "status": "M", + "path": "internal/worker/auth_handlers_lifecycle_test.go", + "allowed": true, + "allowed_by": [ + "slice-declaration" + ], + "ownership_matches": [ + "internal/worker/auth_handlers_lifecycle_test.go" + ] + } + ], + "violations": [], + "epoch_authority": { + "verdict": "PASS", + "evaluated": [ + { + "path": "internal/db/gorm/user_store.go", + "current_owner": "DB-AUTH", + "owner_pass": true, + "transition_kind": "integration", + "required_base_sha": "", + "base_pass": true + }, + { + "path": "internal/worker/auth_handlers.go", + "current_owner": "DB-AUTH", + "owner_pass": true, + "transition_kind": "integration", + "required_base_sha": "", + "base_pass": true + } + ], + "errors": [] + }, + "errors": [] +} diff --git a/.agent/specs/release-gates-r9/evidence/plan-governance/diff-db-bulkops-edge-full.json b/.agent/specs/release-gates-r9/evidence/plan-governance/diff-db-bulkops-edge-full.json new file mode 100644 index 00000000..e1f33757 --- /dev/null +++ b/.agent/specs/release-gates-r9/evidence/plan-governance/diff-db-bulkops-edge-full.json @@ -0,0 +1,930 @@ +{ + "schema_version": 2, + "gate": "plan-path-ownership", + "mode": "Diff", + "verdict": "PASS", + "started_at": "2026-07-10T21:53:20.8974458+00:00", + "finished_at": "2026-07-10T21:53:28.1616101+00:00", + "duration_seconds": 7.264, + "plan": { + "path": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates-r9-maker\\.agent\\plans\\2026-07-10-engram-production-ready-master-plan.md", + "expected_sha256": "4388337722e57b48e93515008e4220d6cd2c83de695c4c449387f071c59fb96f", + "observed_sha256": "4388337722e57b48e93515008e4220d6cd2c83de695c4c449387f071c59fb96f", + "hash_match": true, + "ledger_verdict": "PASS" + }, + "state": { + "path": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates-r9-maker\\.agent\\plans\\2026-07-10-engram-production-ready-ownership-state.json", + "sha256": "e41f52fbafa317eb1571c76a7d1de9add543da38a1b2471dbe587a849b21c032", + "verdict": "PASS", + "plan_sha256": "4388337722e57b48e93515008e4220d6cd2c83de695c4c449387f071c59fb96f" + }, + "scope_map": { + "path": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates-r9-maker\\.agent\\plans\\2026-07-10-engram-production-ready-scope-map.json", + "expected_sha256": "fb170d59f3072117489402fd347cd1432c40adbc842811f92227498bcbc92693", + "observed_sha256": "fb170d59f3072117489402fd347cd1432c40adbc842811f92227498bcbc92693", + "verdict": "PASS", + "entries": 67, + "unique_slices": 67 + }, + "live_register": { + "supplied": false, + "path": "", + "sha256": null, + "checked": false, + "rows": 0 + }, + "slice": { + "name": "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK", + "row_count": 1, + "declarations": [ + { + "owner": "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK", + "branch": "work/prc-db-bulkops", + "path": "internal/db/gorm/candidate_store.go", + "display": "internal/db/gorm/candidate_store.go", + "kind": "exact", + "line": 8 + }, + { + "owner": "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK", + "branch": "work/prc-db-bulkops", + "path": "internal/db/gorm/candidate_store_test.go", + "display": "internal/db/gorm/candidate_store_test.go", + "kind": "exact", + "line": 8 + }, + { + "owner": "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK", + "branch": "work/prc-db-bulkops", + "path": "internal/mcp/tools_bulkops.go", + "display": "internal/mcp/tools_bulkops.go", + "kind": "exact", + "line": 8 + }, + { + "owner": "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK", + "branch": "work/prc-db-bulkops", + "path": "internal/mcp/tools_dryrun_test.go", + "display": "internal/mcp/tools_dryrun_test.go", + "kind": "exact", + "line": 8 + }, + { + "owner": "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK", + "branch": "work/prc-db-bulkops", + "path": ".agent/reports/2026-07-10-db-bulkops-behavioral-edge-rework-maker.md", + "display": ".agent/reports/2026-07-10-db-bulkops-behavioral-edge-rework-maker.md", + "kind": "exact", + "line": 8 + }, + { + "owner": "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK", + "branch": "work/prc-db-bulkops", + "path": ".agent/reports/2026-07-10-db-bulkops-behavioral-edge-rework-maker-3.md", + "display": ".agent/reports/2026-07-10-db-bulkops-behavioral-edge-rework-maker-3.md", + "kind": "exact", + "line": 8 + }, + { + "owner": "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK", + "branch": "work/prc-db-bulkops", + "path": ".agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework", + "display": ".agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/**", + "kind": "prefix", + "line": 8 + } + ], + "evidence_namespace": { + "kind": "evidence", + "path": ".agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework", + "display": ".agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/**", + "match_kind": "prefix", + "policy": "canonical-derived-default" + }, + "report_namespace": { + "kind": "report", + "path": ".agent/reports/2026-07-10-db-bulkops-behavioral-edge-rework-maker.md", + "display": ".agent/reports/2026-07-10-db-bulkops-behavioral-edge-rework-maker.md", + "match_kind": "exact", + "policy": "literal-row-exception" + } + }, + "git": { + "repository": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates-r9-maker", + "requested_base": "68b2ce5835c7c6efdf1c68da9eedcb8d9c3837ef", + "resolved_base": "68b2ce5835c7c6efdf1c68da9eedcb8d9c3837ef", + "requested_head": "bd68c05baf4b7250096dd84f56bebea2aa555970", + "resolved_head": "bd68c05baf4b7250096dd84f56bebea2aa555970", + "base_is_ancestor": true, + "name_status_command": "git -c core.quotepath=false diff --name-status --find-renames --find-copies 68b2ce5835c7c6efdf1c68da9eedcb8d9c3837ef..bd68c05baf4b7250096dd84f56bebea2aa555970 --", + "raw_name_status": [ + "A\t.agent/reports/2026-07-10-db-bulkops-behavioral-edge-rework-maker.md", + "A\t.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/01-red-behavior.log", + "A\t.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/02-red-spy-seam.log", + "A\t.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/03-green-focused.log", + "A\t.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/04-green-repeat20.log", + "A\t.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/05-prove-it-candidate.log", + "A\t.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/06-prove-it-parser.log", + "A\t.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/07-post-prove-green.log", + "A\t.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/08-full-packages.log", + "A\t.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/09-legacy-compat.log", + "A\t.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/10-full-gorm.log", + "A\t.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/11-full-mcp.log", + "A\t.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/12-race-focused.log", + "A\t.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/13-vet.log", + "A\t.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/14-coverage.log", + "A\t.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/15-cover-functions.log", + "A\t.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/16-final-residue.log", + "A\t.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/17-review-red-authoritative-binding.log", + "A\t.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/18-review-green-authoritative-binding.log", + "A\t.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/19-review-green-authoritative-binding.log", + "A\t.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/20-review-repeat20.log", + "A\t.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/21-review-race-focused.log", + "A\t.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/22-review-vet.log", + "A\t.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/23-review-coverage.log", + "A\t.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/24-review-cover-functions.log", + "A\t.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/25-review-cover-functions.log", + "A\t.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/26-review-full-gorm.log", + "A\t.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/27-review-full-mcp.log", + "A\t.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/A-candidate-review-snapshot-binding.red.json", + "A\t.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/B-bulk-structured-input.red.json", + "A\t.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/DB-BULKOPS-BEHAVIORAL-EDGE-REWORK.final.json", + "A\t.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/Invoke-MakerGo.ps1", + "A\t.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/SHA256SUMS.txt", + "A\t.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/coverage.out", + "M\tinternal/db/gorm/candidate_store.go", + "M\tinternal/db/gorm/candidate_store_test.go", + "M\tinternal/mcp/tools_bulkops.go", + "M\tinternal/mcp/tools_dryrun_test.go" + ] + }, + "counts": { + "diff_entries": 38, + "changed_paths": 38, + "violations": 0, + "errors": 0 + }, + "diff_entries": [ + { + "status": "A", + "paths": [ + ".agent/reports/2026-07-10-db-bulkops-behavioral-edge-rework-maker.md" + ], + "raw": "A\t.agent/reports/2026-07-10-db-bulkops-behavioral-edge-rework-maker.md" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/01-red-behavior.log" + ], + "raw": "A\t.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/01-red-behavior.log" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/02-red-spy-seam.log" + ], + "raw": "A\t.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/02-red-spy-seam.log" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/03-green-focused.log" + ], + "raw": "A\t.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/03-green-focused.log" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/04-green-repeat20.log" + ], + "raw": "A\t.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/04-green-repeat20.log" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/05-prove-it-candidate.log" + ], + "raw": "A\t.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/05-prove-it-candidate.log" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/06-prove-it-parser.log" + ], + "raw": "A\t.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/06-prove-it-parser.log" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/07-post-prove-green.log" + ], + "raw": "A\t.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/07-post-prove-green.log" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/08-full-packages.log" + ], + "raw": "A\t.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/08-full-packages.log" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/09-legacy-compat.log" + ], + "raw": "A\t.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/09-legacy-compat.log" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/10-full-gorm.log" + ], + "raw": "A\t.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/10-full-gorm.log" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/11-full-mcp.log" + ], + "raw": "A\t.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/11-full-mcp.log" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/12-race-focused.log" + ], + "raw": "A\t.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/12-race-focused.log" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/13-vet.log" + ], + "raw": "A\t.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/13-vet.log" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/14-coverage.log" + ], + "raw": "A\t.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/14-coverage.log" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/15-cover-functions.log" + ], + "raw": "A\t.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/15-cover-functions.log" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/16-final-residue.log" + ], + "raw": "A\t.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/16-final-residue.log" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/17-review-red-authoritative-binding.log" + ], + "raw": "A\t.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/17-review-red-authoritative-binding.log" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/18-review-green-authoritative-binding.log" + ], + "raw": "A\t.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/18-review-green-authoritative-binding.log" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/19-review-green-authoritative-binding.log" + ], + "raw": "A\t.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/19-review-green-authoritative-binding.log" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/20-review-repeat20.log" + ], + "raw": "A\t.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/20-review-repeat20.log" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/21-review-race-focused.log" + ], + "raw": "A\t.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/21-review-race-focused.log" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/22-review-vet.log" + ], + "raw": "A\t.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/22-review-vet.log" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/23-review-coverage.log" + ], + "raw": "A\t.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/23-review-coverage.log" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/24-review-cover-functions.log" + ], + "raw": "A\t.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/24-review-cover-functions.log" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/25-review-cover-functions.log" + ], + "raw": "A\t.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/25-review-cover-functions.log" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/26-review-full-gorm.log" + ], + "raw": "A\t.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/26-review-full-gorm.log" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/27-review-full-mcp.log" + ], + "raw": "A\t.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/27-review-full-mcp.log" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/A-candidate-review-snapshot-binding.red.json" + ], + "raw": "A\t.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/A-candidate-review-snapshot-binding.red.json" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/B-bulk-structured-input.red.json" + ], + "raw": "A\t.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/B-bulk-structured-input.red.json" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/DB-BULKOPS-BEHAVIORAL-EDGE-REWORK.final.json" + ], + "raw": "A\t.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/DB-BULKOPS-BEHAVIORAL-EDGE-REWORK.final.json" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/Invoke-MakerGo.ps1" + ], + "raw": "A\t.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/Invoke-MakerGo.ps1" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/SHA256SUMS.txt" + ], + "raw": "A\t.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/SHA256SUMS.txt" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/coverage.out" + ], + "raw": "A\t.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/coverage.out" + }, + { + "status": "M", + "paths": [ + "internal/db/gorm/candidate_store.go" + ], + "raw": "M\tinternal/db/gorm/candidate_store.go" + }, + { + "status": "M", + "paths": [ + "internal/db/gorm/candidate_store_test.go" + ], + "raw": "M\tinternal/db/gorm/candidate_store_test.go" + }, + { + "status": "M", + "paths": [ + "internal/mcp/tools_bulkops.go" + ], + "raw": "M\tinternal/mcp/tools_bulkops.go" + }, + { + "status": "M", + "paths": [ + "internal/mcp/tools_dryrun_test.go" + ], + "raw": "M\tinternal/mcp/tools_dryrun_test.go" + } + ], + "changed_paths": [ + { + "status": "A", + "path": ".agent/reports/2026-07-10-db-bulkops-behavioral-edge-rework-maker.md", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "report-namespace" + ], + "ownership_matches": [ + ".agent/reports/2026-07-10-db-bulkops-behavioral-edge-rework-maker.md" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/01-red-behavior.log", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/02-red-spy-seam.log", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/03-green-focused.log", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/04-green-repeat20.log", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/05-prove-it-candidate.log", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/06-prove-it-parser.log", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/07-post-prove-green.log", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/08-full-packages.log", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/09-legacy-compat.log", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/10-full-gorm.log", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/11-full-mcp.log", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/12-race-focused.log", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/13-vet.log", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/14-coverage.log", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/15-cover-functions.log", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/16-final-residue.log", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/17-review-red-authoritative-binding.log", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/18-review-green-authoritative-binding.log", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/19-review-green-authoritative-binding.log", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/20-review-repeat20.log", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/21-review-race-focused.log", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/22-review-vet.log", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/23-review-coverage.log", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/24-review-cover-functions.log", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/25-review-cover-functions.log", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/26-review-full-gorm.log", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/27-review-full-mcp.log", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/A-candidate-review-snapshot-binding.red.json", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/B-bulk-structured-input.red.json", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/DB-BULKOPS-BEHAVIORAL-EDGE-REWORK.final.json", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/Invoke-MakerGo.ps1", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/SHA256SUMS.txt", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/coverage.out", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/**" + ] + }, + { + "status": "M", + "path": "internal/db/gorm/candidate_store.go", + "allowed": true, + "allowed_by": [ + "slice-declaration" + ], + "ownership_matches": [ + "internal/db/gorm/candidate_store.go" + ] + }, + { + "status": "M", + "path": "internal/db/gorm/candidate_store_test.go", + "allowed": true, + "allowed_by": [ + "slice-declaration" + ], + "ownership_matches": [ + "internal/db/gorm/candidate_store_test.go" + ] + }, + { + "status": "M", + "path": "internal/mcp/tools_bulkops.go", + "allowed": true, + "allowed_by": [ + "slice-declaration" + ], + "ownership_matches": [ + "internal/mcp/tools_bulkops.go" + ] + }, + { + "status": "M", + "path": "internal/mcp/tools_dryrun_test.go", + "allowed": true, + "allowed_by": [ + "slice-declaration" + ], + "ownership_matches": [ + "internal/mcp/tools_dryrun_test.go" + ] + } + ], + "violations": [], + "epoch_authority": { + "verdict": "PASS", + "evaluated": [ + { + "path": "internal/db/gorm/candidate_store_test.go", + "current_owner": "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK", + "owner_pass": true, + "transition_kind": "rework", + "required_base_sha": "68b2ce5835c7c6efdf1c68da9eedcb8d9c3837ef", + "base_pass": true + }, + { + "path": "internal/db/gorm/candidate_store.go", + "current_owner": "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK", + "owner_pass": true, + "transition_kind": "rework", + "required_base_sha": "68b2ce5835c7c6efdf1c68da9eedcb8d9c3837ef", + "base_pass": true + }, + { + "path": "internal/mcp/tools_bulkops.go", + "current_owner": "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK", + "owner_pass": true, + "transition_kind": "rework", + "required_base_sha": "68b2ce5835c7c6efdf1c68da9eedcb8d9c3837ef", + "base_pass": true + }, + { + "path": "internal/mcp/tools_dryrun_test.go", + "current_owner": "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK", + "owner_pass": true, + "transition_kind": "rework", + "required_base_sha": "68b2ce5835c7c6efdf1c68da9eedcb8d9c3837ef", + "base_pass": true + } + ], + "errors": [] + }, + "errors": [] +} diff --git a/.agent/specs/release-gates-r9/evidence/plan-governance/diff-db-embedding-r5.json b/.agent/specs/release-gates-r9/evidence/plan-governance/diff-db-embedding-r5.json new file mode 100644 index 00000000..1aa30d23 --- /dev/null +++ b/.agent/specs/release-gates-r9/evidence/plan-governance/diff-db-embedding-r5.json @@ -0,0 +1,685 @@ +{ + "schema_version": 2, + "gate": "plan-path-ownership", + "mode": "Diff", + "verdict": "PASS", + "started_at": "2026-07-10T21:53:21.1644869+00:00", + "finished_at": "2026-07-10T21:53:27.5317713+00:00", + "duration_seconds": 6.367, + "plan": { + "path": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates-r9-maker\\.agent\\plans\\2026-07-10-engram-production-ready-master-plan.md", + "expected_sha256": "4388337722e57b48e93515008e4220d6cd2c83de695c4c449387f071c59fb96f", + "observed_sha256": "4388337722e57b48e93515008e4220d6cd2c83de695c4c449387f071c59fb96f", + "hash_match": true, + "ledger_verdict": "PASS" + }, + "state": { + "path": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates-r9-maker\\.agent\\plans\\2026-07-10-engram-production-ready-ownership-state.json", + "sha256": "e41f52fbafa317eb1571c76a7d1de9add543da38a1b2471dbe587a849b21c032", + "verdict": "PASS", + "plan_sha256": "4388337722e57b48e93515008e4220d6cd2c83de695c4c449387f071c59fb96f" + }, + "scope_map": { + "path": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates-r9-maker\\.agent\\plans\\2026-07-10-engram-production-ready-scope-map.json", + "expected_sha256": "fb170d59f3072117489402fd347cd1432c40adbc842811f92227498bcbc92693", + "observed_sha256": "fb170d59f3072117489402fd347cd1432c40adbc842811f92227498bcbc92693", + "verdict": "PASS", + "entries": 67, + "unique_slices": 67 + }, + "live_register": { + "supplied": false, + "path": "", + "sha256": null, + "checked": false, + "rows": 0 + }, + "slice": { + "name": "DB-EMBEDDING-EVIDENCE-TRANSPORT", + "row_count": 1, + "declarations": [ + { + "owner": "DB-EMBEDDING-EVIDENCE-TRANSPORT", + "branch": "work/prc-db-embedding-evidence-transport-r6", + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport", + "display": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/**", + "kind": "prefix", + "line": 20 + }, + { + "owner": "DB-EMBEDDING-EVIDENCE-TRANSPORT", + "branch": "work/prc-db-embedding-evidence-transport-r6", + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3", + "display": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/**", + "kind": "prefix", + "line": 20 + }, + { + "owner": "DB-EMBEDDING-EVIDENCE-TRANSPORT", + "branch": "work/prc-db-embedding-evidence-transport-r6", + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4", + "display": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4/**", + "kind": "prefix", + "line": 20 + }, + { + "owner": "DB-EMBEDDING-EVIDENCE-TRANSPORT", + "branch": "work/prc-db-embedding-evidence-transport-r6", + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5", + "display": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/**", + "kind": "prefix", + "line": 20 + }, + { + "owner": "DB-EMBEDDING-EVIDENCE-TRANSPORT", + "branch": "work/prc-db-embedding-evidence-transport-r6", + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6", + "display": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/**", + "kind": "prefix", + "line": 20 + }, + { + "owner": "DB-EMBEDDING-EVIDENCE-TRANSPORT", + "branch": "work/prc-db-embedding-evidence-transport-r6", + "path": ".agent/specs/db-embedding-stats-evidence-transport/evidence", + "display": ".agent/specs/db-embedding-stats-evidence-transport/evidence/**", + "kind": "prefix", + "line": 20 + } + ], + "evidence_namespace": { + "kind": "evidence", + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5", + "display": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/**", + "match_kind": "prefix", + "policy": "literal-row-exception" + }, + "report_namespace": { + "kind": "report", + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5", + "display": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/**", + "match_kind": "prefix", + "policy": "literal-row-exception" + } + }, + "git": { + "repository": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates-r9-maker", + "requested_base": "369951b61ee07cb0c405558e0f677cd1c9e90362", + "resolved_base": "369951b61ee07cb0c405558e0f677cd1c9e90362", + "requested_head": "a538f6224ef31f612152470a4ecd45e78ff9d0f2", + "resolved_head": "a538f6224ef31f612152470a4ecd45e78ff9d0f2", + "base_is_ancestor": true, + "name_status_command": "git -c core.quotepath=false diff --name-status --find-renames --find-copies 369951b61ee07cb0c405558e0f677cd1c9e90362..a538f6224ef31f612152470a4ecd45e78ff9d0f2 --", + "raw_name_status": [ + "M\t.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/R3-SHA256SUMS.txt", + "M\t.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/coverage-repeat.v1.json", + "M\t.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/maker-report.md", + "M\t.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/maker-summary.v1.json", + "M\t.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/verification-matrix.v1.json", + "M\t.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4/R4-SHA256SUMS.txt", + "M\t.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4/coverage-repeat.v1.json", + "M\t.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4/maker-report.md", + "M\t.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4/maker-summary.v1.json", + "M\t.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4/verification-matrix.v1.json", + "A\t.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/R5-SHA256SUMS.txt", + "A\t.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/coverage-capture.v1.json", + "A\t.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/coverage-repeat.v1.json", + "A\t.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/coverage-run-1.tap", + "A\t.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/coverage-run-2.tap", + "A\t.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/maker-report.md", + "A\t.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/maker-summary.v1.json", + "A\t.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/run-coverage-capture-verifier.cmd", + "A\t.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/verification-matrix.v1.json", + "A\t.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/verify-coverage-capture.cjs", + "M\t.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/ARTIFACTS.sha256", + "M\t.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/maker-report.md", + "M\t.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verification-observations.v1.json", + "M\t.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.test.cjs", + "M\t.agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R3.tdd.json", + "M\t.agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R4.tdd.json", + "A\t.agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R5.red.json", + "A\t.agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R5.tdd.json" + ] + }, + "counts": { + "diff_entries": 28, + "changed_paths": 28, + "violations": 0, + "errors": 0 + }, + "diff_entries": [ + { + "status": "M", + "paths": [ + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/R3-SHA256SUMS.txt" + ], + "raw": "M\t.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/R3-SHA256SUMS.txt" + }, + { + "status": "M", + "paths": [ + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/coverage-repeat.v1.json" + ], + "raw": "M\t.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/coverage-repeat.v1.json" + }, + { + "status": "M", + "paths": [ + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/maker-report.md" + ], + "raw": "M\t.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/maker-report.md" + }, + { + "status": "M", + "paths": [ + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/maker-summary.v1.json" + ], + "raw": "M\t.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/maker-summary.v1.json" + }, + { + "status": "M", + "paths": [ + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/verification-matrix.v1.json" + ], + "raw": "M\t.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/verification-matrix.v1.json" + }, + { + "status": "M", + "paths": [ + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4/R4-SHA256SUMS.txt" + ], + "raw": "M\t.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4/R4-SHA256SUMS.txt" + }, + { + "status": "M", + "paths": [ + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4/coverage-repeat.v1.json" + ], + "raw": "M\t.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4/coverage-repeat.v1.json" + }, + { + "status": "M", + "paths": [ + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4/maker-report.md" + ], + "raw": "M\t.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4/maker-report.md" + }, + { + "status": "M", + "paths": [ + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4/maker-summary.v1.json" + ], + "raw": "M\t.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4/maker-summary.v1.json" + }, + { + "status": "M", + "paths": [ + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4/verification-matrix.v1.json" + ], + "raw": "M\t.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4/verification-matrix.v1.json" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/R5-SHA256SUMS.txt" + ], + "raw": "A\t.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/R5-SHA256SUMS.txt" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/coverage-capture.v1.json" + ], + "raw": "A\t.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/coverage-capture.v1.json" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/coverage-repeat.v1.json" + ], + "raw": "A\t.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/coverage-repeat.v1.json" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/coverage-run-1.tap" + ], + "raw": "A\t.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/coverage-run-1.tap" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/coverage-run-2.tap" + ], + "raw": "A\t.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/coverage-run-2.tap" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/maker-report.md" + ], + "raw": "A\t.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/maker-report.md" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/maker-summary.v1.json" + ], + "raw": "A\t.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/maker-summary.v1.json" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/run-coverage-capture-verifier.cmd" + ], + "raw": "A\t.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/run-coverage-capture-verifier.cmd" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/verification-matrix.v1.json" + ], + "raw": "A\t.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/verification-matrix.v1.json" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/verify-coverage-capture.cjs" + ], + "raw": "A\t.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/verify-coverage-capture.cjs" + }, + { + "status": "M", + "paths": [ + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/ARTIFACTS.sha256" + ], + "raw": "M\t.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/ARTIFACTS.sha256" + }, + { + "status": "M", + "paths": [ + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/maker-report.md" + ], + "raw": "M\t.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/maker-report.md" + }, + { + "status": "M", + "paths": [ + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verification-observations.v1.json" + ], + "raw": "M\t.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verification-observations.v1.json" + }, + { + "status": "M", + "paths": [ + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.test.cjs" + ], + "raw": "M\t.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.test.cjs" + }, + { + "status": "M", + "paths": [ + ".agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R3.tdd.json" + ], + "raw": "M\t.agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R3.tdd.json" + }, + { + "status": "M", + "paths": [ + ".agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R4.tdd.json" + ], + "raw": "M\t.agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R4.tdd.json" + }, + { + "status": "A", + "paths": [ + ".agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R5.red.json" + ], + "raw": "A\t.agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R5.red.json" + }, + { + "status": "A", + "paths": [ + ".agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R5.tdd.json" + ], + "raw": "A\t.agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R5.tdd.json" + } + ], + "changed_paths": [ + { + "status": "M", + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/R3-SHA256SUMS.txt", + "allowed": true, + "allowed_by": [ + "slice-declaration" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/**" + ] + }, + { + "status": "M", + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/coverage-repeat.v1.json", + "allowed": true, + "allowed_by": [ + "slice-declaration" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/**" + ] + }, + { + "status": "M", + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/maker-report.md", + "allowed": true, + "allowed_by": [ + "slice-declaration" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/**" + ] + }, + { + "status": "M", + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/maker-summary.v1.json", + "allowed": true, + "allowed_by": [ + "slice-declaration" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/**" + ] + }, + { + "status": "M", + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/verification-matrix.v1.json", + "allowed": true, + "allowed_by": [ + "slice-declaration" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/**" + ] + }, + { + "status": "M", + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4/R4-SHA256SUMS.txt", + "allowed": true, + "allowed_by": [ + "slice-declaration" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4/**" + ] + }, + { + "status": "M", + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4/coverage-repeat.v1.json", + "allowed": true, + "allowed_by": [ + "slice-declaration" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4/**" + ] + }, + { + "status": "M", + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4/maker-report.md", + "allowed": true, + "allowed_by": [ + "slice-declaration" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4/**" + ] + }, + { + "status": "M", + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4/maker-summary.v1.json", + "allowed": true, + "allowed_by": [ + "slice-declaration" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4/**" + ] + }, + { + "status": "M", + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4/verification-matrix.v1.json", + "allowed": true, + "allowed_by": [ + "slice-declaration" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/R5-SHA256SUMS.txt", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace", + "report-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/coverage-capture.v1.json", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace", + "report-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/coverage-repeat.v1.json", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace", + "report-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/coverage-run-1.tap", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace", + "report-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/coverage-run-2.tap", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace", + "report-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/maker-report.md", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace", + "report-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/maker-summary.v1.json", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace", + "report-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/run-coverage-capture-verifier.cmd", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace", + "report-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/verification-matrix.v1.json", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace", + "report-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/verify-coverage-capture.cjs", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace", + "report-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/**" + ] + }, + { + "status": "M", + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/ARTIFACTS.sha256", + "allowed": true, + "allowed_by": [ + "slice-declaration" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/**" + ] + }, + { + "status": "M", + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/maker-report.md", + "allowed": true, + "allowed_by": [ + "slice-declaration" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/**" + ] + }, + { + "status": "M", + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verification-observations.v1.json", + "allowed": true, + "allowed_by": [ + "slice-declaration" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/**" + ] + }, + { + "status": "M", + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.test.cjs", + "allowed": true, + "allowed_by": [ + "slice-declaration" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/**" + ] + }, + { + "status": "M", + "path": ".agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R3.tdd.json", + "allowed": true, + "allowed_by": [ + "slice-declaration" + ], + "ownership_matches": [ + ".agent/specs/db-embedding-stats-evidence-transport/evidence/**" + ] + }, + { + "status": "M", + "path": ".agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R4.tdd.json", + "allowed": true, + "allowed_by": [ + "slice-declaration" + ], + "ownership_matches": [ + ".agent/specs/db-embedding-stats-evidence-transport/evidence/**" + ] + }, + { + "status": "A", + "path": ".agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R5.red.json", + "allowed": true, + "allowed_by": [ + "slice-declaration" + ], + "ownership_matches": [ + ".agent/specs/db-embedding-stats-evidence-transport/evidence/**" + ] + }, + { + "status": "A", + "path": ".agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R5.tdd.json", + "allowed": true, + "allowed_by": [ + "slice-declaration" + ], + "ownership_matches": [ + ".agent/specs/db-embedding-stats-evidence-transport/evidence/**" + ] + } + ], + "violations": [], + "epoch_authority": { + "verdict": "PASS", + "evaluated": [], + "errors": [] + }, + "errors": [] +} diff --git a/.agent/specs/release-gates-r9/evidence/plan-governance/diff-db-embedding-stats.json b/.agent/specs/release-gates-r9/evidence/plan-governance/diff-db-embedding-stats.json new file mode 100644 index 00000000..bf57aefc --- /dev/null +++ b/.agent/specs/release-gates-r9/evidence/plan-governance/diff-db-embedding-stats.json @@ -0,0 +1,281 @@ +{ + "schema_version": 2, + "gate": "plan-path-ownership", + "mode": "Diff", + "verdict": "PASS", + "started_at": "2026-07-10T21:53:21.3766571+00:00", + "finished_at": "2026-07-10T21:53:28.0818140+00:00", + "duration_seconds": 6.705, + "plan": { + "path": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates-r9-maker\\.agent\\plans\\2026-07-10-engram-production-ready-master-plan.md", + "expected_sha256": "4388337722e57b48e93515008e4220d6cd2c83de695c4c449387f071c59fb96f", + "observed_sha256": "4388337722e57b48e93515008e4220d6cd2c83de695c4c449387f071c59fb96f", + "hash_match": true, + "ledger_verdict": "PASS" + }, + "state": { + "path": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates-r9-maker\\.agent\\plans\\2026-07-10-engram-production-ready-ownership-state.json", + "sha256": "e41f52fbafa317eb1571c76a7d1de9add543da38a1b2471dbe587a849b21c032", + "verdict": "PASS", + "plan_sha256": "4388337722e57b48e93515008e4220d6cd2c83de695c4c449387f071c59fb96f" + }, + "scope_map": { + "path": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates-r9-maker\\.agent\\plans\\2026-07-10-engram-production-ready-scope-map.json", + "expected_sha256": "fb170d59f3072117489402fd347cd1432c40adbc842811f92227498bcbc92693", + "observed_sha256": "fb170d59f3072117489402fd347cd1432c40adbc842811f92227498bcbc92693", + "verdict": "PASS", + "entries": 67, + "unique_slices": 67 + }, + "live_register": { + "supplied": false, + "path": "", + "sha256": null, + "checked": false, + "rows": 0 + }, + "slice": { + "name": "DB-EMBEDDING-STATS", + "row_count": 1, + "declarations": [ + { + "owner": "DB-EMBEDDING-STATS", + "branch": "work/prc-db-embedding-stats", + "path": "internal/embedding/store.go", + "display": "internal/embedding/store.go", + "kind": "exact", + "line": 19 + }, + { + "owner": "DB-EMBEDDING-STATS", + "branch": "work/prc-db-embedding-stats", + "path": "internal/embedding/store_stats_test.go", + "display": "internal/embedding/store_stats_test.go", + "kind": "exact", + "line": 19 + }, + { + "owner": "DB-EMBEDDING-STATS", + "branch": "work/prc-db-embedding-stats", + "path": ".agent/reports/2026-07-10-db-embedding-stats-maker.md", + "display": ".agent/reports/2026-07-10-db-embedding-stats-maker.md", + "kind": "exact", + "line": 19 + }, + { + "owner": "DB-EMBEDDING-STATS", + "branch": "work/prc-db-embedding-stats", + "path": ".agent/reports/evidence/production-ready/db-embedding-stats", + "display": ".agent/reports/evidence/production-ready/db-embedding-stats/**", + "kind": "prefix", + "line": 19 + }, + { + "owner": "DB-EMBEDDING-STATS", + "branch": "work/prc-db-embedding-stats", + "path": ".agent/specs/db-embedding-stats/evidence", + "display": ".agent/specs/db-embedding-stats/evidence/**", + "kind": "prefix", + "line": 19 + } + ], + "evidence_namespace": { + "kind": "evidence", + "path": ".agent/specs/db-embedding-stats/evidence", + "display": ".agent/specs/db-embedding-stats/evidence/**", + "match_kind": "prefix", + "policy": "literal-row-exception" + }, + "report_namespace": { + "kind": "report", + "path": ".agent/reports/2026-07-10-db-embedding-stats-maker.md", + "display": ".agent/reports/2026-07-10-db-embedding-stats-maker.md", + "match_kind": "exact", + "policy": "literal-row-exception" + } + }, + "git": { + "repository": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates-r9-maker", + "requested_base": "dc891b2d72b1fd63b83e4a630a249241fc389151", + "resolved_base": "dc891b2d72b1fd63b83e4a630a249241fc389151", + "requested_head": "38d6a4fb7ff5f5ae3b6c0066c0a1b806421137df", + "resolved_head": "38d6a4fb7ff5f5ae3b6c0066c0a1b806421137df", + "base_is_ancestor": true, + "name_status_command": "git -c core.quotepath=false diff --name-status --find-renames --find-copies dc891b2d72b1fd63b83e4a630a249241fc389151..38d6a4fb7ff5f5ae3b6c0066c0a1b806421137df --", + "raw_name_status": [ + "A\t.agent/reports/2026-07-10-db-embedding-stats-maker.md", + "A\t.agent/reports/evidence/production-ready/db-embedding-stats/DB-EMBEDDING-STATS.final.json", + "A\t.agent/reports/evidence/production-ready/db-embedding-stats/SHA256SUMS.txt", + "A\t.agent/specs/db-embedding-stats/evidence/DB-EMBEDDING-STATS.red.json", + "A\t.agent/specs/db-embedding-stats/evidence/DB-EMBEDDING-STATS.tdd.json", + "A\t.agent/specs/db-embedding-stats/evidence/coverage.out", + "M\tinternal/embedding/store.go", + "M\tinternal/embedding/store_stats_test.go" + ] + }, + "counts": { + "diff_entries": 8, + "changed_paths": 8, + "violations": 0, + "errors": 0 + }, + "diff_entries": [ + { + "status": "A", + "paths": [ + ".agent/reports/2026-07-10-db-embedding-stats-maker.md" + ], + "raw": "A\t.agent/reports/2026-07-10-db-embedding-stats-maker.md" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/db-embedding-stats/DB-EMBEDDING-STATS.final.json" + ], + "raw": "A\t.agent/reports/evidence/production-ready/db-embedding-stats/DB-EMBEDDING-STATS.final.json" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/db-embedding-stats/SHA256SUMS.txt" + ], + "raw": "A\t.agent/reports/evidence/production-ready/db-embedding-stats/SHA256SUMS.txt" + }, + { + "status": "A", + "paths": [ + ".agent/specs/db-embedding-stats/evidence/DB-EMBEDDING-STATS.red.json" + ], + "raw": "A\t.agent/specs/db-embedding-stats/evidence/DB-EMBEDDING-STATS.red.json" + }, + { + "status": "A", + "paths": [ + ".agent/specs/db-embedding-stats/evidence/DB-EMBEDDING-STATS.tdd.json" + ], + "raw": "A\t.agent/specs/db-embedding-stats/evidence/DB-EMBEDDING-STATS.tdd.json" + }, + { + "status": "A", + "paths": [ + ".agent/specs/db-embedding-stats/evidence/coverage.out" + ], + "raw": "A\t.agent/specs/db-embedding-stats/evidence/coverage.out" + }, + { + "status": "M", + "paths": [ + "internal/embedding/store.go" + ], + "raw": "M\tinternal/embedding/store.go" + }, + { + "status": "M", + "paths": [ + "internal/embedding/store_stats_test.go" + ], + "raw": "M\tinternal/embedding/store_stats_test.go" + } + ], + "changed_paths": [ + { + "status": "A", + "path": ".agent/reports/2026-07-10-db-embedding-stats-maker.md", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "report-namespace" + ], + "ownership_matches": [ + ".agent/reports/2026-07-10-db-embedding-stats-maker.md" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/db-embedding-stats/DB-EMBEDDING-STATS.final.json", + "allowed": true, + "allowed_by": [ + "slice-declaration" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/db-embedding-stats/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/db-embedding-stats/SHA256SUMS.txt", + "allowed": true, + "allowed_by": [ + "slice-declaration" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/db-embedding-stats/**" + ] + }, + { + "status": "A", + "path": ".agent/specs/db-embedding-stats/evidence/DB-EMBEDDING-STATS.red.json", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/specs/db-embedding-stats/evidence/**" + ] + }, + { + "status": "A", + "path": ".agent/specs/db-embedding-stats/evidence/DB-EMBEDDING-STATS.tdd.json", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/specs/db-embedding-stats/evidence/**" + ] + }, + { + "status": "A", + "path": ".agent/specs/db-embedding-stats/evidence/coverage.out", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/specs/db-embedding-stats/evidence/**" + ] + }, + { + "status": "M", + "path": "internal/embedding/store.go", + "allowed": true, + "allowed_by": [ + "slice-declaration" + ], + "ownership_matches": [ + "internal/embedding/store.go" + ] + }, + { + "status": "M", + "path": "internal/embedding/store_stats_test.go", + "allowed": true, + "allowed_by": [ + "slice-declaration" + ], + "ownership_matches": [ + "internal/embedding/store_stats_test.go" + ] + } + ], + "violations": [], + "epoch_authority": { + "verdict": "PASS", + "evaluated": [], + "errors": [] + }, + "errors": [] +} diff --git a/.agent/specs/release-gates-r9/evidence/plan-governance/diff-security-r3.json b/.agent/specs/release-gates-r9/evidence/plan-governance/diff-security-r3.json new file mode 100644 index 00000000..d2f157ff --- /dev/null +++ b/.agent/specs/release-gates-r9/evidence/plan-governance/diff-security-r3.json @@ -0,0 +1,452 @@ +{ + "schema_version": 2, + "gate": "plan-path-ownership", + "mode": "Diff", + "verdict": "PASS", + "started_at": "2026-07-10T21:53:21.2867687+00:00", + "finished_at": "2026-07-10T21:53:27.5203201+00:00", + "duration_seconds": 6.234, + "plan": { + "path": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates-r9-maker\\.agent\\plans\\2026-07-10-engram-production-ready-master-plan.md", + "expected_sha256": "4388337722e57b48e93515008e4220d6cd2c83de695c4c449387f071c59fb96f", + "observed_sha256": "4388337722e57b48e93515008e4220d6cd2c83de695c4c449387f071c59fb96f", + "hash_match": true, + "ledger_verdict": "PASS" + }, + "state": { + "path": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates-r9-maker\\.agent\\plans\\2026-07-10-engram-production-ready-ownership-state.json", + "sha256": "e41f52fbafa317eb1571c76a7d1de9add543da38a1b2471dbe587a849b21c032", + "verdict": "PASS", + "plan_sha256": "4388337722e57b48e93515008e4220d6cd2c83de695c4c449387f071c59fb96f" + }, + "scope_map": { + "path": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates-r9-maker\\.agent\\plans\\2026-07-10-engram-production-ready-scope-map.json", + "expected_sha256": "fb170d59f3072117489402fd347cd1432c40adbc842811f92227498bcbc92693", + "observed_sha256": "fb170d59f3072117489402fd347cd1432c40adbc842811f92227498bcbc92693", + "verdict": "PASS", + "entries": 67, + "unique_slices": 67 + }, + "live_register": { + "supplied": false, + "path": "", + "sha256": null, + "checked": false, + "rows": 0 + }, + "slice": { + "name": "SECURITY-PROJECT-IDENTITY", + "row_count": 1, + "declarations": [ + { + "owner": "SECURITY-PROJECT-IDENTITY", + "branch": "work/prc-security-project-identity-r4", + "path": "internal/db/gorm/project_store.go", + "display": "internal/db/gorm/project_store.go", + "kind": "exact", + "line": 25 + }, + { + "owner": "SECURITY-PROJECT-IDENTITY", + "branch": "work/prc-security-project-identity-r4", + "path": "internal/db/gorm/project_identity_v2_test.go", + "display": "internal/db/gorm/project_identity_v2_test.go", + "kind": "exact", + "line": 25 + }, + { + "owner": "SECURITY-PROJECT-IDENTITY", + "branch": "work/prc-security-project-identity-r4", + "path": "internal/grpcserver/project_identity_v2_test.go", + "display": "internal/grpcserver/project_identity_v2_test.go", + "kind": "exact", + "line": 25 + }, + { + "owner": "SECURITY-PROJECT-IDENTITY", + "branch": "work/prc-security-project-identity-r4", + "path": "internal/proxy/identity.go", + "display": "internal/proxy/identity.go", + "kind": "exact", + "line": 25 + }, + { + "owner": "SECURITY-PROJECT-IDENTITY", + "branch": "work/prc-security-project-identity-r4", + "path": "internal/proxy/identity_test.go", + "display": "internal/proxy/identity_test.go", + "kind": "exact", + "line": 25 + }, + { + "owner": "SECURITY-PROJECT-IDENTITY", + "branch": "work/prc-security-project-identity-r4", + "path": "internal/proxy/identity_process_test.go", + "display": "internal/proxy/identity_process_test.go", + "kind": "exact", + "line": 25 + }, + { + "owner": "SECURITY-PROJECT-IDENTITY", + "branch": "work/prc-security-project-identity-r4", + "path": "plugin/engram/hooks/lib.js", + "display": "plugin/engram/hooks/lib.js", + "kind": "exact", + "line": 25 + }, + { + "owner": "SECURITY-PROJECT-IDENTITY", + "branch": "work/prc-security-project-identity-r4", + "path": "plugin/engram/hooks/project-identity-v2.test.js", + "display": "plugin/engram/hooks/project-identity-v2.test.js", + "kind": "exact", + "line": 25 + }, + { + "owner": "SECURITY-PROJECT-IDENTITY", + "branch": "work/prc-security-project-identity-r4", + "path": "plugin/openclaw-engram/src/identity.ts", + "display": "plugin/openclaw-engram/src/identity.ts", + "kind": "exact", + "line": 25 + }, + { + "owner": "SECURITY-PROJECT-IDENTITY", + "branch": "work/prc-security-project-identity-r4", + "path": "plugin/openclaw-engram/test/project-identity-v2.test.mjs", + "display": "plugin/openclaw-engram/test/project-identity-v2.test.mjs", + "kind": "exact", + "line": 25 + }, + { + "owner": "SECURITY-PROJECT-IDENTITY", + "branch": "work/prc-security-project-identity-r4", + "path": ".agent/specs/security-project-identity/evidence", + "display": ".agent/specs/security-project-identity/evidence/**", + "kind": "prefix", + "line": 25 + }, + { + "owner": "SECURITY-PROJECT-IDENTITY", + "branch": "work/prc-security-project-identity-r4", + "path": ".agent/reports/evidence/production-ready/security-project-identity", + "display": ".agent/reports/evidence/production-ready/security-project-identity/**", + "kind": "prefix", + "line": 25 + } + ], + "evidence_namespace": { + "kind": "evidence", + "path": ".agent/specs/security-project-identity/evidence", + "display": ".agent/specs/security-project-identity/evidence/**", + "match_kind": "prefix", + "policy": "literal-row-exception" + }, + "report_namespace": { + "kind": "report", + "path": ".agent/reports/evidence/production-ready/security-project-identity", + "display": ".agent/reports/evidence/production-ready/security-project-identity/**", + "match_kind": "prefix", + "policy": "literal-row-exception" + } + }, + "git": { + "repository": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates-r9-maker", + "requested_base": "9e2ce4e58a5cded69660ca9ac532d2167f315bb2", + "resolved_base": "9e2ce4e58a5cded69660ca9ac532d2167f315bb2", + "requested_head": "38344455754fe503acbd79d2134141f996adff7f", + "resolved_head": "38344455754fe503acbd79d2134141f996adff7f", + "base_is_ancestor": true, + "name_status_command": "git -c core.quotepath=false diff --name-status --find-renames --find-copies 9e2ce4e58a5cded69660ca9ac532d2167f315bb2..38344455754fe503acbd79d2134141f996adff7f --", + "raw_name_status": [ + "A\t.agent/reports/evidence/production-ready/security-project-identity/SECURITY-PROJECT-IDENTITY-R3-maker-report.md", + "A\t.agent/specs/security-project-identity/evidence/SECURITY-PROJECT-IDENTITY-R3.red.json", + "A\t.agent/specs/security-project-identity/evidence/SECURITY-PROJECT-IDENTITY-R3.tdd.json", + "A\t.agent/specs/security-project-identity/evidence/SECURITY-PROJECT-IDENTITY-R3.verification.json", + "M\t.agent/specs/security-project-identity/evidence/project-identity-v2-vectors.json", + "M\tinternal/db/gorm/project_identity_v2_test.go", + "M\tinternal/db/gorm/project_store.go", + "M\tinternal/grpcserver/project_identity_v2_test.go", + "M\tinternal/proxy/identity.go", + "M\tinternal/proxy/identity_test.go", + "M\tplugin/engram/hooks/lib.js", + "M\tplugin/engram/hooks/project-identity-v2.test.js", + "M\tplugin/openclaw-engram/src/identity.ts", + "M\tplugin/openclaw-engram/test/project-identity-v2.test.mjs" + ] + }, + "counts": { + "diff_entries": 14, + "changed_paths": 14, + "violations": 0, + "errors": 0 + }, + "diff_entries": [ + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/security-project-identity/SECURITY-PROJECT-IDENTITY-R3-maker-report.md" + ], + "raw": "A\t.agent/reports/evidence/production-ready/security-project-identity/SECURITY-PROJECT-IDENTITY-R3-maker-report.md" + }, + { + "status": "A", + "paths": [ + ".agent/specs/security-project-identity/evidence/SECURITY-PROJECT-IDENTITY-R3.red.json" + ], + "raw": "A\t.agent/specs/security-project-identity/evidence/SECURITY-PROJECT-IDENTITY-R3.red.json" + }, + { + "status": "A", + "paths": [ + ".agent/specs/security-project-identity/evidence/SECURITY-PROJECT-IDENTITY-R3.tdd.json" + ], + "raw": "A\t.agent/specs/security-project-identity/evidence/SECURITY-PROJECT-IDENTITY-R3.tdd.json" + }, + { + "status": "A", + "paths": [ + ".agent/specs/security-project-identity/evidence/SECURITY-PROJECT-IDENTITY-R3.verification.json" + ], + "raw": "A\t.agent/specs/security-project-identity/evidence/SECURITY-PROJECT-IDENTITY-R3.verification.json" + }, + { + "status": "M", + "paths": [ + ".agent/specs/security-project-identity/evidence/project-identity-v2-vectors.json" + ], + "raw": "M\t.agent/specs/security-project-identity/evidence/project-identity-v2-vectors.json" + }, + { + "status": "M", + "paths": [ + "internal/db/gorm/project_identity_v2_test.go" + ], + "raw": "M\tinternal/db/gorm/project_identity_v2_test.go" + }, + { + "status": "M", + "paths": [ + "internal/db/gorm/project_store.go" + ], + "raw": "M\tinternal/db/gorm/project_store.go" + }, + { + "status": "M", + "paths": [ + "internal/grpcserver/project_identity_v2_test.go" + ], + "raw": "M\tinternal/grpcserver/project_identity_v2_test.go" + }, + { + "status": "M", + "paths": [ + "internal/proxy/identity.go" + ], + "raw": "M\tinternal/proxy/identity.go" + }, + { + "status": "M", + "paths": [ + "internal/proxy/identity_test.go" + ], + "raw": "M\tinternal/proxy/identity_test.go" + }, + { + "status": "M", + "paths": [ + "plugin/engram/hooks/lib.js" + ], + "raw": "M\tplugin/engram/hooks/lib.js" + }, + { + "status": "M", + "paths": [ + "plugin/engram/hooks/project-identity-v2.test.js" + ], + "raw": "M\tplugin/engram/hooks/project-identity-v2.test.js" + }, + { + "status": "M", + "paths": [ + "plugin/openclaw-engram/src/identity.ts" + ], + "raw": "M\tplugin/openclaw-engram/src/identity.ts" + }, + { + "status": "M", + "paths": [ + "plugin/openclaw-engram/test/project-identity-v2.test.mjs" + ], + "raw": "M\tplugin/openclaw-engram/test/project-identity-v2.test.mjs" + } + ], + "changed_paths": [ + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/security-project-identity/SECURITY-PROJECT-IDENTITY-R3-maker-report.md", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "report-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/security-project-identity/**" + ] + }, + { + "status": "A", + "path": ".agent/specs/security-project-identity/evidence/SECURITY-PROJECT-IDENTITY-R3.red.json", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/specs/security-project-identity/evidence/**" + ] + }, + { + "status": "A", + "path": ".agent/specs/security-project-identity/evidence/SECURITY-PROJECT-IDENTITY-R3.tdd.json", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/specs/security-project-identity/evidence/**" + ] + }, + { + "status": "A", + "path": ".agent/specs/security-project-identity/evidence/SECURITY-PROJECT-IDENTITY-R3.verification.json", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/specs/security-project-identity/evidence/**" + ] + }, + { + "status": "M", + "path": ".agent/specs/security-project-identity/evidence/project-identity-v2-vectors.json", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/specs/security-project-identity/evidence/**" + ] + }, + { + "status": "M", + "path": "internal/db/gorm/project_identity_v2_test.go", + "allowed": true, + "allowed_by": [ + "slice-declaration" + ], + "ownership_matches": [ + "internal/db/gorm/project_identity_v2_test.go" + ] + }, + { + "status": "M", + "path": "internal/db/gorm/project_store.go", + "allowed": true, + "allowed_by": [ + "slice-declaration" + ], + "ownership_matches": [ + "internal/db/gorm/project_store.go" + ] + }, + { + "status": "M", + "path": "internal/grpcserver/project_identity_v2_test.go", + "allowed": true, + "allowed_by": [ + "slice-declaration" + ], + "ownership_matches": [ + "internal/grpcserver/project_identity_v2_test.go" + ] + }, + { + "status": "M", + "path": "internal/proxy/identity.go", + "allowed": true, + "allowed_by": [ + "slice-declaration" + ], + "ownership_matches": [ + "internal/proxy/identity.go" + ] + }, + { + "status": "M", + "path": "internal/proxy/identity_test.go", + "allowed": true, + "allowed_by": [ + "slice-declaration" + ], + "ownership_matches": [ + "internal/proxy/identity_test.go" + ] + }, + { + "status": "M", + "path": "plugin/engram/hooks/lib.js", + "allowed": true, + "allowed_by": [ + "slice-declaration" + ], + "ownership_matches": [ + "plugin/engram/hooks/lib.js" + ] + }, + { + "status": "M", + "path": "plugin/engram/hooks/project-identity-v2.test.js", + "allowed": true, + "allowed_by": [ + "slice-declaration" + ], + "ownership_matches": [ + "plugin/engram/hooks/project-identity-v2.test.js" + ] + }, + { + "status": "M", + "path": "plugin/openclaw-engram/src/identity.ts", + "allowed": true, + "allowed_by": [ + "slice-declaration" + ], + "ownership_matches": [ + "plugin/openclaw-engram/src/identity.ts" + ] + }, + { + "status": "M", + "path": "plugin/openclaw-engram/test/project-identity-v2.test.mjs", + "allowed": true, + "allowed_by": [ + "slice-declaration" + ], + "ownership_matches": [ + "plugin/openclaw-engram/test/project-identity-v2.test.mjs" + ] + } + ], + "violations": [], + "epoch_authority": { + "verdict": "PASS", + "evaluated": [], + "errors": [] + }, + "errors": [] +} diff --git a/.agent/specs/release-gates-r9/evidence/plan-governance/ledger-live.json b/.agent/specs/release-gates-r9/evidence/plan-governance/ledger-live.json new file mode 100644 index 00000000..f6c60573 --- /dev/null +++ b/.agent/specs/release-gates-r9/evidence/plan-governance/ledger-live.json @@ -0,0 +1,4579 @@ +{ + "schema_version": 2, + "gate": "plan-path-ownership", + "mode": "Ledger", + "verdict": "PASS", + "started_at": "2026-07-10T21:52:35.5855851+00:00", + "finished_at": "2026-07-10T21:52:41.0958358+00:00", + "duration_seconds": 5.51, + "plan": { + "path": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates-r9-maker\\.agent\\plans\\2026-07-10-engram-production-ready-master-plan.md", + "expected_sha256": "4388337722e57b48e93515008e4220d6cd2c83de695c4c449387f071c59fb96f", + "observed_sha256": "4388337722e57b48e93515008e4220d6cd2c83de695c4c449387f071c59fb96f", + "hash_match": true + }, + "state": { + "path": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates-r9-maker\\.agent\\plans\\2026-07-10-engram-production-ready-ownership-state.json", + "sha256": "e41f52fbafa317eb1571c76a7d1de9add543da38a1b2471dbe587a849b21c032", + "verdict": "PASS", + "plan_sha256": "4388337722e57b48e93515008e4220d6cd2c83de695c4c449387f071c59fb96f" + }, + "scope_map": { + "path": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates-r9-maker\\.agent\\plans\\2026-07-10-engram-production-ready-scope-map.json", + "expected_sha256": "fb170d59f3072117489402fd347cd1432c40adbc842811f92227498bcbc92693", + "observed_sha256": "fb170d59f3072117489402fd347cd1432c40adbc842811f92227498bcbc92693", + "verdict": "PASS", + "entries": 67, + "unique_slices": 67 + }, + "live_register": { + "supplied": true, + "path": "D:\\Dev\\engram\\.agent\\reports\\production-readiness-evidence-register.json", + "sha256": "f0e0e8de5276d41a98c83da4293f58d4ae898cd3bb38a7b5fef4c3ba80ada14a", + "checked": true, + "rows": 67 + }, + "counts": { + "maker_slices": 57, + "declarations": 351, + "exact_paths": 328, + "prefixes": 23, + "repeated_exact_paths": 34, + "prefix_intersections": 2, + "undeclared_prefix_intersections": 0, + "declared_epochs": 36, + "state_epochs": 36, + "errors": 0 + }, + "slices": [ + { + "slice": "PLAN-GOVERNANCE", + "branch": "work/prc-release-gates-revision9-maker", + "paths": [ + ".agent/plans/2026-07-10-engram-production-ready-master-plan.md", + ".agent/plans/2026-07-10-engram-production-ready-ownership-state.json", + ".agent/plans/2026-07-10-engram-production-ready-scope-map.json", + ".agent/plans/2026-07-10-engram-production-ready-active-diff-contracts.json", + ".agent/specs/release-gates-r9/evidence/plan-governance/**", + ".agent/reports/2026-07-11-release-gates-r9-plan-governance.md" + ], + "line": 6 + }, + { + "slice": "DB-BULKOPS", + "branch": "work/prc-db-bulkops", + "paths": [ + "internal/bulkops/facade.go", + "internal/bulkops/facade_test.go", + "internal/bulkops/rollback.go", + "internal/bulkops/rollback_test.go", + "internal/db/gorm/candidate_store.go", + "internal/db/gorm/candidate_store_test.go", + "internal/mcp/tools_bulkops.go", + "internal/mcp/tools_dryrun_test.go", + "pkg/models/snapshot.go", + ".agent/reports/2026-07-10-db-bulkops-capture-lock-rework-maker.md", + ".agent/reports/2026-07-10-db-bulkops-sibling-rework-maker.md", + ".agent/specs/production-ready-db-bulkops/evidence/**", + ".agent/reports/evidence/production-ready/db-bulkops-sibling-rework/**" + ], + "line": 7 + }, + { + "slice": "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK", + "branch": "work/prc-db-bulkops", + "paths": [ + "internal/db/gorm/candidate_store.go", + "internal/db/gorm/candidate_store_test.go", + "internal/mcp/tools_bulkops.go", + "internal/mcp/tools_dryrun_test.go", + ".agent/reports/2026-07-10-db-bulkops-behavioral-edge-rework-maker.md", + ".agent/reports/2026-07-10-db-bulkops-behavioral-edge-rework-maker-3.md", + ".agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/**" + ], + "line": 8 + }, + { + "slice": "DB-TEST-POOL-HYGIENE", + "branch": "work/prc-db-test-pool-hygiene-evidence-r2", + "paths": [ + "internal/db/gorm/candidate_store_test.go", + ".agent/reports/2026-07-10-db-test-pool-hygiene-maker.md", + ".agent/reports/2026-07-10-db-test-pool-hygiene-evidence-revision-maker.md", + ".agent/reports/evidence/production-ready/db-test-pool-hygiene/**" + ], + "line": 9 + }, + { + "slice": "DB-GOVERNANCE", + "branch": "work/prc-db-governance", + "paths": [ + "internal/db/gorm/candidate_store.go", + "internal/db/gorm/candidate_store_test.go", + "internal/db/gorm/rule_arbiter_store_test.go", + "internal/db/gorm/rule_governance_store.go", + "internal/db/gorm/rule_governance_store_test.go", + "internal/db/gorm/rule_governance_rg3_store_test.go", + "internal/db/gorm/migration_rule_governance.go", + "internal/db/gorm/migration_rule_arbiter.go", + "internal/db/gorm/migration_rule_governance_snapshot_statuses.go" + ], + "line": 10 + }, + { + "slice": "CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK", + "branch": "work/prc-candidate-review-snapshot-rollback", + "paths": [ + "internal/reviewpacket/candidate.go", + "internal/reviewpacket/candidate_test.go", + "internal/db/gorm/candidate_store.go", + "internal/db/gorm/candidate_store_test.go", + "internal/db/gorm/snapshot_store.go", + "internal/db/gorm/snapshot_store_test.go", + "internal/bulkops/rollback_test.go", + "tests/critical/candidate_review/candidate_review_snapshot_rollback_test.go" + ], + "line": 11 + }, + { + "slice": "INGEST-DOC-SNAPSHOT-DEMOLITION", + "branch": "work/prc-ingest-doc-snapshot-demolition", + "paths": [ + "internal/bulkops/facade.go", + "internal/bulkops/facade_test.go", + "pkg/models/snapshot.go", + "pkg/models/snapshot_test.go", + "internal/mcp/ingest_snapshot_contract_test.go" + ], + "line": 13 + }, + { + "slice": "DB-AUTH", + "branch": "work/prc-db-auth", + "paths": [ + "internal/db/gorm/user_store.go", + "internal/db/gorm/user_store_test.go", + "internal/worker/auth_handlers.go", + "internal/worker/auth_handlers_lifecycle_test.go", + ".agent/reports/db-auth-rework-maker-2026-07-10.md" + ], + "line": 14 + }, + { + "slice": "AUTH-BOOTSTRAP-SECURITY", + "branch": "work/prc-auth-bootstrap-security", + "paths": [ + "internal/config/config.go", + "internal/config/config_test.go", + "internal/config/envnames.go", + "internal/db/gorm/user_store.go", + "internal/worker/middleware.go", + "internal/worker/middleware_test.go", + "internal/worker/auth_handlers.go", + "internal/worker/auth_bootstrap_limiter.go", + "internal/worker/auth_bootstrap_limiter_test.go", + "internal/worker/auth_bootstrap_security_test.go", + "internal/worker/service.go", + "tests/critical/auth_bootstrap/first_admin_bootstrap_test.go", + "scripts/production-smoke/customer/run-auth-bootstrap-adversary.ps1" + ], + "line": 15 + }, + { + "slice": "DURABLE-AUDIT-BOUNDARIES", + "branch": "work/prc-durable-audit-boundaries", + "paths": [ + "internal/db/gorm/domain_owner_store.go", + "internal/db/gorm/domain_owner_store_test.go", + "internal/db/gorm/user_store.go", + "internal/worker/auth_handlers.go", + "internal/worker/auth_audit_durability_test.go", + "internal/bulkops/facade.go", + "internal/bulkops/audit_durability_test.go", + "scripts/production-smoke/customer/run-durable-audit-faults.ps1" + ], + "line": 16 + }, + { + "slice": "DB-CRYSTALLIZATION", + "branch": "work/prc-db-crystallization", + "paths": [ + "internal/worker/handlers_hooks_crystallization_integration_test.go" + ], + "line": 17 + }, + { + "slice": "CRYSTALLIZATION-DREAM-CYCLE-CORRECTNESS", + "branch": "work/prc-crystallization-dream-cycle-correctness", + "paths": [ + "internal/worker/dream_cycle.go", + "internal/worker/dream_cycle_test.go", + ".agent/reports/2026-07-10-crystallization-dream-cycle-correctness-maker.md", + ".agent/e/cdc/**" + ], + "line": 18 + }, + { + "slice": "DB-EMBEDDING-STATS", + "branch": "work/prc-db-embedding-stats", + "paths": [ + "internal/embedding/store.go", + "internal/embedding/store_stats_test.go", + ".agent/reports/2026-07-10-db-embedding-stats-maker.md", + ".agent/reports/evidence/production-ready/db-embedding-stats/**", + ".agent/specs/db-embedding-stats/evidence/**" + ], + "line": 19 + }, + { + "slice": "DB-EMBEDDING-EVIDENCE-TRANSPORT", + "branch": "work/prc-db-embedding-evidence-transport-r6", + "paths": [ + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/**", + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/**", + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4/**", + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/**", + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/**", + ".agent/specs/db-embedding-stats-evidence-transport/evidence/**" + ], + "line": 20 + }, + { + "slice": "DB-REAPER", + "branch": "work/prc-db-reaper-shutdown-r4", + "paths": [ + "internal/worker/reaper/reaper.go", + "internal/worker/reaper/reaper_test.go" + ], + "line": 21 + }, + { + "slice": "SECURITY-TOOLCHAIN", + "branch": "work/prc-security-toolchain", + "paths": [ + "go.mod", + "go.sum", + "Dockerfile" + ], + "line": 22 + }, + { + "slice": "RELEASE-GATES", + "branch": "work/prc-release-gates-revision9-maker", + "paths": [ + ".github/workflows/test.yml", + "scripts/production-gates/assert-plan-path-ownership.ps1", + "scripts/production-gates/assert-active-candidate-path-authority.ps1", + "scripts/production-gates/run-db-suite.ps1", + ".agent/specs/release-gates-r9/evidence/release-gates/**", + ".agent/reports/2026-07-11-release-gates-r9-maker.md" + ], + "line": 23 + }, + { + "slice": "IMAGE-REMEDIATION", + "branch": "work/prc-image-remediation", + "paths": [ + "Dockerfile", + "cmd/engram-healthcheck/main.go", + "cmd/engram-healthcheck/main_test.go", + "apps/operator-console/package.json", + "apps/operator-console/package-lock.json", + "deploy/postgres/Dockerfile", + "docker-compose.yml", + "deploy/docker-compose.runtime.yml", + "docs/DEPLOYMENT.md", + "docs/PRODUCTION-TESTING-PLAYBOOK.md", + ".github/workflows/test.yml", + ".github/workflows/docker.yaml", + ".github/workflows/docker-publish.yml", + "scripts/production-gates/build-and-scan-images.ps1", + "tests/critical/runtime/image_runtime_contract_test.go", + "tests/critical/runtime/postgres_image_contract_test.go" + ], + "line": 24 + }, + { + "slice": "SECURITY-PROJECT-IDENTITY", + "branch": "work/prc-security-project-identity-r4", + "paths": [ + "internal/db/gorm/project_store.go", + "internal/db/gorm/project_identity_v2_test.go", + "internal/grpcserver/project_identity_v2_test.go", + "internal/proxy/identity.go", + "internal/proxy/identity_test.go", + "internal/proxy/identity_process_test.go", + "plugin/engram/hooks/lib.js", + "plugin/engram/hooks/project-identity-v2.test.js", + "plugin/openclaw-engram/src/identity.ts", + "plugin/openclaw-engram/test/project-identity-v2.test.mjs", + ".agent/specs/security-project-identity/evidence/**", + ".agent/reports/evidence/production-ready/security-project-identity/**" + ], + "line": 25 + }, + { + "slice": "OPENCLAW-RELEASE", + "branch": "work/prc-openclaw-release", + "paths": [ + "plugin/openclaw-engram/.gitignore", + "plugin/openclaw-engram/package.json", + "plugin/openclaw-engram/package-lock.json", + "plugin/openclaw-engram/openclaw.plugin.json", + "plugin/openclaw-engram/README.md", + ".github/workflows/plugin-publish.yml", + "docs/RELEASE-PROTOCOL.md" + ], + "line": 26 + }, + { + "slice": "UPDATE-LIFECYCLE", + "branch": "work/prc-security-updater", + "paths": [ + "internal/update/update.go", + "internal/update/update_test.go", + "internal/worker/handlers_update.go", + "internal/worker/handlers_update_test.go", + "scripts/install.sh", + "scripts/install.ps1", + ".goreleaser.yaml", + ".github/workflows/release.yaml", + "plugin/engram/hooks/hook-cli.test.js" + ], + "line": 27 + }, + { + "slice": "DOCUMENT-INGEST-PUBLIC-TRUTH", + "branch": "work/prc-document-ingest-public-truth", + "paths": [ + "internal/mcp/server.go", + "internal/mcp/ingest_document_description_test.go" + ], + "line": 29 + }, + { + "slice": "MCP-STRUCTURED-INPUT-VALIDATION", + "branch": "work/prc-mcp-structured-input-validation", + "paths": [ + "internal/mcp/coerce.go", + "internal/mcp/coerce_test.go", + "internal/mcp/tools_candidates.go", + "internal/mcp/tools_candidates_test.go", + "internal/mcp/tools_memory.go", + "internal/mcp/tools_memory_edit_test.go", + "internal/mcp/tools_memory_significance.go", + "internal/mcp/tools_memory_significance_test.go", + "internal/mcp/tools_store_consolidated.go", + "internal/mcp/tools_settings.go", + "internal/mcp/tools_settings_test.go", + "internal/mcp/tools_documents_v2.go", + "internal/mcp/tools_rule_governance.go", + "internal/mcp/tools_rule_governance_test.go", + "internal/mcp/structured_input_validation_test.go" + ], + "line": 31 + }, + { + "slice": "REDACTION-LIVE-CONTRACT", + "branch": "work/prc-redaction-live-contract", + "paths": [ + "internal/redaction/layer.go", + "internal/redaction/layer_test.go", + "internal/redaction/rejection_test.go", + "internal/mcp/redaction_guard.go", + "internal/mcp/redaction_guard_test.go", + "internal/mcp/tools_memory.go", + "internal/mcp/tools_rules.go", + "internal/mcp/tools_memory_redaction_audit_test.go", + "internal/mcp/tools_rules_redaction_audit_test.go", + "internal/worker/service.go", + "internal/worker/service_redaction_test.go", + "docs/operating-engram.md", + ".agent/reports/evidence/production-ready/redaction-live-contract/**" + ], + "line": 32 + }, + { + "slice": "RETRIEVAL-VECTOR-CONTRACT", + "branch": "work/prc-retrieval-vector-contract", + "paths": [ + "internal/retrieval/hybrid_integration_test.go" + ], + "line": 34 + }, + { + "slice": "STATIC-EMBED-CONTRACT", + "branch": "work/prc-static-embed-contract", + "paths": [ + "internal/worker/static_embed_test.go" + ], + "line": 35 + }, + { + "slice": "PRE-V5-UPGRADE-CONTRACT", + "branch": "work/prc-pre-v5-upgrade-contract", + "paths": [ + "internal/db/gorm/migrations_integration_test.go", + "internal/grpcserver/credential_migration_test.go", + "tests/fixtures/pre-v5/**", + "tests/critical/recovery/pre_v5_upgrade_test.go", + "scripts/production-smoke/customer/run-pre-v5-upgrade.ps1" + ], + "line": 36 + }, + { + "slice": "T007-COMPAT-DEMOLITION-CLASSIFICATION", + "branch": "work/prc-t007-compat-classification", + "paths": [ + "internal/mcp/store_memory_compat_t007_test.go" + ], + "line": 37 + }, + { + "slice": "DB-RULES-ISOLATION", + "branch": "work/prc-db-rules-isolation", + "paths": [ + "internal/worker/handlers_rules_test.go", + "scripts/production-gates/run-db-rules-isolation.ps1" + ], + "line": 38 + }, + { + "slice": "COVERAGE-CMD-ENGRAM", + "branch": "work/prc-coverage-cmd-engram", + "paths": [ + "cmd/engram/production_readiness_coverage_test.go" + ], + "line": 39 + }, + { + "slice": "COVERAGE-CMD-SERVER", + "branch": "work/prc-coverage-cmd-server", + "paths": [ + "cmd/engram-server/production_readiness_coverage_test.go" + ], + "line": 40 + }, + { + "slice": "COVERAGE-UPDATE", + "branch": "work/prc-coverage-update", + "paths": [ + "internal/update/production_readiness_coverage_test.go" + ], + "line": 41 + }, + { + "slice": "COVERAGE-WORKER", + "branch": "work/prc-coverage-worker", + "paths": [ + "internal/worker/production_readiness_coverage_test.go" + ], + "line": 43 + }, + { + "slice": "COVERAGE-MCP", + "branch": "work/prc-coverage-mcp", + "paths": [ + "internal/mcp/production_readiness_coverage_test.go" + ], + "line": 44 + }, + { + "slice": "COVERAGE-GORM", + "branch": "work/prc-coverage-gorm", + "paths": [ + "internal/db/gorm/production_readiness_coverage_test.go" + ], + "line": 45 + }, + { + "slice": "COVERAGE-LOOM", + "branch": "work/prc-coverage-loom", + "paths": [ + "internal/handlers/loom/production_readiness_coverage_test.go" + ], + "line": 46 + }, + { + "slice": "DEPLOYMENT-ROLLBACK", + "branch": "work/prc-deployment-rollback", + "paths": [ + "docker-compose.yml", + "deploy/docker-compose.runtime.yml", + "deploy/docker-compose.operator-web-standalone.yml", + "deploy/entrypoint-server.sh", + "deploy/healthcheck-server.sh", + "deploy/verify-rollback.ps1", + "deploy/verify-runtime-policy.ps1" + ], + "line": 47 + }, + { + "slice": "RECOVERY-DATA", + "branch": "work/prc-recovery-data", + "paths": [ + "scripts/recovery/start-disposable-postgres.ps1", + "scripts/recovery/verify-postgres-roundtrip.ps1", + "scripts/recovery/seed-recovery-fixture.ps1", + "scripts/recovery/assert-recovery-fixture.ps1", + "tests/critical/recovery/postgres_roundtrip_test.go" + ], + "line": 48 + }, + { + "slice": "OBSERVABILITY-OTLP", + "branch": "work/prc-observability-otlp", + "paths": [ + "internal/module/obs/logging.go", + "internal/module/obs/logging_test.go", + "internal/module/obs/meter.go", + "internal/module/obs/meter_test.go", + "internal/module/obs/metrics.go", + "internal/module/obs/metrics_test.go", + "cmd/engram-server/main.go", + "cmd/engram-server/main_test.go", + "scripts/production-smoke/verify-otlp.ps1" + ], + "line": 49 + }, + { + "slice": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "paths": [ + "internal/scope/domain_policy.go", + "internal/scope/domain_policy_test.go", + "internal/scope/filter.go", + "internal/scope/filter_test.go", + "internal/scope/filter_principal_test.go", + "internal/scope/filter_w4_test.go", + "internal/principalmemory/access_policy.go", + "internal/principalmemory/access_policy_test.go", + "internal/principalmemory/domain_registry.go", + "internal/principalmemory/domain_registry_test.go", + "internal/principalmemory/query_service.go", + "internal/principalmemory/query_service_test.go", + "internal/mcp/tools_principal_memory.go", + "internal/mcp/tools_principal_memory_test.go", + "internal/mcp/tools_recall_principal_test.go", + "internal/mcp/recall_visibility_backfill_test.go", + "internal/mcp/store_memory_principal_test.go", + "internal/worker/handlers_principal_memory.go", + "internal/worker/handlers_principal_memory_test.go", + "internal/worker/scope_bypass_w4_test.go", + "internal/worker/retention.go", + "internal/worker/retention_test.go", + "internal/db/gorm/memory_store.go", + "internal/db/gorm/memory_store_principal_test.go", + "internal/db/gorm/memory_store_principal_query_test.go", + "internal/db/gorm/purge_store_test.go", + "tests/critical/data_boundaries/principal_project_retention_test.go" + ], + "line": 50 + }, + { + "slice": "CRITICAL-HARNESS", + "branch": "work/prc-critical-harness", + "paths": [ + "tests/critical/customer_mode/customer_mode_test.go", + "tests/critical/customer_mode/compatibility_test.go", + "tests/critical/customer_mode/cross_agent_test.go", + "scripts/production-smoke/customer/run-customer-mode.ps1", + "scripts/production-smoke/customer/run-client-compatibility.ps1", + "scripts/production-smoke/customer/run-cross-agent.ps1", + "scripts/production-smoke/customer/run-diagnostic-matrix.ps1", + "scripts/production-smoke/customer/assert-product-works.ps1" + ], + "line": 51 + }, + { + "slice": "CORE-PUBLIC-TRUTH", + "branch": "work/prc-core-public-truth", + "paths": [ + "README.md", + "README.ru.md", + "README.zh.md", + "CONTRIBUTING.md", + "CHANGELOG.md", + "Makefile", + ".env.example", + "docs/DEPLOYMENT.md", + "docs/MIGRATION.md", + "docs/PRODUCTION-TESTING-PLAYBOOK.md", + "docs/arch/CONFIGURATION.md", + "docs/arch/QUICKSTART.md", + "docs/release-notes/v6.43.0.md", + "docs/public/engram.jpg", + "plugin/engram/commands/setup.md", + "plugin/engram/commands/doctor.md" + ], + "line": 52 + }, + { + "slice": "FINAL-PUBLIC-TRUTH", + "branch": "work/prc-final-public-truth", + "paths": [ + "README.md", + "README.ru.md", + "README.zh.md", + "CONTRIBUTING.md", + "CHANGELOG.md", + "Makefile", + ".env.example", + "docs/DEPLOYMENT.md", + "docs/MIGRATION.md", + "docs/PRODUCTION-TESTING-PLAYBOOK.md", + "docs/operating-engram.md", + "docs/arch/CONFIGURATION.md", + "docs/arch/QUICKSTART.md", + "docs/public/engram.jpg", + "plugin/engram/commands/setup.md", + "plugin/engram/commands/doctor.md" + ], + "line": 53 + }, + { + "slice": "LAUNCHER-FIRST-RUN", + "branch": "work/prc-launcher-first-run", + "paths": [ + "cmd/engram/main.go", + "cmd/engram/main_test.go", + "cmd/engram/wiring.go", + "cmd/engram/exec_windows.go", + "cmd/engram/exec_unix.go", + "plugin/engram/.engram-project", + "plugin/engram/scripts/run-engram.js", + "plugin/engram/scripts/run-engram.test.js", + "plugin/engram/scripts/ensure-binary.js", + "plugin/engram/scripts/ensure-binary.test.js" + ], + "line": 54 + }, + { + "slice": "OC-INTEGRATION", + "branch": "work/prc-operator-console-integration", + "paths": [ + "apps/operator-console/**" + ], + "line": 55 + }, + { + "slice": "S4B-CONTRACT", + "branch": "work/prc-s4b-contract", + "paths": [ + ".agent/specs/engram-v7-directives-surfacing/**" + ], + "line": 56 + }, + { + "slice": "V7-S4B-BACKEND", + "branch": "work/prc-v7-s4b-backend", + "paths": [ + "internal/cognitive/s4bsurfacing/**" + ], + "line": 57 + }, + { + "slice": "V7-CORE-CALLPATH", + "branch": "work/prc-v7-core-callpath", + "paths": [ + "internal/cognitive/core/event_bus.go", + "internal/cognitive/core/event_bus_test.go", + "internal/cognitive/core/hint_queue.go", + "internal/cognitive/core/hint_queue_test.go", + "internal/cognitive/s3ambient/queue.go", + "internal/cognitive/s3ambient/subsystem.go" + ], + "line": 58 + }, + { + "slice": "V7-RUNTIME-WIRING", + "branch": "work/prc-v7-runtime-wiring", + "paths": [ + "internal/worker/service.go", + "internal/worker/service_v7_integration_test.go", + "internal/worker/handlers_stats_v7.go", + "internal/worker/handlers_stats_v7_test.go" + ], + "line": 59 + }, + { + "slice": "V7-TELEMETRY-WIRING", + "branch": "work/prc-v7-telemetry-wiring", + "paths": [ + "internal/cognitive/s5/metrics.go", + "internal/cognitive/s5/provider.go", + "internal/cognitive/s5/provider_test.go", + "internal/cognitive/s5/source_adapter.go", + "internal/cognitive/s5/source_adapter_test.go" + ], + "line": 60 + }, + { + "slice": "ROADMAP-RECONCILIATION", + "branch": "work/prc-roadmap-reconciliation", + "paths": [ + ".agent/specs/roadmap.md", + ".agent/specs/ui-surface-ledger.md", + ".agent/specs/operator-console-production-integration/**", + ".agent/specs/engram-v7-ambient/spec.md", + ".agent/specs/engram-v7-ambient/plan.md", + ".agent/specs/engram-v7-ambient/checklists/general.md", + ".agent/specs/engram-v7-ambient/changes/CR-001-initial-scope/change.md", + ".agent/specs/engram-v7-ambient/changes/CR-001-initial-scope/tasks.md" + ], + "line": 61 + }, + { + "slice": "NORTHSTAR-CI-A-CONTRACTS", + "branch": "work/prc-northstar-ci-a-contracts", + "paths": [ + ".agent/specs/engram-absorption/ci-a-dense-vector/spec.md", + ".agent/specs/engram-absorption/ci-a-dense-vector/plan.md", + ".agent/specs/engram-absorption/ci-a-dense-vector/checklists/general.md", + ".agent/specs/engram-absorption/ci-a-dense-vector/changes/CR-001-initial-scope/change.md", + ".agent/specs/engram-absorption/ci-a-dense-vector/changes/CR-001-initial-scope/tasks.md" + ], + "line": 62 + }, + { + "slice": "NORTHSTAR-CI-B-CONTRACTS", + "branch": "work/prc-northstar-ci-b-contracts", + "paths": [ + ".agent/specs/engram-absorption/ci-b-graph-watcher-context/spec.md", + ".agent/specs/engram-absorption/ci-b-graph-watcher-context/plan.md", + ".agent/specs/engram-absorption/ci-b-graph-watcher-context/checklists/general.md", + ".agent/specs/engram-absorption/ci-b-graph-watcher-context/changes/CR-001-initial-scope/change.md", + ".agent/specs/engram-absorption/ci-b-graph-watcher-context/changes/CR-001-initial-scope/tasks.md" + ], + "line": 63 + }, + { + "slice": "NORTHSTAR-BOOK-CONTRACTS", + "branch": "work/prc-northstar-book-contracts", + "paths": [ + ".agent/specs/engram-absorption/book/prd.md", + ".agent/specs/engram-absorption/book/spec.md", + ".agent/specs/engram-absorption/book/plan.md", + ".agent/specs/engram-absorption/book/checklists/general.md", + ".agent/specs/engram-absorption/book/changes/CR-001-initial-scope/change.md", + ".agent/specs/engram-absorption/book/changes/CR-001-initial-scope/tasks.md" + ], + "line": 64 + }, + { + "slice": "NORTHSTAR-MEM-CONTRACTS", + "branch": "work/prc-northstar-mem-contracts", + "paths": [ + ".agent/specs/engram-absorption/mem-residual/spec.md", + ".agent/specs/engram-absorption/mem-residual/plan.md", + ".agent/specs/engram-absorption/mem-residual/checklists/general.md", + ".agent/specs/engram-absorption/mem-residual/changes/CR-001-initial-scope/change.md", + ".agent/specs/engram-absorption/mem-residual/changes/CR-001-initial-scope/tasks.md" + ], + "line": 65 + }, + { + "slice": "NORTHSTAR-EFFECTIVENESS-CONTRACTS", + "branch": "work/prc-northstar-effectiveness-contracts", + "paths": [ + ".agent/specs/engram-effectiveness/production-ready-residual/spec.md", + ".agent/specs/engram-effectiveness/production-ready-residual/plan.md", + ".agent/specs/engram-effectiveness/production-ready-residual/checklists/general.md", + ".agent/specs/engram-effectiveness/production-ready-residual/changes/CR-001-initial-scope/change.md", + ".agent/specs/engram-effectiveness/production-ready-residual/changes/CR-001-initial-scope/tasks.md" + ], + "line": 66 + }, + { + "slice": "NORTHSTAR-SETTINGS-CONTRACTS", + "branch": "work/prc-northstar-settings-contracts", + "paths": [ + ".agent/specs/settings-store/production-ready-residual/spec.md", + ".agent/specs/settings-store/production-ready-residual/plan.md", + ".agent/specs/settings-store/production-ready-residual/checklists/general.md", + ".agent/specs/settings-store/production-ready-residual/changes/CR-001-initial-scope/change.md", + ".agent/specs/settings-store/production-ready-residual/changes/CR-001-initial-scope/tasks.md" + ], + "line": 67 + } + ], + "declarations": [ + { + "owner": "PLAN-GOVERNANCE", + "branch": "work/prc-release-gates-revision9-maker", + "path": ".agent/plans/2026-07-10-engram-production-ready-master-plan.md", + "display": ".agent/plans/2026-07-10-engram-production-ready-master-plan.md", + "kind": "exact", + "line": 6 + }, + { + "owner": "PLAN-GOVERNANCE", + "branch": "work/prc-release-gates-revision9-maker", + "path": ".agent/plans/2026-07-10-engram-production-ready-ownership-state.json", + "display": ".agent/plans/2026-07-10-engram-production-ready-ownership-state.json", + "kind": "exact", + "line": 6 + }, + { + "owner": "PLAN-GOVERNANCE", + "branch": "work/prc-release-gates-revision9-maker", + "path": ".agent/plans/2026-07-10-engram-production-ready-scope-map.json", + "display": ".agent/plans/2026-07-10-engram-production-ready-scope-map.json", + "kind": "exact", + "line": 6 + }, + { + "owner": "PLAN-GOVERNANCE", + "branch": "work/prc-release-gates-revision9-maker", + "path": ".agent/plans/2026-07-10-engram-production-ready-active-diff-contracts.json", + "display": ".agent/plans/2026-07-10-engram-production-ready-active-diff-contracts.json", + "kind": "exact", + "line": 6 + }, + { + "owner": "PLAN-GOVERNANCE", + "branch": "work/prc-release-gates-revision9-maker", + "path": ".agent/specs/release-gates-r9/evidence/plan-governance", + "display": ".agent/specs/release-gates-r9/evidence/plan-governance/**", + "kind": "prefix", + "line": 6 + }, + { + "owner": "PLAN-GOVERNANCE", + "branch": "work/prc-release-gates-revision9-maker", + "path": ".agent/reports/2026-07-11-release-gates-r9-plan-governance.md", + "display": ".agent/reports/2026-07-11-release-gates-r9-plan-governance.md", + "kind": "exact", + "line": 6 + }, + { + "owner": "DB-BULKOPS", + "branch": "work/prc-db-bulkops", + "path": "internal/bulkops/facade.go", + "display": "internal/bulkops/facade.go", + "kind": "exact", + "line": 7 + }, + { + "owner": "DB-BULKOPS", + "branch": "work/prc-db-bulkops", + "path": "internal/bulkops/facade_test.go", + "display": "internal/bulkops/facade_test.go", + "kind": "exact", + "line": 7 + }, + { + "owner": "DB-BULKOPS", + "branch": "work/prc-db-bulkops", + "path": "internal/bulkops/rollback.go", + "display": "internal/bulkops/rollback.go", + "kind": "exact", + "line": 7 + }, + { + "owner": "DB-BULKOPS", + "branch": "work/prc-db-bulkops", + "path": "internal/bulkops/rollback_test.go", + "display": "internal/bulkops/rollback_test.go", + "kind": "exact", + "line": 7 + }, + { + "owner": "DB-BULKOPS", + "branch": "work/prc-db-bulkops", + "path": "internal/db/gorm/candidate_store.go", + "display": "internal/db/gorm/candidate_store.go", + "kind": "exact", + "line": 7 + }, + { + "owner": "DB-BULKOPS", + "branch": "work/prc-db-bulkops", + "path": "internal/db/gorm/candidate_store_test.go", + "display": "internal/db/gorm/candidate_store_test.go", + "kind": "exact", + "line": 7 + }, + { + "owner": "DB-BULKOPS", + "branch": "work/prc-db-bulkops", + "path": "internal/mcp/tools_bulkops.go", + "display": "internal/mcp/tools_bulkops.go", + "kind": "exact", + "line": 7 + }, + { + "owner": "DB-BULKOPS", + "branch": "work/prc-db-bulkops", + "path": "internal/mcp/tools_dryrun_test.go", + "display": "internal/mcp/tools_dryrun_test.go", + "kind": "exact", + "line": 7 + }, + { + "owner": "DB-BULKOPS", + "branch": "work/prc-db-bulkops", + "path": "pkg/models/snapshot.go", + "display": "pkg/models/snapshot.go", + "kind": "exact", + "line": 7 + }, + { + "owner": "DB-BULKOPS", + "branch": "work/prc-db-bulkops", + "path": ".agent/reports/2026-07-10-db-bulkops-capture-lock-rework-maker.md", + "display": ".agent/reports/2026-07-10-db-bulkops-capture-lock-rework-maker.md", + "kind": "exact", + "line": 7 + }, + { + "owner": "DB-BULKOPS", + "branch": "work/prc-db-bulkops", + "path": ".agent/reports/2026-07-10-db-bulkops-sibling-rework-maker.md", + "display": ".agent/reports/2026-07-10-db-bulkops-sibling-rework-maker.md", + "kind": "exact", + "line": 7 + }, + { + "owner": "DB-BULKOPS", + "branch": "work/prc-db-bulkops", + "path": ".agent/specs/production-ready-db-bulkops/evidence", + "display": ".agent/specs/production-ready-db-bulkops/evidence/**", + "kind": "prefix", + "line": 7 + }, + { + "owner": "DB-BULKOPS", + "branch": "work/prc-db-bulkops", + "path": ".agent/reports/evidence/production-ready/db-bulkops-sibling-rework", + "display": ".agent/reports/evidence/production-ready/db-bulkops-sibling-rework/**", + "kind": "prefix", + "line": 7 + }, + { + "owner": "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK", + "branch": "work/prc-db-bulkops", + "path": "internal/db/gorm/candidate_store.go", + "display": "internal/db/gorm/candidate_store.go", + "kind": "exact", + "line": 8 + }, + { + "owner": "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK", + "branch": "work/prc-db-bulkops", + "path": "internal/db/gorm/candidate_store_test.go", + "display": "internal/db/gorm/candidate_store_test.go", + "kind": "exact", + "line": 8 + }, + { + "owner": "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK", + "branch": "work/prc-db-bulkops", + "path": "internal/mcp/tools_bulkops.go", + "display": "internal/mcp/tools_bulkops.go", + "kind": "exact", + "line": 8 + }, + { + "owner": "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK", + "branch": "work/prc-db-bulkops", + "path": "internal/mcp/tools_dryrun_test.go", + "display": "internal/mcp/tools_dryrun_test.go", + "kind": "exact", + "line": 8 + }, + { + "owner": "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK", + "branch": "work/prc-db-bulkops", + "path": ".agent/reports/2026-07-10-db-bulkops-behavioral-edge-rework-maker.md", + "display": ".agent/reports/2026-07-10-db-bulkops-behavioral-edge-rework-maker.md", + "kind": "exact", + "line": 8 + }, + { + "owner": "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK", + "branch": "work/prc-db-bulkops", + "path": ".agent/reports/2026-07-10-db-bulkops-behavioral-edge-rework-maker-3.md", + "display": ".agent/reports/2026-07-10-db-bulkops-behavioral-edge-rework-maker-3.md", + "kind": "exact", + "line": 8 + }, + { + "owner": "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK", + "branch": "work/prc-db-bulkops", + "path": ".agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework", + "display": ".agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/**", + "kind": "prefix", + "line": 8 + }, + { + "owner": "DB-TEST-POOL-HYGIENE", + "branch": "work/prc-db-test-pool-hygiene-evidence-r2", + "path": "internal/db/gorm/candidate_store_test.go", + "display": "internal/db/gorm/candidate_store_test.go", + "kind": "exact", + "line": 9 + }, + { + "owner": "DB-TEST-POOL-HYGIENE", + "branch": "work/prc-db-test-pool-hygiene-evidence-r2", + "path": ".agent/reports/2026-07-10-db-test-pool-hygiene-maker.md", + "display": ".agent/reports/2026-07-10-db-test-pool-hygiene-maker.md", + "kind": "exact", + "line": 9 + }, + { + "owner": "DB-TEST-POOL-HYGIENE", + "branch": "work/prc-db-test-pool-hygiene-evidence-r2", + "path": ".agent/reports/2026-07-10-db-test-pool-hygiene-evidence-revision-maker.md", + "display": ".agent/reports/2026-07-10-db-test-pool-hygiene-evidence-revision-maker.md", + "kind": "exact", + "line": 9 + }, + { + "owner": "DB-TEST-POOL-HYGIENE", + "branch": "work/prc-db-test-pool-hygiene-evidence-r2", + "path": ".agent/reports/evidence/production-ready/db-test-pool-hygiene", + "display": ".agent/reports/evidence/production-ready/db-test-pool-hygiene/**", + "kind": "prefix", + "line": 9 + }, + { + "owner": "DB-GOVERNANCE", + "branch": "work/prc-db-governance", + "path": "internal/db/gorm/candidate_store.go", + "display": "internal/db/gorm/candidate_store.go", + "kind": "exact", + "line": 10 + }, + { + "owner": "DB-GOVERNANCE", + "branch": "work/prc-db-governance", + "path": "internal/db/gorm/candidate_store_test.go", + "display": "internal/db/gorm/candidate_store_test.go", + "kind": "exact", + "line": 10 + }, + { + "owner": "DB-GOVERNANCE", + "branch": "work/prc-db-governance", + "path": "internal/db/gorm/rule_arbiter_store_test.go", + "display": "internal/db/gorm/rule_arbiter_store_test.go", + "kind": "exact", + "line": 10 + }, + { + "owner": "DB-GOVERNANCE", + "branch": "work/prc-db-governance", + "path": "internal/db/gorm/rule_governance_store.go", + "display": "internal/db/gorm/rule_governance_store.go", + "kind": "exact", + "line": 10 + }, + { + "owner": "DB-GOVERNANCE", + "branch": "work/prc-db-governance", + "path": "internal/db/gorm/rule_governance_store_test.go", + "display": "internal/db/gorm/rule_governance_store_test.go", + "kind": "exact", + "line": 10 + }, + { + "owner": "DB-GOVERNANCE", + "branch": "work/prc-db-governance", + "path": "internal/db/gorm/rule_governance_rg3_store_test.go", + "display": "internal/db/gorm/rule_governance_rg3_store_test.go", + "kind": "exact", + "line": 10 + }, + { + "owner": "DB-GOVERNANCE", + "branch": "work/prc-db-governance", + "path": "internal/db/gorm/migration_rule_governance.go", + "display": "internal/db/gorm/migration_rule_governance.go", + "kind": "exact", + "line": 10 + }, + { + "owner": "DB-GOVERNANCE", + "branch": "work/prc-db-governance", + "path": "internal/db/gorm/migration_rule_arbiter.go", + "display": "internal/db/gorm/migration_rule_arbiter.go", + "kind": "exact", + "line": 10 + }, + { + "owner": "DB-GOVERNANCE", + "branch": "work/prc-db-governance", + "path": "internal/db/gorm/migration_rule_governance_snapshot_statuses.go", + "display": "internal/db/gorm/migration_rule_governance_snapshot_statuses.go", + "kind": "exact", + "line": 10 + }, + { + "owner": "CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK", + "branch": "work/prc-candidate-review-snapshot-rollback", + "path": "internal/reviewpacket/candidate.go", + "display": "internal/reviewpacket/candidate.go", + "kind": "exact", + "line": 11 + }, + { + "owner": "CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK", + "branch": "work/prc-candidate-review-snapshot-rollback", + "path": "internal/reviewpacket/candidate_test.go", + "display": "internal/reviewpacket/candidate_test.go", + "kind": "exact", + "line": 11 + }, + { + "owner": "CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK", + "branch": "work/prc-candidate-review-snapshot-rollback", + "path": "internal/db/gorm/candidate_store.go", + "display": "internal/db/gorm/candidate_store.go", + "kind": "exact", + "line": 11 + }, + { + "owner": "CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK", + "branch": "work/prc-candidate-review-snapshot-rollback", + "path": "internal/db/gorm/candidate_store_test.go", + "display": "internal/db/gorm/candidate_store_test.go", + "kind": "exact", + "line": 11 + }, + { + "owner": "CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK", + "branch": "work/prc-candidate-review-snapshot-rollback", + "path": "internal/db/gorm/snapshot_store.go", + "display": "internal/db/gorm/snapshot_store.go", + "kind": "exact", + "line": 11 + }, + { + "owner": "CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK", + "branch": "work/prc-candidate-review-snapshot-rollback", + "path": "internal/db/gorm/snapshot_store_test.go", + "display": "internal/db/gorm/snapshot_store_test.go", + "kind": "exact", + "line": 11 + }, + { + "owner": "CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK", + "branch": "work/prc-candidate-review-snapshot-rollback", + "path": "internal/bulkops/rollback_test.go", + "display": "internal/bulkops/rollback_test.go", + "kind": "exact", + "line": 11 + }, + { + "owner": "CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK", + "branch": "work/prc-candidate-review-snapshot-rollback", + "path": "tests/critical/candidate_review/candidate_review_snapshot_rollback_test.go", + "display": "tests/critical/candidate_review/candidate_review_snapshot_rollback_test.go", + "kind": "exact", + "line": 11 + }, + { + "owner": "INGEST-DOC-SNAPSHOT-DEMOLITION", + "branch": "work/prc-ingest-doc-snapshot-demolition", + "path": "internal/bulkops/facade.go", + "display": "internal/bulkops/facade.go", + "kind": "exact", + "line": 13 + }, + { + "owner": "INGEST-DOC-SNAPSHOT-DEMOLITION", + "branch": "work/prc-ingest-doc-snapshot-demolition", + "path": "internal/bulkops/facade_test.go", + "display": "internal/bulkops/facade_test.go", + "kind": "exact", + "line": 13 + }, + { + "owner": "INGEST-DOC-SNAPSHOT-DEMOLITION", + "branch": "work/prc-ingest-doc-snapshot-demolition", + "path": "pkg/models/snapshot.go", + "display": "pkg/models/snapshot.go", + "kind": "exact", + "line": 13 + }, + { + "owner": "INGEST-DOC-SNAPSHOT-DEMOLITION", + "branch": "work/prc-ingest-doc-snapshot-demolition", + "path": "pkg/models/snapshot_test.go", + "display": "pkg/models/snapshot_test.go", + "kind": "exact", + "line": 13 + }, + { + "owner": "INGEST-DOC-SNAPSHOT-DEMOLITION", + "branch": "work/prc-ingest-doc-snapshot-demolition", + "path": "internal/mcp/ingest_snapshot_contract_test.go", + "display": "internal/mcp/ingest_snapshot_contract_test.go", + "kind": "exact", + "line": 13 + }, + { + "owner": "DB-AUTH", + "branch": "work/prc-db-auth", + "path": "internal/db/gorm/user_store.go", + "display": "internal/db/gorm/user_store.go", + "kind": "exact", + "line": 14 + }, + { + "owner": "DB-AUTH", + "branch": "work/prc-db-auth", + "path": "internal/db/gorm/user_store_test.go", + "display": "internal/db/gorm/user_store_test.go", + "kind": "exact", + "line": 14 + }, + { + "owner": "DB-AUTH", + "branch": "work/prc-db-auth", + "path": "internal/worker/auth_handlers.go", + "display": "internal/worker/auth_handlers.go", + "kind": "exact", + "line": 14 + }, + { + "owner": "DB-AUTH", + "branch": "work/prc-db-auth", + "path": "internal/worker/auth_handlers_lifecycle_test.go", + "display": "internal/worker/auth_handlers_lifecycle_test.go", + "kind": "exact", + "line": 14 + }, + { + "owner": "DB-AUTH", + "branch": "work/prc-db-auth", + "path": ".agent/reports/db-auth-rework-maker-2026-07-10.md", + "display": ".agent/reports/db-auth-rework-maker-2026-07-10.md", + "kind": "exact", + "line": 14 + }, + { + "owner": "AUTH-BOOTSTRAP-SECURITY", + "branch": "work/prc-auth-bootstrap-security", + "path": "internal/config/config.go", + "display": "internal/config/config.go", + "kind": "exact", + "line": 15 + }, + { + "owner": "AUTH-BOOTSTRAP-SECURITY", + "branch": "work/prc-auth-bootstrap-security", + "path": "internal/config/config_test.go", + "display": "internal/config/config_test.go", + "kind": "exact", + "line": 15 + }, + { + "owner": "AUTH-BOOTSTRAP-SECURITY", + "branch": "work/prc-auth-bootstrap-security", + "path": "internal/config/envnames.go", + "display": "internal/config/envnames.go", + "kind": "exact", + "line": 15 + }, + { + "owner": "AUTH-BOOTSTRAP-SECURITY", + "branch": "work/prc-auth-bootstrap-security", + "path": "internal/db/gorm/user_store.go", + "display": "internal/db/gorm/user_store.go", + "kind": "exact", + "line": 15 + }, + { + "owner": "AUTH-BOOTSTRAP-SECURITY", + "branch": "work/prc-auth-bootstrap-security", + "path": "internal/worker/middleware.go", + "display": "internal/worker/middleware.go", + "kind": "exact", + "line": 15 + }, + { + "owner": "AUTH-BOOTSTRAP-SECURITY", + "branch": "work/prc-auth-bootstrap-security", + "path": "internal/worker/middleware_test.go", + "display": "internal/worker/middleware_test.go", + "kind": "exact", + "line": 15 + }, + { + "owner": "AUTH-BOOTSTRAP-SECURITY", + "branch": "work/prc-auth-bootstrap-security", + "path": "internal/worker/auth_handlers.go", + "display": "internal/worker/auth_handlers.go", + "kind": "exact", + "line": 15 + }, + { + "owner": "AUTH-BOOTSTRAP-SECURITY", + "branch": "work/prc-auth-bootstrap-security", + "path": "internal/worker/auth_bootstrap_limiter.go", + "display": "internal/worker/auth_bootstrap_limiter.go", + "kind": "exact", + "line": 15 + }, + { + "owner": "AUTH-BOOTSTRAP-SECURITY", + "branch": "work/prc-auth-bootstrap-security", + "path": "internal/worker/auth_bootstrap_limiter_test.go", + "display": "internal/worker/auth_bootstrap_limiter_test.go", + "kind": "exact", + "line": 15 + }, + { + "owner": "AUTH-BOOTSTRAP-SECURITY", + "branch": "work/prc-auth-bootstrap-security", + "path": "internal/worker/auth_bootstrap_security_test.go", + "display": "internal/worker/auth_bootstrap_security_test.go", + "kind": "exact", + "line": 15 + }, + { + "owner": "AUTH-BOOTSTRAP-SECURITY", + "branch": "work/prc-auth-bootstrap-security", + "path": "internal/worker/service.go", + "display": "internal/worker/service.go", + "kind": "exact", + "line": 15 + }, + { + "owner": "AUTH-BOOTSTRAP-SECURITY", + "branch": "work/prc-auth-bootstrap-security", + "path": "tests/critical/auth_bootstrap/first_admin_bootstrap_test.go", + "display": "tests/critical/auth_bootstrap/first_admin_bootstrap_test.go", + "kind": "exact", + "line": 15 + }, + { + "owner": "AUTH-BOOTSTRAP-SECURITY", + "branch": "work/prc-auth-bootstrap-security", + "path": "scripts/production-smoke/customer/run-auth-bootstrap-adversary.ps1", + "display": "scripts/production-smoke/customer/run-auth-bootstrap-adversary.ps1", + "kind": "exact", + "line": 15 + }, + { + "owner": "DURABLE-AUDIT-BOUNDARIES", + "branch": "work/prc-durable-audit-boundaries", + "path": "internal/db/gorm/domain_owner_store.go", + "display": "internal/db/gorm/domain_owner_store.go", + "kind": "exact", + "line": 16 + }, + { + "owner": "DURABLE-AUDIT-BOUNDARIES", + "branch": "work/prc-durable-audit-boundaries", + "path": "internal/db/gorm/domain_owner_store_test.go", + "display": "internal/db/gorm/domain_owner_store_test.go", + "kind": "exact", + "line": 16 + }, + { + "owner": "DURABLE-AUDIT-BOUNDARIES", + "branch": "work/prc-durable-audit-boundaries", + "path": "internal/db/gorm/user_store.go", + "display": "internal/db/gorm/user_store.go", + "kind": "exact", + "line": 16 + }, + { + "owner": "DURABLE-AUDIT-BOUNDARIES", + "branch": "work/prc-durable-audit-boundaries", + "path": "internal/worker/auth_handlers.go", + "display": "internal/worker/auth_handlers.go", + "kind": "exact", + "line": 16 + }, + { + "owner": "DURABLE-AUDIT-BOUNDARIES", + "branch": "work/prc-durable-audit-boundaries", + "path": "internal/worker/auth_audit_durability_test.go", + "display": "internal/worker/auth_audit_durability_test.go", + "kind": "exact", + "line": 16 + }, + { + "owner": "DURABLE-AUDIT-BOUNDARIES", + "branch": "work/prc-durable-audit-boundaries", + "path": "internal/bulkops/facade.go", + "display": "internal/bulkops/facade.go", + "kind": "exact", + "line": 16 + }, + { + "owner": "DURABLE-AUDIT-BOUNDARIES", + "branch": "work/prc-durable-audit-boundaries", + "path": "internal/bulkops/audit_durability_test.go", + "display": "internal/bulkops/audit_durability_test.go", + "kind": "exact", + "line": 16 + }, + { + "owner": "DURABLE-AUDIT-BOUNDARIES", + "branch": "work/prc-durable-audit-boundaries", + "path": "scripts/production-smoke/customer/run-durable-audit-faults.ps1", + "display": "scripts/production-smoke/customer/run-durable-audit-faults.ps1", + "kind": "exact", + "line": 16 + }, + { + "owner": "DB-CRYSTALLIZATION", + "branch": "work/prc-db-crystallization", + "path": "internal/worker/handlers_hooks_crystallization_integration_test.go", + "display": "internal/worker/handlers_hooks_crystallization_integration_test.go", + "kind": "exact", + "line": 17 + }, + { + "owner": "CRYSTALLIZATION-DREAM-CYCLE-CORRECTNESS", + "branch": "work/prc-crystallization-dream-cycle-correctness", + "path": "internal/worker/dream_cycle.go", + "display": "internal/worker/dream_cycle.go", + "kind": "exact", + "line": 18 + }, + { + "owner": "CRYSTALLIZATION-DREAM-CYCLE-CORRECTNESS", + "branch": "work/prc-crystallization-dream-cycle-correctness", + "path": "internal/worker/dream_cycle_test.go", + "display": "internal/worker/dream_cycle_test.go", + "kind": "exact", + "line": 18 + }, + { + "owner": "CRYSTALLIZATION-DREAM-CYCLE-CORRECTNESS", + "branch": "work/prc-crystallization-dream-cycle-correctness", + "path": ".agent/reports/2026-07-10-crystallization-dream-cycle-correctness-maker.md", + "display": ".agent/reports/2026-07-10-crystallization-dream-cycle-correctness-maker.md", + "kind": "exact", + "line": 18 + }, + { + "owner": "CRYSTALLIZATION-DREAM-CYCLE-CORRECTNESS", + "branch": "work/prc-crystallization-dream-cycle-correctness", + "path": ".agent/e/cdc", + "display": ".agent/e/cdc/**", + "kind": "prefix", + "line": 18 + }, + { + "owner": "DB-EMBEDDING-STATS", + "branch": "work/prc-db-embedding-stats", + "path": "internal/embedding/store.go", + "display": "internal/embedding/store.go", + "kind": "exact", + "line": 19 + }, + { + "owner": "DB-EMBEDDING-STATS", + "branch": "work/prc-db-embedding-stats", + "path": "internal/embedding/store_stats_test.go", + "display": "internal/embedding/store_stats_test.go", + "kind": "exact", + "line": 19 + }, + { + "owner": "DB-EMBEDDING-STATS", + "branch": "work/prc-db-embedding-stats", + "path": ".agent/reports/2026-07-10-db-embedding-stats-maker.md", + "display": ".agent/reports/2026-07-10-db-embedding-stats-maker.md", + "kind": "exact", + "line": 19 + }, + { + "owner": "DB-EMBEDDING-STATS", + "branch": "work/prc-db-embedding-stats", + "path": ".agent/reports/evidence/production-ready/db-embedding-stats", + "display": ".agent/reports/evidence/production-ready/db-embedding-stats/**", + "kind": "prefix", + "line": 19 + }, + { + "owner": "DB-EMBEDDING-STATS", + "branch": "work/prc-db-embedding-stats", + "path": ".agent/specs/db-embedding-stats/evidence", + "display": ".agent/specs/db-embedding-stats/evidence/**", + "kind": "prefix", + "line": 19 + }, + { + "owner": "DB-EMBEDDING-EVIDENCE-TRANSPORT", + "branch": "work/prc-db-embedding-evidence-transport-r6", + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport", + "display": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/**", + "kind": "prefix", + "line": 20 + }, + { + "owner": "DB-EMBEDDING-EVIDENCE-TRANSPORT", + "branch": "work/prc-db-embedding-evidence-transport-r6", + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3", + "display": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/**", + "kind": "prefix", + "line": 20 + }, + { + "owner": "DB-EMBEDDING-EVIDENCE-TRANSPORT", + "branch": "work/prc-db-embedding-evidence-transport-r6", + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4", + "display": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4/**", + "kind": "prefix", + "line": 20 + }, + { + "owner": "DB-EMBEDDING-EVIDENCE-TRANSPORT", + "branch": "work/prc-db-embedding-evidence-transport-r6", + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5", + "display": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/**", + "kind": "prefix", + "line": 20 + }, + { + "owner": "DB-EMBEDDING-EVIDENCE-TRANSPORT", + "branch": "work/prc-db-embedding-evidence-transport-r6", + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6", + "display": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/**", + "kind": "prefix", + "line": 20 + }, + { + "owner": "DB-EMBEDDING-EVIDENCE-TRANSPORT", + "branch": "work/prc-db-embedding-evidence-transport-r6", + "path": ".agent/specs/db-embedding-stats-evidence-transport/evidence", + "display": ".agent/specs/db-embedding-stats-evidence-transport/evidence/**", + "kind": "prefix", + "line": 20 + }, + { + "owner": "DB-REAPER", + "branch": "work/prc-db-reaper-shutdown-r4", + "path": "internal/worker/reaper/reaper.go", + "display": "internal/worker/reaper/reaper.go", + "kind": "exact", + "line": 21 + }, + { + "owner": "DB-REAPER", + "branch": "work/prc-db-reaper-shutdown-r4", + "path": "internal/worker/reaper/reaper_test.go", + "display": "internal/worker/reaper/reaper_test.go", + "kind": "exact", + "line": 21 + }, + { + "owner": "SECURITY-TOOLCHAIN", + "branch": "work/prc-security-toolchain", + "path": "go.mod", + "display": "go.mod", + "kind": "exact", + "line": 22 + }, + { + "owner": "SECURITY-TOOLCHAIN", + "branch": "work/prc-security-toolchain", + "path": "go.sum", + "display": "go.sum", + "kind": "exact", + "line": 22 + }, + { + "owner": "SECURITY-TOOLCHAIN", + "branch": "work/prc-security-toolchain", + "path": "Dockerfile", + "display": "Dockerfile", + "kind": "exact", + "line": 22 + }, + { + "owner": "RELEASE-GATES", + "branch": "work/prc-release-gates-revision9-maker", + "path": ".github/workflows/test.yml", + "display": ".github/workflows/test.yml", + "kind": "exact", + "line": 23 + }, + { + "owner": "RELEASE-GATES", + "branch": "work/prc-release-gates-revision9-maker", + "path": "scripts/production-gates/assert-plan-path-ownership.ps1", + "display": "scripts/production-gates/assert-plan-path-ownership.ps1", + "kind": "exact", + "line": 23 + }, + { + "owner": "RELEASE-GATES", + "branch": "work/prc-release-gates-revision9-maker", + "path": "scripts/production-gates/assert-active-candidate-path-authority.ps1", + "display": "scripts/production-gates/assert-active-candidate-path-authority.ps1", + "kind": "exact", + "line": 23 + }, + { + "owner": "RELEASE-GATES", + "branch": "work/prc-release-gates-revision9-maker", + "path": "scripts/production-gates/run-db-suite.ps1", + "display": "scripts/production-gates/run-db-suite.ps1", + "kind": "exact", + "line": 23 + }, + { + "owner": "RELEASE-GATES", + "branch": "work/prc-release-gates-revision9-maker", + "path": ".agent/specs/release-gates-r9/evidence/release-gates", + "display": ".agent/specs/release-gates-r9/evidence/release-gates/**", + "kind": "prefix", + "line": 23 + }, + { + "owner": "RELEASE-GATES", + "branch": "work/prc-release-gates-revision9-maker", + "path": ".agent/reports/2026-07-11-release-gates-r9-maker.md", + "display": ".agent/reports/2026-07-11-release-gates-r9-maker.md", + "kind": "exact", + "line": 23 + }, + { + "owner": "IMAGE-REMEDIATION", + "branch": "work/prc-image-remediation", + "path": "Dockerfile", + "display": "Dockerfile", + "kind": "exact", + "line": 24 + }, + { + "owner": "IMAGE-REMEDIATION", + "branch": "work/prc-image-remediation", + "path": "cmd/engram-healthcheck/main.go", + "display": "cmd/engram-healthcheck/main.go", + "kind": "exact", + "line": 24 + }, + { + "owner": "IMAGE-REMEDIATION", + "branch": "work/prc-image-remediation", + "path": "cmd/engram-healthcheck/main_test.go", + "display": "cmd/engram-healthcheck/main_test.go", + "kind": "exact", + "line": 24 + }, + { + "owner": "IMAGE-REMEDIATION", + "branch": "work/prc-image-remediation", + "path": "apps/operator-console/package.json", + "display": "apps/operator-console/package.json", + "kind": "exact", + "line": 24 + }, + { + "owner": "IMAGE-REMEDIATION", + "branch": "work/prc-image-remediation", + "path": "apps/operator-console/package-lock.json", + "display": "apps/operator-console/package-lock.json", + "kind": "exact", + "line": 24 + }, + { + "owner": "IMAGE-REMEDIATION", + "branch": "work/prc-image-remediation", + "path": "deploy/postgres/Dockerfile", + "display": "deploy/postgres/Dockerfile", + "kind": "exact", + "line": 24 + }, + { + "owner": "IMAGE-REMEDIATION", + "branch": "work/prc-image-remediation", + "path": "docker-compose.yml", + "display": "docker-compose.yml", + "kind": "exact", + "line": 24 + }, + { + "owner": "IMAGE-REMEDIATION", + "branch": "work/prc-image-remediation", + "path": "deploy/docker-compose.runtime.yml", + "display": "deploy/docker-compose.runtime.yml", + "kind": "exact", + "line": 24 + }, + { + "owner": "IMAGE-REMEDIATION", + "branch": "work/prc-image-remediation", + "path": "docs/DEPLOYMENT.md", + "display": "docs/DEPLOYMENT.md", + "kind": "exact", + "line": 24 + }, + { + "owner": "IMAGE-REMEDIATION", + "branch": "work/prc-image-remediation", + "path": "docs/PRODUCTION-TESTING-PLAYBOOK.md", + "display": "docs/PRODUCTION-TESTING-PLAYBOOK.md", + "kind": "exact", + "line": 24 + }, + { + "owner": "IMAGE-REMEDIATION", + "branch": "work/prc-image-remediation", + "path": ".github/workflows/test.yml", + "display": ".github/workflows/test.yml", + "kind": "exact", + "line": 24 + }, + { + "owner": "IMAGE-REMEDIATION", + "branch": "work/prc-image-remediation", + "path": ".github/workflows/docker.yaml", + "display": ".github/workflows/docker.yaml", + "kind": "exact", + "line": 24 + }, + { + "owner": "IMAGE-REMEDIATION", + "branch": "work/prc-image-remediation", + "path": ".github/workflows/docker-publish.yml", + "display": ".github/workflows/docker-publish.yml", + "kind": "exact", + "line": 24 + }, + { + "owner": "IMAGE-REMEDIATION", + "branch": "work/prc-image-remediation", + "path": "scripts/production-gates/build-and-scan-images.ps1", + "display": "scripts/production-gates/build-and-scan-images.ps1", + "kind": "exact", + "line": 24 + }, + { + "owner": "IMAGE-REMEDIATION", + "branch": "work/prc-image-remediation", + "path": "tests/critical/runtime/image_runtime_contract_test.go", + "display": "tests/critical/runtime/image_runtime_contract_test.go", + "kind": "exact", + "line": 24 + }, + { + "owner": "IMAGE-REMEDIATION", + "branch": "work/prc-image-remediation", + "path": "tests/critical/runtime/postgres_image_contract_test.go", + "display": "tests/critical/runtime/postgres_image_contract_test.go", + "kind": "exact", + "line": 24 + }, + { + "owner": "SECURITY-PROJECT-IDENTITY", + "branch": "work/prc-security-project-identity-r4", + "path": "internal/db/gorm/project_store.go", + "display": "internal/db/gorm/project_store.go", + "kind": "exact", + "line": 25 + }, + { + "owner": "SECURITY-PROJECT-IDENTITY", + "branch": "work/prc-security-project-identity-r4", + "path": "internal/db/gorm/project_identity_v2_test.go", + "display": "internal/db/gorm/project_identity_v2_test.go", + "kind": "exact", + "line": 25 + }, + { + "owner": "SECURITY-PROJECT-IDENTITY", + "branch": "work/prc-security-project-identity-r4", + "path": "internal/grpcserver/project_identity_v2_test.go", + "display": "internal/grpcserver/project_identity_v2_test.go", + "kind": "exact", + "line": 25 + }, + { + "owner": "SECURITY-PROJECT-IDENTITY", + "branch": "work/prc-security-project-identity-r4", + "path": "internal/proxy/identity.go", + "display": "internal/proxy/identity.go", + "kind": "exact", + "line": 25 + }, + { + "owner": "SECURITY-PROJECT-IDENTITY", + "branch": "work/prc-security-project-identity-r4", + "path": "internal/proxy/identity_test.go", + "display": "internal/proxy/identity_test.go", + "kind": "exact", + "line": 25 + }, + { + "owner": "SECURITY-PROJECT-IDENTITY", + "branch": "work/prc-security-project-identity-r4", + "path": "internal/proxy/identity_process_test.go", + "display": "internal/proxy/identity_process_test.go", + "kind": "exact", + "line": 25 + }, + { + "owner": "SECURITY-PROJECT-IDENTITY", + "branch": "work/prc-security-project-identity-r4", + "path": "plugin/engram/hooks/lib.js", + "display": "plugin/engram/hooks/lib.js", + "kind": "exact", + "line": 25 + }, + { + "owner": "SECURITY-PROJECT-IDENTITY", + "branch": "work/prc-security-project-identity-r4", + "path": "plugin/engram/hooks/project-identity-v2.test.js", + "display": "plugin/engram/hooks/project-identity-v2.test.js", + "kind": "exact", + "line": 25 + }, + { + "owner": "SECURITY-PROJECT-IDENTITY", + "branch": "work/prc-security-project-identity-r4", + "path": "plugin/openclaw-engram/src/identity.ts", + "display": "plugin/openclaw-engram/src/identity.ts", + "kind": "exact", + "line": 25 + }, + { + "owner": "SECURITY-PROJECT-IDENTITY", + "branch": "work/prc-security-project-identity-r4", + "path": "plugin/openclaw-engram/test/project-identity-v2.test.mjs", + "display": "plugin/openclaw-engram/test/project-identity-v2.test.mjs", + "kind": "exact", + "line": 25 + }, + { + "owner": "SECURITY-PROJECT-IDENTITY", + "branch": "work/prc-security-project-identity-r4", + "path": ".agent/specs/security-project-identity/evidence", + "display": ".agent/specs/security-project-identity/evidence/**", + "kind": "prefix", + "line": 25 + }, + { + "owner": "SECURITY-PROJECT-IDENTITY", + "branch": "work/prc-security-project-identity-r4", + "path": ".agent/reports/evidence/production-ready/security-project-identity", + "display": ".agent/reports/evidence/production-ready/security-project-identity/**", + "kind": "prefix", + "line": 25 + }, + { + "owner": "OPENCLAW-RELEASE", + "branch": "work/prc-openclaw-release", + "path": "plugin/openclaw-engram/.gitignore", + "display": "plugin/openclaw-engram/.gitignore", + "kind": "exact", + "line": 26 + }, + { + "owner": "OPENCLAW-RELEASE", + "branch": "work/prc-openclaw-release", + "path": "plugin/openclaw-engram/package.json", + "display": "plugin/openclaw-engram/package.json", + "kind": "exact", + "line": 26 + }, + { + "owner": "OPENCLAW-RELEASE", + "branch": "work/prc-openclaw-release", + "path": "plugin/openclaw-engram/package-lock.json", + "display": "plugin/openclaw-engram/package-lock.json", + "kind": "exact", + "line": 26 + }, + { + "owner": "OPENCLAW-RELEASE", + "branch": "work/prc-openclaw-release", + "path": "plugin/openclaw-engram/openclaw.plugin.json", + "display": "plugin/openclaw-engram/openclaw.plugin.json", + "kind": "exact", + "line": 26 + }, + { + "owner": "OPENCLAW-RELEASE", + "branch": "work/prc-openclaw-release", + "path": "plugin/openclaw-engram/README.md", + "display": "plugin/openclaw-engram/README.md", + "kind": "exact", + "line": 26 + }, + { + "owner": "OPENCLAW-RELEASE", + "branch": "work/prc-openclaw-release", + "path": ".github/workflows/plugin-publish.yml", + "display": ".github/workflows/plugin-publish.yml", + "kind": "exact", + "line": 26 + }, + { + "owner": "OPENCLAW-RELEASE", + "branch": "work/prc-openclaw-release", + "path": "docs/RELEASE-PROTOCOL.md", + "display": "docs/RELEASE-PROTOCOL.md", + "kind": "exact", + "line": 26 + }, + { + "owner": "UPDATE-LIFECYCLE", + "branch": "work/prc-security-updater", + "path": "internal/update/update.go", + "display": "internal/update/update.go", + "kind": "exact", + "line": 27 + }, + { + "owner": "UPDATE-LIFECYCLE", + "branch": "work/prc-security-updater", + "path": "internal/update/update_test.go", + "display": "internal/update/update_test.go", + "kind": "exact", + "line": 27 + }, + { + "owner": "UPDATE-LIFECYCLE", + "branch": "work/prc-security-updater", + "path": "internal/worker/handlers_update.go", + "display": "internal/worker/handlers_update.go", + "kind": "exact", + "line": 27 + }, + { + "owner": "UPDATE-LIFECYCLE", + "branch": "work/prc-security-updater", + "path": "internal/worker/handlers_update_test.go", + "display": "internal/worker/handlers_update_test.go", + "kind": "exact", + "line": 27 + }, + { + "owner": "UPDATE-LIFECYCLE", + "branch": "work/prc-security-updater", + "path": "scripts/install.sh", + "display": "scripts/install.sh", + "kind": "exact", + "line": 27 + }, + { + "owner": "UPDATE-LIFECYCLE", + "branch": "work/prc-security-updater", + "path": "scripts/install.ps1", + "display": "scripts/install.ps1", + "kind": "exact", + "line": 27 + }, + { + "owner": "UPDATE-LIFECYCLE", + "branch": "work/prc-security-updater", + "path": ".goreleaser.yaml", + "display": ".goreleaser.yaml", + "kind": "exact", + "line": 27 + }, + { + "owner": "UPDATE-LIFECYCLE", + "branch": "work/prc-security-updater", + "path": ".github/workflows/release.yaml", + "display": ".github/workflows/release.yaml", + "kind": "exact", + "line": 27 + }, + { + "owner": "UPDATE-LIFECYCLE", + "branch": "work/prc-security-updater", + "path": "plugin/engram/hooks/hook-cli.test.js", + "display": "plugin/engram/hooks/hook-cli.test.js", + "kind": "exact", + "line": 27 + }, + { + "owner": "DOCUMENT-INGEST-PUBLIC-TRUTH", + "branch": "work/prc-document-ingest-public-truth", + "path": "internal/mcp/server.go", + "display": "internal/mcp/server.go", + "kind": "exact", + "line": 29 + }, + { + "owner": "DOCUMENT-INGEST-PUBLIC-TRUTH", + "branch": "work/prc-document-ingest-public-truth", + "path": "internal/mcp/ingest_document_description_test.go", + "display": "internal/mcp/ingest_document_description_test.go", + "kind": "exact", + "line": 29 + }, + { + "owner": "MCP-STRUCTURED-INPUT-VALIDATION", + "branch": "work/prc-mcp-structured-input-validation", + "path": "internal/mcp/coerce.go", + "display": "internal/mcp/coerce.go", + "kind": "exact", + "line": 31 + }, + { + "owner": "MCP-STRUCTURED-INPUT-VALIDATION", + "branch": "work/prc-mcp-structured-input-validation", + "path": "internal/mcp/coerce_test.go", + "display": "internal/mcp/coerce_test.go", + "kind": "exact", + "line": 31 + }, + { + "owner": "MCP-STRUCTURED-INPUT-VALIDATION", + "branch": "work/prc-mcp-structured-input-validation", + "path": "internal/mcp/tools_candidates.go", + "display": "internal/mcp/tools_candidates.go", + "kind": "exact", + "line": 31 + }, + { + "owner": "MCP-STRUCTURED-INPUT-VALIDATION", + "branch": "work/prc-mcp-structured-input-validation", + "path": "internal/mcp/tools_candidates_test.go", + "display": "internal/mcp/tools_candidates_test.go", + "kind": "exact", + "line": 31 + }, + { + "owner": "MCP-STRUCTURED-INPUT-VALIDATION", + "branch": "work/prc-mcp-structured-input-validation", + "path": "internal/mcp/tools_memory.go", + "display": "internal/mcp/tools_memory.go", + "kind": "exact", + "line": 31 + }, + { + "owner": "MCP-STRUCTURED-INPUT-VALIDATION", + "branch": "work/prc-mcp-structured-input-validation", + "path": "internal/mcp/tools_memory_edit_test.go", + "display": "internal/mcp/tools_memory_edit_test.go", + "kind": "exact", + "line": 31 + }, + { + "owner": "MCP-STRUCTURED-INPUT-VALIDATION", + "branch": "work/prc-mcp-structured-input-validation", + "path": "internal/mcp/tools_memory_significance.go", + "display": "internal/mcp/tools_memory_significance.go", + "kind": "exact", + "line": 31 + }, + { + "owner": "MCP-STRUCTURED-INPUT-VALIDATION", + "branch": "work/prc-mcp-structured-input-validation", + "path": "internal/mcp/tools_memory_significance_test.go", + "display": "internal/mcp/tools_memory_significance_test.go", + "kind": "exact", + "line": 31 + }, + { + "owner": "MCP-STRUCTURED-INPUT-VALIDATION", + "branch": "work/prc-mcp-structured-input-validation", + "path": "internal/mcp/tools_store_consolidated.go", + "display": "internal/mcp/tools_store_consolidated.go", + "kind": "exact", + "line": 31 + }, + { + "owner": "MCP-STRUCTURED-INPUT-VALIDATION", + "branch": "work/prc-mcp-structured-input-validation", + "path": "internal/mcp/tools_settings.go", + "display": "internal/mcp/tools_settings.go", + "kind": "exact", + "line": 31 + }, + { + "owner": "MCP-STRUCTURED-INPUT-VALIDATION", + "branch": "work/prc-mcp-structured-input-validation", + "path": "internal/mcp/tools_settings_test.go", + "display": "internal/mcp/tools_settings_test.go", + "kind": "exact", + "line": 31 + }, + { + "owner": "MCP-STRUCTURED-INPUT-VALIDATION", + "branch": "work/prc-mcp-structured-input-validation", + "path": "internal/mcp/tools_documents_v2.go", + "display": "internal/mcp/tools_documents_v2.go", + "kind": "exact", + "line": 31 + }, + { + "owner": "MCP-STRUCTURED-INPUT-VALIDATION", + "branch": "work/prc-mcp-structured-input-validation", + "path": "internal/mcp/tools_rule_governance.go", + "display": "internal/mcp/tools_rule_governance.go", + "kind": "exact", + "line": 31 + }, + { + "owner": "MCP-STRUCTURED-INPUT-VALIDATION", + "branch": "work/prc-mcp-structured-input-validation", + "path": "internal/mcp/tools_rule_governance_test.go", + "display": "internal/mcp/tools_rule_governance_test.go", + "kind": "exact", + "line": 31 + }, + { + "owner": "MCP-STRUCTURED-INPUT-VALIDATION", + "branch": "work/prc-mcp-structured-input-validation", + "path": "internal/mcp/structured_input_validation_test.go", + "display": "internal/mcp/structured_input_validation_test.go", + "kind": "exact", + "line": 31 + }, + { + "owner": "REDACTION-LIVE-CONTRACT", + "branch": "work/prc-redaction-live-contract", + "path": "internal/redaction/layer.go", + "display": "internal/redaction/layer.go", + "kind": "exact", + "line": 32 + }, + { + "owner": "REDACTION-LIVE-CONTRACT", + "branch": "work/prc-redaction-live-contract", + "path": "internal/redaction/layer_test.go", + "display": "internal/redaction/layer_test.go", + "kind": "exact", + "line": 32 + }, + { + "owner": "REDACTION-LIVE-CONTRACT", + "branch": "work/prc-redaction-live-contract", + "path": "internal/redaction/rejection_test.go", + "display": "internal/redaction/rejection_test.go", + "kind": "exact", + "line": 32 + }, + { + "owner": "REDACTION-LIVE-CONTRACT", + "branch": "work/prc-redaction-live-contract", + "path": "internal/mcp/redaction_guard.go", + "display": "internal/mcp/redaction_guard.go", + "kind": "exact", + "line": 32 + }, + { + "owner": "REDACTION-LIVE-CONTRACT", + "branch": "work/prc-redaction-live-contract", + "path": "internal/mcp/redaction_guard_test.go", + "display": "internal/mcp/redaction_guard_test.go", + "kind": "exact", + "line": 32 + }, + { + "owner": "REDACTION-LIVE-CONTRACT", + "branch": "work/prc-redaction-live-contract", + "path": "internal/mcp/tools_memory.go", + "display": "internal/mcp/tools_memory.go", + "kind": "exact", + "line": 32 + }, + { + "owner": "REDACTION-LIVE-CONTRACT", + "branch": "work/prc-redaction-live-contract", + "path": "internal/mcp/tools_rules.go", + "display": "internal/mcp/tools_rules.go", + "kind": "exact", + "line": 32 + }, + { + "owner": "REDACTION-LIVE-CONTRACT", + "branch": "work/prc-redaction-live-contract", + "path": "internal/mcp/tools_memory_redaction_audit_test.go", + "display": "internal/mcp/tools_memory_redaction_audit_test.go", + "kind": "exact", + "line": 32 + }, + { + "owner": "REDACTION-LIVE-CONTRACT", + "branch": "work/prc-redaction-live-contract", + "path": "internal/mcp/tools_rules_redaction_audit_test.go", + "display": "internal/mcp/tools_rules_redaction_audit_test.go", + "kind": "exact", + "line": 32 + }, + { + "owner": "REDACTION-LIVE-CONTRACT", + "branch": "work/prc-redaction-live-contract", + "path": "internal/worker/service.go", + "display": "internal/worker/service.go", + "kind": "exact", + "line": 32 + }, + { + "owner": "REDACTION-LIVE-CONTRACT", + "branch": "work/prc-redaction-live-contract", + "path": "internal/worker/service_redaction_test.go", + "display": "internal/worker/service_redaction_test.go", + "kind": "exact", + "line": 32 + }, + { + "owner": "REDACTION-LIVE-CONTRACT", + "branch": "work/prc-redaction-live-contract", + "path": "docs/operating-engram.md", + "display": "docs/operating-engram.md", + "kind": "exact", + "line": 32 + }, + { + "owner": "REDACTION-LIVE-CONTRACT", + "branch": "work/prc-redaction-live-contract", + "path": ".agent/reports/evidence/production-ready/redaction-live-contract", + "display": ".agent/reports/evidence/production-ready/redaction-live-contract/**", + "kind": "prefix", + "line": 32 + }, + { + "owner": "RETRIEVAL-VECTOR-CONTRACT", + "branch": "work/prc-retrieval-vector-contract", + "path": "internal/retrieval/hybrid_integration_test.go", + "display": "internal/retrieval/hybrid_integration_test.go", + "kind": "exact", + "line": 34 + }, + { + "owner": "STATIC-EMBED-CONTRACT", + "branch": "work/prc-static-embed-contract", + "path": "internal/worker/static_embed_test.go", + "display": "internal/worker/static_embed_test.go", + "kind": "exact", + "line": 35 + }, + { + "owner": "PRE-V5-UPGRADE-CONTRACT", + "branch": "work/prc-pre-v5-upgrade-contract", + "path": "internal/db/gorm/migrations_integration_test.go", + "display": "internal/db/gorm/migrations_integration_test.go", + "kind": "exact", + "line": 36 + }, + { + "owner": "PRE-V5-UPGRADE-CONTRACT", + "branch": "work/prc-pre-v5-upgrade-contract", + "path": "internal/grpcserver/credential_migration_test.go", + "display": "internal/grpcserver/credential_migration_test.go", + "kind": "exact", + "line": 36 + }, + { + "owner": "PRE-V5-UPGRADE-CONTRACT", + "branch": "work/prc-pre-v5-upgrade-contract", + "path": "tests/fixtures/pre-v5", + "display": "tests/fixtures/pre-v5/**", + "kind": "prefix", + "line": 36 + }, + { + "owner": "PRE-V5-UPGRADE-CONTRACT", + "branch": "work/prc-pre-v5-upgrade-contract", + "path": "tests/critical/recovery/pre_v5_upgrade_test.go", + "display": "tests/critical/recovery/pre_v5_upgrade_test.go", + "kind": "exact", + "line": 36 + }, + { + "owner": "PRE-V5-UPGRADE-CONTRACT", + "branch": "work/prc-pre-v5-upgrade-contract", + "path": "scripts/production-smoke/customer/run-pre-v5-upgrade.ps1", + "display": "scripts/production-smoke/customer/run-pre-v5-upgrade.ps1", + "kind": "exact", + "line": 36 + }, + { + "owner": "T007-COMPAT-DEMOLITION-CLASSIFICATION", + "branch": "work/prc-t007-compat-classification", + "path": "internal/mcp/store_memory_compat_t007_test.go", + "display": "internal/mcp/store_memory_compat_t007_test.go", + "kind": "exact", + "line": 37 + }, + { + "owner": "DB-RULES-ISOLATION", + "branch": "work/prc-db-rules-isolation", + "path": "internal/worker/handlers_rules_test.go", + "display": "internal/worker/handlers_rules_test.go", + "kind": "exact", + "line": 38 + }, + { + "owner": "DB-RULES-ISOLATION", + "branch": "work/prc-db-rules-isolation", + "path": "scripts/production-gates/run-db-rules-isolation.ps1", + "display": "scripts/production-gates/run-db-rules-isolation.ps1", + "kind": "exact", + "line": 38 + }, + { + "owner": "COVERAGE-CMD-ENGRAM", + "branch": "work/prc-coverage-cmd-engram", + "path": "cmd/engram/production_readiness_coverage_test.go", + "display": "cmd/engram/production_readiness_coverage_test.go", + "kind": "exact", + "line": 39 + }, + { + "owner": "COVERAGE-CMD-SERVER", + "branch": "work/prc-coverage-cmd-server", + "path": "cmd/engram-server/production_readiness_coverage_test.go", + "display": "cmd/engram-server/production_readiness_coverage_test.go", + "kind": "exact", + "line": 40 + }, + { + "owner": "COVERAGE-UPDATE", + "branch": "work/prc-coverage-update", + "path": "internal/update/production_readiness_coverage_test.go", + "display": "internal/update/production_readiness_coverage_test.go", + "kind": "exact", + "line": 41 + }, + { + "owner": "COVERAGE-WORKER", + "branch": "work/prc-coverage-worker", + "path": "internal/worker/production_readiness_coverage_test.go", + "display": "internal/worker/production_readiness_coverage_test.go", + "kind": "exact", + "line": 43 + }, + { + "owner": "COVERAGE-MCP", + "branch": "work/prc-coverage-mcp", + "path": "internal/mcp/production_readiness_coverage_test.go", + "display": "internal/mcp/production_readiness_coverage_test.go", + "kind": "exact", + "line": 44 + }, + { + "owner": "COVERAGE-GORM", + "branch": "work/prc-coverage-gorm", + "path": "internal/db/gorm/production_readiness_coverage_test.go", + "display": "internal/db/gorm/production_readiness_coverage_test.go", + "kind": "exact", + "line": 45 + }, + { + "owner": "COVERAGE-LOOM", + "branch": "work/prc-coverage-loom", + "path": "internal/handlers/loom/production_readiness_coverage_test.go", + "display": "internal/handlers/loom/production_readiness_coverage_test.go", + "kind": "exact", + "line": 46 + }, + { + "owner": "DEPLOYMENT-ROLLBACK", + "branch": "work/prc-deployment-rollback", + "path": "docker-compose.yml", + "display": "docker-compose.yml", + "kind": "exact", + "line": 47 + }, + { + "owner": "DEPLOYMENT-ROLLBACK", + "branch": "work/prc-deployment-rollback", + "path": "deploy/docker-compose.runtime.yml", + "display": "deploy/docker-compose.runtime.yml", + "kind": "exact", + "line": 47 + }, + { + "owner": "DEPLOYMENT-ROLLBACK", + "branch": "work/prc-deployment-rollback", + "path": "deploy/docker-compose.operator-web-standalone.yml", + "display": "deploy/docker-compose.operator-web-standalone.yml", + "kind": "exact", + "line": 47 + }, + { + "owner": "DEPLOYMENT-ROLLBACK", + "branch": "work/prc-deployment-rollback", + "path": "deploy/entrypoint-server.sh", + "display": "deploy/entrypoint-server.sh", + "kind": "exact", + "line": 47 + }, + { + "owner": "DEPLOYMENT-ROLLBACK", + "branch": "work/prc-deployment-rollback", + "path": "deploy/healthcheck-server.sh", + "display": "deploy/healthcheck-server.sh", + "kind": "exact", + "line": 47 + }, + { + "owner": "DEPLOYMENT-ROLLBACK", + "branch": "work/prc-deployment-rollback", + "path": "deploy/verify-rollback.ps1", + "display": "deploy/verify-rollback.ps1", + "kind": "exact", + "line": 47 + }, + { + "owner": "DEPLOYMENT-ROLLBACK", + "branch": "work/prc-deployment-rollback", + "path": "deploy/verify-runtime-policy.ps1", + "display": "deploy/verify-runtime-policy.ps1", + "kind": "exact", + "line": 47 + }, + { + "owner": "RECOVERY-DATA", + "branch": "work/prc-recovery-data", + "path": "scripts/recovery/start-disposable-postgres.ps1", + "display": "scripts/recovery/start-disposable-postgres.ps1", + "kind": "exact", + "line": 48 + }, + { + "owner": "RECOVERY-DATA", + "branch": "work/prc-recovery-data", + "path": "scripts/recovery/verify-postgres-roundtrip.ps1", + "display": "scripts/recovery/verify-postgres-roundtrip.ps1", + "kind": "exact", + "line": 48 + }, + { + "owner": "RECOVERY-DATA", + "branch": "work/prc-recovery-data", + "path": "scripts/recovery/seed-recovery-fixture.ps1", + "display": "scripts/recovery/seed-recovery-fixture.ps1", + "kind": "exact", + "line": 48 + }, + { + "owner": "RECOVERY-DATA", + "branch": "work/prc-recovery-data", + "path": "scripts/recovery/assert-recovery-fixture.ps1", + "display": "scripts/recovery/assert-recovery-fixture.ps1", + "kind": "exact", + "line": 48 + }, + { + "owner": "RECOVERY-DATA", + "branch": "work/prc-recovery-data", + "path": "tests/critical/recovery/postgres_roundtrip_test.go", + "display": "tests/critical/recovery/postgres_roundtrip_test.go", + "kind": "exact", + "line": 48 + }, + { + "owner": "OBSERVABILITY-OTLP", + "branch": "work/prc-observability-otlp", + "path": "internal/module/obs/logging.go", + "display": "internal/module/obs/logging.go", + "kind": "exact", + "line": 49 + }, + { + "owner": "OBSERVABILITY-OTLP", + "branch": "work/prc-observability-otlp", + "path": "internal/module/obs/logging_test.go", + "display": "internal/module/obs/logging_test.go", + "kind": "exact", + "line": 49 + }, + { + "owner": "OBSERVABILITY-OTLP", + "branch": "work/prc-observability-otlp", + "path": "internal/module/obs/meter.go", + "display": "internal/module/obs/meter.go", + "kind": "exact", + "line": 49 + }, + { + "owner": "OBSERVABILITY-OTLP", + "branch": "work/prc-observability-otlp", + "path": "internal/module/obs/meter_test.go", + "display": "internal/module/obs/meter_test.go", + "kind": "exact", + "line": 49 + }, + { + "owner": "OBSERVABILITY-OTLP", + "branch": "work/prc-observability-otlp", + "path": "internal/module/obs/metrics.go", + "display": "internal/module/obs/metrics.go", + "kind": "exact", + "line": 49 + }, + { + "owner": "OBSERVABILITY-OTLP", + "branch": "work/prc-observability-otlp", + "path": "internal/module/obs/metrics_test.go", + "display": "internal/module/obs/metrics_test.go", + "kind": "exact", + "line": 49 + }, + { + "owner": "OBSERVABILITY-OTLP", + "branch": "work/prc-observability-otlp", + "path": "cmd/engram-server/main.go", + "display": "cmd/engram-server/main.go", + "kind": "exact", + "line": 49 + }, + { + "owner": "OBSERVABILITY-OTLP", + "branch": "work/prc-observability-otlp", + "path": "cmd/engram-server/main_test.go", + "display": "cmd/engram-server/main_test.go", + "kind": "exact", + "line": 49 + }, + { + "owner": "OBSERVABILITY-OTLP", + "branch": "work/prc-observability-otlp", + "path": "scripts/production-smoke/verify-otlp.ps1", + "display": "scripts/production-smoke/verify-otlp.ps1", + "kind": "exact", + "line": 49 + }, + { + "owner": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "path": "internal/scope/domain_policy.go", + "display": "internal/scope/domain_policy.go", + "kind": "exact", + "line": 50 + }, + { + "owner": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "path": "internal/scope/domain_policy_test.go", + "display": "internal/scope/domain_policy_test.go", + "kind": "exact", + "line": 50 + }, + { + "owner": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "path": "internal/scope/filter.go", + "display": "internal/scope/filter.go", + "kind": "exact", + "line": 50 + }, + { + "owner": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "path": "internal/scope/filter_test.go", + "display": "internal/scope/filter_test.go", + "kind": "exact", + "line": 50 + }, + { + "owner": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "path": "internal/scope/filter_principal_test.go", + "display": "internal/scope/filter_principal_test.go", + "kind": "exact", + "line": 50 + }, + { + "owner": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "path": "internal/scope/filter_w4_test.go", + "display": "internal/scope/filter_w4_test.go", + "kind": "exact", + "line": 50 + }, + { + "owner": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "path": "internal/principalmemory/access_policy.go", + "display": "internal/principalmemory/access_policy.go", + "kind": "exact", + "line": 50 + }, + { + "owner": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "path": "internal/principalmemory/access_policy_test.go", + "display": "internal/principalmemory/access_policy_test.go", + "kind": "exact", + "line": 50 + }, + { + "owner": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "path": "internal/principalmemory/domain_registry.go", + "display": "internal/principalmemory/domain_registry.go", + "kind": "exact", + "line": 50 + }, + { + "owner": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "path": "internal/principalmemory/domain_registry_test.go", + "display": "internal/principalmemory/domain_registry_test.go", + "kind": "exact", + "line": 50 + }, + { + "owner": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "path": "internal/principalmemory/query_service.go", + "display": "internal/principalmemory/query_service.go", + "kind": "exact", + "line": 50 + }, + { + "owner": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "path": "internal/principalmemory/query_service_test.go", + "display": "internal/principalmemory/query_service_test.go", + "kind": "exact", + "line": 50 + }, + { + "owner": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "path": "internal/mcp/tools_principal_memory.go", + "display": "internal/mcp/tools_principal_memory.go", + "kind": "exact", + "line": 50 + }, + { + "owner": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "path": "internal/mcp/tools_principal_memory_test.go", + "display": "internal/mcp/tools_principal_memory_test.go", + "kind": "exact", + "line": 50 + }, + { + "owner": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "path": "internal/mcp/tools_recall_principal_test.go", + "display": "internal/mcp/tools_recall_principal_test.go", + "kind": "exact", + "line": 50 + }, + { + "owner": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "path": "internal/mcp/recall_visibility_backfill_test.go", + "display": "internal/mcp/recall_visibility_backfill_test.go", + "kind": "exact", + "line": 50 + }, + { + "owner": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "path": "internal/mcp/store_memory_principal_test.go", + "display": "internal/mcp/store_memory_principal_test.go", + "kind": "exact", + "line": 50 + }, + { + "owner": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "path": "internal/worker/handlers_principal_memory.go", + "display": "internal/worker/handlers_principal_memory.go", + "kind": "exact", + "line": 50 + }, + { + "owner": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "path": "internal/worker/handlers_principal_memory_test.go", + "display": "internal/worker/handlers_principal_memory_test.go", + "kind": "exact", + "line": 50 + }, + { + "owner": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "path": "internal/worker/scope_bypass_w4_test.go", + "display": "internal/worker/scope_bypass_w4_test.go", + "kind": "exact", + "line": 50 + }, + { + "owner": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "path": "internal/worker/retention.go", + "display": "internal/worker/retention.go", + "kind": "exact", + "line": 50 + }, + { + "owner": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "path": "internal/worker/retention_test.go", + "display": "internal/worker/retention_test.go", + "kind": "exact", + "line": 50 + }, + { + "owner": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "path": "internal/db/gorm/memory_store.go", + "display": "internal/db/gorm/memory_store.go", + "kind": "exact", + "line": 50 + }, + { + "owner": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "path": "internal/db/gorm/memory_store_principal_test.go", + "display": "internal/db/gorm/memory_store_principal_test.go", + "kind": "exact", + "line": 50 + }, + { + "owner": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "path": "internal/db/gorm/memory_store_principal_query_test.go", + "display": "internal/db/gorm/memory_store_principal_query_test.go", + "kind": "exact", + "line": 50 + }, + { + "owner": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "path": "internal/db/gorm/purge_store_test.go", + "display": "internal/db/gorm/purge_store_test.go", + "kind": "exact", + "line": 50 + }, + { + "owner": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "path": "tests/critical/data_boundaries/principal_project_retention_test.go", + "display": "tests/critical/data_boundaries/principal_project_retention_test.go", + "kind": "exact", + "line": 50 + }, + { + "owner": "CRITICAL-HARNESS", + "branch": "work/prc-critical-harness", + "path": "tests/critical/customer_mode/customer_mode_test.go", + "display": "tests/critical/customer_mode/customer_mode_test.go", + "kind": "exact", + "line": 51 + }, + { + "owner": "CRITICAL-HARNESS", + "branch": "work/prc-critical-harness", + "path": "tests/critical/customer_mode/compatibility_test.go", + "display": "tests/critical/customer_mode/compatibility_test.go", + "kind": "exact", + "line": 51 + }, + { + "owner": "CRITICAL-HARNESS", + "branch": "work/prc-critical-harness", + "path": "tests/critical/customer_mode/cross_agent_test.go", + "display": "tests/critical/customer_mode/cross_agent_test.go", + "kind": "exact", + "line": 51 + }, + { + "owner": "CRITICAL-HARNESS", + "branch": "work/prc-critical-harness", + "path": "scripts/production-smoke/customer/run-customer-mode.ps1", + "display": "scripts/production-smoke/customer/run-customer-mode.ps1", + "kind": "exact", + "line": 51 + }, + { + "owner": "CRITICAL-HARNESS", + "branch": "work/prc-critical-harness", + "path": "scripts/production-smoke/customer/run-client-compatibility.ps1", + "display": "scripts/production-smoke/customer/run-client-compatibility.ps1", + "kind": "exact", + "line": 51 + }, + { + "owner": "CRITICAL-HARNESS", + "branch": "work/prc-critical-harness", + "path": "scripts/production-smoke/customer/run-cross-agent.ps1", + "display": "scripts/production-smoke/customer/run-cross-agent.ps1", + "kind": "exact", + "line": 51 + }, + { + "owner": "CRITICAL-HARNESS", + "branch": "work/prc-critical-harness", + "path": "scripts/production-smoke/customer/run-diagnostic-matrix.ps1", + "display": "scripts/production-smoke/customer/run-diagnostic-matrix.ps1", + "kind": "exact", + "line": 51 + }, + { + "owner": "CRITICAL-HARNESS", + "branch": "work/prc-critical-harness", + "path": "scripts/production-smoke/customer/assert-product-works.ps1", + "display": "scripts/production-smoke/customer/assert-product-works.ps1", + "kind": "exact", + "line": 51 + }, + { + "owner": "CORE-PUBLIC-TRUTH", + "branch": "work/prc-core-public-truth", + "path": "README.md", + "display": "README.md", + "kind": "exact", + "line": 52 + }, + { + "owner": "CORE-PUBLIC-TRUTH", + "branch": "work/prc-core-public-truth", + "path": "README.ru.md", + "display": "README.ru.md", + "kind": "exact", + "line": 52 + }, + { + "owner": "CORE-PUBLIC-TRUTH", + "branch": "work/prc-core-public-truth", + "path": "README.zh.md", + "display": "README.zh.md", + "kind": "exact", + "line": 52 + }, + { + "owner": "CORE-PUBLIC-TRUTH", + "branch": "work/prc-core-public-truth", + "path": "CONTRIBUTING.md", + "display": "CONTRIBUTING.md", + "kind": "exact", + "line": 52 + }, + { + "owner": "CORE-PUBLIC-TRUTH", + "branch": "work/prc-core-public-truth", + "path": "CHANGELOG.md", + "display": "CHANGELOG.md", + "kind": "exact", + "line": 52 + }, + { + "owner": "CORE-PUBLIC-TRUTH", + "branch": "work/prc-core-public-truth", + "path": "Makefile", + "display": "Makefile", + "kind": "exact", + "line": 52 + }, + { + "owner": "CORE-PUBLIC-TRUTH", + "branch": "work/prc-core-public-truth", + "path": ".env.example", + "display": ".env.example", + "kind": "exact", + "line": 52 + }, + { + "owner": "CORE-PUBLIC-TRUTH", + "branch": "work/prc-core-public-truth", + "path": "docs/DEPLOYMENT.md", + "display": "docs/DEPLOYMENT.md", + "kind": "exact", + "line": 52 + }, + { + "owner": "CORE-PUBLIC-TRUTH", + "branch": "work/prc-core-public-truth", + "path": "docs/MIGRATION.md", + "display": "docs/MIGRATION.md", + "kind": "exact", + "line": 52 + }, + { + "owner": "CORE-PUBLIC-TRUTH", + "branch": "work/prc-core-public-truth", + "path": "docs/PRODUCTION-TESTING-PLAYBOOK.md", + "display": "docs/PRODUCTION-TESTING-PLAYBOOK.md", + "kind": "exact", + "line": 52 + }, + { + "owner": "CORE-PUBLIC-TRUTH", + "branch": "work/prc-core-public-truth", + "path": "docs/arch/CONFIGURATION.md", + "display": "docs/arch/CONFIGURATION.md", + "kind": "exact", + "line": 52 + }, + { + "owner": "CORE-PUBLIC-TRUTH", + "branch": "work/prc-core-public-truth", + "path": "docs/arch/QUICKSTART.md", + "display": "docs/arch/QUICKSTART.md", + "kind": "exact", + "line": 52 + }, + { + "owner": "CORE-PUBLIC-TRUTH", + "branch": "work/prc-core-public-truth", + "path": "docs/release-notes/v6.43.0.md", + "display": "docs/release-notes/v6.43.0.md", + "kind": "exact", + "line": 52 + }, + { + "owner": "CORE-PUBLIC-TRUTH", + "branch": "work/prc-core-public-truth", + "path": "docs/public/engram.jpg", + "display": "docs/public/engram.jpg", + "kind": "exact", + "line": 52 + }, + { + "owner": "CORE-PUBLIC-TRUTH", + "branch": "work/prc-core-public-truth", + "path": "plugin/engram/commands/setup.md", + "display": "plugin/engram/commands/setup.md", + "kind": "exact", + "line": 52 + }, + { + "owner": "CORE-PUBLIC-TRUTH", + "branch": "work/prc-core-public-truth", + "path": "plugin/engram/commands/doctor.md", + "display": "plugin/engram/commands/doctor.md", + "kind": "exact", + "line": 52 + }, + { + "owner": "FINAL-PUBLIC-TRUTH", + "branch": "work/prc-final-public-truth", + "path": "README.md", + "display": "README.md", + "kind": "exact", + "line": 53 + }, + { + "owner": "FINAL-PUBLIC-TRUTH", + "branch": "work/prc-final-public-truth", + "path": "README.ru.md", + "display": "README.ru.md", + "kind": "exact", + "line": 53 + }, + { + "owner": "FINAL-PUBLIC-TRUTH", + "branch": "work/prc-final-public-truth", + "path": "README.zh.md", + "display": "README.zh.md", + "kind": "exact", + "line": 53 + }, + { + "owner": "FINAL-PUBLIC-TRUTH", + "branch": "work/prc-final-public-truth", + "path": "CONTRIBUTING.md", + "display": "CONTRIBUTING.md", + "kind": "exact", + "line": 53 + }, + { + "owner": "FINAL-PUBLIC-TRUTH", + "branch": "work/prc-final-public-truth", + "path": "CHANGELOG.md", + "display": "CHANGELOG.md", + "kind": "exact", + "line": 53 + }, + { + "owner": "FINAL-PUBLIC-TRUTH", + "branch": "work/prc-final-public-truth", + "path": "Makefile", + "display": "Makefile", + "kind": "exact", + "line": 53 + }, + { + "owner": "FINAL-PUBLIC-TRUTH", + "branch": "work/prc-final-public-truth", + "path": ".env.example", + "display": ".env.example", + "kind": "exact", + "line": 53 + }, + { + "owner": "FINAL-PUBLIC-TRUTH", + "branch": "work/prc-final-public-truth", + "path": "docs/DEPLOYMENT.md", + "display": "docs/DEPLOYMENT.md", + "kind": "exact", + "line": 53 + }, + { + "owner": "FINAL-PUBLIC-TRUTH", + "branch": "work/prc-final-public-truth", + "path": "docs/MIGRATION.md", + "display": "docs/MIGRATION.md", + "kind": "exact", + "line": 53 + }, + { + "owner": "FINAL-PUBLIC-TRUTH", + "branch": "work/prc-final-public-truth", + "path": "docs/PRODUCTION-TESTING-PLAYBOOK.md", + "display": "docs/PRODUCTION-TESTING-PLAYBOOK.md", + "kind": "exact", + "line": 53 + }, + { + "owner": "FINAL-PUBLIC-TRUTH", + "branch": "work/prc-final-public-truth", + "path": "docs/operating-engram.md", + "display": "docs/operating-engram.md", + "kind": "exact", + "line": 53 + }, + { + "owner": "FINAL-PUBLIC-TRUTH", + "branch": "work/prc-final-public-truth", + "path": "docs/arch/CONFIGURATION.md", + "display": "docs/arch/CONFIGURATION.md", + "kind": "exact", + "line": 53 + }, + { + "owner": "FINAL-PUBLIC-TRUTH", + "branch": "work/prc-final-public-truth", + "path": "docs/arch/QUICKSTART.md", + "display": "docs/arch/QUICKSTART.md", + "kind": "exact", + "line": 53 + }, + { + "owner": "FINAL-PUBLIC-TRUTH", + "branch": "work/prc-final-public-truth", + "path": "docs/public/engram.jpg", + "display": "docs/public/engram.jpg", + "kind": "exact", + "line": 53 + }, + { + "owner": "FINAL-PUBLIC-TRUTH", + "branch": "work/prc-final-public-truth", + "path": "plugin/engram/commands/setup.md", + "display": "plugin/engram/commands/setup.md", + "kind": "exact", + "line": 53 + }, + { + "owner": "FINAL-PUBLIC-TRUTH", + "branch": "work/prc-final-public-truth", + "path": "plugin/engram/commands/doctor.md", + "display": "plugin/engram/commands/doctor.md", + "kind": "exact", + "line": 53 + }, + { + "owner": "LAUNCHER-FIRST-RUN", + "branch": "work/prc-launcher-first-run", + "path": "cmd/engram/main.go", + "display": "cmd/engram/main.go", + "kind": "exact", + "line": 54 + }, + { + "owner": "LAUNCHER-FIRST-RUN", + "branch": "work/prc-launcher-first-run", + "path": "cmd/engram/main_test.go", + "display": "cmd/engram/main_test.go", + "kind": "exact", + "line": 54 + }, + { + "owner": "LAUNCHER-FIRST-RUN", + "branch": "work/prc-launcher-first-run", + "path": "cmd/engram/wiring.go", + "display": "cmd/engram/wiring.go", + "kind": "exact", + "line": 54 + }, + { + "owner": "LAUNCHER-FIRST-RUN", + "branch": "work/prc-launcher-first-run", + "path": "cmd/engram/exec_windows.go", + "display": "cmd/engram/exec_windows.go", + "kind": "exact", + "line": 54 + }, + { + "owner": "LAUNCHER-FIRST-RUN", + "branch": "work/prc-launcher-first-run", + "path": "cmd/engram/exec_unix.go", + "display": "cmd/engram/exec_unix.go", + "kind": "exact", + "line": 54 + }, + { + "owner": "LAUNCHER-FIRST-RUN", + "branch": "work/prc-launcher-first-run", + "path": "plugin/engram/.engram-project", + "display": "plugin/engram/.engram-project", + "kind": "exact", + "line": 54 + }, + { + "owner": "LAUNCHER-FIRST-RUN", + "branch": "work/prc-launcher-first-run", + "path": "plugin/engram/scripts/run-engram.js", + "display": "plugin/engram/scripts/run-engram.js", + "kind": "exact", + "line": 54 + }, + { + "owner": "LAUNCHER-FIRST-RUN", + "branch": "work/prc-launcher-first-run", + "path": "plugin/engram/scripts/run-engram.test.js", + "display": "plugin/engram/scripts/run-engram.test.js", + "kind": "exact", + "line": 54 + }, + { + "owner": "LAUNCHER-FIRST-RUN", + "branch": "work/prc-launcher-first-run", + "path": "plugin/engram/scripts/ensure-binary.js", + "display": "plugin/engram/scripts/ensure-binary.js", + "kind": "exact", + "line": 54 + }, + { + "owner": "LAUNCHER-FIRST-RUN", + "branch": "work/prc-launcher-first-run", + "path": "plugin/engram/scripts/ensure-binary.test.js", + "display": "plugin/engram/scripts/ensure-binary.test.js", + "kind": "exact", + "line": 54 + }, + { + "owner": "OC-INTEGRATION", + "branch": "work/prc-operator-console-integration", + "path": "apps/operator-console", + "display": "apps/operator-console/**", + "kind": "prefix", + "line": 55 + }, + { + "owner": "S4B-CONTRACT", + "branch": "work/prc-s4b-contract", + "path": ".agent/specs/engram-v7-directives-surfacing", + "display": ".agent/specs/engram-v7-directives-surfacing/**", + "kind": "prefix", + "line": 56 + }, + { + "owner": "V7-S4B-BACKEND", + "branch": "work/prc-v7-s4b-backend", + "path": "internal/cognitive/s4bsurfacing", + "display": "internal/cognitive/s4bsurfacing/**", + "kind": "prefix", + "line": 57 + }, + { + "owner": "V7-CORE-CALLPATH", + "branch": "work/prc-v7-core-callpath", + "path": "internal/cognitive/core/event_bus.go", + "display": "internal/cognitive/core/event_bus.go", + "kind": "exact", + "line": 58 + }, + { + "owner": "V7-CORE-CALLPATH", + "branch": "work/prc-v7-core-callpath", + "path": "internal/cognitive/core/event_bus_test.go", + "display": "internal/cognitive/core/event_bus_test.go", + "kind": "exact", + "line": 58 + }, + { + "owner": "V7-CORE-CALLPATH", + "branch": "work/prc-v7-core-callpath", + "path": "internal/cognitive/core/hint_queue.go", + "display": "internal/cognitive/core/hint_queue.go", + "kind": "exact", + "line": 58 + }, + { + "owner": "V7-CORE-CALLPATH", + "branch": "work/prc-v7-core-callpath", + "path": "internal/cognitive/core/hint_queue_test.go", + "display": "internal/cognitive/core/hint_queue_test.go", + "kind": "exact", + "line": 58 + }, + { + "owner": "V7-CORE-CALLPATH", + "branch": "work/prc-v7-core-callpath", + "path": "internal/cognitive/s3ambient/queue.go", + "display": "internal/cognitive/s3ambient/queue.go", + "kind": "exact", + "line": 58 + }, + { + "owner": "V7-CORE-CALLPATH", + "branch": "work/prc-v7-core-callpath", + "path": "internal/cognitive/s3ambient/subsystem.go", + "display": "internal/cognitive/s3ambient/subsystem.go", + "kind": "exact", + "line": 58 + }, + { + "owner": "V7-RUNTIME-WIRING", + "branch": "work/prc-v7-runtime-wiring", + "path": "internal/worker/service.go", + "display": "internal/worker/service.go", + "kind": "exact", + "line": 59 + }, + { + "owner": "V7-RUNTIME-WIRING", + "branch": "work/prc-v7-runtime-wiring", + "path": "internal/worker/service_v7_integration_test.go", + "display": "internal/worker/service_v7_integration_test.go", + "kind": "exact", + "line": 59 + }, + { + "owner": "V7-RUNTIME-WIRING", + "branch": "work/prc-v7-runtime-wiring", + "path": "internal/worker/handlers_stats_v7.go", + "display": "internal/worker/handlers_stats_v7.go", + "kind": "exact", + "line": 59 + }, + { + "owner": "V7-RUNTIME-WIRING", + "branch": "work/prc-v7-runtime-wiring", + "path": "internal/worker/handlers_stats_v7_test.go", + "display": "internal/worker/handlers_stats_v7_test.go", + "kind": "exact", + "line": 59 + }, + { + "owner": "V7-TELEMETRY-WIRING", + "branch": "work/prc-v7-telemetry-wiring", + "path": "internal/cognitive/s5/metrics.go", + "display": "internal/cognitive/s5/metrics.go", + "kind": "exact", + "line": 60 + }, + { + "owner": "V7-TELEMETRY-WIRING", + "branch": "work/prc-v7-telemetry-wiring", + "path": "internal/cognitive/s5/provider.go", + "display": "internal/cognitive/s5/provider.go", + "kind": "exact", + "line": 60 + }, + { + "owner": "V7-TELEMETRY-WIRING", + "branch": "work/prc-v7-telemetry-wiring", + "path": "internal/cognitive/s5/provider_test.go", + "display": "internal/cognitive/s5/provider_test.go", + "kind": "exact", + "line": 60 + }, + { + "owner": "V7-TELEMETRY-WIRING", + "branch": "work/prc-v7-telemetry-wiring", + "path": "internal/cognitive/s5/source_adapter.go", + "display": "internal/cognitive/s5/source_adapter.go", + "kind": "exact", + "line": 60 + }, + { + "owner": "V7-TELEMETRY-WIRING", + "branch": "work/prc-v7-telemetry-wiring", + "path": "internal/cognitive/s5/source_adapter_test.go", + "display": "internal/cognitive/s5/source_adapter_test.go", + "kind": "exact", + "line": 60 + }, + { + "owner": "ROADMAP-RECONCILIATION", + "branch": "work/prc-roadmap-reconciliation", + "path": ".agent/specs/roadmap.md", + "display": ".agent/specs/roadmap.md", + "kind": "exact", + "line": 61 + }, + { + "owner": "ROADMAP-RECONCILIATION", + "branch": "work/prc-roadmap-reconciliation", + "path": ".agent/specs/ui-surface-ledger.md", + "display": ".agent/specs/ui-surface-ledger.md", + "kind": "exact", + "line": 61 + }, + { + "owner": "ROADMAP-RECONCILIATION", + "branch": "work/prc-roadmap-reconciliation", + "path": ".agent/specs/operator-console-production-integration", + "display": ".agent/specs/operator-console-production-integration/**", + "kind": "prefix", + "line": 61 + }, + { + "owner": "ROADMAP-RECONCILIATION", + "branch": "work/prc-roadmap-reconciliation", + "path": ".agent/specs/engram-v7-ambient/spec.md", + "display": ".agent/specs/engram-v7-ambient/spec.md", + "kind": "exact", + "line": 61 + }, + { + "owner": "ROADMAP-RECONCILIATION", + "branch": "work/prc-roadmap-reconciliation", + "path": ".agent/specs/engram-v7-ambient/plan.md", + "display": ".agent/specs/engram-v7-ambient/plan.md", + "kind": "exact", + "line": 61 + }, + { + "owner": "ROADMAP-RECONCILIATION", + "branch": "work/prc-roadmap-reconciliation", + "path": ".agent/specs/engram-v7-ambient/checklists/general.md", + "display": ".agent/specs/engram-v7-ambient/checklists/general.md", + "kind": "exact", + "line": 61 + }, + { + "owner": "ROADMAP-RECONCILIATION", + "branch": "work/prc-roadmap-reconciliation", + "path": ".agent/specs/engram-v7-ambient/changes/CR-001-initial-scope/change.md", + "display": ".agent/specs/engram-v7-ambient/changes/CR-001-initial-scope/change.md", + "kind": "exact", + "line": 61 + }, + { + "owner": "ROADMAP-RECONCILIATION", + "branch": "work/prc-roadmap-reconciliation", + "path": ".agent/specs/engram-v7-ambient/changes/CR-001-initial-scope/tasks.md", + "display": ".agent/specs/engram-v7-ambient/changes/CR-001-initial-scope/tasks.md", + "kind": "exact", + "line": 61 + }, + { + "owner": "NORTHSTAR-CI-A-CONTRACTS", + "branch": "work/prc-northstar-ci-a-contracts", + "path": ".agent/specs/engram-absorption/ci-a-dense-vector/spec.md", + "display": ".agent/specs/engram-absorption/ci-a-dense-vector/spec.md", + "kind": "exact", + "line": 62 + }, + { + "owner": "NORTHSTAR-CI-A-CONTRACTS", + "branch": "work/prc-northstar-ci-a-contracts", + "path": ".agent/specs/engram-absorption/ci-a-dense-vector/plan.md", + "display": ".agent/specs/engram-absorption/ci-a-dense-vector/plan.md", + "kind": "exact", + "line": 62 + }, + { + "owner": "NORTHSTAR-CI-A-CONTRACTS", + "branch": "work/prc-northstar-ci-a-contracts", + "path": ".agent/specs/engram-absorption/ci-a-dense-vector/checklists/general.md", + "display": ".agent/specs/engram-absorption/ci-a-dense-vector/checklists/general.md", + "kind": "exact", + "line": 62 + }, + { + "owner": "NORTHSTAR-CI-A-CONTRACTS", + "branch": "work/prc-northstar-ci-a-contracts", + "path": ".agent/specs/engram-absorption/ci-a-dense-vector/changes/CR-001-initial-scope/change.md", + "display": ".agent/specs/engram-absorption/ci-a-dense-vector/changes/CR-001-initial-scope/change.md", + "kind": "exact", + "line": 62 + }, + { + "owner": "NORTHSTAR-CI-A-CONTRACTS", + "branch": "work/prc-northstar-ci-a-contracts", + "path": ".agent/specs/engram-absorption/ci-a-dense-vector/changes/CR-001-initial-scope/tasks.md", + "display": ".agent/specs/engram-absorption/ci-a-dense-vector/changes/CR-001-initial-scope/tasks.md", + "kind": "exact", + "line": 62 + }, + { + "owner": "NORTHSTAR-CI-B-CONTRACTS", + "branch": "work/prc-northstar-ci-b-contracts", + "path": ".agent/specs/engram-absorption/ci-b-graph-watcher-context/spec.md", + "display": ".agent/specs/engram-absorption/ci-b-graph-watcher-context/spec.md", + "kind": "exact", + "line": 63 + }, + { + "owner": "NORTHSTAR-CI-B-CONTRACTS", + "branch": "work/prc-northstar-ci-b-contracts", + "path": ".agent/specs/engram-absorption/ci-b-graph-watcher-context/plan.md", + "display": ".agent/specs/engram-absorption/ci-b-graph-watcher-context/plan.md", + "kind": "exact", + "line": 63 + }, + { + "owner": "NORTHSTAR-CI-B-CONTRACTS", + "branch": "work/prc-northstar-ci-b-contracts", + "path": ".agent/specs/engram-absorption/ci-b-graph-watcher-context/checklists/general.md", + "display": ".agent/specs/engram-absorption/ci-b-graph-watcher-context/checklists/general.md", + "kind": "exact", + "line": 63 + }, + { + "owner": "NORTHSTAR-CI-B-CONTRACTS", + "branch": "work/prc-northstar-ci-b-contracts", + "path": ".agent/specs/engram-absorption/ci-b-graph-watcher-context/changes/CR-001-initial-scope/change.md", + "display": ".agent/specs/engram-absorption/ci-b-graph-watcher-context/changes/CR-001-initial-scope/change.md", + "kind": "exact", + "line": 63 + }, + { + "owner": "NORTHSTAR-CI-B-CONTRACTS", + "branch": "work/prc-northstar-ci-b-contracts", + "path": ".agent/specs/engram-absorption/ci-b-graph-watcher-context/changes/CR-001-initial-scope/tasks.md", + "display": ".agent/specs/engram-absorption/ci-b-graph-watcher-context/changes/CR-001-initial-scope/tasks.md", + "kind": "exact", + "line": 63 + }, + { + "owner": "NORTHSTAR-BOOK-CONTRACTS", + "branch": "work/prc-northstar-book-contracts", + "path": ".agent/specs/engram-absorption/book/prd.md", + "display": ".agent/specs/engram-absorption/book/prd.md", + "kind": "exact", + "line": 64 + }, + { + "owner": "NORTHSTAR-BOOK-CONTRACTS", + "branch": "work/prc-northstar-book-contracts", + "path": ".agent/specs/engram-absorption/book/spec.md", + "display": ".agent/specs/engram-absorption/book/spec.md", + "kind": "exact", + "line": 64 + }, + { + "owner": "NORTHSTAR-BOOK-CONTRACTS", + "branch": "work/prc-northstar-book-contracts", + "path": ".agent/specs/engram-absorption/book/plan.md", + "display": ".agent/specs/engram-absorption/book/plan.md", + "kind": "exact", + "line": 64 + }, + { + "owner": "NORTHSTAR-BOOK-CONTRACTS", + "branch": "work/prc-northstar-book-contracts", + "path": ".agent/specs/engram-absorption/book/checklists/general.md", + "display": ".agent/specs/engram-absorption/book/checklists/general.md", + "kind": "exact", + "line": 64 + }, + { + "owner": "NORTHSTAR-BOOK-CONTRACTS", + "branch": "work/prc-northstar-book-contracts", + "path": ".agent/specs/engram-absorption/book/changes/CR-001-initial-scope/change.md", + "display": ".agent/specs/engram-absorption/book/changes/CR-001-initial-scope/change.md", + "kind": "exact", + "line": 64 + }, + { + "owner": "NORTHSTAR-BOOK-CONTRACTS", + "branch": "work/prc-northstar-book-contracts", + "path": ".agent/specs/engram-absorption/book/changes/CR-001-initial-scope/tasks.md", + "display": ".agent/specs/engram-absorption/book/changes/CR-001-initial-scope/tasks.md", + "kind": "exact", + "line": 64 + }, + { + "owner": "NORTHSTAR-MEM-CONTRACTS", + "branch": "work/prc-northstar-mem-contracts", + "path": ".agent/specs/engram-absorption/mem-residual/spec.md", + "display": ".agent/specs/engram-absorption/mem-residual/spec.md", + "kind": "exact", + "line": 65 + }, + { + "owner": "NORTHSTAR-MEM-CONTRACTS", + "branch": "work/prc-northstar-mem-contracts", + "path": ".agent/specs/engram-absorption/mem-residual/plan.md", + "display": ".agent/specs/engram-absorption/mem-residual/plan.md", + "kind": "exact", + "line": 65 + }, + { + "owner": "NORTHSTAR-MEM-CONTRACTS", + "branch": "work/prc-northstar-mem-contracts", + "path": ".agent/specs/engram-absorption/mem-residual/checklists/general.md", + "display": ".agent/specs/engram-absorption/mem-residual/checklists/general.md", + "kind": "exact", + "line": 65 + }, + { + "owner": "NORTHSTAR-MEM-CONTRACTS", + "branch": "work/prc-northstar-mem-contracts", + "path": ".agent/specs/engram-absorption/mem-residual/changes/CR-001-initial-scope/change.md", + "display": ".agent/specs/engram-absorption/mem-residual/changes/CR-001-initial-scope/change.md", + "kind": "exact", + "line": 65 + }, + { + "owner": "NORTHSTAR-MEM-CONTRACTS", + "branch": "work/prc-northstar-mem-contracts", + "path": ".agent/specs/engram-absorption/mem-residual/changes/CR-001-initial-scope/tasks.md", + "display": ".agent/specs/engram-absorption/mem-residual/changes/CR-001-initial-scope/tasks.md", + "kind": "exact", + "line": 65 + }, + { + "owner": "NORTHSTAR-EFFECTIVENESS-CONTRACTS", + "branch": "work/prc-northstar-effectiveness-contracts", + "path": ".agent/specs/engram-effectiveness/production-ready-residual/spec.md", + "display": ".agent/specs/engram-effectiveness/production-ready-residual/spec.md", + "kind": "exact", + "line": 66 + }, + { + "owner": "NORTHSTAR-EFFECTIVENESS-CONTRACTS", + "branch": "work/prc-northstar-effectiveness-contracts", + "path": ".agent/specs/engram-effectiveness/production-ready-residual/plan.md", + "display": ".agent/specs/engram-effectiveness/production-ready-residual/plan.md", + "kind": "exact", + "line": 66 + }, + { + "owner": "NORTHSTAR-EFFECTIVENESS-CONTRACTS", + "branch": "work/prc-northstar-effectiveness-contracts", + "path": ".agent/specs/engram-effectiveness/production-ready-residual/checklists/general.md", + "display": ".agent/specs/engram-effectiveness/production-ready-residual/checklists/general.md", + "kind": "exact", + "line": 66 + }, + { + "owner": "NORTHSTAR-EFFECTIVENESS-CONTRACTS", + "branch": "work/prc-northstar-effectiveness-contracts", + "path": ".agent/specs/engram-effectiveness/production-ready-residual/changes/CR-001-initial-scope/change.md", + "display": ".agent/specs/engram-effectiveness/production-ready-residual/changes/CR-001-initial-scope/change.md", + "kind": "exact", + "line": 66 + }, + { + "owner": "NORTHSTAR-EFFECTIVENESS-CONTRACTS", + "branch": "work/prc-northstar-effectiveness-contracts", + "path": ".agent/specs/engram-effectiveness/production-ready-residual/changes/CR-001-initial-scope/tasks.md", + "display": ".agent/specs/engram-effectiveness/production-ready-residual/changes/CR-001-initial-scope/tasks.md", + "kind": "exact", + "line": 66 + }, + { + "owner": "NORTHSTAR-SETTINGS-CONTRACTS", + "branch": "work/prc-northstar-settings-contracts", + "path": ".agent/specs/settings-store/production-ready-residual/spec.md", + "display": ".agent/specs/settings-store/production-ready-residual/spec.md", + "kind": "exact", + "line": 67 + }, + { + "owner": "NORTHSTAR-SETTINGS-CONTRACTS", + "branch": "work/prc-northstar-settings-contracts", + "path": ".agent/specs/settings-store/production-ready-residual/plan.md", + "display": ".agent/specs/settings-store/production-ready-residual/plan.md", + "kind": "exact", + "line": 67 + }, + { + "owner": "NORTHSTAR-SETTINGS-CONTRACTS", + "branch": "work/prc-northstar-settings-contracts", + "path": ".agent/specs/settings-store/production-ready-residual/checklists/general.md", + "display": ".agent/specs/settings-store/production-ready-residual/checklists/general.md", + "kind": "exact", + "line": 67 + }, + { + "owner": "NORTHSTAR-SETTINGS-CONTRACTS", + "branch": "work/prc-northstar-settings-contracts", + "path": ".agent/specs/settings-store/production-ready-residual/changes/CR-001-initial-scope/change.md", + "display": ".agent/specs/settings-store/production-ready-residual/changes/CR-001-initial-scope/change.md", + "kind": "exact", + "line": 67 + }, + { + "owner": "NORTHSTAR-SETTINGS-CONTRACTS", + "branch": "work/prc-northstar-settings-contracts", + "path": ".agent/specs/settings-store/production-ready-residual/changes/CR-001-initial-scope/tasks.md", + "display": ".agent/specs/settings-store/production-ready-residual/changes/CR-001-initial-scope/tasks.md", + "kind": "exact", + "line": 67 + } + ], + "repeated_exact_paths": [ + { + "path": ".env.example", + "exact_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "prefix_owners": [], + "effective_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "declared_epoch": true, + "epoch_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ] + }, + { + "path": ".github/workflows/test.yml", + "exact_owners": [ + "RELEASE-GATES", + "IMAGE-REMEDIATION" + ], + "prefix_owners": [], + "effective_owners": [ + "RELEASE-GATES", + "IMAGE-REMEDIATION" + ], + "declared_epoch": true, + "epoch_owners": [ + "RELEASE-GATES", + "IMAGE-REMEDIATION" + ] + }, + { + "path": "apps/operator-console/package-lock.json", + "exact_owners": [ + "IMAGE-REMEDIATION" + ], + "prefix_owners": [ + "OC-INTEGRATION" + ], + "effective_owners": [ + "IMAGE-REMEDIATION", + "OC-INTEGRATION" + ], + "declared_epoch": true, + "epoch_owners": [ + "IMAGE-REMEDIATION", + "OC-INTEGRATION" + ] + }, + { + "path": "apps/operator-console/package.json", + "exact_owners": [ + "IMAGE-REMEDIATION" + ], + "prefix_owners": [ + "OC-INTEGRATION" + ], + "effective_owners": [ + "IMAGE-REMEDIATION", + "OC-INTEGRATION" + ], + "declared_epoch": true, + "epoch_owners": [ + "IMAGE-REMEDIATION", + "OC-INTEGRATION" + ] + }, + { + "path": "CHANGELOG.md", + "exact_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "prefix_owners": [], + "effective_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "declared_epoch": true, + "epoch_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ] + }, + { + "path": "CONTRIBUTING.md", + "exact_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "prefix_owners": [], + "effective_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "declared_epoch": true, + "epoch_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ] + }, + { + "path": "deploy/docker-compose.runtime.yml", + "exact_owners": [ + "IMAGE-REMEDIATION", + "DEPLOYMENT-ROLLBACK" + ], + "prefix_owners": [], + "effective_owners": [ + "IMAGE-REMEDIATION", + "DEPLOYMENT-ROLLBACK" + ], + "declared_epoch": true, + "epoch_owners": [ + "IMAGE-REMEDIATION", + "DEPLOYMENT-ROLLBACK" + ] + }, + { + "path": "docker-compose.yml", + "exact_owners": [ + "IMAGE-REMEDIATION", + "DEPLOYMENT-ROLLBACK" + ], + "prefix_owners": [], + "effective_owners": [ + "IMAGE-REMEDIATION", + "DEPLOYMENT-ROLLBACK" + ], + "declared_epoch": true, + "epoch_owners": [ + "IMAGE-REMEDIATION", + "DEPLOYMENT-ROLLBACK" + ] + }, + { + "path": "Dockerfile", + "exact_owners": [ + "SECURITY-TOOLCHAIN", + "IMAGE-REMEDIATION" + ], + "prefix_owners": [], + "effective_owners": [ + "SECURITY-TOOLCHAIN", + "IMAGE-REMEDIATION" + ], + "declared_epoch": true, + "epoch_owners": [ + "SECURITY-TOOLCHAIN", + "IMAGE-REMEDIATION" + ] + }, + { + "path": "docs/arch/CONFIGURATION.md", + "exact_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "prefix_owners": [], + "effective_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "declared_epoch": true, + "epoch_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ] + }, + { + "path": "docs/arch/QUICKSTART.md", + "exact_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "prefix_owners": [], + "effective_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "declared_epoch": true, + "epoch_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ] + }, + { + "path": "docs/DEPLOYMENT.md", + "exact_owners": [ + "IMAGE-REMEDIATION", + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "prefix_owners": [], + "effective_owners": [ + "IMAGE-REMEDIATION", + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "declared_epoch": true, + "epoch_owners": [ + "IMAGE-REMEDIATION", + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ] + }, + { + "path": "docs/MIGRATION.md", + "exact_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "prefix_owners": [], + "effective_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "declared_epoch": true, + "epoch_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ] + }, + { + "path": "docs/operating-engram.md", + "exact_owners": [ + "REDACTION-LIVE-CONTRACT", + "FINAL-PUBLIC-TRUTH" + ], + "prefix_owners": [], + "effective_owners": [ + "REDACTION-LIVE-CONTRACT", + "FINAL-PUBLIC-TRUTH" + ], + "declared_epoch": true, + "epoch_owners": [ + "REDACTION-LIVE-CONTRACT", + "FINAL-PUBLIC-TRUTH" + ] + }, + { + "path": "docs/PRODUCTION-TESTING-PLAYBOOK.md", + "exact_owners": [ + "IMAGE-REMEDIATION", + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "prefix_owners": [], + "effective_owners": [ + "IMAGE-REMEDIATION", + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "declared_epoch": true, + "epoch_owners": [ + "IMAGE-REMEDIATION", + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ] + }, + { + "path": "docs/public/engram.jpg", + "exact_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "prefix_owners": [], + "effective_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "declared_epoch": true, + "epoch_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ] + }, + { + "path": "internal/bulkops/facade_test.go", + "exact_owners": [ + "DB-BULKOPS", + "INGEST-DOC-SNAPSHOT-DEMOLITION" + ], + "prefix_owners": [], + "effective_owners": [ + "DB-BULKOPS", + "INGEST-DOC-SNAPSHOT-DEMOLITION" + ], + "declared_epoch": true, + "epoch_owners": [ + "DB-BULKOPS", + "INGEST-DOC-SNAPSHOT-DEMOLITION" + ] + }, + { + "path": "internal/bulkops/facade.go", + "exact_owners": [ + "DB-BULKOPS", + "INGEST-DOC-SNAPSHOT-DEMOLITION", + "DURABLE-AUDIT-BOUNDARIES" + ], + "prefix_owners": [], + "effective_owners": [ + "DB-BULKOPS", + "INGEST-DOC-SNAPSHOT-DEMOLITION", + "DURABLE-AUDIT-BOUNDARIES" + ], + "declared_epoch": true, + "epoch_owners": [ + "DB-BULKOPS", + "INGEST-DOC-SNAPSHOT-DEMOLITION", + "DURABLE-AUDIT-BOUNDARIES" + ] + }, + { + "path": "internal/bulkops/rollback_test.go", + "exact_owners": [ + "DB-BULKOPS", + "CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK" + ], + "prefix_owners": [], + "effective_owners": [ + "DB-BULKOPS", + "CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK" + ], + "declared_epoch": true, + "epoch_owners": [ + "DB-BULKOPS", + "CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK" + ] + }, + { + "path": "internal/db/gorm/candidate_store_test.go", + "exact_owners": [ + "DB-BULKOPS", + "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK", + "DB-TEST-POOL-HYGIENE", + "DB-GOVERNANCE", + "CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK" + ], + "prefix_owners": [], + "effective_owners": [ + "DB-BULKOPS", + "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK", + "DB-TEST-POOL-HYGIENE", + "DB-GOVERNANCE", + "CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK" + ], + "declared_epoch": true, + "epoch_owners": [ + "DB-BULKOPS", + "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK", + "DB-TEST-POOL-HYGIENE", + "DB-GOVERNANCE", + "CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK" + ] + }, + { + "path": "internal/db/gorm/candidate_store.go", + "exact_owners": [ + "DB-BULKOPS", + "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK", + "DB-GOVERNANCE", + "CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK" + ], + "prefix_owners": [], + "effective_owners": [ + "DB-BULKOPS", + "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK", + "DB-GOVERNANCE", + "CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK" + ], + "declared_epoch": true, + "epoch_owners": [ + "DB-BULKOPS", + "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK", + "DB-GOVERNANCE", + "CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK" + ] + }, + { + "path": "internal/db/gorm/user_store.go", + "exact_owners": [ + "DB-AUTH", + "AUTH-BOOTSTRAP-SECURITY", + "DURABLE-AUDIT-BOUNDARIES" + ], + "prefix_owners": [], + "effective_owners": [ + "DB-AUTH", + "AUTH-BOOTSTRAP-SECURITY", + "DURABLE-AUDIT-BOUNDARIES" + ], + "declared_epoch": true, + "epoch_owners": [ + "DB-AUTH", + "AUTH-BOOTSTRAP-SECURITY", + "DURABLE-AUDIT-BOUNDARIES" + ] + }, + { + "path": "internal/mcp/tools_bulkops.go", + "exact_owners": [ + "DB-BULKOPS", + "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK" + ], + "prefix_owners": [], + "effective_owners": [ + "DB-BULKOPS", + "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK" + ], + "declared_epoch": true, + "epoch_owners": [ + "DB-BULKOPS", + "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK" + ] + }, + { + "path": "internal/mcp/tools_dryrun_test.go", + "exact_owners": [ + "DB-BULKOPS", + "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK" + ], + "prefix_owners": [], + "effective_owners": [ + "DB-BULKOPS", + "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK" + ], + "declared_epoch": true, + "epoch_owners": [ + "DB-BULKOPS", + "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK" + ] + }, + { + "path": "internal/mcp/tools_memory.go", + "exact_owners": [ + "MCP-STRUCTURED-INPUT-VALIDATION", + "REDACTION-LIVE-CONTRACT" + ], + "prefix_owners": [], + "effective_owners": [ + "MCP-STRUCTURED-INPUT-VALIDATION", + "REDACTION-LIVE-CONTRACT" + ], + "declared_epoch": true, + "epoch_owners": [ + "MCP-STRUCTURED-INPUT-VALIDATION", + "REDACTION-LIVE-CONTRACT" + ] + }, + { + "path": "internal/worker/auth_handlers.go", + "exact_owners": [ + "DB-AUTH", + "AUTH-BOOTSTRAP-SECURITY", + "DURABLE-AUDIT-BOUNDARIES" + ], + "prefix_owners": [], + "effective_owners": [ + "DB-AUTH", + "AUTH-BOOTSTRAP-SECURITY", + "DURABLE-AUDIT-BOUNDARIES" + ], + "declared_epoch": true, + "epoch_owners": [ + "DB-AUTH", + "AUTH-BOOTSTRAP-SECURITY", + "DURABLE-AUDIT-BOUNDARIES" + ] + }, + { + "path": "internal/worker/service.go", + "exact_owners": [ + "AUTH-BOOTSTRAP-SECURITY", + "REDACTION-LIVE-CONTRACT", + "V7-RUNTIME-WIRING" + ], + "prefix_owners": [], + "effective_owners": [ + "AUTH-BOOTSTRAP-SECURITY", + "REDACTION-LIVE-CONTRACT", + "V7-RUNTIME-WIRING" + ], + "declared_epoch": true, + "epoch_owners": [ + "AUTH-BOOTSTRAP-SECURITY", + "REDACTION-LIVE-CONTRACT", + "V7-RUNTIME-WIRING" + ] + }, + { + "path": "Makefile", + "exact_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "prefix_owners": [], + "effective_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "declared_epoch": true, + "epoch_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ] + }, + { + "path": "pkg/models/snapshot.go", + "exact_owners": [ + "DB-BULKOPS", + "INGEST-DOC-SNAPSHOT-DEMOLITION" + ], + "prefix_owners": [], + "effective_owners": [ + "DB-BULKOPS", + "INGEST-DOC-SNAPSHOT-DEMOLITION" + ], + "declared_epoch": true, + "epoch_owners": [ + "DB-BULKOPS", + "INGEST-DOC-SNAPSHOT-DEMOLITION" + ] + }, + { + "path": "plugin/engram/commands/doctor.md", + "exact_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "prefix_owners": [], + "effective_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "declared_epoch": true, + "epoch_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ] + }, + { + "path": "plugin/engram/commands/setup.md", + "exact_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "prefix_owners": [], + "effective_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "declared_epoch": true, + "epoch_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ] + }, + { + "path": "README.md", + "exact_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "prefix_owners": [], + "effective_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "declared_epoch": true, + "epoch_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ] + }, + { + "path": "README.ru.md", + "exact_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "prefix_owners": [], + "effective_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "declared_epoch": true, + "epoch_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ] + }, + { + "path": "README.zh.md", + "exact_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "prefix_owners": [], + "effective_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "declared_epoch": true, + "epoch_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ] + } + ], + "prefix_intersections": [ + { + "left_owner": "IMAGE-REMEDIATION", + "left": "apps/operator-console/package.json", + "right_owner": "OC-INTEGRATION", + "right": "apps/operator-console/**", + "exact_path": "apps/operator-console/package.json", + "declared_epoch": true + }, + { + "left_owner": "IMAGE-REMEDIATION", + "left": "apps/operator-console/package-lock.json", + "right_owner": "OC-INTEGRATION", + "right": "apps/operator-console/**", + "exact_path": "apps/operator-console/package-lock.json", + "declared_epoch": true + } + ], + "epochs": [ + { + "path": "internal/db/gorm/candidate_store.go", + "owners": [ + "DB-BULKOPS", + "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK", + "DB-GOVERNANCE", + "CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK" + ], + "transfer_gate": "rejected predecessor checker/hash recorded; rework uses exact base `68b2ce5835c7c6efdf1c68da9eedcb8d9c3837ef`; each accepted successor requires checker PASS, post-review PASS, integration SHA, and exact rebase before edit", + "line": 6 + }, + { + "path": "internal/db/gorm/candidate_store_test.go", + "owners": [ + "DB-BULKOPS", + "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK", + "DB-TEST-POOL-HYGIENE", + "DB-GOVERNANCE", + "CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK" + ], + "transfer_gate": "behavioral-edge head `bd68c05baf4b7250096dd84f56bebea2aa555970` remains current authority until pool-hygiene product `276337b3e96aa5af6d2e7dd9a0002ff957e5ffc9` plus evidence `68242c48aaad62ec087166eeb9ea32f14d189450` receive fresh checker and post-review; later successors require exact integration and rebase", + "line": 7 + }, + { + "path": "internal/mcp/tools_bulkops.go", + "owners": [ + "DB-BULKOPS", + "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK" + ], + "transfer_gate": "rejected predecessor checker/hash recorded; rework base is exact rejected head; checker and post-review PASS plus integration SHA close the transfer", + "line": 8 + }, + { + "path": "internal/mcp/tools_dryrun_test.go", + "owners": [ + "DB-BULKOPS", + "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK" + ], + "transfer_gate": "rejected predecessor checker/hash recorded; rework base is exact rejected head; checker and post-review PASS plus integration SHA close the transfer", + "line": 8 + }, + { + "path": "internal/bulkops/facade.go", + "owners": [ + "DB-BULKOPS", + "INGEST-DOC-SNAPSHOT-DEMOLITION", + "DURABLE-AUDIT-BOUNDARIES" + ], + "transfer_gate": "behavioral-edge composite checker and post-review PASS; exact integration SHA recorded; demolition rebased before edit; historical ingest guard green before durable-audit fault work", + "line": 9 + }, + { + "path": "internal/bulkops/facade_test.go", + "owners": [ + "DB-BULKOPS", + "INGEST-DOC-SNAPSHOT-DEMOLITION" + ], + "transfer_gate": "accepted behavioral-edge composite integrated; demolition worktree rebased; focused historical-only regressions PASS before integration", + "line": 10 + }, + { + "path": "internal/bulkops/rollback_test.go", + "owners": [ + "DB-BULKOPS", + "CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK" + ], + "transfer_gate": "accepted behavioral-edge composite and DB-GOVERNANCE integrated; candidate-review successor rebased; combined checker and post-review PASS", + "line": 11 + }, + { + "path": "pkg/models/snapshot.go", + "owners": [ + "DB-BULKOPS", + "INGEST-DOC-SNAPSHOT-DEMOLITION" + ], + "transfer_gate": "accepted behavioral-edge composite integrated; demolition successor rebased; persistence-compatibility and non-executable regressions PASS", + "line": 12 + }, + { + "path": "internal/db/gorm/user_store.go", + "owners": [ + "DB-AUTH", + "AUTH-BOOTSTRAP-SECURITY", + "DURABLE-AUDIT-BOUNDARIES" + ], + "transfer_gate": "each predecessor checker and post-review PASS, integration SHA recorded, successor rebased; no simultaneous writer", + "line": 13 + }, + { + "path": "internal/worker/auth_handlers.go", + "owners": [ + "DB-AUTH", + "AUTH-BOOTSTRAP-SECURITY", + "DURABLE-AUDIT-BOUNDARIES" + ], + "transfer_gate": "each predecessor checker and post-review PASS, integration SHA recorded, successor rebased; no simultaneous writer", + "line": 14 + }, + { + "path": "internal/worker/service.go", + "owners": [ + "AUTH-BOOTSTRAP-SECURITY", + "REDACTION-LIVE-CONTRACT", + "V7-RUNTIME-WIRING" + ], + "transfer_gate": "auth bootstrap checker and post-review PASS, commit integrated, redaction worktree rebased and boot-captured rules proved; V7 later rebases the redaction integration and reruns both auth and redaction route regressions", + "line": 15 + }, + { + "path": "internal/mcp/tools_memory.go", + "owners": [ + "MCP-STRUCTURED-INPUT-VALIDATION", + "REDACTION-LIVE-CONTRACT" + ], + "transfer_gate": "structured-input checker/post-review PASS and exact integration SHA; redaction successor rebased so malformed input remains zero-audit/zero-write before matched-mutation audit enforcement", + "line": 16 + }, + { + "path": "docs/operating-engram.md", + "owners": [ + "REDACTION-LIVE-CONTRACT", + "FINAL-PUBLIC-TRUTH" + ], + "transfer_gate": "redaction live contract checker/post-review PASS and exact integration SHA; FINAL rebased and revalidates the operator claims against final published artifacts", + "line": 17 + }, + { + "path": "Dockerfile", + "owners": [ + "SECURITY-TOOLCHAIN", + "IMAGE-REMEDIATION" + ], + "transfer_gate": "toolchain checker and post-review PASS, commit integrated, image worktree rebased, zero-finding rebuild and scan before successor integration", + "line": 18 + }, + { + "path": ".github/workflows/test.yml", + "owners": [ + "RELEASE-GATES", + "IMAGE-REMEDIATION" + ], + "transfer_gate": "release-gates checker and post-review PASS, commit integrated, image worktree rebased before workflow image-identity changes", + "line": 19 + }, + { + "path": "docker-compose.yml", + "owners": [ + "IMAGE-REMEDIATION", + "DEPLOYMENT-ROLLBACK" + ], + "transfer_gate": "image checker and post-review PASS, `final-image-set.json` recorded, deployment worktree rebased, fresh scan after edits", + "line": 20 + }, + { + "path": "deploy/docker-compose.runtime.yml", + "owners": [ + "IMAGE-REMEDIATION", + "DEPLOYMENT-ROLLBACK" + ], + "transfer_gate": "image checker and post-review PASS, `final-image-set.json` recorded, deployment worktree rebased, fresh scan after edits", + "line": 20 + }, + { + "path": "apps/operator-console/package.json", + "owners": [ + "IMAGE-REMEDIATION", + "OC-INTEGRATION" + ], + "transfer_gate": "image checker and post-review PASS, OC worktree rebased, any later dependency edit reruns audit/build/browser/image scan", + "line": 21 + }, + { + "path": "apps/operator-console/package-lock.json", + "owners": [ + "IMAGE-REMEDIATION", + "OC-INTEGRATION" + ], + "transfer_gate": "image checker and post-review PASS, OC worktree rebased, any later dependency edit reruns audit/build/browser/image scan", + "line": 21 + }, + { + "path": "docs/DEPLOYMENT.md", + "owners": [ + "IMAGE-REMEDIATION", + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "transfer_gate": "image proof integrated; CORE rebased for M5; FINAL rebased to exact M6 integration and final-version artifact before edit", + "line": 22 + }, + { + "path": "docs/PRODUCTION-TESTING-PLAYBOOK.md", + "owners": [ + "IMAGE-REMEDIATION", + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "transfer_gate": "image proof integrated; CORE rebased for M5; FINAL rebased to exact M6 integration and final-version artifact before edit", + "line": 22 + }, + { + "path": "README.md", + "owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "transfer_gate": "M5 release published and proved; FINAL worktree rebased to exact M6 integration; final version artifact and exact release-note path recorded before edit", + "line": 23 + }, + { + "path": "README.ru.md", + "owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "transfer_gate": "M5 release published and proved; FINAL worktree rebased to exact M6 integration; final version artifact and exact release-note path recorded before edit", + "line": 23 + }, + { + "path": "README.zh.md", + "owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "transfer_gate": "M5 release published and proved; FINAL worktree rebased to exact M6 integration; final version artifact and exact release-note path recorded before edit", + "line": 23 + }, + { + "path": "CONTRIBUTING.md", + "owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "transfer_gate": "M5 release published and proved; FINAL worktree rebased to exact M6 integration; final version artifact and exact release-note path recorded before edit", + "line": 23 + }, + { + "path": "CHANGELOG.md", + "owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "transfer_gate": "M5 release published and proved; FINAL worktree rebased to exact M6 integration; final version artifact and exact release-note path recorded before edit", + "line": 23 + }, + { + "path": "Makefile", + "owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "transfer_gate": "M5 release published and proved; FINAL worktree rebased to exact M6 integration; final version artifact and exact release-note path recorded before edit", + "line": 23 + }, + { + "path": ".env.example", + "owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "transfer_gate": "M5 release published and proved; FINAL worktree rebased to exact M6 integration; final version artifact and exact release-note path recorded before edit", + "line": 23 + }, + { + "path": "docs/MIGRATION.md", + "owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "transfer_gate": "M5 release published and proved; FINAL worktree rebased to exact M6 integration; final version artifact and exact release-note path recorded before edit", + "line": 23 + }, + { + "path": "docs/arch/CONFIGURATION.md", + "owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "transfer_gate": "M5 release published and proved; FINAL worktree rebased to exact M6 integration; final version artifact and exact release-note path recorded before edit", + "line": 23 + }, + { + "path": "docs/arch/QUICKSTART.md", + "owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "transfer_gate": "M5 release published and proved; FINAL worktree rebased to exact M6 integration; final version artifact and exact release-note path recorded before edit", + "line": 23 + }, + { + "path": "docs/public/engram.jpg", + "owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "transfer_gate": "M5 release published and proved; FINAL worktree rebased to exact M6 integration; final version artifact and exact release-note path recorded before edit", + "line": 23 + }, + { + "path": "plugin/engram/commands/setup.md", + "owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "transfer_gate": "M5 release published and proved; FINAL worktree rebased to exact M6 integration; final version artifact and exact release-note path recorded before edit", + "line": 23 + }, + { + "path": "plugin/engram/commands/doctor.md", + "owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "transfer_gate": "M5 release published and proved; FINAL worktree rebased to exact M6 integration; final version artifact and exact release-note path recorded before edit", + "line": 23 + }, + { + "path": "internal/worker/dream_cycle.go", + "owners": [ + "CRYSTALLIZATION-DREAM-CYCLE-CORRECTNESS" + ], + "transfer_gate": "single-owner tracked epoch with no predecessor; the maker starts only after the named dependencies, then requires checker PASS, post-review PASS, integration SHA, and a root plan/state amendment before any later writer", + "line": 24 + }, + { + "path": "internal/worker/dream_cycle_test.go", + "owners": [ + "CRYSTALLIZATION-DREAM-CYCLE-CORRECTNESS" + ], + "transfer_gate": "single-owner tracked epoch with no predecessor; the maker starts only after the named dependencies, then requires checker PASS, post-review PASS, integration SHA, and a root plan/state amendment before any later writer", + "line": 24 + } + ], + "errors": [] +} diff --git a/.agent/specs/release-gates-r9/evidence/plan-governance/ledger-static.json b/.agent/specs/release-gates-r9/evidence/plan-governance/ledger-static.json new file mode 100644 index 00000000..bc71ac0e --- /dev/null +++ b/.agent/specs/release-gates-r9/evidence/plan-governance/ledger-static.json @@ -0,0 +1,4579 @@ +{ + "schema_version": 2, + "gate": "plan-path-ownership", + "mode": "Ledger", + "verdict": "PASS", + "started_at": "2026-07-10T21:52:28.1466808+00:00", + "finished_at": "2026-07-10T21:52:34.6673272+00:00", + "duration_seconds": 6.521, + "plan": { + "path": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates-r9-maker\\.agent\\plans\\2026-07-10-engram-production-ready-master-plan.md", + "expected_sha256": "4388337722e57b48e93515008e4220d6cd2c83de695c4c449387f071c59fb96f", + "observed_sha256": "4388337722e57b48e93515008e4220d6cd2c83de695c4c449387f071c59fb96f", + "hash_match": true + }, + "state": { + "path": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates-r9-maker\\.agent\\plans\\2026-07-10-engram-production-ready-ownership-state.json", + "sha256": "e41f52fbafa317eb1571c76a7d1de9add543da38a1b2471dbe587a849b21c032", + "verdict": "PASS", + "plan_sha256": "4388337722e57b48e93515008e4220d6cd2c83de695c4c449387f071c59fb96f" + }, + "scope_map": { + "path": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates-r9-maker\\.agent\\plans\\2026-07-10-engram-production-ready-scope-map.json", + "expected_sha256": "fb170d59f3072117489402fd347cd1432c40adbc842811f92227498bcbc92693", + "observed_sha256": "fb170d59f3072117489402fd347cd1432c40adbc842811f92227498bcbc92693", + "verdict": "PASS", + "entries": 67, + "unique_slices": 67 + }, + "live_register": { + "supplied": false, + "path": "", + "sha256": null, + "checked": false, + "rows": 0 + }, + "counts": { + "maker_slices": 57, + "declarations": 351, + "exact_paths": 328, + "prefixes": 23, + "repeated_exact_paths": 34, + "prefix_intersections": 2, + "undeclared_prefix_intersections": 0, + "declared_epochs": 36, + "state_epochs": 36, + "errors": 0 + }, + "slices": [ + { + "slice": "PLAN-GOVERNANCE", + "branch": "work/prc-release-gates-revision9-maker", + "paths": [ + ".agent/plans/2026-07-10-engram-production-ready-master-plan.md", + ".agent/plans/2026-07-10-engram-production-ready-ownership-state.json", + ".agent/plans/2026-07-10-engram-production-ready-scope-map.json", + ".agent/plans/2026-07-10-engram-production-ready-active-diff-contracts.json", + ".agent/specs/release-gates-r9/evidence/plan-governance/**", + ".agent/reports/2026-07-11-release-gates-r9-plan-governance.md" + ], + "line": 6 + }, + { + "slice": "DB-BULKOPS", + "branch": "work/prc-db-bulkops", + "paths": [ + "internal/bulkops/facade.go", + "internal/bulkops/facade_test.go", + "internal/bulkops/rollback.go", + "internal/bulkops/rollback_test.go", + "internal/db/gorm/candidate_store.go", + "internal/db/gorm/candidate_store_test.go", + "internal/mcp/tools_bulkops.go", + "internal/mcp/tools_dryrun_test.go", + "pkg/models/snapshot.go", + ".agent/reports/2026-07-10-db-bulkops-capture-lock-rework-maker.md", + ".agent/reports/2026-07-10-db-bulkops-sibling-rework-maker.md", + ".agent/specs/production-ready-db-bulkops/evidence/**", + ".agent/reports/evidence/production-ready/db-bulkops-sibling-rework/**" + ], + "line": 7 + }, + { + "slice": "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK", + "branch": "work/prc-db-bulkops", + "paths": [ + "internal/db/gorm/candidate_store.go", + "internal/db/gorm/candidate_store_test.go", + "internal/mcp/tools_bulkops.go", + "internal/mcp/tools_dryrun_test.go", + ".agent/reports/2026-07-10-db-bulkops-behavioral-edge-rework-maker.md", + ".agent/reports/2026-07-10-db-bulkops-behavioral-edge-rework-maker-3.md", + ".agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/**" + ], + "line": 8 + }, + { + "slice": "DB-TEST-POOL-HYGIENE", + "branch": "work/prc-db-test-pool-hygiene-evidence-r2", + "paths": [ + "internal/db/gorm/candidate_store_test.go", + ".agent/reports/2026-07-10-db-test-pool-hygiene-maker.md", + ".agent/reports/2026-07-10-db-test-pool-hygiene-evidence-revision-maker.md", + ".agent/reports/evidence/production-ready/db-test-pool-hygiene/**" + ], + "line": 9 + }, + { + "slice": "DB-GOVERNANCE", + "branch": "work/prc-db-governance", + "paths": [ + "internal/db/gorm/candidate_store.go", + "internal/db/gorm/candidate_store_test.go", + "internal/db/gorm/rule_arbiter_store_test.go", + "internal/db/gorm/rule_governance_store.go", + "internal/db/gorm/rule_governance_store_test.go", + "internal/db/gorm/rule_governance_rg3_store_test.go", + "internal/db/gorm/migration_rule_governance.go", + "internal/db/gorm/migration_rule_arbiter.go", + "internal/db/gorm/migration_rule_governance_snapshot_statuses.go" + ], + "line": 10 + }, + { + "slice": "CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK", + "branch": "work/prc-candidate-review-snapshot-rollback", + "paths": [ + "internal/reviewpacket/candidate.go", + "internal/reviewpacket/candidate_test.go", + "internal/db/gorm/candidate_store.go", + "internal/db/gorm/candidate_store_test.go", + "internal/db/gorm/snapshot_store.go", + "internal/db/gorm/snapshot_store_test.go", + "internal/bulkops/rollback_test.go", + "tests/critical/candidate_review/candidate_review_snapshot_rollback_test.go" + ], + "line": 11 + }, + { + "slice": "INGEST-DOC-SNAPSHOT-DEMOLITION", + "branch": "work/prc-ingest-doc-snapshot-demolition", + "paths": [ + "internal/bulkops/facade.go", + "internal/bulkops/facade_test.go", + "pkg/models/snapshot.go", + "pkg/models/snapshot_test.go", + "internal/mcp/ingest_snapshot_contract_test.go" + ], + "line": 13 + }, + { + "slice": "DB-AUTH", + "branch": "work/prc-db-auth", + "paths": [ + "internal/db/gorm/user_store.go", + "internal/db/gorm/user_store_test.go", + "internal/worker/auth_handlers.go", + "internal/worker/auth_handlers_lifecycle_test.go", + ".agent/reports/db-auth-rework-maker-2026-07-10.md" + ], + "line": 14 + }, + { + "slice": "AUTH-BOOTSTRAP-SECURITY", + "branch": "work/prc-auth-bootstrap-security", + "paths": [ + "internal/config/config.go", + "internal/config/config_test.go", + "internal/config/envnames.go", + "internal/db/gorm/user_store.go", + "internal/worker/middleware.go", + "internal/worker/middleware_test.go", + "internal/worker/auth_handlers.go", + "internal/worker/auth_bootstrap_limiter.go", + "internal/worker/auth_bootstrap_limiter_test.go", + "internal/worker/auth_bootstrap_security_test.go", + "internal/worker/service.go", + "tests/critical/auth_bootstrap/first_admin_bootstrap_test.go", + "scripts/production-smoke/customer/run-auth-bootstrap-adversary.ps1" + ], + "line": 15 + }, + { + "slice": "DURABLE-AUDIT-BOUNDARIES", + "branch": "work/prc-durable-audit-boundaries", + "paths": [ + "internal/db/gorm/domain_owner_store.go", + "internal/db/gorm/domain_owner_store_test.go", + "internal/db/gorm/user_store.go", + "internal/worker/auth_handlers.go", + "internal/worker/auth_audit_durability_test.go", + "internal/bulkops/facade.go", + "internal/bulkops/audit_durability_test.go", + "scripts/production-smoke/customer/run-durable-audit-faults.ps1" + ], + "line": 16 + }, + { + "slice": "DB-CRYSTALLIZATION", + "branch": "work/prc-db-crystallization", + "paths": [ + "internal/worker/handlers_hooks_crystallization_integration_test.go" + ], + "line": 17 + }, + { + "slice": "CRYSTALLIZATION-DREAM-CYCLE-CORRECTNESS", + "branch": "work/prc-crystallization-dream-cycle-correctness", + "paths": [ + "internal/worker/dream_cycle.go", + "internal/worker/dream_cycle_test.go", + ".agent/reports/2026-07-10-crystallization-dream-cycle-correctness-maker.md", + ".agent/e/cdc/**" + ], + "line": 18 + }, + { + "slice": "DB-EMBEDDING-STATS", + "branch": "work/prc-db-embedding-stats", + "paths": [ + "internal/embedding/store.go", + "internal/embedding/store_stats_test.go", + ".agent/reports/2026-07-10-db-embedding-stats-maker.md", + ".agent/reports/evidence/production-ready/db-embedding-stats/**", + ".agent/specs/db-embedding-stats/evidence/**" + ], + "line": 19 + }, + { + "slice": "DB-EMBEDDING-EVIDENCE-TRANSPORT", + "branch": "work/prc-db-embedding-evidence-transport-r6", + "paths": [ + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/**", + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/**", + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4/**", + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/**", + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/**", + ".agent/specs/db-embedding-stats-evidence-transport/evidence/**" + ], + "line": 20 + }, + { + "slice": "DB-REAPER", + "branch": "work/prc-db-reaper-shutdown-r4", + "paths": [ + "internal/worker/reaper/reaper.go", + "internal/worker/reaper/reaper_test.go" + ], + "line": 21 + }, + { + "slice": "SECURITY-TOOLCHAIN", + "branch": "work/prc-security-toolchain", + "paths": [ + "go.mod", + "go.sum", + "Dockerfile" + ], + "line": 22 + }, + { + "slice": "RELEASE-GATES", + "branch": "work/prc-release-gates-revision9-maker", + "paths": [ + ".github/workflows/test.yml", + "scripts/production-gates/assert-plan-path-ownership.ps1", + "scripts/production-gates/assert-active-candidate-path-authority.ps1", + "scripts/production-gates/run-db-suite.ps1", + ".agent/specs/release-gates-r9/evidence/release-gates/**", + ".agent/reports/2026-07-11-release-gates-r9-maker.md" + ], + "line": 23 + }, + { + "slice": "IMAGE-REMEDIATION", + "branch": "work/prc-image-remediation", + "paths": [ + "Dockerfile", + "cmd/engram-healthcheck/main.go", + "cmd/engram-healthcheck/main_test.go", + "apps/operator-console/package.json", + "apps/operator-console/package-lock.json", + "deploy/postgres/Dockerfile", + "docker-compose.yml", + "deploy/docker-compose.runtime.yml", + "docs/DEPLOYMENT.md", + "docs/PRODUCTION-TESTING-PLAYBOOK.md", + ".github/workflows/test.yml", + ".github/workflows/docker.yaml", + ".github/workflows/docker-publish.yml", + "scripts/production-gates/build-and-scan-images.ps1", + "tests/critical/runtime/image_runtime_contract_test.go", + "tests/critical/runtime/postgres_image_contract_test.go" + ], + "line": 24 + }, + { + "slice": "SECURITY-PROJECT-IDENTITY", + "branch": "work/prc-security-project-identity-r4", + "paths": [ + "internal/db/gorm/project_store.go", + "internal/db/gorm/project_identity_v2_test.go", + "internal/grpcserver/project_identity_v2_test.go", + "internal/proxy/identity.go", + "internal/proxy/identity_test.go", + "internal/proxy/identity_process_test.go", + "plugin/engram/hooks/lib.js", + "plugin/engram/hooks/project-identity-v2.test.js", + "plugin/openclaw-engram/src/identity.ts", + "plugin/openclaw-engram/test/project-identity-v2.test.mjs", + ".agent/specs/security-project-identity/evidence/**", + ".agent/reports/evidence/production-ready/security-project-identity/**" + ], + "line": 25 + }, + { + "slice": "OPENCLAW-RELEASE", + "branch": "work/prc-openclaw-release", + "paths": [ + "plugin/openclaw-engram/.gitignore", + "plugin/openclaw-engram/package.json", + "plugin/openclaw-engram/package-lock.json", + "plugin/openclaw-engram/openclaw.plugin.json", + "plugin/openclaw-engram/README.md", + ".github/workflows/plugin-publish.yml", + "docs/RELEASE-PROTOCOL.md" + ], + "line": 26 + }, + { + "slice": "UPDATE-LIFECYCLE", + "branch": "work/prc-security-updater", + "paths": [ + "internal/update/update.go", + "internal/update/update_test.go", + "internal/worker/handlers_update.go", + "internal/worker/handlers_update_test.go", + "scripts/install.sh", + "scripts/install.ps1", + ".goreleaser.yaml", + ".github/workflows/release.yaml", + "plugin/engram/hooks/hook-cli.test.js" + ], + "line": 27 + }, + { + "slice": "DOCUMENT-INGEST-PUBLIC-TRUTH", + "branch": "work/prc-document-ingest-public-truth", + "paths": [ + "internal/mcp/server.go", + "internal/mcp/ingest_document_description_test.go" + ], + "line": 29 + }, + { + "slice": "MCP-STRUCTURED-INPUT-VALIDATION", + "branch": "work/prc-mcp-structured-input-validation", + "paths": [ + "internal/mcp/coerce.go", + "internal/mcp/coerce_test.go", + "internal/mcp/tools_candidates.go", + "internal/mcp/tools_candidates_test.go", + "internal/mcp/tools_memory.go", + "internal/mcp/tools_memory_edit_test.go", + "internal/mcp/tools_memory_significance.go", + "internal/mcp/tools_memory_significance_test.go", + "internal/mcp/tools_store_consolidated.go", + "internal/mcp/tools_settings.go", + "internal/mcp/tools_settings_test.go", + "internal/mcp/tools_documents_v2.go", + "internal/mcp/tools_rule_governance.go", + "internal/mcp/tools_rule_governance_test.go", + "internal/mcp/structured_input_validation_test.go" + ], + "line": 31 + }, + { + "slice": "REDACTION-LIVE-CONTRACT", + "branch": "work/prc-redaction-live-contract", + "paths": [ + "internal/redaction/layer.go", + "internal/redaction/layer_test.go", + "internal/redaction/rejection_test.go", + "internal/mcp/redaction_guard.go", + "internal/mcp/redaction_guard_test.go", + "internal/mcp/tools_memory.go", + "internal/mcp/tools_rules.go", + "internal/mcp/tools_memory_redaction_audit_test.go", + "internal/mcp/tools_rules_redaction_audit_test.go", + "internal/worker/service.go", + "internal/worker/service_redaction_test.go", + "docs/operating-engram.md", + ".agent/reports/evidence/production-ready/redaction-live-contract/**" + ], + "line": 32 + }, + { + "slice": "RETRIEVAL-VECTOR-CONTRACT", + "branch": "work/prc-retrieval-vector-contract", + "paths": [ + "internal/retrieval/hybrid_integration_test.go" + ], + "line": 34 + }, + { + "slice": "STATIC-EMBED-CONTRACT", + "branch": "work/prc-static-embed-contract", + "paths": [ + "internal/worker/static_embed_test.go" + ], + "line": 35 + }, + { + "slice": "PRE-V5-UPGRADE-CONTRACT", + "branch": "work/prc-pre-v5-upgrade-contract", + "paths": [ + "internal/db/gorm/migrations_integration_test.go", + "internal/grpcserver/credential_migration_test.go", + "tests/fixtures/pre-v5/**", + "tests/critical/recovery/pre_v5_upgrade_test.go", + "scripts/production-smoke/customer/run-pre-v5-upgrade.ps1" + ], + "line": 36 + }, + { + "slice": "T007-COMPAT-DEMOLITION-CLASSIFICATION", + "branch": "work/prc-t007-compat-classification", + "paths": [ + "internal/mcp/store_memory_compat_t007_test.go" + ], + "line": 37 + }, + { + "slice": "DB-RULES-ISOLATION", + "branch": "work/prc-db-rules-isolation", + "paths": [ + "internal/worker/handlers_rules_test.go", + "scripts/production-gates/run-db-rules-isolation.ps1" + ], + "line": 38 + }, + { + "slice": "COVERAGE-CMD-ENGRAM", + "branch": "work/prc-coverage-cmd-engram", + "paths": [ + "cmd/engram/production_readiness_coverage_test.go" + ], + "line": 39 + }, + { + "slice": "COVERAGE-CMD-SERVER", + "branch": "work/prc-coverage-cmd-server", + "paths": [ + "cmd/engram-server/production_readiness_coverage_test.go" + ], + "line": 40 + }, + { + "slice": "COVERAGE-UPDATE", + "branch": "work/prc-coverage-update", + "paths": [ + "internal/update/production_readiness_coverage_test.go" + ], + "line": 41 + }, + { + "slice": "COVERAGE-WORKER", + "branch": "work/prc-coverage-worker", + "paths": [ + "internal/worker/production_readiness_coverage_test.go" + ], + "line": 43 + }, + { + "slice": "COVERAGE-MCP", + "branch": "work/prc-coverage-mcp", + "paths": [ + "internal/mcp/production_readiness_coverage_test.go" + ], + "line": 44 + }, + { + "slice": "COVERAGE-GORM", + "branch": "work/prc-coverage-gorm", + "paths": [ + "internal/db/gorm/production_readiness_coverage_test.go" + ], + "line": 45 + }, + { + "slice": "COVERAGE-LOOM", + "branch": "work/prc-coverage-loom", + "paths": [ + "internal/handlers/loom/production_readiness_coverage_test.go" + ], + "line": 46 + }, + { + "slice": "DEPLOYMENT-ROLLBACK", + "branch": "work/prc-deployment-rollback", + "paths": [ + "docker-compose.yml", + "deploy/docker-compose.runtime.yml", + "deploy/docker-compose.operator-web-standalone.yml", + "deploy/entrypoint-server.sh", + "deploy/healthcheck-server.sh", + "deploy/verify-rollback.ps1", + "deploy/verify-runtime-policy.ps1" + ], + "line": 47 + }, + { + "slice": "RECOVERY-DATA", + "branch": "work/prc-recovery-data", + "paths": [ + "scripts/recovery/start-disposable-postgres.ps1", + "scripts/recovery/verify-postgres-roundtrip.ps1", + "scripts/recovery/seed-recovery-fixture.ps1", + "scripts/recovery/assert-recovery-fixture.ps1", + "tests/critical/recovery/postgres_roundtrip_test.go" + ], + "line": 48 + }, + { + "slice": "OBSERVABILITY-OTLP", + "branch": "work/prc-observability-otlp", + "paths": [ + "internal/module/obs/logging.go", + "internal/module/obs/logging_test.go", + "internal/module/obs/meter.go", + "internal/module/obs/meter_test.go", + "internal/module/obs/metrics.go", + "internal/module/obs/metrics_test.go", + "cmd/engram-server/main.go", + "cmd/engram-server/main_test.go", + "scripts/production-smoke/verify-otlp.ps1" + ], + "line": 49 + }, + { + "slice": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "paths": [ + "internal/scope/domain_policy.go", + "internal/scope/domain_policy_test.go", + "internal/scope/filter.go", + "internal/scope/filter_test.go", + "internal/scope/filter_principal_test.go", + "internal/scope/filter_w4_test.go", + "internal/principalmemory/access_policy.go", + "internal/principalmemory/access_policy_test.go", + "internal/principalmemory/domain_registry.go", + "internal/principalmemory/domain_registry_test.go", + "internal/principalmemory/query_service.go", + "internal/principalmemory/query_service_test.go", + "internal/mcp/tools_principal_memory.go", + "internal/mcp/tools_principal_memory_test.go", + "internal/mcp/tools_recall_principal_test.go", + "internal/mcp/recall_visibility_backfill_test.go", + "internal/mcp/store_memory_principal_test.go", + "internal/worker/handlers_principal_memory.go", + "internal/worker/handlers_principal_memory_test.go", + "internal/worker/scope_bypass_w4_test.go", + "internal/worker/retention.go", + "internal/worker/retention_test.go", + "internal/db/gorm/memory_store.go", + "internal/db/gorm/memory_store_principal_test.go", + "internal/db/gorm/memory_store_principal_query_test.go", + "internal/db/gorm/purge_store_test.go", + "tests/critical/data_boundaries/principal_project_retention_test.go" + ], + "line": 50 + }, + { + "slice": "CRITICAL-HARNESS", + "branch": "work/prc-critical-harness", + "paths": [ + "tests/critical/customer_mode/customer_mode_test.go", + "tests/critical/customer_mode/compatibility_test.go", + "tests/critical/customer_mode/cross_agent_test.go", + "scripts/production-smoke/customer/run-customer-mode.ps1", + "scripts/production-smoke/customer/run-client-compatibility.ps1", + "scripts/production-smoke/customer/run-cross-agent.ps1", + "scripts/production-smoke/customer/run-diagnostic-matrix.ps1", + "scripts/production-smoke/customer/assert-product-works.ps1" + ], + "line": 51 + }, + { + "slice": "CORE-PUBLIC-TRUTH", + "branch": "work/prc-core-public-truth", + "paths": [ + "README.md", + "README.ru.md", + "README.zh.md", + "CONTRIBUTING.md", + "CHANGELOG.md", + "Makefile", + ".env.example", + "docs/DEPLOYMENT.md", + "docs/MIGRATION.md", + "docs/PRODUCTION-TESTING-PLAYBOOK.md", + "docs/arch/CONFIGURATION.md", + "docs/arch/QUICKSTART.md", + "docs/release-notes/v6.43.0.md", + "docs/public/engram.jpg", + "plugin/engram/commands/setup.md", + "plugin/engram/commands/doctor.md" + ], + "line": 52 + }, + { + "slice": "FINAL-PUBLIC-TRUTH", + "branch": "work/prc-final-public-truth", + "paths": [ + "README.md", + "README.ru.md", + "README.zh.md", + "CONTRIBUTING.md", + "CHANGELOG.md", + "Makefile", + ".env.example", + "docs/DEPLOYMENT.md", + "docs/MIGRATION.md", + "docs/PRODUCTION-TESTING-PLAYBOOK.md", + "docs/operating-engram.md", + "docs/arch/CONFIGURATION.md", + "docs/arch/QUICKSTART.md", + "docs/public/engram.jpg", + "plugin/engram/commands/setup.md", + "plugin/engram/commands/doctor.md" + ], + "line": 53 + }, + { + "slice": "LAUNCHER-FIRST-RUN", + "branch": "work/prc-launcher-first-run", + "paths": [ + "cmd/engram/main.go", + "cmd/engram/main_test.go", + "cmd/engram/wiring.go", + "cmd/engram/exec_windows.go", + "cmd/engram/exec_unix.go", + "plugin/engram/.engram-project", + "plugin/engram/scripts/run-engram.js", + "plugin/engram/scripts/run-engram.test.js", + "plugin/engram/scripts/ensure-binary.js", + "plugin/engram/scripts/ensure-binary.test.js" + ], + "line": 54 + }, + { + "slice": "OC-INTEGRATION", + "branch": "work/prc-operator-console-integration", + "paths": [ + "apps/operator-console/**" + ], + "line": 55 + }, + { + "slice": "S4B-CONTRACT", + "branch": "work/prc-s4b-contract", + "paths": [ + ".agent/specs/engram-v7-directives-surfacing/**" + ], + "line": 56 + }, + { + "slice": "V7-S4B-BACKEND", + "branch": "work/prc-v7-s4b-backend", + "paths": [ + "internal/cognitive/s4bsurfacing/**" + ], + "line": 57 + }, + { + "slice": "V7-CORE-CALLPATH", + "branch": "work/prc-v7-core-callpath", + "paths": [ + "internal/cognitive/core/event_bus.go", + "internal/cognitive/core/event_bus_test.go", + "internal/cognitive/core/hint_queue.go", + "internal/cognitive/core/hint_queue_test.go", + "internal/cognitive/s3ambient/queue.go", + "internal/cognitive/s3ambient/subsystem.go" + ], + "line": 58 + }, + { + "slice": "V7-RUNTIME-WIRING", + "branch": "work/prc-v7-runtime-wiring", + "paths": [ + "internal/worker/service.go", + "internal/worker/service_v7_integration_test.go", + "internal/worker/handlers_stats_v7.go", + "internal/worker/handlers_stats_v7_test.go" + ], + "line": 59 + }, + { + "slice": "V7-TELEMETRY-WIRING", + "branch": "work/prc-v7-telemetry-wiring", + "paths": [ + "internal/cognitive/s5/metrics.go", + "internal/cognitive/s5/provider.go", + "internal/cognitive/s5/provider_test.go", + "internal/cognitive/s5/source_adapter.go", + "internal/cognitive/s5/source_adapter_test.go" + ], + "line": 60 + }, + { + "slice": "ROADMAP-RECONCILIATION", + "branch": "work/prc-roadmap-reconciliation", + "paths": [ + ".agent/specs/roadmap.md", + ".agent/specs/ui-surface-ledger.md", + ".agent/specs/operator-console-production-integration/**", + ".agent/specs/engram-v7-ambient/spec.md", + ".agent/specs/engram-v7-ambient/plan.md", + ".agent/specs/engram-v7-ambient/checklists/general.md", + ".agent/specs/engram-v7-ambient/changes/CR-001-initial-scope/change.md", + ".agent/specs/engram-v7-ambient/changes/CR-001-initial-scope/tasks.md" + ], + "line": 61 + }, + { + "slice": "NORTHSTAR-CI-A-CONTRACTS", + "branch": "work/prc-northstar-ci-a-contracts", + "paths": [ + ".agent/specs/engram-absorption/ci-a-dense-vector/spec.md", + ".agent/specs/engram-absorption/ci-a-dense-vector/plan.md", + ".agent/specs/engram-absorption/ci-a-dense-vector/checklists/general.md", + ".agent/specs/engram-absorption/ci-a-dense-vector/changes/CR-001-initial-scope/change.md", + ".agent/specs/engram-absorption/ci-a-dense-vector/changes/CR-001-initial-scope/tasks.md" + ], + "line": 62 + }, + { + "slice": "NORTHSTAR-CI-B-CONTRACTS", + "branch": "work/prc-northstar-ci-b-contracts", + "paths": [ + ".agent/specs/engram-absorption/ci-b-graph-watcher-context/spec.md", + ".agent/specs/engram-absorption/ci-b-graph-watcher-context/plan.md", + ".agent/specs/engram-absorption/ci-b-graph-watcher-context/checklists/general.md", + ".agent/specs/engram-absorption/ci-b-graph-watcher-context/changes/CR-001-initial-scope/change.md", + ".agent/specs/engram-absorption/ci-b-graph-watcher-context/changes/CR-001-initial-scope/tasks.md" + ], + "line": 63 + }, + { + "slice": "NORTHSTAR-BOOK-CONTRACTS", + "branch": "work/prc-northstar-book-contracts", + "paths": [ + ".agent/specs/engram-absorption/book/prd.md", + ".agent/specs/engram-absorption/book/spec.md", + ".agent/specs/engram-absorption/book/plan.md", + ".agent/specs/engram-absorption/book/checklists/general.md", + ".agent/specs/engram-absorption/book/changes/CR-001-initial-scope/change.md", + ".agent/specs/engram-absorption/book/changes/CR-001-initial-scope/tasks.md" + ], + "line": 64 + }, + { + "slice": "NORTHSTAR-MEM-CONTRACTS", + "branch": "work/prc-northstar-mem-contracts", + "paths": [ + ".agent/specs/engram-absorption/mem-residual/spec.md", + ".agent/specs/engram-absorption/mem-residual/plan.md", + ".agent/specs/engram-absorption/mem-residual/checklists/general.md", + ".agent/specs/engram-absorption/mem-residual/changes/CR-001-initial-scope/change.md", + ".agent/specs/engram-absorption/mem-residual/changes/CR-001-initial-scope/tasks.md" + ], + "line": 65 + }, + { + "slice": "NORTHSTAR-EFFECTIVENESS-CONTRACTS", + "branch": "work/prc-northstar-effectiveness-contracts", + "paths": [ + ".agent/specs/engram-effectiveness/production-ready-residual/spec.md", + ".agent/specs/engram-effectiveness/production-ready-residual/plan.md", + ".agent/specs/engram-effectiveness/production-ready-residual/checklists/general.md", + ".agent/specs/engram-effectiveness/production-ready-residual/changes/CR-001-initial-scope/change.md", + ".agent/specs/engram-effectiveness/production-ready-residual/changes/CR-001-initial-scope/tasks.md" + ], + "line": 66 + }, + { + "slice": "NORTHSTAR-SETTINGS-CONTRACTS", + "branch": "work/prc-northstar-settings-contracts", + "paths": [ + ".agent/specs/settings-store/production-ready-residual/spec.md", + ".agent/specs/settings-store/production-ready-residual/plan.md", + ".agent/specs/settings-store/production-ready-residual/checklists/general.md", + ".agent/specs/settings-store/production-ready-residual/changes/CR-001-initial-scope/change.md", + ".agent/specs/settings-store/production-ready-residual/changes/CR-001-initial-scope/tasks.md" + ], + "line": 67 + } + ], + "declarations": [ + { + "owner": "PLAN-GOVERNANCE", + "branch": "work/prc-release-gates-revision9-maker", + "path": ".agent/plans/2026-07-10-engram-production-ready-master-plan.md", + "display": ".agent/plans/2026-07-10-engram-production-ready-master-plan.md", + "kind": "exact", + "line": 6 + }, + { + "owner": "PLAN-GOVERNANCE", + "branch": "work/prc-release-gates-revision9-maker", + "path": ".agent/plans/2026-07-10-engram-production-ready-ownership-state.json", + "display": ".agent/plans/2026-07-10-engram-production-ready-ownership-state.json", + "kind": "exact", + "line": 6 + }, + { + "owner": "PLAN-GOVERNANCE", + "branch": "work/prc-release-gates-revision9-maker", + "path": ".agent/plans/2026-07-10-engram-production-ready-scope-map.json", + "display": ".agent/plans/2026-07-10-engram-production-ready-scope-map.json", + "kind": "exact", + "line": 6 + }, + { + "owner": "PLAN-GOVERNANCE", + "branch": "work/prc-release-gates-revision9-maker", + "path": ".agent/plans/2026-07-10-engram-production-ready-active-diff-contracts.json", + "display": ".agent/plans/2026-07-10-engram-production-ready-active-diff-contracts.json", + "kind": "exact", + "line": 6 + }, + { + "owner": "PLAN-GOVERNANCE", + "branch": "work/prc-release-gates-revision9-maker", + "path": ".agent/specs/release-gates-r9/evidence/plan-governance", + "display": ".agent/specs/release-gates-r9/evidence/plan-governance/**", + "kind": "prefix", + "line": 6 + }, + { + "owner": "PLAN-GOVERNANCE", + "branch": "work/prc-release-gates-revision9-maker", + "path": ".agent/reports/2026-07-11-release-gates-r9-plan-governance.md", + "display": ".agent/reports/2026-07-11-release-gates-r9-plan-governance.md", + "kind": "exact", + "line": 6 + }, + { + "owner": "DB-BULKOPS", + "branch": "work/prc-db-bulkops", + "path": "internal/bulkops/facade.go", + "display": "internal/bulkops/facade.go", + "kind": "exact", + "line": 7 + }, + { + "owner": "DB-BULKOPS", + "branch": "work/prc-db-bulkops", + "path": "internal/bulkops/facade_test.go", + "display": "internal/bulkops/facade_test.go", + "kind": "exact", + "line": 7 + }, + { + "owner": "DB-BULKOPS", + "branch": "work/prc-db-bulkops", + "path": "internal/bulkops/rollback.go", + "display": "internal/bulkops/rollback.go", + "kind": "exact", + "line": 7 + }, + { + "owner": "DB-BULKOPS", + "branch": "work/prc-db-bulkops", + "path": "internal/bulkops/rollback_test.go", + "display": "internal/bulkops/rollback_test.go", + "kind": "exact", + "line": 7 + }, + { + "owner": "DB-BULKOPS", + "branch": "work/prc-db-bulkops", + "path": "internal/db/gorm/candidate_store.go", + "display": "internal/db/gorm/candidate_store.go", + "kind": "exact", + "line": 7 + }, + { + "owner": "DB-BULKOPS", + "branch": "work/prc-db-bulkops", + "path": "internal/db/gorm/candidate_store_test.go", + "display": "internal/db/gorm/candidate_store_test.go", + "kind": "exact", + "line": 7 + }, + { + "owner": "DB-BULKOPS", + "branch": "work/prc-db-bulkops", + "path": "internal/mcp/tools_bulkops.go", + "display": "internal/mcp/tools_bulkops.go", + "kind": "exact", + "line": 7 + }, + { + "owner": "DB-BULKOPS", + "branch": "work/prc-db-bulkops", + "path": "internal/mcp/tools_dryrun_test.go", + "display": "internal/mcp/tools_dryrun_test.go", + "kind": "exact", + "line": 7 + }, + { + "owner": "DB-BULKOPS", + "branch": "work/prc-db-bulkops", + "path": "pkg/models/snapshot.go", + "display": "pkg/models/snapshot.go", + "kind": "exact", + "line": 7 + }, + { + "owner": "DB-BULKOPS", + "branch": "work/prc-db-bulkops", + "path": ".agent/reports/2026-07-10-db-bulkops-capture-lock-rework-maker.md", + "display": ".agent/reports/2026-07-10-db-bulkops-capture-lock-rework-maker.md", + "kind": "exact", + "line": 7 + }, + { + "owner": "DB-BULKOPS", + "branch": "work/prc-db-bulkops", + "path": ".agent/reports/2026-07-10-db-bulkops-sibling-rework-maker.md", + "display": ".agent/reports/2026-07-10-db-bulkops-sibling-rework-maker.md", + "kind": "exact", + "line": 7 + }, + { + "owner": "DB-BULKOPS", + "branch": "work/prc-db-bulkops", + "path": ".agent/specs/production-ready-db-bulkops/evidence", + "display": ".agent/specs/production-ready-db-bulkops/evidence/**", + "kind": "prefix", + "line": 7 + }, + { + "owner": "DB-BULKOPS", + "branch": "work/prc-db-bulkops", + "path": ".agent/reports/evidence/production-ready/db-bulkops-sibling-rework", + "display": ".agent/reports/evidence/production-ready/db-bulkops-sibling-rework/**", + "kind": "prefix", + "line": 7 + }, + { + "owner": "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK", + "branch": "work/prc-db-bulkops", + "path": "internal/db/gorm/candidate_store.go", + "display": "internal/db/gorm/candidate_store.go", + "kind": "exact", + "line": 8 + }, + { + "owner": "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK", + "branch": "work/prc-db-bulkops", + "path": "internal/db/gorm/candidate_store_test.go", + "display": "internal/db/gorm/candidate_store_test.go", + "kind": "exact", + "line": 8 + }, + { + "owner": "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK", + "branch": "work/prc-db-bulkops", + "path": "internal/mcp/tools_bulkops.go", + "display": "internal/mcp/tools_bulkops.go", + "kind": "exact", + "line": 8 + }, + { + "owner": "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK", + "branch": "work/prc-db-bulkops", + "path": "internal/mcp/tools_dryrun_test.go", + "display": "internal/mcp/tools_dryrun_test.go", + "kind": "exact", + "line": 8 + }, + { + "owner": "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK", + "branch": "work/prc-db-bulkops", + "path": ".agent/reports/2026-07-10-db-bulkops-behavioral-edge-rework-maker.md", + "display": ".agent/reports/2026-07-10-db-bulkops-behavioral-edge-rework-maker.md", + "kind": "exact", + "line": 8 + }, + { + "owner": "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK", + "branch": "work/prc-db-bulkops", + "path": ".agent/reports/2026-07-10-db-bulkops-behavioral-edge-rework-maker-3.md", + "display": ".agent/reports/2026-07-10-db-bulkops-behavioral-edge-rework-maker-3.md", + "kind": "exact", + "line": 8 + }, + { + "owner": "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK", + "branch": "work/prc-db-bulkops", + "path": ".agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework", + "display": ".agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/**", + "kind": "prefix", + "line": 8 + }, + { + "owner": "DB-TEST-POOL-HYGIENE", + "branch": "work/prc-db-test-pool-hygiene-evidence-r2", + "path": "internal/db/gorm/candidate_store_test.go", + "display": "internal/db/gorm/candidate_store_test.go", + "kind": "exact", + "line": 9 + }, + { + "owner": "DB-TEST-POOL-HYGIENE", + "branch": "work/prc-db-test-pool-hygiene-evidence-r2", + "path": ".agent/reports/2026-07-10-db-test-pool-hygiene-maker.md", + "display": ".agent/reports/2026-07-10-db-test-pool-hygiene-maker.md", + "kind": "exact", + "line": 9 + }, + { + "owner": "DB-TEST-POOL-HYGIENE", + "branch": "work/prc-db-test-pool-hygiene-evidence-r2", + "path": ".agent/reports/2026-07-10-db-test-pool-hygiene-evidence-revision-maker.md", + "display": ".agent/reports/2026-07-10-db-test-pool-hygiene-evidence-revision-maker.md", + "kind": "exact", + "line": 9 + }, + { + "owner": "DB-TEST-POOL-HYGIENE", + "branch": "work/prc-db-test-pool-hygiene-evidence-r2", + "path": ".agent/reports/evidence/production-ready/db-test-pool-hygiene", + "display": ".agent/reports/evidence/production-ready/db-test-pool-hygiene/**", + "kind": "prefix", + "line": 9 + }, + { + "owner": "DB-GOVERNANCE", + "branch": "work/prc-db-governance", + "path": "internal/db/gorm/candidate_store.go", + "display": "internal/db/gorm/candidate_store.go", + "kind": "exact", + "line": 10 + }, + { + "owner": "DB-GOVERNANCE", + "branch": "work/prc-db-governance", + "path": "internal/db/gorm/candidate_store_test.go", + "display": "internal/db/gorm/candidate_store_test.go", + "kind": "exact", + "line": 10 + }, + { + "owner": "DB-GOVERNANCE", + "branch": "work/prc-db-governance", + "path": "internal/db/gorm/rule_arbiter_store_test.go", + "display": "internal/db/gorm/rule_arbiter_store_test.go", + "kind": "exact", + "line": 10 + }, + { + "owner": "DB-GOVERNANCE", + "branch": "work/prc-db-governance", + "path": "internal/db/gorm/rule_governance_store.go", + "display": "internal/db/gorm/rule_governance_store.go", + "kind": "exact", + "line": 10 + }, + { + "owner": "DB-GOVERNANCE", + "branch": "work/prc-db-governance", + "path": "internal/db/gorm/rule_governance_store_test.go", + "display": "internal/db/gorm/rule_governance_store_test.go", + "kind": "exact", + "line": 10 + }, + { + "owner": "DB-GOVERNANCE", + "branch": "work/prc-db-governance", + "path": "internal/db/gorm/rule_governance_rg3_store_test.go", + "display": "internal/db/gorm/rule_governance_rg3_store_test.go", + "kind": "exact", + "line": 10 + }, + { + "owner": "DB-GOVERNANCE", + "branch": "work/prc-db-governance", + "path": "internal/db/gorm/migration_rule_governance.go", + "display": "internal/db/gorm/migration_rule_governance.go", + "kind": "exact", + "line": 10 + }, + { + "owner": "DB-GOVERNANCE", + "branch": "work/prc-db-governance", + "path": "internal/db/gorm/migration_rule_arbiter.go", + "display": "internal/db/gorm/migration_rule_arbiter.go", + "kind": "exact", + "line": 10 + }, + { + "owner": "DB-GOVERNANCE", + "branch": "work/prc-db-governance", + "path": "internal/db/gorm/migration_rule_governance_snapshot_statuses.go", + "display": "internal/db/gorm/migration_rule_governance_snapshot_statuses.go", + "kind": "exact", + "line": 10 + }, + { + "owner": "CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK", + "branch": "work/prc-candidate-review-snapshot-rollback", + "path": "internal/reviewpacket/candidate.go", + "display": "internal/reviewpacket/candidate.go", + "kind": "exact", + "line": 11 + }, + { + "owner": "CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK", + "branch": "work/prc-candidate-review-snapshot-rollback", + "path": "internal/reviewpacket/candidate_test.go", + "display": "internal/reviewpacket/candidate_test.go", + "kind": "exact", + "line": 11 + }, + { + "owner": "CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK", + "branch": "work/prc-candidate-review-snapshot-rollback", + "path": "internal/db/gorm/candidate_store.go", + "display": "internal/db/gorm/candidate_store.go", + "kind": "exact", + "line": 11 + }, + { + "owner": "CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK", + "branch": "work/prc-candidate-review-snapshot-rollback", + "path": "internal/db/gorm/candidate_store_test.go", + "display": "internal/db/gorm/candidate_store_test.go", + "kind": "exact", + "line": 11 + }, + { + "owner": "CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK", + "branch": "work/prc-candidate-review-snapshot-rollback", + "path": "internal/db/gorm/snapshot_store.go", + "display": "internal/db/gorm/snapshot_store.go", + "kind": "exact", + "line": 11 + }, + { + "owner": "CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK", + "branch": "work/prc-candidate-review-snapshot-rollback", + "path": "internal/db/gorm/snapshot_store_test.go", + "display": "internal/db/gorm/snapshot_store_test.go", + "kind": "exact", + "line": 11 + }, + { + "owner": "CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK", + "branch": "work/prc-candidate-review-snapshot-rollback", + "path": "internal/bulkops/rollback_test.go", + "display": "internal/bulkops/rollback_test.go", + "kind": "exact", + "line": 11 + }, + { + "owner": "CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK", + "branch": "work/prc-candidate-review-snapshot-rollback", + "path": "tests/critical/candidate_review/candidate_review_snapshot_rollback_test.go", + "display": "tests/critical/candidate_review/candidate_review_snapshot_rollback_test.go", + "kind": "exact", + "line": 11 + }, + { + "owner": "INGEST-DOC-SNAPSHOT-DEMOLITION", + "branch": "work/prc-ingest-doc-snapshot-demolition", + "path": "internal/bulkops/facade.go", + "display": "internal/bulkops/facade.go", + "kind": "exact", + "line": 13 + }, + { + "owner": "INGEST-DOC-SNAPSHOT-DEMOLITION", + "branch": "work/prc-ingest-doc-snapshot-demolition", + "path": "internal/bulkops/facade_test.go", + "display": "internal/bulkops/facade_test.go", + "kind": "exact", + "line": 13 + }, + { + "owner": "INGEST-DOC-SNAPSHOT-DEMOLITION", + "branch": "work/prc-ingest-doc-snapshot-demolition", + "path": "pkg/models/snapshot.go", + "display": "pkg/models/snapshot.go", + "kind": "exact", + "line": 13 + }, + { + "owner": "INGEST-DOC-SNAPSHOT-DEMOLITION", + "branch": "work/prc-ingest-doc-snapshot-demolition", + "path": "pkg/models/snapshot_test.go", + "display": "pkg/models/snapshot_test.go", + "kind": "exact", + "line": 13 + }, + { + "owner": "INGEST-DOC-SNAPSHOT-DEMOLITION", + "branch": "work/prc-ingest-doc-snapshot-demolition", + "path": "internal/mcp/ingest_snapshot_contract_test.go", + "display": "internal/mcp/ingest_snapshot_contract_test.go", + "kind": "exact", + "line": 13 + }, + { + "owner": "DB-AUTH", + "branch": "work/prc-db-auth", + "path": "internal/db/gorm/user_store.go", + "display": "internal/db/gorm/user_store.go", + "kind": "exact", + "line": 14 + }, + { + "owner": "DB-AUTH", + "branch": "work/prc-db-auth", + "path": "internal/db/gorm/user_store_test.go", + "display": "internal/db/gorm/user_store_test.go", + "kind": "exact", + "line": 14 + }, + { + "owner": "DB-AUTH", + "branch": "work/prc-db-auth", + "path": "internal/worker/auth_handlers.go", + "display": "internal/worker/auth_handlers.go", + "kind": "exact", + "line": 14 + }, + { + "owner": "DB-AUTH", + "branch": "work/prc-db-auth", + "path": "internal/worker/auth_handlers_lifecycle_test.go", + "display": "internal/worker/auth_handlers_lifecycle_test.go", + "kind": "exact", + "line": 14 + }, + { + "owner": "DB-AUTH", + "branch": "work/prc-db-auth", + "path": ".agent/reports/db-auth-rework-maker-2026-07-10.md", + "display": ".agent/reports/db-auth-rework-maker-2026-07-10.md", + "kind": "exact", + "line": 14 + }, + { + "owner": "AUTH-BOOTSTRAP-SECURITY", + "branch": "work/prc-auth-bootstrap-security", + "path": "internal/config/config.go", + "display": "internal/config/config.go", + "kind": "exact", + "line": 15 + }, + { + "owner": "AUTH-BOOTSTRAP-SECURITY", + "branch": "work/prc-auth-bootstrap-security", + "path": "internal/config/config_test.go", + "display": "internal/config/config_test.go", + "kind": "exact", + "line": 15 + }, + { + "owner": "AUTH-BOOTSTRAP-SECURITY", + "branch": "work/prc-auth-bootstrap-security", + "path": "internal/config/envnames.go", + "display": "internal/config/envnames.go", + "kind": "exact", + "line": 15 + }, + { + "owner": "AUTH-BOOTSTRAP-SECURITY", + "branch": "work/prc-auth-bootstrap-security", + "path": "internal/db/gorm/user_store.go", + "display": "internal/db/gorm/user_store.go", + "kind": "exact", + "line": 15 + }, + { + "owner": "AUTH-BOOTSTRAP-SECURITY", + "branch": "work/prc-auth-bootstrap-security", + "path": "internal/worker/middleware.go", + "display": "internal/worker/middleware.go", + "kind": "exact", + "line": 15 + }, + { + "owner": "AUTH-BOOTSTRAP-SECURITY", + "branch": "work/prc-auth-bootstrap-security", + "path": "internal/worker/middleware_test.go", + "display": "internal/worker/middleware_test.go", + "kind": "exact", + "line": 15 + }, + { + "owner": "AUTH-BOOTSTRAP-SECURITY", + "branch": "work/prc-auth-bootstrap-security", + "path": "internal/worker/auth_handlers.go", + "display": "internal/worker/auth_handlers.go", + "kind": "exact", + "line": 15 + }, + { + "owner": "AUTH-BOOTSTRAP-SECURITY", + "branch": "work/prc-auth-bootstrap-security", + "path": "internal/worker/auth_bootstrap_limiter.go", + "display": "internal/worker/auth_bootstrap_limiter.go", + "kind": "exact", + "line": 15 + }, + { + "owner": "AUTH-BOOTSTRAP-SECURITY", + "branch": "work/prc-auth-bootstrap-security", + "path": "internal/worker/auth_bootstrap_limiter_test.go", + "display": "internal/worker/auth_bootstrap_limiter_test.go", + "kind": "exact", + "line": 15 + }, + { + "owner": "AUTH-BOOTSTRAP-SECURITY", + "branch": "work/prc-auth-bootstrap-security", + "path": "internal/worker/auth_bootstrap_security_test.go", + "display": "internal/worker/auth_bootstrap_security_test.go", + "kind": "exact", + "line": 15 + }, + { + "owner": "AUTH-BOOTSTRAP-SECURITY", + "branch": "work/prc-auth-bootstrap-security", + "path": "internal/worker/service.go", + "display": "internal/worker/service.go", + "kind": "exact", + "line": 15 + }, + { + "owner": "AUTH-BOOTSTRAP-SECURITY", + "branch": "work/prc-auth-bootstrap-security", + "path": "tests/critical/auth_bootstrap/first_admin_bootstrap_test.go", + "display": "tests/critical/auth_bootstrap/first_admin_bootstrap_test.go", + "kind": "exact", + "line": 15 + }, + { + "owner": "AUTH-BOOTSTRAP-SECURITY", + "branch": "work/prc-auth-bootstrap-security", + "path": "scripts/production-smoke/customer/run-auth-bootstrap-adversary.ps1", + "display": "scripts/production-smoke/customer/run-auth-bootstrap-adversary.ps1", + "kind": "exact", + "line": 15 + }, + { + "owner": "DURABLE-AUDIT-BOUNDARIES", + "branch": "work/prc-durable-audit-boundaries", + "path": "internal/db/gorm/domain_owner_store.go", + "display": "internal/db/gorm/domain_owner_store.go", + "kind": "exact", + "line": 16 + }, + { + "owner": "DURABLE-AUDIT-BOUNDARIES", + "branch": "work/prc-durable-audit-boundaries", + "path": "internal/db/gorm/domain_owner_store_test.go", + "display": "internal/db/gorm/domain_owner_store_test.go", + "kind": "exact", + "line": 16 + }, + { + "owner": "DURABLE-AUDIT-BOUNDARIES", + "branch": "work/prc-durable-audit-boundaries", + "path": "internal/db/gorm/user_store.go", + "display": "internal/db/gorm/user_store.go", + "kind": "exact", + "line": 16 + }, + { + "owner": "DURABLE-AUDIT-BOUNDARIES", + "branch": "work/prc-durable-audit-boundaries", + "path": "internal/worker/auth_handlers.go", + "display": "internal/worker/auth_handlers.go", + "kind": "exact", + "line": 16 + }, + { + "owner": "DURABLE-AUDIT-BOUNDARIES", + "branch": "work/prc-durable-audit-boundaries", + "path": "internal/worker/auth_audit_durability_test.go", + "display": "internal/worker/auth_audit_durability_test.go", + "kind": "exact", + "line": 16 + }, + { + "owner": "DURABLE-AUDIT-BOUNDARIES", + "branch": "work/prc-durable-audit-boundaries", + "path": "internal/bulkops/facade.go", + "display": "internal/bulkops/facade.go", + "kind": "exact", + "line": 16 + }, + { + "owner": "DURABLE-AUDIT-BOUNDARIES", + "branch": "work/prc-durable-audit-boundaries", + "path": "internal/bulkops/audit_durability_test.go", + "display": "internal/bulkops/audit_durability_test.go", + "kind": "exact", + "line": 16 + }, + { + "owner": "DURABLE-AUDIT-BOUNDARIES", + "branch": "work/prc-durable-audit-boundaries", + "path": "scripts/production-smoke/customer/run-durable-audit-faults.ps1", + "display": "scripts/production-smoke/customer/run-durable-audit-faults.ps1", + "kind": "exact", + "line": 16 + }, + { + "owner": "DB-CRYSTALLIZATION", + "branch": "work/prc-db-crystallization", + "path": "internal/worker/handlers_hooks_crystallization_integration_test.go", + "display": "internal/worker/handlers_hooks_crystallization_integration_test.go", + "kind": "exact", + "line": 17 + }, + { + "owner": "CRYSTALLIZATION-DREAM-CYCLE-CORRECTNESS", + "branch": "work/prc-crystallization-dream-cycle-correctness", + "path": "internal/worker/dream_cycle.go", + "display": "internal/worker/dream_cycle.go", + "kind": "exact", + "line": 18 + }, + { + "owner": "CRYSTALLIZATION-DREAM-CYCLE-CORRECTNESS", + "branch": "work/prc-crystallization-dream-cycle-correctness", + "path": "internal/worker/dream_cycle_test.go", + "display": "internal/worker/dream_cycle_test.go", + "kind": "exact", + "line": 18 + }, + { + "owner": "CRYSTALLIZATION-DREAM-CYCLE-CORRECTNESS", + "branch": "work/prc-crystallization-dream-cycle-correctness", + "path": ".agent/reports/2026-07-10-crystallization-dream-cycle-correctness-maker.md", + "display": ".agent/reports/2026-07-10-crystallization-dream-cycle-correctness-maker.md", + "kind": "exact", + "line": 18 + }, + { + "owner": "CRYSTALLIZATION-DREAM-CYCLE-CORRECTNESS", + "branch": "work/prc-crystallization-dream-cycle-correctness", + "path": ".agent/e/cdc", + "display": ".agent/e/cdc/**", + "kind": "prefix", + "line": 18 + }, + { + "owner": "DB-EMBEDDING-STATS", + "branch": "work/prc-db-embedding-stats", + "path": "internal/embedding/store.go", + "display": "internal/embedding/store.go", + "kind": "exact", + "line": 19 + }, + { + "owner": "DB-EMBEDDING-STATS", + "branch": "work/prc-db-embedding-stats", + "path": "internal/embedding/store_stats_test.go", + "display": "internal/embedding/store_stats_test.go", + "kind": "exact", + "line": 19 + }, + { + "owner": "DB-EMBEDDING-STATS", + "branch": "work/prc-db-embedding-stats", + "path": ".agent/reports/2026-07-10-db-embedding-stats-maker.md", + "display": ".agent/reports/2026-07-10-db-embedding-stats-maker.md", + "kind": "exact", + "line": 19 + }, + { + "owner": "DB-EMBEDDING-STATS", + "branch": "work/prc-db-embedding-stats", + "path": ".agent/reports/evidence/production-ready/db-embedding-stats", + "display": ".agent/reports/evidence/production-ready/db-embedding-stats/**", + "kind": "prefix", + "line": 19 + }, + { + "owner": "DB-EMBEDDING-STATS", + "branch": "work/prc-db-embedding-stats", + "path": ".agent/specs/db-embedding-stats/evidence", + "display": ".agent/specs/db-embedding-stats/evidence/**", + "kind": "prefix", + "line": 19 + }, + { + "owner": "DB-EMBEDDING-EVIDENCE-TRANSPORT", + "branch": "work/prc-db-embedding-evidence-transport-r6", + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport", + "display": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/**", + "kind": "prefix", + "line": 20 + }, + { + "owner": "DB-EMBEDDING-EVIDENCE-TRANSPORT", + "branch": "work/prc-db-embedding-evidence-transport-r6", + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3", + "display": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/**", + "kind": "prefix", + "line": 20 + }, + { + "owner": "DB-EMBEDDING-EVIDENCE-TRANSPORT", + "branch": "work/prc-db-embedding-evidence-transport-r6", + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4", + "display": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4/**", + "kind": "prefix", + "line": 20 + }, + { + "owner": "DB-EMBEDDING-EVIDENCE-TRANSPORT", + "branch": "work/prc-db-embedding-evidence-transport-r6", + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5", + "display": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/**", + "kind": "prefix", + "line": 20 + }, + { + "owner": "DB-EMBEDDING-EVIDENCE-TRANSPORT", + "branch": "work/prc-db-embedding-evidence-transport-r6", + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6", + "display": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/**", + "kind": "prefix", + "line": 20 + }, + { + "owner": "DB-EMBEDDING-EVIDENCE-TRANSPORT", + "branch": "work/prc-db-embedding-evidence-transport-r6", + "path": ".agent/specs/db-embedding-stats-evidence-transport/evidence", + "display": ".agent/specs/db-embedding-stats-evidence-transport/evidence/**", + "kind": "prefix", + "line": 20 + }, + { + "owner": "DB-REAPER", + "branch": "work/prc-db-reaper-shutdown-r4", + "path": "internal/worker/reaper/reaper.go", + "display": "internal/worker/reaper/reaper.go", + "kind": "exact", + "line": 21 + }, + { + "owner": "DB-REAPER", + "branch": "work/prc-db-reaper-shutdown-r4", + "path": "internal/worker/reaper/reaper_test.go", + "display": "internal/worker/reaper/reaper_test.go", + "kind": "exact", + "line": 21 + }, + { + "owner": "SECURITY-TOOLCHAIN", + "branch": "work/prc-security-toolchain", + "path": "go.mod", + "display": "go.mod", + "kind": "exact", + "line": 22 + }, + { + "owner": "SECURITY-TOOLCHAIN", + "branch": "work/prc-security-toolchain", + "path": "go.sum", + "display": "go.sum", + "kind": "exact", + "line": 22 + }, + { + "owner": "SECURITY-TOOLCHAIN", + "branch": "work/prc-security-toolchain", + "path": "Dockerfile", + "display": "Dockerfile", + "kind": "exact", + "line": 22 + }, + { + "owner": "RELEASE-GATES", + "branch": "work/prc-release-gates-revision9-maker", + "path": ".github/workflows/test.yml", + "display": ".github/workflows/test.yml", + "kind": "exact", + "line": 23 + }, + { + "owner": "RELEASE-GATES", + "branch": "work/prc-release-gates-revision9-maker", + "path": "scripts/production-gates/assert-plan-path-ownership.ps1", + "display": "scripts/production-gates/assert-plan-path-ownership.ps1", + "kind": "exact", + "line": 23 + }, + { + "owner": "RELEASE-GATES", + "branch": "work/prc-release-gates-revision9-maker", + "path": "scripts/production-gates/assert-active-candidate-path-authority.ps1", + "display": "scripts/production-gates/assert-active-candidate-path-authority.ps1", + "kind": "exact", + "line": 23 + }, + { + "owner": "RELEASE-GATES", + "branch": "work/prc-release-gates-revision9-maker", + "path": "scripts/production-gates/run-db-suite.ps1", + "display": "scripts/production-gates/run-db-suite.ps1", + "kind": "exact", + "line": 23 + }, + { + "owner": "RELEASE-GATES", + "branch": "work/prc-release-gates-revision9-maker", + "path": ".agent/specs/release-gates-r9/evidence/release-gates", + "display": ".agent/specs/release-gates-r9/evidence/release-gates/**", + "kind": "prefix", + "line": 23 + }, + { + "owner": "RELEASE-GATES", + "branch": "work/prc-release-gates-revision9-maker", + "path": ".agent/reports/2026-07-11-release-gates-r9-maker.md", + "display": ".agent/reports/2026-07-11-release-gates-r9-maker.md", + "kind": "exact", + "line": 23 + }, + { + "owner": "IMAGE-REMEDIATION", + "branch": "work/prc-image-remediation", + "path": "Dockerfile", + "display": "Dockerfile", + "kind": "exact", + "line": 24 + }, + { + "owner": "IMAGE-REMEDIATION", + "branch": "work/prc-image-remediation", + "path": "cmd/engram-healthcheck/main.go", + "display": "cmd/engram-healthcheck/main.go", + "kind": "exact", + "line": 24 + }, + { + "owner": "IMAGE-REMEDIATION", + "branch": "work/prc-image-remediation", + "path": "cmd/engram-healthcheck/main_test.go", + "display": "cmd/engram-healthcheck/main_test.go", + "kind": "exact", + "line": 24 + }, + { + "owner": "IMAGE-REMEDIATION", + "branch": "work/prc-image-remediation", + "path": "apps/operator-console/package.json", + "display": "apps/operator-console/package.json", + "kind": "exact", + "line": 24 + }, + { + "owner": "IMAGE-REMEDIATION", + "branch": "work/prc-image-remediation", + "path": "apps/operator-console/package-lock.json", + "display": "apps/operator-console/package-lock.json", + "kind": "exact", + "line": 24 + }, + { + "owner": "IMAGE-REMEDIATION", + "branch": "work/prc-image-remediation", + "path": "deploy/postgres/Dockerfile", + "display": "deploy/postgres/Dockerfile", + "kind": "exact", + "line": 24 + }, + { + "owner": "IMAGE-REMEDIATION", + "branch": "work/prc-image-remediation", + "path": "docker-compose.yml", + "display": "docker-compose.yml", + "kind": "exact", + "line": 24 + }, + { + "owner": "IMAGE-REMEDIATION", + "branch": "work/prc-image-remediation", + "path": "deploy/docker-compose.runtime.yml", + "display": "deploy/docker-compose.runtime.yml", + "kind": "exact", + "line": 24 + }, + { + "owner": "IMAGE-REMEDIATION", + "branch": "work/prc-image-remediation", + "path": "docs/DEPLOYMENT.md", + "display": "docs/DEPLOYMENT.md", + "kind": "exact", + "line": 24 + }, + { + "owner": "IMAGE-REMEDIATION", + "branch": "work/prc-image-remediation", + "path": "docs/PRODUCTION-TESTING-PLAYBOOK.md", + "display": "docs/PRODUCTION-TESTING-PLAYBOOK.md", + "kind": "exact", + "line": 24 + }, + { + "owner": "IMAGE-REMEDIATION", + "branch": "work/prc-image-remediation", + "path": ".github/workflows/test.yml", + "display": ".github/workflows/test.yml", + "kind": "exact", + "line": 24 + }, + { + "owner": "IMAGE-REMEDIATION", + "branch": "work/prc-image-remediation", + "path": ".github/workflows/docker.yaml", + "display": ".github/workflows/docker.yaml", + "kind": "exact", + "line": 24 + }, + { + "owner": "IMAGE-REMEDIATION", + "branch": "work/prc-image-remediation", + "path": ".github/workflows/docker-publish.yml", + "display": ".github/workflows/docker-publish.yml", + "kind": "exact", + "line": 24 + }, + { + "owner": "IMAGE-REMEDIATION", + "branch": "work/prc-image-remediation", + "path": "scripts/production-gates/build-and-scan-images.ps1", + "display": "scripts/production-gates/build-and-scan-images.ps1", + "kind": "exact", + "line": 24 + }, + { + "owner": "IMAGE-REMEDIATION", + "branch": "work/prc-image-remediation", + "path": "tests/critical/runtime/image_runtime_contract_test.go", + "display": "tests/critical/runtime/image_runtime_contract_test.go", + "kind": "exact", + "line": 24 + }, + { + "owner": "IMAGE-REMEDIATION", + "branch": "work/prc-image-remediation", + "path": "tests/critical/runtime/postgres_image_contract_test.go", + "display": "tests/critical/runtime/postgres_image_contract_test.go", + "kind": "exact", + "line": 24 + }, + { + "owner": "SECURITY-PROJECT-IDENTITY", + "branch": "work/prc-security-project-identity-r4", + "path": "internal/db/gorm/project_store.go", + "display": "internal/db/gorm/project_store.go", + "kind": "exact", + "line": 25 + }, + { + "owner": "SECURITY-PROJECT-IDENTITY", + "branch": "work/prc-security-project-identity-r4", + "path": "internal/db/gorm/project_identity_v2_test.go", + "display": "internal/db/gorm/project_identity_v2_test.go", + "kind": "exact", + "line": 25 + }, + { + "owner": "SECURITY-PROJECT-IDENTITY", + "branch": "work/prc-security-project-identity-r4", + "path": "internal/grpcserver/project_identity_v2_test.go", + "display": "internal/grpcserver/project_identity_v2_test.go", + "kind": "exact", + "line": 25 + }, + { + "owner": "SECURITY-PROJECT-IDENTITY", + "branch": "work/prc-security-project-identity-r4", + "path": "internal/proxy/identity.go", + "display": "internal/proxy/identity.go", + "kind": "exact", + "line": 25 + }, + { + "owner": "SECURITY-PROJECT-IDENTITY", + "branch": "work/prc-security-project-identity-r4", + "path": "internal/proxy/identity_test.go", + "display": "internal/proxy/identity_test.go", + "kind": "exact", + "line": 25 + }, + { + "owner": "SECURITY-PROJECT-IDENTITY", + "branch": "work/prc-security-project-identity-r4", + "path": "internal/proxy/identity_process_test.go", + "display": "internal/proxy/identity_process_test.go", + "kind": "exact", + "line": 25 + }, + { + "owner": "SECURITY-PROJECT-IDENTITY", + "branch": "work/prc-security-project-identity-r4", + "path": "plugin/engram/hooks/lib.js", + "display": "plugin/engram/hooks/lib.js", + "kind": "exact", + "line": 25 + }, + { + "owner": "SECURITY-PROJECT-IDENTITY", + "branch": "work/prc-security-project-identity-r4", + "path": "plugin/engram/hooks/project-identity-v2.test.js", + "display": "plugin/engram/hooks/project-identity-v2.test.js", + "kind": "exact", + "line": 25 + }, + { + "owner": "SECURITY-PROJECT-IDENTITY", + "branch": "work/prc-security-project-identity-r4", + "path": "plugin/openclaw-engram/src/identity.ts", + "display": "plugin/openclaw-engram/src/identity.ts", + "kind": "exact", + "line": 25 + }, + { + "owner": "SECURITY-PROJECT-IDENTITY", + "branch": "work/prc-security-project-identity-r4", + "path": "plugin/openclaw-engram/test/project-identity-v2.test.mjs", + "display": "plugin/openclaw-engram/test/project-identity-v2.test.mjs", + "kind": "exact", + "line": 25 + }, + { + "owner": "SECURITY-PROJECT-IDENTITY", + "branch": "work/prc-security-project-identity-r4", + "path": ".agent/specs/security-project-identity/evidence", + "display": ".agent/specs/security-project-identity/evidence/**", + "kind": "prefix", + "line": 25 + }, + { + "owner": "SECURITY-PROJECT-IDENTITY", + "branch": "work/prc-security-project-identity-r4", + "path": ".agent/reports/evidence/production-ready/security-project-identity", + "display": ".agent/reports/evidence/production-ready/security-project-identity/**", + "kind": "prefix", + "line": 25 + }, + { + "owner": "OPENCLAW-RELEASE", + "branch": "work/prc-openclaw-release", + "path": "plugin/openclaw-engram/.gitignore", + "display": "plugin/openclaw-engram/.gitignore", + "kind": "exact", + "line": 26 + }, + { + "owner": "OPENCLAW-RELEASE", + "branch": "work/prc-openclaw-release", + "path": "plugin/openclaw-engram/package.json", + "display": "plugin/openclaw-engram/package.json", + "kind": "exact", + "line": 26 + }, + { + "owner": "OPENCLAW-RELEASE", + "branch": "work/prc-openclaw-release", + "path": "plugin/openclaw-engram/package-lock.json", + "display": "plugin/openclaw-engram/package-lock.json", + "kind": "exact", + "line": 26 + }, + { + "owner": "OPENCLAW-RELEASE", + "branch": "work/prc-openclaw-release", + "path": "plugin/openclaw-engram/openclaw.plugin.json", + "display": "plugin/openclaw-engram/openclaw.plugin.json", + "kind": "exact", + "line": 26 + }, + { + "owner": "OPENCLAW-RELEASE", + "branch": "work/prc-openclaw-release", + "path": "plugin/openclaw-engram/README.md", + "display": "plugin/openclaw-engram/README.md", + "kind": "exact", + "line": 26 + }, + { + "owner": "OPENCLAW-RELEASE", + "branch": "work/prc-openclaw-release", + "path": ".github/workflows/plugin-publish.yml", + "display": ".github/workflows/plugin-publish.yml", + "kind": "exact", + "line": 26 + }, + { + "owner": "OPENCLAW-RELEASE", + "branch": "work/prc-openclaw-release", + "path": "docs/RELEASE-PROTOCOL.md", + "display": "docs/RELEASE-PROTOCOL.md", + "kind": "exact", + "line": 26 + }, + { + "owner": "UPDATE-LIFECYCLE", + "branch": "work/prc-security-updater", + "path": "internal/update/update.go", + "display": "internal/update/update.go", + "kind": "exact", + "line": 27 + }, + { + "owner": "UPDATE-LIFECYCLE", + "branch": "work/prc-security-updater", + "path": "internal/update/update_test.go", + "display": "internal/update/update_test.go", + "kind": "exact", + "line": 27 + }, + { + "owner": "UPDATE-LIFECYCLE", + "branch": "work/prc-security-updater", + "path": "internal/worker/handlers_update.go", + "display": "internal/worker/handlers_update.go", + "kind": "exact", + "line": 27 + }, + { + "owner": "UPDATE-LIFECYCLE", + "branch": "work/prc-security-updater", + "path": "internal/worker/handlers_update_test.go", + "display": "internal/worker/handlers_update_test.go", + "kind": "exact", + "line": 27 + }, + { + "owner": "UPDATE-LIFECYCLE", + "branch": "work/prc-security-updater", + "path": "scripts/install.sh", + "display": "scripts/install.sh", + "kind": "exact", + "line": 27 + }, + { + "owner": "UPDATE-LIFECYCLE", + "branch": "work/prc-security-updater", + "path": "scripts/install.ps1", + "display": "scripts/install.ps1", + "kind": "exact", + "line": 27 + }, + { + "owner": "UPDATE-LIFECYCLE", + "branch": "work/prc-security-updater", + "path": ".goreleaser.yaml", + "display": ".goreleaser.yaml", + "kind": "exact", + "line": 27 + }, + { + "owner": "UPDATE-LIFECYCLE", + "branch": "work/prc-security-updater", + "path": ".github/workflows/release.yaml", + "display": ".github/workflows/release.yaml", + "kind": "exact", + "line": 27 + }, + { + "owner": "UPDATE-LIFECYCLE", + "branch": "work/prc-security-updater", + "path": "plugin/engram/hooks/hook-cli.test.js", + "display": "plugin/engram/hooks/hook-cli.test.js", + "kind": "exact", + "line": 27 + }, + { + "owner": "DOCUMENT-INGEST-PUBLIC-TRUTH", + "branch": "work/prc-document-ingest-public-truth", + "path": "internal/mcp/server.go", + "display": "internal/mcp/server.go", + "kind": "exact", + "line": 29 + }, + { + "owner": "DOCUMENT-INGEST-PUBLIC-TRUTH", + "branch": "work/prc-document-ingest-public-truth", + "path": "internal/mcp/ingest_document_description_test.go", + "display": "internal/mcp/ingest_document_description_test.go", + "kind": "exact", + "line": 29 + }, + { + "owner": "MCP-STRUCTURED-INPUT-VALIDATION", + "branch": "work/prc-mcp-structured-input-validation", + "path": "internal/mcp/coerce.go", + "display": "internal/mcp/coerce.go", + "kind": "exact", + "line": 31 + }, + { + "owner": "MCP-STRUCTURED-INPUT-VALIDATION", + "branch": "work/prc-mcp-structured-input-validation", + "path": "internal/mcp/coerce_test.go", + "display": "internal/mcp/coerce_test.go", + "kind": "exact", + "line": 31 + }, + { + "owner": "MCP-STRUCTURED-INPUT-VALIDATION", + "branch": "work/prc-mcp-structured-input-validation", + "path": "internal/mcp/tools_candidates.go", + "display": "internal/mcp/tools_candidates.go", + "kind": "exact", + "line": 31 + }, + { + "owner": "MCP-STRUCTURED-INPUT-VALIDATION", + "branch": "work/prc-mcp-structured-input-validation", + "path": "internal/mcp/tools_candidates_test.go", + "display": "internal/mcp/tools_candidates_test.go", + "kind": "exact", + "line": 31 + }, + { + "owner": "MCP-STRUCTURED-INPUT-VALIDATION", + "branch": "work/prc-mcp-structured-input-validation", + "path": "internal/mcp/tools_memory.go", + "display": "internal/mcp/tools_memory.go", + "kind": "exact", + "line": 31 + }, + { + "owner": "MCP-STRUCTURED-INPUT-VALIDATION", + "branch": "work/prc-mcp-structured-input-validation", + "path": "internal/mcp/tools_memory_edit_test.go", + "display": "internal/mcp/tools_memory_edit_test.go", + "kind": "exact", + "line": 31 + }, + { + "owner": "MCP-STRUCTURED-INPUT-VALIDATION", + "branch": "work/prc-mcp-structured-input-validation", + "path": "internal/mcp/tools_memory_significance.go", + "display": "internal/mcp/tools_memory_significance.go", + "kind": "exact", + "line": 31 + }, + { + "owner": "MCP-STRUCTURED-INPUT-VALIDATION", + "branch": "work/prc-mcp-structured-input-validation", + "path": "internal/mcp/tools_memory_significance_test.go", + "display": "internal/mcp/tools_memory_significance_test.go", + "kind": "exact", + "line": 31 + }, + { + "owner": "MCP-STRUCTURED-INPUT-VALIDATION", + "branch": "work/prc-mcp-structured-input-validation", + "path": "internal/mcp/tools_store_consolidated.go", + "display": "internal/mcp/tools_store_consolidated.go", + "kind": "exact", + "line": 31 + }, + { + "owner": "MCP-STRUCTURED-INPUT-VALIDATION", + "branch": "work/prc-mcp-structured-input-validation", + "path": "internal/mcp/tools_settings.go", + "display": "internal/mcp/tools_settings.go", + "kind": "exact", + "line": 31 + }, + { + "owner": "MCP-STRUCTURED-INPUT-VALIDATION", + "branch": "work/prc-mcp-structured-input-validation", + "path": "internal/mcp/tools_settings_test.go", + "display": "internal/mcp/tools_settings_test.go", + "kind": "exact", + "line": 31 + }, + { + "owner": "MCP-STRUCTURED-INPUT-VALIDATION", + "branch": "work/prc-mcp-structured-input-validation", + "path": "internal/mcp/tools_documents_v2.go", + "display": "internal/mcp/tools_documents_v2.go", + "kind": "exact", + "line": 31 + }, + { + "owner": "MCP-STRUCTURED-INPUT-VALIDATION", + "branch": "work/prc-mcp-structured-input-validation", + "path": "internal/mcp/tools_rule_governance.go", + "display": "internal/mcp/tools_rule_governance.go", + "kind": "exact", + "line": 31 + }, + { + "owner": "MCP-STRUCTURED-INPUT-VALIDATION", + "branch": "work/prc-mcp-structured-input-validation", + "path": "internal/mcp/tools_rule_governance_test.go", + "display": "internal/mcp/tools_rule_governance_test.go", + "kind": "exact", + "line": 31 + }, + { + "owner": "MCP-STRUCTURED-INPUT-VALIDATION", + "branch": "work/prc-mcp-structured-input-validation", + "path": "internal/mcp/structured_input_validation_test.go", + "display": "internal/mcp/structured_input_validation_test.go", + "kind": "exact", + "line": 31 + }, + { + "owner": "REDACTION-LIVE-CONTRACT", + "branch": "work/prc-redaction-live-contract", + "path": "internal/redaction/layer.go", + "display": "internal/redaction/layer.go", + "kind": "exact", + "line": 32 + }, + { + "owner": "REDACTION-LIVE-CONTRACT", + "branch": "work/prc-redaction-live-contract", + "path": "internal/redaction/layer_test.go", + "display": "internal/redaction/layer_test.go", + "kind": "exact", + "line": 32 + }, + { + "owner": "REDACTION-LIVE-CONTRACT", + "branch": "work/prc-redaction-live-contract", + "path": "internal/redaction/rejection_test.go", + "display": "internal/redaction/rejection_test.go", + "kind": "exact", + "line": 32 + }, + { + "owner": "REDACTION-LIVE-CONTRACT", + "branch": "work/prc-redaction-live-contract", + "path": "internal/mcp/redaction_guard.go", + "display": "internal/mcp/redaction_guard.go", + "kind": "exact", + "line": 32 + }, + { + "owner": "REDACTION-LIVE-CONTRACT", + "branch": "work/prc-redaction-live-contract", + "path": "internal/mcp/redaction_guard_test.go", + "display": "internal/mcp/redaction_guard_test.go", + "kind": "exact", + "line": 32 + }, + { + "owner": "REDACTION-LIVE-CONTRACT", + "branch": "work/prc-redaction-live-contract", + "path": "internal/mcp/tools_memory.go", + "display": "internal/mcp/tools_memory.go", + "kind": "exact", + "line": 32 + }, + { + "owner": "REDACTION-LIVE-CONTRACT", + "branch": "work/prc-redaction-live-contract", + "path": "internal/mcp/tools_rules.go", + "display": "internal/mcp/tools_rules.go", + "kind": "exact", + "line": 32 + }, + { + "owner": "REDACTION-LIVE-CONTRACT", + "branch": "work/prc-redaction-live-contract", + "path": "internal/mcp/tools_memory_redaction_audit_test.go", + "display": "internal/mcp/tools_memory_redaction_audit_test.go", + "kind": "exact", + "line": 32 + }, + { + "owner": "REDACTION-LIVE-CONTRACT", + "branch": "work/prc-redaction-live-contract", + "path": "internal/mcp/tools_rules_redaction_audit_test.go", + "display": "internal/mcp/tools_rules_redaction_audit_test.go", + "kind": "exact", + "line": 32 + }, + { + "owner": "REDACTION-LIVE-CONTRACT", + "branch": "work/prc-redaction-live-contract", + "path": "internal/worker/service.go", + "display": "internal/worker/service.go", + "kind": "exact", + "line": 32 + }, + { + "owner": "REDACTION-LIVE-CONTRACT", + "branch": "work/prc-redaction-live-contract", + "path": "internal/worker/service_redaction_test.go", + "display": "internal/worker/service_redaction_test.go", + "kind": "exact", + "line": 32 + }, + { + "owner": "REDACTION-LIVE-CONTRACT", + "branch": "work/prc-redaction-live-contract", + "path": "docs/operating-engram.md", + "display": "docs/operating-engram.md", + "kind": "exact", + "line": 32 + }, + { + "owner": "REDACTION-LIVE-CONTRACT", + "branch": "work/prc-redaction-live-contract", + "path": ".agent/reports/evidence/production-ready/redaction-live-contract", + "display": ".agent/reports/evidence/production-ready/redaction-live-contract/**", + "kind": "prefix", + "line": 32 + }, + { + "owner": "RETRIEVAL-VECTOR-CONTRACT", + "branch": "work/prc-retrieval-vector-contract", + "path": "internal/retrieval/hybrid_integration_test.go", + "display": "internal/retrieval/hybrid_integration_test.go", + "kind": "exact", + "line": 34 + }, + { + "owner": "STATIC-EMBED-CONTRACT", + "branch": "work/prc-static-embed-contract", + "path": "internal/worker/static_embed_test.go", + "display": "internal/worker/static_embed_test.go", + "kind": "exact", + "line": 35 + }, + { + "owner": "PRE-V5-UPGRADE-CONTRACT", + "branch": "work/prc-pre-v5-upgrade-contract", + "path": "internal/db/gorm/migrations_integration_test.go", + "display": "internal/db/gorm/migrations_integration_test.go", + "kind": "exact", + "line": 36 + }, + { + "owner": "PRE-V5-UPGRADE-CONTRACT", + "branch": "work/prc-pre-v5-upgrade-contract", + "path": "internal/grpcserver/credential_migration_test.go", + "display": "internal/grpcserver/credential_migration_test.go", + "kind": "exact", + "line": 36 + }, + { + "owner": "PRE-V5-UPGRADE-CONTRACT", + "branch": "work/prc-pre-v5-upgrade-contract", + "path": "tests/fixtures/pre-v5", + "display": "tests/fixtures/pre-v5/**", + "kind": "prefix", + "line": 36 + }, + { + "owner": "PRE-V5-UPGRADE-CONTRACT", + "branch": "work/prc-pre-v5-upgrade-contract", + "path": "tests/critical/recovery/pre_v5_upgrade_test.go", + "display": "tests/critical/recovery/pre_v5_upgrade_test.go", + "kind": "exact", + "line": 36 + }, + { + "owner": "PRE-V5-UPGRADE-CONTRACT", + "branch": "work/prc-pre-v5-upgrade-contract", + "path": "scripts/production-smoke/customer/run-pre-v5-upgrade.ps1", + "display": "scripts/production-smoke/customer/run-pre-v5-upgrade.ps1", + "kind": "exact", + "line": 36 + }, + { + "owner": "T007-COMPAT-DEMOLITION-CLASSIFICATION", + "branch": "work/prc-t007-compat-classification", + "path": "internal/mcp/store_memory_compat_t007_test.go", + "display": "internal/mcp/store_memory_compat_t007_test.go", + "kind": "exact", + "line": 37 + }, + { + "owner": "DB-RULES-ISOLATION", + "branch": "work/prc-db-rules-isolation", + "path": "internal/worker/handlers_rules_test.go", + "display": "internal/worker/handlers_rules_test.go", + "kind": "exact", + "line": 38 + }, + { + "owner": "DB-RULES-ISOLATION", + "branch": "work/prc-db-rules-isolation", + "path": "scripts/production-gates/run-db-rules-isolation.ps1", + "display": "scripts/production-gates/run-db-rules-isolation.ps1", + "kind": "exact", + "line": 38 + }, + { + "owner": "COVERAGE-CMD-ENGRAM", + "branch": "work/prc-coverage-cmd-engram", + "path": "cmd/engram/production_readiness_coverage_test.go", + "display": "cmd/engram/production_readiness_coverage_test.go", + "kind": "exact", + "line": 39 + }, + { + "owner": "COVERAGE-CMD-SERVER", + "branch": "work/prc-coverage-cmd-server", + "path": "cmd/engram-server/production_readiness_coverage_test.go", + "display": "cmd/engram-server/production_readiness_coverage_test.go", + "kind": "exact", + "line": 40 + }, + { + "owner": "COVERAGE-UPDATE", + "branch": "work/prc-coverage-update", + "path": "internal/update/production_readiness_coverage_test.go", + "display": "internal/update/production_readiness_coverage_test.go", + "kind": "exact", + "line": 41 + }, + { + "owner": "COVERAGE-WORKER", + "branch": "work/prc-coverage-worker", + "path": "internal/worker/production_readiness_coverage_test.go", + "display": "internal/worker/production_readiness_coverage_test.go", + "kind": "exact", + "line": 43 + }, + { + "owner": "COVERAGE-MCP", + "branch": "work/prc-coverage-mcp", + "path": "internal/mcp/production_readiness_coverage_test.go", + "display": "internal/mcp/production_readiness_coverage_test.go", + "kind": "exact", + "line": 44 + }, + { + "owner": "COVERAGE-GORM", + "branch": "work/prc-coverage-gorm", + "path": "internal/db/gorm/production_readiness_coverage_test.go", + "display": "internal/db/gorm/production_readiness_coverage_test.go", + "kind": "exact", + "line": 45 + }, + { + "owner": "COVERAGE-LOOM", + "branch": "work/prc-coverage-loom", + "path": "internal/handlers/loom/production_readiness_coverage_test.go", + "display": "internal/handlers/loom/production_readiness_coverage_test.go", + "kind": "exact", + "line": 46 + }, + { + "owner": "DEPLOYMENT-ROLLBACK", + "branch": "work/prc-deployment-rollback", + "path": "docker-compose.yml", + "display": "docker-compose.yml", + "kind": "exact", + "line": 47 + }, + { + "owner": "DEPLOYMENT-ROLLBACK", + "branch": "work/prc-deployment-rollback", + "path": "deploy/docker-compose.runtime.yml", + "display": "deploy/docker-compose.runtime.yml", + "kind": "exact", + "line": 47 + }, + { + "owner": "DEPLOYMENT-ROLLBACK", + "branch": "work/prc-deployment-rollback", + "path": "deploy/docker-compose.operator-web-standalone.yml", + "display": "deploy/docker-compose.operator-web-standalone.yml", + "kind": "exact", + "line": 47 + }, + { + "owner": "DEPLOYMENT-ROLLBACK", + "branch": "work/prc-deployment-rollback", + "path": "deploy/entrypoint-server.sh", + "display": "deploy/entrypoint-server.sh", + "kind": "exact", + "line": 47 + }, + { + "owner": "DEPLOYMENT-ROLLBACK", + "branch": "work/prc-deployment-rollback", + "path": "deploy/healthcheck-server.sh", + "display": "deploy/healthcheck-server.sh", + "kind": "exact", + "line": 47 + }, + { + "owner": "DEPLOYMENT-ROLLBACK", + "branch": "work/prc-deployment-rollback", + "path": "deploy/verify-rollback.ps1", + "display": "deploy/verify-rollback.ps1", + "kind": "exact", + "line": 47 + }, + { + "owner": "DEPLOYMENT-ROLLBACK", + "branch": "work/prc-deployment-rollback", + "path": "deploy/verify-runtime-policy.ps1", + "display": "deploy/verify-runtime-policy.ps1", + "kind": "exact", + "line": 47 + }, + { + "owner": "RECOVERY-DATA", + "branch": "work/prc-recovery-data", + "path": "scripts/recovery/start-disposable-postgres.ps1", + "display": "scripts/recovery/start-disposable-postgres.ps1", + "kind": "exact", + "line": 48 + }, + { + "owner": "RECOVERY-DATA", + "branch": "work/prc-recovery-data", + "path": "scripts/recovery/verify-postgres-roundtrip.ps1", + "display": "scripts/recovery/verify-postgres-roundtrip.ps1", + "kind": "exact", + "line": 48 + }, + { + "owner": "RECOVERY-DATA", + "branch": "work/prc-recovery-data", + "path": "scripts/recovery/seed-recovery-fixture.ps1", + "display": "scripts/recovery/seed-recovery-fixture.ps1", + "kind": "exact", + "line": 48 + }, + { + "owner": "RECOVERY-DATA", + "branch": "work/prc-recovery-data", + "path": "scripts/recovery/assert-recovery-fixture.ps1", + "display": "scripts/recovery/assert-recovery-fixture.ps1", + "kind": "exact", + "line": 48 + }, + { + "owner": "RECOVERY-DATA", + "branch": "work/prc-recovery-data", + "path": "tests/critical/recovery/postgres_roundtrip_test.go", + "display": "tests/critical/recovery/postgres_roundtrip_test.go", + "kind": "exact", + "line": 48 + }, + { + "owner": "OBSERVABILITY-OTLP", + "branch": "work/prc-observability-otlp", + "path": "internal/module/obs/logging.go", + "display": "internal/module/obs/logging.go", + "kind": "exact", + "line": 49 + }, + { + "owner": "OBSERVABILITY-OTLP", + "branch": "work/prc-observability-otlp", + "path": "internal/module/obs/logging_test.go", + "display": "internal/module/obs/logging_test.go", + "kind": "exact", + "line": 49 + }, + { + "owner": "OBSERVABILITY-OTLP", + "branch": "work/prc-observability-otlp", + "path": "internal/module/obs/meter.go", + "display": "internal/module/obs/meter.go", + "kind": "exact", + "line": 49 + }, + { + "owner": "OBSERVABILITY-OTLP", + "branch": "work/prc-observability-otlp", + "path": "internal/module/obs/meter_test.go", + "display": "internal/module/obs/meter_test.go", + "kind": "exact", + "line": 49 + }, + { + "owner": "OBSERVABILITY-OTLP", + "branch": "work/prc-observability-otlp", + "path": "internal/module/obs/metrics.go", + "display": "internal/module/obs/metrics.go", + "kind": "exact", + "line": 49 + }, + { + "owner": "OBSERVABILITY-OTLP", + "branch": "work/prc-observability-otlp", + "path": "internal/module/obs/metrics_test.go", + "display": "internal/module/obs/metrics_test.go", + "kind": "exact", + "line": 49 + }, + { + "owner": "OBSERVABILITY-OTLP", + "branch": "work/prc-observability-otlp", + "path": "cmd/engram-server/main.go", + "display": "cmd/engram-server/main.go", + "kind": "exact", + "line": 49 + }, + { + "owner": "OBSERVABILITY-OTLP", + "branch": "work/prc-observability-otlp", + "path": "cmd/engram-server/main_test.go", + "display": "cmd/engram-server/main_test.go", + "kind": "exact", + "line": 49 + }, + { + "owner": "OBSERVABILITY-OTLP", + "branch": "work/prc-observability-otlp", + "path": "scripts/production-smoke/verify-otlp.ps1", + "display": "scripts/production-smoke/verify-otlp.ps1", + "kind": "exact", + "line": 49 + }, + { + "owner": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "path": "internal/scope/domain_policy.go", + "display": "internal/scope/domain_policy.go", + "kind": "exact", + "line": 50 + }, + { + "owner": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "path": "internal/scope/domain_policy_test.go", + "display": "internal/scope/domain_policy_test.go", + "kind": "exact", + "line": 50 + }, + { + "owner": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "path": "internal/scope/filter.go", + "display": "internal/scope/filter.go", + "kind": "exact", + "line": 50 + }, + { + "owner": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "path": "internal/scope/filter_test.go", + "display": "internal/scope/filter_test.go", + "kind": "exact", + "line": 50 + }, + { + "owner": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "path": "internal/scope/filter_principal_test.go", + "display": "internal/scope/filter_principal_test.go", + "kind": "exact", + "line": 50 + }, + { + "owner": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "path": "internal/scope/filter_w4_test.go", + "display": "internal/scope/filter_w4_test.go", + "kind": "exact", + "line": 50 + }, + { + "owner": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "path": "internal/principalmemory/access_policy.go", + "display": "internal/principalmemory/access_policy.go", + "kind": "exact", + "line": 50 + }, + { + "owner": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "path": "internal/principalmemory/access_policy_test.go", + "display": "internal/principalmemory/access_policy_test.go", + "kind": "exact", + "line": 50 + }, + { + "owner": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "path": "internal/principalmemory/domain_registry.go", + "display": "internal/principalmemory/domain_registry.go", + "kind": "exact", + "line": 50 + }, + { + "owner": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "path": "internal/principalmemory/domain_registry_test.go", + "display": "internal/principalmemory/domain_registry_test.go", + "kind": "exact", + "line": 50 + }, + { + "owner": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "path": "internal/principalmemory/query_service.go", + "display": "internal/principalmemory/query_service.go", + "kind": "exact", + "line": 50 + }, + { + "owner": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "path": "internal/principalmemory/query_service_test.go", + "display": "internal/principalmemory/query_service_test.go", + "kind": "exact", + "line": 50 + }, + { + "owner": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "path": "internal/mcp/tools_principal_memory.go", + "display": "internal/mcp/tools_principal_memory.go", + "kind": "exact", + "line": 50 + }, + { + "owner": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "path": "internal/mcp/tools_principal_memory_test.go", + "display": "internal/mcp/tools_principal_memory_test.go", + "kind": "exact", + "line": 50 + }, + { + "owner": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "path": "internal/mcp/tools_recall_principal_test.go", + "display": "internal/mcp/tools_recall_principal_test.go", + "kind": "exact", + "line": 50 + }, + { + "owner": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "path": "internal/mcp/recall_visibility_backfill_test.go", + "display": "internal/mcp/recall_visibility_backfill_test.go", + "kind": "exact", + "line": 50 + }, + { + "owner": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "path": "internal/mcp/store_memory_principal_test.go", + "display": "internal/mcp/store_memory_principal_test.go", + "kind": "exact", + "line": 50 + }, + { + "owner": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "path": "internal/worker/handlers_principal_memory.go", + "display": "internal/worker/handlers_principal_memory.go", + "kind": "exact", + "line": 50 + }, + { + "owner": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "path": "internal/worker/handlers_principal_memory_test.go", + "display": "internal/worker/handlers_principal_memory_test.go", + "kind": "exact", + "line": 50 + }, + { + "owner": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "path": "internal/worker/scope_bypass_w4_test.go", + "display": "internal/worker/scope_bypass_w4_test.go", + "kind": "exact", + "line": 50 + }, + { + "owner": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "path": "internal/worker/retention.go", + "display": "internal/worker/retention.go", + "kind": "exact", + "line": 50 + }, + { + "owner": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "path": "internal/worker/retention_test.go", + "display": "internal/worker/retention_test.go", + "kind": "exact", + "line": 50 + }, + { + "owner": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "path": "internal/db/gorm/memory_store.go", + "display": "internal/db/gorm/memory_store.go", + "kind": "exact", + "line": 50 + }, + { + "owner": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "path": "internal/db/gorm/memory_store_principal_test.go", + "display": "internal/db/gorm/memory_store_principal_test.go", + "kind": "exact", + "line": 50 + }, + { + "owner": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "path": "internal/db/gorm/memory_store_principal_query_test.go", + "display": "internal/db/gorm/memory_store_principal_query_test.go", + "kind": "exact", + "line": 50 + }, + { + "owner": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "path": "internal/db/gorm/purge_store_test.go", + "display": "internal/db/gorm/purge_store_test.go", + "kind": "exact", + "line": 50 + }, + { + "owner": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "path": "tests/critical/data_boundaries/principal_project_retention_test.go", + "display": "tests/critical/data_boundaries/principal_project_retention_test.go", + "kind": "exact", + "line": 50 + }, + { + "owner": "CRITICAL-HARNESS", + "branch": "work/prc-critical-harness", + "path": "tests/critical/customer_mode/customer_mode_test.go", + "display": "tests/critical/customer_mode/customer_mode_test.go", + "kind": "exact", + "line": 51 + }, + { + "owner": "CRITICAL-HARNESS", + "branch": "work/prc-critical-harness", + "path": "tests/critical/customer_mode/compatibility_test.go", + "display": "tests/critical/customer_mode/compatibility_test.go", + "kind": "exact", + "line": 51 + }, + { + "owner": "CRITICAL-HARNESS", + "branch": "work/prc-critical-harness", + "path": "tests/critical/customer_mode/cross_agent_test.go", + "display": "tests/critical/customer_mode/cross_agent_test.go", + "kind": "exact", + "line": 51 + }, + { + "owner": "CRITICAL-HARNESS", + "branch": "work/prc-critical-harness", + "path": "scripts/production-smoke/customer/run-customer-mode.ps1", + "display": "scripts/production-smoke/customer/run-customer-mode.ps1", + "kind": "exact", + "line": 51 + }, + { + "owner": "CRITICAL-HARNESS", + "branch": "work/prc-critical-harness", + "path": "scripts/production-smoke/customer/run-client-compatibility.ps1", + "display": "scripts/production-smoke/customer/run-client-compatibility.ps1", + "kind": "exact", + "line": 51 + }, + { + "owner": "CRITICAL-HARNESS", + "branch": "work/prc-critical-harness", + "path": "scripts/production-smoke/customer/run-cross-agent.ps1", + "display": "scripts/production-smoke/customer/run-cross-agent.ps1", + "kind": "exact", + "line": 51 + }, + { + "owner": "CRITICAL-HARNESS", + "branch": "work/prc-critical-harness", + "path": "scripts/production-smoke/customer/run-diagnostic-matrix.ps1", + "display": "scripts/production-smoke/customer/run-diagnostic-matrix.ps1", + "kind": "exact", + "line": 51 + }, + { + "owner": "CRITICAL-HARNESS", + "branch": "work/prc-critical-harness", + "path": "scripts/production-smoke/customer/assert-product-works.ps1", + "display": "scripts/production-smoke/customer/assert-product-works.ps1", + "kind": "exact", + "line": 51 + }, + { + "owner": "CORE-PUBLIC-TRUTH", + "branch": "work/prc-core-public-truth", + "path": "README.md", + "display": "README.md", + "kind": "exact", + "line": 52 + }, + { + "owner": "CORE-PUBLIC-TRUTH", + "branch": "work/prc-core-public-truth", + "path": "README.ru.md", + "display": "README.ru.md", + "kind": "exact", + "line": 52 + }, + { + "owner": "CORE-PUBLIC-TRUTH", + "branch": "work/prc-core-public-truth", + "path": "README.zh.md", + "display": "README.zh.md", + "kind": "exact", + "line": 52 + }, + { + "owner": "CORE-PUBLIC-TRUTH", + "branch": "work/prc-core-public-truth", + "path": "CONTRIBUTING.md", + "display": "CONTRIBUTING.md", + "kind": "exact", + "line": 52 + }, + { + "owner": "CORE-PUBLIC-TRUTH", + "branch": "work/prc-core-public-truth", + "path": "CHANGELOG.md", + "display": "CHANGELOG.md", + "kind": "exact", + "line": 52 + }, + { + "owner": "CORE-PUBLIC-TRUTH", + "branch": "work/prc-core-public-truth", + "path": "Makefile", + "display": "Makefile", + "kind": "exact", + "line": 52 + }, + { + "owner": "CORE-PUBLIC-TRUTH", + "branch": "work/prc-core-public-truth", + "path": ".env.example", + "display": ".env.example", + "kind": "exact", + "line": 52 + }, + { + "owner": "CORE-PUBLIC-TRUTH", + "branch": "work/prc-core-public-truth", + "path": "docs/DEPLOYMENT.md", + "display": "docs/DEPLOYMENT.md", + "kind": "exact", + "line": 52 + }, + { + "owner": "CORE-PUBLIC-TRUTH", + "branch": "work/prc-core-public-truth", + "path": "docs/MIGRATION.md", + "display": "docs/MIGRATION.md", + "kind": "exact", + "line": 52 + }, + { + "owner": "CORE-PUBLIC-TRUTH", + "branch": "work/prc-core-public-truth", + "path": "docs/PRODUCTION-TESTING-PLAYBOOK.md", + "display": "docs/PRODUCTION-TESTING-PLAYBOOK.md", + "kind": "exact", + "line": 52 + }, + { + "owner": "CORE-PUBLIC-TRUTH", + "branch": "work/prc-core-public-truth", + "path": "docs/arch/CONFIGURATION.md", + "display": "docs/arch/CONFIGURATION.md", + "kind": "exact", + "line": 52 + }, + { + "owner": "CORE-PUBLIC-TRUTH", + "branch": "work/prc-core-public-truth", + "path": "docs/arch/QUICKSTART.md", + "display": "docs/arch/QUICKSTART.md", + "kind": "exact", + "line": 52 + }, + { + "owner": "CORE-PUBLIC-TRUTH", + "branch": "work/prc-core-public-truth", + "path": "docs/release-notes/v6.43.0.md", + "display": "docs/release-notes/v6.43.0.md", + "kind": "exact", + "line": 52 + }, + { + "owner": "CORE-PUBLIC-TRUTH", + "branch": "work/prc-core-public-truth", + "path": "docs/public/engram.jpg", + "display": "docs/public/engram.jpg", + "kind": "exact", + "line": 52 + }, + { + "owner": "CORE-PUBLIC-TRUTH", + "branch": "work/prc-core-public-truth", + "path": "plugin/engram/commands/setup.md", + "display": "plugin/engram/commands/setup.md", + "kind": "exact", + "line": 52 + }, + { + "owner": "CORE-PUBLIC-TRUTH", + "branch": "work/prc-core-public-truth", + "path": "plugin/engram/commands/doctor.md", + "display": "plugin/engram/commands/doctor.md", + "kind": "exact", + "line": 52 + }, + { + "owner": "FINAL-PUBLIC-TRUTH", + "branch": "work/prc-final-public-truth", + "path": "README.md", + "display": "README.md", + "kind": "exact", + "line": 53 + }, + { + "owner": "FINAL-PUBLIC-TRUTH", + "branch": "work/prc-final-public-truth", + "path": "README.ru.md", + "display": "README.ru.md", + "kind": "exact", + "line": 53 + }, + { + "owner": "FINAL-PUBLIC-TRUTH", + "branch": "work/prc-final-public-truth", + "path": "README.zh.md", + "display": "README.zh.md", + "kind": "exact", + "line": 53 + }, + { + "owner": "FINAL-PUBLIC-TRUTH", + "branch": "work/prc-final-public-truth", + "path": "CONTRIBUTING.md", + "display": "CONTRIBUTING.md", + "kind": "exact", + "line": 53 + }, + { + "owner": "FINAL-PUBLIC-TRUTH", + "branch": "work/prc-final-public-truth", + "path": "CHANGELOG.md", + "display": "CHANGELOG.md", + "kind": "exact", + "line": 53 + }, + { + "owner": "FINAL-PUBLIC-TRUTH", + "branch": "work/prc-final-public-truth", + "path": "Makefile", + "display": "Makefile", + "kind": "exact", + "line": 53 + }, + { + "owner": "FINAL-PUBLIC-TRUTH", + "branch": "work/prc-final-public-truth", + "path": ".env.example", + "display": ".env.example", + "kind": "exact", + "line": 53 + }, + { + "owner": "FINAL-PUBLIC-TRUTH", + "branch": "work/prc-final-public-truth", + "path": "docs/DEPLOYMENT.md", + "display": "docs/DEPLOYMENT.md", + "kind": "exact", + "line": 53 + }, + { + "owner": "FINAL-PUBLIC-TRUTH", + "branch": "work/prc-final-public-truth", + "path": "docs/MIGRATION.md", + "display": "docs/MIGRATION.md", + "kind": "exact", + "line": 53 + }, + { + "owner": "FINAL-PUBLIC-TRUTH", + "branch": "work/prc-final-public-truth", + "path": "docs/PRODUCTION-TESTING-PLAYBOOK.md", + "display": "docs/PRODUCTION-TESTING-PLAYBOOK.md", + "kind": "exact", + "line": 53 + }, + { + "owner": "FINAL-PUBLIC-TRUTH", + "branch": "work/prc-final-public-truth", + "path": "docs/operating-engram.md", + "display": "docs/operating-engram.md", + "kind": "exact", + "line": 53 + }, + { + "owner": "FINAL-PUBLIC-TRUTH", + "branch": "work/prc-final-public-truth", + "path": "docs/arch/CONFIGURATION.md", + "display": "docs/arch/CONFIGURATION.md", + "kind": "exact", + "line": 53 + }, + { + "owner": "FINAL-PUBLIC-TRUTH", + "branch": "work/prc-final-public-truth", + "path": "docs/arch/QUICKSTART.md", + "display": "docs/arch/QUICKSTART.md", + "kind": "exact", + "line": 53 + }, + { + "owner": "FINAL-PUBLIC-TRUTH", + "branch": "work/prc-final-public-truth", + "path": "docs/public/engram.jpg", + "display": "docs/public/engram.jpg", + "kind": "exact", + "line": 53 + }, + { + "owner": "FINAL-PUBLIC-TRUTH", + "branch": "work/prc-final-public-truth", + "path": "plugin/engram/commands/setup.md", + "display": "plugin/engram/commands/setup.md", + "kind": "exact", + "line": 53 + }, + { + "owner": "FINAL-PUBLIC-TRUTH", + "branch": "work/prc-final-public-truth", + "path": "plugin/engram/commands/doctor.md", + "display": "plugin/engram/commands/doctor.md", + "kind": "exact", + "line": 53 + }, + { + "owner": "LAUNCHER-FIRST-RUN", + "branch": "work/prc-launcher-first-run", + "path": "cmd/engram/main.go", + "display": "cmd/engram/main.go", + "kind": "exact", + "line": 54 + }, + { + "owner": "LAUNCHER-FIRST-RUN", + "branch": "work/prc-launcher-first-run", + "path": "cmd/engram/main_test.go", + "display": "cmd/engram/main_test.go", + "kind": "exact", + "line": 54 + }, + { + "owner": "LAUNCHER-FIRST-RUN", + "branch": "work/prc-launcher-first-run", + "path": "cmd/engram/wiring.go", + "display": "cmd/engram/wiring.go", + "kind": "exact", + "line": 54 + }, + { + "owner": "LAUNCHER-FIRST-RUN", + "branch": "work/prc-launcher-first-run", + "path": "cmd/engram/exec_windows.go", + "display": "cmd/engram/exec_windows.go", + "kind": "exact", + "line": 54 + }, + { + "owner": "LAUNCHER-FIRST-RUN", + "branch": "work/prc-launcher-first-run", + "path": "cmd/engram/exec_unix.go", + "display": "cmd/engram/exec_unix.go", + "kind": "exact", + "line": 54 + }, + { + "owner": "LAUNCHER-FIRST-RUN", + "branch": "work/prc-launcher-first-run", + "path": "plugin/engram/.engram-project", + "display": "plugin/engram/.engram-project", + "kind": "exact", + "line": 54 + }, + { + "owner": "LAUNCHER-FIRST-RUN", + "branch": "work/prc-launcher-first-run", + "path": "plugin/engram/scripts/run-engram.js", + "display": "plugin/engram/scripts/run-engram.js", + "kind": "exact", + "line": 54 + }, + { + "owner": "LAUNCHER-FIRST-RUN", + "branch": "work/prc-launcher-first-run", + "path": "plugin/engram/scripts/run-engram.test.js", + "display": "plugin/engram/scripts/run-engram.test.js", + "kind": "exact", + "line": 54 + }, + { + "owner": "LAUNCHER-FIRST-RUN", + "branch": "work/prc-launcher-first-run", + "path": "plugin/engram/scripts/ensure-binary.js", + "display": "plugin/engram/scripts/ensure-binary.js", + "kind": "exact", + "line": 54 + }, + { + "owner": "LAUNCHER-FIRST-RUN", + "branch": "work/prc-launcher-first-run", + "path": "plugin/engram/scripts/ensure-binary.test.js", + "display": "plugin/engram/scripts/ensure-binary.test.js", + "kind": "exact", + "line": 54 + }, + { + "owner": "OC-INTEGRATION", + "branch": "work/prc-operator-console-integration", + "path": "apps/operator-console", + "display": "apps/operator-console/**", + "kind": "prefix", + "line": 55 + }, + { + "owner": "S4B-CONTRACT", + "branch": "work/prc-s4b-contract", + "path": ".agent/specs/engram-v7-directives-surfacing", + "display": ".agent/specs/engram-v7-directives-surfacing/**", + "kind": "prefix", + "line": 56 + }, + { + "owner": "V7-S4B-BACKEND", + "branch": "work/prc-v7-s4b-backend", + "path": "internal/cognitive/s4bsurfacing", + "display": "internal/cognitive/s4bsurfacing/**", + "kind": "prefix", + "line": 57 + }, + { + "owner": "V7-CORE-CALLPATH", + "branch": "work/prc-v7-core-callpath", + "path": "internal/cognitive/core/event_bus.go", + "display": "internal/cognitive/core/event_bus.go", + "kind": "exact", + "line": 58 + }, + { + "owner": "V7-CORE-CALLPATH", + "branch": "work/prc-v7-core-callpath", + "path": "internal/cognitive/core/event_bus_test.go", + "display": "internal/cognitive/core/event_bus_test.go", + "kind": "exact", + "line": 58 + }, + { + "owner": "V7-CORE-CALLPATH", + "branch": "work/prc-v7-core-callpath", + "path": "internal/cognitive/core/hint_queue.go", + "display": "internal/cognitive/core/hint_queue.go", + "kind": "exact", + "line": 58 + }, + { + "owner": "V7-CORE-CALLPATH", + "branch": "work/prc-v7-core-callpath", + "path": "internal/cognitive/core/hint_queue_test.go", + "display": "internal/cognitive/core/hint_queue_test.go", + "kind": "exact", + "line": 58 + }, + { + "owner": "V7-CORE-CALLPATH", + "branch": "work/prc-v7-core-callpath", + "path": "internal/cognitive/s3ambient/queue.go", + "display": "internal/cognitive/s3ambient/queue.go", + "kind": "exact", + "line": 58 + }, + { + "owner": "V7-CORE-CALLPATH", + "branch": "work/prc-v7-core-callpath", + "path": "internal/cognitive/s3ambient/subsystem.go", + "display": "internal/cognitive/s3ambient/subsystem.go", + "kind": "exact", + "line": 58 + }, + { + "owner": "V7-RUNTIME-WIRING", + "branch": "work/prc-v7-runtime-wiring", + "path": "internal/worker/service.go", + "display": "internal/worker/service.go", + "kind": "exact", + "line": 59 + }, + { + "owner": "V7-RUNTIME-WIRING", + "branch": "work/prc-v7-runtime-wiring", + "path": "internal/worker/service_v7_integration_test.go", + "display": "internal/worker/service_v7_integration_test.go", + "kind": "exact", + "line": 59 + }, + { + "owner": "V7-RUNTIME-WIRING", + "branch": "work/prc-v7-runtime-wiring", + "path": "internal/worker/handlers_stats_v7.go", + "display": "internal/worker/handlers_stats_v7.go", + "kind": "exact", + "line": 59 + }, + { + "owner": "V7-RUNTIME-WIRING", + "branch": "work/prc-v7-runtime-wiring", + "path": "internal/worker/handlers_stats_v7_test.go", + "display": "internal/worker/handlers_stats_v7_test.go", + "kind": "exact", + "line": 59 + }, + { + "owner": "V7-TELEMETRY-WIRING", + "branch": "work/prc-v7-telemetry-wiring", + "path": "internal/cognitive/s5/metrics.go", + "display": "internal/cognitive/s5/metrics.go", + "kind": "exact", + "line": 60 + }, + { + "owner": "V7-TELEMETRY-WIRING", + "branch": "work/prc-v7-telemetry-wiring", + "path": "internal/cognitive/s5/provider.go", + "display": "internal/cognitive/s5/provider.go", + "kind": "exact", + "line": 60 + }, + { + "owner": "V7-TELEMETRY-WIRING", + "branch": "work/prc-v7-telemetry-wiring", + "path": "internal/cognitive/s5/provider_test.go", + "display": "internal/cognitive/s5/provider_test.go", + "kind": "exact", + "line": 60 + }, + { + "owner": "V7-TELEMETRY-WIRING", + "branch": "work/prc-v7-telemetry-wiring", + "path": "internal/cognitive/s5/source_adapter.go", + "display": "internal/cognitive/s5/source_adapter.go", + "kind": "exact", + "line": 60 + }, + { + "owner": "V7-TELEMETRY-WIRING", + "branch": "work/prc-v7-telemetry-wiring", + "path": "internal/cognitive/s5/source_adapter_test.go", + "display": "internal/cognitive/s5/source_adapter_test.go", + "kind": "exact", + "line": 60 + }, + { + "owner": "ROADMAP-RECONCILIATION", + "branch": "work/prc-roadmap-reconciliation", + "path": ".agent/specs/roadmap.md", + "display": ".agent/specs/roadmap.md", + "kind": "exact", + "line": 61 + }, + { + "owner": "ROADMAP-RECONCILIATION", + "branch": "work/prc-roadmap-reconciliation", + "path": ".agent/specs/ui-surface-ledger.md", + "display": ".agent/specs/ui-surface-ledger.md", + "kind": "exact", + "line": 61 + }, + { + "owner": "ROADMAP-RECONCILIATION", + "branch": "work/prc-roadmap-reconciliation", + "path": ".agent/specs/operator-console-production-integration", + "display": ".agent/specs/operator-console-production-integration/**", + "kind": "prefix", + "line": 61 + }, + { + "owner": "ROADMAP-RECONCILIATION", + "branch": "work/prc-roadmap-reconciliation", + "path": ".agent/specs/engram-v7-ambient/spec.md", + "display": ".agent/specs/engram-v7-ambient/spec.md", + "kind": "exact", + "line": 61 + }, + { + "owner": "ROADMAP-RECONCILIATION", + "branch": "work/prc-roadmap-reconciliation", + "path": ".agent/specs/engram-v7-ambient/plan.md", + "display": ".agent/specs/engram-v7-ambient/plan.md", + "kind": "exact", + "line": 61 + }, + { + "owner": "ROADMAP-RECONCILIATION", + "branch": "work/prc-roadmap-reconciliation", + "path": ".agent/specs/engram-v7-ambient/checklists/general.md", + "display": ".agent/specs/engram-v7-ambient/checklists/general.md", + "kind": "exact", + "line": 61 + }, + { + "owner": "ROADMAP-RECONCILIATION", + "branch": "work/prc-roadmap-reconciliation", + "path": ".agent/specs/engram-v7-ambient/changes/CR-001-initial-scope/change.md", + "display": ".agent/specs/engram-v7-ambient/changes/CR-001-initial-scope/change.md", + "kind": "exact", + "line": 61 + }, + { + "owner": "ROADMAP-RECONCILIATION", + "branch": "work/prc-roadmap-reconciliation", + "path": ".agent/specs/engram-v7-ambient/changes/CR-001-initial-scope/tasks.md", + "display": ".agent/specs/engram-v7-ambient/changes/CR-001-initial-scope/tasks.md", + "kind": "exact", + "line": 61 + }, + { + "owner": "NORTHSTAR-CI-A-CONTRACTS", + "branch": "work/prc-northstar-ci-a-contracts", + "path": ".agent/specs/engram-absorption/ci-a-dense-vector/spec.md", + "display": ".agent/specs/engram-absorption/ci-a-dense-vector/spec.md", + "kind": "exact", + "line": 62 + }, + { + "owner": "NORTHSTAR-CI-A-CONTRACTS", + "branch": "work/prc-northstar-ci-a-contracts", + "path": ".agent/specs/engram-absorption/ci-a-dense-vector/plan.md", + "display": ".agent/specs/engram-absorption/ci-a-dense-vector/plan.md", + "kind": "exact", + "line": 62 + }, + { + "owner": "NORTHSTAR-CI-A-CONTRACTS", + "branch": "work/prc-northstar-ci-a-contracts", + "path": ".agent/specs/engram-absorption/ci-a-dense-vector/checklists/general.md", + "display": ".agent/specs/engram-absorption/ci-a-dense-vector/checklists/general.md", + "kind": "exact", + "line": 62 + }, + { + "owner": "NORTHSTAR-CI-A-CONTRACTS", + "branch": "work/prc-northstar-ci-a-contracts", + "path": ".agent/specs/engram-absorption/ci-a-dense-vector/changes/CR-001-initial-scope/change.md", + "display": ".agent/specs/engram-absorption/ci-a-dense-vector/changes/CR-001-initial-scope/change.md", + "kind": "exact", + "line": 62 + }, + { + "owner": "NORTHSTAR-CI-A-CONTRACTS", + "branch": "work/prc-northstar-ci-a-contracts", + "path": ".agent/specs/engram-absorption/ci-a-dense-vector/changes/CR-001-initial-scope/tasks.md", + "display": ".agent/specs/engram-absorption/ci-a-dense-vector/changes/CR-001-initial-scope/tasks.md", + "kind": "exact", + "line": 62 + }, + { + "owner": "NORTHSTAR-CI-B-CONTRACTS", + "branch": "work/prc-northstar-ci-b-contracts", + "path": ".agent/specs/engram-absorption/ci-b-graph-watcher-context/spec.md", + "display": ".agent/specs/engram-absorption/ci-b-graph-watcher-context/spec.md", + "kind": "exact", + "line": 63 + }, + { + "owner": "NORTHSTAR-CI-B-CONTRACTS", + "branch": "work/prc-northstar-ci-b-contracts", + "path": ".agent/specs/engram-absorption/ci-b-graph-watcher-context/plan.md", + "display": ".agent/specs/engram-absorption/ci-b-graph-watcher-context/plan.md", + "kind": "exact", + "line": 63 + }, + { + "owner": "NORTHSTAR-CI-B-CONTRACTS", + "branch": "work/prc-northstar-ci-b-contracts", + "path": ".agent/specs/engram-absorption/ci-b-graph-watcher-context/checklists/general.md", + "display": ".agent/specs/engram-absorption/ci-b-graph-watcher-context/checklists/general.md", + "kind": "exact", + "line": 63 + }, + { + "owner": "NORTHSTAR-CI-B-CONTRACTS", + "branch": "work/prc-northstar-ci-b-contracts", + "path": ".agent/specs/engram-absorption/ci-b-graph-watcher-context/changes/CR-001-initial-scope/change.md", + "display": ".agent/specs/engram-absorption/ci-b-graph-watcher-context/changes/CR-001-initial-scope/change.md", + "kind": "exact", + "line": 63 + }, + { + "owner": "NORTHSTAR-CI-B-CONTRACTS", + "branch": "work/prc-northstar-ci-b-contracts", + "path": ".agent/specs/engram-absorption/ci-b-graph-watcher-context/changes/CR-001-initial-scope/tasks.md", + "display": ".agent/specs/engram-absorption/ci-b-graph-watcher-context/changes/CR-001-initial-scope/tasks.md", + "kind": "exact", + "line": 63 + }, + { + "owner": "NORTHSTAR-BOOK-CONTRACTS", + "branch": "work/prc-northstar-book-contracts", + "path": ".agent/specs/engram-absorption/book/prd.md", + "display": ".agent/specs/engram-absorption/book/prd.md", + "kind": "exact", + "line": 64 + }, + { + "owner": "NORTHSTAR-BOOK-CONTRACTS", + "branch": "work/prc-northstar-book-contracts", + "path": ".agent/specs/engram-absorption/book/spec.md", + "display": ".agent/specs/engram-absorption/book/spec.md", + "kind": "exact", + "line": 64 + }, + { + "owner": "NORTHSTAR-BOOK-CONTRACTS", + "branch": "work/prc-northstar-book-contracts", + "path": ".agent/specs/engram-absorption/book/plan.md", + "display": ".agent/specs/engram-absorption/book/plan.md", + "kind": "exact", + "line": 64 + }, + { + "owner": "NORTHSTAR-BOOK-CONTRACTS", + "branch": "work/prc-northstar-book-contracts", + "path": ".agent/specs/engram-absorption/book/checklists/general.md", + "display": ".agent/specs/engram-absorption/book/checklists/general.md", + "kind": "exact", + "line": 64 + }, + { + "owner": "NORTHSTAR-BOOK-CONTRACTS", + "branch": "work/prc-northstar-book-contracts", + "path": ".agent/specs/engram-absorption/book/changes/CR-001-initial-scope/change.md", + "display": ".agent/specs/engram-absorption/book/changes/CR-001-initial-scope/change.md", + "kind": "exact", + "line": 64 + }, + { + "owner": "NORTHSTAR-BOOK-CONTRACTS", + "branch": "work/prc-northstar-book-contracts", + "path": ".agent/specs/engram-absorption/book/changes/CR-001-initial-scope/tasks.md", + "display": ".agent/specs/engram-absorption/book/changes/CR-001-initial-scope/tasks.md", + "kind": "exact", + "line": 64 + }, + { + "owner": "NORTHSTAR-MEM-CONTRACTS", + "branch": "work/prc-northstar-mem-contracts", + "path": ".agent/specs/engram-absorption/mem-residual/spec.md", + "display": ".agent/specs/engram-absorption/mem-residual/spec.md", + "kind": "exact", + "line": 65 + }, + { + "owner": "NORTHSTAR-MEM-CONTRACTS", + "branch": "work/prc-northstar-mem-contracts", + "path": ".agent/specs/engram-absorption/mem-residual/plan.md", + "display": ".agent/specs/engram-absorption/mem-residual/plan.md", + "kind": "exact", + "line": 65 + }, + { + "owner": "NORTHSTAR-MEM-CONTRACTS", + "branch": "work/prc-northstar-mem-contracts", + "path": ".agent/specs/engram-absorption/mem-residual/checklists/general.md", + "display": ".agent/specs/engram-absorption/mem-residual/checklists/general.md", + "kind": "exact", + "line": 65 + }, + { + "owner": "NORTHSTAR-MEM-CONTRACTS", + "branch": "work/prc-northstar-mem-contracts", + "path": ".agent/specs/engram-absorption/mem-residual/changes/CR-001-initial-scope/change.md", + "display": ".agent/specs/engram-absorption/mem-residual/changes/CR-001-initial-scope/change.md", + "kind": "exact", + "line": 65 + }, + { + "owner": "NORTHSTAR-MEM-CONTRACTS", + "branch": "work/prc-northstar-mem-contracts", + "path": ".agent/specs/engram-absorption/mem-residual/changes/CR-001-initial-scope/tasks.md", + "display": ".agent/specs/engram-absorption/mem-residual/changes/CR-001-initial-scope/tasks.md", + "kind": "exact", + "line": 65 + }, + { + "owner": "NORTHSTAR-EFFECTIVENESS-CONTRACTS", + "branch": "work/prc-northstar-effectiveness-contracts", + "path": ".agent/specs/engram-effectiveness/production-ready-residual/spec.md", + "display": ".agent/specs/engram-effectiveness/production-ready-residual/spec.md", + "kind": "exact", + "line": 66 + }, + { + "owner": "NORTHSTAR-EFFECTIVENESS-CONTRACTS", + "branch": "work/prc-northstar-effectiveness-contracts", + "path": ".agent/specs/engram-effectiveness/production-ready-residual/plan.md", + "display": ".agent/specs/engram-effectiveness/production-ready-residual/plan.md", + "kind": "exact", + "line": 66 + }, + { + "owner": "NORTHSTAR-EFFECTIVENESS-CONTRACTS", + "branch": "work/prc-northstar-effectiveness-contracts", + "path": ".agent/specs/engram-effectiveness/production-ready-residual/checklists/general.md", + "display": ".agent/specs/engram-effectiveness/production-ready-residual/checklists/general.md", + "kind": "exact", + "line": 66 + }, + { + "owner": "NORTHSTAR-EFFECTIVENESS-CONTRACTS", + "branch": "work/prc-northstar-effectiveness-contracts", + "path": ".agent/specs/engram-effectiveness/production-ready-residual/changes/CR-001-initial-scope/change.md", + "display": ".agent/specs/engram-effectiveness/production-ready-residual/changes/CR-001-initial-scope/change.md", + "kind": "exact", + "line": 66 + }, + { + "owner": "NORTHSTAR-EFFECTIVENESS-CONTRACTS", + "branch": "work/prc-northstar-effectiveness-contracts", + "path": ".agent/specs/engram-effectiveness/production-ready-residual/changes/CR-001-initial-scope/tasks.md", + "display": ".agent/specs/engram-effectiveness/production-ready-residual/changes/CR-001-initial-scope/tasks.md", + "kind": "exact", + "line": 66 + }, + { + "owner": "NORTHSTAR-SETTINGS-CONTRACTS", + "branch": "work/prc-northstar-settings-contracts", + "path": ".agent/specs/settings-store/production-ready-residual/spec.md", + "display": ".agent/specs/settings-store/production-ready-residual/spec.md", + "kind": "exact", + "line": 67 + }, + { + "owner": "NORTHSTAR-SETTINGS-CONTRACTS", + "branch": "work/prc-northstar-settings-contracts", + "path": ".agent/specs/settings-store/production-ready-residual/plan.md", + "display": ".agent/specs/settings-store/production-ready-residual/plan.md", + "kind": "exact", + "line": 67 + }, + { + "owner": "NORTHSTAR-SETTINGS-CONTRACTS", + "branch": "work/prc-northstar-settings-contracts", + "path": ".agent/specs/settings-store/production-ready-residual/checklists/general.md", + "display": ".agent/specs/settings-store/production-ready-residual/checklists/general.md", + "kind": "exact", + "line": 67 + }, + { + "owner": "NORTHSTAR-SETTINGS-CONTRACTS", + "branch": "work/prc-northstar-settings-contracts", + "path": ".agent/specs/settings-store/production-ready-residual/changes/CR-001-initial-scope/change.md", + "display": ".agent/specs/settings-store/production-ready-residual/changes/CR-001-initial-scope/change.md", + "kind": "exact", + "line": 67 + }, + { + "owner": "NORTHSTAR-SETTINGS-CONTRACTS", + "branch": "work/prc-northstar-settings-contracts", + "path": ".agent/specs/settings-store/production-ready-residual/changes/CR-001-initial-scope/tasks.md", + "display": ".agent/specs/settings-store/production-ready-residual/changes/CR-001-initial-scope/tasks.md", + "kind": "exact", + "line": 67 + } + ], + "repeated_exact_paths": [ + { + "path": ".env.example", + "exact_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "prefix_owners": [], + "effective_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "declared_epoch": true, + "epoch_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ] + }, + { + "path": ".github/workflows/test.yml", + "exact_owners": [ + "RELEASE-GATES", + "IMAGE-REMEDIATION" + ], + "prefix_owners": [], + "effective_owners": [ + "RELEASE-GATES", + "IMAGE-REMEDIATION" + ], + "declared_epoch": true, + "epoch_owners": [ + "RELEASE-GATES", + "IMAGE-REMEDIATION" + ] + }, + { + "path": "apps/operator-console/package-lock.json", + "exact_owners": [ + "IMAGE-REMEDIATION" + ], + "prefix_owners": [ + "OC-INTEGRATION" + ], + "effective_owners": [ + "IMAGE-REMEDIATION", + "OC-INTEGRATION" + ], + "declared_epoch": true, + "epoch_owners": [ + "IMAGE-REMEDIATION", + "OC-INTEGRATION" + ] + }, + { + "path": "apps/operator-console/package.json", + "exact_owners": [ + "IMAGE-REMEDIATION" + ], + "prefix_owners": [ + "OC-INTEGRATION" + ], + "effective_owners": [ + "IMAGE-REMEDIATION", + "OC-INTEGRATION" + ], + "declared_epoch": true, + "epoch_owners": [ + "IMAGE-REMEDIATION", + "OC-INTEGRATION" + ] + }, + { + "path": "CHANGELOG.md", + "exact_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "prefix_owners": [], + "effective_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "declared_epoch": true, + "epoch_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ] + }, + { + "path": "CONTRIBUTING.md", + "exact_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "prefix_owners": [], + "effective_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "declared_epoch": true, + "epoch_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ] + }, + { + "path": "deploy/docker-compose.runtime.yml", + "exact_owners": [ + "IMAGE-REMEDIATION", + "DEPLOYMENT-ROLLBACK" + ], + "prefix_owners": [], + "effective_owners": [ + "IMAGE-REMEDIATION", + "DEPLOYMENT-ROLLBACK" + ], + "declared_epoch": true, + "epoch_owners": [ + "IMAGE-REMEDIATION", + "DEPLOYMENT-ROLLBACK" + ] + }, + { + "path": "docker-compose.yml", + "exact_owners": [ + "IMAGE-REMEDIATION", + "DEPLOYMENT-ROLLBACK" + ], + "prefix_owners": [], + "effective_owners": [ + "IMAGE-REMEDIATION", + "DEPLOYMENT-ROLLBACK" + ], + "declared_epoch": true, + "epoch_owners": [ + "IMAGE-REMEDIATION", + "DEPLOYMENT-ROLLBACK" + ] + }, + { + "path": "Dockerfile", + "exact_owners": [ + "SECURITY-TOOLCHAIN", + "IMAGE-REMEDIATION" + ], + "prefix_owners": [], + "effective_owners": [ + "SECURITY-TOOLCHAIN", + "IMAGE-REMEDIATION" + ], + "declared_epoch": true, + "epoch_owners": [ + "SECURITY-TOOLCHAIN", + "IMAGE-REMEDIATION" + ] + }, + { + "path": "docs/arch/CONFIGURATION.md", + "exact_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "prefix_owners": [], + "effective_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "declared_epoch": true, + "epoch_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ] + }, + { + "path": "docs/arch/QUICKSTART.md", + "exact_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "prefix_owners": [], + "effective_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "declared_epoch": true, + "epoch_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ] + }, + { + "path": "docs/DEPLOYMENT.md", + "exact_owners": [ + "IMAGE-REMEDIATION", + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "prefix_owners": [], + "effective_owners": [ + "IMAGE-REMEDIATION", + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "declared_epoch": true, + "epoch_owners": [ + "IMAGE-REMEDIATION", + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ] + }, + { + "path": "docs/MIGRATION.md", + "exact_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "prefix_owners": [], + "effective_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "declared_epoch": true, + "epoch_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ] + }, + { + "path": "docs/operating-engram.md", + "exact_owners": [ + "REDACTION-LIVE-CONTRACT", + "FINAL-PUBLIC-TRUTH" + ], + "prefix_owners": [], + "effective_owners": [ + "REDACTION-LIVE-CONTRACT", + "FINAL-PUBLIC-TRUTH" + ], + "declared_epoch": true, + "epoch_owners": [ + "REDACTION-LIVE-CONTRACT", + "FINAL-PUBLIC-TRUTH" + ] + }, + { + "path": "docs/PRODUCTION-TESTING-PLAYBOOK.md", + "exact_owners": [ + "IMAGE-REMEDIATION", + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "prefix_owners": [], + "effective_owners": [ + "IMAGE-REMEDIATION", + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "declared_epoch": true, + "epoch_owners": [ + "IMAGE-REMEDIATION", + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ] + }, + { + "path": "docs/public/engram.jpg", + "exact_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "prefix_owners": [], + "effective_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "declared_epoch": true, + "epoch_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ] + }, + { + "path": "internal/bulkops/facade_test.go", + "exact_owners": [ + "DB-BULKOPS", + "INGEST-DOC-SNAPSHOT-DEMOLITION" + ], + "prefix_owners": [], + "effective_owners": [ + "DB-BULKOPS", + "INGEST-DOC-SNAPSHOT-DEMOLITION" + ], + "declared_epoch": true, + "epoch_owners": [ + "DB-BULKOPS", + "INGEST-DOC-SNAPSHOT-DEMOLITION" + ] + }, + { + "path": "internal/bulkops/facade.go", + "exact_owners": [ + "DB-BULKOPS", + "INGEST-DOC-SNAPSHOT-DEMOLITION", + "DURABLE-AUDIT-BOUNDARIES" + ], + "prefix_owners": [], + "effective_owners": [ + "DB-BULKOPS", + "INGEST-DOC-SNAPSHOT-DEMOLITION", + "DURABLE-AUDIT-BOUNDARIES" + ], + "declared_epoch": true, + "epoch_owners": [ + "DB-BULKOPS", + "INGEST-DOC-SNAPSHOT-DEMOLITION", + "DURABLE-AUDIT-BOUNDARIES" + ] + }, + { + "path": "internal/bulkops/rollback_test.go", + "exact_owners": [ + "DB-BULKOPS", + "CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK" + ], + "prefix_owners": [], + "effective_owners": [ + "DB-BULKOPS", + "CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK" + ], + "declared_epoch": true, + "epoch_owners": [ + "DB-BULKOPS", + "CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK" + ] + }, + { + "path": "internal/db/gorm/candidate_store_test.go", + "exact_owners": [ + "DB-BULKOPS", + "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK", + "DB-TEST-POOL-HYGIENE", + "DB-GOVERNANCE", + "CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK" + ], + "prefix_owners": [], + "effective_owners": [ + "DB-BULKOPS", + "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK", + "DB-TEST-POOL-HYGIENE", + "DB-GOVERNANCE", + "CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK" + ], + "declared_epoch": true, + "epoch_owners": [ + "DB-BULKOPS", + "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK", + "DB-TEST-POOL-HYGIENE", + "DB-GOVERNANCE", + "CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK" + ] + }, + { + "path": "internal/db/gorm/candidate_store.go", + "exact_owners": [ + "DB-BULKOPS", + "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK", + "DB-GOVERNANCE", + "CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK" + ], + "prefix_owners": [], + "effective_owners": [ + "DB-BULKOPS", + "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK", + "DB-GOVERNANCE", + "CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK" + ], + "declared_epoch": true, + "epoch_owners": [ + "DB-BULKOPS", + "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK", + "DB-GOVERNANCE", + "CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK" + ] + }, + { + "path": "internal/db/gorm/user_store.go", + "exact_owners": [ + "DB-AUTH", + "AUTH-BOOTSTRAP-SECURITY", + "DURABLE-AUDIT-BOUNDARIES" + ], + "prefix_owners": [], + "effective_owners": [ + "DB-AUTH", + "AUTH-BOOTSTRAP-SECURITY", + "DURABLE-AUDIT-BOUNDARIES" + ], + "declared_epoch": true, + "epoch_owners": [ + "DB-AUTH", + "AUTH-BOOTSTRAP-SECURITY", + "DURABLE-AUDIT-BOUNDARIES" + ] + }, + { + "path": "internal/mcp/tools_bulkops.go", + "exact_owners": [ + "DB-BULKOPS", + "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK" + ], + "prefix_owners": [], + "effective_owners": [ + "DB-BULKOPS", + "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK" + ], + "declared_epoch": true, + "epoch_owners": [ + "DB-BULKOPS", + "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK" + ] + }, + { + "path": "internal/mcp/tools_dryrun_test.go", + "exact_owners": [ + "DB-BULKOPS", + "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK" + ], + "prefix_owners": [], + "effective_owners": [ + "DB-BULKOPS", + "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK" + ], + "declared_epoch": true, + "epoch_owners": [ + "DB-BULKOPS", + "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK" + ] + }, + { + "path": "internal/mcp/tools_memory.go", + "exact_owners": [ + "MCP-STRUCTURED-INPUT-VALIDATION", + "REDACTION-LIVE-CONTRACT" + ], + "prefix_owners": [], + "effective_owners": [ + "MCP-STRUCTURED-INPUT-VALIDATION", + "REDACTION-LIVE-CONTRACT" + ], + "declared_epoch": true, + "epoch_owners": [ + "MCP-STRUCTURED-INPUT-VALIDATION", + "REDACTION-LIVE-CONTRACT" + ] + }, + { + "path": "internal/worker/auth_handlers.go", + "exact_owners": [ + "DB-AUTH", + "AUTH-BOOTSTRAP-SECURITY", + "DURABLE-AUDIT-BOUNDARIES" + ], + "prefix_owners": [], + "effective_owners": [ + "DB-AUTH", + "AUTH-BOOTSTRAP-SECURITY", + "DURABLE-AUDIT-BOUNDARIES" + ], + "declared_epoch": true, + "epoch_owners": [ + "DB-AUTH", + "AUTH-BOOTSTRAP-SECURITY", + "DURABLE-AUDIT-BOUNDARIES" + ] + }, + { + "path": "internal/worker/service.go", + "exact_owners": [ + "AUTH-BOOTSTRAP-SECURITY", + "REDACTION-LIVE-CONTRACT", + "V7-RUNTIME-WIRING" + ], + "prefix_owners": [], + "effective_owners": [ + "AUTH-BOOTSTRAP-SECURITY", + "REDACTION-LIVE-CONTRACT", + "V7-RUNTIME-WIRING" + ], + "declared_epoch": true, + "epoch_owners": [ + "AUTH-BOOTSTRAP-SECURITY", + "REDACTION-LIVE-CONTRACT", + "V7-RUNTIME-WIRING" + ] + }, + { + "path": "Makefile", + "exact_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "prefix_owners": [], + "effective_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "declared_epoch": true, + "epoch_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ] + }, + { + "path": "pkg/models/snapshot.go", + "exact_owners": [ + "DB-BULKOPS", + "INGEST-DOC-SNAPSHOT-DEMOLITION" + ], + "prefix_owners": [], + "effective_owners": [ + "DB-BULKOPS", + "INGEST-DOC-SNAPSHOT-DEMOLITION" + ], + "declared_epoch": true, + "epoch_owners": [ + "DB-BULKOPS", + "INGEST-DOC-SNAPSHOT-DEMOLITION" + ] + }, + { + "path": "plugin/engram/commands/doctor.md", + "exact_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "prefix_owners": [], + "effective_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "declared_epoch": true, + "epoch_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ] + }, + { + "path": "plugin/engram/commands/setup.md", + "exact_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "prefix_owners": [], + "effective_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "declared_epoch": true, + "epoch_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ] + }, + { + "path": "README.md", + "exact_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "prefix_owners": [], + "effective_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "declared_epoch": true, + "epoch_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ] + }, + { + "path": "README.ru.md", + "exact_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "prefix_owners": [], + "effective_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "declared_epoch": true, + "epoch_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ] + }, + { + "path": "README.zh.md", + "exact_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "prefix_owners": [], + "effective_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "declared_epoch": true, + "epoch_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ] + } + ], + "prefix_intersections": [ + { + "left_owner": "IMAGE-REMEDIATION", + "left": "apps/operator-console/package.json", + "right_owner": "OC-INTEGRATION", + "right": "apps/operator-console/**", + "exact_path": "apps/operator-console/package.json", + "declared_epoch": true + }, + { + "left_owner": "IMAGE-REMEDIATION", + "left": "apps/operator-console/package-lock.json", + "right_owner": "OC-INTEGRATION", + "right": "apps/operator-console/**", + "exact_path": "apps/operator-console/package-lock.json", + "declared_epoch": true + } + ], + "epochs": [ + { + "path": "internal/db/gorm/candidate_store.go", + "owners": [ + "DB-BULKOPS", + "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK", + "DB-GOVERNANCE", + "CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK" + ], + "transfer_gate": "rejected predecessor checker/hash recorded; rework uses exact base `68b2ce5835c7c6efdf1c68da9eedcb8d9c3837ef`; each accepted successor requires checker PASS, post-review PASS, integration SHA, and exact rebase before edit", + "line": 6 + }, + { + "path": "internal/db/gorm/candidate_store_test.go", + "owners": [ + "DB-BULKOPS", + "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK", + "DB-TEST-POOL-HYGIENE", + "DB-GOVERNANCE", + "CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK" + ], + "transfer_gate": "behavioral-edge head `bd68c05baf4b7250096dd84f56bebea2aa555970` remains current authority until pool-hygiene product `276337b3e96aa5af6d2e7dd9a0002ff957e5ffc9` plus evidence `68242c48aaad62ec087166eeb9ea32f14d189450` receive fresh checker and post-review; later successors require exact integration and rebase", + "line": 7 + }, + { + "path": "internal/mcp/tools_bulkops.go", + "owners": [ + "DB-BULKOPS", + "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK" + ], + "transfer_gate": "rejected predecessor checker/hash recorded; rework base is exact rejected head; checker and post-review PASS plus integration SHA close the transfer", + "line": 8 + }, + { + "path": "internal/mcp/tools_dryrun_test.go", + "owners": [ + "DB-BULKOPS", + "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK" + ], + "transfer_gate": "rejected predecessor checker/hash recorded; rework base is exact rejected head; checker and post-review PASS plus integration SHA close the transfer", + "line": 8 + }, + { + "path": "internal/bulkops/facade.go", + "owners": [ + "DB-BULKOPS", + "INGEST-DOC-SNAPSHOT-DEMOLITION", + "DURABLE-AUDIT-BOUNDARIES" + ], + "transfer_gate": "behavioral-edge composite checker and post-review PASS; exact integration SHA recorded; demolition rebased before edit; historical ingest guard green before durable-audit fault work", + "line": 9 + }, + { + "path": "internal/bulkops/facade_test.go", + "owners": [ + "DB-BULKOPS", + "INGEST-DOC-SNAPSHOT-DEMOLITION" + ], + "transfer_gate": "accepted behavioral-edge composite integrated; demolition worktree rebased; focused historical-only regressions PASS before integration", + "line": 10 + }, + { + "path": "internal/bulkops/rollback_test.go", + "owners": [ + "DB-BULKOPS", + "CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK" + ], + "transfer_gate": "accepted behavioral-edge composite and DB-GOVERNANCE integrated; candidate-review successor rebased; combined checker and post-review PASS", + "line": 11 + }, + { + "path": "pkg/models/snapshot.go", + "owners": [ + "DB-BULKOPS", + "INGEST-DOC-SNAPSHOT-DEMOLITION" + ], + "transfer_gate": "accepted behavioral-edge composite integrated; demolition successor rebased; persistence-compatibility and non-executable regressions PASS", + "line": 12 + }, + { + "path": "internal/db/gorm/user_store.go", + "owners": [ + "DB-AUTH", + "AUTH-BOOTSTRAP-SECURITY", + "DURABLE-AUDIT-BOUNDARIES" + ], + "transfer_gate": "each predecessor checker and post-review PASS, integration SHA recorded, successor rebased; no simultaneous writer", + "line": 13 + }, + { + "path": "internal/worker/auth_handlers.go", + "owners": [ + "DB-AUTH", + "AUTH-BOOTSTRAP-SECURITY", + "DURABLE-AUDIT-BOUNDARIES" + ], + "transfer_gate": "each predecessor checker and post-review PASS, integration SHA recorded, successor rebased; no simultaneous writer", + "line": 14 + }, + { + "path": "internal/worker/service.go", + "owners": [ + "AUTH-BOOTSTRAP-SECURITY", + "REDACTION-LIVE-CONTRACT", + "V7-RUNTIME-WIRING" + ], + "transfer_gate": "auth bootstrap checker and post-review PASS, commit integrated, redaction worktree rebased and boot-captured rules proved; V7 later rebases the redaction integration and reruns both auth and redaction route regressions", + "line": 15 + }, + { + "path": "internal/mcp/tools_memory.go", + "owners": [ + "MCP-STRUCTURED-INPUT-VALIDATION", + "REDACTION-LIVE-CONTRACT" + ], + "transfer_gate": "structured-input checker/post-review PASS and exact integration SHA; redaction successor rebased so malformed input remains zero-audit/zero-write before matched-mutation audit enforcement", + "line": 16 + }, + { + "path": "docs/operating-engram.md", + "owners": [ + "REDACTION-LIVE-CONTRACT", + "FINAL-PUBLIC-TRUTH" + ], + "transfer_gate": "redaction live contract checker/post-review PASS and exact integration SHA; FINAL rebased and revalidates the operator claims against final published artifacts", + "line": 17 + }, + { + "path": "Dockerfile", + "owners": [ + "SECURITY-TOOLCHAIN", + "IMAGE-REMEDIATION" + ], + "transfer_gate": "toolchain checker and post-review PASS, commit integrated, image worktree rebased, zero-finding rebuild and scan before successor integration", + "line": 18 + }, + { + "path": ".github/workflows/test.yml", + "owners": [ + "RELEASE-GATES", + "IMAGE-REMEDIATION" + ], + "transfer_gate": "release-gates checker and post-review PASS, commit integrated, image worktree rebased before workflow image-identity changes", + "line": 19 + }, + { + "path": "docker-compose.yml", + "owners": [ + "IMAGE-REMEDIATION", + "DEPLOYMENT-ROLLBACK" + ], + "transfer_gate": "image checker and post-review PASS, `final-image-set.json` recorded, deployment worktree rebased, fresh scan after edits", + "line": 20 + }, + { + "path": "deploy/docker-compose.runtime.yml", + "owners": [ + "IMAGE-REMEDIATION", + "DEPLOYMENT-ROLLBACK" + ], + "transfer_gate": "image checker and post-review PASS, `final-image-set.json` recorded, deployment worktree rebased, fresh scan after edits", + "line": 20 + }, + { + "path": "apps/operator-console/package.json", + "owners": [ + "IMAGE-REMEDIATION", + "OC-INTEGRATION" + ], + "transfer_gate": "image checker and post-review PASS, OC worktree rebased, any later dependency edit reruns audit/build/browser/image scan", + "line": 21 + }, + { + "path": "apps/operator-console/package-lock.json", + "owners": [ + "IMAGE-REMEDIATION", + "OC-INTEGRATION" + ], + "transfer_gate": "image checker and post-review PASS, OC worktree rebased, any later dependency edit reruns audit/build/browser/image scan", + "line": 21 + }, + { + "path": "docs/DEPLOYMENT.md", + "owners": [ + "IMAGE-REMEDIATION", + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "transfer_gate": "image proof integrated; CORE rebased for M5; FINAL rebased to exact M6 integration and final-version artifact before edit", + "line": 22 + }, + { + "path": "docs/PRODUCTION-TESTING-PLAYBOOK.md", + "owners": [ + "IMAGE-REMEDIATION", + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "transfer_gate": "image proof integrated; CORE rebased for M5; FINAL rebased to exact M6 integration and final-version artifact before edit", + "line": 22 + }, + { + "path": "README.md", + "owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "transfer_gate": "M5 release published and proved; FINAL worktree rebased to exact M6 integration; final version artifact and exact release-note path recorded before edit", + "line": 23 + }, + { + "path": "README.ru.md", + "owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "transfer_gate": "M5 release published and proved; FINAL worktree rebased to exact M6 integration; final version artifact and exact release-note path recorded before edit", + "line": 23 + }, + { + "path": "README.zh.md", + "owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "transfer_gate": "M5 release published and proved; FINAL worktree rebased to exact M6 integration; final version artifact and exact release-note path recorded before edit", + "line": 23 + }, + { + "path": "CONTRIBUTING.md", + "owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "transfer_gate": "M5 release published and proved; FINAL worktree rebased to exact M6 integration; final version artifact and exact release-note path recorded before edit", + "line": 23 + }, + { + "path": "CHANGELOG.md", + "owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "transfer_gate": "M5 release published and proved; FINAL worktree rebased to exact M6 integration; final version artifact and exact release-note path recorded before edit", + "line": 23 + }, + { + "path": "Makefile", + "owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "transfer_gate": "M5 release published and proved; FINAL worktree rebased to exact M6 integration; final version artifact and exact release-note path recorded before edit", + "line": 23 + }, + { + "path": ".env.example", + "owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "transfer_gate": "M5 release published and proved; FINAL worktree rebased to exact M6 integration; final version artifact and exact release-note path recorded before edit", + "line": 23 + }, + { + "path": "docs/MIGRATION.md", + "owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "transfer_gate": "M5 release published and proved; FINAL worktree rebased to exact M6 integration; final version artifact and exact release-note path recorded before edit", + "line": 23 + }, + { + "path": "docs/arch/CONFIGURATION.md", + "owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "transfer_gate": "M5 release published and proved; FINAL worktree rebased to exact M6 integration; final version artifact and exact release-note path recorded before edit", + "line": 23 + }, + { + "path": "docs/arch/QUICKSTART.md", + "owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "transfer_gate": "M5 release published and proved; FINAL worktree rebased to exact M6 integration; final version artifact and exact release-note path recorded before edit", + "line": 23 + }, + { + "path": "docs/public/engram.jpg", + "owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "transfer_gate": "M5 release published and proved; FINAL worktree rebased to exact M6 integration; final version artifact and exact release-note path recorded before edit", + "line": 23 + }, + { + "path": "plugin/engram/commands/setup.md", + "owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "transfer_gate": "M5 release published and proved; FINAL worktree rebased to exact M6 integration; final version artifact and exact release-note path recorded before edit", + "line": 23 + }, + { + "path": "plugin/engram/commands/doctor.md", + "owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "transfer_gate": "M5 release published and proved; FINAL worktree rebased to exact M6 integration; final version artifact and exact release-note path recorded before edit", + "line": 23 + }, + { + "path": "internal/worker/dream_cycle.go", + "owners": [ + "CRYSTALLIZATION-DREAM-CYCLE-CORRECTNESS" + ], + "transfer_gate": "single-owner tracked epoch with no predecessor; the maker starts only after the named dependencies, then requires checker PASS, post-review PASS, integration SHA, and a root plan/state amendment before any later writer", + "line": 24 + }, + { + "path": "internal/worker/dream_cycle_test.go", + "owners": [ + "CRYSTALLIZATION-DREAM-CYCLE-CORRECTNESS" + ], + "transfer_gate": "single-owner tracked epoch with no predecessor; the maker starts only after the named dependencies, then requires checker PASS, post-review PASS, integration SHA, and a root plan/state amendment before any later writer", + "line": 24 + } + ], + "errors": [] +} diff --git a/.agent/specs/release-gates-r9/evidence/plan-governance/resolvable-register-diff-mismatch-inventory.json b/.agent/specs/release-gates-r9/evidence/plan-governance/resolvable-register-diff-mismatch-inventory.json new file mode 100644 index 00000000..7cac3e3a --- /dev/null +++ b/.agent/specs/release-gates-r9/evidence/plan-governance/resolvable-register-diff-mismatch-inventory.json @@ -0,0 +1,814 @@ +{ + "schema_version": 1, + "kind": "production-ready-resolvable-register-diff-mismatch-inventory", + "revision": 9, + "observed_register": { + "path": ".agent/reports/production-readiness-evidence-register.json", + "sha256": "29865adc048cb3f64ec7d133b3bd901c95115e4ae5b95c98927607de889f77d4", + "role": "mutable discovery input only" + }, + "challenged_authority": { + "rejected_r8_head": "406fe952c143eb8aaf5895427c568a41d4cec225", + "plan_sha256": "fd2b223a9a62848efc39e1c33bf739bada191508bccb7ba9a73140185638e43d", + "scope_map_sha256": "81093184036672008d6b85dfa88a431998ef70b587ab11475aa2b315f03ddf79" + }, + "summary": { + "register_rows": 67, + "resolvable_base_head_rows": 14, + "nonempty_resolvable_rows": 10, + "empty_in_progress_rows": 4, + "exact_high_signal_failures": { + "security_project_identity_r3": "11 undeclared of 14", + "db_embedding_evidence_transport_r5": "10 undeclared of 28", + "db_auth": "1 undeclared of 5", + "db_embedding_stats": "4 undeclared of 8", + "db_reaper": "2 undeclared of 2 plus 1 epoch-owner conflict", + "db_bulkops": "4 current-owner conflicts", + "db_bulkops_behavioral_edge_rework": "2 rejected-predecessor base conflicts", + "demolition_skip_classification": "7 misbound R5 release-gate paths plus a scalar Count internal error" + } + }, + "policy": "Historical/rejected or classification-only diffs remain non-acceptance evidence. Current frozen candidates must be path-authorized exactly; conflicting DB-REAPER is rejected instead of granting simultaneous ownership.", + "subsequent_transitions": [ + { + "slice": "SECURITY-PROJECT-IDENTITY", + "product_head": "38344455754fe503acbd79d2134141f996adff7f", + "checker_only_commit": "0d84047c280a873dd21baae2ecbf83ec422d497f", + "checker_verdict": "REVISE_HIGH_GOROUTINE_ONLY_PERMANENT_TEST", + "successor_branch": "work/prc-security-project-identity-r4", + "successor_base": "38344455754fe503acbd79d2134141f996adff7f", + "successor_surface": [ + "internal/proxy/identity_process_test.go", + "internal/proxy/identity_test.go", + ".agent/specs/security-project-identity/evidence/**", + ".agent/reports/evidence/production-ready/security-project-identity/**" + ], + "forbidden_final_path": "internal/proxy/identity.go" + } + ], + "rows": [ + { + "criterion": "PR-1", + "slice": "MASTER-PLAN", + "observed_status": "R9_MAKER_ACTIVE_ON_REJECTED_R8_BASE", + "observed_branch": "work/prc-release-gates-revision9-maker", + "base": "406fe952c143eb8aaf5895427c568a41d4cec225", + "head": "406fe952c143eb8aaf5895427c568a41d4cec225", + "disposition": "in-progress-empty-diff", + "changed_paths": [], + "baseline_r8_authority_audit": { + "verdict": "NOT_EVALUATED_EMPTY_IN_PROGRESS", + "changed_path_count": 0, + "undeclared_path_count": 0, + "epoch_verdict": "NOT_APPLICABLE", + "violations": [], + "epoch_errors": [], + "source_artifact": "fresh exact git diff audit" + }, + "r9_resolution": "R9 self row; commit A does not yet exist in the observed mutable register" + }, + { + "criterion": "PR-2", + "slice": "RELEASE-GATES", + "observed_status": "R9_MAKER_ACTIVE_BLOCKED_PENDING_SUCCESSOR_COMMITS", + "observed_branch": "work/prc-release-gates-revision9-maker", + "base": "406fe952c143eb8aaf5895427c568a41d4cec225", + "head": "406fe952c143eb8aaf5895427c568a41d4cec225", + "disposition": "in-progress-empty-diff", + "changed_paths": [], + "baseline_r8_authority_audit": { + "verdict": "NOT_EVALUATED_EMPTY_IN_PROGRESS", + "changed_path_count": 0, + "undeclared_path_count": 0, + "epoch_verdict": "NOT_APPLICABLE", + "violations": [], + "epoch_errors": [], + "source_artifact": "fresh exact git diff audit" + }, + "r9_resolution": "R9 self row; commit B does not yet exist in the observed mutable register" + }, + { + "criterion": "PR-2", + "slice": "DEMOLITION-SKIP-CLASSIFICATION", + "observed_status": "ALL_25_CLASSIFIED_OWNER_LANES_ACTIVE", + "observed_branch": "work/prc-release-gates-revision5-maker", + "base": "4812589b9920c187a92a03d210d2e9d5eb53862f", + "head": "d59d1605969b1f567506e96ded524dfd1e4be08a", + "disposition": "checker-classification-not-maker", + "changed_paths": [ + { + "status": "A", + "path": ".agent/e/rg4/r5-maker/SHA256SUMS" + }, + { + "status": "A", + "path": ".agent/e/rg4/r5-maker/fail.json" + }, + { + "status": "A", + "path": ".agent/e/rg4/r5-maker/manifest.json" + }, + { + "status": "A", + "path": ".agent/e/rg4/r5-maker/proof.json" + }, + { + "status": "A", + "path": ".agent/e/rg4/r5-maker/report.md" + }, + { + "status": "M", + "path": ".github/workflows/test.yml" + }, + { + "status": "M", + "path": "scripts/production-gates/run-db-suite.ps1" + } + ], + "baseline_r8_authority_audit": { + "verdict": "FAIL_CLASSIFICATION_ONLY", + "changed_path_count": 7, + "undeclared_path_count": 7, + "epoch_verdict": "NOT_APPLICABLE", + "violations": [ + { + "status": "A", + "path": ".agent/e/rg4/r5-maker/SHA256SUMS", + "reason": "no maker row; classification provenance only" + }, + { + "status": "A", + "path": ".agent/e/rg4/r5-maker/fail.json", + "reason": "no maker row; classification provenance only" + }, + { + "status": "A", + "path": ".agent/e/rg4/r5-maker/manifest.json", + "reason": "no maker row; classification provenance only" + }, + { + "status": "A", + "path": ".agent/e/rg4/r5-maker/proof.json", + "reason": "no maker row; classification provenance only" + }, + { + "status": "A", + "path": ".agent/e/rg4/r5-maker/report.md", + "reason": "no maker row; classification provenance only" + }, + { + "status": "M", + "path": ".github/workflows/test.yml", + "reason": "no maker row; classification provenance only" + }, + { + "status": "M", + "path": "scripts/production-gates/run-db-suite.ps1", + "reason": "no maker row; classification provenance only" + } + ], + "epoch_errors": [], + "source_artifact": "engram-r8-audit-demolition-skip-classification.json", + "r8_internal_error": "The property 'Count' cannot be found on this object. Verify that the property exists." + }, + "r9_resolution": "Reject the misbound register head; all seven paths are R5 release-gate work outside a DEMOLITION maker row. Diff mode must return a clear zero-declarations/non-empty-diff failure, never an internal Count error." + }, + { + "criterion": "PR-4", + "slice": "DB-BULKOPS", + "observed_status": "REVISE_HOLD", + "observed_branch": "work/prc-db-bulkops", + "base": "6ea10496aa127fba7fdb194875044e770d0a1d8c", + "head": "68b2ce5835c7c6efdf1c68da9eedcb8d9c3837ef", + "disposition": "rejected-historical-current-owner-conflict", + "changed_paths": [ + { + "status": "A", + "path": ".agent/reports/2026-07-10-db-bulkops-sibling-rework-maker.md" + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/db-bulkops-sibling-rework/DB-BULKOPS-SIBLING-REWORK.final.json" + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/db-bulkops-sibling-rework/DB-BULKOPS-SIBLING-REWORK.tdd.json" + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/db-bulkops-sibling-rework/H1-candidate-review-after.red.json" + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/db-bulkops-sibling-rework/M1-nil-facade-normalization.red.json" + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/db-bulkops-sibling-rework/M2-all-row-failure-audit.red.json" + }, + { + "status": "M", + "path": "internal/bulkops/facade.go" + }, + { + "status": "M", + "path": "internal/bulkops/facade_test.go" + }, + { + "status": "M", + "path": "internal/bulkops/rollback_test.go" + }, + { + "status": "M", + "path": "internal/db/gorm/candidate_store.go" + }, + { + "status": "M", + "path": "internal/db/gorm/candidate_store_test.go" + }, + { + "status": "M", + "path": "internal/mcp/tools_bulkops.go" + }, + { + "status": "M", + "path": "internal/mcp/tools_dryrun_test.go" + } + ], + "baseline_r8_authority_audit": { + "verdict": "FAIL", + "changed_path_count": 13, + "undeclared_path_count": 0, + "epoch_verdict": "FAIL", + "violations": [], + "epoch_errors": [ + "changed epoch path 'internal/db/gorm/candidate_store_test.go' current owner is 'DB-BULKOPS-BEHAVIORAL-EDGE-REWORK', not 'DB-BULKOPS'", + "changed epoch path 'internal/db/gorm/candidate_store.go' current owner is 'DB-BULKOPS-BEHAVIORAL-EDGE-REWORK', not 'DB-BULKOPS'", + "changed epoch path 'internal/mcp/tools_bulkops.go' current owner is 'DB-BULKOPS-BEHAVIORAL-EDGE-REWORK', not 'DB-BULKOPS'", + "changed epoch path 'internal/mcp/tools_dryrun_test.go' current owner is 'DB-BULKOPS-BEHAVIORAL-EDGE-REWORK', not 'DB-BULKOPS'" + ], + "source_artifact": "engram-r8-audit-db-bulkops.json" + }, + "r9_resolution": "The four repeated product paths now belong to DB-BULKOPS-BEHAVIORAL-EDGE-REWORK" + }, + { + "criterion": "PR-4", + "slice": "DB-AUTH", + "observed_status": "READY_FOR_INTEGRATION", + "observed_branch": "work/prc-db-auth", + "base": "b0c4ab4c07a4c6f512728da52b2e132bacd0289c", + "head": "da97c88be6753703bac112be8431dc373e4d9dda", + "disposition": "current-plan-declaration-drift", + "changed_paths": [ + { + "status": "A", + "path": ".agent/reports/db-auth-rework-maker-2026-07-10.md" + }, + { + "status": "M", + "path": "internal/db/gorm/user_store.go" + }, + { + "status": "M", + "path": "internal/db/gorm/user_store_test.go" + }, + { + "status": "M", + "path": "internal/worker/auth_handlers.go" + }, + { + "status": "M", + "path": "internal/worker/auth_handlers_lifecycle_test.go" + } + ], + "baseline_r8_authority_audit": { + "verdict": "FAIL", + "changed_path_count": 5, + "undeclared_path_count": 1, + "epoch_verdict": "PASS", + "violations": [ + { + "status": "A", + "path": ".agent/reports/db-auth-rework-maker-2026-07-10.md", + "reason": "changed path is outside the named slice and validated evidence/report namespaces" + } + ], + "epoch_errors": [], + "source_artifact": "engram-r8-audit-db-auth.json" + }, + "r9_resolution": "Add the exact maker report path" + }, + { + "criterion": "PR-4", + "slice": "DB-EMBEDDING-STATS", + "observed_status": "PRODUCT_ACCEPTED_EVIDENCE_R3_CHECKER_ACTIVE", + "observed_branch": "work/prc-db-embedding-stats", + "base": "dc891b2d72b1fd63b83e4a630a249241fc389151", + "head": "38d6a4fb7ff5f5ae3b6c0066c0a1b806421137df", + "disposition": "current-plan-declaration-drift", + "changed_paths": [ + { + "status": "A", + "path": ".agent/reports/2026-07-10-db-embedding-stats-maker.md" + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/db-embedding-stats/DB-EMBEDDING-STATS.final.json" + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/db-embedding-stats/SHA256SUMS.txt" + }, + { + "status": "A", + "path": ".agent/specs/db-embedding-stats/evidence/DB-EMBEDDING-STATS.red.json" + }, + { + "status": "A", + "path": ".agent/specs/db-embedding-stats/evidence/DB-EMBEDDING-STATS.tdd.json" + }, + { + "status": "A", + "path": ".agent/specs/db-embedding-stats/evidence/coverage.out" + }, + { + "status": "M", + "path": "internal/embedding/store.go" + }, + { + "status": "M", + "path": "internal/embedding/store_stats_test.go" + } + ], + "baseline_r8_authority_audit": { + "verdict": "FAIL", + "changed_path_count": 8, + "undeclared_path_count": 4, + "epoch_verdict": "PASS", + "violations": [ + { + "status": "A", + "path": ".agent/reports/2026-07-10-db-embedding-stats-maker.md", + "reason": "changed path is outside the named slice and validated evidence/report namespaces" + }, + { + "status": "A", + "path": ".agent/specs/db-embedding-stats/evidence/DB-EMBEDDING-STATS.red.json", + "reason": "changed path is outside the named slice and validated evidence/report namespaces" + }, + { + "status": "A", + "path": ".agent/specs/db-embedding-stats/evidence/DB-EMBEDDING-STATS.tdd.json", + "reason": "changed path is outside the named slice and validated evidence/report namespaces" + }, + { + "status": "A", + "path": ".agent/specs/db-embedding-stats/evidence/coverage.out", + "reason": "changed path is outside the named slice and validated evidence/report namespaces" + } + ], + "epoch_errors": [], + "source_artifact": "engram-r8-audit-db-embedding-stats.json" + }, + "r9_resolution": "Add the exact maker report and both bounded evidence families" + }, + { + "criterion": "PR-0", + "slice": "DB-EMBEDDING-EVIDENCE-TRANSPORT", + "observed_status": "R6_MAKER_ACTIVE_ON_EXACT_R5_BASE", + "observed_branch": "work/prc-db-embedding-evidence-transport-r6", + "base": "a538f6224ef31f612152470a4ecd45e78ff9d0f2", + "head": "a538f6224ef31f612152470a4ecd45e78ff9d0f2", + "disposition": "current-maker-empty-diff-plus-rejected-r5", + "changed_paths": [], + "baseline_r8_authority_audit": { + "verdict": "NOT_EVALUATED_EMPTY_IN_PROGRESS", + "changed_path_count": 0, + "undeclared_path_count": 0, + "epoch_verdict": "NOT_APPLICABLE", + "violations": [], + "epoch_errors": [], + "source_artifact": "fresh exact git diff audit" + }, + "r9_resolution": "R6 has no commit yet; freeze R5 rejected diff and authorize only the literal R6 evidence family", + "rejected_r5_audit": { + "base": "369951b61ee07cb0c405558e0f677cd1c9e90362", + "head": "a538f6224ef31f612152470a4ecd45e78ff9d0f2", + "verdict": "FAIL", + "changed_path_count": 28, + "undeclared_path_count": 10, + "violations": [ + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/R5-SHA256SUMS.txt", + "reason": "changed path is outside the named slice and validated evidence/report namespaces" + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/coverage-capture.v1.json", + "reason": "changed path is outside the named slice and validated evidence/report namespaces" + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/coverage-repeat.v1.json", + "reason": "changed path is outside the named slice and validated evidence/report namespaces" + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/coverage-run-1.tap", + "reason": "changed path is outside the named slice and validated evidence/report namespaces" + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/coverage-run-2.tap", + "reason": "changed path is outside the named slice and validated evidence/report namespaces" + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/maker-report.md", + "reason": "changed path is outside the named slice and validated evidence/report namespaces" + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/maker-summary.v1.json", + "reason": "changed path is outside the named slice and validated evidence/report namespaces" + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/run-coverage-capture-verifier.cmd", + "reason": "changed path is outside the named slice and validated evidence/report namespaces" + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/verification-matrix.v1.json", + "reason": "changed path is outside the named slice and validated evidence/report namespaces" + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/verify-coverage-capture.cjs", + "reason": "changed path is outside the named slice and validated evidence/report namespaces" + } + ], + "source_artifact": "engram-r8-root-r5-diff.json" + } + }, + { + "criterion": "PR-4", + "slice": "DB-REAPER", + "observed_status": "READY_FOR_INTEGRATION_WITH_CONCERNS", + "observed_branch": "work/prc-db-reaper-shutdown-r4", + "base": "0f79e925c4ba537c5358cca64e2546bce914ff96", + "head": "0d5cfa5c67ddbc331d7e812f98679742541b32ca", + "disposition": "rejected-path-authority-conflict", + "changed_paths": [ + { + "status": "M", + "path": "internal/worker/service.go" + }, + { + "status": "M", + "path": "internal/worker/service_reaper_lifecycle_test.go" + } + ], + "baseline_r8_authority_audit": { + "verdict": "FAIL", + "changed_path_count": 2, + "undeclared_path_count": 2, + "epoch_verdict": "FAIL", + "violations": [ + { + "status": "M", + "path": "internal/worker/service.go", + "reason": "changed path is outside the named slice and validated evidence/report namespaces" + }, + { + "status": "M", + "path": "internal/worker/service_reaper_lifecycle_test.go", + "reason": "changed path is outside the named slice and validated evidence/report namespaces" + } + ], + "epoch_errors": [ + "changed epoch path 'internal/worker/service.go' current owner is 'AUTH-BOOTSTRAP-SECURITY', not 'DB-REAPER'" + ], + "source_artifact": "engram-r8-audit-db-reaper.json" + }, + "r9_resolution": "Do not grant service.go concurrently; require a fresh epoch-safe amendment/candidate" + }, + { + "criterion": "PR-4", + "slice": "DB-CRYSTALLIZATION", + "observed_status": "READY_FOR_INTEGRATION_WITH_CONCERNS", + "observed_branch": "work/prc-db-crystallization", + "base": "dc891b2d72b1fd63b83e4a630a249241fc389151", + "head": "2ab6211494e51aeb7b787a99e78cff8bf2d5694a", + "disposition": "current-path-authority-pass", + "changed_paths": [ + { + "status": "M", + "path": "internal/worker/handlers_hooks_crystallization_integration_test.go" + } + ], + "baseline_r8_authority_audit": { + "verdict": "PASS", + "changed_path_count": 1, + "undeclared_path_count": 0, + "epoch_verdict": "PASS", + "violations": [], + "epoch_errors": [], + "source_artifact": "engram-r8-audit-db-crystallization.json" + }, + "r9_resolution": "No correction required" + }, + { + "criterion": "PR-5", + "slice": "SECURITY-TOOLCHAIN", + "observed_status": "READY_FOR_INTEGRATION", + "observed_branch": "work/prc-security-toolchain", + "base": "dc891b2d72b1fd63b83e4a630a249241fc389151", + "head": "b0955dfd61b4ea7364f6d400579247b475a1a680", + "disposition": "current-path-authority-pass", + "changed_paths": [ + { + "status": "M", + "path": "Dockerfile" + }, + { + "status": "M", + "path": "go.mod" + }, + { + "status": "M", + "path": "go.sum" + } + ], + "baseline_r8_authority_audit": { + "verdict": "PASS", + "changed_path_count": 3, + "undeclared_path_count": 0, + "epoch_verdict": "PASS", + "violations": [], + "epoch_errors": [], + "source_artifact": "engram-r8-audit-security-toolchain.json" + }, + "r9_resolution": "No correction required" + }, + { + "criterion": "PR-5", + "slice": "SECURITY-PROJECT-IDENTITY", + "observed_status": "R3_MAKER_COMMIT_READY_CHECKER_ACTIVE", + "observed_branch": "work/prc-security-project-identity-r3", + "base": "9e2ce4e58a5cded69660ca9ac532d2167f315bb2", + "head": "38344455754fe503acbd79d2134141f996adff7f", + "disposition": "current-cross-consumer-declaration-drift", + "changed_paths": [ + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/security-project-identity/SECURITY-PROJECT-IDENTITY-R3-maker-report.md" + }, + { + "status": "A", + "path": ".agent/specs/security-project-identity/evidence/SECURITY-PROJECT-IDENTITY-R3.red.json" + }, + { + "status": "A", + "path": ".agent/specs/security-project-identity/evidence/SECURITY-PROJECT-IDENTITY-R3.tdd.json" + }, + { + "status": "A", + "path": ".agent/specs/security-project-identity/evidence/SECURITY-PROJECT-IDENTITY-R3.verification.json" + }, + { + "status": "M", + "path": ".agent/specs/security-project-identity/evidence/project-identity-v2-vectors.json" + }, + { + "status": "M", + "path": "internal/db/gorm/project_identity_v2_test.go" + }, + { + "status": "M", + "path": "internal/db/gorm/project_store.go" + }, + { + "status": "M", + "path": "internal/grpcserver/project_identity_v2_test.go" + }, + { + "status": "M", + "path": "internal/proxy/identity.go" + }, + { + "status": "M", + "path": "internal/proxy/identity_test.go" + }, + { + "status": "M", + "path": "plugin/engram/hooks/lib.js" + }, + { + "status": "M", + "path": "plugin/engram/hooks/project-identity-v2.test.js" + }, + { + "status": "M", + "path": "plugin/openclaw-engram/src/identity.ts" + }, + { + "status": "M", + "path": "plugin/openclaw-engram/test/project-identity-v2.test.mjs" + } + ], + "baseline_r8_authority_audit": { + "verdict": "FAIL", + "changed_path_count": 14, + "undeclared_path_count": 11, + "epoch_verdict": "PASS", + "violations": [ + { + "status": "A", + "path": ".agent/specs/security-project-identity/evidence/SECURITY-PROJECT-IDENTITY-R3.red.json", + "reason": "changed path is outside the named slice and validated evidence/report namespaces" + }, + { + "status": "A", + "path": ".agent/specs/security-project-identity/evidence/SECURITY-PROJECT-IDENTITY-R3.tdd.json", + "reason": "changed path is outside the named slice and validated evidence/report namespaces" + }, + { + "status": "A", + "path": ".agent/specs/security-project-identity/evidence/SECURITY-PROJECT-IDENTITY-R3.verification.json", + "reason": "changed path is outside the named slice and validated evidence/report namespaces" + }, + { + "status": "M", + "path": ".agent/specs/security-project-identity/evidence/project-identity-v2-vectors.json", + "reason": "changed path is outside the named slice and validated evidence/report namespaces" + }, + { + "status": "M", + "path": "internal/db/gorm/project_identity_v2_test.go", + "reason": "changed path is outside the named slice and validated evidence/report namespaces" + }, + { + "status": "M", + "path": "internal/proxy/identity.go", + "reason": "changed path is outside the named slice and validated evidence/report namespaces" + }, + { + "status": "M", + "path": "internal/proxy/identity_test.go", + "reason": "changed path is outside the named slice and validated evidence/report namespaces" + }, + { + "status": "M", + "path": "plugin/engram/hooks/lib.js", + "reason": "changed path is outside the named slice and validated evidence/report namespaces" + }, + { + "status": "M", + "path": "plugin/engram/hooks/project-identity-v2.test.js", + "reason": "changed path is outside the named slice and validated evidence/report namespaces" + }, + { + "status": "M", + "path": "plugin/openclaw-engram/src/identity.ts", + "reason": "changed path is outside the named slice and validated evidence/report namespaces" + }, + { + "status": "M", + "path": "plugin/openclaw-engram/test/project-identity-v2.test.mjs", + "reason": "changed path is outside the named slice and validated evidence/report namespaces" + } + ], + "epoch_errors": [], + "source_artifact": "engram-r8-root-security-r3-diff-canonical.json" + }, + "r9_resolution": "Replace the wrong test declaration and own the exact 14-path R3 diff" + }, + { + "criterion": "PR-0", + "slice": "PLAN-GOVERNANCE", + "observed_status": "R9_MAKER_ACTIVE_FULL_DIFF_AUTHORITY_AUDIT", + "observed_branch": "work/prc-release-gates-revision9-maker", + "base": "406fe952c143eb8aaf5895427c568a41d4cec225", + "head": "406fe952c143eb8aaf5895427c568a41d4cec225", + "disposition": "in-progress-empty-diff", + "changed_paths": [], + "baseline_r8_authority_audit": { + "verdict": "NOT_EVALUATED_EMPTY_IN_PROGRESS", + "changed_path_count": 0, + "undeclared_path_count": 0, + "epoch_verdict": "NOT_APPLICABLE", + "violations": [], + "epoch_errors": [], + "source_artifact": "fresh exact git diff audit" + }, + "r9_resolution": "R9 self row; commit A does not yet exist in the observed mutable register" + }, + { + "criterion": "PR-4", + "slice": "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK", + "observed_status": "READY_FOR_INTEGRATION_WITH_CONCERNS", + "observed_branch": "work/prc-db-bulkops", + "base": "cd098397764e13388aef3b4da9448172c7092fdb", + "head": "bd68c05baf4b7250096dd84f56bebea2aa555970", + "disposition": "current-register-partial-base", + "changed_paths": [ + { + "status": "M", + "path": "internal/db/gorm/candidate_store.go" + }, + { + "status": "M", + "path": "internal/db/gorm/candidate_store_test.go" + } + ], + "baseline_r8_authority_audit": { + "verdict": "FAIL", + "changed_path_count": 2, + "undeclared_path_count": 0, + "epoch_verdict": "FAIL", + "violations": [], + "epoch_errors": [ + "rework slice 'DB-BULKOPS-BEHAVIORAL-EDGE-REWORK' base 'cd098397764e13388aef3b4da9448172c7092fdb' must equal rejected predecessor '68b2ce5835c7c6efdf1c68da9eedcb8d9c3837ef' for 'internal/db/gorm/candidate_store_test.go'", + "rework slice 'DB-BULKOPS-BEHAVIORAL-EDGE-REWORK' base 'cd098397764e13388aef3b4da9448172c7092fdb' must equal rejected predecessor '68b2ce5835c7c6efdf1c68da9eedcb8d9c3837ef' for 'internal/db/gorm/candidate_store.go'" + ], + "source_artifact": "engram-r8-audit-db-bulkops-behavioral-edge-rework.json" + }, + "r9_resolution": "Freeze the full candidate from rejected predecessor 68b2ce58, not partial cd098397..bd68c05b" + }, + { + "criterion": "PR-2", + "slice": "DB-TEST-POOL-HYGIENE", + "observed_status": "READY_FOR_CHECK", + "observed_branch": "work/prc-db-test-pool-hygiene-evidence-r2", + "base": "276337b3e96aa5af6d2e7dd9a0002ff957e5ffc9", + "head": "68242c48aaad62ec087166eeb9ea32f14d189450", + "disposition": "current-path-authority-pass", + "changed_paths": [ + { + "status": "A", + "path": ".agent/reports/2026-07-10-db-test-pool-hygiene-evidence-revision-maker.md" + }, + { + "status": "M", + "path": ".agent/reports/2026-07-10-db-test-pool-hygiene-maker.md" + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/db-test-pool-hygiene/14-evidence-r2-focused.log" + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/db-test-pool-hygiene/15-evidence-r2-static.txt" + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/db-test-pool-hygiene/DB-TEST-POOL-HYGIENE.evidence-r2.json" + }, + { + "status": "M", + "path": ".agent/reports/evidence/production-ready/db-test-pool-hygiene/DB-TEST-POOL-HYGIENE.final.json" + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/db-test-pool-hygiene/INVENTORY.json" + }, + { + "status": "M", + "path": ".agent/reports/evidence/production-ready/db-test-pool-hygiene/MANIFEST.json" + }, + { + "status": "M", + "path": ".agent/reports/evidence/production-ready/db-test-pool-hygiene/SHA256SUMS.txt" + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/db-test-pool-hygiene/Test-DBPoolHygieneEvidenceAdversarial.ps1" + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/db-test-pool-hygiene/Verify-DBPoolHygieneEvidence.ps1" + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/db-test-pool-hygiene/adversarial-proof.json" + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/db-test-pool-hygiene/verifier-proof.json" + } + ], + "baseline_r8_authority_audit": { + "verdict": "PASS", + "changed_path_count": 13, + "undeclared_path_count": 0, + "epoch_verdict": "PASS", + "violations": [], + "epoch_errors": [], + "source_artifact": "engram-r8-audit-db-test-pool-hygiene.json" + }, + "r9_resolution": "No correction required" + } + ] +} From ffdbaefb5fb9685899663a40c6b6fef4a08448ba Mon Sep 17 00:00:00 2001 From: Kirill Turanskiy Date: Sat, 11 Jul 2026 00:59:08 +0300 Subject: [PATCH 043/111] test(security): add project identity process rail Close SPI-R3-CHK-001 with a permanent ready/go OS-child acceptance test for atomic project-anchor publication. Preserve the R3 product blob and existing goroutine coverage while recording Windows/Linux race, preservation, residue, POSIX mode, and Prove-It evidence. --- ...CURITY-PROJECT-IDENTITY-R4-maker-report.md | 100 ++++ ...SECURITY-PROJECT-IDENTITY-R4.prove-it.json | 30 ++ .../SECURITY-PROJECT-IDENTITY-R4.red.json | 22 + ...RITY-PROJECT-IDENTITY-R4.verification.json | 124 +++++ .../behavior-signal.md | 74 +++ internal/proxy/identity_process_test.go | 477 ++++++++++++++++++ 6 files changed, 827 insertions(+) create mode 100644 .agent/reports/evidence/production-ready/security-project-identity/SECURITY-PROJECT-IDENTITY-R4-maker-report.md create mode 100644 .agent/specs/security-project-identity/evidence/SECURITY-PROJECT-IDENTITY-R4.prove-it.json create mode 100644 .agent/specs/security-project-identity/evidence/SECURITY-PROJECT-IDENTITY-R4.red.json create mode 100644 .agent/specs/security-project-identity/evidence/SECURITY-PROJECT-IDENTITY-R4.verification.json create mode 100644 .agent/testing/SECURITY-PROJECT-IDENTITY-R4/behavior-signal.md create mode 100644 internal/proxy/identity_process_test.go diff --git a/.agent/reports/evidence/production-ready/security-project-identity/SECURITY-PROJECT-IDENTITY-R4-maker-report.md b/.agent/reports/evidence/production-ready/security-project-identity/SECURITY-PROJECT-IDENTITY-R4-maker-report.md new file mode 100644 index 00000000..f557602f --- /dev/null +++ b/.agent/reports/evidence/production-ready/security-project-identity/SECURITY-PROJECT-IDENTITY-R4-maker-report.md @@ -0,0 +1,100 @@ +# SECURITY-PROJECT-IDENTITY R4 maker report + +Verdict: **READY FOR FRESH CHECKER**. + +R4 closes `SPI-R3-CHK-001` with a permanent Go OS-child acceptance rail. The +revision is test/evidence-only: `internal/proxy/identity.go` remains the exact +target blob `9ecbad17612e7dd4e2ce8c8fed10ee4e041e11c1`, its base-to-R4 diff is empty, +and the useful R3 goroutine tests remain intact. + +## Immutable target and scope + +- Required base: `38344455754fe503acbd79d2134141f996adff7f`. +- Prior checker commit `0d84047c...` is evidence only and is not an ancestor of + the R4 maker branch. +- New permanent test: `internal/proxy/identity_process_test.go`. +- Product, auth, database, protobuf, dependency, release, and v5-demolished + paths are unchanged. +- Phase 0 classification is `CODE_PATH_COVERED`: this is an internal + process/filesystem contract, not a new user-facing feature. + +## Permanent process contract + +Each invocation starts 84 real child processes across seven waves: + +- three fresh first-use waves x 12 children; +- two existing-valid waves x 12 children; +- one existing-malformed wave x 12 children; +- one open delayed-partial-writer wave x 12 children. + +Every child is a distinct `os.Executable()` test process. It emits `READY` and +blocks on stdin. Only after all 12 READY records arrive does the parent close a +single in-process release gate; 12 goroutines then write `G` to the child pipes. +There is no sleep-based synchronization in the committed test. A parent monitor +continuously classifies every visible final file as complete or partial. + +The rail proves: + +1. every fresh wave converges on one strict 128-bit anchor; +2. the parent sees at least one complete final file and zero EOF/zero/partial or + unreadable final-file observations; +3. existing valid bytes remain byte-identical across two process waves; +4. existing malformed bytes fail closed and remain byte-identical; +5. an intentionally partial file remains byte-identical while its writer + descriptor is still open; +6. neither `.engram-project-v2.json.tmp-*` nor `.engram-project.tmp-*` residue + remains; +7. every fresh Linux anchor is mode `0600`; +8. repeat and race executions are deterministic. + +## Anti-stub Prove-It + +A temporary, uncommitted mutation recreated the R2 publication window by making +the final name visible after only half the bytes were written. The focused test +failed with **239 partial/unreadable observations** while the preservation +subtests remained green. The inverse patch was applied immediately; the product +blob returned to `9ecbad17...`, product diff became empty, and GREEN passed. + +## Final verification + +| Gate | Result | +| --- | --- | +| Windows Go 1.25.11 race, exact child-process test, `-count=2` | PASS; 168 children, complete observations 21,377 + 19,801, partial 0 | +| Linux Go 1.25.11, exact child-process test, `-count=2` | PASS; 168 children, complete observations 2,092 + 2,367, partial 0, mode 0600 | +| `go test ./internal/proxy -count=1` | PASS | +| `go test ./... -count=1` with integration DSNs unset | PASS | +| `go vet ./...` | PASS | +| selector compatibility and invalid-selector focused tests | PASS (`:`, `\\`, `/`, `.`, `-`, `_` retained; `..` rejected) | +| `git diff --check` | PASS | +| Prove-It mutation | PASS: expected test failure, 239 partial observations, mutation removed | + +Linux used local immutable image +`golang@sha256:b96f24a8d7d010ea0acb9c3ba99064740f02b6b984612b28bd3c9c5ab9453e38`. +The first `bash -lc` invocation reset PATH and could not find Go; the corrected +command used `/usr/local/go/bin/go` in the same image and passed. This was an +invocation discrepancy with no product impact. + +Detailed machine-readable evidence: + +- `.agent/specs/security-project-identity/evidence/SECURITY-PROJECT-IDENTITY-R4.red.json` +- `.agent/specs/security-project-identity/evidence/SECURITY-PROJECT-IDENTITY-R4.prove-it.json` +- `.agent/specs/security-project-identity/evidence/SECURITY-PROJECT-IDENTITY-R4.verification.json` +- `.agent/testing/SECURITY-PROJECT-IDENTITY-R4/behavior-signal.md` + +## Artifact hashes + +| Artifact | SHA-256 | Git blob | +| --- | --- | --- | +| `internal/proxy/identity_process_test.go` | `cb85e74ca6b4394b6fd0009418ef765b88dbf8eb1e0376f43ae848e7b18714db` | `6e04140eaf4ce6eff91c3a40010e99ff56460773` | +| `.agent/testing/SECURITY-PROJECT-IDENTITY-R4/behavior-signal.md` | `9f66b18bf2992dd27381f2438711569460b2d564101e71896ef99d8650e482c7` | `c4d80978955130bdee737df06fa8609f340cd2d9` | +| `SECURITY-PROJECT-IDENTITY-R4.red.json` | `18d0cde079ab3613d58a77e77b8012ba895c94d3e6b6bee87d2d144047d4d8a9` | `becfba41abcb5bdc1137667f641cad61f154c8b1` | +| `SECURITY-PROJECT-IDENTITY-R4.prove-it.json` | `53dd6b5b79ef1899b0ae3fecc9c180739b808e8fdaf14c0fca2b8c8d98097089` | `408ce7f5c14fb5b127e9b2ff24c5170a97f55849` | +| `SECURITY-PROJECT-IDENTITY-R4.verification.json` | `b45038d290ed8d5c8f5e2b6f1c49d9ca7ff68fa24181a3e6b1608bec08342628` | `453970a0c56002bb94160b8eb898db702b56ec91` | + +The exact staged scope contains six paths. Its LF-sorted, LF-terminated path +list has SHA-256 +`bd1ce5c203c1381759c4e8aa69c462b8a50c096699d56d442f9d3e5c2c99bb77`. +`internal/proxy/identity.go` is absent from that list. + +No merge, push, tag, release, database mutation, browser action, or worktree +cleanup was performed. diff --git a/.agent/specs/security-project-identity/evidence/SECURITY-PROJECT-IDENTITY-R4.prove-it.json b/.agent/specs/security-project-identity/evidence/SECURITY-PROJECT-IDENTITY-R4.prove-it.json new file mode 100644 index 00000000..408ce7f5 --- /dev/null +++ b/.agent/specs/security-project-identity/evidence/SECURITY-PROJECT-IDENTITY-R4.prove-it.json @@ -0,0 +1,30 @@ +{ + "schema_version": 1, + "task_id": "SECURITY-PROJECT-IDENTITY-R4", + "phase": "anti_stub_prove_it", + "immutable_target": "38344455754fe503acbd79d2134141f996adff7f", + "mutation": { + "committed": false, + "path": "internal/proxy/identity.go", + "description": "Temporarily replaced complete-temp-plus-hard-link publication with create-final/write-half/sync/delay/write-rest, recreating the R2 publish-before-complete window.", + "target_git_blob_before": "9ecbad17612e7dd4e2ce8c8fed10ee4e041e11c1", + "command": "go test ./internal/proxy -run '^TestResolveProjectIdentityV2_ChildProcessPublicationContract$' -count=1 -v", + "exit_code": 1, + "expected_result": "FAIL", + "observed_failure": "concurrent_first_use_publishes_only_complete_bytes", + "partial_or_unreadable_observations": 239, + "unaffected_preservation_subtests": [ + "existing_valid_anchor_stays_byte_identical PASS", + "existing_malformed_anchor_fails_closed_and_stays_byte_identical PASS", + "open_delayed_partial_writer_fails_closed_and_is_not_replaced PASS" + ] + }, + "restoration": { + "method": "exact inverse apply_patch before any commit", + "target_git_blob_after": "9ecbad17612e7dd4e2ce8c8fed10ee4e041e11c1", + "product_diff_after": "empty", + "green_command": "go test ./internal/proxy -run '^TestResolveProjectIdentityV2_ChildProcessPublicationContract$' -count=2 -v", + "green_result": "PASS (2/2 complete contract runs, zero partial observations)" + }, + "final_test_contains_sleep_synchronization": false +} diff --git a/.agent/specs/security-project-identity/evidence/SECURITY-PROJECT-IDENTITY-R4.red.json b/.agent/specs/security-project-identity/evidence/SECURITY-PROJECT-IDENTITY-R4.red.json new file mode 100644 index 00000000..becfba41 --- /dev/null +++ b/.agent/specs/security-project-identity/evidence/SECURITY-PROJECT-IDENTITY-R4.red.json @@ -0,0 +1,22 @@ +{ + "schema_version": 1, + "task_id": "SECURITY-PROJECT-IDENTITY-R4", + "classification": "structural_acceptance_gap", + "observed_at": "2026-07-11T00:44:39.6108161+03:00", + "immutable_target": "38344455754fe503acbd79d2134141f996adff7f", + "protected_invariant": "The permanent Go suite must exercise Project Identity V2 first-use publication through independent OS processes synchronized by an explicit ready/go barrier.", + "baseline": { + "existing_goroutine_test_command": "go test ./internal/proxy -run '^TestResolveProjectIdentityV2_(ConcurrentFirstUseConverges|PreExistingAnchorsAreNeverReplaced)$' -count=1 -v", + "existing_goroutine_test_result": "PASS", + "structural_probe_command": "rg -n -g '*_test.go' 'os\\.Executable|StdinPipe|SECURITY_PROJECT_IDENTITY_CHILD|ready.go|child.process' internal/proxy", + "structural_probe_exit_code": 1, + "structural_probe_result": "FAIL: no permanent child-process helper or explicit ready/go barrier exists in the immutable target" + }, + "product_edit_required": false, + "target_product_blob": { + "path": "internal/proxy/identity.go", + "git_blob": "9ecbad17612e7dd4e2ce8c8fed10ee4e041e11c1", + "initial_worktree_sha256": "a56fc40bf3cddfb18848df415354b6e781ff3e0d422bf9d525888d4a9c9ee00f", + "canonical_parity_key": "git_blob" + } +} diff --git a/.agent/specs/security-project-identity/evidence/SECURITY-PROJECT-IDENTITY-R4.verification.json b/.agent/specs/security-project-identity/evidence/SECURITY-PROJECT-IDENTITY-R4.verification.json new file mode 100644 index 00000000..453970a0 --- /dev/null +++ b/.agent/specs/security-project-identity/evidence/SECURITY-PROJECT-IDENTITY-R4.verification.json @@ -0,0 +1,124 @@ +{ + "schema_version": 1, + "task_id": "SECURITY-PROJECT-IDENTITY-R4", + "role": "maker", + "generated_at": "2026-07-11T00:53:48.3829071+03:00", + "verdict": "PASS", + "immutable_base": "38344455754fe503acbd79d2134141f996adff7f", + "blocking_finding_closed": "SPI-R3-CHK-001", + "scope": { + "product_source_changes": 0, + "new_permanent_test_paths": [ + "internal/proxy/identity_process_test.go" + ], + "existing_goroutine_test_preserved": true, + "auth_changes": 0, + "database_changes": 0, + "protobuf_changes": 0, + "dependency_changes": 0, + "v5_demolished_path_changes": 0 + }, + "product_parity": { + "path": "internal/proxy/identity.go", + "base_git_blob": "9ecbad17612e7dd4e2ce8c8fed10ee4e041e11c1", + "final_git_blob": "9ecbad17612e7dd4e2ce8c8fed10ee4e041e11c1", + "base_to_final_diff": "empty" + }, + "per_invocation_process_contract": { + "children_per_wave": 12, + "fresh_waves": 3, + "existing_valid_waves": 2, + "existing_malformed_waves": 1, + "open_delayed_partial_writer_waves": 1, + "total_child_processes": 84, + "barrier": "Every child emits READY and blocks on stdin; after all READY lines are observed, parent closes one in-process release gate and concurrent goroutines write G to every child pipe.", + "sleep_based_synchronization": false, + "distinct_pid_assertion": true, + "parent_complete_file_monitor": true, + "temp_prefixes_checked": [ + ".engram-project-v2.json.tmp-", + ".engram-project.tmp-" + ] + }, + "final_windows_race_repeat": { + "command": "go test -race ./internal/proxy -run '^TestResolveProjectIdentityV2_ChildProcessPublicationContract$' -count=2 -v", + "go_version": "go1.25.11 windows/amd64", + "result": "PASS", + "contract_invocations": 2, + "child_processes": 168, + "fresh_complete_observations": [ + 21377, + 19801 + ], + "partial_or_unreadable_observations": 0, + "valid_anchor_byte_preservation": true, + "malformed_anchor_byte_preservation": true, + "open_writer_byte_preservation": true, + "temp_residue": 0 + }, + "final_linux_repeat": { + "image": "golang:1.25-bookworm", + "image_digest": "sha256:b96f24a8d7d010ea0acb9c3ba99064740f02b6b984612b28bd3c9c5ab9453e38", + "command": "docker run --rm -v ${PWD}:/src -w /src golang:1.25-bookworm sh -c /usr/local/go/bin/go test ./internal/proxy -run '^TestResolveProjectIdentityV2_ChildProcessPublicationContract$' -count=2 -v", + "go_version": "go1.25.11 linux/amd64", + "result": "PASS", + "contract_invocations": 2, + "child_processes": 168, + "fresh_complete_observations": [ + 2092, + 2367 + ], + "partial_or_unreadable_observations": 0, + "fresh_anchor_mode_each_round": "0600", + "valid_anchor_byte_preservation": true, + "malformed_anchor_byte_preservation": true, + "open_writer_byte_preservation": true, + "temp_residue": 0 + }, + "prove_it": { + "result": "PASS", + "mutation_test_exit_code": 1, + "partial_or_unreadable_observations": 239, + "mutation_committed": false, + "product_blob_restored": true + }, + "gates": [ + { + "command": "go test ./internal/proxy -count=1", + "result": "PASS" + }, + { + "command": "go test ./... -count=1 with DATABASE_DSN, TEST_DATABASE_DSN, ENGRAM_TEST_DATABASE_DSN unset", + "result": "PASS" + }, + { + "command": "go vet ./...", + "result": "PASS" + }, + { + "command": "git diff --check", + "result": "PASS" + }, + { + "command": "go test ./internal/db/gorm -run '^TestRegisterAndResolve_(StrictOuterSelectorRejectsBeforeDatabaseAccess|StrictOuterSelectorPreservesCompatibility)$' -count=1 -v", + "result": "PASS; colon, backslash, slash, dot, dash, and underscore compatibility retained" + }, + { + "command": "go test ./internal/grpcserver -run '^TestCallTool_DefaultResolverRejectsMalformedSelectorsBeforeHandler$' -count=1 -v", + "result": "PASS; traversal and internal whitespace fail before handler" + } + ], + "phase_zero": { + "classification": "CODE_PATH_COVERED", + "user_facing_tests": 0, + "critical_suite_gap_introduced": false + }, + "discrepancies": [ + { + "kind": "container_invocation", + "observed": "bash -lc reset PATH in the local image and returned go: command not found", + "resolution": "reran the same immutable image with /usr/local/go/bin/go; all Linux gates passed", + "product_impact": "none" + } + ] +} diff --git a/.agent/testing/SECURITY-PROJECT-IDENTITY-R4/behavior-signal.md b/.agent/testing/SECURITY-PROJECT-IDENTITY-R4/behavior-signal.md new file mode 100644 index 00000000..c4d80978 --- /dev/null +++ b/.agent/testing/SECURITY-PROJECT-IDENTITY-R4/behavior-signal.md @@ -0,0 +1,74 @@ +# Behavioral Signal Declarations — SECURITY-PROJECT-IDENTITY-R4 + +Phase: 0 (Behavior-Confirming Tester) + +Task: SECURITY-PROJECT-IDENTITY-R4 + +Anchor: explicit R4 maker contract plus immutable R2/R3 checker findings; no feature-local `spec.md` or `user_job_statement.md` exists +Generated: 2026-07-11T00:44:39.6108161+03:00 + +## Scope classification + +The change adds permanent process-boundary regression coverage for an already +implemented filesystem publication algorithm. It does not add or modify a +user-facing feature. The orchestrator's R4 contract explicitly limits this +revision to test and evidence files unless a new product defect is proven. + +Phase 0 classification: `CODE_PATH_COVERED`. + +## Test declarations + +### TEST-001 + +Test ID: `internal/proxy/identity_process_test.go:TestResolveProjectIdentityV2_ChildProcessPublicationContract` + +Tag: `CODE-CONTRACT-ONLY` + +Justification: proves that independent Go processes cannot observe or create a partial project-identity anchor and cannot repair an existing invalid anchor. + +Behavioral gap: none claimed; customer-mode identity behavior remains owned by the existing production-readiness and critical-suite flows. + +Rename required: no + +AP violations: none + +### TEST-002 + +Test ID: `internal/proxy/identity_process_test.go:TestResolveProjectIdentityV2_ProcessHelper` + +Tag: `CODE-CONTRACT-ONLY` + +Justification: provides the isolated child-process endpoint used only by TEST-001; it makes no independent behavioral claim. + +Behavioral gap: none; this helper is load-bearing test infrastructure for TEST-001. + +Rename required: no + +AP violations: none + +## Critical-suite gap analysis + +This task changes no user-facing feature, so it creates no new critical-suite +obligation. The existing `tests/critical/` inventory contains only the auth +two-tier user flow and does not duplicate this internal process-publication +contract. + +## Phase 0 exit status + +Tests in scope: 2 + +User-facing tests: 0 + +Non-user-facing tests: 2 + +Missing declarations: 0 + +Critical-suite gaps introduced: 0 + +Rename flags: 0 + +AP violations detected: none + +Behavioral verification tally: `CODE_PATH_COVERED` (1 internal contract) + +Exit: PASS diff --git a/internal/proxy/identity_process_test.go b/internal/proxy/identity_process_test.go new file mode 100644 index 00000000..6e04140e --- /dev/null +++ b/internal/proxy/identity_process_test.go @@ -0,0 +1,477 @@ +package proxy_test + +import ( + "bufio" + "bytes" + "context" + "encoding/json" + "errors" + "fmt" + "io" + "os" + "os/exec" + "path/filepath" + "regexp" + "runtime" + "sort" + "strings" + "sync" + "sync/atomic" + "testing" + "time" + + "github.com/thebtf/engram/internal/proxy" +) + +const ( + projectIdentityProcessHelperEnv = "ENGRAM_TEST_PROJECT_IDENTITY_PROCESS_HELPER" + projectIdentityProcessWorkspaceEnv = "ENGRAM_TEST_PROJECT_IDENTITY_WORKSPACE" + projectIdentityProcessHelperTest = "^TestResolveProjectIdentityV2_ProcessHelper$" + projectIdentityProcessAnchorFile = ".engram-project-v2.json" + projectIdentityProcessChildren = 12 + projectIdentityProcessFreshRoundCount = 3 +) + +var strictProjectIdentityProcessAnchor = regexp.MustCompile(`^[0-9a-f]{32}$`) + +type projectIdentityProcessResult struct { + OK bool `json:"ok"` + Anchor string `json:"anchor,omitempty"` + Error string `json:"error,omitempty"` +} + +type projectIdentityProcessAnchor struct { + Version uint32 `json:"version"` + Anchor string `json:"anchor"` + Shared bool `json:"shared"` +} + +type projectIdentityPublicationObservations struct { + complete atomic.Int64 + partial atomic.Int64 +} + +// TestResolveProjectIdentityV2_ProcessHelper is intentionally inert in an +// ordinary test run. The parent acceptance test re-executes this test binary +// with the helper environment set, waits for READY on stdout, and releases all +// children through stdin only after every child is blocked at the barrier. +func TestResolveProjectIdentityV2_ProcessHelper(t *testing.T) { + if os.Getenv(projectIdentityProcessHelperEnv) != "1" { + return + } + + workspace := os.Getenv(projectIdentityProcessWorkspaceEnv) + if workspace == "" { + t.Fatal("child workspace is empty") + } + if _, err := fmt.Fprintln(os.Stdout, "READY"); err != nil { + t.Fatalf("announce child readiness: %v", err) + } + + var release [1]byte + if _, err := io.ReadFull(os.Stdin, release[:]); err != nil { + t.Fatalf("await parent release: %v", err) + } + if release[0] != 'G' { + t.Fatalf("unexpected release token %q", release[0]) + } + + identity, err := proxy.ResolveProjectIdentityV2(workspace) + result := projectIdentityProcessResult{OK: err == nil} + if err != nil { + result.Error = err.Error() + } else { + result.Anchor = identity.NonGitAnchor + } + if err := json.NewEncoder(os.Stdout).Encode(result); err != nil { + t.Fatalf("encode child result: %v", err) + } +} + +// TestResolveProjectIdentityV2_ChildProcessPublicationContract is a permanent +// process-boundary acceptance rail. Goroutines cannot stand in for independent +// client processes because the original R2 defect was an inter-process +// publication window. +func TestResolveProjectIdentityV2_ChildProcessPublicationContract(t *testing.T) { + t.Run("concurrent first use publishes only complete bytes", func(t *testing.T) { + for round := 0; round < projectIdentityProcessFreshRoundCount; round++ { + workspace := t.TempDir() + results, observations := runProjectIdentityProcessWave(t, workspace, projectIdentityProcessChildren, true) + winner := requireProjectIdentityProcessConvergence(t, results) + anchorBytes := requireCompleteProjectIdentityProcessAnchor(t, workspace, winner) + if observations.complete.Load() == 0 { + t.Fatal("parent monitor observed no complete final anchor") + } + if observations.partial.Load() != 0 { + t.Fatalf("parent monitor observed %d zero-length, partial, or unreadable final anchors", observations.partial.Load()) + } + assertNoProjectIdentityProcessResidue(t, workspace) + t.Logf("fresh round=%d children=%d complete_observations=%d partial_observations=%d anchor_bytes=%d", + round+1, len(results), observations.complete.Load(), observations.partial.Load(), len(anchorBytes)) + } + }) + + t.Run("existing valid anchor stays byte identical", func(t *testing.T) { + workspace := t.TempDir() + anchorPath := filepath.Join(workspace, projectIdentityProcessAnchorFile) + original := []byte("{\n \"version\": 2,\n \"anchor\": \"00112233445566778899aabbccddeeff\",\n \"shared\": false\n}\n") + if err := os.WriteFile(anchorPath, original, 0o600); err != nil { + t.Fatal(err) + } + + for wave := 0; wave < 2; wave++ { + results, _ := runProjectIdentityProcessWave(t, workspace, projectIdentityProcessChildren, false) + winner := requireProjectIdentityProcessConvergence(t, results) + if winner != "00112233445566778899aabbccddeeff" { + t.Fatalf("wave %d resolved anchor %q", wave+1, winner) + } + got, err := os.ReadFile(anchorPath) + if err != nil { + t.Fatal(err) + } + if !bytes.Equal(got, original) { + t.Fatalf("wave %d changed existing valid bytes:\n%s", wave+1, got) + } + assertNoProjectIdentityProcessResidue(t, workspace) + } + }) + + t.Run("existing malformed anchor fails closed and stays byte identical", func(t *testing.T) { + workspace := t.TempDir() + anchorPath := filepath.Join(workspace, projectIdentityProcessAnchorFile) + original := []byte(`{"version":2`) + if err := os.WriteFile(anchorPath, original, 0o600); err != nil { + t.Fatal(err) + } + + results, _ := runProjectIdentityProcessWave(t, workspace, projectIdentityProcessChildren, false) + requireProjectIdentityProcessInvalid(t, results) + got, err := os.ReadFile(anchorPath) + if err != nil { + t.Fatal(err) + } + if !bytes.Equal(got, original) { + t.Fatalf("malformed anchor was repaired or replaced: %q", got) + } + assertNoProjectIdentityProcessResidue(t, workspace) + }) + + t.Run("open delayed partial writer fails closed and is not replaced", func(t *testing.T) { + workspace := t.TempDir() + anchorPath := filepath.Join(workspace, projectIdentityProcessAnchorFile) + writer, err := os.OpenFile(anchorPath, os.O_WRONLY|os.O_CREATE|os.O_EXCL, 0o600) + if err != nil { + t.Fatal(err) + } + writerOpen := true + defer func() { + if writerOpen { + _ = writer.Close() + } + }() + + partial := []byte(`{"version":2`) + if _, err := writer.Write(partial); err != nil { + t.Fatal(err) + } + if err := writer.Sync(); err != nil { + t.Fatal(err) + } + + results, _ := runProjectIdentityProcessWave(t, workspace, projectIdentityProcessChildren, false) + requireProjectIdentityProcessInvalid(t, results) + got, err := os.ReadFile(anchorPath) + if err != nil { + t.Fatal(err) + } + if !bytes.Equal(got, partial) { + t.Fatalf("open delayed partial writer was repaired or replaced: %q", got) + } + assertNoProjectIdentityProcessResidue(t, workspace) + if err := writer.Close(); err != nil { + t.Fatal(err) + } + writerOpen = false + }) +} + +type projectIdentityChildProcess struct { + cmd *exec.Cmd + stdin io.WriteCloser + stdout *bufio.Reader + stderr bytes.Buffer + waited bool +} + +func runProjectIdentityProcessWave(t *testing.T, workspace string, count int, monitor bool) ([]projectIdentityProcessResult, *projectIdentityPublicationObservations) { + t.Helper() + if count < 2 { + t.Fatalf("child count=%d, want at least two independent processes", count) + } + + executable, err := os.Executable() + if err != nil { + t.Fatal(err) + } + ctx, cancel := context.WithTimeout(context.Background(), 45*time.Second) + defer cancel() + + children := make([]projectIdentityChildProcess, count) + defer func() { + for i := range children { + child := &children[i] + if child.stdin != nil { + _ = child.stdin.Close() + } + if child.cmd != nil && child.cmd.Process != nil && !child.waited { + _ = child.cmd.Process.Kill() + _ = child.cmd.Wait() + child.waited = true + } + } + }() + + seenPIDs := make(map[int]struct{}, count) + for i := range children { + cmd := exec.CommandContext(ctx, executable, "-test.run="+projectIdentityProcessHelperTest, "-test.count=1") + cmd.Env = append(os.Environ(), + projectIdentityProcessHelperEnv+"=1", + projectIdentityProcessWorkspaceEnv+"="+workspace, + ) + stdin, err := cmd.StdinPipe() + if err != nil { + t.Fatalf("child %d stdin: %v", i, err) + } + stdout, err := cmd.StdoutPipe() + if err != nil { + t.Fatalf("child %d stdout: %v", i, err) + } + children[i].cmd = cmd + children[i].stdin = stdin + children[i].stdout = bufio.NewReader(stdout) + cmd.Stderr = &children[i].stderr + if err := cmd.Start(); err != nil { + t.Fatalf("start child %d: %v", i, err) + } + pid := cmd.Process.Pid + if pid == os.Getpid() { + t.Fatalf("child %d reused parent pid %d", i, pid) + } + if _, exists := seenPIDs[pid]; exists { + t.Fatalf("duplicate child pid %d", pid) + } + seenPIDs[pid] = struct{}{} + } + + for i := range children { + ready, err := children[i].stdout.ReadString('\n') + if err != nil { + t.Fatalf("child %d readiness: %v; stderr=%s", i, err, children[i].stderr.String()) + } + if strings.TrimSpace(ready) != "READY" { + t.Fatalf("child %d readiness=%q; stderr=%s", i, ready, children[i].stderr.String()) + } + } + + observations := &projectIdentityPublicationObservations{} + stopMonitor := func() {} + awaitComplete := func() error { return nil } + if monitor { + stopMonitor, awaitComplete = startProjectIdentityProcessMonitor(workspace, observations) + defer stopMonitor() + } + + releaseGate := make(chan struct{}) + releaseErrors := make(chan error, count) + var releaseWG sync.WaitGroup + for i := range children { + releaseWG.Add(1) + go func(i int) { + defer releaseWG.Done() + <-releaseGate + _, writeErr := children[i].stdin.Write([]byte{'G'}) + closeErr := children[i].stdin.Close() + if writeErr != nil { + releaseErrors <- fmt.Errorf("child %d release write: %w", i, writeErr) + return + } + if closeErr != nil { + releaseErrors <- fmt.Errorf("child %d release close: %w", i, closeErr) + return + } + releaseErrors <- nil + }(i) + } + close(releaseGate) + releaseWG.Wait() + close(releaseErrors) + for releaseErr := range releaseErrors { + if releaseErr != nil { + t.Fatal(releaseErr) + } + } + + results := make([]projectIdentityProcessResult, count) + for i := range children { + line, err := children[i].stdout.ReadString('\n') + if err != nil { + t.Fatalf("child %d result: %v; stderr=%s", i, err, children[i].stderr.String()) + } + if err := json.Unmarshal([]byte(line), &results[i]); err != nil { + t.Fatalf("child %d result=%q: %v; stderr=%s", i, line, err, children[i].stderr.String()) + } + if err := children[i].cmd.Wait(); err != nil { + children[i].waited = true + t.Fatalf("child %d exit: %v; stderr=%s", i, err, children[i].stderr.String()) + } + children[i].waited = true + } + + if monitor { + if err := awaitComplete(); err != nil { + t.Fatal(err) + } + stopMonitor() + } + return results, observations +} + +func startProjectIdentityProcessMonitor(workspace string, observations *projectIdentityPublicationObservations) (stop func(), awaitComplete func() error) { + anchorPath := filepath.Join(workspace, projectIdentityProcessAnchorFile) + stopCh := make(chan struct{}) + done := make(chan struct{}) + completeObserved := make(chan struct{}) + var completeOnce sync.Once + var stopOnce sync.Once + + go func() { + defer close(done) + for { + select { + case <-stopCh: + return + default: + } + data, err := os.ReadFile(anchorPath) + switch { + case err == nil && validProjectIdentityProcessAnchorBytes(data): + observations.complete.Add(1) + completeOnce.Do(func() { close(completeObserved) }) + case err == nil: + observations.partial.Add(1) + case !errors.Is(err, os.ErrNotExist): + observations.partial.Add(1) + } + runtime.Gosched() + } + }() + + stop = func() { + stopOnce.Do(func() { + close(stopCh) + <-done + }) + } + awaitComplete = func() error { + select { + case <-completeObserved: + return nil + case <-time.After(5 * time.Second): + return errors.New("parent monitor did not observe a complete final anchor") + } + } + return stop, awaitComplete +} + +func requireProjectIdentityProcessConvergence(t *testing.T, results []projectIdentityProcessResult) string { + t.Helper() + if len(results) == 0 { + t.Fatal("zero child results") + } + winner := results[0].Anchor + for i, result := range results { + if !result.OK || result.Error != "" || result.Anchor == "" || result.Anchor != winner { + t.Fatalf("child %d did not converge: %#v; winner=%q", i, result, winner) + } + } + return winner +} + +func requireProjectIdentityProcessInvalid(t *testing.T, results []projectIdentityProcessResult) { + t.Helper() + for i, result := range results { + if result.OK || result.Anchor != "" || !strings.Contains(result.Error, "PROJECT_IDENTITY_INVALID") { + t.Fatalf("child %d did not fail closed: %#v", i, result) + } + } +} + +func requireCompleteProjectIdentityProcessAnchor(t *testing.T, workspace, expectedAnchor string) []byte { + t.Helper() + anchorPath := filepath.Join(workspace, projectIdentityProcessAnchorFile) + data, err := os.ReadFile(anchorPath) + if err != nil { + t.Fatal(err) + } + if !validProjectIdentityProcessAnchorBytes(data) { + t.Fatalf("final anchor is not complete strict JSON:\n%s", data) + } + var anchor projectIdentityProcessAnchor + if err := json.Unmarshal(data, &anchor); err != nil { + t.Fatal(err) + } + if anchor.Anchor != expectedAnchor { + t.Fatalf("final anchor %q differs from converged child result %q", anchor.Anchor, expectedAnchor) + } + if runtime.GOOS != "windows" { + info, err := os.Stat(anchorPath) + if err != nil { + t.Fatal(err) + } + if info.Mode().Perm() != 0o600 { + t.Fatalf("final anchor mode=%#o, want 0600", info.Mode().Perm()) + } + t.Logf("final_anchor_mode=%#o", info.Mode().Perm()) + } + return data +} + +func validProjectIdentityProcessAnchorBytes(data []byte) bool { + decoder := json.NewDecoder(bytes.NewReader(data)) + decoder.DisallowUnknownFields() + var anchor projectIdentityProcessAnchor + if err := decoder.Decode(&anchor); err != nil { + return false + } + if err := decoder.Decode(&struct{}{}); !errors.Is(err, io.EOF) { + return false + } + if anchor.Version != 2 || !strictProjectIdentityProcessAnchor.MatchString(anchor.Anchor) || anchor.Shared { + return false + } + var raw map[string]json.RawMessage + if err := json.Unmarshal(data, &raw); err != nil { + return false + } + keys := make([]string, 0, len(raw)) + for key := range raw { + keys = append(keys, key) + } + sort.Strings(keys) + return strings.Join(keys, ",") == "anchor,shared,version" +} + +func assertNoProjectIdentityProcessResidue(t *testing.T, workspace string) { + t.Helper() + entries, err := os.ReadDir(workspace) + if err != nil { + t.Fatal(err) + } + for _, entry := range entries { + name := entry.Name() + if strings.HasPrefix(name, projectIdentityProcessAnchorFile+".tmp-") || + strings.HasPrefix(name, ".engram-project.tmp-") { + t.Fatalf("temporary project-anchor residue: %s", name) + } + } +} From 320f1d806729085f56e91b505b738444408639e1 Mon Sep 17 00:00:00 2001 From: Kirill Turanskiy Date: Sat, 11 Jul 2026 01:27:46 +0300 Subject: [PATCH 044/111] chore(security): align R4 authority scope Remove the undeclared behavior-signal artifact identified by SPI-R4-CHK-001 and correct the authorized maker report to the final five-path R9 pending surface. Preserve product, permanent test, and spec evidence blobs unchanged. --- ...CURITY-PROJECT-IDENTITY-R4-maker-report.md | 18 +++-- .../behavior-signal.md | 74 ------------------- 2 files changed, 10 insertions(+), 82 deletions(-) delete mode 100644 .agent/testing/SECURITY-PROJECT-IDENTITY-R4/behavior-signal.md diff --git a/.agent/reports/evidence/production-ready/security-project-identity/SECURITY-PROJECT-IDENTITY-R4-maker-report.md b/.agent/reports/evidence/production-ready/security-project-identity/SECURITY-PROJECT-IDENTITY-R4-maker-report.md index f557602f..315c8bc0 100644 --- a/.agent/reports/evidence/production-ready/security-project-identity/SECURITY-PROJECT-IDENTITY-R4-maker-report.md +++ b/.agent/reports/evidence/production-ready/security-project-identity/SECURITY-PROJECT-IDENTITY-R4-maker-report.md @@ -1,12 +1,18 @@ # SECURITY-PROJECT-IDENTITY R4 maker report -Verdict: **READY FOR FRESH CHECKER**. +Verdict: **READY FOR FRESH CHECKER AFTER AUTHORITY CORRECTION**. R4 closes `SPI-R3-CHK-001` with a permanent Go OS-child acceptance rail. The revision is test/evidence-only: `internal/proxy/identity.go` remains the exact target blob `9ecbad17612e7dd4e2ce8c8fed10ee4e041e11c1`, its base-to-R4 diff is empty, and the useful R3 goroutine tests remain intact. +Successor note: independent checker +`7d9a771f114c482b174fc240106228dbb2b3b25c` passed the product and permanent +test rail, but returned `REVISE` on `SPI-R4-CHK-001` because the prior target +included one undeclared `.agent/testing/**` path. This direct-child successor +removes that redundant path without changing product, test, or spec evidence. + ## Immutable target and scope - Required base: `38344455754fe503acbd79d2134141f996adff7f`. @@ -15,8 +21,6 @@ and the useful R3 goroutine tests remain intact. - New permanent test: `internal/proxy/identity_process_test.go`. - Product, auth, database, protobuf, dependency, release, and v5-demolished paths are unchanged. -- Phase 0 classification is `CODE_PATH_COVERED`: this is an internal - process/filesystem contract, not a new user-facing feature. ## Permanent process contract @@ -79,21 +83,19 @@ Detailed machine-readable evidence: - `.agent/specs/security-project-identity/evidence/SECURITY-PROJECT-IDENTITY-R4.red.json` - `.agent/specs/security-project-identity/evidence/SECURITY-PROJECT-IDENTITY-R4.prove-it.json` - `.agent/specs/security-project-identity/evidence/SECURITY-PROJECT-IDENTITY-R4.verification.json` -- `.agent/testing/SECURITY-PROJECT-IDENTITY-R4/behavior-signal.md` ## Artifact hashes | Artifact | SHA-256 | Git blob | | --- | --- | --- | | `internal/proxy/identity_process_test.go` | `cb85e74ca6b4394b6fd0009418ef765b88dbf8eb1e0376f43ae848e7b18714db` | `6e04140eaf4ce6eff91c3a40010e99ff56460773` | -| `.agent/testing/SECURITY-PROJECT-IDENTITY-R4/behavior-signal.md` | `9f66b18bf2992dd27381f2438711569460b2d564101e71896ef99d8650e482c7` | `c4d80978955130bdee737df06fa8609f340cd2d9` | | `SECURITY-PROJECT-IDENTITY-R4.red.json` | `18d0cde079ab3613d58a77e77b8012ba895c94d3e6b6bee87d2d144047d4d8a9` | `becfba41abcb5bdc1137667f641cad61f154c8b1` | | `SECURITY-PROJECT-IDENTITY-R4.prove-it.json` | `53dd6b5b79ef1899b0ae3fecc9c180739b808e8fdaf14c0fca2b8c8d98097089` | `408ce7f5c14fb5b127e9b2ff24c5170a97f55849` | | `SECURITY-PROJECT-IDENTITY-R4.verification.json` | `b45038d290ed8d5c8f5e2b6f1c49d9ca7ff68fa24181a3e6b1608bec08342628` | `453970a0c56002bb94160b8eb898db702b56ec91` | -The exact staged scope contains six paths. Its LF-sorted, LF-terminated path -list has SHA-256 -`bd1ce5c203c1381759c4e8aa69c462b8a50c096699d56d442f9d3e5c2c99bb77`. +The exact cumulative base-to-successor scope contains five paths. Its +LF-sorted, LF-terminated path list has SHA-256 +`ff2385aa04e726c653db0c70a525f3e3957bc91e6bda1e6526fdd63afe5b5b7d`. `internal/proxy/identity.go` is absent from that list. No merge, push, tag, release, database mutation, browser action, or worktree diff --git a/.agent/testing/SECURITY-PROJECT-IDENTITY-R4/behavior-signal.md b/.agent/testing/SECURITY-PROJECT-IDENTITY-R4/behavior-signal.md deleted file mode 100644 index c4d80978..00000000 --- a/.agent/testing/SECURITY-PROJECT-IDENTITY-R4/behavior-signal.md +++ /dev/null @@ -1,74 +0,0 @@ -# Behavioral Signal Declarations — SECURITY-PROJECT-IDENTITY-R4 - -Phase: 0 (Behavior-Confirming Tester) - -Task: SECURITY-PROJECT-IDENTITY-R4 - -Anchor: explicit R4 maker contract plus immutable R2/R3 checker findings; no feature-local `spec.md` or `user_job_statement.md` exists -Generated: 2026-07-11T00:44:39.6108161+03:00 - -## Scope classification - -The change adds permanent process-boundary regression coverage for an already -implemented filesystem publication algorithm. It does not add or modify a -user-facing feature. The orchestrator's R4 contract explicitly limits this -revision to test and evidence files unless a new product defect is proven. - -Phase 0 classification: `CODE_PATH_COVERED`. - -## Test declarations - -### TEST-001 - -Test ID: `internal/proxy/identity_process_test.go:TestResolveProjectIdentityV2_ChildProcessPublicationContract` - -Tag: `CODE-CONTRACT-ONLY` - -Justification: proves that independent Go processes cannot observe or create a partial project-identity anchor and cannot repair an existing invalid anchor. - -Behavioral gap: none claimed; customer-mode identity behavior remains owned by the existing production-readiness and critical-suite flows. - -Rename required: no - -AP violations: none - -### TEST-002 - -Test ID: `internal/proxy/identity_process_test.go:TestResolveProjectIdentityV2_ProcessHelper` - -Tag: `CODE-CONTRACT-ONLY` - -Justification: provides the isolated child-process endpoint used only by TEST-001; it makes no independent behavioral claim. - -Behavioral gap: none; this helper is load-bearing test infrastructure for TEST-001. - -Rename required: no - -AP violations: none - -## Critical-suite gap analysis - -This task changes no user-facing feature, so it creates no new critical-suite -obligation. The existing `tests/critical/` inventory contains only the auth -two-tier user flow and does not duplicate this internal process-publication -contract. - -## Phase 0 exit status - -Tests in scope: 2 - -User-facing tests: 0 - -Non-user-facing tests: 2 - -Missing declarations: 0 - -Critical-suite gaps introduced: 0 - -Rename flags: 0 - -AP violations detected: none - -Behavioral verification tally: `CODE_PATH_COVERED` (1 internal contract) - -Exit: PASS From f11a77cce88f013839e22662458a3318670445e9 Mon Sep 17 00:00:00 2001 From: Kirill Turanskiy Date: Sat, 11 Jul 2026 01:38:13 +0300 Subject: [PATCH 045/111] Release gates: enforce R9 frozen candidate authority --- .../2026-07-11-release-gates-r9-maker.md | 68 + .../R9-ACTIVE-CANDIDATE-AUTHORITY.red.json | 11 + ...E-CANDIDATE-AUTHORITY.regressions-red.json | 27 + .../R9-PLAN-PATH-OWNERSHIP.zero-row-red.json | 15 + ...active-candidate-authority-git-replay.json | 216 + .../active-candidate-authority-harness.json | 152 + .../critical-suite/r9-maker/commands.json | 43 + .../r9-maker/go-test-summary.json | 88 + .../r9-maker/go-test.stderr.log | 0 .../r9-maker/go-test.stdout.jsonl | 32 + .../r9-maker/json-parser.stderr.log | 0 .../r9-maker/json-parser.stdout.log | 2 + .../critical-suite/r9-maker/summary.json | 38 + ...molition-zero-declarations-clear-fail.json | 129 + .../diff-db-embedding-r5-replay.json | 685 +++ .../diff-security-r3-replay.json | 452 ++ .../ownership-ledger-static.json | 4579 +++++++++++++++++ .../security-r4-ffd-pending-probe.json | 198 + ...est-r9-active-candidate-path-authority.ps1 | 32 + .../release-gates/verification-summary.json | 56 + .../release-gates/workflow-conformance.json | 19 + .github/workflows/test.yml | 85 +- ...assert-active-candidate-path-authority.ps1 | 610 +++ .../assert-plan-path-ownership.ps1 | 15 +- 24 files changed, 7532 insertions(+), 20 deletions(-) create mode 100644 .agent/reports/2026-07-11-release-gates-r9-maker.md create mode 100644 .agent/specs/release-gates-r9/evidence/release-gates/R9-ACTIVE-CANDIDATE-AUTHORITY.red.json create mode 100644 .agent/specs/release-gates-r9/evidence/release-gates/R9-ACTIVE-CANDIDATE-AUTHORITY.regressions-red.json create mode 100644 .agent/specs/release-gates-r9/evidence/release-gates/R9-PLAN-PATH-OWNERSHIP.zero-row-red.json create mode 100644 .agent/specs/release-gates-r9/evidence/release-gates/active-candidate-authority-git-replay.json create mode 100644 .agent/specs/release-gates-r9/evidence/release-gates/active-candidate-authority-harness.json create mode 100644 .agent/specs/release-gates-r9/evidence/release-gates/critical-suite/r9-maker/commands.json create mode 100644 .agent/specs/release-gates-r9/evidence/release-gates/critical-suite/r9-maker/go-test-summary.json create mode 100644 .agent/specs/release-gates-r9/evidence/release-gates/critical-suite/r9-maker/go-test.stderr.log create mode 100644 .agent/specs/release-gates-r9/evidence/release-gates/critical-suite/r9-maker/go-test.stdout.jsonl create mode 100644 .agent/specs/release-gates-r9/evidence/release-gates/critical-suite/r9-maker/json-parser.stderr.log create mode 100644 .agent/specs/release-gates-r9/evidence/release-gates/critical-suite/r9-maker/json-parser.stdout.log create mode 100644 .agent/specs/release-gates-r9/evidence/release-gates/critical-suite/r9-maker/summary.json create mode 100644 .agent/specs/release-gates-r9/evidence/release-gates/demolition-zero-declarations-clear-fail.json create mode 100644 .agent/specs/release-gates-r9/evidence/release-gates/diff-db-embedding-r5-replay.json create mode 100644 .agent/specs/release-gates-r9/evidence/release-gates/diff-security-r3-replay.json create mode 100644 .agent/specs/release-gates-r9/evidence/release-gates/ownership-ledger-static.json create mode 100644 .agent/specs/release-gates-r9/evidence/release-gates/security-r4-ffd-pending-probe.json create mode 100644 .agent/specs/release-gates-r9/evidence/release-gates/test-r9-active-candidate-path-authority.ps1 create mode 100644 .agent/specs/release-gates-r9/evidence/release-gates/verification-summary.json create mode 100644 .agent/specs/release-gates-r9/evidence/release-gates/workflow-conformance.json create mode 100644 scripts/production-gates/assert-active-candidate-path-authority.ps1 diff --git a/.agent/reports/2026-07-11-release-gates-r9-maker.md b/.agent/reports/2026-07-11-release-gates-r9-maker.md new file mode 100644 index 00000000..17ba745d --- /dev/null +++ b/.agent/reports/2026-07-11-release-gates-r9-maker.md @@ -0,0 +1,68 @@ +# RELEASE-GATES-R9 maker report + +## Identity and scope + +- Immutable rejected R8 head: `406fe952c143eb8aaf5895427c568a41d4cec225`. +- Immutable R9 governance commit A: `8cb810095b2bea77ab9812832d9ab8a99c928d18`, direct parent R8. +- This commit B is a direct child of A and changes only the R9 release-gate workflow, the two release-gate scripts, this report, and `.agent/specs/release-gates-r9/evidence/release-gates/**`. +- No product implementation, master-plan, ownership-state, scope-map, active-diff contract, canonical register, primary worktree, integration worktree, HTML report, merge, push, or tag was changed. + +## Implemented release authority + +`assert-active-candidate-path-authority.ps1` is a self-contained frozen gate over the R9 plan and active-diff contract. The workflow pins the canonical UTF-8/LF SHA-256 values: + +- plan: `4388337722e57b48e93515008e4220d6cd2c83de695c4c449387f071c59fb96f`; +- scope map (ownership Ledger): `fb170d59f3072117489402fd347cd1432c40adbc842811f92227498bcbc92693`; +- active-diff contract: `d8e7818d84831f047d30a8493f9c7d2a8cea288d5c381735960d11dd02988ae5`. + +The gate validates all nine frozen candidates and 123 frozen paths, exact Git status/path digests, plan ownership, status classes, branch/base/head identities, pending namespaces, and release-acceptance falsehood. Optional pending arrays are normalized: prefix-only R6 emits `allowed_exact_paths: []`, never `[null]`. + +Load-bearing metadata is also semantic, not merely hash-pinned: exact authority paths, rejected R8 head `406fe952...`, R8 scope provenance `ab5f882f...`, discovery-only mutable-register provenance, and SHA-256 ordinal/case-sensitive path serialization are required. The artifact explicitly reports `HISTORICAL_DISCOVERY_ONLY`, `used_for_acceptance=false`, and `mutable_register_read=false`. + +Pending probes must start at the contract's exact `base_anchor` and prove that base is an ancestor of head. Their effective `.agent` surface is every bounded plan-owned declaration for the slice, not only the newest revision prefix. Product/test exact paths remain optional members of the allowed set: + +- R6 accepts all six bounded common/R3/R4/R5/R6/spec evidence families and reports zero exact paths. +- R4 allows either/both exact test paths but does not require an unnecessary `identity_test.go` edit. `identity.go` remains forbidden in the final diff. +- The observed R4 head `ffdbaefb5fb9685899663a40c6b6fef4a08448ba` fails with exactly one violation: `.agent/testing/SECURITY-PROJECT-IDENTITY-R4/behavior-signal.md`. Authority was not broadened; a narrow successor must remove that path. + +`assert-plan-path-ownership.ps1` now preserves empty slice/declaration results as typed arrays. The seven-path misbound DEMOLITION diff therefore returns the explicit `found 0` maker-row failure rather than an internal scalar `Count` exception. + +## TDD evidence + +The committed RED records show five independently observed failure classes before their production fixes: + +1. the active-candidate script was absent; +2. prefix-only pending output serialized a null exact-path declaration; +3. a non-anchor pending probe was not rejected explicitly; +4. R9 load-bearing metadata mutations were not semantically rejected; +5. zero-row Diff mode threw an internal scalar `Count` exception. + +GREEN self-tests reject missing/extra/wrong-owner/wrong-test/stale-namespace/zero-declaration candidates, undeclared and forbidden pending paths, prefix-only null output, incomplete full pending evidence surfaces, non-anchor bases, wrong R8/AB5F provenance, mutable-register acceptance, and wrong digest serialization/case. + +## Verification + +| Gate | Result | +| --- | --- | +| PowerShell parser for both changed gates | PASS | +| `assert-active-candidate-path-authority.ps1 -SelfTest` | PASS | +| frozen default audit | PASS: 9 candidates, 123 paths, 2 pending, 0 errors | +| full local Git replay with required objects | PASS: 9/9 verified | +| R4 `38344455..ffdbaefb` pending probe | expected FAIL: one undeclared `.agent/testing/**` path | +| DEMOLITION `4812589b..d59d1605` | expected FAIL: 7 diff entries, 0 maker rows, no internal exception | +| plan ownership self-test + static Ledger | PASS: 57 rows, 351 declarations, 34 repeated exact paths, 36 epochs | +| SECURITY-PROJECT-IDENTITY R3 replay | PASS: 14 paths, 0 violations | +| rejected DB embedding R5 path replay | PASS: 28 paths, 0 violations; acceptance status remains rejected | +| `actionlint .github/workflows/test.yml` | PASS | +| executable workflow conformance | PASS: all predecessor predicates plus 70 mutations rejected | +| synthesized staged-tree RELEASE-GATES exact Diff | PASS: 24 paths, 0 violations | +| `run-db-suite.ps1 -SelfTest` | PASS: exact package-plus-test and 12-test zero-skip false-green rails | +| tracked critical suite | PASS: 7 passed, 0 failed, 0 skipped | +| `go test ./...` | PASS | +| `go vet ./...` | PASS | +| `go build ./...` | PASS | +| exact staged diff gitleaks | PASS: no leaks | +| native BOM scan over exact staged paths | PASS: 24 paths, no UTF-8/UTF-16 BOM | + +The repository has no `tools/check-bom.cjs`; that requested helper invocation failed with `MODULE_NOT_FOUND` and was not treated as proof. A native byte-prefix scan over the exact staged commit-B set passed. Whole-directory gitleaks reports 14 pre-existing findings in five files outside commit-B scope; the exact staged B diff scan passed with no findings. + +The heavy Docker-backed fresh-database repeat-three suite was not duplicated in this release-gate-only maker worktree. Its runner and false-green semantics are unchanged and the workflow continues to execute it as the canonical release gate. diff --git a/.agent/specs/release-gates-r9/evidence/release-gates/R9-ACTIVE-CANDIDATE-AUTHORITY.red.json b/.agent/specs/release-gates-r9/evidence/release-gates/R9-ACTIVE-CANDIDATE-AUTHORITY.red.json new file mode 100644 index 00000000..c99facbd --- /dev/null +++ b/.agent/specs/release-gates-r9/evidence/release-gates/R9-ACTIVE-CANDIDATE-AUTHORITY.red.json @@ -0,0 +1,11 @@ +{ + "schema_version": 1, + "slice": "RELEASE-GATES-R9", + "phase": "RED", + "command": "pwsh -NoProfile -File .agent/specs/release-gates-r9/evidence/release-gates/test-r9-active-candidate-path-authority.ps1", + "exit_code": 1, + "expected_failure": "R9 active-candidate authority gate is missing", + "observed_failure": "R9 active-candidate authority gate is missing: scripts/production-gates/assert-active-candidate-path-authority.ps1", + "production_script_existed": false, + "verdict": "EXPECTED_RED" +} diff --git a/.agent/specs/release-gates-r9/evidence/release-gates/R9-ACTIVE-CANDIDATE-AUTHORITY.regressions-red.json b/.agent/specs/release-gates-r9/evidence/release-gates/R9-ACTIVE-CANDIDATE-AUTHORITY.regressions-red.json new file mode 100644 index 00000000..5bfe66d2 --- /dev/null +++ b/.agent/specs/release-gates-r9/evidence/release-gates/R9-ACTIVE-CANDIDATE-AUTHORITY.regressions-red.json @@ -0,0 +1,27 @@ +{ + "schema_version": 1, + "slice": "RELEASE-GATES-R9", + "phase": "RED", + "command": "pwsh -NoProfile -File scripts/production-gates/assert-active-candidate-path-authority.ps1 -SelfTest", + "cases": [ + { + "name": "prefix-only pending null normalization", + "exit_code": 1, + "observed_failure": "SELFTEST FAIL: prefix-only pending contract serialized a null exact-path declaration", + "required_green": "prefix-only pending serializes allowed_exact_paths as [] and accepts valid paths from the full bounded plan-owned .agent surface" + }, + { + "name": "pending probe exact base anchor", + "exit_code": 1, + "observed_failure": "SELFTEST FAIL: pending probe accepted or obscured a non-anchor base", + "required_green": "probe base equals the frozen pending base_anchor and is an ancestor of head" + }, + { + "name": "load-bearing R9 metadata", + "exit_code": 1, + "observed_failure": "SELFTEST FAIL: R9 profile accepted a wrong rejected R8 head", + "required_green": "exact rejected R8 head, AB5F scope provenance, discovery-only source audit, and digest serialization/case mutations all fail" + } + ], + "verdict": "EXPECTED_RED" +} diff --git a/.agent/specs/release-gates-r9/evidence/release-gates/R9-PLAN-PATH-OWNERSHIP.zero-row-red.json b/.agent/specs/release-gates-r9/evidence/release-gates/R9-PLAN-PATH-OWNERSHIP.zero-row-red.json new file mode 100644 index 00000000..380af11b --- /dev/null +++ b/.agent/specs/release-gates-r9/evidence/release-gates/R9-PLAN-PATH-OWNERSHIP.zero-row-red.json @@ -0,0 +1,15 @@ +{ + "schema_version": 1, + "slice": "RELEASE-GATES-R9", + "phase": "RED", + "gate": "plan-path-ownership", + "mode": "Diff", + "candidate_slice": "DEMOLITION-SKIP-CLASSIFICATION", + "base": "4812589b9920c187a92a03d210d2e9d5eb53862f", + "head": "d59d1605969b1f567506e96ded524dfd1e4be08a", + "diff_entries": 7, + "exit_code": 1, + "observed_failure": "The property 'Count' cannot be found on this object. Verify that the property exists.", + "required_green": "a deterministic zero-maker-row failure that preserves the seven non-empty diff entries and contains no internal scalar Count exception", + "verdict": "EXPECTED_RED" +} diff --git a/.agent/specs/release-gates-r9/evidence/release-gates/active-candidate-authority-git-replay.json b/.agent/specs/release-gates-r9/evidence/release-gates/active-candidate-authority-git-replay.json new file mode 100644 index 00000000..3af89c26 --- /dev/null +++ b/.agent/specs/release-gates-r9/evidence/release-gates/active-candidate-authority-git-replay.json @@ -0,0 +1,216 @@ +{ + "schema_version": 1, + "gate": "active-candidate-path-authority", + "verdict": "PASS", + "started_at": "2026-07-10T22:29:55.8609380+00:00", + "finished_at": "2026-07-10T22:29:57.8527428+00:00", + "duration_seconds": 1.992, + "contract": { + "path": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates-r9-maker\\.agent\\plans\\2026-07-10-engram-production-ready-active-diff-contracts.json", + "expected_sha256": "d8e7818d84831f047d30a8493f9c7d2a8cea288d5c381735960d11dd02988ae5", + "observed_sha256": "d8e7818d84831f047d30a8493f9c7d2a8cea288d5c381735960d11dd02988ae5", + "hash_match": true + }, + "plan": { + "path": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates-r9-maker\\.agent\\plans\\2026-07-10-engram-production-ready-master-plan.md", + "expected_sha256": "4388337722e57b48e93515008e4220d6cd2c83de695c4c449387f071c59fb96f", + "observed_sha256": "4388337722e57b48e93515008e4220d6cd2c83de695c4c449387f071c59fb96f", + "hash_match": true + }, + "source_snapshot": { + "freshness": "HISTORICAL_DISCOVERY_ONLY", + "used_for_acceptance": false, + "mutable_register_read": false, + "observed_sha256": "29865adc048cb3f64ec7d133b3bd901c95115e4ae5b95c98927607de889f77d4" + }, + "counts": { + "candidates": 9, + "paths": 123.0, + "pending_contracts": 2, + "current_candidates": 6, + "rejected_candidates": 3, + "git_verified": 9, + "errors": 0 + }, + "candidates": [ + { + "slice": "DB-AUTH", + "status_class": "current-ready", + "branch": "work/prc-db-auth", + "base": "b0c4ab4c07a4c6f512728da52b2e132bacd0289c", + "head": "da97c88be6753703bac112be8431dc373e4d9dda", + "path_count": 5, + "paths_sha256": "7a678254366c2bdcf5feba8e25ce1151a69ae0a0240d68e3af3cd15ffa1b9d9e" + }, + { + "slice": "DB-EMBEDDING-STATS", + "status_class": "current-checker-active", + "branch": "work/prc-db-embedding-stats", + "base": "dc891b2d72b1fd63b83e4a630a249241fc389151", + "head": "38d6a4fb7ff5f5ae3b6c0066c0a1b806421137df", + "path_count": 8, + "paths_sha256": "b4d1c8176810630268759cedc909cd1042b063b81a14a01175b1a36f174d5c0f" + }, + { + "slice": "DB-EMBEDDING-EVIDENCE-TRANSPORT", + "status_class": "rejected-evidence-revision", + "branch": "work/prc-db-embedding-evidence-transport-r5", + "base": "369951b61ee07cb0c405558e0f677cd1c9e90362", + "head": "a538f6224ef31f612152470a4ecd45e78ff9d0f2", + "path_count": 28, + "paths_sha256": "a9e3eb9762bc3d597ac277c653ad30d10149cb10443fb0b0fc3edd21093c8217" + }, + { + "slice": "DB-BULKOPS", + "status_class": "rejected-historical", + "branch": "work/prc-db-bulkops", + "base": "6ea10496aa127fba7fdb194875044e770d0a1d8c", + "head": "68b2ce5835c7c6efdf1c68da9eedcb8d9c3837ef", + "path_count": 13, + "paths_sha256": "1c53f8aed2d97d91f9103a21d214856c5bb0f59dce6dcc0264e1ce04693c869a" + }, + { + "slice": "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK", + "status_class": "current-ready-with-concerns", + "branch": "work/prc-db-bulkops", + "base": "68b2ce5835c7c6efdf1c68da9eedcb8d9c3837ef", + "head": "bd68c05baf4b7250096dd84f56bebea2aa555970", + "path_count": 38, + "paths_sha256": "39a32b36dfac7f1148649ca092abc23320fda34e2535a828778e228aa8c0230d" + }, + { + "slice": "DB-CRYSTALLIZATION", + "status_class": "current-ready-with-concerns", + "branch": "work/prc-db-crystallization", + "base": "dc891b2d72b1fd63b83e4a630a249241fc389151", + "head": "2ab6211494e51aeb7b787a99e78cff8bf2d5694a", + "path_count": 1, + "paths_sha256": "8428c4f86e06bdab5367fd6678decdb49b8aa23a41f593b246b7e541ec84ab23" + }, + { + "slice": "SECURITY-TOOLCHAIN", + "status_class": "current-ready", + "branch": "work/prc-security-toolchain", + "base": "dc891b2d72b1fd63b83e4a630a249241fc389151", + "head": "b0955dfd61b4ea7364f6d400579247b475a1a680", + "path_count": 3, + "paths_sha256": "5e49ddf6f66cc54d25f31cecd2fae96554d760f8c722f1c113a9d8e695468143" + }, + { + "slice": "SECURITY-PROJECT-IDENTITY", + "status_class": "rejected-security-r3", + "branch": "work/prc-security-project-identity-r3", + "base": "9e2ce4e58a5cded69660ca9ac532d2167f315bb2", + "head": "38344455754fe503acbd79d2134141f996adff7f", + "path_count": 14, + "paths_sha256": "046360929bec61f3cbda420754aaab7056badf467d5e5c2c2e2fce68e2f5e21f" + }, + { + "slice": "DB-TEST-POOL-HYGIENE", + "status_class": "current-ready-for-check", + "branch": "work/prc-db-test-pool-hygiene-evidence-r2", + "base": "276337b3e96aa5af6d2e7dd9a0002ff957e5ffc9", + "head": "68242c48aaad62ec087166eeb9ea32f14d189450", + "path_count": 13, + "paths_sha256": "5b30cedca485ce89ce38bdb665413be59a3e2639e01e04c600172e68e503f3a0" + } + ], + "pending_contracts": [ + { + "slice": "DB-EMBEDDING-EVIDENCE-TRANSPORT", + "branch": "work/prc-db-embedding-evidence-transport-r6", + "base_anchor": "a538f6224ef31f612152470a4ecd45e78ff9d0f2", + "allowed_exact_paths": [], + "effective_agent_declarations": [ + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/**", + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/**", + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4/**", + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/**", + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/**", + ".agent/specs/db-embedding-stats-evidence-transport/evidence/**" + ], + "requires_final_exact_diff_contract": true + }, + { + "slice": "SECURITY-PROJECT-IDENTITY", + "branch": "work/prc-security-project-identity-r4", + "base_anchor": "38344455754fe503acbd79d2134141f996adff7f", + "allowed_exact_paths": [ + "internal/proxy/identity_process_test.go", + "internal/proxy/identity_test.go" + ], + "effective_agent_declarations": [ + ".agent/specs/security-project-identity/evidence/**", + ".agent/reports/evidence/production-ready/security-project-identity/**" + ], + "requires_final_exact_diff_contract": true + } + ], + "git_verification": [ + { + "slice": "DB-AUTH", + "available": true, + "verified": true, + "path_count": 5, + "paths_sha256": "7a678254366c2bdcf5feba8e25ce1151a69ae0a0240d68e3af3cd15ffa1b9d9e" + }, + { + "slice": "DB-EMBEDDING-STATS", + "available": true, + "verified": true, + "path_count": 8, + "paths_sha256": "b4d1c8176810630268759cedc909cd1042b063b81a14a01175b1a36f174d5c0f" + }, + { + "slice": "DB-EMBEDDING-EVIDENCE-TRANSPORT", + "available": true, + "verified": true, + "path_count": 28, + "paths_sha256": "a9e3eb9762bc3d597ac277c653ad30d10149cb10443fb0b0fc3edd21093c8217" + }, + { + "slice": "DB-BULKOPS", + "available": true, + "verified": true, + "path_count": 13, + "paths_sha256": "1c53f8aed2d97d91f9103a21d214856c5bb0f59dce6dcc0264e1ce04693c869a" + }, + { + "slice": "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK", + "available": true, + "verified": true, + "path_count": 38, + "paths_sha256": "39a32b36dfac7f1148649ca092abc23320fda34e2535a828778e228aa8c0230d" + }, + { + "slice": "DB-CRYSTALLIZATION", + "available": true, + "verified": true, + "path_count": 1, + "paths_sha256": "8428c4f86e06bdab5367fd6678decdb49b8aa23a41f593b246b7e541ec84ab23" + }, + { + "slice": "SECURITY-TOOLCHAIN", + "available": true, + "verified": true, + "path_count": 3, + "paths_sha256": "5e49ddf6f66cc54d25f31cecd2fae96554d760f8c722f1c113a9d8e695468143" + }, + { + "slice": "SECURITY-PROJECT-IDENTITY", + "available": true, + "verified": true, + "path_count": 14, + "paths_sha256": "046360929bec61f3cbda420754aaab7056badf467d5e5c2c2e2fce68e2f5e21f" + }, + { + "slice": "DB-TEST-POOL-HYGIENE", + "available": true, + "verified": true, + "path_count": 13, + "paths_sha256": "5b30cedca485ce89ce38bdb665413be59a3e2639e01e04c600172e68e503f3a0" + } + ], + "pending_probe": null, + "errors": [] +} diff --git a/.agent/specs/release-gates-r9/evidence/release-gates/active-candidate-authority-harness.json b/.agent/specs/release-gates-r9/evidence/release-gates/active-candidate-authority-harness.json new file mode 100644 index 00000000..74bee2e8 --- /dev/null +++ b/.agent/specs/release-gates-r9/evidence/release-gates/active-candidate-authority-harness.json @@ -0,0 +1,152 @@ +{ + "schema_version": 1, + "gate": "active-candidate-path-authority", + "verdict": "PASS", + "started_at": "2026-07-10T22:32:02.6111211+00:00", + "finished_at": "2026-07-10T22:32:03.2025280+00:00", + "duration_seconds": 0.591, + "contract": { + "path": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates-r9-maker\\.agent\\plans\\2026-07-10-engram-production-ready-active-diff-contracts.json", + "expected_sha256": "d8e7818d84831f047d30a8493f9c7d2a8cea288d5c381735960d11dd02988ae5", + "observed_sha256": "d8e7818d84831f047d30a8493f9c7d2a8cea288d5c381735960d11dd02988ae5", + "hash_match": true + }, + "plan": { + "path": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates-r9-maker\\.agent\\plans\\2026-07-10-engram-production-ready-master-plan.md", + "expected_sha256": "4388337722e57b48e93515008e4220d6cd2c83de695c4c449387f071c59fb96f", + "observed_sha256": "4388337722e57b48e93515008e4220d6cd2c83de695c4c449387f071c59fb96f", + "hash_match": true + }, + "source_snapshot": { + "freshness": "HISTORICAL_DISCOVERY_ONLY", + "used_for_acceptance": false, + "mutable_register_read": false, + "observed_sha256": "29865adc048cb3f64ec7d133b3bd901c95115e4ae5b95c98927607de889f77d4" + }, + "counts": { + "candidates": 9, + "paths": 123.0, + "pending_contracts": 2, + "current_candidates": 6, + "rejected_candidates": 3, + "git_verified": 0, + "errors": 0 + }, + "candidates": [ + { + "slice": "DB-AUTH", + "status_class": "current-ready", + "branch": "work/prc-db-auth", + "base": "b0c4ab4c07a4c6f512728da52b2e132bacd0289c", + "head": "da97c88be6753703bac112be8431dc373e4d9dda", + "path_count": 5, + "paths_sha256": "7a678254366c2bdcf5feba8e25ce1151a69ae0a0240d68e3af3cd15ffa1b9d9e" + }, + { + "slice": "DB-EMBEDDING-STATS", + "status_class": "current-checker-active", + "branch": "work/prc-db-embedding-stats", + "base": "dc891b2d72b1fd63b83e4a630a249241fc389151", + "head": "38d6a4fb7ff5f5ae3b6c0066c0a1b806421137df", + "path_count": 8, + "paths_sha256": "b4d1c8176810630268759cedc909cd1042b063b81a14a01175b1a36f174d5c0f" + }, + { + "slice": "DB-EMBEDDING-EVIDENCE-TRANSPORT", + "status_class": "rejected-evidence-revision", + "branch": "work/prc-db-embedding-evidence-transport-r5", + "base": "369951b61ee07cb0c405558e0f677cd1c9e90362", + "head": "a538f6224ef31f612152470a4ecd45e78ff9d0f2", + "path_count": 28, + "paths_sha256": "a9e3eb9762bc3d597ac277c653ad30d10149cb10443fb0b0fc3edd21093c8217" + }, + { + "slice": "DB-BULKOPS", + "status_class": "rejected-historical", + "branch": "work/prc-db-bulkops", + "base": "6ea10496aa127fba7fdb194875044e770d0a1d8c", + "head": "68b2ce5835c7c6efdf1c68da9eedcb8d9c3837ef", + "path_count": 13, + "paths_sha256": "1c53f8aed2d97d91f9103a21d214856c5bb0f59dce6dcc0264e1ce04693c869a" + }, + { + "slice": "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK", + "status_class": "current-ready-with-concerns", + "branch": "work/prc-db-bulkops", + "base": "68b2ce5835c7c6efdf1c68da9eedcb8d9c3837ef", + "head": "bd68c05baf4b7250096dd84f56bebea2aa555970", + "path_count": 38, + "paths_sha256": "39a32b36dfac7f1148649ca092abc23320fda34e2535a828778e228aa8c0230d" + }, + { + "slice": "DB-CRYSTALLIZATION", + "status_class": "current-ready-with-concerns", + "branch": "work/prc-db-crystallization", + "base": "dc891b2d72b1fd63b83e4a630a249241fc389151", + "head": "2ab6211494e51aeb7b787a99e78cff8bf2d5694a", + "path_count": 1, + "paths_sha256": "8428c4f86e06bdab5367fd6678decdb49b8aa23a41f593b246b7e541ec84ab23" + }, + { + "slice": "SECURITY-TOOLCHAIN", + "status_class": "current-ready", + "branch": "work/prc-security-toolchain", + "base": "dc891b2d72b1fd63b83e4a630a249241fc389151", + "head": "b0955dfd61b4ea7364f6d400579247b475a1a680", + "path_count": 3, + "paths_sha256": "5e49ddf6f66cc54d25f31cecd2fae96554d760f8c722f1c113a9d8e695468143" + }, + { + "slice": "SECURITY-PROJECT-IDENTITY", + "status_class": "rejected-security-r3", + "branch": "work/prc-security-project-identity-r3", + "base": "9e2ce4e58a5cded69660ca9ac532d2167f315bb2", + "head": "38344455754fe503acbd79d2134141f996adff7f", + "path_count": 14, + "paths_sha256": "046360929bec61f3cbda420754aaab7056badf467d5e5c2c2e2fce68e2f5e21f" + }, + { + "slice": "DB-TEST-POOL-HYGIENE", + "status_class": "current-ready-for-check", + "branch": "work/prc-db-test-pool-hygiene-evidence-r2", + "base": "276337b3e96aa5af6d2e7dd9a0002ff957e5ffc9", + "head": "68242c48aaad62ec087166eeb9ea32f14d189450", + "path_count": 13, + "paths_sha256": "5b30cedca485ce89ce38bdb665413be59a3e2639e01e04c600172e68e503f3a0" + } + ], + "pending_contracts": [ + { + "slice": "DB-EMBEDDING-EVIDENCE-TRANSPORT", + "branch": "work/prc-db-embedding-evidence-transport-r6", + "base_anchor": "a538f6224ef31f612152470a4ecd45e78ff9d0f2", + "allowed_exact_paths": [], + "effective_agent_declarations": [ + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/**", + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/**", + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4/**", + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/**", + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/**", + ".agent/specs/db-embedding-stats-evidence-transport/evidence/**" + ], + "requires_final_exact_diff_contract": true + }, + { + "slice": "SECURITY-PROJECT-IDENTITY", + "branch": "work/prc-security-project-identity-r4", + "base_anchor": "38344455754fe503acbd79d2134141f996adff7f", + "allowed_exact_paths": [ + "internal/proxy/identity_process_test.go", + "internal/proxy/identity_test.go" + ], + "effective_agent_declarations": [ + ".agent/specs/security-project-identity/evidence/**", + ".agent/reports/evidence/production-ready/security-project-identity/**" + ], + "requires_final_exact_diff_contract": true + } + ], + "git_verification": [], + "pending_probe": null, + "errors": [] +} diff --git a/.agent/specs/release-gates-r9/evidence/release-gates/critical-suite/r9-maker/commands.json b/.agent/specs/release-gates-r9/evidence/release-gates/critical-suite/r9-maker/commands.json new file mode 100644 index 00000000..466b90e0 --- /dev/null +++ b/.agent/specs/release-gates-r9/evidence/release-gates/critical-suite/r9-maker/commands.json @@ -0,0 +1,43 @@ +[ + { + "name": "critical-go-test", + "executable": "C:\\Program Files\\Go\\bin\\go.exe", + "arguments": [ + "test", + "-tags=critical", + "-json", + "./tests/critical/...", + "-count=1" + ], + "command": "\"C:\\Program Files\\Go\\bin\\go.exe\" test -tags=critical -json ./tests/critical/... -count=1", + "started_at": "2026-07-10T22:24:40.8464328+00:00", + "finished_at": "2026-07-10T22:24:46.4502611+00:00", + "duration_seconds": 5.604, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates-r9-maker\\.agent\\specs\\release-gates-r9\\evidence\\release-gates\\critical-suite\\r9-maker\\go-test.stdout.jsonl", + "stderr": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates-r9-maker\\.agent\\specs\\release-gates-r9\\evidence\\release-gates\\critical-suite\\r9-maker\\go-test.stderr.log" + }, + { + "name": "critical-json-parser", + "executable": "C:\\Program Files\\PowerShell\\7\\pwsh.exe", + "arguments": [ + "-NoProfile", + "-File", + "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates-r9-maker\\scripts\\production-gates\\assert-go-test-json.ps1", + "-InputPath", + ".agent\\specs\\release-gates-r9\\evidence\\release-gates\\critical-suite\\r9-maker\\go-test.stdout.jsonl", + "-SummaryPath", + ".agent\\specs\\release-gates-r9\\evidence\\release-gates\\critical-suite\\r9-maker\\go-test-summary.json", + "-FailOnUnexpectedSkip" + ], + "command": "\"C:\\Program Files\\PowerShell\\7\\pwsh.exe\" -NoProfile -File \"D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates-r9-maker\\scripts\\production-gates\\assert-go-test-json.ps1\" -InputPath \".agent\\specs\\release-gates-r9\\evidence\\release-gates\\critical-suite\\r9-maker\\go-test.stdout.jsonl\" -SummaryPath \".agent\\specs\\release-gates-r9\\evidence\\release-gates\\critical-suite\\r9-maker\\go-test-summary.json\" -FailOnUnexpectedSkip", + "started_at": "2026-07-10T22:24:46.4644807+00:00", + "finished_at": "2026-07-10T22:24:46.9765300+00:00", + "duration_seconds": 0.512, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates-r9-maker\\.agent\\specs\\release-gates-r9\\evidence\\release-gates\\critical-suite\\r9-maker\\json-parser.stdout.log", + "stderr": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates-r9-maker\\.agent\\specs\\release-gates-r9\\evidence\\release-gates\\critical-suite\\r9-maker\\json-parser.stderr.log" + } +] diff --git a/.agent/specs/release-gates-r9/evidence/release-gates/critical-suite/r9-maker/go-test-summary.json b/.agent/specs/release-gates-r9/evidence/release-gates/critical-suite/r9-maker/go-test-summary.json new file mode 100644 index 00000000..9919aef4 --- /dev/null +++ b/.agent/specs/release-gates-r9/evidence/release-gates/critical-suite/r9-maker/go-test-summary.json @@ -0,0 +1,88 @@ +{ + "schema_version": 1, + "verdict": "PASS", + "input_path": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates-r9-maker\\.agent\\specs\\release-gates-r9\\evidence\\release-gates\\critical-suite\\r9-maker\\go-test.stdout.jsonl", + "fail_on_unexpected_skip": true, + "allowed_skip_identities": [], + "counts": { + "packages": 1, + "tests": 7, + "passed": 7, + "failed": 0, + "skipped": 0, + "no_tests": 0, + "zero_tests": 0, + "incomplete": 0, + "unexpected_skips": 0, + "malformed_lines": 0 + }, + "packages": [ + { + "package": "github.com/thebtf/engram/tests/critical", + "outcome": "pass", + "elapsed_seconds": 0.164, + "last_output": "ok \tgithub.com/thebtf/engram/tests/critical\t0.164s", + "tests_observed": 7 + } + ], + "tests": [ + { + "package": "github.com/thebtf/engram/tests/critical", + "test": "TestCritical_AuthTwoTier", + "outcome": "pass", + "elapsed_seconds": 0.01, + "last_output": "--- PASS: TestCritical_AuthTwoTier (0.01s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/tests/critical", + "test": "TestCritical_AuthTwoTier/anti-stub:_stubbed_validator_flips_success_assertions", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestCritical_AuthTwoTier/anti-stub:_stubbed_validator_flips_success_assertions (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/tests/critical", + "test": "TestCritical_AuthTwoTier/gRPC_accepts_dashboard-issued_keycard", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestCritical_AuthTwoTier/gRPC_accepts_dashboard-issued_keycard (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/tests/critical", + "test": "TestCritical_AuthTwoTier/gRPC_accepts_operator_key", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestCritical_AuthTwoTier/gRPC_accepts_operator_key (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/tests/critical", + "test": "TestCritical_AuthTwoTier/gRPC_rejects_garbage_bearer", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestCritical_AuthTwoTier/gRPC_rejects_garbage_bearer (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/tests/critical", + "test": "TestCritical_AuthTwoTier/gRPC_rejects_missing_bearer", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestCritical_AuthTwoTier/gRPC_rejects_missing_bearer (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/tests/critical", + "test": "TestCritical_AuthTwoTier/HTTP_bearer_arm:_master_+_keycard_accepted,_garbage_rejected", + "outcome": "pass", + "elapsed_seconds": 0.01, + "last_output": "--- PASS: TestCritical_AuthTwoTier/HTTP_bearer_arm:_master_+_keycard_accepted,_garbage_rejected (0.01s)", + "skip_allowed": false + } + ], + "unexpected_skips": [], + "errors": [] +} diff --git a/.agent/specs/release-gates-r9/evidence/release-gates/critical-suite/r9-maker/go-test.stderr.log b/.agent/specs/release-gates-r9/evidence/release-gates/critical-suite/r9-maker/go-test.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/specs/release-gates-r9/evidence/release-gates/critical-suite/r9-maker/go-test.stdout.jsonl b/.agent/specs/release-gates-r9/evidence/release-gates/critical-suite/r9-maker/go-test.stdout.jsonl new file mode 100644 index 00000000..08a8d765 --- /dev/null +++ b/.agent/specs/release-gates-r9/evidence/release-gates/critical-suite/r9-maker/go-test.stdout.jsonl @@ -0,0 +1,32 @@ +{"Time":"2026-07-11T01:24:46.1330147+03:00","Action":"start","Package":"github.com/thebtf/engram/tests/critical"} +{"Time":"2026-07-11T01:24:46.2771622+03:00","Action":"run","Package":"github.com/thebtf/engram/tests/critical","Test":"TestCritical_AuthTwoTier"} +{"Time":"2026-07-11T01:24:46.2771622+03:00","Action":"output","Package":"github.com/thebtf/engram/tests/critical","Test":"TestCritical_AuthTwoTier","Output":"=== RUN TestCritical_AuthTwoTier\n"} +{"Time":"2026-07-11T01:24:46.278162+03:00","Action":"run","Package":"github.com/thebtf/engram/tests/critical","Test":"TestCritical_AuthTwoTier/gRPC_accepts_operator_key"} +{"Time":"2026-07-11T01:24:46.278162+03:00","Action":"output","Package":"github.com/thebtf/engram/tests/critical","Test":"TestCritical_AuthTwoTier/gRPC_accepts_operator_key","Output":"=== RUN TestCritical_AuthTwoTier/gRPC_accepts_operator_key\n"} +{"Time":"2026-07-11T01:24:46.2806617+03:00","Action":"output","Package":"github.com/thebtf/engram/tests/critical","Test":"TestCritical_AuthTwoTier/gRPC_accepts_operator_key","Output":"--- PASS: TestCritical_AuthTwoTier/gRPC_accepts_operator_key (0.00s)\n"} +{"Time":"2026-07-11T01:24:46.2806617+03:00","Action":"pass","Package":"github.com/thebtf/engram/tests/critical","Test":"TestCritical_AuthTwoTier/gRPC_accepts_operator_key","Elapsed":0} +{"Time":"2026-07-11T01:24:46.2806617+03:00","Action":"run","Package":"github.com/thebtf/engram/tests/critical","Test":"TestCritical_AuthTwoTier/gRPC_accepts_dashboard-issued_keycard"} +{"Time":"2026-07-11T01:24:46.2806617+03:00","Action":"output","Package":"github.com/thebtf/engram/tests/critical","Test":"TestCritical_AuthTwoTier/gRPC_accepts_dashboard-issued_keycard","Output":"=== RUN TestCritical_AuthTwoTier/gRPC_accepts_dashboard-issued_keycard\n"} +{"Time":"2026-07-11T01:24:46.2826617+03:00","Action":"output","Package":"github.com/thebtf/engram/tests/critical","Test":"TestCritical_AuthTwoTier/gRPC_accepts_dashboard-issued_keycard","Output":"--- PASS: TestCritical_AuthTwoTier/gRPC_accepts_dashboard-issued_keycard (0.00s)\n"} +{"Time":"2026-07-11T01:24:46.2826617+03:00","Action":"pass","Package":"github.com/thebtf/engram/tests/critical","Test":"TestCritical_AuthTwoTier/gRPC_accepts_dashboard-issued_keycard","Elapsed":0} +{"Time":"2026-07-11T01:24:46.2826617+03:00","Action":"run","Package":"github.com/thebtf/engram/tests/critical","Test":"TestCritical_AuthTwoTier/gRPC_rejects_garbage_bearer"} +{"Time":"2026-07-11T01:24:46.2826617+03:00","Action":"output","Package":"github.com/thebtf/engram/tests/critical","Test":"TestCritical_AuthTwoTier/gRPC_rejects_garbage_bearer","Output":"=== RUN TestCritical_AuthTwoTier/gRPC_rejects_garbage_bearer\n"} +{"Time":"2026-07-11T01:24:46.2831624+03:00","Action":"output","Package":"github.com/thebtf/engram/tests/critical","Test":"TestCritical_AuthTwoTier/gRPC_rejects_garbage_bearer","Output":"--- PASS: TestCritical_AuthTwoTier/gRPC_rejects_garbage_bearer (0.00s)\n"} +{"Time":"2026-07-11T01:24:46.2831624+03:00","Action":"pass","Package":"github.com/thebtf/engram/tests/critical","Test":"TestCritical_AuthTwoTier/gRPC_rejects_garbage_bearer","Elapsed":0} +{"Time":"2026-07-11T01:24:46.2831624+03:00","Action":"run","Package":"github.com/thebtf/engram/tests/critical","Test":"TestCritical_AuthTwoTier/gRPC_rejects_missing_bearer"} +{"Time":"2026-07-11T01:24:46.2831624+03:00","Action":"output","Package":"github.com/thebtf/engram/tests/critical","Test":"TestCritical_AuthTwoTier/gRPC_rejects_missing_bearer","Output":"=== RUN TestCritical_AuthTwoTier/gRPC_rejects_missing_bearer\n"} +{"Time":"2026-07-11T01:24:46.2836618+03:00","Action":"output","Package":"github.com/thebtf/engram/tests/critical","Test":"TestCritical_AuthTwoTier/gRPC_rejects_missing_bearer","Output":"--- PASS: TestCritical_AuthTwoTier/gRPC_rejects_missing_bearer (0.00s)\n"} +{"Time":"2026-07-11T01:24:46.2836618+03:00","Action":"pass","Package":"github.com/thebtf/engram/tests/critical","Test":"TestCritical_AuthTwoTier/gRPC_rejects_missing_bearer","Elapsed":0} +{"Time":"2026-07-11T01:24:46.2836618+03:00","Action":"run","Package":"github.com/thebtf/engram/tests/critical","Test":"TestCritical_AuthTwoTier/HTTP_bearer_arm:_master_+_keycard_accepted,_garbage_rejected"} +{"Time":"2026-07-11T01:24:46.2836618+03:00","Action":"output","Package":"github.com/thebtf/engram/tests/critical","Test":"TestCritical_AuthTwoTier/HTTP_bearer_arm:_master_+_keycard_accepted,_garbage_rejected","Output":"=== RUN TestCritical_AuthTwoTier/HTTP_bearer_arm:_master_+_keycard_accepted,_garbage_rejected\n"} +{"Time":"2026-07-11T01:24:46.2886632+03:00","Action":"output","Package":"github.com/thebtf/engram/tests/critical","Test":"TestCritical_AuthTwoTier/HTTP_bearer_arm:_master_+_keycard_accepted,_garbage_rejected","Output":"--- PASS: TestCritical_AuthTwoTier/HTTP_bearer_arm:_master_+_keycard_accepted,_garbage_rejected (0.01s)\n"} +{"Time":"2026-07-11T01:24:46.2886632+03:00","Action":"pass","Package":"github.com/thebtf/engram/tests/critical","Test":"TestCritical_AuthTwoTier/HTTP_bearer_arm:_master_+_keycard_accepted,_garbage_rejected","Elapsed":0.01} +{"Time":"2026-07-11T01:24:46.2891643+03:00","Action":"run","Package":"github.com/thebtf/engram/tests/critical","Test":"TestCritical_AuthTwoTier/anti-stub:_stubbed_validator_flips_success_assertions"} +{"Time":"2026-07-11T01:24:46.2891643+03:00","Action":"output","Package":"github.com/thebtf/engram/tests/critical","Test":"TestCritical_AuthTwoTier/anti-stub:_stubbed_validator_flips_success_assertions","Output":"=== RUN TestCritical_AuthTwoTier/anti-stub:_stubbed_validator_flips_success_assertions\n"} +{"Time":"2026-07-11T01:24:46.2891643+03:00","Action":"output","Package":"github.com/thebtf/engram/tests/critical","Test":"TestCritical_AuthTwoTier/anti-stub:_stubbed_validator_flips_success_assertions","Output":"--- PASS: TestCritical_AuthTwoTier/anti-stub:_stubbed_validator_flips_success_assertions (0.00s)\n"} +{"Time":"2026-07-11T01:24:46.2896626+03:00","Action":"pass","Package":"github.com/thebtf/engram/tests/critical","Test":"TestCritical_AuthTwoTier/anti-stub:_stubbed_validator_flips_success_assertions","Elapsed":0} +{"Time":"2026-07-11T01:24:46.2896626+03:00","Action":"output","Package":"github.com/thebtf/engram/tests/critical","Test":"TestCritical_AuthTwoTier","Output":"--- PASS: TestCritical_AuthTwoTier (0.01s)\n"} +{"Time":"2026-07-11T01:24:46.2896626+03:00","Action":"pass","Package":"github.com/thebtf/engram/tests/critical","Test":"TestCritical_AuthTwoTier","Elapsed":0.01} +{"Time":"2026-07-11T01:24:46.2896626+03:00","Action":"output","Package":"github.com/thebtf/engram/tests/critical","Output":"PASS\n"} +{"Time":"2026-07-11T01:24:46.296662+03:00","Action":"output","Package":"github.com/thebtf/engram/tests/critical","Output":"ok \tgithub.com/thebtf/engram/tests/critical\t0.164s\n"} +{"Time":"2026-07-11T01:24:46.296662+03:00","Action":"pass","Package":"github.com/thebtf/engram/tests/critical","Elapsed":0.164} diff --git a/.agent/specs/release-gates-r9/evidence/release-gates/critical-suite/r9-maker/json-parser.stderr.log b/.agent/specs/release-gates-r9/evidence/release-gates/critical-suite/r9-maker/json-parser.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/specs/release-gates-r9/evidence/release-gates/critical-suite/r9-maker/json-parser.stdout.log b/.agent/specs/release-gates-r9/evidence/release-gates/critical-suite/r9-maker/json-parser.stdout.log new file mode 100644 index 00000000..529f8f60 --- /dev/null +++ b/.agent/specs/release-gates-r9/evidence/release-gates/critical-suite/r9-maker/json-parser.stdout.log @@ -0,0 +1,2 @@ +go test JSON verdict=PASS packages=1 tests=7 passed=7 failed=0 skipped=0 unexpected_skips=0 malformed=0 +summary=D:\Dev\engram\.agent\worktrees\prc-release-gates-r9-maker\.agent\specs\release-gates-r9\evidence\release-gates\critical-suite\r9-maker\go-test-summary.json diff --git a/.agent/specs/release-gates-r9/evidence/release-gates/critical-suite/r9-maker/summary.json b/.agent/specs/release-gates-r9/evidence/release-gates/critical-suite/r9-maker/summary.json new file mode 100644 index 00000000..0c4cc393 --- /dev/null +++ b/.agent/specs/release-gates-r9/evidence/release-gates/critical-suite/r9-maker/summary.json @@ -0,0 +1,38 @@ +{ + "schema_version": 1, + "gate": "critical-suite", + "run_id": "r9-maker", + "started_at": "2026-07-10T22:24:40.4896944+00:00", + "finished_at": "2026-07-10T22:24:46.9930639+00:00", + "duration_seconds": 6.503, + "verdict": "PASS", + "config": { + "path": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates-r9-maker\\.agent\\critical-suite.config.yaml", + "sha256": "3F1DF7569119B95A05FD9D61FC0479A79150747B38EFB5A10C45AF511E18268A", + "command": "go test -tags=critical -json ./tests/critical/... -count=1" + }, + "run_pattern": "", + "allowed_skip_identities": null, + "matched_test_files": 1, + "matched_go_files": 1, + "go_test_exit": 0, + "json_parser_exit": 0, + "json_summary": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates-r9-maker\\.agent\\specs\\release-gates-r9\\evidence\\release-gates\\critical-suite\\r9-maker\\go-test-summary.json", + "counts": { + "packages": 1, + "tests": 7, + "passed": 7, + "failed": 0, + "skipped": 0, + "no_tests": 0, + "zero_tests": 0, + "incomplete": 0, + "unexpected_skips": 0, + "malformed_lines": 0 + }, + "child_commands": 2, + "nonzero_child_commands": 0, + "commands": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates-r9-maker\\.agent\\specs\\release-gates-r9\\evidence\\release-gates\\critical-suite\\r9-maker\\commands.json", + "errors": [], + "artifact_directory": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates-r9-maker\\.agent\\specs\\release-gates-r9\\evidence\\release-gates\\critical-suite\\r9-maker" +} diff --git a/.agent/specs/release-gates-r9/evidence/release-gates/demolition-zero-declarations-clear-fail.json b/.agent/specs/release-gates-r9/evidence/release-gates/demolition-zero-declarations-clear-fail.json new file mode 100644 index 00000000..9e469c3c --- /dev/null +++ b/.agent/specs/release-gates-r9/evidence/release-gates/demolition-zero-declarations-clear-fail.json @@ -0,0 +1,129 @@ +{ + "schema_version": 2, + "gate": "plan-path-ownership", + "mode": "Diff", + "verdict": "FAIL", + "started_at": "2026-07-10T22:32:03.9019051+00:00", + "finished_at": "2026-07-10T22:32:08.9051704+00:00", + "duration_seconds": 5.003, + "plan": { + "path": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates-r9-maker\\.agent\\plans\\2026-07-10-engram-production-ready-master-plan.md", + "expected_sha256": "4388337722e57b48e93515008e4220d6cd2c83de695c4c449387f071c59fb96f", + "observed_sha256": "4388337722e57b48e93515008e4220d6cd2c83de695c4c449387f071c59fb96f", + "hash_match": true, + "ledger_verdict": "PASS" + }, + "state": { + "path": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates-r9-maker\\.agent\\plans\\2026-07-10-engram-production-ready-ownership-state.json", + "sha256": "e41f52fbafa317eb1571c76a7d1de9add543da38a1b2471dbe587a849b21c032", + "verdict": "PASS", + "plan_sha256": "4388337722e57b48e93515008e4220d6cd2c83de695c4c449387f071c59fb96f" + }, + "scope_map": { + "path": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates-r9-maker\\.agent\\plans\\2026-07-10-engram-production-ready-scope-map.json", + "expected_sha256": "fb170d59f3072117489402fd347cd1432c40adbc842811f92227498bcbc92693", + "observed_sha256": "fb170d59f3072117489402fd347cd1432c40adbc842811f92227498bcbc92693", + "verdict": "PASS", + "entries": 67, + "unique_slices": 67 + }, + "live_register": { + "supplied": false, + "path": "", + "sha256": null, + "checked": false, + "rows": 0 + }, + "slice": { + "name": "DEMOLITION-SKIP-CLASSIFICATION", + "row_count": 0, + "declarations": [], + "evidence_namespace": null, + "report_namespace": null + }, + "git": { + "repository": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates-r9-maker", + "requested_base": "4812589b9920c187a92a03d210d2e9d5eb53862f", + "resolved_base": "4812589b9920c187a92a03d210d2e9d5eb53862f", + "requested_head": "d59d1605969b1f567506e96ded524dfd1e4be08a", + "resolved_head": "d59d1605969b1f567506e96ded524dfd1e4be08a", + "base_is_ancestor": true, + "name_status_command": "git -c core.quotepath=false diff --name-status --find-renames --find-copies 4812589b9920c187a92a03d210d2e9d5eb53862f..d59d1605969b1f567506e96ded524dfd1e4be08a --", + "raw_name_status": [ + "A\t.agent/e/rg4/r5-maker/SHA256SUMS", + "A\t.agent/e/rg4/r5-maker/fail.json", + "A\t.agent/e/rg4/r5-maker/manifest.json", + "A\t.agent/e/rg4/r5-maker/proof.json", + "A\t.agent/e/rg4/r5-maker/report.md", + "M\t.github/workflows/test.yml", + "M\tscripts/production-gates/run-db-suite.ps1" + ] + }, + "counts": { + "diff_entries": 7, + "changed_paths": 0, + "violations": 0, + "errors": 1 + }, + "diff_entries": [ + { + "status": "A", + "paths": [ + ".agent/e/rg4/r5-maker/SHA256SUMS" + ], + "raw": "A\t.agent/e/rg4/r5-maker/SHA256SUMS" + }, + { + "status": "A", + "paths": [ + ".agent/e/rg4/r5-maker/fail.json" + ], + "raw": "A\t.agent/e/rg4/r5-maker/fail.json" + }, + { + "status": "A", + "paths": [ + ".agent/e/rg4/r5-maker/manifest.json" + ], + "raw": "A\t.agent/e/rg4/r5-maker/manifest.json" + }, + { + "status": "A", + "paths": [ + ".agent/e/rg4/r5-maker/proof.json" + ], + "raw": "A\t.agent/e/rg4/r5-maker/proof.json" + }, + { + "status": "A", + "paths": [ + ".agent/e/rg4/r5-maker/report.md" + ], + "raw": "A\t.agent/e/rg4/r5-maker/report.md" + }, + { + "status": "M", + "paths": [ + ".github/workflows/test.yml" + ], + "raw": "M\t.github/workflows/test.yml" + }, + { + "status": "M", + "paths": [ + "scripts/production-gates/run-db-suite.ps1" + ], + "raw": "M\tscripts/production-gates/run-db-suite.ps1" + } + ], + "changed_paths": [], + "violations": [], + "epoch_authority": { + "verdict": "PASS", + "evaluated": [], + "errors": [] + }, + "errors": [ + "Diff mode requires exactly one maker row for slice 'DEMOLITION-SKIP-CLASSIFICATION'; found 0" + ] +} diff --git a/.agent/specs/release-gates-r9/evidence/release-gates/diff-db-embedding-r5-replay.json b/.agent/specs/release-gates-r9/evidence/release-gates/diff-db-embedding-r5-replay.json new file mode 100644 index 00000000..f1d5ebc1 --- /dev/null +++ b/.agent/specs/release-gates-r9/evidence/release-gates/diff-db-embedding-r5-replay.json @@ -0,0 +1,685 @@ +{ + "schema_version": 2, + "gate": "plan-path-ownership", + "mode": "Diff", + "verdict": "PASS", + "started_at": "2026-07-10T22:23:54.5775508+00:00", + "finished_at": "2026-07-10T22:23:59.9241943+00:00", + "duration_seconds": 5.347, + "plan": { + "path": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates-r9-maker\\.agent\\plans\\2026-07-10-engram-production-ready-master-plan.md", + "expected_sha256": "4388337722e57b48e93515008e4220d6cd2c83de695c4c449387f071c59fb96f", + "observed_sha256": "4388337722e57b48e93515008e4220d6cd2c83de695c4c449387f071c59fb96f", + "hash_match": true, + "ledger_verdict": "PASS" + }, + "state": { + "path": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates-r9-maker\\.agent\\plans\\2026-07-10-engram-production-ready-ownership-state.json", + "sha256": "e41f52fbafa317eb1571c76a7d1de9add543da38a1b2471dbe587a849b21c032", + "verdict": "PASS", + "plan_sha256": "4388337722e57b48e93515008e4220d6cd2c83de695c4c449387f071c59fb96f" + }, + "scope_map": { + "path": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates-r9-maker\\.agent\\plans\\2026-07-10-engram-production-ready-scope-map.json", + "expected_sha256": "fb170d59f3072117489402fd347cd1432c40adbc842811f92227498bcbc92693", + "observed_sha256": "fb170d59f3072117489402fd347cd1432c40adbc842811f92227498bcbc92693", + "verdict": "PASS", + "entries": 67, + "unique_slices": 67 + }, + "live_register": { + "supplied": false, + "path": "", + "sha256": null, + "checked": false, + "rows": 0 + }, + "slice": { + "name": "DB-EMBEDDING-EVIDENCE-TRANSPORT", + "row_count": 1, + "declarations": [ + { + "owner": "DB-EMBEDDING-EVIDENCE-TRANSPORT", + "branch": "work/prc-db-embedding-evidence-transport-r6", + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport", + "display": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/**", + "kind": "prefix", + "line": 20 + }, + { + "owner": "DB-EMBEDDING-EVIDENCE-TRANSPORT", + "branch": "work/prc-db-embedding-evidence-transport-r6", + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3", + "display": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/**", + "kind": "prefix", + "line": 20 + }, + { + "owner": "DB-EMBEDDING-EVIDENCE-TRANSPORT", + "branch": "work/prc-db-embedding-evidence-transport-r6", + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4", + "display": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4/**", + "kind": "prefix", + "line": 20 + }, + { + "owner": "DB-EMBEDDING-EVIDENCE-TRANSPORT", + "branch": "work/prc-db-embedding-evidence-transport-r6", + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5", + "display": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/**", + "kind": "prefix", + "line": 20 + }, + { + "owner": "DB-EMBEDDING-EVIDENCE-TRANSPORT", + "branch": "work/prc-db-embedding-evidence-transport-r6", + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6", + "display": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/**", + "kind": "prefix", + "line": 20 + }, + { + "owner": "DB-EMBEDDING-EVIDENCE-TRANSPORT", + "branch": "work/prc-db-embedding-evidence-transport-r6", + "path": ".agent/specs/db-embedding-stats-evidence-transport/evidence", + "display": ".agent/specs/db-embedding-stats-evidence-transport/evidence/**", + "kind": "prefix", + "line": 20 + } + ], + "evidence_namespace": { + "kind": "evidence", + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5", + "display": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/**", + "match_kind": "prefix", + "policy": "literal-row-exception" + }, + "report_namespace": { + "kind": "report", + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5", + "display": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/**", + "match_kind": "prefix", + "policy": "literal-row-exception" + } + }, + "git": { + "repository": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates-r9-maker", + "requested_base": "369951b61ee07cb0c405558e0f677cd1c9e90362", + "resolved_base": "369951b61ee07cb0c405558e0f677cd1c9e90362", + "requested_head": "a538f6224ef31f612152470a4ecd45e78ff9d0f2", + "resolved_head": "a538f6224ef31f612152470a4ecd45e78ff9d0f2", + "base_is_ancestor": true, + "name_status_command": "git -c core.quotepath=false diff --name-status --find-renames --find-copies 369951b61ee07cb0c405558e0f677cd1c9e90362..a538f6224ef31f612152470a4ecd45e78ff9d0f2 --", + "raw_name_status": [ + "M\t.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/R3-SHA256SUMS.txt", + "M\t.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/coverage-repeat.v1.json", + "M\t.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/maker-report.md", + "M\t.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/maker-summary.v1.json", + "M\t.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/verification-matrix.v1.json", + "M\t.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4/R4-SHA256SUMS.txt", + "M\t.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4/coverage-repeat.v1.json", + "M\t.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4/maker-report.md", + "M\t.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4/maker-summary.v1.json", + "M\t.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4/verification-matrix.v1.json", + "A\t.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/R5-SHA256SUMS.txt", + "A\t.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/coverage-capture.v1.json", + "A\t.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/coverage-repeat.v1.json", + "A\t.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/coverage-run-1.tap", + "A\t.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/coverage-run-2.tap", + "A\t.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/maker-report.md", + "A\t.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/maker-summary.v1.json", + "A\t.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/run-coverage-capture-verifier.cmd", + "A\t.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/verification-matrix.v1.json", + "A\t.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/verify-coverage-capture.cjs", + "M\t.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/ARTIFACTS.sha256", + "M\t.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/maker-report.md", + "M\t.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verification-observations.v1.json", + "M\t.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.test.cjs", + "M\t.agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R3.tdd.json", + "M\t.agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R4.tdd.json", + "A\t.agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R5.red.json", + "A\t.agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R5.tdd.json" + ] + }, + "counts": { + "diff_entries": 28, + "changed_paths": 28, + "violations": 0, + "errors": 0 + }, + "diff_entries": [ + { + "status": "M", + "paths": [ + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/R3-SHA256SUMS.txt" + ], + "raw": "M\t.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/R3-SHA256SUMS.txt" + }, + { + "status": "M", + "paths": [ + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/coverage-repeat.v1.json" + ], + "raw": "M\t.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/coverage-repeat.v1.json" + }, + { + "status": "M", + "paths": [ + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/maker-report.md" + ], + "raw": "M\t.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/maker-report.md" + }, + { + "status": "M", + "paths": [ + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/maker-summary.v1.json" + ], + "raw": "M\t.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/maker-summary.v1.json" + }, + { + "status": "M", + "paths": [ + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/verification-matrix.v1.json" + ], + "raw": "M\t.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/verification-matrix.v1.json" + }, + { + "status": "M", + "paths": [ + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4/R4-SHA256SUMS.txt" + ], + "raw": "M\t.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4/R4-SHA256SUMS.txt" + }, + { + "status": "M", + "paths": [ + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4/coverage-repeat.v1.json" + ], + "raw": "M\t.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4/coverage-repeat.v1.json" + }, + { + "status": "M", + "paths": [ + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4/maker-report.md" + ], + "raw": "M\t.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4/maker-report.md" + }, + { + "status": "M", + "paths": [ + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4/maker-summary.v1.json" + ], + "raw": "M\t.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4/maker-summary.v1.json" + }, + { + "status": "M", + "paths": [ + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4/verification-matrix.v1.json" + ], + "raw": "M\t.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4/verification-matrix.v1.json" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/R5-SHA256SUMS.txt" + ], + "raw": "A\t.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/R5-SHA256SUMS.txt" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/coverage-capture.v1.json" + ], + "raw": "A\t.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/coverage-capture.v1.json" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/coverage-repeat.v1.json" + ], + "raw": "A\t.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/coverage-repeat.v1.json" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/coverage-run-1.tap" + ], + "raw": "A\t.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/coverage-run-1.tap" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/coverage-run-2.tap" + ], + "raw": "A\t.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/coverage-run-2.tap" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/maker-report.md" + ], + "raw": "A\t.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/maker-report.md" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/maker-summary.v1.json" + ], + "raw": "A\t.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/maker-summary.v1.json" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/run-coverage-capture-verifier.cmd" + ], + "raw": "A\t.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/run-coverage-capture-verifier.cmd" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/verification-matrix.v1.json" + ], + "raw": "A\t.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/verification-matrix.v1.json" + }, + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/verify-coverage-capture.cjs" + ], + "raw": "A\t.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/verify-coverage-capture.cjs" + }, + { + "status": "M", + "paths": [ + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/ARTIFACTS.sha256" + ], + "raw": "M\t.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/ARTIFACTS.sha256" + }, + { + "status": "M", + "paths": [ + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/maker-report.md" + ], + "raw": "M\t.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/maker-report.md" + }, + { + "status": "M", + "paths": [ + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verification-observations.v1.json" + ], + "raw": "M\t.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verification-observations.v1.json" + }, + { + "status": "M", + "paths": [ + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.test.cjs" + ], + "raw": "M\t.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.test.cjs" + }, + { + "status": "M", + "paths": [ + ".agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R3.tdd.json" + ], + "raw": "M\t.agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R3.tdd.json" + }, + { + "status": "M", + "paths": [ + ".agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R4.tdd.json" + ], + "raw": "M\t.agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R4.tdd.json" + }, + { + "status": "A", + "paths": [ + ".agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R5.red.json" + ], + "raw": "A\t.agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R5.red.json" + }, + { + "status": "A", + "paths": [ + ".agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R5.tdd.json" + ], + "raw": "A\t.agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R5.tdd.json" + } + ], + "changed_paths": [ + { + "status": "M", + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/R3-SHA256SUMS.txt", + "allowed": true, + "allowed_by": [ + "slice-declaration" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/**" + ] + }, + { + "status": "M", + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/coverage-repeat.v1.json", + "allowed": true, + "allowed_by": [ + "slice-declaration" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/**" + ] + }, + { + "status": "M", + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/maker-report.md", + "allowed": true, + "allowed_by": [ + "slice-declaration" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/**" + ] + }, + { + "status": "M", + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/maker-summary.v1.json", + "allowed": true, + "allowed_by": [ + "slice-declaration" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/**" + ] + }, + { + "status": "M", + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/verification-matrix.v1.json", + "allowed": true, + "allowed_by": [ + "slice-declaration" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/**" + ] + }, + { + "status": "M", + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4/R4-SHA256SUMS.txt", + "allowed": true, + "allowed_by": [ + "slice-declaration" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4/**" + ] + }, + { + "status": "M", + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4/coverage-repeat.v1.json", + "allowed": true, + "allowed_by": [ + "slice-declaration" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4/**" + ] + }, + { + "status": "M", + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4/maker-report.md", + "allowed": true, + "allowed_by": [ + "slice-declaration" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4/**" + ] + }, + { + "status": "M", + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4/maker-summary.v1.json", + "allowed": true, + "allowed_by": [ + "slice-declaration" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4/**" + ] + }, + { + "status": "M", + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4/verification-matrix.v1.json", + "allowed": true, + "allowed_by": [ + "slice-declaration" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/R5-SHA256SUMS.txt", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace", + "report-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/coverage-capture.v1.json", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace", + "report-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/coverage-repeat.v1.json", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace", + "report-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/coverage-run-1.tap", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace", + "report-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/coverage-run-2.tap", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace", + "report-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/maker-report.md", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace", + "report-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/maker-summary.v1.json", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace", + "report-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/run-coverage-capture-verifier.cmd", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace", + "report-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/verification-matrix.v1.json", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace", + "report-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/**" + ] + }, + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/verify-coverage-capture.cjs", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace", + "report-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/**" + ] + }, + { + "status": "M", + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/ARTIFACTS.sha256", + "allowed": true, + "allowed_by": [ + "slice-declaration" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/**" + ] + }, + { + "status": "M", + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/maker-report.md", + "allowed": true, + "allowed_by": [ + "slice-declaration" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/**" + ] + }, + { + "status": "M", + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verification-observations.v1.json", + "allowed": true, + "allowed_by": [ + "slice-declaration" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/**" + ] + }, + { + "status": "M", + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.test.cjs", + "allowed": true, + "allowed_by": [ + "slice-declaration" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/**" + ] + }, + { + "status": "M", + "path": ".agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R3.tdd.json", + "allowed": true, + "allowed_by": [ + "slice-declaration" + ], + "ownership_matches": [ + ".agent/specs/db-embedding-stats-evidence-transport/evidence/**" + ] + }, + { + "status": "M", + "path": ".agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R4.tdd.json", + "allowed": true, + "allowed_by": [ + "slice-declaration" + ], + "ownership_matches": [ + ".agent/specs/db-embedding-stats-evidence-transport/evidence/**" + ] + }, + { + "status": "A", + "path": ".agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R5.red.json", + "allowed": true, + "allowed_by": [ + "slice-declaration" + ], + "ownership_matches": [ + ".agent/specs/db-embedding-stats-evidence-transport/evidence/**" + ] + }, + { + "status": "A", + "path": ".agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R5.tdd.json", + "allowed": true, + "allowed_by": [ + "slice-declaration" + ], + "ownership_matches": [ + ".agent/specs/db-embedding-stats-evidence-transport/evidence/**" + ] + } + ], + "violations": [], + "epoch_authority": { + "verdict": "PASS", + "evaluated": [], + "errors": [] + }, + "errors": [] +} diff --git a/.agent/specs/release-gates-r9/evidence/release-gates/diff-security-r3-replay.json b/.agent/specs/release-gates-r9/evidence/release-gates/diff-security-r3-replay.json new file mode 100644 index 00000000..68c66d71 --- /dev/null +++ b/.agent/specs/release-gates-r9/evidence/release-gates/diff-security-r3-replay.json @@ -0,0 +1,452 @@ +{ + "schema_version": 2, + "gate": "plan-path-ownership", + "mode": "Diff", + "verdict": "PASS", + "started_at": "2026-07-10T22:23:54.7087180+00:00", + "finished_at": "2026-07-10T22:23:59.9084100+00:00", + "duration_seconds": 5.2, + "plan": { + "path": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates-r9-maker\\.agent\\plans\\2026-07-10-engram-production-ready-master-plan.md", + "expected_sha256": "4388337722e57b48e93515008e4220d6cd2c83de695c4c449387f071c59fb96f", + "observed_sha256": "4388337722e57b48e93515008e4220d6cd2c83de695c4c449387f071c59fb96f", + "hash_match": true, + "ledger_verdict": "PASS" + }, + "state": { + "path": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates-r9-maker\\.agent\\plans\\2026-07-10-engram-production-ready-ownership-state.json", + "sha256": "e41f52fbafa317eb1571c76a7d1de9add543da38a1b2471dbe587a849b21c032", + "verdict": "PASS", + "plan_sha256": "4388337722e57b48e93515008e4220d6cd2c83de695c4c449387f071c59fb96f" + }, + "scope_map": { + "path": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates-r9-maker\\.agent\\plans\\2026-07-10-engram-production-ready-scope-map.json", + "expected_sha256": "fb170d59f3072117489402fd347cd1432c40adbc842811f92227498bcbc92693", + "observed_sha256": "fb170d59f3072117489402fd347cd1432c40adbc842811f92227498bcbc92693", + "verdict": "PASS", + "entries": 67, + "unique_slices": 67 + }, + "live_register": { + "supplied": false, + "path": "", + "sha256": null, + "checked": false, + "rows": 0 + }, + "slice": { + "name": "SECURITY-PROJECT-IDENTITY", + "row_count": 1, + "declarations": [ + { + "owner": "SECURITY-PROJECT-IDENTITY", + "branch": "work/prc-security-project-identity-r4", + "path": "internal/db/gorm/project_store.go", + "display": "internal/db/gorm/project_store.go", + "kind": "exact", + "line": 25 + }, + { + "owner": "SECURITY-PROJECT-IDENTITY", + "branch": "work/prc-security-project-identity-r4", + "path": "internal/db/gorm/project_identity_v2_test.go", + "display": "internal/db/gorm/project_identity_v2_test.go", + "kind": "exact", + "line": 25 + }, + { + "owner": "SECURITY-PROJECT-IDENTITY", + "branch": "work/prc-security-project-identity-r4", + "path": "internal/grpcserver/project_identity_v2_test.go", + "display": "internal/grpcserver/project_identity_v2_test.go", + "kind": "exact", + "line": 25 + }, + { + "owner": "SECURITY-PROJECT-IDENTITY", + "branch": "work/prc-security-project-identity-r4", + "path": "internal/proxy/identity.go", + "display": "internal/proxy/identity.go", + "kind": "exact", + "line": 25 + }, + { + "owner": "SECURITY-PROJECT-IDENTITY", + "branch": "work/prc-security-project-identity-r4", + "path": "internal/proxy/identity_test.go", + "display": "internal/proxy/identity_test.go", + "kind": "exact", + "line": 25 + }, + { + "owner": "SECURITY-PROJECT-IDENTITY", + "branch": "work/prc-security-project-identity-r4", + "path": "internal/proxy/identity_process_test.go", + "display": "internal/proxy/identity_process_test.go", + "kind": "exact", + "line": 25 + }, + { + "owner": "SECURITY-PROJECT-IDENTITY", + "branch": "work/prc-security-project-identity-r4", + "path": "plugin/engram/hooks/lib.js", + "display": "plugin/engram/hooks/lib.js", + "kind": "exact", + "line": 25 + }, + { + "owner": "SECURITY-PROJECT-IDENTITY", + "branch": "work/prc-security-project-identity-r4", + "path": "plugin/engram/hooks/project-identity-v2.test.js", + "display": "plugin/engram/hooks/project-identity-v2.test.js", + "kind": "exact", + "line": 25 + }, + { + "owner": "SECURITY-PROJECT-IDENTITY", + "branch": "work/prc-security-project-identity-r4", + "path": "plugin/openclaw-engram/src/identity.ts", + "display": "plugin/openclaw-engram/src/identity.ts", + "kind": "exact", + "line": 25 + }, + { + "owner": "SECURITY-PROJECT-IDENTITY", + "branch": "work/prc-security-project-identity-r4", + "path": "plugin/openclaw-engram/test/project-identity-v2.test.mjs", + "display": "plugin/openclaw-engram/test/project-identity-v2.test.mjs", + "kind": "exact", + "line": 25 + }, + { + "owner": "SECURITY-PROJECT-IDENTITY", + "branch": "work/prc-security-project-identity-r4", + "path": ".agent/specs/security-project-identity/evidence", + "display": ".agent/specs/security-project-identity/evidence/**", + "kind": "prefix", + "line": 25 + }, + { + "owner": "SECURITY-PROJECT-IDENTITY", + "branch": "work/prc-security-project-identity-r4", + "path": ".agent/reports/evidence/production-ready/security-project-identity", + "display": ".agent/reports/evidence/production-ready/security-project-identity/**", + "kind": "prefix", + "line": 25 + } + ], + "evidence_namespace": { + "kind": "evidence", + "path": ".agent/specs/security-project-identity/evidence", + "display": ".agent/specs/security-project-identity/evidence/**", + "match_kind": "prefix", + "policy": "literal-row-exception" + }, + "report_namespace": { + "kind": "report", + "path": ".agent/reports/evidence/production-ready/security-project-identity", + "display": ".agent/reports/evidence/production-ready/security-project-identity/**", + "match_kind": "prefix", + "policy": "literal-row-exception" + } + }, + "git": { + "repository": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates-r9-maker", + "requested_base": "9e2ce4e58a5cded69660ca9ac532d2167f315bb2", + "resolved_base": "9e2ce4e58a5cded69660ca9ac532d2167f315bb2", + "requested_head": "38344455754fe503acbd79d2134141f996adff7f", + "resolved_head": "38344455754fe503acbd79d2134141f996adff7f", + "base_is_ancestor": true, + "name_status_command": "git -c core.quotepath=false diff --name-status --find-renames --find-copies 9e2ce4e58a5cded69660ca9ac532d2167f315bb2..38344455754fe503acbd79d2134141f996adff7f --", + "raw_name_status": [ + "A\t.agent/reports/evidence/production-ready/security-project-identity/SECURITY-PROJECT-IDENTITY-R3-maker-report.md", + "A\t.agent/specs/security-project-identity/evidence/SECURITY-PROJECT-IDENTITY-R3.red.json", + "A\t.agent/specs/security-project-identity/evidence/SECURITY-PROJECT-IDENTITY-R3.tdd.json", + "A\t.agent/specs/security-project-identity/evidence/SECURITY-PROJECT-IDENTITY-R3.verification.json", + "M\t.agent/specs/security-project-identity/evidence/project-identity-v2-vectors.json", + "M\tinternal/db/gorm/project_identity_v2_test.go", + "M\tinternal/db/gorm/project_store.go", + "M\tinternal/grpcserver/project_identity_v2_test.go", + "M\tinternal/proxy/identity.go", + "M\tinternal/proxy/identity_test.go", + "M\tplugin/engram/hooks/lib.js", + "M\tplugin/engram/hooks/project-identity-v2.test.js", + "M\tplugin/openclaw-engram/src/identity.ts", + "M\tplugin/openclaw-engram/test/project-identity-v2.test.mjs" + ] + }, + "counts": { + "diff_entries": 14, + "changed_paths": 14, + "violations": 0, + "errors": 0 + }, + "diff_entries": [ + { + "status": "A", + "paths": [ + ".agent/reports/evidence/production-ready/security-project-identity/SECURITY-PROJECT-IDENTITY-R3-maker-report.md" + ], + "raw": "A\t.agent/reports/evidence/production-ready/security-project-identity/SECURITY-PROJECT-IDENTITY-R3-maker-report.md" + }, + { + "status": "A", + "paths": [ + ".agent/specs/security-project-identity/evidence/SECURITY-PROJECT-IDENTITY-R3.red.json" + ], + "raw": "A\t.agent/specs/security-project-identity/evidence/SECURITY-PROJECT-IDENTITY-R3.red.json" + }, + { + "status": "A", + "paths": [ + ".agent/specs/security-project-identity/evidence/SECURITY-PROJECT-IDENTITY-R3.tdd.json" + ], + "raw": "A\t.agent/specs/security-project-identity/evidence/SECURITY-PROJECT-IDENTITY-R3.tdd.json" + }, + { + "status": "A", + "paths": [ + ".agent/specs/security-project-identity/evidence/SECURITY-PROJECT-IDENTITY-R3.verification.json" + ], + "raw": "A\t.agent/specs/security-project-identity/evidence/SECURITY-PROJECT-IDENTITY-R3.verification.json" + }, + { + "status": "M", + "paths": [ + ".agent/specs/security-project-identity/evidence/project-identity-v2-vectors.json" + ], + "raw": "M\t.agent/specs/security-project-identity/evidence/project-identity-v2-vectors.json" + }, + { + "status": "M", + "paths": [ + "internal/db/gorm/project_identity_v2_test.go" + ], + "raw": "M\tinternal/db/gorm/project_identity_v2_test.go" + }, + { + "status": "M", + "paths": [ + "internal/db/gorm/project_store.go" + ], + "raw": "M\tinternal/db/gorm/project_store.go" + }, + { + "status": "M", + "paths": [ + "internal/grpcserver/project_identity_v2_test.go" + ], + "raw": "M\tinternal/grpcserver/project_identity_v2_test.go" + }, + { + "status": "M", + "paths": [ + "internal/proxy/identity.go" + ], + "raw": "M\tinternal/proxy/identity.go" + }, + { + "status": "M", + "paths": [ + "internal/proxy/identity_test.go" + ], + "raw": "M\tinternal/proxy/identity_test.go" + }, + { + "status": "M", + "paths": [ + "plugin/engram/hooks/lib.js" + ], + "raw": "M\tplugin/engram/hooks/lib.js" + }, + { + "status": "M", + "paths": [ + "plugin/engram/hooks/project-identity-v2.test.js" + ], + "raw": "M\tplugin/engram/hooks/project-identity-v2.test.js" + }, + { + "status": "M", + "paths": [ + "plugin/openclaw-engram/src/identity.ts" + ], + "raw": "M\tplugin/openclaw-engram/src/identity.ts" + }, + { + "status": "M", + "paths": [ + "plugin/openclaw-engram/test/project-identity-v2.test.mjs" + ], + "raw": "M\tplugin/openclaw-engram/test/project-identity-v2.test.mjs" + } + ], + "changed_paths": [ + { + "status": "A", + "path": ".agent/reports/evidence/production-ready/security-project-identity/SECURITY-PROJECT-IDENTITY-R3-maker-report.md", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "report-namespace" + ], + "ownership_matches": [ + ".agent/reports/evidence/production-ready/security-project-identity/**" + ] + }, + { + "status": "A", + "path": ".agent/specs/security-project-identity/evidence/SECURITY-PROJECT-IDENTITY-R3.red.json", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/specs/security-project-identity/evidence/**" + ] + }, + { + "status": "A", + "path": ".agent/specs/security-project-identity/evidence/SECURITY-PROJECT-IDENTITY-R3.tdd.json", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/specs/security-project-identity/evidence/**" + ] + }, + { + "status": "A", + "path": ".agent/specs/security-project-identity/evidence/SECURITY-PROJECT-IDENTITY-R3.verification.json", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/specs/security-project-identity/evidence/**" + ] + }, + { + "status": "M", + "path": ".agent/specs/security-project-identity/evidence/project-identity-v2-vectors.json", + "allowed": true, + "allowed_by": [ + "slice-declaration", + "evidence-namespace" + ], + "ownership_matches": [ + ".agent/specs/security-project-identity/evidence/**" + ] + }, + { + "status": "M", + "path": "internal/db/gorm/project_identity_v2_test.go", + "allowed": true, + "allowed_by": [ + "slice-declaration" + ], + "ownership_matches": [ + "internal/db/gorm/project_identity_v2_test.go" + ] + }, + { + "status": "M", + "path": "internal/db/gorm/project_store.go", + "allowed": true, + "allowed_by": [ + "slice-declaration" + ], + "ownership_matches": [ + "internal/db/gorm/project_store.go" + ] + }, + { + "status": "M", + "path": "internal/grpcserver/project_identity_v2_test.go", + "allowed": true, + "allowed_by": [ + "slice-declaration" + ], + "ownership_matches": [ + "internal/grpcserver/project_identity_v2_test.go" + ] + }, + { + "status": "M", + "path": "internal/proxy/identity.go", + "allowed": true, + "allowed_by": [ + "slice-declaration" + ], + "ownership_matches": [ + "internal/proxy/identity.go" + ] + }, + { + "status": "M", + "path": "internal/proxy/identity_test.go", + "allowed": true, + "allowed_by": [ + "slice-declaration" + ], + "ownership_matches": [ + "internal/proxy/identity_test.go" + ] + }, + { + "status": "M", + "path": "plugin/engram/hooks/lib.js", + "allowed": true, + "allowed_by": [ + "slice-declaration" + ], + "ownership_matches": [ + "plugin/engram/hooks/lib.js" + ] + }, + { + "status": "M", + "path": "plugin/engram/hooks/project-identity-v2.test.js", + "allowed": true, + "allowed_by": [ + "slice-declaration" + ], + "ownership_matches": [ + "plugin/engram/hooks/project-identity-v2.test.js" + ] + }, + { + "status": "M", + "path": "plugin/openclaw-engram/src/identity.ts", + "allowed": true, + "allowed_by": [ + "slice-declaration" + ], + "ownership_matches": [ + "plugin/openclaw-engram/src/identity.ts" + ] + }, + { + "status": "M", + "path": "plugin/openclaw-engram/test/project-identity-v2.test.mjs", + "allowed": true, + "allowed_by": [ + "slice-declaration" + ], + "ownership_matches": [ + "plugin/openclaw-engram/test/project-identity-v2.test.mjs" + ] + } + ], + "violations": [], + "epoch_authority": { + "verdict": "PASS", + "evaluated": [], + "errors": [] + }, + "errors": [] +} diff --git a/.agent/specs/release-gates-r9/evidence/release-gates/ownership-ledger-static.json b/.agent/specs/release-gates-r9/evidence/release-gates/ownership-ledger-static.json new file mode 100644 index 00000000..7ad95764 --- /dev/null +++ b/.agent/specs/release-gates-r9/evidence/release-gates/ownership-ledger-static.json @@ -0,0 +1,4579 @@ +{ + "schema_version": 2, + "gate": "plan-path-ownership", + "mode": "Ledger", + "verdict": "PASS", + "started_at": "2026-07-10T22:23:55.8548885+00:00", + "finished_at": "2026-07-10T22:24:00.7637034+00:00", + "duration_seconds": 4.909, + "plan": { + "path": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates-r9-maker\\.agent\\plans\\2026-07-10-engram-production-ready-master-plan.md", + "expected_sha256": "4388337722e57b48e93515008e4220d6cd2c83de695c4c449387f071c59fb96f", + "observed_sha256": "4388337722e57b48e93515008e4220d6cd2c83de695c4c449387f071c59fb96f", + "hash_match": true + }, + "state": { + "path": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates-r9-maker\\.agent\\plans\\2026-07-10-engram-production-ready-ownership-state.json", + "sha256": "e41f52fbafa317eb1571c76a7d1de9add543da38a1b2471dbe587a849b21c032", + "verdict": "PASS", + "plan_sha256": "4388337722e57b48e93515008e4220d6cd2c83de695c4c449387f071c59fb96f" + }, + "scope_map": { + "path": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates-r9-maker\\.agent\\plans\\2026-07-10-engram-production-ready-scope-map.json", + "expected_sha256": "fb170d59f3072117489402fd347cd1432c40adbc842811f92227498bcbc92693", + "observed_sha256": "fb170d59f3072117489402fd347cd1432c40adbc842811f92227498bcbc92693", + "verdict": "PASS", + "entries": 67, + "unique_slices": 67 + }, + "live_register": { + "supplied": false, + "path": "", + "sha256": null, + "checked": false, + "rows": 0 + }, + "counts": { + "maker_slices": 57, + "declarations": 351, + "exact_paths": 328, + "prefixes": 23, + "repeated_exact_paths": 34, + "prefix_intersections": 2, + "undeclared_prefix_intersections": 0, + "declared_epochs": 36, + "state_epochs": 36, + "errors": 0 + }, + "slices": [ + { + "slice": "PLAN-GOVERNANCE", + "branch": "work/prc-release-gates-revision9-maker", + "paths": [ + ".agent/plans/2026-07-10-engram-production-ready-master-plan.md", + ".agent/plans/2026-07-10-engram-production-ready-ownership-state.json", + ".agent/plans/2026-07-10-engram-production-ready-scope-map.json", + ".agent/plans/2026-07-10-engram-production-ready-active-diff-contracts.json", + ".agent/specs/release-gates-r9/evidence/plan-governance/**", + ".agent/reports/2026-07-11-release-gates-r9-plan-governance.md" + ], + "line": 6 + }, + { + "slice": "DB-BULKOPS", + "branch": "work/prc-db-bulkops", + "paths": [ + "internal/bulkops/facade.go", + "internal/bulkops/facade_test.go", + "internal/bulkops/rollback.go", + "internal/bulkops/rollback_test.go", + "internal/db/gorm/candidate_store.go", + "internal/db/gorm/candidate_store_test.go", + "internal/mcp/tools_bulkops.go", + "internal/mcp/tools_dryrun_test.go", + "pkg/models/snapshot.go", + ".agent/reports/2026-07-10-db-bulkops-capture-lock-rework-maker.md", + ".agent/reports/2026-07-10-db-bulkops-sibling-rework-maker.md", + ".agent/specs/production-ready-db-bulkops/evidence/**", + ".agent/reports/evidence/production-ready/db-bulkops-sibling-rework/**" + ], + "line": 7 + }, + { + "slice": "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK", + "branch": "work/prc-db-bulkops", + "paths": [ + "internal/db/gorm/candidate_store.go", + "internal/db/gorm/candidate_store_test.go", + "internal/mcp/tools_bulkops.go", + "internal/mcp/tools_dryrun_test.go", + ".agent/reports/2026-07-10-db-bulkops-behavioral-edge-rework-maker.md", + ".agent/reports/2026-07-10-db-bulkops-behavioral-edge-rework-maker-3.md", + ".agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/**" + ], + "line": 8 + }, + { + "slice": "DB-TEST-POOL-HYGIENE", + "branch": "work/prc-db-test-pool-hygiene-evidence-r2", + "paths": [ + "internal/db/gorm/candidate_store_test.go", + ".agent/reports/2026-07-10-db-test-pool-hygiene-maker.md", + ".agent/reports/2026-07-10-db-test-pool-hygiene-evidence-revision-maker.md", + ".agent/reports/evidence/production-ready/db-test-pool-hygiene/**" + ], + "line": 9 + }, + { + "slice": "DB-GOVERNANCE", + "branch": "work/prc-db-governance", + "paths": [ + "internal/db/gorm/candidate_store.go", + "internal/db/gorm/candidate_store_test.go", + "internal/db/gorm/rule_arbiter_store_test.go", + "internal/db/gorm/rule_governance_store.go", + "internal/db/gorm/rule_governance_store_test.go", + "internal/db/gorm/rule_governance_rg3_store_test.go", + "internal/db/gorm/migration_rule_governance.go", + "internal/db/gorm/migration_rule_arbiter.go", + "internal/db/gorm/migration_rule_governance_snapshot_statuses.go" + ], + "line": 10 + }, + { + "slice": "CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK", + "branch": "work/prc-candidate-review-snapshot-rollback", + "paths": [ + "internal/reviewpacket/candidate.go", + "internal/reviewpacket/candidate_test.go", + "internal/db/gorm/candidate_store.go", + "internal/db/gorm/candidate_store_test.go", + "internal/db/gorm/snapshot_store.go", + "internal/db/gorm/snapshot_store_test.go", + "internal/bulkops/rollback_test.go", + "tests/critical/candidate_review/candidate_review_snapshot_rollback_test.go" + ], + "line": 11 + }, + { + "slice": "INGEST-DOC-SNAPSHOT-DEMOLITION", + "branch": "work/prc-ingest-doc-snapshot-demolition", + "paths": [ + "internal/bulkops/facade.go", + "internal/bulkops/facade_test.go", + "pkg/models/snapshot.go", + "pkg/models/snapshot_test.go", + "internal/mcp/ingest_snapshot_contract_test.go" + ], + "line": 13 + }, + { + "slice": "DB-AUTH", + "branch": "work/prc-db-auth", + "paths": [ + "internal/db/gorm/user_store.go", + "internal/db/gorm/user_store_test.go", + "internal/worker/auth_handlers.go", + "internal/worker/auth_handlers_lifecycle_test.go", + ".agent/reports/db-auth-rework-maker-2026-07-10.md" + ], + "line": 14 + }, + { + "slice": "AUTH-BOOTSTRAP-SECURITY", + "branch": "work/prc-auth-bootstrap-security", + "paths": [ + "internal/config/config.go", + "internal/config/config_test.go", + "internal/config/envnames.go", + "internal/db/gorm/user_store.go", + "internal/worker/middleware.go", + "internal/worker/middleware_test.go", + "internal/worker/auth_handlers.go", + "internal/worker/auth_bootstrap_limiter.go", + "internal/worker/auth_bootstrap_limiter_test.go", + "internal/worker/auth_bootstrap_security_test.go", + "internal/worker/service.go", + "tests/critical/auth_bootstrap/first_admin_bootstrap_test.go", + "scripts/production-smoke/customer/run-auth-bootstrap-adversary.ps1" + ], + "line": 15 + }, + { + "slice": "DURABLE-AUDIT-BOUNDARIES", + "branch": "work/prc-durable-audit-boundaries", + "paths": [ + "internal/db/gorm/domain_owner_store.go", + "internal/db/gorm/domain_owner_store_test.go", + "internal/db/gorm/user_store.go", + "internal/worker/auth_handlers.go", + "internal/worker/auth_audit_durability_test.go", + "internal/bulkops/facade.go", + "internal/bulkops/audit_durability_test.go", + "scripts/production-smoke/customer/run-durable-audit-faults.ps1" + ], + "line": 16 + }, + { + "slice": "DB-CRYSTALLIZATION", + "branch": "work/prc-db-crystallization", + "paths": [ + "internal/worker/handlers_hooks_crystallization_integration_test.go" + ], + "line": 17 + }, + { + "slice": "CRYSTALLIZATION-DREAM-CYCLE-CORRECTNESS", + "branch": "work/prc-crystallization-dream-cycle-correctness", + "paths": [ + "internal/worker/dream_cycle.go", + "internal/worker/dream_cycle_test.go", + ".agent/reports/2026-07-10-crystallization-dream-cycle-correctness-maker.md", + ".agent/e/cdc/**" + ], + "line": 18 + }, + { + "slice": "DB-EMBEDDING-STATS", + "branch": "work/prc-db-embedding-stats", + "paths": [ + "internal/embedding/store.go", + "internal/embedding/store_stats_test.go", + ".agent/reports/2026-07-10-db-embedding-stats-maker.md", + ".agent/reports/evidence/production-ready/db-embedding-stats/**", + ".agent/specs/db-embedding-stats/evidence/**" + ], + "line": 19 + }, + { + "slice": "DB-EMBEDDING-EVIDENCE-TRANSPORT", + "branch": "work/prc-db-embedding-evidence-transport-r6", + "paths": [ + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/**", + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/**", + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4/**", + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/**", + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/**", + ".agent/specs/db-embedding-stats-evidence-transport/evidence/**" + ], + "line": 20 + }, + { + "slice": "DB-REAPER", + "branch": "work/prc-db-reaper-shutdown-r4", + "paths": [ + "internal/worker/reaper/reaper.go", + "internal/worker/reaper/reaper_test.go" + ], + "line": 21 + }, + { + "slice": "SECURITY-TOOLCHAIN", + "branch": "work/prc-security-toolchain", + "paths": [ + "go.mod", + "go.sum", + "Dockerfile" + ], + "line": 22 + }, + { + "slice": "RELEASE-GATES", + "branch": "work/prc-release-gates-revision9-maker", + "paths": [ + ".github/workflows/test.yml", + "scripts/production-gates/assert-plan-path-ownership.ps1", + "scripts/production-gates/assert-active-candidate-path-authority.ps1", + "scripts/production-gates/run-db-suite.ps1", + ".agent/specs/release-gates-r9/evidence/release-gates/**", + ".agent/reports/2026-07-11-release-gates-r9-maker.md" + ], + "line": 23 + }, + { + "slice": "IMAGE-REMEDIATION", + "branch": "work/prc-image-remediation", + "paths": [ + "Dockerfile", + "cmd/engram-healthcheck/main.go", + "cmd/engram-healthcheck/main_test.go", + "apps/operator-console/package.json", + "apps/operator-console/package-lock.json", + "deploy/postgres/Dockerfile", + "docker-compose.yml", + "deploy/docker-compose.runtime.yml", + "docs/DEPLOYMENT.md", + "docs/PRODUCTION-TESTING-PLAYBOOK.md", + ".github/workflows/test.yml", + ".github/workflows/docker.yaml", + ".github/workflows/docker-publish.yml", + "scripts/production-gates/build-and-scan-images.ps1", + "tests/critical/runtime/image_runtime_contract_test.go", + "tests/critical/runtime/postgres_image_contract_test.go" + ], + "line": 24 + }, + { + "slice": "SECURITY-PROJECT-IDENTITY", + "branch": "work/prc-security-project-identity-r4", + "paths": [ + "internal/db/gorm/project_store.go", + "internal/db/gorm/project_identity_v2_test.go", + "internal/grpcserver/project_identity_v2_test.go", + "internal/proxy/identity.go", + "internal/proxy/identity_test.go", + "internal/proxy/identity_process_test.go", + "plugin/engram/hooks/lib.js", + "plugin/engram/hooks/project-identity-v2.test.js", + "plugin/openclaw-engram/src/identity.ts", + "plugin/openclaw-engram/test/project-identity-v2.test.mjs", + ".agent/specs/security-project-identity/evidence/**", + ".agent/reports/evidence/production-ready/security-project-identity/**" + ], + "line": 25 + }, + { + "slice": "OPENCLAW-RELEASE", + "branch": "work/prc-openclaw-release", + "paths": [ + "plugin/openclaw-engram/.gitignore", + "plugin/openclaw-engram/package.json", + "plugin/openclaw-engram/package-lock.json", + "plugin/openclaw-engram/openclaw.plugin.json", + "plugin/openclaw-engram/README.md", + ".github/workflows/plugin-publish.yml", + "docs/RELEASE-PROTOCOL.md" + ], + "line": 26 + }, + { + "slice": "UPDATE-LIFECYCLE", + "branch": "work/prc-security-updater", + "paths": [ + "internal/update/update.go", + "internal/update/update_test.go", + "internal/worker/handlers_update.go", + "internal/worker/handlers_update_test.go", + "scripts/install.sh", + "scripts/install.ps1", + ".goreleaser.yaml", + ".github/workflows/release.yaml", + "plugin/engram/hooks/hook-cli.test.js" + ], + "line": 27 + }, + { + "slice": "DOCUMENT-INGEST-PUBLIC-TRUTH", + "branch": "work/prc-document-ingest-public-truth", + "paths": [ + "internal/mcp/server.go", + "internal/mcp/ingest_document_description_test.go" + ], + "line": 29 + }, + { + "slice": "MCP-STRUCTURED-INPUT-VALIDATION", + "branch": "work/prc-mcp-structured-input-validation", + "paths": [ + "internal/mcp/coerce.go", + "internal/mcp/coerce_test.go", + "internal/mcp/tools_candidates.go", + "internal/mcp/tools_candidates_test.go", + "internal/mcp/tools_memory.go", + "internal/mcp/tools_memory_edit_test.go", + "internal/mcp/tools_memory_significance.go", + "internal/mcp/tools_memory_significance_test.go", + "internal/mcp/tools_store_consolidated.go", + "internal/mcp/tools_settings.go", + "internal/mcp/tools_settings_test.go", + "internal/mcp/tools_documents_v2.go", + "internal/mcp/tools_rule_governance.go", + "internal/mcp/tools_rule_governance_test.go", + "internal/mcp/structured_input_validation_test.go" + ], + "line": 31 + }, + { + "slice": "REDACTION-LIVE-CONTRACT", + "branch": "work/prc-redaction-live-contract", + "paths": [ + "internal/redaction/layer.go", + "internal/redaction/layer_test.go", + "internal/redaction/rejection_test.go", + "internal/mcp/redaction_guard.go", + "internal/mcp/redaction_guard_test.go", + "internal/mcp/tools_memory.go", + "internal/mcp/tools_rules.go", + "internal/mcp/tools_memory_redaction_audit_test.go", + "internal/mcp/tools_rules_redaction_audit_test.go", + "internal/worker/service.go", + "internal/worker/service_redaction_test.go", + "docs/operating-engram.md", + ".agent/reports/evidence/production-ready/redaction-live-contract/**" + ], + "line": 32 + }, + { + "slice": "RETRIEVAL-VECTOR-CONTRACT", + "branch": "work/prc-retrieval-vector-contract", + "paths": [ + "internal/retrieval/hybrid_integration_test.go" + ], + "line": 34 + }, + { + "slice": "STATIC-EMBED-CONTRACT", + "branch": "work/prc-static-embed-contract", + "paths": [ + "internal/worker/static_embed_test.go" + ], + "line": 35 + }, + { + "slice": "PRE-V5-UPGRADE-CONTRACT", + "branch": "work/prc-pre-v5-upgrade-contract", + "paths": [ + "internal/db/gorm/migrations_integration_test.go", + "internal/grpcserver/credential_migration_test.go", + "tests/fixtures/pre-v5/**", + "tests/critical/recovery/pre_v5_upgrade_test.go", + "scripts/production-smoke/customer/run-pre-v5-upgrade.ps1" + ], + "line": 36 + }, + { + "slice": "T007-COMPAT-DEMOLITION-CLASSIFICATION", + "branch": "work/prc-t007-compat-classification", + "paths": [ + "internal/mcp/store_memory_compat_t007_test.go" + ], + "line": 37 + }, + { + "slice": "DB-RULES-ISOLATION", + "branch": "work/prc-db-rules-isolation", + "paths": [ + "internal/worker/handlers_rules_test.go", + "scripts/production-gates/run-db-rules-isolation.ps1" + ], + "line": 38 + }, + { + "slice": "COVERAGE-CMD-ENGRAM", + "branch": "work/prc-coverage-cmd-engram", + "paths": [ + "cmd/engram/production_readiness_coverage_test.go" + ], + "line": 39 + }, + { + "slice": "COVERAGE-CMD-SERVER", + "branch": "work/prc-coverage-cmd-server", + "paths": [ + "cmd/engram-server/production_readiness_coverage_test.go" + ], + "line": 40 + }, + { + "slice": "COVERAGE-UPDATE", + "branch": "work/prc-coverage-update", + "paths": [ + "internal/update/production_readiness_coverage_test.go" + ], + "line": 41 + }, + { + "slice": "COVERAGE-WORKER", + "branch": "work/prc-coverage-worker", + "paths": [ + "internal/worker/production_readiness_coverage_test.go" + ], + "line": 43 + }, + { + "slice": "COVERAGE-MCP", + "branch": "work/prc-coverage-mcp", + "paths": [ + "internal/mcp/production_readiness_coverage_test.go" + ], + "line": 44 + }, + { + "slice": "COVERAGE-GORM", + "branch": "work/prc-coverage-gorm", + "paths": [ + "internal/db/gorm/production_readiness_coverage_test.go" + ], + "line": 45 + }, + { + "slice": "COVERAGE-LOOM", + "branch": "work/prc-coverage-loom", + "paths": [ + "internal/handlers/loom/production_readiness_coverage_test.go" + ], + "line": 46 + }, + { + "slice": "DEPLOYMENT-ROLLBACK", + "branch": "work/prc-deployment-rollback", + "paths": [ + "docker-compose.yml", + "deploy/docker-compose.runtime.yml", + "deploy/docker-compose.operator-web-standalone.yml", + "deploy/entrypoint-server.sh", + "deploy/healthcheck-server.sh", + "deploy/verify-rollback.ps1", + "deploy/verify-runtime-policy.ps1" + ], + "line": 47 + }, + { + "slice": "RECOVERY-DATA", + "branch": "work/prc-recovery-data", + "paths": [ + "scripts/recovery/start-disposable-postgres.ps1", + "scripts/recovery/verify-postgres-roundtrip.ps1", + "scripts/recovery/seed-recovery-fixture.ps1", + "scripts/recovery/assert-recovery-fixture.ps1", + "tests/critical/recovery/postgres_roundtrip_test.go" + ], + "line": 48 + }, + { + "slice": "OBSERVABILITY-OTLP", + "branch": "work/prc-observability-otlp", + "paths": [ + "internal/module/obs/logging.go", + "internal/module/obs/logging_test.go", + "internal/module/obs/meter.go", + "internal/module/obs/meter_test.go", + "internal/module/obs/metrics.go", + "internal/module/obs/metrics_test.go", + "cmd/engram-server/main.go", + "cmd/engram-server/main_test.go", + "scripts/production-smoke/verify-otlp.ps1" + ], + "line": 49 + }, + { + "slice": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "paths": [ + "internal/scope/domain_policy.go", + "internal/scope/domain_policy_test.go", + "internal/scope/filter.go", + "internal/scope/filter_test.go", + "internal/scope/filter_principal_test.go", + "internal/scope/filter_w4_test.go", + "internal/principalmemory/access_policy.go", + "internal/principalmemory/access_policy_test.go", + "internal/principalmemory/domain_registry.go", + "internal/principalmemory/domain_registry_test.go", + "internal/principalmemory/query_service.go", + "internal/principalmemory/query_service_test.go", + "internal/mcp/tools_principal_memory.go", + "internal/mcp/tools_principal_memory_test.go", + "internal/mcp/tools_recall_principal_test.go", + "internal/mcp/recall_visibility_backfill_test.go", + "internal/mcp/store_memory_principal_test.go", + "internal/worker/handlers_principal_memory.go", + "internal/worker/handlers_principal_memory_test.go", + "internal/worker/scope_bypass_w4_test.go", + "internal/worker/retention.go", + "internal/worker/retention_test.go", + "internal/db/gorm/memory_store.go", + "internal/db/gorm/memory_store_principal_test.go", + "internal/db/gorm/memory_store_principal_query_test.go", + "internal/db/gorm/purge_store_test.go", + "tests/critical/data_boundaries/principal_project_retention_test.go" + ], + "line": 50 + }, + { + "slice": "CRITICAL-HARNESS", + "branch": "work/prc-critical-harness", + "paths": [ + "tests/critical/customer_mode/customer_mode_test.go", + "tests/critical/customer_mode/compatibility_test.go", + "tests/critical/customer_mode/cross_agent_test.go", + "scripts/production-smoke/customer/run-customer-mode.ps1", + "scripts/production-smoke/customer/run-client-compatibility.ps1", + "scripts/production-smoke/customer/run-cross-agent.ps1", + "scripts/production-smoke/customer/run-diagnostic-matrix.ps1", + "scripts/production-smoke/customer/assert-product-works.ps1" + ], + "line": 51 + }, + { + "slice": "CORE-PUBLIC-TRUTH", + "branch": "work/prc-core-public-truth", + "paths": [ + "README.md", + "README.ru.md", + "README.zh.md", + "CONTRIBUTING.md", + "CHANGELOG.md", + "Makefile", + ".env.example", + "docs/DEPLOYMENT.md", + "docs/MIGRATION.md", + "docs/PRODUCTION-TESTING-PLAYBOOK.md", + "docs/arch/CONFIGURATION.md", + "docs/arch/QUICKSTART.md", + "docs/release-notes/v6.43.0.md", + "docs/public/engram.jpg", + "plugin/engram/commands/setup.md", + "plugin/engram/commands/doctor.md" + ], + "line": 52 + }, + { + "slice": "FINAL-PUBLIC-TRUTH", + "branch": "work/prc-final-public-truth", + "paths": [ + "README.md", + "README.ru.md", + "README.zh.md", + "CONTRIBUTING.md", + "CHANGELOG.md", + "Makefile", + ".env.example", + "docs/DEPLOYMENT.md", + "docs/MIGRATION.md", + "docs/PRODUCTION-TESTING-PLAYBOOK.md", + "docs/operating-engram.md", + "docs/arch/CONFIGURATION.md", + "docs/arch/QUICKSTART.md", + "docs/public/engram.jpg", + "plugin/engram/commands/setup.md", + "plugin/engram/commands/doctor.md" + ], + "line": 53 + }, + { + "slice": "LAUNCHER-FIRST-RUN", + "branch": "work/prc-launcher-first-run", + "paths": [ + "cmd/engram/main.go", + "cmd/engram/main_test.go", + "cmd/engram/wiring.go", + "cmd/engram/exec_windows.go", + "cmd/engram/exec_unix.go", + "plugin/engram/.engram-project", + "plugin/engram/scripts/run-engram.js", + "plugin/engram/scripts/run-engram.test.js", + "plugin/engram/scripts/ensure-binary.js", + "plugin/engram/scripts/ensure-binary.test.js" + ], + "line": 54 + }, + { + "slice": "OC-INTEGRATION", + "branch": "work/prc-operator-console-integration", + "paths": [ + "apps/operator-console/**" + ], + "line": 55 + }, + { + "slice": "S4B-CONTRACT", + "branch": "work/prc-s4b-contract", + "paths": [ + ".agent/specs/engram-v7-directives-surfacing/**" + ], + "line": 56 + }, + { + "slice": "V7-S4B-BACKEND", + "branch": "work/prc-v7-s4b-backend", + "paths": [ + "internal/cognitive/s4bsurfacing/**" + ], + "line": 57 + }, + { + "slice": "V7-CORE-CALLPATH", + "branch": "work/prc-v7-core-callpath", + "paths": [ + "internal/cognitive/core/event_bus.go", + "internal/cognitive/core/event_bus_test.go", + "internal/cognitive/core/hint_queue.go", + "internal/cognitive/core/hint_queue_test.go", + "internal/cognitive/s3ambient/queue.go", + "internal/cognitive/s3ambient/subsystem.go" + ], + "line": 58 + }, + { + "slice": "V7-RUNTIME-WIRING", + "branch": "work/prc-v7-runtime-wiring", + "paths": [ + "internal/worker/service.go", + "internal/worker/service_v7_integration_test.go", + "internal/worker/handlers_stats_v7.go", + "internal/worker/handlers_stats_v7_test.go" + ], + "line": 59 + }, + { + "slice": "V7-TELEMETRY-WIRING", + "branch": "work/prc-v7-telemetry-wiring", + "paths": [ + "internal/cognitive/s5/metrics.go", + "internal/cognitive/s5/provider.go", + "internal/cognitive/s5/provider_test.go", + "internal/cognitive/s5/source_adapter.go", + "internal/cognitive/s5/source_adapter_test.go" + ], + "line": 60 + }, + { + "slice": "ROADMAP-RECONCILIATION", + "branch": "work/prc-roadmap-reconciliation", + "paths": [ + ".agent/specs/roadmap.md", + ".agent/specs/ui-surface-ledger.md", + ".agent/specs/operator-console-production-integration/**", + ".agent/specs/engram-v7-ambient/spec.md", + ".agent/specs/engram-v7-ambient/plan.md", + ".agent/specs/engram-v7-ambient/checklists/general.md", + ".agent/specs/engram-v7-ambient/changes/CR-001-initial-scope/change.md", + ".agent/specs/engram-v7-ambient/changes/CR-001-initial-scope/tasks.md" + ], + "line": 61 + }, + { + "slice": "NORTHSTAR-CI-A-CONTRACTS", + "branch": "work/prc-northstar-ci-a-contracts", + "paths": [ + ".agent/specs/engram-absorption/ci-a-dense-vector/spec.md", + ".agent/specs/engram-absorption/ci-a-dense-vector/plan.md", + ".agent/specs/engram-absorption/ci-a-dense-vector/checklists/general.md", + ".agent/specs/engram-absorption/ci-a-dense-vector/changes/CR-001-initial-scope/change.md", + ".agent/specs/engram-absorption/ci-a-dense-vector/changes/CR-001-initial-scope/tasks.md" + ], + "line": 62 + }, + { + "slice": "NORTHSTAR-CI-B-CONTRACTS", + "branch": "work/prc-northstar-ci-b-contracts", + "paths": [ + ".agent/specs/engram-absorption/ci-b-graph-watcher-context/spec.md", + ".agent/specs/engram-absorption/ci-b-graph-watcher-context/plan.md", + ".agent/specs/engram-absorption/ci-b-graph-watcher-context/checklists/general.md", + ".agent/specs/engram-absorption/ci-b-graph-watcher-context/changes/CR-001-initial-scope/change.md", + ".agent/specs/engram-absorption/ci-b-graph-watcher-context/changes/CR-001-initial-scope/tasks.md" + ], + "line": 63 + }, + { + "slice": "NORTHSTAR-BOOK-CONTRACTS", + "branch": "work/prc-northstar-book-contracts", + "paths": [ + ".agent/specs/engram-absorption/book/prd.md", + ".agent/specs/engram-absorption/book/spec.md", + ".agent/specs/engram-absorption/book/plan.md", + ".agent/specs/engram-absorption/book/checklists/general.md", + ".agent/specs/engram-absorption/book/changes/CR-001-initial-scope/change.md", + ".agent/specs/engram-absorption/book/changes/CR-001-initial-scope/tasks.md" + ], + "line": 64 + }, + { + "slice": "NORTHSTAR-MEM-CONTRACTS", + "branch": "work/prc-northstar-mem-contracts", + "paths": [ + ".agent/specs/engram-absorption/mem-residual/spec.md", + ".agent/specs/engram-absorption/mem-residual/plan.md", + ".agent/specs/engram-absorption/mem-residual/checklists/general.md", + ".agent/specs/engram-absorption/mem-residual/changes/CR-001-initial-scope/change.md", + ".agent/specs/engram-absorption/mem-residual/changes/CR-001-initial-scope/tasks.md" + ], + "line": 65 + }, + { + "slice": "NORTHSTAR-EFFECTIVENESS-CONTRACTS", + "branch": "work/prc-northstar-effectiveness-contracts", + "paths": [ + ".agent/specs/engram-effectiveness/production-ready-residual/spec.md", + ".agent/specs/engram-effectiveness/production-ready-residual/plan.md", + ".agent/specs/engram-effectiveness/production-ready-residual/checklists/general.md", + ".agent/specs/engram-effectiveness/production-ready-residual/changes/CR-001-initial-scope/change.md", + ".agent/specs/engram-effectiveness/production-ready-residual/changes/CR-001-initial-scope/tasks.md" + ], + "line": 66 + }, + { + "slice": "NORTHSTAR-SETTINGS-CONTRACTS", + "branch": "work/prc-northstar-settings-contracts", + "paths": [ + ".agent/specs/settings-store/production-ready-residual/spec.md", + ".agent/specs/settings-store/production-ready-residual/plan.md", + ".agent/specs/settings-store/production-ready-residual/checklists/general.md", + ".agent/specs/settings-store/production-ready-residual/changes/CR-001-initial-scope/change.md", + ".agent/specs/settings-store/production-ready-residual/changes/CR-001-initial-scope/tasks.md" + ], + "line": 67 + } + ], + "declarations": [ + { + "owner": "PLAN-GOVERNANCE", + "branch": "work/prc-release-gates-revision9-maker", + "path": ".agent/plans/2026-07-10-engram-production-ready-master-plan.md", + "display": ".agent/plans/2026-07-10-engram-production-ready-master-plan.md", + "kind": "exact", + "line": 6 + }, + { + "owner": "PLAN-GOVERNANCE", + "branch": "work/prc-release-gates-revision9-maker", + "path": ".agent/plans/2026-07-10-engram-production-ready-ownership-state.json", + "display": ".agent/plans/2026-07-10-engram-production-ready-ownership-state.json", + "kind": "exact", + "line": 6 + }, + { + "owner": "PLAN-GOVERNANCE", + "branch": "work/prc-release-gates-revision9-maker", + "path": ".agent/plans/2026-07-10-engram-production-ready-scope-map.json", + "display": ".agent/plans/2026-07-10-engram-production-ready-scope-map.json", + "kind": "exact", + "line": 6 + }, + { + "owner": "PLAN-GOVERNANCE", + "branch": "work/prc-release-gates-revision9-maker", + "path": ".agent/plans/2026-07-10-engram-production-ready-active-diff-contracts.json", + "display": ".agent/plans/2026-07-10-engram-production-ready-active-diff-contracts.json", + "kind": "exact", + "line": 6 + }, + { + "owner": "PLAN-GOVERNANCE", + "branch": "work/prc-release-gates-revision9-maker", + "path": ".agent/specs/release-gates-r9/evidence/plan-governance", + "display": ".agent/specs/release-gates-r9/evidence/plan-governance/**", + "kind": "prefix", + "line": 6 + }, + { + "owner": "PLAN-GOVERNANCE", + "branch": "work/prc-release-gates-revision9-maker", + "path": ".agent/reports/2026-07-11-release-gates-r9-plan-governance.md", + "display": ".agent/reports/2026-07-11-release-gates-r9-plan-governance.md", + "kind": "exact", + "line": 6 + }, + { + "owner": "DB-BULKOPS", + "branch": "work/prc-db-bulkops", + "path": "internal/bulkops/facade.go", + "display": "internal/bulkops/facade.go", + "kind": "exact", + "line": 7 + }, + { + "owner": "DB-BULKOPS", + "branch": "work/prc-db-bulkops", + "path": "internal/bulkops/facade_test.go", + "display": "internal/bulkops/facade_test.go", + "kind": "exact", + "line": 7 + }, + { + "owner": "DB-BULKOPS", + "branch": "work/prc-db-bulkops", + "path": "internal/bulkops/rollback.go", + "display": "internal/bulkops/rollback.go", + "kind": "exact", + "line": 7 + }, + { + "owner": "DB-BULKOPS", + "branch": "work/prc-db-bulkops", + "path": "internal/bulkops/rollback_test.go", + "display": "internal/bulkops/rollback_test.go", + "kind": "exact", + "line": 7 + }, + { + "owner": "DB-BULKOPS", + "branch": "work/prc-db-bulkops", + "path": "internal/db/gorm/candidate_store.go", + "display": "internal/db/gorm/candidate_store.go", + "kind": "exact", + "line": 7 + }, + { + "owner": "DB-BULKOPS", + "branch": "work/prc-db-bulkops", + "path": "internal/db/gorm/candidate_store_test.go", + "display": "internal/db/gorm/candidate_store_test.go", + "kind": "exact", + "line": 7 + }, + { + "owner": "DB-BULKOPS", + "branch": "work/prc-db-bulkops", + "path": "internal/mcp/tools_bulkops.go", + "display": "internal/mcp/tools_bulkops.go", + "kind": "exact", + "line": 7 + }, + { + "owner": "DB-BULKOPS", + "branch": "work/prc-db-bulkops", + "path": "internal/mcp/tools_dryrun_test.go", + "display": "internal/mcp/tools_dryrun_test.go", + "kind": "exact", + "line": 7 + }, + { + "owner": "DB-BULKOPS", + "branch": "work/prc-db-bulkops", + "path": "pkg/models/snapshot.go", + "display": "pkg/models/snapshot.go", + "kind": "exact", + "line": 7 + }, + { + "owner": "DB-BULKOPS", + "branch": "work/prc-db-bulkops", + "path": ".agent/reports/2026-07-10-db-bulkops-capture-lock-rework-maker.md", + "display": ".agent/reports/2026-07-10-db-bulkops-capture-lock-rework-maker.md", + "kind": "exact", + "line": 7 + }, + { + "owner": "DB-BULKOPS", + "branch": "work/prc-db-bulkops", + "path": ".agent/reports/2026-07-10-db-bulkops-sibling-rework-maker.md", + "display": ".agent/reports/2026-07-10-db-bulkops-sibling-rework-maker.md", + "kind": "exact", + "line": 7 + }, + { + "owner": "DB-BULKOPS", + "branch": "work/prc-db-bulkops", + "path": ".agent/specs/production-ready-db-bulkops/evidence", + "display": ".agent/specs/production-ready-db-bulkops/evidence/**", + "kind": "prefix", + "line": 7 + }, + { + "owner": "DB-BULKOPS", + "branch": "work/prc-db-bulkops", + "path": ".agent/reports/evidence/production-ready/db-bulkops-sibling-rework", + "display": ".agent/reports/evidence/production-ready/db-bulkops-sibling-rework/**", + "kind": "prefix", + "line": 7 + }, + { + "owner": "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK", + "branch": "work/prc-db-bulkops", + "path": "internal/db/gorm/candidate_store.go", + "display": "internal/db/gorm/candidate_store.go", + "kind": "exact", + "line": 8 + }, + { + "owner": "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK", + "branch": "work/prc-db-bulkops", + "path": "internal/db/gorm/candidate_store_test.go", + "display": "internal/db/gorm/candidate_store_test.go", + "kind": "exact", + "line": 8 + }, + { + "owner": "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK", + "branch": "work/prc-db-bulkops", + "path": "internal/mcp/tools_bulkops.go", + "display": "internal/mcp/tools_bulkops.go", + "kind": "exact", + "line": 8 + }, + { + "owner": "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK", + "branch": "work/prc-db-bulkops", + "path": "internal/mcp/tools_dryrun_test.go", + "display": "internal/mcp/tools_dryrun_test.go", + "kind": "exact", + "line": 8 + }, + { + "owner": "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK", + "branch": "work/prc-db-bulkops", + "path": ".agent/reports/2026-07-10-db-bulkops-behavioral-edge-rework-maker.md", + "display": ".agent/reports/2026-07-10-db-bulkops-behavioral-edge-rework-maker.md", + "kind": "exact", + "line": 8 + }, + { + "owner": "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK", + "branch": "work/prc-db-bulkops", + "path": ".agent/reports/2026-07-10-db-bulkops-behavioral-edge-rework-maker-3.md", + "display": ".agent/reports/2026-07-10-db-bulkops-behavioral-edge-rework-maker-3.md", + "kind": "exact", + "line": 8 + }, + { + "owner": "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK", + "branch": "work/prc-db-bulkops", + "path": ".agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework", + "display": ".agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/**", + "kind": "prefix", + "line": 8 + }, + { + "owner": "DB-TEST-POOL-HYGIENE", + "branch": "work/prc-db-test-pool-hygiene-evidence-r2", + "path": "internal/db/gorm/candidate_store_test.go", + "display": "internal/db/gorm/candidate_store_test.go", + "kind": "exact", + "line": 9 + }, + { + "owner": "DB-TEST-POOL-HYGIENE", + "branch": "work/prc-db-test-pool-hygiene-evidence-r2", + "path": ".agent/reports/2026-07-10-db-test-pool-hygiene-maker.md", + "display": ".agent/reports/2026-07-10-db-test-pool-hygiene-maker.md", + "kind": "exact", + "line": 9 + }, + { + "owner": "DB-TEST-POOL-HYGIENE", + "branch": "work/prc-db-test-pool-hygiene-evidence-r2", + "path": ".agent/reports/2026-07-10-db-test-pool-hygiene-evidence-revision-maker.md", + "display": ".agent/reports/2026-07-10-db-test-pool-hygiene-evidence-revision-maker.md", + "kind": "exact", + "line": 9 + }, + { + "owner": "DB-TEST-POOL-HYGIENE", + "branch": "work/prc-db-test-pool-hygiene-evidence-r2", + "path": ".agent/reports/evidence/production-ready/db-test-pool-hygiene", + "display": ".agent/reports/evidence/production-ready/db-test-pool-hygiene/**", + "kind": "prefix", + "line": 9 + }, + { + "owner": "DB-GOVERNANCE", + "branch": "work/prc-db-governance", + "path": "internal/db/gorm/candidate_store.go", + "display": "internal/db/gorm/candidate_store.go", + "kind": "exact", + "line": 10 + }, + { + "owner": "DB-GOVERNANCE", + "branch": "work/prc-db-governance", + "path": "internal/db/gorm/candidate_store_test.go", + "display": "internal/db/gorm/candidate_store_test.go", + "kind": "exact", + "line": 10 + }, + { + "owner": "DB-GOVERNANCE", + "branch": "work/prc-db-governance", + "path": "internal/db/gorm/rule_arbiter_store_test.go", + "display": "internal/db/gorm/rule_arbiter_store_test.go", + "kind": "exact", + "line": 10 + }, + { + "owner": "DB-GOVERNANCE", + "branch": "work/prc-db-governance", + "path": "internal/db/gorm/rule_governance_store.go", + "display": "internal/db/gorm/rule_governance_store.go", + "kind": "exact", + "line": 10 + }, + { + "owner": "DB-GOVERNANCE", + "branch": "work/prc-db-governance", + "path": "internal/db/gorm/rule_governance_store_test.go", + "display": "internal/db/gorm/rule_governance_store_test.go", + "kind": "exact", + "line": 10 + }, + { + "owner": "DB-GOVERNANCE", + "branch": "work/prc-db-governance", + "path": "internal/db/gorm/rule_governance_rg3_store_test.go", + "display": "internal/db/gorm/rule_governance_rg3_store_test.go", + "kind": "exact", + "line": 10 + }, + { + "owner": "DB-GOVERNANCE", + "branch": "work/prc-db-governance", + "path": "internal/db/gorm/migration_rule_governance.go", + "display": "internal/db/gorm/migration_rule_governance.go", + "kind": "exact", + "line": 10 + }, + { + "owner": "DB-GOVERNANCE", + "branch": "work/prc-db-governance", + "path": "internal/db/gorm/migration_rule_arbiter.go", + "display": "internal/db/gorm/migration_rule_arbiter.go", + "kind": "exact", + "line": 10 + }, + { + "owner": "DB-GOVERNANCE", + "branch": "work/prc-db-governance", + "path": "internal/db/gorm/migration_rule_governance_snapshot_statuses.go", + "display": "internal/db/gorm/migration_rule_governance_snapshot_statuses.go", + "kind": "exact", + "line": 10 + }, + { + "owner": "CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK", + "branch": "work/prc-candidate-review-snapshot-rollback", + "path": "internal/reviewpacket/candidate.go", + "display": "internal/reviewpacket/candidate.go", + "kind": "exact", + "line": 11 + }, + { + "owner": "CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK", + "branch": "work/prc-candidate-review-snapshot-rollback", + "path": "internal/reviewpacket/candidate_test.go", + "display": "internal/reviewpacket/candidate_test.go", + "kind": "exact", + "line": 11 + }, + { + "owner": "CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK", + "branch": "work/prc-candidate-review-snapshot-rollback", + "path": "internal/db/gorm/candidate_store.go", + "display": "internal/db/gorm/candidate_store.go", + "kind": "exact", + "line": 11 + }, + { + "owner": "CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK", + "branch": "work/prc-candidate-review-snapshot-rollback", + "path": "internal/db/gorm/candidate_store_test.go", + "display": "internal/db/gorm/candidate_store_test.go", + "kind": "exact", + "line": 11 + }, + { + "owner": "CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK", + "branch": "work/prc-candidate-review-snapshot-rollback", + "path": "internal/db/gorm/snapshot_store.go", + "display": "internal/db/gorm/snapshot_store.go", + "kind": "exact", + "line": 11 + }, + { + "owner": "CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK", + "branch": "work/prc-candidate-review-snapshot-rollback", + "path": "internal/db/gorm/snapshot_store_test.go", + "display": "internal/db/gorm/snapshot_store_test.go", + "kind": "exact", + "line": 11 + }, + { + "owner": "CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK", + "branch": "work/prc-candidate-review-snapshot-rollback", + "path": "internal/bulkops/rollback_test.go", + "display": "internal/bulkops/rollback_test.go", + "kind": "exact", + "line": 11 + }, + { + "owner": "CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK", + "branch": "work/prc-candidate-review-snapshot-rollback", + "path": "tests/critical/candidate_review/candidate_review_snapshot_rollback_test.go", + "display": "tests/critical/candidate_review/candidate_review_snapshot_rollback_test.go", + "kind": "exact", + "line": 11 + }, + { + "owner": "INGEST-DOC-SNAPSHOT-DEMOLITION", + "branch": "work/prc-ingest-doc-snapshot-demolition", + "path": "internal/bulkops/facade.go", + "display": "internal/bulkops/facade.go", + "kind": "exact", + "line": 13 + }, + { + "owner": "INGEST-DOC-SNAPSHOT-DEMOLITION", + "branch": "work/prc-ingest-doc-snapshot-demolition", + "path": "internal/bulkops/facade_test.go", + "display": "internal/bulkops/facade_test.go", + "kind": "exact", + "line": 13 + }, + { + "owner": "INGEST-DOC-SNAPSHOT-DEMOLITION", + "branch": "work/prc-ingest-doc-snapshot-demolition", + "path": "pkg/models/snapshot.go", + "display": "pkg/models/snapshot.go", + "kind": "exact", + "line": 13 + }, + { + "owner": "INGEST-DOC-SNAPSHOT-DEMOLITION", + "branch": "work/prc-ingest-doc-snapshot-demolition", + "path": "pkg/models/snapshot_test.go", + "display": "pkg/models/snapshot_test.go", + "kind": "exact", + "line": 13 + }, + { + "owner": "INGEST-DOC-SNAPSHOT-DEMOLITION", + "branch": "work/prc-ingest-doc-snapshot-demolition", + "path": "internal/mcp/ingest_snapshot_contract_test.go", + "display": "internal/mcp/ingest_snapshot_contract_test.go", + "kind": "exact", + "line": 13 + }, + { + "owner": "DB-AUTH", + "branch": "work/prc-db-auth", + "path": "internal/db/gorm/user_store.go", + "display": "internal/db/gorm/user_store.go", + "kind": "exact", + "line": 14 + }, + { + "owner": "DB-AUTH", + "branch": "work/prc-db-auth", + "path": "internal/db/gorm/user_store_test.go", + "display": "internal/db/gorm/user_store_test.go", + "kind": "exact", + "line": 14 + }, + { + "owner": "DB-AUTH", + "branch": "work/prc-db-auth", + "path": "internal/worker/auth_handlers.go", + "display": "internal/worker/auth_handlers.go", + "kind": "exact", + "line": 14 + }, + { + "owner": "DB-AUTH", + "branch": "work/prc-db-auth", + "path": "internal/worker/auth_handlers_lifecycle_test.go", + "display": "internal/worker/auth_handlers_lifecycle_test.go", + "kind": "exact", + "line": 14 + }, + { + "owner": "DB-AUTH", + "branch": "work/prc-db-auth", + "path": ".agent/reports/db-auth-rework-maker-2026-07-10.md", + "display": ".agent/reports/db-auth-rework-maker-2026-07-10.md", + "kind": "exact", + "line": 14 + }, + { + "owner": "AUTH-BOOTSTRAP-SECURITY", + "branch": "work/prc-auth-bootstrap-security", + "path": "internal/config/config.go", + "display": "internal/config/config.go", + "kind": "exact", + "line": 15 + }, + { + "owner": "AUTH-BOOTSTRAP-SECURITY", + "branch": "work/prc-auth-bootstrap-security", + "path": "internal/config/config_test.go", + "display": "internal/config/config_test.go", + "kind": "exact", + "line": 15 + }, + { + "owner": "AUTH-BOOTSTRAP-SECURITY", + "branch": "work/prc-auth-bootstrap-security", + "path": "internal/config/envnames.go", + "display": "internal/config/envnames.go", + "kind": "exact", + "line": 15 + }, + { + "owner": "AUTH-BOOTSTRAP-SECURITY", + "branch": "work/prc-auth-bootstrap-security", + "path": "internal/db/gorm/user_store.go", + "display": "internal/db/gorm/user_store.go", + "kind": "exact", + "line": 15 + }, + { + "owner": "AUTH-BOOTSTRAP-SECURITY", + "branch": "work/prc-auth-bootstrap-security", + "path": "internal/worker/middleware.go", + "display": "internal/worker/middleware.go", + "kind": "exact", + "line": 15 + }, + { + "owner": "AUTH-BOOTSTRAP-SECURITY", + "branch": "work/prc-auth-bootstrap-security", + "path": "internal/worker/middleware_test.go", + "display": "internal/worker/middleware_test.go", + "kind": "exact", + "line": 15 + }, + { + "owner": "AUTH-BOOTSTRAP-SECURITY", + "branch": "work/prc-auth-bootstrap-security", + "path": "internal/worker/auth_handlers.go", + "display": "internal/worker/auth_handlers.go", + "kind": "exact", + "line": 15 + }, + { + "owner": "AUTH-BOOTSTRAP-SECURITY", + "branch": "work/prc-auth-bootstrap-security", + "path": "internal/worker/auth_bootstrap_limiter.go", + "display": "internal/worker/auth_bootstrap_limiter.go", + "kind": "exact", + "line": 15 + }, + { + "owner": "AUTH-BOOTSTRAP-SECURITY", + "branch": "work/prc-auth-bootstrap-security", + "path": "internal/worker/auth_bootstrap_limiter_test.go", + "display": "internal/worker/auth_bootstrap_limiter_test.go", + "kind": "exact", + "line": 15 + }, + { + "owner": "AUTH-BOOTSTRAP-SECURITY", + "branch": "work/prc-auth-bootstrap-security", + "path": "internal/worker/auth_bootstrap_security_test.go", + "display": "internal/worker/auth_bootstrap_security_test.go", + "kind": "exact", + "line": 15 + }, + { + "owner": "AUTH-BOOTSTRAP-SECURITY", + "branch": "work/prc-auth-bootstrap-security", + "path": "internal/worker/service.go", + "display": "internal/worker/service.go", + "kind": "exact", + "line": 15 + }, + { + "owner": "AUTH-BOOTSTRAP-SECURITY", + "branch": "work/prc-auth-bootstrap-security", + "path": "tests/critical/auth_bootstrap/first_admin_bootstrap_test.go", + "display": "tests/critical/auth_bootstrap/first_admin_bootstrap_test.go", + "kind": "exact", + "line": 15 + }, + { + "owner": "AUTH-BOOTSTRAP-SECURITY", + "branch": "work/prc-auth-bootstrap-security", + "path": "scripts/production-smoke/customer/run-auth-bootstrap-adversary.ps1", + "display": "scripts/production-smoke/customer/run-auth-bootstrap-adversary.ps1", + "kind": "exact", + "line": 15 + }, + { + "owner": "DURABLE-AUDIT-BOUNDARIES", + "branch": "work/prc-durable-audit-boundaries", + "path": "internal/db/gorm/domain_owner_store.go", + "display": "internal/db/gorm/domain_owner_store.go", + "kind": "exact", + "line": 16 + }, + { + "owner": "DURABLE-AUDIT-BOUNDARIES", + "branch": "work/prc-durable-audit-boundaries", + "path": "internal/db/gorm/domain_owner_store_test.go", + "display": "internal/db/gorm/domain_owner_store_test.go", + "kind": "exact", + "line": 16 + }, + { + "owner": "DURABLE-AUDIT-BOUNDARIES", + "branch": "work/prc-durable-audit-boundaries", + "path": "internal/db/gorm/user_store.go", + "display": "internal/db/gorm/user_store.go", + "kind": "exact", + "line": 16 + }, + { + "owner": "DURABLE-AUDIT-BOUNDARIES", + "branch": "work/prc-durable-audit-boundaries", + "path": "internal/worker/auth_handlers.go", + "display": "internal/worker/auth_handlers.go", + "kind": "exact", + "line": 16 + }, + { + "owner": "DURABLE-AUDIT-BOUNDARIES", + "branch": "work/prc-durable-audit-boundaries", + "path": "internal/worker/auth_audit_durability_test.go", + "display": "internal/worker/auth_audit_durability_test.go", + "kind": "exact", + "line": 16 + }, + { + "owner": "DURABLE-AUDIT-BOUNDARIES", + "branch": "work/prc-durable-audit-boundaries", + "path": "internal/bulkops/facade.go", + "display": "internal/bulkops/facade.go", + "kind": "exact", + "line": 16 + }, + { + "owner": "DURABLE-AUDIT-BOUNDARIES", + "branch": "work/prc-durable-audit-boundaries", + "path": "internal/bulkops/audit_durability_test.go", + "display": "internal/bulkops/audit_durability_test.go", + "kind": "exact", + "line": 16 + }, + { + "owner": "DURABLE-AUDIT-BOUNDARIES", + "branch": "work/prc-durable-audit-boundaries", + "path": "scripts/production-smoke/customer/run-durable-audit-faults.ps1", + "display": "scripts/production-smoke/customer/run-durable-audit-faults.ps1", + "kind": "exact", + "line": 16 + }, + { + "owner": "DB-CRYSTALLIZATION", + "branch": "work/prc-db-crystallization", + "path": "internal/worker/handlers_hooks_crystallization_integration_test.go", + "display": "internal/worker/handlers_hooks_crystallization_integration_test.go", + "kind": "exact", + "line": 17 + }, + { + "owner": "CRYSTALLIZATION-DREAM-CYCLE-CORRECTNESS", + "branch": "work/prc-crystallization-dream-cycle-correctness", + "path": "internal/worker/dream_cycle.go", + "display": "internal/worker/dream_cycle.go", + "kind": "exact", + "line": 18 + }, + { + "owner": "CRYSTALLIZATION-DREAM-CYCLE-CORRECTNESS", + "branch": "work/prc-crystallization-dream-cycle-correctness", + "path": "internal/worker/dream_cycle_test.go", + "display": "internal/worker/dream_cycle_test.go", + "kind": "exact", + "line": 18 + }, + { + "owner": "CRYSTALLIZATION-DREAM-CYCLE-CORRECTNESS", + "branch": "work/prc-crystallization-dream-cycle-correctness", + "path": ".agent/reports/2026-07-10-crystallization-dream-cycle-correctness-maker.md", + "display": ".agent/reports/2026-07-10-crystallization-dream-cycle-correctness-maker.md", + "kind": "exact", + "line": 18 + }, + { + "owner": "CRYSTALLIZATION-DREAM-CYCLE-CORRECTNESS", + "branch": "work/prc-crystallization-dream-cycle-correctness", + "path": ".agent/e/cdc", + "display": ".agent/e/cdc/**", + "kind": "prefix", + "line": 18 + }, + { + "owner": "DB-EMBEDDING-STATS", + "branch": "work/prc-db-embedding-stats", + "path": "internal/embedding/store.go", + "display": "internal/embedding/store.go", + "kind": "exact", + "line": 19 + }, + { + "owner": "DB-EMBEDDING-STATS", + "branch": "work/prc-db-embedding-stats", + "path": "internal/embedding/store_stats_test.go", + "display": "internal/embedding/store_stats_test.go", + "kind": "exact", + "line": 19 + }, + { + "owner": "DB-EMBEDDING-STATS", + "branch": "work/prc-db-embedding-stats", + "path": ".agent/reports/2026-07-10-db-embedding-stats-maker.md", + "display": ".agent/reports/2026-07-10-db-embedding-stats-maker.md", + "kind": "exact", + "line": 19 + }, + { + "owner": "DB-EMBEDDING-STATS", + "branch": "work/prc-db-embedding-stats", + "path": ".agent/reports/evidence/production-ready/db-embedding-stats", + "display": ".agent/reports/evidence/production-ready/db-embedding-stats/**", + "kind": "prefix", + "line": 19 + }, + { + "owner": "DB-EMBEDDING-STATS", + "branch": "work/prc-db-embedding-stats", + "path": ".agent/specs/db-embedding-stats/evidence", + "display": ".agent/specs/db-embedding-stats/evidence/**", + "kind": "prefix", + "line": 19 + }, + { + "owner": "DB-EMBEDDING-EVIDENCE-TRANSPORT", + "branch": "work/prc-db-embedding-evidence-transport-r6", + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport", + "display": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/**", + "kind": "prefix", + "line": 20 + }, + { + "owner": "DB-EMBEDDING-EVIDENCE-TRANSPORT", + "branch": "work/prc-db-embedding-evidence-transport-r6", + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3", + "display": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/**", + "kind": "prefix", + "line": 20 + }, + { + "owner": "DB-EMBEDDING-EVIDENCE-TRANSPORT", + "branch": "work/prc-db-embedding-evidence-transport-r6", + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4", + "display": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4/**", + "kind": "prefix", + "line": 20 + }, + { + "owner": "DB-EMBEDDING-EVIDENCE-TRANSPORT", + "branch": "work/prc-db-embedding-evidence-transport-r6", + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5", + "display": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/**", + "kind": "prefix", + "line": 20 + }, + { + "owner": "DB-EMBEDDING-EVIDENCE-TRANSPORT", + "branch": "work/prc-db-embedding-evidence-transport-r6", + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6", + "display": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/**", + "kind": "prefix", + "line": 20 + }, + { + "owner": "DB-EMBEDDING-EVIDENCE-TRANSPORT", + "branch": "work/prc-db-embedding-evidence-transport-r6", + "path": ".agent/specs/db-embedding-stats-evidence-transport/evidence", + "display": ".agent/specs/db-embedding-stats-evidence-transport/evidence/**", + "kind": "prefix", + "line": 20 + }, + { + "owner": "DB-REAPER", + "branch": "work/prc-db-reaper-shutdown-r4", + "path": "internal/worker/reaper/reaper.go", + "display": "internal/worker/reaper/reaper.go", + "kind": "exact", + "line": 21 + }, + { + "owner": "DB-REAPER", + "branch": "work/prc-db-reaper-shutdown-r4", + "path": "internal/worker/reaper/reaper_test.go", + "display": "internal/worker/reaper/reaper_test.go", + "kind": "exact", + "line": 21 + }, + { + "owner": "SECURITY-TOOLCHAIN", + "branch": "work/prc-security-toolchain", + "path": "go.mod", + "display": "go.mod", + "kind": "exact", + "line": 22 + }, + { + "owner": "SECURITY-TOOLCHAIN", + "branch": "work/prc-security-toolchain", + "path": "go.sum", + "display": "go.sum", + "kind": "exact", + "line": 22 + }, + { + "owner": "SECURITY-TOOLCHAIN", + "branch": "work/prc-security-toolchain", + "path": "Dockerfile", + "display": "Dockerfile", + "kind": "exact", + "line": 22 + }, + { + "owner": "RELEASE-GATES", + "branch": "work/prc-release-gates-revision9-maker", + "path": ".github/workflows/test.yml", + "display": ".github/workflows/test.yml", + "kind": "exact", + "line": 23 + }, + { + "owner": "RELEASE-GATES", + "branch": "work/prc-release-gates-revision9-maker", + "path": "scripts/production-gates/assert-plan-path-ownership.ps1", + "display": "scripts/production-gates/assert-plan-path-ownership.ps1", + "kind": "exact", + "line": 23 + }, + { + "owner": "RELEASE-GATES", + "branch": "work/prc-release-gates-revision9-maker", + "path": "scripts/production-gates/assert-active-candidate-path-authority.ps1", + "display": "scripts/production-gates/assert-active-candidate-path-authority.ps1", + "kind": "exact", + "line": 23 + }, + { + "owner": "RELEASE-GATES", + "branch": "work/prc-release-gates-revision9-maker", + "path": "scripts/production-gates/run-db-suite.ps1", + "display": "scripts/production-gates/run-db-suite.ps1", + "kind": "exact", + "line": 23 + }, + { + "owner": "RELEASE-GATES", + "branch": "work/prc-release-gates-revision9-maker", + "path": ".agent/specs/release-gates-r9/evidence/release-gates", + "display": ".agent/specs/release-gates-r9/evidence/release-gates/**", + "kind": "prefix", + "line": 23 + }, + { + "owner": "RELEASE-GATES", + "branch": "work/prc-release-gates-revision9-maker", + "path": ".agent/reports/2026-07-11-release-gates-r9-maker.md", + "display": ".agent/reports/2026-07-11-release-gates-r9-maker.md", + "kind": "exact", + "line": 23 + }, + { + "owner": "IMAGE-REMEDIATION", + "branch": "work/prc-image-remediation", + "path": "Dockerfile", + "display": "Dockerfile", + "kind": "exact", + "line": 24 + }, + { + "owner": "IMAGE-REMEDIATION", + "branch": "work/prc-image-remediation", + "path": "cmd/engram-healthcheck/main.go", + "display": "cmd/engram-healthcheck/main.go", + "kind": "exact", + "line": 24 + }, + { + "owner": "IMAGE-REMEDIATION", + "branch": "work/prc-image-remediation", + "path": "cmd/engram-healthcheck/main_test.go", + "display": "cmd/engram-healthcheck/main_test.go", + "kind": "exact", + "line": 24 + }, + { + "owner": "IMAGE-REMEDIATION", + "branch": "work/prc-image-remediation", + "path": "apps/operator-console/package.json", + "display": "apps/operator-console/package.json", + "kind": "exact", + "line": 24 + }, + { + "owner": "IMAGE-REMEDIATION", + "branch": "work/prc-image-remediation", + "path": "apps/operator-console/package-lock.json", + "display": "apps/operator-console/package-lock.json", + "kind": "exact", + "line": 24 + }, + { + "owner": "IMAGE-REMEDIATION", + "branch": "work/prc-image-remediation", + "path": "deploy/postgres/Dockerfile", + "display": "deploy/postgres/Dockerfile", + "kind": "exact", + "line": 24 + }, + { + "owner": "IMAGE-REMEDIATION", + "branch": "work/prc-image-remediation", + "path": "docker-compose.yml", + "display": "docker-compose.yml", + "kind": "exact", + "line": 24 + }, + { + "owner": "IMAGE-REMEDIATION", + "branch": "work/prc-image-remediation", + "path": "deploy/docker-compose.runtime.yml", + "display": "deploy/docker-compose.runtime.yml", + "kind": "exact", + "line": 24 + }, + { + "owner": "IMAGE-REMEDIATION", + "branch": "work/prc-image-remediation", + "path": "docs/DEPLOYMENT.md", + "display": "docs/DEPLOYMENT.md", + "kind": "exact", + "line": 24 + }, + { + "owner": "IMAGE-REMEDIATION", + "branch": "work/prc-image-remediation", + "path": "docs/PRODUCTION-TESTING-PLAYBOOK.md", + "display": "docs/PRODUCTION-TESTING-PLAYBOOK.md", + "kind": "exact", + "line": 24 + }, + { + "owner": "IMAGE-REMEDIATION", + "branch": "work/prc-image-remediation", + "path": ".github/workflows/test.yml", + "display": ".github/workflows/test.yml", + "kind": "exact", + "line": 24 + }, + { + "owner": "IMAGE-REMEDIATION", + "branch": "work/prc-image-remediation", + "path": ".github/workflows/docker.yaml", + "display": ".github/workflows/docker.yaml", + "kind": "exact", + "line": 24 + }, + { + "owner": "IMAGE-REMEDIATION", + "branch": "work/prc-image-remediation", + "path": ".github/workflows/docker-publish.yml", + "display": ".github/workflows/docker-publish.yml", + "kind": "exact", + "line": 24 + }, + { + "owner": "IMAGE-REMEDIATION", + "branch": "work/prc-image-remediation", + "path": "scripts/production-gates/build-and-scan-images.ps1", + "display": "scripts/production-gates/build-and-scan-images.ps1", + "kind": "exact", + "line": 24 + }, + { + "owner": "IMAGE-REMEDIATION", + "branch": "work/prc-image-remediation", + "path": "tests/critical/runtime/image_runtime_contract_test.go", + "display": "tests/critical/runtime/image_runtime_contract_test.go", + "kind": "exact", + "line": 24 + }, + { + "owner": "IMAGE-REMEDIATION", + "branch": "work/prc-image-remediation", + "path": "tests/critical/runtime/postgres_image_contract_test.go", + "display": "tests/critical/runtime/postgres_image_contract_test.go", + "kind": "exact", + "line": 24 + }, + { + "owner": "SECURITY-PROJECT-IDENTITY", + "branch": "work/prc-security-project-identity-r4", + "path": "internal/db/gorm/project_store.go", + "display": "internal/db/gorm/project_store.go", + "kind": "exact", + "line": 25 + }, + { + "owner": "SECURITY-PROJECT-IDENTITY", + "branch": "work/prc-security-project-identity-r4", + "path": "internal/db/gorm/project_identity_v2_test.go", + "display": "internal/db/gorm/project_identity_v2_test.go", + "kind": "exact", + "line": 25 + }, + { + "owner": "SECURITY-PROJECT-IDENTITY", + "branch": "work/prc-security-project-identity-r4", + "path": "internal/grpcserver/project_identity_v2_test.go", + "display": "internal/grpcserver/project_identity_v2_test.go", + "kind": "exact", + "line": 25 + }, + { + "owner": "SECURITY-PROJECT-IDENTITY", + "branch": "work/prc-security-project-identity-r4", + "path": "internal/proxy/identity.go", + "display": "internal/proxy/identity.go", + "kind": "exact", + "line": 25 + }, + { + "owner": "SECURITY-PROJECT-IDENTITY", + "branch": "work/prc-security-project-identity-r4", + "path": "internal/proxy/identity_test.go", + "display": "internal/proxy/identity_test.go", + "kind": "exact", + "line": 25 + }, + { + "owner": "SECURITY-PROJECT-IDENTITY", + "branch": "work/prc-security-project-identity-r4", + "path": "internal/proxy/identity_process_test.go", + "display": "internal/proxy/identity_process_test.go", + "kind": "exact", + "line": 25 + }, + { + "owner": "SECURITY-PROJECT-IDENTITY", + "branch": "work/prc-security-project-identity-r4", + "path": "plugin/engram/hooks/lib.js", + "display": "plugin/engram/hooks/lib.js", + "kind": "exact", + "line": 25 + }, + { + "owner": "SECURITY-PROJECT-IDENTITY", + "branch": "work/prc-security-project-identity-r4", + "path": "plugin/engram/hooks/project-identity-v2.test.js", + "display": "plugin/engram/hooks/project-identity-v2.test.js", + "kind": "exact", + "line": 25 + }, + { + "owner": "SECURITY-PROJECT-IDENTITY", + "branch": "work/prc-security-project-identity-r4", + "path": "plugin/openclaw-engram/src/identity.ts", + "display": "plugin/openclaw-engram/src/identity.ts", + "kind": "exact", + "line": 25 + }, + { + "owner": "SECURITY-PROJECT-IDENTITY", + "branch": "work/prc-security-project-identity-r4", + "path": "plugin/openclaw-engram/test/project-identity-v2.test.mjs", + "display": "plugin/openclaw-engram/test/project-identity-v2.test.mjs", + "kind": "exact", + "line": 25 + }, + { + "owner": "SECURITY-PROJECT-IDENTITY", + "branch": "work/prc-security-project-identity-r4", + "path": ".agent/specs/security-project-identity/evidence", + "display": ".agent/specs/security-project-identity/evidence/**", + "kind": "prefix", + "line": 25 + }, + { + "owner": "SECURITY-PROJECT-IDENTITY", + "branch": "work/prc-security-project-identity-r4", + "path": ".agent/reports/evidence/production-ready/security-project-identity", + "display": ".agent/reports/evidence/production-ready/security-project-identity/**", + "kind": "prefix", + "line": 25 + }, + { + "owner": "OPENCLAW-RELEASE", + "branch": "work/prc-openclaw-release", + "path": "plugin/openclaw-engram/.gitignore", + "display": "plugin/openclaw-engram/.gitignore", + "kind": "exact", + "line": 26 + }, + { + "owner": "OPENCLAW-RELEASE", + "branch": "work/prc-openclaw-release", + "path": "plugin/openclaw-engram/package.json", + "display": "plugin/openclaw-engram/package.json", + "kind": "exact", + "line": 26 + }, + { + "owner": "OPENCLAW-RELEASE", + "branch": "work/prc-openclaw-release", + "path": "plugin/openclaw-engram/package-lock.json", + "display": "plugin/openclaw-engram/package-lock.json", + "kind": "exact", + "line": 26 + }, + { + "owner": "OPENCLAW-RELEASE", + "branch": "work/prc-openclaw-release", + "path": "plugin/openclaw-engram/openclaw.plugin.json", + "display": "plugin/openclaw-engram/openclaw.plugin.json", + "kind": "exact", + "line": 26 + }, + { + "owner": "OPENCLAW-RELEASE", + "branch": "work/prc-openclaw-release", + "path": "plugin/openclaw-engram/README.md", + "display": "plugin/openclaw-engram/README.md", + "kind": "exact", + "line": 26 + }, + { + "owner": "OPENCLAW-RELEASE", + "branch": "work/prc-openclaw-release", + "path": ".github/workflows/plugin-publish.yml", + "display": ".github/workflows/plugin-publish.yml", + "kind": "exact", + "line": 26 + }, + { + "owner": "OPENCLAW-RELEASE", + "branch": "work/prc-openclaw-release", + "path": "docs/RELEASE-PROTOCOL.md", + "display": "docs/RELEASE-PROTOCOL.md", + "kind": "exact", + "line": 26 + }, + { + "owner": "UPDATE-LIFECYCLE", + "branch": "work/prc-security-updater", + "path": "internal/update/update.go", + "display": "internal/update/update.go", + "kind": "exact", + "line": 27 + }, + { + "owner": "UPDATE-LIFECYCLE", + "branch": "work/prc-security-updater", + "path": "internal/update/update_test.go", + "display": "internal/update/update_test.go", + "kind": "exact", + "line": 27 + }, + { + "owner": "UPDATE-LIFECYCLE", + "branch": "work/prc-security-updater", + "path": "internal/worker/handlers_update.go", + "display": "internal/worker/handlers_update.go", + "kind": "exact", + "line": 27 + }, + { + "owner": "UPDATE-LIFECYCLE", + "branch": "work/prc-security-updater", + "path": "internal/worker/handlers_update_test.go", + "display": "internal/worker/handlers_update_test.go", + "kind": "exact", + "line": 27 + }, + { + "owner": "UPDATE-LIFECYCLE", + "branch": "work/prc-security-updater", + "path": "scripts/install.sh", + "display": "scripts/install.sh", + "kind": "exact", + "line": 27 + }, + { + "owner": "UPDATE-LIFECYCLE", + "branch": "work/prc-security-updater", + "path": "scripts/install.ps1", + "display": "scripts/install.ps1", + "kind": "exact", + "line": 27 + }, + { + "owner": "UPDATE-LIFECYCLE", + "branch": "work/prc-security-updater", + "path": ".goreleaser.yaml", + "display": ".goreleaser.yaml", + "kind": "exact", + "line": 27 + }, + { + "owner": "UPDATE-LIFECYCLE", + "branch": "work/prc-security-updater", + "path": ".github/workflows/release.yaml", + "display": ".github/workflows/release.yaml", + "kind": "exact", + "line": 27 + }, + { + "owner": "UPDATE-LIFECYCLE", + "branch": "work/prc-security-updater", + "path": "plugin/engram/hooks/hook-cli.test.js", + "display": "plugin/engram/hooks/hook-cli.test.js", + "kind": "exact", + "line": 27 + }, + { + "owner": "DOCUMENT-INGEST-PUBLIC-TRUTH", + "branch": "work/prc-document-ingest-public-truth", + "path": "internal/mcp/server.go", + "display": "internal/mcp/server.go", + "kind": "exact", + "line": 29 + }, + { + "owner": "DOCUMENT-INGEST-PUBLIC-TRUTH", + "branch": "work/prc-document-ingest-public-truth", + "path": "internal/mcp/ingest_document_description_test.go", + "display": "internal/mcp/ingest_document_description_test.go", + "kind": "exact", + "line": 29 + }, + { + "owner": "MCP-STRUCTURED-INPUT-VALIDATION", + "branch": "work/prc-mcp-structured-input-validation", + "path": "internal/mcp/coerce.go", + "display": "internal/mcp/coerce.go", + "kind": "exact", + "line": 31 + }, + { + "owner": "MCP-STRUCTURED-INPUT-VALIDATION", + "branch": "work/prc-mcp-structured-input-validation", + "path": "internal/mcp/coerce_test.go", + "display": "internal/mcp/coerce_test.go", + "kind": "exact", + "line": 31 + }, + { + "owner": "MCP-STRUCTURED-INPUT-VALIDATION", + "branch": "work/prc-mcp-structured-input-validation", + "path": "internal/mcp/tools_candidates.go", + "display": "internal/mcp/tools_candidates.go", + "kind": "exact", + "line": 31 + }, + { + "owner": "MCP-STRUCTURED-INPUT-VALIDATION", + "branch": "work/prc-mcp-structured-input-validation", + "path": "internal/mcp/tools_candidates_test.go", + "display": "internal/mcp/tools_candidates_test.go", + "kind": "exact", + "line": 31 + }, + { + "owner": "MCP-STRUCTURED-INPUT-VALIDATION", + "branch": "work/prc-mcp-structured-input-validation", + "path": "internal/mcp/tools_memory.go", + "display": "internal/mcp/tools_memory.go", + "kind": "exact", + "line": 31 + }, + { + "owner": "MCP-STRUCTURED-INPUT-VALIDATION", + "branch": "work/prc-mcp-structured-input-validation", + "path": "internal/mcp/tools_memory_edit_test.go", + "display": "internal/mcp/tools_memory_edit_test.go", + "kind": "exact", + "line": 31 + }, + { + "owner": "MCP-STRUCTURED-INPUT-VALIDATION", + "branch": "work/prc-mcp-structured-input-validation", + "path": "internal/mcp/tools_memory_significance.go", + "display": "internal/mcp/tools_memory_significance.go", + "kind": "exact", + "line": 31 + }, + { + "owner": "MCP-STRUCTURED-INPUT-VALIDATION", + "branch": "work/prc-mcp-structured-input-validation", + "path": "internal/mcp/tools_memory_significance_test.go", + "display": "internal/mcp/tools_memory_significance_test.go", + "kind": "exact", + "line": 31 + }, + { + "owner": "MCP-STRUCTURED-INPUT-VALIDATION", + "branch": "work/prc-mcp-structured-input-validation", + "path": "internal/mcp/tools_store_consolidated.go", + "display": "internal/mcp/tools_store_consolidated.go", + "kind": "exact", + "line": 31 + }, + { + "owner": "MCP-STRUCTURED-INPUT-VALIDATION", + "branch": "work/prc-mcp-structured-input-validation", + "path": "internal/mcp/tools_settings.go", + "display": "internal/mcp/tools_settings.go", + "kind": "exact", + "line": 31 + }, + { + "owner": "MCP-STRUCTURED-INPUT-VALIDATION", + "branch": "work/prc-mcp-structured-input-validation", + "path": "internal/mcp/tools_settings_test.go", + "display": "internal/mcp/tools_settings_test.go", + "kind": "exact", + "line": 31 + }, + { + "owner": "MCP-STRUCTURED-INPUT-VALIDATION", + "branch": "work/prc-mcp-structured-input-validation", + "path": "internal/mcp/tools_documents_v2.go", + "display": "internal/mcp/tools_documents_v2.go", + "kind": "exact", + "line": 31 + }, + { + "owner": "MCP-STRUCTURED-INPUT-VALIDATION", + "branch": "work/prc-mcp-structured-input-validation", + "path": "internal/mcp/tools_rule_governance.go", + "display": "internal/mcp/tools_rule_governance.go", + "kind": "exact", + "line": 31 + }, + { + "owner": "MCP-STRUCTURED-INPUT-VALIDATION", + "branch": "work/prc-mcp-structured-input-validation", + "path": "internal/mcp/tools_rule_governance_test.go", + "display": "internal/mcp/tools_rule_governance_test.go", + "kind": "exact", + "line": 31 + }, + { + "owner": "MCP-STRUCTURED-INPUT-VALIDATION", + "branch": "work/prc-mcp-structured-input-validation", + "path": "internal/mcp/structured_input_validation_test.go", + "display": "internal/mcp/structured_input_validation_test.go", + "kind": "exact", + "line": 31 + }, + { + "owner": "REDACTION-LIVE-CONTRACT", + "branch": "work/prc-redaction-live-contract", + "path": "internal/redaction/layer.go", + "display": "internal/redaction/layer.go", + "kind": "exact", + "line": 32 + }, + { + "owner": "REDACTION-LIVE-CONTRACT", + "branch": "work/prc-redaction-live-contract", + "path": "internal/redaction/layer_test.go", + "display": "internal/redaction/layer_test.go", + "kind": "exact", + "line": 32 + }, + { + "owner": "REDACTION-LIVE-CONTRACT", + "branch": "work/prc-redaction-live-contract", + "path": "internal/redaction/rejection_test.go", + "display": "internal/redaction/rejection_test.go", + "kind": "exact", + "line": 32 + }, + { + "owner": "REDACTION-LIVE-CONTRACT", + "branch": "work/prc-redaction-live-contract", + "path": "internal/mcp/redaction_guard.go", + "display": "internal/mcp/redaction_guard.go", + "kind": "exact", + "line": 32 + }, + { + "owner": "REDACTION-LIVE-CONTRACT", + "branch": "work/prc-redaction-live-contract", + "path": "internal/mcp/redaction_guard_test.go", + "display": "internal/mcp/redaction_guard_test.go", + "kind": "exact", + "line": 32 + }, + { + "owner": "REDACTION-LIVE-CONTRACT", + "branch": "work/prc-redaction-live-contract", + "path": "internal/mcp/tools_memory.go", + "display": "internal/mcp/tools_memory.go", + "kind": "exact", + "line": 32 + }, + { + "owner": "REDACTION-LIVE-CONTRACT", + "branch": "work/prc-redaction-live-contract", + "path": "internal/mcp/tools_rules.go", + "display": "internal/mcp/tools_rules.go", + "kind": "exact", + "line": 32 + }, + { + "owner": "REDACTION-LIVE-CONTRACT", + "branch": "work/prc-redaction-live-contract", + "path": "internal/mcp/tools_memory_redaction_audit_test.go", + "display": "internal/mcp/tools_memory_redaction_audit_test.go", + "kind": "exact", + "line": 32 + }, + { + "owner": "REDACTION-LIVE-CONTRACT", + "branch": "work/prc-redaction-live-contract", + "path": "internal/mcp/tools_rules_redaction_audit_test.go", + "display": "internal/mcp/tools_rules_redaction_audit_test.go", + "kind": "exact", + "line": 32 + }, + { + "owner": "REDACTION-LIVE-CONTRACT", + "branch": "work/prc-redaction-live-contract", + "path": "internal/worker/service.go", + "display": "internal/worker/service.go", + "kind": "exact", + "line": 32 + }, + { + "owner": "REDACTION-LIVE-CONTRACT", + "branch": "work/prc-redaction-live-contract", + "path": "internal/worker/service_redaction_test.go", + "display": "internal/worker/service_redaction_test.go", + "kind": "exact", + "line": 32 + }, + { + "owner": "REDACTION-LIVE-CONTRACT", + "branch": "work/prc-redaction-live-contract", + "path": "docs/operating-engram.md", + "display": "docs/operating-engram.md", + "kind": "exact", + "line": 32 + }, + { + "owner": "REDACTION-LIVE-CONTRACT", + "branch": "work/prc-redaction-live-contract", + "path": ".agent/reports/evidence/production-ready/redaction-live-contract", + "display": ".agent/reports/evidence/production-ready/redaction-live-contract/**", + "kind": "prefix", + "line": 32 + }, + { + "owner": "RETRIEVAL-VECTOR-CONTRACT", + "branch": "work/prc-retrieval-vector-contract", + "path": "internal/retrieval/hybrid_integration_test.go", + "display": "internal/retrieval/hybrid_integration_test.go", + "kind": "exact", + "line": 34 + }, + { + "owner": "STATIC-EMBED-CONTRACT", + "branch": "work/prc-static-embed-contract", + "path": "internal/worker/static_embed_test.go", + "display": "internal/worker/static_embed_test.go", + "kind": "exact", + "line": 35 + }, + { + "owner": "PRE-V5-UPGRADE-CONTRACT", + "branch": "work/prc-pre-v5-upgrade-contract", + "path": "internal/db/gorm/migrations_integration_test.go", + "display": "internal/db/gorm/migrations_integration_test.go", + "kind": "exact", + "line": 36 + }, + { + "owner": "PRE-V5-UPGRADE-CONTRACT", + "branch": "work/prc-pre-v5-upgrade-contract", + "path": "internal/grpcserver/credential_migration_test.go", + "display": "internal/grpcserver/credential_migration_test.go", + "kind": "exact", + "line": 36 + }, + { + "owner": "PRE-V5-UPGRADE-CONTRACT", + "branch": "work/prc-pre-v5-upgrade-contract", + "path": "tests/fixtures/pre-v5", + "display": "tests/fixtures/pre-v5/**", + "kind": "prefix", + "line": 36 + }, + { + "owner": "PRE-V5-UPGRADE-CONTRACT", + "branch": "work/prc-pre-v5-upgrade-contract", + "path": "tests/critical/recovery/pre_v5_upgrade_test.go", + "display": "tests/critical/recovery/pre_v5_upgrade_test.go", + "kind": "exact", + "line": 36 + }, + { + "owner": "PRE-V5-UPGRADE-CONTRACT", + "branch": "work/prc-pre-v5-upgrade-contract", + "path": "scripts/production-smoke/customer/run-pre-v5-upgrade.ps1", + "display": "scripts/production-smoke/customer/run-pre-v5-upgrade.ps1", + "kind": "exact", + "line": 36 + }, + { + "owner": "T007-COMPAT-DEMOLITION-CLASSIFICATION", + "branch": "work/prc-t007-compat-classification", + "path": "internal/mcp/store_memory_compat_t007_test.go", + "display": "internal/mcp/store_memory_compat_t007_test.go", + "kind": "exact", + "line": 37 + }, + { + "owner": "DB-RULES-ISOLATION", + "branch": "work/prc-db-rules-isolation", + "path": "internal/worker/handlers_rules_test.go", + "display": "internal/worker/handlers_rules_test.go", + "kind": "exact", + "line": 38 + }, + { + "owner": "DB-RULES-ISOLATION", + "branch": "work/prc-db-rules-isolation", + "path": "scripts/production-gates/run-db-rules-isolation.ps1", + "display": "scripts/production-gates/run-db-rules-isolation.ps1", + "kind": "exact", + "line": 38 + }, + { + "owner": "COVERAGE-CMD-ENGRAM", + "branch": "work/prc-coverage-cmd-engram", + "path": "cmd/engram/production_readiness_coverage_test.go", + "display": "cmd/engram/production_readiness_coverage_test.go", + "kind": "exact", + "line": 39 + }, + { + "owner": "COVERAGE-CMD-SERVER", + "branch": "work/prc-coverage-cmd-server", + "path": "cmd/engram-server/production_readiness_coverage_test.go", + "display": "cmd/engram-server/production_readiness_coverage_test.go", + "kind": "exact", + "line": 40 + }, + { + "owner": "COVERAGE-UPDATE", + "branch": "work/prc-coverage-update", + "path": "internal/update/production_readiness_coverage_test.go", + "display": "internal/update/production_readiness_coverage_test.go", + "kind": "exact", + "line": 41 + }, + { + "owner": "COVERAGE-WORKER", + "branch": "work/prc-coverage-worker", + "path": "internal/worker/production_readiness_coverage_test.go", + "display": "internal/worker/production_readiness_coverage_test.go", + "kind": "exact", + "line": 43 + }, + { + "owner": "COVERAGE-MCP", + "branch": "work/prc-coverage-mcp", + "path": "internal/mcp/production_readiness_coverage_test.go", + "display": "internal/mcp/production_readiness_coverage_test.go", + "kind": "exact", + "line": 44 + }, + { + "owner": "COVERAGE-GORM", + "branch": "work/prc-coverage-gorm", + "path": "internal/db/gorm/production_readiness_coverage_test.go", + "display": "internal/db/gorm/production_readiness_coverage_test.go", + "kind": "exact", + "line": 45 + }, + { + "owner": "COVERAGE-LOOM", + "branch": "work/prc-coverage-loom", + "path": "internal/handlers/loom/production_readiness_coverage_test.go", + "display": "internal/handlers/loom/production_readiness_coverage_test.go", + "kind": "exact", + "line": 46 + }, + { + "owner": "DEPLOYMENT-ROLLBACK", + "branch": "work/prc-deployment-rollback", + "path": "docker-compose.yml", + "display": "docker-compose.yml", + "kind": "exact", + "line": 47 + }, + { + "owner": "DEPLOYMENT-ROLLBACK", + "branch": "work/prc-deployment-rollback", + "path": "deploy/docker-compose.runtime.yml", + "display": "deploy/docker-compose.runtime.yml", + "kind": "exact", + "line": 47 + }, + { + "owner": "DEPLOYMENT-ROLLBACK", + "branch": "work/prc-deployment-rollback", + "path": "deploy/docker-compose.operator-web-standalone.yml", + "display": "deploy/docker-compose.operator-web-standalone.yml", + "kind": "exact", + "line": 47 + }, + { + "owner": "DEPLOYMENT-ROLLBACK", + "branch": "work/prc-deployment-rollback", + "path": "deploy/entrypoint-server.sh", + "display": "deploy/entrypoint-server.sh", + "kind": "exact", + "line": 47 + }, + { + "owner": "DEPLOYMENT-ROLLBACK", + "branch": "work/prc-deployment-rollback", + "path": "deploy/healthcheck-server.sh", + "display": "deploy/healthcheck-server.sh", + "kind": "exact", + "line": 47 + }, + { + "owner": "DEPLOYMENT-ROLLBACK", + "branch": "work/prc-deployment-rollback", + "path": "deploy/verify-rollback.ps1", + "display": "deploy/verify-rollback.ps1", + "kind": "exact", + "line": 47 + }, + { + "owner": "DEPLOYMENT-ROLLBACK", + "branch": "work/prc-deployment-rollback", + "path": "deploy/verify-runtime-policy.ps1", + "display": "deploy/verify-runtime-policy.ps1", + "kind": "exact", + "line": 47 + }, + { + "owner": "RECOVERY-DATA", + "branch": "work/prc-recovery-data", + "path": "scripts/recovery/start-disposable-postgres.ps1", + "display": "scripts/recovery/start-disposable-postgres.ps1", + "kind": "exact", + "line": 48 + }, + { + "owner": "RECOVERY-DATA", + "branch": "work/prc-recovery-data", + "path": "scripts/recovery/verify-postgres-roundtrip.ps1", + "display": "scripts/recovery/verify-postgres-roundtrip.ps1", + "kind": "exact", + "line": 48 + }, + { + "owner": "RECOVERY-DATA", + "branch": "work/prc-recovery-data", + "path": "scripts/recovery/seed-recovery-fixture.ps1", + "display": "scripts/recovery/seed-recovery-fixture.ps1", + "kind": "exact", + "line": 48 + }, + { + "owner": "RECOVERY-DATA", + "branch": "work/prc-recovery-data", + "path": "scripts/recovery/assert-recovery-fixture.ps1", + "display": "scripts/recovery/assert-recovery-fixture.ps1", + "kind": "exact", + "line": 48 + }, + { + "owner": "RECOVERY-DATA", + "branch": "work/prc-recovery-data", + "path": "tests/critical/recovery/postgres_roundtrip_test.go", + "display": "tests/critical/recovery/postgres_roundtrip_test.go", + "kind": "exact", + "line": 48 + }, + { + "owner": "OBSERVABILITY-OTLP", + "branch": "work/prc-observability-otlp", + "path": "internal/module/obs/logging.go", + "display": "internal/module/obs/logging.go", + "kind": "exact", + "line": 49 + }, + { + "owner": "OBSERVABILITY-OTLP", + "branch": "work/prc-observability-otlp", + "path": "internal/module/obs/logging_test.go", + "display": "internal/module/obs/logging_test.go", + "kind": "exact", + "line": 49 + }, + { + "owner": "OBSERVABILITY-OTLP", + "branch": "work/prc-observability-otlp", + "path": "internal/module/obs/meter.go", + "display": "internal/module/obs/meter.go", + "kind": "exact", + "line": 49 + }, + { + "owner": "OBSERVABILITY-OTLP", + "branch": "work/prc-observability-otlp", + "path": "internal/module/obs/meter_test.go", + "display": "internal/module/obs/meter_test.go", + "kind": "exact", + "line": 49 + }, + { + "owner": "OBSERVABILITY-OTLP", + "branch": "work/prc-observability-otlp", + "path": "internal/module/obs/metrics.go", + "display": "internal/module/obs/metrics.go", + "kind": "exact", + "line": 49 + }, + { + "owner": "OBSERVABILITY-OTLP", + "branch": "work/prc-observability-otlp", + "path": "internal/module/obs/metrics_test.go", + "display": "internal/module/obs/metrics_test.go", + "kind": "exact", + "line": 49 + }, + { + "owner": "OBSERVABILITY-OTLP", + "branch": "work/prc-observability-otlp", + "path": "cmd/engram-server/main.go", + "display": "cmd/engram-server/main.go", + "kind": "exact", + "line": 49 + }, + { + "owner": "OBSERVABILITY-OTLP", + "branch": "work/prc-observability-otlp", + "path": "cmd/engram-server/main_test.go", + "display": "cmd/engram-server/main_test.go", + "kind": "exact", + "line": 49 + }, + { + "owner": "OBSERVABILITY-OTLP", + "branch": "work/prc-observability-otlp", + "path": "scripts/production-smoke/verify-otlp.ps1", + "display": "scripts/production-smoke/verify-otlp.ps1", + "kind": "exact", + "line": 49 + }, + { + "owner": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "path": "internal/scope/domain_policy.go", + "display": "internal/scope/domain_policy.go", + "kind": "exact", + "line": 50 + }, + { + "owner": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "path": "internal/scope/domain_policy_test.go", + "display": "internal/scope/domain_policy_test.go", + "kind": "exact", + "line": 50 + }, + { + "owner": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "path": "internal/scope/filter.go", + "display": "internal/scope/filter.go", + "kind": "exact", + "line": 50 + }, + { + "owner": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "path": "internal/scope/filter_test.go", + "display": "internal/scope/filter_test.go", + "kind": "exact", + "line": 50 + }, + { + "owner": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "path": "internal/scope/filter_principal_test.go", + "display": "internal/scope/filter_principal_test.go", + "kind": "exact", + "line": 50 + }, + { + "owner": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "path": "internal/scope/filter_w4_test.go", + "display": "internal/scope/filter_w4_test.go", + "kind": "exact", + "line": 50 + }, + { + "owner": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "path": "internal/principalmemory/access_policy.go", + "display": "internal/principalmemory/access_policy.go", + "kind": "exact", + "line": 50 + }, + { + "owner": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "path": "internal/principalmemory/access_policy_test.go", + "display": "internal/principalmemory/access_policy_test.go", + "kind": "exact", + "line": 50 + }, + { + "owner": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "path": "internal/principalmemory/domain_registry.go", + "display": "internal/principalmemory/domain_registry.go", + "kind": "exact", + "line": 50 + }, + { + "owner": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "path": "internal/principalmemory/domain_registry_test.go", + "display": "internal/principalmemory/domain_registry_test.go", + "kind": "exact", + "line": 50 + }, + { + "owner": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "path": "internal/principalmemory/query_service.go", + "display": "internal/principalmemory/query_service.go", + "kind": "exact", + "line": 50 + }, + { + "owner": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "path": "internal/principalmemory/query_service_test.go", + "display": "internal/principalmemory/query_service_test.go", + "kind": "exact", + "line": 50 + }, + { + "owner": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "path": "internal/mcp/tools_principal_memory.go", + "display": "internal/mcp/tools_principal_memory.go", + "kind": "exact", + "line": 50 + }, + { + "owner": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "path": "internal/mcp/tools_principal_memory_test.go", + "display": "internal/mcp/tools_principal_memory_test.go", + "kind": "exact", + "line": 50 + }, + { + "owner": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "path": "internal/mcp/tools_recall_principal_test.go", + "display": "internal/mcp/tools_recall_principal_test.go", + "kind": "exact", + "line": 50 + }, + { + "owner": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "path": "internal/mcp/recall_visibility_backfill_test.go", + "display": "internal/mcp/recall_visibility_backfill_test.go", + "kind": "exact", + "line": 50 + }, + { + "owner": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "path": "internal/mcp/store_memory_principal_test.go", + "display": "internal/mcp/store_memory_principal_test.go", + "kind": "exact", + "line": 50 + }, + { + "owner": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "path": "internal/worker/handlers_principal_memory.go", + "display": "internal/worker/handlers_principal_memory.go", + "kind": "exact", + "line": 50 + }, + { + "owner": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "path": "internal/worker/handlers_principal_memory_test.go", + "display": "internal/worker/handlers_principal_memory_test.go", + "kind": "exact", + "line": 50 + }, + { + "owner": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "path": "internal/worker/scope_bypass_w4_test.go", + "display": "internal/worker/scope_bypass_w4_test.go", + "kind": "exact", + "line": 50 + }, + { + "owner": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "path": "internal/worker/retention.go", + "display": "internal/worker/retention.go", + "kind": "exact", + "line": 50 + }, + { + "owner": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "path": "internal/worker/retention_test.go", + "display": "internal/worker/retention_test.go", + "kind": "exact", + "line": 50 + }, + { + "owner": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "path": "internal/db/gorm/memory_store.go", + "display": "internal/db/gorm/memory_store.go", + "kind": "exact", + "line": 50 + }, + { + "owner": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "path": "internal/db/gorm/memory_store_principal_test.go", + "display": "internal/db/gorm/memory_store_principal_test.go", + "kind": "exact", + "line": 50 + }, + { + "owner": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "path": "internal/db/gorm/memory_store_principal_query_test.go", + "display": "internal/db/gorm/memory_store_principal_query_test.go", + "kind": "exact", + "line": 50 + }, + { + "owner": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "path": "internal/db/gorm/purge_store_test.go", + "display": "internal/db/gorm/purge_store_test.go", + "kind": "exact", + "line": 50 + }, + { + "owner": "PRIVACY-BOUNDARIES", + "branch": "work/prc-privacy-boundaries", + "path": "tests/critical/data_boundaries/principal_project_retention_test.go", + "display": "tests/critical/data_boundaries/principal_project_retention_test.go", + "kind": "exact", + "line": 50 + }, + { + "owner": "CRITICAL-HARNESS", + "branch": "work/prc-critical-harness", + "path": "tests/critical/customer_mode/customer_mode_test.go", + "display": "tests/critical/customer_mode/customer_mode_test.go", + "kind": "exact", + "line": 51 + }, + { + "owner": "CRITICAL-HARNESS", + "branch": "work/prc-critical-harness", + "path": "tests/critical/customer_mode/compatibility_test.go", + "display": "tests/critical/customer_mode/compatibility_test.go", + "kind": "exact", + "line": 51 + }, + { + "owner": "CRITICAL-HARNESS", + "branch": "work/prc-critical-harness", + "path": "tests/critical/customer_mode/cross_agent_test.go", + "display": "tests/critical/customer_mode/cross_agent_test.go", + "kind": "exact", + "line": 51 + }, + { + "owner": "CRITICAL-HARNESS", + "branch": "work/prc-critical-harness", + "path": "scripts/production-smoke/customer/run-customer-mode.ps1", + "display": "scripts/production-smoke/customer/run-customer-mode.ps1", + "kind": "exact", + "line": 51 + }, + { + "owner": "CRITICAL-HARNESS", + "branch": "work/prc-critical-harness", + "path": "scripts/production-smoke/customer/run-client-compatibility.ps1", + "display": "scripts/production-smoke/customer/run-client-compatibility.ps1", + "kind": "exact", + "line": 51 + }, + { + "owner": "CRITICAL-HARNESS", + "branch": "work/prc-critical-harness", + "path": "scripts/production-smoke/customer/run-cross-agent.ps1", + "display": "scripts/production-smoke/customer/run-cross-agent.ps1", + "kind": "exact", + "line": 51 + }, + { + "owner": "CRITICAL-HARNESS", + "branch": "work/prc-critical-harness", + "path": "scripts/production-smoke/customer/run-diagnostic-matrix.ps1", + "display": "scripts/production-smoke/customer/run-diagnostic-matrix.ps1", + "kind": "exact", + "line": 51 + }, + { + "owner": "CRITICAL-HARNESS", + "branch": "work/prc-critical-harness", + "path": "scripts/production-smoke/customer/assert-product-works.ps1", + "display": "scripts/production-smoke/customer/assert-product-works.ps1", + "kind": "exact", + "line": 51 + }, + { + "owner": "CORE-PUBLIC-TRUTH", + "branch": "work/prc-core-public-truth", + "path": "README.md", + "display": "README.md", + "kind": "exact", + "line": 52 + }, + { + "owner": "CORE-PUBLIC-TRUTH", + "branch": "work/prc-core-public-truth", + "path": "README.ru.md", + "display": "README.ru.md", + "kind": "exact", + "line": 52 + }, + { + "owner": "CORE-PUBLIC-TRUTH", + "branch": "work/prc-core-public-truth", + "path": "README.zh.md", + "display": "README.zh.md", + "kind": "exact", + "line": 52 + }, + { + "owner": "CORE-PUBLIC-TRUTH", + "branch": "work/prc-core-public-truth", + "path": "CONTRIBUTING.md", + "display": "CONTRIBUTING.md", + "kind": "exact", + "line": 52 + }, + { + "owner": "CORE-PUBLIC-TRUTH", + "branch": "work/prc-core-public-truth", + "path": "CHANGELOG.md", + "display": "CHANGELOG.md", + "kind": "exact", + "line": 52 + }, + { + "owner": "CORE-PUBLIC-TRUTH", + "branch": "work/prc-core-public-truth", + "path": "Makefile", + "display": "Makefile", + "kind": "exact", + "line": 52 + }, + { + "owner": "CORE-PUBLIC-TRUTH", + "branch": "work/prc-core-public-truth", + "path": ".env.example", + "display": ".env.example", + "kind": "exact", + "line": 52 + }, + { + "owner": "CORE-PUBLIC-TRUTH", + "branch": "work/prc-core-public-truth", + "path": "docs/DEPLOYMENT.md", + "display": "docs/DEPLOYMENT.md", + "kind": "exact", + "line": 52 + }, + { + "owner": "CORE-PUBLIC-TRUTH", + "branch": "work/prc-core-public-truth", + "path": "docs/MIGRATION.md", + "display": "docs/MIGRATION.md", + "kind": "exact", + "line": 52 + }, + { + "owner": "CORE-PUBLIC-TRUTH", + "branch": "work/prc-core-public-truth", + "path": "docs/PRODUCTION-TESTING-PLAYBOOK.md", + "display": "docs/PRODUCTION-TESTING-PLAYBOOK.md", + "kind": "exact", + "line": 52 + }, + { + "owner": "CORE-PUBLIC-TRUTH", + "branch": "work/prc-core-public-truth", + "path": "docs/arch/CONFIGURATION.md", + "display": "docs/arch/CONFIGURATION.md", + "kind": "exact", + "line": 52 + }, + { + "owner": "CORE-PUBLIC-TRUTH", + "branch": "work/prc-core-public-truth", + "path": "docs/arch/QUICKSTART.md", + "display": "docs/arch/QUICKSTART.md", + "kind": "exact", + "line": 52 + }, + { + "owner": "CORE-PUBLIC-TRUTH", + "branch": "work/prc-core-public-truth", + "path": "docs/release-notes/v6.43.0.md", + "display": "docs/release-notes/v6.43.0.md", + "kind": "exact", + "line": 52 + }, + { + "owner": "CORE-PUBLIC-TRUTH", + "branch": "work/prc-core-public-truth", + "path": "docs/public/engram.jpg", + "display": "docs/public/engram.jpg", + "kind": "exact", + "line": 52 + }, + { + "owner": "CORE-PUBLIC-TRUTH", + "branch": "work/prc-core-public-truth", + "path": "plugin/engram/commands/setup.md", + "display": "plugin/engram/commands/setup.md", + "kind": "exact", + "line": 52 + }, + { + "owner": "CORE-PUBLIC-TRUTH", + "branch": "work/prc-core-public-truth", + "path": "plugin/engram/commands/doctor.md", + "display": "plugin/engram/commands/doctor.md", + "kind": "exact", + "line": 52 + }, + { + "owner": "FINAL-PUBLIC-TRUTH", + "branch": "work/prc-final-public-truth", + "path": "README.md", + "display": "README.md", + "kind": "exact", + "line": 53 + }, + { + "owner": "FINAL-PUBLIC-TRUTH", + "branch": "work/prc-final-public-truth", + "path": "README.ru.md", + "display": "README.ru.md", + "kind": "exact", + "line": 53 + }, + { + "owner": "FINAL-PUBLIC-TRUTH", + "branch": "work/prc-final-public-truth", + "path": "README.zh.md", + "display": "README.zh.md", + "kind": "exact", + "line": 53 + }, + { + "owner": "FINAL-PUBLIC-TRUTH", + "branch": "work/prc-final-public-truth", + "path": "CONTRIBUTING.md", + "display": "CONTRIBUTING.md", + "kind": "exact", + "line": 53 + }, + { + "owner": "FINAL-PUBLIC-TRUTH", + "branch": "work/prc-final-public-truth", + "path": "CHANGELOG.md", + "display": "CHANGELOG.md", + "kind": "exact", + "line": 53 + }, + { + "owner": "FINAL-PUBLIC-TRUTH", + "branch": "work/prc-final-public-truth", + "path": "Makefile", + "display": "Makefile", + "kind": "exact", + "line": 53 + }, + { + "owner": "FINAL-PUBLIC-TRUTH", + "branch": "work/prc-final-public-truth", + "path": ".env.example", + "display": ".env.example", + "kind": "exact", + "line": 53 + }, + { + "owner": "FINAL-PUBLIC-TRUTH", + "branch": "work/prc-final-public-truth", + "path": "docs/DEPLOYMENT.md", + "display": "docs/DEPLOYMENT.md", + "kind": "exact", + "line": 53 + }, + { + "owner": "FINAL-PUBLIC-TRUTH", + "branch": "work/prc-final-public-truth", + "path": "docs/MIGRATION.md", + "display": "docs/MIGRATION.md", + "kind": "exact", + "line": 53 + }, + { + "owner": "FINAL-PUBLIC-TRUTH", + "branch": "work/prc-final-public-truth", + "path": "docs/PRODUCTION-TESTING-PLAYBOOK.md", + "display": "docs/PRODUCTION-TESTING-PLAYBOOK.md", + "kind": "exact", + "line": 53 + }, + { + "owner": "FINAL-PUBLIC-TRUTH", + "branch": "work/prc-final-public-truth", + "path": "docs/operating-engram.md", + "display": "docs/operating-engram.md", + "kind": "exact", + "line": 53 + }, + { + "owner": "FINAL-PUBLIC-TRUTH", + "branch": "work/prc-final-public-truth", + "path": "docs/arch/CONFIGURATION.md", + "display": "docs/arch/CONFIGURATION.md", + "kind": "exact", + "line": 53 + }, + { + "owner": "FINAL-PUBLIC-TRUTH", + "branch": "work/prc-final-public-truth", + "path": "docs/arch/QUICKSTART.md", + "display": "docs/arch/QUICKSTART.md", + "kind": "exact", + "line": 53 + }, + { + "owner": "FINAL-PUBLIC-TRUTH", + "branch": "work/prc-final-public-truth", + "path": "docs/public/engram.jpg", + "display": "docs/public/engram.jpg", + "kind": "exact", + "line": 53 + }, + { + "owner": "FINAL-PUBLIC-TRUTH", + "branch": "work/prc-final-public-truth", + "path": "plugin/engram/commands/setup.md", + "display": "plugin/engram/commands/setup.md", + "kind": "exact", + "line": 53 + }, + { + "owner": "FINAL-PUBLIC-TRUTH", + "branch": "work/prc-final-public-truth", + "path": "plugin/engram/commands/doctor.md", + "display": "plugin/engram/commands/doctor.md", + "kind": "exact", + "line": 53 + }, + { + "owner": "LAUNCHER-FIRST-RUN", + "branch": "work/prc-launcher-first-run", + "path": "cmd/engram/main.go", + "display": "cmd/engram/main.go", + "kind": "exact", + "line": 54 + }, + { + "owner": "LAUNCHER-FIRST-RUN", + "branch": "work/prc-launcher-first-run", + "path": "cmd/engram/main_test.go", + "display": "cmd/engram/main_test.go", + "kind": "exact", + "line": 54 + }, + { + "owner": "LAUNCHER-FIRST-RUN", + "branch": "work/prc-launcher-first-run", + "path": "cmd/engram/wiring.go", + "display": "cmd/engram/wiring.go", + "kind": "exact", + "line": 54 + }, + { + "owner": "LAUNCHER-FIRST-RUN", + "branch": "work/prc-launcher-first-run", + "path": "cmd/engram/exec_windows.go", + "display": "cmd/engram/exec_windows.go", + "kind": "exact", + "line": 54 + }, + { + "owner": "LAUNCHER-FIRST-RUN", + "branch": "work/prc-launcher-first-run", + "path": "cmd/engram/exec_unix.go", + "display": "cmd/engram/exec_unix.go", + "kind": "exact", + "line": 54 + }, + { + "owner": "LAUNCHER-FIRST-RUN", + "branch": "work/prc-launcher-first-run", + "path": "plugin/engram/.engram-project", + "display": "plugin/engram/.engram-project", + "kind": "exact", + "line": 54 + }, + { + "owner": "LAUNCHER-FIRST-RUN", + "branch": "work/prc-launcher-first-run", + "path": "plugin/engram/scripts/run-engram.js", + "display": "plugin/engram/scripts/run-engram.js", + "kind": "exact", + "line": 54 + }, + { + "owner": "LAUNCHER-FIRST-RUN", + "branch": "work/prc-launcher-first-run", + "path": "plugin/engram/scripts/run-engram.test.js", + "display": "plugin/engram/scripts/run-engram.test.js", + "kind": "exact", + "line": 54 + }, + { + "owner": "LAUNCHER-FIRST-RUN", + "branch": "work/prc-launcher-first-run", + "path": "plugin/engram/scripts/ensure-binary.js", + "display": "plugin/engram/scripts/ensure-binary.js", + "kind": "exact", + "line": 54 + }, + { + "owner": "LAUNCHER-FIRST-RUN", + "branch": "work/prc-launcher-first-run", + "path": "plugin/engram/scripts/ensure-binary.test.js", + "display": "plugin/engram/scripts/ensure-binary.test.js", + "kind": "exact", + "line": 54 + }, + { + "owner": "OC-INTEGRATION", + "branch": "work/prc-operator-console-integration", + "path": "apps/operator-console", + "display": "apps/operator-console/**", + "kind": "prefix", + "line": 55 + }, + { + "owner": "S4B-CONTRACT", + "branch": "work/prc-s4b-contract", + "path": ".agent/specs/engram-v7-directives-surfacing", + "display": ".agent/specs/engram-v7-directives-surfacing/**", + "kind": "prefix", + "line": 56 + }, + { + "owner": "V7-S4B-BACKEND", + "branch": "work/prc-v7-s4b-backend", + "path": "internal/cognitive/s4bsurfacing", + "display": "internal/cognitive/s4bsurfacing/**", + "kind": "prefix", + "line": 57 + }, + { + "owner": "V7-CORE-CALLPATH", + "branch": "work/prc-v7-core-callpath", + "path": "internal/cognitive/core/event_bus.go", + "display": "internal/cognitive/core/event_bus.go", + "kind": "exact", + "line": 58 + }, + { + "owner": "V7-CORE-CALLPATH", + "branch": "work/prc-v7-core-callpath", + "path": "internal/cognitive/core/event_bus_test.go", + "display": "internal/cognitive/core/event_bus_test.go", + "kind": "exact", + "line": 58 + }, + { + "owner": "V7-CORE-CALLPATH", + "branch": "work/prc-v7-core-callpath", + "path": "internal/cognitive/core/hint_queue.go", + "display": "internal/cognitive/core/hint_queue.go", + "kind": "exact", + "line": 58 + }, + { + "owner": "V7-CORE-CALLPATH", + "branch": "work/prc-v7-core-callpath", + "path": "internal/cognitive/core/hint_queue_test.go", + "display": "internal/cognitive/core/hint_queue_test.go", + "kind": "exact", + "line": 58 + }, + { + "owner": "V7-CORE-CALLPATH", + "branch": "work/prc-v7-core-callpath", + "path": "internal/cognitive/s3ambient/queue.go", + "display": "internal/cognitive/s3ambient/queue.go", + "kind": "exact", + "line": 58 + }, + { + "owner": "V7-CORE-CALLPATH", + "branch": "work/prc-v7-core-callpath", + "path": "internal/cognitive/s3ambient/subsystem.go", + "display": "internal/cognitive/s3ambient/subsystem.go", + "kind": "exact", + "line": 58 + }, + { + "owner": "V7-RUNTIME-WIRING", + "branch": "work/prc-v7-runtime-wiring", + "path": "internal/worker/service.go", + "display": "internal/worker/service.go", + "kind": "exact", + "line": 59 + }, + { + "owner": "V7-RUNTIME-WIRING", + "branch": "work/prc-v7-runtime-wiring", + "path": "internal/worker/service_v7_integration_test.go", + "display": "internal/worker/service_v7_integration_test.go", + "kind": "exact", + "line": 59 + }, + { + "owner": "V7-RUNTIME-WIRING", + "branch": "work/prc-v7-runtime-wiring", + "path": "internal/worker/handlers_stats_v7.go", + "display": "internal/worker/handlers_stats_v7.go", + "kind": "exact", + "line": 59 + }, + { + "owner": "V7-RUNTIME-WIRING", + "branch": "work/prc-v7-runtime-wiring", + "path": "internal/worker/handlers_stats_v7_test.go", + "display": "internal/worker/handlers_stats_v7_test.go", + "kind": "exact", + "line": 59 + }, + { + "owner": "V7-TELEMETRY-WIRING", + "branch": "work/prc-v7-telemetry-wiring", + "path": "internal/cognitive/s5/metrics.go", + "display": "internal/cognitive/s5/metrics.go", + "kind": "exact", + "line": 60 + }, + { + "owner": "V7-TELEMETRY-WIRING", + "branch": "work/prc-v7-telemetry-wiring", + "path": "internal/cognitive/s5/provider.go", + "display": "internal/cognitive/s5/provider.go", + "kind": "exact", + "line": 60 + }, + { + "owner": "V7-TELEMETRY-WIRING", + "branch": "work/prc-v7-telemetry-wiring", + "path": "internal/cognitive/s5/provider_test.go", + "display": "internal/cognitive/s5/provider_test.go", + "kind": "exact", + "line": 60 + }, + { + "owner": "V7-TELEMETRY-WIRING", + "branch": "work/prc-v7-telemetry-wiring", + "path": "internal/cognitive/s5/source_adapter.go", + "display": "internal/cognitive/s5/source_adapter.go", + "kind": "exact", + "line": 60 + }, + { + "owner": "V7-TELEMETRY-WIRING", + "branch": "work/prc-v7-telemetry-wiring", + "path": "internal/cognitive/s5/source_adapter_test.go", + "display": "internal/cognitive/s5/source_adapter_test.go", + "kind": "exact", + "line": 60 + }, + { + "owner": "ROADMAP-RECONCILIATION", + "branch": "work/prc-roadmap-reconciliation", + "path": ".agent/specs/roadmap.md", + "display": ".agent/specs/roadmap.md", + "kind": "exact", + "line": 61 + }, + { + "owner": "ROADMAP-RECONCILIATION", + "branch": "work/prc-roadmap-reconciliation", + "path": ".agent/specs/ui-surface-ledger.md", + "display": ".agent/specs/ui-surface-ledger.md", + "kind": "exact", + "line": 61 + }, + { + "owner": "ROADMAP-RECONCILIATION", + "branch": "work/prc-roadmap-reconciliation", + "path": ".agent/specs/operator-console-production-integration", + "display": ".agent/specs/operator-console-production-integration/**", + "kind": "prefix", + "line": 61 + }, + { + "owner": "ROADMAP-RECONCILIATION", + "branch": "work/prc-roadmap-reconciliation", + "path": ".agent/specs/engram-v7-ambient/spec.md", + "display": ".agent/specs/engram-v7-ambient/spec.md", + "kind": "exact", + "line": 61 + }, + { + "owner": "ROADMAP-RECONCILIATION", + "branch": "work/prc-roadmap-reconciliation", + "path": ".agent/specs/engram-v7-ambient/plan.md", + "display": ".agent/specs/engram-v7-ambient/plan.md", + "kind": "exact", + "line": 61 + }, + { + "owner": "ROADMAP-RECONCILIATION", + "branch": "work/prc-roadmap-reconciliation", + "path": ".agent/specs/engram-v7-ambient/checklists/general.md", + "display": ".agent/specs/engram-v7-ambient/checklists/general.md", + "kind": "exact", + "line": 61 + }, + { + "owner": "ROADMAP-RECONCILIATION", + "branch": "work/prc-roadmap-reconciliation", + "path": ".agent/specs/engram-v7-ambient/changes/CR-001-initial-scope/change.md", + "display": ".agent/specs/engram-v7-ambient/changes/CR-001-initial-scope/change.md", + "kind": "exact", + "line": 61 + }, + { + "owner": "ROADMAP-RECONCILIATION", + "branch": "work/prc-roadmap-reconciliation", + "path": ".agent/specs/engram-v7-ambient/changes/CR-001-initial-scope/tasks.md", + "display": ".agent/specs/engram-v7-ambient/changes/CR-001-initial-scope/tasks.md", + "kind": "exact", + "line": 61 + }, + { + "owner": "NORTHSTAR-CI-A-CONTRACTS", + "branch": "work/prc-northstar-ci-a-contracts", + "path": ".agent/specs/engram-absorption/ci-a-dense-vector/spec.md", + "display": ".agent/specs/engram-absorption/ci-a-dense-vector/spec.md", + "kind": "exact", + "line": 62 + }, + { + "owner": "NORTHSTAR-CI-A-CONTRACTS", + "branch": "work/prc-northstar-ci-a-contracts", + "path": ".agent/specs/engram-absorption/ci-a-dense-vector/plan.md", + "display": ".agent/specs/engram-absorption/ci-a-dense-vector/plan.md", + "kind": "exact", + "line": 62 + }, + { + "owner": "NORTHSTAR-CI-A-CONTRACTS", + "branch": "work/prc-northstar-ci-a-contracts", + "path": ".agent/specs/engram-absorption/ci-a-dense-vector/checklists/general.md", + "display": ".agent/specs/engram-absorption/ci-a-dense-vector/checklists/general.md", + "kind": "exact", + "line": 62 + }, + { + "owner": "NORTHSTAR-CI-A-CONTRACTS", + "branch": "work/prc-northstar-ci-a-contracts", + "path": ".agent/specs/engram-absorption/ci-a-dense-vector/changes/CR-001-initial-scope/change.md", + "display": ".agent/specs/engram-absorption/ci-a-dense-vector/changes/CR-001-initial-scope/change.md", + "kind": "exact", + "line": 62 + }, + { + "owner": "NORTHSTAR-CI-A-CONTRACTS", + "branch": "work/prc-northstar-ci-a-contracts", + "path": ".agent/specs/engram-absorption/ci-a-dense-vector/changes/CR-001-initial-scope/tasks.md", + "display": ".agent/specs/engram-absorption/ci-a-dense-vector/changes/CR-001-initial-scope/tasks.md", + "kind": "exact", + "line": 62 + }, + { + "owner": "NORTHSTAR-CI-B-CONTRACTS", + "branch": "work/prc-northstar-ci-b-contracts", + "path": ".agent/specs/engram-absorption/ci-b-graph-watcher-context/spec.md", + "display": ".agent/specs/engram-absorption/ci-b-graph-watcher-context/spec.md", + "kind": "exact", + "line": 63 + }, + { + "owner": "NORTHSTAR-CI-B-CONTRACTS", + "branch": "work/prc-northstar-ci-b-contracts", + "path": ".agent/specs/engram-absorption/ci-b-graph-watcher-context/plan.md", + "display": ".agent/specs/engram-absorption/ci-b-graph-watcher-context/plan.md", + "kind": "exact", + "line": 63 + }, + { + "owner": "NORTHSTAR-CI-B-CONTRACTS", + "branch": "work/prc-northstar-ci-b-contracts", + "path": ".agent/specs/engram-absorption/ci-b-graph-watcher-context/checklists/general.md", + "display": ".agent/specs/engram-absorption/ci-b-graph-watcher-context/checklists/general.md", + "kind": "exact", + "line": 63 + }, + { + "owner": "NORTHSTAR-CI-B-CONTRACTS", + "branch": "work/prc-northstar-ci-b-contracts", + "path": ".agent/specs/engram-absorption/ci-b-graph-watcher-context/changes/CR-001-initial-scope/change.md", + "display": ".agent/specs/engram-absorption/ci-b-graph-watcher-context/changes/CR-001-initial-scope/change.md", + "kind": "exact", + "line": 63 + }, + { + "owner": "NORTHSTAR-CI-B-CONTRACTS", + "branch": "work/prc-northstar-ci-b-contracts", + "path": ".agent/specs/engram-absorption/ci-b-graph-watcher-context/changes/CR-001-initial-scope/tasks.md", + "display": ".agent/specs/engram-absorption/ci-b-graph-watcher-context/changes/CR-001-initial-scope/tasks.md", + "kind": "exact", + "line": 63 + }, + { + "owner": "NORTHSTAR-BOOK-CONTRACTS", + "branch": "work/prc-northstar-book-contracts", + "path": ".agent/specs/engram-absorption/book/prd.md", + "display": ".agent/specs/engram-absorption/book/prd.md", + "kind": "exact", + "line": 64 + }, + { + "owner": "NORTHSTAR-BOOK-CONTRACTS", + "branch": "work/prc-northstar-book-contracts", + "path": ".agent/specs/engram-absorption/book/spec.md", + "display": ".agent/specs/engram-absorption/book/spec.md", + "kind": "exact", + "line": 64 + }, + { + "owner": "NORTHSTAR-BOOK-CONTRACTS", + "branch": "work/prc-northstar-book-contracts", + "path": ".agent/specs/engram-absorption/book/plan.md", + "display": ".agent/specs/engram-absorption/book/plan.md", + "kind": "exact", + "line": 64 + }, + { + "owner": "NORTHSTAR-BOOK-CONTRACTS", + "branch": "work/prc-northstar-book-contracts", + "path": ".agent/specs/engram-absorption/book/checklists/general.md", + "display": ".agent/specs/engram-absorption/book/checklists/general.md", + "kind": "exact", + "line": 64 + }, + { + "owner": "NORTHSTAR-BOOK-CONTRACTS", + "branch": "work/prc-northstar-book-contracts", + "path": ".agent/specs/engram-absorption/book/changes/CR-001-initial-scope/change.md", + "display": ".agent/specs/engram-absorption/book/changes/CR-001-initial-scope/change.md", + "kind": "exact", + "line": 64 + }, + { + "owner": "NORTHSTAR-BOOK-CONTRACTS", + "branch": "work/prc-northstar-book-contracts", + "path": ".agent/specs/engram-absorption/book/changes/CR-001-initial-scope/tasks.md", + "display": ".agent/specs/engram-absorption/book/changes/CR-001-initial-scope/tasks.md", + "kind": "exact", + "line": 64 + }, + { + "owner": "NORTHSTAR-MEM-CONTRACTS", + "branch": "work/prc-northstar-mem-contracts", + "path": ".agent/specs/engram-absorption/mem-residual/spec.md", + "display": ".agent/specs/engram-absorption/mem-residual/spec.md", + "kind": "exact", + "line": 65 + }, + { + "owner": "NORTHSTAR-MEM-CONTRACTS", + "branch": "work/prc-northstar-mem-contracts", + "path": ".agent/specs/engram-absorption/mem-residual/plan.md", + "display": ".agent/specs/engram-absorption/mem-residual/plan.md", + "kind": "exact", + "line": 65 + }, + { + "owner": "NORTHSTAR-MEM-CONTRACTS", + "branch": "work/prc-northstar-mem-contracts", + "path": ".agent/specs/engram-absorption/mem-residual/checklists/general.md", + "display": ".agent/specs/engram-absorption/mem-residual/checklists/general.md", + "kind": "exact", + "line": 65 + }, + { + "owner": "NORTHSTAR-MEM-CONTRACTS", + "branch": "work/prc-northstar-mem-contracts", + "path": ".agent/specs/engram-absorption/mem-residual/changes/CR-001-initial-scope/change.md", + "display": ".agent/specs/engram-absorption/mem-residual/changes/CR-001-initial-scope/change.md", + "kind": "exact", + "line": 65 + }, + { + "owner": "NORTHSTAR-MEM-CONTRACTS", + "branch": "work/prc-northstar-mem-contracts", + "path": ".agent/specs/engram-absorption/mem-residual/changes/CR-001-initial-scope/tasks.md", + "display": ".agent/specs/engram-absorption/mem-residual/changes/CR-001-initial-scope/tasks.md", + "kind": "exact", + "line": 65 + }, + { + "owner": "NORTHSTAR-EFFECTIVENESS-CONTRACTS", + "branch": "work/prc-northstar-effectiveness-contracts", + "path": ".agent/specs/engram-effectiveness/production-ready-residual/spec.md", + "display": ".agent/specs/engram-effectiveness/production-ready-residual/spec.md", + "kind": "exact", + "line": 66 + }, + { + "owner": "NORTHSTAR-EFFECTIVENESS-CONTRACTS", + "branch": "work/prc-northstar-effectiveness-contracts", + "path": ".agent/specs/engram-effectiveness/production-ready-residual/plan.md", + "display": ".agent/specs/engram-effectiveness/production-ready-residual/plan.md", + "kind": "exact", + "line": 66 + }, + { + "owner": "NORTHSTAR-EFFECTIVENESS-CONTRACTS", + "branch": "work/prc-northstar-effectiveness-contracts", + "path": ".agent/specs/engram-effectiveness/production-ready-residual/checklists/general.md", + "display": ".agent/specs/engram-effectiveness/production-ready-residual/checklists/general.md", + "kind": "exact", + "line": 66 + }, + { + "owner": "NORTHSTAR-EFFECTIVENESS-CONTRACTS", + "branch": "work/prc-northstar-effectiveness-contracts", + "path": ".agent/specs/engram-effectiveness/production-ready-residual/changes/CR-001-initial-scope/change.md", + "display": ".agent/specs/engram-effectiveness/production-ready-residual/changes/CR-001-initial-scope/change.md", + "kind": "exact", + "line": 66 + }, + { + "owner": "NORTHSTAR-EFFECTIVENESS-CONTRACTS", + "branch": "work/prc-northstar-effectiveness-contracts", + "path": ".agent/specs/engram-effectiveness/production-ready-residual/changes/CR-001-initial-scope/tasks.md", + "display": ".agent/specs/engram-effectiveness/production-ready-residual/changes/CR-001-initial-scope/tasks.md", + "kind": "exact", + "line": 66 + }, + { + "owner": "NORTHSTAR-SETTINGS-CONTRACTS", + "branch": "work/prc-northstar-settings-contracts", + "path": ".agent/specs/settings-store/production-ready-residual/spec.md", + "display": ".agent/specs/settings-store/production-ready-residual/spec.md", + "kind": "exact", + "line": 67 + }, + { + "owner": "NORTHSTAR-SETTINGS-CONTRACTS", + "branch": "work/prc-northstar-settings-contracts", + "path": ".agent/specs/settings-store/production-ready-residual/plan.md", + "display": ".agent/specs/settings-store/production-ready-residual/plan.md", + "kind": "exact", + "line": 67 + }, + { + "owner": "NORTHSTAR-SETTINGS-CONTRACTS", + "branch": "work/prc-northstar-settings-contracts", + "path": ".agent/specs/settings-store/production-ready-residual/checklists/general.md", + "display": ".agent/specs/settings-store/production-ready-residual/checklists/general.md", + "kind": "exact", + "line": 67 + }, + { + "owner": "NORTHSTAR-SETTINGS-CONTRACTS", + "branch": "work/prc-northstar-settings-contracts", + "path": ".agent/specs/settings-store/production-ready-residual/changes/CR-001-initial-scope/change.md", + "display": ".agent/specs/settings-store/production-ready-residual/changes/CR-001-initial-scope/change.md", + "kind": "exact", + "line": 67 + }, + { + "owner": "NORTHSTAR-SETTINGS-CONTRACTS", + "branch": "work/prc-northstar-settings-contracts", + "path": ".agent/specs/settings-store/production-ready-residual/changes/CR-001-initial-scope/tasks.md", + "display": ".agent/specs/settings-store/production-ready-residual/changes/CR-001-initial-scope/tasks.md", + "kind": "exact", + "line": 67 + } + ], + "repeated_exact_paths": [ + { + "path": ".env.example", + "exact_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "prefix_owners": [], + "effective_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "declared_epoch": true, + "epoch_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ] + }, + { + "path": ".github/workflows/test.yml", + "exact_owners": [ + "RELEASE-GATES", + "IMAGE-REMEDIATION" + ], + "prefix_owners": [], + "effective_owners": [ + "RELEASE-GATES", + "IMAGE-REMEDIATION" + ], + "declared_epoch": true, + "epoch_owners": [ + "RELEASE-GATES", + "IMAGE-REMEDIATION" + ] + }, + { + "path": "apps/operator-console/package-lock.json", + "exact_owners": [ + "IMAGE-REMEDIATION" + ], + "prefix_owners": [ + "OC-INTEGRATION" + ], + "effective_owners": [ + "IMAGE-REMEDIATION", + "OC-INTEGRATION" + ], + "declared_epoch": true, + "epoch_owners": [ + "IMAGE-REMEDIATION", + "OC-INTEGRATION" + ] + }, + { + "path": "apps/operator-console/package.json", + "exact_owners": [ + "IMAGE-REMEDIATION" + ], + "prefix_owners": [ + "OC-INTEGRATION" + ], + "effective_owners": [ + "IMAGE-REMEDIATION", + "OC-INTEGRATION" + ], + "declared_epoch": true, + "epoch_owners": [ + "IMAGE-REMEDIATION", + "OC-INTEGRATION" + ] + }, + { + "path": "CHANGELOG.md", + "exact_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "prefix_owners": [], + "effective_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "declared_epoch": true, + "epoch_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ] + }, + { + "path": "CONTRIBUTING.md", + "exact_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "prefix_owners": [], + "effective_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "declared_epoch": true, + "epoch_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ] + }, + { + "path": "deploy/docker-compose.runtime.yml", + "exact_owners": [ + "IMAGE-REMEDIATION", + "DEPLOYMENT-ROLLBACK" + ], + "prefix_owners": [], + "effective_owners": [ + "IMAGE-REMEDIATION", + "DEPLOYMENT-ROLLBACK" + ], + "declared_epoch": true, + "epoch_owners": [ + "IMAGE-REMEDIATION", + "DEPLOYMENT-ROLLBACK" + ] + }, + { + "path": "docker-compose.yml", + "exact_owners": [ + "IMAGE-REMEDIATION", + "DEPLOYMENT-ROLLBACK" + ], + "prefix_owners": [], + "effective_owners": [ + "IMAGE-REMEDIATION", + "DEPLOYMENT-ROLLBACK" + ], + "declared_epoch": true, + "epoch_owners": [ + "IMAGE-REMEDIATION", + "DEPLOYMENT-ROLLBACK" + ] + }, + { + "path": "Dockerfile", + "exact_owners": [ + "SECURITY-TOOLCHAIN", + "IMAGE-REMEDIATION" + ], + "prefix_owners": [], + "effective_owners": [ + "SECURITY-TOOLCHAIN", + "IMAGE-REMEDIATION" + ], + "declared_epoch": true, + "epoch_owners": [ + "SECURITY-TOOLCHAIN", + "IMAGE-REMEDIATION" + ] + }, + { + "path": "docs/arch/CONFIGURATION.md", + "exact_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "prefix_owners": [], + "effective_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "declared_epoch": true, + "epoch_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ] + }, + { + "path": "docs/arch/QUICKSTART.md", + "exact_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "prefix_owners": [], + "effective_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "declared_epoch": true, + "epoch_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ] + }, + { + "path": "docs/DEPLOYMENT.md", + "exact_owners": [ + "IMAGE-REMEDIATION", + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "prefix_owners": [], + "effective_owners": [ + "IMAGE-REMEDIATION", + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "declared_epoch": true, + "epoch_owners": [ + "IMAGE-REMEDIATION", + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ] + }, + { + "path": "docs/MIGRATION.md", + "exact_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "prefix_owners": [], + "effective_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "declared_epoch": true, + "epoch_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ] + }, + { + "path": "docs/operating-engram.md", + "exact_owners": [ + "REDACTION-LIVE-CONTRACT", + "FINAL-PUBLIC-TRUTH" + ], + "prefix_owners": [], + "effective_owners": [ + "REDACTION-LIVE-CONTRACT", + "FINAL-PUBLIC-TRUTH" + ], + "declared_epoch": true, + "epoch_owners": [ + "REDACTION-LIVE-CONTRACT", + "FINAL-PUBLIC-TRUTH" + ] + }, + { + "path": "docs/PRODUCTION-TESTING-PLAYBOOK.md", + "exact_owners": [ + "IMAGE-REMEDIATION", + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "prefix_owners": [], + "effective_owners": [ + "IMAGE-REMEDIATION", + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "declared_epoch": true, + "epoch_owners": [ + "IMAGE-REMEDIATION", + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ] + }, + { + "path": "docs/public/engram.jpg", + "exact_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "prefix_owners": [], + "effective_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "declared_epoch": true, + "epoch_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ] + }, + { + "path": "internal/bulkops/facade_test.go", + "exact_owners": [ + "DB-BULKOPS", + "INGEST-DOC-SNAPSHOT-DEMOLITION" + ], + "prefix_owners": [], + "effective_owners": [ + "DB-BULKOPS", + "INGEST-DOC-SNAPSHOT-DEMOLITION" + ], + "declared_epoch": true, + "epoch_owners": [ + "DB-BULKOPS", + "INGEST-DOC-SNAPSHOT-DEMOLITION" + ] + }, + { + "path": "internal/bulkops/facade.go", + "exact_owners": [ + "DB-BULKOPS", + "INGEST-DOC-SNAPSHOT-DEMOLITION", + "DURABLE-AUDIT-BOUNDARIES" + ], + "prefix_owners": [], + "effective_owners": [ + "DB-BULKOPS", + "INGEST-DOC-SNAPSHOT-DEMOLITION", + "DURABLE-AUDIT-BOUNDARIES" + ], + "declared_epoch": true, + "epoch_owners": [ + "DB-BULKOPS", + "INGEST-DOC-SNAPSHOT-DEMOLITION", + "DURABLE-AUDIT-BOUNDARIES" + ] + }, + { + "path": "internal/bulkops/rollback_test.go", + "exact_owners": [ + "DB-BULKOPS", + "CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK" + ], + "prefix_owners": [], + "effective_owners": [ + "DB-BULKOPS", + "CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK" + ], + "declared_epoch": true, + "epoch_owners": [ + "DB-BULKOPS", + "CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK" + ] + }, + { + "path": "internal/db/gorm/candidate_store_test.go", + "exact_owners": [ + "DB-BULKOPS", + "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK", + "DB-TEST-POOL-HYGIENE", + "DB-GOVERNANCE", + "CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK" + ], + "prefix_owners": [], + "effective_owners": [ + "DB-BULKOPS", + "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK", + "DB-TEST-POOL-HYGIENE", + "DB-GOVERNANCE", + "CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK" + ], + "declared_epoch": true, + "epoch_owners": [ + "DB-BULKOPS", + "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK", + "DB-TEST-POOL-HYGIENE", + "DB-GOVERNANCE", + "CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK" + ] + }, + { + "path": "internal/db/gorm/candidate_store.go", + "exact_owners": [ + "DB-BULKOPS", + "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK", + "DB-GOVERNANCE", + "CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK" + ], + "prefix_owners": [], + "effective_owners": [ + "DB-BULKOPS", + "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK", + "DB-GOVERNANCE", + "CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK" + ], + "declared_epoch": true, + "epoch_owners": [ + "DB-BULKOPS", + "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK", + "DB-GOVERNANCE", + "CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK" + ] + }, + { + "path": "internal/db/gorm/user_store.go", + "exact_owners": [ + "DB-AUTH", + "AUTH-BOOTSTRAP-SECURITY", + "DURABLE-AUDIT-BOUNDARIES" + ], + "prefix_owners": [], + "effective_owners": [ + "DB-AUTH", + "AUTH-BOOTSTRAP-SECURITY", + "DURABLE-AUDIT-BOUNDARIES" + ], + "declared_epoch": true, + "epoch_owners": [ + "DB-AUTH", + "AUTH-BOOTSTRAP-SECURITY", + "DURABLE-AUDIT-BOUNDARIES" + ] + }, + { + "path": "internal/mcp/tools_bulkops.go", + "exact_owners": [ + "DB-BULKOPS", + "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK" + ], + "prefix_owners": [], + "effective_owners": [ + "DB-BULKOPS", + "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK" + ], + "declared_epoch": true, + "epoch_owners": [ + "DB-BULKOPS", + "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK" + ] + }, + { + "path": "internal/mcp/tools_dryrun_test.go", + "exact_owners": [ + "DB-BULKOPS", + "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK" + ], + "prefix_owners": [], + "effective_owners": [ + "DB-BULKOPS", + "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK" + ], + "declared_epoch": true, + "epoch_owners": [ + "DB-BULKOPS", + "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK" + ] + }, + { + "path": "internal/mcp/tools_memory.go", + "exact_owners": [ + "MCP-STRUCTURED-INPUT-VALIDATION", + "REDACTION-LIVE-CONTRACT" + ], + "prefix_owners": [], + "effective_owners": [ + "MCP-STRUCTURED-INPUT-VALIDATION", + "REDACTION-LIVE-CONTRACT" + ], + "declared_epoch": true, + "epoch_owners": [ + "MCP-STRUCTURED-INPUT-VALIDATION", + "REDACTION-LIVE-CONTRACT" + ] + }, + { + "path": "internal/worker/auth_handlers.go", + "exact_owners": [ + "DB-AUTH", + "AUTH-BOOTSTRAP-SECURITY", + "DURABLE-AUDIT-BOUNDARIES" + ], + "prefix_owners": [], + "effective_owners": [ + "DB-AUTH", + "AUTH-BOOTSTRAP-SECURITY", + "DURABLE-AUDIT-BOUNDARIES" + ], + "declared_epoch": true, + "epoch_owners": [ + "DB-AUTH", + "AUTH-BOOTSTRAP-SECURITY", + "DURABLE-AUDIT-BOUNDARIES" + ] + }, + { + "path": "internal/worker/service.go", + "exact_owners": [ + "AUTH-BOOTSTRAP-SECURITY", + "REDACTION-LIVE-CONTRACT", + "V7-RUNTIME-WIRING" + ], + "prefix_owners": [], + "effective_owners": [ + "AUTH-BOOTSTRAP-SECURITY", + "REDACTION-LIVE-CONTRACT", + "V7-RUNTIME-WIRING" + ], + "declared_epoch": true, + "epoch_owners": [ + "AUTH-BOOTSTRAP-SECURITY", + "REDACTION-LIVE-CONTRACT", + "V7-RUNTIME-WIRING" + ] + }, + { + "path": "Makefile", + "exact_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "prefix_owners": [], + "effective_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "declared_epoch": true, + "epoch_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ] + }, + { + "path": "pkg/models/snapshot.go", + "exact_owners": [ + "DB-BULKOPS", + "INGEST-DOC-SNAPSHOT-DEMOLITION" + ], + "prefix_owners": [], + "effective_owners": [ + "DB-BULKOPS", + "INGEST-DOC-SNAPSHOT-DEMOLITION" + ], + "declared_epoch": true, + "epoch_owners": [ + "DB-BULKOPS", + "INGEST-DOC-SNAPSHOT-DEMOLITION" + ] + }, + { + "path": "plugin/engram/commands/doctor.md", + "exact_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "prefix_owners": [], + "effective_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "declared_epoch": true, + "epoch_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ] + }, + { + "path": "plugin/engram/commands/setup.md", + "exact_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "prefix_owners": [], + "effective_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "declared_epoch": true, + "epoch_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ] + }, + { + "path": "README.md", + "exact_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "prefix_owners": [], + "effective_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "declared_epoch": true, + "epoch_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ] + }, + { + "path": "README.ru.md", + "exact_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "prefix_owners": [], + "effective_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "declared_epoch": true, + "epoch_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ] + }, + { + "path": "README.zh.md", + "exact_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "prefix_owners": [], + "effective_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "declared_epoch": true, + "epoch_owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ] + } + ], + "prefix_intersections": [ + { + "left_owner": "IMAGE-REMEDIATION", + "left": "apps/operator-console/package.json", + "right_owner": "OC-INTEGRATION", + "right": "apps/operator-console/**", + "exact_path": "apps/operator-console/package.json", + "declared_epoch": true + }, + { + "left_owner": "IMAGE-REMEDIATION", + "left": "apps/operator-console/package-lock.json", + "right_owner": "OC-INTEGRATION", + "right": "apps/operator-console/**", + "exact_path": "apps/operator-console/package-lock.json", + "declared_epoch": true + } + ], + "epochs": [ + { + "path": "internal/db/gorm/candidate_store.go", + "owners": [ + "DB-BULKOPS", + "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK", + "DB-GOVERNANCE", + "CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK" + ], + "transfer_gate": "rejected predecessor checker/hash recorded; rework uses exact base `68b2ce5835c7c6efdf1c68da9eedcb8d9c3837ef`; each accepted successor requires checker PASS, post-review PASS, integration SHA, and exact rebase before edit", + "line": 6 + }, + { + "path": "internal/db/gorm/candidate_store_test.go", + "owners": [ + "DB-BULKOPS", + "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK", + "DB-TEST-POOL-HYGIENE", + "DB-GOVERNANCE", + "CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK" + ], + "transfer_gate": "behavioral-edge head `bd68c05baf4b7250096dd84f56bebea2aa555970` remains current authority until pool-hygiene product `276337b3e96aa5af6d2e7dd9a0002ff957e5ffc9` plus evidence `68242c48aaad62ec087166eeb9ea32f14d189450` receive fresh checker and post-review; later successors require exact integration and rebase", + "line": 7 + }, + { + "path": "internal/mcp/tools_bulkops.go", + "owners": [ + "DB-BULKOPS", + "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK" + ], + "transfer_gate": "rejected predecessor checker/hash recorded; rework base is exact rejected head; checker and post-review PASS plus integration SHA close the transfer", + "line": 8 + }, + { + "path": "internal/mcp/tools_dryrun_test.go", + "owners": [ + "DB-BULKOPS", + "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK" + ], + "transfer_gate": "rejected predecessor checker/hash recorded; rework base is exact rejected head; checker and post-review PASS plus integration SHA close the transfer", + "line": 8 + }, + { + "path": "internal/bulkops/facade.go", + "owners": [ + "DB-BULKOPS", + "INGEST-DOC-SNAPSHOT-DEMOLITION", + "DURABLE-AUDIT-BOUNDARIES" + ], + "transfer_gate": "behavioral-edge composite checker and post-review PASS; exact integration SHA recorded; demolition rebased before edit; historical ingest guard green before durable-audit fault work", + "line": 9 + }, + { + "path": "internal/bulkops/facade_test.go", + "owners": [ + "DB-BULKOPS", + "INGEST-DOC-SNAPSHOT-DEMOLITION" + ], + "transfer_gate": "accepted behavioral-edge composite integrated; demolition worktree rebased; focused historical-only regressions PASS before integration", + "line": 10 + }, + { + "path": "internal/bulkops/rollback_test.go", + "owners": [ + "DB-BULKOPS", + "CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK" + ], + "transfer_gate": "accepted behavioral-edge composite and DB-GOVERNANCE integrated; candidate-review successor rebased; combined checker and post-review PASS", + "line": 11 + }, + { + "path": "pkg/models/snapshot.go", + "owners": [ + "DB-BULKOPS", + "INGEST-DOC-SNAPSHOT-DEMOLITION" + ], + "transfer_gate": "accepted behavioral-edge composite integrated; demolition successor rebased; persistence-compatibility and non-executable regressions PASS", + "line": 12 + }, + { + "path": "internal/db/gorm/user_store.go", + "owners": [ + "DB-AUTH", + "AUTH-BOOTSTRAP-SECURITY", + "DURABLE-AUDIT-BOUNDARIES" + ], + "transfer_gate": "each predecessor checker and post-review PASS, integration SHA recorded, successor rebased; no simultaneous writer", + "line": 13 + }, + { + "path": "internal/worker/auth_handlers.go", + "owners": [ + "DB-AUTH", + "AUTH-BOOTSTRAP-SECURITY", + "DURABLE-AUDIT-BOUNDARIES" + ], + "transfer_gate": "each predecessor checker and post-review PASS, integration SHA recorded, successor rebased; no simultaneous writer", + "line": 14 + }, + { + "path": "internal/worker/service.go", + "owners": [ + "AUTH-BOOTSTRAP-SECURITY", + "REDACTION-LIVE-CONTRACT", + "V7-RUNTIME-WIRING" + ], + "transfer_gate": "auth bootstrap checker and post-review PASS, commit integrated, redaction worktree rebased and boot-captured rules proved; V7 later rebases the redaction integration and reruns both auth and redaction route regressions", + "line": 15 + }, + { + "path": "internal/mcp/tools_memory.go", + "owners": [ + "MCP-STRUCTURED-INPUT-VALIDATION", + "REDACTION-LIVE-CONTRACT" + ], + "transfer_gate": "structured-input checker/post-review PASS and exact integration SHA; redaction successor rebased so malformed input remains zero-audit/zero-write before matched-mutation audit enforcement", + "line": 16 + }, + { + "path": "docs/operating-engram.md", + "owners": [ + "REDACTION-LIVE-CONTRACT", + "FINAL-PUBLIC-TRUTH" + ], + "transfer_gate": "redaction live contract checker/post-review PASS and exact integration SHA; FINAL rebased and revalidates the operator claims against final published artifacts", + "line": 17 + }, + { + "path": "Dockerfile", + "owners": [ + "SECURITY-TOOLCHAIN", + "IMAGE-REMEDIATION" + ], + "transfer_gate": "toolchain checker and post-review PASS, commit integrated, image worktree rebased, zero-finding rebuild and scan before successor integration", + "line": 18 + }, + { + "path": ".github/workflows/test.yml", + "owners": [ + "RELEASE-GATES", + "IMAGE-REMEDIATION" + ], + "transfer_gate": "release-gates checker and post-review PASS, commit integrated, image worktree rebased before workflow image-identity changes", + "line": 19 + }, + { + "path": "docker-compose.yml", + "owners": [ + "IMAGE-REMEDIATION", + "DEPLOYMENT-ROLLBACK" + ], + "transfer_gate": "image checker and post-review PASS, `final-image-set.json` recorded, deployment worktree rebased, fresh scan after edits", + "line": 20 + }, + { + "path": "deploy/docker-compose.runtime.yml", + "owners": [ + "IMAGE-REMEDIATION", + "DEPLOYMENT-ROLLBACK" + ], + "transfer_gate": "image checker and post-review PASS, `final-image-set.json` recorded, deployment worktree rebased, fresh scan after edits", + "line": 20 + }, + { + "path": "apps/operator-console/package.json", + "owners": [ + "IMAGE-REMEDIATION", + "OC-INTEGRATION" + ], + "transfer_gate": "image checker and post-review PASS, OC worktree rebased, any later dependency edit reruns audit/build/browser/image scan", + "line": 21 + }, + { + "path": "apps/operator-console/package-lock.json", + "owners": [ + "IMAGE-REMEDIATION", + "OC-INTEGRATION" + ], + "transfer_gate": "image checker and post-review PASS, OC worktree rebased, any later dependency edit reruns audit/build/browser/image scan", + "line": 21 + }, + { + "path": "docs/DEPLOYMENT.md", + "owners": [ + "IMAGE-REMEDIATION", + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "transfer_gate": "image proof integrated; CORE rebased for M5; FINAL rebased to exact M6 integration and final-version artifact before edit", + "line": 22 + }, + { + "path": "docs/PRODUCTION-TESTING-PLAYBOOK.md", + "owners": [ + "IMAGE-REMEDIATION", + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "transfer_gate": "image proof integrated; CORE rebased for M5; FINAL rebased to exact M6 integration and final-version artifact before edit", + "line": 22 + }, + { + "path": "README.md", + "owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "transfer_gate": "M5 release published and proved; FINAL worktree rebased to exact M6 integration; final version artifact and exact release-note path recorded before edit", + "line": 23 + }, + { + "path": "README.ru.md", + "owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "transfer_gate": "M5 release published and proved; FINAL worktree rebased to exact M6 integration; final version artifact and exact release-note path recorded before edit", + "line": 23 + }, + { + "path": "README.zh.md", + "owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "transfer_gate": "M5 release published and proved; FINAL worktree rebased to exact M6 integration; final version artifact and exact release-note path recorded before edit", + "line": 23 + }, + { + "path": "CONTRIBUTING.md", + "owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "transfer_gate": "M5 release published and proved; FINAL worktree rebased to exact M6 integration; final version artifact and exact release-note path recorded before edit", + "line": 23 + }, + { + "path": "CHANGELOG.md", + "owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "transfer_gate": "M5 release published and proved; FINAL worktree rebased to exact M6 integration; final version artifact and exact release-note path recorded before edit", + "line": 23 + }, + { + "path": "Makefile", + "owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "transfer_gate": "M5 release published and proved; FINAL worktree rebased to exact M6 integration; final version artifact and exact release-note path recorded before edit", + "line": 23 + }, + { + "path": ".env.example", + "owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "transfer_gate": "M5 release published and proved; FINAL worktree rebased to exact M6 integration; final version artifact and exact release-note path recorded before edit", + "line": 23 + }, + { + "path": "docs/MIGRATION.md", + "owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "transfer_gate": "M5 release published and proved; FINAL worktree rebased to exact M6 integration; final version artifact and exact release-note path recorded before edit", + "line": 23 + }, + { + "path": "docs/arch/CONFIGURATION.md", + "owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "transfer_gate": "M5 release published and proved; FINAL worktree rebased to exact M6 integration; final version artifact and exact release-note path recorded before edit", + "line": 23 + }, + { + "path": "docs/arch/QUICKSTART.md", + "owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "transfer_gate": "M5 release published and proved; FINAL worktree rebased to exact M6 integration; final version artifact and exact release-note path recorded before edit", + "line": 23 + }, + { + "path": "docs/public/engram.jpg", + "owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "transfer_gate": "M5 release published and proved; FINAL worktree rebased to exact M6 integration; final version artifact and exact release-note path recorded before edit", + "line": 23 + }, + { + "path": "plugin/engram/commands/setup.md", + "owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "transfer_gate": "M5 release published and proved; FINAL worktree rebased to exact M6 integration; final version artifact and exact release-note path recorded before edit", + "line": 23 + }, + { + "path": "plugin/engram/commands/doctor.md", + "owners": [ + "CORE-PUBLIC-TRUTH", + "FINAL-PUBLIC-TRUTH" + ], + "transfer_gate": "M5 release published and proved; FINAL worktree rebased to exact M6 integration; final version artifact and exact release-note path recorded before edit", + "line": 23 + }, + { + "path": "internal/worker/dream_cycle.go", + "owners": [ + "CRYSTALLIZATION-DREAM-CYCLE-CORRECTNESS" + ], + "transfer_gate": "single-owner tracked epoch with no predecessor; the maker starts only after the named dependencies, then requires checker PASS, post-review PASS, integration SHA, and a root plan/state amendment before any later writer", + "line": 24 + }, + { + "path": "internal/worker/dream_cycle_test.go", + "owners": [ + "CRYSTALLIZATION-DREAM-CYCLE-CORRECTNESS" + ], + "transfer_gate": "single-owner tracked epoch with no predecessor; the maker starts only after the named dependencies, then requires checker PASS, post-review PASS, integration SHA, and a root plan/state amendment before any later writer", + "line": 24 + } + ], + "errors": [] +} diff --git a/.agent/specs/release-gates-r9/evidence/release-gates/security-r4-ffd-pending-probe.json b/.agent/specs/release-gates-r9/evidence/release-gates/security-r4-ffd-pending-probe.json new file mode 100644 index 00000000..7352baa5 --- /dev/null +++ b/.agent/specs/release-gates-r9/evidence/release-gates/security-r4-ffd-pending-probe.json @@ -0,0 +1,198 @@ +{ + "schema_version": 1, + "gate": "active-candidate-path-authority", + "verdict": "FAIL", + "started_at": "2026-07-10T22:28:02.7681104+00:00", + "finished_at": "2026-07-10T22:28:03.5380231+00:00", + "duration_seconds": 0.77, + "contract": { + "path": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates-r9-maker\\.agent\\plans\\2026-07-10-engram-production-ready-active-diff-contracts.json", + "expected_sha256": "d8e7818d84831f047d30a8493f9c7d2a8cea288d5c381735960d11dd02988ae5", + "observed_sha256": "d8e7818d84831f047d30a8493f9c7d2a8cea288d5c381735960d11dd02988ae5", + "hash_match": true + }, + "plan": { + "path": "D:\\Dev\\engram\\.agent\\worktrees\\prc-release-gates-r9-maker\\.agent\\plans\\2026-07-10-engram-production-ready-master-plan.md", + "expected_sha256": "4388337722e57b48e93515008e4220d6cd2c83de695c4c449387f071c59fb96f", + "observed_sha256": "4388337722e57b48e93515008e4220d6cd2c83de695c4c449387f071c59fb96f", + "hash_match": true + }, + "source_snapshot": { + "freshness": "HISTORICAL_DISCOVERY_ONLY", + "used_for_acceptance": false, + "mutable_register_read": false, + "observed_sha256": "29865adc048cb3f64ec7d133b3bd901c95115e4ae5b95c98927607de889f77d4" + }, + "counts": { + "candidates": 9, + "paths": 123.0, + "pending_contracts": 2, + "current_candidates": 6, + "rejected_candidates": 3, + "git_verified": 0, + "errors": 1 + }, + "candidates": [ + { + "slice": "DB-AUTH", + "status_class": "current-ready", + "branch": "work/prc-db-auth", + "base": "b0c4ab4c07a4c6f512728da52b2e132bacd0289c", + "head": "da97c88be6753703bac112be8431dc373e4d9dda", + "path_count": 5, + "paths_sha256": "7a678254366c2bdcf5feba8e25ce1151a69ae0a0240d68e3af3cd15ffa1b9d9e" + }, + { + "slice": "DB-EMBEDDING-STATS", + "status_class": "current-checker-active", + "branch": "work/prc-db-embedding-stats", + "base": "dc891b2d72b1fd63b83e4a630a249241fc389151", + "head": "38d6a4fb7ff5f5ae3b6c0066c0a1b806421137df", + "path_count": 8, + "paths_sha256": "b4d1c8176810630268759cedc909cd1042b063b81a14a01175b1a36f174d5c0f" + }, + { + "slice": "DB-EMBEDDING-EVIDENCE-TRANSPORT", + "status_class": "rejected-evidence-revision", + "branch": "work/prc-db-embedding-evidence-transport-r5", + "base": "369951b61ee07cb0c405558e0f677cd1c9e90362", + "head": "a538f6224ef31f612152470a4ecd45e78ff9d0f2", + "path_count": 28, + "paths_sha256": "a9e3eb9762bc3d597ac277c653ad30d10149cb10443fb0b0fc3edd21093c8217" + }, + { + "slice": "DB-BULKOPS", + "status_class": "rejected-historical", + "branch": "work/prc-db-bulkops", + "base": "6ea10496aa127fba7fdb194875044e770d0a1d8c", + "head": "68b2ce5835c7c6efdf1c68da9eedcb8d9c3837ef", + "path_count": 13, + "paths_sha256": "1c53f8aed2d97d91f9103a21d214856c5bb0f59dce6dcc0264e1ce04693c869a" + }, + { + "slice": "DB-BULKOPS-BEHAVIORAL-EDGE-REWORK", + "status_class": "current-ready-with-concerns", + "branch": "work/prc-db-bulkops", + "base": "68b2ce5835c7c6efdf1c68da9eedcb8d9c3837ef", + "head": "bd68c05baf4b7250096dd84f56bebea2aa555970", + "path_count": 38, + "paths_sha256": "39a32b36dfac7f1148649ca092abc23320fda34e2535a828778e228aa8c0230d" + }, + { + "slice": "DB-CRYSTALLIZATION", + "status_class": "current-ready-with-concerns", + "branch": "work/prc-db-crystallization", + "base": "dc891b2d72b1fd63b83e4a630a249241fc389151", + "head": "2ab6211494e51aeb7b787a99e78cff8bf2d5694a", + "path_count": 1, + "paths_sha256": "8428c4f86e06bdab5367fd6678decdb49b8aa23a41f593b246b7e541ec84ab23" + }, + { + "slice": "SECURITY-TOOLCHAIN", + "status_class": "current-ready", + "branch": "work/prc-security-toolchain", + "base": "dc891b2d72b1fd63b83e4a630a249241fc389151", + "head": "b0955dfd61b4ea7364f6d400579247b475a1a680", + "path_count": 3, + "paths_sha256": "5e49ddf6f66cc54d25f31cecd2fae96554d760f8c722f1c113a9d8e695468143" + }, + { + "slice": "SECURITY-PROJECT-IDENTITY", + "status_class": "rejected-security-r3", + "branch": "work/prc-security-project-identity-r3", + "base": "9e2ce4e58a5cded69660ca9ac532d2167f315bb2", + "head": "38344455754fe503acbd79d2134141f996adff7f", + "path_count": 14, + "paths_sha256": "046360929bec61f3cbda420754aaab7056badf467d5e5c2c2e2fce68e2f5e21f" + }, + { + "slice": "DB-TEST-POOL-HYGIENE", + "status_class": "current-ready-for-check", + "branch": "work/prc-db-test-pool-hygiene-evidence-r2", + "base": "276337b3e96aa5af6d2e7dd9a0002ff957e5ffc9", + "head": "68242c48aaad62ec087166eeb9ea32f14d189450", + "path_count": 13, + "paths_sha256": "5b30cedca485ce89ce38bdb665413be59a3e2639e01e04c600172e68e503f3a0" + } + ], + "pending_contracts": [ + { + "slice": "DB-EMBEDDING-EVIDENCE-TRANSPORT", + "branch": "work/prc-db-embedding-evidence-transport-r6", + "base_anchor": "a538f6224ef31f612152470a4ecd45e78ff9d0f2", + "allowed_exact_paths": [], + "effective_agent_declarations": [ + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/**", + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/**", + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4/**", + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/**", + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/**", + ".agent/specs/db-embedding-stats-evidence-transport/evidence/**" + ], + "requires_final_exact_diff_contract": true + }, + { + "slice": "SECURITY-PROJECT-IDENTITY", + "branch": "work/prc-security-project-identity-r4", + "base_anchor": "38344455754fe503acbd79d2134141f996adff7f", + "allowed_exact_paths": [ + "internal/proxy/identity_process_test.go", + "internal/proxy/identity_test.go" + ], + "effective_agent_declarations": [ + ".agent/specs/security-project-identity/evidence/**", + ".agent/reports/evidence/production-ready/security-project-identity/**" + ], + "requires_final_exact_diff_contract": true + } + ], + "git_verification": [], + "pending_probe": { + "verdict": "FAIL", + "allowed_declarations": [ + { + "path": "internal/proxy/identity_process_test.go", + "display": "internal/proxy/identity_process_test.go", + "kind": "exact" + }, + { + "path": "internal/proxy/identity_test.go", + "display": "internal/proxy/identity_test.go", + "kind": "exact" + }, + { + "owner": "SECURITY-PROJECT-IDENTITY", + "branch": "work/prc-security-project-identity-r4", + "path": ".agent/specs/security-project-identity/evidence", + "display": ".agent/specs/security-project-identity/evidence/**", + "kind": "prefix", + "line": 25 + }, + { + "owner": "SECURITY-PROJECT-IDENTITY", + "branch": "work/prc-security-project-identity-r4", + "path": ".agent/reports/evidence/production-ready/security-project-identity", + "display": ".agent/reports/evidence/production-ready/security-project-identity/**", + "kind": "prefix", + "line": 25 + } + ], + "violations": [ + { + "path": ".agent/testing/SECURITY-PROJECT-IDENTITY-R4/behavior-signal.md", + "git_status": "A", + "reason": "path is outside pending exact product/test paths and bounded plan-owned .agent evidence/report declarations" + } + ], + "errors": [ + "pending path violation '.agent/testing/SECURITY-PROJECT-IDENTITY-R4/behavior-signal.md': path is outside pending exact product/test paths and bounded plan-owned .agent evidence/report declarations" + ], + "requested_base": "38344455754fe503acbd79d2134141f996adff7f", + "expected_base": "38344455754fe503acbd79d2134141f996adff7f", + "head": "ffdbaefb5fb9685899663a40c6b6fef4a08448ba", + "base_is_ancestor": true + }, + "errors": [ + "pending probe: pending path violation '.agent/testing/SECURITY-PROJECT-IDENTITY-R4/behavior-signal.md': path is outside pending exact product/test paths and bounded plan-owned .agent evidence/report declarations" + ] +} diff --git a/.agent/specs/release-gates-r9/evidence/release-gates/test-r9-active-candidate-path-authority.ps1 b/.agent/specs/release-gates-r9/evidence/release-gates/test-r9-active-candidate-path-authority.ps1 new file mode 100644 index 00000000..29442b98 --- /dev/null +++ b/.agent/specs/release-gates-r9/evidence/release-gates/test-r9-active-candidate-path-authority.ps1 @@ -0,0 +1,32 @@ +[CmdletBinding()] +param( + [string]$Repository = (Get-Location).Path, + [string]$Artifact = '.agent/specs/release-gates-r9/evidence/release-gates/active-candidate-authority-harness.json' +) + +Set-StrictMode -Version Latest +$ErrorActionPreference = 'Stop' + +$gate = Join-Path $Repository 'scripts/production-gates/assert-active-candidate-path-authority.ps1' +if (-not (Test-Path -LiteralPath $gate -PathType Leaf)) { + throw "R9 active-candidate authority gate is missing: $gate" +} + +& pwsh -NoProfile -File $gate -SelfTest +if ($LASTEXITCODE -ne 0) { throw "R9 active-candidate authority self-test failed with exit $LASTEXITCODE" } + +& pwsh -NoProfile -File $gate ` + -Contract (Join-Path $Repository '.agent/plans/2026-07-10-engram-production-ready-active-diff-contracts.json') ` + -ExpectedContractSha256 'd8e7818d84831f047d30a8493f9c7d2a8cea288d5c381735960d11dd02988ae5' ` + -Plan (Join-Path $Repository '.agent/plans/2026-07-10-engram-production-ready-master-plan.md') ` + -ExpectedPlanSha256 '4388337722e57b48e93515008e4220d6cd2c83de695c4c449387f071c59fb96f' ` + -Artifact (Join-Path $Repository $Artifact) +if ($LASTEXITCODE -ne 0) { throw "R9 active-candidate authority audit failed with exit $LASTEXITCODE" } + +$result = Get-Content -LiteralPath (Join-Path $Repository $Artifact) -Raw | ConvertFrom-Json -Depth 100 +if ($result.verdict -cne 'PASS') { throw "R9 active-candidate authority artifact verdict is '$($result.verdict)'" } +if ([int]$result.counts.candidates -ne 9) { throw "R9 candidate count is '$($result.counts.candidates)', expected 9" } +if ([int]$result.counts.paths -ne 123) { throw "R9 frozen path count is '$($result.counts.paths)', expected 123" } +if ([int]$result.counts.pending_contracts -ne 2) { throw "R9 pending contract count is '$($result.counts.pending_contracts)', expected 2" } + +Write-Output 'R9 ACTIVE-CANDIDATE AUTHORITY HARNESS PASS' diff --git a/.agent/specs/release-gates-r9/evidence/release-gates/verification-summary.json b/.agent/specs/release-gates-r9/evidence/release-gates/verification-summary.json new file mode 100644 index 00000000..79ff30a2 --- /dev/null +++ b/.agent/specs/release-gates-r9/evidence/release-gates/verification-summary.json @@ -0,0 +1,56 @@ +{ + "schema_version": 1, + "slice": "RELEASE-GATES-R9", + "lineage": { + "rejected_r8_head": "406fe952c143eb8aaf5895427c568a41d4cec225", + "commit_a": "8cb810095b2bea77ab9812832d9ab8a99c928d18", + "commit_a_parent": "406fe952c143eb8aaf5895427c568a41d4cec225" + }, + "authority": { + "plan_sha256": "4388337722e57b48e93515008e4220d6cd2c83de695c4c449387f071c59fb96f", + "scope_map_sha256": "fb170d59f3072117489402fd347cd1432c40adbc842811f92227498bcbc92693", + "active_diff_contract_sha256": "d8e7818d84831f047d30a8493f9c7d2a8cea288d5c381735960d11dd02988ae5", + "r8_scope_provenance_sha256": "ab5f882fa110ca823a317061ecbca0c62516702735325893a56206f9e7a29415", + "mutable_register_read": false, + "source_snapshot_use": "HISTORICAL_DISCOVERY_ONLY" + }, + "checks": [ + {"name":"active authority self-test","exit_code":0,"verdict":"PASS"}, + {"name":"active authority frozen audit","exit_code":0,"verdict":"PASS","candidates":9,"paths":123,"pending_contracts":2,"errors":0}, + {"name":"active authority full Git replay","exit_code":0,"verdict":"PASS","git_verified":9}, + {"name":"R4 ffd pending probe","exit_code":1,"verdict":"EXPECTED_FAIL","violations":1,"only_violation":".agent/testing/SECURITY-PROJECT-IDENTITY-R4/behavior-signal.md"}, + {"name":"DEMOLITION zero-row diff","exit_code":1,"verdict":"EXPECTED_FAIL","diff_entries":7,"maker_rows":0,"internal_count_error":false}, + {"name":"plan ownership self-test","exit_code":0,"verdict":"PASS"}, + {"name":"plan ownership static Ledger","exit_code":0,"verdict":"PASS","maker_rows":57,"declarations":351,"repeated_exact_paths":34,"epochs":36}, + {"name":"SECURITY-PROJECT-IDENTITY R3 replay","exit_code":0,"verdict":"PASS","paths":14,"violations":0}, + {"name":"DB embedding R5 path replay","exit_code":0,"verdict":"PASS_PATH_AUTHORITY_ONLY_REMAINS_REJECTED","paths":28,"violations":0}, + {"name":"actionlint","exit_code":0,"verdict":"PASS"}, + {"name":"workflow conformance","exit_code":0,"verdict":"PASS","mutations_rejected":70}, + {"name":"synthesized staged-tree RELEASE-GATES exact Diff","exit_code":0,"verdict":"PASS","paths":24,"violations":0}, + {"name":"run-db-suite self-test","exit_code":0,"verdict":"PASS"}, + {"name":"critical suite","exit_code":0,"verdict":"PASS","passed":7,"failed":0,"skipped":0}, + {"name":"go test ./...","exit_code":0,"verdict":"PASS"}, + {"name":"go vet ./...","exit_code":0,"verdict":"PASS"}, + {"name":"go build ./...","exit_code":0,"verdict":"PASS"}, + {"name":"exact staged diff gitleaks","exit_code":0,"verdict":"PASS","findings":0}, + {"name":"native BOM scan over exact staged paths","exit_code":0,"verdict":"PASS","paths":24,"findings":0}, + {"name":"git diff --cached --check","exit_code":0,"verdict":"PASS"} + ], + "discrepancies": [ + { + "name": "repository BOM helper absent", + "command": "node tools/check-bom.cjs", + "exit_code": 1, + "observed": "MODULE_NOT_FOUND", + "resolution": "use an exact commit-B native byte-prefix scan; do not claim the missing helper as proof" + }, + { + "name": "whole-directory gitleaks baseline", + "findings": 14, + "files": ["docs/DEPLOYMENT.md","internal/grpcserver/credential_migration_test.go","internal/mcp/server_test.go","internal/privacy/secrets_test.go","scripts/production-gates/run-db-suite.ps1"], + "scope_relation": "all findings are pre-existing and outside commit-B changed paths", + "resolution": "require a clean exact staged/committed commit-B scan" + } + ], + "verdict": "PASS_WITH_EXPLICIT_BASELINE_DISCREPANCIES" +} diff --git a/.agent/specs/release-gates-r9/evidence/release-gates/workflow-conformance.json b/.agent/specs/release-gates-r9/evidence/release-gates/workflow-conformance.json new file mode 100644 index 00000000..caa5deb1 --- /dev/null +++ b/.agent/specs/release-gates-r9/evidence/release-gates/workflow-conformance.json @@ -0,0 +1,19 @@ +{ + "schema_version": 1, + "slice": "RELEASE-GATES-R9", + "checks": [ + { + "command": "actionlint .github/workflows/test.yml", + "exit_code": 0, + "verdict": "PASS" + }, + { + "command": "execute the Assert tracked gate / CI conformance PowerShell block with RUNNER_TEMP set", + "exit_code": 0, + "mutations_rejected": 70, + "verdict": "PASS" + } + ], + "preserved_contract": "all predecessor R8 workflow predicates plus R9 plan/scope/active-candidate authority, pending-surface, exact-base, metadata, and digest rails", + "verdict": "PASS" +} diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 79470563..686b6e03 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -68,6 +68,10 @@ jobs: shell: pwsh run: ./scripts/production-gates/assert-plan-path-ownership.ps1 -SelfTest + - name: Self-test active candidate path authority gate + shell: pwsh + run: ./scripts/production-gates/assert-active-candidate-path-authority.ps1 -SelfTest + - name: Self-test Windows tracked path budget shell: pwsh run: ./scripts/production-gates/assert-windows-path-budget.ps1 -SelfTest @@ -82,12 +86,22 @@ jobs: ./scripts/production-gates/assert-plan-path-ownership.ps1 -Mode Ledger -Plan .agent/plans/2026-07-10-engram-production-ready-master-plan.md - -ExpectedPlanSha256 fd2b223a9a62848efc39e1c33bf739bada191508bccb7ba9a73140185638e43d + -ExpectedPlanSha256 4388337722e57b48e93515008e4220d6cd2c83de695c4c449387f071c59fb96f -State .agent/plans/2026-07-10-engram-production-ready-ownership-state.json -ScopeMap .agent/plans/2026-07-10-engram-production-ready-scope-map.json - -ExpectedScopeMapSha256 81093184036672008d6b85dfa88a431998ef70b587ab11475aa2b315f03ddf79 + -ExpectedScopeMapSha256 fb170d59f3072117489402fd347cd1432c40adbc842811f92227498bcbc92693 -Artifact .agent/e/rg4/ci-ledger.json + - name: Assert frozen active candidate path authority + shell: pwsh + run: >- + ./scripts/production-gates/assert-active-candidate-path-authority.ps1 + -Contract .agent/plans/2026-07-10-engram-production-ready-active-diff-contracts.json + -ExpectedContractSha256 d8e7818d84831f047d30a8493f9c7d2a8cea288d5c381735960d11dd02988ae5 + -Plan .agent/plans/2026-07-10-engram-production-ready-master-plan.md + -ExpectedPlanSha256 4388337722e57b48e93515008e4220d6cd2c83de695c4c449387f071c59fb96f + -Artifact .agent/e/rg9/ci-active-candidate-authority.json + - name: Assert Windows tracked path budget shell: pwsh run: pwsh -NoProfile -File scripts/production-gates/assert-windows-path-budget.ps1 -Repository . -Ref HEAD -CheckoutPrefixLength 66 -MaximumCombinedPathLength 240 -Artifact .agent/e/rg4/ci-path-budget.json @@ -108,13 +122,16 @@ jobs: $criticalRunner = Get-Content -Raw 'scripts/production-gates/run-critical-suite.ps1' $devStandRunner = Get-Content -Raw 'scripts/production-gates/run-dev-stand.ps1' $ownershipRunner = Get-Content -Raw 'scripts/production-gates/assert-plan-path-ownership.ps1' + $activeAuthorityRunner = Get-Content -Raw 'scripts/production-gates/assert-active-candidate-path-authority.ps1' $pathBudgetRunner = Get-Content -Raw 'scripts/production-gates/assert-windows-path-budget.ps1' $nodeRunner = Get-Content -Raw 'scripts/production-gates/run-node-matrix.ps1' $ownershipState = Get-Content -Raw '.agent/plans/2026-07-10-engram-production-ready-ownership-state.json' $masterPlan = Get-Content -Raw '.agent/plans/2026-07-10-engram-production-ready-master-plan.md' $scopeMap = Get-Content -Raw '.agent/plans/2026-07-10-engram-production-ready-scope-map.json' - $expectedPlanSha = 'fd2b223a9a62848efc39e1c33bf739bada191508bccb7ba9a73140185638e43d' - $expectedScopeMapSha = '81093184036672008d6b85dfa88a431998ef70b587ab11475aa2b315f03ddf79' + $activeDiffContracts = Get-Content -Raw '.agent/plans/2026-07-10-engram-production-ready-active-diff-contracts.json' + $expectedPlanSha = '4388337722e57b48e93515008e4220d6cd2c83de695c4c449387f071c59fb96f' + $expectedScopeMapSha = 'fb170d59f3072117489402fd347cd1432c40adbc842811f92227498bcbc92693' + $expectedActiveDiffContractSha = 'd8e7818d84831f047d30a8493f9c7d2a8cea288d5c381735960d11dd02988ae5' $observedPlanSha = ([string](& pwsh -NoProfile -File scripts/production-gates/assert-plan-path-ownership.ps1 -Plan .agent/plans/2026-07-10-engram-production-ready-master-plan.md -PrintCanonicalPlanSha256)).Trim() $observedScopeMapSha = Get-CanonicalTextSha256 $scopeMap $rejectedBulkHead = '68b2ce5835c7c6efdf1c68da9eedcb8d9c3837ef' @@ -497,16 +514,19 @@ jobs: [string]$criticalRunnerText, [string]$devStandRunnerText, [string]$ownershipRunnerText = $ownershipRunner, + [string]$activeAuthorityRunnerText = $activeAuthorityRunner, [string]$nodeRunnerText = $nodeRunner, [string]$stateText = $ownershipState, [string]$planText = $masterPlan, - [string]$scopeText = $scopeMap + [string]$scopeText = $scopeMap, + [string]$activeDiffContractsText = $activeDiffContracts ) { $execution = Remove-ConformanceStep $workflowText Assert-LiveDevStandInvocationContract $dbRunnerText if ($observedPlanSha -cne $expectedPlanSha) { throw "tracked production-ready plan hash drifted: expected=$expectedPlanSha observed=$observedPlanSha" } - if ((Get-CanonicalTextSha256 $planText) -cne $expectedPlanSha) { throw 'challenged plan text is not the exact canonical R8 authority' } - if ($observedScopeMapSha -cne $expectedScopeMapSha -or (Get-CanonicalTextSha256 $scopeText) -cne $expectedScopeMapSha) { throw "tracked R8 scope-map hash drifted: expected=$expectedScopeMapSha observed=$observedScopeMapSha" } + if ((Get-CanonicalTextSha256 $planText) -cne $expectedPlanSha) { throw 'challenged plan text is not the exact canonical R9 authority' } + if ($observedScopeMapSha -cne $expectedScopeMapSha -or (Get-CanonicalTextSha256 $scopeText) -cne $expectedScopeMapSha) { throw "tracked R9 scope-map hash drifted: expected=$expectedScopeMapSha observed=$observedScopeMapSha" } + if ((Get-CanonicalTextSha256 $activeDiffContractsText) -cne $expectedActiveDiffContractSha) { throw 'tracked R9 active-diff contract hash drifted' } $repeatToken = '(?i)(?[^`\r\n]+)`') | ForEach-Object { $_.Groups['value'].Value }) +} + +function Get-MarkdownSection { + param([Parameter(Mandatory)][string]$Text, [Parameter(Mandatory)][string]$StartPattern, [Parameter(Mandatory)][string]$EndPattern) + $start = [regex]::Match($Text, $StartPattern, [System.Text.RegularExpressions.RegexOptions]::Multiline) + if (-not $start.Success) { throw "plan section '$StartPattern' is missing" } + $tail = $Text.Substring($start.Index + $start.Length) + $end = [regex]::Match($tail, $EndPattern, [System.Text.RegularExpressions.RegexOptions]::Multiline) + if (-not $end.Success) { return $tail } + return $tail.Substring(0, $end.Index) +} + +function Get-TableRows { + param([Parameter(Mandatory)][string]$Section, [Parameter(Mandatory)][string]$HeaderFirstCell) + $lines = $Section -split "`r?`n" + $headerIndex = -1 + for ($index = 0; $index -lt $lines.Count; $index++) { + if (-not $lines[$index].TrimStart().StartsWith('|')) { continue } + [object[]]$cells = @(Split-MarkdownRow $lines[$index]) + if ($cells.Count -gt 0 -and [string]$cells[0] -ceq $HeaderFirstCell) { $headerIndex = $index; break } + } + if ($headerIndex -lt 0) { throw "Markdown table '$HeaderFirstCell' is missing" } + $rows = [System.Collections.Generic.List[object]]::new() + for ($index = $headerIndex + 1; $index -lt $lines.Count; $index++) { + $line = $lines[$index] + if ([string]::IsNullOrWhiteSpace($line)) { if ($rows.Count -gt 0) { break }; continue } + if (-not $line.TrimStart().StartsWith('|')) { if ($rows.Count -gt 0) { break }; continue } + [object[]]$cells = @(Split-MarkdownRow $line) + if ($cells.Count -gt 0 -and [string]$cells[0] -match '^:?-{3,}:?$') { continue } + $rows.Add([pscustomobject][ordered]@{ line_number = $index + 1; cells = $cells; raw = $line }) + } + return @($rows) +} + +function Normalize-AuthorityPath { + param([Parameter(Mandatory)][string]$Token) + $value = $Token.Trim().Replace('\', '/') + if ([string]::IsNullOrWhiteSpace($value)) { throw 'authority path is empty' } + $isPrefix = $value.EndsWith('/**', [System.StringComparison]::Ordinal) + $basePath = if ($isPrefix) { $value.Substring(0, $value.Length - 3) } else { $value } + if ($basePath.StartsWith('/') -or $basePath -match '^[A-Za-z]:' -or $basePath.Contains('//')) { throw "authority path must be repository-relative: '$value'" } + if ($basePath -match '(^|/)\.\.?(?:/|$)') { throw "authority path contains traversal: '$value'" } + if ($basePath -notmatch '^[A-Za-z0-9._/-]+$') { throw "authority path contains unsupported characters: '$value'" } + if ($value -match '[*?\[\]{}]' -and -not $isPrefix) { throw "only a terminal /** prefix is allowed: '$value'" } + if ($isPrefix -and ([string]::IsNullOrWhiteSpace($basePath) -or $basePath -match '[*?\[\]{}]')) { throw "authority prefix is invalid: '$value'" } + $normalized = $basePath.TrimEnd('/') + return [pscustomobject][ordered]@{ path = $normalized; display = if ($isPrefix) { $normalized + '/**' } else { $normalized }; kind = if ($isPrefix) { 'prefix' } else { 'exact' } } +} + +function Test-DeclarationMatchesPath { + param([Parameter(Mandatory)]$Declaration, [Parameter(Mandatory)][string]$Path) + if ([string]$Declaration.kind -ceq 'exact') { return [string]$Declaration.path -ceq $Path } + return $Path.StartsWith(([string]$Declaration.path).TrimEnd('/') + '/', [System.StringComparison]::Ordinal) +} + +function Get-PlanAuthority { + param([Parameter(Mandatory)][string]$PlanText) + $errors = [System.Collections.Generic.List[string]]::new() + $slices = [System.Collections.Generic.List[object]]::new() + $declarations = [System.Collections.Generic.List[object]]::new() + try { + $section = Get-MarkdownSection $PlanText '^## 4\. Worktree and Ownership Matrix\s*$' '^### 4\.1\s+' + [object[]]$rows = @(Get-TableRows $section 'Slice') + foreach ($row in $rows) { + if (@($row.cells).Count -lt 3) { $errors.Add("line $($row.line_number): ownership row is malformed"); continue } + $slice = ([string]$row.cells[0]).Trim().Trim('`') + [object[]]$branchSpans = @(Get-CodeSpans ([string]$row.cells[1])) + $branch = if ($branchSpans.Count -gt 0) { [string]$branchSpans[0] } else { ([string]$row.cells[1]).Trim() } + if ($branch -notmatch '^work/[A-Za-z0-9._/-]+$') { continue } + [object[]]$pathTokens = @(Get-CodeSpans ([string]$row.cells[2])) + $slices.Add([pscustomobject][ordered]@{ slice = $slice; branch = $branch; line = $row.line_number }) + foreach ($token in $pathTokens) { + try { + $normalized = Normalize-AuthorityPath ([string]$token) + $declarations.Add([pscustomobject][ordered]@{ owner = $slice; branch = $branch; path = $normalized.path; display = $normalized.display; kind = $normalized.kind; line = $row.line_number }) + } + catch { $errors.Add("line $($row.line_number): $($_.Exception.Message)") } + } + } + } + catch { $errors.Add($_.Exception.Message) } + return [pscustomobject][ordered]@{ slices = @($slices); declarations = @($declarations); errors = @($errors) } +} + +function Get-GitDiffEntries { + param([Parameter(Mandatory)][string]$Repository, [Parameter(Mandatory)][string]$Base, [Parameter(Mandatory)][string]$Head) + $raw = @(& git -C $Repository -c core.quotepath=false diff --name-status --find-renames --find-copies "$Base..$Head" -- 2>&1) + if ($LASTEXITCODE -ne 0) { throw "git diff failed for $Base..$Head`: $($raw -join ' ')" } + $entries = [System.Collections.Generic.List[object]]::new() + foreach ($line in $raw) { + if ([string]::IsNullOrWhiteSpace([string]$line)) { continue } + $parts = ([string]$line) -split "`t" + if ($parts.Count -lt 2) { throw "git diff emitted malformed name-status line '$line'" } + $status = [string]$parts[0] + $expected = if ($status -match '^[RC][0-9]+$') { 2 } else { 1 } + if (($parts.Count - 1) -ne $expected) { throw "git diff status '$status' emitted $($parts.Count - 1) paths, expected $expected" } + for ($index = 1; $index -lt $parts.Count; $index++) { + $normalized = Normalize-AuthorityPath ([string]$parts[$index]) + if ($normalized.kind -ne 'exact') { throw "git diff path cannot be a prefix: '$($parts[$index])'" } + $entries.Add([pscustomobject][ordered]@{ path = $normalized.path; git_status = $status }) + } + } + return @($entries) +} + +function Test-CommitAvailable { + param([Parameter(Mandatory)][string]$Repository, [Parameter(Mandatory)][string]$Commit) + & git -C $Repository cat-file -e "$Commit`^{commit}" 2>$null + return $LASTEXITCODE -eq 0 +} + +function Invoke-PendingSurfaceAudit { + param([Parameter(Mandatory)]$Pending, [Parameter(Mandatory)][AllowEmptyCollection()][object[]]$OwnerDeclarations, [Parameter(Mandatory)][AllowEmptyCollection()][object[]]$Entries) + $errors = [System.Collections.Generic.List[string]]::new() + $violations = [System.Collections.Generic.List[object]]::new() + $allowed = [System.Collections.Generic.List[object]]::new() + [string[]]$exactPaths = @(Get-OptionalStringArray $Pending 'exact_paths') + foreach ($path in $exactPaths) { + try { $allowed.Add((Normalize-AuthorityPath ([string]$path))) } catch { $errors.Add($_.Exception.Message) } + } + foreach ($declaration in @($OwnerDeclarations | Where-Object { ([string]$_.path).StartsWith('.agent', [System.StringComparison]::Ordinal) })) { $allowed.Add($declaration) } + [string[]]$forbidden = @(Get-OptionalStringArray $Pending 'forbidden_final_paths') + foreach ($entry in @($Entries)) { + $path = [string]$entry.path + $isForbidden = @($forbidden | Where-Object { [string]$_ -ceq $path }).Count -gt 0 + $matches = @($allowed | Where-Object { Test-DeclarationMatchesPath $_ $path }) + if ($isForbidden -or $matches.Count -eq 0) { + $reason = if ($isForbidden) { 'path is explicitly forbidden in a pending final diff' } else { 'path is outside pending exact product/test paths and bounded plan-owned .agent evidence/report declarations' } + $violations.Add([pscustomobject][ordered]@{ path = $path; git_status = [string]$entry.git_status; reason = $reason }) + } + } + if (@($Entries).Count -eq 0) { $errors.Add('pending probe diff contains zero paths') } + foreach ($violation in $violations) { $errors.Add("pending path violation '$($violation.path)': $($violation.reason)") } + return [pscustomobject][ordered]@{ verdict = if ($errors.Count -eq 0) { 'PASS_PENDING_SURFACE_ONLY' } else { 'FAIL' }; allowed_declarations = @($allowed); violations = @($violations); errors = @($errors) } +} + +function Invoke-R9ProfileAudit { + param([Parameter(Mandatory)]$ContractObject, [Parameter(Mandatory)]$PlanAuthority) + $errors = [System.Collections.Generic.List[string]]::new() + $authority = Get-PropertyValue $ContractObject 'authority' + foreach ($expected in ([ordered]@{ + plan_path = '.agent/plans/2026-07-10-engram-production-ready-master-plan.md' + scope_map_path = '.agent/plans/2026-07-10-engram-production-ready-scope-map.json' + ownership_state_path = '.agent/plans/2026-07-10-engram-production-ready-ownership-state.json' + }).GetEnumerator()) { + if ([string](Get-PropertyValue $authority ([string]$expected.Key)) -cne [string]$expected.Value) { $errors.Add("authority $([string]$expected.Key) drifted") } + } + if ([string](Get-PropertyValue $authority 'rejected_r8_head') -cne '406fe952c143eb8aaf5895427c568a41d4cec225') { $errors.Add('authority rejected_r8_head drifted') } + if ([string](Get-PropertyValue $authority 'r8_scope_provenance_sha256') -cne 'ab5f882fa110ca823a317061ecbca0c62516702735325893a56206f9e7a29415') { $errors.Add('authority r8_scope_provenance_sha256 drifted') } + $sourceAudit = Get-PropertyValue $ContractObject 'source_audit' + if ([string](Get-PropertyValue $sourceAudit 'mutable_register_path') -cne '.agent/reports/production-readiness-evidence-register.json') { $errors.Add('source_audit mutable register path drifted') } + if ([string](Get-PropertyValue $sourceAudit 'observed_sha256') -notmatch '^[0-9a-f]{64}$') { $errors.Add('source_audit observed_sha256 must be lowercase full SHA-256 provenance') } + $observedAt = [DateTimeOffset]::MinValue + if (-not [DateTimeOffset]::TryParse([string](Get-PropertyValue $sourceAudit 'observed_updated_at'), [ref]$observedAt)) { $errors.Add('source_audit observed_updated_at is invalid') } + if ([string](Get-PropertyValue $sourceAudit 'use') -cne 'discovery-only; never required by the frozen CI gate') { $errors.Add('source_audit use must remain discovery-only and never acceptance authority') } + $digestContract = Get-PropertyValue $ContractObject 'digest_contract' + if ([string](Get-PropertyValue $digestContract 'algorithm') -cne 'SHA-256') { $errors.Add('digest algorithm drifted') } + if ([string](Get-PropertyValue $digestContract 'serialization') -cne 'ordinally sorted normalized repository paths, one UTF-8 path plus LF per entry') { $errors.Add('digest serialization drifted') } + if ([string](Get-PropertyValue $digestContract 'path_case') -cne 'ordinal-case-sensitive') { $errors.Add('digest path_case drifted') } + [object[]]$candidates = @((Get-PropertyValue $ContractObject 'candidates')) + [object[]]$pending = @((Get-PropertyValue $ContractObject 'pending_namespaces')) + [object[]]$excluded = @((Get-PropertyValue $ContractObject 'excluded_resolvable_rows')) + if ($candidates.Count -ne 9) { $errors.Add("R9 must freeze 9 candidate contracts; found $($candidates.Count)") } + if ((@($candidates | ForEach-Object { [int](Get-PropertyValue $_ 'path_count') }) | Measure-Object -Sum).Sum -ne 123) { $errors.Add('R9 must freeze exactly 123 paths') } + if ($pending.Count -ne 2) { $errors.Add("R9 must carry exactly two pending contracts; found $($pending.Count)") } + $securityR3 = @($candidates | Where-Object { [string]$_.slice -ceq 'SECURITY-PROJECT-IDENTITY' }) + if ($securityR3.Count -ne 1 -or [string]$securityR3[0].status_class -cne 'rejected-security-r3') { $errors.Add('SECURITY-PROJECT-IDENTITY R3 must be frozen as rejected history') } + $securityPending = @($pending | Where-Object { [string]$_.slice -ceq 'SECURITY-PROJECT-IDENTITY' }) + if ($securityPending.Count -ne 1) { $errors.Add('SECURITY-PROJECT-IDENTITY R4 pending contract is missing') } + else { + if ([string]$securityPending[0].branch -cne 'work/prc-security-project-identity-r4' -or [string]$securityPending[0].base_anchor -cne '38344455754fe503acbd79d2134141f996adff7f') { $errors.Add('SECURITY-PROJECT-IDENTITY R4 branch/base drifted') } + if ([string]$securityPending[0].forbidden_base -cne '0d84047c280a873dd21baae2ecbf83ec422d497f') { $errors.Add('SECURITY-PROJECT-IDENTITY checker-only commit is not forbidden as the R4 base') } + [object[]]$exact = @((Get-PropertyValue $securityPending[0] 'exact_paths')) + if ('internal/proxy/identity_process_test.go' -cnotin $exact -or 'internal/proxy/identity_test.go' -cnotin $exact) { $errors.Add('R4 pending test surface is incomplete') } + if ('internal/proxy/identity.go' -cnotin @((Get-PropertyValue $securityPending[0] 'forbidden_final_paths'))) { $errors.Add('R4 pending contract must forbid final identity.go mutation') } + } + $r6 = @($pending | Where-Object { [string]$_.slice -ceq 'DB-EMBEDDING-EVIDENCE-TRANSPORT' }) + if ($r6.Count -ne 1 -or [string]$r6[0].base_anchor -cne 'a538f6224ef31f612152470a4ecd45e78ff9d0f2') { $errors.Add('DB embedding R6 pending exact base is missing') } + else { + [object[]]$r6Declarations = @($PlanAuthority.declarations | Where-Object { [string]$_.owner -ceq 'DB-EMBEDDING-EVIDENCE-TRANSPORT' -and ([string]$_.path).StartsWith('.agent', [System.StringComparison]::Ordinal) }) + $requiredR6Surface = @( + '.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport', + '.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3', + '.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4', + '.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5', + '.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6', + '.agent/specs/db-embedding-stats-evidence-transport/evidence' + ) + foreach ($path in $requiredR6Surface) { if (@($r6Declarations | Where-Object { [string]$_.path -ceq $path -and [string]$_.kind -ceq 'prefix' }).Count -ne 1) { $errors.Add("R6 full bounded evidence surface is missing '$path/**'") } } + } + foreach ($required in @(@('DB-REAPER','rejected-path-authority-conflict'), @('DEMOLITION-SKIP-CLASSIFICATION','checker-classification'))) { + $row = @($excluded | Where-Object { [string]$_.slice -ceq $required[0] }) + if ($row.Count -ne 1 -or -not ([string]$row[0].disposition).Contains([string]$required[1])) { $errors.Add("R9 excluded disposition for '$($required[0])' is missing") } + } + $securityDeclarations = @($PlanAuthority.declarations | Where-Object { [string]$_.owner -ceq 'SECURITY-PROJECT-IDENTITY' }) + if (@($securityDeclarations | Where-Object { Test-DeclarationMatchesPath $_ '.agent/testing/SECURITY-PROJECT-IDENTITY-R4/behavior-signal.md' }).Count -gt 0) { $errors.Add('R9 must not silently authorize the R4 .agent/testing behavior-signal path') } + return @($errors) +} + +function Invoke-ContractAudit { + param( + [Parameter(Mandatory)]$ContractObject, + [Parameter(Mandatory)][string]$PlanText, + [Parameter(Mandatory)][string]$ObservedContractSha256, + [Parameter(Mandatory)][string]$ExpectedContractSha256Value, + [Parameter(Mandatory)][string]$ObservedPlanSha256, + [Parameter(Mandatory)][string]$ExpectedPlanSha256Value, + [string]$Repository, + [switch]$VerifyGit, + [switch]$RequireObjects, + [AllowNull()]$Probe, + [switch]$EnforceR9Profile + ) + $errors = [System.Collections.Generic.List[string]]::new() + if ($ObservedContractSha256 -cne $ExpectedContractSha256Value.ToLowerInvariant()) { $errors.Add("contract SHA256 mismatch: expected=$ExpectedContractSha256Value observed=$ObservedContractSha256") } + if ($ObservedPlanSha256 -cne $ExpectedPlanSha256Value.ToLowerInvariant()) { $errors.Add("plan SHA256 mismatch: expected=$ExpectedPlanSha256Value observed=$ObservedPlanSha256") } + $planAuthority = Get-PlanAuthority $PlanText + foreach ($error in @($planAuthority.errors)) { $errors.Add("plan: $error") } + if ([int](Get-PropertyValue $ContractObject 'schema_version') -ne 1) { $errors.Add('contract schema_version must be 1') } + if ([string](Get-PropertyValue $ContractObject 'kind') -cne 'production-ready-active-diff-contracts') { $errors.Add('contract kind is not production-ready-active-diff-contracts') } + if ([int](Get-PropertyValue $ContractObject 'revision') -ne 9) { $errors.Add('contract revision must be 9') } + $statusClasses = Get-PropertyValue $ContractObject 'status_classes' + [object[]]$currentStatuses = @((Get-PropertyValue $statusClasses 'current')) + [object[]]$rejectedStatuses = @((Get-PropertyValue $statusClasses 'rejected')) + [object[]]$pendingStatuses = @((Get-PropertyValue $statusClasses 'pending')) + $allCandidateStatuses = @($currentStatuses) + @($rejectedStatuses) + [object[]]$candidates = @((Get-PropertyValue $ContractObject 'candidates')) + $seenCandidates = [System.Collections.Generic.HashSet[string]]::new([System.StringComparer]::Ordinal) + $candidateResults = [System.Collections.Generic.List[object]]::new() + $gitResults = [System.Collections.Generic.List[object]]::new() + foreach ($candidate in $candidates) { + $slice = [string](Get-PropertyValue $candidate 'slice') + $owner = [string](Get-PropertyValue $candidate 'plan_owner') + $statusClass = [string](Get-PropertyValue $candidate 'status_class') + $branch = [string](Get-PropertyValue $candidate 'branch') + if ([string]::IsNullOrWhiteSpace($slice) -or -not $seenCandidates.Add($slice)) { $errors.Add("candidate slice is empty or duplicated: '$slice'") } + if ($statusClass -cnotin $allCandidateStatuses) { $errors.Add("candidate '$slice' has unknown status class '$statusClass'") } + if ($branch -notmatch '^work/[A-Za-z0-9._/-]+$') { $errors.Add("candidate '$slice' has invalid branch '$branch'") } + $base = [string](Get-PropertyValue $candidate 'base'); $head = [string](Get-PropertyValue $candidate 'head') + if ($base -notmatch '^[0-9a-f]{40}$' -or $head -notmatch '^[0-9a-f]{40}$' -or $base -ceq $head) { $errors.Add("candidate '$slice' must have distinct full lowercase base/head commits") } + [object[]]$ownerRows = @($planAuthority.slices | Where-Object { [string]$_.slice -ceq $owner }) + if ($ownerRows.Count -ne 1) { $errors.Add("candidate '$slice' plan owner '$owner' has $($ownerRows.Count) maker rows, expected 1") } + elseif ($statusClass -cin $currentStatuses -and [string]$ownerRows[0].branch -cne $branch) { $errors.Add("current candidate '$slice' branch '$branch' differs from plan '$($ownerRows[0].branch)'") } + [object[]]$declarations = @($planAuthority.declarations | Where-Object { [string]$_.owner -ceq $owner }) + [object[]]$pathObjects = @((Get-PropertyValue $candidate 'paths')) + [string[]]$paths = @($pathObjects | ForEach-Object { [string](Get-PropertyValue $_ 'path') }) + [string[]]$sorted = @($paths); [Array]::Sort($sorted, [System.StringComparer]::Ordinal) + if (($paths -join "`n") -cne ($sorted -join "`n")) { $errors.Add("candidate '$slice' paths are not ordinally sorted") } + if (@($paths | Select-Object -Unique).Count -ne $paths.Count) { $errors.Add("candidate '$slice' repeats a path") } + if ([int](Get-PropertyValue $candidate 'path_count') -ne $paths.Count) { $errors.Add("candidate '$slice' path_count does not match paths") } + $digest = Get-PathSetSha256 $paths + if ($digest -cne [string](Get-PropertyValue $candidate 'paths_sha256')) { $errors.Add("candidate '$slice' path digest mismatch") } + foreach ($pathObject in $pathObjects) { + $path = [string](Get-PropertyValue $pathObject 'path') + try { $normalized = Normalize-AuthorityPath $path; if ($normalized.kind -ne 'exact' -or $normalized.path -cne $path) { throw "candidate path is not normalized exact: '$path'" } } catch { $errors.Add("candidate '$slice': $($_.Exception.Message)"); continue } + $classification = [string](Get-PropertyValue $pathObject 'classification') + if ($classification -cnotin @('product','evidence','report')) { $errors.Add("candidate '$slice' path '$path' has invalid classification '$classification'") } + elseif ($classification -ceq 'product' -and $path.StartsWith('.agent/', [System.StringComparison]::Ordinal)) { $errors.Add("candidate '$slice' .agent path '$path' is misclassified as product") } + elseif ($classification -ceq 'evidence' -and -not $path.StartsWith('.agent/', [System.StringComparison]::Ordinal)) { $errors.Add("candidate '$slice' non-.agent path '$path' is misclassified as evidence") } + elseif ($classification -ceq 'report' -and -not $path.StartsWith('.agent/reports/', [System.StringComparison]::Ordinal)) { $errors.Add("candidate '$slice' report '$path' is outside .agent/reports") } + if (@($declarations | Where-Object { Test-DeclarationMatchesPath $_ $path }).Count -eq 0) { $errors.Add("candidate '$slice' path '$path' is not allowed by plan owner '$owner'") } + } + if ((Get-PropertyValue $candidate 'path_authority_eligible') -isnot [bool] -or -not [bool](Get-PropertyValue $candidate 'path_authority_eligible')) { $errors.Add("candidate '$slice' must be path-authority eligible") } + if ((Get-PropertyValue $candidate 'release_accepted') -isnot [bool] -or [bool](Get-PropertyValue $candidate 'release_accepted')) { $errors.Add("candidate '$slice' must not claim release acceptance") } + $candidateResults.Add([pscustomobject][ordered]@{ slice = $slice; status_class = $statusClass; branch = $branch; base = $base; head = $head; path_count = $paths.Count; paths_sha256 = $digest }) + if ($VerifyGit) { + $baseAvailable = Test-CommitAvailable $Repository $base; $headAvailable = Test-CommitAvailable $Repository $head + if (-not ($baseAvailable -and $headAvailable)) { + $gitResults.Add([pscustomobject][ordered]@{ slice = $slice; available = $false; verified = $false }) + if ($RequireObjects) { $errors.Add("candidate '$slice' Git objects are unavailable") } + } + else { + try { + [object[]]$actual = @(Get-GitDiffEntries $Repository $base $head) + [string[]]$actualPaths = @($actual | ForEach-Object { [string]$_.path }); [Array]::Sort($actualPaths, [System.StringComparer]::Ordinal) + $actualDigest = Get-PathSetSha256 $actualPaths + $statusMismatch = $false + foreach ($pathObject in $pathObjects) { + $matches = @($actual | Where-Object { [string]$_.path -ceq [string]$pathObject.path -and [string]$_.git_status -ceq [string]$pathObject.git_status }) + if ($matches.Count -ne 1) { $statusMismatch = $true } + } + if ($actualDigest -cne $digest) { $errors.Add("candidate '$slice' live Git path digest differs from frozen contract") } + if ($statusMismatch) { $errors.Add("candidate '$slice' live Git statuses differ from frozen contract") } + $gitResults.Add([pscustomobject][ordered]@{ slice = $slice; available = $true; verified = ($actualDigest -ceq $digest -and -not $statusMismatch); path_count = $actualPaths.Count; paths_sha256 = $actualDigest }) + } + catch { $errors.Add("candidate '$slice' Git verification failed: $($_.Exception.Message)") } + } + } + } + [object[]]$pendingContracts = @((Get-PropertyValue $ContractObject 'pending_namespaces')) + $pendingResults = [System.Collections.Generic.List[object]]::new() + foreach ($pending in $pendingContracts) { + $slice = [string](Get-PropertyValue $pending 'slice'); $owner = [string](Get-PropertyValue $pending 'plan_owner'); $branch = [string](Get-PropertyValue $pending 'branch') + if ([string](Get-PropertyValue $pending 'status_class') -cnotin $pendingStatuses) { $errors.Add("pending '$slice' has unknown status class") } + if ([string](Get-PropertyValue $pending 'base_anchor') -notmatch '^[0-9a-f]{40}$') { $errors.Add("pending '$slice' has invalid base anchor") } + [object[]]$ownerRows = @($planAuthority.slices | Where-Object { [string]$_.slice -ceq $owner }) + if ($ownerRows.Count -ne 1) { $errors.Add("pending '$slice' owner '$owner' has $($ownerRows.Count) maker rows") } + elseif ([string]$ownerRows[0].branch -cne $branch) { $errors.Add("pending '$slice' branch '$branch' differs from plan '$($ownerRows[0].branch)'") } + [object[]]$declarations = @($planAuthority.declarations | Where-Object { [string]$_.owner -ceq $owner }) + [string[]]$exactPaths = @(Get-OptionalStringArray $pending 'exact_paths') + [string[]]$exactPrefixes = @(Get-OptionalStringArray $pending 'exact_prefixes') + [object[]]$explicit = @($exactPaths) + @($exactPrefixes) + if ($explicit.Count -eq 0) { $errors.Add("pending '$slice' declares no bounded path") } + foreach ($token in $explicit) { + try { + $normalized = Normalize-AuthorityPath ([string]$token) + if (@($declarations | Where-Object { [string]$_.kind -ceq $normalized.kind -and [string]$_.path -ceq $normalized.path }).Count -ne 1) { $errors.Add("pending '$slice' explicit path '$token' is not an exact plan declaration") } + } + catch { $errors.Add("pending '$slice': $($_.Exception.Message)") } + } + [string[]]$forbidden = @(Get-OptionalStringArray $pending 'forbidden_final_paths') + foreach ($token in $forbidden) { if ([string]$token -cin $exactPaths) { $errors.Add("pending '$slice' both allows and forbids '$token'") } } + if ((Get-PropertyValue $pending 'release_accepted') -isnot [bool] -or [bool](Get-PropertyValue $pending 'release_accepted')) { $errors.Add("pending '$slice' must not claim release acceptance") } + [object[]]$effectiveEvidence = @($declarations | Where-Object { ([string]$_.path).StartsWith('.agent', [System.StringComparison]::Ordinal) }) + $pendingResults.Add([pscustomobject][ordered]@{ slice = $slice; branch = $branch; base_anchor = [string]$pending.base_anchor; allowed_exact_paths = @($exactPaths); effective_agent_declarations = @($effectiveEvidence | ForEach-Object display); requires_final_exact_diff_contract = $true }) + } + if ($EnforceR9Profile) { foreach ($profileError in @(Invoke-R9ProfileAudit $ContractObject $planAuthority)) { $errors.Add("R9 profile: $profileError") } } + $probeResult = $null + if ($null -ne $Probe) { + $probeSlice = [string](Get-PropertyValue $Probe 'slice') + $matchingPending = @($pendingContracts | Where-Object { [string]$_.slice -ceq $probeSlice }) + if ($matchingPending.Count -ne 1) { $errors.Add("pending probe slice '$probeSlice' has $($matchingPending.Count) contracts, expected 1") } + else { + $probeOwner = [string]$matchingPending[0].plan_owner + [object[]]$probeDeclarations = @($planAuthority.declarations | Where-Object { [string]$_.owner -ceq $probeOwner }) + $expectedProbeBase = [string](Get-PropertyValue $matchingPending[0] 'base_anchor') + if ([string]$Probe.base -cne $expectedProbeBase) { + $baseError = "pending probe base '$([string]$Probe.base)' must equal frozen base anchor '$expectedProbeBase'" + $errors.Add($baseError) + $probeResult = [pscustomobject][ordered]@{ verdict='FAIL'; requested_base=[string]$Probe.base; expected_base=$expectedProbeBase; head=[string]$Probe.head; allowed_declarations=@(); violations=@(); errors=@($baseError) } + } + else { + try { + & git -C $Repository merge-base --is-ancestor ([string]$Probe.base) ([string]$Probe.head) 2>$null + $ancestorExit = $LASTEXITCODE + if ($ancestorExit -eq 1) { throw "pending probe base '$([string]$Probe.base)' is not an ancestor of head '$([string]$Probe.head)'" } + if ($ancestorExit -ne 0) { throw "git merge-base --is-ancestor failed with exit $ancestorExit" } + [object[]]$probeEntries = @(Get-GitDiffEntries $Repository ([string]$Probe.base) ([string]$Probe.head)) + $probeResult = Invoke-PendingSurfaceAudit $matchingPending[0] $probeDeclarations $probeEntries + $probeResult | Add-Member -NotePropertyName requested_base -NotePropertyValue ([string]$Probe.base) + $probeResult | Add-Member -NotePropertyName expected_base -NotePropertyValue $expectedProbeBase + $probeResult | Add-Member -NotePropertyName head -NotePropertyValue ([string]$Probe.head) + $probeResult | Add-Member -NotePropertyName base_is_ancestor -NotePropertyValue $true + foreach ($probeError in @($probeResult.errors)) { $errors.Add("pending probe: $probeError") } + } + catch { $errors.Add("pending probe failed: $($_.Exception.Message)") } + } + } + } + return [pscustomobject][ordered]@{ + verdict = if ($errors.Count -eq 0) { 'PASS' } else { 'FAIL' } + counts = [pscustomobject][ordered]@{ candidates = $candidates.Count; paths = (@($candidateResults | ForEach-Object path_count) | Measure-Object -Sum).Sum; pending_contracts = $pendingContracts.Count; current_candidates = @($candidateResults | Where-Object { [string]$_.status_class -cin $currentStatuses }).Count; rejected_candidates = @($candidateResults | Where-Object { [string]$_.status_class -cin $rejectedStatuses }).Count; git_verified = @($gitResults | Where-Object verified).Count; errors = $errors.Count } + candidates = @($candidateResults) + pending_contracts = @($pendingResults) + git_verification = @($gitResults) + pending_probe = $probeResult + source_snapshot = [pscustomobject][ordered]@{ freshness = 'HISTORICAL_DISCOVERY_ONLY'; used_for_acceptance = $false; mutable_register_read = $false; observed_sha256 = [string](Get-PropertyValue (Get-PropertyValue $ContractObject 'source_audit') 'observed_sha256') } + errors = @($errors) + } +} + +function Copy-JsonObject { + param([Parameter(Mandatory)]$Object) + return ($Object | ConvertTo-Json -Depth 100 | ConvertFrom-Json -Depth 100) +} + +function Set-TestCandidateDigest { + param([Parameter(Mandatory)]$Candidate) + [object[]]$paths = @($Candidate.paths) + $Candidate.path_count = $paths.Count + $Candidate.paths_sha256 = Get-PathSetSha256 @($paths | ForEach-Object path) +} + +function Assert-SelfTest { + param([Parameter(Mandatory)][bool]$Condition, [Parameter(Mandatory)][string]$Message) + if (-not $Condition) { throw "SELFTEST FAIL: $Message" } +} + +function Invoke-SelfTest { + $plan = @' +## 4. Worktree and Ownership Matrix + +| Slice | Branch | Exclusive maker paths | Dependencies | Required proof | +| --- | --- | --- | --- | --- | +| A | `work/a` | `src/a.go`, `src/a_test.go`, `.agent/specs/a/evidence/**`, `.agent/reports/a-common/**`, `.agent/reports/a-r3/**`, `.agent/reports/a-r4/**`, `.agent/reports/a-r5/**`, `.agent/reports/a-r6/**`, `.agent/reports/a.md` | none | proof | +| NO-PATHS | checker-only | read-only | none | proof | + +### 4.1 Test inventory +'@ + $contract = [pscustomobject][ordered]@{ + schema_version = 1; kind = 'production-ready-active-diff-contracts'; revision = 9 + authority = [pscustomobject]@{ plan_path='.agent/plans/2026-07-10-engram-production-ready-master-plan.md'; scope_map_path='.agent/plans/2026-07-10-engram-production-ready-scope-map.json'; ownership_state_path='.agent/plans/2026-07-10-engram-production-ready-ownership-state.json'; rejected_r8_head='406fe952c143eb8aaf5895427c568a41d4cec225'; r8_scope_provenance_sha256='ab5f882fa110ca823a317061ecbca0c62516702735325893a56206f9e7a29415' } + source_audit = [pscustomobject]@{ mutable_register_path='.agent/reports/production-readiness-evidence-register.json'; observed_sha256 = ('a' * 64); observed_updated_at='2026-07-11T00:00:00+03:00'; use='discovery-only; never required by the frozen CI gate' } + digest_contract = [pscustomobject]@{ algorithm='SHA-256'; serialization='ordinally sorted normalized repository paths, one UTF-8 path plus LF per entry'; path_case='ordinal-case-sensitive' } + status_classes = [pscustomobject]@{ current = @('current-ready'); rejected = @('rejected-historical'); pending = @('current-maker-in-progress') } + pending_namespaces = @([pscustomobject][ordered]@{ slice='A'; plan_owner='A'; status_class='current-maker-in-progress'; branch='work/a'; base_anchor=('1'*40); exact_paths=@('src/a_test.go'); exact_prefixes=@('.agent/specs/a/evidence/**'); forbidden_final_paths=@('src/a.go'); release_accepted=$false }) + excluded_resolvable_rows = @() + candidates = @([pscustomobject][ordered]@{ + slice='A'; status_class='current-ready'; branch='work/a'; base=('2'*40); head=('3'*40); path_count=0; paths_sha256=''; plan_owner='A'; path_authority_eligible=$true; release_accepted=$false + paths=@( + [pscustomobject]@{path='.agent/reports/a.md';git_status='A';classification='report'}, + [pscustomobject]@{path='.agent/specs/a/evidence/proof.json';git_status='A';classification='evidence'}, + [pscustomobject]@{path='src/a.go';git_status='M';classification='product'}, + [pscustomobject]@{path='src/a_test.go';git_status='M';classification='product'} + ) + }) + } + Set-TestCandidateDigest $contract.candidates[0] + $hash = 'f' * 64 + $positive = Invoke-ContractAudit $contract $plan $hash $hash $hash $hash + Assert-SelfTest ($positive.verdict -eq 'PASS') ("valid frozen contract failed: " + ($positive.errors -join '; ')) + $missing = Copy-JsonObject $contract; $missing.candidates[0].paths = @($missing.candidates[0].paths | Select-Object -Skip 1) + Assert-SelfTest ((Invoke-ContractAudit $missing $plan $hash $hash $hash $hash).verdict -eq 'FAIL') 'missing frozen path was accepted' + $extra = Copy-JsonObject $contract; $extra.candidates[0].paths = @($extra.candidates[0].paths) + [pscustomobject]@{path='src/extra.go';git_status='A';classification='product'} + Assert-SelfTest ((Invoke-ContractAudit $extra $plan $hash $hash $hash $hash).verdict -eq 'FAIL') 'extra frozen path was accepted' + $wrongOwner = Copy-JsonObject $contract; $wrongOwner.candidates[0].plan_owner = 'NO-PATHS' + $zeroResult = Invoke-ContractAudit $wrongOwner $plan $hash $hash $hash $hash + Assert-SelfTest ($zeroResult.verdict -eq 'FAIL' -and @($zeroResult.errors | Where-Object { $_ -match '0 maker rows' }).Count -gt 0) 'zero-declaration non-empty candidate did not fail clearly' + $wrongTest = Copy-JsonObject $contract; $wrongTest.candidates[0].paths[3].path='src/wrong_test.go'; Set-TestCandidateDigest $wrongTest.candidates[0] + Assert-SelfTest ((Invoke-ContractAudit $wrongTest $plan $hash $hash $hash $hash).verdict -eq 'FAIL') 'wrong test name was accepted' + $staleNamespace = Copy-JsonObject $contract; $staleNamespace.candidates[0].paths[1].path='.agent/specs/a-r7/evidence/proof.json'; Set-TestCandidateDigest $staleNamespace.candidates[0] + Assert-SelfTest ((Invoke-ContractAudit $staleNamespace $plan $hash $hash $hash $hash).verdict -eq 'FAIL') 'stale evidence namespace was accepted' + $wrongBranch = Copy-JsonObject $contract; $wrongBranch.candidates[0].branch='work/b' + Assert-SelfTest ((Invoke-ContractAudit $wrongBranch $plan $hash $hash $hash $hash).verdict -eq 'FAIL') 'current candidate wrong branch was accepted' + $hashDrift = Invoke-ContractAudit $contract $plan ('0'*64) $hash $hash $hash + Assert-SelfTest ($hashDrift.verdict -eq 'FAIL') 'contract hash drift was accepted' + $authority = Get-PlanAuthority $plan + $pending = $contract.pending_namespaces[0] + [object[]]$pendingDeclarations = @($authority.declarations | Where-Object owner -CEQ 'A') + $pendingPass = Invoke-PendingSurfaceAudit $pending $pendingDeclarations @([pscustomobject]@{path='src/a_test.go';git_status='A'},[pscustomobject]@{path='.agent/specs/a/evidence/r4.json';git_status='A'}) + Assert-SelfTest ($pendingPass.verdict -eq 'PASS_PENDING_SURFACE_ONLY') ("valid pending surface failed: " + ($pendingPass.errors -join '; ')) + $pendingExtra = Invoke-PendingSurfaceAudit $pending $pendingDeclarations @([pscustomobject]@{path='.agent/testing/a/signal.md';git_status='A'}) + Assert-SelfTest ($pendingExtra.verdict -eq 'FAIL') 'undeclared pending .agent/testing path was accepted' + $pendingForbidden = Invoke-PendingSurfaceAudit $pending $pendingDeclarations @([pscustomobject]@{path='src/a.go';git_status='M'}) + Assert-SelfTest ($pendingForbidden.verdict -eq 'FAIL') 'explicitly forbidden pending path was accepted' + $prefixOnly = Copy-JsonObject $contract + $prefixOnly.pending_namespaces[0].PSObject.Properties.Remove('exact_paths') + $prefixOnly.pending_namespaces[0].exact_prefixes = @('.agent/reports/a-r6/**') + $prefixOnlyAudit = Invoke-ContractAudit $prefixOnly $plan $hash $hash $hash $hash + Assert-SelfTest ($prefixOnlyAudit.verdict -eq 'PASS') ("prefix-only pending contract failed: " + ($prefixOnlyAudit.errors -join '; ')) + Assert-SelfTest (@($prefixOnlyAudit.pending_contracts[0].allowed_exact_paths).Count -eq 0) 'prefix-only pending contract serialized a null exact-path declaration' + $prefixOnlyPending = $prefixOnly.pending_namespaces[0] + $prefixOnlyProbe = Invoke-PendingSurfaceAudit $prefixOnlyPending $pendingDeclarations @( + [pscustomobject]@{path='.agent/reports/a-r4/prior.json';git_status='A'}, + [pscustomobject]@{path='.agent/reports/a-r6/current.json';git_status='A'} + ) + Assert-SelfTest ($prefixOnlyProbe.verdict -eq 'PASS_PENDING_SURFACE_ONLY') ("prefix-only pending full plan-owned evidence surface failed: " + ($prefixOnlyProbe.errors -join '; ')) + $wrongBaseProbe = Invoke-ContractAudit $contract $plan $hash $hash $hash $hash -Repository (Get-Location).Path -Probe ([pscustomobject]@{slice='A';base=('9'*40);head=('8'*40)}) + Assert-SelfTest (@($wrongBaseProbe.errors | Where-Object { $_ -match 'pending probe base .+ must equal frozen base anchor' }).Count -eq 1) 'pending probe accepted or obscured a non-anchor base' + $wrongRejectedHead = Copy-JsonObject $contract; $wrongRejectedHead.authority.rejected_r8_head = ('4' * 40) + Assert-SelfTest (@((Invoke-R9ProfileAudit $wrongRejectedHead $authority) | Where-Object { $_ -match 'authority rejected_r8_head drifted' }).Count -eq 1) 'R9 profile accepted a wrong rejected R8 head' + $wrongScopeProvenance = Copy-JsonObject $contract; $wrongScopeProvenance.authority.r8_scope_provenance_sha256 = ('b' * 64) + Assert-SelfTest (@((Invoke-R9ProfileAudit $wrongScopeProvenance $authority) | Where-Object { $_ -match 'authority r8_scope_provenance_sha256 drifted' }).Count -eq 1) 'R9 profile accepted wrong AB5F scope provenance' + $mutableSource = Copy-JsonObject $contract; $mutableSource.source_audit.use = 'acceptance authority' + Assert-SelfTest (@((Invoke-R9ProfileAudit $mutableSource $authority) | Where-Object { $_ -match 'source_audit use must remain discovery-only' }).Count -eq 1) 'R9 profile accepted the mutable register as authority' + $wrongSerialization = Copy-JsonObject $contract; $wrongSerialization.digest_contract.serialization = 'platform-default path list' + Assert-SelfTest (@((Invoke-R9ProfileAudit $wrongSerialization $authority) | Where-Object { $_ -match 'digest serialization drifted' }).Count -eq 1) 'R9 profile accepted wrong digest serialization' + $wrongPathCase = Copy-JsonObject $contract; $wrongPathCase.digest_contract.path_case = 'case-insensitive' + Assert-SelfTest (@((Invoke-R9ProfileAudit $wrongPathCase $authority) | Where-Object { $_ -match 'digest path_case drifted' }).Count -eq 1) 'R9 profile accepted wrong digest path-case semantics' + Write-Output 'SELFTEST PASS: active-candidate path authority (missing/extra/wrong-owner/wrong-test/stale-namespace/zero-declarations/pending-surface mutations rejected)' +} + +if ($SelfTest) { Invoke-SelfTest; exit 0 } +if ($PrintCanonicalContractSha256) { + if (-not (Test-Path -LiteralPath $Contract -PathType Leaf)) { throw "contract does not exist: $Contract" } + Write-Output (Get-CanonicalUtf8LfSha256 $Contract) + exit 0 +} + +$startedAt = [DateTimeOffset]::UtcNow +$artifactObject = $null +$exitCode = 1 +try { + if (-not (Test-Path -LiteralPath $Contract -PathType Leaf)) { throw "contract does not exist: $Contract" } + if (-not (Test-Path -LiteralPath $Plan -PathType Leaf)) { throw "plan does not exist: $Plan" } + if ($ExpectedContractSha256 -notmatch '^[0-9a-fA-F]{64}$') { throw '-ExpectedContractSha256 must be a full SHA256' } + if ($ExpectedPlanSha256 -notmatch '^[0-9a-fA-F]{64}$') { throw '-ExpectedPlanSha256 must be a full SHA256' } + $probeSupplied = -not [string]::IsNullOrWhiteSpace($ProbeSlice) -or -not [string]::IsNullOrWhiteSpace($ProbeBase) -or -not [string]::IsNullOrWhiteSpace($ProbeHead) + if ($probeSupplied -and ([string]::IsNullOrWhiteSpace($ProbeSlice) -or $ProbeBase -notmatch '^[0-9a-fA-F]{40}$' -or $ProbeHead -notmatch '^[0-9a-fA-F]{40}$')) { throw 'pending probe requires -ProbeSlice and full 40-hex -ProbeBase/-ProbeHead' } + $repository = $null + if ($VerifyAvailableGit -or $RequireGitObjects -or $probeSupplied) { + $root = @(& git rev-parse --show-toplevel 2>&1) + if ($LASTEXITCODE -ne 0) { throw "cannot resolve Git repository: $($root -join ' ')" } + $repository = [System.IO.Path]::GetFullPath(([string]$root[-1]).Trim()) + } + $contractHash = Get-CanonicalUtf8LfSha256 $Contract + $planHash = Get-CanonicalUtf8LfSha256 $Plan + $contractObject = Get-Content -LiteralPath $Contract -Raw | ConvertFrom-Json -Depth 100 + $planText = [System.IO.File]::ReadAllText([System.IO.Path]::GetFullPath($Plan)) + $probe = if ($probeSupplied) { [pscustomobject]@{ slice=$ProbeSlice; base=$ProbeBase.ToLowerInvariant(); head=$ProbeHead.ToLowerInvariant() } } else { $null } + $audit = Invoke-ContractAudit -ContractObject $contractObject -PlanText $planText -ObservedContractSha256 $contractHash -ExpectedContractSha256Value $ExpectedContractSha256 -ObservedPlanSha256 $planHash -ExpectedPlanSha256Value $ExpectedPlanSha256 -Repository $repository -VerifyGit:($VerifyAvailableGit -or $RequireGitObjects) -RequireObjects:$RequireGitObjects -Probe $probe -EnforceR9Profile + $finishedAt = [DateTimeOffset]::UtcNow + $artifactObject = [ordered]@{ + schema_version = 1 + gate = 'active-candidate-path-authority' + verdict = $audit.verdict + started_at = $startedAt.ToString('O') + finished_at = $finishedAt.ToString('O') + duration_seconds = [math]::Round(($finishedAt - $startedAt).TotalSeconds, 3) + contract = [ordered]@{ path=[System.IO.Path]::GetFullPath($Contract); expected_sha256=$ExpectedContractSha256.ToLowerInvariant(); observed_sha256=$contractHash; hash_match=$contractHash -ceq $ExpectedContractSha256.ToLowerInvariant() } + plan = [ordered]@{ path=[System.IO.Path]::GetFullPath($Plan); expected_sha256=$ExpectedPlanSha256.ToLowerInvariant(); observed_sha256=$planHash; hash_match=$planHash -ceq $ExpectedPlanSha256.ToLowerInvariant() } + source_snapshot = $audit.source_snapshot + counts = $audit.counts + candidates = $audit.candidates + pending_contracts = $audit.pending_contracts + git_verification = $audit.git_verification + pending_probe = $audit.pending_probe + errors = $audit.errors + } + $exitCode = if ($audit.verdict -eq 'PASS') { 0 } else { 1 } +} +catch { + $finishedAt = [DateTimeOffset]::UtcNow + $artifactObject = [ordered]@{ schema_version=1; gate='active-candidate-path-authority'; verdict='FAIL'; started_at=$startedAt.ToString('O'); finished_at=$finishedAt.ToString('O'); source_snapshot=[ordered]@{freshness='HISTORICAL_DISCOVERY_ONLY';used_for_acceptance=$false;mutable_register_read=$false}; errors=@($_.Exception.Message) } + $exitCode = 1 +} + +Write-Utf8NoBom -Path $Artifact -Text (($artifactObject | ConvertTo-Json -Depth 100) + "`n") +Write-Output "active-candidate-path-authority verdict=$($artifactObject.verdict) artifact=$Artifact" +exit $exitCode diff --git a/scripts/production-gates/assert-plan-path-ownership.ps1 b/scripts/production-gates/assert-plan-path-ownership.ps1 index 434969da..4ecc1c9a 100644 --- a/scripts/production-gates/assert-plan-path-ownership.ps1 +++ b/scripts/production-gates/assert-plan-path-ownership.ps1 @@ -1516,14 +1516,19 @@ try { if ([string]::IsNullOrWhiteSpace($EvidenceNamespace)) { $errors.Add('Diff mode requires -EvidenceNamespace') } if ([string]::IsNullOrWhiteSpace($ReportNamespace)) { $errors.Add('Diff mode requires -ReportNamespace') } - $sliceRows = if ([string]::IsNullOrWhiteSpace($Slice)) { @() } else { @($ledger.slices | Where-Object slice -ceq $Slice) } + [object[]]$sliceRows = @( + if (-not [string]::IsNullOrWhiteSpace($Slice)) { + $ledger.slices | Where-Object slice -ceq $Slice + } + ) if ($sliceRows.Count -ne 1) { $errors.Add("Diff mode requires exactly one maker row for slice '$Slice'; found $($sliceRows.Count)") } - $sliceDeclarations = if ($sliceRows.Count -eq 1) { - @($ledger.declarations | Where-Object owner -ceq $Slice) - } - else { @() } + [object[]]$sliceDeclarations = @( + if ($sliceRows.Count -eq 1) { + $ledger.declarations | Where-Object owner -ceq $Slice + } + ) $evidence = $null $report = $null From a1a3bfeb6546d1f3f24192b1c9f057402b6249a2 Mon Sep 17 00:00:00 2001 From: Kirill Turanskiy Date: Sat, 11 Jul 2026 01:36:30 +0300 Subject: [PATCH 046/111] evidence: bind embedding coverage to process envelopes --- .../R5-SHA256SUMS.txt | 12 +- .../maker-report.md | 12 +- .../maker-summary.v1.json | 4 +- .../verification-matrix.v1.json | 2 + .../verify-coverage-capture.cjs | 5 +- .../.gitattributes | 2 + .../R6-SHA256SUMS.txt | 32 + .../assemble-coverage-repeat.cjs | 115 ++ .../build-checksums.cjs | 229 ++++ .../capture-coverage-run.cjs | 408 +++++++ .../checksum-layers.v1.json | 298 +++++ .../coverage-capture.v2.json | 106 ++ .../coverage-repeat.v2.json | 158 +++ .../coverage-run-1.envelope.v2.json | 120 ++ .../coverage-run-1.stderr.bin | 0 .../coverage-run-1.stdout.bin | 50 + .../coverage-run-1.tap | 50 + .../coverage-run-2.envelope.v2.json | 120 ++ .../coverage-run-2.stderr.bin | 0 .../coverage-run-2.stdout.bin | 50 + .../coverage-run-2.tap | 50 + .../maker-report.md | 112 ++ .../maker-summary.v2.json | 79 ++ .../prove-it.cjs | 166 +++ .../red-reproduction.cjs | 228 ++++ .../verify-evidence.cjs | 1080 +++++++++++++++++ .../verify-evidence.test.cjs | 283 +++++ .../verify-final-commit-replay.cjs | 380 ++++++ .../verify-manifest.test.cjs | 176 ++- ...B-EMBEDDING-EVIDENCE-TRANSPORT-R5.tdd.json | 7 +- ...B-EMBEDDING-EVIDENCE-TRANSPORT-R6.red.json | 85 ++ ...B-EMBEDDING-EVIDENCE-TRANSPORT-R6.tdd.json | 157 +++ 32 files changed, 4522 insertions(+), 54 deletions(-) create mode 100644 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/.gitattributes create mode 100644 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/R6-SHA256SUMS.txt create mode 100644 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/assemble-coverage-repeat.cjs create mode 100644 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/build-checksums.cjs create mode 100644 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/capture-coverage-run.cjs create mode 100644 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/checksum-layers.v1.json create mode 100644 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/coverage-capture.v2.json create mode 100644 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/coverage-repeat.v2.json create mode 100644 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/coverage-run-1.envelope.v2.json create mode 100644 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/coverage-run-1.stderr.bin create mode 100644 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/coverage-run-1.stdout.bin create mode 100644 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/coverage-run-1.tap create mode 100644 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/coverage-run-2.envelope.v2.json create mode 100644 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/coverage-run-2.stderr.bin create mode 100644 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/coverage-run-2.stdout.bin create mode 100644 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/coverage-run-2.tap create mode 100644 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/maker-report.md create mode 100644 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/maker-summary.v2.json create mode 100644 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/prove-it.cjs create mode 100644 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/red-reproduction.cjs create mode 100644 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/verify-evidence.cjs create mode 100644 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/verify-evidence.test.cjs create mode 100644 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/verify-final-commit-replay.cjs create mode 100644 .agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R6.red.json create mode 100644 .agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R6.tdd.json diff --git a/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/R5-SHA256SUMS.txt b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/R5-SHA256SUMS.txt index 02b97b37..2b97e774 100644 --- a/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/R5-SHA256SUMS.txt +++ b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/R5-SHA256SUMS.txt @@ -12,7 +12,7 @@ e3e9fd6250d4ead502a01ec81bb7901ad658d74845184a10b6f153276a1bd12f .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/content-manifest.v1.json 05ed45d295c3520fbbbc23419d6d57796127d71bd324c6ddb8f60191dc125f00 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/ARTIFACTS.sha256 a55e59dd870659330add8f840272aa1e8829f8161779db3e9be9e6e014cf1ba4 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.cjs -970a7a4a322b8aa5a0ed434d68ef5ce41c5085c986007f15aadf34d69c0172aa .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.test.cjs +d04b8bc050182f2806972c9d30aaa7d6349ef2f56f15b3ef21f7005459bb86cc .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.test.cjs 4f62630b651d6805ffe894e643159dfdef41176081878f303de12a64a56dca52 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verification-observations.v1.json 5d7a49dd716c25679e133c9aa2c0b59fd40525fb0540cc8b4556429df1d37fc6 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/maker-report.md 8777110d8681c895fd821664ca733d959e940353490ae9ed8bc0f0c1e27f8b3b .agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R3.red.json @@ -30,13 +30,13 @@ afea6437d06ee2ff4d2eb1574464184c31e9c7441aa07f4a2ac6258b11039cfd .agent/reports 78500814f2918040c5c8c0e3a9f26cdc858bf33027a07e51e782e02ea88329f6 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4/maker-report.md ee566e63906c1a4fe4ce665501c293f8d155935d7f65b24e5095477c3dd6c7ce .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4/R4-SHA256SUMS.txt 3fa766468f339d100a825879182cfeb9ffe3c1be59214dd06913124db6050e3f .agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R5.red.json -9c91222e6f1ffcb4fffeac777a8c98586ff9bae6e5e7579bec8ffbfabd2422db .agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R5.tdd.json +652de15a329c23c65ce9e0962e97c7b2007c2c7d44ffda5c368704aa7d41c289 .agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R5.tdd.json 2da06a50cd5cd808f471aecd21450d6211f58d66330dbc1d85cb1889b6730913 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/coverage-capture.v1.json b6211a4dc4ffea14b6a08fe07a1cf99516ee5bd066daa4ade0b6c241d955560b .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/coverage-repeat.v1.json 52a871ca44112dc2d4e7540f7e9548079a05619f967b4c4d9445b999d7a42daf .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/coverage-run-1.tap d88556d5e8e437eba50505db6ac200e52910353ced62ad4eafbf6195147387a5 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/coverage-run-2.tap -1450b253c9058d5bc36886a4c5d6d6969c29dbc5e85efb06b506bb6c20a33fea .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/maker-report.md -77ae62452d6e02f2164a9c0471700aac13b3c3a1a200e0f45c4ca13f4daf6cec .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/maker-summary.v1.json +5bb1e3a287ef810f31803cb9ca5a048b7ccd3ad6bad1688794671fba539fbcde .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/maker-report.md +72f20018d9c622704a3640c8f933f7db49e51942bcf8591d6ba45efa58cb3e0f .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/maker-summary.v1.json 04010949acbef7a0427751be7c96aedcb4e6aa2e0d76c22c662e55693dae5082 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/run-coverage-capture-verifier.cmd -f01b0b254c054297aa2452177a0a137f9ecc430957daf986054a0087f4ff34c5 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/verification-matrix.v1.json -55aa4498ca2247ce4fbe1ed660966a907358b6d842af1bd9e88b3dba9bbb0a48 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/verify-coverage-capture.cjs +4d4180e0dcf75285f059892557b95b1d8794eb62b5d6043d95e2de62b6f5493c .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/verification-matrix.v1.json +9e5d0edacd150125d7ec657d379d0aa9471477a5bafa74b6dd6eff7c19b0ce5c .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/verify-coverage-capture.cjs diff --git a/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/maker-report.md b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/maker-report.md index 294d0373..d2581178 100644 --- a/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/maker-report.md +++ b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/maker-report.md @@ -1,8 +1,16 @@ -# DB-EMBEDDING-EVIDENCE-TRANSPORT R5 maker summary +# DB-EMBEDDING-EVIDENCE-TRANSPORT R5 maker summary (rejected historical snapshot) + +This packet was rejected and is superseded by R6. Every hash, count, and +coverage value below is scoped to the captured R5 blobs; none is a claim about +the final R6 verifier or test blob. + +The executable R5 `coverage-evidence` mode now fails closed because the historical +packet has no operating-system process-status envelope. Its strict +`materialization` mode remains available to the permanent portability suite. R5 closes checker finding ET-R4-001 without changing product code. The covered R4 verifier remains exact blob `75bec9c41eb5abc435f13d90848074f6608f7fce`. -The final test blob is `8e814737c8d5f4437aeb2a97dc52220e115cba0b`. +The rejected R5 captured test blob is `8e814737c8d5f4437aeb2a97dc52220e115cba0b`. Both are bound to LF-only Git-index and filesystem hashes by `coverage-capture.v1.json`. diff --git a/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/maker-summary.v1.json b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/maker-summary.v1.json index ae17cd0e..5dbbeb07 100644 --- a/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/maker-summary.v1.json +++ b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/maker-summary.v1.json @@ -2,7 +2,9 @@ "schema_version": 1, "slice": "DB-EMBEDDING-EVIDENCE-TRANSPORT-R5", "role": "maker", - "status": "READY_FOR_FRESH_CHECKER", + "status": "REJECTED_SUPERSEDED_BY_R6", + "snapshot_scope": "Historical R5 packet only; hashes, counts, and metrics do not describe the R6 final blobs.", + "runtime_policy": "coverage-evidence fails closed without a real process-status envelope; materialization remains strict and available", "base": "369951b61ee07cb0c405558e0f677cd1c9e90362", "r4_checker_commit_is_ancestor": false, "accepted_product_source": "38d6a4fb7ff5f5ae3b6c0066c0a1b806421137df", diff --git a/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/verification-matrix.v1.json b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/verification-matrix.v1.json index cfd22279..c8919227 100644 --- a/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/verification-matrix.v1.json +++ b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/verification-matrix.v1.json @@ -1,6 +1,8 @@ { "schema_version": 1, "slice": "DB-EMBEDDING-EVIDENCE-TRANSPORT-R5", + "status": "REJECTED_SUPERSEDED_BY_R6", + "snapshot_scope": "Historical R5 observations only; current/final claims live in the R6 packet.", "base": "369951b61ee07cb0c405558e0f677cd1c9e90362", "accepted_product_source": "38d6a4fb7ff5f5ae3b6c0066c0a1b806421137df", "rails": { diff --git a/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/verify-coverage-capture.cjs b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/verify-coverage-capture.cjs index b4eff200..dc4d647a 100644 --- a/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/verify-coverage-capture.cjs +++ b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/verify-coverage-capture.cjs @@ -268,7 +268,7 @@ function parseCoverageTranscript(bytes) { return Number(match[1]); }; return { - exit_code: 0, + exit_code: null, tests: count('tests'), passed: count('pass'), failed: count('fail'), @@ -288,6 +288,9 @@ function validateMetricObject(value, label, errors) { } function verifyCoverageEvidence(repoRoot, errors) { + errors.push( + 'R5 coverage evidence is rejected: canonical TAP is not bound to a real process-status envelope; use R6', + ); const coverage = readJson(repoRoot, COVERAGE_PATH); const coverageIsObject = validateExactKeys(coverage, COVERAGE_KEYS, 'coverage', errors); if (coverageIsObject) { diff --git a/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/.gitattributes b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/.gitattributes new file mode 100644 index 00000000..8196bad7 --- /dev/null +++ b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/.gitattributes @@ -0,0 +1,2 @@ +* -text +*.bin binary diff --git a/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/R6-SHA256SUMS.txt b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/R6-SHA256SUMS.txt new file mode 100644 index 00000000..45207d64 --- /dev/null +++ b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/R6-SHA256SUMS.txt @@ -0,0 +1,32 @@ +a55e59dd870659330add8f840272aa1e8829f8161779db3e9be9e6e014cf1ba4 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.cjs +d04b8bc050182f2806972c9d30aaa7d6349ef2f56f15b3ef21f7005459bb86cc .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.test.cjs +28b5286a025794bae2c24535fe31f35e23c8d940698ab9c561aa5a0c1fd178c8 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/coverage-capture.v2.json +2d7db2ce366c943572af2c04c9239669cc5226541967d404ee00a4d287cbfb86 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/coverage-repeat.v2.json +b4271dba88bbd81df2b2e8a541dd35d21cca2637cd53016ff30c15d305f4b384 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/coverage-run-1.envelope.v2.json +e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/coverage-run-1.stderr.bin +4fa07b262ea52975cdeb007bf3f7ce15787dc801731cf274f82af19007a6921b .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/coverage-run-1.stdout.bin +dcb71f918832c790b93f9f01564e247a69ff623c50a303aa1979f61ab12cfc18 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/coverage-run-1.tap +88c6eb1450b828cdad7657a6e69138cf52ed36984e267cafd5989734e4ca7419 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/coverage-run-2.envelope.v2.json +e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/coverage-run-2.stderr.bin +8c6d8ae30614624a979c2423ab7c36f9f6f6c029bc4f9e1a4c91fda035164d95 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/coverage-run-2.stdout.bin +7e56b583cb602dd1ac6f156edfd5f18380991126bbb5ef42995fd5ea2089df21 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/coverage-run-2.tap +621be8ab42138dc513f7a4669be76a5772ddac448dbfe2dbe2f236c29d822e7a .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/.gitattributes +80decf6c7f1d616f3f242e966b7dff9917cc615247401356b816111f32bcbffa .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/assemble-coverage-repeat.cjs +c2685b803ed2207046dc6718a1990861ff168c68d953f43737c5245666d093aa .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/build-checksums.cjs +d10b2cfa0c8230ea26db4c22058e7d06324c5a5282ffa6105c8f4ace7fc27c20 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/capture-coverage-run.cjs +c6298da38118de81dbc226dd17cb0b22ce6f8d5680573217e76adfd21439a236 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/prove-it.cjs +fa9569dbe6132d0db41382d7df52a5ff894bd5f2de0d29051de44f278e272fe3 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/red-reproduction.cjs +eae5cf24991cf3122a85488ac57e986f589002d071d407a6228a0e6dc235481c .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/verify-evidence.cjs +d49a5b28894fd4308cf463f1d99f6fd0d58b7d389b7a717dcb5da94561872a72 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/verify-evidence.test.cjs +26a18d00c33e0ffe7602c31ba493354f96104f13958b09955df03a96a1888dcd .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/verify-final-commit-replay.cjs +419e5852e7b3d56cab0275a3db6b78c0560d02b435b19568496902777319fea8 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/maker-report.md +234eacd815d4c8d2f8b803fca6b90b51848af0b7f4ffa66a44cd2f2dd4fa8625 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/maker-summary.v2.json +ac184ca611f6c17e4f0ddbb5180fae65276a6ac48c29c89c7cc55254dd3aafd9 .agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R6.red.json +774b6dc99e314d9061ce3f4b6d5f5c01e535c3403e9fa393dd2f142b0dd44177 .agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R6.tdd.json +caae7325e59534aadae7e1b647e0e86edde4674db224a9706ec12d55ce1687a8 .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/R5-SHA256SUMS.txt +5bb1e3a287ef810f31803cb9ca5a048b7ccd3ad6bad1688794671fba539fbcde .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/maker-report.md +72f20018d9c622704a3640c8f933f7db49e51942bcf8591d6ba45efa58cb3e0f .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/maker-summary.v1.json +4d4180e0dcf75285f059892557b95b1d8794eb62b5d6043d95e2de62b6f5493c .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/verification-matrix.v1.json +9e5d0edacd150125d7ec657d379d0aa9471477a5bafa74b6dd6eff7c19b0ce5c .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/verify-coverage-capture.cjs +652de15a329c23c65ce9e0962e97c7b2007c2c7d44ffda5c368704aa7d41c289 .agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R5.tdd.json +14e119a072a9e4122f18f62d8a2259b7dfa817234e218ed1b0e5ccb89bc4532d .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/checksum-layers.v1.json diff --git a/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/assemble-coverage-repeat.cjs b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/assemble-coverage-repeat.cjs new file mode 100644 index 00000000..38137b20 --- /dev/null +++ b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/assemble-coverage-repeat.cjs @@ -0,0 +1,115 @@ +#!/usr/bin/env node +'use strict'; + +const crypto = require('node:crypto'); +const fs = require('node:fs'); +const path = require('node:path'); +const { spawnSync } = require('node:child_process'); + +const SLICE = 'DB-EMBEDDING-EVIDENCE-TRANSPORT-R6'; +const DIRECTORY = + '.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6'; +const CAPTURE_PATH = `${DIRECTORY}/coverage-capture.v2.json`; +const OUTPUT_PATH = `${DIRECTORY}/coverage-repeat.v2.json`; +const SCOPES = Object.freeze(['aggregate', 'verifier', 'test_harness']); +const METRICS = Object.freeze(['line_percent', 'branch_percent', 'functions_percent']); + +function sha256(bytes) { + return crypto.createHash('sha256').update(bytes).digest('hex'); +} + +function repoPath(repoRoot, relativePath) { + return path.join(repoRoot, ...relativePath.split('/')); +} + +function dimensionContract(run) { + return SCOPES.flatMap((scope) => METRICS.map((metric) => { + const observed = run[scope][metric]; + const normative = scope === 'aggregate' && metric === 'line_percent'; + const floor = normative ? 80 : null; + const margin = normative ? Number((observed - floor).toFixed(2)) : null; + return { + scope, + metric, + observed_percent: observed, + normative, + floor_percent: floor, + margin_percent: margin, + status: normative ? (observed >= floor ? 'PASS' : 'FAIL') : 'OBSERVED_NON_NORMATIVE', + }; + })); +} + +function main() { + const rootResult = spawnSync('git', ['rev-parse', '--show-toplevel'], { + cwd: process.cwd(), + encoding: 'utf8', + windowsHide: true, + }); + if (rootResult.status !== 0) throw new Error(rootResult.stderr.trim()); + const repoRoot = path.resolve(rootResult.stdout.trim()); + const captureBytes = fs.readFileSync(repoPath(repoRoot, CAPTURE_PATH)); + const envelopes = [1, 2].map((run) => { + const envelopePath = `${DIRECTORY}/coverage-run-${run}.envelope.v2.json`; + const bytes = fs.readFileSync(repoPath(repoRoot, envelopePath)); + const envelope = JSON.parse(bytes); + if (envelope.run !== run || envelope.slice !== SLICE) { + throw new Error(`run ${run} envelope identity is invalid`); + } + return { run, path: envelopePath, sha256: sha256(bytes), envelope }; + }); + const runs = envelopes.map(({ run, envelope }) => ({ + run, + envelope_exit_code: envelope.process.exit_code, + ...envelope.derived_results, + })); + const metrics = (run) => JSON.stringify({ + aggregate: run.aggregate, + verifier: run.verifier, + test_harness: run.test_harness, + }); + if (metrics(runs[0]) !== metrics(runs[1])) { + throw new Error('coverage metrics differ across real runs'); + } + const repeat = { + schema_version: 2, + slice: SLICE, + capture_manifest: { path: CAPTURE_PATH, sha256: sha256(captureBytes) }, + envelopes: envelopes.map(({ envelope, ...entry }) => entry), + runs, + reproducible: true, + dimensions: dimensionContract(runs[0]), + threshold: { + percent: 80, + basis: 'aggregate line coverage', + observed_percent: runs[0].aggregate.line_percent, + status: runs[0].aggregate.line_percent >= 80 ? 'PASS' : 'FAIL', + }, + }; + if ( + repeat.threshold.status !== 'PASS' || + repeat.dimensions.some((entry) => entry.normative && entry.status !== 'PASS') || + runs.some((run) => + run.exit_code !== 0 || + run.envelope_exit_code !== 0 || + run.tests !== 24 || + run.passed !== 24 || + run.failed !== 0 + ) + ) { + throw new Error('coverage run outcome is not releasable'); + } + fs.writeFileSync( + repoPath(repoRoot, OUTPUT_PATH), + `${JSON.stringify(repeat, null, 2)}\n`, + 'utf8', + ); + process.stdout.write(`${JSON.stringify(repeat, null, 2)}\n`); +} + +try { + main(); +} catch (error) { + process.stderr.write(`${error.stack || error.message}\n`); + process.exit(1); +} diff --git a/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/build-checksums.cjs b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/build-checksums.cjs new file mode 100644 index 00000000..06817aa7 --- /dev/null +++ b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/build-checksums.cjs @@ -0,0 +1,229 @@ +#!/usr/bin/env node +'use strict'; + +const crypto = require('node:crypto'); +const fs = require('node:fs'); +const path = require('node:path'); +const { spawnSync } = require('node:child_process'); + +const TARGET_BASE = 'a538f6224ef31f612152470a4ecd45e78ff9d0f2'; +const BASE = '.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport'; +const R5 = `${BASE}-r5`; +const R6 = `${BASE}-r6`; +const R5_SUMS = `${R5}/R5-SHA256SUMS.txt`; +const MANIFEST = `${R6}/checksum-layers.v1.json`; +const R6_SUMS = `${R6}/R6-SHA256SUMS.txt`; +const SELF_EXCLUSION = Object.freeze([MANIFEST, R6_SUMS]); +const LOAD_BEARING_UNCHANGED = Object.freeze([`${BASE}/verify-manifest.cjs`]); +const LAYERS = Object.freeze([ + Object.freeze({ + name: 'covered-final-blobs', + paths: Object.freeze([ + `${BASE}/verify-manifest.cjs`, + `${BASE}/verify-manifest.test.cjs`, + ]), + }), + Object.freeze({ + name: 'real-process-capture', + paths: Object.freeze([ + `${R6}/coverage-capture.v2.json`, + `${R6}/coverage-repeat.v2.json`, + `${R6}/coverage-run-1.envelope.v2.json`, + `${R6}/coverage-run-1.stderr.bin`, + `${R6}/coverage-run-1.stdout.bin`, + `${R6}/coverage-run-1.tap`, + `${R6}/coverage-run-2.envelope.v2.json`, + `${R6}/coverage-run-2.stderr.bin`, + `${R6}/coverage-run-2.stdout.bin`, + `${R6}/coverage-run-2.tap`, + ]), + }), + Object.freeze({ + name: 'implementation-and-verification', + paths: Object.freeze([ + `${R6}/.gitattributes`, + `${R6}/assemble-coverage-repeat.cjs`, + `${R6}/build-checksums.cjs`, + `${R6}/capture-coverage-run.cjs`, + `${R6}/prove-it.cjs`, + `${R6}/red-reproduction.cjs`, + `${R6}/verify-evidence.cjs`, + `${R6}/verify-evidence.test.cjs`, + `${R6}/verify-final-commit-replay.cjs`, + ]), + }), + Object.freeze({ + name: 'r6-reports-and-tdd', + paths: Object.freeze([ + `${R6}/maker-report.md`, + `${R6}/maker-summary.v2.json`, + '.agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R6.red.json', + '.agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R6.tdd.json', + ]), + }), + Object.freeze({ + name: 'r5-truth-corrections', + paths: Object.freeze([ + R5_SUMS, + `${R5}/maker-report.md`, + `${R5}/maker-summary.v1.json`, + `${R5}/verification-matrix.v1.json`, + `${R5}/verify-coverage-capture.cjs`, + '.agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R5.tdd.json', + ]), + }), +]); + +function sha256(bytes) { + return crypto.createHash('sha256').update(bytes).digest('hex'); +} + +function repoPath(repoRoot, relativePath) { + return path.join(repoRoot, ...relativePath.split('/')); +} + +function git(args, cwd, encoding = null) { + const result = spawnSync('git', args, { cwd, encoding, windowsHide: true }); + if (result.status !== 0) { + const stderr = Buffer.isBuffer(result.stderr) + ? result.stderr.toString('utf8').trim() + : String(result.stderr || '').trim(); + throw new Error(`git ${args.join(' ')} failed (${result.status}): ${stderr}`); + } + return result.stdout; +} + +function indexEntry(repoRoot, relativePath, classification = null) { + const oid = String(git(['rev-parse', `:${relativePath}`], repoRoot, 'utf8')).trim(); + const bytes = Buffer.from(git(['cat-file', 'blob', oid], repoRoot)); + const entry = { path: relativePath, git_blob_oid: oid, sha256: sha256(bytes), byte_length: bytes.length }; + if (classification !== null) entry.classification = classification; + return entry; +} + +function changedPathsFromIndex(repoRoot) { + const indexTree = String(git(['write-tree'], repoRoot, 'utf8')).trim(); + const output = String( + git(['diff-tree', '--no-commit-id', '--name-only', '-r', TARGET_BASE, indexTree], repoRoot, 'utf8'), + ).trim(); + return output ? output.split(/\r?\n/).filter(Boolean).sort() : []; +} + +function refreshR5(repoRoot) { + const sumsPath = repoPath(repoRoot, R5_SUMS); + const lines = fs.readFileSync(sumsPath, 'utf8').split(/\r?\n/); + const output = lines.map((line) => { + const match = line.match(/^[0-9a-f]{64} (.+)$/); + if (!match) return line; + return `${indexEntry(repoRoot, match[1]).sha256} ${match[1]}`; + }); + fs.writeFileSync(sumsPath, output.join('\n'), 'utf8'); + process.stdout.write(`${JSON.stringify({ refreshed: R5_SUMS, entries: output.filter((line) => /^[0-9a-f]{64} /.test(line)).length })}\n`); +} + +function buildR6(repoRoot) { + const changedPaths = changedPathsFromIndex(repoRoot); + const changedSet = new Set(changedPaths); + const selfExcludedSet = new Set(SELF_EXCLUSION); + const loadBearingUnchangedSet = new Set(LOAD_BEARING_UNCHANGED); + const declaredPaths = LAYERS.flatMap((layer) => layer.paths); + if (new Set(declaredPaths).size !== declaredPaths.length) { + throw new Error('checksum layer paths contain duplicates'); + } + const declaredSet = new Set(declaredPaths); + const directlyListedChangedPaths = changedPaths.filter((entry) => !selfExcludedSet.has(entry)); + const missingChangedPaths = directlyListedChangedPaths.filter((entry) => !declaredSet.has(entry)); + if (missingChangedPaths.length > 0) { + throw new Error(`changed paths are not directly checksummed: ${missingChangedPaths.join(', ')}`); + } + const unexpectedUnchangedPaths = declaredPaths.filter( + (entry) => !changedSet.has(entry) && !loadBearingUnchangedSet.has(entry), + ); + if (unexpectedUnchangedPaths.length > 0) { + throw new Error(`unchanged checksum entries lack load-bearing classification: ${unexpectedUnchangedPaths.join(', ')}`); + } + const missingLoadBearingPaths = LOAD_BEARING_UNCHANGED.filter( + (entry) => !declaredSet.has(entry) || changedSet.has(entry), + ); + if (missingLoadBearingPaths.length > 0) { + throw new Error(`load-bearing unchanged classification is stale: ${missingLoadBearingPaths.join(', ')}`); + } + const invalidSelfExclusion = SELF_EXCLUSION.filter((entry) => !changedSet.has(entry)); + if (invalidSelfExclusion.length > 0) { + throw new Error(`self-excluded checksum paths are not changed: ${invalidSelfExclusion.join(', ')}`); + } + const layers = LAYERS.map((layer) => { + const sorted = [...layer.paths].sort(); + if (JSON.stringify(sorted) !== JSON.stringify(layer.paths)) { + throw new Error(`checksum layer paths are not lexicographically ordered: ${layer.name}`); + } + return { + name: layer.name, + entries: layer.paths.map((entry) => indexEntry( + repoRoot, + entry, + changedSet.has(entry) ? 'changed' : 'load-bearing-unchanged', + )), + }; + }); + const digestBytes = Buffer.from( + layers.flatMap((layer) => + layer.entries.map((entry) => + `${layer.name}\0${entry.classification}\0${entry.path}\0${entry.git_blob_oid}\0${entry.sha256}\n`, + ), + ).join(''), + 'utf8', + ); + const manifest = { + schema_version: 1, + slice: 'DB-EMBEDDING-EVIDENCE-TRANSPORT-R6', + algorithm: 'sha256', + representation: 'Git index blob bytes; R6 subtree is -text and byte-exact in every checkout', + ordering: 'layer declaration order; entries lexicographic by repository-relative path', + self_exclusion: [...SELF_EXCLUSION], + diff_coverage: { + target_base: TARGET_BASE, + comparison: 'target base to current Git index tree; path membership only', + changed_path_count: changedPaths.length, + directly_listed_changed_paths: directlyListedChangedPaths, + load_bearing_unchanged_paths: [...LOAD_BEARING_UNCHANGED], + }, + layer_count: layers.length, + entry_count: layers.reduce((count, layer) => count + layer.entries.length, 0), + path_digest_sha256: sha256(digestBytes), + layers, + }; + const manifestBytes = Buffer.from(`${JSON.stringify(manifest, null, 2)}\n`, 'utf8'); + fs.writeFileSync(repoPath(repoRoot, MANIFEST), manifestBytes); + const flattened = layers.flatMap((layer) => layer.entries); + const sums = [ + ...flattened.map((entry) => `${entry.sha256} ${entry.path}`), + `${sha256(manifestBytes)} ${MANIFEST}`, + ]; + fs.writeFileSync(repoPath(repoRoot, R6_SUMS), `${sums.join('\n')}\n`, 'utf8'); + process.stdout.write(`${JSON.stringify({ + manifest: MANIFEST, + manifest_sha256: sha256(manifestBytes), + sums: R6_SUMS, + layers: layers.length, + entries: flattened.length, + path_digest_sha256: manifest.path_digest_sha256, + }, null, 2)}\n`); +} + +function main() { + const mode = process.argv[2]; + if (!['--refresh-r5', '--build-r6'].includes(mode)) { + throw new Error('usage: build-checksums.cjs --refresh-r5|--build-r6'); + } + const repoRoot = path.resolve(String(git(['rev-parse', '--show-toplevel'], process.cwd(), 'utf8')).trim()); + if (mode === '--refresh-r5') refreshR5(repoRoot); + else buildR6(repoRoot); +} + +try { + main(); +} catch (error) { + process.stderr.write(`${error.stack || error.message}\n`); + process.exit(1); +} diff --git a/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/capture-coverage-run.cjs b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/capture-coverage-run.cjs new file mode 100644 index 00000000..adf25a38 --- /dev/null +++ b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/capture-coverage-run.cjs @@ -0,0 +1,408 @@ +#!/usr/bin/env node +'use strict'; + +const crypto = require('node:crypto'); +const fs = require('node:fs'); +const os = require('node:os'); +const path = require('node:path'); +const { spawnSync } = require('node:child_process'); + +const SLICE = 'DB-EMBEDDING-EVIDENCE-TRANSPORT-R6'; +const TARGET_BASE = 'a538f6224ef31f612152470a4ecd45e78ff9d0f2'; +const BASE_DIRECTORY = + '.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport'; +const EVIDENCE_DIRECTORY = `${BASE_DIRECTORY}-r6`; +const VERIFIER_PATH = `${BASE_DIRECTORY}/verify-manifest.cjs`; +const TEST_PATH = `${BASE_DIRECTORY}/verify-manifest.test.cjs`; +const WRAPPER_PATH = `${EVIDENCE_DIRECTORY}/capture-coverage-run.cjs`; +const CAPTURE_PATH = `${EVIDENCE_DIRECTORY}/coverage-capture.v2.json`; +const COMMAND_ARGS = Object.freeze([ + '--test', + '--test-concurrency=1', + '--experimental-test-coverage', + TEST_PATH, +]); + +function sha256(bytes) { + return crypto.createHash('sha256').update(bytes).digest('hex'); +} + +function runGit(args, cwd, encoding = null) { + const result = spawnSync('git', args, { + cwd, + encoding, + maxBuffer: 64 * 1024 * 1024, + windowsHide: true, + }); + if (result.error) throw result.error; + if (result.status !== 0) { + const stderr = Buffer.isBuffer(result.stderr) + ? result.stderr.toString('utf8').trim() + : String(result.stderr || '').trim(); + throw new Error(`git ${args.join(' ')} failed (${result.status}): ${stderr}`); + } + return result.stdout; +} + +function relative(repoRoot, relativePath) { + return path.join(repoRoot, ...relativePath.split('/')); +} + +function analyzeLineEndings(bytes) { + let crlfPairs = 0; + let loneLf = 0; + let bareCarriageReturns = 0; + for (let index = 0; index < bytes.length; index += 1) { + if (bytes[index] === 13) { + if (bytes[index + 1] === 10) { + crlfPairs += 1; + index += 1; + } else { + bareCarriageReturns += 1; + } + } else if (bytes[index] === 10) { + loneLf += 1; + } + } + return { crlf_pairs: crlfPairs, lone_lf: loneLf, bare_carriage_returns: bareCarriageReturns }; +} + +function replaceCrlf(bytes) { + const output = []; + for (let index = 0; index < bytes.length; index += 1) { + if (bytes[index] === 13 && bytes[index + 1] === 10) { + output.push(10); + index += 1; + } else { + output.push(bytes[index]); + } + } + return Buffer.from(output); +} + +function indexFact(repoRoot, role, relativePath) { + const blobOid = String(runGit(['rev-parse', `:${relativePath}`], repoRoot, 'utf8')).trim(); + const bytes = Buffer.from(runGit(['cat-file', 'blob', blobOid], repoRoot)); + const endings = analyzeLineEndings(bytes); + if ( + endings.crlf_pairs !== 0 || + endings.bare_carriage_returns !== 0 || + endings.lone_lf === 0 + ) { + throw new Error(`Git index blob must be LF-only: ${relativePath}`); + } + return { + role, + path: relativePath, + git_blob_oid: blobOid, + git_blob_sha256: sha256(bytes), + byte_length: bytes.length, + ...endings, + bytes, + }; +} + +function checkoutObservation(repoRoot, fact) { + const bytes = fs.readFileSync(relative(repoRoot, fact.path)); + const endings = analyzeLineEndings(bytes); + const normalized = replaceCrlf(bytes); + let classification = 'invalid'; + if (bytes.equals(fact.bytes)) classification = 'lf-exact'; + else if (endings.bare_carriage_returns === 0 && normalized.equals(fact.bytes)) { + classification = endings.crlf_pairs > 0 && endings.lone_lf > 0 + ? 'mixed-lf-crlf-equivalent' + : 'crlf-equivalent'; + } + if (classification === 'invalid') { + throw new Error(`checkout bytes are neither exact LF nor pure CRLF-equivalent: ${fact.path}`); + } + return { + role: fact.role, + path: fact.path, + classification, + filesystem_sha256: sha256(bytes), + byte_length: bytes.length, + ...endings, + }; +} + +function canonicalizeTranscript(stdoutBytes) { + const rawEndings = analyzeLineEndings(stdoutBytes); + if (rawEndings.bare_carriage_returns !== 0) { + throw new Error('raw stdout contains a bare carriage return'); + } + const lfBytes = replaceCrlf(stdoutBytes); + const text = lfBytes.toString('utf8'); + if (!Buffer.from(text, 'utf8').equals(lfBytes)) { + throw new Error('raw stdout is not valid round-trippable UTF-8'); + } + let trimmedTrailingBytes = 0; + const lines = text.split('\n').map((line) => { + if (!line.includes('|')) return line; + const trimmed = line.replace(/[ \t]+$/, ''); + trimmedTrailingBytes += Buffer.byteLength(line) - Buffer.byteLength(trimmed); + return trimmed; + }); + const canonical = Buffer.from(lines.join('\n'), 'utf8'); + return { + bytes: canonical, + stats: { + raw_crlf_pairs_replaced: rawEndings.crlf_pairs, + table_trailing_padding_bytes_removed: trimmedTrailingBytes, + semantic_content_changes: 0, + }, + }; +} + +function parseMetricLine(text, filename) { + const escaped = filename.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); + const match = text.match( + new RegExp(`${escaped}\\s+\\|\\s+([0-9.]+)\\s+\\|\\s+([0-9.]+)\\s+\\|\\s+([0-9.]+)\\s+\\|`), + ); + if (!match) throw new Error(`canonical transcript is missing metric row: ${filename}`); + return { + line_percent: Number(match[1]), + branch_percent: Number(match[2]), + functions_percent: Number(match[3]), + }; +} + +function parseTranscript(bytes) { + const text = bytes.toString('utf8'); + const count = (label) => { + const match = text.match(new RegExp(`(?:ℹ|#) ${label} ([0-9]+)`)); + if (!match) throw new Error(`canonical transcript is missing ${label} count`); + return Number(match[1]); + }; + return { + tests: count('tests'), + passed: count('pass'), + failed: count('fail'), + aggregate: parseMetricLine(text, 'all files'), + verifier: parseMetricLine(text, 'verify-manifest.cjs'), + test_harness: parseMetricLine(text, 'verify-manifest.test.cjs'), + }; +} + +function stableFact(fact) { + const { bytes, ...serializable } = fact; + return serializable; +} + +function writeJson(filePath, value) { + fs.mkdirSync(path.dirname(filePath), { recursive: true }); + fs.writeFileSync(filePath, `${JSON.stringify(value, null, 2)}\n`, 'utf8'); +} + +function withCanonicalExecutionClone(repoRoot, indexTree, execute) { + const tempBase = path.resolve(os.tmpdir()); + const cloneRoot = fs.mkdtempSync(path.join(tempBase, 'engram-r6c-')); + try { + runGit(['clone', '--shared', '--no-checkout', '--quiet', repoRoot, cloneRoot], repoRoot); + runGit(['config', 'core.longpaths', 'true'], cloneRoot); + runGit(['config', 'core.autocrlf', 'false'], cloneRoot); + runGit(['read-tree', indexTree], cloneRoot); + runGit(['checkout-index', '--all', '--force'], cloneRoot); + return execute(cloneRoot); + } finally { + const resolvedClone = path.resolve(cloneRoot); + if (!resolvedClone.startsWith(`${tempBase}${path.sep}`)) { + throw new Error(`refusing to clean unexpected canonical clone path: ${resolvedClone}`); + } + fs.rmSync(resolvedClone, { recursive: true, force: true }); + } +} + +function main() { + const runArgument = process.argv.find((argument) => argument.startsWith('--run=')); + const run = Number(runArgument?.slice('--run='.length)); + if (run !== 1 && run !== 2) throw new Error('--run must be 1 or 2'); + + const repoRoot = path.resolve( + String(runGit(['rev-parse', '--show-toplevel'], process.cwd(), 'utf8')).trim(), + ); + const head = String(runGit(['rev-parse', 'HEAD'], repoRoot, 'utf8')).trim(); + if (head !== TARGET_BASE) { + throw new Error(`capture generation must start at exact rejected target ${TARGET_BASE}`); + } + const facts = [ + indexFact(repoRoot, 'verifier', VERIFIER_PATH), + indexFact(repoRoot, 'test_harness', TEST_PATH), + indexFact(repoRoot, 'capture_wrapper', WRAPPER_PATH), + ]; + const observations = facts.slice(0, 2).map((fact) => checkoutObservation(repoRoot, fact)); + const coreAutocrlfResult = spawnSync('git', ['config', '--get', 'core.autocrlf'], { + cwd: repoRoot, + encoding: 'utf8', + windowsHide: true, + }); + if (![0, 1].includes(coreAutocrlfResult.status)) throw new Error('cannot read core.autocrlf'); + const coreAutocrlf = coreAutocrlfResult.status === 0 + ? coreAutocrlfResult.stdout.trim() + : null; + const capture = { + schema_version: 2, + slice: SLICE, + target_base: TARGET_BASE, + source_head: head, + execution_index_tree: String(runGit(['write-tree'], repoRoot, 'utf8')).trim(), + node_version: process.version, + command: { + executable: process.execPath, + executable_basename: path.basename(process.execPath), + argv: [...COMMAND_ARGS], + cwd: '.', + }, + representation: { + checkout_observation: { + core_autocrlf: coreAutocrlf, + files: observations, + }, + canonical_execution: { + materialization: 'temporary independent Git clone materialized from the exact index tree', + repository_topology: 'git-directory', + core_autocrlf: 'false', + line_endings: 'lf-only', + files: facts.slice(0, 2).map(stableFact), + }, + }, + sources: facts.map(stableFact), + }; + const capturePath = relative(repoRoot, CAPTURE_PATH); + if (run === 1) { + writeJson(capturePath, capture); + } else { + const existing = fs.readFileSync(capturePath); + const expected = Buffer.from(`${JSON.stringify(capture, null, 2)}\n`, 'utf8'); + if (!existing.equals(expected)) { + throw new Error('run 2 source/capture state differs from run 1'); + } + } + + let child; + let startedAt = null; + let finishedAt = null; + let executionCwd = null; + withCanonicalExecutionClone(repoRoot, capture.execution_index_tree, (cloneRoot) => { + for (const fact of facts.slice(0, 2)) { + const absolutePath = relative(cloneRoot, fact.path); + if (!fs.readFileSync(absolutePath).equals(fact.bytes)) { + throw new Error(`canonical clone did not materialize exact Git-index LF bytes: ${fact.path}`); + } + } + const env = { ...process.env }; + delete env.NODE_V8_COVERAGE; + executionCwd = cloneRoot; + startedAt = new Date(); + child = spawnSync(process.execPath, COMMAND_ARGS, { + cwd: cloneRoot, + encoding: null, + env, + maxBuffer: 64 * 1024 * 1024, + windowsHide: true, + }); + finishedAt = new Date(); + }); + if (!child || !startedAt || !finishedAt || !executionCwd) { + throw new Error('coverage child process did not produce a timed result'); + } + + const stdout = Buffer.from(child.stdout || []); + const stderr = Buffer.from(child.stderr || []); + const prefix = `${EVIDENCE_DIRECTORY}/coverage-run-${run}`; + const stdoutPath = `${prefix}.stdout.bin`; + const stderrPath = `${prefix}.stderr.bin`; + const transcriptPath = `${prefix}.tap`; + fs.writeFileSync(relative(repoRoot, stdoutPath), stdout); + fs.writeFileSync(relative(repoRoot, stderrPath), stderr); + let transcript = Buffer.alloc(0); + let normalization = null; + let parsed = null; + let parseError = null; + try { + const canonical = canonicalizeTranscript(stdout); + transcript = canonical.bytes; + normalization = { + name: 'crlf-to-lf plus coverage-table trailing-padding trim', + ...canonical.stats, + }; + parsed = parseTranscript(transcript); + } catch (error) { + parseError = String(error.message || error); + } + fs.writeFileSync(relative(repoRoot, transcriptPath), transcript); + + const restored = facts.slice(0, 2).map((fact) => { + const bytes = fs.readFileSync(relative(repoRoot, fact.path)); + const before = observations.find((entry) => entry.path === fact.path); + return { + path: fact.path, + before_sha256: before.filesystem_sha256, + after_sha256: sha256(bytes), + restored: before.filesystem_sha256 === sha256(bytes), + }; + }); + if (restored.some((entry) => !entry.restored)) { + throw new Error('canonical execution overlay did not restore the checkout exactly'); + } + + const envelope = { + schema_version: 2, + slice: SLICE, + run, + capture_manifest: { + path: CAPTURE_PATH, + sha256: sha256(fs.readFileSync(capturePath)), + }, + source: { + head_commit: head, + index_tree: capture.execution_index_tree, + files: facts.map(stableFact), + }, + process: { + executable: process.execPath, + argv: [...COMMAND_ARGS], + cwd: executionCwd, + started_at_utc: startedAt.toISOString(), + finished_at_utc: finishedAt.toISOString(), + duration_ms: finishedAt.getTime() - startedAt.getTime(), + exit_code: child.status, + signal: child.signal, + spawn_error: child.error ? String(child.error.message || child.error) : null, + }, + artifacts: { + stdout: { path: stdoutPath, sha256: sha256(stdout), byte_length: stdout.length }, + stderr: { path: stderrPath, sha256: sha256(stderr), byte_length: stderr.length }, + transcript: { + path: transcriptPath, + sha256: sha256(transcript), + byte_length: transcript.length, + }, + }, + normalization, + parse_error: parseError, + derived_results: parsed ? { exit_code: child.status, ...parsed } : null, + restoration: restored, + }; + const envelopePath = `${prefix}.envelope.v2.json`; + writeJson(relative(repoRoot, envelopePath), envelope); + process.stdout.write(`${JSON.stringify({ envelope_path: envelopePath, ...envelope }, null, 2)}\n`); + if ( + child.status !== 0 || + child.signal !== null || + child.error || + parseError !== null || + parsed.tests !== 24 || + parsed.passed !== 24 || + parsed.failed !== 0 + ) { + process.exit(1); + } +} + +try { + main(); +} catch (error) { + process.stderr.write(`${error.stack || error.message}\n`); + process.exit(1); +} diff --git a/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/checksum-layers.v1.json b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/checksum-layers.v1.json new file mode 100644 index 00000000..d8979848 --- /dev/null +++ b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/checksum-layers.v1.json @@ -0,0 +1,298 @@ +{ + "schema_version": 1, + "slice": "DB-EMBEDDING-EVIDENCE-TRANSPORT-R6", + "algorithm": "sha256", + "representation": "Git index blob bytes; R6 subtree is -text and byte-exact in every checkout", + "ordering": "layer declaration order; entries lexicographic by repository-relative path", + "self_exclusion": [ + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/checksum-layers.v1.json", + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/R6-SHA256SUMS.txt" + ], + "diff_coverage": { + "target_base": "a538f6224ef31f612152470a4ecd45e78ff9d0f2", + "comparison": "target base to current Git index tree; path membership only", + "changed_path_count": 32, + "directly_listed_changed_paths": [ + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/R5-SHA256SUMS.txt", + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/maker-report.md", + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/maker-summary.v1.json", + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/verification-matrix.v1.json", + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/verify-coverage-capture.cjs", + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/.gitattributes", + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/assemble-coverage-repeat.cjs", + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/build-checksums.cjs", + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/capture-coverage-run.cjs", + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/coverage-capture.v2.json", + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/coverage-repeat.v2.json", + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/coverage-run-1.envelope.v2.json", + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/coverage-run-1.stderr.bin", + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/coverage-run-1.stdout.bin", + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/coverage-run-1.tap", + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/coverage-run-2.envelope.v2.json", + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/coverage-run-2.stderr.bin", + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/coverage-run-2.stdout.bin", + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/coverage-run-2.tap", + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/maker-report.md", + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/maker-summary.v2.json", + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/prove-it.cjs", + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/red-reproduction.cjs", + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/verify-evidence.cjs", + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/verify-evidence.test.cjs", + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/verify-final-commit-replay.cjs", + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.test.cjs", + ".agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R5.tdd.json", + ".agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R6.red.json", + ".agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R6.tdd.json" + ], + "load_bearing_unchanged_paths": [ + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.cjs" + ] + }, + "layer_count": 5, + "entry_count": 31, + "path_digest_sha256": "5560d68cff17499f55d71a9abfedaa4d1b10821c3b33faa294f1cad72cd7b4d4", + "layers": [ + { + "name": "covered-final-blobs", + "entries": [ + { + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.cjs", + "git_blob_oid": "75bec9c41eb5abc435f13d90848074f6608f7fce", + "sha256": "a55e59dd870659330add8f840272aa1e8829f8161779db3e9be9e6e014cf1ba4", + "byte_length": 25465, + "classification": "load-bearing-unchanged" + }, + { + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.test.cjs", + "git_blob_oid": "caca5ec75f47c03698ac270b549a432b0de04cfe", + "sha256": "d04b8bc050182f2806972c9d30aaa7d6349ef2f56f15b3ef21f7005459bb86cc", + "byte_length": 24229, + "classification": "changed" + } + ] + }, + { + "name": "real-process-capture", + "entries": [ + { + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/coverage-capture.v2.json", + "git_blob_oid": "98f78042e6b81a6c6d86f26ed3ba6cc06c437f86", + "sha256": "28b5286a025794bae2c24535fe31f35e23c8d940698ab9c561aa5a0c1fd178c8", + "byte_length": 4130, + "classification": "changed" + }, + { + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/coverage-repeat.v2.json", + "git_blob_oid": "d1297bbbd8b627ae5e44e051c194962781243cc0", + "sha256": "2d7db2ce366c943572af2c04c9239669cc5226541967d404ee00a4d287cbfb86", + "byte_length": 4150, + "classification": "changed" + }, + { + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/coverage-run-1.envelope.v2.json", + "git_blob_oid": "8768f5f14a6ecb9a838a7e1bff6778ff75286d10", + "sha256": "b4271dba88bbd81df2b2e8a541dd35d21cca2637cd53016ff30c15d305f4b384", + "byte_length": 4543, + "classification": "changed" + }, + { + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/coverage-run-1.stderr.bin", + "git_blob_oid": "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391", + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "byte_length": 0, + "classification": "changed" + }, + { + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/coverage-run-1.stdout.bin", + "git_blob_oid": "fab43bb9858a0a15004a16d9e9cc6bf9ec9362c4", + "sha256": "4fa07b262ea52975cdeb007bf3f7ce15787dc801731cf274f82af19007a6921b", + "byte_length": 4422, + "classification": "changed" + }, + { + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/coverage-run-1.tap", + "git_blob_oid": "13ab109fa12c9118d0b1c788b4bbe349c8cd5304", + "sha256": "dcb71f918832c790b93f9f01564e247a69ff623c50a303aa1979f61ab12cfc18", + "byte_length": 4416, + "classification": "changed" + }, + { + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/coverage-run-2.envelope.v2.json", + "git_blob_oid": "3e194e5907caa1d63016b5cd562c9ec090f67e3c", + "sha256": "88c6eb1450b828cdad7657a6e69138cf52ed36984e267cafd5989734e4ca7419", + "byte_length": 4543, + "classification": "changed" + }, + { + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/coverage-run-2.stderr.bin", + "git_blob_oid": "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391", + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "byte_length": 0, + "classification": "changed" + }, + { + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/coverage-run-2.stdout.bin", + "git_blob_oid": "a6085ab23575c510ab17fa6e704cca9e03482463", + "sha256": "8c6d8ae30614624a979c2423ab7c36f9f6f6c029bc4f9e1a4c91fda035164d95", + "byte_length": 4420, + "classification": "changed" + }, + { + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/coverage-run-2.tap", + "git_blob_oid": "746966c6b32fa2a1893bdaed056810f59a2c8530", + "sha256": "7e56b583cb602dd1ac6f156edfd5f18380991126bbb5ef42995fd5ea2089df21", + "byte_length": 4414, + "classification": "changed" + } + ] + }, + { + "name": "implementation-and-verification", + "entries": [ + { + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/.gitattributes", + "git_blob_oid": "8196bad75728e1a10d66483da9f8ec5d6b369da8", + "sha256": "621be8ab42138dc513f7a4669be76a5772ddac448dbfe2dbe2f236c29d822e7a", + "byte_length": 21, + "classification": "changed" + }, + { + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/assemble-coverage-repeat.cjs", + "git_blob_oid": "38137b203b56bd367f7dacc54decc1518ac512db", + "sha256": "80decf6c7f1d616f3f242e966b7dff9917cc615247401356b816111f32bcbffa", + "byte_length": 3823, + "classification": "changed" + }, + { + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/build-checksums.cjs", + "git_blob_oid": "06817aa7135639254536f558bf8059988e44c6db", + "sha256": "c2685b803ed2207046dc6718a1990861ff168c68d953f43737c5245666d093aa", + "byte_length": 8908, + "classification": "changed" + }, + { + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/capture-coverage-run.cjs", + "git_blob_oid": "adf25a38e0e969d33a12fdd2721907c1fee8bd31", + "sha256": "d10b2cfa0c8230ea26db4c22058e7d06324c5a5282ffa6105c8f4ace7fc27c20", + "byte_length": 13604, + "classification": "changed" + }, + { + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/prove-it.cjs", + "git_blob_oid": "1fac7bf301507b6f48f6b60c7c1f06b2487805db", + "sha256": "c6298da38118de81dbc226dd17cb0b22ce6f8d5680573217e76adfd21439a236", + "byte_length": 5686, + "classification": "changed" + }, + { + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/red-reproduction.cjs", + "git_blob_oid": "ee39e339f882a4cf76593caffb93eb2f079345fb", + "sha256": "fa9569dbe6132d0db41382d7df52a5ff894bd5f2de0d29051de44f278e272fe3", + "byte_length": 8208, + "classification": "changed" + }, + { + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/verify-evidence.cjs", + "git_blob_oid": "f81ca4b1616a58049327b52adee5b9e9ab844eac", + "sha256": "eae5cf24991cf3122a85488ac57e986f589002d071d407a6228a0e6dc235481c", + "byte_length": 39021, + "classification": "changed" + }, + { + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/verify-evidence.test.cjs", + "git_blob_oid": "39ccc3463292a11975bda90271b3b2f169472b64", + "sha256": "d49a5b28894fd4308cf463f1d99f6fd0d58b7d389b7a717dcb5da94561872a72", + "byte_length": 11110, + "classification": "changed" + }, + { + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/verify-final-commit-replay.cjs", + "git_blob_oid": "dc5d3eb0e2fe0747ed3555fd12f41e3962201977", + "sha256": "26a18d00c33e0ffe7602c31ba493354f96104f13958b09955df03a96a1888dcd", + "byte_length": 13561, + "classification": "changed" + } + ] + }, + { + "name": "r6-reports-and-tdd", + "entries": [ + { + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/maker-report.md", + "git_blob_oid": "4edad29c0926bd9576bb934c1b670c824441dbe9", + "sha256": "419e5852e7b3d56cab0275a3db6b78c0560d02b435b19568496902777319fea8", + "byte_length": 6333, + "classification": "changed" + }, + { + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/maker-summary.v2.json", + "git_blob_oid": "47be10b0daaf8b6079a85bae2bf6b350d98b8ca3", + "sha256": "234eacd815d4c8d2f8b803fca6b90b51848af0b7f4ffa66a44cd2f2dd4fa8625", + "byte_length": 3141, + "classification": "changed" + }, + { + "path": ".agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R6.red.json", + "git_blob_oid": "bacd1088d7971bda49d299bf5a38339178c820a3", + "sha256": "ac184ca611f6c17e4f0ddbb5180fae65276a6ac48c29c89c7cc55254dd3aafd9", + "byte_length": 4129, + "classification": "changed" + }, + { + "path": ".agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R6.tdd.json", + "git_blob_oid": "0428bf0bd3fea999c95d59d931d5ed86ed301f9c", + "sha256": "774b6dc99e314d9061ce3f4b6d5f5c01e535c3403e9fa393dd2f142b0dd44177", + "byte_length": 7079, + "classification": "changed" + } + ] + }, + { + "name": "r5-truth-corrections", + "entries": [ + { + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/R5-SHA256SUMS.txt", + "git_blob_oid": "2b97e774a00cca388bf9e9b549826bcf276427b5", + "sha256": "caae7325e59534aadae7e1b647e0e86edde4674db224a9706ec12d55ce1687a8", + "byte_length": 5841, + "classification": "changed" + }, + { + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/maker-report.md", + "git_blob_oid": "d2581178d3c9b19270da661a82151bbe9883d41e", + "sha256": "5bb1e3a287ef810f31803cb9ca5a048b7ccd3ad6bad1688794671fba539fbcde", + "byte_length": 4673, + "classification": "changed" + }, + { + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/maker-summary.v1.json", + "git_blob_oid": "5dbbeb0747eb0e1facf03491bebc2d6824917fd7", + "sha256": "72f20018d9c622704a3640c8f933f7db49e51942bcf8591d6ba45efa58cb3e0f", + "byte_length": 5337, + "classification": "changed" + }, + { + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/verification-matrix.v1.json", + "git_blob_oid": "c8919227efd0b245d4d45983591d8aeafaae71e6", + "sha256": "4d4180e0dcf75285f059892557b95b1d8794eb62b5d6043d95e2de62b6f5493c", + "byte_length": 1359, + "classification": "changed" + }, + { + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/verify-coverage-capture.cjs", + "git_blob_oid": "dc4d647ad6fd13c0fefb3b0ff822deee352cd8d1", + "sha256": "9e5d0edacd150125d7ec657d379d0aa9471477a5bafa74b6dd6eff7c19b0ce5c", + "byte_length": 15440, + "classification": "changed" + }, + { + "path": ".agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R5.tdd.json", + "git_blob_oid": "06c850fb59746196135adf23ef0dd68100ebe9a5", + "sha256": "652de15a329c23c65ce9e0962e97c7b2007c2c7d44ffda5c368704aa7d41c289", + "byte_length": 4197, + "classification": "changed" + } + ] + } + ] +} diff --git a/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/coverage-capture.v2.json b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/coverage-capture.v2.json new file mode 100644 index 00000000..98f78042 --- /dev/null +++ b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/coverage-capture.v2.json @@ -0,0 +1,106 @@ +{ + "schema_version": 2, + "slice": "DB-EMBEDDING-EVIDENCE-TRANSPORT-R6", + "target_base": "a538f6224ef31f612152470a4ecd45e78ff9d0f2", + "source_head": "a538f6224ef31f612152470a4ecd45e78ff9d0f2", + "execution_index_tree": "8564887bc0df75b74b3e22b112f20a86c034fdc6", + "node_version": "v24.2.0", + "command": { + "executable": "C:\\nvm4w\\nodejs\\node.exe", + "executable_basename": "node.exe", + "argv": [ + "--test", + "--test-concurrency=1", + "--experimental-test-coverage", + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.test.cjs" + ], + "cwd": "." + }, + "representation": { + "checkout_observation": { + "core_autocrlf": "false", + "files": [ + { + "role": "verifier", + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.cjs", + "classification": "lf-exact", + "filesystem_sha256": "a55e59dd870659330add8f840272aa1e8829f8161779db3e9be9e6e014cf1ba4", + "byte_length": 25465, + "crlf_pairs": 0, + "lone_lf": 718, + "bare_carriage_returns": 0 + }, + { + "role": "test_harness", + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.test.cjs", + "classification": "lf-exact", + "filesystem_sha256": "d04b8bc050182f2806972c9d30aaa7d6349ef2f56f15b3ef21f7005459bb86cc", + "byte_length": 24229, + "crlf_pairs": 0, + "lone_lf": 726, + "bare_carriage_returns": 0 + } + ] + }, + "canonical_execution": { + "materialization": "temporary independent Git clone materialized from the exact index tree", + "repository_topology": "git-directory", + "core_autocrlf": "false", + "line_endings": "lf-only", + "files": [ + { + "role": "verifier", + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.cjs", + "git_blob_oid": "75bec9c41eb5abc435f13d90848074f6608f7fce", + "git_blob_sha256": "a55e59dd870659330add8f840272aa1e8829f8161779db3e9be9e6e014cf1ba4", + "byte_length": 25465, + "crlf_pairs": 0, + "lone_lf": 718, + "bare_carriage_returns": 0 + }, + { + "role": "test_harness", + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.test.cjs", + "git_blob_oid": "caca5ec75f47c03698ac270b549a432b0de04cfe", + "git_blob_sha256": "d04b8bc050182f2806972c9d30aaa7d6349ef2f56f15b3ef21f7005459bb86cc", + "byte_length": 24229, + "crlf_pairs": 0, + "lone_lf": 726, + "bare_carriage_returns": 0 + } + ] + } + }, + "sources": [ + { + "role": "verifier", + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.cjs", + "git_blob_oid": "75bec9c41eb5abc435f13d90848074f6608f7fce", + "git_blob_sha256": "a55e59dd870659330add8f840272aa1e8829f8161779db3e9be9e6e014cf1ba4", + "byte_length": 25465, + "crlf_pairs": 0, + "lone_lf": 718, + "bare_carriage_returns": 0 + }, + { + "role": "test_harness", + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.test.cjs", + "git_blob_oid": "caca5ec75f47c03698ac270b549a432b0de04cfe", + "git_blob_sha256": "d04b8bc050182f2806972c9d30aaa7d6349ef2f56f15b3ef21f7005459bb86cc", + "byte_length": 24229, + "crlf_pairs": 0, + "lone_lf": 726, + "bare_carriage_returns": 0 + }, + { + "role": "capture_wrapper", + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/capture-coverage-run.cjs", + "git_blob_oid": "adf25a38e0e969d33a12fdd2721907c1fee8bd31", + "git_blob_sha256": "d10b2cfa0c8230ea26db4c22058e7d06324c5a5282ffa6105c8f4ace7fc27c20", + "byte_length": 13604, + "crlf_pairs": 0, + "lone_lf": 408, + "bare_carriage_returns": 0 + } + ] +} diff --git a/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/coverage-repeat.v2.json b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/coverage-repeat.v2.json new file mode 100644 index 00000000..d1297bbb --- /dev/null +++ b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/coverage-repeat.v2.json @@ -0,0 +1,158 @@ +{ + "schema_version": 2, + "slice": "DB-EMBEDDING-EVIDENCE-TRANSPORT-R6", + "capture_manifest": { + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/coverage-capture.v2.json", + "sha256": "28b5286a025794bae2c24535fe31f35e23c8d940698ab9c561aa5a0c1fd178c8" + }, + "envelopes": [ + { + "run": 1, + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/coverage-run-1.envelope.v2.json", + "sha256": "b4271dba88bbd81df2b2e8a541dd35d21cca2637cd53016ff30c15d305f4b384" + }, + { + "run": 2, + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/coverage-run-2.envelope.v2.json", + "sha256": "88c6eb1450b828cdad7657a6e69138cf52ed36984e267cafd5989734e4ca7419" + } + ], + "runs": [ + { + "run": 1, + "envelope_exit_code": 0, + "exit_code": 0, + "tests": 24, + "passed": 24, + "failed": 0, + "aggregate": { + "line_percent": 89.96, + "branch_percent": 75.86, + "functions_percent": 95.8 + }, + "verifier": { + "line_percent": 80.08, + "branch_percent": 55.91, + "functions_percent": 81.82 + }, + "test_harness": { + "line_percent": 99.72, + "branch_percent": 94.78, + "functions_percent": 100 + } + }, + { + "run": 2, + "envelope_exit_code": 0, + "exit_code": 0, + "tests": 24, + "passed": 24, + "failed": 0, + "aggregate": { + "line_percent": 89.96, + "branch_percent": 75.86, + "functions_percent": 95.8 + }, + "verifier": { + "line_percent": 80.08, + "branch_percent": 55.91, + "functions_percent": 81.82 + }, + "test_harness": { + "line_percent": 99.72, + "branch_percent": 94.78, + "functions_percent": 100 + } + } + ], + "reproducible": true, + "dimensions": [ + { + "scope": "aggregate", + "metric": "line_percent", + "observed_percent": 89.96, + "normative": true, + "floor_percent": 80, + "margin_percent": 9.96, + "status": "PASS" + }, + { + "scope": "aggregate", + "metric": "branch_percent", + "observed_percent": 75.86, + "normative": false, + "floor_percent": null, + "margin_percent": null, + "status": "OBSERVED_NON_NORMATIVE" + }, + { + "scope": "aggregate", + "metric": "functions_percent", + "observed_percent": 95.8, + "normative": false, + "floor_percent": null, + "margin_percent": null, + "status": "OBSERVED_NON_NORMATIVE" + }, + { + "scope": "verifier", + "metric": "line_percent", + "observed_percent": 80.08, + "normative": false, + "floor_percent": null, + "margin_percent": null, + "status": "OBSERVED_NON_NORMATIVE" + }, + { + "scope": "verifier", + "metric": "branch_percent", + "observed_percent": 55.91, + "normative": false, + "floor_percent": null, + "margin_percent": null, + "status": "OBSERVED_NON_NORMATIVE" + }, + { + "scope": "verifier", + "metric": "functions_percent", + "observed_percent": 81.82, + "normative": false, + "floor_percent": null, + "margin_percent": null, + "status": "OBSERVED_NON_NORMATIVE" + }, + { + "scope": "test_harness", + "metric": "line_percent", + "observed_percent": 99.72, + "normative": false, + "floor_percent": null, + "margin_percent": null, + "status": "OBSERVED_NON_NORMATIVE" + }, + { + "scope": "test_harness", + "metric": "branch_percent", + "observed_percent": 94.78, + "normative": false, + "floor_percent": null, + "margin_percent": null, + "status": "OBSERVED_NON_NORMATIVE" + }, + { + "scope": "test_harness", + "metric": "functions_percent", + "observed_percent": 100, + "normative": false, + "floor_percent": null, + "margin_percent": null, + "status": "OBSERVED_NON_NORMATIVE" + } + ], + "threshold": { + "percent": 80, + "basis": "aggregate line coverage", + "observed_percent": 89.96, + "status": "PASS" + } +} diff --git a/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/coverage-run-1.envelope.v2.json b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/coverage-run-1.envelope.v2.json new file mode 100644 index 00000000..8768f5f1 --- /dev/null +++ b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/coverage-run-1.envelope.v2.json @@ -0,0 +1,120 @@ +{ + "schema_version": 2, + "slice": "DB-EMBEDDING-EVIDENCE-TRANSPORT-R6", + "run": 1, + "capture_manifest": { + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/coverage-capture.v2.json", + "sha256": "28b5286a025794bae2c24535fe31f35e23c8d940698ab9c561aa5a0c1fd178c8" + }, + "source": { + "head_commit": "a538f6224ef31f612152470a4ecd45e78ff9d0f2", + "index_tree": "8564887bc0df75b74b3e22b112f20a86c034fdc6", + "files": [ + { + "role": "verifier", + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.cjs", + "git_blob_oid": "75bec9c41eb5abc435f13d90848074f6608f7fce", + "git_blob_sha256": "a55e59dd870659330add8f840272aa1e8829f8161779db3e9be9e6e014cf1ba4", + "byte_length": 25465, + "crlf_pairs": 0, + "lone_lf": 718, + "bare_carriage_returns": 0 + }, + { + "role": "test_harness", + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.test.cjs", + "git_blob_oid": "caca5ec75f47c03698ac270b549a432b0de04cfe", + "git_blob_sha256": "d04b8bc050182f2806972c9d30aaa7d6349ef2f56f15b3ef21f7005459bb86cc", + "byte_length": 24229, + "crlf_pairs": 0, + "lone_lf": 726, + "bare_carriage_returns": 0 + }, + { + "role": "capture_wrapper", + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/capture-coverage-run.cjs", + "git_blob_oid": "adf25a38e0e969d33a12fdd2721907c1fee8bd31", + "git_blob_sha256": "d10b2cfa0c8230ea26db4c22058e7d06324c5a5282ffa6105c8f4ace7fc27c20", + "byte_length": 13604, + "crlf_pairs": 0, + "lone_lf": 408, + "bare_carriage_returns": 0 + } + ] + }, + "process": { + "executable": "C:\\nvm4w\\nodejs\\node.exe", + "argv": [ + "--test", + "--test-concurrency=1", + "--experimental-test-coverage", + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.test.cjs" + ], + "cwd": "C:\\Users\\btf\\AppData\\Local\\Temp\\engram-r6c-sQkrM5", + "started_at_utc": "2026-07-10T22:56:08.543Z", + "finished_at_utc": "2026-07-10T22:56:15.965Z", + "duration_ms": 7422, + "exit_code": 0, + "signal": null, + "spawn_error": null + }, + "artifacts": { + "stdout": { + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/coverage-run-1.stdout.bin", + "sha256": "4fa07b262ea52975cdeb007bf3f7ce15787dc801731cf274f82af19007a6921b", + "byte_length": 4422 + }, + "stderr": { + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/coverage-run-1.stderr.bin", + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "byte_length": 0 + }, + "transcript": { + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/coverage-run-1.tap", + "sha256": "dcb71f918832c790b93f9f01564e247a69ff623c50a303aa1979f61ab12cfc18", + "byte_length": 4416 + } + }, + "normalization": { + "name": "crlf-to-lf plus coverage-table trailing-padding trim", + "raw_crlf_pairs_replaced": 0, + "table_trailing_padding_bytes_removed": 6, + "semantic_content_changes": 0 + }, + "parse_error": null, + "derived_results": { + "exit_code": 0, + "tests": 24, + "passed": 24, + "failed": 0, + "aggregate": { + "line_percent": 89.96, + "branch_percent": 75.86, + "functions_percent": 95.8 + }, + "verifier": { + "line_percent": 80.08, + "branch_percent": 55.91, + "functions_percent": 81.82 + }, + "test_harness": { + "line_percent": 99.72, + "branch_percent": 94.78, + "functions_percent": 100 + } + }, + "restoration": [ + { + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.cjs", + "before_sha256": "a55e59dd870659330add8f840272aa1e8829f8161779db3e9be9e6e014cf1ba4", + "after_sha256": "a55e59dd870659330add8f840272aa1e8829f8161779db3e9be9e6e014cf1ba4", + "restored": true + }, + { + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.test.cjs", + "before_sha256": "d04b8bc050182f2806972c9d30aaa7d6349ef2f56f15b3ef21f7005459bb86cc", + "after_sha256": "d04b8bc050182f2806972c9d30aaa7d6349ef2f56f15b3ef21f7005459bb86cc", + "restored": true + } + ] +} diff --git a/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/coverage-run-1.stderr.bin b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/coverage-run-1.stderr.bin new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/coverage-run-1.stdout.bin b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/coverage-run-1.stdout.bin new file mode 100644 index 00000000..fab43bb9 --- /dev/null +++ b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/coverage-run-1.stdout.bin @@ -0,0 +1,50 @@ +✔ evidence manifests reject incomplete sets and undeclared or mixed coverage capture (2461.7793ms) +✔ artifact manifest rejects a missing required entry (260.3039ms) +✔ artifact manifest rejects an extra entry (240.6092ms) +✔ artifact manifest rejects a duplicate entry (284.5441ms) +✔ artifact manifest rejects dot-segment traversal outside the evidence namespace (232.877ms) +✔ artifact manifest rejects a non-canonical dot-segment alias (236.5781ms) +▶ artifact manifest rejects absolute and backslash-separated paths + ✔ absolute path (245.0073ms) + ✔ backslash-separated path (271.6047ms) +✔ artifact manifest rejects absolute and backslash-separated paths (516.9948ms) +▶ contract rejects unsupported checkout-equivalence policy values + ✔ bare_cr (177.1393ms) + ✔ transform (270.7538ms) + ✔ required_result (189.1099ms) +✔ contract rejects unsupported checkout-equivalence policy values (637.3275ms) +▶ contract rejects unknown schema keys + ✔ top-level (183.6318ms) + ✔ representation (213.0434ms) + ✔ checkout-equivalence (193.5777ms) + ✔ entry (373.6922ms) +✔ contract rejects unknown schema keys (964.3901ms) +✔ contract rejects deleting one required source when the legacy manifest agrees (215.4699ms) +✔ contract rejects a valid go.mod substitution that preserves cardinality (401.4912ms) +✔ contract rejects rebinding source commit and legacy metadata to an ancestor (180.8376ms) +✔ contract rejects an invalid raw source path before source access (179.1013ms) +✔ contract rejects null representation with structured FAIL before actual source access (172.5208ms) +✔ contract rejects a null entry with structured FAIL before actual source access (178.8782ms) +ℹ tests 24 +ℹ suites 0 +ℹ pass 24 +ℹ fail 0 +ℹ cancelled 0 +ℹ skipped 0 +ℹ todo 0 +ℹ duration_ms 7310.6107 +ℹ start of coverage report +ℹ ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +ℹ file | line % | branch % | funcs % | uncovered lines +ℹ ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +ℹ .agent | | | | +ℹ reports | | | | +ℹ evidence | | | | +ℹ production-ready | | | | +ℹ db-embedding-stats-evidence-transport | | | | +ℹ verify-manifest.cjs | 80.08 | 55.91 | 81.82 | 84-86 97-98 100-104 121-129 150 163-164 169-170 174-175 203-204 217-219 266-267 273-274 276-277 287-288 319-321 350-351 353-354 356-357 361-362 396-397 408-409 424-425 427-428 430-431 433-434 436-437 470-478 561-562 564-565 573-574 576-577 579-580 591-592 611-648 656-657 669-675 698-705 716-718 +ℹ verify-manifest.test.cjs | 99.72 | 94.78 | 100.00 | 356-357 +ℹ ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +ℹ all files | 89.96 | 75.86 | 95.80 | +ℹ ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +ℹ end of coverage report diff --git a/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/coverage-run-1.tap b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/coverage-run-1.tap new file mode 100644 index 00000000..13ab109f --- /dev/null +++ b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/coverage-run-1.tap @@ -0,0 +1,50 @@ +✔ evidence manifests reject incomplete sets and undeclared or mixed coverage capture (2461.7793ms) +✔ artifact manifest rejects a missing required entry (260.3039ms) +✔ artifact manifest rejects an extra entry (240.6092ms) +✔ artifact manifest rejects a duplicate entry (284.5441ms) +✔ artifact manifest rejects dot-segment traversal outside the evidence namespace (232.877ms) +✔ artifact manifest rejects a non-canonical dot-segment alias (236.5781ms) +▶ artifact manifest rejects absolute and backslash-separated paths + ✔ absolute path (245.0073ms) + ✔ backslash-separated path (271.6047ms) +✔ artifact manifest rejects absolute and backslash-separated paths (516.9948ms) +▶ contract rejects unsupported checkout-equivalence policy values + ✔ bare_cr (177.1393ms) + ✔ transform (270.7538ms) + ✔ required_result (189.1099ms) +✔ contract rejects unsupported checkout-equivalence policy values (637.3275ms) +▶ contract rejects unknown schema keys + ✔ top-level (183.6318ms) + ✔ representation (213.0434ms) + ✔ checkout-equivalence (193.5777ms) + ✔ entry (373.6922ms) +✔ contract rejects unknown schema keys (964.3901ms) +✔ contract rejects deleting one required source when the legacy manifest agrees (215.4699ms) +✔ contract rejects a valid go.mod substitution that preserves cardinality (401.4912ms) +✔ contract rejects rebinding source commit and legacy metadata to an ancestor (180.8376ms) +✔ contract rejects an invalid raw source path before source access (179.1013ms) +✔ contract rejects null representation with structured FAIL before actual source access (172.5208ms) +✔ contract rejects a null entry with structured FAIL before actual source access (178.8782ms) +ℹ tests 24 +ℹ suites 0 +ℹ pass 24 +ℹ fail 0 +ℹ cancelled 0 +ℹ skipped 0 +ℹ todo 0 +ℹ duration_ms 7310.6107 +ℹ start of coverage report +ℹ ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +ℹ file | line % | branch % | funcs % | uncovered lines +ℹ ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +ℹ .agent | | | | +ℹ reports | | | | +ℹ evidence | | | | +ℹ production-ready | | | | +ℹ db-embedding-stats-evidence-transport | | | | +ℹ verify-manifest.cjs | 80.08 | 55.91 | 81.82 | 84-86 97-98 100-104 121-129 150 163-164 169-170 174-175 203-204 217-219 266-267 273-274 276-277 287-288 319-321 350-351 353-354 356-357 361-362 396-397 408-409 424-425 427-428 430-431 433-434 436-437 470-478 561-562 564-565 573-574 576-577 579-580 591-592 611-648 656-657 669-675 698-705 716-718 +ℹ verify-manifest.test.cjs | 99.72 | 94.78 | 100.00 | 356-357 +ℹ ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +ℹ all files | 89.96 | 75.86 | 95.80 | +ℹ ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +ℹ end of coverage report diff --git a/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/coverage-run-2.envelope.v2.json b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/coverage-run-2.envelope.v2.json new file mode 100644 index 00000000..3e194e59 --- /dev/null +++ b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/coverage-run-2.envelope.v2.json @@ -0,0 +1,120 @@ +{ + "schema_version": 2, + "slice": "DB-EMBEDDING-EVIDENCE-TRANSPORT-R6", + "run": 2, + "capture_manifest": { + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/coverage-capture.v2.json", + "sha256": "28b5286a025794bae2c24535fe31f35e23c8d940698ab9c561aa5a0c1fd178c8" + }, + "source": { + "head_commit": "a538f6224ef31f612152470a4ecd45e78ff9d0f2", + "index_tree": "8564887bc0df75b74b3e22b112f20a86c034fdc6", + "files": [ + { + "role": "verifier", + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.cjs", + "git_blob_oid": "75bec9c41eb5abc435f13d90848074f6608f7fce", + "git_blob_sha256": "a55e59dd870659330add8f840272aa1e8829f8161779db3e9be9e6e014cf1ba4", + "byte_length": 25465, + "crlf_pairs": 0, + "lone_lf": 718, + "bare_carriage_returns": 0 + }, + { + "role": "test_harness", + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.test.cjs", + "git_blob_oid": "caca5ec75f47c03698ac270b549a432b0de04cfe", + "git_blob_sha256": "d04b8bc050182f2806972c9d30aaa7d6349ef2f56f15b3ef21f7005459bb86cc", + "byte_length": 24229, + "crlf_pairs": 0, + "lone_lf": 726, + "bare_carriage_returns": 0 + }, + { + "role": "capture_wrapper", + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/capture-coverage-run.cjs", + "git_blob_oid": "adf25a38e0e969d33a12fdd2721907c1fee8bd31", + "git_blob_sha256": "d10b2cfa0c8230ea26db4c22058e7d06324c5a5282ffa6105c8f4ace7fc27c20", + "byte_length": 13604, + "crlf_pairs": 0, + "lone_lf": 408, + "bare_carriage_returns": 0 + } + ] + }, + "process": { + "executable": "C:\\nvm4w\\nodejs\\node.exe", + "argv": [ + "--test", + "--test-concurrency=1", + "--experimental-test-coverage", + ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.test.cjs" + ], + "cwd": "C:\\Users\\btf\\AppData\\Local\\Temp\\engram-r6c-tkf1iz", + "started_at_utc": "2026-07-10T22:56:22.811Z", + "finished_at_utc": "2026-07-10T22:56:29.820Z", + "duration_ms": 7009, + "exit_code": 0, + "signal": null, + "spawn_error": null + }, + "artifacts": { + "stdout": { + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/coverage-run-2.stdout.bin", + "sha256": "8c6d8ae30614624a979c2423ab7c36f9f6f6c029bc4f9e1a4c91fda035164d95", + "byte_length": 4420 + }, + "stderr": { + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/coverage-run-2.stderr.bin", + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "byte_length": 0 + }, + "transcript": { + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/coverage-run-2.tap", + "sha256": "7e56b583cb602dd1ac6f156edfd5f18380991126bbb5ef42995fd5ea2089df21", + "byte_length": 4414 + } + }, + "normalization": { + "name": "crlf-to-lf plus coverage-table trailing-padding trim", + "raw_crlf_pairs_replaced": 0, + "table_trailing_padding_bytes_removed": 6, + "semantic_content_changes": 0 + }, + "parse_error": null, + "derived_results": { + "exit_code": 0, + "tests": 24, + "passed": 24, + "failed": 0, + "aggregate": { + "line_percent": 89.96, + "branch_percent": 75.86, + "functions_percent": 95.8 + }, + "verifier": { + "line_percent": 80.08, + "branch_percent": 55.91, + "functions_percent": 81.82 + }, + "test_harness": { + "line_percent": 99.72, + "branch_percent": 94.78, + "functions_percent": 100 + } + }, + "restoration": [ + { + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.cjs", + "before_sha256": "a55e59dd870659330add8f840272aa1e8829f8161779db3e9be9e6e014cf1ba4", + "after_sha256": "a55e59dd870659330add8f840272aa1e8829f8161779db3e9be9e6e014cf1ba4", + "restored": true + }, + { + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.test.cjs", + "before_sha256": "d04b8bc050182f2806972c9d30aaa7d6349ef2f56f15b3ef21f7005459bb86cc", + "after_sha256": "d04b8bc050182f2806972c9d30aaa7d6349ef2f56f15b3ef21f7005459bb86cc", + "restored": true + } + ] +} diff --git a/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/coverage-run-2.stderr.bin b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/coverage-run-2.stderr.bin new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/coverage-run-2.stdout.bin b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/coverage-run-2.stdout.bin new file mode 100644 index 00000000..a6085ab2 --- /dev/null +++ b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/coverage-run-2.stdout.bin @@ -0,0 +1,50 @@ +✔ evidence manifests reject incomplete sets and undeclared or mixed coverage capture (2392.62ms) +✔ artifact manifest rejects a missing required entry (291.3692ms) +✔ artifact manifest rejects an extra entry (229.3592ms) +✔ artifact manifest rejects a duplicate entry (229.1499ms) +✔ artifact manifest rejects dot-segment traversal outside the evidence namespace (253.1131ms) +✔ artifact manifest rejects a non-canonical dot-segment alias (234.2533ms) +▶ artifact manifest rejects absolute and backslash-separated paths + ✔ absolute path (327.1341ms) + ✔ backslash-separated path (227.0073ms) +✔ artifact manifest rejects absolute and backslash-separated paths (554.5194ms) +▶ contract rejects unsupported checkout-equivalence policy values + ✔ bare_cr (180.5044ms) + ✔ transform (169.9542ms) + ✔ required_result (179.2196ms) +✔ contract rejects unsupported checkout-equivalence policy values (529.973ms) +▶ contract rejects unknown schema keys + ✔ top-level (224.6851ms) + ✔ representation (177.8517ms) + ✔ checkout-equivalence (173.7824ms) + ✔ entry (240.7313ms) +✔ contract rejects unknown schema keys (817.4222ms) +✔ contract rejects deleting one required source when the legacy manifest agrees (242.4694ms) +✔ contract rejects a valid go.mod substitution that preserves cardinality (284.8825ms) +✔ contract rejects rebinding source commit and legacy metadata to an ancestor (167.9032ms) +✔ contract rejects an invalid raw source path before source access (178.0165ms) +✔ contract rejects null representation with structured FAIL before actual source access (167.9163ms) +✔ contract rejects a null entry with structured FAIL before actual source access (182.6564ms) +ℹ tests 24 +ℹ suites 0 +ℹ pass 24 +ℹ fail 0 +ℹ cancelled 0 +ℹ skipped 0 +ℹ todo 0 +ℹ duration_ms 6895.5607 +ℹ start of coverage report +ℹ ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +ℹ file | line % | branch % | funcs % | uncovered lines +ℹ ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +ℹ .agent | | | | +ℹ reports | | | | +ℹ evidence | | | | +ℹ production-ready | | | | +ℹ db-embedding-stats-evidence-transport | | | | +ℹ verify-manifest.cjs | 80.08 | 55.91 | 81.82 | 84-86 97-98 100-104 121-129 150 163-164 169-170 174-175 203-204 217-219 266-267 273-274 276-277 287-288 319-321 350-351 353-354 356-357 361-362 396-397 408-409 424-425 427-428 430-431 433-434 436-437 470-478 561-562 564-565 573-574 576-577 579-580 591-592 611-648 656-657 669-675 698-705 716-718 +ℹ verify-manifest.test.cjs | 99.72 | 94.78 | 100.00 | 356-357 +ℹ ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +ℹ all files | 89.96 | 75.86 | 95.80 | +ℹ ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +ℹ end of coverage report diff --git a/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/coverage-run-2.tap b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/coverage-run-2.tap new file mode 100644 index 00000000..746966c6 --- /dev/null +++ b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/coverage-run-2.tap @@ -0,0 +1,50 @@ +✔ evidence manifests reject incomplete sets and undeclared or mixed coverage capture (2392.62ms) +✔ artifact manifest rejects a missing required entry (291.3692ms) +✔ artifact manifest rejects an extra entry (229.3592ms) +✔ artifact manifest rejects a duplicate entry (229.1499ms) +✔ artifact manifest rejects dot-segment traversal outside the evidence namespace (253.1131ms) +✔ artifact manifest rejects a non-canonical dot-segment alias (234.2533ms) +▶ artifact manifest rejects absolute and backslash-separated paths + ✔ absolute path (327.1341ms) + ✔ backslash-separated path (227.0073ms) +✔ artifact manifest rejects absolute and backslash-separated paths (554.5194ms) +▶ contract rejects unsupported checkout-equivalence policy values + ✔ bare_cr (180.5044ms) + ✔ transform (169.9542ms) + ✔ required_result (179.2196ms) +✔ contract rejects unsupported checkout-equivalence policy values (529.973ms) +▶ contract rejects unknown schema keys + ✔ top-level (224.6851ms) + ✔ representation (177.8517ms) + ✔ checkout-equivalence (173.7824ms) + ✔ entry (240.7313ms) +✔ contract rejects unknown schema keys (817.4222ms) +✔ contract rejects deleting one required source when the legacy manifest agrees (242.4694ms) +✔ contract rejects a valid go.mod substitution that preserves cardinality (284.8825ms) +✔ contract rejects rebinding source commit and legacy metadata to an ancestor (167.9032ms) +✔ contract rejects an invalid raw source path before source access (178.0165ms) +✔ contract rejects null representation with structured FAIL before actual source access (167.9163ms) +✔ contract rejects a null entry with structured FAIL before actual source access (182.6564ms) +ℹ tests 24 +ℹ suites 0 +ℹ pass 24 +ℹ fail 0 +ℹ cancelled 0 +ℹ skipped 0 +ℹ todo 0 +ℹ duration_ms 6895.5607 +ℹ start of coverage report +ℹ ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +ℹ file | line % | branch % | funcs % | uncovered lines +ℹ ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +ℹ .agent | | | | +ℹ reports | | | | +ℹ evidence | | | | +ℹ production-ready | | | | +ℹ db-embedding-stats-evidence-transport | | | | +ℹ verify-manifest.cjs | 80.08 | 55.91 | 81.82 | 84-86 97-98 100-104 121-129 150 163-164 169-170 174-175 203-204 217-219 266-267 273-274 276-277 287-288 319-321 350-351 353-354 356-357 361-362 396-397 408-409 424-425 427-428 430-431 433-434 436-437 470-478 561-562 564-565 573-574 576-577 579-580 591-592 611-648 656-657 669-675 698-705 716-718 +ℹ verify-manifest.test.cjs | 99.72 | 94.78 | 100.00 | 356-357 +ℹ ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +ℹ all files | 89.96 | 75.86 | 95.80 | +ℹ ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +ℹ end of coverage report diff --git a/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/maker-report.md b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/maker-report.md new file mode 100644 index 00000000..4edad29c --- /dev/null +++ b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/maker-report.md @@ -0,0 +1,112 @@ +# DB-EMBEDDING-EVIDENCE-TRANSPORT R6 maker report + +R6 closes ET-R5-001, ET-R5-002, and ET-R5-003 without changing product code or +the accepted seven-source product manifest. The covered product verifier remains +Git blob `75bec9c41eb5abc435f13d90848074f6608f7fce`; the final portable test blob is +`caca5ec75f47c03698ac270b549a432b0de04cfe`. + +## Process evidence + +`capture-coverage-run.cjs` materializes the exact candidate index tree in a +temporary independent Git clone with a real `.git` directory, +`core.autocrlf=false`, and exact LF index bytes. It launches the exact Node argv +through `spawnSync` there and captures the operating-system status, signal, +start/finish timestamps, and raw stdout/stderr. The host checkout is not mutated. +Each run +has a separate raw stdout file, raw stderr file, canonical TAP transcript, and +process envelope. The envelope is written even when the child is nonzero or TAP +parsing fails; a successful packet additionally requires `parse_error=null`. + +The two real runs both exited 0, emitted empty stderr, and recorded 24/24. Their +metrics are identical: aggregate `89.96 / 75.86 / 95.8`, verifier +`80.08 / 55.91 / 81.82`, and test harness `99.72 / 94.78 / 100`. Aggregate line +coverage is `89.96% >= 80%`. + +The packet binds all nine measured dimensions individually. The inherited +normative contract has exactly one floor: `aggregate.line_percent >= 80`; its +observed value is `89.96` and margin is `+9.96`. Aggregate branch/functions, +verifier line/branch/functions, and test-harness line/branch/functions remain +explicit observations with `normative=false`, `floor=null`, and `margin=null`. +In particular, verifier branch `55.91` is not misreported as satisfying an +invented 80% branch floor. + +`verify-evidence.cjs` independently re-hashes every raw stream, transcript, and +envelope; regenerates the transcript from raw stdout; reparses all counts and +metrics; and refuses nonzero process status, signal, spawn/parse error, nonempty +stderr, missing files, stale source blobs, or hand-entered results. A parseable +TAP file alone can no longer establish success. + +## Representation portability + +Checkout representation and canonical execution bytes are separate contracts. +The verifier classifies LF, CRLF-equivalent, and mixed-equivalent checkout bytes +without calling any of them LF. Canonical execution always uses an independent +`.git`-directory clone of the exact tree with exact LF Git blobs, so coverage no +longer changes merely because the host is a linked worktree or ordinary clone. +The permanent 24-case suite now runs the strict R5 materialization check +inside an isolated `core.autocrlf=false` Git fixture built from the canonical +index blobs. It still rejects a real mixed-EOL mutation; there is no skip or +conditional pass. + +The final atomic commit must be checked in both fresh `core.autocrlf=false` and +fresh `core.autocrlf=true` checkouts. In each, the same committed test blob must +report 24/24. `verify-final-commit-replay.cjs` additionally requires the final +commit to be a direct child of `a538f6224ef31f612152470a4ecd45e78ff9d0f2`, +compares its committed verifier/test/wrapper blobs to the capture, materializes +the final tree in the same canonical clone topology, replays the coverage command +from those final blobs, and emits the exact commit, tree, and +changed-path digest. Those identifiers cannot be embedded in their own commit +without a self-reference, so the immutable replay output is part of the final +handoff and checker command, not a guessed field in this file. + +## RED, GREEN, REFACTOR, Prove-It + +RED was recorded before implementation: + +- an exit-7 process emitted the exact committed R5 TAP bytes while the R5 parser + synthesized `exit_code=0` and returned PASS; +- the unchanged R5 suite in `core.autocrlf=true` returned 23/24 exit 1; +- the exact rejected R5 test blob produced 8/16 for the schema sentinel, proving + its 9/15 claim stale; +- the first R6 checksum packet passed while omitting the changed R5 verifier and + counting an unchanged load-bearing verifier instead; +- the first final replay inherited linked-worktree versus ordinary-clone branch + variance and therefore failed in a legitimate fresh clone despite 24/24. + +GREEN is 24/24 for the base suite and 12/12 for the R6 tamper suite. Prove-It +mutations against the exact final blobs returned 9/15 for schema release, +15/9 for forced artifact PASS, and 0/12 for a forced R6 status PASS. Both suites +returned fully green after byte-for-byte restoration. + +The tamper suite refreshes local envelope hashes while attacking nonzero status, +stale source identity, hand-entered metrics, stdout, stderr, transcript, missing +files, and unknown fields. All semantic attacks fail. Only additional trailing +padding in a coverage-table row is accepted, because the independent canonical +transform removes and exactly counts those bytes while leaving the transcript +unchanged. + +## Changed-path checksum completeness + +The checksum verifier derives the full path delta from the exact target base to +the candidate Git index/final tree. Every changed path must be present directly +in one checksum layer except the checksum manifest and `R6-SHA256SUMS.txt`, the +only two declared self-exclusions. The unchanged covered verifier remains a +separately labelled `load-bearing-unchanged` entry. The changed R5 +`verify-coverage-capture.cjs` is now directly listed. A permanent mutation removes +that path and refreshes the attacker's local manifest, path digest, and sums; the +verifier still returns nonzero FAIL and names the uncovered changed path. + +## Historical R5 correction and scope + +R5 remains a rejected historical snapshot. Its TDD artifact now records the +actual 8/16 result for the exact R5 test blob and its report/summary/matrix state +that the old hashes and 89.28% coverage belong only to R5. R6 current claims use +the final R6 blobs and the two real R6 envelopes above. No PostgreSQL service, +schema, data, product candidate, or product source blob was modified. + +## Residual risk + +The remaining risk is operational, not hidden in the packet: the post-commit +fresh-LF/fresh-CRLF and final-commit replay gates must pass on the immutable maker +SHA. Failure of any one keeps the handoff at REVISE. No push, merge, tag, release, +browser report opening, or PostgreSQL mutation is part of this maker branch. diff --git a/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/maker-summary.v2.json b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/maker-summary.v2.json new file mode 100644 index 00000000..47be10b0 --- /dev/null +++ b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/maker-summary.v2.json @@ -0,0 +1,79 @@ +{ + "schema_version": 2, + "slice": "DB-EMBEDDING-EVIDENCE-TRANSPORT-R6", + "role": "maker", + "status": "READY_FOR_ATOMIC_COMMIT_AND_FRESH_CHECKER", + "target_base": "a538f6224ef31f612152470a4ecd45e78ff9d0f2", + "checker_commit_is_ancestor": false, + "closed_findings": ["ET-R5-001", "ET-R5-002", "ET-R5-003"], + "product_delta": { + "changed": false, + "accepted_source_parity": "7/7", + "artifact_parity": "5/5", + "postgresql_touched": false + }, + "final_source_blobs": { + "verifier": { + "oid": "75bec9c41eb5abc435f13d90848074f6608f7fce", + "sha256": "a55e59dd870659330add8f840272aa1e8829f8161779db3e9be9e6e014cf1ba4" + }, + "test": { + "oid": "caca5ec75f47c03698ac270b549a432b0de04cfe", + "sha256": "d04b8bc050182f2806972c9d30aaa7d6349ef2f56f15b3ef21f7005459bb86cc" + }, + "capture_wrapper": { + "oid": "adf25a38e0e969d33a12fdd2721907c1fee8bd31", + "sha256": "d10b2cfa0c8230ea26db4c22058e7d06324c5a5282ffa6105c8f4ace7fc27c20" + } + }, + "execution_index_tree": "8564887bc0df75b74b3e22b112f20a86c034fdc6", + "coverage": { + "real_process_runs": 2, + "exit_codes": [0, 0], + "stderr_byte_lengths": [0, 0], + "tests": [24, 24], + "passed": [24, 24], + "failed": [0, 0], + "metrics_identical": true, + "aggregate": { "line_percent": 89.96, "branch_percent": 75.86, "functions_percent": 95.8 }, + "verifier": { "line_percent": 80.08, "branch_percent": 55.91, "functions_percent": 81.82 }, + "test_harness": { "line_percent": 99.72, "branch_percent": 94.78, "functions_percent": 100 }, + "normative_floor": { + "dimension": "aggregate.line_percent", + "observed_percent": 89.96, + "floor_percent": 80, + "margin_percent": 9.96, + "status": "PASS" + }, + "other_dimensions": "observed and machine-bound; normative=false, floor=null, margin=null" + }, + "checksum_diff_coverage": { + "changed_paths": 32, + "directly_checksummed_changed_paths": 30, + "self_excluded_changed_paths": 2, + "load_bearing_unchanged_paths": 1, + "missing_path_mutation": "nonzero FAIL" + }, + "permanent_suites": { + "base": "24/24 exit 0", + "r6_tamper": "12/12 exit 0", + "fresh_lf_required": true, + "fresh_core_autocrlf_true_required": true + }, + "prove_it": { + "validateContractSchema": "9 pass / 15 fail / exit 1", + "verifyArtifactFiles": "15 pass / 9 fail / exit 1", + "r6_status_gate": "0 pass / 12 fail / exit 1", + "post_restore": "24/24 and 12/12; zero residue" + }, + "final_commit_attestation": { + "self_reference_policy": "commit/tree/path digest are emitted after commit, never guessed inside their own tree", + "verifier": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/verify-final-commit-replay.cjs", + "requires_direct_parent": "a538f6224ef31f612152470a4ecd45e78ff9d0f2", + "requires_exact_captured_source_blobs": true, + "requires_replay_24_of_24": true, + "requires_canonical_independent_clone": true, + "requires_zero_tracked_residue": true + }, + "residual_risk": "Fresh LF, fresh core.autocrlf=true, and immutable final-commit replay remain mandatory checker gates." +} diff --git a/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/prove-it.cjs b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/prove-it.cjs new file mode 100644 index 00000000..1fac7bf3 --- /dev/null +++ b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/prove-it.cjs @@ -0,0 +1,166 @@ +#!/usr/bin/env node +'use strict'; + +const crypto = require('node:crypto'); +const fs = require('node:fs'); +const path = require('node:path'); +const { spawnSync } = require('node:child_process'); + +const BASE_DIRECTORY = + '.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport'; +const DIRECTORY = `${BASE_DIRECTORY}-r6`; +const BASE_VERIFIER = `${BASE_DIRECTORY}/verify-manifest.cjs`; +const BASE_TEST = `${BASE_DIRECTORY}/verify-manifest.test.cjs`; +const R6_VERIFIER = `${DIRECTORY}/verify-evidence.cjs`; +const R6_TEST = `${DIRECTORY}/verify-evidence.test.cjs`; +const CAPTURE = `${DIRECTORY}/coverage-capture.v2.json`; + +function sha256(bytes) { + return crypto.createHash('sha256').update(bytes).digest('hex'); +} + +function repoPath(repoRoot, relativePath) { + return path.join(repoRoot, ...relativePath.split('/')); +} + +function git(args, cwd, encoding = 'utf8') { + const result = spawnSync('git', args, { cwd, encoding, windowsHide: true }); + if (result.status !== 0) throw new Error(result.stderr.trim()); + return result.stdout; +} + +function parseCounts(text) { + const count = (label) => { + const match = text.match(new RegExp(`(?:ℹ|#) ${label} ([0-9]+)`)); + if (!match) throw new Error(`TAP output is missing ${label}`); + return Number(match[1]); + }; + return { tests: count('tests'), passed: count('pass'), failed: count('fail') }; +} + +function runTest(repoRoot, relativePath) { + const result = spawnSync( + process.execPath, + ['--test', '--test-concurrency=1', relativePath], + { cwd: repoRoot, encoding: 'utf8', windowsHide: true, maxBuffer: 64 * 1024 * 1024 }, + ); + const combined = `${result.stdout}\n${result.stderr}`; + return { + exit_code: result.status, + ...parseCounts(combined), + stdout_sha256: sha256(Buffer.from(result.stdout, 'utf8')), + stderr_sha256: sha256(Buffer.from(result.stderr, 'utf8')), + }; +} + +function withSourceMutation(filePath, mutate, execute) { + const original = fs.readFileSync(filePath); + try { + const mutated = mutate(Buffer.from(original)); + if (mutated.equals(original)) throw new Error(`sentinel did not change ${filePath}`); + fs.writeFileSync(filePath, mutated); + return execute(); + } finally { + fs.writeFileSync(filePath, original); + if (!fs.readFileSync(filePath).equals(original)) { + throw new Error(`failed to restore ${filePath}`); + } + } +} + +function replaceOnce(bytes, expression, replacement, label) { + const text = bytes.toString('utf8'); + const matches = text.match(expression); + if (!matches || matches.length !== 1) throw new Error(`${label} anchor count is not one`); + return Buffer.from(text.replace(expression, replacement), 'utf8'); +} + +function main() { + const repoRoot = path.resolve(git(['rev-parse', '--show-toplevel'], process.cwd()).trim()); + const capture = JSON.parse(fs.readFileSync(repoPath(repoRoot, CAPTURE), 'utf8')); + const expectedBase = capture.sources.slice(0, 2); + expectedBase.forEach((entry) => { + const oid = git(['rev-parse', `:${entry.path}`], repoRoot).trim(); + if (oid !== entry.git_blob_oid) throw new Error(`staged blob drift: ${entry.path}`); + }); + + const baseVerifierPath = repoPath(repoRoot, BASE_VERIFIER); + const r6VerifierPath = repoPath(repoRoot, R6_VERIFIER); + const schemaSentinel = withSourceMutation( + baseVerifierPath, + (bytes) => replaceOnce( + bytes, + /structural_errors: structuralErrors,\r?\n validated_entries: structuralErrors\.length === 0 \? validatedEntries : \[\],/, + 'structural_errors: [],\n validated_entries: validatedEntries,', + 'validateContractSchema sentinel', + ), + () => runTest(repoRoot, BASE_TEST), + ); + const artifactSentinel = withSourceMutation( + baseVerifierPath, + (bytes) => replaceOnce( + bytes, + /const status = structuralErrors\.length === 0 && matched === entryResults\.length \? 'PASS' : 'FAIL';/, + "const status = 'PASS';", + 'verifyArtifactFiles sentinel', + ), + () => runTest(repoRoot, BASE_TEST), + ); + const r6StatusSentinel = withSourceMutation( + r6VerifierPath, + (bytes) => replaceOnce( + bytes, + /const status = errors\.length === 0 \? 'PASS' : 'FAIL';/, + "const status = 'PASS';", + 'R6 status sentinel', + ), + () => runTest(repoRoot, R6_TEST), + ); + const postRestoreBase = runTest(repoRoot, BASE_TEST); + const postRestoreR6 = runTest(repoRoot, R6_TEST); + for (const [label, value] of [ + ['validateContractSchema', schemaSentinel], + ['verifyArtifactFiles', artifactSentinel], + ['R6 status', r6StatusSentinel], + ]) { + if (value.exit_code === 0 || value.failed === 0) { + throw new Error(`${label} mutation did not make the permanent suite fail`); + } + } + for (const [label, value] of [ + ['base post-restore', postRestoreBase], + ['R6 post-restore', postRestoreR6], + ]) { + if (value.exit_code !== 0 || value.failed !== 0) { + throw new Error(`${label} did not return to GREEN`); + } + } + + process.stdout.write(`${JSON.stringify({ + schema_version: 1, + task_id: 'DB-EMBEDDING-EVIDENCE-TRANSPORT-R6', + exact_source_blobs: expectedBase.map(({ role, path: sourcePath, git_blob_oid, git_blob_sha256 }) => ({ + role, + path: sourcePath, + git_blob_oid, + git_blob_sha256, + })), + sentinels: { + validateContractSchema: schemaSentinel, + verifyArtifactFiles: artifactSentinel, + r6_status_gate: r6StatusSentinel, + }, + post_restore: { + base_suite: postRestoreBase, + r6_tamper_suite: postRestoreR6, + }, + residue: false, + }, null, 2)}\n`); +} + +try { + main(); +} catch (error) { + process.stderr.write(`${error.stack || error.message}\n`); + process.exit(1); +} diff --git a/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/red-reproduction.cjs b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/red-reproduction.cjs new file mode 100644 index 00000000..ee39e339 --- /dev/null +++ b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/red-reproduction.cjs @@ -0,0 +1,228 @@ +#!/usr/bin/env node +'use strict'; + +const crypto = require('node:crypto'); +const fs = require('node:fs'); +const os = require('node:os'); +const path = require('node:path'); +const { spawnSync } = require('node:child_process'); + +const TARGET_COMMIT = 'a538f6224ef31f612152470a4ecd45e78ff9d0f2'; +const BASE_EVIDENCE = + '.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport'; +const R5_EVIDENCE = `${BASE_EVIDENCE}-r5`; +const TEST_PATH = `${BASE_EVIDENCE}/verify-manifest.test.cjs`; +const VERIFIER_PATH = `${BASE_EVIDENCE}/verify-manifest.cjs`; +const R5_VERIFIER_PATH = `${R5_EVIDENCE}/verify-coverage-capture.cjs`; +const R5_TRANSCRIPT_PATH = `${R5_EVIDENCE}/coverage-run-1.tap`; +const CURRENT_DIR = `${BASE_EVIDENCE}-r6`; +const SENTINEL_BEFORE = + 'structural_errors: structuralErrors,\n' + + ' validated_entries: structuralErrors.length === 0 ? validatedEntries : [],'; +const SENTINEL_AFTER = + 'structural_errors: [],\n' + + ' validated_entries: validatedEntries,'; + +function sha256(bytes) { + return crypto.createHash('sha256').update(bytes).digest('hex'); +} + +function command(program, args, cwd, options = {}) { + const result = spawnSync(program, args, { + cwd, + encoding: options.encoding === undefined ? 'utf8' : options.encoding, + env: options.env || process.env, + maxBuffer: 64 * 1024 * 1024, + windowsHide: true, + }); + if (result.error) throw result.error; + return result; +} + +function mustPass(program, args, cwd) { + const result = command(program, args, cwd); + if (result.status !== 0) { + throw new Error( + `${program} ${args.join(' ')} failed (${result.status}): ${String(result.stderr).trim()}`, + ); + } + return result; +} + +function git(args, cwd) { + return mustPass('git', args, cwd).stdout.trim(); +} + +function repoRelative(repoRoot, relativePath) { + return path.join(repoRoot, ...relativePath.split('/')); +} + +function parseTestCounts(output) { + const count = (label) => { + const match = output.match(new RegExp(`(?:ℹ|#) ${label} ([0-9]+)`)); + if (!match) throw new Error(`missing TAP count: ${label}`); + return Number(match[1]); + }; + return { + tests: count('tests'), + passed: count('pass'), + failed: count('fail'), + }; +} + +function main() { + const repoRoot = path.resolve(git(['rev-parse', '--show-toplevel'], process.cwd())); + if (git(['rev-parse', 'HEAD'], repoRoot) !== TARGET_COMMIT) { + throw new Error(`RED reproduction must execute at exact target ${TARGET_COMMIT}`); + } + + const tempParent = repoRelative(repoRoot, `${CURRENT_DIR}/.red-tmp`); + fs.mkdirSync(tempParent, { recursive: true }); + const cloneRoot = fs.mkdtempSync(path.join(tempParent, 'lf-clone-')); + try { + mustPass('git', ['clone', '--shared', '--no-checkout', repoRoot, cloneRoot], repoRoot); + mustPass('git', ['config', 'core.longpaths', 'true'], cloneRoot); + mustPass('git', ['config', 'core.autocrlf', 'false'], cloneRoot); + mustPass('git', ['checkout', '--detach', TARGET_COMMIT], cloneRoot); + + const lfEol = git( + ['ls-files', '--eol', '--', VERIFIER_PATH, TEST_PATH], + cloneRoot, + ).split(/\r?\n/); + if (lfEol.some((line) => !/^i\/lf\s+w\/lf\s+/.test(line))) { + throw new Error(`LF clone did not materialize canonical files: ${lfEol.join(' | ')}`); + } + + const committedTranscript = fs.readFileSync(repoRelative(cloneRoot, R5_TRANSCRIPT_PATH)); + const malicious = command( + process.execPath, + [ + '-e', + "const fs=require('node:fs');process.stdout.write(fs.readFileSync(process.argv[1]));process.exit(7)", + repoRelative(cloneRoot, R5_TRANSCRIPT_PATH), + ], + cloneRoot, + { encoding: null }, + ); + if (malicious.status !== 7) { + throw new Error(`malicious transcript process exited ${malicious.status}, expected 7`); + } + if (!Buffer.from(malicious.stdout).equals(committedTranscript)) { + throw new Error('malicious process stdout differs from the committed R5 transcript'); + } + + const r5Verifier = command( + process.execPath, + [repoRelative(cloneRoot, R5_VERIFIER_PATH), '--mode=coverage-evidence'], + cloneRoot, + ); + const r5Result = JSON.parse(r5Verifier.stdout); + if (r5Verifier.status !== 0 || r5Result.status !== 'PASS') { + throw new Error('R5 baseline verifier unexpectedly rejected its committed packet'); + } + if (r5Result.coverage.parsed_runs[0].exit_code !== 0) { + throw new Error('R5 parsed run no longer synthesizes exit_code zero'); + } + + const crlfSuite = command( + process.execPath, + ['--test', '--test-concurrency=1', repoRelative(repoRoot, TEST_PATH)], + repoRoot, + ); + const crlfCounts = parseTestCounts(`${crlfSuite.stdout}\n${crlfSuite.stderr}`); + if ( + crlfSuite.status !== 1 || + crlfCounts.tests !== 24 || + crlfCounts.passed !== 23 || + crlfCounts.failed !== 1 + ) { + throw new Error( + `CRLF blocker changed: exit=${crlfSuite.status}, counts=${JSON.stringify(crlfCounts)}`, + ); + } + + const verifierFile = repoRelative(cloneRoot, VERIFIER_PATH); + const verifierSource = fs.readFileSync(verifierFile, 'utf8'); + const occurrences = verifierSource.split(SENTINEL_BEFORE).length - 1; + if (occurrences !== 1) { + throw new Error(`schema sentinel anchor count is ${occurrences}, expected 1`); + } + fs.writeFileSync(verifierFile, verifierSource.replace(SENTINEL_BEFORE, SENTINEL_AFTER)); + + const sentinelSuite = command( + process.execPath, + ['--test', '--test-concurrency=1', repoRelative(cloneRoot, TEST_PATH)], + cloneRoot, + ); + const sentinelCounts = parseTestCounts(`${sentinelSuite.stdout}\n${sentinelSuite.stderr}`); + if ( + sentinelSuite.status !== 1 || + sentinelCounts.tests !== 24 || + sentinelCounts.passed !== 8 || + sentinelCounts.failed !== 16 + ) { + throw new Error( + `schema sentinel blocker changed: exit=${sentinelSuite.status}, ` + + `counts=${JSON.stringify(sentinelCounts)}`, + ); + } + + const evidence = { + schema_version: 1, + task_id: 'DB-EMBEDDING-EVIDENCE-TRANSPORT-R6', + phase: 'RED', + target_commit: TARGET_COMMIT, + node_version: process.version, + platform: `${process.platform}-${process.arch}`, + blockers: { + 'ET-R5-001': { + reproduced: true, + malicious_process_exit_code: malicious.status, + malicious_stdout_sha256: sha256(Buffer.from(malicious.stdout)), + committed_transcript_sha256: sha256(committedTranscript), + stdout_matches_committed_transcript: true, + r5_verifier_exit_code: r5Verifier.status, + r5_verifier_status: r5Result.status, + r5_synthetic_parsed_exit_code: r5Result.coverage.parsed_runs[0].exit_code, + }, + 'ET-R5-002': { + reproduced: true, + checkout_core_autocrlf: git(['config', '--get', 'core.autocrlf'], repoRoot), + checkout_eol: git( + ['ls-files', '--eol', '--', VERIFIER_PATH, TEST_PATH], + repoRoot, + ).split(/\r?\n/), + suite_exit_code: crlfSuite.status, + ...crlfCounts, + }, + 'ET-R5-003': { + reproduced: true, + exact_final_r5_test_blob: git(['rev-parse', `HEAD:${TEST_PATH}`], cloneRoot), + sentinel: 'discard structural errors and release validated subsets', + suite_exit_code: sentinelSuite.status, + ...sentinelCounts, + stale_claim: { passed: 9, failed: 15 }, + }, + }, + temp_cleanup_required: true, + }; + process.stdout.write(`${JSON.stringify(evidence, null, 2)}\n`); + } finally { + const resolvedParent = path.resolve(tempParent); + const resolvedClone = path.resolve(cloneRoot); + if (!resolvedClone.startsWith(`${resolvedParent}${path.sep}`)) { + throw new Error(`refusing to clean unexpected temp path: ${resolvedClone}`); + } + fs.rmSync(resolvedClone, { recursive: true, force: true }); + if (fs.existsSync(tempParent) && fs.readdirSync(tempParent).length === 0) { + fs.rmdirSync(tempParent); + } + } +} + +try { + main(); +} catch (error) { + process.stderr.write(`${error.stack || error.message}${os.EOL}`); + process.exit(1); +} diff --git a/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/verify-evidence.cjs b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/verify-evidence.cjs new file mode 100644 index 00000000..f81ca4b1 --- /dev/null +++ b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/verify-evidence.cjs @@ -0,0 +1,1080 @@ +#!/usr/bin/env node +'use strict'; + +const crypto = require('node:crypto'); +const fs = require('node:fs'); +const path = require('node:path'); +const { spawnSync } = require('node:child_process'); + +const SLICE = 'DB-EMBEDDING-EVIDENCE-TRANSPORT-R6'; +const TARGET_BASE = 'a538f6224ef31f612152470a4ecd45e78ff9d0f2'; +const BASE_DIRECTORY = + '.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport'; +const DIRECTORY = `${BASE_DIRECTORY}-r6`; +const VERIFIER_PATH = `${BASE_DIRECTORY}/verify-manifest.cjs`; +const TEST_PATH = `${BASE_DIRECTORY}/verify-manifest.test.cjs`; +const WRAPPER_PATH = `${DIRECTORY}/capture-coverage-run.cjs`; +const CAPTURE_PATH = `${DIRECTORY}/coverage-capture.v2.json`; +const REPEAT_PATH = `${DIRECTORY}/coverage-repeat.v2.json`; +const CHECKSUM_MANIFEST_PATH = `${DIRECTORY}/checksum-layers.v1.json`; +const CHECKSUM_SUMS_PATH = `${DIRECTORY}/R6-SHA256SUMS.txt`; +const CHECKSUM_SELF_EXCLUSION = Object.freeze([CHECKSUM_MANIFEST_PATH, CHECKSUM_SUMS_PATH]); +const LOAD_BEARING_UNCHANGED_PATHS = Object.freeze([VERIFIER_PATH]); +const COMMAND_ARGS = Object.freeze([ + '--test', + '--test-concurrency=1', + '--experimental-test-coverage', + TEST_PATH, +]); +const SOURCE_IDENTITIES = Object.freeze([ + Object.freeze({ role: 'verifier', path: VERIFIER_PATH }), + Object.freeze({ role: 'test_harness', path: TEST_PATH }), + Object.freeze({ role: 'capture_wrapper', path: WRAPPER_PATH }), +]); +const METRIC_KEYS = Object.freeze(['line_percent', 'branch_percent', 'functions_percent']); +const METRIC_SCOPES = Object.freeze(['aggregate', 'verifier', 'test_harness']); +const CHECKSUM_LAYERS = Object.freeze([ + Object.freeze({ + name: 'covered-final-blobs', + paths: Object.freeze([VERIFIER_PATH, TEST_PATH]), + }), + Object.freeze({ + name: 'real-process-capture', + paths: Object.freeze([ + CAPTURE_PATH, + REPEAT_PATH, + `${DIRECTORY}/coverage-run-1.envelope.v2.json`, + `${DIRECTORY}/coverage-run-1.stderr.bin`, + `${DIRECTORY}/coverage-run-1.stdout.bin`, + `${DIRECTORY}/coverage-run-1.tap`, + `${DIRECTORY}/coverage-run-2.envelope.v2.json`, + `${DIRECTORY}/coverage-run-2.stderr.bin`, + `${DIRECTORY}/coverage-run-2.stdout.bin`, + `${DIRECTORY}/coverage-run-2.tap`, + ]), + }), + Object.freeze({ + name: 'implementation-and-verification', + paths: Object.freeze([ + `${DIRECTORY}/.gitattributes`, + `${DIRECTORY}/assemble-coverage-repeat.cjs`, + `${DIRECTORY}/build-checksums.cjs`, + `${DIRECTORY}/capture-coverage-run.cjs`, + `${DIRECTORY}/prove-it.cjs`, + `${DIRECTORY}/red-reproduction.cjs`, + `${DIRECTORY}/verify-evidence.cjs`, + `${DIRECTORY}/verify-evidence.test.cjs`, + `${DIRECTORY}/verify-final-commit-replay.cjs`, + ]), + }), + Object.freeze({ + name: 'r6-reports-and-tdd', + paths: Object.freeze([ + `${DIRECTORY}/maker-report.md`, + `${DIRECTORY}/maker-summary.v2.json`, + '.agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R6.red.json', + '.agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R6.tdd.json', + ]), + }), + Object.freeze({ + name: 'r5-truth-corrections', + paths: Object.freeze([ + `${BASE_DIRECTORY}-r5/R5-SHA256SUMS.txt`, + `${BASE_DIRECTORY}-r5/maker-report.md`, + `${BASE_DIRECTORY}-r5/maker-summary.v1.json`, + `${BASE_DIRECTORY}-r5/verification-matrix.v1.json`, + `${BASE_DIRECTORY}-r5/verify-coverage-capture.cjs`, + '.agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R5.tdd.json', + ]), + }), +]); + +function sha256(bytes) { + return crypto.createHash('sha256').update(bytes).digest('hex'); +} + +function repoPath(repoRoot, relativePath) { + return path.join(repoRoot, ...relativePath.split('/')); +} + +function runGit(args, cwd, encoding = null) { + const result = spawnSync('git', args, { + cwd, + encoding, + maxBuffer: 64 * 1024 * 1024, + windowsHide: true, + }); + if (result.error) throw result.error; + if (result.status !== 0) { + const stderr = Buffer.isBuffer(result.stderr) + ? result.stderr.toString('utf8').trim() + : String(result.stderr || '').trim(); + throw new Error(`git ${args.join(' ')} failed (${result.status}): ${stderr}`); + } + return result.stdout; +} + +function readJson(repoRoot, relativePath) { + return JSON.parse(fs.readFileSync(repoPath(repoRoot, relativePath), 'utf8')); +} + +function isPlainObject(value) { + return value !== null && typeof value === 'object' && !Array.isArray(value); +} + +function validateExactKeys(value, keys, label, errors) { + if (!isPlainObject(value)) { + errors.push(`${label} must be an object`); + return false; + } + const expected = new Set(keys); + for (const key of keys) { + if (!Object.hasOwn(value, key)) errors.push(`${label} is missing required key: ${key}`); + } + for (const key of Object.keys(value)) { + if (!expected.has(key)) errors.push(`${label} contains unknown key: ${key}`); + } + return true; +} + +function analyzeLineEndings(bytes) { + let crlfPairs = 0; + let loneLf = 0; + let bareCarriageReturns = 0; + for (let index = 0; index < bytes.length; index += 1) { + if (bytes[index] === 13) { + if (bytes[index + 1] === 10) { + crlfPairs += 1; + index += 1; + } else { + bareCarriageReturns += 1; + } + } else if (bytes[index] === 10) { + loneLf += 1; + } + } + return { crlf_pairs: crlfPairs, lone_lf: loneLf, bare_carriage_returns: bareCarriageReturns }; +} + +function replaceCrlf(bytes) { + const output = []; + for (let index = 0; index < bytes.length; index += 1) { + if (bytes[index] === 13 && bytes[index + 1] === 10) { + output.push(10); + index += 1; + } else { + output.push(bytes[index]); + } + } + return Buffer.from(output); +} + +function indexFact(repoRoot, identity) { + const oid = String(runGit(['rev-parse', `:${identity.path}`], repoRoot, 'utf8')).trim(); + const bytes = Buffer.from(runGit(['cat-file', 'blob', oid], repoRoot)); + return { + role: identity.role, + path: identity.path, + git_blob_oid: oid, + git_blob_sha256: sha256(bytes), + byte_length: bytes.length, + ...analyzeLineEndings(bytes), + bytes, + }; +} + +function serializableFact(fact) { + const { bytes, ...result } = fact; + return result; +} + +function classifyCurrentCheckout(repoRoot, fact, errors) { + const bytes = fs.readFileSync(repoPath(repoRoot, fact.path)); + const endings = analyzeLineEndings(bytes); + const normalized = replaceCrlf(bytes); + let classification = 'invalid'; + if (bytes.equals(fact.bytes)) classification = 'lf-exact'; + else if (endings.bare_carriage_returns === 0 && normalized.equals(fact.bytes)) { + classification = endings.crlf_pairs > 0 && endings.lone_lf > 0 + ? 'mixed-lf-crlf-equivalent' + : 'crlf-equivalent'; + } + if (classification === 'invalid') { + errors.push(`current checkout is not Git-blob-equivalent: ${fact.path}`); + } + return { + role: fact.role, + path: fact.path, + classification, + filesystem_sha256: sha256(bytes), + byte_length: bytes.length, + ...endings, + }; +} + +function canonicalizeTranscript(stdoutBytes) { + const rawEndings = analyzeLineEndings(stdoutBytes); + if (rawEndings.bare_carriage_returns !== 0) { + throw new Error('raw stdout contains a bare carriage return'); + } + const lfBytes = replaceCrlf(stdoutBytes); + const text = lfBytes.toString('utf8'); + if (!Buffer.from(text, 'utf8').equals(lfBytes)) { + throw new Error('raw stdout is not valid round-trippable UTF-8'); + } + let trimmedTrailingBytes = 0; + const lines = text.split('\n').map((line) => { + if (!line.includes('|')) return line; + const trimmed = line.replace(/[ \t]+$/, ''); + trimmedTrailingBytes += Buffer.byteLength(line) - Buffer.byteLength(trimmed); + return trimmed; + }); + return { + bytes: Buffer.from(lines.join('\n'), 'utf8'), + stats: { + name: 'crlf-to-lf plus coverage-table trailing-padding trim', + raw_crlf_pairs_replaced: rawEndings.crlf_pairs, + table_trailing_padding_bytes_removed: trimmedTrailingBytes, + semantic_content_changes: 0, + }, + }; +} + +function parseMetricLine(text, filename) { + const escaped = filename.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); + const match = text.match( + new RegExp(`${escaped}\\s+\\|\\s+([0-9.]+)\\s+\\|\\s+([0-9.]+)\\s+\\|\\s+([0-9.]+)\\s+\\|`), + ); + if (!match) throw new Error(`canonical transcript is missing metric row: ${filename}`); + return { + line_percent: Number(match[1]), + branch_percent: Number(match[2]), + functions_percent: Number(match[3]), + }; +} + +function parseTranscript(bytes) { + const text = bytes.toString('utf8'); + const count = (label) => { + const match = text.match(new RegExp(`(?:ℹ|#) ${label} ([0-9]+)`)); + if (!match) throw new Error(`canonical transcript is missing ${label} count`); + return Number(match[1]); + }; + return { + tests: count('tests'), + passed: count('pass'), + failed: count('fail'), + aggregate: parseMetricLine(text, 'all files'), + verifier: parseMetricLine(text, 'verify-manifest.cjs'), + test_harness: parseMetricLine(text, 'verify-manifest.test.cjs'), + }; +} + +function validateMetric(value, label, errors) { + if (!validateExactKeys(value, METRIC_KEYS, label, errors)) return; + for (const key of METRIC_KEYS) { + if (typeof value[key] !== 'number' || !Number.isFinite(value[key])) { + errors.push(`${label}.${key} must be a finite number`); + } + } +} + +function expectedDimensionContract(run) { + return METRIC_SCOPES.flatMap((scope) => METRIC_KEYS.map((metric) => { + const observed = run[scope][metric]; + const normative = scope === 'aggregate' && metric === 'line_percent'; + const floor = normative ? 80 : null; + return { + scope, + metric, + observed_percent: observed, + normative, + floor_percent: floor, + margin_percent: normative ? Number((observed - floor).toFixed(2)) : null, + status: normative ? (observed >= floor ? 'PASS' : 'FAIL') : 'OBSERVED_NON_NORMATIVE', + }; + })); +} + +function validateFact(value, expected, label, errors) { + const keys = [ + 'role', + 'path', + 'git_blob_oid', + 'git_blob_sha256', + 'byte_length', + 'crlf_pairs', + 'lone_lf', + 'bare_carriage_returns', + ]; + if (!validateExactKeys(value, keys, label, errors)) return; + if (JSON.stringify(value) !== JSON.stringify(serializableFact(expected))) { + errors.push(`${label} disagrees with the current Git index blob`); + } + if (value.crlf_pairs !== 0 || value.bare_carriage_returns !== 0 || value.lone_lf === 0) { + errors.push(`${label} must describe a strict LF-only Git blob`); + } +} + +function validateCapture(repoRoot, capture, facts, errors) { + const captureKeys = [ + 'schema_version', + 'slice', + 'target_base', + 'source_head', + 'execution_index_tree', + 'node_version', + 'command', + 'representation', + 'sources', + ]; + if (!validateExactKeys(capture, captureKeys, 'capture', errors)) return; + if (capture.schema_version !== 2) errors.push('capture.schema_version must be 2'); + if (capture.slice !== SLICE) errors.push(`capture.slice must be ${SLICE}`); + if (capture.target_base !== TARGET_BASE || capture.source_head !== TARGET_BASE) { + errors.push(`capture must bind to exact rejected target ${TARGET_BASE}`); + } + if (!/^[0-9a-f]{40}$/.test(capture.execution_index_tree || '')) { + errors.push('capture.execution_index_tree must be a full Git tree OID'); + } + if (capture.node_version !== process.version) { + errors.push(`capture.node_version must equal ${process.version}`); + } + if (validateExactKeys( + capture.command, + ['executable', 'executable_basename', 'argv', 'cwd'], + 'capture.command', + errors, + )) { + if (capture.command.executable_basename.toLowerCase() !== 'node.exe') { + errors.push('capture.command.executable_basename must be node.exe'); + } + if (JSON.stringify(capture.command.argv) !== JSON.stringify(COMMAND_ARGS)) { + errors.push('capture.command.argv is not the exact coverage command'); + } + if (capture.command.cwd !== '.') errors.push('capture.command.cwd must be repository root (.)'); + } + + if (validateExactKeys( + capture.representation, + ['checkout_observation', 'canonical_execution'], + 'capture.representation', + errors, + )) { + const observation = capture.representation.checkout_observation; + if (validateExactKeys(observation, ['core_autocrlf', 'files'], 'checkout_observation', errors)) { + if (!['true', 'false', 'input', null].includes(observation.core_autocrlf)) { + errors.push('checkout_observation.core_autocrlf is invalid'); + } + if (!Array.isArray(observation.files) || observation.files.length !== 2) { + errors.push('checkout_observation.files must contain exactly two entries'); + } else { + observation.files.forEach((entry, index) => { + const label = `checkout_observation.files[${index}]`; + validateExactKeys( + entry, + [ + 'role', + 'path', + 'classification', + 'filesystem_sha256', + 'byte_length', + 'crlf_pairs', + 'lone_lf', + 'bare_carriage_returns', + ], + label, + errors, + ); + if (entry.role !== facts[index].role || entry.path !== facts[index].path) { + errors.push(`${label} identity is invalid`); + } + if (!['lf-exact', 'crlf-equivalent', 'mixed-lf-crlf-equivalent'].includes(entry.classification)) { + errors.push(`${label}.classification is invalid`); + } + if (entry.bare_carriage_returns !== 0) errors.push(`${label} contains bare CR`); + if (!/^[0-9a-f]{64}$/.test(entry.filesystem_sha256 || '')) { + errors.push(`${label}.filesystem_sha256 is invalid`); + } + const sourceFact = facts[index]; + const totalLogicalLf = entry.crlf_pairs + entry.lone_lf; + if ( + !Number.isSafeInteger(entry.crlf_pairs) || + !Number.isSafeInteger(entry.lone_lf) || + entry.crlf_pairs < 0 || + entry.lone_lf < 0 || + totalLogicalLf !== sourceFact.lone_lf || + entry.byte_length !== sourceFact.byte_length + entry.crlf_pairs + ) { + errors.push(`${label} line-ending counts do not map to the canonical Git blob`); + } + if ( + entry.classification === 'lf-exact' && + (entry.crlf_pairs !== 0 || + entry.lone_lf !== sourceFact.lone_lf || + entry.filesystem_sha256 !== sourceFact.git_blob_sha256) + ) { + errors.push(`${label} is falsely labelled lf-exact`); + } + if ( + entry.classification === 'crlf-equivalent' && + (entry.crlf_pairs !== sourceFact.lone_lf || entry.lone_lf !== 0) + ) { + errors.push(`${label} is falsely labelled crlf-equivalent`); + } + if ( + entry.classification === 'mixed-lf-crlf-equivalent' && + (entry.crlf_pairs === 0 || entry.lone_lf === 0) + ) { + errors.push(`${label} is falsely labelled mixed-lf-crlf-equivalent`); + } + }); + } + } + const execution = capture.representation.canonical_execution; + if (validateExactKeys( + execution, + ['materialization', 'repository_topology', 'core_autocrlf', 'line_endings', 'files'], + 'canonical_execution', + errors, + )) { + if ( + execution.materialization !== + 'temporary independent Git clone materialized from the exact index tree' + ) { + errors.push('canonical_execution.materialization is invalid'); + } + if (execution.repository_topology !== 'git-directory') { + errors.push('canonical_execution.repository_topology must be git-directory'); + } + if (execution.core_autocrlf !== 'false') { + errors.push('canonical_execution.core_autocrlf must be false'); + } + if (execution.line_endings !== 'lf-only') { + errors.push('canonical_execution.line_endings must be lf-only'); + } + if (!Array.isArray(execution.files) || execution.files.length !== 2) { + errors.push('canonical_execution.files must contain exactly two entries'); + } else { + execution.files.forEach((entry, index) => + validateFact(entry, facts[index], `canonical_execution.files[${index}]`, errors), + ); + } + } + } + if (!Array.isArray(capture.sources) || capture.sources.length !== facts.length) { + errors.push(`capture.sources must contain exactly ${facts.length} entries`); + } else { + capture.sources.forEach((entry, index) => + validateFact(entry, facts[index], `capture.sources[${index}]`, errors), + ); + } +} + +function validateArtifact(repoRoot, value, expectedPath, label, errors) { + if (!validateExactKeys(value, ['path', 'sha256', 'byte_length'], label, errors)) { + return Buffer.alloc(0); + } + if (value.path !== expectedPath) errors.push(`${label}.path must be ${expectedPath}`); + let bytes = Buffer.alloc(0); + try { + bytes = fs.readFileSync(repoPath(repoRoot, expectedPath)); + } catch (error) { + errors.push(`${label} cannot be read: ${error.code || error.message}`); + return bytes; + } + if (value.sha256 !== sha256(bytes)) errors.push(`${label}.sha256 disagrees with file bytes`); + if (value.byte_length !== bytes.length) errors.push(`${label}.byte_length disagrees with file bytes`); + return bytes; +} + +function validateEnvelope(repoRoot, run, capture, captureBytes, facts, errors) { + const envelopePath = `${DIRECTORY}/coverage-run-${run}.envelope.v2.json`; + const envelopeBytes = fs.readFileSync(repoPath(repoRoot, envelopePath)); + const envelope = JSON.parse(envelopeBytes); + const envelopeKeys = [ + 'schema_version', + 'slice', + 'run', + 'capture_manifest', + 'source', + 'process', + 'artifacts', + 'normalization', + 'parse_error', + 'derived_results', + 'restoration', + ]; + validateExactKeys(envelope, envelopeKeys, `envelope[${run}]`, errors); + if (envelope.schema_version !== 2 || envelope.slice !== SLICE || envelope.run !== run) { + errors.push(`envelope[${run}] identity is invalid`); + } + if (validateExactKeys( + envelope.capture_manifest, + ['path', 'sha256'], + `envelope[${run}].capture_manifest`, + errors, + )) { + if (envelope.capture_manifest.path !== CAPTURE_PATH) { + errors.push(`envelope[${run}] capture path is invalid`); + } + if (envelope.capture_manifest.sha256 !== sha256(captureBytes)) { + errors.push(`envelope[${run}] capture hash is stale`); + } + } + if (validateExactKeys( + envelope.source, + ['head_commit', 'index_tree', 'files'], + `envelope[${run}].source`, + errors, + )) { + if (envelope.source.head_commit !== TARGET_BASE) { + errors.push(`envelope[${run}] source head is stale`); + } + if (envelope.source.index_tree !== capture.execution_index_tree) { + errors.push(`envelope[${run}] source tree disagrees with capture`); + } + if (!Array.isArray(envelope.source.files) || envelope.source.files.length !== facts.length) { + errors.push(`envelope[${run}] source files length is invalid`); + } else { + envelope.source.files.forEach((entry, index) => + validateFact(entry, facts[index], `envelope[${run}].source.files[${index}]`, errors), + ); + } + } + if (validateExactKeys( + envelope.process, + [ + 'executable', + 'argv', + 'cwd', + 'started_at_utc', + 'finished_at_utc', + 'duration_ms', + 'exit_code', + 'signal', + 'spawn_error', + ], + `envelope[${run}].process`, + errors, + )) { + if (envelope.process.executable !== capture.command.executable) { + errors.push(`envelope[${run}] executable disagrees with capture`); + } + if (JSON.stringify(envelope.process.argv) !== JSON.stringify(COMMAND_ARGS)) { + errors.push(`envelope[${run}] argv is not the exact coverage command`); + } + if (!path.isAbsolute(envelope.process.cwd)) { + errors.push(`envelope[${run}] cwd must be the exact absolute generation cwd`); + } + if (!path.basename(envelope.process.cwd).startsWith('engram-r6c-')) { + errors.push(`envelope[${run}] cwd must identify the independent canonical clone`); + } + const started = Date.parse(envelope.process.started_at_utc); + const finished = Date.parse(envelope.process.finished_at_utc); + if (!Number.isFinite(started) || !Number.isFinite(finished) || finished < started) { + errors.push(`envelope[${run}] timestamps are invalid`); + } + if (envelope.process.duration_ms !== finished - started) { + errors.push(`envelope[${run}] duration disagrees with timestamps`); + } + if (envelope.process.exit_code !== 0) { + errors.push(`envelope[${run}] process exit_code must be real zero`); + } + if (envelope.process.signal !== null) errors.push(`envelope[${run}] signal must be null`); + if (envelope.process.spawn_error !== null) errors.push(`envelope[${run}] spawn_error must be null`); + } + + const prefix = `${DIRECTORY}/coverage-run-${run}`; + const artifacts = envelope.artifacts; + validateExactKeys(artifacts, ['stdout', 'stderr', 'transcript'], `envelope[${run}].artifacts`, errors); + const stdout = validateArtifact( + repoRoot, + artifacts.stdout, + `${prefix}.stdout.bin`, + `envelope[${run}].artifacts.stdout`, + errors, + ); + const stderr = validateArtifact( + repoRoot, + artifacts.stderr, + `${prefix}.stderr.bin`, + `envelope[${run}].artifacts.stderr`, + errors, + ); + const transcript = validateArtifact( + repoRoot, + artifacts.transcript, + `${prefix}.tap`, + `envelope[${run}].artifacts.transcript`, + errors, + ); + if (stderr.length !== 0) errors.push(`envelope[${run}] real stderr must be empty`); + if (envelope.parse_error !== null) { + errors.push(`envelope[${run}] parse_error must be null`); + } + + let parsed = null; + try { + const canonical = canonicalizeTranscript(stdout); + if (!canonical.bytes.equals(transcript)) { + errors.push(`envelope[${run}] transcript is not the canonical form of raw stdout`); + } + if (JSON.stringify(envelope.normalization) !== JSON.stringify(canonical.stats)) { + errors.push(`envelope[${run}] normalization declaration is hand-entered or stale`); + } + parsed = parseTranscript(transcript); + } catch (error) { + errors.push(`envelope[${run}] transcript derivation failed: ${error.message}`); + } + if (parsed) { + const expectedDerived = { exit_code: envelope.process.exit_code, ...parsed }; + if (JSON.stringify(envelope.derived_results) !== JSON.stringify(expectedDerived)) { + errors.push(`envelope[${run}] derived_results are hand-entered or stale`); + } + if (parsed.tests !== 24 || parsed.passed !== 24 || parsed.failed !== 0) { + errors.push(`envelope[${run}] canonical transcript must record 24/24 passing tests`); + } + validateMetric(parsed.aggregate, `envelope[${run}].parsed.aggregate`, errors); + validateMetric(parsed.verifier, `envelope[${run}].parsed.verifier`, errors); + validateMetric(parsed.test_harness, `envelope[${run}].parsed.test_harness`, errors); + } + + if (!Array.isArray(envelope.restoration) || envelope.restoration.length !== 2) { + errors.push(`envelope[${run}].restoration must contain exactly two entries`); + } else { + envelope.restoration.forEach((entry, index) => { + const label = `envelope[${run}].restoration[${index}]`; + validateExactKeys(entry, ['path', 'before_sha256', 'after_sha256', 'restored'], label, errors); + const observation = capture.representation.checkout_observation.files[index]; + if ( + entry.path !== facts[index].path || + entry.before_sha256 !== observation.filesystem_sha256 || + entry.after_sha256 !== observation.filesystem_sha256 || + entry.restored !== true + ) { + errors.push(`${label} does not prove byte-for-byte restoration`); + } + }); + } + return { envelopePath, envelopeBytes, envelope, parsed }; +} + +function validateRepeat(repoRoot, repeat, captureBytes, runs, errors) { + const repeatKeys = [ + 'schema_version', + 'slice', + 'capture_manifest', + 'envelopes', + 'runs', + 'reproducible', + 'dimensions', + 'threshold', + ]; + validateExactKeys(repeat, repeatKeys, 'repeat', errors); + if (repeat.schema_version !== 2 || repeat.slice !== SLICE) errors.push('repeat identity is invalid'); + validateExactKeys(repeat.capture_manifest, ['path', 'sha256'], 'repeat.capture_manifest', errors); + if ( + repeat.capture_manifest.path !== CAPTURE_PATH || + repeat.capture_manifest.sha256 !== sha256(captureBytes) + ) { + errors.push('repeat capture binding is stale'); + } + if (!Array.isArray(repeat.envelopes) || repeat.envelopes.length !== 2) { + errors.push('repeat.envelopes must contain exactly two entries'); + } else { + repeat.envelopes.forEach((entry, index) => { + const run = index + 1; + const actual = runs[index]; + validateExactKeys(entry, ['run', 'path', 'sha256'], `repeat.envelopes[${index}]`, errors); + if ( + entry.run !== run || + entry.path !== actual.envelopePath || + entry.sha256 !== sha256(actual.envelopeBytes) + ) { + errors.push(`repeat.envelopes[${index}] binding is stale`); + } + }); + } + const expectedRuns = runs.map((actual, index) => ({ + run: index + 1, + envelope_exit_code: actual.envelope.process.exit_code, + exit_code: actual.envelope.process.exit_code, + ...(actual.parsed || {}), + })); + if (JSON.stringify(repeat.runs) !== JSON.stringify(expectedRuns)) { + errors.push('repeat.runs contains hand-entered or stale process/coverage results'); + } + if (repeat.reproducible !== true) errors.push('repeat.reproducible must be true'); + const expectedDimensions = expectedRuns.length > 0 + ? expectedDimensionContract(expectedRuns[0]) + : []; + if (!Array.isArray(repeat.dimensions) || repeat.dimensions.length !== 9) { + errors.push('repeat.dimensions must contain all nine measured dimensions'); + } else { + repeat.dimensions.forEach((entry, index) => validateExactKeys( + entry, + [ + 'scope', + 'metric', + 'observed_percent', + 'normative', + 'floor_percent', + 'margin_percent', + 'status', + ], + `repeat.dimensions[${index}]`, + errors, + )); + if (JSON.stringify(repeat.dimensions) !== JSON.stringify(expectedDimensions)) { + errors.push('repeat.dimensions is stale or misstates normative coverage floors'); + } + } + validateExactKeys( + repeat.threshold, + ['percent', 'basis', 'observed_percent', 'status'], + 'repeat.threshold', + errors, + ); + const observed = expectedRuns[0]?.aggregate?.line_percent; + if ( + repeat.threshold.percent !== 80 || + repeat.threshold.basis !== 'aggregate line coverage' || + repeat.threshold.observed_percent !== observed || + repeat.threshold.status !== 'PASS' || + typeof observed !== 'number' || + observed < 80 + ) { + errors.push('repeat threshold declaration is invalid or below 80 percent'); + } + const metrics = (run) => JSON.stringify({ + aggregate: run.aggregate, + verifier: run.verifier, + test_harness: run.test_harness, + }); + if (expectedRuns.length !== 2 || metrics(expectedRuns[0]) !== metrics(expectedRuns[1])) { + errors.push('two real coverage runs must have identical metrics'); + } +} + +function runProductParity(repoRoot, errors) { + const modes = [ + { mode: 'git-object', expected_total: 7 }, + { mode: 'checkout-lf', expected_total: 7 }, + { mode: 'artifact-files', expected_total: 5 }, + ]; + return modes.map((expectation) => { + const result = spawnSync( + process.execPath, + [repoPath(repoRoot, VERIFIER_PATH), `--mode=${expectation.mode}`], + { cwd: repoRoot, encoding: 'utf8', windowsHide: true }, + ); + let output = null; + try { + output = result.stdout.trim() ? JSON.parse(result.stdout) : null; + } catch (error) { + errors.push(`product verifier ${expectation.mode} emitted invalid JSON`); + } + if ( + result.status !== 0 || + output?.status !== 'PASS' || + output?.total !== expectation.expected_total || + output?.matched !== expectation.expected_total + ) { + errors.push( + `product verifier ${expectation.mode} must PASS ` + + `${expectation.expected_total}/${expectation.expected_total}`, + ); + } + return { + mode: expectation.mode, + exit_code: result.status, + status: output?.status || null, + total: output?.total ?? null, + matched: output?.matched ?? null, + }; + }); +} + +function genericIndexEntry(repoRoot, relativePath, classification) { + const oid = String(runGit(['rev-parse', `:${relativePath}`], repoRoot, 'utf8')).trim(); + const bytes = Buffer.from(runGit(['cat-file', 'blob', oid], repoRoot)); + return { + path: relativePath, + git_blob_oid: oid, + sha256: sha256(bytes), + byte_length: bytes.length, + classification, + bytes, + }; +} + +function changedPathsFromIndex(repoRoot) { + const indexTree = String(runGit(['write-tree'], repoRoot, 'utf8')).trim(); + const output = String( + runGit( + ['diff-tree', '--no-commit-id', '--name-only', '-r', TARGET_BASE, indexTree], + repoRoot, + 'utf8', + ), + ).trim(); + return output ? output.split(/\r?\n/).filter(Boolean).sort() : []; +} + +function validateChecksums(repoRoot, errors) { + let manifest; + let manifestBytes; + try { + manifestBytes = fs.readFileSync(repoPath(repoRoot, CHECKSUM_MANIFEST_PATH)); + manifest = JSON.parse(manifestBytes); + } catch (error) { + errors.push(`checksum manifest cannot be read: ${error.message}`); + return null; + } + validateExactKeys( + manifest, + [ + 'schema_version', + 'slice', + 'algorithm', + 'representation', + 'ordering', + 'self_exclusion', + 'diff_coverage', + 'layer_count', + 'entry_count', + 'path_digest_sha256', + 'layers', + ], + 'checksums', + errors, + ); + if ( + manifest.schema_version !== 1 || + manifest.slice !== SLICE || + manifest.algorithm !== 'sha256' || + manifest.representation !== + 'Git index blob bytes; R6 subtree is -text and byte-exact in every checkout' || + manifest.ordering !== + 'layer declaration order; entries lexicographic by repository-relative path' || + JSON.stringify(manifest.self_exclusion) !== JSON.stringify(CHECKSUM_SELF_EXCLUSION) + ) { + errors.push('checksum manifest metadata is invalid'); + } + const changedPaths = changedPathsFromIndex(repoRoot); + const changedSet = new Set(changedPaths); + const selfExcludedSet = new Set(CHECKSUM_SELF_EXCLUSION); + const directlyListedChangedPaths = changedPaths.filter((entry) => !selfExcludedSet.has(entry)); + const expectedDiffCoverage = { + target_base: TARGET_BASE, + comparison: 'target base to current Git index tree; path membership only', + changed_path_count: changedPaths.length, + directly_listed_changed_paths: directlyListedChangedPaths, + load_bearing_unchanged_paths: [...LOAD_BEARING_UNCHANGED_PATHS], + }; + if (!validateExactKeys( + manifest.diff_coverage, + [ + 'target_base', + 'comparison', + 'changed_path_count', + 'directly_listed_changed_paths', + 'load_bearing_unchanged_paths', + ], + 'checksums.diff_coverage', + errors, + ) || JSON.stringify(manifest.diff_coverage) !== JSON.stringify(expectedDiffCoverage)) { + errors.push('checksum diff coverage declaration is stale'); + } + if (!Array.isArray(manifest.layers) || manifest.layers.length !== CHECKSUM_LAYERS.length) { + errors.push(`checksum manifest must contain exactly ${CHECKSUM_LAYERS.length} layers`); + return null; + } + const actualEntries = []; + const directlyValidatedPaths = []; + manifest.layers.forEach((layer, layerIndex) => { + const expectedLayer = CHECKSUM_LAYERS[layerIndex]; + const label = `checksums.layers[${layerIndex}]`; + validateExactKeys(layer, ['name', 'entries'], label, errors); + if (layer.name !== expectedLayer.name) errors.push(`${label}.name is invalid`); + if (!Array.isArray(layer.entries)) { + errors.push(`${label}.entries must be an array`); + return; + } + if (layer.entries.length !== expectedLayer.paths.length) { + errors.push(`${label}.entries length is invalid`); + } + layer.entries.forEach((entry, entryIndex) => { + const expectedPath = expectedLayer.paths[entryIndex]; + const entryLabel = `${label}.entries[${entryIndex}]`; + validateExactKeys( + entry, + ['path', 'git_blob_oid', 'sha256', 'byte_length', 'classification'], + entryLabel, + errors, + ); + if (expectedPath === undefined || entry.path !== expectedPath) { + errors.push(`${entryLabel}.path ordering is invalid`); + return; + } + const expectedClassification = changedSet.has(expectedPath) + ? 'changed' + : 'load-bearing-unchanged'; + let actual; + try { + actual = genericIndexEntry(repoRoot, expectedPath, expectedClassification); + } catch (error) { + errors.push(`${entryLabel} cannot resolve Git index blob: ${error.message}`); + return; + } + const { bytes, ...serializable } = actual; + if (JSON.stringify(entry) !== JSON.stringify(serializable)) { + errors.push(`${entryLabel} disagrees with Git index blob`); + } + directlyValidatedPaths.push(expectedPath); + if (expectedPath.startsWith(`${DIRECTORY}/`)) { + try { + const filesystemBytes = fs.readFileSync(repoPath(repoRoot, expectedPath)); + if (!filesystemBytes.equals(bytes)) { + errors.push(`${entryLabel} R6 filesystem bytes differ from -text Git blob`); + } + } catch (error) { + errors.push(`${entryLabel} R6 file cannot be read: ${error.message}`); + } + } + actualEntries.push({ layer: expectedLayer.name, ...serializable }); + }); + }); + const duplicatePaths = directlyValidatedPaths.filter( + (entry, index) => directlyValidatedPaths.indexOf(entry) !== index, + ); + if (duplicatePaths.length > 0) { + errors.push(`checksum entries contain duplicate paths: ${[...new Set(duplicatePaths)].join(', ')}`); + } + const validatedSet = new Set(directlyValidatedPaths); + const missingChangedPaths = directlyListedChangedPaths.filter((entry) => !validatedSet.has(entry)); + for (const missing of missingChangedPaths) { + errors.push(`changed path is not directly checksummed: ${missing}`); + } + const unexpectedUnchangedPaths = directlyValidatedPaths.filter( + (entry) => !changedSet.has(entry) && !LOAD_BEARING_UNCHANGED_PATHS.includes(entry), + ); + if (unexpectedUnchangedPaths.length > 0) { + errors.push( + `unchanged checksum entries lack load-bearing classification: ${unexpectedUnchangedPaths.join(', ')}`, + ); + } + for (const expectedExtra of LOAD_BEARING_UNCHANGED_PATHS) { + if (!validatedSet.has(expectedExtra) || changedSet.has(expectedExtra)) { + errors.push(`load-bearing unchanged classification is stale: ${expectedExtra}`); + } + } + for (const selfExcluded of CHECKSUM_SELF_EXCLUSION) { + if (!changedSet.has(selfExcluded)) { + errors.push(`self-excluded checksum path is not changed: ${selfExcluded}`); + } + } + const digestBytes = Buffer.from( + actualEntries.map((entry) => + `${entry.layer}\0${entry.classification}\0${entry.path}\0${entry.git_blob_oid}\0${entry.sha256}\n`, + ).join(''), + 'utf8', + ); + const expectedDigest = sha256(digestBytes); + if ( + manifest.layer_count !== CHECKSUM_LAYERS.length || + manifest.entry_count !== actualEntries.length || + manifest.path_digest_sha256 !== expectedDigest + ) { + errors.push('checksum counts or ordered path digest are stale'); + } + try { + const expectedSums = [ + ...actualEntries.map((entry) => `${entry.sha256} ${entry.path}`), + `${sha256(manifestBytes)} ${CHECKSUM_MANIFEST_PATH}`, + '', + ].join('\n'); + const actualSums = fs.readFileSync(repoPath(repoRoot, CHECKSUM_SUMS_PATH), 'utf8'); + if (actualSums !== expectedSums) errors.push('R6-SHA256SUMS.txt is stale or out of order'); + } catch (error) { + errors.push(`R6-SHA256SUMS.txt cannot be read: ${error.message}`); + } + return { + layers: CHECKSUM_LAYERS.length, + entries: actualEntries.length, + path_digest_sha256: expectedDigest, + manifest_sha256: sha256(manifestBytes), + diff_coverage: { + changed_paths: changedPaths.length, + directly_checksummed_changed_paths: directlyListedChangedPaths.length, + self_excluded_changed_paths: [...CHECKSUM_SELF_EXCLUSION], + load_bearing_unchanged_paths: [...LOAD_BEARING_UNCHANGED_PATHS], + }, + }; +} + +function main() { + const repoRoot = path.resolve( + String(runGit(['rev-parse', '--show-toplevel'], process.cwd(), 'utf8')).trim(), + ); + const errors = []; + const facts = SOURCE_IDENTITIES.map((identity) => indexFact(repoRoot, identity)); + const currentRepresentation = facts.slice(0, 2).map((fact) => + classifyCurrentCheckout(repoRoot, fact, errors), + ); + let capture = null; + let captureBytes = Buffer.alloc(0); + let repeat = null; + let runs = []; + try { + captureBytes = fs.readFileSync(repoPath(repoRoot, CAPTURE_PATH)); + capture = JSON.parse(captureBytes); + validateCapture(repoRoot, capture, facts, errors); + } catch (error) { + errors.push(`capture verification failed: ${error.message}`); + } + if (capture) { + for (const run of [1, 2]) { + try { + runs.push(validateEnvelope(repoRoot, run, capture, captureBytes, facts, errors)); + } catch (error) { + errors.push(`envelope[${run}] verification failed: ${error.message}`); + } + } + } + try { + repeat = readJson(repoRoot, REPEAT_PATH); + if (runs.length === 2) validateRepeat(repoRoot, repeat, captureBytes, runs, errors); + } catch (error) { + errors.push(`repeat verification failed: ${error.message}`); + } + const productParity = runProductParity(repoRoot, errors); + const checksums = validateChecksums(repoRoot, errors); + const status = errors.length === 0 ? 'PASS' : 'FAIL'; + const result = { + schema_version: 2, + slice: SLICE, + status, + structural_errors: errors, + current_representation: currentRepresentation, + process_runs: runs.map((run) => ({ + run: run.envelope.run, + exit_code: run.envelope.process.exit_code, + stdout_sha256: run.envelope.artifacts.stdout.sha256, + stderr_sha256: run.envelope.artifacts.stderr.sha256, + transcript_sha256: run.envelope.artifacts.transcript.sha256, + parsed: run.parsed, + })), + product_parity: productParity, + checksums, + }; + process.stdout.write(`${JSON.stringify(result, null, 2)}\n`); + if (status !== 'PASS') process.exit(1); +} + +try { + main(); +} catch (error) { + process.stderr.write(`${error.stack || error.message}\n`); + process.exit(1); +} diff --git a/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/verify-evidence.test.cjs b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/verify-evidence.test.cjs new file mode 100644 index 00000000..39ccc346 --- /dev/null +++ b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/verify-evidence.test.cjs @@ -0,0 +1,283 @@ +#!/usr/bin/env node +'use strict'; + +const assert = require('node:assert/strict'); +const crypto = require('node:crypto'); +const fs = require('node:fs'); +const path = require('node:path'); +const { spawnSync } = require('node:child_process'); +const { test } = require('node:test'); + +const directory = __dirname; +const repoRoot = path.resolve( + spawnSync('git', ['rev-parse', '--show-toplevel'], { + cwd: directory, + encoding: 'utf8', + windowsHide: true, + }).stdout.trim(), +); +const verifierPath = path.join(directory, 'verify-evidence.cjs'); +const finalReplayPath = path.join(directory, 'verify-final-commit-replay.cjs'); +const repeatPath = path.join(directory, 'coverage-repeat.v2.json'); +const envelopePath = path.join(directory, 'coverage-run-1.envelope.v2.json'); +const stdoutPath = path.join(directory, 'coverage-run-1.stdout.bin'); +const stderrPath = path.join(directory, 'coverage-run-1.stderr.bin'); +const transcriptPath = path.join(directory, 'coverage-run-1.tap'); +const checksumManifestPath = path.join(directory, 'checksum-layers.v1.json'); +const checksumSumsPath = path.join(directory, 'R6-SHA256SUMS.txt'); +const changedR5VerifierPath = + '.agent/reports/evidence/production-ready/' + + 'db-embedding-stats-evidence-transport-r5/verify-coverage-capture.cjs'; + +function sha256(bytes) { + return crypto.createHash('sha256').update(bytes).digest('hex'); +} + +function jsonBytes(value) { + return Buffer.from(`${JSON.stringify(value, null, 2)}\n`, 'utf8'); +} + +function runVerifier() { + const result = spawnSync(process.execPath, [verifierPath], { + cwd: repoRoot, + encoding: 'utf8', + windowsHide: true, + }); + return { + exit_code: result.status, + output: result.stdout.trim() ? JSON.parse(result.stdout) : null, + stderr: result.stderr.trim(), + }; +} + +function expectPass(result) { + assert.equal(result.exit_code, 0, result.stderr || JSON.stringify(result.output)); + assert.equal(result.output?.status, 'PASS'); + assert.deepEqual(result.output?.structural_errors, []); +} + +function expectFail(result, pattern) { + assert.notEqual(result.exit_code, 0, 'attack must return a non-zero exit code'); + assert.equal(result.output?.status, 'FAIL', result.stderr || 'attack must emit FAIL'); + assert.ok(result.output.structural_errors.length > 0, 'attack must emit a structural error'); + if (pattern) { + assert.match(result.output.structural_errors.join('\n'), pattern); + } +} + +function withRestored(paths, execute) { + const originals = new Map(paths.map((filePath) => [filePath, fs.readFileSync(filePath)])); + try { + return execute(); + } finally { + for (const [filePath, bytes] of originals) fs.writeFileSync(filePath, bytes); + } +} + +function withEnvelopeMutation(mutate, verify, extraPaths = []) { + return withRestored([envelopePath, repeatPath, ...extraPaths], () => { + const envelope = JSON.parse(fs.readFileSync(envelopePath, 'utf8')); + const repeat = JSON.parse(fs.readFileSync(repeatPath, 'utf8')); + mutate({ envelope, repeat }); + const envelopeBytes = jsonBytes(envelope); + fs.writeFileSync(envelopePath, envelopeBytes); + repeat.envelopes[0].sha256 = sha256(envelopeBytes); + fs.writeFileSync(repeatPath, jsonBytes(repeat)); + return verify(); + }); +} + +function updateArtifact(envelope, name, filePath, bytes) { + fs.writeFileSync(filePath, bytes); + envelope.artifacts[name].sha256 = sha256(bytes); + envelope.artifacts[name].byte_length = bytes.length; +} + +function checksumPathDigest(manifest) { + const bytes = Buffer.from( + manifest.layers.flatMap((layer) => + layer.entries.map((entry) => + `${layer.name}\0${entry.classification}\0${entry.path}\0${entry.git_blob_oid}\0${entry.sha256}\n`, + ), + ).join(''), + 'utf8', + ); + return sha256(bytes); +} + +function checksumSums(manifest, manifestBytes) { + return Buffer.from(`${[ + ...manifest.layers.flatMap((layer) => + layer.entries.map((entry) => `${entry.sha256} ${entry.path}`), + ), + `${sha256(manifestBytes)} ${path.relative(repoRoot, checksumManifestPath).split(path.sep).join('/')}`, + ].join('\n')}\n`, 'utf8'); +} + +test('real process envelopes, raw streams, transcripts, and product parity pass', () => { + const result = runVerifier(); + expectPass(result); + assert.equal(result.output.process_runs.length, 2); + assert.deepEqual(result.output.process_runs.map((run) => run.exit_code), [0, 0]); + assert.deepEqual( + result.output.process_runs.map((run) => [run.parsed.tests, run.parsed.passed, run.parsed.failed]), + [[24, 24, 0], [24, 24, 0]], + ); + assert.deepEqual( + result.output.product_parity.map((entry) => [entry.mode, entry.matched, entry.total]), + [['git-object', 7, 7], ['checkout-lf', 7, 7], ['artifact-files', 5, 5]], + ); + const boundaryProbe = spawnSync( + process.execPath, + [finalReplayPath, '--self-test-prefix-boundaries'], + { cwd: repoRoot, encoding: 'utf8', windowsHide: true }, + ); + assert.equal(boundaryProbe.status, 0, boundaryProbe.stderr); + const boundaryResult = JSON.parse(boundaryProbe.stdout); + assert.equal(boundaryResult.status, 'PASS'); + assert.ok(boundaryResult.rejected.some((entry) => entry.includes('transport-evil'))); +}); + +test('parseable TAP cannot hide a non-zero real process exit', () => { + const result = withEnvelopeMutation(({ envelope, repeat }) => { + envelope.process.exit_code = 1; + envelope.derived_results.exit_code = 1; + repeat.runs[0].envelope_exit_code = 1; + repeat.runs[0].exit_code = 1; + }, runVerifier); + expectFail(result, /process exit_code must be real zero/); +}); + +test('a stale source envelope is rejected even with refreshed envelope hash', () => { + const result = withEnvelopeMutation(({ envelope }) => { + envelope.source.files[0].git_blob_oid = '0'.repeat(40); + }, runVerifier); + expectFail(result, /disagrees with the current Git index blob/); +}); + +test('hand-entered metrics are rejected after envelope and repeat hashes are refreshed', () => { + const result = withEnvelopeMutation(({ envelope, repeat }) => { + envelope.derived_results.aggregate.line_percent = 99.99; + repeat.runs[0].aggregate.line_percent = 99.99; + repeat.threshold.observed_percent = 99.99; + }, runVerifier); + expectFail(result, /derived_results are hand-entered or stale/); +}); + +test('changed stdout is rejected after its declared hashes are refreshed', () => { + const result = withEnvelopeMutation(({ envelope }) => { + const stdout = fs.readFileSync(stdoutPath, 'utf8'); + assert.match(stdout, /ℹ tests 24/); + updateArtifact( + envelope, + 'stdout', + stdoutPath, + Buffer.from(stdout.replace('ℹ tests 24', 'ℹ tests 25'), 'utf8'), + ); + }, runVerifier, [stdoutPath]); + expectFail(result, /transcript is not the canonical form of raw stdout/); +}); + +test('changed stderr is rejected after its declared hashes are refreshed', () => { + const result = withEnvelopeMutation(({ envelope }) => { + updateArtifact(envelope, 'stderr', stderrPath, Buffer.from('synthetic stderr\n', 'utf8')); + }, runVerifier, [stderrPath]); + expectFail(result, /real stderr must be empty/); +}); + +test('changed transcript is rejected after its declared hashes are refreshed', () => { + const result = withEnvelopeMutation(({ envelope }) => { + const transcript = fs.readFileSync(transcriptPath, 'utf8'); + assert.match(transcript, /ℹ pass 24/); + updateArtifact( + envelope, + 'transcript', + transcriptPath, + Buffer.from(transcript.replace('ℹ pass 24', 'ℹ pass 23'), 'utf8'), + ); + }, runVerifier, [transcriptPath]); + expectFail(result, /transcript is not the canonical form of raw stdout/); +}); + +test('missing raw stdout is rejected fail-closed', () => { + const heldPath = `${stdoutPath}.held`; + assert.equal(fs.existsSync(heldPath), false); + fs.renameSync(stdoutPath, heldPath); + try { + expectFail(runVerifier(), /cannot be read/); + } finally { + fs.renameSync(heldPath, stdoutPath); + } +}); + +test('coverage-table padding normalization is semantic-preserving and exactly counted', () => { + const envelope = JSON.parse(fs.readFileSync(envelopePath, 'utf8')); + const stdout = fs.readFileSync(stdoutPath); + const transcript = fs.readFileSync(transcriptPath); + assert.equal(envelope.normalization.semantic_content_changes, 0); + assert.ok( + Number.isSafeInteger(envelope.normalization.table_trailing_padding_bytes_removed) && + envelope.normalization.table_trailing_padding_bytes_removed > 0, + 'normalization must record a positive exact padding-byte count', + ); + assert.equal( + stdout.length - transcript.length, + envelope.normalization.table_trailing_padding_bytes_removed, + ); + const result = runVerifier(); + expectPass(result); +}); + +test('semantic transcript mutation remains rejected with all local hashes refreshed', () => { + const result = withEnvelopeMutation(({ envelope, repeat }) => { + const stdout = fs.readFileSync(stdoutPath, 'utf8'); + const transcript = fs.readFileSync(transcriptPath, 'utf8'); + assert.match(stdout, /ℹ tests 24/); + assert.match(transcript, /ℹ tests 24/); + updateArtifact( + envelope, + 'stdout', + stdoutPath, + Buffer.from(stdout.replace('ℹ tests 24', 'ℹ tests 25'), 'utf8'), + ); + updateArtifact( + envelope, + 'transcript', + transcriptPath, + Buffer.from(transcript.replace('ℹ tests 24', 'ℹ tests 25'), 'utf8'), + ); + envelope.derived_results.tests = 25; + repeat.runs[0].tests = 25; + }, runVerifier, [stdoutPath, transcriptPath]); + expectFail(result, /canonical transcript must record 24\/24 passing tests/); +}); + +test('unknown envelope fields are rejected fail-closed', () => { + const result = withEnvelopeMutation(({ envelope }) => { + envelope.hand_entered_success = true; + }, runVerifier); + expectFail(result, /contains unknown key: hand_entered_success/); +}); + +test('a changed path cannot be omitted after locally refreshing checksum declarations', () => { + const result = withRestored([checksumManifestPath, checksumSumsPath], () => { + const manifest = JSON.parse(fs.readFileSync(checksumManifestPath, 'utf8')); + const layer = manifest.layers.find((entry) => entry.name === 'r5-truth-corrections'); + assert.ok(layer, 'r5 checksum layer must exist'); + const before = layer.entries.length; + layer.entries = layer.entries.filter((entry) => entry.path !== changedR5VerifierPath); + assert.equal(layer.entries.length, before - 1, 'attack must remove the changed R5 verifier'); + manifest.entry_count -= 1; + manifest.diff_coverage.changed_path_count -= 1; + manifest.diff_coverage.directly_listed_changed_paths = + manifest.diff_coverage.directly_listed_changed_paths.filter( + (entry) => entry !== changedR5VerifierPath, + ); + manifest.path_digest_sha256 = checksumPathDigest(manifest); + const manifestBytes = jsonBytes(manifest); + fs.writeFileSync(checksumManifestPath, manifestBytes); + fs.writeFileSync(checksumSumsPath, checksumSums(manifest, manifestBytes)); + return runVerifier(); + }); + expectFail(result, /changed path is not directly checksummed: .*verify-coverage-capture\.cjs/); +}); diff --git a/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/verify-final-commit-replay.cjs b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/verify-final-commit-replay.cjs new file mode 100644 index 00000000..dc5d3eb0 --- /dev/null +++ b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/verify-final-commit-replay.cjs @@ -0,0 +1,380 @@ +#!/usr/bin/env node +'use strict'; + +const crypto = require('node:crypto'); +const fs = require('node:fs'); +const os = require('node:os'); +const path = require('node:path'); +const { spawnSync } = require('node:child_process'); + +const TARGET_BASE = 'a538f6224ef31f612152470a4ecd45e78ff9d0f2'; +const BASE_DIRECTORY = + '.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport'; +const DIRECTORY = `${BASE_DIRECTORY}-r6`; +const VERIFIER_PATH = `${BASE_DIRECTORY}/verify-manifest.cjs`; +const TEST_PATH = `${BASE_DIRECTORY}/verify-manifest.test.cjs`; +const WRAPPER_PATH = `${DIRECTORY}/capture-coverage-run.cjs`; +const CAPTURE_PATH = `${DIRECTORY}/coverage-capture.v2.json`; +const REPEAT_PATH = `${DIRECTORY}/coverage-repeat.v2.json`; +const COMMAND_ARGS = Object.freeze([ + '--test', + '--test-concurrency=1', + '--experimental-test-coverage', + TEST_PATH, +]); +const SOURCE_PATHS = Object.freeze([VERIFIER_PATH, TEST_PATH, WRAPPER_PATH]); +const METRIC_SCOPES = Object.freeze(['aggregate', 'verifier', 'test_harness']); +const METRIC_KEYS = Object.freeze(['line_percent', 'branch_percent', 'functions_percent']); +const ALLOWED_PREFIXES = Object.freeze([ + `${BASE_DIRECTORY}/`, + `${BASE_DIRECTORY}-r5/`, + `${DIRECTORY}/`, + '.agent/specs/db-embedding-stats-evidence-transport/evidence/', +]); + +function sha256(bytes) { + return crypto.createHash('sha256').update(bytes).digest('hex'); +} + +function run(program, args, cwd, encoding = null, env = process.env) { + const result = spawnSync(program, args, { + cwd, + encoding, + env, + maxBuffer: 64 * 1024 * 1024, + windowsHide: true, + }); + if (result.error) throw result.error; + return result; +} + +function git(args, cwd, encoding = null) { + const result = run('git', args, cwd, encoding); + if (result.status !== 0) { + const stderr = Buffer.isBuffer(result.stderr) + ? result.stderr.toString('utf8').trim() + : String(result.stderr || '').trim(); + throw new Error(`git ${args.join(' ')} failed (${result.status}): ${stderr}`); + } + return result.stdout; +} + +function repoPath(repoRoot, relativePath) { + return path.join(repoRoot, ...relativePath.split('/')); +} + +function lineEndings(bytes) { + let crlfPairs = 0; + let loneLf = 0; + let bareCarriageReturns = 0; + for (let index = 0; index < bytes.length; index += 1) { + if (bytes[index] === 13) { + if (bytes[index + 1] === 10) { + crlfPairs += 1; + index += 1; + } else { + bareCarriageReturns += 1; + } + } else if (bytes[index] === 10) { + loneLf += 1; + } + } + return { crlf_pairs: crlfPairs, lone_lf: loneLf, bare_carriage_returns: bareCarriageReturns }; +} + +function canonicalize(bytes) { + const output = []; + for (let index = 0; index < bytes.length; index += 1) { + if (bytes[index] === 13 && bytes[index + 1] === 10) { + output.push(10); + index += 1; + } else { + if (bytes[index] === 13) throw new Error('bare CR is not canonicalizable'); + output.push(bytes[index]); + } + } + return Buffer.from(output); +} + +function classifyCheckout(repoRoot, fact) { + const bytes = fs.readFileSync(repoPath(repoRoot, fact.path)); + const normalized = canonicalize(bytes); + if (!normalized.equals(fact.bytes)) { + throw new Error(`checkout is not canonical-equivalent to final blob: ${fact.path}`); + } + const endings = lineEndings(bytes); + let classification = 'lf-exact'; + if (!bytes.equals(fact.bytes)) { + classification = endings.crlf_pairs > 0 && endings.lone_lf > 0 + ? 'mixed-lf-crlf-equivalent' + : 'crlf-equivalent'; + } + return { + path: fact.path, + classification, + filesystem_sha256: sha256(bytes), + byte_length: bytes.length, + ...endings, + }; +} + +function withCanonicalExecutionClone(repoRoot, sourceTree, execute) { + const tempBase = path.resolve(os.tmpdir()); + const cloneRoot = fs.mkdtempSync(path.join(tempBase, 'engram-r6c-')); + try { + const clone = run( + 'git', + ['clone', '--shared', '--no-checkout', '--quiet', repoRoot, cloneRoot], + repoRoot, + 'utf8', + ); + if (clone.status !== 0) throw new Error(`canonical clone failed: ${clone.stderr.trim()}`); + git(['config', 'core.longpaths', 'true'], cloneRoot, 'utf8'); + git(['config', 'core.autocrlf', 'false'], cloneRoot, 'utf8'); + git(['read-tree', sourceTree], cloneRoot, 'utf8'); + git(['checkout-index', '--all', '--force'], cloneRoot, 'utf8'); + return execute(cloneRoot); + } finally { + const resolvedClone = path.resolve(cloneRoot); + if (!resolvedClone.startsWith(`${tempBase}${path.sep}`)) { + throw new Error(`refusing to clean unexpected canonical clone path: ${resolvedClone}`); + } + fs.rmSync(resolvedClone, { recursive: true, force: true }); + } +} + +function finalBlobFact(repoRoot, relativePath) { + const oid = String(git(['rev-parse', `HEAD:${relativePath}`], repoRoot, 'utf8')).trim(); + const bytes = Buffer.from(git(['cat-file', 'blob', oid], repoRoot)); + const endings = lineEndings(bytes); + if (endings.crlf_pairs !== 0 || endings.bare_carriage_returns !== 0 || endings.lone_lf === 0) { + throw new Error(`final committed source blob must be LF-only: ${relativePath}`); + } + return { + path: relativePath, + git_blob_oid: oid, + git_blob_sha256: sha256(bytes), + byte_length: bytes.length, + ...endings, + bytes, + }; +} + +function parseMetric(text, filename) { + const escaped = filename.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); + const match = text.match( + new RegExp(`${escaped}\\s+\\|\\s+([0-9.]+)\\s+\\|\\s+([0-9.]+)\\s+\\|\\s+([0-9.]+)\\s+\\|`), + ); + if (!match) throw new Error(`replay transcript is missing metric row: ${filename}`); + return { + line_percent: Number(match[1]), + branch_percent: Number(match[2]), + functions_percent: Number(match[3]), + }; +} + +function parseReplay(stdout) { + const text = canonicalize(stdout).toString('utf8'); + const count = (label) => { + const match = text.match(new RegExp(`(?:ℹ|#) ${label} ([0-9]+)`)); + if (!match) throw new Error(`replay transcript is missing ${label}`); + return Number(match[1]); + }; + return { + tests: count('tests'), + passed: count('pass'), + failed: count('fail'), + aggregate: parseMetric(text, 'all files'), + verifier: parseMetric(text, 'verify-manifest.cjs'), + test_harness: parseMetric(text, 'verify-manifest.test.cjs'), + }; +} + +function expectedDimensionContract(run) { + return METRIC_SCOPES.flatMap((scope) => METRIC_KEYS.map((metric) => { + const observed = run[scope][metric]; + const normative = scope === 'aggregate' && metric === 'line_percent'; + const floor = normative ? 80 : null; + return { + scope, + metric, + observed_percent: observed, + normative, + floor_percent: floor, + margin_percent: normative ? Number((observed - floor).toFixed(2)) : null, + status: normative ? (observed >= floor ? 'PASS' : 'FAIL') : 'OBSERVED_NON_NORMATIVE', + }; + })); +} + +function isAllowedChangedPath(relativePath) { + return ALLOWED_PREFIXES.some((prefix) => relativePath.startsWith(prefix)); +} + +function runPrefixBoundarySelfTest() { + const accepted = [ + `${BASE_DIRECTORY}/verify-manifest.test.cjs`, + `${BASE_DIRECTORY}-r5/maker-report.md`, + `${DIRECTORY}/maker-report.md`, + '.agent/specs/db-embedding-stats-evidence-transport/evidence/example.json', + ]; + const rejected = [ + `${BASE_DIRECTORY}-evil/payload.cjs`, + `${DIRECTORY}-evil/payload.cjs`, + '.agent/specs/db-embedding-stats-evidence-transport/evidence-evil/payload.json', + 'internal/embedding/store.go', + ]; + if (accepted.some((entry) => !isAllowedChangedPath(entry))) { + throw new Error('prefix-boundary self-test rejected an authorized path'); + } + if (rejected.some((entry) => isAllowedChangedPath(entry))) { + throw new Error('prefix-boundary self-test accepted a collision/disallowed path'); + } + return { status: 'PASS', accepted, rejected }; +} + +function main() { + const repoRoot = path.resolve(String(git(['rev-parse', '--show-toplevel'], process.cwd(), 'utf8')).trim()); + const head = String(git(['rev-parse', 'HEAD'], repoRoot, 'utf8')).trim(); + const parents = String(git(['show', '-s', '--format=%P', 'HEAD'], repoRoot, 'utf8')).trim().split(/\s+/); + if (parents.length !== 1 || parents[0] !== TARGET_BASE) { + throw new Error(`final maker commit must be a direct child of ${TARGET_BASE}`); + } + const clean = String(git(['status', '--porcelain', '--untracked-files=no'], repoRoot, 'utf8')); + if (clean.trim() !== '') throw new Error(`final replay requires a clean tracked checkout: ${clean.trim()}`); + + const changedPaths = String( + git(['diff-tree', '--no-commit-id', '--name-only', '-r', 'HEAD'], repoRoot, 'utf8'), + ).trim().split(/\r?\n/).filter(Boolean).sort(); + runPrefixBoundarySelfTest(); + const disallowed = changedPaths.filter((entry) => !isAllowedChangedPath(entry)); + if (disallowed.length > 0) throw new Error(`final commit changed disallowed paths: ${disallowed.join(', ')}`); + const pathFacts = changedPaths.map((entry) => ({ + path: entry, + blob_oid: String(git(['rev-parse', `HEAD:${entry}`], repoRoot, 'utf8')).trim(), + })); + const pathDigestBytes = Buffer.from( + pathFacts.map((entry) => `${entry.path}\0${entry.blob_oid}\n`).join(''), + 'utf8', + ); + + const capture = JSON.parse(fs.readFileSync(repoPath(repoRoot, CAPTURE_PATH), 'utf8')); + const repeat = JSON.parse(fs.readFileSync(repoPath(repoRoot, REPEAT_PATH), 'utf8')); + const finalFacts = SOURCE_PATHS.map((entry) => finalBlobFact(repoRoot, entry)); + finalFacts.forEach((fact, index) => { + const captured = capture.sources[index]; + for (const key of [ + 'path', + 'git_blob_oid', + 'git_blob_sha256', + 'byte_length', + 'crlf_pairs', + 'lone_lf', + 'bare_carriage_returns', + ]) { + if (captured[key] !== fact[key]) { + throw new Error(`final committed source differs from captured execution source: ${fact.path}`); + } + } + }); + const hostCheckout = finalFacts.slice(0, 2).map((fact) => classifyCheckout(repoRoot, fact)); + + let replay; + let replayCwd = null; + const finalTree = String(git(['rev-parse', 'HEAD^{tree}'], repoRoot, 'utf8')).trim(); + withCanonicalExecutionClone(repoRoot, finalTree, (cloneRoot) => { + for (const fact of finalFacts.slice(0, 2)) { + if (!fs.readFileSync(repoPath(cloneRoot, fact.path)).equals(fact.bytes)) { + throw new Error(`canonical clone differs from final source blob: ${fact.path}`); + } + } + const env = { ...process.env }; + delete env.NODE_V8_COVERAGE; + replayCwd = cloneRoot; + replay = run(process.execPath, COMMAND_ARGS, cloneRoot, null, env); + }); + if (!replay) throw new Error('final replay process did not start'); + const stdout = Buffer.from(replay.stdout || []); + const stderr = Buffer.from(replay.stderr || []); + const parsed = parseReplay(stdout); + if ( + replay.status !== 0 || + replay.signal !== null || + stderr.length !== 0 || + parsed.tests !== 24 || + parsed.passed !== 24 || + parsed.failed !== 0 + ) { + throw new Error( + `final replay failed: exit=${replay.status}, signal=${replay.signal}, ` + + `stderr_bytes=${stderr.length}, counts=${JSON.stringify(parsed)}`, + ); + } + const expectedMetrics = repeat.runs[0]; + for (const key of ['aggregate', 'verifier', 'test_harness']) { + if (JSON.stringify(parsed[key]) !== JSON.stringify(expectedMetrics[key])) { + throw new Error(`final replay ${key} metrics differ from committed real-run packet`); + } + } + const replayDimensions = expectedDimensionContract(parsed); + if (JSON.stringify(repeat.dimensions) !== JSON.stringify(replayDimensions)) { + throw new Error('final replay coverage dimensions/floors differ from committed packet'); + } + if (replayDimensions.some((entry) => entry.normative && entry.status !== 'PASS')) { + throw new Error('final replay failed a normative coverage floor'); + } + const restoredClean = String( + git(['status', '--porcelain', '--untracked-files=no'], repoRoot, 'utf8'), + ); + if (restoredClean.trim() !== '') { + throw new Error(`final replay left tracked residue: ${restoredClean.trim()}`); + } + + const result = { + schema_version: 1, + status: 'PASS', + final_commit: head, + direct_parent: parents[0], + final_tree: finalTree, + changed_path_count: changedPaths.length, + changed_path_digest_sha256: sha256(pathDigestBytes), + changed_paths: pathFacts, + captured_execution_index_tree: capture.execution_index_tree, + final_source_blobs_match_capture: true, + host_checkout: hostCheckout, + canonical_execution: { + materialization: 'temporary independent Git clone from final committed tree', + repository_topology: 'git-directory', + core_autocrlf: 'false', + cwd: replayCwd, + }, + command: { + executable: process.execPath, + argv: [...COMMAND_ARGS], + cwd: repoRoot, + }, + process: { + exit_code: replay.status, + signal: replay.signal, + stdout_sha256: sha256(stdout), + stdout_byte_length: stdout.length, + stderr_sha256: sha256(stderr), + stderr_byte_length: stderr.length, + }, + parsed, + coverage_dimensions: replayDimensions, + tracked_residue: false, + }; + process.stdout.write(`${JSON.stringify(result, null, 2)}\n`); +} + +try { + if (process.argv.includes('--self-test-prefix-boundaries')) { + process.stdout.write(`${JSON.stringify(runPrefixBoundarySelfTest(), null, 2)}\n`); + } else { + main(); + } +} catch (error) { + process.stderr.write(`${error.stack || error.message}\n`); + process.exit(1); +} diff --git a/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.test.cjs b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.test.cjs index 8e814737..caca5ec7 100644 --- a/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.test.cjs +++ b/.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.test.cjs @@ -44,10 +44,9 @@ const coverageCaptureDirectory = path.join( 'production-ready', 'db-embedding-stats-evidence-transport-r5', ); -const coverageCapturePath = path.join(coverageCaptureDirectory, 'coverage-capture.v1.json'); -const coverageCaptureVerifierWrapperPath = path.join( +const coverageCaptureVerifierPath = path.join( coverageCaptureDirectory, - 'run-coverage-capture-verifier.cmd', + 'verify-coverage-capture.cjs', ); const legacyManifestPath = path.join( repoRoot, @@ -190,16 +189,12 @@ function runVerifier(mode, options = {}) { }; } -function runCoverageCaptureVerifier(mode) { - const result = spawnSync( - 'cmd.exe', - ['/d', '/c', coverageCaptureVerifierWrapperPath, `--mode=${mode}`], - { - cwd: repoRoot, - encoding: 'utf8', - windowsHide: true, - }, - ); +function runCoverageCaptureVerifier(mode, fixture) { + const result = spawnSync(process.execPath, [fixture.verifier_path, `--mode=${mode}`], { + cwd: fixture.repo_root, + encoding: 'utf8', + windowsHide: true, + }); return { exit_code: result.status, output: result.stdout.trim() ? JSON.parse(result.stdout) : null, @@ -207,6 +202,101 @@ function runCoverageCaptureVerifier(mode) { }; } +function runGitAt(cwd, args, encoding = 'utf8') { + const result = spawnSync('git', args, { + cwd, + encoding, + windowsHide: true, + }); + const stderr = Buffer.isBuffer(result.stderr) + ? result.stderr.toString('utf8') + : String(result.stderr || ''); + assert.equal(result.status, 0, stderr || `git ${args.join(' ')} failed`); + return result.stdout; +} + +function writeRelative(root, relativePath, bytes) { + const absolutePath = path.join(root, ...relativePath.split('/')); + fs.mkdirSync(path.dirname(absolutePath), { recursive: true }); + fs.writeFileSync(absolutePath, bytes); + return absolutePath; +} + +function withCanonicalLfCoverageFixture(verify) { + const fixtureRoot = fs.mkdtempSync( + path.join(os.tmpdir(), 'engram-embedding-evidence-lf-fixture-'), + ); + const verifierRelative = + '.agent/reports/evidence/production-ready/' + + 'db-embedding-stats-evidence-transport/verify-manifest.cjs'; + const testRelative = + '.agent/reports/evidence/production-ready/' + + 'db-embedding-stats-evidence-transport/verify-manifest.test.cjs'; + const captureRelative = + '.agent/reports/evidence/production-ready/' + + 'db-embedding-stats-evidence-transport-r5/coverage-capture.v1.json'; + const captureVerifierRelative = + '.agent/reports/evidence/production-ready/' + + 'db-embedding-stats-evidence-transport-r5/verify-coverage-capture.cjs'; + try { + runGitAt(fixtureRoot, ['init', '--quiet']); + runGitAt(fixtureRoot, ['config', 'core.longpaths', 'true']); + runGitAt(fixtureRoot, ['config', 'core.autocrlf', 'false']); + + const files = [ + { role: 'verifier', relative_path: verifierRelative }, + { role: 'test_harness', relative_path: testRelative }, + ].map((entry) => { + const indexBytes = gitBytes(['show', `:${entry.relative_path}`]); + const absolutePath = writeRelative(fixtureRoot, entry.relative_path, indexBytes); + return { ...entry, absolute_path: absolutePath, bytes: indexBytes }; + }); + runGitAt(fixtureRoot, ['add', '--', verifierRelative, testRelative]); + + const fixtureVerifierPath = writeRelative( + fixtureRoot, + captureVerifierRelative, + canonicalLf(fs.readFileSync(coverageCaptureVerifierPath)), + ); + const capture = { + schema_version: 1, + slice: 'DB-EMBEDDING-EVIDENCE-TRANSPORT-R5', + materialization: 'fresh-core-autocrlf-false-lf', + base_commit: '369951b61ee07cb0c405558e0f677cd1c9e90362', + core_autocrlf: 'false', + tracked_eol: '2/2 i/lf w/lf', + line_endings: 'lf-only', + files: files.map((entry) => ({ + role: entry.role, + path: entry.relative_path, + git_blob_oid: String( + runGitAt(fixtureRoot, ['rev-parse', `:${entry.relative_path}`]), + ).trim(), + git_blob_sha256: sha256(entry.bytes), + filesystem_sha256: sha256(fs.readFileSync(entry.absolute_path)), + byte_length: entry.bytes.length, + crlf_pairs: 0, + lone_lf: entry.bytes.reduce((count, byte) => count + (byte === 10 ? 1 : 0), 0), + bare_carriage_returns: 0, + })), + }; + const fixtureCapturePath = writeRelative( + fixtureRoot, + captureRelative, + Buffer.from(`${JSON.stringify(capture, null, 2)}\n`, 'utf8'), + ); + + return verify({ + repo_root: fixtureRoot, + verifier_path: fixtureVerifierPath, + capture_path: fixtureCapturePath, + covered_verifier_path: files[0].absolute_path, + }); + } finally { + fs.rmSync(fixtureRoot, { recursive: true, force: true }); + } +} + function expectFailClosed(result) { assert.notEqual(result.exit_code, 0, 'mutation must return a non-zero exit code'); assert.equal(result.output?.status, 'FAIL', result.stderr || 'mutation must emit FAIL'); @@ -329,37 +419,39 @@ test('evidence manifests reject incomplete sets and undeclared or mixed coverage ); expectFailClosed(result); - const baseline = runCoverageCaptureVerifier('materialization'); - assert.equal(baseline.exit_code, 0, baseline.stderr || JSON.stringify(baseline.output)); - assert.equal(baseline.output?.status, 'PASS'); + withCanonicalLfCoverageFixture((fixture) => { + const baseline = runCoverageCaptureVerifier('materialization', fixture); + assert.equal(baseline.exit_code, 0, baseline.stderr || JSON.stringify(baseline.output)); + assert.equal(baseline.output?.status, 'PASS'); - const undeclared = withMutation( - coverageCapturePath, - mutateJson((coverage) => { - delete coverage.materialization; - }), - () => runCoverageCaptureVerifier('materialization'), - ); - expectFailClosed(undeclared); - assert.ok( - undeclared.output.structural_errors.includes( - 'capture is missing required key: materialization', - ), - ); + const undeclared = withMutation( + fixture.capture_path, + mutateJson((coverage) => { + delete coverage.materialization; + }), + () => runCoverageCaptureVerifier('materialization', fixture), + ); + expectFailClosed(undeclared); + assert.ok( + undeclared.output.structural_errors.includes( + 'capture is missing required key: materialization', + ), + ); - const mixed = withMutation( - verifierPath, - makeMixedLineEndings, - () => runCoverageCaptureVerifier('materialization'), - ); - expectFailClosed(mixed); - assert.ok( - mixed.output.structural_errors.includes( - 'coverage file must be LF-only and byte-identical to the Git index: ' + - '.agent/reports/evidence/production-ready/' + - 'db-embedding-stats-evidence-transport/verify-manifest.cjs', - ), - ); + const mixed = withMutation( + fixture.covered_verifier_path, + makeMixedLineEndings, + () => runCoverageCaptureVerifier('materialization', fixture), + ); + expectFailClosed(mixed); + assert.ok( + mixed.output.structural_errors.includes( + 'coverage file must be LF-only and byte-identical to the Git index: ' + + '.agent/reports/evidence/production-ready/' + + 'db-embedding-stats-evidence-transport/verify-manifest.cjs', + ), + ); + }); }); test('artifact manifest rejects a missing required entry', () => { diff --git a/.agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R5.tdd.json b/.agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R5.tdd.json index d9b8579b..06c850fb 100644 --- a/.agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R5.tdd.json +++ b/.agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R5.tdd.json @@ -1,5 +1,7 @@ { "task_id": "DB-EMBEDDING-EVIDENCE-TRANSPORT-R5", + "evidence_status": "REJECTED_SUPERSEDED_BY_R6", + "correction_note": "R5 values are a historical rejected snapshot; the validateContractSchema sentinel was re-run against the exact R5 final test blob and corrected from 9/15 to 8/16.", "stack": "GO repository with Node.js evidence verifiers", "base_commit": "369951b61ee07cb0c405558e0f677cd1c9e90362", "node_version": "v24.2.0", @@ -47,8 +49,8 @@ "prove_it": { "validateContractSchema": { "sentinel": "discard structural errors and release validated subsets", - "passed_tests": 9, - "failed_tests": 15, + "passed_tests": 8, + "failed_tests": 16, "exit_code": 1 }, "verifyArtifactFiles": { @@ -71,6 +73,7 @@ } }, "coverage": { + "historical_r5_snapshot": true, "command": "node.exe --test --test-concurrency=1 --experimental-test-coverage .agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.test.cjs", "capture_manifest": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/coverage-capture.v1.json", "transcript_representation": "canonical-lf-tap-trim-trailing-table-padding", diff --git a/.agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R6.red.json b/.agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R6.red.json new file mode 100644 index 00000000..bacd1088 --- /dev/null +++ b/.agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R6.red.json @@ -0,0 +1,85 @@ +{ + "schema_version": 1, + "task_id": "DB-EMBEDDING-EVIDENCE-TRANSPORT-R6", + "phase": "RED", + "observed_at_utc": "2026-07-10T21:28:56.4495986Z", + "target_commit": "a538f6224ef31f612152470a4ecd45e78ff9d0f2", + "node_version": "v24.2.0", + "platform": "win32-x64", + "reproducer": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/red-reproduction.cjs", + "blockers": { + "ET-R5-001": { + "reproduced": true, + "malicious_process_exit_code": 7, + "malicious_stdout_sha256": "52a871ca44112dc2d4e7540f7e9548079a05619f967b4c4d9445b999d7a42daf", + "committed_transcript_sha256": "52a871ca44112dc2d4e7540f7e9548079a05619f967b4c4d9445b999d7a42daf", + "stdout_matches_committed_transcript": true, + "r5_verifier_exit_code": 0, + "r5_verifier_status": "PASS", + "r5_synthetic_parsed_exit_code": 0 + }, + "ET-R5-002": { + "reproduced": true, + "checkout_core_autocrlf": "true", + "checkout_eol": [ + "i/lf w/crlf attr/ \t.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.cjs", + "i/lf w/crlf attr/ \t.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.test.cjs" + ], + "suite_exit_code": 1, + "tests": 24, + "passed": 23, + "failed": 1 + }, + "ET-R5-003": { + "reproduced": true, + "exact_final_r5_test_blob": "8e814737c8d5f4437aeb2a97dc52220e115cba0b", + "sentinel": "discard structural errors and release validated subsets", + "suite_exit_code": 1, + "tests": 24, + "passed": 8, + "failed": 16, + "stale_claim": { + "passed": 9, + "failed": 15 + } + } + }, + "review_red": { + "prefix_collision": { + "observed_before_fix": true, + "staged_replay_blob_oid": "87cdcd95e2863967e44bc51c91cb5df26ee850b6", + "allow_prefix": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport", + "collision_probe": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-evil/payload.cjs", + "old_starts_with_result": true, + "expected_result": false, + "finding": "unbounded startsWith prefix accepted a sibling namespace" + }, + "checksum_diff_completeness": { + "observed_before_fix": true, + "observed_commit": "42ff7ff264a62c2d573eac1658cb61468075bf84", + "changed_path_count": 32, + "self_excluded_changed_paths": 2, + "expected_directly_checksummed_changed_paths": 30, + "old_manifest_entry_count": 30, + "missing_changed_path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/verify-coverage-capture.cjs", + "unexpected_unchanged_extra": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.cjs", + "old_verifier_exit_code": 0, + "old_verifier_status": "PASS", + "finding": "the checksum packet counted an unchanged load-bearing source while omitting one directly changed R5 verifier" + }, + "checkout_topology_variance": { + "observed_before_fix": true, + "observed_commit": "42ff7ff264a62c2d573eac1658cb61468075bf84", + "fresh_clone_topology": "git-directory", + "fresh_lf_suite": { "tests": 24, "passed": 24, "failed": 0, "exit_code": 0 }, + "fresh_crlf_suite": { "tests": 24, "passed": 24, "failed": 0, "exit_code": 0 }, + "fresh_lf_aggregate": { "line_percent": 89.96, "branch_percent": 75.86, "functions_percent": 95.8 }, + "fresh_crlf_aggregate": { "line_percent": 90.3, "branch_percent": 76.81, "functions_percent": 95.8 }, + "old_linked_worktree_packet_aggregate": { "line_percent": 90.51, "branch_percent": 77.36, "functions_percent": 95.8 }, + "old_fresh_clone_replay_exit_code": 1, + "old_fresh_clone_replay_error": "final replay aggregate metrics differ from committed real-run packet", + "finding": "the measured harness inherited host checkout topology and EOL branches instead of using one canonical execution repository" + } + }, + "temp_residue_after_reproduction": false +} diff --git a/.agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R6.tdd.json b/.agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R6.tdd.json new file mode 100644 index 00000000..0428bf0b --- /dev/null +++ b/.agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R6.tdd.json @@ -0,0 +1,157 @@ +{ + "schema_version": 1, + "task_id": "DB-EMBEDDING-EVIDENCE-TRANSPORT-R6", + "stack": "Go repository with Node.js evidence verifiers", + "target_base": "a538f6224ef31f612152470a4ecd45e78ff9d0f2", + "node_version": "v24.2.0", + "recorded_at_utc": "2026-07-10T23:20:32.8654914Z", + "red": { + "artifact": ".agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R6.red.json", + "blockers_reproduced_before_implementation": [ + "ET-R5-001: exit-7 process emitted byte-identical TAP while R5 verifier synthesized exit_code=0 and passed", + "ET-R5-002: core.autocrlf=true checkout produced 23/24 exit 1", + "ET-R5-003: exact R5 test blob produced 8/16, not the stale 9/15 claim" + ], + "review_prefix_collision": { + "staged_replay_blob_oid": "87cdcd95e2863967e44bc51c91cb5df26ee850b6", + "collision_probe": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-evil/payload.cjs", + "old_starts_with_result": true, + "expected_result": false + }, + "review_checksum_completeness": { + "observed_commit": "42ff7ff264a62c2d573eac1658cb61468075bf84", + "old_verifier_status": "PASS", + "missing_changed_path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/verify-coverage-capture.cjs", + "unexpected_unchanged_extra": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.cjs" + }, + "review_topology_variance": { + "observed_commit": "42ff7ff264a62c2d573eac1658cb61468075bf84", + "ordinary_clone_suite": "LF 24/24; CRLF 24/24", + "old_clone_replay": "exit 1: aggregate metrics differ from committed real-run packet" + } + }, + "green": { + "base_suite": { "tests": 24, "passed": 24, "failed": 0, "exit_code": 0 }, + "r6_tamper_suite": { "tests": 12, "passed": 12, "failed": 0, "exit_code": 0 }, + "process_envelopes": 2, + "real_exit_codes": [0, 0], + "raw_stderr_bytes": [0, 0], + "product_parity": "git-object 7/7; checkout-lf 7/7; artifact-files 5/5", + "prefix_boundary_self_test": { + "exit_code": 0, + "status": "PASS", + "rejected_collision_probes": 4, + "r5_namespace_required_by_final_diff": true + }, + "checksum_diff_completeness": { + "changed_paths": 32, + "directly_checksummed_changed_paths": 30, + "self_excluded_changed_paths": 2, + "load_bearing_unchanged_paths": 1, + "missing_changed_path_mutation": "nonzero FAIL" + } + }, + "refactor": { + "applied": true, + "patterns": [ + "strict LF materialization moved into an isolated Git fixture built from index blobs", + "checkout representation classification separated from canonical execution bytes", + "coverage capture split into raw streams, canonical transcript, real process envelope, and independent verifier", + "coverage execution materialized in an independent git-directory clone from the exact tree", + "every base-to-candidate changed path directly checksummed except two declared self-exclusions", + "final-commit replay gate separated from pre-commit capture to avoid self-referential commit identity" + ], + "post_refactor_parity": true + }, + "exact_final_source_blobs": { + "covered_verifier": { + "git_blob_oid": "75bec9c41eb5abc435f13d90848074f6608f7fce", + "sha256": "a55e59dd870659330add8f840272aa1e8829f8161779db3e9be9e6e014cf1ba4" + }, + "covered_test": { + "git_blob_oid": "caca5ec75f47c03698ac270b549a432b0de04cfe", + "sha256": "d04b8bc050182f2806972c9d30aaa7d6349ef2f56f15b3ef21f7005459bb86cc" + }, + "r6_verifier": { + "git_blob_oid": "f81ca4b1616a58049327b52adee5b9e9ab844eac", + "sha256": "eae5cf24991cf3122a85488ac57e986f589002d071d407a6228a0e6dc235481c" + }, + "r6_test": { + "git_blob_oid": "39ccc3463292a11975bda90271b3b2f169472b64", + "sha256": "d49a5b28894fd4308cf463f1d99f6fd0d58b7d389b7a717dcb5da94561872a72" + } + }, + "coverage": { + "capture_manifest_sha256": "28b5286a025794bae2c24535fe31f35e23c8d940698ab9c561aa5a0c1fd178c8", + "runs": [ + { + "run": 1, + "exit_code": 0, + "stdout_sha256": "4fa07b262ea52975cdeb007bf3f7ce15787dc801731cf274f82af19007a6921b", + "stderr_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "transcript_sha256": "dcb71f918832c790b93f9f01564e247a69ff623c50a303aa1979f61ab12cfc18" + }, + { + "run": 2, + "exit_code": 0, + "stdout_sha256": "8c6d8ae30614624a979c2423ab7c36f9f6f6c029bc4f9e1a4c91fda035164d95", + "stderr_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "transcript_sha256": "7e56b583cb602dd1ac6f156edfd5f18380991126bbb5ef42995fd5ea2089df21" + } + ], + "metrics_identical": true, + "aggregate": { "line_percent": 89.96, "branch_percent": 75.86, "functions_percent": 95.8 }, + "verifier": { "line_percent": 80.08, "branch_percent": 55.91, "functions_percent": 81.82 }, + "test_harness": { "line_percent": 99.72, "branch_percent": 94.78, "functions_percent": 100 }, + "normative_floor": { + "dimension": "aggregate.line_percent", + "observed_percent": 89.96, + "floor_percent": 80, + "margin_percent": 9.96, + "status": "PASS" + }, + "non_normative_dimensions": 8 + }, + "prove_it": { + "validateContractSchema": { + "tests": 24, + "passed": 9, + "failed": 15, + "exit_code": 1, + "stdout_sha256": "95d250957aa82fd9dc2a8e052c8d9dcc4280e02f2f98ae27ebe1b2c4c6113b1a" + }, + "verifyArtifactFiles": { + "tests": 24, + "passed": 15, + "failed": 9, + "exit_code": 1, + "stdout_sha256": "9a50ed4fb0297e1543d39d12700c3319f506eadf5f7fa4be15c1949230db8943" + }, + "r6_status_gate": { + "tests": 12, + "passed": 0, + "failed": 12, + "exit_code": 1, + "stdout_sha256": "cb8619fdbc922197cce23599b1c32759db2ffe300d4087a2515ff57922aa9e0e" + }, + "post_restore": { + "base_suite": { "tests": 24, "passed": 24, "failed": 0, "exit_code": 0 }, + "r6_tamper_suite": { "tests": 12, "passed": 12, "failed": 0, "exit_code": 0 }, + "residue": false + } + }, + "final_commit_replay": { + "verifier": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/verify-final-commit-replay.cjs", + "required_after_atomic_commit": true, + "contracts": [ + "exactly one parent equal to target_base", + "final committed verifier/test/wrapper blobs equal captured execution blobs", + "changed paths remain inside the authorized evidence namespaces", + "all changed paths are directly checksummed except the two declared checksum self-exclusions", + "fresh replay exits 0 with empty stderr and 24/24", + "replay uses the canonical independent clone and all nine dimensions equal both real-run envelopes", + "only aggregate.line_percent has a normative 80 floor; observed margin is machine-bound", + "exact final commit, tree, changed-path digest, and zero tracked residue are emitted" + ] + } +} From 331b5b195a967e7f27dca94038a3480c9afcc84f Mon Sep 17 00:00:00 2001 From: Kirill Turanskiy Date: Sat, 11 Jul 2026 02:51:32 +0300 Subject: [PATCH 047/111] docs(evidence): fail closed DB pool hygiene packet --- ...t-pool-hygiene-evidence-revision3-maker.md | 63 +++ .../Build-DBPoolHygieneEvidence.ps1 | 205 ++++++++ .../DB-TEST-POOL-HYGIENE.evidence-r3.json | 65 +++ .../DB-TEST-POOL-HYGIENE.final.json | 11 +- .../db-test-pool-hygiene/MANIFEST.json | 100 ++-- .../db-test-pool-hygiene/SHA256SUMS.txt | 15 +- .../Test-DBPoolHygieneEvidenceAdversarial.ps1 | 191 +++++--- .../Verify-DBPoolHygieneEvidence.ps1 | 453 ++++++++++++++---- .../adversarial-proof.json | 156 +++++- .../db-test-pool-hygiene/verifier-proof.json | 9 +- 10 files changed, 1071 insertions(+), 197 deletions(-) create mode 100644 .agent/reports/2026-07-11-db-test-pool-hygiene-evidence-revision3-maker.md create mode 100644 .agent/reports/evidence/production-ready/db-test-pool-hygiene/Build-DBPoolHygieneEvidence.ps1 create mode 100644 .agent/reports/evidence/production-ready/db-test-pool-hygiene/DB-TEST-POOL-HYGIENE.evidence-r3.json diff --git a/.agent/reports/2026-07-11-db-test-pool-hygiene-evidence-revision3-maker.md b/.agent/reports/2026-07-11-db-test-pool-hygiene-evidence-revision3-maker.md new file mode 100644 index 00000000..d860880d --- /dev/null +++ b/.agent/reports/2026-07-11-db-test-pool-hygiene-evidence-revision3-maker.md @@ -0,0 +1,63 @@ +# DB test pool hygiene evidence revision 3 — maker report + +## Decision + +R2 is superseded for evidence acceptance. Its product candidate remains unchanged at +`276337b3e96aa5af6d2e7dd9a0002ff957e5ffc9`, but the R2 verifier failed open for +four evidence-integrity classes: coherent omission of a changed path, non-canonical +ordering, JSON type coercion, and numeric-string coercion. + +R3 repairs the evidence transport only. It does not modify product or test code. + +## Immutable lineage contract + +- Product candidate: `276337b3e96aa5af6d2e7dd9a0002ff957e5ffc9` +- R3 direct parent: `68242c48aaad62ec087166eeb9ea32f14d189450` +- Branch: `work/prc-db-test-pool-hygiene-evidence-r3` +- Product blob retained exactly: + `internal/db/gorm/candidate_store_test.go` = + `7337f1bd8da4fb315de842eea2e3cce5476250a3` / + `62260c1a2e0705b065295322dd23fcf9b17fd47cb5ebc64134630788e2d23e09` +- Inventory retained exactly: 83 call sites in 8 files at product parent + `bd68c05baf4b7250096dd84f56bebea2aa555970`. + +The final commit SHA cannot be embedded in its own tree. It is reported out of band +with the final tree, parent, changed-path list, and gate results. + +## R3 closure + +1. **Whole-delta completeness.** The verifier derives the changed-path set from + `276337b3..candidate`, not from the R2 parent. Every changed path must be a + manifest entry unless it is one of two exact self-references. `MANIFEST.json` + is excluded from its own entries but bound by `SHA256SUMS.txt`; + `SHA256SUMS.txt` alone is self-excluded. Both dynamic proof JSON files are + ordinary manifest and checksum entries. +2. **Canonical order.** Manifest and checksum paths must be unique and strictly + increasing under `StringComparer.Ordinal`. Reversal and duplication fail even + when all hashes are coherently regenerated. +3. **Strict raw JSON schema.** `System.Text.Json` validates raw kinds before any + PowerShell object conversion. Required strings, arrays, booleans, and + non-negative integer tokens reject scalar/array coercion, numeric strings, + decimals, missing fields, duplicate properties, and `null`. +4. **Adversarial proof.** The committed harness covers baseline, coherent missing + changed path, coherent unsorted and duplicate packets, wrong raw types, nulls, + CRLF bytes, wrong representation, and false 76/6 inventory counts. + +## Representation and generation + +The contract bytes are exact LF Git blob bytes (`git cat-file blob`). The builder +selects every tracked DB-pool evidence artifact, every matching maker report, and +the accepted product test blob from the Git index. It writes the manifest first and +the outer checksum second. The final verifier then checks the index packet; the +same verifier is suitable for an independent immutable-revision replay. + +## Verification + +Final results are captured in: + +- `DB-TEST-POOL-HYGIENE.evidence-r3.json` +- `verifier-proof.json` +- `adversarial-proof.json` + +The maker handoff is not acceptance. A fresh checker and root review remain +required before integration. diff --git a/.agent/reports/evidence/production-ready/db-test-pool-hygiene/Build-DBPoolHygieneEvidence.ps1 b/.agent/reports/evidence/production-ready/db-test-pool-hygiene/Build-DBPoolHygieneEvidence.ps1 new file mode 100644 index 00000000..e6d8d7c5 --- /dev/null +++ b/.agent/reports/evidence/production-ready/db-test-pool-hygiene/Build-DBPoolHygieneEvidence.ps1 @@ -0,0 +1,205 @@ +param( + [Parameter(Mandatory = $true)] + [string]$RepositoryRoot, + + [string]$ProductCandidateSHA = '276337b3e96aa5af6d2e7dd9a0002ff957e5ffc9', + + [string]$ManifestPath = '.agent/reports/evidence/production-ready/db-test-pool-hygiene/MANIFEST.json', + + [string]$SumsPath = '.agent/reports/evidence/production-ready/db-test-pool-hygiene/SHA256SUMS.txt' +) + +$ErrorActionPreference = 'Stop' +$utf8Strict = [Text.UTF8Encoding]::new($false, $true) +$utf8NoBom = [Text.UTF8Encoding]::new($false) +$ordinal = [StringComparer]::Ordinal +$resolvedRepository = (Resolve-Path -LiteralPath $RepositoryRoot).Path +$evidencePrefix = '.agent/reports/evidence/production-ready/db-test-pool-hygiene/' +$productBlobPath = 'internal/db/gorm/candidate_store_test.go' +$manifestExclusions = @($ManifestPath, $SumsPath) +$checksumExclusions = @($SumsPath) + +function Invoke-GitRaw { + param([Parameter(Mandatory = $true)][string[]]$Arguments) + + $startInfo = [Diagnostics.ProcessStartInfo]::new() + $startInfo.FileName = 'git' + $startInfo.WorkingDirectory = $resolvedRepository + $startInfo.UseShellExecute = $false + $startInfo.RedirectStandardOutput = $true + $startInfo.RedirectStandardError = $true + foreach ($argument in $Arguments) { + $startInfo.ArgumentList.Add($argument) + } + + $process = [Diagnostics.Process]::Start($startInfo) + $stream = [IO.MemoryStream]::new() + $process.StandardOutput.BaseStream.CopyTo($stream) + $standardError = $process.StandardError.ReadToEnd() + $process.WaitForExit() + if ($process.ExitCode -ne 0) { + throw "git $($Arguments -join ' ') failed: $standardError" + } + return $stream.ToArray() +} + +function Convert-BytesToText { + param([Parameter(Mandatory = $true)][byte[]]$Bytes) + return $utf8Strict.GetString($Bytes) +} + +function Convert-NulList { + param([Parameter(Mandatory = $true)][byte[]]$Bytes) + + $text = Convert-BytesToText -Bytes $Bytes + return @($text -split [char]0 | Where-Object { $_ -ne '' }) +} + +function Sort-Ordinal { + param([Parameter(Mandatory = $true)][string[]]$Values) + + $copy = [string[]]@($Values) + [Array]::Sort($copy, $ordinal) + return $copy +} + +function Get-IndexObjectEvidence { + param([Parameter(Mandatory = $true)][string]$Path) + + $oid = (Convert-BytesToText (Invoke-GitRaw -Arguments @('rev-parse', ":$Path"))).Trim() + $type = (Convert-BytesToText (Invoke-GitRaw -Arguments @('cat-file', '-t', $oid))).Trim() + if ($type -ne 'blob') { + throw "index object for $Path is $type, expected blob" + } + $bytes = Invoke-GitRaw -Arguments @('cat-file', 'blob', $oid) + if ($bytes -contains [byte]0x0D) { + throw "index blob contains CR, LF bytes are required: $Path" + } + return [pscustomobject]@{ + oid = $oid + bytes = $bytes + length = $bytes.Length + sha256 = [Convert]::ToHexString([Security.Cryptography.SHA256]::HashData($bytes)).ToLowerInvariant() + } +} + +$head = (Convert-BytesToText (Invoke-GitRaw -Arguments @('rev-parse', 'HEAD'))).Trim() +$changedPaths = Convert-NulList (Invoke-GitRaw -Arguments @('diff', '--cached', '--name-only', '-z', $ProductCandidateSHA, '--')) +$changedPaths = Sort-Ordinal -Values $changedPaths +$productOrTestChanges = @($changedPaths | Where-Object { -not $_.StartsWith('.agent/reports/', [StringComparison]::Ordinal) }) +if ($productOrTestChanges.Count -ne 0) { + throw "evidence revision changes forbidden product/test paths: $($productOrTestChanges -join ', ')" +} + +$trackedPaths = Convert-NulList (Invoke-GitRaw -Arguments @('ls-files', '-z')) +$entryPaths = @($trackedPaths | Where-Object { + ($_.StartsWith($evidencePrefix, [StringComparison]::Ordinal) -or + ($_ -match '^\.agent/reports/[0-9]{4}-[0-9]{2}-[0-9]{2}-db-test-pool-hygiene.*\.md$') -or + $_ -eq $productBlobPath) -and + -not $manifestExclusions.Contains($_) +}) +$entryPaths = Sort-Ordinal -Values $entryPaths + +$entries = [Collections.Generic.List[object]]::new() +$entryHashes = @{} +foreach ($path in $entryPaths) { + $object = Get-IndexObjectEvidence -Path $path + $entryHashes[$path] = $object.sha256 + $entries.Add([ordered]@{ + path = $path + git_blob_oid = $object.oid + bytes = [int64]$object.length + sha256 = $object.sha256 + }) +} + +$directChangedPaths = @($changedPaths | Where-Object { -not $manifestExclusions.Contains($_) }) +$missingChangedPaths = @($directChangedPaths | Where-Object { -not $entryPaths.Contains($_) }) +if ($missingChangedPaths.Count -ne 0) { + throw "builder selection omits changed evidence paths: $($missingChangedPaths -join ', ')" +} + +$manifest = [ordered]@{ + schema_version = 3 + generated_utc = [DateTime]::UtcNow.ToString('o') + status = 'READY_FOR_RECHECK_EVIDENCE_R3' + product_parent_sha = 'bd68c05baf4b7250096dd84f56bebea2aa555970' + product_candidate_sha = $ProductCandidateSHA + evidence_revision_parent_sha = $head + evidence_revision_target = 'GitIndex' + evidence_delta = [ordered]@{ + comparison = "$ProductCandidateSHA..GitIndex" + changed_path_count = [int64]$changedPaths.Count + directly_manifest_bound_count = [int64]$directChangedPaths.Count + product_or_test_paths_changed = @() + manifest_entry_self_excluded_paths = $manifestExclusions + checksum_self_excluded_paths = $checksumExclusions + } + representation_contract = [ordered]@{ + id = 'git-blob-bytes-v1' + digest = 'SHA-256' + object_type = 'blob' + path_binding = 'each path at the verified Git index/revision resolves to git_blob_oid' + contract_bytes = 'git cat-file blob exact stdout bytes' + working_tree_bytes = 'excluded; raw CRLF checkout bytes fail verification' + text_git_blob_line_endings = 'LF' + manifest_self_reference = 'excluded-from-manifest-entries-bound-by-outer-checksum' + outer_checksum_path = $SumsPath + outer_checksum_generation_order = 'manifest-first-checksum-second' + outer_checksum_self_reference = 'excluded' + } + product_test_blob = [ordered]@{ + path = $productBlobPath + git_blob_oid = '7337f1bd8da4fb315de842eea2e3cce5476250a3' + sha256 = '62260c1a2e0705b065295322dd23fcf9b17fd47cb5ebc64134630788e2d23e09' + byte_identical_to_product_candidate = $true + } + inventory = [ordered]@{ + parent_sha = 'bd68c05baf4b7250096dd84f56bebea2aa555970' + required_call_sites = [int64]83 + required_files = [int64]8 + path = '.agent/reports/evidence/production-ready/db-test-pool-hygiene/INVENTORY.json' + } + entry_count = [int64]$entries.Count + entries = @($entries) +} + +$manifestJson = (($manifest | ConvertTo-Json -Depth 12) -replace "`r`n", "`n") + "`n" +$manifestBytes = $utf8NoBom.GetBytes($manifestJson) +if ($manifestBytes -contains [byte]0x0D) { + throw 'generated manifest contains CR' +} +$resolvedManifest = Join-Path $resolvedRepository $ManifestPath +[IO.File]::WriteAllText($resolvedManifest, $manifestJson, $utf8NoBom) +$manifestHash = [Convert]::ToHexString([Security.Cryptography.SHA256]::HashData($manifestBytes)).ToLowerInvariant() + +$sumPaths = Sort-Ordinal -Values @($entryPaths + $ManifestPath) +$sumLines = [Collections.Generic.List[string]]::new() +$sumLines.Add('# representation_contract=git-blob-bytes-v1') +$sumLines.Add('# manifest_generation_order=manifest-first-checksum-second') +$sumLines.Add('# checksum_self_reference=excluded') +foreach ($path in $sumPaths) { + $hash = if ($path -eq $ManifestPath) { $manifestHash } else { $entryHashes[$path] } + if ([string]::IsNullOrWhiteSpace($hash)) { + throw "missing hash for checksum path: $path" + } + $sumLines.Add("$hash $path") +} +$sumsText = ($sumLines -join "`n") + "`n" +$sumsBytes = $utf8NoBom.GetBytes($sumsText) +if ($sumsBytes -contains [byte]0x0D) { + throw 'generated outer checksum contains CR' +} +$resolvedSums = Join-Path $resolvedRepository $SumsPath +[IO.File]::WriteAllText($resolvedSums, $sumsText, $utf8NoBom) + +[ordered]@{ + status = 'BUILT' + source_mode = 'GitIndex' + evidence_revision_parent_sha = $head + changed_path_count = $changedPaths.Count + manifest_entries = $entries.Count + checksum_entries = $sumPaths.Count + manifest_self_excluded_paths = $manifestExclusions + checksum_self_excluded_paths = $checksumExclusions +} | ConvertTo-Json -Depth 6 diff --git a/.agent/reports/evidence/production-ready/db-test-pool-hygiene/DB-TEST-POOL-HYGIENE.evidence-r3.json b/.agent/reports/evidence/production-ready/db-test-pool-hygiene/DB-TEST-POOL-HYGIENE.evidence-r3.json new file mode 100644 index 00000000..15fa98aa --- /dev/null +++ b/.agent/reports/evidence/production-ready/db-test-pool-hygiene/DB-TEST-POOL-HYGIENE.evidence-r3.json @@ -0,0 +1,65 @@ +{ + "schema_version": 3, + "status": "READY_FOR_RECHECK", + "product_parent_sha": "bd68c05baf4b7250096dd84f56bebea2aa555970", + "product_candidate_sha": "276337b3e96aa5af6d2e7dd9a0002ff957e5ffc9", + "evidence_revision_parent_sha": "68242c48aaad62ec087166eeb9ea32f14d189450", + "branch": "work/prc-db-test-pool-hygiene-evidence-r3", + "worktree": "D:\\Dev\\engram\\.w\\dbph-r3", + "scope": "evidence-only", + "product_or_test_paths_changed_by_revision": [], + "whole_delta_base_sha": "276337b3e96aa5af6d2e7dd9a0002ff957e5ffc9", + "whole_delta_changed_paths": 16, + "whole_delta_directly_manifest_bound_paths": 14, + "exact_self_exclusions": { + "manifest_entries": [ + ".agent/reports/evidence/production-ready/db-test-pool-hygiene/MANIFEST.json", + ".agent/reports/evidence/production-ready/db-test-pool-hygiene/SHA256SUMS.txt" + ], + "outer_checksum": [ + ".agent/reports/evidence/production-ready/db-test-pool-hygiene/SHA256SUMS.txt" + ] + }, + "dynamic_proofs_directly_bound": [ + ".agent/reports/evidence/production-ready/db-test-pool-hygiene/adversarial-proof.json", + ".agent/reports/evidence/production-ready/db-test-pool-hygiene/verifier-proof.json" + ], + "product_test_blob": { + "path": "internal/db/gorm/candidate_store_test.go", + "git_blob_oid": "7337f1bd8da4fb315de842eea2e3cce5476250a3", + "sha256": "62260c1a2e0705b065295322dd23fcf9b17fd47cb5ebc64134630788e2d23e09", + "byte_identical_to_product_candidate": true + }, + "inventory": { + "parent_sha": "bd68c05baf4b7250096dd84f56bebea2aa555970", + "call_sites": 83, + "files": 8 + }, + "verification": { + "baseline": "PASS", + "manifest_entries": 30, + "checksum_entries": 31, + "inventory_call_sites": 83, + "inventory_files": 8, + "adversarial_cases": 12, + "adversarial_status": "PASS", + "adversarial_case_names": [ + "baseline", + "missing_changed_path", + "unsorted_manifest_and_sums", + "duplicate_manifest_and_sums", + "wrong_type_representation_id_array", + "null_representation_id", + "wrong_type_exclusions_scalar", + "wrong_type_inventory_numeric_strings", + "null_inventory_count", + "crlf_raw_representation", + "incorrect_representation_contract", + "false_inventory_76_6" + ], + "git_diff_check": "PASS", + "gitleaks_reports_scan": "PASS", + "gitleaks_version": "8.30.0" + }, + "handoff_commit": "REPORTED_OUT_OF_BAND_TO_AVOID_SELF_REFERENCE" +} diff --git a/.agent/reports/evidence/production-ready/db-test-pool-hygiene/DB-TEST-POOL-HYGIENE.final.json b/.agent/reports/evidence/production-ready/db-test-pool-hygiene/DB-TEST-POOL-HYGIENE.final.json index 49fdd939..cfed381f 100644 --- a/.agent/reports/evidence/production-ready/db-test-pool-hygiene/DB-TEST-POOL-HYGIENE.final.json +++ b/.agent/reports/evidence/production-ready/db-test-pool-hygiene/DB-TEST-POOL-HYGIENE.final.json @@ -1,8 +1,8 @@ { - "status": "READY_FOR_RECHECK_EVIDENCE_R2", + "status": "READY_FOR_RECHECK_EVIDENCE_R3", "parent_sha": "bd68c05baf4b7250096dd84f56bebea2aa555970", "product_candidate_sha": "276337b3e96aa5af6d2e7dd9a0002ff957e5ffc9", - "branch": "work/prc-db-test-pool-hygiene-evidence-r2", + "branch": "work/prc-db-test-pool-hygiene-evidence-r3", "changed_implementation_paths": [ "internal/db/gorm/candidate_store_test.go" ], @@ -42,8 +42,13 @@ }, "evidence_contract": { "representation": "git-blob-bytes-v1", - "manifest_self_reference": "excluded", + "whole_delta_base_sha": "276337b3e96aa5af6d2e7dd9a0002ff957e5ffc9", + "manifest_self_reference": "excluded from manifest entries and bound by outer checksum", "outer_checksum_generation_order": "final manifest first; outer checksum second", + "outer_checksum_self_reference": "excluded", + "dynamic_proofs_directly_bound": true, + "canonical_path_order": "StringComparer.Ordinal", + "strict_raw_json_types": true, "inventory_parent_sha": "bd68c05baf4b7250096dd84f56bebea2aa555970", "inventory_required_call_sites": 83, "inventory_required_files": 8 diff --git a/.agent/reports/evidence/production-ready/db-test-pool-hygiene/MANIFEST.json b/.agent/reports/evidence/production-ready/db-test-pool-hygiene/MANIFEST.json index 551bae16..e4cd09d0 100644 --- a/.agent/reports/evidence/production-ready/db-test-pool-hygiene/MANIFEST.json +++ b/.agent/reports/evidence/production-ready/db-test-pool-hygiene/MANIFEST.json @@ -1,29 +1,42 @@ { - "schema_version": 2, - "generated_utc": "2026-07-10T14:10:39.8450122Z", - "status": "READY_FOR_RECHECK", + "schema_version": 3, + "generated_utc": "2026-07-10T23:46:22.1600511Z", + "status": "READY_FOR_RECHECK_EVIDENCE_R3", "product_parent_sha": "bd68c05baf4b7250096dd84f56bebea2aa555970", "product_candidate_sha": "276337b3e96aa5af6d2e7dd9a0002ff957e5ffc9", - "evidence_revision_base_sha": "276337b3e96aa5af6d2e7dd9a0002ff957e5ffc9", - "evidence_revision_head_sha": null, - "evidence_revision_head_reason": "reported after the atomic commit because a commit cannot embed its own hash", + "evidence_revision_parent_sha": "68242c48aaad62ec087166eeb9ea32f14d189450", + "evidence_revision_target": "GitIndex", + "evidence_delta": { + "comparison": "276337b3e96aa5af6d2e7dd9a0002ff957e5ffc9..GitIndex", + "changed_path_count": 16, + "directly_manifest_bound_count": 14, + "product_or_test_paths_changed": [], + "manifest_entry_self_excluded_paths": [ + ".agent/reports/evidence/production-ready/db-test-pool-hygiene/MANIFEST.json", + ".agent/reports/evidence/production-ready/db-test-pool-hygiene/SHA256SUMS.txt" + ], + "checksum_self_excluded_paths": [ + ".agent/reports/evidence/production-ready/db-test-pool-hygiene/SHA256SUMS.txt" + ] + }, "representation_contract": { "id": "git-blob-bytes-v1", "digest": "SHA-256", "object_type": "blob", - "path_binding": "each path at the verified Git index/revision must resolve to git_blob_oid", + "path_binding": "each path at the verified Git index/revision resolves to git_blob_oid", "contract_bytes": "git cat-file blob exact stdout bytes", - "working_tree_bytes": "excluded; raw CRLF checkout bytes are expected to fail", + "working_tree_bytes": "excluded; raw CRLF checkout bytes fail verification", "text_git_blob_line_endings": "LF", - "manifest_self_reference": "excluded", + "manifest_self_reference": "excluded-from-manifest-entries-bound-by-outer-checksum", "outer_checksum_path": ".agent/reports/evidence/production-ready/db-test-pool-hygiene/SHA256SUMS.txt", "outer_checksum_generation_order": "manifest-first-checksum-second", - "outer_checksum_self_reference": "excluded", - "dynamic_attestations_excluded": [ - ".agent/reports/evidence/production-ready/db-test-pool-hygiene/adversarial-proof.json", - ".agent/reports/evidence/production-ready/db-test-pool-hygiene/verifier-proof.json" - ], - "exclusion_reason": "dynamic run attestations are anchored by the final Git commit; including them would require rewriting checksums after verification" + "outer_checksum_self_reference": "excluded" + }, + "product_test_blob": { + "path": "internal/db/gorm/candidate_store_test.go", + "git_blob_oid": "7337f1bd8da4fb315de842eea2e3cce5476250a3", + "sha256": "62260c1a2e0705b065295322dd23fcf9b17fd47cb5ebc64134630788e2d23e09", + "byte_identical_to_product_candidate": true }, "inventory": { "parent_sha": "bd68c05baf4b7250096dd84f56bebea2aa555970", @@ -31,7 +44,14 @@ "required_files": 8, "path": ".agent/reports/evidence/production-ready/db-test-pool-hygiene/INVENTORY.json" }, + "entry_count": 30, "entries": [ + { + "path": ".agent/reports/2026-07-10-db-test-pool-hygiene-evidence-revision-maker.md", + "git_blob_oid": "88960a7d51986a1c0de49ac4b8d4e447f0866bac", + "bytes": 5303, + "sha256": "86a843700a146ad46dfcb6e8c7cb9b8433312dcd755383761e2313d3b13c72dc" + }, { "path": ".agent/reports/2026-07-10-db-test-pool-hygiene-maker.md", "git_blob_oid": "d951bf50086e78699edbcc59be2a7126461e9f80", @@ -39,10 +59,10 @@ "sha256": "51c95f8471312f6fd81e1ba2d58f206d7bb368032079c47b55bd0e7147cd8001" }, { - "path": ".agent/reports/2026-07-10-db-test-pool-hygiene-evidence-revision-maker.md", - "git_blob_oid": "88960a7d51986a1c0de49ac4b8d4e447f0866bac", - "bytes": 5303, - "sha256": "86a843700a146ad46dfcb6e8c7cb9b8433312dcd755383761e2313d3b13c72dc" + "path": ".agent/reports/2026-07-11-db-test-pool-hygiene-evidence-revision3-maker.md", + "git_blob_oid": "d860880d0466e77c152bda3946352bd0387a3e59", + "bytes": 3008, + "sha256": "7fcc3759c36bc91b7fd0e04dc3d9309df3b8b8c56585ed562e73bb362002ba34" }, { "path": ".agent/reports/evidence/production-ready/db-test-pool-hygiene/01-parent-broad.summary.log", @@ -134,17 +154,29 @@ "bytes": 473, "sha256": "6b74e1f64b909f8ffe0042fbc7d2dc6d8310752f2c7398352a395d6d6362b677" }, + { + "path": ".agent/reports/evidence/production-ready/db-test-pool-hygiene/Build-DBPoolHygieneEvidence.ps1", + "git_blob_oid": "e6d8d7c599743ef5cf73259ae441d527b503ba78", + "bytes": 8339, + "sha256": "57557b01f087ab8040747fb1183a965582b80a1c4b58b743ed2606f9bbe45339" + }, { "path": ".agent/reports/evidence/production-ready/db-test-pool-hygiene/DB-TEST-POOL-HYGIENE.evidence-r2.json", "git_blob_oid": "73438a1ea8917c62666d779a356e09eaa7768a85", "bytes": 2711, "sha256": "c4fdaad603d5c03954cd1026afc9a9c01c0e0963c367390247a795b5382584e1" }, + { + "path": ".agent/reports/evidence/production-ready/db-test-pool-hygiene/DB-TEST-POOL-HYGIENE.evidence-r3.json", + "git_blob_oid": "15fa98aae65c4e32b423a8785465b32f0921c900", + "bytes": 2438, + "sha256": "69439533993845249230a227189e1a7ffc63d4f0819218da2d0ecceb782c3c6c" + }, { "path": ".agent/reports/evidence/production-ready/db-test-pool-hygiene/DB-TEST-POOL-HYGIENE.final.json", - "git_blob_oid": "49fdd939d5b3af05cedc9a2dc1c0a2845ce9d421", - "bytes": 1742, - "sha256": "91d76ab5a76e0ad0758aa3ba6962e0e93b8d912ac2a8166f438976d63a7c7918" + "git_blob_oid": "cfed381f2a57336cb8d7b7c448f13b9b07642cfb", + "bytes": 2045, + "sha256": "8acb07220208e4d73f3915ee545db5978026bad6730fee2f4ab7cfa97515c6d5" }, { "path": ".agent/reports/evidence/production-ready/db-test-pool-hygiene/DB-TEST-POOL-HYGIENE.red.json", @@ -166,15 +198,27 @@ }, { "path": ".agent/reports/evidence/production-ready/db-test-pool-hygiene/Test-DBPoolHygieneEvidenceAdversarial.ps1", - "git_blob_oid": "cd6754d9bf926aaabda85dfe775f5e7fa716b3dc", - "bytes": 9341, - "sha256": "d82926f353a9f3924c6047a279eb22dfb201da59fe190098d3fef4a6c058a502" + "git_blob_oid": "5e179a6127283405fd30bfacde29165e7bf17734", + "bytes": 14938, + "sha256": "1217a0a5b94e6c4c99bfdb3be28152de980c581c61aeab3242f8088339df50e6" }, { "path": ".agent/reports/evidence/production-ready/db-test-pool-hygiene/Verify-DBPoolHygieneEvidence.ps1", - "git_blob_oid": "1a83d15c370cc74e3eed7b41316c7dac11f175c5", - "bytes": 12657, - "sha256": "56b807d244df9c0f8ac2f8405d2eb6bfec90a6198ae8f9a695a97e71a3d16632" + "git_blob_oid": "45da5886276d41c2d7a5bc5a19097e49c3c4e4b0", + "bytes": 30427, + "sha256": "3ca48c3ff8765164a4a4ad26554180e0ea8bc778f65fe8818bc3b850e1828393" + }, + { + "path": ".agent/reports/evidence/production-ready/db-test-pool-hygiene/adversarial-proof.json", + "git_blob_oid": "a13f6471c2c6ea9a14efd6e5346880ad7c742e6c", + "bytes": 19900, + "sha256": "d96e7bcf50a711eed43d16868ad275d9a942e8d998e35f71bef2cf066a9abc51" + }, + { + "path": ".agent/reports/evidence/production-ready/db-test-pool-hygiene/verifier-proof.json", + "git_blob_oid": "5730d460cfbbd20e8a1f284311962a4ef3b83c48", + "bytes": 404, + "sha256": "10f4078c1d6044450fd022ae2e7cc777d2f059121bda0923d395566007e01928" }, { "path": "internal/db/gorm/candidate_store_test.go", diff --git a/.agent/reports/evidence/production-ready/db-test-pool-hygiene/SHA256SUMS.txt b/.agent/reports/evidence/production-ready/db-test-pool-hygiene/SHA256SUMS.txt index 36b957e7..f5c69153 100644 --- a/.agent/reports/evidence/production-ready/db-test-pool-hygiene/SHA256SUMS.txt +++ b/.agent/reports/evidence/production-ready/db-test-pool-hygiene/SHA256SUMS.txt @@ -1,8 +1,9 @@ # representation_contract=git-blob-bytes-v1 # manifest_generation_order=manifest-first-checksum-second # checksum_self_reference=excluded -51c95f8471312f6fd81e1ba2d58f206d7bb368032079c47b55bd0e7147cd8001 .agent/reports/2026-07-10-db-test-pool-hygiene-maker.md 86a843700a146ad46dfcb6e8c7cb9b8433312dcd755383761e2313d3b13c72dc .agent/reports/2026-07-10-db-test-pool-hygiene-evidence-revision-maker.md +51c95f8471312f6fd81e1ba2d58f206d7bb368032079c47b55bd0e7147cd8001 .agent/reports/2026-07-10-db-test-pool-hygiene-maker.md +7fcc3759c36bc91b7fd0e04dc3d9309df3b8b8c56585ed562e73bb362002ba34 .agent/reports/2026-07-11-db-test-pool-hygiene-evidence-revision3-maker.md d1aa9c7a603a140be74bccc1170e78bfa2007f8aca0e48473c5b5a749a97c435 .agent/reports/evidence/production-ready/db-test-pool-hygiene/01-parent-broad.summary.log 765e7e93a5b9a2384d0417199cdd66dc816f97e178219473d18b7b0a93cd31a7 .agent/reports/evidence/production-ready/db-test-pool-hygiene/02-parent-red.log 9fbe284df01cece683d0dc6938b370dabbea030af3e39047f382e9e3c3cd4d9b .agent/reports/evidence/production-ready/db-test-pool-hygiene/03-green-focused.log @@ -18,12 +19,16 @@ b9acc25599272b3942beaaaabd5a042c86128765e3d8b1b9ad142b6b0d1fc20f .agent/reports 31b07bacde4ad835c55a4aa85e09f01edd2dfeb0887011547b4b17d4f686b40e .agent/reports/evidence/production-ready/db-test-pool-hygiene/13-final-residue.log 4c544c5ea7e5e0f7d6518f3af222054589bd258e6aa373c833789ec2532f7a2d .agent/reports/evidence/production-ready/db-test-pool-hygiene/14-evidence-r2-focused.log 6b74e1f64b909f8ffe0042fbc7d2dc6d8310752f2c7398352a395d6d6362b677 .agent/reports/evidence/production-ready/db-test-pool-hygiene/15-evidence-r2-static.txt +57557b01f087ab8040747fb1183a965582b80a1c4b58b743ed2606f9bbe45339 .agent/reports/evidence/production-ready/db-test-pool-hygiene/Build-DBPoolHygieneEvidence.ps1 c4fdaad603d5c03954cd1026afc9a9c01c0e0963c367390247a795b5382584e1 .agent/reports/evidence/production-ready/db-test-pool-hygiene/DB-TEST-POOL-HYGIENE.evidence-r2.json -91d76ab5a76e0ad0758aa3ba6962e0e93b8d912ac2a8166f438976d63a7c7918 .agent/reports/evidence/production-ready/db-test-pool-hygiene/DB-TEST-POOL-HYGIENE.final.json +69439533993845249230a227189e1a7ffc63d4f0819218da2d0ecceb782c3c6c .agent/reports/evidence/production-ready/db-test-pool-hygiene/DB-TEST-POOL-HYGIENE.evidence-r3.json +8acb07220208e4d73f3915ee545db5978026bad6730fee2f4ab7cfa97515c6d5 .agent/reports/evidence/production-ready/db-test-pool-hygiene/DB-TEST-POOL-HYGIENE.final.json 98398e3e46628fd0f3f08ca54b1baa1b96f70554ac7316712a4e1906d96e0cb0 .agent/reports/evidence/production-ready/db-test-pool-hygiene/DB-TEST-POOL-HYGIENE.red.json 64a1b454068b5480af0aa512d5157222a4760798f4e9689aa9887643939ccb10 .agent/reports/evidence/production-ready/db-test-pool-hygiene/INVENTORY.json fb886ee1749c7b2d45adf9bd43ac2a1434cab24c9ce35bb548f1751bd9e71861 .agent/reports/evidence/production-ready/db-test-pool-hygiene/Invoke-DBPoolHygieneGo.ps1 -d82926f353a9f3924c6047a279eb22dfb201da59fe190098d3fef4a6c058a502 .agent/reports/evidence/production-ready/db-test-pool-hygiene/Test-DBPoolHygieneEvidenceAdversarial.ps1 -56b807d244df9c0f8ac2f8405d2eb6bfec90a6198ae8f9a695a97e71a3d16632 .agent/reports/evidence/production-ready/db-test-pool-hygiene/Verify-DBPoolHygieneEvidence.ps1 +9dc56a31ff2bb74db9d405a83a9bc69b135bd8027ed626d71d2898609cfeb167 .agent/reports/evidence/production-ready/db-test-pool-hygiene/MANIFEST.json +1217a0a5b94e6c4c99bfdb3be28152de980c581c61aeab3242f8088339df50e6 .agent/reports/evidence/production-ready/db-test-pool-hygiene/Test-DBPoolHygieneEvidenceAdversarial.ps1 +3ca48c3ff8765164a4a4ad26554180e0ea8bc778f65fe8818bc3b850e1828393 .agent/reports/evidence/production-ready/db-test-pool-hygiene/Verify-DBPoolHygieneEvidence.ps1 +d96e7bcf50a711eed43d16868ad275d9a942e8d998e35f71bef2cf066a9abc51 .agent/reports/evidence/production-ready/db-test-pool-hygiene/adversarial-proof.json +10f4078c1d6044450fd022ae2e7cc777d2f059121bda0923d395566007e01928 .agent/reports/evidence/production-ready/db-test-pool-hygiene/verifier-proof.json 62260c1a2e0705b065295322dd23fcf9b17fd47cb5ebc64134630788e2d23e09 internal/db/gorm/candidate_store_test.go -9c208ea68ebff542e14b937f69fce785dce75abaadadabe8c80a4b018b76206b .agent/reports/evidence/production-ready/db-test-pool-hygiene/MANIFEST.json diff --git a/.agent/reports/evidence/production-ready/db-test-pool-hygiene/Test-DBPoolHygieneEvidenceAdversarial.ps1 b/.agent/reports/evidence/production-ready/db-test-pool-hygiene/Test-DBPoolHygieneEvidenceAdversarial.ps1 index cd6754d9..5e179a61 100644 --- a/.agent/reports/evidence/production-ready/db-test-pool-hygiene/Test-DBPoolHygieneEvidenceAdversarial.ps1 +++ b/.agent/reports/evidence/production-ready/db-test-pool-hygiene/Test-DBPoolHygieneEvidenceAdversarial.ps1 @@ -19,54 +19,90 @@ param( ) $ErrorActionPreference = 'Stop' +$utf8Strict = [Text.UTF8Encoding]::new($false, $true) $utf8NoBom = [Text.UTF8Encoding]::new($false) $resolvedRepository = (Resolve-Path -LiteralPath $RepositoryRoot).Path $resolvedVerifier = (Resolve-Path -LiteralPath (Join-Path $resolvedRepository $VerifierPath)).Path $tempBase = [IO.Path]::GetFullPath([IO.Path]::GetTempPath()) -$tempRoot = Join-Path $tempBase ("engram-dbph-evidence-r2-" + [Guid]::NewGuid().ToString('N')) +$tempRoot = Join-Path $tempBase ("engram-dbph-evidence-r3-" + [Guid]::NewGuid().ToString('N')) if (-not $tempRoot.StartsWith($tempBase, [StringComparison]::OrdinalIgnoreCase) -or - -not [IO.Path]::GetFileName($tempRoot).StartsWith('engram-dbph-evidence-r2-', [StringComparison]::Ordinal)) { + -not [IO.Path]::GetFileName($tempRoot).StartsWith('engram-dbph-evidence-r3-', [StringComparison]::Ordinal)) { throw "unsafe temporary root: $tempRoot" } [IO.Directory]::CreateDirectory($tempRoot) | Out-Null function Invoke-GitRaw { param([Parameter(Mandatory = $true)][string[]]$Arguments) + $startInfo = [Diagnostics.ProcessStartInfo]::new() $startInfo.FileName = 'git' $startInfo.WorkingDirectory = $resolvedRepository $startInfo.UseShellExecute = $false $startInfo.RedirectStandardOutput = $true $startInfo.RedirectStandardError = $true - foreach ($argument in $Arguments) { - $startInfo.ArgumentList.Add($argument) - } + foreach ($argument in $Arguments) { $startInfo.ArgumentList.Add($argument) } $process = [Diagnostics.Process]::Start($startInfo) $stream = [IO.MemoryStream]::new() $process.StandardOutput.BaseStream.CopyTo($stream) $standardError = $process.StandardError.ReadToEnd() $process.WaitForExit() - if ($process.ExitCode -ne 0) { - throw "git $($Arguments -join ' ') failed: $standardError" - } + if ($process.ExitCode -ne 0) { throw "git $($Arguments -join ' ') failed: $standardError" } return $stream.ToArray() } function Get-CanonicalBytes { param([Parameter(Mandatory = $true)][string]$Path) - if ($SourceMode -eq 'GitIndex') { - return Invoke-GitRaw -Arguments @('show', ":$Path") - } + if ($SourceMode -eq 'GitIndex') { return Invoke-GitRaw -Arguments @('show', ":$Path") } return Invoke-GitRaw -Arguments @('show', "${Revision}:$Path") } function Write-JsonNoBom { + param([Parameter(Mandatory = $true)]$Value, [Parameter(Mandatory = $true)][string]$Path) + $json = (($Value | ConvertTo-Json -Depth 20) -replace "`r`n", "`n") + [IO.File]::WriteAllText($Path, $json + "`n", $utf8NoBom) +} + +function Write-TextNoBom { + param([Parameter(Mandatory = $true)][string]$Text, [Parameter(Mandatory = $true)][string]$Path) + [IO.File]::WriteAllText($Path, $Text, $utf8NoBom) +} + +function New-CoherentSumsOverride { param( - [Parameter(Mandatory = $true)]$Value, - [Parameter(Mandatory = $true)][string]$Path + [Parameter(Mandatory = $true)][byte[]]$CanonicalSums, + [Parameter(Mandatory = $true)][string]$MutatedManifestPath, + [string]$RemovePath, + [switch]$ReverseData, + [string]$DuplicatePath, + [Parameter(Mandatory = $true)][string]$OutputFile ) - $json = (($Value | ConvertTo-Json -Depth 16) -replace "`r`n", "`n") - [IO.File]::WriteAllText($Path, $json + "`n", $utf8NoBom) + + $lines = @($utf8Strict.GetString($CanonicalSums) -split "`n" | Where-Object { $_ -ne '' }) + $headers = @($lines | Where-Object { $_.StartsWith('#') }) + $data = [Collections.Generic.List[string]]::new() + foreach ($line in @($lines | Where-Object { -not $_.StartsWith('#') })) { + if (-not [string]::IsNullOrWhiteSpace($RemovePath) -and $line.EndsWith(" $RemovePath", [StringComparison]::Ordinal)) { continue } + $data.Add($line) + } + if (-not [string]::IsNullOrWhiteSpace($DuplicatePath)) { + $duplicate = @($data | Where-Object { $_.EndsWith(" $DuplicatePath", [StringComparison]::Ordinal) }) + if ($duplicate.Count -ne 1) { throw "cannot duplicate checksum path: $DuplicatePath" } + $data.Add($duplicate[0]) + } + if ($ReverseData) { + $array = [string[]]@($data) + [Array]::Reverse($array) + $data = [Collections.Generic.List[string]]::new() + foreach ($line in $array) { $data.Add($line) } + } + $manifestBytes = [IO.File]::ReadAllBytes($MutatedManifestPath) + $manifestHash = [Convert]::ToHexString([Security.Cryptography.SHA256]::HashData($manifestBytes)).ToLowerInvariant() + for ($index = 0; $index -lt $data.Count; $index++) { + if ($data[$index].EndsWith(" $ManifestPath", [StringComparison]::Ordinal)) { + $data[$index] = "$manifestHash $ManifestPath" + } + } + Write-TextNoBom -Text ((@($headers) + @($data) -join "`n") + "`n") -Path $OutputFile } function Invoke-VerifierCase { @@ -82,8 +118,7 @@ function Invoke-VerifierCase { $resultPath = Join-Path $tempRoot "$Name.result.json" $logPath = Join-Path $tempRoot "$Name.console.log" $arguments = @( - '-NoProfile', - '-File', $resolvedVerifier, + '-NoProfile', '-File', $resolvedVerifier, '-RepositoryRoot', $resolvedRepository, '-SourceMode', $SourceMode, '-Revision', $Revision, @@ -93,31 +128,17 @@ function Invoke-VerifierCase { '-OutputPath', $resultPath, '-Quiet' ) - if (-not [string]::IsNullOrWhiteSpace($ManifestOverride)) { - $arguments += @('-ManifestOverridePath', $ManifestOverride) - } - if (-not [string]::IsNullOrWhiteSpace($SumsOverride)) { - $arguments += @('-SumsOverridePath', $SumsOverride) - } - if (-not [string]::IsNullOrWhiteSpace($InventoryOverride)) { - $arguments += @('-InventoryOverridePath', $InventoryOverride) - } + if (-not [string]::IsNullOrWhiteSpace($ManifestOverride)) { $arguments += @('-ManifestOverridePath', $ManifestOverride) } + if (-not [string]::IsNullOrWhiteSpace($SumsOverride)) { $arguments += @('-SumsOverridePath', $SumsOverride) } + if (-not [string]::IsNullOrWhiteSpace($InventoryOverride)) { $arguments += @('-InventoryOverridePath', $InventoryOverride) } & pwsh @arguments *> $logPath $exitCode = $LASTEXITCODE - $result = if (Test-Path -LiteralPath $resultPath) { - Get-Content -Raw -LiteralPath $resultPath | ConvertFrom-Json - } else { - $null - } + $result = if (Test-Path -LiteralPath $resultPath) { Get-Content -Raw -LiteralPath $resultPath | ConvertFrom-Json } else { $null } $failureText = if ($null -eq $result) { '' } else { @($result.failures) -join ' | ' } $exitMatches = if ($ExpectedExit -eq 0) { $exitCode -eq 0 } else { $exitCode -ne 0 } - $failureMatches = if ([string]::IsNullOrWhiteSpace($ExpectedFailure)) { - $true - } else { - $failureText.Contains($ExpectedFailure) - } - return [pscustomobject]@{ + $failureMatches = [string]::IsNullOrWhiteSpace($ExpectedFailure) -or $failureText.Contains($ExpectedFailure) + return [ordered]@{ name = $Name expected_exit = if ($ExpectedExit -eq 0) { 0 } else { 'nonzero' } actual_exit = $exitCode @@ -134,33 +155,73 @@ try { $canonicalManifest = Get-CanonicalBytes -Path $ManifestPath $canonicalSums = Get-CanonicalBytes -Path $SumsPath $canonicalInventory = Get-CanonicalBytes -Path $InventoryPath - $manifestFixture = Join-Path $tempRoot 'MANIFEST.canonical.json' - $sumsFixture = Join-Path $tempRoot 'SHA256SUMS.canonical.txt' - $inventoryFixture = Join-Path $tempRoot 'INVENTORY.canonical.json' - [IO.File]::WriteAllBytes($manifestFixture, $canonicalManifest) - [IO.File]::WriteAllBytes($sumsFixture, $canonicalSums) - [IO.File]::WriteAllBytes($inventoryFixture, $canonicalInventory) + $manifestText = $utf8Strict.GetString($canonicalManifest) + $inventoryText = $utf8Strict.GetString($canonicalInventory) $cases.Add((Invoke-VerifierCase -Name 'baseline' -ExpectedExit 0)) - $staleManifest = (Get-Content -Raw -LiteralPath $manifestFixture | ConvertFrom-Json) - $staleManifest.entries[0].sha256 = '0000000000000000000000000000000000000000000000000000000000000000' - $staleManifestPath = Join-Path $tempRoot 'MANIFEST.stale-entry.json' - Write-JsonNoBom -Value $staleManifest -Path $staleManifestPath - $cases.Add((Invoke-VerifierCase -Name 'stale_manifest_entry' -ManifestOverride $staleManifestPath -ExpectedExit 1 -ExpectedFailure 'manifest SHA-256 mismatch')) + $missingPath = '.agent/reports/evidence/production-ready/db-test-pool-hygiene/14-evidence-r2-focused.log' + $missingManifest = $manifestText | ConvertFrom-Json + $missingManifest.entries = @($missingManifest.entries | Where-Object { $_.path -cne $missingPath }) + $missingManifest.entry_count = [int64]$missingManifest.entries.Count + $missingManifestPath = Join-Path $tempRoot 'MANIFEST.missing-changed-path.json' + $missingSumsPath = Join-Path $tempRoot 'SHA256SUMS.missing-changed-path.txt' + Write-JsonNoBom -Value $missingManifest -Path $missingManifestPath + New-CoherentSumsOverride -CanonicalSums $canonicalSums -MutatedManifestPath $missingManifestPath -RemovePath $missingPath -OutputFile $missingSumsPath + $cases.Add((Invoke-VerifierCase -Name 'missing_changed_path' -ManifestOverride $missingManifestPath -SumsOverride $missingSumsPath -ExpectedExit 1 -ExpectedFailure 'manifest missing changed path')) + + $unsortedManifest = $manifestText | ConvertFrom-Json + $reversedEntries = [object[]]@($unsortedManifest.entries) + [Array]::Reverse($reversedEntries) + $unsortedManifest.entries = $reversedEntries + $unsortedManifestPath = Join-Path $tempRoot 'MANIFEST.unsorted.json' + $unsortedSumsPath = Join-Path $tempRoot 'SHA256SUMS.unsorted.txt' + Write-JsonNoBom -Value $unsortedManifest -Path $unsortedManifestPath + New-CoherentSumsOverride -CanonicalSums $canonicalSums -MutatedManifestPath $unsortedManifestPath -ReverseData -OutputFile $unsortedSumsPath + $cases.Add((Invoke-VerifierCase -Name 'unsorted_manifest_and_sums' -ManifestOverride $unsortedManifestPath -SumsOverride $unsortedSumsPath -ExpectedExit 1 -ExpectedFailure 'not canonical ordinal order')) + + $duplicateManifest = $manifestText | ConvertFrom-Json + $duplicatePath = [string]$duplicateManifest.entries[0].path + $duplicateManifest.entries = @($duplicateManifest.entries) + @($duplicateManifest.entries[0]) + $duplicateManifest.entry_count = [int64]$duplicateManifest.entries.Count + $duplicateManifestPath = Join-Path $tempRoot 'MANIFEST.duplicate.json' + $duplicateSumsPath = Join-Path $tempRoot 'SHA256SUMS.duplicate.txt' + Write-JsonNoBom -Value $duplicateManifest -Path $duplicateManifestPath + New-CoherentSumsOverride -CanonicalSums $canonicalSums -MutatedManifestPath $duplicateManifestPath -DuplicatePath $duplicatePath -OutputFile $duplicateSumsPath + $cases.Add((Invoke-VerifierCase -Name 'duplicate_manifest_and_sums' -ManifestOverride $duplicateManifestPath -SumsOverride $duplicateSumsPath -ExpectedExit 1 -ExpectedFailure 'duplicate manifest path')) + + $wrongTypeIDPath = Join-Path $tempRoot 'MANIFEST.id-array.json' + Write-TextNoBom -Text ($manifestText.Replace('"id": "git-blob-bytes-v1"', '"id": ["git-blob-bytes-v1"]')) -Path $wrongTypeIDPath + $cases.Add((Invoke-VerifierCase -Name 'wrong_type_representation_id_array' -ManifestOverride $wrongTypeIDPath -ExpectedExit 1 -ExpectedFailure 'must be JSON string, got array')) + + $nullIDPath = Join-Path $tempRoot 'MANIFEST.id-null.json' + Write-TextNoBom -Text ($manifestText.Replace('"id": "git-blob-bytes-v1"', '"id": null')) -Path $nullIDPath + $cases.Add((Invoke-VerifierCase -Name 'null_representation_id' -ManifestOverride $nullIDPath -ExpectedExit 1 -ExpectedFailure 'must be JSON string, got null')) + + $scalarExclusion = $manifestText | ConvertFrom-Json + $scalarExclusion.evidence_delta.manifest_entry_self_excluded_paths = '.agent/reports/evidence/production-ready/db-test-pool-hygiene/MANIFEST.json' + $scalarExclusionPath = Join-Path $tempRoot 'MANIFEST.exclusion-scalar.json' + Write-JsonNoBom -Value $scalarExclusion -Path $scalarExclusionPath + $cases.Add((Invoke-VerifierCase -Name 'wrong_type_exclusions_scalar' -ManifestOverride $scalarExclusionPath -ExpectedExit 1 -ExpectedFailure 'must be JSON array, got string')) + + $numericStringsPath = Join-Path $tempRoot 'INVENTORY.numeric-strings.json' + $numericStrings = $inventoryText.Replace('"required_call_sites": 83', '"required_call_sites": "83"').Replace('"required_files": 8', '"required_files": "8"') + Write-TextNoBom -Text $numericStrings -Path $numericStringsPath + $cases.Add((Invoke-VerifierCase -Name 'wrong_type_inventory_numeric_strings' -InventoryOverride $numericStringsPath -ExpectedExit 1 -ExpectedFailure 'must be JSON number, got string')) + + $nullCountPath = Join-Path $tempRoot 'INVENTORY.null-count.json' + Write-TextNoBom -Text ($inventoryText.Replace('"required_call_sites": 83', '"required_call_sites": null')) -Path $nullCountPath + $cases.Add((Invoke-VerifierCase -Name 'null_inventory_count' -InventoryOverride $nullCountPath -ExpectedExit 1 -ExpectedFailure 'must be JSON number, got null')) - $manifestText = $utf8NoBom.GetString($canonicalManifest) $crlfManifestPath = Join-Path $tempRoot 'MANIFEST.raw-crlf.json' - [IO.File]::WriteAllText($crlfManifestPath, ($manifestText -replace "(? Date: Sat, 11 Jul 2026 03:00:43 +0300 Subject: [PATCH 048/111] PLAN-GOVERNANCE-R10: own trusted authority guard --- ...roduction-ready-active-diff-contracts.json | 295 ++++++++++-------- ...-10-engram-production-ready-master-plan.md | 20 +- ...gram-production-ready-ownership-state.json | 114 ++++++- ...-10-engram-production-ready-scope-map.json | 12 +- ...07-11-release-gates-r10-plan-governance.md | 46 +++ .../plan-governance/authority-snapshot.json | 52 +++ .../external-enforcement-snapshot.json | 31 ++ .../plan-governance/path-envelope.json | 38 +++ 8 files changed, 461 insertions(+), 147 deletions(-) create mode 100644 .agent/reports/2026-07-11-release-gates-r10-plan-governance.md create mode 100644 .agent/specs/release-gates-r10/evidence/plan-governance/authority-snapshot.json create mode 100644 .agent/specs/release-gates-r10/evidence/plan-governance/external-enforcement-snapshot.json create mode 100644 .agent/specs/release-gates-r10/evidence/plan-governance/path-envelope.json diff --git a/.agent/plans/2026-07-10-engram-production-ready-active-diff-contracts.json b/.agent/plans/2026-07-10-engram-production-ready-active-diff-contracts.json index 0ca30de9..980d47d6 100644 --- a/.agent/plans/2026-07-10-engram-production-ready-active-diff-contracts.json +++ b/.agent/plans/2026-07-10-engram-production-ready-active-diff-contracts.json @@ -1,13 +1,18 @@ { "schema_version": 1, "kind": "production-ready-active-diff-contracts", - "revision": 9, + "revision": 10, "authority": { "plan_path": ".agent/plans/2026-07-10-engram-production-ready-master-plan.md", "scope_map_path": ".agent/plans/2026-07-10-engram-production-ready-scope-map.json", "ownership_state_path": ".agent/plans/2026-07-10-engram-production-ready-ownership-state.json", "rejected_r8_head": "406fe952c143eb8aaf5895427c568a41d4cec225", - "r8_scope_provenance_sha256": "ab5f882fa110ca823a317061ecbca0c62516702735325893a56206f9e7a29415" + "r8_scope_provenance_sha256": "ab5f882fa110ca823a317061ecbca0c62516702735325893a56206f9e7a29415", + "rejected_r9_plan_head": "8cb810095b2bea77ab9812832d9ab8a99c928d18", + "rejected_r9_release_head": "f11a77cce88f013839e22662458a3318670445e9", + "r9_checker_commit": "0354362c427d99eb2993e5acddeb9d5bcd561df7", + "r9_checker_verdict": "REVISE_2_HIGH_1_MED", + "r9_disposition": "PRESERVE_PLAN_GOVERNANCE_A_AND_RELEASE_GATES_B_AS_REJECTED_HISTORY" }, "source_audit": { "mutable_register_path": ".agent/reports/production-readiness-evidence-register.json", @@ -20,6 +25,34 @@ "serialization": "ordinally sorted normalized repository paths, one UTF-8 path plus LF per entry", "path_case": "ordinal-case-sensitive" }, + "external_enforcement": { + "repository": "thebtf/engram", + "owner_type": "User", + "visibility": "PUBLIC", + "default_branch": "main", + "observed_ruleset_id": 13610955, + "observed_ruleset_enforcement": "active", + "observed_rules": [ + "deletion", + "non_fast_forward" + ], + "required_status_activation": "PENDING_POST_BOOTSTRAP_TRANSITION", + "bootstrap_contract": "merge the independently accepted R10 A/B chain onto main, observe one successful authority-guard status on an ordinary authorized PR, then amend ruleset 13610955 to require that exact status; capture pre/post ruleset JSON and a blocked protected-path PR as external evidence" + }, + "release_blockers": { + "db_repeat3": "BLOCKED_0_OF_3", + "image_scans": "BLOCKED_SERVER_5_POSTGRES_20_OPERATOR_13_HIGH_OR_CRITICAL" + }, + "demolition_guard": { + "disposition": "PRESERVE_V5_EXCLUSIONS", + "excluded_systems": [ + "graph stage", + "cross-encoder rerank", + "internal/search scoring passes", + "SDK observation extraction", + "server-side MCP HTTP transports" + ] + }, "status_classes": { "current": [ "current-checker-active", @@ -30,41 +63,59 @@ "rejected": [ "rejected-evidence-revision", "rejected-historical", + "rejected-release-gates-r9", "rejected-security-r3" ], "pending": [ + "current-candidate-pending-checker", "current-maker-in-progress" ] }, "pending_namespaces": [ { - "slice": "DB-EMBEDDING-EVIDENCE-TRANSPORT", - "plan_owner": "DB-EMBEDDING-EVIDENCE-TRANSPORT", - "status_class": "current-maker-in-progress", - "branch": "work/prc-db-embedding-evidence-transport-r6", - "base_anchor": "a538f6224ef31f612152470a4ecd45e78ff9d0f2", - "exact_prefixes": [ - ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/**" + "slice": "DB-TEST-POOL-HYGIENE", + "plan_owner": "DB-TEST-POOL-HYGIENE", + "status_class": "current-candidate-pending-checker", + "branch": "work/prc-db-test-pool-hygiene-evidence-r3", + "base_anchor": "68242c48aaad62ec087166eeb9ea32f14d189450", + "forbidden_base": "a7b2d36b3f0a4514b51dddf341877f5b4b9721d9", + "candidate_head": "331b5b195a967e7f27dca94038a3480c9afcc84f", + "candidate_tree": "12674bf76404a0e021a22d3dc7aa4d5ed3763ee0", + "candidate_state": "IMMUTABLE_PENDING_CHECKER_AND_ROOT_ACCEPTANCE", + "exact_paths": [ + ".agent/reports/2026-07-11-db-test-pool-hygiene-evidence-revision3-maker.md", + ".agent/reports/evidence/production-ready/db-test-pool-hygiene/Build-DBPoolHygieneEvidence.ps1", + ".agent/reports/evidence/production-ready/db-test-pool-hygiene/DB-TEST-POOL-HYGIENE.evidence-r3.json", + ".agent/reports/evidence/production-ready/db-test-pool-hygiene/DB-TEST-POOL-HYGIENE.final.json", + ".agent/reports/evidence/production-ready/db-test-pool-hygiene/MANIFEST.json", + ".agent/reports/evidence/production-ready/db-test-pool-hygiene/SHA256SUMS.txt", + ".agent/reports/evidence/production-ready/db-test-pool-hygiene/Test-DBPoolHygieneEvidenceAdversarial.ps1", + ".agent/reports/evidence/production-ready/db-test-pool-hygiene/Verify-DBPoolHygieneEvidence.ps1", + ".agent/reports/evidence/production-ready/db-test-pool-hygiene/adversarial-proof.json", + ".agent/reports/evidence/production-ready/db-test-pool-hygiene/verifier-proof.json" ], "release_accepted": false }, { - "slice": "SECURITY-PROJECT-IDENTITY", - "plan_owner": "SECURITY-PROJECT-IDENTITY", + "slice": "RELEASE-GATES", + "plan_owner": "RELEASE-GATES", "status_class": "current-maker-in-progress", - "branch": "work/prc-security-project-identity-r4", - "base_anchor": "38344455754fe503acbd79d2134141f996adff7f", - "forbidden_base": "0d84047c280a873dd21baae2ecbf83ec422d497f", + "branch": "work/prc-release-gates-revision10-maker", + "base_anchor": "f11a77cce88f013839e22662458a3318670445e9", + "forbidden_base": "0354362c427d99eb2993e5acddeb9d5bcd561df7", "exact_paths": [ - "internal/proxy/identity_process_test.go", - "internal/proxy/identity_test.go" - ], - "forbidden_final_paths": [ - "internal/proxy/identity.go" - ], - "exact_prefixes": [ - ".agent/specs/security-project-identity/evidence/**", - ".agent/reports/evidence/production-ready/security-project-identity/**" + ".agent/reports/2026-07-11-release-gates-r10-maker.md", + ".agent/specs/release-gates-r10/evidence/release-gates/R10-AUTHORITY-GUARD.red.json", + ".agent/specs/release-gates-r10/evidence/release-gates/authority-guard-simulation.json", + ".agent/specs/release-gates-r10/evidence/release-gates/security-review.md", + ".agent/specs/release-gates-r10/evidence/release-gates/strict-schema-regressions.json", + ".agent/specs/release-gates-r10/evidence/release-gates/test-r10-authority-guard.ps1", + ".agent/specs/release-gates-r10/evidence/release-gates/verification-summary.json", + ".agent/specs/release-gates-r10/evidence/release-gates/workflow-conformance.json", + ".github/workflows/authority-guard.yml", + ".github/workflows/test.yml", + "scripts/production-gates/assert-active-candidate-path-authority.ps1", + "scripts/production-gates/assert-pr-authority-guard.ps1" ], "release_accepted": false } @@ -73,17 +124,17 @@ { "slice": "MASTER-PLAN", "disposition": "in-progress-empty-diff", - "reason": "R9 base equals head until PLAN-GOVERNANCE-R9 is committed" + "reason": "R10 A/B chain is pending; A owns governance and B owns the exact trusted guard envelope" }, { "slice": "PLAN-GOVERNANCE", "disposition": "in-progress-empty-diff", - "reason": "R9 base equals head until PLAN-GOVERNANCE-R9 is committed" + "reason": "R10 PLAN-GOVERNANCE A is the direct child of rejected R9 release head f11a77cc" }, { "slice": "RELEASE-GATES", "disposition": "in-progress-empty-diff", - "reason": "R9 base equals head until RELEASE-GATES-R9 is committed" + "reason": "R10 RELEASE-GATES B must be the direct child of A and cannot use checker commit 0354362c as a base" }, { "slice": "DEMOLITION-SKIP-CLASSIFICATION", @@ -198,150 +249,170 @@ }, { "slice": "DB-EMBEDDING-EVIDENCE-TRANSPORT", - "status_class": "rejected-evidence-revision", - "branch": "work/prc-db-embedding-evidence-transport-r5", - "base": "369951b61ee07cb0c405558e0f677cd1c9e90362", - "head": "a538f6224ef31f612152470a4ecd45e78ff9d0f2", - "path_count": 28, - "paths_sha256": "a9e3eb9762bc3d597ac277c653ad30d10149cb10443fb0b0fc3edd21093c8217", + "status_class": "current-ready-for-check", + "branch": "work/prc-db-embedding-evidence-transport-r6", + "base": "a538f6224ef31f612152470a4ecd45e78ff9d0f2", + "head": "a1a3bfeb6546d1f3f24192b1c9f057402b6249a2", + "path_count": 32, + "paths_sha256": "2fb294913b315bd908adf227f28600e5b2b80753a20dd6b9606cb7ae3d907948", "paths": [ { - "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/R3-SHA256SUMS.txt", + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/R5-SHA256SUMS.txt", "git_status": "M", "classification": "evidence" }, { - "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/coverage-repeat.v1.json", + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/maker-report.md", "git_status": "M", "classification": "evidence" }, { - "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/maker-report.md", + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/maker-summary.v1.json", "git_status": "M", "classification": "evidence" }, { - "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/maker-summary.v1.json", + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/verification-matrix.v1.json", "git_status": "M", "classification": "evidence" }, { - "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/verification-matrix.v1.json", + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/verify-coverage-capture.cjs", "git_status": "M", "classification": "evidence" }, { - "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4/R4-SHA256SUMS.txt", - "git_status": "M", + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/.gitattributes", + "git_status": "A", "classification": "evidence" }, { - "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4/coverage-repeat.v1.json", - "git_status": "M", + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/R6-SHA256SUMS.txt", + "git_status": "A", "classification": "evidence" }, { - "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4/maker-report.md", - "git_status": "M", + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/assemble-coverage-repeat.cjs", + "git_status": "A", "classification": "evidence" }, { - "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4/maker-summary.v1.json", - "git_status": "M", + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/build-checksums.cjs", + "git_status": "A", "classification": "evidence" }, { - "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4/verification-matrix.v1.json", - "git_status": "M", + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/capture-coverage-run.cjs", + "git_status": "A", "classification": "evidence" }, { - "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/R5-SHA256SUMS.txt", + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/checksum-layers.v1.json", "git_status": "A", "classification": "evidence" }, { - "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/coverage-capture.v1.json", + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/coverage-capture.v2.json", "git_status": "A", "classification": "evidence" }, { - "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/coverage-repeat.v1.json", + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/coverage-repeat.v2.json", "git_status": "A", "classification": "evidence" }, { - "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/coverage-run-1.tap", + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/coverage-run-1.envelope.v2.json", "git_status": "A", "classification": "evidence" }, { - "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/coverage-run-2.tap", + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/coverage-run-1.stderr.bin", "git_status": "A", "classification": "evidence" }, { - "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/maker-report.md", + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/coverage-run-1.stdout.bin", "git_status": "A", "classification": "evidence" }, { - "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/maker-summary.v1.json", + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/coverage-run-1.tap", "git_status": "A", "classification": "evidence" }, { - "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/run-coverage-capture-verifier.cmd", + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/coverage-run-2.envelope.v2.json", "git_status": "A", "classification": "evidence" }, { - "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/verification-matrix.v1.json", + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/coverage-run-2.stderr.bin", "git_status": "A", "classification": "evidence" }, { - "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/verify-coverage-capture.cjs", + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/coverage-run-2.stdout.bin", "git_status": "A", "classification": "evidence" }, { - "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/ARTIFACTS.sha256", - "git_status": "M", + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/coverage-run-2.tap", + "git_status": "A", "classification": "evidence" }, { - "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/maker-report.md", - "git_status": "M", + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/maker-report.md", + "git_status": "A", "classification": "evidence" }, { - "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verification-observations.v1.json", - "git_status": "M", + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/maker-summary.v2.json", + "git_status": "A", "classification": "evidence" }, { - "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.test.cjs", - "git_status": "M", + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/prove-it.cjs", + "git_status": "A", + "classification": "evidence" + }, + { + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/red-reproduction.cjs", + "git_status": "A", + "classification": "evidence" + }, + { + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/verify-evidence.cjs", + "git_status": "A", "classification": "evidence" }, { - "path": ".agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R3.tdd.json", + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/verify-evidence.test.cjs", + "git_status": "A", + "classification": "evidence" + }, + { + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/verify-final-commit-replay.cjs", + "git_status": "A", + "classification": "evidence" + }, + { + "path": ".agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/verify-manifest.test.cjs", "git_status": "M", "classification": "evidence" }, { - "path": ".agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R4.tdd.json", + "path": ".agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R5.tdd.json", "git_status": "M", "classification": "evidence" }, { - "path": ".agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R5.red.json", + "path": ".agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R6.red.json", "git_status": "A", "classification": "evidence" }, { - "path": ".agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R5.tdd.json", + "path": ".agent/specs/db-embedding-stats-evidence-transport/evidence/DB-EMBEDDING-EVIDENCE-TRANSPORT-R6.tdd.json", "git_status": "A", "classification": "evidence" } @@ -350,7 +421,9 @@ "path_authority_eligible": true, "release_accepted": false, "lineage": { - "kind": "historical-rejected" + "kind": "exact-successor-of-rejected", + "required_rejected_predecessor_base": "a538f6224ef31f612152470a4ecd45e78ff9d0f2", + "checker_verdict": "PENDING" } }, { @@ -700,81 +773,36 @@ }, { "slice": "SECURITY-PROJECT-IDENTITY", - "status_class": "rejected-security-r3", - "branch": "work/prc-security-project-identity-r3", - "base": "9e2ce4e58a5cded69660ca9ac532d2167f315bb2", - "head": "38344455754fe503acbd79d2134141f996adff7f", - "path_count": 14, - "paths_sha256": "046360929bec61f3cbda420754aaab7056badf467d5e5c2c2e2fce68e2f5e21f", + "status_class": "current-ready", + "branch": "work/prc-security-project-identity-r4", + "base": "38344455754fe503acbd79d2134141f996adff7f", + "head": "320f1d806729085f56e91b505b738444408639e1", + "path_count": 5, + "paths_sha256": "ff2385aa04e726c653db0c70a525f3e3957bc91e6bda1e6526fdd63afe5b5b7d", "paths": [ { - "path": ".agent/reports/evidence/production-ready/security-project-identity/SECURITY-PROJECT-IDENTITY-R3-maker-report.md", + "path": ".agent/reports/evidence/production-ready/security-project-identity/SECURITY-PROJECT-IDENTITY-R4-maker-report.md", "git_status": "A", "classification": "report" }, { - "path": ".agent/specs/security-project-identity/evidence/SECURITY-PROJECT-IDENTITY-R3.red.json", + "path": ".agent/specs/security-project-identity/evidence/SECURITY-PROJECT-IDENTITY-R4.prove-it.json", "git_status": "A", "classification": "evidence" }, { - "path": ".agent/specs/security-project-identity/evidence/SECURITY-PROJECT-IDENTITY-R3.tdd.json", + "path": ".agent/specs/security-project-identity/evidence/SECURITY-PROJECT-IDENTITY-R4.red.json", "git_status": "A", "classification": "evidence" }, { - "path": ".agent/specs/security-project-identity/evidence/SECURITY-PROJECT-IDENTITY-R3.verification.json", + "path": ".agent/specs/security-project-identity/evidence/SECURITY-PROJECT-IDENTITY-R4.verification.json", "git_status": "A", "classification": "evidence" }, { - "path": ".agent/specs/security-project-identity/evidence/project-identity-v2-vectors.json", - "git_status": "M", - "classification": "evidence" - }, - { - "path": "internal/db/gorm/project_identity_v2_test.go", - "git_status": "M", - "classification": "product" - }, - { - "path": "internal/db/gorm/project_store.go", - "git_status": "M", - "classification": "product" - }, - { - "path": "internal/grpcserver/project_identity_v2_test.go", - "git_status": "M", - "classification": "product" - }, - { - "path": "internal/proxy/identity.go", - "git_status": "M", - "classification": "product" - }, - { - "path": "internal/proxy/identity_test.go", - "git_status": "M", - "classification": "product" - }, - { - "path": "plugin/engram/hooks/lib.js", - "git_status": "M", - "classification": "product" - }, - { - "path": "plugin/engram/hooks/project-identity-v2.test.js", - "git_status": "M", - "classification": "product" - }, - { - "path": "plugin/openclaw-engram/src/identity.ts", - "git_status": "M", - "classification": "product" - }, - { - "path": "plugin/openclaw-engram/test/project-identity-v2.test.mjs", - "git_status": "M", + "path": "internal/proxy/identity_process_test.go", + "git_status": "A", "classification": "product" } ], @@ -782,14 +810,15 @@ "path_authority_eligible": true, "release_accepted": false, "lineage": { - "kind": "historical-rejected", - "checker_only_commit": "0d84047c280a873dd21baae2ecbf83ec422d497f", - "checker_verdict": "REVISE_HIGH_GOROUTINE_ONLY_PERMANENT_TEST" + "kind": "checker-accepted-successor", + "required_rejected_predecessor_base": "38344455754fe503acbd79d2134141f996adff7f", + "checker_only_commit": "3aa11399b2c7fa8f2188f35f68c110b1c33a1ef4", + "checker_verdict": "ACCEPT" } }, { "slice": "DB-TEST-POOL-HYGIENE", - "status_class": "current-ready-for-check", + "status_class": "rejected-evidence-revision", "branch": "work/prc-db-test-pool-hygiene-evidence-r2", "base": "276337b3e96aa5af6d2e7dd9a0002ff957e5ffc9", "head": "68242c48aaad62ec087166eeb9ea32f14d189450", @@ -866,7 +895,9 @@ "path_authority_eligible": true, "release_accepted": false, "lineage": { - "kind": "exact-live-register" + "kind": "historical-rejected", + "checker_only_commit": "a7b2d36b3f0a4514b51dddf341877f5b4b9721d9", + "checker_verdict": "REVISE_4_HIGH_EVIDENCE_GATE" } } ] diff --git a/.agent/plans/2026-07-10-engram-production-ready-master-plan.md b/.agent/plans/2026-07-10-engram-production-ready-master-plan.md index bba0c7aa..da68f754 100644 --- a/.agent/plans/2026-07-10-engram-production-ready-master-plan.md +++ b/.agent/plans/2026-07-10-engram-production-ready-master-plan.md @@ -1,6 +1,6 @@ # Engram Production-Ready Master Plan -Status: PLAN_GOVERNANCE_R9_PENDING_INDEPENDENT_CHALLENGE +Status: PLAN_GOVERNANCE_R10_AUTHORITY_BOOTSTRAP_IN_PROGRESS Date: 2026-07-10 Revision: 9 Goal contract: `.agent/goals/2026-07-10-engram-production-ready-marathon.md` @@ -49,7 +49,11 @@ Durable baseline evidence: The JSON/Markdown evidence register is the sole authority for mutable progress. This revision also contains immutable source-lock facts, a tracked ownership-state contract, and a tracked scope map; none substitutes for the register. Root updates the JSON register first, renders the Markdown register and HTML from that exact state, and only then makes a dispatch/integration decision. Every row records criterion, slice, branch/base/head, exact command, environment identity, raw artifact, exit code, checker artifact, review artifact, integration SHA, timestamp, and notes. An empty field remains `UNKNOWN`; it is never inferred as green. -R9 scope authority preserves the structural projection frozen from register snapshot SHA256 `AB5F882FA110CA823A317061ECBCA0C62516702735325893A56206F9E7A29415`, `updated_at=2026-07-10T22:46:01.2938194+03:00`, with 67 criteria and 67 unique slice identities. The SHA and timestamp are immutable R8 provenance, not a perpetual byte-equality gate. `.agent/plans/2026-07-10-engram-production-ready-scope-map.json` maps every frozen row to a literal maker/checker owner, a named fold, historical provenance, or root-only integration. Live conformance requires the exact unique slice set, classifications, owner/fold targets, required plan rows and ownership epochs, plus only the status/head policies explicitly marked `load_bearing`; ordinary progress/head advancement inside an unchanged lane and changes to timestamps, commands, artifacts, or notes do not invalidate plan authority. A new/deleted slice, changed classification/owner/fold, missing required predecessor, or a marked rejected head presented as accepted does. The tracked active-diff contract freezes exact sorted paths and SHA256 digests for current and rejected candidate classes so CI does not depend on the ignored mutable register or unfetched foreign commits; optional local Git replay must match those frozen paths byte-for-byte. `CONTROL-PLANE` remains `RUNNING_GOAL_STATE_REACTIVATION_UNAVAILABLE` because the native goal service reports the user-resumed goal as blocked and refuses exact-objective recreation; execution continues under the verbatim objective without misreporting the tool state. `DB-EMBEDDING-EVIDENCE-TRANSPORT` R5 at `a538f6224ef31f612152470a4ecd45e78ff9d0f2` is rejected; R6 starts exactly there and owns only the four prior bounded evidence families plus the literal R5 and R6 families. `SECURITY-PROJECT-IDENTITY` R3 product head `38344455754fe503acbd79d2134141f996adff7f` freezes the exact 14-path Go/proxy/Claude/OpenClaw/vector/evidence/report diff but is rejected by checker commit `0d84047c280a873dd21baae2ecbf83ec422d497f`; R4 starts from the product head, not the checker-only commit, and is bounded to `internal/proxy/identity_test.go` plus existing evidence/report namespaces. R2 at `9e2ce4e58a5cded69660ca9ac532d2167f315bb2` remains rejected history. +R10 authority starts exactly at rejected R9 RELEASE-GATES head `f11a77cce88f013839e22662458a3318670445e9`, never at checker-only commit `0354362c427d99eb2993e5acddeb9d5bcd561df7`. The R9 checker verdict is `REVISE` with two HIGH failures (raw JSON type/null coercion and coordinated authority/workflow rewrite acceptance) plus one MEDIUM raw-backslash path failure. Both R9 commits are preserved as rejected history: PLAN-GOVERNANCE A `8cb810095b2bea77ab9812832d9ab8a99c928d18` and RELEASE-GATES B `f11a77cce88f013839e22662458a3318670445e9`. R10 is again two commits: A amends plan/scope/state/active-contract authority and owns the exact B path envelope; B is A's direct child and supplies strict raw JSON validation plus a trusted-base PR authority guard. `thebtf/engram` is a public User-owned repository with default branch `main`; observed active ruleset `13610955` currently contains only `deletion` and `non_fast_forward`, so required-status enforcement is explicitly `PENDING_POST_BOOTSTRAP_TRANSITION`, not active. After independent R10 acceptance and main integration, root must observe the exact authority-guard status on an ordinary authorized PR, add that status to the ruleset, capture pre/post ruleset JSON, and prove a protected-path PR is blocked. The existing normal `test.yml` workflow remains defense in depth; it is not the trusted executor for PR-head authority decisions. + +R10 contemporaneous slice truth is frozen without claiming integration: SECURITY-PROJECT-IDENTITY R4 maker `320f1d806729085f56e91b505b738444408639e1` is accepted by direct-child checker `3aa11399b2c7fa8f2188f35f68c110b1c33a1ef4`; its five-path LF digest is `ff2385aa04e726c653db0c70a525f3e3957bc91e6bda1e6526fdd63afe5b5b7d`. DB-TEST-POOL-HYGIENE R2 `68242c48aaad62ec087166eeb9ea32f14d189450` is rejected by checker `a7b2d36b3f0a4514b51dddf341877f5b4b9721d9` for four HIGH evidence-verifier failures; R3 `331b5b195a967e7f27dca94038a3480c9afcc84f` is its immutable direct-child ten-path evidence successor, with checker/root acceptance still pending. DB-EMBEDDING-EVIDENCE-TRANSPORT R6 candidate `a1a3bfeb6546d1f3f24192b1c9f057402b6249a2` is immutable and awaits a fresh checker. The canonical DB repeat-3 gate remains a release blocker at `0/3`, and exact server/PostgreSQL/operator image scans remain release blockers at `5/20/13` HIGH/CRITICAL findings. R10 does not convert either blocker into progress. The v5 demolition exclusions remain absolute: graph stage, cross-encoder rerank, `internal/search` scoring passes, SDK observation extraction, and server-side MCP HTTP transports are not implementation targets. + +R9 scope authority preserves the structural projection frozen from register snapshot SHA256 `AB5F882FA110CA823A317061ECBCA0C62516702735325893A56206F9E7A29415`, `updated_at=2026-07-10T22:46:01.2938194+03:00`, with 67 criteria and 67 unique slice identities. The SHA and timestamp are immutable R8 provenance, not a perpetual byte-equality gate. `.agent/plans/2026-07-10-engram-production-ready-scope-map.json` maps every frozen row to a literal maker/checker owner, a named fold, historical provenance, or root-only integration. Live conformance requires the exact unique slice set, classifications, owner/fold targets, required plan rows and ownership epochs, plus only the status/head policies explicitly marked `load_bearing`; ordinary progress/head advancement inside an unchanged lane and changes to timestamps, commands, artifacts, or notes do not invalidate plan authority. A new/deleted slice, changed classification/owner/fold, missing required predecessor, or a marked rejected head presented as accepted does. The tracked active-diff contract freezes exact sorted paths and SHA256 digests for current and rejected candidate classes so CI does not depend on the ignored mutable register or unfetched foreign commits; optional local Git replay must match those frozen paths byte-for-byte. `CONTROL-PLANE` remains `RUNNING_GOAL_STATE_REACTIVATION_UNAVAILABLE` because the native goal service reports the user-resumed goal as blocked and refuses exact-objective recreation; execution continues under the verbatim objective without misreporting the tool state. R8 PLAN-GOVERNANCE commit `37d185b33b8f9411564fda49cf8b0d58321b62fd` and RELEASE-GATES commit `406fe952c143eb8aaf5895427c568a41d4cec225` are immutable rejected predecessors. Their structural 67/67 scope, AB5F provenance, 36 epochs, same-lane progress policy, rejected-head policy, wrong-package zero-acceptance repair, and prior mutations remain mandatory. R9 closes the rejected failure class by auditing every resolvable live-register base/head, freezing exact candidate paths, and separating current authority from historical/rejected and conflicting candidates. A path-authority correction does not turn a rejected candidate into acceptance. @@ -106,10 +110,10 @@ Durable local layout: `.agent/worktrees//` (already ignored through `.git | Slice | Branch | Exclusive maker paths | Dependencies | Required proof | | --- | --- | --- | --- | --- | -| PLAN-GOVERNANCE | `work/prc-release-gates-revision9-maker` | `.agent/plans/2026-07-10-engram-production-ready-master-plan.md`, `.agent/plans/2026-07-10-engram-production-ready-ownership-state.json`, `.agent/plans/2026-07-10-engram-production-ready-scope-map.json`, new `.agent/plans/2026-07-10-engram-production-ready-active-diff-contracts.json`, `.agent/specs/release-gates-r9/evidence/plan-governance/**`, `.agent/reports/2026-07-11-release-gates-r9-plan-governance.md` | exact rejected R8 head/base `406fe952c143eb8aaf5895427c568a41d4cec225`; immutable R8 plan `37d185b33b8f9411564fda49cf8b0d58321b62fd`; first R9 commit and direct predecessor of RELEASE-GATES-R9 | preserve every PR-0..PR-8 and M0..M7 obligation plus all predecessor rows; audit every resolvable live-register diff and freeze exact sorted candidate paths/status classes without relying on the mutable register or foreign objects; bind all 67 unique register slices to the structural projection frozen at SHA256 `AB5F882FA110CA823A317061ECBCA0C62516702735325893A56206F9E7A29415`; classify literal maker/checker, four current meta folds, one historical prototype, and root-only control/integration; preserve current/rejected DB lineage; bind SECURITY-PROJECT-IDENTITY R3's exact 14-path cross-consumer diff and DB evidence R5/R6 namespaces; canonical UTF-8/LF plan hash, state hash, scope-map parity, Ledger, deletion/rejected-head/fold/register mutations, exact Diff, checker and root post-review must pass | +| PLAN-GOVERNANCE | `work/prc-release-gates-revision10-maker` | `.agent/plans/2026-07-10-engram-production-ready-master-plan.md`, `.agent/plans/2026-07-10-engram-production-ready-ownership-state.json`, `.agent/plans/2026-07-10-engram-production-ready-scope-map.json`, `.agent/plans/2026-07-10-engram-production-ready-active-diff-contracts.json`, `.agent/specs/release-gates-r10/evidence/plan-governance/authority-snapshot.json`, `.agent/specs/release-gates-r10/evidence/plan-governance/external-enforcement-snapshot.json`, `.agent/specs/release-gates-r10/evidence/plan-governance/path-envelope.json`, `.agent/reports/2026-07-11-release-gates-r10-plan-governance.md` | exact rejected R9 release head/base `f11a77cce88f013839e22662458a3318670445e9`; forbidden checker-only base `0354362c427d99eb2993e5acddeb9d5bcd561df7`; direct-child A10 and direct predecessor of B10 | preserve every PR-0..PR-8 and M0..M7 obligation plus all predecessor rows; record R9 two-HIGH/one-MEDIUM rejection while preserving its A/B commits; freeze R4 acceptance, R2 rejection/R3 pending, R6 checker-pending, DB/image blockers, external enforcement pending state, and v5 demolition exclusions; own every exact B10 workflow/script/test/evidence/report path before implementation; canonical UTF-8/LF plan hash, state hash, scope-map parity, Ledger, strict schema, path-budget, exact Diff, checker and root post-review must pass | | DB-BULKOPS | `work/prc-db-bulkops` | `internal/bulkops/facade.go`, `internal/bulkops/facade_test.go`, `internal/bulkops/rollback.go`, `internal/bulkops/rollback_test.go`, `internal/db/gorm/candidate_store.go`, `internal/db/gorm/candidate_store_test.go`, `internal/mcp/tools_bulkops.go`, `internal/mcp/tools_dryrun_test.go`, `pkg/models/snapshot.go`, legacy exact report `.agent/reports/2026-07-10-db-bulkops-capture-lock-rework-maker.md`, legacy exact report `.agent/reports/2026-07-10-db-bulkops-sibling-rework-maker.md`, legacy evidence prefix `.agent/specs/production-ready-db-bulkops/evidence/**`, legacy evidence prefix `.agent/reports/evidence/production-ready/db-bulkops-sibling-rework/**` | historical base `2b085de663d5ba9dfa97adf9ee58de062ee0997c`, rejected head `68b2ce5835c7c6efdf1c68da9eedcb8d9c3837ef`; no integration SHA; superseded as current writer on the four behavioral-edge paths | checker artifact `.agent/worktrees/prc-db-bulkops/.agent/reviews/2026-07-10-db-bulkops-sibling-rework-check.md`, verdict `FAIL / REVISE_HOLD`, SHA256 `EB9EB227363A27EA058C6654BD7E38EED1088252F79F837E377B2A3CBC1FAFB7`; exact Diff must report zero undeclared paths but fail epoch authority for paths now owned by DB-BULKOPS-BEHAVIORAL-EDGE-REWORK; preserve all lock-consistent capture/rollback evidence; never integrate this head alone | | DB-BULKOPS-BEHAVIORAL-EDGE-REWORK | `work/prc-db-bulkops` | `internal/db/gorm/candidate_store.go`, `internal/db/gorm/candidate_store_test.go`, `internal/mcp/tools_bulkops.go`, `internal/mcp/tools_dryrun_test.go`, `.agent/reports/2026-07-10-db-bulkops-behavioral-edge-rework-maker.md`, legacy exact report `.agent/reports/2026-07-10-db-bulkops-behavioral-edge-rework-maker-3.md`, `.agent/reports/evidence/production-ready/db-bulkops-behavioral-edge-rework/**` | rejected historical target and exact authoritative candidate base `68b2ce5835c7c6efdf1c68da9eedcb8d9c3837ef`; accepted/reviewed product successor head `bd68c05baf4b7250096dd84f56bebea2aa555970`; live register's partial `cd098397764e13388aef3b4da9448172c7092fdb..bd68c05baf4b7250096dd84f56bebea2aa555970` view is not full candidate authority; checker/post-review are `PASS_WITH_CONCERNS`; integration SHA remains unset | both behavioral defect classes are closed across promote/preserve/reject/suppress/supersede with canonical preflight plus transaction-bound snapshot validation, exact integer decoding, wrong-type/TOCTOU rejection, audit-fault rollback, and ordinary non-snapshot exclusion; do not present rejected `68b2ce58` as current acceptance; the remaining test-pool concern transfers `candidate_store_test.go` to DB-TEST-POOL-HYGIENE and remains release-blocking until its fresh checker passes | -| DB-TEST-POOL-HYGIENE | `work/prc-db-test-pool-hygiene-evidence-r2` | `internal/db/gorm/candidate_store_test.go`, `.agent/reports/2026-07-10-db-test-pool-hygiene-maker.md`, `.agent/reports/2026-07-10-db-test-pool-hygiene-evidence-revision-maker.md`, `.agent/reports/evidence/production-ready/db-test-pool-hygiene/**` | accepted behavioral-edge product head `bd68c05baf4b7250096dd84f56bebea2aa555970`; product successor `276337b3e96aa5af6d2e7dd9a0002ff957e5ffc9`; evidence-only successor `68242c48aaad62ec087166eeb9ea32f14d189450`; live status `READY_FOR_CHECK` | close every `openCandidateTestDB` pool at owner cleanup without changing production behavior; preserve exact 83 call sites across 8 files and Git-blob/LF representation; evidence-only revision must remain product-delta-free and reject stale manifest, CRLF, wrong representation, false 76/6 inventory, and missing artifact mutations; fresh checker plus root post-review precede integration or transfer to DB-GOVERNANCE | +| DB-TEST-POOL-HYGIENE | `work/prc-db-test-pool-hygiene-evidence-r3` | `internal/db/gorm/candidate_store_test.go`, `.agent/reports/2026-07-10-db-test-pool-hygiene-maker.md`, `.agent/reports/2026-07-10-db-test-pool-hygiene-evidence-revision-maker.md`, `.agent/reports/2026-07-11-db-test-pool-hygiene-evidence-revision3-maker.md`, `.agent/reports/evidence/production-ready/db-test-pool-hygiene/**` | accepted behavioral-edge product head `bd68c05baf4b7250096dd84f56bebea2aa555970`; product successor `276337b3e96aa5af6d2e7dd9a0002ff957e5ffc9`; rejected evidence-only R2 `68242c48aaad62ec087166eeb9ea32f14d189450`; checker-only rejection `a7b2d36b3f0a4514b51dddf341877f5b4b9721d9`; immutable R3 direct child `331b5b195a967e7f27dca94038a3480c9afcc84f`, tree `12674bf76404a0e021a22d3dc7aa4d5ed3763ee0`; checker/root acceptance pending | preserve the sound product pool ownership while closing all four R2 evidence failures: immutable changed-path closure, ordinal deterministic ordering, exact string types, and exact numeric token types; the R3 final diff is exactly the ten paths frozen in the active contract; fresh checker plus root post-review precede integration or transfer to DB-GOVERNANCE | | DB-GOVERNANCE | `work/prc-db-governance` | `internal/db/gorm/candidate_store.go`, `internal/db/gorm/candidate_store_test.go`, `internal/db/gorm/rule_arbiter_store_test.go`, `internal/db/gorm/rule_governance_store.go`, `internal/db/gorm/rule_governance_store_test.go`, `internal/db/gorm/rule_governance_rg3_store_test.go`, `internal/db/gorm/migration_rule_governance.go`, `internal/db/gorm/migration_rule_arbiter.go`, `internal/db/gorm/migration_rule_governance_snapshot_statuses.go` | accepted DB-BULKOPS-BEHAVIORAL-EDGE-REWORK composite integrated; exact integration SHA recorded; worktree rebased to that SHA; predecessor path evidence complete | fresh per-test DB/schema isolation; migration 144 apply/rollback/reapply/constraint proof; project/global aggregate boundaries; no closed-DB reuse or order dependence; checker/post-review precede the exact ownership transfer to CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK | | CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK | `work/prc-candidate-review-snapshot-rollback` | `internal/reviewpacket/candidate.go`, `internal/reviewpacket/candidate_test.go`, `internal/db/gorm/candidate_store.go`, `internal/db/gorm/candidate_store_test.go`, `internal/db/gorm/snapshot_store.go`, `internal/db/gorm/snapshot_store_test.go`, `internal/bulkops/rollback_test.go`, new `tests/critical/candidate_review/candidate_review_snapshot_rollback_test.go` | accepted DB-BULKOPS-BEHAVIORAL-EDGE-REWORK composite plus accepted DB-GOVERNANCE integrated; exact predecessor SHAs recorded; worktree rebased to the latest integration SHA; final writer in the candidate-store epoch | predecessor candidate-review snapshots must already reject wrong types and carry durable audit; inside the same candidate transition transaction, persist locked `Before`, committed `After`, snapshot row, candidate mutation, promoted-memory amendment where applicable, and `candidate_review` audit; any failure rolls back all writes; cover promote, preserve, reject, suppress, and supersede; permanent immediate rollback and later-state conflict regressions; independent checker and post-review PASS before integration | | INGEST-DOC-CLASSIFICATION | checker-only | read-only `.agent/reports/2026-07-10-openclaw-ingest-classification.md` | complete at SHA256 `A095E9D7B69DC95CAC4022EB97D2EA9B403D5132F5602FDD85E7D3A93092F5D4` | `SnapshotOpIngestDoc` / `executeIngestDoc` is `CLASSIFIED_pre-demolition-stale` in the taxonomy's stale/unwired bucket, historically introduced post-demolition; it blocks plan/audit closure and is never a live, dormant, or must-build scaffold | @@ -120,12 +124,12 @@ Durable local layout: `.agent/worktrees//` (already ignored through `.git | DB-CRYSTALLIZATION | `work/prc-db-crystallization` | `internal/worker/handlers_hooks_crystallization_integration_test.go` | RELEASE-GATES foundation before mergeable checker verdict | session-end stores redacted transcript without direct decision-memory creation; flag-off/empty safety; concurrent delivery; this test-only lane does not authorize dream-cycle production edits and must hand the live defects to CRYSTALLIZATION-DREAM-CYCLE-CORRECTNESS | | CRYSTALLIZATION-DREAM-CYCLE-CORRECTNESS | `work/prc-crystallization-dream-cycle-correctness` | `internal/worker/dream_cycle.go`, `internal/worker/dream_cycle_test.go`, new `.agent/reports/2026-07-10-crystallization-dream-cycle-correctness-maker.md`, new `.agent/e/cdc/**` | revision-4 RELEASE-GATES accepted and integrated; accepted DB-CRYSTALLIZATION test-only candidate checker/post-review integrated; worktree rebased to the latest exact integration SHA; first/current owner for both source/test paths | fail closed across the full `CRYSTALLIZATION` / `VNEXT_F` / LLM availability-result matrix: no read/extract/route/mark/watermark when crystallization is off; no mark or watermark when candidate persistence is unavailable, the F flag is off, LLM is disabled, extraction fails, routing returns nil, or any route errors; group transcript work by exact `(project, session_id)` so no digest or candidate crosses project/session provenance; mark only a batch whose every extracted decision reached a durable created-or-duplicate result; preserve unprocessed rows across restart/retry and prove exactly-once candidate persistence by fingerprint; use fresh migrated PostgreSQL per run, focused repeat at least 20, package repeat at least 3, race at least 3, process restart, zero residual sessions/databases, independent checker PASS, and post-review PASS; do not restore direct session-end regex extraction, direct memory creation, or any v5-demolished graph/rerank/scoring path; any proved need to change `internal/db/gorm/transcript_store.go` or its test stops for a root plan/state amendment before edit | | DB-EMBEDDING-STATS | `work/prc-db-embedding-stats` | `internal/embedding/store.go`, `internal/embedding/store_stats_test.go`, `.agent/reports/2026-07-10-db-embedding-stats-maker.md`, `.agent/reports/evidence/production-ready/db-embedding-stats/**`, `.agent/specs/db-embedding-stats/evidence/**` | RELEASE-GATES full diagnostic plus live call-path classification; immutable accepted product source `38d6a4fb7ff5f5ae3b6c0066c0a1b806421137df` remains separate from every evidence-transport revision | empty `content_chunks` and zero active memories return zero-valued stats with `LastChunkAt=nil`, never a NULL-to-`time.Time` scan error; populated/model/dimension/coverage behavior unchanged; focused repeat >=20, package/race/vet, fresh schema and zero sessions; no evidence-only commit may alter or rebind the accepted product source | -| DB-EMBEDDING-EVIDENCE-TRANSPORT | `work/prc-db-embedding-evidence-transport-r6` | `.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/**`, `.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/**`, `.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4/**`, `.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/**`, `.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/**`, `.agent/specs/db-embedding-stats-evidence-transport/evidence/**` only | immutable product source `38d6a4fb7ff5f5ae3b6c0066c0a1b806421137df`; rejected R5 base `369951b61ee07cb0c405558e0f677cd1c9e90362`, head `a538f6224ef31f612152470a4ecd45e78ff9d0f2`; R6 starts exactly at `a538f6224ef31f612152470a4ecd45e78ff9d0f2`; live status `R6_MAKER_ACTIVE_ON_EXACT_R5_BASE`; no product edits or integration are authorized | preserve manifest/path/null-access/Prove-It rails, but reject placeholder `80.0/0.0/0.0` and stale mixed-worktree metrics; staged LF execution passed 24/24 while actual aggregate coverage was 66.65% line / 59.64% branch / 88.17% functions after the in-band denominator expansion; R5 remains rejected for synthesized exit status, autocrlf 23/24 representation failure, and stale 9/15 Prove-It; R6 must close those exact classes inside the bounded R6 evidence family and receive a fresh checker plus root post-review before acceptance | +| DB-EMBEDDING-EVIDENCE-TRANSPORT | `work/prc-db-embedding-evidence-transport-r6` | `.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport/**`, `.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r3/**`, `.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r4/**`, `.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r5/**`, `.agent/reports/evidence/production-ready/db-embedding-stats-evidence-transport-r6/**`, `.agent/specs/db-embedding-stats-evidence-transport/evidence/**` only | immutable product source `38d6a4fb7ff5f5ae3b6c0066c0a1b806421137df`; rejected R5 head `a538f6224ef31f612152470a4ecd45e78ff9d0f2`; immutable R6 direct successor `a1a3bfeb6546d1f3f24192b1c9f057402b6249a2`; live status `R6_READY_FOR_FRESH_CHECKER`; no product edits or integration are authorized | preserve manifest/path/null-access/Prove-It rails and the exact 32-path digest `2fb294913b315bd908adf227f28600e5b2b80753a20dd6b9606cb7ae3d907948`; R5 remains rejected; R6 may advance only after a fresh independent checker and root post-review prove exact final-commit replay and every prior failure class | | DB-REAPER | `work/prc-db-reaper-shutdown-r4` | `internal/worker/reaper/reaper.go`, `internal/worker/reaper/reaper_test.go` | register candidate `0d5cfa5c67ddbc331d7e812f98679742541b32ca` is not path-authoritative: actual diff changes `internal/worker/service.go` and `internal/worker/service_reaper_lifecycle_test.go`, while `service.go` is currently owned by AUTH-BOOTSTRAP-SECURITY; a fresh candidate requires an explicit epoch-safe plan amendment | package/race/repeat proof; environment isolation; configured/default/invalid retention; unexpired preservation; expired purge; cancellation and idempotency | | SECURITY-TOOLCHAIN | `work/prc-security-toolchain` | `go.mod`, `go.sum`, `Dockerfile` | preservation recorded + clean `origin/main` worktree; first writer in the `Dockerfile` transfer chain | build, vet, full unit/DB tests, zero reachable Go vulnerability release blocker, builder/runtime version proof; its server candidate currently leaves three unfixed Perl image findings and is not final image acceptance; checker/post-review precede transfer of `Dockerfile` to IMAGE-REMEDIATION | -| RELEASE-GATES | `work/prc-release-gates-revision9-maker` | `.github/workflows/test.yml`, `scripts/production-gates/assert-plan-path-ownership.ps1`, new `scripts/production-gates/assert-active-candidate-path-authority.ps1`, `scripts/production-gates/run-db-suite.ps1`, `.agent/specs/release-gates-r9/evidence/release-gates/**`, `.agent/reports/2026-07-11-release-gates-r9-maker.md` | exact PLAN-GOVERNANCE-R9 commit is the direct parent; rejected R8 head `406fe952c143eb8aaf5895427c568a41d4cec225` and R7 diagnostic `144eeefa003c3e1c0009c4264f41236ee3453b65` is a source-only predecessor and never acceptance authority; first writer in `.github/workflows/test.yml` before IMAGE-REMEDIATION | carry forward the wrong-package zero-acceptance repair and exact live package-plus-test workflow predicate; bind the exact canonical R9 plan SHA, ownership state, scope map, active-diff contract SHA, and AB5F register freeze provenance; execute self-contained frozen-candidate authority in CI and optional exact Git replay locally; fail closed when a required plan row and epoch disappear together, any live slice is unmapped, a fold/root/historical owner is missing or misclassified, a marked rejected head is presented as accepted, or the live unique slice set changes; allow timestamps, notes, commands, artifacts, and ordinary same-lane status/head progress to drift; preserve all R7 LF/CRLF, semantic/state/epoch, actual-Diff, combined-Diff and undeclared `.agent/**` rails; rerun actionlint, AST/vet/build/diff/gitleaks/critical and later exact DB/dev-stand gates without amending the immutable target; immutable floors remain 60/70 plus 10/10/20/55/55/55 | +| RELEASE-GATES | `work/prc-release-gates-revision10-maker` | `.github/workflows/authority-guard.yml`, `.github/workflows/test.yml`, `scripts/production-gates/assert-active-candidate-path-authority.ps1`, `scripts/production-gates/assert-pr-authority-guard.ps1`, `.agent/specs/release-gates-r10/evidence/release-gates/test-r10-authority-guard.ps1`, `.agent/specs/release-gates-r10/evidence/release-gates/R10-AUTHORITY-GUARD.red.json`, `.agent/specs/release-gates-r10/evidence/release-gates/authority-guard-simulation.json`, `.agent/specs/release-gates-r10/evidence/release-gates/strict-schema-regressions.json`, `.agent/specs/release-gates-r10/evidence/release-gates/workflow-conformance.json`, `.agent/specs/release-gates-r10/evidence/release-gates/verification-summary.json`, `.agent/specs/release-gates-r10/evidence/release-gates/security-review.md`, `.agent/reports/2026-07-11-release-gates-r10-maker.md` | exact PLAN-GOVERNANCE-R10 A commit is the direct parent; rejected R9 B `f11a77cce88f013839e22662458a3318670445e9`; forbidden checker-only base `0354362c427d99eb2993e5acddeb9d5bcd561df7`; first writer in `.github/workflows/test.yml` before IMAGE-REMEDIATION | require exact raw JSON schema/type/null validation for every load-bearing field and reject duplicates, numeric strings, scalar/object/array substitutions, raw backslashes, and coordinated contract/workflow rewrites; `pull_request_target` uses `contents: read`, no secrets or third-party actions, fetches explicit base/head refs and verifies SHAs, materializes and executes the validator only from trusted base bytes, and treats head/merge/diff/files as data only; no PR-head checkout or execution; protected authority/gate/governance mutations fail before candidate-controlled hashes can matter; deterministic local simulation must prove wrong SHA/ref, protected/coordinated rewrite, all R9 wrong-type/null/backslash attacks, and an untrusted sentinel fail while an ordinary authorized candidate passes; external required-status activation remains a separate post-bootstrap root transition; preserve the normal test workflow as defense in depth and all prior release blockers/floors | | IMAGE-REMEDIATION | `work/prc-image-remediation` | `Dockerfile`, new `cmd/engram-healthcheck/main.go`, new `cmd/engram-healthcheck/main_test.go`, `apps/operator-console/package.json`, `apps/operator-console/package-lock.json`, new `deploy/postgres/Dockerfile`, `docker-compose.yml`, `deploy/docker-compose.runtime.yml`, `docs/DEPLOYMENT.md`, `docs/PRODUCTION-TESTING-PLAYBOOK.md`, `.github/workflows/test.yml`, `.github/workflows/docker.yaml`, `.github/workflows/docker-publish.yml`, new `scripts/production-gates/build-and-scan-images.ps1`, new `tests/critical/runtime/image_runtime_contract_test.go`, new `tests/critical/runtime/postgres_image_contract_test.go` | accepted RELEASE-GATES and SECURITY-TOOLCHAIN integrated; worktree rebased to both exact SHAs; first writer before DEPLOYMENT-ROLLBACK, OC-INTEGRATION, and CORE-PUBLIC-TRUTH take their compose/operator/docs epochs | preserve exact parent scan RED `operator=5`, `postgres=38`, `server=13`; build one tiny `CGO_ENABLED=0` `engram-healthcheck` binary and copy it into both shell-free runtime stages with JSON-form `HEALTHCHECK`; both container healthchecks call their direct or proxied `/api/ready`, parse JSON, and exit zero only on exact `status=ready`; server `/health` remains the intentional liveness surface and is tested separately, never used as Docker readiness; server uses pinned multi-arch `gcr.io/distroless/base-debian13@sha256:b78832f41c8128046807c24840ebee4f1c18ba7870eed423d8750c272c15e147` and proves the CGO server's `ldd` dependencies are present at runtime, UID `65532`, non-writable/read-only rootfs operation, liveness `/health` plus dependency-aware `/api/ready`, `HOME=/var/lib/engram`, and a persistent writable named or bind volume at `/var/lib/engram` provisioned as UID/GID `65532:65532` mode `0700` while every other rootfs path remains read-only; current `internal/config.DataDir()` derives `$HOME/.engram`, so `ENGRAM_DATA_DIR` is explicitly forbidden from docs/tests unless a separately owned config change first makes it live; operator uses pinned multi-arch `gcr.io/distroless/nodejs22-debian13@sha256:773a62fbe24a3f8c8b24b16fd59154627f8b406737bc906f83bf1732bc8907dd`, image node entrypoint plus `CMD [".output/server/index.mjs"]`, UID `65532`, nonroot ownership, a locked graph without picomatch/sigstore findings, and exact runtime `NUXT_OPERATOR_API_TARGET=http://server:37777` matching `apps/operator-console/nuxt.config.ts`; rewrite `deploy/docker-compose.runtime.yml` from stale `operator-web`/`NUXT_ENGRAM_API_TARGET` to canonical `operator-console`/`ghcr.io/thebtf/engram-operator-console`/`NUXT_OPERATOR_API_TARGET`, while DEPLOYMENT-ROLLBACK removes the stale standalone deployment consumer after its zero-consumer proof; add permanent `TestOperatorConsoleRuntimeTargetContract` so root HTTP 200 is insufficient and proxied `/api/health` plus `/api/ready` must reach the exact backend and return semantic ready; PostgreSQL source lock is proven Wolfi prototype `engram-prc-pg17-wolfi:prototype` image ID `sha256:6f1fcade7d5e873aa7624f821e593b4bb21e8f4c69c8f3d2de9f76134c175bbc`, packages `postgresql-17=17.10-r1` and `pgvector-17=0.8.1-r0`, zero findings at every severity, and vector/restart persistence; `deploy/postgres/Dockerfile` pins the Wolfi base digest and packages, sets `ENV LANG=C.UTF-8 LC_ALL=C.UTF-8` because `LANG=en_US.UTF-8` deterministically fails `initdb`, and excludes cache/build residue; exact helper command remains `pwsh ./scripts/production-gates/build-and-scan-images.ps1 -ServerTag engram:prc-server -OperatorTag engram:prc-operator-console -PostgresTag engram:prc-postgres -Platform linux/amd64 -ArtifactRoot .agent/reports/evidence/production-ready/image-remediation -NoAllowlist`; it builds all tags, captures Dockerfile/base/package/image IDs, scans each exact image ID, starts the canonical three-image compose stand, proves all health/readiness/version/vector/migration/restart/container-recreation/retained-marker contracts, injects absent/unowned/unwritable `HOME` storage, first-boot/restart permission, stale/missing/wrong operator API target, unreachable-backend, and malformed/error-body/HTTP-200 `/api/ready` failures, proves Docker health never becomes healthy in every negative case, always tears down probe containers/networks/volumes, verifies zero residue, and writes `final-image-set.json`; docs must name only the accepted PostgreSQL image and canonical operator-console release stack; acceptance requires zero HIGH/CRITICAL and no scanner exception/allowlist; checker rebuilds without local cache and repeats scan/runtime/failure-cleanup proof before post-review | -| SECURITY-PROJECT-IDENTITY | `work/prc-security-project-identity-r4` | `internal/db/gorm/project_store.go`, `internal/db/gorm/project_identity_v2_test.go`, `internal/grpcserver/project_identity_v2_test.go`, `internal/proxy/identity.go`, `internal/proxy/identity_test.go`, new `internal/proxy/identity_process_test.go`, `plugin/engram/hooks/lib.js`, `plugin/engram/hooks/project-identity-v2.test.js`, `plugin/openclaw-engram/src/identity.ts`, `plugin/openclaw-engram/test/project-identity-v2.test.mjs`, `.agent/specs/security-project-identity/evidence/**`, `.agent/reports/evidence/production-ready/security-project-identity/**` | convergent GE-003 contract; R2 rejected head and exact R3 base `9e2ce4e58a5cded69660ca9ac532d2167f315bb2`; R3 product head `38344455754fe503acbd79d2134141f996adff7f` is rejected by checker commit `0d84047c280a873dd21baae2ecbf83ec422d497f` (`REVISE/HIGH`) because its permanent Go test is goroutine-only; R4 starts exactly at the R3 product head, never at the checker-only commit; live status `R4_MAKER_ACTIVE_ON_EXACT_R3_PRODUCT_HEAD`; no integration is authorized before fresh checker and root post-review | close both confirmed checker defects: direct store and default gRPC reject `"a b"` and `"../x"` as `PROJECT_IDENTITY_INVALID` before DB/handler access, while colon/backslash outer selectors and legacy-alias internal whitespace retain required compatibility; concurrent same-anchor creation must not expose an `O_EXCL` winner's partially written final file or transient EOF to a loser, and must converge on complete durable bytes; preserve all other R2 C1-C5 claims as unaccepted hypotheses until checker replay; R4 must add a permanent OS child-process contention proof while retaining the useful intra-process goroutine coverage while changing only `internal/proxy/identity_test.go` and/or new `internal/proxy/identity_process_test.go` plus the existing bounded evidence/report namespaces; temporary RED/Prove-It edits to `internal/proxy/identity.go` must be restored before commit; focused RED/GREEN/Prove-It, race/concurrency proof, full PG17/client parity, fresh checker and root post-review are mandatory before SECURITY-PROJECT-IDENTITY may unblock OPENCLAW-RELEASE | +| SECURITY-PROJECT-IDENTITY | `work/prc-security-project-identity-r4` | `internal/db/gorm/project_store.go`, `internal/db/gorm/project_identity_v2_test.go`, `internal/grpcserver/project_identity_v2_test.go`, `internal/proxy/identity.go`, `internal/proxy/identity_test.go`, `internal/proxy/identity_process_test.go`, `plugin/engram/hooks/lib.js`, `plugin/engram/hooks/project-identity-v2.test.js`, `plugin/openclaw-engram/src/identity.ts`, `plugin/openclaw-engram/test/project-identity-v2.test.mjs`, `.agent/specs/security-project-identity/evidence/**`, `.agent/reports/evidence/production-ready/security-project-identity/**` | R3 product head `38344455754fe503acbd79d2134141f996adff7f` remains rejected history; R4 maker `320f1d806729085f56e91b505b738444408639e1`; direct-child checker `3aa11399b2c7fa8f2188f35f68c110b1c33a1ef4` verdict `ACCEPT`; exact five-path LF digest `ff2385aa04e726c653db0c70a525f3e3957bc91e6bda1e6526fdd63afe5b5b7d`; root post-review and integration pending | accepted checker evidence closes the permanent OS child-process contention proof inside the bounded five-path R4 diff; do not widen it back to R3 paths or claim release integration; root post-review and exact integration are still required before SECURITY-PROJECT-IDENTITY unblocks OPENCLAW-RELEASE | | OPENCLAW-RELEASE | `work/prc-openclaw-release` | `plugin/openclaw-engram/.gitignore`, `plugin/openclaw-engram/package.json`, new `plugin/openclaw-engram/package-lock.json`, `plugin/openclaw-engram/openclaw.plugin.json`, `plugin/openclaw-engram/README.md`, `.github/workflows/plugin-publish.yml`, `docs/RELEASE-PROTOCOL.md` | accepted SECURITY-PROJECT-IDENTITY integrated; worktree rebased to its exact integration SHA; accepted RELEASE-GATES `run-node-matrix.ps1` exists before checker execution; ordering edge `SECURITY-PROJECT-IDENTITY -> OPENCLAW-RELEASE -> INTEGRATION-RELEASE` | current baseline authority is package/plugin/npm `3.7.5`; record registry version and actual-diff semver decision after the identity source change, require the final local version to be publishable and greater than the current registry version when packageable source changed, align package/plugin/lock-top/lock-root versions, remove the lock ignore and track a generated lockfile v3, preserve declared dependency ranges unless a separately reviewed dependency change is recorded, replace publish-time `npm install` with `npm ci`, and prove from a fresh detached worktree with no pre-existing `node_modules`: tracked-lock/parity, `npm ci`, typecheck, tests, high-severity audit, package dry-run contents, clean Git status, publish/readback, independent checker PASS, and post-run review PASS under `.agent/reports/evidence/production-ready/openclaw-release/**` | | UPDATE-LIFECYCLE | `work/prc-security-updater` | `internal/update/update.go`, `internal/update/update_test.go`, `internal/worker/handlers_update.go`, `internal/worker/handlers_update_test.go`, `scripts/install.sh`, `scripts/install.ps1`, `.goreleaser.yaml`, `.github/workflows/release.yaml`, `plugin/engram/hooks/hook-cli.test.js` | convergent GE-004 update ownership/provenance decision; avoid `internal/worker/service.go` overlap | read-only version discovery resolves real zip/tar assets; `/api/update/apply`, `/api/update/restart`, and `/api/restart` fail before download/write/goroutine/self-spawn with stable externally-managed receipts; container updates only by image digest redeploy/rollback; plugin assets only by marketplace/launcher versioned cache; standalone route only from an authenticated release bundle; signed checksum identity and exact archive entry are mandatory; missing verifier/metadata, bad signature/checksum, oversized download/extraction, interrupted staging, activation/readiness failure, retry and rollback are deterministic and leave the prior artifact byte-identical; release archives contain required installer/manifest material; raw curl/irm-pipe execution is not a production contract | | SECURITY-REVIEW | checker-only | read-only review of SQL construction, template rendering, reverse proxy, updater/extraction, auth, secrets, and externally controlled inputs | SECURITY-TOOLCHAIN plus integrated candidate | no unresolved S3/S4 finding; dependency bump is not sufficient evidence | @@ -197,6 +201,8 @@ Rows are exclusive within an ownership epoch. A repeated path below is a seriali | `docs/operating-engram.md` | REDACTION-LIVE-CONTRACT | FINAL-PUBLIC-TRUTH | redaction live contract checker/post-review PASS and exact integration SHA; FINAL rebased and revalidates the operator claims against final published artifacts | | `Dockerfile` | SECURITY-TOOLCHAIN | IMAGE-REMEDIATION | toolchain checker and post-review PASS, commit integrated, image worktree rebased, zero-finding rebuild and scan before successor integration | | `.github/workflows/test.yml` | RELEASE-GATES | IMAGE-REMEDIATION | release-gates checker and post-review PASS, commit integrated, image worktree rebased before workflow image-identity changes | +| `.github/workflows/authority-guard.yml`, `scripts/production-gates/assert-active-candidate-path-authority.ps1`, `scripts/production-gates/assert-pr-authority-guard.ps1` | RELEASE-GATES | — | single-owner R10 trusted-executor epoch; B10 starts only from committed A10, then requires independent checker PASS, post-review PASS, integration SHA, and external required-status bootstrap proof before any later writer | +| `.agent/specs/release-gates-r10/evidence/release-gates/test-r10-authority-guard.ps1`, `.agent/specs/release-gates-r10/evidence/release-gates/R10-AUTHORITY-GUARD.red.json`, `.agent/specs/release-gates-r10/evidence/release-gates/authority-guard-simulation.json`, `.agent/specs/release-gates-r10/evidence/release-gates/strict-schema-regressions.json`, `.agent/specs/release-gates-r10/evidence/release-gates/workflow-conformance.json`, `.agent/specs/release-gates-r10/evidence/release-gates/verification-summary.json`, `.agent/specs/release-gates-r10/evidence/release-gates/security-review.md`, `.agent/reports/2026-07-11-release-gates-r10-maker.md` | RELEASE-GATES | — | single-owner R10 test/evidence epoch; every path is immutable B10 evidence, maker-authored only, and never substitutes for independent checker or external enforcement evidence | | `docker-compose.yml`, `deploy/docker-compose.runtime.yml` | IMAGE-REMEDIATION | DEPLOYMENT-ROLLBACK | image checker and post-review PASS, `final-image-set.json` recorded, deployment worktree rebased, fresh scan after edits | | `apps/operator-console/package.json`, `apps/operator-console/package-lock.json` | IMAGE-REMEDIATION | OC-INTEGRATION | image checker and post-review PASS, OC worktree rebased, any later dependency edit reruns audit/build/browser/image scan | | `docs/DEPLOYMENT.md`, `docs/PRODUCTION-TESTING-PLAYBOOK.md` | IMAGE-REMEDIATION | CORE-PUBLIC-TRUTH -> FINAL-PUBLIC-TRUTH | image proof integrated; CORE rebased for M5; FINAL rebased to exact M6 integration and final-version artifact before edit | diff --git a/.agent/plans/2026-07-10-engram-production-ready-ownership-state.json b/.agent/plans/2026-07-10-engram-production-ready-ownership-state.json index e3cea931..60cf8b26 100644 --- a/.agent/plans/2026-07-10-engram-production-ready-ownership-state.json +++ b/.agent/plans/2026-07-10-engram-production-ready-ownership-state.json @@ -2,11 +2,11 @@ "schema_version": 1, "plan": { "path": ".agent/plans/2026-07-10-engram-production-ready-master-plan.md", - "sha256": "4388337722e57b48e93515008e4220d6cd2c83de695c4c449387f071c59fb96f" + "sha256": "084b4780386b22c5c7d941543c6e6a8f28fc1345bef67802b1b64f2160dacaae" }, "scope_map": { "path": ".agent/plans/2026-07-10-engram-production-ready-scope-map.json", - "sha256": "fb170d59f3072117489402fd347cd1432c40adbc842811f92227498bcbc92693" + "sha256": "7c50b3d81095e7246aebea31d2f1f185117ea960402211854685a85a199d9fbf" }, "path_epochs": [ { @@ -219,6 +219,116 @@ "completed_predecessors": [], "required_successor_base_sha": null }, + { + "path": ".github/workflows/authority-guard.yml", + "ordered_owners": [ + "RELEASE-GATES" + ], + "current_owner": "RELEASE-GATES", + "transition_kind": "integration", + "completed_predecessors": [], + "required_successor_base_sha": null + }, + { + "path": "scripts/production-gates/assert-active-candidate-path-authority.ps1", + "ordered_owners": [ + "RELEASE-GATES" + ], + "current_owner": "RELEASE-GATES", + "transition_kind": "integration", + "completed_predecessors": [], + "required_successor_base_sha": null + }, + { + "path": "scripts/production-gates/assert-pr-authority-guard.ps1", + "ordered_owners": [ + "RELEASE-GATES" + ], + "current_owner": "RELEASE-GATES", + "transition_kind": "integration", + "completed_predecessors": [], + "required_successor_base_sha": null + }, + { + "path": ".agent/specs/release-gates-r10/evidence/release-gates/test-r10-authority-guard.ps1", + "ordered_owners": [ + "RELEASE-GATES" + ], + "current_owner": "RELEASE-GATES", + "transition_kind": "integration", + "completed_predecessors": [], + "required_successor_base_sha": null + }, + { + "path": ".agent/specs/release-gates-r10/evidence/release-gates/R10-AUTHORITY-GUARD.red.json", + "ordered_owners": [ + "RELEASE-GATES" + ], + "current_owner": "RELEASE-GATES", + "transition_kind": "integration", + "completed_predecessors": [], + "required_successor_base_sha": null + }, + { + "path": ".agent/specs/release-gates-r10/evidence/release-gates/authority-guard-simulation.json", + "ordered_owners": [ + "RELEASE-GATES" + ], + "current_owner": "RELEASE-GATES", + "transition_kind": "integration", + "completed_predecessors": [], + "required_successor_base_sha": null + }, + { + "path": ".agent/specs/release-gates-r10/evidence/release-gates/strict-schema-regressions.json", + "ordered_owners": [ + "RELEASE-GATES" + ], + "current_owner": "RELEASE-GATES", + "transition_kind": "integration", + "completed_predecessors": [], + "required_successor_base_sha": null + }, + { + "path": ".agent/specs/release-gates-r10/evidence/release-gates/workflow-conformance.json", + "ordered_owners": [ + "RELEASE-GATES" + ], + "current_owner": "RELEASE-GATES", + "transition_kind": "integration", + "completed_predecessors": [], + "required_successor_base_sha": null + }, + { + "path": ".agent/specs/release-gates-r10/evidence/release-gates/verification-summary.json", + "ordered_owners": [ + "RELEASE-GATES" + ], + "current_owner": "RELEASE-GATES", + "transition_kind": "integration", + "completed_predecessors": [], + "required_successor_base_sha": null + }, + { + "path": ".agent/specs/release-gates-r10/evidence/release-gates/security-review.md", + "ordered_owners": [ + "RELEASE-GATES" + ], + "current_owner": "RELEASE-GATES", + "transition_kind": "integration", + "completed_predecessors": [], + "required_successor_base_sha": null + }, + { + "path": ".agent/reports/2026-07-11-release-gates-r10-maker.md", + "ordered_owners": [ + "RELEASE-GATES" + ], + "current_owner": "RELEASE-GATES", + "transition_kind": "integration", + "completed_predecessors": [], + "required_successor_base_sha": null + }, { "path": "docker-compose.yml", "ordered_owners": [ diff --git a/.agent/plans/2026-07-10-engram-production-ready-scope-map.json b/.agent/plans/2026-07-10-engram-production-ready-scope-map.json index 7777aaed..993fb4e2 100644 --- a/.agent/plans/2026-07-10-engram-production-ready-scope-map.json +++ b/.agent/plans/2026-07-10-engram-production-ready-scope-map.json @@ -46,12 +46,12 @@ {"slice":"DB-BULKOPS","classification":"maker","plan_owners":["DB-BULKOPS"],"register_status":"REVISE_HOLD","register_head":"68b2ce5835c7c6efdf1c68da9eedcb8d9c3837ef","load_bearing":{"policy":"rejected_heads_must_not_be_accepted","rejected_heads":["68b2ce5835c7c6efdf1c68da9eedcb8d9c3837ef"]}}, {"slice":"DB-BULKOPS-BEHAVIORAL-EDGE-REWORK","classification":"maker","plan_owners":["DB-BULKOPS-BEHAVIORAL-EDGE-REWORK"],"register_status":"READY_FOR_INTEGRATION_WITH_CONCERNS","register_head":"bd68c05baf4b7250096dd84f56bebea2aa555970","register_notes":"Frozen full-candidate authority is 68b2ce5835c7c6efdf1c68da9eedcb8d9c3837ef..bd68c05baf4b7250096dd84f56bebea2aa555970. The live register partial base cd098397 omits the first rework commit and is discovery-only."}, {"slice":"DB-CRYSTALLIZATION","classification":"maker","plan_owners":["DB-CRYSTALLIZATION"],"register_status":"READY_FOR_INTEGRATION_WITH_CONCERNS","register_head":"2ab6211494e51aeb7b787a99e78cff8bf2d5694a"}, - {"slice":"DB-EMBEDDING-EVIDENCE-TRANSPORT","classification":"checker-evidence","plan_owners":["DB-EMBEDDING-EVIDENCE-TRANSPORT"],"register_status":"R6_MAKER_ACTIVE_ON_EXACT_R5_BASE","register_head":"a538f6224ef31f612152470a4ecd45e78ff9d0f2","register_notes":"R5 a538f622 is rejected for synthesized exit status, autocrlf 23/24 representation failure, and stale 9/15 Prove-It. R6 starts exactly at that head and is limited to baseline, R3, R4, R5, R6, and spec evidence families; no product path is authorized.","load_bearing":{"policy":"rejected_heads_must_not_be_accepted","rejected_heads":["369951b61ee07cb0c405558e0f677cd1c9e90362","a538f6224ef31f612152470a4ecd45e78ff9d0f2"]}}, + {"slice":"DB-EMBEDDING-EVIDENCE-TRANSPORT","classification":"checker-evidence","plan_owners":["DB-EMBEDDING-EVIDENCE-TRANSPORT"],"register_status":"R6_READY_FOR_FRESH_CHECKER","register_head":"a1a3bfeb6546d1f3f24192b1c9f057402b6249a2","register_notes":"R5 a538f622 remains rejected. Immutable R6 candidate a1a3bfeb is a 32-path evidence-only direct successor and awaits a fresh independent checker; it is not integrated or release accepted.","load_bearing":{"policy":"rejected_heads_must_not_be_accepted","rejected_heads":["369951b61ee07cb0c405558e0f677cd1c9e90362","a538f6224ef31f612152470a4ecd45e78ff9d0f2"]}}, {"slice":"DB-EMBEDDING-STATS","classification":"maker","plan_owners":["DB-EMBEDDING-STATS"],"register_status":"PRODUCT_ACCEPTED_EVIDENCE_R3_CHECKER_ACTIVE","register_head":"38d6a4fb7ff5f5ae3b6c0066c0a1b806421137df"}, {"slice":"DB-GOVERNANCE","classification":"maker","plan_owners":["DB-GOVERNANCE"],"register_status":"BLOCKED_BY_RELEASE_GATES","register_head":""}, {"slice":"DB-REAPER","classification":"maker","plan_owners":["DB-REAPER"],"register_status":"CANDIDATE_REJECTED_PATH_AUTHORITY_CONFLICT","register_head":"0d5cfa5c67ddbc331d7e812f98679742541b32ca","register_notes":"The observed candidate changes internal/worker/service.go, currently owned by AUTH-BOOTSTRAP-SECURITY, plus an undeclared lifecycle test. It is excluded from frozen current candidate authority; no simultaneous writer is granted."}, {"slice":"DB-RULES-ISOLATION","classification":"maker","plan_owners":["DB-RULES-ISOLATION"],"register_status":"BLOCKED_BY_DIAGNOSTIC_LANES","register_head":""}, - {"slice":"DB-TEST-POOL-HYGIENE","classification":"maker","plan_owners":["DB-TEST-POOL-HYGIENE"],"register_status":"READY_FOR_CHECK","register_head":"68242c48aaad62ec087166eeb9ea32f14d189450"}, + {"slice":"DB-TEST-POOL-HYGIENE","classification":"maker","plan_owners":["DB-TEST-POOL-HYGIENE"],"register_status":"R3_IMMUTABLE_PENDING_CHECKER_AND_ROOT_ACCEPTANCE","register_head":"331b5b195a967e7f27dca94038a3480c9afcc84f","register_notes":"R2 68242c48 is rejected by checker a7b2d36b with four HIGH evidence-verifier defects. R3 331b5b19 is its direct-child ten-path evidence-only successor; immutable adversarial completion, fresh checker, and root acceptance remain pending.","load_bearing":{"policy":"rejected_heads_must_not_be_accepted","rejected_heads":["68242c48aaad62ec087166eeb9ea32f14d189450"]}}, {"slice":"DEMOLITION-SKIP-CLASSIFICATION","classification":"checker-evidence","plan_owners":["DEMOLITION-SKIP-CLASSIFICATION"],"register_status":"REGISTER_HEAD_MISBOUND_TO_R5_RELEASE_GATE_DIFF_REJECTED","register_head":"d59d1605969b1f567506e96ded524dfd1e4be08a","register_notes":"The canonical row's 4812589b..d59d1605 diff contains seven R5 release-gate paths, not demolition classification evidence. The checker-only plan row owns no paths. R8 Diff also throws a scalar Count internal error; R9 must return a clear zero-declarations/undeclared-diff failure.","load_bearing":{"policy":"rejected_heads_must_not_be_accepted","rejected_heads":["d59d1605969b1f567506e96ded524dfd1e4be08a"]}}, {"slice":"DEPLOYMENT-ROLLBACK","classification":"maker","plan_owners":["DEPLOYMENT-ROLLBACK"],"register_status":"BLOCKED_BY_IMAGE_REMEDIATION","register_head":""}, {"slice":"DOCUMENT-INGEST-PUBLIC-TRUTH","classification":"maker","plan_owners":["DOCUMENT-INGEST-PUBLIC-TRUTH"],"register_status":"READY_TO_DISPATCH","register_head":""}, @@ -63,7 +63,7 @@ {"slice":"INGEST-DOC-SNAPSHOT-DEMOLITION","classification":"maker","plan_owners":["INGEST-DOC-SNAPSHOT-DEMOLITION"],"register_status":"BLOCKED_BY_DB_BULKOPS","register_head":""}, {"slice":"INTEGRATION-RELEASE","classification":"root-integration","plan_owners":["INTEGRATION-RELEASE"],"register_status":"BLOCKED_BY_RELEASE_GATES_PREVIEW_MEASURED","register_head":""}, {"slice":"LAUNCHER-FIRST-RUN","classification":"maker","plan_owners":["LAUNCHER-FIRST-RUN"],"register_status":"BLOCKED_BY_IDENTITY_AND_RELEASE_GATES","register_head":""}, - {"slice":"MASTER-PLAN","classification":"meta-fold","plan_owners":["PLAN-GOVERNANCE"],"register_status":"R9_MAKER_ACTIVE_ON_REJECTED_R8_BASE","register_head":"406fe952c143eb8aaf5895427c568a41d4cec225"}, + {"slice":"MASTER-PLAN","classification":"meta-fold","plan_owners":["PLAN-GOVERNANCE"],"register_status":"R10_MAKER_ACTIVE_ON_REJECTED_R9_BASE","register_head":"f11a77cce88f013839e22662458a3318670445e9"}, {"slice":"MCP-STRUCTURED-INPUT-VALIDATION","classification":"maker","plan_owners":["MCP-STRUCTURED-INPUT-VALIDATION"],"register_status":"CLASSIFIED_MUST_BUILD","register_head":""}, {"slice":"NORTHSTAR-BOOK-CONTRACTS","classification":"maker","plan_owners":["NORTHSTAR-BOOK-CONTRACTS"],"register_status":"BLOCKED_BY_M5","register_head":""}, {"slice":"NORTHSTAR-CI-A-CONTRACTS","classification":"maker","plan_owners":["NORTHSTAR-CI-A-CONTRACTS"],"register_status":"BLOCKED_BY_M5","register_head":""}, @@ -76,16 +76,16 @@ {"slice":"OPENCLAW-RELEASE","classification":"maker","plan_owners":["OPENCLAW-RELEASE"],"register_status":"BLOCKED_BY_SECURITY_PROJECT_IDENTITY","register_head":""}, {"slice":"OPERATIONS","classification":"meta-fold","plan_owners":["DEPLOYMENT-ROLLBACK","RECOVERY-DATA","OBSERVABILITY-OTLP","PRIVACY-BOUNDARIES","CORE-PUBLIC-TRUTH","FINAL-PUBLIC-TRUTH"],"register_status":"PENDING","register_head":""}, {"slice":"OPERATOR-CONSOLE","classification":"meta-fold","plan_owners":["IMAGE-REMEDIATION","OC-INTEGRATION"],"register_status":"PENDING","register_head":""}, - {"slice":"PLAN-GOVERNANCE","classification":"maker","plan_owners":["PLAN-GOVERNANCE"],"register_status":"R9_MAKER_ACTIVE_FULL_DIFF_AUTHORITY_AUDIT","register_head":"406fe952c143eb8aaf5895427c568a41d4cec225"}, + {"slice":"PLAN-GOVERNANCE","classification":"maker","plan_owners":["PLAN-GOVERNANCE"],"register_status":"R10_MAKER_ACTIVE_TRUSTED_BASE_AUTHORITY","register_head":"f11a77cce88f013839e22662458a3318670445e9"}, {"slice":"PRE-V5-UPGRADE-CONTRACT","classification":"maker","plan_owners":["PRE-V5-UPGRADE-CONTRACT"],"register_status":"READY_FOR_MAKER_HISTORICAL_FIXTURE_REQUIRED","register_head":""}, {"slice":"PRIVACY-BOUNDARIES","classification":"maker","plan_owners":["PRIVACY-BOUNDARIES"],"register_status":"BLOCKED_BY_DATA_STACK","register_head":""}, {"slice":"RECOVERY-DATA","classification":"maker","plan_owners":["RECOVERY-DATA"],"register_status":"BLOCKED_BY_DEPLOYMENT","register_head":""}, {"slice":"REDACTION-LIVE-CONTRACT","classification":"maker","plan_owners":["REDACTION-LIVE-CONTRACT"],"register_status":"CLASSIFIED_RELEASE_BLOCKER_PLAN_REVISED","register_head":""}, - {"slice":"RELEASE-GATES","classification":"maker","plan_owners":["RELEASE-GATES"],"register_status":"R9_MAKER_ACTIVE_BLOCKED_PENDING_SUCCESSOR_COMMITS","register_head":"406fe952c143eb8aaf5895427c568a41d4cec225","load_bearing":{"policy":"rejected_heads_must_not_be_accepted","rejected_heads":["144eeefa003c3e1c0009c4264f41236ee3453b65","406fe952c143eb8aaf5895427c568a41d4cec225"]}}, + {"slice":"RELEASE-GATES","classification":"maker","plan_owners":["RELEASE-GATES"],"register_status":"R10_MAKER_ACTIVE_AFTER_R9_REVISE_2_HIGH_1_MED","register_head":"f11a77cce88f013839e22662458a3318670445e9","register_notes":"R9 A/B are preserved rejected history. R10 adds strict raw-JSON schema/type/null/path validation and a default-branch pull_request_target guard whose executable bytes come only from the trusted base.","load_bearing":{"policy":"rejected_heads_must_not_be_accepted","rejected_heads":["144eeefa003c3e1c0009c4264f41236ee3453b65","406fe952c143eb8aaf5895427c568a41d4cec225","f11a77cce88f013839e22662458a3318670445e9"]}}, {"slice":"RETRIEVAL-VECTOR-CONTRACT","classification":"maker","plan_owners":["RETRIEVAL-VECTOR-CONTRACT"],"register_status":"READY_FOR_MAKER","register_head":""}, {"slice":"ROADMAP-RECONCILIATION","classification":"maker","plan_owners":["ROADMAP-RECONCILIATION"],"register_status":"BLOCKED_BY_IMPLEMENTATION_TRUTH","register_head":""}, {"slice":"S4B-CONTRACT","classification":"maker","plan_owners":["S4B-CONTRACT"],"register_status":"BLOCKED_BY_PLAN_GOVERNANCE","register_head":""}, - {"slice":"SECURITY-PROJECT-IDENTITY","classification":"maker","plan_owners":["SECURITY-PROJECT-IDENTITY"],"register_status":"R4_MAKER_ACTIVE_ON_EXACT_R3_PRODUCT_HEAD","register_head":"38344455754fe503acbd79d2134141f996adff7f","load_bearing":{"policy":"rejected_heads_must_not_be_accepted","rejected_heads":["9e2ce4e58a5cded69660ca9ac532d2167f315bb2","38344455754fe503acbd79d2134141f996adff7f"]},"register_notes":"R3 product head 38344455 is rejected by checker-only commit 0d84047c (REVISE/HIGH: permanent Go test is goroutine-only). R4 starts at 38344455, never at the checker commit, and is bounded to internal/proxy/identity_test.go and/or new internal/proxy/identity_process_test.go plus existing security-project-identity evidence/report namespaces; temporary identity.go RED mutations must be absent from the final diff."}, + {"slice":"SECURITY-PROJECT-IDENTITY","classification":"maker","plan_owners":["SECURITY-PROJECT-IDENTITY"],"register_status":"R4_CHECKER_ACCEPTED_PENDING_ROOT_POST_REVIEW","register_head":"320f1d806729085f56e91b505b738444408639e1","load_bearing":{"policy":"rejected_heads_must_not_be_accepted","rejected_heads":["9e2ce4e58a5cded69660ca9ac532d2167f315bb2","38344455754fe503acbd79d2134141f996adff7f"]},"register_notes":"R4 maker 320f1d80 is accepted by direct-child checker 3aa11399. Its exact five-path LF digest is ff2385aa04e726c653db0c70a525f3e3957bc91e6bda1e6526fdd63afe5b5b7d; root post-review and integration remain pending."}, {"slice":"SECURITY-TOOLCHAIN","classification":"maker","plan_owners":["SECURITY-TOOLCHAIN"],"register_status":"READY_FOR_INTEGRATION","register_head":"b0955dfd61b4ea7364f6d400579247b475a1a680"}, {"slice":"STATIC-EMBED-CONTRACT","classification":"maker","plan_owners":["STATIC-EMBED-CONTRACT"],"register_status":"READY_FOR_MAKER_SOURCE_AND_IMAGE_SPLIT","register_head":""}, {"slice":"T007-COMPAT-DEMOLITION-CLASSIFICATION","classification":"maker","plan_owners":["T007-COMPAT-DEMOLITION-CLASSIFICATION"],"register_status":"CURRENT_CONTRACT_TEST_CORRECTION_CLASSIFIED","register_head":""}, diff --git a/.agent/reports/2026-07-11-release-gates-r10-plan-governance.md b/.agent/reports/2026-07-11-release-gates-r10-plan-governance.md new file mode 100644 index 00000000..949ebfe0 --- /dev/null +++ b/.agent/reports/2026-07-11-release-gates-r10-plan-governance.md @@ -0,0 +1,46 @@ +# RELEASE-GATES R10 plan-governance maker report + +Status: `A10_READY_FOR_COMMIT` + +## Outcome + +This governance revision closes the dispatch ambiguity before any R10 guard +implementation is written. It preserves R9 PLAN-GOVERNANCE A and RELEASE-GATES +B as rejected history, starts from exact B head +`f11a77cce88f013839e22662458a3318670445e9`, and forbids checker-only commit +`0354362c427d99eb2993e5acddeb9d5bcd561df7` as a maker base. + +The R9 independent verdict is `REVISE`: two HIGH failure classes and one MEDIUM +failure class. R10 therefore owns strict raw-JSON schema/type/null/duplicate/path +validation and trusted-base PR authority enforcement. The exact twelve-path B10 +envelope is present in the master plan, active contract, ownership state, and +`path-envelope.json` before implementation. + +## Contemporaneous authority + +- SECURITY-PROJECT-IDENTITY R4 maker `320f1d80` is accepted by direct-child + checker `3aa11399`; the exact five-path LF digest is `ff2385aa...e5b5b7d`. +- DB-TEST-POOL-HYGIENE R2 `68242c48` is rejected by checker `a7b2d36b` with four + HIGH evidence-gate failures. Immutable direct-child R3 `331b5b19` is pending + fresh checker and root acceptance; maker GitRevision, adversarial 12/12, + diff-check, and gitleaks evidence is green without changing product paths. +- DB-EMBEDDING-EVIDENCE-TRANSPORT R6 `a1a3bfeb` is immutable and checker-pending. +- Canonical DB repeat-3 remains `0/3`; image HIGH/CRITICAL counts remain + server/PostgreSQL/operator `5/20/13`. Both remain release blockers. +- The v5 demolition exclusions are unchanged and are not R10 build targets. + +## External enforcement truth + +Live GitHub inspection found public User-owned repository `thebtf/engram`, +default branch `main`, and active ruleset `13610955`. The ruleset contains only +deletion and non-fast-forward protection. It does not yet require an authority +guard status. Required-status activation is a separate root-owned transition +after the accepted R10 workflow exists on the default branch; no external +mutation was made by this maker. + +## Commit contract + +A10 must be the direct child of `f11a77cc` and contain only the eight governance +paths in `path-envelope.json`. B10 must be A10's direct child and contain only +the twelve owned implementation/evidence paths. No integration, push, tag, +release, or ruleset edit is authorized here. diff --git a/.agent/specs/release-gates-r10/evidence/plan-governance/authority-snapshot.json b/.agent/specs/release-gates-r10/evidence/plan-governance/authority-snapshot.json new file mode 100644 index 00000000..e789094b --- /dev/null +++ b/.agent/specs/release-gates-r10/evidence/plan-governance/authority-snapshot.json @@ -0,0 +1,52 @@ +{ + "schema_version": 1, + "captured_at": "2026-07-11T02:50:24.9271186+03:00", + "base": "f11a77cce88f013839e22662458a3318670445e9", + "base_parent": "8cb810095b2bea77ab9812832d9ab8a99c928d18", + "base_tree": "f710b36b0155162d47ccc0956c29227daa74306f", + "r9": { + "plan_governance_a": "8cb810095b2bea77ab9812832d9ab8a99c928d18", + "release_gates_b": "f11a77cce88f013839e22662458a3318670445e9", + "checker": "0354362c427d99eb2993e5acddeb9d5bcd561df7", + "checker_parent": "f11a77cce88f013839e22662458a3318670445e9", + "checker_tree": "4e1c048577975c47e27e97cc5cc4dfe85a91dd81", + "verdict": "REVISE", + "high_findings": 2, + "medium_findings": 1, + "disposition": "preserve A and B as rejected history" + }, + "security_project_identity_r4": { + "maker": "320f1d806729085f56e91b505b738444408639e1", + "checker": "3aa11399b2c7fa8f2188f35f68c110b1c33a1ef4", + "checker_verdict": "ACCEPT", + "path_count": 5, + "paths_sha256_lf": "ff2385aa04e726c653db0c70a525f3e3957bc91e6bda1e6526fdd63afe5b5b7d", + "integration": "PENDING" + }, + "db_test_pool_hygiene": { + "r2": "68242c48aaad62ec087166eeb9ea32f14d189450", + "r2_checker": "a7b2d36b3f0a4514b51dddf341877f5b4b9721d9", + "r2_checker_verdict": "REVISE_4_HIGH", + "r3": "331b5b195a967e7f27dca94038a3480c9afcc84f", + "r3_parent": "68242c48aaad62ec087166eeb9ea32f14d189450", + "r3_tree": "12674bf76404a0e021a22d3dc7aa4d5ed3763ee0", + "r3_state": "IMMUTABLE_PENDING_CHECKER_AND_ROOT_ACCEPTANCE", + "r3_maker_verification": "PASS_GIT_REVISION_ADVERSARIAL_12_OF_12_DIFF_CHECK_GITLEAKS", + "r3_non_report_paths_from_product_base": 0 + }, + "db_embedding_evidence_transport_r6": { + "candidate": "a1a3bfeb6546d1f3f24192b1c9f057402b6249a2", + "parent": "a538f6224ef31f612152470a4ecd45e78ff9d0f2", + "tree": "f723f22cd8c740b6efb52e169b0875ccc8274a9c", + "checker": "PENDING" + }, + "release_blockers": { + "db_repeat3": "FAIL_0_OF_3", + "image_high_or_critical": { + "server": 5, + "postgres": 20, + "operator": 13 + } + }, + "demolition_exclusions_preserved": true +} diff --git a/.agent/specs/release-gates-r10/evidence/plan-governance/external-enforcement-snapshot.json b/.agent/specs/release-gates-r10/evidence/plan-governance/external-enforcement-snapshot.json new file mode 100644 index 00000000..45cbe04c --- /dev/null +++ b/.agent/specs/release-gates-r10/evidence/plan-governance/external-enforcement-snapshot.json @@ -0,0 +1,31 @@ +{ + "schema_version": 1, + "captured_at": "2026-07-11T02:50:24.9271186+03:00", + "source": "GitHub REST API and gh repo view", + "repository": "thebtf/engram", + "owner_login": "thebtf", + "owner_type": "User", + "visibility": "PUBLIC", + "default_branch": "main", + "ruleset": { + "id": 13610955, + "name": "main", + "target": "branch", + "enforcement": "active", + "rules": [ + "deletion", + "non_fast_forward" + ], + "required_status_checks_present": false + }, + "authority_guard_status_enforced": false, + "classification": "PENDING_POST_BOOTSTRAP_TRANSITION", + "bootstrap_proof_plan": [ + "independently accept and integrate the exact R10 A/B chain onto main", + "observe one successful authority-guard status on an ordinary authorized pull request", + "amend ruleset 13610955 to require that exact status without weakening existing rules", + "capture before and after ruleset JSON", + "prove an ordinary authorized pull request remains eligible", + "prove a protected-path pull request is blocked by the required status" + ] +} diff --git a/.agent/specs/release-gates-r10/evidence/plan-governance/path-envelope.json b/.agent/specs/release-gates-r10/evidence/plan-governance/path-envelope.json new file mode 100644 index 00000000..d24c43f2 --- /dev/null +++ b/.agent/specs/release-gates-r10/evidence/plan-governance/path-envelope.json @@ -0,0 +1,38 @@ +{ + "schema_version": 1, + "branch": "work/prc-release-gates-revision10-maker", + "required_base": "f11a77cce88f013839e22662458a3318670445e9", + "forbidden_base": "0354362c427d99eb2993e5acddeb9d5bcd561df7", + "commit_a10": { + "role": "governance", + "required_parent": "f11a77cce88f013839e22662458a3318670445e9", + "paths": [ + ".agent/plans/2026-07-10-engram-production-ready-active-diff-contracts.json", + ".agent/plans/2026-07-10-engram-production-ready-master-plan.md", + ".agent/plans/2026-07-10-engram-production-ready-ownership-state.json", + ".agent/plans/2026-07-10-engram-production-ready-scope-map.json", + ".agent/reports/2026-07-11-release-gates-r10-plan-governance.md", + ".agent/specs/release-gates-r10/evidence/plan-governance/authority-snapshot.json", + ".agent/specs/release-gates-r10/evidence/plan-governance/external-enforcement-snapshot.json", + ".agent/specs/release-gates-r10/evidence/plan-governance/path-envelope.json" + ] + }, + "commit_b10": { + "role": "implementation", + "required_parent": "COMMIT_A10", + "paths": [ + ".agent/reports/2026-07-11-release-gates-r10-maker.md", + ".agent/specs/release-gates-r10/evidence/release-gates/R10-AUTHORITY-GUARD.red.json", + ".agent/specs/release-gates-r10/evidence/release-gates/authority-guard-simulation.json", + ".agent/specs/release-gates-r10/evidence/release-gates/security-review.md", + ".agent/specs/release-gates-r10/evidence/release-gates/strict-schema-regressions.json", + ".agent/specs/release-gates-r10/evidence/release-gates/test-r10-authority-guard.ps1", + ".agent/specs/release-gates-r10/evidence/release-gates/verification-summary.json", + ".agent/specs/release-gates-r10/evidence/release-gates/workflow-conformance.json", + ".github/workflows/authority-guard.yml", + ".github/workflows/test.yml", + "scripts/production-gates/assert-active-candidate-path-authority.ps1", + "scripts/production-gates/assert-pr-authority-guard.ps1" + ] + } +} From 1418796e55e8b5bfbb216ffbf5a3fba9fa620922 Mon Sep 17 00:00:00 2001 From: Kirill Turanskiy Date: Sat, 11 Jul 2026 03:43:17 +0300 Subject: [PATCH 049/111] test(mcp): align T007 flag-off visibility assertion --- ...-COMPAT-DEMOLITION-CLASSIFICATION.red.json | 37 + ...-COMPAT-DEMOLITION-CLASSIFICATION.tdd.json | 56 + .../t007-compat/classification.json | 25 + .../t007-maker-focused-race/commands.json | 445 ++ .../t007-maker-focused-race/environment.json | 52 + .../go-version.stderr.log | 0 .../go-version.stdout.log | 1 + .../postgres-container-identity.stderr.log | 0 .../postgres-container-identity.stdout.log | 1 + .../postgres-server-identity.stderr.log | 0 .../postgres-server-identity.stdout.log | 1 + .../repeat-01/assert-go-test-json.stderr.log | 0 .../repeat-01/assert-go-test-json.stdout.log | 2 + .../repeat-01/cleanup-process.stderr.log | 0 .../repeat-01/cleanup-process.stdout.log | 2 + .../repeat-01/cleanup/cleanup.json | 170 + .../cleanup/database-exists-before.stderr.log | 0 .../cleanup/database-exists-before.stdout.log | 1 + .../cleanup/drop-database.stderr.log | 0 .../cleanup/drop-database.stdout.log | 1 + .../pg-stat-activity-before.stderr.log | 0 .../pg-stat-activity-before.stdout.log | 1 + .../cleanup/terminate-sessions.stderr.log | 0 .../cleanup/terminate-sessions.stdout.log | 1 + .../cleanup/verify-database-absent.stderr.log | 0 .../cleanup/verify-database-absent.stdout.log | 1 + .../connection-count-after.stderr.log | 0 .../connection-count-after.stdout.log | 1 + .../connection-count-before.stderr.log | 0 .../connection-count-before.stdout.log | 1 + .../repeat-01/coverage.out | 3472 +++++++++++++++ .../repeat-01/create-database.stderr.log | 0 .../repeat-01/create-database.stdout.log | 1 + .../repeat-01/create-pgvector.stderr.log | 0 .../repeat-01/create-pgvector.stdout.log | 1 + .../repeat-01/database-identity.stderr.log | 0 .../repeat-01/database-identity.stdout.log | 1 + .../repeat-01/go-test-summary.json | 40 + .../repeat-01/go-test.stderr.log | 0 .../repeat-01/go-test.stdout.jsonl | 16 + .../pg-stat-activity-after.stderr.log | 0 .../pg-stat-activity-after.stdout.log | 1 + .../pg-stat-activity-before.stderr.log | 0 .../pg-stat-activity-before.stdout.log | 1 + .../repeat-01/repeat-summary.json | 33 + .../server-connection-count-after.stderr.log | 0 .../server-connection-count-after.stdout.log | 1 + .../server-connection-count-before.stderr.log | 0 .../server-connection-count-before.stdout.log | 1 + .../repeat-01/targeted-coverage.stderr.log | 0 .../repeat-01/targeted-coverage.stdout.log | 352 ++ .../t007-maker-focused-race/summary.json | 64 + .../t007-maker-focused-repeat3/commands.json | 1198 +++++ .../environment.json | 52 + .../go-version.stderr.log | 0 .../go-version.stdout.log | 1 + .../postgres-container-identity.stderr.log | 0 .../postgres-container-identity.stdout.log | 1 + .../postgres-server-identity.stderr.log | 0 .../postgres-server-identity.stdout.log | 1 + .../repeat-01/assert-go-test-json.stderr.log | 0 .../repeat-01/assert-go-test-json.stdout.log | 2 + .../repeat-01/cleanup-process.stderr.log | 0 .../repeat-01/cleanup-process.stdout.log | 2 + .../repeat-01/cleanup/cleanup.json | 170 + .../cleanup/database-exists-before.stderr.log | 0 .../cleanup/database-exists-before.stdout.log | 1 + .../cleanup/drop-database.stderr.log | 0 .../cleanup/drop-database.stdout.log | 1 + .../pg-stat-activity-before.stderr.log | 0 .../pg-stat-activity-before.stdout.log | 1 + .../cleanup/terminate-sessions.stderr.log | 0 .../cleanup/terminate-sessions.stdout.log | 1 + .../cleanup/verify-database-absent.stderr.log | 0 .../cleanup/verify-database-absent.stdout.log | 1 + .../connection-count-after.stderr.log | 0 .../connection-count-after.stdout.log | 1 + .../connection-count-before.stderr.log | 0 .../connection-count-before.stdout.log | 1 + .../repeat-01/coverage.out | 3472 +++++++++++++++ .../repeat-01/create-database.stderr.log | 0 .../repeat-01/create-database.stdout.log | 1 + .../repeat-01/create-pgvector.stderr.log | 0 .../repeat-01/create-pgvector.stdout.log | 1 + .../repeat-01/database-identity.stderr.log | 0 .../repeat-01/database-identity.stdout.log | 1 + .../repeat-01/go-test-summary.json | 40 + .../repeat-01/go-test.stderr.log | 0 .../repeat-01/go-test.stdout.jsonl | 16 + .../pg-stat-activity-after.stderr.log | 0 .../pg-stat-activity-after.stdout.log | 1 + .../pg-stat-activity-before.stderr.log | 0 .../pg-stat-activity-before.stdout.log | 1 + .../repeat-01/repeat-summary.json | 33 + .../server-connection-count-after.stderr.log | 0 .../server-connection-count-after.stdout.log | 1 + .../server-connection-count-before.stderr.log | 0 .../server-connection-count-before.stdout.log | 1 + .../repeat-01/targeted-coverage.stderr.log | 0 .../repeat-01/targeted-coverage.stdout.log | 352 ++ .../repeat-02/assert-go-test-json.stderr.log | 0 .../repeat-02/assert-go-test-json.stdout.log | 2 + .../repeat-02/cleanup-process.stderr.log | 0 .../repeat-02/cleanup-process.stdout.log | 2 + .../repeat-02/cleanup/cleanup.json | 170 + .../cleanup/database-exists-before.stderr.log | 0 .../cleanup/database-exists-before.stdout.log | 1 + .../cleanup/drop-database.stderr.log | 0 .../cleanup/drop-database.stdout.log | 1 + .../pg-stat-activity-before.stderr.log | 0 .../pg-stat-activity-before.stdout.log | 1 + .../cleanup/terminate-sessions.stderr.log | 0 .../cleanup/terminate-sessions.stdout.log | 1 + .../cleanup/verify-database-absent.stderr.log | 0 .../cleanup/verify-database-absent.stdout.log | 1 + .../connection-count-after.stderr.log | 0 .../connection-count-after.stdout.log | 1 + .../connection-count-before.stderr.log | 0 .../connection-count-before.stdout.log | 1 + .../repeat-02/coverage.out | 3472 +++++++++++++++ .../repeat-02/create-database.stderr.log | 0 .../repeat-02/create-database.stdout.log | 1 + .../repeat-02/create-pgvector.stderr.log | 0 .../repeat-02/create-pgvector.stdout.log | 1 + .../repeat-02/database-identity.stderr.log | 0 .../repeat-02/database-identity.stdout.log | 1 + .../repeat-02/go-test-summary.json | 40 + .../repeat-02/go-test.stderr.log | 0 .../repeat-02/go-test.stdout.jsonl | 16 + .../pg-stat-activity-after.stderr.log | 0 .../pg-stat-activity-after.stdout.log | 1 + .../pg-stat-activity-before.stderr.log | 0 .../pg-stat-activity-before.stdout.log | 1 + .../repeat-02/repeat-summary.json | 33 + .../server-connection-count-after.stderr.log | 0 .../server-connection-count-after.stdout.log | 1 + .../server-connection-count-before.stderr.log | 0 .../server-connection-count-before.stdout.log | 1 + .../repeat-02/targeted-coverage.stderr.log | 0 .../repeat-02/targeted-coverage.stdout.log | 352 ++ .../repeat-03/assert-go-test-json.stderr.log | 0 .../repeat-03/assert-go-test-json.stdout.log | 2 + .../repeat-03/cleanup-process.stderr.log | 0 .../repeat-03/cleanup-process.stdout.log | 2 + .../repeat-03/cleanup/cleanup.json | 170 + .../cleanup/database-exists-before.stderr.log | 0 .../cleanup/database-exists-before.stdout.log | 1 + .../cleanup/drop-database.stderr.log | 0 .../cleanup/drop-database.stdout.log | 1 + .../pg-stat-activity-before.stderr.log | 0 .../pg-stat-activity-before.stdout.log | 1 + .../cleanup/terminate-sessions.stderr.log | 0 .../cleanup/terminate-sessions.stdout.log | 1 + .../cleanup/verify-database-absent.stderr.log | 0 .../cleanup/verify-database-absent.stdout.log | 1 + .../connection-count-after.stderr.log | 0 .../connection-count-after.stdout.log | 1 + .../connection-count-before.stderr.log | 0 .../connection-count-before.stdout.log | 1 + .../repeat-03/coverage.out | 3472 +++++++++++++++ .../repeat-03/create-database.stderr.log | 0 .../repeat-03/create-database.stdout.log | 1 + .../repeat-03/create-pgvector.stderr.log | 0 .../repeat-03/create-pgvector.stdout.log | 1 + .../repeat-03/database-identity.stderr.log | 0 .../repeat-03/database-identity.stdout.log | 1 + .../repeat-03/go-test-summary.json | 40 + .../repeat-03/go-test.stderr.log | 0 .../repeat-03/go-test.stdout.jsonl | 16 + .../pg-stat-activity-after.stderr.log | 0 .../pg-stat-activity-after.stdout.log | 1 + .../pg-stat-activity-before.stderr.log | 0 .../pg-stat-activity-before.stdout.log | 1 + .../repeat-03/repeat-summary.json | 33 + .../server-connection-count-after.stderr.log | 0 .../server-connection-count-after.stdout.log | 1 + .../server-connection-count-before.stderr.log | 0 .../server-connection-count-before.stdout.log | 1 + .../repeat-03/targeted-coverage.stderr.log | 0 .../repeat-03/targeted-coverage.stdout.log | 352 ++ .../t007-maker-focused-repeat3/summary.json | 130 + .../t007-maker-full-mcp/commands.json | 441 ++ .../t007-maker-full-mcp/environment.json | 52 + .../t007-maker-full-mcp/go-version.stderr.log | 0 .../t007-maker-full-mcp/go-version.stdout.log | 1 + .../postgres-container-identity.stderr.log | 0 .../postgres-container-identity.stdout.log | 1 + .../postgres-server-identity.stderr.log | 0 .../postgres-server-identity.stdout.log | 1 + .../repeat-01/assert-go-test-json.stderr.log | 0 .../repeat-01/assert-go-test-json.stdout.log | 2 + .../repeat-01/cleanup-process.stderr.log | 0 .../repeat-01/cleanup-process.stdout.log | 2 + .../repeat-01/cleanup/cleanup.json | 170 + .../cleanup/database-exists-before.stderr.log | 0 .../cleanup/database-exists-before.stdout.log | 1 + .../cleanup/drop-database.stderr.log | 0 .../cleanup/drop-database.stdout.log | 1 + .../pg-stat-activity-before.stderr.log | 0 .../pg-stat-activity-before.stdout.log | 1 + .../cleanup/terminate-sessions.stderr.log | 0 .../cleanup/terminate-sessions.stdout.log | 1 + .../cleanup/verify-database-absent.stderr.log | 0 .../cleanup/verify-database-absent.stdout.log | 1 + .../connection-count-after.stderr.log | 0 .../connection-count-after.stdout.log | 1 + .../connection-count-before.stderr.log | 0 .../connection-count-before.stdout.log | 1 + .../repeat-01/coverage.out | 3472 +++++++++++++++ .../repeat-01/create-database.stderr.log | 0 .../repeat-01/create-database.stdout.log | 1 + .../repeat-01/create-pgvector.stderr.log | 0 .../repeat-01/create-pgvector.stdout.log | 1 + .../repeat-01/database-identity.stderr.log | 0 .../repeat-01/database-identity.stdout.log | 1 + .../repeat-01/go-test-summary.json | 3936 +++++++++++++++++ .../repeat-01/go-test.stderr.log | 0 .../repeat-01/go-test.stdout.jsonl | 2446 ++++++++++ .../pg-stat-activity-after.stderr.log | 0 .../pg-stat-activity-after.stdout.log | 1 + .../pg-stat-activity-before.stderr.log | 0 .../pg-stat-activity-before.stdout.log | 1 + .../repeat-01/repeat-summary.json | 36 + .../server-connection-count-after.stderr.log | 0 .../server-connection-count-after.stdout.log | 1 + .../server-connection-count-before.stderr.log | 0 .../server-connection-count-before.stdout.log | 1 + .../repeat-01/targeted-coverage.stderr.log | 0 .../repeat-01/targeted-coverage.stdout.log | 352 ++ .../t007-maker-full-mcp/summary.json | 67 + .../t007-maker-post-prove-green/commands.json | 444 ++ .../environment.json | 52 + .../go-version.stderr.log | 0 .../go-version.stdout.log | 1 + .../postgres-container-identity.stderr.log | 0 .../postgres-container-identity.stdout.log | 1 + .../postgres-server-identity.stderr.log | 0 .../postgres-server-identity.stdout.log | 1 + .../repeat-01/assert-go-test-json.stderr.log | 0 .../repeat-01/assert-go-test-json.stdout.log | 2 + .../repeat-01/cleanup-process.stderr.log | 0 .../repeat-01/cleanup-process.stdout.log | 2 + .../repeat-01/cleanup/cleanup.json | 170 + .../cleanup/database-exists-before.stderr.log | 0 .../cleanup/database-exists-before.stdout.log | 1 + .../cleanup/drop-database.stderr.log | 0 .../cleanup/drop-database.stdout.log | 1 + .../pg-stat-activity-before.stderr.log | 0 .../pg-stat-activity-before.stdout.log | 1 + .../cleanup/terminate-sessions.stderr.log | 0 .../cleanup/terminate-sessions.stdout.log | 1 + .../cleanup/verify-database-absent.stderr.log | 0 .../cleanup/verify-database-absent.stdout.log | 1 + .../connection-count-after.stderr.log | 0 .../connection-count-after.stdout.log | 1 + .../connection-count-before.stderr.log | 0 .../connection-count-before.stdout.log | 1 + .../repeat-01/coverage.out | 3472 +++++++++++++++ .../repeat-01/create-database.stderr.log | 0 .../repeat-01/create-database.stdout.log | 1 + .../repeat-01/create-pgvector.stderr.log | 0 .../repeat-01/create-pgvector.stdout.log | 1 + .../repeat-01/database-identity.stderr.log | 0 .../repeat-01/database-identity.stdout.log | 1 + .../repeat-01/go-test-summary.json | 40 + .../repeat-01/go-test.stderr.log | 0 .../repeat-01/go-test.stdout.jsonl | 16 + .../pg-stat-activity-after.stderr.log | 0 .../pg-stat-activity-after.stdout.log | 1 + .../pg-stat-activity-before.stderr.log | 0 .../pg-stat-activity-before.stdout.log | 1 + .../repeat-01/repeat-summary.json | 33 + .../server-connection-count-after.stderr.log | 0 .../server-connection-count-after.stdout.log | 1 + .../server-connection-count-before.stderr.log | 0 .../server-connection-count-before.stdout.log | 1 + .../repeat-01/targeted-coverage.stderr.log | 0 .../repeat-01/targeted-coverage.stdout.log | 352 ++ .../t007-maker-post-prove-green/summary.json | 64 + .../commands.json | 444 ++ .../environment.json | 52 + .../go-version.stderr.log | 0 .../go-version.stdout.log | 1 + .../postgres-container-identity.stderr.log | 0 .../postgres-container-identity.stdout.log | 1 + .../postgres-server-identity.stderr.log | 0 .../postgres-server-identity.stdout.log | 1 + .../repeat-01/assert-go-test-json.stderr.log | 0 .../repeat-01/assert-go-test-json.stdout.log | 2 + .../repeat-01/cleanup-process.stderr.log | 0 .../repeat-01/cleanup-process.stdout.log | 2 + .../repeat-01/cleanup/cleanup.json | 170 + .../cleanup/database-exists-before.stderr.log | 0 .../cleanup/database-exists-before.stdout.log | 1 + .../cleanup/drop-database.stderr.log | 0 .../cleanup/drop-database.stdout.log | 1 + .../pg-stat-activity-before.stderr.log | 0 .../pg-stat-activity-before.stdout.log | 1 + .../cleanup/terminate-sessions.stderr.log | 0 .../cleanup/terminate-sessions.stdout.log | 1 + .../cleanup/verify-database-absent.stderr.log | 0 .../cleanup/verify-database-absent.stdout.log | 1 + .../connection-count-after.stderr.log | 0 .../connection-count-after.stdout.log | 1 + .../connection-count-before.stderr.log | 0 .../connection-count-before.stdout.log | 1 + .../repeat-01/coverage.out | 3472 +++++++++++++++ .../repeat-01/create-database.stderr.log | 0 .../repeat-01/create-database.stdout.log | 1 + .../repeat-01/create-pgvector.stderr.log | 0 .../repeat-01/create-pgvector.stdout.log | 1 + .../repeat-01/database-identity.stderr.log | 0 .../repeat-01/database-identity.stdout.log | 1 + .../repeat-01/go-test-summary.json | 40 + .../repeat-01/go-test.stderr.log | 0 .../repeat-01/go-test.stdout.jsonl | 21 + .../pg-stat-activity-after.stderr.log | 0 .../pg-stat-activity-after.stdout.log | 1 + .../pg-stat-activity-before.stderr.log | 0 .../pg-stat-activity-before.stdout.log | 1 + .../repeat-01/repeat-summary.json | 36 + .../server-connection-count-after.stderr.log | 0 .../server-connection-count-after.stdout.log | 1 + .../server-connection-count-before.stderr.log | 0 .../server-connection-count-before.stdout.log | 1 + .../repeat-01/targeted-coverage.stderr.log | 0 .../repeat-01/targeted-coverage.stdout.log | 352 ++ .../summary.json | 67 + .../t007-compat/verification-summary.json | 51 + .../maker-report.md | 28 + internal/mcp/store_memory_compat_t007_test.go | 19 +- 331 files changed, 38893 insertions(+), 6 deletions(-) create mode 100644 .agent/reports/evidence/production-ready/t007-compat/T007-COMPAT-DEMOLITION-CLASSIFICATION.red.json create mode 100644 .agent/reports/evidence/production-ready/t007-compat/T007-COMPAT-DEMOLITION-CLASSIFICATION.tdd.json create mode 100644 .agent/reports/evidence/production-ready/t007-compat/classification.json create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/commands.json create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/environment.json create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/go-version.stderr.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/go-version.stdout.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/postgres-container-identity.stderr.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/postgres-container-identity.stdout.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/postgres-server-identity.stderr.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/postgres-server-identity.stdout.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/repeat-01/assert-go-test-json.stderr.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/repeat-01/assert-go-test-json.stdout.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/repeat-01/cleanup-process.stderr.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/repeat-01/cleanup-process.stdout.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/repeat-01/cleanup/cleanup.json create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/repeat-01/cleanup/database-exists-before.stderr.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/repeat-01/cleanup/database-exists-before.stdout.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/repeat-01/cleanup/drop-database.stderr.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/repeat-01/cleanup/drop-database.stdout.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/repeat-01/cleanup/pg-stat-activity-before.stderr.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/repeat-01/cleanup/pg-stat-activity-before.stdout.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/repeat-01/cleanup/terminate-sessions.stderr.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/repeat-01/cleanup/terminate-sessions.stdout.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/repeat-01/cleanup/verify-database-absent.stderr.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/repeat-01/cleanup/verify-database-absent.stdout.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/repeat-01/connection-count-after.stderr.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/repeat-01/connection-count-after.stdout.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/repeat-01/connection-count-before.stderr.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/repeat-01/connection-count-before.stdout.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/repeat-01/coverage.out create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/repeat-01/create-database.stderr.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/repeat-01/create-database.stdout.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/repeat-01/create-pgvector.stderr.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/repeat-01/create-pgvector.stdout.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/repeat-01/database-identity.stderr.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/repeat-01/database-identity.stdout.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/repeat-01/go-test-summary.json create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/repeat-01/go-test.stderr.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/repeat-01/go-test.stdout.jsonl create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/repeat-01/pg-stat-activity-after.stderr.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/repeat-01/pg-stat-activity-after.stdout.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/repeat-01/pg-stat-activity-before.stderr.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/repeat-01/pg-stat-activity-before.stdout.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/repeat-01/repeat-summary.json create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/repeat-01/server-connection-count-after.stderr.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/repeat-01/server-connection-count-after.stdout.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/repeat-01/server-connection-count-before.stderr.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/repeat-01/server-connection-count-before.stdout.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/repeat-01/targeted-coverage.stderr.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/repeat-01/targeted-coverage.stdout.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/summary.json create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/commands.json create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/environment.json create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/go-version.stderr.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/go-version.stdout.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/postgres-container-identity.stderr.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/postgres-container-identity.stdout.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/postgres-server-identity.stderr.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/postgres-server-identity.stdout.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-01/assert-go-test-json.stderr.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-01/assert-go-test-json.stdout.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-01/cleanup-process.stderr.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-01/cleanup-process.stdout.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-01/cleanup/cleanup.json create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-01/cleanup/database-exists-before.stderr.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-01/cleanup/database-exists-before.stdout.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-01/cleanup/drop-database.stderr.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-01/cleanup/drop-database.stdout.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-01/cleanup/pg-stat-activity-before.stderr.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-01/cleanup/pg-stat-activity-before.stdout.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-01/cleanup/terminate-sessions.stderr.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-01/cleanup/terminate-sessions.stdout.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-01/cleanup/verify-database-absent.stderr.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-01/cleanup/verify-database-absent.stdout.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-01/connection-count-after.stderr.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-01/connection-count-after.stdout.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-01/connection-count-before.stderr.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-01/connection-count-before.stdout.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-01/coverage.out create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-01/create-database.stderr.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-01/create-database.stdout.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-01/create-pgvector.stderr.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-01/create-pgvector.stdout.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-01/database-identity.stderr.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-01/database-identity.stdout.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-01/go-test-summary.json create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-01/go-test.stderr.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-01/go-test.stdout.jsonl create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-01/pg-stat-activity-after.stderr.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-01/pg-stat-activity-after.stdout.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-01/pg-stat-activity-before.stderr.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-01/pg-stat-activity-before.stdout.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-01/repeat-summary.json create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-01/server-connection-count-after.stderr.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-01/server-connection-count-after.stdout.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-01/server-connection-count-before.stderr.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-01/server-connection-count-before.stdout.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-01/targeted-coverage.stderr.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-01/targeted-coverage.stdout.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-02/assert-go-test-json.stderr.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-02/assert-go-test-json.stdout.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-02/cleanup-process.stderr.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-02/cleanup-process.stdout.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-02/cleanup/cleanup.json create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-02/cleanup/database-exists-before.stderr.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-02/cleanup/database-exists-before.stdout.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-02/cleanup/drop-database.stderr.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-02/cleanup/drop-database.stdout.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-02/cleanup/pg-stat-activity-before.stderr.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-02/cleanup/pg-stat-activity-before.stdout.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-02/cleanup/terminate-sessions.stderr.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-02/cleanup/terminate-sessions.stdout.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-02/cleanup/verify-database-absent.stderr.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-02/cleanup/verify-database-absent.stdout.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-02/connection-count-after.stderr.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-02/connection-count-after.stdout.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-02/connection-count-before.stderr.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-02/connection-count-before.stdout.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-02/coverage.out create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-02/create-database.stderr.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-02/create-database.stdout.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-02/create-pgvector.stderr.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-02/create-pgvector.stdout.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-02/database-identity.stderr.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-02/database-identity.stdout.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-02/go-test-summary.json create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-02/go-test.stderr.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-02/go-test.stdout.jsonl create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-02/pg-stat-activity-after.stderr.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-02/pg-stat-activity-after.stdout.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-02/pg-stat-activity-before.stderr.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-02/pg-stat-activity-before.stdout.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-02/repeat-summary.json create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-02/server-connection-count-after.stderr.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-02/server-connection-count-after.stdout.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-02/server-connection-count-before.stderr.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-02/server-connection-count-before.stdout.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-02/targeted-coverage.stderr.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-02/targeted-coverage.stdout.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-03/assert-go-test-json.stderr.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-03/assert-go-test-json.stdout.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-03/cleanup-process.stderr.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-03/cleanup-process.stdout.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-03/cleanup/cleanup.json create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-03/cleanup/database-exists-before.stderr.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-03/cleanup/database-exists-before.stdout.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-03/cleanup/drop-database.stderr.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-03/cleanup/drop-database.stdout.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-03/cleanup/pg-stat-activity-before.stderr.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-03/cleanup/pg-stat-activity-before.stdout.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-03/cleanup/terminate-sessions.stderr.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-03/cleanup/terminate-sessions.stdout.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-03/cleanup/verify-database-absent.stderr.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-03/cleanup/verify-database-absent.stdout.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-03/connection-count-after.stderr.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-03/connection-count-after.stdout.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-03/connection-count-before.stderr.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-03/connection-count-before.stdout.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-03/coverage.out create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-03/create-database.stderr.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-03/create-database.stdout.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-03/create-pgvector.stderr.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-03/create-pgvector.stdout.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-03/database-identity.stderr.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-03/database-identity.stdout.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-03/go-test-summary.json create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-03/go-test.stderr.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-03/go-test.stdout.jsonl create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-03/pg-stat-activity-after.stderr.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-03/pg-stat-activity-after.stdout.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-03/pg-stat-activity-before.stderr.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-03/pg-stat-activity-before.stdout.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-03/repeat-summary.json create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-03/server-connection-count-after.stderr.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-03/server-connection-count-after.stdout.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-03/server-connection-count-before.stderr.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-03/server-connection-count-before.stdout.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-03/targeted-coverage.stderr.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-03/targeted-coverage.stdout.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/summary.json create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/commands.json create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/environment.json create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/go-version.stderr.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/go-version.stdout.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/postgres-container-identity.stderr.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/postgres-container-identity.stdout.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/postgres-server-identity.stderr.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/postgres-server-identity.stdout.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/repeat-01/assert-go-test-json.stderr.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/repeat-01/assert-go-test-json.stdout.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/repeat-01/cleanup-process.stderr.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/repeat-01/cleanup-process.stdout.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/repeat-01/cleanup/cleanup.json create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/repeat-01/cleanup/database-exists-before.stderr.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/repeat-01/cleanup/database-exists-before.stdout.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/repeat-01/cleanup/drop-database.stderr.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/repeat-01/cleanup/drop-database.stdout.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/repeat-01/cleanup/pg-stat-activity-before.stderr.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/repeat-01/cleanup/pg-stat-activity-before.stdout.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/repeat-01/cleanup/terminate-sessions.stderr.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/repeat-01/cleanup/terminate-sessions.stdout.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/repeat-01/cleanup/verify-database-absent.stderr.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/repeat-01/cleanup/verify-database-absent.stdout.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/repeat-01/connection-count-after.stderr.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/repeat-01/connection-count-after.stdout.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/repeat-01/connection-count-before.stderr.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/repeat-01/connection-count-before.stdout.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/repeat-01/coverage.out create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/repeat-01/create-database.stderr.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/repeat-01/create-database.stdout.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/repeat-01/create-pgvector.stderr.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/repeat-01/create-pgvector.stdout.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/repeat-01/database-identity.stderr.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/repeat-01/database-identity.stdout.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/repeat-01/go-test-summary.json create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/repeat-01/go-test.stderr.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/repeat-01/go-test.stdout.jsonl create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/repeat-01/pg-stat-activity-after.stderr.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/repeat-01/pg-stat-activity-after.stdout.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/repeat-01/pg-stat-activity-before.stderr.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/repeat-01/pg-stat-activity-before.stdout.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/repeat-01/repeat-summary.json create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/repeat-01/server-connection-count-after.stderr.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/repeat-01/server-connection-count-after.stdout.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/repeat-01/server-connection-count-before.stderr.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/repeat-01/server-connection-count-before.stdout.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/repeat-01/targeted-coverage.stderr.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/repeat-01/targeted-coverage.stdout.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/summary.json create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/commands.json create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/environment.json create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/go-version.stderr.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/go-version.stdout.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/postgres-container-identity.stderr.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/postgres-container-identity.stdout.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/postgres-server-identity.stderr.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/postgres-server-identity.stdout.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/repeat-01/assert-go-test-json.stderr.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/repeat-01/assert-go-test-json.stdout.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/repeat-01/cleanup-process.stderr.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/repeat-01/cleanup-process.stdout.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/repeat-01/cleanup/cleanup.json create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/repeat-01/cleanup/database-exists-before.stderr.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/repeat-01/cleanup/database-exists-before.stdout.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/repeat-01/cleanup/drop-database.stderr.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/repeat-01/cleanup/drop-database.stdout.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/repeat-01/cleanup/pg-stat-activity-before.stderr.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/repeat-01/cleanup/pg-stat-activity-before.stdout.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/repeat-01/cleanup/terminate-sessions.stderr.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/repeat-01/cleanup/terminate-sessions.stdout.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/repeat-01/cleanup/verify-database-absent.stderr.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/repeat-01/cleanup/verify-database-absent.stdout.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/repeat-01/connection-count-after.stderr.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/repeat-01/connection-count-after.stdout.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/repeat-01/connection-count-before.stderr.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/repeat-01/connection-count-before.stdout.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/repeat-01/coverage.out create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/repeat-01/create-database.stderr.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/repeat-01/create-database.stdout.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/repeat-01/create-pgvector.stderr.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/repeat-01/create-pgvector.stdout.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/repeat-01/database-identity.stderr.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/repeat-01/database-identity.stdout.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/repeat-01/go-test-summary.json create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/repeat-01/go-test.stderr.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/repeat-01/go-test.stdout.jsonl create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/repeat-01/pg-stat-activity-after.stderr.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/repeat-01/pg-stat-activity-after.stdout.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/repeat-01/pg-stat-activity-before.stderr.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/repeat-01/pg-stat-activity-before.stdout.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/repeat-01/repeat-summary.json create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/repeat-01/server-connection-count-after.stderr.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/repeat-01/server-connection-count-after.stdout.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/repeat-01/server-connection-count-before.stderr.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/repeat-01/server-connection-count-before.stdout.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/repeat-01/targeted-coverage.stderr.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/repeat-01/targeted-coverage.stdout.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/summary.json create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/commands.json create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/environment.json create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/go-version.stderr.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/go-version.stdout.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/postgres-container-identity.stderr.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/postgres-container-identity.stdout.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/postgres-server-identity.stderr.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/postgres-server-identity.stdout.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/repeat-01/assert-go-test-json.stderr.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/repeat-01/assert-go-test-json.stdout.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/repeat-01/cleanup-process.stderr.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/repeat-01/cleanup-process.stdout.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/repeat-01/cleanup/cleanup.json create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/repeat-01/cleanup/database-exists-before.stderr.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/repeat-01/cleanup/database-exists-before.stdout.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/repeat-01/cleanup/drop-database.stderr.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/repeat-01/cleanup/drop-database.stdout.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/repeat-01/cleanup/pg-stat-activity-before.stderr.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/repeat-01/cleanup/pg-stat-activity-before.stdout.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/repeat-01/cleanup/terminate-sessions.stderr.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/repeat-01/cleanup/terminate-sessions.stdout.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/repeat-01/cleanup/verify-database-absent.stderr.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/repeat-01/cleanup/verify-database-absent.stdout.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/repeat-01/connection-count-after.stderr.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/repeat-01/connection-count-after.stdout.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/repeat-01/connection-count-before.stderr.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/repeat-01/connection-count-before.stdout.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/repeat-01/coverage.out create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/repeat-01/create-database.stderr.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/repeat-01/create-database.stdout.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/repeat-01/create-pgvector.stderr.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/repeat-01/create-pgvector.stdout.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/repeat-01/database-identity.stderr.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/repeat-01/database-identity.stdout.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/repeat-01/go-test-summary.json create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/repeat-01/go-test.stderr.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/repeat-01/go-test.stdout.jsonl create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/repeat-01/pg-stat-activity-after.stderr.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/repeat-01/pg-stat-activity-after.stdout.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/repeat-01/pg-stat-activity-before.stderr.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/repeat-01/pg-stat-activity-before.stdout.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/repeat-01/repeat-summary.json create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/repeat-01/server-connection-count-after.stderr.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/repeat-01/server-connection-count-after.stdout.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/repeat-01/server-connection-count-before.stderr.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/repeat-01/server-connection-count-before.stdout.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/repeat-01/targeted-coverage.stderr.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/repeat-01/targeted-coverage.stdout.log create mode 100644 .agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/summary.json create mode 100644 .agent/reports/evidence/production-ready/t007-compat/verification-summary.json create mode 100644 .agent/reports/production-ready/t007-compat-demolition-classification/maker-report.md diff --git a/.agent/reports/evidence/production-ready/t007-compat/T007-COMPAT-DEMOLITION-CLASSIFICATION.red.json b/.agent/reports/evidence/production-ready/t007-compat/T007-COMPAT-DEMOLITION-CLASSIFICATION.red.json new file mode 100644 index 00000000..51d7b79a --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/T007-COMPAT-DEMOLITION-CLASSIFICATION.red.json @@ -0,0 +1,37 @@ +{ + "schema_version": 1, + "task_id": "T007-COMPAT-DEMOLITION-CLASSIFICATION", + "observed_at": "2026-07-11T00:32:41.9518209Z", + "base_sha": "af1ed63536829916e0477be719a30a57a8d9227a", + "test_file": "internal/mcp/store_memory_compat_t007_test.go", + "test_name": "TestEC_F1_TagDerivedBackfill_T007", + "classification": "CURRENT_CONTRACT_TEST_CORRECTION", + "database": { + "identity": "engram_prc_t007_test_red_a4f9c3.public", + "postgres_version": "17.10", + "fresh_database": true, + "sessions_before_drop": 0, + "remaining_database_count": 0 + }, + "environment": { + "ENGRAM_VNEXT_F_ENABLED": "" + }, + "runner": { + "command": "go test -v -p 1 -parallel 1 -count=1 -run '^TestEC_F1_TagDerivedBackfill_T007$' ./internal/mcp", + "exit_code": 1, + "skipped_tests": 0 + }, + "failure_reason": "The SQL assertions proved privacy_scope='global', but the MemoryStore.List assertion searched the flag-off model projection for PrivacyScope='global'; memoryRowToModel intentionally omits that field when ENGRAM_VNEXT_F_ENABLED is not true.", + "runner_stdout_excerpt": [ + "=== RUN TestEC_F1_TagDerivedBackfill_T007", + "Error Trace: store_memory_compat_t007_test.go:157", + "Error: Should be true", + "Messages: global-scoped row must be returned by MemoryStore.List within its own project", + "--- FAIL: TestEC_F1_TagDerivedBackfill_T007 (4.32s)", + "FAIL github.com/thebtf/engram/internal/mcp" + ], + "invalid_preflight_attempt": { + "counted_as_red": false, + "reason": "A malformed PowerShell-interpolated DSN caused a DATABASE_DSN-not-reachable skip; the disposable database was removed with zero sessions and zero residue before this valid RED run." + } +} diff --git a/.agent/reports/evidence/production-ready/t007-compat/T007-COMPAT-DEMOLITION-CLASSIFICATION.tdd.json b/.agent/reports/evidence/production-ready/t007-compat/T007-COMPAT-DEMOLITION-CLASSIFICATION.tdd.json new file mode 100644 index 00000000..170368e3 --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/T007-COMPAT-DEMOLITION-CLASSIFICATION.tdd.json @@ -0,0 +1,56 @@ +{ + "schema_version": 1, + "task_id": "T007-COMPAT-DEMOLITION-CLASSIFICATION", + "test_file": "internal/mcp/store_memory_compat_t007_test.go", + "test_name": "TestEC_F1_TagDerivedBackfill_T007", + "red": { + "observed_at": "2026-07-11T00:32:41.9518209Z", + "evidence": "T007-COMPAT-DEMOLITION-CLASSIFICATION.red.json", + "exit_code": 1, + "failed_tests": 1, + "skipped_tests": 0, + "database": "engram_prc_t007_test_red_a4f9c3.public", + "sessions_before_drop": 0, + "remaining_database_count": 0, + "failure_reason": "The old assertion required PrivacyScope on the flag-off model projection." + }, + "green": { + "focused_repeat3": { + "evidence": "t007-maker-focused-repeat3/summary.json", + "verdict": "PASS", + "requested_repeats": 3, + "passed_repeats": 3, + "failed_repeats": 0, + "nonzero_child_commands": 0 + }, + "post_prove_it": { + "evidence": "t007-maker-post-prove-green/summary.json", + "verdict": "PASS", + "passed_repeats": 1, + "failed_repeats": 0 + }, + "race": { + "evidence": "t007-maker-focused-race/summary.json", + "verdict": "PASS", + "race": true, + "passed_repeats": 1, + "failed_repeats": 0 + } + }, + "refactor": { + "applied": false, + "reason": "The accepted correction is already the minimal test-contract change; production code is forbidden and no structural refactor is warranted." + }, + "prove_it": { + "method": "Temporarily restore the old PrivacyScope-based assertion while retaining explicit flag-off execution", + "evidence": "t007-maker-prove-it-old-assertion/summary.json", + "failed_tests": 1, + "skipped_tests": 0, + "cleanup_verdict": "PASS", + "terminated_sessions": 0, + "remaining_database_count": 0, + "intended_file_sha256_before_mutation": "B223366204385AFC4D4F6A4899777C2D6530A5B6420D6869683B6CBF65F4EC21", + "restored_file_sha256": "B223366204385AFC4D4F6A4899777C2D6530A5B6420D6869683B6CBF65F4EC21", + "post_restore_green": true + } +} diff --git a/.agent/reports/evidence/production-ready/t007-compat/classification.json b/.agent/reports/evidence/production-ready/t007-compat/classification.json new file mode 100644 index 00000000..cb448d48 --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/classification.json @@ -0,0 +1,25 @@ +{ + "schema_version": 1, + "slice": "T007-COMPAT-DEMOLITION-CLASSIFICATION", + "classified_at": "2026-07-11T00:41:04.2538562Z", + "base_sha": "af1ed63536829916e0477be719a30a57a8d9227a", + "classification": "CURRENT_CONTRACT_TEST_CORRECTION", + "production_change_authorized": false, + "production_change_required": false, + "test_change_authorized": true, + "evidence": { + "test": "internal/mcp/store_memory_compat_t007_test.go: TestEC_F1_TagDerivedBackfill_T007", + "store_path": "internal/db/gorm/memory_store.go: MemoryStore.List -> ListWithFilters -> memoryRowToModel", + "flag_contract": "memoryRowToModel copies PrivacyScope only when ENGRAM_VNEXT_F_ENABLED=true; flag-off intentionally leaves the model field empty for v6.4 response byte identity", + "database_contract": "The test already proves privacy_scope='global' by raw SQL before checking MemoryStore.List visibility", + "invalid_assertion": "The old List assertion searched the flag-off models.Memory projection for PrivacyScope='global', a field intentionally hidden in that mode", + "accepted_correction": "Identify the SQL-proven global fixture in the List result by its exact durable database ID and require its exact content" + }, + "demolition_guard": { + "graph_stage_restored": false, + "cross_encoder_rerank_restored": false, + "internal_search_scoring_restored": false, + "sdk_observation_extraction_restored": false, + "server_http_mcp_transport_restored": false + } +} diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/commands.json b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/commands.json new file mode 100644 index 00000000..5056f587 --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/commands.json @@ -0,0 +1,445 @@ +[ + { + "name": "go-version", + "executable": "C:\\Program Files\\Go\\bin\\go.exe", + "arguments": [ + "version" + ], + "environment_keys": [], + "command": "C:\\Program Files\\Go\\bin\\go.exe version", + "started_at": "2026-07-11T00:39:06.9078354+00:00", + "finished_at": "2026-07-11T00:39:07.1880079+00:00", + "duration_seconds": 0.28, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-race\\go-version.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-race\\go-version.stderr.log" + }, + { + "name": "postgres-container-identity", + "executable": "docker", + "arguments": [ + "inspect", + "--format", + "{{.Name}}|{{.Config.Image}}|{{.Image}}|{{.State.Running}}", + "engram-prc-postgres" + ], + "environment_keys": [], + "command": "docker inspect --format {{.Name}}|{{.Config.Image}}|{{.Image}}|{{.State.Running}} engram-prc-postgres", + "started_at": "2026-07-11T00:39:07.2452855+00:00", + "finished_at": "2026-07-11T00:39:07.6123117+00:00", + "duration_seconds": 0.367, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-race\\postgres-container-identity.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-race\\postgres-container-identity.stderr.log" + }, + { + "name": "postgres-server-identity", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT json_build_object('server_version', current_setting('server_version'), 'server_version_num', current_setting('server_version_num'), 'version', version(), 'max_connections', current_setting('max_connections'), 'superuser_reserved_connections', current_setting('superuser_reserved_connections'), 'reserved_connections', COALESCE(NULLIF(current_setting('reserved_connections', true), ''), '0'), 'current_connections', (SELECT count(*)::text FROM pg_stat_activity), 'database', current_database(), 'schema', current_schema(), 'user', current_user)::text;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT json_build_object('server_version', current_setting('server_version'), 'server_version_num', current_setting('server_version_num'), 'version', version(), 'max_connections', current_setting('max_connections'), 'superuser_reserved_connections', current_setting('superuser_reserved_connections'), 'reserved_connections', COALESCE(NULLIF(current_setting('reserved_connections', true), ''), '0'), 'current_connections', (SELECT count(*)::text FROM pg_stat_activity), 'database', current_database(), 'schema', current_schema(), 'user', current_user)::text;", + "started_at": "2026-07-11T00:39:07.6219628+00:00", + "finished_at": "2026-07-11T00:39:08.3225717+00:00", + "duration_seconds": 0.701, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-race\\postgres-server-identity.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-race\\postgres-server-identity.stderr.log" + }, + { + "name": "repeat-1-create-database", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "CREATE DATABASE \"engram_prc_rg_test_6479cc98e3e51502_r1\" OWNER \"engram\";" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c CREATE DATABASE \"engram_prc_rg_test_6479cc98e3e51502_r1\" OWNER \"engram\";", + "started_at": "2026-07-11T00:39:08.3647615+00:00", + "finished_at": "2026-07-11T00:39:08.8670959+00:00", + "duration_seconds": 0.502, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-race\\repeat-01\\create-database.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-race\\repeat-01\\create-database.stderr.log" + }, + { + "name": "repeat-1-create-pgvector", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "engram_prc_rg_test_6479cc98e3e51502_r1", + "-At", + "-F", + "|", + "-c", + "CREATE EXTENSION IF NOT EXISTS vector WITH SCHEMA public;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d engram_prc_rg_test_6479cc98e3e51502_r1 -At -F | -c CREATE EXTENSION IF NOT EXISTS vector WITH SCHEMA public;", + "started_at": "2026-07-11T00:39:08.8694833+00:00", + "finished_at": "2026-07-11T00:39:09.7675787+00:00", + "duration_seconds": 0.898, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-race\\repeat-01\\create-pgvector.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-race\\repeat-01\\create-pgvector.stderr.log" + }, + { + "name": "repeat-1-database-identity", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "engram_prc_rg_test_6479cc98e3e51502_r1", + "-At", + "-F", + "|", + "-c", + "SELECT json_build_object('database', current_database(), 'schema', current_schema(), 'server_version', current_setting('server_version'), 'user', current_user)::text;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d engram_prc_rg_test_6479cc98e3e51502_r1 -At -F | -c SELECT json_build_object('database', current_database(), 'schema', current_schema(), 'server_version', current_setting('server_version'), 'user', current_user)::text;", + "started_at": "2026-07-11T00:39:09.7700802+00:00", + "finished_at": "2026-07-11T00:39:10.1437424+00:00", + "duration_seconds": 0.374, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-race\\repeat-01\\database-identity.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-race\\repeat-01\\database-identity.stderr.log" + }, + { + "name": "repeat-1-pg-stat-before", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT COALESCE(json_agg(row_to_json(s)), '[]'::json)::text FROM (SELECT pid, usename, datname, state, backend_type, application_name, client_addr::text AS client_addr, wait_event_type, wait_event, query_start FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_6479cc98e3e51502_r1' ORDER BY pid) AS s;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT COALESCE(json_agg(row_to_json(s)), '[]'::json)::text FROM (SELECT pid, usename, datname, state, backend_type, application_name, client_addr::text AS client_addr, wait_event_type, wait_event, query_start FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_6479cc98e3e51502_r1' ORDER BY pid) AS s;", + "started_at": "2026-07-11T00:39:10.1480754+00:00", + "finished_at": "2026-07-11T00:39:10.5181087+00:00", + "duration_seconds": 0.37, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-race\\repeat-01\\pg-stat-activity-before.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-race\\repeat-01\\pg-stat-activity-before.stderr.log" + }, + { + "name": "repeat-1-server-connection-count-before", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT count(*) FROM pg_stat_activity;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT count(*) FROM pg_stat_activity;", + "started_at": "2026-07-11T00:39:10.5204859+00:00", + "finished_at": "2026-07-11T00:39:11.0525399+00:00", + "duration_seconds": 0.532, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-race\\repeat-01\\server-connection-count-before.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-race\\repeat-01\\server-connection-count-before.stderr.log" + }, + { + "name": "repeat-1-connection-count-before", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT count(*) FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_6479cc98e3e51502_r1';" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT count(*) FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_6479cc98e3e51502_r1';", + "started_at": "2026-07-11T00:39:11.0612914+00:00", + "finished_at": "2026-07-11T00:39:11.4314042+00:00", + "duration_seconds": 0.37, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-race\\repeat-01\\connection-count-before.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-race\\repeat-01\\connection-count-before.stderr.log" + }, + { + "name": "repeat-1-go-test", + "executable": "C:\\Program Files\\Go\\bin\\go.exe", + "arguments": [ + "test", + "-json", + "-p", + "1", + "-parallel", + "1", + "-count=1", + "-timeout", + "30m", + "-covermode=atomic", + "-coverprofile=.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-race\\repeat-01\\coverage.out", + "-race", + "-run", + "^TestEC_F1_TagDerivedBackfill_T007$", + "./internal/mcp" + ], + "environment_keys": [ + "DATABASE_DSN", + "DATABASE_MAX_CONNS", + "ENGRAM_RELEASE_GATE_REPEAT", + "ENGRAM_RELEASE_GATE_RUN_ID", + "ENGRAM_TEST_DSN", + "TEST_DATABASE_DSN" + ], + "command": "C:\\Program Files\\Go\\bin\\go.exe test -json -p 1 -parallel 1 -count=1 -timeout 30m -covermode=atomic -coverprofile=.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-race\\repeat-01\\coverage.out -race -run ^TestEC_F1_TagDerivedBackfill_T007$ ./internal/mcp", + "started_at": "2026-07-11T00:39:11.4380035+00:00", + "finished_at": "2026-07-11T00:39:32.2030959+00:00", + "duration_seconds": 20.765, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-race\\repeat-01\\go-test.stdout.jsonl", + "stderr": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-race\\repeat-01\\go-test.stderr.log" + }, + { + "name": "repeat-1-assert-go-test-json", + "executable": "C:\\Program Files\\PowerShell\\7\\pwsh.exe", + "arguments": [ + "-NoProfile", + "-File", + "D:\\Dev\\engram\\.w\\t007-current-contract\\scripts\\production-gates\\assert-go-test-json.ps1", + "-InputPath", + ".agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-race\\repeat-01\\go-test.stdout.jsonl", + "-SummaryPath", + ".agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-race\\repeat-01\\go-test-summary.json", + "-FailOnUnexpectedSkip" + ], + "environment_keys": [], + "command": "C:\\Program Files\\PowerShell\\7\\pwsh.exe -NoProfile -File D:\\Dev\\engram\\.w\\t007-current-contract\\scripts\\production-gates\\assert-go-test-json.ps1 -InputPath .agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-race\\repeat-01\\go-test.stdout.jsonl -SummaryPath .agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-race\\repeat-01\\go-test-summary.json -FailOnUnexpectedSkip", + "started_at": "2026-07-11T00:39:32.2080750+00:00", + "finished_at": "2026-07-11T00:39:32.9871334+00:00", + "duration_seconds": 0.779, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-race\\repeat-01\\assert-go-test-json.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-race\\repeat-01\\assert-go-test-json.stderr.log" + }, + { + "name": "repeat-1-targeted-coverage-report", + "executable": "C:\\Program Files\\Go\\bin\\go.exe", + "arguments": [ + "tool", + "cover", + "-func=.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-race\\repeat-01\\coverage.out" + ], + "environment_keys": [], + "command": "C:\\Program Files\\Go\\bin\\go.exe tool cover -func=.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-race\\repeat-01\\coverage.out", + "started_at": "2026-07-11T00:39:32.9930427+00:00", + "finished_at": "2026-07-11T00:39:33.4734343+00:00", + "duration_seconds": 0.48, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-race\\repeat-01\\targeted-coverage.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-race\\repeat-01\\targeted-coverage.stderr.log" + }, + { + "name": "repeat-1-pg-stat-after", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT COALESCE(json_agg(row_to_json(s)), '[]'::json)::text FROM (SELECT pid, usename, datname, state, backend_type, application_name, client_addr::text AS client_addr, wait_event_type, wait_event, query_start FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_6479cc98e3e51502_r1' ORDER BY pid) AS s;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT COALESCE(json_agg(row_to_json(s)), '[]'::json)::text FROM (SELECT pid, usename, datname, state, backend_type, application_name, client_addr::text AS client_addr, wait_event_type, wait_event, query_start FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_6479cc98e3e51502_r1' ORDER BY pid) AS s;", + "started_at": "2026-07-11T00:39:33.4743447+00:00", + "finished_at": "2026-07-11T00:39:33.9388390+00:00", + "duration_seconds": 0.464, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-race\\repeat-01\\pg-stat-activity-after.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-race\\repeat-01\\pg-stat-activity-after.stderr.log" + }, + { + "name": "repeat-1-server-connection-count-after", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT count(*) FROM pg_stat_activity;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT count(*) FROM pg_stat_activity;", + "started_at": "2026-07-11T00:39:33.9413516+00:00", + "finished_at": "2026-07-11T00:39:34.3475495+00:00", + "duration_seconds": 0.406, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-race\\repeat-01\\server-connection-count-after.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-race\\repeat-01\\server-connection-count-after.stderr.log" + }, + { + "name": "repeat-1-connection-count-after", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT count(*) FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_6479cc98e3e51502_r1';" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT count(*) FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_6479cc98e3e51502_r1';", + "started_at": "2026-07-11T00:39:34.3496279+00:00", + "finished_at": "2026-07-11T00:39:34.7295858+00:00", + "duration_seconds": 0.38, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-race\\repeat-01\\connection-count-after.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-race\\repeat-01\\connection-count-after.stderr.log" + }, + { + "name": "repeat-1-cleanup", + "executable": "C:\\Program Files\\PowerShell\\7\\pwsh.exe", + "arguments": [ + "-NoProfile", + "-File", + "D:\\Dev\\engram\\.w\\t007-current-contract\\scripts\\production-gates\\cleanup-db-sessions.ps1", + "-DatabaseName", + "engram_prc_rg_test_6479cc98e3e51502_r1", + "-SchemaName", + "public", + "-ArtifactRoot", + ".agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-race\\repeat-01", + "-RunId", + "t007-maker-focused-race-repeat-1", + "-PostgresContainer", + "engram-prc-postgres" + ], + "environment_keys": [ + "ENGRAM_TEST_ADMIN_DSN" + ], + "command": "C:\\Program Files\\PowerShell\\7\\pwsh.exe -NoProfile -File D:\\Dev\\engram\\.w\\t007-current-contract\\scripts\\production-gates\\cleanup-db-sessions.ps1 -DatabaseName engram_prc_rg_test_6479cc98e3e51502_r1 -SchemaName public -ArtifactRoot .agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-race\\repeat-01 -RunId t007-maker-focused-race-repeat-1 -PostgresContainer engram-prc-postgres", + "started_at": "2026-07-11T00:39:34.7335757+00:00", + "finished_at": "2026-07-11T00:39:37.9290019+00:00", + "duration_seconds": 3.195, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-race\\repeat-01\\cleanup-process.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-race\\repeat-01\\cleanup-process.stderr.log" + } +] diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/environment.json b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/environment.json new file mode 100644 index 00000000..70d203b0 --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/environment.json @@ -0,0 +1,52 @@ +{ + "schema_version": 1, + "run_id": "t007-maker-focused-race", + "timestamp": "2026-07-11T00:39:06.8894571+00:00", + "go_version": "go version go1.25.11 windows/amd64", + "postgres": { + "declared_image": "pgvector/pgvector:pg17", + "container": { + "name": "/engram-prc-postgres", + "configured_image": "pgvector/pgvector:pg17", + "image_id": "sha256:feb68f4f15446397d8cac7f4fe48fe4586de83160d1fc48b46283312d1a33966", + "running": true + }, + "server": { + "server_version": "17.10 (Debian 17.10-1.pgdg12+1)", + "server_version_num": "170010", + "version": "PostgreSQL 17.10 (Debian 17.10-1.pgdg12+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 12.2.0-14+deb12u1) 12.2.0, 64-bit", + "max_connections": "100", + "superuser_reserved_connections": "3", + "reserved_connections": "0", + "current_connections": "6", + "database": "postgres", + "schema": "public", + "user": "engram" + }, + "admin_dsn": "postgres://engram:REDACTED@127.0.0.1:55432/postgres?sslmode=disable" + }, + "packages": [ + "./internal/mcp" + ], + "run_pattern": "^TestEC_F1_TagDerivedBackfill_T007$", + "repeat": 1, + "fail_on_unexpected_skip": true, + "allowed_skip_identities": [], + "coverage_policy": "Targeted", + "connection_budget": 20, + "race": true, + "require_session_start_execution": false, + "required_session_start_test_count": 12, + "sequential_execution": { + "go_package_parallelism": 1, + "go_test_parallelism": 1, + "database_max_connections": 20 + }, + "govulncheck_policy": { + "authoritative": [ + "source scan with tests", + "unstripped binary scan" + ], + "non_authoritative": "stripped binary scan (module-level fallback when symbols are absent)" + } +} diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/go-version.stderr.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/go-version.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/go-version.stdout.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/go-version.stdout.log new file mode 100644 index 00000000..a857be3f --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/go-version.stdout.log @@ -0,0 +1 @@ +go version go1.25.11 windows/amd64 diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/postgres-container-identity.stderr.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/postgres-container-identity.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/postgres-container-identity.stdout.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/postgres-container-identity.stdout.log new file mode 100644 index 00000000..c110d492 --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/postgres-container-identity.stdout.log @@ -0,0 +1 @@ +/engram-prc-postgres|pgvector/pgvector:pg17|sha256:feb68f4f15446397d8cac7f4fe48fe4586de83160d1fc48b46283312d1a33966|true diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/postgres-server-identity.stderr.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/postgres-server-identity.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/postgres-server-identity.stdout.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/postgres-server-identity.stdout.log new file mode 100644 index 00000000..2e33d56e --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/postgres-server-identity.stdout.log @@ -0,0 +1 @@ +{"server_version" : "17.10 (Debian 17.10-1.pgdg12+1)", "server_version_num" : "170010", "version" : "PostgreSQL 17.10 (Debian 17.10-1.pgdg12+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 12.2.0-14+deb12u1) 12.2.0, 64-bit", "max_connections" : "100", "superuser_reserved_connections" : "3", "reserved_connections" : "0", "current_connections" : "6", "database" : "postgres", "schema" : "public", "user" : "engram"} diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/repeat-01/assert-go-test-json.stderr.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/repeat-01/assert-go-test-json.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/repeat-01/assert-go-test-json.stdout.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/repeat-01/assert-go-test-json.stdout.log new file mode 100644 index 00000000..b849d9b7 --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/repeat-01/assert-go-test-json.stdout.log @@ -0,0 +1,2 @@ +go test JSON verdict=PASS packages=1 tests=1 passed=1 failed=0 skipped=0 unexpected_skips=0 malformed=0 +summary=D:\Dev\engram\.w\t007-current-contract\.agent\reports\evidence\production-ready\t007-compat\t007-maker-focused-race\repeat-01\go-test-summary.json diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/repeat-01/cleanup-process.stderr.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/repeat-01/cleanup-process.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/repeat-01/cleanup-process.stdout.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/repeat-01/cleanup-process.stdout.log new file mode 100644 index 00000000..81375697 --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/repeat-01/cleanup-process.stdout.log @@ -0,0 +1,2 @@ +cleanup verdict=PASS database=engram_prc_rg_test_6479cc98e3e51502_r1 schema=public terminated_sessions=0 remaining_database_count=0 +summary=D:\Dev\engram\.w\t007-current-contract\.agent\reports\evidence\production-ready\t007-compat\t007-maker-focused-race\repeat-01\cleanup\cleanup.json diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/repeat-01/cleanup/cleanup.json b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/repeat-01/cleanup/cleanup.json new file mode 100644 index 00000000..2c75808d --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/repeat-01/cleanup/cleanup.json @@ -0,0 +1,170 @@ +{ + "schema_version": 1, + "run_id": "t007-maker-focused-race-repeat-1", + "timestamp": "2026-07-11T00:39:37.8471375+00:00", + "verdict": "PASS", + "database": "engram_prc_rg_test_6479cc98e3e51502_r1", + "schema": "public", + "database_schema_identity": "engram_prc_rg_test_6479cc98e3e51502_r1.public", + "admin_dsn": "postgres://engram:REDACTED@127.0.0.1:55432/postgres?sslmode=disable", + "postgres_container": "engram-prc-postgres", + "cleanup_status": "PASS", + "cleanup_attempted": true, + "database_existed_before": true, + "absence_verified": true, + "terminated_sessions": 0, + "remaining_database_count": 0, + "commands": [ + { + "name": "database-exists-before-cleanup", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT count(*) FROM pg_database WHERE datname = 'engram_prc_rg_test_6479cc98e3e51502_r1';" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT count(*) FROM pg_database WHERE datname = 'engram_prc_rg_test_6479cc98e3e51502_r1';", + "started_at": "2026-07-11T00:39:35.4245639+00:00", + "finished_at": "2026-07-11T00:39:35.8502989+00:00", + "duration_seconds": 0.426, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-race\\repeat-01\\cleanup\\database-exists-before.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-race\\repeat-01\\cleanup\\database-exists-before.stderr.log" + }, + { + "name": "pg-stat-activity-before-cleanup", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT COALESCE(json_agg(row_to_json(s)), '[]'::json)::text FROM (SELECT pid, usename, datname, state, backend_type, application_name, client_addr::text AS client_addr, wait_event_type, wait_event, query_start FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_6479cc98e3e51502_r1' ORDER BY pid) AS s;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT COALESCE(json_agg(row_to_json(s)), '[]'::json)::text FROM (SELECT pid, usename, datname, state, backend_type, application_name, client_addr::text AS client_addr, wait_event_type, wait_event, query_start FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_6479cc98e3e51502_r1' ORDER BY pid) AS s;", + "started_at": "2026-07-11T00:39:35.9276597+00:00", + "finished_at": "2026-07-11T00:39:36.3308674+00:00", + "duration_seconds": 0.403, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-race\\repeat-01\\cleanup\\pg-stat-activity-before.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-race\\repeat-01\\cleanup\\pg-stat-activity-before.stderr.log" + }, + { + "name": "terminate-database-sessions", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT COALESCE(json_agg(row_to_json(s)), '[]'::json)::text FROM (SELECT pid, pg_terminate_backend(pid) AS terminated FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_6479cc98e3e51502_r1' AND pid <> pg_backend_pid() ORDER BY pid) AS s;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT COALESCE(json_agg(row_to_json(s)), '[]'::json)::text FROM (SELECT pid, pg_terminate_backend(pid) AS terminated FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_6479cc98e3e51502_r1' AND pid <> pg_backend_pid() ORDER BY pid) AS s;", + "started_at": "2026-07-11T00:39:36.3381967+00:00", + "finished_at": "2026-07-11T00:39:36.7279069+00:00", + "duration_seconds": 0.39, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-race\\repeat-01\\cleanup\\terminate-sessions.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-race\\repeat-01\\cleanup\\terminate-sessions.stderr.log" + }, + { + "name": "drop-fresh-database", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "DROP DATABASE IF EXISTS \"engram_prc_rg_test_6479cc98e3e51502_r1\" WITH (FORCE);" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c DROP DATABASE IF EXISTS \"engram_prc_rg_test_6479cc98e3e51502_r1\" WITH (FORCE);", + "started_at": "2026-07-11T00:39:36.7375401+00:00", + "finished_at": "2026-07-11T00:39:37.4711696+00:00", + "duration_seconds": 0.734, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-race\\repeat-01\\cleanup\\drop-database.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-race\\repeat-01\\cleanup\\drop-database.stderr.log" + }, + { + "name": "verify-database-absent", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT count(*) FROM pg_database WHERE datname = 'engram_prc_rg_test_6479cc98e3e51502_r1';" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT count(*) FROM pg_database WHERE datname = 'engram_prc_rg_test_6479cc98e3e51502_r1';", + "started_at": "2026-07-11T00:39:37.4748763+00:00", + "finished_at": "2026-07-11T00:39:37.8398452+00:00", + "duration_seconds": 0.365, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-race\\repeat-01\\cleanup\\verify-database-absent.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-race\\repeat-01\\cleanup\\verify-database-absent.stderr.log" + } + ], + "errors": [] +} diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/repeat-01/cleanup/database-exists-before.stderr.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/repeat-01/cleanup/database-exists-before.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/repeat-01/cleanup/database-exists-before.stdout.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/repeat-01/cleanup/database-exists-before.stdout.log new file mode 100644 index 00000000..d00491fd --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/repeat-01/cleanup/database-exists-before.stdout.log @@ -0,0 +1 @@ +1 diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/repeat-01/cleanup/drop-database.stderr.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/repeat-01/cleanup/drop-database.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/repeat-01/cleanup/drop-database.stdout.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/repeat-01/cleanup/drop-database.stdout.log new file mode 100644 index 00000000..ca12dce0 --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/repeat-01/cleanup/drop-database.stdout.log @@ -0,0 +1 @@ +DROP DATABASE diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/repeat-01/cleanup/pg-stat-activity-before.stderr.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/repeat-01/cleanup/pg-stat-activity-before.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/repeat-01/cleanup/pg-stat-activity-before.stdout.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/repeat-01/cleanup/pg-stat-activity-before.stdout.log new file mode 100644 index 00000000..fe51488c --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/repeat-01/cleanup/pg-stat-activity-before.stdout.log @@ -0,0 +1 @@ +[] diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/repeat-01/cleanup/terminate-sessions.stderr.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/repeat-01/cleanup/terminate-sessions.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/repeat-01/cleanup/terminate-sessions.stdout.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/repeat-01/cleanup/terminate-sessions.stdout.log new file mode 100644 index 00000000..fe51488c --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/repeat-01/cleanup/terminate-sessions.stdout.log @@ -0,0 +1 @@ +[] diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/repeat-01/cleanup/verify-database-absent.stderr.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/repeat-01/cleanup/verify-database-absent.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/repeat-01/cleanup/verify-database-absent.stdout.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/repeat-01/cleanup/verify-database-absent.stdout.log new file mode 100644 index 00000000..573541ac --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/repeat-01/cleanup/verify-database-absent.stdout.log @@ -0,0 +1 @@ +0 diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/repeat-01/connection-count-after.stderr.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/repeat-01/connection-count-after.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/repeat-01/connection-count-after.stdout.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/repeat-01/connection-count-after.stdout.log new file mode 100644 index 00000000..573541ac --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/repeat-01/connection-count-after.stdout.log @@ -0,0 +1 @@ +0 diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/repeat-01/connection-count-before.stderr.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/repeat-01/connection-count-before.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/repeat-01/connection-count-before.stdout.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/repeat-01/connection-count-before.stdout.log new file mode 100644 index 00000000..573541ac --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/repeat-01/connection-count-before.stdout.log @@ -0,0 +1 @@ +0 diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/repeat-01/coverage.out b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/repeat-01/coverage.out new file mode 100644 index 00000000..52335d8a --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/repeat-01/coverage.out @@ -0,0 +1,3472 @@ +mode: atomic +github.com/thebtf/engram/internal/mcp/audit_helpers.go:33.53,34.30 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:34.30,36.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:37.2,37.25 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:37.25,39.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:40.2,40.12 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:44.28,46.2 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:52.83,53.12 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:53.12,54.16 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:54.16,55.32 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:55.32,61.5 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:63.3,65.33 3 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:65.33,71.4 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:77.54,78.14 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:78.14,80.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:81.2,82.16 2 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:82.16,85.3 2 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:86.2,87.13 2 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:92.91,93.23 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:93.23,95.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:96.2,97.15 2 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:97.15,99.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:100.2,105.65 4 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:105.65,113.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:117.95,118.23 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:118.23,120.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:121.2,122.15 2 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:122.15,124.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:125.2,129.65 5 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:129.65,138.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:142.87,143.23 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:143.23,145.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:146.2,147.15 2 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:147.15,149.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:150.2,153.65 4 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:153.65,161.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:166.96,167.23 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:167.23,169.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:170.2,171.15 2 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:171.15,173.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:174.2,177.63 4 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:177.63,185.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:189.97,190.23 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:190.23,192.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:193.2,194.15 2 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:194.15,196.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:197.2,200.68 4 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:200.68,208.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:30.62,31.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:31.20,33.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:34.2,35.49 2 0 +github.com/thebtf/engram/internal/mcp/coerce.go:35.49,37.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:38.2,38.14 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:38.14,40.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:41.2,41.15 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:46.52,47.14 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:47.14,49.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:50.2,50.23 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:51.14,52.11 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:53.19,54.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:55.15,56.45 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:57.12,58.31 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:59.10,60.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:67.43,68.14 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:68.14,70.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:71.2,71.23 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:72.15,73.23 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:74.19,75.38 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:75.38,77.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:78.3,78.40 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:78.40,80.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:81.3,81.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:82.14,83.56 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:83.56,85.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:86.3,86.54 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:86.54,88.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:89.3,89.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:90.10,91.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:97.49,98.14 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:98.14,100.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:101.2,101.23 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:102.15,103.18 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:104.19,105.38 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:105.38,107.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:108.3,108.40 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:108.40,110.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:111.3,111.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:112.14,113.56 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:113.56,115.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:116.3,116.54 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:116.54,118.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:119.3,119.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:120.10,121.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:127.55,128.14 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:128.14,130.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:131.2,131.23 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:132.15,133.11 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:134.19,135.40 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:135.40,137.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:138.3,138.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:139.14,140.54 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:140.54,142.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:143.3,143.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:144.10,145.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:151.46,152.14 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:152.14,154.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:155.2,155.23 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:156.12,157.11 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:158.14,159.54 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:159.54,161.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:162.3,162.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:163.15,164.16 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:165.19,166.40 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:166.40,168.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:169.3,169.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:170.10,171.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:177.40,178.14 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:178.14,180.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:181.2,181.23 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:182.13,184.26 2 0 +github.com/thebtf/engram/internal/mcp/coerce.go:184.26,185.36 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:185.36,187.5 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:189.3,189.16 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:190.16,191.11 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:192.14,193.14 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:193.14,195.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:196.3,196.13 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:197.10,198.13 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:204.38,205.14 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:205.14,207.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:208.2,209.9 2 0 +github.com/thebtf/engram/internal/mcp/coerce.go:209.9,211.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:212.2,213.27 2 0 +github.com/thebtf/engram/internal/mcp/coerce.go:213.27,214.42 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:214.42,216.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:218.2,218.15 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:222.32,223.39 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:223.39,225.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:226.2,226.30 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:226.30,228.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:229.2,229.30 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:229.30,231.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:232.2,232.15 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:236.35,237.28 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:237.28,239.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:240.2,240.28 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:240.28,242.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:243.2,243.15 1 0 +github.com/thebtf/engram/internal/mcp/context.go:17.55,19.2 1 0 +github.com/thebtf/engram/internal/mcp/context.go:22.78,24.2 1 0 +github.com/thebtf/engram/internal/mcp/context.go:29.78,31.2 1 0 +github.com/thebtf/engram/internal/mcp/context.go:35.53,38.2 2 0 +github.com/thebtf/engram/internal/mcp/context.go:41.80,43.2 1 0 +github.com/thebtf/engram/internal/mcp/context.go:48.80,50.2 1 0 +github.com/thebtf/engram/internal/mcp/context.go:54.53,57.2 2 0 +github.com/thebtf/engram/internal/mcp/context.go:61.51,62.43 1 0 +github.com/thebtf/engram/internal/mcp/context.go:62.43,64.3 1 0 +github.com/thebtf/engram/internal/mcp/context.go:65.2,65.16 1 0 +github.com/thebtf/engram/internal/mcp/health.go:22.32,26.2 3 0 +github.com/thebtf/engram/internal/mcp/health.go:29.37,33.2 3 0 +github.com/thebtf/engram/internal/mcp/health.go:36.35,40.2 3 0 +github.com/thebtf/engram/internal/mcp/health.go:42.44,45.25 3 0 +github.com/thebtf/engram/internal/mcp/health.go:45.25,47.50 1 0 +github.com/thebtf/engram/internal/mcp/health.go:47.50,50.4 2 0 +github.com/thebtf/engram/internal/mcp/health.go:55.74,60.16 5 0 +github.com/thebtf/engram/internal/mcp/health.go:60.16,62.3 1 0 +github.com/thebtf/engram/internal/mcp/health.go:63.2,71.4 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:28.42,29.65 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:29.65,32.3 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:33.2,33.40 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:33.40,35.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:36.2,36.14 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:39.120,40.69 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:40.69,42.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:43.2,44.19 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:44.19,46.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:47.2,48.17 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:48.17,50.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:51.2,52.59 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:52.59,54.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:55.2,56.20 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:56.20,58.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:59.2,60.17 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:60.17,62.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:63.2,64.21 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:64.21,66.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:67.2,68.22 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:68.22,70.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:71.2,72.23 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:72.23,74.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:76.2,98.19 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:98.19,100.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:101.2,101.66 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:104.52,106.29 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:106.29,108.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:109.2,110.46 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:113.113,123.27 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:123.27,125.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:126.2,127.16 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:127.16,129.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:130.2,130.25 1 0 +github.com/thebtf/engram/internal/mcp/server.go:127.44,138.2 1 1 +github.com/thebtf/engram/internal/mcp/server.go:141.64,143.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:146.78,148.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:151.53,153.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:156.55,158.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:161.58,163.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:166.62,168.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:171.50,173.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:176.78,178.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:181.74,183.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:186.71,189.2 2 0 +github.com/thebtf/engram/internal/mcp/server.go:191.85,193.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:195.61,197.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:199.49,201.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:204.54,206.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:211.53,213.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:216.53,218.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:222.61,224.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:228.59,230.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:234.51,236.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:240.52,242.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:246.55,248.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:252.82,254.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:260.70,262.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:269.68,271.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:274.87,277.2 2 0 +github.com/thebtf/engram/internal/mcp/server.go:282.60,284.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:290.45,292.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:297.77,299.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:303.37,313.38 3 0 +github.com/thebtf/engram/internal/mcp/server.go:313.38,315.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:316.2,317.9 2 0 +github.com/thebtf/engram/internal/mcp/server.go:317.9,319.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:320.2,321.9 2 0 +github.com/thebtf/engram/internal/mcp/server.go:321.9,323.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:324.2,325.9 2 0 +github.com/thebtf/engram/internal/mcp/server.go:325.9,327.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:328.2,328.14 1 0 +github.com/thebtf/engram/internal/mcp/server.go:332.35,334.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:383.49,387.12 3 0 +github.com/thebtf/engram/internal/mcp/server.go:387.12,388.22 1 0 +github.com/thebtf/engram/internal/mcp/server.go:388.22,389.11 1 0 +github.com/thebtf/engram/internal/mcp/server.go:390.22,392.11 2 0 +github.com/thebtf/engram/internal/mcp/server.go:393.12,393.12 0 0 +github.com/thebtf/engram/internal/mcp/server.go:396.4,397.18 2 0 +github.com/thebtf/engram/internal/mcp/server.go:397.18,398.13 1 0 +github.com/thebtf/engram/internal/mcp/server.go:401.4,402.61 2 0 +github.com/thebtf/engram/internal/mcp/server.go:402.61,404.13 2 0 +github.com/thebtf/engram/internal/mcp/server.go:407.4,407.55 1 0 +github.com/thebtf/engram/internal/mcp/server.go:407.55,409.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:411.3,411.28 1 0 +github.com/thebtf/engram/internal/mcp/server.go:414.2,414.9 1 0 +github.com/thebtf/engram/internal/mcp/server.go:415.20,416.19 1 0 +github.com/thebtf/engram/internal/mcp/server.go:417.25,418.17 1 0 +github.com/thebtf/engram/internal/mcp/server.go:418.17,420.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:421.3,421.13 1 0 +github.com/thebtf/engram/internal/mcp/server.go:427.77,428.19 1 0 +github.com/thebtf/engram/internal/mcp/server.go:428.19,431.3 2 0 +github.com/thebtf/engram/internal/mcp/server.go:433.2,433.20 1 0 +github.com/thebtf/engram/internal/mcp/server.go:434.20,435.33 1 0 +github.com/thebtf/engram/internal/mcp/server.go:436.20,437.32 1 0 +github.com/thebtf/engram/internal/mcp/server.go:438.20,439.37 1 0 +github.com/thebtf/engram/internal/mcp/server.go:443.24,444.93 1 0 +github.com/thebtf/engram/internal/mcp/server.go:445.34,446.101 1 0 +github.com/thebtf/engram/internal/mcp/server.go:447.22,448.91 1 0 +github.com/thebtf/engram/internal/mcp/server.go:449.29,450.120 1 0 +github.com/thebtf/engram/internal/mcp/server.go:451.10,456.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:461.51,462.20 1 0 +github.com/thebtf/engram/internal/mcp/server.go:463.50,464.70 1 0 +github.com/thebtf/engram/internal/mcp/server.go:465.46,466.79 1 0 +github.com/thebtf/engram/internal/mcp/server.go:467.10,468.80 1 0 +github.com/thebtf/engram/internal/mcp/server.go:473.59,485.63 2 0 +github.com/thebtf/engram/internal/mcp/server.go:485.63,487.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:489.2,493.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:496.45,503.33 3 0 +github.com/thebtf/engram/internal/mcp/server.go:503.33,505.57 2 0 +github.com/thebtf/engram/internal/mcp/server.go:505.57,506.76 1 0 +github.com/thebtf/engram/internal/mcp/server.go:506.76,507.13 1 0 +github.com/thebtf/engram/internal/mcp/server.go:509.4,509.18 1 0 +github.com/thebtf/engram/internal/mcp/server.go:509.18,511.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:511.10,513.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:514.4,518.11 5 0 +github.com/thebtf/engram/internal/mcp/server.go:522.2,522.19 1 0 +github.com/thebtf/engram/internal/mcp/server.go:660.29,683.21 2 0 +github.com/thebtf/engram/internal/mcp/server.go:683.21,689.3 5 0 +github.com/thebtf/engram/internal/mcp/server.go:690.2,699.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:712.30,765.49 3 0 +github.com/thebtf/engram/internal/mcp/server.go:765.49,789.3 5 0 +github.com/thebtf/engram/internal/mcp/server.go:790.2,799.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:805.40,936.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:942.58,1048.35 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1048.35,1077.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1080.2,1080.33 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1080.33,1090.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1093.2,1093.26 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1093.26,1123.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1124.2,1124.80 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1124.80,1126.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1127.2,1127.55 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1127.55,1129.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1130.2,1130.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1130.38,1132.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1134.2,1134.25 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1134.25,1136.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1138.2,1138.33 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1138.33,1140.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1141.2,1141.69 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1141.69,1143.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1144.2,1144.75 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1144.75,1146.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1148.2,1148.27 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1148.27,1165.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1168.2,1168.76 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1168.76,1191.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1195.2,1195.48 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1195.48,1197.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1201.2,1201.47 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1201.47,1203.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1205.2,1205.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1205.38,1207.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1212.2,1212.21 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1212.21,1214.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1228.2,1228.51 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1228.51,1230.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1233.2,1233.56 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1233.56,1235.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1238.2,1238.71 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1238.71,1298.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1302.2,1302.104 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1302.104,1321.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1324.2,1324.72 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1324.72,1333.154 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1333.154,1334.26 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1334.26,1336.8 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1337.7,1337.16 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1338.35,1340.26 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1340.26,1342.8 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1343.7,1343.18 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1371.2,1371.26 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1371.26,1390.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1393.2,1393.28 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1393.28,1443.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1446.2,1446.28 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1446.28,1478.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1481.2,1481.37 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1481.37,1561.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1564.2,1568.23 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1568.23,1570.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1572.2,1588.57 3 0 +github.com/thebtf/engram/internal/mcp/server.go:1588.57,1591.29 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1591.29,1593.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1594.3,1594.27 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1594.27,1595.29 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1595.29,1597.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1601.2,1607.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1612.79,1614.60 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1614.60,1620.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1622.2,1623.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1623.16,1631.3 3 0 +github.com/thebtf/engram/internal/mcp/server.go:1633.2,1641.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1644.69,1645.34 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1645.34,1647.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1648.2,1649.22 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1649.22,1651.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1652.2,1652.37 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1656.99,1658.14 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1659.16,1660.35 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1661.15,1662.46 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1663.18,1664.49 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1665.15,1666.46 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1667.18,1668.49 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1669.14,1670.45 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1671.15,1672.34 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1676.2,1676.14 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1677.35,1678.52 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1679.26,1680.37 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1681.20,1682.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1683.20,1684.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1685.16,1686.35 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1687.29,1688.40 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1689.33,1690.50 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1691.25,1692.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1693.23,1694.41 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1696.26,1697.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1698.24,1699.42 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1700.22,1701.40 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1702.25,1703.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1704.27,1705.45 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1706.25,1707.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1709.30,1710.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1711.28,1712.42 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1713.17,1714.40 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1715.20,1716.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1717.20,1718.45 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1719.20,1720.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1722.20,1723.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1724.18,1725.36 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1726.20,1727.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1728.18,1729.36 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1730.21,1731.39 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1732.21,1733.39 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1734.26,1735.44 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1736.25,1737.34 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1738.26,1739.44 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1740.24,1741.42 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1742.26,1743.44 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1744.27,1745.45 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1746.22,1747.40 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1748.19,1749.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1750.15,1751.34 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1752.16,1753.35 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1755.21,1756.44 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1757.19,1758.42 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1759.20,1760.44 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1761.22,1762.45 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1763.22,1764.40 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1765.23,1766.41 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1767.20,1768.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1769.32,1770.49 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1771.19,1772.37 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1773.19,1774.37 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1775.33,1776.50 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1777.35,1778.52 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1779.24,1780.42 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1781.32,1782.49 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1783.28,1784.46 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1785.21,1786.39 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1787.34,1788.51 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1789.25,1790.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1791.29,1792.46 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1793.26,1794.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1795.27,1796.44 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1798.25,1799.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1800.23,1801.41 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1802.27,1803.45 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1804.26,1805.44 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1806.29,1807.47 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1809.29,1810.46 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1811.27,1812.44 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1813.30,1814.47 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1815.38,1816.54 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1817.36,1818.52 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1820.24,1821.42 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1822.27,1823.45 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1824.22,1825.40 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1826.32,1827.49 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1828.32,1829.49 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1830.31,1831.48 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1832.35,1833.52 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1834.36,1835.53 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1836.36,1837.53 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1838.38,1839.54 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1840.34,1841.51 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1843.22,1844.40 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1845.21,1846.39 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1847.24,1848.42 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1850.25,1851.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1852.25,1853.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1859.2,1859.14 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1860.22,1863.131 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1866.51,1867.123 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1868.10,1869.50 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1874.47,1876.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1876.16,1879.3 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1880.2,1880.35 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1884.72,1890.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1896.105,1898.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1898.16,1900.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1902.2,1903.17 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1903.17,1905.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1907.2,1908.17 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1908.17,1910.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1912.2,1918.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1918.16,1920.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1921.2,1921.25 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1927.76,1933.15 3 0 +github.com/thebtf/engram/internal/mcp/server.go:1933.15,1936.17 3 0 +github.com/thebtf/engram/internal/mcp/server.go:1936.17,1938.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1939.3,1939.26 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1943.2,1950.36 3 0 +github.com/thebtf/engram/internal/mcp/server.go:1950.36,1952.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1952.8,1955.29 3 0 +github.com/thebtf/engram/internal/mcp/server.go:1955.29,1958.4 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1959.3,1962.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1966.2,1966.20 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1966.20,1977.20 6 0 +github.com/thebtf/engram/internal/mcp/server.go:1977.20,1979.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1980.3,1980.20 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1980.20,1982.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1985.3,1985.37 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1985.37,1987.30 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1987.30,1988.16 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1988.16,1990.6 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1990.11,1992.6 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1994.4,1995.56 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1995.56,1997.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1998.4,2003.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2008.2,2008.29 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2008.29,2009.63 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2009.63,2011.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2011.9,2013.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2021.2,2021.29 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2021.29,2029.38 3 0 +github.com/thebtf/engram/internal/mcp/server.go:2029.38,2031.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2031.9,2033.31 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2033.31,2035.30 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2035.30,2037.6 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2039.4,2042.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2046.2,2047.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2047.16,2049.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2050.2,2050.25 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2055.57,2056.33 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2056.33,2058.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2059.2,2060.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2060.16,2062.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2063.2,2064.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2064.16,2066.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2067.2,2067.23 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2071.79,2105.15 6 0 +github.com/thebtf/engram/internal/mcp/server.go:2105.15,2107.17 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2107.17,2111.4 3 0 +github.com/thebtf/engram/internal/mcp/server.go:2111.9,2112.17 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2112.17,2114.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2115.4,2117.26 3 0 +github.com/thebtf/engram/internal/mcp/server.go:2117.26,2119.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2119.10,2121.29 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2121.29,2123.6 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2125.4,2129.25 5 0 +github.com/thebtf/engram/internal/mcp/server.go:2130.19,2130.19 0 0 +github.com/thebtf/engram/internal/mcp/server.go:2132.20,2134.106 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2135.12,2137.103 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2140.8,2143.3 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2144.2,2150.49 3 0 +github.com/thebtf/engram/internal/mcp/server.go:2150.49,2152.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2152.8,2154.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2155.2,2168.27 4 0 +github.com/thebtf/engram/internal/mcp/server.go:2168.27,2170.17 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2170.17,2173.4 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2173.9,2175.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2177.2,2182.40 4 0 +github.com/thebtf/engram/internal/mcp/server.go:2182.40,2183.21 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2184.20,2185.20 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2186.19,2187.19 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2191.2,2191.24 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2191.24,2193.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2193.8,2193.30 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2193.30,2195.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2198.2,2198.28 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2198.28,2200.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2203.2,2203.29 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2203.29,2205.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2207.2,2208.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2208.16,2210.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2211.2,2211.28 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2216.103,2218.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2218.16,2220.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2222.2,2223.15 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2223.15,2225.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2227.2,2239.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2239.16,2241.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2242.2,2242.25 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2246.93,2248.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2251.91,2253.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:18.28,29.20 4 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:29.20,33.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:35.2,44.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:68.36,69.49 1 1 +github.com/thebtf/engram/internal/mcp/tools_admin.go:69.49,74.3 4 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:75.2,75.25 1 1 +github.com/thebtf/engram/internal/mcp/tools_admin.go:80.26,82.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:84.89,86.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:86.16,88.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:89.2,90.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:90.18,92.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:94.2,94.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:95.15,96.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:97.26,98.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:99.25,100.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:101.23,105.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:105.22,107.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:108.3,108.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:109.10,110.114 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:120.92,126.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:126.26,128.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:130.2,131.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:131.19,133.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:134.2,135.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:135.19,137.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:138.2,138.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:138.24,140.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:142.2,142.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:142.25,144.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:146.2,147.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:147.16,149.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:151.2,151.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:27.40,30.2 2 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:32.30,46.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:48.99,49.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:49.34,51.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:52.2,52.69 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:52.69,54.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:56.2,57.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:57.16,59.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:60.2,61.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:61.21,63.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:64.2,67.26 3 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:67.26,69.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:70.2,71.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:71.25,73.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:75.2,77.44 3 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:77.44,79.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:80.2,80.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:80.33,82.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:83.2,83.81 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:86.52,87.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:87.16,89.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:90.2,90.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:90.15,92.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:93.2,93.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:96.73,97.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:97.21,99.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:100.2,101.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:101.29,110.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:111.2,111.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:114.34,116.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:31.98,32.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:32.52,34.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:35.2,35.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:35.26,37.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:39.2,40.49 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:40.49,42.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:43.2,43.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:43.21,45.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:46.2,46.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:46.21,48.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:49.2,49.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:49.18,51.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:52.2,52.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:52.18,54.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:56.2,56.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:56.38,58.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:60.2,61.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:61.16,63.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:68.2,70.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:70.26,77.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:79.2,81.36 3 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:81.36,84.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:86.2,89.28 3 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:89.28,90.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:90.39,91.9 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:93.3,97.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:100.2,104.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:107.60,113.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:115.101,116.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:116.38,118.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:120.2,122.21 3 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:122.21,123.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:123.26,125.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:126.3,126.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:126.23,128.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:129.8,130.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:130.26,132.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:133.3,133.68 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:133.68,135.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:137.2,140.20 3 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:141.17,142.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:143.67,143.67 0 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:144.10,145.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:148.2,162.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:162.16,164.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:165.2,165.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:165.19,173.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:174.2,174.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:174.30,176.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:177.2,177.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:177.31,179.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:181.2,182.36 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:182.36,196.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:198.2,199.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:199.19,201.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:202.2,203.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:203.18,205.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:206.2,207.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:207.21,209.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:210.2,211.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:211.25,213.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:214.2,225.21 3 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:225.21,227.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:228.2,228.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:228.25,230.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:231.2,231.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:231.18,233.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:235.2,244.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:244.21,246.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:247.2,247.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:247.25,249.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:250.2,250.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:250.18,252.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:253.2,253.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:253.24,255.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:256.2,256.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:259.50,261.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:261.22,263.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:264.2,264.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:270.90,272.42 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:272.42,276.3 3 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:277.2,281.27 3 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:281.27,282.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:282.45,284.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:286.2,286.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:25.28,88.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:95.95,96.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:96.22,98.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:99.2,100.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:100.32,102.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:104.2,105.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:105.16,107.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:109.2,114.35 3 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:114.35,121.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:123.2,123.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:123.25,125.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:127.2,134.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:134.16,136.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:138.2,146.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:154.94,155.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:155.22,157.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:158.2,159.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:159.32,161.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:163.2,164.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:164.16,166.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:168.2,172.35 3 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:172.35,179.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:181.2,181.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:181.25,183.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:185.2,192.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:192.16,194.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:196.2,203.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:211.97,212.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:212.22,214.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:215.2,216.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:216.32,218.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:220.2,221.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:221.16,223.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:225.2,229.35 3 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:229.35,236.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:238.2,238.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:238.25,240.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:242.2,249.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:249.16,251.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:253.2,260.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:31.80,32.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:32.14,34.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:35.2,48.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:51.136,53.51 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:53.51,55.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:56.2,56.83 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:59.94,60.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:60.21,62.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:63.2,63.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:68.30,162.2 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:165.98,166.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:166.49,168.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:169.2,170.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:170.16,172.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:173.2,174.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:174.19,176.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:177.2,179.17 3 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:179.17,181.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:183.2,184.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:184.16,186.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:188.2,189.31 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:189.31,190.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:190.15,191.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:193.3,193.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:196.2,201.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:201.16,203.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:204.2,204.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:208.96,209.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:209.49,211.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:212.2,213.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:213.16,215.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:216.2,217.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:217.13,219.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:221.2,222.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:222.16,224.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:225.2,225.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:225.22,227.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:229.2,230.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:230.16,232.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:233.2,233.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:239.100,240.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:240.22,242.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:243.2,244.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:244.16,246.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:247.2,248.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:248.13,250.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:255.2,256.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:256.12,263.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:263.30,264.77 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:264.77,269.5 4 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:271.3,272.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:272.21,274.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:275.3,275.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:279.2,279.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:279.29,281.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:284.2,285.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:285.16,287.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:288.2,288.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:288.22,290.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:291.2,291.55 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:291.55,293.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:294.2,294.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:294.74,296.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:297.2,298.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:298.16,300.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:306.2,307.41 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:307.41,309.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:310.2,324.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:324.16,325.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:325.50,327.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:328.3,328.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:330.2,330.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:330.38,332.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:334.2,341.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:341.16,343.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:344.2,344.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:348.99,349.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:349.49,351.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:352.2,353.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:353.16,355.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:356.2,357.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:357.13,359.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:360.2,362.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:362.16,364.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:365.2,365.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:365.22,367.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:368.2,368.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:368.74,370.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:371.2,372.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:372.16,374.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:375.2,375.85 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:375.85,377.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:379.2,380.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:380.16,381.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:381.50,383.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:384.3,384.60 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:386.2,386.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:386.20,388.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:390.2,395.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:395.16,397.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:398.2,398.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:402.102,403.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:403.49,405.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:406.2,407.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:407.16,409.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:410.2,411.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:411.13,413.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:414.2,415.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:415.16,417.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:418.2,418.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:418.22,420.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:421.2,421.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:421.74,423.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:424.2,425.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:425.16,427.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:428.2,428.88 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:428.88,430.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:432.2,433.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:433.16,434.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:434.50,436.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:437.3,437.63 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:439.2,439.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:439.20,441.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:443.2,448.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:448.16,450.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:451.2,451.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:34.30,36.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:42.61,44.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:48.32,75.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:79.32,94.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:100.98,101.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:101.25,103.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:104.2,104.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:104.29,106.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:108.2,113.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:113.17,114.55 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:114.55,116.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:118.2,118.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:118.24,120.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:121.2,121.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:121.23,123.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:124.2,124.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:124.23,126.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:134.2,135.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:135.21,137.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:142.2,147.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:147.16,149.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:154.2,165.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:165.25,175.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:177.2,183.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:183.16,185.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:186.2,186.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:194.98,195.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:195.25,197.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:198.2,198.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:198.29,200.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:202.2,205.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:205.17,207.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:208.2,209.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:209.21,211.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:213.2,214.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:214.16,216.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:217.2,218.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:218.16,220.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:221.2,222.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:222.16,224.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:226.2,231.11 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:231.11,233.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:235.2,236.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:236.16,238.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:239.2,239.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:21.52,22.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:22.24,25.28 3 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:25.28,27.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:29.2,29.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:35.72,37.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:37.15,39.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:41.2,42.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:42.16,44.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:45.2,45.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:49.99,51.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:51.16,53.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:55.2,56.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:56.16,58.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:60.2,72.23 7 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:72.23,74.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:75.2,75.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:75.24,77.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:78.2,78.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:78.24,80.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:81.2,81.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:82.27,82.27 0 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:84.10,85.93 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:87.2,87.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:87.30,89.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:90.2,90.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:90.26,92.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:94.2,95.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:95.16,97.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:99.2,100.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:100.16,102.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:104.2,112.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:112.16,114.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:116.2,123.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:123.16,125.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:126.2,126.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:130.97,132.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:132.16,134.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:136.2,137.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:137.16,139.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:141.2,147.23 4 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:147.23,149.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:150.2,150.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:150.26,152.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:154.2,155.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:155.16,157.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:159.2,160.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:160.16,161.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:161.47,163.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:164.3,164.51 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:167.2,167.97 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:167.97,172.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:174.2,175.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:175.16,177.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:179.2,185.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:185.16,187.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:188.2,188.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:192.99,194.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:194.16,196.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:198.2,199.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:199.16,201.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:203.2,207.26 3 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:207.26,209.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:211.2,212.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:212.16,214.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:216.2,223.26 3 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:223.26,229.28 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:229.28,231.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:232.3,232.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:235.2,236.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:236.16,238.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:239.2,239.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:243.100,245.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:245.16,247.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:249.2,250.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:250.16,252.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:254.2,262.23 5 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:262.23,264.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:265.2,265.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:265.24,267.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:268.2,268.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:269.27,269.27 0 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:271.10,272.93 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:274.2,274.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:274.30,276.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:277.2,277.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:277.26,279.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:281.2,281.71 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:281.71,282.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:282.47,284.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:285.3,285.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:288.2,293.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:293.16,295.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:296.2,296.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:302.92,309.19 5 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:309.19,310.53 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:310.53,313.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:316.2,317.51 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:317.51,318.66 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:318.66,320.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:323.2,331.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:331.16,333.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:334.2,334.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:338.46,342.32 4 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:342.32,343.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:343.20,346.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:348.2,350.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:350.26,352.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:352.27,353.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:353.13,355.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:356.4,356.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:358.3,358.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:360.2,360.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:16.45,18.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:20.35,36.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:38.84,39.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:39.40,41.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:42.2,42.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:42.50,44.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:45.2,45.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:48.101,50.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:50.16,52.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:53.2,54.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:54.16,56.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:57.2,58.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:58.19,60.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:61.2,62.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:62.21,64.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:65.2,66.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:66.16,68.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:69.2,69.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:72.102,74.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:74.16,76.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:77.2,82.8 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:10.100,12.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:12.16,14.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:16.2,17.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:17.18,19.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:21.2,21.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:22.16,23.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:24.14,25.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:26.14,27.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:28.17,29.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:30.17,31.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:32.21,33.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:34.19,35.42 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:36.17,37.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:38.16,39.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:40.16,41.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:42.21,43.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:44.10,45.167 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:15.77,16.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:16.33,18.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:20.2,21.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:21.27,23.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:25.2,26.28 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:26.28,29.17 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:29.17,31.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:34.2,41.32 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:41.32,46.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:46.20,48.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:49.3,49.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:52.2,53.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:53.16,55.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:57.2,57.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:61.97,62.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:62.28,64.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:66.2,67.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:67.16,69.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:71.2,75.29 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:75.29,77.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:79.2,80.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:80.16,82.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:84.2,84.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:84.20,86.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:88.2,97.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:97.25,103.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:103.20,105.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:106.3,106.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:106.19,108.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:109.3,109.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:112.2,113.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:113.16,115.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:117.2,117.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:121.95,122.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:122.28,124.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:126.2,127.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:127.16,129.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:131.2,137.50 4 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:137.50,139.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:141.2,142.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:142.16,144.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:145.2,145.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:145.16,147.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:149.2,149.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:149.21,151.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:153.2,154.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:154.16,156.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:157.2,157.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:157.20,159.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:161.2,161.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:165.98,166.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:166.28,168.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:170.2,171.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:171.16,173.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:175.2,181.50 4 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:181.50,183.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:185.2,185.96 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:185.96,187.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:189.2,189.88 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:197.98,198.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:198.28,200.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:202.2,203.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:203.16,205.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:207.2,217.74 6 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:217.74,219.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:222.2,223.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:223.16,225.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:227.2,229.156 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:235.98,237.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:237.16,239.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:241.2,247.24 4 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:247.24,249.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:252.2,253.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:253.29,255.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:256.2,256.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:15.93,16.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:16.37,18.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:20.2,21.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:21.16,23.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:25.2,32.16 7 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:32.16,34.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:35.2,35.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:35.19,37.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:38.2,38.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:38.19,40.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:42.2,43.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:43.16,45.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:47.2,54.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:54.16,56.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:57.2,57.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:61.91,62.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:62.37,64.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:66.2,67.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:67.16,69.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:71.2,73.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:73.16,75.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:76.2,76.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:76.19,78.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:80.2,81.43 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:81.43,83.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:83.19,85.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:86.3,86.79 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:87.8,89.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:90.2,90.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:90.16,91.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:91.45,93.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:94.3,94.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:97.2,110.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:110.16,112.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:113.2,113.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:117.93,119.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:122.91,123.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:123.37,125.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:127.2,128.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:128.16,130.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:132.2,133.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:133.19,135.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:136.2,141.16 5 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:141.16,143.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:145.2,155.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:155.25,165.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:167.2,168.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:168.16,170.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:171.2,171.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:175.94,176.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:176.37,178.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:180.2,181.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:181.16,183.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:185.2,187.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:187.16,189.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:190.2,190.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:190.19,192.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:193.2,196.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:196.16,198.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:200.2,208.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:208.25,216.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:218.2,225.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:225.16,227.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:228.2,228.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:232.94,233.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:233.37,235.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:237.2,238.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:238.16,240.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:242.2,243.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:243.21,245.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:246.2,248.19 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:248.19,250.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:252.2,253.46 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:253.46,255.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:255.13,257.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:259.2,259.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:259.44,261.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:261.13,263.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:266.2,267.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:267.16,269.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:271.2,278.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:278.16,280.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:281.2,281.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:19.69,21.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:23.38,38.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:40.51,63.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:65.53,80.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:82.46,85.32 3 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:85.32,87.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:88.2,88.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:91.105,93.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:93.16,95.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:96.2,97.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:97.16,99.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:100.2,100.70 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:103.107,105.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:105.16,107.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:108.2,109.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:109.16,111.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:112.2,112.72 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:115.101,117.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:117.16,119.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:120.2,121.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:121.17,123.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:124.2,139.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:142.109,144.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:144.16,146.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:147.2,154.8 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:157.100,159.28 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:159.28,161.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:161.18,163.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:164.3,164.62 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:166.2,167.72 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:167.72,169.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:170.2,170.53 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:170.53,172.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:173.2,174.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:174.26,176.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:177.2,177.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:180.73,182.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:182.16,184.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:185.2,185.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:12.104,14.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:14.16,16.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:18.2,19.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:19.18,21.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:23.2,23.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:24.14,25.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:26.18,27.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:28.17,29.46 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:30.10,31.96 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:36.101,37.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:37.27,39.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:41.2,42.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:42.16,44.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:46.2,47.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:47.21,49.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:50.2,51.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:51.19,53.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:54.2,54.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:55.52,55.52 0 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:56.10,57.101 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:59.2,61.93 2 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:61.93,64.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:66.2,70.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:27.31,94.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:98.97,100.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:100.26,102.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:103.2,103.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:103.28,105.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:107.2,108.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:108.16,110.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:112.2,115.15 4 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:115.15,117.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:118.2,118.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:118.17,120.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:122.2,123.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:123.16,125.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:127.2,140.29 3 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:140.29,151.31 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:151.31,154.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:155.3,155.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:158.2,162.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:167.100,169.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:169.26,171.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:172.2,172.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:172.28,174.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:175.2,175.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:175.26,177.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:179.2,180.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:180.16,182.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:184.2,185.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:185.22,187.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:189.2,190.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:190.20,191.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:191.54,199.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:200.3,200.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:200.61,202.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:203.3,203.58 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:206.2,211.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:215.95,217.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:217.32,219.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:220.2,220.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:220.28,222.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:224.2,225.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:225.16,227.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:229.2,230.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:230.22,232.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:234.2,234.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:234.61,236.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:239.2,239.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:239.25,246.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:248.2,252.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:258.104,260.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:260.26,262.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:267.2,271.20 3 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:271.20,275.3 3 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:275.8,279.3 3 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:280.2,280.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:284.60,285.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:285.30,287.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:288.2,288.42 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:288.42,290.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:291.2,291.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:64.89,65.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:65.25,67.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:69.2,70.49 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:70.49,72.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:74.2,74.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:75.18,76.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:77.21,78.35 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:79.19,80.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:81.18,82.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:83.19,84.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:85.18,86.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:87.18,91.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:91.23,93.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:94.3,94.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:95.10,96.62 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:100.81,103.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:103.19,105.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:106.2,107.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:107.19,109.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:112.2,112.46 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:112.46,114.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:115.2,115.46 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:115.46,117.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:122.2,122.66 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:122.66,124.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:127.2,127.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:127.25,128.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:128.22,130.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:131.8,132.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:132.26,134.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:138.2,138.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:138.25,139.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:139.22,141.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:142.8,143.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:143.26,145.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:148.2,148.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:148.22,150.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:151.2,151.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:151.38,153.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:154.2,154.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:154.19,156.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:159.2,161.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:161.25,164.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:165.2,165.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:165.25,168.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:169.2,171.23 3 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:171.23,174.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:175.2,175.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:175.23,178.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:180.2,193.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:193.16,195.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:198.2,199.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:199.29,201.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:202.2,202.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:202.29,204.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:205.2,213.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:216.121,217.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:217.28,218.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:218.26,220.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:221.3,222.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:222.17,223.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:223.49,225.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:226.4,226.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:228.3,228.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:230.2,230.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:230.26,232.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:233.2,234.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:234.16,235.48 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:235.48,237.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:238.3,238.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:240.2,240.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:243.101,248.36 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:248.36,250.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:250.8,252.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:253.2,253.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:253.16,255.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:256.2,256.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:256.32,257.128 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:257.128,262.72 5 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:262.72,264.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:267.2,267.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:276.81,277.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:277.25,279.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:280.2,280.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:280.22,282.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:283.2,283.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:283.39,285.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:286.2,286.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:286.25,288.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:289.2,289.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:289.21,291.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:292.2,293.14 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:293.14,295.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:296.2,305.16 5 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:305.16,307.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:308.2,314.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:317.84,318.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:318.19,320.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:321.2,323.63 3 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:323.63,325.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:326.2,329.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:332.82,333.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:333.38,335.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:336.2,337.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:338.18,339.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:340.18,341.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:345.2,345.59 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:345.59,347.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:349.2,351.21 3 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:351.21,353.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:353.8,356.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:357.2,357.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:357.16,359.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:366.2,367.41 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:367.41,369.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:371.2,378.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:397.115,398.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:398.15,400.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:403.2,404.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:404.26,405.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:405.28,407.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:408.3,408.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:408.28,410.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:412.2,412.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:412.23,415.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:420.2,426.12 4 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:426.12,427.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:427.27,429.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:429.18,431.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:433.4,433.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:433.33,435.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:440.2,441.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:441.26,442.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:442.28,443.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:443.49,445.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:448.3,448.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:448.28,449.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:449.49,451.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:454.2,454.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:457.82,458.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:458.21,460.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:461.2,462.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:462.16,464.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:465.2,465.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:465.36,467.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:468.2,469.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:469.16,471.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:472.2,477.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:480.82,481.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:481.40,483.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:484.2,485.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:485.19,487.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:488.2,489.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:489.16,491.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:492.2,499.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:502.82,503.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:503.21,505.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:506.2,507.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:507.16,509.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:510.2,514.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:23.179,24.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:24.22,26.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:28.2,32.22 4 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:32.22,34.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:35.2,36.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:36.22,38.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:40.2,41.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:41.26,43.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:44.2,44.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:44.26,46.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:47.2,47.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:47.30,49.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:50.2,50.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:50.30,52.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:54.2,55.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:55.16,57.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:58.2,58.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:58.13,60.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:61.2,62.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:62.16,64.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:65.2,65.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:65.13,67.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:69.2,70.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:70.16,72.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:73.2,73.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:73.15,75.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:77.2,77.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:80.172,81.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:81.28,82.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:82.23,84.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:85.3,85.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:85.18,87.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:88.3,89.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:89.17,90.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:90.49,92.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:93.4,93.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:95.3,95.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:98.2,98.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:98.24,100.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:101.2,101.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:101.19,103.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:104.2,105.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:105.16,106.48 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:106.48,108.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:109.3,109.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:111.2,111.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:114.119,116.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:116.22,118.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:119.2,120.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:120.22,122.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:124.2,126.26 3 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:126.26,127.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:127.36,129.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:130.3,130.105 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:131.8,132.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:132.32,134.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:135.3,135.103 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:137.2,137.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:137.16,139.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:141.2,141.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:141.32,143.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:143.27,145.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:146.3,147.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:147.27,149.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:150.3,150.106 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:150.106,151.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:153.3,153.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:153.27,154.114 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:154.114,155.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:157.9,157.104 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:157.104,158.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:160.3,160.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:160.27,161.114 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:161.114,162.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:164.9,164.104 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:164.104,165.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:167.3,167.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:169.2,169.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:25.90,26.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:26.26,28.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:30.2,31.49 2 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:31.49,33.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:35.2,35.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:36.16,37.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:38.10,39.63 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:43.84,44.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:44.21,46.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:47.2,47.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:47.25,49.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:50.2,50.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:50.21,52.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:53.2,53.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:53.21,55.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:57.2,58.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:59.18,60.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:61.15,62.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:63.24,64.42 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:65.10,66.108 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:69.2,70.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:70.22,72.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:73.2,74.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:74.29,76.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:78.2,78.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:78.14,85.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:87.2,89.37 3 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:89.37,92.21 3 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:92.21,94.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:97.2,100.31 4 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:100.31,102.38 2 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:102.38,104.37 2 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:104.37,106.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:109.3,122.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:122.26,124.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:125.3,125.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:125.19,127.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:131.3,133.39 3 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:133.39,135.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:135.9,137.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:138.3,138.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:138.17,140.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:142.3,142.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:142.34,144.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:145.3,145.11 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:148.2,155.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:20.99,22.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:22.16,24.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:26.2,31.44 3 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:31.44,32.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:32.33,33.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:33.43,38.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:43.2,43.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:43.49,45.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:46.2,46.48 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:46.48,48.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:50.2,52.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:52.27,55.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:55.8,60.24 3 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:60.24,62.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:64.3,64.57 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:64.57,66.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:68.3,68.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:71.2,71.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:71.16,73.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:75.2,76.23 2 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:76.23,78.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:80.2,80.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:19.40,89.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:109.71,111.9 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:111.9,113.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:115.2,116.38 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:116.38,117.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:118.13,119.41 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:119.41,121.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:122.17,123.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:123.43,125.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:126.11,127.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:127.40,129.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:133.2,133.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:133.22,138.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:139.2,139.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:143.90,144.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:144.25,146.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:148.2,149.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:149.16,151.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:153.2,157.61 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:157.61,159.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:161.2,161.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:162.16,163.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:164.14,165.35 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:166.13,167.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:168.16,169.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:170.17,171.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:172.16,173.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:174.15,175.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:176.10,177.120 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:189.85,191.39 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:191.39,192.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:192.44,194.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:196.2,196.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:196.15,198.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:199.2,199.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:199.15,201.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:202.2,202.46 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:205.91,207.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:207.17,209.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:211.2,215.25 5 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:215.25,217.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:218.2,224.25 4 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:224.25,226.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:227.2,227.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:227.25,229.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:231.2,243.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:243.16,245.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:247.2,247.139 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:250.89,252.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:252.19,254.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:255.2,256.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:256.25,258.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:259.2,264.52 5 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:264.52,266.14 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:266.14,268.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:271.2,277.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:277.25,280.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:282.2,283.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:283.16,285.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:287.2,287.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:287.22,288.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:288.20,290.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:291.3,291.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:294.2,297.31 3 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:297.31,300.29 3 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:300.29,302.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:303.3,305.69 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:308.2,308.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:311.88,313.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:313.13,315.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:317.2,318.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:318.16,320.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:322.2,328.22 6 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:328.22,331.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:333.2,333.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:333.23,335.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:335.30,338.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:341.2,341.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:344.91,346.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:346.13,348.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:350.2,353.18 3 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:353.18,354.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:354.27,356.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:357.3,357.73 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:357.73,359.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:362.2,362.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:362.19,370.17 4 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:370.17,372.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:375.2,376.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:376.26,378.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:379.2,379.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:382.92,384.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:384.13,386.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:388.2,389.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:389.16,391.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:393.2,401.16 4 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:401.16,403.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:405.2,405.88 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:408.91,410.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:410.13,412.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:414.2,418.95 4 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:418.95,420.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:422.2,422.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:425.90,427.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:427.13,429.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:431.2,433.167 3 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:433.167,435.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:437.2,437.89 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:437.89,439.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:441.2,441.108 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:22.93,24.49 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:24.49,26.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:28.2,28.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:29.14,30.42 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:31.17,32.59 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:33.16,34.58 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:35.24,36.75 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:37.27,38.71 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:39.22,40.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:41.23,42.63 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:43.10,44.66 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:48.79,49.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:49.13,51.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:52.2,53.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:53.16,55.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:57.2,58.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:58.32,60.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:61.2,84.28 3 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:87.101,88.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:88.13,90.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:91.2,91.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:91.38,93.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:94.2,95.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:95.16,97.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:98.2,98.53 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:98.53,100.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:102.2,104.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:104.17,106.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:107.2,107.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:107.29,109.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:110.2,115.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:118.100,119.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:119.13,121.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:122.2,122.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:122.38,124.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:125.2,126.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:126.16,128.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:129.2,129.53 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:129.53,131.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:133.2,135.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:135.17,137.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:138.2,138.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:138.29,140.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:141.2,146.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:149.123,150.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:150.13,152.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:153.2,153.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:153.18,155.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:156.2,156.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:156.38,158.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:159.2,161.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:161.17,163.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:164.2,169.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:172.113,173.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:173.13,175.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:176.2,176.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:176.50,178.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:179.2,181.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:181.17,183.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:184.2,188.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:191.57,195.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:197.102,198.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:198.13,200.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:201.2,201.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:201.20,203.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:204.2,205.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:205.16,207.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:209.2,210.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:210.32,212.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:214.2,217.56 3 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:217.56,223.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:225.2,230.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:233.41,235.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:235.16,237.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:238.2,238.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:35.27,37.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:42.41,43.11 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:44.48,45.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:46.10,47.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:54.57,55.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:56.17,57.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:58.16,59.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:60.10,61.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:82.58,83.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:84.28,85.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:86.26,87.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:88.10,89.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:93.114,95.68 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:95.68,97.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:99.2,101.42 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:101.42,102.71 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:102.71,105.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:107.2,117.23 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:117.23,119.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:121.2,124.22 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:124.22,125.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:125.31,127.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:128.3,128.35 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:129.8,129.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:129.37,131.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:132.2,132.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:135.74,136.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:136.30,138.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:139.2,139.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:139.34,141.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:142.2,142.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:142.31,144.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:145.2,145.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:145.22,147.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:161.169,162.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:162.17,164.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:165.2,166.51 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:166.51,168.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:169.2,169.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:172.92,174.42 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:174.42,177.63 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:177.63,179.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:179.9,181.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:183.2,183.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:186.65,190.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:192.115,194.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:194.26,196.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:196.8,196.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:196.31,198.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:199.2,199.117 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:202.122,206.31 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:206.31,207.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:207.45,209.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:211.2,211.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:214.72,216.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:218.117,219.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:219.16,221.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:222.2,223.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:223.20,225.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:225.17,227.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:228.3,228.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:228.27,229.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:229.50,231.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:231.30,232.11 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:236.3,236.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:239.2,241.60 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:241.60,243.61 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:243.61,245.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:246.3,246.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:246.24,247.9 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:249.3,250.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:250.17,252.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:253.3,253.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:253.22,254.9 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:256.3,256.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:256.29,257.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:257.50,259.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:259.30,260.11 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:264.3,265.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:265.32,266.9 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:269.2,269.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:272.51,273.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:273.16,275.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:276.2,277.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:277.18,279.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:280.2,280.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:280.19,282.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:283.2,283.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:286.97,288.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:288.30,290.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:291.2,291.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:291.49,293.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:294.2,294.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:297.108,299.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:301.108,303.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:305.102,307.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:319.55,320.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:320.31,322.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:323.2,323.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:323.26,325.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:326.2,326.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:329.71,330.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:343.26,344.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:345.10,346.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:354.95,362.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:362.16,364.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:366.2,397.39 14 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:397.39,399.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:399.27,401.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:402.8,404.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:405.2,407.46 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:407.46,410.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:411.2,411.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:411.44,413.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:413.12,415.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:417.2,417.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:417.26,419.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:420.2,420.84 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:420.84,422.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:427.2,427.65 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:427.65,429.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:431.2,433.20 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:433.20,435.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:436.2,437.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:437.20,439.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:440.2,440.56 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:440.56,442.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:443.2,443.56 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:443.56,448.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:450.2,450.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:450.45,453.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:459.2,459.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:459.31,461.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:461.22,462.62 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:462.62,465.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:466.4,466.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:468.3,468.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:471.2,472.115 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:472.115,474.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:491.2,491.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:491.19,493.23 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:493.23,495.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:496.3,508.21 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:508.21,510.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:511.3,511.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:522.2,522.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:522.43,535.34 5 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:535.34,556.30 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:556.30,558.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:559.4,559.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:559.44,561.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:562.4,562.106 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:562.106,564.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:575.4,575.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:575.74,577.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:578.4,579.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:579.18,581.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:583.4,584.28 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:584.28,586.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:588.4,588.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:588.31,599.57 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:599.57,601.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:601.17,604.7 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:606.5,607.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:607.21,609.6 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:615.5,615.138 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:615.138,617.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:617.27,619.7 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:620.6,620.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:622.5,623.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:623.26,625.6 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:626.5,626.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:630.4,631.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:631.20,633.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:634.4,634.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:634.22,637.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:637.26,639.6 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:640.5,640.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:645.4,660.77 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:660.77,662.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:663.4,664.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:664.25,666.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:667.4,667.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:673.2,673.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:673.26,675.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:677.2,678.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:678.25,680.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:681.2,681.97 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:681.97,683.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:690.2,691.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:691.21,693.33 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:693.33,695.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:696.3,696.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:696.33,698.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:699.3,699.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:699.49,704.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:721.3,721.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:721.54,722.84 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:722.84,724.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:728.2,728.99 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:728.99,730.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:732.2,733.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:733.22,735.10 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:736.109,737.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:738.100,739.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:740.114,741.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:742.107,743.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:744.11,745.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:748.2,749.43 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:749.43,751.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:753.2,755.34 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:755.34,756.48 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:756.48,757.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:757.19,760.5 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:764.2,764.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:764.31,767.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:768.2,768.35 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:768.35,771.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:772.2,772.76 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:772.76,776.3 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:778.2,780.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:780.16,782.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:782.20,785.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:788.2,788.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:788.25,798.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:798.18,800.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:800.9,800.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:800.30,807.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:808.3,808.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:808.36,810.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:811.3,812.50 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:812.50,815.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:816.3,822.17 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:822.17,824.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:826.3,836.17 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:836.17,838.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:839.3,839.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:842.2,843.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:843.30,844.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:844.52,846.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:846.9,848.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:851.2,869.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:869.21,871.43 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:871.43,873.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:874.3,874.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:874.29,876.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:886.3,886.76 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:886.76,888.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:890.2,890.105 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:890.105,892.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:893.2,894.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:894.16,896.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:901.2,904.40 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:904.40,905.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:905.15,906.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:909.3,910.63 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:910.63,912.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:912.9,914.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:916.3,916.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:916.43,918.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:919.3,920.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:920.20,922.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:925.3,925.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:925.23,928.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:929.3,931.33 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:931.33,934.39 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:934.39,936.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:939.2,948.42 5 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:948.42,950.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:950.21,952.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:952.9,955.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:959.2,959.53 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:959.53,960.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:960.54,961.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:961.33,963.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:964.9,972.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:973.3,973.60 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:973.60,974.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:974.40,976.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:978.3,978.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:978.61,979.41 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:979.41,981.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:983.3,983.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:983.28,985.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:986.3,987.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:989.2,989.51 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:989.51,991.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:995.2,997.53 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:997.53,999.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:999.8,1001.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1002.2,1002.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1002.22,1004.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1008.2,1014.76 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1014.76,1016.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1021.2,1021.57 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1021.57,1026.13 5 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1026.13,1029.21 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1029.21,1032.5 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1033.4,1033.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1033.49,1035.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1036.4,1043.89 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1043.89,1046.5 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1048.4,1048.86 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1052.2,1063.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1063.21,1065.40 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1065.40,1067.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1068.3,1068.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1068.38,1070.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1072.2,1074.18 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1074.18,1081.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1082.2,1082.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1082.28,1084.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1085.2,1085.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1085.16,1087.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1088.2,1088.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1088.30,1090.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1091.2,1091.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1091.30,1093.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1098.2,1098.76 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1098.76,1100.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1101.2,1102.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1102.16,1104.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1105.2,1105.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1111.94,1113.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1113.15,1115.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1117.2,1118.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1118.16,1120.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1122.2,1123.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1123.13,1125.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1126.2,1131.16 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1131.16,1133.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1134.2,1134.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1134.19,1136.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1146.2,1146.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1146.39,1148.55 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1148.55,1150.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1152.2,1152.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1152.39,1154.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1157.2,1158.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1158.21,1163.21 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1163.21,1165.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1166.3,1167.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1167.21,1169.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1170.3,1170.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1170.52,1172.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1173.3,1173.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1173.52,1178.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1179.3,1179.41 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1179.41,1182.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1183.3,1183.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1188.2,1188.46 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1188.46,1190.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1191.2,1191.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1191.27,1193.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1195.2,1196.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1196.16,1198.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1201.2,1210.16 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1210.16,1212.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1213.2,1213.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1218.59,1220.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1220.38,1222.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1225.2,1226.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1226.29,1227.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1227.22,1229.9 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1232.2,1232.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1232.18,1234.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1237.2,1244.29 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1244.29,1245.67 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1245.67,1247.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1249.2,1249.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1249.16,1251.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1254.2,1254.11 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1258.55,1260.47 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1260.47,1262.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1263.2,1264.58 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1264.58,1266.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1267.2,1267.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1270.252,1271.108 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1271.108,1273.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1274.2,1274.55 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1274.55,1276.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1277.2,1277.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1280.184,1282.69 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1282.69,1284.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1284.32,1285.58 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1285.58,1287.10 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1290.3,1290.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1290.18,1292.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1294.2,1294.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1294.19,1297.32 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1297.32,1298.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1298.39,1300.10 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1303.3,1303.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1303.19,1305.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1307.2,1307.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1307.21,1309.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1309.32,1310.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1310.49,1312.10 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1315.3,1315.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1315.18,1317.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1319.2,1319.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1319.28,1321.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1321.17,1323.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1324.3,1324.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1324.27,1326.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1328.2,1328.76 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1328.76,1330.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1331.2,1331.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1342.96,1343.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1343.26,1345.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1347.2,1348.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1348.16,1350.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1352.2,1363.23 9 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1363.23,1364.58 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1364.58,1365.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1365.31,1367.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1367.10,1369.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1373.2,1373.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1373.17,1375.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1376.2,1376.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1376.16,1378.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1379.2,1379.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1379.16,1381.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1382.2,1382.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1382.18,1384.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1385.2,1385.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1385.19,1387.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1388.2,1388.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1388.19,1390.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1396.2,1399.18 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1399.18,1400.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1400.61,1401.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1402.50,1403.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1404.12,1405.108 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1409.2,1410.42 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1410.42,1414.3 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1415.2,1420.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1420.16,1422.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1429.2,1444.43 6 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1444.43,1446.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1449.2,1451.27 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1451.27,1453.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1458.2,1458.46 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1458.46,1460.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1461.2,1461.63 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1461.63,1463.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1465.2,1466.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1466.15,1472.29 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1472.29,1479.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1479.18,1481.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1482.4,1482.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1482.23,1483.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1485.4,1485.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1485.30,1486.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1486.24,1488.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1488.32,1489.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1493.4,1494.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1494.30,1495.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1498.8,1504.29 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1504.29,1506.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1506.18,1508.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1509.4,1509.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1509.23,1510.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1512.4,1512.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1512.30,1513.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1513.24,1515.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1515.32,1516.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1520.4,1521.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1521.30,1522.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1526.2,1526.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1526.26,1528.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1528.17,1530.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1535.2,1535.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1535.74,1536.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1536.13,1537.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1537.33,1542.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1542.26,1544.39 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1544.39,1546.7 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1548.5,1548.82 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1565.2,1565.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1565.38,1569.27 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1569.27,1571.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1572.3,1572.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1572.27,1574.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1576.3,1581.32 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1581.32,1586.4 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1588.3,1592.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1592.18,1594.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1595.3,1596.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1596.17,1598.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1599.3,1599.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1602.2,1602.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1603.15,1618.32 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1618.32,1620.33 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1620.33,1621.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1621.40,1623.11 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1626.4,1638.6 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1640.3,1641.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1641.17,1643.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1644.3,1644.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1646.18,1648.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1648.17,1650.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1651.3,1651.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1653.10,1654.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1654.25,1656.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1657.3,1659.32 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1659.32,1661.33 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1661.33,1662.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1662.40,1664.11 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1667.4,1669.26 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1669.26,1671.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1672.4,1673.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1673.25,1675.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1676.4,1676.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1678.3,1678.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1690.51,1695.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1700.73,1702.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1702.16,1704.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1705.2,1706.48 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1706.48,1710.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1711.2,1713.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1713.16,1715.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1716.2,1716.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1727.117,1731.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1731.21,1733.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1734.2,1735.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1735.16,1737.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1738.2,1739.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1739.27,1741.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1742.2,1742.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1764.19,1775.30 7 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1775.30,1777.37 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1777.37,1779.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1781.3,1781.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1781.20,1783.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1797.2,1797.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1797.39,1799.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1801.2,1811.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1811.25,1813.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1815.2,1816.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1816.29,1818.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1824.2,1824.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1824.27,1826.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1831.2,1833.22 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1833.22,1835.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1837.2,1846.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1846.16,1848.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1853.2,1855.27 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1855.27,1857.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1859.2,1876.33 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1876.33,1878.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1880.2,1881.28 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1881.28,1885.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1885.20,1888.33 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1888.33,1889.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1889.40,1891.11 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1894.4,1894.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1894.20,1895.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1900.3,1900.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1900.22,1902.33 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1902.33,1903.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1903.50,1905.11 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1908.4,1908.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1908.19,1909.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1918.3,1918.56 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1918.56,1919.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1927.3,1927.64 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1927.64,1928.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1932.3,1935.32 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1935.32,1936.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1936.39,1938.10 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1942.3,1956.14 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1956.14,1957.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1957.37,1959.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1961.3,1962.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1962.26,1963.9 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1975.2,1975.59 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1975.59,1986.17 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1986.17,1988.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1990.3,1991.34 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1991.34,1993.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1995.3,1996.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1996.29,1998.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1998.21,2001.34 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2001.34,2002.41 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2002.41,2004.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2007.5,2007.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2007.21,2008.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2011.4,2011.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2011.23,2013.34 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2013.34,2014.51 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2014.51,2016.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2019.5,2019.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2019.20,2020.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2023.4,2023.57 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2023.57,2024.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2027.4,2027.65 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2027.65,2028.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2030.4,2031.33 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2031.33,2032.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2032.40,2034.11 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2037.4,2051.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2051.15,2052.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2052.38,2054.6 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2056.4,2057.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2057.27,2058.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2065.2,2066.28 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2066.28,2068.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2072.2,2072.71 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2072.71,2080.30 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2080.30,2081.41 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2081.41,2087.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2089.3,2089.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2089.13,2090.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2090.31,2095.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2095.25,2097.38 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2097.38,2099.7 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2101.5,2101.81 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2112.2,2112.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2112.38,2115.27 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2115.27,2117.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2121.3,2138.30 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2138.30,2140.11 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2140.11,2141.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2143.4,2160.15 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2160.15,2161.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2161.39,2163.6 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2165.4,2165.46 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2167.3,2173.24 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2173.24,2175.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2176.3,2176.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2179.2,2179.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2180.15,2182.24 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2182.24,2184.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2185.3,2185.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2187.18,2199.30 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2199.30,2201.11 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2201.11,2202.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2204.4,2208.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2208.15,2209.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2209.39,2211.6 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2213.4,2213.35 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2215.3,2216.24 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2216.24,2218.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2219.3,2219.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2220.10,2221.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2221.22,2223.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2224.3,2226.27 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2226.27,2228.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2228.20,2230.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2231.4,2233.26 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2233.26,2235.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2236.4,2237.23 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2237.23,2239.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2240.4,2240.46 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2240.46,2244.5 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2245.4,2245.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2247.3,2247.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2252.94,2254.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2254.16,2256.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2258.2,2260.18 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2260.18,2261.59 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2261.59,2262.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2262.36,2264.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2264.10,2266.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2270.2,2270.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2270.13,2272.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2273.2,2273.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2273.50,2275.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2277.2,2277.98 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2281.98,2282.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2282.26,2284.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2286.2,2287.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2287.16,2289.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2291.2,2292.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2292.13,2294.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2297.2,2298.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2298.19,2299.51 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2299.51,2301.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2302.3,2302.55 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2304.2,2304.42 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2304.42,2306.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2308.2,2308.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2308.54,2309.48 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2309.48,2311.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2312.3,2312.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2316.2,2318.53 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:17.82,19.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:21.149,22.55 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:22.55,24.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:25.2,25.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:25.36,27.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:28.2,34.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:34.16,36.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:37.2,37.42 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:37.42,39.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:40.2,40.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:43.105,44.48 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:44.48,46.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:47.2,48.54 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:51.129,53.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:53.16,55.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:56.2,57.53 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:57.53,59.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:60.2,61.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:61.25,63.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:64.2,65.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:65.16,67.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:68.2,68.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:26.97,27.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:27.18,29.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:30.2,30.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:33.37,35.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:37.81,38.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:38.44,40.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:41.2,41.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:41.38,43.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:44.2,44.57 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:47.88,48.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:48.32,50.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:51.2,52.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:52.20,54.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:55.2,55.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:58.40,72.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:74.106,75.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:75.34,77.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:78.2,79.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:79.16,81.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:83.2,84.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:84.16,86.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:88.2,89.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:89.13,91.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:93.2,94.63 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:94.63,96.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:98.2,98.72 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:98.72,100.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:102.2,106.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:109.117,110.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:110.32,112.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:113.2,113.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:113.34,115.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:117.2,118.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:118.16,120.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:121.2,121.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:121.19,123.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:125.2,126.69 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:126.69,128.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:130.2,136.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:18.33,20.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:22.27,37.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:39.93,40.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:40.30,42.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:43.2,43.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:43.28,45.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:46.2,47.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:47.16,49.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:51.2,52.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:52.17,54.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:55.2,56.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:56.19,58.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:59.2,59.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:59.19,61.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:62.2,63.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:63.16,65.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:67.2,74.9 3 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:74.9,76.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:77.2,78.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:78.15,80.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:81.2,85.16 4 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:85.16,87.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:88.2,88.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:88.17,90.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:92.2,101.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:104.48,105.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:105.16,107.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:108.2,109.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:109.29,111.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:112.2,112.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:112.31,114.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:115.2,115.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:118.75,120.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:120.27,121.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:121.32,123.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:123.17,124.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:126.4,126.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:129.2,134.33 3 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:134.33,136.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:137.2,137.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:137.40,138.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:138.39,140.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:141.3,141.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:143.2,143.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:143.34,145.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:146.2,147.35 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:147.35,149.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:150.2,150.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:153.77,154.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:154.20,156.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:157.2,159.31 3 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:159.31,160.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:160.33,162.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:163.3,163.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:163.30,165.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:167.2,170.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:23.91,25.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:27.38,50.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:52.104,53.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:53.38,55.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:56.2,57.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:57.16,59.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:61.2,62.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:62.26,64.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:65.2,66.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:66.30,68.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:69.2,69.72 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:69.72,71.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:73.2,74.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:74.16,76.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:77.2,78.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:78.16,80.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:81.2,82.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:82.16,84.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:85.2,86.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:86.16,88.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:90.2,105.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:105.16,107.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:109.2,109.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:109.19,117.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:118.2,118.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:118.25,120.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:121.2,121.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:121.30,123.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:124.2,124.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:124.31,126.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:127.2,128.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:128.16,130.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:131.2,131.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:134.91,136.9 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:136.9,138.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:139.2,140.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:140.15,141.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:141.19,143.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:144.3,144.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:146.2,146.94 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:149.59,150.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:150.16,152.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:153.2,154.61 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:154.61,156.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:157.2,157.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:160.56,161.75 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:161.75,163.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:164.2,164.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:167.67,169.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:170.17,171.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:172.67,173.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:174.10,175.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:179.60,180.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:180.16,182.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:183.2,184.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:184.25,186.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:187.2,187.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:190.57,191.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:192.15,193.81 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:193.81,195.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:196.3,196.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:197.19,199.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:199.17,201.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:202.3,202.55 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:202.55,204.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:205.3,205.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:206.14,207.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:208.11,209.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:210.10,211.41 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:215.59,216.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:216.16,218.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:219.2,219.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:220.12,221.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:222.14,223.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:224.10,225.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:28.90,30.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:30.16,32.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:34.2,36.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:37.16,38.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:40.16,42.140 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:44.20,46.140 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:48.17,50.142 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:52.17,56.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:56.50,62.63 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:62.63,64.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:66.4,66.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:66.45,68.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:72.4,74.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:74.25,76.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:77.4,77.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:80.3,80.101 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:82.18,84.141 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:86.18,88.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:88.18,90.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:91.3,91.41 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:93.17,96.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:96.50,99.59 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:99.59,101.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:102.4,104.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:104.25,106.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:107.4,107.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:110.3,110.98 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:112.10,116.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:125.86,126.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:126.16,128.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:129.2,130.9 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:130.9,132.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:133.2,133.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:133.22,135.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:137.2,139.31 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:139.31,141.10 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:141.10,143.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:144.3,145.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:145.22,147.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:148.3,149.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:149.26,151.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:152.3,152.68 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:152.68,154.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:155.3,156.37 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:156.37,158.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:159.3,160.107 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:162.2,162.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:165.249,166.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:166.24,168.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:169.2,169.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:169.38,171.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:173.2,174.31 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:174.31,175.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:175.32,177.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:180.2,181.34 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:181.34,182.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:182.29,183.9 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:185.3,197.17 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:197.17,199.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:200.3,200.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:200.20,201.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:203.3,203.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:203.37,205.33 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:205.33,206.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:208.4,208.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:208.19,209.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:209.43,210.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:212.5,212.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:214.4,215.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:215.30,216.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:220.2,220.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:223.113,229.2 5 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:231.101,233.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:247.92,251.16 4 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:251.16,253.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:253.8,253.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:253.24,255.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:259.2,272.51 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:272.51,274.38 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:274.38,275.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:276.50,277.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:278.12,279.107 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:287.2,292.26 5 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:292.26,294.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:297.2,297.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:297.19,301.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:303.2,311.42 5 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:311.42,315.3 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:316.2,341.64 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:341.64,342.86 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:342.86,344.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:345.3,345.56 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:345.56,347.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:348.3,360.19 6 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:360.19,364.4 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:365.3,365.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:369.2,370.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:370.15,372.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:372.27,374.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:375.3,375.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:375.27,377.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:380.2,381.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:381.15,387.28 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:387.28,395.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:395.18,397.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:398.4,398.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:398.23,399.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:401.4,401.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:401.30,402.66 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:402.66,403.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:405.5,406.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:406.12,407.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:409.5,409.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:409.28,413.6 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:414.5,415.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:415.30,416.11 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:419.4,420.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:420.30,421.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:424.8,432.28 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:432.28,438.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:438.18,440.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:441.4,441.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:441.23,442.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:444.4,444.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:444.30,445.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:445.40,447.31 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:447.31,448.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:452.4,455.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:455.30,456.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:461.2,465.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:465.17,467.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:469.2,470.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:470.16,472.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:473.2,473.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:20.79,21.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:21.43,23.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:24.2,24.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:24.29,26.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:27.2,27.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:30.40,63.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:65.68,71.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:71.25,74.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:75.2,75.67 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:78.62,83.19 3 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:83.19,87.3 3 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:88.2,88.89 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:91.101,92.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:92.22,94.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:95.2,96.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:96.18,98.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:99.2,100.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:100.16,102.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:103.2,104.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:104.16,106.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:107.2,107.119 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:110.99,111.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:111.22,113.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:114.2,115.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:115.18,117.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:118.2,119.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:119.16,121.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:122.2,122.51 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:122.51,124.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:125.2,126.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:126.16,128.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:129.2,131.15 3 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:131.15,132.69 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:132.69,134.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:135.3,135.58 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:137.2,137.130 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:140.102,142.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:142.16,144.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:145.2,145.64 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:145.64,147.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:148.2,148.113 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:151.109,153.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:153.16,155.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:156.2,157.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:157.16,159.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:160.2,161.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:161.16,163.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:164.2,164.67 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:167.107,169.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:169.16,171.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:172.2,173.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:173.16,175.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:176.2,176.107 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:176.107,178.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:179.2,179.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:180.41,181.63 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:182.41,183.95 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:184.10,185.83 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:189.111,191.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:191.16,193.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:194.2,195.57 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:195.57,197.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:198.2,199.23 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:199.23,201.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:202.2,203.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:203.16,205.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:206.2,206.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:206.17,208.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:209.2,209.108 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:212.63,215.2 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:217.69,219.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:219.16,221.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:222.2,222.79 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:225.60,227.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:227.16,229.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:230.2,230.57 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:233.137,234.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:234.49,236.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:237.2,238.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:238.16,240.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:241.2,243.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:243.16,245.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:246.2,247.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:247.16,249.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:250.2,250.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:250.22,252.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:253.2,253.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:256.142,258.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:258.16,260.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:261.2,262.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:262.16,264.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:265.2,265.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:265.47,267.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:268.2,269.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:269.16,270.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:270.50,272.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:273.3,273.89 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:275.2,275.173 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:278.157,280.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:280.16,282.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:283.2,283.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:283.47,285.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:286.2,287.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:287.16,288.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:288.50,290.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:291.3,291.89 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:293.2,293.169 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:296.104,297.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:297.22,299.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:300.2,301.61 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:301.61,303.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:303.20,304.9 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:307.2,307.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:307.19,309.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:310.2,317.8 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:320.119,322.39 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:322.39,323.81 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:323.81,325.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:327.2,327.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:330.71,332.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:332.16,334.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:335.2,335.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:17.61,105.23 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:105.23,122.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:123.2,123.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:126.104,127.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:127.61,129.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:130.2,130.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:130.38,132.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:133.2,134.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:134.16,136.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:137.2,138.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:138.16,140.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:141.2,147.107 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:147.107,149.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:150.2,151.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:151.16,153.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:154.2,170.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:170.19,172.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:173.2,173.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:176.103,177.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:177.61,179.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:180.2,180.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:180.38,182.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:183.2,184.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:184.16,186.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:187.2,191.106 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:191.106,193.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:194.2,195.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:195.16,197.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:198.2,200.31 3 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:200.31,207.36 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:207.36,218.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:219.3,220.35 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:222.2,230.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:233.107,234.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:234.61,236.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:237.2,237.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:237.38,239.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:240.2,241.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:241.16,243.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:244.2,248.110 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:248.110,250.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:251.2,252.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:252.16,254.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:255.2,256.33 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:256.33,266.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:267.2,275.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:278.108,279.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:279.61,281.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:282.2,282.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:282.37,284.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:285.2,286.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:286.16,288.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:289.2,290.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:290.19,292.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:293.2,293.104 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:293.104,295.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:296.2,297.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:297.16,299.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:300.2,307.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:307.16,309.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:310.2,311.43 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:311.43,318.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:319.2,332.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:332.22,334.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:335.2,335.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:338.108,339.62 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:339.62,341.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:342.2,342.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:342.38,344.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:345.2,346.9 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:346.9,348.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:349.2,350.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:350.16,352.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:353.2,357.16 5 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:357.16,359.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:360.2,370.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:373.109,374.62 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:374.62,376.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:377.2,377.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:377.38,379.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:380.2,381.9 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:381.9,383.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:384.2,385.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:385.16,387.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:388.2,390.32 3 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:390.32,392.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:393.2,394.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:394.16,396.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:397.2,403.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:406.106,407.62 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:407.62,409.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:410.2,410.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:410.38,412.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:413.2,414.9 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:414.9,416.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:417.2,418.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:418.16,420.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:421.2,423.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:423.16,424.41 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:424.41,434.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:435.3,435.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:437.2,445.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:483.65,484.42 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:484.42,485.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:485.39,487.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:489.2,489.85 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:489.85,491.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:492.2,492.95 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:495.102,496.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:496.38,498.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:499.2,499.58 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:499.58,501.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:502.2,502.90 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:505.60,508.2 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:510.66,512.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:512.26,514.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:515.2,515.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:518.69,521.33 3 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:521.33,523.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:523.21,524.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:526.3,526.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:526.34,527.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:529.3,530.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:532.2,532.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:535.63,537.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:537.19,539.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:540.2,541.42 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:541.42,543.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:544.2,544.57 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:544.57,546.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:547.2,547.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:547.54,549.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:550.2,550.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:553.70,557.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:559.66,561.9 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:561.9,563.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:564.2,566.17 3 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:566.17,568.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:569.2,569.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:570.103,572.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:573.34,574.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:575.10,576.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:580.56,581.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:581.37,583.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:584.2,584.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:584.26,586.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:586.37,587.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:589.3,589.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:591.2,591.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:594.90,602.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:604.68,605.71 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:605.71,607.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:607.17,609.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:610.3,610.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:612.2,613.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:613.16,615.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:616.2,617.41 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:617.41,619.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:620.2,620.78 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:623.65,625.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:625.16,627.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:628.2,628.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:628.17,630.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:631.2,631.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:634.51,635.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:635.16,637.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:638.2,638.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:641.56,642.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:642.28,644.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:645.2,646.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:649.92,651.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:651.29,653.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:654.2,654.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:657.86,659.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:659.29,661.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:662.2,662.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:665.94,667.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:667.29,669.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:670.2,670.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:673.98,675.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:675.29,677.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:678.2,678.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:17.93,18.104 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:18.104,20.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:22.2,23.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:23.16,25.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:27.2,28.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:28.19,30.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:32.2,35.33 3 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:35.33,36.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:36.47,39.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:42.2,44.20 3 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:44.20,47.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:48.2,49.68 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:49.68,50.48 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:50.48,52.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:53.3,53.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:53.32,55.23 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:55.23,56.63 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:56.63,58.6 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:59.5,59.53 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:61.4,61.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:64.2,71.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:71.17,73.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:73.8,73.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:73.29,75.36 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:75.36,77.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:78.3,83.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:86.2,86.35 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:86.35,88.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:90.2,97.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:97.16,99.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:101.2,110.28 3 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:110.28,112.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:113.2,124.16 4 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:124.16,126.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:127.2,127.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:133.93,134.35 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:134.35,136.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:138.2,139.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:139.16,141.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:143.2,144.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:144.16,146.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:147.2,147.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:147.17,149.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:151.2,152.33 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:152.33,153.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:153.47,156.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:159.2,160.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:160.16,162.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:164.2,176.26 3 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:176.26,178.23 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:178.23,180.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:181.3,192.5 3 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:195.2,196.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:196.16,198.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:199.2,199.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:22.104,24.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:24.16,26.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:28.2,29.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:29.18,31.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:33.2,33.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:34.13,35.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:36.13,37.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:38.14,39.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:40.16,41.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:42.10,43.95 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:51.67,53.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:57.68,58.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:58.33,60.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:61.2,61.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:67.42,69.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:74.61,76.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:76.26,78.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:79.2,79.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:85.90,86.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:86.49,88.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:90.2,91.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:91.15,93.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:94.2,95.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:95.17,97.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:100.2,103.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:103.16,105.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:107.2,113.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:113.12,115.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:115.18,117.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:118.3,119.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:119.20,121.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:122.3,124.48 3 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:125.8,127.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:129.2,130.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:130.16,132.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:134.2,139.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:145.90,147.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:147.15,149.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:151.2,152.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:152.16,154.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:156.2,157.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:157.16,158.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:158.47,160.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:161.3,161.56 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:164.2,170.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:170.19,173.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:173.8,175.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:176.2,176.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:181.92,183.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:183.16,185.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:187.2,188.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:188.16,190.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:192.2,200.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:200.25,207.28 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:207.28,209.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:210.3,210.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:212.2,212.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:216.93,217.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:217.52,219.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:221.2,222.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:222.15,224.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:226.2,227.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:227.16,229.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:231.2,231.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:231.47,232.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:232.47,234.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:235.3,235.59 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:238.2,241.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:35.127,36.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:36.23,38.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:39.2,40.40 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:40.40,42.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:43.2,43.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:43.37,45.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:46.2,46.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:46.37,48.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:49.2,49.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:52.23,80.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:82.26,140.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:142.92,143.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:143.25,145.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:147.2,148.49 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:148.49,150.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:152.2,152.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:153.17,154.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:154.24,156.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:157.3,158.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:158.17,160.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:161.3,165.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:166.17,167.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:167.22,169.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:170.3,170.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:170.22,172.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:173.3,174.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:174.17,176.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:177.3,181.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:182.16,189.23 7 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:189.23,191.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:192.3,192.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:192.24,194.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:195.3,195.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:195.39,197.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:198.3,207.17 3 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:207.17,209.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:210.3,210.69 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:210.69,212.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:213.3,213.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:214.10,215.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:219.92,220.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:220.25,222.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:224.2,225.49 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:225.49,227.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:229.2,229.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:230.17,232.24 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:232.24,234.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:235.3,236.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:236.17,238.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:239.3,239.59 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:239.59,241.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:242.3,242.81 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:242.81,244.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:245.3,250.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:251.17,253.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:253.22,255.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:256.3,257.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:257.17,259.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:260.3,260.79 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:260.79,262.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:263.3,268.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:269.10,270.66 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:274.91,276.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:276.16,278.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:279.2,279.67 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:279.67,280.76 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:280.76,282.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:285.2,286.52 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:286.52,288.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:289.2,289.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:292.74,294.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:294.16,296.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:297.2,297.62 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:297.62,299.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:300.2,300.68 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:303.109,304.56 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:304.56,306.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:307.2,307.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:307.25,309.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:310.2,310.81 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:310.81,312.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:313.2,313.102 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:313.102,315.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:316.2,316.108 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:316.108,318.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:319.2,319.99 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:319.99,321.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:322.2,322.99 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:322.99,324.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:325.2,325.60 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:325.60,327.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:328.2,328.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:328.34,330.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:331.2,331.114 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:331.114,333.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:334.2,334.66 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:334.66,336.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:337.2,337.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:337.40,339.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:340.2,340.132 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:340.132,342.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:343.2,343.35 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:343.35,345.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:346.2,346.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:349.92,350.103 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:350.103,352.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:354.2,355.52 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:355.52,357.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:358.2,358.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:358.32,360.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:361.2,361.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:364.108,365.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:365.19,367.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:368.2,369.53 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:369.53,371.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:372.2,372.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:372.19,374.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:375.2,375.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:375.39,376.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:376.34,378.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:380.2,380.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:383.66,385.53 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:385.53,387.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:388.2,388.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:388.19,390.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:391.2,391.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:10.101,12.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:12.16,14.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:16.2,18.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:19.16,20.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:21.14,22.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:23.15,24.84 1 0 +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:25.16,26.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:27.10,28.97 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:21.75,23.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:25.41,28.2 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:30.31,37.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:39.38,46.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:48.50,56.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:58.43,70.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:72.80,73.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:73.36,75.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:76.2,76.48 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:76.48,78.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:79.2,79.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:82.97,84.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:84.16,86.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:87.2,88.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:88.16,90.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:91.2,92.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:92.16,94.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:95.2,96.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:96.16,98.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:99.2,99.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:102.104,104.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:104.16,106.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:107.2,108.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:108.16,110.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:111.2,112.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:112.16,114.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:115.2,116.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:116.16,118.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:119.2,119.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:122.96,124.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:124.16,126.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:127.2,128.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:128.19,130.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:131.2,132.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:132.18,134.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:135.2,141.79 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:141.79,143.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:143.17,145.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:146.3,146.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:148.2,148.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:151.77,153.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:153.16,155.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:156.2,157.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:157.19,159.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:160.2,160.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:10.101,12.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:12.16,14.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:16.2,17.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:17.18,19.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:21.2,21.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:22.15,23.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:24.13,25.42 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:26.14,27.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:28.16,29.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:30.16,31.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:32.10,33.102 1 0 diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/repeat-01/create-database.stderr.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/repeat-01/create-database.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/repeat-01/create-database.stdout.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/repeat-01/create-database.stdout.log new file mode 100644 index 00000000..4b15bd57 --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/repeat-01/create-database.stdout.log @@ -0,0 +1 @@ +CREATE DATABASE diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/repeat-01/create-pgvector.stderr.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/repeat-01/create-pgvector.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/repeat-01/create-pgvector.stdout.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/repeat-01/create-pgvector.stdout.log new file mode 100644 index 00000000..d26bad14 --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/repeat-01/create-pgvector.stdout.log @@ -0,0 +1 @@ +CREATE EXTENSION diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/repeat-01/database-identity.stderr.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/repeat-01/database-identity.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/repeat-01/database-identity.stdout.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/repeat-01/database-identity.stdout.log new file mode 100644 index 00000000..b67f0082 --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/repeat-01/database-identity.stdout.log @@ -0,0 +1 @@ +{"database" : "engram_prc_rg_test_6479cc98e3e51502_r1", "schema" : "public", "server_version" : "17.10 (Debian 17.10-1.pgdg12+1)", "user" : "engram"} diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/repeat-01/go-test-summary.json b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/repeat-01/go-test-summary.json new file mode 100644 index 00000000..b03050ae --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/repeat-01/go-test-summary.json @@ -0,0 +1,40 @@ +{ + "schema_version": 1, + "verdict": "PASS", + "input_path": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-race\\repeat-01\\go-test.stdout.jsonl", + "fail_on_unexpected_skip": true, + "allowed_skip_identities": [], + "counts": { + "packages": 1, + "tests": 1, + "passed": 1, + "failed": 0, + "skipped": 0, + "no_tests": 0, + "zero_tests": 0, + "incomplete": 0, + "unexpected_skips": 0, + "malformed_lines": 0 + }, + "packages": [ + { + "package": "github.com/thebtf/engram/internal/mcp", + "outcome": "pass", + "elapsed_seconds": 4.83, + "last_output": "ok \tgithub.com/thebtf/engram/internal/mcp\t4.821s\tcoverage: 0.1% of statements", + "tests_observed": 1 + } + ], + "tests": [ + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestEC_F1_TagDerivedBackfill_T007", + "outcome": "pass", + "elapsed_seconds": 3.64, + "last_output": "--- PASS: TestEC_F1_TagDerivedBackfill_T007 (3.64s)", + "skip_allowed": false + } + ], + "unexpected_skips": [], + "errors": [] +} diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/repeat-01/go-test.stderr.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/repeat-01/go-test.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/repeat-01/go-test.stdout.jsonl b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/repeat-01/go-test.stdout.jsonl new file mode 100644 index 00000000..1b215e1c --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/repeat-01/go-test.stdout.jsonl @@ -0,0 +1,16 @@ +{"Time":"2026-07-11T03:39:27.2480324+03:00","Action":"start","Package":"github.com/thebtf/engram/internal/mcp"} +{"Time":"2026-07-11T03:39:27.3663192+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007"} +{"Time":"2026-07-11T03:39:27.3663192+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":"=== RUN TestEC_F1_TagDerivedBackfill_T007\n"} +{"Time":"2026-07-11T03:39:28.1896664+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":"{\"level\":\"warn\",\"error\":\"ERROR: relation \\\"observation_vectors\\\" does not exist (SQLSTATE 42P01)\",\"time\":\"2026-07-11T03:39:28+03:00\",\"message\":\"migration 040: orphan vector cleanup failed (non-fatal)\"}\n"} +{"Time":"2026-07-11T03:39:28.1896664+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":"{\"level\":\"info\",\"garbage_deleted\":0,\"orphan_vectors_deleted\":0,\"time\":\"2026-07-11T03:39:28+03:00\",\"message\":\"migration 040: garbage cleanup complete\"}\n"} +{"Time":"2026-07-11T03:39:28.1976652+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":"{\"level\":\"info\",\"orphan_vectors_deleted\":0,\"time\":\"2026-07-11T03:39:28+03:00\",\"message\":\"migration 041: orphan vector purge complete\"}\n"} +{"Time":"2026-07-11T03:39:28.2051681+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":"{\"level\":\"info\",\"patterns_deleted\":0,\"time\":\"2026-07-11T03:39:28+03:00\",\"message\":\"migration 042: low-quality pattern purge complete\"}\n"} +{"Time":"2026-07-11T03:39:28.2391952+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":"{\"level\":\"info\",\"total_deleted\":0,\"time\":\"2026-07-11T03:39:28+03:00\",\"message\":\"migration 043: radical observation cleanup complete\"}\n"} +{"Time":"2026-07-11T03:39:29.4033859+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":"{\"level\":\"warn\",\"error\":\"ERROR: extension \\\"vectorscale\\\" is not available (SQLSTATE 0A000)\",\"time\":\"2026-07-11T03:39:29+03:00\",\"message\":\"migration 109: vectorscale extension not available, skipping DiskANN index\"}\n"} +{"Time":"2026-07-11T03:39:30.6200023+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":"{\"level\":\"debug\",\"connections\":1,\"time\":\"2026-07-11T03:39:30+03:00\",\"message\":\"Connection pool warmed\"}\n"} +{"Time":"2026-07-11T03:39:31.002621+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":"--- PASS: TestEC_F1_TagDerivedBackfill_T007 (3.64s)\n"} +{"Time":"2026-07-11T03:39:31.002621+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Elapsed":3.64} +{"Time":"2026-07-11T03:39:31.0031219+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Output":"PASS\n"} +{"Time":"2026-07-11T03:39:31.0211212+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Output":"coverage: 0.1% of statements\n"} +{"Time":"2026-07-11T03:39:32.0782786+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Output":"ok \tgithub.com/thebtf/engram/internal/mcp\t4.821s\tcoverage: 0.1% of statements\n"} +{"Time":"2026-07-11T03:39:32.0782786+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Elapsed":4.83} diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/repeat-01/pg-stat-activity-after.stderr.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/repeat-01/pg-stat-activity-after.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/repeat-01/pg-stat-activity-after.stdout.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/repeat-01/pg-stat-activity-after.stdout.log new file mode 100644 index 00000000..fe51488c --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/repeat-01/pg-stat-activity-after.stdout.log @@ -0,0 +1 @@ +[] diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/repeat-01/pg-stat-activity-before.stderr.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/repeat-01/pg-stat-activity-before.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/repeat-01/pg-stat-activity-before.stdout.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/repeat-01/pg-stat-activity-before.stdout.log new file mode 100644 index 00000000..fe51488c --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/repeat-01/pg-stat-activity-before.stdout.log @@ -0,0 +1 @@ +[] diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/repeat-01/repeat-summary.json b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/repeat-01/repeat-summary.json new file mode 100644 index 00000000..5d5c0844 --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/repeat-01/repeat-summary.json @@ -0,0 +1,33 @@ +{ + "repeat": 1, + "verdict": "PASS", + "database": "engram_prc_rg_test_6479cc98e3e51502_r1", + "schema": "public", + "database_schema_identity": "engram_prc_rg_test_6479cc98e3e51502_r1.public", + "database_dsn": "REDACTED_DATABASE_DSN", + "database_create_confirmed": true, + "sequential_execution": { + "package_parallelism": 1, + "test_parallelism": 1 + }, + "race": true, + "connection_budget": 20, + "server_sessions_before": 6, + "server_sessions_after": 6, + "sessions_before": 0, + "sessions_after": 0, + "go_test_exit": 0, + "json_parser_exit": 0, + "coverage_policy": "Targeted", + "coverage_exit": 0, + "cleanup_exit": 0, + "cleanup_status": "PASS", + "required_session_start_execution": { + "schema_version": 1, + "verdict": "NOT_APPLICABLE", + "reason": "only an unfiltered canonical ./... run requires the 12-test session-start execution proof" + }, + "cleanup_summary": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-race\\repeat-01\\cleanup\\cleanup.json", + "errors": [], + "artifact_directory": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-race\\repeat-01" +} diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/repeat-01/server-connection-count-after.stderr.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/repeat-01/server-connection-count-after.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/repeat-01/server-connection-count-after.stdout.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/repeat-01/server-connection-count-after.stdout.log new file mode 100644 index 00000000..1e8b3149 --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/repeat-01/server-connection-count-after.stdout.log @@ -0,0 +1 @@ +6 diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/repeat-01/server-connection-count-before.stderr.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/repeat-01/server-connection-count-before.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/repeat-01/server-connection-count-before.stdout.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/repeat-01/server-connection-count-before.stdout.log new file mode 100644 index 00000000..1e8b3149 --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/repeat-01/server-connection-count-before.stdout.log @@ -0,0 +1 @@ +6 diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/repeat-01/targeted-coverage.stderr.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/repeat-01/targeted-coverage.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/repeat-01/targeted-coverage.stdout.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/repeat-01/targeted-coverage.stdout.log new file mode 100644 index 00000000..c958686c --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/repeat-01/targeted-coverage.stdout.log @@ -0,0 +1,352 @@ +github.com/thebtf/engram/internal/mcp/audit_helpers.go:33: effectiveAuditWriter 0.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:44: isAuditEnabled 0.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:52: runAuditAsync 0.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:77: marshalState 0.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:92: logAuditCreate 0.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:117: logAuditEdit 0.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:142: logAuditDelete 0.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:166: logAuditGeneric 0.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:189: logAuditSupersede 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:30: parseArgs 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:46: coerceString 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:67: coerceInt 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:97: coerceInt64 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:127: coerceFloat64 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:151: coerceBool 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:177: coerceStringSlice 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:204: coerceInt64Slice 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:222: clampToInt 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:236: clampInt64ToInt 0.0% +github.com/thebtf/engram/internal/mcp/context.go:17: extractProjectFromHeader 0.0% +github.com/thebtf/engram/internal/mcp/context.go:22: contextWithProject 0.0% +github.com/thebtf/engram/internal/mcp/context.go:29: ContextWithProject 0.0% +github.com/thebtf/engram/internal/mcp/context.go:35: projectFromContext 0.0% +github.com/thebtf/engram/internal/mcp/context.go:41: contextWithSession 0.0% +github.com/thebtf/engram/internal/mcp/context.go:48: ContextWithSession 0.0% +github.com/thebtf/engram/internal/mcp/context.go:54: sessionFromContext 0.0% +github.com/thebtf/engram/internal/mcp/context.go:61: actorFromContext 0.0% +github.com/thebtf/engram/internal/mcp/health.go:22: NewMCPHealth 0.0% +github.com/thebtf/engram/internal/mcp/health.go:29: RecordRequest 0.0% +github.com/thebtf/engram/internal/mcp/health.go:36: RecordError 0.0% +github.com/thebtf/engram/internal/mcp/health.go:42: rotateWindowIfNeeded 0.0% +github.com/thebtf/engram/internal/mcp/health.go:55: HandleHealth 0.0% +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:28: ruleGovernanceCaptureEnabled 0.0% +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:39: captureActiveRuleIntent 0.0% +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:104: ruleIntentFingerprint 0.0% +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:113: marshalRuleCandidateIntentResponse 0.0% +github.com/thebtf/engram/internal/mcp/server.go:127: NewServer 100.0% +github.com/thebtf/engram/internal/mcp/server.go:141: SetBackfillStatusFunc 0.0% +github.com/thebtf/engram/internal/mcp/server.go:146: SetVersionedDocumentStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:151: SetIssueStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:156: SetMemoryStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:161: SetMetaMemoryIndex 0.0% +github.com/thebtf/engram/internal/mcp/server.go:166: SetHintQueue 0.0% +github.com/thebtf/engram/internal/mcp/server.go:171: SetStateStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:176: SetDirectiveCaptureService 0.0% +github.com/thebtf/engram/internal/mcp/server.go:181: SetBehavioralRulesStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:186: SetRuleGovernanceStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:191: SetRuleInjectionTelemetryStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:195: SetPromotionStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:199: SetGraphStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:204: SetNodesStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:211: SetAuditStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:216: SetPurgeStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:222: SetCandidateStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:228: SetSnapshotStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:234: SetBulkFacade 0.0% +github.com/thebtf/engram/internal/mcp/server.go:240: setTestAuditWriter 0.0% +github.com/thebtf/engram/internal/mcp/server.go:246: setTestMemoryEditor 0.0% +github.com/thebtf/engram/internal/mcp/server.go:252: setTestMemorySignificanceUpdater 0.0% +github.com/thebtf/engram/internal/mcp/server.go:260: SetWriteLintOrchestrator 0.0% +github.com/thebtf/engram/internal/mcp/server.go:269: SetRedactionRules 0.0% +github.com/thebtf/engram/internal/mcp/server.go:274: SetEmbeddingStores 0.0% +github.com/thebtf/engram/internal/mcp/server.go:282: SetRerankClient 0.0% +github.com/thebtf/engram/internal/mcp/server.go:290: SetStatsDB 0.0% +github.com/thebtf/engram/internal/mcp/server.go:297: HandleRequest 0.0% +github.com/thebtf/engram/internal/mcp/server.go:303: ListTools 0.0% +github.com/thebtf/engram/internal/mcp/server.go:332: Version 0.0% +github.com/thebtf/engram/internal/mcp/server.go:383: Run 0.0% +github.com/thebtf/engram/internal/mcp/server.go:427: handleRequest 0.0% +github.com/thebtf/engram/internal/mcp/server.go:461: handleNotification 0.0% +github.com/thebtf/engram/internal/mcp/server.go:473: handleInitialize 0.0% +github.com/thebtf/engram/internal/mcp/server.go:496: buildInstructions 0.0% +github.com/thebtf/engram/internal/mcp/server.go:660: storeMemoryTool 0.0% +github.com/thebtf/engram/internal/mcp/server.go:712: recallMemoryTool 0.0% +github.com/thebtf/engram/internal/mcp/server.go:805: primaryTools 0.0% +github.com/thebtf/engram/internal/mcp/server.go:942: handleToolsList 0.0% +github.com/thebtf/engram/internal/mcp/server.go:1612: handleToolsCall 0.0% +github.com/thebtf/engram/internal/mcp/server.go:1644: sanitizeToolCallArgs 0.0% +github.com/thebtf/engram/internal/mcp/server.go:1656: callTool 0.0% +github.com/thebtf/engram/internal/mcp/server.go:1874: sendResponse 0.0% +github.com/thebtf/engram/internal/mcp/server.go:1884: sendError 0.0% +github.com/thebtf/engram/internal/mcp/server.go:1896: handleFindSimilarObservations 0.0% +github.com/thebtf/engram/internal/mcp/server.go:1927: handleGetMemoryStats 0.0% +github.com/thebtf/engram/internal/mcp/server.go:2055: handleBackfillStatus 0.0% +github.com/thebtf/engram/internal/mcp/server.go:2071: handleCheckSystemHealth 0.0% +github.com/thebtf/engram/internal/mcp/server.go:2216: handleAnalyzeSearchPatterns 0.0% +github.com/thebtf/engram/internal/mcp/server.go:2246: handleSearchSessions 0.0% +github.com/thebtf/engram/internal/mcp/server.go:2251: handleListSessions 0.0% +github.com/thebtf/engram/internal/mcp/tools_admin.go:18: buildAdminTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_admin.go:68: adminActionsForEnv 33.3% +github.com/thebtf/engram/internal/mcp/tools_admin.go:80: vnextEnabled 0.0% +github.com/thebtf/engram/internal/mcp/tools_admin.go:84: handleAdmin 0.0% +github.com/thebtf/engram/internal/mcp/tools_admin.go:120: handlePurgeProject 0.0% +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:27: ambientHintsEnabledFromEnv 0.0% +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:32: ambientHintsTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:48: handleGetAmbientHints 0.0% +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:86: normalizeAmbientHintsToolLimit 0.0% +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:96: ambientHintItems 0.0% +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:114: errMissingSessionID 0.0% +github.com/thebtf/engram/internal/mcp/tools_brief.go:31: handleGetMemoryBrief 0.0% +github.com/thebtf/engram/internal/mcp/tools_brief.go:107: memoryBriefUsesPrincipalScope 0.0% +github.com/thebtf/engram/internal/mcp/tools_brief.go:115: handlePrincipalMemoryBrief 0.0% +github.com/thebtf/engram/internal/mcp/tools_brief.go:259: truncateBriefContent 0.0% +github.com/thebtf/engram/internal/mcp/tools_brief.go:270: filterInjectionByScope 0.0% +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:25: bulkOpsTools 0.0% +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:95: handleBulkPromote 0.0% +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:154: handleBulkDelete 0.0% +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:211: handleBulkSupersede 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:31: candidateItemFromDomain 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:51: newCandidateReviewSnapshot 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:59: requireCandidateReviewSnapshot 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:68: candidateTools 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:165: handleListCandidates 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:208: handleGetCandidate 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:239: handlePromoteCandidate 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:348: handleRejectCandidate 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:402: handleSupersedeCandidate 0.0% +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:34: codeIntelEnabled 0.0% +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:42: SetCodeChunkStore 0.0% +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:48: codebaseSearchTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:79: codebaseStatusTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:100: handleCodebaseSearch 0.0% +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:194: handleCodebaseStatus 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:21: getVault 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:35: credentialStore 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:49: handleStoreCredential 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:130: handleGetCredential 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:192: handleListCredentials 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:243: handleDeleteCredential 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:302: handleVaultStatus 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:338: expandTagHierarchy 0.0% +github.com/thebtf/engram/internal/mcp/tools_directives.go:16: directivesCaptureEnabledFromEnv 0.0% +github.com/thebtf/engram/internal/mcp/tools_directives.go:20: rememberDirectiveTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_directives.go:38: currentDirectiveCaptureService 0.0% +github.com/thebtf/engram/internal/mcp/tools_directives.go:48: handleRememberDirective 0.0% +github.com/thebtf/engram/internal/mcp/tools_directives.go:72: parseRememberDirectiveArgs 0.0% +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:10: handleDocsConsolidated 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents.go:15: handleListCollections 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents.go:61: handleListDocuments 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents.go:121: handleGetDocument 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents.go:165: handleRemoveDocument 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents.go:197: handleIngestDocument 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents.go:235: handleSearchCollection 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:15: handleDocCreate 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:61: handleDocRead 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:117: handleDocUpdate 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:122: handleDocList 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:175: handleDocHistory 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:232: handleDocComment 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:19: SetExperienceProvider 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:23: experienceHistoryTools 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:40: experienceHistoryReadSchema 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:65: experienceHistoryDetailSchema 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:82: experienceHistoryTriggerEnum 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:91: handleExperienceHistoryRead 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:103: handleExperienceHistoryDetail 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:115: parseExperienceHistoryReadArgs 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:142: parseExperienceHistoryDetailArgs 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:157: experienceHistoryTriggersFromArgs 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:180: marshalExperienceHistory 0.0% +github.com/thebtf/engram/internal/mcp/tools_feedback.go:12: handleFeedbackConsolidated 0.0% +github.com/thebtf/engram/internal/mcp/tools_feedback.go:36: handleSetSessionOutcome 0.0% +github.com/thebtf/engram/internal/mcp/tools_governance.go:27: governanceTools 0.0% +github.com/thebtf/engram/internal/mcp/tools_governance.go:98: handleListSnapshots 0.0% +github.com/thebtf/engram/internal/mcp/tools_governance.go:167: handleRollbackSnapshot 0.0% +github.com/thebtf/engram/internal/mcp/tools_governance.go:215: handlePinSnapshot 0.0% +github.com/thebtf/engram/internal/mcp/tools_governance.go:258: handleRedactionRulesStatus 0.0% +github.com/thebtf/engram/internal/mcp/tools_governance.go:284: resolveGovernanceActor 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:64: handleGraph 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:100: graphAddEdge 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:216: mcpGraphEndpointExists 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:243: mcpGraphEdgeAlreadyExists 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:276: graphAddNode 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:317: graphRemoveEdge 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:332: graphGetEdges 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:397: filterEdgesByNodeType 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:457: graphTraverse 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:480: graphFindPath 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:502: graphSynonyms 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:23: graphCreateEdgeWithGuards 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:80: graphEndpointExistsWithGuards 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:114: graphDuplicateEdgeExists 0.0% +github.com/thebtf/engram/internal/mcp/tools_ingest.go:25: handleIngest 0.0% +github.com/thebtf/engram/internal/mcp/tools_ingest.go:43: ingestDocument 0.0% +github.com/thebtf/engram/internal/mcp/tools_instincts.go:20: handleImportInstincts 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:19: issuesToolSchema 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:109: validateIssueActionParams 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:143: handleIssues 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:189: resolveSourceProject 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:205: handleIssueCreate 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:250: handleIssueList 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:311: handleIssueGet 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:344: handleIssueUpdate 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:382: handleIssueComment 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:408: handleIssueReopen 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:425: handleIssueClose 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:22: handleLifecycle 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:48: lifecycleInfo 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:87: lifecyclePromote 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:118: lifecycleDemote 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:149: lifecycleSetConfidence 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:172: lifecycleSetDefeasibility 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:191: lifecycleSleepStatus 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:197: lifecycleDecayPreview 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:233: marshalJSON 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:35: vnextFEnabled 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:42: isValidPrivacyScope 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:54: derivePrivacyScopeFromLegacy 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:82: deriveLegacyScopeFromPrivacy 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:93: applyPrincipalMemoryMetadata 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:135: addPrincipalMemoryFields 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:161: newScopedWriteLintMemoryStore 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:172: writeLintVisibilityCaller 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:186: writeLintVisibilityOptions 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:192: scopedWriteLintMemoryStore 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:202: filterVisibleWriteGateCandidates 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:214: domainManageAllowed 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:218: List 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:272: writeLintVisibilityFetchLimit 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:286: Get 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:297: Create 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:301: Update 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:305: MarkSuperseded 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:319: effectiveMemoryEditor 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:329: isValidStoreObservationType 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:354: handleStoreMemory 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1111: handleEditMemory 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1218: computeTTLDays 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1258: truncateTitle 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1270: keepRecallMemory 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1280: keepRecallMemoryFilters 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1342: handleRecallMemory 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1690: staleAdvisory 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1700: marshalWithStaleAdvisory 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1727: Rank 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1751: handleRecallMemoryHybrid 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:2252: handleRateMemory 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:2281: handleSuppressMemory 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:17: SetDomainRegistryService 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:21: checkDomainWriteMCP 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:43: addDomainWriteDecisionFields 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:51: marshalStoreMemoryAugmented 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:26: newMemoryStoreSignificanceUpdater 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:33: s6OutcomeEnabledFromEnv 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:37: effectiveMemorySignificanceUpdater 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:47: currentMemorySignificanceUpdater 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:58: rateMemorySignificanceTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:74: handleRateMemorySignificance 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:109: RateMemorySignificance 0.0% +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:18: s2MetaMemoryEnabled 0.0% +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:22: knowAboutTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:39: handleKnowAbout 0.0% +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:104: parseKnowAboutLimit 0.0% +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:118: summarizeMetaIndexTags 0.0% +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:153: summarizeMetaIndexDateRange 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:23: SetPrincipalMemoryQueryService 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:27: principalMemoryQueryTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:52: handleQueryPrincipalMemory 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:134: principalMemoryQueryCaller 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:149: parsePrincipalMemoryQueryLimit 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:160: principalMemoryQueryText 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:167: parsePrincipalMemoryQueryVisibility 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:179: parsePrincipalMemoryQueryOffset 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:190: parsePrincipalMemoryQueryInt 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:215: parsePrincipalMemoryQueryBool 0.0% +github.com/thebtf/engram/internal/mcp/tools_recall.go:28: handleRecall 0.0% +github.com/thebtf/engram/internal/mcp/tools_recall.go:125: parseRecallIncludedPrincipals 0.0% +github.com/thebtf/engram/internal/mcp/tools_recall.go:165: appendRecallIncludedPrincipalMemories 0.0% +github.com/thebtf/engram/internal/mcp/tools_recall.go:223: recallIncludeTargetMatchesCaller 0.0% +github.com/thebtf/engram/internal/mcp/tools_recall.go:231: recallPrincipalQueryItemToMemory 0.0% +github.com/thebtf/engram/internal/mcp/tools_recall.go:247: handleRecallSearch 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:20: currentReviewLoopCandidateLister 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:30: reviewLoopCandidateTools 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:65: reviewLoopReadSchema 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:78: reviewPacketIDSchema 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:91: handleReviewMetricsRead 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:110: handleReviewQueueRead 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:140: handleReviewPacketDetail 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:151: handleReviewPacketPreviewAction 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:167: handleReviewPacketApplyAction 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:189: parseReviewLoopReadArgs 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:212: reviewLoopMCPPacketTypeSupported 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:217: reviewLoopActionFromArgs 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:225: reviewLoopReasonFromArgs 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:233: loadReviewPacketCandidate 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:256: applyReviewPacketPreserve 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:278: applyReviewPacketSuppress 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:296: reviewLoopMemoryFromCandidate 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:320: filterRiskyMCPReviewCandidates 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:330: marshalReviewLoop 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:17: ruleGovernanceReadTools 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:126: handleRuleGovernanceHealth 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:176: handleRuleGovernanceQueue 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:233: handleRuleGovernanceSnapshots 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:278: handleRuleGovernanceUsefulness 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:338: handleRuleGovernanceTransition 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:373: handleRuleGovernancePinSnapshot 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:406: handleRuleGovernanceRollback 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:483: requireRuleGovernanceReadAccess 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:495: requireRuleGovernanceProjectOrAdmin 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:505: ruleGovernanceCallerIsAdmin 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:510: requireRuleGovernanceAdminAccess 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:518: redactRuleGovernanceEvidenceHandles 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:535: redactRuleGovernanceEvidenceHandle 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:553: ruleGovernanceEvidenceHandleHasSensitiveText 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:559: isCanonicalRuleGovernanceEvidenceHandle 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:580: isSafeRuleGovernanceEvidenceID 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:594: parseRuleGovernanceTransitionRequest 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:604: parseRuleGovernanceSince 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:623: boundedRuleGovernanceLimit 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:634: formatRuleGovernanceTime 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:641: formatRuleGovernanceTimePtr 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:649: stringRuleCandidateStatusCounts 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:657: stringRuleVersionStateCounts 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:665: stringRuleArbiterRunStatusCounts 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:673: stringRuleInjectionEventTypeCounts 0.0% +github.com/thebtf/engram/internal/mcp/tools_rules.go:17: handleStoreRule 0.0% +github.com/thebtf/engram/internal/mcp/tools_rules.go:133: handleListRules 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:22: handleSettingsConsolidated 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:51: SetSettingsStore 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:57: settingsStore 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:67: isSecretSettingKey 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:74: requireAdmin 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:85: handleSetSetting 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:145: handleGetSetting 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:181: handleListSettings 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:216: handleDeleteSetting 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:35: resumeScopesFromFields 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:52: stateTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:82: setStateTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:142: handleGetState 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:219: handleSetState 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:274: decodeSessionStateForWrite 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:292: validateSessionStateBudget 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:303: validateNativeResumePacket 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:349: decodeProjectStateForWrite 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:364: requireStateObject 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:383: requireNestedObject 0.0% +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:10: handleStoreConsolidated 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:21: SetTemporalTruthProvider 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:25: temporalTruthEnabledFromEnv 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:30: temporalTruthTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:39: temporalTruthRefreshTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:48: temporalTruthRefreshSchema 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:58: temporalTruthSchema 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:72: currentTemporalTruthProvider 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:82: handleTemporalTruth 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:102: handleTemporalTruthRefresh 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:122: parseTemporalTruthArgs 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:151: parseTemporalTruthRefreshProject 0.0% +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:10: handleVaultConsolidated 0.0% +total: (statements) 0.1% diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/summary.json b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/summary.json new file mode 100644 index 00000000..1cd51f32 --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-race/summary.json @@ -0,0 +1,64 @@ +{ + "schema_version": 1, + "gate": "release-gates-foundation", + "run_id": "t007-maker-focused-race", + "started_at": "2026-07-11T00:39:06.8894571+00:00", + "finished_at": "2026-07-11T00:39:37.9559789+00:00", + "duration_seconds": 31.067, + "verdict": "PASS", + "counts": { + "requested_repeats": 1, + "completed_repeats": 1, + "passed_repeats": 1, + "failed_repeats": 0, + "child_commands": 16, + "nonzero_child_commands": 0 + }, + "packages": [ + "./internal/mcp" + ], + "run_pattern": "^TestEC_F1_TagDerivedBackfill_T007$", + "coverage_policy": "Targeted", + "connection_budget": 20, + "race": true, + "database_dsn": "REDACTED_DATABASE_DSN", + "environment": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-race\\environment.json", + "commands": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-race\\commands.json", + "repeats": [ + { + "repeat": 1, + "verdict": "PASS", + "database": "engram_prc_rg_test_6479cc98e3e51502_r1", + "schema": "public", + "database_schema_identity": "engram_prc_rg_test_6479cc98e3e51502_r1.public", + "database_dsn": "REDACTED_DATABASE_DSN", + "database_create_confirmed": true, + "sequential_execution": { + "package_parallelism": 1, + "test_parallelism": 1 + }, + "race": true, + "connection_budget": 20, + "server_sessions_before": 6, + "server_sessions_after": 6, + "sessions_before": 0, + "sessions_after": 0, + "go_test_exit": 0, + "json_parser_exit": 0, + "coverage_policy": "Targeted", + "coverage_exit": 0, + "cleanup_exit": 0, + "cleanup_status": "PASS", + "required_session_start_execution": { + "schema_version": 1, + "verdict": "NOT_APPLICABLE", + "reason": "only an unfiltered canonical ./... run requires the 12-test session-start execution proof" + }, + "cleanup_summary": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-race\\repeat-01\\cleanup\\cleanup.json", + "errors": [], + "artifact_directory": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-race\\repeat-01" + } + ], + "errors": [], + "artifact_directory": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-race" +} diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/commands.json b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/commands.json new file mode 100644 index 00000000..77f2daff --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/commands.json @@ -0,0 +1,1198 @@ +[ + { + "name": "go-version", + "executable": "C:\\Program Files\\Go\\bin\\go.exe", + "arguments": [ + "version" + ], + "environment_keys": [], + "command": "C:\\Program Files\\Go\\bin\\go.exe version", + "started_at": "2026-07-11T00:34:31.6116730+00:00", + "finished_at": "2026-07-11T00:34:31.8215794+00:00", + "duration_seconds": 0.21, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-repeat3\\go-version.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-repeat3\\go-version.stderr.log" + }, + { + "name": "postgres-container-identity", + "executable": "docker", + "arguments": [ + "inspect", + "--format", + "{{.Name}}|{{.Config.Image}}|{{.Image}}|{{.State.Running}}", + "engram-prc-postgres" + ], + "environment_keys": [], + "command": "docker inspect --format {{.Name}}|{{.Config.Image}}|{{.Image}}|{{.State.Running}} engram-prc-postgres", + "started_at": "2026-07-11T00:34:31.8841079+00:00", + "finished_at": "2026-07-11T00:34:32.1761141+00:00", + "duration_seconds": 0.292, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-repeat3\\postgres-container-identity.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-repeat3\\postgres-container-identity.stderr.log" + }, + { + "name": "postgres-server-identity", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT json_build_object('server_version', current_setting('server_version'), 'server_version_num', current_setting('server_version_num'), 'version', version(), 'max_connections', current_setting('max_connections'), 'superuser_reserved_connections', current_setting('superuser_reserved_connections'), 'reserved_connections', COALESCE(NULLIF(current_setting('reserved_connections', true), ''), '0'), 'current_connections', (SELECT count(*)::text FROM pg_stat_activity), 'database', current_database(), 'schema', current_schema(), 'user', current_user)::text;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT json_build_object('server_version', current_setting('server_version'), 'server_version_num', current_setting('server_version_num'), 'version', version(), 'max_connections', current_setting('max_connections'), 'superuser_reserved_connections', current_setting('superuser_reserved_connections'), 'reserved_connections', COALESCE(NULLIF(current_setting('reserved_connections', true), ''), '0'), 'current_connections', (SELECT count(*)::text FROM pg_stat_activity), 'database', current_database(), 'schema', current_schema(), 'user', current_user)::text;", + "started_at": "2026-07-11T00:34:32.1868774+00:00", + "finished_at": "2026-07-11T00:34:32.6684632+00:00", + "duration_seconds": 0.482, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-repeat3\\postgres-server-identity.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-repeat3\\postgres-server-identity.stderr.log" + }, + { + "name": "repeat-1-create-database", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "CREATE DATABASE \"engram_prc_rg_test_8b1d3112a7a95fbb_r1\" OWNER \"engram\";" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c CREATE DATABASE \"engram_prc_rg_test_8b1d3112a7a95fbb_r1\" OWNER \"engram\";", + "started_at": "2026-07-11T00:34:32.7065117+00:00", + "finished_at": "2026-07-11T00:34:33.3009986+00:00", + "duration_seconds": 0.594, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-repeat3\\repeat-01\\create-database.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-repeat3\\repeat-01\\create-database.stderr.log" + }, + { + "name": "repeat-1-create-pgvector", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "engram_prc_rg_test_8b1d3112a7a95fbb_r1", + "-At", + "-F", + "|", + "-c", + "CREATE EXTENSION IF NOT EXISTS vector WITH SCHEMA public;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d engram_prc_rg_test_8b1d3112a7a95fbb_r1 -At -F | -c CREATE EXTENSION IF NOT EXISTS vector WITH SCHEMA public;", + "started_at": "2026-07-11T00:34:33.3060313+00:00", + "finished_at": "2026-07-11T00:34:33.7384899+00:00", + "duration_seconds": 0.432, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-repeat3\\repeat-01\\create-pgvector.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-repeat3\\repeat-01\\create-pgvector.stderr.log" + }, + { + "name": "repeat-1-database-identity", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "engram_prc_rg_test_8b1d3112a7a95fbb_r1", + "-At", + "-F", + "|", + "-c", + "SELECT json_build_object('database', current_database(), 'schema', current_schema(), 'server_version', current_setting('server_version'), 'user', current_user)::text;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d engram_prc_rg_test_8b1d3112a7a95fbb_r1 -At -F | -c SELECT json_build_object('database', current_database(), 'schema', current_schema(), 'server_version', current_setting('server_version'), 'user', current_user)::text;", + "started_at": "2026-07-11T00:34:33.7417020+00:00", + "finished_at": "2026-07-11T00:34:34.1514076+00:00", + "duration_seconds": 0.41, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-repeat3\\repeat-01\\database-identity.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-repeat3\\repeat-01\\database-identity.stderr.log" + }, + { + "name": "repeat-1-pg-stat-before", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT COALESCE(json_agg(row_to_json(s)), '[]'::json)::text FROM (SELECT pid, usename, datname, state, backend_type, application_name, client_addr::text AS client_addr, wait_event_type, wait_event, query_start FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_8b1d3112a7a95fbb_r1' ORDER BY pid) AS s;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT COALESCE(json_agg(row_to_json(s)), '[]'::json)::text FROM (SELECT pid, usename, datname, state, backend_type, application_name, client_addr::text AS client_addr, wait_event_type, wait_event, query_start FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_8b1d3112a7a95fbb_r1' ORDER BY pid) AS s;", + "started_at": "2026-07-11T00:34:34.1572280+00:00", + "finished_at": "2026-07-11T00:34:34.6252083+00:00", + "duration_seconds": 0.468, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-repeat3\\repeat-01\\pg-stat-activity-before.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-repeat3\\repeat-01\\pg-stat-activity-before.stderr.log" + }, + { + "name": "repeat-1-server-connection-count-before", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT count(*) FROM pg_stat_activity;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT count(*) FROM pg_stat_activity;", + "started_at": "2026-07-11T00:34:34.6278663+00:00", + "finished_at": "2026-07-11T00:34:35.4932089+00:00", + "duration_seconds": 0.865, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-repeat3\\repeat-01\\server-connection-count-before.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-repeat3\\repeat-01\\server-connection-count-before.stderr.log" + }, + { + "name": "repeat-1-connection-count-before", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT count(*) FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_8b1d3112a7a95fbb_r1';" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT count(*) FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_8b1d3112a7a95fbb_r1';", + "started_at": "2026-07-11T00:34:35.5034367+00:00", + "finished_at": "2026-07-11T00:34:35.9626158+00:00", + "duration_seconds": 0.459, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-repeat3\\repeat-01\\connection-count-before.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-repeat3\\repeat-01\\connection-count-before.stderr.log" + }, + { + "name": "repeat-1-go-test", + "executable": "C:\\Program Files\\Go\\bin\\go.exe", + "arguments": [ + "test", + "-json", + "-p", + "1", + "-parallel", + "1", + "-count=1", + "-timeout", + "30m", + "-covermode=atomic", + "-coverprofile=.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-repeat3\\repeat-01\\coverage.out", + "-run", + "^TestEC_F1_TagDerivedBackfill_T007$", + "./internal/mcp" + ], + "environment_keys": [ + "DATABASE_DSN", + "DATABASE_MAX_CONNS", + "ENGRAM_RELEASE_GATE_REPEAT", + "ENGRAM_RELEASE_GATE_RUN_ID", + "ENGRAM_TEST_DSN", + "TEST_DATABASE_DSN" + ], + "command": "C:\\Program Files\\Go\\bin\\go.exe test -json -p 1 -parallel 1 -count=1 -timeout 30m -covermode=atomic -coverprofile=.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-repeat3\\repeat-01\\coverage.out -run ^TestEC_F1_TagDerivedBackfill_T007$ ./internal/mcp", + "started_at": "2026-07-11T00:34:35.9700434+00:00", + "finished_at": "2026-07-11T00:34:44.2078723+00:00", + "duration_seconds": 8.238, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-repeat3\\repeat-01\\go-test.stdout.jsonl", + "stderr": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-repeat3\\repeat-01\\go-test.stderr.log" + }, + { + "name": "repeat-1-assert-go-test-json", + "executable": "C:\\Program Files\\PowerShell\\7\\pwsh.exe", + "arguments": [ + "-NoProfile", + "-File", + "D:\\Dev\\engram\\.w\\t007-current-contract\\scripts\\production-gates\\assert-go-test-json.ps1", + "-InputPath", + ".agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-repeat3\\repeat-01\\go-test.stdout.jsonl", + "-SummaryPath", + ".agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-repeat3\\repeat-01\\go-test-summary.json", + "-FailOnUnexpectedSkip" + ], + "environment_keys": [], + "command": "C:\\Program Files\\PowerShell\\7\\pwsh.exe -NoProfile -File D:\\Dev\\engram\\.w\\t007-current-contract\\scripts\\production-gates\\assert-go-test-json.ps1 -InputPath .agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-repeat3\\repeat-01\\go-test.stdout.jsonl -SummaryPath .agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-repeat3\\repeat-01\\go-test-summary.json -FailOnUnexpectedSkip", + "started_at": "2026-07-11T00:34:44.2124184+00:00", + "finished_at": "2026-07-11T00:34:45.0018863+00:00", + "duration_seconds": 0.789, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-repeat3\\repeat-01\\assert-go-test-json.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-repeat3\\repeat-01\\assert-go-test-json.stderr.log" + }, + { + "name": "repeat-1-targeted-coverage-report", + "executable": "C:\\Program Files\\Go\\bin\\go.exe", + "arguments": [ + "tool", + "cover", + "-func=.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-repeat3\\repeat-01\\coverage.out" + ], + "environment_keys": [], + "command": "C:\\Program Files\\Go\\bin\\go.exe tool cover -func=.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-repeat3\\repeat-01\\coverage.out", + "started_at": "2026-07-11T00:34:45.0071918+00:00", + "finished_at": "2026-07-11T00:34:45.5867022+00:00", + "duration_seconds": 0.58, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-repeat3\\repeat-01\\targeted-coverage.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-repeat3\\repeat-01\\targeted-coverage.stderr.log" + }, + { + "name": "repeat-1-pg-stat-after", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT COALESCE(json_agg(row_to_json(s)), '[]'::json)::text FROM (SELECT pid, usename, datname, state, backend_type, application_name, client_addr::text AS client_addr, wait_event_type, wait_event, query_start FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_8b1d3112a7a95fbb_r1' ORDER BY pid) AS s;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT COALESCE(json_agg(row_to_json(s)), '[]'::json)::text FROM (SELECT pid, usename, datname, state, backend_type, application_name, client_addr::text AS client_addr, wait_event_type, wait_event, query_start FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_8b1d3112a7a95fbb_r1' ORDER BY pid) AS s;", + "started_at": "2026-07-11T00:34:45.5880323+00:00", + "finished_at": "2026-07-11T00:34:46.1217622+00:00", + "duration_seconds": 0.534, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-repeat3\\repeat-01\\pg-stat-activity-after.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-repeat3\\repeat-01\\pg-stat-activity-after.stderr.log" + }, + { + "name": "repeat-1-server-connection-count-after", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT count(*) FROM pg_stat_activity;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT count(*) FROM pg_stat_activity;", + "started_at": "2026-07-11T00:34:46.1242051+00:00", + "finished_at": "2026-07-11T00:34:46.5074688+00:00", + "duration_seconds": 0.383, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-repeat3\\repeat-01\\server-connection-count-after.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-repeat3\\repeat-01\\server-connection-count-after.stderr.log" + }, + { + "name": "repeat-1-connection-count-after", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT count(*) FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_8b1d3112a7a95fbb_r1';" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT count(*) FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_8b1d3112a7a95fbb_r1';", + "started_at": "2026-07-11T00:34:46.5099325+00:00", + "finished_at": "2026-07-11T00:34:46.8773903+00:00", + "duration_seconds": 0.367, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-repeat3\\repeat-01\\connection-count-after.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-repeat3\\repeat-01\\connection-count-after.stderr.log" + }, + { + "name": "repeat-1-cleanup", + "executable": "C:\\Program Files\\PowerShell\\7\\pwsh.exe", + "arguments": [ + "-NoProfile", + "-File", + "D:\\Dev\\engram\\.w\\t007-current-contract\\scripts\\production-gates\\cleanup-db-sessions.ps1", + "-DatabaseName", + "engram_prc_rg_test_8b1d3112a7a95fbb_r1", + "-SchemaName", + "public", + "-ArtifactRoot", + ".agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-repeat3\\repeat-01", + "-RunId", + "t007-maker-focused-repeat3-repeat-1", + "-PostgresContainer", + "engram-prc-postgres" + ], + "environment_keys": [ + "ENGRAM_TEST_ADMIN_DSN" + ], + "command": "C:\\Program Files\\PowerShell\\7\\pwsh.exe -NoProfile -File D:\\Dev\\engram\\.w\\t007-current-contract\\scripts\\production-gates\\cleanup-db-sessions.ps1 -DatabaseName engram_prc_rg_test_8b1d3112a7a95fbb_r1 -SchemaName public -ArtifactRoot .agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-repeat3\\repeat-01 -RunId t007-maker-focused-repeat3-repeat-1 -PostgresContainer engram-prc-postgres", + "started_at": "2026-07-11T00:34:46.8807207+00:00", + "finished_at": "2026-07-11T00:34:49.8810060+00:00", + "duration_seconds": 3.0, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-repeat3\\repeat-01\\cleanup-process.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-repeat3\\repeat-01\\cleanup-process.stderr.log" + }, + { + "name": "repeat-2-create-database", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "CREATE DATABASE \"engram_prc_rg_test_8b1d3112a7a95fbb_r2\" OWNER \"engram\";" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c CREATE DATABASE \"engram_prc_rg_test_8b1d3112a7a95fbb_r2\" OWNER \"engram\";", + "started_at": "2026-07-11T00:34:49.9103369+00:00", + "finished_at": "2026-07-11T00:34:50.4859490+00:00", + "duration_seconds": 0.576, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-repeat3\\repeat-02\\create-database.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-repeat3\\repeat-02\\create-database.stderr.log" + }, + { + "name": "repeat-2-create-pgvector", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "engram_prc_rg_test_8b1d3112a7a95fbb_r2", + "-At", + "-F", + "|", + "-c", + "CREATE EXTENSION IF NOT EXISTS vector WITH SCHEMA public;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d engram_prc_rg_test_8b1d3112a7a95fbb_r2 -At -F | -c CREATE EXTENSION IF NOT EXISTS vector WITH SCHEMA public;", + "started_at": "2026-07-11T00:34:50.5194524+00:00", + "finished_at": "2026-07-11T00:34:50.9694310+00:00", + "duration_seconds": 0.45, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-repeat3\\repeat-02\\create-pgvector.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-repeat3\\repeat-02\\create-pgvector.stderr.log" + }, + { + "name": "repeat-2-database-identity", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "engram_prc_rg_test_8b1d3112a7a95fbb_r2", + "-At", + "-F", + "|", + "-c", + "SELECT json_build_object('database', current_database(), 'schema', current_schema(), 'server_version', current_setting('server_version'), 'user', current_user)::text;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d engram_prc_rg_test_8b1d3112a7a95fbb_r2 -At -F | -c SELECT json_build_object('database', current_database(), 'schema', current_schema(), 'server_version', current_setting('server_version'), 'user', current_user)::text;", + "started_at": "2026-07-11T00:34:50.9714001+00:00", + "finished_at": "2026-07-11T00:34:51.4932802+00:00", + "duration_seconds": 0.522, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-repeat3\\repeat-02\\database-identity.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-repeat3\\repeat-02\\database-identity.stderr.log" + }, + { + "name": "repeat-2-pg-stat-before", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT COALESCE(json_agg(row_to_json(s)), '[]'::json)::text FROM (SELECT pid, usename, datname, state, backend_type, application_name, client_addr::text AS client_addr, wait_event_type, wait_event, query_start FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_8b1d3112a7a95fbb_r2' ORDER BY pid) AS s;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT COALESCE(json_agg(row_to_json(s)), '[]'::json)::text FROM (SELECT pid, usename, datname, state, backend_type, application_name, client_addr::text AS client_addr, wait_event_type, wait_event, query_start FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_8b1d3112a7a95fbb_r2' ORDER BY pid) AS s;", + "started_at": "2026-07-11T00:34:51.4951826+00:00", + "finished_at": "2026-07-11T00:34:52.2986830+00:00", + "duration_seconds": 0.804, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-repeat3\\repeat-02\\pg-stat-activity-before.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-repeat3\\repeat-02\\pg-stat-activity-before.stderr.log" + }, + { + "name": "repeat-2-server-connection-count-before", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT count(*) FROM pg_stat_activity;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT count(*) FROM pg_stat_activity;", + "started_at": "2026-07-11T00:34:52.3008218+00:00", + "finished_at": "2026-07-11T00:34:52.9493046+00:00", + "duration_seconds": 0.648, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-repeat3\\repeat-02\\server-connection-count-before.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-repeat3\\repeat-02\\server-connection-count-before.stderr.log" + }, + { + "name": "repeat-2-connection-count-before", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT count(*) FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_8b1d3112a7a95fbb_r2';" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT count(*) FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_8b1d3112a7a95fbb_r2';", + "started_at": "2026-07-11T00:34:52.9517656+00:00", + "finished_at": "2026-07-11T00:34:53.3993127+00:00", + "duration_seconds": 0.448, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-repeat3\\repeat-02\\connection-count-before.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-repeat3\\repeat-02\\connection-count-before.stderr.log" + }, + { + "name": "repeat-2-go-test", + "executable": "C:\\Program Files\\Go\\bin\\go.exe", + "arguments": [ + "test", + "-json", + "-p", + "1", + "-parallel", + "1", + "-count=1", + "-timeout", + "30m", + "-covermode=atomic", + "-coverprofile=.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-repeat3\\repeat-02\\coverage.out", + "-run", + "^TestEC_F1_TagDerivedBackfill_T007$", + "./internal/mcp" + ], + "environment_keys": [ + "DATABASE_DSN", + "DATABASE_MAX_CONNS", + "ENGRAM_RELEASE_GATE_REPEAT", + "ENGRAM_RELEASE_GATE_RUN_ID", + "ENGRAM_TEST_DSN", + "TEST_DATABASE_DSN" + ], + "command": "C:\\Program Files\\Go\\bin\\go.exe test -json -p 1 -parallel 1 -count=1 -timeout 30m -covermode=atomic -coverprofile=.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-repeat3\\repeat-02\\coverage.out -run ^TestEC_F1_TagDerivedBackfill_T007$ ./internal/mcp", + "started_at": "2026-07-11T00:34:53.4018979+00:00", + "finished_at": "2026-07-11T00:34:59.7879846+00:00", + "duration_seconds": 6.386, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-repeat3\\repeat-02\\go-test.stdout.jsonl", + "stderr": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-repeat3\\repeat-02\\go-test.stderr.log" + }, + { + "name": "repeat-2-assert-go-test-json", + "executable": "C:\\Program Files\\PowerShell\\7\\pwsh.exe", + "arguments": [ + "-NoProfile", + "-File", + "D:\\Dev\\engram\\.w\\t007-current-contract\\scripts\\production-gates\\assert-go-test-json.ps1", + "-InputPath", + ".agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-repeat3\\repeat-02\\go-test.stdout.jsonl", + "-SummaryPath", + ".agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-repeat3\\repeat-02\\go-test-summary.json", + "-FailOnUnexpectedSkip" + ], + "environment_keys": [], + "command": "C:\\Program Files\\PowerShell\\7\\pwsh.exe -NoProfile -File D:\\Dev\\engram\\.w\\t007-current-contract\\scripts\\production-gates\\assert-go-test-json.ps1 -InputPath .agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-repeat3\\repeat-02\\go-test.stdout.jsonl -SummaryPath .agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-repeat3\\repeat-02\\go-test-summary.json -FailOnUnexpectedSkip", + "started_at": "2026-07-11T00:34:59.7902538+00:00", + "finished_at": "2026-07-11T00:35:00.5420016+00:00", + "duration_seconds": 0.752, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-repeat3\\repeat-02\\assert-go-test-json.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-repeat3\\repeat-02\\assert-go-test-json.stderr.log" + }, + { + "name": "repeat-2-targeted-coverage-report", + "executable": "C:\\Program Files\\Go\\bin\\go.exe", + "arguments": [ + "tool", + "cover", + "-func=.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-repeat3\\repeat-02\\coverage.out" + ], + "environment_keys": [], + "command": "C:\\Program Files\\Go\\bin\\go.exe tool cover -func=.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-repeat3\\repeat-02\\coverage.out", + "started_at": "2026-07-11T00:35:00.5440256+00:00", + "finished_at": "2026-07-11T00:35:01.0430676+00:00", + "duration_seconds": 0.499, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-repeat3\\repeat-02\\targeted-coverage.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-repeat3\\repeat-02\\targeted-coverage.stderr.log" + }, + { + "name": "repeat-2-pg-stat-after", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT COALESCE(json_agg(row_to_json(s)), '[]'::json)::text FROM (SELECT pid, usename, datname, state, backend_type, application_name, client_addr::text AS client_addr, wait_event_type, wait_event, query_start FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_8b1d3112a7a95fbb_r2' ORDER BY pid) AS s;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT COALESCE(json_agg(row_to_json(s)), '[]'::json)::text FROM (SELECT pid, usename, datname, state, backend_type, application_name, client_addr::text AS client_addr, wait_event_type, wait_event, query_start FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_8b1d3112a7a95fbb_r2' ORDER BY pid) AS s;", + "started_at": "2026-07-11T00:35:01.0438723+00:00", + "finished_at": "2026-07-11T00:35:01.5350674+00:00", + "duration_seconds": 0.491, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-repeat3\\repeat-02\\pg-stat-activity-after.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-repeat3\\repeat-02\\pg-stat-activity-after.stderr.log" + }, + { + "name": "repeat-2-server-connection-count-after", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT count(*) FROM pg_stat_activity;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT count(*) FROM pg_stat_activity;", + "started_at": "2026-07-11T00:35:01.5367865+00:00", + "finished_at": "2026-07-11T00:35:01.9041666+00:00", + "duration_seconds": 0.367, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-repeat3\\repeat-02\\server-connection-count-after.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-repeat3\\repeat-02\\server-connection-count-after.stderr.log" + }, + { + "name": "repeat-2-connection-count-after", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT count(*) FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_8b1d3112a7a95fbb_r2';" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT count(*) FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_8b1d3112a7a95fbb_r2';", + "started_at": "2026-07-11T00:35:01.9059622+00:00", + "finished_at": "2026-07-11T00:35:02.2710592+00:00", + "duration_seconds": 0.365, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-repeat3\\repeat-02\\connection-count-after.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-repeat3\\repeat-02\\connection-count-after.stderr.log" + }, + { + "name": "repeat-2-cleanup", + "executable": "C:\\Program Files\\PowerShell\\7\\pwsh.exe", + "arguments": [ + "-NoProfile", + "-File", + "D:\\Dev\\engram\\.w\\t007-current-contract\\scripts\\production-gates\\cleanup-db-sessions.ps1", + "-DatabaseName", + "engram_prc_rg_test_8b1d3112a7a95fbb_r2", + "-SchemaName", + "public", + "-ArtifactRoot", + ".agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-repeat3\\repeat-02", + "-RunId", + "t007-maker-focused-repeat3-repeat-2", + "-PostgresContainer", + "engram-prc-postgres" + ], + "environment_keys": [ + "ENGRAM_TEST_ADMIN_DSN" + ], + "command": "C:\\Program Files\\PowerShell\\7\\pwsh.exe -NoProfile -File D:\\Dev\\engram\\.w\\t007-current-contract\\scripts\\production-gates\\cleanup-db-sessions.ps1 -DatabaseName engram_prc_rg_test_8b1d3112a7a95fbb_r2 -SchemaName public -ArtifactRoot .agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-repeat3\\repeat-02 -RunId t007-maker-focused-repeat3-repeat-2 -PostgresContainer engram-prc-postgres", + "started_at": "2026-07-11T00:35:02.2729931+00:00", + "finished_at": "2026-07-11T00:35:05.6065210+00:00", + "duration_seconds": 3.334, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-repeat3\\repeat-02\\cleanup-process.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-repeat3\\repeat-02\\cleanup-process.stderr.log" + }, + { + "name": "repeat-3-create-database", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "CREATE DATABASE \"engram_prc_rg_test_8b1d3112a7a95fbb_r3\" OWNER \"engram\";" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c CREATE DATABASE \"engram_prc_rg_test_8b1d3112a7a95fbb_r3\" OWNER \"engram\";", + "started_at": "2026-07-11T00:35:05.6130440+00:00", + "finished_at": "2026-07-11T00:35:06.0640407+00:00", + "duration_seconds": 0.451, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-repeat3\\repeat-03\\create-database.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-repeat3\\repeat-03\\create-database.stderr.log" + }, + { + "name": "repeat-3-create-pgvector", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "engram_prc_rg_test_8b1d3112a7a95fbb_r3", + "-At", + "-F", + "|", + "-c", + "CREATE EXTENSION IF NOT EXISTS vector WITH SCHEMA public;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d engram_prc_rg_test_8b1d3112a7a95fbb_r3 -At -F | -c CREATE EXTENSION IF NOT EXISTS vector WITH SCHEMA public;", + "started_at": "2026-07-11T00:35:06.0660313+00:00", + "finished_at": "2026-07-11T00:35:06.4624704+00:00", + "duration_seconds": 0.396, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-repeat3\\repeat-03\\create-pgvector.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-repeat3\\repeat-03\\create-pgvector.stderr.log" + }, + { + "name": "repeat-3-database-identity", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "engram_prc_rg_test_8b1d3112a7a95fbb_r3", + "-At", + "-F", + "|", + "-c", + "SELECT json_build_object('database', current_database(), 'schema', current_schema(), 'server_version', current_setting('server_version'), 'user', current_user)::text;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d engram_prc_rg_test_8b1d3112a7a95fbb_r3 -At -F | -c SELECT json_build_object('database', current_database(), 'schema', current_schema(), 'server_version', current_setting('server_version'), 'user', current_user)::text;", + "started_at": "2026-07-11T00:35:06.4644094+00:00", + "finished_at": "2026-07-11T00:35:06.8483007+00:00", + "duration_seconds": 0.384, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-repeat3\\repeat-03\\database-identity.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-repeat3\\repeat-03\\database-identity.stderr.log" + }, + { + "name": "repeat-3-pg-stat-before", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT COALESCE(json_agg(row_to_json(s)), '[]'::json)::text FROM (SELECT pid, usename, datname, state, backend_type, application_name, client_addr::text AS client_addr, wait_event_type, wait_event, query_start FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_8b1d3112a7a95fbb_r3' ORDER BY pid) AS s;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT COALESCE(json_agg(row_to_json(s)), '[]'::json)::text FROM (SELECT pid, usename, datname, state, backend_type, application_name, client_addr::text AS client_addr, wait_event_type, wait_event, query_start FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_8b1d3112a7a95fbb_r3' ORDER BY pid) AS s;", + "started_at": "2026-07-11T00:35:06.8501781+00:00", + "finished_at": "2026-07-11T00:35:07.4392768+00:00", + "duration_seconds": 0.589, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-repeat3\\repeat-03\\pg-stat-activity-before.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-repeat3\\repeat-03\\pg-stat-activity-before.stderr.log" + }, + { + "name": "repeat-3-server-connection-count-before", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT count(*) FROM pg_stat_activity;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT count(*) FROM pg_stat_activity;", + "started_at": "2026-07-11T00:35:07.4409242+00:00", + "finished_at": "2026-07-11T00:35:07.9908512+00:00", + "duration_seconds": 0.55, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-repeat3\\repeat-03\\server-connection-count-before.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-repeat3\\repeat-03\\server-connection-count-before.stderr.log" + }, + { + "name": "repeat-3-connection-count-before", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT count(*) FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_8b1d3112a7a95fbb_r3';" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT count(*) FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_8b1d3112a7a95fbb_r3';", + "started_at": "2026-07-11T00:35:07.9929403+00:00", + "finished_at": "2026-07-11T00:35:08.4371656+00:00", + "duration_seconds": 0.444, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-repeat3\\repeat-03\\connection-count-before.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-repeat3\\repeat-03\\connection-count-before.stderr.log" + }, + { + "name": "repeat-3-go-test", + "executable": "C:\\Program Files\\Go\\bin\\go.exe", + "arguments": [ + "test", + "-json", + "-p", + "1", + "-parallel", + "1", + "-count=1", + "-timeout", + "30m", + "-covermode=atomic", + "-coverprofile=.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-repeat3\\repeat-03\\coverage.out", + "-run", + "^TestEC_F1_TagDerivedBackfill_T007$", + "./internal/mcp" + ], + "environment_keys": [ + "DATABASE_DSN", + "DATABASE_MAX_CONNS", + "ENGRAM_RELEASE_GATE_REPEAT", + "ENGRAM_RELEASE_GATE_RUN_ID", + "ENGRAM_TEST_DSN", + "TEST_DATABASE_DSN" + ], + "command": "C:\\Program Files\\Go\\bin\\go.exe test -json -p 1 -parallel 1 -count=1 -timeout 30m -covermode=atomic -coverprofile=.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-repeat3\\repeat-03\\coverage.out -run ^TestEC_F1_TagDerivedBackfill_T007$ ./internal/mcp", + "started_at": "2026-07-11T00:35:08.4392820+00:00", + "finished_at": "2026-07-11T00:35:15.1623672+00:00", + "duration_seconds": 6.723, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-repeat3\\repeat-03\\go-test.stdout.jsonl", + "stderr": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-repeat3\\repeat-03\\go-test.stderr.log" + }, + { + "name": "repeat-3-assert-go-test-json", + "executable": "C:\\Program Files\\PowerShell\\7\\pwsh.exe", + "arguments": [ + "-NoProfile", + "-File", + "D:\\Dev\\engram\\.w\\t007-current-contract\\scripts\\production-gates\\assert-go-test-json.ps1", + "-InputPath", + ".agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-repeat3\\repeat-03\\go-test.stdout.jsonl", + "-SummaryPath", + ".agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-repeat3\\repeat-03\\go-test-summary.json", + "-FailOnUnexpectedSkip" + ], + "environment_keys": [], + "command": "C:\\Program Files\\PowerShell\\7\\pwsh.exe -NoProfile -File D:\\Dev\\engram\\.w\\t007-current-contract\\scripts\\production-gates\\assert-go-test-json.ps1 -InputPath .agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-repeat3\\repeat-03\\go-test.stdout.jsonl -SummaryPath .agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-repeat3\\repeat-03\\go-test-summary.json -FailOnUnexpectedSkip", + "started_at": "2026-07-11T00:35:15.1648710+00:00", + "finished_at": "2026-07-11T00:35:16.1227720+00:00", + "duration_seconds": 0.958, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-repeat3\\repeat-03\\assert-go-test-json.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-repeat3\\repeat-03\\assert-go-test-json.stderr.log" + }, + { + "name": "repeat-3-targeted-coverage-report", + "executable": "C:\\Program Files\\Go\\bin\\go.exe", + "arguments": [ + "tool", + "cover", + "-func=.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-repeat3\\repeat-03\\coverage.out" + ], + "environment_keys": [], + "command": "C:\\Program Files\\Go\\bin\\go.exe tool cover -func=.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-repeat3\\repeat-03\\coverage.out", + "started_at": "2026-07-11T00:35:16.1246680+00:00", + "finished_at": "2026-07-11T00:35:16.6557539+00:00", + "duration_seconds": 0.531, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-repeat3\\repeat-03\\targeted-coverage.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-repeat3\\repeat-03\\targeted-coverage.stderr.log" + }, + { + "name": "repeat-3-pg-stat-after", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT COALESCE(json_agg(row_to_json(s)), '[]'::json)::text FROM (SELECT pid, usename, datname, state, backend_type, application_name, client_addr::text AS client_addr, wait_event_type, wait_event, query_start FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_8b1d3112a7a95fbb_r3' ORDER BY pid) AS s;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT COALESCE(json_agg(row_to_json(s)), '[]'::json)::text FROM (SELECT pid, usename, datname, state, backend_type, application_name, client_addr::text AS client_addr, wait_event_type, wait_event, query_start FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_8b1d3112a7a95fbb_r3' ORDER BY pid) AS s;", + "started_at": "2026-07-11T00:35:16.6563431+00:00", + "finished_at": "2026-07-11T00:35:17.0736205+00:00", + "duration_seconds": 0.417, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-repeat3\\repeat-03\\pg-stat-activity-after.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-repeat3\\repeat-03\\pg-stat-activity-after.stderr.log" + }, + { + "name": "repeat-3-server-connection-count-after", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT count(*) FROM pg_stat_activity;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT count(*) FROM pg_stat_activity;", + "started_at": "2026-07-11T00:35:17.0758066+00:00", + "finished_at": "2026-07-11T00:35:17.4748962+00:00", + "duration_seconds": 0.399, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-repeat3\\repeat-03\\server-connection-count-after.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-repeat3\\repeat-03\\server-connection-count-after.stderr.log" + }, + { + "name": "repeat-3-connection-count-after", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT count(*) FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_8b1d3112a7a95fbb_r3';" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT count(*) FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_8b1d3112a7a95fbb_r3';", + "started_at": "2026-07-11T00:35:17.4766420+00:00", + "finished_at": "2026-07-11T00:35:17.8973661+00:00", + "duration_seconds": 0.421, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-repeat3\\repeat-03\\connection-count-after.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-repeat3\\repeat-03\\connection-count-after.stderr.log" + }, + { + "name": "repeat-3-cleanup", + "executable": "C:\\Program Files\\PowerShell\\7\\pwsh.exe", + "arguments": [ + "-NoProfile", + "-File", + "D:\\Dev\\engram\\.w\\t007-current-contract\\scripts\\production-gates\\cleanup-db-sessions.ps1", + "-DatabaseName", + "engram_prc_rg_test_8b1d3112a7a95fbb_r3", + "-SchemaName", + "public", + "-ArtifactRoot", + ".agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-repeat3\\repeat-03", + "-RunId", + "t007-maker-focused-repeat3-repeat-3", + "-PostgresContainer", + "engram-prc-postgres" + ], + "environment_keys": [ + "ENGRAM_TEST_ADMIN_DSN" + ], + "command": "C:\\Program Files\\PowerShell\\7\\pwsh.exe -NoProfile -File D:\\Dev\\engram\\.w\\t007-current-contract\\scripts\\production-gates\\cleanup-db-sessions.ps1 -DatabaseName engram_prc_rg_test_8b1d3112a7a95fbb_r3 -SchemaName public -ArtifactRoot .agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-repeat3\\repeat-03 -RunId t007-maker-focused-repeat3-repeat-3 -PostgresContainer engram-prc-postgres", + "started_at": "2026-07-11T00:35:17.8992641+00:00", + "finished_at": "2026-07-11T00:35:21.4111369+00:00", + "duration_seconds": 3.512, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-repeat3\\repeat-03\\cleanup-process.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-repeat3\\repeat-03\\cleanup-process.stderr.log" + } +] diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/environment.json b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/environment.json new file mode 100644 index 00000000..0638aee1 --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/environment.json @@ -0,0 +1,52 @@ +{ + "schema_version": 1, + "run_id": "t007-maker-focused-repeat3", + "timestamp": "2026-07-11T00:34:31.5901586+00:00", + "go_version": "go version go1.25.11 windows/amd64", + "postgres": { + "declared_image": "pgvector/pgvector:pg17", + "container": { + "name": "/engram-prc-postgres", + "configured_image": "pgvector/pgvector:pg17", + "image_id": "sha256:feb68f4f15446397d8cac7f4fe48fe4586de83160d1fc48b46283312d1a33966", + "running": true + }, + "server": { + "server_version": "17.10 (Debian 17.10-1.pgdg12+1)", + "server_version_num": "170010", + "version": "PostgreSQL 17.10 (Debian 17.10-1.pgdg12+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 12.2.0-14+deb12u1) 12.2.0, 64-bit", + "max_connections": "100", + "superuser_reserved_connections": "3", + "reserved_connections": "0", + "current_connections": "6", + "database": "postgres", + "schema": "public", + "user": "engram" + }, + "admin_dsn": "postgres://engram:REDACTED@127.0.0.1:55432/postgres?sslmode=disable" + }, + "packages": [ + "./internal/mcp" + ], + "run_pattern": "^TestEC_F1_TagDerivedBackfill_T007$", + "repeat": 3, + "fail_on_unexpected_skip": true, + "allowed_skip_identities": [], + "coverage_policy": "Targeted", + "connection_budget": 20, + "race": false, + "require_session_start_execution": false, + "required_session_start_test_count": 12, + "sequential_execution": { + "go_package_parallelism": 1, + "go_test_parallelism": 1, + "database_max_connections": 20 + }, + "govulncheck_policy": { + "authoritative": [ + "source scan with tests", + "unstripped binary scan" + ], + "non_authoritative": "stripped binary scan (module-level fallback when symbols are absent)" + } +} diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/go-version.stderr.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/go-version.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/go-version.stdout.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/go-version.stdout.log new file mode 100644 index 00000000..a857be3f --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/go-version.stdout.log @@ -0,0 +1 @@ +go version go1.25.11 windows/amd64 diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/postgres-container-identity.stderr.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/postgres-container-identity.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/postgres-container-identity.stdout.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/postgres-container-identity.stdout.log new file mode 100644 index 00000000..c110d492 --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/postgres-container-identity.stdout.log @@ -0,0 +1 @@ +/engram-prc-postgres|pgvector/pgvector:pg17|sha256:feb68f4f15446397d8cac7f4fe48fe4586de83160d1fc48b46283312d1a33966|true diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/postgres-server-identity.stderr.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/postgres-server-identity.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/postgres-server-identity.stdout.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/postgres-server-identity.stdout.log new file mode 100644 index 00000000..2e33d56e --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/postgres-server-identity.stdout.log @@ -0,0 +1 @@ +{"server_version" : "17.10 (Debian 17.10-1.pgdg12+1)", "server_version_num" : "170010", "version" : "PostgreSQL 17.10 (Debian 17.10-1.pgdg12+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 12.2.0-14+deb12u1) 12.2.0, 64-bit", "max_connections" : "100", "superuser_reserved_connections" : "3", "reserved_connections" : "0", "current_connections" : "6", "database" : "postgres", "schema" : "public", "user" : "engram"} diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-01/assert-go-test-json.stderr.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-01/assert-go-test-json.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-01/assert-go-test-json.stdout.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-01/assert-go-test-json.stdout.log new file mode 100644 index 00000000..c33f51d8 --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-01/assert-go-test-json.stdout.log @@ -0,0 +1,2 @@ +go test JSON verdict=PASS packages=1 tests=1 passed=1 failed=0 skipped=0 unexpected_skips=0 malformed=0 +summary=D:\Dev\engram\.w\t007-current-contract\.agent\reports\evidence\production-ready\t007-compat\t007-maker-focused-repeat3\repeat-01\go-test-summary.json diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-01/cleanup-process.stderr.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-01/cleanup-process.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-01/cleanup-process.stdout.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-01/cleanup-process.stdout.log new file mode 100644 index 00000000..23acaa6d --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-01/cleanup-process.stdout.log @@ -0,0 +1,2 @@ +cleanup verdict=PASS database=engram_prc_rg_test_8b1d3112a7a95fbb_r1 schema=public terminated_sessions=0 remaining_database_count=0 +summary=D:\Dev\engram\.w\t007-current-contract\.agent\reports\evidence\production-ready\t007-compat\t007-maker-focused-repeat3\repeat-01\cleanup\cleanup.json diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-01/cleanup/cleanup.json b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-01/cleanup/cleanup.json new file mode 100644 index 00000000..ec89c84c --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-01/cleanup/cleanup.json @@ -0,0 +1,170 @@ +{ + "schema_version": 1, + "run_id": "t007-maker-focused-repeat3-repeat-1", + "timestamp": "2026-07-11T00:34:49.7815467+00:00", + "verdict": "PASS", + "database": "engram_prc_rg_test_8b1d3112a7a95fbb_r1", + "schema": "public", + "database_schema_identity": "engram_prc_rg_test_8b1d3112a7a95fbb_r1.public", + "admin_dsn": "postgres://engram:REDACTED@127.0.0.1:55432/postgres?sslmode=disable", + "postgres_container": "engram-prc-postgres", + "cleanup_status": "PASS", + "cleanup_attempted": true, + "database_existed_before": true, + "absence_verified": true, + "terminated_sessions": 0, + "remaining_database_count": 0, + "commands": [ + { + "name": "database-exists-before-cleanup", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT count(*) FROM pg_database WHERE datname = 'engram_prc_rg_test_8b1d3112a7a95fbb_r1';" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT count(*) FROM pg_database WHERE datname = 'engram_prc_rg_test_8b1d3112a7a95fbb_r1';", + "started_at": "2026-07-11T00:34:47.4837683+00:00", + "finished_at": "2026-07-11T00:34:47.9008788+00:00", + "duration_seconds": 0.417, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-repeat3\\repeat-01\\cleanup\\database-exists-before.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-repeat3\\repeat-01\\cleanup\\database-exists-before.stderr.log" + }, + { + "name": "pg-stat-activity-before-cleanup", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT COALESCE(json_agg(row_to_json(s)), '[]'::json)::text FROM (SELECT pid, usename, datname, state, backend_type, application_name, client_addr::text AS client_addr, wait_event_type, wait_event, query_start FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_8b1d3112a7a95fbb_r1' ORDER BY pid) AS s;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT COALESCE(json_agg(row_to_json(s)), '[]'::json)::text FROM (SELECT pid, usename, datname, state, backend_type, application_name, client_addr::text AS client_addr, wait_event_type, wait_event, query_start FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_8b1d3112a7a95fbb_r1' ORDER BY pid) AS s;", + "started_at": "2026-07-11T00:34:47.9752325+00:00", + "finished_at": "2026-07-11T00:34:48.4765183+00:00", + "duration_seconds": 0.501, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-repeat3\\repeat-01\\cleanup\\pg-stat-activity-before.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-repeat3\\repeat-01\\cleanup\\pg-stat-activity-before.stderr.log" + }, + { + "name": "terminate-database-sessions", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT COALESCE(json_agg(row_to_json(s)), '[]'::json)::text FROM (SELECT pid, pg_terminate_backend(pid) AS terminated FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_8b1d3112a7a95fbb_r1' AND pid <> pg_backend_pid() ORDER BY pid) AS s;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT COALESCE(json_agg(row_to_json(s)), '[]'::json)::text FROM (SELECT pid, pg_terminate_backend(pid) AS terminated FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_8b1d3112a7a95fbb_r1' AND pid <> pg_backend_pid() ORDER BY pid) AS s;", + "started_at": "2026-07-11T00:34:48.4818993+00:00", + "finished_at": "2026-07-11T00:34:48.8963674+00:00", + "duration_seconds": 0.414, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-repeat3\\repeat-01\\cleanup\\terminate-sessions.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-repeat3\\repeat-01\\cleanup\\terminate-sessions.stderr.log" + }, + { + "name": "drop-fresh-database", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "DROP DATABASE IF EXISTS \"engram_prc_rg_test_8b1d3112a7a95fbb_r1\" WITH (FORCE);" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c DROP DATABASE IF EXISTS \"engram_prc_rg_test_8b1d3112a7a95fbb_r1\" WITH (FORCE);", + "started_at": "2026-07-11T00:34:48.9068282+00:00", + "finished_at": "2026-07-11T00:34:49.3574663+00:00", + "duration_seconds": 0.451, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-repeat3\\repeat-01\\cleanup\\drop-database.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-repeat3\\repeat-01\\cleanup\\drop-database.stderr.log" + }, + { + "name": "verify-database-absent", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT count(*) FROM pg_database WHERE datname = 'engram_prc_rg_test_8b1d3112a7a95fbb_r1';" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT count(*) FROM pg_database WHERE datname = 'engram_prc_rg_test_8b1d3112a7a95fbb_r1';", + "started_at": "2026-07-11T00:34:49.3621333+00:00", + "finished_at": "2026-07-11T00:34:49.7720157+00:00", + "duration_seconds": 0.41, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-repeat3\\repeat-01\\cleanup\\verify-database-absent.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-repeat3\\repeat-01\\cleanup\\verify-database-absent.stderr.log" + } + ], + "errors": [] +} diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-01/cleanup/database-exists-before.stderr.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-01/cleanup/database-exists-before.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-01/cleanup/database-exists-before.stdout.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-01/cleanup/database-exists-before.stdout.log new file mode 100644 index 00000000..d00491fd --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-01/cleanup/database-exists-before.stdout.log @@ -0,0 +1 @@ +1 diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-01/cleanup/drop-database.stderr.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-01/cleanup/drop-database.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-01/cleanup/drop-database.stdout.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-01/cleanup/drop-database.stdout.log new file mode 100644 index 00000000..ca12dce0 --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-01/cleanup/drop-database.stdout.log @@ -0,0 +1 @@ +DROP DATABASE diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-01/cleanup/pg-stat-activity-before.stderr.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-01/cleanup/pg-stat-activity-before.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-01/cleanup/pg-stat-activity-before.stdout.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-01/cleanup/pg-stat-activity-before.stdout.log new file mode 100644 index 00000000..fe51488c --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-01/cleanup/pg-stat-activity-before.stdout.log @@ -0,0 +1 @@ +[] diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-01/cleanup/terminate-sessions.stderr.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-01/cleanup/terminate-sessions.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-01/cleanup/terminate-sessions.stdout.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-01/cleanup/terminate-sessions.stdout.log new file mode 100644 index 00000000..fe51488c --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-01/cleanup/terminate-sessions.stdout.log @@ -0,0 +1 @@ +[] diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-01/cleanup/verify-database-absent.stderr.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-01/cleanup/verify-database-absent.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-01/cleanup/verify-database-absent.stdout.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-01/cleanup/verify-database-absent.stdout.log new file mode 100644 index 00000000..573541ac --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-01/cleanup/verify-database-absent.stdout.log @@ -0,0 +1 @@ +0 diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-01/connection-count-after.stderr.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-01/connection-count-after.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-01/connection-count-after.stdout.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-01/connection-count-after.stdout.log new file mode 100644 index 00000000..573541ac --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-01/connection-count-after.stdout.log @@ -0,0 +1 @@ +0 diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-01/connection-count-before.stderr.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-01/connection-count-before.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-01/connection-count-before.stdout.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-01/connection-count-before.stdout.log new file mode 100644 index 00000000..573541ac --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-01/connection-count-before.stdout.log @@ -0,0 +1 @@ +0 diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-01/coverage.out b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-01/coverage.out new file mode 100644 index 00000000..52335d8a --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-01/coverage.out @@ -0,0 +1,3472 @@ +mode: atomic +github.com/thebtf/engram/internal/mcp/audit_helpers.go:33.53,34.30 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:34.30,36.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:37.2,37.25 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:37.25,39.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:40.2,40.12 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:44.28,46.2 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:52.83,53.12 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:53.12,54.16 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:54.16,55.32 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:55.32,61.5 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:63.3,65.33 3 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:65.33,71.4 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:77.54,78.14 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:78.14,80.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:81.2,82.16 2 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:82.16,85.3 2 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:86.2,87.13 2 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:92.91,93.23 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:93.23,95.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:96.2,97.15 2 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:97.15,99.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:100.2,105.65 4 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:105.65,113.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:117.95,118.23 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:118.23,120.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:121.2,122.15 2 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:122.15,124.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:125.2,129.65 5 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:129.65,138.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:142.87,143.23 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:143.23,145.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:146.2,147.15 2 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:147.15,149.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:150.2,153.65 4 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:153.65,161.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:166.96,167.23 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:167.23,169.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:170.2,171.15 2 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:171.15,173.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:174.2,177.63 4 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:177.63,185.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:189.97,190.23 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:190.23,192.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:193.2,194.15 2 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:194.15,196.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:197.2,200.68 4 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:200.68,208.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:30.62,31.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:31.20,33.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:34.2,35.49 2 0 +github.com/thebtf/engram/internal/mcp/coerce.go:35.49,37.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:38.2,38.14 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:38.14,40.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:41.2,41.15 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:46.52,47.14 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:47.14,49.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:50.2,50.23 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:51.14,52.11 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:53.19,54.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:55.15,56.45 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:57.12,58.31 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:59.10,60.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:67.43,68.14 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:68.14,70.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:71.2,71.23 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:72.15,73.23 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:74.19,75.38 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:75.38,77.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:78.3,78.40 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:78.40,80.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:81.3,81.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:82.14,83.56 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:83.56,85.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:86.3,86.54 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:86.54,88.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:89.3,89.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:90.10,91.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:97.49,98.14 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:98.14,100.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:101.2,101.23 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:102.15,103.18 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:104.19,105.38 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:105.38,107.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:108.3,108.40 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:108.40,110.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:111.3,111.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:112.14,113.56 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:113.56,115.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:116.3,116.54 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:116.54,118.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:119.3,119.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:120.10,121.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:127.55,128.14 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:128.14,130.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:131.2,131.23 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:132.15,133.11 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:134.19,135.40 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:135.40,137.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:138.3,138.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:139.14,140.54 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:140.54,142.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:143.3,143.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:144.10,145.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:151.46,152.14 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:152.14,154.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:155.2,155.23 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:156.12,157.11 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:158.14,159.54 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:159.54,161.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:162.3,162.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:163.15,164.16 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:165.19,166.40 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:166.40,168.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:169.3,169.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:170.10,171.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:177.40,178.14 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:178.14,180.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:181.2,181.23 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:182.13,184.26 2 0 +github.com/thebtf/engram/internal/mcp/coerce.go:184.26,185.36 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:185.36,187.5 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:189.3,189.16 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:190.16,191.11 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:192.14,193.14 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:193.14,195.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:196.3,196.13 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:197.10,198.13 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:204.38,205.14 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:205.14,207.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:208.2,209.9 2 0 +github.com/thebtf/engram/internal/mcp/coerce.go:209.9,211.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:212.2,213.27 2 0 +github.com/thebtf/engram/internal/mcp/coerce.go:213.27,214.42 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:214.42,216.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:218.2,218.15 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:222.32,223.39 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:223.39,225.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:226.2,226.30 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:226.30,228.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:229.2,229.30 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:229.30,231.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:232.2,232.15 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:236.35,237.28 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:237.28,239.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:240.2,240.28 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:240.28,242.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:243.2,243.15 1 0 +github.com/thebtf/engram/internal/mcp/context.go:17.55,19.2 1 0 +github.com/thebtf/engram/internal/mcp/context.go:22.78,24.2 1 0 +github.com/thebtf/engram/internal/mcp/context.go:29.78,31.2 1 0 +github.com/thebtf/engram/internal/mcp/context.go:35.53,38.2 2 0 +github.com/thebtf/engram/internal/mcp/context.go:41.80,43.2 1 0 +github.com/thebtf/engram/internal/mcp/context.go:48.80,50.2 1 0 +github.com/thebtf/engram/internal/mcp/context.go:54.53,57.2 2 0 +github.com/thebtf/engram/internal/mcp/context.go:61.51,62.43 1 0 +github.com/thebtf/engram/internal/mcp/context.go:62.43,64.3 1 0 +github.com/thebtf/engram/internal/mcp/context.go:65.2,65.16 1 0 +github.com/thebtf/engram/internal/mcp/health.go:22.32,26.2 3 0 +github.com/thebtf/engram/internal/mcp/health.go:29.37,33.2 3 0 +github.com/thebtf/engram/internal/mcp/health.go:36.35,40.2 3 0 +github.com/thebtf/engram/internal/mcp/health.go:42.44,45.25 3 0 +github.com/thebtf/engram/internal/mcp/health.go:45.25,47.50 1 0 +github.com/thebtf/engram/internal/mcp/health.go:47.50,50.4 2 0 +github.com/thebtf/engram/internal/mcp/health.go:55.74,60.16 5 0 +github.com/thebtf/engram/internal/mcp/health.go:60.16,62.3 1 0 +github.com/thebtf/engram/internal/mcp/health.go:63.2,71.4 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:28.42,29.65 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:29.65,32.3 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:33.2,33.40 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:33.40,35.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:36.2,36.14 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:39.120,40.69 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:40.69,42.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:43.2,44.19 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:44.19,46.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:47.2,48.17 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:48.17,50.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:51.2,52.59 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:52.59,54.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:55.2,56.20 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:56.20,58.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:59.2,60.17 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:60.17,62.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:63.2,64.21 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:64.21,66.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:67.2,68.22 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:68.22,70.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:71.2,72.23 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:72.23,74.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:76.2,98.19 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:98.19,100.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:101.2,101.66 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:104.52,106.29 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:106.29,108.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:109.2,110.46 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:113.113,123.27 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:123.27,125.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:126.2,127.16 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:127.16,129.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:130.2,130.25 1 0 +github.com/thebtf/engram/internal/mcp/server.go:127.44,138.2 1 1 +github.com/thebtf/engram/internal/mcp/server.go:141.64,143.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:146.78,148.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:151.53,153.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:156.55,158.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:161.58,163.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:166.62,168.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:171.50,173.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:176.78,178.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:181.74,183.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:186.71,189.2 2 0 +github.com/thebtf/engram/internal/mcp/server.go:191.85,193.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:195.61,197.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:199.49,201.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:204.54,206.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:211.53,213.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:216.53,218.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:222.61,224.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:228.59,230.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:234.51,236.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:240.52,242.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:246.55,248.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:252.82,254.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:260.70,262.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:269.68,271.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:274.87,277.2 2 0 +github.com/thebtf/engram/internal/mcp/server.go:282.60,284.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:290.45,292.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:297.77,299.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:303.37,313.38 3 0 +github.com/thebtf/engram/internal/mcp/server.go:313.38,315.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:316.2,317.9 2 0 +github.com/thebtf/engram/internal/mcp/server.go:317.9,319.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:320.2,321.9 2 0 +github.com/thebtf/engram/internal/mcp/server.go:321.9,323.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:324.2,325.9 2 0 +github.com/thebtf/engram/internal/mcp/server.go:325.9,327.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:328.2,328.14 1 0 +github.com/thebtf/engram/internal/mcp/server.go:332.35,334.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:383.49,387.12 3 0 +github.com/thebtf/engram/internal/mcp/server.go:387.12,388.22 1 0 +github.com/thebtf/engram/internal/mcp/server.go:388.22,389.11 1 0 +github.com/thebtf/engram/internal/mcp/server.go:390.22,392.11 2 0 +github.com/thebtf/engram/internal/mcp/server.go:393.12,393.12 0 0 +github.com/thebtf/engram/internal/mcp/server.go:396.4,397.18 2 0 +github.com/thebtf/engram/internal/mcp/server.go:397.18,398.13 1 0 +github.com/thebtf/engram/internal/mcp/server.go:401.4,402.61 2 0 +github.com/thebtf/engram/internal/mcp/server.go:402.61,404.13 2 0 +github.com/thebtf/engram/internal/mcp/server.go:407.4,407.55 1 0 +github.com/thebtf/engram/internal/mcp/server.go:407.55,409.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:411.3,411.28 1 0 +github.com/thebtf/engram/internal/mcp/server.go:414.2,414.9 1 0 +github.com/thebtf/engram/internal/mcp/server.go:415.20,416.19 1 0 +github.com/thebtf/engram/internal/mcp/server.go:417.25,418.17 1 0 +github.com/thebtf/engram/internal/mcp/server.go:418.17,420.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:421.3,421.13 1 0 +github.com/thebtf/engram/internal/mcp/server.go:427.77,428.19 1 0 +github.com/thebtf/engram/internal/mcp/server.go:428.19,431.3 2 0 +github.com/thebtf/engram/internal/mcp/server.go:433.2,433.20 1 0 +github.com/thebtf/engram/internal/mcp/server.go:434.20,435.33 1 0 +github.com/thebtf/engram/internal/mcp/server.go:436.20,437.32 1 0 +github.com/thebtf/engram/internal/mcp/server.go:438.20,439.37 1 0 +github.com/thebtf/engram/internal/mcp/server.go:443.24,444.93 1 0 +github.com/thebtf/engram/internal/mcp/server.go:445.34,446.101 1 0 +github.com/thebtf/engram/internal/mcp/server.go:447.22,448.91 1 0 +github.com/thebtf/engram/internal/mcp/server.go:449.29,450.120 1 0 +github.com/thebtf/engram/internal/mcp/server.go:451.10,456.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:461.51,462.20 1 0 +github.com/thebtf/engram/internal/mcp/server.go:463.50,464.70 1 0 +github.com/thebtf/engram/internal/mcp/server.go:465.46,466.79 1 0 +github.com/thebtf/engram/internal/mcp/server.go:467.10,468.80 1 0 +github.com/thebtf/engram/internal/mcp/server.go:473.59,485.63 2 0 +github.com/thebtf/engram/internal/mcp/server.go:485.63,487.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:489.2,493.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:496.45,503.33 3 0 +github.com/thebtf/engram/internal/mcp/server.go:503.33,505.57 2 0 +github.com/thebtf/engram/internal/mcp/server.go:505.57,506.76 1 0 +github.com/thebtf/engram/internal/mcp/server.go:506.76,507.13 1 0 +github.com/thebtf/engram/internal/mcp/server.go:509.4,509.18 1 0 +github.com/thebtf/engram/internal/mcp/server.go:509.18,511.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:511.10,513.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:514.4,518.11 5 0 +github.com/thebtf/engram/internal/mcp/server.go:522.2,522.19 1 0 +github.com/thebtf/engram/internal/mcp/server.go:660.29,683.21 2 0 +github.com/thebtf/engram/internal/mcp/server.go:683.21,689.3 5 0 +github.com/thebtf/engram/internal/mcp/server.go:690.2,699.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:712.30,765.49 3 0 +github.com/thebtf/engram/internal/mcp/server.go:765.49,789.3 5 0 +github.com/thebtf/engram/internal/mcp/server.go:790.2,799.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:805.40,936.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:942.58,1048.35 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1048.35,1077.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1080.2,1080.33 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1080.33,1090.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1093.2,1093.26 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1093.26,1123.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1124.2,1124.80 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1124.80,1126.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1127.2,1127.55 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1127.55,1129.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1130.2,1130.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1130.38,1132.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1134.2,1134.25 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1134.25,1136.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1138.2,1138.33 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1138.33,1140.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1141.2,1141.69 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1141.69,1143.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1144.2,1144.75 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1144.75,1146.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1148.2,1148.27 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1148.27,1165.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1168.2,1168.76 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1168.76,1191.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1195.2,1195.48 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1195.48,1197.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1201.2,1201.47 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1201.47,1203.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1205.2,1205.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1205.38,1207.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1212.2,1212.21 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1212.21,1214.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1228.2,1228.51 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1228.51,1230.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1233.2,1233.56 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1233.56,1235.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1238.2,1238.71 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1238.71,1298.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1302.2,1302.104 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1302.104,1321.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1324.2,1324.72 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1324.72,1333.154 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1333.154,1334.26 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1334.26,1336.8 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1337.7,1337.16 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1338.35,1340.26 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1340.26,1342.8 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1343.7,1343.18 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1371.2,1371.26 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1371.26,1390.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1393.2,1393.28 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1393.28,1443.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1446.2,1446.28 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1446.28,1478.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1481.2,1481.37 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1481.37,1561.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1564.2,1568.23 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1568.23,1570.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1572.2,1588.57 3 0 +github.com/thebtf/engram/internal/mcp/server.go:1588.57,1591.29 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1591.29,1593.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1594.3,1594.27 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1594.27,1595.29 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1595.29,1597.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1601.2,1607.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1612.79,1614.60 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1614.60,1620.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1622.2,1623.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1623.16,1631.3 3 0 +github.com/thebtf/engram/internal/mcp/server.go:1633.2,1641.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1644.69,1645.34 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1645.34,1647.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1648.2,1649.22 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1649.22,1651.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1652.2,1652.37 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1656.99,1658.14 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1659.16,1660.35 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1661.15,1662.46 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1663.18,1664.49 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1665.15,1666.46 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1667.18,1668.49 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1669.14,1670.45 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1671.15,1672.34 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1676.2,1676.14 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1677.35,1678.52 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1679.26,1680.37 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1681.20,1682.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1683.20,1684.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1685.16,1686.35 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1687.29,1688.40 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1689.33,1690.50 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1691.25,1692.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1693.23,1694.41 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1696.26,1697.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1698.24,1699.42 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1700.22,1701.40 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1702.25,1703.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1704.27,1705.45 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1706.25,1707.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1709.30,1710.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1711.28,1712.42 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1713.17,1714.40 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1715.20,1716.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1717.20,1718.45 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1719.20,1720.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1722.20,1723.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1724.18,1725.36 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1726.20,1727.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1728.18,1729.36 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1730.21,1731.39 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1732.21,1733.39 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1734.26,1735.44 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1736.25,1737.34 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1738.26,1739.44 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1740.24,1741.42 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1742.26,1743.44 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1744.27,1745.45 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1746.22,1747.40 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1748.19,1749.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1750.15,1751.34 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1752.16,1753.35 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1755.21,1756.44 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1757.19,1758.42 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1759.20,1760.44 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1761.22,1762.45 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1763.22,1764.40 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1765.23,1766.41 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1767.20,1768.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1769.32,1770.49 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1771.19,1772.37 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1773.19,1774.37 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1775.33,1776.50 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1777.35,1778.52 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1779.24,1780.42 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1781.32,1782.49 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1783.28,1784.46 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1785.21,1786.39 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1787.34,1788.51 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1789.25,1790.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1791.29,1792.46 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1793.26,1794.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1795.27,1796.44 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1798.25,1799.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1800.23,1801.41 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1802.27,1803.45 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1804.26,1805.44 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1806.29,1807.47 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1809.29,1810.46 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1811.27,1812.44 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1813.30,1814.47 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1815.38,1816.54 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1817.36,1818.52 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1820.24,1821.42 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1822.27,1823.45 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1824.22,1825.40 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1826.32,1827.49 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1828.32,1829.49 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1830.31,1831.48 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1832.35,1833.52 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1834.36,1835.53 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1836.36,1837.53 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1838.38,1839.54 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1840.34,1841.51 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1843.22,1844.40 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1845.21,1846.39 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1847.24,1848.42 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1850.25,1851.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1852.25,1853.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1859.2,1859.14 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1860.22,1863.131 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1866.51,1867.123 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1868.10,1869.50 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1874.47,1876.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1876.16,1879.3 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1880.2,1880.35 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1884.72,1890.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1896.105,1898.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1898.16,1900.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1902.2,1903.17 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1903.17,1905.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1907.2,1908.17 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1908.17,1910.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1912.2,1918.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1918.16,1920.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1921.2,1921.25 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1927.76,1933.15 3 0 +github.com/thebtf/engram/internal/mcp/server.go:1933.15,1936.17 3 0 +github.com/thebtf/engram/internal/mcp/server.go:1936.17,1938.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1939.3,1939.26 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1943.2,1950.36 3 0 +github.com/thebtf/engram/internal/mcp/server.go:1950.36,1952.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1952.8,1955.29 3 0 +github.com/thebtf/engram/internal/mcp/server.go:1955.29,1958.4 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1959.3,1962.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1966.2,1966.20 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1966.20,1977.20 6 0 +github.com/thebtf/engram/internal/mcp/server.go:1977.20,1979.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1980.3,1980.20 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1980.20,1982.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1985.3,1985.37 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1985.37,1987.30 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1987.30,1988.16 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1988.16,1990.6 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1990.11,1992.6 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1994.4,1995.56 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1995.56,1997.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1998.4,2003.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2008.2,2008.29 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2008.29,2009.63 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2009.63,2011.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2011.9,2013.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2021.2,2021.29 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2021.29,2029.38 3 0 +github.com/thebtf/engram/internal/mcp/server.go:2029.38,2031.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2031.9,2033.31 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2033.31,2035.30 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2035.30,2037.6 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2039.4,2042.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2046.2,2047.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2047.16,2049.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2050.2,2050.25 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2055.57,2056.33 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2056.33,2058.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2059.2,2060.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2060.16,2062.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2063.2,2064.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2064.16,2066.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2067.2,2067.23 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2071.79,2105.15 6 0 +github.com/thebtf/engram/internal/mcp/server.go:2105.15,2107.17 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2107.17,2111.4 3 0 +github.com/thebtf/engram/internal/mcp/server.go:2111.9,2112.17 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2112.17,2114.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2115.4,2117.26 3 0 +github.com/thebtf/engram/internal/mcp/server.go:2117.26,2119.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2119.10,2121.29 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2121.29,2123.6 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2125.4,2129.25 5 0 +github.com/thebtf/engram/internal/mcp/server.go:2130.19,2130.19 0 0 +github.com/thebtf/engram/internal/mcp/server.go:2132.20,2134.106 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2135.12,2137.103 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2140.8,2143.3 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2144.2,2150.49 3 0 +github.com/thebtf/engram/internal/mcp/server.go:2150.49,2152.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2152.8,2154.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2155.2,2168.27 4 0 +github.com/thebtf/engram/internal/mcp/server.go:2168.27,2170.17 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2170.17,2173.4 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2173.9,2175.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2177.2,2182.40 4 0 +github.com/thebtf/engram/internal/mcp/server.go:2182.40,2183.21 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2184.20,2185.20 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2186.19,2187.19 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2191.2,2191.24 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2191.24,2193.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2193.8,2193.30 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2193.30,2195.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2198.2,2198.28 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2198.28,2200.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2203.2,2203.29 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2203.29,2205.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2207.2,2208.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2208.16,2210.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2211.2,2211.28 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2216.103,2218.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2218.16,2220.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2222.2,2223.15 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2223.15,2225.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2227.2,2239.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2239.16,2241.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2242.2,2242.25 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2246.93,2248.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2251.91,2253.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:18.28,29.20 4 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:29.20,33.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:35.2,44.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:68.36,69.49 1 1 +github.com/thebtf/engram/internal/mcp/tools_admin.go:69.49,74.3 4 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:75.2,75.25 1 1 +github.com/thebtf/engram/internal/mcp/tools_admin.go:80.26,82.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:84.89,86.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:86.16,88.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:89.2,90.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:90.18,92.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:94.2,94.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:95.15,96.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:97.26,98.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:99.25,100.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:101.23,105.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:105.22,107.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:108.3,108.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:109.10,110.114 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:120.92,126.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:126.26,128.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:130.2,131.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:131.19,133.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:134.2,135.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:135.19,137.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:138.2,138.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:138.24,140.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:142.2,142.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:142.25,144.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:146.2,147.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:147.16,149.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:151.2,151.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:27.40,30.2 2 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:32.30,46.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:48.99,49.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:49.34,51.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:52.2,52.69 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:52.69,54.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:56.2,57.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:57.16,59.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:60.2,61.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:61.21,63.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:64.2,67.26 3 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:67.26,69.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:70.2,71.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:71.25,73.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:75.2,77.44 3 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:77.44,79.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:80.2,80.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:80.33,82.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:83.2,83.81 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:86.52,87.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:87.16,89.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:90.2,90.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:90.15,92.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:93.2,93.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:96.73,97.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:97.21,99.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:100.2,101.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:101.29,110.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:111.2,111.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:114.34,116.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:31.98,32.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:32.52,34.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:35.2,35.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:35.26,37.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:39.2,40.49 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:40.49,42.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:43.2,43.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:43.21,45.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:46.2,46.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:46.21,48.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:49.2,49.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:49.18,51.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:52.2,52.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:52.18,54.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:56.2,56.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:56.38,58.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:60.2,61.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:61.16,63.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:68.2,70.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:70.26,77.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:79.2,81.36 3 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:81.36,84.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:86.2,89.28 3 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:89.28,90.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:90.39,91.9 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:93.3,97.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:100.2,104.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:107.60,113.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:115.101,116.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:116.38,118.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:120.2,122.21 3 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:122.21,123.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:123.26,125.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:126.3,126.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:126.23,128.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:129.8,130.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:130.26,132.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:133.3,133.68 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:133.68,135.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:137.2,140.20 3 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:141.17,142.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:143.67,143.67 0 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:144.10,145.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:148.2,162.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:162.16,164.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:165.2,165.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:165.19,173.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:174.2,174.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:174.30,176.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:177.2,177.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:177.31,179.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:181.2,182.36 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:182.36,196.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:198.2,199.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:199.19,201.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:202.2,203.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:203.18,205.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:206.2,207.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:207.21,209.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:210.2,211.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:211.25,213.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:214.2,225.21 3 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:225.21,227.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:228.2,228.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:228.25,230.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:231.2,231.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:231.18,233.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:235.2,244.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:244.21,246.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:247.2,247.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:247.25,249.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:250.2,250.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:250.18,252.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:253.2,253.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:253.24,255.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:256.2,256.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:259.50,261.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:261.22,263.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:264.2,264.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:270.90,272.42 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:272.42,276.3 3 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:277.2,281.27 3 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:281.27,282.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:282.45,284.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:286.2,286.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:25.28,88.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:95.95,96.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:96.22,98.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:99.2,100.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:100.32,102.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:104.2,105.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:105.16,107.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:109.2,114.35 3 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:114.35,121.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:123.2,123.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:123.25,125.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:127.2,134.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:134.16,136.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:138.2,146.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:154.94,155.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:155.22,157.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:158.2,159.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:159.32,161.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:163.2,164.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:164.16,166.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:168.2,172.35 3 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:172.35,179.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:181.2,181.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:181.25,183.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:185.2,192.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:192.16,194.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:196.2,203.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:211.97,212.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:212.22,214.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:215.2,216.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:216.32,218.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:220.2,221.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:221.16,223.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:225.2,229.35 3 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:229.35,236.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:238.2,238.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:238.25,240.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:242.2,249.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:249.16,251.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:253.2,260.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:31.80,32.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:32.14,34.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:35.2,48.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:51.136,53.51 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:53.51,55.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:56.2,56.83 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:59.94,60.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:60.21,62.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:63.2,63.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:68.30,162.2 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:165.98,166.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:166.49,168.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:169.2,170.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:170.16,172.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:173.2,174.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:174.19,176.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:177.2,179.17 3 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:179.17,181.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:183.2,184.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:184.16,186.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:188.2,189.31 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:189.31,190.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:190.15,191.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:193.3,193.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:196.2,201.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:201.16,203.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:204.2,204.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:208.96,209.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:209.49,211.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:212.2,213.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:213.16,215.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:216.2,217.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:217.13,219.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:221.2,222.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:222.16,224.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:225.2,225.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:225.22,227.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:229.2,230.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:230.16,232.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:233.2,233.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:239.100,240.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:240.22,242.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:243.2,244.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:244.16,246.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:247.2,248.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:248.13,250.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:255.2,256.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:256.12,263.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:263.30,264.77 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:264.77,269.5 4 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:271.3,272.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:272.21,274.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:275.3,275.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:279.2,279.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:279.29,281.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:284.2,285.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:285.16,287.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:288.2,288.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:288.22,290.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:291.2,291.55 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:291.55,293.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:294.2,294.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:294.74,296.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:297.2,298.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:298.16,300.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:306.2,307.41 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:307.41,309.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:310.2,324.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:324.16,325.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:325.50,327.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:328.3,328.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:330.2,330.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:330.38,332.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:334.2,341.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:341.16,343.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:344.2,344.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:348.99,349.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:349.49,351.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:352.2,353.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:353.16,355.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:356.2,357.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:357.13,359.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:360.2,362.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:362.16,364.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:365.2,365.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:365.22,367.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:368.2,368.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:368.74,370.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:371.2,372.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:372.16,374.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:375.2,375.85 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:375.85,377.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:379.2,380.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:380.16,381.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:381.50,383.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:384.3,384.60 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:386.2,386.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:386.20,388.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:390.2,395.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:395.16,397.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:398.2,398.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:402.102,403.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:403.49,405.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:406.2,407.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:407.16,409.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:410.2,411.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:411.13,413.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:414.2,415.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:415.16,417.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:418.2,418.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:418.22,420.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:421.2,421.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:421.74,423.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:424.2,425.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:425.16,427.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:428.2,428.88 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:428.88,430.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:432.2,433.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:433.16,434.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:434.50,436.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:437.3,437.63 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:439.2,439.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:439.20,441.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:443.2,448.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:448.16,450.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:451.2,451.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:34.30,36.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:42.61,44.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:48.32,75.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:79.32,94.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:100.98,101.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:101.25,103.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:104.2,104.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:104.29,106.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:108.2,113.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:113.17,114.55 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:114.55,116.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:118.2,118.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:118.24,120.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:121.2,121.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:121.23,123.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:124.2,124.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:124.23,126.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:134.2,135.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:135.21,137.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:142.2,147.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:147.16,149.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:154.2,165.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:165.25,175.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:177.2,183.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:183.16,185.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:186.2,186.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:194.98,195.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:195.25,197.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:198.2,198.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:198.29,200.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:202.2,205.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:205.17,207.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:208.2,209.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:209.21,211.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:213.2,214.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:214.16,216.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:217.2,218.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:218.16,220.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:221.2,222.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:222.16,224.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:226.2,231.11 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:231.11,233.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:235.2,236.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:236.16,238.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:239.2,239.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:21.52,22.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:22.24,25.28 3 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:25.28,27.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:29.2,29.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:35.72,37.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:37.15,39.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:41.2,42.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:42.16,44.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:45.2,45.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:49.99,51.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:51.16,53.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:55.2,56.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:56.16,58.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:60.2,72.23 7 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:72.23,74.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:75.2,75.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:75.24,77.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:78.2,78.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:78.24,80.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:81.2,81.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:82.27,82.27 0 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:84.10,85.93 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:87.2,87.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:87.30,89.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:90.2,90.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:90.26,92.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:94.2,95.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:95.16,97.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:99.2,100.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:100.16,102.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:104.2,112.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:112.16,114.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:116.2,123.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:123.16,125.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:126.2,126.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:130.97,132.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:132.16,134.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:136.2,137.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:137.16,139.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:141.2,147.23 4 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:147.23,149.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:150.2,150.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:150.26,152.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:154.2,155.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:155.16,157.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:159.2,160.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:160.16,161.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:161.47,163.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:164.3,164.51 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:167.2,167.97 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:167.97,172.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:174.2,175.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:175.16,177.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:179.2,185.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:185.16,187.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:188.2,188.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:192.99,194.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:194.16,196.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:198.2,199.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:199.16,201.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:203.2,207.26 3 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:207.26,209.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:211.2,212.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:212.16,214.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:216.2,223.26 3 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:223.26,229.28 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:229.28,231.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:232.3,232.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:235.2,236.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:236.16,238.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:239.2,239.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:243.100,245.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:245.16,247.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:249.2,250.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:250.16,252.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:254.2,262.23 5 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:262.23,264.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:265.2,265.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:265.24,267.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:268.2,268.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:269.27,269.27 0 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:271.10,272.93 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:274.2,274.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:274.30,276.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:277.2,277.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:277.26,279.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:281.2,281.71 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:281.71,282.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:282.47,284.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:285.3,285.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:288.2,293.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:293.16,295.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:296.2,296.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:302.92,309.19 5 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:309.19,310.53 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:310.53,313.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:316.2,317.51 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:317.51,318.66 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:318.66,320.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:323.2,331.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:331.16,333.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:334.2,334.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:338.46,342.32 4 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:342.32,343.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:343.20,346.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:348.2,350.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:350.26,352.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:352.27,353.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:353.13,355.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:356.4,356.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:358.3,358.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:360.2,360.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:16.45,18.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:20.35,36.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:38.84,39.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:39.40,41.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:42.2,42.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:42.50,44.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:45.2,45.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:48.101,50.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:50.16,52.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:53.2,54.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:54.16,56.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:57.2,58.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:58.19,60.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:61.2,62.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:62.21,64.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:65.2,66.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:66.16,68.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:69.2,69.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:72.102,74.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:74.16,76.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:77.2,82.8 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:10.100,12.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:12.16,14.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:16.2,17.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:17.18,19.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:21.2,21.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:22.16,23.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:24.14,25.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:26.14,27.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:28.17,29.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:30.17,31.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:32.21,33.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:34.19,35.42 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:36.17,37.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:38.16,39.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:40.16,41.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:42.21,43.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:44.10,45.167 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:15.77,16.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:16.33,18.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:20.2,21.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:21.27,23.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:25.2,26.28 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:26.28,29.17 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:29.17,31.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:34.2,41.32 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:41.32,46.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:46.20,48.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:49.3,49.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:52.2,53.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:53.16,55.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:57.2,57.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:61.97,62.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:62.28,64.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:66.2,67.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:67.16,69.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:71.2,75.29 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:75.29,77.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:79.2,80.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:80.16,82.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:84.2,84.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:84.20,86.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:88.2,97.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:97.25,103.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:103.20,105.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:106.3,106.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:106.19,108.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:109.3,109.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:112.2,113.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:113.16,115.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:117.2,117.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:121.95,122.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:122.28,124.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:126.2,127.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:127.16,129.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:131.2,137.50 4 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:137.50,139.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:141.2,142.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:142.16,144.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:145.2,145.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:145.16,147.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:149.2,149.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:149.21,151.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:153.2,154.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:154.16,156.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:157.2,157.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:157.20,159.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:161.2,161.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:165.98,166.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:166.28,168.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:170.2,171.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:171.16,173.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:175.2,181.50 4 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:181.50,183.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:185.2,185.96 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:185.96,187.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:189.2,189.88 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:197.98,198.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:198.28,200.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:202.2,203.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:203.16,205.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:207.2,217.74 6 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:217.74,219.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:222.2,223.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:223.16,225.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:227.2,229.156 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:235.98,237.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:237.16,239.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:241.2,247.24 4 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:247.24,249.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:252.2,253.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:253.29,255.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:256.2,256.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:15.93,16.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:16.37,18.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:20.2,21.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:21.16,23.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:25.2,32.16 7 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:32.16,34.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:35.2,35.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:35.19,37.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:38.2,38.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:38.19,40.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:42.2,43.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:43.16,45.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:47.2,54.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:54.16,56.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:57.2,57.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:61.91,62.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:62.37,64.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:66.2,67.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:67.16,69.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:71.2,73.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:73.16,75.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:76.2,76.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:76.19,78.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:80.2,81.43 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:81.43,83.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:83.19,85.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:86.3,86.79 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:87.8,89.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:90.2,90.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:90.16,91.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:91.45,93.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:94.3,94.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:97.2,110.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:110.16,112.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:113.2,113.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:117.93,119.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:122.91,123.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:123.37,125.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:127.2,128.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:128.16,130.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:132.2,133.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:133.19,135.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:136.2,141.16 5 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:141.16,143.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:145.2,155.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:155.25,165.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:167.2,168.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:168.16,170.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:171.2,171.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:175.94,176.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:176.37,178.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:180.2,181.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:181.16,183.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:185.2,187.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:187.16,189.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:190.2,190.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:190.19,192.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:193.2,196.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:196.16,198.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:200.2,208.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:208.25,216.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:218.2,225.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:225.16,227.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:228.2,228.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:232.94,233.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:233.37,235.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:237.2,238.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:238.16,240.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:242.2,243.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:243.21,245.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:246.2,248.19 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:248.19,250.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:252.2,253.46 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:253.46,255.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:255.13,257.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:259.2,259.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:259.44,261.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:261.13,263.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:266.2,267.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:267.16,269.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:271.2,278.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:278.16,280.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:281.2,281.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:19.69,21.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:23.38,38.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:40.51,63.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:65.53,80.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:82.46,85.32 3 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:85.32,87.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:88.2,88.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:91.105,93.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:93.16,95.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:96.2,97.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:97.16,99.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:100.2,100.70 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:103.107,105.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:105.16,107.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:108.2,109.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:109.16,111.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:112.2,112.72 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:115.101,117.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:117.16,119.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:120.2,121.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:121.17,123.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:124.2,139.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:142.109,144.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:144.16,146.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:147.2,154.8 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:157.100,159.28 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:159.28,161.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:161.18,163.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:164.3,164.62 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:166.2,167.72 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:167.72,169.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:170.2,170.53 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:170.53,172.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:173.2,174.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:174.26,176.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:177.2,177.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:180.73,182.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:182.16,184.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:185.2,185.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:12.104,14.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:14.16,16.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:18.2,19.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:19.18,21.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:23.2,23.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:24.14,25.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:26.18,27.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:28.17,29.46 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:30.10,31.96 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:36.101,37.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:37.27,39.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:41.2,42.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:42.16,44.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:46.2,47.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:47.21,49.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:50.2,51.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:51.19,53.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:54.2,54.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:55.52,55.52 0 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:56.10,57.101 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:59.2,61.93 2 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:61.93,64.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:66.2,70.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:27.31,94.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:98.97,100.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:100.26,102.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:103.2,103.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:103.28,105.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:107.2,108.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:108.16,110.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:112.2,115.15 4 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:115.15,117.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:118.2,118.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:118.17,120.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:122.2,123.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:123.16,125.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:127.2,140.29 3 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:140.29,151.31 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:151.31,154.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:155.3,155.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:158.2,162.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:167.100,169.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:169.26,171.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:172.2,172.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:172.28,174.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:175.2,175.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:175.26,177.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:179.2,180.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:180.16,182.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:184.2,185.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:185.22,187.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:189.2,190.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:190.20,191.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:191.54,199.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:200.3,200.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:200.61,202.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:203.3,203.58 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:206.2,211.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:215.95,217.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:217.32,219.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:220.2,220.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:220.28,222.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:224.2,225.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:225.16,227.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:229.2,230.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:230.22,232.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:234.2,234.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:234.61,236.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:239.2,239.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:239.25,246.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:248.2,252.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:258.104,260.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:260.26,262.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:267.2,271.20 3 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:271.20,275.3 3 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:275.8,279.3 3 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:280.2,280.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:284.60,285.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:285.30,287.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:288.2,288.42 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:288.42,290.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:291.2,291.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:64.89,65.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:65.25,67.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:69.2,70.49 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:70.49,72.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:74.2,74.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:75.18,76.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:77.21,78.35 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:79.19,80.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:81.18,82.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:83.19,84.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:85.18,86.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:87.18,91.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:91.23,93.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:94.3,94.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:95.10,96.62 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:100.81,103.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:103.19,105.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:106.2,107.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:107.19,109.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:112.2,112.46 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:112.46,114.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:115.2,115.46 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:115.46,117.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:122.2,122.66 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:122.66,124.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:127.2,127.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:127.25,128.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:128.22,130.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:131.8,132.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:132.26,134.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:138.2,138.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:138.25,139.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:139.22,141.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:142.8,143.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:143.26,145.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:148.2,148.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:148.22,150.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:151.2,151.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:151.38,153.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:154.2,154.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:154.19,156.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:159.2,161.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:161.25,164.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:165.2,165.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:165.25,168.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:169.2,171.23 3 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:171.23,174.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:175.2,175.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:175.23,178.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:180.2,193.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:193.16,195.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:198.2,199.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:199.29,201.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:202.2,202.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:202.29,204.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:205.2,213.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:216.121,217.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:217.28,218.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:218.26,220.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:221.3,222.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:222.17,223.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:223.49,225.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:226.4,226.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:228.3,228.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:230.2,230.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:230.26,232.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:233.2,234.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:234.16,235.48 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:235.48,237.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:238.3,238.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:240.2,240.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:243.101,248.36 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:248.36,250.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:250.8,252.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:253.2,253.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:253.16,255.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:256.2,256.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:256.32,257.128 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:257.128,262.72 5 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:262.72,264.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:267.2,267.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:276.81,277.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:277.25,279.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:280.2,280.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:280.22,282.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:283.2,283.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:283.39,285.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:286.2,286.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:286.25,288.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:289.2,289.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:289.21,291.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:292.2,293.14 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:293.14,295.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:296.2,305.16 5 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:305.16,307.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:308.2,314.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:317.84,318.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:318.19,320.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:321.2,323.63 3 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:323.63,325.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:326.2,329.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:332.82,333.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:333.38,335.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:336.2,337.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:338.18,339.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:340.18,341.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:345.2,345.59 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:345.59,347.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:349.2,351.21 3 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:351.21,353.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:353.8,356.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:357.2,357.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:357.16,359.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:366.2,367.41 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:367.41,369.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:371.2,378.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:397.115,398.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:398.15,400.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:403.2,404.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:404.26,405.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:405.28,407.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:408.3,408.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:408.28,410.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:412.2,412.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:412.23,415.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:420.2,426.12 4 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:426.12,427.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:427.27,429.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:429.18,431.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:433.4,433.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:433.33,435.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:440.2,441.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:441.26,442.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:442.28,443.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:443.49,445.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:448.3,448.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:448.28,449.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:449.49,451.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:454.2,454.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:457.82,458.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:458.21,460.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:461.2,462.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:462.16,464.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:465.2,465.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:465.36,467.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:468.2,469.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:469.16,471.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:472.2,477.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:480.82,481.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:481.40,483.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:484.2,485.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:485.19,487.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:488.2,489.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:489.16,491.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:492.2,499.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:502.82,503.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:503.21,505.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:506.2,507.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:507.16,509.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:510.2,514.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:23.179,24.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:24.22,26.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:28.2,32.22 4 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:32.22,34.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:35.2,36.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:36.22,38.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:40.2,41.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:41.26,43.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:44.2,44.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:44.26,46.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:47.2,47.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:47.30,49.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:50.2,50.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:50.30,52.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:54.2,55.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:55.16,57.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:58.2,58.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:58.13,60.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:61.2,62.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:62.16,64.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:65.2,65.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:65.13,67.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:69.2,70.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:70.16,72.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:73.2,73.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:73.15,75.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:77.2,77.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:80.172,81.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:81.28,82.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:82.23,84.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:85.3,85.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:85.18,87.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:88.3,89.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:89.17,90.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:90.49,92.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:93.4,93.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:95.3,95.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:98.2,98.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:98.24,100.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:101.2,101.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:101.19,103.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:104.2,105.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:105.16,106.48 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:106.48,108.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:109.3,109.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:111.2,111.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:114.119,116.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:116.22,118.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:119.2,120.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:120.22,122.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:124.2,126.26 3 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:126.26,127.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:127.36,129.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:130.3,130.105 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:131.8,132.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:132.32,134.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:135.3,135.103 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:137.2,137.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:137.16,139.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:141.2,141.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:141.32,143.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:143.27,145.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:146.3,147.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:147.27,149.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:150.3,150.106 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:150.106,151.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:153.3,153.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:153.27,154.114 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:154.114,155.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:157.9,157.104 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:157.104,158.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:160.3,160.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:160.27,161.114 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:161.114,162.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:164.9,164.104 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:164.104,165.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:167.3,167.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:169.2,169.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:25.90,26.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:26.26,28.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:30.2,31.49 2 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:31.49,33.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:35.2,35.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:36.16,37.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:38.10,39.63 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:43.84,44.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:44.21,46.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:47.2,47.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:47.25,49.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:50.2,50.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:50.21,52.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:53.2,53.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:53.21,55.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:57.2,58.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:59.18,60.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:61.15,62.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:63.24,64.42 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:65.10,66.108 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:69.2,70.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:70.22,72.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:73.2,74.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:74.29,76.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:78.2,78.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:78.14,85.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:87.2,89.37 3 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:89.37,92.21 3 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:92.21,94.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:97.2,100.31 4 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:100.31,102.38 2 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:102.38,104.37 2 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:104.37,106.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:109.3,122.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:122.26,124.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:125.3,125.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:125.19,127.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:131.3,133.39 3 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:133.39,135.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:135.9,137.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:138.3,138.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:138.17,140.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:142.3,142.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:142.34,144.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:145.3,145.11 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:148.2,155.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:20.99,22.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:22.16,24.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:26.2,31.44 3 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:31.44,32.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:32.33,33.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:33.43,38.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:43.2,43.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:43.49,45.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:46.2,46.48 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:46.48,48.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:50.2,52.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:52.27,55.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:55.8,60.24 3 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:60.24,62.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:64.3,64.57 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:64.57,66.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:68.3,68.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:71.2,71.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:71.16,73.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:75.2,76.23 2 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:76.23,78.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:80.2,80.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:19.40,89.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:109.71,111.9 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:111.9,113.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:115.2,116.38 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:116.38,117.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:118.13,119.41 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:119.41,121.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:122.17,123.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:123.43,125.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:126.11,127.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:127.40,129.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:133.2,133.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:133.22,138.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:139.2,139.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:143.90,144.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:144.25,146.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:148.2,149.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:149.16,151.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:153.2,157.61 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:157.61,159.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:161.2,161.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:162.16,163.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:164.14,165.35 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:166.13,167.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:168.16,169.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:170.17,171.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:172.16,173.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:174.15,175.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:176.10,177.120 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:189.85,191.39 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:191.39,192.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:192.44,194.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:196.2,196.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:196.15,198.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:199.2,199.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:199.15,201.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:202.2,202.46 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:205.91,207.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:207.17,209.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:211.2,215.25 5 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:215.25,217.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:218.2,224.25 4 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:224.25,226.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:227.2,227.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:227.25,229.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:231.2,243.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:243.16,245.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:247.2,247.139 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:250.89,252.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:252.19,254.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:255.2,256.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:256.25,258.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:259.2,264.52 5 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:264.52,266.14 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:266.14,268.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:271.2,277.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:277.25,280.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:282.2,283.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:283.16,285.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:287.2,287.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:287.22,288.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:288.20,290.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:291.3,291.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:294.2,297.31 3 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:297.31,300.29 3 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:300.29,302.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:303.3,305.69 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:308.2,308.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:311.88,313.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:313.13,315.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:317.2,318.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:318.16,320.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:322.2,328.22 6 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:328.22,331.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:333.2,333.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:333.23,335.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:335.30,338.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:341.2,341.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:344.91,346.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:346.13,348.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:350.2,353.18 3 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:353.18,354.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:354.27,356.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:357.3,357.73 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:357.73,359.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:362.2,362.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:362.19,370.17 4 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:370.17,372.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:375.2,376.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:376.26,378.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:379.2,379.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:382.92,384.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:384.13,386.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:388.2,389.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:389.16,391.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:393.2,401.16 4 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:401.16,403.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:405.2,405.88 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:408.91,410.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:410.13,412.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:414.2,418.95 4 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:418.95,420.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:422.2,422.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:425.90,427.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:427.13,429.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:431.2,433.167 3 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:433.167,435.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:437.2,437.89 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:437.89,439.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:441.2,441.108 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:22.93,24.49 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:24.49,26.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:28.2,28.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:29.14,30.42 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:31.17,32.59 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:33.16,34.58 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:35.24,36.75 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:37.27,38.71 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:39.22,40.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:41.23,42.63 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:43.10,44.66 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:48.79,49.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:49.13,51.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:52.2,53.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:53.16,55.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:57.2,58.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:58.32,60.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:61.2,84.28 3 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:87.101,88.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:88.13,90.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:91.2,91.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:91.38,93.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:94.2,95.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:95.16,97.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:98.2,98.53 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:98.53,100.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:102.2,104.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:104.17,106.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:107.2,107.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:107.29,109.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:110.2,115.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:118.100,119.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:119.13,121.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:122.2,122.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:122.38,124.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:125.2,126.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:126.16,128.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:129.2,129.53 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:129.53,131.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:133.2,135.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:135.17,137.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:138.2,138.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:138.29,140.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:141.2,146.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:149.123,150.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:150.13,152.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:153.2,153.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:153.18,155.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:156.2,156.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:156.38,158.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:159.2,161.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:161.17,163.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:164.2,169.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:172.113,173.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:173.13,175.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:176.2,176.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:176.50,178.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:179.2,181.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:181.17,183.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:184.2,188.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:191.57,195.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:197.102,198.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:198.13,200.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:201.2,201.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:201.20,203.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:204.2,205.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:205.16,207.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:209.2,210.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:210.32,212.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:214.2,217.56 3 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:217.56,223.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:225.2,230.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:233.41,235.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:235.16,237.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:238.2,238.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:35.27,37.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:42.41,43.11 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:44.48,45.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:46.10,47.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:54.57,55.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:56.17,57.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:58.16,59.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:60.10,61.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:82.58,83.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:84.28,85.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:86.26,87.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:88.10,89.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:93.114,95.68 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:95.68,97.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:99.2,101.42 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:101.42,102.71 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:102.71,105.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:107.2,117.23 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:117.23,119.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:121.2,124.22 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:124.22,125.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:125.31,127.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:128.3,128.35 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:129.8,129.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:129.37,131.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:132.2,132.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:135.74,136.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:136.30,138.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:139.2,139.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:139.34,141.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:142.2,142.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:142.31,144.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:145.2,145.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:145.22,147.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:161.169,162.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:162.17,164.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:165.2,166.51 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:166.51,168.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:169.2,169.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:172.92,174.42 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:174.42,177.63 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:177.63,179.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:179.9,181.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:183.2,183.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:186.65,190.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:192.115,194.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:194.26,196.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:196.8,196.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:196.31,198.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:199.2,199.117 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:202.122,206.31 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:206.31,207.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:207.45,209.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:211.2,211.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:214.72,216.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:218.117,219.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:219.16,221.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:222.2,223.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:223.20,225.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:225.17,227.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:228.3,228.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:228.27,229.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:229.50,231.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:231.30,232.11 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:236.3,236.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:239.2,241.60 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:241.60,243.61 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:243.61,245.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:246.3,246.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:246.24,247.9 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:249.3,250.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:250.17,252.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:253.3,253.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:253.22,254.9 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:256.3,256.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:256.29,257.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:257.50,259.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:259.30,260.11 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:264.3,265.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:265.32,266.9 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:269.2,269.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:272.51,273.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:273.16,275.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:276.2,277.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:277.18,279.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:280.2,280.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:280.19,282.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:283.2,283.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:286.97,288.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:288.30,290.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:291.2,291.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:291.49,293.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:294.2,294.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:297.108,299.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:301.108,303.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:305.102,307.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:319.55,320.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:320.31,322.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:323.2,323.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:323.26,325.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:326.2,326.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:329.71,330.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:343.26,344.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:345.10,346.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:354.95,362.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:362.16,364.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:366.2,397.39 14 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:397.39,399.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:399.27,401.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:402.8,404.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:405.2,407.46 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:407.46,410.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:411.2,411.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:411.44,413.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:413.12,415.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:417.2,417.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:417.26,419.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:420.2,420.84 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:420.84,422.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:427.2,427.65 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:427.65,429.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:431.2,433.20 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:433.20,435.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:436.2,437.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:437.20,439.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:440.2,440.56 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:440.56,442.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:443.2,443.56 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:443.56,448.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:450.2,450.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:450.45,453.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:459.2,459.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:459.31,461.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:461.22,462.62 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:462.62,465.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:466.4,466.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:468.3,468.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:471.2,472.115 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:472.115,474.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:491.2,491.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:491.19,493.23 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:493.23,495.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:496.3,508.21 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:508.21,510.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:511.3,511.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:522.2,522.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:522.43,535.34 5 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:535.34,556.30 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:556.30,558.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:559.4,559.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:559.44,561.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:562.4,562.106 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:562.106,564.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:575.4,575.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:575.74,577.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:578.4,579.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:579.18,581.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:583.4,584.28 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:584.28,586.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:588.4,588.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:588.31,599.57 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:599.57,601.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:601.17,604.7 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:606.5,607.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:607.21,609.6 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:615.5,615.138 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:615.138,617.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:617.27,619.7 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:620.6,620.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:622.5,623.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:623.26,625.6 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:626.5,626.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:630.4,631.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:631.20,633.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:634.4,634.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:634.22,637.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:637.26,639.6 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:640.5,640.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:645.4,660.77 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:660.77,662.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:663.4,664.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:664.25,666.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:667.4,667.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:673.2,673.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:673.26,675.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:677.2,678.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:678.25,680.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:681.2,681.97 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:681.97,683.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:690.2,691.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:691.21,693.33 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:693.33,695.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:696.3,696.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:696.33,698.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:699.3,699.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:699.49,704.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:721.3,721.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:721.54,722.84 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:722.84,724.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:728.2,728.99 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:728.99,730.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:732.2,733.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:733.22,735.10 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:736.109,737.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:738.100,739.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:740.114,741.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:742.107,743.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:744.11,745.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:748.2,749.43 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:749.43,751.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:753.2,755.34 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:755.34,756.48 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:756.48,757.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:757.19,760.5 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:764.2,764.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:764.31,767.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:768.2,768.35 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:768.35,771.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:772.2,772.76 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:772.76,776.3 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:778.2,780.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:780.16,782.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:782.20,785.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:788.2,788.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:788.25,798.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:798.18,800.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:800.9,800.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:800.30,807.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:808.3,808.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:808.36,810.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:811.3,812.50 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:812.50,815.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:816.3,822.17 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:822.17,824.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:826.3,836.17 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:836.17,838.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:839.3,839.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:842.2,843.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:843.30,844.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:844.52,846.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:846.9,848.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:851.2,869.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:869.21,871.43 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:871.43,873.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:874.3,874.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:874.29,876.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:886.3,886.76 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:886.76,888.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:890.2,890.105 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:890.105,892.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:893.2,894.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:894.16,896.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:901.2,904.40 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:904.40,905.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:905.15,906.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:909.3,910.63 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:910.63,912.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:912.9,914.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:916.3,916.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:916.43,918.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:919.3,920.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:920.20,922.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:925.3,925.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:925.23,928.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:929.3,931.33 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:931.33,934.39 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:934.39,936.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:939.2,948.42 5 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:948.42,950.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:950.21,952.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:952.9,955.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:959.2,959.53 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:959.53,960.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:960.54,961.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:961.33,963.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:964.9,972.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:973.3,973.60 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:973.60,974.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:974.40,976.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:978.3,978.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:978.61,979.41 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:979.41,981.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:983.3,983.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:983.28,985.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:986.3,987.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:989.2,989.51 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:989.51,991.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:995.2,997.53 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:997.53,999.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:999.8,1001.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1002.2,1002.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1002.22,1004.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1008.2,1014.76 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1014.76,1016.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1021.2,1021.57 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1021.57,1026.13 5 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1026.13,1029.21 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1029.21,1032.5 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1033.4,1033.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1033.49,1035.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1036.4,1043.89 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1043.89,1046.5 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1048.4,1048.86 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1052.2,1063.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1063.21,1065.40 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1065.40,1067.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1068.3,1068.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1068.38,1070.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1072.2,1074.18 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1074.18,1081.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1082.2,1082.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1082.28,1084.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1085.2,1085.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1085.16,1087.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1088.2,1088.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1088.30,1090.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1091.2,1091.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1091.30,1093.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1098.2,1098.76 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1098.76,1100.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1101.2,1102.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1102.16,1104.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1105.2,1105.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1111.94,1113.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1113.15,1115.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1117.2,1118.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1118.16,1120.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1122.2,1123.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1123.13,1125.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1126.2,1131.16 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1131.16,1133.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1134.2,1134.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1134.19,1136.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1146.2,1146.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1146.39,1148.55 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1148.55,1150.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1152.2,1152.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1152.39,1154.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1157.2,1158.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1158.21,1163.21 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1163.21,1165.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1166.3,1167.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1167.21,1169.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1170.3,1170.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1170.52,1172.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1173.3,1173.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1173.52,1178.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1179.3,1179.41 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1179.41,1182.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1183.3,1183.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1188.2,1188.46 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1188.46,1190.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1191.2,1191.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1191.27,1193.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1195.2,1196.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1196.16,1198.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1201.2,1210.16 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1210.16,1212.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1213.2,1213.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1218.59,1220.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1220.38,1222.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1225.2,1226.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1226.29,1227.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1227.22,1229.9 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1232.2,1232.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1232.18,1234.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1237.2,1244.29 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1244.29,1245.67 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1245.67,1247.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1249.2,1249.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1249.16,1251.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1254.2,1254.11 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1258.55,1260.47 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1260.47,1262.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1263.2,1264.58 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1264.58,1266.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1267.2,1267.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1270.252,1271.108 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1271.108,1273.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1274.2,1274.55 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1274.55,1276.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1277.2,1277.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1280.184,1282.69 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1282.69,1284.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1284.32,1285.58 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1285.58,1287.10 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1290.3,1290.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1290.18,1292.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1294.2,1294.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1294.19,1297.32 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1297.32,1298.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1298.39,1300.10 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1303.3,1303.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1303.19,1305.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1307.2,1307.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1307.21,1309.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1309.32,1310.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1310.49,1312.10 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1315.3,1315.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1315.18,1317.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1319.2,1319.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1319.28,1321.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1321.17,1323.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1324.3,1324.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1324.27,1326.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1328.2,1328.76 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1328.76,1330.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1331.2,1331.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1342.96,1343.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1343.26,1345.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1347.2,1348.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1348.16,1350.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1352.2,1363.23 9 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1363.23,1364.58 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1364.58,1365.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1365.31,1367.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1367.10,1369.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1373.2,1373.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1373.17,1375.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1376.2,1376.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1376.16,1378.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1379.2,1379.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1379.16,1381.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1382.2,1382.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1382.18,1384.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1385.2,1385.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1385.19,1387.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1388.2,1388.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1388.19,1390.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1396.2,1399.18 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1399.18,1400.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1400.61,1401.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1402.50,1403.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1404.12,1405.108 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1409.2,1410.42 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1410.42,1414.3 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1415.2,1420.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1420.16,1422.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1429.2,1444.43 6 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1444.43,1446.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1449.2,1451.27 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1451.27,1453.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1458.2,1458.46 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1458.46,1460.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1461.2,1461.63 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1461.63,1463.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1465.2,1466.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1466.15,1472.29 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1472.29,1479.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1479.18,1481.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1482.4,1482.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1482.23,1483.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1485.4,1485.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1485.30,1486.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1486.24,1488.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1488.32,1489.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1493.4,1494.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1494.30,1495.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1498.8,1504.29 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1504.29,1506.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1506.18,1508.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1509.4,1509.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1509.23,1510.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1512.4,1512.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1512.30,1513.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1513.24,1515.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1515.32,1516.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1520.4,1521.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1521.30,1522.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1526.2,1526.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1526.26,1528.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1528.17,1530.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1535.2,1535.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1535.74,1536.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1536.13,1537.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1537.33,1542.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1542.26,1544.39 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1544.39,1546.7 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1548.5,1548.82 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1565.2,1565.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1565.38,1569.27 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1569.27,1571.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1572.3,1572.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1572.27,1574.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1576.3,1581.32 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1581.32,1586.4 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1588.3,1592.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1592.18,1594.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1595.3,1596.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1596.17,1598.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1599.3,1599.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1602.2,1602.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1603.15,1618.32 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1618.32,1620.33 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1620.33,1621.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1621.40,1623.11 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1626.4,1638.6 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1640.3,1641.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1641.17,1643.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1644.3,1644.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1646.18,1648.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1648.17,1650.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1651.3,1651.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1653.10,1654.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1654.25,1656.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1657.3,1659.32 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1659.32,1661.33 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1661.33,1662.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1662.40,1664.11 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1667.4,1669.26 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1669.26,1671.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1672.4,1673.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1673.25,1675.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1676.4,1676.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1678.3,1678.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1690.51,1695.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1700.73,1702.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1702.16,1704.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1705.2,1706.48 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1706.48,1710.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1711.2,1713.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1713.16,1715.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1716.2,1716.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1727.117,1731.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1731.21,1733.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1734.2,1735.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1735.16,1737.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1738.2,1739.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1739.27,1741.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1742.2,1742.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1764.19,1775.30 7 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1775.30,1777.37 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1777.37,1779.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1781.3,1781.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1781.20,1783.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1797.2,1797.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1797.39,1799.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1801.2,1811.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1811.25,1813.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1815.2,1816.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1816.29,1818.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1824.2,1824.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1824.27,1826.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1831.2,1833.22 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1833.22,1835.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1837.2,1846.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1846.16,1848.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1853.2,1855.27 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1855.27,1857.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1859.2,1876.33 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1876.33,1878.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1880.2,1881.28 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1881.28,1885.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1885.20,1888.33 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1888.33,1889.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1889.40,1891.11 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1894.4,1894.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1894.20,1895.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1900.3,1900.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1900.22,1902.33 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1902.33,1903.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1903.50,1905.11 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1908.4,1908.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1908.19,1909.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1918.3,1918.56 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1918.56,1919.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1927.3,1927.64 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1927.64,1928.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1932.3,1935.32 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1935.32,1936.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1936.39,1938.10 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1942.3,1956.14 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1956.14,1957.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1957.37,1959.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1961.3,1962.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1962.26,1963.9 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1975.2,1975.59 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1975.59,1986.17 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1986.17,1988.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1990.3,1991.34 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1991.34,1993.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1995.3,1996.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1996.29,1998.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1998.21,2001.34 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2001.34,2002.41 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2002.41,2004.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2007.5,2007.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2007.21,2008.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2011.4,2011.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2011.23,2013.34 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2013.34,2014.51 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2014.51,2016.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2019.5,2019.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2019.20,2020.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2023.4,2023.57 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2023.57,2024.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2027.4,2027.65 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2027.65,2028.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2030.4,2031.33 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2031.33,2032.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2032.40,2034.11 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2037.4,2051.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2051.15,2052.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2052.38,2054.6 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2056.4,2057.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2057.27,2058.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2065.2,2066.28 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2066.28,2068.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2072.2,2072.71 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2072.71,2080.30 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2080.30,2081.41 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2081.41,2087.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2089.3,2089.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2089.13,2090.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2090.31,2095.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2095.25,2097.38 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2097.38,2099.7 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2101.5,2101.81 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2112.2,2112.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2112.38,2115.27 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2115.27,2117.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2121.3,2138.30 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2138.30,2140.11 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2140.11,2141.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2143.4,2160.15 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2160.15,2161.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2161.39,2163.6 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2165.4,2165.46 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2167.3,2173.24 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2173.24,2175.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2176.3,2176.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2179.2,2179.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2180.15,2182.24 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2182.24,2184.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2185.3,2185.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2187.18,2199.30 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2199.30,2201.11 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2201.11,2202.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2204.4,2208.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2208.15,2209.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2209.39,2211.6 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2213.4,2213.35 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2215.3,2216.24 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2216.24,2218.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2219.3,2219.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2220.10,2221.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2221.22,2223.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2224.3,2226.27 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2226.27,2228.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2228.20,2230.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2231.4,2233.26 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2233.26,2235.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2236.4,2237.23 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2237.23,2239.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2240.4,2240.46 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2240.46,2244.5 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2245.4,2245.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2247.3,2247.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2252.94,2254.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2254.16,2256.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2258.2,2260.18 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2260.18,2261.59 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2261.59,2262.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2262.36,2264.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2264.10,2266.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2270.2,2270.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2270.13,2272.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2273.2,2273.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2273.50,2275.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2277.2,2277.98 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2281.98,2282.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2282.26,2284.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2286.2,2287.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2287.16,2289.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2291.2,2292.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2292.13,2294.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2297.2,2298.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2298.19,2299.51 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2299.51,2301.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2302.3,2302.55 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2304.2,2304.42 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2304.42,2306.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2308.2,2308.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2308.54,2309.48 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2309.48,2311.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2312.3,2312.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2316.2,2318.53 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:17.82,19.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:21.149,22.55 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:22.55,24.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:25.2,25.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:25.36,27.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:28.2,34.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:34.16,36.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:37.2,37.42 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:37.42,39.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:40.2,40.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:43.105,44.48 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:44.48,46.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:47.2,48.54 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:51.129,53.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:53.16,55.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:56.2,57.53 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:57.53,59.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:60.2,61.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:61.25,63.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:64.2,65.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:65.16,67.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:68.2,68.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:26.97,27.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:27.18,29.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:30.2,30.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:33.37,35.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:37.81,38.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:38.44,40.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:41.2,41.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:41.38,43.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:44.2,44.57 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:47.88,48.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:48.32,50.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:51.2,52.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:52.20,54.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:55.2,55.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:58.40,72.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:74.106,75.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:75.34,77.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:78.2,79.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:79.16,81.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:83.2,84.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:84.16,86.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:88.2,89.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:89.13,91.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:93.2,94.63 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:94.63,96.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:98.2,98.72 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:98.72,100.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:102.2,106.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:109.117,110.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:110.32,112.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:113.2,113.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:113.34,115.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:117.2,118.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:118.16,120.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:121.2,121.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:121.19,123.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:125.2,126.69 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:126.69,128.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:130.2,136.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:18.33,20.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:22.27,37.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:39.93,40.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:40.30,42.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:43.2,43.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:43.28,45.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:46.2,47.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:47.16,49.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:51.2,52.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:52.17,54.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:55.2,56.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:56.19,58.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:59.2,59.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:59.19,61.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:62.2,63.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:63.16,65.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:67.2,74.9 3 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:74.9,76.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:77.2,78.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:78.15,80.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:81.2,85.16 4 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:85.16,87.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:88.2,88.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:88.17,90.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:92.2,101.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:104.48,105.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:105.16,107.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:108.2,109.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:109.29,111.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:112.2,112.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:112.31,114.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:115.2,115.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:118.75,120.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:120.27,121.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:121.32,123.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:123.17,124.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:126.4,126.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:129.2,134.33 3 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:134.33,136.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:137.2,137.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:137.40,138.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:138.39,140.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:141.3,141.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:143.2,143.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:143.34,145.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:146.2,147.35 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:147.35,149.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:150.2,150.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:153.77,154.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:154.20,156.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:157.2,159.31 3 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:159.31,160.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:160.33,162.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:163.3,163.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:163.30,165.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:167.2,170.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:23.91,25.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:27.38,50.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:52.104,53.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:53.38,55.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:56.2,57.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:57.16,59.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:61.2,62.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:62.26,64.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:65.2,66.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:66.30,68.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:69.2,69.72 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:69.72,71.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:73.2,74.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:74.16,76.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:77.2,78.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:78.16,80.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:81.2,82.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:82.16,84.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:85.2,86.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:86.16,88.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:90.2,105.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:105.16,107.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:109.2,109.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:109.19,117.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:118.2,118.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:118.25,120.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:121.2,121.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:121.30,123.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:124.2,124.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:124.31,126.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:127.2,128.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:128.16,130.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:131.2,131.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:134.91,136.9 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:136.9,138.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:139.2,140.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:140.15,141.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:141.19,143.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:144.3,144.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:146.2,146.94 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:149.59,150.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:150.16,152.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:153.2,154.61 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:154.61,156.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:157.2,157.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:160.56,161.75 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:161.75,163.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:164.2,164.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:167.67,169.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:170.17,171.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:172.67,173.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:174.10,175.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:179.60,180.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:180.16,182.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:183.2,184.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:184.25,186.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:187.2,187.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:190.57,191.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:192.15,193.81 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:193.81,195.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:196.3,196.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:197.19,199.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:199.17,201.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:202.3,202.55 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:202.55,204.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:205.3,205.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:206.14,207.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:208.11,209.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:210.10,211.41 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:215.59,216.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:216.16,218.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:219.2,219.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:220.12,221.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:222.14,223.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:224.10,225.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:28.90,30.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:30.16,32.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:34.2,36.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:37.16,38.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:40.16,42.140 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:44.20,46.140 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:48.17,50.142 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:52.17,56.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:56.50,62.63 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:62.63,64.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:66.4,66.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:66.45,68.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:72.4,74.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:74.25,76.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:77.4,77.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:80.3,80.101 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:82.18,84.141 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:86.18,88.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:88.18,90.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:91.3,91.41 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:93.17,96.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:96.50,99.59 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:99.59,101.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:102.4,104.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:104.25,106.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:107.4,107.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:110.3,110.98 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:112.10,116.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:125.86,126.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:126.16,128.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:129.2,130.9 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:130.9,132.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:133.2,133.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:133.22,135.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:137.2,139.31 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:139.31,141.10 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:141.10,143.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:144.3,145.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:145.22,147.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:148.3,149.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:149.26,151.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:152.3,152.68 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:152.68,154.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:155.3,156.37 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:156.37,158.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:159.3,160.107 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:162.2,162.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:165.249,166.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:166.24,168.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:169.2,169.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:169.38,171.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:173.2,174.31 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:174.31,175.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:175.32,177.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:180.2,181.34 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:181.34,182.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:182.29,183.9 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:185.3,197.17 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:197.17,199.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:200.3,200.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:200.20,201.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:203.3,203.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:203.37,205.33 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:205.33,206.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:208.4,208.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:208.19,209.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:209.43,210.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:212.5,212.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:214.4,215.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:215.30,216.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:220.2,220.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:223.113,229.2 5 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:231.101,233.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:247.92,251.16 4 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:251.16,253.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:253.8,253.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:253.24,255.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:259.2,272.51 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:272.51,274.38 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:274.38,275.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:276.50,277.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:278.12,279.107 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:287.2,292.26 5 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:292.26,294.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:297.2,297.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:297.19,301.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:303.2,311.42 5 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:311.42,315.3 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:316.2,341.64 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:341.64,342.86 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:342.86,344.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:345.3,345.56 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:345.56,347.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:348.3,360.19 6 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:360.19,364.4 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:365.3,365.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:369.2,370.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:370.15,372.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:372.27,374.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:375.3,375.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:375.27,377.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:380.2,381.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:381.15,387.28 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:387.28,395.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:395.18,397.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:398.4,398.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:398.23,399.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:401.4,401.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:401.30,402.66 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:402.66,403.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:405.5,406.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:406.12,407.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:409.5,409.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:409.28,413.6 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:414.5,415.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:415.30,416.11 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:419.4,420.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:420.30,421.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:424.8,432.28 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:432.28,438.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:438.18,440.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:441.4,441.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:441.23,442.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:444.4,444.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:444.30,445.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:445.40,447.31 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:447.31,448.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:452.4,455.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:455.30,456.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:461.2,465.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:465.17,467.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:469.2,470.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:470.16,472.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:473.2,473.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:20.79,21.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:21.43,23.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:24.2,24.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:24.29,26.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:27.2,27.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:30.40,63.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:65.68,71.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:71.25,74.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:75.2,75.67 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:78.62,83.19 3 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:83.19,87.3 3 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:88.2,88.89 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:91.101,92.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:92.22,94.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:95.2,96.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:96.18,98.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:99.2,100.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:100.16,102.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:103.2,104.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:104.16,106.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:107.2,107.119 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:110.99,111.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:111.22,113.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:114.2,115.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:115.18,117.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:118.2,119.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:119.16,121.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:122.2,122.51 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:122.51,124.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:125.2,126.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:126.16,128.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:129.2,131.15 3 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:131.15,132.69 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:132.69,134.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:135.3,135.58 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:137.2,137.130 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:140.102,142.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:142.16,144.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:145.2,145.64 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:145.64,147.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:148.2,148.113 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:151.109,153.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:153.16,155.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:156.2,157.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:157.16,159.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:160.2,161.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:161.16,163.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:164.2,164.67 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:167.107,169.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:169.16,171.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:172.2,173.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:173.16,175.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:176.2,176.107 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:176.107,178.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:179.2,179.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:180.41,181.63 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:182.41,183.95 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:184.10,185.83 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:189.111,191.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:191.16,193.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:194.2,195.57 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:195.57,197.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:198.2,199.23 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:199.23,201.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:202.2,203.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:203.16,205.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:206.2,206.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:206.17,208.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:209.2,209.108 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:212.63,215.2 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:217.69,219.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:219.16,221.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:222.2,222.79 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:225.60,227.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:227.16,229.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:230.2,230.57 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:233.137,234.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:234.49,236.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:237.2,238.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:238.16,240.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:241.2,243.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:243.16,245.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:246.2,247.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:247.16,249.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:250.2,250.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:250.22,252.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:253.2,253.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:256.142,258.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:258.16,260.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:261.2,262.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:262.16,264.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:265.2,265.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:265.47,267.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:268.2,269.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:269.16,270.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:270.50,272.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:273.3,273.89 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:275.2,275.173 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:278.157,280.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:280.16,282.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:283.2,283.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:283.47,285.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:286.2,287.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:287.16,288.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:288.50,290.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:291.3,291.89 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:293.2,293.169 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:296.104,297.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:297.22,299.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:300.2,301.61 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:301.61,303.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:303.20,304.9 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:307.2,307.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:307.19,309.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:310.2,317.8 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:320.119,322.39 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:322.39,323.81 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:323.81,325.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:327.2,327.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:330.71,332.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:332.16,334.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:335.2,335.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:17.61,105.23 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:105.23,122.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:123.2,123.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:126.104,127.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:127.61,129.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:130.2,130.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:130.38,132.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:133.2,134.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:134.16,136.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:137.2,138.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:138.16,140.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:141.2,147.107 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:147.107,149.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:150.2,151.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:151.16,153.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:154.2,170.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:170.19,172.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:173.2,173.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:176.103,177.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:177.61,179.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:180.2,180.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:180.38,182.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:183.2,184.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:184.16,186.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:187.2,191.106 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:191.106,193.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:194.2,195.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:195.16,197.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:198.2,200.31 3 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:200.31,207.36 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:207.36,218.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:219.3,220.35 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:222.2,230.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:233.107,234.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:234.61,236.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:237.2,237.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:237.38,239.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:240.2,241.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:241.16,243.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:244.2,248.110 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:248.110,250.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:251.2,252.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:252.16,254.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:255.2,256.33 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:256.33,266.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:267.2,275.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:278.108,279.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:279.61,281.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:282.2,282.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:282.37,284.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:285.2,286.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:286.16,288.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:289.2,290.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:290.19,292.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:293.2,293.104 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:293.104,295.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:296.2,297.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:297.16,299.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:300.2,307.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:307.16,309.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:310.2,311.43 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:311.43,318.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:319.2,332.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:332.22,334.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:335.2,335.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:338.108,339.62 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:339.62,341.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:342.2,342.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:342.38,344.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:345.2,346.9 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:346.9,348.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:349.2,350.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:350.16,352.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:353.2,357.16 5 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:357.16,359.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:360.2,370.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:373.109,374.62 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:374.62,376.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:377.2,377.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:377.38,379.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:380.2,381.9 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:381.9,383.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:384.2,385.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:385.16,387.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:388.2,390.32 3 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:390.32,392.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:393.2,394.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:394.16,396.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:397.2,403.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:406.106,407.62 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:407.62,409.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:410.2,410.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:410.38,412.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:413.2,414.9 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:414.9,416.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:417.2,418.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:418.16,420.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:421.2,423.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:423.16,424.41 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:424.41,434.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:435.3,435.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:437.2,445.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:483.65,484.42 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:484.42,485.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:485.39,487.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:489.2,489.85 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:489.85,491.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:492.2,492.95 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:495.102,496.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:496.38,498.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:499.2,499.58 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:499.58,501.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:502.2,502.90 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:505.60,508.2 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:510.66,512.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:512.26,514.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:515.2,515.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:518.69,521.33 3 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:521.33,523.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:523.21,524.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:526.3,526.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:526.34,527.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:529.3,530.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:532.2,532.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:535.63,537.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:537.19,539.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:540.2,541.42 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:541.42,543.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:544.2,544.57 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:544.57,546.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:547.2,547.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:547.54,549.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:550.2,550.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:553.70,557.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:559.66,561.9 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:561.9,563.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:564.2,566.17 3 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:566.17,568.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:569.2,569.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:570.103,572.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:573.34,574.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:575.10,576.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:580.56,581.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:581.37,583.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:584.2,584.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:584.26,586.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:586.37,587.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:589.3,589.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:591.2,591.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:594.90,602.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:604.68,605.71 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:605.71,607.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:607.17,609.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:610.3,610.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:612.2,613.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:613.16,615.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:616.2,617.41 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:617.41,619.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:620.2,620.78 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:623.65,625.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:625.16,627.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:628.2,628.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:628.17,630.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:631.2,631.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:634.51,635.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:635.16,637.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:638.2,638.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:641.56,642.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:642.28,644.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:645.2,646.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:649.92,651.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:651.29,653.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:654.2,654.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:657.86,659.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:659.29,661.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:662.2,662.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:665.94,667.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:667.29,669.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:670.2,670.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:673.98,675.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:675.29,677.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:678.2,678.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:17.93,18.104 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:18.104,20.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:22.2,23.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:23.16,25.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:27.2,28.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:28.19,30.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:32.2,35.33 3 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:35.33,36.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:36.47,39.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:42.2,44.20 3 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:44.20,47.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:48.2,49.68 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:49.68,50.48 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:50.48,52.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:53.3,53.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:53.32,55.23 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:55.23,56.63 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:56.63,58.6 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:59.5,59.53 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:61.4,61.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:64.2,71.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:71.17,73.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:73.8,73.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:73.29,75.36 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:75.36,77.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:78.3,83.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:86.2,86.35 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:86.35,88.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:90.2,97.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:97.16,99.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:101.2,110.28 3 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:110.28,112.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:113.2,124.16 4 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:124.16,126.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:127.2,127.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:133.93,134.35 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:134.35,136.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:138.2,139.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:139.16,141.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:143.2,144.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:144.16,146.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:147.2,147.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:147.17,149.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:151.2,152.33 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:152.33,153.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:153.47,156.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:159.2,160.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:160.16,162.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:164.2,176.26 3 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:176.26,178.23 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:178.23,180.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:181.3,192.5 3 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:195.2,196.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:196.16,198.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:199.2,199.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:22.104,24.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:24.16,26.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:28.2,29.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:29.18,31.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:33.2,33.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:34.13,35.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:36.13,37.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:38.14,39.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:40.16,41.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:42.10,43.95 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:51.67,53.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:57.68,58.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:58.33,60.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:61.2,61.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:67.42,69.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:74.61,76.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:76.26,78.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:79.2,79.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:85.90,86.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:86.49,88.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:90.2,91.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:91.15,93.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:94.2,95.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:95.17,97.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:100.2,103.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:103.16,105.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:107.2,113.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:113.12,115.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:115.18,117.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:118.3,119.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:119.20,121.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:122.3,124.48 3 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:125.8,127.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:129.2,130.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:130.16,132.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:134.2,139.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:145.90,147.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:147.15,149.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:151.2,152.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:152.16,154.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:156.2,157.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:157.16,158.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:158.47,160.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:161.3,161.56 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:164.2,170.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:170.19,173.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:173.8,175.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:176.2,176.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:181.92,183.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:183.16,185.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:187.2,188.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:188.16,190.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:192.2,200.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:200.25,207.28 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:207.28,209.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:210.3,210.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:212.2,212.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:216.93,217.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:217.52,219.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:221.2,222.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:222.15,224.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:226.2,227.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:227.16,229.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:231.2,231.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:231.47,232.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:232.47,234.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:235.3,235.59 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:238.2,241.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:35.127,36.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:36.23,38.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:39.2,40.40 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:40.40,42.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:43.2,43.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:43.37,45.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:46.2,46.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:46.37,48.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:49.2,49.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:52.23,80.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:82.26,140.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:142.92,143.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:143.25,145.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:147.2,148.49 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:148.49,150.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:152.2,152.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:153.17,154.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:154.24,156.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:157.3,158.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:158.17,160.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:161.3,165.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:166.17,167.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:167.22,169.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:170.3,170.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:170.22,172.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:173.3,174.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:174.17,176.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:177.3,181.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:182.16,189.23 7 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:189.23,191.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:192.3,192.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:192.24,194.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:195.3,195.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:195.39,197.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:198.3,207.17 3 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:207.17,209.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:210.3,210.69 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:210.69,212.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:213.3,213.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:214.10,215.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:219.92,220.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:220.25,222.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:224.2,225.49 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:225.49,227.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:229.2,229.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:230.17,232.24 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:232.24,234.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:235.3,236.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:236.17,238.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:239.3,239.59 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:239.59,241.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:242.3,242.81 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:242.81,244.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:245.3,250.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:251.17,253.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:253.22,255.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:256.3,257.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:257.17,259.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:260.3,260.79 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:260.79,262.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:263.3,268.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:269.10,270.66 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:274.91,276.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:276.16,278.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:279.2,279.67 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:279.67,280.76 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:280.76,282.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:285.2,286.52 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:286.52,288.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:289.2,289.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:292.74,294.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:294.16,296.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:297.2,297.62 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:297.62,299.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:300.2,300.68 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:303.109,304.56 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:304.56,306.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:307.2,307.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:307.25,309.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:310.2,310.81 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:310.81,312.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:313.2,313.102 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:313.102,315.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:316.2,316.108 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:316.108,318.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:319.2,319.99 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:319.99,321.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:322.2,322.99 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:322.99,324.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:325.2,325.60 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:325.60,327.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:328.2,328.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:328.34,330.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:331.2,331.114 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:331.114,333.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:334.2,334.66 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:334.66,336.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:337.2,337.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:337.40,339.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:340.2,340.132 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:340.132,342.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:343.2,343.35 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:343.35,345.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:346.2,346.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:349.92,350.103 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:350.103,352.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:354.2,355.52 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:355.52,357.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:358.2,358.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:358.32,360.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:361.2,361.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:364.108,365.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:365.19,367.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:368.2,369.53 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:369.53,371.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:372.2,372.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:372.19,374.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:375.2,375.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:375.39,376.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:376.34,378.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:380.2,380.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:383.66,385.53 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:385.53,387.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:388.2,388.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:388.19,390.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:391.2,391.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:10.101,12.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:12.16,14.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:16.2,18.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:19.16,20.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:21.14,22.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:23.15,24.84 1 0 +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:25.16,26.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:27.10,28.97 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:21.75,23.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:25.41,28.2 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:30.31,37.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:39.38,46.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:48.50,56.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:58.43,70.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:72.80,73.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:73.36,75.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:76.2,76.48 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:76.48,78.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:79.2,79.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:82.97,84.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:84.16,86.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:87.2,88.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:88.16,90.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:91.2,92.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:92.16,94.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:95.2,96.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:96.16,98.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:99.2,99.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:102.104,104.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:104.16,106.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:107.2,108.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:108.16,110.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:111.2,112.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:112.16,114.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:115.2,116.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:116.16,118.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:119.2,119.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:122.96,124.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:124.16,126.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:127.2,128.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:128.19,130.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:131.2,132.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:132.18,134.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:135.2,141.79 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:141.79,143.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:143.17,145.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:146.3,146.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:148.2,148.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:151.77,153.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:153.16,155.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:156.2,157.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:157.19,159.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:160.2,160.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:10.101,12.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:12.16,14.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:16.2,17.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:17.18,19.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:21.2,21.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:22.15,23.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:24.13,25.42 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:26.14,27.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:28.16,29.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:30.16,31.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:32.10,33.102 1 0 diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-01/create-database.stderr.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-01/create-database.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-01/create-database.stdout.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-01/create-database.stdout.log new file mode 100644 index 00000000..4b15bd57 --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-01/create-database.stdout.log @@ -0,0 +1 @@ +CREATE DATABASE diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-01/create-pgvector.stderr.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-01/create-pgvector.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-01/create-pgvector.stdout.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-01/create-pgvector.stdout.log new file mode 100644 index 00000000..d26bad14 --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-01/create-pgvector.stdout.log @@ -0,0 +1 @@ +CREATE EXTENSION diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-01/database-identity.stderr.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-01/database-identity.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-01/database-identity.stdout.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-01/database-identity.stdout.log new file mode 100644 index 00000000..c96bea30 --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-01/database-identity.stdout.log @@ -0,0 +1 @@ +{"database" : "engram_prc_rg_test_8b1d3112a7a95fbb_r1", "schema" : "public", "server_version" : "17.10 (Debian 17.10-1.pgdg12+1)", "user" : "engram"} diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-01/go-test-summary.json b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-01/go-test-summary.json new file mode 100644 index 00000000..434e0a2f --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-01/go-test-summary.json @@ -0,0 +1,40 @@ +{ + "schema_version": 1, + "verdict": "PASS", + "input_path": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-repeat3\\repeat-01\\go-test.stdout.jsonl", + "fail_on_unexpected_skip": true, + "allowed_skip_identities": [], + "counts": { + "packages": 1, + "tests": 1, + "passed": 1, + "failed": 0, + "skipped": 0, + "no_tests": 0, + "zero_tests": 0, + "incomplete": 0, + "unexpected_skips": 0, + "malformed_lines": 0 + }, + "packages": [ + { + "package": "github.com/thebtf/engram/internal/mcp", + "outcome": "pass", + "elapsed_seconds": 4.13, + "last_output": "ok \tgithub.com/thebtf/engram/internal/mcp\t4.121s\tcoverage: 0.1% of statements", + "tests_observed": 1 + } + ], + "tests": [ + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestEC_F1_TagDerivedBackfill_T007", + "outcome": "pass", + "elapsed_seconds": 3.92, + "last_output": "--- PASS: TestEC_F1_TagDerivedBackfill_T007 (3.92s)", + "skip_allowed": false + } + ], + "unexpected_skips": [], + "errors": [] +} diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-01/go-test.stderr.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-01/go-test.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-01/go-test.stdout.jsonl b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-01/go-test.stdout.jsonl new file mode 100644 index 00000000..20d15e54 --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-01/go-test.stdout.jsonl @@ -0,0 +1,16 @@ +{"Time":"2026-07-11T03:34:39.9752342+03:00","Action":"start","Package":"github.com/thebtf/engram/internal/mcp"} +{"Time":"2026-07-11T03:34:40.1488604+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007"} +{"Time":"2026-07-11T03:34:40.1488604+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":"=== RUN TestEC_F1_TagDerivedBackfill_T007\n"} +{"Time":"2026-07-11T03:34:41.1097025+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":"{\"level\":\"warn\",\"error\":\"ERROR: relation \\\"observation_vectors\\\" does not exist (SQLSTATE 42P01)\",\"time\":\"2026-07-11T03:34:41+03:00\",\"message\":\"migration 040: orphan vector cleanup failed (non-fatal)\"}\n"} +{"Time":"2026-07-11T03:34:41.1097025+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":"{\"level\":\"info\",\"garbage_deleted\":0,\"orphan_vectors_deleted\":0,\"time\":\"2026-07-11T03:34:41+03:00\",\"message\":\"migration 040: garbage cleanup complete\"}\n"} +{"Time":"2026-07-11T03:34:41.1192027+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":"{\"level\":\"info\",\"orphan_vectors_deleted\":0,\"time\":\"2026-07-11T03:34:41+03:00\",\"message\":\"migration 041: orphan vector purge complete\"}\n"} +{"Time":"2026-07-11T03:34:41.127704+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":"{\"level\":\"info\",\"patterns_deleted\":0,\"time\":\"2026-07-11T03:34:41+03:00\",\"message\":\"migration 042: low-quality pattern purge complete\"}\n"} +{"Time":"2026-07-11T03:34:41.1642026+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":"{\"level\":\"info\",\"total_deleted\":0,\"time\":\"2026-07-11T03:34:41+03:00\",\"message\":\"migration 043: radical observation cleanup complete\"}\n"} +{"Time":"2026-07-11T03:34:42.4406486+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":"{\"level\":\"warn\",\"error\":\"ERROR: extension \\\"vectorscale\\\" is not available (SQLSTATE 0A000)\",\"time\":\"2026-07-11T03:34:42+03:00\",\"message\":\"migration 109: vectorscale extension not available, skipping DiskANN index\"}\n"} +{"Time":"2026-07-11T03:34:43.6914877+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":"{\"level\":\"debug\",\"connections\":1,\"time\":\"2026-07-11T03:34:43+03:00\",\"message\":\"Connection pool warmed\"}\n"} +{"Time":"2026-07-11T03:34:44.0648665+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":"--- PASS: TestEC_F1_TagDerivedBackfill_T007 (3.92s)\n"} +{"Time":"2026-07-11T03:34:44.0648665+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Elapsed":3.92} +{"Time":"2026-07-11T03:34:44.0648665+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Output":"PASS\n"} +{"Time":"2026-07-11T03:34:44.0793664+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Output":"coverage: 0.1% of statements\n"} +{"Time":"2026-07-11T03:34:44.1048843+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Output":"ok \tgithub.com/thebtf/engram/internal/mcp\t4.121s\tcoverage: 0.1% of statements\n"} +{"Time":"2026-07-11T03:34:44.1048843+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Elapsed":4.13} diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-01/pg-stat-activity-after.stderr.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-01/pg-stat-activity-after.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-01/pg-stat-activity-after.stdout.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-01/pg-stat-activity-after.stdout.log new file mode 100644 index 00000000..fe51488c --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-01/pg-stat-activity-after.stdout.log @@ -0,0 +1 @@ +[] diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-01/pg-stat-activity-before.stderr.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-01/pg-stat-activity-before.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-01/pg-stat-activity-before.stdout.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-01/pg-stat-activity-before.stdout.log new file mode 100644 index 00000000..fe51488c --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-01/pg-stat-activity-before.stdout.log @@ -0,0 +1 @@ +[] diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-01/repeat-summary.json b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-01/repeat-summary.json new file mode 100644 index 00000000..2f5feb26 --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-01/repeat-summary.json @@ -0,0 +1,33 @@ +{ + "repeat": 1, + "verdict": "PASS", + "database": "engram_prc_rg_test_8b1d3112a7a95fbb_r1", + "schema": "public", + "database_schema_identity": "engram_prc_rg_test_8b1d3112a7a95fbb_r1.public", + "database_dsn": "REDACTED_DATABASE_DSN", + "database_create_confirmed": true, + "sequential_execution": { + "package_parallelism": 1, + "test_parallelism": 1 + }, + "race": false, + "connection_budget": 20, + "server_sessions_before": 6, + "server_sessions_after": 6, + "sessions_before": 0, + "sessions_after": 0, + "go_test_exit": 0, + "json_parser_exit": 0, + "coverage_policy": "Targeted", + "coverage_exit": 0, + "cleanup_exit": 0, + "cleanup_status": "PASS", + "required_session_start_execution": { + "schema_version": 1, + "verdict": "NOT_APPLICABLE", + "reason": "only an unfiltered canonical ./... run requires the 12-test session-start execution proof" + }, + "cleanup_summary": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-repeat3\\repeat-01\\cleanup\\cleanup.json", + "errors": [], + "artifact_directory": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-repeat3\\repeat-01" +} diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-01/server-connection-count-after.stderr.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-01/server-connection-count-after.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-01/server-connection-count-after.stdout.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-01/server-connection-count-after.stdout.log new file mode 100644 index 00000000..1e8b3149 --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-01/server-connection-count-after.stdout.log @@ -0,0 +1 @@ +6 diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-01/server-connection-count-before.stderr.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-01/server-connection-count-before.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-01/server-connection-count-before.stdout.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-01/server-connection-count-before.stdout.log new file mode 100644 index 00000000..1e8b3149 --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-01/server-connection-count-before.stdout.log @@ -0,0 +1 @@ +6 diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-01/targeted-coverage.stderr.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-01/targeted-coverage.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-01/targeted-coverage.stdout.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-01/targeted-coverage.stdout.log new file mode 100644 index 00000000..c958686c --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-01/targeted-coverage.stdout.log @@ -0,0 +1,352 @@ +github.com/thebtf/engram/internal/mcp/audit_helpers.go:33: effectiveAuditWriter 0.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:44: isAuditEnabled 0.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:52: runAuditAsync 0.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:77: marshalState 0.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:92: logAuditCreate 0.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:117: logAuditEdit 0.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:142: logAuditDelete 0.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:166: logAuditGeneric 0.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:189: logAuditSupersede 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:30: parseArgs 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:46: coerceString 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:67: coerceInt 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:97: coerceInt64 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:127: coerceFloat64 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:151: coerceBool 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:177: coerceStringSlice 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:204: coerceInt64Slice 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:222: clampToInt 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:236: clampInt64ToInt 0.0% +github.com/thebtf/engram/internal/mcp/context.go:17: extractProjectFromHeader 0.0% +github.com/thebtf/engram/internal/mcp/context.go:22: contextWithProject 0.0% +github.com/thebtf/engram/internal/mcp/context.go:29: ContextWithProject 0.0% +github.com/thebtf/engram/internal/mcp/context.go:35: projectFromContext 0.0% +github.com/thebtf/engram/internal/mcp/context.go:41: contextWithSession 0.0% +github.com/thebtf/engram/internal/mcp/context.go:48: ContextWithSession 0.0% +github.com/thebtf/engram/internal/mcp/context.go:54: sessionFromContext 0.0% +github.com/thebtf/engram/internal/mcp/context.go:61: actorFromContext 0.0% +github.com/thebtf/engram/internal/mcp/health.go:22: NewMCPHealth 0.0% +github.com/thebtf/engram/internal/mcp/health.go:29: RecordRequest 0.0% +github.com/thebtf/engram/internal/mcp/health.go:36: RecordError 0.0% +github.com/thebtf/engram/internal/mcp/health.go:42: rotateWindowIfNeeded 0.0% +github.com/thebtf/engram/internal/mcp/health.go:55: HandleHealth 0.0% +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:28: ruleGovernanceCaptureEnabled 0.0% +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:39: captureActiveRuleIntent 0.0% +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:104: ruleIntentFingerprint 0.0% +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:113: marshalRuleCandidateIntentResponse 0.0% +github.com/thebtf/engram/internal/mcp/server.go:127: NewServer 100.0% +github.com/thebtf/engram/internal/mcp/server.go:141: SetBackfillStatusFunc 0.0% +github.com/thebtf/engram/internal/mcp/server.go:146: SetVersionedDocumentStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:151: SetIssueStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:156: SetMemoryStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:161: SetMetaMemoryIndex 0.0% +github.com/thebtf/engram/internal/mcp/server.go:166: SetHintQueue 0.0% +github.com/thebtf/engram/internal/mcp/server.go:171: SetStateStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:176: SetDirectiveCaptureService 0.0% +github.com/thebtf/engram/internal/mcp/server.go:181: SetBehavioralRulesStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:186: SetRuleGovernanceStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:191: SetRuleInjectionTelemetryStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:195: SetPromotionStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:199: SetGraphStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:204: SetNodesStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:211: SetAuditStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:216: SetPurgeStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:222: SetCandidateStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:228: SetSnapshotStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:234: SetBulkFacade 0.0% +github.com/thebtf/engram/internal/mcp/server.go:240: setTestAuditWriter 0.0% +github.com/thebtf/engram/internal/mcp/server.go:246: setTestMemoryEditor 0.0% +github.com/thebtf/engram/internal/mcp/server.go:252: setTestMemorySignificanceUpdater 0.0% +github.com/thebtf/engram/internal/mcp/server.go:260: SetWriteLintOrchestrator 0.0% +github.com/thebtf/engram/internal/mcp/server.go:269: SetRedactionRules 0.0% +github.com/thebtf/engram/internal/mcp/server.go:274: SetEmbeddingStores 0.0% +github.com/thebtf/engram/internal/mcp/server.go:282: SetRerankClient 0.0% +github.com/thebtf/engram/internal/mcp/server.go:290: SetStatsDB 0.0% +github.com/thebtf/engram/internal/mcp/server.go:297: HandleRequest 0.0% +github.com/thebtf/engram/internal/mcp/server.go:303: ListTools 0.0% +github.com/thebtf/engram/internal/mcp/server.go:332: Version 0.0% +github.com/thebtf/engram/internal/mcp/server.go:383: Run 0.0% +github.com/thebtf/engram/internal/mcp/server.go:427: handleRequest 0.0% +github.com/thebtf/engram/internal/mcp/server.go:461: handleNotification 0.0% +github.com/thebtf/engram/internal/mcp/server.go:473: handleInitialize 0.0% +github.com/thebtf/engram/internal/mcp/server.go:496: buildInstructions 0.0% +github.com/thebtf/engram/internal/mcp/server.go:660: storeMemoryTool 0.0% +github.com/thebtf/engram/internal/mcp/server.go:712: recallMemoryTool 0.0% +github.com/thebtf/engram/internal/mcp/server.go:805: primaryTools 0.0% +github.com/thebtf/engram/internal/mcp/server.go:942: handleToolsList 0.0% +github.com/thebtf/engram/internal/mcp/server.go:1612: handleToolsCall 0.0% +github.com/thebtf/engram/internal/mcp/server.go:1644: sanitizeToolCallArgs 0.0% +github.com/thebtf/engram/internal/mcp/server.go:1656: callTool 0.0% +github.com/thebtf/engram/internal/mcp/server.go:1874: sendResponse 0.0% +github.com/thebtf/engram/internal/mcp/server.go:1884: sendError 0.0% +github.com/thebtf/engram/internal/mcp/server.go:1896: handleFindSimilarObservations 0.0% +github.com/thebtf/engram/internal/mcp/server.go:1927: handleGetMemoryStats 0.0% +github.com/thebtf/engram/internal/mcp/server.go:2055: handleBackfillStatus 0.0% +github.com/thebtf/engram/internal/mcp/server.go:2071: handleCheckSystemHealth 0.0% +github.com/thebtf/engram/internal/mcp/server.go:2216: handleAnalyzeSearchPatterns 0.0% +github.com/thebtf/engram/internal/mcp/server.go:2246: handleSearchSessions 0.0% +github.com/thebtf/engram/internal/mcp/server.go:2251: handleListSessions 0.0% +github.com/thebtf/engram/internal/mcp/tools_admin.go:18: buildAdminTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_admin.go:68: adminActionsForEnv 33.3% +github.com/thebtf/engram/internal/mcp/tools_admin.go:80: vnextEnabled 0.0% +github.com/thebtf/engram/internal/mcp/tools_admin.go:84: handleAdmin 0.0% +github.com/thebtf/engram/internal/mcp/tools_admin.go:120: handlePurgeProject 0.0% +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:27: ambientHintsEnabledFromEnv 0.0% +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:32: ambientHintsTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:48: handleGetAmbientHints 0.0% +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:86: normalizeAmbientHintsToolLimit 0.0% +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:96: ambientHintItems 0.0% +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:114: errMissingSessionID 0.0% +github.com/thebtf/engram/internal/mcp/tools_brief.go:31: handleGetMemoryBrief 0.0% +github.com/thebtf/engram/internal/mcp/tools_brief.go:107: memoryBriefUsesPrincipalScope 0.0% +github.com/thebtf/engram/internal/mcp/tools_brief.go:115: handlePrincipalMemoryBrief 0.0% +github.com/thebtf/engram/internal/mcp/tools_brief.go:259: truncateBriefContent 0.0% +github.com/thebtf/engram/internal/mcp/tools_brief.go:270: filterInjectionByScope 0.0% +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:25: bulkOpsTools 0.0% +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:95: handleBulkPromote 0.0% +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:154: handleBulkDelete 0.0% +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:211: handleBulkSupersede 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:31: candidateItemFromDomain 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:51: newCandidateReviewSnapshot 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:59: requireCandidateReviewSnapshot 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:68: candidateTools 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:165: handleListCandidates 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:208: handleGetCandidate 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:239: handlePromoteCandidate 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:348: handleRejectCandidate 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:402: handleSupersedeCandidate 0.0% +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:34: codeIntelEnabled 0.0% +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:42: SetCodeChunkStore 0.0% +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:48: codebaseSearchTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:79: codebaseStatusTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:100: handleCodebaseSearch 0.0% +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:194: handleCodebaseStatus 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:21: getVault 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:35: credentialStore 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:49: handleStoreCredential 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:130: handleGetCredential 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:192: handleListCredentials 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:243: handleDeleteCredential 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:302: handleVaultStatus 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:338: expandTagHierarchy 0.0% +github.com/thebtf/engram/internal/mcp/tools_directives.go:16: directivesCaptureEnabledFromEnv 0.0% +github.com/thebtf/engram/internal/mcp/tools_directives.go:20: rememberDirectiveTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_directives.go:38: currentDirectiveCaptureService 0.0% +github.com/thebtf/engram/internal/mcp/tools_directives.go:48: handleRememberDirective 0.0% +github.com/thebtf/engram/internal/mcp/tools_directives.go:72: parseRememberDirectiveArgs 0.0% +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:10: handleDocsConsolidated 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents.go:15: handleListCollections 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents.go:61: handleListDocuments 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents.go:121: handleGetDocument 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents.go:165: handleRemoveDocument 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents.go:197: handleIngestDocument 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents.go:235: handleSearchCollection 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:15: handleDocCreate 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:61: handleDocRead 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:117: handleDocUpdate 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:122: handleDocList 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:175: handleDocHistory 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:232: handleDocComment 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:19: SetExperienceProvider 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:23: experienceHistoryTools 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:40: experienceHistoryReadSchema 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:65: experienceHistoryDetailSchema 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:82: experienceHistoryTriggerEnum 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:91: handleExperienceHistoryRead 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:103: handleExperienceHistoryDetail 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:115: parseExperienceHistoryReadArgs 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:142: parseExperienceHistoryDetailArgs 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:157: experienceHistoryTriggersFromArgs 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:180: marshalExperienceHistory 0.0% +github.com/thebtf/engram/internal/mcp/tools_feedback.go:12: handleFeedbackConsolidated 0.0% +github.com/thebtf/engram/internal/mcp/tools_feedback.go:36: handleSetSessionOutcome 0.0% +github.com/thebtf/engram/internal/mcp/tools_governance.go:27: governanceTools 0.0% +github.com/thebtf/engram/internal/mcp/tools_governance.go:98: handleListSnapshots 0.0% +github.com/thebtf/engram/internal/mcp/tools_governance.go:167: handleRollbackSnapshot 0.0% +github.com/thebtf/engram/internal/mcp/tools_governance.go:215: handlePinSnapshot 0.0% +github.com/thebtf/engram/internal/mcp/tools_governance.go:258: handleRedactionRulesStatus 0.0% +github.com/thebtf/engram/internal/mcp/tools_governance.go:284: resolveGovernanceActor 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:64: handleGraph 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:100: graphAddEdge 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:216: mcpGraphEndpointExists 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:243: mcpGraphEdgeAlreadyExists 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:276: graphAddNode 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:317: graphRemoveEdge 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:332: graphGetEdges 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:397: filterEdgesByNodeType 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:457: graphTraverse 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:480: graphFindPath 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:502: graphSynonyms 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:23: graphCreateEdgeWithGuards 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:80: graphEndpointExistsWithGuards 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:114: graphDuplicateEdgeExists 0.0% +github.com/thebtf/engram/internal/mcp/tools_ingest.go:25: handleIngest 0.0% +github.com/thebtf/engram/internal/mcp/tools_ingest.go:43: ingestDocument 0.0% +github.com/thebtf/engram/internal/mcp/tools_instincts.go:20: handleImportInstincts 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:19: issuesToolSchema 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:109: validateIssueActionParams 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:143: handleIssues 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:189: resolveSourceProject 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:205: handleIssueCreate 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:250: handleIssueList 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:311: handleIssueGet 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:344: handleIssueUpdate 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:382: handleIssueComment 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:408: handleIssueReopen 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:425: handleIssueClose 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:22: handleLifecycle 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:48: lifecycleInfo 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:87: lifecyclePromote 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:118: lifecycleDemote 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:149: lifecycleSetConfidence 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:172: lifecycleSetDefeasibility 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:191: lifecycleSleepStatus 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:197: lifecycleDecayPreview 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:233: marshalJSON 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:35: vnextFEnabled 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:42: isValidPrivacyScope 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:54: derivePrivacyScopeFromLegacy 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:82: deriveLegacyScopeFromPrivacy 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:93: applyPrincipalMemoryMetadata 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:135: addPrincipalMemoryFields 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:161: newScopedWriteLintMemoryStore 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:172: writeLintVisibilityCaller 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:186: writeLintVisibilityOptions 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:192: scopedWriteLintMemoryStore 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:202: filterVisibleWriteGateCandidates 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:214: domainManageAllowed 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:218: List 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:272: writeLintVisibilityFetchLimit 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:286: Get 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:297: Create 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:301: Update 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:305: MarkSuperseded 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:319: effectiveMemoryEditor 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:329: isValidStoreObservationType 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:354: handleStoreMemory 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1111: handleEditMemory 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1218: computeTTLDays 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1258: truncateTitle 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1270: keepRecallMemory 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1280: keepRecallMemoryFilters 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1342: handleRecallMemory 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1690: staleAdvisory 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1700: marshalWithStaleAdvisory 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1727: Rank 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1751: handleRecallMemoryHybrid 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:2252: handleRateMemory 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:2281: handleSuppressMemory 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:17: SetDomainRegistryService 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:21: checkDomainWriteMCP 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:43: addDomainWriteDecisionFields 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:51: marshalStoreMemoryAugmented 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:26: newMemoryStoreSignificanceUpdater 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:33: s6OutcomeEnabledFromEnv 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:37: effectiveMemorySignificanceUpdater 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:47: currentMemorySignificanceUpdater 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:58: rateMemorySignificanceTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:74: handleRateMemorySignificance 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:109: RateMemorySignificance 0.0% +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:18: s2MetaMemoryEnabled 0.0% +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:22: knowAboutTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:39: handleKnowAbout 0.0% +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:104: parseKnowAboutLimit 0.0% +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:118: summarizeMetaIndexTags 0.0% +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:153: summarizeMetaIndexDateRange 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:23: SetPrincipalMemoryQueryService 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:27: principalMemoryQueryTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:52: handleQueryPrincipalMemory 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:134: principalMemoryQueryCaller 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:149: parsePrincipalMemoryQueryLimit 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:160: principalMemoryQueryText 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:167: parsePrincipalMemoryQueryVisibility 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:179: parsePrincipalMemoryQueryOffset 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:190: parsePrincipalMemoryQueryInt 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:215: parsePrincipalMemoryQueryBool 0.0% +github.com/thebtf/engram/internal/mcp/tools_recall.go:28: handleRecall 0.0% +github.com/thebtf/engram/internal/mcp/tools_recall.go:125: parseRecallIncludedPrincipals 0.0% +github.com/thebtf/engram/internal/mcp/tools_recall.go:165: appendRecallIncludedPrincipalMemories 0.0% +github.com/thebtf/engram/internal/mcp/tools_recall.go:223: recallIncludeTargetMatchesCaller 0.0% +github.com/thebtf/engram/internal/mcp/tools_recall.go:231: recallPrincipalQueryItemToMemory 0.0% +github.com/thebtf/engram/internal/mcp/tools_recall.go:247: handleRecallSearch 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:20: currentReviewLoopCandidateLister 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:30: reviewLoopCandidateTools 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:65: reviewLoopReadSchema 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:78: reviewPacketIDSchema 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:91: handleReviewMetricsRead 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:110: handleReviewQueueRead 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:140: handleReviewPacketDetail 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:151: handleReviewPacketPreviewAction 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:167: handleReviewPacketApplyAction 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:189: parseReviewLoopReadArgs 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:212: reviewLoopMCPPacketTypeSupported 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:217: reviewLoopActionFromArgs 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:225: reviewLoopReasonFromArgs 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:233: loadReviewPacketCandidate 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:256: applyReviewPacketPreserve 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:278: applyReviewPacketSuppress 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:296: reviewLoopMemoryFromCandidate 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:320: filterRiskyMCPReviewCandidates 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:330: marshalReviewLoop 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:17: ruleGovernanceReadTools 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:126: handleRuleGovernanceHealth 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:176: handleRuleGovernanceQueue 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:233: handleRuleGovernanceSnapshots 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:278: handleRuleGovernanceUsefulness 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:338: handleRuleGovernanceTransition 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:373: handleRuleGovernancePinSnapshot 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:406: handleRuleGovernanceRollback 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:483: requireRuleGovernanceReadAccess 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:495: requireRuleGovernanceProjectOrAdmin 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:505: ruleGovernanceCallerIsAdmin 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:510: requireRuleGovernanceAdminAccess 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:518: redactRuleGovernanceEvidenceHandles 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:535: redactRuleGovernanceEvidenceHandle 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:553: ruleGovernanceEvidenceHandleHasSensitiveText 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:559: isCanonicalRuleGovernanceEvidenceHandle 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:580: isSafeRuleGovernanceEvidenceID 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:594: parseRuleGovernanceTransitionRequest 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:604: parseRuleGovernanceSince 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:623: boundedRuleGovernanceLimit 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:634: formatRuleGovernanceTime 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:641: formatRuleGovernanceTimePtr 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:649: stringRuleCandidateStatusCounts 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:657: stringRuleVersionStateCounts 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:665: stringRuleArbiterRunStatusCounts 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:673: stringRuleInjectionEventTypeCounts 0.0% +github.com/thebtf/engram/internal/mcp/tools_rules.go:17: handleStoreRule 0.0% +github.com/thebtf/engram/internal/mcp/tools_rules.go:133: handleListRules 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:22: handleSettingsConsolidated 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:51: SetSettingsStore 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:57: settingsStore 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:67: isSecretSettingKey 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:74: requireAdmin 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:85: handleSetSetting 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:145: handleGetSetting 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:181: handleListSettings 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:216: handleDeleteSetting 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:35: resumeScopesFromFields 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:52: stateTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:82: setStateTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:142: handleGetState 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:219: handleSetState 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:274: decodeSessionStateForWrite 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:292: validateSessionStateBudget 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:303: validateNativeResumePacket 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:349: decodeProjectStateForWrite 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:364: requireStateObject 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:383: requireNestedObject 0.0% +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:10: handleStoreConsolidated 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:21: SetTemporalTruthProvider 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:25: temporalTruthEnabledFromEnv 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:30: temporalTruthTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:39: temporalTruthRefreshTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:48: temporalTruthRefreshSchema 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:58: temporalTruthSchema 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:72: currentTemporalTruthProvider 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:82: handleTemporalTruth 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:102: handleTemporalTruthRefresh 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:122: parseTemporalTruthArgs 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:151: parseTemporalTruthRefreshProject 0.0% +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:10: handleVaultConsolidated 0.0% +total: (statements) 0.1% diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-02/assert-go-test-json.stderr.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-02/assert-go-test-json.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-02/assert-go-test-json.stdout.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-02/assert-go-test-json.stdout.log new file mode 100644 index 00000000..4e182f16 --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-02/assert-go-test-json.stdout.log @@ -0,0 +1,2 @@ +go test JSON verdict=PASS packages=1 tests=1 passed=1 failed=0 skipped=0 unexpected_skips=0 malformed=0 +summary=D:\Dev\engram\.w\t007-current-contract\.agent\reports\evidence\production-ready\t007-compat\t007-maker-focused-repeat3\repeat-02\go-test-summary.json diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-02/cleanup-process.stderr.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-02/cleanup-process.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-02/cleanup-process.stdout.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-02/cleanup-process.stdout.log new file mode 100644 index 00000000..7678fce2 --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-02/cleanup-process.stdout.log @@ -0,0 +1,2 @@ +cleanup verdict=PASS database=engram_prc_rg_test_8b1d3112a7a95fbb_r2 schema=public terminated_sessions=0 remaining_database_count=0 +summary=D:\Dev\engram\.w\t007-current-contract\.agent\reports\evidence\production-ready\t007-compat\t007-maker-focused-repeat3\repeat-02\cleanup\cleanup.json diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-02/cleanup/cleanup.json b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-02/cleanup/cleanup.json new file mode 100644 index 00000000..b941a7ab --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-02/cleanup/cleanup.json @@ -0,0 +1,170 @@ +{ + "schema_version": 1, + "run_id": "t007-maker-focused-repeat3-repeat-2", + "timestamp": "2026-07-11T00:35:05.5100813+00:00", + "verdict": "PASS", + "database": "engram_prc_rg_test_8b1d3112a7a95fbb_r2", + "schema": "public", + "database_schema_identity": "engram_prc_rg_test_8b1d3112a7a95fbb_r2.public", + "admin_dsn": "postgres://engram:REDACTED@127.0.0.1:55432/postgres?sslmode=disable", + "postgres_container": "engram-prc-postgres", + "cleanup_status": "PASS", + "cleanup_attempted": true, + "database_existed_before": true, + "absence_verified": true, + "terminated_sessions": 0, + "remaining_database_count": 0, + "commands": [ + { + "name": "database-exists-before-cleanup", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT count(*) FROM pg_database WHERE datname = 'engram_prc_rg_test_8b1d3112a7a95fbb_r2';" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT count(*) FROM pg_database WHERE datname = 'engram_prc_rg_test_8b1d3112a7a95fbb_r2';", + "started_at": "2026-07-11T00:35:02.8283166+00:00", + "finished_at": "2026-07-11T00:35:03.3465720+00:00", + "duration_seconds": 0.518, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-repeat3\\repeat-02\\cleanup\\database-exists-before.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-repeat3\\repeat-02\\cleanup\\database-exists-before.stderr.log" + }, + { + "name": "pg-stat-activity-before-cleanup", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT COALESCE(json_agg(row_to_json(s)), '[]'::json)::text FROM (SELECT pid, usename, datname, state, backend_type, application_name, client_addr::text AS client_addr, wait_event_type, wait_event, query_start FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_8b1d3112a7a95fbb_r2' ORDER BY pid) AS s;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT COALESCE(json_agg(row_to_json(s)), '[]'::json)::text FROM (SELECT pid, usename, datname, state, backend_type, application_name, client_addr::text AS client_addr, wait_event_type, wait_event, query_start FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_8b1d3112a7a95fbb_r2' ORDER BY pid) AS s;", + "started_at": "2026-07-11T00:35:03.4122443+00:00", + "finished_at": "2026-07-11T00:35:04.0989418+00:00", + "duration_seconds": 0.687, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-repeat3\\repeat-02\\cleanup\\pg-stat-activity-before.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-repeat3\\repeat-02\\cleanup\\pg-stat-activity-before.stderr.log" + }, + { + "name": "terminate-database-sessions", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT COALESCE(json_agg(row_to_json(s)), '[]'::json)::text FROM (SELECT pid, pg_terminate_backend(pid) AS terminated FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_8b1d3112a7a95fbb_r2' AND pid <> pg_backend_pid() ORDER BY pid) AS s;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT COALESCE(json_agg(row_to_json(s)), '[]'::json)::text FROM (SELECT pid, pg_terminate_backend(pid) AS terminated FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_8b1d3112a7a95fbb_r2' AND pid <> pg_backend_pid() ORDER BY pid) AS s;", + "started_at": "2026-07-11T00:35:04.1053376+00:00", + "finished_at": "2026-07-11T00:35:04.5786709+00:00", + "duration_seconds": 0.473, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-repeat3\\repeat-02\\cleanup\\terminate-sessions.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-repeat3\\repeat-02\\cleanup\\terminate-sessions.stderr.log" + }, + { + "name": "drop-fresh-database", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "DROP DATABASE IF EXISTS \"engram_prc_rg_test_8b1d3112a7a95fbb_r2\" WITH (FORCE);" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c DROP DATABASE IF EXISTS \"engram_prc_rg_test_8b1d3112a7a95fbb_r2\" WITH (FORCE);", + "started_at": "2026-07-11T00:35:04.5879948+00:00", + "finished_at": "2026-07-11T00:35:05.0887240+00:00", + "duration_seconds": 0.501, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-repeat3\\repeat-02\\cleanup\\drop-database.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-repeat3\\repeat-02\\cleanup\\drop-database.stderr.log" + }, + { + "name": "verify-database-absent", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT count(*) FROM pg_database WHERE datname = 'engram_prc_rg_test_8b1d3112a7a95fbb_r2';" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT count(*) FROM pg_database WHERE datname = 'engram_prc_rg_test_8b1d3112a7a95fbb_r2';", + "started_at": "2026-07-11T00:35:05.0920964+00:00", + "finished_at": "2026-07-11T00:35:05.5034749+00:00", + "duration_seconds": 0.411, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-repeat3\\repeat-02\\cleanup\\verify-database-absent.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-repeat3\\repeat-02\\cleanup\\verify-database-absent.stderr.log" + } + ], + "errors": [] +} diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-02/cleanup/database-exists-before.stderr.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-02/cleanup/database-exists-before.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-02/cleanup/database-exists-before.stdout.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-02/cleanup/database-exists-before.stdout.log new file mode 100644 index 00000000..d00491fd --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-02/cleanup/database-exists-before.stdout.log @@ -0,0 +1 @@ +1 diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-02/cleanup/drop-database.stderr.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-02/cleanup/drop-database.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-02/cleanup/drop-database.stdout.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-02/cleanup/drop-database.stdout.log new file mode 100644 index 00000000..ca12dce0 --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-02/cleanup/drop-database.stdout.log @@ -0,0 +1 @@ +DROP DATABASE diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-02/cleanup/pg-stat-activity-before.stderr.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-02/cleanup/pg-stat-activity-before.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-02/cleanup/pg-stat-activity-before.stdout.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-02/cleanup/pg-stat-activity-before.stdout.log new file mode 100644 index 00000000..fe51488c --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-02/cleanup/pg-stat-activity-before.stdout.log @@ -0,0 +1 @@ +[] diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-02/cleanup/terminate-sessions.stderr.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-02/cleanup/terminate-sessions.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-02/cleanup/terminate-sessions.stdout.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-02/cleanup/terminate-sessions.stdout.log new file mode 100644 index 00000000..fe51488c --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-02/cleanup/terminate-sessions.stdout.log @@ -0,0 +1 @@ +[] diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-02/cleanup/verify-database-absent.stderr.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-02/cleanup/verify-database-absent.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-02/cleanup/verify-database-absent.stdout.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-02/cleanup/verify-database-absent.stdout.log new file mode 100644 index 00000000..573541ac --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-02/cleanup/verify-database-absent.stdout.log @@ -0,0 +1 @@ +0 diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-02/connection-count-after.stderr.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-02/connection-count-after.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-02/connection-count-after.stdout.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-02/connection-count-after.stdout.log new file mode 100644 index 00000000..573541ac --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-02/connection-count-after.stdout.log @@ -0,0 +1 @@ +0 diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-02/connection-count-before.stderr.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-02/connection-count-before.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-02/connection-count-before.stdout.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-02/connection-count-before.stdout.log new file mode 100644 index 00000000..573541ac --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-02/connection-count-before.stdout.log @@ -0,0 +1 @@ +0 diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-02/coverage.out b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-02/coverage.out new file mode 100644 index 00000000..52335d8a --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-02/coverage.out @@ -0,0 +1,3472 @@ +mode: atomic +github.com/thebtf/engram/internal/mcp/audit_helpers.go:33.53,34.30 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:34.30,36.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:37.2,37.25 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:37.25,39.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:40.2,40.12 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:44.28,46.2 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:52.83,53.12 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:53.12,54.16 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:54.16,55.32 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:55.32,61.5 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:63.3,65.33 3 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:65.33,71.4 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:77.54,78.14 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:78.14,80.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:81.2,82.16 2 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:82.16,85.3 2 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:86.2,87.13 2 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:92.91,93.23 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:93.23,95.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:96.2,97.15 2 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:97.15,99.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:100.2,105.65 4 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:105.65,113.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:117.95,118.23 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:118.23,120.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:121.2,122.15 2 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:122.15,124.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:125.2,129.65 5 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:129.65,138.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:142.87,143.23 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:143.23,145.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:146.2,147.15 2 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:147.15,149.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:150.2,153.65 4 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:153.65,161.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:166.96,167.23 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:167.23,169.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:170.2,171.15 2 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:171.15,173.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:174.2,177.63 4 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:177.63,185.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:189.97,190.23 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:190.23,192.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:193.2,194.15 2 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:194.15,196.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:197.2,200.68 4 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:200.68,208.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:30.62,31.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:31.20,33.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:34.2,35.49 2 0 +github.com/thebtf/engram/internal/mcp/coerce.go:35.49,37.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:38.2,38.14 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:38.14,40.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:41.2,41.15 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:46.52,47.14 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:47.14,49.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:50.2,50.23 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:51.14,52.11 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:53.19,54.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:55.15,56.45 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:57.12,58.31 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:59.10,60.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:67.43,68.14 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:68.14,70.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:71.2,71.23 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:72.15,73.23 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:74.19,75.38 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:75.38,77.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:78.3,78.40 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:78.40,80.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:81.3,81.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:82.14,83.56 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:83.56,85.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:86.3,86.54 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:86.54,88.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:89.3,89.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:90.10,91.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:97.49,98.14 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:98.14,100.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:101.2,101.23 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:102.15,103.18 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:104.19,105.38 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:105.38,107.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:108.3,108.40 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:108.40,110.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:111.3,111.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:112.14,113.56 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:113.56,115.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:116.3,116.54 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:116.54,118.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:119.3,119.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:120.10,121.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:127.55,128.14 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:128.14,130.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:131.2,131.23 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:132.15,133.11 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:134.19,135.40 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:135.40,137.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:138.3,138.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:139.14,140.54 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:140.54,142.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:143.3,143.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:144.10,145.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:151.46,152.14 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:152.14,154.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:155.2,155.23 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:156.12,157.11 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:158.14,159.54 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:159.54,161.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:162.3,162.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:163.15,164.16 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:165.19,166.40 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:166.40,168.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:169.3,169.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:170.10,171.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:177.40,178.14 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:178.14,180.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:181.2,181.23 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:182.13,184.26 2 0 +github.com/thebtf/engram/internal/mcp/coerce.go:184.26,185.36 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:185.36,187.5 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:189.3,189.16 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:190.16,191.11 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:192.14,193.14 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:193.14,195.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:196.3,196.13 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:197.10,198.13 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:204.38,205.14 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:205.14,207.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:208.2,209.9 2 0 +github.com/thebtf/engram/internal/mcp/coerce.go:209.9,211.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:212.2,213.27 2 0 +github.com/thebtf/engram/internal/mcp/coerce.go:213.27,214.42 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:214.42,216.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:218.2,218.15 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:222.32,223.39 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:223.39,225.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:226.2,226.30 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:226.30,228.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:229.2,229.30 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:229.30,231.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:232.2,232.15 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:236.35,237.28 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:237.28,239.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:240.2,240.28 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:240.28,242.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:243.2,243.15 1 0 +github.com/thebtf/engram/internal/mcp/context.go:17.55,19.2 1 0 +github.com/thebtf/engram/internal/mcp/context.go:22.78,24.2 1 0 +github.com/thebtf/engram/internal/mcp/context.go:29.78,31.2 1 0 +github.com/thebtf/engram/internal/mcp/context.go:35.53,38.2 2 0 +github.com/thebtf/engram/internal/mcp/context.go:41.80,43.2 1 0 +github.com/thebtf/engram/internal/mcp/context.go:48.80,50.2 1 0 +github.com/thebtf/engram/internal/mcp/context.go:54.53,57.2 2 0 +github.com/thebtf/engram/internal/mcp/context.go:61.51,62.43 1 0 +github.com/thebtf/engram/internal/mcp/context.go:62.43,64.3 1 0 +github.com/thebtf/engram/internal/mcp/context.go:65.2,65.16 1 0 +github.com/thebtf/engram/internal/mcp/health.go:22.32,26.2 3 0 +github.com/thebtf/engram/internal/mcp/health.go:29.37,33.2 3 0 +github.com/thebtf/engram/internal/mcp/health.go:36.35,40.2 3 0 +github.com/thebtf/engram/internal/mcp/health.go:42.44,45.25 3 0 +github.com/thebtf/engram/internal/mcp/health.go:45.25,47.50 1 0 +github.com/thebtf/engram/internal/mcp/health.go:47.50,50.4 2 0 +github.com/thebtf/engram/internal/mcp/health.go:55.74,60.16 5 0 +github.com/thebtf/engram/internal/mcp/health.go:60.16,62.3 1 0 +github.com/thebtf/engram/internal/mcp/health.go:63.2,71.4 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:28.42,29.65 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:29.65,32.3 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:33.2,33.40 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:33.40,35.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:36.2,36.14 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:39.120,40.69 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:40.69,42.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:43.2,44.19 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:44.19,46.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:47.2,48.17 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:48.17,50.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:51.2,52.59 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:52.59,54.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:55.2,56.20 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:56.20,58.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:59.2,60.17 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:60.17,62.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:63.2,64.21 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:64.21,66.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:67.2,68.22 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:68.22,70.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:71.2,72.23 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:72.23,74.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:76.2,98.19 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:98.19,100.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:101.2,101.66 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:104.52,106.29 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:106.29,108.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:109.2,110.46 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:113.113,123.27 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:123.27,125.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:126.2,127.16 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:127.16,129.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:130.2,130.25 1 0 +github.com/thebtf/engram/internal/mcp/server.go:127.44,138.2 1 1 +github.com/thebtf/engram/internal/mcp/server.go:141.64,143.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:146.78,148.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:151.53,153.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:156.55,158.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:161.58,163.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:166.62,168.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:171.50,173.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:176.78,178.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:181.74,183.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:186.71,189.2 2 0 +github.com/thebtf/engram/internal/mcp/server.go:191.85,193.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:195.61,197.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:199.49,201.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:204.54,206.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:211.53,213.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:216.53,218.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:222.61,224.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:228.59,230.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:234.51,236.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:240.52,242.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:246.55,248.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:252.82,254.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:260.70,262.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:269.68,271.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:274.87,277.2 2 0 +github.com/thebtf/engram/internal/mcp/server.go:282.60,284.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:290.45,292.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:297.77,299.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:303.37,313.38 3 0 +github.com/thebtf/engram/internal/mcp/server.go:313.38,315.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:316.2,317.9 2 0 +github.com/thebtf/engram/internal/mcp/server.go:317.9,319.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:320.2,321.9 2 0 +github.com/thebtf/engram/internal/mcp/server.go:321.9,323.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:324.2,325.9 2 0 +github.com/thebtf/engram/internal/mcp/server.go:325.9,327.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:328.2,328.14 1 0 +github.com/thebtf/engram/internal/mcp/server.go:332.35,334.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:383.49,387.12 3 0 +github.com/thebtf/engram/internal/mcp/server.go:387.12,388.22 1 0 +github.com/thebtf/engram/internal/mcp/server.go:388.22,389.11 1 0 +github.com/thebtf/engram/internal/mcp/server.go:390.22,392.11 2 0 +github.com/thebtf/engram/internal/mcp/server.go:393.12,393.12 0 0 +github.com/thebtf/engram/internal/mcp/server.go:396.4,397.18 2 0 +github.com/thebtf/engram/internal/mcp/server.go:397.18,398.13 1 0 +github.com/thebtf/engram/internal/mcp/server.go:401.4,402.61 2 0 +github.com/thebtf/engram/internal/mcp/server.go:402.61,404.13 2 0 +github.com/thebtf/engram/internal/mcp/server.go:407.4,407.55 1 0 +github.com/thebtf/engram/internal/mcp/server.go:407.55,409.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:411.3,411.28 1 0 +github.com/thebtf/engram/internal/mcp/server.go:414.2,414.9 1 0 +github.com/thebtf/engram/internal/mcp/server.go:415.20,416.19 1 0 +github.com/thebtf/engram/internal/mcp/server.go:417.25,418.17 1 0 +github.com/thebtf/engram/internal/mcp/server.go:418.17,420.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:421.3,421.13 1 0 +github.com/thebtf/engram/internal/mcp/server.go:427.77,428.19 1 0 +github.com/thebtf/engram/internal/mcp/server.go:428.19,431.3 2 0 +github.com/thebtf/engram/internal/mcp/server.go:433.2,433.20 1 0 +github.com/thebtf/engram/internal/mcp/server.go:434.20,435.33 1 0 +github.com/thebtf/engram/internal/mcp/server.go:436.20,437.32 1 0 +github.com/thebtf/engram/internal/mcp/server.go:438.20,439.37 1 0 +github.com/thebtf/engram/internal/mcp/server.go:443.24,444.93 1 0 +github.com/thebtf/engram/internal/mcp/server.go:445.34,446.101 1 0 +github.com/thebtf/engram/internal/mcp/server.go:447.22,448.91 1 0 +github.com/thebtf/engram/internal/mcp/server.go:449.29,450.120 1 0 +github.com/thebtf/engram/internal/mcp/server.go:451.10,456.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:461.51,462.20 1 0 +github.com/thebtf/engram/internal/mcp/server.go:463.50,464.70 1 0 +github.com/thebtf/engram/internal/mcp/server.go:465.46,466.79 1 0 +github.com/thebtf/engram/internal/mcp/server.go:467.10,468.80 1 0 +github.com/thebtf/engram/internal/mcp/server.go:473.59,485.63 2 0 +github.com/thebtf/engram/internal/mcp/server.go:485.63,487.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:489.2,493.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:496.45,503.33 3 0 +github.com/thebtf/engram/internal/mcp/server.go:503.33,505.57 2 0 +github.com/thebtf/engram/internal/mcp/server.go:505.57,506.76 1 0 +github.com/thebtf/engram/internal/mcp/server.go:506.76,507.13 1 0 +github.com/thebtf/engram/internal/mcp/server.go:509.4,509.18 1 0 +github.com/thebtf/engram/internal/mcp/server.go:509.18,511.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:511.10,513.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:514.4,518.11 5 0 +github.com/thebtf/engram/internal/mcp/server.go:522.2,522.19 1 0 +github.com/thebtf/engram/internal/mcp/server.go:660.29,683.21 2 0 +github.com/thebtf/engram/internal/mcp/server.go:683.21,689.3 5 0 +github.com/thebtf/engram/internal/mcp/server.go:690.2,699.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:712.30,765.49 3 0 +github.com/thebtf/engram/internal/mcp/server.go:765.49,789.3 5 0 +github.com/thebtf/engram/internal/mcp/server.go:790.2,799.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:805.40,936.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:942.58,1048.35 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1048.35,1077.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1080.2,1080.33 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1080.33,1090.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1093.2,1093.26 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1093.26,1123.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1124.2,1124.80 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1124.80,1126.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1127.2,1127.55 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1127.55,1129.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1130.2,1130.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1130.38,1132.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1134.2,1134.25 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1134.25,1136.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1138.2,1138.33 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1138.33,1140.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1141.2,1141.69 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1141.69,1143.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1144.2,1144.75 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1144.75,1146.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1148.2,1148.27 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1148.27,1165.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1168.2,1168.76 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1168.76,1191.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1195.2,1195.48 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1195.48,1197.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1201.2,1201.47 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1201.47,1203.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1205.2,1205.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1205.38,1207.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1212.2,1212.21 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1212.21,1214.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1228.2,1228.51 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1228.51,1230.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1233.2,1233.56 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1233.56,1235.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1238.2,1238.71 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1238.71,1298.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1302.2,1302.104 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1302.104,1321.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1324.2,1324.72 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1324.72,1333.154 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1333.154,1334.26 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1334.26,1336.8 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1337.7,1337.16 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1338.35,1340.26 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1340.26,1342.8 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1343.7,1343.18 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1371.2,1371.26 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1371.26,1390.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1393.2,1393.28 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1393.28,1443.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1446.2,1446.28 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1446.28,1478.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1481.2,1481.37 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1481.37,1561.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1564.2,1568.23 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1568.23,1570.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1572.2,1588.57 3 0 +github.com/thebtf/engram/internal/mcp/server.go:1588.57,1591.29 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1591.29,1593.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1594.3,1594.27 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1594.27,1595.29 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1595.29,1597.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1601.2,1607.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1612.79,1614.60 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1614.60,1620.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1622.2,1623.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1623.16,1631.3 3 0 +github.com/thebtf/engram/internal/mcp/server.go:1633.2,1641.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1644.69,1645.34 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1645.34,1647.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1648.2,1649.22 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1649.22,1651.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1652.2,1652.37 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1656.99,1658.14 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1659.16,1660.35 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1661.15,1662.46 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1663.18,1664.49 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1665.15,1666.46 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1667.18,1668.49 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1669.14,1670.45 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1671.15,1672.34 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1676.2,1676.14 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1677.35,1678.52 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1679.26,1680.37 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1681.20,1682.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1683.20,1684.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1685.16,1686.35 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1687.29,1688.40 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1689.33,1690.50 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1691.25,1692.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1693.23,1694.41 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1696.26,1697.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1698.24,1699.42 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1700.22,1701.40 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1702.25,1703.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1704.27,1705.45 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1706.25,1707.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1709.30,1710.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1711.28,1712.42 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1713.17,1714.40 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1715.20,1716.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1717.20,1718.45 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1719.20,1720.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1722.20,1723.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1724.18,1725.36 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1726.20,1727.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1728.18,1729.36 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1730.21,1731.39 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1732.21,1733.39 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1734.26,1735.44 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1736.25,1737.34 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1738.26,1739.44 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1740.24,1741.42 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1742.26,1743.44 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1744.27,1745.45 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1746.22,1747.40 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1748.19,1749.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1750.15,1751.34 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1752.16,1753.35 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1755.21,1756.44 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1757.19,1758.42 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1759.20,1760.44 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1761.22,1762.45 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1763.22,1764.40 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1765.23,1766.41 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1767.20,1768.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1769.32,1770.49 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1771.19,1772.37 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1773.19,1774.37 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1775.33,1776.50 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1777.35,1778.52 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1779.24,1780.42 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1781.32,1782.49 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1783.28,1784.46 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1785.21,1786.39 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1787.34,1788.51 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1789.25,1790.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1791.29,1792.46 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1793.26,1794.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1795.27,1796.44 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1798.25,1799.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1800.23,1801.41 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1802.27,1803.45 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1804.26,1805.44 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1806.29,1807.47 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1809.29,1810.46 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1811.27,1812.44 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1813.30,1814.47 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1815.38,1816.54 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1817.36,1818.52 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1820.24,1821.42 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1822.27,1823.45 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1824.22,1825.40 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1826.32,1827.49 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1828.32,1829.49 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1830.31,1831.48 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1832.35,1833.52 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1834.36,1835.53 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1836.36,1837.53 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1838.38,1839.54 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1840.34,1841.51 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1843.22,1844.40 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1845.21,1846.39 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1847.24,1848.42 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1850.25,1851.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1852.25,1853.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1859.2,1859.14 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1860.22,1863.131 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1866.51,1867.123 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1868.10,1869.50 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1874.47,1876.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1876.16,1879.3 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1880.2,1880.35 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1884.72,1890.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1896.105,1898.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1898.16,1900.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1902.2,1903.17 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1903.17,1905.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1907.2,1908.17 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1908.17,1910.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1912.2,1918.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1918.16,1920.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1921.2,1921.25 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1927.76,1933.15 3 0 +github.com/thebtf/engram/internal/mcp/server.go:1933.15,1936.17 3 0 +github.com/thebtf/engram/internal/mcp/server.go:1936.17,1938.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1939.3,1939.26 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1943.2,1950.36 3 0 +github.com/thebtf/engram/internal/mcp/server.go:1950.36,1952.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1952.8,1955.29 3 0 +github.com/thebtf/engram/internal/mcp/server.go:1955.29,1958.4 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1959.3,1962.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1966.2,1966.20 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1966.20,1977.20 6 0 +github.com/thebtf/engram/internal/mcp/server.go:1977.20,1979.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1980.3,1980.20 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1980.20,1982.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1985.3,1985.37 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1985.37,1987.30 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1987.30,1988.16 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1988.16,1990.6 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1990.11,1992.6 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1994.4,1995.56 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1995.56,1997.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1998.4,2003.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2008.2,2008.29 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2008.29,2009.63 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2009.63,2011.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2011.9,2013.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2021.2,2021.29 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2021.29,2029.38 3 0 +github.com/thebtf/engram/internal/mcp/server.go:2029.38,2031.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2031.9,2033.31 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2033.31,2035.30 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2035.30,2037.6 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2039.4,2042.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2046.2,2047.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2047.16,2049.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2050.2,2050.25 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2055.57,2056.33 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2056.33,2058.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2059.2,2060.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2060.16,2062.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2063.2,2064.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2064.16,2066.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2067.2,2067.23 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2071.79,2105.15 6 0 +github.com/thebtf/engram/internal/mcp/server.go:2105.15,2107.17 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2107.17,2111.4 3 0 +github.com/thebtf/engram/internal/mcp/server.go:2111.9,2112.17 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2112.17,2114.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2115.4,2117.26 3 0 +github.com/thebtf/engram/internal/mcp/server.go:2117.26,2119.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2119.10,2121.29 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2121.29,2123.6 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2125.4,2129.25 5 0 +github.com/thebtf/engram/internal/mcp/server.go:2130.19,2130.19 0 0 +github.com/thebtf/engram/internal/mcp/server.go:2132.20,2134.106 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2135.12,2137.103 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2140.8,2143.3 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2144.2,2150.49 3 0 +github.com/thebtf/engram/internal/mcp/server.go:2150.49,2152.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2152.8,2154.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2155.2,2168.27 4 0 +github.com/thebtf/engram/internal/mcp/server.go:2168.27,2170.17 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2170.17,2173.4 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2173.9,2175.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2177.2,2182.40 4 0 +github.com/thebtf/engram/internal/mcp/server.go:2182.40,2183.21 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2184.20,2185.20 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2186.19,2187.19 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2191.2,2191.24 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2191.24,2193.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2193.8,2193.30 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2193.30,2195.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2198.2,2198.28 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2198.28,2200.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2203.2,2203.29 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2203.29,2205.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2207.2,2208.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2208.16,2210.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2211.2,2211.28 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2216.103,2218.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2218.16,2220.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2222.2,2223.15 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2223.15,2225.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2227.2,2239.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2239.16,2241.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2242.2,2242.25 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2246.93,2248.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2251.91,2253.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:18.28,29.20 4 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:29.20,33.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:35.2,44.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:68.36,69.49 1 1 +github.com/thebtf/engram/internal/mcp/tools_admin.go:69.49,74.3 4 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:75.2,75.25 1 1 +github.com/thebtf/engram/internal/mcp/tools_admin.go:80.26,82.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:84.89,86.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:86.16,88.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:89.2,90.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:90.18,92.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:94.2,94.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:95.15,96.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:97.26,98.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:99.25,100.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:101.23,105.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:105.22,107.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:108.3,108.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:109.10,110.114 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:120.92,126.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:126.26,128.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:130.2,131.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:131.19,133.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:134.2,135.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:135.19,137.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:138.2,138.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:138.24,140.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:142.2,142.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:142.25,144.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:146.2,147.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:147.16,149.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:151.2,151.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:27.40,30.2 2 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:32.30,46.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:48.99,49.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:49.34,51.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:52.2,52.69 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:52.69,54.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:56.2,57.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:57.16,59.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:60.2,61.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:61.21,63.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:64.2,67.26 3 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:67.26,69.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:70.2,71.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:71.25,73.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:75.2,77.44 3 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:77.44,79.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:80.2,80.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:80.33,82.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:83.2,83.81 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:86.52,87.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:87.16,89.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:90.2,90.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:90.15,92.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:93.2,93.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:96.73,97.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:97.21,99.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:100.2,101.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:101.29,110.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:111.2,111.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:114.34,116.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:31.98,32.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:32.52,34.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:35.2,35.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:35.26,37.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:39.2,40.49 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:40.49,42.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:43.2,43.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:43.21,45.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:46.2,46.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:46.21,48.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:49.2,49.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:49.18,51.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:52.2,52.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:52.18,54.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:56.2,56.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:56.38,58.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:60.2,61.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:61.16,63.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:68.2,70.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:70.26,77.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:79.2,81.36 3 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:81.36,84.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:86.2,89.28 3 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:89.28,90.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:90.39,91.9 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:93.3,97.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:100.2,104.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:107.60,113.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:115.101,116.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:116.38,118.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:120.2,122.21 3 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:122.21,123.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:123.26,125.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:126.3,126.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:126.23,128.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:129.8,130.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:130.26,132.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:133.3,133.68 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:133.68,135.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:137.2,140.20 3 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:141.17,142.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:143.67,143.67 0 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:144.10,145.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:148.2,162.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:162.16,164.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:165.2,165.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:165.19,173.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:174.2,174.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:174.30,176.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:177.2,177.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:177.31,179.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:181.2,182.36 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:182.36,196.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:198.2,199.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:199.19,201.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:202.2,203.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:203.18,205.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:206.2,207.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:207.21,209.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:210.2,211.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:211.25,213.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:214.2,225.21 3 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:225.21,227.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:228.2,228.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:228.25,230.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:231.2,231.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:231.18,233.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:235.2,244.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:244.21,246.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:247.2,247.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:247.25,249.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:250.2,250.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:250.18,252.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:253.2,253.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:253.24,255.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:256.2,256.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:259.50,261.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:261.22,263.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:264.2,264.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:270.90,272.42 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:272.42,276.3 3 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:277.2,281.27 3 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:281.27,282.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:282.45,284.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:286.2,286.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:25.28,88.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:95.95,96.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:96.22,98.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:99.2,100.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:100.32,102.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:104.2,105.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:105.16,107.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:109.2,114.35 3 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:114.35,121.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:123.2,123.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:123.25,125.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:127.2,134.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:134.16,136.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:138.2,146.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:154.94,155.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:155.22,157.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:158.2,159.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:159.32,161.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:163.2,164.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:164.16,166.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:168.2,172.35 3 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:172.35,179.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:181.2,181.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:181.25,183.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:185.2,192.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:192.16,194.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:196.2,203.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:211.97,212.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:212.22,214.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:215.2,216.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:216.32,218.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:220.2,221.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:221.16,223.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:225.2,229.35 3 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:229.35,236.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:238.2,238.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:238.25,240.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:242.2,249.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:249.16,251.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:253.2,260.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:31.80,32.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:32.14,34.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:35.2,48.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:51.136,53.51 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:53.51,55.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:56.2,56.83 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:59.94,60.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:60.21,62.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:63.2,63.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:68.30,162.2 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:165.98,166.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:166.49,168.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:169.2,170.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:170.16,172.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:173.2,174.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:174.19,176.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:177.2,179.17 3 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:179.17,181.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:183.2,184.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:184.16,186.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:188.2,189.31 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:189.31,190.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:190.15,191.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:193.3,193.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:196.2,201.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:201.16,203.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:204.2,204.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:208.96,209.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:209.49,211.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:212.2,213.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:213.16,215.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:216.2,217.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:217.13,219.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:221.2,222.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:222.16,224.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:225.2,225.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:225.22,227.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:229.2,230.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:230.16,232.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:233.2,233.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:239.100,240.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:240.22,242.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:243.2,244.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:244.16,246.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:247.2,248.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:248.13,250.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:255.2,256.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:256.12,263.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:263.30,264.77 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:264.77,269.5 4 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:271.3,272.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:272.21,274.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:275.3,275.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:279.2,279.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:279.29,281.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:284.2,285.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:285.16,287.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:288.2,288.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:288.22,290.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:291.2,291.55 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:291.55,293.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:294.2,294.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:294.74,296.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:297.2,298.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:298.16,300.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:306.2,307.41 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:307.41,309.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:310.2,324.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:324.16,325.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:325.50,327.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:328.3,328.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:330.2,330.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:330.38,332.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:334.2,341.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:341.16,343.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:344.2,344.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:348.99,349.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:349.49,351.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:352.2,353.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:353.16,355.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:356.2,357.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:357.13,359.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:360.2,362.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:362.16,364.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:365.2,365.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:365.22,367.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:368.2,368.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:368.74,370.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:371.2,372.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:372.16,374.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:375.2,375.85 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:375.85,377.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:379.2,380.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:380.16,381.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:381.50,383.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:384.3,384.60 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:386.2,386.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:386.20,388.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:390.2,395.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:395.16,397.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:398.2,398.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:402.102,403.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:403.49,405.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:406.2,407.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:407.16,409.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:410.2,411.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:411.13,413.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:414.2,415.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:415.16,417.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:418.2,418.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:418.22,420.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:421.2,421.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:421.74,423.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:424.2,425.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:425.16,427.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:428.2,428.88 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:428.88,430.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:432.2,433.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:433.16,434.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:434.50,436.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:437.3,437.63 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:439.2,439.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:439.20,441.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:443.2,448.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:448.16,450.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:451.2,451.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:34.30,36.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:42.61,44.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:48.32,75.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:79.32,94.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:100.98,101.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:101.25,103.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:104.2,104.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:104.29,106.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:108.2,113.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:113.17,114.55 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:114.55,116.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:118.2,118.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:118.24,120.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:121.2,121.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:121.23,123.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:124.2,124.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:124.23,126.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:134.2,135.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:135.21,137.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:142.2,147.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:147.16,149.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:154.2,165.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:165.25,175.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:177.2,183.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:183.16,185.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:186.2,186.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:194.98,195.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:195.25,197.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:198.2,198.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:198.29,200.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:202.2,205.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:205.17,207.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:208.2,209.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:209.21,211.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:213.2,214.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:214.16,216.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:217.2,218.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:218.16,220.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:221.2,222.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:222.16,224.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:226.2,231.11 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:231.11,233.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:235.2,236.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:236.16,238.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:239.2,239.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:21.52,22.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:22.24,25.28 3 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:25.28,27.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:29.2,29.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:35.72,37.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:37.15,39.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:41.2,42.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:42.16,44.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:45.2,45.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:49.99,51.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:51.16,53.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:55.2,56.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:56.16,58.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:60.2,72.23 7 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:72.23,74.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:75.2,75.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:75.24,77.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:78.2,78.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:78.24,80.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:81.2,81.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:82.27,82.27 0 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:84.10,85.93 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:87.2,87.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:87.30,89.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:90.2,90.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:90.26,92.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:94.2,95.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:95.16,97.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:99.2,100.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:100.16,102.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:104.2,112.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:112.16,114.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:116.2,123.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:123.16,125.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:126.2,126.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:130.97,132.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:132.16,134.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:136.2,137.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:137.16,139.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:141.2,147.23 4 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:147.23,149.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:150.2,150.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:150.26,152.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:154.2,155.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:155.16,157.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:159.2,160.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:160.16,161.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:161.47,163.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:164.3,164.51 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:167.2,167.97 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:167.97,172.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:174.2,175.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:175.16,177.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:179.2,185.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:185.16,187.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:188.2,188.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:192.99,194.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:194.16,196.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:198.2,199.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:199.16,201.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:203.2,207.26 3 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:207.26,209.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:211.2,212.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:212.16,214.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:216.2,223.26 3 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:223.26,229.28 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:229.28,231.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:232.3,232.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:235.2,236.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:236.16,238.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:239.2,239.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:243.100,245.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:245.16,247.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:249.2,250.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:250.16,252.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:254.2,262.23 5 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:262.23,264.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:265.2,265.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:265.24,267.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:268.2,268.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:269.27,269.27 0 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:271.10,272.93 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:274.2,274.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:274.30,276.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:277.2,277.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:277.26,279.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:281.2,281.71 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:281.71,282.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:282.47,284.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:285.3,285.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:288.2,293.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:293.16,295.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:296.2,296.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:302.92,309.19 5 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:309.19,310.53 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:310.53,313.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:316.2,317.51 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:317.51,318.66 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:318.66,320.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:323.2,331.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:331.16,333.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:334.2,334.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:338.46,342.32 4 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:342.32,343.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:343.20,346.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:348.2,350.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:350.26,352.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:352.27,353.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:353.13,355.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:356.4,356.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:358.3,358.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:360.2,360.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:16.45,18.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:20.35,36.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:38.84,39.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:39.40,41.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:42.2,42.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:42.50,44.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:45.2,45.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:48.101,50.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:50.16,52.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:53.2,54.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:54.16,56.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:57.2,58.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:58.19,60.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:61.2,62.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:62.21,64.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:65.2,66.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:66.16,68.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:69.2,69.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:72.102,74.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:74.16,76.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:77.2,82.8 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:10.100,12.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:12.16,14.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:16.2,17.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:17.18,19.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:21.2,21.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:22.16,23.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:24.14,25.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:26.14,27.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:28.17,29.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:30.17,31.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:32.21,33.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:34.19,35.42 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:36.17,37.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:38.16,39.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:40.16,41.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:42.21,43.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:44.10,45.167 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:15.77,16.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:16.33,18.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:20.2,21.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:21.27,23.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:25.2,26.28 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:26.28,29.17 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:29.17,31.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:34.2,41.32 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:41.32,46.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:46.20,48.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:49.3,49.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:52.2,53.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:53.16,55.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:57.2,57.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:61.97,62.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:62.28,64.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:66.2,67.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:67.16,69.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:71.2,75.29 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:75.29,77.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:79.2,80.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:80.16,82.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:84.2,84.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:84.20,86.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:88.2,97.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:97.25,103.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:103.20,105.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:106.3,106.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:106.19,108.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:109.3,109.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:112.2,113.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:113.16,115.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:117.2,117.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:121.95,122.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:122.28,124.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:126.2,127.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:127.16,129.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:131.2,137.50 4 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:137.50,139.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:141.2,142.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:142.16,144.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:145.2,145.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:145.16,147.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:149.2,149.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:149.21,151.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:153.2,154.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:154.16,156.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:157.2,157.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:157.20,159.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:161.2,161.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:165.98,166.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:166.28,168.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:170.2,171.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:171.16,173.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:175.2,181.50 4 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:181.50,183.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:185.2,185.96 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:185.96,187.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:189.2,189.88 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:197.98,198.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:198.28,200.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:202.2,203.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:203.16,205.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:207.2,217.74 6 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:217.74,219.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:222.2,223.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:223.16,225.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:227.2,229.156 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:235.98,237.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:237.16,239.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:241.2,247.24 4 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:247.24,249.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:252.2,253.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:253.29,255.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:256.2,256.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:15.93,16.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:16.37,18.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:20.2,21.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:21.16,23.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:25.2,32.16 7 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:32.16,34.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:35.2,35.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:35.19,37.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:38.2,38.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:38.19,40.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:42.2,43.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:43.16,45.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:47.2,54.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:54.16,56.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:57.2,57.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:61.91,62.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:62.37,64.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:66.2,67.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:67.16,69.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:71.2,73.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:73.16,75.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:76.2,76.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:76.19,78.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:80.2,81.43 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:81.43,83.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:83.19,85.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:86.3,86.79 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:87.8,89.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:90.2,90.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:90.16,91.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:91.45,93.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:94.3,94.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:97.2,110.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:110.16,112.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:113.2,113.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:117.93,119.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:122.91,123.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:123.37,125.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:127.2,128.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:128.16,130.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:132.2,133.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:133.19,135.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:136.2,141.16 5 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:141.16,143.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:145.2,155.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:155.25,165.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:167.2,168.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:168.16,170.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:171.2,171.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:175.94,176.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:176.37,178.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:180.2,181.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:181.16,183.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:185.2,187.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:187.16,189.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:190.2,190.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:190.19,192.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:193.2,196.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:196.16,198.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:200.2,208.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:208.25,216.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:218.2,225.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:225.16,227.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:228.2,228.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:232.94,233.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:233.37,235.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:237.2,238.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:238.16,240.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:242.2,243.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:243.21,245.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:246.2,248.19 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:248.19,250.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:252.2,253.46 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:253.46,255.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:255.13,257.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:259.2,259.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:259.44,261.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:261.13,263.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:266.2,267.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:267.16,269.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:271.2,278.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:278.16,280.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:281.2,281.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:19.69,21.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:23.38,38.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:40.51,63.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:65.53,80.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:82.46,85.32 3 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:85.32,87.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:88.2,88.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:91.105,93.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:93.16,95.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:96.2,97.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:97.16,99.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:100.2,100.70 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:103.107,105.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:105.16,107.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:108.2,109.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:109.16,111.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:112.2,112.72 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:115.101,117.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:117.16,119.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:120.2,121.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:121.17,123.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:124.2,139.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:142.109,144.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:144.16,146.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:147.2,154.8 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:157.100,159.28 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:159.28,161.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:161.18,163.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:164.3,164.62 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:166.2,167.72 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:167.72,169.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:170.2,170.53 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:170.53,172.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:173.2,174.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:174.26,176.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:177.2,177.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:180.73,182.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:182.16,184.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:185.2,185.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:12.104,14.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:14.16,16.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:18.2,19.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:19.18,21.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:23.2,23.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:24.14,25.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:26.18,27.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:28.17,29.46 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:30.10,31.96 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:36.101,37.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:37.27,39.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:41.2,42.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:42.16,44.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:46.2,47.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:47.21,49.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:50.2,51.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:51.19,53.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:54.2,54.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:55.52,55.52 0 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:56.10,57.101 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:59.2,61.93 2 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:61.93,64.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:66.2,70.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:27.31,94.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:98.97,100.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:100.26,102.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:103.2,103.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:103.28,105.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:107.2,108.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:108.16,110.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:112.2,115.15 4 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:115.15,117.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:118.2,118.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:118.17,120.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:122.2,123.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:123.16,125.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:127.2,140.29 3 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:140.29,151.31 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:151.31,154.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:155.3,155.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:158.2,162.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:167.100,169.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:169.26,171.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:172.2,172.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:172.28,174.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:175.2,175.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:175.26,177.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:179.2,180.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:180.16,182.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:184.2,185.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:185.22,187.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:189.2,190.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:190.20,191.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:191.54,199.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:200.3,200.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:200.61,202.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:203.3,203.58 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:206.2,211.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:215.95,217.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:217.32,219.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:220.2,220.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:220.28,222.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:224.2,225.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:225.16,227.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:229.2,230.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:230.22,232.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:234.2,234.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:234.61,236.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:239.2,239.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:239.25,246.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:248.2,252.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:258.104,260.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:260.26,262.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:267.2,271.20 3 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:271.20,275.3 3 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:275.8,279.3 3 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:280.2,280.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:284.60,285.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:285.30,287.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:288.2,288.42 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:288.42,290.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:291.2,291.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:64.89,65.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:65.25,67.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:69.2,70.49 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:70.49,72.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:74.2,74.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:75.18,76.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:77.21,78.35 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:79.19,80.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:81.18,82.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:83.19,84.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:85.18,86.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:87.18,91.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:91.23,93.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:94.3,94.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:95.10,96.62 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:100.81,103.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:103.19,105.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:106.2,107.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:107.19,109.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:112.2,112.46 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:112.46,114.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:115.2,115.46 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:115.46,117.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:122.2,122.66 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:122.66,124.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:127.2,127.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:127.25,128.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:128.22,130.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:131.8,132.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:132.26,134.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:138.2,138.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:138.25,139.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:139.22,141.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:142.8,143.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:143.26,145.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:148.2,148.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:148.22,150.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:151.2,151.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:151.38,153.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:154.2,154.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:154.19,156.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:159.2,161.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:161.25,164.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:165.2,165.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:165.25,168.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:169.2,171.23 3 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:171.23,174.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:175.2,175.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:175.23,178.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:180.2,193.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:193.16,195.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:198.2,199.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:199.29,201.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:202.2,202.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:202.29,204.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:205.2,213.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:216.121,217.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:217.28,218.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:218.26,220.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:221.3,222.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:222.17,223.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:223.49,225.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:226.4,226.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:228.3,228.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:230.2,230.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:230.26,232.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:233.2,234.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:234.16,235.48 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:235.48,237.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:238.3,238.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:240.2,240.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:243.101,248.36 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:248.36,250.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:250.8,252.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:253.2,253.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:253.16,255.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:256.2,256.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:256.32,257.128 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:257.128,262.72 5 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:262.72,264.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:267.2,267.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:276.81,277.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:277.25,279.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:280.2,280.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:280.22,282.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:283.2,283.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:283.39,285.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:286.2,286.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:286.25,288.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:289.2,289.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:289.21,291.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:292.2,293.14 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:293.14,295.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:296.2,305.16 5 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:305.16,307.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:308.2,314.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:317.84,318.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:318.19,320.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:321.2,323.63 3 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:323.63,325.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:326.2,329.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:332.82,333.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:333.38,335.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:336.2,337.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:338.18,339.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:340.18,341.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:345.2,345.59 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:345.59,347.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:349.2,351.21 3 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:351.21,353.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:353.8,356.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:357.2,357.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:357.16,359.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:366.2,367.41 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:367.41,369.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:371.2,378.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:397.115,398.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:398.15,400.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:403.2,404.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:404.26,405.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:405.28,407.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:408.3,408.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:408.28,410.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:412.2,412.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:412.23,415.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:420.2,426.12 4 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:426.12,427.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:427.27,429.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:429.18,431.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:433.4,433.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:433.33,435.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:440.2,441.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:441.26,442.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:442.28,443.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:443.49,445.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:448.3,448.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:448.28,449.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:449.49,451.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:454.2,454.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:457.82,458.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:458.21,460.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:461.2,462.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:462.16,464.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:465.2,465.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:465.36,467.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:468.2,469.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:469.16,471.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:472.2,477.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:480.82,481.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:481.40,483.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:484.2,485.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:485.19,487.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:488.2,489.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:489.16,491.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:492.2,499.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:502.82,503.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:503.21,505.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:506.2,507.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:507.16,509.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:510.2,514.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:23.179,24.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:24.22,26.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:28.2,32.22 4 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:32.22,34.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:35.2,36.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:36.22,38.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:40.2,41.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:41.26,43.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:44.2,44.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:44.26,46.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:47.2,47.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:47.30,49.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:50.2,50.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:50.30,52.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:54.2,55.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:55.16,57.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:58.2,58.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:58.13,60.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:61.2,62.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:62.16,64.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:65.2,65.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:65.13,67.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:69.2,70.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:70.16,72.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:73.2,73.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:73.15,75.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:77.2,77.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:80.172,81.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:81.28,82.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:82.23,84.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:85.3,85.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:85.18,87.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:88.3,89.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:89.17,90.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:90.49,92.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:93.4,93.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:95.3,95.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:98.2,98.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:98.24,100.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:101.2,101.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:101.19,103.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:104.2,105.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:105.16,106.48 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:106.48,108.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:109.3,109.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:111.2,111.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:114.119,116.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:116.22,118.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:119.2,120.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:120.22,122.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:124.2,126.26 3 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:126.26,127.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:127.36,129.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:130.3,130.105 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:131.8,132.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:132.32,134.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:135.3,135.103 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:137.2,137.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:137.16,139.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:141.2,141.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:141.32,143.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:143.27,145.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:146.3,147.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:147.27,149.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:150.3,150.106 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:150.106,151.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:153.3,153.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:153.27,154.114 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:154.114,155.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:157.9,157.104 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:157.104,158.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:160.3,160.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:160.27,161.114 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:161.114,162.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:164.9,164.104 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:164.104,165.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:167.3,167.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:169.2,169.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:25.90,26.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:26.26,28.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:30.2,31.49 2 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:31.49,33.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:35.2,35.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:36.16,37.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:38.10,39.63 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:43.84,44.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:44.21,46.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:47.2,47.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:47.25,49.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:50.2,50.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:50.21,52.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:53.2,53.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:53.21,55.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:57.2,58.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:59.18,60.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:61.15,62.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:63.24,64.42 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:65.10,66.108 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:69.2,70.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:70.22,72.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:73.2,74.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:74.29,76.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:78.2,78.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:78.14,85.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:87.2,89.37 3 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:89.37,92.21 3 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:92.21,94.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:97.2,100.31 4 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:100.31,102.38 2 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:102.38,104.37 2 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:104.37,106.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:109.3,122.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:122.26,124.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:125.3,125.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:125.19,127.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:131.3,133.39 3 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:133.39,135.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:135.9,137.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:138.3,138.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:138.17,140.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:142.3,142.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:142.34,144.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:145.3,145.11 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:148.2,155.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:20.99,22.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:22.16,24.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:26.2,31.44 3 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:31.44,32.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:32.33,33.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:33.43,38.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:43.2,43.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:43.49,45.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:46.2,46.48 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:46.48,48.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:50.2,52.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:52.27,55.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:55.8,60.24 3 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:60.24,62.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:64.3,64.57 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:64.57,66.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:68.3,68.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:71.2,71.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:71.16,73.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:75.2,76.23 2 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:76.23,78.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:80.2,80.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:19.40,89.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:109.71,111.9 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:111.9,113.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:115.2,116.38 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:116.38,117.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:118.13,119.41 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:119.41,121.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:122.17,123.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:123.43,125.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:126.11,127.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:127.40,129.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:133.2,133.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:133.22,138.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:139.2,139.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:143.90,144.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:144.25,146.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:148.2,149.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:149.16,151.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:153.2,157.61 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:157.61,159.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:161.2,161.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:162.16,163.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:164.14,165.35 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:166.13,167.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:168.16,169.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:170.17,171.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:172.16,173.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:174.15,175.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:176.10,177.120 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:189.85,191.39 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:191.39,192.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:192.44,194.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:196.2,196.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:196.15,198.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:199.2,199.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:199.15,201.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:202.2,202.46 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:205.91,207.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:207.17,209.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:211.2,215.25 5 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:215.25,217.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:218.2,224.25 4 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:224.25,226.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:227.2,227.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:227.25,229.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:231.2,243.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:243.16,245.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:247.2,247.139 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:250.89,252.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:252.19,254.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:255.2,256.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:256.25,258.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:259.2,264.52 5 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:264.52,266.14 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:266.14,268.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:271.2,277.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:277.25,280.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:282.2,283.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:283.16,285.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:287.2,287.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:287.22,288.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:288.20,290.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:291.3,291.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:294.2,297.31 3 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:297.31,300.29 3 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:300.29,302.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:303.3,305.69 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:308.2,308.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:311.88,313.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:313.13,315.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:317.2,318.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:318.16,320.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:322.2,328.22 6 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:328.22,331.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:333.2,333.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:333.23,335.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:335.30,338.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:341.2,341.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:344.91,346.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:346.13,348.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:350.2,353.18 3 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:353.18,354.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:354.27,356.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:357.3,357.73 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:357.73,359.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:362.2,362.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:362.19,370.17 4 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:370.17,372.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:375.2,376.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:376.26,378.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:379.2,379.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:382.92,384.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:384.13,386.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:388.2,389.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:389.16,391.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:393.2,401.16 4 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:401.16,403.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:405.2,405.88 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:408.91,410.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:410.13,412.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:414.2,418.95 4 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:418.95,420.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:422.2,422.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:425.90,427.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:427.13,429.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:431.2,433.167 3 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:433.167,435.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:437.2,437.89 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:437.89,439.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:441.2,441.108 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:22.93,24.49 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:24.49,26.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:28.2,28.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:29.14,30.42 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:31.17,32.59 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:33.16,34.58 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:35.24,36.75 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:37.27,38.71 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:39.22,40.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:41.23,42.63 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:43.10,44.66 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:48.79,49.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:49.13,51.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:52.2,53.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:53.16,55.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:57.2,58.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:58.32,60.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:61.2,84.28 3 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:87.101,88.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:88.13,90.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:91.2,91.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:91.38,93.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:94.2,95.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:95.16,97.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:98.2,98.53 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:98.53,100.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:102.2,104.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:104.17,106.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:107.2,107.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:107.29,109.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:110.2,115.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:118.100,119.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:119.13,121.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:122.2,122.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:122.38,124.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:125.2,126.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:126.16,128.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:129.2,129.53 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:129.53,131.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:133.2,135.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:135.17,137.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:138.2,138.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:138.29,140.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:141.2,146.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:149.123,150.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:150.13,152.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:153.2,153.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:153.18,155.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:156.2,156.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:156.38,158.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:159.2,161.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:161.17,163.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:164.2,169.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:172.113,173.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:173.13,175.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:176.2,176.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:176.50,178.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:179.2,181.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:181.17,183.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:184.2,188.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:191.57,195.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:197.102,198.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:198.13,200.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:201.2,201.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:201.20,203.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:204.2,205.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:205.16,207.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:209.2,210.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:210.32,212.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:214.2,217.56 3 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:217.56,223.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:225.2,230.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:233.41,235.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:235.16,237.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:238.2,238.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:35.27,37.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:42.41,43.11 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:44.48,45.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:46.10,47.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:54.57,55.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:56.17,57.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:58.16,59.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:60.10,61.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:82.58,83.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:84.28,85.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:86.26,87.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:88.10,89.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:93.114,95.68 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:95.68,97.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:99.2,101.42 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:101.42,102.71 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:102.71,105.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:107.2,117.23 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:117.23,119.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:121.2,124.22 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:124.22,125.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:125.31,127.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:128.3,128.35 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:129.8,129.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:129.37,131.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:132.2,132.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:135.74,136.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:136.30,138.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:139.2,139.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:139.34,141.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:142.2,142.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:142.31,144.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:145.2,145.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:145.22,147.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:161.169,162.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:162.17,164.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:165.2,166.51 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:166.51,168.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:169.2,169.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:172.92,174.42 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:174.42,177.63 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:177.63,179.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:179.9,181.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:183.2,183.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:186.65,190.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:192.115,194.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:194.26,196.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:196.8,196.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:196.31,198.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:199.2,199.117 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:202.122,206.31 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:206.31,207.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:207.45,209.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:211.2,211.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:214.72,216.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:218.117,219.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:219.16,221.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:222.2,223.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:223.20,225.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:225.17,227.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:228.3,228.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:228.27,229.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:229.50,231.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:231.30,232.11 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:236.3,236.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:239.2,241.60 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:241.60,243.61 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:243.61,245.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:246.3,246.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:246.24,247.9 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:249.3,250.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:250.17,252.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:253.3,253.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:253.22,254.9 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:256.3,256.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:256.29,257.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:257.50,259.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:259.30,260.11 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:264.3,265.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:265.32,266.9 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:269.2,269.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:272.51,273.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:273.16,275.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:276.2,277.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:277.18,279.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:280.2,280.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:280.19,282.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:283.2,283.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:286.97,288.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:288.30,290.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:291.2,291.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:291.49,293.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:294.2,294.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:297.108,299.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:301.108,303.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:305.102,307.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:319.55,320.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:320.31,322.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:323.2,323.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:323.26,325.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:326.2,326.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:329.71,330.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:343.26,344.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:345.10,346.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:354.95,362.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:362.16,364.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:366.2,397.39 14 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:397.39,399.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:399.27,401.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:402.8,404.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:405.2,407.46 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:407.46,410.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:411.2,411.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:411.44,413.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:413.12,415.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:417.2,417.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:417.26,419.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:420.2,420.84 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:420.84,422.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:427.2,427.65 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:427.65,429.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:431.2,433.20 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:433.20,435.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:436.2,437.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:437.20,439.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:440.2,440.56 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:440.56,442.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:443.2,443.56 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:443.56,448.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:450.2,450.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:450.45,453.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:459.2,459.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:459.31,461.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:461.22,462.62 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:462.62,465.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:466.4,466.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:468.3,468.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:471.2,472.115 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:472.115,474.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:491.2,491.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:491.19,493.23 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:493.23,495.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:496.3,508.21 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:508.21,510.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:511.3,511.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:522.2,522.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:522.43,535.34 5 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:535.34,556.30 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:556.30,558.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:559.4,559.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:559.44,561.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:562.4,562.106 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:562.106,564.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:575.4,575.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:575.74,577.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:578.4,579.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:579.18,581.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:583.4,584.28 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:584.28,586.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:588.4,588.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:588.31,599.57 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:599.57,601.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:601.17,604.7 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:606.5,607.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:607.21,609.6 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:615.5,615.138 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:615.138,617.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:617.27,619.7 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:620.6,620.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:622.5,623.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:623.26,625.6 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:626.5,626.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:630.4,631.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:631.20,633.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:634.4,634.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:634.22,637.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:637.26,639.6 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:640.5,640.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:645.4,660.77 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:660.77,662.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:663.4,664.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:664.25,666.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:667.4,667.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:673.2,673.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:673.26,675.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:677.2,678.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:678.25,680.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:681.2,681.97 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:681.97,683.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:690.2,691.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:691.21,693.33 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:693.33,695.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:696.3,696.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:696.33,698.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:699.3,699.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:699.49,704.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:721.3,721.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:721.54,722.84 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:722.84,724.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:728.2,728.99 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:728.99,730.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:732.2,733.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:733.22,735.10 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:736.109,737.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:738.100,739.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:740.114,741.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:742.107,743.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:744.11,745.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:748.2,749.43 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:749.43,751.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:753.2,755.34 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:755.34,756.48 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:756.48,757.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:757.19,760.5 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:764.2,764.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:764.31,767.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:768.2,768.35 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:768.35,771.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:772.2,772.76 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:772.76,776.3 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:778.2,780.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:780.16,782.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:782.20,785.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:788.2,788.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:788.25,798.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:798.18,800.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:800.9,800.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:800.30,807.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:808.3,808.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:808.36,810.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:811.3,812.50 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:812.50,815.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:816.3,822.17 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:822.17,824.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:826.3,836.17 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:836.17,838.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:839.3,839.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:842.2,843.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:843.30,844.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:844.52,846.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:846.9,848.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:851.2,869.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:869.21,871.43 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:871.43,873.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:874.3,874.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:874.29,876.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:886.3,886.76 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:886.76,888.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:890.2,890.105 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:890.105,892.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:893.2,894.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:894.16,896.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:901.2,904.40 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:904.40,905.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:905.15,906.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:909.3,910.63 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:910.63,912.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:912.9,914.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:916.3,916.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:916.43,918.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:919.3,920.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:920.20,922.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:925.3,925.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:925.23,928.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:929.3,931.33 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:931.33,934.39 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:934.39,936.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:939.2,948.42 5 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:948.42,950.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:950.21,952.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:952.9,955.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:959.2,959.53 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:959.53,960.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:960.54,961.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:961.33,963.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:964.9,972.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:973.3,973.60 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:973.60,974.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:974.40,976.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:978.3,978.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:978.61,979.41 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:979.41,981.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:983.3,983.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:983.28,985.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:986.3,987.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:989.2,989.51 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:989.51,991.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:995.2,997.53 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:997.53,999.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:999.8,1001.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1002.2,1002.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1002.22,1004.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1008.2,1014.76 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1014.76,1016.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1021.2,1021.57 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1021.57,1026.13 5 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1026.13,1029.21 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1029.21,1032.5 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1033.4,1033.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1033.49,1035.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1036.4,1043.89 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1043.89,1046.5 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1048.4,1048.86 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1052.2,1063.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1063.21,1065.40 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1065.40,1067.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1068.3,1068.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1068.38,1070.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1072.2,1074.18 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1074.18,1081.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1082.2,1082.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1082.28,1084.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1085.2,1085.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1085.16,1087.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1088.2,1088.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1088.30,1090.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1091.2,1091.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1091.30,1093.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1098.2,1098.76 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1098.76,1100.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1101.2,1102.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1102.16,1104.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1105.2,1105.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1111.94,1113.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1113.15,1115.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1117.2,1118.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1118.16,1120.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1122.2,1123.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1123.13,1125.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1126.2,1131.16 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1131.16,1133.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1134.2,1134.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1134.19,1136.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1146.2,1146.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1146.39,1148.55 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1148.55,1150.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1152.2,1152.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1152.39,1154.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1157.2,1158.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1158.21,1163.21 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1163.21,1165.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1166.3,1167.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1167.21,1169.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1170.3,1170.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1170.52,1172.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1173.3,1173.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1173.52,1178.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1179.3,1179.41 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1179.41,1182.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1183.3,1183.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1188.2,1188.46 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1188.46,1190.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1191.2,1191.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1191.27,1193.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1195.2,1196.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1196.16,1198.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1201.2,1210.16 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1210.16,1212.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1213.2,1213.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1218.59,1220.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1220.38,1222.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1225.2,1226.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1226.29,1227.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1227.22,1229.9 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1232.2,1232.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1232.18,1234.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1237.2,1244.29 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1244.29,1245.67 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1245.67,1247.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1249.2,1249.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1249.16,1251.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1254.2,1254.11 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1258.55,1260.47 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1260.47,1262.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1263.2,1264.58 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1264.58,1266.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1267.2,1267.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1270.252,1271.108 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1271.108,1273.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1274.2,1274.55 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1274.55,1276.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1277.2,1277.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1280.184,1282.69 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1282.69,1284.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1284.32,1285.58 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1285.58,1287.10 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1290.3,1290.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1290.18,1292.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1294.2,1294.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1294.19,1297.32 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1297.32,1298.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1298.39,1300.10 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1303.3,1303.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1303.19,1305.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1307.2,1307.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1307.21,1309.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1309.32,1310.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1310.49,1312.10 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1315.3,1315.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1315.18,1317.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1319.2,1319.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1319.28,1321.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1321.17,1323.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1324.3,1324.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1324.27,1326.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1328.2,1328.76 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1328.76,1330.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1331.2,1331.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1342.96,1343.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1343.26,1345.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1347.2,1348.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1348.16,1350.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1352.2,1363.23 9 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1363.23,1364.58 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1364.58,1365.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1365.31,1367.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1367.10,1369.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1373.2,1373.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1373.17,1375.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1376.2,1376.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1376.16,1378.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1379.2,1379.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1379.16,1381.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1382.2,1382.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1382.18,1384.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1385.2,1385.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1385.19,1387.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1388.2,1388.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1388.19,1390.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1396.2,1399.18 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1399.18,1400.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1400.61,1401.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1402.50,1403.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1404.12,1405.108 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1409.2,1410.42 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1410.42,1414.3 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1415.2,1420.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1420.16,1422.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1429.2,1444.43 6 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1444.43,1446.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1449.2,1451.27 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1451.27,1453.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1458.2,1458.46 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1458.46,1460.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1461.2,1461.63 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1461.63,1463.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1465.2,1466.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1466.15,1472.29 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1472.29,1479.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1479.18,1481.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1482.4,1482.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1482.23,1483.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1485.4,1485.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1485.30,1486.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1486.24,1488.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1488.32,1489.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1493.4,1494.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1494.30,1495.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1498.8,1504.29 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1504.29,1506.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1506.18,1508.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1509.4,1509.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1509.23,1510.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1512.4,1512.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1512.30,1513.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1513.24,1515.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1515.32,1516.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1520.4,1521.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1521.30,1522.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1526.2,1526.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1526.26,1528.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1528.17,1530.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1535.2,1535.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1535.74,1536.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1536.13,1537.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1537.33,1542.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1542.26,1544.39 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1544.39,1546.7 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1548.5,1548.82 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1565.2,1565.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1565.38,1569.27 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1569.27,1571.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1572.3,1572.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1572.27,1574.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1576.3,1581.32 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1581.32,1586.4 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1588.3,1592.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1592.18,1594.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1595.3,1596.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1596.17,1598.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1599.3,1599.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1602.2,1602.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1603.15,1618.32 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1618.32,1620.33 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1620.33,1621.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1621.40,1623.11 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1626.4,1638.6 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1640.3,1641.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1641.17,1643.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1644.3,1644.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1646.18,1648.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1648.17,1650.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1651.3,1651.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1653.10,1654.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1654.25,1656.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1657.3,1659.32 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1659.32,1661.33 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1661.33,1662.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1662.40,1664.11 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1667.4,1669.26 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1669.26,1671.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1672.4,1673.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1673.25,1675.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1676.4,1676.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1678.3,1678.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1690.51,1695.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1700.73,1702.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1702.16,1704.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1705.2,1706.48 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1706.48,1710.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1711.2,1713.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1713.16,1715.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1716.2,1716.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1727.117,1731.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1731.21,1733.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1734.2,1735.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1735.16,1737.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1738.2,1739.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1739.27,1741.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1742.2,1742.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1764.19,1775.30 7 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1775.30,1777.37 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1777.37,1779.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1781.3,1781.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1781.20,1783.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1797.2,1797.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1797.39,1799.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1801.2,1811.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1811.25,1813.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1815.2,1816.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1816.29,1818.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1824.2,1824.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1824.27,1826.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1831.2,1833.22 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1833.22,1835.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1837.2,1846.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1846.16,1848.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1853.2,1855.27 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1855.27,1857.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1859.2,1876.33 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1876.33,1878.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1880.2,1881.28 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1881.28,1885.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1885.20,1888.33 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1888.33,1889.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1889.40,1891.11 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1894.4,1894.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1894.20,1895.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1900.3,1900.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1900.22,1902.33 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1902.33,1903.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1903.50,1905.11 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1908.4,1908.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1908.19,1909.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1918.3,1918.56 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1918.56,1919.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1927.3,1927.64 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1927.64,1928.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1932.3,1935.32 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1935.32,1936.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1936.39,1938.10 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1942.3,1956.14 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1956.14,1957.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1957.37,1959.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1961.3,1962.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1962.26,1963.9 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1975.2,1975.59 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1975.59,1986.17 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1986.17,1988.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1990.3,1991.34 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1991.34,1993.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1995.3,1996.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1996.29,1998.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1998.21,2001.34 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2001.34,2002.41 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2002.41,2004.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2007.5,2007.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2007.21,2008.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2011.4,2011.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2011.23,2013.34 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2013.34,2014.51 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2014.51,2016.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2019.5,2019.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2019.20,2020.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2023.4,2023.57 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2023.57,2024.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2027.4,2027.65 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2027.65,2028.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2030.4,2031.33 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2031.33,2032.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2032.40,2034.11 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2037.4,2051.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2051.15,2052.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2052.38,2054.6 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2056.4,2057.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2057.27,2058.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2065.2,2066.28 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2066.28,2068.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2072.2,2072.71 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2072.71,2080.30 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2080.30,2081.41 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2081.41,2087.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2089.3,2089.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2089.13,2090.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2090.31,2095.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2095.25,2097.38 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2097.38,2099.7 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2101.5,2101.81 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2112.2,2112.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2112.38,2115.27 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2115.27,2117.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2121.3,2138.30 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2138.30,2140.11 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2140.11,2141.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2143.4,2160.15 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2160.15,2161.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2161.39,2163.6 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2165.4,2165.46 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2167.3,2173.24 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2173.24,2175.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2176.3,2176.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2179.2,2179.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2180.15,2182.24 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2182.24,2184.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2185.3,2185.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2187.18,2199.30 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2199.30,2201.11 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2201.11,2202.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2204.4,2208.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2208.15,2209.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2209.39,2211.6 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2213.4,2213.35 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2215.3,2216.24 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2216.24,2218.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2219.3,2219.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2220.10,2221.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2221.22,2223.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2224.3,2226.27 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2226.27,2228.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2228.20,2230.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2231.4,2233.26 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2233.26,2235.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2236.4,2237.23 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2237.23,2239.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2240.4,2240.46 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2240.46,2244.5 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2245.4,2245.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2247.3,2247.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2252.94,2254.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2254.16,2256.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2258.2,2260.18 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2260.18,2261.59 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2261.59,2262.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2262.36,2264.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2264.10,2266.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2270.2,2270.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2270.13,2272.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2273.2,2273.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2273.50,2275.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2277.2,2277.98 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2281.98,2282.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2282.26,2284.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2286.2,2287.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2287.16,2289.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2291.2,2292.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2292.13,2294.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2297.2,2298.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2298.19,2299.51 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2299.51,2301.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2302.3,2302.55 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2304.2,2304.42 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2304.42,2306.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2308.2,2308.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2308.54,2309.48 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2309.48,2311.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2312.3,2312.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2316.2,2318.53 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:17.82,19.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:21.149,22.55 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:22.55,24.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:25.2,25.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:25.36,27.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:28.2,34.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:34.16,36.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:37.2,37.42 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:37.42,39.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:40.2,40.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:43.105,44.48 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:44.48,46.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:47.2,48.54 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:51.129,53.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:53.16,55.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:56.2,57.53 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:57.53,59.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:60.2,61.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:61.25,63.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:64.2,65.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:65.16,67.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:68.2,68.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:26.97,27.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:27.18,29.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:30.2,30.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:33.37,35.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:37.81,38.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:38.44,40.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:41.2,41.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:41.38,43.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:44.2,44.57 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:47.88,48.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:48.32,50.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:51.2,52.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:52.20,54.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:55.2,55.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:58.40,72.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:74.106,75.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:75.34,77.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:78.2,79.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:79.16,81.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:83.2,84.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:84.16,86.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:88.2,89.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:89.13,91.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:93.2,94.63 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:94.63,96.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:98.2,98.72 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:98.72,100.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:102.2,106.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:109.117,110.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:110.32,112.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:113.2,113.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:113.34,115.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:117.2,118.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:118.16,120.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:121.2,121.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:121.19,123.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:125.2,126.69 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:126.69,128.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:130.2,136.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:18.33,20.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:22.27,37.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:39.93,40.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:40.30,42.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:43.2,43.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:43.28,45.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:46.2,47.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:47.16,49.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:51.2,52.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:52.17,54.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:55.2,56.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:56.19,58.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:59.2,59.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:59.19,61.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:62.2,63.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:63.16,65.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:67.2,74.9 3 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:74.9,76.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:77.2,78.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:78.15,80.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:81.2,85.16 4 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:85.16,87.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:88.2,88.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:88.17,90.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:92.2,101.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:104.48,105.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:105.16,107.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:108.2,109.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:109.29,111.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:112.2,112.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:112.31,114.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:115.2,115.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:118.75,120.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:120.27,121.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:121.32,123.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:123.17,124.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:126.4,126.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:129.2,134.33 3 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:134.33,136.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:137.2,137.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:137.40,138.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:138.39,140.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:141.3,141.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:143.2,143.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:143.34,145.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:146.2,147.35 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:147.35,149.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:150.2,150.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:153.77,154.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:154.20,156.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:157.2,159.31 3 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:159.31,160.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:160.33,162.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:163.3,163.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:163.30,165.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:167.2,170.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:23.91,25.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:27.38,50.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:52.104,53.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:53.38,55.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:56.2,57.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:57.16,59.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:61.2,62.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:62.26,64.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:65.2,66.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:66.30,68.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:69.2,69.72 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:69.72,71.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:73.2,74.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:74.16,76.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:77.2,78.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:78.16,80.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:81.2,82.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:82.16,84.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:85.2,86.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:86.16,88.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:90.2,105.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:105.16,107.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:109.2,109.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:109.19,117.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:118.2,118.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:118.25,120.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:121.2,121.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:121.30,123.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:124.2,124.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:124.31,126.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:127.2,128.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:128.16,130.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:131.2,131.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:134.91,136.9 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:136.9,138.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:139.2,140.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:140.15,141.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:141.19,143.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:144.3,144.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:146.2,146.94 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:149.59,150.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:150.16,152.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:153.2,154.61 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:154.61,156.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:157.2,157.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:160.56,161.75 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:161.75,163.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:164.2,164.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:167.67,169.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:170.17,171.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:172.67,173.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:174.10,175.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:179.60,180.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:180.16,182.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:183.2,184.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:184.25,186.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:187.2,187.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:190.57,191.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:192.15,193.81 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:193.81,195.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:196.3,196.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:197.19,199.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:199.17,201.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:202.3,202.55 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:202.55,204.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:205.3,205.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:206.14,207.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:208.11,209.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:210.10,211.41 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:215.59,216.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:216.16,218.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:219.2,219.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:220.12,221.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:222.14,223.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:224.10,225.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:28.90,30.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:30.16,32.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:34.2,36.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:37.16,38.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:40.16,42.140 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:44.20,46.140 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:48.17,50.142 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:52.17,56.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:56.50,62.63 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:62.63,64.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:66.4,66.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:66.45,68.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:72.4,74.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:74.25,76.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:77.4,77.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:80.3,80.101 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:82.18,84.141 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:86.18,88.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:88.18,90.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:91.3,91.41 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:93.17,96.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:96.50,99.59 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:99.59,101.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:102.4,104.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:104.25,106.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:107.4,107.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:110.3,110.98 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:112.10,116.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:125.86,126.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:126.16,128.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:129.2,130.9 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:130.9,132.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:133.2,133.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:133.22,135.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:137.2,139.31 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:139.31,141.10 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:141.10,143.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:144.3,145.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:145.22,147.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:148.3,149.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:149.26,151.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:152.3,152.68 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:152.68,154.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:155.3,156.37 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:156.37,158.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:159.3,160.107 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:162.2,162.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:165.249,166.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:166.24,168.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:169.2,169.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:169.38,171.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:173.2,174.31 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:174.31,175.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:175.32,177.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:180.2,181.34 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:181.34,182.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:182.29,183.9 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:185.3,197.17 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:197.17,199.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:200.3,200.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:200.20,201.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:203.3,203.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:203.37,205.33 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:205.33,206.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:208.4,208.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:208.19,209.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:209.43,210.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:212.5,212.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:214.4,215.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:215.30,216.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:220.2,220.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:223.113,229.2 5 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:231.101,233.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:247.92,251.16 4 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:251.16,253.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:253.8,253.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:253.24,255.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:259.2,272.51 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:272.51,274.38 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:274.38,275.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:276.50,277.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:278.12,279.107 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:287.2,292.26 5 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:292.26,294.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:297.2,297.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:297.19,301.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:303.2,311.42 5 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:311.42,315.3 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:316.2,341.64 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:341.64,342.86 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:342.86,344.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:345.3,345.56 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:345.56,347.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:348.3,360.19 6 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:360.19,364.4 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:365.3,365.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:369.2,370.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:370.15,372.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:372.27,374.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:375.3,375.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:375.27,377.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:380.2,381.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:381.15,387.28 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:387.28,395.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:395.18,397.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:398.4,398.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:398.23,399.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:401.4,401.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:401.30,402.66 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:402.66,403.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:405.5,406.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:406.12,407.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:409.5,409.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:409.28,413.6 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:414.5,415.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:415.30,416.11 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:419.4,420.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:420.30,421.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:424.8,432.28 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:432.28,438.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:438.18,440.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:441.4,441.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:441.23,442.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:444.4,444.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:444.30,445.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:445.40,447.31 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:447.31,448.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:452.4,455.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:455.30,456.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:461.2,465.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:465.17,467.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:469.2,470.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:470.16,472.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:473.2,473.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:20.79,21.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:21.43,23.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:24.2,24.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:24.29,26.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:27.2,27.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:30.40,63.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:65.68,71.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:71.25,74.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:75.2,75.67 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:78.62,83.19 3 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:83.19,87.3 3 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:88.2,88.89 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:91.101,92.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:92.22,94.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:95.2,96.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:96.18,98.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:99.2,100.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:100.16,102.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:103.2,104.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:104.16,106.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:107.2,107.119 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:110.99,111.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:111.22,113.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:114.2,115.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:115.18,117.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:118.2,119.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:119.16,121.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:122.2,122.51 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:122.51,124.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:125.2,126.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:126.16,128.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:129.2,131.15 3 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:131.15,132.69 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:132.69,134.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:135.3,135.58 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:137.2,137.130 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:140.102,142.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:142.16,144.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:145.2,145.64 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:145.64,147.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:148.2,148.113 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:151.109,153.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:153.16,155.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:156.2,157.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:157.16,159.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:160.2,161.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:161.16,163.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:164.2,164.67 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:167.107,169.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:169.16,171.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:172.2,173.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:173.16,175.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:176.2,176.107 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:176.107,178.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:179.2,179.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:180.41,181.63 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:182.41,183.95 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:184.10,185.83 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:189.111,191.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:191.16,193.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:194.2,195.57 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:195.57,197.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:198.2,199.23 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:199.23,201.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:202.2,203.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:203.16,205.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:206.2,206.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:206.17,208.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:209.2,209.108 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:212.63,215.2 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:217.69,219.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:219.16,221.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:222.2,222.79 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:225.60,227.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:227.16,229.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:230.2,230.57 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:233.137,234.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:234.49,236.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:237.2,238.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:238.16,240.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:241.2,243.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:243.16,245.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:246.2,247.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:247.16,249.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:250.2,250.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:250.22,252.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:253.2,253.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:256.142,258.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:258.16,260.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:261.2,262.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:262.16,264.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:265.2,265.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:265.47,267.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:268.2,269.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:269.16,270.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:270.50,272.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:273.3,273.89 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:275.2,275.173 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:278.157,280.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:280.16,282.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:283.2,283.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:283.47,285.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:286.2,287.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:287.16,288.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:288.50,290.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:291.3,291.89 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:293.2,293.169 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:296.104,297.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:297.22,299.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:300.2,301.61 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:301.61,303.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:303.20,304.9 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:307.2,307.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:307.19,309.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:310.2,317.8 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:320.119,322.39 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:322.39,323.81 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:323.81,325.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:327.2,327.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:330.71,332.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:332.16,334.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:335.2,335.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:17.61,105.23 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:105.23,122.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:123.2,123.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:126.104,127.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:127.61,129.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:130.2,130.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:130.38,132.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:133.2,134.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:134.16,136.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:137.2,138.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:138.16,140.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:141.2,147.107 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:147.107,149.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:150.2,151.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:151.16,153.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:154.2,170.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:170.19,172.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:173.2,173.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:176.103,177.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:177.61,179.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:180.2,180.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:180.38,182.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:183.2,184.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:184.16,186.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:187.2,191.106 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:191.106,193.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:194.2,195.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:195.16,197.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:198.2,200.31 3 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:200.31,207.36 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:207.36,218.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:219.3,220.35 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:222.2,230.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:233.107,234.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:234.61,236.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:237.2,237.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:237.38,239.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:240.2,241.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:241.16,243.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:244.2,248.110 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:248.110,250.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:251.2,252.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:252.16,254.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:255.2,256.33 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:256.33,266.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:267.2,275.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:278.108,279.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:279.61,281.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:282.2,282.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:282.37,284.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:285.2,286.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:286.16,288.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:289.2,290.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:290.19,292.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:293.2,293.104 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:293.104,295.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:296.2,297.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:297.16,299.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:300.2,307.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:307.16,309.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:310.2,311.43 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:311.43,318.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:319.2,332.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:332.22,334.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:335.2,335.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:338.108,339.62 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:339.62,341.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:342.2,342.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:342.38,344.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:345.2,346.9 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:346.9,348.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:349.2,350.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:350.16,352.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:353.2,357.16 5 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:357.16,359.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:360.2,370.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:373.109,374.62 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:374.62,376.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:377.2,377.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:377.38,379.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:380.2,381.9 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:381.9,383.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:384.2,385.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:385.16,387.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:388.2,390.32 3 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:390.32,392.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:393.2,394.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:394.16,396.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:397.2,403.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:406.106,407.62 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:407.62,409.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:410.2,410.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:410.38,412.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:413.2,414.9 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:414.9,416.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:417.2,418.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:418.16,420.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:421.2,423.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:423.16,424.41 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:424.41,434.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:435.3,435.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:437.2,445.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:483.65,484.42 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:484.42,485.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:485.39,487.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:489.2,489.85 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:489.85,491.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:492.2,492.95 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:495.102,496.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:496.38,498.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:499.2,499.58 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:499.58,501.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:502.2,502.90 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:505.60,508.2 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:510.66,512.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:512.26,514.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:515.2,515.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:518.69,521.33 3 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:521.33,523.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:523.21,524.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:526.3,526.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:526.34,527.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:529.3,530.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:532.2,532.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:535.63,537.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:537.19,539.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:540.2,541.42 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:541.42,543.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:544.2,544.57 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:544.57,546.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:547.2,547.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:547.54,549.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:550.2,550.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:553.70,557.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:559.66,561.9 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:561.9,563.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:564.2,566.17 3 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:566.17,568.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:569.2,569.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:570.103,572.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:573.34,574.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:575.10,576.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:580.56,581.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:581.37,583.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:584.2,584.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:584.26,586.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:586.37,587.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:589.3,589.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:591.2,591.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:594.90,602.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:604.68,605.71 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:605.71,607.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:607.17,609.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:610.3,610.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:612.2,613.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:613.16,615.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:616.2,617.41 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:617.41,619.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:620.2,620.78 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:623.65,625.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:625.16,627.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:628.2,628.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:628.17,630.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:631.2,631.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:634.51,635.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:635.16,637.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:638.2,638.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:641.56,642.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:642.28,644.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:645.2,646.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:649.92,651.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:651.29,653.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:654.2,654.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:657.86,659.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:659.29,661.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:662.2,662.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:665.94,667.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:667.29,669.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:670.2,670.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:673.98,675.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:675.29,677.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:678.2,678.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:17.93,18.104 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:18.104,20.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:22.2,23.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:23.16,25.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:27.2,28.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:28.19,30.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:32.2,35.33 3 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:35.33,36.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:36.47,39.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:42.2,44.20 3 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:44.20,47.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:48.2,49.68 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:49.68,50.48 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:50.48,52.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:53.3,53.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:53.32,55.23 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:55.23,56.63 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:56.63,58.6 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:59.5,59.53 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:61.4,61.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:64.2,71.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:71.17,73.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:73.8,73.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:73.29,75.36 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:75.36,77.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:78.3,83.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:86.2,86.35 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:86.35,88.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:90.2,97.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:97.16,99.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:101.2,110.28 3 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:110.28,112.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:113.2,124.16 4 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:124.16,126.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:127.2,127.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:133.93,134.35 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:134.35,136.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:138.2,139.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:139.16,141.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:143.2,144.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:144.16,146.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:147.2,147.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:147.17,149.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:151.2,152.33 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:152.33,153.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:153.47,156.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:159.2,160.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:160.16,162.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:164.2,176.26 3 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:176.26,178.23 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:178.23,180.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:181.3,192.5 3 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:195.2,196.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:196.16,198.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:199.2,199.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:22.104,24.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:24.16,26.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:28.2,29.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:29.18,31.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:33.2,33.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:34.13,35.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:36.13,37.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:38.14,39.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:40.16,41.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:42.10,43.95 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:51.67,53.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:57.68,58.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:58.33,60.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:61.2,61.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:67.42,69.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:74.61,76.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:76.26,78.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:79.2,79.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:85.90,86.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:86.49,88.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:90.2,91.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:91.15,93.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:94.2,95.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:95.17,97.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:100.2,103.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:103.16,105.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:107.2,113.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:113.12,115.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:115.18,117.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:118.3,119.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:119.20,121.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:122.3,124.48 3 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:125.8,127.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:129.2,130.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:130.16,132.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:134.2,139.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:145.90,147.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:147.15,149.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:151.2,152.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:152.16,154.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:156.2,157.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:157.16,158.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:158.47,160.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:161.3,161.56 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:164.2,170.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:170.19,173.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:173.8,175.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:176.2,176.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:181.92,183.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:183.16,185.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:187.2,188.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:188.16,190.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:192.2,200.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:200.25,207.28 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:207.28,209.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:210.3,210.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:212.2,212.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:216.93,217.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:217.52,219.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:221.2,222.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:222.15,224.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:226.2,227.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:227.16,229.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:231.2,231.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:231.47,232.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:232.47,234.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:235.3,235.59 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:238.2,241.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:35.127,36.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:36.23,38.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:39.2,40.40 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:40.40,42.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:43.2,43.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:43.37,45.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:46.2,46.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:46.37,48.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:49.2,49.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:52.23,80.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:82.26,140.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:142.92,143.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:143.25,145.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:147.2,148.49 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:148.49,150.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:152.2,152.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:153.17,154.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:154.24,156.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:157.3,158.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:158.17,160.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:161.3,165.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:166.17,167.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:167.22,169.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:170.3,170.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:170.22,172.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:173.3,174.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:174.17,176.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:177.3,181.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:182.16,189.23 7 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:189.23,191.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:192.3,192.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:192.24,194.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:195.3,195.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:195.39,197.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:198.3,207.17 3 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:207.17,209.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:210.3,210.69 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:210.69,212.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:213.3,213.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:214.10,215.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:219.92,220.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:220.25,222.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:224.2,225.49 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:225.49,227.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:229.2,229.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:230.17,232.24 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:232.24,234.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:235.3,236.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:236.17,238.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:239.3,239.59 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:239.59,241.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:242.3,242.81 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:242.81,244.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:245.3,250.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:251.17,253.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:253.22,255.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:256.3,257.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:257.17,259.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:260.3,260.79 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:260.79,262.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:263.3,268.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:269.10,270.66 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:274.91,276.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:276.16,278.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:279.2,279.67 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:279.67,280.76 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:280.76,282.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:285.2,286.52 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:286.52,288.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:289.2,289.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:292.74,294.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:294.16,296.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:297.2,297.62 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:297.62,299.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:300.2,300.68 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:303.109,304.56 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:304.56,306.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:307.2,307.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:307.25,309.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:310.2,310.81 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:310.81,312.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:313.2,313.102 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:313.102,315.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:316.2,316.108 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:316.108,318.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:319.2,319.99 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:319.99,321.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:322.2,322.99 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:322.99,324.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:325.2,325.60 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:325.60,327.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:328.2,328.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:328.34,330.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:331.2,331.114 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:331.114,333.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:334.2,334.66 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:334.66,336.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:337.2,337.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:337.40,339.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:340.2,340.132 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:340.132,342.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:343.2,343.35 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:343.35,345.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:346.2,346.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:349.92,350.103 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:350.103,352.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:354.2,355.52 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:355.52,357.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:358.2,358.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:358.32,360.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:361.2,361.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:364.108,365.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:365.19,367.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:368.2,369.53 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:369.53,371.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:372.2,372.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:372.19,374.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:375.2,375.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:375.39,376.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:376.34,378.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:380.2,380.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:383.66,385.53 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:385.53,387.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:388.2,388.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:388.19,390.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:391.2,391.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:10.101,12.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:12.16,14.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:16.2,18.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:19.16,20.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:21.14,22.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:23.15,24.84 1 0 +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:25.16,26.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:27.10,28.97 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:21.75,23.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:25.41,28.2 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:30.31,37.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:39.38,46.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:48.50,56.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:58.43,70.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:72.80,73.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:73.36,75.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:76.2,76.48 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:76.48,78.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:79.2,79.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:82.97,84.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:84.16,86.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:87.2,88.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:88.16,90.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:91.2,92.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:92.16,94.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:95.2,96.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:96.16,98.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:99.2,99.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:102.104,104.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:104.16,106.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:107.2,108.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:108.16,110.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:111.2,112.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:112.16,114.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:115.2,116.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:116.16,118.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:119.2,119.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:122.96,124.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:124.16,126.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:127.2,128.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:128.19,130.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:131.2,132.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:132.18,134.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:135.2,141.79 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:141.79,143.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:143.17,145.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:146.3,146.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:148.2,148.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:151.77,153.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:153.16,155.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:156.2,157.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:157.19,159.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:160.2,160.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:10.101,12.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:12.16,14.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:16.2,17.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:17.18,19.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:21.2,21.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:22.15,23.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:24.13,25.42 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:26.14,27.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:28.16,29.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:30.16,31.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:32.10,33.102 1 0 diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-02/create-database.stderr.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-02/create-database.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-02/create-database.stdout.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-02/create-database.stdout.log new file mode 100644 index 00000000..4b15bd57 --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-02/create-database.stdout.log @@ -0,0 +1 @@ +CREATE DATABASE diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-02/create-pgvector.stderr.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-02/create-pgvector.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-02/create-pgvector.stdout.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-02/create-pgvector.stdout.log new file mode 100644 index 00000000..d26bad14 --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-02/create-pgvector.stdout.log @@ -0,0 +1 @@ +CREATE EXTENSION diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-02/database-identity.stderr.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-02/database-identity.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-02/database-identity.stdout.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-02/database-identity.stdout.log new file mode 100644 index 00000000..550e3d47 --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-02/database-identity.stdout.log @@ -0,0 +1 @@ +{"database" : "engram_prc_rg_test_8b1d3112a7a95fbb_r2", "schema" : "public", "server_version" : "17.10 (Debian 17.10-1.pgdg12+1)", "user" : "engram"} diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-02/go-test-summary.json b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-02/go-test-summary.json new file mode 100644 index 00000000..6847bb7f --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-02/go-test-summary.json @@ -0,0 +1,40 @@ +{ + "schema_version": 1, + "verdict": "PASS", + "input_path": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-repeat3\\repeat-02\\go-test.stdout.jsonl", + "fail_on_unexpected_skip": true, + "allowed_skip_identities": [], + "counts": { + "packages": 1, + "tests": 1, + "passed": 1, + "failed": 0, + "skipped": 0, + "no_tests": 0, + "zero_tests": 0, + "incomplete": 0, + "unexpected_skips": 0, + "malformed_lines": 0 + }, + "packages": [ + { + "package": "github.com/thebtf/engram/internal/mcp", + "outcome": "pass", + "elapsed_seconds": 4.047, + "last_output": "ok \tgithub.com/thebtf/engram/internal/mcp\t4.037s\tcoverage: 0.1% of statements", + "tests_observed": 1 + } + ], + "tests": [ + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestEC_F1_TagDerivedBackfill_T007", + "outcome": "pass", + "elapsed_seconds": 3.91, + "last_output": "--- PASS: TestEC_F1_TagDerivedBackfill_T007 (3.91s)", + "skip_allowed": false + } + ], + "unexpected_skips": [], + "errors": [] +} diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-02/go-test.stderr.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-02/go-test.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-02/go-test.stdout.jsonl b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-02/go-test.stdout.jsonl new file mode 100644 index 00000000..660530d2 --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-02/go-test.stdout.jsonl @@ -0,0 +1,16 @@ +{"Time":"2026-07-11T03:34:55.6410993+03:00","Action":"start","Package":"github.com/thebtf/engram/internal/mcp"} +{"Time":"2026-07-11T03:34:55.7355979+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007"} +{"Time":"2026-07-11T03:34:55.7355979+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":"=== RUN TestEC_F1_TagDerivedBackfill_T007\n"} +{"Time":"2026-07-11T03:34:56.7103102+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":"{\"level\":\"warn\",\"error\":\"ERROR: relation \\\"observation_vectors\\\" does not exist (SQLSTATE 42P01)\",\"time\":\"2026-07-11T03:34:56+03:00\",\"message\":\"migration 040: orphan vector cleanup failed (non-fatal)\"}\n"} +{"Time":"2026-07-11T03:34:56.7108116+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":"{\"level\":\"info\",\"garbage_deleted\":0,\"orphan_vectors_deleted\":0,\"time\":\"2026-07-11T03:34:56+03:00\",\"message\":\"migration 040: garbage cleanup complete\"}\n"} +{"Time":"2026-07-11T03:34:56.7208111+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":"{\"level\":\"info\",\"orphan_vectors_deleted\":0,\"time\":\"2026-07-11T03:34:56+03:00\",\"message\":\"migration 041: orphan vector purge complete\"}\n"} +{"Time":"2026-07-11T03:34:56.7303114+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":"{\"level\":\"info\",\"patterns_deleted\":0,\"time\":\"2026-07-11T03:34:56+03:00\",\"message\":\"migration 042: low-quality pattern purge complete\"}\n"} +{"Time":"2026-07-11T03:34:56.7693125+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":"{\"level\":\"info\",\"total_deleted\":0,\"time\":\"2026-07-11T03:34:56+03:00\",\"message\":\"migration 043: radical observation cleanup complete\"}\n"} +{"Time":"2026-07-11T03:34:58.0745249+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":"{\"level\":\"warn\",\"error\":\"ERROR: extension \\\"vectorscale\\\" is not available (SQLSTATE 0A000)\",\"time\":\"2026-07-11T03:34:58+03:00\",\"message\":\"migration 109: vectorscale extension not available, skipping DiskANN index\"}\n"} +{"Time":"2026-07-11T03:34:59.2910436+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":"{\"level\":\"debug\",\"connections\":1,\"time\":\"2026-07-11T03:34:59+03:00\",\"message\":\"Connection pool warmed\"}\n"} +{"Time":"2026-07-11T03:34:59.645381+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":"--- PASS: TestEC_F1_TagDerivedBackfill_T007 (3.91s)\n"} +{"Time":"2026-07-11T03:34:59.645381+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Elapsed":3.91} +{"Time":"2026-07-11T03:34:59.645381+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Output":"PASS\n"} +{"Time":"2026-07-11T03:34:59.6598814+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Output":"coverage: 0.1% of statements\n"} +{"Time":"2026-07-11T03:34:59.6884082+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Output":"ok \tgithub.com/thebtf/engram/internal/mcp\t4.037s\tcoverage: 0.1% of statements\n"} +{"Time":"2026-07-11T03:34:59.6884082+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Elapsed":4.047} diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-02/pg-stat-activity-after.stderr.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-02/pg-stat-activity-after.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-02/pg-stat-activity-after.stdout.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-02/pg-stat-activity-after.stdout.log new file mode 100644 index 00000000..fe51488c --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-02/pg-stat-activity-after.stdout.log @@ -0,0 +1 @@ +[] diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-02/pg-stat-activity-before.stderr.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-02/pg-stat-activity-before.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-02/pg-stat-activity-before.stdout.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-02/pg-stat-activity-before.stdout.log new file mode 100644 index 00000000..fe51488c --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-02/pg-stat-activity-before.stdout.log @@ -0,0 +1 @@ +[] diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-02/repeat-summary.json b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-02/repeat-summary.json new file mode 100644 index 00000000..9c0ad62b --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-02/repeat-summary.json @@ -0,0 +1,33 @@ +{ + "repeat": 2, + "verdict": "PASS", + "database": "engram_prc_rg_test_8b1d3112a7a95fbb_r2", + "schema": "public", + "database_schema_identity": "engram_prc_rg_test_8b1d3112a7a95fbb_r2.public", + "database_dsn": "REDACTED_DATABASE_DSN", + "database_create_confirmed": true, + "sequential_execution": { + "package_parallelism": 1, + "test_parallelism": 1 + }, + "race": false, + "connection_budget": 20, + "server_sessions_before": 6, + "server_sessions_after": 6, + "sessions_before": 0, + "sessions_after": 0, + "go_test_exit": 0, + "json_parser_exit": 0, + "coverage_policy": "Targeted", + "coverage_exit": 0, + "cleanup_exit": 0, + "cleanup_status": "PASS", + "required_session_start_execution": { + "schema_version": 1, + "verdict": "NOT_APPLICABLE", + "reason": "only an unfiltered canonical ./... run requires the 12-test session-start execution proof" + }, + "cleanup_summary": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-repeat3\\repeat-02\\cleanup\\cleanup.json", + "errors": [], + "artifact_directory": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-repeat3\\repeat-02" +} diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-02/server-connection-count-after.stderr.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-02/server-connection-count-after.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-02/server-connection-count-after.stdout.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-02/server-connection-count-after.stdout.log new file mode 100644 index 00000000..1e8b3149 --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-02/server-connection-count-after.stdout.log @@ -0,0 +1 @@ +6 diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-02/server-connection-count-before.stderr.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-02/server-connection-count-before.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-02/server-connection-count-before.stdout.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-02/server-connection-count-before.stdout.log new file mode 100644 index 00000000..1e8b3149 --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-02/server-connection-count-before.stdout.log @@ -0,0 +1 @@ +6 diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-02/targeted-coverage.stderr.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-02/targeted-coverage.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-02/targeted-coverage.stdout.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-02/targeted-coverage.stdout.log new file mode 100644 index 00000000..c958686c --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-02/targeted-coverage.stdout.log @@ -0,0 +1,352 @@ +github.com/thebtf/engram/internal/mcp/audit_helpers.go:33: effectiveAuditWriter 0.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:44: isAuditEnabled 0.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:52: runAuditAsync 0.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:77: marshalState 0.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:92: logAuditCreate 0.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:117: logAuditEdit 0.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:142: logAuditDelete 0.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:166: logAuditGeneric 0.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:189: logAuditSupersede 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:30: parseArgs 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:46: coerceString 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:67: coerceInt 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:97: coerceInt64 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:127: coerceFloat64 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:151: coerceBool 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:177: coerceStringSlice 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:204: coerceInt64Slice 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:222: clampToInt 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:236: clampInt64ToInt 0.0% +github.com/thebtf/engram/internal/mcp/context.go:17: extractProjectFromHeader 0.0% +github.com/thebtf/engram/internal/mcp/context.go:22: contextWithProject 0.0% +github.com/thebtf/engram/internal/mcp/context.go:29: ContextWithProject 0.0% +github.com/thebtf/engram/internal/mcp/context.go:35: projectFromContext 0.0% +github.com/thebtf/engram/internal/mcp/context.go:41: contextWithSession 0.0% +github.com/thebtf/engram/internal/mcp/context.go:48: ContextWithSession 0.0% +github.com/thebtf/engram/internal/mcp/context.go:54: sessionFromContext 0.0% +github.com/thebtf/engram/internal/mcp/context.go:61: actorFromContext 0.0% +github.com/thebtf/engram/internal/mcp/health.go:22: NewMCPHealth 0.0% +github.com/thebtf/engram/internal/mcp/health.go:29: RecordRequest 0.0% +github.com/thebtf/engram/internal/mcp/health.go:36: RecordError 0.0% +github.com/thebtf/engram/internal/mcp/health.go:42: rotateWindowIfNeeded 0.0% +github.com/thebtf/engram/internal/mcp/health.go:55: HandleHealth 0.0% +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:28: ruleGovernanceCaptureEnabled 0.0% +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:39: captureActiveRuleIntent 0.0% +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:104: ruleIntentFingerprint 0.0% +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:113: marshalRuleCandidateIntentResponse 0.0% +github.com/thebtf/engram/internal/mcp/server.go:127: NewServer 100.0% +github.com/thebtf/engram/internal/mcp/server.go:141: SetBackfillStatusFunc 0.0% +github.com/thebtf/engram/internal/mcp/server.go:146: SetVersionedDocumentStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:151: SetIssueStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:156: SetMemoryStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:161: SetMetaMemoryIndex 0.0% +github.com/thebtf/engram/internal/mcp/server.go:166: SetHintQueue 0.0% +github.com/thebtf/engram/internal/mcp/server.go:171: SetStateStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:176: SetDirectiveCaptureService 0.0% +github.com/thebtf/engram/internal/mcp/server.go:181: SetBehavioralRulesStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:186: SetRuleGovernanceStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:191: SetRuleInjectionTelemetryStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:195: SetPromotionStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:199: SetGraphStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:204: SetNodesStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:211: SetAuditStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:216: SetPurgeStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:222: SetCandidateStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:228: SetSnapshotStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:234: SetBulkFacade 0.0% +github.com/thebtf/engram/internal/mcp/server.go:240: setTestAuditWriter 0.0% +github.com/thebtf/engram/internal/mcp/server.go:246: setTestMemoryEditor 0.0% +github.com/thebtf/engram/internal/mcp/server.go:252: setTestMemorySignificanceUpdater 0.0% +github.com/thebtf/engram/internal/mcp/server.go:260: SetWriteLintOrchestrator 0.0% +github.com/thebtf/engram/internal/mcp/server.go:269: SetRedactionRules 0.0% +github.com/thebtf/engram/internal/mcp/server.go:274: SetEmbeddingStores 0.0% +github.com/thebtf/engram/internal/mcp/server.go:282: SetRerankClient 0.0% +github.com/thebtf/engram/internal/mcp/server.go:290: SetStatsDB 0.0% +github.com/thebtf/engram/internal/mcp/server.go:297: HandleRequest 0.0% +github.com/thebtf/engram/internal/mcp/server.go:303: ListTools 0.0% +github.com/thebtf/engram/internal/mcp/server.go:332: Version 0.0% +github.com/thebtf/engram/internal/mcp/server.go:383: Run 0.0% +github.com/thebtf/engram/internal/mcp/server.go:427: handleRequest 0.0% +github.com/thebtf/engram/internal/mcp/server.go:461: handleNotification 0.0% +github.com/thebtf/engram/internal/mcp/server.go:473: handleInitialize 0.0% +github.com/thebtf/engram/internal/mcp/server.go:496: buildInstructions 0.0% +github.com/thebtf/engram/internal/mcp/server.go:660: storeMemoryTool 0.0% +github.com/thebtf/engram/internal/mcp/server.go:712: recallMemoryTool 0.0% +github.com/thebtf/engram/internal/mcp/server.go:805: primaryTools 0.0% +github.com/thebtf/engram/internal/mcp/server.go:942: handleToolsList 0.0% +github.com/thebtf/engram/internal/mcp/server.go:1612: handleToolsCall 0.0% +github.com/thebtf/engram/internal/mcp/server.go:1644: sanitizeToolCallArgs 0.0% +github.com/thebtf/engram/internal/mcp/server.go:1656: callTool 0.0% +github.com/thebtf/engram/internal/mcp/server.go:1874: sendResponse 0.0% +github.com/thebtf/engram/internal/mcp/server.go:1884: sendError 0.0% +github.com/thebtf/engram/internal/mcp/server.go:1896: handleFindSimilarObservations 0.0% +github.com/thebtf/engram/internal/mcp/server.go:1927: handleGetMemoryStats 0.0% +github.com/thebtf/engram/internal/mcp/server.go:2055: handleBackfillStatus 0.0% +github.com/thebtf/engram/internal/mcp/server.go:2071: handleCheckSystemHealth 0.0% +github.com/thebtf/engram/internal/mcp/server.go:2216: handleAnalyzeSearchPatterns 0.0% +github.com/thebtf/engram/internal/mcp/server.go:2246: handleSearchSessions 0.0% +github.com/thebtf/engram/internal/mcp/server.go:2251: handleListSessions 0.0% +github.com/thebtf/engram/internal/mcp/tools_admin.go:18: buildAdminTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_admin.go:68: adminActionsForEnv 33.3% +github.com/thebtf/engram/internal/mcp/tools_admin.go:80: vnextEnabled 0.0% +github.com/thebtf/engram/internal/mcp/tools_admin.go:84: handleAdmin 0.0% +github.com/thebtf/engram/internal/mcp/tools_admin.go:120: handlePurgeProject 0.0% +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:27: ambientHintsEnabledFromEnv 0.0% +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:32: ambientHintsTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:48: handleGetAmbientHints 0.0% +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:86: normalizeAmbientHintsToolLimit 0.0% +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:96: ambientHintItems 0.0% +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:114: errMissingSessionID 0.0% +github.com/thebtf/engram/internal/mcp/tools_brief.go:31: handleGetMemoryBrief 0.0% +github.com/thebtf/engram/internal/mcp/tools_brief.go:107: memoryBriefUsesPrincipalScope 0.0% +github.com/thebtf/engram/internal/mcp/tools_brief.go:115: handlePrincipalMemoryBrief 0.0% +github.com/thebtf/engram/internal/mcp/tools_brief.go:259: truncateBriefContent 0.0% +github.com/thebtf/engram/internal/mcp/tools_brief.go:270: filterInjectionByScope 0.0% +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:25: bulkOpsTools 0.0% +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:95: handleBulkPromote 0.0% +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:154: handleBulkDelete 0.0% +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:211: handleBulkSupersede 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:31: candidateItemFromDomain 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:51: newCandidateReviewSnapshot 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:59: requireCandidateReviewSnapshot 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:68: candidateTools 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:165: handleListCandidates 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:208: handleGetCandidate 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:239: handlePromoteCandidate 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:348: handleRejectCandidate 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:402: handleSupersedeCandidate 0.0% +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:34: codeIntelEnabled 0.0% +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:42: SetCodeChunkStore 0.0% +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:48: codebaseSearchTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:79: codebaseStatusTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:100: handleCodebaseSearch 0.0% +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:194: handleCodebaseStatus 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:21: getVault 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:35: credentialStore 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:49: handleStoreCredential 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:130: handleGetCredential 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:192: handleListCredentials 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:243: handleDeleteCredential 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:302: handleVaultStatus 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:338: expandTagHierarchy 0.0% +github.com/thebtf/engram/internal/mcp/tools_directives.go:16: directivesCaptureEnabledFromEnv 0.0% +github.com/thebtf/engram/internal/mcp/tools_directives.go:20: rememberDirectiveTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_directives.go:38: currentDirectiveCaptureService 0.0% +github.com/thebtf/engram/internal/mcp/tools_directives.go:48: handleRememberDirective 0.0% +github.com/thebtf/engram/internal/mcp/tools_directives.go:72: parseRememberDirectiveArgs 0.0% +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:10: handleDocsConsolidated 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents.go:15: handleListCollections 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents.go:61: handleListDocuments 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents.go:121: handleGetDocument 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents.go:165: handleRemoveDocument 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents.go:197: handleIngestDocument 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents.go:235: handleSearchCollection 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:15: handleDocCreate 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:61: handleDocRead 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:117: handleDocUpdate 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:122: handleDocList 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:175: handleDocHistory 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:232: handleDocComment 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:19: SetExperienceProvider 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:23: experienceHistoryTools 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:40: experienceHistoryReadSchema 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:65: experienceHistoryDetailSchema 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:82: experienceHistoryTriggerEnum 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:91: handleExperienceHistoryRead 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:103: handleExperienceHistoryDetail 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:115: parseExperienceHistoryReadArgs 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:142: parseExperienceHistoryDetailArgs 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:157: experienceHistoryTriggersFromArgs 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:180: marshalExperienceHistory 0.0% +github.com/thebtf/engram/internal/mcp/tools_feedback.go:12: handleFeedbackConsolidated 0.0% +github.com/thebtf/engram/internal/mcp/tools_feedback.go:36: handleSetSessionOutcome 0.0% +github.com/thebtf/engram/internal/mcp/tools_governance.go:27: governanceTools 0.0% +github.com/thebtf/engram/internal/mcp/tools_governance.go:98: handleListSnapshots 0.0% +github.com/thebtf/engram/internal/mcp/tools_governance.go:167: handleRollbackSnapshot 0.0% +github.com/thebtf/engram/internal/mcp/tools_governance.go:215: handlePinSnapshot 0.0% +github.com/thebtf/engram/internal/mcp/tools_governance.go:258: handleRedactionRulesStatus 0.0% +github.com/thebtf/engram/internal/mcp/tools_governance.go:284: resolveGovernanceActor 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:64: handleGraph 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:100: graphAddEdge 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:216: mcpGraphEndpointExists 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:243: mcpGraphEdgeAlreadyExists 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:276: graphAddNode 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:317: graphRemoveEdge 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:332: graphGetEdges 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:397: filterEdgesByNodeType 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:457: graphTraverse 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:480: graphFindPath 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:502: graphSynonyms 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:23: graphCreateEdgeWithGuards 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:80: graphEndpointExistsWithGuards 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:114: graphDuplicateEdgeExists 0.0% +github.com/thebtf/engram/internal/mcp/tools_ingest.go:25: handleIngest 0.0% +github.com/thebtf/engram/internal/mcp/tools_ingest.go:43: ingestDocument 0.0% +github.com/thebtf/engram/internal/mcp/tools_instincts.go:20: handleImportInstincts 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:19: issuesToolSchema 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:109: validateIssueActionParams 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:143: handleIssues 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:189: resolveSourceProject 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:205: handleIssueCreate 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:250: handleIssueList 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:311: handleIssueGet 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:344: handleIssueUpdate 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:382: handleIssueComment 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:408: handleIssueReopen 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:425: handleIssueClose 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:22: handleLifecycle 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:48: lifecycleInfo 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:87: lifecyclePromote 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:118: lifecycleDemote 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:149: lifecycleSetConfidence 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:172: lifecycleSetDefeasibility 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:191: lifecycleSleepStatus 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:197: lifecycleDecayPreview 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:233: marshalJSON 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:35: vnextFEnabled 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:42: isValidPrivacyScope 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:54: derivePrivacyScopeFromLegacy 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:82: deriveLegacyScopeFromPrivacy 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:93: applyPrincipalMemoryMetadata 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:135: addPrincipalMemoryFields 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:161: newScopedWriteLintMemoryStore 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:172: writeLintVisibilityCaller 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:186: writeLintVisibilityOptions 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:192: scopedWriteLintMemoryStore 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:202: filterVisibleWriteGateCandidates 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:214: domainManageAllowed 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:218: List 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:272: writeLintVisibilityFetchLimit 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:286: Get 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:297: Create 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:301: Update 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:305: MarkSuperseded 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:319: effectiveMemoryEditor 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:329: isValidStoreObservationType 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:354: handleStoreMemory 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1111: handleEditMemory 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1218: computeTTLDays 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1258: truncateTitle 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1270: keepRecallMemory 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1280: keepRecallMemoryFilters 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1342: handleRecallMemory 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1690: staleAdvisory 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1700: marshalWithStaleAdvisory 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1727: Rank 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1751: handleRecallMemoryHybrid 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:2252: handleRateMemory 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:2281: handleSuppressMemory 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:17: SetDomainRegistryService 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:21: checkDomainWriteMCP 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:43: addDomainWriteDecisionFields 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:51: marshalStoreMemoryAugmented 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:26: newMemoryStoreSignificanceUpdater 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:33: s6OutcomeEnabledFromEnv 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:37: effectiveMemorySignificanceUpdater 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:47: currentMemorySignificanceUpdater 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:58: rateMemorySignificanceTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:74: handleRateMemorySignificance 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:109: RateMemorySignificance 0.0% +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:18: s2MetaMemoryEnabled 0.0% +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:22: knowAboutTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:39: handleKnowAbout 0.0% +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:104: parseKnowAboutLimit 0.0% +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:118: summarizeMetaIndexTags 0.0% +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:153: summarizeMetaIndexDateRange 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:23: SetPrincipalMemoryQueryService 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:27: principalMemoryQueryTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:52: handleQueryPrincipalMemory 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:134: principalMemoryQueryCaller 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:149: parsePrincipalMemoryQueryLimit 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:160: principalMemoryQueryText 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:167: parsePrincipalMemoryQueryVisibility 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:179: parsePrincipalMemoryQueryOffset 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:190: parsePrincipalMemoryQueryInt 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:215: parsePrincipalMemoryQueryBool 0.0% +github.com/thebtf/engram/internal/mcp/tools_recall.go:28: handleRecall 0.0% +github.com/thebtf/engram/internal/mcp/tools_recall.go:125: parseRecallIncludedPrincipals 0.0% +github.com/thebtf/engram/internal/mcp/tools_recall.go:165: appendRecallIncludedPrincipalMemories 0.0% +github.com/thebtf/engram/internal/mcp/tools_recall.go:223: recallIncludeTargetMatchesCaller 0.0% +github.com/thebtf/engram/internal/mcp/tools_recall.go:231: recallPrincipalQueryItemToMemory 0.0% +github.com/thebtf/engram/internal/mcp/tools_recall.go:247: handleRecallSearch 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:20: currentReviewLoopCandidateLister 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:30: reviewLoopCandidateTools 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:65: reviewLoopReadSchema 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:78: reviewPacketIDSchema 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:91: handleReviewMetricsRead 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:110: handleReviewQueueRead 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:140: handleReviewPacketDetail 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:151: handleReviewPacketPreviewAction 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:167: handleReviewPacketApplyAction 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:189: parseReviewLoopReadArgs 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:212: reviewLoopMCPPacketTypeSupported 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:217: reviewLoopActionFromArgs 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:225: reviewLoopReasonFromArgs 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:233: loadReviewPacketCandidate 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:256: applyReviewPacketPreserve 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:278: applyReviewPacketSuppress 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:296: reviewLoopMemoryFromCandidate 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:320: filterRiskyMCPReviewCandidates 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:330: marshalReviewLoop 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:17: ruleGovernanceReadTools 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:126: handleRuleGovernanceHealth 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:176: handleRuleGovernanceQueue 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:233: handleRuleGovernanceSnapshots 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:278: handleRuleGovernanceUsefulness 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:338: handleRuleGovernanceTransition 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:373: handleRuleGovernancePinSnapshot 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:406: handleRuleGovernanceRollback 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:483: requireRuleGovernanceReadAccess 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:495: requireRuleGovernanceProjectOrAdmin 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:505: ruleGovernanceCallerIsAdmin 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:510: requireRuleGovernanceAdminAccess 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:518: redactRuleGovernanceEvidenceHandles 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:535: redactRuleGovernanceEvidenceHandle 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:553: ruleGovernanceEvidenceHandleHasSensitiveText 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:559: isCanonicalRuleGovernanceEvidenceHandle 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:580: isSafeRuleGovernanceEvidenceID 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:594: parseRuleGovernanceTransitionRequest 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:604: parseRuleGovernanceSince 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:623: boundedRuleGovernanceLimit 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:634: formatRuleGovernanceTime 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:641: formatRuleGovernanceTimePtr 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:649: stringRuleCandidateStatusCounts 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:657: stringRuleVersionStateCounts 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:665: stringRuleArbiterRunStatusCounts 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:673: stringRuleInjectionEventTypeCounts 0.0% +github.com/thebtf/engram/internal/mcp/tools_rules.go:17: handleStoreRule 0.0% +github.com/thebtf/engram/internal/mcp/tools_rules.go:133: handleListRules 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:22: handleSettingsConsolidated 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:51: SetSettingsStore 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:57: settingsStore 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:67: isSecretSettingKey 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:74: requireAdmin 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:85: handleSetSetting 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:145: handleGetSetting 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:181: handleListSettings 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:216: handleDeleteSetting 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:35: resumeScopesFromFields 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:52: stateTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:82: setStateTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:142: handleGetState 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:219: handleSetState 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:274: decodeSessionStateForWrite 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:292: validateSessionStateBudget 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:303: validateNativeResumePacket 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:349: decodeProjectStateForWrite 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:364: requireStateObject 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:383: requireNestedObject 0.0% +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:10: handleStoreConsolidated 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:21: SetTemporalTruthProvider 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:25: temporalTruthEnabledFromEnv 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:30: temporalTruthTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:39: temporalTruthRefreshTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:48: temporalTruthRefreshSchema 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:58: temporalTruthSchema 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:72: currentTemporalTruthProvider 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:82: handleTemporalTruth 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:102: handleTemporalTruthRefresh 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:122: parseTemporalTruthArgs 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:151: parseTemporalTruthRefreshProject 0.0% +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:10: handleVaultConsolidated 0.0% +total: (statements) 0.1% diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-03/assert-go-test-json.stderr.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-03/assert-go-test-json.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-03/assert-go-test-json.stdout.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-03/assert-go-test-json.stdout.log new file mode 100644 index 00000000..d000d76f --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-03/assert-go-test-json.stdout.log @@ -0,0 +1,2 @@ +go test JSON verdict=PASS packages=1 tests=1 passed=1 failed=0 skipped=0 unexpected_skips=0 malformed=0 +summary=D:\Dev\engram\.w\t007-current-contract\.agent\reports\evidence\production-ready\t007-compat\t007-maker-focused-repeat3\repeat-03\go-test-summary.json diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-03/cleanup-process.stderr.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-03/cleanup-process.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-03/cleanup-process.stdout.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-03/cleanup-process.stdout.log new file mode 100644 index 00000000..b818d6a0 --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-03/cleanup-process.stdout.log @@ -0,0 +1,2 @@ +cleanup verdict=PASS database=engram_prc_rg_test_8b1d3112a7a95fbb_r3 schema=public terminated_sessions=0 remaining_database_count=0 +summary=D:\Dev\engram\.w\t007-current-contract\.agent\reports\evidence\production-ready\t007-compat\t007-maker-focused-repeat3\repeat-03\cleanup\cleanup.json diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-03/cleanup/cleanup.json b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-03/cleanup/cleanup.json new file mode 100644 index 00000000..0e0a4c06 --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-03/cleanup/cleanup.json @@ -0,0 +1,170 @@ +{ + "schema_version": 1, + "run_id": "t007-maker-focused-repeat3-repeat-3", + "timestamp": "2026-07-11T00:35:21.3131331+00:00", + "verdict": "PASS", + "database": "engram_prc_rg_test_8b1d3112a7a95fbb_r3", + "schema": "public", + "database_schema_identity": "engram_prc_rg_test_8b1d3112a7a95fbb_r3.public", + "admin_dsn": "postgres://engram:REDACTED@127.0.0.1:55432/postgres?sslmode=disable", + "postgres_container": "engram-prc-postgres", + "cleanup_status": "PASS", + "cleanup_attempted": true, + "database_existed_before": true, + "absence_verified": true, + "terminated_sessions": 0, + "remaining_database_count": 0, + "commands": [ + { + "name": "database-exists-before-cleanup", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT count(*) FROM pg_database WHERE datname = 'engram_prc_rg_test_8b1d3112a7a95fbb_r3';" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT count(*) FROM pg_database WHERE datname = 'engram_prc_rg_test_8b1d3112a7a95fbb_r3';", + "started_at": "2026-07-11T00:35:18.4824380+00:00", + "finished_at": "2026-07-11T00:35:19.0191776+00:00", + "duration_seconds": 0.537, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-repeat3\\repeat-03\\cleanup\\database-exists-before.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-repeat3\\repeat-03\\cleanup\\database-exists-before.stderr.log" + }, + { + "name": "pg-stat-activity-before-cleanup", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT COALESCE(json_agg(row_to_json(s)), '[]'::json)::text FROM (SELECT pid, usename, datname, state, backend_type, application_name, client_addr::text AS client_addr, wait_event_type, wait_event, query_start FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_8b1d3112a7a95fbb_r3' ORDER BY pid) AS s;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT COALESCE(json_agg(row_to_json(s)), '[]'::json)::text FROM (SELECT pid, usename, datname, state, backend_type, application_name, client_addr::text AS client_addr, wait_event_type, wait_event, query_start FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_8b1d3112a7a95fbb_r3' ORDER BY pid) AS s;", + "started_at": "2026-07-11T00:35:19.0823693+00:00", + "finished_at": "2026-07-11T00:35:19.9048316+00:00", + "duration_seconds": 0.822, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-repeat3\\repeat-03\\cleanup\\pg-stat-activity-before.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-repeat3\\repeat-03\\cleanup\\pg-stat-activity-before.stderr.log" + }, + { + "name": "terminate-database-sessions", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT COALESCE(json_agg(row_to_json(s)), '[]'::json)::text FROM (SELECT pid, pg_terminate_backend(pid) AS terminated FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_8b1d3112a7a95fbb_r3' AND pid <> pg_backend_pid() ORDER BY pid) AS s;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT COALESCE(json_agg(row_to_json(s)), '[]'::json)::text FROM (SELECT pid, pg_terminate_backend(pid) AS terminated FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_8b1d3112a7a95fbb_r3' AND pid <> pg_backend_pid() ORDER BY pid) AS s;", + "started_at": "2026-07-11T00:35:19.9093683+00:00", + "finished_at": "2026-07-11T00:35:20.3737499+00:00", + "duration_seconds": 0.464, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-repeat3\\repeat-03\\cleanup\\terminate-sessions.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-repeat3\\repeat-03\\cleanup\\terminate-sessions.stderr.log" + }, + { + "name": "drop-fresh-database", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "DROP DATABASE IF EXISTS \"engram_prc_rg_test_8b1d3112a7a95fbb_r3\" WITH (FORCE);" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c DROP DATABASE IF EXISTS \"engram_prc_rg_test_8b1d3112a7a95fbb_r3\" WITH (FORCE);", + "started_at": "2026-07-11T00:35:20.3811545+00:00", + "finished_at": "2026-07-11T00:35:20.9043597+00:00", + "duration_seconds": 0.523, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-repeat3\\repeat-03\\cleanup\\drop-database.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-repeat3\\repeat-03\\cleanup\\drop-database.stderr.log" + }, + { + "name": "verify-database-absent", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT count(*) FROM pg_database WHERE datname = 'engram_prc_rg_test_8b1d3112a7a95fbb_r3';" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT count(*) FROM pg_database WHERE datname = 'engram_prc_rg_test_8b1d3112a7a95fbb_r3';", + "started_at": "2026-07-11T00:35:20.9068307+00:00", + "finished_at": "2026-07-11T00:35:21.3050673+00:00", + "duration_seconds": 0.398, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-repeat3\\repeat-03\\cleanup\\verify-database-absent.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-repeat3\\repeat-03\\cleanup\\verify-database-absent.stderr.log" + } + ], + "errors": [] +} diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-03/cleanup/database-exists-before.stderr.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-03/cleanup/database-exists-before.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-03/cleanup/database-exists-before.stdout.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-03/cleanup/database-exists-before.stdout.log new file mode 100644 index 00000000..d00491fd --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-03/cleanup/database-exists-before.stdout.log @@ -0,0 +1 @@ +1 diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-03/cleanup/drop-database.stderr.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-03/cleanup/drop-database.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-03/cleanup/drop-database.stdout.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-03/cleanup/drop-database.stdout.log new file mode 100644 index 00000000..ca12dce0 --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-03/cleanup/drop-database.stdout.log @@ -0,0 +1 @@ +DROP DATABASE diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-03/cleanup/pg-stat-activity-before.stderr.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-03/cleanup/pg-stat-activity-before.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-03/cleanup/pg-stat-activity-before.stdout.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-03/cleanup/pg-stat-activity-before.stdout.log new file mode 100644 index 00000000..fe51488c --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-03/cleanup/pg-stat-activity-before.stdout.log @@ -0,0 +1 @@ +[] diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-03/cleanup/terminate-sessions.stderr.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-03/cleanup/terminate-sessions.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-03/cleanup/terminate-sessions.stdout.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-03/cleanup/terminate-sessions.stdout.log new file mode 100644 index 00000000..fe51488c --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-03/cleanup/terminate-sessions.stdout.log @@ -0,0 +1 @@ +[] diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-03/cleanup/verify-database-absent.stderr.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-03/cleanup/verify-database-absent.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-03/cleanup/verify-database-absent.stdout.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-03/cleanup/verify-database-absent.stdout.log new file mode 100644 index 00000000..573541ac --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-03/cleanup/verify-database-absent.stdout.log @@ -0,0 +1 @@ +0 diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-03/connection-count-after.stderr.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-03/connection-count-after.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-03/connection-count-after.stdout.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-03/connection-count-after.stdout.log new file mode 100644 index 00000000..573541ac --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-03/connection-count-after.stdout.log @@ -0,0 +1 @@ +0 diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-03/connection-count-before.stderr.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-03/connection-count-before.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-03/connection-count-before.stdout.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-03/connection-count-before.stdout.log new file mode 100644 index 00000000..573541ac --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-03/connection-count-before.stdout.log @@ -0,0 +1 @@ +0 diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-03/coverage.out b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-03/coverage.out new file mode 100644 index 00000000..52335d8a --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-03/coverage.out @@ -0,0 +1,3472 @@ +mode: atomic +github.com/thebtf/engram/internal/mcp/audit_helpers.go:33.53,34.30 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:34.30,36.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:37.2,37.25 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:37.25,39.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:40.2,40.12 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:44.28,46.2 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:52.83,53.12 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:53.12,54.16 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:54.16,55.32 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:55.32,61.5 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:63.3,65.33 3 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:65.33,71.4 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:77.54,78.14 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:78.14,80.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:81.2,82.16 2 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:82.16,85.3 2 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:86.2,87.13 2 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:92.91,93.23 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:93.23,95.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:96.2,97.15 2 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:97.15,99.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:100.2,105.65 4 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:105.65,113.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:117.95,118.23 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:118.23,120.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:121.2,122.15 2 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:122.15,124.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:125.2,129.65 5 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:129.65,138.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:142.87,143.23 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:143.23,145.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:146.2,147.15 2 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:147.15,149.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:150.2,153.65 4 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:153.65,161.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:166.96,167.23 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:167.23,169.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:170.2,171.15 2 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:171.15,173.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:174.2,177.63 4 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:177.63,185.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:189.97,190.23 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:190.23,192.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:193.2,194.15 2 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:194.15,196.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:197.2,200.68 4 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:200.68,208.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:30.62,31.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:31.20,33.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:34.2,35.49 2 0 +github.com/thebtf/engram/internal/mcp/coerce.go:35.49,37.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:38.2,38.14 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:38.14,40.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:41.2,41.15 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:46.52,47.14 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:47.14,49.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:50.2,50.23 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:51.14,52.11 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:53.19,54.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:55.15,56.45 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:57.12,58.31 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:59.10,60.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:67.43,68.14 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:68.14,70.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:71.2,71.23 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:72.15,73.23 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:74.19,75.38 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:75.38,77.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:78.3,78.40 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:78.40,80.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:81.3,81.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:82.14,83.56 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:83.56,85.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:86.3,86.54 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:86.54,88.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:89.3,89.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:90.10,91.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:97.49,98.14 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:98.14,100.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:101.2,101.23 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:102.15,103.18 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:104.19,105.38 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:105.38,107.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:108.3,108.40 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:108.40,110.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:111.3,111.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:112.14,113.56 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:113.56,115.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:116.3,116.54 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:116.54,118.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:119.3,119.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:120.10,121.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:127.55,128.14 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:128.14,130.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:131.2,131.23 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:132.15,133.11 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:134.19,135.40 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:135.40,137.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:138.3,138.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:139.14,140.54 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:140.54,142.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:143.3,143.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:144.10,145.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:151.46,152.14 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:152.14,154.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:155.2,155.23 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:156.12,157.11 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:158.14,159.54 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:159.54,161.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:162.3,162.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:163.15,164.16 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:165.19,166.40 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:166.40,168.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:169.3,169.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:170.10,171.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:177.40,178.14 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:178.14,180.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:181.2,181.23 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:182.13,184.26 2 0 +github.com/thebtf/engram/internal/mcp/coerce.go:184.26,185.36 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:185.36,187.5 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:189.3,189.16 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:190.16,191.11 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:192.14,193.14 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:193.14,195.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:196.3,196.13 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:197.10,198.13 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:204.38,205.14 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:205.14,207.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:208.2,209.9 2 0 +github.com/thebtf/engram/internal/mcp/coerce.go:209.9,211.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:212.2,213.27 2 0 +github.com/thebtf/engram/internal/mcp/coerce.go:213.27,214.42 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:214.42,216.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:218.2,218.15 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:222.32,223.39 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:223.39,225.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:226.2,226.30 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:226.30,228.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:229.2,229.30 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:229.30,231.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:232.2,232.15 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:236.35,237.28 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:237.28,239.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:240.2,240.28 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:240.28,242.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:243.2,243.15 1 0 +github.com/thebtf/engram/internal/mcp/context.go:17.55,19.2 1 0 +github.com/thebtf/engram/internal/mcp/context.go:22.78,24.2 1 0 +github.com/thebtf/engram/internal/mcp/context.go:29.78,31.2 1 0 +github.com/thebtf/engram/internal/mcp/context.go:35.53,38.2 2 0 +github.com/thebtf/engram/internal/mcp/context.go:41.80,43.2 1 0 +github.com/thebtf/engram/internal/mcp/context.go:48.80,50.2 1 0 +github.com/thebtf/engram/internal/mcp/context.go:54.53,57.2 2 0 +github.com/thebtf/engram/internal/mcp/context.go:61.51,62.43 1 0 +github.com/thebtf/engram/internal/mcp/context.go:62.43,64.3 1 0 +github.com/thebtf/engram/internal/mcp/context.go:65.2,65.16 1 0 +github.com/thebtf/engram/internal/mcp/health.go:22.32,26.2 3 0 +github.com/thebtf/engram/internal/mcp/health.go:29.37,33.2 3 0 +github.com/thebtf/engram/internal/mcp/health.go:36.35,40.2 3 0 +github.com/thebtf/engram/internal/mcp/health.go:42.44,45.25 3 0 +github.com/thebtf/engram/internal/mcp/health.go:45.25,47.50 1 0 +github.com/thebtf/engram/internal/mcp/health.go:47.50,50.4 2 0 +github.com/thebtf/engram/internal/mcp/health.go:55.74,60.16 5 0 +github.com/thebtf/engram/internal/mcp/health.go:60.16,62.3 1 0 +github.com/thebtf/engram/internal/mcp/health.go:63.2,71.4 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:28.42,29.65 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:29.65,32.3 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:33.2,33.40 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:33.40,35.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:36.2,36.14 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:39.120,40.69 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:40.69,42.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:43.2,44.19 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:44.19,46.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:47.2,48.17 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:48.17,50.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:51.2,52.59 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:52.59,54.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:55.2,56.20 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:56.20,58.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:59.2,60.17 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:60.17,62.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:63.2,64.21 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:64.21,66.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:67.2,68.22 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:68.22,70.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:71.2,72.23 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:72.23,74.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:76.2,98.19 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:98.19,100.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:101.2,101.66 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:104.52,106.29 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:106.29,108.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:109.2,110.46 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:113.113,123.27 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:123.27,125.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:126.2,127.16 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:127.16,129.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:130.2,130.25 1 0 +github.com/thebtf/engram/internal/mcp/server.go:127.44,138.2 1 1 +github.com/thebtf/engram/internal/mcp/server.go:141.64,143.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:146.78,148.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:151.53,153.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:156.55,158.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:161.58,163.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:166.62,168.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:171.50,173.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:176.78,178.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:181.74,183.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:186.71,189.2 2 0 +github.com/thebtf/engram/internal/mcp/server.go:191.85,193.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:195.61,197.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:199.49,201.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:204.54,206.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:211.53,213.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:216.53,218.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:222.61,224.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:228.59,230.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:234.51,236.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:240.52,242.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:246.55,248.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:252.82,254.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:260.70,262.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:269.68,271.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:274.87,277.2 2 0 +github.com/thebtf/engram/internal/mcp/server.go:282.60,284.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:290.45,292.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:297.77,299.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:303.37,313.38 3 0 +github.com/thebtf/engram/internal/mcp/server.go:313.38,315.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:316.2,317.9 2 0 +github.com/thebtf/engram/internal/mcp/server.go:317.9,319.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:320.2,321.9 2 0 +github.com/thebtf/engram/internal/mcp/server.go:321.9,323.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:324.2,325.9 2 0 +github.com/thebtf/engram/internal/mcp/server.go:325.9,327.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:328.2,328.14 1 0 +github.com/thebtf/engram/internal/mcp/server.go:332.35,334.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:383.49,387.12 3 0 +github.com/thebtf/engram/internal/mcp/server.go:387.12,388.22 1 0 +github.com/thebtf/engram/internal/mcp/server.go:388.22,389.11 1 0 +github.com/thebtf/engram/internal/mcp/server.go:390.22,392.11 2 0 +github.com/thebtf/engram/internal/mcp/server.go:393.12,393.12 0 0 +github.com/thebtf/engram/internal/mcp/server.go:396.4,397.18 2 0 +github.com/thebtf/engram/internal/mcp/server.go:397.18,398.13 1 0 +github.com/thebtf/engram/internal/mcp/server.go:401.4,402.61 2 0 +github.com/thebtf/engram/internal/mcp/server.go:402.61,404.13 2 0 +github.com/thebtf/engram/internal/mcp/server.go:407.4,407.55 1 0 +github.com/thebtf/engram/internal/mcp/server.go:407.55,409.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:411.3,411.28 1 0 +github.com/thebtf/engram/internal/mcp/server.go:414.2,414.9 1 0 +github.com/thebtf/engram/internal/mcp/server.go:415.20,416.19 1 0 +github.com/thebtf/engram/internal/mcp/server.go:417.25,418.17 1 0 +github.com/thebtf/engram/internal/mcp/server.go:418.17,420.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:421.3,421.13 1 0 +github.com/thebtf/engram/internal/mcp/server.go:427.77,428.19 1 0 +github.com/thebtf/engram/internal/mcp/server.go:428.19,431.3 2 0 +github.com/thebtf/engram/internal/mcp/server.go:433.2,433.20 1 0 +github.com/thebtf/engram/internal/mcp/server.go:434.20,435.33 1 0 +github.com/thebtf/engram/internal/mcp/server.go:436.20,437.32 1 0 +github.com/thebtf/engram/internal/mcp/server.go:438.20,439.37 1 0 +github.com/thebtf/engram/internal/mcp/server.go:443.24,444.93 1 0 +github.com/thebtf/engram/internal/mcp/server.go:445.34,446.101 1 0 +github.com/thebtf/engram/internal/mcp/server.go:447.22,448.91 1 0 +github.com/thebtf/engram/internal/mcp/server.go:449.29,450.120 1 0 +github.com/thebtf/engram/internal/mcp/server.go:451.10,456.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:461.51,462.20 1 0 +github.com/thebtf/engram/internal/mcp/server.go:463.50,464.70 1 0 +github.com/thebtf/engram/internal/mcp/server.go:465.46,466.79 1 0 +github.com/thebtf/engram/internal/mcp/server.go:467.10,468.80 1 0 +github.com/thebtf/engram/internal/mcp/server.go:473.59,485.63 2 0 +github.com/thebtf/engram/internal/mcp/server.go:485.63,487.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:489.2,493.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:496.45,503.33 3 0 +github.com/thebtf/engram/internal/mcp/server.go:503.33,505.57 2 0 +github.com/thebtf/engram/internal/mcp/server.go:505.57,506.76 1 0 +github.com/thebtf/engram/internal/mcp/server.go:506.76,507.13 1 0 +github.com/thebtf/engram/internal/mcp/server.go:509.4,509.18 1 0 +github.com/thebtf/engram/internal/mcp/server.go:509.18,511.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:511.10,513.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:514.4,518.11 5 0 +github.com/thebtf/engram/internal/mcp/server.go:522.2,522.19 1 0 +github.com/thebtf/engram/internal/mcp/server.go:660.29,683.21 2 0 +github.com/thebtf/engram/internal/mcp/server.go:683.21,689.3 5 0 +github.com/thebtf/engram/internal/mcp/server.go:690.2,699.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:712.30,765.49 3 0 +github.com/thebtf/engram/internal/mcp/server.go:765.49,789.3 5 0 +github.com/thebtf/engram/internal/mcp/server.go:790.2,799.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:805.40,936.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:942.58,1048.35 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1048.35,1077.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1080.2,1080.33 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1080.33,1090.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1093.2,1093.26 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1093.26,1123.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1124.2,1124.80 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1124.80,1126.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1127.2,1127.55 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1127.55,1129.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1130.2,1130.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1130.38,1132.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1134.2,1134.25 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1134.25,1136.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1138.2,1138.33 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1138.33,1140.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1141.2,1141.69 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1141.69,1143.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1144.2,1144.75 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1144.75,1146.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1148.2,1148.27 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1148.27,1165.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1168.2,1168.76 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1168.76,1191.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1195.2,1195.48 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1195.48,1197.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1201.2,1201.47 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1201.47,1203.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1205.2,1205.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1205.38,1207.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1212.2,1212.21 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1212.21,1214.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1228.2,1228.51 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1228.51,1230.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1233.2,1233.56 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1233.56,1235.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1238.2,1238.71 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1238.71,1298.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1302.2,1302.104 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1302.104,1321.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1324.2,1324.72 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1324.72,1333.154 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1333.154,1334.26 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1334.26,1336.8 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1337.7,1337.16 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1338.35,1340.26 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1340.26,1342.8 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1343.7,1343.18 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1371.2,1371.26 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1371.26,1390.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1393.2,1393.28 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1393.28,1443.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1446.2,1446.28 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1446.28,1478.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1481.2,1481.37 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1481.37,1561.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1564.2,1568.23 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1568.23,1570.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1572.2,1588.57 3 0 +github.com/thebtf/engram/internal/mcp/server.go:1588.57,1591.29 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1591.29,1593.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1594.3,1594.27 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1594.27,1595.29 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1595.29,1597.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1601.2,1607.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1612.79,1614.60 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1614.60,1620.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1622.2,1623.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1623.16,1631.3 3 0 +github.com/thebtf/engram/internal/mcp/server.go:1633.2,1641.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1644.69,1645.34 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1645.34,1647.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1648.2,1649.22 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1649.22,1651.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1652.2,1652.37 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1656.99,1658.14 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1659.16,1660.35 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1661.15,1662.46 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1663.18,1664.49 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1665.15,1666.46 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1667.18,1668.49 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1669.14,1670.45 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1671.15,1672.34 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1676.2,1676.14 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1677.35,1678.52 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1679.26,1680.37 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1681.20,1682.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1683.20,1684.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1685.16,1686.35 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1687.29,1688.40 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1689.33,1690.50 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1691.25,1692.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1693.23,1694.41 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1696.26,1697.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1698.24,1699.42 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1700.22,1701.40 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1702.25,1703.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1704.27,1705.45 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1706.25,1707.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1709.30,1710.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1711.28,1712.42 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1713.17,1714.40 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1715.20,1716.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1717.20,1718.45 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1719.20,1720.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1722.20,1723.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1724.18,1725.36 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1726.20,1727.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1728.18,1729.36 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1730.21,1731.39 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1732.21,1733.39 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1734.26,1735.44 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1736.25,1737.34 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1738.26,1739.44 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1740.24,1741.42 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1742.26,1743.44 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1744.27,1745.45 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1746.22,1747.40 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1748.19,1749.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1750.15,1751.34 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1752.16,1753.35 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1755.21,1756.44 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1757.19,1758.42 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1759.20,1760.44 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1761.22,1762.45 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1763.22,1764.40 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1765.23,1766.41 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1767.20,1768.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1769.32,1770.49 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1771.19,1772.37 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1773.19,1774.37 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1775.33,1776.50 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1777.35,1778.52 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1779.24,1780.42 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1781.32,1782.49 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1783.28,1784.46 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1785.21,1786.39 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1787.34,1788.51 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1789.25,1790.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1791.29,1792.46 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1793.26,1794.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1795.27,1796.44 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1798.25,1799.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1800.23,1801.41 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1802.27,1803.45 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1804.26,1805.44 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1806.29,1807.47 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1809.29,1810.46 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1811.27,1812.44 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1813.30,1814.47 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1815.38,1816.54 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1817.36,1818.52 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1820.24,1821.42 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1822.27,1823.45 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1824.22,1825.40 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1826.32,1827.49 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1828.32,1829.49 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1830.31,1831.48 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1832.35,1833.52 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1834.36,1835.53 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1836.36,1837.53 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1838.38,1839.54 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1840.34,1841.51 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1843.22,1844.40 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1845.21,1846.39 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1847.24,1848.42 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1850.25,1851.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1852.25,1853.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1859.2,1859.14 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1860.22,1863.131 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1866.51,1867.123 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1868.10,1869.50 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1874.47,1876.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1876.16,1879.3 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1880.2,1880.35 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1884.72,1890.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1896.105,1898.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1898.16,1900.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1902.2,1903.17 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1903.17,1905.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1907.2,1908.17 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1908.17,1910.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1912.2,1918.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1918.16,1920.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1921.2,1921.25 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1927.76,1933.15 3 0 +github.com/thebtf/engram/internal/mcp/server.go:1933.15,1936.17 3 0 +github.com/thebtf/engram/internal/mcp/server.go:1936.17,1938.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1939.3,1939.26 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1943.2,1950.36 3 0 +github.com/thebtf/engram/internal/mcp/server.go:1950.36,1952.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1952.8,1955.29 3 0 +github.com/thebtf/engram/internal/mcp/server.go:1955.29,1958.4 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1959.3,1962.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1966.2,1966.20 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1966.20,1977.20 6 0 +github.com/thebtf/engram/internal/mcp/server.go:1977.20,1979.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1980.3,1980.20 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1980.20,1982.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1985.3,1985.37 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1985.37,1987.30 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1987.30,1988.16 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1988.16,1990.6 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1990.11,1992.6 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1994.4,1995.56 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1995.56,1997.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1998.4,2003.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2008.2,2008.29 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2008.29,2009.63 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2009.63,2011.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2011.9,2013.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2021.2,2021.29 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2021.29,2029.38 3 0 +github.com/thebtf/engram/internal/mcp/server.go:2029.38,2031.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2031.9,2033.31 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2033.31,2035.30 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2035.30,2037.6 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2039.4,2042.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2046.2,2047.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2047.16,2049.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2050.2,2050.25 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2055.57,2056.33 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2056.33,2058.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2059.2,2060.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2060.16,2062.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2063.2,2064.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2064.16,2066.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2067.2,2067.23 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2071.79,2105.15 6 0 +github.com/thebtf/engram/internal/mcp/server.go:2105.15,2107.17 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2107.17,2111.4 3 0 +github.com/thebtf/engram/internal/mcp/server.go:2111.9,2112.17 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2112.17,2114.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2115.4,2117.26 3 0 +github.com/thebtf/engram/internal/mcp/server.go:2117.26,2119.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2119.10,2121.29 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2121.29,2123.6 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2125.4,2129.25 5 0 +github.com/thebtf/engram/internal/mcp/server.go:2130.19,2130.19 0 0 +github.com/thebtf/engram/internal/mcp/server.go:2132.20,2134.106 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2135.12,2137.103 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2140.8,2143.3 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2144.2,2150.49 3 0 +github.com/thebtf/engram/internal/mcp/server.go:2150.49,2152.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2152.8,2154.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2155.2,2168.27 4 0 +github.com/thebtf/engram/internal/mcp/server.go:2168.27,2170.17 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2170.17,2173.4 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2173.9,2175.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2177.2,2182.40 4 0 +github.com/thebtf/engram/internal/mcp/server.go:2182.40,2183.21 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2184.20,2185.20 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2186.19,2187.19 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2191.2,2191.24 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2191.24,2193.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2193.8,2193.30 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2193.30,2195.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2198.2,2198.28 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2198.28,2200.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2203.2,2203.29 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2203.29,2205.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2207.2,2208.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2208.16,2210.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2211.2,2211.28 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2216.103,2218.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2218.16,2220.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2222.2,2223.15 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2223.15,2225.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2227.2,2239.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2239.16,2241.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2242.2,2242.25 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2246.93,2248.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2251.91,2253.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:18.28,29.20 4 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:29.20,33.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:35.2,44.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:68.36,69.49 1 1 +github.com/thebtf/engram/internal/mcp/tools_admin.go:69.49,74.3 4 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:75.2,75.25 1 1 +github.com/thebtf/engram/internal/mcp/tools_admin.go:80.26,82.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:84.89,86.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:86.16,88.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:89.2,90.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:90.18,92.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:94.2,94.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:95.15,96.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:97.26,98.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:99.25,100.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:101.23,105.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:105.22,107.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:108.3,108.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:109.10,110.114 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:120.92,126.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:126.26,128.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:130.2,131.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:131.19,133.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:134.2,135.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:135.19,137.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:138.2,138.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:138.24,140.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:142.2,142.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:142.25,144.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:146.2,147.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:147.16,149.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:151.2,151.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:27.40,30.2 2 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:32.30,46.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:48.99,49.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:49.34,51.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:52.2,52.69 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:52.69,54.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:56.2,57.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:57.16,59.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:60.2,61.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:61.21,63.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:64.2,67.26 3 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:67.26,69.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:70.2,71.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:71.25,73.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:75.2,77.44 3 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:77.44,79.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:80.2,80.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:80.33,82.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:83.2,83.81 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:86.52,87.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:87.16,89.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:90.2,90.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:90.15,92.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:93.2,93.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:96.73,97.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:97.21,99.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:100.2,101.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:101.29,110.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:111.2,111.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:114.34,116.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:31.98,32.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:32.52,34.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:35.2,35.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:35.26,37.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:39.2,40.49 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:40.49,42.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:43.2,43.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:43.21,45.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:46.2,46.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:46.21,48.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:49.2,49.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:49.18,51.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:52.2,52.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:52.18,54.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:56.2,56.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:56.38,58.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:60.2,61.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:61.16,63.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:68.2,70.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:70.26,77.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:79.2,81.36 3 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:81.36,84.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:86.2,89.28 3 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:89.28,90.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:90.39,91.9 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:93.3,97.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:100.2,104.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:107.60,113.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:115.101,116.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:116.38,118.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:120.2,122.21 3 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:122.21,123.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:123.26,125.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:126.3,126.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:126.23,128.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:129.8,130.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:130.26,132.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:133.3,133.68 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:133.68,135.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:137.2,140.20 3 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:141.17,142.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:143.67,143.67 0 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:144.10,145.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:148.2,162.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:162.16,164.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:165.2,165.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:165.19,173.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:174.2,174.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:174.30,176.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:177.2,177.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:177.31,179.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:181.2,182.36 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:182.36,196.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:198.2,199.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:199.19,201.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:202.2,203.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:203.18,205.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:206.2,207.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:207.21,209.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:210.2,211.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:211.25,213.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:214.2,225.21 3 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:225.21,227.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:228.2,228.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:228.25,230.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:231.2,231.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:231.18,233.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:235.2,244.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:244.21,246.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:247.2,247.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:247.25,249.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:250.2,250.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:250.18,252.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:253.2,253.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:253.24,255.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:256.2,256.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:259.50,261.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:261.22,263.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:264.2,264.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:270.90,272.42 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:272.42,276.3 3 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:277.2,281.27 3 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:281.27,282.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:282.45,284.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:286.2,286.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:25.28,88.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:95.95,96.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:96.22,98.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:99.2,100.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:100.32,102.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:104.2,105.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:105.16,107.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:109.2,114.35 3 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:114.35,121.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:123.2,123.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:123.25,125.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:127.2,134.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:134.16,136.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:138.2,146.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:154.94,155.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:155.22,157.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:158.2,159.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:159.32,161.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:163.2,164.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:164.16,166.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:168.2,172.35 3 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:172.35,179.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:181.2,181.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:181.25,183.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:185.2,192.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:192.16,194.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:196.2,203.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:211.97,212.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:212.22,214.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:215.2,216.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:216.32,218.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:220.2,221.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:221.16,223.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:225.2,229.35 3 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:229.35,236.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:238.2,238.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:238.25,240.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:242.2,249.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:249.16,251.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:253.2,260.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:31.80,32.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:32.14,34.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:35.2,48.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:51.136,53.51 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:53.51,55.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:56.2,56.83 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:59.94,60.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:60.21,62.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:63.2,63.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:68.30,162.2 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:165.98,166.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:166.49,168.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:169.2,170.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:170.16,172.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:173.2,174.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:174.19,176.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:177.2,179.17 3 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:179.17,181.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:183.2,184.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:184.16,186.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:188.2,189.31 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:189.31,190.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:190.15,191.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:193.3,193.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:196.2,201.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:201.16,203.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:204.2,204.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:208.96,209.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:209.49,211.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:212.2,213.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:213.16,215.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:216.2,217.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:217.13,219.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:221.2,222.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:222.16,224.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:225.2,225.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:225.22,227.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:229.2,230.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:230.16,232.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:233.2,233.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:239.100,240.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:240.22,242.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:243.2,244.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:244.16,246.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:247.2,248.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:248.13,250.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:255.2,256.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:256.12,263.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:263.30,264.77 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:264.77,269.5 4 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:271.3,272.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:272.21,274.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:275.3,275.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:279.2,279.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:279.29,281.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:284.2,285.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:285.16,287.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:288.2,288.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:288.22,290.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:291.2,291.55 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:291.55,293.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:294.2,294.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:294.74,296.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:297.2,298.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:298.16,300.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:306.2,307.41 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:307.41,309.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:310.2,324.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:324.16,325.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:325.50,327.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:328.3,328.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:330.2,330.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:330.38,332.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:334.2,341.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:341.16,343.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:344.2,344.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:348.99,349.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:349.49,351.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:352.2,353.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:353.16,355.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:356.2,357.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:357.13,359.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:360.2,362.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:362.16,364.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:365.2,365.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:365.22,367.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:368.2,368.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:368.74,370.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:371.2,372.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:372.16,374.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:375.2,375.85 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:375.85,377.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:379.2,380.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:380.16,381.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:381.50,383.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:384.3,384.60 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:386.2,386.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:386.20,388.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:390.2,395.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:395.16,397.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:398.2,398.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:402.102,403.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:403.49,405.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:406.2,407.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:407.16,409.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:410.2,411.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:411.13,413.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:414.2,415.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:415.16,417.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:418.2,418.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:418.22,420.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:421.2,421.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:421.74,423.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:424.2,425.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:425.16,427.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:428.2,428.88 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:428.88,430.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:432.2,433.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:433.16,434.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:434.50,436.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:437.3,437.63 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:439.2,439.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:439.20,441.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:443.2,448.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:448.16,450.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:451.2,451.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:34.30,36.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:42.61,44.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:48.32,75.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:79.32,94.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:100.98,101.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:101.25,103.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:104.2,104.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:104.29,106.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:108.2,113.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:113.17,114.55 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:114.55,116.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:118.2,118.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:118.24,120.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:121.2,121.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:121.23,123.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:124.2,124.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:124.23,126.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:134.2,135.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:135.21,137.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:142.2,147.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:147.16,149.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:154.2,165.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:165.25,175.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:177.2,183.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:183.16,185.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:186.2,186.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:194.98,195.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:195.25,197.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:198.2,198.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:198.29,200.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:202.2,205.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:205.17,207.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:208.2,209.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:209.21,211.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:213.2,214.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:214.16,216.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:217.2,218.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:218.16,220.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:221.2,222.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:222.16,224.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:226.2,231.11 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:231.11,233.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:235.2,236.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:236.16,238.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:239.2,239.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:21.52,22.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:22.24,25.28 3 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:25.28,27.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:29.2,29.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:35.72,37.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:37.15,39.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:41.2,42.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:42.16,44.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:45.2,45.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:49.99,51.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:51.16,53.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:55.2,56.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:56.16,58.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:60.2,72.23 7 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:72.23,74.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:75.2,75.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:75.24,77.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:78.2,78.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:78.24,80.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:81.2,81.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:82.27,82.27 0 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:84.10,85.93 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:87.2,87.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:87.30,89.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:90.2,90.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:90.26,92.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:94.2,95.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:95.16,97.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:99.2,100.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:100.16,102.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:104.2,112.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:112.16,114.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:116.2,123.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:123.16,125.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:126.2,126.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:130.97,132.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:132.16,134.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:136.2,137.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:137.16,139.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:141.2,147.23 4 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:147.23,149.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:150.2,150.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:150.26,152.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:154.2,155.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:155.16,157.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:159.2,160.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:160.16,161.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:161.47,163.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:164.3,164.51 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:167.2,167.97 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:167.97,172.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:174.2,175.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:175.16,177.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:179.2,185.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:185.16,187.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:188.2,188.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:192.99,194.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:194.16,196.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:198.2,199.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:199.16,201.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:203.2,207.26 3 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:207.26,209.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:211.2,212.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:212.16,214.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:216.2,223.26 3 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:223.26,229.28 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:229.28,231.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:232.3,232.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:235.2,236.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:236.16,238.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:239.2,239.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:243.100,245.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:245.16,247.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:249.2,250.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:250.16,252.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:254.2,262.23 5 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:262.23,264.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:265.2,265.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:265.24,267.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:268.2,268.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:269.27,269.27 0 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:271.10,272.93 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:274.2,274.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:274.30,276.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:277.2,277.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:277.26,279.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:281.2,281.71 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:281.71,282.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:282.47,284.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:285.3,285.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:288.2,293.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:293.16,295.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:296.2,296.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:302.92,309.19 5 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:309.19,310.53 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:310.53,313.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:316.2,317.51 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:317.51,318.66 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:318.66,320.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:323.2,331.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:331.16,333.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:334.2,334.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:338.46,342.32 4 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:342.32,343.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:343.20,346.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:348.2,350.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:350.26,352.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:352.27,353.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:353.13,355.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:356.4,356.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:358.3,358.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:360.2,360.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:16.45,18.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:20.35,36.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:38.84,39.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:39.40,41.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:42.2,42.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:42.50,44.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:45.2,45.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:48.101,50.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:50.16,52.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:53.2,54.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:54.16,56.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:57.2,58.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:58.19,60.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:61.2,62.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:62.21,64.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:65.2,66.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:66.16,68.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:69.2,69.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:72.102,74.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:74.16,76.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:77.2,82.8 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:10.100,12.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:12.16,14.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:16.2,17.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:17.18,19.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:21.2,21.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:22.16,23.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:24.14,25.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:26.14,27.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:28.17,29.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:30.17,31.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:32.21,33.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:34.19,35.42 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:36.17,37.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:38.16,39.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:40.16,41.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:42.21,43.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:44.10,45.167 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:15.77,16.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:16.33,18.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:20.2,21.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:21.27,23.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:25.2,26.28 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:26.28,29.17 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:29.17,31.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:34.2,41.32 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:41.32,46.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:46.20,48.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:49.3,49.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:52.2,53.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:53.16,55.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:57.2,57.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:61.97,62.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:62.28,64.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:66.2,67.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:67.16,69.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:71.2,75.29 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:75.29,77.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:79.2,80.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:80.16,82.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:84.2,84.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:84.20,86.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:88.2,97.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:97.25,103.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:103.20,105.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:106.3,106.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:106.19,108.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:109.3,109.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:112.2,113.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:113.16,115.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:117.2,117.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:121.95,122.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:122.28,124.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:126.2,127.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:127.16,129.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:131.2,137.50 4 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:137.50,139.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:141.2,142.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:142.16,144.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:145.2,145.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:145.16,147.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:149.2,149.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:149.21,151.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:153.2,154.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:154.16,156.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:157.2,157.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:157.20,159.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:161.2,161.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:165.98,166.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:166.28,168.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:170.2,171.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:171.16,173.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:175.2,181.50 4 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:181.50,183.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:185.2,185.96 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:185.96,187.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:189.2,189.88 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:197.98,198.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:198.28,200.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:202.2,203.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:203.16,205.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:207.2,217.74 6 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:217.74,219.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:222.2,223.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:223.16,225.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:227.2,229.156 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:235.98,237.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:237.16,239.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:241.2,247.24 4 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:247.24,249.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:252.2,253.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:253.29,255.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:256.2,256.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:15.93,16.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:16.37,18.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:20.2,21.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:21.16,23.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:25.2,32.16 7 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:32.16,34.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:35.2,35.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:35.19,37.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:38.2,38.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:38.19,40.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:42.2,43.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:43.16,45.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:47.2,54.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:54.16,56.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:57.2,57.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:61.91,62.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:62.37,64.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:66.2,67.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:67.16,69.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:71.2,73.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:73.16,75.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:76.2,76.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:76.19,78.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:80.2,81.43 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:81.43,83.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:83.19,85.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:86.3,86.79 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:87.8,89.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:90.2,90.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:90.16,91.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:91.45,93.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:94.3,94.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:97.2,110.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:110.16,112.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:113.2,113.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:117.93,119.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:122.91,123.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:123.37,125.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:127.2,128.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:128.16,130.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:132.2,133.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:133.19,135.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:136.2,141.16 5 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:141.16,143.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:145.2,155.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:155.25,165.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:167.2,168.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:168.16,170.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:171.2,171.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:175.94,176.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:176.37,178.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:180.2,181.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:181.16,183.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:185.2,187.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:187.16,189.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:190.2,190.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:190.19,192.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:193.2,196.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:196.16,198.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:200.2,208.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:208.25,216.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:218.2,225.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:225.16,227.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:228.2,228.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:232.94,233.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:233.37,235.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:237.2,238.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:238.16,240.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:242.2,243.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:243.21,245.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:246.2,248.19 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:248.19,250.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:252.2,253.46 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:253.46,255.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:255.13,257.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:259.2,259.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:259.44,261.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:261.13,263.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:266.2,267.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:267.16,269.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:271.2,278.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:278.16,280.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:281.2,281.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:19.69,21.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:23.38,38.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:40.51,63.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:65.53,80.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:82.46,85.32 3 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:85.32,87.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:88.2,88.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:91.105,93.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:93.16,95.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:96.2,97.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:97.16,99.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:100.2,100.70 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:103.107,105.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:105.16,107.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:108.2,109.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:109.16,111.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:112.2,112.72 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:115.101,117.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:117.16,119.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:120.2,121.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:121.17,123.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:124.2,139.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:142.109,144.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:144.16,146.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:147.2,154.8 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:157.100,159.28 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:159.28,161.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:161.18,163.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:164.3,164.62 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:166.2,167.72 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:167.72,169.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:170.2,170.53 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:170.53,172.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:173.2,174.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:174.26,176.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:177.2,177.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:180.73,182.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:182.16,184.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:185.2,185.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:12.104,14.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:14.16,16.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:18.2,19.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:19.18,21.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:23.2,23.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:24.14,25.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:26.18,27.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:28.17,29.46 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:30.10,31.96 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:36.101,37.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:37.27,39.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:41.2,42.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:42.16,44.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:46.2,47.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:47.21,49.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:50.2,51.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:51.19,53.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:54.2,54.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:55.52,55.52 0 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:56.10,57.101 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:59.2,61.93 2 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:61.93,64.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:66.2,70.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:27.31,94.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:98.97,100.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:100.26,102.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:103.2,103.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:103.28,105.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:107.2,108.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:108.16,110.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:112.2,115.15 4 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:115.15,117.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:118.2,118.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:118.17,120.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:122.2,123.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:123.16,125.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:127.2,140.29 3 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:140.29,151.31 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:151.31,154.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:155.3,155.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:158.2,162.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:167.100,169.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:169.26,171.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:172.2,172.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:172.28,174.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:175.2,175.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:175.26,177.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:179.2,180.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:180.16,182.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:184.2,185.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:185.22,187.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:189.2,190.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:190.20,191.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:191.54,199.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:200.3,200.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:200.61,202.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:203.3,203.58 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:206.2,211.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:215.95,217.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:217.32,219.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:220.2,220.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:220.28,222.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:224.2,225.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:225.16,227.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:229.2,230.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:230.22,232.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:234.2,234.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:234.61,236.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:239.2,239.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:239.25,246.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:248.2,252.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:258.104,260.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:260.26,262.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:267.2,271.20 3 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:271.20,275.3 3 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:275.8,279.3 3 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:280.2,280.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:284.60,285.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:285.30,287.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:288.2,288.42 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:288.42,290.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:291.2,291.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:64.89,65.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:65.25,67.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:69.2,70.49 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:70.49,72.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:74.2,74.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:75.18,76.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:77.21,78.35 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:79.19,80.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:81.18,82.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:83.19,84.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:85.18,86.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:87.18,91.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:91.23,93.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:94.3,94.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:95.10,96.62 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:100.81,103.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:103.19,105.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:106.2,107.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:107.19,109.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:112.2,112.46 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:112.46,114.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:115.2,115.46 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:115.46,117.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:122.2,122.66 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:122.66,124.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:127.2,127.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:127.25,128.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:128.22,130.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:131.8,132.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:132.26,134.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:138.2,138.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:138.25,139.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:139.22,141.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:142.8,143.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:143.26,145.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:148.2,148.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:148.22,150.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:151.2,151.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:151.38,153.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:154.2,154.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:154.19,156.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:159.2,161.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:161.25,164.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:165.2,165.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:165.25,168.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:169.2,171.23 3 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:171.23,174.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:175.2,175.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:175.23,178.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:180.2,193.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:193.16,195.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:198.2,199.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:199.29,201.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:202.2,202.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:202.29,204.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:205.2,213.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:216.121,217.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:217.28,218.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:218.26,220.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:221.3,222.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:222.17,223.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:223.49,225.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:226.4,226.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:228.3,228.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:230.2,230.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:230.26,232.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:233.2,234.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:234.16,235.48 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:235.48,237.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:238.3,238.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:240.2,240.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:243.101,248.36 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:248.36,250.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:250.8,252.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:253.2,253.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:253.16,255.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:256.2,256.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:256.32,257.128 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:257.128,262.72 5 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:262.72,264.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:267.2,267.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:276.81,277.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:277.25,279.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:280.2,280.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:280.22,282.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:283.2,283.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:283.39,285.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:286.2,286.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:286.25,288.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:289.2,289.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:289.21,291.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:292.2,293.14 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:293.14,295.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:296.2,305.16 5 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:305.16,307.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:308.2,314.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:317.84,318.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:318.19,320.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:321.2,323.63 3 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:323.63,325.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:326.2,329.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:332.82,333.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:333.38,335.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:336.2,337.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:338.18,339.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:340.18,341.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:345.2,345.59 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:345.59,347.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:349.2,351.21 3 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:351.21,353.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:353.8,356.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:357.2,357.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:357.16,359.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:366.2,367.41 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:367.41,369.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:371.2,378.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:397.115,398.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:398.15,400.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:403.2,404.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:404.26,405.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:405.28,407.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:408.3,408.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:408.28,410.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:412.2,412.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:412.23,415.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:420.2,426.12 4 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:426.12,427.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:427.27,429.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:429.18,431.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:433.4,433.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:433.33,435.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:440.2,441.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:441.26,442.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:442.28,443.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:443.49,445.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:448.3,448.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:448.28,449.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:449.49,451.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:454.2,454.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:457.82,458.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:458.21,460.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:461.2,462.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:462.16,464.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:465.2,465.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:465.36,467.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:468.2,469.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:469.16,471.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:472.2,477.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:480.82,481.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:481.40,483.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:484.2,485.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:485.19,487.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:488.2,489.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:489.16,491.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:492.2,499.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:502.82,503.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:503.21,505.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:506.2,507.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:507.16,509.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:510.2,514.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:23.179,24.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:24.22,26.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:28.2,32.22 4 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:32.22,34.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:35.2,36.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:36.22,38.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:40.2,41.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:41.26,43.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:44.2,44.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:44.26,46.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:47.2,47.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:47.30,49.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:50.2,50.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:50.30,52.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:54.2,55.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:55.16,57.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:58.2,58.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:58.13,60.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:61.2,62.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:62.16,64.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:65.2,65.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:65.13,67.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:69.2,70.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:70.16,72.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:73.2,73.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:73.15,75.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:77.2,77.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:80.172,81.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:81.28,82.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:82.23,84.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:85.3,85.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:85.18,87.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:88.3,89.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:89.17,90.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:90.49,92.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:93.4,93.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:95.3,95.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:98.2,98.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:98.24,100.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:101.2,101.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:101.19,103.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:104.2,105.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:105.16,106.48 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:106.48,108.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:109.3,109.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:111.2,111.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:114.119,116.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:116.22,118.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:119.2,120.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:120.22,122.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:124.2,126.26 3 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:126.26,127.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:127.36,129.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:130.3,130.105 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:131.8,132.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:132.32,134.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:135.3,135.103 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:137.2,137.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:137.16,139.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:141.2,141.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:141.32,143.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:143.27,145.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:146.3,147.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:147.27,149.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:150.3,150.106 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:150.106,151.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:153.3,153.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:153.27,154.114 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:154.114,155.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:157.9,157.104 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:157.104,158.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:160.3,160.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:160.27,161.114 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:161.114,162.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:164.9,164.104 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:164.104,165.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:167.3,167.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:169.2,169.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:25.90,26.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:26.26,28.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:30.2,31.49 2 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:31.49,33.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:35.2,35.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:36.16,37.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:38.10,39.63 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:43.84,44.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:44.21,46.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:47.2,47.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:47.25,49.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:50.2,50.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:50.21,52.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:53.2,53.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:53.21,55.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:57.2,58.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:59.18,60.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:61.15,62.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:63.24,64.42 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:65.10,66.108 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:69.2,70.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:70.22,72.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:73.2,74.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:74.29,76.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:78.2,78.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:78.14,85.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:87.2,89.37 3 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:89.37,92.21 3 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:92.21,94.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:97.2,100.31 4 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:100.31,102.38 2 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:102.38,104.37 2 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:104.37,106.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:109.3,122.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:122.26,124.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:125.3,125.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:125.19,127.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:131.3,133.39 3 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:133.39,135.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:135.9,137.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:138.3,138.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:138.17,140.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:142.3,142.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:142.34,144.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:145.3,145.11 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:148.2,155.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:20.99,22.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:22.16,24.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:26.2,31.44 3 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:31.44,32.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:32.33,33.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:33.43,38.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:43.2,43.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:43.49,45.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:46.2,46.48 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:46.48,48.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:50.2,52.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:52.27,55.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:55.8,60.24 3 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:60.24,62.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:64.3,64.57 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:64.57,66.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:68.3,68.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:71.2,71.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:71.16,73.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:75.2,76.23 2 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:76.23,78.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:80.2,80.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:19.40,89.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:109.71,111.9 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:111.9,113.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:115.2,116.38 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:116.38,117.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:118.13,119.41 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:119.41,121.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:122.17,123.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:123.43,125.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:126.11,127.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:127.40,129.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:133.2,133.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:133.22,138.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:139.2,139.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:143.90,144.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:144.25,146.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:148.2,149.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:149.16,151.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:153.2,157.61 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:157.61,159.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:161.2,161.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:162.16,163.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:164.14,165.35 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:166.13,167.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:168.16,169.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:170.17,171.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:172.16,173.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:174.15,175.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:176.10,177.120 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:189.85,191.39 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:191.39,192.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:192.44,194.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:196.2,196.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:196.15,198.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:199.2,199.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:199.15,201.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:202.2,202.46 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:205.91,207.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:207.17,209.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:211.2,215.25 5 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:215.25,217.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:218.2,224.25 4 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:224.25,226.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:227.2,227.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:227.25,229.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:231.2,243.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:243.16,245.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:247.2,247.139 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:250.89,252.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:252.19,254.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:255.2,256.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:256.25,258.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:259.2,264.52 5 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:264.52,266.14 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:266.14,268.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:271.2,277.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:277.25,280.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:282.2,283.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:283.16,285.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:287.2,287.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:287.22,288.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:288.20,290.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:291.3,291.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:294.2,297.31 3 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:297.31,300.29 3 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:300.29,302.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:303.3,305.69 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:308.2,308.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:311.88,313.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:313.13,315.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:317.2,318.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:318.16,320.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:322.2,328.22 6 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:328.22,331.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:333.2,333.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:333.23,335.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:335.30,338.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:341.2,341.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:344.91,346.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:346.13,348.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:350.2,353.18 3 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:353.18,354.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:354.27,356.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:357.3,357.73 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:357.73,359.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:362.2,362.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:362.19,370.17 4 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:370.17,372.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:375.2,376.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:376.26,378.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:379.2,379.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:382.92,384.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:384.13,386.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:388.2,389.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:389.16,391.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:393.2,401.16 4 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:401.16,403.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:405.2,405.88 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:408.91,410.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:410.13,412.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:414.2,418.95 4 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:418.95,420.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:422.2,422.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:425.90,427.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:427.13,429.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:431.2,433.167 3 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:433.167,435.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:437.2,437.89 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:437.89,439.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:441.2,441.108 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:22.93,24.49 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:24.49,26.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:28.2,28.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:29.14,30.42 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:31.17,32.59 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:33.16,34.58 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:35.24,36.75 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:37.27,38.71 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:39.22,40.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:41.23,42.63 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:43.10,44.66 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:48.79,49.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:49.13,51.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:52.2,53.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:53.16,55.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:57.2,58.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:58.32,60.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:61.2,84.28 3 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:87.101,88.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:88.13,90.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:91.2,91.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:91.38,93.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:94.2,95.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:95.16,97.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:98.2,98.53 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:98.53,100.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:102.2,104.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:104.17,106.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:107.2,107.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:107.29,109.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:110.2,115.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:118.100,119.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:119.13,121.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:122.2,122.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:122.38,124.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:125.2,126.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:126.16,128.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:129.2,129.53 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:129.53,131.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:133.2,135.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:135.17,137.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:138.2,138.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:138.29,140.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:141.2,146.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:149.123,150.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:150.13,152.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:153.2,153.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:153.18,155.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:156.2,156.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:156.38,158.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:159.2,161.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:161.17,163.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:164.2,169.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:172.113,173.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:173.13,175.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:176.2,176.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:176.50,178.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:179.2,181.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:181.17,183.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:184.2,188.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:191.57,195.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:197.102,198.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:198.13,200.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:201.2,201.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:201.20,203.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:204.2,205.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:205.16,207.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:209.2,210.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:210.32,212.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:214.2,217.56 3 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:217.56,223.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:225.2,230.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:233.41,235.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:235.16,237.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:238.2,238.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:35.27,37.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:42.41,43.11 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:44.48,45.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:46.10,47.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:54.57,55.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:56.17,57.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:58.16,59.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:60.10,61.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:82.58,83.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:84.28,85.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:86.26,87.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:88.10,89.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:93.114,95.68 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:95.68,97.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:99.2,101.42 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:101.42,102.71 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:102.71,105.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:107.2,117.23 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:117.23,119.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:121.2,124.22 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:124.22,125.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:125.31,127.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:128.3,128.35 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:129.8,129.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:129.37,131.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:132.2,132.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:135.74,136.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:136.30,138.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:139.2,139.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:139.34,141.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:142.2,142.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:142.31,144.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:145.2,145.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:145.22,147.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:161.169,162.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:162.17,164.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:165.2,166.51 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:166.51,168.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:169.2,169.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:172.92,174.42 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:174.42,177.63 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:177.63,179.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:179.9,181.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:183.2,183.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:186.65,190.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:192.115,194.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:194.26,196.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:196.8,196.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:196.31,198.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:199.2,199.117 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:202.122,206.31 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:206.31,207.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:207.45,209.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:211.2,211.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:214.72,216.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:218.117,219.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:219.16,221.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:222.2,223.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:223.20,225.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:225.17,227.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:228.3,228.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:228.27,229.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:229.50,231.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:231.30,232.11 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:236.3,236.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:239.2,241.60 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:241.60,243.61 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:243.61,245.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:246.3,246.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:246.24,247.9 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:249.3,250.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:250.17,252.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:253.3,253.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:253.22,254.9 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:256.3,256.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:256.29,257.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:257.50,259.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:259.30,260.11 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:264.3,265.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:265.32,266.9 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:269.2,269.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:272.51,273.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:273.16,275.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:276.2,277.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:277.18,279.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:280.2,280.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:280.19,282.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:283.2,283.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:286.97,288.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:288.30,290.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:291.2,291.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:291.49,293.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:294.2,294.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:297.108,299.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:301.108,303.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:305.102,307.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:319.55,320.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:320.31,322.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:323.2,323.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:323.26,325.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:326.2,326.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:329.71,330.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:343.26,344.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:345.10,346.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:354.95,362.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:362.16,364.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:366.2,397.39 14 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:397.39,399.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:399.27,401.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:402.8,404.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:405.2,407.46 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:407.46,410.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:411.2,411.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:411.44,413.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:413.12,415.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:417.2,417.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:417.26,419.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:420.2,420.84 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:420.84,422.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:427.2,427.65 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:427.65,429.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:431.2,433.20 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:433.20,435.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:436.2,437.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:437.20,439.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:440.2,440.56 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:440.56,442.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:443.2,443.56 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:443.56,448.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:450.2,450.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:450.45,453.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:459.2,459.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:459.31,461.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:461.22,462.62 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:462.62,465.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:466.4,466.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:468.3,468.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:471.2,472.115 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:472.115,474.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:491.2,491.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:491.19,493.23 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:493.23,495.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:496.3,508.21 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:508.21,510.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:511.3,511.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:522.2,522.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:522.43,535.34 5 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:535.34,556.30 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:556.30,558.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:559.4,559.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:559.44,561.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:562.4,562.106 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:562.106,564.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:575.4,575.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:575.74,577.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:578.4,579.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:579.18,581.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:583.4,584.28 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:584.28,586.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:588.4,588.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:588.31,599.57 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:599.57,601.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:601.17,604.7 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:606.5,607.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:607.21,609.6 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:615.5,615.138 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:615.138,617.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:617.27,619.7 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:620.6,620.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:622.5,623.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:623.26,625.6 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:626.5,626.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:630.4,631.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:631.20,633.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:634.4,634.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:634.22,637.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:637.26,639.6 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:640.5,640.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:645.4,660.77 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:660.77,662.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:663.4,664.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:664.25,666.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:667.4,667.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:673.2,673.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:673.26,675.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:677.2,678.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:678.25,680.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:681.2,681.97 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:681.97,683.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:690.2,691.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:691.21,693.33 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:693.33,695.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:696.3,696.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:696.33,698.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:699.3,699.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:699.49,704.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:721.3,721.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:721.54,722.84 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:722.84,724.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:728.2,728.99 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:728.99,730.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:732.2,733.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:733.22,735.10 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:736.109,737.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:738.100,739.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:740.114,741.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:742.107,743.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:744.11,745.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:748.2,749.43 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:749.43,751.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:753.2,755.34 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:755.34,756.48 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:756.48,757.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:757.19,760.5 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:764.2,764.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:764.31,767.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:768.2,768.35 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:768.35,771.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:772.2,772.76 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:772.76,776.3 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:778.2,780.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:780.16,782.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:782.20,785.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:788.2,788.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:788.25,798.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:798.18,800.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:800.9,800.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:800.30,807.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:808.3,808.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:808.36,810.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:811.3,812.50 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:812.50,815.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:816.3,822.17 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:822.17,824.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:826.3,836.17 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:836.17,838.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:839.3,839.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:842.2,843.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:843.30,844.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:844.52,846.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:846.9,848.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:851.2,869.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:869.21,871.43 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:871.43,873.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:874.3,874.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:874.29,876.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:886.3,886.76 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:886.76,888.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:890.2,890.105 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:890.105,892.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:893.2,894.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:894.16,896.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:901.2,904.40 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:904.40,905.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:905.15,906.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:909.3,910.63 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:910.63,912.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:912.9,914.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:916.3,916.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:916.43,918.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:919.3,920.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:920.20,922.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:925.3,925.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:925.23,928.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:929.3,931.33 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:931.33,934.39 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:934.39,936.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:939.2,948.42 5 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:948.42,950.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:950.21,952.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:952.9,955.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:959.2,959.53 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:959.53,960.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:960.54,961.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:961.33,963.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:964.9,972.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:973.3,973.60 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:973.60,974.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:974.40,976.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:978.3,978.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:978.61,979.41 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:979.41,981.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:983.3,983.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:983.28,985.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:986.3,987.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:989.2,989.51 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:989.51,991.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:995.2,997.53 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:997.53,999.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:999.8,1001.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1002.2,1002.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1002.22,1004.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1008.2,1014.76 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1014.76,1016.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1021.2,1021.57 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1021.57,1026.13 5 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1026.13,1029.21 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1029.21,1032.5 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1033.4,1033.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1033.49,1035.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1036.4,1043.89 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1043.89,1046.5 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1048.4,1048.86 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1052.2,1063.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1063.21,1065.40 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1065.40,1067.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1068.3,1068.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1068.38,1070.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1072.2,1074.18 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1074.18,1081.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1082.2,1082.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1082.28,1084.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1085.2,1085.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1085.16,1087.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1088.2,1088.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1088.30,1090.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1091.2,1091.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1091.30,1093.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1098.2,1098.76 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1098.76,1100.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1101.2,1102.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1102.16,1104.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1105.2,1105.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1111.94,1113.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1113.15,1115.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1117.2,1118.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1118.16,1120.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1122.2,1123.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1123.13,1125.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1126.2,1131.16 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1131.16,1133.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1134.2,1134.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1134.19,1136.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1146.2,1146.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1146.39,1148.55 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1148.55,1150.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1152.2,1152.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1152.39,1154.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1157.2,1158.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1158.21,1163.21 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1163.21,1165.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1166.3,1167.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1167.21,1169.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1170.3,1170.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1170.52,1172.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1173.3,1173.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1173.52,1178.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1179.3,1179.41 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1179.41,1182.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1183.3,1183.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1188.2,1188.46 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1188.46,1190.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1191.2,1191.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1191.27,1193.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1195.2,1196.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1196.16,1198.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1201.2,1210.16 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1210.16,1212.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1213.2,1213.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1218.59,1220.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1220.38,1222.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1225.2,1226.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1226.29,1227.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1227.22,1229.9 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1232.2,1232.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1232.18,1234.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1237.2,1244.29 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1244.29,1245.67 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1245.67,1247.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1249.2,1249.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1249.16,1251.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1254.2,1254.11 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1258.55,1260.47 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1260.47,1262.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1263.2,1264.58 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1264.58,1266.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1267.2,1267.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1270.252,1271.108 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1271.108,1273.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1274.2,1274.55 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1274.55,1276.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1277.2,1277.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1280.184,1282.69 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1282.69,1284.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1284.32,1285.58 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1285.58,1287.10 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1290.3,1290.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1290.18,1292.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1294.2,1294.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1294.19,1297.32 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1297.32,1298.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1298.39,1300.10 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1303.3,1303.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1303.19,1305.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1307.2,1307.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1307.21,1309.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1309.32,1310.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1310.49,1312.10 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1315.3,1315.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1315.18,1317.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1319.2,1319.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1319.28,1321.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1321.17,1323.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1324.3,1324.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1324.27,1326.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1328.2,1328.76 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1328.76,1330.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1331.2,1331.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1342.96,1343.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1343.26,1345.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1347.2,1348.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1348.16,1350.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1352.2,1363.23 9 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1363.23,1364.58 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1364.58,1365.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1365.31,1367.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1367.10,1369.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1373.2,1373.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1373.17,1375.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1376.2,1376.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1376.16,1378.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1379.2,1379.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1379.16,1381.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1382.2,1382.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1382.18,1384.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1385.2,1385.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1385.19,1387.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1388.2,1388.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1388.19,1390.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1396.2,1399.18 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1399.18,1400.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1400.61,1401.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1402.50,1403.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1404.12,1405.108 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1409.2,1410.42 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1410.42,1414.3 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1415.2,1420.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1420.16,1422.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1429.2,1444.43 6 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1444.43,1446.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1449.2,1451.27 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1451.27,1453.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1458.2,1458.46 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1458.46,1460.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1461.2,1461.63 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1461.63,1463.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1465.2,1466.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1466.15,1472.29 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1472.29,1479.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1479.18,1481.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1482.4,1482.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1482.23,1483.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1485.4,1485.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1485.30,1486.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1486.24,1488.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1488.32,1489.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1493.4,1494.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1494.30,1495.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1498.8,1504.29 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1504.29,1506.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1506.18,1508.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1509.4,1509.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1509.23,1510.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1512.4,1512.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1512.30,1513.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1513.24,1515.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1515.32,1516.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1520.4,1521.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1521.30,1522.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1526.2,1526.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1526.26,1528.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1528.17,1530.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1535.2,1535.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1535.74,1536.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1536.13,1537.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1537.33,1542.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1542.26,1544.39 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1544.39,1546.7 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1548.5,1548.82 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1565.2,1565.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1565.38,1569.27 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1569.27,1571.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1572.3,1572.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1572.27,1574.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1576.3,1581.32 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1581.32,1586.4 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1588.3,1592.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1592.18,1594.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1595.3,1596.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1596.17,1598.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1599.3,1599.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1602.2,1602.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1603.15,1618.32 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1618.32,1620.33 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1620.33,1621.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1621.40,1623.11 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1626.4,1638.6 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1640.3,1641.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1641.17,1643.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1644.3,1644.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1646.18,1648.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1648.17,1650.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1651.3,1651.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1653.10,1654.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1654.25,1656.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1657.3,1659.32 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1659.32,1661.33 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1661.33,1662.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1662.40,1664.11 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1667.4,1669.26 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1669.26,1671.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1672.4,1673.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1673.25,1675.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1676.4,1676.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1678.3,1678.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1690.51,1695.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1700.73,1702.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1702.16,1704.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1705.2,1706.48 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1706.48,1710.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1711.2,1713.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1713.16,1715.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1716.2,1716.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1727.117,1731.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1731.21,1733.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1734.2,1735.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1735.16,1737.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1738.2,1739.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1739.27,1741.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1742.2,1742.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1764.19,1775.30 7 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1775.30,1777.37 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1777.37,1779.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1781.3,1781.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1781.20,1783.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1797.2,1797.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1797.39,1799.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1801.2,1811.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1811.25,1813.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1815.2,1816.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1816.29,1818.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1824.2,1824.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1824.27,1826.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1831.2,1833.22 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1833.22,1835.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1837.2,1846.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1846.16,1848.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1853.2,1855.27 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1855.27,1857.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1859.2,1876.33 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1876.33,1878.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1880.2,1881.28 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1881.28,1885.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1885.20,1888.33 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1888.33,1889.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1889.40,1891.11 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1894.4,1894.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1894.20,1895.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1900.3,1900.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1900.22,1902.33 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1902.33,1903.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1903.50,1905.11 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1908.4,1908.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1908.19,1909.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1918.3,1918.56 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1918.56,1919.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1927.3,1927.64 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1927.64,1928.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1932.3,1935.32 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1935.32,1936.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1936.39,1938.10 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1942.3,1956.14 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1956.14,1957.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1957.37,1959.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1961.3,1962.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1962.26,1963.9 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1975.2,1975.59 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1975.59,1986.17 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1986.17,1988.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1990.3,1991.34 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1991.34,1993.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1995.3,1996.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1996.29,1998.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1998.21,2001.34 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2001.34,2002.41 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2002.41,2004.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2007.5,2007.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2007.21,2008.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2011.4,2011.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2011.23,2013.34 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2013.34,2014.51 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2014.51,2016.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2019.5,2019.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2019.20,2020.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2023.4,2023.57 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2023.57,2024.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2027.4,2027.65 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2027.65,2028.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2030.4,2031.33 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2031.33,2032.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2032.40,2034.11 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2037.4,2051.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2051.15,2052.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2052.38,2054.6 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2056.4,2057.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2057.27,2058.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2065.2,2066.28 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2066.28,2068.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2072.2,2072.71 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2072.71,2080.30 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2080.30,2081.41 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2081.41,2087.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2089.3,2089.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2089.13,2090.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2090.31,2095.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2095.25,2097.38 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2097.38,2099.7 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2101.5,2101.81 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2112.2,2112.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2112.38,2115.27 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2115.27,2117.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2121.3,2138.30 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2138.30,2140.11 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2140.11,2141.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2143.4,2160.15 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2160.15,2161.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2161.39,2163.6 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2165.4,2165.46 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2167.3,2173.24 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2173.24,2175.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2176.3,2176.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2179.2,2179.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2180.15,2182.24 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2182.24,2184.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2185.3,2185.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2187.18,2199.30 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2199.30,2201.11 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2201.11,2202.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2204.4,2208.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2208.15,2209.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2209.39,2211.6 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2213.4,2213.35 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2215.3,2216.24 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2216.24,2218.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2219.3,2219.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2220.10,2221.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2221.22,2223.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2224.3,2226.27 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2226.27,2228.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2228.20,2230.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2231.4,2233.26 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2233.26,2235.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2236.4,2237.23 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2237.23,2239.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2240.4,2240.46 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2240.46,2244.5 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2245.4,2245.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2247.3,2247.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2252.94,2254.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2254.16,2256.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2258.2,2260.18 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2260.18,2261.59 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2261.59,2262.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2262.36,2264.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2264.10,2266.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2270.2,2270.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2270.13,2272.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2273.2,2273.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2273.50,2275.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2277.2,2277.98 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2281.98,2282.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2282.26,2284.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2286.2,2287.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2287.16,2289.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2291.2,2292.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2292.13,2294.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2297.2,2298.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2298.19,2299.51 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2299.51,2301.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2302.3,2302.55 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2304.2,2304.42 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2304.42,2306.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2308.2,2308.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2308.54,2309.48 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2309.48,2311.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2312.3,2312.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2316.2,2318.53 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:17.82,19.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:21.149,22.55 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:22.55,24.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:25.2,25.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:25.36,27.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:28.2,34.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:34.16,36.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:37.2,37.42 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:37.42,39.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:40.2,40.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:43.105,44.48 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:44.48,46.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:47.2,48.54 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:51.129,53.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:53.16,55.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:56.2,57.53 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:57.53,59.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:60.2,61.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:61.25,63.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:64.2,65.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:65.16,67.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:68.2,68.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:26.97,27.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:27.18,29.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:30.2,30.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:33.37,35.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:37.81,38.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:38.44,40.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:41.2,41.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:41.38,43.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:44.2,44.57 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:47.88,48.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:48.32,50.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:51.2,52.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:52.20,54.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:55.2,55.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:58.40,72.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:74.106,75.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:75.34,77.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:78.2,79.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:79.16,81.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:83.2,84.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:84.16,86.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:88.2,89.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:89.13,91.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:93.2,94.63 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:94.63,96.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:98.2,98.72 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:98.72,100.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:102.2,106.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:109.117,110.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:110.32,112.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:113.2,113.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:113.34,115.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:117.2,118.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:118.16,120.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:121.2,121.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:121.19,123.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:125.2,126.69 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:126.69,128.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:130.2,136.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:18.33,20.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:22.27,37.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:39.93,40.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:40.30,42.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:43.2,43.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:43.28,45.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:46.2,47.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:47.16,49.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:51.2,52.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:52.17,54.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:55.2,56.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:56.19,58.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:59.2,59.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:59.19,61.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:62.2,63.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:63.16,65.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:67.2,74.9 3 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:74.9,76.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:77.2,78.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:78.15,80.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:81.2,85.16 4 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:85.16,87.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:88.2,88.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:88.17,90.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:92.2,101.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:104.48,105.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:105.16,107.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:108.2,109.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:109.29,111.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:112.2,112.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:112.31,114.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:115.2,115.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:118.75,120.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:120.27,121.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:121.32,123.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:123.17,124.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:126.4,126.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:129.2,134.33 3 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:134.33,136.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:137.2,137.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:137.40,138.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:138.39,140.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:141.3,141.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:143.2,143.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:143.34,145.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:146.2,147.35 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:147.35,149.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:150.2,150.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:153.77,154.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:154.20,156.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:157.2,159.31 3 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:159.31,160.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:160.33,162.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:163.3,163.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:163.30,165.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:167.2,170.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:23.91,25.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:27.38,50.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:52.104,53.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:53.38,55.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:56.2,57.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:57.16,59.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:61.2,62.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:62.26,64.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:65.2,66.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:66.30,68.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:69.2,69.72 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:69.72,71.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:73.2,74.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:74.16,76.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:77.2,78.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:78.16,80.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:81.2,82.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:82.16,84.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:85.2,86.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:86.16,88.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:90.2,105.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:105.16,107.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:109.2,109.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:109.19,117.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:118.2,118.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:118.25,120.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:121.2,121.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:121.30,123.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:124.2,124.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:124.31,126.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:127.2,128.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:128.16,130.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:131.2,131.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:134.91,136.9 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:136.9,138.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:139.2,140.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:140.15,141.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:141.19,143.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:144.3,144.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:146.2,146.94 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:149.59,150.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:150.16,152.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:153.2,154.61 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:154.61,156.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:157.2,157.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:160.56,161.75 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:161.75,163.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:164.2,164.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:167.67,169.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:170.17,171.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:172.67,173.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:174.10,175.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:179.60,180.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:180.16,182.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:183.2,184.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:184.25,186.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:187.2,187.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:190.57,191.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:192.15,193.81 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:193.81,195.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:196.3,196.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:197.19,199.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:199.17,201.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:202.3,202.55 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:202.55,204.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:205.3,205.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:206.14,207.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:208.11,209.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:210.10,211.41 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:215.59,216.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:216.16,218.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:219.2,219.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:220.12,221.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:222.14,223.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:224.10,225.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:28.90,30.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:30.16,32.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:34.2,36.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:37.16,38.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:40.16,42.140 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:44.20,46.140 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:48.17,50.142 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:52.17,56.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:56.50,62.63 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:62.63,64.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:66.4,66.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:66.45,68.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:72.4,74.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:74.25,76.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:77.4,77.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:80.3,80.101 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:82.18,84.141 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:86.18,88.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:88.18,90.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:91.3,91.41 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:93.17,96.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:96.50,99.59 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:99.59,101.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:102.4,104.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:104.25,106.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:107.4,107.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:110.3,110.98 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:112.10,116.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:125.86,126.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:126.16,128.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:129.2,130.9 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:130.9,132.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:133.2,133.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:133.22,135.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:137.2,139.31 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:139.31,141.10 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:141.10,143.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:144.3,145.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:145.22,147.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:148.3,149.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:149.26,151.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:152.3,152.68 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:152.68,154.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:155.3,156.37 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:156.37,158.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:159.3,160.107 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:162.2,162.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:165.249,166.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:166.24,168.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:169.2,169.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:169.38,171.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:173.2,174.31 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:174.31,175.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:175.32,177.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:180.2,181.34 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:181.34,182.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:182.29,183.9 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:185.3,197.17 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:197.17,199.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:200.3,200.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:200.20,201.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:203.3,203.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:203.37,205.33 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:205.33,206.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:208.4,208.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:208.19,209.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:209.43,210.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:212.5,212.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:214.4,215.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:215.30,216.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:220.2,220.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:223.113,229.2 5 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:231.101,233.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:247.92,251.16 4 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:251.16,253.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:253.8,253.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:253.24,255.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:259.2,272.51 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:272.51,274.38 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:274.38,275.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:276.50,277.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:278.12,279.107 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:287.2,292.26 5 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:292.26,294.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:297.2,297.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:297.19,301.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:303.2,311.42 5 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:311.42,315.3 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:316.2,341.64 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:341.64,342.86 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:342.86,344.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:345.3,345.56 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:345.56,347.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:348.3,360.19 6 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:360.19,364.4 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:365.3,365.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:369.2,370.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:370.15,372.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:372.27,374.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:375.3,375.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:375.27,377.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:380.2,381.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:381.15,387.28 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:387.28,395.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:395.18,397.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:398.4,398.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:398.23,399.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:401.4,401.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:401.30,402.66 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:402.66,403.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:405.5,406.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:406.12,407.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:409.5,409.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:409.28,413.6 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:414.5,415.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:415.30,416.11 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:419.4,420.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:420.30,421.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:424.8,432.28 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:432.28,438.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:438.18,440.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:441.4,441.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:441.23,442.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:444.4,444.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:444.30,445.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:445.40,447.31 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:447.31,448.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:452.4,455.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:455.30,456.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:461.2,465.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:465.17,467.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:469.2,470.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:470.16,472.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:473.2,473.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:20.79,21.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:21.43,23.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:24.2,24.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:24.29,26.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:27.2,27.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:30.40,63.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:65.68,71.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:71.25,74.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:75.2,75.67 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:78.62,83.19 3 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:83.19,87.3 3 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:88.2,88.89 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:91.101,92.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:92.22,94.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:95.2,96.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:96.18,98.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:99.2,100.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:100.16,102.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:103.2,104.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:104.16,106.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:107.2,107.119 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:110.99,111.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:111.22,113.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:114.2,115.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:115.18,117.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:118.2,119.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:119.16,121.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:122.2,122.51 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:122.51,124.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:125.2,126.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:126.16,128.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:129.2,131.15 3 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:131.15,132.69 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:132.69,134.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:135.3,135.58 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:137.2,137.130 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:140.102,142.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:142.16,144.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:145.2,145.64 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:145.64,147.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:148.2,148.113 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:151.109,153.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:153.16,155.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:156.2,157.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:157.16,159.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:160.2,161.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:161.16,163.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:164.2,164.67 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:167.107,169.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:169.16,171.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:172.2,173.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:173.16,175.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:176.2,176.107 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:176.107,178.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:179.2,179.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:180.41,181.63 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:182.41,183.95 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:184.10,185.83 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:189.111,191.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:191.16,193.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:194.2,195.57 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:195.57,197.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:198.2,199.23 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:199.23,201.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:202.2,203.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:203.16,205.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:206.2,206.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:206.17,208.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:209.2,209.108 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:212.63,215.2 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:217.69,219.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:219.16,221.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:222.2,222.79 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:225.60,227.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:227.16,229.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:230.2,230.57 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:233.137,234.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:234.49,236.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:237.2,238.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:238.16,240.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:241.2,243.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:243.16,245.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:246.2,247.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:247.16,249.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:250.2,250.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:250.22,252.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:253.2,253.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:256.142,258.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:258.16,260.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:261.2,262.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:262.16,264.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:265.2,265.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:265.47,267.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:268.2,269.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:269.16,270.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:270.50,272.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:273.3,273.89 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:275.2,275.173 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:278.157,280.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:280.16,282.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:283.2,283.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:283.47,285.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:286.2,287.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:287.16,288.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:288.50,290.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:291.3,291.89 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:293.2,293.169 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:296.104,297.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:297.22,299.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:300.2,301.61 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:301.61,303.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:303.20,304.9 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:307.2,307.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:307.19,309.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:310.2,317.8 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:320.119,322.39 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:322.39,323.81 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:323.81,325.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:327.2,327.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:330.71,332.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:332.16,334.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:335.2,335.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:17.61,105.23 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:105.23,122.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:123.2,123.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:126.104,127.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:127.61,129.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:130.2,130.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:130.38,132.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:133.2,134.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:134.16,136.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:137.2,138.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:138.16,140.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:141.2,147.107 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:147.107,149.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:150.2,151.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:151.16,153.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:154.2,170.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:170.19,172.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:173.2,173.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:176.103,177.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:177.61,179.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:180.2,180.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:180.38,182.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:183.2,184.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:184.16,186.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:187.2,191.106 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:191.106,193.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:194.2,195.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:195.16,197.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:198.2,200.31 3 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:200.31,207.36 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:207.36,218.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:219.3,220.35 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:222.2,230.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:233.107,234.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:234.61,236.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:237.2,237.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:237.38,239.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:240.2,241.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:241.16,243.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:244.2,248.110 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:248.110,250.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:251.2,252.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:252.16,254.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:255.2,256.33 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:256.33,266.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:267.2,275.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:278.108,279.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:279.61,281.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:282.2,282.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:282.37,284.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:285.2,286.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:286.16,288.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:289.2,290.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:290.19,292.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:293.2,293.104 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:293.104,295.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:296.2,297.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:297.16,299.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:300.2,307.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:307.16,309.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:310.2,311.43 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:311.43,318.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:319.2,332.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:332.22,334.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:335.2,335.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:338.108,339.62 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:339.62,341.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:342.2,342.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:342.38,344.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:345.2,346.9 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:346.9,348.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:349.2,350.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:350.16,352.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:353.2,357.16 5 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:357.16,359.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:360.2,370.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:373.109,374.62 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:374.62,376.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:377.2,377.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:377.38,379.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:380.2,381.9 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:381.9,383.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:384.2,385.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:385.16,387.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:388.2,390.32 3 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:390.32,392.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:393.2,394.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:394.16,396.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:397.2,403.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:406.106,407.62 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:407.62,409.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:410.2,410.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:410.38,412.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:413.2,414.9 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:414.9,416.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:417.2,418.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:418.16,420.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:421.2,423.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:423.16,424.41 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:424.41,434.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:435.3,435.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:437.2,445.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:483.65,484.42 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:484.42,485.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:485.39,487.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:489.2,489.85 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:489.85,491.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:492.2,492.95 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:495.102,496.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:496.38,498.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:499.2,499.58 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:499.58,501.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:502.2,502.90 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:505.60,508.2 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:510.66,512.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:512.26,514.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:515.2,515.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:518.69,521.33 3 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:521.33,523.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:523.21,524.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:526.3,526.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:526.34,527.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:529.3,530.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:532.2,532.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:535.63,537.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:537.19,539.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:540.2,541.42 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:541.42,543.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:544.2,544.57 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:544.57,546.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:547.2,547.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:547.54,549.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:550.2,550.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:553.70,557.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:559.66,561.9 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:561.9,563.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:564.2,566.17 3 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:566.17,568.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:569.2,569.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:570.103,572.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:573.34,574.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:575.10,576.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:580.56,581.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:581.37,583.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:584.2,584.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:584.26,586.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:586.37,587.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:589.3,589.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:591.2,591.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:594.90,602.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:604.68,605.71 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:605.71,607.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:607.17,609.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:610.3,610.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:612.2,613.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:613.16,615.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:616.2,617.41 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:617.41,619.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:620.2,620.78 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:623.65,625.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:625.16,627.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:628.2,628.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:628.17,630.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:631.2,631.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:634.51,635.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:635.16,637.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:638.2,638.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:641.56,642.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:642.28,644.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:645.2,646.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:649.92,651.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:651.29,653.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:654.2,654.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:657.86,659.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:659.29,661.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:662.2,662.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:665.94,667.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:667.29,669.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:670.2,670.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:673.98,675.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:675.29,677.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:678.2,678.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:17.93,18.104 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:18.104,20.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:22.2,23.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:23.16,25.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:27.2,28.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:28.19,30.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:32.2,35.33 3 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:35.33,36.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:36.47,39.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:42.2,44.20 3 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:44.20,47.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:48.2,49.68 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:49.68,50.48 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:50.48,52.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:53.3,53.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:53.32,55.23 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:55.23,56.63 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:56.63,58.6 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:59.5,59.53 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:61.4,61.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:64.2,71.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:71.17,73.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:73.8,73.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:73.29,75.36 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:75.36,77.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:78.3,83.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:86.2,86.35 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:86.35,88.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:90.2,97.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:97.16,99.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:101.2,110.28 3 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:110.28,112.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:113.2,124.16 4 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:124.16,126.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:127.2,127.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:133.93,134.35 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:134.35,136.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:138.2,139.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:139.16,141.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:143.2,144.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:144.16,146.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:147.2,147.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:147.17,149.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:151.2,152.33 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:152.33,153.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:153.47,156.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:159.2,160.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:160.16,162.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:164.2,176.26 3 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:176.26,178.23 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:178.23,180.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:181.3,192.5 3 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:195.2,196.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:196.16,198.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:199.2,199.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:22.104,24.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:24.16,26.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:28.2,29.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:29.18,31.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:33.2,33.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:34.13,35.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:36.13,37.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:38.14,39.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:40.16,41.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:42.10,43.95 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:51.67,53.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:57.68,58.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:58.33,60.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:61.2,61.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:67.42,69.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:74.61,76.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:76.26,78.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:79.2,79.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:85.90,86.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:86.49,88.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:90.2,91.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:91.15,93.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:94.2,95.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:95.17,97.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:100.2,103.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:103.16,105.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:107.2,113.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:113.12,115.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:115.18,117.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:118.3,119.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:119.20,121.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:122.3,124.48 3 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:125.8,127.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:129.2,130.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:130.16,132.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:134.2,139.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:145.90,147.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:147.15,149.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:151.2,152.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:152.16,154.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:156.2,157.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:157.16,158.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:158.47,160.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:161.3,161.56 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:164.2,170.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:170.19,173.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:173.8,175.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:176.2,176.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:181.92,183.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:183.16,185.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:187.2,188.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:188.16,190.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:192.2,200.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:200.25,207.28 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:207.28,209.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:210.3,210.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:212.2,212.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:216.93,217.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:217.52,219.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:221.2,222.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:222.15,224.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:226.2,227.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:227.16,229.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:231.2,231.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:231.47,232.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:232.47,234.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:235.3,235.59 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:238.2,241.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:35.127,36.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:36.23,38.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:39.2,40.40 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:40.40,42.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:43.2,43.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:43.37,45.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:46.2,46.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:46.37,48.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:49.2,49.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:52.23,80.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:82.26,140.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:142.92,143.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:143.25,145.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:147.2,148.49 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:148.49,150.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:152.2,152.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:153.17,154.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:154.24,156.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:157.3,158.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:158.17,160.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:161.3,165.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:166.17,167.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:167.22,169.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:170.3,170.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:170.22,172.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:173.3,174.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:174.17,176.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:177.3,181.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:182.16,189.23 7 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:189.23,191.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:192.3,192.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:192.24,194.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:195.3,195.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:195.39,197.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:198.3,207.17 3 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:207.17,209.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:210.3,210.69 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:210.69,212.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:213.3,213.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:214.10,215.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:219.92,220.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:220.25,222.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:224.2,225.49 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:225.49,227.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:229.2,229.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:230.17,232.24 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:232.24,234.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:235.3,236.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:236.17,238.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:239.3,239.59 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:239.59,241.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:242.3,242.81 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:242.81,244.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:245.3,250.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:251.17,253.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:253.22,255.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:256.3,257.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:257.17,259.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:260.3,260.79 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:260.79,262.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:263.3,268.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:269.10,270.66 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:274.91,276.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:276.16,278.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:279.2,279.67 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:279.67,280.76 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:280.76,282.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:285.2,286.52 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:286.52,288.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:289.2,289.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:292.74,294.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:294.16,296.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:297.2,297.62 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:297.62,299.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:300.2,300.68 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:303.109,304.56 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:304.56,306.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:307.2,307.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:307.25,309.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:310.2,310.81 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:310.81,312.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:313.2,313.102 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:313.102,315.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:316.2,316.108 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:316.108,318.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:319.2,319.99 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:319.99,321.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:322.2,322.99 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:322.99,324.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:325.2,325.60 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:325.60,327.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:328.2,328.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:328.34,330.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:331.2,331.114 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:331.114,333.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:334.2,334.66 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:334.66,336.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:337.2,337.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:337.40,339.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:340.2,340.132 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:340.132,342.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:343.2,343.35 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:343.35,345.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:346.2,346.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:349.92,350.103 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:350.103,352.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:354.2,355.52 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:355.52,357.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:358.2,358.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:358.32,360.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:361.2,361.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:364.108,365.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:365.19,367.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:368.2,369.53 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:369.53,371.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:372.2,372.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:372.19,374.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:375.2,375.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:375.39,376.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:376.34,378.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:380.2,380.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:383.66,385.53 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:385.53,387.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:388.2,388.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:388.19,390.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:391.2,391.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:10.101,12.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:12.16,14.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:16.2,18.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:19.16,20.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:21.14,22.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:23.15,24.84 1 0 +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:25.16,26.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:27.10,28.97 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:21.75,23.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:25.41,28.2 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:30.31,37.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:39.38,46.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:48.50,56.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:58.43,70.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:72.80,73.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:73.36,75.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:76.2,76.48 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:76.48,78.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:79.2,79.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:82.97,84.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:84.16,86.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:87.2,88.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:88.16,90.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:91.2,92.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:92.16,94.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:95.2,96.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:96.16,98.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:99.2,99.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:102.104,104.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:104.16,106.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:107.2,108.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:108.16,110.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:111.2,112.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:112.16,114.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:115.2,116.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:116.16,118.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:119.2,119.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:122.96,124.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:124.16,126.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:127.2,128.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:128.19,130.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:131.2,132.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:132.18,134.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:135.2,141.79 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:141.79,143.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:143.17,145.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:146.3,146.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:148.2,148.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:151.77,153.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:153.16,155.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:156.2,157.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:157.19,159.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:160.2,160.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:10.101,12.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:12.16,14.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:16.2,17.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:17.18,19.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:21.2,21.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:22.15,23.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:24.13,25.42 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:26.14,27.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:28.16,29.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:30.16,31.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:32.10,33.102 1 0 diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-03/create-database.stderr.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-03/create-database.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-03/create-database.stdout.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-03/create-database.stdout.log new file mode 100644 index 00000000..4b15bd57 --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-03/create-database.stdout.log @@ -0,0 +1 @@ +CREATE DATABASE diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-03/create-pgvector.stderr.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-03/create-pgvector.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-03/create-pgvector.stdout.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-03/create-pgvector.stdout.log new file mode 100644 index 00000000..d26bad14 --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-03/create-pgvector.stdout.log @@ -0,0 +1 @@ +CREATE EXTENSION diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-03/database-identity.stderr.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-03/database-identity.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-03/database-identity.stdout.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-03/database-identity.stdout.log new file mode 100644 index 00000000..74564c90 --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-03/database-identity.stdout.log @@ -0,0 +1 @@ +{"database" : "engram_prc_rg_test_8b1d3112a7a95fbb_r3", "schema" : "public", "server_version" : "17.10 (Debian 17.10-1.pgdg12+1)", "user" : "engram"} diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-03/go-test-summary.json b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-03/go-test-summary.json new file mode 100644 index 00000000..d0e6cfbf --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-03/go-test-summary.json @@ -0,0 +1,40 @@ +{ + "schema_version": 1, + "verdict": "PASS", + "input_path": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-repeat3\\repeat-03\\go-test.stdout.jsonl", + "fail_on_unexpected_skip": true, + "allowed_skip_identities": [], + "counts": { + "packages": 1, + "tests": 1, + "passed": 1, + "failed": 0, + "skipped": 0, + "no_tests": 0, + "zero_tests": 0, + "incomplete": 0, + "unexpected_skips": 0, + "malformed_lines": 0 + }, + "packages": [ + { + "package": "github.com/thebtf/engram/internal/mcp", + "outcome": "pass", + "elapsed_seconds": 4.327, + "last_output": "ok \tgithub.com/thebtf/engram/internal/mcp\t4.318s\tcoverage: 0.1% of statements", + "tests_observed": 1 + } + ], + "tests": [ + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestEC_F1_TagDerivedBackfill_T007", + "outcome": "pass", + "elapsed_seconds": 4.18, + "last_output": "--- PASS: TestEC_F1_TagDerivedBackfill_T007 (4.18s)", + "skip_allowed": false + } + ], + "unexpected_skips": [], + "errors": [] +} diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-03/go-test.stderr.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-03/go-test.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-03/go-test.stdout.jsonl b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-03/go-test.stdout.jsonl new file mode 100644 index 00000000..4a8d4d64 --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-03/go-test.stdout.jsonl @@ -0,0 +1,16 @@ +{"Time":"2026-07-11T03:35:10.6557715+03:00","Action":"start","Package":"github.com/thebtf/engram/internal/mcp"} +{"Time":"2026-07-11T03:35:10.7595681+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007"} +{"Time":"2026-07-11T03:35:10.7595681+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":"=== RUN TestEC_F1_TagDerivedBackfill_T007\n"} +{"Time":"2026-07-11T03:35:11.7430784+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":"{\"level\":\"warn\",\"error\":\"ERROR: relation \\\"observation_vectors\\\" does not exist (SQLSTATE 42P01)\",\"time\":\"2026-07-11T03:35:11+03:00\",\"message\":\"migration 040: orphan vector cleanup failed (non-fatal)\"}\n"} +{"Time":"2026-07-11T03:35:11.7430784+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":"{\"level\":\"info\",\"garbage_deleted\":0,\"orphan_vectors_deleted\":0,\"time\":\"2026-07-11T03:35:11+03:00\",\"message\":\"migration 040: garbage cleanup complete\"}\n"} +{"Time":"2026-07-11T03:35:11.7520795+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":"{\"level\":\"info\",\"orphan_vectors_deleted\":0,\"time\":\"2026-07-11T03:35:11+03:00\",\"message\":\"migration 041: orphan vector purge complete\"}\n"} +{"Time":"2026-07-11T03:35:11.7605959+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":"{\"level\":\"info\",\"patterns_deleted\":0,\"time\":\"2026-07-11T03:35:11+03:00\",\"message\":\"migration 042: low-quality pattern purge complete\"}\n"} +{"Time":"2026-07-11T03:35:11.7980977+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":"{\"level\":\"info\",\"total_deleted\":0,\"time\":\"2026-07-11T03:35:11+03:00\",\"message\":\"migration 043: radical observation cleanup complete\"}\n"} +{"Time":"2026-07-11T03:35:13.1987623+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":"{\"level\":\"warn\",\"error\":\"ERROR: extension \\\"vectorscale\\\" is not available (SQLSTATE 0A000)\",\"time\":\"2026-07-11T03:35:13+03:00\",\"message\":\"migration 109: vectorscale extension not available, skipping DiskANN index\"}\n"} +{"Time":"2026-07-11T03:35:14.5258079+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":"{\"level\":\"debug\",\"connections\":1,\"time\":\"2026-07-11T03:35:14+03:00\",\"message\":\"Connection pool warmed\"}\n"} +{"Time":"2026-07-11T03:35:14.9382901+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":"--- PASS: TestEC_F1_TagDerivedBackfill_T007 (4.18s)\n"} +{"Time":"2026-07-11T03:35:14.9382901+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Elapsed":4.18} +{"Time":"2026-07-11T03:35:14.9382901+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Output":"PASS\n"} +{"Time":"2026-07-11T03:35:14.9552909+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Output":"coverage: 0.1% of statements\n"} +{"Time":"2026-07-11T03:35:14.9827898+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Output":"ok \tgithub.com/thebtf/engram/internal/mcp\t4.318s\tcoverage: 0.1% of statements\n"} +{"Time":"2026-07-11T03:35:14.9827898+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Elapsed":4.327} diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-03/pg-stat-activity-after.stderr.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-03/pg-stat-activity-after.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-03/pg-stat-activity-after.stdout.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-03/pg-stat-activity-after.stdout.log new file mode 100644 index 00000000..fe51488c --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-03/pg-stat-activity-after.stdout.log @@ -0,0 +1 @@ +[] diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-03/pg-stat-activity-before.stderr.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-03/pg-stat-activity-before.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-03/pg-stat-activity-before.stdout.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-03/pg-stat-activity-before.stdout.log new file mode 100644 index 00000000..fe51488c --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-03/pg-stat-activity-before.stdout.log @@ -0,0 +1 @@ +[] diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-03/repeat-summary.json b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-03/repeat-summary.json new file mode 100644 index 00000000..14a7f823 --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-03/repeat-summary.json @@ -0,0 +1,33 @@ +{ + "repeat": 3, + "verdict": "PASS", + "database": "engram_prc_rg_test_8b1d3112a7a95fbb_r3", + "schema": "public", + "database_schema_identity": "engram_prc_rg_test_8b1d3112a7a95fbb_r3.public", + "database_dsn": "REDACTED_DATABASE_DSN", + "database_create_confirmed": true, + "sequential_execution": { + "package_parallelism": 1, + "test_parallelism": 1 + }, + "race": false, + "connection_budget": 20, + "server_sessions_before": 6, + "server_sessions_after": 6, + "sessions_before": 0, + "sessions_after": 0, + "go_test_exit": 0, + "json_parser_exit": 0, + "coverage_policy": "Targeted", + "coverage_exit": 0, + "cleanup_exit": 0, + "cleanup_status": "PASS", + "required_session_start_execution": { + "schema_version": 1, + "verdict": "NOT_APPLICABLE", + "reason": "only an unfiltered canonical ./... run requires the 12-test session-start execution proof" + }, + "cleanup_summary": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-repeat3\\repeat-03\\cleanup\\cleanup.json", + "errors": [], + "artifact_directory": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-repeat3\\repeat-03" +} diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-03/server-connection-count-after.stderr.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-03/server-connection-count-after.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-03/server-connection-count-after.stdout.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-03/server-connection-count-after.stdout.log new file mode 100644 index 00000000..1e8b3149 --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-03/server-connection-count-after.stdout.log @@ -0,0 +1 @@ +6 diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-03/server-connection-count-before.stderr.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-03/server-connection-count-before.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-03/server-connection-count-before.stdout.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-03/server-connection-count-before.stdout.log new file mode 100644 index 00000000..1e8b3149 --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-03/server-connection-count-before.stdout.log @@ -0,0 +1 @@ +6 diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-03/targeted-coverage.stderr.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-03/targeted-coverage.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-03/targeted-coverage.stdout.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-03/targeted-coverage.stdout.log new file mode 100644 index 00000000..c958686c --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/repeat-03/targeted-coverage.stdout.log @@ -0,0 +1,352 @@ +github.com/thebtf/engram/internal/mcp/audit_helpers.go:33: effectiveAuditWriter 0.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:44: isAuditEnabled 0.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:52: runAuditAsync 0.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:77: marshalState 0.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:92: logAuditCreate 0.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:117: logAuditEdit 0.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:142: logAuditDelete 0.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:166: logAuditGeneric 0.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:189: logAuditSupersede 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:30: parseArgs 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:46: coerceString 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:67: coerceInt 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:97: coerceInt64 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:127: coerceFloat64 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:151: coerceBool 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:177: coerceStringSlice 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:204: coerceInt64Slice 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:222: clampToInt 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:236: clampInt64ToInt 0.0% +github.com/thebtf/engram/internal/mcp/context.go:17: extractProjectFromHeader 0.0% +github.com/thebtf/engram/internal/mcp/context.go:22: contextWithProject 0.0% +github.com/thebtf/engram/internal/mcp/context.go:29: ContextWithProject 0.0% +github.com/thebtf/engram/internal/mcp/context.go:35: projectFromContext 0.0% +github.com/thebtf/engram/internal/mcp/context.go:41: contextWithSession 0.0% +github.com/thebtf/engram/internal/mcp/context.go:48: ContextWithSession 0.0% +github.com/thebtf/engram/internal/mcp/context.go:54: sessionFromContext 0.0% +github.com/thebtf/engram/internal/mcp/context.go:61: actorFromContext 0.0% +github.com/thebtf/engram/internal/mcp/health.go:22: NewMCPHealth 0.0% +github.com/thebtf/engram/internal/mcp/health.go:29: RecordRequest 0.0% +github.com/thebtf/engram/internal/mcp/health.go:36: RecordError 0.0% +github.com/thebtf/engram/internal/mcp/health.go:42: rotateWindowIfNeeded 0.0% +github.com/thebtf/engram/internal/mcp/health.go:55: HandleHealth 0.0% +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:28: ruleGovernanceCaptureEnabled 0.0% +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:39: captureActiveRuleIntent 0.0% +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:104: ruleIntentFingerprint 0.0% +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:113: marshalRuleCandidateIntentResponse 0.0% +github.com/thebtf/engram/internal/mcp/server.go:127: NewServer 100.0% +github.com/thebtf/engram/internal/mcp/server.go:141: SetBackfillStatusFunc 0.0% +github.com/thebtf/engram/internal/mcp/server.go:146: SetVersionedDocumentStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:151: SetIssueStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:156: SetMemoryStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:161: SetMetaMemoryIndex 0.0% +github.com/thebtf/engram/internal/mcp/server.go:166: SetHintQueue 0.0% +github.com/thebtf/engram/internal/mcp/server.go:171: SetStateStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:176: SetDirectiveCaptureService 0.0% +github.com/thebtf/engram/internal/mcp/server.go:181: SetBehavioralRulesStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:186: SetRuleGovernanceStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:191: SetRuleInjectionTelemetryStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:195: SetPromotionStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:199: SetGraphStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:204: SetNodesStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:211: SetAuditStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:216: SetPurgeStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:222: SetCandidateStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:228: SetSnapshotStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:234: SetBulkFacade 0.0% +github.com/thebtf/engram/internal/mcp/server.go:240: setTestAuditWriter 0.0% +github.com/thebtf/engram/internal/mcp/server.go:246: setTestMemoryEditor 0.0% +github.com/thebtf/engram/internal/mcp/server.go:252: setTestMemorySignificanceUpdater 0.0% +github.com/thebtf/engram/internal/mcp/server.go:260: SetWriteLintOrchestrator 0.0% +github.com/thebtf/engram/internal/mcp/server.go:269: SetRedactionRules 0.0% +github.com/thebtf/engram/internal/mcp/server.go:274: SetEmbeddingStores 0.0% +github.com/thebtf/engram/internal/mcp/server.go:282: SetRerankClient 0.0% +github.com/thebtf/engram/internal/mcp/server.go:290: SetStatsDB 0.0% +github.com/thebtf/engram/internal/mcp/server.go:297: HandleRequest 0.0% +github.com/thebtf/engram/internal/mcp/server.go:303: ListTools 0.0% +github.com/thebtf/engram/internal/mcp/server.go:332: Version 0.0% +github.com/thebtf/engram/internal/mcp/server.go:383: Run 0.0% +github.com/thebtf/engram/internal/mcp/server.go:427: handleRequest 0.0% +github.com/thebtf/engram/internal/mcp/server.go:461: handleNotification 0.0% +github.com/thebtf/engram/internal/mcp/server.go:473: handleInitialize 0.0% +github.com/thebtf/engram/internal/mcp/server.go:496: buildInstructions 0.0% +github.com/thebtf/engram/internal/mcp/server.go:660: storeMemoryTool 0.0% +github.com/thebtf/engram/internal/mcp/server.go:712: recallMemoryTool 0.0% +github.com/thebtf/engram/internal/mcp/server.go:805: primaryTools 0.0% +github.com/thebtf/engram/internal/mcp/server.go:942: handleToolsList 0.0% +github.com/thebtf/engram/internal/mcp/server.go:1612: handleToolsCall 0.0% +github.com/thebtf/engram/internal/mcp/server.go:1644: sanitizeToolCallArgs 0.0% +github.com/thebtf/engram/internal/mcp/server.go:1656: callTool 0.0% +github.com/thebtf/engram/internal/mcp/server.go:1874: sendResponse 0.0% +github.com/thebtf/engram/internal/mcp/server.go:1884: sendError 0.0% +github.com/thebtf/engram/internal/mcp/server.go:1896: handleFindSimilarObservations 0.0% +github.com/thebtf/engram/internal/mcp/server.go:1927: handleGetMemoryStats 0.0% +github.com/thebtf/engram/internal/mcp/server.go:2055: handleBackfillStatus 0.0% +github.com/thebtf/engram/internal/mcp/server.go:2071: handleCheckSystemHealth 0.0% +github.com/thebtf/engram/internal/mcp/server.go:2216: handleAnalyzeSearchPatterns 0.0% +github.com/thebtf/engram/internal/mcp/server.go:2246: handleSearchSessions 0.0% +github.com/thebtf/engram/internal/mcp/server.go:2251: handleListSessions 0.0% +github.com/thebtf/engram/internal/mcp/tools_admin.go:18: buildAdminTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_admin.go:68: adminActionsForEnv 33.3% +github.com/thebtf/engram/internal/mcp/tools_admin.go:80: vnextEnabled 0.0% +github.com/thebtf/engram/internal/mcp/tools_admin.go:84: handleAdmin 0.0% +github.com/thebtf/engram/internal/mcp/tools_admin.go:120: handlePurgeProject 0.0% +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:27: ambientHintsEnabledFromEnv 0.0% +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:32: ambientHintsTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:48: handleGetAmbientHints 0.0% +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:86: normalizeAmbientHintsToolLimit 0.0% +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:96: ambientHintItems 0.0% +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:114: errMissingSessionID 0.0% +github.com/thebtf/engram/internal/mcp/tools_brief.go:31: handleGetMemoryBrief 0.0% +github.com/thebtf/engram/internal/mcp/tools_brief.go:107: memoryBriefUsesPrincipalScope 0.0% +github.com/thebtf/engram/internal/mcp/tools_brief.go:115: handlePrincipalMemoryBrief 0.0% +github.com/thebtf/engram/internal/mcp/tools_brief.go:259: truncateBriefContent 0.0% +github.com/thebtf/engram/internal/mcp/tools_brief.go:270: filterInjectionByScope 0.0% +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:25: bulkOpsTools 0.0% +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:95: handleBulkPromote 0.0% +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:154: handleBulkDelete 0.0% +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:211: handleBulkSupersede 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:31: candidateItemFromDomain 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:51: newCandidateReviewSnapshot 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:59: requireCandidateReviewSnapshot 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:68: candidateTools 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:165: handleListCandidates 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:208: handleGetCandidate 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:239: handlePromoteCandidate 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:348: handleRejectCandidate 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:402: handleSupersedeCandidate 0.0% +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:34: codeIntelEnabled 0.0% +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:42: SetCodeChunkStore 0.0% +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:48: codebaseSearchTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:79: codebaseStatusTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:100: handleCodebaseSearch 0.0% +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:194: handleCodebaseStatus 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:21: getVault 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:35: credentialStore 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:49: handleStoreCredential 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:130: handleGetCredential 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:192: handleListCredentials 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:243: handleDeleteCredential 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:302: handleVaultStatus 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:338: expandTagHierarchy 0.0% +github.com/thebtf/engram/internal/mcp/tools_directives.go:16: directivesCaptureEnabledFromEnv 0.0% +github.com/thebtf/engram/internal/mcp/tools_directives.go:20: rememberDirectiveTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_directives.go:38: currentDirectiveCaptureService 0.0% +github.com/thebtf/engram/internal/mcp/tools_directives.go:48: handleRememberDirective 0.0% +github.com/thebtf/engram/internal/mcp/tools_directives.go:72: parseRememberDirectiveArgs 0.0% +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:10: handleDocsConsolidated 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents.go:15: handleListCollections 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents.go:61: handleListDocuments 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents.go:121: handleGetDocument 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents.go:165: handleRemoveDocument 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents.go:197: handleIngestDocument 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents.go:235: handleSearchCollection 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:15: handleDocCreate 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:61: handleDocRead 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:117: handleDocUpdate 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:122: handleDocList 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:175: handleDocHistory 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:232: handleDocComment 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:19: SetExperienceProvider 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:23: experienceHistoryTools 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:40: experienceHistoryReadSchema 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:65: experienceHistoryDetailSchema 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:82: experienceHistoryTriggerEnum 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:91: handleExperienceHistoryRead 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:103: handleExperienceHistoryDetail 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:115: parseExperienceHistoryReadArgs 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:142: parseExperienceHistoryDetailArgs 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:157: experienceHistoryTriggersFromArgs 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:180: marshalExperienceHistory 0.0% +github.com/thebtf/engram/internal/mcp/tools_feedback.go:12: handleFeedbackConsolidated 0.0% +github.com/thebtf/engram/internal/mcp/tools_feedback.go:36: handleSetSessionOutcome 0.0% +github.com/thebtf/engram/internal/mcp/tools_governance.go:27: governanceTools 0.0% +github.com/thebtf/engram/internal/mcp/tools_governance.go:98: handleListSnapshots 0.0% +github.com/thebtf/engram/internal/mcp/tools_governance.go:167: handleRollbackSnapshot 0.0% +github.com/thebtf/engram/internal/mcp/tools_governance.go:215: handlePinSnapshot 0.0% +github.com/thebtf/engram/internal/mcp/tools_governance.go:258: handleRedactionRulesStatus 0.0% +github.com/thebtf/engram/internal/mcp/tools_governance.go:284: resolveGovernanceActor 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:64: handleGraph 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:100: graphAddEdge 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:216: mcpGraphEndpointExists 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:243: mcpGraphEdgeAlreadyExists 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:276: graphAddNode 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:317: graphRemoveEdge 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:332: graphGetEdges 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:397: filterEdgesByNodeType 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:457: graphTraverse 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:480: graphFindPath 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:502: graphSynonyms 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:23: graphCreateEdgeWithGuards 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:80: graphEndpointExistsWithGuards 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:114: graphDuplicateEdgeExists 0.0% +github.com/thebtf/engram/internal/mcp/tools_ingest.go:25: handleIngest 0.0% +github.com/thebtf/engram/internal/mcp/tools_ingest.go:43: ingestDocument 0.0% +github.com/thebtf/engram/internal/mcp/tools_instincts.go:20: handleImportInstincts 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:19: issuesToolSchema 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:109: validateIssueActionParams 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:143: handleIssues 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:189: resolveSourceProject 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:205: handleIssueCreate 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:250: handleIssueList 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:311: handleIssueGet 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:344: handleIssueUpdate 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:382: handleIssueComment 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:408: handleIssueReopen 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:425: handleIssueClose 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:22: handleLifecycle 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:48: lifecycleInfo 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:87: lifecyclePromote 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:118: lifecycleDemote 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:149: lifecycleSetConfidence 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:172: lifecycleSetDefeasibility 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:191: lifecycleSleepStatus 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:197: lifecycleDecayPreview 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:233: marshalJSON 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:35: vnextFEnabled 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:42: isValidPrivacyScope 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:54: derivePrivacyScopeFromLegacy 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:82: deriveLegacyScopeFromPrivacy 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:93: applyPrincipalMemoryMetadata 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:135: addPrincipalMemoryFields 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:161: newScopedWriteLintMemoryStore 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:172: writeLintVisibilityCaller 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:186: writeLintVisibilityOptions 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:192: scopedWriteLintMemoryStore 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:202: filterVisibleWriteGateCandidates 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:214: domainManageAllowed 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:218: List 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:272: writeLintVisibilityFetchLimit 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:286: Get 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:297: Create 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:301: Update 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:305: MarkSuperseded 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:319: effectiveMemoryEditor 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:329: isValidStoreObservationType 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:354: handleStoreMemory 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1111: handleEditMemory 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1218: computeTTLDays 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1258: truncateTitle 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1270: keepRecallMemory 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1280: keepRecallMemoryFilters 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1342: handleRecallMemory 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1690: staleAdvisory 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1700: marshalWithStaleAdvisory 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1727: Rank 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1751: handleRecallMemoryHybrid 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:2252: handleRateMemory 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:2281: handleSuppressMemory 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:17: SetDomainRegistryService 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:21: checkDomainWriteMCP 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:43: addDomainWriteDecisionFields 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:51: marshalStoreMemoryAugmented 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:26: newMemoryStoreSignificanceUpdater 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:33: s6OutcomeEnabledFromEnv 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:37: effectiveMemorySignificanceUpdater 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:47: currentMemorySignificanceUpdater 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:58: rateMemorySignificanceTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:74: handleRateMemorySignificance 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:109: RateMemorySignificance 0.0% +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:18: s2MetaMemoryEnabled 0.0% +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:22: knowAboutTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:39: handleKnowAbout 0.0% +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:104: parseKnowAboutLimit 0.0% +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:118: summarizeMetaIndexTags 0.0% +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:153: summarizeMetaIndexDateRange 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:23: SetPrincipalMemoryQueryService 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:27: principalMemoryQueryTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:52: handleQueryPrincipalMemory 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:134: principalMemoryQueryCaller 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:149: parsePrincipalMemoryQueryLimit 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:160: principalMemoryQueryText 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:167: parsePrincipalMemoryQueryVisibility 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:179: parsePrincipalMemoryQueryOffset 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:190: parsePrincipalMemoryQueryInt 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:215: parsePrincipalMemoryQueryBool 0.0% +github.com/thebtf/engram/internal/mcp/tools_recall.go:28: handleRecall 0.0% +github.com/thebtf/engram/internal/mcp/tools_recall.go:125: parseRecallIncludedPrincipals 0.0% +github.com/thebtf/engram/internal/mcp/tools_recall.go:165: appendRecallIncludedPrincipalMemories 0.0% +github.com/thebtf/engram/internal/mcp/tools_recall.go:223: recallIncludeTargetMatchesCaller 0.0% +github.com/thebtf/engram/internal/mcp/tools_recall.go:231: recallPrincipalQueryItemToMemory 0.0% +github.com/thebtf/engram/internal/mcp/tools_recall.go:247: handleRecallSearch 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:20: currentReviewLoopCandidateLister 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:30: reviewLoopCandidateTools 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:65: reviewLoopReadSchema 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:78: reviewPacketIDSchema 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:91: handleReviewMetricsRead 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:110: handleReviewQueueRead 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:140: handleReviewPacketDetail 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:151: handleReviewPacketPreviewAction 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:167: handleReviewPacketApplyAction 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:189: parseReviewLoopReadArgs 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:212: reviewLoopMCPPacketTypeSupported 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:217: reviewLoopActionFromArgs 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:225: reviewLoopReasonFromArgs 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:233: loadReviewPacketCandidate 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:256: applyReviewPacketPreserve 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:278: applyReviewPacketSuppress 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:296: reviewLoopMemoryFromCandidate 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:320: filterRiskyMCPReviewCandidates 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:330: marshalReviewLoop 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:17: ruleGovernanceReadTools 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:126: handleRuleGovernanceHealth 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:176: handleRuleGovernanceQueue 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:233: handleRuleGovernanceSnapshots 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:278: handleRuleGovernanceUsefulness 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:338: handleRuleGovernanceTransition 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:373: handleRuleGovernancePinSnapshot 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:406: handleRuleGovernanceRollback 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:483: requireRuleGovernanceReadAccess 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:495: requireRuleGovernanceProjectOrAdmin 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:505: ruleGovernanceCallerIsAdmin 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:510: requireRuleGovernanceAdminAccess 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:518: redactRuleGovernanceEvidenceHandles 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:535: redactRuleGovernanceEvidenceHandle 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:553: ruleGovernanceEvidenceHandleHasSensitiveText 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:559: isCanonicalRuleGovernanceEvidenceHandle 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:580: isSafeRuleGovernanceEvidenceID 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:594: parseRuleGovernanceTransitionRequest 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:604: parseRuleGovernanceSince 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:623: boundedRuleGovernanceLimit 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:634: formatRuleGovernanceTime 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:641: formatRuleGovernanceTimePtr 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:649: stringRuleCandidateStatusCounts 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:657: stringRuleVersionStateCounts 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:665: stringRuleArbiterRunStatusCounts 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:673: stringRuleInjectionEventTypeCounts 0.0% +github.com/thebtf/engram/internal/mcp/tools_rules.go:17: handleStoreRule 0.0% +github.com/thebtf/engram/internal/mcp/tools_rules.go:133: handleListRules 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:22: handleSettingsConsolidated 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:51: SetSettingsStore 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:57: settingsStore 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:67: isSecretSettingKey 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:74: requireAdmin 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:85: handleSetSetting 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:145: handleGetSetting 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:181: handleListSettings 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:216: handleDeleteSetting 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:35: resumeScopesFromFields 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:52: stateTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:82: setStateTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:142: handleGetState 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:219: handleSetState 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:274: decodeSessionStateForWrite 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:292: validateSessionStateBudget 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:303: validateNativeResumePacket 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:349: decodeProjectStateForWrite 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:364: requireStateObject 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:383: requireNestedObject 0.0% +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:10: handleStoreConsolidated 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:21: SetTemporalTruthProvider 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:25: temporalTruthEnabledFromEnv 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:30: temporalTruthTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:39: temporalTruthRefreshTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:48: temporalTruthRefreshSchema 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:58: temporalTruthSchema 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:72: currentTemporalTruthProvider 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:82: handleTemporalTruth 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:102: handleTemporalTruthRefresh 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:122: parseTemporalTruthArgs 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:151: parseTemporalTruthRefreshProject 0.0% +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:10: handleVaultConsolidated 0.0% +total: (statements) 0.1% diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/summary.json b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/summary.json new file mode 100644 index 00000000..a65d7dbc --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-focused-repeat3/summary.json @@ -0,0 +1,130 @@ +{ + "schema_version": 1, + "gate": "release-gates-foundation", + "run_id": "t007-maker-focused-repeat3", + "started_at": "2026-07-11T00:34:31.5901586+00:00", + "finished_at": "2026-07-11T00:35:21.4155778+00:00", + "duration_seconds": 49.825, + "verdict": "PASS", + "counts": { + "requested_repeats": 3, + "completed_repeats": 3, + "passed_repeats": 3, + "failed_repeats": 0, + "child_commands": 42, + "nonzero_child_commands": 0 + }, + "packages": [ + "./internal/mcp" + ], + "run_pattern": "^TestEC_F1_TagDerivedBackfill_T007$", + "coverage_policy": "Targeted", + "connection_budget": 20, + "race": false, + "database_dsn": "REDACTED_DATABASE_DSN", + "environment": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-repeat3\\environment.json", + "commands": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-repeat3\\commands.json", + "repeats": [ + { + "repeat": 1, + "verdict": "PASS", + "database": "engram_prc_rg_test_8b1d3112a7a95fbb_r1", + "schema": "public", + "database_schema_identity": "engram_prc_rg_test_8b1d3112a7a95fbb_r1.public", + "database_dsn": "REDACTED_DATABASE_DSN", + "database_create_confirmed": true, + "sequential_execution": { + "package_parallelism": 1, + "test_parallelism": 1 + }, + "race": false, + "connection_budget": 20, + "server_sessions_before": 6, + "server_sessions_after": 6, + "sessions_before": 0, + "sessions_after": 0, + "go_test_exit": 0, + "json_parser_exit": 0, + "coverage_policy": "Targeted", + "coverage_exit": 0, + "cleanup_exit": 0, + "cleanup_status": "PASS", + "required_session_start_execution": { + "schema_version": 1, + "verdict": "NOT_APPLICABLE", + "reason": "only an unfiltered canonical ./... run requires the 12-test session-start execution proof" + }, + "cleanup_summary": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-repeat3\\repeat-01\\cleanup\\cleanup.json", + "errors": [], + "artifact_directory": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-repeat3\\repeat-01" + }, + { + "repeat": 2, + "verdict": "PASS", + "database": "engram_prc_rg_test_8b1d3112a7a95fbb_r2", + "schema": "public", + "database_schema_identity": "engram_prc_rg_test_8b1d3112a7a95fbb_r2.public", + "database_dsn": "REDACTED_DATABASE_DSN", + "database_create_confirmed": true, + "sequential_execution": { + "package_parallelism": 1, + "test_parallelism": 1 + }, + "race": false, + "connection_budget": 20, + "server_sessions_before": 6, + "server_sessions_after": 6, + "sessions_before": 0, + "sessions_after": 0, + "go_test_exit": 0, + "json_parser_exit": 0, + "coverage_policy": "Targeted", + "coverage_exit": 0, + "cleanup_exit": 0, + "cleanup_status": "PASS", + "required_session_start_execution": { + "schema_version": 1, + "verdict": "NOT_APPLICABLE", + "reason": "only an unfiltered canonical ./... run requires the 12-test session-start execution proof" + }, + "cleanup_summary": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-repeat3\\repeat-02\\cleanup\\cleanup.json", + "errors": [], + "artifact_directory": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-repeat3\\repeat-02" + }, + { + "repeat": 3, + "verdict": "PASS", + "database": "engram_prc_rg_test_8b1d3112a7a95fbb_r3", + "schema": "public", + "database_schema_identity": "engram_prc_rg_test_8b1d3112a7a95fbb_r3.public", + "database_dsn": "REDACTED_DATABASE_DSN", + "database_create_confirmed": true, + "sequential_execution": { + "package_parallelism": 1, + "test_parallelism": 1 + }, + "race": false, + "connection_budget": 20, + "server_sessions_before": 6, + "server_sessions_after": 6, + "sessions_before": 0, + "sessions_after": 0, + "go_test_exit": 0, + "json_parser_exit": 0, + "coverage_policy": "Targeted", + "coverage_exit": 0, + "cleanup_exit": 0, + "cleanup_status": "PASS", + "required_session_start_execution": { + "schema_version": 1, + "verdict": "NOT_APPLICABLE", + "reason": "only an unfiltered canonical ./... run requires the 12-test session-start execution proof" + }, + "cleanup_summary": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-repeat3\\repeat-03\\cleanup\\cleanup.json", + "errors": [], + "artifact_directory": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-repeat3\\repeat-03" + } + ], + "errors": [], + "artifact_directory": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-focused-repeat3" +} diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/commands.json b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/commands.json new file mode 100644 index 00000000..9063fc5f --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/commands.json @@ -0,0 +1,441 @@ +[ + { + "name": "go-version", + "executable": "C:\\Program Files\\Go\\bin\\go.exe", + "arguments": [ + "version" + ], + "environment_keys": [], + "command": "C:\\Program Files\\Go\\bin\\go.exe version", + "started_at": "2026-07-11T00:35:42.4551819+00:00", + "finished_at": "2026-07-11T00:35:42.7578948+00:00", + "duration_seconds": 0.303, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-full-mcp\\go-version.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-full-mcp\\go-version.stderr.log" + }, + { + "name": "postgres-container-identity", + "executable": "docker", + "arguments": [ + "inspect", + "--format", + "{{.Name}}|{{.Config.Image}}|{{.Image}}|{{.State.Running}}", + "engram-prc-postgres" + ], + "environment_keys": [], + "command": "docker inspect --format {{.Name}}|{{.Config.Image}}|{{.Image}}|{{.State.Running}} engram-prc-postgres", + "started_at": "2026-07-11T00:35:42.8146572+00:00", + "finished_at": "2026-07-11T00:35:43.1543953+00:00", + "duration_seconds": 0.34, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-full-mcp\\postgres-container-identity.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-full-mcp\\postgres-container-identity.stderr.log" + }, + { + "name": "postgres-server-identity", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT json_build_object('server_version', current_setting('server_version'), 'server_version_num', current_setting('server_version_num'), 'version', version(), 'max_connections', current_setting('max_connections'), 'superuser_reserved_connections', current_setting('superuser_reserved_connections'), 'reserved_connections', COALESCE(NULLIF(current_setting('reserved_connections', true), ''), '0'), 'current_connections', (SELECT count(*)::text FROM pg_stat_activity), 'database', current_database(), 'schema', current_schema(), 'user', current_user)::text;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT json_build_object('server_version', current_setting('server_version'), 'server_version_num', current_setting('server_version_num'), 'version', version(), 'max_connections', current_setting('max_connections'), 'superuser_reserved_connections', current_setting('superuser_reserved_connections'), 'reserved_connections', COALESCE(NULLIF(current_setting('reserved_connections', true), ''), '0'), 'current_connections', (SELECT count(*)::text FROM pg_stat_activity), 'database', current_database(), 'schema', current_schema(), 'user', current_user)::text;", + "started_at": "2026-07-11T00:35:43.1677132+00:00", + "finished_at": "2026-07-11T00:35:43.6625158+00:00", + "duration_seconds": 0.495, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-full-mcp\\postgres-server-identity.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-full-mcp\\postgres-server-identity.stderr.log" + }, + { + "name": "repeat-1-create-database", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "CREATE DATABASE \"engram_prc_rg_test_4a8d23a359bc81a6_r1\" OWNER \"engram\";" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c CREATE DATABASE \"engram_prc_rg_test_4a8d23a359bc81a6_r1\" OWNER \"engram\";", + "started_at": "2026-07-11T00:35:43.7114045+00:00", + "finished_at": "2026-07-11T00:35:44.5681850+00:00", + "duration_seconds": 0.857, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-full-mcp\\repeat-01\\create-database.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-full-mcp\\repeat-01\\create-database.stderr.log" + }, + { + "name": "repeat-1-create-pgvector", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "engram_prc_rg_test_4a8d23a359bc81a6_r1", + "-At", + "-F", + "|", + "-c", + "CREATE EXTENSION IF NOT EXISTS vector WITH SCHEMA public;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d engram_prc_rg_test_4a8d23a359bc81a6_r1 -At -F | -c CREATE EXTENSION IF NOT EXISTS vector WITH SCHEMA public;", + "started_at": "2026-07-11T00:35:44.5748320+00:00", + "finished_at": "2026-07-11T00:35:45.0677538+00:00", + "duration_seconds": 0.493, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-full-mcp\\repeat-01\\create-pgvector.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-full-mcp\\repeat-01\\create-pgvector.stderr.log" + }, + { + "name": "repeat-1-database-identity", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "engram_prc_rg_test_4a8d23a359bc81a6_r1", + "-At", + "-F", + "|", + "-c", + "SELECT json_build_object('database', current_database(), 'schema', current_schema(), 'server_version', current_setting('server_version'), 'user', current_user)::text;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d engram_prc_rg_test_4a8d23a359bc81a6_r1 -At -F | -c SELECT json_build_object('database', current_database(), 'schema', current_schema(), 'server_version', current_setting('server_version'), 'user', current_user)::text;", + "started_at": "2026-07-11T00:35:45.0715288+00:00", + "finished_at": "2026-07-11T00:35:45.6245069+00:00", + "duration_seconds": 0.553, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-full-mcp\\repeat-01\\database-identity.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-full-mcp\\repeat-01\\database-identity.stderr.log" + }, + { + "name": "repeat-1-pg-stat-before", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT COALESCE(json_agg(row_to_json(s)), '[]'::json)::text FROM (SELECT pid, usename, datname, state, backend_type, application_name, client_addr::text AS client_addr, wait_event_type, wait_event, query_start FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_4a8d23a359bc81a6_r1' ORDER BY pid) AS s;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT COALESCE(json_agg(row_to_json(s)), '[]'::json)::text FROM (SELECT pid, usename, datname, state, backend_type, application_name, client_addr::text AS client_addr, wait_event_type, wait_event, query_start FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_4a8d23a359bc81a6_r1' ORDER BY pid) AS s;", + "started_at": "2026-07-11T00:35:45.6300593+00:00", + "finished_at": "2026-07-11T00:35:46.0810960+00:00", + "duration_seconds": 0.451, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-full-mcp\\repeat-01\\pg-stat-activity-before.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-full-mcp\\repeat-01\\pg-stat-activity-before.stderr.log" + }, + { + "name": "repeat-1-server-connection-count-before", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT count(*) FROM pg_stat_activity;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT count(*) FROM pg_stat_activity;", + "started_at": "2026-07-11T00:35:46.0844599+00:00", + "finished_at": "2026-07-11T00:35:46.4927084+00:00", + "duration_seconds": 0.408, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-full-mcp\\repeat-01\\server-connection-count-before.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-full-mcp\\repeat-01\\server-connection-count-before.stderr.log" + }, + { + "name": "repeat-1-connection-count-before", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT count(*) FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_4a8d23a359bc81a6_r1';" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT count(*) FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_4a8d23a359bc81a6_r1';", + "started_at": "2026-07-11T00:35:46.5016687+00:00", + "finished_at": "2026-07-11T00:35:47.1974127+00:00", + "duration_seconds": 0.696, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-full-mcp\\repeat-01\\connection-count-before.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-full-mcp\\repeat-01\\connection-count-before.stderr.log" + }, + { + "name": "repeat-1-go-test", + "executable": "C:\\Program Files\\Go\\bin\\go.exe", + "arguments": [ + "test", + "-json", + "-p", + "1", + "-parallel", + "1", + "-count=1", + "-timeout", + "30m", + "-covermode=atomic", + "-coverprofile=.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-full-mcp\\repeat-01\\coverage.out", + "./internal/mcp" + ], + "environment_keys": [ + "DATABASE_DSN", + "DATABASE_MAX_CONNS", + "ENGRAM_RELEASE_GATE_REPEAT", + "ENGRAM_RELEASE_GATE_RUN_ID", + "ENGRAM_TEST_DSN", + "TEST_DATABASE_DSN" + ], + "command": "C:\\Program Files\\Go\\bin\\go.exe test -json -p 1 -parallel 1 -count=1 -timeout 30m -covermode=atomic -coverprofile=.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-full-mcp\\repeat-01\\coverage.out ./internal/mcp", + "started_at": "2026-07-11T00:35:47.2040810+00:00", + "finished_at": "2026-07-11T00:35:59.0755050+00:00", + "duration_seconds": 11.871, + "exit_code": 1, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-full-mcp\\repeat-01\\go-test.stdout.jsonl", + "stderr": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-full-mcp\\repeat-01\\go-test.stderr.log" + }, + { + "name": "repeat-1-assert-go-test-json", + "executable": "C:\\Program Files\\PowerShell\\7\\pwsh.exe", + "arguments": [ + "-NoProfile", + "-File", + "D:\\Dev\\engram\\.w\\t007-current-contract\\scripts\\production-gates\\assert-go-test-json.ps1", + "-InputPath", + ".agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-full-mcp\\repeat-01\\go-test.stdout.jsonl", + "-SummaryPath", + ".agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-full-mcp\\repeat-01\\go-test-summary.json" + ], + "environment_keys": [], + "command": "C:\\Program Files\\PowerShell\\7\\pwsh.exe -NoProfile -File D:\\Dev\\engram\\.w\\t007-current-contract\\scripts\\production-gates\\assert-go-test-json.ps1 -InputPath .agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-full-mcp\\repeat-01\\go-test.stdout.jsonl -SummaryPath .agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-full-mcp\\repeat-01\\go-test-summary.json", + "started_at": "2026-07-11T00:35:59.0802198+00:00", + "finished_at": "2026-07-11T00:36:00.0133369+00:00", + "duration_seconds": 0.933, + "exit_code": 1, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-full-mcp\\repeat-01\\assert-go-test-json.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-full-mcp\\repeat-01\\assert-go-test-json.stderr.log" + }, + { + "name": "repeat-1-targeted-coverage-report", + "executable": "C:\\Program Files\\Go\\bin\\go.exe", + "arguments": [ + "tool", + "cover", + "-func=.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-full-mcp\\repeat-01\\coverage.out" + ], + "environment_keys": [], + "command": "C:\\Program Files\\Go\\bin\\go.exe tool cover -func=.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-full-mcp\\repeat-01\\coverage.out", + "started_at": "2026-07-11T00:36:00.0183934+00:00", + "finished_at": "2026-07-11T00:36:00.6786378+00:00", + "duration_seconds": 0.66, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-full-mcp\\repeat-01\\targeted-coverage.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-full-mcp\\repeat-01\\targeted-coverage.stderr.log" + }, + { + "name": "repeat-1-pg-stat-after", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT COALESCE(json_agg(row_to_json(s)), '[]'::json)::text FROM (SELECT pid, usename, datname, state, backend_type, application_name, client_addr::text AS client_addr, wait_event_type, wait_event, query_start FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_4a8d23a359bc81a6_r1' ORDER BY pid) AS s;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT COALESCE(json_agg(row_to_json(s)), '[]'::json)::text FROM (SELECT pid, usename, datname, state, backend_type, application_name, client_addr::text AS client_addr, wait_event_type, wait_event, query_start FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_4a8d23a359bc81a6_r1' ORDER BY pid) AS s;", + "started_at": "2026-07-11T00:36:00.6792585+00:00", + "finished_at": "2026-07-11T00:36:01.0549910+00:00", + "duration_seconds": 0.376, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-full-mcp\\repeat-01\\pg-stat-activity-after.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-full-mcp\\repeat-01\\pg-stat-activity-after.stderr.log" + }, + { + "name": "repeat-1-server-connection-count-after", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT count(*) FROM pg_stat_activity;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT count(*) FROM pg_stat_activity;", + "started_at": "2026-07-11T00:36:01.0564577+00:00", + "finished_at": "2026-07-11T00:36:01.4388172+00:00", + "duration_seconds": 0.382, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-full-mcp\\repeat-01\\server-connection-count-after.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-full-mcp\\repeat-01\\server-connection-count-after.stderr.log" + }, + { + "name": "repeat-1-connection-count-after", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT count(*) FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_4a8d23a359bc81a6_r1';" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT count(*) FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_4a8d23a359bc81a6_r1';", + "started_at": "2026-07-11T00:36:01.4407127+00:00", + "finished_at": "2026-07-11T00:36:01.8484293+00:00", + "duration_seconds": 0.408, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-full-mcp\\repeat-01\\connection-count-after.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-full-mcp\\repeat-01\\connection-count-after.stderr.log" + }, + { + "name": "repeat-1-cleanup", + "executable": "C:\\Program Files\\PowerShell\\7\\pwsh.exe", + "arguments": [ + "-NoProfile", + "-File", + "D:\\Dev\\engram\\.w\\t007-current-contract\\scripts\\production-gates\\cleanup-db-sessions.ps1", + "-DatabaseName", + "engram_prc_rg_test_4a8d23a359bc81a6_r1", + "-SchemaName", + "public", + "-ArtifactRoot", + ".agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-full-mcp\\repeat-01", + "-RunId", + "t007-maker-full-mcp-repeat-1", + "-PostgresContainer", + "engram-prc-postgres" + ], + "environment_keys": [ + "ENGRAM_TEST_ADMIN_DSN" + ], + "command": "C:\\Program Files\\PowerShell\\7\\pwsh.exe -NoProfile -File D:\\Dev\\engram\\.w\\t007-current-contract\\scripts\\production-gates\\cleanup-db-sessions.ps1 -DatabaseName engram_prc_rg_test_4a8d23a359bc81a6_r1 -SchemaName public -ArtifactRoot .agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-full-mcp\\repeat-01 -RunId t007-maker-full-mcp-repeat-1 -PostgresContainer engram-prc-postgres", + "started_at": "2026-07-11T00:36:01.8518329+00:00", + "finished_at": "2026-07-11T00:36:05.2452020+00:00", + "duration_seconds": 3.393, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-full-mcp\\repeat-01\\cleanup-process.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-full-mcp\\repeat-01\\cleanup-process.stderr.log" + } +] diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/environment.json b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/environment.json new file mode 100644 index 00000000..7f9c2d46 --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/environment.json @@ -0,0 +1,52 @@ +{ + "schema_version": 1, + "run_id": "t007-maker-full-mcp", + "timestamp": "2026-07-11T00:35:42.4341012+00:00", + "go_version": "go version go1.25.11 windows/amd64", + "postgres": { + "declared_image": "pgvector/pgvector:pg17", + "container": { + "name": "/engram-prc-postgres", + "configured_image": "pgvector/pgvector:pg17", + "image_id": "sha256:feb68f4f15446397d8cac7f4fe48fe4586de83160d1fc48b46283312d1a33966", + "running": true + }, + "server": { + "server_version": "17.10 (Debian 17.10-1.pgdg12+1)", + "server_version_num": "170010", + "version": "PostgreSQL 17.10 (Debian 17.10-1.pgdg12+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 12.2.0-14+deb12u1) 12.2.0, 64-bit", + "max_connections": "100", + "superuser_reserved_connections": "3", + "reserved_connections": "0", + "current_connections": "6", + "database": "postgres", + "schema": "public", + "user": "engram" + }, + "admin_dsn": "postgres://engram:REDACTED@127.0.0.1:55432/postgres?sslmode=disable" + }, + "packages": [ + "./internal/mcp" + ], + "run_pattern": null, + "repeat": 1, + "fail_on_unexpected_skip": false, + "allowed_skip_identities": [], + "coverage_policy": "Targeted", + "connection_budget": 20, + "race": false, + "require_session_start_execution": false, + "required_session_start_test_count": 12, + "sequential_execution": { + "go_package_parallelism": 1, + "go_test_parallelism": 1, + "database_max_connections": 20 + }, + "govulncheck_policy": { + "authoritative": [ + "source scan with tests", + "unstripped binary scan" + ], + "non_authoritative": "stripped binary scan (module-level fallback when symbols are absent)" + } +} diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/go-version.stderr.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/go-version.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/go-version.stdout.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/go-version.stdout.log new file mode 100644 index 00000000..a857be3f --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/go-version.stdout.log @@ -0,0 +1 @@ +go version go1.25.11 windows/amd64 diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/postgres-container-identity.stderr.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/postgres-container-identity.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/postgres-container-identity.stdout.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/postgres-container-identity.stdout.log new file mode 100644 index 00000000..c110d492 --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/postgres-container-identity.stdout.log @@ -0,0 +1 @@ +/engram-prc-postgres|pgvector/pgvector:pg17|sha256:feb68f4f15446397d8cac7f4fe48fe4586de83160d1fc48b46283312d1a33966|true diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/postgres-server-identity.stderr.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/postgres-server-identity.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/postgres-server-identity.stdout.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/postgres-server-identity.stdout.log new file mode 100644 index 00000000..2e33d56e --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/postgres-server-identity.stdout.log @@ -0,0 +1 @@ +{"server_version" : "17.10 (Debian 17.10-1.pgdg12+1)", "server_version_num" : "170010", "version" : "PostgreSQL 17.10 (Debian 17.10-1.pgdg12+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 12.2.0-14+deb12u1) 12.2.0, 64-bit", "max_connections" : "100", "superuser_reserved_connections" : "3", "reserved_connections" : "0", "current_connections" : "6", "database" : "postgres", "schema" : "public", "user" : "engram"} diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/repeat-01/assert-go-test-json.stderr.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/repeat-01/assert-go-test-json.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/repeat-01/assert-go-test-json.stdout.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/repeat-01/assert-go-test-json.stdout.log new file mode 100644 index 00000000..c3f06ff7 --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/repeat-01/assert-go-test-json.stdout.log @@ -0,0 +1,2 @@ +go test JSON verdict=FAIL packages=1 tests=488 passed=487 failed=1 skipped=0 unexpected_skips=0 malformed=0 +summary=D:\Dev\engram\.w\t007-current-contract\.agent\reports\evidence\production-ready\t007-compat\t007-maker-full-mcp\repeat-01\go-test-summary.json diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/repeat-01/cleanup-process.stderr.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/repeat-01/cleanup-process.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/repeat-01/cleanup-process.stdout.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/repeat-01/cleanup-process.stdout.log new file mode 100644 index 00000000..98e949fb --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/repeat-01/cleanup-process.stdout.log @@ -0,0 +1,2 @@ +cleanup verdict=PASS database=engram_prc_rg_test_4a8d23a359bc81a6_r1 schema=public terminated_sessions=0 remaining_database_count=0 +summary=D:\Dev\engram\.w\t007-current-contract\.agent\reports\evidence\production-ready\t007-compat\t007-maker-full-mcp\repeat-01\cleanup\cleanup.json diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/repeat-01/cleanup/cleanup.json b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/repeat-01/cleanup/cleanup.json new file mode 100644 index 00000000..0cc94b56 --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/repeat-01/cleanup/cleanup.json @@ -0,0 +1,170 @@ +{ + "schema_version": 1, + "run_id": "t007-maker-full-mcp-repeat-1", + "timestamp": "2026-07-11T00:36:05.1514660+00:00", + "verdict": "PASS", + "database": "engram_prc_rg_test_4a8d23a359bc81a6_r1", + "schema": "public", + "database_schema_identity": "engram_prc_rg_test_4a8d23a359bc81a6_r1.public", + "admin_dsn": "postgres://engram:REDACTED@127.0.0.1:55432/postgres?sslmode=disable", + "postgres_container": "engram-prc-postgres", + "cleanup_status": "PASS", + "cleanup_attempted": true, + "database_existed_before": true, + "absence_verified": true, + "terminated_sessions": 0, + "remaining_database_count": 0, + "commands": [ + { + "name": "database-exists-before-cleanup", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT count(*) FROM pg_database WHERE datname = 'engram_prc_rg_test_4a8d23a359bc81a6_r1';" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT count(*) FROM pg_database WHERE datname = 'engram_prc_rg_test_4a8d23a359bc81a6_r1';", + "started_at": "2026-07-11T00:36:02.6554475+00:00", + "finished_at": "2026-07-11T00:36:03.0817473+00:00", + "duration_seconds": 0.426, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-full-mcp\\repeat-01\\cleanup\\database-exists-before.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-full-mcp\\repeat-01\\cleanup\\database-exists-before.stderr.log" + }, + { + "name": "pg-stat-activity-before-cleanup", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT COALESCE(json_agg(row_to_json(s)), '[]'::json)::text FROM (SELECT pid, usename, datname, state, backend_type, application_name, client_addr::text AS client_addr, wait_event_type, wait_event, query_start FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_4a8d23a359bc81a6_r1' ORDER BY pid) AS s;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT COALESCE(json_agg(row_to_json(s)), '[]'::json)::text FROM (SELECT pid, usename, datname, state, backend_type, application_name, client_addr::text AS client_addr, wait_event_type, wait_event, query_start FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_4a8d23a359bc81a6_r1' ORDER BY pid) AS s;", + "started_at": "2026-07-11T00:36:03.1485160+00:00", + "finished_at": "2026-07-11T00:36:03.6580891+00:00", + "duration_seconds": 0.51, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-full-mcp\\repeat-01\\cleanup\\pg-stat-activity-before.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-full-mcp\\repeat-01\\cleanup\\pg-stat-activity-before.stderr.log" + }, + { + "name": "terminate-database-sessions", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT COALESCE(json_agg(row_to_json(s)), '[]'::json)::text FROM (SELECT pid, pg_terminate_backend(pid) AS terminated FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_4a8d23a359bc81a6_r1' AND pid <> pg_backend_pid() ORDER BY pid) AS s;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT COALESCE(json_agg(row_to_json(s)), '[]'::json)::text FROM (SELECT pid, pg_terminate_backend(pid) AS terminated FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_4a8d23a359bc81a6_r1' AND pid <> pg_backend_pid() ORDER BY pid) AS s;", + "started_at": "2026-07-11T00:36:03.6624739+00:00", + "finished_at": "2026-07-11T00:36:04.1892611+00:00", + "duration_seconds": 0.527, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-full-mcp\\repeat-01\\cleanup\\terminate-sessions.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-full-mcp\\repeat-01\\cleanup\\terminate-sessions.stderr.log" + }, + { + "name": "drop-fresh-database", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "DROP DATABASE IF EXISTS \"engram_prc_rg_test_4a8d23a359bc81a6_r1\" WITH (FORCE);" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c DROP DATABASE IF EXISTS \"engram_prc_rg_test_4a8d23a359bc81a6_r1\" WITH (FORCE);", + "started_at": "2026-07-11T00:36:04.1986698+00:00", + "finished_at": "2026-07-11T00:36:04.7387609+00:00", + "duration_seconds": 0.54, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-full-mcp\\repeat-01\\cleanup\\drop-database.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-full-mcp\\repeat-01\\cleanup\\drop-database.stderr.log" + }, + { + "name": "verify-database-absent", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT count(*) FROM pg_database WHERE datname = 'engram_prc_rg_test_4a8d23a359bc81a6_r1';" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT count(*) FROM pg_database WHERE datname = 'engram_prc_rg_test_4a8d23a359bc81a6_r1';", + "started_at": "2026-07-11T00:36:04.7419101+00:00", + "finished_at": "2026-07-11T00:36:05.1430215+00:00", + "duration_seconds": 0.401, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-full-mcp\\repeat-01\\cleanup\\verify-database-absent.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-full-mcp\\repeat-01\\cleanup\\verify-database-absent.stderr.log" + } + ], + "errors": [] +} diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/repeat-01/cleanup/database-exists-before.stderr.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/repeat-01/cleanup/database-exists-before.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/repeat-01/cleanup/database-exists-before.stdout.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/repeat-01/cleanup/database-exists-before.stdout.log new file mode 100644 index 00000000..d00491fd --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/repeat-01/cleanup/database-exists-before.stdout.log @@ -0,0 +1 @@ +1 diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/repeat-01/cleanup/drop-database.stderr.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/repeat-01/cleanup/drop-database.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/repeat-01/cleanup/drop-database.stdout.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/repeat-01/cleanup/drop-database.stdout.log new file mode 100644 index 00000000..ca12dce0 --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/repeat-01/cleanup/drop-database.stdout.log @@ -0,0 +1 @@ +DROP DATABASE diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/repeat-01/cleanup/pg-stat-activity-before.stderr.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/repeat-01/cleanup/pg-stat-activity-before.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/repeat-01/cleanup/pg-stat-activity-before.stdout.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/repeat-01/cleanup/pg-stat-activity-before.stdout.log new file mode 100644 index 00000000..fe51488c --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/repeat-01/cleanup/pg-stat-activity-before.stdout.log @@ -0,0 +1 @@ +[] diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/repeat-01/cleanup/terminate-sessions.stderr.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/repeat-01/cleanup/terminate-sessions.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/repeat-01/cleanup/terminate-sessions.stdout.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/repeat-01/cleanup/terminate-sessions.stdout.log new file mode 100644 index 00000000..fe51488c --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/repeat-01/cleanup/terminate-sessions.stdout.log @@ -0,0 +1 @@ +[] diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/repeat-01/cleanup/verify-database-absent.stderr.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/repeat-01/cleanup/verify-database-absent.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/repeat-01/cleanup/verify-database-absent.stdout.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/repeat-01/cleanup/verify-database-absent.stdout.log new file mode 100644 index 00000000..573541ac --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/repeat-01/cleanup/verify-database-absent.stdout.log @@ -0,0 +1 @@ +0 diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/repeat-01/connection-count-after.stderr.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/repeat-01/connection-count-after.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/repeat-01/connection-count-after.stdout.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/repeat-01/connection-count-after.stdout.log new file mode 100644 index 00000000..573541ac --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/repeat-01/connection-count-after.stdout.log @@ -0,0 +1 @@ +0 diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/repeat-01/connection-count-before.stderr.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/repeat-01/connection-count-before.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/repeat-01/connection-count-before.stdout.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/repeat-01/connection-count-before.stdout.log new file mode 100644 index 00000000..573541ac --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/repeat-01/connection-count-before.stdout.log @@ -0,0 +1 @@ +0 diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/repeat-01/coverage.out b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/repeat-01/coverage.out new file mode 100644 index 00000000..430149bc --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/repeat-01/coverage.out @@ -0,0 +1,3472 @@ +mode: atomic +github.com/thebtf/engram/internal/mcp/audit_helpers.go:33.53,34.30 1 7 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:34.30,36.3 1 6 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:37.2,37.25 1 1 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:37.25,39.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:40.2,40.12 1 1 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:44.28,46.2 1 28 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:52.83,53.12 1 8 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:53.12,54.16 1 8 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:54.16,55.32 1 8 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:55.32,61.5 1 1 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:63.3,65.33 3 8 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:65.33,71.4 1 1 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:77.54,78.14 1 9 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:78.14,80.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:81.2,82.16 2 9 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:82.16,85.3 2 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:86.2,87.13 2 9 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:92.91,93.23 1 13 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:93.23,95.3 1 11 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:96.2,97.15 2 2 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:97.15,99.3 1 1 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:100.2,105.65 4 1 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:105.65,113.3 1 1 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:117.95,118.23 1 11 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:118.23,120.3 1 8 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:121.2,122.15 2 3 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:122.15,124.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:125.2,129.65 5 3 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:129.65,138.3 1 3 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:142.87,143.23 1 2 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:143.23,145.3 1 1 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:146.2,147.15 2 1 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:147.15,149.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:150.2,153.65 4 1 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:153.65,161.3 1 1 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:166.96,167.23 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:167.23,169.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:170.2,171.15 2 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:171.15,173.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:174.2,177.63 4 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:177.63,185.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:189.97,190.23 1 2 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:190.23,192.3 1 1 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:193.2,194.15 2 1 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:194.15,196.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:197.2,200.68 4 1 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:200.68,208.3 1 1 +github.com/thebtf/engram/internal/mcp/coerce.go:30.62,31.20 1 174 +github.com/thebtf/engram/internal/mcp/coerce.go:31.20,33.3 1 2 +github.com/thebtf/engram/internal/mcp/coerce.go:34.2,35.49 2 172 +github.com/thebtf/engram/internal/mcp/coerce.go:35.49,37.3 1 5 +github.com/thebtf/engram/internal/mcp/coerce.go:38.2,38.14 1 167 +github.com/thebtf/engram/internal/mcp/coerce.go:38.14,40.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:41.2,41.15 1 167 +github.com/thebtf/engram/internal/mcp/coerce.go:46.52,47.14 1 712 +github.com/thebtf/engram/internal/mcp/coerce.go:47.14,49.3 1 375 +github.com/thebtf/engram/internal/mcp/coerce.go:50.2,50.23 1 337 +github.com/thebtf/engram/internal/mcp/coerce.go:51.14,52.11 1 333 +github.com/thebtf/engram/internal/mcp/coerce.go:53.19,54.20 1 1 +github.com/thebtf/engram/internal/mcp/coerce.go:55.15,56.45 1 1 +github.com/thebtf/engram/internal/mcp/coerce.go:57.12,58.31 1 1 +github.com/thebtf/engram/internal/mcp/coerce.go:59.10,60.20 1 1 +github.com/thebtf/engram/internal/mcp/coerce.go:67.43,68.14 1 68 +github.com/thebtf/engram/internal/mcp/coerce.go:68.14,70.3 1 29 +github.com/thebtf/engram/internal/mcp/coerce.go:71.2,71.23 1 39 +github.com/thebtf/engram/internal/mcp/coerce.go:72.15,73.23 1 33 +github.com/thebtf/engram/internal/mcp/coerce.go:74.19,75.38 1 2 +github.com/thebtf/engram/internal/mcp/coerce.go:75.38,77.4 1 1 +github.com/thebtf/engram/internal/mcp/coerce.go:78.3,78.40 1 1 +github.com/thebtf/engram/internal/mcp/coerce.go:78.40,80.4 1 1 +github.com/thebtf/engram/internal/mcp/coerce.go:81.3,81.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:82.14,83.56 1 3 +github.com/thebtf/engram/internal/mcp/coerce.go:83.56,85.4 1 1 +github.com/thebtf/engram/internal/mcp/coerce.go:86.3,86.54 1 2 +github.com/thebtf/engram/internal/mcp/coerce.go:86.54,88.4 1 1 +github.com/thebtf/engram/internal/mcp/coerce.go:89.3,89.20 1 1 +github.com/thebtf/engram/internal/mcp/coerce.go:90.10,91.20 1 1 +github.com/thebtf/engram/internal/mcp/coerce.go:97.49,98.14 1 52 +github.com/thebtf/engram/internal/mcp/coerce.go:98.14,100.3 1 3 +github.com/thebtf/engram/internal/mcp/coerce.go:101.2,101.23 1 49 +github.com/thebtf/engram/internal/mcp/coerce.go:102.15,103.18 1 39 +github.com/thebtf/engram/internal/mcp/coerce.go:104.19,105.38 1 3 +github.com/thebtf/engram/internal/mcp/coerce.go:105.38,107.4 1 2 +github.com/thebtf/engram/internal/mcp/coerce.go:108.3,108.40 1 1 +github.com/thebtf/engram/internal/mcp/coerce.go:108.40,110.4 1 1 +github.com/thebtf/engram/internal/mcp/coerce.go:111.3,111.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:112.14,113.56 1 7 +github.com/thebtf/engram/internal/mcp/coerce.go:113.56,115.4 1 5 +github.com/thebtf/engram/internal/mcp/coerce.go:116.3,116.54 1 2 +github.com/thebtf/engram/internal/mcp/coerce.go:116.54,118.4 1 1 +github.com/thebtf/engram/internal/mcp/coerce.go:119.3,119.20 1 1 +github.com/thebtf/engram/internal/mcp/coerce.go:120.10,121.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:127.55,128.14 1 41 +github.com/thebtf/engram/internal/mcp/coerce.go:128.14,130.3 1 33 +github.com/thebtf/engram/internal/mcp/coerce.go:131.2,131.23 1 8 +github.com/thebtf/engram/internal/mcp/coerce.go:132.15,133.11 1 4 +github.com/thebtf/engram/internal/mcp/coerce.go:134.19,135.40 1 1 +github.com/thebtf/engram/internal/mcp/coerce.go:135.40,137.4 1 1 +github.com/thebtf/engram/internal/mcp/coerce.go:138.3,138.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:139.14,140.54 1 3 +github.com/thebtf/engram/internal/mcp/coerce.go:140.54,142.4 1 2 +github.com/thebtf/engram/internal/mcp/coerce.go:143.3,143.20 1 1 +github.com/thebtf/engram/internal/mcp/coerce.go:144.10,145.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:151.46,152.14 1 144 +github.com/thebtf/engram/internal/mcp/coerce.go:152.14,154.3 1 120 +github.com/thebtf/engram/internal/mcp/coerce.go:155.2,155.23 1 24 +github.com/thebtf/engram/internal/mcp/coerce.go:156.12,157.11 1 19 +github.com/thebtf/engram/internal/mcp/coerce.go:158.14,159.54 1 3 +github.com/thebtf/engram/internal/mcp/coerce.go:159.54,161.4 1 2 +github.com/thebtf/engram/internal/mcp/coerce.go:162.3,162.20 1 1 +github.com/thebtf/engram/internal/mcp/coerce.go:163.15,164.16 1 2 +github.com/thebtf/engram/internal/mcp/coerce.go:165.19,166.40 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:166.40,168.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:169.3,169.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:170.10,171.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:177.40,178.14 1 123 +github.com/thebtf/engram/internal/mcp/coerce.go:178.14,180.3 1 109 +github.com/thebtf/engram/internal/mcp/coerce.go:181.2,181.23 1 14 +github.com/thebtf/engram/internal/mcp/coerce.go:182.13,184.26 2 12 +github.com/thebtf/engram/internal/mcp/coerce.go:184.26,185.36 1 17 +github.com/thebtf/engram/internal/mcp/coerce.go:185.36,187.5 1 16 +github.com/thebtf/engram/internal/mcp/coerce.go:189.3,189.16 1 12 +github.com/thebtf/engram/internal/mcp/coerce.go:190.16,191.11 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:192.14,193.14 1 2 +github.com/thebtf/engram/internal/mcp/coerce.go:193.14,195.4 1 1 +github.com/thebtf/engram/internal/mcp/coerce.go:196.3,196.13 1 1 +github.com/thebtf/engram/internal/mcp/coerce.go:197.10,198.13 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:204.38,205.14 1 43 +github.com/thebtf/engram/internal/mcp/coerce.go:205.14,207.3 1 34 +github.com/thebtf/engram/internal/mcp/coerce.go:208.2,209.9 2 9 +github.com/thebtf/engram/internal/mcp/coerce.go:209.9,211.3 1 1 +github.com/thebtf/engram/internal/mcp/coerce.go:212.2,213.27 2 8 +github.com/thebtf/engram/internal/mcp/coerce.go:213.27,214.42 1 18 +github.com/thebtf/engram/internal/mcp/coerce.go:214.42,216.4 1 17 +github.com/thebtf/engram/internal/mcp/coerce.go:218.2,218.15 1 8 +github.com/thebtf/engram/internal/mcp/coerce.go:222.32,223.39 1 35 +github.com/thebtf/engram/internal/mcp/coerce.go:223.39,225.3 1 2 +github.com/thebtf/engram/internal/mcp/coerce.go:226.2,226.30 1 33 +github.com/thebtf/engram/internal/mcp/coerce.go:226.30,228.3 1 1 +github.com/thebtf/engram/internal/mcp/coerce.go:229.2,229.30 1 32 +github.com/thebtf/engram/internal/mcp/coerce.go:229.30,231.3 1 1 +github.com/thebtf/engram/internal/mcp/coerce.go:232.2,232.15 1 31 +github.com/thebtf/engram/internal/mcp/coerce.go:236.35,237.28 1 2 +github.com/thebtf/engram/internal/mcp/coerce.go:237.28,239.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:240.2,240.28 1 2 +github.com/thebtf/engram/internal/mcp/coerce.go:240.28,242.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:243.2,243.15 1 2 +github.com/thebtf/engram/internal/mcp/context.go:17.55,19.2 1 2 +github.com/thebtf/engram/internal/mcp/context.go:22.78,24.2 1 14 +github.com/thebtf/engram/internal/mcp/context.go:29.78,31.2 1 3 +github.com/thebtf/engram/internal/mcp/context.go:35.53,38.2 2 32 +github.com/thebtf/engram/internal/mcp/context.go:41.80,43.2 1 6 +github.com/thebtf/engram/internal/mcp/context.go:48.80,50.2 1 1 +github.com/thebtf/engram/internal/mcp/context.go:54.53,57.2 2 43 +github.com/thebtf/engram/internal/mcp/context.go:61.51,62.43 1 32 +github.com/thebtf/engram/internal/mcp/context.go:62.43,64.3 1 1 +github.com/thebtf/engram/internal/mcp/context.go:65.2,65.16 1 31 +github.com/thebtf/engram/internal/mcp/health.go:22.32,26.2 3 0 +github.com/thebtf/engram/internal/mcp/health.go:29.37,33.2 3 0 +github.com/thebtf/engram/internal/mcp/health.go:36.35,40.2 3 0 +github.com/thebtf/engram/internal/mcp/health.go:42.44,45.25 3 0 +github.com/thebtf/engram/internal/mcp/health.go:45.25,47.50 1 0 +github.com/thebtf/engram/internal/mcp/health.go:47.50,50.4 2 0 +github.com/thebtf/engram/internal/mcp/health.go:55.74,60.16 5 0 +github.com/thebtf/engram/internal/mcp/health.go:60.16,62.3 1 0 +github.com/thebtf/engram/internal/mcp/health.go:63.2,71.4 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:28.42,29.65 1 12 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:29.65,32.3 2 12 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:33.2,33.40 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:33.40,35.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:36.2,36.14 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:39.120,40.69 1 5 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:40.69,42.3 1 1 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:43.2,44.19 2 4 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:44.19,46.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:47.2,48.17 2 4 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:48.17,50.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:51.2,52.59 2 4 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:52.59,54.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:55.2,56.20 2 4 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:56.20,58.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:59.2,60.17 2 4 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:60.17,62.3 1 3 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:63.2,64.21 2 4 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:64.21,66.3 1 3 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:67.2,68.22 2 4 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:68.22,70.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:71.2,72.23 2 4 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:72.23,74.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:76.2,98.19 2 4 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:98.19,100.3 1 3 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:101.2,101.66 1 4 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:104.52,106.29 2 4 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:106.29,108.3 1 20 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:109.2,110.46 2 4 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:113.113,123.27 2 4 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:123.27,125.3 1 16 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:126.2,127.16 2 4 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:127.16,129.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:130.2,130.25 1 4 +github.com/thebtf/engram/internal/mcp/server.go:127.44,138.2 1 274 +github.com/thebtf/engram/internal/mcp/server.go:141.64,143.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:146.78,148.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:151.53,153.2 1 2 +github.com/thebtf/engram/internal/mcp/server.go:156.55,158.2 1 4 +github.com/thebtf/engram/internal/mcp/server.go:161.58,163.2 1 12 +github.com/thebtf/engram/internal/mcp/server.go:166.62,168.2 1 8 +github.com/thebtf/engram/internal/mcp/server.go:171.50,173.2 1 24 +github.com/thebtf/engram/internal/mcp/server.go:176.78,178.2 1 8 +github.com/thebtf/engram/internal/mcp/server.go:181.74,183.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:186.71,189.2 2 11 +github.com/thebtf/engram/internal/mcp/server.go:191.85,193.2 1 2 +github.com/thebtf/engram/internal/mcp/server.go:195.61,197.2 1 3 +github.com/thebtf/engram/internal/mcp/server.go:199.49,201.2 1 3 +github.com/thebtf/engram/internal/mcp/server.go:204.54,206.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:211.53,213.2 1 1 +github.com/thebtf/engram/internal/mcp/server.go:216.53,218.2 1 5 +github.com/thebtf/engram/internal/mcp/server.go:222.61,224.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:228.59,230.2 1 2 +github.com/thebtf/engram/internal/mcp/server.go:234.51,236.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:240.52,242.2 1 10 +github.com/thebtf/engram/internal/mcp/server.go:246.55,248.2 1 13 +github.com/thebtf/engram/internal/mcp/server.go:252.82,254.2 1 16 +github.com/thebtf/engram/internal/mcp/server.go:260.70,262.2 1 10 +github.com/thebtf/engram/internal/mcp/server.go:269.68,271.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:274.87,277.2 2 0 +github.com/thebtf/engram/internal/mcp/server.go:282.60,284.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:290.45,292.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:297.77,299.2 1 13 +github.com/thebtf/engram/internal/mcp/server.go:303.37,313.38 3 35 +github.com/thebtf/engram/internal/mcp/server.go:313.38,315.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:316.2,317.9 2 35 +github.com/thebtf/engram/internal/mcp/server.go:317.9,319.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:320.2,321.9 2 35 +github.com/thebtf/engram/internal/mcp/server.go:321.9,323.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:324.2,325.9 2 35 +github.com/thebtf/engram/internal/mcp/server.go:325.9,327.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:328.2,328.14 1 35 +github.com/thebtf/engram/internal/mcp/server.go:332.35,334.2 1 1 +github.com/thebtf/engram/internal/mcp/server.go:383.49,387.12 3 6 +github.com/thebtf/engram/internal/mcp/server.go:387.12,388.22 1 6 +github.com/thebtf/engram/internal/mcp/server.go:388.22,389.11 1 11 +github.com/thebtf/engram/internal/mcp/server.go:390.22,392.11 2 0 +github.com/thebtf/engram/internal/mcp/server.go:393.12,393.12 0 11 +github.com/thebtf/engram/internal/mcp/server.go:396.4,397.18 2 11 +github.com/thebtf/engram/internal/mcp/server.go:397.18,398.13 1 3 +github.com/thebtf/engram/internal/mcp/server.go:401.4,402.61 2 8 +github.com/thebtf/engram/internal/mcp/server.go:402.61,404.13 2 2 +github.com/thebtf/engram/internal/mcp/server.go:407.4,407.55 1 6 +github.com/thebtf/engram/internal/mcp/server.go:407.55,409.5 1 5 +github.com/thebtf/engram/internal/mcp/server.go:411.3,411.28 1 6 +github.com/thebtf/engram/internal/mcp/server.go:414.2,414.9 1 6 +github.com/thebtf/engram/internal/mcp/server.go:415.20,416.19 1 0 +github.com/thebtf/engram/internal/mcp/server.go:417.25,418.17 1 6 +github.com/thebtf/engram/internal/mcp/server.go:418.17,420.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:421.3,421.13 1 6 +github.com/thebtf/engram/internal/mcp/server.go:427.77,428.19 1 27 +github.com/thebtf/engram/internal/mcp/server.go:428.19,431.3 2 2 +github.com/thebtf/engram/internal/mcp/server.go:433.2,433.20 1 25 +github.com/thebtf/engram/internal/mcp/server.go:434.20,435.33 1 4 +github.com/thebtf/engram/internal/mcp/server.go:436.20,437.32 1 6 +github.com/thebtf/engram/internal/mcp/server.go:438.20,439.37 1 10 +github.com/thebtf/engram/internal/mcp/server.go:443.24,444.93 1 1 +github.com/thebtf/engram/internal/mcp/server.go:445.34,446.101 1 1 +github.com/thebtf/engram/internal/mcp/server.go:447.22,448.91 1 1 +github.com/thebtf/engram/internal/mcp/server.go:449.29,450.120 1 1 +github.com/thebtf/engram/internal/mcp/server.go:451.10,456.4 1 1 +github.com/thebtf/engram/internal/mcp/server.go:461.51,462.20 1 2 +github.com/thebtf/engram/internal/mcp/server.go:463.50,464.70 1 2 +github.com/thebtf/engram/internal/mcp/server.go:465.46,466.79 1 0 +github.com/thebtf/engram/internal/mcp/server.go:467.10,468.80 1 0 +github.com/thebtf/engram/internal/mcp/server.go:473.59,485.63 2 7 +github.com/thebtf/engram/internal/mcp/server.go:485.63,487.3 1 7 +github.com/thebtf/engram/internal/mcp/server.go:489.2,493.3 1 7 +github.com/thebtf/engram/internal/mcp/server.go:496.45,503.33 3 7 +github.com/thebtf/engram/internal/mcp/server.go:503.33,505.57 2 0 +github.com/thebtf/engram/internal/mcp/server.go:505.57,506.76 1 0 +github.com/thebtf/engram/internal/mcp/server.go:506.76,507.13 1 0 +github.com/thebtf/engram/internal/mcp/server.go:509.4,509.18 1 0 +github.com/thebtf/engram/internal/mcp/server.go:509.18,511.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:511.10,513.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:514.4,518.11 5 0 +github.com/thebtf/engram/internal/mcp/server.go:522.2,522.19 1 7 +github.com/thebtf/engram/internal/mcp/server.go:660.29,683.21 2 11 +github.com/thebtf/engram/internal/mcp/server.go:683.21,689.3 5 1 +github.com/thebtf/engram/internal/mcp/server.go:690.2,699.3 1 11 +github.com/thebtf/engram/internal/mcp/server.go:712.30,765.49 3 17 +github.com/thebtf/engram/internal/mcp/server.go:765.49,789.3 5 3 +github.com/thebtf/engram/internal/mcp/server.go:790.2,799.3 1 17 +github.com/thebtf/engram/internal/mcp/server.go:805.40,936.2 1 62 +github.com/thebtf/engram/internal/mcp/server.go:942.58,1048.35 2 62 +github.com/thebtf/engram/internal/mcp/server.go:1048.35,1077.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1080.2,1080.33 1 62 +github.com/thebtf/engram/internal/mcp/server.go:1080.33,1090.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1093.2,1093.26 1 62 +github.com/thebtf/engram/internal/mcp/server.go:1093.26,1123.3 1 11 +github.com/thebtf/engram/internal/mcp/server.go:1124.2,1124.80 1 62 +github.com/thebtf/engram/internal/mcp/server.go:1124.80,1126.3 1 2 +github.com/thebtf/engram/internal/mcp/server.go:1127.2,1127.55 1 62 +github.com/thebtf/engram/internal/mcp/server.go:1127.55,1129.3 1 2 +github.com/thebtf/engram/internal/mcp/server.go:1130.2,1130.38 1 62 +github.com/thebtf/engram/internal/mcp/server.go:1130.38,1132.3 1 1 +github.com/thebtf/engram/internal/mcp/server.go:1134.2,1134.25 1 62 +github.com/thebtf/engram/internal/mcp/server.go:1134.25,1136.3 1 1 +github.com/thebtf/engram/internal/mcp/server.go:1138.2,1138.33 1 62 +github.com/thebtf/engram/internal/mcp/server.go:1138.33,1140.3 1 2 +github.com/thebtf/engram/internal/mcp/server.go:1141.2,1141.69 1 62 +github.com/thebtf/engram/internal/mcp/server.go:1141.69,1143.3 1 2 +github.com/thebtf/engram/internal/mcp/server.go:1144.2,1144.75 1 62 +github.com/thebtf/engram/internal/mcp/server.go:1144.75,1146.3 1 1 +github.com/thebtf/engram/internal/mcp/server.go:1148.2,1148.27 1 62 +github.com/thebtf/engram/internal/mcp/server.go:1148.27,1165.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1168.2,1168.76 1 62 +github.com/thebtf/engram/internal/mcp/server.go:1168.76,1191.3 1 1 +github.com/thebtf/engram/internal/mcp/server.go:1195.2,1195.48 1 62 +github.com/thebtf/engram/internal/mcp/server.go:1195.48,1197.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1201.2,1201.47 1 62 +github.com/thebtf/engram/internal/mcp/server.go:1201.47,1203.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1205.2,1205.38 1 62 +github.com/thebtf/engram/internal/mcp/server.go:1205.38,1207.3 1 1 +github.com/thebtf/engram/internal/mcp/server.go:1212.2,1212.21 1 62 +github.com/thebtf/engram/internal/mcp/server.go:1212.21,1214.3 1 1 +github.com/thebtf/engram/internal/mcp/server.go:1228.2,1228.51 1 62 +github.com/thebtf/engram/internal/mcp/server.go:1228.51,1230.3 1 1 +github.com/thebtf/engram/internal/mcp/server.go:1233.2,1233.56 1 62 +github.com/thebtf/engram/internal/mcp/server.go:1233.56,1235.3 1 1 +github.com/thebtf/engram/internal/mcp/server.go:1238.2,1238.71 1 62 +github.com/thebtf/engram/internal/mcp/server.go:1238.71,1298.3 1 62 +github.com/thebtf/engram/internal/mcp/server.go:1302.2,1302.104 1 62 +github.com/thebtf/engram/internal/mcp/server.go:1302.104,1321.3 1 1 +github.com/thebtf/engram/internal/mcp/server.go:1324.2,1324.72 1 62 +github.com/thebtf/engram/internal/mcp/server.go:1324.72,1333.154 1 1 +github.com/thebtf/engram/internal/mcp/server.go:1333.154,1334.26 1 1 +github.com/thebtf/engram/internal/mcp/server.go:1334.26,1336.8 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1337.7,1337.16 1 1 +github.com/thebtf/engram/internal/mcp/server.go:1338.35,1340.26 2 1 +github.com/thebtf/engram/internal/mcp/server.go:1340.26,1342.8 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1343.7,1343.18 1 1 +github.com/thebtf/engram/internal/mcp/server.go:1371.2,1371.26 1 62 +github.com/thebtf/engram/internal/mcp/server.go:1371.26,1390.3 1 11 +github.com/thebtf/engram/internal/mcp/server.go:1393.2,1393.28 1 62 +github.com/thebtf/engram/internal/mcp/server.go:1393.28,1443.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1446.2,1446.28 1 62 +github.com/thebtf/engram/internal/mcp/server.go:1446.28,1478.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1481.2,1481.37 1 62 +github.com/thebtf/engram/internal/mcp/server.go:1481.37,1561.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1564.2,1568.23 2 62 +github.com/thebtf/engram/internal/mcp/server.go:1568.23,1570.3 1 53 +github.com/thebtf/engram/internal/mcp/server.go:1572.2,1588.57 3 62 +github.com/thebtf/engram/internal/mcp/server.go:1588.57,1591.29 2 53 +github.com/thebtf/engram/internal/mcp/server.go:1591.29,1593.4 1 477 +github.com/thebtf/engram/internal/mcp/server.go:1594.3,1594.27 1 53 +github.com/thebtf/engram/internal/mcp/server.go:1594.27,1595.29 1 669 +github.com/thebtf/engram/internal/mcp/server.go:1595.29,1597.5 1 669 +github.com/thebtf/engram/internal/mcp/server.go:1601.2,1607.3 1 62 +github.com/thebtf/engram/internal/mcp/server.go:1612.79,1614.60 2 13 +github.com/thebtf/engram/internal/mcp/server.go:1614.60,1620.3 1 1 +github.com/thebtf/engram/internal/mcp/server.go:1622.2,1623.16 2 12 +github.com/thebtf/engram/internal/mcp/server.go:1623.16,1631.3 3 7 +github.com/thebtf/engram/internal/mcp/server.go:1633.2,1641.3 1 5 +github.com/thebtf/engram/internal/mcp/server.go:1644.69,1645.34 1 9 +github.com/thebtf/engram/internal/mcp/server.go:1645.34,1647.3 1 1 +github.com/thebtf/engram/internal/mcp/server.go:1648.2,1649.22 2 8 +github.com/thebtf/engram/internal/mcp/server.go:1649.22,1651.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1652.2,1652.37 1 8 +github.com/thebtf/engram/internal/mcp/server.go:1656.99,1658.14 1 114 +github.com/thebtf/engram/internal/mcp/server.go:1659.16,1660.35 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1661.15,1662.46 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1663.18,1664.49 1 1 +github.com/thebtf/engram/internal/mcp/server.go:1665.15,1666.46 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1667.18,1668.49 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1669.14,1670.45 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1671.15,1672.34 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1676.2,1676.14 1 113 +github.com/thebtf/engram/internal/mcp/server.go:1677.35,1678.52 1 2 +github.com/thebtf/engram/internal/mcp/server.go:1679.26,1680.37 1 1 +github.com/thebtf/engram/internal/mcp/server.go:1681.20,1682.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1683.20,1684.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1685.16,1686.35 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1687.29,1688.40 1 3 +github.com/thebtf/engram/internal/mcp/server.go:1689.33,1690.50 1 1 +github.com/thebtf/engram/internal/mcp/server.go:1691.25,1692.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1693.23,1694.41 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1696.26,1697.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1698.24,1699.42 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1700.22,1701.40 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1702.25,1703.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1704.27,1705.45 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1706.25,1707.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1709.30,1710.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1711.28,1712.42 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1713.17,1714.40 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1715.20,1716.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1717.20,1718.45 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1719.20,1720.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1722.20,1723.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1724.18,1725.36 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1726.20,1727.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1728.18,1729.36 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1730.21,1731.39 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1732.21,1733.39 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1734.26,1735.44 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1736.25,1737.34 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1738.26,1739.44 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1740.24,1741.42 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1742.26,1743.44 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1744.27,1745.45 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1746.22,1747.40 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1748.19,1749.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1750.15,1751.34 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1752.16,1753.35 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1755.21,1756.44 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1757.19,1758.42 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1759.20,1760.44 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1761.22,1762.45 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1763.22,1764.40 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1765.23,1766.41 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1767.20,1768.38 1 10 +github.com/thebtf/engram/internal/mcp/server.go:1769.32,1770.49 1 5 +github.com/thebtf/engram/internal/mcp/server.go:1771.19,1772.37 1 21 +github.com/thebtf/engram/internal/mcp/server.go:1773.19,1774.37 1 8 +github.com/thebtf/engram/internal/mcp/server.go:1775.33,1776.50 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1777.35,1778.52 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1779.24,1780.42 1 2 +github.com/thebtf/engram/internal/mcp/server.go:1781.32,1782.49 1 2 +github.com/thebtf/engram/internal/mcp/server.go:1783.28,1784.46 1 6 +github.com/thebtf/engram/internal/mcp/server.go:1785.21,1786.39 1 1 +github.com/thebtf/engram/internal/mcp/server.go:1787.34,1788.51 1 11 +github.com/thebtf/engram/internal/mcp/server.go:1789.25,1790.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1791.29,1792.46 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1793.26,1794.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1795.27,1796.44 1 7 +github.com/thebtf/engram/internal/mcp/server.go:1798.25,1799.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1800.23,1801.41 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1802.27,1803.45 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1804.26,1805.44 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1806.29,1807.47 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1809.29,1810.46 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1811.27,1812.44 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1813.30,1814.47 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1815.38,1816.54 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1817.36,1818.52 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1820.24,1821.42 1 2 +github.com/thebtf/engram/internal/mcp/server.go:1822.27,1823.45 1 1 +github.com/thebtf/engram/internal/mcp/server.go:1824.22,1825.40 1 1 +github.com/thebtf/engram/internal/mcp/server.go:1826.32,1827.49 1 1 +github.com/thebtf/engram/internal/mcp/server.go:1828.32,1829.49 1 6 +github.com/thebtf/engram/internal/mcp/server.go:1830.31,1831.48 1 3 +github.com/thebtf/engram/internal/mcp/server.go:1832.35,1833.52 1 3 +github.com/thebtf/engram/internal/mcp/server.go:1834.36,1835.53 1 2 +github.com/thebtf/engram/internal/mcp/server.go:1836.36,1837.53 1 2 +github.com/thebtf/engram/internal/mcp/server.go:1838.38,1839.54 1 1 +github.com/thebtf/engram/internal/mcp/server.go:1840.34,1841.51 1 2 +github.com/thebtf/engram/internal/mcp/server.go:1843.22,1844.40 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1845.21,1846.39 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1847.24,1848.42 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1850.25,1851.43 1 1 +github.com/thebtf/engram/internal/mcp/server.go:1852.25,1853.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1859.2,1859.14 1 8 +github.com/thebtf/engram/internal/mcp/server.go:1860.22,1863.131 1 1 +github.com/thebtf/engram/internal/mcp/server.go:1866.51,1867.123 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1868.10,1869.50 1 7 +github.com/thebtf/engram/internal/mcp/server.go:1874.47,1876.16 2 15 +github.com/thebtf/engram/internal/mcp/server.go:1876.16,1879.3 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1880.2,1880.35 1 15 +github.com/thebtf/engram/internal/mcp/server.go:1884.72,1890.2 1 3 +github.com/thebtf/engram/internal/mcp/server.go:1896.105,1898.16 2 5 +github.com/thebtf/engram/internal/mcp/server.go:1898.16,1900.3 1 2 +github.com/thebtf/engram/internal/mcp/server.go:1902.2,1903.17 2 3 +github.com/thebtf/engram/internal/mcp/server.go:1903.17,1905.3 1 2 +github.com/thebtf/engram/internal/mcp/server.go:1907.2,1908.17 2 1 +github.com/thebtf/engram/internal/mcp/server.go:1908.17,1910.3 1 1 +github.com/thebtf/engram/internal/mcp/server.go:1912.2,1918.16 2 1 +github.com/thebtf/engram/internal/mcp/server.go:1918.16,1920.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1921.2,1921.25 1 1 +github.com/thebtf/engram/internal/mcp/server.go:1927.76,1933.15 3 3 +github.com/thebtf/engram/internal/mcp/server.go:1933.15,1936.17 3 3 +github.com/thebtf/engram/internal/mcp/server.go:1936.17,1938.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1939.3,1939.26 1 3 +github.com/thebtf/engram/internal/mcp/server.go:1943.2,1950.36 3 0 +github.com/thebtf/engram/internal/mcp/server.go:1950.36,1952.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1952.8,1955.29 3 0 +github.com/thebtf/engram/internal/mcp/server.go:1955.29,1958.4 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1959.3,1962.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1966.2,1966.20 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1966.20,1977.20 6 0 +github.com/thebtf/engram/internal/mcp/server.go:1977.20,1979.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1980.3,1980.20 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1980.20,1982.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1985.3,1985.37 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1985.37,1987.30 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1987.30,1988.16 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1988.16,1990.6 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1990.11,1992.6 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1994.4,1995.56 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1995.56,1997.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1998.4,2003.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2008.2,2008.29 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2008.29,2009.63 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2009.63,2011.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2011.9,2013.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2021.2,2021.29 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2021.29,2029.38 3 0 +github.com/thebtf/engram/internal/mcp/server.go:2029.38,2031.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2031.9,2033.31 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2033.31,2035.30 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2035.30,2037.6 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2039.4,2042.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2046.2,2047.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2047.16,2049.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2050.2,2050.25 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2055.57,2056.33 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2056.33,2058.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2059.2,2060.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2060.16,2062.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2063.2,2064.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2064.16,2066.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2067.2,2067.23 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2071.79,2105.15 6 4 +github.com/thebtf/engram/internal/mcp/server.go:2105.15,2107.17 2 4 +github.com/thebtf/engram/internal/mcp/server.go:2107.17,2111.4 3 0 +github.com/thebtf/engram/internal/mcp/server.go:2111.9,2112.17 1 4 +github.com/thebtf/engram/internal/mcp/server.go:2112.17,2114.5 1 4 +github.com/thebtf/engram/internal/mcp/server.go:2115.4,2117.26 3 4 +github.com/thebtf/engram/internal/mcp/server.go:2117.26,2119.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2119.10,2121.29 2 4 +github.com/thebtf/engram/internal/mcp/server.go:2121.29,2123.6 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2125.4,2129.25 5 4 +github.com/thebtf/engram/internal/mcp/server.go:2130.19,2130.19 0 4 +github.com/thebtf/engram/internal/mcp/server.go:2132.20,2134.106 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2135.12,2137.103 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2140.8,2143.3 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2144.2,2150.49 3 4 +github.com/thebtf/engram/internal/mcp/server.go:2150.49,2152.3 1 1 +github.com/thebtf/engram/internal/mcp/server.go:2152.8,2154.3 1 3 +github.com/thebtf/engram/internal/mcp/server.go:2155.2,2168.27 4 4 +github.com/thebtf/engram/internal/mcp/server.go:2168.27,2170.17 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2170.17,2173.4 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2173.9,2175.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2177.2,2182.40 4 4 +github.com/thebtf/engram/internal/mcp/server.go:2182.40,2183.21 1 12 +github.com/thebtf/engram/internal/mcp/server.go:2184.20,2185.20 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2186.19,2187.19 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2191.2,2191.24 1 4 +github.com/thebtf/engram/internal/mcp/server.go:2191.24,2193.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2193.8,2193.30 1 4 +github.com/thebtf/engram/internal/mcp/server.go:2193.30,2195.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2198.2,2198.28 1 4 +github.com/thebtf/engram/internal/mcp/server.go:2198.28,2200.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2203.2,2203.29 1 4 +github.com/thebtf/engram/internal/mcp/server.go:2203.29,2205.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2207.2,2208.16 2 4 +github.com/thebtf/engram/internal/mcp/server.go:2208.16,2210.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2211.2,2211.28 1 4 +github.com/thebtf/engram/internal/mcp/server.go:2216.103,2218.16 2 2 +github.com/thebtf/engram/internal/mcp/server.go:2218.16,2220.3 1 2 +github.com/thebtf/engram/internal/mcp/server.go:2222.2,2223.15 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2223.15,2225.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2227.2,2239.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2239.16,2241.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2242.2,2242.25 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2246.93,2248.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2251.91,2253.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:18.28,29.20 4 64 +github.com/thebtf/engram/internal/mcp/tools_admin.go:29.20,33.3 2 2 +github.com/thebtf/engram/internal/mcp/tools_admin.go:35.2,44.3 1 64 +github.com/thebtf/engram/internal/mcp/tools_admin.go:68.36,69.49 1 65 +github.com/thebtf/engram/internal/mcp/tools_admin.go:69.49,74.3 4 2 +github.com/thebtf/engram/internal/mcp/tools_admin.go:75.2,75.25 1 63 +github.com/thebtf/engram/internal/mcp/tools_admin.go:80.26,82.2 1 73 +github.com/thebtf/engram/internal/mcp/tools_admin.go:84.89,86.16 2 9 +github.com/thebtf/engram/internal/mcp/tools_admin.go:86.16,88.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:89.2,90.18 2 9 +github.com/thebtf/engram/internal/mcp/tools_admin.go:90.18,92.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:94.2,94.16 1 9 +github.com/thebtf/engram/internal/mcp/tools_admin.go:95.15,96.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:97.26,98.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:99.25,100.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:101.23,105.22 1 9 +github.com/thebtf/engram/internal/mcp/tools_admin.go:105.22,107.4 1 1 +github.com/thebtf/engram/internal/mcp/tools_admin.go:108.3,108.38 1 8 +github.com/thebtf/engram/internal/mcp/tools_admin.go:109.10,110.114 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:120.92,126.26 2 8 +github.com/thebtf/engram/internal/mcp/tools_admin.go:126.26,128.3 1 2 +github.com/thebtf/engram/internal/mcp/tools_admin.go:130.2,131.19 2 6 +github.com/thebtf/engram/internal/mcp/tools_admin.go:131.19,133.3 1 2 +github.com/thebtf/engram/internal/mcp/tools_admin.go:134.2,135.19 2 4 +github.com/thebtf/engram/internal/mcp/tools_admin.go:135.19,137.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_admin.go:138.2,138.24 1 3 +github.com/thebtf/engram/internal/mcp/tools_admin.go:138.24,140.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_admin.go:142.2,142.25 1 2 +github.com/thebtf/engram/internal/mcp/tools_admin.go:142.25,144.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_admin.go:146.2,147.16 2 1 +github.com/thebtf/engram/internal/mcp/tools_admin.go:147.16,149.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:151.2,151.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:27.40,30.2 2 69 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:32.30,46.2 1 1 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:48.99,49.34 1 7 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:49.34,51.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:52.2,52.69 1 7 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:52.69,54.3 1 2 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:56.2,57.16 2 5 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:57.16,59.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:60.2,61.21 2 5 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:61.21,63.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:64.2,67.26 3 5 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:67.26,69.3 1 2 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:70.2,71.25 2 3 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:71.25,73.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:75.2,77.44 3 2 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:77.44,79.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:80.2,80.33 1 2 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:80.33,82.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:83.2,83.81 1 2 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:86.52,87.16 1 5 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:87.16,89.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:90.2,90.15 1 5 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:90.15,92.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:93.2,93.14 1 4 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:96.73,97.21 1 2 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:97.21,99.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:100.2,101.29 2 2 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:101.29,110.3 1 4 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:111.2,111.12 1 2 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:114.34,116.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:31.98,32.52 1 2 +github.com/thebtf/engram/internal/mcp/tools_brief.go:32.52,34.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:35.2,35.26 1 2 +github.com/thebtf/engram/internal/mcp/tools_brief.go:35.26,37.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:39.2,40.49 2 2 +github.com/thebtf/engram/internal/mcp/tools_brief.go:40.49,42.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:43.2,43.21 1 2 +github.com/thebtf/engram/internal/mcp/tools_brief.go:43.21,45.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:46.2,46.21 1 2 +github.com/thebtf/engram/internal/mcp/tools_brief.go:46.21,48.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:49.2,49.18 1 2 +github.com/thebtf/engram/internal/mcp/tools_brief.go:49.18,51.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_brief.go:52.2,52.18 1 2 +github.com/thebtf/engram/internal/mcp/tools_brief.go:52.18,54.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:56.2,56.38 1 2 +github.com/thebtf/engram/internal/mcp/tools_brief.go:56.38,58.3 1 2 +github.com/thebtf/engram/internal/mcp/tools_brief.go:60.2,61.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:61.16,63.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:68.2,70.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:70.26,77.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:79.2,81.36 3 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:81.36,84.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:86.2,89.28 3 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:89.28,90.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:90.39,91.9 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:93.3,97.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:100.2,104.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:107.60,113.2 1 2 +github.com/thebtf/engram/internal/mcp/tools_brief.go:115.101,116.38 1 2 +github.com/thebtf/engram/internal/mcp/tools_brief.go:116.38,118.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_brief.go:120.2,122.21 3 1 +github.com/thebtf/engram/internal/mcp/tools_brief.go:122.21,123.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:123.26,125.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:126.3,126.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:126.23,128.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:129.8,130.26 1 1 +github.com/thebtf/engram/internal/mcp/tools_brief.go:130.26,132.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:133.3,133.68 1 1 +github.com/thebtf/engram/internal/mcp/tools_brief.go:133.68,135.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:137.2,140.20 3 1 +github.com/thebtf/engram/internal/mcp/tools_brief.go:141.17,142.18 1 1 +github.com/thebtf/engram/internal/mcp/tools_brief.go:143.67,143.67 0 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:144.10,145.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:148.2,162.16 3 1 +github.com/thebtf/engram/internal/mcp/tools_brief.go:162.16,164.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:165.2,165.19 1 1 +github.com/thebtf/engram/internal/mcp/tools_brief.go:165.19,173.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:174.2,174.30 1 1 +github.com/thebtf/engram/internal/mcp/tools_brief.go:174.30,176.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:177.2,177.31 1 1 +github.com/thebtf/engram/internal/mcp/tools_brief.go:177.31,179.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:181.2,182.36 2 1 +github.com/thebtf/engram/internal/mcp/tools_brief.go:182.36,196.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_brief.go:198.2,199.19 2 1 +github.com/thebtf/engram/internal/mcp/tools_brief.go:199.19,201.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:202.2,203.18 2 1 +github.com/thebtf/engram/internal/mcp/tools_brief.go:203.18,205.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:206.2,207.21 2 1 +github.com/thebtf/engram/internal/mcp/tools_brief.go:207.21,209.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:210.2,211.25 2 1 +github.com/thebtf/engram/internal/mcp/tools_brief.go:211.25,213.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:214.2,225.21 3 1 +github.com/thebtf/engram/internal/mcp/tools_brief.go:225.21,227.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_brief.go:228.2,228.25 1 1 +github.com/thebtf/engram/internal/mcp/tools_brief.go:228.25,230.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_brief.go:231.2,231.18 1 1 +github.com/thebtf/engram/internal/mcp/tools_brief.go:231.18,233.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_brief.go:235.2,244.21 2 1 +github.com/thebtf/engram/internal/mcp/tools_brief.go:244.21,246.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_brief.go:247.2,247.25 1 1 +github.com/thebtf/engram/internal/mcp/tools_brief.go:247.25,249.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_brief.go:250.2,250.18 1 1 +github.com/thebtf/engram/internal/mcp/tools_brief.go:250.18,252.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_brief.go:253.2,253.24 1 1 +github.com/thebtf/engram/internal/mcp/tools_brief.go:253.24,255.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:256.2,256.30 1 1 +github.com/thebtf/engram/internal/mcp/tools_brief.go:259.50,261.22 2 1 +github.com/thebtf/engram/internal/mcp/tools_brief.go:261.22,263.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:264.2,264.16 1 1 +github.com/thebtf/engram/internal/mcp/tools_brief.go:270.90,272.42 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:272.42,276.3 3 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:277.2,281.27 3 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:281.27,282.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:282.45,284.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:286.2,286.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:25.28,88.2 1 1 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:95.95,96.22 1 2 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:96.22,98.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:99.2,100.32 2 2 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:100.32,102.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:104.2,105.16 2 1 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:105.16,107.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:109.2,114.35 3 1 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:114.35,121.3 2 1 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:123.2,123.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:123.25,125.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:127.2,134.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:134.16,136.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:138.2,146.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:154.94,155.22 1 1 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:155.22,157.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:158.2,159.32 2 1 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:159.32,161.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:163.2,164.16 2 1 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:164.16,166.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:168.2,172.35 3 1 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:172.35,179.3 2 1 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:181.2,181.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:181.25,183.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:185.2,192.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:192.16,194.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:196.2,203.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:211.97,212.22 1 1 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:212.22,214.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:215.2,216.32 2 1 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:216.32,218.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:220.2,221.16 2 1 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:221.16,223.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:225.2,229.35 3 1 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:229.35,236.3 2 1 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:238.2,238.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:238.25,240.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:242.2,249.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:249.16,251.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:253.2,260.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:31.80,32.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:32.14,34.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:35.2,48.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:51.136,53.51 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:53.51,55.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:56.2,56.83 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:59.94,60.21 1 3 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:60.21,62.3 1 2 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:63.2,63.12 1 1 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:68.30,162.2 2 1 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:165.98,166.49 1 2 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:166.49,168.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:169.2,170.16 2 1 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:170.16,172.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:173.2,174.19 2 1 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:174.19,176.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:177.2,179.17 3 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:179.17,181.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:183.2,184.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:184.16,186.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:188.2,189.31 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:189.31,190.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:190.15,191.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:193.3,193.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:196.2,201.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:201.16,203.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:204.2,204.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:208.96,209.49 1 1 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:209.49,211.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:212.2,213.16 2 1 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:213.16,215.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:216.2,217.13 2 1 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:217.13,219.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:221.2,222.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:222.16,224.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:225.2,225.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:225.22,227.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:229.2,230.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:230.16,232.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:233.2,233.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:239.100,240.22 1 1 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:240.22,242.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:243.2,244.16 2 1 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:244.16,246.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:247.2,248.13 2 1 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:248.13,250.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:255.2,256.12 2 1 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:256.12,263.30 2 1 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:263.30,264.77 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:264.77,269.5 4 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:271.3,272.21 2 1 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:272.21,274.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:275.3,275.24 1 1 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:279.2,279.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:279.29,281.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:284.2,285.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:285.16,287.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:288.2,288.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:288.22,290.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:291.2,291.55 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:291.55,293.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:294.2,294.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:294.74,296.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:297.2,298.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:298.16,300.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:306.2,307.41 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:307.41,309.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:310.2,324.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:324.16,325.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:325.50,327.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:328.3,328.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:330.2,330.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:330.38,332.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:334.2,341.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:341.16,343.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:344.2,344.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:348.99,349.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:349.49,351.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:352.2,353.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:353.16,355.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:356.2,357.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:357.13,359.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:360.2,362.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:362.16,364.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:365.2,365.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:365.22,367.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:368.2,368.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:368.74,370.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:371.2,372.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:372.16,374.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:375.2,375.85 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:375.85,377.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:379.2,380.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:380.16,381.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:381.50,383.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:384.3,384.60 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:386.2,386.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:386.20,388.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:390.2,395.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:395.16,397.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:398.2,398.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:402.102,403.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:403.49,405.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:406.2,407.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:407.16,409.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:410.2,411.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:411.13,413.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:414.2,415.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:415.16,417.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:418.2,418.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:418.22,420.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:421.2,421.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:421.74,423.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:424.2,425.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:425.16,427.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:428.2,428.88 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:428.88,430.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:432.2,433.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:433.16,434.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:434.50,436.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:437.3,437.63 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:439.2,439.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:439.20,441.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:443.2,448.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:448.16,450.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:451.2,451.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:34.30,36.2 1 63 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:42.61,44.2 1 1 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:48.32,75.2 1 1 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:79.32,94.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:100.98,101.25 1 1 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:101.25,103.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:104.2,104.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:104.29,106.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:108.2,113.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:113.17,114.55 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:114.55,116.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:118.2,118.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:118.24,120.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:121.2,121.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:121.23,123.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:124.2,124.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:124.23,126.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:134.2,135.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:135.21,137.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:142.2,147.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:147.16,149.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:154.2,165.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:165.25,175.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:177.2,183.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:183.16,185.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:186.2,186.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:194.98,195.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:195.25,197.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:198.2,198.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:198.29,200.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:202.2,205.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:205.17,207.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:208.2,209.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:209.21,211.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:213.2,214.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:214.16,216.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:217.2,218.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:218.16,220.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:221.2,222.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:222.16,224.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:226.2,231.11 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:231.11,233.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:235.2,236.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:236.16,238.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:239.2,239.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:21.52,22.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:22.24,25.28 3 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:25.28,27.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:29.2,29.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:35.72,37.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:37.15,39.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:41.2,42.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:42.16,44.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:45.2,45.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:49.99,51.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:51.16,53.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:55.2,56.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:56.16,58.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:60.2,72.23 7 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:72.23,74.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:75.2,75.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:75.24,77.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:78.2,78.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:78.24,80.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:81.2,81.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:82.27,82.27 0 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:84.10,85.93 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:87.2,87.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:87.30,89.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:90.2,90.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:90.26,92.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:94.2,95.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:95.16,97.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:99.2,100.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:100.16,102.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:104.2,112.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:112.16,114.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:116.2,123.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:123.16,125.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:126.2,126.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:130.97,132.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:132.16,134.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:136.2,137.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:137.16,139.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:141.2,147.23 4 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:147.23,149.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:150.2,150.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:150.26,152.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:154.2,155.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:155.16,157.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:159.2,160.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:160.16,161.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:161.47,163.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:164.3,164.51 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:167.2,167.97 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:167.97,172.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:174.2,175.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:175.16,177.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:179.2,185.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:185.16,187.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:188.2,188.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:192.99,194.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:194.16,196.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:198.2,199.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:199.16,201.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:203.2,207.26 3 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:207.26,209.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:211.2,212.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:212.16,214.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:216.2,223.26 3 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:223.26,229.28 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:229.28,231.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:232.3,232.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:235.2,236.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:236.16,238.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:239.2,239.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:243.100,245.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:245.16,247.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:249.2,250.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:250.16,252.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:254.2,262.23 5 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:262.23,264.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:265.2,265.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:265.24,267.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:268.2,268.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:269.27,269.27 0 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:271.10,272.93 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:274.2,274.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:274.30,276.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:277.2,277.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:277.26,279.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:281.2,281.71 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:281.71,282.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:282.47,284.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:285.3,285.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:288.2,293.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:293.16,295.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:296.2,296.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:302.92,309.19 5 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:309.19,310.53 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:310.53,313.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:316.2,317.51 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:317.51,318.66 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:318.66,320.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:323.2,331.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:331.16,333.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:334.2,334.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:338.46,342.32 4 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:342.32,343.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:343.20,346.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:348.2,350.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:350.26,352.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:352.27,353.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:353.13,355.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:356.4,356.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:358.3,358.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:360.2,360.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:16.45,18.2 1 9 +github.com/thebtf/engram/internal/mcp/tools_directives.go:20.35,36.2 1 1 +github.com/thebtf/engram/internal/mcp/tools_directives.go:38.84,39.40 1 6 +github.com/thebtf/engram/internal/mcp/tools_directives.go:39.40,41.3 1 2 +github.com/thebtf/engram/internal/mcp/tools_directives.go:42.2,42.50 1 4 +github.com/thebtf/engram/internal/mcp/tools_directives.go:42.50,44.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_directives.go:45.2,45.39 1 3 +github.com/thebtf/engram/internal/mcp/tools_directives.go:48.101,50.16 2 6 +github.com/thebtf/engram/internal/mcp/tools_directives.go:50.16,52.3 1 3 +github.com/thebtf/engram/internal/mcp/tools_directives.go:53.2,54.16 2 3 +github.com/thebtf/engram/internal/mcp/tools_directives.go:54.16,56.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:57.2,58.19 2 3 +github.com/thebtf/engram/internal/mcp/tools_directives.go:58.19,60.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_directives.go:61.2,62.21 2 2 +github.com/thebtf/engram/internal/mcp/tools_directives.go:62.21,64.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_directives.go:65.2,66.16 2 1 +github.com/thebtf/engram/internal/mcp/tools_directives.go:66.16,68.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:69.2,69.28 1 1 +github.com/thebtf/engram/internal/mcp/tools_directives.go:72.102,74.16 2 3 +github.com/thebtf/engram/internal/mcp/tools_directives.go:74.16,76.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:77.2,82.8 1 3 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:10.100,12.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:12.16,14.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:16.2,17.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:17.18,19.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:21.2,21.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:22.16,23.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:24.14,25.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:26.14,27.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:28.17,29.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:30.17,31.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:32.21,33.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:34.19,35.42 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:36.17,37.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:38.16,39.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:40.16,41.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:42.21,43.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:44.10,45.167 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:15.77,16.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:16.33,18.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:20.2,21.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:21.27,23.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:25.2,26.28 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:26.28,29.17 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:29.17,31.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:34.2,41.32 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:41.32,46.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:46.20,48.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:49.3,49.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:52.2,53.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:53.16,55.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:57.2,57.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:61.97,62.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:62.28,64.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:66.2,67.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:67.16,69.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:71.2,75.29 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:75.29,77.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:79.2,80.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:80.16,82.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:84.2,84.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:84.20,86.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:88.2,97.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:97.25,103.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:103.20,105.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:106.3,106.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:106.19,108.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:109.3,109.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:112.2,113.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:113.16,115.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:117.2,117.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:121.95,122.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:122.28,124.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:126.2,127.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:127.16,129.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:131.2,137.50 4 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:137.50,139.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:141.2,142.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:142.16,144.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:145.2,145.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:145.16,147.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:149.2,149.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:149.21,151.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:153.2,154.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:154.16,156.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:157.2,157.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:157.20,159.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:161.2,161.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:165.98,166.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:166.28,168.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:170.2,171.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:171.16,173.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:175.2,181.50 4 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:181.50,183.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:185.2,185.96 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:185.96,187.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:189.2,189.88 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:197.98,198.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:198.28,200.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:202.2,203.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:203.16,205.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:207.2,217.74 6 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:217.74,219.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:222.2,223.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:223.16,225.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:227.2,229.156 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:235.98,237.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:237.16,239.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:241.2,247.24 4 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:247.24,249.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:252.2,253.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:253.29,255.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:256.2,256.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:15.93,16.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:16.37,18.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:20.2,21.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:21.16,23.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:25.2,32.16 7 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:32.16,34.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:35.2,35.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:35.19,37.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:38.2,38.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:38.19,40.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:42.2,43.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:43.16,45.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:47.2,54.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:54.16,56.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:57.2,57.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:61.91,62.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:62.37,64.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:66.2,67.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:67.16,69.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:71.2,73.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:73.16,75.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:76.2,76.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:76.19,78.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:80.2,81.43 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:81.43,83.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:83.19,85.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:86.3,86.79 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:87.8,89.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:90.2,90.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:90.16,91.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:91.45,93.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:94.3,94.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:97.2,110.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:110.16,112.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:113.2,113.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:117.93,119.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:122.91,123.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:123.37,125.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:127.2,128.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:128.16,130.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:132.2,133.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:133.19,135.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:136.2,141.16 5 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:141.16,143.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:145.2,155.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:155.25,165.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:167.2,168.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:168.16,170.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:171.2,171.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:175.94,176.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:176.37,178.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:180.2,181.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:181.16,183.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:185.2,187.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:187.16,189.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:190.2,190.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:190.19,192.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:193.2,196.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:196.16,198.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:200.2,208.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:208.25,216.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:218.2,225.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:225.16,227.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:228.2,228.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:232.94,233.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:233.37,235.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:237.2,238.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:238.16,240.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:242.2,243.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:243.21,245.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:246.2,248.19 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:248.19,250.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:252.2,253.46 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:253.46,255.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:255.13,257.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:259.2,259.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:259.44,261.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:261.13,263.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:266.2,267.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:267.16,269.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:271.2,278.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:278.16,280.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:281.2,281.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:19.69,21.2 1 3 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:23.38,38.2 1 2 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:40.51,63.2 1 2 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:65.53,80.2 1 2 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:82.46,85.32 3 8 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:85.32,87.3 1 48 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:88.2,88.12 1 8 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:91.105,93.16 2 2 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:93.16,95.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:96.2,97.16 2 2 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:97.16,99.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:100.2,100.70 1 1 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:103.107,105.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:105.16,107.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:108.2,109.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:109.16,111.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:112.2,112.72 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:115.101,117.16 2 2 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:117.16,119.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:120.2,121.17 2 2 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:121.17,123.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:124.2,139.21 2 2 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:142.109,144.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:144.16,146.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:147.2,154.8 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:157.100,159.28 2 2 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:159.28,161.18 2 3 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:161.18,163.4 1 2 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:164.3,164.62 1 1 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:166.2,167.72 2 2 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:167.72,169.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:170.2,170.53 1 2 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:170.53,172.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:173.2,174.26 2 2 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:174.26,176.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:177.2,177.12 1 2 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:180.73,182.16 2 1 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:182.16,184.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:185.2,185.25 1 1 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:12.104,14.16 2 1 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:14.16,16.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:18.2,19.18 2 1 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:19.18,21.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:23.2,23.16 1 1 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:24.14,25.39 1 1 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:26.18,27.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:28.17,29.46 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:30.10,31.96 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:36.101,37.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:37.27,39.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:41.2,42.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:42.16,44.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:46.2,47.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:47.21,49.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:50.2,51.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:51.19,53.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:54.2,54.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:55.52,55.52 0 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:56.10,57.101 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:59.2,61.93 2 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:61.93,64.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:66.2,70.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:27.31,94.2 1 1 +github.com/thebtf/engram/internal/mcp/tools_governance.go:98.97,100.26 2 2 +github.com/thebtf/engram/internal/mcp/tools_governance.go:100.26,102.3 1 2 +github.com/thebtf/engram/internal/mcp/tools_governance.go:103.2,103.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:103.28,105.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:107.2,108.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:108.16,110.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:112.2,115.15 4 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:115.15,117.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:118.2,118.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:118.17,120.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:122.2,123.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:123.16,125.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:127.2,140.29 3 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:140.29,151.31 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:151.31,154.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:155.3,155.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:158.2,162.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:167.100,169.26 2 1 +github.com/thebtf/engram/internal/mcp/tools_governance.go:169.26,171.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_governance.go:172.2,172.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:172.28,174.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:175.2,175.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:175.26,177.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:179.2,180.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:180.16,182.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:184.2,185.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:185.22,187.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:189.2,190.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:190.20,191.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:191.54,199.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:200.3,200.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:200.61,202.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:203.3,203.58 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:206.2,211.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:215.95,217.32 2 1 +github.com/thebtf/engram/internal/mcp/tools_governance.go:217.32,219.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_governance.go:220.2,220.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:220.28,222.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:224.2,225.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:225.16,227.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:229.2,230.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:230.22,232.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:234.2,234.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:234.61,236.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:239.2,239.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:239.25,246.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:248.2,252.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:258.104,260.26 2 2 +github.com/thebtf/engram/internal/mcp/tools_governance.go:260.26,262.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_governance.go:267.2,271.20 3 1 +github.com/thebtf/engram/internal/mcp/tools_governance.go:271.20,275.3 3 1 +github.com/thebtf/engram/internal/mcp/tools_governance.go:275.8,279.3 3 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:280.2,280.25 1 1 +github.com/thebtf/engram/internal/mcp/tools_governance.go:284.60,285.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:285.30,287.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:288.2,288.42 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:288.42,290.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:291.2,291.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:64.89,65.25 1 1 +github.com/thebtf/engram/internal/mcp/tools_graph.go:65.25,67.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_graph.go:69.2,70.49 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:70.49,72.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:74.2,74.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:75.18,76.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:77.21,78.35 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:79.19,80.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:81.18,82.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:83.19,84.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:85.18,86.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:87.18,91.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:91.23,93.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:94.3,94.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:95.10,96.62 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:100.81,103.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:103.19,105.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:106.2,107.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:107.19,109.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:112.2,112.46 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:112.46,114.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:115.2,115.46 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:115.46,117.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:122.2,122.66 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:122.66,124.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:127.2,127.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:127.25,128.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:128.22,130.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:131.8,132.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:132.26,134.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:138.2,138.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:138.25,139.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:139.22,141.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:142.8,143.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:143.26,145.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:148.2,148.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:148.22,150.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:151.2,151.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:151.38,153.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:154.2,154.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:154.19,156.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:159.2,161.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:161.25,164.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:165.2,165.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:165.25,168.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:169.2,171.23 3 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:171.23,174.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:175.2,175.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:175.23,178.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:180.2,193.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:193.16,195.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:198.2,199.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:199.29,201.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:202.2,202.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:202.29,204.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:205.2,213.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:216.121,217.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:217.28,218.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:218.26,220.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:221.3,222.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:222.17,223.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:223.49,225.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:226.4,226.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:228.3,228.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:230.2,230.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:230.26,232.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:233.2,234.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:234.16,235.48 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:235.48,237.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:238.3,238.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:240.2,240.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:243.101,248.36 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:248.36,250.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:250.8,252.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:253.2,253.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:253.16,255.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:256.2,256.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:256.32,257.128 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:257.128,262.72 5 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:262.72,264.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:267.2,267.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:276.81,277.25 1 4 +github.com/thebtf/engram/internal/mcp/tools_graph.go:277.25,279.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:280.2,280.22 1 4 +github.com/thebtf/engram/internal/mcp/tools_graph.go:280.22,282.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:283.2,283.39 1 4 +github.com/thebtf/engram/internal/mcp/tools_graph.go:283.39,285.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_graph.go:286.2,286.25 1 3 +github.com/thebtf/engram/internal/mcp/tools_graph.go:286.25,288.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_graph.go:289.2,289.21 1 2 +github.com/thebtf/engram/internal/mcp/tools_graph.go:289.21,291.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_graph.go:292.2,293.14 2 1 +github.com/thebtf/engram/internal/mcp/tools_graph.go:293.14,295.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_graph.go:296.2,305.16 5 1 +github.com/thebtf/engram/internal/mcp/tools_graph.go:305.16,307.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:308.2,314.4 1 1 +github.com/thebtf/engram/internal/mcp/tools_graph.go:317.84,318.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:318.19,320.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:321.2,323.63 3 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:323.63,325.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:326.2,329.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:332.82,333.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:333.38,335.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:336.2,337.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:338.18,339.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:340.18,341.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:345.2,345.59 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:345.59,347.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:349.2,351.21 3 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:351.21,353.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:353.8,356.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:357.2,357.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:357.16,359.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:366.2,367.41 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:367.41,369.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:371.2,378.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:397.115,398.15 1 3 +github.com/thebtf/engram/internal/mcp/tools_graph.go:398.15,400.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:403.2,404.26 2 3 +github.com/thebtf/engram/internal/mcp/tools_graph.go:404.26,405.28 1 6 +github.com/thebtf/engram/internal/mcp/tools_graph.go:405.28,407.4 1 6 +github.com/thebtf/engram/internal/mcp/tools_graph.go:408.3,408.28 1 6 +github.com/thebtf/engram/internal/mcp/tools_graph.go:408.28,410.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:412.2,412.23 1 3 +github.com/thebtf/engram/internal/mcp/tools_graph.go:412.23,415.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:420.2,426.12 4 3 +github.com/thebtf/engram/internal/mcp/tools_graph.go:426.12,427.27 1 3 +github.com/thebtf/engram/internal/mcp/tools_graph.go:427.27,429.18 2 6 +github.com/thebtf/engram/internal/mcp/tools_graph.go:429.18,431.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:433.4,433.33 1 6 +github.com/thebtf/engram/internal/mcp/tools_graph.go:433.33,435.5 1 2 +github.com/thebtf/engram/internal/mcp/tools_graph.go:440.2,441.26 2 3 +github.com/thebtf/engram/internal/mcp/tools_graph.go:441.26,442.28 1 6 +github.com/thebtf/engram/internal/mcp/tools_graph.go:442.28,443.49 1 6 +github.com/thebtf/engram/internal/mcp/tools_graph.go:443.49,445.13 2 2 +github.com/thebtf/engram/internal/mcp/tools_graph.go:448.3,448.28 1 4 +github.com/thebtf/engram/internal/mcp/tools_graph.go:448.28,449.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:449.49,451.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:454.2,454.12 1 3 +github.com/thebtf/engram/internal/mcp/tools_graph.go:457.82,458.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:458.21,460.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:461.2,462.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:462.16,464.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:465.2,465.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:465.36,467.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:468.2,469.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:469.16,471.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:472.2,477.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:480.82,481.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:481.40,483.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:484.2,485.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:485.19,487.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:488.2,489.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:489.16,491.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:492.2,499.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:502.82,503.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:503.21,505.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:506.2,507.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:507.16,509.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:510.2,514.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:23.179,24.22 1 4 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:24.22,26.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:28.2,32.22 4 4 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:32.22,34.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:35.2,36.22 2 4 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:36.22,38.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:40.2,41.26 2 4 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:41.26,43.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:44.2,44.26 1 4 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:44.26,46.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:47.2,47.30 1 4 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:47.30,49.3 1 3 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:50.2,50.30 1 4 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:50.30,52.3 1 3 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:54.2,55.16 2 4 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:55.16,57.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:58.2,58.13 1 4 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:58.13,60.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:61.2,62.16 2 4 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:62.16,64.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:65.2,65.13 1 4 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:65.13,67.3 1 2 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:69.2,70.16 2 2 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:70.16,72.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:73.2,73.15 1 2 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:73.15,75.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:77.2,77.36 1 1 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:80.172,81.28 1 8 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:81.28,82.23 1 6 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:82.23,84.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:85.3,85.18 1 6 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:85.18,87.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:88.3,89.17 2 6 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:89.17,90.49 1 1 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:90.49,92.5 1 1 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:93.4,93.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:95.3,95.19 1 5 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:98.2,98.24 1 2 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:98.24,100.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:101.2,101.19 1 2 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:101.19,103.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:104.2,105.16 2 2 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:105.16,106.48 1 1 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:106.48,108.4 1 1 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:109.3,109.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:111.2,111.18 1 1 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:114.119,116.22 2 2 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:116.22,118.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:119.2,120.22 2 2 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:120.22,122.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:124.2,126.26 3 2 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:126.26,127.36 1 2 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:127.36,129.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:130.3,130.105 1 2 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:131.8,132.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:132.32,134.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:135.3,135.103 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:137.2,137.16 1 2 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:137.16,139.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:141.2,141.32 1 2 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:141.32,143.27 2 1 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:143.27,145.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:146.3,147.27 2 1 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:147.27,149.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:150.3,150.106 1 1 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:150.106,151.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:153.3,153.27 1 1 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:153.27,154.114 1 1 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:154.114,155.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:157.9,157.104 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:157.104,158.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:160.3,160.27 1 1 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:160.27,161.114 1 1 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:161.114,162.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:164.9,164.104 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:164.104,165.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:167.3,167.19 1 1 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:169.2,169.19 1 1 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:25.90,26.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:26.26,28.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:30.2,31.49 2 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:31.49,33.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:35.2,35.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:36.16,37.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:38.10,39.63 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:43.84,44.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:44.21,46.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:47.2,47.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:47.25,49.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:50.2,50.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:50.21,52.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:53.2,53.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:53.21,55.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:57.2,58.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:59.18,60.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:61.15,62.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:63.24,64.42 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:65.10,66.108 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:69.2,70.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:70.22,72.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:73.2,74.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:74.29,76.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:78.2,78.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:78.14,85.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:87.2,89.37 3 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:89.37,92.21 3 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:92.21,94.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:97.2,100.31 4 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:100.31,102.38 2 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:102.38,104.37 2 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:104.37,106.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:109.3,122.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:122.26,124.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:125.3,125.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:125.19,127.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:131.3,133.39 3 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:133.39,135.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:135.9,137.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:138.3,138.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:138.17,140.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:142.3,142.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:142.34,144.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:145.3,145.11 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:148.2,155.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:20.99,22.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:22.16,24.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:26.2,31.44 3 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:31.44,32.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:32.33,33.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:33.43,38.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:43.2,43.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:43.49,45.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:46.2,46.48 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:46.48,48.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:50.2,52.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:52.27,55.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:55.8,60.24 3 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:60.24,62.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:64.3,64.57 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:64.57,66.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:68.3,68.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:71.2,71.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:71.16,73.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:75.2,76.23 2 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:76.23,78.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:80.2,80.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:19.40,89.2 1 62 +github.com/thebtf/engram/internal/mcp/tools_issues.go:109.71,111.9 2 2 +github.com/thebtf/engram/internal/mcp/tools_issues.go:111.9,113.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:115.2,116.38 2 2 +github.com/thebtf/engram/internal/mcp/tools_issues.go:116.38,117.16 1 4 +github.com/thebtf/engram/internal/mcp/tools_issues.go:118.13,119.41 1 2 +github.com/thebtf/engram/internal/mcp/tools_issues.go:119.41,121.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:122.17,123.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:123.43,125.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:126.11,127.40 1 2 +github.com/thebtf/engram/internal/mcp/tools_issues.go:127.40,129.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:133.2,133.22 1 2 +github.com/thebtf/engram/internal/mcp/tools_issues.go:133.22,138.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:139.2,139.12 1 2 +github.com/thebtf/engram/internal/mcp/tools_issues.go:143.90,144.25 1 2 +github.com/thebtf/engram/internal/mcp/tools_issues.go:144.25,146.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:148.2,149.16 2 2 +github.com/thebtf/engram/internal/mcp/tools_issues.go:149.16,151.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:153.2,157.61 2 2 +github.com/thebtf/engram/internal/mcp/tools_issues.go:157.61,159.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:161.2,161.16 1 2 +github.com/thebtf/engram/internal/mcp/tools_issues.go:162.16,163.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:164.14,165.35 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:166.13,167.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:168.16,169.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:170.17,171.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:172.16,173.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:174.15,175.36 1 2 +github.com/thebtf/engram/internal/mcp/tools_issues.go:176.10,177.120 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:189.85,191.39 2 2 +github.com/thebtf/engram/internal/mcp/tools_issues.go:191.39,192.44 1 2 +github.com/thebtf/engram/internal/mcp/tools_issues.go:192.44,194.4 1 2 +github.com/thebtf/engram/internal/mcp/tools_issues.go:196.2,196.15 1 2 +github.com/thebtf/engram/internal/mcp/tools_issues.go:196.15,198.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:199.2,199.15 1 2 +github.com/thebtf/engram/internal/mcp/tools_issues.go:199.15,201.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:202.2,202.46 1 2 +github.com/thebtf/engram/internal/mcp/tools_issues.go:205.91,207.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:207.17,209.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:211.2,215.25 5 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:215.25,217.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:218.2,224.25 4 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:224.25,226.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:227.2,227.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:227.25,229.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:231.2,243.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:243.16,245.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:247.2,247.139 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:250.89,252.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:252.19,254.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:255.2,256.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:256.25,258.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:259.2,264.52 5 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:264.52,266.14 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:266.14,268.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:271.2,277.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:277.25,280.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:282.2,283.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:283.16,285.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:287.2,287.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:287.22,288.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:288.20,290.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:291.3,291.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:294.2,297.31 3 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:297.31,300.29 3 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:300.29,302.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:303.3,305.69 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:308.2,308.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:311.88,313.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:313.13,315.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:317.2,318.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:318.16,320.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:322.2,328.22 6 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:328.22,331.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:333.2,333.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:333.23,335.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:335.30,338.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:341.2,341.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:344.91,346.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:346.13,348.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:350.2,353.18 3 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:353.18,354.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:354.27,356.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:357.3,357.73 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:357.73,359.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:362.2,362.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:362.19,370.17 4 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:370.17,372.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:375.2,376.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:376.26,378.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:379.2,379.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:382.92,384.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:384.13,386.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:388.2,389.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:389.16,391.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:393.2,401.16 4 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:401.16,403.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:405.2,405.88 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:408.91,410.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:410.13,412.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:414.2,418.95 4 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:418.95,420.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:422.2,422.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:425.90,427.13 2 2 +github.com/thebtf/engram/internal/mcp/tools_issues.go:427.13,429.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:431.2,433.167 3 2 +github.com/thebtf/engram/internal/mcp/tools_issues.go:433.167,435.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_issues.go:437.2,437.89 1 2 +github.com/thebtf/engram/internal/mcp/tools_issues.go:437.89,439.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_issues.go:441.2,441.108 1 1 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:22.93,24.49 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:24.49,26.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:28.2,28.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:29.14,30.42 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:31.17,32.59 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:33.16,34.58 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:35.24,36.75 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:37.27,38.71 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:39.22,40.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:41.23,42.63 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:43.10,44.66 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:48.79,49.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:49.13,51.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:52.2,53.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:53.16,55.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:57.2,58.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:58.32,60.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:61.2,84.28 3 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:87.101,88.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:88.13,90.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:91.2,91.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:91.38,93.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:94.2,95.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:95.16,97.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:98.2,98.53 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:98.53,100.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:102.2,104.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:104.17,106.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:107.2,107.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:107.29,109.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:110.2,115.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:118.100,119.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:119.13,121.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:122.2,122.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:122.38,124.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:125.2,126.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:126.16,128.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:129.2,129.53 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:129.53,131.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:133.2,135.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:135.17,137.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:138.2,138.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:138.29,140.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:141.2,146.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:149.123,150.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:150.13,152.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:153.2,153.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:153.18,155.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:156.2,156.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:156.38,158.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:159.2,161.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:161.17,163.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:164.2,169.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:172.113,173.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:173.13,175.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:176.2,176.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:176.50,178.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:179.2,181.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:181.17,183.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:184.2,188.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:191.57,195.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:197.102,198.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:198.13,200.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:201.2,201.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:201.20,203.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:204.2,205.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:205.16,207.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:209.2,210.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:210.32,212.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:214.2,217.56 3 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:217.56,223.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:225.2,230.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:233.41,235.16 2 45 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:235.16,237.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:238.2,238.23 1 45 +github.com/thebtf/engram/internal/mcp/tools_memory.go:35.27,37.2 1 304 +github.com/thebtf/engram/internal/mcp/tools_memory.go:42.41,43.11 1 5 +github.com/thebtf/engram/internal/mcp/tools_memory.go:44.48,45.14 1 3 +github.com/thebtf/engram/internal/mcp/tools_memory.go:46.10,47.15 1 2 +github.com/thebtf/engram/internal/mcp/tools_memory.go:54.57,55.16 1 2 +github.com/thebtf/engram/internal/mcp/tools_memory.go:56.17,57.19 1 1 +github.com/thebtf/engram/internal/mcp/tools_memory.go:58.16,59.18 1 1 +github.com/thebtf/engram/internal/mcp/tools_memory.go:60.10,61.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:82.58,83.17 1 1 +github.com/thebtf/engram/internal/mcp/tools_memory.go:84.28,85.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:86.26,87.18 1 1 +github.com/thebtf/engram/internal/mcp/tools_memory.go:88.10,89.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:93.114,95.68 2 59 +github.com/thebtf/engram/internal/mcp/tools_memory.go:95.68,97.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:99.2,101.42 3 59 +github.com/thebtf/engram/internal/mcp/tools_memory.go:101.42,102.71 1 31 +github.com/thebtf/engram/internal/mcp/tools_memory.go:102.71,105.4 2 27 +github.com/thebtf/engram/internal/mcp/tools_memory.go:107.2,117.23 3 59 +github.com/thebtf/engram/internal/mcp/tools_memory.go:117.23,119.3 1 3 +github.com/thebtf/engram/internal/mcp/tools_memory.go:121.2,124.22 4 56 +github.com/thebtf/engram/internal/mcp/tools_memory.go:124.22,125.31 1 3 +github.com/thebtf/engram/internal/mcp/tools_memory.go:125.31,127.4 1 1 +github.com/thebtf/engram/internal/mcp/tools_memory.go:128.3,128.35 1 2 +github.com/thebtf/engram/internal/mcp/tools_memory.go:129.8,129.37 1 53 +github.com/thebtf/engram/internal/mcp/tools_memory.go:129.37,131.3 1 23 +github.com/thebtf/engram/internal/mcp/tools_memory.go:132.2,132.12 1 55 +github.com/thebtf/engram/internal/mcp/tools_memory.go:135.74,136.30 1 15 +github.com/thebtf/engram/internal/mcp/tools_memory.go:136.30,138.3 1 7 +github.com/thebtf/engram/internal/mcp/tools_memory.go:139.2,139.34 1 15 +github.com/thebtf/engram/internal/mcp/tools_memory.go:139.34,141.3 1 7 +github.com/thebtf/engram/internal/mcp/tools_memory.go:142.2,142.31 1 15 +github.com/thebtf/engram/internal/mcp/tools_memory.go:142.31,144.3 1 7 +github.com/thebtf/engram/internal/mcp/tools_memory.go:145.2,145.22 1 15 +github.com/thebtf/engram/internal/mcp/tools_memory.go:145.22,147.3 1 6 +github.com/thebtf/engram/internal/mcp/tools_memory.go:161.169,162.17 1 13 +github.com/thebtf/engram/internal/mcp/tools_memory.go:162.17,164.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:165.2,166.51 2 13 +github.com/thebtf/engram/internal/mcp/tools_memory.go:166.51,168.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:169.2,169.15 1 13 +github.com/thebtf/engram/internal/mcp/tools_memory.go:172.92,174.42 2 21 +github.com/thebtf/engram/internal/mcp/tools_memory.go:174.42,177.63 3 6 +github.com/thebtf/engram/internal/mcp/tools_memory.go:177.63,179.4 1 5 +github.com/thebtf/engram/internal/mcp/tools_memory.go:179.9,181.4 1 1 +github.com/thebtf/engram/internal/mcp/tools_memory.go:183.2,183.15 1 21 +github.com/thebtf/engram/internal/mcp/tools_memory.go:186.65,190.2 1 10 +github.com/thebtf/engram/internal/mcp/tools_memory.go:192.115,194.26 2 9 +github.com/thebtf/engram/internal/mcp/tools_memory.go:194.26,196.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:196.8,196.31 1 9 +github.com/thebtf/engram/internal/mcp/tools_memory.go:196.31,198.3 1 9 +github.com/thebtf/engram/internal/mcp/tools_memory.go:199.2,199.117 1 9 +github.com/thebtf/engram/internal/mcp/tools_memory.go:202.122,206.31 4 1 +github.com/thebtf/engram/internal/mcp/tools_memory.go:206.31,207.45 1 2 +github.com/thebtf/engram/internal/mcp/tools_memory.go:207.45,209.4 1 1 +github.com/thebtf/engram/internal/mcp/tools_memory.go:211.2,211.16 1 1 +github.com/thebtf/engram/internal/mcp/tools_memory.go:214.72,216.2 1 11 +github.com/thebtf/engram/internal/mcp/tools_memory.go:218.117,219.16 1 9 +github.com/thebtf/engram/internal/mcp/tools_memory.go:219.16,221.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:222.2,223.20 2 9 +github.com/thebtf/engram/internal/mcp/tools_memory.go:223.20,225.17 2 9 +github.com/thebtf/engram/internal/mcp/tools_memory.go:225.17,227.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:228.3,228.27 1 9 +github.com/thebtf/engram/internal/mcp/tools_memory.go:228.27,229.50 1 9 +github.com/thebtf/engram/internal/mcp/tools_memory.go:229.50,231.30 2 4 +github.com/thebtf/engram/internal/mcp/tools_memory.go:231.30,232.11 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:236.3,236.22 1 9 +github.com/thebtf/engram/internal/mcp/tools_memory.go:239.2,241.60 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:241.60,243.61 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:243.61,245.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:246.3,246.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:246.24,247.9 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:249.3,250.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:250.17,252.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:253.3,253.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:253.22,254.9 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:256.3,256.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:256.29,257.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:257.50,259.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:259.30,260.11 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:264.3,265.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:265.32,266.9 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:269.2,269.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:272.51,273.16 1 9 +github.com/thebtf/engram/internal/mcp/tools_memory.go:273.16,275.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:276.2,277.18 2 9 +github.com/thebtf/engram/internal/mcp/tools_memory.go:277.18,279.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_memory.go:280.2,280.19 1 9 +github.com/thebtf/engram/internal/mcp/tools_memory.go:280.19,282.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:283.2,283.15 1 9 +github.com/thebtf/engram/internal/mcp/tools_memory.go:286.97,288.30 2 4 +github.com/thebtf/engram/internal/mcp/tools_memory.go:288.30,290.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:291.2,291.49 1 4 +github.com/thebtf/engram/internal/mcp/tools_memory.go:291.49,293.3 1 3 +github.com/thebtf/engram/internal/mcp/tools_memory.go:294.2,294.17 1 1 +github.com/thebtf/engram/internal/mcp/tools_memory.go:297.108,299.2 1 4 +github.com/thebtf/engram/internal/mcp/tools_memory.go:301.108,303.2 1 1 +github.com/thebtf/engram/internal/mcp/tools_memory.go:305.102,307.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:319.55,320.31 1 13 +github.com/thebtf/engram/internal/mcp/tools_memory.go:320.31,322.3 1 13 +github.com/thebtf/engram/internal/mcp/tools_memory.go:323.2,323.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:323.26,325.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:326.2,326.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:329.71,330.17 1 15 +github.com/thebtf/engram/internal/mcp/tools_memory.go:343.26,344.14 1 15 +github.com/thebtf/engram/internal/mcp/tools_memory.go:345.10,346.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:354.95,362.16 3 34 +github.com/thebtf/engram/internal/mcp/tools_memory.go:362.16,364.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:366.2,397.39 14 34 +github.com/thebtf/engram/internal/mcp/tools_memory.go:397.39,399.27 2 20 +github.com/thebtf/engram/internal/mcp/tools_memory.go:399.27,401.4 1 20 +github.com/thebtf/engram/internal/mcp/tools_memory.go:402.8,404.3 1 14 +github.com/thebtf/engram/internal/mcp/tools_memory.go:405.2,407.46 3 34 +github.com/thebtf/engram/internal/mcp/tools_memory.go:407.46,410.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:411.2,411.44 1 34 +github.com/thebtf/engram/internal/mcp/tools_memory.go:411.44,413.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:413.12,415.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:417.2,417.26 1 34 +github.com/thebtf/engram/internal/mcp/tools_memory.go:417.26,419.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_memory.go:420.2,420.84 1 33 +github.com/thebtf/engram/internal/mcp/tools_memory.go:420.84,422.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:427.2,427.65 1 33 +github.com/thebtf/engram/internal/mcp/tools_memory.go:427.65,429.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_memory.go:431.2,433.20 3 32 +github.com/thebtf/engram/internal/mcp/tools_memory.go:433.20,435.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:436.2,437.20 2 32 +github.com/thebtf/engram/internal/mcp/tools_memory.go:437.20,439.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:440.2,440.56 1 32 +github.com/thebtf/engram/internal/mcp/tools_memory.go:440.56,442.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:443.2,443.56 1 32 +github.com/thebtf/engram/internal/mcp/tools_memory.go:443.56,448.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:450.2,450.45 1 32 +github.com/thebtf/engram/internal/mcp/tools_memory.go:450.45,453.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:459.2,459.31 1 32 +github.com/thebtf/engram/internal/mcp/tools_memory.go:459.31,461.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:461.22,462.62 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:462.62,465.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:466.4,466.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:468.3,468.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:471.2,472.115 2 32 +github.com/thebtf/engram/internal/mcp/tools_memory.go:472.115,474.3 1 2 +github.com/thebtf/engram/internal/mcp/tools_memory.go:491.2,491.19 1 30 +github.com/thebtf/engram/internal/mcp/tools_memory.go:491.19,493.23 2 2 +github.com/thebtf/engram/internal/mcp/tools_memory.go:493.23,495.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:496.3,508.21 4 2 +github.com/thebtf/engram/internal/mcp/tools_memory.go:508.21,510.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:511.3,511.26 1 2 +github.com/thebtf/engram/internal/mcp/tools_memory.go:522.2,522.43 1 28 +github.com/thebtf/engram/internal/mcp/tools_memory.go:522.43,535.34 5 11 +github.com/thebtf/engram/internal/mcp/tools_memory.go:535.34,556.30 4 10 +github.com/thebtf/engram/internal/mcp/tools_memory.go:556.30,558.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:559.4,559.44 1 10 +github.com/thebtf/engram/internal/mcp/tools_memory.go:559.44,561.5 1 4 +github.com/thebtf/engram/internal/mcp/tools_memory.go:562.4,562.106 1 10 +github.com/thebtf/engram/internal/mcp/tools_memory.go:562.106,564.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:575.4,575.74 1 10 +github.com/thebtf/engram/internal/mcp/tools_memory.go:575.74,577.5 1 1 +github.com/thebtf/engram/internal/mcp/tools_memory.go:578.4,579.18 2 9 +github.com/thebtf/engram/internal/mcp/tools_memory.go:579.18,581.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:583.4,584.28 2 9 +github.com/thebtf/engram/internal/mcp/tools_memory.go:584.28,586.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:588.4,588.31 1 9 +github.com/thebtf/engram/internal/mcp/tools_memory.go:588.31,599.57 2 3 +github.com/thebtf/engram/internal/mcp/tools_memory.go:599.57,601.17 2 2 +github.com/thebtf/engram/internal/mcp/tools_memory.go:601.17,604.7 2 2 +github.com/thebtf/engram/internal/mcp/tools_memory.go:606.5,607.21 2 3 +github.com/thebtf/engram/internal/mcp/tools_memory.go:607.21,609.6 1 2 +github.com/thebtf/engram/internal/mcp/tools_memory.go:615.5,615.138 1 1 +github.com/thebtf/engram/internal/mcp/tools_memory.go:615.138,617.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:617.27,619.7 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:620.6,620.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:622.5,623.26 2 1 +github.com/thebtf/engram/internal/mcp/tools_memory.go:623.26,625.6 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:626.5,626.28 1 1 +github.com/thebtf/engram/internal/mcp/tools_memory.go:630.4,631.20 2 6 +github.com/thebtf/engram/internal/mcp/tools_memory.go:631.20,633.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:634.4,634.22 1 6 +github.com/thebtf/engram/internal/mcp/tools_memory.go:634.22,637.26 2 3 +github.com/thebtf/engram/internal/mcp/tools_memory.go:637.26,639.6 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:640.5,640.28 1 3 +github.com/thebtf/engram/internal/mcp/tools_memory.go:645.4,660.77 4 3 +github.com/thebtf/engram/internal/mcp/tools_memory.go:660.77,662.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:663.4,664.25 2 3 +github.com/thebtf/engram/internal/mcp/tools_memory.go:664.25,666.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:667.4,667.27 1 3 +github.com/thebtf/engram/internal/mcp/tools_memory.go:673.2,673.26 1 18 +github.com/thebtf/engram/internal/mcp/tools_memory.go:673.26,675.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_memory.go:677.2,678.25 2 17 +github.com/thebtf/engram/internal/mcp/tools_memory.go:678.25,680.3 1 11 +github.com/thebtf/engram/internal/mcp/tools_memory.go:681.2,681.97 1 17 +github.com/thebtf/engram/internal/mcp/tools_memory.go:681.97,683.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:690.2,691.21 2 17 +github.com/thebtf/engram/internal/mcp/tools_memory.go:691.21,693.33 2 5 +github.com/thebtf/engram/internal/mcp/tools_memory.go:693.33,695.4 1 2 +github.com/thebtf/engram/internal/mcp/tools_memory.go:696.3,696.33 1 5 +github.com/thebtf/engram/internal/mcp/tools_memory.go:696.33,698.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:699.3,699.49 1 5 +github.com/thebtf/engram/internal/mcp/tools_memory.go:699.49,704.4 1 2 +github.com/thebtf/engram/internal/mcp/tools_memory.go:721.3,721.54 1 3 +github.com/thebtf/engram/internal/mcp/tools_memory.go:721.54,722.84 1 1 +github.com/thebtf/engram/internal/mcp/tools_memory.go:722.84,724.5 1 1 +github.com/thebtf/engram/internal/mcp/tools_memory.go:728.2,728.99 1 15 +github.com/thebtf/engram/internal/mcp/tools_memory.go:728.99,730.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:732.2,733.22 2 15 +github.com/thebtf/engram/internal/mcp/tools_memory.go:733.22,735.10 2 15 +github.com/thebtf/engram/internal/mcp/tools_memory.go:736.109,737.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:738.100,739.25 1 4 +github.com/thebtf/engram/internal/mcp/tools_memory.go:740.114,741.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:742.107,743.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:744.11,745.26 1 11 +github.com/thebtf/engram/internal/mcp/tools_memory.go:748.2,749.43 2 15 +github.com/thebtf/engram/internal/mcp/tools_memory.go:749.43,751.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:753.2,755.34 3 15 +github.com/thebtf/engram/internal/mcp/tools_memory.go:755.34,756.48 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:756.48,757.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:757.19,760.5 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:764.2,764.31 1 15 +github.com/thebtf/engram/internal/mcp/tools_memory.go:764.31,767.3 2 15 +github.com/thebtf/engram/internal/mcp/tools_memory.go:768.2,768.35 1 15 +github.com/thebtf/engram/internal/mcp/tools_memory.go:768.35,771.3 2 15 +github.com/thebtf/engram/internal/mcp/tools_memory.go:772.2,772.76 1 15 +github.com/thebtf/engram/internal/mcp/tools_memory.go:772.76,776.3 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:778.2,780.16 3 15 +github.com/thebtf/engram/internal/mcp/tools_memory.go:780.16,782.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:782.20,785.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:788.2,788.25 1 15 +github.com/thebtf/engram/internal/mcp/tools_memory.go:788.25,798.18 1 2 +github.com/thebtf/engram/internal/mcp/tools_memory.go:798.18,800.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:800.9,800.30 1 2 +github.com/thebtf/engram/internal/mcp/tools_memory.go:800.30,807.4 1 1 +github.com/thebtf/engram/internal/mcp/tools_memory.go:808.3,808.36 1 1 +github.com/thebtf/engram/internal/mcp/tools_memory.go:808.36,810.4 1 1 +github.com/thebtf/engram/internal/mcp/tools_memory.go:811.3,812.50 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:812.50,815.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:816.3,822.17 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:822.17,824.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:826.3,836.17 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:836.17,838.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:839.3,839.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:842.2,843.30 2 13 +github.com/thebtf/engram/internal/mcp/tools_memory.go:843.30,844.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:844.52,846.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:846.9,848.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:851.2,869.21 2 13 +github.com/thebtf/engram/internal/mcp/tools_memory.go:869.21,871.43 2 3 +github.com/thebtf/engram/internal/mcp/tools_memory.go:871.43,873.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:874.3,874.29 1 3 +github.com/thebtf/engram/internal/mcp/tools_memory.go:874.29,876.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:886.3,886.76 1 3 +github.com/thebtf/engram/internal/mcp/tools_memory.go:886.76,888.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:890.2,890.105 1 13 +github.com/thebtf/engram/internal/mcp/tools_memory.go:890.105,892.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:893.2,894.16 2 13 +github.com/thebtf/engram/internal/mcp/tools_memory.go:894.16,896.3 1 3 +github.com/thebtf/engram/internal/mcp/tools_memory.go:901.2,904.40 4 10 +github.com/thebtf/engram/internal/mcp/tools_memory.go:904.40,905.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:905.15,906.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:909.3,910.63 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:910.63,912.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:912.9,914.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:916.3,916.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:916.43,918.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:919.3,920.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:920.20,922.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:925.3,925.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:925.23,928.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:929.3,931.33 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:931.33,934.39 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:934.39,936.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:939.2,948.42 5 10 +github.com/thebtf/engram/internal/mcp/tools_memory.go:948.42,950.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:950.21,952.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:952.9,955.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:959.2,959.53 1 10 +github.com/thebtf/engram/internal/mcp/tools_memory.go:959.53,960.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:960.54,961.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:961.33,963.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:964.9,972.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:973.3,973.60 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:973.60,974.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:974.40,976.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:978.3,978.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:978.61,979.41 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:979.41,981.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:983.3,983.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:983.28,985.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:986.3,987.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:989.2,989.51 1 10 +github.com/thebtf/engram/internal/mcp/tools_memory.go:989.51,991.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:995.2,997.53 3 10 +github.com/thebtf/engram/internal/mcp/tools_memory.go:997.53,999.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:999.8,1001.3 1 10 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1002.2,1002.22 1 10 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1002.22,1004.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1008.2,1014.76 3 10 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1014.76,1016.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1021.2,1021.57 1 10 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1021.57,1026.13 5 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1026.13,1029.21 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1029.21,1032.5 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1033.4,1033.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1033.49,1035.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1036.4,1043.89 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1043.89,1046.5 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1048.4,1048.86 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1052.2,1063.21 2 10 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1063.21,1065.40 2 3 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1065.40,1067.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1068.3,1068.38 1 3 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1068.38,1070.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1072.2,1074.18 3 10 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1074.18,1081.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1082.2,1082.28 1 10 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1082.28,1084.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1085.2,1085.16 1 10 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1085.16,1087.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1088.2,1088.30 1 10 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1088.30,1090.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1091.2,1091.30 1 10 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1091.30,1093.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1098.2,1098.76 1 10 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1098.76,1100.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1101.2,1102.16 2 10 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1102.16,1104.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1105.2,1105.25 1 10 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1111.94,1113.15 2 13 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1113.15,1115.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1117.2,1118.16 2 13 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1118.16,1120.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1122.2,1123.13 2 13 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1123.13,1125.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1126.2,1131.16 4 13 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1131.16,1133.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1134.2,1134.19 1 13 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1134.19,1136.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1146.2,1146.39 1 13 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1146.39,1148.55 2 3 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1148.55,1150.4 1 2 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1152.2,1152.39 1 11 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1152.39,1154.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1157.2,1158.21 2 10 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1158.21,1163.21 3 10 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1163.21,1165.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1166.3,1167.21 2 10 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1167.21,1169.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1170.3,1170.52 1 10 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1170.52,1172.4 1 1 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1173.3,1173.52 1 9 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1173.52,1178.4 2 1 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1179.3,1179.41 1 9 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1179.41,1182.4 2 1 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1183.3,1183.30 1 9 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1188.2,1188.46 1 9 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1188.46,1190.3 1 2 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1191.2,1191.27 1 9 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1191.27,1193.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1195.2,1196.16 2 9 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1196.16,1198.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1201.2,1210.16 4 9 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1210.16,1212.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1213.2,1213.25 1 9 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1218.59,1220.38 1 15 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1220.38,1222.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1225.2,1226.29 2 15 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1226.29,1227.22 1 30 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1227.22,1229.9 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1232.2,1232.18 1 15 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1232.18,1234.3 1 15 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1237.2,1244.29 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1244.29,1245.67 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1245.67,1247.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1249.2,1249.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1249.16,1251.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1254.2,1254.11 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1258.55,1260.47 2 35 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1260.47,1262.3 1 33 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1263.2,1264.58 2 2 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1264.58,1266.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1267.2,1267.26 1 2 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1270.252,1271.108 1 28 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1271.108,1273.3 1 2 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1274.2,1274.55 1 26 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1274.55,1276.3 1 13 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1277.2,1277.13 1 13 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1280.184,1282.69 2 35 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1282.69,1284.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1284.32,1285.58 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1285.58,1287.10 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1290.3,1290.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1290.18,1292.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1294.2,1294.19 1 35 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1294.19,1297.32 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1297.32,1298.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1298.39,1300.10 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1303.3,1303.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1303.19,1305.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1307.2,1307.21 1 35 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1307.21,1309.32 2 8 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1309.32,1310.49 1 12 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1310.49,1312.10 2 4 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1315.3,1315.18 1 8 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1315.18,1317.4 1 4 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1319.2,1319.28 1 31 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1319.28,1321.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1321.17,1323.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1324.3,1324.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1324.27,1326.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1328.2,1328.76 1 31 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1328.76,1330.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1331.2,1331.13 1 31 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1342.96,1343.26 1 20 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1343.26,1345.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1347.2,1348.16 2 20 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1348.16,1350.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1352.2,1363.23 9 20 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1363.23,1364.58 1 1 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1364.58,1365.31 1 1 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1365.31,1367.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1367.10,1369.5 1 1 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1373.2,1373.17 1 19 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1373.17,1375.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1376.2,1376.16 1 19 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1376.16,1378.3 1 12 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1379.2,1379.16 1 19 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1379.16,1381.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1382.2,1382.18 1 19 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1382.18,1384.3 1 2 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1385.2,1385.19 1 19 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1385.19,1387.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1388.2,1388.19 1 19 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1388.19,1390.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1396.2,1399.18 4 19 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1399.18,1400.61 1 5 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1400.61,1401.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1402.50,1403.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1404.12,1405.108 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1409.2,1410.42 2 19 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1410.42,1414.3 3 12 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1415.2,1420.16 3 19 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1420.16,1422.3 1 3 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1429.2,1444.43 6 16 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1444.43,1446.3 1 4 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1449.2,1451.27 3 12 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1451.27,1453.3 1 2 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1458.2,1458.46 1 12 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1458.46,1460.3 1 26 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1461.2,1461.63 1 12 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1461.63,1463.3 1 7 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1465.2,1466.15 2 12 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1466.15,1472.29 3 1 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1472.29,1479.18 2 1 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1479.18,1481.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1482.4,1482.23 1 1 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1482.23,1483.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1485.4,1485.30 1 1 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1485.30,1486.24 1 2 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1486.24,1488.32 2 2 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1488.32,1489.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1493.4,1494.30 2 1 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1494.30,1495.10 1 1 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1498.8,1504.29 3 11 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1504.29,1506.18 2 11 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1506.18,1508.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1509.4,1509.23 1 11 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1509.23,1510.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1512.4,1512.30 1 11 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1512.30,1513.24 1 24 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1513.24,1515.32 2 10 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1515.32,1516.12 1 2 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1520.4,1521.30 2 11 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1521.30,1522.10 1 11 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1526.2,1526.26 1 12 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1526.26,1528.17 2 6 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1528.17,1530.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1535.2,1535.74 1 12 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1535.74,1536.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1536.13,1537.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1537.33,1542.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1542.26,1544.39 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1544.39,1546.7 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1548.5,1548.82 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1565.2,1565.38 1 12 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1565.38,1569.27 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1569.27,1571.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1572.3,1572.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1572.27,1574.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1576.3,1581.32 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1581.32,1586.4 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1588.3,1592.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1592.18,1594.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1595.3,1596.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1596.17,1598.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1599.3,1599.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1602.2,1602.16 1 12 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1603.15,1618.32 3 9 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1618.32,1620.33 2 12 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1620.33,1621.40 1 12 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1621.40,1623.11 2 12 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1626.4,1638.6 1 12 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1640.3,1641.17 2 9 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1641.17,1643.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1644.3,1644.26 1 9 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1646.18,1648.17 2 1 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1648.17,1650.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1651.3,1651.26 1 1 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1653.10,1654.25 1 2 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1654.25,1656.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1657.3,1659.32 3 2 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1659.32,1661.33 2 2 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1661.33,1662.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1662.40,1664.11 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1667.4,1669.26 3 2 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1669.26,1671.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1672.4,1673.25 2 2 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1673.25,1675.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1676.4,1676.24 1 2 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1678.3,1678.26 1 2 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1690.51,1695.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1700.73,1702.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1702.16,1704.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1705.2,1706.48 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1706.48,1710.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1711.2,1713.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1713.16,1715.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1716.2,1716.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1727.117,1731.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1731.21,1733.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1734.2,1735.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1735.16,1737.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1738.2,1739.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1739.27,1741.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1742.2,1742.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1764.19,1775.30 7 4 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1775.30,1777.37 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1777.37,1779.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1781.3,1781.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1781.20,1783.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1797.2,1797.39 1 4 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1797.39,1799.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1801.2,1811.25 3 3 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1811.25,1813.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1815.2,1816.29 2 3 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1816.29,1818.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1824.2,1824.27 1 3 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1824.27,1826.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1831.2,1833.22 3 3 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1833.22,1835.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1837.2,1846.16 2 3 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1846.16,1848.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1853.2,1855.27 3 3 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1855.27,1857.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1859.2,1876.33 3 3 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1876.33,1878.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1880.2,1881.28 2 3 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1881.28,1885.20 2 2 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1885.20,1888.33 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1888.33,1889.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1889.40,1891.11 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1894.4,1894.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1894.20,1895.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1900.3,1900.22 1 2 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1900.22,1902.33 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1902.33,1903.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1903.50,1905.11 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1908.4,1908.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1908.19,1909.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1918.3,1918.56 1 2 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1918.56,1919.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1927.3,1927.64 1 2 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1927.64,1928.12 1 1 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1932.3,1935.32 3 1 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1935.32,1936.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1936.39,1938.10 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1942.3,1956.14 2 1 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1956.14,1957.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1957.37,1959.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1961.3,1962.26 2 1 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1962.26,1963.9 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1975.2,1975.59 1 3 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1975.59,1986.17 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1986.17,1988.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1990.3,1991.34 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1991.34,1993.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1995.3,1996.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1996.29,1998.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1998.21,2001.34 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2001.34,2002.41 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2002.41,2004.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2007.5,2007.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2007.21,2008.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2011.4,2011.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2011.23,2013.34 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2013.34,2014.51 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2014.51,2016.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2019.5,2019.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2019.20,2020.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2023.4,2023.57 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2023.57,2024.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2027.4,2027.65 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2027.65,2028.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2030.4,2031.33 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2031.33,2032.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2032.40,2034.11 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2037.4,2051.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2051.15,2052.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2052.38,2054.6 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2056.4,2057.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2057.27,2058.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2065.2,2066.28 2 3 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2066.28,2068.3 1 2 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2072.2,2072.71 1 3 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2072.71,2080.30 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2080.30,2081.41 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2081.41,2087.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2089.3,2089.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2089.13,2090.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2090.31,2095.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2095.25,2097.38 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2097.38,2099.7 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2101.5,2101.81 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2112.2,2112.38 1 3 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2112.38,2115.27 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2115.27,2117.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2121.3,2138.30 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2138.30,2140.11 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2140.11,2141.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2143.4,2160.15 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2160.15,2161.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2161.39,2163.6 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2165.4,2165.46 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2167.3,2173.24 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2173.24,2175.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2176.3,2176.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2179.2,2179.16 1 3 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2180.15,2182.24 2 2 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2182.24,2184.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2185.3,2185.26 1 2 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2187.18,2199.30 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2199.30,2201.11 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2201.11,2202.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2204.4,2208.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2208.15,2209.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2209.39,2211.6 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2213.4,2213.35 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2215.3,2216.24 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2216.24,2218.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2219.3,2219.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2220.10,2221.22 1 1 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2221.22,2223.4 1 1 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2224.3,2226.27 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2226.27,2228.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2228.20,2230.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2231.4,2233.26 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2233.26,2235.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2236.4,2237.23 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2237.23,2239.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2240.4,2240.46 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2240.46,2244.5 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2245.4,2245.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2247.3,2247.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2252.94,2254.16 2 2 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2254.16,2256.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2258.2,2260.18 3 2 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2260.18,2261.59 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2261.59,2262.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2262.36,2264.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2264.10,2266.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2270.2,2270.13 1 2 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2270.13,2272.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2273.2,2273.50 1 2 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2273.50,2275.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2277.2,2277.98 1 2 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2281.98,2282.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2282.26,2284.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2286.2,2287.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2287.16,2289.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2291.2,2292.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2292.13,2294.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2297.2,2298.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2298.19,2299.51 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2299.51,2301.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2302.3,2302.55 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2304.2,2304.42 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2304.42,2306.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2308.2,2308.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2308.54,2309.48 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2309.48,2311.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2312.3,2312.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2316.2,2318.53 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:17.82,19.2 1 5 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:21.149,22.55 1 22 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:22.55,24.3 1 11 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:25.2,25.36 1 11 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:25.36,27.3 1 4 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:28.2,34.16 2 7 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:34.16,36.3 1 3 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:37.2,37.42 1 4 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:37.42,39.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:40.2,40.22 1 4 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:43.105,44.48 1 13 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:44.48,46.3 1 12 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:47.2,48.54 2 1 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:51.129,53.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:53.16,55.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:56.2,57.53 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:57.53,59.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:60.2,61.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:61.25,63.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:64.2,65.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:65.16,67.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:68.2,68.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:26.97,27.18 1 2 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:27.18,29.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:30.2,30.54 1 2 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:33.37,35.2 1 73 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:37.81,38.44 1 12 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:38.44,40.3 1 10 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:41.2,41.38 1 2 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:41.38,43.3 1 2 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:44.2,44.57 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:47.88,48.32 1 11 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:48.32,50.3 1 2 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:51.2,52.20 2 9 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:52.20,54.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:55.2,55.21 1 8 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:58.40,72.2 1 2 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:74.106,75.34 1 11 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:75.34,77.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:78.2,79.16 2 11 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:79.16,81.3 1 3 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:83.2,84.16 2 8 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:84.16,86.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:88.2,89.13 2 8 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:89.13,91.3 1 3 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:93.2,94.63 2 5 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:94.63,96.3 1 3 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:98.2,98.72 1 2 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:98.72,100.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:102.2,106.4 1 2 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:109.117,110.32 1 2 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:110.32,112.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:113.2,113.34 1 2 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:113.34,115.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:117.2,118.16 2 2 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:118.16,120.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:121.2,121.19 1 2 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:121.19,123.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:125.2,126.69 2 2 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:126.69,128.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:130.2,136.4 1 2 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:18.33,20.2 1 72 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:22.27,37.2 1 2 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:39.93,40.30 1 10 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:40.30,42.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:43.2,43.28 1 10 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:43.28,45.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:46.2,47.16 2 10 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:47.16,49.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:51.2,52.17 2 10 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:52.17,54.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:55.2,56.19 2 10 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:56.19,58.3 1 2 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:59.2,59.19 1 10 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:59.19,61.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:62.2,63.16 2 9 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:63.16,65.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:67.2,74.9 3 9 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:74.9,76.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:77.2,78.15 2 9 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:78.15,80.3 1 2 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:81.2,85.16 4 7 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:85.16,87.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:88.2,88.17 1 6 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:88.17,90.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:92.2,101.30 2 6 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:104.48,105.16 1 9 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:105.16,107.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:108.2,109.29 2 9 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:109.29,111.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:112.2,112.31 1 9 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:112.31,114.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:115.2,115.19 1 8 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:118.75,120.27 2 6 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:120.27,121.32 1 29 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:121.32,123.17 2 31 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:123.17,124.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:126.4,126.17 1 31 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:129.2,134.33 3 6 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:134.33,136.3 1 6 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:137.2,137.40 1 6 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:137.40,138.39 1 2 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:138.39,140.4 1 1 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:141.3,141.37 1 1 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:143.2,143.34 1 6 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:143.34,145.3 1 6 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:146.2,147.35 2 6 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:147.35,149.3 1 6 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:150.2,150.12 1 6 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:153.77,154.20 1 6 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:154.20,156.3 1 2 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:157.2,159.31 3 4 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:159.31,160.33 1 25 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:160.33,162.4 1 1 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:163.3,163.30 1 25 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:163.30,165.4 1 24 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:167.2,170.3 1 4 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:23.91,25.2 1 14 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:27.38,50.2 1 1 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:52.104,53.38 1 5 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:53.38,55.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:56.2,57.16 2 5 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:57.16,59.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:61.2,62.26 2 5 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:62.26,64.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:65.2,66.30 2 5 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:66.30,68.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:69.2,69.72 1 5 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:69.72,71.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:73.2,74.16 2 4 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:74.16,76.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:77.2,78.16 2 4 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:78.16,80.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:81.2,82.16 2 3 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:82.16,84.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:85.2,86.16 2 3 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:86.16,88.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:90.2,105.16 3 3 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:105.16,107.3 1 2 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:109.2,109.19 1 1 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:109.19,117.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:118.2,118.25 1 1 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:118.25,120.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:121.2,121.30 1 1 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:121.30,123.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:124.2,124.31 1 1 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:124.31,126.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:127.2,128.16 2 1 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:128.16,130.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:131.2,131.25 1 1 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:134.91,136.9 2 10 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:136.9,138.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:139.2,140.15 2 9 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:140.15,141.19 1 3 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:141.19,143.4 1 3 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:144.3,144.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:146.2,146.94 1 6 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:149.59,150.16 1 4 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:150.16,152.3 1 2 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:153.2,154.61 2 2 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:154.61,156.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:157.2,157.15 1 1 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:160.56,161.75 1 3 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:161.75,163.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:164.2,164.52 1 2 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:167.67,169.20 2 4 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:170.17,171.17 1 4 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:172.67,173.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:174.10,175.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:179.60,180.16 1 3 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:180.16,182.3 1 3 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:183.2,184.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:184.25,186.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:187.2,187.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:190.57,191.25 1 11 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:192.15,193.81 1 11 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:193.81,195.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:196.3,196.21 1 11 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:197.19,199.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:199.17,201.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:202.3,202.55 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:202.55,204.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:205.3,205.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:206.14,207.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:208.11,209.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:210.10,211.41 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:215.59,216.16 1 3 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:216.16,218.3 1 2 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:219.2,219.25 1 1 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:220.12,221.16 1 1 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:222.14,223.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:224.10,225.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:28.90,30.16 2 7 +github.com/thebtf/engram/internal/mcp/tools_recall.go:30.16,32.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:34.2,36.16 2 7 +github.com/thebtf/engram/internal/mcp/tools_recall.go:37.16,38.38 1 5 +github.com/thebtf/engram/internal/mcp/tools_recall.go:40.16,42.140 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:44.20,46.140 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:48.17,50.142 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:52.17,56.50 1 1 +github.com/thebtf/engram/internal/mcp/tools_recall.go:56.50,62.63 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:62.63,64.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:66.4,66.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:66.45,68.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:72.4,74.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:74.25,76.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:77.4,77.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:80.3,80.101 1 1 +github.com/thebtf/engram/internal/mcp/tools_recall.go:82.18,84.141 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:86.18,88.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:88.18,90.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:91.3,91.41 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:93.17,96.50 1 1 +github.com/thebtf/engram/internal/mcp/tools_recall.go:96.50,99.59 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:99.59,101.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:102.4,104.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:104.25,106.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:107.4,107.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:110.3,110.98 1 1 +github.com/thebtf/engram/internal/mcp/tools_recall.go:112.10,116.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:125.86,126.16 1 20 +github.com/thebtf/engram/internal/mcp/tools_recall.go:126.16,128.3 1 10 +github.com/thebtf/engram/internal/mcp/tools_recall.go:129.2,130.9 2 10 +github.com/thebtf/engram/internal/mcp/tools_recall.go:130.9,132.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:133.2,133.22 1 10 +github.com/thebtf/engram/internal/mcp/tools_recall.go:133.22,135.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_recall.go:137.2,139.31 3 9 +github.com/thebtf/engram/internal/mcp/tools_recall.go:139.31,141.10 2 10 +github.com/thebtf/engram/internal/mcp/tools_recall.go:141.10,143.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:144.3,145.22 2 10 +github.com/thebtf/engram/internal/mcp/tools_recall.go:145.22,147.4 1 1 +github.com/thebtf/engram/internal/mcp/tools_recall.go:148.3,149.26 2 9 +github.com/thebtf/engram/internal/mcp/tools_recall.go:149.26,151.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:152.3,152.68 1 9 +github.com/thebtf/engram/internal/mcp/tools_recall.go:152.68,154.4 1 1 +github.com/thebtf/engram/internal/mcp/tools_recall.go:155.3,156.37 2 8 +github.com/thebtf/engram/internal/mcp/tools_recall.go:156.37,158.4 1 1 +github.com/thebtf/engram/internal/mcp/tools_recall.go:159.3,160.107 2 7 +github.com/thebtf/engram/internal/mcp/tools_recall.go:162.2,162.28 1 6 +github.com/thebtf/engram/internal/mcp/tools_recall.go:165.249,166.24 1 6 +github.com/thebtf/engram/internal/mcp/tools_recall.go:166.24,168.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:169.2,169.38 1 6 +github.com/thebtf/engram/internal/mcp/tools_recall.go:169.38,171.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:173.2,174.31 2 6 +github.com/thebtf/engram/internal/mcp/tools_recall.go:174.31,175.32 1 2 +github.com/thebtf/engram/internal/mcp/tools_recall.go:175.32,177.4 1 2 +github.com/thebtf/engram/internal/mcp/tools_recall.go:180.2,181.34 2 6 +github.com/thebtf/engram/internal/mcp/tools_recall.go:181.34,182.29 1 6 +github.com/thebtf/engram/internal/mcp/tools_recall.go:182.29,183.9 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:185.3,197.17 3 6 +github.com/thebtf/engram/internal/mcp/tools_recall.go:197.17,199.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:200.3,200.20 1 6 +github.com/thebtf/engram/internal/mcp/tools_recall.go:200.20,201.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:203.3,203.37 1 6 +github.com/thebtf/engram/internal/mcp/tools_recall.go:203.37,205.33 2 7 +github.com/thebtf/engram/internal/mcp/tools_recall.go:205.33,206.13 1 2 +github.com/thebtf/engram/internal/mcp/tools_recall.go:208.4,208.19 1 5 +github.com/thebtf/engram/internal/mcp/tools_recall.go:208.19,209.43 1 5 +github.com/thebtf/engram/internal/mcp/tools_recall.go:209.43,210.14 1 2 +github.com/thebtf/engram/internal/mcp/tools_recall.go:212.5,212.30 1 3 +github.com/thebtf/engram/internal/mcp/tools_recall.go:214.4,215.30 2 3 +github.com/thebtf/engram/internal/mcp/tools_recall.go:215.30,216.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:220.2,220.22 1 6 +github.com/thebtf/engram/internal/mcp/tools_recall.go:223.113,229.2 5 3 +github.com/thebtf/engram/internal/mcp/tools_recall.go:231.101,233.2 1 7 +github.com/thebtf/engram/internal/mcp/tools_recall.go:247.92,251.16 4 5 +github.com/thebtf/engram/internal/mcp/tools_recall.go:251.16,253.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:253.8,253.24 1 5 +github.com/thebtf/engram/internal/mcp/tools_recall.go:253.24,255.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:259.2,272.51 3 5 +github.com/thebtf/engram/internal/mcp/tools_recall.go:272.51,274.38 2 2 +github.com/thebtf/engram/internal/mcp/tools_recall.go:274.38,275.13 1 2 +github.com/thebtf/engram/internal/mcp/tools_recall.go:276.50,277.28 1 1 +github.com/thebtf/engram/internal/mcp/tools_recall.go:278.12,279.107 1 1 +github.com/thebtf/engram/internal/mcp/tools_recall.go:287.2,292.26 5 4 +github.com/thebtf/engram/internal/mcp/tools_recall.go:292.26,294.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:297.2,297.19 1 4 +github.com/thebtf/engram/internal/mcp/tools_recall.go:297.19,301.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:303.2,311.42 5 4 +github.com/thebtf/engram/internal/mcp/tools_recall.go:311.42,315.3 3 2 +github.com/thebtf/engram/internal/mcp/tools_recall.go:316.2,341.64 3 4 +github.com/thebtf/engram/internal/mcp/tools_recall.go:341.64,342.86 1 12 +github.com/thebtf/engram/internal/mcp/tools_recall.go:342.86,344.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:345.3,345.56 1 12 +github.com/thebtf/engram/internal/mcp/tools_recall.go:345.56,347.4 1 6 +github.com/thebtf/engram/internal/mcp/tools_recall.go:348.3,360.19 6 6 +github.com/thebtf/engram/internal/mcp/tools_recall.go:360.19,364.4 3 2 +github.com/thebtf/engram/internal/mcp/tools_recall.go:365.3,365.18 1 6 +github.com/thebtf/engram/internal/mcp/tools_recall.go:369.2,370.15 2 4 +github.com/thebtf/engram/internal/mcp/tools_recall.go:370.15,372.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:372.27,374.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:375.3,375.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:375.27,377.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:380.2,381.15 2 4 +github.com/thebtf/engram/internal/mcp/tools_recall.go:381.15,387.28 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:387.28,395.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:395.18,397.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:398.4,398.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:398.23,399.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:401.4,401.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:401.30,402.66 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:402.66,403.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:405.5,406.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:406.12,407.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:409.5,409.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:409.28,413.6 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:414.5,415.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:415.30,416.11 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:419.4,420.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:420.30,421.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:424.8,432.28 3 4 +github.com/thebtf/engram/internal/mcp/tools_recall.go:432.28,438.18 2 4 +github.com/thebtf/engram/internal/mcp/tools_recall.go:438.18,440.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:441.4,441.23 1 4 +github.com/thebtf/engram/internal/mcp/tools_recall.go:441.23,442.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:444.4,444.30 1 4 +github.com/thebtf/engram/internal/mcp/tools_recall.go:444.30,445.40 1 12 +github.com/thebtf/engram/internal/mcp/tools_recall.go:445.40,447.31 2 6 +github.com/thebtf/engram/internal/mcp/tools_recall.go:447.31,448.12 1 2 +github.com/thebtf/engram/internal/mcp/tools_recall.go:452.4,455.30 2 4 +github.com/thebtf/engram/internal/mcp/tools_recall.go:455.30,456.10 1 4 +github.com/thebtf/engram/internal/mcp/tools_recall.go:461.2,465.17 2 4 +github.com/thebtf/engram/internal/mcp/tools_recall.go:465.17,467.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_recall.go:469.2,470.16 2 4 +github.com/thebtf/engram/internal/mcp/tools_recall.go:470.16,472.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:473.2,473.28 1 4 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:20.79,21.43 1 3 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:21.43,23.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:24.2,24.29 1 2 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:24.29,26.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:27.2,27.25 1 2 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:30.40,63.2 1 1 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:65.68,71.25 2 2 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:71.25,74.3 2 1 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:75.2,75.67 1 2 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:78.62,83.19 3 3 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:83.19,87.3 3 2 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:88.2,88.89 1 3 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:91.101,92.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:92.22,94.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:95.2,96.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:96.18,98.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:99.2,100.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:100.16,102.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:103.2,104.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:104.16,106.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:107.2,107.119 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:110.99,111.22 1 3 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:111.22,113.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:114.2,115.18 2 3 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:115.18,117.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:118.2,119.16 2 3 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:119.16,121.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:122.2,122.51 1 2 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:122.51,124.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:125.2,126.16 2 1 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:126.16,128.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:129.2,131.15 3 1 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:131.15,132.69 1 1 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:132.69,134.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:135.3,135.58 1 1 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:137.2,137.130 1 1 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:140.102,142.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:142.16,144.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:145.2,145.64 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:145.64,147.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:148.2,148.113 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:151.109,153.16 2 1 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:153.16,155.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:156.2,157.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:157.16,159.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:160.2,161.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:161.16,163.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:164.2,164.67 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:167.107,169.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:169.16,171.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:172.2,173.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:173.16,175.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:176.2,176.107 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:176.107,178.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:179.2,179.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:180.41,181.63 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:182.41,183.95 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:184.10,185.83 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:189.111,191.16 2 3 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:191.16,193.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:194.2,195.57 2 3 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:195.57,197.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:198.2,199.23 2 3 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:199.23,201.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:202.2,203.16 2 3 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:203.16,205.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:206.2,206.17 1 3 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:206.17,208.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:209.2,209.108 1 2 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:212.63,215.2 2 2 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:217.69,219.16 2 1 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:219.16,221.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:222.2,222.79 1 1 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:225.60,227.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:227.16,229.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:230.2,230.57 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:233.137,234.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:234.49,236.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:237.2,238.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:238.16,240.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:241.2,243.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:243.16,245.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:246.2,247.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:247.16,249.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:250.2,250.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:250.22,252.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:253.2,253.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:256.142,258.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:258.16,260.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:261.2,262.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:262.16,264.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:265.2,265.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:265.47,267.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:268.2,269.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:269.16,270.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:270.50,272.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:273.3,273.89 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:275.2,275.173 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:278.157,280.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:280.16,282.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:283.2,283.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:283.47,285.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:286.2,287.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:287.16,288.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:288.50,290.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:291.3,291.89 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:293.2,293.169 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:296.104,297.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:297.22,299.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:300.2,301.61 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:301.61,303.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:303.20,304.9 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:307.2,307.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:307.19,309.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:310.2,317.8 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:320.119,322.39 2 1 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:322.39,323.81 1 2 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:323.81,325.4 1 1 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:327.2,327.17 1 1 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:330.71,332.16 2 2 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:332.16,334.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:335.2,335.23 1 2 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:17.61,105.23 2 1 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:105.23,122.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:123.2,123.14 1 1 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:126.104,127.61 1 6 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:127.61,129.3 1 2 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:130.2,130.38 1 4 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:130.38,132.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:133.2,134.16 2 3 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:134.16,136.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:137.2,138.16 2 3 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:138.16,140.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:141.2,147.107 2 3 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:147.107,149.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:150.2,151.16 2 2 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:151.16,153.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:154.2,170.19 2 2 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:170.19,172.3 1 2 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:173.2,173.25 1 2 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:176.103,177.61 1 3 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:177.61,179.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:180.2,180.38 1 3 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:180.38,182.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:183.2,184.16 2 3 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:184.16,186.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:187.2,191.106 2 3 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:191.106,193.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:194.2,195.16 2 2 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:195.16,197.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:198.2,200.31 3 2 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:200.31,207.36 2 1 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:207.36,218.4 1 1 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:219.3,220.35 2 1 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:222.2,230.4 1 2 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:233.107,234.61 1 3 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:234.61,236.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:237.2,237.38 1 3 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:237.38,239.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:240.2,241.16 2 3 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:241.16,243.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:244.2,248.110 2 3 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:248.110,250.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:251.2,252.16 2 2 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:252.16,254.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:255.2,256.33 2 2 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:256.33,266.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:267.2,275.4 1 2 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:278.108,279.61 1 2 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:279.61,281.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:282.2,282.37 1 2 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:282.37,284.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:285.2,286.16 2 2 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:286.16,288.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:289.2,290.19 2 2 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:290.19,292.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:293.2,293.104 1 1 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:293.104,295.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:296.2,297.16 2 1 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:297.16,299.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:300.2,307.16 3 1 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:307.16,309.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:310.2,311.43 2 1 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:311.43,318.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:319.2,332.22 2 1 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:332.22,334.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:335.2,335.25 1 1 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:338.108,339.62 1 2 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:339.62,341.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:342.2,342.38 1 1 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:342.38,344.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:345.2,346.9 2 1 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:346.9,348.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:349.2,350.16 2 1 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:350.16,352.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:353.2,357.16 5 1 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:357.16,359.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:360.2,370.4 1 1 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:373.109,374.62 1 1 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:374.62,376.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:377.2,377.38 1 1 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:377.38,379.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:380.2,381.9 2 1 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:381.9,383.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:384.2,385.16 2 1 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:385.16,387.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:388.2,390.32 3 1 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:390.32,392.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:393.2,394.16 2 1 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:394.16,396.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:397.2,403.4 1 1 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:406.106,407.62 1 2 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:407.62,409.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:410.2,410.38 1 2 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:410.38,412.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:413.2,414.9 2 2 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:414.9,416.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:417.2,418.16 2 2 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:418.16,420.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:421.2,423.16 3 2 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:423.16,424.41 1 1 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:424.41,434.4 1 1 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:435.3,435.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:437.2,445.4 1 1 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:483.65,484.42 1 14 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:484.42,485.39 1 13 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:485.39,487.4 1 12 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:489.2,489.85 1 2 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:489.85,491.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:492.2,492.95 1 2 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:495.102,496.38 1 10 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:496.38,498.3 1 4 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:499.2,499.58 1 6 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:499.58,501.3 1 3 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:502.2,502.90 1 3 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:505.60,508.2 2 3 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:510.66,512.26 2 5 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:512.26,514.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:515.2,515.12 1 4 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:518.69,521.33 3 1 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:521.33,523.21 2 5 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:523.21,524.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:526.3,526.34 1 5 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:526.34,527.12 1 1 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:529.3,530.30 2 4 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:532.2,532.12 1 1 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:535.63,537.19 2 5 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:537.19,539.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:540.2,541.42 2 5 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:541.42,543.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:544.2,544.57 1 4 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:544.57,546.3 1 2 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:547.2,547.54 1 2 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:547.54,549.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:550.2,550.30 1 1 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:553.70,557.2 1 4 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:559.66,561.9 2 2 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:561.9,563.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:564.2,566.17 3 1 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:566.17,568.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:569.2,569.33 1 1 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:570.103,572.30 2 1 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:573.34,574.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:575.10,576.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:580.56,581.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:581.37,583.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:584.2,584.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:584.26,586.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:586.37,587.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:589.3,589.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:591.2,591.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:594.90,602.2 1 3 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:604.68,605.71 1 4 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:605.71,607.17 2 1 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:607.17,609.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:610.3,610.26 1 1 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:612.2,613.16 2 3 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:613.16,615.3 1 3 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:616.2,617.41 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:617.41,619.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:620.2,620.78 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:623.65,625.16 2 10 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:625.16,627.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:628.2,628.17 1 10 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:628.17,630.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:631.2,631.14 1 10 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:634.51,635.16 1 5 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:635.16,637.3 1 2 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:638.2,638.37 1 3 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:641.56,642.28 1 1 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:642.28,644.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:645.2,646.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:649.92,651.29 2 2 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:651.29,653.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:654.2,654.12 1 2 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:657.86,659.29 2 2 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:659.29,661.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:662.2,662.12 1 2 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:665.94,667.29 2 2 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:667.29,669.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:670.2,670.12 1 2 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:673.98,675.29 2 2 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:675.29,677.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:678.2,678.12 1 2 +github.com/thebtf/engram/internal/mcp/tools_rules.go:17.93,18.104 1 4 +github.com/thebtf/engram/internal/mcp/tools_rules.go:18.104,20.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_rules.go:22.2,23.16 2 3 +github.com/thebtf/engram/internal/mcp/tools_rules.go:23.16,25.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:27.2,28.19 2 3 +github.com/thebtf/engram/internal/mcp/tools_rules.go:28.19,30.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:32.2,35.33 3 3 +github.com/thebtf/engram/internal/mcp/tools_rules.go:35.33,36.47 1 2 +github.com/thebtf/engram/internal/mcp/tools_rules.go:36.47,39.4 2 2 +github.com/thebtf/engram/internal/mcp/tools_rules.go:42.2,44.20 3 3 +github.com/thebtf/engram/internal/mcp/tools_rules.go:44.20,47.3 2 2 +github.com/thebtf/engram/internal/mcp/tools_rules.go:48.2,49.68 2 3 +github.com/thebtf/engram/internal/mcp/tools_rules.go:49.68,50.48 1 3 +github.com/thebtf/engram/internal/mcp/tools_rules.go:50.48,52.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:53.3,53.32 1 3 +github.com/thebtf/engram/internal/mcp/tools_rules.go:53.32,55.23 2 1 +github.com/thebtf/engram/internal/mcp/tools_rules.go:55.23,56.63 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:56.63,58.6 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:59.5,59.53 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:61.4,61.31 1 1 +github.com/thebtf/engram/internal/mcp/tools_rules.go:64.2,71.17 1 3 +github.com/thebtf/engram/internal/mcp/tools_rules.go:71.17,73.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:73.8,73.29 1 3 +github.com/thebtf/engram/internal/mcp/tools_rules.go:73.29,75.36 2 3 +github.com/thebtf/engram/internal/mcp/tools_rules.go:75.36,77.4 1 2 +github.com/thebtf/engram/internal/mcp/tools_rules.go:78.3,83.5 1 3 +github.com/thebtf/engram/internal/mcp/tools_rules.go:86.2,86.35 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:86.35,88.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:90.2,97.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:97.16,99.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:101.2,110.28 3 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:110.28,112.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:113.2,124.16 4 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:124.16,126.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:127.2,127.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:133.93,134.35 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:134.35,136.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:138.2,139.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:139.16,141.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:143.2,144.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:144.16,146.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:147.2,147.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:147.17,149.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:151.2,152.33 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:152.33,153.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:153.47,156.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:159.2,160.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:160.16,162.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:164.2,176.26 3 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:176.26,178.23 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:178.23,180.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:181.3,192.5 3 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:195.2,196.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:196.16,198.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:199.2,199.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:22.104,24.16 2 7 +github.com/thebtf/engram/internal/mcp/tools_settings.go:24.16,26.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:28.2,29.18 2 7 +github.com/thebtf/engram/internal/mcp/tools_settings.go:29.18,31.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_settings.go:33.2,33.16 1 6 +github.com/thebtf/engram/internal/mcp/tools_settings.go:34.13,35.36 1 4 +github.com/thebtf/engram/internal/mcp/tools_settings.go:36.13,37.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:38.14,39.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:40.16,41.39 1 1 +github.com/thebtf/engram/internal/mcp/tools_settings.go:42.10,43.95 1 1 +github.com/thebtf/engram/internal/mcp/tools_settings.go:51.67,53.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:57.68,58.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:58.33,60.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:61.2,61.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:67.42,69.2 1 9 +github.com/thebtf/engram/internal/mcp/tools_settings.go:74.61,76.26 2 8 +github.com/thebtf/engram/internal/mcp/tools_settings.go:76.26,78.3 1 5 +github.com/thebtf/engram/internal/mcp/tools_settings.go:79.2,79.12 1 3 +github.com/thebtf/engram/internal/mcp/tools_settings.go:85.90,86.49 1 4 +github.com/thebtf/engram/internal/mcp/tools_settings.go:86.49,88.3 1 2 +github.com/thebtf/engram/internal/mcp/tools_settings.go:90.2,91.15 2 2 +github.com/thebtf/engram/internal/mcp/tools_settings.go:91.15,93.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_settings.go:94.2,95.17 2 1 +github.com/thebtf/engram/internal/mcp/tools_settings.go:95.17,97.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_settings.go:100.2,103.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:103.16,105.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:107.2,113.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:113.12,115.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:115.18,117.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:118.3,119.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:119.20,121.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:122.3,124.48 3 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:125.8,127.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:129.2,130.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:130.16,132.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:134.2,139.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:145.90,147.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:147.15,149.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:151.2,152.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:152.16,154.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:156.2,157.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:157.16,158.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:158.47,160.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:161.3,161.56 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:164.2,170.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:170.19,173.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:173.8,175.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:176.2,176.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:181.92,183.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:183.16,185.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:187.2,188.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:188.16,190.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:192.2,200.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:200.25,207.28 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:207.28,209.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:210.3,210.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:212.2,212.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:216.93,217.52 1 1 +github.com/thebtf/engram/internal/mcp/tools_settings.go:217.52,219.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_settings.go:221.2,222.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:222.15,224.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:226.2,227.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:227.16,229.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:231.2,231.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:231.47,232.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:232.47,234.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:235.3,235.59 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:238.2,241.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:35.127,36.23 1 17 +github.com/thebtf/engram/internal/mcp/tools_state.go:36.23,38.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_state.go:39.2,40.40 2 16 +github.com/thebtf/engram/internal/mcp/tools_state.go:40.40,42.3 1 16 +github.com/thebtf/engram/internal/mcp/tools_state.go:43.2,43.37 1 16 +github.com/thebtf/engram/internal/mcp/tools_state.go:43.37,45.3 1 3 +github.com/thebtf/engram/internal/mcp/tools_state.go:46.2,46.37 1 16 +github.com/thebtf/engram/internal/mcp/tools_state.go:46.37,48.3 1 3 +github.com/thebtf/engram/internal/mcp/tools_state.go:49.2,49.15 1 16 +github.com/thebtf/engram/internal/mcp/tools_state.go:52.23,80.2 1 2 +github.com/thebtf/engram/internal/mcp/tools_state.go:82.26,140.2 1 2 +github.com/thebtf/engram/internal/mcp/tools_state.go:142.92,143.25 1 21 +github.com/thebtf/engram/internal/mcp/tools_state.go:143.25,145.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:147.2,148.49 2 21 +github.com/thebtf/engram/internal/mcp/tools_state.go:148.49,150.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:152.2,152.18 1 21 +github.com/thebtf/engram/internal/mcp/tools_state.go:153.17,154.24 1 2 +github.com/thebtf/engram/internal/mcp/tools_state.go:154.24,156.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:157.3,158.17 2 2 +github.com/thebtf/engram/internal/mcp/tools_state.go:158.17,160.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:161.3,165.5 1 2 +github.com/thebtf/engram/internal/mcp/tools_state.go:166.17,167.22 1 2 +github.com/thebtf/engram/internal/mcp/tools_state.go:167.22,169.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:170.3,170.22 1 2 +github.com/thebtf/engram/internal/mcp/tools_state.go:170.22,172.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:173.3,174.17 2 2 +github.com/thebtf/engram/internal/mcp/tools_state.go:174.17,176.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:177.3,181.5 1 2 +github.com/thebtf/engram/internal/mcp/tools_state.go:182.16,189.23 7 17 +github.com/thebtf/engram/internal/mcp/tools_state.go:189.23,191.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:192.3,192.24 1 17 +github.com/thebtf/engram/internal/mcp/tools_state.go:192.24,194.4 1 1 +github.com/thebtf/engram/internal/mcp/tools_state.go:195.3,195.39 1 16 +github.com/thebtf/engram/internal/mcp/tools_state.go:195.39,197.4 1 1 +github.com/thebtf/engram/internal/mcp/tools_state.go:198.3,207.17 3 15 +github.com/thebtf/engram/internal/mcp/tools_state.go:207.17,209.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:210.3,210.69 1 15 +github.com/thebtf/engram/internal/mcp/tools_state.go:210.69,212.4 1 11 +github.com/thebtf/engram/internal/mcp/tools_state.go:213.3,213.29 1 4 +github.com/thebtf/engram/internal/mcp/tools_state.go:214.10,215.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:219.92,220.25 1 8 +github.com/thebtf/engram/internal/mcp/tools_state.go:220.25,222.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_state.go:224.2,225.49 2 7 +github.com/thebtf/engram/internal/mcp/tools_state.go:225.49,227.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:229.2,229.18 1 7 +github.com/thebtf/engram/internal/mcp/tools_state.go:230.17,232.24 2 4 +github.com/thebtf/engram/internal/mcp/tools_state.go:232.24,234.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:235.3,236.17 2 4 +github.com/thebtf/engram/internal/mcp/tools_state.go:236.17,238.4 1 1 +github.com/thebtf/engram/internal/mcp/tools_state.go:239.3,239.59 1 3 +github.com/thebtf/engram/internal/mcp/tools_state.go:239.59,241.4 1 1 +github.com/thebtf/engram/internal/mcp/tools_state.go:242.3,242.81 1 2 +github.com/thebtf/engram/internal/mcp/tools_state.go:242.81,244.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:245.3,250.5 1 2 +github.com/thebtf/engram/internal/mcp/tools_state.go:251.17,253.22 2 3 +github.com/thebtf/engram/internal/mcp/tools_state.go:253.22,255.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:256.3,257.17 2 3 +github.com/thebtf/engram/internal/mcp/tools_state.go:257.17,259.4 1 1 +github.com/thebtf/engram/internal/mcp/tools_state.go:260.3,260.79 1 2 +github.com/thebtf/engram/internal/mcp/tools_state.go:260.79,262.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:263.3,268.5 1 2 +github.com/thebtf/engram/internal/mcp/tools_state.go:269.10,270.66 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:274.91,276.16 2 4 +github.com/thebtf/engram/internal/mcp/tools_state.go:276.16,278.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:279.2,279.67 1 4 +github.com/thebtf/engram/internal/mcp/tools_state.go:279.67,280.76 1 11 +github.com/thebtf/engram/internal/mcp/tools_state.go:280.76,282.4 1 1 +github.com/thebtf/engram/internal/mcp/tools_state.go:285.2,286.52 2 3 +github.com/thebtf/engram/internal/mcp/tools_state.go:286.52,288.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:289.2,289.19 1 3 +github.com/thebtf/engram/internal/mcp/tools_state.go:292.74,294.16 2 3 +github.com/thebtf/engram/internal/mcp/tools_state.go:294.16,296.3 1 2 +github.com/thebtf/engram/internal/mcp/tools_state.go:297.2,297.62 1 1 +github.com/thebtf/engram/internal/mcp/tools_state.go:297.62,299.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_state.go:300.2,300.68 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:303.109,304.56 1 15 +github.com/thebtf/engram/internal/mcp/tools_state.go:304.56,306.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_state.go:307.2,307.25 1 14 +github.com/thebtf/engram/internal/mcp/tools_state.go:307.25,309.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:310.2,310.81 1 14 +github.com/thebtf/engram/internal/mcp/tools_state.go:310.81,312.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_state.go:313.2,313.102 1 13 +github.com/thebtf/engram/internal/mcp/tools_state.go:313.102,315.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_state.go:316.2,316.108 1 12 +github.com/thebtf/engram/internal/mcp/tools_state.go:316.108,318.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_state.go:319.2,319.99 1 11 +github.com/thebtf/engram/internal/mcp/tools_state.go:319.99,321.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_state.go:322.2,322.99 1 10 +github.com/thebtf/engram/internal/mcp/tools_state.go:322.99,324.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_state.go:325.2,325.60 1 9 +github.com/thebtf/engram/internal/mcp/tools_state.go:325.60,327.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:328.2,328.34 1 9 +github.com/thebtf/engram/internal/mcp/tools_state.go:328.34,330.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_state.go:331.2,331.114 1 8 +github.com/thebtf/engram/internal/mcp/tools_state.go:331.114,333.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_state.go:334.2,334.66 1 7 +github.com/thebtf/engram/internal/mcp/tools_state.go:334.66,336.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:337.2,337.40 1 7 +github.com/thebtf/engram/internal/mcp/tools_state.go:337.40,339.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_state.go:340.2,340.132 1 6 +github.com/thebtf/engram/internal/mcp/tools_state.go:340.132,342.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_state.go:343.2,343.35 1 5 +github.com/thebtf/engram/internal/mcp/tools_state.go:343.35,345.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_state.go:346.2,346.12 1 4 +github.com/thebtf/engram/internal/mcp/tools_state.go:349.92,350.103 1 3 +github.com/thebtf/engram/internal/mcp/tools_state.go:350.103,352.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:354.2,355.52 2 3 +github.com/thebtf/engram/internal/mcp/tools_state.go:355.52,357.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:358.2,358.32 1 3 +github.com/thebtf/engram/internal/mcp/tools_state.go:358.32,360.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_state.go:361.2,361.19 1 2 +github.com/thebtf/engram/internal/mcp/tools_state.go:364.108,365.19 1 7 +github.com/thebtf/engram/internal/mcp/tools_state.go:365.19,367.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:368.2,369.53 2 7 +github.com/thebtf/engram/internal/mcp/tools_state.go:369.53,371.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:372.2,372.19 1 7 +github.com/thebtf/engram/internal/mcp/tools_state.go:372.19,374.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:375.2,375.39 1 7 +github.com/thebtf/engram/internal/mcp/tools_state.go:375.39,376.34 1 24 +github.com/thebtf/engram/internal/mcp/tools_state.go:376.34,378.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:380.2,380.20 1 7 +github.com/thebtf/engram/internal/mcp/tools_state.go:383.66,385.53 2 11 +github.com/thebtf/engram/internal/mcp/tools_state.go:385.53,387.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_state.go:388.2,388.19 1 10 +github.com/thebtf/engram/internal/mcp/tools_state.go:388.19,390.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:391.2,391.12 1 10 +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:10.101,12.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:12.16,14.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:16.2,18.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:19.16,20.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:21.14,22.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:23.15,24.84 1 0 +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:25.16,26.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:27.10,28.97 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:21.75,23.2 1 10 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:25.41,28.2 2 13 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:30.31,37.2 1 2 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:39.38,46.2 1 2 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:48.50,56.2 1 2 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:58.43,70.2 1 2 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:72.80,73.36 1 10 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:73.36,75.3 1 2 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:76.2,76.48 1 8 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:76.48,78.3 1 2 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:79.2,79.37 1 6 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:82.97,84.16 2 6 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:84.16,86.3 1 2 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:87.2,88.16 2 4 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:88.16,90.3 1 3 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:91.2,92.16 2 1 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:92.16,94.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:95.2,96.16 2 1 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:96.16,98.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:99.2,99.25 1 1 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:102.104,104.16 2 4 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:104.16,106.3 1 2 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:107.2,108.16 2 2 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:108.16,110.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:111.2,112.16 2 1 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:112.16,114.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:115.2,116.16 2 1 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:116.16,118.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:119.2,119.25 1 1 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:122.96,124.16 2 4 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:124.16,126.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:127.2,128.19 2 4 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:128.19,130.3 1 2 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:131.2,132.18 2 2 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:132.18,134.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:135.2,141.79 2 2 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:141.79,143.17 2 2 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:143.17,145.4 1 1 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:146.3,146.25 1 1 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:148.2,148.21 1 1 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:151.77,153.16 2 2 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:153.16,155.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:156.2,157.19 2 2 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:157.19,159.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:160.2,160.21 1 1 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:10.101,12.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:12.16,14.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:16.2,17.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:17.18,19.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:21.2,21.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:22.15,23.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:24.13,25.42 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:26.14,27.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:28.16,29.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:30.16,31.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:32.10,33.102 1 0 diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/repeat-01/create-database.stderr.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/repeat-01/create-database.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/repeat-01/create-database.stdout.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/repeat-01/create-database.stdout.log new file mode 100644 index 00000000..4b15bd57 --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/repeat-01/create-database.stdout.log @@ -0,0 +1 @@ +CREATE DATABASE diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/repeat-01/create-pgvector.stderr.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/repeat-01/create-pgvector.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/repeat-01/create-pgvector.stdout.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/repeat-01/create-pgvector.stdout.log new file mode 100644 index 00000000..d26bad14 --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/repeat-01/create-pgvector.stdout.log @@ -0,0 +1 @@ +CREATE EXTENSION diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/repeat-01/database-identity.stderr.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/repeat-01/database-identity.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/repeat-01/database-identity.stdout.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/repeat-01/database-identity.stdout.log new file mode 100644 index 00000000..47706c61 --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/repeat-01/database-identity.stdout.log @@ -0,0 +1 @@ +{"database" : "engram_prc_rg_test_4a8d23a359bc81a6_r1", "schema" : "public", "server_version" : "17.10 (Debian 17.10-1.pgdg12+1)", "user" : "engram"} diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/repeat-01/go-test-summary.json b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/repeat-01/go-test-summary.json new file mode 100644 index 00000000..fe3b9f1c --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/repeat-01/go-test-summary.json @@ -0,0 +1,3936 @@ +{ + "schema_version": 1, + "verdict": "FAIL", + "input_path": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-full-mcp\\repeat-01\\go-test.stdout.jsonl", + "fail_on_unexpected_skip": false, + "allowed_skip_identities": [], + "counts": { + "packages": 1, + "tests": 488, + "passed": 487, + "failed": 1, + "skipped": 0, + "no_tests": 0, + "zero_tests": 0, + "incomplete": 0, + "unexpected_skips": 0, + "malformed_lines": 0 + }, + "packages": [ + { + "package": "github.com/thebtf/engram/internal/mcp", + "outcome": "fail", + "elapsed_seconds": 9.626, + "last_output": "FAIL\tgithub.com/thebtf/engram/internal/mcp\t9.616s", + "tests_observed": 488 + } + ], + "tests": [ + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestAdminPurge_ActionInAdminActions", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestAdminPurge_ActionInAdminActions (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestAdminPurge_AdminAllowed", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestAdminPurge_AdminAllowed (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestAdminPurge_FlagOff_RejectsAsUnknown", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestAdminPurge_FlagOff_RejectsAsUnknown (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestAdminPurge_FlagOff_SchemaLacksConfirm", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestAdminPurge_FlagOff_SchemaLacksConfirm (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestAdminPurge_FlagOn_SchemaHasConfirm", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestAdminPurge_FlagOn_SchemaHasConfirm (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestAdminPurge_MismatchedConfirm", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestAdminPurge_MismatchedConfirm (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestAdminPurge_MissingConfirm", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestAdminPurge_MissingConfirm (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestAdminPurge_MissingProject", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestAdminPurge_MissingProject (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestAdminPurge_NilStore", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestAdminPurge_NilStore (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestAdminPurge_NoIdentityDenied", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestAdminPurge_NoIdentityDenied (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestAdminPurge_NonAdminDenied", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestAdminPurge_NonAdminDenied (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestAdminPurge_SetPurgeStore_Wiring", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestAdminPurge_SetPurgeStore_Wiring (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestAdminPurge_WhitespaceProject", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestAdminPurge_WhitespaceProject (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestAuditCreate_LogCalledOnSuccess", + "outcome": "pass", + "elapsed_seconds": 0.01, + "last_output": "--- PASS: TestAuditCreate_LogCalledOnSuccess (0.01s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestAuditCreate_SkippedWhenAuditStoreNil", + "outcome": "pass", + "elapsed_seconds": 0.01, + "last_output": "--- PASS: TestAuditCreate_SkippedWhenAuditStoreNil (0.01s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestAuditCreate_SkippedWhenFlagOff", + "outcome": "pass", + "elapsed_seconds": 0.03, + "last_output": "--- PASS: TestAuditCreate_SkippedWhenFlagOff (0.03s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestAuditDelete_LogCalledWithBeforeState", + "outcome": "pass", + "elapsed_seconds": 0.01, + "last_output": "--- PASS: TestAuditDelete_LogCalledWithBeforeState (0.01s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestAuditDelete_SkippedWhenFlagOff", + "outcome": "pass", + "elapsed_seconds": 0.03, + "last_output": "--- PASS: TestAuditDelete_SkippedWhenFlagOff (0.03s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestAuditEdit_LogCalledWithBeforeAndAfterState", + "outcome": "pass", + "elapsed_seconds": 0.01, + "last_output": "--- PASS: TestAuditEdit_LogCalledWithBeforeAndAfterState (0.01s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestAuditEdit_SkippedWhenFlagOff", + "outcome": "pass", + "elapsed_seconds": 0.03, + "last_output": "--- PASS: TestAuditEdit_SkippedWhenFlagOff (0.03s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestAuditSupersede_LogCalledWithSupersededID", + "outcome": "pass", + "elapsed_seconds": 0.01, + "last_output": "--- PASS: TestAuditSupersede_LogCalledWithSupersededID (0.01s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestAuditSupersede_SkippedWhenFlagOff", + "outcome": "pass", + "elapsed_seconds": 0.03, + "last_output": "--- PASS: TestAuditSupersede_SkippedWhenFlagOff (0.03s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestBulkDelete_DryRun_NilFacade", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestBulkDelete_DryRun_NilFacade (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestBulkOps_FlagOff_NotAdvertised", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestBulkOps_FlagOff_NotAdvertised (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestBulkPromote_DryRun_NilFacade", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestBulkPromote_DryRun_NilFacade (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestBulkPromote_NonAdmin_ReturnsAdminRequired", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestBulkPromote_NonAdmin_ReturnsAdminRequired (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestBulkSupersede_DryRun_NilFacade", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestBulkSupersede_DryRun_NilFacade (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestCallTool_CheckSystemHealth_NilStores", + "outcome": "pass", + "elapsed_seconds": 0.13, + "last_output": "--- PASS: TestCallTool_CheckSystemHealth_NilStores (0.13s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestCallTool_FindByFile_Removed", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestCallTool_FindByFile_Removed (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestCallTool_GetMemoryStats_NilStores", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestCallTool_GetMemoryStats_NilStores (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestCallTool_ParameterValidation_Table", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestCallTool_ParameterValidation_Table (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestCallTool_ParameterValidation_Table/analyze_search_patterns/{invalid", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestCallTool_ParameterValidation_Table/analyze_search_patterns/{invalid (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestCallTool_ParameterValidation_Table/find_similar_observations/{}", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestCallTool_ParameterValidation_Table/find_similar_observations/{} (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestCallTool_ParameterValidation_Table/find_similar_observations/{invalid", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestCallTool_ParameterValidation_Table/find_similar_observations/{invalid (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestCallTool_UnknownToolNames_Table", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestCallTool_UnknownToolNames_Table (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestCallTool_UnknownToolNames_Table/invalid_tool", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestCallTool_UnknownToolNames_Table/invalid_tool (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestCallTool_UnknownToolNames_Table/nonexistent", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestCallTool_UnknownToolNames_Table/nonexistent (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestCallTool_UnknownToolNames_Table/search_v2", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestCallTool_UnknownToolNames_Table/search_v2 (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestCallTool_UnknownToolNames_Table/timeline_x", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestCallTool_UnknownToolNames_Table/timeline_x (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestCallTool_UnknownToolReturnsError", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestCallTool_UnknownToolReturnsError (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestCandidateTools_ExposeCR008ReviewLoopContracts", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestCandidateTools_ExposeCR008ReviewLoopContracts (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestCheckSystemHealth_VectorSubsystem", + "outcome": "pass", + "elapsed_seconds": 0.25, + "last_output": "--- PASS: TestCheckSystemHealth_VectorSubsystem (0.25s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestCheckSystemHealth_VectorSubsystem/vnext_disabled", + "outcome": "pass", + "elapsed_seconds": 0.13, + "last_output": "--- PASS: TestCheckSystemHealth_VectorSubsystem/vnext_disabled (0.13s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestCheckSystemHealth_VectorSubsystem/vnext_enabled", + "outcome": "pass", + "elapsed_seconds": 0.13, + "last_output": "--- PASS: TestCheckSystemHealth_VectorSubsystem/vnext_enabled (0.13s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestCodebaseSearch_FlagOff_ReturnsError", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestCodebaseSearch_FlagOff_ReturnsError (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestCodeIntelFlag_Off_ToolsAbsentFromList", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestCodeIntelFlag_Off_ToolsAbsentFromList (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestCodeIntelFlag_On_ServerAdvertisesSearchNotStatus", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestCodeIntelFlag_On_ServerAdvertisesSearchNotStatus (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestCodeIntelFlag_On_StoreNil_ToolsAbsentFromList", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestCodeIntelFlag_On_StoreNil_ToolsAbsentFromList (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestCoerceBool", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestCoerceBool (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestCoerceBool/false", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestCoerceBool/false (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestCoerceBool/float_0", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestCoerceBool/float_0 (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestCoerceBool/float_1", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestCoerceBool/float_1 (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestCoerceBool/invalid_string", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestCoerceBool/invalid_string (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestCoerceBool/nil", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestCoerceBool/nil (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestCoerceBool/string_false", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestCoerceBool/string_false (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestCoerceBool/string_true", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestCoerceBool/string_true (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestCoerceBool/true", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestCoerceBool/true (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestCoerceFloat64", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestCoerceFloat64 (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestCoerceFloat64/float64", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestCoerceFloat64/float64 (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestCoerceFloat64/integer_string", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestCoerceFloat64/integer_string (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestCoerceFloat64/invalid_string", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestCoerceFloat64/invalid_string (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestCoerceFloat64/json.Number", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestCoerceFloat64/json.Number (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestCoerceFloat64/nil", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestCoerceFloat64/nil (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestCoerceFloat64/string", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestCoerceFloat64/string (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestCoerceInt", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestCoerceInt (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestCoerceInt/bool", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestCoerceInt/bool (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestCoerceInt/float64", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestCoerceInt/float64 (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestCoerceInt/float64_with_decimal", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestCoerceInt/float64_with_decimal (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestCoerceInt/Inf", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestCoerceInt/Inf (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestCoerceInt/json.Number_float", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestCoerceInt/json.Number_float (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestCoerceInt/json.Number_int", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestCoerceInt/json.Number_int (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestCoerceInt/NaN", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestCoerceInt/NaN (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestCoerceInt/negative_float", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestCoerceInt/negative_float (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestCoerceInt/negative_overflow", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestCoerceInt/negative_overflow (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestCoerceInt/nil", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestCoerceInt/nil (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestCoerceInt/overflow_float64", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestCoerceInt/overflow_float64 (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestCoerceInt/string_float", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestCoerceInt/string_float (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestCoerceInt/string_int", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestCoerceInt/string_int (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestCoerceInt/string_non-numeric", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestCoerceInt/string_non-numeric (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestCoerceInt/zero", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestCoerceInt/zero (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestCoerceInt64", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestCoerceInt64 (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestCoerceInt64/float64", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestCoerceInt64/float64 (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestCoerceInt64/invalid_string", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestCoerceInt64/invalid_string (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestCoerceInt64/json.Number", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestCoerceInt64/json.Number (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestCoerceInt64/json.Number_float", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestCoerceInt64/json.Number_float (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestCoerceInt64/nil", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestCoerceInt64/nil (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestCoerceInt64/string", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestCoerceInt64/string (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestCoerceInt64/string_float", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestCoerceInt64/string_float (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestCoerceInt64Slice", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestCoerceInt64Slice (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestCoerceInt64Slice/float64_array", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestCoerceInt64Slice/float64_array (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestCoerceInt64Slice/mixed_array", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestCoerceInt64Slice/mixed_array (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestCoerceInt64Slice/nil", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestCoerceInt64Slice/nil (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestCoerceInt64Slice/not_array", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestCoerceInt64Slice/not_array (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestCoerceInt64Slice/string_array", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestCoerceInt64Slice/string_array (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestCoerceInt64Slice/with_zeros", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestCoerceInt64Slice/with_zeros (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestCoerceString", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestCoerceString (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestCoerceString/bool", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestCoerceString/bool (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestCoerceString/float64", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestCoerceString/float64 (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestCoerceString/json.Number", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestCoerceString/json.Number (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestCoerceString/nil", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestCoerceString/nil (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestCoerceString/string", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestCoerceString/string (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestCoerceString/wrong_type", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestCoerceString/wrong_type (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestCoerceStringSlice", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestCoerceStringSlice (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestCoerceStringSlice/array_of_strings", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestCoerceStringSlice/array_of_strings (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestCoerceStringSlice/empty_string", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestCoerceStringSlice/empty_string (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestCoerceStringSlice/mixed_array", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestCoerceStringSlice/mixed_array (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestCoerceStringSlice/nil", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestCoerceStringSlice/nil (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestCoerceStringSlice/single_string", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestCoerceStringSlice/single_string (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestDryRun_Integration_StoreMemory_ZeroSideEffects", + "outcome": "pass", + "elapsed_seconds": 0.14, + "last_output": "--- PASS: TestDryRun_Integration_StoreMemory_ZeroSideEffects (0.14s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestEC_F1_HandleRecallSearch_FlagOff_BackwardCompat_T007", + "outcome": "pass", + "elapsed_seconds": 0.12, + "last_output": "--- PASS: TestEC_F1_HandleRecallSearch_FlagOff_BackwardCompat_T007 (0.12s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestEC_F1_TagDerivedBackfill_T007", + "outcome": "pass", + "elapsed_seconds": 0.15, + "last_output": "--- PASS: TestEC_F1_TagDerivedBackfill_T007 (0.15s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestEditMemory_AuditSourceSessionIDEmptyWhenNoSession", + "outcome": "pass", + "elapsed_seconds": 0.01, + "last_output": "--- PASS: TestEditMemory_AuditSourceSessionIDEmptyWhenNoSession (0.01s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestEditMemory_AuditSourceSessionIDFromContext", + "outcome": "pass", + "elapsed_seconds": 0.01, + "last_output": "--- PASS: TestEditMemory_AuditSourceSessionIDFromContext (0.01s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestEditMemory_CrossProjectAllowedWhenEnforcementOff", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestEditMemory_CrossProjectAllowedWhenEnforcementOff (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestEditMemory_CrossProjectDenied", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestEditMemory_CrossProjectDenied (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestEditMemory_DomainOwnedCrossPrincipalDenied", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestEditMemory_DomainOwnedCrossPrincipalDenied (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestEditMemory_EmptyProjectContextDeniedWhenEnforced", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestEditMemory_EmptyProjectContextDeniedWhenEnforced (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestEditMemory_HardLimitRejected", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestEditMemory_HardLimitRejected (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestEditMemory_SameProjectAllowed", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestEditMemory_SameProjectAllowed (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestEditMemory_SecretRedacted", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestEditMemory_SecretRedacted (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestEditMemory_SoftLimitTruncates", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestEditMemory_SoftLimitTruncates (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestEditMemory_TagsAbsent_KeepsExisting", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestEditMemory_TagsAbsent_KeepsExisting (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestEditMemory_TagsExplicitEmpty_ClearsTags", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestEditMemory_TagsExplicitEmpty_ClearsTags (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestEditMemory_TagsNonEmpty_ReplacesTags", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestEditMemory_TagsNonEmpty_ReplacesTags (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestError_Marshal_Table", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestError_Marshal_Table (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestError_Marshal_Table/method_not_found", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestError_Marshal_Table/method_not_found (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestError_Marshal_Table/nil_data_omitted", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestError_Marshal_Table/nil_data_omitted (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestError_Marshal_Table/parse_error", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestError_Marshal_Table/parse_error (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestError_Marshal_Table/with_data", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestError_Marshal_Table/with_data (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestError_NilData_NotInOutput", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestError_NilData_NotInOutput (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestExperienceHistoryToolsAdvertisedWhenProviderWired", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestExperienceHistoryToolsAdvertisedWhenProviderWired (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestExtractProjectFromHeader", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestExtractProjectFromHeader (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestExtractProjectFromHeader_Missing", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestExtractProjectFromHeader_Missing (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestGetAmbientHintsDrainsBoundedSafeHints", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestGetAmbientHintsDrainsBoundedSafeHints (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestGetAmbientHintsReturnsEmptyForDisabledStaleAndEmptyQueue", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestGetAmbientHintsReturnsEmptyForDisabledStaleAndEmptyQueue (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestGetAmbientHintsReturnsEmptyForDisabledStaleAndEmptyQueue/disabled_flag", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestGetAmbientHintsReturnsEmptyForDisabledStaleAndEmptyQueue/disabled_flag (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestGetAmbientHintsReturnsEmptyForDisabledStaleAndEmptyQueue/empty_queue", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestGetAmbientHintsReturnsEmptyForDisabledStaleAndEmptyQueue/empty_queue (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestGetAmbientHintsReturnsEmptyForDisabledStaleAndEmptyQueue/stale_queue", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestGetAmbientHintsReturnsEmptyForDisabledStaleAndEmptyQueue/stale_queue (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestGetAmbientHintsToolAdvertisedOnlyWhenS3FlagAndQueuePresent", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestGetAmbientHintsToolAdvertisedOnlyWhenS3FlagAndQueuePresent (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestGetAmbientHintsToolAdvertisedOnlyWhenS3FlagAndQueuePresent/master_off_hides_tool", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestGetAmbientHintsToolAdvertisedOnlyWhenS3FlagAndQueuePresent/master_off_hides_tool (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestGetAmbientHintsToolAdvertisedOnlyWhenS3FlagAndQueuePresent/master+s3+queue_advertises_tool", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestGetAmbientHintsToolAdvertisedOnlyWhenS3FlagAndQueuePresent/master+s3+queue_advertises_tool (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestGetAmbientHintsToolAdvertisedOnlyWhenS3FlagAndQueuePresent/missing_queue_hides_tool", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestGetAmbientHintsToolAdvertisedOnlyWhenS3FlagAndQueuePresent/missing_queue_hides_tool (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestGetAmbientHintsToolAdvertisedOnlyWhenS3FlagAndQueuePresent/s3_off_hides_tool", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestGetAmbientHintsToolAdvertisedOnlyWhenS3FlagAndQueuePresent/s3_off_hides_tool (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestGetMemoryBrief_PrincipalScopedResponseAndRequest", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestGetMemoryBrief_PrincipalScopedResponseAndRequest (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestGetMemoryBrief_PrincipalScopeRequiresQueryService", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestGetMemoryBrief_PrincipalScopeRequiresQueryService (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestGetMemoryBrief_PrincipalScopeSchemaAdvertised", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestGetMemoryBrief_PrincipalScopeSchemaAdvertised (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestGetMemoryStats_NilDB_NoMemoryOrVnextSections", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestGetMemoryStats_NilDB_NoMemoryOrVnextSections (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestGetStateToolProjectDoesNotRequirePrincipal", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestGetStateToolProjectDoesNotRequirePrincipal (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestGetStateToolRejectsFilesystemFallbackOption", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestGetStateToolRejectsFilesystemFallbackOption (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestGetStateToolResumeDoesNotInjectContextProjectWhenOmitted", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestGetStateToolResumeDoesNotInjectContextProjectWhenOmitted (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestGetStateToolResumeRejectsAdditionalIdentityMismatches", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestGetStateToolResumeRejectsAdditionalIdentityMismatches (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestGetStateToolResumeRejectsAdditionalIdentityMismatches/goal_mismatch", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestGetStateToolResumeRejectsAdditionalIdentityMismatches/goal_mismatch (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestGetStateToolResumeRejectsAdditionalIdentityMismatches/missing_next_action_command", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestGetStateToolResumeRejectsAdditionalIdentityMismatches/missing_next_action_command (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestGetStateToolResumeRejectsAdditionalIdentityMismatches/missing_next_action_kind", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestGetStateToolResumeRejectsAdditionalIdentityMismatches/missing_next_action_kind (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestGetStateToolResumeRejectsAdditionalIdentityMismatches/missing_next_verification_command", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestGetStateToolResumeRejectsAdditionalIdentityMismatches/missing_next_verification_command (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestGetStateToolResumeRejectsAdditionalIdentityMismatches/missing_next_verification_kind", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestGetStateToolResumeRejectsAdditionalIdentityMismatches/missing_next_verification_kind (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestGetStateToolResumeRejectsAdditionalIdentityMismatches/project_mismatch", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestGetStateToolResumeRejectsAdditionalIdentityMismatches/project_mismatch (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestGetStateToolResumeRejectsAdditionalIdentityMismatches/session_mismatch", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestGetStateToolResumeRejectsAdditionalIdentityMismatches/session_mismatch (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestGetStateToolResumeRejectsAdditionalIdentityMismatches/task_mismatch", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestGetStateToolResumeRejectsAdditionalIdentityMismatches/task_mismatch (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestGetStateToolResumeRejectsFallbackMasqueradingAsNative", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestGetStateToolResumeRejectsFallbackMasqueradingAsNative (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestGetStateToolResumeRejectsMissingEvidenceRefs", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestGetStateToolResumeRejectsMissingEvidenceRefs (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestGetStateToolResumeRejectsPacketIdentityMismatch", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestGetStateToolResumeRejectsPacketIdentityMismatch (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestGetStateToolResumeRequiresPrincipal", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestGetStateToolResumeRequiresPrincipal (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestGetStateToolResumeReturnsNativePacket", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestGetStateToolResumeReturnsNativePacket (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestGetStateToolResumeSupportsExplicitProjectOnlyScope", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestGetStateToolResumeSupportsExplicitProjectOnlyScope (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestGetStateToolSessionDoesNotRequirePrincipal", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestGetStateToolSessionDoesNotRequirePrincipal (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestGovernanceTools_AdminGate_NoIdentity", + "outcome": "pass", + "elapsed_seconds": 0.01, + "last_output": "--- PASS: TestGovernanceTools_AdminGate_NoIdentity (0.01s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestGovernanceTools_AdminGate_NoIdentity/list_snapshots", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestGovernanceTools_AdminGate_NoIdentity/list_snapshots (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestGovernanceTools_AdminGate_NoIdentity/pin_snapshot", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestGovernanceTools_AdminGate_NoIdentity/pin_snapshot (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestGovernanceTools_AdminGate_NoIdentity/redaction_rules_status", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestGovernanceTools_AdminGate_NoIdentity/redaction_rules_status (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestGovernanceTools_AdminGate_NoIdentity/rollback_snapshot", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestGovernanceTools_AdminGate_NoIdentity/rollback_snapshot (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestGovernanceTools_AdminGate_ReadOnlyCaller", + "outcome": "pass", + "elapsed_seconds": 0.01, + "last_output": "--- PASS: TestGovernanceTools_AdminGate_ReadOnlyCaller (0.01s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestGovernanceTools_ListSnapshotsSchemaIncludesReviewActionOpTypes", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestGovernanceTools_ListSnapshotsSchemaIncludesReviewActionOpTypes (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestGovernanceTools_NotAdvertisedWhenFlagOff", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestGovernanceTools_NotAdvertisedWhenFlagOff (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestGovernanceTools_RedactionRulesStatus_NoAdminRequired_WithAdmin", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestGovernanceTools_RedactionRulesStatus_NoAdminRequired_WithAdmin (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestGraphTool_T014_AddEdgeGuardsOffline", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestGraphTool_T014_AddEdgeGuardsOffline (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestGraphTool_T014_AddEdgeGuardsOffline/duplicate_edge_rejected_before_create", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestGraphTool_T014_AddEdgeGuardsOffline/duplicate_edge_rejected_before_create (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestGraphTool_T014_AddEdgeGuardsOffline/memory_orphan_edge_rejected_before_create", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestGraphTool_T014_AddEdgeGuardsOffline/memory_orphan_edge_rejected_before_create (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestGraphTool_T014_AddEdgeGuardsOffline/orphan_edge_rejected_before_create", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestGraphTool_T014_AddEdgeGuardsOffline/orphan_edge_rejected_before_create (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestGraphTool_T014_AddEdgeGuardsOffline/valid_edge_creates_exactly_once", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestGraphTool_T014_AddEdgeGuardsOffline/valid_edge_creates_exactly_once (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestGraphTool_T014_AddNodeAction", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestGraphTool_T014_AddNodeAction (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestGraphTool_T014_AddNodeOffline", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestGraphTool_T014_AddNodeOffline (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestGraphTool_T014_AddNodeOffline/empty_external_ref_returns_error", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestGraphTool_T014_AddNodeOffline/empty_external_ref_returns_error (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestGraphTool_T014_AddNodeOffline/empty_project_returns_error", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestGraphTool_T014_AddNodeOffline/empty_project_returns_error (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestGraphTool_T014_AddNodeOffline/invalid_node_type_returns_error_containing_invalid_node_type:", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestGraphTool_T014_AddNodeOffline/invalid_node_type_returns_error_containing_invalid_node_type: (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestGraphTool_T014_AddNodeOffline/valid_input_store_receives_correct_node", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestGraphTool_T014_AddNodeOffline/valid_input_store_receives_correct_node (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestGraphTool_T014_ArgsShape", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestGraphTool_T014_ArgsShape (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestGraphTool_T014_GetEdgesNodeTypeFilter", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestGraphTool_T014_GetEdgesNodeTypeFilter (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestGraphTool_T014_InvalidNodeTypeRejects", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestGraphTool_T014_InvalidNodeTypeRejects (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestGraphTool_T014_NodeTypeFilterOffline", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestGraphTool_T014_NodeTypeFilterOffline (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestHandleAnalyzeSearchPatterns_InvalidJSON", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestHandleAnalyzeSearchPatterns_InvalidJSON (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestHandleCheckSystemHealth_NilStores_StructuredResponse", + "outcome": "pass", + "elapsed_seconds": 0.13, + "last_output": "--- PASS: TestHandleCheckSystemHealth_NilStores_StructuredResponse (0.13s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestHandleExperienceHistoryReadRejectsInvalidArchiveTrigger", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestHandleExperienceHistoryReadRejectsInvalidArchiveTrigger (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestHandleExperienceHistoryReadReturnsBlockedApplicabilityEnvelope", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestHandleExperienceHistoryReadReturnsBlockedApplicabilityEnvelope (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestHandleFindSimilarObservations_EmptyResultInV5", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestHandleFindSimilarObservations_EmptyResultInV5 (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestHandleFindSimilarObservations_Validation", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestHandleFindSimilarObservations_Validation (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestHandleGetCandidate_EmptyIDReturnsError", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestHandleGetCandidate_EmptyIDReturnsError (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestHandleGetMemoryStats_NilStores_ValidJSON", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestHandleGetMemoryStats_NilStores_ValidJSON (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestHandleInitialize_CapabilitiesPresent", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestHandleInitialize_CapabilitiesPresent (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestHandleInitialize_IDEchoed", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestHandleInitialize_IDEchoed (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestHandleInitialize_ProtocolAndVersion", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestHandleInitialize_ProtocolAndVersion (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestHandleIssueCloseAcceptsExplicitLegacySourceProject", + "outcome": "pass", + "elapsed_seconds": 0.18, + "last_output": "--- PASS: TestHandleIssueCloseAcceptsExplicitLegacySourceProject (0.18s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestHandleIssueCloseDoesNotLetExplicitDashboardBypassContext", + "outcome": "pass", + "elapsed_seconds": 0.16, + "last_output": "--- PASS: TestHandleIssueCloseDoesNotLetExplicitDashboardBypassContext (0.16s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestHandleListCandidates_EmptyProjectReturnsError", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestHandleListCandidates_EmptyProjectReturnsError (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestHandleListCandidates_FlagOffReturnsError", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestHandleListCandidates_FlagOffReturnsError (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestHandleRequest_CapabilityStubs", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestHandleRequest_CapabilityStubs (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestHandleRequest_CapabilityStubs/completion/complete", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestHandleRequest_CapabilityStubs/completion/complete (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestHandleRequest_CapabilityStubs/prompts/list", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestHandleRequest_CapabilityStubs/prompts/list (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestHandleRequest_CapabilityStubs/resources/list", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestHandleRequest_CapabilityStubs/resources/list (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestHandleRequest_CapabilityStubs/resources/templates/list", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestHandleRequest_CapabilityStubs/resources/templates/list (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestHandleRequest_GetAmbientHintsDispatchesThroughToolsCall", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestHandleRequest_GetAmbientHintsDispatchesThroughToolsCall (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestHandleRequest_GetAmbientHintsUnknownToolRegressionGuard", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestHandleRequest_GetAmbientHintsUnknownToolRegressionGuard (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestHandleRequest_InitializeRoute", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestHandleRequest_InitializeRoute (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestHandleRequest_NotificationReturnsNil", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestHandleRequest_NotificationReturnsNil (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestHandleRequest_ToolsListRoute", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestHandleRequest_ToolsListRoute (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestHandleRequest_UnknownMethodError", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestHandleRequest_UnknownMethodError (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestHandleReviewPacketPreviewAction_UnsupportedActionRejectedBeforeStoreMutation", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestHandleReviewPacketPreviewAction_UnsupportedActionRejectedBeforeStoreMutation (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestHandleReviewQueueRead_LimitOverMaxReturnsError", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestHandleReviewQueueRead_LimitOverMaxReturnsError (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestHandleReviewQueueRead_RiskyOnlyKeepsUnfilteredMetricsAndBacklog", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestHandleReviewQueueRead_RiskyOnlyKeepsUnfilteredMetricsAndBacklog (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestHandleReviewQueueRead_UnsupportedPacketTypeReturnsGatedPayload", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestHandleReviewQueueRead_UnsupportedPacketTypeReturnsGatedPayload (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestHandleTemporalTruthRefreshRequiresProject", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestHandleTemporalTruthRefreshRequiresProject (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestHandleTemporalTruthRefreshReturnsAdmissionResult", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestHandleTemporalTruthRefreshReturnsAdmissionResult (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestHandleTemporalTruthRejectsInvalidAsOf", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestHandleTemporalTruthRejectsInvalidAsOf (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestHandleTemporalTruthRequiresProject", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestHandleTemporalTruthRequiresProject (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestHandleTemporalTruthRequiresProject/blank_project", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestHandleTemporalTruthRequiresProject/blank_project (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestHandleTemporalTruthRequiresProject/missing_project", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestHandleTemporalTruthRequiresProject/missing_project (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestHandleTemporalTruthReturnsBoundedResponse", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestHandleTemporalTruthReturnsBoundedResponse (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestHandleToolsCall_EmptyParams", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestHandleToolsCall_EmptyParams (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestHandleToolsCall_InvalidParamsJSON", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestHandleToolsCall_InvalidParamsJSON (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestHandleToolsCall_UnknownTool", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestHandleToolsCall_UnknownTool (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestHandleToolsList_AllToolSchemasHaveTypeAndProperties", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestHandleToolsList_AllToolSchemasHaveTypeAndProperties (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestHandleToolsList_DefaultCountMatchesPrimary", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestHandleToolsList_DefaultCountMatchesPrimary (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestHandleToolsList_FeedbackSchemaCorrect", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestHandleToolsList_FeedbackSchemaCorrect (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestHandleToolsList_IncludeAllContainsLegacy", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestHandleToolsList_IncludeAllContainsLegacy (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestHandleToolsList_IncludeAllReturnsMore", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestHandleToolsList_IncludeAllReturnsMore (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestHandleToolsList_PrimaryToolsPresent", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestHandleToolsList_PrimaryToolsPresent (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestHandleToolsList_RemovedToolsAbsent", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestHandleToolsList_RemovedToolsAbsent (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestHandleToolsList_SchemaCompliance_NoForbiddenTopLevelKeys", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestHandleToolsList_SchemaCompliance_NoForbiddenTopLevelKeys (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestHandleToolsList_StoreTypeEnumCorrect", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestHandleToolsList_StoreTypeEnumCorrect (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestHybridTG3_ConfidenceMin_FloorEnforced_T022", + "outcome": "fail", + "elapsed_seconds": 0.18, + "last_output": "--- FAIL: TestHybridTG3_ConfidenceMin_FloorEnforced_T022 (0.18s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestHybridTG3_IncludeSuperseded_False_NoError_T022c", + "outcome": "pass", + "elapsed_seconds": 0.13, + "last_output": "--- PASS: TestHybridTG3_IncludeSuperseded_False_NoError_T022c (0.13s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestHybridTG3_IncludeSuperseded_StructuredError_T022b", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestHybridTG3_IncludeSuperseded_StructuredError_T022b (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestIsSecretSettingKey", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestIsSecretSettingKey (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestJSONRPCErrorCodes_Table", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestJSONRPCErrorCodes_Table (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestJSONRPCErrorCodes_Table/Internal_error", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestJSONRPCErrorCodes_Table/Internal_error (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestJSONRPCErrorCodes_Table/Invalid_params", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestJSONRPCErrorCodes_Table/Invalid_params (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestJSONRPCErrorCodes_Table/Invalid_Request", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestJSONRPCErrorCodes_Table/Invalid_Request (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestJSONRPCErrorCodes_Table/Method_not_found", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestJSONRPCErrorCodes_Table/Method_not_found (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestJSONRPCErrorCodes_Table/Parse_error", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestJSONRPCErrorCodes_Table/Parse_error (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestKnowAbout_T005_ContextProjectFallbackAndLimitClamp", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestKnowAbout_T005_ContextProjectFallbackAndLimitClamp (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestKnowAbout_T005_DisabledS2NotAdvertised", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestKnowAbout_T005_DisabledS2NotAdvertised (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestKnowAbout_T005_IndexErrorsSurfaceAsToolErrors", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestKnowAbout_T005_IndexErrorsSurfaceAsToolErrors (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestKnowAbout_T005_JSONNeverContainsContentKeysOrMemoryBodies", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestKnowAbout_T005_JSONNeverContainsContentKeysOrMemoryBodies (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestKnowAbout_T005_MissingTopicReturnsEmptyIndexPacket", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestKnowAbout_T005_MissingTopicReturnsEmptyIndexPacket (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestKnowAbout_T005_PopulatedTopicReturnsContentFreeIndexHits", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestKnowAbout_T005_PopulatedTopicReturnsContentFreeIndexHits (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestKnowAbout_T005_ProjectFallbackFailureRequiresProjectScope", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestKnowAbout_T005_ProjectFallbackFailureRequiresProjectScope (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestKnowAbout_T005_RealStoreCanonicalShapeAndMissingTopicEmptyPacket", + "outcome": "pass", + "elapsed_seconds": 0.15, + "last_output": "--- PASS: TestKnowAbout_T005_RealStoreCanonicalShapeAndMissingTopicEmptyPacket (0.15s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestKnowAbout_T005_RequiresPrincipalScopedIdentity", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestKnowAbout_T005_RequiresPrincipalScopedIdentity (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestKnowAbout_T005_RequiresPrincipalScopedIdentity/legacy_client_keycard_without_principal_is_rejected", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestKnowAbout_T005_RequiresPrincipalScopedIdentity/legacy_client_keycard_without_principal_is_rejected (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestKnowAbout_T005_RequiresPrincipalScopedIdentity/master_token_without_principal_is_rejected", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestKnowAbout_T005_RequiresPrincipalScopedIdentity/master_token_without_principal_is_rejected (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestKnowAbout_T014_ToolListRequiresMasterAndS2Flags", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestKnowAbout_T014_ToolListRequiresMasterAndS2Flags (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestKnowAbout_T014_ToolListRequiresMasterAndS2Flags/master_and_s2_enabled_advertises_know_about", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestKnowAbout_T014_ToolListRequiresMasterAndS2Flags/master_and_s2_enabled_advertises_know_about (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestKnowAbout_T014_ToolListRequiresMasterAndS2Flags/master_disabled_suppresses_know_about_even_when_s2_flag_is_set", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestKnowAbout_T014_ToolListRequiresMasterAndS2Flags/master_disabled_suppresses_know_about_even_when_s2_flag_is_set (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestKnowAbout_T014_ToolListRequiresMasterAndS2Flags/s2_disabled_suppresses_know_about_even_when_master_is_set", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestKnowAbout_T014_ToolListRequiresMasterAndS2Flags/s2_disabled_suppresses_know_about_even_when_master_is_set (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestLegacyWriteGateDomainPolicy_DomainOwnedCandidateHidden", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestLegacyWriteGateDomainPolicy_DomainOwnedCandidateHidden (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestMemoryStoreSignificanceUpdaterPersistsChangedFields", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestMemoryStoreSignificanceUpdaterPersistsChangedFields (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestMemoryStoreSignificanceUpdaterPersistsChangedFields/not_useful_persists_beta_and_resets_streak", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestMemoryStoreSignificanceUpdaterPersistsChangedFields/not_useful_persists_beta_and_resets_streak (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestMemoryStoreSignificanceUpdaterPersistsChangedFields/useful_persists_alpha_citation_and_streak", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestMemoryStoreSignificanceUpdaterPersistsChangedFields/useful_persists_alpha_citation_and_streak (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestNewServer_CreatesWithVersion", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestNewServer_CreatesWithVersion (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestNewServer_HasStdinStdout", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestNewServer_HasStdinStdout (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestParseArgs", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestParseArgs (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestParseArgs/empty_bytes", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestParseArgs/empty_bytes (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestParseArgs/empty_object", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestParseArgs/empty_object (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestParseArgs/invalid_json", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestParseArgs/invalid_json (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestParseArgs/nil_args", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestParseArgs/nil_args (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestParseArgs/valid_object", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestParseArgs/valid_object (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestProjectFromContext_Empty", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestProjectFromContext_Empty (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestProjectFromContext_RoundTrip", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestProjectFromContext_RoundTrip (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestPromoteCandidate_DryRun_NilStore", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestPromoteCandidate_DryRun_NilStore (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestQueryPrincipalMemory_ResponseAndValidation", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestQueryPrincipalMemory_ResponseAndValidation (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestQueryPrincipalMemory_ResponseAndValidation/rejects_invalid_principal_kind", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestQueryPrincipalMemory_ResponseAndValidation/rejects_invalid_principal_kind (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestQueryPrincipalMemory_ResponseAndValidation/rejects_non-admin_cross-principal_private_widening", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestQueryPrincipalMemory_ResponseAndValidation/rejects_non-admin_cross-principal_private_widening (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestQueryPrincipalMemory_ResponseAndValidation/rejects_oversized_limit_clearly", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestQueryPrincipalMemory_ResponseAndValidation/rejects_oversized_limit_clearly (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestQueryPrincipalMemory_ResponseAndValidation/returns_attributed_bounded_principal_memory_response", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestQueryPrincipalMemory_ResponseAndValidation/returns_attributed_bounded_principal_memory_response (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestQueryPrincipalMemory_ServiceErrorsPropagate", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestQueryPrincipalMemory_ServiceErrorsPropagate (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestQueryPrincipalMemory_ToolSchemaAdvertised", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestQueryPrincipalMemory_ToolSchemaAdvertised (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRateMemorySignificanceDirectCallFailsClosedWhenS6Disabled", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRateMemorySignificanceDirectCallFailsClosedWhenS6Disabled (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRateMemorySignificanceDirectCallFailsClosedWhenS6Disabled/master_off_s6_on_updater_present", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRateMemorySignificanceDirectCallFailsClosedWhenS6Disabled/master_off_s6_on_updater_present (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRateMemorySignificanceDirectCallFailsClosedWhenS6Disabled/master_on_s6_off_updater_present", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRateMemorySignificanceDirectCallFailsClosedWhenS6Disabled/master_on_s6_off_updater_present (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRateMemorySignificanceLegacyRatePathsRemainUnsupported", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRateMemorySignificanceLegacyRatePathsRemainUnsupported (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRateMemorySignificanceLegacyRatePathsRemainUnsupported/consolidated_feedback_rate_action", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRateMemorySignificanceLegacyRatePathsRemainUnsupported/consolidated_feedback_rate_action (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRateMemorySignificanceLegacyRatePathsRemainUnsupported/legacy_rate_memory_tool", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRateMemorySignificanceLegacyRatePathsRemainUnsupported/legacy_rate_memory_tool (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRateMemorySignificanceMissingUpdaterFailsExplicitly", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRateMemorySignificanceMissingUpdaterFailsExplicitly (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRateMemorySignificanceRejectsInvalidIDWithoutWrite", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRateMemorySignificanceRejectsInvalidIDWithoutWrite (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRateMemorySignificanceRejectsInvalidIDWithoutWrite/missing_id", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRateMemorySignificanceRejectsInvalidIDWithoutWrite/missing_id (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRateMemorySignificanceRejectsInvalidIDWithoutWrite/negative_id", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRateMemorySignificanceRejectsInvalidIDWithoutWrite/negative_id (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRateMemorySignificanceRejectsInvalidIDWithoutWrite/zero_id", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRateMemorySignificanceRejectsInvalidIDWithoutWrite/zero_id (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRateMemorySignificanceRejectsInvalidRatingWithoutWrite", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRateMemorySignificanceRejectsInvalidRatingWithoutWrite (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRateMemorySignificanceRejectsInvalidRatingWithoutWrite/empty_rating", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRateMemorySignificanceRejectsInvalidRatingWithoutWrite/empty_rating (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRateMemorySignificanceRejectsInvalidRatingWithoutWrite/missing_rating", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRateMemorySignificanceRejectsInvalidRatingWithoutWrite/missing_rating (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRateMemorySignificanceRejectsInvalidRatingWithoutWrite/unknown_rating", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRateMemorySignificanceRejectsInvalidRatingWithoutWrite/unknown_rating (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRateMemorySignificanceToolAdvertisedOnlyWhenS6FlagAndUpdaterArePresent", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRateMemorySignificanceToolAdvertisedOnlyWhenS6FlagAndUpdaterArePresent (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRateMemorySignificanceToolAdvertisedOnlyWhenS6FlagAndUpdaterArePresent/master_off_s6_on_updater_present", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRateMemorySignificanceToolAdvertisedOnlyWhenS6FlagAndUpdaterArePresent/master_off_s6_on_updater_present (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRateMemorySignificanceToolAdvertisedOnlyWhenS6FlagAndUpdaterArePresent/master_on_s6_off_updater_present", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRateMemorySignificanceToolAdvertisedOnlyWhenS6FlagAndUpdaterArePresent/master_on_s6_off_updater_present (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRateMemorySignificanceToolAdvertisedOnlyWhenS6FlagAndUpdaterArePresent/master_on_s6_on_updater_missing", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRateMemorySignificanceToolAdvertisedOnlyWhenS6FlagAndUpdaterArePresent/master_on_s6_on_updater_missing (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRateMemorySignificanceToolAdvertisedOnlyWhenS6FlagAndUpdaterArePresent/master_on_s6_on_updater_present", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRateMemorySignificanceToolAdvertisedOnlyWhenS6FlagAndUpdaterArePresent/master_on_s6_on_updater_present (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRateMemorySignificanceToolAdvertisedWithDedicatedSchema", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRateMemorySignificanceToolAdvertisedWithDedicatedSchema (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRateMemorySignificanceToolCallUpdatesLearningForUsefulAndNotUseful", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRateMemorySignificanceToolCallUpdatesLearningForUsefulAndNotUseful (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRateMemorySignificanceToolCallUpdatesLearningForUsefulAndNotUseful/not_useful", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRateMemorySignificanceToolCallUpdatesLearningForUsefulAndNotUseful/not_useful (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRateMemorySignificanceToolCallUpdatesLearningForUsefulAndNotUseful/useful", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRateMemorySignificanceToolCallUpdatesLearningForUsefulAndNotUseful/useful (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRecall_FlagOFF_TombstoneStrings_Explain", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRecall_FlagOFF_TombstoneStrings_Explain (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRecall_FlagOFF_TombstoneStrings_Similar", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRecall_FlagOFF_TombstoneStrings_Similar (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRecall_PrincipalPrivateInvisibleNewestDoNotTruncate_FlagOff", + "outcome": "pass", + "elapsed_seconds": 0.15, + "last_output": "--- PASS: TestRecall_PrincipalPrivateInvisibleNewestDoNotTruncate_FlagOff (0.15s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRecall_ScopeInvisibleNewestDoNotTruncate_CodexP1Cycle3", + "outcome": "pass", + "elapsed_seconds": 0.16, + "last_output": "--- PASS: TestRecall_ScopeInvisibleNewestDoNotTruncate_CodexP1Cycle3 (0.16s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRecallMemory_CompatV3_VnextFEnabled_ZeroTG3Params_T021b", + "outcome": "pass", + "elapsed_seconds": 4.06, + "last_output": "--- PASS: TestRecallMemory_CompatV3_VnextFEnabled_ZeroTG3Params_T021b (4.06s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRecallMemory_CompatV3_VnextFEnabled_ZeroTG3Params_T021b/runtime_zero_tg3_params_vnext_f_on_vnext_off_no_rationale", + "outcome": "pass", + "elapsed_seconds": 4.06, + "last_output": "--- PASS: TestRecallMemory_CompatV3_VnextFEnabled_ZeroTG3Params_T021b/runtime_zero_tg3_params_vnext_f_on_vnext_off_no_rationale (4.06s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRecallMemory_CompatV3_VnextFEnabled_ZeroTG3Params_T021b/schema_with_vnext_f_on_and_vnext_off_zero_tg3_params", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRecallMemory_CompatV3_VnextFEnabled_ZeroTG3Params_T021b/schema_with_vnext_f_on_and_vnext_off_zero_tg3_params (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRecallMemory_CompatV3_ZeroFlagsShape_T021", + "outcome": "pass", + "elapsed_seconds": 0.15, + "last_output": "--- PASS: TestRecallMemory_CompatV3_ZeroFlagsShape_T021 (0.15s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRecallMemory_CompatV3_ZeroFlagsShape_T021/runtime_no_ranking_rationale_key_when_flags_at_default", + "outcome": "pass", + "elapsed_seconds": 0.15, + "last_output": "--- PASS: TestRecallMemory_CompatV3_ZeroFlagsShape_T021/runtime_no_ranking_rationale_key_when_flags_at_default (0.15s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRecallMemory_CompatV3_ZeroFlagsShape_T021/schema_unconditional_tg3_params_present", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRecallMemory_CompatV3_ZeroFlagsShape_T021/schema_unconditional_tg3_params_present (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRecallMemory_DomainOwnedInvisibleNewestDoNotTruncate_FlagOff", + "outcome": "pass", + "elapsed_seconds": 0.15, + "last_output": "--- PASS: TestRecallMemory_DomainOwnedInvisibleNewestDoNotTruncate_FlagOff (0.15s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRecallMemory_FlagMatrix_BothEnabled_SchemaCombinesParams", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRecallMemory_FlagMatrix_BothEnabled_SchemaCombinesParams (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRecallMemory_FlagMatrix_FEnabled_SchemaHasScopeParams", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRecallMemory_FlagMatrix_FEnabled_SchemaHasScopeParams (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRecallMemory_FlagOFF_BehaviorIdentity", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRecallMemory_FlagOFF_BehaviorIdentity (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRecallMemory_FlagOFF_SchemaNoVnextParams", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRecallMemory_FlagOFF_SchemaNoVnextParams (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRecallMemory_FlagON_SchemaHasVnextParams", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRecallMemory_FlagON_SchemaHasVnextParams (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRecallMemory_IncludeSupersededFlagOffIgnoredInHybrid", + "outcome": "pass", + "elapsed_seconds": 0.12, + "last_output": "--- PASS: TestRecallMemory_IncludeSupersededFlagOffIgnoredInHybrid (0.12s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRecallMemory_InvalidIncludeScopes_StructuredError", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRecallMemory_InvalidIncludeScopes_StructuredError (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRecallMemory_PrincipalPrivateInvisibleAndSharedAttributed_FlagOff", + "outcome": "pass", + "elapsed_seconds": 0.14, + "last_output": "--- PASS: TestRecallMemory_PrincipalPrivateInvisibleAndSharedAttributed_FlagOff (0.14s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRecallMemory_TG3IncludeSupersededLegacyPath", + "outcome": "pass", + "elapsed_seconds": 0.13, + "last_output": "--- PASS: TestRecallMemory_TG3IncludeSupersededLegacyPath (0.13s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRecallMemoryDomainPolicy_DomainOwnedRowHiddenFromMismatchedPrincipal", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRecallMemoryDomainPolicy_DomainOwnedRowHiddenFromMismatchedPrincipal (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRecallMemoryDomainPolicy_DomainOwnedRowVisibleToOwner", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRecallMemoryDomainPolicy_DomainOwnedRowVisibleToOwner (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRecallMemoryIncludePrincipals_SchemaAdvertised", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRecallMemoryIncludePrincipals_SchemaAdvertised (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRecallMemoryIncludePrincipals_ValidationAndPrivacy", + "outcome": "pass", + "elapsed_seconds": 0.99, + "last_output": "--- PASS: TestRecallMemoryIncludePrincipals_ValidationAndPrivacy (0.99s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRecallMemoryIncludePrincipals_ValidationAndPrivacy/admin_cross-private_include_reapplies_recall_filters", + "outcome": "pass", + "elapsed_seconds": 0.17, + "last_output": "--- PASS: TestRecallMemoryIncludePrincipals_ValidationAndPrivacy/admin_cross-private_include_reapplies_recall_filters (0.17s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRecallMemoryIncludePrincipals_ValidationAndPrivacy/admin_cross-private_include_writes_durable_audit_before_returning_private_row", + "outcome": "pass", + "elapsed_seconds": 0.15, + "last_output": "--- PASS: TestRecallMemoryIncludePrincipals_ValidationAndPrivacy/admin_cross-private_include_writes_durable_audit_before_returning_private_row (0.15s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRecallMemoryIncludePrincipals_ValidationAndPrivacy/empty_include_list_is_treated_as_absent", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRecallMemoryIncludePrincipals_ValidationAndPrivacy/empty_include_list_is_treated_as_absent (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRecallMemoryIncludePrincipals_ValidationAndPrivacy/non-admin_cross-principal_include_appends_shared_rows", + "outcome": "pass", + "elapsed_seconds": 0.14, + "last_output": "--- PASS: TestRecallMemoryIncludePrincipals_ValidationAndPrivacy/non-admin_cross-principal_include_appends_shared_rows (0.14s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRecallMemoryIncludePrincipals_ValidationAndPrivacy/non-admin_cross-principal_include_skips_private_rows", + "outcome": "pass", + "elapsed_seconds": 0.13, + "last_output": "--- PASS: TestRecallMemoryIncludePrincipals_ValidationAndPrivacy/non-admin_cross-principal_include_skips_private_rows (0.13s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRecallMemoryIncludePrincipals_ValidationAndPrivacy/rejects_blank_and_invalid_principals_clearly", + "outcome": "pass", + "elapsed_seconds": 0.13, + "last_output": "--- PASS: TestRecallMemoryIncludePrincipals_ValidationAndPrivacy/rejects_blank_and_invalid_principals_clearly (0.13s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRecallMemoryIncludePrincipals_ValidationAndPrivacy/rejects_duplicate_principals", + "outcome": "pass", + "elapsed_seconds": 0.13, + "last_output": "--- PASS: TestRecallMemoryIncludePrincipals_ValidationAndPrivacy/rejects_duplicate_principals (0.13s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRecallMemoryIncludePrincipals_ValidationAndPrivacy/self_include_is_allowed_and_deduplicated", + "outcome": "pass", + "elapsed_seconds": 0.14, + "last_output": "--- PASS: TestRecallMemoryIncludePrincipals_ValidationAndPrivacy/self_include_is_allowed_and_deduplicated (0.14s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRecallMemoryPrincipalDefault_OwnSharedLegacyVisibleOtherPrivateHidden", + "outcome": "pass", + "elapsed_seconds": 0.16, + "last_output": "--- PASS: TestRecallMemoryPrincipalDefault_OwnSharedLegacyVisibleOtherPrivateHidden (0.16s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRecallMemoryTierFilter_FlagOff_SchemaAbsent_B4", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRecallMemoryTierFilter_FlagOff_SchemaAbsent_B4 (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRecallMemoryTierFilter_InvalidTier_B4", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRecallMemoryTierFilter_InvalidTier_B4 (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRecallMemoryToolSchema_B4_HasTierFilter", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRecallMemoryToolSchema_B4_HasTierFilter (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRecallMemoryToolSchema_T005", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRecallMemoryToolSchema_T005 (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRememberDirectiveDirectCallDelegatesContextAndReturnsSanitizedRecord", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRememberDirectiveDirectCallDelegatesContextAndReturnsSanitizedRecord (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRememberDirectiveDirectCallFailsClosedBeforeDelegation", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRememberDirectiveDirectCallFailsClosedBeforeDelegation (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRememberDirectiveDirectCallFailsClosedBeforeDelegation/flag_disabled", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRememberDirectiveDirectCallFailsClosedBeforeDelegation/flag_disabled (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRememberDirectiveDirectCallFailsClosedBeforeDelegation/master_flag_disabled_even_if_s4a_flag_is_enabled", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRememberDirectiveDirectCallFailsClosedBeforeDelegation/master_flag_disabled_even_if_s4a_flag_is_enabled (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRememberDirectiveDirectCallFailsClosedBeforeDelegation/project_context_missing", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRememberDirectiveDirectCallFailsClosedBeforeDelegation/project_context_missing (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRememberDirectiveDirectCallFailsClosedBeforeDelegation/service_missing", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRememberDirectiveDirectCallFailsClosedBeforeDelegation/service_missing (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRememberDirectiveDirectCallFailsClosedBeforeDelegation/session_context_missing", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRememberDirectiveDirectCallFailsClosedBeforeDelegation/session_context_missing (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRememberDirectiveToolAdvertisedOnlyWhenS4AFlagAndServiceArePresent", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRememberDirectiveToolAdvertisedOnlyWhenS4AFlagAndServiceArePresent (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRememberDirectiveToolAdvertisedOnlyWhenS4AFlagAndServiceArePresent/absent_when_flag_disabled_even_with_service", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRememberDirectiveToolAdvertisedOnlyWhenS4AFlagAndServiceArePresent/absent_when_flag_disabled_even_with_service (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRememberDirectiveToolAdvertisedOnlyWhenS4AFlagAndServiceArePresent/absent_when_master_flag_disabled_even_if_s4a_flag_and_service_are_present", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRememberDirectiveToolAdvertisedOnlyWhenS4AFlagAndServiceArePresent/absent_when_master_flag_disabled_even_if_s4a_flag_and_service_are_present (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRememberDirectiveToolAdvertisedOnlyWhenS4AFlagAndServiceArePresent/absent_when_service_is_missing_even_with_flag_enabled", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRememberDirectiveToolAdvertisedOnlyWhenS4AFlagAndServiceArePresent/absent_when_service_is_missing_even_with_flag_enabled (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRememberDirectiveToolAdvertisedOnlyWhenS4AFlagAndServiceArePresent/advertised_with_bounded_input_schema_when_flag_and_service_are_present", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRememberDirectiveToolAdvertisedOnlyWhenS4AFlagAndServiceArePresent/advertised_with_bounded_input_schema_when_flag_and_service_are_present (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRequest_Marshal_Table", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRequest_Marshal_Table (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRequest_Marshal_Table/initialize", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRequest_Marshal_Table/initialize (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRequest_Marshal_Table/null_id", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRequest_Marshal_Table/null_id (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRequest_Marshal_Table/string_id", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRequest_Marshal_Table/string_id (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRequest_Marshal_Table/with_params", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRequest_Marshal_Table/with_params (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRequest_Unmarshal_NullID", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRequest_Unmarshal_NullID (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRequest_Unmarshal_RoundTrip", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRequest_Unmarshal_RoundTrip (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRequireAdmin", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRequireAdmin (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRequireCandidateReviewSnapshotAllowsNonNil", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRequireCandidateReviewSnapshotAllowsNonNil (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRequireCandidateReviewSnapshotRejectsNil", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRequireCandidateReviewSnapshotRejectsNil (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRequireCandidateReviewSnapshotRejectsNil/reject_candidate", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRequireCandidateReviewSnapshotRejectsNil/reject_candidate (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRequireCandidateReviewSnapshotRejectsNil/supersede_candidate", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRequireCandidateReviewSnapshotRejectsNil/supersede_candidate (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestResponse_Marshal_Table", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestResponse_Marshal_Table (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestResponse_Marshal_Table/error_response", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestResponse_Marshal_Table/error_response (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestResponse_Marshal_Table/error_with_data", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestResponse_Marshal_Table/error_with_data (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestResponse_Marshal_Table/nil_id", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestResponse_Marshal_Table/nil_id (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestResponse_Marshal_Table/success_result", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestResponse_Marshal_Table/success_result (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRI_F2_DualFieldResponse_FlagOff_LegacyOnly_T008", + "outcome": "pass", + "elapsed_seconds": 0.13, + "last_output": "--- PASS: TestRI_F2_DualFieldResponse_FlagOff_LegacyOnly_T008 (0.13s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRI_F2_DualFieldResponse_FlagOn_T008", + "outcome": "pass", + "elapsed_seconds": 0.17, + "last_output": "--- PASS: TestRI_F2_DualFieldResponse_FlagOn_T008 (0.17s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRI_F2_DualFieldResponse_FlagOn_T008/explicit_privacy_scope=shared_overrides_legacy", + "outcome": "pass", + "elapsed_seconds": 0.01, + "last_output": "--- PASS: TestRI_F2_DualFieldResponse_FlagOn_T008/explicit_privacy_scope=shared_overrides_legacy (0.01s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRI_F2_DualFieldResponse_FlagOn_T008/legacy_scope=global,_no_privacy_scope_->_dual_global", + "outcome": "pass", + "elapsed_seconds": 0.01, + "last_output": "--- PASS: TestRI_F2_DualFieldResponse_FlagOn_T008/legacy_scope=global,_no_privacy_scope_->_dual_global (0.01s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRI_F2_DualFieldResponse_FlagOn_T008/legacy_scope=project,_no_privacy_scope_->_dual_project", + "outcome": "pass", + "elapsed_seconds": 0.01, + "last_output": "--- PASS: TestRI_F2_DualFieldResponse_FlagOn_T008/legacy_scope=project,_no_privacy_scope_->_dual_project (0.01s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRI_F2_InvalidPrivacyScope_StillStructuredErrorUnderFlagOn_T008", + "outcome": "pass", + "elapsed_seconds": 0.12, + "last_output": "--- PASS: TestRI_F2_InvalidPrivacyScope_StillStructuredErrorUnderFlagOn_T008 (0.12s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRuleGovernanceHealthReadOnlyCallerGetsNoData", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRuleGovernanceHealthReadOnlyCallerGetsNoData (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRuleGovernanceMutationToolsRequireAdmin", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRuleGovernanceMutationToolsRequireAdmin (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRuleGovernancePinSnapshotAndRollbackUseRuleGovernanceSnapshots", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRuleGovernancePinSnapshotAndRollbackUseRuleGovernanceSnapshots (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRuleGovernanceQueueAndSnapshotsReadModels", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRuleGovernanceQueueAndSnapshotsReadModels (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRuleGovernanceReadToolsAdvertisedWhenStoresWired", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRuleGovernanceReadToolsAdvertisedWhenStoresWired (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRuleGovernanceReadToolsHiddenWhenStoreMissing", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRuleGovernanceReadToolsHiddenWhenStoreMissing (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRuleGovernanceReadToolsNilStoreErrors", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRuleGovernanceReadToolsNilStoreErrors (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRuleGovernanceReadToolsRejectZeroIdentity", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRuleGovernanceReadToolsRejectZeroIdentity (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRuleGovernanceReadToolsRequireIdentityWhenAuthEnabled", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRuleGovernanceReadToolsRequireIdentityWhenAuthEnabled (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRuleGovernanceReadToolsRequireProjectForNonAdminAllProjectReads", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRuleGovernanceReadToolsRequireProjectForNonAdminAllProjectReads (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRuleGovernanceRollbackReturnsStructuredConflictResult", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRuleGovernanceRollbackReturnsStructuredConflictResult (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRuleGovernanceTransitionToolUsesStateMachineStore", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRuleGovernanceTransitionToolUsesStateMachineStore (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRuleGovernanceUsefulnessNoDataAndProjectGuard", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRuleGovernanceUsefulnessNoDataAndProjectGuard (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRun_EmptyLinesSkipped", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRun_EmptyLinesSkipped (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRun_MixedValidAndInvalid", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRun_MixedValidAndInvalid (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRun_MultipleRequests", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRun_MultipleRequests (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRun_NotificationNoResponse", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRun_NotificationNoResponse (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRun_ParseError", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRun_ParseError (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRun_ValidInitialize", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRun_ValidInitialize (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRunAuditAsync_ErrorLogged", + "outcome": "pass", + "elapsed_seconds": 0.05, + "last_output": "--- PASS: TestRunAuditAsync_ErrorLogged (0.05s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRunAuditAsync_PanicRecovered", + "outcome": "pass", + "elapsed_seconds": 0.05, + "last_output": "--- PASS: TestRunAuditAsync_PanicRecovered (0.05s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestSanitizeToolCallArgs_OtherToolsStillRedactSecrets", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestSanitizeToolCallArgs_OtherToolsStillRedactSecrets (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestSanitizeToolCallArgs_RememberDirectiveRedactsRawLogArguments", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestSanitizeToolCallArgs_RememberDirectiveRedactsRawLogArguments (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestSendError_OutputShape", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestSendError_OutputShape (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestSendResponse_ContainsJSONRPC", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestSendResponse_ContainsJSONRPC (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestSendResponse_ErrorResponse", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestSendResponse_ErrorResponse (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestSendResponse_NilID", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestSendResponse_NilID (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestSendResponse_VariousIDTypes", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestSendResponse_VariousIDTypes (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestServer_FieldsInjected", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestServer_FieldsInjected (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestServerSetAuditStoreAssignsField", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestServerSetAuditStoreAssignsField (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestSetStateThenGetStateResumeUsesServerCallPath", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestSetStateThenGetStateResumeUsesServerCallPath (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestSetStateToolRejectsNonAgentProjectWriter", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestSetStateToolRejectsNonAgentProjectWriter (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestSetStateToolRejectsNonObjectSessionSlots", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestSetStateToolRejectsNonObjectSessionSlots (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestSetStateToolRejectsSessionPayloadOver32KB", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestSetStateToolRejectsSessionPayloadOver32KB (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestSetStateToolWritesNativeSessionAndProjectState", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestSetStateToolWritesNativeSessionAndProjectState (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestSettings_DeleteRequiresAdmin", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestSettings_DeleteRequiresAdmin (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestSettings_SetMissingArgs", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestSettings_SetMissingArgs (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestSettings_SetRequiresAdmin", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestSettings_SetRequiresAdmin (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestSettings_UnknownAction", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestSettings_UnknownAction (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestStateToolsAdvertisedOnlyWhenNativeStoreIsReachable", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestStateToolsAdvertisedOnlyWhenNativeStoreIsReachable (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestStoreMemory_DryRun_NilStore", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestStoreMemory_DryRun_NilStore (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestStoreMemory_DryRun_RequiresContent", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestStoreMemory_DryRun_RequiresContent (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestStoreMemory_InvalidPrivacyScope_StructuredError", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestStoreMemory_InvalidPrivacyScope_StructuredError (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestStoreMemory_PrincipalOwnerDerivedFromIdentity", + "outcome": "pass", + "elapsed_seconds": 0.14, + "last_output": "--- PASS: TestStoreMemory_PrincipalOwnerDerivedFromIdentity (0.14s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestStoreMemoryAlwaysInject_FlagOffDoesNotUseRuleGovernance", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestStoreMemoryAlwaysInject_FlagOffDoesNotUseRuleGovernance (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestStoreMemoryAlwaysInject_GovernanceFlagCreatesRuleCandidate", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestStoreMemoryAlwaysInject_GovernanceFlagCreatesRuleCandidate (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestStoreMemoryDomainPolicy_EmptyDomainLegacyCompatible", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestStoreMemoryDomainPolicy_EmptyDomainLegacyCompatible (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestStoreMemoryDomainPolicy_NonEmptyDomainAllowsPrincipalIdentity", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestStoreMemoryDomainPolicy_NonEmptyDomainAllowsPrincipalIdentity (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestStoreMemoryDomainPolicy_NonEmptyDomainRejectsInvalidPrincipalKind", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestStoreMemoryDomainPolicy_NonEmptyDomainRejectsInvalidPrincipalKind (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestStoreMemoryDomainPolicy_NonEmptyDomainRequiresPrincipal", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestStoreMemoryDomainPolicy_NonEmptyDomainRequiresPrincipal (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestStoreMemoryDomainRegistry_AuditFailureBlocksBeforePersistence", + "outcome": "pass", + "elapsed_seconds": 0.14, + "last_output": "--- PASS: TestStoreMemoryDomainRegistry_AuditFailureBlocksBeforePersistence (0.14s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestStoreMemoryDomainRegistry_InvalidWriterKindRejectsBeforePersistence", + "outcome": "pass", + "elapsed_seconds": 0.13, + "last_output": "--- PASS: TestStoreMemoryDomainRegistry_InvalidWriterKindRejectsBeforePersistence (0.13s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestStoreMemoryDomainRegistry_RejectionRunsBeforeSupersedeMutation", + "outcome": "pass", + "elapsed_seconds": 0.18, + "last_output": "--- PASS: TestStoreMemoryDomainRegistry_RejectionRunsBeforeSupersedeMutation (0.18s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestStoreMemoryDomainRegistry_WarnRejectAndCompatibility", + "outcome": "pass", + "elapsed_seconds": 0.22, + "last_output": "--- PASS: TestStoreMemoryDomainRegistry_WarnRejectAndCompatibility (0.22s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestStoreMemoryDomainRegistry_WarnRejectAndCompatibility/missing_row_preserves_current_behavior", + "outcome": "pass", + "elapsed_seconds": 0.01, + "last_output": "--- PASS: TestStoreMemoryDomainRegistry_WarnRejectAndCompatibility/missing_row_preserves_current_behavior (0.01s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestStoreMemoryDomainRegistry_WarnRejectAndCompatibility/off_allows_cross_owner", + "outcome": "pass", + "elapsed_seconds": 0.02, + "last_output": "--- PASS: TestStoreMemoryDomainRegistry_WarnRejectAndCompatibility/off_allows_cross_owner (0.02s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestStoreMemoryDomainRegistry_WarnRejectAndCompatibility/reject_denies_before_persistence", + "outcome": "pass", + "elapsed_seconds": 0.02, + "last_output": "--- PASS: TestStoreMemoryDomainRegistry_WarnRejectAndCompatibility/reject_denies_before_persistence (0.02s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestStoreMemoryDomainRegistry_WarnRejectAndCompatibility/same_owner_allows_without_warning", + "outcome": "pass", + "elapsed_seconds": 0.02, + "last_output": "--- PASS: TestStoreMemoryDomainRegistry_WarnRejectAndCompatibility/same_owner_allows_without_warning (0.02s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestStoreMemoryDomainRegistry_WarnRejectAndCompatibility/warn_allows_with_structured_warning", + "outcome": "pass", + "elapsed_seconds": 0.02, + "last_output": "--- PASS: TestStoreMemoryDomainRegistry_WarnRejectAndCompatibility/warn_allows_with_structured_warning (0.02s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestStoreMemoryDryRunValidatesPrincipalMetadata", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestStoreMemoryDryRunValidatesPrincipalMetadata (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestStoreMemoryToolSchema_FlagOff_HasNewProperties_ButRuntimeIgnores", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestStoreMemoryToolSchema_FlagOff_HasNewProperties_ButRuntimeIgnores (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestStoreMemoryToolSchema_T005", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestStoreMemoryToolSchema_T005 (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestStoreRule_FlagOffDoesNotUseRuleGovernance", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestStoreRule_FlagOffDoesNotUseRuleGovernance (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestStoreRule_GovernanceFlagCreatesRuleCandidate", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestStoreRule_GovernanceFlagCreatesRuleCandidate (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestStoreRule_GovernanceFlagPreservesGlobalIntentWithContextProject", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestStoreRule_GovernanceFlagPreservesGlobalIntentWithContextProject (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestStoreRule_GovernanceFlagRedactsCandidateContent", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestStoreRule_GovernanceFlagRedactsCandidateContent (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestTemporalTruthDirectCallFailsClosedWhenFeatureGateUnsatisfied", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestTemporalTruthDirectCallFailsClosedWhenFeatureGateUnsatisfied (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestTemporalTruthRefreshDirectCallFailsClosedWhenFeatureGateUnsatisfied", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestTemporalTruthRefreshDirectCallFailsClosedWhenFeatureGateUnsatisfied (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestTemporalTruthRefreshToolAdvertisedWhenProviderWiredAndFlagOn", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestTemporalTruthRefreshToolAdvertisedWhenProviderWiredAndFlagOn (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestTemporalTruthToolAdvertisedWhenProviderWiredAndFlagOn", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestTemporalTruthToolAdvertisedWhenProviderWiredAndFlagOn (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestTemporalTruthToolsAbsentWhenFlagOff", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestTemporalTruthToolsAbsentWhenFlagOff (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestTierConstants", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestTierConstants (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestTimelineParams_AllFields", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestTimelineParams_AllFields (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestTimelineParams_Unmarshal_Table", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestTimelineParams_Unmarshal_Table (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestTimelineParams_Unmarshal_Table/anchor_id", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestTimelineParams_Unmarshal_Table/anchor_id (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestTimelineParams_Unmarshal_Table/empty_object_valid", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestTimelineParams_Unmarshal_Table/empty_object_valid (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestTimelineParams_Unmarshal_Table/invalid_json", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestTimelineParams_Unmarshal_Table/invalid_json (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestTimelineParams_Unmarshal_Table/query_only", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestTimelineParams_Unmarshal_Table/query_only (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestTool_Marshal_RoundTrip", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestTool_Marshal_RoundTrip (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestToolCallParams_ComplexArgs", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestToolCallParams_ComplexArgs (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestToolCallParams_Unmarshal", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestToolCallParams_Unmarshal (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestToolCallParams_Unmarshal/no-args", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestToolCallParams_Unmarshal/no-args (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestToolCallParams_Unmarshal/recall", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestToolCallParams_Unmarshal/recall (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestToolCallParams_Unmarshal/store", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestToolCallParams_Unmarshal/store (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestVersion_ReturnsVersion", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestVersion_ReturnsVersion (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestWiring_BothToolsOff_FlagsUnset", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestWiring_BothToolsOff_FlagsUnset (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestWiring_GraphTool_AbsentWhenFlagOff", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestWiring_GraphTool_AbsentWhenFlagOff (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestWiring_GraphTool_AbsentWhenStoreNil", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestWiring_GraphTool_AbsentWhenStoreNil (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestWiring_GraphTool_AppearsWhenStoreSetAndFlagOn", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestWiring_GraphTool_AppearsWhenStoreSetAndFlagOn (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestWiring_LifecycleTool_AbsentWhenFlagOff", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestWiring_LifecycleTool_AbsentWhenFlagOff (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestWiring_LifecycleTool_AbsentWhenStoresNil", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestWiring_LifecycleTool_AbsentWhenStoresNil (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestWiring_LifecycleTool_AppearsWhenStoresSetAndFlagOn", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestWiring_LifecycleTool_AppearsWhenStoresSetAndFlagOn (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestWriteLint_DomainOwnedCandidateHiddenWithOrchestratorStoreFallback", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestWriteLint_DomainOwnedCandidateHiddenWithOrchestratorStoreFallback (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestWriteLint_DomainOwnedTargetHiddenWithOrchestratorStoreFallback", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestWriteLint_DomainOwnedTargetHiddenWithOrchestratorStoreFallback (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestWriteLint_PrincipalPrivateCandidatesHiddenFromPhase1", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestWriteLint_PrincipalPrivateCandidatesHiddenFromPhase1 (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestWriteLint_PrincipalPrivateTargetHiddenFromPhase2", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestWriteLint_PrincipalPrivateTargetHiddenFromPhase2 (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestWriteLint_T035_FlagOff_LegacyPath", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestWriteLint_T035_FlagOff_LegacyPath (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestWriteLint_T035_ForceBypass", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestWriteLint_T035_ForceBypass (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestWriteLint_T035_Phase1_NoSignal_Stored", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestWriteLint_T035_Phase1_NoSignal_Stored (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestWriteLint_T035_Phase1_SignalsReturned", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestWriteLint_T035_Phase1_SignalsReturned (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestWriteLint_T035_Phase2_MergeWith", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestWriteLint_T035_Phase2_MergeWith (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestWriteLint_T035_PrivateScope_NoWorkstation_Rejected", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestWriteLint_T035_PrivateScope_NoWorkstation_Rejected (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestWriteLint_T035_PrivateScope_WithWorkstation_Allowed", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestWriteLint_T035_PrivateScope_WithWorkstation_Allowed (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestWriteLint_T035_TokenExpired", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestWriteLint_T035_TokenExpired (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestWriteLintDomainPolicy_DomainOwnedCandidateHidden", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestWriteLintDomainPolicy_DomainOwnedCandidateHidden (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestWriteLintDomainPolicy_DomainOwnedTargetHidden", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestWriteLintDomainPolicy_DomainOwnedTargetHidden (0.00s)", + "skip_allowed": false + } + ], + "unexpected_skips": [], + "errors": [] +} diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/repeat-01/go-test.stderr.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/repeat-01/go-test.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/repeat-01/go-test.stdout.jsonl b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/repeat-01/go-test.stdout.jsonl new file mode 100644 index 00000000..279137ba --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/repeat-01/go-test.stdout.jsonl @@ -0,0 +1,2446 @@ +{"Time":"2026-07-11T03:35:49.2685834+03:00","Action":"start","Package":"github.com/thebtf/engram/internal/mcp"} +{"Time":"2026-07-11T03:35:49.3645485+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestParseArgs"} +{"Time":"2026-07-11T03:35:49.3645485+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestParseArgs","Output":"=== RUN TestParseArgs\n"} +{"Time":"2026-07-11T03:35:49.3645485+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestParseArgs/nil_args"} +{"Time":"2026-07-11T03:35:49.3645485+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestParseArgs/nil_args","Output":"=== RUN TestParseArgs/nil_args\n"} +{"Time":"2026-07-11T03:35:49.3645485+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestParseArgs/nil_args","Output":"--- PASS: TestParseArgs/nil_args (0.00s)\n"} +{"Time":"2026-07-11T03:35:49.3645485+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestParseArgs/nil_args","Elapsed":0} +{"Time":"2026-07-11T03:35:49.3645485+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestParseArgs/empty_bytes"} +{"Time":"2026-07-11T03:35:49.3645485+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestParseArgs/empty_bytes","Output":"=== RUN TestParseArgs/empty_bytes\n"} +{"Time":"2026-07-11T03:35:49.3645485+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestParseArgs/empty_bytes","Output":"--- PASS: TestParseArgs/empty_bytes (0.00s)\n"} +{"Time":"2026-07-11T03:35:49.3645485+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestParseArgs/empty_bytes","Elapsed":0} +{"Time":"2026-07-11T03:35:49.3645485+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestParseArgs/empty_object"} +{"Time":"2026-07-11T03:35:49.3645485+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestParseArgs/empty_object","Output":"=== RUN TestParseArgs/empty_object\n"} +{"Time":"2026-07-11T03:35:49.3645485+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestParseArgs/empty_object","Output":"--- PASS: TestParseArgs/empty_object (0.00s)\n"} +{"Time":"2026-07-11T03:35:49.3645485+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestParseArgs/empty_object","Elapsed":0} +{"Time":"2026-07-11T03:35:49.3645485+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestParseArgs/valid_object"} +{"Time":"2026-07-11T03:35:49.3645485+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestParseArgs/valid_object","Output":"=== RUN TestParseArgs/valid_object\n"} +{"Time":"2026-07-11T03:35:49.3645485+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestParseArgs/valid_object","Output":"--- PASS: TestParseArgs/valid_object (0.00s)\n"} +{"Time":"2026-07-11T03:35:49.3645485+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestParseArgs/valid_object","Elapsed":0} +{"Time":"2026-07-11T03:35:49.3645485+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestParseArgs/invalid_json"} +{"Time":"2026-07-11T03:35:49.3645485+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestParseArgs/invalid_json","Output":"=== RUN TestParseArgs/invalid_json\n"} +{"Time":"2026-07-11T03:35:49.3645485+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestParseArgs/invalid_json","Output":"--- PASS: TestParseArgs/invalid_json (0.00s)\n"} +{"Time":"2026-07-11T03:35:49.3645485+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestParseArgs/invalid_json","Elapsed":0} +{"Time":"2026-07-11T03:35:49.3645485+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestParseArgs","Output":"--- PASS: TestParseArgs (0.00s)\n"} +{"Time":"2026-07-11T03:35:49.3645485+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestParseArgs","Elapsed":0} +{"Time":"2026-07-11T03:35:49.3645485+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceString"} +{"Time":"2026-07-11T03:35:49.3645485+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceString","Output":"=== RUN TestCoerceString\n"} +{"Time":"2026-07-11T03:35:49.3645485+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceString/nil"} +{"Time":"2026-07-11T03:35:49.3645485+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceString/nil","Output":"=== RUN TestCoerceString/nil\n"} +{"Time":"2026-07-11T03:35:49.3645485+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceString/nil","Output":"--- PASS: TestCoerceString/nil (0.00s)\n"} +{"Time":"2026-07-11T03:35:49.3645485+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceString/nil","Elapsed":0} +{"Time":"2026-07-11T03:35:49.3645485+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceString/string"} +{"Time":"2026-07-11T03:35:49.3645485+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceString/string","Output":"=== RUN TestCoerceString/string\n"} +{"Time":"2026-07-11T03:35:49.3645485+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceString/string","Output":"--- PASS: TestCoerceString/string (0.00s)\n"} +{"Time":"2026-07-11T03:35:49.3645485+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceString/string","Elapsed":0} +{"Time":"2026-07-11T03:35:49.3645485+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceString/float64"} +{"Time":"2026-07-11T03:35:49.3645485+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceString/float64","Output":"=== RUN TestCoerceString/float64\n"} +{"Time":"2026-07-11T03:35:49.3645485+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceString/float64","Output":"--- PASS: TestCoerceString/float64 (0.00s)\n"} +{"Time":"2026-07-11T03:35:49.3645485+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceString/float64","Elapsed":0} +{"Time":"2026-07-11T03:35:49.3645485+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceString/bool"} +{"Time":"2026-07-11T03:35:49.3645485+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceString/bool","Output":"=== RUN TestCoerceString/bool\n"} +{"Time":"2026-07-11T03:35:49.3645485+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceString/bool","Output":"--- PASS: TestCoerceString/bool (0.00s)\n"} +{"Time":"2026-07-11T03:35:49.3645485+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceString/bool","Elapsed":0} +{"Time":"2026-07-11T03:35:49.3645485+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceString/json.Number"} +{"Time":"2026-07-11T03:35:49.3645485+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceString/json.Number","Output":"=== RUN TestCoerceString/json.Number\n"} +{"Time":"2026-07-11T03:35:49.3645485+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceString/json.Number","Output":"--- PASS: TestCoerceString/json.Number (0.00s)\n"} +{"Time":"2026-07-11T03:35:49.3645485+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceString/json.Number","Elapsed":0} +{"Time":"2026-07-11T03:35:49.3645485+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceString/wrong_type"} +{"Time":"2026-07-11T03:35:49.3645485+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceString/wrong_type","Output":"=== RUN TestCoerceString/wrong_type\n"} +{"Time":"2026-07-11T03:35:49.3645485+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceString/wrong_type","Output":"--- PASS: TestCoerceString/wrong_type (0.00s)\n"} +{"Time":"2026-07-11T03:35:49.3645485+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceString/wrong_type","Elapsed":0} +{"Time":"2026-07-11T03:35:49.3645485+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceString","Output":"--- PASS: TestCoerceString (0.00s)\n"} +{"Time":"2026-07-11T03:35:49.3645485+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceString","Elapsed":0} +{"Time":"2026-07-11T03:35:49.3645485+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt"} +{"Time":"2026-07-11T03:35:49.3645485+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt","Output":"=== RUN TestCoerceInt\n"} +{"Time":"2026-07-11T03:35:49.3645485+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt/nil"} +{"Time":"2026-07-11T03:35:49.3645485+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt/nil","Output":"=== RUN TestCoerceInt/nil\n"} +{"Time":"2026-07-11T03:35:49.3645485+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt/nil","Output":"--- PASS: TestCoerceInt/nil (0.00s)\n"} +{"Time":"2026-07-11T03:35:49.3645485+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt/nil","Elapsed":0} +{"Time":"2026-07-11T03:35:49.3645485+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt/float64"} +{"Time":"2026-07-11T03:35:49.3645485+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt/float64","Output":"=== RUN TestCoerceInt/float64\n"} +{"Time":"2026-07-11T03:35:49.3645485+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt/float64","Output":"--- PASS: TestCoerceInt/float64 (0.00s)\n"} +{"Time":"2026-07-11T03:35:49.3645485+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt/float64","Elapsed":0} +{"Time":"2026-07-11T03:35:49.3645485+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt/float64_with_decimal"} +{"Time":"2026-07-11T03:35:49.3645485+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt/float64_with_decimal","Output":"=== RUN TestCoerceInt/float64_with_decimal\n"} +{"Time":"2026-07-11T03:35:49.3645485+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt/float64_with_decimal","Output":"--- PASS: TestCoerceInt/float64_with_decimal (0.00s)\n"} +{"Time":"2026-07-11T03:35:49.3645485+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt/float64_with_decimal","Elapsed":0} +{"Time":"2026-07-11T03:35:49.3645485+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt/string_int"} +{"Time":"2026-07-11T03:35:49.3645485+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt/string_int","Output":"=== RUN TestCoerceInt/string_int\n"} +{"Time":"2026-07-11T03:35:49.3645485+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt/string_int","Output":"--- PASS: TestCoerceInt/string_int (0.00s)\n"} +{"Time":"2026-07-11T03:35:49.3645485+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt/string_int","Elapsed":0} +{"Time":"2026-07-11T03:35:49.3645485+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt/string_float"} +{"Time":"2026-07-11T03:35:49.3645485+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt/string_float","Output":"=== RUN TestCoerceInt/string_float\n"} +{"Time":"2026-07-11T03:35:49.3650479+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt/string_float","Output":"--- PASS: TestCoerceInt/string_float (0.00s)\n"} +{"Time":"2026-07-11T03:35:49.3650479+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt/string_float","Elapsed":0} +{"Time":"2026-07-11T03:35:49.3650479+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt/json.Number_int"} +{"Time":"2026-07-11T03:35:49.3650479+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt/json.Number_int","Output":"=== RUN TestCoerceInt/json.Number_int\n"} +{"Time":"2026-07-11T03:35:49.3650479+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt/json.Number_int","Output":"--- PASS: TestCoerceInt/json.Number_int (0.00s)\n"} +{"Time":"2026-07-11T03:35:49.3650479+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt/json.Number_int","Elapsed":0} +{"Time":"2026-07-11T03:35:49.3650479+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt/json.Number_float"} +{"Time":"2026-07-11T03:35:49.3650479+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt/json.Number_float","Output":"=== RUN TestCoerceInt/json.Number_float\n"} +{"Time":"2026-07-11T03:35:49.3650479+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt/json.Number_float","Output":"--- PASS: TestCoerceInt/json.Number_float (0.00s)\n"} +{"Time":"2026-07-11T03:35:49.3650479+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt/json.Number_float","Elapsed":0} +{"Time":"2026-07-11T03:35:49.3650479+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt/string_non-numeric"} +{"Time":"2026-07-11T03:35:49.3650479+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt/string_non-numeric","Output":"=== RUN TestCoerceInt/string_non-numeric\n"} +{"Time":"2026-07-11T03:35:49.3650479+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt/string_non-numeric","Output":"--- PASS: TestCoerceInt/string_non-numeric (0.00s)\n"} +{"Time":"2026-07-11T03:35:49.3650479+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt/string_non-numeric","Elapsed":0} +{"Time":"2026-07-11T03:35:49.3650479+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt/bool"} +{"Time":"2026-07-11T03:35:49.3650479+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt/bool","Output":"=== RUN TestCoerceInt/bool\n"} +{"Time":"2026-07-11T03:35:49.3650479+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt/bool","Output":"--- PASS: TestCoerceInt/bool (0.00s)\n"} +{"Time":"2026-07-11T03:35:49.3650479+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt/bool","Elapsed":0} +{"Time":"2026-07-11T03:35:49.3650479+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt/negative_float"} +{"Time":"2026-07-11T03:35:49.3650479+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt/negative_float","Output":"=== RUN TestCoerceInt/negative_float\n"} +{"Time":"2026-07-11T03:35:49.3650479+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt/negative_float","Output":"--- PASS: TestCoerceInt/negative_float (0.00s)\n"} +{"Time":"2026-07-11T03:35:49.3650479+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt/negative_float","Elapsed":0} +{"Time":"2026-07-11T03:35:49.3650479+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt/zero"} +{"Time":"2026-07-11T03:35:49.3650479+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt/zero","Output":"=== RUN TestCoerceInt/zero\n"} +{"Time":"2026-07-11T03:35:49.3650479+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt/zero","Output":"--- PASS: TestCoerceInt/zero (0.00s)\n"} +{"Time":"2026-07-11T03:35:49.3650479+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt/zero","Elapsed":0} +{"Time":"2026-07-11T03:35:49.3650479+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt/overflow_float64"} +{"Time":"2026-07-11T03:35:49.3650479+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt/overflow_float64","Output":"=== RUN TestCoerceInt/overflow_float64\n"} +{"Time":"2026-07-11T03:35:49.3650479+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt/overflow_float64","Output":"--- PASS: TestCoerceInt/overflow_float64 (0.00s)\n"} +{"Time":"2026-07-11T03:35:49.3650479+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt/overflow_float64","Elapsed":0} +{"Time":"2026-07-11T03:35:49.3650479+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt/negative_overflow"} +{"Time":"2026-07-11T03:35:49.3650479+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt/negative_overflow","Output":"=== RUN TestCoerceInt/negative_overflow\n"} +{"Time":"2026-07-11T03:35:49.3650479+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt/negative_overflow","Output":"--- PASS: TestCoerceInt/negative_overflow (0.00s)\n"} +{"Time":"2026-07-11T03:35:49.3650479+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt/negative_overflow","Elapsed":0} +{"Time":"2026-07-11T03:35:49.3650479+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt/NaN"} +{"Time":"2026-07-11T03:35:49.3650479+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt/NaN","Output":"=== RUN TestCoerceInt/NaN\n"} +{"Time":"2026-07-11T03:35:49.3650479+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt/NaN","Output":"--- PASS: TestCoerceInt/NaN (0.00s)\n"} +{"Time":"2026-07-11T03:35:49.3650479+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt/NaN","Elapsed":0} +{"Time":"2026-07-11T03:35:49.3650479+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt/Inf"} +{"Time":"2026-07-11T03:35:49.3650479+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt/Inf","Output":"=== RUN TestCoerceInt/Inf\n"} +{"Time":"2026-07-11T03:35:49.3650479+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt/Inf","Output":"--- PASS: TestCoerceInt/Inf (0.00s)\n"} +{"Time":"2026-07-11T03:35:49.3650479+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt/Inf","Elapsed":0} +{"Time":"2026-07-11T03:35:49.3650479+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt","Output":"--- PASS: TestCoerceInt (0.00s)\n"} +{"Time":"2026-07-11T03:35:49.3650479+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt","Elapsed":0} +{"Time":"2026-07-11T03:35:49.3650479+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt64"} +{"Time":"2026-07-11T03:35:49.3650479+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt64","Output":"=== RUN TestCoerceInt64\n"} +{"Time":"2026-07-11T03:35:49.3650479+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt64/nil"} +{"Time":"2026-07-11T03:35:49.3650479+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt64/nil","Output":"=== RUN TestCoerceInt64/nil\n"} +{"Time":"2026-07-11T03:35:49.3650479+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt64/nil","Output":"--- PASS: TestCoerceInt64/nil (0.00s)\n"} +{"Time":"2026-07-11T03:35:49.3650479+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt64/nil","Elapsed":0} +{"Time":"2026-07-11T03:35:49.3650479+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt64/float64"} +{"Time":"2026-07-11T03:35:49.3650479+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt64/float64","Output":"=== RUN TestCoerceInt64/float64\n"} +{"Time":"2026-07-11T03:35:49.3650479+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt64/float64","Output":"--- PASS: TestCoerceInt64/float64 (0.00s)\n"} +{"Time":"2026-07-11T03:35:49.3650479+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt64/float64","Elapsed":0} +{"Time":"2026-07-11T03:35:49.3650479+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt64/string"} +{"Time":"2026-07-11T03:35:49.3650479+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt64/string","Output":"=== RUN TestCoerceInt64/string\n"} +{"Time":"2026-07-11T03:35:49.3650479+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt64/string","Output":"--- PASS: TestCoerceInt64/string (0.00s)\n"} +{"Time":"2026-07-11T03:35:49.3650479+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt64/string","Elapsed":0} +{"Time":"2026-07-11T03:35:49.3650479+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt64/json.Number"} +{"Time":"2026-07-11T03:35:49.3650479+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt64/json.Number","Output":"=== RUN TestCoerceInt64/json.Number\n"} +{"Time":"2026-07-11T03:35:49.3650479+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt64/json.Number","Output":"--- PASS: TestCoerceInt64/json.Number (0.00s)\n"} +{"Time":"2026-07-11T03:35:49.3650479+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt64/json.Number","Elapsed":0} +{"Time":"2026-07-11T03:35:49.3650479+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt64/json.Number_float"} +{"Time":"2026-07-11T03:35:49.3650479+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt64/json.Number_float","Output":"=== RUN TestCoerceInt64/json.Number_float\n"} +{"Time":"2026-07-11T03:35:49.3650479+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt64/json.Number_float","Output":"--- PASS: TestCoerceInt64/json.Number_float (0.00s)\n"} +{"Time":"2026-07-11T03:35:49.3650479+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt64/json.Number_float","Elapsed":0} +{"Time":"2026-07-11T03:35:49.3650479+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt64/string_float"} +{"Time":"2026-07-11T03:35:49.3650479+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt64/string_float","Output":"=== RUN TestCoerceInt64/string_float\n"} +{"Time":"2026-07-11T03:35:49.3650479+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt64/string_float","Output":"--- PASS: TestCoerceInt64/string_float (0.00s)\n"} +{"Time":"2026-07-11T03:35:49.3650479+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt64/string_float","Elapsed":0} +{"Time":"2026-07-11T03:35:49.3650479+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt64/invalid_string"} +{"Time":"2026-07-11T03:35:49.3650479+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt64/invalid_string","Output":"=== RUN TestCoerceInt64/invalid_string\n"} +{"Time":"2026-07-11T03:35:49.3650479+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt64/invalid_string","Output":"--- PASS: TestCoerceInt64/invalid_string (0.00s)\n"} +{"Time":"2026-07-11T03:35:49.3650479+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt64/invalid_string","Elapsed":0} +{"Time":"2026-07-11T03:35:49.3650479+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt64","Output":"--- PASS: TestCoerceInt64 (0.00s)\n"} +{"Time":"2026-07-11T03:35:49.3650479+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt64","Elapsed":0} +{"Time":"2026-07-11T03:35:49.3650479+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceFloat64"} +{"Time":"2026-07-11T03:35:49.3650479+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceFloat64","Output":"=== RUN TestCoerceFloat64\n"} +{"Time":"2026-07-11T03:35:49.3650479+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceFloat64/nil"} +{"Time":"2026-07-11T03:35:49.3650479+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceFloat64/nil","Output":"=== RUN TestCoerceFloat64/nil\n"} +{"Time":"2026-07-11T03:35:49.3650479+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceFloat64/nil","Output":"--- PASS: TestCoerceFloat64/nil (0.00s)\n"} +{"Time":"2026-07-11T03:35:49.3650479+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceFloat64/nil","Elapsed":0} +{"Time":"2026-07-11T03:35:49.3650479+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceFloat64/float64"} +{"Time":"2026-07-11T03:35:49.3650479+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceFloat64/float64","Output":"=== RUN TestCoerceFloat64/float64\n"} +{"Time":"2026-07-11T03:35:49.3650479+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceFloat64/float64","Output":"--- PASS: TestCoerceFloat64/float64 (0.00s)\n"} +{"Time":"2026-07-11T03:35:49.3650479+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceFloat64/float64","Elapsed":0} +{"Time":"2026-07-11T03:35:49.3650479+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceFloat64/string"} +{"Time":"2026-07-11T03:35:49.3650479+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceFloat64/string","Output":"=== RUN TestCoerceFloat64/string\n"} +{"Time":"2026-07-11T03:35:49.3650479+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceFloat64/string","Output":"--- PASS: TestCoerceFloat64/string (0.00s)\n"} +{"Time":"2026-07-11T03:35:49.3650479+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceFloat64/string","Elapsed":0} +{"Time":"2026-07-11T03:35:49.3650479+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceFloat64/json.Number"} +{"Time":"2026-07-11T03:35:49.3650479+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceFloat64/json.Number","Output":"=== RUN TestCoerceFloat64/json.Number\n"} +{"Time":"2026-07-11T03:35:49.3650479+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceFloat64/json.Number","Output":"--- PASS: TestCoerceFloat64/json.Number (0.00s)\n"} +{"Time":"2026-07-11T03:35:49.3650479+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceFloat64/json.Number","Elapsed":0} +{"Time":"2026-07-11T03:35:49.3650479+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceFloat64/invalid_string"} +{"Time":"2026-07-11T03:35:49.3650479+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceFloat64/invalid_string","Output":"=== RUN TestCoerceFloat64/invalid_string\n"} +{"Time":"2026-07-11T03:35:49.3650479+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceFloat64/invalid_string","Output":"--- PASS: TestCoerceFloat64/invalid_string (0.00s)\n"} +{"Time":"2026-07-11T03:35:49.3650479+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceFloat64/invalid_string","Elapsed":0} +{"Time":"2026-07-11T03:35:49.3650479+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceFloat64/integer_string"} +{"Time":"2026-07-11T03:35:49.3650479+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceFloat64/integer_string","Output":"=== RUN TestCoerceFloat64/integer_string\n"} +{"Time":"2026-07-11T03:35:49.3650479+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceFloat64/integer_string","Output":"--- PASS: TestCoerceFloat64/integer_string (0.00s)\n"} +{"Time":"2026-07-11T03:35:49.3650479+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceFloat64/integer_string","Elapsed":0} +{"Time":"2026-07-11T03:35:49.3650479+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceFloat64","Output":"--- PASS: TestCoerceFloat64 (0.00s)\n"} +{"Time":"2026-07-11T03:35:49.3650479+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceFloat64","Elapsed":0} +{"Time":"2026-07-11T03:35:49.3650479+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceBool"} +{"Time":"2026-07-11T03:35:49.3650479+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceBool","Output":"=== RUN TestCoerceBool\n"} +{"Time":"2026-07-11T03:35:49.3650479+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceBool/nil"} +{"Time":"2026-07-11T03:35:49.3650479+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceBool/nil","Output":"=== RUN TestCoerceBool/nil\n"} +{"Time":"2026-07-11T03:35:49.3650479+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceBool/nil","Output":"--- PASS: TestCoerceBool/nil (0.00s)\n"} +{"Time":"2026-07-11T03:35:49.3650479+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceBool/nil","Elapsed":0} +{"Time":"2026-07-11T03:35:49.3650479+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceBool/true"} +{"Time":"2026-07-11T03:35:49.3650479+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceBool/true","Output":"=== RUN TestCoerceBool/true\n"} +{"Time":"2026-07-11T03:35:49.3650479+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceBool/true","Output":"--- PASS: TestCoerceBool/true (0.00s)\n"} +{"Time":"2026-07-11T03:35:49.3650479+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceBool/true","Elapsed":0} +{"Time":"2026-07-11T03:35:49.3650479+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceBool/false"} +{"Time":"2026-07-11T03:35:49.3650479+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceBool/false","Output":"=== RUN TestCoerceBool/false\n"} +{"Time":"2026-07-11T03:35:49.3650479+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceBool/false","Output":"--- PASS: TestCoerceBool/false (0.00s)\n"} +{"Time":"2026-07-11T03:35:49.3650479+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceBool/false","Elapsed":0} +{"Time":"2026-07-11T03:35:49.3650479+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceBool/string_true"} +{"Time":"2026-07-11T03:35:49.3650479+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceBool/string_true","Output":"=== RUN TestCoerceBool/string_true\n"} +{"Time":"2026-07-11T03:35:49.3650479+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceBool/string_true","Output":"--- PASS: TestCoerceBool/string_true (0.00s)\n"} +{"Time":"2026-07-11T03:35:49.3650479+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceBool/string_true","Elapsed":0} +{"Time":"2026-07-11T03:35:49.3650479+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceBool/string_false"} +{"Time":"2026-07-11T03:35:49.3650479+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceBool/string_false","Output":"=== RUN TestCoerceBool/string_false\n"} +{"Time":"2026-07-11T03:35:49.3650479+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceBool/string_false","Output":"--- PASS: TestCoerceBool/string_false (0.00s)\n"} +{"Time":"2026-07-11T03:35:49.3650479+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceBool/string_false","Elapsed":0} +{"Time":"2026-07-11T03:35:49.3650479+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceBool/float_1"} +{"Time":"2026-07-11T03:35:49.3650479+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceBool/float_1","Output":"=== RUN TestCoerceBool/float_1\n"} +{"Time":"2026-07-11T03:35:49.3650479+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceBool/float_1","Output":"--- PASS: TestCoerceBool/float_1 (0.00s)\n"} +{"Time":"2026-07-11T03:35:49.3650479+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceBool/float_1","Elapsed":0} +{"Time":"2026-07-11T03:35:49.3650479+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceBool/float_0"} +{"Time":"2026-07-11T03:35:49.3650479+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceBool/float_0","Output":"=== RUN TestCoerceBool/float_0\n"} +{"Time":"2026-07-11T03:35:49.3650479+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceBool/float_0","Output":"--- PASS: TestCoerceBool/float_0 (0.00s)\n"} +{"Time":"2026-07-11T03:35:49.3650479+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceBool/float_0","Elapsed":0} +{"Time":"2026-07-11T03:35:49.3650479+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceBool/invalid_string"} +{"Time":"2026-07-11T03:35:49.3650479+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceBool/invalid_string","Output":"=== RUN TestCoerceBool/invalid_string\n"} +{"Time":"2026-07-11T03:35:49.3650479+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceBool/invalid_string","Output":"--- PASS: TestCoerceBool/invalid_string (0.00s)\n"} +{"Time":"2026-07-11T03:35:49.3650479+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceBool/invalid_string","Elapsed":0} +{"Time":"2026-07-11T03:35:49.3650479+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceBool","Output":"--- PASS: TestCoerceBool (0.00s)\n"} +{"Time":"2026-07-11T03:35:49.3650479+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceBool","Elapsed":0} +{"Time":"2026-07-11T03:35:49.3650479+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceStringSlice"} +{"Time":"2026-07-11T03:35:49.3650479+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceStringSlice","Output":"=== RUN TestCoerceStringSlice\n"} +{"Time":"2026-07-11T03:35:49.3650479+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceStringSlice/nil"} +{"Time":"2026-07-11T03:35:49.3650479+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceStringSlice/nil","Output":"=== RUN TestCoerceStringSlice/nil\n"} +{"Time":"2026-07-11T03:35:49.3650479+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceStringSlice/nil","Output":"--- PASS: TestCoerceStringSlice/nil (0.00s)\n"} +{"Time":"2026-07-11T03:35:49.3650479+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceStringSlice/nil","Elapsed":0} +{"Time":"2026-07-11T03:35:49.3655482+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceStringSlice/single_string"} +{"Time":"2026-07-11T03:35:49.3655482+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceStringSlice/single_string","Output":"=== RUN TestCoerceStringSlice/single_string\n"} +{"Time":"2026-07-11T03:35:49.3655482+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceStringSlice/single_string","Output":"--- PASS: TestCoerceStringSlice/single_string (0.00s)\n"} +{"Time":"2026-07-11T03:35:49.3655482+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceStringSlice/single_string","Elapsed":0} +{"Time":"2026-07-11T03:35:49.3655482+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceStringSlice/empty_string"} +{"Time":"2026-07-11T03:35:49.3655482+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceStringSlice/empty_string","Output":"=== RUN TestCoerceStringSlice/empty_string\n"} +{"Time":"2026-07-11T03:35:49.3655482+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceStringSlice/empty_string","Output":"--- PASS: TestCoerceStringSlice/empty_string (0.00s)\n"} +{"Time":"2026-07-11T03:35:49.3655482+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceStringSlice/empty_string","Elapsed":0} +{"Time":"2026-07-11T03:35:49.3655482+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceStringSlice/array_of_strings"} +{"Time":"2026-07-11T03:35:49.3655482+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceStringSlice/array_of_strings","Output":"=== RUN TestCoerceStringSlice/array_of_strings\n"} +{"Time":"2026-07-11T03:35:49.3655482+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceStringSlice/array_of_strings","Output":"--- PASS: TestCoerceStringSlice/array_of_strings (0.00s)\n"} +{"Time":"2026-07-11T03:35:49.3655482+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceStringSlice/array_of_strings","Elapsed":0} +{"Time":"2026-07-11T03:35:49.3655482+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceStringSlice/mixed_array"} +{"Time":"2026-07-11T03:35:49.3655482+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceStringSlice/mixed_array","Output":"=== RUN TestCoerceStringSlice/mixed_array\n"} +{"Time":"2026-07-11T03:35:49.3655482+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceStringSlice/mixed_array","Output":"--- PASS: TestCoerceStringSlice/mixed_array (0.00s)\n"} +{"Time":"2026-07-11T03:35:49.3655482+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceStringSlice/mixed_array","Elapsed":0} +{"Time":"2026-07-11T03:35:49.3655482+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceStringSlice","Output":"--- PASS: TestCoerceStringSlice (0.00s)\n"} +{"Time":"2026-07-11T03:35:49.3655482+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceStringSlice","Elapsed":0} +{"Time":"2026-07-11T03:35:49.3655482+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt64Slice"} +{"Time":"2026-07-11T03:35:49.3655482+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt64Slice","Output":"=== RUN TestCoerceInt64Slice\n"} +{"Time":"2026-07-11T03:35:49.3655482+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt64Slice/nil"} +{"Time":"2026-07-11T03:35:49.3655482+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt64Slice/nil","Output":"=== RUN TestCoerceInt64Slice/nil\n"} +{"Time":"2026-07-11T03:35:49.3655482+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt64Slice/nil","Output":"--- PASS: TestCoerceInt64Slice/nil (0.00s)\n"} +{"Time":"2026-07-11T03:35:49.3655482+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt64Slice/nil","Elapsed":0} +{"Time":"2026-07-11T03:35:49.3655482+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt64Slice/not_array"} +{"Time":"2026-07-11T03:35:49.3655482+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt64Slice/not_array","Output":"=== RUN TestCoerceInt64Slice/not_array\n"} +{"Time":"2026-07-11T03:35:49.3655482+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt64Slice/not_array","Output":"--- PASS: TestCoerceInt64Slice/not_array (0.00s)\n"} +{"Time":"2026-07-11T03:35:49.3655482+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt64Slice/not_array","Elapsed":0} +{"Time":"2026-07-11T03:35:49.3655482+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt64Slice/float64_array"} +{"Time":"2026-07-11T03:35:49.3655482+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt64Slice/float64_array","Output":"=== RUN TestCoerceInt64Slice/float64_array\n"} +{"Time":"2026-07-11T03:35:49.3655482+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt64Slice/float64_array","Output":"--- PASS: TestCoerceInt64Slice/float64_array (0.00s)\n"} +{"Time":"2026-07-11T03:35:49.3655482+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt64Slice/float64_array","Elapsed":0} +{"Time":"2026-07-11T03:35:49.3655482+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt64Slice/string_array"} +{"Time":"2026-07-11T03:35:49.3655482+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt64Slice/string_array","Output":"=== RUN TestCoerceInt64Slice/string_array\n"} +{"Time":"2026-07-11T03:35:49.3655482+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt64Slice/string_array","Output":"--- PASS: TestCoerceInt64Slice/string_array (0.00s)\n"} +{"Time":"2026-07-11T03:35:49.3655482+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt64Slice/string_array","Elapsed":0} +{"Time":"2026-07-11T03:35:49.3655482+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt64Slice/mixed_array"} +{"Time":"2026-07-11T03:35:49.3655482+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt64Slice/mixed_array","Output":"=== RUN TestCoerceInt64Slice/mixed_array\n"} +{"Time":"2026-07-11T03:35:49.3655482+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt64Slice/mixed_array","Output":"--- PASS: TestCoerceInt64Slice/mixed_array (0.00s)\n"} +{"Time":"2026-07-11T03:35:49.3655482+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt64Slice/mixed_array","Elapsed":0} +{"Time":"2026-07-11T03:35:49.3655482+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt64Slice/with_zeros"} +{"Time":"2026-07-11T03:35:49.3655482+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt64Slice/with_zeros","Output":"=== RUN TestCoerceInt64Slice/with_zeros\n"} +{"Time":"2026-07-11T03:35:49.3655482+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt64Slice/with_zeros","Output":"--- PASS: TestCoerceInt64Slice/with_zeros (0.00s)\n"} +{"Time":"2026-07-11T03:35:49.3655482+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt64Slice/with_zeros","Elapsed":0} +{"Time":"2026-07-11T03:35:49.3655482+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt64Slice","Output":"--- PASS: TestCoerceInt64Slice (0.00s)\n"} +{"Time":"2026-07-11T03:35:49.3655482+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt64Slice","Elapsed":0} +{"Time":"2026-07-11T03:35:49.3655482+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestExtractProjectFromHeader"} +{"Time":"2026-07-11T03:35:49.3655482+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestExtractProjectFromHeader","Output":"=== RUN TestExtractProjectFromHeader\n"} +{"Time":"2026-07-11T03:35:49.3655482+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestExtractProjectFromHeader","Output":"--- PASS: TestExtractProjectFromHeader (0.00s)\n"} +{"Time":"2026-07-11T03:35:49.3655482+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestExtractProjectFromHeader","Elapsed":0} +{"Time":"2026-07-11T03:35:49.3655482+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestExtractProjectFromHeader_Missing"} +{"Time":"2026-07-11T03:35:49.3655482+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestExtractProjectFromHeader_Missing","Output":"=== RUN TestExtractProjectFromHeader_Missing\n"} +{"Time":"2026-07-11T03:35:49.3655482+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestExtractProjectFromHeader_Missing","Output":"--- PASS: TestExtractProjectFromHeader_Missing (0.00s)\n"} +{"Time":"2026-07-11T03:35:49.3655482+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestExtractProjectFromHeader_Missing","Elapsed":0} +{"Time":"2026-07-11T03:35:49.3655482+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestProjectFromContext_RoundTrip"} +{"Time":"2026-07-11T03:35:49.3655482+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestProjectFromContext_RoundTrip","Output":"=== RUN TestProjectFromContext_RoundTrip\n"} +{"Time":"2026-07-11T03:35:49.3655482+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestProjectFromContext_RoundTrip","Output":"--- PASS: TestProjectFromContext_RoundTrip (0.00s)\n"} +{"Time":"2026-07-11T03:35:49.3655482+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestProjectFromContext_RoundTrip","Elapsed":0} +{"Time":"2026-07-11T03:35:49.3655482+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestProjectFromContext_Empty"} +{"Time":"2026-07-11T03:35:49.3655482+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestProjectFromContext_Empty","Output":"=== RUN TestProjectFromContext_Empty\n"} +{"Time":"2026-07-11T03:35:49.3655482+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestProjectFromContext_Empty","Output":"--- PASS: TestProjectFromContext_Empty (0.00s)\n"} +{"Time":"2026-07-11T03:35:49.3655482+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestProjectFromContext_Empty","Elapsed":0} +{"Time":"2026-07-11T03:35:49.3655482+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemory_CompatV3_VnextFEnabled_ZeroTG3Params_T021b"} +{"Time":"2026-07-11T03:35:49.3655482+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemory_CompatV3_VnextFEnabled_ZeroTG3Params_T021b","Output":"=== RUN TestRecallMemory_CompatV3_VnextFEnabled_ZeroTG3Params_T021b\n"} +{"Time":"2026-07-11T03:35:49.3655482+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemory_CompatV3_VnextFEnabled_ZeroTG3Params_T021b/schema_with_vnext_f_on_and_vnext_off_zero_tg3_params"} +{"Time":"2026-07-11T03:35:49.3655482+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemory_CompatV3_VnextFEnabled_ZeroTG3Params_T021b/schema_with_vnext_f_on_and_vnext_off_zero_tg3_params","Output":"=== RUN TestRecallMemory_CompatV3_VnextFEnabled_ZeroTG3Params_T021b/schema_with_vnext_f_on_and_vnext_off_zero_tg3_params\n"} +{"Time":"2026-07-11T03:35:49.3660482+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemory_CompatV3_VnextFEnabled_ZeroTG3Params_T021b/schema_with_vnext_f_on_and_vnext_off_zero_tg3_params","Output":"--- PASS: TestRecallMemory_CompatV3_VnextFEnabled_ZeroTG3Params_T021b/schema_with_vnext_f_on_and_vnext_off_zero_tg3_params (0.00s)\n"} +{"Time":"2026-07-11T03:35:49.3660482+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemory_CompatV3_VnextFEnabled_ZeroTG3Params_T021b/schema_with_vnext_f_on_and_vnext_off_zero_tg3_params","Elapsed":0} +{"Time":"2026-07-11T03:35:49.3660482+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemory_CompatV3_VnextFEnabled_ZeroTG3Params_T021b/runtime_zero_tg3_params_vnext_f_on_vnext_off_no_rationale"} +{"Time":"2026-07-11T03:35:49.3660482+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemory_CompatV3_VnextFEnabled_ZeroTG3Params_T021b/runtime_zero_tg3_params_vnext_f_on_vnext_off_no_rationale","Output":"=== RUN TestRecallMemory_CompatV3_VnextFEnabled_ZeroTG3Params_T021b/runtime_zero_tg3_params_vnext_f_on_vnext_off_no_rationale\n"} +{"Time":"2026-07-11T03:35:50.2848306+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemory_CompatV3_VnextFEnabled_ZeroTG3Params_T021b/runtime_zero_tg3_params_vnext_f_on_vnext_off_no_rationale","Output":"{\"level\":\"warn\",\"error\":\"ERROR: relation \\\"observation_vectors\\\" does not exist (SQLSTATE 42P01)\",\"time\":\"2026-07-11T03:35:50+03:00\",\"message\":\"migration 040: orphan vector cleanup failed (non-fatal)\"}\n"} +{"Time":"2026-07-11T03:35:50.2848306+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemory_CompatV3_VnextFEnabled_ZeroTG3Params_T021b/runtime_zero_tg3_params_vnext_f_on_vnext_off_no_rationale","Output":"{\"level\":\"info\",\"garbage_deleted\":0,\"orphan_vectors_deleted\":0,\"time\":\"2026-07-11T03:35:50+03:00\",\"message\":\"migration 040: garbage cleanup complete\"}\n"} +{"Time":"2026-07-11T03:35:50.2953284+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemory_CompatV3_VnextFEnabled_ZeroTG3Params_T021b/runtime_zero_tg3_params_vnext_f_on_vnext_off_no_rationale","Output":"{\"level\":\"info\",\"orphan_vectors_deleted\":0,\"time\":\"2026-07-11T03:35:50+03:00\",\"message\":\"migration 041: orphan vector purge complete\"}\n"} +{"Time":"2026-07-11T03:35:50.3033277+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemory_CompatV3_VnextFEnabled_ZeroTG3Params_T021b/runtime_zero_tg3_params_vnext_f_on_vnext_off_no_rationale","Output":"{\"level\":\"info\",\"patterns_deleted\":0,\"time\":\"2026-07-11T03:35:50+03:00\",\"message\":\"migration 042: low-quality pattern purge complete\"}\n"} +{"Time":"2026-07-11T03:35:50.3428285+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemory_CompatV3_VnextFEnabled_ZeroTG3Params_T021b/runtime_zero_tg3_params_vnext_f_on_vnext_off_no_rationale","Output":"{\"level\":\"info\",\"total_deleted\":0,\"time\":\"2026-07-11T03:35:50+03:00\",\"message\":\"migration 043: radical observation cleanup complete\"}\n"} +{"Time":"2026-07-11T03:35:51.7332997+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemory_CompatV3_VnextFEnabled_ZeroTG3Params_T021b/runtime_zero_tg3_params_vnext_f_on_vnext_off_no_rationale","Output":"{\"level\":\"warn\",\"error\":\"ERROR: extension \\\"vectorscale\\\" is not available (SQLSTATE 0A000)\",\"time\":\"2026-07-11T03:35:51+03:00\",\"message\":\"migration 109: vectorscale extension not available, skipping DiskANN index\"}\n"} +{"Time":"2026-07-11T03:35:53.0395733+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemory_CompatV3_VnextFEnabled_ZeroTG3Params_T021b/runtime_zero_tg3_params_vnext_f_on_vnext_off_no_rationale","Output":"{\"level\":\"debug\",\"connections\":1,\"time\":\"2026-07-11T03:35:53+03:00\",\"message\":\"Connection pool warmed\"}\n"} +{"Time":"2026-07-11T03:35:53.4247867+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemory_CompatV3_VnextFEnabled_ZeroTG3Params_T021b/runtime_zero_tg3_params_vnext_f_on_vnext_off_no_rationale","Output":"--- PASS: TestRecallMemory_CompatV3_VnextFEnabled_ZeroTG3Params_T021b/runtime_zero_tg3_params_vnext_f_on_vnext_off_no_rationale (4.06s)\n"} +{"Time":"2026-07-11T03:35:53.4247867+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemory_CompatV3_VnextFEnabled_ZeroTG3Params_T021b/runtime_zero_tg3_params_vnext_f_on_vnext_off_no_rationale","Elapsed":4.06} +{"Time":"2026-07-11T03:35:53.4247867+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemory_CompatV3_VnextFEnabled_ZeroTG3Params_T021b","Output":"--- PASS: TestRecallMemory_CompatV3_VnextFEnabled_ZeroTG3Params_T021b (4.06s)\n"} +{"Time":"2026-07-11T03:35:53.4247867+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemory_CompatV3_VnextFEnabled_ZeroTG3Params_T021b","Elapsed":4.06} +{"Time":"2026-07-11T03:35:53.4247867+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemory_CompatV3_ZeroFlagsShape_T021"} +{"Time":"2026-07-11T03:35:53.4247867+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemory_CompatV3_ZeroFlagsShape_T021","Output":"=== RUN TestRecallMemory_CompatV3_ZeroFlagsShape_T021\n"} +{"Time":"2026-07-11T03:35:53.4247867+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemory_CompatV3_ZeroFlagsShape_T021/schema_unconditional_tg3_params_present"} +{"Time":"2026-07-11T03:35:53.4247867+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemory_CompatV3_ZeroFlagsShape_T021/schema_unconditional_tg3_params_present","Output":"=== RUN TestRecallMemory_CompatV3_ZeroFlagsShape_T021/schema_unconditional_tg3_params_present\n"} +{"Time":"2026-07-11T03:35:53.4252879+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemory_CompatV3_ZeroFlagsShape_T021/schema_unconditional_tg3_params_present","Output":"--- PASS: TestRecallMemory_CompatV3_ZeroFlagsShape_T021/schema_unconditional_tg3_params_present (0.00s)\n"} +{"Time":"2026-07-11T03:35:53.4252879+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemory_CompatV3_ZeroFlagsShape_T021/schema_unconditional_tg3_params_present","Elapsed":0} +{"Time":"2026-07-11T03:35:53.4252879+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemory_CompatV3_ZeroFlagsShape_T021/runtime_no_ranking_rationale_key_when_flags_at_default"} +{"Time":"2026-07-11T03:35:53.4252879+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemory_CompatV3_ZeroFlagsShape_T021/runtime_no_ranking_rationale_key_when_flags_at_default","Output":"=== RUN TestRecallMemory_CompatV3_ZeroFlagsShape_T021/runtime_no_ranking_rationale_key_when_flags_at_default\n"} +{"Time":"2026-07-11T03:35:53.547285+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemory_CompatV3_ZeroFlagsShape_T021/runtime_no_ranking_rationale_key_when_flags_at_default","Output":"{\"level\":\"debug\",\"connections\":1,\"time\":\"2026-07-11T03:35:53+03:00\",\"message\":\"Connection pool warmed\"}\n"} +{"Time":"2026-07-11T03:35:53.5722852+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemory_CompatV3_ZeroFlagsShape_T021/runtime_no_ranking_rationale_key_when_flags_at_default","Output":"--- PASS: TestRecallMemory_CompatV3_ZeroFlagsShape_T021/runtime_no_ranking_rationale_key_when_flags_at_default (0.15s)\n"} +{"Time":"2026-07-11T03:35:53.5722852+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemory_CompatV3_ZeroFlagsShape_T021/runtime_no_ranking_rationale_key_when_flags_at_default","Elapsed":0.15} +{"Time":"2026-07-11T03:35:53.5722852+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemory_CompatV3_ZeroFlagsShape_T021","Output":"--- PASS: TestRecallMemory_CompatV3_ZeroFlagsShape_T021 (0.15s)\n"} +{"Time":"2026-07-11T03:35:53.5722852+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemory_CompatV3_ZeroFlagsShape_T021","Elapsed":0.15} +{"Time":"2026-07-11T03:35:53.5722852+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHybridTG3_ConfidenceMin_FloorEnforced_T022"} +{"Time":"2026-07-11T03:35:53.5722852+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHybridTG3_ConfidenceMin_FloorEnforced_T022","Output":"=== RUN TestHybridTG3_ConfidenceMin_FloorEnforced_T022\n"} +{"Time":"2026-07-11T03:35:53.7088791+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHybridTG3_ConfidenceMin_FloorEnforced_T022","Output":"{\"level\":\"debug\",\"connections\":1,\"time\":\"2026-07-11T03:35:53+03:00\",\"message\":\"Connection pool warmed\"}\n"} +{"Time":"2026-07-11T03:35:53.7348797+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHybridTG3_ConfidenceMin_FloorEnforced_T022","Output":" integration_tg3_hybrid_test.go:83: \n"} +{"Time":"2026-07-11T03:35:53.7348797+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHybridTG3_ConfidenceMin_FloorEnforced_T022","Output":" \tError Trace:\tD:/Dev/engram/.w/t007-current-contract/internal/mcp/integration_tg3_hybrid_test.go:83\n"} +{"Time":"2026-07-11T03:35:53.7348797+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHybridTG3_ConfidenceMin_FloorEnforced_T022","Output":" \tError: \tReceived unexpected error:\n"} +{"Time":"2026-07-11T03:35:53.7348797+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHybridTG3_ConfidenceMin_FloorEnforced_T022","Output":" \t \tjson: cannot unmarshal array into Go value of type map[string]interface {}\n"} +{"Time":"2026-07-11T03:35:53.7348797+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHybridTG3_ConfidenceMin_FloorEnforced_T022","Output":" \tTest: \tTestHybridTG3_ConfidenceMin_FloorEnforced_T022\n"} +{"Time":"2026-07-11T03:35:53.7348797+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHybridTG3_ConfidenceMin_FloorEnforced_T022","Output":" \tMessages: \tresponse must be valid JSON\n"} +{"Time":"2026-07-11T03:35:53.7483782+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHybridTG3_ConfidenceMin_FloorEnforced_T022","Output":"--- FAIL: TestHybridTG3_ConfidenceMin_FloorEnforced_T022 (0.18s)\n"} +{"Time":"2026-07-11T03:35:53.7483782+03:00","Action":"fail","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHybridTG3_ConfidenceMin_FloorEnforced_T022","Elapsed":0.18} +{"Time":"2026-07-11T03:35:53.7483782+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHybridTG3_IncludeSuperseded_StructuredError_T022b"} +{"Time":"2026-07-11T03:35:53.7483782+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHybridTG3_IncludeSuperseded_StructuredError_T022b","Output":"=== RUN TestHybridTG3_IncludeSuperseded_StructuredError_T022b\n"} +{"Time":"2026-07-11T03:35:53.7483782+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHybridTG3_IncludeSuperseded_StructuredError_T022b","Output":"--- PASS: TestHybridTG3_IncludeSuperseded_StructuredError_T022b (0.00s)\n"} +{"Time":"2026-07-11T03:35:53.7483782+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHybridTG3_IncludeSuperseded_StructuredError_T022b","Elapsed":0} +{"Time":"2026-07-11T03:35:53.7483782+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHybridTG3_IncludeSuperseded_False_NoError_T022c"} +{"Time":"2026-07-11T03:35:53.7483782+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHybridTG3_IncludeSuperseded_False_NoError_T022c","Output":"=== RUN TestHybridTG3_IncludeSuperseded_False_NoError_T022c\n"} +{"Time":"2026-07-11T03:35:53.8714104+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHybridTG3_IncludeSuperseded_False_NoError_T022c","Output":"{\"level\":\"debug\",\"connections\":1,\"time\":\"2026-07-11T03:35:53+03:00\",\"message\":\"Connection pool warmed\"}\n"} +{"Time":"2026-07-11T03:35:53.8834132+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHybridTG3_IncludeSuperseded_False_NoError_T022c","Output":"--- PASS: TestHybridTG3_IncludeSuperseded_False_NoError_T022c (0.13s)\n"} +{"Time":"2026-07-11T03:35:53.8834132+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHybridTG3_IncludeSuperseded_False_NoError_T022c","Elapsed":0.13} +{"Time":"2026-07-11T03:35:53.8834132+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecall_ScopeInvisibleNewestDoNotTruncate_CodexP1Cycle3"} +{"Time":"2026-07-11T03:35:53.8834132+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecall_ScopeInvisibleNewestDoNotTruncate_CodexP1Cycle3","Output":"=== RUN TestRecall_ScopeInvisibleNewestDoNotTruncate_CodexP1Cycle3\n"} +{"Time":"2026-07-11T03:35:54.0023478+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecall_ScopeInvisibleNewestDoNotTruncate_CodexP1Cycle3","Output":"{\"level\":\"debug\",\"connections\":1,\"time\":\"2026-07-11T03:35:54+03:00\",\"message\":\"Connection pool warmed\"}\n"} +{"Time":"2026-07-11T03:35:54.0443491+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecall_ScopeInvisibleNewestDoNotTruncate_CodexP1Cycle3","Output":"--- PASS: TestRecall_ScopeInvisibleNewestDoNotTruncate_CodexP1Cycle3 (0.16s)\n"} +{"Time":"2026-07-11T03:35:54.0443491+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecall_ScopeInvisibleNewestDoNotTruncate_CodexP1Cycle3","Elapsed":0.16} +{"Time":"2026-07-11T03:35:54.0443491+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecall_PrincipalPrivateInvisibleNewestDoNotTruncate_FlagOff"} +{"Time":"2026-07-11T03:35:54.0443491+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecall_PrincipalPrivateInvisibleNewestDoNotTruncate_FlagOff","Output":"=== RUN TestRecall_PrincipalPrivateInvisibleNewestDoNotTruncate_FlagOff\n"} +{"Time":"2026-07-11T03:35:54.1576101+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecall_PrincipalPrivateInvisibleNewestDoNotTruncate_FlagOff","Output":"{\"level\":\"debug\",\"connections\":1,\"time\":\"2026-07-11T03:35:54+03:00\",\"message\":\"Connection pool warmed\"}\n"} +{"Time":"2026-07-11T03:35:54.1971098+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecall_PrincipalPrivateInvisibleNewestDoNotTruncate_FlagOff","Output":"--- PASS: TestRecall_PrincipalPrivateInvisibleNewestDoNotTruncate_FlagOff (0.15s)\n"} +{"Time":"2026-07-11T03:35:54.1971098+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecall_PrincipalPrivateInvisibleNewestDoNotTruncate_FlagOff","Elapsed":0.15} +{"Time":"2026-07-11T03:35:54.1971098+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemory_PrincipalPrivateInvisibleAndSharedAttributed_FlagOff"} +{"Time":"2026-07-11T03:35:54.1971098+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemory_PrincipalPrivateInvisibleAndSharedAttributed_FlagOff","Output":"=== RUN TestRecallMemory_PrincipalPrivateInvisibleAndSharedAttributed_FlagOff\n"} +{"Time":"2026-07-11T03:35:54.3122788+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemory_PrincipalPrivateInvisibleAndSharedAttributed_FlagOff","Output":"{\"level\":\"debug\",\"connections\":1,\"time\":\"2026-07-11T03:35:54+03:00\",\"message\":\"Connection pool warmed\"}\n"} +{"Time":"2026-07-11T03:35:54.3417768+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemory_PrincipalPrivateInvisibleAndSharedAttributed_FlagOff","Output":"--- PASS: TestRecallMemory_PrincipalPrivateInvisibleAndSharedAttributed_FlagOff (0.14s)\n"} +{"Time":"2026-07-11T03:35:54.3422767+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemory_PrincipalPrivateInvisibleAndSharedAttributed_FlagOff","Elapsed":0.14} +{"Time":"2026-07-11T03:35:54.3422767+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemory_DomainOwnedInvisibleNewestDoNotTruncate_FlagOff"} +{"Time":"2026-07-11T03:35:54.3422767+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemory_DomainOwnedInvisibleNewestDoNotTruncate_FlagOff","Output":"=== RUN TestRecallMemory_DomainOwnedInvisibleNewestDoNotTruncate_FlagOff\n"} +{"Time":"2026-07-11T03:35:54.4507785+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemory_DomainOwnedInvisibleNewestDoNotTruncate_FlagOff","Output":"{\"level\":\"debug\",\"connections\":1,\"time\":\"2026-07-11T03:35:54+03:00\",\"message\":\"Connection pool warmed\"}\n"} +{"Time":"2026-07-11T03:35:54.4873099+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemory_DomainOwnedInvisibleNewestDoNotTruncate_FlagOff","Output":"--- PASS: TestRecallMemory_DomainOwnedInvisibleNewestDoNotTruncate_FlagOff (0.15s)\n"} +{"Time":"2026-07-11T03:35:54.4873099+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemory_DomainOwnedInvisibleNewestDoNotTruncate_FlagOff","Elapsed":0.15} +{"Time":"2026-07-11T03:35:54.4873099+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemory_TG3IncludeSupersededLegacyPath"} +{"Time":"2026-07-11T03:35:54.4873099+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemory_TG3IncludeSupersededLegacyPath","Output":"=== RUN TestRecallMemory_TG3IncludeSupersededLegacyPath\n"} +{"Time":"2026-07-11T03:35:54.5948085+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemory_TG3IncludeSupersededLegacyPath","Output":"{\"level\":\"debug\",\"connections\":1,\"time\":\"2026-07-11T03:35:54+03:00\",\"message\":\"Connection pool warmed\"}\n"} +{"Time":"2026-07-11T03:35:54.6178085+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemory_TG3IncludeSupersededLegacyPath","Output":"--- PASS: TestRecallMemory_TG3IncludeSupersededLegacyPath (0.13s)\n"} +{"Time":"2026-07-11T03:35:54.6178085+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemory_TG3IncludeSupersededLegacyPath","Elapsed":0.13} +{"Time":"2026-07-11T03:35:54.6178085+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemory_IncludeSupersededFlagOffIgnoredInHybrid"} +{"Time":"2026-07-11T03:35:54.6178085+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemory_IncludeSupersededFlagOffIgnoredInHybrid","Output":"=== RUN TestRecallMemory_IncludeSupersededFlagOffIgnoredInHybrid\n"} +{"Time":"2026-07-11T03:35:54.7283029+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemory_IncludeSupersededFlagOffIgnoredInHybrid","Output":"{\"level\":\"debug\",\"connections\":1,\"time\":\"2026-07-11T03:35:54+03:00\",\"message\":\"Connection pool warmed\"}\n"} +{"Time":"2026-07-11T03:35:54.7407005+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemory_IncludeSupersededFlagOffIgnoredInHybrid","Output":"--- PASS: TestRecallMemory_IncludeSupersededFlagOffIgnoredInHybrid (0.12s)\n"} +{"Time":"2026-07-11T03:35:54.7407005+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemory_IncludeSupersededFlagOffIgnoredInHybrid","Elapsed":0.12} +{"Time":"2026-07-11T03:35:54.7407005+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryAlwaysInject_GovernanceFlagCreatesRuleCandidate"} +{"Time":"2026-07-11T03:35:54.7407005+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryAlwaysInject_GovernanceFlagCreatesRuleCandidate","Output":"=== RUN TestStoreMemoryAlwaysInject_GovernanceFlagCreatesRuleCandidate\n"} +{"Time":"2026-07-11T03:35:54.7412042+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryAlwaysInject_GovernanceFlagCreatesRuleCandidate","Output":"--- PASS: TestStoreMemoryAlwaysInject_GovernanceFlagCreatesRuleCandidate (0.00s)\n"} +{"Time":"2026-07-11T03:35:54.7412042+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryAlwaysInject_GovernanceFlagCreatesRuleCandidate","Elapsed":0} +{"Time":"2026-07-11T03:35:54.7412042+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryAlwaysInject_FlagOffDoesNotUseRuleGovernance"} +{"Time":"2026-07-11T03:35:54.7412042+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryAlwaysInject_FlagOffDoesNotUseRuleGovernance","Output":"=== RUN TestStoreMemoryAlwaysInject_FlagOffDoesNotUseRuleGovernance\n"} +{"Time":"2026-07-11T03:35:54.7412042+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryAlwaysInject_FlagOffDoesNotUseRuleGovernance","Output":"--- PASS: TestStoreMemoryAlwaysInject_FlagOffDoesNotUseRuleGovernance (0.00s)\n"} +{"Time":"2026-07-11T03:35:54.7412042+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryAlwaysInject_FlagOffDoesNotUseRuleGovernance","Elapsed":0} +{"Time":"2026-07-11T03:35:54.7412042+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreRule_GovernanceFlagCreatesRuleCandidate"} +{"Time":"2026-07-11T03:35:54.7412042+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreRule_GovernanceFlagCreatesRuleCandidate","Output":"=== RUN TestStoreRule_GovernanceFlagCreatesRuleCandidate\n"} +{"Time":"2026-07-11T03:35:54.7412042+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreRule_GovernanceFlagCreatesRuleCandidate","Output":"--- PASS: TestStoreRule_GovernanceFlagCreatesRuleCandidate (0.00s)\n"} +{"Time":"2026-07-11T03:35:54.7412042+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreRule_GovernanceFlagCreatesRuleCandidate","Elapsed":0} +{"Time":"2026-07-11T03:35:54.7412042+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreRule_GovernanceFlagPreservesGlobalIntentWithContextProject"} +{"Time":"2026-07-11T03:35:54.7412042+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreRule_GovernanceFlagPreservesGlobalIntentWithContextProject","Output":"=== RUN TestStoreRule_GovernanceFlagPreservesGlobalIntentWithContextProject\n"} +{"Time":"2026-07-11T03:35:54.7412042+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreRule_GovernanceFlagPreservesGlobalIntentWithContextProject","Output":"--- PASS: TestStoreRule_GovernanceFlagPreservesGlobalIntentWithContextProject (0.00s)\n"} +{"Time":"2026-07-11T03:35:54.7412042+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreRule_GovernanceFlagPreservesGlobalIntentWithContextProject","Elapsed":0} +{"Time":"2026-07-11T03:35:54.7412042+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreRule_GovernanceFlagRedactsCandidateContent"} +{"Time":"2026-07-11T03:35:54.7412042+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreRule_GovernanceFlagRedactsCandidateContent","Output":"=== RUN TestStoreRule_GovernanceFlagRedactsCandidateContent\n"} +{"Time":"2026-07-11T03:35:54.7417013+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreRule_GovernanceFlagRedactsCandidateContent","Output":"--- PASS: TestStoreRule_GovernanceFlagRedactsCandidateContent (0.00s)\n"} +{"Time":"2026-07-11T03:35:54.7417013+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreRule_GovernanceFlagRedactsCandidateContent","Elapsed":0} +{"Time":"2026-07-11T03:35:54.7417013+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreRule_FlagOffDoesNotUseRuleGovernance"} +{"Time":"2026-07-11T03:35:54.7417013+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreRule_FlagOffDoesNotUseRuleGovernance","Output":"=== RUN TestStoreRule_FlagOffDoesNotUseRuleGovernance\n"} +{"Time":"2026-07-11T03:35:54.7417013+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreRule_FlagOffDoesNotUseRuleGovernance","Output":"--- PASS: TestStoreRule_FlagOffDoesNotUseRuleGovernance (0.00s)\n"} +{"Time":"2026-07-11T03:35:54.7417013+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreRule_FlagOffDoesNotUseRuleGovernance","Elapsed":0} +{"Time":"2026-07-11T03:35:54.7417013+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleRequest_GetAmbientHintsDispatchesThroughToolsCall"} +{"Time":"2026-07-11T03:35:54.7417013+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleRequest_GetAmbientHintsDispatchesThroughToolsCall","Output":"=== RUN TestHandleRequest_GetAmbientHintsDispatchesThroughToolsCall\n"} +{"Time":"2026-07-11T03:35:54.7417013+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleRequest_GetAmbientHintsDispatchesThroughToolsCall","Output":"--- PASS: TestHandleRequest_GetAmbientHintsDispatchesThroughToolsCall (0.00s)\n"} +{"Time":"2026-07-11T03:35:54.7417013+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleRequest_GetAmbientHintsDispatchesThroughToolsCall","Elapsed":0} +{"Time":"2026-07-11T03:35:54.7417013+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleRequest_GetAmbientHintsUnknownToolRegressionGuard"} +{"Time":"2026-07-11T03:35:54.7417013+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleRequest_GetAmbientHintsUnknownToolRegressionGuard","Output":"=== RUN TestHandleRequest_GetAmbientHintsUnknownToolRegressionGuard\n"} +{"Time":"2026-07-11T03:35:54.7417013+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleRequest_GetAmbientHintsUnknownToolRegressionGuard","Output":"--- PASS: TestHandleRequest_GetAmbientHintsUnknownToolRegressionGuard (0.00s)\n"} +{"Time":"2026-07-11T03:35:54.7417013+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleRequest_GetAmbientHintsUnknownToolRegressionGuard","Elapsed":0} +{"Time":"2026-07-11T03:35:54.7417013+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestServerSetAuditStoreAssignsField"} +{"Time":"2026-07-11T03:35:54.7417013+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestServerSetAuditStoreAssignsField","Output":"=== RUN TestServerSetAuditStoreAssignsField\n"} +{"Time":"2026-07-11T03:35:54.7417013+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestServerSetAuditStoreAssignsField","Output":"--- PASS: TestServerSetAuditStoreAssignsField (0.00s)\n"} +{"Time":"2026-07-11T03:35:54.7417013+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestServerSetAuditStoreAssignsField","Elapsed":0} +{"Time":"2026-07-11T03:35:54.7417013+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRequest_Marshal_Table"} +{"Time":"2026-07-11T03:35:54.7417013+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRequest_Marshal_Table","Output":"=== RUN TestRequest_Marshal_Table\n"} +{"Time":"2026-07-11T03:35:54.7417013+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRequest_Marshal_Table","Output":"=== PAUSE TestRequest_Marshal_Table\n"} +{"Time":"2026-07-11T03:35:54.7417013+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRequest_Marshal_Table"} +{"Time":"2026-07-11T03:35:54.7417013+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRequest_Unmarshal_RoundTrip"} +{"Time":"2026-07-11T03:35:54.7417013+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRequest_Unmarshal_RoundTrip","Output":"=== RUN TestRequest_Unmarshal_RoundTrip\n"} +{"Time":"2026-07-11T03:35:54.7417013+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRequest_Unmarshal_RoundTrip","Output":"=== PAUSE TestRequest_Unmarshal_RoundTrip\n"} +{"Time":"2026-07-11T03:35:54.7417013+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRequest_Unmarshal_RoundTrip"} +{"Time":"2026-07-11T03:35:54.7417013+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRequest_Unmarshal_NullID"} +{"Time":"2026-07-11T03:35:54.7417013+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRequest_Unmarshal_NullID","Output":"=== RUN TestRequest_Unmarshal_NullID\n"} +{"Time":"2026-07-11T03:35:54.7417013+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRequest_Unmarshal_NullID","Output":"=== PAUSE TestRequest_Unmarshal_NullID\n"} +{"Time":"2026-07-11T03:35:54.7417013+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRequest_Unmarshal_NullID"} +{"Time":"2026-07-11T03:35:54.7417013+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestResponse_Marshal_Table"} +{"Time":"2026-07-11T03:35:54.7417013+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestResponse_Marshal_Table","Output":"=== RUN TestResponse_Marshal_Table\n"} +{"Time":"2026-07-11T03:35:54.7417013+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestResponse_Marshal_Table","Output":"=== PAUSE TestResponse_Marshal_Table\n"} +{"Time":"2026-07-11T03:35:54.7417013+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestResponse_Marshal_Table"} +{"Time":"2026-07-11T03:35:54.7417013+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestError_Marshal_Table"} +{"Time":"2026-07-11T03:35:54.7417013+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestError_Marshal_Table","Output":"=== RUN TestError_Marshal_Table\n"} +{"Time":"2026-07-11T03:35:54.7417013+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestError_Marshal_Table","Output":"=== PAUSE TestError_Marshal_Table\n"} +{"Time":"2026-07-11T03:35:54.7417013+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestError_Marshal_Table"} +{"Time":"2026-07-11T03:35:54.7417013+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestError_NilData_NotInOutput"} +{"Time":"2026-07-11T03:35:54.7417013+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestError_NilData_NotInOutput","Output":"=== RUN TestError_NilData_NotInOutput\n"} +{"Time":"2026-07-11T03:35:54.7417013+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestError_NilData_NotInOutput","Output":"=== PAUSE TestError_NilData_NotInOutput\n"} +{"Time":"2026-07-11T03:35:54.7417013+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestError_NilData_NotInOutput"} +{"Time":"2026-07-11T03:35:54.7417013+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestToolCallParams_Unmarshal"} +{"Time":"2026-07-11T03:35:54.7417013+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestToolCallParams_Unmarshal","Output":"=== RUN TestToolCallParams_Unmarshal\n"} +{"Time":"2026-07-11T03:35:54.7417013+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestToolCallParams_Unmarshal","Output":"=== PAUSE TestToolCallParams_Unmarshal\n"} +{"Time":"2026-07-11T03:35:54.7417013+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestToolCallParams_Unmarshal"} +{"Time":"2026-07-11T03:35:54.7417013+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestToolCallParams_ComplexArgs"} +{"Time":"2026-07-11T03:35:54.7417013+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestToolCallParams_ComplexArgs","Output":"=== RUN TestToolCallParams_ComplexArgs\n"} +{"Time":"2026-07-11T03:35:54.7417013+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestToolCallParams_ComplexArgs","Output":"=== PAUSE TestToolCallParams_ComplexArgs\n"} +{"Time":"2026-07-11T03:35:54.7417013+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestToolCallParams_ComplexArgs"} +{"Time":"2026-07-11T03:35:54.7417013+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTool_Marshal_RoundTrip"} +{"Time":"2026-07-11T03:35:54.7417013+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTool_Marshal_RoundTrip","Output":"=== RUN TestTool_Marshal_RoundTrip\n"} +{"Time":"2026-07-11T03:35:54.7417013+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTool_Marshal_RoundTrip","Output":"=== PAUSE TestTool_Marshal_RoundTrip\n"} +{"Time":"2026-07-11T03:35:54.7417013+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTool_Marshal_RoundTrip"} +{"Time":"2026-07-11T03:35:54.7417013+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTimelineParams_Unmarshal_Table"} +{"Time":"2026-07-11T03:35:54.7417013+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTimelineParams_Unmarshal_Table","Output":"=== RUN TestTimelineParams_Unmarshal_Table\n"} +{"Time":"2026-07-11T03:35:54.7417013+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTimelineParams_Unmarshal_Table","Output":"=== PAUSE TestTimelineParams_Unmarshal_Table\n"} +{"Time":"2026-07-11T03:35:54.7417013+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTimelineParams_Unmarshal_Table"} +{"Time":"2026-07-11T03:35:54.7417013+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTimelineParams_AllFields"} +{"Time":"2026-07-11T03:35:54.7417013+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTimelineParams_AllFields","Output":"=== RUN TestTimelineParams_AllFields\n"} +{"Time":"2026-07-11T03:35:54.7417013+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTimelineParams_AllFields","Output":"=== PAUSE TestTimelineParams_AllFields\n"} +{"Time":"2026-07-11T03:35:54.7417013+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTimelineParams_AllFields"} +{"Time":"2026-07-11T03:35:54.7417013+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestNewServer_CreatesWithVersion"} +{"Time":"2026-07-11T03:35:54.7417013+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestNewServer_CreatesWithVersion","Output":"=== RUN TestNewServer_CreatesWithVersion\n"} +{"Time":"2026-07-11T03:35:54.7417013+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestNewServer_CreatesWithVersion","Output":"=== PAUSE TestNewServer_CreatesWithVersion\n"} +{"Time":"2026-07-11T03:35:54.7417013+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestNewServer_CreatesWithVersion"} +{"Time":"2026-07-11T03:35:54.7417013+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestNewServer_HasStdinStdout"} +{"Time":"2026-07-11T03:35:54.7417013+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestNewServer_HasStdinStdout","Output":"=== RUN TestNewServer_HasStdinStdout\n"} +{"Time":"2026-07-11T03:35:54.7417013+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestNewServer_HasStdinStdout","Output":"=== PAUSE TestNewServer_HasStdinStdout\n"} +{"Time":"2026-07-11T03:35:54.7417013+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestNewServer_HasStdinStdout"} +{"Time":"2026-07-11T03:35:54.7417013+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestVersion_ReturnsVersion"} +{"Time":"2026-07-11T03:35:54.7417013+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestVersion_ReturnsVersion","Output":"=== RUN TestVersion_ReturnsVersion\n"} +{"Time":"2026-07-11T03:35:54.7422016+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestVersion_ReturnsVersion","Output":"=== PAUSE TestVersion_ReturnsVersion\n"} +{"Time":"2026-07-11T03:35:54.7422016+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestVersion_ReturnsVersion"} +{"Time":"2026-07-11T03:35:54.7422016+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestServer_FieldsInjected"} +{"Time":"2026-07-11T03:35:54.7422016+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestServer_FieldsInjected","Output":"=== RUN TestServer_FieldsInjected\n"} +{"Time":"2026-07-11T03:35:54.7422016+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestServer_FieldsInjected","Output":"=== PAUSE TestServer_FieldsInjected\n"} +{"Time":"2026-07-11T03:35:54.7422016+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestServer_FieldsInjected"} +{"Time":"2026-07-11T03:35:54.7422016+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleInitialize_ProtocolAndVersion"} +{"Time":"2026-07-11T03:35:54.7422016+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleInitialize_ProtocolAndVersion","Output":"=== RUN TestHandleInitialize_ProtocolAndVersion\n"} +{"Time":"2026-07-11T03:35:54.7422016+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleInitialize_ProtocolAndVersion","Output":"=== PAUSE TestHandleInitialize_ProtocolAndVersion\n"} +{"Time":"2026-07-11T03:35:54.7422016+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleInitialize_ProtocolAndVersion"} +{"Time":"2026-07-11T03:35:54.7422016+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleInitialize_CapabilitiesPresent"} +{"Time":"2026-07-11T03:35:54.7422016+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleInitialize_CapabilitiesPresent","Output":"=== RUN TestHandleInitialize_CapabilitiesPresent\n"} +{"Time":"2026-07-11T03:35:54.7422016+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleInitialize_CapabilitiesPresent","Output":"=== PAUSE TestHandleInitialize_CapabilitiesPresent\n"} +{"Time":"2026-07-11T03:35:54.7422016+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleInitialize_CapabilitiesPresent"} +{"Time":"2026-07-11T03:35:54.7422016+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleInitialize_IDEchoed"} +{"Time":"2026-07-11T03:35:54.7422016+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleInitialize_IDEchoed","Output":"=== RUN TestHandleInitialize_IDEchoed\n"} +{"Time":"2026-07-11T03:35:54.7422016+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleInitialize_IDEchoed","Output":"=== PAUSE TestHandleInitialize_IDEchoed\n"} +{"Time":"2026-07-11T03:35:54.7422016+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleInitialize_IDEchoed"} +{"Time":"2026-07-11T03:35:54.7422016+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsList_PrimaryToolsPresent"} +{"Time":"2026-07-11T03:35:54.7422016+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsList_PrimaryToolsPresent","Output":"=== RUN TestHandleToolsList_PrimaryToolsPresent\n"} +{"Time":"2026-07-11T03:35:54.7422016+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsList_PrimaryToolsPresent","Output":"=== PAUSE TestHandleToolsList_PrimaryToolsPresent\n"} +{"Time":"2026-07-11T03:35:54.7422016+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsList_PrimaryToolsPresent"} +{"Time":"2026-07-11T03:35:54.7422016+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsList_DefaultCountMatchesPrimary"} +{"Time":"2026-07-11T03:35:54.7422016+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsList_DefaultCountMatchesPrimary","Output":"=== RUN TestHandleToolsList_DefaultCountMatchesPrimary\n"} +{"Time":"2026-07-11T03:35:54.7422016+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsList_DefaultCountMatchesPrimary","Output":"=== PAUSE TestHandleToolsList_DefaultCountMatchesPrimary\n"} +{"Time":"2026-07-11T03:35:54.7422016+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsList_DefaultCountMatchesPrimary"} +{"Time":"2026-07-11T03:35:54.7422016+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsList_IncludeAllReturnsMore"} +{"Time":"2026-07-11T03:35:54.7422016+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsList_IncludeAllReturnsMore","Output":"=== RUN TestHandleToolsList_IncludeAllReturnsMore\n"} +{"Time":"2026-07-11T03:35:54.7422016+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsList_IncludeAllReturnsMore","Output":"=== PAUSE TestHandleToolsList_IncludeAllReturnsMore\n"} +{"Time":"2026-07-11T03:35:54.7422016+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsList_IncludeAllReturnsMore"} +{"Time":"2026-07-11T03:35:54.7422016+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsList_IncludeAllContainsLegacy"} +{"Time":"2026-07-11T03:35:54.7422016+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsList_IncludeAllContainsLegacy","Output":"=== RUN TestHandleToolsList_IncludeAllContainsLegacy\n"} +{"Time":"2026-07-11T03:35:54.7422016+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsList_IncludeAllContainsLegacy","Output":"=== PAUSE TestHandleToolsList_IncludeAllContainsLegacy\n"} +{"Time":"2026-07-11T03:35:54.7422016+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsList_IncludeAllContainsLegacy"} +{"Time":"2026-07-11T03:35:54.7422016+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsList_RemovedToolsAbsent"} +{"Time":"2026-07-11T03:35:54.7422016+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsList_RemovedToolsAbsent","Output":"=== RUN TestHandleToolsList_RemovedToolsAbsent\n"} +{"Time":"2026-07-11T03:35:54.7422016+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsList_RemovedToolsAbsent","Output":"=== PAUSE TestHandleToolsList_RemovedToolsAbsent\n"} +{"Time":"2026-07-11T03:35:54.7422016+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsList_RemovedToolsAbsent"} +{"Time":"2026-07-11T03:35:54.7422016+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsList_SchemaCompliance_NoForbiddenTopLevelKeys"} +{"Time":"2026-07-11T03:35:54.7422016+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsList_SchemaCompliance_NoForbiddenTopLevelKeys","Output":"=== RUN TestHandleToolsList_SchemaCompliance_NoForbiddenTopLevelKeys\n"} +{"Time":"2026-07-11T03:35:54.7422016+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsList_SchemaCompliance_NoForbiddenTopLevelKeys","Output":"=== PAUSE TestHandleToolsList_SchemaCompliance_NoForbiddenTopLevelKeys\n"} +{"Time":"2026-07-11T03:35:54.7422016+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsList_SchemaCompliance_NoForbiddenTopLevelKeys"} +{"Time":"2026-07-11T03:35:54.7422016+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsList_AllToolSchemasHaveTypeAndProperties"} +{"Time":"2026-07-11T03:35:54.7422016+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsList_AllToolSchemasHaveTypeAndProperties","Output":"=== RUN TestHandleToolsList_AllToolSchemasHaveTypeAndProperties\n"} +{"Time":"2026-07-11T03:35:54.7422016+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsList_AllToolSchemasHaveTypeAndProperties","Output":"=== PAUSE TestHandleToolsList_AllToolSchemasHaveTypeAndProperties\n"} +{"Time":"2026-07-11T03:35:54.7422016+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsList_AllToolSchemasHaveTypeAndProperties"} +{"Time":"2026-07-11T03:35:54.7422016+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsList_FeedbackSchemaCorrect"} +{"Time":"2026-07-11T03:35:54.7422016+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsList_FeedbackSchemaCorrect","Output":"=== RUN TestHandleToolsList_FeedbackSchemaCorrect\n"} +{"Time":"2026-07-11T03:35:54.7422016+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsList_FeedbackSchemaCorrect","Output":"=== PAUSE TestHandleToolsList_FeedbackSchemaCorrect\n"} +{"Time":"2026-07-11T03:35:54.7422016+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsList_FeedbackSchemaCorrect"} +{"Time":"2026-07-11T03:35:54.7422016+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsList_StoreTypeEnumCorrect"} +{"Time":"2026-07-11T03:35:54.7422016+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsList_StoreTypeEnumCorrect","Output":"=== RUN TestHandleToolsList_StoreTypeEnumCorrect\n"} +{"Time":"2026-07-11T03:35:54.7422016+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsList_StoreTypeEnumCorrect","Output":"=== PAUSE TestHandleToolsList_StoreTypeEnumCorrect\n"} +{"Time":"2026-07-11T03:35:54.7422016+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsList_StoreTypeEnumCorrect"} +{"Time":"2026-07-11T03:35:54.7422016+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleRequest_InitializeRoute"} +{"Time":"2026-07-11T03:35:54.7422016+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleRequest_InitializeRoute","Output":"=== RUN TestHandleRequest_InitializeRoute\n"} +{"Time":"2026-07-11T03:35:54.7422016+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleRequest_InitializeRoute","Output":"=== PAUSE TestHandleRequest_InitializeRoute\n"} +{"Time":"2026-07-11T03:35:54.7422016+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleRequest_InitializeRoute"} +{"Time":"2026-07-11T03:35:54.7422016+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleRequest_ToolsListRoute"} +{"Time":"2026-07-11T03:35:54.7422016+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleRequest_ToolsListRoute","Output":"=== RUN TestHandleRequest_ToolsListRoute\n"} +{"Time":"2026-07-11T03:35:54.7422016+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleRequest_ToolsListRoute","Output":"=== PAUSE TestHandleRequest_ToolsListRoute\n"} +{"Time":"2026-07-11T03:35:54.7422016+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleRequest_ToolsListRoute"} +{"Time":"2026-07-11T03:35:54.7422016+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleRequest_UnknownMethodError"} +{"Time":"2026-07-11T03:35:54.7422016+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleRequest_UnknownMethodError","Output":"=== RUN TestHandleRequest_UnknownMethodError\n"} +{"Time":"2026-07-11T03:35:54.7422016+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleRequest_UnknownMethodError","Output":"=== PAUSE TestHandleRequest_UnknownMethodError\n"} +{"Time":"2026-07-11T03:35:54.7422016+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleRequest_UnknownMethodError"} +{"Time":"2026-07-11T03:35:54.7422016+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleRequest_NotificationReturnsNil"} +{"Time":"2026-07-11T03:35:54.7422016+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleRequest_NotificationReturnsNil","Output":"=== RUN TestHandleRequest_NotificationReturnsNil\n"} +{"Time":"2026-07-11T03:35:54.7422016+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleRequest_NotificationReturnsNil","Output":"=== PAUSE TestHandleRequest_NotificationReturnsNil\n"} +{"Time":"2026-07-11T03:35:54.7422016+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleRequest_NotificationReturnsNil"} +{"Time":"2026-07-11T03:35:54.7422016+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleRequest_CapabilityStubs"} +{"Time":"2026-07-11T03:35:54.7422016+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleRequest_CapabilityStubs","Output":"=== RUN TestHandleRequest_CapabilityStubs\n"} +{"Time":"2026-07-11T03:35:54.7422016+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleRequest_CapabilityStubs","Output":"=== PAUSE TestHandleRequest_CapabilityStubs\n"} +{"Time":"2026-07-11T03:35:54.7422016+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleRequest_CapabilityStubs"} +{"Time":"2026-07-11T03:35:54.7422016+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsCall_InvalidParamsJSON"} +{"Time":"2026-07-11T03:35:54.7422016+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsCall_InvalidParamsJSON","Output":"=== RUN TestHandleToolsCall_InvalidParamsJSON\n"} +{"Time":"2026-07-11T03:35:54.7422016+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsCall_InvalidParamsJSON","Output":"=== PAUSE TestHandleToolsCall_InvalidParamsJSON\n"} +{"Time":"2026-07-11T03:35:54.7422016+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsCall_InvalidParamsJSON"} +{"Time":"2026-07-11T03:35:54.7422016+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsCall_EmptyParams"} +{"Time":"2026-07-11T03:35:54.7422016+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsCall_EmptyParams","Output":"=== RUN TestHandleToolsCall_EmptyParams\n"} +{"Time":"2026-07-11T03:35:54.7422016+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsCall_EmptyParams","Output":"=== PAUSE TestHandleToolsCall_EmptyParams\n"} +{"Time":"2026-07-11T03:35:54.7422016+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsCall_EmptyParams"} +{"Time":"2026-07-11T03:35:54.7422016+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsCall_UnknownTool"} +{"Time":"2026-07-11T03:35:54.7422016+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsCall_UnknownTool","Output":"=== RUN TestHandleToolsCall_UnknownTool\n"} +{"Time":"2026-07-11T03:35:54.7422016+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsCall_UnknownTool","Output":"=== PAUSE TestHandleToolsCall_UnknownTool\n"} +{"Time":"2026-07-11T03:35:54.7422016+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsCall_UnknownTool"} +{"Time":"2026-07-11T03:35:54.7422016+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSanitizeToolCallArgs_RememberDirectiveRedactsRawLogArguments"} +{"Time":"2026-07-11T03:35:54.7422016+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSanitizeToolCallArgs_RememberDirectiveRedactsRawLogArguments","Output":"=== RUN TestSanitizeToolCallArgs_RememberDirectiveRedactsRawLogArguments\n"} +{"Time":"2026-07-11T03:35:54.7422016+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSanitizeToolCallArgs_RememberDirectiveRedactsRawLogArguments","Output":"=== PAUSE TestSanitizeToolCallArgs_RememberDirectiveRedactsRawLogArguments\n"} +{"Time":"2026-07-11T03:35:54.7422016+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSanitizeToolCallArgs_RememberDirectiveRedactsRawLogArguments"} +{"Time":"2026-07-11T03:35:54.7422016+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSanitizeToolCallArgs_OtherToolsStillRedactSecrets"} +{"Time":"2026-07-11T03:35:54.7422016+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSanitizeToolCallArgs_OtherToolsStillRedactSecrets","Output":"=== RUN TestSanitizeToolCallArgs_OtherToolsStillRedactSecrets\n"} +{"Time":"2026-07-11T03:35:54.7422016+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSanitizeToolCallArgs_OtherToolsStillRedactSecrets","Output":"=== PAUSE TestSanitizeToolCallArgs_OtherToolsStillRedactSecrets\n"} +{"Time":"2026-07-11T03:35:54.7422016+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSanitizeToolCallArgs_OtherToolsStillRedactSecrets"} +{"Time":"2026-07-11T03:35:54.7422016+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_UnknownToolReturnsError"} +{"Time":"2026-07-11T03:35:54.7422016+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_UnknownToolReturnsError","Output":"=== RUN TestCallTool_UnknownToolReturnsError\n"} +{"Time":"2026-07-11T03:35:54.7422016+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_UnknownToolReturnsError","Output":"=== PAUSE TestCallTool_UnknownToolReturnsError\n"} +{"Time":"2026-07-11T03:35:54.7422016+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_UnknownToolReturnsError"} +{"Time":"2026-07-11T03:35:54.7422016+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_UnknownToolNames_Table"} +{"Time":"2026-07-11T03:35:54.7422016+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_UnknownToolNames_Table","Output":"=== RUN TestCallTool_UnknownToolNames_Table\n"} +{"Time":"2026-07-11T03:35:54.7427001+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_UnknownToolNames_Table","Output":"=== PAUSE TestCallTool_UnknownToolNames_Table\n"} +{"Time":"2026-07-11T03:35:54.7427001+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_UnknownToolNames_Table"} +{"Time":"2026-07-11T03:35:54.7427001+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_FindByFile_Removed"} +{"Time":"2026-07-11T03:35:54.7427001+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_FindByFile_Removed","Output":"=== RUN TestCallTool_FindByFile_Removed\n"} +{"Time":"2026-07-11T03:35:54.7427001+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_FindByFile_Removed","Output":"=== PAUSE TestCallTool_FindByFile_Removed\n"} +{"Time":"2026-07-11T03:35:54.7427001+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_FindByFile_Removed"} +{"Time":"2026-07-11T03:35:54.7427001+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_GetMemoryStats_NilStores"} +{"Time":"2026-07-11T03:35:54.7427001+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_GetMemoryStats_NilStores","Output":"=== RUN TestCallTool_GetMemoryStats_NilStores\n"} +{"Time":"2026-07-11T03:35:54.7427001+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_GetMemoryStats_NilStores","Output":"=== PAUSE TestCallTool_GetMemoryStats_NilStores\n"} +{"Time":"2026-07-11T03:35:54.7427001+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_GetMemoryStats_NilStores"} +{"Time":"2026-07-11T03:35:54.7427001+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetMemoryStats_NilDB_NoMemoryOrVnextSections"} +{"Time":"2026-07-11T03:35:54.7427001+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetMemoryStats_NilDB_NoMemoryOrVnextSections","Output":"=== RUN TestGetMemoryStats_NilDB_NoMemoryOrVnextSections\n"} +{"Time":"2026-07-11T03:35:54.7427001+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetMemoryStats_NilDB_NoMemoryOrVnextSections","Output":"=== PAUSE TestGetMemoryStats_NilDB_NoMemoryOrVnextSections\n"} +{"Time":"2026-07-11T03:35:54.7427001+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetMemoryStats_NilDB_NoMemoryOrVnextSections"} +{"Time":"2026-07-11T03:35:54.7427001+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_CheckSystemHealth_NilStores"} +{"Time":"2026-07-11T03:35:54.7427001+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_CheckSystemHealth_NilStores","Output":"=== RUN TestCallTool_CheckSystemHealth_NilStores\n"} +{"Time":"2026-07-11T03:35:54.7427001+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_CheckSystemHealth_NilStores","Output":"=== PAUSE TestCallTool_CheckSystemHealth_NilStores\n"} +{"Time":"2026-07-11T03:35:54.7427001+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_CheckSystemHealth_NilStores"} +{"Time":"2026-07-11T03:35:54.7427001+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCheckSystemHealth_VectorSubsystem"} +{"Time":"2026-07-11T03:35:54.7427001+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCheckSystemHealth_VectorSubsystem","Output":"=== RUN TestCheckSystemHealth_VectorSubsystem\n"} +{"Time":"2026-07-11T03:35:54.7427001+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCheckSystemHealth_VectorSubsystem/vnext_disabled"} +{"Time":"2026-07-11T03:35:54.7427001+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCheckSystemHealth_VectorSubsystem/vnext_disabled","Output":"=== RUN TestCheckSystemHealth_VectorSubsystem/vnext_disabled\n"} +{"Time":"2026-07-11T03:35:54.8655128+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCheckSystemHealth_VectorSubsystem/vnext_disabled","Output":"{\"level\":\"debug\",\"connections\":5,\"time\":\"2026-07-11T03:35:54+03:00\",\"message\":\"Connection pool warmed\"}\n"} +{"Time":"2026-07-11T03:35:54.8700138+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCheckSystemHealth_VectorSubsystem/vnext_disabled","Output":"--- PASS: TestCheckSystemHealth_VectorSubsystem/vnext_disabled (0.13s)\n"} +{"Time":"2026-07-11T03:35:54.8700138+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCheckSystemHealth_VectorSubsystem/vnext_disabled","Elapsed":0.13} +{"Time":"2026-07-11T03:35:54.8700138+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCheckSystemHealth_VectorSubsystem/vnext_enabled"} +{"Time":"2026-07-11T03:35:54.8700138+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCheckSystemHealth_VectorSubsystem/vnext_enabled","Output":"=== RUN TestCheckSystemHealth_VectorSubsystem/vnext_enabled\n"} +{"Time":"2026-07-11T03:35:54.9922047+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCheckSystemHealth_VectorSubsystem/vnext_enabled","Output":"{\"level\":\"debug\",\"connections\":5,\"time\":\"2026-07-11T03:35:54+03:00\",\"message\":\"Connection pool warmed\"}\n"} +{"Time":"2026-07-11T03:35:54.9967075+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCheckSystemHealth_VectorSubsystem/vnext_enabled","Output":"--- PASS: TestCheckSystemHealth_VectorSubsystem/vnext_enabled (0.13s)\n"} +{"Time":"2026-07-11T03:35:54.9967075+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCheckSystemHealth_VectorSubsystem/vnext_enabled","Elapsed":0.13} +{"Time":"2026-07-11T03:35:54.9967075+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCheckSystemHealth_VectorSubsystem","Output":"--- PASS: TestCheckSystemHealth_VectorSubsystem (0.25s)\n"} +{"Time":"2026-07-11T03:35:54.9967075+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCheckSystemHealth_VectorSubsystem","Elapsed":0.25} +{"Time":"2026-07-11T03:35:54.9967075+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_ParameterValidation_Table"} +{"Time":"2026-07-11T03:35:54.9967075+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_ParameterValidation_Table","Output":"=== RUN TestCallTool_ParameterValidation_Table\n"} +{"Time":"2026-07-11T03:35:54.9967075+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_ParameterValidation_Table","Output":"=== PAUSE TestCallTool_ParameterValidation_Table\n"} +{"Time":"2026-07-11T03:35:54.9967075+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_ParameterValidation_Table"} +{"Time":"2026-07-11T03:35:54.9967075+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleGetMemoryStats_NilStores_ValidJSON"} +{"Time":"2026-07-11T03:35:54.9967075+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleGetMemoryStats_NilStores_ValidJSON","Output":"=== RUN TestHandleGetMemoryStats_NilStores_ValidJSON\n"} +{"Time":"2026-07-11T03:35:54.9967075+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleGetMemoryStats_NilStores_ValidJSON","Output":"=== PAUSE TestHandleGetMemoryStats_NilStores_ValidJSON\n"} +{"Time":"2026-07-11T03:35:54.9967075+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleGetMemoryStats_NilStores_ValidJSON"} +{"Time":"2026-07-11T03:35:54.9967075+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleCheckSystemHealth_NilStores_StructuredResponse"} +{"Time":"2026-07-11T03:35:54.9967075+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleCheckSystemHealth_NilStores_StructuredResponse","Output":"=== RUN TestHandleCheckSystemHealth_NilStores_StructuredResponse\n"} +{"Time":"2026-07-11T03:35:54.9967075+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleCheckSystemHealth_NilStores_StructuredResponse","Output":"=== PAUSE TestHandleCheckSystemHealth_NilStores_StructuredResponse\n"} +{"Time":"2026-07-11T03:35:54.9967075+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleCheckSystemHealth_NilStores_StructuredResponse"} +{"Time":"2026-07-11T03:35:54.9967075+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleFindSimilarObservations_Validation"} +{"Time":"2026-07-11T03:35:54.9967075+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleFindSimilarObservations_Validation","Output":"=== RUN TestHandleFindSimilarObservations_Validation\n"} +{"Time":"2026-07-11T03:35:54.9967075+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleFindSimilarObservations_Validation","Output":"=== PAUSE TestHandleFindSimilarObservations_Validation\n"} +{"Time":"2026-07-11T03:35:54.9967075+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleFindSimilarObservations_Validation"} +{"Time":"2026-07-11T03:35:54.9967075+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleFindSimilarObservations_EmptyResultInV5"} +{"Time":"2026-07-11T03:35:54.9967075+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleFindSimilarObservations_EmptyResultInV5","Output":"=== RUN TestHandleFindSimilarObservations_EmptyResultInV5\n"} +{"Time":"2026-07-11T03:35:54.9967075+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleFindSimilarObservations_EmptyResultInV5","Output":"=== PAUSE TestHandleFindSimilarObservations_EmptyResultInV5\n"} +{"Time":"2026-07-11T03:35:54.9967075+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleFindSimilarObservations_EmptyResultInV5"} +{"Time":"2026-07-11T03:35:54.9967075+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleAnalyzeSearchPatterns_InvalidJSON"} +{"Time":"2026-07-11T03:35:54.9967075+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleAnalyzeSearchPatterns_InvalidJSON","Output":"=== RUN TestHandleAnalyzeSearchPatterns_InvalidJSON\n"} +{"Time":"2026-07-11T03:35:54.9967075+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleAnalyzeSearchPatterns_InvalidJSON","Output":"=== PAUSE TestHandleAnalyzeSearchPatterns_InvalidJSON\n"} +{"Time":"2026-07-11T03:35:54.9967075+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleAnalyzeSearchPatterns_InvalidJSON"} +{"Time":"2026-07-11T03:35:54.9967075+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSendResponse_ContainsJSONRPC"} +{"Time":"2026-07-11T03:35:54.9967075+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSendResponse_ContainsJSONRPC","Output":"=== RUN TestSendResponse_ContainsJSONRPC\n"} +{"Time":"2026-07-11T03:35:54.9967075+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSendResponse_ContainsJSONRPC","Output":"=== PAUSE TestSendResponse_ContainsJSONRPC\n"} +{"Time":"2026-07-11T03:35:54.9967075+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSendResponse_ContainsJSONRPC"} +{"Time":"2026-07-11T03:35:54.9967075+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSendResponse_ErrorResponse"} +{"Time":"2026-07-11T03:35:54.9967075+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSendResponse_ErrorResponse","Output":"=== RUN TestSendResponse_ErrorResponse\n"} +{"Time":"2026-07-11T03:35:54.9967075+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSendResponse_ErrorResponse","Output":"=== PAUSE TestSendResponse_ErrorResponse\n"} +{"Time":"2026-07-11T03:35:54.9967075+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSendResponse_ErrorResponse"} +{"Time":"2026-07-11T03:35:54.9967075+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSendResponse_NilID"} +{"Time":"2026-07-11T03:35:54.9967075+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSendResponse_NilID","Output":"=== RUN TestSendResponse_NilID\n"} +{"Time":"2026-07-11T03:35:54.9967075+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSendResponse_NilID","Output":"=== PAUSE TestSendResponse_NilID\n"} +{"Time":"2026-07-11T03:35:54.9967075+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSendResponse_NilID"} +{"Time":"2026-07-11T03:35:54.9967075+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSendResponse_VariousIDTypes"} +{"Time":"2026-07-11T03:35:54.9967075+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSendResponse_VariousIDTypes","Output":"=== RUN TestSendResponse_VariousIDTypes\n"} +{"Time":"2026-07-11T03:35:54.9967075+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSendResponse_VariousIDTypes","Output":"=== PAUSE TestSendResponse_VariousIDTypes\n"} +{"Time":"2026-07-11T03:35:54.9967075+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSendResponse_VariousIDTypes"} +{"Time":"2026-07-11T03:35:54.9967075+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSendError_OutputShape"} +{"Time":"2026-07-11T03:35:54.9967075+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSendError_OutputShape","Output":"=== RUN TestSendError_OutputShape\n"} +{"Time":"2026-07-11T03:35:54.9967075+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSendError_OutputShape","Output":"=== PAUSE TestSendError_OutputShape\n"} +{"Time":"2026-07-11T03:35:54.9967075+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSendError_OutputShape"} +{"Time":"2026-07-11T03:35:54.9967075+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRun_ParseError"} +{"Time":"2026-07-11T03:35:54.9967075+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRun_ParseError","Output":"=== RUN TestRun_ParseError\n"} +{"Time":"2026-07-11T03:35:54.9967075+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRun_ParseError","Output":"=== PAUSE TestRun_ParseError\n"} +{"Time":"2026-07-11T03:35:54.9967075+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRun_ParseError"} +{"Time":"2026-07-11T03:35:54.9967075+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRun_EmptyLinesSkipped"} +{"Time":"2026-07-11T03:35:54.9967075+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRun_EmptyLinesSkipped","Output":"=== RUN TestRun_EmptyLinesSkipped\n"} +{"Time":"2026-07-11T03:35:54.9967075+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRun_EmptyLinesSkipped","Output":"=== PAUSE TestRun_EmptyLinesSkipped\n"} +{"Time":"2026-07-11T03:35:54.9967075+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRun_EmptyLinesSkipped"} +{"Time":"2026-07-11T03:35:54.9967075+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRun_ValidInitialize"} +{"Time":"2026-07-11T03:35:54.9967075+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRun_ValidInitialize","Output":"=== RUN TestRun_ValidInitialize\n"} +{"Time":"2026-07-11T03:35:54.9967075+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRun_ValidInitialize","Output":"=== PAUSE TestRun_ValidInitialize\n"} +{"Time":"2026-07-11T03:35:54.9967075+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRun_ValidInitialize"} +{"Time":"2026-07-11T03:35:54.9967075+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRun_MultipleRequests"} +{"Time":"2026-07-11T03:35:54.9967075+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRun_MultipleRequests","Output":"=== RUN TestRun_MultipleRequests\n"} +{"Time":"2026-07-11T03:35:54.9967075+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRun_MultipleRequests","Output":"=== PAUSE TestRun_MultipleRequests\n"} +{"Time":"2026-07-11T03:35:54.9967075+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRun_MultipleRequests"} +{"Time":"2026-07-11T03:35:54.9967075+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRun_MixedValidAndInvalid"} +{"Time":"2026-07-11T03:35:54.9967075+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRun_MixedValidAndInvalid","Output":"=== RUN TestRun_MixedValidAndInvalid\n"} +{"Time":"2026-07-11T03:35:54.9967075+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRun_MixedValidAndInvalid","Output":"=== PAUSE TestRun_MixedValidAndInvalid\n"} +{"Time":"2026-07-11T03:35:54.9967075+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRun_MixedValidAndInvalid"} +{"Time":"2026-07-11T03:35:54.9967075+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRun_NotificationNoResponse"} +{"Time":"2026-07-11T03:35:54.9967075+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRun_NotificationNoResponse","Output":"=== RUN TestRun_NotificationNoResponse\n"} +{"Time":"2026-07-11T03:35:54.9967075+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRun_NotificationNoResponse","Output":"=== PAUSE TestRun_NotificationNoResponse\n"} +{"Time":"2026-07-11T03:35:54.9967075+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRun_NotificationNoResponse"} +{"Time":"2026-07-11T03:35:54.9967075+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestJSONRPCErrorCodes_Table"} +{"Time":"2026-07-11T03:35:54.997205+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestJSONRPCErrorCodes_Table","Output":"=== RUN TestJSONRPCErrorCodes_Table\n"} +{"Time":"2026-07-11T03:35:54.997205+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestJSONRPCErrorCodes_Table","Output":"=== PAUSE TestJSONRPCErrorCodes_Table\n"} +{"Time":"2026-07-11T03:35:54.997205+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestJSONRPCErrorCodes_Table"} +{"Time":"2026-07-11T03:35:54.997205+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTierConstants"} +{"Time":"2026-07-11T03:35:54.997205+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTierConstants","Output":"=== RUN TestTierConstants\n"} +{"Time":"2026-07-11T03:35:54.997205+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTierConstants","Output":"=== PAUSE TestTierConstants\n"} +{"Time":"2026-07-11T03:35:54.997205+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTierConstants"} +{"Time":"2026-07-11T03:35:54.997205+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007"} +{"Time":"2026-07-11T03:35:54.997205+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":"=== RUN TestEC_F1_TagDerivedBackfill_T007\n"} +{"Time":"2026-07-11T03:35:55.1068599+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":"{\"level\":\"debug\",\"connections\":1,\"time\":\"2026-07-11T03:35:55+03:00\",\"message\":\"Connection pool warmed\"}\n"} +{"Time":"2026-07-11T03:35:55.1454328+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":"--- PASS: TestEC_F1_TagDerivedBackfill_T007 (0.15s)\n"} +{"Time":"2026-07-11T03:35:55.1454328+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Elapsed":0.15} +{"Time":"2026-07-11T03:35:55.1454328+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_HandleRecallSearch_FlagOff_BackwardCompat_T007"} +{"Time":"2026-07-11T03:35:55.1454328+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_HandleRecallSearch_FlagOff_BackwardCompat_T007","Output":"=== RUN TestEC_F1_HandleRecallSearch_FlagOff_BackwardCompat_T007\n"} +{"Time":"2026-07-11T03:35:55.2534324+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_HandleRecallSearch_FlagOff_BackwardCompat_T007","Output":"{\"level\":\"debug\",\"connections\":1,\"time\":\"2026-07-11T03:35:55+03:00\",\"message\":\"Connection pool warmed\"}\n"} +{"Time":"2026-07-11T03:35:55.269932+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_HandleRecallSearch_FlagOff_BackwardCompat_T007","Output":"--- PASS: TestEC_F1_HandleRecallSearch_FlagOff_BackwardCompat_T007 (0.12s)\n"} +{"Time":"2026-07-11T03:35:55.269932+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_HandleRecallSearch_FlagOff_BackwardCompat_T007","Elapsed":0.12} +{"Time":"2026-07-11T03:35:55.269932+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemory_PrincipalOwnerDerivedFromIdentity"} +{"Time":"2026-07-11T03:35:55.269932+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemory_PrincipalOwnerDerivedFromIdentity","Output":"=== RUN TestStoreMemory_PrincipalOwnerDerivedFromIdentity\n"} +{"Time":"2026-07-11T03:35:55.3869495+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemory_PrincipalOwnerDerivedFromIdentity","Output":"{\"level\":\"debug\",\"connections\":1,\"time\":\"2026-07-11T03:35:55+03:00\",\"message\":\"Connection pool warmed\"}\n"} +{"Time":"2026-07-11T03:35:55.4069486+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemory_PrincipalOwnerDerivedFromIdentity","Output":"--- PASS: TestStoreMemory_PrincipalOwnerDerivedFromIdentity (0.14s)\n"} +{"Time":"2026-07-11T03:35:55.4074476+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemory_PrincipalOwnerDerivedFromIdentity","Elapsed":0.14} +{"Time":"2026-07-11T03:35:55.4074476+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRI_F2_DualFieldResponse_FlagOn_T008"} +{"Time":"2026-07-11T03:35:55.4074476+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRI_F2_DualFieldResponse_FlagOn_T008","Output":"=== RUN TestRI_F2_DualFieldResponse_FlagOn_T008\n"} +{"Time":"2026-07-11T03:35:55.5410809+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRI_F2_DualFieldResponse_FlagOn_T008","Output":"{\"level\":\"debug\",\"connections\":1,\"time\":\"2026-07-11T03:35:55+03:00\",\"message\":\"Connection pool warmed\"}\n"} +{"Time":"2026-07-11T03:35:55.5435818+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRI_F2_DualFieldResponse_FlagOn_T008/legacy_scope=project,_no_privacy_scope_-\u003e_dual_project"} +{"Time":"2026-07-11T03:35:55.5435818+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRI_F2_DualFieldResponse_FlagOn_T008/legacy_scope=project,_no_privacy_scope_-\u003e_dual_project","Output":"=== RUN TestRI_F2_DualFieldResponse_FlagOn_T008/legacy_scope=project,_no_privacy_scope_-\u003e_dual_project\n"} +{"Time":"2026-07-11T03:35:55.5515813+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRI_F2_DualFieldResponse_FlagOn_T008/legacy_scope=project,_no_privacy_scope_-\u003e_dual_project","Output":"--- PASS: TestRI_F2_DualFieldResponse_FlagOn_T008/legacy_scope=project,_no_privacy_scope_-\u003e_dual_project (0.01s)\n"} +{"Time":"2026-07-11T03:35:55.5520819+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRI_F2_DualFieldResponse_FlagOn_T008/legacy_scope=project,_no_privacy_scope_-\u003e_dual_project","Elapsed":0.01} +{"Time":"2026-07-11T03:35:55.5520819+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRI_F2_DualFieldResponse_FlagOn_T008/legacy_scope=global,_no_privacy_scope_-\u003e_dual_global"} +{"Time":"2026-07-11T03:35:55.5520819+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRI_F2_DualFieldResponse_FlagOn_T008/legacy_scope=global,_no_privacy_scope_-\u003e_dual_global","Output":"=== RUN TestRI_F2_DualFieldResponse_FlagOn_T008/legacy_scope=global,_no_privacy_scope_-\u003e_dual_global\n"} +{"Time":"2026-07-11T03:35:55.558652+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRI_F2_DualFieldResponse_FlagOn_T008/legacy_scope=global,_no_privacy_scope_-\u003e_dual_global","Output":"--- PASS: TestRI_F2_DualFieldResponse_FlagOn_T008/legacy_scope=global,_no_privacy_scope_-\u003e_dual_global (0.01s)\n"} +{"Time":"2026-07-11T03:35:55.558652+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRI_F2_DualFieldResponse_FlagOn_T008/legacy_scope=global,_no_privacy_scope_-\u003e_dual_global","Elapsed":0.01} +{"Time":"2026-07-11T03:35:55.558652+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRI_F2_DualFieldResponse_FlagOn_T008/explicit_privacy_scope=shared_overrides_legacy"} +{"Time":"2026-07-11T03:35:55.558652+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRI_F2_DualFieldResponse_FlagOn_T008/explicit_privacy_scope=shared_overrides_legacy","Output":"=== RUN TestRI_F2_DualFieldResponse_FlagOn_T008/explicit_privacy_scope=shared_overrides_legacy\n"} +{"Time":"2026-07-11T03:35:55.5651537+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRI_F2_DualFieldResponse_FlagOn_T008/explicit_privacy_scope=shared_overrides_legacy","Output":"--- PASS: TestRI_F2_DualFieldResponse_FlagOn_T008/explicit_privacy_scope=shared_overrides_legacy (0.01s)\n"} +{"Time":"2026-07-11T03:35:55.5651537+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRI_F2_DualFieldResponse_FlagOn_T008/explicit_privacy_scope=shared_overrides_legacy","Elapsed":0.01} +{"Time":"2026-07-11T03:35:55.5756556+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRI_F2_DualFieldResponse_FlagOn_T008","Output":"--- PASS: TestRI_F2_DualFieldResponse_FlagOn_T008 (0.17s)\n"} +{"Time":"2026-07-11T03:35:55.5756556+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRI_F2_DualFieldResponse_FlagOn_T008","Elapsed":0.17} +{"Time":"2026-07-11T03:35:55.5756556+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRI_F2_DualFieldResponse_FlagOff_LegacyOnly_T008"} +{"Time":"2026-07-11T03:35:55.5756556+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRI_F2_DualFieldResponse_FlagOff_LegacyOnly_T008","Output":"=== RUN TestRI_F2_DualFieldResponse_FlagOff_LegacyOnly_T008\n"} +{"Time":"2026-07-11T03:35:55.6931522+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRI_F2_DualFieldResponse_FlagOff_LegacyOnly_T008","Output":"{\"level\":\"debug\",\"connections\":1,\"time\":\"2026-07-11T03:35:55+03:00\",\"message\":\"Connection pool warmed\"}\n"} +{"Time":"2026-07-11T03:35:55.710762+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRI_F2_DualFieldResponse_FlagOff_LegacyOnly_T008","Output":"--- PASS: TestRI_F2_DualFieldResponse_FlagOff_LegacyOnly_T008 (0.13s)\n"} +{"Time":"2026-07-11T03:35:55.710762+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRI_F2_DualFieldResponse_FlagOff_LegacyOnly_T008","Elapsed":0.13} +{"Time":"2026-07-11T03:35:55.710762+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRI_F2_InvalidPrivacyScope_StillStructuredErrorUnderFlagOn_T008"} +{"Time":"2026-07-11T03:35:55.710762+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRI_F2_InvalidPrivacyScope_StillStructuredErrorUnderFlagOn_T008","Output":"=== RUN TestRI_F2_InvalidPrivacyScope_StillStructuredErrorUnderFlagOn_T008\n"} +{"Time":"2026-07-11T03:35:55.8262631+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRI_F2_InvalidPrivacyScope_StillStructuredErrorUnderFlagOn_T008","Output":"{\"level\":\"debug\",\"connections\":1,\"time\":\"2026-07-11T03:35:55+03:00\",\"message\":\"Connection pool warmed\"}\n"} +{"Time":"2026-07-11T03:35:55.8312622+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRI_F2_InvalidPrivacyScope_StillStructuredErrorUnderFlagOn_T008","Output":"--- PASS: TestRI_F2_InvalidPrivacyScope_StillStructuredErrorUnderFlagOn_T008 (0.12s)\n"} +{"Time":"2026-07-11T03:35:55.8312622+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRI_F2_InvalidPrivacyScope_StillStructuredErrorUnderFlagOn_T008","Elapsed":0.12} +{"Time":"2026-07-11T03:35:55.8312622+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAdminPurge_MissingProject"} +{"Time":"2026-07-11T03:35:55.8312622+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAdminPurge_MissingProject","Output":"=== RUN TestAdminPurge_MissingProject\n"} +{"Time":"2026-07-11T03:35:55.8312622+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAdminPurge_MissingProject","Output":"--- PASS: TestAdminPurge_MissingProject (0.00s)\n"} +{"Time":"2026-07-11T03:35:55.8312622+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAdminPurge_MissingProject","Elapsed":0} +{"Time":"2026-07-11T03:35:55.8312622+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAdminPurge_MissingConfirm"} +{"Time":"2026-07-11T03:35:55.8312622+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAdminPurge_MissingConfirm","Output":"=== RUN TestAdminPurge_MissingConfirm\n"} +{"Time":"2026-07-11T03:35:55.8312622+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAdminPurge_MissingConfirm","Output":"--- PASS: TestAdminPurge_MissingConfirm (0.00s)\n"} +{"Time":"2026-07-11T03:35:55.8312622+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAdminPurge_MissingConfirm","Elapsed":0} +{"Time":"2026-07-11T03:35:55.8312622+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAdminPurge_MismatchedConfirm"} +{"Time":"2026-07-11T03:35:55.8312622+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAdminPurge_MismatchedConfirm","Output":"=== RUN TestAdminPurge_MismatchedConfirm\n"} +{"Time":"2026-07-11T03:35:55.8312622+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAdminPurge_MismatchedConfirm","Output":"--- PASS: TestAdminPurge_MismatchedConfirm (0.00s)\n"} +{"Time":"2026-07-11T03:35:55.8312622+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAdminPurge_MismatchedConfirm","Elapsed":0} +{"Time":"2026-07-11T03:35:55.8312622+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAdminPurge_NilStore"} +{"Time":"2026-07-11T03:35:55.8312622+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAdminPurge_NilStore","Output":"=== RUN TestAdminPurge_NilStore\n"} +{"Time":"2026-07-11T03:35:55.8317638+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAdminPurge_NilStore","Output":"--- PASS: TestAdminPurge_NilStore (0.00s)\n"} +{"Time":"2026-07-11T03:35:55.8317638+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAdminPurge_NilStore","Elapsed":0} +{"Time":"2026-07-11T03:35:55.8317638+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAdminPurge_SetPurgeStore_Wiring"} +{"Time":"2026-07-11T03:35:55.8317638+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAdminPurge_SetPurgeStore_Wiring","Output":"=== RUN TestAdminPurge_SetPurgeStore_Wiring\n"} +{"Time":"2026-07-11T03:35:55.8317638+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAdminPurge_SetPurgeStore_Wiring","Output":"--- PASS: TestAdminPurge_SetPurgeStore_Wiring (0.00s)\n"} +{"Time":"2026-07-11T03:35:55.8317638+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAdminPurge_SetPurgeStore_Wiring","Elapsed":0} +{"Time":"2026-07-11T03:35:55.8317638+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAdminPurge_ActionInAdminActions"} +{"Time":"2026-07-11T03:35:55.8317638+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAdminPurge_ActionInAdminActions","Output":"=== RUN TestAdminPurge_ActionInAdminActions\n"} +{"Time":"2026-07-11T03:35:55.8317638+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAdminPurge_ActionInAdminActions","Output":"--- PASS: TestAdminPurge_ActionInAdminActions (0.00s)\n"} +{"Time":"2026-07-11T03:35:55.8317638+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAdminPurge_ActionInAdminActions","Elapsed":0} +{"Time":"2026-07-11T03:35:55.8317638+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAdminPurge_NonAdminDenied"} +{"Time":"2026-07-11T03:35:55.8317638+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAdminPurge_NonAdminDenied","Output":"=== RUN TestAdminPurge_NonAdminDenied\n"} +{"Time":"2026-07-11T03:35:55.8317638+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAdminPurge_NonAdminDenied","Output":"--- PASS: TestAdminPurge_NonAdminDenied (0.00s)\n"} +{"Time":"2026-07-11T03:35:55.8317638+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAdminPurge_NonAdminDenied","Elapsed":0} +{"Time":"2026-07-11T03:35:55.8317638+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAdminPurge_NoIdentityDenied"} +{"Time":"2026-07-11T03:35:55.8317638+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAdminPurge_NoIdentityDenied","Output":"=== RUN TestAdminPurge_NoIdentityDenied\n"} +{"Time":"2026-07-11T03:35:55.8317638+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAdminPurge_NoIdentityDenied","Output":"--- PASS: TestAdminPurge_NoIdentityDenied (0.00s)\n"} +{"Time":"2026-07-11T03:35:55.8317638+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAdminPurge_NoIdentityDenied","Elapsed":0} +{"Time":"2026-07-11T03:35:55.8317638+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAdminPurge_AdminAllowed"} +{"Time":"2026-07-11T03:35:55.8317638+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAdminPurge_AdminAllowed","Output":"=== RUN TestAdminPurge_AdminAllowed\n"} +{"Time":"2026-07-11T03:35:55.8317638+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAdminPurge_AdminAllowed","Output":"--- PASS: TestAdminPurge_AdminAllowed (0.00s)\n"} +{"Time":"2026-07-11T03:35:55.8317638+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAdminPurge_AdminAllowed","Elapsed":0} +{"Time":"2026-07-11T03:35:55.8317638+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAdminPurge_FlagOff_RejectsAsUnknown"} +{"Time":"2026-07-11T03:35:55.8317638+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAdminPurge_FlagOff_RejectsAsUnknown","Output":"=== RUN TestAdminPurge_FlagOff_RejectsAsUnknown\n"} +{"Time":"2026-07-11T03:35:55.8317638+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAdminPurge_FlagOff_RejectsAsUnknown","Output":"--- PASS: TestAdminPurge_FlagOff_RejectsAsUnknown (0.00s)\n"} +{"Time":"2026-07-11T03:35:55.8317638+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAdminPurge_FlagOff_RejectsAsUnknown","Elapsed":0} +{"Time":"2026-07-11T03:35:55.8317638+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAdminPurge_FlagOff_SchemaLacksConfirm"} +{"Time":"2026-07-11T03:35:55.8317638+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAdminPurge_FlagOff_SchemaLacksConfirm","Output":"=== RUN TestAdminPurge_FlagOff_SchemaLacksConfirm\n"} +{"Time":"2026-07-11T03:35:55.8317638+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAdminPurge_FlagOff_SchemaLacksConfirm","Output":"--- PASS: TestAdminPurge_FlagOff_SchemaLacksConfirm (0.00s)\n"} +{"Time":"2026-07-11T03:35:55.8317638+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAdminPurge_FlagOff_SchemaLacksConfirm","Elapsed":0} +{"Time":"2026-07-11T03:35:55.8317638+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAdminPurge_FlagOn_SchemaHasConfirm"} +{"Time":"2026-07-11T03:35:55.8317638+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAdminPurge_FlagOn_SchemaHasConfirm","Output":"=== RUN TestAdminPurge_FlagOn_SchemaHasConfirm\n"} +{"Time":"2026-07-11T03:35:55.8317638+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAdminPurge_FlagOn_SchemaHasConfirm","Output":"--- PASS: TestAdminPurge_FlagOn_SchemaHasConfirm (0.00s)\n"} +{"Time":"2026-07-11T03:35:55.8317638+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAdminPurge_FlagOn_SchemaHasConfirm","Elapsed":0} +{"Time":"2026-07-11T03:35:55.8317638+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAdminPurge_WhitespaceProject"} +{"Time":"2026-07-11T03:35:55.8317638+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAdminPurge_WhitespaceProject","Output":"=== RUN TestAdminPurge_WhitespaceProject\n"} +{"Time":"2026-07-11T03:35:55.8317638+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAdminPurge_WhitespaceProject","Output":"--- PASS: TestAdminPurge_WhitespaceProject (0.00s)\n"} +{"Time":"2026-07-11T03:35:55.8317638+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAdminPurge_WhitespaceProject","Elapsed":0} +{"Time":"2026-07-11T03:35:55.8317638+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetAmbientHintsToolAdvertisedOnlyWhenS3FlagAndQueuePresent"} +{"Time":"2026-07-11T03:35:55.8317638+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetAmbientHintsToolAdvertisedOnlyWhenS3FlagAndQueuePresent","Output":"=== RUN TestGetAmbientHintsToolAdvertisedOnlyWhenS3FlagAndQueuePresent\n"} +{"Time":"2026-07-11T03:35:55.8317638+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetAmbientHintsToolAdvertisedOnlyWhenS3FlagAndQueuePresent/master_off_hides_tool"} +{"Time":"2026-07-11T03:35:55.8317638+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetAmbientHintsToolAdvertisedOnlyWhenS3FlagAndQueuePresent/master_off_hides_tool","Output":"=== RUN TestGetAmbientHintsToolAdvertisedOnlyWhenS3FlagAndQueuePresent/master_off_hides_tool\n"} +{"Time":"2026-07-11T03:35:55.8322627+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetAmbientHintsToolAdvertisedOnlyWhenS3FlagAndQueuePresent/master_off_hides_tool","Output":"--- PASS: TestGetAmbientHintsToolAdvertisedOnlyWhenS3FlagAndQueuePresent/master_off_hides_tool (0.00s)\n"} +{"Time":"2026-07-11T03:35:55.8322627+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetAmbientHintsToolAdvertisedOnlyWhenS3FlagAndQueuePresent/master_off_hides_tool","Elapsed":0} +{"Time":"2026-07-11T03:35:55.8322627+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetAmbientHintsToolAdvertisedOnlyWhenS3FlagAndQueuePresent/s3_off_hides_tool"} +{"Time":"2026-07-11T03:35:55.8322627+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetAmbientHintsToolAdvertisedOnlyWhenS3FlagAndQueuePresent/s3_off_hides_tool","Output":"=== RUN TestGetAmbientHintsToolAdvertisedOnlyWhenS3FlagAndQueuePresent/s3_off_hides_tool\n"} +{"Time":"2026-07-11T03:35:55.8322627+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetAmbientHintsToolAdvertisedOnlyWhenS3FlagAndQueuePresent/s3_off_hides_tool","Output":"--- PASS: TestGetAmbientHintsToolAdvertisedOnlyWhenS3FlagAndQueuePresent/s3_off_hides_tool (0.00s)\n"} +{"Time":"2026-07-11T03:35:55.8322627+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetAmbientHintsToolAdvertisedOnlyWhenS3FlagAndQueuePresent/s3_off_hides_tool","Elapsed":0} +{"Time":"2026-07-11T03:35:55.8322627+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetAmbientHintsToolAdvertisedOnlyWhenS3FlagAndQueuePresent/missing_queue_hides_tool"} +{"Time":"2026-07-11T03:35:55.8322627+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetAmbientHintsToolAdvertisedOnlyWhenS3FlagAndQueuePresent/missing_queue_hides_tool","Output":"=== RUN TestGetAmbientHintsToolAdvertisedOnlyWhenS3FlagAndQueuePresent/missing_queue_hides_tool\n"} +{"Time":"2026-07-11T03:35:55.8327625+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetAmbientHintsToolAdvertisedOnlyWhenS3FlagAndQueuePresent/missing_queue_hides_tool","Output":"--- PASS: TestGetAmbientHintsToolAdvertisedOnlyWhenS3FlagAndQueuePresent/missing_queue_hides_tool (0.00s)\n"} +{"Time":"2026-07-11T03:35:55.8327625+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetAmbientHintsToolAdvertisedOnlyWhenS3FlagAndQueuePresent/missing_queue_hides_tool","Elapsed":0} +{"Time":"2026-07-11T03:35:55.8327625+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetAmbientHintsToolAdvertisedOnlyWhenS3FlagAndQueuePresent/master+s3+queue_advertises_tool"} +{"Time":"2026-07-11T03:35:55.8327625+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetAmbientHintsToolAdvertisedOnlyWhenS3FlagAndQueuePresent/master+s3+queue_advertises_tool","Output":"=== RUN TestGetAmbientHintsToolAdvertisedOnlyWhenS3FlagAndQueuePresent/master+s3+queue_advertises_tool\n"} +{"Time":"2026-07-11T03:35:55.8327625+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetAmbientHintsToolAdvertisedOnlyWhenS3FlagAndQueuePresent/master+s3+queue_advertises_tool","Output":"--- PASS: TestGetAmbientHintsToolAdvertisedOnlyWhenS3FlagAndQueuePresent/master+s3+queue_advertises_tool (0.00s)\n"} +{"Time":"2026-07-11T03:35:55.8327625+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetAmbientHintsToolAdvertisedOnlyWhenS3FlagAndQueuePresent/master+s3+queue_advertises_tool","Elapsed":0} +{"Time":"2026-07-11T03:35:55.8327625+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetAmbientHintsToolAdvertisedOnlyWhenS3FlagAndQueuePresent","Output":"--- PASS: TestGetAmbientHintsToolAdvertisedOnlyWhenS3FlagAndQueuePresent (0.00s)\n"} +{"Time":"2026-07-11T03:35:55.8327625+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetAmbientHintsToolAdvertisedOnlyWhenS3FlagAndQueuePresent","Elapsed":0} +{"Time":"2026-07-11T03:35:55.8327625+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetAmbientHintsDrainsBoundedSafeHints"} +{"Time":"2026-07-11T03:35:55.8327625+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetAmbientHintsDrainsBoundedSafeHints","Output":"=== RUN TestGetAmbientHintsDrainsBoundedSafeHints\n"} +{"Time":"2026-07-11T03:35:55.8327625+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetAmbientHintsDrainsBoundedSafeHints","Output":"--- PASS: TestGetAmbientHintsDrainsBoundedSafeHints (0.00s)\n"} +{"Time":"2026-07-11T03:35:55.8327625+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetAmbientHintsDrainsBoundedSafeHints","Elapsed":0} +{"Time":"2026-07-11T03:35:55.8332653+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetAmbientHintsReturnsEmptyForDisabledStaleAndEmptyQueue"} +{"Time":"2026-07-11T03:35:55.8332653+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetAmbientHintsReturnsEmptyForDisabledStaleAndEmptyQueue","Output":"=== RUN TestGetAmbientHintsReturnsEmptyForDisabledStaleAndEmptyQueue\n"} +{"Time":"2026-07-11T03:35:55.8332653+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetAmbientHintsReturnsEmptyForDisabledStaleAndEmptyQueue/disabled_flag"} +{"Time":"2026-07-11T03:35:55.8332653+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetAmbientHintsReturnsEmptyForDisabledStaleAndEmptyQueue/disabled_flag","Output":"=== RUN TestGetAmbientHintsReturnsEmptyForDisabledStaleAndEmptyQueue/disabled_flag\n"} +{"Time":"2026-07-11T03:35:55.8332653+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetAmbientHintsReturnsEmptyForDisabledStaleAndEmptyQueue/disabled_flag","Output":"--- PASS: TestGetAmbientHintsReturnsEmptyForDisabledStaleAndEmptyQueue/disabled_flag (0.00s)\n"} +{"Time":"2026-07-11T03:35:55.8332653+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetAmbientHintsReturnsEmptyForDisabledStaleAndEmptyQueue/disabled_flag","Elapsed":0} +{"Time":"2026-07-11T03:35:55.8332653+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetAmbientHintsReturnsEmptyForDisabledStaleAndEmptyQueue/empty_queue"} +{"Time":"2026-07-11T03:35:55.8332653+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetAmbientHintsReturnsEmptyForDisabledStaleAndEmptyQueue/empty_queue","Output":"=== RUN TestGetAmbientHintsReturnsEmptyForDisabledStaleAndEmptyQueue/empty_queue\n"} +{"Time":"2026-07-11T03:35:55.8332653+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetAmbientHintsReturnsEmptyForDisabledStaleAndEmptyQueue/empty_queue","Output":"--- PASS: TestGetAmbientHintsReturnsEmptyForDisabledStaleAndEmptyQueue/empty_queue (0.00s)\n"} +{"Time":"2026-07-11T03:35:55.8332653+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetAmbientHintsReturnsEmptyForDisabledStaleAndEmptyQueue/empty_queue","Elapsed":0} +{"Time":"2026-07-11T03:35:55.8332653+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetAmbientHintsReturnsEmptyForDisabledStaleAndEmptyQueue/stale_queue"} +{"Time":"2026-07-11T03:35:55.8332653+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetAmbientHintsReturnsEmptyForDisabledStaleAndEmptyQueue/stale_queue","Output":"=== RUN TestGetAmbientHintsReturnsEmptyForDisabledStaleAndEmptyQueue/stale_queue\n"} +{"Time":"2026-07-11T03:35:55.8332653+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetAmbientHintsReturnsEmptyForDisabledStaleAndEmptyQueue/stale_queue","Output":"--- PASS: TestGetAmbientHintsReturnsEmptyForDisabledStaleAndEmptyQueue/stale_queue (0.00s)\n"} +{"Time":"2026-07-11T03:35:55.8332653+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetAmbientHintsReturnsEmptyForDisabledStaleAndEmptyQueue/stale_queue","Elapsed":0} +{"Time":"2026-07-11T03:35:55.8332653+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetAmbientHintsReturnsEmptyForDisabledStaleAndEmptyQueue","Output":"--- PASS: TestGetAmbientHintsReturnsEmptyForDisabledStaleAndEmptyQueue (0.00s)\n"} +{"Time":"2026-07-11T03:35:55.8332653+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetAmbientHintsReturnsEmptyForDisabledStaleAndEmptyQueue","Elapsed":0} +{"Time":"2026-07-11T03:35:55.8332653+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetMemoryBrief_PrincipalScopeSchemaAdvertised"} +{"Time":"2026-07-11T03:35:55.8332653+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetMemoryBrief_PrincipalScopeSchemaAdvertised","Output":"=== RUN TestGetMemoryBrief_PrincipalScopeSchemaAdvertised\n"} +{"Time":"2026-07-11T03:35:55.8337645+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetMemoryBrief_PrincipalScopeSchemaAdvertised","Output":"--- PASS: TestGetMemoryBrief_PrincipalScopeSchemaAdvertised (0.00s)\n"} +{"Time":"2026-07-11T03:35:55.8337645+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetMemoryBrief_PrincipalScopeSchemaAdvertised","Elapsed":0} +{"Time":"2026-07-11T03:35:55.8337645+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetMemoryBrief_PrincipalScopedResponseAndRequest"} +{"Time":"2026-07-11T03:35:55.8337645+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetMemoryBrief_PrincipalScopedResponseAndRequest","Output":"=== RUN TestGetMemoryBrief_PrincipalScopedResponseAndRequest\n"} +{"Time":"2026-07-11T03:35:55.8337645+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetMemoryBrief_PrincipalScopedResponseAndRequest","Output":"--- PASS: TestGetMemoryBrief_PrincipalScopedResponseAndRequest (0.00s)\n"} +{"Time":"2026-07-11T03:35:55.8337645+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetMemoryBrief_PrincipalScopedResponseAndRequest","Elapsed":0} +{"Time":"2026-07-11T03:35:55.8337645+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetMemoryBrief_PrincipalScopeRequiresQueryService"} +{"Time":"2026-07-11T03:35:55.8337645+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetMemoryBrief_PrincipalScopeRequiresQueryService","Output":"=== RUN TestGetMemoryBrief_PrincipalScopeRequiresQueryService\n"} +{"Time":"2026-07-11T03:35:55.8337645+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetMemoryBrief_PrincipalScopeRequiresQueryService","Output":"--- PASS: TestGetMemoryBrief_PrincipalScopeRequiresQueryService (0.00s)\n"} +{"Time":"2026-07-11T03:35:55.8337645+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetMemoryBrief_PrincipalScopeRequiresQueryService","Elapsed":0} +{"Time":"2026-07-11T03:35:55.8337645+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRequireCandidateReviewSnapshotRejectsNil"} +{"Time":"2026-07-11T03:35:55.8337645+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRequireCandidateReviewSnapshotRejectsNil","Output":"=== RUN TestRequireCandidateReviewSnapshotRejectsNil\n"} +{"Time":"2026-07-11T03:35:55.8337645+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRequireCandidateReviewSnapshotRejectsNil/reject_candidate"} +{"Time":"2026-07-11T03:35:55.8337645+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRequireCandidateReviewSnapshotRejectsNil/reject_candidate","Output":"=== RUN TestRequireCandidateReviewSnapshotRejectsNil/reject_candidate\n"} +{"Time":"2026-07-11T03:35:55.8337645+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRequireCandidateReviewSnapshotRejectsNil/reject_candidate","Output":"--- PASS: TestRequireCandidateReviewSnapshotRejectsNil/reject_candidate (0.00s)\n"} +{"Time":"2026-07-11T03:35:55.8337645+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRequireCandidateReviewSnapshotRejectsNil/reject_candidate","Elapsed":0} +{"Time":"2026-07-11T03:35:55.8337645+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRequireCandidateReviewSnapshotRejectsNil/supersede_candidate"} +{"Time":"2026-07-11T03:35:55.8337645+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRequireCandidateReviewSnapshotRejectsNil/supersede_candidate","Output":"=== RUN TestRequireCandidateReviewSnapshotRejectsNil/supersede_candidate\n"} +{"Time":"2026-07-11T03:35:55.8337645+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRequireCandidateReviewSnapshotRejectsNil/supersede_candidate","Output":"--- PASS: TestRequireCandidateReviewSnapshotRejectsNil/supersede_candidate (0.00s)\n"} +{"Time":"2026-07-11T03:35:55.8337645+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRequireCandidateReviewSnapshotRejectsNil/supersede_candidate","Elapsed":0} +{"Time":"2026-07-11T03:35:55.8337645+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRequireCandidateReviewSnapshotRejectsNil","Output":"--- PASS: TestRequireCandidateReviewSnapshotRejectsNil (0.00s)\n"} +{"Time":"2026-07-11T03:35:55.8337645+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRequireCandidateReviewSnapshotRejectsNil","Elapsed":0} +{"Time":"2026-07-11T03:35:55.8337645+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRequireCandidateReviewSnapshotAllowsNonNil"} +{"Time":"2026-07-11T03:35:55.8337645+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRequireCandidateReviewSnapshotAllowsNonNil","Output":"=== RUN TestRequireCandidateReviewSnapshotAllowsNonNil\n"} +{"Time":"2026-07-11T03:35:55.8337645+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRequireCandidateReviewSnapshotAllowsNonNil","Output":"--- PASS: TestRequireCandidateReviewSnapshotAllowsNonNil (0.00s)\n"} +{"Time":"2026-07-11T03:35:55.8337645+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRequireCandidateReviewSnapshotAllowsNonNil","Elapsed":0} +{"Time":"2026-07-11T03:35:55.8337645+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleListCandidates_EmptyProjectReturnsError"} +{"Time":"2026-07-11T03:35:55.8337645+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleListCandidates_EmptyProjectReturnsError","Output":"=== RUN TestHandleListCandidates_EmptyProjectReturnsError\n"} +{"Time":"2026-07-11T03:35:55.8337645+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleListCandidates_EmptyProjectReturnsError","Output":"--- PASS: TestHandleListCandidates_EmptyProjectReturnsError (0.00s)\n"} +{"Time":"2026-07-11T03:35:55.8337645+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleListCandidates_EmptyProjectReturnsError","Elapsed":0} +{"Time":"2026-07-11T03:35:55.8337645+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleListCandidates_FlagOffReturnsError"} +{"Time":"2026-07-11T03:35:55.8337645+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleListCandidates_FlagOffReturnsError","Output":"=== RUN TestHandleListCandidates_FlagOffReturnsError\n"} +{"Time":"2026-07-11T03:35:55.8337645+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleListCandidates_FlagOffReturnsError","Output":"--- PASS: TestHandleListCandidates_FlagOffReturnsError (0.00s)\n"} +{"Time":"2026-07-11T03:35:55.8337645+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleListCandidates_FlagOffReturnsError","Elapsed":0} +{"Time":"2026-07-11T03:35:55.8337645+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleGetCandidate_EmptyIDReturnsError"} +{"Time":"2026-07-11T03:35:55.8337645+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleGetCandidate_EmptyIDReturnsError","Output":"=== RUN TestHandleGetCandidate_EmptyIDReturnsError\n"} +{"Time":"2026-07-11T03:35:55.8337645+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleGetCandidate_EmptyIDReturnsError","Output":"--- PASS: TestHandleGetCandidate_EmptyIDReturnsError (0.00s)\n"} +{"Time":"2026-07-11T03:35:55.834266+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleGetCandidate_EmptyIDReturnsError","Elapsed":0} +{"Time":"2026-07-11T03:35:55.834266+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCandidateTools_ExposeCR008ReviewLoopContracts"} +{"Time":"2026-07-11T03:35:55.834266+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCandidateTools_ExposeCR008ReviewLoopContracts","Output":"=== RUN TestCandidateTools_ExposeCR008ReviewLoopContracts\n"} +{"Time":"2026-07-11T03:35:55.834266+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCandidateTools_ExposeCR008ReviewLoopContracts","Output":"--- PASS: TestCandidateTools_ExposeCR008ReviewLoopContracts (0.00s)\n"} +{"Time":"2026-07-11T03:35:55.834266+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCandidateTools_ExposeCR008ReviewLoopContracts","Elapsed":0} +{"Time":"2026-07-11T03:35:55.834266+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleReviewQueueRead_UnsupportedPacketTypeReturnsGatedPayload"} +{"Time":"2026-07-11T03:35:55.834266+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleReviewQueueRead_UnsupportedPacketTypeReturnsGatedPayload","Output":"=== RUN TestHandleReviewQueueRead_UnsupportedPacketTypeReturnsGatedPayload\n"} +{"Time":"2026-07-11T03:35:55.834266+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleReviewQueueRead_UnsupportedPacketTypeReturnsGatedPayload","Output":"--- PASS: TestHandleReviewQueueRead_UnsupportedPacketTypeReturnsGatedPayload (0.00s)\n"} +{"Time":"2026-07-11T03:35:55.834266+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleReviewQueueRead_UnsupportedPacketTypeReturnsGatedPayload","Elapsed":0} +{"Time":"2026-07-11T03:35:55.834266+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleReviewQueueRead_LimitOverMaxReturnsError"} +{"Time":"2026-07-11T03:35:55.834266+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleReviewQueueRead_LimitOverMaxReturnsError","Output":"=== RUN TestHandleReviewQueueRead_LimitOverMaxReturnsError\n"} +{"Time":"2026-07-11T03:35:55.834266+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleReviewQueueRead_LimitOverMaxReturnsError","Output":"--- PASS: TestHandleReviewQueueRead_LimitOverMaxReturnsError (0.00s)\n"} +{"Time":"2026-07-11T03:35:55.834266+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleReviewQueueRead_LimitOverMaxReturnsError","Elapsed":0} +{"Time":"2026-07-11T03:35:55.834266+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleReviewQueueRead_RiskyOnlyKeepsUnfilteredMetricsAndBacklog"} +{"Time":"2026-07-11T03:35:55.834266+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleReviewQueueRead_RiskyOnlyKeepsUnfilteredMetricsAndBacklog","Output":"=== RUN TestHandleReviewQueueRead_RiskyOnlyKeepsUnfilteredMetricsAndBacklog\n"} +{"Time":"2026-07-11T03:35:55.834266+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleReviewQueueRead_RiskyOnlyKeepsUnfilteredMetricsAndBacklog","Output":"--- PASS: TestHandleReviewQueueRead_RiskyOnlyKeepsUnfilteredMetricsAndBacklog (0.00s)\n"} +{"Time":"2026-07-11T03:35:55.834266+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleReviewQueueRead_RiskyOnlyKeepsUnfilteredMetricsAndBacklog","Elapsed":0} +{"Time":"2026-07-11T03:35:55.834266+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleReviewPacketPreviewAction_UnsupportedActionRejectedBeforeStoreMutation"} +{"Time":"2026-07-11T03:35:55.834266+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleReviewPacketPreviewAction_UnsupportedActionRejectedBeforeStoreMutation","Output":"=== RUN TestHandleReviewPacketPreviewAction_UnsupportedActionRejectedBeforeStoreMutation\n"} +{"Time":"2026-07-11T03:35:55.834266+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleReviewPacketPreviewAction_UnsupportedActionRejectedBeforeStoreMutation","Output":"--- PASS: TestHandleReviewPacketPreviewAction_UnsupportedActionRejectedBeforeStoreMutation (0.00s)\n"} +{"Time":"2026-07-11T03:35:55.834266+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleReviewPacketPreviewAction_UnsupportedActionRejectedBeforeStoreMutation","Elapsed":0} +{"Time":"2026-07-11T03:35:55.834266+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRememberDirectiveToolAdvertisedOnlyWhenS4AFlagAndServiceArePresent"} +{"Time":"2026-07-11T03:35:55.834266+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRememberDirectiveToolAdvertisedOnlyWhenS4AFlagAndServiceArePresent","Output":"=== RUN TestRememberDirectiveToolAdvertisedOnlyWhenS4AFlagAndServiceArePresent\n"} +{"Time":"2026-07-11T03:35:55.834266+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRememberDirectiveToolAdvertisedOnlyWhenS4AFlagAndServiceArePresent/absent_when_flag_disabled_even_with_service"} +{"Time":"2026-07-11T03:35:55.834266+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRememberDirectiveToolAdvertisedOnlyWhenS4AFlagAndServiceArePresent/absent_when_flag_disabled_even_with_service","Output":"=== RUN TestRememberDirectiveToolAdvertisedOnlyWhenS4AFlagAndServiceArePresent/absent_when_flag_disabled_even_with_service\n"} +{"Time":"2026-07-11T03:35:55.8347629+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRememberDirectiveToolAdvertisedOnlyWhenS4AFlagAndServiceArePresent/absent_when_flag_disabled_even_with_service","Output":"--- PASS: TestRememberDirectiveToolAdvertisedOnlyWhenS4AFlagAndServiceArePresent/absent_when_flag_disabled_even_with_service (0.00s)\n"} +{"Time":"2026-07-11T03:35:55.8347629+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRememberDirectiveToolAdvertisedOnlyWhenS4AFlagAndServiceArePresent/absent_when_flag_disabled_even_with_service","Elapsed":0} +{"Time":"2026-07-11T03:35:55.8347629+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRememberDirectiveToolAdvertisedOnlyWhenS4AFlagAndServiceArePresent/absent_when_master_flag_disabled_even_if_s4a_flag_and_service_are_present"} +{"Time":"2026-07-11T03:35:55.8347629+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRememberDirectiveToolAdvertisedOnlyWhenS4AFlagAndServiceArePresent/absent_when_master_flag_disabled_even_if_s4a_flag_and_service_are_present","Output":"=== RUN TestRememberDirectiveToolAdvertisedOnlyWhenS4AFlagAndServiceArePresent/absent_when_master_flag_disabled_even_if_s4a_flag_and_service_are_present\n"} +{"Time":"2026-07-11T03:35:55.8347629+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRememberDirectiveToolAdvertisedOnlyWhenS4AFlagAndServiceArePresent/absent_when_master_flag_disabled_even_if_s4a_flag_and_service_are_present","Output":"--- PASS: TestRememberDirectiveToolAdvertisedOnlyWhenS4AFlagAndServiceArePresent/absent_when_master_flag_disabled_even_if_s4a_flag_and_service_are_present (0.00s)\n"} +{"Time":"2026-07-11T03:35:55.8347629+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRememberDirectiveToolAdvertisedOnlyWhenS4AFlagAndServiceArePresent/absent_when_master_flag_disabled_even_if_s4a_flag_and_service_are_present","Elapsed":0} +{"Time":"2026-07-11T03:35:55.8347629+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRememberDirectiveToolAdvertisedOnlyWhenS4AFlagAndServiceArePresent/absent_when_service_is_missing_even_with_flag_enabled"} +{"Time":"2026-07-11T03:35:55.8347629+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRememberDirectiveToolAdvertisedOnlyWhenS4AFlagAndServiceArePresent/absent_when_service_is_missing_even_with_flag_enabled","Output":"=== RUN TestRememberDirectiveToolAdvertisedOnlyWhenS4AFlagAndServiceArePresent/absent_when_service_is_missing_even_with_flag_enabled\n"} +{"Time":"2026-07-11T03:35:55.8347629+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRememberDirectiveToolAdvertisedOnlyWhenS4AFlagAndServiceArePresent/absent_when_service_is_missing_even_with_flag_enabled","Output":"--- PASS: TestRememberDirectiveToolAdvertisedOnlyWhenS4AFlagAndServiceArePresent/absent_when_service_is_missing_even_with_flag_enabled (0.00s)\n"} +{"Time":"2026-07-11T03:35:55.8347629+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRememberDirectiveToolAdvertisedOnlyWhenS4AFlagAndServiceArePresent/absent_when_service_is_missing_even_with_flag_enabled","Elapsed":0} +{"Time":"2026-07-11T03:35:55.8347629+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRememberDirectiveToolAdvertisedOnlyWhenS4AFlagAndServiceArePresent/advertised_with_bounded_input_schema_when_flag_and_service_are_present"} +{"Time":"2026-07-11T03:35:55.8347629+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRememberDirectiveToolAdvertisedOnlyWhenS4AFlagAndServiceArePresent/advertised_with_bounded_input_schema_when_flag_and_service_are_present","Output":"=== RUN TestRememberDirectiveToolAdvertisedOnlyWhenS4AFlagAndServiceArePresent/advertised_with_bounded_input_schema_when_flag_and_service_are_present\n"} +{"Time":"2026-07-11T03:35:55.8347629+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRememberDirectiveToolAdvertisedOnlyWhenS4AFlagAndServiceArePresent/advertised_with_bounded_input_schema_when_flag_and_service_are_present","Output":"--- PASS: TestRememberDirectiveToolAdvertisedOnlyWhenS4AFlagAndServiceArePresent/advertised_with_bounded_input_schema_when_flag_and_service_are_present (0.00s)\n"} +{"Time":"2026-07-11T03:35:55.8347629+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRememberDirectiveToolAdvertisedOnlyWhenS4AFlagAndServiceArePresent/advertised_with_bounded_input_schema_when_flag_and_service_are_present","Elapsed":0} +{"Time":"2026-07-11T03:35:55.8347629+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRememberDirectiveToolAdvertisedOnlyWhenS4AFlagAndServiceArePresent","Output":"--- PASS: TestRememberDirectiveToolAdvertisedOnlyWhenS4AFlagAndServiceArePresent (0.00s)\n"} +{"Time":"2026-07-11T03:35:55.8347629+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRememberDirectiveToolAdvertisedOnlyWhenS4AFlagAndServiceArePresent","Elapsed":0} +{"Time":"2026-07-11T03:35:55.8347629+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRememberDirectiveDirectCallFailsClosedBeforeDelegation"} +{"Time":"2026-07-11T03:35:55.8347629+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRememberDirectiveDirectCallFailsClosedBeforeDelegation","Output":"=== RUN TestRememberDirectiveDirectCallFailsClosedBeforeDelegation\n"} +{"Time":"2026-07-11T03:35:55.8347629+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRememberDirectiveDirectCallFailsClosedBeforeDelegation/flag_disabled"} +{"Time":"2026-07-11T03:35:55.8347629+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRememberDirectiveDirectCallFailsClosedBeforeDelegation/flag_disabled","Output":"=== RUN TestRememberDirectiveDirectCallFailsClosedBeforeDelegation/flag_disabled\n"} +{"Time":"2026-07-11T03:35:55.8352626+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRememberDirectiveDirectCallFailsClosedBeforeDelegation/flag_disabled","Output":"--- PASS: TestRememberDirectiveDirectCallFailsClosedBeforeDelegation/flag_disabled (0.00s)\n"} +{"Time":"2026-07-11T03:35:55.8352626+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRememberDirectiveDirectCallFailsClosedBeforeDelegation/flag_disabled","Elapsed":0} +{"Time":"2026-07-11T03:35:55.8352626+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRememberDirectiveDirectCallFailsClosedBeforeDelegation/master_flag_disabled_even_if_s4a_flag_is_enabled"} +{"Time":"2026-07-11T03:35:55.8352626+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRememberDirectiveDirectCallFailsClosedBeforeDelegation/master_flag_disabled_even_if_s4a_flag_is_enabled","Output":"=== RUN TestRememberDirectiveDirectCallFailsClosedBeforeDelegation/master_flag_disabled_even_if_s4a_flag_is_enabled\n"} +{"Time":"2026-07-11T03:35:55.8352626+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRememberDirectiveDirectCallFailsClosedBeforeDelegation/master_flag_disabled_even_if_s4a_flag_is_enabled","Output":"--- PASS: TestRememberDirectiveDirectCallFailsClosedBeforeDelegation/master_flag_disabled_even_if_s4a_flag_is_enabled (0.00s)\n"} +{"Time":"2026-07-11T03:35:55.8352626+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRememberDirectiveDirectCallFailsClosedBeforeDelegation/master_flag_disabled_even_if_s4a_flag_is_enabled","Elapsed":0} +{"Time":"2026-07-11T03:35:55.8352626+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRememberDirectiveDirectCallFailsClosedBeforeDelegation/service_missing"} +{"Time":"2026-07-11T03:35:55.8352626+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRememberDirectiveDirectCallFailsClosedBeforeDelegation/service_missing","Output":"=== RUN TestRememberDirectiveDirectCallFailsClosedBeforeDelegation/service_missing\n"} +{"Time":"2026-07-11T03:35:55.8352626+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRememberDirectiveDirectCallFailsClosedBeforeDelegation/service_missing","Output":"--- PASS: TestRememberDirectiveDirectCallFailsClosedBeforeDelegation/service_missing (0.00s)\n"} +{"Time":"2026-07-11T03:35:55.8352626+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRememberDirectiveDirectCallFailsClosedBeforeDelegation/service_missing","Elapsed":0} +{"Time":"2026-07-11T03:35:55.8352626+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRememberDirectiveDirectCallFailsClosedBeforeDelegation/project_context_missing"} +{"Time":"2026-07-11T03:35:55.8352626+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRememberDirectiveDirectCallFailsClosedBeforeDelegation/project_context_missing","Output":"=== RUN TestRememberDirectiveDirectCallFailsClosedBeforeDelegation/project_context_missing\n"} +{"Time":"2026-07-11T03:35:55.8352626+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRememberDirectiveDirectCallFailsClosedBeforeDelegation/project_context_missing","Output":"--- PASS: TestRememberDirectiveDirectCallFailsClosedBeforeDelegation/project_context_missing (0.00s)\n"} +{"Time":"2026-07-11T03:35:55.8352626+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRememberDirectiveDirectCallFailsClosedBeforeDelegation/project_context_missing","Elapsed":0} +{"Time":"2026-07-11T03:35:55.8352626+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRememberDirectiveDirectCallFailsClosedBeforeDelegation/session_context_missing"} +{"Time":"2026-07-11T03:35:55.8352626+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRememberDirectiveDirectCallFailsClosedBeforeDelegation/session_context_missing","Output":"=== RUN TestRememberDirectiveDirectCallFailsClosedBeforeDelegation/session_context_missing\n"} +{"Time":"2026-07-11T03:35:55.8352626+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRememberDirectiveDirectCallFailsClosedBeforeDelegation/session_context_missing","Output":"--- PASS: TestRememberDirectiveDirectCallFailsClosedBeforeDelegation/session_context_missing (0.00s)\n"} +{"Time":"2026-07-11T03:35:55.8352626+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRememberDirectiveDirectCallFailsClosedBeforeDelegation/session_context_missing","Elapsed":0} +{"Time":"2026-07-11T03:35:55.8352626+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRememberDirectiveDirectCallFailsClosedBeforeDelegation","Output":"--- PASS: TestRememberDirectiveDirectCallFailsClosedBeforeDelegation (0.00s)\n"} +{"Time":"2026-07-11T03:35:55.8352626+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRememberDirectiveDirectCallFailsClosedBeforeDelegation","Elapsed":0} +{"Time":"2026-07-11T03:35:55.8352626+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRememberDirectiveDirectCallDelegatesContextAndReturnsSanitizedRecord"} +{"Time":"2026-07-11T03:35:55.8352626+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRememberDirectiveDirectCallDelegatesContextAndReturnsSanitizedRecord","Output":"=== RUN TestRememberDirectiveDirectCallDelegatesContextAndReturnsSanitizedRecord\n"} +{"Time":"2026-07-11T03:35:55.8352626+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRememberDirectiveDirectCallDelegatesContextAndReturnsSanitizedRecord","Output":"--- PASS: TestRememberDirectiveDirectCallDelegatesContextAndReturnsSanitizedRecord (0.00s)\n"} +{"Time":"2026-07-11T03:35:55.8352626+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRememberDirectiveDirectCallDelegatesContextAndReturnsSanitizedRecord","Elapsed":0} +{"Time":"2026-07-11T03:35:55.8352626+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemory_DryRun_NilStore"} +{"Time":"2026-07-11T03:35:55.8352626+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemory_DryRun_NilStore","Output":"=== RUN TestStoreMemory_DryRun_NilStore\n"} +{"Time":"2026-07-11T03:35:55.8352626+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemory_DryRun_NilStore","Output":"--- PASS: TestStoreMemory_DryRun_NilStore (0.00s)\n"} +{"Time":"2026-07-11T03:35:55.8352626+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemory_DryRun_NilStore","Elapsed":0} +{"Time":"2026-07-11T03:35:55.8357625+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemory_DryRun_RequiresContent"} +{"Time":"2026-07-11T03:35:55.8357625+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemory_DryRun_RequiresContent","Output":"=== RUN TestStoreMemory_DryRun_RequiresContent\n"} +{"Time":"2026-07-11T03:35:55.8357625+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemory_DryRun_RequiresContent","Output":"--- PASS: TestStoreMemory_DryRun_RequiresContent (0.00s)\n"} +{"Time":"2026-07-11T03:35:55.8357625+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemory_DryRun_RequiresContent","Elapsed":0} +{"Time":"2026-07-11T03:35:55.8357625+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestPromoteCandidate_DryRun_NilStore"} +{"Time":"2026-07-11T03:35:55.8357625+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestPromoteCandidate_DryRun_NilStore","Output":"=== RUN TestPromoteCandidate_DryRun_NilStore\n"} +{"Time":"2026-07-11T03:35:55.8357625+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestPromoteCandidate_DryRun_NilStore","Output":"--- PASS: TestPromoteCandidate_DryRun_NilStore (0.00s)\n"} +{"Time":"2026-07-11T03:35:55.8357625+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestPromoteCandidate_DryRun_NilStore","Elapsed":0} +{"Time":"2026-07-11T03:35:55.8357625+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestBulkPromote_DryRun_NilFacade"} +{"Time":"2026-07-11T03:35:55.8357625+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestBulkPromote_DryRun_NilFacade","Output":"=== RUN TestBulkPromote_DryRun_NilFacade\n"} +{"Time":"2026-07-11T03:35:55.8357625+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestBulkPromote_DryRun_NilFacade","Output":"--- PASS: TestBulkPromote_DryRun_NilFacade (0.00s)\n"} +{"Time":"2026-07-11T03:35:55.8357625+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestBulkPromote_DryRun_NilFacade","Elapsed":0} +{"Time":"2026-07-11T03:35:55.8357625+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestBulkDelete_DryRun_NilFacade"} +{"Time":"2026-07-11T03:35:55.8357625+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestBulkDelete_DryRun_NilFacade","Output":"=== RUN TestBulkDelete_DryRun_NilFacade\n"} +{"Time":"2026-07-11T03:35:55.8357625+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestBulkDelete_DryRun_NilFacade","Output":"--- PASS: TestBulkDelete_DryRun_NilFacade (0.00s)\n"} +{"Time":"2026-07-11T03:35:55.8357625+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestBulkDelete_DryRun_NilFacade","Elapsed":0} +{"Time":"2026-07-11T03:35:55.8357625+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestBulkSupersede_DryRun_NilFacade"} +{"Time":"2026-07-11T03:35:55.8357625+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestBulkSupersede_DryRun_NilFacade","Output":"=== RUN TestBulkSupersede_DryRun_NilFacade\n"} +{"Time":"2026-07-11T03:35:55.8357625+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestBulkSupersede_DryRun_NilFacade","Output":"--- PASS: TestBulkSupersede_DryRun_NilFacade (0.00s)\n"} +{"Time":"2026-07-11T03:35:55.8357625+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestBulkSupersede_DryRun_NilFacade","Elapsed":0} +{"Time":"2026-07-11T03:35:55.8357625+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestBulkPromote_NonAdmin_ReturnsAdminRequired"} +{"Time":"2026-07-11T03:35:55.8357625+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestBulkPromote_NonAdmin_ReturnsAdminRequired","Output":"=== RUN TestBulkPromote_NonAdmin_ReturnsAdminRequired\n"} +{"Time":"2026-07-11T03:35:55.8357625+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestBulkPromote_NonAdmin_ReturnsAdminRequired","Output":"--- PASS: TestBulkPromote_NonAdmin_ReturnsAdminRequired (0.00s)\n"} +{"Time":"2026-07-11T03:35:55.8357625+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestBulkPromote_NonAdmin_ReturnsAdminRequired","Elapsed":0} +{"Time":"2026-07-11T03:35:55.8357625+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestBulkOps_FlagOff_NotAdvertised"} +{"Time":"2026-07-11T03:35:55.8357625+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestBulkOps_FlagOff_NotAdvertised","Output":"=== RUN TestBulkOps_FlagOff_NotAdvertised\n"} +{"Time":"2026-07-11T03:35:55.8357625+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestBulkOps_FlagOff_NotAdvertised","Output":"--- PASS: TestBulkOps_FlagOff_NotAdvertised (0.00s)\n"} +{"Time":"2026-07-11T03:35:55.8357625+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestBulkOps_FlagOff_NotAdvertised","Elapsed":0} +{"Time":"2026-07-11T03:35:55.8357625+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestDryRun_Integration_StoreMemory_ZeroSideEffects"} +{"Time":"2026-07-11T03:35:55.8357625+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestDryRun_Integration_StoreMemory_ZeroSideEffects","Output":"=== RUN TestDryRun_Integration_StoreMemory_ZeroSideEffects\n"} +{"Time":"2026-07-11T03:35:55.9678047+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestDryRun_Integration_StoreMemory_ZeroSideEffects","Output":"{\"level\":\"debug\",\"connections\":5,\"time\":\"2026-07-11T03:35:55+03:00\",\"message\":\"Connection pool warmed\"}\n"} +{"Time":"2026-07-11T03:35:55.9763048+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestDryRun_Integration_StoreMemory_ZeroSideEffects","Output":"--- PASS: TestDryRun_Integration_StoreMemory_ZeroSideEffects (0.14s)\n"} +{"Time":"2026-07-11T03:35:55.9763048+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestDryRun_Integration_StoreMemory_ZeroSideEffects","Elapsed":0.14} +{"Time":"2026-07-11T03:35:55.9763048+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestExperienceHistoryToolsAdvertisedWhenProviderWired"} +{"Time":"2026-07-11T03:35:55.9763048+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestExperienceHistoryToolsAdvertisedWhenProviderWired","Output":"=== RUN TestExperienceHistoryToolsAdvertisedWhenProviderWired\n"} +{"Time":"2026-07-11T03:35:55.9768068+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestExperienceHistoryToolsAdvertisedWhenProviderWired","Output":"--- PASS: TestExperienceHistoryToolsAdvertisedWhenProviderWired (0.00s)\n"} +{"Time":"2026-07-11T03:35:55.9768068+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestExperienceHistoryToolsAdvertisedWhenProviderWired","Elapsed":0} +{"Time":"2026-07-11T03:35:55.9768068+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleExperienceHistoryReadReturnsBlockedApplicabilityEnvelope"} +{"Time":"2026-07-11T03:35:55.9768068+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleExperienceHistoryReadReturnsBlockedApplicabilityEnvelope","Output":"=== RUN TestHandleExperienceHistoryReadReturnsBlockedApplicabilityEnvelope\n"} +{"Time":"2026-07-11T03:35:55.9773053+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleExperienceHistoryReadReturnsBlockedApplicabilityEnvelope","Output":"--- PASS: TestHandleExperienceHistoryReadReturnsBlockedApplicabilityEnvelope (0.00s)\n"} +{"Time":"2026-07-11T03:35:55.9773053+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleExperienceHistoryReadReturnsBlockedApplicabilityEnvelope","Elapsed":0} +{"Time":"2026-07-11T03:35:55.9773053+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleExperienceHistoryReadRejectsInvalidArchiveTrigger"} +{"Time":"2026-07-11T03:35:55.9773053+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleExperienceHistoryReadRejectsInvalidArchiveTrigger","Output":"=== RUN TestHandleExperienceHistoryReadRejectsInvalidArchiveTrigger\n"} +{"Time":"2026-07-11T03:35:55.9773053+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleExperienceHistoryReadRejectsInvalidArchiveTrigger","Output":"--- PASS: TestHandleExperienceHistoryReadRejectsInvalidArchiveTrigger (0.00s)\n"} +{"Time":"2026-07-11T03:35:55.9773053+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleExperienceHistoryReadRejectsInvalidArchiveTrigger","Elapsed":0} +{"Time":"2026-07-11T03:35:55.9773053+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGovernanceTools_NotAdvertisedWhenFlagOff"} +{"Time":"2026-07-11T03:35:55.9773053+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGovernanceTools_NotAdvertisedWhenFlagOff","Output":"=== RUN TestGovernanceTools_NotAdvertisedWhenFlagOff\n"} +{"Time":"2026-07-11T03:35:55.9773053+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGovernanceTools_NotAdvertisedWhenFlagOff","Output":"--- PASS: TestGovernanceTools_NotAdvertisedWhenFlagOff (0.00s)\n"} +{"Time":"2026-07-11T03:35:55.9773053+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGovernanceTools_NotAdvertisedWhenFlagOff","Elapsed":0} +{"Time":"2026-07-11T03:35:55.9773053+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGovernanceTools_AdminGate_NoIdentity"} +{"Time":"2026-07-11T03:35:55.9773053+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGovernanceTools_AdminGate_NoIdentity","Output":"=== RUN TestGovernanceTools_AdminGate_NoIdentity\n"} +{"Time":"2026-07-11T03:35:55.9843054+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGovernanceTools_AdminGate_NoIdentity/list_snapshots"} +{"Time":"2026-07-11T03:35:55.9843054+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGovernanceTools_AdminGate_NoIdentity/list_snapshots","Output":"=== RUN TestGovernanceTools_AdminGate_NoIdentity/list_snapshots\n"} +{"Time":"2026-07-11T03:35:55.9843054+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGovernanceTools_AdminGate_NoIdentity/list_snapshots","Output":"--- PASS: TestGovernanceTools_AdminGate_NoIdentity/list_snapshots (0.00s)\n"} +{"Time":"2026-07-11T03:35:55.9843054+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGovernanceTools_AdminGate_NoIdentity/list_snapshots","Elapsed":0} +{"Time":"2026-07-11T03:35:55.9843054+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGovernanceTools_AdminGate_NoIdentity/rollback_snapshot"} +{"Time":"2026-07-11T03:35:55.9843054+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGovernanceTools_AdminGate_NoIdentity/rollback_snapshot","Output":"=== RUN TestGovernanceTools_AdminGate_NoIdentity/rollback_snapshot\n"} +{"Time":"2026-07-11T03:35:55.9843054+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGovernanceTools_AdminGate_NoIdentity/rollback_snapshot","Output":"--- PASS: TestGovernanceTools_AdminGate_NoIdentity/rollback_snapshot (0.00s)\n"} +{"Time":"2026-07-11T03:35:55.9843054+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGovernanceTools_AdminGate_NoIdentity/rollback_snapshot","Elapsed":0} +{"Time":"2026-07-11T03:35:55.9843054+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGovernanceTools_AdminGate_NoIdentity/pin_snapshot"} +{"Time":"2026-07-11T03:35:55.9843054+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGovernanceTools_AdminGate_NoIdentity/pin_snapshot","Output":"=== RUN TestGovernanceTools_AdminGate_NoIdentity/pin_snapshot\n"} +{"Time":"2026-07-11T03:35:55.9843054+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGovernanceTools_AdminGate_NoIdentity/pin_snapshot","Output":"--- PASS: TestGovernanceTools_AdminGate_NoIdentity/pin_snapshot (0.00s)\n"} +{"Time":"2026-07-11T03:35:55.9843054+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGovernanceTools_AdminGate_NoIdentity/pin_snapshot","Elapsed":0} +{"Time":"2026-07-11T03:35:55.9843054+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGovernanceTools_AdminGate_NoIdentity/redaction_rules_status"} +{"Time":"2026-07-11T03:35:55.9843054+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGovernanceTools_AdminGate_NoIdentity/redaction_rules_status","Output":"=== RUN TestGovernanceTools_AdminGate_NoIdentity/redaction_rules_status\n"} +{"Time":"2026-07-11T03:35:55.9843054+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGovernanceTools_AdminGate_NoIdentity/redaction_rules_status","Output":"--- PASS: TestGovernanceTools_AdminGate_NoIdentity/redaction_rules_status (0.00s)\n"} +{"Time":"2026-07-11T03:35:55.9843054+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGovernanceTools_AdminGate_NoIdentity/redaction_rules_status","Elapsed":0} +{"Time":"2026-07-11T03:35:55.9848052+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGovernanceTools_AdminGate_NoIdentity","Output":"--- PASS: TestGovernanceTools_AdminGate_NoIdentity (0.01s)\n"} +{"Time":"2026-07-11T03:35:55.9848052+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGovernanceTools_AdminGate_NoIdentity","Elapsed":0.01} +{"Time":"2026-07-11T03:35:55.9848052+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGovernanceTools_AdminGate_ReadOnlyCaller"} +{"Time":"2026-07-11T03:35:55.9848052+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGovernanceTools_AdminGate_ReadOnlyCaller","Output":"=== RUN TestGovernanceTools_AdminGate_ReadOnlyCaller\n"} +{"Time":"2026-07-11T03:35:55.9923052+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGovernanceTools_AdminGate_ReadOnlyCaller","Output":"--- PASS: TestGovernanceTools_AdminGate_ReadOnlyCaller (0.01s)\n"} +{"Time":"2026-07-11T03:35:55.9923052+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGovernanceTools_AdminGate_ReadOnlyCaller","Elapsed":0.01} +{"Time":"2026-07-11T03:35:55.9923052+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGovernanceTools_RedactionRulesStatus_NoAdminRequired_WithAdmin"} +{"Time":"2026-07-11T03:35:55.9923052+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGovernanceTools_RedactionRulesStatus_NoAdminRequired_WithAdmin","Output":"=== RUN TestGovernanceTools_RedactionRulesStatus_NoAdminRequired_WithAdmin\n"} +{"Time":"2026-07-11T03:35:55.9923052+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGovernanceTools_RedactionRulesStatus_NoAdminRequired_WithAdmin","Output":"--- PASS: TestGovernanceTools_RedactionRulesStatus_NoAdminRequired_WithAdmin (0.00s)\n"} +{"Time":"2026-07-11T03:35:55.9923052+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGovernanceTools_RedactionRulesStatus_NoAdminRequired_WithAdmin","Elapsed":0} +{"Time":"2026-07-11T03:35:55.9923052+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGovernanceTools_ListSnapshotsSchemaIncludesReviewActionOpTypes"} +{"Time":"2026-07-11T03:35:55.9923052+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGovernanceTools_ListSnapshotsSchemaIncludesReviewActionOpTypes","Output":"=== RUN TestGovernanceTools_ListSnapshotsSchemaIncludesReviewActionOpTypes\n"} +{"Time":"2026-07-11T03:35:55.9923052+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGovernanceTools_ListSnapshotsSchemaIncludesReviewActionOpTypes","Output":"--- PASS: TestGovernanceTools_ListSnapshotsSchemaIncludesReviewActionOpTypes (0.00s)\n"} +{"Time":"2026-07-11T03:35:55.9923052+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGovernanceTools_ListSnapshotsSchemaIncludesReviewActionOpTypes","Elapsed":0} +{"Time":"2026-07-11T03:35:55.9923052+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGraphTool_T014_ArgsShape"} +{"Time":"2026-07-11T03:35:55.9923052+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGraphTool_T014_ArgsShape","Output":"=== RUN TestGraphTool_T014_ArgsShape\n"} +{"Time":"2026-07-11T03:35:55.9923052+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGraphTool_T014_ArgsShape","Output":"--- PASS: TestGraphTool_T014_ArgsShape (0.00s)\n"} +{"Time":"2026-07-11T03:35:55.9923052+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGraphTool_T014_ArgsShape","Elapsed":0} +{"Time":"2026-07-11T03:35:55.9928048+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGraphTool_T014_AddNodeAction"} +{"Time":"2026-07-11T03:35:55.9928048+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGraphTool_T014_AddNodeAction","Output":"=== RUN TestGraphTool_T014_AddNodeAction\n"} +{"Time":"2026-07-11T03:35:55.9928048+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGraphTool_T014_AddNodeAction","Output":"--- PASS: TestGraphTool_T014_AddNodeAction (0.00s)\n"} +{"Time":"2026-07-11T03:35:55.9928048+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGraphTool_T014_AddNodeAction","Elapsed":0} +{"Time":"2026-07-11T03:35:55.9928048+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGraphTool_T014_GetEdgesNodeTypeFilter"} +{"Time":"2026-07-11T03:35:55.9928048+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGraphTool_T014_GetEdgesNodeTypeFilter","Output":"=== RUN TestGraphTool_T014_GetEdgesNodeTypeFilter\n"} +{"Time":"2026-07-11T03:35:55.9928048+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGraphTool_T014_GetEdgesNodeTypeFilter","Output":"--- PASS: TestGraphTool_T014_GetEdgesNodeTypeFilter (0.00s)\n"} +{"Time":"2026-07-11T03:35:55.9928048+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGraphTool_T014_GetEdgesNodeTypeFilter","Elapsed":0} +{"Time":"2026-07-11T03:35:55.9928048+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGraphTool_T014_InvalidNodeTypeRejects"} +{"Time":"2026-07-11T03:35:55.9928048+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGraphTool_T014_InvalidNodeTypeRejects","Output":"=== RUN TestGraphTool_T014_InvalidNodeTypeRejects\n"} +{"Time":"2026-07-11T03:35:55.9928048+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGraphTool_T014_InvalidNodeTypeRejects","Output":"--- PASS: TestGraphTool_T014_InvalidNodeTypeRejects (0.00s)\n"} +{"Time":"2026-07-11T03:35:55.9928048+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGraphTool_T014_InvalidNodeTypeRejects","Elapsed":0} +{"Time":"2026-07-11T03:35:55.9928048+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGraphTool_T014_NodeTypeFilterOffline"} +{"Time":"2026-07-11T03:35:55.9928048+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGraphTool_T014_NodeTypeFilterOffline","Output":"=== RUN TestGraphTool_T014_NodeTypeFilterOffline\n"} +{"Time":"2026-07-11T03:35:55.9928048+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGraphTool_T014_NodeTypeFilterOffline","Output":"--- PASS: TestGraphTool_T014_NodeTypeFilterOffline (0.00s)\n"} +{"Time":"2026-07-11T03:35:55.9928048+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGraphTool_T014_NodeTypeFilterOffline","Elapsed":0} +{"Time":"2026-07-11T03:35:55.9928048+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGraphTool_T014_AddNodeOffline"} +{"Time":"2026-07-11T03:35:55.9928048+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGraphTool_T014_AddNodeOffline","Output":"=== RUN TestGraphTool_T014_AddNodeOffline\n"} +{"Time":"2026-07-11T03:35:55.9928048+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGraphTool_T014_AddNodeOffline/invalid_node_type_returns_error_containing_invalid_node_type:"} +{"Time":"2026-07-11T03:35:55.9928048+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGraphTool_T014_AddNodeOffline/invalid_node_type_returns_error_containing_invalid_node_type:","Output":"=== RUN TestGraphTool_T014_AddNodeOffline/invalid_node_type_returns_error_containing_invalid_node_type:\n"} +{"Time":"2026-07-11T03:35:55.9928048+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGraphTool_T014_AddNodeOffline/invalid_node_type_returns_error_containing_invalid_node_type:","Output":"--- PASS: TestGraphTool_T014_AddNodeOffline/invalid_node_type_returns_error_containing_invalid_node_type: (0.00s)\n"} +{"Time":"2026-07-11T03:35:55.9928048+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGraphTool_T014_AddNodeOffline/invalid_node_type_returns_error_containing_invalid_node_type:","Elapsed":0} +{"Time":"2026-07-11T03:35:55.9928048+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGraphTool_T014_AddNodeOffline/empty_external_ref_returns_error"} +{"Time":"2026-07-11T03:35:55.9928048+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGraphTool_T014_AddNodeOffline/empty_external_ref_returns_error","Output":"=== RUN TestGraphTool_T014_AddNodeOffline/empty_external_ref_returns_error\n"} +{"Time":"2026-07-11T03:35:55.9928048+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGraphTool_T014_AddNodeOffline/empty_external_ref_returns_error","Output":"--- PASS: TestGraphTool_T014_AddNodeOffline/empty_external_ref_returns_error (0.00s)\n"} +{"Time":"2026-07-11T03:35:55.9928048+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGraphTool_T014_AddNodeOffline/empty_external_ref_returns_error","Elapsed":0} +{"Time":"2026-07-11T03:35:55.9928048+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGraphTool_T014_AddNodeOffline/empty_project_returns_error"} +{"Time":"2026-07-11T03:35:55.9928048+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGraphTool_T014_AddNodeOffline/empty_project_returns_error","Output":"=== RUN TestGraphTool_T014_AddNodeOffline/empty_project_returns_error\n"} +{"Time":"2026-07-11T03:35:55.9928048+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGraphTool_T014_AddNodeOffline/empty_project_returns_error","Output":"--- PASS: TestGraphTool_T014_AddNodeOffline/empty_project_returns_error (0.00s)\n"} +{"Time":"2026-07-11T03:35:55.9928048+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGraphTool_T014_AddNodeOffline/empty_project_returns_error","Elapsed":0} +{"Time":"2026-07-11T03:35:55.9928048+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGraphTool_T014_AddNodeOffline/valid_input_store_receives_correct_node"} +{"Time":"2026-07-11T03:35:55.9928048+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGraphTool_T014_AddNodeOffline/valid_input_store_receives_correct_node","Output":"=== RUN TestGraphTool_T014_AddNodeOffline/valid_input_store_receives_correct_node\n"} +{"Time":"2026-07-11T03:35:55.9928048+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGraphTool_T014_AddNodeOffline/valid_input_store_receives_correct_node","Output":"--- PASS: TestGraphTool_T014_AddNodeOffline/valid_input_store_receives_correct_node (0.00s)\n"} +{"Time":"2026-07-11T03:35:55.9928048+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGraphTool_T014_AddNodeOffline/valid_input_store_receives_correct_node","Elapsed":0} +{"Time":"2026-07-11T03:35:55.9928048+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGraphTool_T014_AddNodeOffline","Output":"--- PASS: TestGraphTool_T014_AddNodeOffline (0.00s)\n"} +{"Time":"2026-07-11T03:35:55.9928048+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGraphTool_T014_AddNodeOffline","Elapsed":0} +{"Time":"2026-07-11T03:35:55.9928048+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGraphTool_T014_AddEdgeGuardsOffline"} +{"Time":"2026-07-11T03:35:55.9928048+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGraphTool_T014_AddEdgeGuardsOffline","Output":"=== RUN TestGraphTool_T014_AddEdgeGuardsOffline\n"} +{"Time":"2026-07-11T03:35:55.9928048+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGraphTool_T014_AddEdgeGuardsOffline/duplicate_edge_rejected_before_create"} +{"Time":"2026-07-11T03:35:55.9928048+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGraphTool_T014_AddEdgeGuardsOffline/duplicate_edge_rejected_before_create","Output":"=== RUN TestGraphTool_T014_AddEdgeGuardsOffline/duplicate_edge_rejected_before_create\n"} +{"Time":"2026-07-11T03:35:55.9928048+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGraphTool_T014_AddEdgeGuardsOffline/duplicate_edge_rejected_before_create","Output":"--- PASS: TestGraphTool_T014_AddEdgeGuardsOffline/duplicate_edge_rejected_before_create (0.00s)\n"} +{"Time":"2026-07-11T03:35:55.9928048+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGraphTool_T014_AddEdgeGuardsOffline/duplicate_edge_rejected_before_create","Elapsed":0} +{"Time":"2026-07-11T03:35:55.9928048+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGraphTool_T014_AddEdgeGuardsOffline/orphan_edge_rejected_before_create"} +{"Time":"2026-07-11T03:35:55.9928048+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGraphTool_T014_AddEdgeGuardsOffline/orphan_edge_rejected_before_create","Output":"=== RUN TestGraphTool_T014_AddEdgeGuardsOffline/orphan_edge_rejected_before_create\n"} +{"Time":"2026-07-11T03:35:55.9928048+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGraphTool_T014_AddEdgeGuardsOffline/orphan_edge_rejected_before_create","Output":"--- PASS: TestGraphTool_T014_AddEdgeGuardsOffline/orphan_edge_rejected_before_create (0.00s)\n"} +{"Time":"2026-07-11T03:35:55.9928048+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGraphTool_T014_AddEdgeGuardsOffline/orphan_edge_rejected_before_create","Elapsed":0} +{"Time":"2026-07-11T03:35:55.9928048+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGraphTool_T014_AddEdgeGuardsOffline/memory_orphan_edge_rejected_before_create"} +{"Time":"2026-07-11T03:35:55.9928048+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGraphTool_T014_AddEdgeGuardsOffline/memory_orphan_edge_rejected_before_create","Output":"=== RUN TestGraphTool_T014_AddEdgeGuardsOffline/memory_orphan_edge_rejected_before_create\n"} +{"Time":"2026-07-11T03:35:55.9928048+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGraphTool_T014_AddEdgeGuardsOffline/memory_orphan_edge_rejected_before_create","Output":"--- PASS: TestGraphTool_T014_AddEdgeGuardsOffline/memory_orphan_edge_rejected_before_create (0.00s)\n"} +{"Time":"2026-07-11T03:35:55.9928048+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGraphTool_T014_AddEdgeGuardsOffline/memory_orphan_edge_rejected_before_create","Elapsed":0} +{"Time":"2026-07-11T03:35:55.9928048+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGraphTool_T014_AddEdgeGuardsOffline/valid_edge_creates_exactly_once"} +{"Time":"2026-07-11T03:35:55.9928048+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGraphTool_T014_AddEdgeGuardsOffline/valid_edge_creates_exactly_once","Output":"=== RUN TestGraphTool_T014_AddEdgeGuardsOffline/valid_edge_creates_exactly_once\n"} +{"Time":"2026-07-11T03:35:55.9928048+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGraphTool_T014_AddEdgeGuardsOffline/valid_edge_creates_exactly_once","Output":"--- PASS: TestGraphTool_T014_AddEdgeGuardsOffline/valid_edge_creates_exactly_once (0.00s)\n"} +{"Time":"2026-07-11T03:35:55.9928048+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGraphTool_T014_AddEdgeGuardsOffline/valid_edge_creates_exactly_once","Elapsed":0} +{"Time":"2026-07-11T03:35:55.9928048+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGraphTool_T014_AddEdgeGuardsOffline","Output":"--- PASS: TestGraphTool_T014_AddEdgeGuardsOffline (0.00s)\n"} +{"Time":"2026-07-11T03:35:55.9928048+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGraphTool_T014_AddEdgeGuardsOffline","Elapsed":0} +{"Time":"2026-07-11T03:35:55.9928048+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleIssueCloseAcceptsExplicitLegacySourceProject"} +{"Time":"2026-07-11T03:35:55.9928048+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleIssueCloseAcceptsExplicitLegacySourceProject","Output":"=== RUN TestHandleIssueCloseAcceptsExplicitLegacySourceProject\n"} +{"Time":"2026-07-11T03:35:56.1299598+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleIssueCloseAcceptsExplicitLegacySourceProject","Output":"{\"level\":\"debug\",\"connections\":5,\"time\":\"2026-07-11T03:35:56+03:00\",\"message\":\"Connection pool warmed\"}\n"} +{"Time":"2026-07-11T03:35:56.1694584+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleIssueCloseAcceptsExplicitLegacySourceProject","Output":"--- PASS: TestHandleIssueCloseAcceptsExplicitLegacySourceProject (0.18s)\n"} +{"Time":"2026-07-11T03:35:56.1694584+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleIssueCloseAcceptsExplicitLegacySourceProject","Elapsed":0.18} +{"Time":"2026-07-11T03:35:56.1694584+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleIssueCloseDoesNotLetExplicitDashboardBypassContext"} +{"Time":"2026-07-11T03:35:56.1694584+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleIssueCloseDoesNotLetExplicitDashboardBypassContext","Output":"=== RUN TestHandleIssueCloseDoesNotLetExplicitDashboardBypassContext\n"} +{"Time":"2026-07-11T03:35:56.2981115+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleIssueCloseDoesNotLetExplicitDashboardBypassContext","Output":"{\"level\":\"debug\",\"connections\":5,\"time\":\"2026-07-11T03:35:56+03:00\",\"message\":\"Connection pool warmed\"}\n"} +{"Time":"2026-07-11T03:35:56.3296588+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleIssueCloseDoesNotLetExplicitDashboardBypassContext","Output":"--- PASS: TestHandleIssueCloseDoesNotLetExplicitDashboardBypassContext (0.16s)\n"} +{"Time":"2026-07-11T03:35:56.3296588+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleIssueCloseDoesNotLetExplicitDashboardBypassContext","Elapsed":0.16} +{"Time":"2026-07-11T03:35:56.3296588+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAuditCreate_LogCalledOnSuccess"} +{"Time":"2026-07-11T03:35:56.3296588+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAuditCreate_LogCalledOnSuccess","Output":"=== RUN TestAuditCreate_LogCalledOnSuccess\n"} +{"Time":"2026-07-11T03:35:56.3351573+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAuditCreate_LogCalledOnSuccess","Output":"--- PASS: TestAuditCreate_LogCalledOnSuccess (0.01s)\n"} +{"Time":"2026-07-11T03:35:56.3351573+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAuditCreate_LogCalledOnSuccess","Elapsed":0.01} +{"Time":"2026-07-11T03:35:56.3351573+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAuditCreate_SkippedWhenFlagOff"} +{"Time":"2026-07-11T03:35:56.3351573+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAuditCreate_SkippedWhenFlagOff","Output":"=== RUN TestAuditCreate_SkippedWhenFlagOff\n"} +{"Time":"2026-07-11T03:35:56.3653418+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAuditCreate_SkippedWhenFlagOff","Output":"--- PASS: TestAuditCreate_SkippedWhenFlagOff (0.03s)\n"} +{"Time":"2026-07-11T03:35:56.3653418+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAuditCreate_SkippedWhenFlagOff","Elapsed":0.03} +{"Time":"2026-07-11T03:35:56.3653418+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAuditCreate_SkippedWhenAuditStoreNil"} +{"Time":"2026-07-11T03:35:56.3653418+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAuditCreate_SkippedWhenAuditStoreNil","Output":"=== RUN TestAuditCreate_SkippedWhenAuditStoreNil\n"} +{"Time":"2026-07-11T03:35:56.3758421+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAuditCreate_SkippedWhenAuditStoreNil","Output":"--- PASS: TestAuditCreate_SkippedWhenAuditStoreNil (0.01s)\n"} +{"Time":"2026-07-11T03:35:56.3758421+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAuditCreate_SkippedWhenAuditStoreNil","Elapsed":0.01} +{"Time":"2026-07-11T03:35:56.3758421+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAuditEdit_LogCalledWithBeforeAndAfterState"} +{"Time":"2026-07-11T03:35:56.3758421+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAuditEdit_LogCalledWithBeforeAndAfterState","Output":"=== RUN TestAuditEdit_LogCalledWithBeforeAndAfterState\n"} +{"Time":"2026-07-11T03:35:56.3813431+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAuditEdit_LogCalledWithBeforeAndAfterState","Output":"--- PASS: TestAuditEdit_LogCalledWithBeforeAndAfterState (0.01s)\n"} +{"Time":"2026-07-11T03:35:56.3813431+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAuditEdit_LogCalledWithBeforeAndAfterState","Elapsed":0.01} +{"Time":"2026-07-11T03:35:56.3813431+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAuditDelete_LogCalledWithBeforeState"} +{"Time":"2026-07-11T03:35:56.3813431+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAuditDelete_LogCalledWithBeforeState","Output":"=== RUN TestAuditDelete_LogCalledWithBeforeState\n"} +{"Time":"2026-07-11T03:35:56.3868424+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAuditDelete_LogCalledWithBeforeState","Output":"--- PASS: TestAuditDelete_LogCalledWithBeforeState (0.01s)\n"} +{"Time":"2026-07-11T03:35:56.3868424+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAuditDelete_LogCalledWithBeforeState","Elapsed":0.01} +{"Time":"2026-07-11T03:35:56.3868424+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAuditSupersede_LogCalledWithSupersededID"} +{"Time":"2026-07-11T03:35:56.3868424+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAuditSupersede_LogCalledWithSupersededID","Output":"=== RUN TestAuditSupersede_LogCalledWithSupersededID\n"} +{"Time":"2026-07-11T03:35:56.3923422+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAuditSupersede_LogCalledWithSupersededID","Output":"--- PASS: TestAuditSupersede_LogCalledWithSupersededID (0.01s)\n"} +{"Time":"2026-07-11T03:35:56.3923422+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAuditSupersede_LogCalledWithSupersededID","Elapsed":0.01} +{"Time":"2026-07-11T03:35:56.3923422+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAuditEdit_SkippedWhenFlagOff"} +{"Time":"2026-07-11T03:35:56.3923422+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAuditEdit_SkippedWhenFlagOff","Output":"=== RUN TestAuditEdit_SkippedWhenFlagOff\n"} +{"Time":"2026-07-11T03:35:56.4225546+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAuditEdit_SkippedWhenFlagOff","Output":"--- PASS: TestAuditEdit_SkippedWhenFlagOff (0.03s)\n"} +{"Time":"2026-07-11T03:35:56.4225546+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAuditEdit_SkippedWhenFlagOff","Elapsed":0.03} +{"Time":"2026-07-11T03:35:56.4225546+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAuditDelete_SkippedWhenFlagOff"} +{"Time":"2026-07-11T03:35:56.4225546+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAuditDelete_SkippedWhenFlagOff","Output":"=== RUN TestAuditDelete_SkippedWhenFlagOff\n"} +{"Time":"2026-07-11T03:35:56.4531463+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAuditDelete_SkippedWhenFlagOff","Output":"--- PASS: TestAuditDelete_SkippedWhenFlagOff (0.03s)\n"} +{"Time":"2026-07-11T03:35:56.4531463+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAuditDelete_SkippedWhenFlagOff","Elapsed":0.03} +{"Time":"2026-07-11T03:35:56.4531463+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAuditSupersede_SkippedWhenFlagOff"} +{"Time":"2026-07-11T03:35:56.4531463+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAuditSupersede_SkippedWhenFlagOff","Output":"=== RUN TestAuditSupersede_SkippedWhenFlagOff\n"} +{"Time":"2026-07-11T03:35:56.4836504+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAuditSupersede_SkippedWhenFlagOff","Output":"--- PASS: TestAuditSupersede_SkippedWhenFlagOff (0.03s)\n"} +{"Time":"2026-07-11T03:35:56.4836504+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAuditSupersede_SkippedWhenFlagOff","Elapsed":0.03} +{"Time":"2026-07-11T03:35:56.4836504+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryDomainPolicy_EmptyDomainLegacyCompatible"} +{"Time":"2026-07-11T03:35:56.4836504+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryDomainPolicy_EmptyDomainLegacyCompatible","Output":"=== RUN TestStoreMemoryDomainPolicy_EmptyDomainLegacyCompatible\n"} +{"Time":"2026-07-11T03:35:56.4836504+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryDomainPolicy_EmptyDomainLegacyCompatible","Output":"=== PAUSE TestStoreMemoryDomainPolicy_EmptyDomainLegacyCompatible\n"} +{"Time":"2026-07-11T03:35:56.4836504+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryDomainPolicy_EmptyDomainLegacyCompatible"} +{"Time":"2026-07-11T03:35:56.4836504+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryDomainPolicy_NonEmptyDomainRequiresPrincipal"} +{"Time":"2026-07-11T03:35:56.4836504+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryDomainPolicy_NonEmptyDomainRequiresPrincipal","Output":"=== RUN TestStoreMemoryDomainPolicy_NonEmptyDomainRequiresPrincipal\n"} +{"Time":"2026-07-11T03:35:56.4836504+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryDomainPolicy_NonEmptyDomainRequiresPrincipal","Output":"=== PAUSE TestStoreMemoryDomainPolicy_NonEmptyDomainRequiresPrincipal\n"} +{"Time":"2026-07-11T03:35:56.4836504+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryDomainPolicy_NonEmptyDomainRequiresPrincipal"} +{"Time":"2026-07-11T03:35:56.4836504+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryDomainPolicy_NonEmptyDomainAllowsPrincipalIdentity"} +{"Time":"2026-07-11T03:35:56.4836504+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryDomainPolicy_NonEmptyDomainAllowsPrincipalIdentity","Output":"=== RUN TestStoreMemoryDomainPolicy_NonEmptyDomainAllowsPrincipalIdentity\n"} +{"Time":"2026-07-11T03:35:56.4836504+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryDomainPolicy_NonEmptyDomainAllowsPrincipalIdentity","Output":"=== PAUSE TestStoreMemoryDomainPolicy_NonEmptyDomainAllowsPrincipalIdentity\n"} +{"Time":"2026-07-11T03:35:56.4836504+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryDomainPolicy_NonEmptyDomainAllowsPrincipalIdentity"} +{"Time":"2026-07-11T03:35:56.4836504+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryDomainPolicy_NonEmptyDomainRejectsInvalidPrincipalKind"} +{"Time":"2026-07-11T03:35:56.4836504+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryDomainPolicy_NonEmptyDomainRejectsInvalidPrincipalKind","Output":"=== RUN TestStoreMemoryDomainPolicy_NonEmptyDomainRejectsInvalidPrincipalKind\n"} +{"Time":"2026-07-11T03:35:56.4836504+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryDomainPolicy_NonEmptyDomainRejectsInvalidPrincipalKind","Output":"=== PAUSE TestStoreMemoryDomainPolicy_NonEmptyDomainRejectsInvalidPrincipalKind\n"} +{"Time":"2026-07-11T03:35:56.4836504+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryDomainPolicy_NonEmptyDomainRejectsInvalidPrincipalKind"} +{"Time":"2026-07-11T03:35:56.4836504+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWriteLintDomainPolicy_DomainOwnedCandidateHidden"} +{"Time":"2026-07-11T03:35:56.4836504+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWriteLintDomainPolicy_DomainOwnedCandidateHidden","Output":"=== RUN TestWriteLintDomainPolicy_DomainOwnedCandidateHidden\n"} +{"Time":"2026-07-11T03:35:56.4836504+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWriteLintDomainPolicy_DomainOwnedCandidateHidden","Output":"=== PAUSE TestWriteLintDomainPolicy_DomainOwnedCandidateHidden\n"} +{"Time":"2026-07-11T03:35:56.4836504+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWriteLintDomainPolicy_DomainOwnedCandidateHidden"} +{"Time":"2026-07-11T03:35:56.4836504+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWriteLintDomainPolicy_DomainOwnedTargetHidden"} +{"Time":"2026-07-11T03:35:56.4836504+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWriteLintDomainPolicy_DomainOwnedTargetHidden","Output":"=== RUN TestWriteLintDomainPolicy_DomainOwnedTargetHidden\n"} +{"Time":"2026-07-11T03:35:56.4836504+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWriteLintDomainPolicy_DomainOwnedTargetHidden","Output":"=== PAUSE TestWriteLintDomainPolicy_DomainOwnedTargetHidden\n"} +{"Time":"2026-07-11T03:35:56.4836504+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWriteLintDomainPolicy_DomainOwnedTargetHidden"} +{"Time":"2026-07-11T03:35:56.4836504+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestLegacyWriteGateDomainPolicy_DomainOwnedCandidateHidden"} +{"Time":"2026-07-11T03:35:56.4836504+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestLegacyWriteGateDomainPolicy_DomainOwnedCandidateHidden","Output":"=== RUN TestLegacyWriteGateDomainPolicy_DomainOwnedCandidateHidden\n"} +{"Time":"2026-07-11T03:35:56.4836504+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestLegacyWriteGateDomainPolicy_DomainOwnedCandidateHidden","Output":"--- PASS: TestLegacyWriteGateDomainPolicy_DomainOwnedCandidateHidden (0.00s)\n"} +{"Time":"2026-07-11T03:35:56.4836504+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestLegacyWriteGateDomainPolicy_DomainOwnedCandidateHidden","Elapsed":0} +{"Time":"2026-07-11T03:35:56.4836504+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryDomainPolicy_DomainOwnedRowHiddenFromMismatchedPrincipal"} +{"Time":"2026-07-11T03:35:56.4836504+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryDomainPolicy_DomainOwnedRowHiddenFromMismatchedPrincipal","Output":"=== RUN TestRecallMemoryDomainPolicy_DomainOwnedRowHiddenFromMismatchedPrincipal\n"} +{"Time":"2026-07-11T03:35:56.4836504+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryDomainPolicy_DomainOwnedRowHiddenFromMismatchedPrincipal","Output":"=== PAUSE TestRecallMemoryDomainPolicy_DomainOwnedRowHiddenFromMismatchedPrincipal\n"} +{"Time":"2026-07-11T03:35:56.4836504+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryDomainPolicy_DomainOwnedRowHiddenFromMismatchedPrincipal"} +{"Time":"2026-07-11T03:35:56.4836504+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryDomainPolicy_DomainOwnedRowVisibleToOwner"} +{"Time":"2026-07-11T03:35:56.4836504+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryDomainPolicy_DomainOwnedRowVisibleToOwner","Output":"=== RUN TestRecallMemoryDomainPolicy_DomainOwnedRowVisibleToOwner\n"} +{"Time":"2026-07-11T03:35:56.4836504+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryDomainPolicy_DomainOwnedRowVisibleToOwner","Output":"=== PAUSE TestRecallMemoryDomainPolicy_DomainOwnedRowVisibleToOwner\n"} +{"Time":"2026-07-11T03:35:56.4836504+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryDomainPolicy_DomainOwnedRowVisibleToOwner"} +{"Time":"2026-07-11T03:35:56.4836504+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryDomainRegistry_WarnRejectAndCompatibility"} +{"Time":"2026-07-11T03:35:56.4836504+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryDomainRegistry_WarnRejectAndCompatibility","Output":"=== RUN TestStoreMemoryDomainRegistry_WarnRejectAndCompatibility\n"} +{"Time":"2026-07-11T03:35:56.5986502+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryDomainRegistry_WarnRejectAndCompatibility","Output":"{\"level\":\"debug\",\"connections\":1,\"time\":\"2026-07-11T03:35:56+03:00\",\"message\":\"Connection pool warmed\"}\n"} +{"Time":"2026-07-11T03:35:56.5986502+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryDomainRegistry_WarnRejectAndCompatibility/missing_row_preserves_current_behavior"} +{"Time":"2026-07-11T03:35:56.5986502+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryDomainRegistry_WarnRejectAndCompatibility/missing_row_preserves_current_behavior","Output":"=== RUN TestStoreMemoryDomainRegistry_WarnRejectAndCompatibility/missing_row_preserves_current_behavior\n"} +{"Time":"2026-07-11T03:35:56.6116503+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryDomainRegistry_WarnRejectAndCompatibility/missing_row_preserves_current_behavior","Output":"--- PASS: TestStoreMemoryDomainRegistry_WarnRejectAndCompatibility/missing_row_preserves_current_behavior (0.01s)\n"} +{"Time":"2026-07-11T03:35:56.6116503+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryDomainRegistry_WarnRejectAndCompatibility/missing_row_preserves_current_behavior","Elapsed":0.01} +{"Time":"2026-07-11T03:35:56.6116503+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryDomainRegistry_WarnRejectAndCompatibility/off_allows_cross_owner"} +{"Time":"2026-07-11T03:35:56.6116503+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryDomainRegistry_WarnRejectAndCompatibility/off_allows_cross_owner","Output":"=== RUN TestStoreMemoryDomainRegistry_WarnRejectAndCompatibility/off_allows_cross_owner\n"} +{"Time":"2026-07-11T03:35:56.627652+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryDomainRegistry_WarnRejectAndCompatibility/off_allows_cross_owner","Output":"--- PASS: TestStoreMemoryDomainRegistry_WarnRejectAndCompatibility/off_allows_cross_owner (0.02s)\n"} +{"Time":"2026-07-11T03:35:56.627652+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryDomainRegistry_WarnRejectAndCompatibility/off_allows_cross_owner","Elapsed":0.02} +{"Time":"2026-07-11T03:35:56.627652+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryDomainRegistry_WarnRejectAndCompatibility/same_owner_allows_without_warning"} +{"Time":"2026-07-11T03:35:56.627652+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryDomainRegistry_WarnRejectAndCompatibility/same_owner_allows_without_warning","Output":"=== RUN TestStoreMemoryDomainRegistry_WarnRejectAndCompatibility/same_owner_allows_without_warning\n"} +{"Time":"2026-07-11T03:35:56.6441508+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryDomainRegistry_WarnRejectAndCompatibility/same_owner_allows_without_warning","Output":"--- PASS: TestStoreMemoryDomainRegistry_WarnRejectAndCompatibility/same_owner_allows_without_warning (0.02s)\n"} +{"Time":"2026-07-11T03:35:56.6441508+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryDomainRegistry_WarnRejectAndCompatibility/same_owner_allows_without_warning","Elapsed":0.02} +{"Time":"2026-07-11T03:35:56.6441508+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryDomainRegistry_WarnRejectAndCompatibility/warn_allows_with_structured_warning"} +{"Time":"2026-07-11T03:35:56.6441508+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryDomainRegistry_WarnRejectAndCompatibility/warn_allows_with_structured_warning","Output":"=== RUN TestStoreMemoryDomainRegistry_WarnRejectAndCompatibility/warn_allows_with_structured_warning\n"} +{"Time":"2026-07-11T03:35:56.6671508+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryDomainRegistry_WarnRejectAndCompatibility/warn_allows_with_structured_warning","Output":"--- PASS: TestStoreMemoryDomainRegistry_WarnRejectAndCompatibility/warn_allows_with_structured_warning (0.02s)\n"} +{"Time":"2026-07-11T03:35:56.6671508+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryDomainRegistry_WarnRejectAndCompatibility/warn_allows_with_structured_warning","Elapsed":0.02} +{"Time":"2026-07-11T03:35:56.6671508+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryDomainRegistry_WarnRejectAndCompatibility/reject_denies_before_persistence"} +{"Time":"2026-07-11T03:35:56.6671508+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryDomainRegistry_WarnRejectAndCompatibility/reject_denies_before_persistence","Output":"=== RUN TestStoreMemoryDomainRegistry_WarnRejectAndCompatibility/reject_denies_before_persistence\n"} +{"Time":"2026-07-11T03:35:56.6826519+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryDomainRegistry_WarnRejectAndCompatibility/reject_denies_before_persistence","Output":"--- PASS: TestStoreMemoryDomainRegistry_WarnRejectAndCompatibility/reject_denies_before_persistence (0.02s)\n"} +{"Time":"2026-07-11T03:35:56.6826519+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryDomainRegistry_WarnRejectAndCompatibility/reject_denies_before_persistence","Elapsed":0.02} +{"Time":"2026-07-11T03:35:56.7041504+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryDomainRegistry_WarnRejectAndCompatibility","Output":"--- PASS: TestStoreMemoryDomainRegistry_WarnRejectAndCompatibility (0.22s)\n"} +{"Time":"2026-07-11T03:35:56.7041504+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryDomainRegistry_WarnRejectAndCompatibility","Elapsed":0.22} +{"Time":"2026-07-11T03:35:56.7041504+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryDomainRegistry_AuditFailureBlocksBeforePersistence"} +{"Time":"2026-07-11T03:35:56.7041504+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryDomainRegistry_AuditFailureBlocksBeforePersistence","Output":"=== RUN TestStoreMemoryDomainRegistry_AuditFailureBlocksBeforePersistence\n"} +{"Time":"2026-07-11T03:35:56.8286522+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryDomainRegistry_AuditFailureBlocksBeforePersistence","Output":"{\"level\":\"debug\",\"connections\":1,\"time\":\"2026-07-11T03:35:56+03:00\",\"message\":\"Connection pool warmed\"}\n"} +{"Time":"2026-07-11T03:35:56.8446563+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryDomainRegistry_AuditFailureBlocksBeforePersistence","Output":"--- PASS: TestStoreMemoryDomainRegistry_AuditFailureBlocksBeforePersistence (0.14s)\n"} +{"Time":"2026-07-11T03:35:56.8446563+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryDomainRegistry_AuditFailureBlocksBeforePersistence","Elapsed":0.14} +{"Time":"2026-07-11T03:35:56.8446563+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryDomainRegistry_RejectionRunsBeforeSupersedeMutation"} +{"Time":"2026-07-11T03:35:56.8446563+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryDomainRegistry_RejectionRunsBeforeSupersedeMutation","Output":"=== RUN TestStoreMemoryDomainRegistry_RejectionRunsBeforeSupersedeMutation\n"} +{"Time":"2026-07-11T03:35:56.9706838+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryDomainRegistry_RejectionRunsBeforeSupersedeMutation","Output":"{\"level\":\"debug\",\"connections\":1,\"time\":\"2026-07-11T03:35:56+03:00\",\"message\":\"Connection pool warmed\"}\n"} +{"Time":"2026-07-11T03:35:57.0227165+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryDomainRegistry_RejectionRunsBeforeSupersedeMutation","Output":"--- PASS: TestStoreMemoryDomainRegistry_RejectionRunsBeforeSupersedeMutation (0.18s)\n"} +{"Time":"2026-07-11T03:35:57.0227165+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryDomainRegistry_RejectionRunsBeforeSupersedeMutation","Elapsed":0.18} +{"Time":"2026-07-11T03:35:57.0227165+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryDomainRegistry_InvalidWriterKindRejectsBeforePersistence"} +{"Time":"2026-07-11T03:35:57.0227165+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryDomainRegistry_InvalidWriterKindRejectsBeforePersistence","Output":"=== RUN TestStoreMemoryDomainRegistry_InvalidWriterKindRejectsBeforePersistence\n"} +{"Time":"2026-07-11T03:35:57.1386979+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryDomainRegistry_InvalidWriterKindRejectsBeforePersistence","Output":"{\"level\":\"debug\",\"connections\":1,\"time\":\"2026-07-11T03:35:57+03:00\",\"message\":\"Connection pool warmed\"}\n"} +{"Time":"2026-07-11T03:35:57.1507313+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryDomainRegistry_InvalidWriterKindRejectsBeforePersistence","Output":"--- PASS: TestStoreMemoryDomainRegistry_InvalidWriterKindRejectsBeforePersistence (0.13s)\n"} +{"Time":"2026-07-11T03:35:57.1507313+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryDomainRegistry_InvalidWriterKindRejectsBeforePersistence","Elapsed":0.13} +{"Time":"2026-07-11T03:35:57.1507313+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEditMemory_HardLimitRejected"} +{"Time":"2026-07-11T03:35:57.1507313+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEditMemory_HardLimitRejected","Output":"=== RUN TestEditMemory_HardLimitRejected\n"} +{"Time":"2026-07-11T03:35:57.1512306+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEditMemory_HardLimitRejected","Output":"--- PASS: TestEditMemory_HardLimitRejected (0.00s)\n"} +{"Time":"2026-07-11T03:35:57.1512306+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEditMemory_HardLimitRejected","Elapsed":0} +{"Time":"2026-07-11T03:35:57.1512306+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEditMemory_SoftLimitTruncates"} +{"Time":"2026-07-11T03:35:57.1512306+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEditMemory_SoftLimitTruncates","Output":"=== RUN TestEditMemory_SoftLimitTruncates\n"} +{"Time":"2026-07-11T03:35:57.1517302+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEditMemory_SoftLimitTruncates","Output":"{\"level\":\"debug\",\"soft_limit\":1000,\"time\":\"2026-07-11T03:35:57+03:00\",\"message\":\"edit_memory: content truncated to soft limit\"}\n"} +{"Time":"2026-07-11T03:35:57.1517302+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEditMemory_SoftLimitTruncates","Output":"--- PASS: TestEditMemory_SoftLimitTruncates (0.00s)\n"} +{"Time":"2026-07-11T03:35:57.1517302+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEditMemory_SoftLimitTruncates","Elapsed":0} +{"Time":"2026-07-11T03:35:57.1517302+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEditMemory_SecretRedacted"} +{"Time":"2026-07-11T03:35:57.1517302+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEditMemory_SecretRedacted","Output":"=== RUN TestEditMemory_SecretRedacted\n"} +{"Time":"2026-07-11T03:35:57.1517302+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEditMemory_SecretRedacted","Output":"{\"level\":\"warn\",\"time\":\"2026-07-11T03:35:57+03:00\",\"message\":\"edit_memory: content contains secrets — redacting before storage\"}\n"} +{"Time":"2026-07-11T03:35:57.1517302+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEditMemory_SecretRedacted","Output":"--- PASS: TestEditMemory_SecretRedacted (0.00s)\n"} +{"Time":"2026-07-11T03:35:57.152236+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEditMemory_SecretRedacted","Elapsed":0} +{"Time":"2026-07-11T03:35:57.152236+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEditMemory_CrossProjectDenied"} +{"Time":"2026-07-11T03:35:57.152236+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEditMemory_CrossProjectDenied","Output":"=== RUN TestEditMemory_CrossProjectDenied\n"} +{"Time":"2026-07-11T03:35:57.152236+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEditMemory_CrossProjectDenied","Output":"--- PASS: TestEditMemory_CrossProjectDenied (0.00s)\n"} +{"Time":"2026-07-11T03:35:57.152236+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEditMemory_CrossProjectDenied","Elapsed":0} +{"Time":"2026-07-11T03:35:57.152236+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEditMemory_SameProjectAllowed"} +{"Time":"2026-07-11T03:35:57.152236+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEditMemory_SameProjectAllowed","Output":"=== RUN TestEditMemory_SameProjectAllowed\n"} +{"Time":"2026-07-11T03:35:57.152236+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEditMemory_SameProjectAllowed","Output":"--- PASS: TestEditMemory_SameProjectAllowed (0.00s)\n"} +{"Time":"2026-07-11T03:35:57.152236+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEditMemory_SameProjectAllowed","Elapsed":0} +{"Time":"2026-07-11T03:35:57.152236+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEditMemory_DomainOwnedCrossPrincipalDenied"} +{"Time":"2026-07-11T03:35:57.152236+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEditMemory_DomainOwnedCrossPrincipalDenied","Output":"=== RUN TestEditMemory_DomainOwnedCrossPrincipalDenied\n"} +{"Time":"2026-07-11T03:35:57.1527309+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEditMemory_DomainOwnedCrossPrincipalDenied","Output":"--- PASS: TestEditMemory_DomainOwnedCrossPrincipalDenied (0.00s)\n"} +{"Time":"2026-07-11T03:35:57.1527309+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEditMemory_DomainOwnedCrossPrincipalDenied","Elapsed":0} +{"Time":"2026-07-11T03:35:57.1527309+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEditMemory_CrossProjectAllowedWhenEnforcementOff"} +{"Time":"2026-07-11T03:35:57.1527309+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEditMemory_CrossProjectAllowedWhenEnforcementOff","Output":"=== RUN TestEditMemory_CrossProjectAllowedWhenEnforcementOff\n"} +{"Time":"2026-07-11T03:35:57.1532301+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEditMemory_CrossProjectAllowedWhenEnforcementOff","Output":"--- PASS: TestEditMemory_CrossProjectAllowedWhenEnforcementOff (0.00s)\n"} +{"Time":"2026-07-11T03:35:57.1532301+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEditMemory_CrossProjectAllowedWhenEnforcementOff","Elapsed":0} +{"Time":"2026-07-11T03:35:57.1532301+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEditMemory_AuditSourceSessionIDFromContext"} +{"Time":"2026-07-11T03:35:57.1532301+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEditMemory_AuditSourceSessionIDFromContext","Output":"=== RUN TestEditMemory_AuditSourceSessionIDFromContext\n"} +{"Time":"2026-07-11T03:35:57.158729+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEditMemory_AuditSourceSessionIDFromContext","Output":"--- PASS: TestEditMemory_AuditSourceSessionIDFromContext (0.01s)\n"} +{"Time":"2026-07-11T03:35:57.158729+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEditMemory_AuditSourceSessionIDFromContext","Elapsed":0.01} +{"Time":"2026-07-11T03:35:57.158729+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEditMemory_AuditSourceSessionIDEmptyWhenNoSession"} +{"Time":"2026-07-11T03:35:57.158729+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEditMemory_AuditSourceSessionIDEmptyWhenNoSession","Output":"=== RUN TestEditMemory_AuditSourceSessionIDEmptyWhenNoSession\n"} +{"Time":"2026-07-11T03:35:57.1642295+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEditMemory_AuditSourceSessionIDEmptyWhenNoSession","Output":"--- PASS: TestEditMemory_AuditSourceSessionIDEmptyWhenNoSession (0.01s)\n"} +{"Time":"2026-07-11T03:35:57.1642295+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEditMemory_AuditSourceSessionIDEmptyWhenNoSession","Elapsed":0.01} +{"Time":"2026-07-11T03:35:57.1642295+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEditMemory_EmptyProjectContextDeniedWhenEnforced"} +{"Time":"2026-07-11T03:35:57.1642295+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEditMemory_EmptyProjectContextDeniedWhenEnforced","Output":"=== RUN TestEditMemory_EmptyProjectContextDeniedWhenEnforced\n"} +{"Time":"2026-07-11T03:35:57.1642295+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEditMemory_EmptyProjectContextDeniedWhenEnforced","Output":"--- PASS: TestEditMemory_EmptyProjectContextDeniedWhenEnforced (0.00s)\n"} +{"Time":"2026-07-11T03:35:57.1642295+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEditMemory_EmptyProjectContextDeniedWhenEnforced","Elapsed":0} +{"Time":"2026-07-11T03:35:57.1642295+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEditMemory_TagsAbsent_KeepsExisting"} +{"Time":"2026-07-11T03:35:57.1642295+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEditMemory_TagsAbsent_KeepsExisting","Output":"=== RUN TestEditMemory_TagsAbsent_KeepsExisting\n"} +{"Time":"2026-07-11T03:35:57.1647289+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEditMemory_TagsAbsent_KeepsExisting","Output":"--- PASS: TestEditMemory_TagsAbsent_KeepsExisting (0.00s)\n"} +{"Time":"2026-07-11T03:35:57.1647289+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEditMemory_TagsAbsent_KeepsExisting","Elapsed":0} +{"Time":"2026-07-11T03:35:57.1647289+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEditMemory_TagsExplicitEmpty_ClearsTags"} +{"Time":"2026-07-11T03:35:57.1647289+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEditMemory_TagsExplicitEmpty_ClearsTags","Output":"=== RUN TestEditMemory_TagsExplicitEmpty_ClearsTags\n"} +{"Time":"2026-07-11T03:35:57.1647289+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEditMemory_TagsExplicitEmpty_ClearsTags","Output":"--- PASS: TestEditMemory_TagsExplicitEmpty_ClearsTags (0.00s)\n"} +{"Time":"2026-07-11T03:35:57.1647289+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEditMemory_TagsExplicitEmpty_ClearsTags","Elapsed":0} +{"Time":"2026-07-11T03:35:57.1647289+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEditMemory_TagsNonEmpty_ReplacesTags"} +{"Time":"2026-07-11T03:35:57.1647289+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEditMemory_TagsNonEmpty_ReplacesTags","Output":"=== RUN TestEditMemory_TagsNonEmpty_ReplacesTags\n"} +{"Time":"2026-07-11T03:35:57.1647289+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEditMemory_TagsNonEmpty_ReplacesTags","Output":"--- PASS: TestEditMemory_TagsNonEmpty_ReplacesTags (0.00s)\n"} +{"Time":"2026-07-11T03:35:57.1647289+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEditMemory_TagsNonEmpty_ReplacesTags","Elapsed":0} +{"Time":"2026-07-11T03:35:57.1647289+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRunAuditAsync_PanicRecovered"} +{"Time":"2026-07-11T03:35:57.1647289+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRunAuditAsync_PanicRecovered","Output":"=== RUN TestRunAuditAsync_PanicRecovered\n"} +{"Time":"2026-07-11T03:35:57.1652298+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRunAuditAsync_PanicRecovered","Output":"{\"level\":\"error\",\"audit_label\":\"test-panic\",\"memory_id\":99,\"panic\":\"simulated audit panic\",\"time\":\"2026-07-11T03:35:57+03:00\",\"message\":\"audit: goroutine panic recovered\"}\n"} +{"Time":"2026-07-11T03:35:57.2147978+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRunAuditAsync_PanicRecovered","Output":"--- PASS: TestRunAuditAsync_PanicRecovered (0.05s)\n"} +{"Time":"2026-07-11T03:35:57.2147978+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRunAuditAsync_PanicRecovered","Elapsed":0.05} +{"Time":"2026-07-11T03:35:57.2147978+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRunAuditAsync_ErrorLogged"} +{"Time":"2026-07-11T03:35:57.2147978+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRunAuditAsync_ErrorLogged","Output":"=== RUN TestRunAuditAsync_ErrorLogged\n"} +{"Time":"2026-07-11T03:35:57.2147978+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRunAuditAsync_ErrorLogged","Output":"{\"level\":\"error\",\"error\":\"simulated db error\",\"audit_label\":\"test-error\",\"memory_id\":88,\"time\":\"2026-07-11T03:35:57+03:00\",\"message\":\"audit: async write failed\"}\n"} +{"Time":"2026-07-11T03:35:57.2650569+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRunAuditAsync_ErrorLogged","Output":"--- PASS: TestRunAuditAsync_ErrorLogged (0.05s)\n"} +{"Time":"2026-07-11T03:35:57.2650569+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRunAuditAsync_ErrorLogged","Elapsed":0.05} +{"Time":"2026-07-11T03:35:57.2650569+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestMemoryStoreSignificanceUpdaterPersistsChangedFields"} +{"Time":"2026-07-11T03:35:57.2650569+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestMemoryStoreSignificanceUpdaterPersistsChangedFields","Output":"=== RUN TestMemoryStoreSignificanceUpdaterPersistsChangedFields\n"} +{"Time":"2026-07-11T03:35:57.2650569+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestMemoryStoreSignificanceUpdaterPersistsChangedFields/useful_persists_alpha_citation_and_streak"} +{"Time":"2026-07-11T03:35:57.2650569+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestMemoryStoreSignificanceUpdaterPersistsChangedFields/useful_persists_alpha_citation_and_streak","Output":"=== RUN TestMemoryStoreSignificanceUpdaterPersistsChangedFields/useful_persists_alpha_citation_and_streak\n"} +{"Time":"2026-07-11T03:35:57.2650569+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestMemoryStoreSignificanceUpdaterPersistsChangedFields/useful_persists_alpha_citation_and_streak","Output":"--- PASS: TestMemoryStoreSignificanceUpdaterPersistsChangedFields/useful_persists_alpha_citation_and_streak (0.00s)\n"} +{"Time":"2026-07-11T03:35:57.2650569+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestMemoryStoreSignificanceUpdaterPersistsChangedFields/useful_persists_alpha_citation_and_streak","Elapsed":0} +{"Time":"2026-07-11T03:35:57.2650569+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestMemoryStoreSignificanceUpdaterPersistsChangedFields/not_useful_persists_beta_and_resets_streak"} +{"Time":"2026-07-11T03:35:57.2650569+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestMemoryStoreSignificanceUpdaterPersistsChangedFields/not_useful_persists_beta_and_resets_streak","Output":"=== RUN TestMemoryStoreSignificanceUpdaterPersistsChangedFields/not_useful_persists_beta_and_resets_streak\n"} +{"Time":"2026-07-11T03:35:57.2650569+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestMemoryStoreSignificanceUpdaterPersistsChangedFields/not_useful_persists_beta_and_resets_streak","Output":"--- PASS: TestMemoryStoreSignificanceUpdaterPersistsChangedFields/not_useful_persists_beta_and_resets_streak (0.00s)\n"} +{"Time":"2026-07-11T03:35:57.2650569+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestMemoryStoreSignificanceUpdaterPersistsChangedFields/not_useful_persists_beta_and_resets_streak","Elapsed":0} +{"Time":"2026-07-11T03:35:57.2650569+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestMemoryStoreSignificanceUpdaterPersistsChangedFields","Output":"--- PASS: TestMemoryStoreSignificanceUpdaterPersistsChangedFields (0.00s)\n"} +{"Time":"2026-07-11T03:35:57.2650569+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestMemoryStoreSignificanceUpdaterPersistsChangedFields","Elapsed":0} +{"Time":"2026-07-11T03:35:57.2650569+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceToolAdvertisedOnlyWhenS6FlagAndUpdaterArePresent"} +{"Time":"2026-07-11T03:35:57.2650569+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceToolAdvertisedOnlyWhenS6FlagAndUpdaterArePresent","Output":"=== RUN TestRateMemorySignificanceToolAdvertisedOnlyWhenS6FlagAndUpdaterArePresent\n"} +{"Time":"2026-07-11T03:35:57.2650569+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceToolAdvertisedOnlyWhenS6FlagAndUpdaterArePresent/master_off_s6_on_updater_present"} +{"Time":"2026-07-11T03:35:57.2650569+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceToolAdvertisedOnlyWhenS6FlagAndUpdaterArePresent/master_off_s6_on_updater_present","Output":"=== RUN TestRateMemorySignificanceToolAdvertisedOnlyWhenS6FlagAndUpdaterArePresent/master_off_s6_on_updater_present\n"} +{"Time":"2026-07-11T03:35:57.2655575+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceToolAdvertisedOnlyWhenS6FlagAndUpdaterArePresent/master_off_s6_on_updater_present","Output":"--- PASS: TestRateMemorySignificanceToolAdvertisedOnlyWhenS6FlagAndUpdaterArePresent/master_off_s6_on_updater_present (0.00s)\n"} +{"Time":"2026-07-11T03:35:57.2655575+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceToolAdvertisedOnlyWhenS6FlagAndUpdaterArePresent/master_off_s6_on_updater_present","Elapsed":0} +{"Time":"2026-07-11T03:35:57.2655575+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceToolAdvertisedOnlyWhenS6FlagAndUpdaterArePresent/master_on_s6_off_updater_present"} +{"Time":"2026-07-11T03:35:57.2655575+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceToolAdvertisedOnlyWhenS6FlagAndUpdaterArePresent/master_on_s6_off_updater_present","Output":"=== RUN TestRateMemorySignificanceToolAdvertisedOnlyWhenS6FlagAndUpdaterArePresent/master_on_s6_off_updater_present\n"} +{"Time":"2026-07-11T03:35:57.2655575+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceToolAdvertisedOnlyWhenS6FlagAndUpdaterArePresent/master_on_s6_off_updater_present","Output":"--- PASS: TestRateMemorySignificanceToolAdvertisedOnlyWhenS6FlagAndUpdaterArePresent/master_on_s6_off_updater_present (0.00s)\n"} +{"Time":"2026-07-11T03:35:57.2655575+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceToolAdvertisedOnlyWhenS6FlagAndUpdaterArePresent/master_on_s6_off_updater_present","Elapsed":0} +{"Time":"2026-07-11T03:35:57.2655575+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceToolAdvertisedOnlyWhenS6FlagAndUpdaterArePresent/master_on_s6_on_updater_missing"} +{"Time":"2026-07-11T03:35:57.2655575+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceToolAdvertisedOnlyWhenS6FlagAndUpdaterArePresent/master_on_s6_on_updater_missing","Output":"=== RUN TestRateMemorySignificanceToolAdvertisedOnlyWhenS6FlagAndUpdaterArePresent/master_on_s6_on_updater_missing\n"} +{"Time":"2026-07-11T03:35:57.2655575+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceToolAdvertisedOnlyWhenS6FlagAndUpdaterArePresent/master_on_s6_on_updater_missing","Output":"--- PASS: TestRateMemorySignificanceToolAdvertisedOnlyWhenS6FlagAndUpdaterArePresent/master_on_s6_on_updater_missing (0.00s)\n"} +{"Time":"2026-07-11T03:35:57.2655575+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceToolAdvertisedOnlyWhenS6FlagAndUpdaterArePresent/master_on_s6_on_updater_missing","Elapsed":0} +{"Time":"2026-07-11T03:35:57.2655575+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceToolAdvertisedOnlyWhenS6FlagAndUpdaterArePresent/master_on_s6_on_updater_present"} +{"Time":"2026-07-11T03:35:57.2655575+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceToolAdvertisedOnlyWhenS6FlagAndUpdaterArePresent/master_on_s6_on_updater_present","Output":"=== RUN TestRateMemorySignificanceToolAdvertisedOnlyWhenS6FlagAndUpdaterArePresent/master_on_s6_on_updater_present\n"} +{"Time":"2026-07-11T03:35:57.2660575+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceToolAdvertisedOnlyWhenS6FlagAndUpdaterArePresent/master_on_s6_on_updater_present","Output":"--- PASS: TestRateMemorySignificanceToolAdvertisedOnlyWhenS6FlagAndUpdaterArePresent/master_on_s6_on_updater_present (0.00s)\n"} +{"Time":"2026-07-11T03:35:57.2660575+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceToolAdvertisedOnlyWhenS6FlagAndUpdaterArePresent/master_on_s6_on_updater_present","Elapsed":0} +{"Time":"2026-07-11T03:35:57.2660575+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceToolAdvertisedOnlyWhenS6FlagAndUpdaterArePresent","Output":"--- PASS: TestRateMemorySignificanceToolAdvertisedOnlyWhenS6FlagAndUpdaterArePresent (0.00s)\n"} +{"Time":"2026-07-11T03:35:57.2660575+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceToolAdvertisedOnlyWhenS6FlagAndUpdaterArePresent","Elapsed":0} +{"Time":"2026-07-11T03:35:57.2660575+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceToolAdvertisedWithDedicatedSchema"} +{"Time":"2026-07-11T03:35:57.2660575+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceToolAdvertisedWithDedicatedSchema","Output":"=== RUN TestRateMemorySignificanceToolAdvertisedWithDedicatedSchema\n"} +{"Time":"2026-07-11T03:35:57.2660575+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceToolAdvertisedWithDedicatedSchema","Output":"--- PASS: TestRateMemorySignificanceToolAdvertisedWithDedicatedSchema (0.00s)\n"} +{"Time":"2026-07-11T03:35:57.2665573+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceToolAdvertisedWithDedicatedSchema","Elapsed":0} +{"Time":"2026-07-11T03:35:57.2665573+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceToolCallUpdatesLearningForUsefulAndNotUseful"} +{"Time":"2026-07-11T03:35:57.2665573+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceToolCallUpdatesLearningForUsefulAndNotUseful","Output":"=== RUN TestRateMemorySignificanceToolCallUpdatesLearningForUsefulAndNotUseful\n"} +{"Time":"2026-07-11T03:35:57.2665573+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceToolCallUpdatesLearningForUsefulAndNotUseful/useful"} +{"Time":"2026-07-11T03:35:57.2665573+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceToolCallUpdatesLearningForUsefulAndNotUseful/useful","Output":"=== RUN TestRateMemorySignificanceToolCallUpdatesLearningForUsefulAndNotUseful/useful\n"} +{"Time":"2026-07-11T03:35:57.2665573+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceToolCallUpdatesLearningForUsefulAndNotUseful/useful","Output":"--- PASS: TestRateMemorySignificanceToolCallUpdatesLearningForUsefulAndNotUseful/useful (0.00s)\n"} +{"Time":"2026-07-11T03:35:57.2665573+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceToolCallUpdatesLearningForUsefulAndNotUseful/useful","Elapsed":0} +{"Time":"2026-07-11T03:35:57.2665573+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceToolCallUpdatesLearningForUsefulAndNotUseful/not_useful"} +{"Time":"2026-07-11T03:35:57.2665573+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceToolCallUpdatesLearningForUsefulAndNotUseful/not_useful","Output":"=== RUN TestRateMemorySignificanceToolCallUpdatesLearningForUsefulAndNotUseful/not_useful\n"} +{"Time":"2026-07-11T03:35:57.2665573+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceToolCallUpdatesLearningForUsefulAndNotUseful/not_useful","Output":"--- PASS: TestRateMemorySignificanceToolCallUpdatesLearningForUsefulAndNotUseful/not_useful (0.00s)\n"} +{"Time":"2026-07-11T03:35:57.2665573+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceToolCallUpdatesLearningForUsefulAndNotUseful/not_useful","Elapsed":0} +{"Time":"2026-07-11T03:35:57.2665573+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceToolCallUpdatesLearningForUsefulAndNotUseful","Output":"--- PASS: TestRateMemorySignificanceToolCallUpdatesLearningForUsefulAndNotUseful (0.00s)\n"} +{"Time":"2026-07-11T03:35:57.2665573+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceToolCallUpdatesLearningForUsefulAndNotUseful","Elapsed":0} +{"Time":"2026-07-11T03:35:57.2665573+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceDirectCallFailsClosedWhenS6Disabled"} +{"Time":"2026-07-11T03:35:57.2665573+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceDirectCallFailsClosedWhenS6Disabled","Output":"=== RUN TestRateMemorySignificanceDirectCallFailsClosedWhenS6Disabled\n"} +{"Time":"2026-07-11T03:35:57.2665573+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceDirectCallFailsClosedWhenS6Disabled/master_off_s6_on_updater_present"} +{"Time":"2026-07-11T03:35:57.2665573+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceDirectCallFailsClosedWhenS6Disabled/master_off_s6_on_updater_present","Output":"=== RUN TestRateMemorySignificanceDirectCallFailsClosedWhenS6Disabled/master_off_s6_on_updater_present\n"} +{"Time":"2026-07-11T03:35:57.2665573+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceDirectCallFailsClosedWhenS6Disabled/master_off_s6_on_updater_present","Output":"--- PASS: TestRateMemorySignificanceDirectCallFailsClosedWhenS6Disabled/master_off_s6_on_updater_present (0.00s)\n"} +{"Time":"2026-07-11T03:35:57.2670588+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceDirectCallFailsClosedWhenS6Disabled/master_off_s6_on_updater_present","Elapsed":0} +{"Time":"2026-07-11T03:35:57.2670588+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceDirectCallFailsClosedWhenS6Disabled/master_on_s6_off_updater_present"} +{"Time":"2026-07-11T03:35:57.2670588+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceDirectCallFailsClosedWhenS6Disabled/master_on_s6_off_updater_present","Output":"=== RUN TestRateMemorySignificanceDirectCallFailsClosedWhenS6Disabled/master_on_s6_off_updater_present\n"} +{"Time":"2026-07-11T03:35:57.2670588+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceDirectCallFailsClosedWhenS6Disabled/master_on_s6_off_updater_present","Output":"--- PASS: TestRateMemorySignificanceDirectCallFailsClosedWhenS6Disabled/master_on_s6_off_updater_present (0.00s)\n"} +{"Time":"2026-07-11T03:35:57.2670588+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceDirectCallFailsClosedWhenS6Disabled/master_on_s6_off_updater_present","Elapsed":0} +{"Time":"2026-07-11T03:35:57.2670588+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceDirectCallFailsClosedWhenS6Disabled","Output":"--- PASS: TestRateMemorySignificanceDirectCallFailsClosedWhenS6Disabled (0.00s)\n"} +{"Time":"2026-07-11T03:35:57.2670588+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceDirectCallFailsClosedWhenS6Disabled","Elapsed":0} +{"Time":"2026-07-11T03:35:57.2670588+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceRejectsInvalidIDWithoutWrite"} +{"Time":"2026-07-11T03:35:57.2670588+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceRejectsInvalidIDWithoutWrite","Output":"=== RUN TestRateMemorySignificanceRejectsInvalidIDWithoutWrite\n"} +{"Time":"2026-07-11T03:35:57.2670588+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceRejectsInvalidIDWithoutWrite/missing_id"} +{"Time":"2026-07-11T03:35:57.2670588+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceRejectsInvalidIDWithoutWrite/missing_id","Output":"=== RUN TestRateMemorySignificanceRejectsInvalidIDWithoutWrite/missing_id\n"} +{"Time":"2026-07-11T03:35:57.2670588+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceRejectsInvalidIDWithoutWrite/missing_id","Output":"--- PASS: TestRateMemorySignificanceRejectsInvalidIDWithoutWrite/missing_id (0.00s)\n"} +{"Time":"2026-07-11T03:35:57.2670588+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceRejectsInvalidIDWithoutWrite/missing_id","Elapsed":0} +{"Time":"2026-07-11T03:35:57.2670588+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceRejectsInvalidIDWithoutWrite/zero_id"} +{"Time":"2026-07-11T03:35:57.2670588+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceRejectsInvalidIDWithoutWrite/zero_id","Output":"=== RUN TestRateMemorySignificanceRejectsInvalidIDWithoutWrite/zero_id\n"} +{"Time":"2026-07-11T03:35:57.2670588+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceRejectsInvalidIDWithoutWrite/zero_id","Output":"--- PASS: TestRateMemorySignificanceRejectsInvalidIDWithoutWrite/zero_id (0.00s)\n"} +{"Time":"2026-07-11T03:35:57.2670588+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceRejectsInvalidIDWithoutWrite/zero_id","Elapsed":0} +{"Time":"2026-07-11T03:35:57.2670588+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceRejectsInvalidIDWithoutWrite/negative_id"} +{"Time":"2026-07-11T03:35:57.2670588+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceRejectsInvalidIDWithoutWrite/negative_id","Output":"=== RUN TestRateMemorySignificanceRejectsInvalidIDWithoutWrite/negative_id\n"} +{"Time":"2026-07-11T03:35:57.2670588+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceRejectsInvalidIDWithoutWrite/negative_id","Output":"--- PASS: TestRateMemorySignificanceRejectsInvalidIDWithoutWrite/negative_id (0.00s)\n"} +{"Time":"2026-07-11T03:35:57.2670588+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceRejectsInvalidIDWithoutWrite/negative_id","Elapsed":0} +{"Time":"2026-07-11T03:35:57.2670588+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceRejectsInvalidIDWithoutWrite","Output":"--- PASS: TestRateMemorySignificanceRejectsInvalidIDWithoutWrite (0.00s)\n"} +{"Time":"2026-07-11T03:35:57.2670588+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceRejectsInvalidIDWithoutWrite","Elapsed":0} +{"Time":"2026-07-11T03:35:57.2670588+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceRejectsInvalidRatingWithoutWrite"} +{"Time":"2026-07-11T03:35:57.2670588+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceRejectsInvalidRatingWithoutWrite","Output":"=== RUN TestRateMemorySignificanceRejectsInvalidRatingWithoutWrite\n"} +{"Time":"2026-07-11T03:35:57.2670588+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceRejectsInvalidRatingWithoutWrite/missing_rating"} +{"Time":"2026-07-11T03:35:57.2670588+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceRejectsInvalidRatingWithoutWrite/missing_rating","Output":"=== RUN TestRateMemorySignificanceRejectsInvalidRatingWithoutWrite/missing_rating\n"} +{"Time":"2026-07-11T03:35:57.2670588+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceRejectsInvalidRatingWithoutWrite/missing_rating","Output":"--- PASS: TestRateMemorySignificanceRejectsInvalidRatingWithoutWrite/missing_rating (0.00s)\n"} +{"Time":"2026-07-11T03:35:57.2670588+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceRejectsInvalidRatingWithoutWrite/missing_rating","Elapsed":0} +{"Time":"2026-07-11T03:35:57.2670588+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceRejectsInvalidRatingWithoutWrite/unknown_rating"} +{"Time":"2026-07-11T03:35:57.2670588+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceRejectsInvalidRatingWithoutWrite/unknown_rating","Output":"=== RUN TestRateMemorySignificanceRejectsInvalidRatingWithoutWrite/unknown_rating\n"} +{"Time":"2026-07-11T03:35:57.2675564+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceRejectsInvalidRatingWithoutWrite/unknown_rating","Output":"--- PASS: TestRateMemorySignificanceRejectsInvalidRatingWithoutWrite/unknown_rating (0.00s)\n"} +{"Time":"2026-07-11T03:35:57.2675564+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceRejectsInvalidRatingWithoutWrite/unknown_rating","Elapsed":0} +{"Time":"2026-07-11T03:35:57.2675564+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceRejectsInvalidRatingWithoutWrite/empty_rating"} +{"Time":"2026-07-11T03:35:57.2675564+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceRejectsInvalidRatingWithoutWrite/empty_rating","Output":"=== RUN TestRateMemorySignificanceRejectsInvalidRatingWithoutWrite/empty_rating\n"} +{"Time":"2026-07-11T03:35:57.2675564+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceRejectsInvalidRatingWithoutWrite/empty_rating","Output":"--- PASS: TestRateMemorySignificanceRejectsInvalidRatingWithoutWrite/empty_rating (0.00s)\n"} +{"Time":"2026-07-11T03:35:57.2675564+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceRejectsInvalidRatingWithoutWrite/empty_rating","Elapsed":0} +{"Time":"2026-07-11T03:35:57.2675564+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceRejectsInvalidRatingWithoutWrite","Output":"--- PASS: TestRateMemorySignificanceRejectsInvalidRatingWithoutWrite (0.00s)\n"} +{"Time":"2026-07-11T03:35:57.2675564+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceRejectsInvalidRatingWithoutWrite","Elapsed":0} +{"Time":"2026-07-11T03:35:57.2675564+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceMissingUpdaterFailsExplicitly"} +{"Time":"2026-07-11T03:35:57.2675564+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceMissingUpdaterFailsExplicitly","Output":"=== RUN TestRateMemorySignificanceMissingUpdaterFailsExplicitly\n"} +{"Time":"2026-07-11T03:35:57.2675564+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceMissingUpdaterFailsExplicitly","Output":"--- PASS: TestRateMemorySignificanceMissingUpdaterFailsExplicitly (0.00s)\n"} +{"Time":"2026-07-11T03:35:57.2675564+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceMissingUpdaterFailsExplicitly","Elapsed":0} +{"Time":"2026-07-11T03:35:57.2675564+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceLegacyRatePathsRemainUnsupported"} +{"Time":"2026-07-11T03:35:57.2675564+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceLegacyRatePathsRemainUnsupported","Output":"=== RUN TestRateMemorySignificanceLegacyRatePathsRemainUnsupported\n"} +{"Time":"2026-07-11T03:35:57.2675564+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceLegacyRatePathsRemainUnsupported/legacy_rate_memory_tool"} +{"Time":"2026-07-11T03:35:57.2675564+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceLegacyRatePathsRemainUnsupported/legacy_rate_memory_tool","Output":"=== RUN TestRateMemorySignificanceLegacyRatePathsRemainUnsupported/legacy_rate_memory_tool\n"} +{"Time":"2026-07-11T03:35:57.2675564+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceLegacyRatePathsRemainUnsupported/legacy_rate_memory_tool","Output":"--- PASS: TestRateMemorySignificanceLegacyRatePathsRemainUnsupported/legacy_rate_memory_tool (0.00s)\n"} +{"Time":"2026-07-11T03:35:57.2675564+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceLegacyRatePathsRemainUnsupported/legacy_rate_memory_tool","Elapsed":0} +{"Time":"2026-07-11T03:35:57.2675564+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceLegacyRatePathsRemainUnsupported/consolidated_feedback_rate_action"} +{"Time":"2026-07-11T03:35:57.2675564+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceLegacyRatePathsRemainUnsupported/consolidated_feedback_rate_action","Output":"=== RUN TestRateMemorySignificanceLegacyRatePathsRemainUnsupported/consolidated_feedback_rate_action\n"} +{"Time":"2026-07-11T03:35:57.2675564+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceLegacyRatePathsRemainUnsupported/consolidated_feedback_rate_action","Output":"--- PASS: TestRateMemorySignificanceLegacyRatePathsRemainUnsupported/consolidated_feedback_rate_action (0.00s)\n"} +{"Time":"2026-07-11T03:35:57.2675564+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceLegacyRatePathsRemainUnsupported/consolidated_feedback_rate_action","Elapsed":0} +{"Time":"2026-07-11T03:35:57.2675564+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceLegacyRatePathsRemainUnsupported","Output":"--- PASS: TestRateMemorySignificanceLegacyRatePathsRemainUnsupported (0.00s)\n"} +{"Time":"2026-07-11T03:35:57.2675564+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceLegacyRatePathsRemainUnsupported","Elapsed":0} +{"Time":"2026-07-11T03:35:57.2675564+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryToolSchema_T005"} +{"Time":"2026-07-11T03:35:57.2675564+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryToolSchema_T005","Output":"=== RUN TestStoreMemoryToolSchema_T005\n"} +{"Time":"2026-07-11T03:35:57.2675564+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryToolSchema_T005","Output":"=== PAUSE TestStoreMemoryToolSchema_T005\n"} +{"Time":"2026-07-11T03:35:57.2675564+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryToolSchema_T005"} +{"Time":"2026-07-11T03:35:57.2675564+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryToolSchema_T005"} +{"Time":"2026-07-11T03:35:57.2675564+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryToolSchema_T005","Output":"=== RUN TestRecallMemoryToolSchema_T005\n"} +{"Time":"2026-07-11T03:35:57.2675564+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryToolSchema_T005","Output":"=== PAUSE TestRecallMemoryToolSchema_T005\n"} +{"Time":"2026-07-11T03:35:57.2675564+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryToolSchema_T005"} +{"Time":"2026-07-11T03:35:57.2675564+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemory_InvalidPrivacyScope_StructuredError"} +{"Time":"2026-07-11T03:35:57.2675564+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemory_InvalidPrivacyScope_StructuredError","Output":"=== RUN TestStoreMemory_InvalidPrivacyScope_StructuredError\n"} +{"Time":"2026-07-11T03:35:57.2675564+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemory_InvalidPrivacyScope_StructuredError","Output":"--- PASS: TestStoreMemory_InvalidPrivacyScope_StructuredError (0.00s)\n"} +{"Time":"2026-07-11T03:35:57.2675564+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemory_InvalidPrivacyScope_StructuredError","Elapsed":0} +{"Time":"2026-07-11T03:35:57.2675564+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemory_InvalidIncludeScopes_StructuredError"} +{"Time":"2026-07-11T03:35:57.2675564+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemory_InvalidIncludeScopes_StructuredError","Output":"=== RUN TestRecallMemory_InvalidIncludeScopes_StructuredError\n"} +{"Time":"2026-07-11T03:35:57.2675564+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemory_InvalidIncludeScopes_StructuredError","Output":"--- PASS: TestRecallMemory_InvalidIncludeScopes_StructuredError (0.00s)\n"} +{"Time":"2026-07-11T03:35:57.2675564+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemory_InvalidIncludeScopes_StructuredError","Elapsed":0} +{"Time":"2026-07-11T03:35:57.2675564+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryToolSchema_FlagOff_HasNewProperties_ButRuntimeIgnores"} +{"Time":"2026-07-11T03:35:57.2675564+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryToolSchema_FlagOff_HasNewProperties_ButRuntimeIgnores","Output":"=== RUN TestStoreMemoryToolSchema_FlagOff_HasNewProperties_ButRuntimeIgnores\n"} +{"Time":"2026-07-11T03:35:57.2680567+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryToolSchema_FlagOff_HasNewProperties_ButRuntimeIgnores","Output":"--- PASS: TestStoreMemoryToolSchema_FlagOff_HasNewProperties_ButRuntimeIgnores (0.00s)\n"} +{"Time":"2026-07-11T03:35:57.2680567+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryToolSchema_FlagOff_HasNewProperties_ButRuntimeIgnores","Elapsed":0} +{"Time":"2026-07-11T03:35:57.2680567+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryToolSchema_B4_HasTierFilter"} +{"Time":"2026-07-11T03:35:57.2680567+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryToolSchema_B4_HasTierFilter","Output":"=== RUN TestRecallMemoryToolSchema_B4_HasTierFilter\n"} +{"Time":"2026-07-11T03:35:57.2680567+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryToolSchema_B4_HasTierFilter","Output":"--- PASS: TestRecallMemoryToolSchema_B4_HasTierFilter (0.00s)\n"} +{"Time":"2026-07-11T03:35:57.2680567+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryToolSchema_B4_HasTierFilter","Elapsed":0} +{"Time":"2026-07-11T03:35:57.2680567+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryTierFilter_InvalidTier_B4"} +{"Time":"2026-07-11T03:35:57.2680567+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryTierFilter_InvalidTier_B4","Output":"=== RUN TestRecallMemoryTierFilter_InvalidTier_B4\n"} +{"Time":"2026-07-11T03:35:57.2685563+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryTierFilter_InvalidTier_B4","Output":"--- PASS: TestRecallMemoryTierFilter_InvalidTier_B4 (0.00s)\n"} +{"Time":"2026-07-11T03:35:57.2685563+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryTierFilter_InvalidTier_B4","Elapsed":0} +{"Time":"2026-07-11T03:35:57.2685563+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryTierFilter_FlagOff_SchemaAbsent_B4"} +{"Time":"2026-07-11T03:35:57.2685563+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryTierFilter_FlagOff_SchemaAbsent_B4","Output":"=== RUN TestRecallMemoryTierFilter_FlagOff_SchemaAbsent_B4\n"} +{"Time":"2026-07-11T03:35:57.2685563+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryTierFilter_FlagOff_SchemaAbsent_B4","Output":"--- PASS: TestRecallMemoryTierFilter_FlagOff_SchemaAbsent_B4 (0.00s)\n"} +{"Time":"2026-07-11T03:35:57.2685563+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryTierFilter_FlagOff_SchemaAbsent_B4","Elapsed":0} +{"Time":"2026-07-11T03:35:57.2685563+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryDryRunValidatesPrincipalMetadata"} +{"Time":"2026-07-11T03:35:57.2685563+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryDryRunValidatesPrincipalMetadata","Output":"=== RUN TestStoreMemoryDryRunValidatesPrincipalMetadata\n"} +{"Time":"2026-07-11T03:35:57.2685563+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryDryRunValidatesPrincipalMetadata","Output":"--- PASS: TestStoreMemoryDryRunValidatesPrincipalMetadata (0.00s)\n"} +{"Time":"2026-07-11T03:35:57.2685563+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryDryRunValidatesPrincipalMetadata","Elapsed":0} +{"Time":"2026-07-11T03:35:57.2685563+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWriteLint_PrincipalPrivateCandidatesHiddenFromPhase1"} +{"Time":"2026-07-11T03:35:57.2685563+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWriteLint_PrincipalPrivateCandidatesHiddenFromPhase1","Output":"=== RUN TestWriteLint_PrincipalPrivateCandidatesHiddenFromPhase1\n"} +{"Time":"2026-07-11T03:35:57.2685563+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWriteLint_PrincipalPrivateCandidatesHiddenFromPhase1","Output":"--- PASS: TestWriteLint_PrincipalPrivateCandidatesHiddenFromPhase1 (0.00s)\n"} +{"Time":"2026-07-11T03:35:57.2685563+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWriteLint_PrincipalPrivateCandidatesHiddenFromPhase1","Elapsed":0} +{"Time":"2026-07-11T03:35:57.2685563+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWriteLint_PrincipalPrivateTargetHiddenFromPhase2"} +{"Time":"2026-07-11T03:35:57.2685563+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWriteLint_PrincipalPrivateTargetHiddenFromPhase2","Output":"=== RUN TestWriteLint_PrincipalPrivateTargetHiddenFromPhase2\n"} +{"Time":"2026-07-11T03:35:57.2690575+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWriteLint_PrincipalPrivateTargetHiddenFromPhase2","Output":"--- PASS: TestWriteLint_PrincipalPrivateTargetHiddenFromPhase2 (0.00s)\n"} +{"Time":"2026-07-11T03:35:57.2690575+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWriteLint_PrincipalPrivateTargetHiddenFromPhase2","Elapsed":0} +{"Time":"2026-07-11T03:35:57.2690575+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWriteLint_DomainOwnedCandidateHiddenWithOrchestratorStoreFallback"} +{"Time":"2026-07-11T03:35:57.2690575+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWriteLint_DomainOwnedCandidateHiddenWithOrchestratorStoreFallback","Output":"=== RUN TestWriteLint_DomainOwnedCandidateHiddenWithOrchestratorStoreFallback\n"} +{"Time":"2026-07-11T03:35:57.2690575+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWriteLint_DomainOwnedCandidateHiddenWithOrchestratorStoreFallback","Output":"--- PASS: TestWriteLint_DomainOwnedCandidateHiddenWithOrchestratorStoreFallback (0.00s)\n"} +{"Time":"2026-07-11T03:35:57.2690575+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWriteLint_DomainOwnedCandidateHiddenWithOrchestratorStoreFallback","Elapsed":0} +{"Time":"2026-07-11T03:35:57.2690575+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWriteLint_DomainOwnedTargetHiddenWithOrchestratorStoreFallback"} +{"Time":"2026-07-11T03:35:57.2690575+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWriteLint_DomainOwnedTargetHiddenWithOrchestratorStoreFallback","Output":"=== RUN TestWriteLint_DomainOwnedTargetHiddenWithOrchestratorStoreFallback\n"} +{"Time":"2026-07-11T03:35:57.2690575+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWriteLint_DomainOwnedTargetHiddenWithOrchestratorStoreFallback","Output":"--- PASS: TestWriteLint_DomainOwnedTargetHiddenWithOrchestratorStoreFallback (0.00s)\n"} +{"Time":"2026-07-11T03:35:57.2690575+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWriteLint_DomainOwnedTargetHiddenWithOrchestratorStoreFallback","Elapsed":0} +{"Time":"2026-07-11T03:35:57.2690575+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWriteLint_T035_FlagOff_LegacyPath"} +{"Time":"2026-07-11T03:35:57.2690575+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWriteLint_T035_FlagOff_LegacyPath","Output":"=== RUN TestWriteLint_T035_FlagOff_LegacyPath\n"} +{"Time":"2026-07-11T03:35:57.2690575+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWriteLint_T035_FlagOff_LegacyPath","Output":"--- PASS: TestWriteLint_T035_FlagOff_LegacyPath (0.00s)\n"} +{"Time":"2026-07-11T03:35:57.2695572+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWriteLint_T035_FlagOff_LegacyPath","Elapsed":0} +{"Time":"2026-07-11T03:35:57.2695572+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWriteLint_T035_Phase1_SignalsReturned"} +{"Time":"2026-07-11T03:35:57.2695572+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWriteLint_T035_Phase1_SignalsReturned","Output":"=== RUN TestWriteLint_T035_Phase1_SignalsReturned\n"} +{"Time":"2026-07-11T03:35:57.2695572+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWriteLint_T035_Phase1_SignalsReturned","Output":"--- PASS: TestWriteLint_T035_Phase1_SignalsReturned (0.00s)\n"} +{"Time":"2026-07-11T03:35:57.2695572+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWriteLint_T035_Phase1_SignalsReturned","Elapsed":0} +{"Time":"2026-07-11T03:35:57.2695572+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWriteLint_T035_Phase1_NoSignal_Stored"} +{"Time":"2026-07-11T03:35:57.2695572+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWriteLint_T035_Phase1_NoSignal_Stored","Output":"=== RUN TestWriteLint_T035_Phase1_NoSignal_Stored\n"} +{"Time":"2026-07-11T03:35:57.2695572+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWriteLint_T035_Phase1_NoSignal_Stored","Output":"--- PASS: TestWriteLint_T035_Phase1_NoSignal_Stored (0.00s)\n"} +{"Time":"2026-07-11T03:35:57.2695572+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWriteLint_T035_Phase1_NoSignal_Stored","Elapsed":0} +{"Time":"2026-07-11T03:35:57.2695572+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWriteLint_T035_Phase2_MergeWith"} +{"Time":"2026-07-11T03:35:57.2695572+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWriteLint_T035_Phase2_MergeWith","Output":"=== RUN TestWriteLint_T035_Phase2_MergeWith\n"} +{"Time":"2026-07-11T03:35:57.2695572+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWriteLint_T035_Phase2_MergeWith","Output":"--- PASS: TestWriteLint_T035_Phase2_MergeWith (0.00s)\n"} +{"Time":"2026-07-11T03:35:57.2695572+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWriteLint_T035_Phase2_MergeWith","Elapsed":0} +{"Time":"2026-07-11T03:35:57.2695572+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWriteLint_T035_ForceBypass"} +{"Time":"2026-07-11T03:35:57.2695572+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWriteLint_T035_ForceBypass","Output":"=== RUN TestWriteLint_T035_ForceBypass\n"} +{"Time":"2026-07-11T03:35:57.2700579+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWriteLint_T035_ForceBypass","Output":"--- PASS: TestWriteLint_T035_ForceBypass (0.00s)\n"} +{"Time":"2026-07-11T03:35:57.2700579+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWriteLint_T035_ForceBypass","Elapsed":0} +{"Time":"2026-07-11T03:35:57.2700579+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWriteLint_T035_TokenExpired"} +{"Time":"2026-07-11T03:35:57.2700579+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWriteLint_T035_TokenExpired","Output":"=== RUN TestWriteLint_T035_TokenExpired\n"} +{"Time":"2026-07-11T03:35:57.2700579+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWriteLint_T035_TokenExpired","Output":"--- PASS: TestWriteLint_T035_TokenExpired (0.00s)\n"} +{"Time":"2026-07-11T03:35:57.2700579+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWriteLint_T035_TokenExpired","Elapsed":0} +{"Time":"2026-07-11T03:35:57.2700579+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWriteLint_T035_PrivateScope_NoWorkstation_Rejected"} +{"Time":"2026-07-11T03:35:57.2700579+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWriteLint_T035_PrivateScope_NoWorkstation_Rejected","Output":"=== RUN TestWriteLint_T035_PrivateScope_NoWorkstation_Rejected\n"} +{"Time":"2026-07-11T03:35:57.2700579+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWriteLint_T035_PrivateScope_NoWorkstation_Rejected","Output":"--- PASS: TestWriteLint_T035_PrivateScope_NoWorkstation_Rejected (0.00s)\n"} +{"Time":"2026-07-11T03:35:57.2700579+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWriteLint_T035_PrivateScope_NoWorkstation_Rejected","Elapsed":0} +{"Time":"2026-07-11T03:35:57.2700579+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWriteLint_T035_PrivateScope_WithWorkstation_Allowed"} +{"Time":"2026-07-11T03:35:57.2700579+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWriteLint_T035_PrivateScope_WithWorkstation_Allowed","Output":"=== RUN TestWriteLint_T035_PrivateScope_WithWorkstation_Allowed\n"} +{"Time":"2026-07-11T03:35:57.2700579+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWriteLint_T035_PrivateScope_WithWorkstation_Allowed","Output":"--- PASS: TestWriteLint_T035_PrivateScope_WithWorkstation_Allowed (0.00s)\n"} +{"Time":"2026-07-11T03:35:57.2700579+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWriteLint_T035_PrivateScope_WithWorkstation_Allowed","Elapsed":0} +{"Time":"2026-07-11T03:35:57.2700579+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestKnowAbout_T005_PopulatedTopicReturnsContentFreeIndexHits"} +{"Time":"2026-07-11T03:35:57.2700579+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestKnowAbout_T005_PopulatedTopicReturnsContentFreeIndexHits","Output":"=== RUN TestKnowAbout_T005_PopulatedTopicReturnsContentFreeIndexHits\n"} +{"Time":"2026-07-11T03:35:57.2705577+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestKnowAbout_T005_PopulatedTopicReturnsContentFreeIndexHits","Output":"--- PASS: TestKnowAbout_T005_PopulatedTopicReturnsContentFreeIndexHits (0.00s)\n"} +{"Time":"2026-07-11T03:35:57.2705577+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestKnowAbout_T005_PopulatedTopicReturnsContentFreeIndexHits","Elapsed":0} +{"Time":"2026-07-11T03:35:57.2705577+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestKnowAbout_T005_MissingTopicReturnsEmptyIndexPacket"} +{"Time":"2026-07-11T03:35:57.2705577+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestKnowAbout_T005_MissingTopicReturnsEmptyIndexPacket","Output":"=== RUN TestKnowAbout_T005_MissingTopicReturnsEmptyIndexPacket\n"} +{"Time":"2026-07-11T03:35:57.2705577+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestKnowAbout_T005_MissingTopicReturnsEmptyIndexPacket","Output":"--- PASS: TestKnowAbout_T005_MissingTopicReturnsEmptyIndexPacket (0.00s)\n"} +{"Time":"2026-07-11T03:35:57.2705577+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestKnowAbout_T005_MissingTopicReturnsEmptyIndexPacket","Elapsed":0} +{"Time":"2026-07-11T03:35:57.2705577+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestKnowAbout_T005_ProjectFallbackFailureRequiresProjectScope"} +{"Time":"2026-07-11T03:35:57.2705577+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestKnowAbout_T005_ProjectFallbackFailureRequiresProjectScope","Output":"=== RUN TestKnowAbout_T005_ProjectFallbackFailureRequiresProjectScope\n"} +{"Time":"2026-07-11T03:35:57.2705577+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestKnowAbout_T005_ProjectFallbackFailureRequiresProjectScope","Output":"--- PASS: TestKnowAbout_T005_ProjectFallbackFailureRequiresProjectScope (0.00s)\n"} +{"Time":"2026-07-11T03:35:57.2705577+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestKnowAbout_T005_ProjectFallbackFailureRequiresProjectScope","Elapsed":0} +{"Time":"2026-07-11T03:35:57.2705577+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestKnowAbout_T005_RequiresPrincipalScopedIdentity"} +{"Time":"2026-07-11T03:35:57.2705577+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestKnowAbout_T005_RequiresPrincipalScopedIdentity","Output":"=== RUN TestKnowAbout_T005_RequiresPrincipalScopedIdentity\n"} +{"Time":"2026-07-11T03:35:57.2705577+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestKnowAbout_T005_RequiresPrincipalScopedIdentity/master_token_without_principal_is_rejected"} +{"Time":"2026-07-11T03:35:57.2705577+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestKnowAbout_T005_RequiresPrincipalScopedIdentity/master_token_without_principal_is_rejected","Output":"=== RUN TestKnowAbout_T005_RequiresPrincipalScopedIdentity/master_token_without_principal_is_rejected\n"} +{"Time":"2026-07-11T03:35:57.2705577+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestKnowAbout_T005_RequiresPrincipalScopedIdentity/master_token_without_principal_is_rejected","Output":"--- PASS: TestKnowAbout_T005_RequiresPrincipalScopedIdentity/master_token_without_principal_is_rejected (0.00s)\n"} +{"Time":"2026-07-11T03:35:57.2705577+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestKnowAbout_T005_RequiresPrincipalScopedIdentity/master_token_without_principal_is_rejected","Elapsed":0} +{"Time":"2026-07-11T03:35:57.2705577+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestKnowAbout_T005_RequiresPrincipalScopedIdentity/legacy_client_keycard_without_principal_is_rejected"} +{"Time":"2026-07-11T03:35:57.2705577+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestKnowAbout_T005_RequiresPrincipalScopedIdentity/legacy_client_keycard_without_principal_is_rejected","Output":"=== RUN TestKnowAbout_T005_RequiresPrincipalScopedIdentity/legacy_client_keycard_without_principal_is_rejected\n"} +{"Time":"2026-07-11T03:35:57.2705577+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestKnowAbout_T005_RequiresPrincipalScopedIdentity/legacy_client_keycard_without_principal_is_rejected","Output":"--- PASS: TestKnowAbout_T005_RequiresPrincipalScopedIdentity/legacy_client_keycard_without_principal_is_rejected (0.00s)\n"} +{"Time":"2026-07-11T03:35:57.2705577+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestKnowAbout_T005_RequiresPrincipalScopedIdentity/legacy_client_keycard_without_principal_is_rejected","Elapsed":0} +{"Time":"2026-07-11T03:35:57.2705577+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestKnowAbout_T005_RequiresPrincipalScopedIdentity","Output":"--- PASS: TestKnowAbout_T005_RequiresPrincipalScopedIdentity (0.00s)\n"} +{"Time":"2026-07-11T03:35:57.2705577+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestKnowAbout_T005_RequiresPrincipalScopedIdentity","Elapsed":0} +{"Time":"2026-07-11T03:35:57.2705577+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestKnowAbout_T005_ContextProjectFallbackAndLimitClamp"} +{"Time":"2026-07-11T03:35:57.2705577+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestKnowAbout_T005_ContextProjectFallbackAndLimitClamp","Output":"=== RUN TestKnowAbout_T005_ContextProjectFallbackAndLimitClamp\n"} +{"Time":"2026-07-11T03:35:57.271057+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestKnowAbout_T005_ContextProjectFallbackAndLimitClamp","Output":"--- PASS: TestKnowAbout_T005_ContextProjectFallbackAndLimitClamp (0.00s)\n"} +{"Time":"2026-07-11T03:35:57.271057+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestKnowAbout_T005_ContextProjectFallbackAndLimitClamp","Elapsed":0} +{"Time":"2026-07-11T03:35:57.271057+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestKnowAbout_T005_RealStoreCanonicalShapeAndMissingTopicEmptyPacket"} +{"Time":"2026-07-11T03:35:57.271057+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestKnowAbout_T005_RealStoreCanonicalShapeAndMissingTopicEmptyPacket","Output":"=== RUN TestKnowAbout_T005_RealStoreCanonicalShapeAndMissingTopicEmptyPacket\n"} +{"Time":"2026-07-11T03:35:57.3963588+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestKnowAbout_T005_RealStoreCanonicalShapeAndMissingTopicEmptyPacket","Output":"{\"level\":\"debug\",\"connections\":1,\"time\":\"2026-07-11T03:35:57+03:00\",\"message\":\"Connection pool warmed\"}\n"} +{"Time":"2026-07-11T03:35:57.4243625+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestKnowAbout_T005_RealStoreCanonicalShapeAndMissingTopicEmptyPacket","Output":"--- PASS: TestKnowAbout_T005_RealStoreCanonicalShapeAndMissingTopicEmptyPacket (0.15s)\n"} +{"Time":"2026-07-11T03:35:57.4243625+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestKnowAbout_T005_RealStoreCanonicalShapeAndMissingTopicEmptyPacket","Elapsed":0.15} +{"Time":"2026-07-11T03:35:57.4243625+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestKnowAbout_T005_DisabledS2NotAdvertised"} +{"Time":"2026-07-11T03:35:57.4243625+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestKnowAbout_T005_DisabledS2NotAdvertised","Output":"=== RUN TestKnowAbout_T005_DisabledS2NotAdvertised\n"} +{"Time":"2026-07-11T03:35:57.4243625+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestKnowAbout_T005_DisabledS2NotAdvertised","Output":"--- PASS: TestKnowAbout_T005_DisabledS2NotAdvertised (0.00s)\n"} +{"Time":"2026-07-11T03:35:57.4243625+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestKnowAbout_T005_DisabledS2NotAdvertised","Elapsed":0} +{"Time":"2026-07-11T03:35:57.4243625+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestKnowAbout_T014_ToolListRequiresMasterAndS2Flags"} +{"Time":"2026-07-11T03:35:57.4243625+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestKnowAbout_T014_ToolListRequiresMasterAndS2Flags","Output":"=== RUN TestKnowAbout_T014_ToolListRequiresMasterAndS2Flags\n"} +{"Time":"2026-07-11T03:35:57.4243625+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestKnowAbout_T014_ToolListRequiresMasterAndS2Flags/master_and_s2_enabled_advertises_know_about"} +{"Time":"2026-07-11T03:35:57.4243625+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestKnowAbout_T014_ToolListRequiresMasterAndS2Flags/master_and_s2_enabled_advertises_know_about","Output":"=== RUN TestKnowAbout_T014_ToolListRequiresMasterAndS2Flags/master_and_s2_enabled_advertises_know_about\n"} +{"Time":"2026-07-11T03:35:57.4248588+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestKnowAbout_T014_ToolListRequiresMasterAndS2Flags/master_and_s2_enabled_advertises_know_about","Output":"--- PASS: TestKnowAbout_T014_ToolListRequiresMasterAndS2Flags/master_and_s2_enabled_advertises_know_about (0.00s)\n"} +{"Time":"2026-07-11T03:35:57.4248588+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestKnowAbout_T014_ToolListRequiresMasterAndS2Flags/master_and_s2_enabled_advertises_know_about","Elapsed":0} +{"Time":"2026-07-11T03:35:57.4248588+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestKnowAbout_T014_ToolListRequiresMasterAndS2Flags/master_disabled_suppresses_know_about_even_when_s2_flag_is_set"} +{"Time":"2026-07-11T03:35:57.4248588+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestKnowAbout_T014_ToolListRequiresMasterAndS2Flags/master_disabled_suppresses_know_about_even_when_s2_flag_is_set","Output":"=== RUN TestKnowAbout_T014_ToolListRequiresMasterAndS2Flags/master_disabled_suppresses_know_about_even_when_s2_flag_is_set\n"} +{"Time":"2026-07-11T03:35:57.4248588+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestKnowAbout_T014_ToolListRequiresMasterAndS2Flags/master_disabled_suppresses_know_about_even_when_s2_flag_is_set","Output":"--- PASS: TestKnowAbout_T014_ToolListRequiresMasterAndS2Flags/master_disabled_suppresses_know_about_even_when_s2_flag_is_set (0.00s)\n"} +{"Time":"2026-07-11T03:35:57.4248588+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestKnowAbout_T014_ToolListRequiresMasterAndS2Flags/master_disabled_suppresses_know_about_even_when_s2_flag_is_set","Elapsed":0} +{"Time":"2026-07-11T03:35:57.4248588+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestKnowAbout_T014_ToolListRequiresMasterAndS2Flags/s2_disabled_suppresses_know_about_even_when_master_is_set"} +{"Time":"2026-07-11T03:35:57.4248588+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestKnowAbout_T014_ToolListRequiresMasterAndS2Flags/s2_disabled_suppresses_know_about_even_when_master_is_set","Output":"=== RUN TestKnowAbout_T014_ToolListRequiresMasterAndS2Flags/s2_disabled_suppresses_know_about_even_when_master_is_set\n"} +{"Time":"2026-07-11T03:35:57.4253592+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestKnowAbout_T014_ToolListRequiresMasterAndS2Flags/s2_disabled_suppresses_know_about_even_when_master_is_set","Output":"--- PASS: TestKnowAbout_T014_ToolListRequiresMasterAndS2Flags/s2_disabled_suppresses_know_about_even_when_master_is_set (0.00s)\n"} +{"Time":"2026-07-11T03:35:57.4253592+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestKnowAbout_T014_ToolListRequiresMasterAndS2Flags/s2_disabled_suppresses_know_about_even_when_master_is_set","Elapsed":0} +{"Time":"2026-07-11T03:35:57.4253592+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestKnowAbout_T014_ToolListRequiresMasterAndS2Flags","Output":"--- PASS: TestKnowAbout_T014_ToolListRequiresMasterAndS2Flags (0.00s)\n"} +{"Time":"2026-07-11T03:35:57.4253592+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestKnowAbout_T014_ToolListRequiresMasterAndS2Flags","Elapsed":0} +{"Time":"2026-07-11T03:35:57.4253592+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestKnowAbout_T005_IndexErrorsSurfaceAsToolErrors"} +{"Time":"2026-07-11T03:35:57.4253592+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestKnowAbout_T005_IndexErrorsSurfaceAsToolErrors","Output":"=== RUN TestKnowAbout_T005_IndexErrorsSurfaceAsToolErrors\n"} +{"Time":"2026-07-11T03:35:57.4253592+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestKnowAbout_T005_IndexErrorsSurfaceAsToolErrors","Output":"--- PASS: TestKnowAbout_T005_IndexErrorsSurfaceAsToolErrors (0.00s)\n"} +{"Time":"2026-07-11T03:35:57.4253592+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestKnowAbout_T005_IndexErrorsSurfaceAsToolErrors","Elapsed":0} +{"Time":"2026-07-11T03:35:57.4253592+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestKnowAbout_T005_JSONNeverContainsContentKeysOrMemoryBodies"} +{"Time":"2026-07-11T03:35:57.4253592+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestKnowAbout_T005_JSONNeverContainsContentKeysOrMemoryBodies","Output":"=== RUN TestKnowAbout_T005_JSONNeverContainsContentKeysOrMemoryBodies\n"} +{"Time":"2026-07-11T03:35:57.4253592+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestKnowAbout_T005_JSONNeverContainsContentKeysOrMemoryBodies","Output":"--- PASS: TestKnowAbout_T005_JSONNeverContainsContentKeysOrMemoryBodies (0.00s)\n"} +{"Time":"2026-07-11T03:35:57.4253592+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestKnowAbout_T005_JSONNeverContainsContentKeysOrMemoryBodies","Elapsed":0} +{"Time":"2026-07-11T03:35:57.4253592+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestQueryPrincipalMemory_ToolSchemaAdvertised"} +{"Time":"2026-07-11T03:35:57.4253592+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestQueryPrincipalMemory_ToolSchemaAdvertised","Output":"=== RUN TestQueryPrincipalMemory_ToolSchemaAdvertised\n"} +{"Time":"2026-07-11T03:35:57.4253592+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestQueryPrincipalMemory_ToolSchemaAdvertised","Output":"--- PASS: TestQueryPrincipalMemory_ToolSchemaAdvertised (0.00s)\n"} +{"Time":"2026-07-11T03:35:57.4253592+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestQueryPrincipalMemory_ToolSchemaAdvertised","Elapsed":0} +{"Time":"2026-07-11T03:35:57.4253592+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestQueryPrincipalMemory_ResponseAndValidation"} +{"Time":"2026-07-11T03:35:57.4253592+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestQueryPrincipalMemory_ResponseAndValidation","Output":"=== RUN TestQueryPrincipalMemory_ResponseAndValidation\n"} +{"Time":"2026-07-11T03:35:57.4253592+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestQueryPrincipalMemory_ResponseAndValidation/returns_attributed_bounded_principal_memory_response"} +{"Time":"2026-07-11T03:35:57.4253592+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestQueryPrincipalMemory_ResponseAndValidation/returns_attributed_bounded_principal_memory_response","Output":"=== RUN TestQueryPrincipalMemory_ResponseAndValidation/returns_attributed_bounded_principal_memory_response\n"} +{"Time":"2026-07-11T03:35:57.4258587+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestQueryPrincipalMemory_ResponseAndValidation/returns_attributed_bounded_principal_memory_response","Output":"--- PASS: TestQueryPrincipalMemory_ResponseAndValidation/returns_attributed_bounded_principal_memory_response (0.00s)\n"} +{"Time":"2026-07-11T03:35:57.4258587+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestQueryPrincipalMemory_ResponseAndValidation/returns_attributed_bounded_principal_memory_response","Elapsed":0} +{"Time":"2026-07-11T03:35:57.4258587+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestQueryPrincipalMemory_ResponseAndValidation/rejects_invalid_principal_kind"} +{"Time":"2026-07-11T03:35:57.4258587+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestQueryPrincipalMemory_ResponseAndValidation/rejects_invalid_principal_kind","Output":"=== RUN TestQueryPrincipalMemory_ResponseAndValidation/rejects_invalid_principal_kind\n"} +{"Time":"2026-07-11T03:35:57.4258587+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestQueryPrincipalMemory_ResponseAndValidation/rejects_invalid_principal_kind","Output":"--- PASS: TestQueryPrincipalMemory_ResponseAndValidation/rejects_invalid_principal_kind (0.00s)\n"} +{"Time":"2026-07-11T03:35:57.4258587+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestQueryPrincipalMemory_ResponseAndValidation/rejects_invalid_principal_kind","Elapsed":0} +{"Time":"2026-07-11T03:35:57.4258587+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestQueryPrincipalMemory_ResponseAndValidation/rejects_oversized_limit_clearly"} +{"Time":"2026-07-11T03:35:57.4258587+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestQueryPrincipalMemory_ResponseAndValidation/rejects_oversized_limit_clearly","Output":"=== RUN TestQueryPrincipalMemory_ResponseAndValidation/rejects_oversized_limit_clearly\n"} +{"Time":"2026-07-11T03:35:57.4258587+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestQueryPrincipalMemory_ResponseAndValidation/rejects_oversized_limit_clearly","Output":"--- PASS: TestQueryPrincipalMemory_ResponseAndValidation/rejects_oversized_limit_clearly (0.00s)\n"} +{"Time":"2026-07-11T03:35:57.4258587+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestQueryPrincipalMemory_ResponseAndValidation/rejects_oversized_limit_clearly","Elapsed":0} +{"Time":"2026-07-11T03:35:57.4258587+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestQueryPrincipalMemory_ResponseAndValidation/rejects_non-admin_cross-principal_private_widening"} +{"Time":"2026-07-11T03:35:57.4258587+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestQueryPrincipalMemory_ResponseAndValidation/rejects_non-admin_cross-principal_private_widening","Output":"=== RUN TestQueryPrincipalMemory_ResponseAndValidation/rejects_non-admin_cross-principal_private_widening\n"} +{"Time":"2026-07-11T03:35:57.4258587+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestQueryPrincipalMemory_ResponseAndValidation/rejects_non-admin_cross-principal_private_widening","Output":"--- PASS: TestQueryPrincipalMemory_ResponseAndValidation/rejects_non-admin_cross-principal_private_widening (0.00s)\n"} +{"Time":"2026-07-11T03:35:57.4258587+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestQueryPrincipalMemory_ResponseAndValidation/rejects_non-admin_cross-principal_private_widening","Elapsed":0} +{"Time":"2026-07-11T03:35:57.4258587+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestQueryPrincipalMemory_ResponseAndValidation","Output":"--- PASS: TestQueryPrincipalMemory_ResponseAndValidation (0.00s)\n"} +{"Time":"2026-07-11T03:35:57.4258587+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestQueryPrincipalMemory_ResponseAndValidation","Elapsed":0} +{"Time":"2026-07-11T03:35:57.4258587+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestQueryPrincipalMemory_ServiceErrorsPropagate"} +{"Time":"2026-07-11T03:35:57.4258587+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestQueryPrincipalMemory_ServiceErrorsPropagate","Output":"=== RUN TestQueryPrincipalMemory_ServiceErrorsPropagate\n"} +{"Time":"2026-07-11T03:35:57.4258587+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestQueryPrincipalMemory_ServiceErrorsPropagate","Output":"--- PASS: TestQueryPrincipalMemory_ServiceErrorsPropagate (0.00s)\n"} +{"Time":"2026-07-11T03:35:57.4258587+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestQueryPrincipalMemory_ServiceErrorsPropagate","Elapsed":0} +{"Time":"2026-07-11T03:35:57.4258587+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemory_FlagOFF_SchemaNoVnextParams"} +{"Time":"2026-07-11T03:35:57.4258587+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemory_FlagOFF_SchemaNoVnextParams","Output":"=== RUN TestRecallMemory_FlagOFF_SchemaNoVnextParams\n"} +{"Time":"2026-07-11T03:35:57.4258587+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemory_FlagOFF_SchemaNoVnextParams","Output":"--- PASS: TestRecallMemory_FlagOFF_SchemaNoVnextParams (0.00s)\n"} +{"Time":"2026-07-11T03:35:57.4258587+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemory_FlagOFF_SchemaNoVnextParams","Elapsed":0} +{"Time":"2026-07-11T03:35:57.4258587+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemory_FlagON_SchemaHasVnextParams"} +{"Time":"2026-07-11T03:35:57.4258587+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemory_FlagON_SchemaHasVnextParams","Output":"=== RUN TestRecallMemory_FlagON_SchemaHasVnextParams\n"} +{"Time":"2026-07-11T03:35:57.4258587+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemory_FlagON_SchemaHasVnextParams","Output":"--- PASS: TestRecallMemory_FlagON_SchemaHasVnextParams (0.00s)\n"} +{"Time":"2026-07-11T03:35:57.4258587+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemory_FlagON_SchemaHasVnextParams","Elapsed":0} +{"Time":"2026-07-11T03:35:57.4258587+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemory_FlagMatrix_FEnabled_SchemaHasScopeParams"} +{"Time":"2026-07-11T03:35:57.4258587+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemory_FlagMatrix_FEnabled_SchemaHasScopeParams","Output":"=== RUN TestRecallMemory_FlagMatrix_FEnabled_SchemaHasScopeParams\n"} +{"Time":"2026-07-11T03:35:57.4258587+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemory_FlagMatrix_FEnabled_SchemaHasScopeParams","Output":"--- PASS: TestRecallMemory_FlagMatrix_FEnabled_SchemaHasScopeParams (0.00s)\n"} +{"Time":"2026-07-11T03:35:57.4258587+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemory_FlagMatrix_FEnabled_SchemaHasScopeParams","Elapsed":0} +{"Time":"2026-07-11T03:35:57.4258587+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemory_FlagMatrix_BothEnabled_SchemaCombinesParams"} +{"Time":"2026-07-11T03:35:57.4258587+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemory_FlagMatrix_BothEnabled_SchemaCombinesParams","Output":"=== RUN TestRecallMemory_FlagMatrix_BothEnabled_SchemaCombinesParams\n"} +{"Time":"2026-07-11T03:35:57.4258587+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemory_FlagMatrix_BothEnabled_SchemaCombinesParams","Output":"--- PASS: TestRecallMemory_FlagMatrix_BothEnabled_SchemaCombinesParams (0.00s)\n"} +{"Time":"2026-07-11T03:35:57.4258587+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemory_FlagMatrix_BothEnabled_SchemaCombinesParams","Elapsed":0} +{"Time":"2026-07-11T03:35:57.4258587+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemory_FlagOFF_BehaviorIdentity"} +{"Time":"2026-07-11T03:35:57.4258587+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemory_FlagOFF_BehaviorIdentity","Output":"=== RUN TestRecallMemory_FlagOFF_BehaviorIdentity\n"} +{"Time":"2026-07-11T03:35:57.4263585+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemory_FlagOFF_BehaviorIdentity","Output":"--- PASS: TestRecallMemory_FlagOFF_BehaviorIdentity (0.00s)\n"} +{"Time":"2026-07-11T03:35:57.4263585+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemory_FlagOFF_BehaviorIdentity","Elapsed":0} +{"Time":"2026-07-11T03:35:57.4263585+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecall_FlagOFF_TombstoneStrings_Similar"} +{"Time":"2026-07-11T03:35:57.4263585+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecall_FlagOFF_TombstoneStrings_Similar","Output":"=== RUN TestRecall_FlagOFF_TombstoneStrings_Similar\n"} +{"Time":"2026-07-11T03:35:57.4263585+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecall_FlagOFF_TombstoneStrings_Similar","Output":"--- PASS: TestRecall_FlagOFF_TombstoneStrings_Similar (0.00s)\n"} +{"Time":"2026-07-11T03:35:57.4263585+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecall_FlagOFF_TombstoneStrings_Similar","Elapsed":0} +{"Time":"2026-07-11T03:35:57.4263585+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecall_FlagOFF_TombstoneStrings_Explain"} +{"Time":"2026-07-11T03:35:57.4263585+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecall_FlagOFF_TombstoneStrings_Explain","Output":"=== RUN TestRecall_FlagOFF_TombstoneStrings_Explain\n"} +{"Time":"2026-07-11T03:35:57.4263585+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecall_FlagOFF_TombstoneStrings_Explain","Output":"--- PASS: TestRecall_FlagOFF_TombstoneStrings_Explain (0.00s)\n"} +{"Time":"2026-07-11T03:35:57.4263585+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecall_FlagOFF_TombstoneStrings_Explain","Elapsed":0} +{"Time":"2026-07-11T03:35:57.4263585+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryPrincipalDefault_OwnSharedLegacyVisibleOtherPrivateHidden"} +{"Time":"2026-07-11T03:35:57.4263585+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryPrincipalDefault_OwnSharedLegacyVisibleOtherPrivateHidden","Output":"=== RUN TestRecallMemoryPrincipalDefault_OwnSharedLegacyVisibleOtherPrivateHidden\n"} +{"Time":"2026-07-11T03:35:57.54486+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryPrincipalDefault_OwnSharedLegacyVisibleOtherPrivateHidden","Output":"{\"level\":\"debug\",\"connections\":1,\"time\":\"2026-07-11T03:35:57+03:00\",\"message\":\"Connection pool warmed\"}\n"} +{"Time":"2026-07-11T03:35:57.5888604+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryPrincipalDefault_OwnSharedLegacyVisibleOtherPrivateHidden","Output":"--- PASS: TestRecallMemoryPrincipalDefault_OwnSharedLegacyVisibleOtherPrivateHidden (0.16s)\n"} +{"Time":"2026-07-11T03:35:57.5888604+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryPrincipalDefault_OwnSharedLegacyVisibleOtherPrivateHidden","Elapsed":0.16} +{"Time":"2026-07-11T03:35:57.5888604+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryIncludePrincipals_SchemaAdvertised"} +{"Time":"2026-07-11T03:35:57.5888604+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryIncludePrincipals_SchemaAdvertised","Output":"=== RUN TestRecallMemoryIncludePrincipals_SchemaAdvertised\n"} +{"Time":"2026-07-11T03:35:57.5888604+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryIncludePrincipals_SchemaAdvertised","Output":"--- PASS: TestRecallMemoryIncludePrincipals_SchemaAdvertised (0.00s)\n"} +{"Time":"2026-07-11T03:35:57.5888604+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryIncludePrincipals_SchemaAdvertised","Elapsed":0} +{"Time":"2026-07-11T03:35:57.5888604+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryIncludePrincipals_ValidationAndPrivacy"} +{"Time":"2026-07-11T03:35:57.5888604+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryIncludePrincipals_ValidationAndPrivacy","Output":"=== RUN TestRecallMemoryIncludePrincipals_ValidationAndPrivacy\n"} +{"Time":"2026-07-11T03:35:57.5888604+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryIncludePrincipals_ValidationAndPrivacy/rejects_duplicate_principals"} +{"Time":"2026-07-11T03:35:57.5888604+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryIncludePrincipals_ValidationAndPrivacy/rejects_duplicate_principals","Output":"=== RUN TestRecallMemoryIncludePrincipals_ValidationAndPrivacy/rejects_duplicate_principals\n"} +{"Time":"2026-07-11T03:35:57.7084535+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryIncludePrincipals_ValidationAndPrivacy/rejects_duplicate_principals","Output":"{\"level\":\"debug\",\"connections\":1,\"time\":\"2026-07-11T03:35:57+03:00\",\"message\":\"Connection pool warmed\"}\n"} +{"Time":"2026-07-11T03:35:57.7154548+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryIncludePrincipals_ValidationAndPrivacy/rejects_duplicate_principals","Output":"--- PASS: TestRecallMemoryIncludePrincipals_ValidationAndPrivacy/rejects_duplicate_principals (0.13s)\n"} +{"Time":"2026-07-11T03:35:57.7154548+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryIncludePrincipals_ValidationAndPrivacy/rejects_duplicate_principals","Elapsed":0.13} +{"Time":"2026-07-11T03:35:57.7154548+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryIncludePrincipals_ValidationAndPrivacy/rejects_blank_and_invalid_principals_clearly"} +{"Time":"2026-07-11T03:35:57.7154548+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryIncludePrincipals_ValidationAndPrivacy/rejects_blank_and_invalid_principals_clearly","Output":"=== RUN TestRecallMemoryIncludePrincipals_ValidationAndPrivacy/rejects_blank_and_invalid_principals_clearly\n"} +{"Time":"2026-07-11T03:35:57.8339705+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryIncludePrincipals_ValidationAndPrivacy/rejects_blank_and_invalid_principals_clearly","Output":"{\"level\":\"debug\",\"connections\":1,\"time\":\"2026-07-11T03:35:57+03:00\",\"message\":\"Connection pool warmed\"}\n"} +{"Time":"2026-07-11T03:35:57.840971+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryIncludePrincipals_ValidationAndPrivacy/rejects_blank_and_invalid_principals_clearly","Output":"--- PASS: TestRecallMemoryIncludePrincipals_ValidationAndPrivacy/rejects_blank_and_invalid_principals_clearly (0.13s)\n"} +{"Time":"2026-07-11T03:35:57.840971+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryIncludePrincipals_ValidationAndPrivacy/rejects_blank_and_invalid_principals_clearly","Elapsed":0.13} +{"Time":"2026-07-11T03:35:57.840971+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryIncludePrincipals_ValidationAndPrivacy/empty_include_list_is_treated_as_absent"} +{"Time":"2026-07-11T03:35:57.840971+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryIncludePrincipals_ValidationAndPrivacy/empty_include_list_is_treated_as_absent","Output":"=== RUN TestRecallMemoryIncludePrincipals_ValidationAndPrivacy/empty_include_list_is_treated_as_absent\n"} +{"Time":"2026-07-11T03:35:57.840971+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryIncludePrincipals_ValidationAndPrivacy/empty_include_list_is_treated_as_absent","Output":"--- PASS: TestRecallMemoryIncludePrincipals_ValidationAndPrivacy/empty_include_list_is_treated_as_absent (0.00s)\n"} +{"Time":"2026-07-11T03:35:57.840971+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryIncludePrincipals_ValidationAndPrivacy/empty_include_list_is_treated_as_absent","Elapsed":0} +{"Time":"2026-07-11T03:35:57.840971+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryIncludePrincipals_ValidationAndPrivacy/self_include_is_allowed_and_deduplicated"} +{"Time":"2026-07-11T03:35:57.840971+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryIncludePrincipals_ValidationAndPrivacy/self_include_is_allowed_and_deduplicated","Output":"=== RUN TestRecallMemoryIncludePrincipals_ValidationAndPrivacy/self_include_is_allowed_and_deduplicated\n"} +{"Time":"2026-07-11T03:35:57.9571101+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryIncludePrincipals_ValidationAndPrivacy/self_include_is_allowed_and_deduplicated","Output":"{\"level\":\"debug\",\"connections\":1,\"time\":\"2026-07-11T03:35:57+03:00\",\"message\":\"Connection pool warmed\"}\n"} +{"Time":"2026-07-11T03:35:57.9816086+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryIncludePrincipals_ValidationAndPrivacy/self_include_is_allowed_and_deduplicated","Output":"--- PASS: TestRecallMemoryIncludePrincipals_ValidationAndPrivacy/self_include_is_allowed_and_deduplicated (0.14s)\n"} +{"Time":"2026-07-11T03:35:57.9816086+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryIncludePrincipals_ValidationAndPrivacy/self_include_is_allowed_and_deduplicated","Elapsed":0.14} +{"Time":"2026-07-11T03:35:57.9816086+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryIncludePrincipals_ValidationAndPrivacy/non-admin_cross-principal_include_skips_private_rows"} +{"Time":"2026-07-11T03:35:57.9816086+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryIncludePrincipals_ValidationAndPrivacy/non-admin_cross-principal_include_skips_private_rows","Output":"=== RUN TestRecallMemoryIncludePrincipals_ValidationAndPrivacy/non-admin_cross-principal_include_skips_private_rows\n"} +{"Time":"2026-07-11T03:35:58.0936376+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryIncludePrincipals_ValidationAndPrivacy/non-admin_cross-principal_include_skips_private_rows","Output":"{\"level\":\"debug\",\"connections\":1,\"time\":\"2026-07-11T03:35:58+03:00\",\"message\":\"Connection pool warmed\"}\n"} +{"Time":"2026-07-11T03:35:58.1161379+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryIncludePrincipals_ValidationAndPrivacy/non-admin_cross-principal_include_skips_private_rows","Output":"--- PASS: TestRecallMemoryIncludePrincipals_ValidationAndPrivacy/non-admin_cross-principal_include_skips_private_rows (0.13s)\n"} +{"Time":"2026-07-11T03:35:58.1161379+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryIncludePrincipals_ValidationAndPrivacy/non-admin_cross-principal_include_skips_private_rows","Elapsed":0.13} +{"Time":"2026-07-11T03:35:58.1161379+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryIncludePrincipals_ValidationAndPrivacy/non-admin_cross-principal_include_appends_shared_rows"} +{"Time":"2026-07-11T03:35:58.1161379+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryIncludePrincipals_ValidationAndPrivacy/non-admin_cross-principal_include_appends_shared_rows","Output":"=== RUN TestRecallMemoryIncludePrincipals_ValidationAndPrivacy/non-admin_cross-principal_include_appends_shared_rows\n"} +{"Time":"2026-07-11T03:35:58.2251161+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryIncludePrincipals_ValidationAndPrivacy/non-admin_cross-principal_include_appends_shared_rows","Output":"{\"level\":\"debug\",\"connections\":1,\"time\":\"2026-07-11T03:35:58+03:00\",\"message\":\"Connection pool warmed\"}\n"} +{"Time":"2026-07-11T03:35:58.2530347+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryIncludePrincipals_ValidationAndPrivacy/non-admin_cross-principal_include_appends_shared_rows","Output":"--- PASS: TestRecallMemoryIncludePrincipals_ValidationAndPrivacy/non-admin_cross-principal_include_appends_shared_rows (0.14s)\n"} +{"Time":"2026-07-11T03:35:58.2530347+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryIncludePrincipals_ValidationAndPrivacy/non-admin_cross-principal_include_appends_shared_rows","Elapsed":0.14} +{"Time":"2026-07-11T03:35:58.2530347+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryIncludePrincipals_ValidationAndPrivacy/admin_cross-private_include_writes_durable_audit_before_returning_private_row"} +{"Time":"2026-07-11T03:35:58.2530347+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryIncludePrincipals_ValidationAndPrivacy/admin_cross-private_include_writes_durable_audit_before_returning_private_row","Output":"=== RUN TestRecallMemoryIncludePrincipals_ValidationAndPrivacy/admin_cross-private_include_writes_durable_audit_before_returning_private_row\n"} +{"Time":"2026-07-11T03:35:58.3662824+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryIncludePrincipals_ValidationAndPrivacy/admin_cross-private_include_writes_durable_audit_before_returning_private_row","Output":"{\"level\":\"debug\",\"connections\":1,\"time\":\"2026-07-11T03:35:58+03:00\",\"message\":\"Connection pool warmed\"}\n"} +{"Time":"2026-07-11T03:35:58.4022825+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryIncludePrincipals_ValidationAndPrivacy/admin_cross-private_include_writes_durable_audit_before_returning_private_row","Output":"--- PASS: TestRecallMemoryIncludePrincipals_ValidationAndPrivacy/admin_cross-private_include_writes_durable_audit_before_returning_private_row (0.15s)\n"} +{"Time":"2026-07-11T03:35:58.4022825+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryIncludePrincipals_ValidationAndPrivacy/admin_cross-private_include_writes_durable_audit_before_returning_private_row","Elapsed":0.15} +{"Time":"2026-07-11T03:35:58.4022825+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryIncludePrincipals_ValidationAndPrivacy/admin_cross-private_include_reapplies_recall_filters"} +{"Time":"2026-07-11T03:35:58.4022825+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryIncludePrincipals_ValidationAndPrivacy/admin_cross-private_include_reapplies_recall_filters","Output":"=== RUN TestRecallMemoryIncludePrincipals_ValidationAndPrivacy/admin_cross-private_include_reapplies_recall_filters\n"} +{"Time":"2026-07-11T03:35:58.5168178+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryIncludePrincipals_ValidationAndPrivacy/admin_cross-private_include_reapplies_recall_filters","Output":"{\"level\":\"debug\",\"connections\":1,\"time\":\"2026-07-11T03:35:58+03:00\",\"message\":\"Connection pool warmed\"}\n"} +{"Time":"2026-07-11T03:35:58.5768205+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryIncludePrincipals_ValidationAndPrivacy/admin_cross-private_include_reapplies_recall_filters","Output":"--- PASS: TestRecallMemoryIncludePrincipals_ValidationAndPrivacy/admin_cross-private_include_reapplies_recall_filters (0.17s)\n"} +{"Time":"2026-07-11T03:35:58.5768205+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryIncludePrincipals_ValidationAndPrivacy/admin_cross-private_include_reapplies_recall_filters","Elapsed":0.17} +{"Time":"2026-07-11T03:35:58.5768205+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryIncludePrincipals_ValidationAndPrivacy","Output":"--- PASS: TestRecallMemoryIncludePrincipals_ValidationAndPrivacy (0.99s)\n"} +{"Time":"2026-07-11T03:35:58.5768205+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryIncludePrincipals_ValidationAndPrivacy","Elapsed":0.99} +{"Time":"2026-07-11T03:35:58.5768205+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRuleGovernanceReadToolsAdvertisedWhenStoresWired"} +{"Time":"2026-07-11T03:35:58.5768205+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRuleGovernanceReadToolsAdvertisedWhenStoresWired","Output":"=== RUN TestRuleGovernanceReadToolsAdvertisedWhenStoresWired\n"} +{"Time":"2026-07-11T03:35:58.5768205+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRuleGovernanceReadToolsAdvertisedWhenStoresWired","Output":"--- PASS: TestRuleGovernanceReadToolsAdvertisedWhenStoresWired (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.5768205+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRuleGovernanceReadToolsAdvertisedWhenStoresWired","Elapsed":0} +{"Time":"2026-07-11T03:35:58.5768205+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRuleGovernanceReadToolsHiddenWhenStoreMissing"} +{"Time":"2026-07-11T03:35:58.5768205+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRuleGovernanceReadToolsHiddenWhenStoreMissing","Output":"=== RUN TestRuleGovernanceReadToolsHiddenWhenStoreMissing\n"} +{"Time":"2026-07-11T03:35:58.5773207+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRuleGovernanceReadToolsHiddenWhenStoreMissing","Output":"--- PASS: TestRuleGovernanceReadToolsHiddenWhenStoreMissing (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.5773207+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRuleGovernanceReadToolsHiddenWhenStoreMissing","Elapsed":0} +{"Time":"2026-07-11T03:35:58.5773207+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRuleGovernanceHealthReadOnlyCallerGetsNoData"} +{"Time":"2026-07-11T03:35:58.5773207+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRuleGovernanceHealthReadOnlyCallerGetsNoData","Output":"=== RUN TestRuleGovernanceHealthReadOnlyCallerGetsNoData\n"} +{"Time":"2026-07-11T03:35:58.5773207+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRuleGovernanceHealthReadOnlyCallerGetsNoData","Output":"--- PASS: TestRuleGovernanceHealthReadOnlyCallerGetsNoData (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.5773207+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRuleGovernanceHealthReadOnlyCallerGetsNoData","Elapsed":0} +{"Time":"2026-07-11T03:35:58.5773207+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRuleGovernanceQueueAndSnapshotsReadModels"} +{"Time":"2026-07-11T03:35:58.5773207+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRuleGovernanceQueueAndSnapshotsReadModels","Output":"=== RUN TestRuleGovernanceQueueAndSnapshotsReadModels\n"} +{"Time":"2026-07-11T03:35:58.5773207+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRuleGovernanceQueueAndSnapshotsReadModels","Output":"--- PASS: TestRuleGovernanceQueueAndSnapshotsReadModels (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.5773207+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRuleGovernanceQueueAndSnapshotsReadModels","Elapsed":0} +{"Time":"2026-07-11T03:35:58.5773207+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRuleGovernanceUsefulnessNoDataAndProjectGuard"} +{"Time":"2026-07-11T03:35:58.5773207+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRuleGovernanceUsefulnessNoDataAndProjectGuard","Output":"=== RUN TestRuleGovernanceUsefulnessNoDataAndProjectGuard\n"} +{"Time":"2026-07-11T03:35:58.5773207+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRuleGovernanceUsefulnessNoDataAndProjectGuard","Output":"--- PASS: TestRuleGovernanceUsefulnessNoDataAndProjectGuard (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.5773207+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRuleGovernanceUsefulnessNoDataAndProjectGuard","Elapsed":0} +{"Time":"2026-07-11T03:35:58.5773207+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRuleGovernanceReadToolsRequireProjectForNonAdminAllProjectReads"} +{"Time":"2026-07-11T03:35:58.5773207+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRuleGovernanceReadToolsRequireProjectForNonAdminAllProjectReads","Output":"=== RUN TestRuleGovernanceReadToolsRequireProjectForNonAdminAllProjectReads\n"} +{"Time":"2026-07-11T03:35:58.5773207+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRuleGovernanceReadToolsRequireProjectForNonAdminAllProjectReads","Output":"--- PASS: TestRuleGovernanceReadToolsRequireProjectForNonAdminAllProjectReads (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.5773207+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRuleGovernanceReadToolsRequireProjectForNonAdminAllProjectReads","Elapsed":0} +{"Time":"2026-07-11T03:35:58.5773207+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRuleGovernanceReadToolsNilStoreErrors"} +{"Time":"2026-07-11T03:35:58.5773207+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRuleGovernanceReadToolsNilStoreErrors","Output":"=== RUN TestRuleGovernanceReadToolsNilStoreErrors\n"} +{"Time":"2026-07-11T03:35:58.5773207+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRuleGovernanceReadToolsNilStoreErrors","Output":"--- PASS: TestRuleGovernanceReadToolsNilStoreErrors (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.5773207+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRuleGovernanceReadToolsNilStoreErrors","Elapsed":0} +{"Time":"2026-07-11T03:35:58.5773207+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRuleGovernanceReadToolsRequireIdentityWhenAuthEnabled"} +{"Time":"2026-07-11T03:35:58.5773207+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRuleGovernanceReadToolsRequireIdentityWhenAuthEnabled","Output":"=== RUN TestRuleGovernanceReadToolsRequireIdentityWhenAuthEnabled\n"} +{"Time":"2026-07-11T03:35:58.5773207+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRuleGovernanceReadToolsRequireIdentityWhenAuthEnabled","Output":"--- PASS: TestRuleGovernanceReadToolsRequireIdentityWhenAuthEnabled (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.5773207+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRuleGovernanceReadToolsRequireIdentityWhenAuthEnabled","Elapsed":0} +{"Time":"2026-07-11T03:35:58.5773207+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRuleGovernanceReadToolsRejectZeroIdentity"} +{"Time":"2026-07-11T03:35:58.5773207+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRuleGovernanceReadToolsRejectZeroIdentity","Output":"=== RUN TestRuleGovernanceReadToolsRejectZeroIdentity\n"} +{"Time":"2026-07-11T03:35:58.5773207+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRuleGovernanceReadToolsRejectZeroIdentity","Output":"--- PASS: TestRuleGovernanceReadToolsRejectZeroIdentity (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.5773207+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRuleGovernanceReadToolsRejectZeroIdentity","Elapsed":0} +{"Time":"2026-07-11T03:35:58.5773207+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRuleGovernanceMutationToolsRequireAdmin"} +{"Time":"2026-07-11T03:35:58.5773207+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRuleGovernanceMutationToolsRequireAdmin","Output":"=== RUN TestRuleGovernanceMutationToolsRequireAdmin\n"} +{"Time":"2026-07-11T03:35:58.5773207+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRuleGovernanceMutationToolsRequireAdmin","Output":"--- PASS: TestRuleGovernanceMutationToolsRequireAdmin (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.5773207+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRuleGovernanceMutationToolsRequireAdmin","Elapsed":0} +{"Time":"2026-07-11T03:35:58.5773207+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRuleGovernanceTransitionToolUsesStateMachineStore"} +{"Time":"2026-07-11T03:35:58.5773207+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRuleGovernanceTransitionToolUsesStateMachineStore","Output":"=== RUN TestRuleGovernanceTransitionToolUsesStateMachineStore\n"} +{"Time":"2026-07-11T03:35:58.5778205+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRuleGovernanceTransitionToolUsesStateMachineStore","Output":"--- PASS: TestRuleGovernanceTransitionToolUsesStateMachineStore (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.5778205+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRuleGovernanceTransitionToolUsesStateMachineStore","Elapsed":0} +{"Time":"2026-07-11T03:35:58.5778205+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRuleGovernancePinSnapshotAndRollbackUseRuleGovernanceSnapshots"} +{"Time":"2026-07-11T03:35:58.5778205+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRuleGovernancePinSnapshotAndRollbackUseRuleGovernanceSnapshots","Output":"=== RUN TestRuleGovernancePinSnapshotAndRollbackUseRuleGovernanceSnapshots\n"} +{"Time":"2026-07-11T03:35:58.5778205+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRuleGovernancePinSnapshotAndRollbackUseRuleGovernanceSnapshots","Output":"--- PASS: TestRuleGovernancePinSnapshotAndRollbackUseRuleGovernanceSnapshots (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.5778205+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRuleGovernancePinSnapshotAndRollbackUseRuleGovernanceSnapshots","Elapsed":0} +{"Time":"2026-07-11T03:35:58.5778205+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRuleGovernanceRollbackReturnsStructuredConflictResult"} +{"Time":"2026-07-11T03:35:58.5778205+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRuleGovernanceRollbackReturnsStructuredConflictResult","Output":"=== RUN TestRuleGovernanceRollbackReturnsStructuredConflictResult\n"} +{"Time":"2026-07-11T03:35:58.5778205+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRuleGovernanceRollbackReturnsStructuredConflictResult","Output":"--- PASS: TestRuleGovernanceRollbackReturnsStructuredConflictResult (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.5778205+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRuleGovernanceRollbackReturnsStructuredConflictResult","Elapsed":0} +{"Time":"2026-07-11T03:35:58.5778205+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSettings_SetRequiresAdmin"} +{"Time":"2026-07-11T03:35:58.5778205+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSettings_SetRequiresAdmin","Output":"=== RUN TestSettings_SetRequiresAdmin\n"} +{"Time":"2026-07-11T03:35:58.5778205+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSettings_SetRequiresAdmin","Output":"--- PASS: TestSettings_SetRequiresAdmin (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.5778205+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSettings_SetRequiresAdmin","Elapsed":0} +{"Time":"2026-07-11T03:35:58.5778205+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSettings_DeleteRequiresAdmin"} +{"Time":"2026-07-11T03:35:58.5778205+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSettings_DeleteRequiresAdmin","Output":"=== RUN TestSettings_DeleteRequiresAdmin\n"} +{"Time":"2026-07-11T03:35:58.5778205+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSettings_DeleteRequiresAdmin","Output":"--- PASS: TestSettings_DeleteRequiresAdmin (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.5778205+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSettings_DeleteRequiresAdmin","Elapsed":0} +{"Time":"2026-07-11T03:35:58.5778205+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSettings_SetMissingArgs"} +{"Time":"2026-07-11T03:35:58.5778205+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSettings_SetMissingArgs","Output":"=== RUN TestSettings_SetMissingArgs\n"} +{"Time":"2026-07-11T03:35:58.5778205+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSettings_SetMissingArgs","Output":"--- PASS: TestSettings_SetMissingArgs (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.5778205+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSettings_SetMissingArgs","Elapsed":0} +{"Time":"2026-07-11T03:35:58.5778205+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSettings_UnknownAction"} +{"Time":"2026-07-11T03:35:58.5778205+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSettings_UnknownAction","Output":"=== RUN TestSettings_UnknownAction\n"} +{"Time":"2026-07-11T03:35:58.5778205+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSettings_UnknownAction","Output":"--- PASS: TestSettings_UnknownAction (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.5778205+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSettings_UnknownAction","Elapsed":0} +{"Time":"2026-07-11T03:35:58.5778205+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestIsSecretSettingKey"} +{"Time":"2026-07-11T03:35:58.5778205+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestIsSecretSettingKey","Output":"=== RUN TestIsSecretSettingKey\n"} +{"Time":"2026-07-11T03:35:58.5778205+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestIsSecretSettingKey","Output":"--- PASS: TestIsSecretSettingKey (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.5778205+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestIsSecretSettingKey","Elapsed":0} +{"Time":"2026-07-11T03:35:58.5778205+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRequireAdmin"} +{"Time":"2026-07-11T03:35:58.5778205+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRequireAdmin","Output":"=== RUN TestRequireAdmin\n"} +{"Time":"2026-07-11T03:35:58.5778205+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRequireAdmin","Output":"--- PASS: TestRequireAdmin (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.5778205+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRequireAdmin","Elapsed":0} +{"Time":"2026-07-11T03:35:58.5778205+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStateToolsAdvertisedOnlyWhenNativeStoreIsReachable"} +{"Time":"2026-07-11T03:35:58.5778205+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStateToolsAdvertisedOnlyWhenNativeStoreIsReachable","Output":"=== RUN TestStateToolsAdvertisedOnlyWhenNativeStoreIsReachable\n"} +{"Time":"2026-07-11T03:35:58.5783206+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStateToolsAdvertisedOnlyWhenNativeStoreIsReachable","Output":"--- PASS: TestStateToolsAdvertisedOnlyWhenNativeStoreIsReachable (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.5783206+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStateToolsAdvertisedOnlyWhenNativeStoreIsReachable","Elapsed":0} +{"Time":"2026-07-11T03:35:58.5783206+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSetStateToolWritesNativeSessionAndProjectState"} +{"Time":"2026-07-11T03:35:58.5783206+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSetStateToolWritesNativeSessionAndProjectState","Output":"=== RUN TestSetStateToolWritesNativeSessionAndProjectState\n"} +{"Time":"2026-07-11T03:35:58.5783206+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSetStateToolWritesNativeSessionAndProjectState","Output":"--- PASS: TestSetStateToolWritesNativeSessionAndProjectState (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.5783206+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSetStateToolWritesNativeSessionAndProjectState","Elapsed":0} +{"Time":"2026-07-11T03:35:58.5783206+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSetStateToolRejectsNonAgentProjectWriter"} +{"Time":"2026-07-11T03:35:58.5783206+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSetStateToolRejectsNonAgentProjectWriter","Output":"=== RUN TestSetStateToolRejectsNonAgentProjectWriter\n"} +{"Time":"2026-07-11T03:35:58.5783206+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSetStateToolRejectsNonAgentProjectWriter","Output":"--- PASS: TestSetStateToolRejectsNonAgentProjectWriter (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.5783206+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSetStateToolRejectsNonAgentProjectWriter","Elapsed":0} +{"Time":"2026-07-11T03:35:58.5783206+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSetStateToolRejectsNonObjectSessionSlots"} +{"Time":"2026-07-11T03:35:58.5783206+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSetStateToolRejectsNonObjectSessionSlots","Output":"=== RUN TestSetStateToolRejectsNonObjectSessionSlots\n"} +{"Time":"2026-07-11T03:35:58.5783206+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSetStateToolRejectsNonObjectSessionSlots","Output":"--- PASS: TestSetStateToolRejectsNonObjectSessionSlots (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.5783206+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSetStateToolRejectsNonObjectSessionSlots","Elapsed":0} +{"Time":"2026-07-11T03:35:58.5783206+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSetStateToolRejectsSessionPayloadOver32KB"} +{"Time":"2026-07-11T03:35:58.5783206+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSetStateToolRejectsSessionPayloadOver32KB","Output":"=== RUN TestSetStateToolRejectsSessionPayloadOver32KB\n"} +{"Time":"2026-07-11T03:35:58.579321+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSetStateToolRejectsSessionPayloadOver32KB","Output":"--- PASS: TestSetStateToolRejectsSessionPayloadOver32KB (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.579321+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSetStateToolRejectsSessionPayloadOver32KB","Elapsed":0} +{"Time":"2026-07-11T03:35:58.579321+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSetStateThenGetStateResumeUsesServerCallPath"} +{"Time":"2026-07-11T03:35:58.579321+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSetStateThenGetStateResumeUsesServerCallPath","Output":"=== RUN TestSetStateThenGetStateResumeUsesServerCallPath\n"} +{"Time":"2026-07-11T03:35:58.579321+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSetStateThenGetStateResumeUsesServerCallPath","Output":"--- PASS: TestSetStateThenGetStateResumeUsesServerCallPath (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.579321+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSetStateThenGetStateResumeUsesServerCallPath","Elapsed":0} +{"Time":"2026-07-11T03:35:58.579321+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetStateToolSessionDoesNotRequirePrincipal"} +{"Time":"2026-07-11T03:35:58.579321+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetStateToolSessionDoesNotRequirePrincipal","Output":"=== RUN TestGetStateToolSessionDoesNotRequirePrincipal\n"} +{"Time":"2026-07-11T03:35:58.579321+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetStateToolSessionDoesNotRequirePrincipal","Output":"--- PASS: TestGetStateToolSessionDoesNotRequirePrincipal (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.579321+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetStateToolSessionDoesNotRequirePrincipal","Elapsed":0} +{"Time":"2026-07-11T03:35:58.579321+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetStateToolProjectDoesNotRequirePrincipal"} +{"Time":"2026-07-11T03:35:58.579321+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetStateToolProjectDoesNotRequirePrincipal","Output":"=== RUN TestGetStateToolProjectDoesNotRequirePrincipal\n"} +{"Time":"2026-07-11T03:35:58.579321+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetStateToolProjectDoesNotRequirePrincipal","Output":"--- PASS: TestGetStateToolProjectDoesNotRequirePrincipal (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.579321+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetStateToolProjectDoesNotRequirePrincipal","Elapsed":0} +{"Time":"2026-07-11T03:35:58.579321+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetStateToolResumeReturnsNativePacket"} +{"Time":"2026-07-11T03:35:58.579321+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetStateToolResumeReturnsNativePacket","Output":"=== RUN TestGetStateToolResumeReturnsNativePacket\n"} +{"Time":"2026-07-11T03:35:58.579321+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetStateToolResumeReturnsNativePacket","Output":"--- PASS: TestGetStateToolResumeReturnsNativePacket (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.579321+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetStateToolResumeReturnsNativePacket","Elapsed":0} +{"Time":"2026-07-11T03:35:58.579321+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetStateToolResumeSupportsExplicitProjectOnlyScope"} +{"Time":"2026-07-11T03:35:58.579321+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetStateToolResumeSupportsExplicitProjectOnlyScope","Output":"=== RUN TestGetStateToolResumeSupportsExplicitProjectOnlyScope\n"} +{"Time":"2026-07-11T03:35:58.579321+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetStateToolResumeSupportsExplicitProjectOnlyScope","Output":"--- PASS: TestGetStateToolResumeSupportsExplicitProjectOnlyScope (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.579321+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetStateToolResumeSupportsExplicitProjectOnlyScope","Elapsed":0} +{"Time":"2026-07-11T03:35:58.579321+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetStateToolResumeRejectsFallbackMasqueradingAsNative"} +{"Time":"2026-07-11T03:35:58.579321+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetStateToolResumeRejectsFallbackMasqueradingAsNative","Output":"=== RUN TestGetStateToolResumeRejectsFallbackMasqueradingAsNative\n"} +{"Time":"2026-07-11T03:35:58.579321+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetStateToolResumeRejectsFallbackMasqueradingAsNative","Output":"--- PASS: TestGetStateToolResumeRejectsFallbackMasqueradingAsNative (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.579321+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetStateToolResumeRejectsFallbackMasqueradingAsNative","Elapsed":0} +{"Time":"2026-07-11T03:35:58.579321+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetStateToolResumeRejectsMissingEvidenceRefs"} +{"Time":"2026-07-11T03:35:58.579321+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetStateToolResumeRejectsMissingEvidenceRefs","Output":"=== RUN TestGetStateToolResumeRejectsMissingEvidenceRefs\n"} +{"Time":"2026-07-11T03:35:58.579321+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetStateToolResumeRejectsMissingEvidenceRefs","Output":"--- PASS: TestGetStateToolResumeRejectsMissingEvidenceRefs (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.579321+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetStateToolResumeRejectsMissingEvidenceRefs","Elapsed":0} +{"Time":"2026-07-11T03:35:58.5798208+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetStateToolResumeRejectsPacketIdentityMismatch"} +{"Time":"2026-07-11T03:35:58.5798208+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetStateToolResumeRejectsPacketIdentityMismatch","Output":"=== RUN TestGetStateToolResumeRejectsPacketIdentityMismatch\n"} +{"Time":"2026-07-11T03:35:58.5798208+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetStateToolResumeRejectsPacketIdentityMismatch","Output":"--- PASS: TestGetStateToolResumeRejectsPacketIdentityMismatch (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.5798208+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetStateToolResumeRejectsPacketIdentityMismatch","Elapsed":0} +{"Time":"2026-07-11T03:35:58.5798208+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetStateToolResumeRejectsAdditionalIdentityMismatches"} +{"Time":"2026-07-11T03:35:58.5798208+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetStateToolResumeRejectsAdditionalIdentityMismatches","Output":"=== RUN TestGetStateToolResumeRejectsAdditionalIdentityMismatches\n"} +{"Time":"2026-07-11T03:35:58.5798208+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetStateToolResumeRejectsAdditionalIdentityMismatches/project_mismatch"} +{"Time":"2026-07-11T03:35:58.5798208+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetStateToolResumeRejectsAdditionalIdentityMismatches/project_mismatch","Output":"=== RUN TestGetStateToolResumeRejectsAdditionalIdentityMismatches/project_mismatch\n"} +{"Time":"2026-07-11T03:35:58.5798208+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetStateToolResumeRejectsAdditionalIdentityMismatches/project_mismatch","Output":"--- PASS: TestGetStateToolResumeRejectsAdditionalIdentityMismatches/project_mismatch (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.5798208+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetStateToolResumeRejectsAdditionalIdentityMismatches/project_mismatch","Elapsed":0} +{"Time":"2026-07-11T03:35:58.5798208+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetStateToolResumeRejectsAdditionalIdentityMismatches/session_mismatch"} +{"Time":"2026-07-11T03:35:58.5798208+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetStateToolResumeRejectsAdditionalIdentityMismatches/session_mismatch","Output":"=== RUN TestGetStateToolResumeRejectsAdditionalIdentityMismatches/session_mismatch\n"} +{"Time":"2026-07-11T03:35:58.5798208+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetStateToolResumeRejectsAdditionalIdentityMismatches/session_mismatch","Output":"--- PASS: TestGetStateToolResumeRejectsAdditionalIdentityMismatches/session_mismatch (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.5798208+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetStateToolResumeRejectsAdditionalIdentityMismatches/session_mismatch","Elapsed":0} +{"Time":"2026-07-11T03:35:58.5798208+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetStateToolResumeRejectsAdditionalIdentityMismatches/goal_mismatch"} +{"Time":"2026-07-11T03:35:58.5798208+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetStateToolResumeRejectsAdditionalIdentityMismatches/goal_mismatch","Output":"=== RUN TestGetStateToolResumeRejectsAdditionalIdentityMismatches/goal_mismatch\n"} +{"Time":"2026-07-11T03:35:58.5798208+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetStateToolResumeRejectsAdditionalIdentityMismatches/goal_mismatch","Output":"--- PASS: TestGetStateToolResumeRejectsAdditionalIdentityMismatches/goal_mismatch (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.5798208+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetStateToolResumeRejectsAdditionalIdentityMismatches/goal_mismatch","Elapsed":0} +{"Time":"2026-07-11T03:35:58.5798208+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetStateToolResumeRejectsAdditionalIdentityMismatches/task_mismatch"} +{"Time":"2026-07-11T03:35:58.5798208+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetStateToolResumeRejectsAdditionalIdentityMismatches/task_mismatch","Output":"=== RUN TestGetStateToolResumeRejectsAdditionalIdentityMismatches/task_mismatch\n"} +{"Time":"2026-07-11T03:35:58.5798208+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetStateToolResumeRejectsAdditionalIdentityMismatches/task_mismatch","Output":"--- PASS: TestGetStateToolResumeRejectsAdditionalIdentityMismatches/task_mismatch (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.5798208+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetStateToolResumeRejectsAdditionalIdentityMismatches/task_mismatch","Elapsed":0} +{"Time":"2026-07-11T03:35:58.5798208+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetStateToolResumeRejectsAdditionalIdentityMismatches/missing_next_action_kind"} +{"Time":"2026-07-11T03:35:58.5798208+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetStateToolResumeRejectsAdditionalIdentityMismatches/missing_next_action_kind","Output":"=== RUN TestGetStateToolResumeRejectsAdditionalIdentityMismatches/missing_next_action_kind\n"} +{"Time":"2026-07-11T03:35:58.5798208+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetStateToolResumeRejectsAdditionalIdentityMismatches/missing_next_action_kind","Output":"--- PASS: TestGetStateToolResumeRejectsAdditionalIdentityMismatches/missing_next_action_kind (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.5798208+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetStateToolResumeRejectsAdditionalIdentityMismatches/missing_next_action_kind","Elapsed":0} +{"Time":"2026-07-11T03:35:58.5798208+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetStateToolResumeRejectsAdditionalIdentityMismatches/missing_next_action_command"} +{"Time":"2026-07-11T03:35:58.5798208+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetStateToolResumeRejectsAdditionalIdentityMismatches/missing_next_action_command","Output":"=== RUN TestGetStateToolResumeRejectsAdditionalIdentityMismatches/missing_next_action_command\n"} +{"Time":"2026-07-11T03:35:58.5798208+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetStateToolResumeRejectsAdditionalIdentityMismatches/missing_next_action_command","Output":"--- PASS: TestGetStateToolResumeRejectsAdditionalIdentityMismatches/missing_next_action_command (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.5798208+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetStateToolResumeRejectsAdditionalIdentityMismatches/missing_next_action_command","Elapsed":0} +{"Time":"2026-07-11T03:35:58.5798208+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetStateToolResumeRejectsAdditionalIdentityMismatches/missing_next_verification_kind"} +{"Time":"2026-07-11T03:35:58.5798208+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetStateToolResumeRejectsAdditionalIdentityMismatches/missing_next_verification_kind","Output":"=== RUN TestGetStateToolResumeRejectsAdditionalIdentityMismatches/missing_next_verification_kind\n"} +{"Time":"2026-07-11T03:35:58.5798208+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetStateToolResumeRejectsAdditionalIdentityMismatches/missing_next_verification_kind","Output":"--- PASS: TestGetStateToolResumeRejectsAdditionalIdentityMismatches/missing_next_verification_kind (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.5798208+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetStateToolResumeRejectsAdditionalIdentityMismatches/missing_next_verification_kind","Elapsed":0} +{"Time":"2026-07-11T03:35:58.5798208+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetStateToolResumeRejectsAdditionalIdentityMismatches/missing_next_verification_command"} +{"Time":"2026-07-11T03:35:58.5798208+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetStateToolResumeRejectsAdditionalIdentityMismatches/missing_next_verification_command","Output":"=== RUN TestGetStateToolResumeRejectsAdditionalIdentityMismatches/missing_next_verification_command\n"} +{"Time":"2026-07-11T03:35:58.5798208+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetStateToolResumeRejectsAdditionalIdentityMismatches/missing_next_verification_command","Output":"--- PASS: TestGetStateToolResumeRejectsAdditionalIdentityMismatches/missing_next_verification_command (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.5798208+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetStateToolResumeRejectsAdditionalIdentityMismatches/missing_next_verification_command","Elapsed":0} +{"Time":"2026-07-11T03:35:58.5798208+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetStateToolResumeRejectsAdditionalIdentityMismatches","Output":"--- PASS: TestGetStateToolResumeRejectsAdditionalIdentityMismatches (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.5798208+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetStateToolResumeRejectsAdditionalIdentityMismatches","Elapsed":0} +{"Time":"2026-07-11T03:35:58.5798208+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetStateToolRejectsFilesystemFallbackOption"} +{"Time":"2026-07-11T03:35:58.5798208+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetStateToolRejectsFilesystemFallbackOption","Output":"=== RUN TestGetStateToolRejectsFilesystemFallbackOption\n"} +{"Time":"2026-07-11T03:35:58.5798208+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetStateToolRejectsFilesystemFallbackOption","Output":"--- PASS: TestGetStateToolRejectsFilesystemFallbackOption (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.5798208+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetStateToolRejectsFilesystemFallbackOption","Elapsed":0} +{"Time":"2026-07-11T03:35:58.5798208+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetStateToolResumeRequiresPrincipal"} +{"Time":"2026-07-11T03:35:58.5798208+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetStateToolResumeRequiresPrincipal","Output":"=== RUN TestGetStateToolResumeRequiresPrincipal\n"} +{"Time":"2026-07-11T03:35:58.5798208+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetStateToolResumeRequiresPrincipal","Output":"--- PASS: TestGetStateToolResumeRequiresPrincipal (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.5798208+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetStateToolResumeRequiresPrincipal","Elapsed":0} +{"Time":"2026-07-11T03:35:58.5798208+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetStateToolResumeDoesNotInjectContextProjectWhenOmitted"} +{"Time":"2026-07-11T03:35:58.5798208+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetStateToolResumeDoesNotInjectContextProjectWhenOmitted","Output":"=== RUN TestGetStateToolResumeDoesNotInjectContextProjectWhenOmitted\n"} +{"Time":"2026-07-11T03:35:58.5798208+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetStateToolResumeDoesNotInjectContextProjectWhenOmitted","Output":"--- PASS: TestGetStateToolResumeDoesNotInjectContextProjectWhenOmitted (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.5798208+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetStateToolResumeDoesNotInjectContextProjectWhenOmitted","Elapsed":0} +{"Time":"2026-07-11T03:35:58.5798208+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTemporalTruthToolAdvertisedWhenProviderWiredAndFlagOn"} +{"Time":"2026-07-11T03:35:58.5798208+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTemporalTruthToolAdvertisedWhenProviderWiredAndFlagOn","Output":"=== RUN TestTemporalTruthToolAdvertisedWhenProviderWiredAndFlagOn\n"} +{"Time":"2026-07-11T03:35:58.5803244+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTemporalTruthToolAdvertisedWhenProviderWiredAndFlagOn","Output":"--- PASS: TestTemporalTruthToolAdvertisedWhenProviderWiredAndFlagOn (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.5803244+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTemporalTruthToolAdvertisedWhenProviderWiredAndFlagOn","Elapsed":0} +{"Time":"2026-07-11T03:35:58.5803244+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTemporalTruthRefreshToolAdvertisedWhenProviderWiredAndFlagOn"} +{"Time":"2026-07-11T03:35:58.5803244+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTemporalTruthRefreshToolAdvertisedWhenProviderWiredAndFlagOn","Output":"=== RUN TestTemporalTruthRefreshToolAdvertisedWhenProviderWiredAndFlagOn\n"} +{"Time":"2026-07-11T03:35:58.5803244+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTemporalTruthRefreshToolAdvertisedWhenProviderWiredAndFlagOn","Output":"--- PASS: TestTemporalTruthRefreshToolAdvertisedWhenProviderWiredAndFlagOn (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.5803244+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTemporalTruthRefreshToolAdvertisedWhenProviderWiredAndFlagOn","Elapsed":0} +{"Time":"2026-07-11T03:35:58.5803244+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTemporalTruthToolsAbsentWhenFlagOff"} +{"Time":"2026-07-11T03:35:58.5803244+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTemporalTruthToolsAbsentWhenFlagOff","Output":"=== RUN TestTemporalTruthToolsAbsentWhenFlagOff\n"} +{"Time":"2026-07-11T03:35:58.5803244+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTemporalTruthToolsAbsentWhenFlagOff","Output":"--- PASS: TestTemporalTruthToolsAbsentWhenFlagOff (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.5803244+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTemporalTruthToolsAbsentWhenFlagOff","Elapsed":0} +{"Time":"2026-07-11T03:35:58.5803244+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTemporalTruthDirectCallFailsClosedWhenFeatureGateUnsatisfied"} +{"Time":"2026-07-11T03:35:58.5803244+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTemporalTruthDirectCallFailsClosedWhenFeatureGateUnsatisfied","Output":"=== RUN TestTemporalTruthDirectCallFailsClosedWhenFeatureGateUnsatisfied\n"} +{"Time":"2026-07-11T03:35:58.5803244+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTemporalTruthDirectCallFailsClosedWhenFeatureGateUnsatisfied","Output":"{\"level\":\"error\",\"error\":\"temporal truth feature flag required\",\"tool\":\"temporal_truth\",\"args\":\"{\\\"fact_id\\\":\\\"42\\\",\\\"project\\\":\\\"engram\\\"}\",\"time\":\"2026-07-11T03:35:58+03:00\",\"message\":\"Tool call failed\"}\n"} +{"Time":"2026-07-11T03:35:58.5803244+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTemporalTruthDirectCallFailsClosedWhenFeatureGateUnsatisfied","Output":"{\"level\":\"error\",\"error\":\"temporal truth provider not configured\",\"tool\":\"temporal_truth\",\"args\":\"{\\\"fact_id\\\":\\\"42\\\",\\\"project\\\":\\\"engram\\\"}\",\"time\":\"2026-07-11T03:35:58+03:00\",\"message\":\"Tool call failed\"}\n"} +{"Time":"2026-07-11T03:35:58.5803244+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTemporalTruthDirectCallFailsClosedWhenFeatureGateUnsatisfied","Output":"--- PASS: TestTemporalTruthDirectCallFailsClosedWhenFeatureGateUnsatisfied (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.5803244+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTemporalTruthDirectCallFailsClosedWhenFeatureGateUnsatisfied","Elapsed":0} +{"Time":"2026-07-11T03:35:58.5803244+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTemporalTruthRefreshDirectCallFailsClosedWhenFeatureGateUnsatisfied"} +{"Time":"2026-07-11T03:35:58.5803244+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTemporalTruthRefreshDirectCallFailsClosedWhenFeatureGateUnsatisfied","Output":"=== RUN TestTemporalTruthRefreshDirectCallFailsClosedWhenFeatureGateUnsatisfied\n"} +{"Time":"2026-07-11T03:35:58.5803244+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTemporalTruthRefreshDirectCallFailsClosedWhenFeatureGateUnsatisfied","Output":"{\"level\":\"error\",\"error\":\"temporal truth feature flag required\",\"tool\":\"temporal_truth_refresh\",\"args\":\"{\\\"project\\\":\\\"engram\\\"}\",\"time\":\"2026-07-11T03:35:58+03:00\",\"message\":\"Tool call failed\"}\n"} +{"Time":"2026-07-11T03:35:58.5803244+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTemporalTruthRefreshDirectCallFailsClosedWhenFeatureGateUnsatisfied","Output":"{\"level\":\"error\",\"error\":\"temporal truth provider not configured\",\"tool\":\"temporal_truth_refresh\",\"args\":\"{\\\"project\\\":\\\"engram\\\"}\",\"time\":\"2026-07-11T03:35:58+03:00\",\"message\":\"Tool call failed\"}\n"} +{"Time":"2026-07-11T03:35:58.5803244+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTemporalTruthRefreshDirectCallFailsClosedWhenFeatureGateUnsatisfied","Output":"--- PASS: TestTemporalTruthRefreshDirectCallFailsClosedWhenFeatureGateUnsatisfied (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.5803244+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTemporalTruthRefreshDirectCallFailsClosedWhenFeatureGateUnsatisfied","Elapsed":0} +{"Time":"2026-07-11T03:35:58.5803244+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleTemporalTruthReturnsBoundedResponse"} +{"Time":"2026-07-11T03:35:58.5803244+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleTemporalTruthReturnsBoundedResponse","Output":"=== RUN TestHandleTemporalTruthReturnsBoundedResponse\n"} +{"Time":"2026-07-11T03:35:58.5808217+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleTemporalTruthReturnsBoundedResponse","Output":"--- PASS: TestHandleTemporalTruthReturnsBoundedResponse (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.5808217+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleTemporalTruthReturnsBoundedResponse","Elapsed":0} +{"Time":"2026-07-11T03:35:58.5808217+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleTemporalTruthRefreshReturnsAdmissionResult"} +{"Time":"2026-07-11T03:35:58.5808217+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleTemporalTruthRefreshReturnsAdmissionResult","Output":"=== RUN TestHandleTemporalTruthRefreshReturnsAdmissionResult\n"} +{"Time":"2026-07-11T03:35:58.5808217+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleTemporalTruthRefreshReturnsAdmissionResult","Output":"--- PASS: TestHandleTemporalTruthRefreshReturnsAdmissionResult (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.5808217+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleTemporalTruthRefreshReturnsAdmissionResult","Elapsed":0} +{"Time":"2026-07-11T03:35:58.5808217+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleTemporalTruthRefreshRequiresProject"} +{"Time":"2026-07-11T03:35:58.5808217+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleTemporalTruthRefreshRequiresProject","Output":"=== RUN TestHandleTemporalTruthRefreshRequiresProject\n"} +{"Time":"2026-07-11T03:35:58.5808217+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleTemporalTruthRefreshRequiresProject","Output":"--- PASS: TestHandleTemporalTruthRefreshRequiresProject (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.5808217+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleTemporalTruthRefreshRequiresProject","Elapsed":0} +{"Time":"2026-07-11T03:35:58.5808217+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleTemporalTruthRequiresProject"} +{"Time":"2026-07-11T03:35:58.5808217+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleTemporalTruthRequiresProject","Output":"=== RUN TestHandleTemporalTruthRequiresProject\n"} +{"Time":"2026-07-11T03:35:58.5808217+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleTemporalTruthRequiresProject/missing_project"} +{"Time":"2026-07-11T03:35:58.5808217+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleTemporalTruthRequiresProject/missing_project","Output":"=== RUN TestHandleTemporalTruthRequiresProject/missing_project\n"} +{"Time":"2026-07-11T03:35:58.5808217+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleTemporalTruthRequiresProject/missing_project","Output":"--- PASS: TestHandleTemporalTruthRequiresProject/missing_project (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.5808217+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleTemporalTruthRequiresProject/missing_project","Elapsed":0} +{"Time":"2026-07-11T03:35:58.5808217+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleTemporalTruthRequiresProject/blank_project"} +{"Time":"2026-07-11T03:35:58.5808217+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleTemporalTruthRequiresProject/blank_project","Output":"=== RUN TestHandleTemporalTruthRequiresProject/blank_project\n"} +{"Time":"2026-07-11T03:35:58.5808217+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleTemporalTruthRequiresProject/blank_project","Output":"--- PASS: TestHandleTemporalTruthRequiresProject/blank_project (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.5808217+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleTemporalTruthRequiresProject/blank_project","Elapsed":0} +{"Time":"2026-07-11T03:35:58.5808217+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleTemporalTruthRequiresProject","Output":"--- PASS: TestHandleTemporalTruthRequiresProject (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.5808217+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleTemporalTruthRequiresProject","Elapsed":0} +{"Time":"2026-07-11T03:35:58.5808217+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleTemporalTruthRejectsInvalidAsOf"} +{"Time":"2026-07-11T03:35:58.5808217+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleTemporalTruthRejectsInvalidAsOf","Output":"=== RUN TestHandleTemporalTruthRejectsInvalidAsOf\n"} +{"Time":"2026-07-11T03:35:58.5808217+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleTemporalTruthRejectsInvalidAsOf","Output":"--- PASS: TestHandleTemporalTruthRejectsInvalidAsOf (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.5808217+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleTemporalTruthRejectsInvalidAsOf","Elapsed":0} +{"Time":"2026-07-11T03:35:58.5808217+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWiring_LifecycleTool_AppearsWhenStoresSetAndFlagOn"} +{"Time":"2026-07-11T03:35:58.5808217+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWiring_LifecycleTool_AppearsWhenStoresSetAndFlagOn","Output":"=== RUN TestWiring_LifecycleTool_AppearsWhenStoresSetAndFlagOn\n"} +{"Time":"2026-07-11T03:35:58.5813214+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWiring_LifecycleTool_AppearsWhenStoresSetAndFlagOn","Output":"--- PASS: TestWiring_LifecycleTool_AppearsWhenStoresSetAndFlagOn (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.5813214+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWiring_LifecycleTool_AppearsWhenStoresSetAndFlagOn","Elapsed":0} +{"Time":"2026-07-11T03:35:58.5813214+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWiring_LifecycleTool_AbsentWhenFlagOff"} +{"Time":"2026-07-11T03:35:58.5813214+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWiring_LifecycleTool_AbsentWhenFlagOff","Output":"=== RUN TestWiring_LifecycleTool_AbsentWhenFlagOff\n"} +{"Time":"2026-07-11T03:35:58.5813214+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWiring_LifecycleTool_AbsentWhenFlagOff","Output":"--- PASS: TestWiring_LifecycleTool_AbsentWhenFlagOff (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.5813214+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWiring_LifecycleTool_AbsentWhenFlagOff","Elapsed":0} +{"Time":"2026-07-11T03:35:58.5813214+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWiring_LifecycleTool_AbsentWhenStoresNil"} +{"Time":"2026-07-11T03:35:58.5813214+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWiring_LifecycleTool_AbsentWhenStoresNil","Output":"=== RUN TestWiring_LifecycleTool_AbsentWhenStoresNil\n"} +{"Time":"2026-07-11T03:35:58.5813214+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWiring_LifecycleTool_AbsentWhenStoresNil","Output":"--- PASS: TestWiring_LifecycleTool_AbsentWhenStoresNil (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.5813214+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWiring_LifecycleTool_AbsentWhenStoresNil","Elapsed":0} +{"Time":"2026-07-11T03:35:58.5813214+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWiring_GraphTool_AppearsWhenStoreSetAndFlagOn"} +{"Time":"2026-07-11T03:35:58.5813214+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWiring_GraphTool_AppearsWhenStoreSetAndFlagOn","Output":"=== RUN TestWiring_GraphTool_AppearsWhenStoreSetAndFlagOn\n"} +{"Time":"2026-07-11T03:35:58.5818214+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWiring_GraphTool_AppearsWhenStoreSetAndFlagOn","Output":"--- PASS: TestWiring_GraphTool_AppearsWhenStoreSetAndFlagOn (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.5818214+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWiring_GraphTool_AppearsWhenStoreSetAndFlagOn","Elapsed":0} +{"Time":"2026-07-11T03:35:58.5818214+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWiring_GraphTool_AbsentWhenFlagOff"} +{"Time":"2026-07-11T03:35:58.5818214+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWiring_GraphTool_AbsentWhenFlagOff","Output":"=== RUN TestWiring_GraphTool_AbsentWhenFlagOff\n"} +{"Time":"2026-07-11T03:35:58.5818214+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWiring_GraphTool_AbsentWhenFlagOff","Output":"--- PASS: TestWiring_GraphTool_AbsentWhenFlagOff (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.5818214+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWiring_GraphTool_AbsentWhenFlagOff","Elapsed":0} +{"Time":"2026-07-11T03:35:58.5818214+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWiring_GraphTool_AbsentWhenStoreNil"} +{"Time":"2026-07-11T03:35:58.5818214+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWiring_GraphTool_AbsentWhenStoreNil","Output":"=== RUN TestWiring_GraphTool_AbsentWhenStoreNil\n"} +{"Time":"2026-07-11T03:35:58.5818214+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWiring_GraphTool_AbsentWhenStoreNil","Output":"--- PASS: TestWiring_GraphTool_AbsentWhenStoreNil (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.5818214+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWiring_GraphTool_AbsentWhenStoreNil","Elapsed":0} +{"Time":"2026-07-11T03:35:58.5818214+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWiring_BothToolsOff_FlagsUnset"} +{"Time":"2026-07-11T03:35:58.5818214+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWiring_BothToolsOff_FlagsUnset","Output":"=== RUN TestWiring_BothToolsOff_FlagsUnset\n"} +{"Time":"2026-07-11T03:35:58.5818214+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWiring_BothToolsOff_FlagsUnset","Output":"--- PASS: TestWiring_BothToolsOff_FlagsUnset (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.5818214+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWiring_BothToolsOff_FlagsUnset","Elapsed":0} +{"Time":"2026-07-11T03:35:58.5818214+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCodeIntelFlag_Off_ToolsAbsentFromList"} +{"Time":"2026-07-11T03:35:58.5818214+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCodeIntelFlag_Off_ToolsAbsentFromList","Output":"=== RUN TestCodeIntelFlag_Off_ToolsAbsentFromList\n"} +{"Time":"2026-07-11T03:35:58.5823218+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCodeIntelFlag_Off_ToolsAbsentFromList","Output":"--- PASS: TestCodeIntelFlag_Off_ToolsAbsentFromList (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.5823218+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCodeIntelFlag_Off_ToolsAbsentFromList","Elapsed":0} +{"Time":"2026-07-11T03:35:58.5823218+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCodeIntelFlag_On_StoreNil_ToolsAbsentFromList"} +{"Time":"2026-07-11T03:35:58.5823218+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCodeIntelFlag_On_StoreNil_ToolsAbsentFromList","Output":"=== RUN TestCodeIntelFlag_On_StoreNil_ToolsAbsentFromList\n"} +{"Time":"2026-07-11T03:35:58.5823218+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCodeIntelFlag_On_StoreNil_ToolsAbsentFromList","Output":"--- PASS: TestCodeIntelFlag_On_StoreNil_ToolsAbsentFromList (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.5823218+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCodeIntelFlag_On_StoreNil_ToolsAbsentFromList","Elapsed":0} +{"Time":"2026-07-11T03:35:58.5823218+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCodeIntelFlag_On_ServerAdvertisesSearchNotStatus"} +{"Time":"2026-07-11T03:35:58.5823218+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCodeIntelFlag_On_ServerAdvertisesSearchNotStatus","Output":"=== RUN TestCodeIntelFlag_On_ServerAdvertisesSearchNotStatus\n"} +{"Time":"2026-07-11T03:35:58.5823218+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCodeIntelFlag_On_ServerAdvertisesSearchNotStatus","Output":"--- PASS: TestCodeIntelFlag_On_ServerAdvertisesSearchNotStatus (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.5823218+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCodeIntelFlag_On_ServerAdvertisesSearchNotStatus","Elapsed":0} +{"Time":"2026-07-11T03:35:58.5823218+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCodebaseSearch_FlagOff_ReturnsError"} +{"Time":"2026-07-11T03:35:58.5823218+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCodebaseSearch_FlagOff_ReturnsError","Output":"=== RUN TestCodebaseSearch_FlagOff_ReturnsError\n"} +{"Time":"2026-07-11T03:35:58.5823218+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCodebaseSearch_FlagOff_ReturnsError","Output":"{\"level\":\"error\",\"error\":\"codebase_search requires ENGRAM_CODE_INTEL_ENABLED=true\",\"tool\":\"codebase_search\",\"args\":\"{\\\"query\\\":\\\"hello\\\",\\\"project\\\":\\\"test\\\"}\",\"time\":\"2026-07-11T03:35:58+03:00\",\"message\":\"Tool call failed\"}\n"} +{"Time":"2026-07-11T03:35:58.5823218+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCodebaseSearch_FlagOff_ReturnsError","Output":"--- PASS: TestCodebaseSearch_FlagOff_ReturnsError (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.5823218+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCodebaseSearch_FlagOff_ReturnsError","Elapsed":0} +{"Time":"2026-07-11T03:35:58.5823218+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRequest_Marshal_Table"} +{"Time":"2026-07-11T03:35:58.5823218+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRequest_Marshal_Table","Output":"=== CONT TestRequest_Marshal_Table\n"} +{"Time":"2026-07-11T03:35:58.5823218+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRequest_Marshal_Table/initialize"} +{"Time":"2026-07-11T03:35:58.5823218+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRequest_Marshal_Table/initialize","Output":"=== RUN TestRequest_Marshal_Table/initialize\n"} +{"Time":"2026-07-11T03:35:58.5823218+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRequest_Marshal_Table/initialize","Output":"=== PAUSE TestRequest_Marshal_Table/initialize\n"} +{"Time":"2026-07-11T03:35:58.5823218+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRequest_Marshal_Table/initialize"} +{"Time":"2026-07-11T03:35:58.5823218+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRequest_Marshal_Table/string_id"} +{"Time":"2026-07-11T03:35:58.5823218+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRequest_Marshal_Table/string_id","Output":"=== RUN TestRequest_Marshal_Table/string_id\n"} +{"Time":"2026-07-11T03:35:58.5823218+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRequest_Marshal_Table/string_id","Output":"=== PAUSE TestRequest_Marshal_Table/string_id\n"} +{"Time":"2026-07-11T03:35:58.5823218+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRequest_Marshal_Table/string_id"} +{"Time":"2026-07-11T03:35:58.5823218+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRequest_Marshal_Table/with_params"} +{"Time":"2026-07-11T03:35:58.5823218+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRequest_Marshal_Table/with_params","Output":"=== RUN TestRequest_Marshal_Table/with_params\n"} +{"Time":"2026-07-11T03:35:58.5823218+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRequest_Marshal_Table/with_params","Output":"=== PAUSE TestRequest_Marshal_Table/with_params\n"} +{"Time":"2026-07-11T03:35:58.5823218+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRequest_Marshal_Table/with_params"} +{"Time":"2026-07-11T03:35:58.5823218+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRequest_Marshal_Table/null_id"} +{"Time":"2026-07-11T03:35:58.5823218+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRequest_Marshal_Table/null_id","Output":"=== RUN TestRequest_Marshal_Table/null_id\n"} +{"Time":"2026-07-11T03:35:58.5828216+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRequest_Marshal_Table/null_id","Output":"=== PAUSE TestRequest_Marshal_Table/null_id\n"} +{"Time":"2026-07-11T03:35:58.5828216+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRequest_Marshal_Table/null_id"} +{"Time":"2026-07-11T03:35:58.5828216+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSanitizeToolCallArgs_OtherToolsStillRedactSecrets"} +{"Time":"2026-07-11T03:35:58.5828216+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSanitizeToolCallArgs_OtherToolsStillRedactSecrets","Output":"=== CONT TestSanitizeToolCallArgs_OtherToolsStillRedactSecrets\n"} +{"Time":"2026-07-11T03:35:58.5828216+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSanitizeToolCallArgs_OtherToolsStillRedactSecrets","Output":"--- PASS: TestSanitizeToolCallArgs_OtherToolsStillRedactSecrets (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.5828216+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSanitizeToolCallArgs_OtherToolsStillRedactSecrets","Elapsed":0} +{"Time":"2026-07-11T03:35:58.5828216+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryToolSchema_T005"} +{"Time":"2026-07-11T03:35:58.5828216+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryToolSchema_T005","Output":"=== CONT TestRecallMemoryToolSchema_T005\n"} +{"Time":"2026-07-11T03:35:58.5828216+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryToolSchema_T005","Output":"--- PASS: TestRecallMemoryToolSchema_T005 (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.5828216+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryToolSchema_T005","Elapsed":0} +{"Time":"2026-07-11T03:35:58.5828216+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryToolSchema_T005"} +{"Time":"2026-07-11T03:35:58.5828216+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryToolSchema_T005","Output":"=== CONT TestStoreMemoryToolSchema_T005\n"} +{"Time":"2026-07-11T03:35:58.5838211+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryToolSchema_T005","Output":"--- PASS: TestStoreMemoryToolSchema_T005 (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.5838211+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryToolSchema_T005","Elapsed":0} +{"Time":"2026-07-11T03:35:58.5838211+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryDomainPolicy_DomainOwnedRowVisibleToOwner"} +{"Time":"2026-07-11T03:35:58.5838211+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryDomainPolicy_DomainOwnedRowVisibleToOwner","Output":"=== CONT TestRecallMemoryDomainPolicy_DomainOwnedRowVisibleToOwner\n"} +{"Time":"2026-07-11T03:35:58.5838211+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryDomainPolicy_DomainOwnedRowVisibleToOwner","Output":"--- PASS: TestRecallMemoryDomainPolicy_DomainOwnedRowVisibleToOwner (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.5838211+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryDomainPolicy_DomainOwnedRowVisibleToOwner","Elapsed":0} +{"Time":"2026-07-11T03:35:58.5838211+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryDomainPolicy_DomainOwnedRowHiddenFromMismatchedPrincipal"} +{"Time":"2026-07-11T03:35:58.5838211+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryDomainPolicy_DomainOwnedRowHiddenFromMismatchedPrincipal","Output":"=== CONT TestRecallMemoryDomainPolicy_DomainOwnedRowHiddenFromMismatchedPrincipal\n"} +{"Time":"2026-07-11T03:35:58.5838211+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryDomainPolicy_DomainOwnedRowHiddenFromMismatchedPrincipal","Output":"--- PASS: TestRecallMemoryDomainPolicy_DomainOwnedRowHiddenFromMismatchedPrincipal (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.5838211+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryDomainPolicy_DomainOwnedRowHiddenFromMismatchedPrincipal","Elapsed":0} +{"Time":"2026-07-11T03:35:58.5838211+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWriteLintDomainPolicy_DomainOwnedTargetHidden"} +{"Time":"2026-07-11T03:35:58.5838211+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWriteLintDomainPolicy_DomainOwnedTargetHidden","Output":"=== CONT TestWriteLintDomainPolicy_DomainOwnedTargetHidden\n"} +{"Time":"2026-07-11T03:35:58.5838211+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWriteLintDomainPolicy_DomainOwnedTargetHidden","Output":"--- PASS: TestWriteLintDomainPolicy_DomainOwnedTargetHidden (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.5838211+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWriteLintDomainPolicy_DomainOwnedTargetHidden","Elapsed":0} +{"Time":"2026-07-11T03:35:58.5838211+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWriteLintDomainPolicy_DomainOwnedCandidateHidden"} +{"Time":"2026-07-11T03:35:58.5838211+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWriteLintDomainPolicy_DomainOwnedCandidateHidden","Output":"=== CONT TestWriteLintDomainPolicy_DomainOwnedCandidateHidden\n"} +{"Time":"2026-07-11T03:35:58.5838211+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryDomainPolicy_NonEmptyDomainRejectsInvalidPrincipalKind"} +{"Time":"2026-07-11T03:35:58.5838211+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryDomainPolicy_NonEmptyDomainRejectsInvalidPrincipalKind","Output":"=== CONT TestStoreMemoryDomainPolicy_NonEmptyDomainRejectsInvalidPrincipalKind\n"} +{"Time":"2026-07-11T03:35:58.5838211+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWriteLintDomainPolicy_DomainOwnedCandidateHidden","Output":"--- PASS: TestWriteLintDomainPolicy_DomainOwnedCandidateHidden (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.5838211+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWriteLintDomainPolicy_DomainOwnedCandidateHidden","Elapsed":0} +{"Time":"2026-07-11T03:35:58.5838211+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryDomainPolicy_NonEmptyDomainRejectsInvalidPrincipalKind","Output":"--- PASS: TestStoreMemoryDomainPolicy_NonEmptyDomainRejectsInvalidPrincipalKind (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.5838211+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryDomainPolicy_NonEmptyDomainRejectsInvalidPrincipalKind","Elapsed":0} +{"Time":"2026-07-11T03:35:58.5838211+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryDomainPolicy_NonEmptyDomainAllowsPrincipalIdentity"} +{"Time":"2026-07-11T03:35:58.5838211+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryDomainPolicy_NonEmptyDomainAllowsPrincipalIdentity","Output":"=== CONT TestStoreMemoryDomainPolicy_NonEmptyDomainAllowsPrincipalIdentity\n"} +{"Time":"2026-07-11T03:35:58.5838211+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryDomainPolicy_NonEmptyDomainAllowsPrincipalIdentity","Output":"--- PASS: TestStoreMemoryDomainPolicy_NonEmptyDomainAllowsPrincipalIdentity (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.5838211+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryDomainPolicy_NonEmptyDomainAllowsPrincipalIdentity","Elapsed":0} +{"Time":"2026-07-11T03:35:58.5843218+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryDomainPolicy_NonEmptyDomainRequiresPrincipal"} +{"Time":"2026-07-11T03:35:58.5843218+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryDomainPolicy_NonEmptyDomainRequiresPrincipal","Output":"=== CONT TestStoreMemoryDomainPolicy_NonEmptyDomainRequiresPrincipal\n"} +{"Time":"2026-07-11T03:35:58.5843218+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryDomainPolicy_NonEmptyDomainRequiresPrincipal","Output":"--- PASS: TestStoreMemoryDomainPolicy_NonEmptyDomainRequiresPrincipal (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.5843218+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryDomainPolicy_NonEmptyDomainRequiresPrincipal","Elapsed":0} +{"Time":"2026-07-11T03:35:58.5843218+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryDomainPolicy_EmptyDomainLegacyCompatible"} +{"Time":"2026-07-11T03:35:58.5843218+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryDomainPolicy_EmptyDomainLegacyCompatible","Output":"=== CONT TestStoreMemoryDomainPolicy_EmptyDomainLegacyCompatible\n"} +{"Time":"2026-07-11T03:35:58.5843218+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryDomainPolicy_EmptyDomainLegacyCompatible","Output":"--- PASS: TestStoreMemoryDomainPolicy_EmptyDomainLegacyCompatible (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.5843218+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryDomainPolicy_EmptyDomainLegacyCompatible","Elapsed":0} +{"Time":"2026-07-11T03:35:58.5843218+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTierConstants"} +{"Time":"2026-07-11T03:35:58.5843218+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTierConstants","Output":"=== CONT TestTierConstants\n"} +{"Time":"2026-07-11T03:35:58.5843218+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTierConstants","Output":"--- PASS: TestTierConstants (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.5843218+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTierConstants","Elapsed":0} +{"Time":"2026-07-11T03:35:58.5843218+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestJSONRPCErrorCodes_Table"} +{"Time":"2026-07-11T03:35:58.5843218+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestJSONRPCErrorCodes_Table","Output":"=== CONT TestJSONRPCErrorCodes_Table\n"} +{"Time":"2026-07-11T03:35:58.5843218+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestJSONRPCErrorCodes_Table/Parse_error"} +{"Time":"2026-07-11T03:35:58.5843218+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestJSONRPCErrorCodes_Table/Parse_error","Output":"=== RUN TestJSONRPCErrorCodes_Table/Parse_error\n"} +{"Time":"2026-07-11T03:35:58.5843218+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestJSONRPCErrorCodes_Table/Parse_error","Output":"=== PAUSE TestJSONRPCErrorCodes_Table/Parse_error\n"} +{"Time":"2026-07-11T03:35:58.5843218+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestJSONRPCErrorCodes_Table/Parse_error"} +{"Time":"2026-07-11T03:35:58.5843218+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestJSONRPCErrorCodes_Table/Invalid_Request"} +{"Time":"2026-07-11T03:35:58.5843218+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestJSONRPCErrorCodes_Table/Invalid_Request","Output":"=== RUN TestJSONRPCErrorCodes_Table/Invalid_Request\n"} +{"Time":"2026-07-11T03:35:58.5843218+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestJSONRPCErrorCodes_Table/Invalid_Request","Output":"=== PAUSE TestJSONRPCErrorCodes_Table/Invalid_Request\n"} +{"Time":"2026-07-11T03:35:58.5843218+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestJSONRPCErrorCodes_Table/Invalid_Request"} +{"Time":"2026-07-11T03:35:58.5843218+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestJSONRPCErrorCodes_Table/Method_not_found"} +{"Time":"2026-07-11T03:35:58.5843218+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestJSONRPCErrorCodes_Table/Method_not_found","Output":"=== RUN TestJSONRPCErrorCodes_Table/Method_not_found\n"} +{"Time":"2026-07-11T03:35:58.5843218+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestJSONRPCErrorCodes_Table/Method_not_found","Output":"=== PAUSE TestJSONRPCErrorCodes_Table/Method_not_found\n"} +{"Time":"2026-07-11T03:35:58.5843218+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestJSONRPCErrorCodes_Table/Method_not_found"} +{"Time":"2026-07-11T03:35:58.5843218+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestJSONRPCErrorCodes_Table/Invalid_params"} +{"Time":"2026-07-11T03:35:58.5843218+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestJSONRPCErrorCodes_Table/Invalid_params","Output":"=== RUN TestJSONRPCErrorCodes_Table/Invalid_params\n"} +{"Time":"2026-07-11T03:35:58.5843218+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestJSONRPCErrorCodes_Table/Invalid_params","Output":"=== PAUSE TestJSONRPCErrorCodes_Table/Invalid_params\n"} +{"Time":"2026-07-11T03:35:58.5843218+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestJSONRPCErrorCodes_Table/Invalid_params"} +{"Time":"2026-07-11T03:35:58.5843218+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestJSONRPCErrorCodes_Table/Internal_error"} +{"Time":"2026-07-11T03:35:58.5843218+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestJSONRPCErrorCodes_Table/Internal_error","Output":"=== RUN TestJSONRPCErrorCodes_Table/Internal_error\n"} +{"Time":"2026-07-11T03:35:58.5843218+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestJSONRPCErrorCodes_Table/Internal_error","Output":"=== PAUSE TestJSONRPCErrorCodes_Table/Internal_error\n"} +{"Time":"2026-07-11T03:35:58.5843218+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestJSONRPCErrorCodes_Table/Internal_error"} +{"Time":"2026-07-11T03:35:58.5843218+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRun_NotificationNoResponse"} +{"Time":"2026-07-11T03:35:58.5843218+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRun_NotificationNoResponse","Output":"=== CONT TestRun_NotificationNoResponse\n"} +{"Time":"2026-07-11T03:35:58.5843218+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRun_NotificationNoResponse","Output":"{\"level\":\"debug\",\"method\":\"initialized\",\"time\":\"2026-07-11T03:35:58+03:00\",\"message\":\"MCP client initialized\"}\n"} +{"Time":"2026-07-11T03:35:58.5843218+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRun_NotificationNoResponse","Output":"--- PASS: TestRun_NotificationNoResponse (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.5843218+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRun_NotificationNoResponse","Elapsed":0} +{"Time":"2026-07-11T03:35:58.5843218+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRun_MixedValidAndInvalid"} +{"Time":"2026-07-11T03:35:58.5843218+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRun_MixedValidAndInvalid","Output":"=== CONT TestRun_MixedValidAndInvalid\n"} +{"Time":"2026-07-11T03:35:58.5848235+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRun_MixedValidAndInvalid","Output":"--- PASS: TestRun_MixedValidAndInvalid (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.5848235+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRun_MixedValidAndInvalid","Elapsed":0} +{"Time":"2026-07-11T03:35:58.5848235+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsList_PrimaryToolsPresent"} +{"Time":"2026-07-11T03:35:58.5848235+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsList_PrimaryToolsPresent","Output":"=== CONT TestHandleToolsList_PrimaryToolsPresent\n"} +{"Time":"2026-07-11T03:35:58.5848235+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsList_PrimaryToolsPresent","Output":"--- PASS: TestHandleToolsList_PrimaryToolsPresent (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.5848235+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsList_PrimaryToolsPresent","Elapsed":0} +{"Time":"2026-07-11T03:35:58.5848235+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRun_MultipleRequests"} +{"Time":"2026-07-11T03:35:58.5848235+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRun_MultipleRequests","Output":"=== CONT TestRun_MultipleRequests\n"} +{"Time":"2026-07-11T03:35:58.5848235+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRun_MultipleRequests","Output":"--- PASS: TestRun_MultipleRequests (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.5848235+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRun_MultipleRequests","Elapsed":0} +{"Time":"2026-07-11T03:35:58.5848235+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSanitizeToolCallArgs_RememberDirectiveRedactsRawLogArguments"} +{"Time":"2026-07-11T03:35:58.5848235+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSanitizeToolCallArgs_RememberDirectiveRedactsRawLogArguments","Output":"=== CONT TestSanitizeToolCallArgs_RememberDirectiveRedactsRawLogArguments\n"} +{"Time":"2026-07-11T03:35:58.5848235+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSanitizeToolCallArgs_RememberDirectiveRedactsRawLogArguments","Output":"--- PASS: TestSanitizeToolCallArgs_RememberDirectiveRedactsRawLogArguments (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.5848235+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSanitizeToolCallArgs_RememberDirectiveRedactsRawLogArguments","Elapsed":0} +{"Time":"2026-07-11T03:35:58.5848235+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRun_ValidInitialize"} +{"Time":"2026-07-11T03:35:58.5848235+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRun_ValidInitialize","Output":"=== CONT TestRun_ValidInitialize\n"} +{"Time":"2026-07-11T03:35:58.5853241+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRun_ValidInitialize","Output":"--- PASS: TestRun_ValidInitialize (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.5853241+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRun_ValidInitialize","Elapsed":0} +{"Time":"2026-07-11T03:35:58.5853241+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRun_EmptyLinesSkipped"} +{"Time":"2026-07-11T03:35:58.5853241+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRun_EmptyLinesSkipped","Output":"=== CONT TestRun_EmptyLinesSkipped\n"} +{"Time":"2026-07-11T03:35:58.5853241+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRun_EmptyLinesSkipped","Output":"--- PASS: TestRun_EmptyLinesSkipped (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.5853241+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRun_EmptyLinesSkipped","Elapsed":0} +{"Time":"2026-07-11T03:35:58.5853241+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsCall_UnknownTool"} +{"Time":"2026-07-11T03:35:58.5853241+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsCall_UnknownTool","Output":"=== CONT TestHandleToolsCall_UnknownTool\n"} +{"Time":"2026-07-11T03:35:58.5853241+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsCall_UnknownTool","Output":"{\"level\":\"error\",\"error\":\"unknown tool: no_such_tool\",\"tool\":\"no_such_tool\",\"args\":\"{}\",\"time\":\"2026-07-11T03:35:58+03:00\",\"message\":\"Tool call failed\"}\n"} +{"Time":"2026-07-11T03:35:58.5853241+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsCall_UnknownTool","Output":"--- PASS: TestHandleToolsCall_UnknownTool (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.5853241+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsCall_UnknownTool","Elapsed":0} +{"Time":"2026-07-11T03:35:58.5853241+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRun_ParseError"} +{"Time":"2026-07-11T03:35:58.5853241+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRun_ParseError","Output":"=== CONT TestRun_ParseError\n"} +{"Time":"2026-07-11T03:35:58.5853241+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRun_ParseError","Output":"--- PASS: TestRun_ParseError (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.5853241+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRun_ParseError","Elapsed":0} +{"Time":"2026-07-11T03:35:58.5853241+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsCall_EmptyParams"} +{"Time":"2026-07-11T03:35:58.5853241+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsCall_EmptyParams","Output":"=== CONT TestHandleToolsCall_EmptyParams\n"} +{"Time":"2026-07-11T03:35:58.5853241+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsCall_EmptyParams","Output":"{\"level\":\"error\",\"error\":\"unknown tool: \",\"tool\":\"\",\"args\":\"\",\"time\":\"2026-07-11T03:35:58+03:00\",\"message\":\"Tool call failed\"}\n"} +{"Time":"2026-07-11T03:35:58.5853241+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsCall_EmptyParams","Output":"--- PASS: TestHandleToolsCall_EmptyParams (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.5853241+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsCall_EmptyParams","Elapsed":0} +{"Time":"2026-07-11T03:35:58.5853241+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSendError_OutputShape"} +{"Time":"2026-07-11T03:35:58.5853241+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSendError_OutputShape","Output":"=== CONT TestSendError_OutputShape\n"} +{"Time":"2026-07-11T03:35:58.5853241+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSendError_OutputShape","Output":"--- PASS: TestSendError_OutputShape (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.5853241+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSendError_OutputShape","Elapsed":0} +{"Time":"2026-07-11T03:35:58.5853241+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSendResponse_VariousIDTypes"} +{"Time":"2026-07-11T03:35:58.5853241+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSendResponse_VariousIDTypes","Output":"=== CONT TestSendResponse_VariousIDTypes\n"} +{"Time":"2026-07-11T03:35:58.5853241+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSendResponse_VariousIDTypes","Output":"--- PASS: TestSendResponse_VariousIDTypes (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.5853241+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSendResponse_VariousIDTypes","Elapsed":0} +{"Time":"2026-07-11T03:35:58.5853241+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSendResponse_NilID"} +{"Time":"2026-07-11T03:35:58.5853241+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSendResponse_NilID","Output":"=== CONT TestSendResponse_NilID\n"} +{"Time":"2026-07-11T03:35:58.5853241+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSendResponse_NilID","Output":"--- PASS: TestSendResponse_NilID (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.5853241+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSendResponse_NilID","Elapsed":0} +{"Time":"2026-07-11T03:35:58.5853241+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSendResponse_ErrorResponse"} +{"Time":"2026-07-11T03:35:58.5853241+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSendResponse_ErrorResponse","Output":"=== CONT TestSendResponse_ErrorResponse\n"} +{"Time":"2026-07-11T03:35:58.5853241+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSendResponse_ErrorResponse","Output":"--- PASS: TestSendResponse_ErrorResponse (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.5853241+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSendResponse_ErrorResponse","Elapsed":0} +{"Time":"2026-07-11T03:35:58.5853241+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsCall_InvalidParamsJSON"} +{"Time":"2026-07-11T03:35:58.5853241+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsCall_InvalidParamsJSON","Output":"=== CONT TestHandleToolsCall_InvalidParamsJSON\n"} +{"Time":"2026-07-11T03:35:58.5853241+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsCall_InvalidParamsJSON","Output":"--- PASS: TestHandleToolsCall_InvalidParamsJSON (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.5853241+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsCall_InvalidParamsJSON","Elapsed":0} +{"Time":"2026-07-11T03:35:58.5853241+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSendResponse_ContainsJSONRPC"} +{"Time":"2026-07-11T03:35:58.5853241+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSendResponse_ContainsJSONRPC","Output":"=== CONT TestSendResponse_ContainsJSONRPC\n"} +{"Time":"2026-07-11T03:35:58.5853241+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSendResponse_ContainsJSONRPC","Output":"--- PASS: TestSendResponse_ContainsJSONRPC (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.5853241+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSendResponse_ContainsJSONRPC","Elapsed":0} +{"Time":"2026-07-11T03:35:58.5853241+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleRequest_CapabilityStubs"} +{"Time":"2026-07-11T03:35:58.5853241+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleRequest_CapabilityStubs","Output":"=== CONT TestHandleRequest_CapabilityStubs\n"} +{"Time":"2026-07-11T03:35:58.5853241+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleRequest_CapabilityStubs/resources/list"} +{"Time":"2026-07-11T03:35:58.5853241+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleRequest_CapabilityStubs/resources/list","Output":"=== RUN TestHandleRequest_CapabilityStubs/resources/list\n"} +{"Time":"2026-07-11T03:35:58.5853241+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleRequest_CapabilityStubs/resources/list","Output":"=== PAUSE TestHandleRequest_CapabilityStubs/resources/list\n"} +{"Time":"2026-07-11T03:35:58.5853241+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleRequest_CapabilityStubs/resources/list"} +{"Time":"2026-07-11T03:35:58.5853241+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleRequest_CapabilityStubs/resources/templates/list"} +{"Time":"2026-07-11T03:35:58.5853241+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleRequest_CapabilityStubs/resources/templates/list","Output":"=== RUN TestHandleRequest_CapabilityStubs/resources/templates/list\n"} +{"Time":"2026-07-11T03:35:58.5853241+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleRequest_CapabilityStubs/resources/templates/list","Output":"=== PAUSE TestHandleRequest_CapabilityStubs/resources/templates/list\n"} +{"Time":"2026-07-11T03:35:58.5853241+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleRequest_CapabilityStubs/resources/templates/list"} +{"Time":"2026-07-11T03:35:58.5853241+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleRequest_CapabilityStubs/prompts/list"} +{"Time":"2026-07-11T03:35:58.5853241+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleRequest_CapabilityStubs/prompts/list","Output":"=== RUN TestHandleRequest_CapabilityStubs/prompts/list\n"} +{"Time":"2026-07-11T03:35:58.5853241+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleRequest_CapabilityStubs/prompts/list","Output":"=== PAUSE TestHandleRequest_CapabilityStubs/prompts/list\n"} +{"Time":"2026-07-11T03:35:58.5853241+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleRequest_CapabilityStubs/prompts/list"} +{"Time":"2026-07-11T03:35:58.5853241+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleRequest_CapabilityStubs/completion/complete"} +{"Time":"2026-07-11T03:35:58.5853241+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleRequest_CapabilityStubs/completion/complete","Output":"=== RUN TestHandleRequest_CapabilityStubs/completion/complete\n"} +{"Time":"2026-07-11T03:35:58.5853241+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleRequest_CapabilityStubs/completion/complete","Output":"=== PAUSE TestHandleRequest_CapabilityStubs/completion/complete\n"} +{"Time":"2026-07-11T03:35:58.5853241+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleRequest_CapabilityStubs/completion/complete"} +{"Time":"2026-07-11T03:35:58.5853241+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleAnalyzeSearchPatterns_InvalidJSON"} +{"Time":"2026-07-11T03:35:58.5853241+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleAnalyzeSearchPatterns_InvalidJSON","Output":"=== CONT TestHandleAnalyzeSearchPatterns_InvalidJSON\n"} +{"Time":"2026-07-11T03:35:58.5853241+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleAnalyzeSearchPatterns_InvalidJSON","Output":"--- PASS: TestHandleAnalyzeSearchPatterns_InvalidJSON (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.5853241+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleAnalyzeSearchPatterns_InvalidJSON","Elapsed":0} +{"Time":"2026-07-11T03:35:58.5853241+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleRequest_NotificationReturnsNil"} +{"Time":"2026-07-11T03:35:58.5853241+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleRequest_NotificationReturnsNil","Output":"=== CONT TestHandleRequest_NotificationReturnsNil\n"} +{"Time":"2026-07-11T03:35:58.5853241+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleRequest_NotificationReturnsNil","Output":"{\"level\":\"debug\",\"method\":\"initialized\",\"time\":\"2026-07-11T03:35:58+03:00\",\"message\":\"MCP client initialized\"}\n"} +{"Time":"2026-07-11T03:35:58.5853241+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleRequest_NotificationReturnsNil","Output":"--- PASS: TestHandleRequest_NotificationReturnsNil (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.5853241+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleRequest_NotificationReturnsNil","Elapsed":0} +{"Time":"2026-07-11T03:35:58.5853241+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleFindSimilarObservations_EmptyResultInV5"} +{"Time":"2026-07-11T03:35:58.5853241+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleFindSimilarObservations_EmptyResultInV5","Output":"=== CONT TestHandleFindSimilarObservations_EmptyResultInV5\n"} +{"Time":"2026-07-11T03:35:58.5853241+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleFindSimilarObservations_EmptyResultInV5","Output":"--- PASS: TestHandleFindSimilarObservations_EmptyResultInV5 (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.5853241+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleFindSimilarObservations_EmptyResultInV5","Elapsed":0} +{"Time":"2026-07-11T03:35:58.5853241+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleRequest_UnknownMethodError"} +{"Time":"2026-07-11T03:35:58.5853241+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleRequest_UnknownMethodError","Output":"=== CONT TestHandleRequest_UnknownMethodError\n"} +{"Time":"2026-07-11T03:35:58.5853241+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleRequest_UnknownMethodError","Output":"--- PASS: TestHandleRequest_UnknownMethodError (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.5853241+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleRequest_UnknownMethodError","Elapsed":0} +{"Time":"2026-07-11T03:35:58.5853241+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleFindSimilarObservations_Validation"} +{"Time":"2026-07-11T03:35:58.5853241+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleFindSimilarObservations_Validation","Output":"=== CONT TestHandleFindSimilarObservations_Validation\n"} +{"Time":"2026-07-11T03:35:58.5853241+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleFindSimilarObservations_Validation","Output":"--- PASS: TestHandleFindSimilarObservations_Validation (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.5853241+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleFindSimilarObservations_Validation","Elapsed":0} +{"Time":"2026-07-11T03:35:58.5853241+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleRequest_ToolsListRoute"} +{"Time":"2026-07-11T03:35:58.5853241+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleRequest_ToolsListRoute","Output":"=== CONT TestHandleRequest_ToolsListRoute\n"} +{"Time":"2026-07-11T03:35:58.5858229+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleRequest_ToolsListRoute","Output":"--- PASS: TestHandleRequest_ToolsListRoute (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.5858229+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleRequest_ToolsListRoute","Elapsed":0} +{"Time":"2026-07-11T03:35:58.5858229+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleCheckSystemHealth_NilStores_StructuredResponse"} +{"Time":"2026-07-11T03:35:58.5858229+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleCheckSystemHealth_NilStores_StructuredResponse","Output":"=== CONT TestHandleCheckSystemHealth_NilStores_StructuredResponse\n"} +{"Time":"2026-07-11T03:35:58.7078222+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleCheckSystemHealth_NilStores_StructuredResponse","Output":"{\"level\":\"debug\",\"connections\":5,\"time\":\"2026-07-11T03:35:58+03:00\",\"message\":\"Connection pool warmed\"}\n"} +{"Time":"2026-07-11T03:35:58.7123246+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleCheckSystemHealth_NilStores_StructuredResponse","Output":"--- PASS: TestHandleCheckSystemHealth_NilStores_StructuredResponse (0.13s)\n"} +{"Time":"2026-07-11T03:35:58.7123246+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleCheckSystemHealth_NilStores_StructuredResponse","Elapsed":0.13} +{"Time":"2026-07-11T03:35:58.7123246+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleRequest_InitializeRoute"} +{"Time":"2026-07-11T03:35:58.7123246+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleRequest_InitializeRoute","Output":"=== CONT TestHandleRequest_InitializeRoute\n"} +{"Time":"2026-07-11T03:35:58.7123246+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleRequest_InitializeRoute","Output":"--- PASS: TestHandleRequest_InitializeRoute (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.7123246+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleRequest_InitializeRoute","Elapsed":0} +{"Time":"2026-07-11T03:35:58.7123246+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleGetMemoryStats_NilStores_ValidJSON"} +{"Time":"2026-07-11T03:35:58.7123246+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleGetMemoryStats_NilStores_ValidJSON","Output":"=== CONT TestHandleGetMemoryStats_NilStores_ValidJSON\n"} +{"Time":"2026-07-11T03:35:58.7123246+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleGetMemoryStats_NilStores_ValidJSON","Output":"--- PASS: TestHandleGetMemoryStats_NilStores_ValidJSON (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.7123246+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleGetMemoryStats_NilStores_ValidJSON","Elapsed":0} +{"Time":"2026-07-11T03:35:58.7123246+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsList_StoreTypeEnumCorrect"} +{"Time":"2026-07-11T03:35:58.7123246+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsList_StoreTypeEnumCorrect","Output":"=== CONT TestHandleToolsList_StoreTypeEnumCorrect\n"} +{"Time":"2026-07-11T03:35:58.7123246+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsList_StoreTypeEnumCorrect","Output":"--- PASS: TestHandleToolsList_StoreTypeEnumCorrect (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.7123246+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsList_StoreTypeEnumCorrect","Elapsed":0} +{"Time":"2026-07-11T03:35:58.7123246+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_ParameterValidation_Table"} +{"Time":"2026-07-11T03:35:58.7123246+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_ParameterValidation_Table","Output":"=== CONT TestCallTool_ParameterValidation_Table\n"} +{"Time":"2026-07-11T03:35:58.7123246+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_ParameterValidation_Table/find_similar_observations/{invalid"} +{"Time":"2026-07-11T03:35:58.7123246+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_ParameterValidation_Table/find_similar_observations/{invalid","Output":"=== RUN TestCallTool_ParameterValidation_Table/find_similar_observations/{invalid\n"} +{"Time":"2026-07-11T03:35:58.7123246+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_ParameterValidation_Table/find_similar_observations/{invalid","Output":"=== PAUSE TestCallTool_ParameterValidation_Table/find_similar_observations/{invalid\n"} +{"Time":"2026-07-11T03:35:58.7123246+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_ParameterValidation_Table/find_similar_observations/{invalid"} +{"Time":"2026-07-11T03:35:58.7123246+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_ParameterValidation_Table/find_similar_observations/{}"} +{"Time":"2026-07-11T03:35:58.7123246+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_ParameterValidation_Table/find_similar_observations/{}","Output":"=== RUN TestCallTool_ParameterValidation_Table/find_similar_observations/{}\n"} +{"Time":"2026-07-11T03:35:58.7123246+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_ParameterValidation_Table/find_similar_observations/{}","Output":"=== PAUSE TestCallTool_ParameterValidation_Table/find_similar_observations/{}\n"} +{"Time":"2026-07-11T03:35:58.7123246+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_ParameterValidation_Table/find_similar_observations/{}"} +{"Time":"2026-07-11T03:35:58.7123246+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_ParameterValidation_Table/analyze_search_patterns/{invalid"} +{"Time":"2026-07-11T03:35:58.7123246+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_ParameterValidation_Table/analyze_search_patterns/{invalid","Output":"=== RUN TestCallTool_ParameterValidation_Table/analyze_search_patterns/{invalid\n"} +{"Time":"2026-07-11T03:35:58.7123246+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_ParameterValidation_Table/analyze_search_patterns/{invalid","Output":"=== PAUSE TestCallTool_ParameterValidation_Table/analyze_search_patterns/{invalid\n"} +{"Time":"2026-07-11T03:35:58.7123246+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_ParameterValidation_Table/analyze_search_patterns/{invalid"} +{"Time":"2026-07-11T03:35:58.7123246+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsList_FeedbackSchemaCorrect"} +{"Time":"2026-07-11T03:35:58.7123246+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsList_FeedbackSchemaCorrect","Output":"=== CONT TestHandleToolsList_FeedbackSchemaCorrect\n"} +{"Time":"2026-07-11T03:35:58.7123246+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsList_FeedbackSchemaCorrect","Output":"--- PASS: TestHandleToolsList_FeedbackSchemaCorrect (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.7123246+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsList_FeedbackSchemaCorrect","Elapsed":0} +{"Time":"2026-07-11T03:35:58.7123246+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_CheckSystemHealth_NilStores"} +{"Time":"2026-07-11T03:35:58.7123246+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_CheckSystemHealth_NilStores","Output":"=== CONT TestCallTool_CheckSystemHealth_NilStores\n"} +{"Time":"2026-07-11T03:35:58.8369086+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_CheckSystemHealth_NilStores","Output":"{\"level\":\"debug\",\"connections\":5,\"time\":\"2026-07-11T03:35:58+03:00\",\"message\":\"Connection pool warmed\"}\n"} +{"Time":"2026-07-11T03:35:58.8414105+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_CheckSystemHealth_NilStores","Output":"--- PASS: TestCallTool_CheckSystemHealth_NilStores (0.13s)\n"} +{"Time":"2026-07-11T03:35:58.8414105+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_CheckSystemHealth_NilStores","Elapsed":0.13} +{"Time":"2026-07-11T03:35:58.8414105+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsList_AllToolSchemasHaveTypeAndProperties"} +{"Time":"2026-07-11T03:35:58.8414105+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsList_AllToolSchemasHaveTypeAndProperties","Output":"=== CONT TestHandleToolsList_AllToolSchemasHaveTypeAndProperties\n"} +{"Time":"2026-07-11T03:35:58.8419078+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsList_AllToolSchemasHaveTypeAndProperties","Output":"--- PASS: TestHandleToolsList_AllToolSchemasHaveTypeAndProperties (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.8419078+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsList_AllToolSchemasHaveTypeAndProperties","Elapsed":0} +{"Time":"2026-07-11T03:35:58.8419078+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetMemoryStats_NilDB_NoMemoryOrVnextSections"} +{"Time":"2026-07-11T03:35:58.8419078+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetMemoryStats_NilDB_NoMemoryOrVnextSections","Output":"=== CONT TestGetMemoryStats_NilDB_NoMemoryOrVnextSections\n"} +{"Time":"2026-07-11T03:35:58.8419078+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetMemoryStats_NilDB_NoMemoryOrVnextSections","Output":"--- PASS: TestGetMemoryStats_NilDB_NoMemoryOrVnextSections (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.8419078+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetMemoryStats_NilDB_NoMemoryOrVnextSections","Elapsed":0} +{"Time":"2026-07-11T03:35:58.8419078+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsList_SchemaCompliance_NoForbiddenTopLevelKeys"} +{"Time":"2026-07-11T03:35:58.8419078+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsList_SchemaCompliance_NoForbiddenTopLevelKeys","Output":"=== CONT TestHandleToolsList_SchemaCompliance_NoForbiddenTopLevelKeys\n"} +{"Time":"2026-07-11T03:35:58.8419078+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsList_SchemaCompliance_NoForbiddenTopLevelKeys","Output":"--- PASS: TestHandleToolsList_SchemaCompliance_NoForbiddenTopLevelKeys (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.8419078+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsList_SchemaCompliance_NoForbiddenTopLevelKeys","Elapsed":0} +{"Time":"2026-07-11T03:35:58.8419078+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_GetMemoryStats_NilStores"} +{"Time":"2026-07-11T03:35:58.8419078+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_GetMemoryStats_NilStores","Output":"=== CONT TestCallTool_GetMemoryStats_NilStores\n"} +{"Time":"2026-07-11T03:35:58.8419078+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_GetMemoryStats_NilStores","Output":"--- PASS: TestCallTool_GetMemoryStats_NilStores (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.8419078+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_GetMemoryStats_NilStores","Elapsed":0} +{"Time":"2026-07-11T03:35:58.8419078+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_FindByFile_Removed"} +{"Time":"2026-07-11T03:35:58.8419078+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_FindByFile_Removed","Output":"=== CONT TestCallTool_FindByFile_Removed\n"} +{"Time":"2026-07-11T03:35:58.8419078+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_FindByFile_Removed","Output":"--- PASS: TestCallTool_FindByFile_Removed (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.8419078+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_FindByFile_Removed","Elapsed":0} +{"Time":"2026-07-11T03:35:58.8419078+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_UnknownToolNames_Table"} +{"Time":"2026-07-11T03:35:58.8419078+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_UnknownToolNames_Table","Output":"=== CONT TestCallTool_UnknownToolNames_Table\n"} +{"Time":"2026-07-11T03:35:58.8419078+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_UnknownToolNames_Table/invalid_tool"} +{"Time":"2026-07-11T03:35:58.8419078+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_UnknownToolNames_Table/invalid_tool","Output":"=== RUN TestCallTool_UnknownToolNames_Table/invalid_tool\n"} +{"Time":"2026-07-11T03:35:58.8419078+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_UnknownToolNames_Table/invalid_tool","Output":"=== PAUSE TestCallTool_UnknownToolNames_Table/invalid_tool\n"} +{"Time":"2026-07-11T03:35:58.8419078+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_UnknownToolNames_Table/invalid_tool"} +{"Time":"2026-07-11T03:35:58.8419078+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_UnknownToolNames_Table/nonexistent"} +{"Time":"2026-07-11T03:35:58.8419078+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_UnknownToolNames_Table/nonexistent","Output":"=== RUN TestCallTool_UnknownToolNames_Table/nonexistent\n"} +{"Time":"2026-07-11T03:35:58.8419078+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_UnknownToolNames_Table/nonexistent","Output":"=== PAUSE TestCallTool_UnknownToolNames_Table/nonexistent\n"} +{"Time":"2026-07-11T03:35:58.8419078+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_UnknownToolNames_Table/nonexistent"} +{"Time":"2026-07-11T03:35:58.8419078+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_UnknownToolNames_Table/search_v2"} +{"Time":"2026-07-11T03:35:58.8419078+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_UnknownToolNames_Table/search_v2","Output":"=== RUN TestCallTool_UnknownToolNames_Table/search_v2\n"} +{"Time":"2026-07-11T03:35:58.8419078+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_UnknownToolNames_Table/search_v2","Output":"=== PAUSE TestCallTool_UnknownToolNames_Table/search_v2\n"} +{"Time":"2026-07-11T03:35:58.8419078+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_UnknownToolNames_Table/search_v2"} +{"Time":"2026-07-11T03:35:58.8419078+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_UnknownToolNames_Table/timeline_x"} +{"Time":"2026-07-11T03:35:58.8419078+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_UnknownToolNames_Table/timeline_x","Output":"=== RUN TestCallTool_UnknownToolNames_Table/timeline_x\n"} +{"Time":"2026-07-11T03:35:58.8419078+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_UnknownToolNames_Table/timeline_x","Output":"=== PAUSE TestCallTool_UnknownToolNames_Table/timeline_x\n"} +{"Time":"2026-07-11T03:35:58.8419078+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_UnknownToolNames_Table/timeline_x"} +{"Time":"2026-07-11T03:35:58.8419078+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsList_RemovedToolsAbsent"} +{"Time":"2026-07-11T03:35:58.8419078+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsList_RemovedToolsAbsent","Output":"=== CONT TestHandleToolsList_RemovedToolsAbsent\n"} +{"Time":"2026-07-11T03:35:58.8424091+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsList_RemovedToolsAbsent","Output":"--- PASS: TestHandleToolsList_RemovedToolsAbsent (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.8424091+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsList_RemovedToolsAbsent","Elapsed":0} +{"Time":"2026-07-11T03:35:58.8424091+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_UnknownToolReturnsError"} +{"Time":"2026-07-11T03:35:58.8424091+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_UnknownToolReturnsError","Output":"=== CONT TestCallTool_UnknownToolReturnsError\n"} +{"Time":"2026-07-11T03:35:58.8424091+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_UnknownToolReturnsError","Output":"--- PASS: TestCallTool_UnknownToolReturnsError (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.8424091+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_UnknownToolReturnsError","Elapsed":0} +{"Time":"2026-07-11T03:35:58.8424091+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsList_IncludeAllContainsLegacy"} +{"Time":"2026-07-11T03:35:58.8424091+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsList_IncludeAllContainsLegacy","Output":"=== CONT TestHandleToolsList_IncludeAllContainsLegacy\n"} +{"Time":"2026-07-11T03:35:58.8424091+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsList_IncludeAllContainsLegacy","Output":"--- PASS: TestHandleToolsList_IncludeAllContainsLegacy (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.8424091+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsList_IncludeAllContainsLegacy","Elapsed":0} +{"Time":"2026-07-11T03:35:58.8424091+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsList_IncludeAllReturnsMore"} +{"Time":"2026-07-11T03:35:58.8424091+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsList_IncludeAllReturnsMore","Output":"=== CONT TestHandleToolsList_IncludeAllReturnsMore\n"} +{"Time":"2026-07-11T03:35:58.842911+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsList_IncludeAllReturnsMore","Output":"--- PASS: TestHandleToolsList_IncludeAllReturnsMore (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.842911+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsList_IncludeAllReturnsMore","Elapsed":0} +{"Time":"2026-07-11T03:35:58.842911+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsList_DefaultCountMatchesPrimary"} +{"Time":"2026-07-11T03:35:58.842911+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsList_DefaultCountMatchesPrimary","Output":"=== CONT TestHandleToolsList_DefaultCountMatchesPrimary\n"} +{"Time":"2026-07-11T03:35:58.842911+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsList_DefaultCountMatchesPrimary","Output":"--- PASS: TestHandleToolsList_DefaultCountMatchesPrimary (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.842911+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsList_DefaultCountMatchesPrimary","Elapsed":0} +{"Time":"2026-07-11T03:35:58.842911+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTimelineParams_Unmarshal_Table"} +{"Time":"2026-07-11T03:35:58.842911+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTimelineParams_Unmarshal_Table","Output":"=== CONT TestTimelineParams_Unmarshal_Table\n"} +{"Time":"2026-07-11T03:35:58.842911+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTimelineParams_Unmarshal_Table/anchor_id"} +{"Time":"2026-07-11T03:35:58.842911+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTimelineParams_Unmarshal_Table/anchor_id","Output":"=== RUN TestTimelineParams_Unmarshal_Table/anchor_id\n"} +{"Time":"2026-07-11T03:35:58.842911+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTimelineParams_Unmarshal_Table/anchor_id","Output":"=== PAUSE TestTimelineParams_Unmarshal_Table/anchor_id\n"} +{"Time":"2026-07-11T03:35:58.842911+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTimelineParams_Unmarshal_Table/anchor_id"} +{"Time":"2026-07-11T03:35:58.842911+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTimelineParams_Unmarshal_Table/query_only"} +{"Time":"2026-07-11T03:35:58.842911+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTimelineParams_Unmarshal_Table/query_only","Output":"=== RUN TestTimelineParams_Unmarshal_Table/query_only\n"} +{"Time":"2026-07-11T03:35:58.842911+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTimelineParams_Unmarshal_Table/query_only","Output":"=== PAUSE TestTimelineParams_Unmarshal_Table/query_only\n"} +{"Time":"2026-07-11T03:35:58.842911+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTimelineParams_Unmarshal_Table/query_only"} +{"Time":"2026-07-11T03:35:58.842911+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTimelineParams_Unmarshal_Table/invalid_json"} +{"Time":"2026-07-11T03:35:58.842911+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTimelineParams_Unmarshal_Table/invalid_json","Output":"=== RUN TestTimelineParams_Unmarshal_Table/invalid_json\n"} +{"Time":"2026-07-11T03:35:58.842911+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTimelineParams_Unmarshal_Table/invalid_json","Output":"=== PAUSE TestTimelineParams_Unmarshal_Table/invalid_json\n"} +{"Time":"2026-07-11T03:35:58.842911+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTimelineParams_Unmarshal_Table/invalid_json"} +{"Time":"2026-07-11T03:35:58.842911+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTimelineParams_Unmarshal_Table/empty_object_valid"} +{"Time":"2026-07-11T03:35:58.842911+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTimelineParams_Unmarshal_Table/empty_object_valid","Output":"=== RUN TestTimelineParams_Unmarshal_Table/empty_object_valid\n"} +{"Time":"2026-07-11T03:35:58.842911+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTimelineParams_Unmarshal_Table/empty_object_valid","Output":"=== PAUSE TestTimelineParams_Unmarshal_Table/empty_object_valid\n"} +{"Time":"2026-07-11T03:35:58.842911+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTimelineParams_Unmarshal_Table/empty_object_valid"} +{"Time":"2026-07-11T03:35:58.842911+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestServer_FieldsInjected"} +{"Time":"2026-07-11T03:35:58.842911+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestServer_FieldsInjected","Output":"=== CONT TestServer_FieldsInjected\n"} +{"Time":"2026-07-11T03:35:58.842911+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestServer_FieldsInjected","Output":"--- PASS: TestServer_FieldsInjected (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.842911+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestServer_FieldsInjected","Elapsed":0} +{"Time":"2026-07-11T03:35:58.842911+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestVersion_ReturnsVersion"} +{"Time":"2026-07-11T03:35:58.842911+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestVersion_ReturnsVersion","Output":"=== CONT TestVersion_ReturnsVersion\n"} +{"Time":"2026-07-11T03:35:58.842911+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestVersion_ReturnsVersion","Output":"--- PASS: TestVersion_ReturnsVersion (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.842911+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestVersion_ReturnsVersion","Elapsed":0} +{"Time":"2026-07-11T03:35:58.842911+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleInitialize_IDEchoed"} +{"Time":"2026-07-11T03:35:58.842911+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleInitialize_IDEchoed","Output":"=== CONT TestHandleInitialize_IDEchoed\n"} +{"Time":"2026-07-11T03:35:58.842911+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleInitialize_IDEchoed","Output":"--- PASS: TestHandleInitialize_IDEchoed (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.842911+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleInitialize_IDEchoed","Elapsed":0} +{"Time":"2026-07-11T03:35:58.842911+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestNewServer_HasStdinStdout"} +{"Time":"2026-07-11T03:35:58.842911+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestNewServer_HasStdinStdout","Output":"=== CONT TestNewServer_HasStdinStdout\n"} +{"Time":"2026-07-11T03:35:58.842911+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestNewServer_HasStdinStdout","Output":"--- PASS: TestNewServer_HasStdinStdout (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.842911+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestNewServer_HasStdinStdout","Elapsed":0} +{"Time":"2026-07-11T03:35:58.842911+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleInitialize_CapabilitiesPresent"} +{"Time":"2026-07-11T03:35:58.842911+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleInitialize_CapabilitiesPresent","Output":"=== CONT TestHandleInitialize_CapabilitiesPresent\n"} +{"Time":"2026-07-11T03:35:58.842911+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleInitialize_CapabilitiesPresent","Output":"--- PASS: TestHandleInitialize_CapabilitiesPresent (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.842911+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleInitialize_CapabilitiesPresent","Elapsed":0} +{"Time":"2026-07-11T03:35:58.842911+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestNewServer_CreatesWithVersion"} +{"Time":"2026-07-11T03:35:58.842911+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestNewServer_CreatesWithVersion","Output":"=== CONT TestNewServer_CreatesWithVersion\n"} +{"Time":"2026-07-11T03:35:58.842911+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestNewServer_CreatesWithVersion","Output":"--- PASS: TestNewServer_CreatesWithVersion (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.842911+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestNewServer_CreatesWithVersion","Elapsed":0} +{"Time":"2026-07-11T03:35:58.842911+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleInitialize_ProtocolAndVersion"} +{"Time":"2026-07-11T03:35:58.842911+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleInitialize_ProtocolAndVersion","Output":"=== CONT TestHandleInitialize_ProtocolAndVersion\n"} +{"Time":"2026-07-11T03:35:58.842911+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleInitialize_ProtocolAndVersion","Output":"--- PASS: TestHandleInitialize_ProtocolAndVersion (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.842911+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleInitialize_ProtocolAndVersion","Elapsed":0} +{"Time":"2026-07-11T03:35:58.842911+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTimelineParams_AllFields"} +{"Time":"2026-07-11T03:35:58.842911+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTimelineParams_AllFields","Output":"=== CONT TestTimelineParams_AllFields\n"} +{"Time":"2026-07-11T03:35:58.842911+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTimelineParams_AllFields","Output":"--- PASS: TestTimelineParams_AllFields (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.8434076+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTimelineParams_AllFields","Elapsed":0} +{"Time":"2026-07-11T03:35:58.8434076+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestError_NilData_NotInOutput"} +{"Time":"2026-07-11T03:35:58.8434076+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestError_NilData_NotInOutput","Output":"=== CONT TestError_NilData_NotInOutput\n"} +{"Time":"2026-07-11T03:35:58.8434076+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestError_NilData_NotInOutput","Output":"--- PASS: TestError_NilData_NotInOutput (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.8434076+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestError_NilData_NotInOutput","Elapsed":0} +{"Time":"2026-07-11T03:35:58.8434076+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestResponse_Marshal_Table"} +{"Time":"2026-07-11T03:35:58.8434076+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestResponse_Marshal_Table","Output":"=== CONT TestResponse_Marshal_Table\n"} +{"Time":"2026-07-11T03:35:58.8434076+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestResponse_Marshal_Table/success_result"} +{"Time":"2026-07-11T03:35:58.8434076+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestResponse_Marshal_Table/success_result","Output":"=== RUN TestResponse_Marshal_Table/success_result\n"} +{"Time":"2026-07-11T03:35:58.8434076+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestResponse_Marshal_Table/success_result","Output":"=== PAUSE TestResponse_Marshal_Table/success_result\n"} +{"Time":"2026-07-11T03:35:58.8434076+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestResponse_Marshal_Table/success_result"} +{"Time":"2026-07-11T03:35:58.8434076+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestResponse_Marshal_Table/error_response"} +{"Time":"2026-07-11T03:35:58.8434076+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestResponse_Marshal_Table/error_response","Output":"=== RUN TestResponse_Marshal_Table/error_response\n"} +{"Time":"2026-07-11T03:35:58.8434076+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestResponse_Marshal_Table/error_response","Output":"=== PAUSE TestResponse_Marshal_Table/error_response\n"} +{"Time":"2026-07-11T03:35:58.8434076+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestResponse_Marshal_Table/error_response"} +{"Time":"2026-07-11T03:35:58.8434076+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestResponse_Marshal_Table/error_with_data"} +{"Time":"2026-07-11T03:35:58.8434076+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestResponse_Marshal_Table/error_with_data","Output":"=== RUN TestResponse_Marshal_Table/error_with_data\n"} +{"Time":"2026-07-11T03:35:58.8434076+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestResponse_Marshal_Table/error_with_data","Output":"=== PAUSE TestResponse_Marshal_Table/error_with_data\n"} +{"Time":"2026-07-11T03:35:58.8434076+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestResponse_Marshal_Table/error_with_data"} +{"Time":"2026-07-11T03:35:58.8434076+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestResponse_Marshal_Table/nil_id"} +{"Time":"2026-07-11T03:35:58.8434076+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestResponse_Marshal_Table/nil_id","Output":"=== RUN TestResponse_Marshal_Table/nil_id\n"} +{"Time":"2026-07-11T03:35:58.8434076+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestResponse_Marshal_Table/nil_id","Output":"=== PAUSE TestResponse_Marshal_Table/nil_id\n"} +{"Time":"2026-07-11T03:35:58.8434076+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestResponse_Marshal_Table/nil_id"} +{"Time":"2026-07-11T03:35:58.8434076+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTool_Marshal_RoundTrip"} +{"Time":"2026-07-11T03:35:58.8434076+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTool_Marshal_RoundTrip","Output":"=== CONT TestTool_Marshal_RoundTrip\n"} +{"Time":"2026-07-11T03:35:58.8434076+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTool_Marshal_RoundTrip","Output":"--- PASS: TestTool_Marshal_RoundTrip (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.8434076+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTool_Marshal_RoundTrip","Elapsed":0} +{"Time":"2026-07-11T03:35:58.8434076+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestError_Marshal_Table"} +{"Time":"2026-07-11T03:35:58.8434076+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestError_Marshal_Table","Output":"=== CONT TestError_Marshal_Table\n"} +{"Time":"2026-07-11T03:35:58.8434076+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestError_Marshal_Table/parse_error"} +{"Time":"2026-07-11T03:35:58.8434076+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestError_Marshal_Table/parse_error","Output":"=== RUN TestError_Marshal_Table/parse_error\n"} +{"Time":"2026-07-11T03:35:58.8434076+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestError_Marshal_Table/parse_error","Output":"=== PAUSE TestError_Marshal_Table/parse_error\n"} +{"Time":"2026-07-11T03:35:58.8434076+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestError_Marshal_Table/parse_error"} +{"Time":"2026-07-11T03:35:58.8434076+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestError_Marshal_Table/method_not_found"} +{"Time":"2026-07-11T03:35:58.8434076+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestError_Marshal_Table/method_not_found","Output":"=== RUN TestError_Marshal_Table/method_not_found\n"} +{"Time":"2026-07-11T03:35:58.8434076+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestError_Marshal_Table/method_not_found","Output":"=== PAUSE TestError_Marshal_Table/method_not_found\n"} +{"Time":"2026-07-11T03:35:58.8434076+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestError_Marshal_Table/method_not_found"} +{"Time":"2026-07-11T03:35:58.8434076+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestError_Marshal_Table/with_data"} +{"Time":"2026-07-11T03:35:58.8434076+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestError_Marshal_Table/with_data","Output":"=== RUN TestError_Marshal_Table/with_data\n"} +{"Time":"2026-07-11T03:35:58.8434076+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestError_Marshal_Table/with_data","Output":"=== PAUSE TestError_Marshal_Table/with_data\n"} +{"Time":"2026-07-11T03:35:58.8434076+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestError_Marshal_Table/with_data"} +{"Time":"2026-07-11T03:35:58.8434076+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestError_Marshal_Table/nil_data_omitted"} +{"Time":"2026-07-11T03:35:58.8434076+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestError_Marshal_Table/nil_data_omitted","Output":"=== RUN TestError_Marshal_Table/nil_data_omitted\n"} +{"Time":"2026-07-11T03:35:58.8434076+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestError_Marshal_Table/nil_data_omitted","Output":"=== PAUSE TestError_Marshal_Table/nil_data_omitted\n"} +{"Time":"2026-07-11T03:35:58.8434076+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestError_Marshal_Table/nil_data_omitted"} +{"Time":"2026-07-11T03:35:58.8434076+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestToolCallParams_ComplexArgs"} +{"Time":"2026-07-11T03:35:58.8434076+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestToolCallParams_ComplexArgs","Output":"=== CONT TestToolCallParams_ComplexArgs\n"} +{"Time":"2026-07-11T03:35:58.8434076+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestToolCallParams_ComplexArgs","Output":"--- PASS: TestToolCallParams_ComplexArgs (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.8434076+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestToolCallParams_ComplexArgs","Elapsed":0} +{"Time":"2026-07-11T03:35:58.8434076+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRequest_Unmarshal_NullID"} +{"Time":"2026-07-11T03:35:58.8434076+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRequest_Unmarshal_NullID","Output":"=== CONT TestRequest_Unmarshal_NullID\n"} +{"Time":"2026-07-11T03:35:58.8434076+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRequest_Unmarshal_NullID","Output":"--- PASS: TestRequest_Unmarshal_NullID (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.8434076+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRequest_Unmarshal_NullID","Elapsed":0} +{"Time":"2026-07-11T03:35:58.8434076+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestToolCallParams_Unmarshal"} +{"Time":"2026-07-11T03:35:58.8434076+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestToolCallParams_Unmarshal","Output":"=== CONT TestToolCallParams_Unmarshal\n"} +{"Time":"2026-07-11T03:35:58.8434076+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestToolCallParams_Unmarshal/recall"} +{"Time":"2026-07-11T03:35:58.8434076+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestToolCallParams_Unmarshal/recall","Output":"=== RUN TestToolCallParams_Unmarshal/recall\n"} +{"Time":"2026-07-11T03:35:58.8434076+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestToolCallParams_Unmarshal/recall","Output":"=== PAUSE TestToolCallParams_Unmarshal/recall\n"} +{"Time":"2026-07-11T03:35:58.8434076+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestToolCallParams_Unmarshal/recall"} +{"Time":"2026-07-11T03:35:58.8434076+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestToolCallParams_Unmarshal/store"} +{"Time":"2026-07-11T03:35:58.8434076+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestToolCallParams_Unmarshal/store","Output":"=== RUN TestToolCallParams_Unmarshal/store\n"} +{"Time":"2026-07-11T03:35:58.8434076+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestToolCallParams_Unmarshal/store","Output":"=== PAUSE TestToolCallParams_Unmarshal/store\n"} +{"Time":"2026-07-11T03:35:58.8434076+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestToolCallParams_Unmarshal/store"} +{"Time":"2026-07-11T03:35:58.8434076+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestToolCallParams_Unmarshal/no-args"} +{"Time":"2026-07-11T03:35:58.8434076+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestToolCallParams_Unmarshal/no-args","Output":"=== RUN TestToolCallParams_Unmarshal/no-args\n"} +{"Time":"2026-07-11T03:35:58.8434076+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestToolCallParams_Unmarshal/no-args","Output":"=== PAUSE TestToolCallParams_Unmarshal/no-args\n"} +{"Time":"2026-07-11T03:35:58.8434076+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestToolCallParams_Unmarshal/no-args"} +{"Time":"2026-07-11T03:35:58.8434076+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRequest_Unmarshal_RoundTrip"} +{"Time":"2026-07-11T03:35:58.8434076+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRequest_Unmarshal_RoundTrip","Output":"=== CONT TestRequest_Unmarshal_RoundTrip\n"} +{"Time":"2026-07-11T03:35:58.8434076+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRequest_Unmarshal_RoundTrip","Output":"--- PASS: TestRequest_Unmarshal_RoundTrip (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.8434076+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRequest_Unmarshal_RoundTrip","Elapsed":0} +{"Time":"2026-07-11T03:35:58.8434076+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRequest_Marshal_Table/initialize"} +{"Time":"2026-07-11T03:35:58.8434076+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRequest_Marshal_Table/initialize","Output":"=== CONT TestRequest_Marshal_Table/initialize\n"} +{"Time":"2026-07-11T03:35:58.8434076+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRequest_Marshal_Table/initialize","Output":"--- PASS: TestRequest_Marshal_Table/initialize (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.8434076+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRequest_Marshal_Table/initialize","Elapsed":0} +{"Time":"2026-07-11T03:35:58.8434076+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRequest_Marshal_Table/with_params"} +{"Time":"2026-07-11T03:35:58.8434076+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRequest_Marshal_Table/with_params","Output":"=== CONT TestRequest_Marshal_Table/with_params\n"} +{"Time":"2026-07-11T03:35:58.8439089+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRequest_Marshal_Table/with_params","Output":"--- PASS: TestRequest_Marshal_Table/with_params (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.8439089+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRequest_Marshal_Table/with_params","Elapsed":0} +{"Time":"2026-07-11T03:35:58.8439089+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRequest_Marshal_Table/null_id"} +{"Time":"2026-07-11T03:35:58.8439089+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRequest_Marshal_Table/null_id","Output":"=== CONT TestRequest_Marshal_Table/null_id\n"} +{"Time":"2026-07-11T03:35:58.8439089+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRequest_Marshal_Table/null_id","Output":"--- PASS: TestRequest_Marshal_Table/null_id (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.8439089+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRequest_Marshal_Table/null_id","Elapsed":0} +{"Time":"2026-07-11T03:35:58.8439089+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRequest_Marshal_Table/string_id"} +{"Time":"2026-07-11T03:35:58.8439089+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRequest_Marshal_Table/string_id","Output":"=== CONT TestRequest_Marshal_Table/string_id\n"} +{"Time":"2026-07-11T03:35:58.8439089+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRequest_Marshal_Table/string_id","Output":"--- PASS: TestRequest_Marshal_Table/string_id (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.8439089+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRequest_Marshal_Table/string_id","Elapsed":0} +{"Time":"2026-07-11T03:35:58.8439089+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRequest_Marshal_Table","Output":"--- PASS: TestRequest_Marshal_Table (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.8439089+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRequest_Marshal_Table","Elapsed":0} +{"Time":"2026-07-11T03:35:58.8439089+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestJSONRPCErrorCodes_Table/Parse_error"} +{"Time":"2026-07-11T03:35:58.8439089+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestJSONRPCErrorCodes_Table/Parse_error","Output":"=== CONT TestJSONRPCErrorCodes_Table/Parse_error\n"} +{"Time":"2026-07-11T03:35:58.8439089+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestJSONRPCErrorCodes_Table/Parse_error","Output":"--- PASS: TestJSONRPCErrorCodes_Table/Parse_error (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.8439089+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestJSONRPCErrorCodes_Table/Parse_error","Elapsed":0} +{"Time":"2026-07-11T03:35:58.8439089+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestJSONRPCErrorCodes_Table/Invalid_params"} +{"Time":"2026-07-11T03:35:58.8439089+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestJSONRPCErrorCodes_Table/Invalid_params","Output":"=== CONT TestJSONRPCErrorCodes_Table/Invalid_params\n"} +{"Time":"2026-07-11T03:35:58.8439089+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestJSONRPCErrorCodes_Table/Invalid_params","Output":"--- PASS: TestJSONRPCErrorCodes_Table/Invalid_params (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.8439089+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestJSONRPCErrorCodes_Table/Invalid_params","Elapsed":0} +{"Time":"2026-07-11T03:35:58.8439089+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestJSONRPCErrorCodes_Table/Method_not_found"} +{"Time":"2026-07-11T03:35:58.8439089+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestJSONRPCErrorCodes_Table/Method_not_found","Output":"=== CONT TestJSONRPCErrorCodes_Table/Method_not_found\n"} +{"Time":"2026-07-11T03:35:58.8439089+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestJSONRPCErrorCodes_Table/Method_not_found","Output":"--- PASS: TestJSONRPCErrorCodes_Table/Method_not_found (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.8439089+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestJSONRPCErrorCodes_Table/Method_not_found","Elapsed":0} +{"Time":"2026-07-11T03:35:58.8439089+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestJSONRPCErrorCodes_Table/Invalid_Request"} +{"Time":"2026-07-11T03:35:58.8439089+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestJSONRPCErrorCodes_Table/Invalid_Request","Output":"=== CONT TestJSONRPCErrorCodes_Table/Invalid_Request\n"} +{"Time":"2026-07-11T03:35:58.8439089+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestJSONRPCErrorCodes_Table/Invalid_Request","Output":"--- PASS: TestJSONRPCErrorCodes_Table/Invalid_Request (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.8439089+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestJSONRPCErrorCodes_Table/Invalid_Request","Elapsed":0} +{"Time":"2026-07-11T03:35:58.8439089+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestJSONRPCErrorCodes_Table/Internal_error"} +{"Time":"2026-07-11T03:35:58.8439089+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestJSONRPCErrorCodes_Table/Internal_error","Output":"=== CONT TestJSONRPCErrorCodes_Table/Internal_error\n"} +{"Time":"2026-07-11T03:35:58.8439089+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestJSONRPCErrorCodes_Table/Internal_error","Output":"--- PASS: TestJSONRPCErrorCodes_Table/Internal_error (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.8439089+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestJSONRPCErrorCodes_Table/Internal_error","Elapsed":0} +{"Time":"2026-07-11T03:35:58.8439089+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestJSONRPCErrorCodes_Table","Output":"--- PASS: TestJSONRPCErrorCodes_Table (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.8439089+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestJSONRPCErrorCodes_Table","Elapsed":0} +{"Time":"2026-07-11T03:35:58.8439089+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleRequest_CapabilityStubs/resources/list"} +{"Time":"2026-07-11T03:35:58.8439089+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleRequest_CapabilityStubs/resources/list","Output":"=== CONT TestHandleRequest_CapabilityStubs/resources/list\n"} +{"Time":"2026-07-11T03:35:58.8439089+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleRequest_CapabilityStubs/resources/list","Output":"--- PASS: TestHandleRequest_CapabilityStubs/resources/list (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.8439089+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleRequest_CapabilityStubs/resources/list","Elapsed":0} +{"Time":"2026-07-11T03:35:58.8439089+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleRequest_CapabilityStubs/prompts/list"} +{"Time":"2026-07-11T03:35:58.8439089+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleRequest_CapabilityStubs/prompts/list","Output":"=== CONT TestHandleRequest_CapabilityStubs/prompts/list\n"} +{"Time":"2026-07-11T03:35:58.8439089+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleRequest_CapabilityStubs/prompts/list","Output":"--- PASS: TestHandleRequest_CapabilityStubs/prompts/list (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.8439089+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleRequest_CapabilityStubs/prompts/list","Elapsed":0} +{"Time":"2026-07-11T03:35:58.8439089+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleRequest_CapabilityStubs/completion/complete"} +{"Time":"2026-07-11T03:35:58.8439089+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleRequest_CapabilityStubs/completion/complete","Output":"=== CONT TestHandleRequest_CapabilityStubs/completion/complete\n"} +{"Time":"2026-07-11T03:35:58.8439089+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleRequest_CapabilityStubs/completion/complete","Output":"--- PASS: TestHandleRequest_CapabilityStubs/completion/complete (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.8439089+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleRequest_CapabilityStubs/completion/complete","Elapsed":0} +{"Time":"2026-07-11T03:35:58.8439089+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleRequest_CapabilityStubs/resources/templates/list"} +{"Time":"2026-07-11T03:35:58.8439089+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleRequest_CapabilityStubs/resources/templates/list","Output":"=== CONT TestHandleRequest_CapabilityStubs/resources/templates/list\n"} +{"Time":"2026-07-11T03:35:58.8439089+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleRequest_CapabilityStubs/resources/templates/list","Output":"--- PASS: TestHandleRequest_CapabilityStubs/resources/templates/list (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.8439089+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleRequest_CapabilityStubs/resources/templates/list","Elapsed":0} +{"Time":"2026-07-11T03:35:58.8439089+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleRequest_CapabilityStubs","Output":"--- PASS: TestHandleRequest_CapabilityStubs (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.8439089+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleRequest_CapabilityStubs","Elapsed":0} +{"Time":"2026-07-11T03:35:58.8439089+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_ParameterValidation_Table/find_similar_observations/{invalid"} +{"Time":"2026-07-11T03:35:58.8439089+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_ParameterValidation_Table/find_similar_observations/{invalid","Output":"=== CONT TestCallTool_ParameterValidation_Table/find_similar_observations/{invalid\n"} +{"Time":"2026-07-11T03:35:58.8439089+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_ParameterValidation_Table/find_similar_observations/{invalid","Output":"--- PASS: TestCallTool_ParameterValidation_Table/find_similar_observations/{invalid (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.8439089+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_ParameterValidation_Table/find_similar_observations/{invalid","Elapsed":0} +{"Time":"2026-07-11T03:35:58.8439089+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_ParameterValidation_Table/analyze_search_patterns/{invalid"} +{"Time":"2026-07-11T03:35:58.8439089+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_ParameterValidation_Table/analyze_search_patterns/{invalid","Output":"=== CONT TestCallTool_ParameterValidation_Table/analyze_search_patterns/{invalid\n"} +{"Time":"2026-07-11T03:35:58.8439089+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_ParameterValidation_Table/analyze_search_patterns/{invalid","Output":"--- PASS: TestCallTool_ParameterValidation_Table/analyze_search_patterns/{invalid (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.8439089+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_ParameterValidation_Table/analyze_search_patterns/{invalid","Elapsed":0} +{"Time":"2026-07-11T03:35:58.8439089+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_ParameterValidation_Table/find_similar_observations/{}"} +{"Time":"2026-07-11T03:35:58.8439089+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_ParameterValidation_Table/find_similar_observations/{}","Output":"=== CONT TestCallTool_ParameterValidation_Table/find_similar_observations/{}\n"} +{"Time":"2026-07-11T03:35:58.8439089+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_ParameterValidation_Table/find_similar_observations/{}","Output":"--- PASS: TestCallTool_ParameterValidation_Table/find_similar_observations/{} (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.8439089+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_ParameterValidation_Table/find_similar_observations/{}","Elapsed":0} +{"Time":"2026-07-11T03:35:58.8439089+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_UnknownToolNames_Table/invalid_tool"} +{"Time":"2026-07-11T03:35:58.8439089+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_UnknownToolNames_Table/invalid_tool","Output":"=== CONT TestCallTool_UnknownToolNames_Table/invalid_tool\n"} +{"Time":"2026-07-11T03:35:58.8439089+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_ParameterValidation_Table","Output":"--- PASS: TestCallTool_ParameterValidation_Table (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.8439089+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_ParameterValidation_Table","Elapsed":0} +{"Time":"2026-07-11T03:35:58.8439089+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_UnknownToolNames_Table/invalid_tool","Output":"--- PASS: TestCallTool_UnknownToolNames_Table/invalid_tool (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.8439089+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_UnknownToolNames_Table/invalid_tool","Elapsed":0} +{"Time":"2026-07-11T03:35:58.8439089+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_UnknownToolNames_Table/search_v2"} +{"Time":"2026-07-11T03:35:58.8439089+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_UnknownToolNames_Table/search_v2","Output":"=== CONT TestCallTool_UnknownToolNames_Table/search_v2\n"} +{"Time":"2026-07-11T03:35:58.8439089+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_UnknownToolNames_Table/search_v2","Output":"--- PASS: TestCallTool_UnknownToolNames_Table/search_v2 (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.8439089+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_UnknownToolNames_Table/search_v2","Elapsed":0} +{"Time":"2026-07-11T03:35:58.8439089+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_UnknownToolNames_Table/timeline_x"} +{"Time":"2026-07-11T03:35:58.8439089+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_UnknownToolNames_Table/timeline_x","Output":"=== CONT TestCallTool_UnknownToolNames_Table/timeline_x\n"} +{"Time":"2026-07-11T03:35:58.8439089+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_UnknownToolNames_Table/timeline_x","Output":"--- PASS: TestCallTool_UnknownToolNames_Table/timeline_x (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.8439089+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_UnknownToolNames_Table/timeline_x","Elapsed":0} +{"Time":"2026-07-11T03:35:58.8439089+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_UnknownToolNames_Table/nonexistent"} +{"Time":"2026-07-11T03:35:58.8439089+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_UnknownToolNames_Table/nonexistent","Output":"=== CONT TestCallTool_UnknownToolNames_Table/nonexistent\n"} +{"Time":"2026-07-11T03:35:58.8439089+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_UnknownToolNames_Table/nonexistent","Output":"--- PASS: TestCallTool_UnknownToolNames_Table/nonexistent (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.8439089+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_UnknownToolNames_Table/nonexistent","Elapsed":0} +{"Time":"2026-07-11T03:35:58.8439089+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_UnknownToolNames_Table","Output":"--- PASS: TestCallTool_UnknownToolNames_Table (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.8439089+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_UnknownToolNames_Table","Elapsed":0} +{"Time":"2026-07-11T03:35:58.8439089+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTimelineParams_Unmarshal_Table/anchor_id"} +{"Time":"2026-07-11T03:35:58.8439089+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTimelineParams_Unmarshal_Table/anchor_id","Output":"=== CONT TestTimelineParams_Unmarshal_Table/anchor_id\n"} +{"Time":"2026-07-11T03:35:58.8439089+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTimelineParams_Unmarshal_Table/anchor_id","Output":"--- PASS: TestTimelineParams_Unmarshal_Table/anchor_id (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.8439089+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTimelineParams_Unmarshal_Table/anchor_id","Elapsed":0} +{"Time":"2026-07-11T03:35:58.8439089+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTimelineParams_Unmarshal_Table/invalid_json"} +{"Time":"2026-07-11T03:35:58.8439089+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTimelineParams_Unmarshal_Table/invalid_json","Output":"=== CONT TestTimelineParams_Unmarshal_Table/invalid_json\n"} +{"Time":"2026-07-11T03:35:58.8439089+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTimelineParams_Unmarshal_Table/invalid_json","Output":"--- PASS: TestTimelineParams_Unmarshal_Table/invalid_json (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.8444092+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTimelineParams_Unmarshal_Table/invalid_json","Elapsed":0} +{"Time":"2026-07-11T03:35:58.8444092+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTimelineParams_Unmarshal_Table/empty_object_valid"} +{"Time":"2026-07-11T03:35:58.8444092+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTimelineParams_Unmarshal_Table/empty_object_valid","Output":"=== CONT TestTimelineParams_Unmarshal_Table/empty_object_valid\n"} +{"Time":"2026-07-11T03:35:58.8444092+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTimelineParams_Unmarshal_Table/empty_object_valid","Output":"--- PASS: TestTimelineParams_Unmarshal_Table/empty_object_valid (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.8444092+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTimelineParams_Unmarshal_Table/empty_object_valid","Elapsed":0} +{"Time":"2026-07-11T03:35:58.8444092+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTimelineParams_Unmarshal_Table/query_only"} +{"Time":"2026-07-11T03:35:58.8444092+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTimelineParams_Unmarshal_Table/query_only","Output":"=== CONT TestTimelineParams_Unmarshal_Table/query_only\n"} +{"Time":"2026-07-11T03:35:58.8444092+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTimelineParams_Unmarshal_Table/query_only","Output":"--- PASS: TestTimelineParams_Unmarshal_Table/query_only (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.8444092+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTimelineParams_Unmarshal_Table/query_only","Elapsed":0} +{"Time":"2026-07-11T03:35:58.8444092+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTimelineParams_Unmarshal_Table","Output":"--- PASS: TestTimelineParams_Unmarshal_Table (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.8444092+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTimelineParams_Unmarshal_Table","Elapsed":0} +{"Time":"2026-07-11T03:35:58.8444092+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestResponse_Marshal_Table/success_result"} +{"Time":"2026-07-11T03:35:58.8444092+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestResponse_Marshal_Table/success_result","Output":"=== CONT TestResponse_Marshal_Table/success_result\n"} +{"Time":"2026-07-11T03:35:58.8444092+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestResponse_Marshal_Table/success_result","Output":"--- PASS: TestResponse_Marshal_Table/success_result (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.8444092+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestResponse_Marshal_Table/success_result","Elapsed":0} +{"Time":"2026-07-11T03:35:58.8444092+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestResponse_Marshal_Table/error_with_data"} +{"Time":"2026-07-11T03:35:58.8444092+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestResponse_Marshal_Table/error_with_data","Output":"=== CONT TestResponse_Marshal_Table/error_with_data\n"} +{"Time":"2026-07-11T03:35:58.8444092+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestResponse_Marshal_Table/error_with_data","Output":"--- PASS: TestResponse_Marshal_Table/error_with_data (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.8444092+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestResponse_Marshal_Table/error_with_data","Elapsed":0} +{"Time":"2026-07-11T03:35:58.8444092+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestResponse_Marshal_Table/nil_id"} +{"Time":"2026-07-11T03:35:58.8444092+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestResponse_Marshal_Table/nil_id","Output":"=== CONT TestResponse_Marshal_Table/nil_id\n"} +{"Time":"2026-07-11T03:35:58.8444092+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestResponse_Marshal_Table/nil_id","Output":"--- PASS: TestResponse_Marshal_Table/nil_id (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.8444092+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestResponse_Marshal_Table/nil_id","Elapsed":0} +{"Time":"2026-07-11T03:35:58.8444092+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestResponse_Marshal_Table/error_response"} +{"Time":"2026-07-11T03:35:58.8444092+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestResponse_Marshal_Table/error_response","Output":"=== CONT TestResponse_Marshal_Table/error_response\n"} +{"Time":"2026-07-11T03:35:58.8444092+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestResponse_Marshal_Table/error_response","Output":"--- PASS: TestResponse_Marshal_Table/error_response (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.8444092+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestResponse_Marshal_Table/error_response","Elapsed":0} +{"Time":"2026-07-11T03:35:58.8444092+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestResponse_Marshal_Table","Output":"--- PASS: TestResponse_Marshal_Table (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.8444092+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestResponse_Marshal_Table","Elapsed":0} +{"Time":"2026-07-11T03:35:58.8444092+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestError_Marshal_Table/parse_error"} +{"Time":"2026-07-11T03:35:58.8444092+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestError_Marshal_Table/parse_error","Output":"=== CONT TestError_Marshal_Table/parse_error\n"} +{"Time":"2026-07-11T03:35:58.8444092+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestError_Marshal_Table/parse_error","Output":"--- PASS: TestError_Marshal_Table/parse_error (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.8444092+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestError_Marshal_Table/parse_error","Elapsed":0} +{"Time":"2026-07-11T03:35:58.8444092+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestError_Marshal_Table/with_data"} +{"Time":"2026-07-11T03:35:58.8444092+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestError_Marshal_Table/with_data","Output":"=== CONT TestError_Marshal_Table/with_data\n"} +{"Time":"2026-07-11T03:35:58.8444092+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestError_Marshal_Table/with_data","Output":"--- PASS: TestError_Marshal_Table/with_data (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.8444092+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestError_Marshal_Table/with_data","Elapsed":0} +{"Time":"2026-07-11T03:35:58.8444092+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestError_Marshal_Table/nil_data_omitted"} +{"Time":"2026-07-11T03:35:58.8444092+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestError_Marshal_Table/nil_data_omitted","Output":"=== CONT TestError_Marshal_Table/nil_data_omitted\n"} +{"Time":"2026-07-11T03:35:58.8444092+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestError_Marshal_Table/nil_data_omitted","Output":"--- PASS: TestError_Marshal_Table/nil_data_omitted (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.8444092+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestError_Marshal_Table/nil_data_omitted","Elapsed":0} +{"Time":"2026-07-11T03:35:58.8444092+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestError_Marshal_Table/method_not_found"} +{"Time":"2026-07-11T03:35:58.8444092+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestError_Marshal_Table/method_not_found","Output":"=== CONT TestError_Marshal_Table/method_not_found\n"} +{"Time":"2026-07-11T03:35:58.8444092+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestError_Marshal_Table/method_not_found","Output":"--- PASS: TestError_Marshal_Table/method_not_found (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.8444092+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestError_Marshal_Table/method_not_found","Elapsed":0} +{"Time":"2026-07-11T03:35:58.8444092+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestError_Marshal_Table","Output":"--- PASS: TestError_Marshal_Table (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.8444092+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestError_Marshal_Table","Elapsed":0} +{"Time":"2026-07-11T03:35:58.8444092+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestToolCallParams_Unmarshal/recall"} +{"Time":"2026-07-11T03:35:58.8444092+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestToolCallParams_Unmarshal/recall","Output":"=== CONT TestToolCallParams_Unmarshal/recall\n"} +{"Time":"2026-07-11T03:35:58.8444092+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestToolCallParams_Unmarshal/recall","Output":"--- PASS: TestToolCallParams_Unmarshal/recall (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.8444092+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestToolCallParams_Unmarshal/recall","Elapsed":0} +{"Time":"2026-07-11T03:35:58.8444092+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestToolCallParams_Unmarshal/no-args"} +{"Time":"2026-07-11T03:35:58.8444092+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestToolCallParams_Unmarshal/no-args","Output":"=== CONT TestToolCallParams_Unmarshal/no-args\n"} +{"Time":"2026-07-11T03:35:58.8444092+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestToolCallParams_Unmarshal/no-args","Output":"--- PASS: TestToolCallParams_Unmarshal/no-args (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.8444092+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestToolCallParams_Unmarshal/no-args","Elapsed":0} +{"Time":"2026-07-11T03:35:58.8444092+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestToolCallParams_Unmarshal/store"} +{"Time":"2026-07-11T03:35:58.8444092+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestToolCallParams_Unmarshal/store","Output":"=== CONT TestToolCallParams_Unmarshal/store\n"} +{"Time":"2026-07-11T03:35:58.8444092+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestToolCallParams_Unmarshal/store","Output":"--- PASS: TestToolCallParams_Unmarshal/store (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.8444092+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestToolCallParams_Unmarshal/store","Elapsed":0} +{"Time":"2026-07-11T03:35:58.8444092+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestToolCallParams_Unmarshal","Output":"--- PASS: TestToolCallParams_Unmarshal (0.00s)\n"} +{"Time":"2026-07-11T03:35:58.8444092+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestToolCallParams_Unmarshal","Elapsed":0} +{"Time":"2026-07-11T03:35:58.8444092+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Output":"FAIL\n"} +{"Time":"2026-07-11T03:35:58.8664078+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Output":"coverage: 46.2% of statements\n"} +{"Time":"2026-07-11T03:35:58.8949072+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Output":"FAIL\tgithub.com/thebtf/engram/internal/mcp\t9.616s\n"} +{"Time":"2026-07-11T03:35:58.8949072+03:00","Action":"fail","Package":"github.com/thebtf/engram/internal/mcp","Elapsed":9.626} diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/repeat-01/pg-stat-activity-after.stderr.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/repeat-01/pg-stat-activity-after.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/repeat-01/pg-stat-activity-after.stdout.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/repeat-01/pg-stat-activity-after.stdout.log new file mode 100644 index 00000000..fe51488c --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/repeat-01/pg-stat-activity-after.stdout.log @@ -0,0 +1 @@ +[] diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/repeat-01/pg-stat-activity-before.stderr.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/repeat-01/pg-stat-activity-before.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/repeat-01/pg-stat-activity-before.stdout.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/repeat-01/pg-stat-activity-before.stdout.log new file mode 100644 index 00000000..fe51488c --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/repeat-01/pg-stat-activity-before.stdout.log @@ -0,0 +1 @@ +[] diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/repeat-01/repeat-summary.json b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/repeat-01/repeat-summary.json new file mode 100644 index 00000000..caba6896 --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/repeat-01/repeat-summary.json @@ -0,0 +1,36 @@ +{ + "repeat": 1, + "verdict": "FAIL", + "database": "engram_prc_rg_test_4a8d23a359bc81a6_r1", + "schema": "public", + "database_schema_identity": "engram_prc_rg_test_4a8d23a359bc81a6_r1.public", + "database_dsn": "REDACTED_DATABASE_DSN", + "database_create_confirmed": true, + "sequential_execution": { + "package_parallelism": 1, + "test_parallelism": 1 + }, + "race": false, + "connection_budget": 20, + "server_sessions_before": 6, + "server_sessions_after": 6, + "sessions_before": 0, + "sessions_after": 0, + "go_test_exit": 1, + "json_parser_exit": 1, + "coverage_policy": "Targeted", + "coverage_exit": 0, + "cleanup_exit": 0, + "cleanup_status": "PASS", + "required_session_start_execution": { + "schema_version": 1, + "verdict": "NOT_APPLICABLE", + "reason": "only an unfiltered canonical ./... run requires the 12-test session-start execution proof" + }, + "cleanup_summary": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-full-mcp\\repeat-01\\cleanup\\cleanup.json", + "errors": [ + "go test failed with exit 1", + "go test JSON assertion failed with exit 1" + ], + "artifact_directory": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-full-mcp\\repeat-01" +} diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/repeat-01/server-connection-count-after.stderr.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/repeat-01/server-connection-count-after.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/repeat-01/server-connection-count-after.stdout.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/repeat-01/server-connection-count-after.stdout.log new file mode 100644 index 00000000..1e8b3149 --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/repeat-01/server-connection-count-after.stdout.log @@ -0,0 +1 @@ +6 diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/repeat-01/server-connection-count-before.stderr.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/repeat-01/server-connection-count-before.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/repeat-01/server-connection-count-before.stdout.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/repeat-01/server-connection-count-before.stdout.log new file mode 100644 index 00000000..1e8b3149 --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/repeat-01/server-connection-count-before.stdout.log @@ -0,0 +1 @@ +6 diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/repeat-01/targeted-coverage.stderr.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/repeat-01/targeted-coverage.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/repeat-01/targeted-coverage.stdout.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/repeat-01/targeted-coverage.stdout.log new file mode 100644 index 00000000..0707546e --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/repeat-01/targeted-coverage.stdout.log @@ -0,0 +1,352 @@ +github.com/thebtf/engram/internal/mcp/audit_helpers.go:33: effectiveAuditWriter 80.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:44: isAuditEnabled 100.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:52: runAuditAsync 100.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:77: marshalState 62.5% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:92: logAuditCreate 100.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:117: logAuditEdit 90.9% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:142: logAuditDelete 90.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:166: logAuditGeneric 0.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:189: logAuditSupersede 90.0% +github.com/thebtf/engram/internal/mcp/coerce.go:30: parseArgs 87.5% +github.com/thebtf/engram/internal/mcp/coerce.go:46: coerceString 100.0% +github.com/thebtf/engram/internal/mcp/coerce.go:67: coerceInt 93.3% +github.com/thebtf/engram/internal/mcp/coerce.go:97: coerceInt64 86.7% +github.com/thebtf/engram/internal/mcp/coerce.go:127: coerceFloat64 81.8% +github.com/thebtf/engram/internal/mcp/coerce.go:151: coerceBool 66.7% +github.com/thebtf/engram/internal/mcp/coerce.go:177: coerceStringSlice 84.6% +github.com/thebtf/engram/internal/mcp/coerce.go:204: coerceInt64Slice 100.0% +github.com/thebtf/engram/internal/mcp/coerce.go:222: clampToInt 100.0% +github.com/thebtf/engram/internal/mcp/coerce.go:236: clampInt64ToInt 60.0% +github.com/thebtf/engram/internal/mcp/context.go:17: extractProjectFromHeader 100.0% +github.com/thebtf/engram/internal/mcp/context.go:22: contextWithProject 100.0% +github.com/thebtf/engram/internal/mcp/context.go:29: ContextWithProject 100.0% +github.com/thebtf/engram/internal/mcp/context.go:35: projectFromContext 100.0% +github.com/thebtf/engram/internal/mcp/context.go:41: contextWithSession 100.0% +github.com/thebtf/engram/internal/mcp/context.go:48: ContextWithSession 100.0% +github.com/thebtf/engram/internal/mcp/context.go:54: sessionFromContext 100.0% +github.com/thebtf/engram/internal/mcp/context.go:61: actorFromContext 100.0% +github.com/thebtf/engram/internal/mcp/health.go:22: NewMCPHealth 0.0% +github.com/thebtf/engram/internal/mcp/health.go:29: RecordRequest 0.0% +github.com/thebtf/engram/internal/mcp/health.go:36: RecordError 0.0% +github.com/thebtf/engram/internal/mcp/health.go:42: rotateWindowIfNeeded 0.0% +github.com/thebtf/engram/internal/mcp/health.go:55: HandleHealth 0.0% +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:28: ruleGovernanceCaptureEnabled 50.0% +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:39: captureActiveRuleIntent 80.0% +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:104: ruleIntentFingerprint 100.0% +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:113: marshalRuleCandidateIntentResponse 85.7% +github.com/thebtf/engram/internal/mcp/server.go:127: NewServer 100.0% +github.com/thebtf/engram/internal/mcp/server.go:141: SetBackfillStatusFunc 0.0% +github.com/thebtf/engram/internal/mcp/server.go:146: SetVersionedDocumentStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:151: SetIssueStore 100.0% +github.com/thebtf/engram/internal/mcp/server.go:156: SetMemoryStore 100.0% +github.com/thebtf/engram/internal/mcp/server.go:161: SetMetaMemoryIndex 100.0% +github.com/thebtf/engram/internal/mcp/server.go:166: SetHintQueue 100.0% +github.com/thebtf/engram/internal/mcp/server.go:171: SetStateStore 100.0% +github.com/thebtf/engram/internal/mcp/server.go:176: SetDirectiveCaptureService 100.0% +github.com/thebtf/engram/internal/mcp/server.go:181: SetBehavioralRulesStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:186: SetRuleGovernanceStore 100.0% +github.com/thebtf/engram/internal/mcp/server.go:191: SetRuleInjectionTelemetryStore 100.0% +github.com/thebtf/engram/internal/mcp/server.go:195: SetPromotionStore 100.0% +github.com/thebtf/engram/internal/mcp/server.go:199: SetGraphStore 100.0% +github.com/thebtf/engram/internal/mcp/server.go:204: SetNodesStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:211: SetAuditStore 100.0% +github.com/thebtf/engram/internal/mcp/server.go:216: SetPurgeStore 100.0% +github.com/thebtf/engram/internal/mcp/server.go:222: SetCandidateStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:228: SetSnapshotStore 100.0% +github.com/thebtf/engram/internal/mcp/server.go:234: SetBulkFacade 0.0% +github.com/thebtf/engram/internal/mcp/server.go:240: setTestAuditWriter 100.0% +github.com/thebtf/engram/internal/mcp/server.go:246: setTestMemoryEditor 100.0% +github.com/thebtf/engram/internal/mcp/server.go:252: setTestMemorySignificanceUpdater 100.0% +github.com/thebtf/engram/internal/mcp/server.go:260: SetWriteLintOrchestrator 100.0% +github.com/thebtf/engram/internal/mcp/server.go:269: SetRedactionRules 0.0% +github.com/thebtf/engram/internal/mcp/server.go:274: SetEmbeddingStores 0.0% +github.com/thebtf/engram/internal/mcp/server.go:282: SetRerankClient 0.0% +github.com/thebtf/engram/internal/mcp/server.go:290: SetStatsDB 0.0% +github.com/thebtf/engram/internal/mcp/server.go:297: HandleRequest 100.0% +github.com/thebtf/engram/internal/mcp/server.go:303: ListTools 71.4% +github.com/thebtf/engram/internal/mcp/server.go:332: Version 100.0% +github.com/thebtf/engram/internal/mcp/server.go:383: Run 81.8% +github.com/thebtf/engram/internal/mcp/server.go:427: handleRequest 100.0% +github.com/thebtf/engram/internal/mcp/server.go:461: handleNotification 50.0% +github.com/thebtf/engram/internal/mcp/server.go:473: handleInitialize 100.0% +github.com/thebtf/engram/internal/mcp/server.go:496: buildInstructions 25.0% +github.com/thebtf/engram/internal/mcp/server.go:660: storeMemoryTool 100.0% +github.com/thebtf/engram/internal/mcp/server.go:712: recallMemoryTool 100.0% +github.com/thebtf/engram/internal/mcp/server.go:805: primaryTools 100.0% +github.com/thebtf/engram/internal/mcp/server.go:942: handleToolsList 85.9% +github.com/thebtf/engram/internal/mcp/server.go:1612: handleToolsCall 100.0% +github.com/thebtf/engram/internal/mcp/server.go:1644: sanitizeToolCallArgs 83.3% +github.com/thebtf/engram/internal/mcp/server.go:1656: callTool 33.0% +github.com/thebtf/engram/internal/mcp/server.go:1874: sendResponse 60.0% +github.com/thebtf/engram/internal/mcp/server.go:1884: sendError 100.0% +github.com/thebtf/engram/internal/mcp/server.go:1896: handleFindSimilarObservations 92.3% +github.com/thebtf/engram/internal/mcp/server.go:1927: handleGetMemoryStats 12.3% +github.com/thebtf/engram/internal/mcp/server.go:2055: handleBackfillStatus 0.0% +github.com/thebtf/engram/internal/mcp/server.go:2071: handleCheckSystemHealth 64.1% +github.com/thebtf/engram/internal/mcp/server.go:2216: handleAnalyzeSearchPatterns 30.0% +github.com/thebtf/engram/internal/mcp/server.go:2246: handleSearchSessions 0.0% +github.com/thebtf/engram/internal/mcp/server.go:2251: handleListSessions 0.0% +github.com/thebtf/engram/internal/mcp/tools_admin.go:18: buildAdminTool 100.0% +github.com/thebtf/engram/internal/mcp/tools_admin.go:68: adminActionsForEnv 100.0% +github.com/thebtf/engram/internal/mcp/tools_admin.go:80: vnextEnabled 100.0% +github.com/thebtf/engram/internal/mcp/tools_admin.go:84: handleAdmin 57.1% +github.com/thebtf/engram/internal/mcp/tools_admin.go:120: handlePurgeProject 88.2% +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:27: ambientHintsEnabledFromEnv 100.0% +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:32: ambientHintsTool 100.0% +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:48: handleGetAmbientHints 79.2% +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:86: normalizeAmbientHintsToolLimit 80.0% +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:96: ambientHintItems 83.3% +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:114: errMissingSessionID 0.0% +github.com/thebtf/engram/internal/mcp/tools_brief.go:31: handleGetMemoryBrief 31.4% +github.com/thebtf/engram/internal/mcp/tools_brief.go:107: memoryBriefUsesPrincipalScope 100.0% +github.com/thebtf/engram/internal/mcp/tools_brief.go:115: handlePrincipalMemoryBrief 73.8% +github.com/thebtf/engram/internal/mcp/tools_brief.go:259: truncateBriefContent 75.0% +github.com/thebtf/engram/internal/mcp/tools_brief.go:270: filterInjectionByScope 0.0% +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:25: bulkOpsTools 100.0% +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:95: handleBulkPromote 52.4% +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:154: handleBulkDelete 47.6% +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:211: handleBulkSupersede 47.6% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:31: candidateItemFromDomain 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:51: newCandidateReviewSnapshot 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:59: requireCandidateReviewSnapshot 100.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:68: candidateTools 100.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:165: handleListCandidates 28.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:208: handleGetCandidate 35.3% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:239: handlePromoteCandidate 23.5% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:348: handleRejectCandidate 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:402: handleSupersedeCandidate 0.0% +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:34: codeIntelEnabled 100.0% +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:42: SetCodeChunkStore 100.0% +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:48: codebaseSearchTool 100.0% +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:79: codebaseStatusTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:100: handleCodebaseSearch 6.9% +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:194: handleCodebaseStatus 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:21: getVault 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:35: credentialStore 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:49: handleStoreCredential 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:130: handleGetCredential 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:192: handleListCredentials 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:243: handleDeleteCredential 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:302: handleVaultStatus 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:338: expandTagHierarchy 0.0% +github.com/thebtf/engram/internal/mcp/tools_directives.go:16: directivesCaptureEnabledFromEnv 100.0% +github.com/thebtf/engram/internal/mcp/tools_directives.go:20: rememberDirectiveTool 100.0% +github.com/thebtf/engram/internal/mcp/tools_directives.go:38: currentDirectiveCaptureService 100.0% +github.com/thebtf/engram/internal/mcp/tools_directives.go:48: handleRememberDirective 87.5% +github.com/thebtf/engram/internal/mcp/tools_directives.go:72: parseRememberDirectiveArgs 75.0% +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:10: handleDocsConsolidated 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents.go:15: handleListCollections 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents.go:61: handleListDocuments 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents.go:121: handleGetDocument 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents.go:165: handleRemoveDocument 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents.go:197: handleIngestDocument 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents.go:235: handleSearchCollection 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:15: handleDocCreate 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:61: handleDocRead 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:117: handleDocUpdate 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:122: handleDocList 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:175: handleDocHistory 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:232: handleDocComment 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:19: SetExperienceProvider 100.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:23: experienceHistoryTools 100.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:40: experienceHistoryReadSchema 100.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:65: experienceHistoryDetailSchema 100.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:82: experienceHistoryTriggerEnum 100.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:91: handleExperienceHistoryRead 85.7% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:103: handleExperienceHistoryDetail 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:115: parseExperienceHistoryReadArgs 75.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:142: parseExperienceHistoryDetailArgs 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:157: experienceHistoryTriggersFromArgs 93.3% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:180: marshalExperienceHistory 75.0% +github.com/thebtf/engram/internal/mcp/tools_feedback.go:12: handleFeedbackConsolidated 54.5% +github.com/thebtf/engram/internal/mcp/tools_feedback.go:36: handleSetSessionOutcome 0.0% +github.com/thebtf/engram/internal/mcp/tools_governance.go:27: governanceTools 100.0% +github.com/thebtf/engram/internal/mcp/tools_governance.go:98: handleListSnapshots 10.7% +github.com/thebtf/engram/internal/mcp/tools_governance.go:167: handleRollbackSnapshot 13.0% +github.com/thebtf/engram/internal/mcp/tools_governance.go:215: handlePinSnapshot 16.7% +github.com/thebtf/engram/internal/mcp/tools_governance.go:258: handleRedactionRulesStatus 76.9% +github.com/thebtf/engram/internal/mcp/tools_governance.go:284: resolveGovernanceActor 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:64: handleGraph 12.5% +github.com/thebtf/engram/internal/mcp/tools_graph.go:100: graphAddEdge 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:216: mcpGraphEndpointExists 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:243: mcpGraphEdgeAlreadyExists 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:276: graphAddNode 85.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:317: graphRemoveEdge 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:332: graphGetEdges 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:397: filterEdgesByNodeType 80.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:457: graphTraverse 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:480: graphFindPath 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:502: graphSynonyms 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:23: graphCreateEdgeWithGuards 80.0% +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:80: graphEndpointExistsWithGuards 71.4% +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:114: graphDuplicateEdgeExists 57.9% +github.com/thebtf/engram/internal/mcp/tools_ingest.go:25: handleIngest 0.0% +github.com/thebtf/engram/internal/mcp/tools_ingest.go:43: ingestDocument 0.0% +github.com/thebtf/engram/internal/mcp/tools_instincts.go:20: handleImportInstincts 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:19: issuesToolSchema 100.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:109: validateIssueActionParams 60.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:143: handleIssues 41.2% +github.com/thebtf/engram/internal/mcp/tools_issues.go:189: resolveSourceProject 77.8% +github.com/thebtf/engram/internal/mcp/tools_issues.go:205: handleIssueCreate 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:250: handleIssueList 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:311: handleIssueGet 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:344: handleIssueUpdate 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:382: handleIssueComment 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:408: handleIssueReopen 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:425: handleIssueClose 90.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:22: handleLifecycle 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:48: lifecycleInfo 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:87: lifecyclePromote 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:118: lifecycleDemote 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:149: lifecycleSetConfidence 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:172: lifecycleSetDefeasibility 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:191: lifecycleSleepStatus 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:197: lifecycleDecayPreview 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:233: marshalJSON 75.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:35: vnextFEnabled 100.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:42: isValidPrivacyScope 100.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:54: derivePrivacyScopeFromLegacy 75.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:82: deriveLegacyScopeFromPrivacy 50.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:93: applyPrincipalMemoryMetadata 95.7% +github.com/thebtf/engram/internal/mcp/tools_memory.go:135: addPrincipalMemoryFields 100.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:161: newScopedWriteLintMemoryStore 66.7% +github.com/thebtf/engram/internal/mcp/tools_memory.go:172: writeLintVisibilityCaller 100.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:186: writeLintVisibilityOptions 100.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:192: scopedWriteLintMemoryStore 83.3% +github.com/thebtf/engram/internal/mcp/tools_memory.go:202: filterVisibleWriteGateCandidates 100.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:214: domainManageAllowed 100.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:218: List 28.6% +github.com/thebtf/engram/internal/mcp/tools_memory.go:272: writeLintVisibilityFetchLimit 75.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:286: Get 83.3% +github.com/thebtf/engram/internal/mcp/tools_memory.go:297: Create 100.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:301: Update 100.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:305: MarkSuperseded 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:319: effectiveMemoryEditor 40.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:329: isValidStoreObservationType 66.7% +github.com/thebtf/engram/internal/mcp/tools_memory.go:354: handleStoreMemory 56.4% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1111: handleEditMemory 81.1% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1218: computeTTLDays 35.3% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1258: truncateTitle 100.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1270: keepRecallMemory 100.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1280: keepRecallMemoryFilters 40.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1342: handleRecallMemory 69.3% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1690: staleAdvisory 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1700: marshalWithStaleAdvisory 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1727: Rank 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1751: handleRecallMemoryHybrid 26.6% +github.com/thebtf/engram/internal/mcp/tools_memory.go:2252: handleRateMemory 53.3% +github.com/thebtf/engram/internal/mcp/tools_memory.go:2281: handleSuppressMemory 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:17: SetDomainRegistryService 100.0% +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:21: checkDomainWriteMCP 90.0% +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:43: addDomainWriteDecisionFields 100.0% +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:51: marshalStoreMemoryAugmented 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:26: newMemoryStoreSignificanceUpdater 66.7% +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:33: s6OutcomeEnabledFromEnv 100.0% +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:37: effectiveMemorySignificanceUpdater 80.0% +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:47: currentMemorySignificanceUpdater 100.0% +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:58: rateMemorySignificanceTool 100.0% +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:74: handleRateMemorySignificance 82.4% +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:109: RateMemorySignificance 61.5% +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:18: s2MetaMemoryEnabled 100.0% +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:22: knowAboutTool 100.0% +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:39: handleKnowAbout 82.4% +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:104: parseKnowAboutLimit 75.0% +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:118: summarizeMetaIndexTags 95.2% +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:153: summarizeMetaIndexDateRange 100.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:23: SetPrincipalMemoryQueryService 100.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:27: principalMemoryQueryTool 100.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:52: handleQueryPrincipalMemory 73.2% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:134: principalMemoryQueryCaller 88.9% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:149: parsePrincipalMemoryQueryLimit 100.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:160: principalMemoryQueryText 100.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:167: parsePrincipalMemoryQueryVisibility 60.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:179: parsePrincipalMemoryQueryOffset 33.3% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:190: parsePrincipalMemoryQueryInt 23.1% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:215: parsePrincipalMemoryQueryBool 66.7% +github.com/thebtf/engram/internal/mcp/tools_recall.go:28: handleRecall 24.3% +github.com/thebtf/engram/internal/mcp/tools_recall.go:125: parseRecallIncludedPrincipals 88.9% +github.com/thebtf/engram/internal/mcp/tools_recall.go:165: appendRecallIncludedPrincipalMemories 80.0% +github.com/thebtf/engram/internal/mcp/tools_recall.go:223: recallIncludeTargetMatchesCaller 100.0% +github.com/thebtf/engram/internal/mcp/tools_recall.go:231: recallPrincipalQueryItemToMemory 100.0% +github.com/thebtf/engram/internal/mcp/tools_recall.go:247: handleRecallSearch 64.4% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:20: currentReviewLoopCandidateLister 80.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:30: reviewLoopCandidateTools 100.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:65: reviewLoopReadSchema 100.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:78: reviewPacketIDSchema 100.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:91: handleReviewMetricsRead 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:110: handleReviewQueueRead 80.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:140: handleReviewPacketDetail 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:151: handleReviewPacketPreviewAction 30.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:167: handleReviewPacketApplyAction 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:189: parseReviewLoopReadArgs 73.3% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:212: reviewLoopMCPPacketTypeSupported 100.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:217: reviewLoopActionFromArgs 75.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:225: reviewLoopReasonFromArgs 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:233: loadReviewPacketCandidate 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:256: applyReviewPacketPreserve 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:278: applyReviewPacketSuppress 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:296: reviewLoopMemoryFromCandidate 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:320: filterRiskyMCPReviewCandidates 100.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:330: marshalReviewLoop 75.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:17: ruleGovernanceReadTools 100.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:126: handleRuleGovernanceHealth 85.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:176: handleRuleGovernanceQueue 81.8% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:233: handleRuleGovernanceSnapshots 76.5% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:278: handleRuleGovernanceUsefulness 73.1% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:338: handleRuleGovernanceTransition 76.5% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:373: handleRuleGovernancePinSnapshot 72.2% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:406: handleRuleGovernanceRollback 70.6% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:483: requireRuleGovernanceReadAccess 83.3% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:495: requireRuleGovernanceProjectOrAdmin 100.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:505: ruleGovernanceCallerIsAdmin 100.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:510: requireRuleGovernanceAdminAccess 100.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:518: redactRuleGovernanceEvidenceHandles 90.9% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:535: redactRuleGovernanceEvidenceHandle 90.9% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:553: ruleGovernanceEvidenceHandleHasSensitiveText 100.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:559: isCanonicalRuleGovernanceEvidenceHandle 75.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:580: isSafeRuleGovernanceEvidenceID 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:594: parseRuleGovernanceTransitionRequest 100.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:604: parseRuleGovernanceSince 58.3% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:623: boundedRuleGovernanceLimit 66.7% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:634: formatRuleGovernanceTime 100.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:641: formatRuleGovernanceTimePtr 50.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:649: stringRuleCandidateStatusCounts 75.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:657: stringRuleVersionStateCounts 75.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:665: stringRuleArbiterRunStatusCounts 75.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:673: stringRuleInjectionEventTypeCounts 75.0% +github.com/thebtf/engram/internal/mcp/tools_rules.go:17: handleStoreRule 56.6% +github.com/thebtf/engram/internal/mcp/tools_rules.go:133: handleListRules 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:22: handleSettingsConsolidated 75.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:51: SetSettingsStore 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:57: settingsStore 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:67: isSecretSettingKey 100.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:74: requireAdmin 100.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:85: handleSetSetting 28.6% +github.com/thebtf/engram/internal/mcp/tools_settings.go:145: handleGetSetting 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:181: handleListSettings 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:216: handleDeleteSetting 15.4% +github.com/thebtf/engram/internal/mcp/tools_state.go:35: resumeScopesFromFields 100.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:52: stateTool 100.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:82: setStateTool 100.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:142: handleGetState 75.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:219: handleSetState 77.8% +github.com/thebtf/engram/internal/mcp/tools_state.go:274: decodeSessionStateForWrite 80.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:292: validateSessionStateBudget 83.3% +github.com/thebtf/engram/internal/mcp/tools_state.go:303: validateNativeResumePacket 89.7% +github.com/thebtf/engram/internal/mcp/tools_state.go:349: decodeProjectStateForWrite 75.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:364: requireStateObject 63.6% +github.com/thebtf/engram/internal/mcp/tools_state.go:383: requireNestedObject 83.3% +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:10: handleStoreConsolidated 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:21: SetTemporalTruthProvider 100.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:25: temporalTruthEnabledFromEnv 100.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:30: temporalTruthTool 100.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:39: temporalTruthRefreshTool 100.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:48: temporalTruthRefreshSchema 100.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:58: temporalTruthSchema 100.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:72: currentTemporalTruthProvider 100.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:82: handleTemporalTruth 84.6% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:102: handleTemporalTruthRefresh 84.6% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:122: parseTemporalTruthArgs 87.5% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:151: parseTemporalTruthRefreshProject 85.7% +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:10: handleVaultConsolidated 0.0% +total: (statements) 46.2% diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/summary.json b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/summary.json new file mode 100644 index 00000000..ce7bd586 --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-full-mcp/summary.json @@ -0,0 +1,67 @@ +{ + "schema_version": 1, + "gate": "release-gates-foundation", + "run_id": "t007-maker-full-mcp", + "started_at": "2026-07-11T00:35:42.4341012+00:00", + "finished_at": "2026-07-11T00:36:05.2708116+00:00", + "duration_seconds": 22.837, + "verdict": "FAIL", + "counts": { + "requested_repeats": 1, + "completed_repeats": 1, + "passed_repeats": 0, + "failed_repeats": 1, + "child_commands": 16, + "nonzero_child_commands": 2 + }, + "packages": [ + "./internal/mcp" + ], + "run_pattern": null, + "coverage_policy": "Targeted", + "connection_budget": 20, + "race": false, + "database_dsn": "REDACTED_DATABASE_DSN", + "environment": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-full-mcp\\environment.json", + "commands": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-full-mcp\\commands.json", + "repeats": [ + { + "repeat": 1, + "verdict": "FAIL", + "database": "engram_prc_rg_test_4a8d23a359bc81a6_r1", + "schema": "public", + "database_schema_identity": "engram_prc_rg_test_4a8d23a359bc81a6_r1.public", + "database_dsn": "REDACTED_DATABASE_DSN", + "database_create_confirmed": true, + "sequential_execution": { + "package_parallelism": 1, + "test_parallelism": 1 + }, + "race": false, + "connection_budget": 20, + "server_sessions_before": 6, + "server_sessions_after": 6, + "sessions_before": 0, + "sessions_after": 0, + "go_test_exit": 1, + "json_parser_exit": 1, + "coverage_policy": "Targeted", + "coverage_exit": 0, + "cleanup_exit": 0, + "cleanup_status": "PASS", + "required_session_start_execution": { + "schema_version": 1, + "verdict": "NOT_APPLICABLE", + "reason": "only an unfiltered canonical ./... run requires the 12-test session-start execution proof" + }, + "cleanup_summary": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-full-mcp\\repeat-01\\cleanup\\cleanup.json", + "errors": [ + "go test failed with exit 1", + "go test JSON assertion failed with exit 1" + ], + "artifact_directory": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-full-mcp\\repeat-01" + } + ], + "errors": [], + "artifact_directory": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-full-mcp" +} diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/commands.json b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/commands.json new file mode 100644 index 00000000..0146ca25 --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/commands.json @@ -0,0 +1,444 @@ +[ + { + "name": "go-version", + "executable": "C:\\Program Files\\Go\\bin\\go.exe", + "arguments": [ + "version" + ], + "environment_keys": [], + "command": "C:\\Program Files\\Go\\bin\\go.exe version", + "started_at": "2026-07-11T00:38:39.4056550+00:00", + "finished_at": "2026-07-11T00:38:39.6226005+00:00", + "duration_seconds": 0.217, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-post-prove-green\\go-version.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-post-prove-green\\go-version.stderr.log" + }, + { + "name": "postgres-container-identity", + "executable": "docker", + "arguments": [ + "inspect", + "--format", + "{{.Name}}|{{.Config.Image}}|{{.Image}}|{{.State.Running}}", + "engram-prc-postgres" + ], + "environment_keys": [], + "command": "docker inspect --format {{.Name}}|{{.Config.Image}}|{{.Image}}|{{.State.Running}} engram-prc-postgres", + "started_at": "2026-07-11T00:38:39.6790962+00:00", + "finished_at": "2026-07-11T00:38:39.9635602+00:00", + "duration_seconds": 0.284, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-post-prove-green\\postgres-container-identity.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-post-prove-green\\postgres-container-identity.stderr.log" + }, + { + "name": "postgres-server-identity", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT json_build_object('server_version', current_setting('server_version'), 'server_version_num', current_setting('server_version_num'), 'version', version(), 'max_connections', current_setting('max_connections'), 'superuser_reserved_connections', current_setting('superuser_reserved_connections'), 'reserved_connections', COALESCE(NULLIF(current_setting('reserved_connections', true), ''), '0'), 'current_connections', (SELECT count(*)::text FROM pg_stat_activity), 'database', current_database(), 'schema', current_schema(), 'user', current_user)::text;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT json_build_object('server_version', current_setting('server_version'), 'server_version_num', current_setting('server_version_num'), 'version', version(), 'max_connections', current_setting('max_connections'), 'superuser_reserved_connections', current_setting('superuser_reserved_connections'), 'reserved_connections', COALESCE(NULLIF(current_setting('reserved_connections', true), ''), '0'), 'current_connections', (SELECT count(*)::text FROM pg_stat_activity), 'database', current_database(), 'schema', current_schema(), 'user', current_user)::text;", + "started_at": "2026-07-11T00:38:39.9744086+00:00", + "finished_at": "2026-07-11T00:38:40.4393987+00:00", + "duration_seconds": 0.465, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-post-prove-green\\postgres-server-identity.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-post-prove-green\\postgres-server-identity.stderr.log" + }, + { + "name": "repeat-1-create-database", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "CREATE DATABASE \"engram_prc_rg_test_8a461b2905076235_r1\" OWNER \"engram\";" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c CREATE DATABASE \"engram_prc_rg_test_8a461b2905076235_r1\" OWNER \"engram\";", + "started_at": "2026-07-11T00:38:40.4715604+00:00", + "finished_at": "2026-07-11T00:38:40.9083262+00:00", + "duration_seconds": 0.437, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-post-prove-green\\repeat-01\\create-database.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-post-prove-green\\repeat-01\\create-database.stderr.log" + }, + { + "name": "repeat-1-create-pgvector", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "engram_prc_rg_test_8a461b2905076235_r1", + "-At", + "-F", + "|", + "-c", + "CREATE EXTENSION IF NOT EXISTS vector WITH SCHEMA public;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d engram_prc_rg_test_8a461b2905076235_r1 -At -F | -c CREATE EXTENSION IF NOT EXISTS vector WITH SCHEMA public;", + "started_at": "2026-07-11T00:38:40.9118425+00:00", + "finished_at": "2026-07-11T00:38:41.3035556+00:00", + "duration_seconds": 0.392, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-post-prove-green\\repeat-01\\create-pgvector.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-post-prove-green\\repeat-01\\create-pgvector.stderr.log" + }, + { + "name": "repeat-1-database-identity", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "engram_prc_rg_test_8a461b2905076235_r1", + "-At", + "-F", + "|", + "-c", + "SELECT json_build_object('database', current_database(), 'schema', current_schema(), 'server_version', current_setting('server_version'), 'user', current_user)::text;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d engram_prc_rg_test_8a461b2905076235_r1 -At -F | -c SELECT json_build_object('database', current_database(), 'schema', current_schema(), 'server_version', current_setting('server_version'), 'user', current_user)::text;", + "started_at": "2026-07-11T00:38:41.3061420+00:00", + "finished_at": "2026-07-11T00:38:41.6898050+00:00", + "duration_seconds": 0.384, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-post-prove-green\\repeat-01\\database-identity.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-post-prove-green\\repeat-01\\database-identity.stderr.log" + }, + { + "name": "repeat-1-pg-stat-before", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT COALESCE(json_agg(row_to_json(s)), '[]'::json)::text FROM (SELECT pid, usename, datname, state, backend_type, application_name, client_addr::text AS client_addr, wait_event_type, wait_event, query_start FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_8a461b2905076235_r1' ORDER BY pid) AS s;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT COALESCE(json_agg(row_to_json(s)), '[]'::json)::text FROM (SELECT pid, usename, datname, state, backend_type, application_name, client_addr::text AS client_addr, wait_event_type, wait_event, query_start FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_8a461b2905076235_r1' ORDER BY pid) AS s;", + "started_at": "2026-07-11T00:38:41.6937891+00:00", + "finished_at": "2026-07-11T00:38:42.0080540+00:00", + "duration_seconds": 0.314, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-post-prove-green\\repeat-01\\pg-stat-activity-before.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-post-prove-green\\repeat-01\\pg-stat-activity-before.stderr.log" + }, + { + "name": "repeat-1-server-connection-count-before", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT count(*) FROM pg_stat_activity;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT count(*) FROM pg_stat_activity;", + "started_at": "2026-07-11T00:38:42.0104621+00:00", + "finished_at": "2026-07-11T00:38:42.3818887+00:00", + "duration_seconds": 0.371, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-post-prove-green\\repeat-01\\server-connection-count-before.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-post-prove-green\\repeat-01\\server-connection-count-before.stderr.log" + }, + { + "name": "repeat-1-connection-count-before", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT count(*) FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_8a461b2905076235_r1';" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT count(*) FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_8a461b2905076235_r1';", + "started_at": "2026-07-11T00:38:42.3913766+00:00", + "finished_at": "2026-07-11T00:38:42.7692414+00:00", + "duration_seconds": 0.378, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-post-prove-green\\repeat-01\\connection-count-before.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-post-prove-green\\repeat-01\\connection-count-before.stderr.log" + }, + { + "name": "repeat-1-go-test", + "executable": "C:\\Program Files\\Go\\bin\\go.exe", + "arguments": [ + "test", + "-json", + "-p", + "1", + "-parallel", + "1", + "-count=1", + "-timeout", + "30m", + "-covermode=atomic", + "-coverprofile=.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-post-prove-green\\repeat-01\\coverage.out", + "-run", + "^TestEC_F1_TagDerivedBackfill_T007$", + "./internal/mcp" + ], + "environment_keys": [ + "DATABASE_DSN", + "DATABASE_MAX_CONNS", + "ENGRAM_RELEASE_GATE_REPEAT", + "ENGRAM_RELEASE_GATE_RUN_ID", + "ENGRAM_TEST_DSN", + "TEST_DATABASE_DSN" + ], + "command": "C:\\Program Files\\Go\\bin\\go.exe test -json -p 1 -parallel 1 -count=1 -timeout 30m -covermode=atomic -coverprofile=.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-post-prove-green\\repeat-01\\coverage.out -run ^TestEC_F1_TagDerivedBackfill_T007$ ./internal/mcp", + "started_at": "2026-07-11T00:38:42.7765391+00:00", + "finished_at": "2026-07-11T00:38:48.3431940+00:00", + "duration_seconds": 5.567, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-post-prove-green\\repeat-01\\go-test.stdout.jsonl", + "stderr": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-post-prove-green\\repeat-01\\go-test.stderr.log" + }, + { + "name": "repeat-1-assert-go-test-json", + "executable": "C:\\Program Files\\PowerShell\\7\\pwsh.exe", + "arguments": [ + "-NoProfile", + "-File", + "D:\\Dev\\engram\\.w\\t007-current-contract\\scripts\\production-gates\\assert-go-test-json.ps1", + "-InputPath", + ".agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-post-prove-green\\repeat-01\\go-test.stdout.jsonl", + "-SummaryPath", + ".agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-post-prove-green\\repeat-01\\go-test-summary.json", + "-FailOnUnexpectedSkip" + ], + "environment_keys": [], + "command": "C:\\Program Files\\PowerShell\\7\\pwsh.exe -NoProfile -File D:\\Dev\\engram\\.w\\t007-current-contract\\scripts\\production-gates\\assert-go-test-json.ps1 -InputPath .agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-post-prove-green\\repeat-01\\go-test.stdout.jsonl -SummaryPath .agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-post-prove-green\\repeat-01\\go-test-summary.json -FailOnUnexpectedSkip", + "started_at": "2026-07-11T00:38:48.3481831+00:00", + "finished_at": "2026-07-11T00:38:49.0468567+00:00", + "duration_seconds": 0.699, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-post-prove-green\\repeat-01\\assert-go-test-json.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-post-prove-green\\repeat-01\\assert-go-test-json.stderr.log" + }, + { + "name": "repeat-1-targeted-coverage-report", + "executable": "C:\\Program Files\\Go\\bin\\go.exe", + "arguments": [ + "tool", + "cover", + "-func=.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-post-prove-green\\repeat-01\\coverage.out" + ], + "environment_keys": [], + "command": "C:\\Program Files\\Go\\bin\\go.exe tool cover -func=.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-post-prove-green\\repeat-01\\coverage.out", + "started_at": "2026-07-11T00:38:49.0523387+00:00", + "finished_at": "2026-07-11T00:38:49.6069690+00:00", + "duration_seconds": 0.555, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-post-prove-green\\repeat-01\\targeted-coverage.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-post-prove-green\\repeat-01\\targeted-coverage.stderr.log" + }, + { + "name": "repeat-1-pg-stat-after", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT COALESCE(json_agg(row_to_json(s)), '[]'::json)::text FROM (SELECT pid, usename, datname, state, backend_type, application_name, client_addr::text AS client_addr, wait_event_type, wait_event, query_start FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_8a461b2905076235_r1' ORDER BY pid) AS s;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT COALESCE(json_agg(row_to_json(s)), '[]'::json)::text FROM (SELECT pid, usename, datname, state, backend_type, application_name, client_addr::text AS client_addr, wait_event_type, wait_event, query_start FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_8a461b2905076235_r1' ORDER BY pid) AS s;", + "started_at": "2026-07-11T00:38:49.6079059+00:00", + "finished_at": "2026-07-11T00:38:50.1525425+00:00", + "duration_seconds": 0.545, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-post-prove-green\\repeat-01\\pg-stat-activity-after.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-post-prove-green\\repeat-01\\pg-stat-activity-after.stderr.log" + }, + { + "name": "repeat-1-server-connection-count-after", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT count(*) FROM pg_stat_activity;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT count(*) FROM pg_stat_activity;", + "started_at": "2026-07-11T00:38:50.1544278+00:00", + "finished_at": "2026-07-11T00:38:50.5342088+00:00", + "duration_seconds": 0.38, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-post-prove-green\\repeat-01\\server-connection-count-after.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-post-prove-green\\repeat-01\\server-connection-count-after.stderr.log" + }, + { + "name": "repeat-1-connection-count-after", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT count(*) FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_8a461b2905076235_r1';" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT count(*) FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_8a461b2905076235_r1';", + "started_at": "2026-07-11T00:38:50.5365620+00:00", + "finished_at": "2026-07-11T00:38:50.8891678+00:00", + "duration_seconds": 0.353, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-post-prove-green\\repeat-01\\connection-count-after.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-post-prove-green\\repeat-01\\connection-count-after.stderr.log" + }, + { + "name": "repeat-1-cleanup", + "executable": "C:\\Program Files\\PowerShell\\7\\pwsh.exe", + "arguments": [ + "-NoProfile", + "-File", + "D:\\Dev\\engram\\.w\\t007-current-contract\\scripts\\production-gates\\cleanup-db-sessions.ps1", + "-DatabaseName", + "engram_prc_rg_test_8a461b2905076235_r1", + "-SchemaName", + "public", + "-ArtifactRoot", + ".agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-post-prove-green\\repeat-01", + "-RunId", + "t007-maker-post-prove-green-repeat-1", + "-PostgresContainer", + "engram-prc-postgres" + ], + "environment_keys": [ + "ENGRAM_TEST_ADMIN_DSN" + ], + "command": "C:\\Program Files\\PowerShell\\7\\pwsh.exe -NoProfile -File D:\\Dev\\engram\\.w\\t007-current-contract\\scripts\\production-gates\\cleanup-db-sessions.ps1 -DatabaseName engram_prc_rg_test_8a461b2905076235_r1 -SchemaName public -ArtifactRoot .agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-post-prove-green\\repeat-01 -RunId t007-maker-post-prove-green-repeat-1 -PostgresContainer engram-prc-postgres", + "started_at": "2026-07-11T00:38:50.8932344+00:00", + "finished_at": "2026-07-11T00:38:53.8913888+00:00", + "duration_seconds": 2.998, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-post-prove-green\\repeat-01\\cleanup-process.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-post-prove-green\\repeat-01\\cleanup-process.stderr.log" + } +] diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/environment.json b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/environment.json new file mode 100644 index 00000000..35d1be54 --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/environment.json @@ -0,0 +1,52 @@ +{ + "schema_version": 1, + "run_id": "t007-maker-post-prove-green", + "timestamp": "2026-07-11T00:38:39.3860044+00:00", + "go_version": "go version go1.25.11 windows/amd64", + "postgres": { + "declared_image": "pgvector/pgvector:pg17", + "container": { + "name": "/engram-prc-postgres", + "configured_image": "pgvector/pgvector:pg17", + "image_id": "sha256:feb68f4f15446397d8cac7f4fe48fe4586de83160d1fc48b46283312d1a33966", + "running": true + }, + "server": { + "server_version": "17.10 (Debian 17.10-1.pgdg12+1)", + "server_version_num": "170010", + "version": "PostgreSQL 17.10 (Debian 17.10-1.pgdg12+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 12.2.0-14+deb12u1) 12.2.0, 64-bit", + "max_connections": "100", + "superuser_reserved_connections": "3", + "reserved_connections": "0", + "current_connections": "6", + "database": "postgres", + "schema": "public", + "user": "engram" + }, + "admin_dsn": "postgres://engram:REDACTED@127.0.0.1:55432/postgres?sslmode=disable" + }, + "packages": [ + "./internal/mcp" + ], + "run_pattern": "^TestEC_F1_TagDerivedBackfill_T007$", + "repeat": 1, + "fail_on_unexpected_skip": true, + "allowed_skip_identities": [], + "coverage_policy": "Targeted", + "connection_budget": 20, + "race": false, + "require_session_start_execution": false, + "required_session_start_test_count": 12, + "sequential_execution": { + "go_package_parallelism": 1, + "go_test_parallelism": 1, + "database_max_connections": 20 + }, + "govulncheck_policy": { + "authoritative": [ + "source scan with tests", + "unstripped binary scan" + ], + "non_authoritative": "stripped binary scan (module-level fallback when symbols are absent)" + } +} diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/go-version.stderr.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/go-version.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/go-version.stdout.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/go-version.stdout.log new file mode 100644 index 00000000..a857be3f --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/go-version.stdout.log @@ -0,0 +1 @@ +go version go1.25.11 windows/amd64 diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/postgres-container-identity.stderr.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/postgres-container-identity.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/postgres-container-identity.stdout.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/postgres-container-identity.stdout.log new file mode 100644 index 00000000..c110d492 --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/postgres-container-identity.stdout.log @@ -0,0 +1 @@ +/engram-prc-postgres|pgvector/pgvector:pg17|sha256:feb68f4f15446397d8cac7f4fe48fe4586de83160d1fc48b46283312d1a33966|true diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/postgres-server-identity.stderr.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/postgres-server-identity.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/postgres-server-identity.stdout.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/postgres-server-identity.stdout.log new file mode 100644 index 00000000..2e33d56e --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/postgres-server-identity.stdout.log @@ -0,0 +1 @@ +{"server_version" : "17.10 (Debian 17.10-1.pgdg12+1)", "server_version_num" : "170010", "version" : "PostgreSQL 17.10 (Debian 17.10-1.pgdg12+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 12.2.0-14+deb12u1) 12.2.0, 64-bit", "max_connections" : "100", "superuser_reserved_connections" : "3", "reserved_connections" : "0", "current_connections" : "6", "database" : "postgres", "schema" : "public", "user" : "engram"} diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/repeat-01/assert-go-test-json.stderr.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/repeat-01/assert-go-test-json.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/repeat-01/assert-go-test-json.stdout.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/repeat-01/assert-go-test-json.stdout.log new file mode 100644 index 00000000..e09d7b20 --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/repeat-01/assert-go-test-json.stdout.log @@ -0,0 +1,2 @@ +go test JSON verdict=PASS packages=1 tests=1 passed=1 failed=0 skipped=0 unexpected_skips=0 malformed=0 +summary=D:\Dev\engram\.w\t007-current-contract\.agent\reports\evidence\production-ready\t007-compat\t007-maker-post-prove-green\repeat-01\go-test-summary.json diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/repeat-01/cleanup-process.stderr.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/repeat-01/cleanup-process.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/repeat-01/cleanup-process.stdout.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/repeat-01/cleanup-process.stdout.log new file mode 100644 index 00000000..eddc3069 --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/repeat-01/cleanup-process.stdout.log @@ -0,0 +1,2 @@ +cleanup verdict=PASS database=engram_prc_rg_test_8a461b2905076235_r1 schema=public terminated_sessions=0 remaining_database_count=0 +summary=D:\Dev\engram\.w\t007-current-contract\.agent\reports\evidence\production-ready\t007-compat\t007-maker-post-prove-green\repeat-01\cleanup\cleanup.json diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/repeat-01/cleanup/cleanup.json b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/repeat-01/cleanup/cleanup.json new file mode 100644 index 00000000..febc5d1d --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/repeat-01/cleanup/cleanup.json @@ -0,0 +1,170 @@ +{ + "schema_version": 1, + "run_id": "t007-maker-post-prove-green-repeat-1", + "timestamp": "2026-07-11T00:38:53.7886769+00:00", + "verdict": "PASS", + "database": "engram_prc_rg_test_8a461b2905076235_r1", + "schema": "public", + "database_schema_identity": "engram_prc_rg_test_8a461b2905076235_r1.public", + "admin_dsn": "postgres://engram:REDACTED@127.0.0.1:55432/postgres?sslmode=disable", + "postgres_container": "engram-prc-postgres", + "cleanup_status": "PASS", + "cleanup_attempted": true, + "database_existed_before": true, + "absence_verified": true, + "terminated_sessions": 0, + "remaining_database_count": 0, + "commands": [ + { + "name": "database-exists-before-cleanup", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT count(*) FROM pg_database WHERE datname = 'engram_prc_rg_test_8a461b2905076235_r1';" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT count(*) FROM pg_database WHERE datname = 'engram_prc_rg_test_8a461b2905076235_r1';", + "started_at": "2026-07-11T00:38:51.5531725+00:00", + "finished_at": "2026-07-11T00:38:51.9713580+00:00", + "duration_seconds": 0.418, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-post-prove-green\\repeat-01\\cleanup\\database-exists-before.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-post-prove-green\\repeat-01\\cleanup\\database-exists-before.stderr.log" + }, + { + "name": "pg-stat-activity-before-cleanup", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT COALESCE(json_agg(row_to_json(s)), '[]'::json)::text FROM (SELECT pid, usename, datname, state, backend_type, application_name, client_addr::text AS client_addr, wait_event_type, wait_event, query_start FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_8a461b2905076235_r1' ORDER BY pid) AS s;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT COALESCE(json_agg(row_to_json(s)), '[]'::json)::text FROM (SELECT pid, usename, datname, state, backend_type, application_name, client_addr::text AS client_addr, wait_event_type, wait_event, query_start FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_8a461b2905076235_r1' ORDER BY pid) AS s;", + "started_at": "2026-07-11T00:38:52.0332298+00:00", + "finished_at": "2026-07-11T00:38:52.3903789+00:00", + "duration_seconds": 0.357, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-post-prove-green\\repeat-01\\cleanup\\pg-stat-activity-before.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-post-prove-green\\repeat-01\\cleanup\\pg-stat-activity-before.stderr.log" + }, + { + "name": "terminate-database-sessions", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT COALESCE(json_agg(row_to_json(s)), '[]'::json)::text FROM (SELECT pid, pg_terminate_backend(pid) AS terminated FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_8a461b2905076235_r1' AND pid <> pg_backend_pid() ORDER BY pid) AS s;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT COALESCE(json_agg(row_to_json(s)), '[]'::json)::text FROM (SELECT pid, pg_terminate_backend(pid) AS terminated FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_8a461b2905076235_r1' AND pid <> pg_backend_pid() ORDER BY pid) AS s;", + "started_at": "2026-07-11T00:38:52.3950800+00:00", + "finished_at": "2026-07-11T00:38:52.7982718+00:00", + "duration_seconds": 0.403, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-post-prove-green\\repeat-01\\cleanup\\terminate-sessions.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-post-prove-green\\repeat-01\\cleanup\\terminate-sessions.stderr.log" + }, + { + "name": "drop-fresh-database", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "DROP DATABASE IF EXISTS \"engram_prc_rg_test_8a461b2905076235_r1\" WITH (FORCE);" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c DROP DATABASE IF EXISTS \"engram_prc_rg_test_8a461b2905076235_r1\" WITH (FORCE);", + "started_at": "2026-07-11T00:38:52.8052455+00:00", + "finished_at": "2026-07-11T00:38:53.3757638+00:00", + "duration_seconds": 0.571, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-post-prove-green\\repeat-01\\cleanup\\drop-database.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-post-prove-green\\repeat-01\\cleanup\\drop-database.stderr.log" + }, + { + "name": "verify-database-absent", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT count(*) FROM pg_database WHERE datname = 'engram_prc_rg_test_8a461b2905076235_r1';" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT count(*) FROM pg_database WHERE datname = 'engram_prc_rg_test_8a461b2905076235_r1';", + "started_at": "2026-07-11T00:38:53.3794323+00:00", + "finished_at": "2026-07-11T00:38:53.7820866+00:00", + "duration_seconds": 0.403, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-post-prove-green\\repeat-01\\cleanup\\verify-database-absent.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-post-prove-green\\repeat-01\\cleanup\\verify-database-absent.stderr.log" + } + ], + "errors": [] +} diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/repeat-01/cleanup/database-exists-before.stderr.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/repeat-01/cleanup/database-exists-before.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/repeat-01/cleanup/database-exists-before.stdout.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/repeat-01/cleanup/database-exists-before.stdout.log new file mode 100644 index 00000000..d00491fd --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/repeat-01/cleanup/database-exists-before.stdout.log @@ -0,0 +1 @@ +1 diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/repeat-01/cleanup/drop-database.stderr.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/repeat-01/cleanup/drop-database.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/repeat-01/cleanup/drop-database.stdout.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/repeat-01/cleanup/drop-database.stdout.log new file mode 100644 index 00000000..ca12dce0 --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/repeat-01/cleanup/drop-database.stdout.log @@ -0,0 +1 @@ +DROP DATABASE diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/repeat-01/cleanup/pg-stat-activity-before.stderr.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/repeat-01/cleanup/pg-stat-activity-before.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/repeat-01/cleanup/pg-stat-activity-before.stdout.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/repeat-01/cleanup/pg-stat-activity-before.stdout.log new file mode 100644 index 00000000..fe51488c --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/repeat-01/cleanup/pg-stat-activity-before.stdout.log @@ -0,0 +1 @@ +[] diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/repeat-01/cleanup/terminate-sessions.stderr.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/repeat-01/cleanup/terminate-sessions.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/repeat-01/cleanup/terminate-sessions.stdout.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/repeat-01/cleanup/terminate-sessions.stdout.log new file mode 100644 index 00000000..fe51488c --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/repeat-01/cleanup/terminate-sessions.stdout.log @@ -0,0 +1 @@ +[] diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/repeat-01/cleanup/verify-database-absent.stderr.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/repeat-01/cleanup/verify-database-absent.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/repeat-01/cleanup/verify-database-absent.stdout.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/repeat-01/cleanup/verify-database-absent.stdout.log new file mode 100644 index 00000000..573541ac --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/repeat-01/cleanup/verify-database-absent.stdout.log @@ -0,0 +1 @@ +0 diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/repeat-01/connection-count-after.stderr.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/repeat-01/connection-count-after.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/repeat-01/connection-count-after.stdout.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/repeat-01/connection-count-after.stdout.log new file mode 100644 index 00000000..573541ac --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/repeat-01/connection-count-after.stdout.log @@ -0,0 +1 @@ +0 diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/repeat-01/connection-count-before.stderr.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/repeat-01/connection-count-before.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/repeat-01/connection-count-before.stdout.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/repeat-01/connection-count-before.stdout.log new file mode 100644 index 00000000..573541ac --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/repeat-01/connection-count-before.stdout.log @@ -0,0 +1 @@ +0 diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/repeat-01/coverage.out b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/repeat-01/coverage.out new file mode 100644 index 00000000..52335d8a --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/repeat-01/coverage.out @@ -0,0 +1,3472 @@ +mode: atomic +github.com/thebtf/engram/internal/mcp/audit_helpers.go:33.53,34.30 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:34.30,36.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:37.2,37.25 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:37.25,39.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:40.2,40.12 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:44.28,46.2 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:52.83,53.12 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:53.12,54.16 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:54.16,55.32 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:55.32,61.5 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:63.3,65.33 3 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:65.33,71.4 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:77.54,78.14 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:78.14,80.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:81.2,82.16 2 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:82.16,85.3 2 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:86.2,87.13 2 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:92.91,93.23 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:93.23,95.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:96.2,97.15 2 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:97.15,99.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:100.2,105.65 4 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:105.65,113.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:117.95,118.23 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:118.23,120.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:121.2,122.15 2 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:122.15,124.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:125.2,129.65 5 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:129.65,138.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:142.87,143.23 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:143.23,145.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:146.2,147.15 2 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:147.15,149.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:150.2,153.65 4 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:153.65,161.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:166.96,167.23 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:167.23,169.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:170.2,171.15 2 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:171.15,173.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:174.2,177.63 4 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:177.63,185.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:189.97,190.23 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:190.23,192.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:193.2,194.15 2 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:194.15,196.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:197.2,200.68 4 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:200.68,208.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:30.62,31.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:31.20,33.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:34.2,35.49 2 0 +github.com/thebtf/engram/internal/mcp/coerce.go:35.49,37.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:38.2,38.14 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:38.14,40.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:41.2,41.15 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:46.52,47.14 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:47.14,49.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:50.2,50.23 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:51.14,52.11 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:53.19,54.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:55.15,56.45 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:57.12,58.31 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:59.10,60.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:67.43,68.14 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:68.14,70.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:71.2,71.23 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:72.15,73.23 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:74.19,75.38 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:75.38,77.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:78.3,78.40 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:78.40,80.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:81.3,81.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:82.14,83.56 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:83.56,85.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:86.3,86.54 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:86.54,88.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:89.3,89.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:90.10,91.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:97.49,98.14 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:98.14,100.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:101.2,101.23 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:102.15,103.18 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:104.19,105.38 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:105.38,107.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:108.3,108.40 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:108.40,110.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:111.3,111.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:112.14,113.56 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:113.56,115.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:116.3,116.54 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:116.54,118.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:119.3,119.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:120.10,121.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:127.55,128.14 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:128.14,130.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:131.2,131.23 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:132.15,133.11 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:134.19,135.40 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:135.40,137.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:138.3,138.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:139.14,140.54 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:140.54,142.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:143.3,143.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:144.10,145.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:151.46,152.14 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:152.14,154.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:155.2,155.23 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:156.12,157.11 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:158.14,159.54 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:159.54,161.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:162.3,162.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:163.15,164.16 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:165.19,166.40 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:166.40,168.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:169.3,169.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:170.10,171.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:177.40,178.14 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:178.14,180.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:181.2,181.23 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:182.13,184.26 2 0 +github.com/thebtf/engram/internal/mcp/coerce.go:184.26,185.36 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:185.36,187.5 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:189.3,189.16 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:190.16,191.11 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:192.14,193.14 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:193.14,195.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:196.3,196.13 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:197.10,198.13 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:204.38,205.14 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:205.14,207.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:208.2,209.9 2 0 +github.com/thebtf/engram/internal/mcp/coerce.go:209.9,211.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:212.2,213.27 2 0 +github.com/thebtf/engram/internal/mcp/coerce.go:213.27,214.42 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:214.42,216.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:218.2,218.15 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:222.32,223.39 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:223.39,225.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:226.2,226.30 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:226.30,228.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:229.2,229.30 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:229.30,231.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:232.2,232.15 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:236.35,237.28 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:237.28,239.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:240.2,240.28 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:240.28,242.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:243.2,243.15 1 0 +github.com/thebtf/engram/internal/mcp/context.go:17.55,19.2 1 0 +github.com/thebtf/engram/internal/mcp/context.go:22.78,24.2 1 0 +github.com/thebtf/engram/internal/mcp/context.go:29.78,31.2 1 0 +github.com/thebtf/engram/internal/mcp/context.go:35.53,38.2 2 0 +github.com/thebtf/engram/internal/mcp/context.go:41.80,43.2 1 0 +github.com/thebtf/engram/internal/mcp/context.go:48.80,50.2 1 0 +github.com/thebtf/engram/internal/mcp/context.go:54.53,57.2 2 0 +github.com/thebtf/engram/internal/mcp/context.go:61.51,62.43 1 0 +github.com/thebtf/engram/internal/mcp/context.go:62.43,64.3 1 0 +github.com/thebtf/engram/internal/mcp/context.go:65.2,65.16 1 0 +github.com/thebtf/engram/internal/mcp/health.go:22.32,26.2 3 0 +github.com/thebtf/engram/internal/mcp/health.go:29.37,33.2 3 0 +github.com/thebtf/engram/internal/mcp/health.go:36.35,40.2 3 0 +github.com/thebtf/engram/internal/mcp/health.go:42.44,45.25 3 0 +github.com/thebtf/engram/internal/mcp/health.go:45.25,47.50 1 0 +github.com/thebtf/engram/internal/mcp/health.go:47.50,50.4 2 0 +github.com/thebtf/engram/internal/mcp/health.go:55.74,60.16 5 0 +github.com/thebtf/engram/internal/mcp/health.go:60.16,62.3 1 0 +github.com/thebtf/engram/internal/mcp/health.go:63.2,71.4 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:28.42,29.65 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:29.65,32.3 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:33.2,33.40 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:33.40,35.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:36.2,36.14 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:39.120,40.69 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:40.69,42.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:43.2,44.19 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:44.19,46.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:47.2,48.17 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:48.17,50.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:51.2,52.59 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:52.59,54.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:55.2,56.20 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:56.20,58.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:59.2,60.17 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:60.17,62.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:63.2,64.21 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:64.21,66.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:67.2,68.22 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:68.22,70.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:71.2,72.23 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:72.23,74.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:76.2,98.19 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:98.19,100.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:101.2,101.66 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:104.52,106.29 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:106.29,108.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:109.2,110.46 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:113.113,123.27 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:123.27,125.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:126.2,127.16 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:127.16,129.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:130.2,130.25 1 0 +github.com/thebtf/engram/internal/mcp/server.go:127.44,138.2 1 1 +github.com/thebtf/engram/internal/mcp/server.go:141.64,143.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:146.78,148.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:151.53,153.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:156.55,158.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:161.58,163.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:166.62,168.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:171.50,173.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:176.78,178.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:181.74,183.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:186.71,189.2 2 0 +github.com/thebtf/engram/internal/mcp/server.go:191.85,193.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:195.61,197.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:199.49,201.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:204.54,206.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:211.53,213.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:216.53,218.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:222.61,224.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:228.59,230.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:234.51,236.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:240.52,242.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:246.55,248.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:252.82,254.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:260.70,262.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:269.68,271.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:274.87,277.2 2 0 +github.com/thebtf/engram/internal/mcp/server.go:282.60,284.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:290.45,292.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:297.77,299.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:303.37,313.38 3 0 +github.com/thebtf/engram/internal/mcp/server.go:313.38,315.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:316.2,317.9 2 0 +github.com/thebtf/engram/internal/mcp/server.go:317.9,319.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:320.2,321.9 2 0 +github.com/thebtf/engram/internal/mcp/server.go:321.9,323.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:324.2,325.9 2 0 +github.com/thebtf/engram/internal/mcp/server.go:325.9,327.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:328.2,328.14 1 0 +github.com/thebtf/engram/internal/mcp/server.go:332.35,334.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:383.49,387.12 3 0 +github.com/thebtf/engram/internal/mcp/server.go:387.12,388.22 1 0 +github.com/thebtf/engram/internal/mcp/server.go:388.22,389.11 1 0 +github.com/thebtf/engram/internal/mcp/server.go:390.22,392.11 2 0 +github.com/thebtf/engram/internal/mcp/server.go:393.12,393.12 0 0 +github.com/thebtf/engram/internal/mcp/server.go:396.4,397.18 2 0 +github.com/thebtf/engram/internal/mcp/server.go:397.18,398.13 1 0 +github.com/thebtf/engram/internal/mcp/server.go:401.4,402.61 2 0 +github.com/thebtf/engram/internal/mcp/server.go:402.61,404.13 2 0 +github.com/thebtf/engram/internal/mcp/server.go:407.4,407.55 1 0 +github.com/thebtf/engram/internal/mcp/server.go:407.55,409.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:411.3,411.28 1 0 +github.com/thebtf/engram/internal/mcp/server.go:414.2,414.9 1 0 +github.com/thebtf/engram/internal/mcp/server.go:415.20,416.19 1 0 +github.com/thebtf/engram/internal/mcp/server.go:417.25,418.17 1 0 +github.com/thebtf/engram/internal/mcp/server.go:418.17,420.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:421.3,421.13 1 0 +github.com/thebtf/engram/internal/mcp/server.go:427.77,428.19 1 0 +github.com/thebtf/engram/internal/mcp/server.go:428.19,431.3 2 0 +github.com/thebtf/engram/internal/mcp/server.go:433.2,433.20 1 0 +github.com/thebtf/engram/internal/mcp/server.go:434.20,435.33 1 0 +github.com/thebtf/engram/internal/mcp/server.go:436.20,437.32 1 0 +github.com/thebtf/engram/internal/mcp/server.go:438.20,439.37 1 0 +github.com/thebtf/engram/internal/mcp/server.go:443.24,444.93 1 0 +github.com/thebtf/engram/internal/mcp/server.go:445.34,446.101 1 0 +github.com/thebtf/engram/internal/mcp/server.go:447.22,448.91 1 0 +github.com/thebtf/engram/internal/mcp/server.go:449.29,450.120 1 0 +github.com/thebtf/engram/internal/mcp/server.go:451.10,456.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:461.51,462.20 1 0 +github.com/thebtf/engram/internal/mcp/server.go:463.50,464.70 1 0 +github.com/thebtf/engram/internal/mcp/server.go:465.46,466.79 1 0 +github.com/thebtf/engram/internal/mcp/server.go:467.10,468.80 1 0 +github.com/thebtf/engram/internal/mcp/server.go:473.59,485.63 2 0 +github.com/thebtf/engram/internal/mcp/server.go:485.63,487.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:489.2,493.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:496.45,503.33 3 0 +github.com/thebtf/engram/internal/mcp/server.go:503.33,505.57 2 0 +github.com/thebtf/engram/internal/mcp/server.go:505.57,506.76 1 0 +github.com/thebtf/engram/internal/mcp/server.go:506.76,507.13 1 0 +github.com/thebtf/engram/internal/mcp/server.go:509.4,509.18 1 0 +github.com/thebtf/engram/internal/mcp/server.go:509.18,511.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:511.10,513.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:514.4,518.11 5 0 +github.com/thebtf/engram/internal/mcp/server.go:522.2,522.19 1 0 +github.com/thebtf/engram/internal/mcp/server.go:660.29,683.21 2 0 +github.com/thebtf/engram/internal/mcp/server.go:683.21,689.3 5 0 +github.com/thebtf/engram/internal/mcp/server.go:690.2,699.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:712.30,765.49 3 0 +github.com/thebtf/engram/internal/mcp/server.go:765.49,789.3 5 0 +github.com/thebtf/engram/internal/mcp/server.go:790.2,799.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:805.40,936.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:942.58,1048.35 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1048.35,1077.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1080.2,1080.33 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1080.33,1090.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1093.2,1093.26 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1093.26,1123.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1124.2,1124.80 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1124.80,1126.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1127.2,1127.55 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1127.55,1129.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1130.2,1130.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1130.38,1132.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1134.2,1134.25 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1134.25,1136.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1138.2,1138.33 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1138.33,1140.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1141.2,1141.69 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1141.69,1143.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1144.2,1144.75 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1144.75,1146.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1148.2,1148.27 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1148.27,1165.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1168.2,1168.76 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1168.76,1191.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1195.2,1195.48 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1195.48,1197.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1201.2,1201.47 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1201.47,1203.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1205.2,1205.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1205.38,1207.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1212.2,1212.21 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1212.21,1214.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1228.2,1228.51 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1228.51,1230.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1233.2,1233.56 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1233.56,1235.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1238.2,1238.71 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1238.71,1298.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1302.2,1302.104 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1302.104,1321.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1324.2,1324.72 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1324.72,1333.154 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1333.154,1334.26 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1334.26,1336.8 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1337.7,1337.16 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1338.35,1340.26 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1340.26,1342.8 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1343.7,1343.18 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1371.2,1371.26 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1371.26,1390.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1393.2,1393.28 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1393.28,1443.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1446.2,1446.28 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1446.28,1478.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1481.2,1481.37 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1481.37,1561.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1564.2,1568.23 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1568.23,1570.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1572.2,1588.57 3 0 +github.com/thebtf/engram/internal/mcp/server.go:1588.57,1591.29 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1591.29,1593.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1594.3,1594.27 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1594.27,1595.29 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1595.29,1597.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1601.2,1607.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1612.79,1614.60 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1614.60,1620.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1622.2,1623.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1623.16,1631.3 3 0 +github.com/thebtf/engram/internal/mcp/server.go:1633.2,1641.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1644.69,1645.34 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1645.34,1647.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1648.2,1649.22 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1649.22,1651.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1652.2,1652.37 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1656.99,1658.14 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1659.16,1660.35 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1661.15,1662.46 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1663.18,1664.49 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1665.15,1666.46 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1667.18,1668.49 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1669.14,1670.45 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1671.15,1672.34 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1676.2,1676.14 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1677.35,1678.52 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1679.26,1680.37 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1681.20,1682.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1683.20,1684.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1685.16,1686.35 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1687.29,1688.40 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1689.33,1690.50 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1691.25,1692.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1693.23,1694.41 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1696.26,1697.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1698.24,1699.42 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1700.22,1701.40 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1702.25,1703.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1704.27,1705.45 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1706.25,1707.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1709.30,1710.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1711.28,1712.42 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1713.17,1714.40 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1715.20,1716.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1717.20,1718.45 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1719.20,1720.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1722.20,1723.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1724.18,1725.36 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1726.20,1727.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1728.18,1729.36 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1730.21,1731.39 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1732.21,1733.39 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1734.26,1735.44 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1736.25,1737.34 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1738.26,1739.44 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1740.24,1741.42 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1742.26,1743.44 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1744.27,1745.45 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1746.22,1747.40 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1748.19,1749.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1750.15,1751.34 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1752.16,1753.35 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1755.21,1756.44 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1757.19,1758.42 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1759.20,1760.44 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1761.22,1762.45 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1763.22,1764.40 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1765.23,1766.41 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1767.20,1768.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1769.32,1770.49 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1771.19,1772.37 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1773.19,1774.37 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1775.33,1776.50 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1777.35,1778.52 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1779.24,1780.42 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1781.32,1782.49 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1783.28,1784.46 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1785.21,1786.39 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1787.34,1788.51 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1789.25,1790.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1791.29,1792.46 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1793.26,1794.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1795.27,1796.44 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1798.25,1799.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1800.23,1801.41 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1802.27,1803.45 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1804.26,1805.44 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1806.29,1807.47 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1809.29,1810.46 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1811.27,1812.44 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1813.30,1814.47 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1815.38,1816.54 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1817.36,1818.52 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1820.24,1821.42 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1822.27,1823.45 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1824.22,1825.40 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1826.32,1827.49 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1828.32,1829.49 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1830.31,1831.48 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1832.35,1833.52 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1834.36,1835.53 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1836.36,1837.53 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1838.38,1839.54 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1840.34,1841.51 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1843.22,1844.40 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1845.21,1846.39 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1847.24,1848.42 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1850.25,1851.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1852.25,1853.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1859.2,1859.14 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1860.22,1863.131 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1866.51,1867.123 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1868.10,1869.50 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1874.47,1876.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1876.16,1879.3 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1880.2,1880.35 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1884.72,1890.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1896.105,1898.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1898.16,1900.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1902.2,1903.17 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1903.17,1905.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1907.2,1908.17 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1908.17,1910.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1912.2,1918.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1918.16,1920.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1921.2,1921.25 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1927.76,1933.15 3 0 +github.com/thebtf/engram/internal/mcp/server.go:1933.15,1936.17 3 0 +github.com/thebtf/engram/internal/mcp/server.go:1936.17,1938.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1939.3,1939.26 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1943.2,1950.36 3 0 +github.com/thebtf/engram/internal/mcp/server.go:1950.36,1952.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1952.8,1955.29 3 0 +github.com/thebtf/engram/internal/mcp/server.go:1955.29,1958.4 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1959.3,1962.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1966.2,1966.20 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1966.20,1977.20 6 0 +github.com/thebtf/engram/internal/mcp/server.go:1977.20,1979.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1980.3,1980.20 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1980.20,1982.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1985.3,1985.37 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1985.37,1987.30 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1987.30,1988.16 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1988.16,1990.6 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1990.11,1992.6 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1994.4,1995.56 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1995.56,1997.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1998.4,2003.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2008.2,2008.29 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2008.29,2009.63 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2009.63,2011.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2011.9,2013.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2021.2,2021.29 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2021.29,2029.38 3 0 +github.com/thebtf/engram/internal/mcp/server.go:2029.38,2031.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2031.9,2033.31 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2033.31,2035.30 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2035.30,2037.6 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2039.4,2042.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2046.2,2047.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2047.16,2049.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2050.2,2050.25 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2055.57,2056.33 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2056.33,2058.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2059.2,2060.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2060.16,2062.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2063.2,2064.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2064.16,2066.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2067.2,2067.23 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2071.79,2105.15 6 0 +github.com/thebtf/engram/internal/mcp/server.go:2105.15,2107.17 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2107.17,2111.4 3 0 +github.com/thebtf/engram/internal/mcp/server.go:2111.9,2112.17 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2112.17,2114.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2115.4,2117.26 3 0 +github.com/thebtf/engram/internal/mcp/server.go:2117.26,2119.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2119.10,2121.29 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2121.29,2123.6 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2125.4,2129.25 5 0 +github.com/thebtf/engram/internal/mcp/server.go:2130.19,2130.19 0 0 +github.com/thebtf/engram/internal/mcp/server.go:2132.20,2134.106 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2135.12,2137.103 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2140.8,2143.3 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2144.2,2150.49 3 0 +github.com/thebtf/engram/internal/mcp/server.go:2150.49,2152.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2152.8,2154.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2155.2,2168.27 4 0 +github.com/thebtf/engram/internal/mcp/server.go:2168.27,2170.17 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2170.17,2173.4 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2173.9,2175.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2177.2,2182.40 4 0 +github.com/thebtf/engram/internal/mcp/server.go:2182.40,2183.21 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2184.20,2185.20 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2186.19,2187.19 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2191.2,2191.24 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2191.24,2193.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2193.8,2193.30 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2193.30,2195.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2198.2,2198.28 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2198.28,2200.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2203.2,2203.29 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2203.29,2205.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2207.2,2208.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2208.16,2210.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2211.2,2211.28 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2216.103,2218.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2218.16,2220.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2222.2,2223.15 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2223.15,2225.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2227.2,2239.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2239.16,2241.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2242.2,2242.25 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2246.93,2248.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2251.91,2253.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:18.28,29.20 4 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:29.20,33.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:35.2,44.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:68.36,69.49 1 1 +github.com/thebtf/engram/internal/mcp/tools_admin.go:69.49,74.3 4 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:75.2,75.25 1 1 +github.com/thebtf/engram/internal/mcp/tools_admin.go:80.26,82.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:84.89,86.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:86.16,88.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:89.2,90.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:90.18,92.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:94.2,94.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:95.15,96.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:97.26,98.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:99.25,100.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:101.23,105.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:105.22,107.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:108.3,108.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:109.10,110.114 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:120.92,126.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:126.26,128.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:130.2,131.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:131.19,133.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:134.2,135.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:135.19,137.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:138.2,138.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:138.24,140.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:142.2,142.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:142.25,144.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:146.2,147.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:147.16,149.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:151.2,151.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:27.40,30.2 2 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:32.30,46.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:48.99,49.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:49.34,51.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:52.2,52.69 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:52.69,54.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:56.2,57.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:57.16,59.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:60.2,61.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:61.21,63.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:64.2,67.26 3 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:67.26,69.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:70.2,71.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:71.25,73.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:75.2,77.44 3 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:77.44,79.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:80.2,80.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:80.33,82.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:83.2,83.81 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:86.52,87.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:87.16,89.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:90.2,90.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:90.15,92.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:93.2,93.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:96.73,97.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:97.21,99.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:100.2,101.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:101.29,110.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:111.2,111.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:114.34,116.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:31.98,32.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:32.52,34.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:35.2,35.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:35.26,37.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:39.2,40.49 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:40.49,42.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:43.2,43.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:43.21,45.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:46.2,46.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:46.21,48.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:49.2,49.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:49.18,51.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:52.2,52.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:52.18,54.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:56.2,56.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:56.38,58.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:60.2,61.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:61.16,63.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:68.2,70.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:70.26,77.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:79.2,81.36 3 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:81.36,84.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:86.2,89.28 3 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:89.28,90.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:90.39,91.9 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:93.3,97.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:100.2,104.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:107.60,113.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:115.101,116.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:116.38,118.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:120.2,122.21 3 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:122.21,123.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:123.26,125.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:126.3,126.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:126.23,128.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:129.8,130.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:130.26,132.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:133.3,133.68 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:133.68,135.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:137.2,140.20 3 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:141.17,142.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:143.67,143.67 0 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:144.10,145.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:148.2,162.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:162.16,164.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:165.2,165.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:165.19,173.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:174.2,174.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:174.30,176.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:177.2,177.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:177.31,179.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:181.2,182.36 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:182.36,196.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:198.2,199.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:199.19,201.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:202.2,203.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:203.18,205.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:206.2,207.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:207.21,209.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:210.2,211.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:211.25,213.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:214.2,225.21 3 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:225.21,227.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:228.2,228.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:228.25,230.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:231.2,231.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:231.18,233.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:235.2,244.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:244.21,246.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:247.2,247.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:247.25,249.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:250.2,250.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:250.18,252.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:253.2,253.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:253.24,255.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:256.2,256.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:259.50,261.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:261.22,263.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:264.2,264.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:270.90,272.42 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:272.42,276.3 3 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:277.2,281.27 3 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:281.27,282.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:282.45,284.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:286.2,286.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:25.28,88.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:95.95,96.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:96.22,98.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:99.2,100.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:100.32,102.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:104.2,105.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:105.16,107.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:109.2,114.35 3 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:114.35,121.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:123.2,123.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:123.25,125.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:127.2,134.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:134.16,136.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:138.2,146.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:154.94,155.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:155.22,157.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:158.2,159.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:159.32,161.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:163.2,164.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:164.16,166.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:168.2,172.35 3 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:172.35,179.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:181.2,181.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:181.25,183.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:185.2,192.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:192.16,194.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:196.2,203.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:211.97,212.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:212.22,214.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:215.2,216.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:216.32,218.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:220.2,221.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:221.16,223.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:225.2,229.35 3 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:229.35,236.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:238.2,238.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:238.25,240.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:242.2,249.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:249.16,251.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:253.2,260.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:31.80,32.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:32.14,34.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:35.2,48.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:51.136,53.51 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:53.51,55.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:56.2,56.83 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:59.94,60.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:60.21,62.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:63.2,63.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:68.30,162.2 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:165.98,166.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:166.49,168.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:169.2,170.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:170.16,172.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:173.2,174.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:174.19,176.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:177.2,179.17 3 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:179.17,181.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:183.2,184.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:184.16,186.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:188.2,189.31 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:189.31,190.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:190.15,191.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:193.3,193.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:196.2,201.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:201.16,203.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:204.2,204.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:208.96,209.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:209.49,211.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:212.2,213.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:213.16,215.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:216.2,217.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:217.13,219.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:221.2,222.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:222.16,224.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:225.2,225.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:225.22,227.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:229.2,230.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:230.16,232.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:233.2,233.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:239.100,240.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:240.22,242.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:243.2,244.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:244.16,246.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:247.2,248.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:248.13,250.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:255.2,256.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:256.12,263.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:263.30,264.77 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:264.77,269.5 4 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:271.3,272.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:272.21,274.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:275.3,275.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:279.2,279.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:279.29,281.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:284.2,285.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:285.16,287.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:288.2,288.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:288.22,290.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:291.2,291.55 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:291.55,293.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:294.2,294.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:294.74,296.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:297.2,298.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:298.16,300.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:306.2,307.41 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:307.41,309.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:310.2,324.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:324.16,325.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:325.50,327.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:328.3,328.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:330.2,330.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:330.38,332.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:334.2,341.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:341.16,343.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:344.2,344.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:348.99,349.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:349.49,351.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:352.2,353.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:353.16,355.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:356.2,357.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:357.13,359.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:360.2,362.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:362.16,364.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:365.2,365.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:365.22,367.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:368.2,368.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:368.74,370.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:371.2,372.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:372.16,374.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:375.2,375.85 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:375.85,377.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:379.2,380.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:380.16,381.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:381.50,383.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:384.3,384.60 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:386.2,386.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:386.20,388.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:390.2,395.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:395.16,397.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:398.2,398.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:402.102,403.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:403.49,405.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:406.2,407.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:407.16,409.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:410.2,411.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:411.13,413.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:414.2,415.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:415.16,417.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:418.2,418.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:418.22,420.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:421.2,421.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:421.74,423.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:424.2,425.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:425.16,427.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:428.2,428.88 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:428.88,430.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:432.2,433.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:433.16,434.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:434.50,436.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:437.3,437.63 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:439.2,439.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:439.20,441.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:443.2,448.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:448.16,450.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:451.2,451.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:34.30,36.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:42.61,44.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:48.32,75.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:79.32,94.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:100.98,101.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:101.25,103.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:104.2,104.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:104.29,106.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:108.2,113.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:113.17,114.55 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:114.55,116.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:118.2,118.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:118.24,120.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:121.2,121.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:121.23,123.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:124.2,124.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:124.23,126.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:134.2,135.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:135.21,137.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:142.2,147.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:147.16,149.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:154.2,165.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:165.25,175.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:177.2,183.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:183.16,185.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:186.2,186.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:194.98,195.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:195.25,197.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:198.2,198.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:198.29,200.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:202.2,205.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:205.17,207.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:208.2,209.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:209.21,211.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:213.2,214.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:214.16,216.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:217.2,218.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:218.16,220.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:221.2,222.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:222.16,224.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:226.2,231.11 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:231.11,233.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:235.2,236.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:236.16,238.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:239.2,239.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:21.52,22.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:22.24,25.28 3 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:25.28,27.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:29.2,29.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:35.72,37.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:37.15,39.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:41.2,42.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:42.16,44.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:45.2,45.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:49.99,51.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:51.16,53.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:55.2,56.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:56.16,58.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:60.2,72.23 7 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:72.23,74.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:75.2,75.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:75.24,77.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:78.2,78.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:78.24,80.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:81.2,81.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:82.27,82.27 0 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:84.10,85.93 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:87.2,87.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:87.30,89.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:90.2,90.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:90.26,92.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:94.2,95.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:95.16,97.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:99.2,100.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:100.16,102.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:104.2,112.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:112.16,114.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:116.2,123.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:123.16,125.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:126.2,126.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:130.97,132.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:132.16,134.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:136.2,137.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:137.16,139.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:141.2,147.23 4 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:147.23,149.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:150.2,150.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:150.26,152.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:154.2,155.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:155.16,157.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:159.2,160.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:160.16,161.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:161.47,163.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:164.3,164.51 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:167.2,167.97 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:167.97,172.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:174.2,175.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:175.16,177.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:179.2,185.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:185.16,187.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:188.2,188.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:192.99,194.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:194.16,196.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:198.2,199.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:199.16,201.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:203.2,207.26 3 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:207.26,209.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:211.2,212.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:212.16,214.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:216.2,223.26 3 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:223.26,229.28 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:229.28,231.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:232.3,232.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:235.2,236.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:236.16,238.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:239.2,239.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:243.100,245.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:245.16,247.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:249.2,250.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:250.16,252.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:254.2,262.23 5 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:262.23,264.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:265.2,265.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:265.24,267.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:268.2,268.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:269.27,269.27 0 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:271.10,272.93 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:274.2,274.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:274.30,276.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:277.2,277.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:277.26,279.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:281.2,281.71 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:281.71,282.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:282.47,284.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:285.3,285.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:288.2,293.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:293.16,295.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:296.2,296.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:302.92,309.19 5 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:309.19,310.53 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:310.53,313.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:316.2,317.51 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:317.51,318.66 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:318.66,320.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:323.2,331.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:331.16,333.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:334.2,334.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:338.46,342.32 4 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:342.32,343.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:343.20,346.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:348.2,350.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:350.26,352.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:352.27,353.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:353.13,355.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:356.4,356.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:358.3,358.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:360.2,360.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:16.45,18.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:20.35,36.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:38.84,39.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:39.40,41.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:42.2,42.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:42.50,44.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:45.2,45.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:48.101,50.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:50.16,52.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:53.2,54.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:54.16,56.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:57.2,58.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:58.19,60.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:61.2,62.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:62.21,64.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:65.2,66.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:66.16,68.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:69.2,69.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:72.102,74.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:74.16,76.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:77.2,82.8 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:10.100,12.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:12.16,14.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:16.2,17.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:17.18,19.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:21.2,21.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:22.16,23.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:24.14,25.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:26.14,27.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:28.17,29.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:30.17,31.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:32.21,33.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:34.19,35.42 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:36.17,37.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:38.16,39.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:40.16,41.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:42.21,43.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:44.10,45.167 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:15.77,16.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:16.33,18.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:20.2,21.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:21.27,23.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:25.2,26.28 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:26.28,29.17 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:29.17,31.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:34.2,41.32 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:41.32,46.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:46.20,48.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:49.3,49.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:52.2,53.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:53.16,55.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:57.2,57.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:61.97,62.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:62.28,64.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:66.2,67.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:67.16,69.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:71.2,75.29 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:75.29,77.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:79.2,80.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:80.16,82.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:84.2,84.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:84.20,86.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:88.2,97.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:97.25,103.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:103.20,105.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:106.3,106.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:106.19,108.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:109.3,109.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:112.2,113.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:113.16,115.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:117.2,117.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:121.95,122.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:122.28,124.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:126.2,127.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:127.16,129.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:131.2,137.50 4 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:137.50,139.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:141.2,142.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:142.16,144.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:145.2,145.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:145.16,147.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:149.2,149.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:149.21,151.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:153.2,154.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:154.16,156.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:157.2,157.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:157.20,159.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:161.2,161.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:165.98,166.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:166.28,168.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:170.2,171.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:171.16,173.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:175.2,181.50 4 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:181.50,183.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:185.2,185.96 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:185.96,187.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:189.2,189.88 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:197.98,198.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:198.28,200.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:202.2,203.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:203.16,205.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:207.2,217.74 6 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:217.74,219.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:222.2,223.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:223.16,225.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:227.2,229.156 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:235.98,237.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:237.16,239.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:241.2,247.24 4 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:247.24,249.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:252.2,253.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:253.29,255.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:256.2,256.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:15.93,16.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:16.37,18.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:20.2,21.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:21.16,23.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:25.2,32.16 7 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:32.16,34.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:35.2,35.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:35.19,37.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:38.2,38.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:38.19,40.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:42.2,43.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:43.16,45.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:47.2,54.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:54.16,56.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:57.2,57.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:61.91,62.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:62.37,64.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:66.2,67.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:67.16,69.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:71.2,73.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:73.16,75.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:76.2,76.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:76.19,78.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:80.2,81.43 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:81.43,83.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:83.19,85.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:86.3,86.79 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:87.8,89.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:90.2,90.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:90.16,91.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:91.45,93.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:94.3,94.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:97.2,110.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:110.16,112.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:113.2,113.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:117.93,119.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:122.91,123.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:123.37,125.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:127.2,128.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:128.16,130.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:132.2,133.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:133.19,135.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:136.2,141.16 5 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:141.16,143.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:145.2,155.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:155.25,165.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:167.2,168.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:168.16,170.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:171.2,171.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:175.94,176.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:176.37,178.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:180.2,181.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:181.16,183.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:185.2,187.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:187.16,189.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:190.2,190.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:190.19,192.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:193.2,196.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:196.16,198.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:200.2,208.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:208.25,216.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:218.2,225.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:225.16,227.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:228.2,228.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:232.94,233.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:233.37,235.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:237.2,238.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:238.16,240.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:242.2,243.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:243.21,245.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:246.2,248.19 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:248.19,250.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:252.2,253.46 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:253.46,255.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:255.13,257.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:259.2,259.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:259.44,261.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:261.13,263.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:266.2,267.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:267.16,269.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:271.2,278.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:278.16,280.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:281.2,281.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:19.69,21.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:23.38,38.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:40.51,63.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:65.53,80.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:82.46,85.32 3 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:85.32,87.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:88.2,88.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:91.105,93.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:93.16,95.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:96.2,97.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:97.16,99.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:100.2,100.70 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:103.107,105.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:105.16,107.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:108.2,109.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:109.16,111.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:112.2,112.72 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:115.101,117.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:117.16,119.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:120.2,121.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:121.17,123.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:124.2,139.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:142.109,144.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:144.16,146.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:147.2,154.8 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:157.100,159.28 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:159.28,161.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:161.18,163.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:164.3,164.62 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:166.2,167.72 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:167.72,169.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:170.2,170.53 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:170.53,172.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:173.2,174.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:174.26,176.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:177.2,177.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:180.73,182.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:182.16,184.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:185.2,185.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:12.104,14.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:14.16,16.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:18.2,19.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:19.18,21.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:23.2,23.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:24.14,25.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:26.18,27.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:28.17,29.46 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:30.10,31.96 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:36.101,37.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:37.27,39.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:41.2,42.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:42.16,44.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:46.2,47.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:47.21,49.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:50.2,51.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:51.19,53.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:54.2,54.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:55.52,55.52 0 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:56.10,57.101 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:59.2,61.93 2 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:61.93,64.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:66.2,70.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:27.31,94.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:98.97,100.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:100.26,102.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:103.2,103.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:103.28,105.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:107.2,108.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:108.16,110.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:112.2,115.15 4 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:115.15,117.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:118.2,118.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:118.17,120.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:122.2,123.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:123.16,125.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:127.2,140.29 3 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:140.29,151.31 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:151.31,154.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:155.3,155.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:158.2,162.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:167.100,169.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:169.26,171.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:172.2,172.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:172.28,174.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:175.2,175.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:175.26,177.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:179.2,180.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:180.16,182.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:184.2,185.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:185.22,187.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:189.2,190.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:190.20,191.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:191.54,199.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:200.3,200.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:200.61,202.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:203.3,203.58 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:206.2,211.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:215.95,217.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:217.32,219.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:220.2,220.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:220.28,222.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:224.2,225.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:225.16,227.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:229.2,230.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:230.22,232.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:234.2,234.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:234.61,236.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:239.2,239.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:239.25,246.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:248.2,252.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:258.104,260.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:260.26,262.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:267.2,271.20 3 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:271.20,275.3 3 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:275.8,279.3 3 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:280.2,280.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:284.60,285.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:285.30,287.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:288.2,288.42 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:288.42,290.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:291.2,291.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:64.89,65.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:65.25,67.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:69.2,70.49 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:70.49,72.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:74.2,74.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:75.18,76.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:77.21,78.35 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:79.19,80.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:81.18,82.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:83.19,84.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:85.18,86.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:87.18,91.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:91.23,93.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:94.3,94.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:95.10,96.62 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:100.81,103.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:103.19,105.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:106.2,107.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:107.19,109.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:112.2,112.46 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:112.46,114.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:115.2,115.46 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:115.46,117.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:122.2,122.66 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:122.66,124.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:127.2,127.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:127.25,128.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:128.22,130.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:131.8,132.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:132.26,134.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:138.2,138.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:138.25,139.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:139.22,141.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:142.8,143.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:143.26,145.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:148.2,148.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:148.22,150.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:151.2,151.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:151.38,153.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:154.2,154.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:154.19,156.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:159.2,161.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:161.25,164.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:165.2,165.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:165.25,168.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:169.2,171.23 3 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:171.23,174.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:175.2,175.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:175.23,178.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:180.2,193.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:193.16,195.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:198.2,199.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:199.29,201.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:202.2,202.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:202.29,204.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:205.2,213.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:216.121,217.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:217.28,218.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:218.26,220.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:221.3,222.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:222.17,223.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:223.49,225.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:226.4,226.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:228.3,228.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:230.2,230.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:230.26,232.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:233.2,234.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:234.16,235.48 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:235.48,237.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:238.3,238.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:240.2,240.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:243.101,248.36 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:248.36,250.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:250.8,252.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:253.2,253.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:253.16,255.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:256.2,256.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:256.32,257.128 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:257.128,262.72 5 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:262.72,264.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:267.2,267.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:276.81,277.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:277.25,279.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:280.2,280.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:280.22,282.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:283.2,283.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:283.39,285.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:286.2,286.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:286.25,288.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:289.2,289.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:289.21,291.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:292.2,293.14 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:293.14,295.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:296.2,305.16 5 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:305.16,307.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:308.2,314.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:317.84,318.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:318.19,320.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:321.2,323.63 3 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:323.63,325.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:326.2,329.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:332.82,333.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:333.38,335.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:336.2,337.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:338.18,339.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:340.18,341.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:345.2,345.59 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:345.59,347.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:349.2,351.21 3 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:351.21,353.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:353.8,356.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:357.2,357.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:357.16,359.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:366.2,367.41 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:367.41,369.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:371.2,378.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:397.115,398.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:398.15,400.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:403.2,404.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:404.26,405.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:405.28,407.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:408.3,408.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:408.28,410.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:412.2,412.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:412.23,415.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:420.2,426.12 4 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:426.12,427.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:427.27,429.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:429.18,431.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:433.4,433.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:433.33,435.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:440.2,441.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:441.26,442.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:442.28,443.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:443.49,445.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:448.3,448.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:448.28,449.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:449.49,451.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:454.2,454.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:457.82,458.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:458.21,460.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:461.2,462.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:462.16,464.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:465.2,465.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:465.36,467.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:468.2,469.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:469.16,471.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:472.2,477.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:480.82,481.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:481.40,483.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:484.2,485.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:485.19,487.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:488.2,489.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:489.16,491.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:492.2,499.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:502.82,503.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:503.21,505.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:506.2,507.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:507.16,509.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:510.2,514.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:23.179,24.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:24.22,26.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:28.2,32.22 4 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:32.22,34.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:35.2,36.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:36.22,38.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:40.2,41.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:41.26,43.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:44.2,44.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:44.26,46.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:47.2,47.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:47.30,49.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:50.2,50.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:50.30,52.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:54.2,55.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:55.16,57.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:58.2,58.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:58.13,60.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:61.2,62.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:62.16,64.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:65.2,65.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:65.13,67.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:69.2,70.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:70.16,72.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:73.2,73.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:73.15,75.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:77.2,77.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:80.172,81.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:81.28,82.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:82.23,84.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:85.3,85.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:85.18,87.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:88.3,89.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:89.17,90.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:90.49,92.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:93.4,93.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:95.3,95.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:98.2,98.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:98.24,100.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:101.2,101.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:101.19,103.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:104.2,105.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:105.16,106.48 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:106.48,108.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:109.3,109.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:111.2,111.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:114.119,116.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:116.22,118.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:119.2,120.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:120.22,122.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:124.2,126.26 3 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:126.26,127.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:127.36,129.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:130.3,130.105 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:131.8,132.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:132.32,134.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:135.3,135.103 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:137.2,137.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:137.16,139.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:141.2,141.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:141.32,143.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:143.27,145.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:146.3,147.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:147.27,149.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:150.3,150.106 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:150.106,151.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:153.3,153.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:153.27,154.114 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:154.114,155.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:157.9,157.104 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:157.104,158.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:160.3,160.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:160.27,161.114 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:161.114,162.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:164.9,164.104 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:164.104,165.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:167.3,167.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:169.2,169.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:25.90,26.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:26.26,28.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:30.2,31.49 2 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:31.49,33.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:35.2,35.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:36.16,37.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:38.10,39.63 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:43.84,44.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:44.21,46.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:47.2,47.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:47.25,49.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:50.2,50.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:50.21,52.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:53.2,53.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:53.21,55.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:57.2,58.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:59.18,60.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:61.15,62.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:63.24,64.42 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:65.10,66.108 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:69.2,70.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:70.22,72.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:73.2,74.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:74.29,76.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:78.2,78.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:78.14,85.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:87.2,89.37 3 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:89.37,92.21 3 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:92.21,94.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:97.2,100.31 4 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:100.31,102.38 2 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:102.38,104.37 2 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:104.37,106.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:109.3,122.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:122.26,124.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:125.3,125.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:125.19,127.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:131.3,133.39 3 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:133.39,135.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:135.9,137.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:138.3,138.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:138.17,140.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:142.3,142.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:142.34,144.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:145.3,145.11 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:148.2,155.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:20.99,22.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:22.16,24.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:26.2,31.44 3 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:31.44,32.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:32.33,33.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:33.43,38.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:43.2,43.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:43.49,45.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:46.2,46.48 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:46.48,48.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:50.2,52.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:52.27,55.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:55.8,60.24 3 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:60.24,62.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:64.3,64.57 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:64.57,66.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:68.3,68.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:71.2,71.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:71.16,73.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:75.2,76.23 2 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:76.23,78.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:80.2,80.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:19.40,89.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:109.71,111.9 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:111.9,113.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:115.2,116.38 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:116.38,117.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:118.13,119.41 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:119.41,121.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:122.17,123.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:123.43,125.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:126.11,127.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:127.40,129.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:133.2,133.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:133.22,138.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:139.2,139.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:143.90,144.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:144.25,146.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:148.2,149.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:149.16,151.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:153.2,157.61 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:157.61,159.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:161.2,161.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:162.16,163.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:164.14,165.35 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:166.13,167.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:168.16,169.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:170.17,171.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:172.16,173.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:174.15,175.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:176.10,177.120 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:189.85,191.39 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:191.39,192.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:192.44,194.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:196.2,196.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:196.15,198.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:199.2,199.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:199.15,201.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:202.2,202.46 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:205.91,207.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:207.17,209.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:211.2,215.25 5 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:215.25,217.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:218.2,224.25 4 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:224.25,226.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:227.2,227.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:227.25,229.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:231.2,243.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:243.16,245.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:247.2,247.139 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:250.89,252.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:252.19,254.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:255.2,256.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:256.25,258.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:259.2,264.52 5 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:264.52,266.14 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:266.14,268.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:271.2,277.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:277.25,280.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:282.2,283.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:283.16,285.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:287.2,287.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:287.22,288.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:288.20,290.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:291.3,291.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:294.2,297.31 3 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:297.31,300.29 3 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:300.29,302.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:303.3,305.69 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:308.2,308.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:311.88,313.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:313.13,315.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:317.2,318.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:318.16,320.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:322.2,328.22 6 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:328.22,331.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:333.2,333.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:333.23,335.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:335.30,338.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:341.2,341.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:344.91,346.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:346.13,348.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:350.2,353.18 3 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:353.18,354.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:354.27,356.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:357.3,357.73 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:357.73,359.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:362.2,362.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:362.19,370.17 4 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:370.17,372.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:375.2,376.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:376.26,378.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:379.2,379.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:382.92,384.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:384.13,386.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:388.2,389.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:389.16,391.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:393.2,401.16 4 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:401.16,403.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:405.2,405.88 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:408.91,410.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:410.13,412.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:414.2,418.95 4 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:418.95,420.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:422.2,422.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:425.90,427.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:427.13,429.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:431.2,433.167 3 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:433.167,435.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:437.2,437.89 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:437.89,439.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:441.2,441.108 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:22.93,24.49 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:24.49,26.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:28.2,28.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:29.14,30.42 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:31.17,32.59 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:33.16,34.58 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:35.24,36.75 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:37.27,38.71 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:39.22,40.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:41.23,42.63 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:43.10,44.66 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:48.79,49.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:49.13,51.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:52.2,53.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:53.16,55.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:57.2,58.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:58.32,60.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:61.2,84.28 3 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:87.101,88.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:88.13,90.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:91.2,91.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:91.38,93.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:94.2,95.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:95.16,97.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:98.2,98.53 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:98.53,100.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:102.2,104.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:104.17,106.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:107.2,107.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:107.29,109.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:110.2,115.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:118.100,119.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:119.13,121.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:122.2,122.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:122.38,124.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:125.2,126.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:126.16,128.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:129.2,129.53 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:129.53,131.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:133.2,135.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:135.17,137.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:138.2,138.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:138.29,140.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:141.2,146.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:149.123,150.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:150.13,152.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:153.2,153.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:153.18,155.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:156.2,156.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:156.38,158.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:159.2,161.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:161.17,163.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:164.2,169.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:172.113,173.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:173.13,175.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:176.2,176.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:176.50,178.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:179.2,181.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:181.17,183.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:184.2,188.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:191.57,195.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:197.102,198.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:198.13,200.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:201.2,201.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:201.20,203.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:204.2,205.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:205.16,207.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:209.2,210.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:210.32,212.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:214.2,217.56 3 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:217.56,223.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:225.2,230.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:233.41,235.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:235.16,237.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:238.2,238.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:35.27,37.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:42.41,43.11 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:44.48,45.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:46.10,47.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:54.57,55.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:56.17,57.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:58.16,59.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:60.10,61.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:82.58,83.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:84.28,85.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:86.26,87.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:88.10,89.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:93.114,95.68 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:95.68,97.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:99.2,101.42 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:101.42,102.71 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:102.71,105.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:107.2,117.23 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:117.23,119.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:121.2,124.22 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:124.22,125.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:125.31,127.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:128.3,128.35 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:129.8,129.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:129.37,131.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:132.2,132.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:135.74,136.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:136.30,138.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:139.2,139.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:139.34,141.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:142.2,142.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:142.31,144.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:145.2,145.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:145.22,147.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:161.169,162.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:162.17,164.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:165.2,166.51 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:166.51,168.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:169.2,169.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:172.92,174.42 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:174.42,177.63 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:177.63,179.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:179.9,181.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:183.2,183.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:186.65,190.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:192.115,194.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:194.26,196.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:196.8,196.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:196.31,198.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:199.2,199.117 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:202.122,206.31 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:206.31,207.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:207.45,209.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:211.2,211.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:214.72,216.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:218.117,219.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:219.16,221.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:222.2,223.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:223.20,225.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:225.17,227.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:228.3,228.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:228.27,229.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:229.50,231.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:231.30,232.11 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:236.3,236.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:239.2,241.60 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:241.60,243.61 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:243.61,245.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:246.3,246.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:246.24,247.9 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:249.3,250.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:250.17,252.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:253.3,253.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:253.22,254.9 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:256.3,256.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:256.29,257.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:257.50,259.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:259.30,260.11 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:264.3,265.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:265.32,266.9 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:269.2,269.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:272.51,273.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:273.16,275.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:276.2,277.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:277.18,279.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:280.2,280.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:280.19,282.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:283.2,283.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:286.97,288.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:288.30,290.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:291.2,291.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:291.49,293.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:294.2,294.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:297.108,299.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:301.108,303.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:305.102,307.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:319.55,320.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:320.31,322.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:323.2,323.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:323.26,325.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:326.2,326.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:329.71,330.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:343.26,344.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:345.10,346.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:354.95,362.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:362.16,364.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:366.2,397.39 14 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:397.39,399.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:399.27,401.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:402.8,404.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:405.2,407.46 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:407.46,410.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:411.2,411.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:411.44,413.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:413.12,415.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:417.2,417.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:417.26,419.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:420.2,420.84 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:420.84,422.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:427.2,427.65 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:427.65,429.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:431.2,433.20 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:433.20,435.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:436.2,437.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:437.20,439.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:440.2,440.56 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:440.56,442.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:443.2,443.56 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:443.56,448.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:450.2,450.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:450.45,453.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:459.2,459.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:459.31,461.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:461.22,462.62 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:462.62,465.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:466.4,466.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:468.3,468.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:471.2,472.115 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:472.115,474.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:491.2,491.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:491.19,493.23 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:493.23,495.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:496.3,508.21 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:508.21,510.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:511.3,511.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:522.2,522.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:522.43,535.34 5 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:535.34,556.30 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:556.30,558.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:559.4,559.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:559.44,561.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:562.4,562.106 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:562.106,564.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:575.4,575.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:575.74,577.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:578.4,579.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:579.18,581.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:583.4,584.28 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:584.28,586.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:588.4,588.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:588.31,599.57 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:599.57,601.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:601.17,604.7 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:606.5,607.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:607.21,609.6 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:615.5,615.138 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:615.138,617.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:617.27,619.7 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:620.6,620.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:622.5,623.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:623.26,625.6 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:626.5,626.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:630.4,631.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:631.20,633.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:634.4,634.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:634.22,637.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:637.26,639.6 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:640.5,640.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:645.4,660.77 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:660.77,662.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:663.4,664.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:664.25,666.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:667.4,667.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:673.2,673.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:673.26,675.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:677.2,678.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:678.25,680.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:681.2,681.97 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:681.97,683.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:690.2,691.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:691.21,693.33 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:693.33,695.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:696.3,696.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:696.33,698.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:699.3,699.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:699.49,704.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:721.3,721.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:721.54,722.84 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:722.84,724.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:728.2,728.99 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:728.99,730.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:732.2,733.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:733.22,735.10 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:736.109,737.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:738.100,739.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:740.114,741.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:742.107,743.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:744.11,745.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:748.2,749.43 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:749.43,751.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:753.2,755.34 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:755.34,756.48 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:756.48,757.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:757.19,760.5 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:764.2,764.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:764.31,767.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:768.2,768.35 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:768.35,771.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:772.2,772.76 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:772.76,776.3 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:778.2,780.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:780.16,782.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:782.20,785.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:788.2,788.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:788.25,798.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:798.18,800.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:800.9,800.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:800.30,807.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:808.3,808.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:808.36,810.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:811.3,812.50 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:812.50,815.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:816.3,822.17 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:822.17,824.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:826.3,836.17 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:836.17,838.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:839.3,839.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:842.2,843.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:843.30,844.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:844.52,846.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:846.9,848.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:851.2,869.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:869.21,871.43 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:871.43,873.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:874.3,874.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:874.29,876.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:886.3,886.76 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:886.76,888.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:890.2,890.105 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:890.105,892.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:893.2,894.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:894.16,896.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:901.2,904.40 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:904.40,905.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:905.15,906.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:909.3,910.63 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:910.63,912.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:912.9,914.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:916.3,916.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:916.43,918.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:919.3,920.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:920.20,922.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:925.3,925.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:925.23,928.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:929.3,931.33 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:931.33,934.39 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:934.39,936.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:939.2,948.42 5 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:948.42,950.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:950.21,952.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:952.9,955.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:959.2,959.53 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:959.53,960.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:960.54,961.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:961.33,963.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:964.9,972.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:973.3,973.60 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:973.60,974.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:974.40,976.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:978.3,978.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:978.61,979.41 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:979.41,981.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:983.3,983.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:983.28,985.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:986.3,987.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:989.2,989.51 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:989.51,991.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:995.2,997.53 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:997.53,999.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:999.8,1001.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1002.2,1002.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1002.22,1004.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1008.2,1014.76 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1014.76,1016.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1021.2,1021.57 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1021.57,1026.13 5 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1026.13,1029.21 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1029.21,1032.5 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1033.4,1033.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1033.49,1035.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1036.4,1043.89 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1043.89,1046.5 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1048.4,1048.86 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1052.2,1063.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1063.21,1065.40 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1065.40,1067.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1068.3,1068.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1068.38,1070.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1072.2,1074.18 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1074.18,1081.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1082.2,1082.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1082.28,1084.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1085.2,1085.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1085.16,1087.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1088.2,1088.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1088.30,1090.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1091.2,1091.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1091.30,1093.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1098.2,1098.76 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1098.76,1100.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1101.2,1102.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1102.16,1104.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1105.2,1105.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1111.94,1113.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1113.15,1115.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1117.2,1118.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1118.16,1120.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1122.2,1123.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1123.13,1125.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1126.2,1131.16 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1131.16,1133.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1134.2,1134.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1134.19,1136.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1146.2,1146.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1146.39,1148.55 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1148.55,1150.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1152.2,1152.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1152.39,1154.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1157.2,1158.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1158.21,1163.21 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1163.21,1165.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1166.3,1167.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1167.21,1169.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1170.3,1170.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1170.52,1172.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1173.3,1173.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1173.52,1178.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1179.3,1179.41 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1179.41,1182.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1183.3,1183.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1188.2,1188.46 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1188.46,1190.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1191.2,1191.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1191.27,1193.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1195.2,1196.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1196.16,1198.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1201.2,1210.16 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1210.16,1212.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1213.2,1213.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1218.59,1220.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1220.38,1222.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1225.2,1226.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1226.29,1227.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1227.22,1229.9 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1232.2,1232.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1232.18,1234.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1237.2,1244.29 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1244.29,1245.67 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1245.67,1247.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1249.2,1249.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1249.16,1251.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1254.2,1254.11 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1258.55,1260.47 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1260.47,1262.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1263.2,1264.58 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1264.58,1266.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1267.2,1267.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1270.252,1271.108 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1271.108,1273.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1274.2,1274.55 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1274.55,1276.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1277.2,1277.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1280.184,1282.69 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1282.69,1284.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1284.32,1285.58 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1285.58,1287.10 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1290.3,1290.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1290.18,1292.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1294.2,1294.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1294.19,1297.32 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1297.32,1298.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1298.39,1300.10 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1303.3,1303.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1303.19,1305.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1307.2,1307.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1307.21,1309.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1309.32,1310.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1310.49,1312.10 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1315.3,1315.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1315.18,1317.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1319.2,1319.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1319.28,1321.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1321.17,1323.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1324.3,1324.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1324.27,1326.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1328.2,1328.76 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1328.76,1330.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1331.2,1331.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1342.96,1343.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1343.26,1345.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1347.2,1348.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1348.16,1350.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1352.2,1363.23 9 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1363.23,1364.58 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1364.58,1365.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1365.31,1367.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1367.10,1369.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1373.2,1373.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1373.17,1375.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1376.2,1376.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1376.16,1378.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1379.2,1379.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1379.16,1381.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1382.2,1382.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1382.18,1384.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1385.2,1385.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1385.19,1387.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1388.2,1388.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1388.19,1390.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1396.2,1399.18 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1399.18,1400.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1400.61,1401.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1402.50,1403.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1404.12,1405.108 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1409.2,1410.42 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1410.42,1414.3 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1415.2,1420.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1420.16,1422.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1429.2,1444.43 6 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1444.43,1446.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1449.2,1451.27 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1451.27,1453.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1458.2,1458.46 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1458.46,1460.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1461.2,1461.63 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1461.63,1463.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1465.2,1466.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1466.15,1472.29 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1472.29,1479.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1479.18,1481.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1482.4,1482.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1482.23,1483.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1485.4,1485.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1485.30,1486.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1486.24,1488.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1488.32,1489.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1493.4,1494.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1494.30,1495.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1498.8,1504.29 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1504.29,1506.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1506.18,1508.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1509.4,1509.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1509.23,1510.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1512.4,1512.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1512.30,1513.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1513.24,1515.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1515.32,1516.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1520.4,1521.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1521.30,1522.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1526.2,1526.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1526.26,1528.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1528.17,1530.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1535.2,1535.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1535.74,1536.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1536.13,1537.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1537.33,1542.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1542.26,1544.39 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1544.39,1546.7 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1548.5,1548.82 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1565.2,1565.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1565.38,1569.27 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1569.27,1571.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1572.3,1572.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1572.27,1574.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1576.3,1581.32 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1581.32,1586.4 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1588.3,1592.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1592.18,1594.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1595.3,1596.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1596.17,1598.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1599.3,1599.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1602.2,1602.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1603.15,1618.32 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1618.32,1620.33 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1620.33,1621.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1621.40,1623.11 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1626.4,1638.6 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1640.3,1641.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1641.17,1643.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1644.3,1644.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1646.18,1648.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1648.17,1650.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1651.3,1651.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1653.10,1654.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1654.25,1656.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1657.3,1659.32 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1659.32,1661.33 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1661.33,1662.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1662.40,1664.11 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1667.4,1669.26 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1669.26,1671.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1672.4,1673.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1673.25,1675.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1676.4,1676.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1678.3,1678.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1690.51,1695.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1700.73,1702.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1702.16,1704.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1705.2,1706.48 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1706.48,1710.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1711.2,1713.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1713.16,1715.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1716.2,1716.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1727.117,1731.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1731.21,1733.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1734.2,1735.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1735.16,1737.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1738.2,1739.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1739.27,1741.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1742.2,1742.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1764.19,1775.30 7 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1775.30,1777.37 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1777.37,1779.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1781.3,1781.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1781.20,1783.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1797.2,1797.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1797.39,1799.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1801.2,1811.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1811.25,1813.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1815.2,1816.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1816.29,1818.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1824.2,1824.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1824.27,1826.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1831.2,1833.22 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1833.22,1835.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1837.2,1846.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1846.16,1848.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1853.2,1855.27 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1855.27,1857.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1859.2,1876.33 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1876.33,1878.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1880.2,1881.28 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1881.28,1885.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1885.20,1888.33 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1888.33,1889.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1889.40,1891.11 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1894.4,1894.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1894.20,1895.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1900.3,1900.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1900.22,1902.33 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1902.33,1903.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1903.50,1905.11 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1908.4,1908.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1908.19,1909.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1918.3,1918.56 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1918.56,1919.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1927.3,1927.64 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1927.64,1928.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1932.3,1935.32 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1935.32,1936.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1936.39,1938.10 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1942.3,1956.14 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1956.14,1957.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1957.37,1959.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1961.3,1962.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1962.26,1963.9 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1975.2,1975.59 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1975.59,1986.17 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1986.17,1988.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1990.3,1991.34 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1991.34,1993.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1995.3,1996.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1996.29,1998.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1998.21,2001.34 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2001.34,2002.41 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2002.41,2004.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2007.5,2007.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2007.21,2008.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2011.4,2011.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2011.23,2013.34 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2013.34,2014.51 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2014.51,2016.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2019.5,2019.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2019.20,2020.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2023.4,2023.57 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2023.57,2024.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2027.4,2027.65 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2027.65,2028.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2030.4,2031.33 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2031.33,2032.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2032.40,2034.11 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2037.4,2051.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2051.15,2052.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2052.38,2054.6 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2056.4,2057.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2057.27,2058.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2065.2,2066.28 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2066.28,2068.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2072.2,2072.71 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2072.71,2080.30 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2080.30,2081.41 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2081.41,2087.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2089.3,2089.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2089.13,2090.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2090.31,2095.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2095.25,2097.38 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2097.38,2099.7 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2101.5,2101.81 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2112.2,2112.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2112.38,2115.27 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2115.27,2117.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2121.3,2138.30 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2138.30,2140.11 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2140.11,2141.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2143.4,2160.15 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2160.15,2161.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2161.39,2163.6 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2165.4,2165.46 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2167.3,2173.24 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2173.24,2175.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2176.3,2176.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2179.2,2179.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2180.15,2182.24 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2182.24,2184.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2185.3,2185.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2187.18,2199.30 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2199.30,2201.11 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2201.11,2202.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2204.4,2208.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2208.15,2209.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2209.39,2211.6 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2213.4,2213.35 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2215.3,2216.24 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2216.24,2218.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2219.3,2219.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2220.10,2221.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2221.22,2223.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2224.3,2226.27 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2226.27,2228.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2228.20,2230.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2231.4,2233.26 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2233.26,2235.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2236.4,2237.23 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2237.23,2239.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2240.4,2240.46 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2240.46,2244.5 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2245.4,2245.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2247.3,2247.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2252.94,2254.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2254.16,2256.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2258.2,2260.18 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2260.18,2261.59 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2261.59,2262.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2262.36,2264.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2264.10,2266.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2270.2,2270.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2270.13,2272.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2273.2,2273.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2273.50,2275.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2277.2,2277.98 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2281.98,2282.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2282.26,2284.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2286.2,2287.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2287.16,2289.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2291.2,2292.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2292.13,2294.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2297.2,2298.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2298.19,2299.51 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2299.51,2301.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2302.3,2302.55 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2304.2,2304.42 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2304.42,2306.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2308.2,2308.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2308.54,2309.48 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2309.48,2311.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2312.3,2312.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2316.2,2318.53 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:17.82,19.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:21.149,22.55 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:22.55,24.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:25.2,25.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:25.36,27.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:28.2,34.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:34.16,36.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:37.2,37.42 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:37.42,39.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:40.2,40.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:43.105,44.48 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:44.48,46.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:47.2,48.54 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:51.129,53.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:53.16,55.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:56.2,57.53 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:57.53,59.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:60.2,61.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:61.25,63.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:64.2,65.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:65.16,67.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:68.2,68.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:26.97,27.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:27.18,29.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:30.2,30.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:33.37,35.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:37.81,38.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:38.44,40.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:41.2,41.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:41.38,43.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:44.2,44.57 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:47.88,48.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:48.32,50.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:51.2,52.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:52.20,54.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:55.2,55.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:58.40,72.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:74.106,75.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:75.34,77.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:78.2,79.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:79.16,81.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:83.2,84.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:84.16,86.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:88.2,89.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:89.13,91.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:93.2,94.63 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:94.63,96.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:98.2,98.72 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:98.72,100.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:102.2,106.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:109.117,110.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:110.32,112.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:113.2,113.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:113.34,115.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:117.2,118.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:118.16,120.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:121.2,121.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:121.19,123.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:125.2,126.69 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:126.69,128.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:130.2,136.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:18.33,20.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:22.27,37.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:39.93,40.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:40.30,42.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:43.2,43.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:43.28,45.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:46.2,47.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:47.16,49.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:51.2,52.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:52.17,54.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:55.2,56.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:56.19,58.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:59.2,59.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:59.19,61.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:62.2,63.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:63.16,65.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:67.2,74.9 3 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:74.9,76.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:77.2,78.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:78.15,80.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:81.2,85.16 4 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:85.16,87.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:88.2,88.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:88.17,90.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:92.2,101.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:104.48,105.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:105.16,107.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:108.2,109.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:109.29,111.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:112.2,112.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:112.31,114.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:115.2,115.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:118.75,120.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:120.27,121.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:121.32,123.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:123.17,124.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:126.4,126.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:129.2,134.33 3 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:134.33,136.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:137.2,137.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:137.40,138.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:138.39,140.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:141.3,141.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:143.2,143.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:143.34,145.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:146.2,147.35 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:147.35,149.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:150.2,150.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:153.77,154.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:154.20,156.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:157.2,159.31 3 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:159.31,160.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:160.33,162.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:163.3,163.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:163.30,165.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:167.2,170.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:23.91,25.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:27.38,50.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:52.104,53.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:53.38,55.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:56.2,57.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:57.16,59.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:61.2,62.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:62.26,64.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:65.2,66.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:66.30,68.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:69.2,69.72 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:69.72,71.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:73.2,74.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:74.16,76.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:77.2,78.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:78.16,80.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:81.2,82.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:82.16,84.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:85.2,86.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:86.16,88.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:90.2,105.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:105.16,107.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:109.2,109.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:109.19,117.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:118.2,118.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:118.25,120.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:121.2,121.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:121.30,123.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:124.2,124.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:124.31,126.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:127.2,128.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:128.16,130.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:131.2,131.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:134.91,136.9 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:136.9,138.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:139.2,140.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:140.15,141.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:141.19,143.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:144.3,144.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:146.2,146.94 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:149.59,150.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:150.16,152.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:153.2,154.61 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:154.61,156.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:157.2,157.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:160.56,161.75 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:161.75,163.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:164.2,164.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:167.67,169.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:170.17,171.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:172.67,173.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:174.10,175.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:179.60,180.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:180.16,182.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:183.2,184.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:184.25,186.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:187.2,187.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:190.57,191.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:192.15,193.81 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:193.81,195.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:196.3,196.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:197.19,199.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:199.17,201.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:202.3,202.55 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:202.55,204.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:205.3,205.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:206.14,207.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:208.11,209.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:210.10,211.41 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:215.59,216.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:216.16,218.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:219.2,219.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:220.12,221.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:222.14,223.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:224.10,225.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:28.90,30.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:30.16,32.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:34.2,36.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:37.16,38.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:40.16,42.140 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:44.20,46.140 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:48.17,50.142 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:52.17,56.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:56.50,62.63 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:62.63,64.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:66.4,66.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:66.45,68.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:72.4,74.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:74.25,76.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:77.4,77.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:80.3,80.101 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:82.18,84.141 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:86.18,88.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:88.18,90.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:91.3,91.41 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:93.17,96.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:96.50,99.59 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:99.59,101.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:102.4,104.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:104.25,106.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:107.4,107.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:110.3,110.98 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:112.10,116.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:125.86,126.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:126.16,128.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:129.2,130.9 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:130.9,132.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:133.2,133.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:133.22,135.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:137.2,139.31 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:139.31,141.10 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:141.10,143.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:144.3,145.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:145.22,147.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:148.3,149.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:149.26,151.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:152.3,152.68 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:152.68,154.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:155.3,156.37 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:156.37,158.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:159.3,160.107 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:162.2,162.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:165.249,166.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:166.24,168.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:169.2,169.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:169.38,171.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:173.2,174.31 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:174.31,175.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:175.32,177.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:180.2,181.34 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:181.34,182.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:182.29,183.9 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:185.3,197.17 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:197.17,199.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:200.3,200.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:200.20,201.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:203.3,203.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:203.37,205.33 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:205.33,206.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:208.4,208.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:208.19,209.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:209.43,210.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:212.5,212.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:214.4,215.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:215.30,216.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:220.2,220.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:223.113,229.2 5 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:231.101,233.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:247.92,251.16 4 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:251.16,253.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:253.8,253.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:253.24,255.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:259.2,272.51 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:272.51,274.38 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:274.38,275.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:276.50,277.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:278.12,279.107 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:287.2,292.26 5 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:292.26,294.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:297.2,297.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:297.19,301.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:303.2,311.42 5 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:311.42,315.3 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:316.2,341.64 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:341.64,342.86 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:342.86,344.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:345.3,345.56 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:345.56,347.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:348.3,360.19 6 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:360.19,364.4 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:365.3,365.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:369.2,370.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:370.15,372.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:372.27,374.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:375.3,375.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:375.27,377.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:380.2,381.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:381.15,387.28 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:387.28,395.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:395.18,397.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:398.4,398.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:398.23,399.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:401.4,401.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:401.30,402.66 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:402.66,403.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:405.5,406.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:406.12,407.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:409.5,409.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:409.28,413.6 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:414.5,415.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:415.30,416.11 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:419.4,420.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:420.30,421.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:424.8,432.28 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:432.28,438.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:438.18,440.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:441.4,441.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:441.23,442.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:444.4,444.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:444.30,445.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:445.40,447.31 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:447.31,448.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:452.4,455.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:455.30,456.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:461.2,465.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:465.17,467.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:469.2,470.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:470.16,472.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:473.2,473.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:20.79,21.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:21.43,23.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:24.2,24.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:24.29,26.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:27.2,27.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:30.40,63.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:65.68,71.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:71.25,74.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:75.2,75.67 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:78.62,83.19 3 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:83.19,87.3 3 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:88.2,88.89 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:91.101,92.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:92.22,94.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:95.2,96.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:96.18,98.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:99.2,100.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:100.16,102.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:103.2,104.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:104.16,106.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:107.2,107.119 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:110.99,111.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:111.22,113.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:114.2,115.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:115.18,117.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:118.2,119.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:119.16,121.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:122.2,122.51 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:122.51,124.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:125.2,126.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:126.16,128.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:129.2,131.15 3 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:131.15,132.69 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:132.69,134.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:135.3,135.58 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:137.2,137.130 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:140.102,142.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:142.16,144.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:145.2,145.64 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:145.64,147.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:148.2,148.113 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:151.109,153.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:153.16,155.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:156.2,157.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:157.16,159.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:160.2,161.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:161.16,163.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:164.2,164.67 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:167.107,169.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:169.16,171.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:172.2,173.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:173.16,175.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:176.2,176.107 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:176.107,178.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:179.2,179.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:180.41,181.63 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:182.41,183.95 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:184.10,185.83 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:189.111,191.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:191.16,193.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:194.2,195.57 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:195.57,197.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:198.2,199.23 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:199.23,201.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:202.2,203.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:203.16,205.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:206.2,206.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:206.17,208.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:209.2,209.108 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:212.63,215.2 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:217.69,219.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:219.16,221.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:222.2,222.79 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:225.60,227.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:227.16,229.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:230.2,230.57 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:233.137,234.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:234.49,236.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:237.2,238.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:238.16,240.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:241.2,243.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:243.16,245.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:246.2,247.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:247.16,249.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:250.2,250.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:250.22,252.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:253.2,253.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:256.142,258.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:258.16,260.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:261.2,262.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:262.16,264.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:265.2,265.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:265.47,267.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:268.2,269.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:269.16,270.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:270.50,272.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:273.3,273.89 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:275.2,275.173 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:278.157,280.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:280.16,282.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:283.2,283.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:283.47,285.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:286.2,287.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:287.16,288.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:288.50,290.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:291.3,291.89 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:293.2,293.169 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:296.104,297.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:297.22,299.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:300.2,301.61 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:301.61,303.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:303.20,304.9 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:307.2,307.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:307.19,309.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:310.2,317.8 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:320.119,322.39 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:322.39,323.81 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:323.81,325.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:327.2,327.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:330.71,332.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:332.16,334.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:335.2,335.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:17.61,105.23 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:105.23,122.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:123.2,123.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:126.104,127.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:127.61,129.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:130.2,130.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:130.38,132.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:133.2,134.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:134.16,136.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:137.2,138.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:138.16,140.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:141.2,147.107 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:147.107,149.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:150.2,151.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:151.16,153.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:154.2,170.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:170.19,172.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:173.2,173.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:176.103,177.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:177.61,179.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:180.2,180.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:180.38,182.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:183.2,184.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:184.16,186.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:187.2,191.106 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:191.106,193.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:194.2,195.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:195.16,197.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:198.2,200.31 3 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:200.31,207.36 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:207.36,218.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:219.3,220.35 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:222.2,230.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:233.107,234.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:234.61,236.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:237.2,237.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:237.38,239.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:240.2,241.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:241.16,243.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:244.2,248.110 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:248.110,250.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:251.2,252.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:252.16,254.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:255.2,256.33 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:256.33,266.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:267.2,275.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:278.108,279.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:279.61,281.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:282.2,282.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:282.37,284.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:285.2,286.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:286.16,288.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:289.2,290.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:290.19,292.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:293.2,293.104 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:293.104,295.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:296.2,297.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:297.16,299.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:300.2,307.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:307.16,309.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:310.2,311.43 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:311.43,318.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:319.2,332.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:332.22,334.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:335.2,335.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:338.108,339.62 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:339.62,341.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:342.2,342.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:342.38,344.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:345.2,346.9 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:346.9,348.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:349.2,350.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:350.16,352.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:353.2,357.16 5 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:357.16,359.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:360.2,370.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:373.109,374.62 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:374.62,376.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:377.2,377.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:377.38,379.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:380.2,381.9 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:381.9,383.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:384.2,385.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:385.16,387.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:388.2,390.32 3 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:390.32,392.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:393.2,394.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:394.16,396.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:397.2,403.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:406.106,407.62 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:407.62,409.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:410.2,410.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:410.38,412.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:413.2,414.9 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:414.9,416.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:417.2,418.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:418.16,420.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:421.2,423.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:423.16,424.41 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:424.41,434.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:435.3,435.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:437.2,445.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:483.65,484.42 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:484.42,485.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:485.39,487.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:489.2,489.85 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:489.85,491.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:492.2,492.95 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:495.102,496.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:496.38,498.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:499.2,499.58 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:499.58,501.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:502.2,502.90 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:505.60,508.2 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:510.66,512.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:512.26,514.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:515.2,515.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:518.69,521.33 3 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:521.33,523.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:523.21,524.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:526.3,526.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:526.34,527.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:529.3,530.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:532.2,532.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:535.63,537.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:537.19,539.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:540.2,541.42 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:541.42,543.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:544.2,544.57 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:544.57,546.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:547.2,547.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:547.54,549.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:550.2,550.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:553.70,557.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:559.66,561.9 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:561.9,563.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:564.2,566.17 3 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:566.17,568.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:569.2,569.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:570.103,572.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:573.34,574.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:575.10,576.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:580.56,581.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:581.37,583.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:584.2,584.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:584.26,586.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:586.37,587.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:589.3,589.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:591.2,591.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:594.90,602.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:604.68,605.71 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:605.71,607.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:607.17,609.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:610.3,610.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:612.2,613.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:613.16,615.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:616.2,617.41 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:617.41,619.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:620.2,620.78 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:623.65,625.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:625.16,627.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:628.2,628.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:628.17,630.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:631.2,631.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:634.51,635.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:635.16,637.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:638.2,638.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:641.56,642.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:642.28,644.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:645.2,646.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:649.92,651.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:651.29,653.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:654.2,654.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:657.86,659.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:659.29,661.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:662.2,662.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:665.94,667.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:667.29,669.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:670.2,670.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:673.98,675.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:675.29,677.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:678.2,678.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:17.93,18.104 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:18.104,20.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:22.2,23.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:23.16,25.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:27.2,28.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:28.19,30.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:32.2,35.33 3 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:35.33,36.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:36.47,39.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:42.2,44.20 3 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:44.20,47.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:48.2,49.68 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:49.68,50.48 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:50.48,52.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:53.3,53.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:53.32,55.23 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:55.23,56.63 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:56.63,58.6 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:59.5,59.53 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:61.4,61.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:64.2,71.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:71.17,73.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:73.8,73.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:73.29,75.36 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:75.36,77.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:78.3,83.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:86.2,86.35 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:86.35,88.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:90.2,97.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:97.16,99.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:101.2,110.28 3 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:110.28,112.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:113.2,124.16 4 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:124.16,126.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:127.2,127.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:133.93,134.35 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:134.35,136.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:138.2,139.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:139.16,141.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:143.2,144.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:144.16,146.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:147.2,147.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:147.17,149.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:151.2,152.33 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:152.33,153.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:153.47,156.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:159.2,160.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:160.16,162.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:164.2,176.26 3 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:176.26,178.23 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:178.23,180.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:181.3,192.5 3 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:195.2,196.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:196.16,198.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:199.2,199.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:22.104,24.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:24.16,26.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:28.2,29.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:29.18,31.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:33.2,33.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:34.13,35.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:36.13,37.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:38.14,39.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:40.16,41.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:42.10,43.95 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:51.67,53.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:57.68,58.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:58.33,60.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:61.2,61.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:67.42,69.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:74.61,76.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:76.26,78.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:79.2,79.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:85.90,86.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:86.49,88.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:90.2,91.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:91.15,93.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:94.2,95.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:95.17,97.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:100.2,103.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:103.16,105.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:107.2,113.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:113.12,115.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:115.18,117.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:118.3,119.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:119.20,121.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:122.3,124.48 3 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:125.8,127.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:129.2,130.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:130.16,132.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:134.2,139.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:145.90,147.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:147.15,149.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:151.2,152.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:152.16,154.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:156.2,157.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:157.16,158.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:158.47,160.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:161.3,161.56 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:164.2,170.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:170.19,173.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:173.8,175.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:176.2,176.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:181.92,183.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:183.16,185.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:187.2,188.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:188.16,190.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:192.2,200.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:200.25,207.28 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:207.28,209.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:210.3,210.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:212.2,212.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:216.93,217.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:217.52,219.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:221.2,222.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:222.15,224.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:226.2,227.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:227.16,229.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:231.2,231.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:231.47,232.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:232.47,234.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:235.3,235.59 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:238.2,241.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:35.127,36.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:36.23,38.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:39.2,40.40 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:40.40,42.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:43.2,43.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:43.37,45.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:46.2,46.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:46.37,48.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:49.2,49.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:52.23,80.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:82.26,140.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:142.92,143.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:143.25,145.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:147.2,148.49 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:148.49,150.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:152.2,152.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:153.17,154.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:154.24,156.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:157.3,158.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:158.17,160.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:161.3,165.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:166.17,167.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:167.22,169.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:170.3,170.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:170.22,172.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:173.3,174.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:174.17,176.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:177.3,181.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:182.16,189.23 7 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:189.23,191.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:192.3,192.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:192.24,194.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:195.3,195.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:195.39,197.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:198.3,207.17 3 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:207.17,209.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:210.3,210.69 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:210.69,212.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:213.3,213.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:214.10,215.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:219.92,220.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:220.25,222.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:224.2,225.49 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:225.49,227.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:229.2,229.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:230.17,232.24 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:232.24,234.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:235.3,236.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:236.17,238.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:239.3,239.59 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:239.59,241.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:242.3,242.81 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:242.81,244.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:245.3,250.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:251.17,253.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:253.22,255.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:256.3,257.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:257.17,259.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:260.3,260.79 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:260.79,262.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:263.3,268.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:269.10,270.66 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:274.91,276.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:276.16,278.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:279.2,279.67 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:279.67,280.76 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:280.76,282.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:285.2,286.52 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:286.52,288.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:289.2,289.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:292.74,294.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:294.16,296.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:297.2,297.62 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:297.62,299.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:300.2,300.68 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:303.109,304.56 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:304.56,306.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:307.2,307.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:307.25,309.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:310.2,310.81 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:310.81,312.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:313.2,313.102 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:313.102,315.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:316.2,316.108 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:316.108,318.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:319.2,319.99 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:319.99,321.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:322.2,322.99 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:322.99,324.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:325.2,325.60 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:325.60,327.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:328.2,328.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:328.34,330.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:331.2,331.114 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:331.114,333.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:334.2,334.66 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:334.66,336.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:337.2,337.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:337.40,339.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:340.2,340.132 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:340.132,342.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:343.2,343.35 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:343.35,345.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:346.2,346.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:349.92,350.103 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:350.103,352.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:354.2,355.52 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:355.52,357.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:358.2,358.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:358.32,360.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:361.2,361.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:364.108,365.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:365.19,367.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:368.2,369.53 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:369.53,371.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:372.2,372.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:372.19,374.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:375.2,375.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:375.39,376.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:376.34,378.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:380.2,380.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:383.66,385.53 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:385.53,387.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:388.2,388.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:388.19,390.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:391.2,391.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:10.101,12.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:12.16,14.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:16.2,18.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:19.16,20.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:21.14,22.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:23.15,24.84 1 0 +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:25.16,26.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:27.10,28.97 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:21.75,23.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:25.41,28.2 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:30.31,37.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:39.38,46.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:48.50,56.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:58.43,70.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:72.80,73.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:73.36,75.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:76.2,76.48 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:76.48,78.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:79.2,79.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:82.97,84.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:84.16,86.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:87.2,88.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:88.16,90.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:91.2,92.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:92.16,94.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:95.2,96.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:96.16,98.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:99.2,99.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:102.104,104.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:104.16,106.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:107.2,108.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:108.16,110.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:111.2,112.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:112.16,114.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:115.2,116.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:116.16,118.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:119.2,119.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:122.96,124.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:124.16,126.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:127.2,128.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:128.19,130.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:131.2,132.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:132.18,134.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:135.2,141.79 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:141.79,143.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:143.17,145.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:146.3,146.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:148.2,148.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:151.77,153.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:153.16,155.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:156.2,157.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:157.19,159.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:160.2,160.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:10.101,12.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:12.16,14.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:16.2,17.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:17.18,19.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:21.2,21.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:22.15,23.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:24.13,25.42 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:26.14,27.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:28.16,29.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:30.16,31.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:32.10,33.102 1 0 diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/repeat-01/create-database.stderr.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/repeat-01/create-database.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/repeat-01/create-database.stdout.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/repeat-01/create-database.stdout.log new file mode 100644 index 00000000..4b15bd57 --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/repeat-01/create-database.stdout.log @@ -0,0 +1 @@ +CREATE DATABASE diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/repeat-01/create-pgvector.stderr.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/repeat-01/create-pgvector.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/repeat-01/create-pgvector.stdout.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/repeat-01/create-pgvector.stdout.log new file mode 100644 index 00000000..d26bad14 --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/repeat-01/create-pgvector.stdout.log @@ -0,0 +1 @@ +CREATE EXTENSION diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/repeat-01/database-identity.stderr.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/repeat-01/database-identity.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/repeat-01/database-identity.stdout.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/repeat-01/database-identity.stdout.log new file mode 100644 index 00000000..f46e1a07 --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/repeat-01/database-identity.stdout.log @@ -0,0 +1 @@ +{"database" : "engram_prc_rg_test_8a461b2905076235_r1", "schema" : "public", "server_version" : "17.10 (Debian 17.10-1.pgdg12+1)", "user" : "engram"} diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/repeat-01/go-test-summary.json b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/repeat-01/go-test-summary.json new file mode 100644 index 00000000..a7f9cb26 --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/repeat-01/go-test-summary.json @@ -0,0 +1,40 @@ +{ + "schema_version": 1, + "verdict": "PASS", + "input_path": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-post-prove-green\\repeat-01\\go-test.stdout.jsonl", + "fail_on_unexpected_skip": true, + "allowed_skip_identities": [], + "counts": { + "packages": 1, + "tests": 1, + "passed": 1, + "failed": 0, + "skipped": 0, + "no_tests": 0, + "zero_tests": 0, + "incomplete": 0, + "unexpected_skips": 0, + "malformed_lines": 0 + }, + "packages": [ + { + "package": "github.com/thebtf/engram/internal/mcp", + "outcome": "pass", + "elapsed_seconds": 3.8890000000000002, + "last_output": "ok \tgithub.com/thebtf/engram/internal/mcp\t3.879s\tcoverage: 0.1% of statements", + "tests_observed": 1 + } + ], + "tests": [ + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestEC_F1_TagDerivedBackfill_T007", + "outcome": "pass", + "elapsed_seconds": 3.76, + "last_output": "--- PASS: TestEC_F1_TagDerivedBackfill_T007 (3.76s)", + "skip_allowed": false + } + ], + "unexpected_skips": [], + "errors": [] +} diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/repeat-01/go-test.stderr.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/repeat-01/go-test.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/repeat-01/go-test.stdout.jsonl b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/repeat-01/go-test.stdout.jsonl new file mode 100644 index 00000000..55f23530 --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/repeat-01/go-test.stdout.jsonl @@ -0,0 +1,16 @@ +{"Time":"2026-07-11T03:38:44.3653921+03:00","Action":"start","Package":"github.com/thebtf/engram/internal/mcp"} +{"Time":"2026-07-11T03:38:44.4553914+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007"} +{"Time":"2026-07-11T03:38:44.4553914+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":"=== RUN TestEC_F1_TagDerivedBackfill_T007\n"} +{"Time":"2026-07-11T03:38:45.3183256+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":"{\"level\":\"warn\",\"error\":\"ERROR: relation \\\"observation_vectors\\\" does not exist (SQLSTATE 42P01)\",\"time\":\"2026-07-11T03:38:45+03:00\",\"message\":\"migration 040: orphan vector cleanup failed (non-fatal)\"}\n"} +{"Time":"2026-07-11T03:38:45.3183256+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":"{\"level\":\"info\",\"garbage_deleted\":0,\"orphan_vectors_deleted\":0,\"time\":\"2026-07-11T03:38:45+03:00\",\"message\":\"migration 040: garbage cleanup complete\"}\n"} +{"Time":"2026-07-11T03:38:45.3268248+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":"{\"level\":\"info\",\"orphan_vectors_deleted\":0,\"time\":\"2026-07-11T03:38:45+03:00\",\"message\":\"migration 041: orphan vector purge complete\"}\n"} +{"Time":"2026-07-11T03:38:45.3348275+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":"{\"level\":\"info\",\"patterns_deleted\":0,\"time\":\"2026-07-11T03:38:45+03:00\",\"message\":\"migration 042: low-quality pattern purge complete\"}\n"} +{"Time":"2026-07-11T03:38:45.3693248+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":"{\"level\":\"info\",\"total_deleted\":0,\"time\":\"2026-07-11T03:38:45+03:00\",\"message\":\"migration 043: radical observation cleanup complete\"}\n"} +{"Time":"2026-07-11T03:38:46.6611206+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":"{\"level\":\"warn\",\"error\":\"ERROR: extension \\\"vectorscale\\\" is not available (SQLSTATE 0A000)\",\"time\":\"2026-07-11T03:38:46+03:00\",\"message\":\"migration 109: vectorscale extension not available, skipping DiskANN index\"}\n"} +{"Time":"2026-07-11T03:38:47.8613841+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":"{\"level\":\"debug\",\"connections\":1,\"time\":\"2026-07-11T03:38:47+03:00\",\"message\":\"Connection pool warmed\"}\n"} +{"Time":"2026-07-11T03:38:48.2142452+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":"--- PASS: TestEC_F1_TagDerivedBackfill_T007 (3.76s)\n"} +{"Time":"2026-07-11T03:38:48.2142452+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Elapsed":3.76} +{"Time":"2026-07-11T03:38:48.2142452+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Output":"PASS\n"} +{"Time":"2026-07-11T03:38:48.229745+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Output":"coverage: 0.1% of statements\n"} +{"Time":"2026-07-11T03:38:48.2542451+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Output":"ok \tgithub.com/thebtf/engram/internal/mcp\t3.879s\tcoverage: 0.1% of statements\n"} +{"Time":"2026-07-11T03:38:48.2542451+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Elapsed":3.8890000000000002} diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/repeat-01/pg-stat-activity-after.stderr.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/repeat-01/pg-stat-activity-after.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/repeat-01/pg-stat-activity-after.stdout.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/repeat-01/pg-stat-activity-after.stdout.log new file mode 100644 index 00000000..fe51488c --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/repeat-01/pg-stat-activity-after.stdout.log @@ -0,0 +1 @@ +[] diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/repeat-01/pg-stat-activity-before.stderr.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/repeat-01/pg-stat-activity-before.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/repeat-01/pg-stat-activity-before.stdout.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/repeat-01/pg-stat-activity-before.stdout.log new file mode 100644 index 00000000..fe51488c --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/repeat-01/pg-stat-activity-before.stdout.log @@ -0,0 +1 @@ +[] diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/repeat-01/repeat-summary.json b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/repeat-01/repeat-summary.json new file mode 100644 index 00000000..8a05a25c --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/repeat-01/repeat-summary.json @@ -0,0 +1,33 @@ +{ + "repeat": 1, + "verdict": "PASS", + "database": "engram_prc_rg_test_8a461b2905076235_r1", + "schema": "public", + "database_schema_identity": "engram_prc_rg_test_8a461b2905076235_r1.public", + "database_dsn": "REDACTED_DATABASE_DSN", + "database_create_confirmed": true, + "sequential_execution": { + "package_parallelism": 1, + "test_parallelism": 1 + }, + "race": false, + "connection_budget": 20, + "server_sessions_before": 6, + "server_sessions_after": 6, + "sessions_before": 0, + "sessions_after": 0, + "go_test_exit": 0, + "json_parser_exit": 0, + "coverage_policy": "Targeted", + "coverage_exit": 0, + "cleanup_exit": 0, + "cleanup_status": "PASS", + "required_session_start_execution": { + "schema_version": 1, + "verdict": "NOT_APPLICABLE", + "reason": "only an unfiltered canonical ./... run requires the 12-test session-start execution proof" + }, + "cleanup_summary": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-post-prove-green\\repeat-01\\cleanup\\cleanup.json", + "errors": [], + "artifact_directory": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-post-prove-green\\repeat-01" +} diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/repeat-01/server-connection-count-after.stderr.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/repeat-01/server-connection-count-after.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/repeat-01/server-connection-count-after.stdout.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/repeat-01/server-connection-count-after.stdout.log new file mode 100644 index 00000000..1e8b3149 --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/repeat-01/server-connection-count-after.stdout.log @@ -0,0 +1 @@ +6 diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/repeat-01/server-connection-count-before.stderr.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/repeat-01/server-connection-count-before.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/repeat-01/server-connection-count-before.stdout.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/repeat-01/server-connection-count-before.stdout.log new file mode 100644 index 00000000..1e8b3149 --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/repeat-01/server-connection-count-before.stdout.log @@ -0,0 +1 @@ +6 diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/repeat-01/targeted-coverage.stderr.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/repeat-01/targeted-coverage.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/repeat-01/targeted-coverage.stdout.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/repeat-01/targeted-coverage.stdout.log new file mode 100644 index 00000000..c958686c --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/repeat-01/targeted-coverage.stdout.log @@ -0,0 +1,352 @@ +github.com/thebtf/engram/internal/mcp/audit_helpers.go:33: effectiveAuditWriter 0.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:44: isAuditEnabled 0.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:52: runAuditAsync 0.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:77: marshalState 0.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:92: logAuditCreate 0.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:117: logAuditEdit 0.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:142: logAuditDelete 0.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:166: logAuditGeneric 0.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:189: logAuditSupersede 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:30: parseArgs 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:46: coerceString 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:67: coerceInt 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:97: coerceInt64 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:127: coerceFloat64 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:151: coerceBool 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:177: coerceStringSlice 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:204: coerceInt64Slice 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:222: clampToInt 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:236: clampInt64ToInt 0.0% +github.com/thebtf/engram/internal/mcp/context.go:17: extractProjectFromHeader 0.0% +github.com/thebtf/engram/internal/mcp/context.go:22: contextWithProject 0.0% +github.com/thebtf/engram/internal/mcp/context.go:29: ContextWithProject 0.0% +github.com/thebtf/engram/internal/mcp/context.go:35: projectFromContext 0.0% +github.com/thebtf/engram/internal/mcp/context.go:41: contextWithSession 0.0% +github.com/thebtf/engram/internal/mcp/context.go:48: ContextWithSession 0.0% +github.com/thebtf/engram/internal/mcp/context.go:54: sessionFromContext 0.0% +github.com/thebtf/engram/internal/mcp/context.go:61: actorFromContext 0.0% +github.com/thebtf/engram/internal/mcp/health.go:22: NewMCPHealth 0.0% +github.com/thebtf/engram/internal/mcp/health.go:29: RecordRequest 0.0% +github.com/thebtf/engram/internal/mcp/health.go:36: RecordError 0.0% +github.com/thebtf/engram/internal/mcp/health.go:42: rotateWindowIfNeeded 0.0% +github.com/thebtf/engram/internal/mcp/health.go:55: HandleHealth 0.0% +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:28: ruleGovernanceCaptureEnabled 0.0% +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:39: captureActiveRuleIntent 0.0% +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:104: ruleIntentFingerprint 0.0% +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:113: marshalRuleCandidateIntentResponse 0.0% +github.com/thebtf/engram/internal/mcp/server.go:127: NewServer 100.0% +github.com/thebtf/engram/internal/mcp/server.go:141: SetBackfillStatusFunc 0.0% +github.com/thebtf/engram/internal/mcp/server.go:146: SetVersionedDocumentStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:151: SetIssueStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:156: SetMemoryStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:161: SetMetaMemoryIndex 0.0% +github.com/thebtf/engram/internal/mcp/server.go:166: SetHintQueue 0.0% +github.com/thebtf/engram/internal/mcp/server.go:171: SetStateStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:176: SetDirectiveCaptureService 0.0% +github.com/thebtf/engram/internal/mcp/server.go:181: SetBehavioralRulesStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:186: SetRuleGovernanceStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:191: SetRuleInjectionTelemetryStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:195: SetPromotionStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:199: SetGraphStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:204: SetNodesStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:211: SetAuditStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:216: SetPurgeStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:222: SetCandidateStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:228: SetSnapshotStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:234: SetBulkFacade 0.0% +github.com/thebtf/engram/internal/mcp/server.go:240: setTestAuditWriter 0.0% +github.com/thebtf/engram/internal/mcp/server.go:246: setTestMemoryEditor 0.0% +github.com/thebtf/engram/internal/mcp/server.go:252: setTestMemorySignificanceUpdater 0.0% +github.com/thebtf/engram/internal/mcp/server.go:260: SetWriteLintOrchestrator 0.0% +github.com/thebtf/engram/internal/mcp/server.go:269: SetRedactionRules 0.0% +github.com/thebtf/engram/internal/mcp/server.go:274: SetEmbeddingStores 0.0% +github.com/thebtf/engram/internal/mcp/server.go:282: SetRerankClient 0.0% +github.com/thebtf/engram/internal/mcp/server.go:290: SetStatsDB 0.0% +github.com/thebtf/engram/internal/mcp/server.go:297: HandleRequest 0.0% +github.com/thebtf/engram/internal/mcp/server.go:303: ListTools 0.0% +github.com/thebtf/engram/internal/mcp/server.go:332: Version 0.0% +github.com/thebtf/engram/internal/mcp/server.go:383: Run 0.0% +github.com/thebtf/engram/internal/mcp/server.go:427: handleRequest 0.0% +github.com/thebtf/engram/internal/mcp/server.go:461: handleNotification 0.0% +github.com/thebtf/engram/internal/mcp/server.go:473: handleInitialize 0.0% +github.com/thebtf/engram/internal/mcp/server.go:496: buildInstructions 0.0% +github.com/thebtf/engram/internal/mcp/server.go:660: storeMemoryTool 0.0% +github.com/thebtf/engram/internal/mcp/server.go:712: recallMemoryTool 0.0% +github.com/thebtf/engram/internal/mcp/server.go:805: primaryTools 0.0% +github.com/thebtf/engram/internal/mcp/server.go:942: handleToolsList 0.0% +github.com/thebtf/engram/internal/mcp/server.go:1612: handleToolsCall 0.0% +github.com/thebtf/engram/internal/mcp/server.go:1644: sanitizeToolCallArgs 0.0% +github.com/thebtf/engram/internal/mcp/server.go:1656: callTool 0.0% +github.com/thebtf/engram/internal/mcp/server.go:1874: sendResponse 0.0% +github.com/thebtf/engram/internal/mcp/server.go:1884: sendError 0.0% +github.com/thebtf/engram/internal/mcp/server.go:1896: handleFindSimilarObservations 0.0% +github.com/thebtf/engram/internal/mcp/server.go:1927: handleGetMemoryStats 0.0% +github.com/thebtf/engram/internal/mcp/server.go:2055: handleBackfillStatus 0.0% +github.com/thebtf/engram/internal/mcp/server.go:2071: handleCheckSystemHealth 0.0% +github.com/thebtf/engram/internal/mcp/server.go:2216: handleAnalyzeSearchPatterns 0.0% +github.com/thebtf/engram/internal/mcp/server.go:2246: handleSearchSessions 0.0% +github.com/thebtf/engram/internal/mcp/server.go:2251: handleListSessions 0.0% +github.com/thebtf/engram/internal/mcp/tools_admin.go:18: buildAdminTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_admin.go:68: adminActionsForEnv 33.3% +github.com/thebtf/engram/internal/mcp/tools_admin.go:80: vnextEnabled 0.0% +github.com/thebtf/engram/internal/mcp/tools_admin.go:84: handleAdmin 0.0% +github.com/thebtf/engram/internal/mcp/tools_admin.go:120: handlePurgeProject 0.0% +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:27: ambientHintsEnabledFromEnv 0.0% +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:32: ambientHintsTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:48: handleGetAmbientHints 0.0% +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:86: normalizeAmbientHintsToolLimit 0.0% +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:96: ambientHintItems 0.0% +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:114: errMissingSessionID 0.0% +github.com/thebtf/engram/internal/mcp/tools_brief.go:31: handleGetMemoryBrief 0.0% +github.com/thebtf/engram/internal/mcp/tools_brief.go:107: memoryBriefUsesPrincipalScope 0.0% +github.com/thebtf/engram/internal/mcp/tools_brief.go:115: handlePrincipalMemoryBrief 0.0% +github.com/thebtf/engram/internal/mcp/tools_brief.go:259: truncateBriefContent 0.0% +github.com/thebtf/engram/internal/mcp/tools_brief.go:270: filterInjectionByScope 0.0% +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:25: bulkOpsTools 0.0% +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:95: handleBulkPromote 0.0% +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:154: handleBulkDelete 0.0% +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:211: handleBulkSupersede 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:31: candidateItemFromDomain 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:51: newCandidateReviewSnapshot 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:59: requireCandidateReviewSnapshot 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:68: candidateTools 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:165: handleListCandidates 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:208: handleGetCandidate 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:239: handlePromoteCandidate 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:348: handleRejectCandidate 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:402: handleSupersedeCandidate 0.0% +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:34: codeIntelEnabled 0.0% +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:42: SetCodeChunkStore 0.0% +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:48: codebaseSearchTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:79: codebaseStatusTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:100: handleCodebaseSearch 0.0% +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:194: handleCodebaseStatus 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:21: getVault 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:35: credentialStore 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:49: handleStoreCredential 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:130: handleGetCredential 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:192: handleListCredentials 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:243: handleDeleteCredential 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:302: handleVaultStatus 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:338: expandTagHierarchy 0.0% +github.com/thebtf/engram/internal/mcp/tools_directives.go:16: directivesCaptureEnabledFromEnv 0.0% +github.com/thebtf/engram/internal/mcp/tools_directives.go:20: rememberDirectiveTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_directives.go:38: currentDirectiveCaptureService 0.0% +github.com/thebtf/engram/internal/mcp/tools_directives.go:48: handleRememberDirective 0.0% +github.com/thebtf/engram/internal/mcp/tools_directives.go:72: parseRememberDirectiveArgs 0.0% +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:10: handleDocsConsolidated 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents.go:15: handleListCollections 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents.go:61: handleListDocuments 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents.go:121: handleGetDocument 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents.go:165: handleRemoveDocument 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents.go:197: handleIngestDocument 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents.go:235: handleSearchCollection 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:15: handleDocCreate 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:61: handleDocRead 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:117: handleDocUpdate 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:122: handleDocList 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:175: handleDocHistory 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:232: handleDocComment 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:19: SetExperienceProvider 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:23: experienceHistoryTools 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:40: experienceHistoryReadSchema 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:65: experienceHistoryDetailSchema 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:82: experienceHistoryTriggerEnum 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:91: handleExperienceHistoryRead 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:103: handleExperienceHistoryDetail 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:115: parseExperienceHistoryReadArgs 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:142: parseExperienceHistoryDetailArgs 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:157: experienceHistoryTriggersFromArgs 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:180: marshalExperienceHistory 0.0% +github.com/thebtf/engram/internal/mcp/tools_feedback.go:12: handleFeedbackConsolidated 0.0% +github.com/thebtf/engram/internal/mcp/tools_feedback.go:36: handleSetSessionOutcome 0.0% +github.com/thebtf/engram/internal/mcp/tools_governance.go:27: governanceTools 0.0% +github.com/thebtf/engram/internal/mcp/tools_governance.go:98: handleListSnapshots 0.0% +github.com/thebtf/engram/internal/mcp/tools_governance.go:167: handleRollbackSnapshot 0.0% +github.com/thebtf/engram/internal/mcp/tools_governance.go:215: handlePinSnapshot 0.0% +github.com/thebtf/engram/internal/mcp/tools_governance.go:258: handleRedactionRulesStatus 0.0% +github.com/thebtf/engram/internal/mcp/tools_governance.go:284: resolveGovernanceActor 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:64: handleGraph 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:100: graphAddEdge 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:216: mcpGraphEndpointExists 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:243: mcpGraphEdgeAlreadyExists 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:276: graphAddNode 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:317: graphRemoveEdge 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:332: graphGetEdges 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:397: filterEdgesByNodeType 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:457: graphTraverse 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:480: graphFindPath 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:502: graphSynonyms 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:23: graphCreateEdgeWithGuards 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:80: graphEndpointExistsWithGuards 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:114: graphDuplicateEdgeExists 0.0% +github.com/thebtf/engram/internal/mcp/tools_ingest.go:25: handleIngest 0.0% +github.com/thebtf/engram/internal/mcp/tools_ingest.go:43: ingestDocument 0.0% +github.com/thebtf/engram/internal/mcp/tools_instincts.go:20: handleImportInstincts 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:19: issuesToolSchema 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:109: validateIssueActionParams 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:143: handleIssues 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:189: resolveSourceProject 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:205: handleIssueCreate 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:250: handleIssueList 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:311: handleIssueGet 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:344: handleIssueUpdate 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:382: handleIssueComment 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:408: handleIssueReopen 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:425: handleIssueClose 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:22: handleLifecycle 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:48: lifecycleInfo 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:87: lifecyclePromote 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:118: lifecycleDemote 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:149: lifecycleSetConfidence 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:172: lifecycleSetDefeasibility 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:191: lifecycleSleepStatus 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:197: lifecycleDecayPreview 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:233: marshalJSON 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:35: vnextFEnabled 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:42: isValidPrivacyScope 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:54: derivePrivacyScopeFromLegacy 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:82: deriveLegacyScopeFromPrivacy 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:93: applyPrincipalMemoryMetadata 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:135: addPrincipalMemoryFields 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:161: newScopedWriteLintMemoryStore 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:172: writeLintVisibilityCaller 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:186: writeLintVisibilityOptions 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:192: scopedWriteLintMemoryStore 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:202: filterVisibleWriteGateCandidates 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:214: domainManageAllowed 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:218: List 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:272: writeLintVisibilityFetchLimit 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:286: Get 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:297: Create 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:301: Update 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:305: MarkSuperseded 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:319: effectiveMemoryEditor 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:329: isValidStoreObservationType 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:354: handleStoreMemory 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1111: handleEditMemory 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1218: computeTTLDays 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1258: truncateTitle 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1270: keepRecallMemory 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1280: keepRecallMemoryFilters 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1342: handleRecallMemory 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1690: staleAdvisory 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1700: marshalWithStaleAdvisory 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1727: Rank 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1751: handleRecallMemoryHybrid 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:2252: handleRateMemory 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:2281: handleSuppressMemory 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:17: SetDomainRegistryService 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:21: checkDomainWriteMCP 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:43: addDomainWriteDecisionFields 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:51: marshalStoreMemoryAugmented 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:26: newMemoryStoreSignificanceUpdater 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:33: s6OutcomeEnabledFromEnv 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:37: effectiveMemorySignificanceUpdater 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:47: currentMemorySignificanceUpdater 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:58: rateMemorySignificanceTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:74: handleRateMemorySignificance 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:109: RateMemorySignificance 0.0% +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:18: s2MetaMemoryEnabled 0.0% +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:22: knowAboutTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:39: handleKnowAbout 0.0% +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:104: parseKnowAboutLimit 0.0% +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:118: summarizeMetaIndexTags 0.0% +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:153: summarizeMetaIndexDateRange 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:23: SetPrincipalMemoryQueryService 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:27: principalMemoryQueryTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:52: handleQueryPrincipalMemory 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:134: principalMemoryQueryCaller 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:149: parsePrincipalMemoryQueryLimit 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:160: principalMemoryQueryText 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:167: parsePrincipalMemoryQueryVisibility 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:179: parsePrincipalMemoryQueryOffset 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:190: parsePrincipalMemoryQueryInt 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:215: parsePrincipalMemoryQueryBool 0.0% +github.com/thebtf/engram/internal/mcp/tools_recall.go:28: handleRecall 0.0% +github.com/thebtf/engram/internal/mcp/tools_recall.go:125: parseRecallIncludedPrincipals 0.0% +github.com/thebtf/engram/internal/mcp/tools_recall.go:165: appendRecallIncludedPrincipalMemories 0.0% +github.com/thebtf/engram/internal/mcp/tools_recall.go:223: recallIncludeTargetMatchesCaller 0.0% +github.com/thebtf/engram/internal/mcp/tools_recall.go:231: recallPrincipalQueryItemToMemory 0.0% +github.com/thebtf/engram/internal/mcp/tools_recall.go:247: handleRecallSearch 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:20: currentReviewLoopCandidateLister 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:30: reviewLoopCandidateTools 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:65: reviewLoopReadSchema 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:78: reviewPacketIDSchema 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:91: handleReviewMetricsRead 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:110: handleReviewQueueRead 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:140: handleReviewPacketDetail 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:151: handleReviewPacketPreviewAction 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:167: handleReviewPacketApplyAction 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:189: parseReviewLoopReadArgs 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:212: reviewLoopMCPPacketTypeSupported 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:217: reviewLoopActionFromArgs 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:225: reviewLoopReasonFromArgs 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:233: loadReviewPacketCandidate 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:256: applyReviewPacketPreserve 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:278: applyReviewPacketSuppress 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:296: reviewLoopMemoryFromCandidate 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:320: filterRiskyMCPReviewCandidates 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:330: marshalReviewLoop 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:17: ruleGovernanceReadTools 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:126: handleRuleGovernanceHealth 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:176: handleRuleGovernanceQueue 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:233: handleRuleGovernanceSnapshots 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:278: handleRuleGovernanceUsefulness 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:338: handleRuleGovernanceTransition 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:373: handleRuleGovernancePinSnapshot 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:406: handleRuleGovernanceRollback 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:483: requireRuleGovernanceReadAccess 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:495: requireRuleGovernanceProjectOrAdmin 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:505: ruleGovernanceCallerIsAdmin 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:510: requireRuleGovernanceAdminAccess 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:518: redactRuleGovernanceEvidenceHandles 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:535: redactRuleGovernanceEvidenceHandle 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:553: ruleGovernanceEvidenceHandleHasSensitiveText 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:559: isCanonicalRuleGovernanceEvidenceHandle 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:580: isSafeRuleGovernanceEvidenceID 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:594: parseRuleGovernanceTransitionRequest 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:604: parseRuleGovernanceSince 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:623: boundedRuleGovernanceLimit 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:634: formatRuleGovernanceTime 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:641: formatRuleGovernanceTimePtr 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:649: stringRuleCandidateStatusCounts 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:657: stringRuleVersionStateCounts 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:665: stringRuleArbiterRunStatusCounts 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:673: stringRuleInjectionEventTypeCounts 0.0% +github.com/thebtf/engram/internal/mcp/tools_rules.go:17: handleStoreRule 0.0% +github.com/thebtf/engram/internal/mcp/tools_rules.go:133: handleListRules 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:22: handleSettingsConsolidated 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:51: SetSettingsStore 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:57: settingsStore 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:67: isSecretSettingKey 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:74: requireAdmin 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:85: handleSetSetting 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:145: handleGetSetting 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:181: handleListSettings 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:216: handleDeleteSetting 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:35: resumeScopesFromFields 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:52: stateTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:82: setStateTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:142: handleGetState 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:219: handleSetState 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:274: decodeSessionStateForWrite 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:292: validateSessionStateBudget 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:303: validateNativeResumePacket 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:349: decodeProjectStateForWrite 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:364: requireStateObject 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:383: requireNestedObject 0.0% +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:10: handleStoreConsolidated 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:21: SetTemporalTruthProvider 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:25: temporalTruthEnabledFromEnv 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:30: temporalTruthTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:39: temporalTruthRefreshTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:48: temporalTruthRefreshSchema 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:58: temporalTruthSchema 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:72: currentTemporalTruthProvider 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:82: handleTemporalTruth 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:102: handleTemporalTruthRefresh 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:122: parseTemporalTruthArgs 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:151: parseTemporalTruthRefreshProject 0.0% +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:10: handleVaultConsolidated 0.0% +total: (statements) 0.1% diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/summary.json b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/summary.json new file mode 100644 index 00000000..e97ab0ce --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-post-prove-green/summary.json @@ -0,0 +1,64 @@ +{ + "schema_version": 1, + "gate": "release-gates-foundation", + "run_id": "t007-maker-post-prove-green", + "started_at": "2026-07-11T00:38:39.3860044+00:00", + "finished_at": "2026-07-11T00:38:53.9170617+00:00", + "duration_seconds": 14.531, + "verdict": "PASS", + "counts": { + "requested_repeats": 1, + "completed_repeats": 1, + "passed_repeats": 1, + "failed_repeats": 0, + "child_commands": 16, + "nonzero_child_commands": 0 + }, + "packages": [ + "./internal/mcp" + ], + "run_pattern": "^TestEC_F1_TagDerivedBackfill_T007$", + "coverage_policy": "Targeted", + "connection_budget": 20, + "race": false, + "database_dsn": "REDACTED_DATABASE_DSN", + "environment": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-post-prove-green\\environment.json", + "commands": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-post-prove-green\\commands.json", + "repeats": [ + { + "repeat": 1, + "verdict": "PASS", + "database": "engram_prc_rg_test_8a461b2905076235_r1", + "schema": "public", + "database_schema_identity": "engram_prc_rg_test_8a461b2905076235_r1.public", + "database_dsn": "REDACTED_DATABASE_DSN", + "database_create_confirmed": true, + "sequential_execution": { + "package_parallelism": 1, + "test_parallelism": 1 + }, + "race": false, + "connection_budget": 20, + "server_sessions_before": 6, + "server_sessions_after": 6, + "sessions_before": 0, + "sessions_after": 0, + "go_test_exit": 0, + "json_parser_exit": 0, + "coverage_policy": "Targeted", + "coverage_exit": 0, + "cleanup_exit": 0, + "cleanup_status": "PASS", + "required_session_start_execution": { + "schema_version": 1, + "verdict": "NOT_APPLICABLE", + "reason": "only an unfiltered canonical ./... run requires the 12-test session-start execution proof" + }, + "cleanup_summary": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-post-prove-green\\repeat-01\\cleanup\\cleanup.json", + "errors": [], + "artifact_directory": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-post-prove-green\\repeat-01" + } + ], + "errors": [], + "artifact_directory": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-post-prove-green" +} diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/commands.json b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/commands.json new file mode 100644 index 00000000..4ef86028 --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/commands.json @@ -0,0 +1,444 @@ +[ + { + "name": "go-version", + "executable": "C:\\Program Files\\Go\\bin\\go.exe", + "arguments": [ + "version" + ], + "environment_keys": [], + "command": "C:\\Program Files\\Go\\bin\\go.exe version", + "started_at": "2026-07-11T00:37:29.5873228+00:00", + "finished_at": "2026-07-11T00:37:29.7793634+00:00", + "duration_seconds": 0.192, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-prove-it-old-assertion\\go-version.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-prove-it-old-assertion\\go-version.stderr.log" + }, + { + "name": "postgres-container-identity", + "executable": "docker", + "arguments": [ + "inspect", + "--format", + "{{.Name}}|{{.Config.Image}}|{{.Image}}|{{.State.Running}}", + "engram-prc-postgres" + ], + "environment_keys": [], + "command": "docker inspect --format {{.Name}}|{{.Config.Image}}|{{.Image}}|{{.State.Running}} engram-prc-postgres", + "started_at": "2026-07-11T00:37:29.8378010+00:00", + "finished_at": "2026-07-11T00:37:30.1902995+00:00", + "duration_seconds": 0.352, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-prove-it-old-assertion\\postgres-container-identity.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-prove-it-old-assertion\\postgres-container-identity.stderr.log" + }, + { + "name": "postgres-server-identity", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT json_build_object('server_version', current_setting('server_version'), 'server_version_num', current_setting('server_version_num'), 'version', version(), 'max_connections', current_setting('max_connections'), 'superuser_reserved_connections', current_setting('superuser_reserved_connections'), 'reserved_connections', COALESCE(NULLIF(current_setting('reserved_connections', true), ''), '0'), 'current_connections', (SELECT count(*)::text FROM pg_stat_activity), 'database', current_database(), 'schema', current_schema(), 'user', current_user)::text;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT json_build_object('server_version', current_setting('server_version'), 'server_version_num', current_setting('server_version_num'), 'version', version(), 'max_connections', current_setting('max_connections'), 'superuser_reserved_connections', current_setting('superuser_reserved_connections'), 'reserved_connections', COALESCE(NULLIF(current_setting('reserved_connections', true), ''), '0'), 'current_connections', (SELECT count(*)::text FROM pg_stat_activity), 'database', current_database(), 'schema', current_schema(), 'user', current_user)::text;", + "started_at": "2026-07-11T00:37:30.2001555+00:00", + "finished_at": "2026-07-11T00:37:30.5492137+00:00", + "duration_seconds": 0.349, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-prove-it-old-assertion\\postgres-server-identity.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-prove-it-old-assertion\\postgres-server-identity.stderr.log" + }, + { + "name": "repeat-1-create-database", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "CREATE DATABASE \"engram_prc_rg_test_9a720e1716717962_r1\" OWNER \"engram\";" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c CREATE DATABASE \"engram_prc_rg_test_9a720e1716717962_r1\" OWNER \"engram\";", + "started_at": "2026-07-11T00:37:30.5805592+00:00", + "finished_at": "2026-07-11T00:37:30.9277907+00:00", + "duration_seconds": 0.347, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-prove-it-old-assertion\\repeat-01\\create-database.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-prove-it-old-assertion\\repeat-01\\create-database.stderr.log" + }, + { + "name": "repeat-1-create-pgvector", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "engram_prc_rg_test_9a720e1716717962_r1", + "-At", + "-F", + "|", + "-c", + "CREATE EXTENSION IF NOT EXISTS vector WITH SCHEMA public;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d engram_prc_rg_test_9a720e1716717962_r1 -At -F | -c CREATE EXTENSION IF NOT EXISTS vector WITH SCHEMA public;", + "started_at": "2026-07-11T00:37:30.9331841+00:00", + "finished_at": "2026-07-11T00:37:31.2878804+00:00", + "duration_seconds": 0.355, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-prove-it-old-assertion\\repeat-01\\create-pgvector.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-prove-it-old-assertion\\repeat-01\\create-pgvector.stderr.log" + }, + { + "name": "repeat-1-database-identity", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "engram_prc_rg_test_9a720e1716717962_r1", + "-At", + "-F", + "|", + "-c", + "SELECT json_build_object('database', current_database(), 'schema', current_schema(), 'server_version', current_setting('server_version'), 'user', current_user)::text;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d engram_prc_rg_test_9a720e1716717962_r1 -At -F | -c SELECT json_build_object('database', current_database(), 'schema', current_schema(), 'server_version', current_setting('server_version'), 'user', current_user)::text;", + "started_at": "2026-07-11T00:37:31.2903345+00:00", + "finished_at": "2026-07-11T00:37:31.8184278+00:00", + "duration_seconds": 0.528, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-prove-it-old-assertion\\repeat-01\\database-identity.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-prove-it-old-assertion\\repeat-01\\database-identity.stderr.log" + }, + { + "name": "repeat-1-pg-stat-before", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT COALESCE(json_agg(row_to_json(s)), '[]'::json)::text FROM (SELECT pid, usename, datname, state, backend_type, application_name, client_addr::text AS client_addr, wait_event_type, wait_event, query_start FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_9a720e1716717962_r1' ORDER BY pid) AS s;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT COALESCE(json_agg(row_to_json(s)), '[]'::json)::text FROM (SELECT pid, usename, datname, state, backend_type, application_name, client_addr::text AS client_addr, wait_event_type, wait_event, query_start FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_9a720e1716717962_r1' ORDER BY pid) AS s;", + "started_at": "2026-07-11T00:37:31.8236399+00:00", + "finished_at": "2026-07-11T00:37:32.1880578+00:00", + "duration_seconds": 0.364, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-prove-it-old-assertion\\repeat-01\\pg-stat-activity-before.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-prove-it-old-assertion\\repeat-01\\pg-stat-activity-before.stderr.log" + }, + { + "name": "repeat-1-server-connection-count-before", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT count(*) FROM pg_stat_activity;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT count(*) FROM pg_stat_activity;", + "started_at": "2026-07-11T00:37:32.1902070+00:00", + "finished_at": "2026-07-11T00:37:32.5616049+00:00", + "duration_seconds": 0.371, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-prove-it-old-assertion\\repeat-01\\server-connection-count-before.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-prove-it-old-assertion\\repeat-01\\server-connection-count-before.stderr.log" + }, + { + "name": "repeat-1-connection-count-before", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT count(*) FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_9a720e1716717962_r1';" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT count(*) FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_9a720e1716717962_r1';", + "started_at": "2026-07-11T00:37:32.5712856+00:00", + "finished_at": "2026-07-11T00:37:32.9477576+00:00", + "duration_seconds": 0.376, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-prove-it-old-assertion\\repeat-01\\connection-count-before.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-prove-it-old-assertion\\repeat-01\\connection-count-before.stderr.log" + }, + { + "name": "repeat-1-go-test", + "executable": "C:\\Program Files\\Go\\bin\\go.exe", + "arguments": [ + "test", + "-json", + "-p", + "1", + "-parallel", + "1", + "-count=1", + "-timeout", + "30m", + "-covermode=atomic", + "-coverprofile=.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-prove-it-old-assertion\\repeat-01\\coverage.out", + "-run", + "^TestEC_F1_TagDerivedBackfill_T007$", + "./internal/mcp" + ], + "environment_keys": [ + "DATABASE_DSN", + "DATABASE_MAX_CONNS", + "ENGRAM_RELEASE_GATE_REPEAT", + "ENGRAM_RELEASE_GATE_RUN_ID", + "ENGRAM_TEST_DSN", + "TEST_DATABASE_DSN" + ], + "command": "C:\\Program Files\\Go\\bin\\go.exe test -json -p 1 -parallel 1 -count=1 -timeout 30m -covermode=atomic -coverprofile=.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-prove-it-old-assertion\\repeat-01\\coverage.out -run ^TestEC_F1_TagDerivedBackfill_T007$ ./internal/mcp", + "started_at": "2026-07-11T00:37:32.9533591+00:00", + "finished_at": "2026-07-11T00:37:40.4458627+00:00", + "duration_seconds": 7.493, + "exit_code": 1, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-prove-it-old-assertion\\repeat-01\\go-test.stdout.jsonl", + "stderr": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-prove-it-old-assertion\\repeat-01\\go-test.stderr.log" + }, + { + "name": "repeat-1-assert-go-test-json", + "executable": "C:\\Program Files\\PowerShell\\7\\pwsh.exe", + "arguments": [ + "-NoProfile", + "-File", + "D:\\Dev\\engram\\.w\\t007-current-contract\\scripts\\production-gates\\assert-go-test-json.ps1", + "-InputPath", + ".agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-prove-it-old-assertion\\repeat-01\\go-test.stdout.jsonl", + "-SummaryPath", + ".agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-prove-it-old-assertion\\repeat-01\\go-test-summary.json", + "-FailOnUnexpectedSkip" + ], + "environment_keys": [], + "command": "C:\\Program Files\\PowerShell\\7\\pwsh.exe -NoProfile -File D:\\Dev\\engram\\.w\\t007-current-contract\\scripts\\production-gates\\assert-go-test-json.ps1 -InputPath .agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-prove-it-old-assertion\\repeat-01\\go-test.stdout.jsonl -SummaryPath .agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-prove-it-old-assertion\\repeat-01\\go-test-summary.json -FailOnUnexpectedSkip", + "started_at": "2026-07-11T00:37:40.4513588+00:00", + "finished_at": "2026-07-11T00:37:41.1650840+00:00", + "duration_seconds": 0.714, + "exit_code": 1, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-prove-it-old-assertion\\repeat-01\\assert-go-test-json.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-prove-it-old-assertion\\repeat-01\\assert-go-test-json.stderr.log" + }, + { + "name": "repeat-1-targeted-coverage-report", + "executable": "C:\\Program Files\\Go\\bin\\go.exe", + "arguments": [ + "tool", + "cover", + "-func=.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-prove-it-old-assertion\\repeat-01\\coverage.out" + ], + "environment_keys": [], + "command": "C:\\Program Files\\Go\\bin\\go.exe tool cover -func=.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-prove-it-old-assertion\\repeat-01\\coverage.out", + "started_at": "2026-07-11T00:37:41.1713469+00:00", + "finished_at": "2026-07-11T00:37:41.7013653+00:00", + "duration_seconds": 0.53, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-prove-it-old-assertion\\repeat-01\\targeted-coverage.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-prove-it-old-assertion\\repeat-01\\targeted-coverage.stderr.log" + }, + { + "name": "repeat-1-pg-stat-after", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT COALESCE(json_agg(row_to_json(s)), '[]'::json)::text FROM (SELECT pid, usename, datname, state, backend_type, application_name, client_addr::text AS client_addr, wait_event_type, wait_event, query_start FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_9a720e1716717962_r1' ORDER BY pid) AS s;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT COALESCE(json_agg(row_to_json(s)), '[]'::json)::text FROM (SELECT pid, usename, datname, state, backend_type, application_name, client_addr::text AS client_addr, wait_event_type, wait_event, query_start FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_9a720e1716717962_r1' ORDER BY pid) AS s;", + "started_at": "2026-07-11T00:37:41.7022442+00:00", + "finished_at": "2026-07-11T00:37:42.0483858+00:00", + "duration_seconds": 0.346, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-prove-it-old-assertion\\repeat-01\\pg-stat-activity-after.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-prove-it-old-assertion\\repeat-01\\pg-stat-activity-after.stderr.log" + }, + { + "name": "repeat-1-server-connection-count-after", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT count(*) FROM pg_stat_activity;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT count(*) FROM pg_stat_activity;", + "started_at": "2026-07-11T00:37:42.0506090+00:00", + "finished_at": "2026-07-11T00:37:42.3900009+00:00", + "duration_seconds": 0.339, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-prove-it-old-assertion\\repeat-01\\server-connection-count-after.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-prove-it-old-assertion\\repeat-01\\server-connection-count-after.stderr.log" + }, + { + "name": "repeat-1-connection-count-after", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT count(*) FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_9a720e1716717962_r1';" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT count(*) FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_9a720e1716717962_r1';", + "started_at": "2026-07-11T00:37:42.3925203+00:00", + "finished_at": "2026-07-11T00:37:42.9842345+00:00", + "duration_seconds": 0.592, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-prove-it-old-assertion\\repeat-01\\connection-count-after.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-prove-it-old-assertion\\repeat-01\\connection-count-after.stderr.log" + }, + { + "name": "repeat-1-cleanup", + "executable": "C:\\Program Files\\PowerShell\\7\\pwsh.exe", + "arguments": [ + "-NoProfile", + "-File", + "D:\\Dev\\engram\\.w\\t007-current-contract\\scripts\\production-gates\\cleanup-db-sessions.ps1", + "-DatabaseName", + "engram_prc_rg_test_9a720e1716717962_r1", + "-SchemaName", + "public", + "-ArtifactRoot", + ".agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-prove-it-old-assertion\\repeat-01", + "-RunId", + "t007-maker-prove-it-old-assertion-repeat-1", + "-PostgresContainer", + "engram-prc-postgres" + ], + "environment_keys": [ + "ENGRAM_TEST_ADMIN_DSN" + ], + "command": "C:\\Program Files\\PowerShell\\7\\pwsh.exe -NoProfile -File D:\\Dev\\engram\\.w\\t007-current-contract\\scripts\\production-gates\\cleanup-db-sessions.ps1 -DatabaseName engram_prc_rg_test_9a720e1716717962_r1 -SchemaName public -ArtifactRoot .agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-prove-it-old-assertion\\repeat-01 -RunId t007-maker-prove-it-old-assertion-repeat-1 -PostgresContainer engram-prc-postgres", + "started_at": "2026-07-11T00:37:42.9877523+00:00", + "finished_at": "2026-07-11T00:37:45.7794120+00:00", + "duration_seconds": 2.792, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-prove-it-old-assertion\\repeat-01\\cleanup-process.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-prove-it-old-assertion\\repeat-01\\cleanup-process.stderr.log" + } +] diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/environment.json b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/environment.json new file mode 100644 index 00000000..96b0cbf4 --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/environment.json @@ -0,0 +1,52 @@ +{ + "schema_version": 1, + "run_id": "t007-maker-prove-it-old-assertion", + "timestamp": "2026-07-11T00:37:29.5703459+00:00", + "go_version": "go version go1.25.11 windows/amd64", + "postgres": { + "declared_image": "pgvector/pgvector:pg17", + "container": { + "name": "/engram-prc-postgres", + "configured_image": "pgvector/pgvector:pg17", + "image_id": "sha256:feb68f4f15446397d8cac7f4fe48fe4586de83160d1fc48b46283312d1a33966", + "running": true + }, + "server": { + "server_version": "17.10 (Debian 17.10-1.pgdg12+1)", + "server_version_num": "170010", + "version": "PostgreSQL 17.10 (Debian 17.10-1.pgdg12+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 12.2.0-14+deb12u1) 12.2.0, 64-bit", + "max_connections": "100", + "superuser_reserved_connections": "3", + "reserved_connections": "0", + "current_connections": "6", + "database": "postgres", + "schema": "public", + "user": "engram" + }, + "admin_dsn": "postgres://engram:REDACTED@127.0.0.1:55432/postgres?sslmode=disable" + }, + "packages": [ + "./internal/mcp" + ], + "run_pattern": "^TestEC_F1_TagDerivedBackfill_T007$", + "repeat": 1, + "fail_on_unexpected_skip": true, + "allowed_skip_identities": [], + "coverage_policy": "Targeted", + "connection_budget": 20, + "race": false, + "require_session_start_execution": false, + "required_session_start_test_count": 12, + "sequential_execution": { + "go_package_parallelism": 1, + "go_test_parallelism": 1, + "database_max_connections": 20 + }, + "govulncheck_policy": { + "authoritative": [ + "source scan with tests", + "unstripped binary scan" + ], + "non_authoritative": "stripped binary scan (module-level fallback when symbols are absent)" + } +} diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/go-version.stderr.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/go-version.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/go-version.stdout.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/go-version.stdout.log new file mode 100644 index 00000000..a857be3f --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/go-version.stdout.log @@ -0,0 +1 @@ +go version go1.25.11 windows/amd64 diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/postgres-container-identity.stderr.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/postgres-container-identity.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/postgres-container-identity.stdout.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/postgres-container-identity.stdout.log new file mode 100644 index 00000000..c110d492 --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/postgres-container-identity.stdout.log @@ -0,0 +1 @@ +/engram-prc-postgres|pgvector/pgvector:pg17|sha256:feb68f4f15446397d8cac7f4fe48fe4586de83160d1fc48b46283312d1a33966|true diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/postgres-server-identity.stderr.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/postgres-server-identity.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/postgres-server-identity.stdout.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/postgres-server-identity.stdout.log new file mode 100644 index 00000000..2e33d56e --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/postgres-server-identity.stdout.log @@ -0,0 +1 @@ +{"server_version" : "17.10 (Debian 17.10-1.pgdg12+1)", "server_version_num" : "170010", "version" : "PostgreSQL 17.10 (Debian 17.10-1.pgdg12+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 12.2.0-14+deb12u1) 12.2.0, 64-bit", "max_connections" : "100", "superuser_reserved_connections" : "3", "reserved_connections" : "0", "current_connections" : "6", "database" : "postgres", "schema" : "public", "user" : "engram"} diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/repeat-01/assert-go-test-json.stderr.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/repeat-01/assert-go-test-json.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/repeat-01/assert-go-test-json.stdout.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/repeat-01/assert-go-test-json.stdout.log new file mode 100644 index 00000000..b98595ec --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/repeat-01/assert-go-test-json.stdout.log @@ -0,0 +1,2 @@ +go test JSON verdict=FAIL packages=1 tests=1 passed=0 failed=1 skipped=0 unexpected_skips=0 malformed=0 +summary=D:\Dev\engram\.w\t007-current-contract\.agent\reports\evidence\production-ready\t007-compat\t007-maker-prove-it-old-assertion\repeat-01\go-test-summary.json diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/repeat-01/cleanup-process.stderr.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/repeat-01/cleanup-process.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/repeat-01/cleanup-process.stdout.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/repeat-01/cleanup-process.stdout.log new file mode 100644 index 00000000..b437b549 --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/repeat-01/cleanup-process.stdout.log @@ -0,0 +1,2 @@ +cleanup verdict=PASS database=engram_prc_rg_test_9a720e1716717962_r1 schema=public terminated_sessions=0 remaining_database_count=0 +summary=D:\Dev\engram\.w\t007-current-contract\.agent\reports\evidence\production-ready\t007-compat\t007-maker-prove-it-old-assertion\repeat-01\cleanup\cleanup.json diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/repeat-01/cleanup/cleanup.json b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/repeat-01/cleanup/cleanup.json new file mode 100644 index 00000000..e54b0ec3 --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/repeat-01/cleanup/cleanup.json @@ -0,0 +1,170 @@ +{ + "schema_version": 1, + "run_id": "t007-maker-prove-it-old-assertion-repeat-1", + "timestamp": "2026-07-11T00:37:45.6850903+00:00", + "verdict": "PASS", + "database": "engram_prc_rg_test_9a720e1716717962_r1", + "schema": "public", + "database_schema_identity": "engram_prc_rg_test_9a720e1716717962_r1.public", + "admin_dsn": "postgres://engram:REDACTED@127.0.0.1:55432/postgres?sslmode=disable", + "postgres_container": "engram-prc-postgres", + "cleanup_status": "PASS", + "cleanup_attempted": true, + "database_existed_before": true, + "absence_verified": true, + "terminated_sessions": 0, + "remaining_database_count": 0, + "commands": [ + { + "name": "database-exists-before-cleanup", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT count(*) FROM pg_database WHERE datname = 'engram_prc_rg_test_9a720e1716717962_r1';" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT count(*) FROM pg_database WHERE datname = 'engram_prc_rg_test_9a720e1716717962_r1';", + "started_at": "2026-07-11T00:37:43.5063686+00:00", + "finished_at": "2026-07-11T00:37:43.9407761+00:00", + "duration_seconds": 0.434, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-prove-it-old-assertion\\repeat-01\\cleanup\\database-exists-before.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-prove-it-old-assertion\\repeat-01\\cleanup\\database-exists-before.stderr.log" + }, + { + "name": "pg-stat-activity-before-cleanup", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT COALESCE(json_agg(row_to_json(s)), '[]'::json)::text FROM (SELECT pid, usename, datname, state, backend_type, application_name, client_addr::text AS client_addr, wait_event_type, wait_event, query_start FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_9a720e1716717962_r1' ORDER BY pid) AS s;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT COALESCE(json_agg(row_to_json(s)), '[]'::json)::text FROM (SELECT pid, usename, datname, state, backend_type, application_name, client_addr::text AS client_addr, wait_event_type, wait_event, query_start FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_9a720e1716717962_r1' ORDER BY pid) AS s;", + "started_at": "2026-07-11T00:37:44.0052037+00:00", + "finished_at": "2026-07-11T00:37:44.4387338+00:00", + "duration_seconds": 0.434, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-prove-it-old-assertion\\repeat-01\\cleanup\\pg-stat-activity-before.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-prove-it-old-assertion\\repeat-01\\cleanup\\pg-stat-activity-before.stderr.log" + }, + { + "name": "terminate-database-sessions", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT COALESCE(json_agg(row_to_json(s)), '[]'::json)::text FROM (SELECT pid, pg_terminate_backend(pid) AS terminated FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_9a720e1716717962_r1' AND pid <> pg_backend_pid() ORDER BY pid) AS s;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT COALESCE(json_agg(row_to_json(s)), '[]'::json)::text FROM (SELECT pid, pg_terminate_backend(pid) AS terminated FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_9a720e1716717962_r1' AND pid <> pg_backend_pid() ORDER BY pid) AS s;", + "started_at": "2026-07-11T00:37:44.4441325+00:00", + "finished_at": "2026-07-11T00:37:44.8216127+00:00", + "duration_seconds": 0.377, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-prove-it-old-assertion\\repeat-01\\cleanup\\terminate-sessions.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-prove-it-old-assertion\\repeat-01\\cleanup\\terminate-sessions.stderr.log" + }, + { + "name": "drop-fresh-database", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "DROP DATABASE IF EXISTS \"engram_prc_rg_test_9a720e1716717962_r1\" WITH (FORCE);" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c DROP DATABASE IF EXISTS \"engram_prc_rg_test_9a720e1716717962_r1\" WITH (FORCE);", + "started_at": "2026-07-11T00:37:44.8295111+00:00", + "finished_at": "2026-07-11T00:37:45.2760240+00:00", + "duration_seconds": 0.447, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-prove-it-old-assertion\\repeat-01\\cleanup\\drop-database.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-prove-it-old-assertion\\repeat-01\\cleanup\\drop-database.stderr.log" + }, + { + "name": "verify-database-absent", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT count(*) FROM pg_database WHERE datname = 'engram_prc_rg_test_9a720e1716717962_r1';" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT count(*) FROM pg_database WHERE datname = 'engram_prc_rg_test_9a720e1716717962_r1';", + "started_at": "2026-07-11T00:37:45.2813847+00:00", + "finished_at": "2026-07-11T00:37:45.6776807+00:00", + "duration_seconds": 0.396, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-prove-it-old-assertion\\repeat-01\\cleanup\\verify-database-absent.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-prove-it-old-assertion\\repeat-01\\cleanup\\verify-database-absent.stderr.log" + } + ], + "errors": [] +} diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/repeat-01/cleanup/database-exists-before.stderr.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/repeat-01/cleanup/database-exists-before.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/repeat-01/cleanup/database-exists-before.stdout.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/repeat-01/cleanup/database-exists-before.stdout.log new file mode 100644 index 00000000..d00491fd --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/repeat-01/cleanup/database-exists-before.stdout.log @@ -0,0 +1 @@ +1 diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/repeat-01/cleanup/drop-database.stderr.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/repeat-01/cleanup/drop-database.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/repeat-01/cleanup/drop-database.stdout.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/repeat-01/cleanup/drop-database.stdout.log new file mode 100644 index 00000000..ca12dce0 --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/repeat-01/cleanup/drop-database.stdout.log @@ -0,0 +1 @@ +DROP DATABASE diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/repeat-01/cleanup/pg-stat-activity-before.stderr.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/repeat-01/cleanup/pg-stat-activity-before.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/repeat-01/cleanup/pg-stat-activity-before.stdout.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/repeat-01/cleanup/pg-stat-activity-before.stdout.log new file mode 100644 index 00000000..fe51488c --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/repeat-01/cleanup/pg-stat-activity-before.stdout.log @@ -0,0 +1 @@ +[] diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/repeat-01/cleanup/terminate-sessions.stderr.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/repeat-01/cleanup/terminate-sessions.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/repeat-01/cleanup/terminate-sessions.stdout.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/repeat-01/cleanup/terminate-sessions.stdout.log new file mode 100644 index 00000000..fe51488c --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/repeat-01/cleanup/terminate-sessions.stdout.log @@ -0,0 +1 @@ +[] diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/repeat-01/cleanup/verify-database-absent.stderr.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/repeat-01/cleanup/verify-database-absent.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/repeat-01/cleanup/verify-database-absent.stdout.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/repeat-01/cleanup/verify-database-absent.stdout.log new file mode 100644 index 00000000..573541ac --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/repeat-01/cleanup/verify-database-absent.stdout.log @@ -0,0 +1 @@ +0 diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/repeat-01/connection-count-after.stderr.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/repeat-01/connection-count-after.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/repeat-01/connection-count-after.stdout.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/repeat-01/connection-count-after.stdout.log new file mode 100644 index 00000000..573541ac --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/repeat-01/connection-count-after.stdout.log @@ -0,0 +1 @@ +0 diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/repeat-01/connection-count-before.stderr.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/repeat-01/connection-count-before.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/repeat-01/connection-count-before.stdout.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/repeat-01/connection-count-before.stdout.log new file mode 100644 index 00000000..573541ac --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/repeat-01/connection-count-before.stdout.log @@ -0,0 +1 @@ +0 diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/repeat-01/coverage.out b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/repeat-01/coverage.out new file mode 100644 index 00000000..52335d8a --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/repeat-01/coverage.out @@ -0,0 +1,3472 @@ +mode: atomic +github.com/thebtf/engram/internal/mcp/audit_helpers.go:33.53,34.30 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:34.30,36.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:37.2,37.25 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:37.25,39.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:40.2,40.12 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:44.28,46.2 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:52.83,53.12 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:53.12,54.16 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:54.16,55.32 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:55.32,61.5 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:63.3,65.33 3 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:65.33,71.4 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:77.54,78.14 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:78.14,80.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:81.2,82.16 2 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:82.16,85.3 2 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:86.2,87.13 2 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:92.91,93.23 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:93.23,95.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:96.2,97.15 2 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:97.15,99.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:100.2,105.65 4 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:105.65,113.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:117.95,118.23 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:118.23,120.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:121.2,122.15 2 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:122.15,124.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:125.2,129.65 5 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:129.65,138.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:142.87,143.23 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:143.23,145.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:146.2,147.15 2 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:147.15,149.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:150.2,153.65 4 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:153.65,161.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:166.96,167.23 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:167.23,169.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:170.2,171.15 2 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:171.15,173.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:174.2,177.63 4 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:177.63,185.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:189.97,190.23 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:190.23,192.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:193.2,194.15 2 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:194.15,196.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:197.2,200.68 4 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:200.68,208.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:30.62,31.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:31.20,33.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:34.2,35.49 2 0 +github.com/thebtf/engram/internal/mcp/coerce.go:35.49,37.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:38.2,38.14 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:38.14,40.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:41.2,41.15 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:46.52,47.14 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:47.14,49.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:50.2,50.23 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:51.14,52.11 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:53.19,54.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:55.15,56.45 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:57.12,58.31 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:59.10,60.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:67.43,68.14 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:68.14,70.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:71.2,71.23 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:72.15,73.23 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:74.19,75.38 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:75.38,77.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:78.3,78.40 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:78.40,80.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:81.3,81.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:82.14,83.56 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:83.56,85.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:86.3,86.54 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:86.54,88.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:89.3,89.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:90.10,91.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:97.49,98.14 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:98.14,100.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:101.2,101.23 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:102.15,103.18 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:104.19,105.38 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:105.38,107.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:108.3,108.40 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:108.40,110.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:111.3,111.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:112.14,113.56 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:113.56,115.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:116.3,116.54 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:116.54,118.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:119.3,119.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:120.10,121.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:127.55,128.14 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:128.14,130.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:131.2,131.23 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:132.15,133.11 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:134.19,135.40 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:135.40,137.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:138.3,138.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:139.14,140.54 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:140.54,142.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:143.3,143.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:144.10,145.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:151.46,152.14 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:152.14,154.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:155.2,155.23 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:156.12,157.11 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:158.14,159.54 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:159.54,161.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:162.3,162.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:163.15,164.16 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:165.19,166.40 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:166.40,168.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:169.3,169.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:170.10,171.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:177.40,178.14 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:178.14,180.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:181.2,181.23 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:182.13,184.26 2 0 +github.com/thebtf/engram/internal/mcp/coerce.go:184.26,185.36 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:185.36,187.5 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:189.3,189.16 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:190.16,191.11 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:192.14,193.14 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:193.14,195.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:196.3,196.13 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:197.10,198.13 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:204.38,205.14 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:205.14,207.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:208.2,209.9 2 0 +github.com/thebtf/engram/internal/mcp/coerce.go:209.9,211.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:212.2,213.27 2 0 +github.com/thebtf/engram/internal/mcp/coerce.go:213.27,214.42 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:214.42,216.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:218.2,218.15 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:222.32,223.39 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:223.39,225.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:226.2,226.30 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:226.30,228.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:229.2,229.30 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:229.30,231.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:232.2,232.15 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:236.35,237.28 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:237.28,239.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:240.2,240.28 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:240.28,242.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:243.2,243.15 1 0 +github.com/thebtf/engram/internal/mcp/context.go:17.55,19.2 1 0 +github.com/thebtf/engram/internal/mcp/context.go:22.78,24.2 1 0 +github.com/thebtf/engram/internal/mcp/context.go:29.78,31.2 1 0 +github.com/thebtf/engram/internal/mcp/context.go:35.53,38.2 2 0 +github.com/thebtf/engram/internal/mcp/context.go:41.80,43.2 1 0 +github.com/thebtf/engram/internal/mcp/context.go:48.80,50.2 1 0 +github.com/thebtf/engram/internal/mcp/context.go:54.53,57.2 2 0 +github.com/thebtf/engram/internal/mcp/context.go:61.51,62.43 1 0 +github.com/thebtf/engram/internal/mcp/context.go:62.43,64.3 1 0 +github.com/thebtf/engram/internal/mcp/context.go:65.2,65.16 1 0 +github.com/thebtf/engram/internal/mcp/health.go:22.32,26.2 3 0 +github.com/thebtf/engram/internal/mcp/health.go:29.37,33.2 3 0 +github.com/thebtf/engram/internal/mcp/health.go:36.35,40.2 3 0 +github.com/thebtf/engram/internal/mcp/health.go:42.44,45.25 3 0 +github.com/thebtf/engram/internal/mcp/health.go:45.25,47.50 1 0 +github.com/thebtf/engram/internal/mcp/health.go:47.50,50.4 2 0 +github.com/thebtf/engram/internal/mcp/health.go:55.74,60.16 5 0 +github.com/thebtf/engram/internal/mcp/health.go:60.16,62.3 1 0 +github.com/thebtf/engram/internal/mcp/health.go:63.2,71.4 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:28.42,29.65 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:29.65,32.3 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:33.2,33.40 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:33.40,35.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:36.2,36.14 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:39.120,40.69 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:40.69,42.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:43.2,44.19 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:44.19,46.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:47.2,48.17 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:48.17,50.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:51.2,52.59 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:52.59,54.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:55.2,56.20 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:56.20,58.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:59.2,60.17 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:60.17,62.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:63.2,64.21 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:64.21,66.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:67.2,68.22 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:68.22,70.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:71.2,72.23 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:72.23,74.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:76.2,98.19 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:98.19,100.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:101.2,101.66 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:104.52,106.29 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:106.29,108.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:109.2,110.46 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:113.113,123.27 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:123.27,125.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:126.2,127.16 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:127.16,129.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:130.2,130.25 1 0 +github.com/thebtf/engram/internal/mcp/server.go:127.44,138.2 1 1 +github.com/thebtf/engram/internal/mcp/server.go:141.64,143.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:146.78,148.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:151.53,153.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:156.55,158.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:161.58,163.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:166.62,168.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:171.50,173.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:176.78,178.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:181.74,183.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:186.71,189.2 2 0 +github.com/thebtf/engram/internal/mcp/server.go:191.85,193.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:195.61,197.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:199.49,201.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:204.54,206.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:211.53,213.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:216.53,218.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:222.61,224.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:228.59,230.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:234.51,236.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:240.52,242.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:246.55,248.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:252.82,254.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:260.70,262.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:269.68,271.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:274.87,277.2 2 0 +github.com/thebtf/engram/internal/mcp/server.go:282.60,284.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:290.45,292.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:297.77,299.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:303.37,313.38 3 0 +github.com/thebtf/engram/internal/mcp/server.go:313.38,315.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:316.2,317.9 2 0 +github.com/thebtf/engram/internal/mcp/server.go:317.9,319.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:320.2,321.9 2 0 +github.com/thebtf/engram/internal/mcp/server.go:321.9,323.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:324.2,325.9 2 0 +github.com/thebtf/engram/internal/mcp/server.go:325.9,327.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:328.2,328.14 1 0 +github.com/thebtf/engram/internal/mcp/server.go:332.35,334.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:383.49,387.12 3 0 +github.com/thebtf/engram/internal/mcp/server.go:387.12,388.22 1 0 +github.com/thebtf/engram/internal/mcp/server.go:388.22,389.11 1 0 +github.com/thebtf/engram/internal/mcp/server.go:390.22,392.11 2 0 +github.com/thebtf/engram/internal/mcp/server.go:393.12,393.12 0 0 +github.com/thebtf/engram/internal/mcp/server.go:396.4,397.18 2 0 +github.com/thebtf/engram/internal/mcp/server.go:397.18,398.13 1 0 +github.com/thebtf/engram/internal/mcp/server.go:401.4,402.61 2 0 +github.com/thebtf/engram/internal/mcp/server.go:402.61,404.13 2 0 +github.com/thebtf/engram/internal/mcp/server.go:407.4,407.55 1 0 +github.com/thebtf/engram/internal/mcp/server.go:407.55,409.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:411.3,411.28 1 0 +github.com/thebtf/engram/internal/mcp/server.go:414.2,414.9 1 0 +github.com/thebtf/engram/internal/mcp/server.go:415.20,416.19 1 0 +github.com/thebtf/engram/internal/mcp/server.go:417.25,418.17 1 0 +github.com/thebtf/engram/internal/mcp/server.go:418.17,420.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:421.3,421.13 1 0 +github.com/thebtf/engram/internal/mcp/server.go:427.77,428.19 1 0 +github.com/thebtf/engram/internal/mcp/server.go:428.19,431.3 2 0 +github.com/thebtf/engram/internal/mcp/server.go:433.2,433.20 1 0 +github.com/thebtf/engram/internal/mcp/server.go:434.20,435.33 1 0 +github.com/thebtf/engram/internal/mcp/server.go:436.20,437.32 1 0 +github.com/thebtf/engram/internal/mcp/server.go:438.20,439.37 1 0 +github.com/thebtf/engram/internal/mcp/server.go:443.24,444.93 1 0 +github.com/thebtf/engram/internal/mcp/server.go:445.34,446.101 1 0 +github.com/thebtf/engram/internal/mcp/server.go:447.22,448.91 1 0 +github.com/thebtf/engram/internal/mcp/server.go:449.29,450.120 1 0 +github.com/thebtf/engram/internal/mcp/server.go:451.10,456.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:461.51,462.20 1 0 +github.com/thebtf/engram/internal/mcp/server.go:463.50,464.70 1 0 +github.com/thebtf/engram/internal/mcp/server.go:465.46,466.79 1 0 +github.com/thebtf/engram/internal/mcp/server.go:467.10,468.80 1 0 +github.com/thebtf/engram/internal/mcp/server.go:473.59,485.63 2 0 +github.com/thebtf/engram/internal/mcp/server.go:485.63,487.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:489.2,493.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:496.45,503.33 3 0 +github.com/thebtf/engram/internal/mcp/server.go:503.33,505.57 2 0 +github.com/thebtf/engram/internal/mcp/server.go:505.57,506.76 1 0 +github.com/thebtf/engram/internal/mcp/server.go:506.76,507.13 1 0 +github.com/thebtf/engram/internal/mcp/server.go:509.4,509.18 1 0 +github.com/thebtf/engram/internal/mcp/server.go:509.18,511.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:511.10,513.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:514.4,518.11 5 0 +github.com/thebtf/engram/internal/mcp/server.go:522.2,522.19 1 0 +github.com/thebtf/engram/internal/mcp/server.go:660.29,683.21 2 0 +github.com/thebtf/engram/internal/mcp/server.go:683.21,689.3 5 0 +github.com/thebtf/engram/internal/mcp/server.go:690.2,699.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:712.30,765.49 3 0 +github.com/thebtf/engram/internal/mcp/server.go:765.49,789.3 5 0 +github.com/thebtf/engram/internal/mcp/server.go:790.2,799.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:805.40,936.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:942.58,1048.35 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1048.35,1077.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1080.2,1080.33 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1080.33,1090.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1093.2,1093.26 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1093.26,1123.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1124.2,1124.80 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1124.80,1126.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1127.2,1127.55 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1127.55,1129.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1130.2,1130.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1130.38,1132.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1134.2,1134.25 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1134.25,1136.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1138.2,1138.33 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1138.33,1140.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1141.2,1141.69 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1141.69,1143.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1144.2,1144.75 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1144.75,1146.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1148.2,1148.27 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1148.27,1165.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1168.2,1168.76 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1168.76,1191.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1195.2,1195.48 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1195.48,1197.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1201.2,1201.47 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1201.47,1203.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1205.2,1205.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1205.38,1207.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1212.2,1212.21 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1212.21,1214.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1228.2,1228.51 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1228.51,1230.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1233.2,1233.56 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1233.56,1235.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1238.2,1238.71 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1238.71,1298.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1302.2,1302.104 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1302.104,1321.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1324.2,1324.72 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1324.72,1333.154 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1333.154,1334.26 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1334.26,1336.8 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1337.7,1337.16 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1338.35,1340.26 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1340.26,1342.8 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1343.7,1343.18 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1371.2,1371.26 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1371.26,1390.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1393.2,1393.28 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1393.28,1443.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1446.2,1446.28 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1446.28,1478.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1481.2,1481.37 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1481.37,1561.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1564.2,1568.23 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1568.23,1570.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1572.2,1588.57 3 0 +github.com/thebtf/engram/internal/mcp/server.go:1588.57,1591.29 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1591.29,1593.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1594.3,1594.27 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1594.27,1595.29 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1595.29,1597.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1601.2,1607.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1612.79,1614.60 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1614.60,1620.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1622.2,1623.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1623.16,1631.3 3 0 +github.com/thebtf/engram/internal/mcp/server.go:1633.2,1641.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1644.69,1645.34 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1645.34,1647.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1648.2,1649.22 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1649.22,1651.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1652.2,1652.37 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1656.99,1658.14 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1659.16,1660.35 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1661.15,1662.46 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1663.18,1664.49 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1665.15,1666.46 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1667.18,1668.49 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1669.14,1670.45 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1671.15,1672.34 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1676.2,1676.14 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1677.35,1678.52 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1679.26,1680.37 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1681.20,1682.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1683.20,1684.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1685.16,1686.35 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1687.29,1688.40 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1689.33,1690.50 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1691.25,1692.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1693.23,1694.41 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1696.26,1697.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1698.24,1699.42 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1700.22,1701.40 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1702.25,1703.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1704.27,1705.45 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1706.25,1707.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1709.30,1710.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1711.28,1712.42 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1713.17,1714.40 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1715.20,1716.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1717.20,1718.45 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1719.20,1720.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1722.20,1723.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1724.18,1725.36 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1726.20,1727.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1728.18,1729.36 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1730.21,1731.39 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1732.21,1733.39 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1734.26,1735.44 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1736.25,1737.34 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1738.26,1739.44 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1740.24,1741.42 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1742.26,1743.44 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1744.27,1745.45 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1746.22,1747.40 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1748.19,1749.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1750.15,1751.34 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1752.16,1753.35 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1755.21,1756.44 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1757.19,1758.42 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1759.20,1760.44 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1761.22,1762.45 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1763.22,1764.40 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1765.23,1766.41 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1767.20,1768.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1769.32,1770.49 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1771.19,1772.37 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1773.19,1774.37 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1775.33,1776.50 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1777.35,1778.52 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1779.24,1780.42 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1781.32,1782.49 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1783.28,1784.46 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1785.21,1786.39 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1787.34,1788.51 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1789.25,1790.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1791.29,1792.46 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1793.26,1794.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1795.27,1796.44 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1798.25,1799.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1800.23,1801.41 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1802.27,1803.45 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1804.26,1805.44 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1806.29,1807.47 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1809.29,1810.46 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1811.27,1812.44 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1813.30,1814.47 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1815.38,1816.54 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1817.36,1818.52 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1820.24,1821.42 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1822.27,1823.45 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1824.22,1825.40 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1826.32,1827.49 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1828.32,1829.49 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1830.31,1831.48 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1832.35,1833.52 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1834.36,1835.53 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1836.36,1837.53 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1838.38,1839.54 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1840.34,1841.51 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1843.22,1844.40 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1845.21,1846.39 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1847.24,1848.42 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1850.25,1851.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1852.25,1853.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1859.2,1859.14 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1860.22,1863.131 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1866.51,1867.123 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1868.10,1869.50 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1874.47,1876.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1876.16,1879.3 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1880.2,1880.35 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1884.72,1890.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1896.105,1898.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1898.16,1900.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1902.2,1903.17 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1903.17,1905.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1907.2,1908.17 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1908.17,1910.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1912.2,1918.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1918.16,1920.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1921.2,1921.25 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1927.76,1933.15 3 0 +github.com/thebtf/engram/internal/mcp/server.go:1933.15,1936.17 3 0 +github.com/thebtf/engram/internal/mcp/server.go:1936.17,1938.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1939.3,1939.26 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1943.2,1950.36 3 0 +github.com/thebtf/engram/internal/mcp/server.go:1950.36,1952.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1952.8,1955.29 3 0 +github.com/thebtf/engram/internal/mcp/server.go:1955.29,1958.4 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1959.3,1962.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1966.2,1966.20 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1966.20,1977.20 6 0 +github.com/thebtf/engram/internal/mcp/server.go:1977.20,1979.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1980.3,1980.20 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1980.20,1982.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1985.3,1985.37 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1985.37,1987.30 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1987.30,1988.16 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1988.16,1990.6 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1990.11,1992.6 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1994.4,1995.56 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1995.56,1997.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1998.4,2003.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2008.2,2008.29 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2008.29,2009.63 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2009.63,2011.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2011.9,2013.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2021.2,2021.29 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2021.29,2029.38 3 0 +github.com/thebtf/engram/internal/mcp/server.go:2029.38,2031.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2031.9,2033.31 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2033.31,2035.30 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2035.30,2037.6 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2039.4,2042.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2046.2,2047.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2047.16,2049.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2050.2,2050.25 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2055.57,2056.33 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2056.33,2058.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2059.2,2060.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2060.16,2062.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2063.2,2064.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2064.16,2066.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2067.2,2067.23 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2071.79,2105.15 6 0 +github.com/thebtf/engram/internal/mcp/server.go:2105.15,2107.17 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2107.17,2111.4 3 0 +github.com/thebtf/engram/internal/mcp/server.go:2111.9,2112.17 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2112.17,2114.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2115.4,2117.26 3 0 +github.com/thebtf/engram/internal/mcp/server.go:2117.26,2119.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2119.10,2121.29 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2121.29,2123.6 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2125.4,2129.25 5 0 +github.com/thebtf/engram/internal/mcp/server.go:2130.19,2130.19 0 0 +github.com/thebtf/engram/internal/mcp/server.go:2132.20,2134.106 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2135.12,2137.103 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2140.8,2143.3 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2144.2,2150.49 3 0 +github.com/thebtf/engram/internal/mcp/server.go:2150.49,2152.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2152.8,2154.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2155.2,2168.27 4 0 +github.com/thebtf/engram/internal/mcp/server.go:2168.27,2170.17 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2170.17,2173.4 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2173.9,2175.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2177.2,2182.40 4 0 +github.com/thebtf/engram/internal/mcp/server.go:2182.40,2183.21 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2184.20,2185.20 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2186.19,2187.19 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2191.2,2191.24 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2191.24,2193.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2193.8,2193.30 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2193.30,2195.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2198.2,2198.28 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2198.28,2200.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2203.2,2203.29 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2203.29,2205.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2207.2,2208.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2208.16,2210.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2211.2,2211.28 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2216.103,2218.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2218.16,2220.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2222.2,2223.15 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2223.15,2225.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2227.2,2239.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2239.16,2241.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2242.2,2242.25 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2246.93,2248.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2251.91,2253.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:18.28,29.20 4 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:29.20,33.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:35.2,44.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:68.36,69.49 1 1 +github.com/thebtf/engram/internal/mcp/tools_admin.go:69.49,74.3 4 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:75.2,75.25 1 1 +github.com/thebtf/engram/internal/mcp/tools_admin.go:80.26,82.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:84.89,86.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:86.16,88.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:89.2,90.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:90.18,92.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:94.2,94.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:95.15,96.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:97.26,98.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:99.25,100.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:101.23,105.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:105.22,107.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:108.3,108.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:109.10,110.114 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:120.92,126.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:126.26,128.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:130.2,131.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:131.19,133.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:134.2,135.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:135.19,137.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:138.2,138.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:138.24,140.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:142.2,142.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:142.25,144.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:146.2,147.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:147.16,149.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:151.2,151.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:27.40,30.2 2 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:32.30,46.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:48.99,49.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:49.34,51.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:52.2,52.69 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:52.69,54.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:56.2,57.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:57.16,59.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:60.2,61.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:61.21,63.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:64.2,67.26 3 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:67.26,69.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:70.2,71.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:71.25,73.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:75.2,77.44 3 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:77.44,79.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:80.2,80.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:80.33,82.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:83.2,83.81 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:86.52,87.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:87.16,89.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:90.2,90.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:90.15,92.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:93.2,93.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:96.73,97.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:97.21,99.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:100.2,101.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:101.29,110.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:111.2,111.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:114.34,116.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:31.98,32.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:32.52,34.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:35.2,35.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:35.26,37.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:39.2,40.49 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:40.49,42.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:43.2,43.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:43.21,45.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:46.2,46.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:46.21,48.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:49.2,49.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:49.18,51.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:52.2,52.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:52.18,54.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:56.2,56.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:56.38,58.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:60.2,61.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:61.16,63.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:68.2,70.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:70.26,77.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:79.2,81.36 3 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:81.36,84.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:86.2,89.28 3 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:89.28,90.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:90.39,91.9 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:93.3,97.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:100.2,104.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:107.60,113.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:115.101,116.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:116.38,118.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:120.2,122.21 3 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:122.21,123.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:123.26,125.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:126.3,126.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:126.23,128.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:129.8,130.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:130.26,132.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:133.3,133.68 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:133.68,135.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:137.2,140.20 3 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:141.17,142.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:143.67,143.67 0 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:144.10,145.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:148.2,162.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:162.16,164.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:165.2,165.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:165.19,173.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:174.2,174.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:174.30,176.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:177.2,177.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:177.31,179.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:181.2,182.36 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:182.36,196.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:198.2,199.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:199.19,201.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:202.2,203.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:203.18,205.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:206.2,207.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:207.21,209.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:210.2,211.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:211.25,213.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:214.2,225.21 3 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:225.21,227.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:228.2,228.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:228.25,230.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:231.2,231.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:231.18,233.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:235.2,244.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:244.21,246.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:247.2,247.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:247.25,249.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:250.2,250.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:250.18,252.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:253.2,253.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:253.24,255.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:256.2,256.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:259.50,261.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:261.22,263.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:264.2,264.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:270.90,272.42 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:272.42,276.3 3 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:277.2,281.27 3 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:281.27,282.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:282.45,284.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:286.2,286.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:25.28,88.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:95.95,96.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:96.22,98.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:99.2,100.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:100.32,102.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:104.2,105.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:105.16,107.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:109.2,114.35 3 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:114.35,121.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:123.2,123.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:123.25,125.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:127.2,134.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:134.16,136.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:138.2,146.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:154.94,155.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:155.22,157.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:158.2,159.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:159.32,161.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:163.2,164.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:164.16,166.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:168.2,172.35 3 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:172.35,179.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:181.2,181.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:181.25,183.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:185.2,192.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:192.16,194.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:196.2,203.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:211.97,212.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:212.22,214.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:215.2,216.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:216.32,218.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:220.2,221.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:221.16,223.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:225.2,229.35 3 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:229.35,236.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:238.2,238.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:238.25,240.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:242.2,249.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:249.16,251.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:253.2,260.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:31.80,32.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:32.14,34.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:35.2,48.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:51.136,53.51 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:53.51,55.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:56.2,56.83 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:59.94,60.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:60.21,62.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:63.2,63.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:68.30,162.2 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:165.98,166.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:166.49,168.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:169.2,170.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:170.16,172.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:173.2,174.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:174.19,176.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:177.2,179.17 3 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:179.17,181.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:183.2,184.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:184.16,186.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:188.2,189.31 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:189.31,190.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:190.15,191.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:193.3,193.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:196.2,201.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:201.16,203.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:204.2,204.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:208.96,209.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:209.49,211.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:212.2,213.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:213.16,215.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:216.2,217.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:217.13,219.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:221.2,222.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:222.16,224.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:225.2,225.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:225.22,227.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:229.2,230.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:230.16,232.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:233.2,233.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:239.100,240.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:240.22,242.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:243.2,244.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:244.16,246.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:247.2,248.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:248.13,250.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:255.2,256.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:256.12,263.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:263.30,264.77 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:264.77,269.5 4 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:271.3,272.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:272.21,274.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:275.3,275.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:279.2,279.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:279.29,281.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:284.2,285.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:285.16,287.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:288.2,288.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:288.22,290.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:291.2,291.55 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:291.55,293.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:294.2,294.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:294.74,296.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:297.2,298.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:298.16,300.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:306.2,307.41 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:307.41,309.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:310.2,324.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:324.16,325.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:325.50,327.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:328.3,328.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:330.2,330.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:330.38,332.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:334.2,341.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:341.16,343.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:344.2,344.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:348.99,349.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:349.49,351.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:352.2,353.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:353.16,355.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:356.2,357.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:357.13,359.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:360.2,362.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:362.16,364.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:365.2,365.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:365.22,367.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:368.2,368.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:368.74,370.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:371.2,372.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:372.16,374.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:375.2,375.85 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:375.85,377.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:379.2,380.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:380.16,381.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:381.50,383.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:384.3,384.60 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:386.2,386.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:386.20,388.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:390.2,395.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:395.16,397.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:398.2,398.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:402.102,403.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:403.49,405.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:406.2,407.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:407.16,409.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:410.2,411.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:411.13,413.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:414.2,415.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:415.16,417.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:418.2,418.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:418.22,420.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:421.2,421.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:421.74,423.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:424.2,425.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:425.16,427.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:428.2,428.88 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:428.88,430.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:432.2,433.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:433.16,434.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:434.50,436.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:437.3,437.63 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:439.2,439.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:439.20,441.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:443.2,448.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:448.16,450.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:451.2,451.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:34.30,36.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:42.61,44.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:48.32,75.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:79.32,94.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:100.98,101.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:101.25,103.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:104.2,104.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:104.29,106.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:108.2,113.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:113.17,114.55 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:114.55,116.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:118.2,118.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:118.24,120.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:121.2,121.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:121.23,123.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:124.2,124.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:124.23,126.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:134.2,135.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:135.21,137.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:142.2,147.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:147.16,149.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:154.2,165.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:165.25,175.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:177.2,183.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:183.16,185.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:186.2,186.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:194.98,195.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:195.25,197.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:198.2,198.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:198.29,200.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:202.2,205.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:205.17,207.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:208.2,209.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:209.21,211.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:213.2,214.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:214.16,216.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:217.2,218.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:218.16,220.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:221.2,222.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:222.16,224.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:226.2,231.11 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:231.11,233.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:235.2,236.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:236.16,238.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:239.2,239.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:21.52,22.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:22.24,25.28 3 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:25.28,27.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:29.2,29.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:35.72,37.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:37.15,39.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:41.2,42.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:42.16,44.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:45.2,45.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:49.99,51.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:51.16,53.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:55.2,56.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:56.16,58.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:60.2,72.23 7 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:72.23,74.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:75.2,75.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:75.24,77.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:78.2,78.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:78.24,80.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:81.2,81.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:82.27,82.27 0 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:84.10,85.93 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:87.2,87.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:87.30,89.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:90.2,90.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:90.26,92.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:94.2,95.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:95.16,97.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:99.2,100.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:100.16,102.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:104.2,112.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:112.16,114.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:116.2,123.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:123.16,125.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:126.2,126.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:130.97,132.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:132.16,134.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:136.2,137.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:137.16,139.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:141.2,147.23 4 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:147.23,149.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:150.2,150.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:150.26,152.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:154.2,155.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:155.16,157.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:159.2,160.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:160.16,161.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:161.47,163.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:164.3,164.51 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:167.2,167.97 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:167.97,172.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:174.2,175.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:175.16,177.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:179.2,185.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:185.16,187.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:188.2,188.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:192.99,194.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:194.16,196.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:198.2,199.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:199.16,201.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:203.2,207.26 3 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:207.26,209.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:211.2,212.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:212.16,214.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:216.2,223.26 3 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:223.26,229.28 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:229.28,231.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:232.3,232.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:235.2,236.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:236.16,238.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:239.2,239.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:243.100,245.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:245.16,247.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:249.2,250.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:250.16,252.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:254.2,262.23 5 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:262.23,264.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:265.2,265.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:265.24,267.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:268.2,268.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:269.27,269.27 0 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:271.10,272.93 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:274.2,274.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:274.30,276.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:277.2,277.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:277.26,279.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:281.2,281.71 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:281.71,282.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:282.47,284.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:285.3,285.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:288.2,293.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:293.16,295.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:296.2,296.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:302.92,309.19 5 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:309.19,310.53 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:310.53,313.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:316.2,317.51 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:317.51,318.66 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:318.66,320.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:323.2,331.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:331.16,333.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:334.2,334.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:338.46,342.32 4 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:342.32,343.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:343.20,346.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:348.2,350.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:350.26,352.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:352.27,353.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:353.13,355.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:356.4,356.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:358.3,358.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:360.2,360.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:16.45,18.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:20.35,36.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:38.84,39.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:39.40,41.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:42.2,42.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:42.50,44.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:45.2,45.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:48.101,50.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:50.16,52.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:53.2,54.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:54.16,56.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:57.2,58.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:58.19,60.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:61.2,62.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:62.21,64.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:65.2,66.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:66.16,68.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:69.2,69.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:72.102,74.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:74.16,76.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:77.2,82.8 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:10.100,12.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:12.16,14.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:16.2,17.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:17.18,19.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:21.2,21.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:22.16,23.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:24.14,25.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:26.14,27.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:28.17,29.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:30.17,31.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:32.21,33.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:34.19,35.42 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:36.17,37.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:38.16,39.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:40.16,41.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:42.21,43.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:44.10,45.167 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:15.77,16.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:16.33,18.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:20.2,21.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:21.27,23.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:25.2,26.28 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:26.28,29.17 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:29.17,31.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:34.2,41.32 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:41.32,46.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:46.20,48.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:49.3,49.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:52.2,53.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:53.16,55.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:57.2,57.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:61.97,62.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:62.28,64.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:66.2,67.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:67.16,69.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:71.2,75.29 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:75.29,77.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:79.2,80.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:80.16,82.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:84.2,84.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:84.20,86.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:88.2,97.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:97.25,103.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:103.20,105.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:106.3,106.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:106.19,108.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:109.3,109.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:112.2,113.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:113.16,115.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:117.2,117.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:121.95,122.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:122.28,124.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:126.2,127.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:127.16,129.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:131.2,137.50 4 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:137.50,139.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:141.2,142.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:142.16,144.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:145.2,145.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:145.16,147.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:149.2,149.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:149.21,151.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:153.2,154.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:154.16,156.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:157.2,157.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:157.20,159.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:161.2,161.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:165.98,166.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:166.28,168.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:170.2,171.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:171.16,173.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:175.2,181.50 4 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:181.50,183.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:185.2,185.96 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:185.96,187.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:189.2,189.88 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:197.98,198.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:198.28,200.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:202.2,203.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:203.16,205.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:207.2,217.74 6 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:217.74,219.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:222.2,223.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:223.16,225.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:227.2,229.156 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:235.98,237.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:237.16,239.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:241.2,247.24 4 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:247.24,249.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:252.2,253.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:253.29,255.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:256.2,256.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:15.93,16.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:16.37,18.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:20.2,21.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:21.16,23.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:25.2,32.16 7 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:32.16,34.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:35.2,35.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:35.19,37.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:38.2,38.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:38.19,40.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:42.2,43.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:43.16,45.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:47.2,54.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:54.16,56.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:57.2,57.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:61.91,62.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:62.37,64.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:66.2,67.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:67.16,69.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:71.2,73.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:73.16,75.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:76.2,76.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:76.19,78.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:80.2,81.43 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:81.43,83.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:83.19,85.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:86.3,86.79 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:87.8,89.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:90.2,90.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:90.16,91.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:91.45,93.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:94.3,94.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:97.2,110.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:110.16,112.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:113.2,113.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:117.93,119.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:122.91,123.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:123.37,125.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:127.2,128.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:128.16,130.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:132.2,133.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:133.19,135.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:136.2,141.16 5 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:141.16,143.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:145.2,155.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:155.25,165.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:167.2,168.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:168.16,170.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:171.2,171.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:175.94,176.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:176.37,178.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:180.2,181.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:181.16,183.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:185.2,187.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:187.16,189.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:190.2,190.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:190.19,192.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:193.2,196.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:196.16,198.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:200.2,208.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:208.25,216.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:218.2,225.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:225.16,227.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:228.2,228.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:232.94,233.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:233.37,235.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:237.2,238.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:238.16,240.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:242.2,243.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:243.21,245.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:246.2,248.19 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:248.19,250.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:252.2,253.46 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:253.46,255.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:255.13,257.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:259.2,259.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:259.44,261.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:261.13,263.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:266.2,267.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:267.16,269.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:271.2,278.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:278.16,280.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:281.2,281.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:19.69,21.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:23.38,38.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:40.51,63.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:65.53,80.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:82.46,85.32 3 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:85.32,87.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:88.2,88.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:91.105,93.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:93.16,95.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:96.2,97.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:97.16,99.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:100.2,100.70 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:103.107,105.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:105.16,107.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:108.2,109.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:109.16,111.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:112.2,112.72 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:115.101,117.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:117.16,119.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:120.2,121.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:121.17,123.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:124.2,139.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:142.109,144.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:144.16,146.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:147.2,154.8 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:157.100,159.28 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:159.28,161.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:161.18,163.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:164.3,164.62 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:166.2,167.72 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:167.72,169.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:170.2,170.53 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:170.53,172.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:173.2,174.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:174.26,176.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:177.2,177.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:180.73,182.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:182.16,184.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:185.2,185.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:12.104,14.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:14.16,16.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:18.2,19.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:19.18,21.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:23.2,23.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:24.14,25.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:26.18,27.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:28.17,29.46 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:30.10,31.96 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:36.101,37.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:37.27,39.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:41.2,42.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:42.16,44.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:46.2,47.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:47.21,49.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:50.2,51.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:51.19,53.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:54.2,54.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:55.52,55.52 0 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:56.10,57.101 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:59.2,61.93 2 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:61.93,64.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:66.2,70.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:27.31,94.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:98.97,100.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:100.26,102.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:103.2,103.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:103.28,105.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:107.2,108.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:108.16,110.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:112.2,115.15 4 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:115.15,117.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:118.2,118.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:118.17,120.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:122.2,123.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:123.16,125.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:127.2,140.29 3 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:140.29,151.31 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:151.31,154.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:155.3,155.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:158.2,162.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:167.100,169.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:169.26,171.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:172.2,172.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:172.28,174.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:175.2,175.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:175.26,177.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:179.2,180.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:180.16,182.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:184.2,185.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:185.22,187.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:189.2,190.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:190.20,191.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:191.54,199.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:200.3,200.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:200.61,202.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:203.3,203.58 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:206.2,211.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:215.95,217.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:217.32,219.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:220.2,220.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:220.28,222.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:224.2,225.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:225.16,227.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:229.2,230.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:230.22,232.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:234.2,234.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:234.61,236.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:239.2,239.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:239.25,246.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:248.2,252.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:258.104,260.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:260.26,262.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:267.2,271.20 3 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:271.20,275.3 3 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:275.8,279.3 3 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:280.2,280.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:284.60,285.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:285.30,287.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:288.2,288.42 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:288.42,290.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:291.2,291.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:64.89,65.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:65.25,67.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:69.2,70.49 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:70.49,72.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:74.2,74.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:75.18,76.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:77.21,78.35 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:79.19,80.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:81.18,82.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:83.19,84.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:85.18,86.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:87.18,91.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:91.23,93.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:94.3,94.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:95.10,96.62 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:100.81,103.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:103.19,105.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:106.2,107.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:107.19,109.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:112.2,112.46 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:112.46,114.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:115.2,115.46 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:115.46,117.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:122.2,122.66 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:122.66,124.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:127.2,127.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:127.25,128.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:128.22,130.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:131.8,132.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:132.26,134.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:138.2,138.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:138.25,139.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:139.22,141.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:142.8,143.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:143.26,145.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:148.2,148.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:148.22,150.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:151.2,151.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:151.38,153.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:154.2,154.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:154.19,156.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:159.2,161.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:161.25,164.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:165.2,165.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:165.25,168.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:169.2,171.23 3 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:171.23,174.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:175.2,175.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:175.23,178.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:180.2,193.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:193.16,195.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:198.2,199.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:199.29,201.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:202.2,202.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:202.29,204.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:205.2,213.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:216.121,217.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:217.28,218.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:218.26,220.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:221.3,222.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:222.17,223.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:223.49,225.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:226.4,226.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:228.3,228.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:230.2,230.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:230.26,232.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:233.2,234.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:234.16,235.48 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:235.48,237.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:238.3,238.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:240.2,240.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:243.101,248.36 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:248.36,250.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:250.8,252.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:253.2,253.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:253.16,255.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:256.2,256.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:256.32,257.128 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:257.128,262.72 5 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:262.72,264.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:267.2,267.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:276.81,277.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:277.25,279.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:280.2,280.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:280.22,282.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:283.2,283.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:283.39,285.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:286.2,286.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:286.25,288.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:289.2,289.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:289.21,291.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:292.2,293.14 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:293.14,295.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:296.2,305.16 5 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:305.16,307.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:308.2,314.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:317.84,318.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:318.19,320.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:321.2,323.63 3 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:323.63,325.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:326.2,329.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:332.82,333.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:333.38,335.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:336.2,337.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:338.18,339.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:340.18,341.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:345.2,345.59 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:345.59,347.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:349.2,351.21 3 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:351.21,353.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:353.8,356.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:357.2,357.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:357.16,359.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:366.2,367.41 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:367.41,369.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:371.2,378.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:397.115,398.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:398.15,400.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:403.2,404.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:404.26,405.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:405.28,407.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:408.3,408.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:408.28,410.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:412.2,412.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:412.23,415.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:420.2,426.12 4 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:426.12,427.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:427.27,429.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:429.18,431.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:433.4,433.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:433.33,435.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:440.2,441.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:441.26,442.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:442.28,443.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:443.49,445.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:448.3,448.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:448.28,449.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:449.49,451.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:454.2,454.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:457.82,458.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:458.21,460.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:461.2,462.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:462.16,464.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:465.2,465.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:465.36,467.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:468.2,469.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:469.16,471.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:472.2,477.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:480.82,481.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:481.40,483.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:484.2,485.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:485.19,487.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:488.2,489.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:489.16,491.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:492.2,499.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:502.82,503.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:503.21,505.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:506.2,507.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:507.16,509.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:510.2,514.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:23.179,24.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:24.22,26.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:28.2,32.22 4 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:32.22,34.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:35.2,36.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:36.22,38.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:40.2,41.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:41.26,43.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:44.2,44.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:44.26,46.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:47.2,47.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:47.30,49.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:50.2,50.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:50.30,52.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:54.2,55.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:55.16,57.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:58.2,58.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:58.13,60.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:61.2,62.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:62.16,64.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:65.2,65.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:65.13,67.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:69.2,70.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:70.16,72.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:73.2,73.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:73.15,75.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:77.2,77.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:80.172,81.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:81.28,82.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:82.23,84.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:85.3,85.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:85.18,87.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:88.3,89.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:89.17,90.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:90.49,92.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:93.4,93.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:95.3,95.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:98.2,98.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:98.24,100.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:101.2,101.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:101.19,103.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:104.2,105.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:105.16,106.48 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:106.48,108.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:109.3,109.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:111.2,111.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:114.119,116.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:116.22,118.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:119.2,120.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:120.22,122.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:124.2,126.26 3 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:126.26,127.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:127.36,129.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:130.3,130.105 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:131.8,132.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:132.32,134.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:135.3,135.103 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:137.2,137.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:137.16,139.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:141.2,141.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:141.32,143.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:143.27,145.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:146.3,147.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:147.27,149.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:150.3,150.106 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:150.106,151.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:153.3,153.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:153.27,154.114 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:154.114,155.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:157.9,157.104 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:157.104,158.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:160.3,160.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:160.27,161.114 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:161.114,162.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:164.9,164.104 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:164.104,165.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:167.3,167.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:169.2,169.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:25.90,26.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:26.26,28.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:30.2,31.49 2 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:31.49,33.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:35.2,35.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:36.16,37.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:38.10,39.63 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:43.84,44.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:44.21,46.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:47.2,47.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:47.25,49.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:50.2,50.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:50.21,52.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:53.2,53.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:53.21,55.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:57.2,58.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:59.18,60.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:61.15,62.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:63.24,64.42 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:65.10,66.108 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:69.2,70.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:70.22,72.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:73.2,74.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:74.29,76.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:78.2,78.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:78.14,85.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:87.2,89.37 3 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:89.37,92.21 3 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:92.21,94.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:97.2,100.31 4 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:100.31,102.38 2 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:102.38,104.37 2 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:104.37,106.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:109.3,122.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:122.26,124.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:125.3,125.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:125.19,127.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:131.3,133.39 3 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:133.39,135.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:135.9,137.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:138.3,138.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:138.17,140.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:142.3,142.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:142.34,144.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:145.3,145.11 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:148.2,155.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:20.99,22.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:22.16,24.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:26.2,31.44 3 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:31.44,32.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:32.33,33.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:33.43,38.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:43.2,43.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:43.49,45.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:46.2,46.48 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:46.48,48.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:50.2,52.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:52.27,55.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:55.8,60.24 3 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:60.24,62.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:64.3,64.57 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:64.57,66.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:68.3,68.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:71.2,71.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:71.16,73.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:75.2,76.23 2 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:76.23,78.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:80.2,80.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:19.40,89.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:109.71,111.9 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:111.9,113.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:115.2,116.38 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:116.38,117.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:118.13,119.41 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:119.41,121.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:122.17,123.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:123.43,125.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:126.11,127.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:127.40,129.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:133.2,133.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:133.22,138.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:139.2,139.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:143.90,144.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:144.25,146.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:148.2,149.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:149.16,151.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:153.2,157.61 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:157.61,159.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:161.2,161.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:162.16,163.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:164.14,165.35 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:166.13,167.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:168.16,169.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:170.17,171.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:172.16,173.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:174.15,175.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:176.10,177.120 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:189.85,191.39 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:191.39,192.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:192.44,194.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:196.2,196.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:196.15,198.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:199.2,199.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:199.15,201.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:202.2,202.46 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:205.91,207.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:207.17,209.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:211.2,215.25 5 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:215.25,217.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:218.2,224.25 4 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:224.25,226.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:227.2,227.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:227.25,229.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:231.2,243.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:243.16,245.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:247.2,247.139 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:250.89,252.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:252.19,254.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:255.2,256.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:256.25,258.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:259.2,264.52 5 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:264.52,266.14 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:266.14,268.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:271.2,277.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:277.25,280.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:282.2,283.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:283.16,285.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:287.2,287.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:287.22,288.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:288.20,290.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:291.3,291.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:294.2,297.31 3 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:297.31,300.29 3 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:300.29,302.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:303.3,305.69 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:308.2,308.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:311.88,313.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:313.13,315.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:317.2,318.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:318.16,320.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:322.2,328.22 6 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:328.22,331.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:333.2,333.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:333.23,335.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:335.30,338.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:341.2,341.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:344.91,346.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:346.13,348.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:350.2,353.18 3 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:353.18,354.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:354.27,356.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:357.3,357.73 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:357.73,359.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:362.2,362.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:362.19,370.17 4 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:370.17,372.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:375.2,376.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:376.26,378.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:379.2,379.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:382.92,384.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:384.13,386.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:388.2,389.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:389.16,391.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:393.2,401.16 4 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:401.16,403.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:405.2,405.88 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:408.91,410.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:410.13,412.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:414.2,418.95 4 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:418.95,420.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:422.2,422.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:425.90,427.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:427.13,429.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:431.2,433.167 3 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:433.167,435.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:437.2,437.89 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:437.89,439.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:441.2,441.108 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:22.93,24.49 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:24.49,26.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:28.2,28.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:29.14,30.42 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:31.17,32.59 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:33.16,34.58 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:35.24,36.75 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:37.27,38.71 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:39.22,40.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:41.23,42.63 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:43.10,44.66 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:48.79,49.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:49.13,51.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:52.2,53.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:53.16,55.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:57.2,58.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:58.32,60.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:61.2,84.28 3 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:87.101,88.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:88.13,90.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:91.2,91.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:91.38,93.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:94.2,95.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:95.16,97.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:98.2,98.53 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:98.53,100.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:102.2,104.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:104.17,106.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:107.2,107.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:107.29,109.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:110.2,115.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:118.100,119.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:119.13,121.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:122.2,122.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:122.38,124.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:125.2,126.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:126.16,128.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:129.2,129.53 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:129.53,131.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:133.2,135.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:135.17,137.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:138.2,138.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:138.29,140.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:141.2,146.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:149.123,150.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:150.13,152.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:153.2,153.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:153.18,155.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:156.2,156.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:156.38,158.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:159.2,161.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:161.17,163.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:164.2,169.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:172.113,173.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:173.13,175.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:176.2,176.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:176.50,178.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:179.2,181.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:181.17,183.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:184.2,188.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:191.57,195.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:197.102,198.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:198.13,200.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:201.2,201.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:201.20,203.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:204.2,205.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:205.16,207.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:209.2,210.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:210.32,212.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:214.2,217.56 3 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:217.56,223.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:225.2,230.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:233.41,235.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:235.16,237.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:238.2,238.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:35.27,37.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:42.41,43.11 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:44.48,45.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:46.10,47.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:54.57,55.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:56.17,57.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:58.16,59.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:60.10,61.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:82.58,83.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:84.28,85.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:86.26,87.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:88.10,89.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:93.114,95.68 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:95.68,97.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:99.2,101.42 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:101.42,102.71 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:102.71,105.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:107.2,117.23 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:117.23,119.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:121.2,124.22 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:124.22,125.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:125.31,127.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:128.3,128.35 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:129.8,129.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:129.37,131.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:132.2,132.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:135.74,136.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:136.30,138.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:139.2,139.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:139.34,141.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:142.2,142.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:142.31,144.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:145.2,145.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:145.22,147.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:161.169,162.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:162.17,164.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:165.2,166.51 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:166.51,168.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:169.2,169.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:172.92,174.42 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:174.42,177.63 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:177.63,179.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:179.9,181.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:183.2,183.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:186.65,190.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:192.115,194.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:194.26,196.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:196.8,196.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:196.31,198.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:199.2,199.117 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:202.122,206.31 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:206.31,207.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:207.45,209.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:211.2,211.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:214.72,216.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:218.117,219.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:219.16,221.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:222.2,223.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:223.20,225.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:225.17,227.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:228.3,228.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:228.27,229.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:229.50,231.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:231.30,232.11 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:236.3,236.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:239.2,241.60 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:241.60,243.61 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:243.61,245.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:246.3,246.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:246.24,247.9 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:249.3,250.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:250.17,252.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:253.3,253.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:253.22,254.9 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:256.3,256.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:256.29,257.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:257.50,259.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:259.30,260.11 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:264.3,265.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:265.32,266.9 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:269.2,269.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:272.51,273.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:273.16,275.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:276.2,277.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:277.18,279.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:280.2,280.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:280.19,282.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:283.2,283.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:286.97,288.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:288.30,290.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:291.2,291.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:291.49,293.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:294.2,294.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:297.108,299.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:301.108,303.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:305.102,307.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:319.55,320.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:320.31,322.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:323.2,323.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:323.26,325.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:326.2,326.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:329.71,330.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:343.26,344.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:345.10,346.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:354.95,362.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:362.16,364.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:366.2,397.39 14 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:397.39,399.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:399.27,401.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:402.8,404.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:405.2,407.46 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:407.46,410.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:411.2,411.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:411.44,413.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:413.12,415.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:417.2,417.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:417.26,419.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:420.2,420.84 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:420.84,422.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:427.2,427.65 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:427.65,429.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:431.2,433.20 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:433.20,435.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:436.2,437.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:437.20,439.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:440.2,440.56 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:440.56,442.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:443.2,443.56 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:443.56,448.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:450.2,450.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:450.45,453.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:459.2,459.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:459.31,461.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:461.22,462.62 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:462.62,465.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:466.4,466.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:468.3,468.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:471.2,472.115 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:472.115,474.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:491.2,491.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:491.19,493.23 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:493.23,495.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:496.3,508.21 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:508.21,510.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:511.3,511.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:522.2,522.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:522.43,535.34 5 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:535.34,556.30 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:556.30,558.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:559.4,559.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:559.44,561.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:562.4,562.106 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:562.106,564.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:575.4,575.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:575.74,577.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:578.4,579.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:579.18,581.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:583.4,584.28 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:584.28,586.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:588.4,588.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:588.31,599.57 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:599.57,601.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:601.17,604.7 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:606.5,607.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:607.21,609.6 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:615.5,615.138 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:615.138,617.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:617.27,619.7 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:620.6,620.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:622.5,623.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:623.26,625.6 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:626.5,626.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:630.4,631.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:631.20,633.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:634.4,634.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:634.22,637.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:637.26,639.6 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:640.5,640.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:645.4,660.77 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:660.77,662.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:663.4,664.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:664.25,666.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:667.4,667.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:673.2,673.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:673.26,675.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:677.2,678.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:678.25,680.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:681.2,681.97 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:681.97,683.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:690.2,691.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:691.21,693.33 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:693.33,695.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:696.3,696.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:696.33,698.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:699.3,699.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:699.49,704.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:721.3,721.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:721.54,722.84 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:722.84,724.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:728.2,728.99 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:728.99,730.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:732.2,733.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:733.22,735.10 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:736.109,737.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:738.100,739.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:740.114,741.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:742.107,743.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:744.11,745.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:748.2,749.43 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:749.43,751.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:753.2,755.34 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:755.34,756.48 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:756.48,757.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:757.19,760.5 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:764.2,764.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:764.31,767.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:768.2,768.35 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:768.35,771.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:772.2,772.76 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:772.76,776.3 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:778.2,780.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:780.16,782.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:782.20,785.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:788.2,788.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:788.25,798.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:798.18,800.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:800.9,800.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:800.30,807.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:808.3,808.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:808.36,810.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:811.3,812.50 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:812.50,815.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:816.3,822.17 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:822.17,824.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:826.3,836.17 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:836.17,838.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:839.3,839.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:842.2,843.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:843.30,844.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:844.52,846.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:846.9,848.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:851.2,869.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:869.21,871.43 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:871.43,873.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:874.3,874.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:874.29,876.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:886.3,886.76 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:886.76,888.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:890.2,890.105 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:890.105,892.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:893.2,894.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:894.16,896.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:901.2,904.40 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:904.40,905.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:905.15,906.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:909.3,910.63 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:910.63,912.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:912.9,914.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:916.3,916.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:916.43,918.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:919.3,920.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:920.20,922.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:925.3,925.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:925.23,928.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:929.3,931.33 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:931.33,934.39 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:934.39,936.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:939.2,948.42 5 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:948.42,950.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:950.21,952.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:952.9,955.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:959.2,959.53 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:959.53,960.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:960.54,961.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:961.33,963.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:964.9,972.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:973.3,973.60 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:973.60,974.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:974.40,976.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:978.3,978.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:978.61,979.41 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:979.41,981.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:983.3,983.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:983.28,985.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:986.3,987.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:989.2,989.51 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:989.51,991.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:995.2,997.53 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:997.53,999.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:999.8,1001.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1002.2,1002.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1002.22,1004.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1008.2,1014.76 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1014.76,1016.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1021.2,1021.57 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1021.57,1026.13 5 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1026.13,1029.21 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1029.21,1032.5 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1033.4,1033.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1033.49,1035.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1036.4,1043.89 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1043.89,1046.5 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1048.4,1048.86 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1052.2,1063.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1063.21,1065.40 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1065.40,1067.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1068.3,1068.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1068.38,1070.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1072.2,1074.18 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1074.18,1081.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1082.2,1082.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1082.28,1084.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1085.2,1085.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1085.16,1087.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1088.2,1088.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1088.30,1090.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1091.2,1091.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1091.30,1093.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1098.2,1098.76 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1098.76,1100.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1101.2,1102.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1102.16,1104.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1105.2,1105.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1111.94,1113.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1113.15,1115.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1117.2,1118.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1118.16,1120.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1122.2,1123.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1123.13,1125.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1126.2,1131.16 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1131.16,1133.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1134.2,1134.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1134.19,1136.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1146.2,1146.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1146.39,1148.55 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1148.55,1150.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1152.2,1152.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1152.39,1154.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1157.2,1158.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1158.21,1163.21 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1163.21,1165.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1166.3,1167.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1167.21,1169.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1170.3,1170.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1170.52,1172.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1173.3,1173.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1173.52,1178.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1179.3,1179.41 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1179.41,1182.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1183.3,1183.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1188.2,1188.46 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1188.46,1190.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1191.2,1191.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1191.27,1193.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1195.2,1196.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1196.16,1198.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1201.2,1210.16 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1210.16,1212.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1213.2,1213.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1218.59,1220.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1220.38,1222.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1225.2,1226.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1226.29,1227.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1227.22,1229.9 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1232.2,1232.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1232.18,1234.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1237.2,1244.29 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1244.29,1245.67 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1245.67,1247.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1249.2,1249.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1249.16,1251.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1254.2,1254.11 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1258.55,1260.47 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1260.47,1262.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1263.2,1264.58 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1264.58,1266.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1267.2,1267.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1270.252,1271.108 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1271.108,1273.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1274.2,1274.55 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1274.55,1276.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1277.2,1277.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1280.184,1282.69 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1282.69,1284.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1284.32,1285.58 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1285.58,1287.10 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1290.3,1290.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1290.18,1292.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1294.2,1294.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1294.19,1297.32 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1297.32,1298.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1298.39,1300.10 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1303.3,1303.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1303.19,1305.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1307.2,1307.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1307.21,1309.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1309.32,1310.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1310.49,1312.10 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1315.3,1315.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1315.18,1317.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1319.2,1319.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1319.28,1321.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1321.17,1323.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1324.3,1324.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1324.27,1326.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1328.2,1328.76 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1328.76,1330.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1331.2,1331.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1342.96,1343.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1343.26,1345.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1347.2,1348.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1348.16,1350.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1352.2,1363.23 9 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1363.23,1364.58 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1364.58,1365.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1365.31,1367.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1367.10,1369.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1373.2,1373.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1373.17,1375.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1376.2,1376.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1376.16,1378.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1379.2,1379.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1379.16,1381.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1382.2,1382.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1382.18,1384.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1385.2,1385.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1385.19,1387.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1388.2,1388.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1388.19,1390.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1396.2,1399.18 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1399.18,1400.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1400.61,1401.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1402.50,1403.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1404.12,1405.108 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1409.2,1410.42 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1410.42,1414.3 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1415.2,1420.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1420.16,1422.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1429.2,1444.43 6 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1444.43,1446.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1449.2,1451.27 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1451.27,1453.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1458.2,1458.46 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1458.46,1460.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1461.2,1461.63 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1461.63,1463.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1465.2,1466.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1466.15,1472.29 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1472.29,1479.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1479.18,1481.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1482.4,1482.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1482.23,1483.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1485.4,1485.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1485.30,1486.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1486.24,1488.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1488.32,1489.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1493.4,1494.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1494.30,1495.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1498.8,1504.29 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1504.29,1506.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1506.18,1508.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1509.4,1509.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1509.23,1510.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1512.4,1512.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1512.30,1513.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1513.24,1515.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1515.32,1516.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1520.4,1521.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1521.30,1522.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1526.2,1526.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1526.26,1528.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1528.17,1530.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1535.2,1535.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1535.74,1536.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1536.13,1537.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1537.33,1542.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1542.26,1544.39 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1544.39,1546.7 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1548.5,1548.82 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1565.2,1565.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1565.38,1569.27 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1569.27,1571.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1572.3,1572.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1572.27,1574.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1576.3,1581.32 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1581.32,1586.4 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1588.3,1592.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1592.18,1594.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1595.3,1596.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1596.17,1598.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1599.3,1599.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1602.2,1602.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1603.15,1618.32 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1618.32,1620.33 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1620.33,1621.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1621.40,1623.11 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1626.4,1638.6 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1640.3,1641.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1641.17,1643.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1644.3,1644.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1646.18,1648.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1648.17,1650.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1651.3,1651.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1653.10,1654.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1654.25,1656.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1657.3,1659.32 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1659.32,1661.33 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1661.33,1662.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1662.40,1664.11 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1667.4,1669.26 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1669.26,1671.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1672.4,1673.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1673.25,1675.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1676.4,1676.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1678.3,1678.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1690.51,1695.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1700.73,1702.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1702.16,1704.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1705.2,1706.48 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1706.48,1710.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1711.2,1713.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1713.16,1715.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1716.2,1716.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1727.117,1731.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1731.21,1733.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1734.2,1735.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1735.16,1737.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1738.2,1739.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1739.27,1741.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1742.2,1742.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1764.19,1775.30 7 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1775.30,1777.37 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1777.37,1779.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1781.3,1781.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1781.20,1783.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1797.2,1797.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1797.39,1799.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1801.2,1811.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1811.25,1813.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1815.2,1816.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1816.29,1818.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1824.2,1824.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1824.27,1826.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1831.2,1833.22 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1833.22,1835.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1837.2,1846.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1846.16,1848.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1853.2,1855.27 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1855.27,1857.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1859.2,1876.33 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1876.33,1878.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1880.2,1881.28 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1881.28,1885.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1885.20,1888.33 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1888.33,1889.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1889.40,1891.11 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1894.4,1894.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1894.20,1895.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1900.3,1900.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1900.22,1902.33 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1902.33,1903.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1903.50,1905.11 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1908.4,1908.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1908.19,1909.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1918.3,1918.56 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1918.56,1919.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1927.3,1927.64 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1927.64,1928.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1932.3,1935.32 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1935.32,1936.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1936.39,1938.10 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1942.3,1956.14 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1956.14,1957.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1957.37,1959.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1961.3,1962.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1962.26,1963.9 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1975.2,1975.59 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1975.59,1986.17 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1986.17,1988.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1990.3,1991.34 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1991.34,1993.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1995.3,1996.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1996.29,1998.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1998.21,2001.34 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2001.34,2002.41 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2002.41,2004.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2007.5,2007.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2007.21,2008.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2011.4,2011.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2011.23,2013.34 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2013.34,2014.51 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2014.51,2016.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2019.5,2019.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2019.20,2020.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2023.4,2023.57 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2023.57,2024.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2027.4,2027.65 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2027.65,2028.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2030.4,2031.33 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2031.33,2032.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2032.40,2034.11 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2037.4,2051.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2051.15,2052.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2052.38,2054.6 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2056.4,2057.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2057.27,2058.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2065.2,2066.28 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2066.28,2068.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2072.2,2072.71 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2072.71,2080.30 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2080.30,2081.41 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2081.41,2087.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2089.3,2089.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2089.13,2090.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2090.31,2095.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2095.25,2097.38 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2097.38,2099.7 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2101.5,2101.81 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2112.2,2112.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2112.38,2115.27 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2115.27,2117.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2121.3,2138.30 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2138.30,2140.11 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2140.11,2141.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2143.4,2160.15 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2160.15,2161.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2161.39,2163.6 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2165.4,2165.46 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2167.3,2173.24 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2173.24,2175.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2176.3,2176.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2179.2,2179.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2180.15,2182.24 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2182.24,2184.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2185.3,2185.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2187.18,2199.30 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2199.30,2201.11 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2201.11,2202.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2204.4,2208.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2208.15,2209.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2209.39,2211.6 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2213.4,2213.35 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2215.3,2216.24 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2216.24,2218.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2219.3,2219.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2220.10,2221.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2221.22,2223.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2224.3,2226.27 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2226.27,2228.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2228.20,2230.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2231.4,2233.26 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2233.26,2235.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2236.4,2237.23 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2237.23,2239.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2240.4,2240.46 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2240.46,2244.5 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2245.4,2245.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2247.3,2247.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2252.94,2254.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2254.16,2256.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2258.2,2260.18 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2260.18,2261.59 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2261.59,2262.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2262.36,2264.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2264.10,2266.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2270.2,2270.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2270.13,2272.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2273.2,2273.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2273.50,2275.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2277.2,2277.98 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2281.98,2282.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2282.26,2284.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2286.2,2287.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2287.16,2289.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2291.2,2292.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2292.13,2294.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2297.2,2298.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2298.19,2299.51 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2299.51,2301.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2302.3,2302.55 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2304.2,2304.42 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2304.42,2306.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2308.2,2308.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2308.54,2309.48 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2309.48,2311.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2312.3,2312.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2316.2,2318.53 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:17.82,19.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:21.149,22.55 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:22.55,24.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:25.2,25.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:25.36,27.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:28.2,34.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:34.16,36.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:37.2,37.42 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:37.42,39.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:40.2,40.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:43.105,44.48 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:44.48,46.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:47.2,48.54 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:51.129,53.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:53.16,55.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:56.2,57.53 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:57.53,59.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:60.2,61.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:61.25,63.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:64.2,65.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:65.16,67.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:68.2,68.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:26.97,27.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:27.18,29.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:30.2,30.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:33.37,35.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:37.81,38.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:38.44,40.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:41.2,41.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:41.38,43.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:44.2,44.57 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:47.88,48.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:48.32,50.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:51.2,52.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:52.20,54.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:55.2,55.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:58.40,72.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:74.106,75.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:75.34,77.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:78.2,79.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:79.16,81.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:83.2,84.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:84.16,86.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:88.2,89.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:89.13,91.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:93.2,94.63 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:94.63,96.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:98.2,98.72 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:98.72,100.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:102.2,106.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:109.117,110.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:110.32,112.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:113.2,113.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:113.34,115.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:117.2,118.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:118.16,120.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:121.2,121.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:121.19,123.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:125.2,126.69 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:126.69,128.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:130.2,136.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:18.33,20.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:22.27,37.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:39.93,40.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:40.30,42.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:43.2,43.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:43.28,45.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:46.2,47.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:47.16,49.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:51.2,52.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:52.17,54.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:55.2,56.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:56.19,58.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:59.2,59.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:59.19,61.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:62.2,63.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:63.16,65.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:67.2,74.9 3 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:74.9,76.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:77.2,78.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:78.15,80.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:81.2,85.16 4 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:85.16,87.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:88.2,88.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:88.17,90.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:92.2,101.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:104.48,105.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:105.16,107.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:108.2,109.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:109.29,111.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:112.2,112.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:112.31,114.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:115.2,115.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:118.75,120.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:120.27,121.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:121.32,123.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:123.17,124.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:126.4,126.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:129.2,134.33 3 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:134.33,136.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:137.2,137.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:137.40,138.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:138.39,140.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:141.3,141.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:143.2,143.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:143.34,145.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:146.2,147.35 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:147.35,149.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:150.2,150.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:153.77,154.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:154.20,156.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:157.2,159.31 3 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:159.31,160.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:160.33,162.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:163.3,163.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:163.30,165.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:167.2,170.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:23.91,25.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:27.38,50.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:52.104,53.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:53.38,55.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:56.2,57.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:57.16,59.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:61.2,62.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:62.26,64.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:65.2,66.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:66.30,68.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:69.2,69.72 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:69.72,71.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:73.2,74.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:74.16,76.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:77.2,78.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:78.16,80.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:81.2,82.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:82.16,84.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:85.2,86.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:86.16,88.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:90.2,105.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:105.16,107.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:109.2,109.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:109.19,117.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:118.2,118.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:118.25,120.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:121.2,121.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:121.30,123.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:124.2,124.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:124.31,126.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:127.2,128.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:128.16,130.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:131.2,131.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:134.91,136.9 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:136.9,138.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:139.2,140.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:140.15,141.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:141.19,143.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:144.3,144.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:146.2,146.94 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:149.59,150.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:150.16,152.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:153.2,154.61 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:154.61,156.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:157.2,157.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:160.56,161.75 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:161.75,163.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:164.2,164.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:167.67,169.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:170.17,171.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:172.67,173.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:174.10,175.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:179.60,180.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:180.16,182.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:183.2,184.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:184.25,186.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:187.2,187.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:190.57,191.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:192.15,193.81 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:193.81,195.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:196.3,196.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:197.19,199.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:199.17,201.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:202.3,202.55 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:202.55,204.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:205.3,205.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:206.14,207.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:208.11,209.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:210.10,211.41 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:215.59,216.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:216.16,218.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:219.2,219.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:220.12,221.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:222.14,223.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:224.10,225.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:28.90,30.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:30.16,32.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:34.2,36.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:37.16,38.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:40.16,42.140 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:44.20,46.140 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:48.17,50.142 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:52.17,56.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:56.50,62.63 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:62.63,64.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:66.4,66.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:66.45,68.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:72.4,74.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:74.25,76.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:77.4,77.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:80.3,80.101 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:82.18,84.141 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:86.18,88.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:88.18,90.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:91.3,91.41 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:93.17,96.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:96.50,99.59 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:99.59,101.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:102.4,104.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:104.25,106.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:107.4,107.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:110.3,110.98 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:112.10,116.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:125.86,126.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:126.16,128.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:129.2,130.9 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:130.9,132.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:133.2,133.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:133.22,135.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:137.2,139.31 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:139.31,141.10 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:141.10,143.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:144.3,145.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:145.22,147.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:148.3,149.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:149.26,151.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:152.3,152.68 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:152.68,154.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:155.3,156.37 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:156.37,158.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:159.3,160.107 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:162.2,162.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:165.249,166.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:166.24,168.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:169.2,169.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:169.38,171.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:173.2,174.31 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:174.31,175.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:175.32,177.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:180.2,181.34 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:181.34,182.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:182.29,183.9 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:185.3,197.17 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:197.17,199.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:200.3,200.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:200.20,201.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:203.3,203.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:203.37,205.33 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:205.33,206.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:208.4,208.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:208.19,209.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:209.43,210.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:212.5,212.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:214.4,215.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:215.30,216.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:220.2,220.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:223.113,229.2 5 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:231.101,233.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:247.92,251.16 4 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:251.16,253.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:253.8,253.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:253.24,255.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:259.2,272.51 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:272.51,274.38 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:274.38,275.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:276.50,277.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:278.12,279.107 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:287.2,292.26 5 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:292.26,294.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:297.2,297.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:297.19,301.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:303.2,311.42 5 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:311.42,315.3 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:316.2,341.64 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:341.64,342.86 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:342.86,344.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:345.3,345.56 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:345.56,347.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:348.3,360.19 6 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:360.19,364.4 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:365.3,365.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:369.2,370.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:370.15,372.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:372.27,374.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:375.3,375.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:375.27,377.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:380.2,381.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:381.15,387.28 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:387.28,395.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:395.18,397.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:398.4,398.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:398.23,399.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:401.4,401.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:401.30,402.66 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:402.66,403.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:405.5,406.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:406.12,407.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:409.5,409.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:409.28,413.6 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:414.5,415.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:415.30,416.11 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:419.4,420.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:420.30,421.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:424.8,432.28 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:432.28,438.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:438.18,440.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:441.4,441.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:441.23,442.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:444.4,444.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:444.30,445.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:445.40,447.31 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:447.31,448.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:452.4,455.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:455.30,456.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:461.2,465.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:465.17,467.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:469.2,470.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:470.16,472.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:473.2,473.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:20.79,21.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:21.43,23.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:24.2,24.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:24.29,26.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:27.2,27.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:30.40,63.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:65.68,71.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:71.25,74.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:75.2,75.67 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:78.62,83.19 3 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:83.19,87.3 3 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:88.2,88.89 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:91.101,92.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:92.22,94.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:95.2,96.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:96.18,98.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:99.2,100.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:100.16,102.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:103.2,104.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:104.16,106.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:107.2,107.119 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:110.99,111.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:111.22,113.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:114.2,115.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:115.18,117.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:118.2,119.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:119.16,121.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:122.2,122.51 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:122.51,124.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:125.2,126.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:126.16,128.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:129.2,131.15 3 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:131.15,132.69 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:132.69,134.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:135.3,135.58 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:137.2,137.130 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:140.102,142.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:142.16,144.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:145.2,145.64 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:145.64,147.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:148.2,148.113 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:151.109,153.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:153.16,155.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:156.2,157.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:157.16,159.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:160.2,161.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:161.16,163.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:164.2,164.67 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:167.107,169.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:169.16,171.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:172.2,173.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:173.16,175.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:176.2,176.107 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:176.107,178.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:179.2,179.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:180.41,181.63 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:182.41,183.95 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:184.10,185.83 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:189.111,191.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:191.16,193.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:194.2,195.57 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:195.57,197.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:198.2,199.23 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:199.23,201.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:202.2,203.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:203.16,205.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:206.2,206.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:206.17,208.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:209.2,209.108 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:212.63,215.2 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:217.69,219.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:219.16,221.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:222.2,222.79 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:225.60,227.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:227.16,229.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:230.2,230.57 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:233.137,234.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:234.49,236.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:237.2,238.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:238.16,240.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:241.2,243.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:243.16,245.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:246.2,247.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:247.16,249.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:250.2,250.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:250.22,252.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:253.2,253.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:256.142,258.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:258.16,260.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:261.2,262.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:262.16,264.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:265.2,265.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:265.47,267.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:268.2,269.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:269.16,270.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:270.50,272.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:273.3,273.89 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:275.2,275.173 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:278.157,280.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:280.16,282.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:283.2,283.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:283.47,285.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:286.2,287.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:287.16,288.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:288.50,290.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:291.3,291.89 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:293.2,293.169 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:296.104,297.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:297.22,299.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:300.2,301.61 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:301.61,303.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:303.20,304.9 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:307.2,307.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:307.19,309.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:310.2,317.8 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:320.119,322.39 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:322.39,323.81 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:323.81,325.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:327.2,327.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:330.71,332.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:332.16,334.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:335.2,335.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:17.61,105.23 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:105.23,122.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:123.2,123.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:126.104,127.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:127.61,129.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:130.2,130.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:130.38,132.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:133.2,134.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:134.16,136.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:137.2,138.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:138.16,140.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:141.2,147.107 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:147.107,149.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:150.2,151.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:151.16,153.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:154.2,170.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:170.19,172.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:173.2,173.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:176.103,177.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:177.61,179.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:180.2,180.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:180.38,182.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:183.2,184.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:184.16,186.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:187.2,191.106 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:191.106,193.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:194.2,195.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:195.16,197.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:198.2,200.31 3 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:200.31,207.36 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:207.36,218.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:219.3,220.35 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:222.2,230.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:233.107,234.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:234.61,236.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:237.2,237.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:237.38,239.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:240.2,241.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:241.16,243.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:244.2,248.110 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:248.110,250.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:251.2,252.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:252.16,254.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:255.2,256.33 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:256.33,266.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:267.2,275.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:278.108,279.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:279.61,281.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:282.2,282.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:282.37,284.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:285.2,286.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:286.16,288.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:289.2,290.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:290.19,292.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:293.2,293.104 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:293.104,295.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:296.2,297.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:297.16,299.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:300.2,307.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:307.16,309.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:310.2,311.43 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:311.43,318.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:319.2,332.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:332.22,334.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:335.2,335.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:338.108,339.62 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:339.62,341.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:342.2,342.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:342.38,344.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:345.2,346.9 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:346.9,348.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:349.2,350.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:350.16,352.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:353.2,357.16 5 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:357.16,359.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:360.2,370.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:373.109,374.62 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:374.62,376.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:377.2,377.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:377.38,379.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:380.2,381.9 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:381.9,383.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:384.2,385.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:385.16,387.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:388.2,390.32 3 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:390.32,392.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:393.2,394.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:394.16,396.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:397.2,403.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:406.106,407.62 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:407.62,409.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:410.2,410.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:410.38,412.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:413.2,414.9 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:414.9,416.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:417.2,418.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:418.16,420.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:421.2,423.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:423.16,424.41 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:424.41,434.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:435.3,435.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:437.2,445.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:483.65,484.42 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:484.42,485.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:485.39,487.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:489.2,489.85 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:489.85,491.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:492.2,492.95 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:495.102,496.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:496.38,498.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:499.2,499.58 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:499.58,501.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:502.2,502.90 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:505.60,508.2 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:510.66,512.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:512.26,514.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:515.2,515.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:518.69,521.33 3 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:521.33,523.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:523.21,524.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:526.3,526.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:526.34,527.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:529.3,530.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:532.2,532.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:535.63,537.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:537.19,539.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:540.2,541.42 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:541.42,543.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:544.2,544.57 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:544.57,546.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:547.2,547.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:547.54,549.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:550.2,550.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:553.70,557.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:559.66,561.9 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:561.9,563.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:564.2,566.17 3 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:566.17,568.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:569.2,569.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:570.103,572.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:573.34,574.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:575.10,576.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:580.56,581.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:581.37,583.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:584.2,584.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:584.26,586.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:586.37,587.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:589.3,589.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:591.2,591.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:594.90,602.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:604.68,605.71 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:605.71,607.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:607.17,609.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:610.3,610.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:612.2,613.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:613.16,615.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:616.2,617.41 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:617.41,619.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:620.2,620.78 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:623.65,625.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:625.16,627.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:628.2,628.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:628.17,630.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:631.2,631.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:634.51,635.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:635.16,637.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:638.2,638.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:641.56,642.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:642.28,644.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:645.2,646.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:649.92,651.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:651.29,653.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:654.2,654.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:657.86,659.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:659.29,661.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:662.2,662.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:665.94,667.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:667.29,669.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:670.2,670.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:673.98,675.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:675.29,677.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:678.2,678.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:17.93,18.104 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:18.104,20.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:22.2,23.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:23.16,25.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:27.2,28.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:28.19,30.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:32.2,35.33 3 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:35.33,36.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:36.47,39.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:42.2,44.20 3 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:44.20,47.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:48.2,49.68 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:49.68,50.48 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:50.48,52.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:53.3,53.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:53.32,55.23 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:55.23,56.63 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:56.63,58.6 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:59.5,59.53 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:61.4,61.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:64.2,71.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:71.17,73.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:73.8,73.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:73.29,75.36 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:75.36,77.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:78.3,83.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:86.2,86.35 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:86.35,88.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:90.2,97.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:97.16,99.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:101.2,110.28 3 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:110.28,112.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:113.2,124.16 4 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:124.16,126.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:127.2,127.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:133.93,134.35 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:134.35,136.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:138.2,139.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:139.16,141.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:143.2,144.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:144.16,146.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:147.2,147.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:147.17,149.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:151.2,152.33 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:152.33,153.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:153.47,156.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:159.2,160.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:160.16,162.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:164.2,176.26 3 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:176.26,178.23 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:178.23,180.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:181.3,192.5 3 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:195.2,196.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:196.16,198.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:199.2,199.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:22.104,24.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:24.16,26.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:28.2,29.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:29.18,31.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:33.2,33.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:34.13,35.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:36.13,37.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:38.14,39.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:40.16,41.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:42.10,43.95 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:51.67,53.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:57.68,58.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:58.33,60.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:61.2,61.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:67.42,69.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:74.61,76.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:76.26,78.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:79.2,79.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:85.90,86.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:86.49,88.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:90.2,91.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:91.15,93.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:94.2,95.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:95.17,97.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:100.2,103.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:103.16,105.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:107.2,113.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:113.12,115.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:115.18,117.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:118.3,119.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:119.20,121.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:122.3,124.48 3 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:125.8,127.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:129.2,130.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:130.16,132.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:134.2,139.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:145.90,147.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:147.15,149.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:151.2,152.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:152.16,154.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:156.2,157.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:157.16,158.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:158.47,160.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:161.3,161.56 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:164.2,170.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:170.19,173.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:173.8,175.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:176.2,176.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:181.92,183.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:183.16,185.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:187.2,188.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:188.16,190.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:192.2,200.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:200.25,207.28 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:207.28,209.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:210.3,210.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:212.2,212.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:216.93,217.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:217.52,219.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:221.2,222.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:222.15,224.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:226.2,227.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:227.16,229.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:231.2,231.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:231.47,232.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:232.47,234.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:235.3,235.59 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:238.2,241.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:35.127,36.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:36.23,38.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:39.2,40.40 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:40.40,42.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:43.2,43.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:43.37,45.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:46.2,46.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:46.37,48.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:49.2,49.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:52.23,80.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:82.26,140.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:142.92,143.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:143.25,145.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:147.2,148.49 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:148.49,150.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:152.2,152.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:153.17,154.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:154.24,156.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:157.3,158.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:158.17,160.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:161.3,165.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:166.17,167.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:167.22,169.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:170.3,170.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:170.22,172.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:173.3,174.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:174.17,176.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:177.3,181.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:182.16,189.23 7 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:189.23,191.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:192.3,192.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:192.24,194.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:195.3,195.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:195.39,197.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:198.3,207.17 3 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:207.17,209.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:210.3,210.69 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:210.69,212.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:213.3,213.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:214.10,215.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:219.92,220.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:220.25,222.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:224.2,225.49 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:225.49,227.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:229.2,229.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:230.17,232.24 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:232.24,234.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:235.3,236.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:236.17,238.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:239.3,239.59 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:239.59,241.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:242.3,242.81 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:242.81,244.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:245.3,250.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:251.17,253.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:253.22,255.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:256.3,257.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:257.17,259.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:260.3,260.79 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:260.79,262.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:263.3,268.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:269.10,270.66 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:274.91,276.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:276.16,278.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:279.2,279.67 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:279.67,280.76 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:280.76,282.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:285.2,286.52 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:286.52,288.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:289.2,289.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:292.74,294.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:294.16,296.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:297.2,297.62 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:297.62,299.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:300.2,300.68 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:303.109,304.56 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:304.56,306.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:307.2,307.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:307.25,309.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:310.2,310.81 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:310.81,312.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:313.2,313.102 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:313.102,315.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:316.2,316.108 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:316.108,318.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:319.2,319.99 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:319.99,321.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:322.2,322.99 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:322.99,324.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:325.2,325.60 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:325.60,327.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:328.2,328.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:328.34,330.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:331.2,331.114 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:331.114,333.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:334.2,334.66 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:334.66,336.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:337.2,337.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:337.40,339.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:340.2,340.132 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:340.132,342.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:343.2,343.35 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:343.35,345.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:346.2,346.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:349.92,350.103 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:350.103,352.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:354.2,355.52 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:355.52,357.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:358.2,358.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:358.32,360.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:361.2,361.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:364.108,365.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:365.19,367.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:368.2,369.53 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:369.53,371.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:372.2,372.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:372.19,374.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:375.2,375.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:375.39,376.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:376.34,378.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:380.2,380.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:383.66,385.53 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:385.53,387.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:388.2,388.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:388.19,390.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:391.2,391.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:10.101,12.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:12.16,14.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:16.2,18.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:19.16,20.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:21.14,22.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:23.15,24.84 1 0 +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:25.16,26.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:27.10,28.97 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:21.75,23.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:25.41,28.2 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:30.31,37.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:39.38,46.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:48.50,56.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:58.43,70.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:72.80,73.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:73.36,75.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:76.2,76.48 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:76.48,78.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:79.2,79.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:82.97,84.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:84.16,86.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:87.2,88.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:88.16,90.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:91.2,92.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:92.16,94.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:95.2,96.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:96.16,98.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:99.2,99.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:102.104,104.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:104.16,106.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:107.2,108.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:108.16,110.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:111.2,112.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:112.16,114.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:115.2,116.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:116.16,118.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:119.2,119.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:122.96,124.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:124.16,126.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:127.2,128.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:128.19,130.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:131.2,132.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:132.18,134.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:135.2,141.79 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:141.79,143.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:143.17,145.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:146.3,146.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:148.2,148.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:151.77,153.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:153.16,155.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:156.2,157.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:157.19,159.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:160.2,160.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:10.101,12.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:12.16,14.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:16.2,17.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:17.18,19.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:21.2,21.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:22.15,23.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:24.13,25.42 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:26.14,27.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:28.16,29.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:30.16,31.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:32.10,33.102 1 0 diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/repeat-01/create-database.stderr.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/repeat-01/create-database.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/repeat-01/create-database.stdout.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/repeat-01/create-database.stdout.log new file mode 100644 index 00000000..4b15bd57 --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/repeat-01/create-database.stdout.log @@ -0,0 +1 @@ +CREATE DATABASE diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/repeat-01/create-pgvector.stderr.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/repeat-01/create-pgvector.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/repeat-01/create-pgvector.stdout.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/repeat-01/create-pgvector.stdout.log new file mode 100644 index 00000000..d26bad14 --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/repeat-01/create-pgvector.stdout.log @@ -0,0 +1 @@ +CREATE EXTENSION diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/repeat-01/database-identity.stderr.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/repeat-01/database-identity.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/repeat-01/database-identity.stdout.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/repeat-01/database-identity.stdout.log new file mode 100644 index 00000000..2fdb5329 --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/repeat-01/database-identity.stdout.log @@ -0,0 +1 @@ +{"database" : "engram_prc_rg_test_9a720e1716717962_r1", "schema" : "public", "server_version" : "17.10 (Debian 17.10-1.pgdg12+1)", "user" : "engram"} diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/repeat-01/go-test-summary.json b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/repeat-01/go-test-summary.json new file mode 100644 index 00000000..06a442d2 --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/repeat-01/go-test-summary.json @@ -0,0 +1,40 @@ +{ + "schema_version": 1, + "verdict": "FAIL", + "input_path": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-prove-it-old-assertion\\repeat-01\\go-test.stdout.jsonl", + "fail_on_unexpected_skip": true, + "allowed_skip_identities": [], + "counts": { + "packages": 1, + "tests": 1, + "passed": 0, + "failed": 1, + "skipped": 0, + "no_tests": 0, + "zero_tests": 0, + "incomplete": 0, + "unexpected_skips": 0, + "malformed_lines": 0 + }, + "packages": [ + { + "package": "github.com/thebtf/engram/internal/mcp", + "outcome": "fail", + "elapsed_seconds": 4.249, + "last_output": "FAIL\tgithub.com/thebtf/engram/internal/mcp\t4.239s", + "tests_observed": 1 + } + ], + "tests": [ + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestEC_F1_TagDerivedBackfill_T007", + "outcome": "fail", + "elapsed_seconds": 3.91, + "last_output": "--- FAIL: TestEC_F1_TagDerivedBackfill_T007 (3.91s)", + "skip_allowed": false + } + ], + "unexpected_skips": [], + "errors": [] +} diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/repeat-01/go-test.stderr.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/repeat-01/go-test.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/repeat-01/go-test.stdout.jsonl b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/repeat-01/go-test.stdout.jsonl new file mode 100644 index 00000000..99e30807 --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/repeat-01/go-test.stdout.jsonl @@ -0,0 +1,21 @@ +{"Time":"2026-07-11T03:37:36.0500207+03:00","Action":"start","Package":"github.com/thebtf/engram/internal/mcp"} +{"Time":"2026-07-11T03:37:36.3399173+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007"} +{"Time":"2026-07-11T03:37:36.3399173+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":"=== RUN TestEC_F1_TagDerivedBackfill_T007\n"} +{"Time":"2026-07-11T03:37:37.2140189+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":"{\"level\":\"warn\",\"error\":\"ERROR: relation \\\"observation_vectors\\\" does not exist (SQLSTATE 42P01)\",\"time\":\"2026-07-11T03:37:37+03:00\",\"message\":\"migration 040: orphan vector cleanup failed (non-fatal)\"}\n"} +{"Time":"2026-07-11T03:37:37.2140189+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":"{\"level\":\"info\",\"garbage_deleted\":0,\"orphan_vectors_deleted\":0,\"time\":\"2026-07-11T03:37:37+03:00\",\"message\":\"migration 040: garbage cleanup complete\"}\n"} +{"Time":"2026-07-11T03:37:37.2225174+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":"{\"level\":\"info\",\"orphan_vectors_deleted\":0,\"time\":\"2026-07-11T03:37:37+03:00\",\"message\":\"migration 041: orphan vector purge complete\"}\n"} +{"Time":"2026-07-11T03:37:37.2310204+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":"{\"level\":\"info\",\"patterns_deleted\":0,\"time\":\"2026-07-11T03:37:37+03:00\",\"message\":\"migration 042: low-quality pattern purge complete\"}\n"} +{"Time":"2026-07-11T03:37:37.2655447+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":"{\"level\":\"info\",\"total_deleted\":0,\"time\":\"2026-07-11T03:37:37+03:00\",\"message\":\"migration 043: radical observation cleanup complete\"}\n"} +{"Time":"2026-07-11T03:37:38.64046+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":"{\"level\":\"warn\",\"error\":\"ERROR: extension \\\"vectorscale\\\" is not available (SQLSTATE 0A000)\",\"time\":\"2026-07-11T03:37:38+03:00\",\"message\":\"migration 109: vectorscale extension not available, skipping DiskANN index\"}\n"} +{"Time":"2026-07-11T03:37:39.8522483+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":"{\"level\":\"debug\",\"connections\":1,\"time\":\"2026-07-11T03:37:39+03:00\",\"message\":\"Connection pool warmed\"}\n"} +{"Time":"2026-07-11T03:37:39.8777495+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":" store_memory_compat_t007_test.go:160: \n"} +{"Time":"2026-07-11T03:37:39.8777495+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":" \tError Trace:\tD:/Dev/engram/.w/t007-current-contract/internal/mcp/store_memory_compat_t007_test.go:160\n"} +{"Time":"2026-07-11T03:37:39.8777495+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":" \tError: \tShould be true\n"} +{"Time":"2026-07-11T03:37:39.8777495+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":" \tTest: \tTestEC_F1_TagDerivedBackfill_T007\n"} +{"Time":"2026-07-11T03:37:39.8777495+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":" \tMessages: \tglobal-scoped row must be returned by MemoryStore.List within its own project\n"} +{"Time":"2026-07-11T03:37:40.245264+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":"--- FAIL: TestEC_F1_TagDerivedBackfill_T007 (3.91s)\n"} +{"Time":"2026-07-11T03:37:40.245264+03:00","Action":"fail","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Elapsed":3.91} +{"Time":"2026-07-11T03:37:40.245264+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Output":"FAIL\n"} +{"Time":"2026-07-11T03:37:40.2602632+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Output":"coverage: 0.1% of statements\n"} +{"Time":"2026-07-11T03:37:40.299264+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Output":"FAIL\tgithub.com/thebtf/engram/internal/mcp\t4.239s\n"} +{"Time":"2026-07-11T03:37:40.299264+03:00","Action":"fail","Package":"github.com/thebtf/engram/internal/mcp","Elapsed":4.249} diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/repeat-01/pg-stat-activity-after.stderr.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/repeat-01/pg-stat-activity-after.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/repeat-01/pg-stat-activity-after.stdout.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/repeat-01/pg-stat-activity-after.stdout.log new file mode 100644 index 00000000..fe51488c --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/repeat-01/pg-stat-activity-after.stdout.log @@ -0,0 +1 @@ +[] diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/repeat-01/pg-stat-activity-before.stderr.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/repeat-01/pg-stat-activity-before.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/repeat-01/pg-stat-activity-before.stdout.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/repeat-01/pg-stat-activity-before.stdout.log new file mode 100644 index 00000000..fe51488c --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/repeat-01/pg-stat-activity-before.stdout.log @@ -0,0 +1 @@ +[] diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/repeat-01/repeat-summary.json b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/repeat-01/repeat-summary.json new file mode 100644 index 00000000..97bb6dbb --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/repeat-01/repeat-summary.json @@ -0,0 +1,36 @@ +{ + "repeat": 1, + "verdict": "FAIL", + "database": "engram_prc_rg_test_9a720e1716717962_r1", + "schema": "public", + "database_schema_identity": "engram_prc_rg_test_9a720e1716717962_r1.public", + "database_dsn": "REDACTED_DATABASE_DSN", + "database_create_confirmed": true, + "sequential_execution": { + "package_parallelism": 1, + "test_parallelism": 1 + }, + "race": false, + "connection_budget": 20, + "server_sessions_before": 6, + "server_sessions_after": 6, + "sessions_before": 0, + "sessions_after": 0, + "go_test_exit": 1, + "json_parser_exit": 1, + "coverage_policy": "Targeted", + "coverage_exit": 0, + "cleanup_exit": 0, + "cleanup_status": "PASS", + "required_session_start_execution": { + "schema_version": 1, + "verdict": "NOT_APPLICABLE", + "reason": "only an unfiltered canonical ./... run requires the 12-test session-start execution proof" + }, + "cleanup_summary": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-prove-it-old-assertion\\repeat-01\\cleanup\\cleanup.json", + "errors": [ + "go test failed with exit 1", + "go test JSON assertion failed with exit 1" + ], + "artifact_directory": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-prove-it-old-assertion\\repeat-01" +} diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/repeat-01/server-connection-count-after.stderr.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/repeat-01/server-connection-count-after.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/repeat-01/server-connection-count-after.stdout.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/repeat-01/server-connection-count-after.stdout.log new file mode 100644 index 00000000..1e8b3149 --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/repeat-01/server-connection-count-after.stdout.log @@ -0,0 +1 @@ +6 diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/repeat-01/server-connection-count-before.stderr.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/repeat-01/server-connection-count-before.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/repeat-01/server-connection-count-before.stdout.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/repeat-01/server-connection-count-before.stdout.log new file mode 100644 index 00000000..1e8b3149 --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/repeat-01/server-connection-count-before.stdout.log @@ -0,0 +1 @@ +6 diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/repeat-01/targeted-coverage.stderr.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/repeat-01/targeted-coverage.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/repeat-01/targeted-coverage.stdout.log b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/repeat-01/targeted-coverage.stdout.log new file mode 100644 index 00000000..c958686c --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/repeat-01/targeted-coverage.stdout.log @@ -0,0 +1,352 @@ +github.com/thebtf/engram/internal/mcp/audit_helpers.go:33: effectiveAuditWriter 0.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:44: isAuditEnabled 0.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:52: runAuditAsync 0.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:77: marshalState 0.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:92: logAuditCreate 0.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:117: logAuditEdit 0.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:142: logAuditDelete 0.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:166: logAuditGeneric 0.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:189: logAuditSupersede 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:30: parseArgs 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:46: coerceString 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:67: coerceInt 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:97: coerceInt64 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:127: coerceFloat64 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:151: coerceBool 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:177: coerceStringSlice 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:204: coerceInt64Slice 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:222: clampToInt 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:236: clampInt64ToInt 0.0% +github.com/thebtf/engram/internal/mcp/context.go:17: extractProjectFromHeader 0.0% +github.com/thebtf/engram/internal/mcp/context.go:22: contextWithProject 0.0% +github.com/thebtf/engram/internal/mcp/context.go:29: ContextWithProject 0.0% +github.com/thebtf/engram/internal/mcp/context.go:35: projectFromContext 0.0% +github.com/thebtf/engram/internal/mcp/context.go:41: contextWithSession 0.0% +github.com/thebtf/engram/internal/mcp/context.go:48: ContextWithSession 0.0% +github.com/thebtf/engram/internal/mcp/context.go:54: sessionFromContext 0.0% +github.com/thebtf/engram/internal/mcp/context.go:61: actorFromContext 0.0% +github.com/thebtf/engram/internal/mcp/health.go:22: NewMCPHealth 0.0% +github.com/thebtf/engram/internal/mcp/health.go:29: RecordRequest 0.0% +github.com/thebtf/engram/internal/mcp/health.go:36: RecordError 0.0% +github.com/thebtf/engram/internal/mcp/health.go:42: rotateWindowIfNeeded 0.0% +github.com/thebtf/engram/internal/mcp/health.go:55: HandleHealth 0.0% +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:28: ruleGovernanceCaptureEnabled 0.0% +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:39: captureActiveRuleIntent 0.0% +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:104: ruleIntentFingerprint 0.0% +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:113: marshalRuleCandidateIntentResponse 0.0% +github.com/thebtf/engram/internal/mcp/server.go:127: NewServer 100.0% +github.com/thebtf/engram/internal/mcp/server.go:141: SetBackfillStatusFunc 0.0% +github.com/thebtf/engram/internal/mcp/server.go:146: SetVersionedDocumentStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:151: SetIssueStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:156: SetMemoryStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:161: SetMetaMemoryIndex 0.0% +github.com/thebtf/engram/internal/mcp/server.go:166: SetHintQueue 0.0% +github.com/thebtf/engram/internal/mcp/server.go:171: SetStateStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:176: SetDirectiveCaptureService 0.0% +github.com/thebtf/engram/internal/mcp/server.go:181: SetBehavioralRulesStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:186: SetRuleGovernanceStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:191: SetRuleInjectionTelemetryStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:195: SetPromotionStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:199: SetGraphStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:204: SetNodesStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:211: SetAuditStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:216: SetPurgeStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:222: SetCandidateStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:228: SetSnapshotStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:234: SetBulkFacade 0.0% +github.com/thebtf/engram/internal/mcp/server.go:240: setTestAuditWriter 0.0% +github.com/thebtf/engram/internal/mcp/server.go:246: setTestMemoryEditor 0.0% +github.com/thebtf/engram/internal/mcp/server.go:252: setTestMemorySignificanceUpdater 0.0% +github.com/thebtf/engram/internal/mcp/server.go:260: SetWriteLintOrchestrator 0.0% +github.com/thebtf/engram/internal/mcp/server.go:269: SetRedactionRules 0.0% +github.com/thebtf/engram/internal/mcp/server.go:274: SetEmbeddingStores 0.0% +github.com/thebtf/engram/internal/mcp/server.go:282: SetRerankClient 0.0% +github.com/thebtf/engram/internal/mcp/server.go:290: SetStatsDB 0.0% +github.com/thebtf/engram/internal/mcp/server.go:297: HandleRequest 0.0% +github.com/thebtf/engram/internal/mcp/server.go:303: ListTools 0.0% +github.com/thebtf/engram/internal/mcp/server.go:332: Version 0.0% +github.com/thebtf/engram/internal/mcp/server.go:383: Run 0.0% +github.com/thebtf/engram/internal/mcp/server.go:427: handleRequest 0.0% +github.com/thebtf/engram/internal/mcp/server.go:461: handleNotification 0.0% +github.com/thebtf/engram/internal/mcp/server.go:473: handleInitialize 0.0% +github.com/thebtf/engram/internal/mcp/server.go:496: buildInstructions 0.0% +github.com/thebtf/engram/internal/mcp/server.go:660: storeMemoryTool 0.0% +github.com/thebtf/engram/internal/mcp/server.go:712: recallMemoryTool 0.0% +github.com/thebtf/engram/internal/mcp/server.go:805: primaryTools 0.0% +github.com/thebtf/engram/internal/mcp/server.go:942: handleToolsList 0.0% +github.com/thebtf/engram/internal/mcp/server.go:1612: handleToolsCall 0.0% +github.com/thebtf/engram/internal/mcp/server.go:1644: sanitizeToolCallArgs 0.0% +github.com/thebtf/engram/internal/mcp/server.go:1656: callTool 0.0% +github.com/thebtf/engram/internal/mcp/server.go:1874: sendResponse 0.0% +github.com/thebtf/engram/internal/mcp/server.go:1884: sendError 0.0% +github.com/thebtf/engram/internal/mcp/server.go:1896: handleFindSimilarObservations 0.0% +github.com/thebtf/engram/internal/mcp/server.go:1927: handleGetMemoryStats 0.0% +github.com/thebtf/engram/internal/mcp/server.go:2055: handleBackfillStatus 0.0% +github.com/thebtf/engram/internal/mcp/server.go:2071: handleCheckSystemHealth 0.0% +github.com/thebtf/engram/internal/mcp/server.go:2216: handleAnalyzeSearchPatterns 0.0% +github.com/thebtf/engram/internal/mcp/server.go:2246: handleSearchSessions 0.0% +github.com/thebtf/engram/internal/mcp/server.go:2251: handleListSessions 0.0% +github.com/thebtf/engram/internal/mcp/tools_admin.go:18: buildAdminTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_admin.go:68: adminActionsForEnv 33.3% +github.com/thebtf/engram/internal/mcp/tools_admin.go:80: vnextEnabled 0.0% +github.com/thebtf/engram/internal/mcp/tools_admin.go:84: handleAdmin 0.0% +github.com/thebtf/engram/internal/mcp/tools_admin.go:120: handlePurgeProject 0.0% +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:27: ambientHintsEnabledFromEnv 0.0% +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:32: ambientHintsTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:48: handleGetAmbientHints 0.0% +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:86: normalizeAmbientHintsToolLimit 0.0% +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:96: ambientHintItems 0.0% +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:114: errMissingSessionID 0.0% +github.com/thebtf/engram/internal/mcp/tools_brief.go:31: handleGetMemoryBrief 0.0% +github.com/thebtf/engram/internal/mcp/tools_brief.go:107: memoryBriefUsesPrincipalScope 0.0% +github.com/thebtf/engram/internal/mcp/tools_brief.go:115: handlePrincipalMemoryBrief 0.0% +github.com/thebtf/engram/internal/mcp/tools_brief.go:259: truncateBriefContent 0.0% +github.com/thebtf/engram/internal/mcp/tools_brief.go:270: filterInjectionByScope 0.0% +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:25: bulkOpsTools 0.0% +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:95: handleBulkPromote 0.0% +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:154: handleBulkDelete 0.0% +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:211: handleBulkSupersede 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:31: candidateItemFromDomain 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:51: newCandidateReviewSnapshot 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:59: requireCandidateReviewSnapshot 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:68: candidateTools 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:165: handleListCandidates 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:208: handleGetCandidate 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:239: handlePromoteCandidate 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:348: handleRejectCandidate 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:402: handleSupersedeCandidate 0.0% +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:34: codeIntelEnabled 0.0% +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:42: SetCodeChunkStore 0.0% +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:48: codebaseSearchTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:79: codebaseStatusTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:100: handleCodebaseSearch 0.0% +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:194: handleCodebaseStatus 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:21: getVault 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:35: credentialStore 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:49: handleStoreCredential 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:130: handleGetCredential 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:192: handleListCredentials 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:243: handleDeleteCredential 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:302: handleVaultStatus 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:338: expandTagHierarchy 0.0% +github.com/thebtf/engram/internal/mcp/tools_directives.go:16: directivesCaptureEnabledFromEnv 0.0% +github.com/thebtf/engram/internal/mcp/tools_directives.go:20: rememberDirectiveTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_directives.go:38: currentDirectiveCaptureService 0.0% +github.com/thebtf/engram/internal/mcp/tools_directives.go:48: handleRememberDirective 0.0% +github.com/thebtf/engram/internal/mcp/tools_directives.go:72: parseRememberDirectiveArgs 0.0% +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:10: handleDocsConsolidated 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents.go:15: handleListCollections 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents.go:61: handleListDocuments 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents.go:121: handleGetDocument 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents.go:165: handleRemoveDocument 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents.go:197: handleIngestDocument 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents.go:235: handleSearchCollection 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:15: handleDocCreate 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:61: handleDocRead 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:117: handleDocUpdate 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:122: handleDocList 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:175: handleDocHistory 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:232: handleDocComment 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:19: SetExperienceProvider 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:23: experienceHistoryTools 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:40: experienceHistoryReadSchema 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:65: experienceHistoryDetailSchema 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:82: experienceHistoryTriggerEnum 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:91: handleExperienceHistoryRead 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:103: handleExperienceHistoryDetail 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:115: parseExperienceHistoryReadArgs 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:142: parseExperienceHistoryDetailArgs 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:157: experienceHistoryTriggersFromArgs 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:180: marshalExperienceHistory 0.0% +github.com/thebtf/engram/internal/mcp/tools_feedback.go:12: handleFeedbackConsolidated 0.0% +github.com/thebtf/engram/internal/mcp/tools_feedback.go:36: handleSetSessionOutcome 0.0% +github.com/thebtf/engram/internal/mcp/tools_governance.go:27: governanceTools 0.0% +github.com/thebtf/engram/internal/mcp/tools_governance.go:98: handleListSnapshots 0.0% +github.com/thebtf/engram/internal/mcp/tools_governance.go:167: handleRollbackSnapshot 0.0% +github.com/thebtf/engram/internal/mcp/tools_governance.go:215: handlePinSnapshot 0.0% +github.com/thebtf/engram/internal/mcp/tools_governance.go:258: handleRedactionRulesStatus 0.0% +github.com/thebtf/engram/internal/mcp/tools_governance.go:284: resolveGovernanceActor 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:64: handleGraph 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:100: graphAddEdge 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:216: mcpGraphEndpointExists 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:243: mcpGraphEdgeAlreadyExists 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:276: graphAddNode 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:317: graphRemoveEdge 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:332: graphGetEdges 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:397: filterEdgesByNodeType 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:457: graphTraverse 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:480: graphFindPath 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:502: graphSynonyms 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:23: graphCreateEdgeWithGuards 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:80: graphEndpointExistsWithGuards 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:114: graphDuplicateEdgeExists 0.0% +github.com/thebtf/engram/internal/mcp/tools_ingest.go:25: handleIngest 0.0% +github.com/thebtf/engram/internal/mcp/tools_ingest.go:43: ingestDocument 0.0% +github.com/thebtf/engram/internal/mcp/tools_instincts.go:20: handleImportInstincts 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:19: issuesToolSchema 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:109: validateIssueActionParams 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:143: handleIssues 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:189: resolveSourceProject 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:205: handleIssueCreate 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:250: handleIssueList 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:311: handleIssueGet 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:344: handleIssueUpdate 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:382: handleIssueComment 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:408: handleIssueReopen 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:425: handleIssueClose 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:22: handleLifecycle 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:48: lifecycleInfo 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:87: lifecyclePromote 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:118: lifecycleDemote 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:149: lifecycleSetConfidence 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:172: lifecycleSetDefeasibility 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:191: lifecycleSleepStatus 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:197: lifecycleDecayPreview 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:233: marshalJSON 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:35: vnextFEnabled 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:42: isValidPrivacyScope 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:54: derivePrivacyScopeFromLegacy 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:82: deriveLegacyScopeFromPrivacy 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:93: applyPrincipalMemoryMetadata 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:135: addPrincipalMemoryFields 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:161: newScopedWriteLintMemoryStore 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:172: writeLintVisibilityCaller 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:186: writeLintVisibilityOptions 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:192: scopedWriteLintMemoryStore 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:202: filterVisibleWriteGateCandidates 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:214: domainManageAllowed 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:218: List 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:272: writeLintVisibilityFetchLimit 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:286: Get 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:297: Create 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:301: Update 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:305: MarkSuperseded 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:319: effectiveMemoryEditor 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:329: isValidStoreObservationType 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:354: handleStoreMemory 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1111: handleEditMemory 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1218: computeTTLDays 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1258: truncateTitle 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1270: keepRecallMemory 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1280: keepRecallMemoryFilters 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1342: handleRecallMemory 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1690: staleAdvisory 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1700: marshalWithStaleAdvisory 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1727: Rank 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1751: handleRecallMemoryHybrid 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:2252: handleRateMemory 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:2281: handleSuppressMemory 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:17: SetDomainRegistryService 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:21: checkDomainWriteMCP 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:43: addDomainWriteDecisionFields 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:51: marshalStoreMemoryAugmented 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:26: newMemoryStoreSignificanceUpdater 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:33: s6OutcomeEnabledFromEnv 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:37: effectiveMemorySignificanceUpdater 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:47: currentMemorySignificanceUpdater 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:58: rateMemorySignificanceTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:74: handleRateMemorySignificance 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:109: RateMemorySignificance 0.0% +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:18: s2MetaMemoryEnabled 0.0% +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:22: knowAboutTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:39: handleKnowAbout 0.0% +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:104: parseKnowAboutLimit 0.0% +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:118: summarizeMetaIndexTags 0.0% +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:153: summarizeMetaIndexDateRange 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:23: SetPrincipalMemoryQueryService 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:27: principalMemoryQueryTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:52: handleQueryPrincipalMemory 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:134: principalMemoryQueryCaller 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:149: parsePrincipalMemoryQueryLimit 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:160: principalMemoryQueryText 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:167: parsePrincipalMemoryQueryVisibility 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:179: parsePrincipalMemoryQueryOffset 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:190: parsePrincipalMemoryQueryInt 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:215: parsePrincipalMemoryQueryBool 0.0% +github.com/thebtf/engram/internal/mcp/tools_recall.go:28: handleRecall 0.0% +github.com/thebtf/engram/internal/mcp/tools_recall.go:125: parseRecallIncludedPrincipals 0.0% +github.com/thebtf/engram/internal/mcp/tools_recall.go:165: appendRecallIncludedPrincipalMemories 0.0% +github.com/thebtf/engram/internal/mcp/tools_recall.go:223: recallIncludeTargetMatchesCaller 0.0% +github.com/thebtf/engram/internal/mcp/tools_recall.go:231: recallPrincipalQueryItemToMemory 0.0% +github.com/thebtf/engram/internal/mcp/tools_recall.go:247: handleRecallSearch 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:20: currentReviewLoopCandidateLister 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:30: reviewLoopCandidateTools 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:65: reviewLoopReadSchema 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:78: reviewPacketIDSchema 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:91: handleReviewMetricsRead 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:110: handleReviewQueueRead 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:140: handleReviewPacketDetail 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:151: handleReviewPacketPreviewAction 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:167: handleReviewPacketApplyAction 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:189: parseReviewLoopReadArgs 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:212: reviewLoopMCPPacketTypeSupported 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:217: reviewLoopActionFromArgs 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:225: reviewLoopReasonFromArgs 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:233: loadReviewPacketCandidate 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:256: applyReviewPacketPreserve 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:278: applyReviewPacketSuppress 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:296: reviewLoopMemoryFromCandidate 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:320: filterRiskyMCPReviewCandidates 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:330: marshalReviewLoop 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:17: ruleGovernanceReadTools 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:126: handleRuleGovernanceHealth 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:176: handleRuleGovernanceQueue 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:233: handleRuleGovernanceSnapshots 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:278: handleRuleGovernanceUsefulness 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:338: handleRuleGovernanceTransition 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:373: handleRuleGovernancePinSnapshot 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:406: handleRuleGovernanceRollback 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:483: requireRuleGovernanceReadAccess 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:495: requireRuleGovernanceProjectOrAdmin 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:505: ruleGovernanceCallerIsAdmin 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:510: requireRuleGovernanceAdminAccess 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:518: redactRuleGovernanceEvidenceHandles 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:535: redactRuleGovernanceEvidenceHandle 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:553: ruleGovernanceEvidenceHandleHasSensitiveText 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:559: isCanonicalRuleGovernanceEvidenceHandle 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:580: isSafeRuleGovernanceEvidenceID 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:594: parseRuleGovernanceTransitionRequest 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:604: parseRuleGovernanceSince 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:623: boundedRuleGovernanceLimit 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:634: formatRuleGovernanceTime 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:641: formatRuleGovernanceTimePtr 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:649: stringRuleCandidateStatusCounts 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:657: stringRuleVersionStateCounts 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:665: stringRuleArbiterRunStatusCounts 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:673: stringRuleInjectionEventTypeCounts 0.0% +github.com/thebtf/engram/internal/mcp/tools_rules.go:17: handleStoreRule 0.0% +github.com/thebtf/engram/internal/mcp/tools_rules.go:133: handleListRules 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:22: handleSettingsConsolidated 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:51: SetSettingsStore 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:57: settingsStore 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:67: isSecretSettingKey 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:74: requireAdmin 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:85: handleSetSetting 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:145: handleGetSetting 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:181: handleListSettings 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:216: handleDeleteSetting 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:35: resumeScopesFromFields 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:52: stateTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:82: setStateTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:142: handleGetState 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:219: handleSetState 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:274: decodeSessionStateForWrite 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:292: validateSessionStateBudget 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:303: validateNativeResumePacket 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:349: decodeProjectStateForWrite 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:364: requireStateObject 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:383: requireNestedObject 0.0% +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:10: handleStoreConsolidated 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:21: SetTemporalTruthProvider 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:25: temporalTruthEnabledFromEnv 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:30: temporalTruthTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:39: temporalTruthRefreshTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:48: temporalTruthRefreshSchema 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:58: temporalTruthSchema 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:72: currentTemporalTruthProvider 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:82: handleTemporalTruth 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:102: handleTemporalTruthRefresh 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:122: parseTemporalTruthArgs 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:151: parseTemporalTruthRefreshProject 0.0% +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:10: handleVaultConsolidated 0.0% +total: (statements) 0.1% diff --git a/.agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/summary.json b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/summary.json new file mode 100644 index 00000000..19f076fd --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/t007-maker-prove-it-old-assertion/summary.json @@ -0,0 +1,67 @@ +{ + "schema_version": 1, + "gate": "release-gates-foundation", + "run_id": "t007-maker-prove-it-old-assertion", + "started_at": "2026-07-11T00:37:29.5703459+00:00", + "finished_at": "2026-07-11T00:37:45.8071288+00:00", + "duration_seconds": 16.237, + "verdict": "FAIL", + "counts": { + "requested_repeats": 1, + "completed_repeats": 1, + "passed_repeats": 0, + "failed_repeats": 1, + "child_commands": 16, + "nonzero_child_commands": 2 + }, + "packages": [ + "./internal/mcp" + ], + "run_pattern": "^TestEC_F1_TagDerivedBackfill_T007$", + "coverage_policy": "Targeted", + "connection_budget": 20, + "race": false, + "database_dsn": "REDACTED_DATABASE_DSN", + "environment": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-prove-it-old-assertion\\environment.json", + "commands": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-prove-it-old-assertion\\commands.json", + "repeats": [ + { + "repeat": 1, + "verdict": "FAIL", + "database": "engram_prc_rg_test_9a720e1716717962_r1", + "schema": "public", + "database_schema_identity": "engram_prc_rg_test_9a720e1716717962_r1.public", + "database_dsn": "REDACTED_DATABASE_DSN", + "database_create_confirmed": true, + "sequential_execution": { + "package_parallelism": 1, + "test_parallelism": 1 + }, + "race": false, + "connection_budget": 20, + "server_sessions_before": 6, + "server_sessions_after": 6, + "sessions_before": 0, + "sessions_after": 0, + "go_test_exit": 1, + "json_parser_exit": 1, + "coverage_policy": "Targeted", + "coverage_exit": 0, + "cleanup_exit": 0, + "cleanup_status": "PASS", + "required_session_start_execution": { + "schema_version": 1, + "verdict": "NOT_APPLICABLE", + "reason": "only an unfiltered canonical ./... run requires the 12-test session-start execution proof" + }, + "cleanup_summary": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-prove-it-old-assertion\\repeat-01\\cleanup\\cleanup.json", + "errors": [ + "go test failed with exit 1", + "go test JSON assertion failed with exit 1" + ], + "artifact_directory": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-prove-it-old-assertion\\repeat-01" + } + ], + "errors": [], + "artifact_directory": "D:\\Dev\\engram\\.w\\t007-current-contract\\.agent\\reports\\evidence\\production-ready\\t007-compat\\t007-maker-prove-it-old-assertion" +} diff --git a/.agent/reports/evidence/production-ready/t007-compat/verification-summary.json b/.agent/reports/evidence/production-ready/t007-compat/verification-summary.json new file mode 100644 index 00000000..15dac0ca --- /dev/null +++ b/.agent/reports/evidence/production-ready/t007-compat/verification-summary.json @@ -0,0 +1,51 @@ +{ + "schema_version": 1, + "slice": "T007-COMPAT-DEMOLITION-CLASSIFICATION", + "recorded_at": "2026-07-11T00:41:04.2538562Z", + "base_sha": "af1ed63536829916e0477be719a30a57a8d9227a", + "scope": { + "production_test_paths": [ + "internal/mcp/store_memory_compat_t007_test.go" + ], + "evidence_namespace": ".agent/reports/evidence/production-ready/t007-compat/**", + "maker_report_namespace": ".agent/reports/production-ready/t007-compat-demolition-classification/**", + "production_code_changed": false + }, + "gates": { + "go_runner_discovery": "PASS", + "valid_red": "PASS", + "focused_fresh_database_repeat3": "PASS", + "focused_race_fresh_database": "PASS", + "prove_it_old_assertion_red": "PASS", + "post_prove_it_fresh_database_green": "PASS", + "go_vet_all": "PASS", + "go_build_all": "PASS", + "git_diff_check": "PASS" + }, + "full_internal_mcp": { + "evidence": "t007-maker-full-mcp/summary.json", + "fresh_database": true, + "total_tests": 488, + "passed_tests": 487, + "failed_tests": 1, + "skipped_tests": 0, + "t007_tests": { + "TestEC_F1_TagDerivedBackfill_T007": "PASS", + "TestEC_F1_HandleRecallSearch_FlagOff_BackwardCompat_T007": "PASS" + }, + "out_of_scope_failure": { + "test": "TestHybridTG3_ConfidenceMin_FloorEnforced_T022", + "owner": "DEMOLITION-SKIP-CLASSIFICATION", + "source": ".agent/plans/2026-07-10-engram-production-ready-master-plan.md", + "t007_edit_authorized": false + }, + "sessions_after": 0, + "cleanup_verdict": "PASS", + "remaining_database_count": 0 + }, + "post_commit_gates": [ + "gitleaks exact commit", + "synthesis-preview merge-tree compatibility", + "exact parent/tree/path digest handoff" + ] +} diff --git a/.agent/reports/production-ready/t007-compat-demolition-classification/maker-report.md b/.agent/reports/production-ready/t007-compat-demolition-classification/maker-report.md new file mode 100644 index 00000000..fdba1940 --- /dev/null +++ b/.agent/reports/production-ready/t007-compat-demolition-classification/maker-report.md @@ -0,0 +1,28 @@ +# T007 compatibility demolition classification — maker report + +## Outcome + +`TestEC_F1_TagDerivedBackfill_T007` is a **CURRENT_CONTRACT_TEST_CORRECTION**. No production change is authorized or required. + +The raw SQL half of the test already proves that the `scope:global` fixture is backfilled to `privacy_scope='global'`. The failing List assertion then inspected `models.Memory.PrivacyScope` while the vNext-F flag was off. The live `MemoryStore.List -> memoryRowToModel` path intentionally leaves that field empty under flag-off to preserve the v6.4 response contract. + +The corrected test explicitly fixes flag-off state, reads the fixture's durable `id` alongside the existing raw SQL proof, and requires `MemoryStore.List` to return that exact ID with exact content. It no longer depends on metadata intentionally hidden by the compatibility projection. + +## TDD and verification + +- Valid RED: old assertion failed on fresh PostgreSQL 17.10; one failed test, zero skips, zero sessions before drop, zero database residue. +- GREEN: focused fresh-database gate passed 3/3 with all child/parser/coverage/cleanup exits zero. +- Prove-It: temporarily restoring the old assertion failed exactly the T007 test; cleanup passed. The intended test file was restored byte-for-byte (`SHA256 B223366204385AFC4D4F6A4899777C2D6530A5B6420D6869683B6CBF65F4EC21`) and post-restore GREEN passed. +- Race: focused fresh-database race gate passed. +- Static gates: `go vet ./...`, `go build ./...`, and `git diff --check` passed. +- Full fresh-database `./internal/mcp`: 488 tests, 487 passed, 1 failed, 0 skipped. Both T007 tests passed. The sole failure is `TestHybridTG3_ConfidenceMin_FloorEnforced_T022`, which A10 assigns to `DEMOLITION-SKIP-CLASSIFICATION`; T007 has no authority to alter it. Cleanup recorded zero remaining sessions and zero database residue. + +Machine evidence is under `.agent/reports/evidence/production-ready/t007-compat/`. + +## Scope discipline + +Production/test change: `internal/mcp/store_memory_compat_t007_test.go` only. No production source, workflow, plan, role state, release state, main checkout, tag, push, merge, or browser/report surface was changed. + +The operator-requested `.w/t007-current-contract` location is not ignored by the current repository (`.w/` appears as untracked in the preserve-only primary checkout). The path was explicit and already hosts isolated worktrees; `.gitignore` is outside this slice, so no ignore rule was changed. + +Post-commit checks—exact-commit gitleaks, synthesis-preview merge-tree compatibility, and immutable SHA/parent/tree/path handoff—are intentionally performed after the commit exists and are reported by the maker handoff rather than self-referenced inside the commit. diff --git a/internal/mcp/store_memory_compat_t007_test.go b/internal/mcp/store_memory_compat_t007_test.go index ed16cfb6..8275990a 100644 --- a/internal/mcp/store_memory_compat_t007_test.go +++ b/internal/mcp/store_memory_compat_t007_test.go @@ -80,6 +80,7 @@ func newMemoryServerForT007(t *testing.T, project string) t007TestEnv { // `scope:global` assertion — that row would default to 'project' incorrectly. func TestEC_F1_TagDerivedBackfill_T007(t *testing.T) { project := "t007-ec-f1-" + uuid.NewString() + t.Setenv("ENGRAM_VNEXT_F_ENABLED", "") env := newMemoryServerForT007(t, project) db := env.store.DB @@ -120,18 +121,20 @@ func TestEC_F1_TagDerivedBackfill_T007(t *testing.T) { // Read back the three rows and assert privacy_scope per AC. type row struct { + ID int64 Content string PrivacyScope string Tags string } var rows []row require.NoError(t, db.Raw( - `SELECT content, privacy_scope, tags::text AS tags + `SELECT id, content, privacy_scope, tags::text AS tags FROM memories WHERE project = ? ORDER BY id`, project, ).Scan(&rows).Error) require.Len(t, rows, 3, "expected 3 fixture rows") + require.NotZero(t, rows[0].ID, "global-tagged fixture must have a durable database ID") require.Equal(t, "global", rows[0].PrivacyScope, "row with scope:global tag -> privacy_scope='global'") require.True(t, strings.Contains(rows[0].Tags, "scope:global")) @@ -147,15 +150,19 @@ func TestEC_F1_TagDerivedBackfill_T007(t *testing.T) { mems, err := env.srv.memoryStore.List(context.Background(), project, 10) require.NoError(t, err) require.GreaterOrEqual(t, len(mems), 3, "all 3 fixture rows must be returned by MemoryStore.List") - var foundGlobal bool + globalFixtureID := rows[0].ID + globalFixtureContent := rows[0].Content + var foundGlobalFixture bool for _, m := range mems { - if m.PrivacyScope == "global" { - foundGlobal = true + if m.ID == globalFixtureID { + require.Equal(t, globalFixtureContent, m.Content, + "MemoryStore.List must return the exact global-tagged fixture content") + foundGlobalFixture = true break } } - require.True(t, foundGlobal, - "global-scoped row must be returned by MemoryStore.List within its own project") + require.True(t, foundGlobalFixture, + "global-scoped fixture id=%d must be returned by MemoryStore.List within its own project", globalFixtureID) } // TestEC_F1_HandleRecallSearch_FlagOff_BackwardCompat_T007 verifies that the From 637adf0e6a2d34355c854c9c9e27e107eed4c35f Mon Sep 17 00:00:00 2001 From: Kirill Turanskiy Date: Sat, 11 Jul 2026 04:07:52 +0300 Subject: [PATCH 050/111] review(t007): record independent compatibility verdict --- .../t007-r1-fresh-checker/checker-report.md | 62 + .../commands.json | 444 ++ .../environment.json | 52 + .../go-version.stderr.log | 0 .../go-version.stdout.log | 1 + .../postgres-container-identity.stderr.log | 0 .../postgres-container-identity.stdout.log | 1 + .../postgres-server-identity.stderr.log | 0 .../postgres-server-identity.stdout.log | 1 + .../repeat-01/assert-go-test-json.stderr.log | 0 .../repeat-01/assert-go-test-json.stdout.log | 2 + .../repeat-01/cleanup-process.stderr.log | 0 .../repeat-01/cleanup-process.stdout.log | 2 + .../repeat-01/cleanup/cleanup.json | 170 + .../cleanup/database-exists-before.stderr.log | 0 .../cleanup/database-exists-before.stdout.log | 1 + .../cleanup/drop-database.stderr.log | 0 .../cleanup/drop-database.stdout.log | 1 + .../pg-stat-activity-before.stderr.log | 0 .../pg-stat-activity-before.stdout.log | 1 + .../cleanup/terminate-sessions.stderr.log | 0 .../cleanup/terminate-sessions.stdout.log | 1 + .../cleanup/verify-database-absent.stderr.log | 0 .../cleanup/verify-database-absent.stdout.log | 1 + .../connection-count-after.stderr.log | 0 .../connection-count-after.stdout.log | 1 + .../connection-count-before.stderr.log | 0 .../connection-count-before.stdout.log | 1 + .../repeat-01/coverage.out | 3472 +++++++++++++++ .../repeat-01/create-database.stderr.log | 0 .../repeat-01/create-database.stdout.log | 1 + .../repeat-01/create-pgvector.stderr.log | 0 .../repeat-01/create-pgvector.stdout.log | 1 + .../repeat-01/database-identity.stderr.log | 0 .../repeat-01/database-identity.stdout.log | 1 + .../repeat-01/go-test-summary.json | 40 + .../repeat-01/go-test.stderr.log | 0 .../repeat-01/go-test.stdout.jsonl | 16 + .../pg-stat-activity-after.stderr.log | 0 .../pg-stat-activity-after.stdout.log | 1 + .../pg-stat-activity-before.stderr.log | 0 .../pg-stat-activity-before.stdout.log | 1 + .../repeat-01/repeat-summary.json | 33 + .../server-connection-count-after.stderr.log | 0 .../server-connection-count-after.stdout.log | 1 + .../server-connection-count-before.stderr.log | 0 .../server-connection-count-before.stdout.log | 1 + .../repeat-01/targeted-coverage.stderr.log | 0 .../repeat-01/targeted-coverage.stdout.log | 352 ++ .../summary.json | 64 + .../commands.json | 444 ++ .../environment.json | 52 + .../go-version.stderr.log | 0 .../go-version.stdout.log | 1 + .../postgres-container-identity.stderr.log | 0 .../postgres-container-identity.stdout.log | 1 + .../postgres-server-identity.stderr.log | 0 .../postgres-server-identity.stdout.log | 1 + .../repeat-01/assert-go-test-json.stderr.log | 0 .../repeat-01/assert-go-test-json.stdout.log | 2 + .../repeat-01/cleanup-process.stderr.log | 0 .../repeat-01/cleanup-process.stdout.log | 2 + .../repeat-01/cleanup/cleanup.json | 170 + .../cleanup/database-exists-before.stderr.log | 0 .../cleanup/database-exists-before.stdout.log | 1 + .../cleanup/drop-database.stderr.log | 0 .../cleanup/drop-database.stdout.log | 1 + .../pg-stat-activity-before.stderr.log | 0 .../pg-stat-activity-before.stdout.log | 1 + .../cleanup/terminate-sessions.stderr.log | 0 .../cleanup/terminate-sessions.stdout.log | 1 + .../cleanup/verify-database-absent.stderr.log | 0 .../cleanup/verify-database-absent.stdout.log | 1 + .../connection-count-after.stderr.log | 0 .../connection-count-after.stdout.log | 1 + .../connection-count-before.stderr.log | 0 .../connection-count-before.stdout.log | 1 + .../repeat-01/coverage.out | 3472 +++++++++++++++ .../repeat-01/create-database.stderr.log | 0 .../repeat-01/create-database.stdout.log | 1 + .../repeat-01/create-pgvector.stderr.log | 0 .../repeat-01/create-pgvector.stdout.log | 1 + .../repeat-01/database-identity.stderr.log | 0 .../repeat-01/database-identity.stdout.log | 1 + .../repeat-01/go-test-summary.json | 40 + .../repeat-01/go-test.stderr.log | 0 .../repeat-01/go-test.stdout.jsonl | 14 + .../pg-stat-activity-after.stderr.log | 0 .../pg-stat-activity-after.stdout.log | 1 + .../pg-stat-activity-before.stderr.log | 0 .../pg-stat-activity-before.stdout.log | 1 + .../repeat-01/repeat-summary.json | 36 + .../server-connection-count-after.stderr.log | 0 .../server-connection-count-after.stdout.log | 1 + .../server-connection-count-before.stderr.log | 0 .../server-connection-count-before.stdout.log | 1 + .../repeat-01/targeted-coverage.stderr.log | 0 .../repeat-01/targeted-coverage.stdout.log | 352 ++ .../challenge-flag-reset-removed/summary.json | 67 + .../challenge-raw-sql-proof/commands.json | 444 ++ .../challenge-raw-sql-proof/environment.json | 52 + .../go-version.stderr.log | 0 .../go-version.stdout.log | 1 + .../postgres-container-identity.stderr.log | 0 .../postgres-container-identity.stdout.log | 1 + .../postgres-server-identity.stderr.log | 0 .../postgres-server-identity.stdout.log | 1 + .../repeat-01/assert-go-test-json.stderr.log | 0 .../repeat-01/assert-go-test-json.stdout.log | 2 + .../repeat-01/cleanup-process.stderr.log | 0 .../repeat-01/cleanup-process.stdout.log | 2 + .../repeat-01/cleanup/cleanup.json | 170 + .../cleanup/database-exists-before.stderr.log | 0 .../cleanup/database-exists-before.stdout.log | 1 + .../cleanup/drop-database.stderr.log | 0 .../cleanup/drop-database.stdout.log | 1 + .../pg-stat-activity-before.stderr.log | 0 .../pg-stat-activity-before.stdout.log | 1 + .../cleanup/terminate-sessions.stderr.log | 0 .../cleanup/terminate-sessions.stdout.log | 1 + .../cleanup/verify-database-absent.stderr.log | 0 .../cleanup/verify-database-absent.stdout.log | 1 + .../connection-count-after.stderr.log | 0 .../connection-count-after.stdout.log | 1 + .../connection-count-before.stderr.log | 0 .../connection-count-before.stdout.log | 1 + .../repeat-01/coverage.out | 3472 +++++++++++++++ .../repeat-01/create-database.stderr.log | 0 .../repeat-01/create-database.stdout.log | 1 + .../repeat-01/create-pgvector.stderr.log | 0 .../repeat-01/create-pgvector.stdout.log | 1 + .../repeat-01/database-identity.stderr.log | 0 .../repeat-01/database-identity.stdout.log | 1 + .../repeat-01/go-test-summary.json | 40 + .../repeat-01/go-test.stderr.log | 0 .../repeat-01/go-test.stdout.jsonl | 30 + .../pg-stat-activity-after.stderr.log | 0 .../pg-stat-activity-after.stdout.log | 1 + .../pg-stat-activity-before.stderr.log | 0 .../pg-stat-activity-before.stdout.log | 1 + .../repeat-01/repeat-summary.json | 36 + .../server-connection-count-after.stderr.log | 0 .../server-connection-count-after.stdout.log | 1 + .../server-connection-count-before.stderr.log | 0 .../server-connection-count-before.stdout.log | 1 + .../repeat-01/targeted-coverage.stderr.log | 0 .../repeat-01/targeted-coverage.stdout.log | 352 ++ .../challenge-raw-sql-proof/summary.json | 67 + .../challenge-wrong-fixture/commands.json | 444 ++ .../challenge-wrong-fixture/environment.json | 52 + .../go-version.stderr.log | 0 .../go-version.stdout.log | 1 + .../postgres-container-identity.stderr.log | 0 .../postgres-container-identity.stdout.log | 1 + .../postgres-server-identity.stderr.log | 0 .../postgres-server-identity.stdout.log | 1 + .../repeat-01/assert-go-test-json.stderr.log | 0 .../repeat-01/assert-go-test-json.stdout.log | 2 + .../repeat-01/cleanup-process.stderr.log | 0 .../repeat-01/cleanup-process.stdout.log | 2 + .../repeat-01/cleanup/cleanup.json | 170 + .../cleanup/database-exists-before.stderr.log | 0 .../cleanup/database-exists-before.stdout.log | 1 + .../cleanup/drop-database.stderr.log | 0 .../cleanup/drop-database.stdout.log | 1 + .../pg-stat-activity-before.stderr.log | 0 .../pg-stat-activity-before.stdout.log | 1 + .../cleanup/terminate-sessions.stderr.log | 0 .../cleanup/terminate-sessions.stdout.log | 1 + .../cleanup/verify-database-absent.stderr.log | 0 .../cleanup/verify-database-absent.stdout.log | 1 + .../connection-count-after.stderr.log | 0 .../connection-count-after.stdout.log | 1 + .../connection-count-before.stderr.log | 0 .../connection-count-before.stdout.log | 1 + .../repeat-01/coverage.out | 3472 +++++++++++++++ .../repeat-01/create-database.stderr.log | 0 .../repeat-01/create-database.stdout.log | 1 + .../repeat-01/create-pgvector.stderr.log | 0 .../repeat-01/create-pgvector.stdout.log | 1 + .../repeat-01/database-identity.stderr.log | 0 .../repeat-01/database-identity.stdout.log | 1 + .../repeat-01/go-test-summary.json | 40 + .../repeat-01/go-test.stderr.log | 0 .../repeat-01/go-test.stdout.jsonl | 30 + .../pg-stat-activity-after.stderr.log | 0 .../pg-stat-activity-after.stdout.log | 1 + .../pg-stat-activity-before.stderr.log | 0 .../pg-stat-activity-before.stdout.log | 1 + .../repeat-01/repeat-summary.json | 36 + .../server-connection-count-after.stderr.log | 0 .../server-connection-count-after.stdout.log | 1 + .../server-connection-count-before.stderr.log | 0 .../server-connection-count-before.stdout.log | 1 + .../repeat-01/targeted-coverage.stderr.log | 0 .../repeat-01/targeted-coverage.stdout.log | 352 ++ .../challenge-wrong-fixture/summary.json | 67 + .../evidence/focused-race/commands.json | 445 ++ .../evidence/focused-race/environment.json | 52 + .../focused-race/go-version.stderr.log | 0 .../focused-race/go-version.stdout.log | 1 + .../postgres-container-identity.stderr.log | 0 .../postgres-container-identity.stdout.log | 1 + .../postgres-server-identity.stderr.log | 0 .../postgres-server-identity.stdout.log | 1 + .../repeat-01/assert-go-test-json.stderr.log | 0 .../repeat-01/assert-go-test-json.stdout.log | 2 + .../repeat-01/cleanup-process.stderr.log | 0 .../repeat-01/cleanup-process.stdout.log | 2 + .../repeat-01/cleanup/cleanup.json | 170 + .../cleanup/database-exists-before.stderr.log | 0 .../cleanup/database-exists-before.stdout.log | 1 + .../cleanup/drop-database.stderr.log | 0 .../cleanup/drop-database.stdout.log | 1 + .../pg-stat-activity-before.stderr.log | 0 .../pg-stat-activity-before.stdout.log | 1 + .../cleanup/terminate-sessions.stderr.log | 0 .../cleanup/terminate-sessions.stdout.log | 1 + .../cleanup/verify-database-absent.stderr.log | 0 .../cleanup/verify-database-absent.stdout.log | 1 + .../connection-count-after.stderr.log | 0 .../connection-count-after.stdout.log | 1 + .../connection-count-before.stderr.log | 0 .../connection-count-before.stdout.log | 1 + .../focused-race/repeat-01/coverage.out | 3472 +++++++++++++++ .../repeat-01/create-database.stderr.log | 0 .../repeat-01/create-database.stdout.log | 1 + .../repeat-01/create-pgvector.stderr.log | 0 .../repeat-01/create-pgvector.stdout.log | 1 + .../repeat-01/database-identity.stderr.log | 0 .../repeat-01/database-identity.stdout.log | 1 + .../repeat-01/go-test-summary.json | 40 + .../focused-race/repeat-01/go-test.stderr.log | 0 .../repeat-01/go-test.stdout.jsonl | 16 + .../pg-stat-activity-after.stderr.log | 0 .../pg-stat-activity-after.stdout.log | 1 + .../pg-stat-activity-before.stderr.log | 0 .../pg-stat-activity-before.stdout.log | 1 + .../repeat-01/repeat-summary.json | 33 + .../server-connection-count-after.stderr.log | 0 .../server-connection-count-after.stdout.log | 1 + .../server-connection-count-before.stderr.log | 0 .../server-connection-count-before.stdout.log | 1 + .../repeat-01/targeted-coverage.stderr.log | 0 .../repeat-01/targeted-coverage.stdout.log | 352 ++ .../evidence/focused-race/summary.json | 64 + .../evidence/focused-repeat3/commands.json | 1198 +++++ .../evidence/focused-repeat3/environment.json | 52 + .../focused-repeat3/go-version.stderr.log | 0 .../focused-repeat3/go-version.stdout.log | 1 + .../postgres-container-identity.stderr.log | 0 .../postgres-container-identity.stdout.log | 1 + .../postgres-server-identity.stderr.log | 0 .../postgres-server-identity.stdout.log | 1 + .../repeat-01/assert-go-test-json.stderr.log | 0 .../repeat-01/assert-go-test-json.stdout.log | 2 + .../repeat-01/cleanup-process.stderr.log | 0 .../repeat-01/cleanup-process.stdout.log | 2 + .../repeat-01/cleanup/cleanup.json | 170 + .../cleanup/database-exists-before.stderr.log | 0 .../cleanup/database-exists-before.stdout.log | 1 + .../cleanup/drop-database.stderr.log | 0 .../cleanup/drop-database.stdout.log | 1 + .../pg-stat-activity-before.stderr.log | 0 .../pg-stat-activity-before.stdout.log | 1 + .../cleanup/terminate-sessions.stderr.log | 0 .../cleanup/terminate-sessions.stdout.log | 1 + .../cleanup/verify-database-absent.stderr.log | 0 .../cleanup/verify-database-absent.stdout.log | 1 + .../connection-count-after.stderr.log | 0 .../connection-count-after.stdout.log | 1 + .../connection-count-before.stderr.log | 0 .../connection-count-before.stdout.log | 1 + .../focused-repeat3/repeat-01/coverage.out | 3472 +++++++++++++++ .../repeat-01/create-database.stderr.log | 0 .../repeat-01/create-database.stdout.log | 1 + .../repeat-01/create-pgvector.stderr.log | 0 .../repeat-01/create-pgvector.stdout.log | 1 + .../repeat-01/database-identity.stderr.log | 0 .../repeat-01/database-identity.stdout.log | 1 + .../repeat-01/go-test-summary.json | 40 + .../repeat-01/go-test.stderr.log | 0 .../repeat-01/go-test.stdout.jsonl | 16 + .../pg-stat-activity-after.stderr.log | 0 .../pg-stat-activity-after.stdout.log | 1 + .../pg-stat-activity-before.stderr.log | 0 .../pg-stat-activity-before.stdout.log | 1 + .../repeat-01/repeat-summary.json | 33 + .../server-connection-count-after.stderr.log | 0 .../server-connection-count-after.stdout.log | 1 + .../server-connection-count-before.stderr.log | 0 .../server-connection-count-before.stdout.log | 1 + .../repeat-01/targeted-coverage.stderr.log | 0 .../repeat-01/targeted-coverage.stdout.log | 352 ++ .../repeat-02/assert-go-test-json.stderr.log | 0 .../repeat-02/assert-go-test-json.stdout.log | 2 + .../repeat-02/cleanup-process.stderr.log | 0 .../repeat-02/cleanup-process.stdout.log | 2 + .../repeat-02/cleanup/cleanup.json | 170 + .../cleanup/database-exists-before.stderr.log | 0 .../cleanup/database-exists-before.stdout.log | 1 + .../cleanup/drop-database.stderr.log | 0 .../cleanup/drop-database.stdout.log | 1 + .../pg-stat-activity-before.stderr.log | 0 .../pg-stat-activity-before.stdout.log | 1 + .../cleanup/terminate-sessions.stderr.log | 0 .../cleanup/terminate-sessions.stdout.log | 1 + .../cleanup/verify-database-absent.stderr.log | 0 .../cleanup/verify-database-absent.stdout.log | 1 + .../connection-count-after.stderr.log | 0 .../connection-count-after.stdout.log | 1 + .../connection-count-before.stderr.log | 0 .../connection-count-before.stdout.log | 1 + .../focused-repeat3/repeat-02/coverage.out | 3472 +++++++++++++++ .../repeat-02/create-database.stderr.log | 0 .../repeat-02/create-database.stdout.log | 1 + .../repeat-02/create-pgvector.stderr.log | 0 .../repeat-02/create-pgvector.stdout.log | 1 + .../repeat-02/database-identity.stderr.log | 0 .../repeat-02/database-identity.stdout.log | 1 + .../repeat-02/go-test-summary.json | 40 + .../repeat-02/go-test.stderr.log | 0 .../repeat-02/go-test.stdout.jsonl | 16 + .../pg-stat-activity-after.stderr.log | 0 .../pg-stat-activity-after.stdout.log | 1 + .../pg-stat-activity-before.stderr.log | 0 .../pg-stat-activity-before.stdout.log | 1 + .../repeat-02/repeat-summary.json | 33 + .../server-connection-count-after.stderr.log | 0 .../server-connection-count-after.stdout.log | 1 + .../server-connection-count-before.stderr.log | 0 .../server-connection-count-before.stdout.log | 1 + .../repeat-02/targeted-coverage.stderr.log | 0 .../repeat-02/targeted-coverage.stdout.log | 352 ++ .../repeat-03/assert-go-test-json.stderr.log | 0 .../repeat-03/assert-go-test-json.stdout.log | 2 + .../repeat-03/cleanup-process.stderr.log | 0 .../repeat-03/cleanup-process.stdout.log | 2 + .../repeat-03/cleanup/cleanup.json | 170 + .../cleanup/database-exists-before.stderr.log | 0 .../cleanup/database-exists-before.stdout.log | 1 + .../cleanup/drop-database.stderr.log | 0 .../cleanup/drop-database.stdout.log | 1 + .../pg-stat-activity-before.stderr.log | 0 .../pg-stat-activity-before.stdout.log | 1 + .../cleanup/terminate-sessions.stderr.log | 0 .../cleanup/terminate-sessions.stdout.log | 1 + .../cleanup/verify-database-absent.stderr.log | 0 .../cleanup/verify-database-absent.stdout.log | 1 + .../connection-count-after.stderr.log | 0 .../connection-count-after.stdout.log | 1 + .../connection-count-before.stderr.log | 0 .../connection-count-before.stdout.log | 1 + .../focused-repeat3/repeat-03/coverage.out | 3472 +++++++++++++++ .../repeat-03/create-database.stderr.log | 0 .../repeat-03/create-database.stdout.log | 1 + .../repeat-03/create-pgvector.stderr.log | 0 .../repeat-03/create-pgvector.stdout.log | 1 + .../repeat-03/database-identity.stderr.log | 0 .../repeat-03/database-identity.stdout.log | 1 + .../repeat-03/go-test-summary.json | 40 + .../repeat-03/go-test.stderr.log | 0 .../repeat-03/go-test.stdout.jsonl | 16 + .../pg-stat-activity-after.stderr.log | 0 .../pg-stat-activity-after.stdout.log | 1 + .../pg-stat-activity-before.stderr.log | 0 .../pg-stat-activity-before.stdout.log | 1 + .../repeat-03/repeat-summary.json | 33 + .../server-connection-count-after.stderr.log | 0 .../server-connection-count-after.stdout.log | 1 + .../server-connection-count-before.stderr.log | 0 .../server-connection-count-before.stdout.log | 1 + .../repeat-03/targeted-coverage.stderr.log | 0 .../repeat-03/targeted-coverage.stdout.log | 352 ++ .../evidence/focused-repeat3/summary.json | 130 + .../evidence/full-internal-mcp/commands.json | 442 ++ .../full-internal-mcp/environment.json | 52 + .../full-internal-mcp/go-version.stderr.log | 0 .../full-internal-mcp/go-version.stdout.log | 1 + .../postgres-container-identity.stderr.log | 0 .../postgres-container-identity.stdout.log | 1 + .../postgres-server-identity.stderr.log | 0 .../postgres-server-identity.stdout.log | 1 + .../repeat-01/assert-go-test-json.stderr.log | 0 .../repeat-01/assert-go-test-json.stdout.log | 2 + .../repeat-01/cleanup-process.stderr.log | 0 .../repeat-01/cleanup-process.stdout.log | 2 + .../repeat-01/cleanup/cleanup.json | 170 + .../cleanup/database-exists-before.stderr.log | 0 .../cleanup/database-exists-before.stdout.log | 1 + .../cleanup/drop-database.stderr.log | 0 .../cleanup/drop-database.stdout.log | 1 + .../pg-stat-activity-before.stderr.log | 0 .../pg-stat-activity-before.stdout.log | 1 + .../cleanup/terminate-sessions.stderr.log | 0 .../cleanup/terminate-sessions.stdout.log | 1 + .../cleanup/verify-database-absent.stderr.log | 0 .../cleanup/verify-database-absent.stdout.log | 1 + .../connection-count-after.stderr.log | 0 .../connection-count-after.stdout.log | 1 + .../connection-count-before.stderr.log | 0 .../connection-count-before.stdout.log | 1 + .../full-internal-mcp/repeat-01/coverage.out | 3472 +++++++++++++++ .../repeat-01/create-database.stderr.log | 0 .../repeat-01/create-database.stdout.log | 1 + .../repeat-01/create-pgvector.stderr.log | 0 .../repeat-01/create-pgvector.stdout.log | 1 + .../repeat-01/database-identity.stderr.log | 0 .../repeat-01/database-identity.stdout.log | 1 + .../repeat-01/go-test-summary.json | 3936 +++++++++++++++++ .../repeat-01/go-test.stderr.log | 0 .../repeat-01/go-test.stdout.jsonl | 2446 ++++++++++ .../pg-stat-activity-after.stderr.log | 0 .../pg-stat-activity-after.stdout.log | 1 + .../pg-stat-activity-before.stderr.log | 0 .../pg-stat-activity-before.stdout.log | 1 + .../repeat-01/repeat-summary.json | 36 + .../server-connection-count-after.stderr.log | 0 .../server-connection-count-after.stdout.log | 1 + .../server-connection-count-before.stderr.log | 0 .../server-connection-count-before.stdout.log | 1 + .../repeat-01/targeted-coverage.stderr.log | 0 .../repeat-01/targeted-coverage.stdout.log | 352 ++ .../evidence/full-internal-mcp/summary.json | 67 + .../evidence/gitleaks-exact-maker.json | 1 + .../commands.json | 444 ++ .../environment.json | 52 + .../go-version.stderr.log | 0 .../go-version.stdout.log | 1 + .../postgres-container-identity.stderr.log | 0 .../postgres-container-identity.stdout.log | 1 + .../postgres-server-identity.stderr.log | 0 .../postgres-server-identity.stdout.log | 1 + .../repeat-01/assert-go-test-json.stderr.log | 0 .../repeat-01/assert-go-test-json.stdout.log | 2 + .../repeat-01/cleanup-process.stderr.log | 0 .../repeat-01/cleanup-process.stdout.log | 2 + .../repeat-01/cleanup/cleanup.json | 170 + .../cleanup/database-exists-before.stderr.log | 0 .../cleanup/database-exists-before.stdout.log | 1 + .../cleanup/drop-database.stderr.log | 0 .../cleanup/drop-database.stdout.log | 1 + .../pg-stat-activity-before.stderr.log | 0 .../pg-stat-activity-before.stdout.log | 1 + .../cleanup/terminate-sessions.stderr.log | 0 .../cleanup/terminate-sessions.stdout.log | 1 + .../cleanup/verify-database-absent.stderr.log | 0 .../cleanup/verify-database-absent.stdout.log | 1 + .../connection-count-after.stderr.log | 0 .../connection-count-after.stdout.log | 1 + .../connection-count-before.stderr.log | 0 .../connection-count-before.stdout.log | 1 + .../repeat-01/coverage.out | 3472 +++++++++++++++ .../repeat-01/create-database.stderr.log | 0 .../repeat-01/create-database.stdout.log | 1 + .../repeat-01/create-pgvector.stderr.log | 0 .../repeat-01/create-pgvector.stdout.log | 1 + .../repeat-01/database-identity.stderr.log | 0 .../repeat-01/database-identity.stdout.log | 1 + .../repeat-01/go-test-summary.json | 40 + .../repeat-01/go-test.stderr.log | 0 .../repeat-01/go-test.stdout.jsonl | 16 + .../pg-stat-activity-after.stderr.log | 0 .../pg-stat-activity-after.stdout.log | 1 + .../pg-stat-activity-before.stderr.log | 0 .../pg-stat-activity-before.stdout.log | 1 + .../repeat-01/repeat-summary.json | 33 + .../server-connection-count-after.stderr.log | 0 .../server-connection-count-after.stdout.log | 1 + .../server-connection-count-before.stderr.log | 0 .../server-connection-count-before.stdout.log | 1 + .../repeat-01/targeted-coverage.stderr.log | 0 .../repeat-01/targeted-coverage.stdout.log | 352 ++ .../summary.json | 64 + .../parent-original-red/commands.json | 444 ++ .../parent-original-red/environment.json | 52 + .../parent-original-red/go-version.stderr.log | 0 .../parent-original-red/go-version.stdout.log | 1 + .../postgres-container-identity.stderr.log | 0 .../postgres-container-identity.stdout.log | 1 + .../postgres-server-identity.stderr.log | 0 .../postgres-server-identity.stdout.log | 1 + .../repeat-01/assert-go-test-json.stderr.log | 0 .../repeat-01/assert-go-test-json.stdout.log | 2 + .../repeat-01/cleanup-process.stderr.log | 0 .../repeat-01/cleanup-process.stdout.log | 2 + .../repeat-01/cleanup/cleanup.json | 170 + .../cleanup/database-exists-before.stderr.log | 0 .../cleanup/database-exists-before.stdout.log | 1 + .../cleanup/drop-database.stderr.log | 0 .../cleanup/drop-database.stdout.log | 1 + .../pg-stat-activity-before.stderr.log | 0 .../pg-stat-activity-before.stdout.log | 1 + .../cleanup/terminate-sessions.stderr.log | 0 .../cleanup/terminate-sessions.stdout.log | 1 + .../cleanup/verify-database-absent.stderr.log | 0 .../cleanup/verify-database-absent.stdout.log | 1 + .../connection-count-after.stderr.log | 0 .../connection-count-after.stdout.log | 1 + .../connection-count-before.stderr.log | 0 .../connection-count-before.stdout.log | 1 + .../repeat-01/coverage.out | 3472 +++++++++++++++ .../repeat-01/create-database.stderr.log | 0 .../repeat-01/create-database.stdout.log | 1 + .../repeat-01/create-pgvector.stderr.log | 0 .../repeat-01/create-pgvector.stdout.log | 1 + .../repeat-01/database-identity.stderr.log | 0 .../repeat-01/database-identity.stdout.log | 1 + .../repeat-01/go-test-summary.json | 40 + .../repeat-01/go-test.stderr.log | 0 .../repeat-01/go-test.stdout.jsonl | 21 + .../pg-stat-activity-after.stderr.log | 0 .../pg-stat-activity-after.stdout.log | 1 + .../pg-stat-activity-before.stderr.log | 0 .../pg-stat-activity-before.stdout.log | 1 + .../repeat-01/repeat-summary.json | 36 + .../server-connection-count-after.stderr.log | 0 .../server-connection-count-after.stdout.log | 1 + .../server-connection-count-before.stderr.log | 0 .../server-connection-count-before.stdout.log | 1 + .../repeat-01/targeted-coverage.stderr.log | 0 .../repeat-01/targeted-coverage.stdout.log | 352 ++ .../evidence/parent-original-red/summary.json | 67 + .../prove-it-old-assertion/commands.json | 444 ++ .../prove-it-old-assertion/environment.json | 52 + .../go-version.stderr.log | 0 .../go-version.stdout.log | 1 + .../postgres-container-identity.stderr.log | 0 .../postgres-container-identity.stdout.log | 1 + .../postgres-server-identity.stderr.log | 0 .../postgres-server-identity.stdout.log | 1 + .../repeat-01/assert-go-test-json.stderr.log | 0 .../repeat-01/assert-go-test-json.stdout.log | 2 + .../repeat-01/cleanup-process.stderr.log | 0 .../repeat-01/cleanup-process.stdout.log | 2 + .../repeat-01/cleanup/cleanup.json | 170 + .../cleanup/database-exists-before.stderr.log | 0 .../cleanup/database-exists-before.stdout.log | 1 + .../cleanup/drop-database.stderr.log | 0 .../cleanup/drop-database.stdout.log | 1 + .../pg-stat-activity-before.stderr.log | 0 .../pg-stat-activity-before.stdout.log | 1 + .../cleanup/terminate-sessions.stderr.log | 0 .../cleanup/terminate-sessions.stdout.log | 1 + .../cleanup/verify-database-absent.stderr.log | 0 .../cleanup/verify-database-absent.stdout.log | 1 + .../connection-count-after.stderr.log | 0 .../connection-count-after.stdout.log | 1 + .../connection-count-before.stderr.log | 0 .../connection-count-before.stdout.log | 1 + .../repeat-01/coverage.out | 3472 +++++++++++++++ .../repeat-01/create-database.stderr.log | 0 .../repeat-01/create-database.stdout.log | 1 + .../repeat-01/create-pgvector.stderr.log | 0 .../repeat-01/create-pgvector.stdout.log | 1 + .../repeat-01/database-identity.stderr.log | 0 .../repeat-01/database-identity.stdout.log | 1 + .../repeat-01/go-test-summary.json | 40 + .../repeat-01/go-test.stderr.log | 0 .../repeat-01/go-test.stdout.jsonl | 21 + .../pg-stat-activity-after.stderr.log | 0 .../pg-stat-activity-after.stdout.log | 1 + .../pg-stat-activity-before.stderr.log | 0 .../pg-stat-activity-before.stdout.log | 1 + .../repeat-01/repeat-summary.json | 36 + .../server-connection-count-after.stderr.log | 0 .../server-connection-count-after.stdout.log | 1 + .../server-connection-count-before.stderr.log | 0 .../server-connection-count-before.stdout.log | 1 + .../repeat-01/targeted-coverage.stderr.log | 0 .../repeat-01/targeted-coverage.stdout.log | 352 ++ .../prove-it-old-assertion/summary.json | 67 + .../verification-summary.json | 83 + 573 files changed, 62205 insertions(+) create mode 100644 .agent/reviews/t007-r1-fresh-checker/checker-report.md create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/commands.json create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/environment.json create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/go-version.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/go-version.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/postgres-container-identity.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/postgres-container-identity.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/postgres-server-identity.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/postgres-server-identity.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/repeat-01/assert-go-test-json.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/repeat-01/assert-go-test-json.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/repeat-01/cleanup-process.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/repeat-01/cleanup-process.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/repeat-01/cleanup/cleanup.json create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/repeat-01/cleanup/database-exists-before.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/repeat-01/cleanup/database-exists-before.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/repeat-01/cleanup/drop-database.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/repeat-01/cleanup/drop-database.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/repeat-01/cleanup/pg-stat-activity-before.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/repeat-01/cleanup/pg-stat-activity-before.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/repeat-01/cleanup/terminate-sessions.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/repeat-01/cleanup/terminate-sessions.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/repeat-01/cleanup/verify-database-absent.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/repeat-01/cleanup/verify-database-absent.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/repeat-01/connection-count-after.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/repeat-01/connection-count-after.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/repeat-01/connection-count-before.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/repeat-01/connection-count-before.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/repeat-01/coverage.out create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/repeat-01/create-database.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/repeat-01/create-database.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/repeat-01/create-pgvector.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/repeat-01/create-pgvector.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/repeat-01/database-identity.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/repeat-01/database-identity.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/repeat-01/go-test-summary.json create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/repeat-01/go-test.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/repeat-01/go-test.stdout.jsonl create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/repeat-01/pg-stat-activity-after.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/repeat-01/pg-stat-activity-after.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/repeat-01/pg-stat-activity-before.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/repeat-01/pg-stat-activity-before.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/repeat-01/repeat-summary.json create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/repeat-01/server-connection-count-after.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/repeat-01/server-connection-count-after.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/repeat-01/server-connection-count-before.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/repeat-01/server-connection-count-before.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/repeat-01/targeted-coverage.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/repeat-01/targeted-coverage.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/summary.json create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/commands.json create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/environment.json create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/go-version.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/go-version.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/postgres-container-identity.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/postgres-container-identity.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/postgres-server-identity.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/postgres-server-identity.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/repeat-01/assert-go-test-json.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/repeat-01/assert-go-test-json.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/repeat-01/cleanup-process.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/repeat-01/cleanup-process.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/repeat-01/cleanup/cleanup.json create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/repeat-01/cleanup/database-exists-before.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/repeat-01/cleanup/database-exists-before.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/repeat-01/cleanup/drop-database.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/repeat-01/cleanup/drop-database.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/repeat-01/cleanup/pg-stat-activity-before.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/repeat-01/cleanup/pg-stat-activity-before.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/repeat-01/cleanup/terminate-sessions.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/repeat-01/cleanup/terminate-sessions.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/repeat-01/cleanup/verify-database-absent.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/repeat-01/cleanup/verify-database-absent.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/repeat-01/connection-count-after.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/repeat-01/connection-count-after.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/repeat-01/connection-count-before.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/repeat-01/connection-count-before.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/repeat-01/coverage.out create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/repeat-01/create-database.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/repeat-01/create-database.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/repeat-01/create-pgvector.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/repeat-01/create-pgvector.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/repeat-01/database-identity.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/repeat-01/database-identity.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/repeat-01/go-test-summary.json create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/repeat-01/go-test.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/repeat-01/go-test.stdout.jsonl create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/repeat-01/pg-stat-activity-after.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/repeat-01/pg-stat-activity-after.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/repeat-01/pg-stat-activity-before.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/repeat-01/pg-stat-activity-before.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/repeat-01/repeat-summary.json create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/repeat-01/server-connection-count-after.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/repeat-01/server-connection-count-after.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/repeat-01/server-connection-count-before.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/repeat-01/server-connection-count-before.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/repeat-01/targeted-coverage.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/repeat-01/targeted-coverage.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/summary.json create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/commands.json create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/environment.json create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/go-version.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/go-version.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/postgres-container-identity.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/postgres-container-identity.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/postgres-server-identity.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/postgres-server-identity.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/repeat-01/assert-go-test-json.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/repeat-01/assert-go-test-json.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/repeat-01/cleanup-process.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/repeat-01/cleanup-process.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/repeat-01/cleanup/cleanup.json create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/repeat-01/cleanup/database-exists-before.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/repeat-01/cleanup/database-exists-before.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/repeat-01/cleanup/drop-database.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/repeat-01/cleanup/drop-database.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/repeat-01/cleanup/pg-stat-activity-before.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/repeat-01/cleanup/pg-stat-activity-before.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/repeat-01/cleanup/terminate-sessions.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/repeat-01/cleanup/terminate-sessions.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/repeat-01/cleanup/verify-database-absent.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/repeat-01/cleanup/verify-database-absent.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/repeat-01/connection-count-after.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/repeat-01/connection-count-after.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/repeat-01/connection-count-before.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/repeat-01/connection-count-before.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/repeat-01/coverage.out create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/repeat-01/create-database.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/repeat-01/create-database.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/repeat-01/create-pgvector.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/repeat-01/create-pgvector.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/repeat-01/database-identity.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/repeat-01/database-identity.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/repeat-01/go-test-summary.json create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/repeat-01/go-test.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/repeat-01/go-test.stdout.jsonl create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/repeat-01/pg-stat-activity-after.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/repeat-01/pg-stat-activity-after.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/repeat-01/pg-stat-activity-before.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/repeat-01/pg-stat-activity-before.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/repeat-01/repeat-summary.json create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/repeat-01/server-connection-count-after.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/repeat-01/server-connection-count-after.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/repeat-01/server-connection-count-before.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/repeat-01/server-connection-count-before.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/repeat-01/targeted-coverage.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/repeat-01/targeted-coverage.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/summary.json create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/commands.json create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/environment.json create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/go-version.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/go-version.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/postgres-container-identity.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/postgres-container-identity.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/postgres-server-identity.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/postgres-server-identity.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/repeat-01/assert-go-test-json.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/repeat-01/assert-go-test-json.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/repeat-01/cleanup-process.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/repeat-01/cleanup-process.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/repeat-01/cleanup/cleanup.json create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/repeat-01/cleanup/database-exists-before.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/repeat-01/cleanup/database-exists-before.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/repeat-01/cleanup/drop-database.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/repeat-01/cleanup/drop-database.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/repeat-01/cleanup/pg-stat-activity-before.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/repeat-01/cleanup/pg-stat-activity-before.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/repeat-01/cleanup/terminate-sessions.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/repeat-01/cleanup/terminate-sessions.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/repeat-01/cleanup/verify-database-absent.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/repeat-01/cleanup/verify-database-absent.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/repeat-01/connection-count-after.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/repeat-01/connection-count-after.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/repeat-01/connection-count-before.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/repeat-01/connection-count-before.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/repeat-01/coverage.out create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/repeat-01/create-database.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/repeat-01/create-database.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/repeat-01/create-pgvector.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/repeat-01/create-pgvector.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/repeat-01/database-identity.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/repeat-01/database-identity.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/repeat-01/go-test-summary.json create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/repeat-01/go-test.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/repeat-01/go-test.stdout.jsonl create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/repeat-01/pg-stat-activity-after.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/repeat-01/pg-stat-activity-after.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/repeat-01/pg-stat-activity-before.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/repeat-01/pg-stat-activity-before.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/repeat-01/repeat-summary.json create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/repeat-01/server-connection-count-after.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/repeat-01/server-connection-count-after.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/repeat-01/server-connection-count-before.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/repeat-01/server-connection-count-before.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/repeat-01/targeted-coverage.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/repeat-01/targeted-coverage.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/summary.json create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-race/commands.json create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-race/environment.json create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-race/go-version.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-race/go-version.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-race/postgres-container-identity.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-race/postgres-container-identity.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-race/postgres-server-identity.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-race/postgres-server-identity.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-race/repeat-01/assert-go-test-json.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-race/repeat-01/assert-go-test-json.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-race/repeat-01/cleanup-process.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-race/repeat-01/cleanup-process.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-race/repeat-01/cleanup/cleanup.json create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-race/repeat-01/cleanup/database-exists-before.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-race/repeat-01/cleanup/database-exists-before.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-race/repeat-01/cleanup/drop-database.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-race/repeat-01/cleanup/drop-database.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-race/repeat-01/cleanup/pg-stat-activity-before.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-race/repeat-01/cleanup/pg-stat-activity-before.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-race/repeat-01/cleanup/terminate-sessions.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-race/repeat-01/cleanup/terminate-sessions.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-race/repeat-01/cleanup/verify-database-absent.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-race/repeat-01/cleanup/verify-database-absent.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-race/repeat-01/connection-count-after.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-race/repeat-01/connection-count-after.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-race/repeat-01/connection-count-before.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-race/repeat-01/connection-count-before.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-race/repeat-01/coverage.out create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-race/repeat-01/create-database.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-race/repeat-01/create-database.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-race/repeat-01/create-pgvector.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-race/repeat-01/create-pgvector.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-race/repeat-01/database-identity.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-race/repeat-01/database-identity.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-race/repeat-01/go-test-summary.json create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-race/repeat-01/go-test.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-race/repeat-01/go-test.stdout.jsonl create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-race/repeat-01/pg-stat-activity-after.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-race/repeat-01/pg-stat-activity-after.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-race/repeat-01/pg-stat-activity-before.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-race/repeat-01/pg-stat-activity-before.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-race/repeat-01/repeat-summary.json create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-race/repeat-01/server-connection-count-after.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-race/repeat-01/server-connection-count-after.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-race/repeat-01/server-connection-count-before.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-race/repeat-01/server-connection-count-before.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-race/repeat-01/targeted-coverage.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-race/repeat-01/targeted-coverage.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-race/summary.json create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/commands.json create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/environment.json create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/go-version.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/go-version.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/postgres-container-identity.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/postgres-container-identity.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/postgres-server-identity.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/postgres-server-identity.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-01/assert-go-test-json.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-01/assert-go-test-json.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-01/cleanup-process.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-01/cleanup-process.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-01/cleanup/cleanup.json create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-01/cleanup/database-exists-before.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-01/cleanup/database-exists-before.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-01/cleanup/drop-database.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-01/cleanup/drop-database.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-01/cleanup/pg-stat-activity-before.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-01/cleanup/pg-stat-activity-before.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-01/cleanup/terminate-sessions.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-01/cleanup/terminate-sessions.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-01/cleanup/verify-database-absent.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-01/cleanup/verify-database-absent.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-01/connection-count-after.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-01/connection-count-after.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-01/connection-count-before.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-01/connection-count-before.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-01/coverage.out create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-01/create-database.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-01/create-database.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-01/create-pgvector.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-01/create-pgvector.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-01/database-identity.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-01/database-identity.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-01/go-test-summary.json create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-01/go-test.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-01/go-test.stdout.jsonl create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-01/pg-stat-activity-after.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-01/pg-stat-activity-after.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-01/pg-stat-activity-before.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-01/pg-stat-activity-before.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-01/repeat-summary.json create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-01/server-connection-count-after.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-01/server-connection-count-after.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-01/server-connection-count-before.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-01/server-connection-count-before.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-01/targeted-coverage.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-01/targeted-coverage.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-02/assert-go-test-json.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-02/assert-go-test-json.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-02/cleanup-process.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-02/cleanup-process.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-02/cleanup/cleanup.json create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-02/cleanup/database-exists-before.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-02/cleanup/database-exists-before.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-02/cleanup/drop-database.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-02/cleanup/drop-database.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-02/cleanup/pg-stat-activity-before.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-02/cleanup/pg-stat-activity-before.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-02/cleanup/terminate-sessions.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-02/cleanup/terminate-sessions.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-02/cleanup/verify-database-absent.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-02/cleanup/verify-database-absent.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-02/connection-count-after.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-02/connection-count-after.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-02/connection-count-before.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-02/connection-count-before.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-02/coverage.out create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-02/create-database.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-02/create-database.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-02/create-pgvector.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-02/create-pgvector.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-02/database-identity.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-02/database-identity.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-02/go-test-summary.json create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-02/go-test.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-02/go-test.stdout.jsonl create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-02/pg-stat-activity-after.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-02/pg-stat-activity-after.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-02/pg-stat-activity-before.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-02/pg-stat-activity-before.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-02/repeat-summary.json create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-02/server-connection-count-after.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-02/server-connection-count-after.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-02/server-connection-count-before.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-02/server-connection-count-before.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-02/targeted-coverage.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-02/targeted-coverage.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-03/assert-go-test-json.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-03/assert-go-test-json.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-03/cleanup-process.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-03/cleanup-process.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-03/cleanup/cleanup.json create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-03/cleanup/database-exists-before.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-03/cleanup/database-exists-before.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-03/cleanup/drop-database.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-03/cleanup/drop-database.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-03/cleanup/pg-stat-activity-before.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-03/cleanup/pg-stat-activity-before.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-03/cleanup/terminate-sessions.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-03/cleanup/terminate-sessions.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-03/cleanup/verify-database-absent.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-03/cleanup/verify-database-absent.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-03/connection-count-after.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-03/connection-count-after.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-03/connection-count-before.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-03/connection-count-before.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-03/coverage.out create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-03/create-database.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-03/create-database.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-03/create-pgvector.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-03/create-pgvector.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-03/database-identity.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-03/database-identity.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-03/go-test-summary.json create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-03/go-test.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-03/go-test.stdout.jsonl create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-03/pg-stat-activity-after.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-03/pg-stat-activity-after.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-03/pg-stat-activity-before.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-03/pg-stat-activity-before.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-03/repeat-summary.json create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-03/server-connection-count-after.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-03/server-connection-count-after.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-03/server-connection-count-before.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-03/server-connection-count-before.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-03/targeted-coverage.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-03/targeted-coverage.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/summary.json create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/commands.json create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/environment.json create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/go-version.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/go-version.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/postgres-container-identity.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/postgres-container-identity.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/postgres-server-identity.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/postgres-server-identity.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/repeat-01/assert-go-test-json.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/repeat-01/assert-go-test-json.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/repeat-01/cleanup-process.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/repeat-01/cleanup-process.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/repeat-01/cleanup/cleanup.json create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/repeat-01/cleanup/database-exists-before.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/repeat-01/cleanup/database-exists-before.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/repeat-01/cleanup/drop-database.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/repeat-01/cleanup/drop-database.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/repeat-01/cleanup/pg-stat-activity-before.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/repeat-01/cleanup/pg-stat-activity-before.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/repeat-01/cleanup/terminate-sessions.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/repeat-01/cleanup/terminate-sessions.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/repeat-01/cleanup/verify-database-absent.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/repeat-01/cleanup/verify-database-absent.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/repeat-01/connection-count-after.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/repeat-01/connection-count-after.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/repeat-01/connection-count-before.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/repeat-01/connection-count-before.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/repeat-01/coverage.out create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/repeat-01/create-database.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/repeat-01/create-database.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/repeat-01/create-pgvector.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/repeat-01/create-pgvector.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/repeat-01/database-identity.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/repeat-01/database-identity.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/repeat-01/go-test-summary.json create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/repeat-01/go-test.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/repeat-01/go-test.stdout.jsonl create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/repeat-01/pg-stat-activity-after.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/repeat-01/pg-stat-activity-after.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/repeat-01/pg-stat-activity-before.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/repeat-01/pg-stat-activity-before.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/repeat-01/repeat-summary.json create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/repeat-01/server-connection-count-after.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/repeat-01/server-connection-count-after.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/repeat-01/server-connection-count-before.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/repeat-01/server-connection-count-before.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/repeat-01/targeted-coverage.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/repeat-01/targeted-coverage.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/summary.json create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/gitleaks-exact-maker.json create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/commands.json create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/environment.json create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/go-version.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/go-version.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/postgres-container-identity.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/postgres-container-identity.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/postgres-server-identity.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/postgres-server-identity.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/repeat-01/assert-go-test-json.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/repeat-01/assert-go-test-json.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/repeat-01/cleanup-process.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/repeat-01/cleanup-process.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/repeat-01/cleanup/cleanup.json create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/repeat-01/cleanup/database-exists-before.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/repeat-01/cleanup/database-exists-before.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/repeat-01/cleanup/drop-database.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/repeat-01/cleanup/drop-database.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/repeat-01/cleanup/pg-stat-activity-before.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/repeat-01/cleanup/pg-stat-activity-before.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/repeat-01/cleanup/terminate-sessions.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/repeat-01/cleanup/terminate-sessions.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/repeat-01/cleanup/verify-database-absent.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/repeat-01/cleanup/verify-database-absent.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/repeat-01/connection-count-after.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/repeat-01/connection-count-after.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/repeat-01/connection-count-before.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/repeat-01/connection-count-before.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/repeat-01/coverage.out create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/repeat-01/create-database.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/repeat-01/create-database.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/repeat-01/create-pgvector.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/repeat-01/create-pgvector.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/repeat-01/database-identity.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/repeat-01/database-identity.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/repeat-01/go-test-summary.json create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/repeat-01/go-test.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/repeat-01/go-test.stdout.jsonl create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/repeat-01/pg-stat-activity-after.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/repeat-01/pg-stat-activity-after.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/repeat-01/pg-stat-activity-before.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/repeat-01/pg-stat-activity-before.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/repeat-01/repeat-summary.json create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/repeat-01/server-connection-count-after.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/repeat-01/server-connection-count-after.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/repeat-01/server-connection-count-before.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/repeat-01/server-connection-count-before.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/repeat-01/targeted-coverage.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/repeat-01/targeted-coverage.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/summary.json create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/commands.json create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/environment.json create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/go-version.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/go-version.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/postgres-container-identity.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/postgres-container-identity.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/postgres-server-identity.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/postgres-server-identity.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/repeat-01/assert-go-test-json.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/repeat-01/assert-go-test-json.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/repeat-01/cleanup-process.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/repeat-01/cleanup-process.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/repeat-01/cleanup/cleanup.json create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/repeat-01/cleanup/database-exists-before.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/repeat-01/cleanup/database-exists-before.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/repeat-01/cleanup/drop-database.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/repeat-01/cleanup/drop-database.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/repeat-01/cleanup/pg-stat-activity-before.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/repeat-01/cleanup/pg-stat-activity-before.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/repeat-01/cleanup/terminate-sessions.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/repeat-01/cleanup/terminate-sessions.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/repeat-01/cleanup/verify-database-absent.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/repeat-01/cleanup/verify-database-absent.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/repeat-01/connection-count-after.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/repeat-01/connection-count-after.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/repeat-01/connection-count-before.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/repeat-01/connection-count-before.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/repeat-01/coverage.out create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/repeat-01/create-database.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/repeat-01/create-database.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/repeat-01/create-pgvector.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/repeat-01/create-pgvector.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/repeat-01/database-identity.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/repeat-01/database-identity.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/repeat-01/go-test-summary.json create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/repeat-01/go-test.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/repeat-01/go-test.stdout.jsonl create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/repeat-01/pg-stat-activity-after.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/repeat-01/pg-stat-activity-after.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/repeat-01/pg-stat-activity-before.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/repeat-01/pg-stat-activity-before.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/repeat-01/repeat-summary.json create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/repeat-01/server-connection-count-after.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/repeat-01/server-connection-count-after.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/repeat-01/server-connection-count-before.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/repeat-01/server-connection-count-before.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/repeat-01/targeted-coverage.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/repeat-01/targeted-coverage.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/summary.json create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/commands.json create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/environment.json create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/go-version.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/go-version.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/postgres-container-identity.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/postgres-container-identity.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/postgres-server-identity.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/postgres-server-identity.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/repeat-01/assert-go-test-json.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/repeat-01/assert-go-test-json.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/repeat-01/cleanup-process.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/repeat-01/cleanup-process.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/repeat-01/cleanup/cleanup.json create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/repeat-01/cleanup/database-exists-before.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/repeat-01/cleanup/database-exists-before.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/repeat-01/cleanup/drop-database.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/repeat-01/cleanup/drop-database.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/repeat-01/cleanup/pg-stat-activity-before.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/repeat-01/cleanup/pg-stat-activity-before.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/repeat-01/cleanup/terminate-sessions.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/repeat-01/cleanup/terminate-sessions.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/repeat-01/cleanup/verify-database-absent.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/repeat-01/cleanup/verify-database-absent.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/repeat-01/connection-count-after.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/repeat-01/connection-count-after.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/repeat-01/connection-count-before.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/repeat-01/connection-count-before.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/repeat-01/coverage.out create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/repeat-01/create-database.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/repeat-01/create-database.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/repeat-01/create-pgvector.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/repeat-01/create-pgvector.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/repeat-01/database-identity.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/repeat-01/database-identity.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/repeat-01/go-test-summary.json create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/repeat-01/go-test.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/repeat-01/go-test.stdout.jsonl create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/repeat-01/pg-stat-activity-after.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/repeat-01/pg-stat-activity-after.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/repeat-01/pg-stat-activity-before.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/repeat-01/pg-stat-activity-before.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/repeat-01/repeat-summary.json create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/repeat-01/server-connection-count-after.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/repeat-01/server-connection-count-after.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/repeat-01/server-connection-count-before.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/repeat-01/server-connection-count-before.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/repeat-01/targeted-coverage.stderr.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/repeat-01/targeted-coverage.stdout.log create mode 100644 .agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/summary.json create mode 100644 .agent/reviews/t007-r1-fresh-checker/verification-summary.json diff --git a/.agent/reviews/t007-r1-fresh-checker/checker-report.md b/.agent/reviews/t007-r1-fresh-checker/checker-report.md new file mode 100644 index 00000000..c192bfa0 --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/checker-report.md @@ -0,0 +1,62 @@ +# T007 R1 independent checker report + +## Verdict + +**ACCEPT_WITH_MEDIUM_AUDIT_CORRECTION.** The T007 change is a test-only correction to the current flag-off compatibility contract. There are no CRITICAL or HIGH findings, no production-code changes, and no v5-demolished behavior was restored. The single MEDIUM finding corrects the maker handoff's path-digest serialization; it does not change the validated path set or immutable maker tree. + +## Immutable maker and scope + +- Maker: `1418796e55e8b5bfbb216ffbf5a3fba9fa620922` +- Required/direct parent: `af1ed63536829916e0477be719a30a57a8d9227a` +- Maker tree: `a08b92b88d5ac5570e25f3b8ef19ad0acf1727b6` +- Maker worktree was clean before checker work began. +- Exact diff: 331 paths — one test path, 329 paths under `.agent/reports/evidence/production-ready/t007-compat/**`, and one maker report under `.agent/reports/production-ready/t007-compat-demolition-classification/**`. +- The only product/test path is `internal/mcp/store_memory_compat_t007_test.go`. There is no production-code diff. + +The maker's `5B4915A5...` digest is reproducible only with culture-aware PowerShell `Sort-Object`. The active platform digest contract uses ordinal normalized repository paths with one LF per entry. The corrected digest for the same 331-path set is: + +`1d545a9ff8ff89dcd4a7a363ab621b3e7c28d9bc67c235ba715ec30cd98c294b` + +## Semantic review + +The changed test fixes `ENGRAM_VNEXT_F_ENABLED` to off before constructing the store. The raw SQL projection independently proves that the global-tagged fixture has a non-zero durable ID and persisted `privacy_scope='global'`. `MemoryStore.List` then must return that exact row by ID and exact content. This is the correct flag-off contract because `memoryRowToModel` intentionally omits `Memory.PrivacyScope` unless `ENGRAM_VNEXT_F_ENABLED == "true"` to preserve the v6.4 response shape. + +The three test rows use a UUID-scoped project and distinct content, and are inserted in deterministic ID order. Matching `rows[0].ID` plus `rows[0].Content` cannot be satisfied by the project-tagged or untagged fixture. + +## Independent adversarial evidence + +- Original parent with flag explicitly off: expected RED, exactly one failed T007 test, zero skips, clean database teardown. +- Maker with the old `PrivacyScope` assertion restored: expected RED, exactly the T007 test failed. +- Wrong fixture-ID mutation: expected RED at the exact-content assertion. +- Raw backfill corruption (`SET privacy_scope='project'`): expected RED at the SQL `global` assertion. +- Parent with ambient flag `true`: false green reproduced, proving the old test was environment/order dependent. +- Maker reset with ambient flag `true` plus a temporary checker guard: PASS, proving the committed `t.Setenv(..., "")` overrides ambient state. +- Removing the reset while retaining the temporary checker guard: expected RED. +- Every temporary test mutation was restored from the immutable maker commit before final gates. + +## Runtime and static gates + +- Fresh PostgreSQL 17.10 focused repeat: 3/3 PASS, zero skips, zero non-zero child commands. +- Fresh PostgreSQL 17.10 race run: 1/1 PASS, zero skips, zero non-zero child commands. +- Full fresh-DB `./internal/mcp`: 488 tests, 487 PASS, one FAIL, zero skips. Both T007 tests passed. The sole failure was the already-owned `TestHybridTG3_ConfidenceMin_FloorEnforced_T022`. +- All 12 checker-run disposable databases were absent after cleanup; their session residue was also empty. +- `go build ./...`: PASS. +- `go vet ./...`: PASS. +- Maker-range and worktree `git diff --check`: PASS. +- Exact-maker-commit gitleaks: one commit scanned, zero findings. +- Synthesis-preview merge-tree with `0c6269908aa810a2248f2bfaf3fca4f9f5791359`: PASS; result tree `9421a8eae8c9579dfe6800e6d16f26840269823a`. +- Maker JSON evidence: 40/40 files parsed. + +## Findings + +### T007-R1-AUDIT-001 — MEDIUM, non-blocking + +The maker path digest used culture-aware sorting instead of ordinal sorting. This is an audit-presentation defect, not a path-set or code defect. The corrected active-contract digest is recorded above and in `verification-summary.json`. + +## Reusability candidates + +- none — evaluated; the change is a single compatibility regression-test correction, not a reusable component boundary. + +## Cleanup and handoff + +The temporary detached parent worktree was clean and removed. The checker branch contains only artifacts under `.agent/reviews/t007-r1-fresh-checker/**`; it must remain a direct child of the maker commit and is not integrated, pushed, tagged, or merged by this checker. diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/commands.json b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/commands.json new file mode 100644 index 00000000..22fbb3d5 --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/commands.json @@ -0,0 +1,444 @@ +[ + { + "name": "go-version", + "executable": "C:\\Program Files\\Go\\bin\\go.exe", + "arguments": [ + "version" + ], + "environment_keys": [], + "command": "C:\\Program Files\\Go\\bin\\go.exe version", + "started_at": "2026-07-11T01:00:48.3816221+00:00", + "finished_at": "2026-07-11T01:00:48.5787532+00:00", + "duration_seconds": 0.197, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-ambient-true-overridden\\go-version.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-ambient-true-overridden\\go-version.stderr.log" + }, + { + "name": "postgres-container-identity", + "executable": "docker", + "arguments": [ + "inspect", + "--format", + "{{.Name}}|{{.Config.Image}}|{{.Image}}|{{.State.Running}}", + "engram-prc-postgres" + ], + "environment_keys": [], + "command": "docker inspect --format {{.Name}}|{{.Config.Image}}|{{.Image}}|{{.State.Running}} engram-prc-postgres", + "started_at": "2026-07-11T01:00:48.6341383+00:00", + "finished_at": "2026-07-11T01:00:49.0403794+00:00", + "duration_seconds": 0.406, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-ambient-true-overridden\\postgres-container-identity.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-ambient-true-overridden\\postgres-container-identity.stderr.log" + }, + { + "name": "postgres-server-identity", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT json_build_object('server_version', current_setting('server_version'), 'server_version_num', current_setting('server_version_num'), 'version', version(), 'max_connections', current_setting('max_connections'), 'superuser_reserved_connections', current_setting('superuser_reserved_connections'), 'reserved_connections', COALESCE(NULLIF(current_setting('reserved_connections', true), ''), '0'), 'current_connections', (SELECT count(*)::text FROM pg_stat_activity), 'database', current_database(), 'schema', current_schema(), 'user', current_user)::text;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT json_build_object('server_version', current_setting('server_version'), 'server_version_num', current_setting('server_version_num'), 'version', version(), 'max_connections', current_setting('max_connections'), 'superuser_reserved_connections', current_setting('superuser_reserved_connections'), 'reserved_connections', COALESCE(NULLIF(current_setting('reserved_connections', true), ''), '0'), 'current_connections', (SELECT count(*)::text FROM pg_stat_activity), 'database', current_database(), 'schema', current_schema(), 'user', current_user)::text;", + "started_at": "2026-07-11T01:00:49.0543190+00:00", + "finished_at": "2026-07-11T01:00:49.4268560+00:00", + "duration_seconds": 0.373, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-ambient-true-overridden\\postgres-server-identity.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-ambient-true-overridden\\postgres-server-identity.stderr.log" + }, + { + "name": "repeat-1-create-database", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "CREATE DATABASE \"engram_prc_rg_test_77fc44a810a688de_r1\" OWNER \"engram\";" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c CREATE DATABASE \"engram_prc_rg_test_77fc44a810a688de_r1\" OWNER \"engram\";", + "started_at": "2026-07-11T01:00:49.4566898+00:00", + "finished_at": "2026-07-11T01:00:49.8436263+00:00", + "duration_seconds": 0.387, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-ambient-true-overridden\\repeat-01\\create-database.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-ambient-true-overridden\\repeat-01\\create-database.stderr.log" + }, + { + "name": "repeat-1-create-pgvector", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "engram_prc_rg_test_77fc44a810a688de_r1", + "-At", + "-F", + "|", + "-c", + "CREATE EXTENSION IF NOT EXISTS vector WITH SCHEMA public;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d engram_prc_rg_test_77fc44a810a688de_r1 -At -F | -c CREATE EXTENSION IF NOT EXISTS vector WITH SCHEMA public;", + "started_at": "2026-07-11T01:00:49.8490925+00:00", + "finished_at": "2026-07-11T01:00:50.2378103+00:00", + "duration_seconds": 0.389, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-ambient-true-overridden\\repeat-01\\create-pgvector.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-ambient-true-overridden\\repeat-01\\create-pgvector.stderr.log" + }, + { + "name": "repeat-1-database-identity", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "engram_prc_rg_test_77fc44a810a688de_r1", + "-At", + "-F", + "|", + "-c", + "SELECT json_build_object('database', current_database(), 'schema', current_schema(), 'server_version', current_setting('server_version'), 'user', current_user)::text;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d engram_prc_rg_test_77fc44a810a688de_r1 -At -F | -c SELECT json_build_object('database', current_database(), 'schema', current_schema(), 'server_version', current_setting('server_version'), 'user', current_user)::text;", + "started_at": "2026-07-11T01:00:50.2402573+00:00", + "finished_at": "2026-07-11T01:00:50.5774397+00:00", + "duration_seconds": 0.337, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-ambient-true-overridden\\repeat-01\\database-identity.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-ambient-true-overridden\\repeat-01\\database-identity.stderr.log" + }, + { + "name": "repeat-1-pg-stat-before", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT COALESCE(json_agg(row_to_json(s)), '[]'::json)::text FROM (SELECT pid, usename, datname, state, backend_type, application_name, client_addr::text AS client_addr, wait_event_type, wait_event, query_start FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_77fc44a810a688de_r1' ORDER BY pid) AS s;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT COALESCE(json_agg(row_to_json(s)), '[]'::json)::text FROM (SELECT pid, usename, datname, state, backend_type, application_name, client_addr::text AS client_addr, wait_event_type, wait_event, query_start FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_77fc44a810a688de_r1' ORDER BY pid) AS s;", + "started_at": "2026-07-11T01:00:50.5818423+00:00", + "finished_at": "2026-07-11T01:00:50.9456971+00:00", + "duration_seconds": 0.364, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-ambient-true-overridden\\repeat-01\\pg-stat-activity-before.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-ambient-true-overridden\\repeat-01\\pg-stat-activity-before.stderr.log" + }, + { + "name": "repeat-1-server-connection-count-before", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT count(*) FROM pg_stat_activity;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT count(*) FROM pg_stat_activity;", + "started_at": "2026-07-11T01:00:50.9478576+00:00", + "finished_at": "2026-07-11T01:00:51.4040478+00:00", + "duration_seconds": 0.456, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-ambient-true-overridden\\repeat-01\\server-connection-count-before.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-ambient-true-overridden\\repeat-01\\server-connection-count-before.stderr.log" + }, + { + "name": "repeat-1-connection-count-before", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT count(*) FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_77fc44a810a688de_r1';" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT count(*) FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_77fc44a810a688de_r1';", + "started_at": "2026-07-11T01:00:51.4130239+00:00", + "finished_at": "2026-07-11T01:00:51.8115954+00:00", + "duration_seconds": 0.399, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-ambient-true-overridden\\repeat-01\\connection-count-before.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-ambient-true-overridden\\repeat-01\\connection-count-before.stderr.log" + }, + { + "name": "repeat-1-go-test", + "executable": "C:\\Program Files\\Go\\bin\\go.exe", + "arguments": [ + "test", + "-json", + "-p", + "1", + "-parallel", + "1", + "-count=1", + "-timeout", + "30m", + "-covermode=atomic", + "-coverprofile=.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-ambient-true-overridden\\repeat-01\\coverage.out", + "-run", + "^TestEC_F1_TagDerivedBackfill_T007$", + "./internal/mcp" + ], + "environment_keys": [ + "DATABASE_DSN", + "DATABASE_MAX_CONNS", + "ENGRAM_RELEASE_GATE_REPEAT", + "ENGRAM_RELEASE_GATE_RUN_ID", + "ENGRAM_TEST_DSN", + "TEST_DATABASE_DSN" + ], + "command": "C:\\Program Files\\Go\\bin\\go.exe test -json -p 1 -parallel 1 -count=1 -timeout 30m -covermode=atomic -coverprofile=.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-ambient-true-overridden\\repeat-01\\coverage.out -run ^TestEC_F1_TagDerivedBackfill_T007$ ./internal/mcp", + "started_at": "2026-07-11T01:00:51.8181080+00:00", + "finished_at": "2026-07-11T01:00:58.7988155+00:00", + "duration_seconds": 6.981, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-ambient-true-overridden\\repeat-01\\go-test.stdout.jsonl", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-ambient-true-overridden\\repeat-01\\go-test.stderr.log" + }, + { + "name": "repeat-1-assert-go-test-json", + "executable": "C:\\Program Files\\PowerShell\\7\\pwsh.exe", + "arguments": [ + "-NoProfile", + "-File", + "D:\\Dev\\engram\\.w\\t007-r1-checker\\scripts\\production-gates\\assert-go-test-json.ps1", + "-InputPath", + ".agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-ambient-true-overridden\\repeat-01\\go-test.stdout.jsonl", + "-SummaryPath", + ".agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-ambient-true-overridden\\repeat-01\\go-test-summary.json", + "-FailOnUnexpectedSkip" + ], + "environment_keys": [], + "command": "C:\\Program Files\\PowerShell\\7\\pwsh.exe -NoProfile -File D:\\Dev\\engram\\.w\\t007-r1-checker\\scripts\\production-gates\\assert-go-test-json.ps1 -InputPath .agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-ambient-true-overridden\\repeat-01\\go-test.stdout.jsonl -SummaryPath .agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-ambient-true-overridden\\repeat-01\\go-test-summary.json -FailOnUnexpectedSkip", + "started_at": "2026-07-11T01:00:58.8038441+00:00", + "finished_at": "2026-07-11T01:00:59.5609171+00:00", + "duration_seconds": 0.757, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-ambient-true-overridden\\repeat-01\\assert-go-test-json.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-ambient-true-overridden\\repeat-01\\assert-go-test-json.stderr.log" + }, + { + "name": "repeat-1-targeted-coverage-report", + "executable": "C:\\Program Files\\Go\\bin\\go.exe", + "arguments": [ + "tool", + "cover", + "-func=.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-ambient-true-overridden\\repeat-01\\coverage.out" + ], + "environment_keys": [], + "command": "C:\\Program Files\\Go\\bin\\go.exe tool cover -func=.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-ambient-true-overridden\\repeat-01\\coverage.out", + "started_at": "2026-07-11T01:00:59.5658583+00:00", + "finished_at": "2026-07-11T01:00:59.9981375+00:00", + "duration_seconds": 0.432, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-ambient-true-overridden\\repeat-01\\targeted-coverage.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-ambient-true-overridden\\repeat-01\\targeted-coverage.stderr.log" + }, + { + "name": "repeat-1-pg-stat-after", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT COALESCE(json_agg(row_to_json(s)), '[]'::json)::text FROM (SELECT pid, usename, datname, state, backend_type, application_name, client_addr::text AS client_addr, wait_event_type, wait_event, query_start FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_77fc44a810a688de_r1' ORDER BY pid) AS s;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT COALESCE(json_agg(row_to_json(s)), '[]'::json)::text FROM (SELECT pid, usename, datname, state, backend_type, application_name, client_addr::text AS client_addr, wait_event_type, wait_event, query_start FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_77fc44a810a688de_r1' ORDER BY pid) AS s;", + "started_at": "2026-07-11T01:00:59.9990698+00:00", + "finished_at": "2026-07-11T01:01:00.3512073+00:00", + "duration_seconds": 0.352, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-ambient-true-overridden\\repeat-01\\pg-stat-activity-after.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-ambient-true-overridden\\repeat-01\\pg-stat-activity-after.stderr.log" + }, + { + "name": "repeat-1-server-connection-count-after", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT count(*) FROM pg_stat_activity;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT count(*) FROM pg_stat_activity;", + "started_at": "2026-07-11T01:01:00.3532841+00:00", + "finished_at": "2026-07-11T01:01:00.7020870+00:00", + "duration_seconds": 0.349, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-ambient-true-overridden\\repeat-01\\server-connection-count-after.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-ambient-true-overridden\\repeat-01\\server-connection-count-after.stderr.log" + }, + { + "name": "repeat-1-connection-count-after", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT count(*) FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_77fc44a810a688de_r1';" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT count(*) FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_77fc44a810a688de_r1';", + "started_at": "2026-07-11T01:01:00.7040964+00:00", + "finished_at": "2026-07-11T01:01:01.0440872+00:00", + "duration_seconds": 0.34, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-ambient-true-overridden\\repeat-01\\connection-count-after.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-ambient-true-overridden\\repeat-01\\connection-count-after.stderr.log" + }, + { + "name": "repeat-1-cleanup", + "executable": "C:\\Program Files\\PowerShell\\7\\pwsh.exe", + "arguments": [ + "-NoProfile", + "-File", + "D:\\Dev\\engram\\.w\\t007-r1-checker\\scripts\\production-gates\\cleanup-db-sessions.ps1", + "-DatabaseName", + "engram_prc_rg_test_77fc44a810a688de_r1", + "-SchemaName", + "public", + "-ArtifactRoot", + ".agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-ambient-true-overridden\\repeat-01", + "-RunId", + "challenge-ambient-true-overridden-repeat-1", + "-PostgresContainer", + "engram-prc-postgres" + ], + "environment_keys": [ + "ENGRAM_TEST_ADMIN_DSN" + ], + "command": "C:\\Program Files\\PowerShell\\7\\pwsh.exe -NoProfile -File D:\\Dev\\engram\\.w\\t007-r1-checker\\scripts\\production-gates\\cleanup-db-sessions.ps1 -DatabaseName engram_prc_rg_test_77fc44a810a688de_r1 -SchemaName public -ArtifactRoot .agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-ambient-true-overridden\\repeat-01 -RunId challenge-ambient-true-overridden-repeat-1 -PostgresContainer engram-prc-postgres", + "started_at": "2026-07-11T01:01:01.0476979+00:00", + "finished_at": "2026-07-11T01:01:03.7025838+00:00", + "duration_seconds": 2.655, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-ambient-true-overridden\\repeat-01\\cleanup-process.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-ambient-true-overridden\\repeat-01\\cleanup-process.stderr.log" + } +] diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/environment.json b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/environment.json new file mode 100644 index 00000000..e51c672a --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/environment.json @@ -0,0 +1,52 @@ +{ + "schema_version": 1, + "run_id": "challenge-ambient-true-overridden", + "timestamp": "2026-07-11T01:00:48.3644235+00:00", + "go_version": "go version go1.25.11 windows/amd64", + "postgres": { + "declared_image": "pgvector/pgvector:pg17", + "container": { + "name": "/engram-prc-postgres", + "configured_image": "pgvector/pgvector:pg17", + "image_id": "sha256:feb68f4f15446397d8cac7f4fe48fe4586de83160d1fc48b46283312d1a33966", + "running": true + }, + "server": { + "server_version": "17.10 (Debian 17.10-1.pgdg12+1)", + "server_version_num": "170010", + "version": "PostgreSQL 17.10 (Debian 17.10-1.pgdg12+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 12.2.0-14+deb12u1) 12.2.0, 64-bit", + "max_connections": "100", + "superuser_reserved_connections": "3", + "reserved_connections": "0", + "current_connections": "6", + "database": "postgres", + "schema": "public", + "user": "engram" + }, + "admin_dsn": "postgresql://engram:REDACTED@127.0.0.1:55432/postgres?sslmode=disable" + }, + "packages": [ + "./internal/mcp" + ], + "run_pattern": "^TestEC_F1_TagDerivedBackfill_T007$", + "repeat": 1, + "fail_on_unexpected_skip": true, + "allowed_skip_identities": [], + "coverage_policy": "Targeted", + "connection_budget": 20, + "race": false, + "require_session_start_execution": false, + "required_session_start_test_count": 12, + "sequential_execution": { + "go_package_parallelism": 1, + "go_test_parallelism": 1, + "database_max_connections": 20 + }, + "govulncheck_policy": { + "authoritative": [ + "source scan with tests", + "unstripped binary scan" + ], + "non_authoritative": "stripped binary scan (module-level fallback when symbols are absent)" + } +} diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/go-version.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/go-version.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/go-version.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/go-version.stdout.log new file mode 100644 index 00000000..a857be3f --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/go-version.stdout.log @@ -0,0 +1 @@ +go version go1.25.11 windows/amd64 diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/postgres-container-identity.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/postgres-container-identity.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/postgres-container-identity.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/postgres-container-identity.stdout.log new file mode 100644 index 00000000..c110d492 --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/postgres-container-identity.stdout.log @@ -0,0 +1 @@ +/engram-prc-postgres|pgvector/pgvector:pg17|sha256:feb68f4f15446397d8cac7f4fe48fe4586de83160d1fc48b46283312d1a33966|true diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/postgres-server-identity.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/postgres-server-identity.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/postgres-server-identity.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/postgres-server-identity.stdout.log new file mode 100644 index 00000000..2e33d56e --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/postgres-server-identity.stdout.log @@ -0,0 +1 @@ +{"server_version" : "17.10 (Debian 17.10-1.pgdg12+1)", "server_version_num" : "170010", "version" : "PostgreSQL 17.10 (Debian 17.10-1.pgdg12+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 12.2.0-14+deb12u1) 12.2.0, 64-bit", "max_connections" : "100", "superuser_reserved_connections" : "3", "reserved_connections" : "0", "current_connections" : "6", "database" : "postgres", "schema" : "public", "user" : "engram"} diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/repeat-01/assert-go-test-json.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/repeat-01/assert-go-test-json.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/repeat-01/assert-go-test-json.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/repeat-01/assert-go-test-json.stdout.log new file mode 100644 index 00000000..0f86ddf2 --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/repeat-01/assert-go-test-json.stdout.log @@ -0,0 +1,2 @@ +go test JSON verdict=PASS packages=1 tests=1 passed=1 failed=0 skipped=0 unexpected_skips=0 malformed=0 +summary=D:\Dev\engram\.w\t007-r1-checker\.agent\reviews\t007-r1-fresh-checker\evidence\challenge-ambient-true-overridden\repeat-01\go-test-summary.json diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/repeat-01/cleanup-process.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/repeat-01/cleanup-process.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/repeat-01/cleanup-process.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/repeat-01/cleanup-process.stdout.log new file mode 100644 index 00000000..176a9626 --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/repeat-01/cleanup-process.stdout.log @@ -0,0 +1,2 @@ +cleanup verdict=PASS database=engram_prc_rg_test_77fc44a810a688de_r1 schema=public terminated_sessions=0 remaining_database_count=0 +summary=D:\Dev\engram\.w\t007-r1-checker\.agent\reviews\t007-r1-fresh-checker\evidence\challenge-ambient-true-overridden\repeat-01\cleanup\cleanup.json diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/repeat-01/cleanup/cleanup.json b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/repeat-01/cleanup/cleanup.json new file mode 100644 index 00000000..7ff365d2 --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/repeat-01/cleanup/cleanup.json @@ -0,0 +1,170 @@ +{ + "schema_version": 1, + "run_id": "challenge-ambient-true-overridden-repeat-1", + "timestamp": "2026-07-11T01:01:03.6176350+00:00", + "verdict": "PASS", + "database": "engram_prc_rg_test_77fc44a810a688de_r1", + "schema": "public", + "database_schema_identity": "engram_prc_rg_test_77fc44a810a688de_r1.public", + "admin_dsn": "postgresql://engram:REDACTED@127.0.0.1:55432/postgres?sslmode=disable", + "postgres_container": "engram-prc-postgres", + "cleanup_status": "PASS", + "cleanup_attempted": true, + "database_existed_before": true, + "absence_verified": true, + "terminated_sessions": 0, + "remaining_database_count": 0, + "commands": [ + { + "name": "database-exists-before-cleanup", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT count(*) FROM pg_database WHERE datname = 'engram_prc_rg_test_77fc44a810a688de_r1';" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT count(*) FROM pg_database WHERE datname = 'engram_prc_rg_test_77fc44a810a688de_r1';", + "started_at": "2026-07-11T01:01:01.5398125+00:00", + "finished_at": "2026-07-11T01:01:01.9275317+00:00", + "duration_seconds": 0.388, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-ambient-true-overridden\\repeat-01\\cleanup\\database-exists-before.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-ambient-true-overridden\\repeat-01\\cleanup\\database-exists-before.stderr.log" + }, + { + "name": "pg-stat-activity-before-cleanup", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT COALESCE(json_agg(row_to_json(s)), '[]'::json)::text FROM (SELECT pid, usename, datname, state, backend_type, application_name, client_addr::text AS client_addr, wait_event_type, wait_event, query_start FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_77fc44a810a688de_r1' ORDER BY pid) AS s;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT COALESCE(json_agg(row_to_json(s)), '[]'::json)::text FROM (SELECT pid, usename, datname, state, backend_type, application_name, client_addr::text AS client_addr, wait_event_type, wait_event, query_start FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_77fc44a810a688de_r1' ORDER BY pid) AS s;", + "started_at": "2026-07-11T01:01:01.9868033+00:00", + "finished_at": "2026-07-11T01:01:02.3867394+00:00", + "duration_seconds": 0.4, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-ambient-true-overridden\\repeat-01\\cleanup\\pg-stat-activity-before.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-ambient-true-overridden\\repeat-01\\cleanup\\pg-stat-activity-before.stderr.log" + }, + { + "name": "terminate-database-sessions", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT COALESCE(json_agg(row_to_json(s)), '[]'::json)::text FROM (SELECT pid, pg_terminate_backend(pid) AS terminated FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_77fc44a810a688de_r1' AND pid <> pg_backend_pid() ORDER BY pid) AS s;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT COALESCE(json_agg(row_to_json(s)), '[]'::json)::text FROM (SELECT pid, pg_terminate_backend(pid) AS terminated FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_77fc44a810a688de_r1' AND pid <> pg_backend_pid() ORDER BY pid) AS s;", + "started_at": "2026-07-11T01:01:02.3921368+00:00", + "finished_at": "2026-07-11T01:01:02.8168992+00:00", + "duration_seconds": 0.425, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-ambient-true-overridden\\repeat-01\\cleanup\\terminate-sessions.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-ambient-true-overridden\\repeat-01\\cleanup\\terminate-sessions.stderr.log" + }, + { + "name": "drop-fresh-database", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "DROP DATABASE IF EXISTS \"engram_prc_rg_test_77fc44a810a688de_r1\" WITH (FORCE);" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c DROP DATABASE IF EXISTS \"engram_prc_rg_test_77fc44a810a688de_r1\" WITH (FORCE);", + "started_at": "2026-07-11T01:01:02.8249531+00:00", + "finished_at": "2026-07-11T01:01:03.2748708+00:00", + "duration_seconds": 0.45, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-ambient-true-overridden\\repeat-01\\cleanup\\drop-database.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-ambient-true-overridden\\repeat-01\\cleanup\\drop-database.stderr.log" + }, + { + "name": "verify-database-absent", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT count(*) FROM pg_database WHERE datname = 'engram_prc_rg_test_77fc44a810a688de_r1';" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT count(*) FROM pg_database WHERE datname = 'engram_prc_rg_test_77fc44a810a688de_r1';", + "started_at": "2026-07-11T01:01:03.2787805+00:00", + "finished_at": "2026-07-11T01:01:03.6114724+00:00", + "duration_seconds": 0.333, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-ambient-true-overridden\\repeat-01\\cleanup\\verify-database-absent.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-ambient-true-overridden\\repeat-01\\cleanup\\verify-database-absent.stderr.log" + } + ], + "errors": [] +} diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/repeat-01/cleanup/database-exists-before.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/repeat-01/cleanup/database-exists-before.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/repeat-01/cleanup/database-exists-before.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/repeat-01/cleanup/database-exists-before.stdout.log new file mode 100644 index 00000000..d00491fd --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/repeat-01/cleanup/database-exists-before.stdout.log @@ -0,0 +1 @@ +1 diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/repeat-01/cleanup/drop-database.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/repeat-01/cleanup/drop-database.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/repeat-01/cleanup/drop-database.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/repeat-01/cleanup/drop-database.stdout.log new file mode 100644 index 00000000..ca12dce0 --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/repeat-01/cleanup/drop-database.stdout.log @@ -0,0 +1 @@ +DROP DATABASE diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/repeat-01/cleanup/pg-stat-activity-before.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/repeat-01/cleanup/pg-stat-activity-before.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/repeat-01/cleanup/pg-stat-activity-before.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/repeat-01/cleanup/pg-stat-activity-before.stdout.log new file mode 100644 index 00000000..fe51488c --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/repeat-01/cleanup/pg-stat-activity-before.stdout.log @@ -0,0 +1 @@ +[] diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/repeat-01/cleanup/terminate-sessions.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/repeat-01/cleanup/terminate-sessions.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/repeat-01/cleanup/terminate-sessions.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/repeat-01/cleanup/terminate-sessions.stdout.log new file mode 100644 index 00000000..fe51488c --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/repeat-01/cleanup/terminate-sessions.stdout.log @@ -0,0 +1 @@ +[] diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/repeat-01/cleanup/verify-database-absent.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/repeat-01/cleanup/verify-database-absent.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/repeat-01/cleanup/verify-database-absent.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/repeat-01/cleanup/verify-database-absent.stdout.log new file mode 100644 index 00000000..573541ac --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/repeat-01/cleanup/verify-database-absent.stdout.log @@ -0,0 +1 @@ +0 diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/repeat-01/connection-count-after.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/repeat-01/connection-count-after.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/repeat-01/connection-count-after.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/repeat-01/connection-count-after.stdout.log new file mode 100644 index 00000000..573541ac --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/repeat-01/connection-count-after.stdout.log @@ -0,0 +1 @@ +0 diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/repeat-01/connection-count-before.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/repeat-01/connection-count-before.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/repeat-01/connection-count-before.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/repeat-01/connection-count-before.stdout.log new file mode 100644 index 00000000..573541ac --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/repeat-01/connection-count-before.stdout.log @@ -0,0 +1 @@ +0 diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/repeat-01/coverage.out b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/repeat-01/coverage.out new file mode 100644 index 00000000..52335d8a --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/repeat-01/coverage.out @@ -0,0 +1,3472 @@ +mode: atomic +github.com/thebtf/engram/internal/mcp/audit_helpers.go:33.53,34.30 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:34.30,36.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:37.2,37.25 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:37.25,39.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:40.2,40.12 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:44.28,46.2 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:52.83,53.12 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:53.12,54.16 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:54.16,55.32 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:55.32,61.5 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:63.3,65.33 3 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:65.33,71.4 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:77.54,78.14 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:78.14,80.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:81.2,82.16 2 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:82.16,85.3 2 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:86.2,87.13 2 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:92.91,93.23 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:93.23,95.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:96.2,97.15 2 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:97.15,99.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:100.2,105.65 4 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:105.65,113.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:117.95,118.23 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:118.23,120.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:121.2,122.15 2 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:122.15,124.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:125.2,129.65 5 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:129.65,138.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:142.87,143.23 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:143.23,145.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:146.2,147.15 2 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:147.15,149.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:150.2,153.65 4 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:153.65,161.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:166.96,167.23 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:167.23,169.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:170.2,171.15 2 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:171.15,173.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:174.2,177.63 4 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:177.63,185.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:189.97,190.23 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:190.23,192.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:193.2,194.15 2 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:194.15,196.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:197.2,200.68 4 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:200.68,208.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:30.62,31.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:31.20,33.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:34.2,35.49 2 0 +github.com/thebtf/engram/internal/mcp/coerce.go:35.49,37.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:38.2,38.14 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:38.14,40.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:41.2,41.15 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:46.52,47.14 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:47.14,49.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:50.2,50.23 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:51.14,52.11 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:53.19,54.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:55.15,56.45 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:57.12,58.31 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:59.10,60.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:67.43,68.14 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:68.14,70.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:71.2,71.23 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:72.15,73.23 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:74.19,75.38 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:75.38,77.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:78.3,78.40 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:78.40,80.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:81.3,81.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:82.14,83.56 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:83.56,85.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:86.3,86.54 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:86.54,88.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:89.3,89.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:90.10,91.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:97.49,98.14 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:98.14,100.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:101.2,101.23 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:102.15,103.18 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:104.19,105.38 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:105.38,107.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:108.3,108.40 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:108.40,110.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:111.3,111.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:112.14,113.56 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:113.56,115.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:116.3,116.54 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:116.54,118.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:119.3,119.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:120.10,121.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:127.55,128.14 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:128.14,130.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:131.2,131.23 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:132.15,133.11 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:134.19,135.40 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:135.40,137.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:138.3,138.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:139.14,140.54 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:140.54,142.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:143.3,143.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:144.10,145.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:151.46,152.14 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:152.14,154.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:155.2,155.23 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:156.12,157.11 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:158.14,159.54 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:159.54,161.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:162.3,162.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:163.15,164.16 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:165.19,166.40 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:166.40,168.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:169.3,169.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:170.10,171.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:177.40,178.14 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:178.14,180.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:181.2,181.23 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:182.13,184.26 2 0 +github.com/thebtf/engram/internal/mcp/coerce.go:184.26,185.36 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:185.36,187.5 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:189.3,189.16 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:190.16,191.11 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:192.14,193.14 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:193.14,195.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:196.3,196.13 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:197.10,198.13 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:204.38,205.14 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:205.14,207.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:208.2,209.9 2 0 +github.com/thebtf/engram/internal/mcp/coerce.go:209.9,211.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:212.2,213.27 2 0 +github.com/thebtf/engram/internal/mcp/coerce.go:213.27,214.42 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:214.42,216.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:218.2,218.15 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:222.32,223.39 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:223.39,225.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:226.2,226.30 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:226.30,228.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:229.2,229.30 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:229.30,231.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:232.2,232.15 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:236.35,237.28 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:237.28,239.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:240.2,240.28 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:240.28,242.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:243.2,243.15 1 0 +github.com/thebtf/engram/internal/mcp/context.go:17.55,19.2 1 0 +github.com/thebtf/engram/internal/mcp/context.go:22.78,24.2 1 0 +github.com/thebtf/engram/internal/mcp/context.go:29.78,31.2 1 0 +github.com/thebtf/engram/internal/mcp/context.go:35.53,38.2 2 0 +github.com/thebtf/engram/internal/mcp/context.go:41.80,43.2 1 0 +github.com/thebtf/engram/internal/mcp/context.go:48.80,50.2 1 0 +github.com/thebtf/engram/internal/mcp/context.go:54.53,57.2 2 0 +github.com/thebtf/engram/internal/mcp/context.go:61.51,62.43 1 0 +github.com/thebtf/engram/internal/mcp/context.go:62.43,64.3 1 0 +github.com/thebtf/engram/internal/mcp/context.go:65.2,65.16 1 0 +github.com/thebtf/engram/internal/mcp/health.go:22.32,26.2 3 0 +github.com/thebtf/engram/internal/mcp/health.go:29.37,33.2 3 0 +github.com/thebtf/engram/internal/mcp/health.go:36.35,40.2 3 0 +github.com/thebtf/engram/internal/mcp/health.go:42.44,45.25 3 0 +github.com/thebtf/engram/internal/mcp/health.go:45.25,47.50 1 0 +github.com/thebtf/engram/internal/mcp/health.go:47.50,50.4 2 0 +github.com/thebtf/engram/internal/mcp/health.go:55.74,60.16 5 0 +github.com/thebtf/engram/internal/mcp/health.go:60.16,62.3 1 0 +github.com/thebtf/engram/internal/mcp/health.go:63.2,71.4 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:28.42,29.65 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:29.65,32.3 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:33.2,33.40 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:33.40,35.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:36.2,36.14 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:39.120,40.69 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:40.69,42.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:43.2,44.19 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:44.19,46.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:47.2,48.17 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:48.17,50.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:51.2,52.59 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:52.59,54.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:55.2,56.20 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:56.20,58.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:59.2,60.17 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:60.17,62.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:63.2,64.21 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:64.21,66.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:67.2,68.22 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:68.22,70.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:71.2,72.23 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:72.23,74.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:76.2,98.19 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:98.19,100.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:101.2,101.66 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:104.52,106.29 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:106.29,108.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:109.2,110.46 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:113.113,123.27 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:123.27,125.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:126.2,127.16 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:127.16,129.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:130.2,130.25 1 0 +github.com/thebtf/engram/internal/mcp/server.go:127.44,138.2 1 1 +github.com/thebtf/engram/internal/mcp/server.go:141.64,143.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:146.78,148.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:151.53,153.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:156.55,158.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:161.58,163.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:166.62,168.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:171.50,173.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:176.78,178.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:181.74,183.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:186.71,189.2 2 0 +github.com/thebtf/engram/internal/mcp/server.go:191.85,193.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:195.61,197.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:199.49,201.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:204.54,206.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:211.53,213.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:216.53,218.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:222.61,224.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:228.59,230.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:234.51,236.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:240.52,242.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:246.55,248.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:252.82,254.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:260.70,262.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:269.68,271.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:274.87,277.2 2 0 +github.com/thebtf/engram/internal/mcp/server.go:282.60,284.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:290.45,292.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:297.77,299.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:303.37,313.38 3 0 +github.com/thebtf/engram/internal/mcp/server.go:313.38,315.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:316.2,317.9 2 0 +github.com/thebtf/engram/internal/mcp/server.go:317.9,319.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:320.2,321.9 2 0 +github.com/thebtf/engram/internal/mcp/server.go:321.9,323.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:324.2,325.9 2 0 +github.com/thebtf/engram/internal/mcp/server.go:325.9,327.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:328.2,328.14 1 0 +github.com/thebtf/engram/internal/mcp/server.go:332.35,334.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:383.49,387.12 3 0 +github.com/thebtf/engram/internal/mcp/server.go:387.12,388.22 1 0 +github.com/thebtf/engram/internal/mcp/server.go:388.22,389.11 1 0 +github.com/thebtf/engram/internal/mcp/server.go:390.22,392.11 2 0 +github.com/thebtf/engram/internal/mcp/server.go:393.12,393.12 0 0 +github.com/thebtf/engram/internal/mcp/server.go:396.4,397.18 2 0 +github.com/thebtf/engram/internal/mcp/server.go:397.18,398.13 1 0 +github.com/thebtf/engram/internal/mcp/server.go:401.4,402.61 2 0 +github.com/thebtf/engram/internal/mcp/server.go:402.61,404.13 2 0 +github.com/thebtf/engram/internal/mcp/server.go:407.4,407.55 1 0 +github.com/thebtf/engram/internal/mcp/server.go:407.55,409.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:411.3,411.28 1 0 +github.com/thebtf/engram/internal/mcp/server.go:414.2,414.9 1 0 +github.com/thebtf/engram/internal/mcp/server.go:415.20,416.19 1 0 +github.com/thebtf/engram/internal/mcp/server.go:417.25,418.17 1 0 +github.com/thebtf/engram/internal/mcp/server.go:418.17,420.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:421.3,421.13 1 0 +github.com/thebtf/engram/internal/mcp/server.go:427.77,428.19 1 0 +github.com/thebtf/engram/internal/mcp/server.go:428.19,431.3 2 0 +github.com/thebtf/engram/internal/mcp/server.go:433.2,433.20 1 0 +github.com/thebtf/engram/internal/mcp/server.go:434.20,435.33 1 0 +github.com/thebtf/engram/internal/mcp/server.go:436.20,437.32 1 0 +github.com/thebtf/engram/internal/mcp/server.go:438.20,439.37 1 0 +github.com/thebtf/engram/internal/mcp/server.go:443.24,444.93 1 0 +github.com/thebtf/engram/internal/mcp/server.go:445.34,446.101 1 0 +github.com/thebtf/engram/internal/mcp/server.go:447.22,448.91 1 0 +github.com/thebtf/engram/internal/mcp/server.go:449.29,450.120 1 0 +github.com/thebtf/engram/internal/mcp/server.go:451.10,456.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:461.51,462.20 1 0 +github.com/thebtf/engram/internal/mcp/server.go:463.50,464.70 1 0 +github.com/thebtf/engram/internal/mcp/server.go:465.46,466.79 1 0 +github.com/thebtf/engram/internal/mcp/server.go:467.10,468.80 1 0 +github.com/thebtf/engram/internal/mcp/server.go:473.59,485.63 2 0 +github.com/thebtf/engram/internal/mcp/server.go:485.63,487.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:489.2,493.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:496.45,503.33 3 0 +github.com/thebtf/engram/internal/mcp/server.go:503.33,505.57 2 0 +github.com/thebtf/engram/internal/mcp/server.go:505.57,506.76 1 0 +github.com/thebtf/engram/internal/mcp/server.go:506.76,507.13 1 0 +github.com/thebtf/engram/internal/mcp/server.go:509.4,509.18 1 0 +github.com/thebtf/engram/internal/mcp/server.go:509.18,511.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:511.10,513.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:514.4,518.11 5 0 +github.com/thebtf/engram/internal/mcp/server.go:522.2,522.19 1 0 +github.com/thebtf/engram/internal/mcp/server.go:660.29,683.21 2 0 +github.com/thebtf/engram/internal/mcp/server.go:683.21,689.3 5 0 +github.com/thebtf/engram/internal/mcp/server.go:690.2,699.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:712.30,765.49 3 0 +github.com/thebtf/engram/internal/mcp/server.go:765.49,789.3 5 0 +github.com/thebtf/engram/internal/mcp/server.go:790.2,799.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:805.40,936.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:942.58,1048.35 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1048.35,1077.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1080.2,1080.33 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1080.33,1090.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1093.2,1093.26 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1093.26,1123.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1124.2,1124.80 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1124.80,1126.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1127.2,1127.55 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1127.55,1129.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1130.2,1130.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1130.38,1132.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1134.2,1134.25 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1134.25,1136.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1138.2,1138.33 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1138.33,1140.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1141.2,1141.69 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1141.69,1143.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1144.2,1144.75 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1144.75,1146.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1148.2,1148.27 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1148.27,1165.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1168.2,1168.76 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1168.76,1191.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1195.2,1195.48 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1195.48,1197.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1201.2,1201.47 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1201.47,1203.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1205.2,1205.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1205.38,1207.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1212.2,1212.21 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1212.21,1214.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1228.2,1228.51 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1228.51,1230.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1233.2,1233.56 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1233.56,1235.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1238.2,1238.71 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1238.71,1298.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1302.2,1302.104 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1302.104,1321.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1324.2,1324.72 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1324.72,1333.154 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1333.154,1334.26 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1334.26,1336.8 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1337.7,1337.16 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1338.35,1340.26 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1340.26,1342.8 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1343.7,1343.18 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1371.2,1371.26 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1371.26,1390.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1393.2,1393.28 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1393.28,1443.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1446.2,1446.28 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1446.28,1478.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1481.2,1481.37 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1481.37,1561.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1564.2,1568.23 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1568.23,1570.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1572.2,1588.57 3 0 +github.com/thebtf/engram/internal/mcp/server.go:1588.57,1591.29 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1591.29,1593.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1594.3,1594.27 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1594.27,1595.29 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1595.29,1597.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1601.2,1607.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1612.79,1614.60 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1614.60,1620.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1622.2,1623.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1623.16,1631.3 3 0 +github.com/thebtf/engram/internal/mcp/server.go:1633.2,1641.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1644.69,1645.34 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1645.34,1647.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1648.2,1649.22 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1649.22,1651.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1652.2,1652.37 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1656.99,1658.14 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1659.16,1660.35 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1661.15,1662.46 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1663.18,1664.49 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1665.15,1666.46 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1667.18,1668.49 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1669.14,1670.45 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1671.15,1672.34 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1676.2,1676.14 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1677.35,1678.52 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1679.26,1680.37 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1681.20,1682.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1683.20,1684.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1685.16,1686.35 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1687.29,1688.40 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1689.33,1690.50 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1691.25,1692.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1693.23,1694.41 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1696.26,1697.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1698.24,1699.42 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1700.22,1701.40 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1702.25,1703.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1704.27,1705.45 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1706.25,1707.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1709.30,1710.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1711.28,1712.42 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1713.17,1714.40 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1715.20,1716.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1717.20,1718.45 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1719.20,1720.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1722.20,1723.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1724.18,1725.36 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1726.20,1727.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1728.18,1729.36 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1730.21,1731.39 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1732.21,1733.39 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1734.26,1735.44 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1736.25,1737.34 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1738.26,1739.44 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1740.24,1741.42 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1742.26,1743.44 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1744.27,1745.45 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1746.22,1747.40 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1748.19,1749.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1750.15,1751.34 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1752.16,1753.35 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1755.21,1756.44 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1757.19,1758.42 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1759.20,1760.44 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1761.22,1762.45 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1763.22,1764.40 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1765.23,1766.41 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1767.20,1768.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1769.32,1770.49 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1771.19,1772.37 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1773.19,1774.37 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1775.33,1776.50 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1777.35,1778.52 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1779.24,1780.42 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1781.32,1782.49 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1783.28,1784.46 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1785.21,1786.39 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1787.34,1788.51 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1789.25,1790.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1791.29,1792.46 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1793.26,1794.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1795.27,1796.44 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1798.25,1799.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1800.23,1801.41 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1802.27,1803.45 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1804.26,1805.44 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1806.29,1807.47 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1809.29,1810.46 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1811.27,1812.44 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1813.30,1814.47 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1815.38,1816.54 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1817.36,1818.52 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1820.24,1821.42 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1822.27,1823.45 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1824.22,1825.40 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1826.32,1827.49 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1828.32,1829.49 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1830.31,1831.48 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1832.35,1833.52 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1834.36,1835.53 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1836.36,1837.53 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1838.38,1839.54 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1840.34,1841.51 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1843.22,1844.40 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1845.21,1846.39 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1847.24,1848.42 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1850.25,1851.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1852.25,1853.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1859.2,1859.14 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1860.22,1863.131 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1866.51,1867.123 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1868.10,1869.50 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1874.47,1876.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1876.16,1879.3 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1880.2,1880.35 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1884.72,1890.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1896.105,1898.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1898.16,1900.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1902.2,1903.17 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1903.17,1905.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1907.2,1908.17 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1908.17,1910.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1912.2,1918.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1918.16,1920.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1921.2,1921.25 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1927.76,1933.15 3 0 +github.com/thebtf/engram/internal/mcp/server.go:1933.15,1936.17 3 0 +github.com/thebtf/engram/internal/mcp/server.go:1936.17,1938.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1939.3,1939.26 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1943.2,1950.36 3 0 +github.com/thebtf/engram/internal/mcp/server.go:1950.36,1952.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1952.8,1955.29 3 0 +github.com/thebtf/engram/internal/mcp/server.go:1955.29,1958.4 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1959.3,1962.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1966.2,1966.20 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1966.20,1977.20 6 0 +github.com/thebtf/engram/internal/mcp/server.go:1977.20,1979.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1980.3,1980.20 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1980.20,1982.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1985.3,1985.37 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1985.37,1987.30 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1987.30,1988.16 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1988.16,1990.6 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1990.11,1992.6 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1994.4,1995.56 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1995.56,1997.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1998.4,2003.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2008.2,2008.29 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2008.29,2009.63 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2009.63,2011.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2011.9,2013.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2021.2,2021.29 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2021.29,2029.38 3 0 +github.com/thebtf/engram/internal/mcp/server.go:2029.38,2031.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2031.9,2033.31 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2033.31,2035.30 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2035.30,2037.6 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2039.4,2042.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2046.2,2047.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2047.16,2049.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2050.2,2050.25 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2055.57,2056.33 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2056.33,2058.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2059.2,2060.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2060.16,2062.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2063.2,2064.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2064.16,2066.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2067.2,2067.23 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2071.79,2105.15 6 0 +github.com/thebtf/engram/internal/mcp/server.go:2105.15,2107.17 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2107.17,2111.4 3 0 +github.com/thebtf/engram/internal/mcp/server.go:2111.9,2112.17 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2112.17,2114.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2115.4,2117.26 3 0 +github.com/thebtf/engram/internal/mcp/server.go:2117.26,2119.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2119.10,2121.29 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2121.29,2123.6 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2125.4,2129.25 5 0 +github.com/thebtf/engram/internal/mcp/server.go:2130.19,2130.19 0 0 +github.com/thebtf/engram/internal/mcp/server.go:2132.20,2134.106 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2135.12,2137.103 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2140.8,2143.3 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2144.2,2150.49 3 0 +github.com/thebtf/engram/internal/mcp/server.go:2150.49,2152.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2152.8,2154.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2155.2,2168.27 4 0 +github.com/thebtf/engram/internal/mcp/server.go:2168.27,2170.17 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2170.17,2173.4 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2173.9,2175.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2177.2,2182.40 4 0 +github.com/thebtf/engram/internal/mcp/server.go:2182.40,2183.21 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2184.20,2185.20 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2186.19,2187.19 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2191.2,2191.24 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2191.24,2193.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2193.8,2193.30 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2193.30,2195.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2198.2,2198.28 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2198.28,2200.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2203.2,2203.29 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2203.29,2205.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2207.2,2208.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2208.16,2210.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2211.2,2211.28 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2216.103,2218.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2218.16,2220.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2222.2,2223.15 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2223.15,2225.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2227.2,2239.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2239.16,2241.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2242.2,2242.25 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2246.93,2248.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2251.91,2253.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:18.28,29.20 4 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:29.20,33.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:35.2,44.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:68.36,69.49 1 1 +github.com/thebtf/engram/internal/mcp/tools_admin.go:69.49,74.3 4 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:75.2,75.25 1 1 +github.com/thebtf/engram/internal/mcp/tools_admin.go:80.26,82.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:84.89,86.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:86.16,88.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:89.2,90.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:90.18,92.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:94.2,94.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:95.15,96.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:97.26,98.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:99.25,100.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:101.23,105.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:105.22,107.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:108.3,108.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:109.10,110.114 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:120.92,126.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:126.26,128.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:130.2,131.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:131.19,133.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:134.2,135.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:135.19,137.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:138.2,138.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:138.24,140.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:142.2,142.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:142.25,144.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:146.2,147.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:147.16,149.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:151.2,151.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:27.40,30.2 2 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:32.30,46.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:48.99,49.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:49.34,51.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:52.2,52.69 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:52.69,54.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:56.2,57.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:57.16,59.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:60.2,61.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:61.21,63.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:64.2,67.26 3 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:67.26,69.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:70.2,71.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:71.25,73.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:75.2,77.44 3 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:77.44,79.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:80.2,80.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:80.33,82.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:83.2,83.81 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:86.52,87.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:87.16,89.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:90.2,90.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:90.15,92.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:93.2,93.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:96.73,97.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:97.21,99.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:100.2,101.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:101.29,110.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:111.2,111.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:114.34,116.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:31.98,32.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:32.52,34.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:35.2,35.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:35.26,37.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:39.2,40.49 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:40.49,42.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:43.2,43.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:43.21,45.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:46.2,46.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:46.21,48.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:49.2,49.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:49.18,51.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:52.2,52.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:52.18,54.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:56.2,56.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:56.38,58.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:60.2,61.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:61.16,63.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:68.2,70.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:70.26,77.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:79.2,81.36 3 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:81.36,84.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:86.2,89.28 3 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:89.28,90.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:90.39,91.9 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:93.3,97.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:100.2,104.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:107.60,113.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:115.101,116.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:116.38,118.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:120.2,122.21 3 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:122.21,123.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:123.26,125.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:126.3,126.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:126.23,128.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:129.8,130.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:130.26,132.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:133.3,133.68 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:133.68,135.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:137.2,140.20 3 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:141.17,142.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:143.67,143.67 0 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:144.10,145.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:148.2,162.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:162.16,164.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:165.2,165.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:165.19,173.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:174.2,174.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:174.30,176.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:177.2,177.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:177.31,179.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:181.2,182.36 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:182.36,196.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:198.2,199.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:199.19,201.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:202.2,203.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:203.18,205.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:206.2,207.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:207.21,209.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:210.2,211.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:211.25,213.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:214.2,225.21 3 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:225.21,227.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:228.2,228.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:228.25,230.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:231.2,231.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:231.18,233.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:235.2,244.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:244.21,246.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:247.2,247.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:247.25,249.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:250.2,250.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:250.18,252.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:253.2,253.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:253.24,255.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:256.2,256.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:259.50,261.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:261.22,263.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:264.2,264.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:270.90,272.42 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:272.42,276.3 3 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:277.2,281.27 3 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:281.27,282.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:282.45,284.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:286.2,286.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:25.28,88.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:95.95,96.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:96.22,98.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:99.2,100.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:100.32,102.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:104.2,105.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:105.16,107.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:109.2,114.35 3 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:114.35,121.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:123.2,123.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:123.25,125.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:127.2,134.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:134.16,136.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:138.2,146.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:154.94,155.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:155.22,157.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:158.2,159.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:159.32,161.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:163.2,164.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:164.16,166.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:168.2,172.35 3 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:172.35,179.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:181.2,181.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:181.25,183.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:185.2,192.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:192.16,194.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:196.2,203.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:211.97,212.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:212.22,214.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:215.2,216.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:216.32,218.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:220.2,221.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:221.16,223.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:225.2,229.35 3 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:229.35,236.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:238.2,238.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:238.25,240.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:242.2,249.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:249.16,251.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:253.2,260.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:31.80,32.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:32.14,34.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:35.2,48.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:51.136,53.51 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:53.51,55.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:56.2,56.83 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:59.94,60.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:60.21,62.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:63.2,63.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:68.30,162.2 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:165.98,166.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:166.49,168.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:169.2,170.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:170.16,172.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:173.2,174.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:174.19,176.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:177.2,179.17 3 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:179.17,181.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:183.2,184.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:184.16,186.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:188.2,189.31 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:189.31,190.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:190.15,191.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:193.3,193.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:196.2,201.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:201.16,203.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:204.2,204.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:208.96,209.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:209.49,211.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:212.2,213.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:213.16,215.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:216.2,217.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:217.13,219.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:221.2,222.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:222.16,224.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:225.2,225.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:225.22,227.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:229.2,230.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:230.16,232.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:233.2,233.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:239.100,240.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:240.22,242.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:243.2,244.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:244.16,246.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:247.2,248.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:248.13,250.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:255.2,256.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:256.12,263.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:263.30,264.77 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:264.77,269.5 4 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:271.3,272.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:272.21,274.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:275.3,275.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:279.2,279.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:279.29,281.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:284.2,285.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:285.16,287.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:288.2,288.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:288.22,290.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:291.2,291.55 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:291.55,293.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:294.2,294.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:294.74,296.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:297.2,298.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:298.16,300.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:306.2,307.41 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:307.41,309.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:310.2,324.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:324.16,325.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:325.50,327.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:328.3,328.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:330.2,330.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:330.38,332.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:334.2,341.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:341.16,343.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:344.2,344.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:348.99,349.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:349.49,351.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:352.2,353.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:353.16,355.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:356.2,357.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:357.13,359.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:360.2,362.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:362.16,364.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:365.2,365.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:365.22,367.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:368.2,368.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:368.74,370.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:371.2,372.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:372.16,374.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:375.2,375.85 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:375.85,377.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:379.2,380.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:380.16,381.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:381.50,383.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:384.3,384.60 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:386.2,386.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:386.20,388.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:390.2,395.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:395.16,397.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:398.2,398.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:402.102,403.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:403.49,405.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:406.2,407.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:407.16,409.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:410.2,411.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:411.13,413.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:414.2,415.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:415.16,417.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:418.2,418.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:418.22,420.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:421.2,421.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:421.74,423.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:424.2,425.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:425.16,427.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:428.2,428.88 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:428.88,430.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:432.2,433.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:433.16,434.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:434.50,436.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:437.3,437.63 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:439.2,439.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:439.20,441.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:443.2,448.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:448.16,450.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:451.2,451.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:34.30,36.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:42.61,44.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:48.32,75.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:79.32,94.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:100.98,101.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:101.25,103.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:104.2,104.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:104.29,106.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:108.2,113.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:113.17,114.55 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:114.55,116.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:118.2,118.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:118.24,120.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:121.2,121.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:121.23,123.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:124.2,124.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:124.23,126.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:134.2,135.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:135.21,137.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:142.2,147.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:147.16,149.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:154.2,165.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:165.25,175.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:177.2,183.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:183.16,185.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:186.2,186.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:194.98,195.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:195.25,197.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:198.2,198.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:198.29,200.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:202.2,205.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:205.17,207.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:208.2,209.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:209.21,211.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:213.2,214.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:214.16,216.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:217.2,218.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:218.16,220.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:221.2,222.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:222.16,224.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:226.2,231.11 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:231.11,233.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:235.2,236.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:236.16,238.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:239.2,239.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:21.52,22.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:22.24,25.28 3 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:25.28,27.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:29.2,29.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:35.72,37.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:37.15,39.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:41.2,42.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:42.16,44.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:45.2,45.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:49.99,51.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:51.16,53.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:55.2,56.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:56.16,58.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:60.2,72.23 7 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:72.23,74.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:75.2,75.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:75.24,77.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:78.2,78.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:78.24,80.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:81.2,81.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:82.27,82.27 0 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:84.10,85.93 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:87.2,87.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:87.30,89.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:90.2,90.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:90.26,92.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:94.2,95.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:95.16,97.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:99.2,100.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:100.16,102.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:104.2,112.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:112.16,114.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:116.2,123.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:123.16,125.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:126.2,126.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:130.97,132.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:132.16,134.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:136.2,137.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:137.16,139.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:141.2,147.23 4 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:147.23,149.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:150.2,150.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:150.26,152.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:154.2,155.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:155.16,157.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:159.2,160.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:160.16,161.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:161.47,163.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:164.3,164.51 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:167.2,167.97 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:167.97,172.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:174.2,175.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:175.16,177.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:179.2,185.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:185.16,187.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:188.2,188.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:192.99,194.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:194.16,196.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:198.2,199.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:199.16,201.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:203.2,207.26 3 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:207.26,209.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:211.2,212.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:212.16,214.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:216.2,223.26 3 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:223.26,229.28 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:229.28,231.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:232.3,232.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:235.2,236.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:236.16,238.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:239.2,239.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:243.100,245.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:245.16,247.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:249.2,250.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:250.16,252.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:254.2,262.23 5 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:262.23,264.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:265.2,265.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:265.24,267.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:268.2,268.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:269.27,269.27 0 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:271.10,272.93 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:274.2,274.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:274.30,276.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:277.2,277.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:277.26,279.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:281.2,281.71 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:281.71,282.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:282.47,284.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:285.3,285.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:288.2,293.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:293.16,295.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:296.2,296.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:302.92,309.19 5 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:309.19,310.53 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:310.53,313.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:316.2,317.51 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:317.51,318.66 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:318.66,320.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:323.2,331.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:331.16,333.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:334.2,334.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:338.46,342.32 4 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:342.32,343.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:343.20,346.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:348.2,350.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:350.26,352.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:352.27,353.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:353.13,355.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:356.4,356.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:358.3,358.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:360.2,360.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:16.45,18.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:20.35,36.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:38.84,39.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:39.40,41.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:42.2,42.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:42.50,44.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:45.2,45.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:48.101,50.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:50.16,52.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:53.2,54.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:54.16,56.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:57.2,58.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:58.19,60.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:61.2,62.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:62.21,64.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:65.2,66.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:66.16,68.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:69.2,69.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:72.102,74.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:74.16,76.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:77.2,82.8 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:10.100,12.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:12.16,14.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:16.2,17.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:17.18,19.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:21.2,21.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:22.16,23.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:24.14,25.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:26.14,27.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:28.17,29.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:30.17,31.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:32.21,33.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:34.19,35.42 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:36.17,37.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:38.16,39.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:40.16,41.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:42.21,43.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:44.10,45.167 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:15.77,16.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:16.33,18.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:20.2,21.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:21.27,23.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:25.2,26.28 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:26.28,29.17 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:29.17,31.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:34.2,41.32 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:41.32,46.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:46.20,48.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:49.3,49.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:52.2,53.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:53.16,55.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:57.2,57.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:61.97,62.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:62.28,64.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:66.2,67.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:67.16,69.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:71.2,75.29 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:75.29,77.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:79.2,80.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:80.16,82.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:84.2,84.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:84.20,86.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:88.2,97.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:97.25,103.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:103.20,105.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:106.3,106.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:106.19,108.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:109.3,109.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:112.2,113.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:113.16,115.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:117.2,117.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:121.95,122.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:122.28,124.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:126.2,127.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:127.16,129.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:131.2,137.50 4 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:137.50,139.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:141.2,142.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:142.16,144.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:145.2,145.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:145.16,147.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:149.2,149.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:149.21,151.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:153.2,154.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:154.16,156.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:157.2,157.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:157.20,159.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:161.2,161.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:165.98,166.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:166.28,168.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:170.2,171.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:171.16,173.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:175.2,181.50 4 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:181.50,183.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:185.2,185.96 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:185.96,187.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:189.2,189.88 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:197.98,198.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:198.28,200.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:202.2,203.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:203.16,205.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:207.2,217.74 6 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:217.74,219.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:222.2,223.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:223.16,225.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:227.2,229.156 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:235.98,237.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:237.16,239.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:241.2,247.24 4 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:247.24,249.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:252.2,253.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:253.29,255.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:256.2,256.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:15.93,16.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:16.37,18.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:20.2,21.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:21.16,23.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:25.2,32.16 7 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:32.16,34.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:35.2,35.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:35.19,37.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:38.2,38.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:38.19,40.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:42.2,43.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:43.16,45.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:47.2,54.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:54.16,56.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:57.2,57.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:61.91,62.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:62.37,64.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:66.2,67.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:67.16,69.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:71.2,73.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:73.16,75.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:76.2,76.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:76.19,78.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:80.2,81.43 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:81.43,83.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:83.19,85.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:86.3,86.79 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:87.8,89.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:90.2,90.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:90.16,91.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:91.45,93.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:94.3,94.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:97.2,110.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:110.16,112.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:113.2,113.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:117.93,119.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:122.91,123.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:123.37,125.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:127.2,128.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:128.16,130.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:132.2,133.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:133.19,135.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:136.2,141.16 5 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:141.16,143.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:145.2,155.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:155.25,165.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:167.2,168.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:168.16,170.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:171.2,171.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:175.94,176.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:176.37,178.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:180.2,181.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:181.16,183.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:185.2,187.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:187.16,189.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:190.2,190.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:190.19,192.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:193.2,196.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:196.16,198.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:200.2,208.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:208.25,216.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:218.2,225.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:225.16,227.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:228.2,228.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:232.94,233.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:233.37,235.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:237.2,238.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:238.16,240.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:242.2,243.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:243.21,245.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:246.2,248.19 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:248.19,250.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:252.2,253.46 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:253.46,255.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:255.13,257.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:259.2,259.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:259.44,261.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:261.13,263.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:266.2,267.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:267.16,269.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:271.2,278.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:278.16,280.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:281.2,281.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:19.69,21.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:23.38,38.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:40.51,63.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:65.53,80.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:82.46,85.32 3 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:85.32,87.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:88.2,88.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:91.105,93.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:93.16,95.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:96.2,97.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:97.16,99.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:100.2,100.70 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:103.107,105.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:105.16,107.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:108.2,109.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:109.16,111.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:112.2,112.72 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:115.101,117.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:117.16,119.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:120.2,121.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:121.17,123.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:124.2,139.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:142.109,144.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:144.16,146.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:147.2,154.8 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:157.100,159.28 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:159.28,161.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:161.18,163.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:164.3,164.62 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:166.2,167.72 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:167.72,169.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:170.2,170.53 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:170.53,172.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:173.2,174.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:174.26,176.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:177.2,177.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:180.73,182.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:182.16,184.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:185.2,185.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:12.104,14.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:14.16,16.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:18.2,19.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:19.18,21.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:23.2,23.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:24.14,25.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:26.18,27.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:28.17,29.46 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:30.10,31.96 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:36.101,37.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:37.27,39.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:41.2,42.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:42.16,44.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:46.2,47.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:47.21,49.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:50.2,51.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:51.19,53.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:54.2,54.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:55.52,55.52 0 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:56.10,57.101 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:59.2,61.93 2 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:61.93,64.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:66.2,70.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:27.31,94.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:98.97,100.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:100.26,102.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:103.2,103.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:103.28,105.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:107.2,108.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:108.16,110.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:112.2,115.15 4 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:115.15,117.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:118.2,118.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:118.17,120.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:122.2,123.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:123.16,125.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:127.2,140.29 3 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:140.29,151.31 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:151.31,154.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:155.3,155.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:158.2,162.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:167.100,169.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:169.26,171.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:172.2,172.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:172.28,174.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:175.2,175.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:175.26,177.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:179.2,180.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:180.16,182.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:184.2,185.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:185.22,187.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:189.2,190.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:190.20,191.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:191.54,199.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:200.3,200.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:200.61,202.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:203.3,203.58 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:206.2,211.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:215.95,217.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:217.32,219.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:220.2,220.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:220.28,222.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:224.2,225.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:225.16,227.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:229.2,230.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:230.22,232.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:234.2,234.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:234.61,236.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:239.2,239.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:239.25,246.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:248.2,252.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:258.104,260.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:260.26,262.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:267.2,271.20 3 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:271.20,275.3 3 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:275.8,279.3 3 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:280.2,280.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:284.60,285.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:285.30,287.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:288.2,288.42 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:288.42,290.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:291.2,291.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:64.89,65.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:65.25,67.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:69.2,70.49 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:70.49,72.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:74.2,74.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:75.18,76.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:77.21,78.35 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:79.19,80.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:81.18,82.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:83.19,84.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:85.18,86.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:87.18,91.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:91.23,93.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:94.3,94.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:95.10,96.62 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:100.81,103.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:103.19,105.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:106.2,107.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:107.19,109.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:112.2,112.46 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:112.46,114.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:115.2,115.46 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:115.46,117.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:122.2,122.66 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:122.66,124.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:127.2,127.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:127.25,128.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:128.22,130.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:131.8,132.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:132.26,134.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:138.2,138.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:138.25,139.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:139.22,141.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:142.8,143.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:143.26,145.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:148.2,148.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:148.22,150.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:151.2,151.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:151.38,153.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:154.2,154.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:154.19,156.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:159.2,161.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:161.25,164.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:165.2,165.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:165.25,168.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:169.2,171.23 3 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:171.23,174.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:175.2,175.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:175.23,178.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:180.2,193.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:193.16,195.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:198.2,199.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:199.29,201.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:202.2,202.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:202.29,204.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:205.2,213.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:216.121,217.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:217.28,218.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:218.26,220.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:221.3,222.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:222.17,223.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:223.49,225.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:226.4,226.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:228.3,228.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:230.2,230.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:230.26,232.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:233.2,234.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:234.16,235.48 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:235.48,237.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:238.3,238.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:240.2,240.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:243.101,248.36 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:248.36,250.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:250.8,252.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:253.2,253.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:253.16,255.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:256.2,256.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:256.32,257.128 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:257.128,262.72 5 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:262.72,264.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:267.2,267.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:276.81,277.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:277.25,279.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:280.2,280.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:280.22,282.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:283.2,283.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:283.39,285.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:286.2,286.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:286.25,288.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:289.2,289.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:289.21,291.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:292.2,293.14 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:293.14,295.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:296.2,305.16 5 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:305.16,307.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:308.2,314.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:317.84,318.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:318.19,320.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:321.2,323.63 3 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:323.63,325.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:326.2,329.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:332.82,333.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:333.38,335.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:336.2,337.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:338.18,339.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:340.18,341.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:345.2,345.59 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:345.59,347.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:349.2,351.21 3 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:351.21,353.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:353.8,356.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:357.2,357.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:357.16,359.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:366.2,367.41 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:367.41,369.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:371.2,378.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:397.115,398.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:398.15,400.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:403.2,404.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:404.26,405.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:405.28,407.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:408.3,408.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:408.28,410.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:412.2,412.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:412.23,415.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:420.2,426.12 4 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:426.12,427.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:427.27,429.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:429.18,431.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:433.4,433.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:433.33,435.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:440.2,441.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:441.26,442.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:442.28,443.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:443.49,445.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:448.3,448.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:448.28,449.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:449.49,451.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:454.2,454.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:457.82,458.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:458.21,460.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:461.2,462.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:462.16,464.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:465.2,465.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:465.36,467.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:468.2,469.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:469.16,471.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:472.2,477.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:480.82,481.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:481.40,483.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:484.2,485.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:485.19,487.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:488.2,489.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:489.16,491.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:492.2,499.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:502.82,503.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:503.21,505.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:506.2,507.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:507.16,509.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:510.2,514.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:23.179,24.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:24.22,26.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:28.2,32.22 4 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:32.22,34.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:35.2,36.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:36.22,38.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:40.2,41.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:41.26,43.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:44.2,44.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:44.26,46.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:47.2,47.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:47.30,49.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:50.2,50.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:50.30,52.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:54.2,55.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:55.16,57.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:58.2,58.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:58.13,60.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:61.2,62.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:62.16,64.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:65.2,65.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:65.13,67.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:69.2,70.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:70.16,72.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:73.2,73.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:73.15,75.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:77.2,77.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:80.172,81.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:81.28,82.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:82.23,84.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:85.3,85.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:85.18,87.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:88.3,89.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:89.17,90.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:90.49,92.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:93.4,93.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:95.3,95.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:98.2,98.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:98.24,100.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:101.2,101.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:101.19,103.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:104.2,105.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:105.16,106.48 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:106.48,108.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:109.3,109.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:111.2,111.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:114.119,116.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:116.22,118.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:119.2,120.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:120.22,122.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:124.2,126.26 3 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:126.26,127.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:127.36,129.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:130.3,130.105 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:131.8,132.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:132.32,134.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:135.3,135.103 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:137.2,137.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:137.16,139.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:141.2,141.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:141.32,143.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:143.27,145.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:146.3,147.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:147.27,149.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:150.3,150.106 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:150.106,151.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:153.3,153.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:153.27,154.114 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:154.114,155.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:157.9,157.104 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:157.104,158.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:160.3,160.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:160.27,161.114 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:161.114,162.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:164.9,164.104 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:164.104,165.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:167.3,167.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:169.2,169.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:25.90,26.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:26.26,28.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:30.2,31.49 2 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:31.49,33.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:35.2,35.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:36.16,37.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:38.10,39.63 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:43.84,44.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:44.21,46.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:47.2,47.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:47.25,49.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:50.2,50.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:50.21,52.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:53.2,53.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:53.21,55.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:57.2,58.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:59.18,60.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:61.15,62.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:63.24,64.42 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:65.10,66.108 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:69.2,70.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:70.22,72.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:73.2,74.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:74.29,76.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:78.2,78.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:78.14,85.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:87.2,89.37 3 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:89.37,92.21 3 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:92.21,94.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:97.2,100.31 4 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:100.31,102.38 2 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:102.38,104.37 2 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:104.37,106.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:109.3,122.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:122.26,124.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:125.3,125.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:125.19,127.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:131.3,133.39 3 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:133.39,135.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:135.9,137.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:138.3,138.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:138.17,140.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:142.3,142.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:142.34,144.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:145.3,145.11 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:148.2,155.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:20.99,22.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:22.16,24.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:26.2,31.44 3 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:31.44,32.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:32.33,33.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:33.43,38.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:43.2,43.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:43.49,45.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:46.2,46.48 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:46.48,48.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:50.2,52.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:52.27,55.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:55.8,60.24 3 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:60.24,62.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:64.3,64.57 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:64.57,66.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:68.3,68.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:71.2,71.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:71.16,73.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:75.2,76.23 2 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:76.23,78.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:80.2,80.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:19.40,89.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:109.71,111.9 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:111.9,113.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:115.2,116.38 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:116.38,117.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:118.13,119.41 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:119.41,121.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:122.17,123.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:123.43,125.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:126.11,127.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:127.40,129.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:133.2,133.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:133.22,138.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:139.2,139.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:143.90,144.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:144.25,146.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:148.2,149.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:149.16,151.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:153.2,157.61 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:157.61,159.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:161.2,161.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:162.16,163.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:164.14,165.35 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:166.13,167.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:168.16,169.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:170.17,171.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:172.16,173.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:174.15,175.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:176.10,177.120 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:189.85,191.39 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:191.39,192.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:192.44,194.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:196.2,196.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:196.15,198.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:199.2,199.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:199.15,201.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:202.2,202.46 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:205.91,207.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:207.17,209.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:211.2,215.25 5 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:215.25,217.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:218.2,224.25 4 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:224.25,226.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:227.2,227.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:227.25,229.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:231.2,243.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:243.16,245.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:247.2,247.139 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:250.89,252.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:252.19,254.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:255.2,256.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:256.25,258.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:259.2,264.52 5 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:264.52,266.14 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:266.14,268.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:271.2,277.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:277.25,280.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:282.2,283.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:283.16,285.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:287.2,287.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:287.22,288.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:288.20,290.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:291.3,291.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:294.2,297.31 3 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:297.31,300.29 3 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:300.29,302.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:303.3,305.69 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:308.2,308.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:311.88,313.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:313.13,315.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:317.2,318.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:318.16,320.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:322.2,328.22 6 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:328.22,331.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:333.2,333.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:333.23,335.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:335.30,338.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:341.2,341.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:344.91,346.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:346.13,348.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:350.2,353.18 3 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:353.18,354.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:354.27,356.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:357.3,357.73 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:357.73,359.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:362.2,362.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:362.19,370.17 4 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:370.17,372.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:375.2,376.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:376.26,378.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:379.2,379.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:382.92,384.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:384.13,386.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:388.2,389.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:389.16,391.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:393.2,401.16 4 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:401.16,403.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:405.2,405.88 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:408.91,410.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:410.13,412.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:414.2,418.95 4 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:418.95,420.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:422.2,422.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:425.90,427.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:427.13,429.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:431.2,433.167 3 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:433.167,435.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:437.2,437.89 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:437.89,439.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:441.2,441.108 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:22.93,24.49 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:24.49,26.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:28.2,28.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:29.14,30.42 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:31.17,32.59 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:33.16,34.58 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:35.24,36.75 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:37.27,38.71 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:39.22,40.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:41.23,42.63 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:43.10,44.66 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:48.79,49.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:49.13,51.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:52.2,53.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:53.16,55.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:57.2,58.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:58.32,60.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:61.2,84.28 3 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:87.101,88.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:88.13,90.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:91.2,91.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:91.38,93.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:94.2,95.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:95.16,97.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:98.2,98.53 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:98.53,100.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:102.2,104.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:104.17,106.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:107.2,107.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:107.29,109.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:110.2,115.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:118.100,119.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:119.13,121.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:122.2,122.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:122.38,124.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:125.2,126.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:126.16,128.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:129.2,129.53 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:129.53,131.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:133.2,135.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:135.17,137.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:138.2,138.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:138.29,140.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:141.2,146.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:149.123,150.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:150.13,152.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:153.2,153.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:153.18,155.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:156.2,156.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:156.38,158.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:159.2,161.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:161.17,163.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:164.2,169.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:172.113,173.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:173.13,175.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:176.2,176.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:176.50,178.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:179.2,181.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:181.17,183.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:184.2,188.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:191.57,195.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:197.102,198.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:198.13,200.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:201.2,201.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:201.20,203.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:204.2,205.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:205.16,207.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:209.2,210.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:210.32,212.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:214.2,217.56 3 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:217.56,223.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:225.2,230.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:233.41,235.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:235.16,237.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:238.2,238.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:35.27,37.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:42.41,43.11 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:44.48,45.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:46.10,47.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:54.57,55.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:56.17,57.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:58.16,59.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:60.10,61.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:82.58,83.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:84.28,85.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:86.26,87.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:88.10,89.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:93.114,95.68 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:95.68,97.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:99.2,101.42 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:101.42,102.71 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:102.71,105.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:107.2,117.23 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:117.23,119.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:121.2,124.22 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:124.22,125.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:125.31,127.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:128.3,128.35 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:129.8,129.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:129.37,131.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:132.2,132.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:135.74,136.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:136.30,138.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:139.2,139.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:139.34,141.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:142.2,142.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:142.31,144.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:145.2,145.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:145.22,147.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:161.169,162.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:162.17,164.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:165.2,166.51 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:166.51,168.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:169.2,169.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:172.92,174.42 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:174.42,177.63 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:177.63,179.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:179.9,181.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:183.2,183.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:186.65,190.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:192.115,194.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:194.26,196.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:196.8,196.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:196.31,198.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:199.2,199.117 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:202.122,206.31 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:206.31,207.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:207.45,209.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:211.2,211.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:214.72,216.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:218.117,219.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:219.16,221.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:222.2,223.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:223.20,225.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:225.17,227.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:228.3,228.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:228.27,229.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:229.50,231.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:231.30,232.11 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:236.3,236.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:239.2,241.60 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:241.60,243.61 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:243.61,245.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:246.3,246.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:246.24,247.9 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:249.3,250.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:250.17,252.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:253.3,253.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:253.22,254.9 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:256.3,256.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:256.29,257.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:257.50,259.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:259.30,260.11 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:264.3,265.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:265.32,266.9 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:269.2,269.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:272.51,273.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:273.16,275.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:276.2,277.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:277.18,279.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:280.2,280.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:280.19,282.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:283.2,283.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:286.97,288.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:288.30,290.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:291.2,291.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:291.49,293.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:294.2,294.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:297.108,299.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:301.108,303.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:305.102,307.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:319.55,320.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:320.31,322.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:323.2,323.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:323.26,325.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:326.2,326.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:329.71,330.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:343.26,344.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:345.10,346.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:354.95,362.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:362.16,364.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:366.2,397.39 14 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:397.39,399.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:399.27,401.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:402.8,404.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:405.2,407.46 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:407.46,410.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:411.2,411.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:411.44,413.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:413.12,415.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:417.2,417.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:417.26,419.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:420.2,420.84 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:420.84,422.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:427.2,427.65 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:427.65,429.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:431.2,433.20 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:433.20,435.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:436.2,437.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:437.20,439.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:440.2,440.56 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:440.56,442.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:443.2,443.56 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:443.56,448.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:450.2,450.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:450.45,453.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:459.2,459.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:459.31,461.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:461.22,462.62 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:462.62,465.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:466.4,466.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:468.3,468.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:471.2,472.115 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:472.115,474.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:491.2,491.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:491.19,493.23 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:493.23,495.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:496.3,508.21 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:508.21,510.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:511.3,511.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:522.2,522.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:522.43,535.34 5 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:535.34,556.30 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:556.30,558.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:559.4,559.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:559.44,561.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:562.4,562.106 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:562.106,564.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:575.4,575.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:575.74,577.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:578.4,579.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:579.18,581.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:583.4,584.28 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:584.28,586.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:588.4,588.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:588.31,599.57 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:599.57,601.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:601.17,604.7 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:606.5,607.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:607.21,609.6 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:615.5,615.138 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:615.138,617.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:617.27,619.7 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:620.6,620.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:622.5,623.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:623.26,625.6 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:626.5,626.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:630.4,631.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:631.20,633.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:634.4,634.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:634.22,637.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:637.26,639.6 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:640.5,640.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:645.4,660.77 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:660.77,662.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:663.4,664.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:664.25,666.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:667.4,667.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:673.2,673.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:673.26,675.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:677.2,678.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:678.25,680.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:681.2,681.97 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:681.97,683.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:690.2,691.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:691.21,693.33 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:693.33,695.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:696.3,696.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:696.33,698.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:699.3,699.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:699.49,704.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:721.3,721.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:721.54,722.84 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:722.84,724.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:728.2,728.99 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:728.99,730.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:732.2,733.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:733.22,735.10 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:736.109,737.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:738.100,739.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:740.114,741.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:742.107,743.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:744.11,745.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:748.2,749.43 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:749.43,751.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:753.2,755.34 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:755.34,756.48 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:756.48,757.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:757.19,760.5 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:764.2,764.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:764.31,767.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:768.2,768.35 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:768.35,771.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:772.2,772.76 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:772.76,776.3 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:778.2,780.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:780.16,782.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:782.20,785.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:788.2,788.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:788.25,798.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:798.18,800.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:800.9,800.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:800.30,807.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:808.3,808.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:808.36,810.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:811.3,812.50 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:812.50,815.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:816.3,822.17 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:822.17,824.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:826.3,836.17 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:836.17,838.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:839.3,839.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:842.2,843.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:843.30,844.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:844.52,846.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:846.9,848.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:851.2,869.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:869.21,871.43 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:871.43,873.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:874.3,874.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:874.29,876.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:886.3,886.76 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:886.76,888.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:890.2,890.105 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:890.105,892.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:893.2,894.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:894.16,896.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:901.2,904.40 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:904.40,905.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:905.15,906.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:909.3,910.63 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:910.63,912.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:912.9,914.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:916.3,916.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:916.43,918.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:919.3,920.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:920.20,922.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:925.3,925.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:925.23,928.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:929.3,931.33 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:931.33,934.39 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:934.39,936.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:939.2,948.42 5 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:948.42,950.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:950.21,952.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:952.9,955.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:959.2,959.53 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:959.53,960.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:960.54,961.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:961.33,963.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:964.9,972.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:973.3,973.60 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:973.60,974.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:974.40,976.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:978.3,978.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:978.61,979.41 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:979.41,981.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:983.3,983.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:983.28,985.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:986.3,987.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:989.2,989.51 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:989.51,991.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:995.2,997.53 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:997.53,999.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:999.8,1001.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1002.2,1002.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1002.22,1004.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1008.2,1014.76 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1014.76,1016.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1021.2,1021.57 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1021.57,1026.13 5 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1026.13,1029.21 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1029.21,1032.5 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1033.4,1033.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1033.49,1035.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1036.4,1043.89 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1043.89,1046.5 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1048.4,1048.86 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1052.2,1063.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1063.21,1065.40 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1065.40,1067.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1068.3,1068.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1068.38,1070.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1072.2,1074.18 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1074.18,1081.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1082.2,1082.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1082.28,1084.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1085.2,1085.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1085.16,1087.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1088.2,1088.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1088.30,1090.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1091.2,1091.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1091.30,1093.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1098.2,1098.76 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1098.76,1100.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1101.2,1102.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1102.16,1104.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1105.2,1105.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1111.94,1113.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1113.15,1115.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1117.2,1118.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1118.16,1120.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1122.2,1123.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1123.13,1125.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1126.2,1131.16 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1131.16,1133.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1134.2,1134.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1134.19,1136.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1146.2,1146.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1146.39,1148.55 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1148.55,1150.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1152.2,1152.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1152.39,1154.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1157.2,1158.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1158.21,1163.21 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1163.21,1165.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1166.3,1167.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1167.21,1169.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1170.3,1170.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1170.52,1172.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1173.3,1173.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1173.52,1178.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1179.3,1179.41 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1179.41,1182.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1183.3,1183.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1188.2,1188.46 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1188.46,1190.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1191.2,1191.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1191.27,1193.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1195.2,1196.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1196.16,1198.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1201.2,1210.16 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1210.16,1212.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1213.2,1213.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1218.59,1220.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1220.38,1222.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1225.2,1226.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1226.29,1227.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1227.22,1229.9 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1232.2,1232.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1232.18,1234.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1237.2,1244.29 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1244.29,1245.67 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1245.67,1247.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1249.2,1249.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1249.16,1251.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1254.2,1254.11 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1258.55,1260.47 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1260.47,1262.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1263.2,1264.58 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1264.58,1266.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1267.2,1267.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1270.252,1271.108 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1271.108,1273.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1274.2,1274.55 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1274.55,1276.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1277.2,1277.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1280.184,1282.69 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1282.69,1284.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1284.32,1285.58 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1285.58,1287.10 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1290.3,1290.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1290.18,1292.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1294.2,1294.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1294.19,1297.32 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1297.32,1298.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1298.39,1300.10 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1303.3,1303.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1303.19,1305.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1307.2,1307.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1307.21,1309.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1309.32,1310.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1310.49,1312.10 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1315.3,1315.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1315.18,1317.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1319.2,1319.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1319.28,1321.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1321.17,1323.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1324.3,1324.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1324.27,1326.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1328.2,1328.76 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1328.76,1330.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1331.2,1331.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1342.96,1343.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1343.26,1345.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1347.2,1348.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1348.16,1350.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1352.2,1363.23 9 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1363.23,1364.58 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1364.58,1365.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1365.31,1367.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1367.10,1369.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1373.2,1373.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1373.17,1375.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1376.2,1376.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1376.16,1378.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1379.2,1379.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1379.16,1381.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1382.2,1382.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1382.18,1384.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1385.2,1385.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1385.19,1387.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1388.2,1388.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1388.19,1390.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1396.2,1399.18 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1399.18,1400.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1400.61,1401.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1402.50,1403.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1404.12,1405.108 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1409.2,1410.42 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1410.42,1414.3 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1415.2,1420.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1420.16,1422.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1429.2,1444.43 6 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1444.43,1446.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1449.2,1451.27 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1451.27,1453.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1458.2,1458.46 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1458.46,1460.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1461.2,1461.63 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1461.63,1463.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1465.2,1466.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1466.15,1472.29 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1472.29,1479.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1479.18,1481.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1482.4,1482.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1482.23,1483.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1485.4,1485.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1485.30,1486.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1486.24,1488.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1488.32,1489.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1493.4,1494.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1494.30,1495.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1498.8,1504.29 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1504.29,1506.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1506.18,1508.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1509.4,1509.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1509.23,1510.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1512.4,1512.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1512.30,1513.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1513.24,1515.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1515.32,1516.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1520.4,1521.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1521.30,1522.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1526.2,1526.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1526.26,1528.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1528.17,1530.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1535.2,1535.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1535.74,1536.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1536.13,1537.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1537.33,1542.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1542.26,1544.39 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1544.39,1546.7 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1548.5,1548.82 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1565.2,1565.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1565.38,1569.27 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1569.27,1571.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1572.3,1572.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1572.27,1574.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1576.3,1581.32 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1581.32,1586.4 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1588.3,1592.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1592.18,1594.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1595.3,1596.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1596.17,1598.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1599.3,1599.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1602.2,1602.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1603.15,1618.32 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1618.32,1620.33 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1620.33,1621.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1621.40,1623.11 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1626.4,1638.6 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1640.3,1641.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1641.17,1643.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1644.3,1644.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1646.18,1648.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1648.17,1650.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1651.3,1651.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1653.10,1654.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1654.25,1656.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1657.3,1659.32 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1659.32,1661.33 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1661.33,1662.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1662.40,1664.11 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1667.4,1669.26 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1669.26,1671.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1672.4,1673.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1673.25,1675.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1676.4,1676.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1678.3,1678.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1690.51,1695.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1700.73,1702.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1702.16,1704.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1705.2,1706.48 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1706.48,1710.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1711.2,1713.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1713.16,1715.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1716.2,1716.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1727.117,1731.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1731.21,1733.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1734.2,1735.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1735.16,1737.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1738.2,1739.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1739.27,1741.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1742.2,1742.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1764.19,1775.30 7 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1775.30,1777.37 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1777.37,1779.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1781.3,1781.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1781.20,1783.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1797.2,1797.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1797.39,1799.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1801.2,1811.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1811.25,1813.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1815.2,1816.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1816.29,1818.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1824.2,1824.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1824.27,1826.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1831.2,1833.22 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1833.22,1835.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1837.2,1846.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1846.16,1848.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1853.2,1855.27 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1855.27,1857.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1859.2,1876.33 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1876.33,1878.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1880.2,1881.28 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1881.28,1885.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1885.20,1888.33 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1888.33,1889.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1889.40,1891.11 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1894.4,1894.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1894.20,1895.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1900.3,1900.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1900.22,1902.33 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1902.33,1903.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1903.50,1905.11 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1908.4,1908.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1908.19,1909.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1918.3,1918.56 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1918.56,1919.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1927.3,1927.64 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1927.64,1928.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1932.3,1935.32 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1935.32,1936.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1936.39,1938.10 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1942.3,1956.14 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1956.14,1957.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1957.37,1959.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1961.3,1962.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1962.26,1963.9 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1975.2,1975.59 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1975.59,1986.17 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1986.17,1988.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1990.3,1991.34 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1991.34,1993.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1995.3,1996.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1996.29,1998.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1998.21,2001.34 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2001.34,2002.41 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2002.41,2004.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2007.5,2007.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2007.21,2008.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2011.4,2011.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2011.23,2013.34 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2013.34,2014.51 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2014.51,2016.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2019.5,2019.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2019.20,2020.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2023.4,2023.57 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2023.57,2024.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2027.4,2027.65 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2027.65,2028.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2030.4,2031.33 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2031.33,2032.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2032.40,2034.11 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2037.4,2051.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2051.15,2052.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2052.38,2054.6 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2056.4,2057.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2057.27,2058.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2065.2,2066.28 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2066.28,2068.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2072.2,2072.71 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2072.71,2080.30 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2080.30,2081.41 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2081.41,2087.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2089.3,2089.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2089.13,2090.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2090.31,2095.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2095.25,2097.38 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2097.38,2099.7 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2101.5,2101.81 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2112.2,2112.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2112.38,2115.27 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2115.27,2117.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2121.3,2138.30 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2138.30,2140.11 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2140.11,2141.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2143.4,2160.15 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2160.15,2161.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2161.39,2163.6 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2165.4,2165.46 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2167.3,2173.24 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2173.24,2175.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2176.3,2176.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2179.2,2179.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2180.15,2182.24 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2182.24,2184.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2185.3,2185.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2187.18,2199.30 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2199.30,2201.11 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2201.11,2202.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2204.4,2208.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2208.15,2209.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2209.39,2211.6 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2213.4,2213.35 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2215.3,2216.24 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2216.24,2218.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2219.3,2219.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2220.10,2221.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2221.22,2223.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2224.3,2226.27 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2226.27,2228.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2228.20,2230.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2231.4,2233.26 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2233.26,2235.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2236.4,2237.23 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2237.23,2239.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2240.4,2240.46 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2240.46,2244.5 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2245.4,2245.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2247.3,2247.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2252.94,2254.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2254.16,2256.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2258.2,2260.18 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2260.18,2261.59 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2261.59,2262.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2262.36,2264.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2264.10,2266.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2270.2,2270.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2270.13,2272.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2273.2,2273.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2273.50,2275.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2277.2,2277.98 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2281.98,2282.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2282.26,2284.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2286.2,2287.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2287.16,2289.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2291.2,2292.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2292.13,2294.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2297.2,2298.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2298.19,2299.51 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2299.51,2301.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2302.3,2302.55 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2304.2,2304.42 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2304.42,2306.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2308.2,2308.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2308.54,2309.48 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2309.48,2311.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2312.3,2312.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2316.2,2318.53 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:17.82,19.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:21.149,22.55 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:22.55,24.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:25.2,25.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:25.36,27.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:28.2,34.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:34.16,36.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:37.2,37.42 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:37.42,39.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:40.2,40.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:43.105,44.48 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:44.48,46.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:47.2,48.54 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:51.129,53.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:53.16,55.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:56.2,57.53 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:57.53,59.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:60.2,61.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:61.25,63.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:64.2,65.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:65.16,67.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:68.2,68.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:26.97,27.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:27.18,29.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:30.2,30.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:33.37,35.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:37.81,38.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:38.44,40.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:41.2,41.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:41.38,43.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:44.2,44.57 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:47.88,48.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:48.32,50.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:51.2,52.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:52.20,54.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:55.2,55.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:58.40,72.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:74.106,75.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:75.34,77.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:78.2,79.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:79.16,81.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:83.2,84.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:84.16,86.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:88.2,89.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:89.13,91.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:93.2,94.63 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:94.63,96.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:98.2,98.72 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:98.72,100.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:102.2,106.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:109.117,110.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:110.32,112.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:113.2,113.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:113.34,115.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:117.2,118.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:118.16,120.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:121.2,121.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:121.19,123.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:125.2,126.69 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:126.69,128.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:130.2,136.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:18.33,20.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:22.27,37.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:39.93,40.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:40.30,42.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:43.2,43.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:43.28,45.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:46.2,47.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:47.16,49.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:51.2,52.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:52.17,54.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:55.2,56.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:56.19,58.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:59.2,59.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:59.19,61.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:62.2,63.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:63.16,65.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:67.2,74.9 3 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:74.9,76.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:77.2,78.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:78.15,80.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:81.2,85.16 4 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:85.16,87.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:88.2,88.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:88.17,90.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:92.2,101.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:104.48,105.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:105.16,107.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:108.2,109.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:109.29,111.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:112.2,112.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:112.31,114.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:115.2,115.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:118.75,120.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:120.27,121.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:121.32,123.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:123.17,124.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:126.4,126.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:129.2,134.33 3 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:134.33,136.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:137.2,137.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:137.40,138.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:138.39,140.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:141.3,141.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:143.2,143.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:143.34,145.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:146.2,147.35 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:147.35,149.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:150.2,150.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:153.77,154.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:154.20,156.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:157.2,159.31 3 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:159.31,160.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:160.33,162.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:163.3,163.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:163.30,165.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:167.2,170.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:23.91,25.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:27.38,50.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:52.104,53.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:53.38,55.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:56.2,57.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:57.16,59.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:61.2,62.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:62.26,64.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:65.2,66.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:66.30,68.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:69.2,69.72 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:69.72,71.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:73.2,74.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:74.16,76.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:77.2,78.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:78.16,80.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:81.2,82.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:82.16,84.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:85.2,86.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:86.16,88.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:90.2,105.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:105.16,107.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:109.2,109.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:109.19,117.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:118.2,118.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:118.25,120.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:121.2,121.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:121.30,123.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:124.2,124.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:124.31,126.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:127.2,128.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:128.16,130.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:131.2,131.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:134.91,136.9 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:136.9,138.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:139.2,140.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:140.15,141.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:141.19,143.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:144.3,144.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:146.2,146.94 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:149.59,150.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:150.16,152.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:153.2,154.61 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:154.61,156.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:157.2,157.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:160.56,161.75 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:161.75,163.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:164.2,164.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:167.67,169.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:170.17,171.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:172.67,173.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:174.10,175.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:179.60,180.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:180.16,182.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:183.2,184.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:184.25,186.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:187.2,187.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:190.57,191.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:192.15,193.81 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:193.81,195.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:196.3,196.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:197.19,199.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:199.17,201.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:202.3,202.55 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:202.55,204.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:205.3,205.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:206.14,207.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:208.11,209.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:210.10,211.41 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:215.59,216.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:216.16,218.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:219.2,219.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:220.12,221.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:222.14,223.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:224.10,225.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:28.90,30.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:30.16,32.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:34.2,36.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:37.16,38.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:40.16,42.140 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:44.20,46.140 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:48.17,50.142 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:52.17,56.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:56.50,62.63 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:62.63,64.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:66.4,66.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:66.45,68.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:72.4,74.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:74.25,76.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:77.4,77.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:80.3,80.101 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:82.18,84.141 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:86.18,88.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:88.18,90.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:91.3,91.41 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:93.17,96.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:96.50,99.59 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:99.59,101.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:102.4,104.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:104.25,106.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:107.4,107.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:110.3,110.98 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:112.10,116.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:125.86,126.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:126.16,128.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:129.2,130.9 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:130.9,132.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:133.2,133.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:133.22,135.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:137.2,139.31 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:139.31,141.10 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:141.10,143.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:144.3,145.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:145.22,147.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:148.3,149.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:149.26,151.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:152.3,152.68 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:152.68,154.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:155.3,156.37 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:156.37,158.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:159.3,160.107 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:162.2,162.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:165.249,166.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:166.24,168.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:169.2,169.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:169.38,171.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:173.2,174.31 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:174.31,175.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:175.32,177.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:180.2,181.34 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:181.34,182.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:182.29,183.9 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:185.3,197.17 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:197.17,199.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:200.3,200.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:200.20,201.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:203.3,203.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:203.37,205.33 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:205.33,206.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:208.4,208.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:208.19,209.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:209.43,210.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:212.5,212.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:214.4,215.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:215.30,216.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:220.2,220.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:223.113,229.2 5 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:231.101,233.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:247.92,251.16 4 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:251.16,253.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:253.8,253.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:253.24,255.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:259.2,272.51 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:272.51,274.38 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:274.38,275.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:276.50,277.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:278.12,279.107 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:287.2,292.26 5 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:292.26,294.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:297.2,297.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:297.19,301.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:303.2,311.42 5 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:311.42,315.3 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:316.2,341.64 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:341.64,342.86 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:342.86,344.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:345.3,345.56 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:345.56,347.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:348.3,360.19 6 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:360.19,364.4 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:365.3,365.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:369.2,370.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:370.15,372.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:372.27,374.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:375.3,375.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:375.27,377.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:380.2,381.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:381.15,387.28 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:387.28,395.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:395.18,397.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:398.4,398.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:398.23,399.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:401.4,401.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:401.30,402.66 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:402.66,403.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:405.5,406.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:406.12,407.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:409.5,409.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:409.28,413.6 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:414.5,415.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:415.30,416.11 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:419.4,420.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:420.30,421.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:424.8,432.28 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:432.28,438.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:438.18,440.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:441.4,441.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:441.23,442.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:444.4,444.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:444.30,445.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:445.40,447.31 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:447.31,448.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:452.4,455.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:455.30,456.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:461.2,465.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:465.17,467.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:469.2,470.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:470.16,472.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:473.2,473.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:20.79,21.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:21.43,23.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:24.2,24.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:24.29,26.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:27.2,27.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:30.40,63.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:65.68,71.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:71.25,74.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:75.2,75.67 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:78.62,83.19 3 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:83.19,87.3 3 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:88.2,88.89 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:91.101,92.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:92.22,94.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:95.2,96.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:96.18,98.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:99.2,100.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:100.16,102.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:103.2,104.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:104.16,106.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:107.2,107.119 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:110.99,111.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:111.22,113.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:114.2,115.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:115.18,117.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:118.2,119.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:119.16,121.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:122.2,122.51 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:122.51,124.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:125.2,126.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:126.16,128.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:129.2,131.15 3 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:131.15,132.69 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:132.69,134.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:135.3,135.58 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:137.2,137.130 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:140.102,142.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:142.16,144.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:145.2,145.64 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:145.64,147.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:148.2,148.113 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:151.109,153.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:153.16,155.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:156.2,157.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:157.16,159.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:160.2,161.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:161.16,163.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:164.2,164.67 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:167.107,169.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:169.16,171.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:172.2,173.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:173.16,175.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:176.2,176.107 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:176.107,178.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:179.2,179.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:180.41,181.63 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:182.41,183.95 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:184.10,185.83 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:189.111,191.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:191.16,193.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:194.2,195.57 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:195.57,197.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:198.2,199.23 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:199.23,201.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:202.2,203.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:203.16,205.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:206.2,206.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:206.17,208.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:209.2,209.108 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:212.63,215.2 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:217.69,219.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:219.16,221.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:222.2,222.79 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:225.60,227.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:227.16,229.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:230.2,230.57 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:233.137,234.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:234.49,236.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:237.2,238.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:238.16,240.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:241.2,243.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:243.16,245.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:246.2,247.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:247.16,249.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:250.2,250.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:250.22,252.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:253.2,253.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:256.142,258.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:258.16,260.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:261.2,262.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:262.16,264.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:265.2,265.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:265.47,267.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:268.2,269.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:269.16,270.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:270.50,272.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:273.3,273.89 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:275.2,275.173 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:278.157,280.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:280.16,282.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:283.2,283.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:283.47,285.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:286.2,287.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:287.16,288.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:288.50,290.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:291.3,291.89 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:293.2,293.169 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:296.104,297.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:297.22,299.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:300.2,301.61 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:301.61,303.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:303.20,304.9 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:307.2,307.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:307.19,309.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:310.2,317.8 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:320.119,322.39 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:322.39,323.81 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:323.81,325.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:327.2,327.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:330.71,332.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:332.16,334.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:335.2,335.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:17.61,105.23 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:105.23,122.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:123.2,123.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:126.104,127.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:127.61,129.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:130.2,130.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:130.38,132.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:133.2,134.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:134.16,136.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:137.2,138.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:138.16,140.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:141.2,147.107 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:147.107,149.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:150.2,151.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:151.16,153.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:154.2,170.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:170.19,172.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:173.2,173.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:176.103,177.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:177.61,179.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:180.2,180.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:180.38,182.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:183.2,184.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:184.16,186.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:187.2,191.106 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:191.106,193.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:194.2,195.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:195.16,197.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:198.2,200.31 3 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:200.31,207.36 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:207.36,218.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:219.3,220.35 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:222.2,230.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:233.107,234.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:234.61,236.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:237.2,237.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:237.38,239.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:240.2,241.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:241.16,243.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:244.2,248.110 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:248.110,250.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:251.2,252.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:252.16,254.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:255.2,256.33 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:256.33,266.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:267.2,275.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:278.108,279.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:279.61,281.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:282.2,282.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:282.37,284.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:285.2,286.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:286.16,288.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:289.2,290.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:290.19,292.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:293.2,293.104 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:293.104,295.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:296.2,297.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:297.16,299.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:300.2,307.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:307.16,309.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:310.2,311.43 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:311.43,318.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:319.2,332.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:332.22,334.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:335.2,335.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:338.108,339.62 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:339.62,341.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:342.2,342.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:342.38,344.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:345.2,346.9 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:346.9,348.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:349.2,350.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:350.16,352.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:353.2,357.16 5 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:357.16,359.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:360.2,370.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:373.109,374.62 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:374.62,376.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:377.2,377.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:377.38,379.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:380.2,381.9 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:381.9,383.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:384.2,385.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:385.16,387.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:388.2,390.32 3 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:390.32,392.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:393.2,394.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:394.16,396.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:397.2,403.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:406.106,407.62 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:407.62,409.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:410.2,410.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:410.38,412.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:413.2,414.9 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:414.9,416.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:417.2,418.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:418.16,420.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:421.2,423.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:423.16,424.41 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:424.41,434.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:435.3,435.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:437.2,445.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:483.65,484.42 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:484.42,485.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:485.39,487.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:489.2,489.85 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:489.85,491.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:492.2,492.95 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:495.102,496.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:496.38,498.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:499.2,499.58 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:499.58,501.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:502.2,502.90 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:505.60,508.2 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:510.66,512.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:512.26,514.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:515.2,515.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:518.69,521.33 3 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:521.33,523.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:523.21,524.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:526.3,526.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:526.34,527.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:529.3,530.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:532.2,532.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:535.63,537.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:537.19,539.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:540.2,541.42 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:541.42,543.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:544.2,544.57 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:544.57,546.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:547.2,547.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:547.54,549.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:550.2,550.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:553.70,557.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:559.66,561.9 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:561.9,563.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:564.2,566.17 3 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:566.17,568.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:569.2,569.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:570.103,572.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:573.34,574.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:575.10,576.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:580.56,581.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:581.37,583.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:584.2,584.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:584.26,586.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:586.37,587.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:589.3,589.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:591.2,591.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:594.90,602.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:604.68,605.71 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:605.71,607.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:607.17,609.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:610.3,610.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:612.2,613.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:613.16,615.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:616.2,617.41 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:617.41,619.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:620.2,620.78 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:623.65,625.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:625.16,627.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:628.2,628.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:628.17,630.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:631.2,631.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:634.51,635.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:635.16,637.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:638.2,638.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:641.56,642.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:642.28,644.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:645.2,646.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:649.92,651.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:651.29,653.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:654.2,654.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:657.86,659.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:659.29,661.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:662.2,662.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:665.94,667.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:667.29,669.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:670.2,670.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:673.98,675.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:675.29,677.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:678.2,678.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:17.93,18.104 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:18.104,20.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:22.2,23.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:23.16,25.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:27.2,28.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:28.19,30.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:32.2,35.33 3 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:35.33,36.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:36.47,39.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:42.2,44.20 3 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:44.20,47.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:48.2,49.68 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:49.68,50.48 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:50.48,52.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:53.3,53.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:53.32,55.23 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:55.23,56.63 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:56.63,58.6 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:59.5,59.53 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:61.4,61.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:64.2,71.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:71.17,73.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:73.8,73.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:73.29,75.36 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:75.36,77.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:78.3,83.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:86.2,86.35 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:86.35,88.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:90.2,97.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:97.16,99.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:101.2,110.28 3 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:110.28,112.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:113.2,124.16 4 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:124.16,126.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:127.2,127.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:133.93,134.35 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:134.35,136.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:138.2,139.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:139.16,141.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:143.2,144.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:144.16,146.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:147.2,147.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:147.17,149.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:151.2,152.33 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:152.33,153.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:153.47,156.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:159.2,160.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:160.16,162.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:164.2,176.26 3 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:176.26,178.23 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:178.23,180.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:181.3,192.5 3 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:195.2,196.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:196.16,198.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:199.2,199.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:22.104,24.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:24.16,26.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:28.2,29.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:29.18,31.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:33.2,33.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:34.13,35.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:36.13,37.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:38.14,39.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:40.16,41.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:42.10,43.95 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:51.67,53.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:57.68,58.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:58.33,60.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:61.2,61.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:67.42,69.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:74.61,76.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:76.26,78.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:79.2,79.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:85.90,86.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:86.49,88.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:90.2,91.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:91.15,93.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:94.2,95.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:95.17,97.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:100.2,103.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:103.16,105.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:107.2,113.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:113.12,115.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:115.18,117.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:118.3,119.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:119.20,121.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:122.3,124.48 3 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:125.8,127.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:129.2,130.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:130.16,132.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:134.2,139.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:145.90,147.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:147.15,149.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:151.2,152.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:152.16,154.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:156.2,157.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:157.16,158.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:158.47,160.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:161.3,161.56 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:164.2,170.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:170.19,173.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:173.8,175.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:176.2,176.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:181.92,183.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:183.16,185.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:187.2,188.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:188.16,190.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:192.2,200.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:200.25,207.28 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:207.28,209.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:210.3,210.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:212.2,212.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:216.93,217.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:217.52,219.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:221.2,222.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:222.15,224.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:226.2,227.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:227.16,229.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:231.2,231.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:231.47,232.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:232.47,234.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:235.3,235.59 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:238.2,241.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:35.127,36.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:36.23,38.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:39.2,40.40 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:40.40,42.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:43.2,43.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:43.37,45.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:46.2,46.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:46.37,48.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:49.2,49.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:52.23,80.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:82.26,140.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:142.92,143.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:143.25,145.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:147.2,148.49 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:148.49,150.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:152.2,152.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:153.17,154.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:154.24,156.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:157.3,158.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:158.17,160.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:161.3,165.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:166.17,167.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:167.22,169.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:170.3,170.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:170.22,172.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:173.3,174.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:174.17,176.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:177.3,181.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:182.16,189.23 7 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:189.23,191.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:192.3,192.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:192.24,194.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:195.3,195.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:195.39,197.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:198.3,207.17 3 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:207.17,209.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:210.3,210.69 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:210.69,212.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:213.3,213.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:214.10,215.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:219.92,220.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:220.25,222.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:224.2,225.49 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:225.49,227.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:229.2,229.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:230.17,232.24 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:232.24,234.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:235.3,236.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:236.17,238.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:239.3,239.59 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:239.59,241.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:242.3,242.81 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:242.81,244.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:245.3,250.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:251.17,253.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:253.22,255.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:256.3,257.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:257.17,259.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:260.3,260.79 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:260.79,262.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:263.3,268.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:269.10,270.66 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:274.91,276.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:276.16,278.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:279.2,279.67 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:279.67,280.76 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:280.76,282.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:285.2,286.52 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:286.52,288.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:289.2,289.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:292.74,294.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:294.16,296.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:297.2,297.62 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:297.62,299.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:300.2,300.68 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:303.109,304.56 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:304.56,306.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:307.2,307.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:307.25,309.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:310.2,310.81 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:310.81,312.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:313.2,313.102 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:313.102,315.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:316.2,316.108 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:316.108,318.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:319.2,319.99 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:319.99,321.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:322.2,322.99 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:322.99,324.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:325.2,325.60 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:325.60,327.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:328.2,328.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:328.34,330.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:331.2,331.114 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:331.114,333.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:334.2,334.66 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:334.66,336.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:337.2,337.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:337.40,339.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:340.2,340.132 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:340.132,342.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:343.2,343.35 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:343.35,345.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:346.2,346.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:349.92,350.103 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:350.103,352.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:354.2,355.52 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:355.52,357.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:358.2,358.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:358.32,360.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:361.2,361.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:364.108,365.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:365.19,367.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:368.2,369.53 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:369.53,371.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:372.2,372.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:372.19,374.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:375.2,375.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:375.39,376.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:376.34,378.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:380.2,380.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:383.66,385.53 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:385.53,387.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:388.2,388.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:388.19,390.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:391.2,391.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:10.101,12.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:12.16,14.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:16.2,18.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:19.16,20.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:21.14,22.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:23.15,24.84 1 0 +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:25.16,26.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:27.10,28.97 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:21.75,23.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:25.41,28.2 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:30.31,37.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:39.38,46.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:48.50,56.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:58.43,70.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:72.80,73.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:73.36,75.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:76.2,76.48 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:76.48,78.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:79.2,79.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:82.97,84.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:84.16,86.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:87.2,88.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:88.16,90.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:91.2,92.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:92.16,94.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:95.2,96.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:96.16,98.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:99.2,99.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:102.104,104.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:104.16,106.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:107.2,108.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:108.16,110.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:111.2,112.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:112.16,114.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:115.2,116.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:116.16,118.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:119.2,119.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:122.96,124.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:124.16,126.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:127.2,128.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:128.19,130.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:131.2,132.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:132.18,134.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:135.2,141.79 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:141.79,143.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:143.17,145.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:146.3,146.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:148.2,148.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:151.77,153.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:153.16,155.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:156.2,157.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:157.19,159.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:160.2,160.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:10.101,12.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:12.16,14.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:16.2,17.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:17.18,19.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:21.2,21.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:22.15,23.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:24.13,25.42 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:26.14,27.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:28.16,29.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:30.16,31.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:32.10,33.102 1 0 diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/repeat-01/create-database.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/repeat-01/create-database.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/repeat-01/create-database.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/repeat-01/create-database.stdout.log new file mode 100644 index 00000000..4b15bd57 --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/repeat-01/create-database.stdout.log @@ -0,0 +1 @@ +CREATE DATABASE diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/repeat-01/create-pgvector.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/repeat-01/create-pgvector.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/repeat-01/create-pgvector.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/repeat-01/create-pgvector.stdout.log new file mode 100644 index 00000000..d26bad14 --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/repeat-01/create-pgvector.stdout.log @@ -0,0 +1 @@ +CREATE EXTENSION diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/repeat-01/database-identity.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/repeat-01/database-identity.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/repeat-01/database-identity.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/repeat-01/database-identity.stdout.log new file mode 100644 index 00000000..644e56f8 --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/repeat-01/database-identity.stdout.log @@ -0,0 +1 @@ +{"database" : "engram_prc_rg_test_77fc44a810a688de_r1", "schema" : "public", "server_version" : "17.10 (Debian 17.10-1.pgdg12+1)", "user" : "engram"} diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/repeat-01/go-test-summary.json b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/repeat-01/go-test-summary.json new file mode 100644 index 00000000..98e9d814 --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/repeat-01/go-test-summary.json @@ -0,0 +1,40 @@ +{ + "schema_version": 1, + "verdict": "PASS", + "input_path": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-ambient-true-overridden\\repeat-01\\go-test.stdout.jsonl", + "fail_on_unexpected_skip": true, + "allowed_skip_identities": [], + "counts": { + "packages": 1, + "tests": 1, + "passed": 1, + "failed": 0, + "skipped": 0, + "no_tests": 0, + "zero_tests": 0, + "incomplete": 0, + "unexpected_skips": 0, + "malformed_lines": 0 + }, + "packages": [ + { + "package": "github.com/thebtf/engram/internal/mcp", + "outcome": "pass", + "elapsed_seconds": 3.703, + "last_output": "ok \tgithub.com/thebtf/engram/internal/mcp\t3.695s\tcoverage: 0.1% of statements", + "tests_observed": 1 + } + ], + "tests": [ + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestEC_F1_TagDerivedBackfill_T007", + "outcome": "pass", + "elapsed_seconds": 3.58, + "last_output": "--- PASS: TestEC_F1_TagDerivedBackfill_T007 (3.58s)", + "skip_allowed": false + } + ], + "unexpected_skips": [], + "errors": [] +} diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/repeat-01/go-test.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/repeat-01/go-test.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/repeat-01/go-test.stdout.jsonl b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/repeat-01/go-test.stdout.jsonl new file mode 100644 index 00000000..a3bf75aa --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/repeat-01/go-test.stdout.jsonl @@ -0,0 +1,16 @@ +{"Time":"2026-07-11T04:00:54.9616599+03:00","Action":"start","Package":"github.com/thebtf/engram/internal/mcp"} +{"Time":"2026-07-11T04:00:55.0480298+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007"} +{"Time":"2026-07-11T04:00:55.0480298+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":"=== RUN TestEC_F1_TagDerivedBackfill_T007\n"} +{"Time":"2026-07-11T04:00:55.9018708+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":"{\"level\":\"warn\",\"error\":\"ERROR: relation \\\"observation_vectors\\\" does not exist (SQLSTATE 42P01)\",\"time\":\"2026-07-11T04:00:55+03:00\",\"message\":\"migration 040: orphan vector cleanup failed (non-fatal)\"}\n"} +{"Time":"2026-07-11T04:00:55.9018708+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":"{\"level\":\"info\",\"garbage_deleted\":0,\"orphan_vectors_deleted\":0,\"time\":\"2026-07-11T04:00:55+03:00\",\"message\":\"migration 040: garbage cleanup complete\"}\n"} +{"Time":"2026-07-11T04:00:55.90987+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":"{\"level\":\"info\",\"orphan_vectors_deleted\":0,\"time\":\"2026-07-11T04:00:55+03:00\",\"message\":\"migration 041: orphan vector purge complete\"}\n"} +{"Time":"2026-07-11T04:00:55.9173697+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":"{\"level\":\"info\",\"patterns_deleted\":0,\"time\":\"2026-07-11T04:00:55+03:00\",\"message\":\"migration 042: low-quality pattern purge complete\"}\n"} +{"Time":"2026-07-11T04:00:55.9498699+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":"{\"level\":\"info\",\"total_deleted\":0,\"time\":\"2026-07-11T04:00:55+03:00\",\"message\":\"migration 043: radical observation cleanup complete\"}\n"} +{"Time":"2026-07-11T04:00:57.139229+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":"{\"level\":\"warn\",\"error\":\"ERROR: extension \\\"vectorscale\\\" is not available (SQLSTATE 0A000)\",\"time\":\"2026-07-11T04:00:57+03:00\",\"message\":\"migration 109: vectorscale extension not available, skipping DiskANN index\"}\n"} +{"Time":"2026-07-11T04:00:58.2570496+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":"{\"level\":\"debug\",\"connections\":1,\"time\":\"2026-07-11T04:00:58+03:00\",\"message\":\"Connection pool warmed\"}\n"} +{"Time":"2026-07-11T04:00:58.6236267+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":"--- PASS: TestEC_F1_TagDerivedBackfill_T007 (3.58s)\n"} +{"Time":"2026-07-11T04:00:58.6241249+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Elapsed":3.58} +{"Time":"2026-07-11T04:00:58.6241249+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Output":"PASS\n"} +{"Time":"2026-07-11T04:00:58.6386243+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Output":"coverage: 0.1% of statements\n"} +{"Time":"2026-07-11T04:00:58.6646648+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Output":"ok \tgithub.com/thebtf/engram/internal/mcp\t3.695s\tcoverage: 0.1% of statements\n"} +{"Time":"2026-07-11T04:00:58.6646648+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Elapsed":3.703} diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/repeat-01/pg-stat-activity-after.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/repeat-01/pg-stat-activity-after.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/repeat-01/pg-stat-activity-after.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/repeat-01/pg-stat-activity-after.stdout.log new file mode 100644 index 00000000..fe51488c --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/repeat-01/pg-stat-activity-after.stdout.log @@ -0,0 +1 @@ +[] diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/repeat-01/pg-stat-activity-before.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/repeat-01/pg-stat-activity-before.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/repeat-01/pg-stat-activity-before.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/repeat-01/pg-stat-activity-before.stdout.log new file mode 100644 index 00000000..fe51488c --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/repeat-01/pg-stat-activity-before.stdout.log @@ -0,0 +1 @@ +[] diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/repeat-01/repeat-summary.json b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/repeat-01/repeat-summary.json new file mode 100644 index 00000000..0003b5d7 --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/repeat-01/repeat-summary.json @@ -0,0 +1,33 @@ +{ + "repeat": 1, + "verdict": "PASS", + "database": "engram_prc_rg_test_77fc44a810a688de_r1", + "schema": "public", + "database_schema_identity": "engram_prc_rg_test_77fc44a810a688de_r1.public", + "database_dsn": "REDACTED_DATABASE_DSN", + "database_create_confirmed": true, + "sequential_execution": { + "package_parallelism": 1, + "test_parallelism": 1 + }, + "race": false, + "connection_budget": 20, + "server_sessions_before": 6, + "server_sessions_after": 6, + "sessions_before": 0, + "sessions_after": 0, + "go_test_exit": 0, + "json_parser_exit": 0, + "coverage_policy": "Targeted", + "coverage_exit": 0, + "cleanup_exit": 0, + "cleanup_status": "PASS", + "required_session_start_execution": { + "schema_version": 1, + "verdict": "NOT_APPLICABLE", + "reason": "only an unfiltered canonical ./... run requires the 12-test session-start execution proof" + }, + "cleanup_summary": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-ambient-true-overridden\\repeat-01\\cleanup\\cleanup.json", + "errors": [], + "artifact_directory": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-ambient-true-overridden\\repeat-01" +} diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/repeat-01/server-connection-count-after.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/repeat-01/server-connection-count-after.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/repeat-01/server-connection-count-after.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/repeat-01/server-connection-count-after.stdout.log new file mode 100644 index 00000000..1e8b3149 --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/repeat-01/server-connection-count-after.stdout.log @@ -0,0 +1 @@ +6 diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/repeat-01/server-connection-count-before.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/repeat-01/server-connection-count-before.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/repeat-01/server-connection-count-before.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/repeat-01/server-connection-count-before.stdout.log new file mode 100644 index 00000000..1e8b3149 --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/repeat-01/server-connection-count-before.stdout.log @@ -0,0 +1 @@ +6 diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/repeat-01/targeted-coverage.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/repeat-01/targeted-coverage.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/repeat-01/targeted-coverage.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/repeat-01/targeted-coverage.stdout.log new file mode 100644 index 00000000..c958686c --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/repeat-01/targeted-coverage.stdout.log @@ -0,0 +1,352 @@ +github.com/thebtf/engram/internal/mcp/audit_helpers.go:33: effectiveAuditWriter 0.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:44: isAuditEnabled 0.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:52: runAuditAsync 0.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:77: marshalState 0.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:92: logAuditCreate 0.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:117: logAuditEdit 0.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:142: logAuditDelete 0.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:166: logAuditGeneric 0.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:189: logAuditSupersede 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:30: parseArgs 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:46: coerceString 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:67: coerceInt 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:97: coerceInt64 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:127: coerceFloat64 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:151: coerceBool 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:177: coerceStringSlice 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:204: coerceInt64Slice 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:222: clampToInt 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:236: clampInt64ToInt 0.0% +github.com/thebtf/engram/internal/mcp/context.go:17: extractProjectFromHeader 0.0% +github.com/thebtf/engram/internal/mcp/context.go:22: contextWithProject 0.0% +github.com/thebtf/engram/internal/mcp/context.go:29: ContextWithProject 0.0% +github.com/thebtf/engram/internal/mcp/context.go:35: projectFromContext 0.0% +github.com/thebtf/engram/internal/mcp/context.go:41: contextWithSession 0.0% +github.com/thebtf/engram/internal/mcp/context.go:48: ContextWithSession 0.0% +github.com/thebtf/engram/internal/mcp/context.go:54: sessionFromContext 0.0% +github.com/thebtf/engram/internal/mcp/context.go:61: actorFromContext 0.0% +github.com/thebtf/engram/internal/mcp/health.go:22: NewMCPHealth 0.0% +github.com/thebtf/engram/internal/mcp/health.go:29: RecordRequest 0.0% +github.com/thebtf/engram/internal/mcp/health.go:36: RecordError 0.0% +github.com/thebtf/engram/internal/mcp/health.go:42: rotateWindowIfNeeded 0.0% +github.com/thebtf/engram/internal/mcp/health.go:55: HandleHealth 0.0% +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:28: ruleGovernanceCaptureEnabled 0.0% +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:39: captureActiveRuleIntent 0.0% +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:104: ruleIntentFingerprint 0.0% +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:113: marshalRuleCandidateIntentResponse 0.0% +github.com/thebtf/engram/internal/mcp/server.go:127: NewServer 100.0% +github.com/thebtf/engram/internal/mcp/server.go:141: SetBackfillStatusFunc 0.0% +github.com/thebtf/engram/internal/mcp/server.go:146: SetVersionedDocumentStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:151: SetIssueStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:156: SetMemoryStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:161: SetMetaMemoryIndex 0.0% +github.com/thebtf/engram/internal/mcp/server.go:166: SetHintQueue 0.0% +github.com/thebtf/engram/internal/mcp/server.go:171: SetStateStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:176: SetDirectiveCaptureService 0.0% +github.com/thebtf/engram/internal/mcp/server.go:181: SetBehavioralRulesStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:186: SetRuleGovernanceStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:191: SetRuleInjectionTelemetryStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:195: SetPromotionStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:199: SetGraphStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:204: SetNodesStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:211: SetAuditStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:216: SetPurgeStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:222: SetCandidateStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:228: SetSnapshotStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:234: SetBulkFacade 0.0% +github.com/thebtf/engram/internal/mcp/server.go:240: setTestAuditWriter 0.0% +github.com/thebtf/engram/internal/mcp/server.go:246: setTestMemoryEditor 0.0% +github.com/thebtf/engram/internal/mcp/server.go:252: setTestMemorySignificanceUpdater 0.0% +github.com/thebtf/engram/internal/mcp/server.go:260: SetWriteLintOrchestrator 0.0% +github.com/thebtf/engram/internal/mcp/server.go:269: SetRedactionRules 0.0% +github.com/thebtf/engram/internal/mcp/server.go:274: SetEmbeddingStores 0.0% +github.com/thebtf/engram/internal/mcp/server.go:282: SetRerankClient 0.0% +github.com/thebtf/engram/internal/mcp/server.go:290: SetStatsDB 0.0% +github.com/thebtf/engram/internal/mcp/server.go:297: HandleRequest 0.0% +github.com/thebtf/engram/internal/mcp/server.go:303: ListTools 0.0% +github.com/thebtf/engram/internal/mcp/server.go:332: Version 0.0% +github.com/thebtf/engram/internal/mcp/server.go:383: Run 0.0% +github.com/thebtf/engram/internal/mcp/server.go:427: handleRequest 0.0% +github.com/thebtf/engram/internal/mcp/server.go:461: handleNotification 0.0% +github.com/thebtf/engram/internal/mcp/server.go:473: handleInitialize 0.0% +github.com/thebtf/engram/internal/mcp/server.go:496: buildInstructions 0.0% +github.com/thebtf/engram/internal/mcp/server.go:660: storeMemoryTool 0.0% +github.com/thebtf/engram/internal/mcp/server.go:712: recallMemoryTool 0.0% +github.com/thebtf/engram/internal/mcp/server.go:805: primaryTools 0.0% +github.com/thebtf/engram/internal/mcp/server.go:942: handleToolsList 0.0% +github.com/thebtf/engram/internal/mcp/server.go:1612: handleToolsCall 0.0% +github.com/thebtf/engram/internal/mcp/server.go:1644: sanitizeToolCallArgs 0.0% +github.com/thebtf/engram/internal/mcp/server.go:1656: callTool 0.0% +github.com/thebtf/engram/internal/mcp/server.go:1874: sendResponse 0.0% +github.com/thebtf/engram/internal/mcp/server.go:1884: sendError 0.0% +github.com/thebtf/engram/internal/mcp/server.go:1896: handleFindSimilarObservations 0.0% +github.com/thebtf/engram/internal/mcp/server.go:1927: handleGetMemoryStats 0.0% +github.com/thebtf/engram/internal/mcp/server.go:2055: handleBackfillStatus 0.0% +github.com/thebtf/engram/internal/mcp/server.go:2071: handleCheckSystemHealth 0.0% +github.com/thebtf/engram/internal/mcp/server.go:2216: handleAnalyzeSearchPatterns 0.0% +github.com/thebtf/engram/internal/mcp/server.go:2246: handleSearchSessions 0.0% +github.com/thebtf/engram/internal/mcp/server.go:2251: handleListSessions 0.0% +github.com/thebtf/engram/internal/mcp/tools_admin.go:18: buildAdminTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_admin.go:68: adminActionsForEnv 33.3% +github.com/thebtf/engram/internal/mcp/tools_admin.go:80: vnextEnabled 0.0% +github.com/thebtf/engram/internal/mcp/tools_admin.go:84: handleAdmin 0.0% +github.com/thebtf/engram/internal/mcp/tools_admin.go:120: handlePurgeProject 0.0% +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:27: ambientHintsEnabledFromEnv 0.0% +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:32: ambientHintsTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:48: handleGetAmbientHints 0.0% +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:86: normalizeAmbientHintsToolLimit 0.0% +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:96: ambientHintItems 0.0% +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:114: errMissingSessionID 0.0% +github.com/thebtf/engram/internal/mcp/tools_brief.go:31: handleGetMemoryBrief 0.0% +github.com/thebtf/engram/internal/mcp/tools_brief.go:107: memoryBriefUsesPrincipalScope 0.0% +github.com/thebtf/engram/internal/mcp/tools_brief.go:115: handlePrincipalMemoryBrief 0.0% +github.com/thebtf/engram/internal/mcp/tools_brief.go:259: truncateBriefContent 0.0% +github.com/thebtf/engram/internal/mcp/tools_brief.go:270: filterInjectionByScope 0.0% +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:25: bulkOpsTools 0.0% +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:95: handleBulkPromote 0.0% +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:154: handleBulkDelete 0.0% +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:211: handleBulkSupersede 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:31: candidateItemFromDomain 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:51: newCandidateReviewSnapshot 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:59: requireCandidateReviewSnapshot 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:68: candidateTools 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:165: handleListCandidates 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:208: handleGetCandidate 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:239: handlePromoteCandidate 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:348: handleRejectCandidate 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:402: handleSupersedeCandidate 0.0% +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:34: codeIntelEnabled 0.0% +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:42: SetCodeChunkStore 0.0% +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:48: codebaseSearchTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:79: codebaseStatusTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:100: handleCodebaseSearch 0.0% +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:194: handleCodebaseStatus 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:21: getVault 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:35: credentialStore 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:49: handleStoreCredential 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:130: handleGetCredential 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:192: handleListCredentials 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:243: handleDeleteCredential 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:302: handleVaultStatus 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:338: expandTagHierarchy 0.0% +github.com/thebtf/engram/internal/mcp/tools_directives.go:16: directivesCaptureEnabledFromEnv 0.0% +github.com/thebtf/engram/internal/mcp/tools_directives.go:20: rememberDirectiveTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_directives.go:38: currentDirectiveCaptureService 0.0% +github.com/thebtf/engram/internal/mcp/tools_directives.go:48: handleRememberDirective 0.0% +github.com/thebtf/engram/internal/mcp/tools_directives.go:72: parseRememberDirectiveArgs 0.0% +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:10: handleDocsConsolidated 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents.go:15: handleListCollections 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents.go:61: handleListDocuments 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents.go:121: handleGetDocument 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents.go:165: handleRemoveDocument 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents.go:197: handleIngestDocument 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents.go:235: handleSearchCollection 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:15: handleDocCreate 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:61: handleDocRead 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:117: handleDocUpdate 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:122: handleDocList 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:175: handleDocHistory 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:232: handleDocComment 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:19: SetExperienceProvider 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:23: experienceHistoryTools 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:40: experienceHistoryReadSchema 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:65: experienceHistoryDetailSchema 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:82: experienceHistoryTriggerEnum 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:91: handleExperienceHistoryRead 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:103: handleExperienceHistoryDetail 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:115: parseExperienceHistoryReadArgs 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:142: parseExperienceHistoryDetailArgs 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:157: experienceHistoryTriggersFromArgs 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:180: marshalExperienceHistory 0.0% +github.com/thebtf/engram/internal/mcp/tools_feedback.go:12: handleFeedbackConsolidated 0.0% +github.com/thebtf/engram/internal/mcp/tools_feedback.go:36: handleSetSessionOutcome 0.0% +github.com/thebtf/engram/internal/mcp/tools_governance.go:27: governanceTools 0.0% +github.com/thebtf/engram/internal/mcp/tools_governance.go:98: handleListSnapshots 0.0% +github.com/thebtf/engram/internal/mcp/tools_governance.go:167: handleRollbackSnapshot 0.0% +github.com/thebtf/engram/internal/mcp/tools_governance.go:215: handlePinSnapshot 0.0% +github.com/thebtf/engram/internal/mcp/tools_governance.go:258: handleRedactionRulesStatus 0.0% +github.com/thebtf/engram/internal/mcp/tools_governance.go:284: resolveGovernanceActor 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:64: handleGraph 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:100: graphAddEdge 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:216: mcpGraphEndpointExists 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:243: mcpGraphEdgeAlreadyExists 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:276: graphAddNode 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:317: graphRemoveEdge 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:332: graphGetEdges 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:397: filterEdgesByNodeType 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:457: graphTraverse 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:480: graphFindPath 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:502: graphSynonyms 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:23: graphCreateEdgeWithGuards 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:80: graphEndpointExistsWithGuards 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:114: graphDuplicateEdgeExists 0.0% +github.com/thebtf/engram/internal/mcp/tools_ingest.go:25: handleIngest 0.0% +github.com/thebtf/engram/internal/mcp/tools_ingest.go:43: ingestDocument 0.0% +github.com/thebtf/engram/internal/mcp/tools_instincts.go:20: handleImportInstincts 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:19: issuesToolSchema 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:109: validateIssueActionParams 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:143: handleIssues 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:189: resolveSourceProject 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:205: handleIssueCreate 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:250: handleIssueList 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:311: handleIssueGet 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:344: handleIssueUpdate 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:382: handleIssueComment 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:408: handleIssueReopen 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:425: handleIssueClose 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:22: handleLifecycle 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:48: lifecycleInfo 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:87: lifecyclePromote 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:118: lifecycleDemote 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:149: lifecycleSetConfidence 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:172: lifecycleSetDefeasibility 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:191: lifecycleSleepStatus 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:197: lifecycleDecayPreview 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:233: marshalJSON 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:35: vnextFEnabled 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:42: isValidPrivacyScope 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:54: derivePrivacyScopeFromLegacy 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:82: deriveLegacyScopeFromPrivacy 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:93: applyPrincipalMemoryMetadata 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:135: addPrincipalMemoryFields 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:161: newScopedWriteLintMemoryStore 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:172: writeLintVisibilityCaller 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:186: writeLintVisibilityOptions 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:192: scopedWriteLintMemoryStore 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:202: filterVisibleWriteGateCandidates 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:214: domainManageAllowed 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:218: List 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:272: writeLintVisibilityFetchLimit 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:286: Get 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:297: Create 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:301: Update 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:305: MarkSuperseded 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:319: effectiveMemoryEditor 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:329: isValidStoreObservationType 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:354: handleStoreMemory 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1111: handleEditMemory 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1218: computeTTLDays 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1258: truncateTitle 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1270: keepRecallMemory 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1280: keepRecallMemoryFilters 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1342: handleRecallMemory 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1690: staleAdvisory 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1700: marshalWithStaleAdvisory 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1727: Rank 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1751: handleRecallMemoryHybrid 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:2252: handleRateMemory 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:2281: handleSuppressMemory 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:17: SetDomainRegistryService 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:21: checkDomainWriteMCP 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:43: addDomainWriteDecisionFields 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:51: marshalStoreMemoryAugmented 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:26: newMemoryStoreSignificanceUpdater 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:33: s6OutcomeEnabledFromEnv 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:37: effectiveMemorySignificanceUpdater 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:47: currentMemorySignificanceUpdater 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:58: rateMemorySignificanceTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:74: handleRateMemorySignificance 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:109: RateMemorySignificance 0.0% +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:18: s2MetaMemoryEnabled 0.0% +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:22: knowAboutTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:39: handleKnowAbout 0.0% +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:104: parseKnowAboutLimit 0.0% +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:118: summarizeMetaIndexTags 0.0% +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:153: summarizeMetaIndexDateRange 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:23: SetPrincipalMemoryQueryService 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:27: principalMemoryQueryTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:52: handleQueryPrincipalMemory 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:134: principalMemoryQueryCaller 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:149: parsePrincipalMemoryQueryLimit 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:160: principalMemoryQueryText 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:167: parsePrincipalMemoryQueryVisibility 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:179: parsePrincipalMemoryQueryOffset 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:190: parsePrincipalMemoryQueryInt 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:215: parsePrincipalMemoryQueryBool 0.0% +github.com/thebtf/engram/internal/mcp/tools_recall.go:28: handleRecall 0.0% +github.com/thebtf/engram/internal/mcp/tools_recall.go:125: parseRecallIncludedPrincipals 0.0% +github.com/thebtf/engram/internal/mcp/tools_recall.go:165: appendRecallIncludedPrincipalMemories 0.0% +github.com/thebtf/engram/internal/mcp/tools_recall.go:223: recallIncludeTargetMatchesCaller 0.0% +github.com/thebtf/engram/internal/mcp/tools_recall.go:231: recallPrincipalQueryItemToMemory 0.0% +github.com/thebtf/engram/internal/mcp/tools_recall.go:247: handleRecallSearch 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:20: currentReviewLoopCandidateLister 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:30: reviewLoopCandidateTools 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:65: reviewLoopReadSchema 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:78: reviewPacketIDSchema 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:91: handleReviewMetricsRead 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:110: handleReviewQueueRead 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:140: handleReviewPacketDetail 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:151: handleReviewPacketPreviewAction 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:167: handleReviewPacketApplyAction 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:189: parseReviewLoopReadArgs 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:212: reviewLoopMCPPacketTypeSupported 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:217: reviewLoopActionFromArgs 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:225: reviewLoopReasonFromArgs 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:233: loadReviewPacketCandidate 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:256: applyReviewPacketPreserve 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:278: applyReviewPacketSuppress 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:296: reviewLoopMemoryFromCandidate 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:320: filterRiskyMCPReviewCandidates 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:330: marshalReviewLoop 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:17: ruleGovernanceReadTools 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:126: handleRuleGovernanceHealth 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:176: handleRuleGovernanceQueue 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:233: handleRuleGovernanceSnapshots 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:278: handleRuleGovernanceUsefulness 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:338: handleRuleGovernanceTransition 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:373: handleRuleGovernancePinSnapshot 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:406: handleRuleGovernanceRollback 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:483: requireRuleGovernanceReadAccess 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:495: requireRuleGovernanceProjectOrAdmin 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:505: ruleGovernanceCallerIsAdmin 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:510: requireRuleGovernanceAdminAccess 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:518: redactRuleGovernanceEvidenceHandles 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:535: redactRuleGovernanceEvidenceHandle 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:553: ruleGovernanceEvidenceHandleHasSensitiveText 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:559: isCanonicalRuleGovernanceEvidenceHandle 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:580: isSafeRuleGovernanceEvidenceID 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:594: parseRuleGovernanceTransitionRequest 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:604: parseRuleGovernanceSince 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:623: boundedRuleGovernanceLimit 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:634: formatRuleGovernanceTime 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:641: formatRuleGovernanceTimePtr 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:649: stringRuleCandidateStatusCounts 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:657: stringRuleVersionStateCounts 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:665: stringRuleArbiterRunStatusCounts 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:673: stringRuleInjectionEventTypeCounts 0.0% +github.com/thebtf/engram/internal/mcp/tools_rules.go:17: handleStoreRule 0.0% +github.com/thebtf/engram/internal/mcp/tools_rules.go:133: handleListRules 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:22: handleSettingsConsolidated 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:51: SetSettingsStore 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:57: settingsStore 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:67: isSecretSettingKey 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:74: requireAdmin 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:85: handleSetSetting 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:145: handleGetSetting 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:181: handleListSettings 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:216: handleDeleteSetting 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:35: resumeScopesFromFields 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:52: stateTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:82: setStateTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:142: handleGetState 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:219: handleSetState 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:274: decodeSessionStateForWrite 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:292: validateSessionStateBudget 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:303: validateNativeResumePacket 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:349: decodeProjectStateForWrite 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:364: requireStateObject 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:383: requireNestedObject 0.0% +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:10: handleStoreConsolidated 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:21: SetTemporalTruthProvider 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:25: temporalTruthEnabledFromEnv 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:30: temporalTruthTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:39: temporalTruthRefreshTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:48: temporalTruthRefreshSchema 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:58: temporalTruthSchema 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:72: currentTemporalTruthProvider 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:82: handleTemporalTruth 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:102: handleTemporalTruthRefresh 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:122: parseTemporalTruthArgs 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:151: parseTemporalTruthRefreshProject 0.0% +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:10: handleVaultConsolidated 0.0% +total: (statements) 0.1% diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/summary.json b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/summary.json new file mode 100644 index 00000000..3c44695c --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-ambient-true-overridden/summary.json @@ -0,0 +1,64 @@ +{ + "schema_version": 1, + "gate": "release-gates-foundation", + "run_id": "challenge-ambient-true-overridden", + "started_at": "2026-07-11T01:00:48.3644235+00:00", + "finished_at": "2026-07-11T01:01:03.7268163+00:00", + "duration_seconds": 15.362, + "verdict": "PASS", + "counts": { + "requested_repeats": 1, + "completed_repeats": 1, + "passed_repeats": 1, + "failed_repeats": 0, + "child_commands": 16, + "nonzero_child_commands": 0 + }, + "packages": [ + "./internal/mcp" + ], + "run_pattern": "^TestEC_F1_TagDerivedBackfill_T007$", + "coverage_policy": "Targeted", + "connection_budget": 20, + "race": false, + "database_dsn": "REDACTED_DATABASE_DSN", + "environment": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-ambient-true-overridden\\environment.json", + "commands": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-ambient-true-overridden\\commands.json", + "repeats": [ + { + "repeat": 1, + "verdict": "PASS", + "database": "engram_prc_rg_test_77fc44a810a688de_r1", + "schema": "public", + "database_schema_identity": "engram_prc_rg_test_77fc44a810a688de_r1.public", + "database_dsn": "REDACTED_DATABASE_DSN", + "database_create_confirmed": true, + "sequential_execution": { + "package_parallelism": 1, + "test_parallelism": 1 + }, + "race": false, + "connection_budget": 20, + "server_sessions_before": 6, + "server_sessions_after": 6, + "sessions_before": 0, + "sessions_after": 0, + "go_test_exit": 0, + "json_parser_exit": 0, + "coverage_policy": "Targeted", + "coverage_exit": 0, + "cleanup_exit": 0, + "cleanup_status": "PASS", + "required_session_start_execution": { + "schema_version": 1, + "verdict": "NOT_APPLICABLE", + "reason": "only an unfiltered canonical ./... run requires the 12-test session-start execution proof" + }, + "cleanup_summary": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-ambient-true-overridden\\repeat-01\\cleanup\\cleanup.json", + "errors": [], + "artifact_directory": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-ambient-true-overridden\\repeat-01" + } + ], + "errors": [], + "artifact_directory": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-ambient-true-overridden" +} diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/commands.json b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/commands.json new file mode 100644 index 00000000..bbe18d93 --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/commands.json @@ -0,0 +1,444 @@ +[ + { + "name": "go-version", + "executable": "C:\\Program Files\\Go\\bin\\go.exe", + "arguments": [ + "version" + ], + "environment_keys": [], + "command": "C:\\Program Files\\Go\\bin\\go.exe version", + "started_at": "2026-07-11T01:01:25.3182496+00:00", + "finished_at": "2026-07-11T01:01:25.5150314+00:00", + "duration_seconds": 0.197, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-flag-reset-removed\\go-version.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-flag-reset-removed\\go-version.stderr.log" + }, + { + "name": "postgres-container-identity", + "executable": "docker", + "arguments": [ + "inspect", + "--format", + "{{.Name}}|{{.Config.Image}}|{{.Image}}|{{.State.Running}}", + "engram-prc-postgres" + ], + "environment_keys": [], + "command": "docker inspect --format {{.Name}}|{{.Config.Image}}|{{.Image}}|{{.State.Running}} engram-prc-postgres", + "started_at": "2026-07-11T01:01:25.5672864+00:00", + "finished_at": "2026-07-11T01:01:25.8182939+00:00", + "duration_seconds": 0.251, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-flag-reset-removed\\postgres-container-identity.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-flag-reset-removed\\postgres-container-identity.stderr.log" + }, + { + "name": "postgres-server-identity", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT json_build_object('server_version', current_setting('server_version'), 'server_version_num', current_setting('server_version_num'), 'version', version(), 'max_connections', current_setting('max_connections'), 'superuser_reserved_connections', current_setting('superuser_reserved_connections'), 'reserved_connections', COALESCE(NULLIF(current_setting('reserved_connections', true), ''), '0'), 'current_connections', (SELECT count(*)::text FROM pg_stat_activity), 'database', current_database(), 'schema', current_schema(), 'user', current_user)::text;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT json_build_object('server_version', current_setting('server_version'), 'server_version_num', current_setting('server_version_num'), 'version', version(), 'max_connections', current_setting('max_connections'), 'superuser_reserved_connections', current_setting('superuser_reserved_connections'), 'reserved_connections', COALESCE(NULLIF(current_setting('reserved_connections', true), ''), '0'), 'current_connections', (SELECT count(*)::text FROM pg_stat_activity), 'database', current_database(), 'schema', current_schema(), 'user', current_user)::text;", + "started_at": "2026-07-11T01:01:25.8278552+00:00", + "finished_at": "2026-07-11T01:01:26.1874619+00:00", + "duration_seconds": 0.36, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-flag-reset-removed\\postgres-server-identity.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-flag-reset-removed\\postgres-server-identity.stderr.log" + }, + { + "name": "repeat-1-create-database", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "CREATE DATABASE \"engram_prc_rg_test_c987bdd5db898557_r1\" OWNER \"engram\";" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c CREATE DATABASE \"engram_prc_rg_test_c987bdd5db898557_r1\" OWNER \"engram\";", + "started_at": "2026-07-11T01:01:26.2162100+00:00", + "finished_at": "2026-07-11T01:01:26.6100647+00:00", + "duration_seconds": 0.394, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-flag-reset-removed\\repeat-01\\create-database.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-flag-reset-removed\\repeat-01\\create-database.stderr.log" + }, + { + "name": "repeat-1-create-pgvector", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "engram_prc_rg_test_c987bdd5db898557_r1", + "-At", + "-F", + "|", + "-c", + "CREATE EXTENSION IF NOT EXISTS vector WITH SCHEMA public;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d engram_prc_rg_test_c987bdd5db898557_r1 -At -F | -c CREATE EXTENSION IF NOT EXISTS vector WITH SCHEMA public;", + "started_at": "2026-07-11T01:01:26.6150948+00:00", + "finished_at": "2026-07-11T01:01:26.9721084+00:00", + "duration_seconds": 0.357, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-flag-reset-removed\\repeat-01\\create-pgvector.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-flag-reset-removed\\repeat-01\\create-pgvector.stderr.log" + }, + { + "name": "repeat-1-database-identity", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "engram_prc_rg_test_c987bdd5db898557_r1", + "-At", + "-F", + "|", + "-c", + "SELECT json_build_object('database', current_database(), 'schema', current_schema(), 'server_version', current_setting('server_version'), 'user', current_user)::text;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d engram_prc_rg_test_c987bdd5db898557_r1 -At -F | -c SELECT json_build_object('database', current_database(), 'schema', current_schema(), 'server_version', current_setting('server_version'), 'user', current_user)::text;", + "started_at": "2026-07-11T01:01:26.9745133+00:00", + "finished_at": "2026-07-11T01:01:27.3050646+00:00", + "duration_seconds": 0.331, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-flag-reset-removed\\repeat-01\\database-identity.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-flag-reset-removed\\repeat-01\\database-identity.stderr.log" + }, + { + "name": "repeat-1-pg-stat-before", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT COALESCE(json_agg(row_to_json(s)), '[]'::json)::text FROM (SELECT pid, usename, datname, state, backend_type, application_name, client_addr::text AS client_addr, wait_event_type, wait_event, query_start FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_c987bdd5db898557_r1' ORDER BY pid) AS s;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT COALESCE(json_agg(row_to_json(s)), '[]'::json)::text FROM (SELECT pid, usename, datname, state, backend_type, application_name, client_addr::text AS client_addr, wait_event_type, wait_event, query_start FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_c987bdd5db898557_r1' ORDER BY pid) AS s;", + "started_at": "2026-07-11T01:01:27.3096893+00:00", + "finished_at": "2026-07-11T01:01:27.6732016+00:00", + "duration_seconds": 0.364, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-flag-reset-removed\\repeat-01\\pg-stat-activity-before.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-flag-reset-removed\\repeat-01\\pg-stat-activity-before.stderr.log" + }, + { + "name": "repeat-1-server-connection-count-before", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT count(*) FROM pg_stat_activity;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT count(*) FROM pg_stat_activity;", + "started_at": "2026-07-11T01:01:27.6754718+00:00", + "finished_at": "2026-07-11T01:01:28.0244312+00:00", + "duration_seconds": 0.349, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-flag-reset-removed\\repeat-01\\server-connection-count-before.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-flag-reset-removed\\repeat-01\\server-connection-count-before.stderr.log" + }, + { + "name": "repeat-1-connection-count-before", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT count(*) FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_c987bdd5db898557_r1';" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT count(*) FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_c987bdd5db898557_r1';", + "started_at": "2026-07-11T01:01:28.0354916+00:00", + "finished_at": "2026-07-11T01:01:28.3831267+00:00", + "duration_seconds": 0.348, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-flag-reset-removed\\repeat-01\\connection-count-before.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-flag-reset-removed\\repeat-01\\connection-count-before.stderr.log" + }, + { + "name": "repeat-1-go-test", + "executable": "C:\\Program Files\\Go\\bin\\go.exe", + "arguments": [ + "test", + "-json", + "-p", + "1", + "-parallel", + "1", + "-count=1", + "-timeout", + "30m", + "-covermode=atomic", + "-coverprofile=.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-flag-reset-removed\\repeat-01\\coverage.out", + "-run", + "^TestEC_F1_TagDerivedBackfill_T007$", + "./internal/mcp" + ], + "environment_keys": [ + "DATABASE_DSN", + "DATABASE_MAX_CONNS", + "ENGRAM_RELEASE_GATE_REPEAT", + "ENGRAM_RELEASE_GATE_RUN_ID", + "ENGRAM_TEST_DSN", + "TEST_DATABASE_DSN" + ], + "command": "C:\\Program Files\\Go\\bin\\go.exe test -json -p 1 -parallel 1 -count=1 -timeout 30m -covermode=atomic -coverprofile=.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-flag-reset-removed\\repeat-01\\coverage.out -run ^TestEC_F1_TagDerivedBackfill_T007$ ./internal/mcp", + "started_at": "2026-07-11T01:01:28.3905823+00:00", + "finished_at": "2026-07-11T01:01:31.0837652+00:00", + "duration_seconds": 2.693, + "exit_code": 1, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-flag-reset-removed\\repeat-01\\go-test.stdout.jsonl", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-flag-reset-removed\\repeat-01\\go-test.stderr.log" + }, + { + "name": "repeat-1-assert-go-test-json", + "executable": "C:\\Program Files\\PowerShell\\7\\pwsh.exe", + "arguments": [ + "-NoProfile", + "-File", + "D:\\Dev\\engram\\.w\\t007-r1-checker\\scripts\\production-gates\\assert-go-test-json.ps1", + "-InputPath", + ".agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-flag-reset-removed\\repeat-01\\go-test.stdout.jsonl", + "-SummaryPath", + ".agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-flag-reset-removed\\repeat-01\\go-test-summary.json", + "-FailOnUnexpectedSkip" + ], + "environment_keys": [], + "command": "C:\\Program Files\\PowerShell\\7\\pwsh.exe -NoProfile -File D:\\Dev\\engram\\.w\\t007-r1-checker\\scripts\\production-gates\\assert-go-test-json.ps1 -InputPath .agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-flag-reset-removed\\repeat-01\\go-test.stdout.jsonl -SummaryPath .agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-flag-reset-removed\\repeat-01\\go-test-summary.json -FailOnUnexpectedSkip", + "started_at": "2026-07-11T01:01:31.0890747+00:00", + "finished_at": "2026-07-11T01:01:31.7871136+00:00", + "duration_seconds": 0.698, + "exit_code": 1, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-flag-reset-removed\\repeat-01\\assert-go-test-json.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-flag-reset-removed\\repeat-01\\assert-go-test-json.stderr.log" + }, + { + "name": "repeat-1-targeted-coverage-report", + "executable": "C:\\Program Files\\Go\\bin\\go.exe", + "arguments": [ + "tool", + "cover", + "-func=.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-flag-reset-removed\\repeat-01\\coverage.out" + ], + "environment_keys": [], + "command": "C:\\Program Files\\Go\\bin\\go.exe tool cover -func=.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-flag-reset-removed\\repeat-01\\coverage.out", + "started_at": "2026-07-11T01:01:31.7924902+00:00", + "finished_at": "2026-07-11T01:01:32.2626778+00:00", + "duration_seconds": 0.47, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-flag-reset-removed\\repeat-01\\targeted-coverage.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-flag-reset-removed\\repeat-01\\targeted-coverage.stderr.log" + }, + { + "name": "repeat-1-pg-stat-after", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT COALESCE(json_agg(row_to_json(s)), '[]'::json)::text FROM (SELECT pid, usename, datname, state, backend_type, application_name, client_addr::text AS client_addr, wait_event_type, wait_event, query_start FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_c987bdd5db898557_r1' ORDER BY pid) AS s;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT COALESCE(json_agg(row_to_json(s)), '[]'::json)::text FROM (SELECT pid, usename, datname, state, backend_type, application_name, client_addr::text AS client_addr, wait_event_type, wait_event, query_start FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_c987bdd5db898557_r1' ORDER BY pid) AS s;", + "started_at": "2026-07-11T01:01:32.2635273+00:00", + "finished_at": "2026-07-11T01:01:32.6587997+00:00", + "duration_seconds": 0.395, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-flag-reset-removed\\repeat-01\\pg-stat-activity-after.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-flag-reset-removed\\repeat-01\\pg-stat-activity-after.stderr.log" + }, + { + "name": "repeat-1-server-connection-count-after", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT count(*) FROM pg_stat_activity;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT count(*) FROM pg_stat_activity;", + "started_at": "2026-07-11T01:01:32.6618458+00:00", + "finished_at": "2026-07-11T01:01:33.0260140+00:00", + "duration_seconds": 0.364, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-flag-reset-removed\\repeat-01\\server-connection-count-after.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-flag-reset-removed\\repeat-01\\server-connection-count-after.stderr.log" + }, + { + "name": "repeat-1-connection-count-after", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT count(*) FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_c987bdd5db898557_r1';" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT count(*) FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_c987bdd5db898557_r1';", + "started_at": "2026-07-11T01:01:33.0285147+00:00", + "finished_at": "2026-07-11T01:01:33.4615663+00:00", + "duration_seconds": 0.433, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-flag-reset-removed\\repeat-01\\connection-count-after.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-flag-reset-removed\\repeat-01\\connection-count-after.stderr.log" + }, + { + "name": "repeat-1-cleanup", + "executable": "C:\\Program Files\\PowerShell\\7\\pwsh.exe", + "arguments": [ + "-NoProfile", + "-File", + "D:\\Dev\\engram\\.w\\t007-r1-checker\\scripts\\production-gates\\cleanup-db-sessions.ps1", + "-DatabaseName", + "engram_prc_rg_test_c987bdd5db898557_r1", + "-SchemaName", + "public", + "-ArtifactRoot", + ".agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-flag-reset-removed\\repeat-01", + "-RunId", + "challenge-flag-reset-removed-repeat-1", + "-PostgresContainer", + "engram-prc-postgres" + ], + "environment_keys": [ + "ENGRAM_TEST_ADMIN_DSN" + ], + "command": "C:\\Program Files\\PowerShell\\7\\pwsh.exe -NoProfile -File D:\\Dev\\engram\\.w\\t007-r1-checker\\scripts\\production-gates\\cleanup-db-sessions.ps1 -DatabaseName engram_prc_rg_test_c987bdd5db898557_r1 -SchemaName public -ArtifactRoot .agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-flag-reset-removed\\repeat-01 -RunId challenge-flag-reset-removed-repeat-1 -PostgresContainer engram-prc-postgres", + "started_at": "2026-07-11T01:01:33.4652586+00:00", + "finished_at": "2026-07-11T01:01:36.2042947+00:00", + "duration_seconds": 2.739, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-flag-reset-removed\\repeat-01\\cleanup-process.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-flag-reset-removed\\repeat-01\\cleanup-process.stderr.log" + } +] diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/environment.json b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/environment.json new file mode 100644 index 00000000..7a1a7bbb --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/environment.json @@ -0,0 +1,52 @@ +{ + "schema_version": 1, + "run_id": "challenge-flag-reset-removed", + "timestamp": "2026-07-11T01:01:25.3022054+00:00", + "go_version": "go version go1.25.11 windows/amd64", + "postgres": { + "declared_image": "pgvector/pgvector:pg17", + "container": { + "name": "/engram-prc-postgres", + "configured_image": "pgvector/pgvector:pg17", + "image_id": "sha256:feb68f4f15446397d8cac7f4fe48fe4586de83160d1fc48b46283312d1a33966", + "running": true + }, + "server": { + "server_version": "17.10 (Debian 17.10-1.pgdg12+1)", + "server_version_num": "170010", + "version": "PostgreSQL 17.10 (Debian 17.10-1.pgdg12+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 12.2.0-14+deb12u1) 12.2.0, 64-bit", + "max_connections": "100", + "superuser_reserved_connections": "3", + "reserved_connections": "0", + "current_connections": "6", + "database": "postgres", + "schema": "public", + "user": "engram" + }, + "admin_dsn": "postgresql://engram:REDACTED@127.0.0.1:55432/postgres?sslmode=disable" + }, + "packages": [ + "./internal/mcp" + ], + "run_pattern": "^TestEC_F1_TagDerivedBackfill_T007$", + "repeat": 1, + "fail_on_unexpected_skip": true, + "allowed_skip_identities": [], + "coverage_policy": "Targeted", + "connection_budget": 20, + "race": false, + "require_session_start_execution": false, + "required_session_start_test_count": 12, + "sequential_execution": { + "go_package_parallelism": 1, + "go_test_parallelism": 1, + "database_max_connections": 20 + }, + "govulncheck_policy": { + "authoritative": [ + "source scan with tests", + "unstripped binary scan" + ], + "non_authoritative": "stripped binary scan (module-level fallback when symbols are absent)" + } +} diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/go-version.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/go-version.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/go-version.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/go-version.stdout.log new file mode 100644 index 00000000..a857be3f --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/go-version.stdout.log @@ -0,0 +1 @@ +go version go1.25.11 windows/amd64 diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/postgres-container-identity.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/postgres-container-identity.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/postgres-container-identity.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/postgres-container-identity.stdout.log new file mode 100644 index 00000000..c110d492 --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/postgres-container-identity.stdout.log @@ -0,0 +1 @@ +/engram-prc-postgres|pgvector/pgvector:pg17|sha256:feb68f4f15446397d8cac7f4fe48fe4586de83160d1fc48b46283312d1a33966|true diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/postgres-server-identity.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/postgres-server-identity.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/postgres-server-identity.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/postgres-server-identity.stdout.log new file mode 100644 index 00000000..2e33d56e --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/postgres-server-identity.stdout.log @@ -0,0 +1 @@ +{"server_version" : "17.10 (Debian 17.10-1.pgdg12+1)", "server_version_num" : "170010", "version" : "PostgreSQL 17.10 (Debian 17.10-1.pgdg12+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 12.2.0-14+deb12u1) 12.2.0, 64-bit", "max_connections" : "100", "superuser_reserved_connections" : "3", "reserved_connections" : "0", "current_connections" : "6", "database" : "postgres", "schema" : "public", "user" : "engram"} diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/repeat-01/assert-go-test-json.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/repeat-01/assert-go-test-json.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/repeat-01/assert-go-test-json.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/repeat-01/assert-go-test-json.stdout.log new file mode 100644 index 00000000..12a09db6 --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/repeat-01/assert-go-test-json.stdout.log @@ -0,0 +1,2 @@ +go test JSON verdict=FAIL packages=1 tests=1 passed=0 failed=1 skipped=0 unexpected_skips=0 malformed=0 +summary=D:\Dev\engram\.w\t007-r1-checker\.agent\reviews\t007-r1-fresh-checker\evidence\challenge-flag-reset-removed\repeat-01\go-test-summary.json diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/repeat-01/cleanup-process.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/repeat-01/cleanup-process.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/repeat-01/cleanup-process.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/repeat-01/cleanup-process.stdout.log new file mode 100644 index 00000000..effa9361 --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/repeat-01/cleanup-process.stdout.log @@ -0,0 +1,2 @@ +cleanup verdict=PASS database=engram_prc_rg_test_c987bdd5db898557_r1 schema=public terminated_sessions=0 remaining_database_count=0 +summary=D:\Dev\engram\.w\t007-r1-checker\.agent\reviews\t007-r1-fresh-checker\evidence\challenge-flag-reset-removed\repeat-01\cleanup\cleanup.json diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/repeat-01/cleanup/cleanup.json b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/repeat-01/cleanup/cleanup.json new file mode 100644 index 00000000..53866498 --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/repeat-01/cleanup/cleanup.json @@ -0,0 +1,170 @@ +{ + "schema_version": 1, + "run_id": "challenge-flag-reset-removed-repeat-1", + "timestamp": "2026-07-11T01:01:36.1180163+00:00", + "verdict": "PASS", + "database": "engram_prc_rg_test_c987bdd5db898557_r1", + "schema": "public", + "database_schema_identity": "engram_prc_rg_test_c987bdd5db898557_r1.public", + "admin_dsn": "postgresql://engram:REDACTED@127.0.0.1:55432/postgres?sslmode=disable", + "postgres_container": "engram-prc-postgres", + "cleanup_status": "PASS", + "cleanup_attempted": true, + "database_existed_before": true, + "absence_verified": true, + "terminated_sessions": 0, + "remaining_database_count": 0, + "commands": [ + { + "name": "database-exists-before-cleanup", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT count(*) FROM pg_database WHERE datname = 'engram_prc_rg_test_c987bdd5db898557_r1';" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT count(*) FROM pg_database WHERE datname = 'engram_prc_rg_test_c987bdd5db898557_r1';", + "started_at": "2026-07-11T01:01:34.0996843+00:00", + "finished_at": "2026-07-11T01:01:34.4722254+00:00", + "duration_seconds": 0.373, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-flag-reset-removed\\repeat-01\\cleanup\\database-exists-before.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-flag-reset-removed\\repeat-01\\cleanup\\database-exists-before.stderr.log" + }, + { + "name": "pg-stat-activity-before-cleanup", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT COALESCE(json_agg(row_to_json(s)), '[]'::json)::text FROM (SELECT pid, usename, datname, state, backend_type, application_name, client_addr::text AS client_addr, wait_event_type, wait_event, query_start FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_c987bdd5db898557_r1' ORDER BY pid) AS s;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT COALESCE(json_agg(row_to_json(s)), '[]'::json)::text FROM (SELECT pid, usename, datname, state, backend_type, application_name, client_addr::text AS client_addr, wait_event_type, wait_event, query_start FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_c987bdd5db898557_r1' ORDER BY pid) AS s;", + "started_at": "2026-07-11T01:01:34.5327203+00:00", + "finished_at": "2026-07-11T01:01:34.8815859+00:00", + "duration_seconds": 0.349, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-flag-reset-removed\\repeat-01\\cleanup\\pg-stat-activity-before.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-flag-reset-removed\\repeat-01\\cleanup\\pg-stat-activity-before.stderr.log" + }, + { + "name": "terminate-database-sessions", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT COALESCE(json_agg(row_to_json(s)), '[]'::json)::text FROM (SELECT pid, pg_terminate_backend(pid) AS terminated FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_c987bdd5db898557_r1' AND pid <> pg_backend_pid() ORDER BY pid) AS s;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT COALESCE(json_agg(row_to_json(s)), '[]'::json)::text FROM (SELECT pid, pg_terminate_backend(pid) AS terminated FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_c987bdd5db898557_r1' AND pid <> pg_backend_pid() ORDER BY pid) AS s;", + "started_at": "2026-07-11T01:01:34.8855148+00:00", + "finished_at": "2026-07-11T01:01:35.3424412+00:00", + "duration_seconds": 0.457, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-flag-reset-removed\\repeat-01\\cleanup\\terminate-sessions.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-flag-reset-removed\\repeat-01\\cleanup\\terminate-sessions.stderr.log" + }, + { + "name": "drop-fresh-database", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "DROP DATABASE IF EXISTS \"engram_prc_rg_test_c987bdd5db898557_r1\" WITH (FORCE);" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c DROP DATABASE IF EXISTS \"engram_prc_rg_test_c987bdd5db898557_r1\" WITH (FORCE);", + "started_at": "2026-07-11T01:01:35.3529788+00:00", + "finished_at": "2026-07-11T01:01:35.7633771+00:00", + "duration_seconds": 0.41, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-flag-reset-removed\\repeat-01\\cleanup\\drop-database.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-flag-reset-removed\\repeat-01\\cleanup\\drop-database.stderr.log" + }, + { + "name": "verify-database-absent", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT count(*) FROM pg_database WHERE datname = 'engram_prc_rg_test_c987bdd5db898557_r1';" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT count(*) FROM pg_database WHERE datname = 'engram_prc_rg_test_c987bdd5db898557_r1';", + "started_at": "2026-07-11T01:01:35.7667338+00:00", + "finished_at": "2026-07-11T01:01:36.1102217+00:00", + "duration_seconds": 0.343, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-flag-reset-removed\\repeat-01\\cleanup\\verify-database-absent.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-flag-reset-removed\\repeat-01\\cleanup\\verify-database-absent.stderr.log" + } + ], + "errors": [] +} diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/repeat-01/cleanup/database-exists-before.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/repeat-01/cleanup/database-exists-before.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/repeat-01/cleanup/database-exists-before.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/repeat-01/cleanup/database-exists-before.stdout.log new file mode 100644 index 00000000..d00491fd --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/repeat-01/cleanup/database-exists-before.stdout.log @@ -0,0 +1 @@ +1 diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/repeat-01/cleanup/drop-database.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/repeat-01/cleanup/drop-database.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/repeat-01/cleanup/drop-database.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/repeat-01/cleanup/drop-database.stdout.log new file mode 100644 index 00000000..ca12dce0 --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/repeat-01/cleanup/drop-database.stdout.log @@ -0,0 +1 @@ +DROP DATABASE diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/repeat-01/cleanup/pg-stat-activity-before.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/repeat-01/cleanup/pg-stat-activity-before.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/repeat-01/cleanup/pg-stat-activity-before.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/repeat-01/cleanup/pg-stat-activity-before.stdout.log new file mode 100644 index 00000000..fe51488c --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/repeat-01/cleanup/pg-stat-activity-before.stdout.log @@ -0,0 +1 @@ +[] diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/repeat-01/cleanup/terminate-sessions.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/repeat-01/cleanup/terminate-sessions.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/repeat-01/cleanup/terminate-sessions.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/repeat-01/cleanup/terminate-sessions.stdout.log new file mode 100644 index 00000000..fe51488c --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/repeat-01/cleanup/terminate-sessions.stdout.log @@ -0,0 +1 @@ +[] diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/repeat-01/cleanup/verify-database-absent.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/repeat-01/cleanup/verify-database-absent.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/repeat-01/cleanup/verify-database-absent.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/repeat-01/cleanup/verify-database-absent.stdout.log new file mode 100644 index 00000000..573541ac --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/repeat-01/cleanup/verify-database-absent.stdout.log @@ -0,0 +1 @@ +0 diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/repeat-01/connection-count-after.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/repeat-01/connection-count-after.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/repeat-01/connection-count-after.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/repeat-01/connection-count-after.stdout.log new file mode 100644 index 00000000..573541ac --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/repeat-01/connection-count-after.stdout.log @@ -0,0 +1 @@ +0 diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/repeat-01/connection-count-before.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/repeat-01/connection-count-before.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/repeat-01/connection-count-before.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/repeat-01/connection-count-before.stdout.log new file mode 100644 index 00000000..573541ac --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/repeat-01/connection-count-before.stdout.log @@ -0,0 +1 @@ +0 diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/repeat-01/coverage.out b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/repeat-01/coverage.out new file mode 100644 index 00000000..b295ca95 --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/repeat-01/coverage.out @@ -0,0 +1,3472 @@ +mode: atomic +github.com/thebtf/engram/internal/mcp/audit_helpers.go:33.53,34.30 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:34.30,36.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:37.2,37.25 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:37.25,39.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:40.2,40.12 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:44.28,46.2 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:52.83,53.12 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:53.12,54.16 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:54.16,55.32 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:55.32,61.5 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:63.3,65.33 3 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:65.33,71.4 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:77.54,78.14 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:78.14,80.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:81.2,82.16 2 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:82.16,85.3 2 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:86.2,87.13 2 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:92.91,93.23 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:93.23,95.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:96.2,97.15 2 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:97.15,99.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:100.2,105.65 4 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:105.65,113.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:117.95,118.23 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:118.23,120.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:121.2,122.15 2 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:122.15,124.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:125.2,129.65 5 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:129.65,138.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:142.87,143.23 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:143.23,145.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:146.2,147.15 2 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:147.15,149.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:150.2,153.65 4 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:153.65,161.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:166.96,167.23 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:167.23,169.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:170.2,171.15 2 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:171.15,173.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:174.2,177.63 4 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:177.63,185.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:189.97,190.23 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:190.23,192.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:193.2,194.15 2 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:194.15,196.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:197.2,200.68 4 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:200.68,208.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:30.62,31.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:31.20,33.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:34.2,35.49 2 0 +github.com/thebtf/engram/internal/mcp/coerce.go:35.49,37.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:38.2,38.14 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:38.14,40.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:41.2,41.15 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:46.52,47.14 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:47.14,49.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:50.2,50.23 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:51.14,52.11 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:53.19,54.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:55.15,56.45 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:57.12,58.31 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:59.10,60.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:67.43,68.14 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:68.14,70.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:71.2,71.23 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:72.15,73.23 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:74.19,75.38 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:75.38,77.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:78.3,78.40 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:78.40,80.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:81.3,81.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:82.14,83.56 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:83.56,85.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:86.3,86.54 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:86.54,88.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:89.3,89.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:90.10,91.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:97.49,98.14 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:98.14,100.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:101.2,101.23 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:102.15,103.18 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:104.19,105.38 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:105.38,107.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:108.3,108.40 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:108.40,110.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:111.3,111.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:112.14,113.56 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:113.56,115.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:116.3,116.54 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:116.54,118.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:119.3,119.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:120.10,121.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:127.55,128.14 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:128.14,130.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:131.2,131.23 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:132.15,133.11 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:134.19,135.40 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:135.40,137.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:138.3,138.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:139.14,140.54 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:140.54,142.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:143.3,143.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:144.10,145.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:151.46,152.14 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:152.14,154.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:155.2,155.23 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:156.12,157.11 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:158.14,159.54 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:159.54,161.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:162.3,162.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:163.15,164.16 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:165.19,166.40 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:166.40,168.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:169.3,169.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:170.10,171.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:177.40,178.14 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:178.14,180.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:181.2,181.23 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:182.13,184.26 2 0 +github.com/thebtf/engram/internal/mcp/coerce.go:184.26,185.36 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:185.36,187.5 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:189.3,189.16 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:190.16,191.11 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:192.14,193.14 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:193.14,195.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:196.3,196.13 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:197.10,198.13 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:204.38,205.14 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:205.14,207.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:208.2,209.9 2 0 +github.com/thebtf/engram/internal/mcp/coerce.go:209.9,211.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:212.2,213.27 2 0 +github.com/thebtf/engram/internal/mcp/coerce.go:213.27,214.42 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:214.42,216.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:218.2,218.15 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:222.32,223.39 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:223.39,225.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:226.2,226.30 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:226.30,228.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:229.2,229.30 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:229.30,231.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:232.2,232.15 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:236.35,237.28 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:237.28,239.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:240.2,240.28 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:240.28,242.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:243.2,243.15 1 0 +github.com/thebtf/engram/internal/mcp/context.go:17.55,19.2 1 0 +github.com/thebtf/engram/internal/mcp/context.go:22.78,24.2 1 0 +github.com/thebtf/engram/internal/mcp/context.go:29.78,31.2 1 0 +github.com/thebtf/engram/internal/mcp/context.go:35.53,38.2 2 0 +github.com/thebtf/engram/internal/mcp/context.go:41.80,43.2 1 0 +github.com/thebtf/engram/internal/mcp/context.go:48.80,50.2 1 0 +github.com/thebtf/engram/internal/mcp/context.go:54.53,57.2 2 0 +github.com/thebtf/engram/internal/mcp/context.go:61.51,62.43 1 0 +github.com/thebtf/engram/internal/mcp/context.go:62.43,64.3 1 0 +github.com/thebtf/engram/internal/mcp/context.go:65.2,65.16 1 0 +github.com/thebtf/engram/internal/mcp/health.go:22.32,26.2 3 0 +github.com/thebtf/engram/internal/mcp/health.go:29.37,33.2 3 0 +github.com/thebtf/engram/internal/mcp/health.go:36.35,40.2 3 0 +github.com/thebtf/engram/internal/mcp/health.go:42.44,45.25 3 0 +github.com/thebtf/engram/internal/mcp/health.go:45.25,47.50 1 0 +github.com/thebtf/engram/internal/mcp/health.go:47.50,50.4 2 0 +github.com/thebtf/engram/internal/mcp/health.go:55.74,60.16 5 0 +github.com/thebtf/engram/internal/mcp/health.go:60.16,62.3 1 0 +github.com/thebtf/engram/internal/mcp/health.go:63.2,71.4 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:28.42,29.65 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:29.65,32.3 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:33.2,33.40 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:33.40,35.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:36.2,36.14 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:39.120,40.69 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:40.69,42.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:43.2,44.19 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:44.19,46.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:47.2,48.17 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:48.17,50.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:51.2,52.59 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:52.59,54.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:55.2,56.20 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:56.20,58.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:59.2,60.17 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:60.17,62.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:63.2,64.21 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:64.21,66.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:67.2,68.22 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:68.22,70.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:71.2,72.23 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:72.23,74.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:76.2,98.19 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:98.19,100.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:101.2,101.66 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:104.52,106.29 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:106.29,108.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:109.2,110.46 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:113.113,123.27 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:123.27,125.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:126.2,127.16 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:127.16,129.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:130.2,130.25 1 0 +github.com/thebtf/engram/internal/mcp/server.go:127.44,138.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:141.64,143.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:146.78,148.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:151.53,153.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:156.55,158.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:161.58,163.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:166.62,168.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:171.50,173.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:176.78,178.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:181.74,183.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:186.71,189.2 2 0 +github.com/thebtf/engram/internal/mcp/server.go:191.85,193.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:195.61,197.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:199.49,201.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:204.54,206.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:211.53,213.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:216.53,218.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:222.61,224.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:228.59,230.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:234.51,236.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:240.52,242.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:246.55,248.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:252.82,254.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:260.70,262.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:269.68,271.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:274.87,277.2 2 0 +github.com/thebtf/engram/internal/mcp/server.go:282.60,284.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:290.45,292.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:297.77,299.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:303.37,313.38 3 0 +github.com/thebtf/engram/internal/mcp/server.go:313.38,315.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:316.2,317.9 2 0 +github.com/thebtf/engram/internal/mcp/server.go:317.9,319.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:320.2,321.9 2 0 +github.com/thebtf/engram/internal/mcp/server.go:321.9,323.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:324.2,325.9 2 0 +github.com/thebtf/engram/internal/mcp/server.go:325.9,327.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:328.2,328.14 1 0 +github.com/thebtf/engram/internal/mcp/server.go:332.35,334.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:383.49,387.12 3 0 +github.com/thebtf/engram/internal/mcp/server.go:387.12,388.22 1 0 +github.com/thebtf/engram/internal/mcp/server.go:388.22,389.11 1 0 +github.com/thebtf/engram/internal/mcp/server.go:390.22,392.11 2 0 +github.com/thebtf/engram/internal/mcp/server.go:393.12,393.12 0 0 +github.com/thebtf/engram/internal/mcp/server.go:396.4,397.18 2 0 +github.com/thebtf/engram/internal/mcp/server.go:397.18,398.13 1 0 +github.com/thebtf/engram/internal/mcp/server.go:401.4,402.61 2 0 +github.com/thebtf/engram/internal/mcp/server.go:402.61,404.13 2 0 +github.com/thebtf/engram/internal/mcp/server.go:407.4,407.55 1 0 +github.com/thebtf/engram/internal/mcp/server.go:407.55,409.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:411.3,411.28 1 0 +github.com/thebtf/engram/internal/mcp/server.go:414.2,414.9 1 0 +github.com/thebtf/engram/internal/mcp/server.go:415.20,416.19 1 0 +github.com/thebtf/engram/internal/mcp/server.go:417.25,418.17 1 0 +github.com/thebtf/engram/internal/mcp/server.go:418.17,420.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:421.3,421.13 1 0 +github.com/thebtf/engram/internal/mcp/server.go:427.77,428.19 1 0 +github.com/thebtf/engram/internal/mcp/server.go:428.19,431.3 2 0 +github.com/thebtf/engram/internal/mcp/server.go:433.2,433.20 1 0 +github.com/thebtf/engram/internal/mcp/server.go:434.20,435.33 1 0 +github.com/thebtf/engram/internal/mcp/server.go:436.20,437.32 1 0 +github.com/thebtf/engram/internal/mcp/server.go:438.20,439.37 1 0 +github.com/thebtf/engram/internal/mcp/server.go:443.24,444.93 1 0 +github.com/thebtf/engram/internal/mcp/server.go:445.34,446.101 1 0 +github.com/thebtf/engram/internal/mcp/server.go:447.22,448.91 1 0 +github.com/thebtf/engram/internal/mcp/server.go:449.29,450.120 1 0 +github.com/thebtf/engram/internal/mcp/server.go:451.10,456.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:461.51,462.20 1 0 +github.com/thebtf/engram/internal/mcp/server.go:463.50,464.70 1 0 +github.com/thebtf/engram/internal/mcp/server.go:465.46,466.79 1 0 +github.com/thebtf/engram/internal/mcp/server.go:467.10,468.80 1 0 +github.com/thebtf/engram/internal/mcp/server.go:473.59,485.63 2 0 +github.com/thebtf/engram/internal/mcp/server.go:485.63,487.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:489.2,493.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:496.45,503.33 3 0 +github.com/thebtf/engram/internal/mcp/server.go:503.33,505.57 2 0 +github.com/thebtf/engram/internal/mcp/server.go:505.57,506.76 1 0 +github.com/thebtf/engram/internal/mcp/server.go:506.76,507.13 1 0 +github.com/thebtf/engram/internal/mcp/server.go:509.4,509.18 1 0 +github.com/thebtf/engram/internal/mcp/server.go:509.18,511.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:511.10,513.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:514.4,518.11 5 0 +github.com/thebtf/engram/internal/mcp/server.go:522.2,522.19 1 0 +github.com/thebtf/engram/internal/mcp/server.go:660.29,683.21 2 0 +github.com/thebtf/engram/internal/mcp/server.go:683.21,689.3 5 0 +github.com/thebtf/engram/internal/mcp/server.go:690.2,699.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:712.30,765.49 3 0 +github.com/thebtf/engram/internal/mcp/server.go:765.49,789.3 5 0 +github.com/thebtf/engram/internal/mcp/server.go:790.2,799.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:805.40,936.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:942.58,1048.35 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1048.35,1077.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1080.2,1080.33 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1080.33,1090.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1093.2,1093.26 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1093.26,1123.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1124.2,1124.80 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1124.80,1126.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1127.2,1127.55 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1127.55,1129.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1130.2,1130.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1130.38,1132.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1134.2,1134.25 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1134.25,1136.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1138.2,1138.33 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1138.33,1140.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1141.2,1141.69 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1141.69,1143.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1144.2,1144.75 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1144.75,1146.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1148.2,1148.27 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1148.27,1165.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1168.2,1168.76 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1168.76,1191.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1195.2,1195.48 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1195.48,1197.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1201.2,1201.47 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1201.47,1203.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1205.2,1205.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1205.38,1207.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1212.2,1212.21 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1212.21,1214.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1228.2,1228.51 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1228.51,1230.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1233.2,1233.56 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1233.56,1235.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1238.2,1238.71 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1238.71,1298.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1302.2,1302.104 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1302.104,1321.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1324.2,1324.72 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1324.72,1333.154 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1333.154,1334.26 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1334.26,1336.8 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1337.7,1337.16 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1338.35,1340.26 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1340.26,1342.8 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1343.7,1343.18 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1371.2,1371.26 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1371.26,1390.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1393.2,1393.28 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1393.28,1443.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1446.2,1446.28 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1446.28,1478.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1481.2,1481.37 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1481.37,1561.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1564.2,1568.23 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1568.23,1570.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1572.2,1588.57 3 0 +github.com/thebtf/engram/internal/mcp/server.go:1588.57,1591.29 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1591.29,1593.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1594.3,1594.27 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1594.27,1595.29 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1595.29,1597.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1601.2,1607.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1612.79,1614.60 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1614.60,1620.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1622.2,1623.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1623.16,1631.3 3 0 +github.com/thebtf/engram/internal/mcp/server.go:1633.2,1641.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1644.69,1645.34 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1645.34,1647.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1648.2,1649.22 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1649.22,1651.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1652.2,1652.37 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1656.99,1658.14 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1659.16,1660.35 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1661.15,1662.46 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1663.18,1664.49 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1665.15,1666.46 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1667.18,1668.49 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1669.14,1670.45 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1671.15,1672.34 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1676.2,1676.14 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1677.35,1678.52 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1679.26,1680.37 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1681.20,1682.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1683.20,1684.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1685.16,1686.35 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1687.29,1688.40 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1689.33,1690.50 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1691.25,1692.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1693.23,1694.41 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1696.26,1697.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1698.24,1699.42 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1700.22,1701.40 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1702.25,1703.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1704.27,1705.45 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1706.25,1707.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1709.30,1710.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1711.28,1712.42 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1713.17,1714.40 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1715.20,1716.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1717.20,1718.45 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1719.20,1720.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1722.20,1723.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1724.18,1725.36 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1726.20,1727.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1728.18,1729.36 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1730.21,1731.39 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1732.21,1733.39 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1734.26,1735.44 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1736.25,1737.34 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1738.26,1739.44 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1740.24,1741.42 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1742.26,1743.44 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1744.27,1745.45 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1746.22,1747.40 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1748.19,1749.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1750.15,1751.34 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1752.16,1753.35 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1755.21,1756.44 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1757.19,1758.42 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1759.20,1760.44 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1761.22,1762.45 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1763.22,1764.40 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1765.23,1766.41 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1767.20,1768.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1769.32,1770.49 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1771.19,1772.37 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1773.19,1774.37 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1775.33,1776.50 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1777.35,1778.52 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1779.24,1780.42 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1781.32,1782.49 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1783.28,1784.46 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1785.21,1786.39 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1787.34,1788.51 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1789.25,1790.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1791.29,1792.46 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1793.26,1794.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1795.27,1796.44 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1798.25,1799.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1800.23,1801.41 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1802.27,1803.45 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1804.26,1805.44 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1806.29,1807.47 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1809.29,1810.46 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1811.27,1812.44 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1813.30,1814.47 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1815.38,1816.54 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1817.36,1818.52 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1820.24,1821.42 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1822.27,1823.45 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1824.22,1825.40 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1826.32,1827.49 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1828.32,1829.49 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1830.31,1831.48 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1832.35,1833.52 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1834.36,1835.53 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1836.36,1837.53 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1838.38,1839.54 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1840.34,1841.51 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1843.22,1844.40 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1845.21,1846.39 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1847.24,1848.42 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1850.25,1851.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1852.25,1853.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1859.2,1859.14 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1860.22,1863.131 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1866.51,1867.123 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1868.10,1869.50 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1874.47,1876.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1876.16,1879.3 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1880.2,1880.35 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1884.72,1890.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1896.105,1898.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1898.16,1900.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1902.2,1903.17 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1903.17,1905.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1907.2,1908.17 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1908.17,1910.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1912.2,1918.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1918.16,1920.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1921.2,1921.25 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1927.76,1933.15 3 0 +github.com/thebtf/engram/internal/mcp/server.go:1933.15,1936.17 3 0 +github.com/thebtf/engram/internal/mcp/server.go:1936.17,1938.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1939.3,1939.26 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1943.2,1950.36 3 0 +github.com/thebtf/engram/internal/mcp/server.go:1950.36,1952.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1952.8,1955.29 3 0 +github.com/thebtf/engram/internal/mcp/server.go:1955.29,1958.4 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1959.3,1962.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1966.2,1966.20 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1966.20,1977.20 6 0 +github.com/thebtf/engram/internal/mcp/server.go:1977.20,1979.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1980.3,1980.20 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1980.20,1982.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1985.3,1985.37 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1985.37,1987.30 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1987.30,1988.16 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1988.16,1990.6 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1990.11,1992.6 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1994.4,1995.56 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1995.56,1997.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1998.4,2003.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2008.2,2008.29 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2008.29,2009.63 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2009.63,2011.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2011.9,2013.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2021.2,2021.29 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2021.29,2029.38 3 0 +github.com/thebtf/engram/internal/mcp/server.go:2029.38,2031.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2031.9,2033.31 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2033.31,2035.30 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2035.30,2037.6 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2039.4,2042.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2046.2,2047.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2047.16,2049.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2050.2,2050.25 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2055.57,2056.33 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2056.33,2058.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2059.2,2060.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2060.16,2062.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2063.2,2064.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2064.16,2066.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2067.2,2067.23 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2071.79,2105.15 6 0 +github.com/thebtf/engram/internal/mcp/server.go:2105.15,2107.17 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2107.17,2111.4 3 0 +github.com/thebtf/engram/internal/mcp/server.go:2111.9,2112.17 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2112.17,2114.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2115.4,2117.26 3 0 +github.com/thebtf/engram/internal/mcp/server.go:2117.26,2119.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2119.10,2121.29 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2121.29,2123.6 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2125.4,2129.25 5 0 +github.com/thebtf/engram/internal/mcp/server.go:2130.19,2130.19 0 0 +github.com/thebtf/engram/internal/mcp/server.go:2132.20,2134.106 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2135.12,2137.103 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2140.8,2143.3 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2144.2,2150.49 3 0 +github.com/thebtf/engram/internal/mcp/server.go:2150.49,2152.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2152.8,2154.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2155.2,2168.27 4 0 +github.com/thebtf/engram/internal/mcp/server.go:2168.27,2170.17 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2170.17,2173.4 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2173.9,2175.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2177.2,2182.40 4 0 +github.com/thebtf/engram/internal/mcp/server.go:2182.40,2183.21 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2184.20,2185.20 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2186.19,2187.19 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2191.2,2191.24 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2191.24,2193.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2193.8,2193.30 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2193.30,2195.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2198.2,2198.28 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2198.28,2200.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2203.2,2203.29 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2203.29,2205.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2207.2,2208.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2208.16,2210.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2211.2,2211.28 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2216.103,2218.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2218.16,2220.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2222.2,2223.15 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2223.15,2225.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2227.2,2239.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2239.16,2241.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2242.2,2242.25 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2246.93,2248.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2251.91,2253.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:18.28,29.20 4 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:29.20,33.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:35.2,44.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:68.36,69.49 1 1 +github.com/thebtf/engram/internal/mcp/tools_admin.go:69.49,74.3 4 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:75.2,75.25 1 1 +github.com/thebtf/engram/internal/mcp/tools_admin.go:80.26,82.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:84.89,86.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:86.16,88.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:89.2,90.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:90.18,92.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:94.2,94.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:95.15,96.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:97.26,98.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:99.25,100.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:101.23,105.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:105.22,107.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:108.3,108.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:109.10,110.114 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:120.92,126.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:126.26,128.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:130.2,131.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:131.19,133.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:134.2,135.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:135.19,137.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:138.2,138.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:138.24,140.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:142.2,142.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:142.25,144.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:146.2,147.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:147.16,149.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:151.2,151.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:27.40,30.2 2 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:32.30,46.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:48.99,49.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:49.34,51.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:52.2,52.69 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:52.69,54.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:56.2,57.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:57.16,59.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:60.2,61.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:61.21,63.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:64.2,67.26 3 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:67.26,69.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:70.2,71.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:71.25,73.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:75.2,77.44 3 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:77.44,79.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:80.2,80.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:80.33,82.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:83.2,83.81 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:86.52,87.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:87.16,89.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:90.2,90.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:90.15,92.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:93.2,93.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:96.73,97.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:97.21,99.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:100.2,101.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:101.29,110.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:111.2,111.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:114.34,116.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:31.98,32.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:32.52,34.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:35.2,35.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:35.26,37.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:39.2,40.49 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:40.49,42.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:43.2,43.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:43.21,45.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:46.2,46.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:46.21,48.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:49.2,49.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:49.18,51.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:52.2,52.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:52.18,54.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:56.2,56.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:56.38,58.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:60.2,61.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:61.16,63.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:68.2,70.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:70.26,77.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:79.2,81.36 3 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:81.36,84.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:86.2,89.28 3 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:89.28,90.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:90.39,91.9 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:93.3,97.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:100.2,104.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:107.60,113.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:115.101,116.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:116.38,118.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:120.2,122.21 3 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:122.21,123.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:123.26,125.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:126.3,126.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:126.23,128.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:129.8,130.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:130.26,132.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:133.3,133.68 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:133.68,135.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:137.2,140.20 3 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:141.17,142.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:143.67,143.67 0 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:144.10,145.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:148.2,162.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:162.16,164.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:165.2,165.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:165.19,173.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:174.2,174.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:174.30,176.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:177.2,177.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:177.31,179.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:181.2,182.36 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:182.36,196.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:198.2,199.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:199.19,201.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:202.2,203.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:203.18,205.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:206.2,207.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:207.21,209.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:210.2,211.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:211.25,213.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:214.2,225.21 3 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:225.21,227.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:228.2,228.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:228.25,230.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:231.2,231.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:231.18,233.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:235.2,244.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:244.21,246.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:247.2,247.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:247.25,249.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:250.2,250.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:250.18,252.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:253.2,253.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:253.24,255.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:256.2,256.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:259.50,261.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:261.22,263.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:264.2,264.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:270.90,272.42 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:272.42,276.3 3 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:277.2,281.27 3 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:281.27,282.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:282.45,284.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:286.2,286.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:25.28,88.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:95.95,96.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:96.22,98.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:99.2,100.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:100.32,102.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:104.2,105.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:105.16,107.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:109.2,114.35 3 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:114.35,121.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:123.2,123.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:123.25,125.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:127.2,134.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:134.16,136.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:138.2,146.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:154.94,155.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:155.22,157.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:158.2,159.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:159.32,161.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:163.2,164.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:164.16,166.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:168.2,172.35 3 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:172.35,179.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:181.2,181.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:181.25,183.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:185.2,192.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:192.16,194.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:196.2,203.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:211.97,212.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:212.22,214.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:215.2,216.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:216.32,218.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:220.2,221.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:221.16,223.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:225.2,229.35 3 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:229.35,236.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:238.2,238.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:238.25,240.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:242.2,249.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:249.16,251.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:253.2,260.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:31.80,32.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:32.14,34.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:35.2,48.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:51.136,53.51 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:53.51,55.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:56.2,56.83 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:59.94,60.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:60.21,62.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:63.2,63.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:68.30,162.2 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:165.98,166.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:166.49,168.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:169.2,170.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:170.16,172.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:173.2,174.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:174.19,176.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:177.2,179.17 3 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:179.17,181.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:183.2,184.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:184.16,186.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:188.2,189.31 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:189.31,190.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:190.15,191.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:193.3,193.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:196.2,201.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:201.16,203.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:204.2,204.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:208.96,209.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:209.49,211.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:212.2,213.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:213.16,215.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:216.2,217.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:217.13,219.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:221.2,222.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:222.16,224.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:225.2,225.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:225.22,227.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:229.2,230.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:230.16,232.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:233.2,233.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:239.100,240.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:240.22,242.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:243.2,244.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:244.16,246.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:247.2,248.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:248.13,250.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:255.2,256.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:256.12,263.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:263.30,264.77 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:264.77,269.5 4 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:271.3,272.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:272.21,274.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:275.3,275.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:279.2,279.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:279.29,281.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:284.2,285.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:285.16,287.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:288.2,288.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:288.22,290.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:291.2,291.55 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:291.55,293.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:294.2,294.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:294.74,296.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:297.2,298.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:298.16,300.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:306.2,307.41 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:307.41,309.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:310.2,324.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:324.16,325.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:325.50,327.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:328.3,328.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:330.2,330.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:330.38,332.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:334.2,341.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:341.16,343.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:344.2,344.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:348.99,349.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:349.49,351.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:352.2,353.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:353.16,355.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:356.2,357.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:357.13,359.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:360.2,362.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:362.16,364.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:365.2,365.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:365.22,367.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:368.2,368.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:368.74,370.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:371.2,372.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:372.16,374.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:375.2,375.85 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:375.85,377.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:379.2,380.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:380.16,381.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:381.50,383.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:384.3,384.60 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:386.2,386.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:386.20,388.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:390.2,395.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:395.16,397.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:398.2,398.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:402.102,403.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:403.49,405.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:406.2,407.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:407.16,409.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:410.2,411.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:411.13,413.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:414.2,415.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:415.16,417.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:418.2,418.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:418.22,420.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:421.2,421.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:421.74,423.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:424.2,425.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:425.16,427.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:428.2,428.88 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:428.88,430.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:432.2,433.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:433.16,434.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:434.50,436.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:437.3,437.63 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:439.2,439.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:439.20,441.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:443.2,448.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:448.16,450.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:451.2,451.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:34.30,36.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:42.61,44.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:48.32,75.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:79.32,94.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:100.98,101.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:101.25,103.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:104.2,104.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:104.29,106.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:108.2,113.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:113.17,114.55 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:114.55,116.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:118.2,118.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:118.24,120.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:121.2,121.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:121.23,123.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:124.2,124.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:124.23,126.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:134.2,135.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:135.21,137.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:142.2,147.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:147.16,149.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:154.2,165.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:165.25,175.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:177.2,183.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:183.16,185.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:186.2,186.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:194.98,195.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:195.25,197.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:198.2,198.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:198.29,200.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:202.2,205.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:205.17,207.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:208.2,209.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:209.21,211.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:213.2,214.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:214.16,216.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:217.2,218.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:218.16,220.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:221.2,222.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:222.16,224.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:226.2,231.11 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:231.11,233.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:235.2,236.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:236.16,238.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:239.2,239.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:21.52,22.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:22.24,25.28 3 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:25.28,27.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:29.2,29.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:35.72,37.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:37.15,39.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:41.2,42.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:42.16,44.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:45.2,45.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:49.99,51.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:51.16,53.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:55.2,56.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:56.16,58.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:60.2,72.23 7 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:72.23,74.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:75.2,75.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:75.24,77.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:78.2,78.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:78.24,80.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:81.2,81.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:82.27,82.27 0 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:84.10,85.93 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:87.2,87.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:87.30,89.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:90.2,90.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:90.26,92.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:94.2,95.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:95.16,97.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:99.2,100.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:100.16,102.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:104.2,112.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:112.16,114.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:116.2,123.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:123.16,125.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:126.2,126.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:130.97,132.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:132.16,134.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:136.2,137.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:137.16,139.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:141.2,147.23 4 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:147.23,149.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:150.2,150.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:150.26,152.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:154.2,155.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:155.16,157.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:159.2,160.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:160.16,161.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:161.47,163.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:164.3,164.51 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:167.2,167.97 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:167.97,172.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:174.2,175.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:175.16,177.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:179.2,185.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:185.16,187.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:188.2,188.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:192.99,194.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:194.16,196.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:198.2,199.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:199.16,201.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:203.2,207.26 3 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:207.26,209.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:211.2,212.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:212.16,214.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:216.2,223.26 3 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:223.26,229.28 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:229.28,231.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:232.3,232.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:235.2,236.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:236.16,238.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:239.2,239.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:243.100,245.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:245.16,247.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:249.2,250.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:250.16,252.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:254.2,262.23 5 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:262.23,264.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:265.2,265.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:265.24,267.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:268.2,268.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:269.27,269.27 0 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:271.10,272.93 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:274.2,274.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:274.30,276.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:277.2,277.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:277.26,279.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:281.2,281.71 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:281.71,282.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:282.47,284.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:285.3,285.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:288.2,293.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:293.16,295.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:296.2,296.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:302.92,309.19 5 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:309.19,310.53 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:310.53,313.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:316.2,317.51 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:317.51,318.66 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:318.66,320.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:323.2,331.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:331.16,333.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:334.2,334.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:338.46,342.32 4 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:342.32,343.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:343.20,346.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:348.2,350.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:350.26,352.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:352.27,353.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:353.13,355.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:356.4,356.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:358.3,358.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:360.2,360.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:16.45,18.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:20.35,36.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:38.84,39.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:39.40,41.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:42.2,42.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:42.50,44.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:45.2,45.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:48.101,50.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:50.16,52.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:53.2,54.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:54.16,56.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:57.2,58.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:58.19,60.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:61.2,62.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:62.21,64.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:65.2,66.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:66.16,68.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:69.2,69.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:72.102,74.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:74.16,76.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:77.2,82.8 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:10.100,12.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:12.16,14.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:16.2,17.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:17.18,19.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:21.2,21.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:22.16,23.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:24.14,25.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:26.14,27.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:28.17,29.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:30.17,31.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:32.21,33.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:34.19,35.42 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:36.17,37.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:38.16,39.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:40.16,41.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:42.21,43.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:44.10,45.167 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:15.77,16.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:16.33,18.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:20.2,21.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:21.27,23.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:25.2,26.28 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:26.28,29.17 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:29.17,31.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:34.2,41.32 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:41.32,46.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:46.20,48.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:49.3,49.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:52.2,53.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:53.16,55.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:57.2,57.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:61.97,62.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:62.28,64.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:66.2,67.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:67.16,69.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:71.2,75.29 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:75.29,77.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:79.2,80.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:80.16,82.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:84.2,84.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:84.20,86.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:88.2,97.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:97.25,103.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:103.20,105.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:106.3,106.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:106.19,108.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:109.3,109.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:112.2,113.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:113.16,115.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:117.2,117.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:121.95,122.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:122.28,124.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:126.2,127.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:127.16,129.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:131.2,137.50 4 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:137.50,139.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:141.2,142.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:142.16,144.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:145.2,145.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:145.16,147.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:149.2,149.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:149.21,151.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:153.2,154.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:154.16,156.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:157.2,157.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:157.20,159.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:161.2,161.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:165.98,166.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:166.28,168.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:170.2,171.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:171.16,173.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:175.2,181.50 4 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:181.50,183.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:185.2,185.96 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:185.96,187.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:189.2,189.88 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:197.98,198.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:198.28,200.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:202.2,203.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:203.16,205.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:207.2,217.74 6 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:217.74,219.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:222.2,223.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:223.16,225.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:227.2,229.156 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:235.98,237.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:237.16,239.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:241.2,247.24 4 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:247.24,249.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:252.2,253.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:253.29,255.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:256.2,256.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:15.93,16.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:16.37,18.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:20.2,21.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:21.16,23.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:25.2,32.16 7 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:32.16,34.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:35.2,35.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:35.19,37.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:38.2,38.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:38.19,40.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:42.2,43.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:43.16,45.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:47.2,54.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:54.16,56.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:57.2,57.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:61.91,62.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:62.37,64.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:66.2,67.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:67.16,69.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:71.2,73.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:73.16,75.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:76.2,76.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:76.19,78.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:80.2,81.43 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:81.43,83.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:83.19,85.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:86.3,86.79 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:87.8,89.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:90.2,90.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:90.16,91.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:91.45,93.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:94.3,94.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:97.2,110.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:110.16,112.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:113.2,113.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:117.93,119.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:122.91,123.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:123.37,125.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:127.2,128.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:128.16,130.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:132.2,133.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:133.19,135.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:136.2,141.16 5 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:141.16,143.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:145.2,155.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:155.25,165.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:167.2,168.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:168.16,170.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:171.2,171.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:175.94,176.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:176.37,178.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:180.2,181.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:181.16,183.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:185.2,187.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:187.16,189.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:190.2,190.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:190.19,192.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:193.2,196.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:196.16,198.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:200.2,208.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:208.25,216.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:218.2,225.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:225.16,227.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:228.2,228.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:232.94,233.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:233.37,235.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:237.2,238.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:238.16,240.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:242.2,243.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:243.21,245.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:246.2,248.19 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:248.19,250.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:252.2,253.46 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:253.46,255.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:255.13,257.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:259.2,259.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:259.44,261.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:261.13,263.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:266.2,267.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:267.16,269.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:271.2,278.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:278.16,280.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:281.2,281.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:19.69,21.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:23.38,38.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:40.51,63.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:65.53,80.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:82.46,85.32 3 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:85.32,87.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:88.2,88.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:91.105,93.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:93.16,95.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:96.2,97.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:97.16,99.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:100.2,100.70 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:103.107,105.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:105.16,107.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:108.2,109.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:109.16,111.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:112.2,112.72 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:115.101,117.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:117.16,119.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:120.2,121.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:121.17,123.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:124.2,139.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:142.109,144.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:144.16,146.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:147.2,154.8 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:157.100,159.28 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:159.28,161.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:161.18,163.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:164.3,164.62 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:166.2,167.72 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:167.72,169.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:170.2,170.53 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:170.53,172.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:173.2,174.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:174.26,176.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:177.2,177.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:180.73,182.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:182.16,184.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:185.2,185.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:12.104,14.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:14.16,16.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:18.2,19.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:19.18,21.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:23.2,23.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:24.14,25.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:26.18,27.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:28.17,29.46 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:30.10,31.96 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:36.101,37.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:37.27,39.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:41.2,42.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:42.16,44.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:46.2,47.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:47.21,49.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:50.2,51.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:51.19,53.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:54.2,54.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:55.52,55.52 0 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:56.10,57.101 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:59.2,61.93 2 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:61.93,64.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:66.2,70.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:27.31,94.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:98.97,100.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:100.26,102.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:103.2,103.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:103.28,105.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:107.2,108.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:108.16,110.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:112.2,115.15 4 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:115.15,117.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:118.2,118.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:118.17,120.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:122.2,123.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:123.16,125.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:127.2,140.29 3 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:140.29,151.31 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:151.31,154.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:155.3,155.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:158.2,162.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:167.100,169.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:169.26,171.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:172.2,172.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:172.28,174.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:175.2,175.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:175.26,177.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:179.2,180.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:180.16,182.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:184.2,185.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:185.22,187.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:189.2,190.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:190.20,191.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:191.54,199.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:200.3,200.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:200.61,202.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:203.3,203.58 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:206.2,211.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:215.95,217.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:217.32,219.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:220.2,220.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:220.28,222.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:224.2,225.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:225.16,227.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:229.2,230.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:230.22,232.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:234.2,234.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:234.61,236.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:239.2,239.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:239.25,246.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:248.2,252.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:258.104,260.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:260.26,262.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:267.2,271.20 3 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:271.20,275.3 3 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:275.8,279.3 3 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:280.2,280.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:284.60,285.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:285.30,287.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:288.2,288.42 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:288.42,290.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:291.2,291.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:64.89,65.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:65.25,67.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:69.2,70.49 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:70.49,72.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:74.2,74.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:75.18,76.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:77.21,78.35 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:79.19,80.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:81.18,82.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:83.19,84.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:85.18,86.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:87.18,91.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:91.23,93.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:94.3,94.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:95.10,96.62 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:100.81,103.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:103.19,105.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:106.2,107.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:107.19,109.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:112.2,112.46 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:112.46,114.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:115.2,115.46 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:115.46,117.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:122.2,122.66 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:122.66,124.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:127.2,127.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:127.25,128.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:128.22,130.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:131.8,132.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:132.26,134.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:138.2,138.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:138.25,139.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:139.22,141.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:142.8,143.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:143.26,145.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:148.2,148.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:148.22,150.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:151.2,151.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:151.38,153.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:154.2,154.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:154.19,156.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:159.2,161.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:161.25,164.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:165.2,165.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:165.25,168.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:169.2,171.23 3 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:171.23,174.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:175.2,175.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:175.23,178.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:180.2,193.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:193.16,195.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:198.2,199.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:199.29,201.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:202.2,202.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:202.29,204.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:205.2,213.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:216.121,217.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:217.28,218.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:218.26,220.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:221.3,222.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:222.17,223.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:223.49,225.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:226.4,226.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:228.3,228.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:230.2,230.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:230.26,232.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:233.2,234.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:234.16,235.48 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:235.48,237.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:238.3,238.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:240.2,240.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:243.101,248.36 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:248.36,250.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:250.8,252.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:253.2,253.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:253.16,255.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:256.2,256.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:256.32,257.128 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:257.128,262.72 5 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:262.72,264.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:267.2,267.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:276.81,277.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:277.25,279.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:280.2,280.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:280.22,282.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:283.2,283.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:283.39,285.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:286.2,286.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:286.25,288.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:289.2,289.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:289.21,291.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:292.2,293.14 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:293.14,295.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:296.2,305.16 5 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:305.16,307.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:308.2,314.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:317.84,318.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:318.19,320.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:321.2,323.63 3 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:323.63,325.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:326.2,329.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:332.82,333.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:333.38,335.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:336.2,337.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:338.18,339.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:340.18,341.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:345.2,345.59 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:345.59,347.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:349.2,351.21 3 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:351.21,353.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:353.8,356.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:357.2,357.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:357.16,359.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:366.2,367.41 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:367.41,369.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:371.2,378.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:397.115,398.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:398.15,400.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:403.2,404.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:404.26,405.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:405.28,407.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:408.3,408.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:408.28,410.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:412.2,412.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:412.23,415.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:420.2,426.12 4 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:426.12,427.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:427.27,429.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:429.18,431.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:433.4,433.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:433.33,435.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:440.2,441.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:441.26,442.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:442.28,443.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:443.49,445.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:448.3,448.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:448.28,449.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:449.49,451.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:454.2,454.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:457.82,458.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:458.21,460.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:461.2,462.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:462.16,464.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:465.2,465.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:465.36,467.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:468.2,469.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:469.16,471.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:472.2,477.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:480.82,481.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:481.40,483.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:484.2,485.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:485.19,487.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:488.2,489.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:489.16,491.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:492.2,499.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:502.82,503.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:503.21,505.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:506.2,507.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:507.16,509.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:510.2,514.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:23.179,24.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:24.22,26.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:28.2,32.22 4 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:32.22,34.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:35.2,36.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:36.22,38.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:40.2,41.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:41.26,43.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:44.2,44.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:44.26,46.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:47.2,47.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:47.30,49.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:50.2,50.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:50.30,52.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:54.2,55.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:55.16,57.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:58.2,58.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:58.13,60.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:61.2,62.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:62.16,64.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:65.2,65.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:65.13,67.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:69.2,70.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:70.16,72.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:73.2,73.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:73.15,75.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:77.2,77.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:80.172,81.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:81.28,82.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:82.23,84.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:85.3,85.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:85.18,87.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:88.3,89.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:89.17,90.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:90.49,92.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:93.4,93.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:95.3,95.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:98.2,98.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:98.24,100.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:101.2,101.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:101.19,103.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:104.2,105.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:105.16,106.48 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:106.48,108.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:109.3,109.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:111.2,111.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:114.119,116.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:116.22,118.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:119.2,120.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:120.22,122.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:124.2,126.26 3 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:126.26,127.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:127.36,129.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:130.3,130.105 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:131.8,132.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:132.32,134.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:135.3,135.103 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:137.2,137.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:137.16,139.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:141.2,141.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:141.32,143.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:143.27,145.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:146.3,147.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:147.27,149.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:150.3,150.106 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:150.106,151.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:153.3,153.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:153.27,154.114 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:154.114,155.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:157.9,157.104 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:157.104,158.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:160.3,160.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:160.27,161.114 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:161.114,162.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:164.9,164.104 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:164.104,165.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:167.3,167.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:169.2,169.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:25.90,26.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:26.26,28.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:30.2,31.49 2 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:31.49,33.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:35.2,35.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:36.16,37.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:38.10,39.63 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:43.84,44.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:44.21,46.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:47.2,47.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:47.25,49.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:50.2,50.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:50.21,52.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:53.2,53.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:53.21,55.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:57.2,58.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:59.18,60.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:61.15,62.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:63.24,64.42 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:65.10,66.108 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:69.2,70.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:70.22,72.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:73.2,74.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:74.29,76.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:78.2,78.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:78.14,85.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:87.2,89.37 3 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:89.37,92.21 3 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:92.21,94.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:97.2,100.31 4 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:100.31,102.38 2 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:102.38,104.37 2 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:104.37,106.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:109.3,122.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:122.26,124.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:125.3,125.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:125.19,127.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:131.3,133.39 3 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:133.39,135.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:135.9,137.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:138.3,138.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:138.17,140.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:142.3,142.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:142.34,144.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:145.3,145.11 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:148.2,155.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:20.99,22.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:22.16,24.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:26.2,31.44 3 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:31.44,32.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:32.33,33.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:33.43,38.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:43.2,43.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:43.49,45.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:46.2,46.48 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:46.48,48.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:50.2,52.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:52.27,55.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:55.8,60.24 3 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:60.24,62.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:64.3,64.57 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:64.57,66.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:68.3,68.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:71.2,71.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:71.16,73.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:75.2,76.23 2 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:76.23,78.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:80.2,80.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:19.40,89.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:109.71,111.9 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:111.9,113.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:115.2,116.38 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:116.38,117.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:118.13,119.41 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:119.41,121.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:122.17,123.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:123.43,125.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:126.11,127.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:127.40,129.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:133.2,133.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:133.22,138.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:139.2,139.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:143.90,144.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:144.25,146.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:148.2,149.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:149.16,151.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:153.2,157.61 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:157.61,159.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:161.2,161.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:162.16,163.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:164.14,165.35 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:166.13,167.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:168.16,169.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:170.17,171.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:172.16,173.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:174.15,175.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:176.10,177.120 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:189.85,191.39 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:191.39,192.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:192.44,194.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:196.2,196.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:196.15,198.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:199.2,199.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:199.15,201.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:202.2,202.46 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:205.91,207.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:207.17,209.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:211.2,215.25 5 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:215.25,217.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:218.2,224.25 4 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:224.25,226.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:227.2,227.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:227.25,229.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:231.2,243.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:243.16,245.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:247.2,247.139 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:250.89,252.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:252.19,254.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:255.2,256.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:256.25,258.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:259.2,264.52 5 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:264.52,266.14 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:266.14,268.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:271.2,277.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:277.25,280.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:282.2,283.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:283.16,285.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:287.2,287.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:287.22,288.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:288.20,290.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:291.3,291.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:294.2,297.31 3 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:297.31,300.29 3 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:300.29,302.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:303.3,305.69 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:308.2,308.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:311.88,313.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:313.13,315.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:317.2,318.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:318.16,320.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:322.2,328.22 6 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:328.22,331.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:333.2,333.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:333.23,335.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:335.30,338.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:341.2,341.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:344.91,346.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:346.13,348.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:350.2,353.18 3 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:353.18,354.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:354.27,356.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:357.3,357.73 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:357.73,359.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:362.2,362.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:362.19,370.17 4 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:370.17,372.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:375.2,376.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:376.26,378.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:379.2,379.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:382.92,384.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:384.13,386.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:388.2,389.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:389.16,391.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:393.2,401.16 4 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:401.16,403.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:405.2,405.88 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:408.91,410.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:410.13,412.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:414.2,418.95 4 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:418.95,420.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:422.2,422.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:425.90,427.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:427.13,429.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:431.2,433.167 3 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:433.167,435.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:437.2,437.89 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:437.89,439.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:441.2,441.108 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:22.93,24.49 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:24.49,26.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:28.2,28.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:29.14,30.42 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:31.17,32.59 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:33.16,34.58 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:35.24,36.75 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:37.27,38.71 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:39.22,40.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:41.23,42.63 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:43.10,44.66 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:48.79,49.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:49.13,51.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:52.2,53.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:53.16,55.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:57.2,58.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:58.32,60.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:61.2,84.28 3 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:87.101,88.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:88.13,90.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:91.2,91.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:91.38,93.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:94.2,95.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:95.16,97.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:98.2,98.53 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:98.53,100.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:102.2,104.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:104.17,106.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:107.2,107.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:107.29,109.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:110.2,115.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:118.100,119.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:119.13,121.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:122.2,122.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:122.38,124.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:125.2,126.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:126.16,128.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:129.2,129.53 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:129.53,131.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:133.2,135.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:135.17,137.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:138.2,138.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:138.29,140.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:141.2,146.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:149.123,150.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:150.13,152.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:153.2,153.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:153.18,155.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:156.2,156.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:156.38,158.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:159.2,161.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:161.17,163.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:164.2,169.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:172.113,173.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:173.13,175.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:176.2,176.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:176.50,178.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:179.2,181.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:181.17,183.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:184.2,188.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:191.57,195.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:197.102,198.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:198.13,200.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:201.2,201.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:201.20,203.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:204.2,205.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:205.16,207.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:209.2,210.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:210.32,212.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:214.2,217.56 3 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:217.56,223.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:225.2,230.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:233.41,235.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:235.16,237.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:238.2,238.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:35.27,37.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:42.41,43.11 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:44.48,45.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:46.10,47.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:54.57,55.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:56.17,57.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:58.16,59.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:60.10,61.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:82.58,83.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:84.28,85.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:86.26,87.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:88.10,89.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:93.114,95.68 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:95.68,97.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:99.2,101.42 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:101.42,102.71 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:102.71,105.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:107.2,117.23 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:117.23,119.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:121.2,124.22 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:124.22,125.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:125.31,127.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:128.3,128.35 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:129.8,129.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:129.37,131.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:132.2,132.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:135.74,136.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:136.30,138.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:139.2,139.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:139.34,141.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:142.2,142.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:142.31,144.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:145.2,145.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:145.22,147.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:161.169,162.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:162.17,164.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:165.2,166.51 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:166.51,168.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:169.2,169.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:172.92,174.42 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:174.42,177.63 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:177.63,179.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:179.9,181.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:183.2,183.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:186.65,190.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:192.115,194.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:194.26,196.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:196.8,196.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:196.31,198.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:199.2,199.117 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:202.122,206.31 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:206.31,207.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:207.45,209.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:211.2,211.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:214.72,216.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:218.117,219.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:219.16,221.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:222.2,223.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:223.20,225.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:225.17,227.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:228.3,228.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:228.27,229.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:229.50,231.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:231.30,232.11 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:236.3,236.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:239.2,241.60 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:241.60,243.61 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:243.61,245.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:246.3,246.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:246.24,247.9 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:249.3,250.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:250.17,252.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:253.3,253.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:253.22,254.9 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:256.3,256.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:256.29,257.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:257.50,259.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:259.30,260.11 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:264.3,265.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:265.32,266.9 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:269.2,269.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:272.51,273.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:273.16,275.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:276.2,277.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:277.18,279.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:280.2,280.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:280.19,282.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:283.2,283.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:286.97,288.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:288.30,290.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:291.2,291.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:291.49,293.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:294.2,294.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:297.108,299.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:301.108,303.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:305.102,307.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:319.55,320.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:320.31,322.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:323.2,323.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:323.26,325.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:326.2,326.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:329.71,330.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:343.26,344.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:345.10,346.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:354.95,362.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:362.16,364.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:366.2,397.39 14 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:397.39,399.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:399.27,401.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:402.8,404.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:405.2,407.46 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:407.46,410.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:411.2,411.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:411.44,413.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:413.12,415.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:417.2,417.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:417.26,419.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:420.2,420.84 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:420.84,422.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:427.2,427.65 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:427.65,429.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:431.2,433.20 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:433.20,435.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:436.2,437.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:437.20,439.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:440.2,440.56 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:440.56,442.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:443.2,443.56 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:443.56,448.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:450.2,450.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:450.45,453.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:459.2,459.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:459.31,461.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:461.22,462.62 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:462.62,465.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:466.4,466.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:468.3,468.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:471.2,472.115 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:472.115,474.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:491.2,491.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:491.19,493.23 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:493.23,495.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:496.3,508.21 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:508.21,510.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:511.3,511.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:522.2,522.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:522.43,535.34 5 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:535.34,556.30 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:556.30,558.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:559.4,559.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:559.44,561.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:562.4,562.106 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:562.106,564.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:575.4,575.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:575.74,577.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:578.4,579.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:579.18,581.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:583.4,584.28 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:584.28,586.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:588.4,588.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:588.31,599.57 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:599.57,601.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:601.17,604.7 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:606.5,607.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:607.21,609.6 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:615.5,615.138 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:615.138,617.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:617.27,619.7 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:620.6,620.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:622.5,623.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:623.26,625.6 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:626.5,626.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:630.4,631.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:631.20,633.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:634.4,634.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:634.22,637.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:637.26,639.6 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:640.5,640.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:645.4,660.77 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:660.77,662.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:663.4,664.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:664.25,666.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:667.4,667.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:673.2,673.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:673.26,675.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:677.2,678.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:678.25,680.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:681.2,681.97 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:681.97,683.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:690.2,691.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:691.21,693.33 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:693.33,695.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:696.3,696.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:696.33,698.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:699.3,699.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:699.49,704.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:721.3,721.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:721.54,722.84 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:722.84,724.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:728.2,728.99 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:728.99,730.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:732.2,733.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:733.22,735.10 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:736.109,737.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:738.100,739.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:740.114,741.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:742.107,743.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:744.11,745.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:748.2,749.43 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:749.43,751.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:753.2,755.34 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:755.34,756.48 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:756.48,757.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:757.19,760.5 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:764.2,764.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:764.31,767.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:768.2,768.35 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:768.35,771.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:772.2,772.76 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:772.76,776.3 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:778.2,780.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:780.16,782.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:782.20,785.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:788.2,788.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:788.25,798.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:798.18,800.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:800.9,800.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:800.30,807.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:808.3,808.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:808.36,810.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:811.3,812.50 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:812.50,815.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:816.3,822.17 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:822.17,824.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:826.3,836.17 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:836.17,838.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:839.3,839.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:842.2,843.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:843.30,844.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:844.52,846.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:846.9,848.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:851.2,869.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:869.21,871.43 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:871.43,873.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:874.3,874.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:874.29,876.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:886.3,886.76 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:886.76,888.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:890.2,890.105 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:890.105,892.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:893.2,894.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:894.16,896.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:901.2,904.40 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:904.40,905.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:905.15,906.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:909.3,910.63 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:910.63,912.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:912.9,914.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:916.3,916.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:916.43,918.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:919.3,920.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:920.20,922.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:925.3,925.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:925.23,928.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:929.3,931.33 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:931.33,934.39 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:934.39,936.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:939.2,948.42 5 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:948.42,950.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:950.21,952.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:952.9,955.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:959.2,959.53 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:959.53,960.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:960.54,961.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:961.33,963.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:964.9,972.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:973.3,973.60 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:973.60,974.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:974.40,976.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:978.3,978.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:978.61,979.41 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:979.41,981.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:983.3,983.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:983.28,985.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:986.3,987.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:989.2,989.51 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:989.51,991.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:995.2,997.53 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:997.53,999.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:999.8,1001.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1002.2,1002.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1002.22,1004.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1008.2,1014.76 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1014.76,1016.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1021.2,1021.57 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1021.57,1026.13 5 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1026.13,1029.21 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1029.21,1032.5 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1033.4,1033.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1033.49,1035.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1036.4,1043.89 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1043.89,1046.5 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1048.4,1048.86 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1052.2,1063.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1063.21,1065.40 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1065.40,1067.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1068.3,1068.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1068.38,1070.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1072.2,1074.18 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1074.18,1081.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1082.2,1082.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1082.28,1084.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1085.2,1085.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1085.16,1087.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1088.2,1088.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1088.30,1090.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1091.2,1091.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1091.30,1093.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1098.2,1098.76 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1098.76,1100.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1101.2,1102.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1102.16,1104.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1105.2,1105.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1111.94,1113.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1113.15,1115.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1117.2,1118.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1118.16,1120.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1122.2,1123.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1123.13,1125.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1126.2,1131.16 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1131.16,1133.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1134.2,1134.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1134.19,1136.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1146.2,1146.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1146.39,1148.55 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1148.55,1150.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1152.2,1152.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1152.39,1154.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1157.2,1158.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1158.21,1163.21 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1163.21,1165.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1166.3,1167.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1167.21,1169.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1170.3,1170.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1170.52,1172.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1173.3,1173.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1173.52,1178.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1179.3,1179.41 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1179.41,1182.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1183.3,1183.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1188.2,1188.46 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1188.46,1190.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1191.2,1191.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1191.27,1193.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1195.2,1196.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1196.16,1198.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1201.2,1210.16 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1210.16,1212.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1213.2,1213.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1218.59,1220.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1220.38,1222.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1225.2,1226.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1226.29,1227.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1227.22,1229.9 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1232.2,1232.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1232.18,1234.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1237.2,1244.29 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1244.29,1245.67 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1245.67,1247.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1249.2,1249.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1249.16,1251.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1254.2,1254.11 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1258.55,1260.47 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1260.47,1262.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1263.2,1264.58 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1264.58,1266.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1267.2,1267.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1270.252,1271.108 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1271.108,1273.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1274.2,1274.55 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1274.55,1276.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1277.2,1277.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1280.184,1282.69 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1282.69,1284.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1284.32,1285.58 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1285.58,1287.10 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1290.3,1290.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1290.18,1292.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1294.2,1294.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1294.19,1297.32 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1297.32,1298.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1298.39,1300.10 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1303.3,1303.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1303.19,1305.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1307.2,1307.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1307.21,1309.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1309.32,1310.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1310.49,1312.10 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1315.3,1315.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1315.18,1317.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1319.2,1319.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1319.28,1321.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1321.17,1323.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1324.3,1324.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1324.27,1326.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1328.2,1328.76 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1328.76,1330.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1331.2,1331.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1342.96,1343.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1343.26,1345.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1347.2,1348.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1348.16,1350.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1352.2,1363.23 9 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1363.23,1364.58 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1364.58,1365.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1365.31,1367.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1367.10,1369.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1373.2,1373.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1373.17,1375.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1376.2,1376.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1376.16,1378.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1379.2,1379.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1379.16,1381.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1382.2,1382.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1382.18,1384.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1385.2,1385.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1385.19,1387.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1388.2,1388.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1388.19,1390.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1396.2,1399.18 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1399.18,1400.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1400.61,1401.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1402.50,1403.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1404.12,1405.108 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1409.2,1410.42 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1410.42,1414.3 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1415.2,1420.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1420.16,1422.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1429.2,1444.43 6 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1444.43,1446.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1449.2,1451.27 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1451.27,1453.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1458.2,1458.46 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1458.46,1460.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1461.2,1461.63 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1461.63,1463.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1465.2,1466.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1466.15,1472.29 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1472.29,1479.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1479.18,1481.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1482.4,1482.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1482.23,1483.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1485.4,1485.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1485.30,1486.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1486.24,1488.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1488.32,1489.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1493.4,1494.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1494.30,1495.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1498.8,1504.29 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1504.29,1506.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1506.18,1508.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1509.4,1509.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1509.23,1510.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1512.4,1512.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1512.30,1513.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1513.24,1515.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1515.32,1516.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1520.4,1521.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1521.30,1522.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1526.2,1526.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1526.26,1528.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1528.17,1530.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1535.2,1535.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1535.74,1536.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1536.13,1537.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1537.33,1542.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1542.26,1544.39 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1544.39,1546.7 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1548.5,1548.82 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1565.2,1565.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1565.38,1569.27 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1569.27,1571.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1572.3,1572.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1572.27,1574.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1576.3,1581.32 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1581.32,1586.4 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1588.3,1592.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1592.18,1594.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1595.3,1596.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1596.17,1598.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1599.3,1599.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1602.2,1602.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1603.15,1618.32 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1618.32,1620.33 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1620.33,1621.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1621.40,1623.11 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1626.4,1638.6 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1640.3,1641.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1641.17,1643.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1644.3,1644.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1646.18,1648.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1648.17,1650.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1651.3,1651.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1653.10,1654.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1654.25,1656.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1657.3,1659.32 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1659.32,1661.33 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1661.33,1662.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1662.40,1664.11 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1667.4,1669.26 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1669.26,1671.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1672.4,1673.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1673.25,1675.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1676.4,1676.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1678.3,1678.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1690.51,1695.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1700.73,1702.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1702.16,1704.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1705.2,1706.48 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1706.48,1710.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1711.2,1713.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1713.16,1715.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1716.2,1716.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1727.117,1731.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1731.21,1733.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1734.2,1735.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1735.16,1737.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1738.2,1739.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1739.27,1741.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1742.2,1742.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1764.19,1775.30 7 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1775.30,1777.37 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1777.37,1779.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1781.3,1781.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1781.20,1783.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1797.2,1797.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1797.39,1799.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1801.2,1811.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1811.25,1813.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1815.2,1816.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1816.29,1818.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1824.2,1824.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1824.27,1826.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1831.2,1833.22 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1833.22,1835.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1837.2,1846.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1846.16,1848.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1853.2,1855.27 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1855.27,1857.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1859.2,1876.33 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1876.33,1878.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1880.2,1881.28 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1881.28,1885.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1885.20,1888.33 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1888.33,1889.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1889.40,1891.11 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1894.4,1894.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1894.20,1895.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1900.3,1900.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1900.22,1902.33 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1902.33,1903.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1903.50,1905.11 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1908.4,1908.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1908.19,1909.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1918.3,1918.56 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1918.56,1919.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1927.3,1927.64 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1927.64,1928.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1932.3,1935.32 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1935.32,1936.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1936.39,1938.10 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1942.3,1956.14 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1956.14,1957.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1957.37,1959.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1961.3,1962.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1962.26,1963.9 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1975.2,1975.59 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1975.59,1986.17 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1986.17,1988.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1990.3,1991.34 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1991.34,1993.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1995.3,1996.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1996.29,1998.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1998.21,2001.34 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2001.34,2002.41 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2002.41,2004.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2007.5,2007.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2007.21,2008.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2011.4,2011.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2011.23,2013.34 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2013.34,2014.51 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2014.51,2016.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2019.5,2019.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2019.20,2020.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2023.4,2023.57 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2023.57,2024.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2027.4,2027.65 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2027.65,2028.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2030.4,2031.33 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2031.33,2032.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2032.40,2034.11 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2037.4,2051.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2051.15,2052.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2052.38,2054.6 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2056.4,2057.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2057.27,2058.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2065.2,2066.28 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2066.28,2068.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2072.2,2072.71 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2072.71,2080.30 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2080.30,2081.41 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2081.41,2087.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2089.3,2089.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2089.13,2090.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2090.31,2095.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2095.25,2097.38 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2097.38,2099.7 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2101.5,2101.81 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2112.2,2112.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2112.38,2115.27 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2115.27,2117.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2121.3,2138.30 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2138.30,2140.11 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2140.11,2141.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2143.4,2160.15 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2160.15,2161.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2161.39,2163.6 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2165.4,2165.46 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2167.3,2173.24 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2173.24,2175.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2176.3,2176.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2179.2,2179.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2180.15,2182.24 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2182.24,2184.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2185.3,2185.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2187.18,2199.30 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2199.30,2201.11 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2201.11,2202.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2204.4,2208.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2208.15,2209.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2209.39,2211.6 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2213.4,2213.35 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2215.3,2216.24 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2216.24,2218.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2219.3,2219.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2220.10,2221.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2221.22,2223.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2224.3,2226.27 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2226.27,2228.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2228.20,2230.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2231.4,2233.26 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2233.26,2235.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2236.4,2237.23 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2237.23,2239.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2240.4,2240.46 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2240.46,2244.5 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2245.4,2245.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2247.3,2247.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2252.94,2254.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2254.16,2256.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2258.2,2260.18 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2260.18,2261.59 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2261.59,2262.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2262.36,2264.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2264.10,2266.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2270.2,2270.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2270.13,2272.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2273.2,2273.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2273.50,2275.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2277.2,2277.98 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2281.98,2282.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2282.26,2284.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2286.2,2287.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2287.16,2289.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2291.2,2292.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2292.13,2294.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2297.2,2298.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2298.19,2299.51 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2299.51,2301.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2302.3,2302.55 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2304.2,2304.42 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2304.42,2306.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2308.2,2308.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2308.54,2309.48 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2309.48,2311.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2312.3,2312.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2316.2,2318.53 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:17.82,19.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:21.149,22.55 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:22.55,24.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:25.2,25.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:25.36,27.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:28.2,34.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:34.16,36.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:37.2,37.42 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:37.42,39.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:40.2,40.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:43.105,44.48 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:44.48,46.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:47.2,48.54 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:51.129,53.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:53.16,55.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:56.2,57.53 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:57.53,59.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:60.2,61.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:61.25,63.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:64.2,65.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:65.16,67.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:68.2,68.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:26.97,27.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:27.18,29.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:30.2,30.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:33.37,35.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:37.81,38.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:38.44,40.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:41.2,41.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:41.38,43.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:44.2,44.57 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:47.88,48.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:48.32,50.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:51.2,52.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:52.20,54.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:55.2,55.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:58.40,72.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:74.106,75.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:75.34,77.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:78.2,79.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:79.16,81.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:83.2,84.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:84.16,86.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:88.2,89.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:89.13,91.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:93.2,94.63 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:94.63,96.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:98.2,98.72 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:98.72,100.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:102.2,106.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:109.117,110.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:110.32,112.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:113.2,113.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:113.34,115.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:117.2,118.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:118.16,120.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:121.2,121.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:121.19,123.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:125.2,126.69 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:126.69,128.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:130.2,136.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:18.33,20.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:22.27,37.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:39.93,40.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:40.30,42.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:43.2,43.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:43.28,45.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:46.2,47.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:47.16,49.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:51.2,52.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:52.17,54.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:55.2,56.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:56.19,58.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:59.2,59.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:59.19,61.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:62.2,63.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:63.16,65.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:67.2,74.9 3 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:74.9,76.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:77.2,78.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:78.15,80.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:81.2,85.16 4 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:85.16,87.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:88.2,88.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:88.17,90.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:92.2,101.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:104.48,105.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:105.16,107.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:108.2,109.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:109.29,111.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:112.2,112.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:112.31,114.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:115.2,115.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:118.75,120.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:120.27,121.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:121.32,123.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:123.17,124.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:126.4,126.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:129.2,134.33 3 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:134.33,136.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:137.2,137.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:137.40,138.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:138.39,140.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:141.3,141.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:143.2,143.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:143.34,145.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:146.2,147.35 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:147.35,149.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:150.2,150.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:153.77,154.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:154.20,156.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:157.2,159.31 3 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:159.31,160.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:160.33,162.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:163.3,163.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:163.30,165.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:167.2,170.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:23.91,25.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:27.38,50.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:52.104,53.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:53.38,55.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:56.2,57.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:57.16,59.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:61.2,62.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:62.26,64.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:65.2,66.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:66.30,68.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:69.2,69.72 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:69.72,71.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:73.2,74.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:74.16,76.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:77.2,78.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:78.16,80.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:81.2,82.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:82.16,84.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:85.2,86.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:86.16,88.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:90.2,105.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:105.16,107.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:109.2,109.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:109.19,117.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:118.2,118.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:118.25,120.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:121.2,121.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:121.30,123.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:124.2,124.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:124.31,126.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:127.2,128.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:128.16,130.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:131.2,131.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:134.91,136.9 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:136.9,138.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:139.2,140.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:140.15,141.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:141.19,143.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:144.3,144.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:146.2,146.94 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:149.59,150.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:150.16,152.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:153.2,154.61 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:154.61,156.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:157.2,157.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:160.56,161.75 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:161.75,163.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:164.2,164.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:167.67,169.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:170.17,171.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:172.67,173.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:174.10,175.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:179.60,180.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:180.16,182.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:183.2,184.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:184.25,186.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:187.2,187.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:190.57,191.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:192.15,193.81 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:193.81,195.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:196.3,196.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:197.19,199.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:199.17,201.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:202.3,202.55 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:202.55,204.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:205.3,205.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:206.14,207.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:208.11,209.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:210.10,211.41 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:215.59,216.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:216.16,218.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:219.2,219.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:220.12,221.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:222.14,223.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:224.10,225.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:28.90,30.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:30.16,32.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:34.2,36.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:37.16,38.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:40.16,42.140 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:44.20,46.140 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:48.17,50.142 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:52.17,56.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:56.50,62.63 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:62.63,64.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:66.4,66.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:66.45,68.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:72.4,74.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:74.25,76.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:77.4,77.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:80.3,80.101 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:82.18,84.141 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:86.18,88.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:88.18,90.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:91.3,91.41 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:93.17,96.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:96.50,99.59 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:99.59,101.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:102.4,104.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:104.25,106.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:107.4,107.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:110.3,110.98 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:112.10,116.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:125.86,126.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:126.16,128.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:129.2,130.9 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:130.9,132.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:133.2,133.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:133.22,135.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:137.2,139.31 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:139.31,141.10 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:141.10,143.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:144.3,145.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:145.22,147.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:148.3,149.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:149.26,151.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:152.3,152.68 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:152.68,154.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:155.3,156.37 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:156.37,158.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:159.3,160.107 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:162.2,162.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:165.249,166.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:166.24,168.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:169.2,169.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:169.38,171.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:173.2,174.31 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:174.31,175.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:175.32,177.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:180.2,181.34 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:181.34,182.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:182.29,183.9 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:185.3,197.17 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:197.17,199.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:200.3,200.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:200.20,201.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:203.3,203.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:203.37,205.33 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:205.33,206.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:208.4,208.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:208.19,209.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:209.43,210.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:212.5,212.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:214.4,215.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:215.30,216.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:220.2,220.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:223.113,229.2 5 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:231.101,233.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:247.92,251.16 4 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:251.16,253.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:253.8,253.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:253.24,255.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:259.2,272.51 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:272.51,274.38 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:274.38,275.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:276.50,277.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:278.12,279.107 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:287.2,292.26 5 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:292.26,294.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:297.2,297.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:297.19,301.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:303.2,311.42 5 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:311.42,315.3 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:316.2,341.64 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:341.64,342.86 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:342.86,344.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:345.3,345.56 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:345.56,347.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:348.3,360.19 6 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:360.19,364.4 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:365.3,365.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:369.2,370.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:370.15,372.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:372.27,374.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:375.3,375.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:375.27,377.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:380.2,381.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:381.15,387.28 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:387.28,395.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:395.18,397.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:398.4,398.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:398.23,399.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:401.4,401.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:401.30,402.66 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:402.66,403.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:405.5,406.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:406.12,407.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:409.5,409.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:409.28,413.6 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:414.5,415.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:415.30,416.11 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:419.4,420.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:420.30,421.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:424.8,432.28 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:432.28,438.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:438.18,440.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:441.4,441.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:441.23,442.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:444.4,444.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:444.30,445.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:445.40,447.31 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:447.31,448.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:452.4,455.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:455.30,456.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:461.2,465.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:465.17,467.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:469.2,470.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:470.16,472.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:473.2,473.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:20.79,21.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:21.43,23.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:24.2,24.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:24.29,26.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:27.2,27.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:30.40,63.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:65.68,71.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:71.25,74.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:75.2,75.67 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:78.62,83.19 3 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:83.19,87.3 3 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:88.2,88.89 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:91.101,92.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:92.22,94.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:95.2,96.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:96.18,98.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:99.2,100.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:100.16,102.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:103.2,104.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:104.16,106.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:107.2,107.119 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:110.99,111.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:111.22,113.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:114.2,115.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:115.18,117.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:118.2,119.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:119.16,121.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:122.2,122.51 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:122.51,124.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:125.2,126.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:126.16,128.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:129.2,131.15 3 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:131.15,132.69 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:132.69,134.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:135.3,135.58 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:137.2,137.130 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:140.102,142.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:142.16,144.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:145.2,145.64 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:145.64,147.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:148.2,148.113 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:151.109,153.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:153.16,155.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:156.2,157.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:157.16,159.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:160.2,161.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:161.16,163.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:164.2,164.67 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:167.107,169.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:169.16,171.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:172.2,173.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:173.16,175.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:176.2,176.107 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:176.107,178.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:179.2,179.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:180.41,181.63 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:182.41,183.95 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:184.10,185.83 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:189.111,191.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:191.16,193.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:194.2,195.57 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:195.57,197.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:198.2,199.23 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:199.23,201.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:202.2,203.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:203.16,205.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:206.2,206.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:206.17,208.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:209.2,209.108 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:212.63,215.2 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:217.69,219.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:219.16,221.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:222.2,222.79 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:225.60,227.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:227.16,229.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:230.2,230.57 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:233.137,234.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:234.49,236.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:237.2,238.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:238.16,240.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:241.2,243.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:243.16,245.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:246.2,247.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:247.16,249.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:250.2,250.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:250.22,252.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:253.2,253.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:256.142,258.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:258.16,260.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:261.2,262.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:262.16,264.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:265.2,265.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:265.47,267.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:268.2,269.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:269.16,270.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:270.50,272.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:273.3,273.89 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:275.2,275.173 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:278.157,280.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:280.16,282.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:283.2,283.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:283.47,285.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:286.2,287.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:287.16,288.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:288.50,290.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:291.3,291.89 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:293.2,293.169 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:296.104,297.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:297.22,299.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:300.2,301.61 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:301.61,303.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:303.20,304.9 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:307.2,307.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:307.19,309.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:310.2,317.8 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:320.119,322.39 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:322.39,323.81 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:323.81,325.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:327.2,327.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:330.71,332.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:332.16,334.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:335.2,335.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:17.61,105.23 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:105.23,122.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:123.2,123.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:126.104,127.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:127.61,129.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:130.2,130.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:130.38,132.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:133.2,134.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:134.16,136.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:137.2,138.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:138.16,140.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:141.2,147.107 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:147.107,149.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:150.2,151.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:151.16,153.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:154.2,170.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:170.19,172.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:173.2,173.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:176.103,177.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:177.61,179.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:180.2,180.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:180.38,182.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:183.2,184.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:184.16,186.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:187.2,191.106 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:191.106,193.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:194.2,195.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:195.16,197.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:198.2,200.31 3 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:200.31,207.36 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:207.36,218.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:219.3,220.35 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:222.2,230.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:233.107,234.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:234.61,236.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:237.2,237.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:237.38,239.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:240.2,241.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:241.16,243.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:244.2,248.110 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:248.110,250.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:251.2,252.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:252.16,254.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:255.2,256.33 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:256.33,266.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:267.2,275.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:278.108,279.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:279.61,281.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:282.2,282.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:282.37,284.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:285.2,286.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:286.16,288.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:289.2,290.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:290.19,292.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:293.2,293.104 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:293.104,295.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:296.2,297.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:297.16,299.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:300.2,307.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:307.16,309.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:310.2,311.43 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:311.43,318.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:319.2,332.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:332.22,334.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:335.2,335.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:338.108,339.62 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:339.62,341.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:342.2,342.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:342.38,344.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:345.2,346.9 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:346.9,348.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:349.2,350.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:350.16,352.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:353.2,357.16 5 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:357.16,359.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:360.2,370.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:373.109,374.62 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:374.62,376.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:377.2,377.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:377.38,379.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:380.2,381.9 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:381.9,383.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:384.2,385.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:385.16,387.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:388.2,390.32 3 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:390.32,392.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:393.2,394.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:394.16,396.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:397.2,403.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:406.106,407.62 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:407.62,409.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:410.2,410.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:410.38,412.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:413.2,414.9 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:414.9,416.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:417.2,418.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:418.16,420.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:421.2,423.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:423.16,424.41 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:424.41,434.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:435.3,435.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:437.2,445.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:483.65,484.42 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:484.42,485.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:485.39,487.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:489.2,489.85 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:489.85,491.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:492.2,492.95 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:495.102,496.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:496.38,498.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:499.2,499.58 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:499.58,501.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:502.2,502.90 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:505.60,508.2 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:510.66,512.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:512.26,514.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:515.2,515.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:518.69,521.33 3 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:521.33,523.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:523.21,524.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:526.3,526.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:526.34,527.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:529.3,530.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:532.2,532.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:535.63,537.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:537.19,539.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:540.2,541.42 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:541.42,543.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:544.2,544.57 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:544.57,546.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:547.2,547.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:547.54,549.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:550.2,550.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:553.70,557.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:559.66,561.9 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:561.9,563.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:564.2,566.17 3 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:566.17,568.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:569.2,569.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:570.103,572.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:573.34,574.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:575.10,576.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:580.56,581.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:581.37,583.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:584.2,584.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:584.26,586.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:586.37,587.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:589.3,589.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:591.2,591.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:594.90,602.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:604.68,605.71 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:605.71,607.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:607.17,609.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:610.3,610.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:612.2,613.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:613.16,615.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:616.2,617.41 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:617.41,619.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:620.2,620.78 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:623.65,625.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:625.16,627.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:628.2,628.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:628.17,630.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:631.2,631.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:634.51,635.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:635.16,637.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:638.2,638.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:641.56,642.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:642.28,644.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:645.2,646.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:649.92,651.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:651.29,653.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:654.2,654.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:657.86,659.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:659.29,661.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:662.2,662.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:665.94,667.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:667.29,669.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:670.2,670.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:673.98,675.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:675.29,677.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:678.2,678.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:17.93,18.104 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:18.104,20.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:22.2,23.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:23.16,25.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:27.2,28.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:28.19,30.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:32.2,35.33 3 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:35.33,36.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:36.47,39.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:42.2,44.20 3 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:44.20,47.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:48.2,49.68 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:49.68,50.48 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:50.48,52.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:53.3,53.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:53.32,55.23 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:55.23,56.63 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:56.63,58.6 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:59.5,59.53 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:61.4,61.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:64.2,71.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:71.17,73.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:73.8,73.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:73.29,75.36 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:75.36,77.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:78.3,83.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:86.2,86.35 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:86.35,88.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:90.2,97.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:97.16,99.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:101.2,110.28 3 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:110.28,112.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:113.2,124.16 4 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:124.16,126.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:127.2,127.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:133.93,134.35 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:134.35,136.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:138.2,139.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:139.16,141.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:143.2,144.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:144.16,146.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:147.2,147.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:147.17,149.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:151.2,152.33 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:152.33,153.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:153.47,156.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:159.2,160.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:160.16,162.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:164.2,176.26 3 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:176.26,178.23 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:178.23,180.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:181.3,192.5 3 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:195.2,196.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:196.16,198.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:199.2,199.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:22.104,24.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:24.16,26.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:28.2,29.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:29.18,31.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:33.2,33.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:34.13,35.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:36.13,37.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:38.14,39.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:40.16,41.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:42.10,43.95 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:51.67,53.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:57.68,58.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:58.33,60.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:61.2,61.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:67.42,69.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:74.61,76.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:76.26,78.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:79.2,79.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:85.90,86.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:86.49,88.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:90.2,91.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:91.15,93.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:94.2,95.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:95.17,97.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:100.2,103.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:103.16,105.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:107.2,113.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:113.12,115.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:115.18,117.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:118.3,119.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:119.20,121.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:122.3,124.48 3 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:125.8,127.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:129.2,130.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:130.16,132.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:134.2,139.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:145.90,147.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:147.15,149.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:151.2,152.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:152.16,154.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:156.2,157.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:157.16,158.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:158.47,160.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:161.3,161.56 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:164.2,170.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:170.19,173.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:173.8,175.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:176.2,176.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:181.92,183.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:183.16,185.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:187.2,188.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:188.16,190.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:192.2,200.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:200.25,207.28 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:207.28,209.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:210.3,210.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:212.2,212.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:216.93,217.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:217.52,219.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:221.2,222.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:222.15,224.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:226.2,227.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:227.16,229.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:231.2,231.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:231.47,232.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:232.47,234.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:235.3,235.59 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:238.2,241.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:35.127,36.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:36.23,38.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:39.2,40.40 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:40.40,42.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:43.2,43.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:43.37,45.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:46.2,46.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:46.37,48.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:49.2,49.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:52.23,80.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:82.26,140.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:142.92,143.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:143.25,145.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:147.2,148.49 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:148.49,150.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:152.2,152.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:153.17,154.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:154.24,156.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:157.3,158.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:158.17,160.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:161.3,165.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:166.17,167.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:167.22,169.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:170.3,170.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:170.22,172.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:173.3,174.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:174.17,176.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:177.3,181.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:182.16,189.23 7 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:189.23,191.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:192.3,192.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:192.24,194.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:195.3,195.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:195.39,197.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:198.3,207.17 3 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:207.17,209.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:210.3,210.69 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:210.69,212.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:213.3,213.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:214.10,215.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:219.92,220.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:220.25,222.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:224.2,225.49 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:225.49,227.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:229.2,229.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:230.17,232.24 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:232.24,234.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:235.3,236.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:236.17,238.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:239.3,239.59 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:239.59,241.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:242.3,242.81 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:242.81,244.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:245.3,250.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:251.17,253.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:253.22,255.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:256.3,257.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:257.17,259.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:260.3,260.79 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:260.79,262.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:263.3,268.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:269.10,270.66 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:274.91,276.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:276.16,278.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:279.2,279.67 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:279.67,280.76 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:280.76,282.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:285.2,286.52 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:286.52,288.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:289.2,289.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:292.74,294.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:294.16,296.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:297.2,297.62 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:297.62,299.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:300.2,300.68 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:303.109,304.56 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:304.56,306.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:307.2,307.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:307.25,309.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:310.2,310.81 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:310.81,312.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:313.2,313.102 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:313.102,315.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:316.2,316.108 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:316.108,318.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:319.2,319.99 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:319.99,321.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:322.2,322.99 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:322.99,324.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:325.2,325.60 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:325.60,327.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:328.2,328.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:328.34,330.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:331.2,331.114 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:331.114,333.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:334.2,334.66 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:334.66,336.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:337.2,337.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:337.40,339.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:340.2,340.132 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:340.132,342.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:343.2,343.35 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:343.35,345.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:346.2,346.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:349.92,350.103 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:350.103,352.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:354.2,355.52 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:355.52,357.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:358.2,358.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:358.32,360.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:361.2,361.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:364.108,365.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:365.19,367.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:368.2,369.53 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:369.53,371.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:372.2,372.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:372.19,374.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:375.2,375.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:375.39,376.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:376.34,378.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:380.2,380.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:383.66,385.53 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:385.53,387.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:388.2,388.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:388.19,390.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:391.2,391.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:10.101,12.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:12.16,14.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:16.2,18.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:19.16,20.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:21.14,22.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:23.15,24.84 1 0 +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:25.16,26.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:27.10,28.97 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:21.75,23.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:25.41,28.2 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:30.31,37.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:39.38,46.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:48.50,56.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:58.43,70.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:72.80,73.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:73.36,75.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:76.2,76.48 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:76.48,78.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:79.2,79.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:82.97,84.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:84.16,86.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:87.2,88.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:88.16,90.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:91.2,92.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:92.16,94.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:95.2,96.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:96.16,98.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:99.2,99.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:102.104,104.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:104.16,106.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:107.2,108.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:108.16,110.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:111.2,112.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:112.16,114.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:115.2,116.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:116.16,118.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:119.2,119.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:122.96,124.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:124.16,126.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:127.2,128.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:128.19,130.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:131.2,132.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:132.18,134.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:135.2,141.79 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:141.79,143.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:143.17,145.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:146.3,146.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:148.2,148.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:151.77,153.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:153.16,155.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:156.2,157.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:157.19,159.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:160.2,160.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:10.101,12.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:12.16,14.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:16.2,17.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:17.18,19.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:21.2,21.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:22.15,23.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:24.13,25.42 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:26.14,27.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:28.16,29.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:30.16,31.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:32.10,33.102 1 0 diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/repeat-01/create-database.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/repeat-01/create-database.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/repeat-01/create-database.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/repeat-01/create-database.stdout.log new file mode 100644 index 00000000..4b15bd57 --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/repeat-01/create-database.stdout.log @@ -0,0 +1 @@ +CREATE DATABASE diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/repeat-01/create-pgvector.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/repeat-01/create-pgvector.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/repeat-01/create-pgvector.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/repeat-01/create-pgvector.stdout.log new file mode 100644 index 00000000..d26bad14 --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/repeat-01/create-pgvector.stdout.log @@ -0,0 +1 @@ +CREATE EXTENSION diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/repeat-01/database-identity.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/repeat-01/database-identity.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/repeat-01/database-identity.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/repeat-01/database-identity.stdout.log new file mode 100644 index 00000000..626bd7f7 --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/repeat-01/database-identity.stdout.log @@ -0,0 +1 @@ +{"database" : "engram_prc_rg_test_c987bdd5db898557_r1", "schema" : "public", "server_version" : "17.10 (Debian 17.10-1.pgdg12+1)", "user" : "engram"} diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/repeat-01/go-test-summary.json b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/repeat-01/go-test-summary.json new file mode 100644 index 00000000..944dd6f5 --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/repeat-01/go-test-summary.json @@ -0,0 +1,40 @@ +{ + "schema_version": 1, + "verdict": "FAIL", + "input_path": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-flag-reset-removed\\repeat-01\\go-test.stdout.jsonl", + "fail_on_unexpected_skip": true, + "allowed_skip_identities": [], + "counts": { + "packages": 1, + "tests": 1, + "passed": 0, + "failed": 1, + "skipped": 0, + "no_tests": 0, + "zero_tests": 0, + "incomplete": 0, + "unexpected_skips": 0, + "malformed_lines": 0 + }, + "packages": [ + { + "package": "github.com/thebtf/engram/internal/mcp", + "outcome": "fail", + "elapsed_seconds": 0.124, + "last_output": "FAIL\tgithub.com/thebtf/engram/internal/mcp\t0.117s", + "tests_observed": 1 + } + ], + "tests": [ + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestEC_F1_TagDerivedBackfill_T007", + "outcome": "fail", + "elapsed_seconds": 0.0, + "last_output": "--- FAIL: TestEC_F1_TagDerivedBackfill_T007 (0.00s)", + "skip_allowed": false + } + ], + "unexpected_skips": [], + "errors": [] +} diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/repeat-01/go-test.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/repeat-01/go-test.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/repeat-01/go-test.stdout.jsonl b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/repeat-01/go-test.stdout.jsonl new file mode 100644 index 00000000..7a2bca08 --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/repeat-01/go-test.stdout.jsonl @@ -0,0 +1,14 @@ +{"Time":"2026-07-11T04:01:30.8840184+03:00","Action":"start","Package":"github.com/thebtf/engram/internal/mcp"} +{"Time":"2026-07-11T04:01:30.9740223+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007"} +{"Time":"2026-07-11T04:01:30.9740223+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":"=== RUN TestEC_F1_TagDerivedBackfill_T007\n"} +{"Time":"2026-07-11T04:01:30.9740223+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":" store_memory_compat_t007_test.go:83: \n"} +{"Time":"2026-07-11T04:01:30.9740223+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":" \tError Trace:\tD:/Dev/engram/.w/t007-r1-checker/internal/mcp/store_memory_compat_t007_test.go:83\n"} +{"Time":"2026-07-11T04:01:30.9740223+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":" \tError: \tShould be empty, but was true\n"} +{"Time":"2026-07-11T04:01:30.9740223+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":" \tTest: \tTestEC_F1_TagDerivedBackfill_T007\n"} +{"Time":"2026-07-11T04:01:30.9740223+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":" \tMessages: \tchecker guard: focused test must force flag off\n"} +{"Time":"2026-07-11T04:01:30.9740223+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":"--- FAIL: TestEC_F1_TagDerivedBackfill_T007 (0.00s)\n"} +{"Time":"2026-07-11T04:01:30.9740223+03:00","Action":"fail","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Elapsed":0} +{"Time":"2026-07-11T04:01:30.9740223+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Output":"FAIL\n"} +{"Time":"2026-07-11T04:01:30.9875233+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Output":"coverage: 0.0% of statements\n"} +{"Time":"2026-07-11T04:01:31.0079607+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Output":"FAIL\tgithub.com/thebtf/engram/internal/mcp\t0.117s\n"} +{"Time":"2026-07-11T04:01:31.0079607+03:00","Action":"fail","Package":"github.com/thebtf/engram/internal/mcp","Elapsed":0.124} diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/repeat-01/pg-stat-activity-after.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/repeat-01/pg-stat-activity-after.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/repeat-01/pg-stat-activity-after.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/repeat-01/pg-stat-activity-after.stdout.log new file mode 100644 index 00000000..fe51488c --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/repeat-01/pg-stat-activity-after.stdout.log @@ -0,0 +1 @@ +[] diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/repeat-01/pg-stat-activity-before.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/repeat-01/pg-stat-activity-before.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/repeat-01/pg-stat-activity-before.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/repeat-01/pg-stat-activity-before.stdout.log new file mode 100644 index 00000000..fe51488c --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/repeat-01/pg-stat-activity-before.stdout.log @@ -0,0 +1 @@ +[] diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/repeat-01/repeat-summary.json b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/repeat-01/repeat-summary.json new file mode 100644 index 00000000..dc3c1f8a --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/repeat-01/repeat-summary.json @@ -0,0 +1,36 @@ +{ + "repeat": 1, + "verdict": "FAIL", + "database": "engram_prc_rg_test_c987bdd5db898557_r1", + "schema": "public", + "database_schema_identity": "engram_prc_rg_test_c987bdd5db898557_r1.public", + "database_dsn": "REDACTED_DATABASE_DSN", + "database_create_confirmed": true, + "sequential_execution": { + "package_parallelism": 1, + "test_parallelism": 1 + }, + "race": false, + "connection_budget": 20, + "server_sessions_before": 6, + "server_sessions_after": 6, + "sessions_before": 0, + "sessions_after": 0, + "go_test_exit": 1, + "json_parser_exit": 1, + "coverage_policy": "Targeted", + "coverage_exit": 0, + "cleanup_exit": 0, + "cleanup_status": "PASS", + "required_session_start_execution": { + "schema_version": 1, + "verdict": "NOT_APPLICABLE", + "reason": "only an unfiltered canonical ./... run requires the 12-test session-start execution proof" + }, + "cleanup_summary": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-flag-reset-removed\\repeat-01\\cleanup\\cleanup.json", + "errors": [ + "go test failed with exit 1", + "go test JSON assertion failed with exit 1" + ], + "artifact_directory": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-flag-reset-removed\\repeat-01" +} diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/repeat-01/server-connection-count-after.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/repeat-01/server-connection-count-after.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/repeat-01/server-connection-count-after.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/repeat-01/server-connection-count-after.stdout.log new file mode 100644 index 00000000..1e8b3149 --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/repeat-01/server-connection-count-after.stdout.log @@ -0,0 +1 @@ +6 diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/repeat-01/server-connection-count-before.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/repeat-01/server-connection-count-before.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/repeat-01/server-connection-count-before.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/repeat-01/server-connection-count-before.stdout.log new file mode 100644 index 00000000..1e8b3149 --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/repeat-01/server-connection-count-before.stdout.log @@ -0,0 +1 @@ +6 diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/repeat-01/targeted-coverage.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/repeat-01/targeted-coverage.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/repeat-01/targeted-coverage.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/repeat-01/targeted-coverage.stdout.log new file mode 100644 index 00000000..d5de1ade --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/repeat-01/targeted-coverage.stdout.log @@ -0,0 +1,352 @@ +github.com/thebtf/engram/internal/mcp/audit_helpers.go:33: effectiveAuditWriter 0.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:44: isAuditEnabled 0.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:52: runAuditAsync 0.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:77: marshalState 0.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:92: logAuditCreate 0.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:117: logAuditEdit 0.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:142: logAuditDelete 0.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:166: logAuditGeneric 0.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:189: logAuditSupersede 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:30: parseArgs 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:46: coerceString 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:67: coerceInt 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:97: coerceInt64 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:127: coerceFloat64 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:151: coerceBool 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:177: coerceStringSlice 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:204: coerceInt64Slice 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:222: clampToInt 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:236: clampInt64ToInt 0.0% +github.com/thebtf/engram/internal/mcp/context.go:17: extractProjectFromHeader 0.0% +github.com/thebtf/engram/internal/mcp/context.go:22: contextWithProject 0.0% +github.com/thebtf/engram/internal/mcp/context.go:29: ContextWithProject 0.0% +github.com/thebtf/engram/internal/mcp/context.go:35: projectFromContext 0.0% +github.com/thebtf/engram/internal/mcp/context.go:41: contextWithSession 0.0% +github.com/thebtf/engram/internal/mcp/context.go:48: ContextWithSession 0.0% +github.com/thebtf/engram/internal/mcp/context.go:54: sessionFromContext 0.0% +github.com/thebtf/engram/internal/mcp/context.go:61: actorFromContext 0.0% +github.com/thebtf/engram/internal/mcp/health.go:22: NewMCPHealth 0.0% +github.com/thebtf/engram/internal/mcp/health.go:29: RecordRequest 0.0% +github.com/thebtf/engram/internal/mcp/health.go:36: RecordError 0.0% +github.com/thebtf/engram/internal/mcp/health.go:42: rotateWindowIfNeeded 0.0% +github.com/thebtf/engram/internal/mcp/health.go:55: HandleHealth 0.0% +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:28: ruleGovernanceCaptureEnabled 0.0% +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:39: captureActiveRuleIntent 0.0% +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:104: ruleIntentFingerprint 0.0% +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:113: marshalRuleCandidateIntentResponse 0.0% +github.com/thebtf/engram/internal/mcp/server.go:127: NewServer 0.0% +github.com/thebtf/engram/internal/mcp/server.go:141: SetBackfillStatusFunc 0.0% +github.com/thebtf/engram/internal/mcp/server.go:146: SetVersionedDocumentStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:151: SetIssueStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:156: SetMemoryStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:161: SetMetaMemoryIndex 0.0% +github.com/thebtf/engram/internal/mcp/server.go:166: SetHintQueue 0.0% +github.com/thebtf/engram/internal/mcp/server.go:171: SetStateStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:176: SetDirectiveCaptureService 0.0% +github.com/thebtf/engram/internal/mcp/server.go:181: SetBehavioralRulesStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:186: SetRuleGovernanceStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:191: SetRuleInjectionTelemetryStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:195: SetPromotionStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:199: SetGraphStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:204: SetNodesStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:211: SetAuditStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:216: SetPurgeStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:222: SetCandidateStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:228: SetSnapshotStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:234: SetBulkFacade 0.0% +github.com/thebtf/engram/internal/mcp/server.go:240: setTestAuditWriter 0.0% +github.com/thebtf/engram/internal/mcp/server.go:246: setTestMemoryEditor 0.0% +github.com/thebtf/engram/internal/mcp/server.go:252: setTestMemorySignificanceUpdater 0.0% +github.com/thebtf/engram/internal/mcp/server.go:260: SetWriteLintOrchestrator 0.0% +github.com/thebtf/engram/internal/mcp/server.go:269: SetRedactionRules 0.0% +github.com/thebtf/engram/internal/mcp/server.go:274: SetEmbeddingStores 0.0% +github.com/thebtf/engram/internal/mcp/server.go:282: SetRerankClient 0.0% +github.com/thebtf/engram/internal/mcp/server.go:290: SetStatsDB 0.0% +github.com/thebtf/engram/internal/mcp/server.go:297: HandleRequest 0.0% +github.com/thebtf/engram/internal/mcp/server.go:303: ListTools 0.0% +github.com/thebtf/engram/internal/mcp/server.go:332: Version 0.0% +github.com/thebtf/engram/internal/mcp/server.go:383: Run 0.0% +github.com/thebtf/engram/internal/mcp/server.go:427: handleRequest 0.0% +github.com/thebtf/engram/internal/mcp/server.go:461: handleNotification 0.0% +github.com/thebtf/engram/internal/mcp/server.go:473: handleInitialize 0.0% +github.com/thebtf/engram/internal/mcp/server.go:496: buildInstructions 0.0% +github.com/thebtf/engram/internal/mcp/server.go:660: storeMemoryTool 0.0% +github.com/thebtf/engram/internal/mcp/server.go:712: recallMemoryTool 0.0% +github.com/thebtf/engram/internal/mcp/server.go:805: primaryTools 0.0% +github.com/thebtf/engram/internal/mcp/server.go:942: handleToolsList 0.0% +github.com/thebtf/engram/internal/mcp/server.go:1612: handleToolsCall 0.0% +github.com/thebtf/engram/internal/mcp/server.go:1644: sanitizeToolCallArgs 0.0% +github.com/thebtf/engram/internal/mcp/server.go:1656: callTool 0.0% +github.com/thebtf/engram/internal/mcp/server.go:1874: sendResponse 0.0% +github.com/thebtf/engram/internal/mcp/server.go:1884: sendError 0.0% +github.com/thebtf/engram/internal/mcp/server.go:1896: handleFindSimilarObservations 0.0% +github.com/thebtf/engram/internal/mcp/server.go:1927: handleGetMemoryStats 0.0% +github.com/thebtf/engram/internal/mcp/server.go:2055: handleBackfillStatus 0.0% +github.com/thebtf/engram/internal/mcp/server.go:2071: handleCheckSystemHealth 0.0% +github.com/thebtf/engram/internal/mcp/server.go:2216: handleAnalyzeSearchPatterns 0.0% +github.com/thebtf/engram/internal/mcp/server.go:2246: handleSearchSessions 0.0% +github.com/thebtf/engram/internal/mcp/server.go:2251: handleListSessions 0.0% +github.com/thebtf/engram/internal/mcp/tools_admin.go:18: buildAdminTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_admin.go:68: adminActionsForEnv 33.3% +github.com/thebtf/engram/internal/mcp/tools_admin.go:80: vnextEnabled 0.0% +github.com/thebtf/engram/internal/mcp/tools_admin.go:84: handleAdmin 0.0% +github.com/thebtf/engram/internal/mcp/tools_admin.go:120: handlePurgeProject 0.0% +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:27: ambientHintsEnabledFromEnv 0.0% +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:32: ambientHintsTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:48: handleGetAmbientHints 0.0% +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:86: normalizeAmbientHintsToolLimit 0.0% +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:96: ambientHintItems 0.0% +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:114: errMissingSessionID 0.0% +github.com/thebtf/engram/internal/mcp/tools_brief.go:31: handleGetMemoryBrief 0.0% +github.com/thebtf/engram/internal/mcp/tools_brief.go:107: memoryBriefUsesPrincipalScope 0.0% +github.com/thebtf/engram/internal/mcp/tools_brief.go:115: handlePrincipalMemoryBrief 0.0% +github.com/thebtf/engram/internal/mcp/tools_brief.go:259: truncateBriefContent 0.0% +github.com/thebtf/engram/internal/mcp/tools_brief.go:270: filterInjectionByScope 0.0% +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:25: bulkOpsTools 0.0% +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:95: handleBulkPromote 0.0% +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:154: handleBulkDelete 0.0% +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:211: handleBulkSupersede 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:31: candidateItemFromDomain 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:51: newCandidateReviewSnapshot 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:59: requireCandidateReviewSnapshot 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:68: candidateTools 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:165: handleListCandidates 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:208: handleGetCandidate 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:239: handlePromoteCandidate 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:348: handleRejectCandidate 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:402: handleSupersedeCandidate 0.0% +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:34: codeIntelEnabled 0.0% +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:42: SetCodeChunkStore 0.0% +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:48: codebaseSearchTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:79: codebaseStatusTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:100: handleCodebaseSearch 0.0% +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:194: handleCodebaseStatus 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:21: getVault 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:35: credentialStore 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:49: handleStoreCredential 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:130: handleGetCredential 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:192: handleListCredentials 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:243: handleDeleteCredential 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:302: handleVaultStatus 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:338: expandTagHierarchy 0.0% +github.com/thebtf/engram/internal/mcp/tools_directives.go:16: directivesCaptureEnabledFromEnv 0.0% +github.com/thebtf/engram/internal/mcp/tools_directives.go:20: rememberDirectiveTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_directives.go:38: currentDirectiveCaptureService 0.0% +github.com/thebtf/engram/internal/mcp/tools_directives.go:48: handleRememberDirective 0.0% +github.com/thebtf/engram/internal/mcp/tools_directives.go:72: parseRememberDirectiveArgs 0.0% +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:10: handleDocsConsolidated 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents.go:15: handleListCollections 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents.go:61: handleListDocuments 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents.go:121: handleGetDocument 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents.go:165: handleRemoveDocument 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents.go:197: handleIngestDocument 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents.go:235: handleSearchCollection 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:15: handleDocCreate 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:61: handleDocRead 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:117: handleDocUpdate 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:122: handleDocList 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:175: handleDocHistory 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:232: handleDocComment 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:19: SetExperienceProvider 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:23: experienceHistoryTools 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:40: experienceHistoryReadSchema 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:65: experienceHistoryDetailSchema 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:82: experienceHistoryTriggerEnum 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:91: handleExperienceHistoryRead 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:103: handleExperienceHistoryDetail 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:115: parseExperienceHistoryReadArgs 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:142: parseExperienceHistoryDetailArgs 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:157: experienceHistoryTriggersFromArgs 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:180: marshalExperienceHistory 0.0% +github.com/thebtf/engram/internal/mcp/tools_feedback.go:12: handleFeedbackConsolidated 0.0% +github.com/thebtf/engram/internal/mcp/tools_feedback.go:36: handleSetSessionOutcome 0.0% +github.com/thebtf/engram/internal/mcp/tools_governance.go:27: governanceTools 0.0% +github.com/thebtf/engram/internal/mcp/tools_governance.go:98: handleListSnapshots 0.0% +github.com/thebtf/engram/internal/mcp/tools_governance.go:167: handleRollbackSnapshot 0.0% +github.com/thebtf/engram/internal/mcp/tools_governance.go:215: handlePinSnapshot 0.0% +github.com/thebtf/engram/internal/mcp/tools_governance.go:258: handleRedactionRulesStatus 0.0% +github.com/thebtf/engram/internal/mcp/tools_governance.go:284: resolveGovernanceActor 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:64: handleGraph 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:100: graphAddEdge 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:216: mcpGraphEndpointExists 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:243: mcpGraphEdgeAlreadyExists 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:276: graphAddNode 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:317: graphRemoveEdge 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:332: graphGetEdges 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:397: filterEdgesByNodeType 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:457: graphTraverse 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:480: graphFindPath 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:502: graphSynonyms 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:23: graphCreateEdgeWithGuards 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:80: graphEndpointExistsWithGuards 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:114: graphDuplicateEdgeExists 0.0% +github.com/thebtf/engram/internal/mcp/tools_ingest.go:25: handleIngest 0.0% +github.com/thebtf/engram/internal/mcp/tools_ingest.go:43: ingestDocument 0.0% +github.com/thebtf/engram/internal/mcp/tools_instincts.go:20: handleImportInstincts 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:19: issuesToolSchema 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:109: validateIssueActionParams 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:143: handleIssues 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:189: resolveSourceProject 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:205: handleIssueCreate 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:250: handleIssueList 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:311: handleIssueGet 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:344: handleIssueUpdate 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:382: handleIssueComment 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:408: handleIssueReopen 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:425: handleIssueClose 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:22: handleLifecycle 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:48: lifecycleInfo 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:87: lifecyclePromote 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:118: lifecycleDemote 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:149: lifecycleSetConfidence 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:172: lifecycleSetDefeasibility 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:191: lifecycleSleepStatus 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:197: lifecycleDecayPreview 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:233: marshalJSON 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:35: vnextFEnabled 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:42: isValidPrivacyScope 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:54: derivePrivacyScopeFromLegacy 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:82: deriveLegacyScopeFromPrivacy 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:93: applyPrincipalMemoryMetadata 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:135: addPrincipalMemoryFields 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:161: newScopedWriteLintMemoryStore 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:172: writeLintVisibilityCaller 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:186: writeLintVisibilityOptions 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:192: scopedWriteLintMemoryStore 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:202: filterVisibleWriteGateCandidates 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:214: domainManageAllowed 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:218: List 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:272: writeLintVisibilityFetchLimit 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:286: Get 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:297: Create 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:301: Update 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:305: MarkSuperseded 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:319: effectiveMemoryEditor 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:329: isValidStoreObservationType 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:354: handleStoreMemory 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1111: handleEditMemory 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1218: computeTTLDays 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1258: truncateTitle 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1270: keepRecallMemory 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1280: keepRecallMemoryFilters 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1342: handleRecallMemory 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1690: staleAdvisory 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1700: marshalWithStaleAdvisory 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1727: Rank 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1751: handleRecallMemoryHybrid 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:2252: handleRateMemory 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:2281: handleSuppressMemory 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:17: SetDomainRegistryService 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:21: checkDomainWriteMCP 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:43: addDomainWriteDecisionFields 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:51: marshalStoreMemoryAugmented 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:26: newMemoryStoreSignificanceUpdater 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:33: s6OutcomeEnabledFromEnv 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:37: effectiveMemorySignificanceUpdater 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:47: currentMemorySignificanceUpdater 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:58: rateMemorySignificanceTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:74: handleRateMemorySignificance 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:109: RateMemorySignificance 0.0% +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:18: s2MetaMemoryEnabled 0.0% +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:22: knowAboutTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:39: handleKnowAbout 0.0% +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:104: parseKnowAboutLimit 0.0% +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:118: summarizeMetaIndexTags 0.0% +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:153: summarizeMetaIndexDateRange 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:23: SetPrincipalMemoryQueryService 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:27: principalMemoryQueryTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:52: handleQueryPrincipalMemory 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:134: principalMemoryQueryCaller 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:149: parsePrincipalMemoryQueryLimit 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:160: principalMemoryQueryText 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:167: parsePrincipalMemoryQueryVisibility 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:179: parsePrincipalMemoryQueryOffset 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:190: parsePrincipalMemoryQueryInt 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:215: parsePrincipalMemoryQueryBool 0.0% +github.com/thebtf/engram/internal/mcp/tools_recall.go:28: handleRecall 0.0% +github.com/thebtf/engram/internal/mcp/tools_recall.go:125: parseRecallIncludedPrincipals 0.0% +github.com/thebtf/engram/internal/mcp/tools_recall.go:165: appendRecallIncludedPrincipalMemories 0.0% +github.com/thebtf/engram/internal/mcp/tools_recall.go:223: recallIncludeTargetMatchesCaller 0.0% +github.com/thebtf/engram/internal/mcp/tools_recall.go:231: recallPrincipalQueryItemToMemory 0.0% +github.com/thebtf/engram/internal/mcp/tools_recall.go:247: handleRecallSearch 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:20: currentReviewLoopCandidateLister 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:30: reviewLoopCandidateTools 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:65: reviewLoopReadSchema 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:78: reviewPacketIDSchema 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:91: handleReviewMetricsRead 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:110: handleReviewQueueRead 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:140: handleReviewPacketDetail 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:151: handleReviewPacketPreviewAction 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:167: handleReviewPacketApplyAction 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:189: parseReviewLoopReadArgs 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:212: reviewLoopMCPPacketTypeSupported 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:217: reviewLoopActionFromArgs 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:225: reviewLoopReasonFromArgs 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:233: loadReviewPacketCandidate 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:256: applyReviewPacketPreserve 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:278: applyReviewPacketSuppress 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:296: reviewLoopMemoryFromCandidate 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:320: filterRiskyMCPReviewCandidates 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:330: marshalReviewLoop 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:17: ruleGovernanceReadTools 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:126: handleRuleGovernanceHealth 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:176: handleRuleGovernanceQueue 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:233: handleRuleGovernanceSnapshots 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:278: handleRuleGovernanceUsefulness 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:338: handleRuleGovernanceTransition 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:373: handleRuleGovernancePinSnapshot 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:406: handleRuleGovernanceRollback 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:483: requireRuleGovernanceReadAccess 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:495: requireRuleGovernanceProjectOrAdmin 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:505: ruleGovernanceCallerIsAdmin 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:510: requireRuleGovernanceAdminAccess 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:518: redactRuleGovernanceEvidenceHandles 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:535: redactRuleGovernanceEvidenceHandle 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:553: ruleGovernanceEvidenceHandleHasSensitiveText 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:559: isCanonicalRuleGovernanceEvidenceHandle 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:580: isSafeRuleGovernanceEvidenceID 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:594: parseRuleGovernanceTransitionRequest 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:604: parseRuleGovernanceSince 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:623: boundedRuleGovernanceLimit 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:634: formatRuleGovernanceTime 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:641: formatRuleGovernanceTimePtr 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:649: stringRuleCandidateStatusCounts 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:657: stringRuleVersionStateCounts 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:665: stringRuleArbiterRunStatusCounts 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:673: stringRuleInjectionEventTypeCounts 0.0% +github.com/thebtf/engram/internal/mcp/tools_rules.go:17: handleStoreRule 0.0% +github.com/thebtf/engram/internal/mcp/tools_rules.go:133: handleListRules 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:22: handleSettingsConsolidated 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:51: SetSettingsStore 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:57: settingsStore 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:67: isSecretSettingKey 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:74: requireAdmin 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:85: handleSetSetting 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:145: handleGetSetting 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:181: handleListSettings 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:216: handleDeleteSetting 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:35: resumeScopesFromFields 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:52: stateTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:82: setStateTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:142: handleGetState 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:219: handleSetState 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:274: decodeSessionStateForWrite 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:292: validateSessionStateBudget 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:303: validateNativeResumePacket 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:349: decodeProjectStateForWrite 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:364: requireStateObject 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:383: requireNestedObject 0.0% +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:10: handleStoreConsolidated 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:21: SetTemporalTruthProvider 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:25: temporalTruthEnabledFromEnv 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:30: temporalTruthTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:39: temporalTruthRefreshTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:48: temporalTruthRefreshSchema 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:58: temporalTruthSchema 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:72: currentTemporalTruthProvider 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:82: handleTemporalTruth 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:102: handleTemporalTruthRefresh 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:122: parseTemporalTruthArgs 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:151: parseTemporalTruthRefreshProject 0.0% +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:10: handleVaultConsolidated 0.0% +total: (statements) 0.0% diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/summary.json b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/summary.json new file mode 100644 index 00000000..3e119d7c --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-flag-reset-removed/summary.json @@ -0,0 +1,67 @@ +{ + "schema_version": 1, + "gate": "release-gates-foundation", + "run_id": "challenge-flag-reset-removed", + "started_at": "2026-07-11T01:01:25.3022054+00:00", + "finished_at": "2026-07-11T01:01:36.2309200+00:00", + "duration_seconds": 10.929, + "verdict": "FAIL", + "counts": { + "requested_repeats": 1, + "completed_repeats": 1, + "passed_repeats": 0, + "failed_repeats": 1, + "child_commands": 16, + "nonzero_child_commands": 2 + }, + "packages": [ + "./internal/mcp" + ], + "run_pattern": "^TestEC_F1_TagDerivedBackfill_T007$", + "coverage_policy": "Targeted", + "connection_budget": 20, + "race": false, + "database_dsn": "REDACTED_DATABASE_DSN", + "environment": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-flag-reset-removed\\environment.json", + "commands": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-flag-reset-removed\\commands.json", + "repeats": [ + { + "repeat": 1, + "verdict": "FAIL", + "database": "engram_prc_rg_test_c987bdd5db898557_r1", + "schema": "public", + "database_schema_identity": "engram_prc_rg_test_c987bdd5db898557_r1.public", + "database_dsn": "REDACTED_DATABASE_DSN", + "database_create_confirmed": true, + "sequential_execution": { + "package_parallelism": 1, + "test_parallelism": 1 + }, + "race": false, + "connection_budget": 20, + "server_sessions_before": 6, + "server_sessions_after": 6, + "sessions_before": 0, + "sessions_after": 0, + "go_test_exit": 1, + "json_parser_exit": 1, + "coverage_policy": "Targeted", + "coverage_exit": 0, + "cleanup_exit": 0, + "cleanup_status": "PASS", + "required_session_start_execution": { + "schema_version": 1, + "verdict": "NOT_APPLICABLE", + "reason": "only an unfiltered canonical ./... run requires the 12-test session-start execution proof" + }, + "cleanup_summary": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-flag-reset-removed\\repeat-01\\cleanup\\cleanup.json", + "errors": [ + "go test failed with exit 1", + "go test JSON assertion failed with exit 1" + ], + "artifact_directory": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-flag-reset-removed\\repeat-01" + } + ], + "errors": [], + "artifact_directory": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-flag-reset-removed" +} diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/commands.json b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/commands.json new file mode 100644 index 00000000..bd0984d8 --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/commands.json @@ -0,0 +1,444 @@ +[ + { + "name": "go-version", + "executable": "C:\\Program Files\\Go\\bin\\go.exe", + "arguments": [ + "version" + ], + "environment_keys": [], + "command": "C:\\Program Files\\Go\\bin\\go.exe version", + "started_at": "2026-07-11T00:59:13.7161173+00:00", + "finished_at": "2026-07-11T00:59:13.9191994+00:00", + "duration_seconds": 0.203, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-raw-sql-proof\\go-version.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-raw-sql-proof\\go-version.stderr.log" + }, + { + "name": "postgres-container-identity", + "executable": "docker", + "arguments": [ + "inspect", + "--format", + "{{.Name}}|{{.Config.Image}}|{{.Image}}|{{.State.Running}}", + "engram-prc-postgres" + ], + "environment_keys": [], + "command": "docker inspect --format {{.Name}}|{{.Config.Image}}|{{.Image}}|{{.State.Running}} engram-prc-postgres", + "started_at": "2026-07-11T00:59:13.9734723+00:00", + "finished_at": "2026-07-11T00:59:14.2289813+00:00", + "duration_seconds": 0.256, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-raw-sql-proof\\postgres-container-identity.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-raw-sql-proof\\postgres-container-identity.stderr.log" + }, + { + "name": "postgres-server-identity", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT json_build_object('server_version', current_setting('server_version'), 'server_version_num', current_setting('server_version_num'), 'version', version(), 'max_connections', current_setting('max_connections'), 'superuser_reserved_connections', current_setting('superuser_reserved_connections'), 'reserved_connections', COALESCE(NULLIF(current_setting('reserved_connections', true), ''), '0'), 'current_connections', (SELECT count(*)::text FROM pg_stat_activity), 'database', current_database(), 'schema', current_schema(), 'user', current_user)::text;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT json_build_object('server_version', current_setting('server_version'), 'server_version_num', current_setting('server_version_num'), 'version', version(), 'max_connections', current_setting('max_connections'), 'superuser_reserved_connections', current_setting('superuser_reserved_connections'), 'reserved_connections', COALESCE(NULLIF(current_setting('reserved_connections', true), ''), '0'), 'current_connections', (SELECT count(*)::text FROM pg_stat_activity), 'database', current_database(), 'schema', current_schema(), 'user', current_user)::text;", + "started_at": "2026-07-11T00:59:14.2402555+00:00", + "finished_at": "2026-07-11T00:59:14.6930613+00:00", + "duration_seconds": 0.453, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-raw-sql-proof\\postgres-server-identity.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-raw-sql-proof\\postgres-server-identity.stderr.log" + }, + { + "name": "repeat-1-create-database", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "CREATE DATABASE \"engram_prc_rg_test_3ce6312b91ffa9ad_r1\" OWNER \"engram\";" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c CREATE DATABASE \"engram_prc_rg_test_3ce6312b91ffa9ad_r1\" OWNER \"engram\";", + "started_at": "2026-07-11T00:59:14.7276551+00:00", + "finished_at": "2026-07-11T00:59:15.1178796+00:00", + "duration_seconds": 0.39, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-raw-sql-proof\\repeat-01\\create-database.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-raw-sql-proof\\repeat-01\\create-database.stderr.log" + }, + { + "name": "repeat-1-create-pgvector", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "engram_prc_rg_test_3ce6312b91ffa9ad_r1", + "-At", + "-F", + "|", + "-c", + "CREATE EXTENSION IF NOT EXISTS vector WITH SCHEMA public;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d engram_prc_rg_test_3ce6312b91ffa9ad_r1 -At -F | -c CREATE EXTENSION IF NOT EXISTS vector WITH SCHEMA public;", + "started_at": "2026-07-11T00:59:15.1223962+00:00", + "finished_at": "2026-07-11T00:59:15.4911723+00:00", + "duration_seconds": 0.369, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-raw-sql-proof\\repeat-01\\create-pgvector.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-raw-sql-proof\\repeat-01\\create-pgvector.stderr.log" + }, + { + "name": "repeat-1-database-identity", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "engram_prc_rg_test_3ce6312b91ffa9ad_r1", + "-At", + "-F", + "|", + "-c", + "SELECT json_build_object('database', current_database(), 'schema', current_schema(), 'server_version', current_setting('server_version'), 'user', current_user)::text;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d engram_prc_rg_test_3ce6312b91ffa9ad_r1 -At -F | -c SELECT json_build_object('database', current_database(), 'schema', current_schema(), 'server_version', current_setting('server_version'), 'user', current_user)::text;", + "started_at": "2026-07-11T00:59:15.4934353+00:00", + "finished_at": "2026-07-11T00:59:15.8869247+00:00", + "duration_seconds": 0.393, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-raw-sql-proof\\repeat-01\\database-identity.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-raw-sql-proof\\repeat-01\\database-identity.stderr.log" + }, + { + "name": "repeat-1-pg-stat-before", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT COALESCE(json_agg(row_to_json(s)), '[]'::json)::text FROM (SELECT pid, usename, datname, state, backend_type, application_name, client_addr::text AS client_addr, wait_event_type, wait_event, query_start FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_3ce6312b91ffa9ad_r1' ORDER BY pid) AS s;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT COALESCE(json_agg(row_to_json(s)), '[]'::json)::text FROM (SELECT pid, usename, datname, state, backend_type, application_name, client_addr::text AS client_addr, wait_event_type, wait_event, query_start FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_3ce6312b91ffa9ad_r1' ORDER BY pid) AS s;", + "started_at": "2026-07-11T00:59:15.8919677+00:00", + "finished_at": "2026-07-11T00:59:16.2805555+00:00", + "duration_seconds": 0.389, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-raw-sql-proof\\repeat-01\\pg-stat-activity-before.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-raw-sql-proof\\repeat-01\\pg-stat-activity-before.stderr.log" + }, + { + "name": "repeat-1-server-connection-count-before", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT count(*) FROM pg_stat_activity;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT count(*) FROM pg_stat_activity;", + "started_at": "2026-07-11T00:59:16.2830498+00:00", + "finished_at": "2026-07-11T00:59:16.7760070+00:00", + "duration_seconds": 0.493, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-raw-sql-proof\\repeat-01\\server-connection-count-before.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-raw-sql-proof\\repeat-01\\server-connection-count-before.stderr.log" + }, + { + "name": "repeat-1-connection-count-before", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT count(*) FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_3ce6312b91ffa9ad_r1';" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT count(*) FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_3ce6312b91ffa9ad_r1';", + "started_at": "2026-07-11T00:59:16.7869458+00:00", + "finished_at": "2026-07-11T00:59:17.1844556+00:00", + "duration_seconds": 0.398, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-raw-sql-proof\\repeat-01\\connection-count-before.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-raw-sql-proof\\repeat-01\\connection-count-before.stderr.log" + }, + { + "name": "repeat-1-go-test", + "executable": "C:\\Program Files\\Go\\bin\\go.exe", + "arguments": [ + "test", + "-json", + "-p", + "1", + "-parallel", + "1", + "-count=1", + "-timeout", + "30m", + "-covermode=atomic", + "-coverprofile=.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-raw-sql-proof\\repeat-01\\coverage.out", + "-run", + "^TestEC_F1_TagDerivedBackfill_T007$", + "./internal/mcp" + ], + "environment_keys": [ + "DATABASE_DSN", + "DATABASE_MAX_CONNS", + "ENGRAM_RELEASE_GATE_REPEAT", + "ENGRAM_RELEASE_GATE_RUN_ID", + "ENGRAM_TEST_DSN", + "TEST_DATABASE_DSN" + ], + "command": "C:\\Program Files\\Go\\bin\\go.exe test -json -p 1 -parallel 1 -count=1 -timeout 30m -covermode=atomic -coverprofile=.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-raw-sql-proof\\repeat-01\\coverage.out -run ^TestEC_F1_TagDerivedBackfill_T007$ ./internal/mcp", + "started_at": "2026-07-11T00:59:17.1912635+00:00", + "finished_at": "2026-07-11T00:59:24.3503515+00:00", + "duration_seconds": 7.159, + "exit_code": 1, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-raw-sql-proof\\repeat-01\\go-test.stdout.jsonl", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-raw-sql-proof\\repeat-01\\go-test.stderr.log" + }, + { + "name": "repeat-1-assert-go-test-json", + "executable": "C:\\Program Files\\PowerShell\\7\\pwsh.exe", + "arguments": [ + "-NoProfile", + "-File", + "D:\\Dev\\engram\\.w\\t007-r1-checker\\scripts\\production-gates\\assert-go-test-json.ps1", + "-InputPath", + ".agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-raw-sql-proof\\repeat-01\\go-test.stdout.jsonl", + "-SummaryPath", + ".agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-raw-sql-proof\\repeat-01\\go-test-summary.json", + "-FailOnUnexpectedSkip" + ], + "environment_keys": [], + "command": "C:\\Program Files\\PowerShell\\7\\pwsh.exe -NoProfile -File D:\\Dev\\engram\\.w\\t007-r1-checker\\scripts\\production-gates\\assert-go-test-json.ps1 -InputPath .agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-raw-sql-proof\\repeat-01\\go-test.stdout.jsonl -SummaryPath .agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-raw-sql-proof\\repeat-01\\go-test-summary.json -FailOnUnexpectedSkip", + "started_at": "2026-07-11T00:59:24.3547238+00:00", + "finished_at": "2026-07-11T00:59:25.0707540+00:00", + "duration_seconds": 0.716, + "exit_code": 1, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-raw-sql-proof\\repeat-01\\assert-go-test-json.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-raw-sql-proof\\repeat-01\\assert-go-test-json.stderr.log" + }, + { + "name": "repeat-1-targeted-coverage-report", + "executable": "C:\\Program Files\\Go\\bin\\go.exe", + "arguments": [ + "tool", + "cover", + "-func=.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-raw-sql-proof\\repeat-01\\coverage.out" + ], + "environment_keys": [], + "command": "C:\\Program Files\\Go\\bin\\go.exe tool cover -func=.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-raw-sql-proof\\repeat-01\\coverage.out", + "started_at": "2026-07-11T00:59:25.0765196+00:00", + "finished_at": "2026-07-11T00:59:25.5464079+00:00", + "duration_seconds": 0.47, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-raw-sql-proof\\repeat-01\\targeted-coverage.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-raw-sql-proof\\repeat-01\\targeted-coverage.stderr.log" + }, + { + "name": "repeat-1-pg-stat-after", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT COALESCE(json_agg(row_to_json(s)), '[]'::json)::text FROM (SELECT pid, usename, datname, state, backend_type, application_name, client_addr::text AS client_addr, wait_event_type, wait_event, query_start FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_3ce6312b91ffa9ad_r1' ORDER BY pid) AS s;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT COALESCE(json_agg(row_to_json(s)), '[]'::json)::text FROM (SELECT pid, usename, datname, state, backend_type, application_name, client_addr::text AS client_addr, wait_event_type, wait_event, query_start FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_3ce6312b91ffa9ad_r1' ORDER BY pid) AS s;", + "started_at": "2026-07-11T00:59:25.5473323+00:00", + "finished_at": "2026-07-11T00:59:26.0273510+00:00", + "duration_seconds": 0.48, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-raw-sql-proof\\repeat-01\\pg-stat-activity-after.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-raw-sql-proof\\repeat-01\\pg-stat-activity-after.stderr.log" + }, + { + "name": "repeat-1-server-connection-count-after", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT count(*) FROM pg_stat_activity;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT count(*) FROM pg_stat_activity;", + "started_at": "2026-07-11T00:59:26.0292792+00:00", + "finished_at": "2026-07-11T00:59:26.3840118+00:00", + "duration_seconds": 0.355, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-raw-sql-proof\\repeat-01\\server-connection-count-after.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-raw-sql-proof\\repeat-01\\server-connection-count-after.stderr.log" + }, + { + "name": "repeat-1-connection-count-after", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT count(*) FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_3ce6312b91ffa9ad_r1';" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT count(*) FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_3ce6312b91ffa9ad_r1';", + "started_at": "2026-07-11T00:59:26.3864647+00:00", + "finished_at": "2026-07-11T00:59:26.7352748+00:00", + "duration_seconds": 0.349, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-raw-sql-proof\\repeat-01\\connection-count-after.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-raw-sql-proof\\repeat-01\\connection-count-after.stderr.log" + }, + { + "name": "repeat-1-cleanup", + "executable": "C:\\Program Files\\PowerShell\\7\\pwsh.exe", + "arguments": [ + "-NoProfile", + "-File", + "D:\\Dev\\engram\\.w\\t007-r1-checker\\scripts\\production-gates\\cleanup-db-sessions.ps1", + "-DatabaseName", + "engram_prc_rg_test_3ce6312b91ffa9ad_r1", + "-SchemaName", + "public", + "-ArtifactRoot", + ".agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-raw-sql-proof\\repeat-01", + "-RunId", + "challenge-raw-sql-proof-repeat-1", + "-PostgresContainer", + "engram-prc-postgres" + ], + "environment_keys": [ + "ENGRAM_TEST_ADMIN_DSN" + ], + "command": "C:\\Program Files\\PowerShell\\7\\pwsh.exe -NoProfile -File D:\\Dev\\engram\\.w\\t007-r1-checker\\scripts\\production-gates\\cleanup-db-sessions.ps1 -DatabaseName engram_prc_rg_test_3ce6312b91ffa9ad_r1 -SchemaName public -ArtifactRoot .agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-raw-sql-proof\\repeat-01 -RunId challenge-raw-sql-proof-repeat-1 -PostgresContainer engram-prc-postgres", + "started_at": "2026-07-11T00:59:26.7389312+00:00", + "finished_at": "2026-07-11T00:59:29.4058329+00:00", + "duration_seconds": 2.667, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-raw-sql-proof\\repeat-01\\cleanup-process.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-raw-sql-proof\\repeat-01\\cleanup-process.stderr.log" + } +] diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/environment.json b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/environment.json new file mode 100644 index 00000000..2fed35d4 --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/environment.json @@ -0,0 +1,52 @@ +{ + "schema_version": 1, + "run_id": "challenge-raw-sql-proof", + "timestamp": "2026-07-11T00:59:13.6976987+00:00", + "go_version": "go version go1.25.11 windows/amd64", + "postgres": { + "declared_image": "pgvector/pgvector:pg17", + "container": { + "name": "/engram-prc-postgres", + "configured_image": "pgvector/pgvector:pg17", + "image_id": "sha256:feb68f4f15446397d8cac7f4fe48fe4586de83160d1fc48b46283312d1a33966", + "running": true + }, + "server": { + "server_version": "17.10 (Debian 17.10-1.pgdg12+1)", + "server_version_num": "170010", + "version": "PostgreSQL 17.10 (Debian 17.10-1.pgdg12+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 12.2.0-14+deb12u1) 12.2.0, 64-bit", + "max_connections": "100", + "superuser_reserved_connections": "3", + "reserved_connections": "0", + "current_connections": "6", + "database": "postgres", + "schema": "public", + "user": "engram" + }, + "admin_dsn": "postgresql://engram:REDACTED@127.0.0.1:55432/postgres?sslmode=disable" + }, + "packages": [ + "./internal/mcp" + ], + "run_pattern": "^TestEC_F1_TagDerivedBackfill_T007$", + "repeat": 1, + "fail_on_unexpected_skip": true, + "allowed_skip_identities": [], + "coverage_policy": "Targeted", + "connection_budget": 20, + "race": false, + "require_session_start_execution": false, + "required_session_start_test_count": 12, + "sequential_execution": { + "go_package_parallelism": 1, + "go_test_parallelism": 1, + "database_max_connections": 20 + }, + "govulncheck_policy": { + "authoritative": [ + "source scan with tests", + "unstripped binary scan" + ], + "non_authoritative": "stripped binary scan (module-level fallback when symbols are absent)" + } +} diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/go-version.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/go-version.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/go-version.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/go-version.stdout.log new file mode 100644 index 00000000..a857be3f --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/go-version.stdout.log @@ -0,0 +1 @@ +go version go1.25.11 windows/amd64 diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/postgres-container-identity.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/postgres-container-identity.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/postgres-container-identity.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/postgres-container-identity.stdout.log new file mode 100644 index 00000000..c110d492 --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/postgres-container-identity.stdout.log @@ -0,0 +1 @@ +/engram-prc-postgres|pgvector/pgvector:pg17|sha256:feb68f4f15446397d8cac7f4fe48fe4586de83160d1fc48b46283312d1a33966|true diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/postgres-server-identity.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/postgres-server-identity.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/postgres-server-identity.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/postgres-server-identity.stdout.log new file mode 100644 index 00000000..2e33d56e --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/postgres-server-identity.stdout.log @@ -0,0 +1 @@ +{"server_version" : "17.10 (Debian 17.10-1.pgdg12+1)", "server_version_num" : "170010", "version" : "PostgreSQL 17.10 (Debian 17.10-1.pgdg12+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 12.2.0-14+deb12u1) 12.2.0, 64-bit", "max_connections" : "100", "superuser_reserved_connections" : "3", "reserved_connections" : "0", "current_connections" : "6", "database" : "postgres", "schema" : "public", "user" : "engram"} diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/repeat-01/assert-go-test-json.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/repeat-01/assert-go-test-json.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/repeat-01/assert-go-test-json.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/repeat-01/assert-go-test-json.stdout.log new file mode 100644 index 00000000..92c18e66 --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/repeat-01/assert-go-test-json.stdout.log @@ -0,0 +1,2 @@ +go test JSON verdict=FAIL packages=1 tests=1 passed=0 failed=1 skipped=0 unexpected_skips=0 malformed=0 +summary=D:\Dev\engram\.w\t007-r1-checker\.agent\reviews\t007-r1-fresh-checker\evidence\challenge-raw-sql-proof\repeat-01\go-test-summary.json diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/repeat-01/cleanup-process.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/repeat-01/cleanup-process.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/repeat-01/cleanup-process.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/repeat-01/cleanup-process.stdout.log new file mode 100644 index 00000000..a07f5f2d --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/repeat-01/cleanup-process.stdout.log @@ -0,0 +1,2 @@ +cleanup verdict=PASS database=engram_prc_rg_test_3ce6312b91ffa9ad_r1 schema=public terminated_sessions=0 remaining_database_count=0 +summary=D:\Dev\engram\.w\t007-r1-checker\.agent\reviews\t007-r1-fresh-checker\evidence\challenge-raw-sql-proof\repeat-01\cleanup\cleanup.json diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/repeat-01/cleanup/cleanup.json b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/repeat-01/cleanup/cleanup.json new file mode 100644 index 00000000..96455ceb --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/repeat-01/cleanup/cleanup.json @@ -0,0 +1,170 @@ +{ + "schema_version": 1, + "run_id": "challenge-raw-sql-proof-repeat-1", + "timestamp": "2026-07-11T00:59:29.3226094+00:00", + "verdict": "PASS", + "database": "engram_prc_rg_test_3ce6312b91ffa9ad_r1", + "schema": "public", + "database_schema_identity": "engram_prc_rg_test_3ce6312b91ffa9ad_r1.public", + "admin_dsn": "postgresql://engram:REDACTED@127.0.0.1:55432/postgres?sslmode=disable", + "postgres_container": "engram-prc-postgres", + "cleanup_status": "PASS", + "cleanup_attempted": true, + "database_existed_before": true, + "absence_verified": true, + "terminated_sessions": 0, + "remaining_database_count": 0, + "commands": [ + { + "name": "database-exists-before-cleanup", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT count(*) FROM pg_database WHERE datname = 'engram_prc_rg_test_3ce6312b91ffa9ad_r1';" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT count(*) FROM pg_database WHERE datname = 'engram_prc_rg_test_3ce6312b91ffa9ad_r1';", + "started_at": "2026-07-11T00:59:27.2760206+00:00", + "finished_at": "2026-07-11T00:59:27.6612144+00:00", + "duration_seconds": 0.385, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-raw-sql-proof\\repeat-01\\cleanup\\database-exists-before.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-raw-sql-proof\\repeat-01\\cleanup\\database-exists-before.stderr.log" + }, + { + "name": "pg-stat-activity-before-cleanup", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT COALESCE(json_agg(row_to_json(s)), '[]'::json)::text FROM (SELECT pid, usename, datname, state, backend_type, application_name, client_addr::text AS client_addr, wait_event_type, wait_event, query_start FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_3ce6312b91ffa9ad_r1' ORDER BY pid) AS s;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT COALESCE(json_agg(row_to_json(s)), '[]'::json)::text FROM (SELECT pid, usename, datname, state, backend_type, application_name, client_addr::text AS client_addr, wait_event_type, wait_event, query_start FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_3ce6312b91ffa9ad_r1' ORDER BY pid) AS s;", + "started_at": "2026-07-11T00:59:27.7259988+00:00", + "finished_at": "2026-07-11T00:59:28.1034833+00:00", + "duration_seconds": 0.377, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-raw-sql-proof\\repeat-01\\cleanup\\pg-stat-activity-before.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-raw-sql-proof\\repeat-01\\cleanup\\pg-stat-activity-before.stderr.log" + }, + { + "name": "terminate-database-sessions", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT COALESCE(json_agg(row_to_json(s)), '[]'::json)::text FROM (SELECT pid, pg_terminate_backend(pid) AS terminated FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_3ce6312b91ffa9ad_r1' AND pid <> pg_backend_pid() ORDER BY pid) AS s;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT COALESCE(json_agg(row_to_json(s)), '[]'::json)::text FROM (SELECT pid, pg_terminate_backend(pid) AS terminated FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_3ce6312b91ffa9ad_r1' AND pid <> pg_backend_pid() ORDER BY pid) AS s;", + "started_at": "2026-07-11T00:59:28.1080975+00:00", + "finished_at": "2026-07-11T00:59:28.5477358+00:00", + "duration_seconds": 0.44, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-raw-sql-proof\\repeat-01\\cleanup\\terminate-sessions.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-raw-sql-proof\\repeat-01\\cleanup\\terminate-sessions.stderr.log" + }, + { + "name": "drop-fresh-database", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "DROP DATABASE IF EXISTS \"engram_prc_rg_test_3ce6312b91ffa9ad_r1\" WITH (FORCE);" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c DROP DATABASE IF EXISTS \"engram_prc_rg_test_3ce6312b91ffa9ad_r1\" WITH (FORCE);", + "started_at": "2026-07-11T00:59:28.5546997+00:00", + "finished_at": "2026-07-11T00:59:28.9675840+00:00", + "duration_seconds": 0.413, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-raw-sql-proof\\repeat-01\\cleanup\\drop-database.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-raw-sql-proof\\repeat-01\\cleanup\\drop-database.stderr.log" + }, + { + "name": "verify-database-absent", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT count(*) FROM pg_database WHERE datname = 'engram_prc_rg_test_3ce6312b91ffa9ad_r1';" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT count(*) FROM pg_database WHERE datname = 'engram_prc_rg_test_3ce6312b91ffa9ad_r1';", + "started_at": "2026-07-11T00:59:28.9709342+00:00", + "finished_at": "2026-07-11T00:59:29.3147040+00:00", + "duration_seconds": 0.344, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-raw-sql-proof\\repeat-01\\cleanup\\verify-database-absent.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-raw-sql-proof\\repeat-01\\cleanup\\verify-database-absent.stderr.log" + } + ], + "errors": [] +} diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/repeat-01/cleanup/database-exists-before.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/repeat-01/cleanup/database-exists-before.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/repeat-01/cleanup/database-exists-before.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/repeat-01/cleanup/database-exists-before.stdout.log new file mode 100644 index 00000000..d00491fd --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/repeat-01/cleanup/database-exists-before.stdout.log @@ -0,0 +1 @@ +1 diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/repeat-01/cleanup/drop-database.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/repeat-01/cleanup/drop-database.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/repeat-01/cleanup/drop-database.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/repeat-01/cleanup/drop-database.stdout.log new file mode 100644 index 00000000..ca12dce0 --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/repeat-01/cleanup/drop-database.stdout.log @@ -0,0 +1 @@ +DROP DATABASE diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/repeat-01/cleanup/pg-stat-activity-before.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/repeat-01/cleanup/pg-stat-activity-before.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/repeat-01/cleanup/pg-stat-activity-before.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/repeat-01/cleanup/pg-stat-activity-before.stdout.log new file mode 100644 index 00000000..fe51488c --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/repeat-01/cleanup/pg-stat-activity-before.stdout.log @@ -0,0 +1 @@ +[] diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/repeat-01/cleanup/terminate-sessions.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/repeat-01/cleanup/terminate-sessions.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/repeat-01/cleanup/terminate-sessions.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/repeat-01/cleanup/terminate-sessions.stdout.log new file mode 100644 index 00000000..fe51488c --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/repeat-01/cleanup/terminate-sessions.stdout.log @@ -0,0 +1 @@ +[] diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/repeat-01/cleanup/verify-database-absent.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/repeat-01/cleanup/verify-database-absent.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/repeat-01/cleanup/verify-database-absent.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/repeat-01/cleanup/verify-database-absent.stdout.log new file mode 100644 index 00000000..573541ac --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/repeat-01/cleanup/verify-database-absent.stdout.log @@ -0,0 +1 @@ +0 diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/repeat-01/connection-count-after.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/repeat-01/connection-count-after.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/repeat-01/connection-count-after.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/repeat-01/connection-count-after.stdout.log new file mode 100644 index 00000000..573541ac --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/repeat-01/connection-count-after.stdout.log @@ -0,0 +1 @@ +0 diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/repeat-01/connection-count-before.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/repeat-01/connection-count-before.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/repeat-01/connection-count-before.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/repeat-01/connection-count-before.stdout.log new file mode 100644 index 00000000..573541ac --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/repeat-01/connection-count-before.stdout.log @@ -0,0 +1 @@ +0 diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/repeat-01/coverage.out b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/repeat-01/coverage.out new file mode 100644 index 00000000..52335d8a --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/repeat-01/coverage.out @@ -0,0 +1,3472 @@ +mode: atomic +github.com/thebtf/engram/internal/mcp/audit_helpers.go:33.53,34.30 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:34.30,36.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:37.2,37.25 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:37.25,39.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:40.2,40.12 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:44.28,46.2 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:52.83,53.12 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:53.12,54.16 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:54.16,55.32 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:55.32,61.5 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:63.3,65.33 3 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:65.33,71.4 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:77.54,78.14 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:78.14,80.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:81.2,82.16 2 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:82.16,85.3 2 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:86.2,87.13 2 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:92.91,93.23 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:93.23,95.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:96.2,97.15 2 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:97.15,99.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:100.2,105.65 4 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:105.65,113.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:117.95,118.23 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:118.23,120.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:121.2,122.15 2 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:122.15,124.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:125.2,129.65 5 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:129.65,138.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:142.87,143.23 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:143.23,145.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:146.2,147.15 2 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:147.15,149.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:150.2,153.65 4 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:153.65,161.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:166.96,167.23 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:167.23,169.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:170.2,171.15 2 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:171.15,173.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:174.2,177.63 4 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:177.63,185.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:189.97,190.23 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:190.23,192.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:193.2,194.15 2 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:194.15,196.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:197.2,200.68 4 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:200.68,208.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:30.62,31.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:31.20,33.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:34.2,35.49 2 0 +github.com/thebtf/engram/internal/mcp/coerce.go:35.49,37.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:38.2,38.14 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:38.14,40.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:41.2,41.15 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:46.52,47.14 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:47.14,49.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:50.2,50.23 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:51.14,52.11 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:53.19,54.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:55.15,56.45 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:57.12,58.31 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:59.10,60.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:67.43,68.14 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:68.14,70.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:71.2,71.23 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:72.15,73.23 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:74.19,75.38 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:75.38,77.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:78.3,78.40 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:78.40,80.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:81.3,81.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:82.14,83.56 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:83.56,85.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:86.3,86.54 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:86.54,88.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:89.3,89.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:90.10,91.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:97.49,98.14 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:98.14,100.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:101.2,101.23 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:102.15,103.18 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:104.19,105.38 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:105.38,107.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:108.3,108.40 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:108.40,110.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:111.3,111.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:112.14,113.56 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:113.56,115.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:116.3,116.54 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:116.54,118.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:119.3,119.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:120.10,121.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:127.55,128.14 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:128.14,130.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:131.2,131.23 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:132.15,133.11 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:134.19,135.40 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:135.40,137.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:138.3,138.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:139.14,140.54 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:140.54,142.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:143.3,143.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:144.10,145.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:151.46,152.14 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:152.14,154.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:155.2,155.23 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:156.12,157.11 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:158.14,159.54 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:159.54,161.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:162.3,162.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:163.15,164.16 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:165.19,166.40 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:166.40,168.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:169.3,169.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:170.10,171.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:177.40,178.14 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:178.14,180.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:181.2,181.23 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:182.13,184.26 2 0 +github.com/thebtf/engram/internal/mcp/coerce.go:184.26,185.36 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:185.36,187.5 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:189.3,189.16 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:190.16,191.11 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:192.14,193.14 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:193.14,195.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:196.3,196.13 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:197.10,198.13 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:204.38,205.14 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:205.14,207.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:208.2,209.9 2 0 +github.com/thebtf/engram/internal/mcp/coerce.go:209.9,211.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:212.2,213.27 2 0 +github.com/thebtf/engram/internal/mcp/coerce.go:213.27,214.42 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:214.42,216.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:218.2,218.15 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:222.32,223.39 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:223.39,225.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:226.2,226.30 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:226.30,228.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:229.2,229.30 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:229.30,231.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:232.2,232.15 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:236.35,237.28 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:237.28,239.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:240.2,240.28 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:240.28,242.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:243.2,243.15 1 0 +github.com/thebtf/engram/internal/mcp/context.go:17.55,19.2 1 0 +github.com/thebtf/engram/internal/mcp/context.go:22.78,24.2 1 0 +github.com/thebtf/engram/internal/mcp/context.go:29.78,31.2 1 0 +github.com/thebtf/engram/internal/mcp/context.go:35.53,38.2 2 0 +github.com/thebtf/engram/internal/mcp/context.go:41.80,43.2 1 0 +github.com/thebtf/engram/internal/mcp/context.go:48.80,50.2 1 0 +github.com/thebtf/engram/internal/mcp/context.go:54.53,57.2 2 0 +github.com/thebtf/engram/internal/mcp/context.go:61.51,62.43 1 0 +github.com/thebtf/engram/internal/mcp/context.go:62.43,64.3 1 0 +github.com/thebtf/engram/internal/mcp/context.go:65.2,65.16 1 0 +github.com/thebtf/engram/internal/mcp/health.go:22.32,26.2 3 0 +github.com/thebtf/engram/internal/mcp/health.go:29.37,33.2 3 0 +github.com/thebtf/engram/internal/mcp/health.go:36.35,40.2 3 0 +github.com/thebtf/engram/internal/mcp/health.go:42.44,45.25 3 0 +github.com/thebtf/engram/internal/mcp/health.go:45.25,47.50 1 0 +github.com/thebtf/engram/internal/mcp/health.go:47.50,50.4 2 0 +github.com/thebtf/engram/internal/mcp/health.go:55.74,60.16 5 0 +github.com/thebtf/engram/internal/mcp/health.go:60.16,62.3 1 0 +github.com/thebtf/engram/internal/mcp/health.go:63.2,71.4 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:28.42,29.65 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:29.65,32.3 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:33.2,33.40 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:33.40,35.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:36.2,36.14 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:39.120,40.69 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:40.69,42.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:43.2,44.19 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:44.19,46.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:47.2,48.17 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:48.17,50.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:51.2,52.59 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:52.59,54.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:55.2,56.20 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:56.20,58.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:59.2,60.17 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:60.17,62.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:63.2,64.21 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:64.21,66.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:67.2,68.22 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:68.22,70.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:71.2,72.23 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:72.23,74.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:76.2,98.19 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:98.19,100.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:101.2,101.66 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:104.52,106.29 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:106.29,108.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:109.2,110.46 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:113.113,123.27 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:123.27,125.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:126.2,127.16 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:127.16,129.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:130.2,130.25 1 0 +github.com/thebtf/engram/internal/mcp/server.go:127.44,138.2 1 1 +github.com/thebtf/engram/internal/mcp/server.go:141.64,143.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:146.78,148.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:151.53,153.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:156.55,158.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:161.58,163.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:166.62,168.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:171.50,173.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:176.78,178.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:181.74,183.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:186.71,189.2 2 0 +github.com/thebtf/engram/internal/mcp/server.go:191.85,193.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:195.61,197.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:199.49,201.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:204.54,206.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:211.53,213.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:216.53,218.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:222.61,224.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:228.59,230.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:234.51,236.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:240.52,242.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:246.55,248.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:252.82,254.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:260.70,262.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:269.68,271.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:274.87,277.2 2 0 +github.com/thebtf/engram/internal/mcp/server.go:282.60,284.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:290.45,292.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:297.77,299.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:303.37,313.38 3 0 +github.com/thebtf/engram/internal/mcp/server.go:313.38,315.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:316.2,317.9 2 0 +github.com/thebtf/engram/internal/mcp/server.go:317.9,319.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:320.2,321.9 2 0 +github.com/thebtf/engram/internal/mcp/server.go:321.9,323.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:324.2,325.9 2 0 +github.com/thebtf/engram/internal/mcp/server.go:325.9,327.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:328.2,328.14 1 0 +github.com/thebtf/engram/internal/mcp/server.go:332.35,334.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:383.49,387.12 3 0 +github.com/thebtf/engram/internal/mcp/server.go:387.12,388.22 1 0 +github.com/thebtf/engram/internal/mcp/server.go:388.22,389.11 1 0 +github.com/thebtf/engram/internal/mcp/server.go:390.22,392.11 2 0 +github.com/thebtf/engram/internal/mcp/server.go:393.12,393.12 0 0 +github.com/thebtf/engram/internal/mcp/server.go:396.4,397.18 2 0 +github.com/thebtf/engram/internal/mcp/server.go:397.18,398.13 1 0 +github.com/thebtf/engram/internal/mcp/server.go:401.4,402.61 2 0 +github.com/thebtf/engram/internal/mcp/server.go:402.61,404.13 2 0 +github.com/thebtf/engram/internal/mcp/server.go:407.4,407.55 1 0 +github.com/thebtf/engram/internal/mcp/server.go:407.55,409.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:411.3,411.28 1 0 +github.com/thebtf/engram/internal/mcp/server.go:414.2,414.9 1 0 +github.com/thebtf/engram/internal/mcp/server.go:415.20,416.19 1 0 +github.com/thebtf/engram/internal/mcp/server.go:417.25,418.17 1 0 +github.com/thebtf/engram/internal/mcp/server.go:418.17,420.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:421.3,421.13 1 0 +github.com/thebtf/engram/internal/mcp/server.go:427.77,428.19 1 0 +github.com/thebtf/engram/internal/mcp/server.go:428.19,431.3 2 0 +github.com/thebtf/engram/internal/mcp/server.go:433.2,433.20 1 0 +github.com/thebtf/engram/internal/mcp/server.go:434.20,435.33 1 0 +github.com/thebtf/engram/internal/mcp/server.go:436.20,437.32 1 0 +github.com/thebtf/engram/internal/mcp/server.go:438.20,439.37 1 0 +github.com/thebtf/engram/internal/mcp/server.go:443.24,444.93 1 0 +github.com/thebtf/engram/internal/mcp/server.go:445.34,446.101 1 0 +github.com/thebtf/engram/internal/mcp/server.go:447.22,448.91 1 0 +github.com/thebtf/engram/internal/mcp/server.go:449.29,450.120 1 0 +github.com/thebtf/engram/internal/mcp/server.go:451.10,456.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:461.51,462.20 1 0 +github.com/thebtf/engram/internal/mcp/server.go:463.50,464.70 1 0 +github.com/thebtf/engram/internal/mcp/server.go:465.46,466.79 1 0 +github.com/thebtf/engram/internal/mcp/server.go:467.10,468.80 1 0 +github.com/thebtf/engram/internal/mcp/server.go:473.59,485.63 2 0 +github.com/thebtf/engram/internal/mcp/server.go:485.63,487.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:489.2,493.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:496.45,503.33 3 0 +github.com/thebtf/engram/internal/mcp/server.go:503.33,505.57 2 0 +github.com/thebtf/engram/internal/mcp/server.go:505.57,506.76 1 0 +github.com/thebtf/engram/internal/mcp/server.go:506.76,507.13 1 0 +github.com/thebtf/engram/internal/mcp/server.go:509.4,509.18 1 0 +github.com/thebtf/engram/internal/mcp/server.go:509.18,511.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:511.10,513.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:514.4,518.11 5 0 +github.com/thebtf/engram/internal/mcp/server.go:522.2,522.19 1 0 +github.com/thebtf/engram/internal/mcp/server.go:660.29,683.21 2 0 +github.com/thebtf/engram/internal/mcp/server.go:683.21,689.3 5 0 +github.com/thebtf/engram/internal/mcp/server.go:690.2,699.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:712.30,765.49 3 0 +github.com/thebtf/engram/internal/mcp/server.go:765.49,789.3 5 0 +github.com/thebtf/engram/internal/mcp/server.go:790.2,799.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:805.40,936.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:942.58,1048.35 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1048.35,1077.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1080.2,1080.33 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1080.33,1090.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1093.2,1093.26 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1093.26,1123.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1124.2,1124.80 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1124.80,1126.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1127.2,1127.55 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1127.55,1129.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1130.2,1130.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1130.38,1132.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1134.2,1134.25 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1134.25,1136.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1138.2,1138.33 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1138.33,1140.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1141.2,1141.69 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1141.69,1143.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1144.2,1144.75 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1144.75,1146.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1148.2,1148.27 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1148.27,1165.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1168.2,1168.76 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1168.76,1191.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1195.2,1195.48 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1195.48,1197.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1201.2,1201.47 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1201.47,1203.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1205.2,1205.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1205.38,1207.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1212.2,1212.21 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1212.21,1214.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1228.2,1228.51 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1228.51,1230.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1233.2,1233.56 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1233.56,1235.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1238.2,1238.71 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1238.71,1298.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1302.2,1302.104 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1302.104,1321.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1324.2,1324.72 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1324.72,1333.154 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1333.154,1334.26 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1334.26,1336.8 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1337.7,1337.16 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1338.35,1340.26 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1340.26,1342.8 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1343.7,1343.18 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1371.2,1371.26 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1371.26,1390.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1393.2,1393.28 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1393.28,1443.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1446.2,1446.28 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1446.28,1478.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1481.2,1481.37 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1481.37,1561.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1564.2,1568.23 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1568.23,1570.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1572.2,1588.57 3 0 +github.com/thebtf/engram/internal/mcp/server.go:1588.57,1591.29 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1591.29,1593.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1594.3,1594.27 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1594.27,1595.29 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1595.29,1597.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1601.2,1607.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1612.79,1614.60 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1614.60,1620.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1622.2,1623.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1623.16,1631.3 3 0 +github.com/thebtf/engram/internal/mcp/server.go:1633.2,1641.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1644.69,1645.34 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1645.34,1647.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1648.2,1649.22 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1649.22,1651.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1652.2,1652.37 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1656.99,1658.14 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1659.16,1660.35 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1661.15,1662.46 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1663.18,1664.49 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1665.15,1666.46 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1667.18,1668.49 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1669.14,1670.45 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1671.15,1672.34 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1676.2,1676.14 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1677.35,1678.52 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1679.26,1680.37 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1681.20,1682.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1683.20,1684.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1685.16,1686.35 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1687.29,1688.40 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1689.33,1690.50 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1691.25,1692.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1693.23,1694.41 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1696.26,1697.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1698.24,1699.42 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1700.22,1701.40 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1702.25,1703.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1704.27,1705.45 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1706.25,1707.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1709.30,1710.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1711.28,1712.42 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1713.17,1714.40 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1715.20,1716.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1717.20,1718.45 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1719.20,1720.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1722.20,1723.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1724.18,1725.36 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1726.20,1727.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1728.18,1729.36 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1730.21,1731.39 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1732.21,1733.39 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1734.26,1735.44 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1736.25,1737.34 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1738.26,1739.44 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1740.24,1741.42 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1742.26,1743.44 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1744.27,1745.45 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1746.22,1747.40 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1748.19,1749.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1750.15,1751.34 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1752.16,1753.35 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1755.21,1756.44 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1757.19,1758.42 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1759.20,1760.44 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1761.22,1762.45 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1763.22,1764.40 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1765.23,1766.41 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1767.20,1768.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1769.32,1770.49 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1771.19,1772.37 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1773.19,1774.37 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1775.33,1776.50 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1777.35,1778.52 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1779.24,1780.42 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1781.32,1782.49 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1783.28,1784.46 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1785.21,1786.39 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1787.34,1788.51 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1789.25,1790.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1791.29,1792.46 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1793.26,1794.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1795.27,1796.44 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1798.25,1799.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1800.23,1801.41 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1802.27,1803.45 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1804.26,1805.44 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1806.29,1807.47 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1809.29,1810.46 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1811.27,1812.44 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1813.30,1814.47 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1815.38,1816.54 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1817.36,1818.52 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1820.24,1821.42 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1822.27,1823.45 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1824.22,1825.40 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1826.32,1827.49 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1828.32,1829.49 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1830.31,1831.48 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1832.35,1833.52 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1834.36,1835.53 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1836.36,1837.53 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1838.38,1839.54 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1840.34,1841.51 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1843.22,1844.40 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1845.21,1846.39 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1847.24,1848.42 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1850.25,1851.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1852.25,1853.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1859.2,1859.14 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1860.22,1863.131 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1866.51,1867.123 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1868.10,1869.50 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1874.47,1876.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1876.16,1879.3 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1880.2,1880.35 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1884.72,1890.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1896.105,1898.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1898.16,1900.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1902.2,1903.17 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1903.17,1905.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1907.2,1908.17 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1908.17,1910.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1912.2,1918.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1918.16,1920.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1921.2,1921.25 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1927.76,1933.15 3 0 +github.com/thebtf/engram/internal/mcp/server.go:1933.15,1936.17 3 0 +github.com/thebtf/engram/internal/mcp/server.go:1936.17,1938.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1939.3,1939.26 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1943.2,1950.36 3 0 +github.com/thebtf/engram/internal/mcp/server.go:1950.36,1952.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1952.8,1955.29 3 0 +github.com/thebtf/engram/internal/mcp/server.go:1955.29,1958.4 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1959.3,1962.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1966.2,1966.20 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1966.20,1977.20 6 0 +github.com/thebtf/engram/internal/mcp/server.go:1977.20,1979.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1980.3,1980.20 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1980.20,1982.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1985.3,1985.37 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1985.37,1987.30 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1987.30,1988.16 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1988.16,1990.6 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1990.11,1992.6 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1994.4,1995.56 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1995.56,1997.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1998.4,2003.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2008.2,2008.29 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2008.29,2009.63 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2009.63,2011.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2011.9,2013.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2021.2,2021.29 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2021.29,2029.38 3 0 +github.com/thebtf/engram/internal/mcp/server.go:2029.38,2031.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2031.9,2033.31 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2033.31,2035.30 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2035.30,2037.6 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2039.4,2042.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2046.2,2047.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2047.16,2049.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2050.2,2050.25 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2055.57,2056.33 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2056.33,2058.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2059.2,2060.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2060.16,2062.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2063.2,2064.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2064.16,2066.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2067.2,2067.23 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2071.79,2105.15 6 0 +github.com/thebtf/engram/internal/mcp/server.go:2105.15,2107.17 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2107.17,2111.4 3 0 +github.com/thebtf/engram/internal/mcp/server.go:2111.9,2112.17 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2112.17,2114.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2115.4,2117.26 3 0 +github.com/thebtf/engram/internal/mcp/server.go:2117.26,2119.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2119.10,2121.29 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2121.29,2123.6 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2125.4,2129.25 5 0 +github.com/thebtf/engram/internal/mcp/server.go:2130.19,2130.19 0 0 +github.com/thebtf/engram/internal/mcp/server.go:2132.20,2134.106 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2135.12,2137.103 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2140.8,2143.3 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2144.2,2150.49 3 0 +github.com/thebtf/engram/internal/mcp/server.go:2150.49,2152.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2152.8,2154.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2155.2,2168.27 4 0 +github.com/thebtf/engram/internal/mcp/server.go:2168.27,2170.17 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2170.17,2173.4 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2173.9,2175.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2177.2,2182.40 4 0 +github.com/thebtf/engram/internal/mcp/server.go:2182.40,2183.21 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2184.20,2185.20 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2186.19,2187.19 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2191.2,2191.24 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2191.24,2193.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2193.8,2193.30 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2193.30,2195.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2198.2,2198.28 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2198.28,2200.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2203.2,2203.29 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2203.29,2205.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2207.2,2208.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2208.16,2210.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2211.2,2211.28 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2216.103,2218.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2218.16,2220.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2222.2,2223.15 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2223.15,2225.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2227.2,2239.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2239.16,2241.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2242.2,2242.25 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2246.93,2248.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2251.91,2253.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:18.28,29.20 4 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:29.20,33.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:35.2,44.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:68.36,69.49 1 1 +github.com/thebtf/engram/internal/mcp/tools_admin.go:69.49,74.3 4 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:75.2,75.25 1 1 +github.com/thebtf/engram/internal/mcp/tools_admin.go:80.26,82.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:84.89,86.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:86.16,88.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:89.2,90.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:90.18,92.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:94.2,94.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:95.15,96.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:97.26,98.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:99.25,100.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:101.23,105.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:105.22,107.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:108.3,108.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:109.10,110.114 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:120.92,126.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:126.26,128.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:130.2,131.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:131.19,133.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:134.2,135.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:135.19,137.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:138.2,138.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:138.24,140.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:142.2,142.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:142.25,144.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:146.2,147.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:147.16,149.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:151.2,151.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:27.40,30.2 2 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:32.30,46.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:48.99,49.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:49.34,51.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:52.2,52.69 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:52.69,54.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:56.2,57.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:57.16,59.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:60.2,61.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:61.21,63.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:64.2,67.26 3 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:67.26,69.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:70.2,71.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:71.25,73.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:75.2,77.44 3 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:77.44,79.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:80.2,80.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:80.33,82.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:83.2,83.81 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:86.52,87.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:87.16,89.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:90.2,90.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:90.15,92.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:93.2,93.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:96.73,97.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:97.21,99.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:100.2,101.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:101.29,110.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:111.2,111.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:114.34,116.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:31.98,32.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:32.52,34.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:35.2,35.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:35.26,37.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:39.2,40.49 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:40.49,42.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:43.2,43.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:43.21,45.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:46.2,46.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:46.21,48.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:49.2,49.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:49.18,51.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:52.2,52.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:52.18,54.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:56.2,56.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:56.38,58.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:60.2,61.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:61.16,63.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:68.2,70.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:70.26,77.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:79.2,81.36 3 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:81.36,84.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:86.2,89.28 3 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:89.28,90.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:90.39,91.9 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:93.3,97.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:100.2,104.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:107.60,113.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:115.101,116.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:116.38,118.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:120.2,122.21 3 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:122.21,123.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:123.26,125.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:126.3,126.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:126.23,128.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:129.8,130.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:130.26,132.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:133.3,133.68 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:133.68,135.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:137.2,140.20 3 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:141.17,142.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:143.67,143.67 0 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:144.10,145.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:148.2,162.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:162.16,164.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:165.2,165.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:165.19,173.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:174.2,174.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:174.30,176.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:177.2,177.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:177.31,179.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:181.2,182.36 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:182.36,196.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:198.2,199.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:199.19,201.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:202.2,203.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:203.18,205.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:206.2,207.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:207.21,209.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:210.2,211.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:211.25,213.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:214.2,225.21 3 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:225.21,227.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:228.2,228.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:228.25,230.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:231.2,231.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:231.18,233.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:235.2,244.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:244.21,246.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:247.2,247.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:247.25,249.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:250.2,250.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:250.18,252.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:253.2,253.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:253.24,255.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:256.2,256.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:259.50,261.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:261.22,263.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:264.2,264.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:270.90,272.42 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:272.42,276.3 3 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:277.2,281.27 3 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:281.27,282.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:282.45,284.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:286.2,286.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:25.28,88.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:95.95,96.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:96.22,98.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:99.2,100.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:100.32,102.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:104.2,105.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:105.16,107.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:109.2,114.35 3 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:114.35,121.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:123.2,123.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:123.25,125.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:127.2,134.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:134.16,136.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:138.2,146.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:154.94,155.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:155.22,157.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:158.2,159.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:159.32,161.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:163.2,164.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:164.16,166.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:168.2,172.35 3 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:172.35,179.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:181.2,181.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:181.25,183.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:185.2,192.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:192.16,194.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:196.2,203.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:211.97,212.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:212.22,214.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:215.2,216.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:216.32,218.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:220.2,221.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:221.16,223.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:225.2,229.35 3 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:229.35,236.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:238.2,238.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:238.25,240.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:242.2,249.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:249.16,251.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:253.2,260.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:31.80,32.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:32.14,34.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:35.2,48.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:51.136,53.51 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:53.51,55.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:56.2,56.83 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:59.94,60.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:60.21,62.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:63.2,63.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:68.30,162.2 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:165.98,166.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:166.49,168.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:169.2,170.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:170.16,172.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:173.2,174.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:174.19,176.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:177.2,179.17 3 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:179.17,181.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:183.2,184.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:184.16,186.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:188.2,189.31 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:189.31,190.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:190.15,191.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:193.3,193.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:196.2,201.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:201.16,203.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:204.2,204.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:208.96,209.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:209.49,211.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:212.2,213.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:213.16,215.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:216.2,217.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:217.13,219.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:221.2,222.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:222.16,224.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:225.2,225.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:225.22,227.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:229.2,230.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:230.16,232.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:233.2,233.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:239.100,240.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:240.22,242.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:243.2,244.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:244.16,246.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:247.2,248.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:248.13,250.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:255.2,256.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:256.12,263.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:263.30,264.77 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:264.77,269.5 4 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:271.3,272.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:272.21,274.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:275.3,275.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:279.2,279.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:279.29,281.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:284.2,285.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:285.16,287.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:288.2,288.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:288.22,290.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:291.2,291.55 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:291.55,293.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:294.2,294.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:294.74,296.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:297.2,298.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:298.16,300.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:306.2,307.41 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:307.41,309.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:310.2,324.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:324.16,325.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:325.50,327.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:328.3,328.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:330.2,330.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:330.38,332.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:334.2,341.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:341.16,343.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:344.2,344.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:348.99,349.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:349.49,351.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:352.2,353.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:353.16,355.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:356.2,357.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:357.13,359.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:360.2,362.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:362.16,364.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:365.2,365.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:365.22,367.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:368.2,368.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:368.74,370.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:371.2,372.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:372.16,374.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:375.2,375.85 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:375.85,377.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:379.2,380.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:380.16,381.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:381.50,383.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:384.3,384.60 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:386.2,386.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:386.20,388.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:390.2,395.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:395.16,397.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:398.2,398.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:402.102,403.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:403.49,405.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:406.2,407.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:407.16,409.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:410.2,411.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:411.13,413.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:414.2,415.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:415.16,417.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:418.2,418.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:418.22,420.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:421.2,421.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:421.74,423.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:424.2,425.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:425.16,427.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:428.2,428.88 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:428.88,430.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:432.2,433.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:433.16,434.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:434.50,436.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:437.3,437.63 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:439.2,439.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:439.20,441.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:443.2,448.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:448.16,450.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:451.2,451.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:34.30,36.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:42.61,44.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:48.32,75.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:79.32,94.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:100.98,101.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:101.25,103.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:104.2,104.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:104.29,106.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:108.2,113.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:113.17,114.55 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:114.55,116.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:118.2,118.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:118.24,120.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:121.2,121.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:121.23,123.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:124.2,124.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:124.23,126.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:134.2,135.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:135.21,137.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:142.2,147.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:147.16,149.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:154.2,165.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:165.25,175.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:177.2,183.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:183.16,185.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:186.2,186.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:194.98,195.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:195.25,197.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:198.2,198.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:198.29,200.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:202.2,205.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:205.17,207.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:208.2,209.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:209.21,211.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:213.2,214.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:214.16,216.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:217.2,218.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:218.16,220.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:221.2,222.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:222.16,224.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:226.2,231.11 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:231.11,233.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:235.2,236.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:236.16,238.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:239.2,239.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:21.52,22.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:22.24,25.28 3 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:25.28,27.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:29.2,29.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:35.72,37.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:37.15,39.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:41.2,42.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:42.16,44.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:45.2,45.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:49.99,51.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:51.16,53.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:55.2,56.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:56.16,58.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:60.2,72.23 7 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:72.23,74.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:75.2,75.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:75.24,77.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:78.2,78.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:78.24,80.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:81.2,81.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:82.27,82.27 0 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:84.10,85.93 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:87.2,87.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:87.30,89.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:90.2,90.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:90.26,92.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:94.2,95.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:95.16,97.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:99.2,100.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:100.16,102.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:104.2,112.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:112.16,114.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:116.2,123.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:123.16,125.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:126.2,126.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:130.97,132.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:132.16,134.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:136.2,137.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:137.16,139.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:141.2,147.23 4 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:147.23,149.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:150.2,150.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:150.26,152.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:154.2,155.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:155.16,157.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:159.2,160.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:160.16,161.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:161.47,163.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:164.3,164.51 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:167.2,167.97 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:167.97,172.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:174.2,175.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:175.16,177.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:179.2,185.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:185.16,187.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:188.2,188.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:192.99,194.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:194.16,196.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:198.2,199.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:199.16,201.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:203.2,207.26 3 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:207.26,209.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:211.2,212.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:212.16,214.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:216.2,223.26 3 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:223.26,229.28 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:229.28,231.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:232.3,232.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:235.2,236.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:236.16,238.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:239.2,239.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:243.100,245.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:245.16,247.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:249.2,250.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:250.16,252.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:254.2,262.23 5 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:262.23,264.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:265.2,265.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:265.24,267.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:268.2,268.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:269.27,269.27 0 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:271.10,272.93 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:274.2,274.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:274.30,276.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:277.2,277.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:277.26,279.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:281.2,281.71 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:281.71,282.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:282.47,284.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:285.3,285.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:288.2,293.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:293.16,295.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:296.2,296.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:302.92,309.19 5 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:309.19,310.53 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:310.53,313.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:316.2,317.51 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:317.51,318.66 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:318.66,320.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:323.2,331.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:331.16,333.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:334.2,334.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:338.46,342.32 4 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:342.32,343.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:343.20,346.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:348.2,350.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:350.26,352.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:352.27,353.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:353.13,355.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:356.4,356.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:358.3,358.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:360.2,360.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:16.45,18.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:20.35,36.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:38.84,39.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:39.40,41.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:42.2,42.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:42.50,44.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:45.2,45.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:48.101,50.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:50.16,52.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:53.2,54.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:54.16,56.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:57.2,58.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:58.19,60.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:61.2,62.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:62.21,64.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:65.2,66.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:66.16,68.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:69.2,69.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:72.102,74.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:74.16,76.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:77.2,82.8 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:10.100,12.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:12.16,14.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:16.2,17.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:17.18,19.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:21.2,21.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:22.16,23.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:24.14,25.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:26.14,27.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:28.17,29.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:30.17,31.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:32.21,33.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:34.19,35.42 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:36.17,37.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:38.16,39.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:40.16,41.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:42.21,43.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:44.10,45.167 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:15.77,16.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:16.33,18.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:20.2,21.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:21.27,23.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:25.2,26.28 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:26.28,29.17 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:29.17,31.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:34.2,41.32 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:41.32,46.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:46.20,48.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:49.3,49.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:52.2,53.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:53.16,55.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:57.2,57.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:61.97,62.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:62.28,64.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:66.2,67.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:67.16,69.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:71.2,75.29 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:75.29,77.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:79.2,80.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:80.16,82.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:84.2,84.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:84.20,86.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:88.2,97.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:97.25,103.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:103.20,105.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:106.3,106.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:106.19,108.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:109.3,109.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:112.2,113.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:113.16,115.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:117.2,117.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:121.95,122.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:122.28,124.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:126.2,127.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:127.16,129.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:131.2,137.50 4 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:137.50,139.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:141.2,142.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:142.16,144.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:145.2,145.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:145.16,147.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:149.2,149.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:149.21,151.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:153.2,154.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:154.16,156.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:157.2,157.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:157.20,159.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:161.2,161.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:165.98,166.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:166.28,168.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:170.2,171.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:171.16,173.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:175.2,181.50 4 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:181.50,183.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:185.2,185.96 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:185.96,187.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:189.2,189.88 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:197.98,198.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:198.28,200.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:202.2,203.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:203.16,205.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:207.2,217.74 6 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:217.74,219.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:222.2,223.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:223.16,225.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:227.2,229.156 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:235.98,237.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:237.16,239.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:241.2,247.24 4 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:247.24,249.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:252.2,253.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:253.29,255.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:256.2,256.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:15.93,16.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:16.37,18.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:20.2,21.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:21.16,23.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:25.2,32.16 7 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:32.16,34.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:35.2,35.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:35.19,37.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:38.2,38.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:38.19,40.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:42.2,43.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:43.16,45.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:47.2,54.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:54.16,56.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:57.2,57.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:61.91,62.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:62.37,64.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:66.2,67.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:67.16,69.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:71.2,73.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:73.16,75.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:76.2,76.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:76.19,78.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:80.2,81.43 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:81.43,83.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:83.19,85.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:86.3,86.79 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:87.8,89.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:90.2,90.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:90.16,91.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:91.45,93.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:94.3,94.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:97.2,110.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:110.16,112.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:113.2,113.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:117.93,119.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:122.91,123.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:123.37,125.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:127.2,128.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:128.16,130.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:132.2,133.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:133.19,135.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:136.2,141.16 5 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:141.16,143.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:145.2,155.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:155.25,165.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:167.2,168.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:168.16,170.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:171.2,171.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:175.94,176.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:176.37,178.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:180.2,181.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:181.16,183.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:185.2,187.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:187.16,189.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:190.2,190.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:190.19,192.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:193.2,196.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:196.16,198.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:200.2,208.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:208.25,216.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:218.2,225.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:225.16,227.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:228.2,228.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:232.94,233.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:233.37,235.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:237.2,238.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:238.16,240.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:242.2,243.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:243.21,245.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:246.2,248.19 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:248.19,250.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:252.2,253.46 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:253.46,255.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:255.13,257.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:259.2,259.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:259.44,261.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:261.13,263.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:266.2,267.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:267.16,269.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:271.2,278.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:278.16,280.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:281.2,281.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:19.69,21.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:23.38,38.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:40.51,63.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:65.53,80.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:82.46,85.32 3 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:85.32,87.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:88.2,88.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:91.105,93.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:93.16,95.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:96.2,97.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:97.16,99.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:100.2,100.70 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:103.107,105.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:105.16,107.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:108.2,109.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:109.16,111.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:112.2,112.72 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:115.101,117.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:117.16,119.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:120.2,121.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:121.17,123.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:124.2,139.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:142.109,144.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:144.16,146.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:147.2,154.8 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:157.100,159.28 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:159.28,161.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:161.18,163.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:164.3,164.62 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:166.2,167.72 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:167.72,169.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:170.2,170.53 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:170.53,172.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:173.2,174.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:174.26,176.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:177.2,177.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:180.73,182.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:182.16,184.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:185.2,185.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:12.104,14.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:14.16,16.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:18.2,19.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:19.18,21.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:23.2,23.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:24.14,25.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:26.18,27.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:28.17,29.46 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:30.10,31.96 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:36.101,37.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:37.27,39.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:41.2,42.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:42.16,44.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:46.2,47.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:47.21,49.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:50.2,51.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:51.19,53.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:54.2,54.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:55.52,55.52 0 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:56.10,57.101 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:59.2,61.93 2 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:61.93,64.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:66.2,70.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:27.31,94.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:98.97,100.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:100.26,102.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:103.2,103.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:103.28,105.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:107.2,108.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:108.16,110.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:112.2,115.15 4 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:115.15,117.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:118.2,118.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:118.17,120.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:122.2,123.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:123.16,125.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:127.2,140.29 3 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:140.29,151.31 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:151.31,154.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:155.3,155.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:158.2,162.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:167.100,169.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:169.26,171.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:172.2,172.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:172.28,174.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:175.2,175.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:175.26,177.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:179.2,180.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:180.16,182.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:184.2,185.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:185.22,187.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:189.2,190.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:190.20,191.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:191.54,199.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:200.3,200.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:200.61,202.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:203.3,203.58 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:206.2,211.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:215.95,217.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:217.32,219.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:220.2,220.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:220.28,222.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:224.2,225.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:225.16,227.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:229.2,230.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:230.22,232.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:234.2,234.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:234.61,236.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:239.2,239.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:239.25,246.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:248.2,252.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:258.104,260.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:260.26,262.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:267.2,271.20 3 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:271.20,275.3 3 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:275.8,279.3 3 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:280.2,280.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:284.60,285.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:285.30,287.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:288.2,288.42 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:288.42,290.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:291.2,291.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:64.89,65.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:65.25,67.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:69.2,70.49 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:70.49,72.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:74.2,74.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:75.18,76.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:77.21,78.35 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:79.19,80.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:81.18,82.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:83.19,84.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:85.18,86.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:87.18,91.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:91.23,93.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:94.3,94.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:95.10,96.62 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:100.81,103.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:103.19,105.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:106.2,107.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:107.19,109.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:112.2,112.46 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:112.46,114.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:115.2,115.46 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:115.46,117.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:122.2,122.66 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:122.66,124.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:127.2,127.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:127.25,128.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:128.22,130.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:131.8,132.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:132.26,134.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:138.2,138.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:138.25,139.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:139.22,141.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:142.8,143.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:143.26,145.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:148.2,148.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:148.22,150.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:151.2,151.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:151.38,153.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:154.2,154.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:154.19,156.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:159.2,161.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:161.25,164.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:165.2,165.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:165.25,168.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:169.2,171.23 3 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:171.23,174.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:175.2,175.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:175.23,178.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:180.2,193.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:193.16,195.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:198.2,199.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:199.29,201.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:202.2,202.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:202.29,204.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:205.2,213.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:216.121,217.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:217.28,218.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:218.26,220.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:221.3,222.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:222.17,223.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:223.49,225.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:226.4,226.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:228.3,228.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:230.2,230.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:230.26,232.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:233.2,234.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:234.16,235.48 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:235.48,237.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:238.3,238.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:240.2,240.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:243.101,248.36 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:248.36,250.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:250.8,252.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:253.2,253.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:253.16,255.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:256.2,256.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:256.32,257.128 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:257.128,262.72 5 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:262.72,264.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:267.2,267.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:276.81,277.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:277.25,279.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:280.2,280.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:280.22,282.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:283.2,283.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:283.39,285.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:286.2,286.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:286.25,288.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:289.2,289.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:289.21,291.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:292.2,293.14 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:293.14,295.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:296.2,305.16 5 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:305.16,307.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:308.2,314.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:317.84,318.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:318.19,320.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:321.2,323.63 3 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:323.63,325.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:326.2,329.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:332.82,333.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:333.38,335.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:336.2,337.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:338.18,339.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:340.18,341.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:345.2,345.59 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:345.59,347.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:349.2,351.21 3 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:351.21,353.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:353.8,356.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:357.2,357.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:357.16,359.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:366.2,367.41 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:367.41,369.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:371.2,378.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:397.115,398.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:398.15,400.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:403.2,404.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:404.26,405.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:405.28,407.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:408.3,408.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:408.28,410.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:412.2,412.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:412.23,415.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:420.2,426.12 4 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:426.12,427.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:427.27,429.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:429.18,431.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:433.4,433.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:433.33,435.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:440.2,441.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:441.26,442.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:442.28,443.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:443.49,445.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:448.3,448.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:448.28,449.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:449.49,451.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:454.2,454.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:457.82,458.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:458.21,460.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:461.2,462.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:462.16,464.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:465.2,465.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:465.36,467.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:468.2,469.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:469.16,471.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:472.2,477.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:480.82,481.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:481.40,483.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:484.2,485.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:485.19,487.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:488.2,489.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:489.16,491.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:492.2,499.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:502.82,503.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:503.21,505.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:506.2,507.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:507.16,509.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:510.2,514.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:23.179,24.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:24.22,26.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:28.2,32.22 4 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:32.22,34.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:35.2,36.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:36.22,38.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:40.2,41.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:41.26,43.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:44.2,44.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:44.26,46.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:47.2,47.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:47.30,49.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:50.2,50.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:50.30,52.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:54.2,55.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:55.16,57.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:58.2,58.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:58.13,60.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:61.2,62.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:62.16,64.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:65.2,65.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:65.13,67.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:69.2,70.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:70.16,72.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:73.2,73.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:73.15,75.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:77.2,77.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:80.172,81.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:81.28,82.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:82.23,84.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:85.3,85.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:85.18,87.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:88.3,89.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:89.17,90.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:90.49,92.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:93.4,93.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:95.3,95.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:98.2,98.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:98.24,100.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:101.2,101.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:101.19,103.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:104.2,105.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:105.16,106.48 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:106.48,108.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:109.3,109.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:111.2,111.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:114.119,116.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:116.22,118.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:119.2,120.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:120.22,122.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:124.2,126.26 3 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:126.26,127.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:127.36,129.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:130.3,130.105 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:131.8,132.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:132.32,134.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:135.3,135.103 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:137.2,137.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:137.16,139.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:141.2,141.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:141.32,143.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:143.27,145.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:146.3,147.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:147.27,149.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:150.3,150.106 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:150.106,151.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:153.3,153.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:153.27,154.114 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:154.114,155.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:157.9,157.104 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:157.104,158.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:160.3,160.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:160.27,161.114 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:161.114,162.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:164.9,164.104 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:164.104,165.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:167.3,167.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:169.2,169.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:25.90,26.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:26.26,28.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:30.2,31.49 2 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:31.49,33.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:35.2,35.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:36.16,37.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:38.10,39.63 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:43.84,44.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:44.21,46.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:47.2,47.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:47.25,49.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:50.2,50.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:50.21,52.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:53.2,53.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:53.21,55.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:57.2,58.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:59.18,60.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:61.15,62.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:63.24,64.42 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:65.10,66.108 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:69.2,70.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:70.22,72.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:73.2,74.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:74.29,76.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:78.2,78.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:78.14,85.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:87.2,89.37 3 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:89.37,92.21 3 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:92.21,94.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:97.2,100.31 4 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:100.31,102.38 2 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:102.38,104.37 2 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:104.37,106.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:109.3,122.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:122.26,124.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:125.3,125.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:125.19,127.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:131.3,133.39 3 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:133.39,135.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:135.9,137.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:138.3,138.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:138.17,140.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:142.3,142.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:142.34,144.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:145.3,145.11 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:148.2,155.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:20.99,22.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:22.16,24.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:26.2,31.44 3 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:31.44,32.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:32.33,33.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:33.43,38.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:43.2,43.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:43.49,45.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:46.2,46.48 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:46.48,48.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:50.2,52.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:52.27,55.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:55.8,60.24 3 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:60.24,62.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:64.3,64.57 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:64.57,66.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:68.3,68.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:71.2,71.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:71.16,73.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:75.2,76.23 2 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:76.23,78.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:80.2,80.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:19.40,89.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:109.71,111.9 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:111.9,113.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:115.2,116.38 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:116.38,117.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:118.13,119.41 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:119.41,121.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:122.17,123.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:123.43,125.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:126.11,127.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:127.40,129.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:133.2,133.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:133.22,138.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:139.2,139.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:143.90,144.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:144.25,146.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:148.2,149.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:149.16,151.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:153.2,157.61 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:157.61,159.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:161.2,161.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:162.16,163.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:164.14,165.35 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:166.13,167.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:168.16,169.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:170.17,171.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:172.16,173.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:174.15,175.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:176.10,177.120 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:189.85,191.39 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:191.39,192.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:192.44,194.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:196.2,196.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:196.15,198.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:199.2,199.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:199.15,201.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:202.2,202.46 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:205.91,207.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:207.17,209.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:211.2,215.25 5 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:215.25,217.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:218.2,224.25 4 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:224.25,226.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:227.2,227.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:227.25,229.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:231.2,243.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:243.16,245.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:247.2,247.139 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:250.89,252.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:252.19,254.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:255.2,256.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:256.25,258.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:259.2,264.52 5 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:264.52,266.14 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:266.14,268.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:271.2,277.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:277.25,280.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:282.2,283.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:283.16,285.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:287.2,287.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:287.22,288.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:288.20,290.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:291.3,291.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:294.2,297.31 3 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:297.31,300.29 3 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:300.29,302.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:303.3,305.69 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:308.2,308.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:311.88,313.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:313.13,315.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:317.2,318.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:318.16,320.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:322.2,328.22 6 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:328.22,331.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:333.2,333.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:333.23,335.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:335.30,338.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:341.2,341.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:344.91,346.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:346.13,348.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:350.2,353.18 3 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:353.18,354.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:354.27,356.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:357.3,357.73 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:357.73,359.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:362.2,362.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:362.19,370.17 4 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:370.17,372.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:375.2,376.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:376.26,378.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:379.2,379.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:382.92,384.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:384.13,386.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:388.2,389.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:389.16,391.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:393.2,401.16 4 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:401.16,403.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:405.2,405.88 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:408.91,410.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:410.13,412.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:414.2,418.95 4 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:418.95,420.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:422.2,422.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:425.90,427.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:427.13,429.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:431.2,433.167 3 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:433.167,435.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:437.2,437.89 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:437.89,439.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:441.2,441.108 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:22.93,24.49 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:24.49,26.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:28.2,28.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:29.14,30.42 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:31.17,32.59 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:33.16,34.58 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:35.24,36.75 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:37.27,38.71 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:39.22,40.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:41.23,42.63 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:43.10,44.66 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:48.79,49.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:49.13,51.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:52.2,53.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:53.16,55.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:57.2,58.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:58.32,60.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:61.2,84.28 3 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:87.101,88.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:88.13,90.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:91.2,91.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:91.38,93.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:94.2,95.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:95.16,97.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:98.2,98.53 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:98.53,100.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:102.2,104.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:104.17,106.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:107.2,107.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:107.29,109.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:110.2,115.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:118.100,119.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:119.13,121.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:122.2,122.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:122.38,124.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:125.2,126.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:126.16,128.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:129.2,129.53 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:129.53,131.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:133.2,135.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:135.17,137.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:138.2,138.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:138.29,140.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:141.2,146.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:149.123,150.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:150.13,152.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:153.2,153.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:153.18,155.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:156.2,156.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:156.38,158.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:159.2,161.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:161.17,163.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:164.2,169.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:172.113,173.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:173.13,175.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:176.2,176.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:176.50,178.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:179.2,181.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:181.17,183.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:184.2,188.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:191.57,195.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:197.102,198.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:198.13,200.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:201.2,201.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:201.20,203.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:204.2,205.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:205.16,207.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:209.2,210.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:210.32,212.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:214.2,217.56 3 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:217.56,223.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:225.2,230.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:233.41,235.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:235.16,237.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:238.2,238.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:35.27,37.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:42.41,43.11 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:44.48,45.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:46.10,47.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:54.57,55.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:56.17,57.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:58.16,59.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:60.10,61.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:82.58,83.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:84.28,85.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:86.26,87.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:88.10,89.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:93.114,95.68 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:95.68,97.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:99.2,101.42 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:101.42,102.71 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:102.71,105.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:107.2,117.23 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:117.23,119.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:121.2,124.22 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:124.22,125.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:125.31,127.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:128.3,128.35 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:129.8,129.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:129.37,131.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:132.2,132.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:135.74,136.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:136.30,138.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:139.2,139.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:139.34,141.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:142.2,142.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:142.31,144.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:145.2,145.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:145.22,147.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:161.169,162.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:162.17,164.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:165.2,166.51 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:166.51,168.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:169.2,169.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:172.92,174.42 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:174.42,177.63 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:177.63,179.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:179.9,181.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:183.2,183.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:186.65,190.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:192.115,194.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:194.26,196.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:196.8,196.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:196.31,198.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:199.2,199.117 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:202.122,206.31 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:206.31,207.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:207.45,209.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:211.2,211.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:214.72,216.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:218.117,219.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:219.16,221.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:222.2,223.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:223.20,225.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:225.17,227.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:228.3,228.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:228.27,229.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:229.50,231.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:231.30,232.11 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:236.3,236.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:239.2,241.60 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:241.60,243.61 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:243.61,245.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:246.3,246.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:246.24,247.9 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:249.3,250.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:250.17,252.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:253.3,253.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:253.22,254.9 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:256.3,256.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:256.29,257.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:257.50,259.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:259.30,260.11 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:264.3,265.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:265.32,266.9 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:269.2,269.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:272.51,273.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:273.16,275.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:276.2,277.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:277.18,279.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:280.2,280.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:280.19,282.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:283.2,283.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:286.97,288.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:288.30,290.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:291.2,291.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:291.49,293.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:294.2,294.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:297.108,299.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:301.108,303.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:305.102,307.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:319.55,320.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:320.31,322.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:323.2,323.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:323.26,325.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:326.2,326.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:329.71,330.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:343.26,344.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:345.10,346.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:354.95,362.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:362.16,364.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:366.2,397.39 14 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:397.39,399.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:399.27,401.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:402.8,404.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:405.2,407.46 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:407.46,410.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:411.2,411.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:411.44,413.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:413.12,415.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:417.2,417.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:417.26,419.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:420.2,420.84 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:420.84,422.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:427.2,427.65 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:427.65,429.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:431.2,433.20 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:433.20,435.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:436.2,437.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:437.20,439.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:440.2,440.56 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:440.56,442.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:443.2,443.56 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:443.56,448.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:450.2,450.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:450.45,453.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:459.2,459.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:459.31,461.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:461.22,462.62 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:462.62,465.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:466.4,466.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:468.3,468.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:471.2,472.115 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:472.115,474.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:491.2,491.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:491.19,493.23 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:493.23,495.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:496.3,508.21 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:508.21,510.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:511.3,511.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:522.2,522.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:522.43,535.34 5 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:535.34,556.30 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:556.30,558.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:559.4,559.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:559.44,561.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:562.4,562.106 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:562.106,564.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:575.4,575.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:575.74,577.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:578.4,579.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:579.18,581.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:583.4,584.28 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:584.28,586.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:588.4,588.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:588.31,599.57 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:599.57,601.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:601.17,604.7 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:606.5,607.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:607.21,609.6 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:615.5,615.138 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:615.138,617.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:617.27,619.7 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:620.6,620.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:622.5,623.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:623.26,625.6 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:626.5,626.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:630.4,631.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:631.20,633.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:634.4,634.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:634.22,637.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:637.26,639.6 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:640.5,640.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:645.4,660.77 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:660.77,662.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:663.4,664.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:664.25,666.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:667.4,667.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:673.2,673.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:673.26,675.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:677.2,678.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:678.25,680.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:681.2,681.97 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:681.97,683.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:690.2,691.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:691.21,693.33 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:693.33,695.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:696.3,696.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:696.33,698.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:699.3,699.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:699.49,704.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:721.3,721.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:721.54,722.84 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:722.84,724.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:728.2,728.99 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:728.99,730.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:732.2,733.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:733.22,735.10 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:736.109,737.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:738.100,739.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:740.114,741.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:742.107,743.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:744.11,745.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:748.2,749.43 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:749.43,751.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:753.2,755.34 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:755.34,756.48 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:756.48,757.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:757.19,760.5 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:764.2,764.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:764.31,767.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:768.2,768.35 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:768.35,771.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:772.2,772.76 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:772.76,776.3 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:778.2,780.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:780.16,782.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:782.20,785.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:788.2,788.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:788.25,798.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:798.18,800.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:800.9,800.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:800.30,807.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:808.3,808.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:808.36,810.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:811.3,812.50 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:812.50,815.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:816.3,822.17 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:822.17,824.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:826.3,836.17 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:836.17,838.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:839.3,839.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:842.2,843.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:843.30,844.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:844.52,846.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:846.9,848.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:851.2,869.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:869.21,871.43 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:871.43,873.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:874.3,874.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:874.29,876.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:886.3,886.76 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:886.76,888.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:890.2,890.105 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:890.105,892.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:893.2,894.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:894.16,896.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:901.2,904.40 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:904.40,905.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:905.15,906.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:909.3,910.63 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:910.63,912.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:912.9,914.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:916.3,916.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:916.43,918.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:919.3,920.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:920.20,922.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:925.3,925.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:925.23,928.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:929.3,931.33 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:931.33,934.39 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:934.39,936.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:939.2,948.42 5 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:948.42,950.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:950.21,952.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:952.9,955.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:959.2,959.53 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:959.53,960.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:960.54,961.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:961.33,963.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:964.9,972.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:973.3,973.60 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:973.60,974.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:974.40,976.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:978.3,978.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:978.61,979.41 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:979.41,981.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:983.3,983.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:983.28,985.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:986.3,987.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:989.2,989.51 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:989.51,991.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:995.2,997.53 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:997.53,999.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:999.8,1001.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1002.2,1002.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1002.22,1004.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1008.2,1014.76 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1014.76,1016.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1021.2,1021.57 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1021.57,1026.13 5 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1026.13,1029.21 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1029.21,1032.5 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1033.4,1033.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1033.49,1035.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1036.4,1043.89 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1043.89,1046.5 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1048.4,1048.86 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1052.2,1063.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1063.21,1065.40 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1065.40,1067.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1068.3,1068.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1068.38,1070.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1072.2,1074.18 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1074.18,1081.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1082.2,1082.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1082.28,1084.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1085.2,1085.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1085.16,1087.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1088.2,1088.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1088.30,1090.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1091.2,1091.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1091.30,1093.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1098.2,1098.76 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1098.76,1100.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1101.2,1102.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1102.16,1104.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1105.2,1105.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1111.94,1113.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1113.15,1115.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1117.2,1118.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1118.16,1120.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1122.2,1123.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1123.13,1125.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1126.2,1131.16 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1131.16,1133.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1134.2,1134.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1134.19,1136.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1146.2,1146.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1146.39,1148.55 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1148.55,1150.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1152.2,1152.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1152.39,1154.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1157.2,1158.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1158.21,1163.21 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1163.21,1165.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1166.3,1167.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1167.21,1169.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1170.3,1170.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1170.52,1172.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1173.3,1173.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1173.52,1178.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1179.3,1179.41 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1179.41,1182.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1183.3,1183.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1188.2,1188.46 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1188.46,1190.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1191.2,1191.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1191.27,1193.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1195.2,1196.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1196.16,1198.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1201.2,1210.16 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1210.16,1212.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1213.2,1213.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1218.59,1220.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1220.38,1222.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1225.2,1226.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1226.29,1227.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1227.22,1229.9 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1232.2,1232.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1232.18,1234.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1237.2,1244.29 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1244.29,1245.67 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1245.67,1247.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1249.2,1249.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1249.16,1251.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1254.2,1254.11 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1258.55,1260.47 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1260.47,1262.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1263.2,1264.58 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1264.58,1266.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1267.2,1267.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1270.252,1271.108 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1271.108,1273.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1274.2,1274.55 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1274.55,1276.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1277.2,1277.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1280.184,1282.69 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1282.69,1284.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1284.32,1285.58 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1285.58,1287.10 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1290.3,1290.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1290.18,1292.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1294.2,1294.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1294.19,1297.32 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1297.32,1298.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1298.39,1300.10 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1303.3,1303.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1303.19,1305.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1307.2,1307.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1307.21,1309.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1309.32,1310.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1310.49,1312.10 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1315.3,1315.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1315.18,1317.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1319.2,1319.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1319.28,1321.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1321.17,1323.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1324.3,1324.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1324.27,1326.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1328.2,1328.76 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1328.76,1330.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1331.2,1331.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1342.96,1343.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1343.26,1345.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1347.2,1348.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1348.16,1350.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1352.2,1363.23 9 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1363.23,1364.58 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1364.58,1365.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1365.31,1367.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1367.10,1369.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1373.2,1373.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1373.17,1375.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1376.2,1376.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1376.16,1378.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1379.2,1379.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1379.16,1381.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1382.2,1382.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1382.18,1384.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1385.2,1385.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1385.19,1387.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1388.2,1388.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1388.19,1390.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1396.2,1399.18 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1399.18,1400.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1400.61,1401.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1402.50,1403.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1404.12,1405.108 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1409.2,1410.42 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1410.42,1414.3 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1415.2,1420.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1420.16,1422.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1429.2,1444.43 6 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1444.43,1446.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1449.2,1451.27 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1451.27,1453.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1458.2,1458.46 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1458.46,1460.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1461.2,1461.63 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1461.63,1463.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1465.2,1466.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1466.15,1472.29 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1472.29,1479.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1479.18,1481.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1482.4,1482.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1482.23,1483.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1485.4,1485.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1485.30,1486.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1486.24,1488.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1488.32,1489.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1493.4,1494.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1494.30,1495.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1498.8,1504.29 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1504.29,1506.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1506.18,1508.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1509.4,1509.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1509.23,1510.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1512.4,1512.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1512.30,1513.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1513.24,1515.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1515.32,1516.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1520.4,1521.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1521.30,1522.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1526.2,1526.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1526.26,1528.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1528.17,1530.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1535.2,1535.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1535.74,1536.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1536.13,1537.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1537.33,1542.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1542.26,1544.39 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1544.39,1546.7 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1548.5,1548.82 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1565.2,1565.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1565.38,1569.27 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1569.27,1571.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1572.3,1572.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1572.27,1574.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1576.3,1581.32 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1581.32,1586.4 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1588.3,1592.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1592.18,1594.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1595.3,1596.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1596.17,1598.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1599.3,1599.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1602.2,1602.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1603.15,1618.32 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1618.32,1620.33 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1620.33,1621.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1621.40,1623.11 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1626.4,1638.6 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1640.3,1641.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1641.17,1643.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1644.3,1644.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1646.18,1648.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1648.17,1650.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1651.3,1651.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1653.10,1654.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1654.25,1656.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1657.3,1659.32 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1659.32,1661.33 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1661.33,1662.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1662.40,1664.11 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1667.4,1669.26 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1669.26,1671.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1672.4,1673.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1673.25,1675.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1676.4,1676.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1678.3,1678.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1690.51,1695.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1700.73,1702.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1702.16,1704.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1705.2,1706.48 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1706.48,1710.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1711.2,1713.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1713.16,1715.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1716.2,1716.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1727.117,1731.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1731.21,1733.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1734.2,1735.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1735.16,1737.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1738.2,1739.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1739.27,1741.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1742.2,1742.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1764.19,1775.30 7 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1775.30,1777.37 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1777.37,1779.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1781.3,1781.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1781.20,1783.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1797.2,1797.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1797.39,1799.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1801.2,1811.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1811.25,1813.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1815.2,1816.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1816.29,1818.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1824.2,1824.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1824.27,1826.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1831.2,1833.22 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1833.22,1835.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1837.2,1846.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1846.16,1848.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1853.2,1855.27 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1855.27,1857.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1859.2,1876.33 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1876.33,1878.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1880.2,1881.28 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1881.28,1885.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1885.20,1888.33 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1888.33,1889.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1889.40,1891.11 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1894.4,1894.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1894.20,1895.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1900.3,1900.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1900.22,1902.33 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1902.33,1903.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1903.50,1905.11 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1908.4,1908.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1908.19,1909.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1918.3,1918.56 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1918.56,1919.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1927.3,1927.64 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1927.64,1928.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1932.3,1935.32 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1935.32,1936.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1936.39,1938.10 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1942.3,1956.14 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1956.14,1957.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1957.37,1959.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1961.3,1962.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1962.26,1963.9 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1975.2,1975.59 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1975.59,1986.17 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1986.17,1988.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1990.3,1991.34 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1991.34,1993.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1995.3,1996.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1996.29,1998.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1998.21,2001.34 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2001.34,2002.41 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2002.41,2004.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2007.5,2007.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2007.21,2008.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2011.4,2011.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2011.23,2013.34 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2013.34,2014.51 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2014.51,2016.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2019.5,2019.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2019.20,2020.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2023.4,2023.57 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2023.57,2024.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2027.4,2027.65 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2027.65,2028.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2030.4,2031.33 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2031.33,2032.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2032.40,2034.11 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2037.4,2051.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2051.15,2052.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2052.38,2054.6 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2056.4,2057.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2057.27,2058.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2065.2,2066.28 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2066.28,2068.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2072.2,2072.71 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2072.71,2080.30 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2080.30,2081.41 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2081.41,2087.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2089.3,2089.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2089.13,2090.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2090.31,2095.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2095.25,2097.38 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2097.38,2099.7 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2101.5,2101.81 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2112.2,2112.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2112.38,2115.27 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2115.27,2117.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2121.3,2138.30 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2138.30,2140.11 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2140.11,2141.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2143.4,2160.15 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2160.15,2161.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2161.39,2163.6 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2165.4,2165.46 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2167.3,2173.24 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2173.24,2175.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2176.3,2176.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2179.2,2179.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2180.15,2182.24 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2182.24,2184.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2185.3,2185.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2187.18,2199.30 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2199.30,2201.11 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2201.11,2202.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2204.4,2208.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2208.15,2209.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2209.39,2211.6 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2213.4,2213.35 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2215.3,2216.24 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2216.24,2218.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2219.3,2219.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2220.10,2221.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2221.22,2223.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2224.3,2226.27 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2226.27,2228.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2228.20,2230.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2231.4,2233.26 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2233.26,2235.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2236.4,2237.23 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2237.23,2239.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2240.4,2240.46 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2240.46,2244.5 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2245.4,2245.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2247.3,2247.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2252.94,2254.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2254.16,2256.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2258.2,2260.18 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2260.18,2261.59 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2261.59,2262.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2262.36,2264.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2264.10,2266.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2270.2,2270.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2270.13,2272.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2273.2,2273.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2273.50,2275.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2277.2,2277.98 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2281.98,2282.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2282.26,2284.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2286.2,2287.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2287.16,2289.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2291.2,2292.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2292.13,2294.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2297.2,2298.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2298.19,2299.51 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2299.51,2301.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2302.3,2302.55 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2304.2,2304.42 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2304.42,2306.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2308.2,2308.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2308.54,2309.48 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2309.48,2311.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2312.3,2312.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2316.2,2318.53 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:17.82,19.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:21.149,22.55 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:22.55,24.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:25.2,25.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:25.36,27.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:28.2,34.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:34.16,36.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:37.2,37.42 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:37.42,39.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:40.2,40.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:43.105,44.48 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:44.48,46.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:47.2,48.54 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:51.129,53.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:53.16,55.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:56.2,57.53 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:57.53,59.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:60.2,61.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:61.25,63.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:64.2,65.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:65.16,67.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:68.2,68.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:26.97,27.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:27.18,29.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:30.2,30.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:33.37,35.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:37.81,38.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:38.44,40.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:41.2,41.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:41.38,43.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:44.2,44.57 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:47.88,48.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:48.32,50.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:51.2,52.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:52.20,54.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:55.2,55.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:58.40,72.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:74.106,75.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:75.34,77.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:78.2,79.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:79.16,81.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:83.2,84.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:84.16,86.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:88.2,89.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:89.13,91.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:93.2,94.63 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:94.63,96.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:98.2,98.72 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:98.72,100.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:102.2,106.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:109.117,110.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:110.32,112.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:113.2,113.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:113.34,115.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:117.2,118.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:118.16,120.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:121.2,121.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:121.19,123.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:125.2,126.69 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:126.69,128.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:130.2,136.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:18.33,20.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:22.27,37.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:39.93,40.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:40.30,42.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:43.2,43.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:43.28,45.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:46.2,47.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:47.16,49.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:51.2,52.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:52.17,54.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:55.2,56.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:56.19,58.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:59.2,59.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:59.19,61.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:62.2,63.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:63.16,65.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:67.2,74.9 3 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:74.9,76.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:77.2,78.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:78.15,80.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:81.2,85.16 4 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:85.16,87.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:88.2,88.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:88.17,90.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:92.2,101.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:104.48,105.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:105.16,107.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:108.2,109.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:109.29,111.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:112.2,112.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:112.31,114.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:115.2,115.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:118.75,120.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:120.27,121.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:121.32,123.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:123.17,124.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:126.4,126.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:129.2,134.33 3 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:134.33,136.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:137.2,137.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:137.40,138.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:138.39,140.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:141.3,141.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:143.2,143.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:143.34,145.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:146.2,147.35 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:147.35,149.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:150.2,150.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:153.77,154.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:154.20,156.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:157.2,159.31 3 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:159.31,160.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:160.33,162.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:163.3,163.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:163.30,165.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:167.2,170.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:23.91,25.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:27.38,50.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:52.104,53.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:53.38,55.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:56.2,57.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:57.16,59.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:61.2,62.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:62.26,64.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:65.2,66.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:66.30,68.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:69.2,69.72 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:69.72,71.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:73.2,74.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:74.16,76.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:77.2,78.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:78.16,80.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:81.2,82.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:82.16,84.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:85.2,86.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:86.16,88.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:90.2,105.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:105.16,107.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:109.2,109.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:109.19,117.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:118.2,118.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:118.25,120.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:121.2,121.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:121.30,123.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:124.2,124.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:124.31,126.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:127.2,128.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:128.16,130.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:131.2,131.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:134.91,136.9 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:136.9,138.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:139.2,140.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:140.15,141.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:141.19,143.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:144.3,144.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:146.2,146.94 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:149.59,150.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:150.16,152.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:153.2,154.61 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:154.61,156.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:157.2,157.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:160.56,161.75 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:161.75,163.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:164.2,164.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:167.67,169.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:170.17,171.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:172.67,173.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:174.10,175.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:179.60,180.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:180.16,182.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:183.2,184.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:184.25,186.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:187.2,187.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:190.57,191.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:192.15,193.81 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:193.81,195.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:196.3,196.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:197.19,199.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:199.17,201.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:202.3,202.55 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:202.55,204.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:205.3,205.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:206.14,207.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:208.11,209.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:210.10,211.41 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:215.59,216.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:216.16,218.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:219.2,219.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:220.12,221.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:222.14,223.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:224.10,225.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:28.90,30.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:30.16,32.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:34.2,36.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:37.16,38.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:40.16,42.140 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:44.20,46.140 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:48.17,50.142 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:52.17,56.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:56.50,62.63 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:62.63,64.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:66.4,66.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:66.45,68.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:72.4,74.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:74.25,76.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:77.4,77.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:80.3,80.101 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:82.18,84.141 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:86.18,88.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:88.18,90.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:91.3,91.41 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:93.17,96.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:96.50,99.59 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:99.59,101.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:102.4,104.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:104.25,106.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:107.4,107.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:110.3,110.98 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:112.10,116.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:125.86,126.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:126.16,128.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:129.2,130.9 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:130.9,132.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:133.2,133.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:133.22,135.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:137.2,139.31 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:139.31,141.10 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:141.10,143.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:144.3,145.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:145.22,147.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:148.3,149.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:149.26,151.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:152.3,152.68 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:152.68,154.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:155.3,156.37 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:156.37,158.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:159.3,160.107 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:162.2,162.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:165.249,166.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:166.24,168.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:169.2,169.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:169.38,171.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:173.2,174.31 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:174.31,175.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:175.32,177.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:180.2,181.34 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:181.34,182.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:182.29,183.9 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:185.3,197.17 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:197.17,199.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:200.3,200.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:200.20,201.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:203.3,203.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:203.37,205.33 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:205.33,206.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:208.4,208.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:208.19,209.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:209.43,210.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:212.5,212.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:214.4,215.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:215.30,216.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:220.2,220.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:223.113,229.2 5 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:231.101,233.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:247.92,251.16 4 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:251.16,253.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:253.8,253.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:253.24,255.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:259.2,272.51 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:272.51,274.38 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:274.38,275.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:276.50,277.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:278.12,279.107 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:287.2,292.26 5 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:292.26,294.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:297.2,297.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:297.19,301.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:303.2,311.42 5 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:311.42,315.3 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:316.2,341.64 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:341.64,342.86 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:342.86,344.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:345.3,345.56 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:345.56,347.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:348.3,360.19 6 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:360.19,364.4 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:365.3,365.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:369.2,370.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:370.15,372.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:372.27,374.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:375.3,375.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:375.27,377.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:380.2,381.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:381.15,387.28 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:387.28,395.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:395.18,397.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:398.4,398.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:398.23,399.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:401.4,401.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:401.30,402.66 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:402.66,403.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:405.5,406.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:406.12,407.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:409.5,409.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:409.28,413.6 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:414.5,415.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:415.30,416.11 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:419.4,420.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:420.30,421.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:424.8,432.28 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:432.28,438.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:438.18,440.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:441.4,441.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:441.23,442.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:444.4,444.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:444.30,445.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:445.40,447.31 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:447.31,448.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:452.4,455.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:455.30,456.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:461.2,465.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:465.17,467.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:469.2,470.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:470.16,472.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:473.2,473.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:20.79,21.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:21.43,23.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:24.2,24.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:24.29,26.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:27.2,27.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:30.40,63.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:65.68,71.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:71.25,74.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:75.2,75.67 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:78.62,83.19 3 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:83.19,87.3 3 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:88.2,88.89 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:91.101,92.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:92.22,94.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:95.2,96.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:96.18,98.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:99.2,100.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:100.16,102.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:103.2,104.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:104.16,106.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:107.2,107.119 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:110.99,111.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:111.22,113.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:114.2,115.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:115.18,117.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:118.2,119.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:119.16,121.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:122.2,122.51 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:122.51,124.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:125.2,126.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:126.16,128.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:129.2,131.15 3 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:131.15,132.69 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:132.69,134.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:135.3,135.58 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:137.2,137.130 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:140.102,142.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:142.16,144.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:145.2,145.64 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:145.64,147.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:148.2,148.113 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:151.109,153.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:153.16,155.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:156.2,157.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:157.16,159.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:160.2,161.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:161.16,163.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:164.2,164.67 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:167.107,169.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:169.16,171.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:172.2,173.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:173.16,175.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:176.2,176.107 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:176.107,178.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:179.2,179.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:180.41,181.63 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:182.41,183.95 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:184.10,185.83 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:189.111,191.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:191.16,193.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:194.2,195.57 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:195.57,197.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:198.2,199.23 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:199.23,201.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:202.2,203.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:203.16,205.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:206.2,206.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:206.17,208.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:209.2,209.108 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:212.63,215.2 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:217.69,219.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:219.16,221.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:222.2,222.79 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:225.60,227.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:227.16,229.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:230.2,230.57 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:233.137,234.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:234.49,236.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:237.2,238.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:238.16,240.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:241.2,243.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:243.16,245.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:246.2,247.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:247.16,249.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:250.2,250.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:250.22,252.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:253.2,253.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:256.142,258.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:258.16,260.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:261.2,262.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:262.16,264.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:265.2,265.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:265.47,267.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:268.2,269.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:269.16,270.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:270.50,272.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:273.3,273.89 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:275.2,275.173 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:278.157,280.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:280.16,282.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:283.2,283.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:283.47,285.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:286.2,287.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:287.16,288.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:288.50,290.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:291.3,291.89 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:293.2,293.169 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:296.104,297.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:297.22,299.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:300.2,301.61 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:301.61,303.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:303.20,304.9 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:307.2,307.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:307.19,309.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:310.2,317.8 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:320.119,322.39 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:322.39,323.81 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:323.81,325.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:327.2,327.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:330.71,332.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:332.16,334.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:335.2,335.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:17.61,105.23 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:105.23,122.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:123.2,123.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:126.104,127.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:127.61,129.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:130.2,130.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:130.38,132.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:133.2,134.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:134.16,136.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:137.2,138.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:138.16,140.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:141.2,147.107 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:147.107,149.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:150.2,151.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:151.16,153.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:154.2,170.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:170.19,172.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:173.2,173.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:176.103,177.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:177.61,179.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:180.2,180.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:180.38,182.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:183.2,184.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:184.16,186.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:187.2,191.106 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:191.106,193.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:194.2,195.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:195.16,197.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:198.2,200.31 3 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:200.31,207.36 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:207.36,218.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:219.3,220.35 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:222.2,230.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:233.107,234.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:234.61,236.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:237.2,237.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:237.38,239.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:240.2,241.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:241.16,243.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:244.2,248.110 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:248.110,250.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:251.2,252.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:252.16,254.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:255.2,256.33 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:256.33,266.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:267.2,275.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:278.108,279.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:279.61,281.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:282.2,282.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:282.37,284.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:285.2,286.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:286.16,288.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:289.2,290.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:290.19,292.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:293.2,293.104 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:293.104,295.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:296.2,297.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:297.16,299.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:300.2,307.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:307.16,309.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:310.2,311.43 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:311.43,318.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:319.2,332.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:332.22,334.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:335.2,335.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:338.108,339.62 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:339.62,341.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:342.2,342.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:342.38,344.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:345.2,346.9 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:346.9,348.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:349.2,350.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:350.16,352.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:353.2,357.16 5 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:357.16,359.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:360.2,370.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:373.109,374.62 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:374.62,376.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:377.2,377.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:377.38,379.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:380.2,381.9 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:381.9,383.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:384.2,385.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:385.16,387.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:388.2,390.32 3 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:390.32,392.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:393.2,394.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:394.16,396.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:397.2,403.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:406.106,407.62 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:407.62,409.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:410.2,410.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:410.38,412.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:413.2,414.9 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:414.9,416.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:417.2,418.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:418.16,420.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:421.2,423.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:423.16,424.41 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:424.41,434.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:435.3,435.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:437.2,445.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:483.65,484.42 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:484.42,485.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:485.39,487.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:489.2,489.85 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:489.85,491.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:492.2,492.95 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:495.102,496.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:496.38,498.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:499.2,499.58 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:499.58,501.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:502.2,502.90 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:505.60,508.2 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:510.66,512.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:512.26,514.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:515.2,515.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:518.69,521.33 3 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:521.33,523.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:523.21,524.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:526.3,526.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:526.34,527.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:529.3,530.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:532.2,532.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:535.63,537.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:537.19,539.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:540.2,541.42 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:541.42,543.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:544.2,544.57 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:544.57,546.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:547.2,547.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:547.54,549.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:550.2,550.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:553.70,557.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:559.66,561.9 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:561.9,563.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:564.2,566.17 3 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:566.17,568.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:569.2,569.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:570.103,572.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:573.34,574.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:575.10,576.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:580.56,581.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:581.37,583.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:584.2,584.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:584.26,586.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:586.37,587.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:589.3,589.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:591.2,591.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:594.90,602.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:604.68,605.71 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:605.71,607.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:607.17,609.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:610.3,610.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:612.2,613.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:613.16,615.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:616.2,617.41 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:617.41,619.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:620.2,620.78 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:623.65,625.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:625.16,627.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:628.2,628.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:628.17,630.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:631.2,631.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:634.51,635.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:635.16,637.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:638.2,638.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:641.56,642.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:642.28,644.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:645.2,646.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:649.92,651.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:651.29,653.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:654.2,654.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:657.86,659.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:659.29,661.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:662.2,662.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:665.94,667.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:667.29,669.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:670.2,670.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:673.98,675.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:675.29,677.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:678.2,678.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:17.93,18.104 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:18.104,20.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:22.2,23.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:23.16,25.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:27.2,28.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:28.19,30.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:32.2,35.33 3 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:35.33,36.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:36.47,39.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:42.2,44.20 3 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:44.20,47.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:48.2,49.68 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:49.68,50.48 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:50.48,52.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:53.3,53.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:53.32,55.23 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:55.23,56.63 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:56.63,58.6 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:59.5,59.53 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:61.4,61.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:64.2,71.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:71.17,73.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:73.8,73.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:73.29,75.36 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:75.36,77.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:78.3,83.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:86.2,86.35 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:86.35,88.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:90.2,97.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:97.16,99.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:101.2,110.28 3 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:110.28,112.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:113.2,124.16 4 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:124.16,126.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:127.2,127.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:133.93,134.35 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:134.35,136.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:138.2,139.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:139.16,141.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:143.2,144.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:144.16,146.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:147.2,147.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:147.17,149.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:151.2,152.33 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:152.33,153.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:153.47,156.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:159.2,160.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:160.16,162.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:164.2,176.26 3 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:176.26,178.23 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:178.23,180.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:181.3,192.5 3 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:195.2,196.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:196.16,198.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:199.2,199.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:22.104,24.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:24.16,26.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:28.2,29.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:29.18,31.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:33.2,33.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:34.13,35.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:36.13,37.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:38.14,39.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:40.16,41.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:42.10,43.95 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:51.67,53.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:57.68,58.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:58.33,60.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:61.2,61.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:67.42,69.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:74.61,76.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:76.26,78.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:79.2,79.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:85.90,86.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:86.49,88.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:90.2,91.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:91.15,93.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:94.2,95.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:95.17,97.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:100.2,103.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:103.16,105.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:107.2,113.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:113.12,115.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:115.18,117.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:118.3,119.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:119.20,121.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:122.3,124.48 3 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:125.8,127.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:129.2,130.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:130.16,132.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:134.2,139.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:145.90,147.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:147.15,149.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:151.2,152.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:152.16,154.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:156.2,157.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:157.16,158.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:158.47,160.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:161.3,161.56 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:164.2,170.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:170.19,173.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:173.8,175.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:176.2,176.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:181.92,183.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:183.16,185.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:187.2,188.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:188.16,190.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:192.2,200.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:200.25,207.28 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:207.28,209.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:210.3,210.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:212.2,212.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:216.93,217.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:217.52,219.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:221.2,222.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:222.15,224.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:226.2,227.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:227.16,229.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:231.2,231.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:231.47,232.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:232.47,234.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:235.3,235.59 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:238.2,241.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:35.127,36.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:36.23,38.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:39.2,40.40 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:40.40,42.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:43.2,43.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:43.37,45.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:46.2,46.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:46.37,48.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:49.2,49.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:52.23,80.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:82.26,140.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:142.92,143.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:143.25,145.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:147.2,148.49 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:148.49,150.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:152.2,152.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:153.17,154.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:154.24,156.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:157.3,158.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:158.17,160.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:161.3,165.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:166.17,167.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:167.22,169.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:170.3,170.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:170.22,172.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:173.3,174.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:174.17,176.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:177.3,181.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:182.16,189.23 7 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:189.23,191.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:192.3,192.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:192.24,194.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:195.3,195.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:195.39,197.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:198.3,207.17 3 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:207.17,209.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:210.3,210.69 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:210.69,212.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:213.3,213.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:214.10,215.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:219.92,220.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:220.25,222.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:224.2,225.49 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:225.49,227.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:229.2,229.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:230.17,232.24 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:232.24,234.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:235.3,236.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:236.17,238.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:239.3,239.59 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:239.59,241.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:242.3,242.81 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:242.81,244.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:245.3,250.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:251.17,253.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:253.22,255.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:256.3,257.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:257.17,259.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:260.3,260.79 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:260.79,262.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:263.3,268.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:269.10,270.66 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:274.91,276.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:276.16,278.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:279.2,279.67 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:279.67,280.76 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:280.76,282.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:285.2,286.52 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:286.52,288.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:289.2,289.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:292.74,294.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:294.16,296.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:297.2,297.62 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:297.62,299.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:300.2,300.68 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:303.109,304.56 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:304.56,306.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:307.2,307.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:307.25,309.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:310.2,310.81 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:310.81,312.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:313.2,313.102 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:313.102,315.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:316.2,316.108 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:316.108,318.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:319.2,319.99 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:319.99,321.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:322.2,322.99 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:322.99,324.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:325.2,325.60 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:325.60,327.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:328.2,328.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:328.34,330.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:331.2,331.114 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:331.114,333.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:334.2,334.66 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:334.66,336.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:337.2,337.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:337.40,339.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:340.2,340.132 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:340.132,342.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:343.2,343.35 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:343.35,345.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:346.2,346.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:349.92,350.103 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:350.103,352.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:354.2,355.52 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:355.52,357.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:358.2,358.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:358.32,360.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:361.2,361.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:364.108,365.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:365.19,367.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:368.2,369.53 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:369.53,371.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:372.2,372.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:372.19,374.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:375.2,375.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:375.39,376.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:376.34,378.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:380.2,380.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:383.66,385.53 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:385.53,387.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:388.2,388.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:388.19,390.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:391.2,391.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:10.101,12.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:12.16,14.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:16.2,18.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:19.16,20.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:21.14,22.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:23.15,24.84 1 0 +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:25.16,26.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:27.10,28.97 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:21.75,23.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:25.41,28.2 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:30.31,37.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:39.38,46.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:48.50,56.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:58.43,70.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:72.80,73.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:73.36,75.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:76.2,76.48 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:76.48,78.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:79.2,79.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:82.97,84.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:84.16,86.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:87.2,88.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:88.16,90.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:91.2,92.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:92.16,94.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:95.2,96.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:96.16,98.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:99.2,99.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:102.104,104.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:104.16,106.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:107.2,108.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:108.16,110.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:111.2,112.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:112.16,114.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:115.2,116.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:116.16,118.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:119.2,119.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:122.96,124.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:124.16,126.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:127.2,128.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:128.19,130.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:131.2,132.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:132.18,134.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:135.2,141.79 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:141.79,143.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:143.17,145.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:146.3,146.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:148.2,148.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:151.77,153.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:153.16,155.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:156.2,157.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:157.19,159.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:160.2,160.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:10.101,12.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:12.16,14.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:16.2,17.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:17.18,19.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:21.2,21.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:22.15,23.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:24.13,25.42 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:26.14,27.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:28.16,29.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:30.16,31.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:32.10,33.102 1 0 diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/repeat-01/create-database.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/repeat-01/create-database.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/repeat-01/create-database.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/repeat-01/create-database.stdout.log new file mode 100644 index 00000000..4b15bd57 --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/repeat-01/create-database.stdout.log @@ -0,0 +1 @@ +CREATE DATABASE diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/repeat-01/create-pgvector.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/repeat-01/create-pgvector.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/repeat-01/create-pgvector.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/repeat-01/create-pgvector.stdout.log new file mode 100644 index 00000000..d26bad14 --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/repeat-01/create-pgvector.stdout.log @@ -0,0 +1 @@ +CREATE EXTENSION diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/repeat-01/database-identity.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/repeat-01/database-identity.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/repeat-01/database-identity.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/repeat-01/database-identity.stdout.log new file mode 100644 index 00000000..7f3454f0 --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/repeat-01/database-identity.stdout.log @@ -0,0 +1 @@ +{"database" : "engram_prc_rg_test_3ce6312b91ffa9ad_r1", "schema" : "public", "server_version" : "17.10 (Debian 17.10-1.pgdg12+1)", "user" : "engram"} diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/repeat-01/go-test-summary.json b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/repeat-01/go-test-summary.json new file mode 100644 index 00000000..30170530 --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/repeat-01/go-test-summary.json @@ -0,0 +1,40 @@ +{ + "schema_version": 1, + "verdict": "FAIL", + "input_path": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-raw-sql-proof\\repeat-01\\go-test.stdout.jsonl", + "fail_on_unexpected_skip": true, + "allowed_skip_identities": [], + "counts": { + "packages": 1, + "tests": 1, + "passed": 0, + "failed": 1, + "skipped": 0, + "no_tests": 0, + "zero_tests": 0, + "incomplete": 0, + "unexpected_skips": 0, + "malformed_lines": 0 + }, + "packages": [ + { + "package": "github.com/thebtf/engram/internal/mcp", + "outcome": "fail", + "elapsed_seconds": 3.95, + "last_output": "FAIL\tgithub.com/thebtf/engram/internal/mcp\t3.942s", + "tests_observed": 1 + } + ], + "tests": [ + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestEC_F1_TagDerivedBackfill_T007", + "outcome": "fail", + "elapsed_seconds": 3.69, + "last_output": "--- FAIL: TestEC_F1_TagDerivedBackfill_T007 (3.69s)", + "skip_allowed": false + } + ], + "unexpected_skips": [], + "errors": [] +} diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/repeat-01/go-test.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/repeat-01/go-test.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/repeat-01/go-test.stdout.jsonl b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/repeat-01/go-test.stdout.jsonl new file mode 100644 index 00000000..c5b1fcf9 --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/repeat-01/go-test.stdout.jsonl @@ -0,0 +1,30 @@ +{"Time":"2026-07-11T03:59:20.2973848+03:00","Action":"start","Package":"github.com/thebtf/engram/internal/mcp"} +{"Time":"2026-07-11T03:59:20.5188465+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007"} +{"Time":"2026-07-11T03:59:20.5188465+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":"=== RUN TestEC_F1_TagDerivedBackfill_T007\n"} +{"Time":"2026-07-11T03:59:21.3555561+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":"{\"level\":\"warn\",\"error\":\"ERROR: relation \\\"observation_vectors\\\" does not exist (SQLSTATE 42P01)\",\"time\":\"2026-07-11T03:59:21+03:00\",\"message\":\"migration 040: orphan vector cleanup failed (non-fatal)\"}\n"} +{"Time":"2026-07-11T03:59:21.3555561+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":"{\"level\":\"info\",\"garbage_deleted\":0,\"orphan_vectors_deleted\":0,\"time\":\"2026-07-11T03:59:21+03:00\",\"message\":\"migration 040: garbage cleanup complete\"}\n"} +{"Time":"2026-07-11T03:59:21.3640555+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":"{\"level\":\"info\",\"orphan_vectors_deleted\":0,\"time\":\"2026-07-11T03:59:21+03:00\",\"message\":\"migration 041: orphan vector purge complete\"}\n"} +{"Time":"2026-07-11T03:59:21.3715555+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":"{\"level\":\"info\",\"patterns_deleted\":0,\"time\":\"2026-07-11T03:59:21+03:00\",\"message\":\"migration 042: low-quality pattern purge complete\"}\n"} +{"Time":"2026-07-11T03:59:21.4030853+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":"{\"level\":\"info\",\"total_deleted\":0,\"time\":\"2026-07-11T03:59:21+03:00\",\"message\":\"migration 043: radical observation cleanup complete\"}\n"} +{"Time":"2026-07-11T03:59:22.6441999+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":"{\"level\":\"warn\",\"error\":\"ERROR: extension \\\"vectorscale\\\" is not available (SQLSTATE 0A000)\",\"time\":\"2026-07-11T03:59:22+03:00\",\"message\":\"migration 109: vectorscale extension not available, skipping DiskANN index\"}\n"} +{"Time":"2026-07-11T03:59:23.8483994+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":"{\"level\":\"debug\",\"connections\":1,\"time\":\"2026-07-11T03:59:23+03:00\",\"message\":\"Connection pool warmed\"}\n"} +{"Time":"2026-07-11T03:59:23.8704+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":" store_memory_compat_t007_test.go:138: \n"} +{"Time":"2026-07-11T03:59:23.8704+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":" \tError Trace:\tD:/Dev/engram/.w/t007-r1-checker/internal/mcp/store_memory_compat_t007_test.go:138\n"} +{"Time":"2026-07-11T03:59:23.8704+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":" \tError: \tNot equal: \n"} +{"Time":"2026-07-11T03:59:23.8704+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":" \t \texpected: \"global\"\n"} +{"Time":"2026-07-11T03:59:23.8704+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":" \t \tactual : \"project\"\n"} +{"Time":"2026-07-11T03:59:23.8704+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":" \t \t\n"} +{"Time":"2026-07-11T03:59:23.8704+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":" \t \tDiff:\n"} +{"Time":"2026-07-11T03:59:23.8704+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":" \t \t--- Expected\n"} +{"Time":"2026-07-11T03:59:23.8704+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":" \t \t+++ Actual\n"} +{"Time":"2026-07-11T03:59:23.8704+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":" \t \t@@ -1 +1 @@\n"} +{"Time":"2026-07-11T03:59:23.8704+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":" \t \t-global\n"} +{"Time":"2026-07-11T03:59:23.8704+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":" \t \t+project\n"} +{"Time":"2026-07-11T03:59:23.8704+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":" \tTest: \tTestEC_F1_TagDerivedBackfill_T007\n"} +{"Time":"2026-07-11T03:59:23.8704+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":" \tMessages: \trow with scope:global tag -\u003e privacy_scope='global'\n"} +{"Time":"2026-07-11T03:59:24.2097994+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":"--- FAIL: TestEC_F1_TagDerivedBackfill_T007 (3.69s)\n"} +{"Time":"2026-07-11T03:59:24.2097994+03:00","Action":"fail","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Elapsed":3.69} +{"Time":"2026-07-11T03:59:24.2097994+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Output":"FAIL\n"} +{"Time":"2026-07-11T03:59:24.2237989+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Output":"coverage: 0.1% of statements\n"} +{"Time":"2026-07-11T03:59:24.2473849+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Output":"FAIL\tgithub.com/thebtf/engram/internal/mcp\t3.942s\n"} +{"Time":"2026-07-11T03:59:24.2473849+03:00","Action":"fail","Package":"github.com/thebtf/engram/internal/mcp","Elapsed":3.95} diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/repeat-01/pg-stat-activity-after.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/repeat-01/pg-stat-activity-after.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/repeat-01/pg-stat-activity-after.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/repeat-01/pg-stat-activity-after.stdout.log new file mode 100644 index 00000000..fe51488c --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/repeat-01/pg-stat-activity-after.stdout.log @@ -0,0 +1 @@ +[] diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/repeat-01/pg-stat-activity-before.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/repeat-01/pg-stat-activity-before.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/repeat-01/pg-stat-activity-before.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/repeat-01/pg-stat-activity-before.stdout.log new file mode 100644 index 00000000..fe51488c --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/repeat-01/pg-stat-activity-before.stdout.log @@ -0,0 +1 @@ +[] diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/repeat-01/repeat-summary.json b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/repeat-01/repeat-summary.json new file mode 100644 index 00000000..428125b9 --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/repeat-01/repeat-summary.json @@ -0,0 +1,36 @@ +{ + "repeat": 1, + "verdict": "FAIL", + "database": "engram_prc_rg_test_3ce6312b91ffa9ad_r1", + "schema": "public", + "database_schema_identity": "engram_prc_rg_test_3ce6312b91ffa9ad_r1.public", + "database_dsn": "REDACTED_DATABASE_DSN", + "database_create_confirmed": true, + "sequential_execution": { + "package_parallelism": 1, + "test_parallelism": 1 + }, + "race": false, + "connection_budget": 20, + "server_sessions_before": 6, + "server_sessions_after": 6, + "sessions_before": 0, + "sessions_after": 0, + "go_test_exit": 1, + "json_parser_exit": 1, + "coverage_policy": "Targeted", + "coverage_exit": 0, + "cleanup_exit": 0, + "cleanup_status": "PASS", + "required_session_start_execution": { + "schema_version": 1, + "verdict": "NOT_APPLICABLE", + "reason": "only an unfiltered canonical ./... run requires the 12-test session-start execution proof" + }, + "cleanup_summary": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-raw-sql-proof\\repeat-01\\cleanup\\cleanup.json", + "errors": [ + "go test failed with exit 1", + "go test JSON assertion failed with exit 1" + ], + "artifact_directory": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-raw-sql-proof\\repeat-01" +} diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/repeat-01/server-connection-count-after.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/repeat-01/server-connection-count-after.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/repeat-01/server-connection-count-after.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/repeat-01/server-connection-count-after.stdout.log new file mode 100644 index 00000000..1e8b3149 --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/repeat-01/server-connection-count-after.stdout.log @@ -0,0 +1 @@ +6 diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/repeat-01/server-connection-count-before.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/repeat-01/server-connection-count-before.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/repeat-01/server-connection-count-before.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/repeat-01/server-connection-count-before.stdout.log new file mode 100644 index 00000000..1e8b3149 --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/repeat-01/server-connection-count-before.stdout.log @@ -0,0 +1 @@ +6 diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/repeat-01/targeted-coverage.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/repeat-01/targeted-coverage.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/repeat-01/targeted-coverage.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/repeat-01/targeted-coverage.stdout.log new file mode 100644 index 00000000..c958686c --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/repeat-01/targeted-coverage.stdout.log @@ -0,0 +1,352 @@ +github.com/thebtf/engram/internal/mcp/audit_helpers.go:33: effectiveAuditWriter 0.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:44: isAuditEnabled 0.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:52: runAuditAsync 0.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:77: marshalState 0.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:92: logAuditCreate 0.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:117: logAuditEdit 0.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:142: logAuditDelete 0.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:166: logAuditGeneric 0.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:189: logAuditSupersede 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:30: parseArgs 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:46: coerceString 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:67: coerceInt 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:97: coerceInt64 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:127: coerceFloat64 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:151: coerceBool 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:177: coerceStringSlice 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:204: coerceInt64Slice 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:222: clampToInt 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:236: clampInt64ToInt 0.0% +github.com/thebtf/engram/internal/mcp/context.go:17: extractProjectFromHeader 0.0% +github.com/thebtf/engram/internal/mcp/context.go:22: contextWithProject 0.0% +github.com/thebtf/engram/internal/mcp/context.go:29: ContextWithProject 0.0% +github.com/thebtf/engram/internal/mcp/context.go:35: projectFromContext 0.0% +github.com/thebtf/engram/internal/mcp/context.go:41: contextWithSession 0.0% +github.com/thebtf/engram/internal/mcp/context.go:48: ContextWithSession 0.0% +github.com/thebtf/engram/internal/mcp/context.go:54: sessionFromContext 0.0% +github.com/thebtf/engram/internal/mcp/context.go:61: actorFromContext 0.0% +github.com/thebtf/engram/internal/mcp/health.go:22: NewMCPHealth 0.0% +github.com/thebtf/engram/internal/mcp/health.go:29: RecordRequest 0.0% +github.com/thebtf/engram/internal/mcp/health.go:36: RecordError 0.0% +github.com/thebtf/engram/internal/mcp/health.go:42: rotateWindowIfNeeded 0.0% +github.com/thebtf/engram/internal/mcp/health.go:55: HandleHealth 0.0% +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:28: ruleGovernanceCaptureEnabled 0.0% +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:39: captureActiveRuleIntent 0.0% +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:104: ruleIntentFingerprint 0.0% +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:113: marshalRuleCandidateIntentResponse 0.0% +github.com/thebtf/engram/internal/mcp/server.go:127: NewServer 100.0% +github.com/thebtf/engram/internal/mcp/server.go:141: SetBackfillStatusFunc 0.0% +github.com/thebtf/engram/internal/mcp/server.go:146: SetVersionedDocumentStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:151: SetIssueStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:156: SetMemoryStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:161: SetMetaMemoryIndex 0.0% +github.com/thebtf/engram/internal/mcp/server.go:166: SetHintQueue 0.0% +github.com/thebtf/engram/internal/mcp/server.go:171: SetStateStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:176: SetDirectiveCaptureService 0.0% +github.com/thebtf/engram/internal/mcp/server.go:181: SetBehavioralRulesStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:186: SetRuleGovernanceStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:191: SetRuleInjectionTelemetryStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:195: SetPromotionStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:199: SetGraphStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:204: SetNodesStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:211: SetAuditStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:216: SetPurgeStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:222: SetCandidateStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:228: SetSnapshotStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:234: SetBulkFacade 0.0% +github.com/thebtf/engram/internal/mcp/server.go:240: setTestAuditWriter 0.0% +github.com/thebtf/engram/internal/mcp/server.go:246: setTestMemoryEditor 0.0% +github.com/thebtf/engram/internal/mcp/server.go:252: setTestMemorySignificanceUpdater 0.0% +github.com/thebtf/engram/internal/mcp/server.go:260: SetWriteLintOrchestrator 0.0% +github.com/thebtf/engram/internal/mcp/server.go:269: SetRedactionRules 0.0% +github.com/thebtf/engram/internal/mcp/server.go:274: SetEmbeddingStores 0.0% +github.com/thebtf/engram/internal/mcp/server.go:282: SetRerankClient 0.0% +github.com/thebtf/engram/internal/mcp/server.go:290: SetStatsDB 0.0% +github.com/thebtf/engram/internal/mcp/server.go:297: HandleRequest 0.0% +github.com/thebtf/engram/internal/mcp/server.go:303: ListTools 0.0% +github.com/thebtf/engram/internal/mcp/server.go:332: Version 0.0% +github.com/thebtf/engram/internal/mcp/server.go:383: Run 0.0% +github.com/thebtf/engram/internal/mcp/server.go:427: handleRequest 0.0% +github.com/thebtf/engram/internal/mcp/server.go:461: handleNotification 0.0% +github.com/thebtf/engram/internal/mcp/server.go:473: handleInitialize 0.0% +github.com/thebtf/engram/internal/mcp/server.go:496: buildInstructions 0.0% +github.com/thebtf/engram/internal/mcp/server.go:660: storeMemoryTool 0.0% +github.com/thebtf/engram/internal/mcp/server.go:712: recallMemoryTool 0.0% +github.com/thebtf/engram/internal/mcp/server.go:805: primaryTools 0.0% +github.com/thebtf/engram/internal/mcp/server.go:942: handleToolsList 0.0% +github.com/thebtf/engram/internal/mcp/server.go:1612: handleToolsCall 0.0% +github.com/thebtf/engram/internal/mcp/server.go:1644: sanitizeToolCallArgs 0.0% +github.com/thebtf/engram/internal/mcp/server.go:1656: callTool 0.0% +github.com/thebtf/engram/internal/mcp/server.go:1874: sendResponse 0.0% +github.com/thebtf/engram/internal/mcp/server.go:1884: sendError 0.0% +github.com/thebtf/engram/internal/mcp/server.go:1896: handleFindSimilarObservations 0.0% +github.com/thebtf/engram/internal/mcp/server.go:1927: handleGetMemoryStats 0.0% +github.com/thebtf/engram/internal/mcp/server.go:2055: handleBackfillStatus 0.0% +github.com/thebtf/engram/internal/mcp/server.go:2071: handleCheckSystemHealth 0.0% +github.com/thebtf/engram/internal/mcp/server.go:2216: handleAnalyzeSearchPatterns 0.0% +github.com/thebtf/engram/internal/mcp/server.go:2246: handleSearchSessions 0.0% +github.com/thebtf/engram/internal/mcp/server.go:2251: handleListSessions 0.0% +github.com/thebtf/engram/internal/mcp/tools_admin.go:18: buildAdminTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_admin.go:68: adminActionsForEnv 33.3% +github.com/thebtf/engram/internal/mcp/tools_admin.go:80: vnextEnabled 0.0% +github.com/thebtf/engram/internal/mcp/tools_admin.go:84: handleAdmin 0.0% +github.com/thebtf/engram/internal/mcp/tools_admin.go:120: handlePurgeProject 0.0% +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:27: ambientHintsEnabledFromEnv 0.0% +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:32: ambientHintsTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:48: handleGetAmbientHints 0.0% +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:86: normalizeAmbientHintsToolLimit 0.0% +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:96: ambientHintItems 0.0% +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:114: errMissingSessionID 0.0% +github.com/thebtf/engram/internal/mcp/tools_brief.go:31: handleGetMemoryBrief 0.0% +github.com/thebtf/engram/internal/mcp/tools_brief.go:107: memoryBriefUsesPrincipalScope 0.0% +github.com/thebtf/engram/internal/mcp/tools_brief.go:115: handlePrincipalMemoryBrief 0.0% +github.com/thebtf/engram/internal/mcp/tools_brief.go:259: truncateBriefContent 0.0% +github.com/thebtf/engram/internal/mcp/tools_brief.go:270: filterInjectionByScope 0.0% +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:25: bulkOpsTools 0.0% +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:95: handleBulkPromote 0.0% +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:154: handleBulkDelete 0.0% +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:211: handleBulkSupersede 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:31: candidateItemFromDomain 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:51: newCandidateReviewSnapshot 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:59: requireCandidateReviewSnapshot 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:68: candidateTools 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:165: handleListCandidates 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:208: handleGetCandidate 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:239: handlePromoteCandidate 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:348: handleRejectCandidate 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:402: handleSupersedeCandidate 0.0% +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:34: codeIntelEnabled 0.0% +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:42: SetCodeChunkStore 0.0% +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:48: codebaseSearchTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:79: codebaseStatusTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:100: handleCodebaseSearch 0.0% +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:194: handleCodebaseStatus 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:21: getVault 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:35: credentialStore 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:49: handleStoreCredential 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:130: handleGetCredential 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:192: handleListCredentials 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:243: handleDeleteCredential 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:302: handleVaultStatus 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:338: expandTagHierarchy 0.0% +github.com/thebtf/engram/internal/mcp/tools_directives.go:16: directivesCaptureEnabledFromEnv 0.0% +github.com/thebtf/engram/internal/mcp/tools_directives.go:20: rememberDirectiveTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_directives.go:38: currentDirectiveCaptureService 0.0% +github.com/thebtf/engram/internal/mcp/tools_directives.go:48: handleRememberDirective 0.0% +github.com/thebtf/engram/internal/mcp/tools_directives.go:72: parseRememberDirectiveArgs 0.0% +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:10: handleDocsConsolidated 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents.go:15: handleListCollections 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents.go:61: handleListDocuments 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents.go:121: handleGetDocument 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents.go:165: handleRemoveDocument 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents.go:197: handleIngestDocument 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents.go:235: handleSearchCollection 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:15: handleDocCreate 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:61: handleDocRead 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:117: handleDocUpdate 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:122: handleDocList 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:175: handleDocHistory 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:232: handleDocComment 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:19: SetExperienceProvider 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:23: experienceHistoryTools 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:40: experienceHistoryReadSchema 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:65: experienceHistoryDetailSchema 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:82: experienceHistoryTriggerEnum 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:91: handleExperienceHistoryRead 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:103: handleExperienceHistoryDetail 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:115: parseExperienceHistoryReadArgs 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:142: parseExperienceHistoryDetailArgs 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:157: experienceHistoryTriggersFromArgs 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:180: marshalExperienceHistory 0.0% +github.com/thebtf/engram/internal/mcp/tools_feedback.go:12: handleFeedbackConsolidated 0.0% +github.com/thebtf/engram/internal/mcp/tools_feedback.go:36: handleSetSessionOutcome 0.0% +github.com/thebtf/engram/internal/mcp/tools_governance.go:27: governanceTools 0.0% +github.com/thebtf/engram/internal/mcp/tools_governance.go:98: handleListSnapshots 0.0% +github.com/thebtf/engram/internal/mcp/tools_governance.go:167: handleRollbackSnapshot 0.0% +github.com/thebtf/engram/internal/mcp/tools_governance.go:215: handlePinSnapshot 0.0% +github.com/thebtf/engram/internal/mcp/tools_governance.go:258: handleRedactionRulesStatus 0.0% +github.com/thebtf/engram/internal/mcp/tools_governance.go:284: resolveGovernanceActor 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:64: handleGraph 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:100: graphAddEdge 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:216: mcpGraphEndpointExists 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:243: mcpGraphEdgeAlreadyExists 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:276: graphAddNode 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:317: graphRemoveEdge 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:332: graphGetEdges 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:397: filterEdgesByNodeType 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:457: graphTraverse 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:480: graphFindPath 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:502: graphSynonyms 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:23: graphCreateEdgeWithGuards 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:80: graphEndpointExistsWithGuards 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:114: graphDuplicateEdgeExists 0.0% +github.com/thebtf/engram/internal/mcp/tools_ingest.go:25: handleIngest 0.0% +github.com/thebtf/engram/internal/mcp/tools_ingest.go:43: ingestDocument 0.0% +github.com/thebtf/engram/internal/mcp/tools_instincts.go:20: handleImportInstincts 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:19: issuesToolSchema 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:109: validateIssueActionParams 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:143: handleIssues 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:189: resolveSourceProject 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:205: handleIssueCreate 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:250: handleIssueList 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:311: handleIssueGet 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:344: handleIssueUpdate 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:382: handleIssueComment 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:408: handleIssueReopen 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:425: handleIssueClose 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:22: handleLifecycle 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:48: lifecycleInfo 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:87: lifecyclePromote 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:118: lifecycleDemote 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:149: lifecycleSetConfidence 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:172: lifecycleSetDefeasibility 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:191: lifecycleSleepStatus 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:197: lifecycleDecayPreview 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:233: marshalJSON 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:35: vnextFEnabled 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:42: isValidPrivacyScope 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:54: derivePrivacyScopeFromLegacy 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:82: deriveLegacyScopeFromPrivacy 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:93: applyPrincipalMemoryMetadata 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:135: addPrincipalMemoryFields 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:161: newScopedWriteLintMemoryStore 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:172: writeLintVisibilityCaller 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:186: writeLintVisibilityOptions 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:192: scopedWriteLintMemoryStore 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:202: filterVisibleWriteGateCandidates 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:214: domainManageAllowed 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:218: List 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:272: writeLintVisibilityFetchLimit 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:286: Get 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:297: Create 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:301: Update 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:305: MarkSuperseded 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:319: effectiveMemoryEditor 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:329: isValidStoreObservationType 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:354: handleStoreMemory 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1111: handleEditMemory 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1218: computeTTLDays 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1258: truncateTitle 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1270: keepRecallMemory 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1280: keepRecallMemoryFilters 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1342: handleRecallMemory 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1690: staleAdvisory 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1700: marshalWithStaleAdvisory 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1727: Rank 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1751: handleRecallMemoryHybrid 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:2252: handleRateMemory 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:2281: handleSuppressMemory 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:17: SetDomainRegistryService 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:21: checkDomainWriteMCP 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:43: addDomainWriteDecisionFields 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:51: marshalStoreMemoryAugmented 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:26: newMemoryStoreSignificanceUpdater 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:33: s6OutcomeEnabledFromEnv 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:37: effectiveMemorySignificanceUpdater 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:47: currentMemorySignificanceUpdater 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:58: rateMemorySignificanceTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:74: handleRateMemorySignificance 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:109: RateMemorySignificance 0.0% +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:18: s2MetaMemoryEnabled 0.0% +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:22: knowAboutTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:39: handleKnowAbout 0.0% +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:104: parseKnowAboutLimit 0.0% +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:118: summarizeMetaIndexTags 0.0% +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:153: summarizeMetaIndexDateRange 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:23: SetPrincipalMemoryQueryService 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:27: principalMemoryQueryTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:52: handleQueryPrincipalMemory 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:134: principalMemoryQueryCaller 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:149: parsePrincipalMemoryQueryLimit 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:160: principalMemoryQueryText 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:167: parsePrincipalMemoryQueryVisibility 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:179: parsePrincipalMemoryQueryOffset 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:190: parsePrincipalMemoryQueryInt 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:215: parsePrincipalMemoryQueryBool 0.0% +github.com/thebtf/engram/internal/mcp/tools_recall.go:28: handleRecall 0.0% +github.com/thebtf/engram/internal/mcp/tools_recall.go:125: parseRecallIncludedPrincipals 0.0% +github.com/thebtf/engram/internal/mcp/tools_recall.go:165: appendRecallIncludedPrincipalMemories 0.0% +github.com/thebtf/engram/internal/mcp/tools_recall.go:223: recallIncludeTargetMatchesCaller 0.0% +github.com/thebtf/engram/internal/mcp/tools_recall.go:231: recallPrincipalQueryItemToMemory 0.0% +github.com/thebtf/engram/internal/mcp/tools_recall.go:247: handleRecallSearch 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:20: currentReviewLoopCandidateLister 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:30: reviewLoopCandidateTools 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:65: reviewLoopReadSchema 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:78: reviewPacketIDSchema 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:91: handleReviewMetricsRead 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:110: handleReviewQueueRead 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:140: handleReviewPacketDetail 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:151: handleReviewPacketPreviewAction 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:167: handleReviewPacketApplyAction 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:189: parseReviewLoopReadArgs 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:212: reviewLoopMCPPacketTypeSupported 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:217: reviewLoopActionFromArgs 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:225: reviewLoopReasonFromArgs 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:233: loadReviewPacketCandidate 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:256: applyReviewPacketPreserve 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:278: applyReviewPacketSuppress 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:296: reviewLoopMemoryFromCandidate 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:320: filterRiskyMCPReviewCandidates 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:330: marshalReviewLoop 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:17: ruleGovernanceReadTools 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:126: handleRuleGovernanceHealth 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:176: handleRuleGovernanceQueue 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:233: handleRuleGovernanceSnapshots 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:278: handleRuleGovernanceUsefulness 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:338: handleRuleGovernanceTransition 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:373: handleRuleGovernancePinSnapshot 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:406: handleRuleGovernanceRollback 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:483: requireRuleGovernanceReadAccess 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:495: requireRuleGovernanceProjectOrAdmin 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:505: ruleGovernanceCallerIsAdmin 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:510: requireRuleGovernanceAdminAccess 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:518: redactRuleGovernanceEvidenceHandles 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:535: redactRuleGovernanceEvidenceHandle 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:553: ruleGovernanceEvidenceHandleHasSensitiveText 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:559: isCanonicalRuleGovernanceEvidenceHandle 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:580: isSafeRuleGovernanceEvidenceID 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:594: parseRuleGovernanceTransitionRequest 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:604: parseRuleGovernanceSince 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:623: boundedRuleGovernanceLimit 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:634: formatRuleGovernanceTime 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:641: formatRuleGovernanceTimePtr 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:649: stringRuleCandidateStatusCounts 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:657: stringRuleVersionStateCounts 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:665: stringRuleArbiterRunStatusCounts 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:673: stringRuleInjectionEventTypeCounts 0.0% +github.com/thebtf/engram/internal/mcp/tools_rules.go:17: handleStoreRule 0.0% +github.com/thebtf/engram/internal/mcp/tools_rules.go:133: handleListRules 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:22: handleSettingsConsolidated 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:51: SetSettingsStore 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:57: settingsStore 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:67: isSecretSettingKey 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:74: requireAdmin 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:85: handleSetSetting 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:145: handleGetSetting 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:181: handleListSettings 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:216: handleDeleteSetting 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:35: resumeScopesFromFields 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:52: stateTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:82: setStateTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:142: handleGetState 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:219: handleSetState 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:274: decodeSessionStateForWrite 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:292: validateSessionStateBudget 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:303: validateNativeResumePacket 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:349: decodeProjectStateForWrite 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:364: requireStateObject 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:383: requireNestedObject 0.0% +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:10: handleStoreConsolidated 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:21: SetTemporalTruthProvider 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:25: temporalTruthEnabledFromEnv 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:30: temporalTruthTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:39: temporalTruthRefreshTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:48: temporalTruthRefreshSchema 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:58: temporalTruthSchema 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:72: currentTemporalTruthProvider 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:82: handleTemporalTruth 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:102: handleTemporalTruthRefresh 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:122: parseTemporalTruthArgs 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:151: parseTemporalTruthRefreshProject 0.0% +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:10: handleVaultConsolidated 0.0% +total: (statements) 0.1% diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/summary.json b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/summary.json new file mode 100644 index 00000000..c5aba6c2 --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-raw-sql-proof/summary.json @@ -0,0 +1,67 @@ +{ + "schema_version": 1, + "gate": "release-gates-foundation", + "run_id": "challenge-raw-sql-proof", + "started_at": "2026-07-11T00:59:13.6976987+00:00", + "finished_at": "2026-07-11T00:59:29.4335250+00:00", + "duration_seconds": 15.736, + "verdict": "FAIL", + "counts": { + "requested_repeats": 1, + "completed_repeats": 1, + "passed_repeats": 0, + "failed_repeats": 1, + "child_commands": 16, + "nonzero_child_commands": 2 + }, + "packages": [ + "./internal/mcp" + ], + "run_pattern": "^TestEC_F1_TagDerivedBackfill_T007$", + "coverage_policy": "Targeted", + "connection_budget": 20, + "race": false, + "database_dsn": "REDACTED_DATABASE_DSN", + "environment": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-raw-sql-proof\\environment.json", + "commands": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-raw-sql-proof\\commands.json", + "repeats": [ + { + "repeat": 1, + "verdict": "FAIL", + "database": "engram_prc_rg_test_3ce6312b91ffa9ad_r1", + "schema": "public", + "database_schema_identity": "engram_prc_rg_test_3ce6312b91ffa9ad_r1.public", + "database_dsn": "REDACTED_DATABASE_DSN", + "database_create_confirmed": true, + "sequential_execution": { + "package_parallelism": 1, + "test_parallelism": 1 + }, + "race": false, + "connection_budget": 20, + "server_sessions_before": 6, + "server_sessions_after": 6, + "sessions_before": 0, + "sessions_after": 0, + "go_test_exit": 1, + "json_parser_exit": 1, + "coverage_policy": "Targeted", + "coverage_exit": 0, + "cleanup_exit": 0, + "cleanup_status": "PASS", + "required_session_start_execution": { + "schema_version": 1, + "verdict": "NOT_APPLICABLE", + "reason": "only an unfiltered canonical ./... run requires the 12-test session-start execution proof" + }, + "cleanup_summary": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-raw-sql-proof\\repeat-01\\cleanup\\cleanup.json", + "errors": [ + "go test failed with exit 1", + "go test JSON assertion failed with exit 1" + ], + "artifact_directory": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-raw-sql-proof\\repeat-01" + } + ], + "errors": [], + "artifact_directory": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-raw-sql-proof" +} diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/commands.json b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/commands.json new file mode 100644 index 00000000..125e7b08 --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/commands.json @@ -0,0 +1,444 @@ +[ + { + "name": "go-version", + "executable": "C:\\Program Files\\Go\\bin\\go.exe", + "arguments": [ + "version" + ], + "environment_keys": [], + "command": "C:\\Program Files\\Go\\bin\\go.exe version", + "started_at": "2026-07-11T00:58:27.9916909+00:00", + "finished_at": "2026-07-11T00:58:28.2347914+00:00", + "duration_seconds": 0.243, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-wrong-fixture\\go-version.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-wrong-fixture\\go-version.stderr.log" + }, + { + "name": "postgres-container-identity", + "executable": "docker", + "arguments": [ + "inspect", + "--format", + "{{.Name}}|{{.Config.Image}}|{{.Image}}|{{.State.Running}}", + "engram-prc-postgres" + ], + "environment_keys": [], + "command": "docker inspect --format {{.Name}}|{{.Config.Image}}|{{.Image}}|{{.State.Running}} engram-prc-postgres", + "started_at": "2026-07-11T00:58:28.2976090+00:00", + "finished_at": "2026-07-11T00:58:28.6056473+00:00", + "duration_seconds": 0.308, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-wrong-fixture\\postgres-container-identity.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-wrong-fixture\\postgres-container-identity.stderr.log" + }, + { + "name": "postgres-server-identity", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT json_build_object('server_version', current_setting('server_version'), 'server_version_num', current_setting('server_version_num'), 'version', version(), 'max_connections', current_setting('max_connections'), 'superuser_reserved_connections', current_setting('superuser_reserved_connections'), 'reserved_connections', COALESCE(NULLIF(current_setting('reserved_connections', true), ''), '0'), 'current_connections', (SELECT count(*)::text FROM pg_stat_activity), 'database', current_database(), 'schema', current_schema(), 'user', current_user)::text;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT json_build_object('server_version', current_setting('server_version'), 'server_version_num', current_setting('server_version_num'), 'version', version(), 'max_connections', current_setting('max_connections'), 'superuser_reserved_connections', current_setting('superuser_reserved_connections'), 'reserved_connections', COALESCE(NULLIF(current_setting('reserved_connections', true), ''), '0'), 'current_connections', (SELECT count(*)::text FROM pg_stat_activity), 'database', current_database(), 'schema', current_schema(), 'user', current_user)::text;", + "started_at": "2026-07-11T00:58:28.6160756+00:00", + "finished_at": "2026-07-11T00:58:28.9737483+00:00", + "duration_seconds": 0.358, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-wrong-fixture\\postgres-server-identity.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-wrong-fixture\\postgres-server-identity.stderr.log" + }, + { + "name": "repeat-1-create-database", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "CREATE DATABASE \"engram_prc_rg_test_c1bf516c578dac52_r1\" OWNER \"engram\";" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c CREATE DATABASE \"engram_prc_rg_test_c1bf516c578dac52_r1\" OWNER \"engram\";", + "started_at": "2026-07-11T00:58:29.0119777+00:00", + "finished_at": "2026-07-11T00:58:29.4026933+00:00", + "duration_seconds": 0.391, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-wrong-fixture\\repeat-01\\create-database.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-wrong-fixture\\repeat-01\\create-database.stderr.log" + }, + { + "name": "repeat-1-create-pgvector", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "engram_prc_rg_test_c1bf516c578dac52_r1", + "-At", + "-F", + "|", + "-c", + "CREATE EXTENSION IF NOT EXISTS vector WITH SCHEMA public;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d engram_prc_rg_test_c1bf516c578dac52_r1 -At -F | -c CREATE EXTENSION IF NOT EXISTS vector WITH SCHEMA public;", + "started_at": "2026-07-11T00:58:29.4087221+00:00", + "finished_at": "2026-07-11T00:58:29.9017955+00:00", + "duration_seconds": 0.493, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-wrong-fixture\\repeat-01\\create-pgvector.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-wrong-fixture\\repeat-01\\create-pgvector.stderr.log" + }, + { + "name": "repeat-1-database-identity", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "engram_prc_rg_test_c1bf516c578dac52_r1", + "-At", + "-F", + "|", + "-c", + "SELECT json_build_object('database', current_database(), 'schema', current_schema(), 'server_version', current_setting('server_version'), 'user', current_user)::text;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d engram_prc_rg_test_c1bf516c578dac52_r1 -At -F | -c SELECT json_build_object('database', current_database(), 'schema', current_schema(), 'server_version', current_setting('server_version'), 'user', current_user)::text;", + "started_at": "2026-07-11T00:58:29.9047657+00:00", + "finished_at": "2026-07-11T00:58:30.2701764+00:00", + "duration_seconds": 0.365, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-wrong-fixture\\repeat-01\\database-identity.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-wrong-fixture\\repeat-01\\database-identity.stderr.log" + }, + { + "name": "repeat-1-pg-stat-before", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT COALESCE(json_agg(row_to_json(s)), '[]'::json)::text FROM (SELECT pid, usename, datname, state, backend_type, application_name, client_addr::text AS client_addr, wait_event_type, wait_event, query_start FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_c1bf516c578dac52_r1' ORDER BY pid) AS s;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT COALESCE(json_agg(row_to_json(s)), '[]'::json)::text FROM (SELECT pid, usename, datname, state, backend_type, application_name, client_addr::text AS client_addr, wait_event_type, wait_event, query_start FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_c1bf516c578dac52_r1' ORDER BY pid) AS s;", + "started_at": "2026-07-11T00:58:30.2761131+00:00", + "finished_at": "2026-07-11T00:58:30.6762320+00:00", + "duration_seconds": 0.4, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-wrong-fixture\\repeat-01\\pg-stat-activity-before.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-wrong-fixture\\repeat-01\\pg-stat-activity-before.stderr.log" + }, + { + "name": "repeat-1-server-connection-count-before", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT count(*) FROM pg_stat_activity;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT count(*) FROM pg_stat_activity;", + "started_at": "2026-07-11T00:58:30.6796897+00:00", + "finished_at": "2026-07-11T00:58:31.0629143+00:00", + "duration_seconds": 0.383, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-wrong-fixture\\repeat-01\\server-connection-count-before.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-wrong-fixture\\repeat-01\\server-connection-count-before.stderr.log" + }, + { + "name": "repeat-1-connection-count-before", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT count(*) FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_c1bf516c578dac52_r1';" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT count(*) FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_c1bf516c578dac52_r1';", + "started_at": "2026-07-11T00:58:31.0724617+00:00", + "finished_at": "2026-07-11T00:58:31.4391207+00:00", + "duration_seconds": 0.367, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-wrong-fixture\\repeat-01\\connection-count-before.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-wrong-fixture\\repeat-01\\connection-count-before.stderr.log" + }, + { + "name": "repeat-1-go-test", + "executable": "C:\\Program Files\\Go\\bin\\go.exe", + "arguments": [ + "test", + "-json", + "-p", + "1", + "-parallel", + "1", + "-count=1", + "-timeout", + "30m", + "-covermode=atomic", + "-coverprofile=.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-wrong-fixture\\repeat-01\\coverage.out", + "-run", + "^TestEC_F1_TagDerivedBackfill_T007$", + "./internal/mcp" + ], + "environment_keys": [ + "DATABASE_DSN", + "DATABASE_MAX_CONNS", + "ENGRAM_RELEASE_GATE_REPEAT", + "ENGRAM_RELEASE_GATE_RUN_ID", + "ENGRAM_TEST_DSN", + "TEST_DATABASE_DSN" + ], + "command": "C:\\Program Files\\Go\\bin\\go.exe test -json -p 1 -parallel 1 -count=1 -timeout 30m -covermode=atomic -coverprofile=.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-wrong-fixture\\repeat-01\\coverage.out -run ^TestEC_F1_TagDerivedBackfill_T007$ ./internal/mcp", + "started_at": "2026-07-11T00:58:31.4464017+00:00", + "finished_at": "2026-07-11T00:58:38.8762496+00:00", + "duration_seconds": 7.43, + "exit_code": 1, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-wrong-fixture\\repeat-01\\go-test.stdout.jsonl", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-wrong-fixture\\repeat-01\\go-test.stderr.log" + }, + { + "name": "repeat-1-assert-go-test-json", + "executable": "C:\\Program Files\\PowerShell\\7\\pwsh.exe", + "arguments": [ + "-NoProfile", + "-File", + "D:\\Dev\\engram\\.w\\t007-r1-checker\\scripts\\production-gates\\assert-go-test-json.ps1", + "-InputPath", + ".agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-wrong-fixture\\repeat-01\\go-test.stdout.jsonl", + "-SummaryPath", + ".agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-wrong-fixture\\repeat-01\\go-test-summary.json", + "-FailOnUnexpectedSkip" + ], + "environment_keys": [], + "command": "C:\\Program Files\\PowerShell\\7\\pwsh.exe -NoProfile -File D:\\Dev\\engram\\.w\\t007-r1-checker\\scripts\\production-gates\\assert-go-test-json.ps1 -InputPath .agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-wrong-fixture\\repeat-01\\go-test.stdout.jsonl -SummaryPath .agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-wrong-fixture\\repeat-01\\go-test-summary.json -FailOnUnexpectedSkip", + "started_at": "2026-07-11T00:58:38.8815863+00:00", + "finished_at": "2026-07-11T00:58:39.6060170+00:00", + "duration_seconds": 0.724, + "exit_code": 1, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-wrong-fixture\\repeat-01\\assert-go-test-json.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-wrong-fixture\\repeat-01\\assert-go-test-json.stderr.log" + }, + { + "name": "repeat-1-targeted-coverage-report", + "executable": "C:\\Program Files\\Go\\bin\\go.exe", + "arguments": [ + "tool", + "cover", + "-func=.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-wrong-fixture\\repeat-01\\coverage.out" + ], + "environment_keys": [], + "command": "C:\\Program Files\\Go\\bin\\go.exe tool cover -func=.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-wrong-fixture\\repeat-01\\coverage.out", + "started_at": "2026-07-11T00:58:39.6117849+00:00", + "finished_at": "2026-07-11T00:58:40.1363480+00:00", + "duration_seconds": 0.525, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-wrong-fixture\\repeat-01\\targeted-coverage.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-wrong-fixture\\repeat-01\\targeted-coverage.stderr.log" + }, + { + "name": "repeat-1-pg-stat-after", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT COALESCE(json_agg(row_to_json(s)), '[]'::json)::text FROM (SELECT pid, usename, datname, state, backend_type, application_name, client_addr::text AS client_addr, wait_event_type, wait_event, query_start FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_c1bf516c578dac52_r1' ORDER BY pid) AS s;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT COALESCE(json_agg(row_to_json(s)), '[]'::json)::text FROM (SELECT pid, usename, datname, state, backend_type, application_name, client_addr::text AS client_addr, wait_event_type, wait_event, query_start FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_c1bf516c578dac52_r1' ORDER BY pid) AS s;", + "started_at": "2026-07-11T00:58:40.1372366+00:00", + "finished_at": "2026-07-11T00:58:40.6170750+00:00", + "duration_seconds": 0.48, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-wrong-fixture\\repeat-01\\pg-stat-activity-after.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-wrong-fixture\\repeat-01\\pg-stat-activity-after.stderr.log" + }, + { + "name": "repeat-1-server-connection-count-after", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT count(*) FROM pg_stat_activity;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT count(*) FROM pg_stat_activity;", + "started_at": "2026-07-11T00:58:40.6192510+00:00", + "finished_at": "2026-07-11T00:58:41.3217993+00:00", + "duration_seconds": 0.703, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-wrong-fixture\\repeat-01\\server-connection-count-after.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-wrong-fixture\\repeat-01\\server-connection-count-after.stderr.log" + }, + { + "name": "repeat-1-connection-count-after", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT count(*) FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_c1bf516c578dac52_r1';" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT count(*) FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_c1bf516c578dac52_r1';", + "started_at": "2026-07-11T00:58:41.3235852+00:00", + "finished_at": "2026-07-11T00:58:41.7075578+00:00", + "duration_seconds": 0.384, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-wrong-fixture\\repeat-01\\connection-count-after.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-wrong-fixture\\repeat-01\\connection-count-after.stderr.log" + }, + { + "name": "repeat-1-cleanup", + "executable": "C:\\Program Files\\PowerShell\\7\\pwsh.exe", + "arguments": [ + "-NoProfile", + "-File", + "D:\\Dev\\engram\\.w\\t007-r1-checker\\scripts\\production-gates\\cleanup-db-sessions.ps1", + "-DatabaseName", + "engram_prc_rg_test_c1bf516c578dac52_r1", + "-SchemaName", + "public", + "-ArtifactRoot", + ".agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-wrong-fixture\\repeat-01", + "-RunId", + "challenge-wrong-fixture-repeat-1", + "-PostgresContainer", + "engram-prc-postgres" + ], + "environment_keys": [ + "ENGRAM_TEST_ADMIN_DSN" + ], + "command": "C:\\Program Files\\PowerShell\\7\\pwsh.exe -NoProfile -File D:\\Dev\\engram\\.w\\t007-r1-checker\\scripts\\production-gates\\cleanup-db-sessions.ps1 -DatabaseName engram_prc_rg_test_c1bf516c578dac52_r1 -SchemaName public -ArtifactRoot .agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-wrong-fixture\\repeat-01 -RunId challenge-wrong-fixture-repeat-1 -PostgresContainer engram-prc-postgres", + "started_at": "2026-07-11T00:58:41.7116261+00:00", + "finished_at": "2026-07-11T00:58:44.7607549+00:00", + "duration_seconds": 3.049, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-wrong-fixture\\repeat-01\\cleanup-process.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-wrong-fixture\\repeat-01\\cleanup-process.stderr.log" + } +] diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/environment.json b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/environment.json new file mode 100644 index 00000000..fc6eb585 --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/environment.json @@ -0,0 +1,52 @@ +{ + "schema_version": 1, + "run_id": "challenge-wrong-fixture", + "timestamp": "2026-07-11T00:58:27.9736535+00:00", + "go_version": "go version go1.25.11 windows/amd64", + "postgres": { + "declared_image": "pgvector/pgvector:pg17", + "container": { + "name": "/engram-prc-postgres", + "configured_image": "pgvector/pgvector:pg17", + "image_id": "sha256:feb68f4f15446397d8cac7f4fe48fe4586de83160d1fc48b46283312d1a33966", + "running": true + }, + "server": { + "server_version": "17.10 (Debian 17.10-1.pgdg12+1)", + "server_version_num": "170010", + "version": "PostgreSQL 17.10 (Debian 17.10-1.pgdg12+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 12.2.0-14+deb12u1) 12.2.0, 64-bit", + "max_connections": "100", + "superuser_reserved_connections": "3", + "reserved_connections": "0", + "current_connections": "6", + "database": "postgres", + "schema": "public", + "user": "engram" + }, + "admin_dsn": "postgresql://engram:REDACTED@127.0.0.1:55432/postgres?sslmode=disable" + }, + "packages": [ + "./internal/mcp" + ], + "run_pattern": "^TestEC_F1_TagDerivedBackfill_T007$", + "repeat": 1, + "fail_on_unexpected_skip": true, + "allowed_skip_identities": [], + "coverage_policy": "Targeted", + "connection_budget": 20, + "race": false, + "require_session_start_execution": false, + "required_session_start_test_count": 12, + "sequential_execution": { + "go_package_parallelism": 1, + "go_test_parallelism": 1, + "database_max_connections": 20 + }, + "govulncheck_policy": { + "authoritative": [ + "source scan with tests", + "unstripped binary scan" + ], + "non_authoritative": "stripped binary scan (module-level fallback when symbols are absent)" + } +} diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/go-version.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/go-version.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/go-version.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/go-version.stdout.log new file mode 100644 index 00000000..a857be3f --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/go-version.stdout.log @@ -0,0 +1 @@ +go version go1.25.11 windows/amd64 diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/postgres-container-identity.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/postgres-container-identity.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/postgres-container-identity.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/postgres-container-identity.stdout.log new file mode 100644 index 00000000..c110d492 --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/postgres-container-identity.stdout.log @@ -0,0 +1 @@ +/engram-prc-postgres|pgvector/pgvector:pg17|sha256:feb68f4f15446397d8cac7f4fe48fe4586de83160d1fc48b46283312d1a33966|true diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/postgres-server-identity.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/postgres-server-identity.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/postgres-server-identity.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/postgres-server-identity.stdout.log new file mode 100644 index 00000000..2e33d56e --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/postgres-server-identity.stdout.log @@ -0,0 +1 @@ +{"server_version" : "17.10 (Debian 17.10-1.pgdg12+1)", "server_version_num" : "170010", "version" : "PostgreSQL 17.10 (Debian 17.10-1.pgdg12+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 12.2.0-14+deb12u1) 12.2.0, 64-bit", "max_connections" : "100", "superuser_reserved_connections" : "3", "reserved_connections" : "0", "current_connections" : "6", "database" : "postgres", "schema" : "public", "user" : "engram"} diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/repeat-01/assert-go-test-json.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/repeat-01/assert-go-test-json.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/repeat-01/assert-go-test-json.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/repeat-01/assert-go-test-json.stdout.log new file mode 100644 index 00000000..f29b3b94 --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/repeat-01/assert-go-test-json.stdout.log @@ -0,0 +1,2 @@ +go test JSON verdict=FAIL packages=1 tests=1 passed=0 failed=1 skipped=0 unexpected_skips=0 malformed=0 +summary=D:\Dev\engram\.w\t007-r1-checker\.agent\reviews\t007-r1-fresh-checker\evidence\challenge-wrong-fixture\repeat-01\go-test-summary.json diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/repeat-01/cleanup-process.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/repeat-01/cleanup-process.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/repeat-01/cleanup-process.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/repeat-01/cleanup-process.stdout.log new file mode 100644 index 00000000..2bfb170e --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/repeat-01/cleanup-process.stdout.log @@ -0,0 +1,2 @@ +cleanup verdict=PASS database=engram_prc_rg_test_c1bf516c578dac52_r1 schema=public terminated_sessions=0 remaining_database_count=0 +summary=D:\Dev\engram\.w\t007-r1-checker\.agent\reviews\t007-r1-fresh-checker\evidence\challenge-wrong-fixture\repeat-01\cleanup\cleanup.json diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/repeat-01/cleanup/cleanup.json b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/repeat-01/cleanup/cleanup.json new file mode 100644 index 00000000..d541a915 --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/repeat-01/cleanup/cleanup.json @@ -0,0 +1,170 @@ +{ + "schema_version": 1, + "run_id": "challenge-wrong-fixture-repeat-1", + "timestamp": "2026-07-11T00:58:44.6674523+00:00", + "verdict": "PASS", + "database": "engram_prc_rg_test_c1bf516c578dac52_r1", + "schema": "public", + "database_schema_identity": "engram_prc_rg_test_c1bf516c578dac52_r1.public", + "admin_dsn": "postgresql://engram:REDACTED@127.0.0.1:55432/postgres?sslmode=disable", + "postgres_container": "engram-prc-postgres", + "cleanup_status": "PASS", + "cleanup_attempted": true, + "database_existed_before": true, + "absence_verified": true, + "terminated_sessions": 0, + "remaining_database_count": 0, + "commands": [ + { + "name": "database-exists-before-cleanup", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT count(*) FROM pg_database WHERE datname = 'engram_prc_rg_test_c1bf516c578dac52_r1';" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT count(*) FROM pg_database WHERE datname = 'engram_prc_rg_test_c1bf516c578dac52_r1';", + "started_at": "2026-07-11T00:58:42.3112394+00:00", + "finished_at": "2026-07-11T00:58:42.7589762+00:00", + "duration_seconds": 0.448, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-wrong-fixture\\repeat-01\\cleanup\\database-exists-before.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-wrong-fixture\\repeat-01\\cleanup\\database-exists-before.stderr.log" + }, + { + "name": "pg-stat-activity-before-cleanup", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT COALESCE(json_agg(row_to_json(s)), '[]'::json)::text FROM (SELECT pid, usename, datname, state, backend_type, application_name, client_addr::text AS client_addr, wait_event_type, wait_event, query_start FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_c1bf516c578dac52_r1' ORDER BY pid) AS s;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT COALESCE(json_agg(row_to_json(s)), '[]'::json)::text FROM (SELECT pid, usename, datname, state, backend_type, application_name, client_addr::text AS client_addr, wait_event_type, wait_event, query_start FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_c1bf516c578dac52_r1' ORDER BY pid) AS s;", + "started_at": "2026-07-11T00:58:42.8287199+00:00", + "finished_at": "2026-07-11T00:58:43.2478832+00:00", + "duration_seconds": 0.419, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-wrong-fixture\\repeat-01\\cleanup\\pg-stat-activity-before.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-wrong-fixture\\repeat-01\\cleanup\\pg-stat-activity-before.stderr.log" + }, + { + "name": "terminate-database-sessions", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT COALESCE(json_agg(row_to_json(s)), '[]'::json)::text FROM (SELECT pid, pg_terminate_backend(pid) AS terminated FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_c1bf516c578dac52_r1' AND pid <> pg_backend_pid() ORDER BY pid) AS s;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT COALESCE(json_agg(row_to_json(s)), '[]'::json)::text FROM (SELECT pid, pg_terminate_backend(pid) AS terminated FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_c1bf516c578dac52_r1' AND pid <> pg_backend_pid() ORDER BY pid) AS s;", + "started_at": "2026-07-11T00:58:43.2528098+00:00", + "finished_at": "2026-07-11T00:58:43.7220512+00:00", + "duration_seconds": 0.469, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-wrong-fixture\\repeat-01\\cleanup\\terminate-sessions.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-wrong-fixture\\repeat-01\\cleanup\\terminate-sessions.stderr.log" + }, + { + "name": "drop-fresh-database", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "DROP DATABASE IF EXISTS \"engram_prc_rg_test_c1bf516c578dac52_r1\" WITH (FORCE);" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c DROP DATABASE IF EXISTS \"engram_prc_rg_test_c1bf516c578dac52_r1\" WITH (FORCE);", + "started_at": "2026-07-11T00:58:43.7312462+00:00", + "finished_at": "2026-07-11T00:58:44.2936043+00:00", + "duration_seconds": 0.562, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-wrong-fixture\\repeat-01\\cleanup\\drop-database.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-wrong-fixture\\repeat-01\\cleanup\\drop-database.stderr.log" + }, + { + "name": "verify-database-absent", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT count(*) FROM pg_database WHERE datname = 'engram_prc_rg_test_c1bf516c578dac52_r1';" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT count(*) FROM pg_database WHERE datname = 'engram_prc_rg_test_c1bf516c578dac52_r1';", + "started_at": "2026-07-11T00:58:44.2968218+00:00", + "finished_at": "2026-07-11T00:58:44.6591882+00:00", + "duration_seconds": 0.362, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-wrong-fixture\\repeat-01\\cleanup\\verify-database-absent.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-wrong-fixture\\repeat-01\\cleanup\\verify-database-absent.stderr.log" + } + ], + "errors": [] +} diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/repeat-01/cleanup/database-exists-before.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/repeat-01/cleanup/database-exists-before.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/repeat-01/cleanup/database-exists-before.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/repeat-01/cleanup/database-exists-before.stdout.log new file mode 100644 index 00000000..d00491fd --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/repeat-01/cleanup/database-exists-before.stdout.log @@ -0,0 +1 @@ +1 diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/repeat-01/cleanup/drop-database.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/repeat-01/cleanup/drop-database.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/repeat-01/cleanup/drop-database.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/repeat-01/cleanup/drop-database.stdout.log new file mode 100644 index 00000000..ca12dce0 --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/repeat-01/cleanup/drop-database.stdout.log @@ -0,0 +1 @@ +DROP DATABASE diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/repeat-01/cleanup/pg-stat-activity-before.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/repeat-01/cleanup/pg-stat-activity-before.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/repeat-01/cleanup/pg-stat-activity-before.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/repeat-01/cleanup/pg-stat-activity-before.stdout.log new file mode 100644 index 00000000..fe51488c --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/repeat-01/cleanup/pg-stat-activity-before.stdout.log @@ -0,0 +1 @@ +[] diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/repeat-01/cleanup/terminate-sessions.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/repeat-01/cleanup/terminate-sessions.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/repeat-01/cleanup/terminate-sessions.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/repeat-01/cleanup/terminate-sessions.stdout.log new file mode 100644 index 00000000..fe51488c --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/repeat-01/cleanup/terminate-sessions.stdout.log @@ -0,0 +1 @@ +[] diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/repeat-01/cleanup/verify-database-absent.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/repeat-01/cleanup/verify-database-absent.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/repeat-01/cleanup/verify-database-absent.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/repeat-01/cleanup/verify-database-absent.stdout.log new file mode 100644 index 00000000..573541ac --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/repeat-01/cleanup/verify-database-absent.stdout.log @@ -0,0 +1 @@ +0 diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/repeat-01/connection-count-after.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/repeat-01/connection-count-after.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/repeat-01/connection-count-after.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/repeat-01/connection-count-after.stdout.log new file mode 100644 index 00000000..573541ac --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/repeat-01/connection-count-after.stdout.log @@ -0,0 +1 @@ +0 diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/repeat-01/connection-count-before.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/repeat-01/connection-count-before.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/repeat-01/connection-count-before.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/repeat-01/connection-count-before.stdout.log new file mode 100644 index 00000000..573541ac --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/repeat-01/connection-count-before.stdout.log @@ -0,0 +1 @@ +0 diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/repeat-01/coverage.out b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/repeat-01/coverage.out new file mode 100644 index 00000000..52335d8a --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/repeat-01/coverage.out @@ -0,0 +1,3472 @@ +mode: atomic +github.com/thebtf/engram/internal/mcp/audit_helpers.go:33.53,34.30 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:34.30,36.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:37.2,37.25 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:37.25,39.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:40.2,40.12 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:44.28,46.2 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:52.83,53.12 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:53.12,54.16 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:54.16,55.32 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:55.32,61.5 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:63.3,65.33 3 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:65.33,71.4 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:77.54,78.14 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:78.14,80.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:81.2,82.16 2 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:82.16,85.3 2 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:86.2,87.13 2 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:92.91,93.23 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:93.23,95.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:96.2,97.15 2 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:97.15,99.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:100.2,105.65 4 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:105.65,113.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:117.95,118.23 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:118.23,120.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:121.2,122.15 2 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:122.15,124.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:125.2,129.65 5 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:129.65,138.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:142.87,143.23 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:143.23,145.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:146.2,147.15 2 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:147.15,149.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:150.2,153.65 4 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:153.65,161.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:166.96,167.23 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:167.23,169.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:170.2,171.15 2 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:171.15,173.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:174.2,177.63 4 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:177.63,185.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:189.97,190.23 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:190.23,192.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:193.2,194.15 2 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:194.15,196.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:197.2,200.68 4 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:200.68,208.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:30.62,31.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:31.20,33.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:34.2,35.49 2 0 +github.com/thebtf/engram/internal/mcp/coerce.go:35.49,37.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:38.2,38.14 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:38.14,40.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:41.2,41.15 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:46.52,47.14 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:47.14,49.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:50.2,50.23 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:51.14,52.11 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:53.19,54.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:55.15,56.45 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:57.12,58.31 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:59.10,60.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:67.43,68.14 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:68.14,70.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:71.2,71.23 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:72.15,73.23 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:74.19,75.38 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:75.38,77.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:78.3,78.40 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:78.40,80.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:81.3,81.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:82.14,83.56 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:83.56,85.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:86.3,86.54 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:86.54,88.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:89.3,89.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:90.10,91.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:97.49,98.14 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:98.14,100.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:101.2,101.23 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:102.15,103.18 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:104.19,105.38 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:105.38,107.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:108.3,108.40 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:108.40,110.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:111.3,111.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:112.14,113.56 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:113.56,115.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:116.3,116.54 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:116.54,118.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:119.3,119.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:120.10,121.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:127.55,128.14 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:128.14,130.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:131.2,131.23 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:132.15,133.11 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:134.19,135.40 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:135.40,137.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:138.3,138.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:139.14,140.54 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:140.54,142.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:143.3,143.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:144.10,145.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:151.46,152.14 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:152.14,154.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:155.2,155.23 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:156.12,157.11 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:158.14,159.54 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:159.54,161.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:162.3,162.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:163.15,164.16 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:165.19,166.40 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:166.40,168.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:169.3,169.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:170.10,171.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:177.40,178.14 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:178.14,180.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:181.2,181.23 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:182.13,184.26 2 0 +github.com/thebtf/engram/internal/mcp/coerce.go:184.26,185.36 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:185.36,187.5 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:189.3,189.16 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:190.16,191.11 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:192.14,193.14 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:193.14,195.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:196.3,196.13 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:197.10,198.13 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:204.38,205.14 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:205.14,207.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:208.2,209.9 2 0 +github.com/thebtf/engram/internal/mcp/coerce.go:209.9,211.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:212.2,213.27 2 0 +github.com/thebtf/engram/internal/mcp/coerce.go:213.27,214.42 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:214.42,216.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:218.2,218.15 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:222.32,223.39 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:223.39,225.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:226.2,226.30 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:226.30,228.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:229.2,229.30 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:229.30,231.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:232.2,232.15 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:236.35,237.28 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:237.28,239.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:240.2,240.28 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:240.28,242.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:243.2,243.15 1 0 +github.com/thebtf/engram/internal/mcp/context.go:17.55,19.2 1 0 +github.com/thebtf/engram/internal/mcp/context.go:22.78,24.2 1 0 +github.com/thebtf/engram/internal/mcp/context.go:29.78,31.2 1 0 +github.com/thebtf/engram/internal/mcp/context.go:35.53,38.2 2 0 +github.com/thebtf/engram/internal/mcp/context.go:41.80,43.2 1 0 +github.com/thebtf/engram/internal/mcp/context.go:48.80,50.2 1 0 +github.com/thebtf/engram/internal/mcp/context.go:54.53,57.2 2 0 +github.com/thebtf/engram/internal/mcp/context.go:61.51,62.43 1 0 +github.com/thebtf/engram/internal/mcp/context.go:62.43,64.3 1 0 +github.com/thebtf/engram/internal/mcp/context.go:65.2,65.16 1 0 +github.com/thebtf/engram/internal/mcp/health.go:22.32,26.2 3 0 +github.com/thebtf/engram/internal/mcp/health.go:29.37,33.2 3 0 +github.com/thebtf/engram/internal/mcp/health.go:36.35,40.2 3 0 +github.com/thebtf/engram/internal/mcp/health.go:42.44,45.25 3 0 +github.com/thebtf/engram/internal/mcp/health.go:45.25,47.50 1 0 +github.com/thebtf/engram/internal/mcp/health.go:47.50,50.4 2 0 +github.com/thebtf/engram/internal/mcp/health.go:55.74,60.16 5 0 +github.com/thebtf/engram/internal/mcp/health.go:60.16,62.3 1 0 +github.com/thebtf/engram/internal/mcp/health.go:63.2,71.4 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:28.42,29.65 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:29.65,32.3 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:33.2,33.40 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:33.40,35.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:36.2,36.14 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:39.120,40.69 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:40.69,42.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:43.2,44.19 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:44.19,46.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:47.2,48.17 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:48.17,50.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:51.2,52.59 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:52.59,54.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:55.2,56.20 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:56.20,58.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:59.2,60.17 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:60.17,62.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:63.2,64.21 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:64.21,66.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:67.2,68.22 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:68.22,70.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:71.2,72.23 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:72.23,74.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:76.2,98.19 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:98.19,100.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:101.2,101.66 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:104.52,106.29 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:106.29,108.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:109.2,110.46 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:113.113,123.27 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:123.27,125.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:126.2,127.16 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:127.16,129.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:130.2,130.25 1 0 +github.com/thebtf/engram/internal/mcp/server.go:127.44,138.2 1 1 +github.com/thebtf/engram/internal/mcp/server.go:141.64,143.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:146.78,148.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:151.53,153.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:156.55,158.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:161.58,163.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:166.62,168.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:171.50,173.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:176.78,178.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:181.74,183.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:186.71,189.2 2 0 +github.com/thebtf/engram/internal/mcp/server.go:191.85,193.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:195.61,197.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:199.49,201.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:204.54,206.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:211.53,213.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:216.53,218.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:222.61,224.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:228.59,230.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:234.51,236.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:240.52,242.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:246.55,248.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:252.82,254.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:260.70,262.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:269.68,271.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:274.87,277.2 2 0 +github.com/thebtf/engram/internal/mcp/server.go:282.60,284.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:290.45,292.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:297.77,299.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:303.37,313.38 3 0 +github.com/thebtf/engram/internal/mcp/server.go:313.38,315.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:316.2,317.9 2 0 +github.com/thebtf/engram/internal/mcp/server.go:317.9,319.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:320.2,321.9 2 0 +github.com/thebtf/engram/internal/mcp/server.go:321.9,323.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:324.2,325.9 2 0 +github.com/thebtf/engram/internal/mcp/server.go:325.9,327.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:328.2,328.14 1 0 +github.com/thebtf/engram/internal/mcp/server.go:332.35,334.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:383.49,387.12 3 0 +github.com/thebtf/engram/internal/mcp/server.go:387.12,388.22 1 0 +github.com/thebtf/engram/internal/mcp/server.go:388.22,389.11 1 0 +github.com/thebtf/engram/internal/mcp/server.go:390.22,392.11 2 0 +github.com/thebtf/engram/internal/mcp/server.go:393.12,393.12 0 0 +github.com/thebtf/engram/internal/mcp/server.go:396.4,397.18 2 0 +github.com/thebtf/engram/internal/mcp/server.go:397.18,398.13 1 0 +github.com/thebtf/engram/internal/mcp/server.go:401.4,402.61 2 0 +github.com/thebtf/engram/internal/mcp/server.go:402.61,404.13 2 0 +github.com/thebtf/engram/internal/mcp/server.go:407.4,407.55 1 0 +github.com/thebtf/engram/internal/mcp/server.go:407.55,409.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:411.3,411.28 1 0 +github.com/thebtf/engram/internal/mcp/server.go:414.2,414.9 1 0 +github.com/thebtf/engram/internal/mcp/server.go:415.20,416.19 1 0 +github.com/thebtf/engram/internal/mcp/server.go:417.25,418.17 1 0 +github.com/thebtf/engram/internal/mcp/server.go:418.17,420.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:421.3,421.13 1 0 +github.com/thebtf/engram/internal/mcp/server.go:427.77,428.19 1 0 +github.com/thebtf/engram/internal/mcp/server.go:428.19,431.3 2 0 +github.com/thebtf/engram/internal/mcp/server.go:433.2,433.20 1 0 +github.com/thebtf/engram/internal/mcp/server.go:434.20,435.33 1 0 +github.com/thebtf/engram/internal/mcp/server.go:436.20,437.32 1 0 +github.com/thebtf/engram/internal/mcp/server.go:438.20,439.37 1 0 +github.com/thebtf/engram/internal/mcp/server.go:443.24,444.93 1 0 +github.com/thebtf/engram/internal/mcp/server.go:445.34,446.101 1 0 +github.com/thebtf/engram/internal/mcp/server.go:447.22,448.91 1 0 +github.com/thebtf/engram/internal/mcp/server.go:449.29,450.120 1 0 +github.com/thebtf/engram/internal/mcp/server.go:451.10,456.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:461.51,462.20 1 0 +github.com/thebtf/engram/internal/mcp/server.go:463.50,464.70 1 0 +github.com/thebtf/engram/internal/mcp/server.go:465.46,466.79 1 0 +github.com/thebtf/engram/internal/mcp/server.go:467.10,468.80 1 0 +github.com/thebtf/engram/internal/mcp/server.go:473.59,485.63 2 0 +github.com/thebtf/engram/internal/mcp/server.go:485.63,487.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:489.2,493.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:496.45,503.33 3 0 +github.com/thebtf/engram/internal/mcp/server.go:503.33,505.57 2 0 +github.com/thebtf/engram/internal/mcp/server.go:505.57,506.76 1 0 +github.com/thebtf/engram/internal/mcp/server.go:506.76,507.13 1 0 +github.com/thebtf/engram/internal/mcp/server.go:509.4,509.18 1 0 +github.com/thebtf/engram/internal/mcp/server.go:509.18,511.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:511.10,513.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:514.4,518.11 5 0 +github.com/thebtf/engram/internal/mcp/server.go:522.2,522.19 1 0 +github.com/thebtf/engram/internal/mcp/server.go:660.29,683.21 2 0 +github.com/thebtf/engram/internal/mcp/server.go:683.21,689.3 5 0 +github.com/thebtf/engram/internal/mcp/server.go:690.2,699.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:712.30,765.49 3 0 +github.com/thebtf/engram/internal/mcp/server.go:765.49,789.3 5 0 +github.com/thebtf/engram/internal/mcp/server.go:790.2,799.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:805.40,936.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:942.58,1048.35 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1048.35,1077.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1080.2,1080.33 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1080.33,1090.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1093.2,1093.26 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1093.26,1123.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1124.2,1124.80 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1124.80,1126.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1127.2,1127.55 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1127.55,1129.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1130.2,1130.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1130.38,1132.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1134.2,1134.25 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1134.25,1136.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1138.2,1138.33 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1138.33,1140.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1141.2,1141.69 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1141.69,1143.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1144.2,1144.75 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1144.75,1146.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1148.2,1148.27 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1148.27,1165.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1168.2,1168.76 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1168.76,1191.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1195.2,1195.48 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1195.48,1197.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1201.2,1201.47 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1201.47,1203.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1205.2,1205.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1205.38,1207.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1212.2,1212.21 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1212.21,1214.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1228.2,1228.51 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1228.51,1230.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1233.2,1233.56 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1233.56,1235.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1238.2,1238.71 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1238.71,1298.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1302.2,1302.104 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1302.104,1321.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1324.2,1324.72 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1324.72,1333.154 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1333.154,1334.26 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1334.26,1336.8 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1337.7,1337.16 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1338.35,1340.26 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1340.26,1342.8 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1343.7,1343.18 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1371.2,1371.26 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1371.26,1390.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1393.2,1393.28 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1393.28,1443.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1446.2,1446.28 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1446.28,1478.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1481.2,1481.37 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1481.37,1561.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1564.2,1568.23 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1568.23,1570.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1572.2,1588.57 3 0 +github.com/thebtf/engram/internal/mcp/server.go:1588.57,1591.29 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1591.29,1593.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1594.3,1594.27 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1594.27,1595.29 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1595.29,1597.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1601.2,1607.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1612.79,1614.60 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1614.60,1620.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1622.2,1623.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1623.16,1631.3 3 0 +github.com/thebtf/engram/internal/mcp/server.go:1633.2,1641.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1644.69,1645.34 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1645.34,1647.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1648.2,1649.22 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1649.22,1651.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1652.2,1652.37 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1656.99,1658.14 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1659.16,1660.35 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1661.15,1662.46 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1663.18,1664.49 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1665.15,1666.46 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1667.18,1668.49 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1669.14,1670.45 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1671.15,1672.34 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1676.2,1676.14 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1677.35,1678.52 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1679.26,1680.37 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1681.20,1682.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1683.20,1684.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1685.16,1686.35 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1687.29,1688.40 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1689.33,1690.50 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1691.25,1692.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1693.23,1694.41 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1696.26,1697.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1698.24,1699.42 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1700.22,1701.40 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1702.25,1703.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1704.27,1705.45 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1706.25,1707.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1709.30,1710.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1711.28,1712.42 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1713.17,1714.40 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1715.20,1716.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1717.20,1718.45 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1719.20,1720.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1722.20,1723.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1724.18,1725.36 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1726.20,1727.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1728.18,1729.36 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1730.21,1731.39 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1732.21,1733.39 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1734.26,1735.44 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1736.25,1737.34 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1738.26,1739.44 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1740.24,1741.42 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1742.26,1743.44 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1744.27,1745.45 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1746.22,1747.40 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1748.19,1749.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1750.15,1751.34 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1752.16,1753.35 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1755.21,1756.44 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1757.19,1758.42 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1759.20,1760.44 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1761.22,1762.45 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1763.22,1764.40 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1765.23,1766.41 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1767.20,1768.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1769.32,1770.49 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1771.19,1772.37 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1773.19,1774.37 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1775.33,1776.50 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1777.35,1778.52 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1779.24,1780.42 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1781.32,1782.49 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1783.28,1784.46 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1785.21,1786.39 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1787.34,1788.51 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1789.25,1790.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1791.29,1792.46 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1793.26,1794.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1795.27,1796.44 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1798.25,1799.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1800.23,1801.41 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1802.27,1803.45 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1804.26,1805.44 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1806.29,1807.47 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1809.29,1810.46 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1811.27,1812.44 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1813.30,1814.47 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1815.38,1816.54 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1817.36,1818.52 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1820.24,1821.42 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1822.27,1823.45 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1824.22,1825.40 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1826.32,1827.49 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1828.32,1829.49 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1830.31,1831.48 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1832.35,1833.52 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1834.36,1835.53 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1836.36,1837.53 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1838.38,1839.54 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1840.34,1841.51 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1843.22,1844.40 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1845.21,1846.39 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1847.24,1848.42 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1850.25,1851.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1852.25,1853.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1859.2,1859.14 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1860.22,1863.131 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1866.51,1867.123 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1868.10,1869.50 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1874.47,1876.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1876.16,1879.3 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1880.2,1880.35 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1884.72,1890.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1896.105,1898.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1898.16,1900.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1902.2,1903.17 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1903.17,1905.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1907.2,1908.17 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1908.17,1910.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1912.2,1918.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1918.16,1920.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1921.2,1921.25 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1927.76,1933.15 3 0 +github.com/thebtf/engram/internal/mcp/server.go:1933.15,1936.17 3 0 +github.com/thebtf/engram/internal/mcp/server.go:1936.17,1938.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1939.3,1939.26 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1943.2,1950.36 3 0 +github.com/thebtf/engram/internal/mcp/server.go:1950.36,1952.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1952.8,1955.29 3 0 +github.com/thebtf/engram/internal/mcp/server.go:1955.29,1958.4 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1959.3,1962.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1966.2,1966.20 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1966.20,1977.20 6 0 +github.com/thebtf/engram/internal/mcp/server.go:1977.20,1979.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1980.3,1980.20 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1980.20,1982.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1985.3,1985.37 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1985.37,1987.30 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1987.30,1988.16 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1988.16,1990.6 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1990.11,1992.6 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1994.4,1995.56 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1995.56,1997.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1998.4,2003.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2008.2,2008.29 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2008.29,2009.63 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2009.63,2011.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2011.9,2013.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2021.2,2021.29 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2021.29,2029.38 3 0 +github.com/thebtf/engram/internal/mcp/server.go:2029.38,2031.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2031.9,2033.31 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2033.31,2035.30 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2035.30,2037.6 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2039.4,2042.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2046.2,2047.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2047.16,2049.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2050.2,2050.25 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2055.57,2056.33 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2056.33,2058.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2059.2,2060.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2060.16,2062.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2063.2,2064.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2064.16,2066.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2067.2,2067.23 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2071.79,2105.15 6 0 +github.com/thebtf/engram/internal/mcp/server.go:2105.15,2107.17 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2107.17,2111.4 3 0 +github.com/thebtf/engram/internal/mcp/server.go:2111.9,2112.17 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2112.17,2114.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2115.4,2117.26 3 0 +github.com/thebtf/engram/internal/mcp/server.go:2117.26,2119.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2119.10,2121.29 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2121.29,2123.6 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2125.4,2129.25 5 0 +github.com/thebtf/engram/internal/mcp/server.go:2130.19,2130.19 0 0 +github.com/thebtf/engram/internal/mcp/server.go:2132.20,2134.106 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2135.12,2137.103 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2140.8,2143.3 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2144.2,2150.49 3 0 +github.com/thebtf/engram/internal/mcp/server.go:2150.49,2152.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2152.8,2154.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2155.2,2168.27 4 0 +github.com/thebtf/engram/internal/mcp/server.go:2168.27,2170.17 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2170.17,2173.4 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2173.9,2175.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2177.2,2182.40 4 0 +github.com/thebtf/engram/internal/mcp/server.go:2182.40,2183.21 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2184.20,2185.20 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2186.19,2187.19 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2191.2,2191.24 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2191.24,2193.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2193.8,2193.30 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2193.30,2195.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2198.2,2198.28 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2198.28,2200.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2203.2,2203.29 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2203.29,2205.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2207.2,2208.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2208.16,2210.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2211.2,2211.28 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2216.103,2218.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2218.16,2220.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2222.2,2223.15 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2223.15,2225.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2227.2,2239.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2239.16,2241.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2242.2,2242.25 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2246.93,2248.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2251.91,2253.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:18.28,29.20 4 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:29.20,33.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:35.2,44.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:68.36,69.49 1 1 +github.com/thebtf/engram/internal/mcp/tools_admin.go:69.49,74.3 4 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:75.2,75.25 1 1 +github.com/thebtf/engram/internal/mcp/tools_admin.go:80.26,82.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:84.89,86.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:86.16,88.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:89.2,90.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:90.18,92.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:94.2,94.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:95.15,96.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:97.26,98.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:99.25,100.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:101.23,105.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:105.22,107.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:108.3,108.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:109.10,110.114 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:120.92,126.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:126.26,128.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:130.2,131.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:131.19,133.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:134.2,135.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:135.19,137.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:138.2,138.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:138.24,140.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:142.2,142.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:142.25,144.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:146.2,147.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:147.16,149.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:151.2,151.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:27.40,30.2 2 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:32.30,46.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:48.99,49.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:49.34,51.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:52.2,52.69 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:52.69,54.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:56.2,57.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:57.16,59.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:60.2,61.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:61.21,63.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:64.2,67.26 3 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:67.26,69.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:70.2,71.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:71.25,73.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:75.2,77.44 3 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:77.44,79.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:80.2,80.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:80.33,82.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:83.2,83.81 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:86.52,87.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:87.16,89.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:90.2,90.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:90.15,92.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:93.2,93.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:96.73,97.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:97.21,99.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:100.2,101.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:101.29,110.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:111.2,111.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:114.34,116.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:31.98,32.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:32.52,34.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:35.2,35.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:35.26,37.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:39.2,40.49 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:40.49,42.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:43.2,43.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:43.21,45.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:46.2,46.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:46.21,48.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:49.2,49.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:49.18,51.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:52.2,52.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:52.18,54.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:56.2,56.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:56.38,58.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:60.2,61.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:61.16,63.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:68.2,70.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:70.26,77.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:79.2,81.36 3 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:81.36,84.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:86.2,89.28 3 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:89.28,90.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:90.39,91.9 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:93.3,97.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:100.2,104.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:107.60,113.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:115.101,116.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:116.38,118.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:120.2,122.21 3 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:122.21,123.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:123.26,125.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:126.3,126.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:126.23,128.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:129.8,130.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:130.26,132.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:133.3,133.68 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:133.68,135.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:137.2,140.20 3 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:141.17,142.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:143.67,143.67 0 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:144.10,145.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:148.2,162.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:162.16,164.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:165.2,165.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:165.19,173.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:174.2,174.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:174.30,176.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:177.2,177.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:177.31,179.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:181.2,182.36 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:182.36,196.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:198.2,199.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:199.19,201.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:202.2,203.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:203.18,205.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:206.2,207.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:207.21,209.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:210.2,211.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:211.25,213.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:214.2,225.21 3 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:225.21,227.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:228.2,228.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:228.25,230.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:231.2,231.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:231.18,233.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:235.2,244.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:244.21,246.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:247.2,247.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:247.25,249.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:250.2,250.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:250.18,252.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:253.2,253.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:253.24,255.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:256.2,256.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:259.50,261.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:261.22,263.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:264.2,264.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:270.90,272.42 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:272.42,276.3 3 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:277.2,281.27 3 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:281.27,282.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:282.45,284.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:286.2,286.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:25.28,88.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:95.95,96.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:96.22,98.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:99.2,100.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:100.32,102.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:104.2,105.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:105.16,107.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:109.2,114.35 3 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:114.35,121.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:123.2,123.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:123.25,125.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:127.2,134.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:134.16,136.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:138.2,146.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:154.94,155.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:155.22,157.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:158.2,159.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:159.32,161.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:163.2,164.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:164.16,166.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:168.2,172.35 3 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:172.35,179.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:181.2,181.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:181.25,183.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:185.2,192.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:192.16,194.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:196.2,203.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:211.97,212.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:212.22,214.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:215.2,216.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:216.32,218.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:220.2,221.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:221.16,223.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:225.2,229.35 3 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:229.35,236.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:238.2,238.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:238.25,240.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:242.2,249.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:249.16,251.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:253.2,260.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:31.80,32.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:32.14,34.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:35.2,48.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:51.136,53.51 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:53.51,55.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:56.2,56.83 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:59.94,60.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:60.21,62.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:63.2,63.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:68.30,162.2 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:165.98,166.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:166.49,168.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:169.2,170.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:170.16,172.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:173.2,174.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:174.19,176.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:177.2,179.17 3 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:179.17,181.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:183.2,184.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:184.16,186.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:188.2,189.31 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:189.31,190.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:190.15,191.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:193.3,193.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:196.2,201.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:201.16,203.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:204.2,204.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:208.96,209.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:209.49,211.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:212.2,213.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:213.16,215.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:216.2,217.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:217.13,219.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:221.2,222.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:222.16,224.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:225.2,225.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:225.22,227.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:229.2,230.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:230.16,232.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:233.2,233.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:239.100,240.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:240.22,242.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:243.2,244.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:244.16,246.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:247.2,248.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:248.13,250.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:255.2,256.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:256.12,263.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:263.30,264.77 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:264.77,269.5 4 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:271.3,272.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:272.21,274.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:275.3,275.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:279.2,279.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:279.29,281.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:284.2,285.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:285.16,287.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:288.2,288.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:288.22,290.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:291.2,291.55 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:291.55,293.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:294.2,294.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:294.74,296.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:297.2,298.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:298.16,300.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:306.2,307.41 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:307.41,309.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:310.2,324.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:324.16,325.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:325.50,327.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:328.3,328.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:330.2,330.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:330.38,332.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:334.2,341.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:341.16,343.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:344.2,344.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:348.99,349.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:349.49,351.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:352.2,353.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:353.16,355.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:356.2,357.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:357.13,359.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:360.2,362.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:362.16,364.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:365.2,365.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:365.22,367.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:368.2,368.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:368.74,370.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:371.2,372.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:372.16,374.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:375.2,375.85 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:375.85,377.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:379.2,380.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:380.16,381.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:381.50,383.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:384.3,384.60 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:386.2,386.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:386.20,388.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:390.2,395.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:395.16,397.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:398.2,398.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:402.102,403.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:403.49,405.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:406.2,407.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:407.16,409.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:410.2,411.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:411.13,413.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:414.2,415.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:415.16,417.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:418.2,418.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:418.22,420.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:421.2,421.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:421.74,423.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:424.2,425.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:425.16,427.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:428.2,428.88 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:428.88,430.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:432.2,433.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:433.16,434.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:434.50,436.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:437.3,437.63 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:439.2,439.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:439.20,441.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:443.2,448.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:448.16,450.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:451.2,451.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:34.30,36.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:42.61,44.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:48.32,75.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:79.32,94.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:100.98,101.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:101.25,103.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:104.2,104.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:104.29,106.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:108.2,113.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:113.17,114.55 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:114.55,116.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:118.2,118.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:118.24,120.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:121.2,121.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:121.23,123.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:124.2,124.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:124.23,126.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:134.2,135.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:135.21,137.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:142.2,147.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:147.16,149.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:154.2,165.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:165.25,175.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:177.2,183.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:183.16,185.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:186.2,186.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:194.98,195.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:195.25,197.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:198.2,198.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:198.29,200.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:202.2,205.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:205.17,207.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:208.2,209.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:209.21,211.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:213.2,214.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:214.16,216.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:217.2,218.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:218.16,220.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:221.2,222.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:222.16,224.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:226.2,231.11 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:231.11,233.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:235.2,236.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:236.16,238.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:239.2,239.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:21.52,22.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:22.24,25.28 3 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:25.28,27.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:29.2,29.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:35.72,37.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:37.15,39.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:41.2,42.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:42.16,44.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:45.2,45.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:49.99,51.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:51.16,53.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:55.2,56.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:56.16,58.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:60.2,72.23 7 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:72.23,74.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:75.2,75.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:75.24,77.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:78.2,78.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:78.24,80.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:81.2,81.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:82.27,82.27 0 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:84.10,85.93 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:87.2,87.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:87.30,89.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:90.2,90.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:90.26,92.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:94.2,95.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:95.16,97.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:99.2,100.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:100.16,102.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:104.2,112.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:112.16,114.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:116.2,123.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:123.16,125.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:126.2,126.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:130.97,132.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:132.16,134.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:136.2,137.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:137.16,139.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:141.2,147.23 4 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:147.23,149.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:150.2,150.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:150.26,152.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:154.2,155.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:155.16,157.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:159.2,160.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:160.16,161.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:161.47,163.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:164.3,164.51 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:167.2,167.97 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:167.97,172.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:174.2,175.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:175.16,177.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:179.2,185.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:185.16,187.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:188.2,188.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:192.99,194.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:194.16,196.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:198.2,199.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:199.16,201.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:203.2,207.26 3 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:207.26,209.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:211.2,212.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:212.16,214.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:216.2,223.26 3 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:223.26,229.28 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:229.28,231.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:232.3,232.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:235.2,236.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:236.16,238.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:239.2,239.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:243.100,245.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:245.16,247.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:249.2,250.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:250.16,252.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:254.2,262.23 5 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:262.23,264.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:265.2,265.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:265.24,267.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:268.2,268.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:269.27,269.27 0 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:271.10,272.93 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:274.2,274.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:274.30,276.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:277.2,277.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:277.26,279.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:281.2,281.71 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:281.71,282.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:282.47,284.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:285.3,285.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:288.2,293.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:293.16,295.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:296.2,296.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:302.92,309.19 5 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:309.19,310.53 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:310.53,313.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:316.2,317.51 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:317.51,318.66 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:318.66,320.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:323.2,331.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:331.16,333.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:334.2,334.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:338.46,342.32 4 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:342.32,343.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:343.20,346.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:348.2,350.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:350.26,352.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:352.27,353.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:353.13,355.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:356.4,356.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:358.3,358.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:360.2,360.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:16.45,18.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:20.35,36.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:38.84,39.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:39.40,41.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:42.2,42.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:42.50,44.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:45.2,45.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:48.101,50.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:50.16,52.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:53.2,54.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:54.16,56.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:57.2,58.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:58.19,60.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:61.2,62.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:62.21,64.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:65.2,66.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:66.16,68.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:69.2,69.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:72.102,74.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:74.16,76.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:77.2,82.8 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:10.100,12.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:12.16,14.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:16.2,17.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:17.18,19.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:21.2,21.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:22.16,23.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:24.14,25.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:26.14,27.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:28.17,29.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:30.17,31.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:32.21,33.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:34.19,35.42 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:36.17,37.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:38.16,39.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:40.16,41.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:42.21,43.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:44.10,45.167 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:15.77,16.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:16.33,18.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:20.2,21.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:21.27,23.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:25.2,26.28 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:26.28,29.17 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:29.17,31.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:34.2,41.32 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:41.32,46.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:46.20,48.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:49.3,49.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:52.2,53.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:53.16,55.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:57.2,57.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:61.97,62.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:62.28,64.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:66.2,67.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:67.16,69.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:71.2,75.29 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:75.29,77.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:79.2,80.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:80.16,82.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:84.2,84.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:84.20,86.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:88.2,97.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:97.25,103.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:103.20,105.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:106.3,106.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:106.19,108.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:109.3,109.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:112.2,113.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:113.16,115.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:117.2,117.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:121.95,122.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:122.28,124.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:126.2,127.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:127.16,129.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:131.2,137.50 4 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:137.50,139.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:141.2,142.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:142.16,144.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:145.2,145.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:145.16,147.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:149.2,149.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:149.21,151.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:153.2,154.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:154.16,156.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:157.2,157.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:157.20,159.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:161.2,161.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:165.98,166.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:166.28,168.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:170.2,171.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:171.16,173.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:175.2,181.50 4 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:181.50,183.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:185.2,185.96 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:185.96,187.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:189.2,189.88 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:197.98,198.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:198.28,200.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:202.2,203.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:203.16,205.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:207.2,217.74 6 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:217.74,219.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:222.2,223.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:223.16,225.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:227.2,229.156 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:235.98,237.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:237.16,239.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:241.2,247.24 4 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:247.24,249.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:252.2,253.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:253.29,255.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:256.2,256.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:15.93,16.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:16.37,18.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:20.2,21.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:21.16,23.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:25.2,32.16 7 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:32.16,34.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:35.2,35.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:35.19,37.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:38.2,38.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:38.19,40.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:42.2,43.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:43.16,45.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:47.2,54.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:54.16,56.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:57.2,57.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:61.91,62.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:62.37,64.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:66.2,67.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:67.16,69.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:71.2,73.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:73.16,75.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:76.2,76.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:76.19,78.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:80.2,81.43 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:81.43,83.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:83.19,85.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:86.3,86.79 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:87.8,89.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:90.2,90.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:90.16,91.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:91.45,93.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:94.3,94.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:97.2,110.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:110.16,112.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:113.2,113.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:117.93,119.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:122.91,123.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:123.37,125.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:127.2,128.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:128.16,130.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:132.2,133.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:133.19,135.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:136.2,141.16 5 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:141.16,143.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:145.2,155.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:155.25,165.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:167.2,168.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:168.16,170.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:171.2,171.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:175.94,176.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:176.37,178.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:180.2,181.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:181.16,183.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:185.2,187.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:187.16,189.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:190.2,190.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:190.19,192.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:193.2,196.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:196.16,198.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:200.2,208.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:208.25,216.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:218.2,225.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:225.16,227.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:228.2,228.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:232.94,233.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:233.37,235.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:237.2,238.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:238.16,240.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:242.2,243.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:243.21,245.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:246.2,248.19 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:248.19,250.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:252.2,253.46 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:253.46,255.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:255.13,257.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:259.2,259.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:259.44,261.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:261.13,263.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:266.2,267.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:267.16,269.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:271.2,278.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:278.16,280.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:281.2,281.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:19.69,21.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:23.38,38.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:40.51,63.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:65.53,80.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:82.46,85.32 3 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:85.32,87.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:88.2,88.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:91.105,93.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:93.16,95.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:96.2,97.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:97.16,99.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:100.2,100.70 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:103.107,105.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:105.16,107.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:108.2,109.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:109.16,111.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:112.2,112.72 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:115.101,117.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:117.16,119.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:120.2,121.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:121.17,123.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:124.2,139.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:142.109,144.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:144.16,146.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:147.2,154.8 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:157.100,159.28 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:159.28,161.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:161.18,163.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:164.3,164.62 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:166.2,167.72 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:167.72,169.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:170.2,170.53 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:170.53,172.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:173.2,174.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:174.26,176.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:177.2,177.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:180.73,182.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:182.16,184.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:185.2,185.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:12.104,14.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:14.16,16.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:18.2,19.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:19.18,21.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:23.2,23.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:24.14,25.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:26.18,27.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:28.17,29.46 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:30.10,31.96 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:36.101,37.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:37.27,39.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:41.2,42.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:42.16,44.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:46.2,47.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:47.21,49.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:50.2,51.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:51.19,53.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:54.2,54.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:55.52,55.52 0 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:56.10,57.101 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:59.2,61.93 2 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:61.93,64.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:66.2,70.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:27.31,94.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:98.97,100.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:100.26,102.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:103.2,103.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:103.28,105.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:107.2,108.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:108.16,110.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:112.2,115.15 4 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:115.15,117.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:118.2,118.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:118.17,120.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:122.2,123.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:123.16,125.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:127.2,140.29 3 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:140.29,151.31 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:151.31,154.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:155.3,155.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:158.2,162.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:167.100,169.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:169.26,171.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:172.2,172.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:172.28,174.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:175.2,175.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:175.26,177.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:179.2,180.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:180.16,182.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:184.2,185.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:185.22,187.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:189.2,190.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:190.20,191.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:191.54,199.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:200.3,200.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:200.61,202.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:203.3,203.58 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:206.2,211.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:215.95,217.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:217.32,219.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:220.2,220.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:220.28,222.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:224.2,225.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:225.16,227.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:229.2,230.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:230.22,232.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:234.2,234.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:234.61,236.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:239.2,239.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:239.25,246.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:248.2,252.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:258.104,260.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:260.26,262.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:267.2,271.20 3 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:271.20,275.3 3 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:275.8,279.3 3 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:280.2,280.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:284.60,285.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:285.30,287.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:288.2,288.42 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:288.42,290.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:291.2,291.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:64.89,65.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:65.25,67.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:69.2,70.49 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:70.49,72.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:74.2,74.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:75.18,76.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:77.21,78.35 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:79.19,80.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:81.18,82.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:83.19,84.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:85.18,86.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:87.18,91.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:91.23,93.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:94.3,94.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:95.10,96.62 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:100.81,103.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:103.19,105.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:106.2,107.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:107.19,109.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:112.2,112.46 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:112.46,114.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:115.2,115.46 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:115.46,117.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:122.2,122.66 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:122.66,124.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:127.2,127.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:127.25,128.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:128.22,130.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:131.8,132.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:132.26,134.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:138.2,138.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:138.25,139.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:139.22,141.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:142.8,143.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:143.26,145.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:148.2,148.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:148.22,150.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:151.2,151.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:151.38,153.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:154.2,154.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:154.19,156.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:159.2,161.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:161.25,164.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:165.2,165.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:165.25,168.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:169.2,171.23 3 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:171.23,174.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:175.2,175.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:175.23,178.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:180.2,193.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:193.16,195.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:198.2,199.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:199.29,201.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:202.2,202.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:202.29,204.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:205.2,213.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:216.121,217.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:217.28,218.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:218.26,220.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:221.3,222.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:222.17,223.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:223.49,225.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:226.4,226.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:228.3,228.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:230.2,230.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:230.26,232.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:233.2,234.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:234.16,235.48 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:235.48,237.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:238.3,238.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:240.2,240.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:243.101,248.36 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:248.36,250.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:250.8,252.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:253.2,253.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:253.16,255.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:256.2,256.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:256.32,257.128 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:257.128,262.72 5 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:262.72,264.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:267.2,267.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:276.81,277.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:277.25,279.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:280.2,280.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:280.22,282.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:283.2,283.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:283.39,285.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:286.2,286.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:286.25,288.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:289.2,289.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:289.21,291.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:292.2,293.14 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:293.14,295.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:296.2,305.16 5 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:305.16,307.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:308.2,314.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:317.84,318.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:318.19,320.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:321.2,323.63 3 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:323.63,325.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:326.2,329.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:332.82,333.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:333.38,335.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:336.2,337.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:338.18,339.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:340.18,341.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:345.2,345.59 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:345.59,347.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:349.2,351.21 3 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:351.21,353.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:353.8,356.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:357.2,357.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:357.16,359.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:366.2,367.41 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:367.41,369.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:371.2,378.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:397.115,398.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:398.15,400.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:403.2,404.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:404.26,405.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:405.28,407.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:408.3,408.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:408.28,410.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:412.2,412.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:412.23,415.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:420.2,426.12 4 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:426.12,427.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:427.27,429.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:429.18,431.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:433.4,433.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:433.33,435.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:440.2,441.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:441.26,442.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:442.28,443.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:443.49,445.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:448.3,448.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:448.28,449.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:449.49,451.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:454.2,454.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:457.82,458.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:458.21,460.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:461.2,462.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:462.16,464.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:465.2,465.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:465.36,467.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:468.2,469.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:469.16,471.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:472.2,477.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:480.82,481.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:481.40,483.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:484.2,485.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:485.19,487.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:488.2,489.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:489.16,491.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:492.2,499.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:502.82,503.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:503.21,505.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:506.2,507.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:507.16,509.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:510.2,514.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:23.179,24.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:24.22,26.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:28.2,32.22 4 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:32.22,34.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:35.2,36.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:36.22,38.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:40.2,41.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:41.26,43.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:44.2,44.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:44.26,46.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:47.2,47.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:47.30,49.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:50.2,50.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:50.30,52.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:54.2,55.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:55.16,57.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:58.2,58.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:58.13,60.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:61.2,62.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:62.16,64.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:65.2,65.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:65.13,67.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:69.2,70.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:70.16,72.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:73.2,73.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:73.15,75.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:77.2,77.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:80.172,81.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:81.28,82.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:82.23,84.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:85.3,85.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:85.18,87.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:88.3,89.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:89.17,90.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:90.49,92.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:93.4,93.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:95.3,95.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:98.2,98.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:98.24,100.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:101.2,101.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:101.19,103.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:104.2,105.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:105.16,106.48 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:106.48,108.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:109.3,109.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:111.2,111.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:114.119,116.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:116.22,118.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:119.2,120.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:120.22,122.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:124.2,126.26 3 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:126.26,127.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:127.36,129.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:130.3,130.105 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:131.8,132.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:132.32,134.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:135.3,135.103 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:137.2,137.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:137.16,139.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:141.2,141.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:141.32,143.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:143.27,145.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:146.3,147.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:147.27,149.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:150.3,150.106 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:150.106,151.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:153.3,153.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:153.27,154.114 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:154.114,155.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:157.9,157.104 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:157.104,158.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:160.3,160.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:160.27,161.114 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:161.114,162.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:164.9,164.104 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:164.104,165.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:167.3,167.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:169.2,169.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:25.90,26.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:26.26,28.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:30.2,31.49 2 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:31.49,33.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:35.2,35.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:36.16,37.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:38.10,39.63 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:43.84,44.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:44.21,46.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:47.2,47.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:47.25,49.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:50.2,50.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:50.21,52.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:53.2,53.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:53.21,55.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:57.2,58.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:59.18,60.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:61.15,62.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:63.24,64.42 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:65.10,66.108 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:69.2,70.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:70.22,72.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:73.2,74.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:74.29,76.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:78.2,78.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:78.14,85.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:87.2,89.37 3 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:89.37,92.21 3 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:92.21,94.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:97.2,100.31 4 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:100.31,102.38 2 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:102.38,104.37 2 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:104.37,106.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:109.3,122.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:122.26,124.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:125.3,125.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:125.19,127.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:131.3,133.39 3 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:133.39,135.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:135.9,137.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:138.3,138.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:138.17,140.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:142.3,142.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:142.34,144.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:145.3,145.11 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:148.2,155.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:20.99,22.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:22.16,24.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:26.2,31.44 3 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:31.44,32.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:32.33,33.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:33.43,38.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:43.2,43.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:43.49,45.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:46.2,46.48 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:46.48,48.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:50.2,52.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:52.27,55.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:55.8,60.24 3 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:60.24,62.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:64.3,64.57 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:64.57,66.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:68.3,68.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:71.2,71.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:71.16,73.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:75.2,76.23 2 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:76.23,78.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:80.2,80.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:19.40,89.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:109.71,111.9 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:111.9,113.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:115.2,116.38 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:116.38,117.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:118.13,119.41 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:119.41,121.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:122.17,123.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:123.43,125.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:126.11,127.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:127.40,129.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:133.2,133.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:133.22,138.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:139.2,139.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:143.90,144.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:144.25,146.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:148.2,149.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:149.16,151.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:153.2,157.61 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:157.61,159.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:161.2,161.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:162.16,163.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:164.14,165.35 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:166.13,167.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:168.16,169.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:170.17,171.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:172.16,173.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:174.15,175.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:176.10,177.120 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:189.85,191.39 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:191.39,192.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:192.44,194.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:196.2,196.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:196.15,198.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:199.2,199.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:199.15,201.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:202.2,202.46 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:205.91,207.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:207.17,209.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:211.2,215.25 5 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:215.25,217.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:218.2,224.25 4 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:224.25,226.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:227.2,227.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:227.25,229.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:231.2,243.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:243.16,245.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:247.2,247.139 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:250.89,252.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:252.19,254.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:255.2,256.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:256.25,258.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:259.2,264.52 5 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:264.52,266.14 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:266.14,268.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:271.2,277.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:277.25,280.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:282.2,283.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:283.16,285.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:287.2,287.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:287.22,288.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:288.20,290.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:291.3,291.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:294.2,297.31 3 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:297.31,300.29 3 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:300.29,302.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:303.3,305.69 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:308.2,308.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:311.88,313.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:313.13,315.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:317.2,318.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:318.16,320.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:322.2,328.22 6 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:328.22,331.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:333.2,333.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:333.23,335.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:335.30,338.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:341.2,341.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:344.91,346.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:346.13,348.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:350.2,353.18 3 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:353.18,354.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:354.27,356.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:357.3,357.73 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:357.73,359.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:362.2,362.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:362.19,370.17 4 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:370.17,372.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:375.2,376.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:376.26,378.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:379.2,379.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:382.92,384.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:384.13,386.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:388.2,389.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:389.16,391.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:393.2,401.16 4 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:401.16,403.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:405.2,405.88 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:408.91,410.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:410.13,412.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:414.2,418.95 4 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:418.95,420.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:422.2,422.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:425.90,427.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:427.13,429.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:431.2,433.167 3 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:433.167,435.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:437.2,437.89 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:437.89,439.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:441.2,441.108 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:22.93,24.49 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:24.49,26.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:28.2,28.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:29.14,30.42 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:31.17,32.59 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:33.16,34.58 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:35.24,36.75 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:37.27,38.71 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:39.22,40.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:41.23,42.63 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:43.10,44.66 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:48.79,49.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:49.13,51.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:52.2,53.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:53.16,55.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:57.2,58.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:58.32,60.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:61.2,84.28 3 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:87.101,88.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:88.13,90.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:91.2,91.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:91.38,93.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:94.2,95.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:95.16,97.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:98.2,98.53 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:98.53,100.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:102.2,104.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:104.17,106.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:107.2,107.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:107.29,109.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:110.2,115.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:118.100,119.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:119.13,121.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:122.2,122.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:122.38,124.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:125.2,126.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:126.16,128.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:129.2,129.53 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:129.53,131.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:133.2,135.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:135.17,137.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:138.2,138.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:138.29,140.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:141.2,146.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:149.123,150.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:150.13,152.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:153.2,153.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:153.18,155.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:156.2,156.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:156.38,158.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:159.2,161.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:161.17,163.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:164.2,169.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:172.113,173.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:173.13,175.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:176.2,176.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:176.50,178.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:179.2,181.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:181.17,183.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:184.2,188.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:191.57,195.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:197.102,198.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:198.13,200.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:201.2,201.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:201.20,203.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:204.2,205.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:205.16,207.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:209.2,210.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:210.32,212.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:214.2,217.56 3 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:217.56,223.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:225.2,230.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:233.41,235.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:235.16,237.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:238.2,238.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:35.27,37.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:42.41,43.11 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:44.48,45.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:46.10,47.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:54.57,55.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:56.17,57.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:58.16,59.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:60.10,61.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:82.58,83.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:84.28,85.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:86.26,87.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:88.10,89.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:93.114,95.68 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:95.68,97.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:99.2,101.42 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:101.42,102.71 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:102.71,105.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:107.2,117.23 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:117.23,119.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:121.2,124.22 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:124.22,125.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:125.31,127.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:128.3,128.35 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:129.8,129.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:129.37,131.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:132.2,132.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:135.74,136.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:136.30,138.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:139.2,139.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:139.34,141.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:142.2,142.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:142.31,144.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:145.2,145.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:145.22,147.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:161.169,162.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:162.17,164.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:165.2,166.51 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:166.51,168.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:169.2,169.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:172.92,174.42 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:174.42,177.63 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:177.63,179.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:179.9,181.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:183.2,183.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:186.65,190.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:192.115,194.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:194.26,196.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:196.8,196.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:196.31,198.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:199.2,199.117 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:202.122,206.31 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:206.31,207.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:207.45,209.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:211.2,211.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:214.72,216.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:218.117,219.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:219.16,221.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:222.2,223.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:223.20,225.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:225.17,227.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:228.3,228.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:228.27,229.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:229.50,231.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:231.30,232.11 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:236.3,236.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:239.2,241.60 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:241.60,243.61 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:243.61,245.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:246.3,246.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:246.24,247.9 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:249.3,250.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:250.17,252.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:253.3,253.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:253.22,254.9 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:256.3,256.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:256.29,257.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:257.50,259.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:259.30,260.11 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:264.3,265.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:265.32,266.9 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:269.2,269.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:272.51,273.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:273.16,275.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:276.2,277.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:277.18,279.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:280.2,280.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:280.19,282.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:283.2,283.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:286.97,288.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:288.30,290.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:291.2,291.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:291.49,293.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:294.2,294.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:297.108,299.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:301.108,303.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:305.102,307.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:319.55,320.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:320.31,322.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:323.2,323.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:323.26,325.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:326.2,326.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:329.71,330.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:343.26,344.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:345.10,346.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:354.95,362.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:362.16,364.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:366.2,397.39 14 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:397.39,399.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:399.27,401.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:402.8,404.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:405.2,407.46 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:407.46,410.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:411.2,411.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:411.44,413.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:413.12,415.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:417.2,417.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:417.26,419.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:420.2,420.84 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:420.84,422.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:427.2,427.65 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:427.65,429.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:431.2,433.20 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:433.20,435.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:436.2,437.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:437.20,439.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:440.2,440.56 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:440.56,442.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:443.2,443.56 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:443.56,448.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:450.2,450.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:450.45,453.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:459.2,459.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:459.31,461.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:461.22,462.62 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:462.62,465.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:466.4,466.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:468.3,468.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:471.2,472.115 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:472.115,474.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:491.2,491.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:491.19,493.23 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:493.23,495.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:496.3,508.21 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:508.21,510.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:511.3,511.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:522.2,522.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:522.43,535.34 5 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:535.34,556.30 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:556.30,558.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:559.4,559.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:559.44,561.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:562.4,562.106 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:562.106,564.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:575.4,575.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:575.74,577.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:578.4,579.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:579.18,581.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:583.4,584.28 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:584.28,586.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:588.4,588.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:588.31,599.57 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:599.57,601.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:601.17,604.7 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:606.5,607.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:607.21,609.6 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:615.5,615.138 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:615.138,617.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:617.27,619.7 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:620.6,620.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:622.5,623.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:623.26,625.6 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:626.5,626.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:630.4,631.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:631.20,633.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:634.4,634.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:634.22,637.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:637.26,639.6 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:640.5,640.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:645.4,660.77 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:660.77,662.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:663.4,664.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:664.25,666.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:667.4,667.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:673.2,673.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:673.26,675.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:677.2,678.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:678.25,680.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:681.2,681.97 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:681.97,683.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:690.2,691.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:691.21,693.33 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:693.33,695.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:696.3,696.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:696.33,698.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:699.3,699.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:699.49,704.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:721.3,721.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:721.54,722.84 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:722.84,724.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:728.2,728.99 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:728.99,730.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:732.2,733.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:733.22,735.10 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:736.109,737.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:738.100,739.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:740.114,741.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:742.107,743.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:744.11,745.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:748.2,749.43 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:749.43,751.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:753.2,755.34 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:755.34,756.48 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:756.48,757.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:757.19,760.5 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:764.2,764.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:764.31,767.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:768.2,768.35 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:768.35,771.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:772.2,772.76 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:772.76,776.3 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:778.2,780.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:780.16,782.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:782.20,785.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:788.2,788.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:788.25,798.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:798.18,800.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:800.9,800.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:800.30,807.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:808.3,808.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:808.36,810.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:811.3,812.50 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:812.50,815.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:816.3,822.17 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:822.17,824.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:826.3,836.17 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:836.17,838.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:839.3,839.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:842.2,843.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:843.30,844.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:844.52,846.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:846.9,848.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:851.2,869.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:869.21,871.43 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:871.43,873.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:874.3,874.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:874.29,876.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:886.3,886.76 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:886.76,888.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:890.2,890.105 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:890.105,892.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:893.2,894.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:894.16,896.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:901.2,904.40 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:904.40,905.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:905.15,906.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:909.3,910.63 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:910.63,912.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:912.9,914.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:916.3,916.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:916.43,918.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:919.3,920.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:920.20,922.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:925.3,925.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:925.23,928.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:929.3,931.33 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:931.33,934.39 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:934.39,936.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:939.2,948.42 5 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:948.42,950.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:950.21,952.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:952.9,955.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:959.2,959.53 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:959.53,960.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:960.54,961.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:961.33,963.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:964.9,972.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:973.3,973.60 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:973.60,974.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:974.40,976.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:978.3,978.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:978.61,979.41 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:979.41,981.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:983.3,983.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:983.28,985.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:986.3,987.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:989.2,989.51 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:989.51,991.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:995.2,997.53 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:997.53,999.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:999.8,1001.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1002.2,1002.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1002.22,1004.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1008.2,1014.76 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1014.76,1016.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1021.2,1021.57 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1021.57,1026.13 5 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1026.13,1029.21 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1029.21,1032.5 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1033.4,1033.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1033.49,1035.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1036.4,1043.89 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1043.89,1046.5 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1048.4,1048.86 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1052.2,1063.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1063.21,1065.40 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1065.40,1067.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1068.3,1068.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1068.38,1070.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1072.2,1074.18 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1074.18,1081.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1082.2,1082.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1082.28,1084.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1085.2,1085.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1085.16,1087.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1088.2,1088.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1088.30,1090.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1091.2,1091.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1091.30,1093.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1098.2,1098.76 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1098.76,1100.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1101.2,1102.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1102.16,1104.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1105.2,1105.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1111.94,1113.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1113.15,1115.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1117.2,1118.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1118.16,1120.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1122.2,1123.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1123.13,1125.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1126.2,1131.16 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1131.16,1133.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1134.2,1134.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1134.19,1136.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1146.2,1146.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1146.39,1148.55 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1148.55,1150.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1152.2,1152.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1152.39,1154.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1157.2,1158.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1158.21,1163.21 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1163.21,1165.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1166.3,1167.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1167.21,1169.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1170.3,1170.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1170.52,1172.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1173.3,1173.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1173.52,1178.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1179.3,1179.41 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1179.41,1182.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1183.3,1183.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1188.2,1188.46 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1188.46,1190.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1191.2,1191.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1191.27,1193.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1195.2,1196.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1196.16,1198.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1201.2,1210.16 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1210.16,1212.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1213.2,1213.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1218.59,1220.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1220.38,1222.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1225.2,1226.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1226.29,1227.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1227.22,1229.9 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1232.2,1232.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1232.18,1234.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1237.2,1244.29 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1244.29,1245.67 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1245.67,1247.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1249.2,1249.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1249.16,1251.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1254.2,1254.11 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1258.55,1260.47 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1260.47,1262.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1263.2,1264.58 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1264.58,1266.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1267.2,1267.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1270.252,1271.108 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1271.108,1273.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1274.2,1274.55 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1274.55,1276.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1277.2,1277.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1280.184,1282.69 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1282.69,1284.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1284.32,1285.58 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1285.58,1287.10 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1290.3,1290.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1290.18,1292.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1294.2,1294.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1294.19,1297.32 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1297.32,1298.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1298.39,1300.10 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1303.3,1303.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1303.19,1305.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1307.2,1307.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1307.21,1309.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1309.32,1310.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1310.49,1312.10 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1315.3,1315.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1315.18,1317.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1319.2,1319.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1319.28,1321.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1321.17,1323.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1324.3,1324.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1324.27,1326.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1328.2,1328.76 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1328.76,1330.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1331.2,1331.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1342.96,1343.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1343.26,1345.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1347.2,1348.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1348.16,1350.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1352.2,1363.23 9 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1363.23,1364.58 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1364.58,1365.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1365.31,1367.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1367.10,1369.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1373.2,1373.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1373.17,1375.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1376.2,1376.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1376.16,1378.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1379.2,1379.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1379.16,1381.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1382.2,1382.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1382.18,1384.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1385.2,1385.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1385.19,1387.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1388.2,1388.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1388.19,1390.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1396.2,1399.18 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1399.18,1400.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1400.61,1401.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1402.50,1403.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1404.12,1405.108 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1409.2,1410.42 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1410.42,1414.3 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1415.2,1420.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1420.16,1422.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1429.2,1444.43 6 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1444.43,1446.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1449.2,1451.27 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1451.27,1453.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1458.2,1458.46 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1458.46,1460.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1461.2,1461.63 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1461.63,1463.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1465.2,1466.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1466.15,1472.29 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1472.29,1479.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1479.18,1481.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1482.4,1482.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1482.23,1483.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1485.4,1485.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1485.30,1486.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1486.24,1488.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1488.32,1489.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1493.4,1494.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1494.30,1495.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1498.8,1504.29 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1504.29,1506.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1506.18,1508.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1509.4,1509.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1509.23,1510.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1512.4,1512.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1512.30,1513.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1513.24,1515.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1515.32,1516.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1520.4,1521.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1521.30,1522.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1526.2,1526.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1526.26,1528.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1528.17,1530.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1535.2,1535.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1535.74,1536.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1536.13,1537.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1537.33,1542.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1542.26,1544.39 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1544.39,1546.7 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1548.5,1548.82 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1565.2,1565.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1565.38,1569.27 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1569.27,1571.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1572.3,1572.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1572.27,1574.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1576.3,1581.32 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1581.32,1586.4 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1588.3,1592.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1592.18,1594.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1595.3,1596.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1596.17,1598.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1599.3,1599.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1602.2,1602.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1603.15,1618.32 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1618.32,1620.33 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1620.33,1621.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1621.40,1623.11 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1626.4,1638.6 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1640.3,1641.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1641.17,1643.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1644.3,1644.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1646.18,1648.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1648.17,1650.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1651.3,1651.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1653.10,1654.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1654.25,1656.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1657.3,1659.32 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1659.32,1661.33 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1661.33,1662.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1662.40,1664.11 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1667.4,1669.26 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1669.26,1671.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1672.4,1673.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1673.25,1675.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1676.4,1676.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1678.3,1678.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1690.51,1695.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1700.73,1702.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1702.16,1704.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1705.2,1706.48 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1706.48,1710.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1711.2,1713.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1713.16,1715.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1716.2,1716.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1727.117,1731.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1731.21,1733.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1734.2,1735.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1735.16,1737.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1738.2,1739.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1739.27,1741.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1742.2,1742.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1764.19,1775.30 7 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1775.30,1777.37 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1777.37,1779.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1781.3,1781.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1781.20,1783.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1797.2,1797.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1797.39,1799.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1801.2,1811.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1811.25,1813.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1815.2,1816.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1816.29,1818.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1824.2,1824.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1824.27,1826.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1831.2,1833.22 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1833.22,1835.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1837.2,1846.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1846.16,1848.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1853.2,1855.27 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1855.27,1857.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1859.2,1876.33 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1876.33,1878.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1880.2,1881.28 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1881.28,1885.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1885.20,1888.33 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1888.33,1889.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1889.40,1891.11 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1894.4,1894.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1894.20,1895.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1900.3,1900.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1900.22,1902.33 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1902.33,1903.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1903.50,1905.11 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1908.4,1908.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1908.19,1909.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1918.3,1918.56 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1918.56,1919.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1927.3,1927.64 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1927.64,1928.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1932.3,1935.32 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1935.32,1936.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1936.39,1938.10 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1942.3,1956.14 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1956.14,1957.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1957.37,1959.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1961.3,1962.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1962.26,1963.9 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1975.2,1975.59 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1975.59,1986.17 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1986.17,1988.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1990.3,1991.34 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1991.34,1993.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1995.3,1996.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1996.29,1998.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1998.21,2001.34 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2001.34,2002.41 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2002.41,2004.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2007.5,2007.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2007.21,2008.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2011.4,2011.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2011.23,2013.34 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2013.34,2014.51 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2014.51,2016.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2019.5,2019.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2019.20,2020.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2023.4,2023.57 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2023.57,2024.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2027.4,2027.65 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2027.65,2028.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2030.4,2031.33 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2031.33,2032.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2032.40,2034.11 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2037.4,2051.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2051.15,2052.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2052.38,2054.6 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2056.4,2057.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2057.27,2058.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2065.2,2066.28 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2066.28,2068.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2072.2,2072.71 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2072.71,2080.30 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2080.30,2081.41 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2081.41,2087.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2089.3,2089.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2089.13,2090.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2090.31,2095.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2095.25,2097.38 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2097.38,2099.7 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2101.5,2101.81 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2112.2,2112.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2112.38,2115.27 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2115.27,2117.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2121.3,2138.30 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2138.30,2140.11 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2140.11,2141.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2143.4,2160.15 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2160.15,2161.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2161.39,2163.6 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2165.4,2165.46 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2167.3,2173.24 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2173.24,2175.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2176.3,2176.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2179.2,2179.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2180.15,2182.24 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2182.24,2184.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2185.3,2185.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2187.18,2199.30 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2199.30,2201.11 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2201.11,2202.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2204.4,2208.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2208.15,2209.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2209.39,2211.6 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2213.4,2213.35 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2215.3,2216.24 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2216.24,2218.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2219.3,2219.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2220.10,2221.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2221.22,2223.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2224.3,2226.27 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2226.27,2228.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2228.20,2230.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2231.4,2233.26 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2233.26,2235.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2236.4,2237.23 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2237.23,2239.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2240.4,2240.46 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2240.46,2244.5 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2245.4,2245.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2247.3,2247.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2252.94,2254.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2254.16,2256.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2258.2,2260.18 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2260.18,2261.59 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2261.59,2262.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2262.36,2264.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2264.10,2266.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2270.2,2270.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2270.13,2272.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2273.2,2273.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2273.50,2275.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2277.2,2277.98 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2281.98,2282.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2282.26,2284.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2286.2,2287.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2287.16,2289.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2291.2,2292.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2292.13,2294.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2297.2,2298.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2298.19,2299.51 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2299.51,2301.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2302.3,2302.55 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2304.2,2304.42 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2304.42,2306.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2308.2,2308.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2308.54,2309.48 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2309.48,2311.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2312.3,2312.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2316.2,2318.53 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:17.82,19.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:21.149,22.55 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:22.55,24.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:25.2,25.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:25.36,27.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:28.2,34.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:34.16,36.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:37.2,37.42 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:37.42,39.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:40.2,40.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:43.105,44.48 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:44.48,46.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:47.2,48.54 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:51.129,53.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:53.16,55.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:56.2,57.53 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:57.53,59.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:60.2,61.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:61.25,63.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:64.2,65.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:65.16,67.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:68.2,68.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:26.97,27.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:27.18,29.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:30.2,30.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:33.37,35.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:37.81,38.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:38.44,40.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:41.2,41.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:41.38,43.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:44.2,44.57 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:47.88,48.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:48.32,50.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:51.2,52.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:52.20,54.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:55.2,55.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:58.40,72.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:74.106,75.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:75.34,77.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:78.2,79.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:79.16,81.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:83.2,84.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:84.16,86.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:88.2,89.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:89.13,91.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:93.2,94.63 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:94.63,96.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:98.2,98.72 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:98.72,100.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:102.2,106.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:109.117,110.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:110.32,112.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:113.2,113.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:113.34,115.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:117.2,118.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:118.16,120.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:121.2,121.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:121.19,123.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:125.2,126.69 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:126.69,128.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:130.2,136.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:18.33,20.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:22.27,37.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:39.93,40.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:40.30,42.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:43.2,43.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:43.28,45.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:46.2,47.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:47.16,49.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:51.2,52.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:52.17,54.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:55.2,56.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:56.19,58.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:59.2,59.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:59.19,61.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:62.2,63.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:63.16,65.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:67.2,74.9 3 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:74.9,76.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:77.2,78.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:78.15,80.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:81.2,85.16 4 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:85.16,87.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:88.2,88.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:88.17,90.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:92.2,101.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:104.48,105.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:105.16,107.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:108.2,109.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:109.29,111.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:112.2,112.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:112.31,114.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:115.2,115.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:118.75,120.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:120.27,121.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:121.32,123.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:123.17,124.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:126.4,126.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:129.2,134.33 3 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:134.33,136.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:137.2,137.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:137.40,138.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:138.39,140.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:141.3,141.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:143.2,143.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:143.34,145.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:146.2,147.35 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:147.35,149.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:150.2,150.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:153.77,154.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:154.20,156.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:157.2,159.31 3 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:159.31,160.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:160.33,162.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:163.3,163.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:163.30,165.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:167.2,170.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:23.91,25.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:27.38,50.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:52.104,53.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:53.38,55.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:56.2,57.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:57.16,59.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:61.2,62.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:62.26,64.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:65.2,66.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:66.30,68.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:69.2,69.72 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:69.72,71.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:73.2,74.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:74.16,76.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:77.2,78.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:78.16,80.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:81.2,82.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:82.16,84.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:85.2,86.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:86.16,88.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:90.2,105.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:105.16,107.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:109.2,109.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:109.19,117.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:118.2,118.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:118.25,120.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:121.2,121.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:121.30,123.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:124.2,124.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:124.31,126.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:127.2,128.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:128.16,130.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:131.2,131.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:134.91,136.9 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:136.9,138.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:139.2,140.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:140.15,141.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:141.19,143.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:144.3,144.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:146.2,146.94 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:149.59,150.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:150.16,152.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:153.2,154.61 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:154.61,156.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:157.2,157.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:160.56,161.75 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:161.75,163.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:164.2,164.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:167.67,169.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:170.17,171.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:172.67,173.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:174.10,175.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:179.60,180.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:180.16,182.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:183.2,184.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:184.25,186.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:187.2,187.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:190.57,191.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:192.15,193.81 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:193.81,195.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:196.3,196.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:197.19,199.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:199.17,201.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:202.3,202.55 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:202.55,204.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:205.3,205.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:206.14,207.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:208.11,209.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:210.10,211.41 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:215.59,216.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:216.16,218.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:219.2,219.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:220.12,221.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:222.14,223.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:224.10,225.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:28.90,30.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:30.16,32.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:34.2,36.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:37.16,38.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:40.16,42.140 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:44.20,46.140 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:48.17,50.142 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:52.17,56.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:56.50,62.63 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:62.63,64.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:66.4,66.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:66.45,68.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:72.4,74.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:74.25,76.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:77.4,77.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:80.3,80.101 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:82.18,84.141 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:86.18,88.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:88.18,90.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:91.3,91.41 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:93.17,96.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:96.50,99.59 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:99.59,101.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:102.4,104.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:104.25,106.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:107.4,107.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:110.3,110.98 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:112.10,116.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:125.86,126.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:126.16,128.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:129.2,130.9 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:130.9,132.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:133.2,133.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:133.22,135.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:137.2,139.31 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:139.31,141.10 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:141.10,143.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:144.3,145.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:145.22,147.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:148.3,149.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:149.26,151.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:152.3,152.68 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:152.68,154.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:155.3,156.37 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:156.37,158.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:159.3,160.107 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:162.2,162.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:165.249,166.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:166.24,168.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:169.2,169.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:169.38,171.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:173.2,174.31 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:174.31,175.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:175.32,177.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:180.2,181.34 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:181.34,182.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:182.29,183.9 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:185.3,197.17 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:197.17,199.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:200.3,200.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:200.20,201.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:203.3,203.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:203.37,205.33 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:205.33,206.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:208.4,208.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:208.19,209.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:209.43,210.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:212.5,212.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:214.4,215.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:215.30,216.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:220.2,220.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:223.113,229.2 5 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:231.101,233.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:247.92,251.16 4 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:251.16,253.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:253.8,253.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:253.24,255.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:259.2,272.51 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:272.51,274.38 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:274.38,275.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:276.50,277.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:278.12,279.107 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:287.2,292.26 5 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:292.26,294.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:297.2,297.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:297.19,301.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:303.2,311.42 5 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:311.42,315.3 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:316.2,341.64 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:341.64,342.86 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:342.86,344.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:345.3,345.56 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:345.56,347.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:348.3,360.19 6 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:360.19,364.4 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:365.3,365.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:369.2,370.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:370.15,372.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:372.27,374.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:375.3,375.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:375.27,377.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:380.2,381.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:381.15,387.28 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:387.28,395.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:395.18,397.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:398.4,398.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:398.23,399.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:401.4,401.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:401.30,402.66 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:402.66,403.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:405.5,406.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:406.12,407.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:409.5,409.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:409.28,413.6 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:414.5,415.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:415.30,416.11 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:419.4,420.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:420.30,421.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:424.8,432.28 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:432.28,438.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:438.18,440.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:441.4,441.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:441.23,442.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:444.4,444.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:444.30,445.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:445.40,447.31 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:447.31,448.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:452.4,455.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:455.30,456.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:461.2,465.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:465.17,467.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:469.2,470.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:470.16,472.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:473.2,473.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:20.79,21.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:21.43,23.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:24.2,24.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:24.29,26.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:27.2,27.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:30.40,63.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:65.68,71.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:71.25,74.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:75.2,75.67 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:78.62,83.19 3 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:83.19,87.3 3 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:88.2,88.89 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:91.101,92.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:92.22,94.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:95.2,96.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:96.18,98.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:99.2,100.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:100.16,102.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:103.2,104.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:104.16,106.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:107.2,107.119 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:110.99,111.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:111.22,113.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:114.2,115.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:115.18,117.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:118.2,119.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:119.16,121.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:122.2,122.51 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:122.51,124.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:125.2,126.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:126.16,128.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:129.2,131.15 3 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:131.15,132.69 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:132.69,134.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:135.3,135.58 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:137.2,137.130 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:140.102,142.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:142.16,144.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:145.2,145.64 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:145.64,147.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:148.2,148.113 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:151.109,153.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:153.16,155.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:156.2,157.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:157.16,159.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:160.2,161.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:161.16,163.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:164.2,164.67 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:167.107,169.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:169.16,171.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:172.2,173.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:173.16,175.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:176.2,176.107 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:176.107,178.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:179.2,179.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:180.41,181.63 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:182.41,183.95 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:184.10,185.83 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:189.111,191.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:191.16,193.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:194.2,195.57 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:195.57,197.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:198.2,199.23 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:199.23,201.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:202.2,203.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:203.16,205.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:206.2,206.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:206.17,208.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:209.2,209.108 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:212.63,215.2 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:217.69,219.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:219.16,221.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:222.2,222.79 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:225.60,227.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:227.16,229.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:230.2,230.57 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:233.137,234.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:234.49,236.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:237.2,238.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:238.16,240.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:241.2,243.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:243.16,245.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:246.2,247.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:247.16,249.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:250.2,250.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:250.22,252.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:253.2,253.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:256.142,258.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:258.16,260.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:261.2,262.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:262.16,264.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:265.2,265.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:265.47,267.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:268.2,269.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:269.16,270.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:270.50,272.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:273.3,273.89 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:275.2,275.173 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:278.157,280.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:280.16,282.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:283.2,283.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:283.47,285.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:286.2,287.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:287.16,288.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:288.50,290.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:291.3,291.89 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:293.2,293.169 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:296.104,297.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:297.22,299.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:300.2,301.61 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:301.61,303.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:303.20,304.9 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:307.2,307.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:307.19,309.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:310.2,317.8 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:320.119,322.39 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:322.39,323.81 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:323.81,325.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:327.2,327.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:330.71,332.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:332.16,334.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:335.2,335.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:17.61,105.23 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:105.23,122.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:123.2,123.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:126.104,127.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:127.61,129.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:130.2,130.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:130.38,132.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:133.2,134.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:134.16,136.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:137.2,138.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:138.16,140.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:141.2,147.107 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:147.107,149.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:150.2,151.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:151.16,153.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:154.2,170.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:170.19,172.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:173.2,173.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:176.103,177.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:177.61,179.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:180.2,180.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:180.38,182.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:183.2,184.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:184.16,186.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:187.2,191.106 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:191.106,193.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:194.2,195.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:195.16,197.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:198.2,200.31 3 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:200.31,207.36 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:207.36,218.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:219.3,220.35 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:222.2,230.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:233.107,234.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:234.61,236.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:237.2,237.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:237.38,239.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:240.2,241.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:241.16,243.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:244.2,248.110 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:248.110,250.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:251.2,252.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:252.16,254.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:255.2,256.33 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:256.33,266.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:267.2,275.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:278.108,279.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:279.61,281.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:282.2,282.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:282.37,284.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:285.2,286.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:286.16,288.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:289.2,290.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:290.19,292.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:293.2,293.104 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:293.104,295.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:296.2,297.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:297.16,299.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:300.2,307.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:307.16,309.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:310.2,311.43 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:311.43,318.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:319.2,332.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:332.22,334.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:335.2,335.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:338.108,339.62 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:339.62,341.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:342.2,342.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:342.38,344.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:345.2,346.9 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:346.9,348.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:349.2,350.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:350.16,352.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:353.2,357.16 5 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:357.16,359.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:360.2,370.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:373.109,374.62 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:374.62,376.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:377.2,377.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:377.38,379.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:380.2,381.9 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:381.9,383.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:384.2,385.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:385.16,387.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:388.2,390.32 3 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:390.32,392.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:393.2,394.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:394.16,396.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:397.2,403.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:406.106,407.62 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:407.62,409.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:410.2,410.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:410.38,412.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:413.2,414.9 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:414.9,416.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:417.2,418.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:418.16,420.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:421.2,423.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:423.16,424.41 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:424.41,434.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:435.3,435.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:437.2,445.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:483.65,484.42 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:484.42,485.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:485.39,487.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:489.2,489.85 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:489.85,491.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:492.2,492.95 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:495.102,496.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:496.38,498.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:499.2,499.58 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:499.58,501.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:502.2,502.90 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:505.60,508.2 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:510.66,512.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:512.26,514.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:515.2,515.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:518.69,521.33 3 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:521.33,523.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:523.21,524.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:526.3,526.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:526.34,527.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:529.3,530.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:532.2,532.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:535.63,537.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:537.19,539.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:540.2,541.42 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:541.42,543.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:544.2,544.57 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:544.57,546.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:547.2,547.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:547.54,549.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:550.2,550.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:553.70,557.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:559.66,561.9 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:561.9,563.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:564.2,566.17 3 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:566.17,568.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:569.2,569.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:570.103,572.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:573.34,574.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:575.10,576.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:580.56,581.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:581.37,583.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:584.2,584.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:584.26,586.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:586.37,587.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:589.3,589.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:591.2,591.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:594.90,602.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:604.68,605.71 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:605.71,607.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:607.17,609.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:610.3,610.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:612.2,613.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:613.16,615.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:616.2,617.41 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:617.41,619.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:620.2,620.78 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:623.65,625.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:625.16,627.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:628.2,628.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:628.17,630.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:631.2,631.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:634.51,635.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:635.16,637.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:638.2,638.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:641.56,642.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:642.28,644.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:645.2,646.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:649.92,651.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:651.29,653.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:654.2,654.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:657.86,659.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:659.29,661.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:662.2,662.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:665.94,667.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:667.29,669.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:670.2,670.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:673.98,675.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:675.29,677.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:678.2,678.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:17.93,18.104 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:18.104,20.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:22.2,23.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:23.16,25.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:27.2,28.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:28.19,30.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:32.2,35.33 3 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:35.33,36.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:36.47,39.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:42.2,44.20 3 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:44.20,47.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:48.2,49.68 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:49.68,50.48 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:50.48,52.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:53.3,53.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:53.32,55.23 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:55.23,56.63 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:56.63,58.6 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:59.5,59.53 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:61.4,61.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:64.2,71.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:71.17,73.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:73.8,73.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:73.29,75.36 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:75.36,77.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:78.3,83.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:86.2,86.35 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:86.35,88.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:90.2,97.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:97.16,99.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:101.2,110.28 3 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:110.28,112.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:113.2,124.16 4 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:124.16,126.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:127.2,127.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:133.93,134.35 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:134.35,136.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:138.2,139.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:139.16,141.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:143.2,144.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:144.16,146.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:147.2,147.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:147.17,149.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:151.2,152.33 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:152.33,153.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:153.47,156.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:159.2,160.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:160.16,162.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:164.2,176.26 3 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:176.26,178.23 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:178.23,180.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:181.3,192.5 3 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:195.2,196.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:196.16,198.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:199.2,199.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:22.104,24.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:24.16,26.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:28.2,29.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:29.18,31.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:33.2,33.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:34.13,35.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:36.13,37.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:38.14,39.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:40.16,41.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:42.10,43.95 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:51.67,53.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:57.68,58.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:58.33,60.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:61.2,61.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:67.42,69.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:74.61,76.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:76.26,78.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:79.2,79.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:85.90,86.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:86.49,88.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:90.2,91.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:91.15,93.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:94.2,95.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:95.17,97.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:100.2,103.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:103.16,105.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:107.2,113.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:113.12,115.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:115.18,117.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:118.3,119.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:119.20,121.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:122.3,124.48 3 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:125.8,127.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:129.2,130.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:130.16,132.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:134.2,139.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:145.90,147.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:147.15,149.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:151.2,152.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:152.16,154.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:156.2,157.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:157.16,158.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:158.47,160.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:161.3,161.56 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:164.2,170.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:170.19,173.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:173.8,175.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:176.2,176.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:181.92,183.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:183.16,185.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:187.2,188.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:188.16,190.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:192.2,200.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:200.25,207.28 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:207.28,209.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:210.3,210.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:212.2,212.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:216.93,217.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:217.52,219.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:221.2,222.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:222.15,224.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:226.2,227.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:227.16,229.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:231.2,231.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:231.47,232.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:232.47,234.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:235.3,235.59 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:238.2,241.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:35.127,36.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:36.23,38.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:39.2,40.40 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:40.40,42.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:43.2,43.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:43.37,45.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:46.2,46.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:46.37,48.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:49.2,49.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:52.23,80.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:82.26,140.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:142.92,143.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:143.25,145.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:147.2,148.49 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:148.49,150.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:152.2,152.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:153.17,154.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:154.24,156.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:157.3,158.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:158.17,160.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:161.3,165.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:166.17,167.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:167.22,169.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:170.3,170.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:170.22,172.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:173.3,174.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:174.17,176.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:177.3,181.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:182.16,189.23 7 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:189.23,191.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:192.3,192.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:192.24,194.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:195.3,195.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:195.39,197.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:198.3,207.17 3 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:207.17,209.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:210.3,210.69 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:210.69,212.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:213.3,213.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:214.10,215.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:219.92,220.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:220.25,222.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:224.2,225.49 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:225.49,227.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:229.2,229.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:230.17,232.24 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:232.24,234.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:235.3,236.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:236.17,238.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:239.3,239.59 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:239.59,241.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:242.3,242.81 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:242.81,244.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:245.3,250.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:251.17,253.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:253.22,255.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:256.3,257.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:257.17,259.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:260.3,260.79 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:260.79,262.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:263.3,268.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:269.10,270.66 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:274.91,276.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:276.16,278.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:279.2,279.67 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:279.67,280.76 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:280.76,282.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:285.2,286.52 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:286.52,288.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:289.2,289.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:292.74,294.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:294.16,296.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:297.2,297.62 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:297.62,299.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:300.2,300.68 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:303.109,304.56 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:304.56,306.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:307.2,307.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:307.25,309.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:310.2,310.81 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:310.81,312.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:313.2,313.102 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:313.102,315.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:316.2,316.108 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:316.108,318.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:319.2,319.99 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:319.99,321.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:322.2,322.99 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:322.99,324.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:325.2,325.60 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:325.60,327.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:328.2,328.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:328.34,330.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:331.2,331.114 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:331.114,333.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:334.2,334.66 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:334.66,336.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:337.2,337.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:337.40,339.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:340.2,340.132 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:340.132,342.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:343.2,343.35 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:343.35,345.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:346.2,346.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:349.92,350.103 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:350.103,352.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:354.2,355.52 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:355.52,357.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:358.2,358.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:358.32,360.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:361.2,361.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:364.108,365.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:365.19,367.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:368.2,369.53 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:369.53,371.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:372.2,372.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:372.19,374.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:375.2,375.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:375.39,376.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:376.34,378.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:380.2,380.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:383.66,385.53 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:385.53,387.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:388.2,388.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:388.19,390.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:391.2,391.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:10.101,12.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:12.16,14.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:16.2,18.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:19.16,20.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:21.14,22.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:23.15,24.84 1 0 +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:25.16,26.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:27.10,28.97 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:21.75,23.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:25.41,28.2 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:30.31,37.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:39.38,46.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:48.50,56.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:58.43,70.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:72.80,73.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:73.36,75.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:76.2,76.48 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:76.48,78.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:79.2,79.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:82.97,84.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:84.16,86.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:87.2,88.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:88.16,90.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:91.2,92.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:92.16,94.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:95.2,96.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:96.16,98.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:99.2,99.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:102.104,104.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:104.16,106.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:107.2,108.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:108.16,110.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:111.2,112.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:112.16,114.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:115.2,116.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:116.16,118.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:119.2,119.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:122.96,124.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:124.16,126.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:127.2,128.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:128.19,130.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:131.2,132.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:132.18,134.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:135.2,141.79 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:141.79,143.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:143.17,145.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:146.3,146.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:148.2,148.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:151.77,153.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:153.16,155.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:156.2,157.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:157.19,159.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:160.2,160.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:10.101,12.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:12.16,14.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:16.2,17.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:17.18,19.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:21.2,21.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:22.15,23.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:24.13,25.42 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:26.14,27.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:28.16,29.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:30.16,31.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:32.10,33.102 1 0 diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/repeat-01/create-database.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/repeat-01/create-database.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/repeat-01/create-database.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/repeat-01/create-database.stdout.log new file mode 100644 index 00000000..4b15bd57 --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/repeat-01/create-database.stdout.log @@ -0,0 +1 @@ +CREATE DATABASE diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/repeat-01/create-pgvector.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/repeat-01/create-pgvector.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/repeat-01/create-pgvector.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/repeat-01/create-pgvector.stdout.log new file mode 100644 index 00000000..d26bad14 --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/repeat-01/create-pgvector.stdout.log @@ -0,0 +1 @@ +CREATE EXTENSION diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/repeat-01/database-identity.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/repeat-01/database-identity.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/repeat-01/database-identity.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/repeat-01/database-identity.stdout.log new file mode 100644 index 00000000..101deaaa --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/repeat-01/database-identity.stdout.log @@ -0,0 +1 @@ +{"database" : "engram_prc_rg_test_c1bf516c578dac52_r1", "schema" : "public", "server_version" : "17.10 (Debian 17.10-1.pgdg12+1)", "user" : "engram"} diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/repeat-01/go-test-summary.json b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/repeat-01/go-test-summary.json new file mode 100644 index 00000000..59cf84cb --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/repeat-01/go-test-summary.json @@ -0,0 +1,40 @@ +{ + "schema_version": 1, + "verdict": "FAIL", + "input_path": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-wrong-fixture\\repeat-01\\go-test.stdout.jsonl", + "fail_on_unexpected_skip": true, + "allowed_skip_identities": [], + "counts": { + "packages": 1, + "tests": 1, + "passed": 0, + "failed": 1, + "skipped": 0, + "no_tests": 0, + "zero_tests": 0, + "incomplete": 0, + "unexpected_skips": 0, + "malformed_lines": 0 + }, + "packages": [ + { + "package": "github.com/thebtf/engram/internal/mcp", + "outcome": "fail", + "elapsed_seconds": 4.115, + "last_output": "FAIL\tgithub.com/thebtf/engram/internal/mcp\t4.106s", + "tests_observed": 1 + } + ], + "tests": [ + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestEC_F1_TagDerivedBackfill_T007", + "outcome": "fail", + "elapsed_seconds": 3.89, + "last_output": "--- FAIL: TestEC_F1_TagDerivedBackfill_T007 (3.89s)", + "skip_allowed": false + } + ], + "unexpected_skips": [], + "errors": [] +} diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/repeat-01/go-test.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/repeat-01/go-test.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/repeat-01/go-test.stdout.jsonl b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/repeat-01/go-test.stdout.jsonl new file mode 100644 index 00000000..f761911e --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/repeat-01/go-test.stdout.jsonl @@ -0,0 +1,30 @@ +{"Time":"2026-07-11T03:58:34.6658114+03:00","Action":"start","Package":"github.com/thebtf/engram/internal/mcp"} +{"Time":"2026-07-11T03:58:34.8492367+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007"} +{"Time":"2026-07-11T03:58:34.8492367+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":"=== RUN TestEC_F1_TagDerivedBackfill_T007\n"} +{"Time":"2026-07-11T03:58:35.8460969+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":"{\"level\":\"warn\",\"error\":\"ERROR: relation \\\"observation_vectors\\\" does not exist (SQLSTATE 42P01)\",\"time\":\"2026-07-11T03:58:35+03:00\",\"message\":\"migration 040: orphan vector cleanup failed (non-fatal)\"}\n"} +{"Time":"2026-07-11T03:58:35.8460969+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":"{\"level\":\"info\",\"garbage_deleted\":0,\"orphan_vectors_deleted\":0,\"time\":\"2026-07-11T03:58:35+03:00\",\"message\":\"migration 040: garbage cleanup complete\"}\n"} +{"Time":"2026-07-11T03:58:35.8545969+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":"{\"level\":\"info\",\"orphan_vectors_deleted\":0,\"time\":\"2026-07-11T03:58:35+03:00\",\"message\":\"migration 041: orphan vector purge complete\"}\n"} +{"Time":"2026-07-11T03:58:35.8632116+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":"{\"level\":\"info\",\"patterns_deleted\":0,\"time\":\"2026-07-11T03:58:35+03:00\",\"message\":\"migration 042: low-quality pattern purge complete\"}\n"} +{"Time":"2026-07-11T03:58:35.8987377+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":"{\"level\":\"info\",\"total_deleted\":0,\"time\":\"2026-07-11T03:58:35+03:00\",\"message\":\"migration 043: radical observation cleanup complete\"}\n"} +{"Time":"2026-07-11T03:58:37.1451668+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":"{\"level\":\"warn\",\"error\":\"ERROR: extension \\\"vectorscale\\\" is not available (SQLSTATE 0A000)\",\"time\":\"2026-07-11T03:58:37+03:00\",\"message\":\"migration 109: vectorscale extension not available, skipping DiskANN index\"}\n"} +{"Time":"2026-07-11T03:58:38.3658968+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":"{\"level\":\"debug\",\"connections\":1,\"time\":\"2026-07-11T03:58:38+03:00\",\"message\":\"Connection pool warmed\"}\n"} +{"Time":"2026-07-11T03:58:38.3888989+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":" store_memory_compat_t007_test.go:158: \n"} +{"Time":"2026-07-11T03:58:38.3888989+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":" \tError Trace:\tD:/Dev/engram/.w/t007-r1-checker/internal/mcp/store_memory_compat_t007_test.go:158\n"} +{"Time":"2026-07-11T03:58:38.3888989+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":" \tError: \tNot equal: \n"} +{"Time":"2026-07-11T03:58:38.3888989+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":" \t \texpected: \"T007 fixture global-tagged\"\n"} +{"Time":"2026-07-11T03:58:38.3888989+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":" \t \tactual : \"T007 fixture project-tagged\"\n"} +{"Time":"2026-07-11T03:58:38.3888989+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":" \t \t\n"} +{"Time":"2026-07-11T03:58:38.3888989+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":" \t \tDiff:\n"} +{"Time":"2026-07-11T03:58:38.3888989+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":" \t \t--- Expected\n"} +{"Time":"2026-07-11T03:58:38.3888989+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":" \t \t+++ Actual\n"} +{"Time":"2026-07-11T03:58:38.3888989+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":" \t \t@@ -1 +1 @@\n"} +{"Time":"2026-07-11T03:58:38.3888989+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":" \t \t-T007 fixture global-tagged\n"} +{"Time":"2026-07-11T03:58:38.3888989+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":" \t \t+T007 fixture project-tagged\n"} +{"Time":"2026-07-11T03:58:38.3888989+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":" \tTest: \tTestEC_F1_TagDerivedBackfill_T007\n"} +{"Time":"2026-07-11T03:58:38.3888989+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":" \tMessages: \tMemoryStore.List must return the exact global-tagged fixture content\n"} +{"Time":"2026-07-11T03:58:38.7360231+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":"--- FAIL: TestEC_F1_TagDerivedBackfill_T007 (3.89s)\n"} +{"Time":"2026-07-11T03:58:38.7360231+03:00","Action":"fail","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Elapsed":3.89} +{"Time":"2026-07-11T03:58:38.7360231+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Output":"FAIL\n"} +{"Time":"2026-07-11T03:58:38.7540232+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Output":"coverage: 0.1% of statements\n"} +{"Time":"2026-07-11T03:58:38.7807451+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Output":"FAIL\tgithub.com/thebtf/engram/internal/mcp\t4.106s\n"} +{"Time":"2026-07-11T03:58:38.7812387+03:00","Action":"fail","Package":"github.com/thebtf/engram/internal/mcp","Elapsed":4.115} diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/repeat-01/pg-stat-activity-after.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/repeat-01/pg-stat-activity-after.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/repeat-01/pg-stat-activity-after.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/repeat-01/pg-stat-activity-after.stdout.log new file mode 100644 index 00000000..fe51488c --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/repeat-01/pg-stat-activity-after.stdout.log @@ -0,0 +1 @@ +[] diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/repeat-01/pg-stat-activity-before.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/repeat-01/pg-stat-activity-before.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/repeat-01/pg-stat-activity-before.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/repeat-01/pg-stat-activity-before.stdout.log new file mode 100644 index 00000000..fe51488c --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/repeat-01/pg-stat-activity-before.stdout.log @@ -0,0 +1 @@ +[] diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/repeat-01/repeat-summary.json b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/repeat-01/repeat-summary.json new file mode 100644 index 00000000..fb97faa3 --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/repeat-01/repeat-summary.json @@ -0,0 +1,36 @@ +{ + "repeat": 1, + "verdict": "FAIL", + "database": "engram_prc_rg_test_c1bf516c578dac52_r1", + "schema": "public", + "database_schema_identity": "engram_prc_rg_test_c1bf516c578dac52_r1.public", + "database_dsn": "REDACTED_DATABASE_DSN", + "database_create_confirmed": true, + "sequential_execution": { + "package_parallelism": 1, + "test_parallelism": 1 + }, + "race": false, + "connection_budget": 20, + "server_sessions_before": 6, + "server_sessions_after": 6, + "sessions_before": 0, + "sessions_after": 0, + "go_test_exit": 1, + "json_parser_exit": 1, + "coverage_policy": "Targeted", + "coverage_exit": 0, + "cleanup_exit": 0, + "cleanup_status": "PASS", + "required_session_start_execution": { + "schema_version": 1, + "verdict": "NOT_APPLICABLE", + "reason": "only an unfiltered canonical ./... run requires the 12-test session-start execution proof" + }, + "cleanup_summary": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-wrong-fixture\\repeat-01\\cleanup\\cleanup.json", + "errors": [ + "go test failed with exit 1", + "go test JSON assertion failed with exit 1" + ], + "artifact_directory": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-wrong-fixture\\repeat-01" +} diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/repeat-01/server-connection-count-after.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/repeat-01/server-connection-count-after.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/repeat-01/server-connection-count-after.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/repeat-01/server-connection-count-after.stdout.log new file mode 100644 index 00000000..1e8b3149 --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/repeat-01/server-connection-count-after.stdout.log @@ -0,0 +1 @@ +6 diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/repeat-01/server-connection-count-before.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/repeat-01/server-connection-count-before.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/repeat-01/server-connection-count-before.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/repeat-01/server-connection-count-before.stdout.log new file mode 100644 index 00000000..1e8b3149 --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/repeat-01/server-connection-count-before.stdout.log @@ -0,0 +1 @@ +6 diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/repeat-01/targeted-coverage.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/repeat-01/targeted-coverage.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/repeat-01/targeted-coverage.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/repeat-01/targeted-coverage.stdout.log new file mode 100644 index 00000000..c958686c --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/repeat-01/targeted-coverage.stdout.log @@ -0,0 +1,352 @@ +github.com/thebtf/engram/internal/mcp/audit_helpers.go:33: effectiveAuditWriter 0.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:44: isAuditEnabled 0.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:52: runAuditAsync 0.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:77: marshalState 0.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:92: logAuditCreate 0.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:117: logAuditEdit 0.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:142: logAuditDelete 0.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:166: logAuditGeneric 0.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:189: logAuditSupersede 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:30: parseArgs 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:46: coerceString 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:67: coerceInt 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:97: coerceInt64 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:127: coerceFloat64 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:151: coerceBool 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:177: coerceStringSlice 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:204: coerceInt64Slice 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:222: clampToInt 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:236: clampInt64ToInt 0.0% +github.com/thebtf/engram/internal/mcp/context.go:17: extractProjectFromHeader 0.0% +github.com/thebtf/engram/internal/mcp/context.go:22: contextWithProject 0.0% +github.com/thebtf/engram/internal/mcp/context.go:29: ContextWithProject 0.0% +github.com/thebtf/engram/internal/mcp/context.go:35: projectFromContext 0.0% +github.com/thebtf/engram/internal/mcp/context.go:41: contextWithSession 0.0% +github.com/thebtf/engram/internal/mcp/context.go:48: ContextWithSession 0.0% +github.com/thebtf/engram/internal/mcp/context.go:54: sessionFromContext 0.0% +github.com/thebtf/engram/internal/mcp/context.go:61: actorFromContext 0.0% +github.com/thebtf/engram/internal/mcp/health.go:22: NewMCPHealth 0.0% +github.com/thebtf/engram/internal/mcp/health.go:29: RecordRequest 0.0% +github.com/thebtf/engram/internal/mcp/health.go:36: RecordError 0.0% +github.com/thebtf/engram/internal/mcp/health.go:42: rotateWindowIfNeeded 0.0% +github.com/thebtf/engram/internal/mcp/health.go:55: HandleHealth 0.0% +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:28: ruleGovernanceCaptureEnabled 0.0% +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:39: captureActiveRuleIntent 0.0% +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:104: ruleIntentFingerprint 0.0% +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:113: marshalRuleCandidateIntentResponse 0.0% +github.com/thebtf/engram/internal/mcp/server.go:127: NewServer 100.0% +github.com/thebtf/engram/internal/mcp/server.go:141: SetBackfillStatusFunc 0.0% +github.com/thebtf/engram/internal/mcp/server.go:146: SetVersionedDocumentStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:151: SetIssueStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:156: SetMemoryStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:161: SetMetaMemoryIndex 0.0% +github.com/thebtf/engram/internal/mcp/server.go:166: SetHintQueue 0.0% +github.com/thebtf/engram/internal/mcp/server.go:171: SetStateStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:176: SetDirectiveCaptureService 0.0% +github.com/thebtf/engram/internal/mcp/server.go:181: SetBehavioralRulesStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:186: SetRuleGovernanceStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:191: SetRuleInjectionTelemetryStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:195: SetPromotionStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:199: SetGraphStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:204: SetNodesStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:211: SetAuditStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:216: SetPurgeStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:222: SetCandidateStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:228: SetSnapshotStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:234: SetBulkFacade 0.0% +github.com/thebtf/engram/internal/mcp/server.go:240: setTestAuditWriter 0.0% +github.com/thebtf/engram/internal/mcp/server.go:246: setTestMemoryEditor 0.0% +github.com/thebtf/engram/internal/mcp/server.go:252: setTestMemorySignificanceUpdater 0.0% +github.com/thebtf/engram/internal/mcp/server.go:260: SetWriteLintOrchestrator 0.0% +github.com/thebtf/engram/internal/mcp/server.go:269: SetRedactionRules 0.0% +github.com/thebtf/engram/internal/mcp/server.go:274: SetEmbeddingStores 0.0% +github.com/thebtf/engram/internal/mcp/server.go:282: SetRerankClient 0.0% +github.com/thebtf/engram/internal/mcp/server.go:290: SetStatsDB 0.0% +github.com/thebtf/engram/internal/mcp/server.go:297: HandleRequest 0.0% +github.com/thebtf/engram/internal/mcp/server.go:303: ListTools 0.0% +github.com/thebtf/engram/internal/mcp/server.go:332: Version 0.0% +github.com/thebtf/engram/internal/mcp/server.go:383: Run 0.0% +github.com/thebtf/engram/internal/mcp/server.go:427: handleRequest 0.0% +github.com/thebtf/engram/internal/mcp/server.go:461: handleNotification 0.0% +github.com/thebtf/engram/internal/mcp/server.go:473: handleInitialize 0.0% +github.com/thebtf/engram/internal/mcp/server.go:496: buildInstructions 0.0% +github.com/thebtf/engram/internal/mcp/server.go:660: storeMemoryTool 0.0% +github.com/thebtf/engram/internal/mcp/server.go:712: recallMemoryTool 0.0% +github.com/thebtf/engram/internal/mcp/server.go:805: primaryTools 0.0% +github.com/thebtf/engram/internal/mcp/server.go:942: handleToolsList 0.0% +github.com/thebtf/engram/internal/mcp/server.go:1612: handleToolsCall 0.0% +github.com/thebtf/engram/internal/mcp/server.go:1644: sanitizeToolCallArgs 0.0% +github.com/thebtf/engram/internal/mcp/server.go:1656: callTool 0.0% +github.com/thebtf/engram/internal/mcp/server.go:1874: sendResponse 0.0% +github.com/thebtf/engram/internal/mcp/server.go:1884: sendError 0.0% +github.com/thebtf/engram/internal/mcp/server.go:1896: handleFindSimilarObservations 0.0% +github.com/thebtf/engram/internal/mcp/server.go:1927: handleGetMemoryStats 0.0% +github.com/thebtf/engram/internal/mcp/server.go:2055: handleBackfillStatus 0.0% +github.com/thebtf/engram/internal/mcp/server.go:2071: handleCheckSystemHealth 0.0% +github.com/thebtf/engram/internal/mcp/server.go:2216: handleAnalyzeSearchPatterns 0.0% +github.com/thebtf/engram/internal/mcp/server.go:2246: handleSearchSessions 0.0% +github.com/thebtf/engram/internal/mcp/server.go:2251: handleListSessions 0.0% +github.com/thebtf/engram/internal/mcp/tools_admin.go:18: buildAdminTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_admin.go:68: adminActionsForEnv 33.3% +github.com/thebtf/engram/internal/mcp/tools_admin.go:80: vnextEnabled 0.0% +github.com/thebtf/engram/internal/mcp/tools_admin.go:84: handleAdmin 0.0% +github.com/thebtf/engram/internal/mcp/tools_admin.go:120: handlePurgeProject 0.0% +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:27: ambientHintsEnabledFromEnv 0.0% +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:32: ambientHintsTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:48: handleGetAmbientHints 0.0% +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:86: normalizeAmbientHintsToolLimit 0.0% +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:96: ambientHintItems 0.0% +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:114: errMissingSessionID 0.0% +github.com/thebtf/engram/internal/mcp/tools_brief.go:31: handleGetMemoryBrief 0.0% +github.com/thebtf/engram/internal/mcp/tools_brief.go:107: memoryBriefUsesPrincipalScope 0.0% +github.com/thebtf/engram/internal/mcp/tools_brief.go:115: handlePrincipalMemoryBrief 0.0% +github.com/thebtf/engram/internal/mcp/tools_brief.go:259: truncateBriefContent 0.0% +github.com/thebtf/engram/internal/mcp/tools_brief.go:270: filterInjectionByScope 0.0% +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:25: bulkOpsTools 0.0% +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:95: handleBulkPromote 0.0% +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:154: handleBulkDelete 0.0% +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:211: handleBulkSupersede 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:31: candidateItemFromDomain 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:51: newCandidateReviewSnapshot 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:59: requireCandidateReviewSnapshot 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:68: candidateTools 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:165: handleListCandidates 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:208: handleGetCandidate 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:239: handlePromoteCandidate 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:348: handleRejectCandidate 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:402: handleSupersedeCandidate 0.0% +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:34: codeIntelEnabled 0.0% +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:42: SetCodeChunkStore 0.0% +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:48: codebaseSearchTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:79: codebaseStatusTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:100: handleCodebaseSearch 0.0% +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:194: handleCodebaseStatus 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:21: getVault 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:35: credentialStore 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:49: handleStoreCredential 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:130: handleGetCredential 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:192: handleListCredentials 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:243: handleDeleteCredential 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:302: handleVaultStatus 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:338: expandTagHierarchy 0.0% +github.com/thebtf/engram/internal/mcp/tools_directives.go:16: directivesCaptureEnabledFromEnv 0.0% +github.com/thebtf/engram/internal/mcp/tools_directives.go:20: rememberDirectiveTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_directives.go:38: currentDirectiveCaptureService 0.0% +github.com/thebtf/engram/internal/mcp/tools_directives.go:48: handleRememberDirective 0.0% +github.com/thebtf/engram/internal/mcp/tools_directives.go:72: parseRememberDirectiveArgs 0.0% +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:10: handleDocsConsolidated 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents.go:15: handleListCollections 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents.go:61: handleListDocuments 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents.go:121: handleGetDocument 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents.go:165: handleRemoveDocument 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents.go:197: handleIngestDocument 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents.go:235: handleSearchCollection 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:15: handleDocCreate 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:61: handleDocRead 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:117: handleDocUpdate 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:122: handleDocList 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:175: handleDocHistory 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:232: handleDocComment 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:19: SetExperienceProvider 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:23: experienceHistoryTools 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:40: experienceHistoryReadSchema 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:65: experienceHistoryDetailSchema 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:82: experienceHistoryTriggerEnum 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:91: handleExperienceHistoryRead 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:103: handleExperienceHistoryDetail 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:115: parseExperienceHistoryReadArgs 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:142: parseExperienceHistoryDetailArgs 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:157: experienceHistoryTriggersFromArgs 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:180: marshalExperienceHistory 0.0% +github.com/thebtf/engram/internal/mcp/tools_feedback.go:12: handleFeedbackConsolidated 0.0% +github.com/thebtf/engram/internal/mcp/tools_feedback.go:36: handleSetSessionOutcome 0.0% +github.com/thebtf/engram/internal/mcp/tools_governance.go:27: governanceTools 0.0% +github.com/thebtf/engram/internal/mcp/tools_governance.go:98: handleListSnapshots 0.0% +github.com/thebtf/engram/internal/mcp/tools_governance.go:167: handleRollbackSnapshot 0.0% +github.com/thebtf/engram/internal/mcp/tools_governance.go:215: handlePinSnapshot 0.0% +github.com/thebtf/engram/internal/mcp/tools_governance.go:258: handleRedactionRulesStatus 0.0% +github.com/thebtf/engram/internal/mcp/tools_governance.go:284: resolveGovernanceActor 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:64: handleGraph 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:100: graphAddEdge 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:216: mcpGraphEndpointExists 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:243: mcpGraphEdgeAlreadyExists 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:276: graphAddNode 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:317: graphRemoveEdge 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:332: graphGetEdges 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:397: filterEdgesByNodeType 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:457: graphTraverse 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:480: graphFindPath 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:502: graphSynonyms 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:23: graphCreateEdgeWithGuards 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:80: graphEndpointExistsWithGuards 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:114: graphDuplicateEdgeExists 0.0% +github.com/thebtf/engram/internal/mcp/tools_ingest.go:25: handleIngest 0.0% +github.com/thebtf/engram/internal/mcp/tools_ingest.go:43: ingestDocument 0.0% +github.com/thebtf/engram/internal/mcp/tools_instincts.go:20: handleImportInstincts 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:19: issuesToolSchema 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:109: validateIssueActionParams 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:143: handleIssues 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:189: resolveSourceProject 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:205: handleIssueCreate 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:250: handleIssueList 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:311: handleIssueGet 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:344: handleIssueUpdate 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:382: handleIssueComment 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:408: handleIssueReopen 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:425: handleIssueClose 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:22: handleLifecycle 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:48: lifecycleInfo 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:87: lifecyclePromote 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:118: lifecycleDemote 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:149: lifecycleSetConfidence 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:172: lifecycleSetDefeasibility 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:191: lifecycleSleepStatus 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:197: lifecycleDecayPreview 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:233: marshalJSON 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:35: vnextFEnabled 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:42: isValidPrivacyScope 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:54: derivePrivacyScopeFromLegacy 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:82: deriveLegacyScopeFromPrivacy 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:93: applyPrincipalMemoryMetadata 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:135: addPrincipalMemoryFields 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:161: newScopedWriteLintMemoryStore 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:172: writeLintVisibilityCaller 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:186: writeLintVisibilityOptions 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:192: scopedWriteLintMemoryStore 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:202: filterVisibleWriteGateCandidates 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:214: domainManageAllowed 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:218: List 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:272: writeLintVisibilityFetchLimit 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:286: Get 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:297: Create 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:301: Update 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:305: MarkSuperseded 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:319: effectiveMemoryEditor 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:329: isValidStoreObservationType 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:354: handleStoreMemory 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1111: handleEditMemory 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1218: computeTTLDays 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1258: truncateTitle 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1270: keepRecallMemory 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1280: keepRecallMemoryFilters 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1342: handleRecallMemory 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1690: staleAdvisory 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1700: marshalWithStaleAdvisory 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1727: Rank 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1751: handleRecallMemoryHybrid 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:2252: handleRateMemory 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:2281: handleSuppressMemory 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:17: SetDomainRegistryService 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:21: checkDomainWriteMCP 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:43: addDomainWriteDecisionFields 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:51: marshalStoreMemoryAugmented 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:26: newMemoryStoreSignificanceUpdater 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:33: s6OutcomeEnabledFromEnv 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:37: effectiveMemorySignificanceUpdater 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:47: currentMemorySignificanceUpdater 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:58: rateMemorySignificanceTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:74: handleRateMemorySignificance 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:109: RateMemorySignificance 0.0% +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:18: s2MetaMemoryEnabled 0.0% +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:22: knowAboutTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:39: handleKnowAbout 0.0% +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:104: parseKnowAboutLimit 0.0% +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:118: summarizeMetaIndexTags 0.0% +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:153: summarizeMetaIndexDateRange 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:23: SetPrincipalMemoryQueryService 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:27: principalMemoryQueryTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:52: handleQueryPrincipalMemory 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:134: principalMemoryQueryCaller 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:149: parsePrincipalMemoryQueryLimit 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:160: principalMemoryQueryText 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:167: parsePrincipalMemoryQueryVisibility 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:179: parsePrincipalMemoryQueryOffset 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:190: parsePrincipalMemoryQueryInt 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:215: parsePrincipalMemoryQueryBool 0.0% +github.com/thebtf/engram/internal/mcp/tools_recall.go:28: handleRecall 0.0% +github.com/thebtf/engram/internal/mcp/tools_recall.go:125: parseRecallIncludedPrincipals 0.0% +github.com/thebtf/engram/internal/mcp/tools_recall.go:165: appendRecallIncludedPrincipalMemories 0.0% +github.com/thebtf/engram/internal/mcp/tools_recall.go:223: recallIncludeTargetMatchesCaller 0.0% +github.com/thebtf/engram/internal/mcp/tools_recall.go:231: recallPrincipalQueryItemToMemory 0.0% +github.com/thebtf/engram/internal/mcp/tools_recall.go:247: handleRecallSearch 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:20: currentReviewLoopCandidateLister 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:30: reviewLoopCandidateTools 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:65: reviewLoopReadSchema 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:78: reviewPacketIDSchema 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:91: handleReviewMetricsRead 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:110: handleReviewQueueRead 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:140: handleReviewPacketDetail 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:151: handleReviewPacketPreviewAction 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:167: handleReviewPacketApplyAction 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:189: parseReviewLoopReadArgs 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:212: reviewLoopMCPPacketTypeSupported 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:217: reviewLoopActionFromArgs 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:225: reviewLoopReasonFromArgs 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:233: loadReviewPacketCandidate 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:256: applyReviewPacketPreserve 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:278: applyReviewPacketSuppress 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:296: reviewLoopMemoryFromCandidate 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:320: filterRiskyMCPReviewCandidates 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:330: marshalReviewLoop 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:17: ruleGovernanceReadTools 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:126: handleRuleGovernanceHealth 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:176: handleRuleGovernanceQueue 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:233: handleRuleGovernanceSnapshots 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:278: handleRuleGovernanceUsefulness 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:338: handleRuleGovernanceTransition 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:373: handleRuleGovernancePinSnapshot 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:406: handleRuleGovernanceRollback 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:483: requireRuleGovernanceReadAccess 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:495: requireRuleGovernanceProjectOrAdmin 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:505: ruleGovernanceCallerIsAdmin 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:510: requireRuleGovernanceAdminAccess 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:518: redactRuleGovernanceEvidenceHandles 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:535: redactRuleGovernanceEvidenceHandle 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:553: ruleGovernanceEvidenceHandleHasSensitiveText 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:559: isCanonicalRuleGovernanceEvidenceHandle 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:580: isSafeRuleGovernanceEvidenceID 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:594: parseRuleGovernanceTransitionRequest 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:604: parseRuleGovernanceSince 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:623: boundedRuleGovernanceLimit 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:634: formatRuleGovernanceTime 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:641: formatRuleGovernanceTimePtr 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:649: stringRuleCandidateStatusCounts 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:657: stringRuleVersionStateCounts 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:665: stringRuleArbiterRunStatusCounts 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:673: stringRuleInjectionEventTypeCounts 0.0% +github.com/thebtf/engram/internal/mcp/tools_rules.go:17: handleStoreRule 0.0% +github.com/thebtf/engram/internal/mcp/tools_rules.go:133: handleListRules 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:22: handleSettingsConsolidated 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:51: SetSettingsStore 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:57: settingsStore 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:67: isSecretSettingKey 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:74: requireAdmin 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:85: handleSetSetting 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:145: handleGetSetting 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:181: handleListSettings 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:216: handleDeleteSetting 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:35: resumeScopesFromFields 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:52: stateTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:82: setStateTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:142: handleGetState 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:219: handleSetState 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:274: decodeSessionStateForWrite 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:292: validateSessionStateBudget 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:303: validateNativeResumePacket 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:349: decodeProjectStateForWrite 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:364: requireStateObject 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:383: requireNestedObject 0.0% +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:10: handleStoreConsolidated 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:21: SetTemporalTruthProvider 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:25: temporalTruthEnabledFromEnv 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:30: temporalTruthTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:39: temporalTruthRefreshTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:48: temporalTruthRefreshSchema 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:58: temporalTruthSchema 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:72: currentTemporalTruthProvider 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:82: handleTemporalTruth 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:102: handleTemporalTruthRefresh 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:122: parseTemporalTruthArgs 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:151: parseTemporalTruthRefreshProject 0.0% +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:10: handleVaultConsolidated 0.0% +total: (statements) 0.1% diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/summary.json b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/summary.json new file mode 100644 index 00000000..c29ff0e9 --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/challenge-wrong-fixture/summary.json @@ -0,0 +1,67 @@ +{ + "schema_version": 1, + "gate": "release-gates-foundation", + "run_id": "challenge-wrong-fixture", + "started_at": "2026-07-11T00:58:27.9736535+00:00", + "finished_at": "2026-07-11T00:58:44.7888279+00:00", + "duration_seconds": 16.815, + "verdict": "FAIL", + "counts": { + "requested_repeats": 1, + "completed_repeats": 1, + "passed_repeats": 0, + "failed_repeats": 1, + "child_commands": 16, + "nonzero_child_commands": 2 + }, + "packages": [ + "./internal/mcp" + ], + "run_pattern": "^TestEC_F1_TagDerivedBackfill_T007$", + "coverage_policy": "Targeted", + "connection_budget": 20, + "race": false, + "database_dsn": "REDACTED_DATABASE_DSN", + "environment": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-wrong-fixture\\environment.json", + "commands": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-wrong-fixture\\commands.json", + "repeats": [ + { + "repeat": 1, + "verdict": "FAIL", + "database": "engram_prc_rg_test_c1bf516c578dac52_r1", + "schema": "public", + "database_schema_identity": "engram_prc_rg_test_c1bf516c578dac52_r1.public", + "database_dsn": "REDACTED_DATABASE_DSN", + "database_create_confirmed": true, + "sequential_execution": { + "package_parallelism": 1, + "test_parallelism": 1 + }, + "race": false, + "connection_budget": 20, + "server_sessions_before": 6, + "server_sessions_after": 6, + "sessions_before": 0, + "sessions_after": 0, + "go_test_exit": 1, + "json_parser_exit": 1, + "coverage_policy": "Targeted", + "coverage_exit": 0, + "cleanup_exit": 0, + "cleanup_status": "PASS", + "required_session_start_execution": { + "schema_version": 1, + "verdict": "NOT_APPLICABLE", + "reason": "only an unfiltered canonical ./... run requires the 12-test session-start execution proof" + }, + "cleanup_summary": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-wrong-fixture\\repeat-01\\cleanup\\cleanup.json", + "errors": [ + "go test failed with exit 1", + "go test JSON assertion failed with exit 1" + ], + "artifact_directory": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-wrong-fixture\\repeat-01" + } + ], + "errors": [], + "artifact_directory": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\challenge-wrong-fixture" +} diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-race/commands.json b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-race/commands.json new file mode 100644 index 00000000..10d6d6c2 --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-race/commands.json @@ -0,0 +1,445 @@ +[ + { + "name": "go-version", + "executable": "C:\\Program Files\\Go\\bin\\go.exe", + "arguments": [ + "version" + ], + "environment_keys": [], + "command": "C:\\Program Files\\Go\\bin\\go.exe version", + "started_at": "2026-07-11T00:54:31.4286481+00:00", + "finished_at": "2026-07-11T00:54:31.8226731+00:00", + "duration_seconds": 0.394, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-race\\go-version.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-race\\go-version.stderr.log" + }, + { + "name": "postgres-container-identity", + "executable": "docker", + "arguments": [ + "inspect", + "--format", + "{{.Name}}|{{.Config.Image}}|{{.Image}}|{{.State.Running}}", + "engram-prc-postgres" + ], + "environment_keys": [], + "command": "docker inspect --format {{.Name}}|{{.Config.Image}}|{{.Image}}|{{.State.Running}} engram-prc-postgres", + "started_at": "2026-07-11T00:54:31.8815750+00:00", + "finished_at": "2026-07-11T00:54:32.2524383+00:00", + "duration_seconds": 0.371, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-race\\postgres-container-identity.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-race\\postgres-container-identity.stderr.log" + }, + { + "name": "postgres-server-identity", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT json_build_object('server_version', current_setting('server_version'), 'server_version_num', current_setting('server_version_num'), 'version', version(), 'max_connections', current_setting('max_connections'), 'superuser_reserved_connections', current_setting('superuser_reserved_connections'), 'reserved_connections', COALESCE(NULLIF(current_setting('reserved_connections', true), ''), '0'), 'current_connections', (SELECT count(*)::text FROM pg_stat_activity), 'database', current_database(), 'schema', current_schema(), 'user', current_user)::text;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT json_build_object('server_version', current_setting('server_version'), 'server_version_num', current_setting('server_version_num'), 'version', version(), 'max_connections', current_setting('max_connections'), 'superuser_reserved_connections', current_setting('superuser_reserved_connections'), 'reserved_connections', COALESCE(NULLIF(current_setting('reserved_connections', true), ''), '0'), 'current_connections', (SELECT count(*)::text FROM pg_stat_activity), 'database', current_database(), 'schema', current_schema(), 'user', current_user)::text;", + "started_at": "2026-07-11T00:54:32.2647322+00:00", + "finished_at": "2026-07-11T00:54:32.6761241+00:00", + "duration_seconds": 0.411, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-race\\postgres-server-identity.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-race\\postgres-server-identity.stderr.log" + }, + { + "name": "repeat-1-create-database", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "CREATE DATABASE \"engram_prc_rg_test_72927a85c2e0d9a3_r1\" OWNER \"engram\";" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c CREATE DATABASE \"engram_prc_rg_test_72927a85c2e0d9a3_r1\" OWNER \"engram\";", + "started_at": "2026-07-11T00:54:32.7096191+00:00", + "finished_at": "2026-07-11T00:54:33.1909595+00:00", + "duration_seconds": 0.481, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-race\\repeat-01\\create-database.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-race\\repeat-01\\create-database.stderr.log" + }, + { + "name": "repeat-1-create-pgvector", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "engram_prc_rg_test_72927a85c2e0d9a3_r1", + "-At", + "-F", + "|", + "-c", + "CREATE EXTENSION IF NOT EXISTS vector WITH SCHEMA public;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d engram_prc_rg_test_72927a85c2e0d9a3_r1 -At -F | -c CREATE EXTENSION IF NOT EXISTS vector WITH SCHEMA public;", + "started_at": "2026-07-11T00:54:33.1976041+00:00", + "finished_at": "2026-07-11T00:54:33.6239981+00:00", + "duration_seconds": 0.426, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-race\\repeat-01\\create-pgvector.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-race\\repeat-01\\create-pgvector.stderr.log" + }, + { + "name": "repeat-1-database-identity", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "engram_prc_rg_test_72927a85c2e0d9a3_r1", + "-At", + "-F", + "|", + "-c", + "SELECT json_build_object('database', current_database(), 'schema', current_schema(), 'server_version', current_setting('server_version'), 'user', current_user)::text;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d engram_prc_rg_test_72927a85c2e0d9a3_r1 -At -F | -c SELECT json_build_object('database', current_database(), 'schema', current_schema(), 'server_version', current_setting('server_version'), 'user', current_user)::text;", + "started_at": "2026-07-11T00:54:33.6276019+00:00", + "finished_at": "2026-07-11T00:54:34.0330108+00:00", + "duration_seconds": 0.405, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-race\\repeat-01\\database-identity.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-race\\repeat-01\\database-identity.stderr.log" + }, + { + "name": "repeat-1-pg-stat-before", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT COALESCE(json_agg(row_to_json(s)), '[]'::json)::text FROM (SELECT pid, usename, datname, state, backend_type, application_name, client_addr::text AS client_addr, wait_event_type, wait_event, query_start FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_72927a85c2e0d9a3_r1' ORDER BY pid) AS s;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT COALESCE(json_agg(row_to_json(s)), '[]'::json)::text FROM (SELECT pid, usename, datname, state, backend_type, application_name, client_addr::text AS client_addr, wait_event_type, wait_event, query_start FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_72927a85c2e0d9a3_r1' ORDER BY pid) AS s;", + "started_at": "2026-07-11T00:54:34.0385049+00:00", + "finished_at": "2026-07-11T00:54:34.4013388+00:00", + "duration_seconds": 0.363, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-race\\repeat-01\\pg-stat-activity-before.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-race\\repeat-01\\pg-stat-activity-before.stderr.log" + }, + { + "name": "repeat-1-server-connection-count-before", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT count(*) FROM pg_stat_activity;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT count(*) FROM pg_stat_activity;", + "started_at": "2026-07-11T00:54:34.4044881+00:00", + "finished_at": "2026-07-11T00:54:34.7726986+00:00", + "duration_seconds": 0.368, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-race\\repeat-01\\server-connection-count-before.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-race\\repeat-01\\server-connection-count-before.stderr.log" + }, + { + "name": "repeat-1-connection-count-before", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT count(*) FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_72927a85c2e0d9a3_r1';" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT count(*) FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_72927a85c2e0d9a3_r1';", + "started_at": "2026-07-11T00:54:34.7816630+00:00", + "finished_at": "2026-07-11T00:54:35.2752813+00:00", + "duration_seconds": 0.494, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-race\\repeat-01\\connection-count-before.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-race\\repeat-01\\connection-count-before.stderr.log" + }, + { + "name": "repeat-1-go-test", + "executable": "C:\\Program Files\\Go\\bin\\go.exe", + "arguments": [ + "test", + "-json", + "-p", + "1", + "-parallel", + "1", + "-count=1", + "-timeout", + "30m", + "-covermode=atomic", + "-coverprofile=.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-race\\repeat-01\\coverage.out", + "-race", + "-run", + "^TestEC_F1_TagDerivedBackfill_T007$", + "./internal/mcp" + ], + "environment_keys": [ + "DATABASE_DSN", + "DATABASE_MAX_CONNS", + "ENGRAM_RELEASE_GATE_REPEAT", + "ENGRAM_RELEASE_GATE_RUN_ID", + "ENGRAM_TEST_DSN", + "TEST_DATABASE_DSN" + ], + "command": "C:\\Program Files\\Go\\bin\\go.exe test -json -p 1 -parallel 1 -count=1 -timeout 30m -covermode=atomic -coverprofile=.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-race\\repeat-01\\coverage.out -race -run ^TestEC_F1_TagDerivedBackfill_T007$ ./internal/mcp", + "started_at": "2026-07-11T00:54:35.2853017+00:00", + "finished_at": "2026-07-11T00:54:52.2425629+00:00", + "duration_seconds": 16.957, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-race\\repeat-01\\go-test.stdout.jsonl", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-race\\repeat-01\\go-test.stderr.log" + }, + { + "name": "repeat-1-assert-go-test-json", + "executable": "C:\\Program Files\\PowerShell\\7\\pwsh.exe", + "arguments": [ + "-NoProfile", + "-File", + "D:\\Dev\\engram\\.w\\t007-r1-checker\\scripts\\production-gates\\assert-go-test-json.ps1", + "-InputPath", + ".agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-race\\repeat-01\\go-test.stdout.jsonl", + "-SummaryPath", + ".agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-race\\repeat-01\\go-test-summary.json", + "-FailOnUnexpectedSkip" + ], + "environment_keys": [], + "command": "C:\\Program Files\\PowerShell\\7\\pwsh.exe -NoProfile -File D:\\Dev\\engram\\.w\\t007-r1-checker\\scripts\\production-gates\\assert-go-test-json.ps1 -InputPath .agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-race\\repeat-01\\go-test.stdout.jsonl -SummaryPath .agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-race\\repeat-01\\go-test-summary.json -FailOnUnexpectedSkip", + "started_at": "2026-07-11T00:54:52.2472141+00:00", + "finished_at": "2026-07-11T00:54:53.0742138+00:00", + "duration_seconds": 0.827, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-race\\repeat-01\\assert-go-test-json.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-race\\repeat-01\\assert-go-test-json.stderr.log" + }, + { + "name": "repeat-1-targeted-coverage-report", + "executable": "C:\\Program Files\\Go\\bin\\go.exe", + "arguments": [ + "tool", + "cover", + "-func=.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-race\\repeat-01\\coverage.out" + ], + "environment_keys": [], + "command": "C:\\Program Files\\Go\\bin\\go.exe tool cover -func=.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-race\\repeat-01\\coverage.out", + "started_at": "2026-07-11T00:54:53.0791162+00:00", + "finished_at": "2026-07-11T00:54:53.5770730+00:00", + "duration_seconds": 0.498, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-race\\repeat-01\\targeted-coverage.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-race\\repeat-01\\targeted-coverage.stderr.log" + }, + { + "name": "repeat-1-pg-stat-after", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT COALESCE(json_agg(row_to_json(s)), '[]'::json)::text FROM (SELECT pid, usename, datname, state, backend_type, application_name, client_addr::text AS client_addr, wait_event_type, wait_event, query_start FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_72927a85c2e0d9a3_r1' ORDER BY pid) AS s;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT COALESCE(json_agg(row_to_json(s)), '[]'::json)::text FROM (SELECT pid, usename, datname, state, backend_type, application_name, client_addr::text AS client_addr, wait_event_type, wait_event, query_start FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_72927a85c2e0d9a3_r1' ORDER BY pid) AS s;", + "started_at": "2026-07-11T00:54:53.5779824+00:00", + "finished_at": "2026-07-11T00:54:53.9353404+00:00", + "duration_seconds": 0.357, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-race\\repeat-01\\pg-stat-activity-after.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-race\\repeat-01\\pg-stat-activity-after.stderr.log" + }, + { + "name": "repeat-1-server-connection-count-after", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT count(*) FROM pg_stat_activity;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT count(*) FROM pg_stat_activity;", + "started_at": "2026-07-11T00:54:53.9372752+00:00", + "finished_at": "2026-07-11T00:54:54.3333009+00:00", + "duration_seconds": 0.396, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-race\\repeat-01\\server-connection-count-after.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-race\\repeat-01\\server-connection-count-after.stderr.log" + }, + { + "name": "repeat-1-connection-count-after", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT count(*) FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_72927a85c2e0d9a3_r1';" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT count(*) FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_72927a85c2e0d9a3_r1';", + "started_at": "2026-07-11T00:54:54.3356973+00:00", + "finished_at": "2026-07-11T00:54:54.7186366+00:00", + "duration_seconds": 0.383, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-race\\repeat-01\\connection-count-after.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-race\\repeat-01\\connection-count-after.stderr.log" + }, + { + "name": "repeat-1-cleanup", + "executable": "C:\\Program Files\\PowerShell\\7\\pwsh.exe", + "arguments": [ + "-NoProfile", + "-File", + "D:\\Dev\\engram\\.w\\t007-r1-checker\\scripts\\production-gates\\cleanup-db-sessions.ps1", + "-DatabaseName", + "engram_prc_rg_test_72927a85c2e0d9a3_r1", + "-SchemaName", + "public", + "-ArtifactRoot", + ".agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-race\\repeat-01", + "-RunId", + "focused-race-repeat-1", + "-PostgresContainer", + "engram-prc-postgres" + ], + "environment_keys": [ + "ENGRAM_TEST_ADMIN_DSN" + ], + "command": "C:\\Program Files\\PowerShell\\7\\pwsh.exe -NoProfile -File D:\\Dev\\engram\\.w\\t007-r1-checker\\scripts\\production-gates\\cleanup-db-sessions.ps1 -DatabaseName engram_prc_rg_test_72927a85c2e0d9a3_r1 -SchemaName public -ArtifactRoot .agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-race\\repeat-01 -RunId focused-race-repeat-1 -PostgresContainer engram-prc-postgres", + "started_at": "2026-07-11T00:54:54.7223563+00:00", + "finished_at": "2026-07-11T00:54:57.5246637+00:00", + "duration_seconds": 2.802, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-race\\repeat-01\\cleanup-process.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-race\\repeat-01\\cleanup-process.stderr.log" + } +] diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-race/environment.json b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-race/environment.json new file mode 100644 index 00000000..2a29a8ce --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-race/environment.json @@ -0,0 +1,52 @@ +{ + "schema_version": 1, + "run_id": "focused-race", + "timestamp": "2026-07-11T00:54:31.4101236+00:00", + "go_version": "go version go1.25.11 windows/amd64", + "postgres": { + "declared_image": "pgvector/pgvector:pg17", + "container": { + "name": "/engram-prc-postgres", + "configured_image": "pgvector/pgvector:pg17", + "image_id": "sha256:feb68f4f15446397d8cac7f4fe48fe4586de83160d1fc48b46283312d1a33966", + "running": true + }, + "server": { + "server_version": "17.10 (Debian 17.10-1.pgdg12+1)", + "server_version_num": "170010", + "version": "PostgreSQL 17.10 (Debian 17.10-1.pgdg12+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 12.2.0-14+deb12u1) 12.2.0, 64-bit", + "max_connections": "100", + "superuser_reserved_connections": "3", + "reserved_connections": "0", + "current_connections": "6", + "database": "postgres", + "schema": "public", + "user": "engram" + }, + "admin_dsn": "postgresql://engram:REDACTED@127.0.0.1:55432/postgres?sslmode=disable" + }, + "packages": [ + "./internal/mcp" + ], + "run_pattern": "^TestEC_F1_TagDerivedBackfill_T007$", + "repeat": 1, + "fail_on_unexpected_skip": true, + "allowed_skip_identities": [], + "coverage_policy": "Targeted", + "connection_budget": 20, + "race": true, + "require_session_start_execution": false, + "required_session_start_test_count": 12, + "sequential_execution": { + "go_package_parallelism": 1, + "go_test_parallelism": 1, + "database_max_connections": 20 + }, + "govulncheck_policy": { + "authoritative": [ + "source scan with tests", + "unstripped binary scan" + ], + "non_authoritative": "stripped binary scan (module-level fallback when symbols are absent)" + } +} diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-race/go-version.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-race/go-version.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-race/go-version.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-race/go-version.stdout.log new file mode 100644 index 00000000..a857be3f --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-race/go-version.stdout.log @@ -0,0 +1 @@ +go version go1.25.11 windows/amd64 diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-race/postgres-container-identity.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-race/postgres-container-identity.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-race/postgres-container-identity.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-race/postgres-container-identity.stdout.log new file mode 100644 index 00000000..c110d492 --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-race/postgres-container-identity.stdout.log @@ -0,0 +1 @@ +/engram-prc-postgres|pgvector/pgvector:pg17|sha256:feb68f4f15446397d8cac7f4fe48fe4586de83160d1fc48b46283312d1a33966|true diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-race/postgres-server-identity.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-race/postgres-server-identity.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-race/postgres-server-identity.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-race/postgres-server-identity.stdout.log new file mode 100644 index 00000000..2e33d56e --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-race/postgres-server-identity.stdout.log @@ -0,0 +1 @@ +{"server_version" : "17.10 (Debian 17.10-1.pgdg12+1)", "server_version_num" : "170010", "version" : "PostgreSQL 17.10 (Debian 17.10-1.pgdg12+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 12.2.0-14+deb12u1) 12.2.0, 64-bit", "max_connections" : "100", "superuser_reserved_connections" : "3", "reserved_connections" : "0", "current_connections" : "6", "database" : "postgres", "schema" : "public", "user" : "engram"} diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-race/repeat-01/assert-go-test-json.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-race/repeat-01/assert-go-test-json.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-race/repeat-01/assert-go-test-json.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-race/repeat-01/assert-go-test-json.stdout.log new file mode 100644 index 00000000..35856c35 --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-race/repeat-01/assert-go-test-json.stdout.log @@ -0,0 +1,2 @@ +go test JSON verdict=PASS packages=1 tests=1 passed=1 failed=0 skipped=0 unexpected_skips=0 malformed=0 +summary=D:\Dev\engram\.w\t007-r1-checker\.agent\reviews\t007-r1-fresh-checker\evidence\focused-race\repeat-01\go-test-summary.json diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-race/repeat-01/cleanup-process.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-race/repeat-01/cleanup-process.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-race/repeat-01/cleanup-process.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-race/repeat-01/cleanup-process.stdout.log new file mode 100644 index 00000000..f1841ef6 --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-race/repeat-01/cleanup-process.stdout.log @@ -0,0 +1,2 @@ +cleanup verdict=PASS database=engram_prc_rg_test_72927a85c2e0d9a3_r1 schema=public terminated_sessions=0 remaining_database_count=0 +summary=D:\Dev\engram\.w\t007-r1-checker\.agent\reviews\t007-r1-fresh-checker\evidence\focused-race\repeat-01\cleanup\cleanup.json diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-race/repeat-01/cleanup/cleanup.json b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-race/repeat-01/cleanup/cleanup.json new file mode 100644 index 00000000..a83290dd --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-race/repeat-01/cleanup/cleanup.json @@ -0,0 +1,170 @@ +{ + "schema_version": 1, + "run_id": "focused-race-repeat-1", + "timestamp": "2026-07-11T00:54:57.4408899+00:00", + "verdict": "PASS", + "database": "engram_prc_rg_test_72927a85c2e0d9a3_r1", + "schema": "public", + "database_schema_identity": "engram_prc_rg_test_72927a85c2e0d9a3_r1.public", + "admin_dsn": "postgresql://engram:REDACTED@127.0.0.1:55432/postgres?sslmode=disable", + "postgres_container": "engram-prc-postgres", + "cleanup_status": "PASS", + "cleanup_attempted": true, + "database_existed_before": true, + "absence_verified": true, + "terminated_sessions": 0, + "remaining_database_count": 0, + "commands": [ + { + "name": "database-exists-before-cleanup", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT count(*) FROM pg_database WHERE datname = 'engram_prc_rg_test_72927a85c2e0d9a3_r1';" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT count(*) FROM pg_database WHERE datname = 'engram_prc_rg_test_72927a85c2e0d9a3_r1';", + "started_at": "2026-07-11T00:54:55.3772919+00:00", + "finished_at": "2026-07-11T00:54:55.7960833+00:00", + "duration_seconds": 0.419, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-race\\repeat-01\\cleanup\\database-exists-before.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-race\\repeat-01\\cleanup\\database-exists-before.stderr.log" + }, + { + "name": "pg-stat-activity-before-cleanup", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT COALESCE(json_agg(row_to_json(s)), '[]'::json)::text FROM (SELECT pid, usename, datname, state, backend_type, application_name, client_addr::text AS client_addr, wait_event_type, wait_event, query_start FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_72927a85c2e0d9a3_r1' ORDER BY pid) AS s;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT COALESCE(json_agg(row_to_json(s)), '[]'::json)::text FROM (SELECT pid, usename, datname, state, backend_type, application_name, client_addr::text AS client_addr, wait_event_type, wait_event, query_start FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_72927a85c2e0d9a3_r1' ORDER BY pid) AS s;", + "started_at": "2026-07-11T00:54:55.8611113+00:00", + "finished_at": "2026-07-11T00:54:56.2336412+00:00", + "duration_seconds": 0.373, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-race\\repeat-01\\cleanup\\pg-stat-activity-before.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-race\\repeat-01\\cleanup\\pg-stat-activity-before.stderr.log" + }, + { + "name": "terminate-database-sessions", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT COALESCE(json_agg(row_to_json(s)), '[]'::json)::text FROM (SELECT pid, pg_terminate_backend(pid) AS terminated FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_72927a85c2e0d9a3_r1' AND pid <> pg_backend_pid() ORDER BY pid) AS s;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT COALESCE(json_agg(row_to_json(s)), '[]'::json)::text FROM (SELECT pid, pg_terminate_backend(pid) AS terminated FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_72927a85c2e0d9a3_r1' AND pid <> pg_backend_pid() ORDER BY pid) AS s;", + "started_at": "2026-07-11T00:54:56.2377024+00:00", + "finished_at": "2026-07-11T00:54:56.6132619+00:00", + "duration_seconds": 0.376, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-race\\repeat-01\\cleanup\\terminate-sessions.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-race\\repeat-01\\cleanup\\terminate-sessions.stderr.log" + }, + { + "name": "drop-fresh-database", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "DROP DATABASE IF EXISTS \"engram_prc_rg_test_72927a85c2e0d9a3_r1\" WITH (FORCE);" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c DROP DATABASE IF EXISTS \"engram_prc_rg_test_72927a85c2e0d9a3_r1\" WITH (FORCE);", + "started_at": "2026-07-11T00:54:56.6223881+00:00", + "finished_at": "2026-07-11T00:54:57.0872992+00:00", + "duration_seconds": 0.465, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-race\\repeat-01\\cleanup\\drop-database.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-race\\repeat-01\\cleanup\\drop-database.stderr.log" + }, + { + "name": "verify-database-absent", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT count(*) FROM pg_database WHERE datname = 'engram_prc_rg_test_72927a85c2e0d9a3_r1';" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT count(*) FROM pg_database WHERE datname = 'engram_prc_rg_test_72927a85c2e0d9a3_r1';", + "started_at": "2026-07-11T00:54:57.0914691+00:00", + "finished_at": "2026-07-11T00:54:57.4330926+00:00", + "duration_seconds": 0.342, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-race\\repeat-01\\cleanup\\verify-database-absent.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-race\\repeat-01\\cleanup\\verify-database-absent.stderr.log" + } + ], + "errors": [] +} diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-race/repeat-01/cleanup/database-exists-before.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-race/repeat-01/cleanup/database-exists-before.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-race/repeat-01/cleanup/database-exists-before.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-race/repeat-01/cleanup/database-exists-before.stdout.log new file mode 100644 index 00000000..d00491fd --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-race/repeat-01/cleanup/database-exists-before.stdout.log @@ -0,0 +1 @@ +1 diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-race/repeat-01/cleanup/drop-database.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-race/repeat-01/cleanup/drop-database.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-race/repeat-01/cleanup/drop-database.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-race/repeat-01/cleanup/drop-database.stdout.log new file mode 100644 index 00000000..ca12dce0 --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-race/repeat-01/cleanup/drop-database.stdout.log @@ -0,0 +1 @@ +DROP DATABASE diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-race/repeat-01/cleanup/pg-stat-activity-before.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-race/repeat-01/cleanup/pg-stat-activity-before.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-race/repeat-01/cleanup/pg-stat-activity-before.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-race/repeat-01/cleanup/pg-stat-activity-before.stdout.log new file mode 100644 index 00000000..fe51488c --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-race/repeat-01/cleanup/pg-stat-activity-before.stdout.log @@ -0,0 +1 @@ +[] diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-race/repeat-01/cleanup/terminate-sessions.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-race/repeat-01/cleanup/terminate-sessions.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-race/repeat-01/cleanup/terminate-sessions.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-race/repeat-01/cleanup/terminate-sessions.stdout.log new file mode 100644 index 00000000..fe51488c --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-race/repeat-01/cleanup/terminate-sessions.stdout.log @@ -0,0 +1 @@ +[] diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-race/repeat-01/cleanup/verify-database-absent.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-race/repeat-01/cleanup/verify-database-absent.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-race/repeat-01/cleanup/verify-database-absent.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-race/repeat-01/cleanup/verify-database-absent.stdout.log new file mode 100644 index 00000000..573541ac --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-race/repeat-01/cleanup/verify-database-absent.stdout.log @@ -0,0 +1 @@ +0 diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-race/repeat-01/connection-count-after.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-race/repeat-01/connection-count-after.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-race/repeat-01/connection-count-after.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-race/repeat-01/connection-count-after.stdout.log new file mode 100644 index 00000000..573541ac --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-race/repeat-01/connection-count-after.stdout.log @@ -0,0 +1 @@ +0 diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-race/repeat-01/connection-count-before.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-race/repeat-01/connection-count-before.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-race/repeat-01/connection-count-before.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-race/repeat-01/connection-count-before.stdout.log new file mode 100644 index 00000000..573541ac --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-race/repeat-01/connection-count-before.stdout.log @@ -0,0 +1 @@ +0 diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-race/repeat-01/coverage.out b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-race/repeat-01/coverage.out new file mode 100644 index 00000000..52335d8a --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-race/repeat-01/coverage.out @@ -0,0 +1,3472 @@ +mode: atomic +github.com/thebtf/engram/internal/mcp/audit_helpers.go:33.53,34.30 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:34.30,36.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:37.2,37.25 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:37.25,39.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:40.2,40.12 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:44.28,46.2 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:52.83,53.12 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:53.12,54.16 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:54.16,55.32 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:55.32,61.5 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:63.3,65.33 3 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:65.33,71.4 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:77.54,78.14 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:78.14,80.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:81.2,82.16 2 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:82.16,85.3 2 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:86.2,87.13 2 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:92.91,93.23 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:93.23,95.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:96.2,97.15 2 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:97.15,99.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:100.2,105.65 4 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:105.65,113.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:117.95,118.23 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:118.23,120.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:121.2,122.15 2 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:122.15,124.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:125.2,129.65 5 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:129.65,138.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:142.87,143.23 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:143.23,145.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:146.2,147.15 2 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:147.15,149.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:150.2,153.65 4 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:153.65,161.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:166.96,167.23 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:167.23,169.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:170.2,171.15 2 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:171.15,173.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:174.2,177.63 4 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:177.63,185.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:189.97,190.23 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:190.23,192.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:193.2,194.15 2 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:194.15,196.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:197.2,200.68 4 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:200.68,208.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:30.62,31.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:31.20,33.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:34.2,35.49 2 0 +github.com/thebtf/engram/internal/mcp/coerce.go:35.49,37.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:38.2,38.14 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:38.14,40.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:41.2,41.15 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:46.52,47.14 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:47.14,49.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:50.2,50.23 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:51.14,52.11 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:53.19,54.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:55.15,56.45 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:57.12,58.31 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:59.10,60.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:67.43,68.14 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:68.14,70.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:71.2,71.23 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:72.15,73.23 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:74.19,75.38 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:75.38,77.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:78.3,78.40 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:78.40,80.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:81.3,81.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:82.14,83.56 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:83.56,85.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:86.3,86.54 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:86.54,88.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:89.3,89.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:90.10,91.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:97.49,98.14 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:98.14,100.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:101.2,101.23 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:102.15,103.18 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:104.19,105.38 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:105.38,107.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:108.3,108.40 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:108.40,110.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:111.3,111.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:112.14,113.56 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:113.56,115.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:116.3,116.54 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:116.54,118.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:119.3,119.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:120.10,121.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:127.55,128.14 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:128.14,130.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:131.2,131.23 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:132.15,133.11 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:134.19,135.40 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:135.40,137.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:138.3,138.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:139.14,140.54 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:140.54,142.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:143.3,143.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:144.10,145.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:151.46,152.14 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:152.14,154.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:155.2,155.23 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:156.12,157.11 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:158.14,159.54 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:159.54,161.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:162.3,162.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:163.15,164.16 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:165.19,166.40 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:166.40,168.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:169.3,169.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:170.10,171.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:177.40,178.14 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:178.14,180.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:181.2,181.23 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:182.13,184.26 2 0 +github.com/thebtf/engram/internal/mcp/coerce.go:184.26,185.36 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:185.36,187.5 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:189.3,189.16 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:190.16,191.11 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:192.14,193.14 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:193.14,195.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:196.3,196.13 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:197.10,198.13 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:204.38,205.14 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:205.14,207.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:208.2,209.9 2 0 +github.com/thebtf/engram/internal/mcp/coerce.go:209.9,211.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:212.2,213.27 2 0 +github.com/thebtf/engram/internal/mcp/coerce.go:213.27,214.42 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:214.42,216.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:218.2,218.15 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:222.32,223.39 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:223.39,225.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:226.2,226.30 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:226.30,228.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:229.2,229.30 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:229.30,231.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:232.2,232.15 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:236.35,237.28 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:237.28,239.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:240.2,240.28 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:240.28,242.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:243.2,243.15 1 0 +github.com/thebtf/engram/internal/mcp/context.go:17.55,19.2 1 0 +github.com/thebtf/engram/internal/mcp/context.go:22.78,24.2 1 0 +github.com/thebtf/engram/internal/mcp/context.go:29.78,31.2 1 0 +github.com/thebtf/engram/internal/mcp/context.go:35.53,38.2 2 0 +github.com/thebtf/engram/internal/mcp/context.go:41.80,43.2 1 0 +github.com/thebtf/engram/internal/mcp/context.go:48.80,50.2 1 0 +github.com/thebtf/engram/internal/mcp/context.go:54.53,57.2 2 0 +github.com/thebtf/engram/internal/mcp/context.go:61.51,62.43 1 0 +github.com/thebtf/engram/internal/mcp/context.go:62.43,64.3 1 0 +github.com/thebtf/engram/internal/mcp/context.go:65.2,65.16 1 0 +github.com/thebtf/engram/internal/mcp/health.go:22.32,26.2 3 0 +github.com/thebtf/engram/internal/mcp/health.go:29.37,33.2 3 0 +github.com/thebtf/engram/internal/mcp/health.go:36.35,40.2 3 0 +github.com/thebtf/engram/internal/mcp/health.go:42.44,45.25 3 0 +github.com/thebtf/engram/internal/mcp/health.go:45.25,47.50 1 0 +github.com/thebtf/engram/internal/mcp/health.go:47.50,50.4 2 0 +github.com/thebtf/engram/internal/mcp/health.go:55.74,60.16 5 0 +github.com/thebtf/engram/internal/mcp/health.go:60.16,62.3 1 0 +github.com/thebtf/engram/internal/mcp/health.go:63.2,71.4 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:28.42,29.65 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:29.65,32.3 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:33.2,33.40 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:33.40,35.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:36.2,36.14 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:39.120,40.69 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:40.69,42.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:43.2,44.19 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:44.19,46.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:47.2,48.17 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:48.17,50.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:51.2,52.59 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:52.59,54.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:55.2,56.20 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:56.20,58.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:59.2,60.17 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:60.17,62.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:63.2,64.21 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:64.21,66.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:67.2,68.22 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:68.22,70.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:71.2,72.23 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:72.23,74.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:76.2,98.19 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:98.19,100.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:101.2,101.66 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:104.52,106.29 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:106.29,108.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:109.2,110.46 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:113.113,123.27 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:123.27,125.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:126.2,127.16 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:127.16,129.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:130.2,130.25 1 0 +github.com/thebtf/engram/internal/mcp/server.go:127.44,138.2 1 1 +github.com/thebtf/engram/internal/mcp/server.go:141.64,143.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:146.78,148.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:151.53,153.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:156.55,158.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:161.58,163.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:166.62,168.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:171.50,173.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:176.78,178.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:181.74,183.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:186.71,189.2 2 0 +github.com/thebtf/engram/internal/mcp/server.go:191.85,193.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:195.61,197.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:199.49,201.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:204.54,206.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:211.53,213.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:216.53,218.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:222.61,224.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:228.59,230.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:234.51,236.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:240.52,242.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:246.55,248.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:252.82,254.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:260.70,262.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:269.68,271.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:274.87,277.2 2 0 +github.com/thebtf/engram/internal/mcp/server.go:282.60,284.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:290.45,292.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:297.77,299.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:303.37,313.38 3 0 +github.com/thebtf/engram/internal/mcp/server.go:313.38,315.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:316.2,317.9 2 0 +github.com/thebtf/engram/internal/mcp/server.go:317.9,319.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:320.2,321.9 2 0 +github.com/thebtf/engram/internal/mcp/server.go:321.9,323.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:324.2,325.9 2 0 +github.com/thebtf/engram/internal/mcp/server.go:325.9,327.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:328.2,328.14 1 0 +github.com/thebtf/engram/internal/mcp/server.go:332.35,334.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:383.49,387.12 3 0 +github.com/thebtf/engram/internal/mcp/server.go:387.12,388.22 1 0 +github.com/thebtf/engram/internal/mcp/server.go:388.22,389.11 1 0 +github.com/thebtf/engram/internal/mcp/server.go:390.22,392.11 2 0 +github.com/thebtf/engram/internal/mcp/server.go:393.12,393.12 0 0 +github.com/thebtf/engram/internal/mcp/server.go:396.4,397.18 2 0 +github.com/thebtf/engram/internal/mcp/server.go:397.18,398.13 1 0 +github.com/thebtf/engram/internal/mcp/server.go:401.4,402.61 2 0 +github.com/thebtf/engram/internal/mcp/server.go:402.61,404.13 2 0 +github.com/thebtf/engram/internal/mcp/server.go:407.4,407.55 1 0 +github.com/thebtf/engram/internal/mcp/server.go:407.55,409.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:411.3,411.28 1 0 +github.com/thebtf/engram/internal/mcp/server.go:414.2,414.9 1 0 +github.com/thebtf/engram/internal/mcp/server.go:415.20,416.19 1 0 +github.com/thebtf/engram/internal/mcp/server.go:417.25,418.17 1 0 +github.com/thebtf/engram/internal/mcp/server.go:418.17,420.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:421.3,421.13 1 0 +github.com/thebtf/engram/internal/mcp/server.go:427.77,428.19 1 0 +github.com/thebtf/engram/internal/mcp/server.go:428.19,431.3 2 0 +github.com/thebtf/engram/internal/mcp/server.go:433.2,433.20 1 0 +github.com/thebtf/engram/internal/mcp/server.go:434.20,435.33 1 0 +github.com/thebtf/engram/internal/mcp/server.go:436.20,437.32 1 0 +github.com/thebtf/engram/internal/mcp/server.go:438.20,439.37 1 0 +github.com/thebtf/engram/internal/mcp/server.go:443.24,444.93 1 0 +github.com/thebtf/engram/internal/mcp/server.go:445.34,446.101 1 0 +github.com/thebtf/engram/internal/mcp/server.go:447.22,448.91 1 0 +github.com/thebtf/engram/internal/mcp/server.go:449.29,450.120 1 0 +github.com/thebtf/engram/internal/mcp/server.go:451.10,456.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:461.51,462.20 1 0 +github.com/thebtf/engram/internal/mcp/server.go:463.50,464.70 1 0 +github.com/thebtf/engram/internal/mcp/server.go:465.46,466.79 1 0 +github.com/thebtf/engram/internal/mcp/server.go:467.10,468.80 1 0 +github.com/thebtf/engram/internal/mcp/server.go:473.59,485.63 2 0 +github.com/thebtf/engram/internal/mcp/server.go:485.63,487.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:489.2,493.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:496.45,503.33 3 0 +github.com/thebtf/engram/internal/mcp/server.go:503.33,505.57 2 0 +github.com/thebtf/engram/internal/mcp/server.go:505.57,506.76 1 0 +github.com/thebtf/engram/internal/mcp/server.go:506.76,507.13 1 0 +github.com/thebtf/engram/internal/mcp/server.go:509.4,509.18 1 0 +github.com/thebtf/engram/internal/mcp/server.go:509.18,511.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:511.10,513.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:514.4,518.11 5 0 +github.com/thebtf/engram/internal/mcp/server.go:522.2,522.19 1 0 +github.com/thebtf/engram/internal/mcp/server.go:660.29,683.21 2 0 +github.com/thebtf/engram/internal/mcp/server.go:683.21,689.3 5 0 +github.com/thebtf/engram/internal/mcp/server.go:690.2,699.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:712.30,765.49 3 0 +github.com/thebtf/engram/internal/mcp/server.go:765.49,789.3 5 0 +github.com/thebtf/engram/internal/mcp/server.go:790.2,799.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:805.40,936.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:942.58,1048.35 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1048.35,1077.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1080.2,1080.33 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1080.33,1090.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1093.2,1093.26 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1093.26,1123.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1124.2,1124.80 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1124.80,1126.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1127.2,1127.55 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1127.55,1129.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1130.2,1130.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1130.38,1132.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1134.2,1134.25 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1134.25,1136.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1138.2,1138.33 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1138.33,1140.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1141.2,1141.69 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1141.69,1143.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1144.2,1144.75 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1144.75,1146.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1148.2,1148.27 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1148.27,1165.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1168.2,1168.76 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1168.76,1191.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1195.2,1195.48 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1195.48,1197.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1201.2,1201.47 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1201.47,1203.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1205.2,1205.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1205.38,1207.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1212.2,1212.21 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1212.21,1214.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1228.2,1228.51 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1228.51,1230.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1233.2,1233.56 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1233.56,1235.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1238.2,1238.71 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1238.71,1298.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1302.2,1302.104 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1302.104,1321.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1324.2,1324.72 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1324.72,1333.154 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1333.154,1334.26 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1334.26,1336.8 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1337.7,1337.16 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1338.35,1340.26 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1340.26,1342.8 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1343.7,1343.18 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1371.2,1371.26 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1371.26,1390.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1393.2,1393.28 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1393.28,1443.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1446.2,1446.28 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1446.28,1478.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1481.2,1481.37 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1481.37,1561.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1564.2,1568.23 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1568.23,1570.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1572.2,1588.57 3 0 +github.com/thebtf/engram/internal/mcp/server.go:1588.57,1591.29 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1591.29,1593.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1594.3,1594.27 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1594.27,1595.29 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1595.29,1597.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1601.2,1607.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1612.79,1614.60 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1614.60,1620.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1622.2,1623.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1623.16,1631.3 3 0 +github.com/thebtf/engram/internal/mcp/server.go:1633.2,1641.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1644.69,1645.34 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1645.34,1647.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1648.2,1649.22 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1649.22,1651.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1652.2,1652.37 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1656.99,1658.14 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1659.16,1660.35 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1661.15,1662.46 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1663.18,1664.49 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1665.15,1666.46 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1667.18,1668.49 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1669.14,1670.45 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1671.15,1672.34 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1676.2,1676.14 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1677.35,1678.52 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1679.26,1680.37 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1681.20,1682.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1683.20,1684.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1685.16,1686.35 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1687.29,1688.40 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1689.33,1690.50 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1691.25,1692.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1693.23,1694.41 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1696.26,1697.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1698.24,1699.42 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1700.22,1701.40 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1702.25,1703.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1704.27,1705.45 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1706.25,1707.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1709.30,1710.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1711.28,1712.42 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1713.17,1714.40 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1715.20,1716.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1717.20,1718.45 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1719.20,1720.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1722.20,1723.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1724.18,1725.36 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1726.20,1727.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1728.18,1729.36 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1730.21,1731.39 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1732.21,1733.39 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1734.26,1735.44 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1736.25,1737.34 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1738.26,1739.44 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1740.24,1741.42 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1742.26,1743.44 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1744.27,1745.45 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1746.22,1747.40 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1748.19,1749.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1750.15,1751.34 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1752.16,1753.35 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1755.21,1756.44 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1757.19,1758.42 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1759.20,1760.44 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1761.22,1762.45 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1763.22,1764.40 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1765.23,1766.41 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1767.20,1768.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1769.32,1770.49 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1771.19,1772.37 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1773.19,1774.37 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1775.33,1776.50 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1777.35,1778.52 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1779.24,1780.42 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1781.32,1782.49 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1783.28,1784.46 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1785.21,1786.39 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1787.34,1788.51 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1789.25,1790.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1791.29,1792.46 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1793.26,1794.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1795.27,1796.44 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1798.25,1799.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1800.23,1801.41 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1802.27,1803.45 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1804.26,1805.44 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1806.29,1807.47 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1809.29,1810.46 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1811.27,1812.44 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1813.30,1814.47 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1815.38,1816.54 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1817.36,1818.52 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1820.24,1821.42 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1822.27,1823.45 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1824.22,1825.40 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1826.32,1827.49 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1828.32,1829.49 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1830.31,1831.48 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1832.35,1833.52 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1834.36,1835.53 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1836.36,1837.53 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1838.38,1839.54 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1840.34,1841.51 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1843.22,1844.40 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1845.21,1846.39 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1847.24,1848.42 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1850.25,1851.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1852.25,1853.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1859.2,1859.14 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1860.22,1863.131 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1866.51,1867.123 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1868.10,1869.50 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1874.47,1876.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1876.16,1879.3 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1880.2,1880.35 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1884.72,1890.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1896.105,1898.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1898.16,1900.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1902.2,1903.17 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1903.17,1905.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1907.2,1908.17 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1908.17,1910.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1912.2,1918.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1918.16,1920.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1921.2,1921.25 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1927.76,1933.15 3 0 +github.com/thebtf/engram/internal/mcp/server.go:1933.15,1936.17 3 0 +github.com/thebtf/engram/internal/mcp/server.go:1936.17,1938.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1939.3,1939.26 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1943.2,1950.36 3 0 +github.com/thebtf/engram/internal/mcp/server.go:1950.36,1952.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1952.8,1955.29 3 0 +github.com/thebtf/engram/internal/mcp/server.go:1955.29,1958.4 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1959.3,1962.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1966.2,1966.20 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1966.20,1977.20 6 0 +github.com/thebtf/engram/internal/mcp/server.go:1977.20,1979.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1980.3,1980.20 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1980.20,1982.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1985.3,1985.37 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1985.37,1987.30 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1987.30,1988.16 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1988.16,1990.6 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1990.11,1992.6 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1994.4,1995.56 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1995.56,1997.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1998.4,2003.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2008.2,2008.29 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2008.29,2009.63 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2009.63,2011.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2011.9,2013.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2021.2,2021.29 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2021.29,2029.38 3 0 +github.com/thebtf/engram/internal/mcp/server.go:2029.38,2031.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2031.9,2033.31 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2033.31,2035.30 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2035.30,2037.6 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2039.4,2042.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2046.2,2047.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2047.16,2049.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2050.2,2050.25 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2055.57,2056.33 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2056.33,2058.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2059.2,2060.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2060.16,2062.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2063.2,2064.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2064.16,2066.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2067.2,2067.23 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2071.79,2105.15 6 0 +github.com/thebtf/engram/internal/mcp/server.go:2105.15,2107.17 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2107.17,2111.4 3 0 +github.com/thebtf/engram/internal/mcp/server.go:2111.9,2112.17 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2112.17,2114.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2115.4,2117.26 3 0 +github.com/thebtf/engram/internal/mcp/server.go:2117.26,2119.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2119.10,2121.29 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2121.29,2123.6 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2125.4,2129.25 5 0 +github.com/thebtf/engram/internal/mcp/server.go:2130.19,2130.19 0 0 +github.com/thebtf/engram/internal/mcp/server.go:2132.20,2134.106 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2135.12,2137.103 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2140.8,2143.3 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2144.2,2150.49 3 0 +github.com/thebtf/engram/internal/mcp/server.go:2150.49,2152.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2152.8,2154.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2155.2,2168.27 4 0 +github.com/thebtf/engram/internal/mcp/server.go:2168.27,2170.17 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2170.17,2173.4 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2173.9,2175.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2177.2,2182.40 4 0 +github.com/thebtf/engram/internal/mcp/server.go:2182.40,2183.21 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2184.20,2185.20 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2186.19,2187.19 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2191.2,2191.24 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2191.24,2193.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2193.8,2193.30 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2193.30,2195.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2198.2,2198.28 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2198.28,2200.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2203.2,2203.29 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2203.29,2205.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2207.2,2208.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2208.16,2210.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2211.2,2211.28 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2216.103,2218.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2218.16,2220.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2222.2,2223.15 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2223.15,2225.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2227.2,2239.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2239.16,2241.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2242.2,2242.25 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2246.93,2248.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2251.91,2253.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:18.28,29.20 4 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:29.20,33.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:35.2,44.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:68.36,69.49 1 1 +github.com/thebtf/engram/internal/mcp/tools_admin.go:69.49,74.3 4 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:75.2,75.25 1 1 +github.com/thebtf/engram/internal/mcp/tools_admin.go:80.26,82.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:84.89,86.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:86.16,88.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:89.2,90.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:90.18,92.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:94.2,94.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:95.15,96.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:97.26,98.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:99.25,100.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:101.23,105.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:105.22,107.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:108.3,108.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:109.10,110.114 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:120.92,126.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:126.26,128.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:130.2,131.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:131.19,133.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:134.2,135.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:135.19,137.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:138.2,138.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:138.24,140.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:142.2,142.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:142.25,144.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:146.2,147.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:147.16,149.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:151.2,151.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:27.40,30.2 2 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:32.30,46.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:48.99,49.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:49.34,51.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:52.2,52.69 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:52.69,54.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:56.2,57.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:57.16,59.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:60.2,61.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:61.21,63.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:64.2,67.26 3 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:67.26,69.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:70.2,71.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:71.25,73.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:75.2,77.44 3 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:77.44,79.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:80.2,80.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:80.33,82.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:83.2,83.81 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:86.52,87.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:87.16,89.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:90.2,90.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:90.15,92.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:93.2,93.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:96.73,97.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:97.21,99.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:100.2,101.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:101.29,110.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:111.2,111.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:114.34,116.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:31.98,32.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:32.52,34.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:35.2,35.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:35.26,37.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:39.2,40.49 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:40.49,42.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:43.2,43.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:43.21,45.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:46.2,46.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:46.21,48.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:49.2,49.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:49.18,51.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:52.2,52.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:52.18,54.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:56.2,56.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:56.38,58.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:60.2,61.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:61.16,63.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:68.2,70.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:70.26,77.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:79.2,81.36 3 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:81.36,84.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:86.2,89.28 3 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:89.28,90.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:90.39,91.9 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:93.3,97.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:100.2,104.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:107.60,113.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:115.101,116.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:116.38,118.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:120.2,122.21 3 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:122.21,123.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:123.26,125.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:126.3,126.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:126.23,128.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:129.8,130.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:130.26,132.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:133.3,133.68 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:133.68,135.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:137.2,140.20 3 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:141.17,142.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:143.67,143.67 0 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:144.10,145.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:148.2,162.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:162.16,164.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:165.2,165.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:165.19,173.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:174.2,174.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:174.30,176.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:177.2,177.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:177.31,179.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:181.2,182.36 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:182.36,196.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:198.2,199.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:199.19,201.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:202.2,203.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:203.18,205.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:206.2,207.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:207.21,209.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:210.2,211.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:211.25,213.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:214.2,225.21 3 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:225.21,227.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:228.2,228.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:228.25,230.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:231.2,231.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:231.18,233.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:235.2,244.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:244.21,246.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:247.2,247.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:247.25,249.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:250.2,250.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:250.18,252.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:253.2,253.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:253.24,255.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:256.2,256.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:259.50,261.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:261.22,263.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:264.2,264.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:270.90,272.42 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:272.42,276.3 3 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:277.2,281.27 3 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:281.27,282.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:282.45,284.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:286.2,286.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:25.28,88.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:95.95,96.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:96.22,98.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:99.2,100.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:100.32,102.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:104.2,105.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:105.16,107.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:109.2,114.35 3 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:114.35,121.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:123.2,123.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:123.25,125.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:127.2,134.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:134.16,136.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:138.2,146.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:154.94,155.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:155.22,157.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:158.2,159.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:159.32,161.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:163.2,164.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:164.16,166.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:168.2,172.35 3 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:172.35,179.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:181.2,181.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:181.25,183.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:185.2,192.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:192.16,194.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:196.2,203.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:211.97,212.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:212.22,214.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:215.2,216.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:216.32,218.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:220.2,221.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:221.16,223.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:225.2,229.35 3 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:229.35,236.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:238.2,238.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:238.25,240.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:242.2,249.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:249.16,251.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:253.2,260.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:31.80,32.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:32.14,34.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:35.2,48.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:51.136,53.51 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:53.51,55.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:56.2,56.83 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:59.94,60.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:60.21,62.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:63.2,63.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:68.30,162.2 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:165.98,166.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:166.49,168.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:169.2,170.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:170.16,172.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:173.2,174.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:174.19,176.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:177.2,179.17 3 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:179.17,181.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:183.2,184.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:184.16,186.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:188.2,189.31 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:189.31,190.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:190.15,191.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:193.3,193.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:196.2,201.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:201.16,203.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:204.2,204.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:208.96,209.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:209.49,211.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:212.2,213.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:213.16,215.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:216.2,217.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:217.13,219.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:221.2,222.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:222.16,224.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:225.2,225.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:225.22,227.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:229.2,230.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:230.16,232.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:233.2,233.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:239.100,240.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:240.22,242.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:243.2,244.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:244.16,246.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:247.2,248.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:248.13,250.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:255.2,256.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:256.12,263.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:263.30,264.77 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:264.77,269.5 4 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:271.3,272.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:272.21,274.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:275.3,275.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:279.2,279.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:279.29,281.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:284.2,285.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:285.16,287.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:288.2,288.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:288.22,290.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:291.2,291.55 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:291.55,293.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:294.2,294.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:294.74,296.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:297.2,298.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:298.16,300.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:306.2,307.41 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:307.41,309.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:310.2,324.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:324.16,325.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:325.50,327.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:328.3,328.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:330.2,330.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:330.38,332.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:334.2,341.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:341.16,343.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:344.2,344.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:348.99,349.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:349.49,351.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:352.2,353.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:353.16,355.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:356.2,357.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:357.13,359.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:360.2,362.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:362.16,364.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:365.2,365.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:365.22,367.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:368.2,368.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:368.74,370.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:371.2,372.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:372.16,374.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:375.2,375.85 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:375.85,377.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:379.2,380.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:380.16,381.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:381.50,383.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:384.3,384.60 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:386.2,386.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:386.20,388.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:390.2,395.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:395.16,397.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:398.2,398.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:402.102,403.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:403.49,405.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:406.2,407.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:407.16,409.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:410.2,411.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:411.13,413.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:414.2,415.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:415.16,417.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:418.2,418.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:418.22,420.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:421.2,421.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:421.74,423.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:424.2,425.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:425.16,427.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:428.2,428.88 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:428.88,430.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:432.2,433.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:433.16,434.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:434.50,436.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:437.3,437.63 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:439.2,439.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:439.20,441.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:443.2,448.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:448.16,450.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:451.2,451.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:34.30,36.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:42.61,44.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:48.32,75.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:79.32,94.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:100.98,101.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:101.25,103.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:104.2,104.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:104.29,106.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:108.2,113.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:113.17,114.55 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:114.55,116.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:118.2,118.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:118.24,120.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:121.2,121.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:121.23,123.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:124.2,124.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:124.23,126.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:134.2,135.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:135.21,137.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:142.2,147.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:147.16,149.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:154.2,165.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:165.25,175.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:177.2,183.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:183.16,185.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:186.2,186.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:194.98,195.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:195.25,197.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:198.2,198.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:198.29,200.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:202.2,205.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:205.17,207.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:208.2,209.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:209.21,211.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:213.2,214.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:214.16,216.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:217.2,218.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:218.16,220.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:221.2,222.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:222.16,224.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:226.2,231.11 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:231.11,233.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:235.2,236.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:236.16,238.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:239.2,239.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:21.52,22.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:22.24,25.28 3 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:25.28,27.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:29.2,29.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:35.72,37.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:37.15,39.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:41.2,42.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:42.16,44.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:45.2,45.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:49.99,51.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:51.16,53.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:55.2,56.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:56.16,58.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:60.2,72.23 7 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:72.23,74.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:75.2,75.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:75.24,77.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:78.2,78.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:78.24,80.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:81.2,81.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:82.27,82.27 0 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:84.10,85.93 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:87.2,87.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:87.30,89.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:90.2,90.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:90.26,92.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:94.2,95.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:95.16,97.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:99.2,100.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:100.16,102.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:104.2,112.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:112.16,114.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:116.2,123.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:123.16,125.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:126.2,126.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:130.97,132.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:132.16,134.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:136.2,137.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:137.16,139.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:141.2,147.23 4 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:147.23,149.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:150.2,150.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:150.26,152.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:154.2,155.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:155.16,157.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:159.2,160.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:160.16,161.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:161.47,163.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:164.3,164.51 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:167.2,167.97 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:167.97,172.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:174.2,175.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:175.16,177.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:179.2,185.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:185.16,187.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:188.2,188.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:192.99,194.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:194.16,196.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:198.2,199.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:199.16,201.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:203.2,207.26 3 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:207.26,209.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:211.2,212.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:212.16,214.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:216.2,223.26 3 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:223.26,229.28 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:229.28,231.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:232.3,232.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:235.2,236.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:236.16,238.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:239.2,239.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:243.100,245.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:245.16,247.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:249.2,250.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:250.16,252.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:254.2,262.23 5 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:262.23,264.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:265.2,265.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:265.24,267.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:268.2,268.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:269.27,269.27 0 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:271.10,272.93 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:274.2,274.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:274.30,276.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:277.2,277.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:277.26,279.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:281.2,281.71 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:281.71,282.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:282.47,284.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:285.3,285.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:288.2,293.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:293.16,295.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:296.2,296.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:302.92,309.19 5 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:309.19,310.53 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:310.53,313.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:316.2,317.51 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:317.51,318.66 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:318.66,320.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:323.2,331.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:331.16,333.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:334.2,334.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:338.46,342.32 4 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:342.32,343.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:343.20,346.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:348.2,350.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:350.26,352.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:352.27,353.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:353.13,355.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:356.4,356.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:358.3,358.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:360.2,360.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:16.45,18.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:20.35,36.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:38.84,39.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:39.40,41.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:42.2,42.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:42.50,44.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:45.2,45.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:48.101,50.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:50.16,52.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:53.2,54.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:54.16,56.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:57.2,58.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:58.19,60.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:61.2,62.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:62.21,64.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:65.2,66.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:66.16,68.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:69.2,69.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:72.102,74.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:74.16,76.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:77.2,82.8 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:10.100,12.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:12.16,14.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:16.2,17.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:17.18,19.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:21.2,21.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:22.16,23.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:24.14,25.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:26.14,27.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:28.17,29.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:30.17,31.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:32.21,33.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:34.19,35.42 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:36.17,37.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:38.16,39.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:40.16,41.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:42.21,43.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:44.10,45.167 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:15.77,16.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:16.33,18.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:20.2,21.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:21.27,23.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:25.2,26.28 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:26.28,29.17 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:29.17,31.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:34.2,41.32 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:41.32,46.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:46.20,48.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:49.3,49.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:52.2,53.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:53.16,55.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:57.2,57.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:61.97,62.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:62.28,64.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:66.2,67.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:67.16,69.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:71.2,75.29 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:75.29,77.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:79.2,80.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:80.16,82.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:84.2,84.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:84.20,86.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:88.2,97.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:97.25,103.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:103.20,105.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:106.3,106.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:106.19,108.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:109.3,109.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:112.2,113.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:113.16,115.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:117.2,117.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:121.95,122.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:122.28,124.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:126.2,127.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:127.16,129.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:131.2,137.50 4 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:137.50,139.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:141.2,142.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:142.16,144.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:145.2,145.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:145.16,147.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:149.2,149.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:149.21,151.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:153.2,154.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:154.16,156.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:157.2,157.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:157.20,159.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:161.2,161.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:165.98,166.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:166.28,168.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:170.2,171.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:171.16,173.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:175.2,181.50 4 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:181.50,183.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:185.2,185.96 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:185.96,187.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:189.2,189.88 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:197.98,198.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:198.28,200.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:202.2,203.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:203.16,205.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:207.2,217.74 6 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:217.74,219.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:222.2,223.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:223.16,225.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:227.2,229.156 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:235.98,237.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:237.16,239.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:241.2,247.24 4 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:247.24,249.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:252.2,253.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:253.29,255.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:256.2,256.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:15.93,16.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:16.37,18.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:20.2,21.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:21.16,23.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:25.2,32.16 7 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:32.16,34.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:35.2,35.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:35.19,37.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:38.2,38.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:38.19,40.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:42.2,43.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:43.16,45.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:47.2,54.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:54.16,56.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:57.2,57.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:61.91,62.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:62.37,64.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:66.2,67.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:67.16,69.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:71.2,73.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:73.16,75.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:76.2,76.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:76.19,78.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:80.2,81.43 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:81.43,83.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:83.19,85.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:86.3,86.79 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:87.8,89.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:90.2,90.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:90.16,91.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:91.45,93.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:94.3,94.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:97.2,110.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:110.16,112.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:113.2,113.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:117.93,119.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:122.91,123.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:123.37,125.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:127.2,128.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:128.16,130.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:132.2,133.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:133.19,135.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:136.2,141.16 5 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:141.16,143.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:145.2,155.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:155.25,165.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:167.2,168.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:168.16,170.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:171.2,171.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:175.94,176.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:176.37,178.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:180.2,181.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:181.16,183.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:185.2,187.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:187.16,189.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:190.2,190.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:190.19,192.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:193.2,196.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:196.16,198.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:200.2,208.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:208.25,216.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:218.2,225.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:225.16,227.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:228.2,228.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:232.94,233.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:233.37,235.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:237.2,238.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:238.16,240.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:242.2,243.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:243.21,245.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:246.2,248.19 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:248.19,250.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:252.2,253.46 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:253.46,255.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:255.13,257.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:259.2,259.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:259.44,261.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:261.13,263.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:266.2,267.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:267.16,269.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:271.2,278.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:278.16,280.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:281.2,281.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:19.69,21.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:23.38,38.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:40.51,63.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:65.53,80.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:82.46,85.32 3 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:85.32,87.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:88.2,88.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:91.105,93.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:93.16,95.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:96.2,97.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:97.16,99.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:100.2,100.70 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:103.107,105.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:105.16,107.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:108.2,109.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:109.16,111.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:112.2,112.72 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:115.101,117.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:117.16,119.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:120.2,121.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:121.17,123.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:124.2,139.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:142.109,144.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:144.16,146.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:147.2,154.8 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:157.100,159.28 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:159.28,161.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:161.18,163.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:164.3,164.62 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:166.2,167.72 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:167.72,169.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:170.2,170.53 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:170.53,172.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:173.2,174.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:174.26,176.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:177.2,177.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:180.73,182.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:182.16,184.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:185.2,185.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:12.104,14.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:14.16,16.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:18.2,19.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:19.18,21.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:23.2,23.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:24.14,25.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:26.18,27.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:28.17,29.46 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:30.10,31.96 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:36.101,37.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:37.27,39.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:41.2,42.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:42.16,44.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:46.2,47.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:47.21,49.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:50.2,51.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:51.19,53.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:54.2,54.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:55.52,55.52 0 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:56.10,57.101 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:59.2,61.93 2 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:61.93,64.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:66.2,70.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:27.31,94.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:98.97,100.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:100.26,102.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:103.2,103.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:103.28,105.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:107.2,108.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:108.16,110.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:112.2,115.15 4 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:115.15,117.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:118.2,118.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:118.17,120.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:122.2,123.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:123.16,125.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:127.2,140.29 3 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:140.29,151.31 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:151.31,154.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:155.3,155.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:158.2,162.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:167.100,169.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:169.26,171.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:172.2,172.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:172.28,174.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:175.2,175.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:175.26,177.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:179.2,180.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:180.16,182.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:184.2,185.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:185.22,187.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:189.2,190.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:190.20,191.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:191.54,199.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:200.3,200.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:200.61,202.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:203.3,203.58 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:206.2,211.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:215.95,217.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:217.32,219.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:220.2,220.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:220.28,222.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:224.2,225.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:225.16,227.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:229.2,230.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:230.22,232.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:234.2,234.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:234.61,236.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:239.2,239.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:239.25,246.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:248.2,252.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:258.104,260.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:260.26,262.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:267.2,271.20 3 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:271.20,275.3 3 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:275.8,279.3 3 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:280.2,280.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:284.60,285.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:285.30,287.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:288.2,288.42 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:288.42,290.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:291.2,291.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:64.89,65.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:65.25,67.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:69.2,70.49 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:70.49,72.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:74.2,74.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:75.18,76.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:77.21,78.35 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:79.19,80.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:81.18,82.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:83.19,84.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:85.18,86.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:87.18,91.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:91.23,93.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:94.3,94.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:95.10,96.62 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:100.81,103.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:103.19,105.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:106.2,107.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:107.19,109.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:112.2,112.46 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:112.46,114.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:115.2,115.46 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:115.46,117.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:122.2,122.66 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:122.66,124.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:127.2,127.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:127.25,128.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:128.22,130.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:131.8,132.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:132.26,134.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:138.2,138.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:138.25,139.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:139.22,141.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:142.8,143.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:143.26,145.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:148.2,148.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:148.22,150.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:151.2,151.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:151.38,153.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:154.2,154.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:154.19,156.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:159.2,161.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:161.25,164.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:165.2,165.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:165.25,168.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:169.2,171.23 3 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:171.23,174.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:175.2,175.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:175.23,178.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:180.2,193.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:193.16,195.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:198.2,199.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:199.29,201.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:202.2,202.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:202.29,204.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:205.2,213.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:216.121,217.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:217.28,218.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:218.26,220.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:221.3,222.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:222.17,223.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:223.49,225.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:226.4,226.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:228.3,228.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:230.2,230.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:230.26,232.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:233.2,234.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:234.16,235.48 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:235.48,237.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:238.3,238.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:240.2,240.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:243.101,248.36 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:248.36,250.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:250.8,252.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:253.2,253.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:253.16,255.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:256.2,256.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:256.32,257.128 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:257.128,262.72 5 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:262.72,264.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:267.2,267.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:276.81,277.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:277.25,279.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:280.2,280.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:280.22,282.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:283.2,283.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:283.39,285.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:286.2,286.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:286.25,288.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:289.2,289.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:289.21,291.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:292.2,293.14 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:293.14,295.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:296.2,305.16 5 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:305.16,307.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:308.2,314.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:317.84,318.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:318.19,320.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:321.2,323.63 3 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:323.63,325.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:326.2,329.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:332.82,333.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:333.38,335.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:336.2,337.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:338.18,339.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:340.18,341.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:345.2,345.59 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:345.59,347.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:349.2,351.21 3 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:351.21,353.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:353.8,356.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:357.2,357.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:357.16,359.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:366.2,367.41 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:367.41,369.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:371.2,378.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:397.115,398.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:398.15,400.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:403.2,404.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:404.26,405.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:405.28,407.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:408.3,408.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:408.28,410.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:412.2,412.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:412.23,415.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:420.2,426.12 4 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:426.12,427.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:427.27,429.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:429.18,431.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:433.4,433.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:433.33,435.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:440.2,441.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:441.26,442.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:442.28,443.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:443.49,445.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:448.3,448.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:448.28,449.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:449.49,451.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:454.2,454.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:457.82,458.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:458.21,460.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:461.2,462.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:462.16,464.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:465.2,465.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:465.36,467.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:468.2,469.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:469.16,471.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:472.2,477.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:480.82,481.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:481.40,483.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:484.2,485.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:485.19,487.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:488.2,489.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:489.16,491.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:492.2,499.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:502.82,503.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:503.21,505.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:506.2,507.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:507.16,509.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:510.2,514.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:23.179,24.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:24.22,26.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:28.2,32.22 4 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:32.22,34.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:35.2,36.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:36.22,38.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:40.2,41.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:41.26,43.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:44.2,44.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:44.26,46.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:47.2,47.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:47.30,49.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:50.2,50.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:50.30,52.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:54.2,55.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:55.16,57.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:58.2,58.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:58.13,60.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:61.2,62.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:62.16,64.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:65.2,65.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:65.13,67.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:69.2,70.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:70.16,72.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:73.2,73.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:73.15,75.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:77.2,77.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:80.172,81.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:81.28,82.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:82.23,84.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:85.3,85.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:85.18,87.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:88.3,89.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:89.17,90.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:90.49,92.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:93.4,93.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:95.3,95.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:98.2,98.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:98.24,100.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:101.2,101.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:101.19,103.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:104.2,105.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:105.16,106.48 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:106.48,108.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:109.3,109.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:111.2,111.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:114.119,116.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:116.22,118.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:119.2,120.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:120.22,122.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:124.2,126.26 3 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:126.26,127.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:127.36,129.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:130.3,130.105 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:131.8,132.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:132.32,134.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:135.3,135.103 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:137.2,137.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:137.16,139.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:141.2,141.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:141.32,143.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:143.27,145.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:146.3,147.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:147.27,149.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:150.3,150.106 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:150.106,151.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:153.3,153.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:153.27,154.114 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:154.114,155.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:157.9,157.104 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:157.104,158.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:160.3,160.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:160.27,161.114 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:161.114,162.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:164.9,164.104 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:164.104,165.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:167.3,167.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:169.2,169.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:25.90,26.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:26.26,28.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:30.2,31.49 2 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:31.49,33.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:35.2,35.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:36.16,37.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:38.10,39.63 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:43.84,44.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:44.21,46.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:47.2,47.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:47.25,49.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:50.2,50.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:50.21,52.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:53.2,53.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:53.21,55.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:57.2,58.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:59.18,60.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:61.15,62.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:63.24,64.42 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:65.10,66.108 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:69.2,70.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:70.22,72.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:73.2,74.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:74.29,76.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:78.2,78.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:78.14,85.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:87.2,89.37 3 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:89.37,92.21 3 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:92.21,94.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:97.2,100.31 4 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:100.31,102.38 2 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:102.38,104.37 2 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:104.37,106.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:109.3,122.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:122.26,124.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:125.3,125.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:125.19,127.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:131.3,133.39 3 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:133.39,135.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:135.9,137.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:138.3,138.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:138.17,140.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:142.3,142.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:142.34,144.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:145.3,145.11 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:148.2,155.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:20.99,22.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:22.16,24.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:26.2,31.44 3 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:31.44,32.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:32.33,33.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:33.43,38.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:43.2,43.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:43.49,45.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:46.2,46.48 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:46.48,48.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:50.2,52.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:52.27,55.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:55.8,60.24 3 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:60.24,62.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:64.3,64.57 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:64.57,66.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:68.3,68.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:71.2,71.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:71.16,73.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:75.2,76.23 2 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:76.23,78.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:80.2,80.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:19.40,89.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:109.71,111.9 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:111.9,113.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:115.2,116.38 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:116.38,117.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:118.13,119.41 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:119.41,121.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:122.17,123.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:123.43,125.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:126.11,127.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:127.40,129.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:133.2,133.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:133.22,138.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:139.2,139.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:143.90,144.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:144.25,146.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:148.2,149.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:149.16,151.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:153.2,157.61 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:157.61,159.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:161.2,161.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:162.16,163.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:164.14,165.35 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:166.13,167.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:168.16,169.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:170.17,171.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:172.16,173.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:174.15,175.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:176.10,177.120 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:189.85,191.39 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:191.39,192.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:192.44,194.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:196.2,196.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:196.15,198.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:199.2,199.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:199.15,201.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:202.2,202.46 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:205.91,207.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:207.17,209.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:211.2,215.25 5 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:215.25,217.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:218.2,224.25 4 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:224.25,226.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:227.2,227.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:227.25,229.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:231.2,243.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:243.16,245.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:247.2,247.139 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:250.89,252.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:252.19,254.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:255.2,256.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:256.25,258.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:259.2,264.52 5 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:264.52,266.14 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:266.14,268.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:271.2,277.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:277.25,280.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:282.2,283.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:283.16,285.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:287.2,287.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:287.22,288.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:288.20,290.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:291.3,291.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:294.2,297.31 3 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:297.31,300.29 3 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:300.29,302.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:303.3,305.69 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:308.2,308.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:311.88,313.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:313.13,315.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:317.2,318.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:318.16,320.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:322.2,328.22 6 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:328.22,331.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:333.2,333.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:333.23,335.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:335.30,338.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:341.2,341.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:344.91,346.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:346.13,348.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:350.2,353.18 3 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:353.18,354.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:354.27,356.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:357.3,357.73 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:357.73,359.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:362.2,362.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:362.19,370.17 4 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:370.17,372.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:375.2,376.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:376.26,378.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:379.2,379.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:382.92,384.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:384.13,386.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:388.2,389.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:389.16,391.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:393.2,401.16 4 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:401.16,403.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:405.2,405.88 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:408.91,410.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:410.13,412.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:414.2,418.95 4 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:418.95,420.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:422.2,422.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:425.90,427.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:427.13,429.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:431.2,433.167 3 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:433.167,435.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:437.2,437.89 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:437.89,439.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:441.2,441.108 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:22.93,24.49 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:24.49,26.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:28.2,28.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:29.14,30.42 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:31.17,32.59 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:33.16,34.58 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:35.24,36.75 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:37.27,38.71 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:39.22,40.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:41.23,42.63 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:43.10,44.66 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:48.79,49.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:49.13,51.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:52.2,53.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:53.16,55.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:57.2,58.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:58.32,60.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:61.2,84.28 3 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:87.101,88.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:88.13,90.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:91.2,91.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:91.38,93.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:94.2,95.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:95.16,97.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:98.2,98.53 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:98.53,100.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:102.2,104.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:104.17,106.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:107.2,107.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:107.29,109.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:110.2,115.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:118.100,119.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:119.13,121.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:122.2,122.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:122.38,124.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:125.2,126.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:126.16,128.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:129.2,129.53 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:129.53,131.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:133.2,135.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:135.17,137.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:138.2,138.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:138.29,140.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:141.2,146.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:149.123,150.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:150.13,152.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:153.2,153.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:153.18,155.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:156.2,156.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:156.38,158.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:159.2,161.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:161.17,163.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:164.2,169.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:172.113,173.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:173.13,175.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:176.2,176.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:176.50,178.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:179.2,181.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:181.17,183.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:184.2,188.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:191.57,195.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:197.102,198.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:198.13,200.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:201.2,201.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:201.20,203.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:204.2,205.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:205.16,207.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:209.2,210.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:210.32,212.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:214.2,217.56 3 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:217.56,223.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:225.2,230.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:233.41,235.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:235.16,237.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:238.2,238.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:35.27,37.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:42.41,43.11 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:44.48,45.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:46.10,47.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:54.57,55.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:56.17,57.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:58.16,59.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:60.10,61.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:82.58,83.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:84.28,85.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:86.26,87.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:88.10,89.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:93.114,95.68 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:95.68,97.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:99.2,101.42 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:101.42,102.71 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:102.71,105.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:107.2,117.23 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:117.23,119.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:121.2,124.22 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:124.22,125.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:125.31,127.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:128.3,128.35 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:129.8,129.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:129.37,131.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:132.2,132.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:135.74,136.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:136.30,138.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:139.2,139.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:139.34,141.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:142.2,142.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:142.31,144.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:145.2,145.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:145.22,147.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:161.169,162.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:162.17,164.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:165.2,166.51 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:166.51,168.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:169.2,169.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:172.92,174.42 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:174.42,177.63 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:177.63,179.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:179.9,181.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:183.2,183.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:186.65,190.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:192.115,194.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:194.26,196.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:196.8,196.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:196.31,198.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:199.2,199.117 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:202.122,206.31 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:206.31,207.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:207.45,209.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:211.2,211.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:214.72,216.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:218.117,219.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:219.16,221.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:222.2,223.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:223.20,225.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:225.17,227.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:228.3,228.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:228.27,229.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:229.50,231.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:231.30,232.11 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:236.3,236.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:239.2,241.60 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:241.60,243.61 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:243.61,245.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:246.3,246.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:246.24,247.9 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:249.3,250.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:250.17,252.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:253.3,253.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:253.22,254.9 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:256.3,256.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:256.29,257.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:257.50,259.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:259.30,260.11 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:264.3,265.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:265.32,266.9 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:269.2,269.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:272.51,273.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:273.16,275.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:276.2,277.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:277.18,279.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:280.2,280.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:280.19,282.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:283.2,283.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:286.97,288.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:288.30,290.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:291.2,291.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:291.49,293.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:294.2,294.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:297.108,299.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:301.108,303.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:305.102,307.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:319.55,320.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:320.31,322.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:323.2,323.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:323.26,325.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:326.2,326.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:329.71,330.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:343.26,344.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:345.10,346.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:354.95,362.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:362.16,364.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:366.2,397.39 14 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:397.39,399.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:399.27,401.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:402.8,404.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:405.2,407.46 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:407.46,410.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:411.2,411.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:411.44,413.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:413.12,415.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:417.2,417.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:417.26,419.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:420.2,420.84 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:420.84,422.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:427.2,427.65 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:427.65,429.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:431.2,433.20 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:433.20,435.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:436.2,437.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:437.20,439.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:440.2,440.56 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:440.56,442.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:443.2,443.56 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:443.56,448.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:450.2,450.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:450.45,453.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:459.2,459.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:459.31,461.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:461.22,462.62 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:462.62,465.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:466.4,466.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:468.3,468.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:471.2,472.115 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:472.115,474.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:491.2,491.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:491.19,493.23 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:493.23,495.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:496.3,508.21 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:508.21,510.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:511.3,511.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:522.2,522.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:522.43,535.34 5 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:535.34,556.30 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:556.30,558.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:559.4,559.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:559.44,561.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:562.4,562.106 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:562.106,564.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:575.4,575.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:575.74,577.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:578.4,579.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:579.18,581.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:583.4,584.28 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:584.28,586.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:588.4,588.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:588.31,599.57 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:599.57,601.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:601.17,604.7 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:606.5,607.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:607.21,609.6 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:615.5,615.138 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:615.138,617.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:617.27,619.7 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:620.6,620.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:622.5,623.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:623.26,625.6 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:626.5,626.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:630.4,631.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:631.20,633.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:634.4,634.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:634.22,637.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:637.26,639.6 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:640.5,640.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:645.4,660.77 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:660.77,662.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:663.4,664.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:664.25,666.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:667.4,667.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:673.2,673.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:673.26,675.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:677.2,678.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:678.25,680.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:681.2,681.97 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:681.97,683.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:690.2,691.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:691.21,693.33 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:693.33,695.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:696.3,696.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:696.33,698.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:699.3,699.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:699.49,704.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:721.3,721.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:721.54,722.84 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:722.84,724.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:728.2,728.99 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:728.99,730.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:732.2,733.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:733.22,735.10 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:736.109,737.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:738.100,739.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:740.114,741.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:742.107,743.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:744.11,745.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:748.2,749.43 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:749.43,751.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:753.2,755.34 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:755.34,756.48 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:756.48,757.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:757.19,760.5 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:764.2,764.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:764.31,767.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:768.2,768.35 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:768.35,771.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:772.2,772.76 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:772.76,776.3 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:778.2,780.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:780.16,782.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:782.20,785.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:788.2,788.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:788.25,798.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:798.18,800.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:800.9,800.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:800.30,807.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:808.3,808.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:808.36,810.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:811.3,812.50 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:812.50,815.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:816.3,822.17 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:822.17,824.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:826.3,836.17 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:836.17,838.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:839.3,839.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:842.2,843.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:843.30,844.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:844.52,846.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:846.9,848.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:851.2,869.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:869.21,871.43 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:871.43,873.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:874.3,874.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:874.29,876.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:886.3,886.76 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:886.76,888.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:890.2,890.105 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:890.105,892.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:893.2,894.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:894.16,896.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:901.2,904.40 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:904.40,905.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:905.15,906.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:909.3,910.63 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:910.63,912.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:912.9,914.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:916.3,916.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:916.43,918.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:919.3,920.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:920.20,922.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:925.3,925.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:925.23,928.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:929.3,931.33 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:931.33,934.39 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:934.39,936.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:939.2,948.42 5 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:948.42,950.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:950.21,952.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:952.9,955.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:959.2,959.53 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:959.53,960.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:960.54,961.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:961.33,963.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:964.9,972.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:973.3,973.60 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:973.60,974.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:974.40,976.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:978.3,978.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:978.61,979.41 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:979.41,981.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:983.3,983.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:983.28,985.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:986.3,987.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:989.2,989.51 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:989.51,991.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:995.2,997.53 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:997.53,999.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:999.8,1001.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1002.2,1002.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1002.22,1004.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1008.2,1014.76 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1014.76,1016.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1021.2,1021.57 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1021.57,1026.13 5 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1026.13,1029.21 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1029.21,1032.5 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1033.4,1033.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1033.49,1035.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1036.4,1043.89 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1043.89,1046.5 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1048.4,1048.86 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1052.2,1063.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1063.21,1065.40 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1065.40,1067.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1068.3,1068.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1068.38,1070.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1072.2,1074.18 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1074.18,1081.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1082.2,1082.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1082.28,1084.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1085.2,1085.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1085.16,1087.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1088.2,1088.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1088.30,1090.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1091.2,1091.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1091.30,1093.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1098.2,1098.76 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1098.76,1100.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1101.2,1102.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1102.16,1104.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1105.2,1105.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1111.94,1113.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1113.15,1115.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1117.2,1118.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1118.16,1120.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1122.2,1123.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1123.13,1125.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1126.2,1131.16 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1131.16,1133.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1134.2,1134.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1134.19,1136.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1146.2,1146.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1146.39,1148.55 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1148.55,1150.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1152.2,1152.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1152.39,1154.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1157.2,1158.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1158.21,1163.21 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1163.21,1165.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1166.3,1167.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1167.21,1169.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1170.3,1170.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1170.52,1172.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1173.3,1173.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1173.52,1178.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1179.3,1179.41 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1179.41,1182.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1183.3,1183.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1188.2,1188.46 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1188.46,1190.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1191.2,1191.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1191.27,1193.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1195.2,1196.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1196.16,1198.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1201.2,1210.16 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1210.16,1212.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1213.2,1213.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1218.59,1220.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1220.38,1222.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1225.2,1226.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1226.29,1227.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1227.22,1229.9 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1232.2,1232.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1232.18,1234.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1237.2,1244.29 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1244.29,1245.67 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1245.67,1247.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1249.2,1249.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1249.16,1251.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1254.2,1254.11 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1258.55,1260.47 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1260.47,1262.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1263.2,1264.58 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1264.58,1266.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1267.2,1267.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1270.252,1271.108 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1271.108,1273.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1274.2,1274.55 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1274.55,1276.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1277.2,1277.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1280.184,1282.69 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1282.69,1284.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1284.32,1285.58 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1285.58,1287.10 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1290.3,1290.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1290.18,1292.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1294.2,1294.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1294.19,1297.32 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1297.32,1298.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1298.39,1300.10 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1303.3,1303.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1303.19,1305.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1307.2,1307.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1307.21,1309.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1309.32,1310.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1310.49,1312.10 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1315.3,1315.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1315.18,1317.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1319.2,1319.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1319.28,1321.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1321.17,1323.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1324.3,1324.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1324.27,1326.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1328.2,1328.76 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1328.76,1330.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1331.2,1331.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1342.96,1343.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1343.26,1345.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1347.2,1348.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1348.16,1350.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1352.2,1363.23 9 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1363.23,1364.58 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1364.58,1365.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1365.31,1367.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1367.10,1369.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1373.2,1373.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1373.17,1375.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1376.2,1376.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1376.16,1378.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1379.2,1379.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1379.16,1381.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1382.2,1382.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1382.18,1384.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1385.2,1385.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1385.19,1387.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1388.2,1388.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1388.19,1390.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1396.2,1399.18 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1399.18,1400.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1400.61,1401.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1402.50,1403.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1404.12,1405.108 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1409.2,1410.42 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1410.42,1414.3 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1415.2,1420.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1420.16,1422.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1429.2,1444.43 6 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1444.43,1446.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1449.2,1451.27 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1451.27,1453.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1458.2,1458.46 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1458.46,1460.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1461.2,1461.63 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1461.63,1463.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1465.2,1466.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1466.15,1472.29 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1472.29,1479.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1479.18,1481.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1482.4,1482.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1482.23,1483.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1485.4,1485.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1485.30,1486.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1486.24,1488.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1488.32,1489.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1493.4,1494.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1494.30,1495.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1498.8,1504.29 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1504.29,1506.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1506.18,1508.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1509.4,1509.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1509.23,1510.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1512.4,1512.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1512.30,1513.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1513.24,1515.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1515.32,1516.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1520.4,1521.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1521.30,1522.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1526.2,1526.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1526.26,1528.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1528.17,1530.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1535.2,1535.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1535.74,1536.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1536.13,1537.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1537.33,1542.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1542.26,1544.39 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1544.39,1546.7 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1548.5,1548.82 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1565.2,1565.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1565.38,1569.27 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1569.27,1571.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1572.3,1572.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1572.27,1574.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1576.3,1581.32 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1581.32,1586.4 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1588.3,1592.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1592.18,1594.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1595.3,1596.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1596.17,1598.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1599.3,1599.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1602.2,1602.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1603.15,1618.32 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1618.32,1620.33 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1620.33,1621.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1621.40,1623.11 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1626.4,1638.6 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1640.3,1641.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1641.17,1643.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1644.3,1644.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1646.18,1648.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1648.17,1650.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1651.3,1651.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1653.10,1654.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1654.25,1656.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1657.3,1659.32 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1659.32,1661.33 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1661.33,1662.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1662.40,1664.11 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1667.4,1669.26 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1669.26,1671.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1672.4,1673.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1673.25,1675.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1676.4,1676.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1678.3,1678.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1690.51,1695.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1700.73,1702.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1702.16,1704.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1705.2,1706.48 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1706.48,1710.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1711.2,1713.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1713.16,1715.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1716.2,1716.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1727.117,1731.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1731.21,1733.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1734.2,1735.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1735.16,1737.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1738.2,1739.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1739.27,1741.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1742.2,1742.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1764.19,1775.30 7 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1775.30,1777.37 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1777.37,1779.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1781.3,1781.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1781.20,1783.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1797.2,1797.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1797.39,1799.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1801.2,1811.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1811.25,1813.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1815.2,1816.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1816.29,1818.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1824.2,1824.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1824.27,1826.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1831.2,1833.22 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1833.22,1835.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1837.2,1846.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1846.16,1848.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1853.2,1855.27 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1855.27,1857.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1859.2,1876.33 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1876.33,1878.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1880.2,1881.28 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1881.28,1885.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1885.20,1888.33 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1888.33,1889.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1889.40,1891.11 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1894.4,1894.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1894.20,1895.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1900.3,1900.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1900.22,1902.33 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1902.33,1903.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1903.50,1905.11 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1908.4,1908.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1908.19,1909.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1918.3,1918.56 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1918.56,1919.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1927.3,1927.64 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1927.64,1928.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1932.3,1935.32 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1935.32,1936.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1936.39,1938.10 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1942.3,1956.14 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1956.14,1957.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1957.37,1959.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1961.3,1962.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1962.26,1963.9 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1975.2,1975.59 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1975.59,1986.17 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1986.17,1988.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1990.3,1991.34 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1991.34,1993.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1995.3,1996.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1996.29,1998.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1998.21,2001.34 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2001.34,2002.41 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2002.41,2004.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2007.5,2007.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2007.21,2008.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2011.4,2011.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2011.23,2013.34 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2013.34,2014.51 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2014.51,2016.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2019.5,2019.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2019.20,2020.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2023.4,2023.57 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2023.57,2024.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2027.4,2027.65 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2027.65,2028.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2030.4,2031.33 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2031.33,2032.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2032.40,2034.11 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2037.4,2051.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2051.15,2052.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2052.38,2054.6 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2056.4,2057.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2057.27,2058.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2065.2,2066.28 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2066.28,2068.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2072.2,2072.71 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2072.71,2080.30 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2080.30,2081.41 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2081.41,2087.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2089.3,2089.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2089.13,2090.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2090.31,2095.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2095.25,2097.38 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2097.38,2099.7 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2101.5,2101.81 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2112.2,2112.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2112.38,2115.27 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2115.27,2117.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2121.3,2138.30 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2138.30,2140.11 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2140.11,2141.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2143.4,2160.15 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2160.15,2161.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2161.39,2163.6 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2165.4,2165.46 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2167.3,2173.24 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2173.24,2175.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2176.3,2176.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2179.2,2179.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2180.15,2182.24 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2182.24,2184.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2185.3,2185.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2187.18,2199.30 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2199.30,2201.11 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2201.11,2202.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2204.4,2208.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2208.15,2209.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2209.39,2211.6 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2213.4,2213.35 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2215.3,2216.24 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2216.24,2218.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2219.3,2219.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2220.10,2221.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2221.22,2223.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2224.3,2226.27 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2226.27,2228.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2228.20,2230.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2231.4,2233.26 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2233.26,2235.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2236.4,2237.23 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2237.23,2239.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2240.4,2240.46 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2240.46,2244.5 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2245.4,2245.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2247.3,2247.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2252.94,2254.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2254.16,2256.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2258.2,2260.18 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2260.18,2261.59 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2261.59,2262.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2262.36,2264.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2264.10,2266.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2270.2,2270.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2270.13,2272.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2273.2,2273.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2273.50,2275.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2277.2,2277.98 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2281.98,2282.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2282.26,2284.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2286.2,2287.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2287.16,2289.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2291.2,2292.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2292.13,2294.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2297.2,2298.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2298.19,2299.51 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2299.51,2301.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2302.3,2302.55 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2304.2,2304.42 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2304.42,2306.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2308.2,2308.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2308.54,2309.48 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2309.48,2311.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2312.3,2312.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2316.2,2318.53 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:17.82,19.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:21.149,22.55 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:22.55,24.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:25.2,25.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:25.36,27.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:28.2,34.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:34.16,36.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:37.2,37.42 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:37.42,39.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:40.2,40.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:43.105,44.48 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:44.48,46.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:47.2,48.54 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:51.129,53.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:53.16,55.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:56.2,57.53 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:57.53,59.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:60.2,61.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:61.25,63.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:64.2,65.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:65.16,67.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:68.2,68.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:26.97,27.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:27.18,29.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:30.2,30.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:33.37,35.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:37.81,38.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:38.44,40.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:41.2,41.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:41.38,43.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:44.2,44.57 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:47.88,48.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:48.32,50.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:51.2,52.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:52.20,54.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:55.2,55.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:58.40,72.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:74.106,75.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:75.34,77.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:78.2,79.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:79.16,81.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:83.2,84.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:84.16,86.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:88.2,89.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:89.13,91.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:93.2,94.63 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:94.63,96.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:98.2,98.72 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:98.72,100.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:102.2,106.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:109.117,110.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:110.32,112.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:113.2,113.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:113.34,115.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:117.2,118.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:118.16,120.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:121.2,121.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:121.19,123.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:125.2,126.69 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:126.69,128.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:130.2,136.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:18.33,20.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:22.27,37.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:39.93,40.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:40.30,42.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:43.2,43.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:43.28,45.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:46.2,47.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:47.16,49.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:51.2,52.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:52.17,54.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:55.2,56.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:56.19,58.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:59.2,59.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:59.19,61.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:62.2,63.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:63.16,65.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:67.2,74.9 3 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:74.9,76.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:77.2,78.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:78.15,80.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:81.2,85.16 4 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:85.16,87.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:88.2,88.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:88.17,90.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:92.2,101.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:104.48,105.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:105.16,107.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:108.2,109.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:109.29,111.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:112.2,112.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:112.31,114.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:115.2,115.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:118.75,120.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:120.27,121.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:121.32,123.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:123.17,124.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:126.4,126.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:129.2,134.33 3 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:134.33,136.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:137.2,137.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:137.40,138.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:138.39,140.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:141.3,141.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:143.2,143.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:143.34,145.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:146.2,147.35 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:147.35,149.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:150.2,150.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:153.77,154.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:154.20,156.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:157.2,159.31 3 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:159.31,160.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:160.33,162.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:163.3,163.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:163.30,165.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:167.2,170.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:23.91,25.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:27.38,50.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:52.104,53.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:53.38,55.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:56.2,57.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:57.16,59.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:61.2,62.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:62.26,64.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:65.2,66.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:66.30,68.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:69.2,69.72 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:69.72,71.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:73.2,74.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:74.16,76.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:77.2,78.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:78.16,80.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:81.2,82.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:82.16,84.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:85.2,86.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:86.16,88.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:90.2,105.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:105.16,107.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:109.2,109.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:109.19,117.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:118.2,118.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:118.25,120.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:121.2,121.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:121.30,123.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:124.2,124.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:124.31,126.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:127.2,128.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:128.16,130.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:131.2,131.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:134.91,136.9 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:136.9,138.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:139.2,140.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:140.15,141.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:141.19,143.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:144.3,144.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:146.2,146.94 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:149.59,150.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:150.16,152.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:153.2,154.61 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:154.61,156.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:157.2,157.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:160.56,161.75 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:161.75,163.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:164.2,164.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:167.67,169.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:170.17,171.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:172.67,173.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:174.10,175.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:179.60,180.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:180.16,182.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:183.2,184.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:184.25,186.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:187.2,187.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:190.57,191.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:192.15,193.81 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:193.81,195.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:196.3,196.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:197.19,199.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:199.17,201.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:202.3,202.55 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:202.55,204.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:205.3,205.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:206.14,207.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:208.11,209.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:210.10,211.41 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:215.59,216.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:216.16,218.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:219.2,219.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:220.12,221.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:222.14,223.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:224.10,225.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:28.90,30.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:30.16,32.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:34.2,36.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:37.16,38.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:40.16,42.140 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:44.20,46.140 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:48.17,50.142 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:52.17,56.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:56.50,62.63 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:62.63,64.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:66.4,66.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:66.45,68.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:72.4,74.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:74.25,76.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:77.4,77.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:80.3,80.101 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:82.18,84.141 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:86.18,88.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:88.18,90.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:91.3,91.41 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:93.17,96.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:96.50,99.59 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:99.59,101.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:102.4,104.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:104.25,106.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:107.4,107.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:110.3,110.98 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:112.10,116.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:125.86,126.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:126.16,128.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:129.2,130.9 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:130.9,132.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:133.2,133.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:133.22,135.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:137.2,139.31 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:139.31,141.10 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:141.10,143.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:144.3,145.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:145.22,147.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:148.3,149.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:149.26,151.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:152.3,152.68 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:152.68,154.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:155.3,156.37 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:156.37,158.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:159.3,160.107 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:162.2,162.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:165.249,166.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:166.24,168.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:169.2,169.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:169.38,171.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:173.2,174.31 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:174.31,175.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:175.32,177.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:180.2,181.34 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:181.34,182.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:182.29,183.9 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:185.3,197.17 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:197.17,199.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:200.3,200.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:200.20,201.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:203.3,203.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:203.37,205.33 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:205.33,206.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:208.4,208.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:208.19,209.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:209.43,210.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:212.5,212.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:214.4,215.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:215.30,216.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:220.2,220.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:223.113,229.2 5 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:231.101,233.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:247.92,251.16 4 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:251.16,253.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:253.8,253.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:253.24,255.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:259.2,272.51 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:272.51,274.38 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:274.38,275.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:276.50,277.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:278.12,279.107 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:287.2,292.26 5 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:292.26,294.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:297.2,297.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:297.19,301.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:303.2,311.42 5 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:311.42,315.3 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:316.2,341.64 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:341.64,342.86 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:342.86,344.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:345.3,345.56 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:345.56,347.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:348.3,360.19 6 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:360.19,364.4 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:365.3,365.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:369.2,370.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:370.15,372.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:372.27,374.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:375.3,375.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:375.27,377.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:380.2,381.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:381.15,387.28 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:387.28,395.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:395.18,397.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:398.4,398.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:398.23,399.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:401.4,401.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:401.30,402.66 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:402.66,403.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:405.5,406.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:406.12,407.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:409.5,409.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:409.28,413.6 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:414.5,415.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:415.30,416.11 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:419.4,420.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:420.30,421.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:424.8,432.28 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:432.28,438.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:438.18,440.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:441.4,441.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:441.23,442.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:444.4,444.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:444.30,445.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:445.40,447.31 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:447.31,448.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:452.4,455.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:455.30,456.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:461.2,465.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:465.17,467.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:469.2,470.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:470.16,472.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:473.2,473.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:20.79,21.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:21.43,23.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:24.2,24.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:24.29,26.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:27.2,27.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:30.40,63.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:65.68,71.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:71.25,74.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:75.2,75.67 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:78.62,83.19 3 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:83.19,87.3 3 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:88.2,88.89 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:91.101,92.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:92.22,94.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:95.2,96.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:96.18,98.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:99.2,100.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:100.16,102.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:103.2,104.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:104.16,106.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:107.2,107.119 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:110.99,111.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:111.22,113.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:114.2,115.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:115.18,117.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:118.2,119.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:119.16,121.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:122.2,122.51 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:122.51,124.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:125.2,126.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:126.16,128.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:129.2,131.15 3 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:131.15,132.69 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:132.69,134.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:135.3,135.58 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:137.2,137.130 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:140.102,142.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:142.16,144.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:145.2,145.64 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:145.64,147.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:148.2,148.113 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:151.109,153.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:153.16,155.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:156.2,157.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:157.16,159.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:160.2,161.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:161.16,163.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:164.2,164.67 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:167.107,169.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:169.16,171.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:172.2,173.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:173.16,175.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:176.2,176.107 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:176.107,178.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:179.2,179.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:180.41,181.63 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:182.41,183.95 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:184.10,185.83 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:189.111,191.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:191.16,193.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:194.2,195.57 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:195.57,197.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:198.2,199.23 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:199.23,201.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:202.2,203.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:203.16,205.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:206.2,206.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:206.17,208.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:209.2,209.108 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:212.63,215.2 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:217.69,219.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:219.16,221.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:222.2,222.79 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:225.60,227.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:227.16,229.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:230.2,230.57 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:233.137,234.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:234.49,236.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:237.2,238.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:238.16,240.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:241.2,243.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:243.16,245.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:246.2,247.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:247.16,249.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:250.2,250.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:250.22,252.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:253.2,253.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:256.142,258.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:258.16,260.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:261.2,262.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:262.16,264.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:265.2,265.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:265.47,267.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:268.2,269.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:269.16,270.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:270.50,272.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:273.3,273.89 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:275.2,275.173 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:278.157,280.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:280.16,282.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:283.2,283.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:283.47,285.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:286.2,287.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:287.16,288.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:288.50,290.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:291.3,291.89 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:293.2,293.169 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:296.104,297.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:297.22,299.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:300.2,301.61 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:301.61,303.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:303.20,304.9 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:307.2,307.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:307.19,309.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:310.2,317.8 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:320.119,322.39 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:322.39,323.81 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:323.81,325.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:327.2,327.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:330.71,332.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:332.16,334.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:335.2,335.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:17.61,105.23 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:105.23,122.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:123.2,123.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:126.104,127.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:127.61,129.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:130.2,130.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:130.38,132.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:133.2,134.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:134.16,136.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:137.2,138.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:138.16,140.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:141.2,147.107 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:147.107,149.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:150.2,151.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:151.16,153.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:154.2,170.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:170.19,172.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:173.2,173.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:176.103,177.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:177.61,179.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:180.2,180.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:180.38,182.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:183.2,184.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:184.16,186.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:187.2,191.106 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:191.106,193.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:194.2,195.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:195.16,197.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:198.2,200.31 3 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:200.31,207.36 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:207.36,218.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:219.3,220.35 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:222.2,230.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:233.107,234.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:234.61,236.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:237.2,237.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:237.38,239.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:240.2,241.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:241.16,243.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:244.2,248.110 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:248.110,250.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:251.2,252.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:252.16,254.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:255.2,256.33 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:256.33,266.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:267.2,275.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:278.108,279.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:279.61,281.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:282.2,282.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:282.37,284.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:285.2,286.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:286.16,288.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:289.2,290.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:290.19,292.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:293.2,293.104 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:293.104,295.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:296.2,297.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:297.16,299.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:300.2,307.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:307.16,309.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:310.2,311.43 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:311.43,318.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:319.2,332.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:332.22,334.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:335.2,335.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:338.108,339.62 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:339.62,341.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:342.2,342.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:342.38,344.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:345.2,346.9 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:346.9,348.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:349.2,350.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:350.16,352.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:353.2,357.16 5 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:357.16,359.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:360.2,370.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:373.109,374.62 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:374.62,376.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:377.2,377.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:377.38,379.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:380.2,381.9 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:381.9,383.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:384.2,385.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:385.16,387.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:388.2,390.32 3 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:390.32,392.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:393.2,394.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:394.16,396.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:397.2,403.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:406.106,407.62 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:407.62,409.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:410.2,410.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:410.38,412.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:413.2,414.9 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:414.9,416.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:417.2,418.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:418.16,420.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:421.2,423.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:423.16,424.41 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:424.41,434.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:435.3,435.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:437.2,445.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:483.65,484.42 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:484.42,485.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:485.39,487.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:489.2,489.85 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:489.85,491.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:492.2,492.95 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:495.102,496.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:496.38,498.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:499.2,499.58 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:499.58,501.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:502.2,502.90 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:505.60,508.2 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:510.66,512.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:512.26,514.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:515.2,515.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:518.69,521.33 3 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:521.33,523.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:523.21,524.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:526.3,526.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:526.34,527.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:529.3,530.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:532.2,532.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:535.63,537.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:537.19,539.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:540.2,541.42 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:541.42,543.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:544.2,544.57 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:544.57,546.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:547.2,547.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:547.54,549.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:550.2,550.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:553.70,557.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:559.66,561.9 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:561.9,563.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:564.2,566.17 3 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:566.17,568.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:569.2,569.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:570.103,572.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:573.34,574.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:575.10,576.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:580.56,581.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:581.37,583.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:584.2,584.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:584.26,586.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:586.37,587.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:589.3,589.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:591.2,591.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:594.90,602.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:604.68,605.71 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:605.71,607.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:607.17,609.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:610.3,610.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:612.2,613.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:613.16,615.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:616.2,617.41 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:617.41,619.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:620.2,620.78 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:623.65,625.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:625.16,627.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:628.2,628.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:628.17,630.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:631.2,631.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:634.51,635.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:635.16,637.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:638.2,638.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:641.56,642.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:642.28,644.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:645.2,646.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:649.92,651.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:651.29,653.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:654.2,654.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:657.86,659.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:659.29,661.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:662.2,662.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:665.94,667.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:667.29,669.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:670.2,670.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:673.98,675.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:675.29,677.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:678.2,678.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:17.93,18.104 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:18.104,20.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:22.2,23.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:23.16,25.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:27.2,28.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:28.19,30.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:32.2,35.33 3 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:35.33,36.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:36.47,39.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:42.2,44.20 3 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:44.20,47.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:48.2,49.68 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:49.68,50.48 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:50.48,52.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:53.3,53.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:53.32,55.23 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:55.23,56.63 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:56.63,58.6 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:59.5,59.53 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:61.4,61.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:64.2,71.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:71.17,73.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:73.8,73.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:73.29,75.36 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:75.36,77.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:78.3,83.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:86.2,86.35 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:86.35,88.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:90.2,97.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:97.16,99.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:101.2,110.28 3 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:110.28,112.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:113.2,124.16 4 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:124.16,126.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:127.2,127.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:133.93,134.35 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:134.35,136.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:138.2,139.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:139.16,141.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:143.2,144.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:144.16,146.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:147.2,147.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:147.17,149.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:151.2,152.33 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:152.33,153.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:153.47,156.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:159.2,160.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:160.16,162.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:164.2,176.26 3 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:176.26,178.23 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:178.23,180.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:181.3,192.5 3 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:195.2,196.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:196.16,198.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:199.2,199.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:22.104,24.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:24.16,26.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:28.2,29.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:29.18,31.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:33.2,33.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:34.13,35.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:36.13,37.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:38.14,39.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:40.16,41.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:42.10,43.95 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:51.67,53.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:57.68,58.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:58.33,60.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:61.2,61.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:67.42,69.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:74.61,76.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:76.26,78.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:79.2,79.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:85.90,86.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:86.49,88.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:90.2,91.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:91.15,93.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:94.2,95.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:95.17,97.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:100.2,103.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:103.16,105.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:107.2,113.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:113.12,115.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:115.18,117.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:118.3,119.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:119.20,121.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:122.3,124.48 3 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:125.8,127.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:129.2,130.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:130.16,132.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:134.2,139.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:145.90,147.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:147.15,149.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:151.2,152.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:152.16,154.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:156.2,157.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:157.16,158.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:158.47,160.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:161.3,161.56 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:164.2,170.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:170.19,173.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:173.8,175.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:176.2,176.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:181.92,183.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:183.16,185.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:187.2,188.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:188.16,190.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:192.2,200.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:200.25,207.28 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:207.28,209.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:210.3,210.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:212.2,212.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:216.93,217.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:217.52,219.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:221.2,222.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:222.15,224.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:226.2,227.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:227.16,229.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:231.2,231.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:231.47,232.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:232.47,234.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:235.3,235.59 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:238.2,241.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:35.127,36.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:36.23,38.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:39.2,40.40 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:40.40,42.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:43.2,43.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:43.37,45.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:46.2,46.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:46.37,48.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:49.2,49.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:52.23,80.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:82.26,140.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:142.92,143.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:143.25,145.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:147.2,148.49 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:148.49,150.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:152.2,152.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:153.17,154.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:154.24,156.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:157.3,158.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:158.17,160.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:161.3,165.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:166.17,167.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:167.22,169.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:170.3,170.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:170.22,172.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:173.3,174.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:174.17,176.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:177.3,181.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:182.16,189.23 7 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:189.23,191.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:192.3,192.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:192.24,194.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:195.3,195.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:195.39,197.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:198.3,207.17 3 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:207.17,209.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:210.3,210.69 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:210.69,212.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:213.3,213.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:214.10,215.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:219.92,220.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:220.25,222.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:224.2,225.49 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:225.49,227.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:229.2,229.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:230.17,232.24 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:232.24,234.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:235.3,236.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:236.17,238.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:239.3,239.59 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:239.59,241.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:242.3,242.81 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:242.81,244.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:245.3,250.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:251.17,253.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:253.22,255.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:256.3,257.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:257.17,259.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:260.3,260.79 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:260.79,262.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:263.3,268.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:269.10,270.66 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:274.91,276.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:276.16,278.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:279.2,279.67 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:279.67,280.76 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:280.76,282.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:285.2,286.52 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:286.52,288.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:289.2,289.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:292.74,294.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:294.16,296.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:297.2,297.62 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:297.62,299.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:300.2,300.68 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:303.109,304.56 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:304.56,306.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:307.2,307.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:307.25,309.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:310.2,310.81 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:310.81,312.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:313.2,313.102 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:313.102,315.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:316.2,316.108 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:316.108,318.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:319.2,319.99 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:319.99,321.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:322.2,322.99 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:322.99,324.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:325.2,325.60 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:325.60,327.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:328.2,328.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:328.34,330.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:331.2,331.114 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:331.114,333.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:334.2,334.66 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:334.66,336.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:337.2,337.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:337.40,339.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:340.2,340.132 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:340.132,342.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:343.2,343.35 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:343.35,345.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:346.2,346.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:349.92,350.103 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:350.103,352.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:354.2,355.52 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:355.52,357.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:358.2,358.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:358.32,360.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:361.2,361.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:364.108,365.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:365.19,367.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:368.2,369.53 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:369.53,371.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:372.2,372.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:372.19,374.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:375.2,375.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:375.39,376.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:376.34,378.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:380.2,380.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:383.66,385.53 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:385.53,387.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:388.2,388.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:388.19,390.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:391.2,391.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:10.101,12.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:12.16,14.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:16.2,18.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:19.16,20.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:21.14,22.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:23.15,24.84 1 0 +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:25.16,26.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:27.10,28.97 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:21.75,23.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:25.41,28.2 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:30.31,37.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:39.38,46.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:48.50,56.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:58.43,70.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:72.80,73.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:73.36,75.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:76.2,76.48 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:76.48,78.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:79.2,79.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:82.97,84.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:84.16,86.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:87.2,88.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:88.16,90.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:91.2,92.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:92.16,94.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:95.2,96.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:96.16,98.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:99.2,99.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:102.104,104.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:104.16,106.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:107.2,108.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:108.16,110.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:111.2,112.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:112.16,114.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:115.2,116.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:116.16,118.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:119.2,119.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:122.96,124.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:124.16,126.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:127.2,128.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:128.19,130.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:131.2,132.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:132.18,134.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:135.2,141.79 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:141.79,143.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:143.17,145.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:146.3,146.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:148.2,148.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:151.77,153.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:153.16,155.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:156.2,157.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:157.19,159.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:160.2,160.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:10.101,12.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:12.16,14.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:16.2,17.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:17.18,19.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:21.2,21.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:22.15,23.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:24.13,25.42 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:26.14,27.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:28.16,29.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:30.16,31.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:32.10,33.102 1 0 diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-race/repeat-01/create-database.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-race/repeat-01/create-database.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-race/repeat-01/create-database.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-race/repeat-01/create-database.stdout.log new file mode 100644 index 00000000..4b15bd57 --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-race/repeat-01/create-database.stdout.log @@ -0,0 +1 @@ +CREATE DATABASE diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-race/repeat-01/create-pgvector.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-race/repeat-01/create-pgvector.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-race/repeat-01/create-pgvector.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-race/repeat-01/create-pgvector.stdout.log new file mode 100644 index 00000000..d26bad14 --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-race/repeat-01/create-pgvector.stdout.log @@ -0,0 +1 @@ +CREATE EXTENSION diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-race/repeat-01/database-identity.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-race/repeat-01/database-identity.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-race/repeat-01/database-identity.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-race/repeat-01/database-identity.stdout.log new file mode 100644 index 00000000..c5d2870d --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-race/repeat-01/database-identity.stdout.log @@ -0,0 +1 @@ +{"database" : "engram_prc_rg_test_72927a85c2e0d9a3_r1", "schema" : "public", "server_version" : "17.10 (Debian 17.10-1.pgdg12+1)", "user" : "engram"} diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-race/repeat-01/go-test-summary.json b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-race/repeat-01/go-test-summary.json new file mode 100644 index 00000000..ba118af4 --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-race/repeat-01/go-test-summary.json @@ -0,0 +1,40 @@ +{ + "schema_version": 1, + "verdict": "PASS", + "input_path": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-race\\repeat-01\\go-test.stdout.jsonl", + "fail_on_unexpected_skip": true, + "allowed_skip_identities": [], + "counts": { + "packages": 1, + "tests": 1, + "passed": 1, + "failed": 0, + "skipped": 0, + "no_tests": 0, + "zero_tests": 0, + "incomplete": 0, + "unexpected_skips": 0, + "malformed_lines": 0 + }, + "packages": [ + { + "package": "github.com/thebtf/engram/internal/mcp", + "outcome": "pass", + "elapsed_seconds": 5.025, + "last_output": "ok \tgithub.com/thebtf/engram/internal/mcp\t5.016s\tcoverage: 0.1% of statements", + "tests_observed": 1 + } + ], + "tests": [ + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestEC_F1_TagDerivedBackfill_T007", + "outcome": "pass", + "elapsed_seconds": 3.87, + "last_output": "--- PASS: TestEC_F1_TagDerivedBackfill_T007 (3.87s)", + "skip_allowed": false + } + ], + "unexpected_skips": [], + "errors": [] +} diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-race/repeat-01/go-test.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-race/repeat-01/go-test.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-race/repeat-01/go-test.stdout.jsonl b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-race/repeat-01/go-test.stdout.jsonl new file mode 100644 index 00000000..31b358e8 --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-race/repeat-01/go-test.stdout.jsonl @@ -0,0 +1,16 @@ +{"Time":"2026-07-11T03:54:47.0855978+03:00","Action":"start","Package":"github.com/thebtf/engram/internal/mcp"} +{"Time":"2026-07-11T03:54:47.1578451+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007"} +{"Time":"2026-07-11T03:54:47.1578451+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":"=== RUN TestEC_F1_TagDerivedBackfill_T007\n"} +{"Time":"2026-07-11T03:54:48.0606+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":"{\"level\":\"warn\",\"error\":\"ERROR: relation \\\"observation_vectors\\\" does not exist (SQLSTATE 42P01)\",\"time\":\"2026-07-11T03:54:48+03:00\",\"message\":\"migration 040: orphan vector cleanup failed (non-fatal)\"}\n"} +{"Time":"2026-07-11T03:54:48.0606+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":"{\"level\":\"info\",\"garbage_deleted\":0,\"orphan_vectors_deleted\":0,\"time\":\"2026-07-11T03:54:48+03:00\",\"message\":\"migration 040: garbage cleanup complete\"}\n"} +{"Time":"2026-07-11T03:54:48.0691283+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":"{\"level\":\"info\",\"orphan_vectors_deleted\":0,\"time\":\"2026-07-11T03:54:48+03:00\",\"message\":\"migration 041: orphan vector purge complete\"}\n"} +{"Time":"2026-07-11T03:54:48.0776322+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":"{\"level\":\"info\",\"patterns_deleted\":0,\"time\":\"2026-07-11T03:54:48+03:00\",\"message\":\"migration 042: low-quality pattern purge complete\"}\n"} +{"Time":"2026-07-11T03:54:48.1124034+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":"{\"level\":\"info\",\"total_deleted\":0,\"time\":\"2026-07-11T03:54:48+03:00\",\"message\":\"migration 043: radical observation cleanup complete\"}\n"} +{"Time":"2026-07-11T03:54:49.3896699+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":"{\"level\":\"warn\",\"error\":\"ERROR: extension \\\"vectorscale\\\" is not available (SQLSTATE 0A000)\",\"time\":\"2026-07-11T03:54:49+03:00\",\"message\":\"migration 109: vectorscale extension not available, skipping DiskANN index\"}\n"} +{"Time":"2026-07-11T03:54:50.6247146+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":"{\"level\":\"debug\",\"connections\":1,\"time\":\"2026-07-11T03:54:50+03:00\",\"message\":\"Connection pool warmed\"}\n"} +{"Time":"2026-07-11T03:54:51.0251171+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":"--- PASS: TestEC_F1_TagDerivedBackfill_T007 (3.87s)\n"} +{"Time":"2026-07-11T03:54:51.0251171+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Elapsed":3.87} +{"Time":"2026-07-11T03:54:51.0251171+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Output":"PASS\n"} +{"Time":"2026-07-11T03:54:51.0436746+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Output":"coverage: 0.1% of statements\n"} +{"Time":"2026-07-11T03:54:52.1107721+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Output":"ok \tgithub.com/thebtf/engram/internal/mcp\t5.016s\tcoverage: 0.1% of statements\n"} +{"Time":"2026-07-11T03:54:52.1107721+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Elapsed":5.025} diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-race/repeat-01/pg-stat-activity-after.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-race/repeat-01/pg-stat-activity-after.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-race/repeat-01/pg-stat-activity-after.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-race/repeat-01/pg-stat-activity-after.stdout.log new file mode 100644 index 00000000..fe51488c --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-race/repeat-01/pg-stat-activity-after.stdout.log @@ -0,0 +1 @@ +[] diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-race/repeat-01/pg-stat-activity-before.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-race/repeat-01/pg-stat-activity-before.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-race/repeat-01/pg-stat-activity-before.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-race/repeat-01/pg-stat-activity-before.stdout.log new file mode 100644 index 00000000..fe51488c --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-race/repeat-01/pg-stat-activity-before.stdout.log @@ -0,0 +1 @@ +[] diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-race/repeat-01/repeat-summary.json b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-race/repeat-01/repeat-summary.json new file mode 100644 index 00000000..8db41de2 --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-race/repeat-01/repeat-summary.json @@ -0,0 +1,33 @@ +{ + "repeat": 1, + "verdict": "PASS", + "database": "engram_prc_rg_test_72927a85c2e0d9a3_r1", + "schema": "public", + "database_schema_identity": "engram_prc_rg_test_72927a85c2e0d9a3_r1.public", + "database_dsn": "REDACTED_DATABASE_DSN", + "database_create_confirmed": true, + "sequential_execution": { + "package_parallelism": 1, + "test_parallelism": 1 + }, + "race": true, + "connection_budget": 20, + "server_sessions_before": 6, + "server_sessions_after": 6, + "sessions_before": 0, + "sessions_after": 0, + "go_test_exit": 0, + "json_parser_exit": 0, + "coverage_policy": "Targeted", + "coverage_exit": 0, + "cleanup_exit": 0, + "cleanup_status": "PASS", + "required_session_start_execution": { + "schema_version": 1, + "verdict": "NOT_APPLICABLE", + "reason": "only an unfiltered canonical ./... run requires the 12-test session-start execution proof" + }, + "cleanup_summary": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-race\\repeat-01\\cleanup\\cleanup.json", + "errors": [], + "artifact_directory": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-race\\repeat-01" +} diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-race/repeat-01/server-connection-count-after.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-race/repeat-01/server-connection-count-after.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-race/repeat-01/server-connection-count-after.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-race/repeat-01/server-connection-count-after.stdout.log new file mode 100644 index 00000000..1e8b3149 --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-race/repeat-01/server-connection-count-after.stdout.log @@ -0,0 +1 @@ +6 diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-race/repeat-01/server-connection-count-before.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-race/repeat-01/server-connection-count-before.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-race/repeat-01/server-connection-count-before.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-race/repeat-01/server-connection-count-before.stdout.log new file mode 100644 index 00000000..1e8b3149 --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-race/repeat-01/server-connection-count-before.stdout.log @@ -0,0 +1 @@ +6 diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-race/repeat-01/targeted-coverage.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-race/repeat-01/targeted-coverage.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-race/repeat-01/targeted-coverage.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-race/repeat-01/targeted-coverage.stdout.log new file mode 100644 index 00000000..c958686c --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-race/repeat-01/targeted-coverage.stdout.log @@ -0,0 +1,352 @@ +github.com/thebtf/engram/internal/mcp/audit_helpers.go:33: effectiveAuditWriter 0.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:44: isAuditEnabled 0.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:52: runAuditAsync 0.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:77: marshalState 0.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:92: logAuditCreate 0.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:117: logAuditEdit 0.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:142: logAuditDelete 0.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:166: logAuditGeneric 0.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:189: logAuditSupersede 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:30: parseArgs 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:46: coerceString 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:67: coerceInt 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:97: coerceInt64 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:127: coerceFloat64 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:151: coerceBool 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:177: coerceStringSlice 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:204: coerceInt64Slice 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:222: clampToInt 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:236: clampInt64ToInt 0.0% +github.com/thebtf/engram/internal/mcp/context.go:17: extractProjectFromHeader 0.0% +github.com/thebtf/engram/internal/mcp/context.go:22: contextWithProject 0.0% +github.com/thebtf/engram/internal/mcp/context.go:29: ContextWithProject 0.0% +github.com/thebtf/engram/internal/mcp/context.go:35: projectFromContext 0.0% +github.com/thebtf/engram/internal/mcp/context.go:41: contextWithSession 0.0% +github.com/thebtf/engram/internal/mcp/context.go:48: ContextWithSession 0.0% +github.com/thebtf/engram/internal/mcp/context.go:54: sessionFromContext 0.0% +github.com/thebtf/engram/internal/mcp/context.go:61: actorFromContext 0.0% +github.com/thebtf/engram/internal/mcp/health.go:22: NewMCPHealth 0.0% +github.com/thebtf/engram/internal/mcp/health.go:29: RecordRequest 0.0% +github.com/thebtf/engram/internal/mcp/health.go:36: RecordError 0.0% +github.com/thebtf/engram/internal/mcp/health.go:42: rotateWindowIfNeeded 0.0% +github.com/thebtf/engram/internal/mcp/health.go:55: HandleHealth 0.0% +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:28: ruleGovernanceCaptureEnabled 0.0% +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:39: captureActiveRuleIntent 0.0% +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:104: ruleIntentFingerprint 0.0% +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:113: marshalRuleCandidateIntentResponse 0.0% +github.com/thebtf/engram/internal/mcp/server.go:127: NewServer 100.0% +github.com/thebtf/engram/internal/mcp/server.go:141: SetBackfillStatusFunc 0.0% +github.com/thebtf/engram/internal/mcp/server.go:146: SetVersionedDocumentStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:151: SetIssueStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:156: SetMemoryStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:161: SetMetaMemoryIndex 0.0% +github.com/thebtf/engram/internal/mcp/server.go:166: SetHintQueue 0.0% +github.com/thebtf/engram/internal/mcp/server.go:171: SetStateStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:176: SetDirectiveCaptureService 0.0% +github.com/thebtf/engram/internal/mcp/server.go:181: SetBehavioralRulesStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:186: SetRuleGovernanceStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:191: SetRuleInjectionTelemetryStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:195: SetPromotionStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:199: SetGraphStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:204: SetNodesStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:211: SetAuditStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:216: SetPurgeStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:222: SetCandidateStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:228: SetSnapshotStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:234: SetBulkFacade 0.0% +github.com/thebtf/engram/internal/mcp/server.go:240: setTestAuditWriter 0.0% +github.com/thebtf/engram/internal/mcp/server.go:246: setTestMemoryEditor 0.0% +github.com/thebtf/engram/internal/mcp/server.go:252: setTestMemorySignificanceUpdater 0.0% +github.com/thebtf/engram/internal/mcp/server.go:260: SetWriteLintOrchestrator 0.0% +github.com/thebtf/engram/internal/mcp/server.go:269: SetRedactionRules 0.0% +github.com/thebtf/engram/internal/mcp/server.go:274: SetEmbeddingStores 0.0% +github.com/thebtf/engram/internal/mcp/server.go:282: SetRerankClient 0.0% +github.com/thebtf/engram/internal/mcp/server.go:290: SetStatsDB 0.0% +github.com/thebtf/engram/internal/mcp/server.go:297: HandleRequest 0.0% +github.com/thebtf/engram/internal/mcp/server.go:303: ListTools 0.0% +github.com/thebtf/engram/internal/mcp/server.go:332: Version 0.0% +github.com/thebtf/engram/internal/mcp/server.go:383: Run 0.0% +github.com/thebtf/engram/internal/mcp/server.go:427: handleRequest 0.0% +github.com/thebtf/engram/internal/mcp/server.go:461: handleNotification 0.0% +github.com/thebtf/engram/internal/mcp/server.go:473: handleInitialize 0.0% +github.com/thebtf/engram/internal/mcp/server.go:496: buildInstructions 0.0% +github.com/thebtf/engram/internal/mcp/server.go:660: storeMemoryTool 0.0% +github.com/thebtf/engram/internal/mcp/server.go:712: recallMemoryTool 0.0% +github.com/thebtf/engram/internal/mcp/server.go:805: primaryTools 0.0% +github.com/thebtf/engram/internal/mcp/server.go:942: handleToolsList 0.0% +github.com/thebtf/engram/internal/mcp/server.go:1612: handleToolsCall 0.0% +github.com/thebtf/engram/internal/mcp/server.go:1644: sanitizeToolCallArgs 0.0% +github.com/thebtf/engram/internal/mcp/server.go:1656: callTool 0.0% +github.com/thebtf/engram/internal/mcp/server.go:1874: sendResponse 0.0% +github.com/thebtf/engram/internal/mcp/server.go:1884: sendError 0.0% +github.com/thebtf/engram/internal/mcp/server.go:1896: handleFindSimilarObservations 0.0% +github.com/thebtf/engram/internal/mcp/server.go:1927: handleGetMemoryStats 0.0% +github.com/thebtf/engram/internal/mcp/server.go:2055: handleBackfillStatus 0.0% +github.com/thebtf/engram/internal/mcp/server.go:2071: handleCheckSystemHealth 0.0% +github.com/thebtf/engram/internal/mcp/server.go:2216: handleAnalyzeSearchPatterns 0.0% +github.com/thebtf/engram/internal/mcp/server.go:2246: handleSearchSessions 0.0% +github.com/thebtf/engram/internal/mcp/server.go:2251: handleListSessions 0.0% +github.com/thebtf/engram/internal/mcp/tools_admin.go:18: buildAdminTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_admin.go:68: adminActionsForEnv 33.3% +github.com/thebtf/engram/internal/mcp/tools_admin.go:80: vnextEnabled 0.0% +github.com/thebtf/engram/internal/mcp/tools_admin.go:84: handleAdmin 0.0% +github.com/thebtf/engram/internal/mcp/tools_admin.go:120: handlePurgeProject 0.0% +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:27: ambientHintsEnabledFromEnv 0.0% +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:32: ambientHintsTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:48: handleGetAmbientHints 0.0% +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:86: normalizeAmbientHintsToolLimit 0.0% +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:96: ambientHintItems 0.0% +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:114: errMissingSessionID 0.0% +github.com/thebtf/engram/internal/mcp/tools_brief.go:31: handleGetMemoryBrief 0.0% +github.com/thebtf/engram/internal/mcp/tools_brief.go:107: memoryBriefUsesPrincipalScope 0.0% +github.com/thebtf/engram/internal/mcp/tools_brief.go:115: handlePrincipalMemoryBrief 0.0% +github.com/thebtf/engram/internal/mcp/tools_brief.go:259: truncateBriefContent 0.0% +github.com/thebtf/engram/internal/mcp/tools_brief.go:270: filterInjectionByScope 0.0% +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:25: bulkOpsTools 0.0% +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:95: handleBulkPromote 0.0% +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:154: handleBulkDelete 0.0% +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:211: handleBulkSupersede 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:31: candidateItemFromDomain 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:51: newCandidateReviewSnapshot 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:59: requireCandidateReviewSnapshot 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:68: candidateTools 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:165: handleListCandidates 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:208: handleGetCandidate 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:239: handlePromoteCandidate 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:348: handleRejectCandidate 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:402: handleSupersedeCandidate 0.0% +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:34: codeIntelEnabled 0.0% +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:42: SetCodeChunkStore 0.0% +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:48: codebaseSearchTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:79: codebaseStatusTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:100: handleCodebaseSearch 0.0% +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:194: handleCodebaseStatus 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:21: getVault 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:35: credentialStore 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:49: handleStoreCredential 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:130: handleGetCredential 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:192: handleListCredentials 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:243: handleDeleteCredential 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:302: handleVaultStatus 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:338: expandTagHierarchy 0.0% +github.com/thebtf/engram/internal/mcp/tools_directives.go:16: directivesCaptureEnabledFromEnv 0.0% +github.com/thebtf/engram/internal/mcp/tools_directives.go:20: rememberDirectiveTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_directives.go:38: currentDirectiveCaptureService 0.0% +github.com/thebtf/engram/internal/mcp/tools_directives.go:48: handleRememberDirective 0.0% +github.com/thebtf/engram/internal/mcp/tools_directives.go:72: parseRememberDirectiveArgs 0.0% +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:10: handleDocsConsolidated 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents.go:15: handleListCollections 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents.go:61: handleListDocuments 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents.go:121: handleGetDocument 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents.go:165: handleRemoveDocument 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents.go:197: handleIngestDocument 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents.go:235: handleSearchCollection 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:15: handleDocCreate 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:61: handleDocRead 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:117: handleDocUpdate 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:122: handleDocList 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:175: handleDocHistory 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:232: handleDocComment 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:19: SetExperienceProvider 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:23: experienceHistoryTools 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:40: experienceHistoryReadSchema 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:65: experienceHistoryDetailSchema 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:82: experienceHistoryTriggerEnum 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:91: handleExperienceHistoryRead 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:103: handleExperienceHistoryDetail 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:115: parseExperienceHistoryReadArgs 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:142: parseExperienceHistoryDetailArgs 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:157: experienceHistoryTriggersFromArgs 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:180: marshalExperienceHistory 0.0% +github.com/thebtf/engram/internal/mcp/tools_feedback.go:12: handleFeedbackConsolidated 0.0% +github.com/thebtf/engram/internal/mcp/tools_feedback.go:36: handleSetSessionOutcome 0.0% +github.com/thebtf/engram/internal/mcp/tools_governance.go:27: governanceTools 0.0% +github.com/thebtf/engram/internal/mcp/tools_governance.go:98: handleListSnapshots 0.0% +github.com/thebtf/engram/internal/mcp/tools_governance.go:167: handleRollbackSnapshot 0.0% +github.com/thebtf/engram/internal/mcp/tools_governance.go:215: handlePinSnapshot 0.0% +github.com/thebtf/engram/internal/mcp/tools_governance.go:258: handleRedactionRulesStatus 0.0% +github.com/thebtf/engram/internal/mcp/tools_governance.go:284: resolveGovernanceActor 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:64: handleGraph 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:100: graphAddEdge 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:216: mcpGraphEndpointExists 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:243: mcpGraphEdgeAlreadyExists 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:276: graphAddNode 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:317: graphRemoveEdge 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:332: graphGetEdges 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:397: filterEdgesByNodeType 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:457: graphTraverse 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:480: graphFindPath 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:502: graphSynonyms 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:23: graphCreateEdgeWithGuards 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:80: graphEndpointExistsWithGuards 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:114: graphDuplicateEdgeExists 0.0% +github.com/thebtf/engram/internal/mcp/tools_ingest.go:25: handleIngest 0.0% +github.com/thebtf/engram/internal/mcp/tools_ingest.go:43: ingestDocument 0.0% +github.com/thebtf/engram/internal/mcp/tools_instincts.go:20: handleImportInstincts 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:19: issuesToolSchema 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:109: validateIssueActionParams 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:143: handleIssues 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:189: resolveSourceProject 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:205: handleIssueCreate 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:250: handleIssueList 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:311: handleIssueGet 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:344: handleIssueUpdate 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:382: handleIssueComment 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:408: handleIssueReopen 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:425: handleIssueClose 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:22: handleLifecycle 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:48: lifecycleInfo 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:87: lifecyclePromote 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:118: lifecycleDemote 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:149: lifecycleSetConfidence 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:172: lifecycleSetDefeasibility 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:191: lifecycleSleepStatus 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:197: lifecycleDecayPreview 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:233: marshalJSON 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:35: vnextFEnabled 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:42: isValidPrivacyScope 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:54: derivePrivacyScopeFromLegacy 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:82: deriveLegacyScopeFromPrivacy 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:93: applyPrincipalMemoryMetadata 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:135: addPrincipalMemoryFields 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:161: newScopedWriteLintMemoryStore 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:172: writeLintVisibilityCaller 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:186: writeLintVisibilityOptions 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:192: scopedWriteLintMemoryStore 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:202: filterVisibleWriteGateCandidates 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:214: domainManageAllowed 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:218: List 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:272: writeLintVisibilityFetchLimit 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:286: Get 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:297: Create 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:301: Update 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:305: MarkSuperseded 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:319: effectiveMemoryEditor 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:329: isValidStoreObservationType 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:354: handleStoreMemory 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1111: handleEditMemory 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1218: computeTTLDays 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1258: truncateTitle 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1270: keepRecallMemory 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1280: keepRecallMemoryFilters 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1342: handleRecallMemory 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1690: staleAdvisory 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1700: marshalWithStaleAdvisory 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1727: Rank 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1751: handleRecallMemoryHybrid 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:2252: handleRateMemory 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:2281: handleSuppressMemory 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:17: SetDomainRegistryService 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:21: checkDomainWriteMCP 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:43: addDomainWriteDecisionFields 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:51: marshalStoreMemoryAugmented 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:26: newMemoryStoreSignificanceUpdater 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:33: s6OutcomeEnabledFromEnv 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:37: effectiveMemorySignificanceUpdater 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:47: currentMemorySignificanceUpdater 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:58: rateMemorySignificanceTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:74: handleRateMemorySignificance 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:109: RateMemorySignificance 0.0% +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:18: s2MetaMemoryEnabled 0.0% +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:22: knowAboutTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:39: handleKnowAbout 0.0% +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:104: parseKnowAboutLimit 0.0% +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:118: summarizeMetaIndexTags 0.0% +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:153: summarizeMetaIndexDateRange 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:23: SetPrincipalMemoryQueryService 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:27: principalMemoryQueryTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:52: handleQueryPrincipalMemory 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:134: principalMemoryQueryCaller 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:149: parsePrincipalMemoryQueryLimit 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:160: principalMemoryQueryText 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:167: parsePrincipalMemoryQueryVisibility 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:179: parsePrincipalMemoryQueryOffset 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:190: parsePrincipalMemoryQueryInt 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:215: parsePrincipalMemoryQueryBool 0.0% +github.com/thebtf/engram/internal/mcp/tools_recall.go:28: handleRecall 0.0% +github.com/thebtf/engram/internal/mcp/tools_recall.go:125: parseRecallIncludedPrincipals 0.0% +github.com/thebtf/engram/internal/mcp/tools_recall.go:165: appendRecallIncludedPrincipalMemories 0.0% +github.com/thebtf/engram/internal/mcp/tools_recall.go:223: recallIncludeTargetMatchesCaller 0.0% +github.com/thebtf/engram/internal/mcp/tools_recall.go:231: recallPrincipalQueryItemToMemory 0.0% +github.com/thebtf/engram/internal/mcp/tools_recall.go:247: handleRecallSearch 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:20: currentReviewLoopCandidateLister 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:30: reviewLoopCandidateTools 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:65: reviewLoopReadSchema 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:78: reviewPacketIDSchema 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:91: handleReviewMetricsRead 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:110: handleReviewQueueRead 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:140: handleReviewPacketDetail 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:151: handleReviewPacketPreviewAction 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:167: handleReviewPacketApplyAction 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:189: parseReviewLoopReadArgs 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:212: reviewLoopMCPPacketTypeSupported 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:217: reviewLoopActionFromArgs 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:225: reviewLoopReasonFromArgs 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:233: loadReviewPacketCandidate 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:256: applyReviewPacketPreserve 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:278: applyReviewPacketSuppress 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:296: reviewLoopMemoryFromCandidate 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:320: filterRiskyMCPReviewCandidates 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:330: marshalReviewLoop 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:17: ruleGovernanceReadTools 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:126: handleRuleGovernanceHealth 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:176: handleRuleGovernanceQueue 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:233: handleRuleGovernanceSnapshots 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:278: handleRuleGovernanceUsefulness 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:338: handleRuleGovernanceTransition 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:373: handleRuleGovernancePinSnapshot 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:406: handleRuleGovernanceRollback 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:483: requireRuleGovernanceReadAccess 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:495: requireRuleGovernanceProjectOrAdmin 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:505: ruleGovernanceCallerIsAdmin 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:510: requireRuleGovernanceAdminAccess 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:518: redactRuleGovernanceEvidenceHandles 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:535: redactRuleGovernanceEvidenceHandle 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:553: ruleGovernanceEvidenceHandleHasSensitiveText 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:559: isCanonicalRuleGovernanceEvidenceHandle 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:580: isSafeRuleGovernanceEvidenceID 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:594: parseRuleGovernanceTransitionRequest 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:604: parseRuleGovernanceSince 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:623: boundedRuleGovernanceLimit 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:634: formatRuleGovernanceTime 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:641: formatRuleGovernanceTimePtr 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:649: stringRuleCandidateStatusCounts 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:657: stringRuleVersionStateCounts 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:665: stringRuleArbiterRunStatusCounts 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:673: stringRuleInjectionEventTypeCounts 0.0% +github.com/thebtf/engram/internal/mcp/tools_rules.go:17: handleStoreRule 0.0% +github.com/thebtf/engram/internal/mcp/tools_rules.go:133: handleListRules 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:22: handleSettingsConsolidated 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:51: SetSettingsStore 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:57: settingsStore 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:67: isSecretSettingKey 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:74: requireAdmin 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:85: handleSetSetting 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:145: handleGetSetting 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:181: handleListSettings 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:216: handleDeleteSetting 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:35: resumeScopesFromFields 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:52: stateTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:82: setStateTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:142: handleGetState 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:219: handleSetState 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:274: decodeSessionStateForWrite 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:292: validateSessionStateBudget 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:303: validateNativeResumePacket 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:349: decodeProjectStateForWrite 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:364: requireStateObject 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:383: requireNestedObject 0.0% +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:10: handleStoreConsolidated 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:21: SetTemporalTruthProvider 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:25: temporalTruthEnabledFromEnv 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:30: temporalTruthTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:39: temporalTruthRefreshTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:48: temporalTruthRefreshSchema 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:58: temporalTruthSchema 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:72: currentTemporalTruthProvider 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:82: handleTemporalTruth 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:102: handleTemporalTruthRefresh 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:122: parseTemporalTruthArgs 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:151: parseTemporalTruthRefreshProject 0.0% +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:10: handleVaultConsolidated 0.0% +total: (statements) 0.1% diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-race/summary.json b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-race/summary.json new file mode 100644 index 00000000..786b157f --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-race/summary.json @@ -0,0 +1,64 @@ +{ + "schema_version": 1, + "gate": "release-gates-foundation", + "run_id": "focused-race", + "started_at": "2026-07-11T00:54:31.4101236+00:00", + "finished_at": "2026-07-11T00:54:57.5497572+00:00", + "duration_seconds": 26.14, + "verdict": "PASS", + "counts": { + "requested_repeats": 1, + "completed_repeats": 1, + "passed_repeats": 1, + "failed_repeats": 0, + "child_commands": 16, + "nonzero_child_commands": 0 + }, + "packages": [ + "./internal/mcp" + ], + "run_pattern": "^TestEC_F1_TagDerivedBackfill_T007$", + "coverage_policy": "Targeted", + "connection_budget": 20, + "race": true, + "database_dsn": "REDACTED_DATABASE_DSN", + "environment": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-race\\environment.json", + "commands": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-race\\commands.json", + "repeats": [ + { + "repeat": 1, + "verdict": "PASS", + "database": "engram_prc_rg_test_72927a85c2e0d9a3_r1", + "schema": "public", + "database_schema_identity": "engram_prc_rg_test_72927a85c2e0d9a3_r1.public", + "database_dsn": "REDACTED_DATABASE_DSN", + "database_create_confirmed": true, + "sequential_execution": { + "package_parallelism": 1, + "test_parallelism": 1 + }, + "race": true, + "connection_budget": 20, + "server_sessions_before": 6, + "server_sessions_after": 6, + "sessions_before": 0, + "sessions_after": 0, + "go_test_exit": 0, + "json_parser_exit": 0, + "coverage_policy": "Targeted", + "coverage_exit": 0, + "cleanup_exit": 0, + "cleanup_status": "PASS", + "required_session_start_execution": { + "schema_version": 1, + "verdict": "NOT_APPLICABLE", + "reason": "only an unfiltered canonical ./... run requires the 12-test session-start execution proof" + }, + "cleanup_summary": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-race\\repeat-01\\cleanup\\cleanup.json", + "errors": [], + "artifact_directory": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-race\\repeat-01" + } + ], + "errors": [], + "artifact_directory": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-race" +} diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/commands.json b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/commands.json new file mode 100644 index 00000000..149cd0bc --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/commands.json @@ -0,0 +1,1198 @@ +[ + { + "name": "go-version", + "executable": "C:\\Program Files\\Go\\bin\\go.exe", + "arguments": [ + "version" + ], + "environment_keys": [], + "command": "C:\\Program Files\\Go\\bin\\go.exe version", + "started_at": "2026-07-11T00:53:21.3705087+00:00", + "finished_at": "2026-07-11T00:53:21.5802375+00:00", + "duration_seconds": 0.21, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-repeat3\\go-version.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-repeat3\\go-version.stderr.log" + }, + { + "name": "postgres-container-identity", + "executable": "docker", + "arguments": [ + "inspect", + "--format", + "{{.Name}}|{{.Config.Image}}|{{.Image}}|{{.State.Running}}", + "engram-prc-postgres" + ], + "environment_keys": [], + "command": "docker inspect --format {{.Name}}|{{.Config.Image}}|{{.Image}}|{{.State.Running}} engram-prc-postgres", + "started_at": "2026-07-11T00:53:21.6344064+00:00", + "finished_at": "2026-07-11T00:53:21.9155525+00:00", + "duration_seconds": 0.281, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-repeat3\\postgres-container-identity.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-repeat3\\postgres-container-identity.stderr.log" + }, + { + "name": "postgres-server-identity", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT json_build_object('server_version', current_setting('server_version'), 'server_version_num', current_setting('server_version_num'), 'version', version(), 'max_connections', current_setting('max_connections'), 'superuser_reserved_connections', current_setting('superuser_reserved_connections'), 'reserved_connections', COALESCE(NULLIF(current_setting('reserved_connections', true), ''), '0'), 'current_connections', (SELECT count(*)::text FROM pg_stat_activity), 'database', current_database(), 'schema', current_schema(), 'user', current_user)::text;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT json_build_object('server_version', current_setting('server_version'), 'server_version_num', current_setting('server_version_num'), 'version', version(), 'max_connections', current_setting('max_connections'), 'superuser_reserved_connections', current_setting('superuser_reserved_connections'), 'reserved_connections', COALESCE(NULLIF(current_setting('reserved_connections', true), ''), '0'), 'current_connections', (SELECT count(*)::text FROM pg_stat_activity), 'database', current_database(), 'schema', current_schema(), 'user', current_user)::text;", + "started_at": "2026-07-11T00:53:21.9285696+00:00", + "finished_at": "2026-07-11T00:53:22.2977492+00:00", + "duration_seconds": 0.369, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-repeat3\\postgres-server-identity.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-repeat3\\postgres-server-identity.stderr.log" + }, + { + "name": "repeat-1-create-database", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "CREATE DATABASE \"engram_prc_rg_test_08822acc1e43ac35_r1\" OWNER \"engram\";" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c CREATE DATABASE \"engram_prc_rg_test_08822acc1e43ac35_r1\" OWNER \"engram\";", + "started_at": "2026-07-11T00:53:22.3287542+00:00", + "finished_at": "2026-07-11T00:53:22.7296959+00:00", + "duration_seconds": 0.401, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-repeat3\\repeat-01\\create-database.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-repeat3\\repeat-01\\create-database.stderr.log" + }, + { + "name": "repeat-1-create-pgvector", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "engram_prc_rg_test_08822acc1e43ac35_r1", + "-At", + "-F", + "|", + "-c", + "CREATE EXTENSION IF NOT EXISTS vector WITH SCHEMA public;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d engram_prc_rg_test_08822acc1e43ac35_r1 -At -F | -c CREATE EXTENSION IF NOT EXISTS vector WITH SCHEMA public;", + "started_at": "2026-07-11T00:53:22.7342396+00:00", + "finished_at": "2026-07-11T00:53:23.0800737+00:00", + "duration_seconds": 0.346, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-repeat3\\repeat-01\\create-pgvector.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-repeat3\\repeat-01\\create-pgvector.stderr.log" + }, + { + "name": "repeat-1-database-identity", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "engram_prc_rg_test_08822acc1e43ac35_r1", + "-At", + "-F", + "|", + "-c", + "SELECT json_build_object('database', current_database(), 'schema', current_schema(), 'server_version', current_setting('server_version'), 'user', current_user)::text;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d engram_prc_rg_test_08822acc1e43ac35_r1 -At -F | -c SELECT json_build_object('database', current_database(), 'schema', current_schema(), 'server_version', current_setting('server_version'), 'user', current_user)::text;", + "started_at": "2026-07-11T00:53:23.0828665+00:00", + "finished_at": "2026-07-11T00:53:23.5366592+00:00", + "duration_seconds": 0.454, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-repeat3\\repeat-01\\database-identity.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-repeat3\\repeat-01\\database-identity.stderr.log" + }, + { + "name": "repeat-1-pg-stat-before", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT COALESCE(json_agg(row_to_json(s)), '[]'::json)::text FROM (SELECT pid, usename, datname, state, backend_type, application_name, client_addr::text AS client_addr, wait_event_type, wait_event, query_start FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_08822acc1e43ac35_r1' ORDER BY pid) AS s;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT COALESCE(json_agg(row_to_json(s)), '[]'::json)::text FROM (SELECT pid, usename, datname, state, backend_type, application_name, client_addr::text AS client_addr, wait_event_type, wait_event, query_start FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_08822acc1e43ac35_r1' ORDER BY pid) AS s;", + "started_at": "2026-07-11T00:53:23.5415121+00:00", + "finished_at": "2026-07-11T00:53:23.9183304+00:00", + "duration_seconds": 0.377, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-repeat3\\repeat-01\\pg-stat-activity-before.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-repeat3\\repeat-01\\pg-stat-activity-before.stderr.log" + }, + { + "name": "repeat-1-server-connection-count-before", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT count(*) FROM pg_stat_activity;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT count(*) FROM pg_stat_activity;", + "started_at": "2026-07-11T00:53:23.9205808+00:00", + "finished_at": "2026-07-11T00:53:24.2797603+00:00", + "duration_seconds": 0.359, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-repeat3\\repeat-01\\server-connection-count-before.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-repeat3\\repeat-01\\server-connection-count-before.stderr.log" + }, + { + "name": "repeat-1-connection-count-before", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT count(*) FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_08822acc1e43ac35_r1';" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT count(*) FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_08822acc1e43ac35_r1';", + "started_at": "2026-07-11T00:53:24.2902078+00:00", + "finished_at": "2026-07-11T00:53:24.6625136+00:00", + "duration_seconds": 0.372, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-repeat3\\repeat-01\\connection-count-before.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-repeat3\\repeat-01\\connection-count-before.stderr.log" + }, + { + "name": "repeat-1-go-test", + "executable": "C:\\Program Files\\Go\\bin\\go.exe", + "arguments": [ + "test", + "-json", + "-p", + "1", + "-parallel", + "1", + "-count=1", + "-timeout", + "30m", + "-covermode=atomic", + "-coverprofile=.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-repeat3\\repeat-01\\coverage.out", + "-run", + "^TestEC_F1_TagDerivedBackfill_T007$", + "./internal/mcp" + ], + "environment_keys": [ + "DATABASE_DSN", + "DATABASE_MAX_CONNS", + "ENGRAM_RELEASE_GATE_REPEAT", + "ENGRAM_RELEASE_GATE_RUN_ID", + "ENGRAM_TEST_DSN", + "TEST_DATABASE_DSN" + ], + "command": "C:\\Program Files\\Go\\bin\\go.exe test -json -p 1 -parallel 1 -count=1 -timeout 30m -covermode=atomic -coverprofile=.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-repeat3\\repeat-01\\coverage.out -run ^TestEC_F1_TagDerivedBackfill_T007$ ./internal/mcp", + "started_at": "2026-07-11T00:53:24.6697360+00:00", + "finished_at": "2026-07-11T00:53:35.9901804+00:00", + "duration_seconds": 11.32, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-repeat3\\repeat-01\\go-test.stdout.jsonl", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-repeat3\\repeat-01\\go-test.stderr.log" + }, + { + "name": "repeat-1-assert-go-test-json", + "executable": "C:\\Program Files\\PowerShell\\7\\pwsh.exe", + "arguments": [ + "-NoProfile", + "-File", + "D:\\Dev\\engram\\.w\\t007-r1-checker\\scripts\\production-gates\\assert-go-test-json.ps1", + "-InputPath", + ".agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-repeat3\\repeat-01\\go-test.stdout.jsonl", + "-SummaryPath", + ".agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-repeat3\\repeat-01\\go-test-summary.json", + "-FailOnUnexpectedSkip" + ], + "environment_keys": [], + "command": "C:\\Program Files\\PowerShell\\7\\pwsh.exe -NoProfile -File D:\\Dev\\engram\\.w\\t007-r1-checker\\scripts\\production-gates\\assert-go-test-json.ps1 -InputPath .agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-repeat3\\repeat-01\\go-test.stdout.jsonl -SummaryPath .agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-repeat3\\repeat-01\\go-test-summary.json -FailOnUnexpectedSkip", + "started_at": "2026-07-11T00:53:35.9958589+00:00", + "finished_at": "2026-07-11T00:53:36.6901388+00:00", + "duration_seconds": 0.694, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-repeat3\\repeat-01\\assert-go-test-json.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-repeat3\\repeat-01\\assert-go-test-json.stderr.log" + }, + { + "name": "repeat-1-targeted-coverage-report", + "executable": "C:\\Program Files\\Go\\bin\\go.exe", + "arguments": [ + "tool", + "cover", + "-func=.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-repeat3\\repeat-01\\coverage.out" + ], + "environment_keys": [], + "command": "C:\\Program Files\\Go\\bin\\go.exe tool cover -func=.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-repeat3\\repeat-01\\coverage.out", + "started_at": "2026-07-11T00:53:36.6956136+00:00", + "finished_at": "2026-07-11T00:53:37.2680489+00:00", + "duration_seconds": 0.572, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-repeat3\\repeat-01\\targeted-coverage.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-repeat3\\repeat-01\\targeted-coverage.stderr.log" + }, + { + "name": "repeat-1-pg-stat-after", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT COALESCE(json_agg(row_to_json(s)), '[]'::json)::text FROM (SELECT pid, usename, datname, state, backend_type, application_name, client_addr::text AS client_addr, wait_event_type, wait_event, query_start FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_08822acc1e43ac35_r1' ORDER BY pid) AS s;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT COALESCE(json_agg(row_to_json(s)), '[]'::json)::text FROM (SELECT pid, usename, datname, state, backend_type, application_name, client_addr::text AS client_addr, wait_event_type, wait_event, query_start FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_08822acc1e43ac35_r1' ORDER BY pid) AS s;", + "started_at": "2026-07-11T00:53:37.2689127+00:00", + "finished_at": "2026-07-11T00:53:37.6569202+00:00", + "duration_seconds": 0.388, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-repeat3\\repeat-01\\pg-stat-activity-after.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-repeat3\\repeat-01\\pg-stat-activity-after.stderr.log" + }, + { + "name": "repeat-1-server-connection-count-after", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT count(*) FROM pg_stat_activity;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT count(*) FROM pg_stat_activity;", + "started_at": "2026-07-11T00:53:37.6593884+00:00", + "finished_at": "2026-07-11T00:53:38.1031702+00:00", + "duration_seconds": 0.444, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-repeat3\\repeat-01\\server-connection-count-after.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-repeat3\\repeat-01\\server-connection-count-after.stderr.log" + }, + { + "name": "repeat-1-connection-count-after", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT count(*) FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_08822acc1e43ac35_r1';" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT count(*) FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_08822acc1e43ac35_r1';", + "started_at": "2026-07-11T00:53:38.1054013+00:00", + "finished_at": "2026-07-11T00:53:38.5975827+00:00", + "duration_seconds": 0.492, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-repeat3\\repeat-01\\connection-count-after.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-repeat3\\repeat-01\\connection-count-after.stderr.log" + }, + { + "name": "repeat-1-cleanup", + "executable": "C:\\Program Files\\PowerShell\\7\\pwsh.exe", + "arguments": [ + "-NoProfile", + "-File", + "D:\\Dev\\engram\\.w\\t007-r1-checker\\scripts\\production-gates\\cleanup-db-sessions.ps1", + "-DatabaseName", + "engram_prc_rg_test_08822acc1e43ac35_r1", + "-SchemaName", + "public", + "-ArtifactRoot", + ".agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-repeat3\\repeat-01", + "-RunId", + "focused-repeat3-repeat-1", + "-PostgresContainer", + "engram-prc-postgres" + ], + "environment_keys": [ + "ENGRAM_TEST_ADMIN_DSN" + ], + "command": "C:\\Program Files\\PowerShell\\7\\pwsh.exe -NoProfile -File D:\\Dev\\engram\\.w\\t007-r1-checker\\scripts\\production-gates\\cleanup-db-sessions.ps1 -DatabaseName engram_prc_rg_test_08822acc1e43ac35_r1 -SchemaName public -ArtifactRoot .agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-repeat3\\repeat-01 -RunId focused-repeat3-repeat-1 -PostgresContainer engram-prc-postgres", + "started_at": "2026-07-11T00:53:38.6019431+00:00", + "finished_at": "2026-07-11T00:53:41.4996236+00:00", + "duration_seconds": 2.898, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-repeat3\\repeat-01\\cleanup-process.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-repeat3\\repeat-01\\cleanup-process.stderr.log" + }, + { + "name": "repeat-2-create-database", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "CREATE DATABASE \"engram_prc_rg_test_08822acc1e43ac35_r2\" OWNER \"engram\";" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c CREATE DATABASE \"engram_prc_rg_test_08822acc1e43ac35_r2\" OWNER \"engram\";", + "started_at": "2026-07-11T00:53:41.5277867+00:00", + "finished_at": "2026-07-11T00:53:41.9514604+00:00", + "duration_seconds": 0.424, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-repeat3\\repeat-02\\create-database.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-repeat3\\repeat-02\\create-database.stderr.log" + }, + { + "name": "repeat-2-create-pgvector", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "engram_prc_rg_test_08822acc1e43ac35_r2", + "-At", + "-F", + "|", + "-c", + "CREATE EXTENSION IF NOT EXISTS vector WITH SCHEMA public;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d engram_prc_rg_test_08822acc1e43ac35_r2 -At -F | -c CREATE EXTENSION IF NOT EXISTS vector WITH SCHEMA public;", + "started_at": "2026-07-11T00:53:41.9537062+00:00", + "finished_at": "2026-07-11T00:53:42.3549386+00:00", + "duration_seconds": 0.401, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-repeat3\\repeat-02\\create-pgvector.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-repeat3\\repeat-02\\create-pgvector.stderr.log" + }, + { + "name": "repeat-2-database-identity", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "engram_prc_rg_test_08822acc1e43ac35_r2", + "-At", + "-F", + "|", + "-c", + "SELECT json_build_object('database', current_database(), 'schema', current_schema(), 'server_version', current_setting('server_version'), 'user', current_user)::text;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d engram_prc_rg_test_08822acc1e43ac35_r2 -At -F | -c SELECT json_build_object('database', current_database(), 'schema', current_schema(), 'server_version', current_setting('server_version'), 'user', current_user)::text;", + "started_at": "2026-07-11T00:53:42.3571597+00:00", + "finished_at": "2026-07-11T00:53:42.7421099+00:00", + "duration_seconds": 0.385, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-repeat3\\repeat-02\\database-identity.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-repeat3\\repeat-02\\database-identity.stderr.log" + }, + { + "name": "repeat-2-pg-stat-before", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT COALESCE(json_agg(row_to_json(s)), '[]'::json)::text FROM (SELECT pid, usename, datname, state, backend_type, application_name, client_addr::text AS client_addr, wait_event_type, wait_event, query_start FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_08822acc1e43ac35_r2' ORDER BY pid) AS s;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT COALESCE(json_agg(row_to_json(s)), '[]'::json)::text FROM (SELECT pid, usename, datname, state, backend_type, application_name, client_addr::text AS client_addr, wait_event_type, wait_event, query_start FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_08822acc1e43ac35_r2' ORDER BY pid) AS s;", + "started_at": "2026-07-11T00:53:42.7441754+00:00", + "finished_at": "2026-07-11T00:53:43.1074088+00:00", + "duration_seconds": 0.363, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-repeat3\\repeat-02\\pg-stat-activity-before.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-repeat3\\repeat-02\\pg-stat-activity-before.stderr.log" + }, + { + "name": "repeat-2-server-connection-count-before", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT count(*) FROM pg_stat_activity;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT count(*) FROM pg_stat_activity;", + "started_at": "2026-07-11T00:53:43.1095256+00:00", + "finished_at": "2026-07-11T00:53:43.6153357+00:00", + "duration_seconds": 0.506, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-repeat3\\repeat-02\\server-connection-count-before.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-repeat3\\repeat-02\\server-connection-count-before.stderr.log" + }, + { + "name": "repeat-2-connection-count-before", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT count(*) FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_08822acc1e43ac35_r2';" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT count(*) FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_08822acc1e43ac35_r2';", + "started_at": "2026-07-11T00:53:43.6175389+00:00", + "finished_at": "2026-07-11T00:53:43.9780955+00:00", + "duration_seconds": 0.361, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-repeat3\\repeat-02\\connection-count-before.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-repeat3\\repeat-02\\connection-count-before.stderr.log" + }, + { + "name": "repeat-2-go-test", + "executable": "C:\\Program Files\\Go\\bin\\go.exe", + "arguments": [ + "test", + "-json", + "-p", + "1", + "-parallel", + "1", + "-count=1", + "-timeout", + "30m", + "-covermode=atomic", + "-coverprofile=.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-repeat3\\repeat-02\\coverage.out", + "-run", + "^TestEC_F1_TagDerivedBackfill_T007$", + "./internal/mcp" + ], + "environment_keys": [ + "DATABASE_DSN", + "DATABASE_MAX_CONNS", + "ENGRAM_RELEASE_GATE_REPEAT", + "ENGRAM_RELEASE_GATE_RUN_ID", + "ENGRAM_TEST_DSN", + "TEST_DATABASE_DSN" + ], + "command": "C:\\Program Files\\Go\\bin\\go.exe test -json -p 1 -parallel 1 -count=1 -timeout 30m -covermode=atomic -coverprofile=.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-repeat3\\repeat-02\\coverage.out -run ^TestEC_F1_TagDerivedBackfill_T007$ ./internal/mcp", + "started_at": "2026-07-11T00:53:43.9802973+00:00", + "finished_at": "2026-07-11T00:53:49.6439349+00:00", + "duration_seconds": 5.664, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-repeat3\\repeat-02\\go-test.stdout.jsonl", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-repeat3\\repeat-02\\go-test.stderr.log" + }, + { + "name": "repeat-2-assert-go-test-json", + "executable": "C:\\Program Files\\PowerShell\\7\\pwsh.exe", + "arguments": [ + "-NoProfile", + "-File", + "D:\\Dev\\engram\\.w\\t007-r1-checker\\scripts\\production-gates\\assert-go-test-json.ps1", + "-InputPath", + ".agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-repeat3\\repeat-02\\go-test.stdout.jsonl", + "-SummaryPath", + ".agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-repeat3\\repeat-02\\go-test-summary.json", + "-FailOnUnexpectedSkip" + ], + "environment_keys": [], + "command": "C:\\Program Files\\PowerShell\\7\\pwsh.exe -NoProfile -File D:\\Dev\\engram\\.w\\t007-r1-checker\\scripts\\production-gates\\assert-go-test-json.ps1 -InputPath .agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-repeat3\\repeat-02\\go-test.stdout.jsonl -SummaryPath .agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-repeat3\\repeat-02\\go-test-summary.json -FailOnUnexpectedSkip", + "started_at": "2026-07-11T00:53:49.6462890+00:00", + "finished_at": "2026-07-11T00:53:50.3595131+00:00", + "duration_seconds": 0.713, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-repeat3\\repeat-02\\assert-go-test-json.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-repeat3\\repeat-02\\assert-go-test-json.stderr.log" + }, + { + "name": "repeat-2-targeted-coverage-report", + "executable": "C:\\Program Files\\Go\\bin\\go.exe", + "arguments": [ + "tool", + "cover", + "-func=.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-repeat3\\repeat-02\\coverage.out" + ], + "environment_keys": [], + "command": "C:\\Program Files\\Go\\bin\\go.exe tool cover -func=.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-repeat3\\repeat-02\\coverage.out", + "started_at": "2026-07-11T00:53:50.3614808+00:00", + "finished_at": "2026-07-11T00:53:50.8163935+00:00", + "duration_seconds": 0.455, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-repeat3\\repeat-02\\targeted-coverage.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-repeat3\\repeat-02\\targeted-coverage.stderr.log" + }, + { + "name": "repeat-2-pg-stat-after", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT COALESCE(json_agg(row_to_json(s)), '[]'::json)::text FROM (SELECT pid, usename, datname, state, backend_type, application_name, client_addr::text AS client_addr, wait_event_type, wait_event, query_start FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_08822acc1e43ac35_r2' ORDER BY pid) AS s;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT COALESCE(json_agg(row_to_json(s)), '[]'::json)::text FROM (SELECT pid, usename, datname, state, backend_type, application_name, client_addr::text AS client_addr, wait_event_type, wait_event, query_start FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_08822acc1e43ac35_r2' ORDER BY pid) AS s;", + "started_at": "2026-07-11T00:53:50.8172567+00:00", + "finished_at": "2026-07-11T00:53:51.1774502+00:00", + "duration_seconds": 0.36, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-repeat3\\repeat-02\\pg-stat-activity-after.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-repeat3\\repeat-02\\pg-stat-activity-after.stderr.log" + }, + { + "name": "repeat-2-server-connection-count-after", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT count(*) FROM pg_stat_activity;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT count(*) FROM pg_stat_activity;", + "started_at": "2026-07-11T00:53:51.1794210+00:00", + "finished_at": "2026-07-11T00:53:51.5778474+00:00", + "duration_seconds": 0.398, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-repeat3\\repeat-02\\server-connection-count-after.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-repeat3\\repeat-02\\server-connection-count-after.stderr.log" + }, + { + "name": "repeat-2-connection-count-after", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT count(*) FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_08822acc1e43ac35_r2';" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT count(*) FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_08822acc1e43ac35_r2';", + "started_at": "2026-07-11T00:53:51.5797920+00:00", + "finished_at": "2026-07-11T00:53:51.9535324+00:00", + "duration_seconds": 0.374, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-repeat3\\repeat-02\\connection-count-after.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-repeat3\\repeat-02\\connection-count-after.stderr.log" + }, + { + "name": "repeat-2-cleanup", + "executable": "C:\\Program Files\\PowerShell\\7\\pwsh.exe", + "arguments": [ + "-NoProfile", + "-File", + "D:\\Dev\\engram\\.w\\t007-r1-checker\\scripts\\production-gates\\cleanup-db-sessions.ps1", + "-DatabaseName", + "engram_prc_rg_test_08822acc1e43ac35_r2", + "-SchemaName", + "public", + "-ArtifactRoot", + ".agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-repeat3\\repeat-02", + "-RunId", + "focused-repeat3-repeat-2", + "-PostgresContainer", + "engram-prc-postgres" + ], + "environment_keys": [ + "ENGRAM_TEST_ADMIN_DSN" + ], + "command": "C:\\Program Files\\PowerShell\\7\\pwsh.exe -NoProfile -File D:\\Dev\\engram\\.w\\t007-r1-checker\\scripts\\production-gates\\cleanup-db-sessions.ps1 -DatabaseName engram_prc_rg_test_08822acc1e43ac35_r2 -SchemaName public -ArtifactRoot .agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-repeat3\\repeat-02 -RunId focused-repeat3-repeat-2 -PostgresContainer engram-prc-postgres", + "started_at": "2026-07-11T00:53:51.9555891+00:00", + "finished_at": "2026-07-11T00:53:56.5065618+00:00", + "duration_seconds": 4.551, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-repeat3\\repeat-02\\cleanup-process.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-repeat3\\repeat-02\\cleanup-process.stderr.log" + }, + { + "name": "repeat-3-create-database", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "CREATE DATABASE \"engram_prc_rg_test_08822acc1e43ac35_r3\" OWNER \"engram\";" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c CREATE DATABASE \"engram_prc_rg_test_08822acc1e43ac35_r3\" OWNER \"engram\";", + "started_at": "2026-07-11T00:53:56.5146815+00:00", + "finished_at": "2026-07-11T00:53:57.2437889+00:00", + "duration_seconds": 0.729, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-repeat3\\repeat-03\\create-database.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-repeat3\\repeat-03\\create-database.stderr.log" + }, + { + "name": "repeat-3-create-pgvector", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "engram_prc_rg_test_08822acc1e43ac35_r3", + "-At", + "-F", + "|", + "-c", + "CREATE EXTENSION IF NOT EXISTS vector WITH SCHEMA public;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d engram_prc_rg_test_08822acc1e43ac35_r3 -At -F | -c CREATE EXTENSION IF NOT EXISTS vector WITH SCHEMA public;", + "started_at": "2026-07-11T00:53:57.2461288+00:00", + "finished_at": "2026-07-11T00:53:58.1866045+00:00", + "duration_seconds": 0.94, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-repeat3\\repeat-03\\create-pgvector.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-repeat3\\repeat-03\\create-pgvector.stderr.log" + }, + { + "name": "repeat-3-database-identity", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "engram_prc_rg_test_08822acc1e43ac35_r3", + "-At", + "-F", + "|", + "-c", + "SELECT json_build_object('database', current_database(), 'schema', current_schema(), 'server_version', current_setting('server_version'), 'user', current_user)::text;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d engram_prc_rg_test_08822acc1e43ac35_r3 -At -F | -c SELECT json_build_object('database', current_database(), 'schema', current_schema(), 'server_version', current_setting('server_version'), 'user', current_user)::text;", + "started_at": "2026-07-11T00:53:58.1887954+00:00", + "finished_at": "2026-07-11T00:53:59.2643132+00:00", + "duration_seconds": 1.076, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-repeat3\\repeat-03\\database-identity.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-repeat3\\repeat-03\\database-identity.stderr.log" + }, + { + "name": "repeat-3-pg-stat-before", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT COALESCE(json_agg(row_to_json(s)), '[]'::json)::text FROM (SELECT pid, usename, datname, state, backend_type, application_name, client_addr::text AS client_addr, wait_event_type, wait_event, query_start FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_08822acc1e43ac35_r3' ORDER BY pid) AS s;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT COALESCE(json_agg(row_to_json(s)), '[]'::json)::text FROM (SELECT pid, usename, datname, state, backend_type, application_name, client_addr::text AS client_addr, wait_event_type, wait_event, query_start FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_08822acc1e43ac35_r3' ORDER BY pid) AS s;", + "started_at": "2026-07-11T00:53:59.2666952+00:00", + "finished_at": "2026-07-11T00:54:01.4744700+00:00", + "duration_seconds": 2.208, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-repeat3\\repeat-03\\pg-stat-activity-before.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-repeat3\\repeat-03\\pg-stat-activity-before.stderr.log" + }, + { + "name": "repeat-3-server-connection-count-before", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT count(*) FROM pg_stat_activity;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT count(*) FROM pg_stat_activity;", + "started_at": "2026-07-11T00:54:01.4765746+00:00", + "finished_at": "2026-07-11T00:54:02.7357489+00:00", + "duration_seconds": 1.259, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-repeat3\\repeat-03\\server-connection-count-before.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-repeat3\\repeat-03\\server-connection-count-before.stderr.log" + }, + { + "name": "repeat-3-connection-count-before", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT count(*) FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_08822acc1e43ac35_r3';" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT count(*) FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_08822acc1e43ac35_r3';", + "started_at": "2026-07-11T00:54:02.7377944+00:00", + "finished_at": "2026-07-11T00:54:04.0553258+00:00", + "duration_seconds": 1.318, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-repeat3\\repeat-03\\connection-count-before.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-repeat3\\repeat-03\\connection-count-before.stderr.log" + }, + { + "name": "repeat-3-go-test", + "executable": "C:\\Program Files\\Go\\bin\\go.exe", + "arguments": [ + "test", + "-json", + "-p", + "1", + "-parallel", + "1", + "-count=1", + "-timeout", + "30m", + "-covermode=atomic", + "-coverprofile=.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-repeat3\\repeat-03\\coverage.out", + "-run", + "^TestEC_F1_TagDerivedBackfill_T007$", + "./internal/mcp" + ], + "environment_keys": [ + "DATABASE_DSN", + "DATABASE_MAX_CONNS", + "ENGRAM_RELEASE_GATE_REPEAT", + "ENGRAM_RELEASE_GATE_RUN_ID", + "ENGRAM_TEST_DSN", + "TEST_DATABASE_DSN" + ], + "command": "C:\\Program Files\\Go\\bin\\go.exe test -json -p 1 -parallel 1 -count=1 -timeout 30m -covermode=atomic -coverprofile=.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-repeat3\\repeat-03\\coverage.out -run ^TestEC_F1_TagDerivedBackfill_T007$ ./internal/mcp", + "started_at": "2026-07-11T00:54:04.0580580+00:00", + "finished_at": "2026-07-11T00:54:12.7863210+00:00", + "duration_seconds": 8.728, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-repeat3\\repeat-03\\go-test.stdout.jsonl", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-repeat3\\repeat-03\\go-test.stderr.log" + }, + { + "name": "repeat-3-assert-go-test-json", + "executable": "C:\\Program Files\\PowerShell\\7\\pwsh.exe", + "arguments": [ + "-NoProfile", + "-File", + "D:\\Dev\\engram\\.w\\t007-r1-checker\\scripts\\production-gates\\assert-go-test-json.ps1", + "-InputPath", + ".agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-repeat3\\repeat-03\\go-test.stdout.jsonl", + "-SummaryPath", + ".agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-repeat3\\repeat-03\\go-test-summary.json", + "-FailOnUnexpectedSkip" + ], + "environment_keys": [], + "command": "C:\\Program Files\\PowerShell\\7\\pwsh.exe -NoProfile -File D:\\Dev\\engram\\.w\\t007-r1-checker\\scripts\\production-gates\\assert-go-test-json.ps1 -InputPath .agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-repeat3\\repeat-03\\go-test.stdout.jsonl -SummaryPath .agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-repeat3\\repeat-03\\go-test-summary.json -FailOnUnexpectedSkip", + "started_at": "2026-07-11T00:54:12.7885999+00:00", + "finished_at": "2026-07-11T00:54:13.7721180+00:00", + "duration_seconds": 0.984, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-repeat3\\repeat-03\\assert-go-test-json.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-repeat3\\repeat-03\\assert-go-test-json.stderr.log" + }, + { + "name": "repeat-3-targeted-coverage-report", + "executable": "C:\\Program Files\\Go\\bin\\go.exe", + "arguments": [ + "tool", + "cover", + "-func=.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-repeat3\\repeat-03\\coverage.out" + ], + "environment_keys": [], + "command": "C:\\Program Files\\Go\\bin\\go.exe tool cover -func=.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-repeat3\\repeat-03\\coverage.out", + "started_at": "2026-07-11T00:54:13.7738349+00:00", + "finished_at": "2026-07-11T00:54:14.4347715+00:00", + "duration_seconds": 0.661, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-repeat3\\repeat-03\\targeted-coverage.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-repeat3\\repeat-03\\targeted-coverage.stderr.log" + }, + { + "name": "repeat-3-pg-stat-after", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT COALESCE(json_agg(row_to_json(s)), '[]'::json)::text FROM (SELECT pid, usename, datname, state, backend_type, application_name, client_addr::text AS client_addr, wait_event_type, wait_event, query_start FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_08822acc1e43ac35_r3' ORDER BY pid) AS s;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT COALESCE(json_agg(row_to_json(s)), '[]'::json)::text FROM (SELECT pid, usename, datname, state, backend_type, application_name, client_addr::text AS client_addr, wait_event_type, wait_event, query_start FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_08822acc1e43ac35_r3' ORDER BY pid) AS s;", + "started_at": "2026-07-11T00:54:14.4358950+00:00", + "finished_at": "2026-07-11T00:54:15.0222104+00:00", + "duration_seconds": 0.586, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-repeat3\\repeat-03\\pg-stat-activity-after.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-repeat3\\repeat-03\\pg-stat-activity-after.stderr.log" + }, + { + "name": "repeat-3-server-connection-count-after", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT count(*) FROM pg_stat_activity;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT count(*) FROM pg_stat_activity;", + "started_at": "2026-07-11T00:54:15.0243810+00:00", + "finished_at": "2026-07-11T00:54:15.5831250+00:00", + "duration_seconds": 0.559, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-repeat3\\repeat-03\\server-connection-count-after.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-repeat3\\repeat-03\\server-connection-count-after.stderr.log" + }, + { + "name": "repeat-3-connection-count-after", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT count(*) FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_08822acc1e43ac35_r3';" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT count(*) FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_08822acc1e43ac35_r3';", + "started_at": "2026-07-11T00:54:15.5854045+00:00", + "finished_at": "2026-07-11T00:54:16.0716840+00:00", + "duration_seconds": 0.486, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-repeat3\\repeat-03\\connection-count-after.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-repeat3\\repeat-03\\connection-count-after.stderr.log" + }, + { + "name": "repeat-3-cleanup", + "executable": "C:\\Program Files\\PowerShell\\7\\pwsh.exe", + "arguments": [ + "-NoProfile", + "-File", + "D:\\Dev\\engram\\.w\\t007-r1-checker\\scripts\\production-gates\\cleanup-db-sessions.ps1", + "-DatabaseName", + "engram_prc_rg_test_08822acc1e43ac35_r3", + "-SchemaName", + "public", + "-ArtifactRoot", + ".agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-repeat3\\repeat-03", + "-RunId", + "focused-repeat3-repeat-3", + "-PostgresContainer", + "engram-prc-postgres" + ], + "environment_keys": [ + "ENGRAM_TEST_ADMIN_DSN" + ], + "command": "C:\\Program Files\\PowerShell\\7\\pwsh.exe -NoProfile -File D:\\Dev\\engram\\.w\\t007-r1-checker\\scripts\\production-gates\\cleanup-db-sessions.ps1 -DatabaseName engram_prc_rg_test_08822acc1e43ac35_r3 -SchemaName public -ArtifactRoot .agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-repeat3\\repeat-03 -RunId focused-repeat3-repeat-3 -PostgresContainer engram-prc-postgres", + "started_at": "2026-07-11T00:54:16.0738061+00:00", + "finished_at": "2026-07-11T00:54:19.5424569+00:00", + "duration_seconds": 3.469, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-repeat3\\repeat-03\\cleanup-process.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-repeat3\\repeat-03\\cleanup-process.stderr.log" + } +] diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/environment.json b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/environment.json new file mode 100644 index 00000000..1552012d --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/environment.json @@ -0,0 +1,52 @@ +{ + "schema_version": 1, + "run_id": "focused-repeat3", + "timestamp": "2026-07-11T00:53:21.3539664+00:00", + "go_version": "go version go1.25.11 windows/amd64", + "postgres": { + "declared_image": "pgvector/pgvector:pg17", + "container": { + "name": "/engram-prc-postgres", + "configured_image": "pgvector/pgvector:pg17", + "image_id": "sha256:feb68f4f15446397d8cac7f4fe48fe4586de83160d1fc48b46283312d1a33966", + "running": true + }, + "server": { + "server_version": "17.10 (Debian 17.10-1.pgdg12+1)", + "server_version_num": "170010", + "version": "PostgreSQL 17.10 (Debian 17.10-1.pgdg12+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 12.2.0-14+deb12u1) 12.2.0, 64-bit", + "max_connections": "100", + "superuser_reserved_connections": "3", + "reserved_connections": "0", + "current_connections": "6", + "database": "postgres", + "schema": "public", + "user": "engram" + }, + "admin_dsn": "postgresql://engram:REDACTED@127.0.0.1:55432/postgres?sslmode=disable" + }, + "packages": [ + "./internal/mcp" + ], + "run_pattern": "^TestEC_F1_TagDerivedBackfill_T007$", + "repeat": 3, + "fail_on_unexpected_skip": true, + "allowed_skip_identities": [], + "coverage_policy": "Targeted", + "connection_budget": 20, + "race": false, + "require_session_start_execution": false, + "required_session_start_test_count": 12, + "sequential_execution": { + "go_package_parallelism": 1, + "go_test_parallelism": 1, + "database_max_connections": 20 + }, + "govulncheck_policy": { + "authoritative": [ + "source scan with tests", + "unstripped binary scan" + ], + "non_authoritative": "stripped binary scan (module-level fallback when symbols are absent)" + } +} diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/go-version.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/go-version.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/go-version.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/go-version.stdout.log new file mode 100644 index 00000000..a857be3f --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/go-version.stdout.log @@ -0,0 +1 @@ +go version go1.25.11 windows/amd64 diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/postgres-container-identity.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/postgres-container-identity.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/postgres-container-identity.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/postgres-container-identity.stdout.log new file mode 100644 index 00000000..c110d492 --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/postgres-container-identity.stdout.log @@ -0,0 +1 @@ +/engram-prc-postgres|pgvector/pgvector:pg17|sha256:feb68f4f15446397d8cac7f4fe48fe4586de83160d1fc48b46283312d1a33966|true diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/postgres-server-identity.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/postgres-server-identity.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/postgres-server-identity.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/postgres-server-identity.stdout.log new file mode 100644 index 00000000..2e33d56e --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/postgres-server-identity.stdout.log @@ -0,0 +1 @@ +{"server_version" : "17.10 (Debian 17.10-1.pgdg12+1)", "server_version_num" : "170010", "version" : "PostgreSQL 17.10 (Debian 17.10-1.pgdg12+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 12.2.0-14+deb12u1) 12.2.0, 64-bit", "max_connections" : "100", "superuser_reserved_connections" : "3", "reserved_connections" : "0", "current_connections" : "6", "database" : "postgres", "schema" : "public", "user" : "engram"} diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-01/assert-go-test-json.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-01/assert-go-test-json.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-01/assert-go-test-json.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-01/assert-go-test-json.stdout.log new file mode 100644 index 00000000..a7ff043a --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-01/assert-go-test-json.stdout.log @@ -0,0 +1,2 @@ +go test JSON verdict=PASS packages=1 tests=1 passed=1 failed=0 skipped=0 unexpected_skips=0 malformed=0 +summary=D:\Dev\engram\.w\t007-r1-checker\.agent\reviews\t007-r1-fresh-checker\evidence\focused-repeat3\repeat-01\go-test-summary.json diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-01/cleanup-process.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-01/cleanup-process.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-01/cleanup-process.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-01/cleanup-process.stdout.log new file mode 100644 index 00000000..d6154bde --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-01/cleanup-process.stdout.log @@ -0,0 +1,2 @@ +cleanup verdict=PASS database=engram_prc_rg_test_08822acc1e43ac35_r1 schema=public terminated_sessions=0 remaining_database_count=0 +summary=D:\Dev\engram\.w\t007-r1-checker\.agent\reviews\t007-r1-fresh-checker\evidence\focused-repeat3\repeat-01\cleanup\cleanup.json diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-01/cleanup/cleanup.json b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-01/cleanup/cleanup.json new file mode 100644 index 00000000..91256d87 --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-01/cleanup/cleanup.json @@ -0,0 +1,170 @@ +{ + "schema_version": 1, + "run_id": "focused-repeat3-repeat-1", + "timestamp": "2026-07-11T00:53:41.4154337+00:00", + "verdict": "PASS", + "database": "engram_prc_rg_test_08822acc1e43ac35_r1", + "schema": "public", + "database_schema_identity": "engram_prc_rg_test_08822acc1e43ac35_r1.public", + "admin_dsn": "postgresql://engram:REDACTED@127.0.0.1:55432/postgres?sslmode=disable", + "postgres_container": "engram-prc-postgres", + "cleanup_status": "PASS", + "cleanup_attempted": true, + "database_existed_before": true, + "absence_verified": true, + "terminated_sessions": 0, + "remaining_database_count": 0, + "commands": [ + { + "name": "database-exists-before-cleanup", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT count(*) FROM pg_database WHERE datname = 'engram_prc_rg_test_08822acc1e43ac35_r1';" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT count(*) FROM pg_database WHERE datname = 'engram_prc_rg_test_08822acc1e43ac35_r1';", + "started_at": "2026-07-11T00:53:39.1769796+00:00", + "finished_at": "2026-07-11T00:53:39.5789778+00:00", + "duration_seconds": 0.402, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-repeat3\\repeat-01\\cleanup\\database-exists-before.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-repeat3\\repeat-01\\cleanup\\database-exists-before.stderr.log" + }, + { + "name": "pg-stat-activity-before-cleanup", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT COALESCE(json_agg(row_to_json(s)), '[]'::json)::text FROM (SELECT pid, usename, datname, state, backend_type, application_name, client_addr::text AS client_addr, wait_event_type, wait_event, query_start FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_08822acc1e43ac35_r1' ORDER BY pid) AS s;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT COALESCE(json_agg(row_to_json(s)), '[]'::json)::text FROM (SELECT pid, usename, datname, state, backend_type, application_name, client_addr::text AS client_addr, wait_event_type, wait_event, query_start FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_08822acc1e43ac35_r1' ORDER BY pid) AS s;", + "started_at": "2026-07-11T00:53:39.6455472+00:00", + "finished_at": "2026-07-11T00:53:40.0378972+00:00", + "duration_seconds": 0.392, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-repeat3\\repeat-01\\cleanup\\pg-stat-activity-before.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-repeat3\\repeat-01\\cleanup\\pg-stat-activity-before.stderr.log" + }, + { + "name": "terminate-database-sessions", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT COALESCE(json_agg(row_to_json(s)), '[]'::json)::text FROM (SELECT pid, pg_terminate_backend(pid) AS terminated FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_08822acc1e43ac35_r1' AND pid <> pg_backend_pid() ORDER BY pid) AS s;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT COALESCE(json_agg(row_to_json(s)), '[]'::json)::text FROM (SELECT pid, pg_terminate_backend(pid) AS terminated FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_08822acc1e43ac35_r1' AND pid <> pg_backend_pid() ORDER BY pid) AS s;", + "started_at": "2026-07-11T00:53:40.0419827+00:00", + "finished_at": "2026-07-11T00:53:40.5201712+00:00", + "duration_seconds": 0.478, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-repeat3\\repeat-01\\cleanup\\terminate-sessions.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-repeat3\\repeat-01\\cleanup\\terminate-sessions.stderr.log" + }, + { + "name": "drop-fresh-database", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "DROP DATABASE IF EXISTS \"engram_prc_rg_test_08822acc1e43ac35_r1\" WITH (FORCE);" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c DROP DATABASE IF EXISTS \"engram_prc_rg_test_08822acc1e43ac35_r1\" WITH (FORCE);", + "started_at": "2026-07-11T00:53:40.5289454+00:00", + "finished_at": "2026-07-11T00:53:40.9816184+00:00", + "duration_seconds": 0.453, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-repeat3\\repeat-01\\cleanup\\drop-database.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-repeat3\\repeat-01\\cleanup\\drop-database.stderr.log" + }, + { + "name": "verify-database-absent", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT count(*) FROM pg_database WHERE datname = 'engram_prc_rg_test_08822acc1e43ac35_r1';" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT count(*) FROM pg_database WHERE datname = 'engram_prc_rg_test_08822acc1e43ac35_r1';", + "started_at": "2026-07-11T00:53:40.9854438+00:00", + "finished_at": "2026-07-11T00:53:41.4070180+00:00", + "duration_seconds": 0.422, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-repeat3\\repeat-01\\cleanup\\verify-database-absent.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-repeat3\\repeat-01\\cleanup\\verify-database-absent.stderr.log" + } + ], + "errors": [] +} diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-01/cleanup/database-exists-before.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-01/cleanup/database-exists-before.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-01/cleanup/database-exists-before.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-01/cleanup/database-exists-before.stdout.log new file mode 100644 index 00000000..d00491fd --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-01/cleanup/database-exists-before.stdout.log @@ -0,0 +1 @@ +1 diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-01/cleanup/drop-database.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-01/cleanup/drop-database.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-01/cleanup/drop-database.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-01/cleanup/drop-database.stdout.log new file mode 100644 index 00000000..ca12dce0 --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-01/cleanup/drop-database.stdout.log @@ -0,0 +1 @@ +DROP DATABASE diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-01/cleanup/pg-stat-activity-before.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-01/cleanup/pg-stat-activity-before.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-01/cleanup/pg-stat-activity-before.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-01/cleanup/pg-stat-activity-before.stdout.log new file mode 100644 index 00000000..fe51488c --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-01/cleanup/pg-stat-activity-before.stdout.log @@ -0,0 +1 @@ +[] diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-01/cleanup/terminate-sessions.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-01/cleanup/terminate-sessions.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-01/cleanup/terminate-sessions.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-01/cleanup/terminate-sessions.stdout.log new file mode 100644 index 00000000..fe51488c --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-01/cleanup/terminate-sessions.stdout.log @@ -0,0 +1 @@ +[] diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-01/cleanup/verify-database-absent.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-01/cleanup/verify-database-absent.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-01/cleanup/verify-database-absent.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-01/cleanup/verify-database-absent.stdout.log new file mode 100644 index 00000000..573541ac --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-01/cleanup/verify-database-absent.stdout.log @@ -0,0 +1 @@ +0 diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-01/connection-count-after.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-01/connection-count-after.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-01/connection-count-after.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-01/connection-count-after.stdout.log new file mode 100644 index 00000000..573541ac --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-01/connection-count-after.stdout.log @@ -0,0 +1 @@ +0 diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-01/connection-count-before.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-01/connection-count-before.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-01/connection-count-before.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-01/connection-count-before.stdout.log new file mode 100644 index 00000000..573541ac --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-01/connection-count-before.stdout.log @@ -0,0 +1 @@ +0 diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-01/coverage.out b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-01/coverage.out new file mode 100644 index 00000000..52335d8a --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-01/coverage.out @@ -0,0 +1,3472 @@ +mode: atomic +github.com/thebtf/engram/internal/mcp/audit_helpers.go:33.53,34.30 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:34.30,36.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:37.2,37.25 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:37.25,39.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:40.2,40.12 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:44.28,46.2 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:52.83,53.12 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:53.12,54.16 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:54.16,55.32 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:55.32,61.5 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:63.3,65.33 3 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:65.33,71.4 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:77.54,78.14 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:78.14,80.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:81.2,82.16 2 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:82.16,85.3 2 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:86.2,87.13 2 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:92.91,93.23 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:93.23,95.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:96.2,97.15 2 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:97.15,99.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:100.2,105.65 4 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:105.65,113.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:117.95,118.23 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:118.23,120.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:121.2,122.15 2 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:122.15,124.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:125.2,129.65 5 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:129.65,138.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:142.87,143.23 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:143.23,145.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:146.2,147.15 2 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:147.15,149.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:150.2,153.65 4 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:153.65,161.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:166.96,167.23 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:167.23,169.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:170.2,171.15 2 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:171.15,173.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:174.2,177.63 4 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:177.63,185.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:189.97,190.23 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:190.23,192.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:193.2,194.15 2 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:194.15,196.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:197.2,200.68 4 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:200.68,208.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:30.62,31.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:31.20,33.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:34.2,35.49 2 0 +github.com/thebtf/engram/internal/mcp/coerce.go:35.49,37.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:38.2,38.14 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:38.14,40.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:41.2,41.15 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:46.52,47.14 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:47.14,49.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:50.2,50.23 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:51.14,52.11 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:53.19,54.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:55.15,56.45 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:57.12,58.31 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:59.10,60.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:67.43,68.14 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:68.14,70.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:71.2,71.23 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:72.15,73.23 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:74.19,75.38 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:75.38,77.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:78.3,78.40 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:78.40,80.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:81.3,81.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:82.14,83.56 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:83.56,85.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:86.3,86.54 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:86.54,88.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:89.3,89.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:90.10,91.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:97.49,98.14 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:98.14,100.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:101.2,101.23 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:102.15,103.18 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:104.19,105.38 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:105.38,107.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:108.3,108.40 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:108.40,110.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:111.3,111.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:112.14,113.56 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:113.56,115.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:116.3,116.54 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:116.54,118.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:119.3,119.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:120.10,121.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:127.55,128.14 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:128.14,130.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:131.2,131.23 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:132.15,133.11 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:134.19,135.40 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:135.40,137.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:138.3,138.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:139.14,140.54 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:140.54,142.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:143.3,143.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:144.10,145.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:151.46,152.14 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:152.14,154.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:155.2,155.23 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:156.12,157.11 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:158.14,159.54 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:159.54,161.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:162.3,162.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:163.15,164.16 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:165.19,166.40 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:166.40,168.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:169.3,169.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:170.10,171.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:177.40,178.14 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:178.14,180.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:181.2,181.23 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:182.13,184.26 2 0 +github.com/thebtf/engram/internal/mcp/coerce.go:184.26,185.36 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:185.36,187.5 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:189.3,189.16 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:190.16,191.11 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:192.14,193.14 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:193.14,195.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:196.3,196.13 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:197.10,198.13 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:204.38,205.14 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:205.14,207.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:208.2,209.9 2 0 +github.com/thebtf/engram/internal/mcp/coerce.go:209.9,211.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:212.2,213.27 2 0 +github.com/thebtf/engram/internal/mcp/coerce.go:213.27,214.42 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:214.42,216.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:218.2,218.15 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:222.32,223.39 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:223.39,225.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:226.2,226.30 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:226.30,228.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:229.2,229.30 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:229.30,231.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:232.2,232.15 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:236.35,237.28 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:237.28,239.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:240.2,240.28 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:240.28,242.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:243.2,243.15 1 0 +github.com/thebtf/engram/internal/mcp/context.go:17.55,19.2 1 0 +github.com/thebtf/engram/internal/mcp/context.go:22.78,24.2 1 0 +github.com/thebtf/engram/internal/mcp/context.go:29.78,31.2 1 0 +github.com/thebtf/engram/internal/mcp/context.go:35.53,38.2 2 0 +github.com/thebtf/engram/internal/mcp/context.go:41.80,43.2 1 0 +github.com/thebtf/engram/internal/mcp/context.go:48.80,50.2 1 0 +github.com/thebtf/engram/internal/mcp/context.go:54.53,57.2 2 0 +github.com/thebtf/engram/internal/mcp/context.go:61.51,62.43 1 0 +github.com/thebtf/engram/internal/mcp/context.go:62.43,64.3 1 0 +github.com/thebtf/engram/internal/mcp/context.go:65.2,65.16 1 0 +github.com/thebtf/engram/internal/mcp/health.go:22.32,26.2 3 0 +github.com/thebtf/engram/internal/mcp/health.go:29.37,33.2 3 0 +github.com/thebtf/engram/internal/mcp/health.go:36.35,40.2 3 0 +github.com/thebtf/engram/internal/mcp/health.go:42.44,45.25 3 0 +github.com/thebtf/engram/internal/mcp/health.go:45.25,47.50 1 0 +github.com/thebtf/engram/internal/mcp/health.go:47.50,50.4 2 0 +github.com/thebtf/engram/internal/mcp/health.go:55.74,60.16 5 0 +github.com/thebtf/engram/internal/mcp/health.go:60.16,62.3 1 0 +github.com/thebtf/engram/internal/mcp/health.go:63.2,71.4 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:28.42,29.65 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:29.65,32.3 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:33.2,33.40 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:33.40,35.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:36.2,36.14 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:39.120,40.69 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:40.69,42.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:43.2,44.19 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:44.19,46.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:47.2,48.17 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:48.17,50.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:51.2,52.59 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:52.59,54.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:55.2,56.20 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:56.20,58.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:59.2,60.17 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:60.17,62.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:63.2,64.21 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:64.21,66.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:67.2,68.22 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:68.22,70.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:71.2,72.23 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:72.23,74.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:76.2,98.19 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:98.19,100.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:101.2,101.66 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:104.52,106.29 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:106.29,108.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:109.2,110.46 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:113.113,123.27 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:123.27,125.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:126.2,127.16 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:127.16,129.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:130.2,130.25 1 0 +github.com/thebtf/engram/internal/mcp/server.go:127.44,138.2 1 1 +github.com/thebtf/engram/internal/mcp/server.go:141.64,143.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:146.78,148.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:151.53,153.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:156.55,158.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:161.58,163.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:166.62,168.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:171.50,173.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:176.78,178.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:181.74,183.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:186.71,189.2 2 0 +github.com/thebtf/engram/internal/mcp/server.go:191.85,193.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:195.61,197.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:199.49,201.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:204.54,206.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:211.53,213.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:216.53,218.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:222.61,224.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:228.59,230.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:234.51,236.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:240.52,242.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:246.55,248.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:252.82,254.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:260.70,262.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:269.68,271.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:274.87,277.2 2 0 +github.com/thebtf/engram/internal/mcp/server.go:282.60,284.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:290.45,292.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:297.77,299.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:303.37,313.38 3 0 +github.com/thebtf/engram/internal/mcp/server.go:313.38,315.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:316.2,317.9 2 0 +github.com/thebtf/engram/internal/mcp/server.go:317.9,319.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:320.2,321.9 2 0 +github.com/thebtf/engram/internal/mcp/server.go:321.9,323.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:324.2,325.9 2 0 +github.com/thebtf/engram/internal/mcp/server.go:325.9,327.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:328.2,328.14 1 0 +github.com/thebtf/engram/internal/mcp/server.go:332.35,334.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:383.49,387.12 3 0 +github.com/thebtf/engram/internal/mcp/server.go:387.12,388.22 1 0 +github.com/thebtf/engram/internal/mcp/server.go:388.22,389.11 1 0 +github.com/thebtf/engram/internal/mcp/server.go:390.22,392.11 2 0 +github.com/thebtf/engram/internal/mcp/server.go:393.12,393.12 0 0 +github.com/thebtf/engram/internal/mcp/server.go:396.4,397.18 2 0 +github.com/thebtf/engram/internal/mcp/server.go:397.18,398.13 1 0 +github.com/thebtf/engram/internal/mcp/server.go:401.4,402.61 2 0 +github.com/thebtf/engram/internal/mcp/server.go:402.61,404.13 2 0 +github.com/thebtf/engram/internal/mcp/server.go:407.4,407.55 1 0 +github.com/thebtf/engram/internal/mcp/server.go:407.55,409.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:411.3,411.28 1 0 +github.com/thebtf/engram/internal/mcp/server.go:414.2,414.9 1 0 +github.com/thebtf/engram/internal/mcp/server.go:415.20,416.19 1 0 +github.com/thebtf/engram/internal/mcp/server.go:417.25,418.17 1 0 +github.com/thebtf/engram/internal/mcp/server.go:418.17,420.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:421.3,421.13 1 0 +github.com/thebtf/engram/internal/mcp/server.go:427.77,428.19 1 0 +github.com/thebtf/engram/internal/mcp/server.go:428.19,431.3 2 0 +github.com/thebtf/engram/internal/mcp/server.go:433.2,433.20 1 0 +github.com/thebtf/engram/internal/mcp/server.go:434.20,435.33 1 0 +github.com/thebtf/engram/internal/mcp/server.go:436.20,437.32 1 0 +github.com/thebtf/engram/internal/mcp/server.go:438.20,439.37 1 0 +github.com/thebtf/engram/internal/mcp/server.go:443.24,444.93 1 0 +github.com/thebtf/engram/internal/mcp/server.go:445.34,446.101 1 0 +github.com/thebtf/engram/internal/mcp/server.go:447.22,448.91 1 0 +github.com/thebtf/engram/internal/mcp/server.go:449.29,450.120 1 0 +github.com/thebtf/engram/internal/mcp/server.go:451.10,456.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:461.51,462.20 1 0 +github.com/thebtf/engram/internal/mcp/server.go:463.50,464.70 1 0 +github.com/thebtf/engram/internal/mcp/server.go:465.46,466.79 1 0 +github.com/thebtf/engram/internal/mcp/server.go:467.10,468.80 1 0 +github.com/thebtf/engram/internal/mcp/server.go:473.59,485.63 2 0 +github.com/thebtf/engram/internal/mcp/server.go:485.63,487.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:489.2,493.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:496.45,503.33 3 0 +github.com/thebtf/engram/internal/mcp/server.go:503.33,505.57 2 0 +github.com/thebtf/engram/internal/mcp/server.go:505.57,506.76 1 0 +github.com/thebtf/engram/internal/mcp/server.go:506.76,507.13 1 0 +github.com/thebtf/engram/internal/mcp/server.go:509.4,509.18 1 0 +github.com/thebtf/engram/internal/mcp/server.go:509.18,511.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:511.10,513.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:514.4,518.11 5 0 +github.com/thebtf/engram/internal/mcp/server.go:522.2,522.19 1 0 +github.com/thebtf/engram/internal/mcp/server.go:660.29,683.21 2 0 +github.com/thebtf/engram/internal/mcp/server.go:683.21,689.3 5 0 +github.com/thebtf/engram/internal/mcp/server.go:690.2,699.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:712.30,765.49 3 0 +github.com/thebtf/engram/internal/mcp/server.go:765.49,789.3 5 0 +github.com/thebtf/engram/internal/mcp/server.go:790.2,799.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:805.40,936.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:942.58,1048.35 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1048.35,1077.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1080.2,1080.33 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1080.33,1090.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1093.2,1093.26 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1093.26,1123.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1124.2,1124.80 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1124.80,1126.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1127.2,1127.55 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1127.55,1129.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1130.2,1130.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1130.38,1132.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1134.2,1134.25 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1134.25,1136.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1138.2,1138.33 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1138.33,1140.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1141.2,1141.69 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1141.69,1143.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1144.2,1144.75 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1144.75,1146.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1148.2,1148.27 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1148.27,1165.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1168.2,1168.76 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1168.76,1191.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1195.2,1195.48 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1195.48,1197.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1201.2,1201.47 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1201.47,1203.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1205.2,1205.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1205.38,1207.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1212.2,1212.21 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1212.21,1214.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1228.2,1228.51 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1228.51,1230.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1233.2,1233.56 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1233.56,1235.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1238.2,1238.71 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1238.71,1298.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1302.2,1302.104 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1302.104,1321.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1324.2,1324.72 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1324.72,1333.154 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1333.154,1334.26 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1334.26,1336.8 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1337.7,1337.16 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1338.35,1340.26 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1340.26,1342.8 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1343.7,1343.18 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1371.2,1371.26 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1371.26,1390.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1393.2,1393.28 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1393.28,1443.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1446.2,1446.28 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1446.28,1478.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1481.2,1481.37 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1481.37,1561.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1564.2,1568.23 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1568.23,1570.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1572.2,1588.57 3 0 +github.com/thebtf/engram/internal/mcp/server.go:1588.57,1591.29 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1591.29,1593.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1594.3,1594.27 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1594.27,1595.29 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1595.29,1597.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1601.2,1607.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1612.79,1614.60 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1614.60,1620.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1622.2,1623.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1623.16,1631.3 3 0 +github.com/thebtf/engram/internal/mcp/server.go:1633.2,1641.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1644.69,1645.34 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1645.34,1647.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1648.2,1649.22 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1649.22,1651.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1652.2,1652.37 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1656.99,1658.14 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1659.16,1660.35 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1661.15,1662.46 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1663.18,1664.49 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1665.15,1666.46 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1667.18,1668.49 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1669.14,1670.45 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1671.15,1672.34 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1676.2,1676.14 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1677.35,1678.52 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1679.26,1680.37 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1681.20,1682.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1683.20,1684.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1685.16,1686.35 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1687.29,1688.40 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1689.33,1690.50 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1691.25,1692.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1693.23,1694.41 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1696.26,1697.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1698.24,1699.42 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1700.22,1701.40 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1702.25,1703.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1704.27,1705.45 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1706.25,1707.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1709.30,1710.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1711.28,1712.42 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1713.17,1714.40 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1715.20,1716.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1717.20,1718.45 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1719.20,1720.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1722.20,1723.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1724.18,1725.36 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1726.20,1727.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1728.18,1729.36 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1730.21,1731.39 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1732.21,1733.39 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1734.26,1735.44 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1736.25,1737.34 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1738.26,1739.44 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1740.24,1741.42 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1742.26,1743.44 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1744.27,1745.45 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1746.22,1747.40 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1748.19,1749.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1750.15,1751.34 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1752.16,1753.35 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1755.21,1756.44 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1757.19,1758.42 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1759.20,1760.44 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1761.22,1762.45 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1763.22,1764.40 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1765.23,1766.41 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1767.20,1768.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1769.32,1770.49 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1771.19,1772.37 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1773.19,1774.37 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1775.33,1776.50 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1777.35,1778.52 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1779.24,1780.42 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1781.32,1782.49 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1783.28,1784.46 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1785.21,1786.39 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1787.34,1788.51 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1789.25,1790.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1791.29,1792.46 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1793.26,1794.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1795.27,1796.44 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1798.25,1799.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1800.23,1801.41 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1802.27,1803.45 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1804.26,1805.44 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1806.29,1807.47 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1809.29,1810.46 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1811.27,1812.44 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1813.30,1814.47 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1815.38,1816.54 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1817.36,1818.52 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1820.24,1821.42 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1822.27,1823.45 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1824.22,1825.40 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1826.32,1827.49 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1828.32,1829.49 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1830.31,1831.48 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1832.35,1833.52 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1834.36,1835.53 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1836.36,1837.53 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1838.38,1839.54 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1840.34,1841.51 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1843.22,1844.40 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1845.21,1846.39 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1847.24,1848.42 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1850.25,1851.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1852.25,1853.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1859.2,1859.14 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1860.22,1863.131 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1866.51,1867.123 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1868.10,1869.50 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1874.47,1876.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1876.16,1879.3 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1880.2,1880.35 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1884.72,1890.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1896.105,1898.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1898.16,1900.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1902.2,1903.17 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1903.17,1905.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1907.2,1908.17 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1908.17,1910.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1912.2,1918.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1918.16,1920.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1921.2,1921.25 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1927.76,1933.15 3 0 +github.com/thebtf/engram/internal/mcp/server.go:1933.15,1936.17 3 0 +github.com/thebtf/engram/internal/mcp/server.go:1936.17,1938.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1939.3,1939.26 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1943.2,1950.36 3 0 +github.com/thebtf/engram/internal/mcp/server.go:1950.36,1952.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1952.8,1955.29 3 0 +github.com/thebtf/engram/internal/mcp/server.go:1955.29,1958.4 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1959.3,1962.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1966.2,1966.20 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1966.20,1977.20 6 0 +github.com/thebtf/engram/internal/mcp/server.go:1977.20,1979.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1980.3,1980.20 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1980.20,1982.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1985.3,1985.37 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1985.37,1987.30 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1987.30,1988.16 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1988.16,1990.6 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1990.11,1992.6 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1994.4,1995.56 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1995.56,1997.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1998.4,2003.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2008.2,2008.29 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2008.29,2009.63 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2009.63,2011.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2011.9,2013.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2021.2,2021.29 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2021.29,2029.38 3 0 +github.com/thebtf/engram/internal/mcp/server.go:2029.38,2031.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2031.9,2033.31 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2033.31,2035.30 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2035.30,2037.6 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2039.4,2042.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2046.2,2047.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2047.16,2049.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2050.2,2050.25 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2055.57,2056.33 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2056.33,2058.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2059.2,2060.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2060.16,2062.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2063.2,2064.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2064.16,2066.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2067.2,2067.23 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2071.79,2105.15 6 0 +github.com/thebtf/engram/internal/mcp/server.go:2105.15,2107.17 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2107.17,2111.4 3 0 +github.com/thebtf/engram/internal/mcp/server.go:2111.9,2112.17 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2112.17,2114.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2115.4,2117.26 3 0 +github.com/thebtf/engram/internal/mcp/server.go:2117.26,2119.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2119.10,2121.29 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2121.29,2123.6 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2125.4,2129.25 5 0 +github.com/thebtf/engram/internal/mcp/server.go:2130.19,2130.19 0 0 +github.com/thebtf/engram/internal/mcp/server.go:2132.20,2134.106 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2135.12,2137.103 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2140.8,2143.3 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2144.2,2150.49 3 0 +github.com/thebtf/engram/internal/mcp/server.go:2150.49,2152.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2152.8,2154.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2155.2,2168.27 4 0 +github.com/thebtf/engram/internal/mcp/server.go:2168.27,2170.17 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2170.17,2173.4 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2173.9,2175.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2177.2,2182.40 4 0 +github.com/thebtf/engram/internal/mcp/server.go:2182.40,2183.21 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2184.20,2185.20 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2186.19,2187.19 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2191.2,2191.24 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2191.24,2193.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2193.8,2193.30 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2193.30,2195.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2198.2,2198.28 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2198.28,2200.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2203.2,2203.29 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2203.29,2205.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2207.2,2208.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2208.16,2210.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2211.2,2211.28 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2216.103,2218.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2218.16,2220.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2222.2,2223.15 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2223.15,2225.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2227.2,2239.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2239.16,2241.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2242.2,2242.25 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2246.93,2248.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2251.91,2253.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:18.28,29.20 4 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:29.20,33.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:35.2,44.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:68.36,69.49 1 1 +github.com/thebtf/engram/internal/mcp/tools_admin.go:69.49,74.3 4 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:75.2,75.25 1 1 +github.com/thebtf/engram/internal/mcp/tools_admin.go:80.26,82.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:84.89,86.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:86.16,88.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:89.2,90.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:90.18,92.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:94.2,94.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:95.15,96.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:97.26,98.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:99.25,100.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:101.23,105.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:105.22,107.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:108.3,108.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:109.10,110.114 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:120.92,126.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:126.26,128.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:130.2,131.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:131.19,133.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:134.2,135.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:135.19,137.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:138.2,138.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:138.24,140.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:142.2,142.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:142.25,144.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:146.2,147.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:147.16,149.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:151.2,151.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:27.40,30.2 2 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:32.30,46.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:48.99,49.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:49.34,51.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:52.2,52.69 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:52.69,54.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:56.2,57.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:57.16,59.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:60.2,61.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:61.21,63.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:64.2,67.26 3 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:67.26,69.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:70.2,71.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:71.25,73.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:75.2,77.44 3 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:77.44,79.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:80.2,80.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:80.33,82.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:83.2,83.81 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:86.52,87.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:87.16,89.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:90.2,90.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:90.15,92.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:93.2,93.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:96.73,97.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:97.21,99.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:100.2,101.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:101.29,110.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:111.2,111.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:114.34,116.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:31.98,32.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:32.52,34.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:35.2,35.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:35.26,37.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:39.2,40.49 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:40.49,42.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:43.2,43.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:43.21,45.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:46.2,46.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:46.21,48.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:49.2,49.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:49.18,51.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:52.2,52.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:52.18,54.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:56.2,56.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:56.38,58.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:60.2,61.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:61.16,63.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:68.2,70.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:70.26,77.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:79.2,81.36 3 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:81.36,84.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:86.2,89.28 3 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:89.28,90.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:90.39,91.9 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:93.3,97.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:100.2,104.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:107.60,113.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:115.101,116.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:116.38,118.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:120.2,122.21 3 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:122.21,123.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:123.26,125.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:126.3,126.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:126.23,128.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:129.8,130.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:130.26,132.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:133.3,133.68 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:133.68,135.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:137.2,140.20 3 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:141.17,142.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:143.67,143.67 0 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:144.10,145.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:148.2,162.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:162.16,164.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:165.2,165.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:165.19,173.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:174.2,174.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:174.30,176.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:177.2,177.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:177.31,179.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:181.2,182.36 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:182.36,196.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:198.2,199.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:199.19,201.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:202.2,203.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:203.18,205.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:206.2,207.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:207.21,209.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:210.2,211.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:211.25,213.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:214.2,225.21 3 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:225.21,227.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:228.2,228.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:228.25,230.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:231.2,231.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:231.18,233.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:235.2,244.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:244.21,246.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:247.2,247.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:247.25,249.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:250.2,250.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:250.18,252.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:253.2,253.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:253.24,255.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:256.2,256.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:259.50,261.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:261.22,263.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:264.2,264.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:270.90,272.42 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:272.42,276.3 3 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:277.2,281.27 3 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:281.27,282.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:282.45,284.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:286.2,286.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:25.28,88.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:95.95,96.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:96.22,98.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:99.2,100.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:100.32,102.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:104.2,105.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:105.16,107.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:109.2,114.35 3 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:114.35,121.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:123.2,123.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:123.25,125.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:127.2,134.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:134.16,136.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:138.2,146.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:154.94,155.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:155.22,157.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:158.2,159.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:159.32,161.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:163.2,164.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:164.16,166.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:168.2,172.35 3 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:172.35,179.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:181.2,181.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:181.25,183.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:185.2,192.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:192.16,194.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:196.2,203.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:211.97,212.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:212.22,214.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:215.2,216.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:216.32,218.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:220.2,221.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:221.16,223.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:225.2,229.35 3 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:229.35,236.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:238.2,238.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:238.25,240.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:242.2,249.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:249.16,251.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:253.2,260.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:31.80,32.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:32.14,34.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:35.2,48.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:51.136,53.51 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:53.51,55.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:56.2,56.83 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:59.94,60.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:60.21,62.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:63.2,63.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:68.30,162.2 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:165.98,166.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:166.49,168.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:169.2,170.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:170.16,172.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:173.2,174.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:174.19,176.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:177.2,179.17 3 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:179.17,181.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:183.2,184.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:184.16,186.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:188.2,189.31 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:189.31,190.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:190.15,191.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:193.3,193.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:196.2,201.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:201.16,203.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:204.2,204.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:208.96,209.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:209.49,211.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:212.2,213.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:213.16,215.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:216.2,217.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:217.13,219.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:221.2,222.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:222.16,224.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:225.2,225.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:225.22,227.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:229.2,230.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:230.16,232.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:233.2,233.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:239.100,240.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:240.22,242.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:243.2,244.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:244.16,246.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:247.2,248.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:248.13,250.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:255.2,256.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:256.12,263.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:263.30,264.77 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:264.77,269.5 4 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:271.3,272.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:272.21,274.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:275.3,275.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:279.2,279.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:279.29,281.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:284.2,285.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:285.16,287.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:288.2,288.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:288.22,290.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:291.2,291.55 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:291.55,293.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:294.2,294.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:294.74,296.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:297.2,298.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:298.16,300.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:306.2,307.41 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:307.41,309.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:310.2,324.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:324.16,325.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:325.50,327.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:328.3,328.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:330.2,330.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:330.38,332.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:334.2,341.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:341.16,343.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:344.2,344.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:348.99,349.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:349.49,351.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:352.2,353.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:353.16,355.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:356.2,357.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:357.13,359.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:360.2,362.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:362.16,364.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:365.2,365.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:365.22,367.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:368.2,368.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:368.74,370.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:371.2,372.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:372.16,374.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:375.2,375.85 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:375.85,377.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:379.2,380.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:380.16,381.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:381.50,383.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:384.3,384.60 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:386.2,386.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:386.20,388.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:390.2,395.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:395.16,397.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:398.2,398.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:402.102,403.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:403.49,405.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:406.2,407.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:407.16,409.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:410.2,411.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:411.13,413.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:414.2,415.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:415.16,417.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:418.2,418.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:418.22,420.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:421.2,421.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:421.74,423.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:424.2,425.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:425.16,427.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:428.2,428.88 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:428.88,430.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:432.2,433.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:433.16,434.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:434.50,436.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:437.3,437.63 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:439.2,439.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:439.20,441.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:443.2,448.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:448.16,450.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:451.2,451.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:34.30,36.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:42.61,44.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:48.32,75.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:79.32,94.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:100.98,101.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:101.25,103.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:104.2,104.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:104.29,106.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:108.2,113.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:113.17,114.55 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:114.55,116.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:118.2,118.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:118.24,120.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:121.2,121.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:121.23,123.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:124.2,124.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:124.23,126.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:134.2,135.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:135.21,137.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:142.2,147.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:147.16,149.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:154.2,165.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:165.25,175.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:177.2,183.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:183.16,185.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:186.2,186.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:194.98,195.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:195.25,197.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:198.2,198.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:198.29,200.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:202.2,205.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:205.17,207.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:208.2,209.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:209.21,211.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:213.2,214.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:214.16,216.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:217.2,218.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:218.16,220.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:221.2,222.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:222.16,224.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:226.2,231.11 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:231.11,233.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:235.2,236.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:236.16,238.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:239.2,239.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:21.52,22.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:22.24,25.28 3 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:25.28,27.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:29.2,29.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:35.72,37.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:37.15,39.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:41.2,42.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:42.16,44.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:45.2,45.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:49.99,51.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:51.16,53.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:55.2,56.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:56.16,58.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:60.2,72.23 7 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:72.23,74.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:75.2,75.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:75.24,77.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:78.2,78.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:78.24,80.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:81.2,81.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:82.27,82.27 0 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:84.10,85.93 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:87.2,87.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:87.30,89.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:90.2,90.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:90.26,92.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:94.2,95.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:95.16,97.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:99.2,100.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:100.16,102.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:104.2,112.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:112.16,114.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:116.2,123.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:123.16,125.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:126.2,126.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:130.97,132.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:132.16,134.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:136.2,137.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:137.16,139.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:141.2,147.23 4 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:147.23,149.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:150.2,150.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:150.26,152.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:154.2,155.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:155.16,157.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:159.2,160.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:160.16,161.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:161.47,163.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:164.3,164.51 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:167.2,167.97 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:167.97,172.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:174.2,175.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:175.16,177.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:179.2,185.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:185.16,187.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:188.2,188.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:192.99,194.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:194.16,196.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:198.2,199.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:199.16,201.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:203.2,207.26 3 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:207.26,209.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:211.2,212.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:212.16,214.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:216.2,223.26 3 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:223.26,229.28 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:229.28,231.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:232.3,232.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:235.2,236.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:236.16,238.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:239.2,239.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:243.100,245.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:245.16,247.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:249.2,250.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:250.16,252.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:254.2,262.23 5 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:262.23,264.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:265.2,265.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:265.24,267.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:268.2,268.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:269.27,269.27 0 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:271.10,272.93 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:274.2,274.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:274.30,276.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:277.2,277.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:277.26,279.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:281.2,281.71 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:281.71,282.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:282.47,284.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:285.3,285.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:288.2,293.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:293.16,295.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:296.2,296.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:302.92,309.19 5 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:309.19,310.53 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:310.53,313.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:316.2,317.51 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:317.51,318.66 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:318.66,320.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:323.2,331.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:331.16,333.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:334.2,334.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:338.46,342.32 4 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:342.32,343.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:343.20,346.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:348.2,350.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:350.26,352.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:352.27,353.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:353.13,355.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:356.4,356.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:358.3,358.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:360.2,360.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:16.45,18.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:20.35,36.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:38.84,39.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:39.40,41.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:42.2,42.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:42.50,44.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:45.2,45.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:48.101,50.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:50.16,52.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:53.2,54.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:54.16,56.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:57.2,58.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:58.19,60.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:61.2,62.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:62.21,64.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:65.2,66.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:66.16,68.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:69.2,69.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:72.102,74.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:74.16,76.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:77.2,82.8 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:10.100,12.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:12.16,14.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:16.2,17.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:17.18,19.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:21.2,21.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:22.16,23.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:24.14,25.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:26.14,27.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:28.17,29.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:30.17,31.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:32.21,33.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:34.19,35.42 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:36.17,37.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:38.16,39.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:40.16,41.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:42.21,43.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:44.10,45.167 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:15.77,16.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:16.33,18.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:20.2,21.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:21.27,23.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:25.2,26.28 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:26.28,29.17 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:29.17,31.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:34.2,41.32 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:41.32,46.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:46.20,48.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:49.3,49.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:52.2,53.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:53.16,55.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:57.2,57.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:61.97,62.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:62.28,64.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:66.2,67.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:67.16,69.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:71.2,75.29 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:75.29,77.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:79.2,80.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:80.16,82.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:84.2,84.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:84.20,86.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:88.2,97.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:97.25,103.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:103.20,105.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:106.3,106.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:106.19,108.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:109.3,109.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:112.2,113.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:113.16,115.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:117.2,117.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:121.95,122.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:122.28,124.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:126.2,127.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:127.16,129.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:131.2,137.50 4 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:137.50,139.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:141.2,142.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:142.16,144.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:145.2,145.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:145.16,147.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:149.2,149.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:149.21,151.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:153.2,154.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:154.16,156.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:157.2,157.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:157.20,159.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:161.2,161.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:165.98,166.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:166.28,168.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:170.2,171.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:171.16,173.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:175.2,181.50 4 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:181.50,183.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:185.2,185.96 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:185.96,187.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:189.2,189.88 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:197.98,198.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:198.28,200.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:202.2,203.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:203.16,205.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:207.2,217.74 6 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:217.74,219.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:222.2,223.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:223.16,225.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:227.2,229.156 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:235.98,237.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:237.16,239.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:241.2,247.24 4 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:247.24,249.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:252.2,253.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:253.29,255.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:256.2,256.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:15.93,16.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:16.37,18.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:20.2,21.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:21.16,23.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:25.2,32.16 7 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:32.16,34.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:35.2,35.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:35.19,37.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:38.2,38.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:38.19,40.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:42.2,43.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:43.16,45.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:47.2,54.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:54.16,56.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:57.2,57.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:61.91,62.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:62.37,64.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:66.2,67.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:67.16,69.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:71.2,73.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:73.16,75.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:76.2,76.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:76.19,78.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:80.2,81.43 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:81.43,83.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:83.19,85.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:86.3,86.79 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:87.8,89.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:90.2,90.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:90.16,91.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:91.45,93.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:94.3,94.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:97.2,110.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:110.16,112.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:113.2,113.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:117.93,119.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:122.91,123.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:123.37,125.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:127.2,128.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:128.16,130.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:132.2,133.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:133.19,135.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:136.2,141.16 5 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:141.16,143.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:145.2,155.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:155.25,165.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:167.2,168.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:168.16,170.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:171.2,171.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:175.94,176.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:176.37,178.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:180.2,181.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:181.16,183.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:185.2,187.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:187.16,189.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:190.2,190.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:190.19,192.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:193.2,196.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:196.16,198.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:200.2,208.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:208.25,216.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:218.2,225.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:225.16,227.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:228.2,228.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:232.94,233.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:233.37,235.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:237.2,238.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:238.16,240.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:242.2,243.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:243.21,245.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:246.2,248.19 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:248.19,250.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:252.2,253.46 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:253.46,255.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:255.13,257.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:259.2,259.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:259.44,261.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:261.13,263.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:266.2,267.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:267.16,269.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:271.2,278.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:278.16,280.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:281.2,281.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:19.69,21.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:23.38,38.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:40.51,63.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:65.53,80.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:82.46,85.32 3 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:85.32,87.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:88.2,88.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:91.105,93.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:93.16,95.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:96.2,97.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:97.16,99.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:100.2,100.70 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:103.107,105.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:105.16,107.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:108.2,109.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:109.16,111.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:112.2,112.72 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:115.101,117.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:117.16,119.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:120.2,121.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:121.17,123.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:124.2,139.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:142.109,144.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:144.16,146.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:147.2,154.8 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:157.100,159.28 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:159.28,161.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:161.18,163.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:164.3,164.62 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:166.2,167.72 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:167.72,169.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:170.2,170.53 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:170.53,172.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:173.2,174.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:174.26,176.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:177.2,177.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:180.73,182.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:182.16,184.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:185.2,185.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:12.104,14.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:14.16,16.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:18.2,19.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:19.18,21.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:23.2,23.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:24.14,25.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:26.18,27.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:28.17,29.46 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:30.10,31.96 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:36.101,37.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:37.27,39.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:41.2,42.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:42.16,44.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:46.2,47.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:47.21,49.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:50.2,51.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:51.19,53.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:54.2,54.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:55.52,55.52 0 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:56.10,57.101 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:59.2,61.93 2 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:61.93,64.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:66.2,70.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:27.31,94.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:98.97,100.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:100.26,102.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:103.2,103.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:103.28,105.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:107.2,108.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:108.16,110.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:112.2,115.15 4 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:115.15,117.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:118.2,118.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:118.17,120.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:122.2,123.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:123.16,125.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:127.2,140.29 3 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:140.29,151.31 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:151.31,154.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:155.3,155.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:158.2,162.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:167.100,169.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:169.26,171.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:172.2,172.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:172.28,174.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:175.2,175.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:175.26,177.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:179.2,180.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:180.16,182.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:184.2,185.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:185.22,187.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:189.2,190.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:190.20,191.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:191.54,199.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:200.3,200.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:200.61,202.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:203.3,203.58 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:206.2,211.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:215.95,217.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:217.32,219.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:220.2,220.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:220.28,222.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:224.2,225.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:225.16,227.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:229.2,230.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:230.22,232.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:234.2,234.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:234.61,236.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:239.2,239.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:239.25,246.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:248.2,252.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:258.104,260.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:260.26,262.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:267.2,271.20 3 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:271.20,275.3 3 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:275.8,279.3 3 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:280.2,280.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:284.60,285.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:285.30,287.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:288.2,288.42 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:288.42,290.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:291.2,291.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:64.89,65.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:65.25,67.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:69.2,70.49 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:70.49,72.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:74.2,74.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:75.18,76.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:77.21,78.35 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:79.19,80.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:81.18,82.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:83.19,84.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:85.18,86.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:87.18,91.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:91.23,93.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:94.3,94.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:95.10,96.62 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:100.81,103.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:103.19,105.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:106.2,107.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:107.19,109.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:112.2,112.46 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:112.46,114.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:115.2,115.46 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:115.46,117.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:122.2,122.66 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:122.66,124.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:127.2,127.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:127.25,128.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:128.22,130.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:131.8,132.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:132.26,134.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:138.2,138.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:138.25,139.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:139.22,141.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:142.8,143.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:143.26,145.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:148.2,148.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:148.22,150.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:151.2,151.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:151.38,153.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:154.2,154.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:154.19,156.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:159.2,161.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:161.25,164.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:165.2,165.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:165.25,168.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:169.2,171.23 3 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:171.23,174.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:175.2,175.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:175.23,178.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:180.2,193.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:193.16,195.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:198.2,199.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:199.29,201.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:202.2,202.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:202.29,204.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:205.2,213.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:216.121,217.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:217.28,218.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:218.26,220.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:221.3,222.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:222.17,223.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:223.49,225.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:226.4,226.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:228.3,228.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:230.2,230.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:230.26,232.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:233.2,234.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:234.16,235.48 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:235.48,237.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:238.3,238.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:240.2,240.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:243.101,248.36 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:248.36,250.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:250.8,252.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:253.2,253.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:253.16,255.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:256.2,256.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:256.32,257.128 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:257.128,262.72 5 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:262.72,264.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:267.2,267.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:276.81,277.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:277.25,279.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:280.2,280.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:280.22,282.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:283.2,283.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:283.39,285.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:286.2,286.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:286.25,288.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:289.2,289.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:289.21,291.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:292.2,293.14 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:293.14,295.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:296.2,305.16 5 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:305.16,307.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:308.2,314.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:317.84,318.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:318.19,320.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:321.2,323.63 3 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:323.63,325.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:326.2,329.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:332.82,333.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:333.38,335.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:336.2,337.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:338.18,339.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:340.18,341.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:345.2,345.59 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:345.59,347.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:349.2,351.21 3 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:351.21,353.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:353.8,356.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:357.2,357.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:357.16,359.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:366.2,367.41 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:367.41,369.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:371.2,378.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:397.115,398.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:398.15,400.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:403.2,404.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:404.26,405.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:405.28,407.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:408.3,408.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:408.28,410.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:412.2,412.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:412.23,415.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:420.2,426.12 4 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:426.12,427.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:427.27,429.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:429.18,431.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:433.4,433.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:433.33,435.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:440.2,441.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:441.26,442.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:442.28,443.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:443.49,445.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:448.3,448.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:448.28,449.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:449.49,451.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:454.2,454.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:457.82,458.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:458.21,460.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:461.2,462.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:462.16,464.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:465.2,465.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:465.36,467.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:468.2,469.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:469.16,471.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:472.2,477.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:480.82,481.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:481.40,483.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:484.2,485.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:485.19,487.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:488.2,489.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:489.16,491.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:492.2,499.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:502.82,503.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:503.21,505.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:506.2,507.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:507.16,509.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:510.2,514.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:23.179,24.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:24.22,26.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:28.2,32.22 4 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:32.22,34.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:35.2,36.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:36.22,38.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:40.2,41.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:41.26,43.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:44.2,44.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:44.26,46.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:47.2,47.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:47.30,49.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:50.2,50.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:50.30,52.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:54.2,55.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:55.16,57.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:58.2,58.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:58.13,60.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:61.2,62.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:62.16,64.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:65.2,65.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:65.13,67.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:69.2,70.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:70.16,72.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:73.2,73.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:73.15,75.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:77.2,77.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:80.172,81.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:81.28,82.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:82.23,84.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:85.3,85.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:85.18,87.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:88.3,89.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:89.17,90.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:90.49,92.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:93.4,93.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:95.3,95.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:98.2,98.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:98.24,100.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:101.2,101.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:101.19,103.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:104.2,105.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:105.16,106.48 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:106.48,108.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:109.3,109.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:111.2,111.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:114.119,116.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:116.22,118.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:119.2,120.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:120.22,122.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:124.2,126.26 3 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:126.26,127.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:127.36,129.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:130.3,130.105 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:131.8,132.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:132.32,134.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:135.3,135.103 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:137.2,137.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:137.16,139.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:141.2,141.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:141.32,143.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:143.27,145.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:146.3,147.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:147.27,149.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:150.3,150.106 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:150.106,151.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:153.3,153.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:153.27,154.114 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:154.114,155.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:157.9,157.104 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:157.104,158.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:160.3,160.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:160.27,161.114 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:161.114,162.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:164.9,164.104 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:164.104,165.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:167.3,167.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:169.2,169.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:25.90,26.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:26.26,28.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:30.2,31.49 2 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:31.49,33.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:35.2,35.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:36.16,37.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:38.10,39.63 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:43.84,44.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:44.21,46.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:47.2,47.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:47.25,49.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:50.2,50.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:50.21,52.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:53.2,53.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:53.21,55.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:57.2,58.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:59.18,60.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:61.15,62.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:63.24,64.42 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:65.10,66.108 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:69.2,70.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:70.22,72.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:73.2,74.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:74.29,76.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:78.2,78.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:78.14,85.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:87.2,89.37 3 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:89.37,92.21 3 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:92.21,94.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:97.2,100.31 4 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:100.31,102.38 2 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:102.38,104.37 2 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:104.37,106.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:109.3,122.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:122.26,124.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:125.3,125.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:125.19,127.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:131.3,133.39 3 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:133.39,135.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:135.9,137.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:138.3,138.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:138.17,140.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:142.3,142.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:142.34,144.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:145.3,145.11 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:148.2,155.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:20.99,22.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:22.16,24.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:26.2,31.44 3 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:31.44,32.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:32.33,33.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:33.43,38.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:43.2,43.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:43.49,45.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:46.2,46.48 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:46.48,48.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:50.2,52.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:52.27,55.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:55.8,60.24 3 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:60.24,62.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:64.3,64.57 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:64.57,66.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:68.3,68.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:71.2,71.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:71.16,73.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:75.2,76.23 2 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:76.23,78.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:80.2,80.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:19.40,89.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:109.71,111.9 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:111.9,113.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:115.2,116.38 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:116.38,117.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:118.13,119.41 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:119.41,121.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:122.17,123.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:123.43,125.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:126.11,127.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:127.40,129.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:133.2,133.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:133.22,138.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:139.2,139.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:143.90,144.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:144.25,146.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:148.2,149.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:149.16,151.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:153.2,157.61 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:157.61,159.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:161.2,161.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:162.16,163.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:164.14,165.35 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:166.13,167.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:168.16,169.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:170.17,171.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:172.16,173.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:174.15,175.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:176.10,177.120 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:189.85,191.39 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:191.39,192.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:192.44,194.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:196.2,196.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:196.15,198.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:199.2,199.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:199.15,201.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:202.2,202.46 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:205.91,207.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:207.17,209.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:211.2,215.25 5 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:215.25,217.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:218.2,224.25 4 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:224.25,226.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:227.2,227.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:227.25,229.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:231.2,243.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:243.16,245.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:247.2,247.139 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:250.89,252.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:252.19,254.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:255.2,256.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:256.25,258.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:259.2,264.52 5 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:264.52,266.14 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:266.14,268.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:271.2,277.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:277.25,280.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:282.2,283.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:283.16,285.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:287.2,287.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:287.22,288.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:288.20,290.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:291.3,291.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:294.2,297.31 3 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:297.31,300.29 3 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:300.29,302.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:303.3,305.69 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:308.2,308.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:311.88,313.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:313.13,315.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:317.2,318.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:318.16,320.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:322.2,328.22 6 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:328.22,331.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:333.2,333.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:333.23,335.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:335.30,338.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:341.2,341.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:344.91,346.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:346.13,348.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:350.2,353.18 3 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:353.18,354.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:354.27,356.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:357.3,357.73 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:357.73,359.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:362.2,362.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:362.19,370.17 4 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:370.17,372.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:375.2,376.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:376.26,378.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:379.2,379.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:382.92,384.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:384.13,386.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:388.2,389.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:389.16,391.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:393.2,401.16 4 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:401.16,403.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:405.2,405.88 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:408.91,410.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:410.13,412.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:414.2,418.95 4 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:418.95,420.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:422.2,422.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:425.90,427.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:427.13,429.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:431.2,433.167 3 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:433.167,435.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:437.2,437.89 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:437.89,439.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:441.2,441.108 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:22.93,24.49 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:24.49,26.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:28.2,28.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:29.14,30.42 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:31.17,32.59 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:33.16,34.58 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:35.24,36.75 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:37.27,38.71 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:39.22,40.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:41.23,42.63 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:43.10,44.66 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:48.79,49.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:49.13,51.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:52.2,53.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:53.16,55.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:57.2,58.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:58.32,60.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:61.2,84.28 3 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:87.101,88.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:88.13,90.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:91.2,91.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:91.38,93.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:94.2,95.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:95.16,97.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:98.2,98.53 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:98.53,100.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:102.2,104.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:104.17,106.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:107.2,107.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:107.29,109.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:110.2,115.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:118.100,119.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:119.13,121.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:122.2,122.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:122.38,124.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:125.2,126.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:126.16,128.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:129.2,129.53 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:129.53,131.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:133.2,135.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:135.17,137.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:138.2,138.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:138.29,140.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:141.2,146.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:149.123,150.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:150.13,152.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:153.2,153.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:153.18,155.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:156.2,156.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:156.38,158.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:159.2,161.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:161.17,163.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:164.2,169.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:172.113,173.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:173.13,175.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:176.2,176.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:176.50,178.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:179.2,181.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:181.17,183.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:184.2,188.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:191.57,195.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:197.102,198.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:198.13,200.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:201.2,201.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:201.20,203.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:204.2,205.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:205.16,207.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:209.2,210.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:210.32,212.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:214.2,217.56 3 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:217.56,223.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:225.2,230.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:233.41,235.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:235.16,237.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:238.2,238.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:35.27,37.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:42.41,43.11 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:44.48,45.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:46.10,47.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:54.57,55.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:56.17,57.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:58.16,59.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:60.10,61.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:82.58,83.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:84.28,85.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:86.26,87.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:88.10,89.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:93.114,95.68 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:95.68,97.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:99.2,101.42 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:101.42,102.71 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:102.71,105.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:107.2,117.23 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:117.23,119.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:121.2,124.22 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:124.22,125.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:125.31,127.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:128.3,128.35 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:129.8,129.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:129.37,131.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:132.2,132.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:135.74,136.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:136.30,138.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:139.2,139.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:139.34,141.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:142.2,142.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:142.31,144.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:145.2,145.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:145.22,147.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:161.169,162.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:162.17,164.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:165.2,166.51 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:166.51,168.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:169.2,169.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:172.92,174.42 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:174.42,177.63 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:177.63,179.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:179.9,181.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:183.2,183.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:186.65,190.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:192.115,194.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:194.26,196.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:196.8,196.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:196.31,198.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:199.2,199.117 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:202.122,206.31 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:206.31,207.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:207.45,209.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:211.2,211.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:214.72,216.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:218.117,219.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:219.16,221.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:222.2,223.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:223.20,225.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:225.17,227.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:228.3,228.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:228.27,229.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:229.50,231.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:231.30,232.11 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:236.3,236.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:239.2,241.60 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:241.60,243.61 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:243.61,245.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:246.3,246.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:246.24,247.9 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:249.3,250.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:250.17,252.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:253.3,253.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:253.22,254.9 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:256.3,256.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:256.29,257.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:257.50,259.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:259.30,260.11 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:264.3,265.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:265.32,266.9 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:269.2,269.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:272.51,273.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:273.16,275.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:276.2,277.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:277.18,279.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:280.2,280.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:280.19,282.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:283.2,283.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:286.97,288.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:288.30,290.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:291.2,291.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:291.49,293.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:294.2,294.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:297.108,299.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:301.108,303.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:305.102,307.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:319.55,320.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:320.31,322.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:323.2,323.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:323.26,325.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:326.2,326.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:329.71,330.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:343.26,344.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:345.10,346.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:354.95,362.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:362.16,364.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:366.2,397.39 14 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:397.39,399.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:399.27,401.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:402.8,404.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:405.2,407.46 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:407.46,410.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:411.2,411.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:411.44,413.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:413.12,415.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:417.2,417.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:417.26,419.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:420.2,420.84 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:420.84,422.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:427.2,427.65 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:427.65,429.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:431.2,433.20 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:433.20,435.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:436.2,437.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:437.20,439.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:440.2,440.56 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:440.56,442.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:443.2,443.56 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:443.56,448.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:450.2,450.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:450.45,453.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:459.2,459.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:459.31,461.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:461.22,462.62 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:462.62,465.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:466.4,466.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:468.3,468.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:471.2,472.115 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:472.115,474.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:491.2,491.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:491.19,493.23 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:493.23,495.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:496.3,508.21 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:508.21,510.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:511.3,511.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:522.2,522.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:522.43,535.34 5 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:535.34,556.30 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:556.30,558.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:559.4,559.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:559.44,561.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:562.4,562.106 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:562.106,564.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:575.4,575.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:575.74,577.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:578.4,579.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:579.18,581.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:583.4,584.28 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:584.28,586.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:588.4,588.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:588.31,599.57 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:599.57,601.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:601.17,604.7 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:606.5,607.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:607.21,609.6 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:615.5,615.138 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:615.138,617.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:617.27,619.7 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:620.6,620.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:622.5,623.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:623.26,625.6 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:626.5,626.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:630.4,631.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:631.20,633.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:634.4,634.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:634.22,637.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:637.26,639.6 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:640.5,640.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:645.4,660.77 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:660.77,662.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:663.4,664.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:664.25,666.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:667.4,667.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:673.2,673.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:673.26,675.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:677.2,678.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:678.25,680.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:681.2,681.97 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:681.97,683.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:690.2,691.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:691.21,693.33 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:693.33,695.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:696.3,696.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:696.33,698.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:699.3,699.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:699.49,704.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:721.3,721.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:721.54,722.84 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:722.84,724.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:728.2,728.99 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:728.99,730.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:732.2,733.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:733.22,735.10 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:736.109,737.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:738.100,739.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:740.114,741.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:742.107,743.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:744.11,745.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:748.2,749.43 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:749.43,751.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:753.2,755.34 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:755.34,756.48 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:756.48,757.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:757.19,760.5 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:764.2,764.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:764.31,767.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:768.2,768.35 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:768.35,771.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:772.2,772.76 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:772.76,776.3 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:778.2,780.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:780.16,782.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:782.20,785.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:788.2,788.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:788.25,798.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:798.18,800.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:800.9,800.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:800.30,807.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:808.3,808.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:808.36,810.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:811.3,812.50 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:812.50,815.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:816.3,822.17 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:822.17,824.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:826.3,836.17 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:836.17,838.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:839.3,839.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:842.2,843.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:843.30,844.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:844.52,846.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:846.9,848.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:851.2,869.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:869.21,871.43 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:871.43,873.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:874.3,874.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:874.29,876.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:886.3,886.76 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:886.76,888.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:890.2,890.105 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:890.105,892.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:893.2,894.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:894.16,896.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:901.2,904.40 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:904.40,905.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:905.15,906.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:909.3,910.63 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:910.63,912.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:912.9,914.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:916.3,916.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:916.43,918.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:919.3,920.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:920.20,922.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:925.3,925.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:925.23,928.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:929.3,931.33 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:931.33,934.39 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:934.39,936.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:939.2,948.42 5 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:948.42,950.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:950.21,952.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:952.9,955.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:959.2,959.53 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:959.53,960.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:960.54,961.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:961.33,963.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:964.9,972.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:973.3,973.60 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:973.60,974.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:974.40,976.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:978.3,978.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:978.61,979.41 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:979.41,981.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:983.3,983.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:983.28,985.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:986.3,987.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:989.2,989.51 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:989.51,991.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:995.2,997.53 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:997.53,999.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:999.8,1001.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1002.2,1002.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1002.22,1004.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1008.2,1014.76 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1014.76,1016.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1021.2,1021.57 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1021.57,1026.13 5 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1026.13,1029.21 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1029.21,1032.5 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1033.4,1033.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1033.49,1035.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1036.4,1043.89 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1043.89,1046.5 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1048.4,1048.86 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1052.2,1063.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1063.21,1065.40 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1065.40,1067.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1068.3,1068.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1068.38,1070.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1072.2,1074.18 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1074.18,1081.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1082.2,1082.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1082.28,1084.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1085.2,1085.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1085.16,1087.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1088.2,1088.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1088.30,1090.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1091.2,1091.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1091.30,1093.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1098.2,1098.76 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1098.76,1100.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1101.2,1102.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1102.16,1104.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1105.2,1105.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1111.94,1113.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1113.15,1115.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1117.2,1118.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1118.16,1120.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1122.2,1123.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1123.13,1125.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1126.2,1131.16 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1131.16,1133.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1134.2,1134.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1134.19,1136.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1146.2,1146.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1146.39,1148.55 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1148.55,1150.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1152.2,1152.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1152.39,1154.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1157.2,1158.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1158.21,1163.21 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1163.21,1165.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1166.3,1167.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1167.21,1169.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1170.3,1170.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1170.52,1172.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1173.3,1173.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1173.52,1178.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1179.3,1179.41 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1179.41,1182.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1183.3,1183.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1188.2,1188.46 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1188.46,1190.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1191.2,1191.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1191.27,1193.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1195.2,1196.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1196.16,1198.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1201.2,1210.16 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1210.16,1212.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1213.2,1213.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1218.59,1220.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1220.38,1222.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1225.2,1226.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1226.29,1227.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1227.22,1229.9 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1232.2,1232.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1232.18,1234.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1237.2,1244.29 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1244.29,1245.67 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1245.67,1247.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1249.2,1249.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1249.16,1251.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1254.2,1254.11 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1258.55,1260.47 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1260.47,1262.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1263.2,1264.58 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1264.58,1266.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1267.2,1267.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1270.252,1271.108 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1271.108,1273.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1274.2,1274.55 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1274.55,1276.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1277.2,1277.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1280.184,1282.69 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1282.69,1284.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1284.32,1285.58 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1285.58,1287.10 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1290.3,1290.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1290.18,1292.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1294.2,1294.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1294.19,1297.32 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1297.32,1298.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1298.39,1300.10 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1303.3,1303.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1303.19,1305.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1307.2,1307.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1307.21,1309.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1309.32,1310.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1310.49,1312.10 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1315.3,1315.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1315.18,1317.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1319.2,1319.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1319.28,1321.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1321.17,1323.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1324.3,1324.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1324.27,1326.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1328.2,1328.76 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1328.76,1330.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1331.2,1331.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1342.96,1343.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1343.26,1345.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1347.2,1348.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1348.16,1350.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1352.2,1363.23 9 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1363.23,1364.58 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1364.58,1365.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1365.31,1367.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1367.10,1369.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1373.2,1373.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1373.17,1375.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1376.2,1376.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1376.16,1378.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1379.2,1379.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1379.16,1381.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1382.2,1382.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1382.18,1384.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1385.2,1385.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1385.19,1387.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1388.2,1388.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1388.19,1390.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1396.2,1399.18 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1399.18,1400.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1400.61,1401.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1402.50,1403.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1404.12,1405.108 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1409.2,1410.42 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1410.42,1414.3 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1415.2,1420.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1420.16,1422.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1429.2,1444.43 6 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1444.43,1446.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1449.2,1451.27 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1451.27,1453.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1458.2,1458.46 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1458.46,1460.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1461.2,1461.63 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1461.63,1463.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1465.2,1466.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1466.15,1472.29 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1472.29,1479.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1479.18,1481.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1482.4,1482.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1482.23,1483.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1485.4,1485.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1485.30,1486.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1486.24,1488.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1488.32,1489.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1493.4,1494.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1494.30,1495.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1498.8,1504.29 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1504.29,1506.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1506.18,1508.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1509.4,1509.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1509.23,1510.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1512.4,1512.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1512.30,1513.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1513.24,1515.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1515.32,1516.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1520.4,1521.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1521.30,1522.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1526.2,1526.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1526.26,1528.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1528.17,1530.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1535.2,1535.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1535.74,1536.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1536.13,1537.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1537.33,1542.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1542.26,1544.39 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1544.39,1546.7 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1548.5,1548.82 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1565.2,1565.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1565.38,1569.27 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1569.27,1571.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1572.3,1572.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1572.27,1574.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1576.3,1581.32 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1581.32,1586.4 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1588.3,1592.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1592.18,1594.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1595.3,1596.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1596.17,1598.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1599.3,1599.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1602.2,1602.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1603.15,1618.32 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1618.32,1620.33 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1620.33,1621.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1621.40,1623.11 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1626.4,1638.6 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1640.3,1641.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1641.17,1643.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1644.3,1644.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1646.18,1648.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1648.17,1650.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1651.3,1651.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1653.10,1654.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1654.25,1656.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1657.3,1659.32 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1659.32,1661.33 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1661.33,1662.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1662.40,1664.11 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1667.4,1669.26 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1669.26,1671.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1672.4,1673.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1673.25,1675.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1676.4,1676.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1678.3,1678.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1690.51,1695.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1700.73,1702.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1702.16,1704.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1705.2,1706.48 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1706.48,1710.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1711.2,1713.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1713.16,1715.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1716.2,1716.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1727.117,1731.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1731.21,1733.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1734.2,1735.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1735.16,1737.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1738.2,1739.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1739.27,1741.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1742.2,1742.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1764.19,1775.30 7 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1775.30,1777.37 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1777.37,1779.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1781.3,1781.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1781.20,1783.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1797.2,1797.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1797.39,1799.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1801.2,1811.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1811.25,1813.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1815.2,1816.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1816.29,1818.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1824.2,1824.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1824.27,1826.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1831.2,1833.22 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1833.22,1835.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1837.2,1846.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1846.16,1848.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1853.2,1855.27 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1855.27,1857.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1859.2,1876.33 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1876.33,1878.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1880.2,1881.28 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1881.28,1885.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1885.20,1888.33 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1888.33,1889.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1889.40,1891.11 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1894.4,1894.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1894.20,1895.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1900.3,1900.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1900.22,1902.33 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1902.33,1903.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1903.50,1905.11 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1908.4,1908.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1908.19,1909.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1918.3,1918.56 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1918.56,1919.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1927.3,1927.64 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1927.64,1928.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1932.3,1935.32 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1935.32,1936.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1936.39,1938.10 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1942.3,1956.14 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1956.14,1957.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1957.37,1959.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1961.3,1962.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1962.26,1963.9 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1975.2,1975.59 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1975.59,1986.17 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1986.17,1988.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1990.3,1991.34 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1991.34,1993.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1995.3,1996.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1996.29,1998.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1998.21,2001.34 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2001.34,2002.41 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2002.41,2004.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2007.5,2007.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2007.21,2008.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2011.4,2011.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2011.23,2013.34 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2013.34,2014.51 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2014.51,2016.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2019.5,2019.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2019.20,2020.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2023.4,2023.57 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2023.57,2024.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2027.4,2027.65 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2027.65,2028.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2030.4,2031.33 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2031.33,2032.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2032.40,2034.11 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2037.4,2051.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2051.15,2052.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2052.38,2054.6 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2056.4,2057.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2057.27,2058.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2065.2,2066.28 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2066.28,2068.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2072.2,2072.71 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2072.71,2080.30 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2080.30,2081.41 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2081.41,2087.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2089.3,2089.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2089.13,2090.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2090.31,2095.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2095.25,2097.38 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2097.38,2099.7 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2101.5,2101.81 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2112.2,2112.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2112.38,2115.27 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2115.27,2117.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2121.3,2138.30 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2138.30,2140.11 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2140.11,2141.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2143.4,2160.15 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2160.15,2161.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2161.39,2163.6 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2165.4,2165.46 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2167.3,2173.24 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2173.24,2175.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2176.3,2176.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2179.2,2179.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2180.15,2182.24 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2182.24,2184.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2185.3,2185.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2187.18,2199.30 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2199.30,2201.11 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2201.11,2202.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2204.4,2208.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2208.15,2209.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2209.39,2211.6 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2213.4,2213.35 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2215.3,2216.24 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2216.24,2218.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2219.3,2219.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2220.10,2221.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2221.22,2223.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2224.3,2226.27 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2226.27,2228.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2228.20,2230.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2231.4,2233.26 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2233.26,2235.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2236.4,2237.23 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2237.23,2239.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2240.4,2240.46 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2240.46,2244.5 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2245.4,2245.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2247.3,2247.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2252.94,2254.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2254.16,2256.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2258.2,2260.18 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2260.18,2261.59 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2261.59,2262.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2262.36,2264.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2264.10,2266.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2270.2,2270.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2270.13,2272.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2273.2,2273.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2273.50,2275.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2277.2,2277.98 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2281.98,2282.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2282.26,2284.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2286.2,2287.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2287.16,2289.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2291.2,2292.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2292.13,2294.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2297.2,2298.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2298.19,2299.51 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2299.51,2301.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2302.3,2302.55 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2304.2,2304.42 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2304.42,2306.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2308.2,2308.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2308.54,2309.48 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2309.48,2311.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2312.3,2312.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2316.2,2318.53 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:17.82,19.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:21.149,22.55 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:22.55,24.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:25.2,25.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:25.36,27.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:28.2,34.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:34.16,36.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:37.2,37.42 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:37.42,39.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:40.2,40.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:43.105,44.48 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:44.48,46.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:47.2,48.54 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:51.129,53.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:53.16,55.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:56.2,57.53 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:57.53,59.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:60.2,61.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:61.25,63.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:64.2,65.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:65.16,67.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:68.2,68.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:26.97,27.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:27.18,29.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:30.2,30.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:33.37,35.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:37.81,38.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:38.44,40.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:41.2,41.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:41.38,43.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:44.2,44.57 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:47.88,48.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:48.32,50.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:51.2,52.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:52.20,54.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:55.2,55.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:58.40,72.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:74.106,75.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:75.34,77.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:78.2,79.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:79.16,81.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:83.2,84.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:84.16,86.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:88.2,89.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:89.13,91.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:93.2,94.63 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:94.63,96.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:98.2,98.72 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:98.72,100.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:102.2,106.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:109.117,110.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:110.32,112.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:113.2,113.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:113.34,115.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:117.2,118.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:118.16,120.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:121.2,121.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:121.19,123.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:125.2,126.69 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:126.69,128.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:130.2,136.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:18.33,20.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:22.27,37.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:39.93,40.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:40.30,42.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:43.2,43.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:43.28,45.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:46.2,47.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:47.16,49.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:51.2,52.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:52.17,54.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:55.2,56.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:56.19,58.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:59.2,59.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:59.19,61.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:62.2,63.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:63.16,65.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:67.2,74.9 3 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:74.9,76.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:77.2,78.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:78.15,80.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:81.2,85.16 4 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:85.16,87.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:88.2,88.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:88.17,90.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:92.2,101.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:104.48,105.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:105.16,107.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:108.2,109.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:109.29,111.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:112.2,112.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:112.31,114.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:115.2,115.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:118.75,120.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:120.27,121.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:121.32,123.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:123.17,124.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:126.4,126.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:129.2,134.33 3 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:134.33,136.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:137.2,137.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:137.40,138.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:138.39,140.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:141.3,141.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:143.2,143.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:143.34,145.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:146.2,147.35 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:147.35,149.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:150.2,150.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:153.77,154.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:154.20,156.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:157.2,159.31 3 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:159.31,160.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:160.33,162.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:163.3,163.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:163.30,165.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:167.2,170.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:23.91,25.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:27.38,50.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:52.104,53.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:53.38,55.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:56.2,57.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:57.16,59.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:61.2,62.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:62.26,64.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:65.2,66.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:66.30,68.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:69.2,69.72 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:69.72,71.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:73.2,74.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:74.16,76.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:77.2,78.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:78.16,80.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:81.2,82.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:82.16,84.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:85.2,86.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:86.16,88.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:90.2,105.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:105.16,107.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:109.2,109.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:109.19,117.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:118.2,118.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:118.25,120.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:121.2,121.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:121.30,123.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:124.2,124.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:124.31,126.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:127.2,128.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:128.16,130.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:131.2,131.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:134.91,136.9 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:136.9,138.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:139.2,140.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:140.15,141.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:141.19,143.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:144.3,144.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:146.2,146.94 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:149.59,150.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:150.16,152.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:153.2,154.61 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:154.61,156.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:157.2,157.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:160.56,161.75 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:161.75,163.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:164.2,164.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:167.67,169.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:170.17,171.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:172.67,173.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:174.10,175.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:179.60,180.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:180.16,182.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:183.2,184.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:184.25,186.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:187.2,187.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:190.57,191.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:192.15,193.81 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:193.81,195.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:196.3,196.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:197.19,199.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:199.17,201.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:202.3,202.55 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:202.55,204.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:205.3,205.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:206.14,207.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:208.11,209.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:210.10,211.41 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:215.59,216.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:216.16,218.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:219.2,219.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:220.12,221.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:222.14,223.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:224.10,225.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:28.90,30.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:30.16,32.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:34.2,36.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:37.16,38.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:40.16,42.140 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:44.20,46.140 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:48.17,50.142 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:52.17,56.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:56.50,62.63 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:62.63,64.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:66.4,66.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:66.45,68.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:72.4,74.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:74.25,76.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:77.4,77.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:80.3,80.101 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:82.18,84.141 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:86.18,88.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:88.18,90.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:91.3,91.41 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:93.17,96.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:96.50,99.59 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:99.59,101.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:102.4,104.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:104.25,106.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:107.4,107.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:110.3,110.98 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:112.10,116.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:125.86,126.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:126.16,128.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:129.2,130.9 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:130.9,132.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:133.2,133.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:133.22,135.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:137.2,139.31 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:139.31,141.10 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:141.10,143.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:144.3,145.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:145.22,147.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:148.3,149.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:149.26,151.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:152.3,152.68 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:152.68,154.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:155.3,156.37 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:156.37,158.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:159.3,160.107 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:162.2,162.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:165.249,166.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:166.24,168.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:169.2,169.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:169.38,171.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:173.2,174.31 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:174.31,175.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:175.32,177.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:180.2,181.34 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:181.34,182.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:182.29,183.9 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:185.3,197.17 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:197.17,199.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:200.3,200.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:200.20,201.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:203.3,203.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:203.37,205.33 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:205.33,206.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:208.4,208.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:208.19,209.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:209.43,210.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:212.5,212.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:214.4,215.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:215.30,216.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:220.2,220.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:223.113,229.2 5 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:231.101,233.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:247.92,251.16 4 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:251.16,253.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:253.8,253.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:253.24,255.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:259.2,272.51 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:272.51,274.38 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:274.38,275.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:276.50,277.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:278.12,279.107 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:287.2,292.26 5 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:292.26,294.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:297.2,297.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:297.19,301.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:303.2,311.42 5 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:311.42,315.3 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:316.2,341.64 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:341.64,342.86 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:342.86,344.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:345.3,345.56 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:345.56,347.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:348.3,360.19 6 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:360.19,364.4 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:365.3,365.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:369.2,370.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:370.15,372.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:372.27,374.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:375.3,375.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:375.27,377.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:380.2,381.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:381.15,387.28 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:387.28,395.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:395.18,397.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:398.4,398.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:398.23,399.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:401.4,401.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:401.30,402.66 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:402.66,403.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:405.5,406.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:406.12,407.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:409.5,409.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:409.28,413.6 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:414.5,415.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:415.30,416.11 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:419.4,420.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:420.30,421.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:424.8,432.28 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:432.28,438.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:438.18,440.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:441.4,441.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:441.23,442.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:444.4,444.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:444.30,445.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:445.40,447.31 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:447.31,448.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:452.4,455.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:455.30,456.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:461.2,465.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:465.17,467.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:469.2,470.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:470.16,472.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:473.2,473.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:20.79,21.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:21.43,23.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:24.2,24.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:24.29,26.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:27.2,27.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:30.40,63.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:65.68,71.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:71.25,74.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:75.2,75.67 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:78.62,83.19 3 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:83.19,87.3 3 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:88.2,88.89 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:91.101,92.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:92.22,94.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:95.2,96.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:96.18,98.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:99.2,100.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:100.16,102.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:103.2,104.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:104.16,106.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:107.2,107.119 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:110.99,111.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:111.22,113.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:114.2,115.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:115.18,117.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:118.2,119.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:119.16,121.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:122.2,122.51 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:122.51,124.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:125.2,126.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:126.16,128.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:129.2,131.15 3 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:131.15,132.69 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:132.69,134.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:135.3,135.58 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:137.2,137.130 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:140.102,142.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:142.16,144.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:145.2,145.64 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:145.64,147.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:148.2,148.113 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:151.109,153.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:153.16,155.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:156.2,157.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:157.16,159.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:160.2,161.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:161.16,163.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:164.2,164.67 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:167.107,169.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:169.16,171.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:172.2,173.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:173.16,175.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:176.2,176.107 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:176.107,178.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:179.2,179.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:180.41,181.63 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:182.41,183.95 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:184.10,185.83 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:189.111,191.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:191.16,193.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:194.2,195.57 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:195.57,197.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:198.2,199.23 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:199.23,201.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:202.2,203.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:203.16,205.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:206.2,206.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:206.17,208.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:209.2,209.108 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:212.63,215.2 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:217.69,219.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:219.16,221.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:222.2,222.79 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:225.60,227.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:227.16,229.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:230.2,230.57 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:233.137,234.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:234.49,236.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:237.2,238.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:238.16,240.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:241.2,243.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:243.16,245.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:246.2,247.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:247.16,249.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:250.2,250.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:250.22,252.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:253.2,253.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:256.142,258.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:258.16,260.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:261.2,262.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:262.16,264.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:265.2,265.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:265.47,267.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:268.2,269.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:269.16,270.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:270.50,272.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:273.3,273.89 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:275.2,275.173 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:278.157,280.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:280.16,282.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:283.2,283.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:283.47,285.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:286.2,287.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:287.16,288.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:288.50,290.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:291.3,291.89 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:293.2,293.169 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:296.104,297.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:297.22,299.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:300.2,301.61 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:301.61,303.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:303.20,304.9 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:307.2,307.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:307.19,309.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:310.2,317.8 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:320.119,322.39 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:322.39,323.81 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:323.81,325.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:327.2,327.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:330.71,332.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:332.16,334.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:335.2,335.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:17.61,105.23 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:105.23,122.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:123.2,123.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:126.104,127.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:127.61,129.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:130.2,130.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:130.38,132.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:133.2,134.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:134.16,136.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:137.2,138.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:138.16,140.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:141.2,147.107 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:147.107,149.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:150.2,151.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:151.16,153.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:154.2,170.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:170.19,172.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:173.2,173.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:176.103,177.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:177.61,179.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:180.2,180.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:180.38,182.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:183.2,184.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:184.16,186.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:187.2,191.106 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:191.106,193.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:194.2,195.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:195.16,197.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:198.2,200.31 3 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:200.31,207.36 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:207.36,218.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:219.3,220.35 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:222.2,230.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:233.107,234.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:234.61,236.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:237.2,237.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:237.38,239.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:240.2,241.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:241.16,243.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:244.2,248.110 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:248.110,250.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:251.2,252.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:252.16,254.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:255.2,256.33 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:256.33,266.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:267.2,275.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:278.108,279.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:279.61,281.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:282.2,282.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:282.37,284.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:285.2,286.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:286.16,288.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:289.2,290.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:290.19,292.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:293.2,293.104 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:293.104,295.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:296.2,297.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:297.16,299.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:300.2,307.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:307.16,309.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:310.2,311.43 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:311.43,318.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:319.2,332.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:332.22,334.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:335.2,335.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:338.108,339.62 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:339.62,341.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:342.2,342.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:342.38,344.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:345.2,346.9 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:346.9,348.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:349.2,350.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:350.16,352.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:353.2,357.16 5 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:357.16,359.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:360.2,370.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:373.109,374.62 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:374.62,376.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:377.2,377.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:377.38,379.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:380.2,381.9 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:381.9,383.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:384.2,385.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:385.16,387.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:388.2,390.32 3 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:390.32,392.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:393.2,394.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:394.16,396.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:397.2,403.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:406.106,407.62 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:407.62,409.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:410.2,410.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:410.38,412.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:413.2,414.9 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:414.9,416.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:417.2,418.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:418.16,420.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:421.2,423.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:423.16,424.41 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:424.41,434.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:435.3,435.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:437.2,445.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:483.65,484.42 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:484.42,485.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:485.39,487.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:489.2,489.85 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:489.85,491.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:492.2,492.95 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:495.102,496.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:496.38,498.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:499.2,499.58 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:499.58,501.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:502.2,502.90 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:505.60,508.2 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:510.66,512.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:512.26,514.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:515.2,515.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:518.69,521.33 3 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:521.33,523.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:523.21,524.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:526.3,526.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:526.34,527.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:529.3,530.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:532.2,532.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:535.63,537.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:537.19,539.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:540.2,541.42 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:541.42,543.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:544.2,544.57 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:544.57,546.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:547.2,547.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:547.54,549.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:550.2,550.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:553.70,557.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:559.66,561.9 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:561.9,563.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:564.2,566.17 3 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:566.17,568.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:569.2,569.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:570.103,572.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:573.34,574.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:575.10,576.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:580.56,581.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:581.37,583.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:584.2,584.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:584.26,586.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:586.37,587.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:589.3,589.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:591.2,591.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:594.90,602.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:604.68,605.71 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:605.71,607.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:607.17,609.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:610.3,610.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:612.2,613.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:613.16,615.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:616.2,617.41 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:617.41,619.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:620.2,620.78 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:623.65,625.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:625.16,627.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:628.2,628.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:628.17,630.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:631.2,631.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:634.51,635.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:635.16,637.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:638.2,638.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:641.56,642.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:642.28,644.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:645.2,646.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:649.92,651.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:651.29,653.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:654.2,654.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:657.86,659.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:659.29,661.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:662.2,662.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:665.94,667.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:667.29,669.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:670.2,670.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:673.98,675.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:675.29,677.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:678.2,678.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:17.93,18.104 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:18.104,20.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:22.2,23.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:23.16,25.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:27.2,28.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:28.19,30.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:32.2,35.33 3 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:35.33,36.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:36.47,39.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:42.2,44.20 3 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:44.20,47.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:48.2,49.68 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:49.68,50.48 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:50.48,52.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:53.3,53.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:53.32,55.23 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:55.23,56.63 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:56.63,58.6 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:59.5,59.53 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:61.4,61.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:64.2,71.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:71.17,73.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:73.8,73.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:73.29,75.36 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:75.36,77.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:78.3,83.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:86.2,86.35 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:86.35,88.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:90.2,97.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:97.16,99.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:101.2,110.28 3 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:110.28,112.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:113.2,124.16 4 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:124.16,126.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:127.2,127.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:133.93,134.35 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:134.35,136.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:138.2,139.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:139.16,141.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:143.2,144.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:144.16,146.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:147.2,147.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:147.17,149.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:151.2,152.33 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:152.33,153.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:153.47,156.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:159.2,160.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:160.16,162.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:164.2,176.26 3 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:176.26,178.23 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:178.23,180.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:181.3,192.5 3 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:195.2,196.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:196.16,198.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:199.2,199.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:22.104,24.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:24.16,26.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:28.2,29.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:29.18,31.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:33.2,33.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:34.13,35.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:36.13,37.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:38.14,39.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:40.16,41.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:42.10,43.95 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:51.67,53.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:57.68,58.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:58.33,60.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:61.2,61.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:67.42,69.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:74.61,76.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:76.26,78.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:79.2,79.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:85.90,86.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:86.49,88.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:90.2,91.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:91.15,93.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:94.2,95.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:95.17,97.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:100.2,103.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:103.16,105.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:107.2,113.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:113.12,115.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:115.18,117.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:118.3,119.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:119.20,121.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:122.3,124.48 3 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:125.8,127.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:129.2,130.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:130.16,132.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:134.2,139.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:145.90,147.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:147.15,149.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:151.2,152.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:152.16,154.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:156.2,157.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:157.16,158.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:158.47,160.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:161.3,161.56 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:164.2,170.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:170.19,173.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:173.8,175.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:176.2,176.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:181.92,183.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:183.16,185.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:187.2,188.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:188.16,190.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:192.2,200.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:200.25,207.28 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:207.28,209.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:210.3,210.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:212.2,212.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:216.93,217.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:217.52,219.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:221.2,222.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:222.15,224.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:226.2,227.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:227.16,229.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:231.2,231.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:231.47,232.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:232.47,234.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:235.3,235.59 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:238.2,241.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:35.127,36.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:36.23,38.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:39.2,40.40 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:40.40,42.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:43.2,43.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:43.37,45.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:46.2,46.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:46.37,48.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:49.2,49.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:52.23,80.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:82.26,140.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:142.92,143.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:143.25,145.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:147.2,148.49 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:148.49,150.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:152.2,152.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:153.17,154.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:154.24,156.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:157.3,158.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:158.17,160.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:161.3,165.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:166.17,167.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:167.22,169.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:170.3,170.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:170.22,172.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:173.3,174.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:174.17,176.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:177.3,181.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:182.16,189.23 7 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:189.23,191.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:192.3,192.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:192.24,194.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:195.3,195.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:195.39,197.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:198.3,207.17 3 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:207.17,209.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:210.3,210.69 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:210.69,212.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:213.3,213.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:214.10,215.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:219.92,220.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:220.25,222.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:224.2,225.49 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:225.49,227.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:229.2,229.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:230.17,232.24 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:232.24,234.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:235.3,236.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:236.17,238.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:239.3,239.59 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:239.59,241.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:242.3,242.81 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:242.81,244.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:245.3,250.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:251.17,253.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:253.22,255.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:256.3,257.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:257.17,259.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:260.3,260.79 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:260.79,262.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:263.3,268.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:269.10,270.66 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:274.91,276.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:276.16,278.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:279.2,279.67 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:279.67,280.76 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:280.76,282.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:285.2,286.52 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:286.52,288.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:289.2,289.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:292.74,294.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:294.16,296.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:297.2,297.62 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:297.62,299.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:300.2,300.68 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:303.109,304.56 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:304.56,306.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:307.2,307.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:307.25,309.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:310.2,310.81 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:310.81,312.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:313.2,313.102 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:313.102,315.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:316.2,316.108 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:316.108,318.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:319.2,319.99 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:319.99,321.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:322.2,322.99 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:322.99,324.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:325.2,325.60 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:325.60,327.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:328.2,328.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:328.34,330.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:331.2,331.114 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:331.114,333.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:334.2,334.66 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:334.66,336.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:337.2,337.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:337.40,339.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:340.2,340.132 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:340.132,342.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:343.2,343.35 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:343.35,345.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:346.2,346.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:349.92,350.103 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:350.103,352.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:354.2,355.52 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:355.52,357.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:358.2,358.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:358.32,360.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:361.2,361.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:364.108,365.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:365.19,367.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:368.2,369.53 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:369.53,371.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:372.2,372.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:372.19,374.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:375.2,375.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:375.39,376.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:376.34,378.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:380.2,380.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:383.66,385.53 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:385.53,387.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:388.2,388.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:388.19,390.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:391.2,391.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:10.101,12.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:12.16,14.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:16.2,18.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:19.16,20.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:21.14,22.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:23.15,24.84 1 0 +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:25.16,26.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:27.10,28.97 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:21.75,23.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:25.41,28.2 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:30.31,37.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:39.38,46.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:48.50,56.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:58.43,70.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:72.80,73.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:73.36,75.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:76.2,76.48 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:76.48,78.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:79.2,79.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:82.97,84.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:84.16,86.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:87.2,88.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:88.16,90.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:91.2,92.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:92.16,94.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:95.2,96.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:96.16,98.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:99.2,99.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:102.104,104.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:104.16,106.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:107.2,108.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:108.16,110.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:111.2,112.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:112.16,114.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:115.2,116.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:116.16,118.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:119.2,119.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:122.96,124.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:124.16,126.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:127.2,128.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:128.19,130.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:131.2,132.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:132.18,134.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:135.2,141.79 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:141.79,143.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:143.17,145.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:146.3,146.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:148.2,148.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:151.77,153.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:153.16,155.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:156.2,157.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:157.19,159.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:160.2,160.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:10.101,12.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:12.16,14.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:16.2,17.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:17.18,19.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:21.2,21.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:22.15,23.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:24.13,25.42 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:26.14,27.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:28.16,29.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:30.16,31.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:32.10,33.102 1 0 diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-01/create-database.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-01/create-database.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-01/create-database.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-01/create-database.stdout.log new file mode 100644 index 00000000..4b15bd57 --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-01/create-database.stdout.log @@ -0,0 +1 @@ +CREATE DATABASE diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-01/create-pgvector.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-01/create-pgvector.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-01/create-pgvector.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-01/create-pgvector.stdout.log new file mode 100644 index 00000000..d26bad14 --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-01/create-pgvector.stdout.log @@ -0,0 +1 @@ +CREATE EXTENSION diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-01/database-identity.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-01/database-identity.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-01/database-identity.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-01/database-identity.stdout.log new file mode 100644 index 00000000..b40288cb --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-01/database-identity.stdout.log @@ -0,0 +1 @@ +{"database" : "engram_prc_rg_test_08822acc1e43ac35_r1", "schema" : "public", "server_version" : "17.10 (Debian 17.10-1.pgdg12+1)", "user" : "engram"} diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-01/go-test-summary.json b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-01/go-test-summary.json new file mode 100644 index 00000000..ad51db94 --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-01/go-test-summary.json @@ -0,0 +1,40 @@ +{ + "schema_version": 1, + "verdict": "PASS", + "input_path": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-repeat3\\repeat-01\\go-test.stdout.jsonl", + "fail_on_unexpected_skip": true, + "allowed_skip_identities": [], + "counts": { + "packages": 1, + "tests": 1, + "passed": 1, + "failed": 0, + "skipped": 0, + "no_tests": 0, + "zero_tests": 0, + "incomplete": 0, + "unexpected_skips": 0, + "malformed_lines": 0 + }, + "packages": [ + { + "package": "github.com/thebtf/engram/internal/mcp", + "outcome": "pass", + "elapsed_seconds": 4.023, + "last_output": "ok \tgithub.com/thebtf/engram/internal/mcp\t4.013s\tcoverage: 0.1% of statements", + "tests_observed": 1 + } + ], + "tests": [ + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestEC_F1_TagDerivedBackfill_T007", + "outcome": "pass", + "elapsed_seconds": 3.89, + "last_output": "--- PASS: TestEC_F1_TagDerivedBackfill_T007 (3.89s)", + "skip_allowed": false + } + ], + "unexpected_skips": [], + "errors": [] +} diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-01/go-test.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-01/go-test.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-01/go-test.stdout.jsonl b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-01/go-test.stdout.jsonl new file mode 100644 index 00000000..fdfe2bf3 --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-01/go-test.stdout.jsonl @@ -0,0 +1,16 @@ +{"Time":"2026-07-11T03:53:31.8291372+03:00","Action":"start","Package":"github.com/thebtf/engram/internal/mcp"} +{"Time":"2026-07-11T03:53:31.9181379+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007"} +{"Time":"2026-07-11T03:53:31.9181379+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":"=== RUN TestEC_F1_TagDerivedBackfill_T007\n"} +{"Time":"2026-07-11T03:53:32.7706374+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":"{\"level\":\"warn\",\"error\":\"ERROR: relation \\\"observation_vectors\\\" does not exist (SQLSTATE 42P01)\",\"time\":\"2026-07-11T03:53:32+03:00\",\"message\":\"migration 040: orphan vector cleanup failed (non-fatal)\"}\n"} +{"Time":"2026-07-11T03:53:32.7706374+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":"{\"level\":\"info\",\"garbage_deleted\":0,\"orphan_vectors_deleted\":0,\"time\":\"2026-07-11T03:53:32+03:00\",\"message\":\"migration 040: garbage cleanup complete\"}\n"} +{"Time":"2026-07-11T03:53:32.7791375+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":"{\"level\":\"info\",\"orphan_vectors_deleted\":0,\"time\":\"2026-07-11T03:53:32+03:00\",\"message\":\"migration 041: orphan vector purge complete\"}\n"} +{"Time":"2026-07-11T03:53:32.7871381+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":"{\"level\":\"info\",\"patterns_deleted\":0,\"time\":\"2026-07-11T03:53:32+03:00\",\"message\":\"migration 042: low-quality pattern purge complete\"}\n"} +{"Time":"2026-07-11T03:53:32.8221382+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":"{\"level\":\"info\",\"total_deleted\":0,\"time\":\"2026-07-11T03:53:32+03:00\",\"message\":\"migration 043: radical observation cleanup complete\"}\n"} +{"Time":"2026-07-11T03:53:34.0977369+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":"{\"level\":\"warn\",\"error\":\"ERROR: extension \\\"vectorscale\\\" is not available (SQLSTATE 0A000)\",\"time\":\"2026-07-11T03:53:34+03:00\",\"message\":\"migration 109: vectorscale extension not available, skipping DiskANN index\"}\n"} +{"Time":"2026-07-11T03:53:35.4372054+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":"{\"level\":\"debug\",\"connections\":1,\"time\":\"2026-07-11T03:53:35+03:00\",\"message\":\"Connection pool warmed\"}\n"} +{"Time":"2026-07-11T03:53:35.8091407+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":"--- PASS: TestEC_F1_TagDerivedBackfill_T007 (3.89s)\n"} +{"Time":"2026-07-11T03:53:35.8091407+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Elapsed":3.89} +{"Time":"2026-07-11T03:53:35.8091407+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Output":"PASS\n"} +{"Time":"2026-07-11T03:53:35.8241416+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Output":"coverage: 0.1% of statements\n"} +{"Time":"2026-07-11T03:53:35.8521419+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Output":"ok \tgithub.com/thebtf/engram/internal/mcp\t4.013s\tcoverage: 0.1% of statements\n"} +{"Time":"2026-07-11T03:53:35.8521419+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Elapsed":4.023} diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-01/pg-stat-activity-after.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-01/pg-stat-activity-after.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-01/pg-stat-activity-after.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-01/pg-stat-activity-after.stdout.log new file mode 100644 index 00000000..fe51488c --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-01/pg-stat-activity-after.stdout.log @@ -0,0 +1 @@ +[] diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-01/pg-stat-activity-before.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-01/pg-stat-activity-before.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-01/pg-stat-activity-before.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-01/pg-stat-activity-before.stdout.log new file mode 100644 index 00000000..fe51488c --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-01/pg-stat-activity-before.stdout.log @@ -0,0 +1 @@ +[] diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-01/repeat-summary.json b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-01/repeat-summary.json new file mode 100644 index 00000000..d0d77e3f --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-01/repeat-summary.json @@ -0,0 +1,33 @@ +{ + "repeat": 1, + "verdict": "PASS", + "database": "engram_prc_rg_test_08822acc1e43ac35_r1", + "schema": "public", + "database_schema_identity": "engram_prc_rg_test_08822acc1e43ac35_r1.public", + "database_dsn": "REDACTED_DATABASE_DSN", + "database_create_confirmed": true, + "sequential_execution": { + "package_parallelism": 1, + "test_parallelism": 1 + }, + "race": false, + "connection_budget": 20, + "server_sessions_before": 6, + "server_sessions_after": 6, + "sessions_before": 0, + "sessions_after": 0, + "go_test_exit": 0, + "json_parser_exit": 0, + "coverage_policy": "Targeted", + "coverage_exit": 0, + "cleanup_exit": 0, + "cleanup_status": "PASS", + "required_session_start_execution": { + "schema_version": 1, + "verdict": "NOT_APPLICABLE", + "reason": "only an unfiltered canonical ./... run requires the 12-test session-start execution proof" + }, + "cleanup_summary": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-repeat3\\repeat-01\\cleanup\\cleanup.json", + "errors": [], + "artifact_directory": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-repeat3\\repeat-01" +} diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-01/server-connection-count-after.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-01/server-connection-count-after.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-01/server-connection-count-after.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-01/server-connection-count-after.stdout.log new file mode 100644 index 00000000..1e8b3149 --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-01/server-connection-count-after.stdout.log @@ -0,0 +1 @@ +6 diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-01/server-connection-count-before.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-01/server-connection-count-before.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-01/server-connection-count-before.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-01/server-connection-count-before.stdout.log new file mode 100644 index 00000000..1e8b3149 --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-01/server-connection-count-before.stdout.log @@ -0,0 +1 @@ +6 diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-01/targeted-coverage.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-01/targeted-coverage.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-01/targeted-coverage.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-01/targeted-coverage.stdout.log new file mode 100644 index 00000000..c958686c --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-01/targeted-coverage.stdout.log @@ -0,0 +1,352 @@ +github.com/thebtf/engram/internal/mcp/audit_helpers.go:33: effectiveAuditWriter 0.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:44: isAuditEnabled 0.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:52: runAuditAsync 0.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:77: marshalState 0.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:92: logAuditCreate 0.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:117: logAuditEdit 0.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:142: logAuditDelete 0.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:166: logAuditGeneric 0.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:189: logAuditSupersede 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:30: parseArgs 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:46: coerceString 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:67: coerceInt 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:97: coerceInt64 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:127: coerceFloat64 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:151: coerceBool 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:177: coerceStringSlice 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:204: coerceInt64Slice 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:222: clampToInt 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:236: clampInt64ToInt 0.0% +github.com/thebtf/engram/internal/mcp/context.go:17: extractProjectFromHeader 0.0% +github.com/thebtf/engram/internal/mcp/context.go:22: contextWithProject 0.0% +github.com/thebtf/engram/internal/mcp/context.go:29: ContextWithProject 0.0% +github.com/thebtf/engram/internal/mcp/context.go:35: projectFromContext 0.0% +github.com/thebtf/engram/internal/mcp/context.go:41: contextWithSession 0.0% +github.com/thebtf/engram/internal/mcp/context.go:48: ContextWithSession 0.0% +github.com/thebtf/engram/internal/mcp/context.go:54: sessionFromContext 0.0% +github.com/thebtf/engram/internal/mcp/context.go:61: actorFromContext 0.0% +github.com/thebtf/engram/internal/mcp/health.go:22: NewMCPHealth 0.0% +github.com/thebtf/engram/internal/mcp/health.go:29: RecordRequest 0.0% +github.com/thebtf/engram/internal/mcp/health.go:36: RecordError 0.0% +github.com/thebtf/engram/internal/mcp/health.go:42: rotateWindowIfNeeded 0.0% +github.com/thebtf/engram/internal/mcp/health.go:55: HandleHealth 0.0% +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:28: ruleGovernanceCaptureEnabled 0.0% +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:39: captureActiveRuleIntent 0.0% +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:104: ruleIntentFingerprint 0.0% +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:113: marshalRuleCandidateIntentResponse 0.0% +github.com/thebtf/engram/internal/mcp/server.go:127: NewServer 100.0% +github.com/thebtf/engram/internal/mcp/server.go:141: SetBackfillStatusFunc 0.0% +github.com/thebtf/engram/internal/mcp/server.go:146: SetVersionedDocumentStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:151: SetIssueStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:156: SetMemoryStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:161: SetMetaMemoryIndex 0.0% +github.com/thebtf/engram/internal/mcp/server.go:166: SetHintQueue 0.0% +github.com/thebtf/engram/internal/mcp/server.go:171: SetStateStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:176: SetDirectiveCaptureService 0.0% +github.com/thebtf/engram/internal/mcp/server.go:181: SetBehavioralRulesStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:186: SetRuleGovernanceStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:191: SetRuleInjectionTelemetryStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:195: SetPromotionStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:199: SetGraphStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:204: SetNodesStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:211: SetAuditStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:216: SetPurgeStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:222: SetCandidateStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:228: SetSnapshotStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:234: SetBulkFacade 0.0% +github.com/thebtf/engram/internal/mcp/server.go:240: setTestAuditWriter 0.0% +github.com/thebtf/engram/internal/mcp/server.go:246: setTestMemoryEditor 0.0% +github.com/thebtf/engram/internal/mcp/server.go:252: setTestMemorySignificanceUpdater 0.0% +github.com/thebtf/engram/internal/mcp/server.go:260: SetWriteLintOrchestrator 0.0% +github.com/thebtf/engram/internal/mcp/server.go:269: SetRedactionRules 0.0% +github.com/thebtf/engram/internal/mcp/server.go:274: SetEmbeddingStores 0.0% +github.com/thebtf/engram/internal/mcp/server.go:282: SetRerankClient 0.0% +github.com/thebtf/engram/internal/mcp/server.go:290: SetStatsDB 0.0% +github.com/thebtf/engram/internal/mcp/server.go:297: HandleRequest 0.0% +github.com/thebtf/engram/internal/mcp/server.go:303: ListTools 0.0% +github.com/thebtf/engram/internal/mcp/server.go:332: Version 0.0% +github.com/thebtf/engram/internal/mcp/server.go:383: Run 0.0% +github.com/thebtf/engram/internal/mcp/server.go:427: handleRequest 0.0% +github.com/thebtf/engram/internal/mcp/server.go:461: handleNotification 0.0% +github.com/thebtf/engram/internal/mcp/server.go:473: handleInitialize 0.0% +github.com/thebtf/engram/internal/mcp/server.go:496: buildInstructions 0.0% +github.com/thebtf/engram/internal/mcp/server.go:660: storeMemoryTool 0.0% +github.com/thebtf/engram/internal/mcp/server.go:712: recallMemoryTool 0.0% +github.com/thebtf/engram/internal/mcp/server.go:805: primaryTools 0.0% +github.com/thebtf/engram/internal/mcp/server.go:942: handleToolsList 0.0% +github.com/thebtf/engram/internal/mcp/server.go:1612: handleToolsCall 0.0% +github.com/thebtf/engram/internal/mcp/server.go:1644: sanitizeToolCallArgs 0.0% +github.com/thebtf/engram/internal/mcp/server.go:1656: callTool 0.0% +github.com/thebtf/engram/internal/mcp/server.go:1874: sendResponse 0.0% +github.com/thebtf/engram/internal/mcp/server.go:1884: sendError 0.0% +github.com/thebtf/engram/internal/mcp/server.go:1896: handleFindSimilarObservations 0.0% +github.com/thebtf/engram/internal/mcp/server.go:1927: handleGetMemoryStats 0.0% +github.com/thebtf/engram/internal/mcp/server.go:2055: handleBackfillStatus 0.0% +github.com/thebtf/engram/internal/mcp/server.go:2071: handleCheckSystemHealth 0.0% +github.com/thebtf/engram/internal/mcp/server.go:2216: handleAnalyzeSearchPatterns 0.0% +github.com/thebtf/engram/internal/mcp/server.go:2246: handleSearchSessions 0.0% +github.com/thebtf/engram/internal/mcp/server.go:2251: handleListSessions 0.0% +github.com/thebtf/engram/internal/mcp/tools_admin.go:18: buildAdminTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_admin.go:68: adminActionsForEnv 33.3% +github.com/thebtf/engram/internal/mcp/tools_admin.go:80: vnextEnabled 0.0% +github.com/thebtf/engram/internal/mcp/tools_admin.go:84: handleAdmin 0.0% +github.com/thebtf/engram/internal/mcp/tools_admin.go:120: handlePurgeProject 0.0% +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:27: ambientHintsEnabledFromEnv 0.0% +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:32: ambientHintsTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:48: handleGetAmbientHints 0.0% +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:86: normalizeAmbientHintsToolLimit 0.0% +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:96: ambientHintItems 0.0% +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:114: errMissingSessionID 0.0% +github.com/thebtf/engram/internal/mcp/tools_brief.go:31: handleGetMemoryBrief 0.0% +github.com/thebtf/engram/internal/mcp/tools_brief.go:107: memoryBriefUsesPrincipalScope 0.0% +github.com/thebtf/engram/internal/mcp/tools_brief.go:115: handlePrincipalMemoryBrief 0.0% +github.com/thebtf/engram/internal/mcp/tools_brief.go:259: truncateBriefContent 0.0% +github.com/thebtf/engram/internal/mcp/tools_brief.go:270: filterInjectionByScope 0.0% +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:25: bulkOpsTools 0.0% +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:95: handleBulkPromote 0.0% +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:154: handleBulkDelete 0.0% +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:211: handleBulkSupersede 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:31: candidateItemFromDomain 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:51: newCandidateReviewSnapshot 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:59: requireCandidateReviewSnapshot 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:68: candidateTools 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:165: handleListCandidates 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:208: handleGetCandidate 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:239: handlePromoteCandidate 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:348: handleRejectCandidate 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:402: handleSupersedeCandidate 0.0% +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:34: codeIntelEnabled 0.0% +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:42: SetCodeChunkStore 0.0% +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:48: codebaseSearchTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:79: codebaseStatusTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:100: handleCodebaseSearch 0.0% +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:194: handleCodebaseStatus 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:21: getVault 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:35: credentialStore 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:49: handleStoreCredential 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:130: handleGetCredential 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:192: handleListCredentials 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:243: handleDeleteCredential 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:302: handleVaultStatus 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:338: expandTagHierarchy 0.0% +github.com/thebtf/engram/internal/mcp/tools_directives.go:16: directivesCaptureEnabledFromEnv 0.0% +github.com/thebtf/engram/internal/mcp/tools_directives.go:20: rememberDirectiveTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_directives.go:38: currentDirectiveCaptureService 0.0% +github.com/thebtf/engram/internal/mcp/tools_directives.go:48: handleRememberDirective 0.0% +github.com/thebtf/engram/internal/mcp/tools_directives.go:72: parseRememberDirectiveArgs 0.0% +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:10: handleDocsConsolidated 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents.go:15: handleListCollections 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents.go:61: handleListDocuments 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents.go:121: handleGetDocument 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents.go:165: handleRemoveDocument 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents.go:197: handleIngestDocument 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents.go:235: handleSearchCollection 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:15: handleDocCreate 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:61: handleDocRead 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:117: handleDocUpdate 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:122: handleDocList 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:175: handleDocHistory 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:232: handleDocComment 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:19: SetExperienceProvider 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:23: experienceHistoryTools 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:40: experienceHistoryReadSchema 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:65: experienceHistoryDetailSchema 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:82: experienceHistoryTriggerEnum 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:91: handleExperienceHistoryRead 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:103: handleExperienceHistoryDetail 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:115: parseExperienceHistoryReadArgs 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:142: parseExperienceHistoryDetailArgs 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:157: experienceHistoryTriggersFromArgs 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:180: marshalExperienceHistory 0.0% +github.com/thebtf/engram/internal/mcp/tools_feedback.go:12: handleFeedbackConsolidated 0.0% +github.com/thebtf/engram/internal/mcp/tools_feedback.go:36: handleSetSessionOutcome 0.0% +github.com/thebtf/engram/internal/mcp/tools_governance.go:27: governanceTools 0.0% +github.com/thebtf/engram/internal/mcp/tools_governance.go:98: handleListSnapshots 0.0% +github.com/thebtf/engram/internal/mcp/tools_governance.go:167: handleRollbackSnapshot 0.0% +github.com/thebtf/engram/internal/mcp/tools_governance.go:215: handlePinSnapshot 0.0% +github.com/thebtf/engram/internal/mcp/tools_governance.go:258: handleRedactionRulesStatus 0.0% +github.com/thebtf/engram/internal/mcp/tools_governance.go:284: resolveGovernanceActor 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:64: handleGraph 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:100: graphAddEdge 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:216: mcpGraphEndpointExists 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:243: mcpGraphEdgeAlreadyExists 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:276: graphAddNode 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:317: graphRemoveEdge 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:332: graphGetEdges 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:397: filterEdgesByNodeType 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:457: graphTraverse 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:480: graphFindPath 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:502: graphSynonyms 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:23: graphCreateEdgeWithGuards 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:80: graphEndpointExistsWithGuards 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:114: graphDuplicateEdgeExists 0.0% +github.com/thebtf/engram/internal/mcp/tools_ingest.go:25: handleIngest 0.0% +github.com/thebtf/engram/internal/mcp/tools_ingest.go:43: ingestDocument 0.0% +github.com/thebtf/engram/internal/mcp/tools_instincts.go:20: handleImportInstincts 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:19: issuesToolSchema 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:109: validateIssueActionParams 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:143: handleIssues 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:189: resolveSourceProject 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:205: handleIssueCreate 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:250: handleIssueList 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:311: handleIssueGet 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:344: handleIssueUpdate 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:382: handleIssueComment 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:408: handleIssueReopen 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:425: handleIssueClose 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:22: handleLifecycle 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:48: lifecycleInfo 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:87: lifecyclePromote 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:118: lifecycleDemote 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:149: lifecycleSetConfidence 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:172: lifecycleSetDefeasibility 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:191: lifecycleSleepStatus 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:197: lifecycleDecayPreview 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:233: marshalJSON 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:35: vnextFEnabled 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:42: isValidPrivacyScope 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:54: derivePrivacyScopeFromLegacy 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:82: deriveLegacyScopeFromPrivacy 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:93: applyPrincipalMemoryMetadata 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:135: addPrincipalMemoryFields 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:161: newScopedWriteLintMemoryStore 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:172: writeLintVisibilityCaller 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:186: writeLintVisibilityOptions 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:192: scopedWriteLintMemoryStore 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:202: filterVisibleWriteGateCandidates 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:214: domainManageAllowed 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:218: List 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:272: writeLintVisibilityFetchLimit 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:286: Get 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:297: Create 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:301: Update 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:305: MarkSuperseded 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:319: effectiveMemoryEditor 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:329: isValidStoreObservationType 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:354: handleStoreMemory 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1111: handleEditMemory 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1218: computeTTLDays 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1258: truncateTitle 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1270: keepRecallMemory 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1280: keepRecallMemoryFilters 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1342: handleRecallMemory 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1690: staleAdvisory 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1700: marshalWithStaleAdvisory 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1727: Rank 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1751: handleRecallMemoryHybrid 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:2252: handleRateMemory 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:2281: handleSuppressMemory 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:17: SetDomainRegistryService 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:21: checkDomainWriteMCP 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:43: addDomainWriteDecisionFields 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:51: marshalStoreMemoryAugmented 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:26: newMemoryStoreSignificanceUpdater 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:33: s6OutcomeEnabledFromEnv 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:37: effectiveMemorySignificanceUpdater 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:47: currentMemorySignificanceUpdater 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:58: rateMemorySignificanceTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:74: handleRateMemorySignificance 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:109: RateMemorySignificance 0.0% +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:18: s2MetaMemoryEnabled 0.0% +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:22: knowAboutTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:39: handleKnowAbout 0.0% +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:104: parseKnowAboutLimit 0.0% +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:118: summarizeMetaIndexTags 0.0% +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:153: summarizeMetaIndexDateRange 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:23: SetPrincipalMemoryQueryService 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:27: principalMemoryQueryTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:52: handleQueryPrincipalMemory 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:134: principalMemoryQueryCaller 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:149: parsePrincipalMemoryQueryLimit 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:160: principalMemoryQueryText 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:167: parsePrincipalMemoryQueryVisibility 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:179: parsePrincipalMemoryQueryOffset 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:190: parsePrincipalMemoryQueryInt 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:215: parsePrincipalMemoryQueryBool 0.0% +github.com/thebtf/engram/internal/mcp/tools_recall.go:28: handleRecall 0.0% +github.com/thebtf/engram/internal/mcp/tools_recall.go:125: parseRecallIncludedPrincipals 0.0% +github.com/thebtf/engram/internal/mcp/tools_recall.go:165: appendRecallIncludedPrincipalMemories 0.0% +github.com/thebtf/engram/internal/mcp/tools_recall.go:223: recallIncludeTargetMatchesCaller 0.0% +github.com/thebtf/engram/internal/mcp/tools_recall.go:231: recallPrincipalQueryItemToMemory 0.0% +github.com/thebtf/engram/internal/mcp/tools_recall.go:247: handleRecallSearch 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:20: currentReviewLoopCandidateLister 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:30: reviewLoopCandidateTools 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:65: reviewLoopReadSchema 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:78: reviewPacketIDSchema 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:91: handleReviewMetricsRead 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:110: handleReviewQueueRead 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:140: handleReviewPacketDetail 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:151: handleReviewPacketPreviewAction 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:167: handleReviewPacketApplyAction 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:189: parseReviewLoopReadArgs 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:212: reviewLoopMCPPacketTypeSupported 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:217: reviewLoopActionFromArgs 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:225: reviewLoopReasonFromArgs 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:233: loadReviewPacketCandidate 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:256: applyReviewPacketPreserve 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:278: applyReviewPacketSuppress 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:296: reviewLoopMemoryFromCandidate 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:320: filterRiskyMCPReviewCandidates 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:330: marshalReviewLoop 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:17: ruleGovernanceReadTools 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:126: handleRuleGovernanceHealth 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:176: handleRuleGovernanceQueue 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:233: handleRuleGovernanceSnapshots 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:278: handleRuleGovernanceUsefulness 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:338: handleRuleGovernanceTransition 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:373: handleRuleGovernancePinSnapshot 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:406: handleRuleGovernanceRollback 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:483: requireRuleGovernanceReadAccess 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:495: requireRuleGovernanceProjectOrAdmin 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:505: ruleGovernanceCallerIsAdmin 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:510: requireRuleGovernanceAdminAccess 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:518: redactRuleGovernanceEvidenceHandles 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:535: redactRuleGovernanceEvidenceHandle 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:553: ruleGovernanceEvidenceHandleHasSensitiveText 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:559: isCanonicalRuleGovernanceEvidenceHandle 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:580: isSafeRuleGovernanceEvidenceID 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:594: parseRuleGovernanceTransitionRequest 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:604: parseRuleGovernanceSince 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:623: boundedRuleGovernanceLimit 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:634: formatRuleGovernanceTime 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:641: formatRuleGovernanceTimePtr 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:649: stringRuleCandidateStatusCounts 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:657: stringRuleVersionStateCounts 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:665: stringRuleArbiterRunStatusCounts 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:673: stringRuleInjectionEventTypeCounts 0.0% +github.com/thebtf/engram/internal/mcp/tools_rules.go:17: handleStoreRule 0.0% +github.com/thebtf/engram/internal/mcp/tools_rules.go:133: handleListRules 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:22: handleSettingsConsolidated 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:51: SetSettingsStore 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:57: settingsStore 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:67: isSecretSettingKey 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:74: requireAdmin 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:85: handleSetSetting 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:145: handleGetSetting 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:181: handleListSettings 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:216: handleDeleteSetting 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:35: resumeScopesFromFields 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:52: stateTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:82: setStateTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:142: handleGetState 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:219: handleSetState 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:274: decodeSessionStateForWrite 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:292: validateSessionStateBudget 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:303: validateNativeResumePacket 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:349: decodeProjectStateForWrite 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:364: requireStateObject 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:383: requireNestedObject 0.0% +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:10: handleStoreConsolidated 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:21: SetTemporalTruthProvider 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:25: temporalTruthEnabledFromEnv 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:30: temporalTruthTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:39: temporalTruthRefreshTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:48: temporalTruthRefreshSchema 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:58: temporalTruthSchema 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:72: currentTemporalTruthProvider 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:82: handleTemporalTruth 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:102: handleTemporalTruthRefresh 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:122: parseTemporalTruthArgs 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:151: parseTemporalTruthRefreshProject 0.0% +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:10: handleVaultConsolidated 0.0% +total: (statements) 0.1% diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-02/assert-go-test-json.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-02/assert-go-test-json.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-02/assert-go-test-json.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-02/assert-go-test-json.stdout.log new file mode 100644 index 00000000..72db0735 --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-02/assert-go-test-json.stdout.log @@ -0,0 +1,2 @@ +go test JSON verdict=PASS packages=1 tests=1 passed=1 failed=0 skipped=0 unexpected_skips=0 malformed=0 +summary=D:\Dev\engram\.w\t007-r1-checker\.agent\reviews\t007-r1-fresh-checker\evidence\focused-repeat3\repeat-02\go-test-summary.json diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-02/cleanup-process.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-02/cleanup-process.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-02/cleanup-process.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-02/cleanup-process.stdout.log new file mode 100644 index 00000000..94a3967b --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-02/cleanup-process.stdout.log @@ -0,0 +1,2 @@ +cleanup verdict=PASS database=engram_prc_rg_test_08822acc1e43ac35_r2 schema=public terminated_sessions=0 remaining_database_count=0 +summary=D:\Dev\engram\.w\t007-r1-checker\.agent\reviews\t007-r1-fresh-checker\evidence\focused-repeat3\repeat-02\cleanup\cleanup.json diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-02/cleanup/cleanup.json b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-02/cleanup/cleanup.json new file mode 100644 index 00000000..9b76dea6 --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-02/cleanup/cleanup.json @@ -0,0 +1,170 @@ +{ + "schema_version": 1, + "run_id": "focused-repeat3-repeat-2", + "timestamp": "2026-07-11T00:53:56.3555545+00:00", + "verdict": "PASS", + "database": "engram_prc_rg_test_08822acc1e43ac35_r2", + "schema": "public", + "database_schema_identity": "engram_prc_rg_test_08822acc1e43ac35_r2.public", + "admin_dsn": "postgresql://engram:REDACTED@127.0.0.1:55432/postgres?sslmode=disable", + "postgres_container": "engram-prc-postgres", + "cleanup_status": "PASS", + "cleanup_attempted": true, + "database_existed_before": true, + "absence_verified": true, + "terminated_sessions": 0, + "remaining_database_count": 0, + "commands": [ + { + "name": "database-exists-before-cleanup", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT count(*) FROM pg_database WHERE datname = 'engram_prc_rg_test_08822acc1e43ac35_r2';" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT count(*) FROM pg_database WHERE datname = 'engram_prc_rg_test_08822acc1e43ac35_r2';", + "started_at": "2026-07-11T00:53:52.5768696+00:00", + "finished_at": "2026-07-11T00:53:53.3124299+00:00", + "duration_seconds": 0.736, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-repeat3\\repeat-02\\cleanup\\database-exists-before.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-repeat3\\repeat-02\\cleanup\\database-exists-before.stderr.log" + }, + { + "name": "pg-stat-activity-before-cleanup", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT COALESCE(json_agg(row_to_json(s)), '[]'::json)::text FROM (SELECT pid, usename, datname, state, backend_type, application_name, client_addr::text AS client_addr, wait_event_type, wait_event, query_start FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_08822acc1e43ac35_r2' ORDER BY pid) AS s;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT COALESCE(json_agg(row_to_json(s)), '[]'::json)::text FROM (SELECT pid, usename, datname, state, backend_type, application_name, client_addr::text AS client_addr, wait_event_type, wait_event, query_start FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_08822acc1e43ac35_r2' ORDER BY pid) AS s;", + "started_at": "2026-07-11T00:53:53.4136315+00:00", + "finished_at": "2026-07-11T00:53:54.0303638+00:00", + "duration_seconds": 0.617, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-repeat3\\repeat-02\\cleanup\\pg-stat-activity-before.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-repeat3\\repeat-02\\cleanup\\pg-stat-activity-before.stderr.log" + }, + { + "name": "terminate-database-sessions", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT COALESCE(json_agg(row_to_json(s)), '[]'::json)::text FROM (SELECT pid, pg_terminate_backend(pid) AS terminated FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_08822acc1e43ac35_r2' AND pid <> pg_backend_pid() ORDER BY pid) AS s;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT COALESCE(json_agg(row_to_json(s)), '[]'::json)::text FROM (SELECT pid, pg_terminate_backend(pid) AS terminated FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_08822acc1e43ac35_r2' AND pid <> pg_backend_pid() ORDER BY pid) AS s;", + "started_at": "2026-07-11T00:53:54.0382335+00:00", + "finished_at": "2026-07-11T00:53:54.7490309+00:00", + "duration_seconds": 0.711, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-repeat3\\repeat-02\\cleanup\\terminate-sessions.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-repeat3\\repeat-02\\cleanup\\terminate-sessions.stderr.log" + }, + { + "name": "drop-fresh-database", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "DROP DATABASE IF EXISTS \"engram_prc_rg_test_08822acc1e43ac35_r2\" WITH (FORCE);" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c DROP DATABASE IF EXISTS \"engram_prc_rg_test_08822acc1e43ac35_r2\" WITH (FORCE);", + "started_at": "2026-07-11T00:53:54.7618115+00:00", + "finished_at": "2026-07-11T00:53:55.6744952+00:00", + "duration_seconds": 0.913, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-repeat3\\repeat-02\\cleanup\\drop-database.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-repeat3\\repeat-02\\cleanup\\drop-database.stderr.log" + }, + { + "name": "verify-database-absent", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT count(*) FROM pg_database WHERE datname = 'engram_prc_rg_test_08822acc1e43ac35_r2';" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT count(*) FROM pg_database WHERE datname = 'engram_prc_rg_test_08822acc1e43ac35_r2';", + "started_at": "2026-07-11T00:53:55.6799485+00:00", + "finished_at": "2026-07-11T00:53:56.3466989+00:00", + "duration_seconds": 0.667, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-repeat3\\repeat-02\\cleanup\\verify-database-absent.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-repeat3\\repeat-02\\cleanup\\verify-database-absent.stderr.log" + } + ], + "errors": [] +} diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-02/cleanup/database-exists-before.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-02/cleanup/database-exists-before.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-02/cleanup/database-exists-before.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-02/cleanup/database-exists-before.stdout.log new file mode 100644 index 00000000..d00491fd --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-02/cleanup/database-exists-before.stdout.log @@ -0,0 +1 @@ +1 diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-02/cleanup/drop-database.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-02/cleanup/drop-database.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-02/cleanup/drop-database.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-02/cleanup/drop-database.stdout.log new file mode 100644 index 00000000..ca12dce0 --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-02/cleanup/drop-database.stdout.log @@ -0,0 +1 @@ +DROP DATABASE diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-02/cleanup/pg-stat-activity-before.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-02/cleanup/pg-stat-activity-before.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-02/cleanup/pg-stat-activity-before.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-02/cleanup/pg-stat-activity-before.stdout.log new file mode 100644 index 00000000..fe51488c --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-02/cleanup/pg-stat-activity-before.stdout.log @@ -0,0 +1 @@ +[] diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-02/cleanup/terminate-sessions.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-02/cleanup/terminate-sessions.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-02/cleanup/terminate-sessions.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-02/cleanup/terminate-sessions.stdout.log new file mode 100644 index 00000000..fe51488c --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-02/cleanup/terminate-sessions.stdout.log @@ -0,0 +1 @@ +[] diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-02/cleanup/verify-database-absent.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-02/cleanup/verify-database-absent.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-02/cleanup/verify-database-absent.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-02/cleanup/verify-database-absent.stdout.log new file mode 100644 index 00000000..573541ac --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-02/cleanup/verify-database-absent.stdout.log @@ -0,0 +1 @@ +0 diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-02/connection-count-after.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-02/connection-count-after.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-02/connection-count-after.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-02/connection-count-after.stdout.log new file mode 100644 index 00000000..573541ac --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-02/connection-count-after.stdout.log @@ -0,0 +1 @@ +0 diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-02/connection-count-before.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-02/connection-count-before.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-02/connection-count-before.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-02/connection-count-before.stdout.log new file mode 100644 index 00000000..573541ac --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-02/connection-count-before.stdout.log @@ -0,0 +1 @@ +0 diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-02/coverage.out b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-02/coverage.out new file mode 100644 index 00000000..52335d8a --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-02/coverage.out @@ -0,0 +1,3472 @@ +mode: atomic +github.com/thebtf/engram/internal/mcp/audit_helpers.go:33.53,34.30 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:34.30,36.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:37.2,37.25 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:37.25,39.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:40.2,40.12 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:44.28,46.2 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:52.83,53.12 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:53.12,54.16 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:54.16,55.32 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:55.32,61.5 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:63.3,65.33 3 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:65.33,71.4 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:77.54,78.14 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:78.14,80.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:81.2,82.16 2 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:82.16,85.3 2 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:86.2,87.13 2 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:92.91,93.23 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:93.23,95.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:96.2,97.15 2 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:97.15,99.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:100.2,105.65 4 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:105.65,113.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:117.95,118.23 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:118.23,120.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:121.2,122.15 2 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:122.15,124.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:125.2,129.65 5 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:129.65,138.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:142.87,143.23 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:143.23,145.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:146.2,147.15 2 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:147.15,149.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:150.2,153.65 4 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:153.65,161.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:166.96,167.23 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:167.23,169.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:170.2,171.15 2 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:171.15,173.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:174.2,177.63 4 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:177.63,185.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:189.97,190.23 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:190.23,192.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:193.2,194.15 2 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:194.15,196.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:197.2,200.68 4 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:200.68,208.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:30.62,31.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:31.20,33.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:34.2,35.49 2 0 +github.com/thebtf/engram/internal/mcp/coerce.go:35.49,37.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:38.2,38.14 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:38.14,40.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:41.2,41.15 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:46.52,47.14 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:47.14,49.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:50.2,50.23 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:51.14,52.11 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:53.19,54.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:55.15,56.45 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:57.12,58.31 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:59.10,60.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:67.43,68.14 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:68.14,70.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:71.2,71.23 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:72.15,73.23 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:74.19,75.38 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:75.38,77.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:78.3,78.40 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:78.40,80.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:81.3,81.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:82.14,83.56 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:83.56,85.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:86.3,86.54 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:86.54,88.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:89.3,89.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:90.10,91.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:97.49,98.14 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:98.14,100.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:101.2,101.23 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:102.15,103.18 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:104.19,105.38 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:105.38,107.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:108.3,108.40 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:108.40,110.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:111.3,111.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:112.14,113.56 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:113.56,115.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:116.3,116.54 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:116.54,118.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:119.3,119.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:120.10,121.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:127.55,128.14 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:128.14,130.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:131.2,131.23 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:132.15,133.11 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:134.19,135.40 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:135.40,137.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:138.3,138.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:139.14,140.54 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:140.54,142.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:143.3,143.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:144.10,145.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:151.46,152.14 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:152.14,154.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:155.2,155.23 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:156.12,157.11 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:158.14,159.54 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:159.54,161.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:162.3,162.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:163.15,164.16 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:165.19,166.40 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:166.40,168.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:169.3,169.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:170.10,171.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:177.40,178.14 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:178.14,180.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:181.2,181.23 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:182.13,184.26 2 0 +github.com/thebtf/engram/internal/mcp/coerce.go:184.26,185.36 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:185.36,187.5 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:189.3,189.16 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:190.16,191.11 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:192.14,193.14 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:193.14,195.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:196.3,196.13 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:197.10,198.13 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:204.38,205.14 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:205.14,207.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:208.2,209.9 2 0 +github.com/thebtf/engram/internal/mcp/coerce.go:209.9,211.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:212.2,213.27 2 0 +github.com/thebtf/engram/internal/mcp/coerce.go:213.27,214.42 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:214.42,216.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:218.2,218.15 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:222.32,223.39 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:223.39,225.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:226.2,226.30 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:226.30,228.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:229.2,229.30 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:229.30,231.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:232.2,232.15 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:236.35,237.28 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:237.28,239.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:240.2,240.28 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:240.28,242.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:243.2,243.15 1 0 +github.com/thebtf/engram/internal/mcp/context.go:17.55,19.2 1 0 +github.com/thebtf/engram/internal/mcp/context.go:22.78,24.2 1 0 +github.com/thebtf/engram/internal/mcp/context.go:29.78,31.2 1 0 +github.com/thebtf/engram/internal/mcp/context.go:35.53,38.2 2 0 +github.com/thebtf/engram/internal/mcp/context.go:41.80,43.2 1 0 +github.com/thebtf/engram/internal/mcp/context.go:48.80,50.2 1 0 +github.com/thebtf/engram/internal/mcp/context.go:54.53,57.2 2 0 +github.com/thebtf/engram/internal/mcp/context.go:61.51,62.43 1 0 +github.com/thebtf/engram/internal/mcp/context.go:62.43,64.3 1 0 +github.com/thebtf/engram/internal/mcp/context.go:65.2,65.16 1 0 +github.com/thebtf/engram/internal/mcp/health.go:22.32,26.2 3 0 +github.com/thebtf/engram/internal/mcp/health.go:29.37,33.2 3 0 +github.com/thebtf/engram/internal/mcp/health.go:36.35,40.2 3 0 +github.com/thebtf/engram/internal/mcp/health.go:42.44,45.25 3 0 +github.com/thebtf/engram/internal/mcp/health.go:45.25,47.50 1 0 +github.com/thebtf/engram/internal/mcp/health.go:47.50,50.4 2 0 +github.com/thebtf/engram/internal/mcp/health.go:55.74,60.16 5 0 +github.com/thebtf/engram/internal/mcp/health.go:60.16,62.3 1 0 +github.com/thebtf/engram/internal/mcp/health.go:63.2,71.4 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:28.42,29.65 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:29.65,32.3 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:33.2,33.40 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:33.40,35.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:36.2,36.14 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:39.120,40.69 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:40.69,42.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:43.2,44.19 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:44.19,46.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:47.2,48.17 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:48.17,50.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:51.2,52.59 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:52.59,54.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:55.2,56.20 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:56.20,58.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:59.2,60.17 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:60.17,62.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:63.2,64.21 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:64.21,66.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:67.2,68.22 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:68.22,70.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:71.2,72.23 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:72.23,74.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:76.2,98.19 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:98.19,100.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:101.2,101.66 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:104.52,106.29 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:106.29,108.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:109.2,110.46 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:113.113,123.27 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:123.27,125.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:126.2,127.16 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:127.16,129.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:130.2,130.25 1 0 +github.com/thebtf/engram/internal/mcp/server.go:127.44,138.2 1 1 +github.com/thebtf/engram/internal/mcp/server.go:141.64,143.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:146.78,148.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:151.53,153.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:156.55,158.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:161.58,163.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:166.62,168.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:171.50,173.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:176.78,178.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:181.74,183.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:186.71,189.2 2 0 +github.com/thebtf/engram/internal/mcp/server.go:191.85,193.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:195.61,197.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:199.49,201.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:204.54,206.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:211.53,213.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:216.53,218.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:222.61,224.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:228.59,230.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:234.51,236.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:240.52,242.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:246.55,248.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:252.82,254.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:260.70,262.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:269.68,271.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:274.87,277.2 2 0 +github.com/thebtf/engram/internal/mcp/server.go:282.60,284.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:290.45,292.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:297.77,299.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:303.37,313.38 3 0 +github.com/thebtf/engram/internal/mcp/server.go:313.38,315.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:316.2,317.9 2 0 +github.com/thebtf/engram/internal/mcp/server.go:317.9,319.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:320.2,321.9 2 0 +github.com/thebtf/engram/internal/mcp/server.go:321.9,323.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:324.2,325.9 2 0 +github.com/thebtf/engram/internal/mcp/server.go:325.9,327.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:328.2,328.14 1 0 +github.com/thebtf/engram/internal/mcp/server.go:332.35,334.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:383.49,387.12 3 0 +github.com/thebtf/engram/internal/mcp/server.go:387.12,388.22 1 0 +github.com/thebtf/engram/internal/mcp/server.go:388.22,389.11 1 0 +github.com/thebtf/engram/internal/mcp/server.go:390.22,392.11 2 0 +github.com/thebtf/engram/internal/mcp/server.go:393.12,393.12 0 0 +github.com/thebtf/engram/internal/mcp/server.go:396.4,397.18 2 0 +github.com/thebtf/engram/internal/mcp/server.go:397.18,398.13 1 0 +github.com/thebtf/engram/internal/mcp/server.go:401.4,402.61 2 0 +github.com/thebtf/engram/internal/mcp/server.go:402.61,404.13 2 0 +github.com/thebtf/engram/internal/mcp/server.go:407.4,407.55 1 0 +github.com/thebtf/engram/internal/mcp/server.go:407.55,409.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:411.3,411.28 1 0 +github.com/thebtf/engram/internal/mcp/server.go:414.2,414.9 1 0 +github.com/thebtf/engram/internal/mcp/server.go:415.20,416.19 1 0 +github.com/thebtf/engram/internal/mcp/server.go:417.25,418.17 1 0 +github.com/thebtf/engram/internal/mcp/server.go:418.17,420.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:421.3,421.13 1 0 +github.com/thebtf/engram/internal/mcp/server.go:427.77,428.19 1 0 +github.com/thebtf/engram/internal/mcp/server.go:428.19,431.3 2 0 +github.com/thebtf/engram/internal/mcp/server.go:433.2,433.20 1 0 +github.com/thebtf/engram/internal/mcp/server.go:434.20,435.33 1 0 +github.com/thebtf/engram/internal/mcp/server.go:436.20,437.32 1 0 +github.com/thebtf/engram/internal/mcp/server.go:438.20,439.37 1 0 +github.com/thebtf/engram/internal/mcp/server.go:443.24,444.93 1 0 +github.com/thebtf/engram/internal/mcp/server.go:445.34,446.101 1 0 +github.com/thebtf/engram/internal/mcp/server.go:447.22,448.91 1 0 +github.com/thebtf/engram/internal/mcp/server.go:449.29,450.120 1 0 +github.com/thebtf/engram/internal/mcp/server.go:451.10,456.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:461.51,462.20 1 0 +github.com/thebtf/engram/internal/mcp/server.go:463.50,464.70 1 0 +github.com/thebtf/engram/internal/mcp/server.go:465.46,466.79 1 0 +github.com/thebtf/engram/internal/mcp/server.go:467.10,468.80 1 0 +github.com/thebtf/engram/internal/mcp/server.go:473.59,485.63 2 0 +github.com/thebtf/engram/internal/mcp/server.go:485.63,487.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:489.2,493.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:496.45,503.33 3 0 +github.com/thebtf/engram/internal/mcp/server.go:503.33,505.57 2 0 +github.com/thebtf/engram/internal/mcp/server.go:505.57,506.76 1 0 +github.com/thebtf/engram/internal/mcp/server.go:506.76,507.13 1 0 +github.com/thebtf/engram/internal/mcp/server.go:509.4,509.18 1 0 +github.com/thebtf/engram/internal/mcp/server.go:509.18,511.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:511.10,513.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:514.4,518.11 5 0 +github.com/thebtf/engram/internal/mcp/server.go:522.2,522.19 1 0 +github.com/thebtf/engram/internal/mcp/server.go:660.29,683.21 2 0 +github.com/thebtf/engram/internal/mcp/server.go:683.21,689.3 5 0 +github.com/thebtf/engram/internal/mcp/server.go:690.2,699.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:712.30,765.49 3 0 +github.com/thebtf/engram/internal/mcp/server.go:765.49,789.3 5 0 +github.com/thebtf/engram/internal/mcp/server.go:790.2,799.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:805.40,936.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:942.58,1048.35 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1048.35,1077.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1080.2,1080.33 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1080.33,1090.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1093.2,1093.26 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1093.26,1123.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1124.2,1124.80 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1124.80,1126.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1127.2,1127.55 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1127.55,1129.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1130.2,1130.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1130.38,1132.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1134.2,1134.25 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1134.25,1136.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1138.2,1138.33 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1138.33,1140.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1141.2,1141.69 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1141.69,1143.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1144.2,1144.75 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1144.75,1146.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1148.2,1148.27 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1148.27,1165.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1168.2,1168.76 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1168.76,1191.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1195.2,1195.48 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1195.48,1197.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1201.2,1201.47 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1201.47,1203.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1205.2,1205.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1205.38,1207.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1212.2,1212.21 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1212.21,1214.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1228.2,1228.51 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1228.51,1230.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1233.2,1233.56 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1233.56,1235.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1238.2,1238.71 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1238.71,1298.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1302.2,1302.104 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1302.104,1321.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1324.2,1324.72 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1324.72,1333.154 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1333.154,1334.26 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1334.26,1336.8 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1337.7,1337.16 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1338.35,1340.26 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1340.26,1342.8 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1343.7,1343.18 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1371.2,1371.26 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1371.26,1390.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1393.2,1393.28 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1393.28,1443.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1446.2,1446.28 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1446.28,1478.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1481.2,1481.37 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1481.37,1561.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1564.2,1568.23 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1568.23,1570.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1572.2,1588.57 3 0 +github.com/thebtf/engram/internal/mcp/server.go:1588.57,1591.29 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1591.29,1593.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1594.3,1594.27 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1594.27,1595.29 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1595.29,1597.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1601.2,1607.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1612.79,1614.60 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1614.60,1620.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1622.2,1623.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1623.16,1631.3 3 0 +github.com/thebtf/engram/internal/mcp/server.go:1633.2,1641.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1644.69,1645.34 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1645.34,1647.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1648.2,1649.22 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1649.22,1651.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1652.2,1652.37 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1656.99,1658.14 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1659.16,1660.35 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1661.15,1662.46 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1663.18,1664.49 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1665.15,1666.46 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1667.18,1668.49 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1669.14,1670.45 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1671.15,1672.34 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1676.2,1676.14 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1677.35,1678.52 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1679.26,1680.37 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1681.20,1682.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1683.20,1684.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1685.16,1686.35 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1687.29,1688.40 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1689.33,1690.50 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1691.25,1692.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1693.23,1694.41 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1696.26,1697.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1698.24,1699.42 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1700.22,1701.40 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1702.25,1703.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1704.27,1705.45 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1706.25,1707.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1709.30,1710.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1711.28,1712.42 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1713.17,1714.40 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1715.20,1716.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1717.20,1718.45 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1719.20,1720.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1722.20,1723.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1724.18,1725.36 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1726.20,1727.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1728.18,1729.36 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1730.21,1731.39 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1732.21,1733.39 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1734.26,1735.44 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1736.25,1737.34 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1738.26,1739.44 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1740.24,1741.42 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1742.26,1743.44 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1744.27,1745.45 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1746.22,1747.40 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1748.19,1749.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1750.15,1751.34 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1752.16,1753.35 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1755.21,1756.44 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1757.19,1758.42 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1759.20,1760.44 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1761.22,1762.45 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1763.22,1764.40 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1765.23,1766.41 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1767.20,1768.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1769.32,1770.49 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1771.19,1772.37 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1773.19,1774.37 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1775.33,1776.50 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1777.35,1778.52 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1779.24,1780.42 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1781.32,1782.49 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1783.28,1784.46 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1785.21,1786.39 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1787.34,1788.51 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1789.25,1790.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1791.29,1792.46 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1793.26,1794.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1795.27,1796.44 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1798.25,1799.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1800.23,1801.41 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1802.27,1803.45 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1804.26,1805.44 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1806.29,1807.47 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1809.29,1810.46 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1811.27,1812.44 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1813.30,1814.47 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1815.38,1816.54 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1817.36,1818.52 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1820.24,1821.42 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1822.27,1823.45 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1824.22,1825.40 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1826.32,1827.49 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1828.32,1829.49 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1830.31,1831.48 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1832.35,1833.52 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1834.36,1835.53 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1836.36,1837.53 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1838.38,1839.54 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1840.34,1841.51 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1843.22,1844.40 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1845.21,1846.39 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1847.24,1848.42 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1850.25,1851.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1852.25,1853.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1859.2,1859.14 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1860.22,1863.131 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1866.51,1867.123 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1868.10,1869.50 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1874.47,1876.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1876.16,1879.3 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1880.2,1880.35 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1884.72,1890.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1896.105,1898.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1898.16,1900.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1902.2,1903.17 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1903.17,1905.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1907.2,1908.17 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1908.17,1910.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1912.2,1918.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1918.16,1920.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1921.2,1921.25 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1927.76,1933.15 3 0 +github.com/thebtf/engram/internal/mcp/server.go:1933.15,1936.17 3 0 +github.com/thebtf/engram/internal/mcp/server.go:1936.17,1938.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1939.3,1939.26 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1943.2,1950.36 3 0 +github.com/thebtf/engram/internal/mcp/server.go:1950.36,1952.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1952.8,1955.29 3 0 +github.com/thebtf/engram/internal/mcp/server.go:1955.29,1958.4 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1959.3,1962.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1966.2,1966.20 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1966.20,1977.20 6 0 +github.com/thebtf/engram/internal/mcp/server.go:1977.20,1979.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1980.3,1980.20 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1980.20,1982.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1985.3,1985.37 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1985.37,1987.30 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1987.30,1988.16 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1988.16,1990.6 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1990.11,1992.6 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1994.4,1995.56 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1995.56,1997.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1998.4,2003.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2008.2,2008.29 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2008.29,2009.63 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2009.63,2011.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2011.9,2013.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2021.2,2021.29 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2021.29,2029.38 3 0 +github.com/thebtf/engram/internal/mcp/server.go:2029.38,2031.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2031.9,2033.31 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2033.31,2035.30 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2035.30,2037.6 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2039.4,2042.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2046.2,2047.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2047.16,2049.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2050.2,2050.25 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2055.57,2056.33 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2056.33,2058.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2059.2,2060.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2060.16,2062.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2063.2,2064.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2064.16,2066.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2067.2,2067.23 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2071.79,2105.15 6 0 +github.com/thebtf/engram/internal/mcp/server.go:2105.15,2107.17 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2107.17,2111.4 3 0 +github.com/thebtf/engram/internal/mcp/server.go:2111.9,2112.17 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2112.17,2114.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2115.4,2117.26 3 0 +github.com/thebtf/engram/internal/mcp/server.go:2117.26,2119.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2119.10,2121.29 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2121.29,2123.6 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2125.4,2129.25 5 0 +github.com/thebtf/engram/internal/mcp/server.go:2130.19,2130.19 0 0 +github.com/thebtf/engram/internal/mcp/server.go:2132.20,2134.106 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2135.12,2137.103 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2140.8,2143.3 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2144.2,2150.49 3 0 +github.com/thebtf/engram/internal/mcp/server.go:2150.49,2152.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2152.8,2154.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2155.2,2168.27 4 0 +github.com/thebtf/engram/internal/mcp/server.go:2168.27,2170.17 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2170.17,2173.4 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2173.9,2175.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2177.2,2182.40 4 0 +github.com/thebtf/engram/internal/mcp/server.go:2182.40,2183.21 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2184.20,2185.20 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2186.19,2187.19 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2191.2,2191.24 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2191.24,2193.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2193.8,2193.30 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2193.30,2195.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2198.2,2198.28 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2198.28,2200.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2203.2,2203.29 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2203.29,2205.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2207.2,2208.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2208.16,2210.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2211.2,2211.28 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2216.103,2218.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2218.16,2220.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2222.2,2223.15 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2223.15,2225.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2227.2,2239.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2239.16,2241.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2242.2,2242.25 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2246.93,2248.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2251.91,2253.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:18.28,29.20 4 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:29.20,33.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:35.2,44.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:68.36,69.49 1 1 +github.com/thebtf/engram/internal/mcp/tools_admin.go:69.49,74.3 4 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:75.2,75.25 1 1 +github.com/thebtf/engram/internal/mcp/tools_admin.go:80.26,82.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:84.89,86.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:86.16,88.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:89.2,90.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:90.18,92.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:94.2,94.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:95.15,96.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:97.26,98.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:99.25,100.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:101.23,105.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:105.22,107.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:108.3,108.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:109.10,110.114 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:120.92,126.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:126.26,128.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:130.2,131.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:131.19,133.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:134.2,135.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:135.19,137.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:138.2,138.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:138.24,140.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:142.2,142.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:142.25,144.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:146.2,147.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:147.16,149.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:151.2,151.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:27.40,30.2 2 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:32.30,46.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:48.99,49.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:49.34,51.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:52.2,52.69 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:52.69,54.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:56.2,57.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:57.16,59.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:60.2,61.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:61.21,63.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:64.2,67.26 3 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:67.26,69.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:70.2,71.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:71.25,73.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:75.2,77.44 3 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:77.44,79.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:80.2,80.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:80.33,82.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:83.2,83.81 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:86.52,87.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:87.16,89.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:90.2,90.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:90.15,92.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:93.2,93.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:96.73,97.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:97.21,99.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:100.2,101.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:101.29,110.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:111.2,111.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:114.34,116.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:31.98,32.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:32.52,34.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:35.2,35.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:35.26,37.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:39.2,40.49 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:40.49,42.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:43.2,43.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:43.21,45.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:46.2,46.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:46.21,48.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:49.2,49.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:49.18,51.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:52.2,52.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:52.18,54.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:56.2,56.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:56.38,58.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:60.2,61.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:61.16,63.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:68.2,70.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:70.26,77.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:79.2,81.36 3 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:81.36,84.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:86.2,89.28 3 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:89.28,90.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:90.39,91.9 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:93.3,97.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:100.2,104.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:107.60,113.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:115.101,116.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:116.38,118.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:120.2,122.21 3 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:122.21,123.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:123.26,125.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:126.3,126.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:126.23,128.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:129.8,130.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:130.26,132.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:133.3,133.68 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:133.68,135.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:137.2,140.20 3 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:141.17,142.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:143.67,143.67 0 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:144.10,145.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:148.2,162.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:162.16,164.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:165.2,165.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:165.19,173.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:174.2,174.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:174.30,176.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:177.2,177.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:177.31,179.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:181.2,182.36 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:182.36,196.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:198.2,199.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:199.19,201.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:202.2,203.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:203.18,205.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:206.2,207.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:207.21,209.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:210.2,211.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:211.25,213.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:214.2,225.21 3 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:225.21,227.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:228.2,228.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:228.25,230.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:231.2,231.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:231.18,233.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:235.2,244.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:244.21,246.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:247.2,247.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:247.25,249.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:250.2,250.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:250.18,252.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:253.2,253.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:253.24,255.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:256.2,256.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:259.50,261.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:261.22,263.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:264.2,264.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:270.90,272.42 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:272.42,276.3 3 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:277.2,281.27 3 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:281.27,282.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:282.45,284.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:286.2,286.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:25.28,88.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:95.95,96.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:96.22,98.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:99.2,100.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:100.32,102.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:104.2,105.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:105.16,107.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:109.2,114.35 3 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:114.35,121.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:123.2,123.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:123.25,125.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:127.2,134.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:134.16,136.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:138.2,146.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:154.94,155.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:155.22,157.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:158.2,159.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:159.32,161.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:163.2,164.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:164.16,166.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:168.2,172.35 3 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:172.35,179.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:181.2,181.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:181.25,183.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:185.2,192.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:192.16,194.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:196.2,203.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:211.97,212.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:212.22,214.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:215.2,216.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:216.32,218.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:220.2,221.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:221.16,223.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:225.2,229.35 3 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:229.35,236.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:238.2,238.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:238.25,240.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:242.2,249.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:249.16,251.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:253.2,260.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:31.80,32.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:32.14,34.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:35.2,48.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:51.136,53.51 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:53.51,55.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:56.2,56.83 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:59.94,60.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:60.21,62.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:63.2,63.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:68.30,162.2 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:165.98,166.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:166.49,168.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:169.2,170.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:170.16,172.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:173.2,174.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:174.19,176.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:177.2,179.17 3 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:179.17,181.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:183.2,184.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:184.16,186.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:188.2,189.31 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:189.31,190.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:190.15,191.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:193.3,193.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:196.2,201.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:201.16,203.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:204.2,204.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:208.96,209.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:209.49,211.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:212.2,213.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:213.16,215.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:216.2,217.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:217.13,219.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:221.2,222.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:222.16,224.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:225.2,225.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:225.22,227.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:229.2,230.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:230.16,232.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:233.2,233.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:239.100,240.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:240.22,242.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:243.2,244.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:244.16,246.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:247.2,248.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:248.13,250.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:255.2,256.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:256.12,263.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:263.30,264.77 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:264.77,269.5 4 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:271.3,272.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:272.21,274.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:275.3,275.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:279.2,279.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:279.29,281.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:284.2,285.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:285.16,287.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:288.2,288.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:288.22,290.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:291.2,291.55 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:291.55,293.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:294.2,294.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:294.74,296.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:297.2,298.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:298.16,300.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:306.2,307.41 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:307.41,309.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:310.2,324.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:324.16,325.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:325.50,327.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:328.3,328.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:330.2,330.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:330.38,332.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:334.2,341.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:341.16,343.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:344.2,344.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:348.99,349.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:349.49,351.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:352.2,353.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:353.16,355.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:356.2,357.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:357.13,359.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:360.2,362.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:362.16,364.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:365.2,365.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:365.22,367.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:368.2,368.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:368.74,370.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:371.2,372.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:372.16,374.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:375.2,375.85 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:375.85,377.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:379.2,380.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:380.16,381.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:381.50,383.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:384.3,384.60 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:386.2,386.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:386.20,388.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:390.2,395.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:395.16,397.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:398.2,398.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:402.102,403.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:403.49,405.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:406.2,407.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:407.16,409.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:410.2,411.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:411.13,413.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:414.2,415.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:415.16,417.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:418.2,418.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:418.22,420.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:421.2,421.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:421.74,423.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:424.2,425.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:425.16,427.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:428.2,428.88 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:428.88,430.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:432.2,433.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:433.16,434.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:434.50,436.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:437.3,437.63 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:439.2,439.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:439.20,441.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:443.2,448.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:448.16,450.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:451.2,451.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:34.30,36.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:42.61,44.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:48.32,75.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:79.32,94.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:100.98,101.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:101.25,103.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:104.2,104.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:104.29,106.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:108.2,113.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:113.17,114.55 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:114.55,116.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:118.2,118.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:118.24,120.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:121.2,121.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:121.23,123.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:124.2,124.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:124.23,126.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:134.2,135.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:135.21,137.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:142.2,147.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:147.16,149.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:154.2,165.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:165.25,175.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:177.2,183.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:183.16,185.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:186.2,186.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:194.98,195.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:195.25,197.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:198.2,198.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:198.29,200.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:202.2,205.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:205.17,207.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:208.2,209.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:209.21,211.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:213.2,214.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:214.16,216.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:217.2,218.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:218.16,220.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:221.2,222.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:222.16,224.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:226.2,231.11 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:231.11,233.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:235.2,236.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:236.16,238.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:239.2,239.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:21.52,22.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:22.24,25.28 3 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:25.28,27.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:29.2,29.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:35.72,37.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:37.15,39.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:41.2,42.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:42.16,44.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:45.2,45.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:49.99,51.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:51.16,53.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:55.2,56.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:56.16,58.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:60.2,72.23 7 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:72.23,74.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:75.2,75.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:75.24,77.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:78.2,78.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:78.24,80.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:81.2,81.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:82.27,82.27 0 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:84.10,85.93 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:87.2,87.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:87.30,89.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:90.2,90.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:90.26,92.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:94.2,95.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:95.16,97.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:99.2,100.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:100.16,102.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:104.2,112.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:112.16,114.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:116.2,123.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:123.16,125.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:126.2,126.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:130.97,132.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:132.16,134.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:136.2,137.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:137.16,139.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:141.2,147.23 4 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:147.23,149.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:150.2,150.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:150.26,152.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:154.2,155.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:155.16,157.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:159.2,160.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:160.16,161.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:161.47,163.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:164.3,164.51 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:167.2,167.97 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:167.97,172.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:174.2,175.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:175.16,177.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:179.2,185.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:185.16,187.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:188.2,188.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:192.99,194.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:194.16,196.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:198.2,199.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:199.16,201.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:203.2,207.26 3 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:207.26,209.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:211.2,212.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:212.16,214.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:216.2,223.26 3 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:223.26,229.28 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:229.28,231.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:232.3,232.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:235.2,236.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:236.16,238.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:239.2,239.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:243.100,245.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:245.16,247.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:249.2,250.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:250.16,252.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:254.2,262.23 5 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:262.23,264.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:265.2,265.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:265.24,267.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:268.2,268.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:269.27,269.27 0 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:271.10,272.93 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:274.2,274.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:274.30,276.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:277.2,277.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:277.26,279.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:281.2,281.71 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:281.71,282.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:282.47,284.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:285.3,285.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:288.2,293.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:293.16,295.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:296.2,296.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:302.92,309.19 5 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:309.19,310.53 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:310.53,313.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:316.2,317.51 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:317.51,318.66 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:318.66,320.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:323.2,331.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:331.16,333.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:334.2,334.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:338.46,342.32 4 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:342.32,343.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:343.20,346.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:348.2,350.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:350.26,352.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:352.27,353.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:353.13,355.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:356.4,356.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:358.3,358.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:360.2,360.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:16.45,18.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:20.35,36.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:38.84,39.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:39.40,41.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:42.2,42.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:42.50,44.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:45.2,45.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:48.101,50.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:50.16,52.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:53.2,54.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:54.16,56.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:57.2,58.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:58.19,60.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:61.2,62.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:62.21,64.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:65.2,66.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:66.16,68.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:69.2,69.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:72.102,74.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:74.16,76.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:77.2,82.8 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:10.100,12.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:12.16,14.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:16.2,17.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:17.18,19.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:21.2,21.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:22.16,23.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:24.14,25.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:26.14,27.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:28.17,29.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:30.17,31.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:32.21,33.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:34.19,35.42 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:36.17,37.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:38.16,39.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:40.16,41.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:42.21,43.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:44.10,45.167 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:15.77,16.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:16.33,18.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:20.2,21.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:21.27,23.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:25.2,26.28 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:26.28,29.17 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:29.17,31.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:34.2,41.32 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:41.32,46.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:46.20,48.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:49.3,49.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:52.2,53.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:53.16,55.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:57.2,57.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:61.97,62.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:62.28,64.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:66.2,67.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:67.16,69.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:71.2,75.29 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:75.29,77.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:79.2,80.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:80.16,82.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:84.2,84.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:84.20,86.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:88.2,97.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:97.25,103.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:103.20,105.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:106.3,106.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:106.19,108.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:109.3,109.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:112.2,113.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:113.16,115.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:117.2,117.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:121.95,122.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:122.28,124.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:126.2,127.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:127.16,129.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:131.2,137.50 4 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:137.50,139.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:141.2,142.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:142.16,144.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:145.2,145.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:145.16,147.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:149.2,149.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:149.21,151.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:153.2,154.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:154.16,156.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:157.2,157.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:157.20,159.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:161.2,161.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:165.98,166.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:166.28,168.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:170.2,171.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:171.16,173.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:175.2,181.50 4 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:181.50,183.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:185.2,185.96 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:185.96,187.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:189.2,189.88 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:197.98,198.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:198.28,200.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:202.2,203.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:203.16,205.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:207.2,217.74 6 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:217.74,219.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:222.2,223.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:223.16,225.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:227.2,229.156 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:235.98,237.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:237.16,239.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:241.2,247.24 4 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:247.24,249.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:252.2,253.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:253.29,255.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:256.2,256.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:15.93,16.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:16.37,18.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:20.2,21.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:21.16,23.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:25.2,32.16 7 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:32.16,34.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:35.2,35.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:35.19,37.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:38.2,38.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:38.19,40.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:42.2,43.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:43.16,45.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:47.2,54.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:54.16,56.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:57.2,57.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:61.91,62.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:62.37,64.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:66.2,67.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:67.16,69.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:71.2,73.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:73.16,75.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:76.2,76.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:76.19,78.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:80.2,81.43 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:81.43,83.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:83.19,85.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:86.3,86.79 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:87.8,89.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:90.2,90.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:90.16,91.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:91.45,93.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:94.3,94.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:97.2,110.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:110.16,112.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:113.2,113.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:117.93,119.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:122.91,123.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:123.37,125.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:127.2,128.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:128.16,130.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:132.2,133.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:133.19,135.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:136.2,141.16 5 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:141.16,143.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:145.2,155.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:155.25,165.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:167.2,168.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:168.16,170.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:171.2,171.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:175.94,176.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:176.37,178.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:180.2,181.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:181.16,183.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:185.2,187.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:187.16,189.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:190.2,190.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:190.19,192.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:193.2,196.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:196.16,198.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:200.2,208.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:208.25,216.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:218.2,225.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:225.16,227.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:228.2,228.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:232.94,233.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:233.37,235.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:237.2,238.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:238.16,240.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:242.2,243.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:243.21,245.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:246.2,248.19 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:248.19,250.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:252.2,253.46 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:253.46,255.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:255.13,257.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:259.2,259.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:259.44,261.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:261.13,263.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:266.2,267.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:267.16,269.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:271.2,278.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:278.16,280.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:281.2,281.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:19.69,21.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:23.38,38.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:40.51,63.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:65.53,80.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:82.46,85.32 3 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:85.32,87.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:88.2,88.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:91.105,93.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:93.16,95.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:96.2,97.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:97.16,99.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:100.2,100.70 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:103.107,105.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:105.16,107.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:108.2,109.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:109.16,111.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:112.2,112.72 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:115.101,117.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:117.16,119.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:120.2,121.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:121.17,123.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:124.2,139.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:142.109,144.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:144.16,146.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:147.2,154.8 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:157.100,159.28 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:159.28,161.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:161.18,163.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:164.3,164.62 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:166.2,167.72 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:167.72,169.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:170.2,170.53 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:170.53,172.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:173.2,174.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:174.26,176.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:177.2,177.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:180.73,182.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:182.16,184.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:185.2,185.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:12.104,14.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:14.16,16.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:18.2,19.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:19.18,21.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:23.2,23.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:24.14,25.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:26.18,27.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:28.17,29.46 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:30.10,31.96 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:36.101,37.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:37.27,39.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:41.2,42.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:42.16,44.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:46.2,47.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:47.21,49.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:50.2,51.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:51.19,53.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:54.2,54.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:55.52,55.52 0 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:56.10,57.101 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:59.2,61.93 2 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:61.93,64.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:66.2,70.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:27.31,94.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:98.97,100.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:100.26,102.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:103.2,103.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:103.28,105.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:107.2,108.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:108.16,110.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:112.2,115.15 4 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:115.15,117.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:118.2,118.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:118.17,120.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:122.2,123.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:123.16,125.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:127.2,140.29 3 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:140.29,151.31 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:151.31,154.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:155.3,155.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:158.2,162.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:167.100,169.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:169.26,171.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:172.2,172.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:172.28,174.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:175.2,175.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:175.26,177.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:179.2,180.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:180.16,182.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:184.2,185.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:185.22,187.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:189.2,190.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:190.20,191.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:191.54,199.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:200.3,200.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:200.61,202.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:203.3,203.58 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:206.2,211.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:215.95,217.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:217.32,219.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:220.2,220.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:220.28,222.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:224.2,225.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:225.16,227.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:229.2,230.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:230.22,232.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:234.2,234.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:234.61,236.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:239.2,239.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:239.25,246.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:248.2,252.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:258.104,260.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:260.26,262.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:267.2,271.20 3 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:271.20,275.3 3 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:275.8,279.3 3 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:280.2,280.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:284.60,285.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:285.30,287.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:288.2,288.42 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:288.42,290.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:291.2,291.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:64.89,65.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:65.25,67.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:69.2,70.49 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:70.49,72.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:74.2,74.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:75.18,76.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:77.21,78.35 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:79.19,80.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:81.18,82.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:83.19,84.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:85.18,86.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:87.18,91.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:91.23,93.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:94.3,94.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:95.10,96.62 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:100.81,103.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:103.19,105.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:106.2,107.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:107.19,109.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:112.2,112.46 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:112.46,114.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:115.2,115.46 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:115.46,117.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:122.2,122.66 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:122.66,124.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:127.2,127.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:127.25,128.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:128.22,130.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:131.8,132.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:132.26,134.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:138.2,138.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:138.25,139.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:139.22,141.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:142.8,143.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:143.26,145.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:148.2,148.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:148.22,150.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:151.2,151.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:151.38,153.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:154.2,154.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:154.19,156.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:159.2,161.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:161.25,164.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:165.2,165.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:165.25,168.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:169.2,171.23 3 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:171.23,174.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:175.2,175.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:175.23,178.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:180.2,193.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:193.16,195.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:198.2,199.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:199.29,201.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:202.2,202.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:202.29,204.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:205.2,213.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:216.121,217.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:217.28,218.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:218.26,220.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:221.3,222.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:222.17,223.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:223.49,225.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:226.4,226.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:228.3,228.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:230.2,230.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:230.26,232.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:233.2,234.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:234.16,235.48 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:235.48,237.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:238.3,238.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:240.2,240.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:243.101,248.36 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:248.36,250.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:250.8,252.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:253.2,253.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:253.16,255.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:256.2,256.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:256.32,257.128 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:257.128,262.72 5 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:262.72,264.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:267.2,267.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:276.81,277.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:277.25,279.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:280.2,280.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:280.22,282.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:283.2,283.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:283.39,285.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:286.2,286.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:286.25,288.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:289.2,289.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:289.21,291.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:292.2,293.14 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:293.14,295.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:296.2,305.16 5 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:305.16,307.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:308.2,314.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:317.84,318.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:318.19,320.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:321.2,323.63 3 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:323.63,325.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:326.2,329.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:332.82,333.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:333.38,335.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:336.2,337.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:338.18,339.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:340.18,341.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:345.2,345.59 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:345.59,347.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:349.2,351.21 3 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:351.21,353.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:353.8,356.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:357.2,357.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:357.16,359.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:366.2,367.41 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:367.41,369.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:371.2,378.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:397.115,398.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:398.15,400.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:403.2,404.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:404.26,405.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:405.28,407.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:408.3,408.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:408.28,410.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:412.2,412.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:412.23,415.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:420.2,426.12 4 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:426.12,427.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:427.27,429.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:429.18,431.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:433.4,433.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:433.33,435.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:440.2,441.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:441.26,442.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:442.28,443.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:443.49,445.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:448.3,448.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:448.28,449.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:449.49,451.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:454.2,454.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:457.82,458.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:458.21,460.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:461.2,462.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:462.16,464.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:465.2,465.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:465.36,467.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:468.2,469.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:469.16,471.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:472.2,477.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:480.82,481.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:481.40,483.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:484.2,485.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:485.19,487.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:488.2,489.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:489.16,491.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:492.2,499.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:502.82,503.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:503.21,505.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:506.2,507.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:507.16,509.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:510.2,514.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:23.179,24.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:24.22,26.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:28.2,32.22 4 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:32.22,34.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:35.2,36.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:36.22,38.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:40.2,41.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:41.26,43.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:44.2,44.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:44.26,46.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:47.2,47.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:47.30,49.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:50.2,50.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:50.30,52.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:54.2,55.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:55.16,57.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:58.2,58.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:58.13,60.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:61.2,62.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:62.16,64.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:65.2,65.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:65.13,67.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:69.2,70.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:70.16,72.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:73.2,73.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:73.15,75.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:77.2,77.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:80.172,81.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:81.28,82.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:82.23,84.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:85.3,85.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:85.18,87.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:88.3,89.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:89.17,90.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:90.49,92.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:93.4,93.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:95.3,95.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:98.2,98.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:98.24,100.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:101.2,101.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:101.19,103.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:104.2,105.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:105.16,106.48 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:106.48,108.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:109.3,109.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:111.2,111.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:114.119,116.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:116.22,118.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:119.2,120.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:120.22,122.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:124.2,126.26 3 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:126.26,127.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:127.36,129.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:130.3,130.105 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:131.8,132.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:132.32,134.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:135.3,135.103 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:137.2,137.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:137.16,139.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:141.2,141.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:141.32,143.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:143.27,145.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:146.3,147.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:147.27,149.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:150.3,150.106 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:150.106,151.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:153.3,153.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:153.27,154.114 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:154.114,155.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:157.9,157.104 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:157.104,158.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:160.3,160.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:160.27,161.114 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:161.114,162.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:164.9,164.104 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:164.104,165.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:167.3,167.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:169.2,169.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:25.90,26.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:26.26,28.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:30.2,31.49 2 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:31.49,33.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:35.2,35.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:36.16,37.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:38.10,39.63 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:43.84,44.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:44.21,46.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:47.2,47.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:47.25,49.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:50.2,50.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:50.21,52.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:53.2,53.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:53.21,55.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:57.2,58.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:59.18,60.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:61.15,62.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:63.24,64.42 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:65.10,66.108 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:69.2,70.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:70.22,72.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:73.2,74.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:74.29,76.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:78.2,78.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:78.14,85.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:87.2,89.37 3 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:89.37,92.21 3 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:92.21,94.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:97.2,100.31 4 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:100.31,102.38 2 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:102.38,104.37 2 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:104.37,106.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:109.3,122.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:122.26,124.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:125.3,125.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:125.19,127.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:131.3,133.39 3 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:133.39,135.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:135.9,137.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:138.3,138.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:138.17,140.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:142.3,142.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:142.34,144.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:145.3,145.11 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:148.2,155.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:20.99,22.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:22.16,24.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:26.2,31.44 3 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:31.44,32.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:32.33,33.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:33.43,38.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:43.2,43.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:43.49,45.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:46.2,46.48 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:46.48,48.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:50.2,52.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:52.27,55.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:55.8,60.24 3 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:60.24,62.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:64.3,64.57 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:64.57,66.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:68.3,68.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:71.2,71.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:71.16,73.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:75.2,76.23 2 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:76.23,78.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:80.2,80.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:19.40,89.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:109.71,111.9 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:111.9,113.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:115.2,116.38 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:116.38,117.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:118.13,119.41 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:119.41,121.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:122.17,123.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:123.43,125.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:126.11,127.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:127.40,129.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:133.2,133.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:133.22,138.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:139.2,139.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:143.90,144.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:144.25,146.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:148.2,149.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:149.16,151.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:153.2,157.61 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:157.61,159.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:161.2,161.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:162.16,163.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:164.14,165.35 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:166.13,167.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:168.16,169.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:170.17,171.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:172.16,173.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:174.15,175.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:176.10,177.120 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:189.85,191.39 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:191.39,192.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:192.44,194.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:196.2,196.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:196.15,198.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:199.2,199.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:199.15,201.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:202.2,202.46 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:205.91,207.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:207.17,209.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:211.2,215.25 5 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:215.25,217.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:218.2,224.25 4 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:224.25,226.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:227.2,227.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:227.25,229.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:231.2,243.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:243.16,245.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:247.2,247.139 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:250.89,252.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:252.19,254.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:255.2,256.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:256.25,258.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:259.2,264.52 5 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:264.52,266.14 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:266.14,268.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:271.2,277.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:277.25,280.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:282.2,283.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:283.16,285.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:287.2,287.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:287.22,288.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:288.20,290.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:291.3,291.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:294.2,297.31 3 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:297.31,300.29 3 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:300.29,302.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:303.3,305.69 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:308.2,308.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:311.88,313.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:313.13,315.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:317.2,318.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:318.16,320.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:322.2,328.22 6 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:328.22,331.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:333.2,333.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:333.23,335.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:335.30,338.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:341.2,341.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:344.91,346.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:346.13,348.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:350.2,353.18 3 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:353.18,354.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:354.27,356.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:357.3,357.73 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:357.73,359.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:362.2,362.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:362.19,370.17 4 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:370.17,372.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:375.2,376.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:376.26,378.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:379.2,379.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:382.92,384.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:384.13,386.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:388.2,389.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:389.16,391.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:393.2,401.16 4 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:401.16,403.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:405.2,405.88 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:408.91,410.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:410.13,412.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:414.2,418.95 4 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:418.95,420.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:422.2,422.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:425.90,427.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:427.13,429.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:431.2,433.167 3 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:433.167,435.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:437.2,437.89 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:437.89,439.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:441.2,441.108 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:22.93,24.49 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:24.49,26.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:28.2,28.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:29.14,30.42 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:31.17,32.59 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:33.16,34.58 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:35.24,36.75 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:37.27,38.71 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:39.22,40.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:41.23,42.63 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:43.10,44.66 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:48.79,49.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:49.13,51.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:52.2,53.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:53.16,55.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:57.2,58.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:58.32,60.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:61.2,84.28 3 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:87.101,88.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:88.13,90.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:91.2,91.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:91.38,93.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:94.2,95.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:95.16,97.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:98.2,98.53 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:98.53,100.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:102.2,104.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:104.17,106.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:107.2,107.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:107.29,109.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:110.2,115.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:118.100,119.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:119.13,121.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:122.2,122.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:122.38,124.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:125.2,126.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:126.16,128.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:129.2,129.53 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:129.53,131.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:133.2,135.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:135.17,137.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:138.2,138.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:138.29,140.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:141.2,146.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:149.123,150.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:150.13,152.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:153.2,153.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:153.18,155.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:156.2,156.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:156.38,158.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:159.2,161.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:161.17,163.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:164.2,169.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:172.113,173.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:173.13,175.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:176.2,176.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:176.50,178.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:179.2,181.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:181.17,183.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:184.2,188.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:191.57,195.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:197.102,198.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:198.13,200.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:201.2,201.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:201.20,203.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:204.2,205.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:205.16,207.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:209.2,210.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:210.32,212.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:214.2,217.56 3 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:217.56,223.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:225.2,230.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:233.41,235.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:235.16,237.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:238.2,238.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:35.27,37.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:42.41,43.11 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:44.48,45.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:46.10,47.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:54.57,55.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:56.17,57.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:58.16,59.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:60.10,61.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:82.58,83.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:84.28,85.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:86.26,87.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:88.10,89.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:93.114,95.68 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:95.68,97.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:99.2,101.42 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:101.42,102.71 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:102.71,105.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:107.2,117.23 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:117.23,119.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:121.2,124.22 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:124.22,125.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:125.31,127.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:128.3,128.35 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:129.8,129.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:129.37,131.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:132.2,132.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:135.74,136.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:136.30,138.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:139.2,139.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:139.34,141.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:142.2,142.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:142.31,144.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:145.2,145.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:145.22,147.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:161.169,162.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:162.17,164.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:165.2,166.51 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:166.51,168.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:169.2,169.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:172.92,174.42 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:174.42,177.63 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:177.63,179.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:179.9,181.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:183.2,183.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:186.65,190.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:192.115,194.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:194.26,196.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:196.8,196.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:196.31,198.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:199.2,199.117 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:202.122,206.31 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:206.31,207.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:207.45,209.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:211.2,211.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:214.72,216.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:218.117,219.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:219.16,221.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:222.2,223.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:223.20,225.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:225.17,227.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:228.3,228.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:228.27,229.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:229.50,231.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:231.30,232.11 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:236.3,236.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:239.2,241.60 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:241.60,243.61 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:243.61,245.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:246.3,246.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:246.24,247.9 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:249.3,250.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:250.17,252.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:253.3,253.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:253.22,254.9 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:256.3,256.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:256.29,257.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:257.50,259.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:259.30,260.11 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:264.3,265.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:265.32,266.9 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:269.2,269.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:272.51,273.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:273.16,275.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:276.2,277.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:277.18,279.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:280.2,280.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:280.19,282.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:283.2,283.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:286.97,288.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:288.30,290.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:291.2,291.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:291.49,293.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:294.2,294.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:297.108,299.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:301.108,303.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:305.102,307.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:319.55,320.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:320.31,322.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:323.2,323.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:323.26,325.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:326.2,326.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:329.71,330.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:343.26,344.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:345.10,346.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:354.95,362.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:362.16,364.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:366.2,397.39 14 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:397.39,399.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:399.27,401.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:402.8,404.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:405.2,407.46 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:407.46,410.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:411.2,411.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:411.44,413.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:413.12,415.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:417.2,417.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:417.26,419.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:420.2,420.84 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:420.84,422.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:427.2,427.65 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:427.65,429.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:431.2,433.20 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:433.20,435.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:436.2,437.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:437.20,439.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:440.2,440.56 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:440.56,442.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:443.2,443.56 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:443.56,448.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:450.2,450.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:450.45,453.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:459.2,459.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:459.31,461.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:461.22,462.62 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:462.62,465.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:466.4,466.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:468.3,468.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:471.2,472.115 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:472.115,474.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:491.2,491.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:491.19,493.23 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:493.23,495.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:496.3,508.21 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:508.21,510.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:511.3,511.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:522.2,522.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:522.43,535.34 5 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:535.34,556.30 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:556.30,558.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:559.4,559.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:559.44,561.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:562.4,562.106 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:562.106,564.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:575.4,575.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:575.74,577.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:578.4,579.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:579.18,581.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:583.4,584.28 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:584.28,586.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:588.4,588.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:588.31,599.57 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:599.57,601.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:601.17,604.7 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:606.5,607.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:607.21,609.6 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:615.5,615.138 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:615.138,617.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:617.27,619.7 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:620.6,620.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:622.5,623.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:623.26,625.6 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:626.5,626.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:630.4,631.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:631.20,633.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:634.4,634.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:634.22,637.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:637.26,639.6 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:640.5,640.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:645.4,660.77 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:660.77,662.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:663.4,664.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:664.25,666.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:667.4,667.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:673.2,673.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:673.26,675.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:677.2,678.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:678.25,680.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:681.2,681.97 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:681.97,683.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:690.2,691.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:691.21,693.33 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:693.33,695.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:696.3,696.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:696.33,698.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:699.3,699.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:699.49,704.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:721.3,721.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:721.54,722.84 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:722.84,724.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:728.2,728.99 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:728.99,730.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:732.2,733.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:733.22,735.10 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:736.109,737.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:738.100,739.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:740.114,741.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:742.107,743.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:744.11,745.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:748.2,749.43 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:749.43,751.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:753.2,755.34 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:755.34,756.48 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:756.48,757.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:757.19,760.5 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:764.2,764.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:764.31,767.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:768.2,768.35 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:768.35,771.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:772.2,772.76 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:772.76,776.3 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:778.2,780.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:780.16,782.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:782.20,785.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:788.2,788.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:788.25,798.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:798.18,800.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:800.9,800.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:800.30,807.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:808.3,808.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:808.36,810.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:811.3,812.50 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:812.50,815.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:816.3,822.17 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:822.17,824.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:826.3,836.17 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:836.17,838.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:839.3,839.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:842.2,843.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:843.30,844.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:844.52,846.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:846.9,848.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:851.2,869.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:869.21,871.43 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:871.43,873.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:874.3,874.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:874.29,876.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:886.3,886.76 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:886.76,888.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:890.2,890.105 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:890.105,892.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:893.2,894.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:894.16,896.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:901.2,904.40 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:904.40,905.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:905.15,906.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:909.3,910.63 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:910.63,912.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:912.9,914.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:916.3,916.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:916.43,918.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:919.3,920.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:920.20,922.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:925.3,925.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:925.23,928.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:929.3,931.33 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:931.33,934.39 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:934.39,936.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:939.2,948.42 5 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:948.42,950.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:950.21,952.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:952.9,955.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:959.2,959.53 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:959.53,960.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:960.54,961.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:961.33,963.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:964.9,972.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:973.3,973.60 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:973.60,974.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:974.40,976.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:978.3,978.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:978.61,979.41 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:979.41,981.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:983.3,983.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:983.28,985.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:986.3,987.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:989.2,989.51 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:989.51,991.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:995.2,997.53 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:997.53,999.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:999.8,1001.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1002.2,1002.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1002.22,1004.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1008.2,1014.76 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1014.76,1016.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1021.2,1021.57 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1021.57,1026.13 5 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1026.13,1029.21 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1029.21,1032.5 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1033.4,1033.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1033.49,1035.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1036.4,1043.89 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1043.89,1046.5 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1048.4,1048.86 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1052.2,1063.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1063.21,1065.40 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1065.40,1067.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1068.3,1068.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1068.38,1070.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1072.2,1074.18 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1074.18,1081.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1082.2,1082.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1082.28,1084.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1085.2,1085.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1085.16,1087.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1088.2,1088.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1088.30,1090.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1091.2,1091.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1091.30,1093.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1098.2,1098.76 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1098.76,1100.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1101.2,1102.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1102.16,1104.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1105.2,1105.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1111.94,1113.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1113.15,1115.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1117.2,1118.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1118.16,1120.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1122.2,1123.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1123.13,1125.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1126.2,1131.16 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1131.16,1133.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1134.2,1134.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1134.19,1136.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1146.2,1146.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1146.39,1148.55 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1148.55,1150.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1152.2,1152.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1152.39,1154.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1157.2,1158.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1158.21,1163.21 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1163.21,1165.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1166.3,1167.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1167.21,1169.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1170.3,1170.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1170.52,1172.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1173.3,1173.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1173.52,1178.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1179.3,1179.41 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1179.41,1182.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1183.3,1183.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1188.2,1188.46 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1188.46,1190.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1191.2,1191.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1191.27,1193.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1195.2,1196.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1196.16,1198.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1201.2,1210.16 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1210.16,1212.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1213.2,1213.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1218.59,1220.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1220.38,1222.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1225.2,1226.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1226.29,1227.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1227.22,1229.9 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1232.2,1232.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1232.18,1234.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1237.2,1244.29 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1244.29,1245.67 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1245.67,1247.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1249.2,1249.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1249.16,1251.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1254.2,1254.11 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1258.55,1260.47 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1260.47,1262.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1263.2,1264.58 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1264.58,1266.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1267.2,1267.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1270.252,1271.108 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1271.108,1273.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1274.2,1274.55 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1274.55,1276.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1277.2,1277.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1280.184,1282.69 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1282.69,1284.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1284.32,1285.58 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1285.58,1287.10 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1290.3,1290.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1290.18,1292.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1294.2,1294.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1294.19,1297.32 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1297.32,1298.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1298.39,1300.10 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1303.3,1303.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1303.19,1305.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1307.2,1307.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1307.21,1309.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1309.32,1310.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1310.49,1312.10 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1315.3,1315.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1315.18,1317.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1319.2,1319.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1319.28,1321.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1321.17,1323.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1324.3,1324.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1324.27,1326.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1328.2,1328.76 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1328.76,1330.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1331.2,1331.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1342.96,1343.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1343.26,1345.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1347.2,1348.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1348.16,1350.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1352.2,1363.23 9 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1363.23,1364.58 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1364.58,1365.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1365.31,1367.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1367.10,1369.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1373.2,1373.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1373.17,1375.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1376.2,1376.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1376.16,1378.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1379.2,1379.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1379.16,1381.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1382.2,1382.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1382.18,1384.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1385.2,1385.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1385.19,1387.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1388.2,1388.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1388.19,1390.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1396.2,1399.18 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1399.18,1400.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1400.61,1401.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1402.50,1403.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1404.12,1405.108 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1409.2,1410.42 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1410.42,1414.3 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1415.2,1420.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1420.16,1422.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1429.2,1444.43 6 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1444.43,1446.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1449.2,1451.27 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1451.27,1453.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1458.2,1458.46 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1458.46,1460.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1461.2,1461.63 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1461.63,1463.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1465.2,1466.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1466.15,1472.29 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1472.29,1479.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1479.18,1481.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1482.4,1482.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1482.23,1483.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1485.4,1485.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1485.30,1486.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1486.24,1488.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1488.32,1489.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1493.4,1494.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1494.30,1495.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1498.8,1504.29 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1504.29,1506.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1506.18,1508.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1509.4,1509.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1509.23,1510.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1512.4,1512.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1512.30,1513.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1513.24,1515.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1515.32,1516.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1520.4,1521.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1521.30,1522.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1526.2,1526.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1526.26,1528.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1528.17,1530.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1535.2,1535.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1535.74,1536.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1536.13,1537.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1537.33,1542.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1542.26,1544.39 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1544.39,1546.7 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1548.5,1548.82 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1565.2,1565.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1565.38,1569.27 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1569.27,1571.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1572.3,1572.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1572.27,1574.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1576.3,1581.32 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1581.32,1586.4 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1588.3,1592.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1592.18,1594.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1595.3,1596.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1596.17,1598.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1599.3,1599.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1602.2,1602.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1603.15,1618.32 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1618.32,1620.33 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1620.33,1621.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1621.40,1623.11 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1626.4,1638.6 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1640.3,1641.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1641.17,1643.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1644.3,1644.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1646.18,1648.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1648.17,1650.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1651.3,1651.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1653.10,1654.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1654.25,1656.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1657.3,1659.32 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1659.32,1661.33 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1661.33,1662.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1662.40,1664.11 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1667.4,1669.26 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1669.26,1671.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1672.4,1673.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1673.25,1675.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1676.4,1676.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1678.3,1678.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1690.51,1695.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1700.73,1702.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1702.16,1704.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1705.2,1706.48 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1706.48,1710.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1711.2,1713.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1713.16,1715.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1716.2,1716.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1727.117,1731.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1731.21,1733.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1734.2,1735.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1735.16,1737.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1738.2,1739.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1739.27,1741.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1742.2,1742.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1764.19,1775.30 7 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1775.30,1777.37 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1777.37,1779.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1781.3,1781.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1781.20,1783.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1797.2,1797.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1797.39,1799.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1801.2,1811.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1811.25,1813.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1815.2,1816.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1816.29,1818.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1824.2,1824.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1824.27,1826.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1831.2,1833.22 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1833.22,1835.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1837.2,1846.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1846.16,1848.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1853.2,1855.27 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1855.27,1857.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1859.2,1876.33 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1876.33,1878.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1880.2,1881.28 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1881.28,1885.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1885.20,1888.33 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1888.33,1889.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1889.40,1891.11 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1894.4,1894.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1894.20,1895.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1900.3,1900.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1900.22,1902.33 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1902.33,1903.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1903.50,1905.11 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1908.4,1908.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1908.19,1909.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1918.3,1918.56 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1918.56,1919.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1927.3,1927.64 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1927.64,1928.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1932.3,1935.32 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1935.32,1936.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1936.39,1938.10 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1942.3,1956.14 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1956.14,1957.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1957.37,1959.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1961.3,1962.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1962.26,1963.9 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1975.2,1975.59 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1975.59,1986.17 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1986.17,1988.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1990.3,1991.34 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1991.34,1993.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1995.3,1996.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1996.29,1998.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1998.21,2001.34 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2001.34,2002.41 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2002.41,2004.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2007.5,2007.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2007.21,2008.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2011.4,2011.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2011.23,2013.34 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2013.34,2014.51 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2014.51,2016.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2019.5,2019.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2019.20,2020.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2023.4,2023.57 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2023.57,2024.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2027.4,2027.65 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2027.65,2028.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2030.4,2031.33 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2031.33,2032.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2032.40,2034.11 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2037.4,2051.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2051.15,2052.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2052.38,2054.6 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2056.4,2057.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2057.27,2058.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2065.2,2066.28 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2066.28,2068.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2072.2,2072.71 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2072.71,2080.30 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2080.30,2081.41 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2081.41,2087.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2089.3,2089.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2089.13,2090.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2090.31,2095.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2095.25,2097.38 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2097.38,2099.7 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2101.5,2101.81 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2112.2,2112.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2112.38,2115.27 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2115.27,2117.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2121.3,2138.30 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2138.30,2140.11 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2140.11,2141.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2143.4,2160.15 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2160.15,2161.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2161.39,2163.6 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2165.4,2165.46 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2167.3,2173.24 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2173.24,2175.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2176.3,2176.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2179.2,2179.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2180.15,2182.24 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2182.24,2184.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2185.3,2185.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2187.18,2199.30 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2199.30,2201.11 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2201.11,2202.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2204.4,2208.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2208.15,2209.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2209.39,2211.6 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2213.4,2213.35 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2215.3,2216.24 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2216.24,2218.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2219.3,2219.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2220.10,2221.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2221.22,2223.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2224.3,2226.27 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2226.27,2228.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2228.20,2230.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2231.4,2233.26 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2233.26,2235.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2236.4,2237.23 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2237.23,2239.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2240.4,2240.46 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2240.46,2244.5 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2245.4,2245.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2247.3,2247.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2252.94,2254.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2254.16,2256.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2258.2,2260.18 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2260.18,2261.59 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2261.59,2262.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2262.36,2264.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2264.10,2266.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2270.2,2270.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2270.13,2272.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2273.2,2273.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2273.50,2275.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2277.2,2277.98 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2281.98,2282.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2282.26,2284.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2286.2,2287.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2287.16,2289.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2291.2,2292.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2292.13,2294.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2297.2,2298.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2298.19,2299.51 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2299.51,2301.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2302.3,2302.55 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2304.2,2304.42 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2304.42,2306.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2308.2,2308.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2308.54,2309.48 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2309.48,2311.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2312.3,2312.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2316.2,2318.53 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:17.82,19.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:21.149,22.55 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:22.55,24.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:25.2,25.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:25.36,27.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:28.2,34.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:34.16,36.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:37.2,37.42 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:37.42,39.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:40.2,40.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:43.105,44.48 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:44.48,46.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:47.2,48.54 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:51.129,53.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:53.16,55.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:56.2,57.53 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:57.53,59.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:60.2,61.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:61.25,63.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:64.2,65.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:65.16,67.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:68.2,68.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:26.97,27.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:27.18,29.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:30.2,30.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:33.37,35.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:37.81,38.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:38.44,40.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:41.2,41.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:41.38,43.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:44.2,44.57 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:47.88,48.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:48.32,50.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:51.2,52.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:52.20,54.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:55.2,55.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:58.40,72.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:74.106,75.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:75.34,77.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:78.2,79.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:79.16,81.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:83.2,84.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:84.16,86.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:88.2,89.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:89.13,91.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:93.2,94.63 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:94.63,96.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:98.2,98.72 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:98.72,100.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:102.2,106.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:109.117,110.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:110.32,112.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:113.2,113.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:113.34,115.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:117.2,118.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:118.16,120.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:121.2,121.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:121.19,123.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:125.2,126.69 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:126.69,128.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:130.2,136.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:18.33,20.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:22.27,37.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:39.93,40.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:40.30,42.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:43.2,43.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:43.28,45.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:46.2,47.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:47.16,49.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:51.2,52.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:52.17,54.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:55.2,56.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:56.19,58.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:59.2,59.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:59.19,61.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:62.2,63.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:63.16,65.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:67.2,74.9 3 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:74.9,76.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:77.2,78.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:78.15,80.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:81.2,85.16 4 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:85.16,87.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:88.2,88.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:88.17,90.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:92.2,101.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:104.48,105.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:105.16,107.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:108.2,109.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:109.29,111.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:112.2,112.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:112.31,114.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:115.2,115.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:118.75,120.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:120.27,121.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:121.32,123.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:123.17,124.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:126.4,126.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:129.2,134.33 3 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:134.33,136.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:137.2,137.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:137.40,138.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:138.39,140.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:141.3,141.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:143.2,143.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:143.34,145.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:146.2,147.35 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:147.35,149.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:150.2,150.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:153.77,154.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:154.20,156.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:157.2,159.31 3 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:159.31,160.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:160.33,162.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:163.3,163.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:163.30,165.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:167.2,170.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:23.91,25.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:27.38,50.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:52.104,53.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:53.38,55.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:56.2,57.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:57.16,59.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:61.2,62.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:62.26,64.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:65.2,66.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:66.30,68.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:69.2,69.72 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:69.72,71.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:73.2,74.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:74.16,76.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:77.2,78.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:78.16,80.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:81.2,82.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:82.16,84.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:85.2,86.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:86.16,88.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:90.2,105.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:105.16,107.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:109.2,109.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:109.19,117.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:118.2,118.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:118.25,120.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:121.2,121.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:121.30,123.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:124.2,124.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:124.31,126.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:127.2,128.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:128.16,130.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:131.2,131.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:134.91,136.9 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:136.9,138.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:139.2,140.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:140.15,141.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:141.19,143.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:144.3,144.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:146.2,146.94 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:149.59,150.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:150.16,152.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:153.2,154.61 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:154.61,156.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:157.2,157.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:160.56,161.75 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:161.75,163.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:164.2,164.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:167.67,169.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:170.17,171.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:172.67,173.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:174.10,175.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:179.60,180.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:180.16,182.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:183.2,184.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:184.25,186.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:187.2,187.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:190.57,191.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:192.15,193.81 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:193.81,195.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:196.3,196.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:197.19,199.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:199.17,201.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:202.3,202.55 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:202.55,204.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:205.3,205.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:206.14,207.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:208.11,209.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:210.10,211.41 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:215.59,216.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:216.16,218.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:219.2,219.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:220.12,221.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:222.14,223.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:224.10,225.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:28.90,30.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:30.16,32.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:34.2,36.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:37.16,38.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:40.16,42.140 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:44.20,46.140 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:48.17,50.142 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:52.17,56.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:56.50,62.63 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:62.63,64.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:66.4,66.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:66.45,68.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:72.4,74.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:74.25,76.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:77.4,77.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:80.3,80.101 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:82.18,84.141 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:86.18,88.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:88.18,90.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:91.3,91.41 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:93.17,96.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:96.50,99.59 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:99.59,101.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:102.4,104.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:104.25,106.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:107.4,107.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:110.3,110.98 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:112.10,116.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:125.86,126.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:126.16,128.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:129.2,130.9 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:130.9,132.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:133.2,133.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:133.22,135.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:137.2,139.31 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:139.31,141.10 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:141.10,143.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:144.3,145.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:145.22,147.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:148.3,149.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:149.26,151.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:152.3,152.68 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:152.68,154.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:155.3,156.37 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:156.37,158.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:159.3,160.107 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:162.2,162.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:165.249,166.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:166.24,168.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:169.2,169.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:169.38,171.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:173.2,174.31 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:174.31,175.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:175.32,177.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:180.2,181.34 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:181.34,182.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:182.29,183.9 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:185.3,197.17 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:197.17,199.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:200.3,200.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:200.20,201.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:203.3,203.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:203.37,205.33 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:205.33,206.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:208.4,208.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:208.19,209.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:209.43,210.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:212.5,212.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:214.4,215.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:215.30,216.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:220.2,220.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:223.113,229.2 5 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:231.101,233.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:247.92,251.16 4 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:251.16,253.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:253.8,253.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:253.24,255.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:259.2,272.51 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:272.51,274.38 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:274.38,275.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:276.50,277.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:278.12,279.107 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:287.2,292.26 5 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:292.26,294.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:297.2,297.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:297.19,301.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:303.2,311.42 5 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:311.42,315.3 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:316.2,341.64 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:341.64,342.86 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:342.86,344.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:345.3,345.56 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:345.56,347.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:348.3,360.19 6 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:360.19,364.4 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:365.3,365.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:369.2,370.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:370.15,372.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:372.27,374.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:375.3,375.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:375.27,377.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:380.2,381.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:381.15,387.28 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:387.28,395.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:395.18,397.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:398.4,398.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:398.23,399.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:401.4,401.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:401.30,402.66 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:402.66,403.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:405.5,406.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:406.12,407.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:409.5,409.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:409.28,413.6 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:414.5,415.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:415.30,416.11 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:419.4,420.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:420.30,421.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:424.8,432.28 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:432.28,438.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:438.18,440.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:441.4,441.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:441.23,442.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:444.4,444.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:444.30,445.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:445.40,447.31 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:447.31,448.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:452.4,455.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:455.30,456.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:461.2,465.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:465.17,467.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:469.2,470.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:470.16,472.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:473.2,473.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:20.79,21.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:21.43,23.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:24.2,24.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:24.29,26.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:27.2,27.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:30.40,63.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:65.68,71.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:71.25,74.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:75.2,75.67 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:78.62,83.19 3 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:83.19,87.3 3 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:88.2,88.89 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:91.101,92.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:92.22,94.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:95.2,96.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:96.18,98.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:99.2,100.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:100.16,102.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:103.2,104.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:104.16,106.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:107.2,107.119 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:110.99,111.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:111.22,113.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:114.2,115.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:115.18,117.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:118.2,119.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:119.16,121.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:122.2,122.51 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:122.51,124.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:125.2,126.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:126.16,128.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:129.2,131.15 3 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:131.15,132.69 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:132.69,134.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:135.3,135.58 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:137.2,137.130 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:140.102,142.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:142.16,144.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:145.2,145.64 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:145.64,147.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:148.2,148.113 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:151.109,153.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:153.16,155.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:156.2,157.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:157.16,159.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:160.2,161.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:161.16,163.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:164.2,164.67 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:167.107,169.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:169.16,171.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:172.2,173.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:173.16,175.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:176.2,176.107 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:176.107,178.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:179.2,179.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:180.41,181.63 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:182.41,183.95 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:184.10,185.83 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:189.111,191.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:191.16,193.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:194.2,195.57 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:195.57,197.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:198.2,199.23 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:199.23,201.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:202.2,203.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:203.16,205.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:206.2,206.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:206.17,208.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:209.2,209.108 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:212.63,215.2 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:217.69,219.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:219.16,221.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:222.2,222.79 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:225.60,227.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:227.16,229.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:230.2,230.57 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:233.137,234.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:234.49,236.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:237.2,238.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:238.16,240.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:241.2,243.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:243.16,245.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:246.2,247.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:247.16,249.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:250.2,250.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:250.22,252.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:253.2,253.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:256.142,258.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:258.16,260.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:261.2,262.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:262.16,264.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:265.2,265.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:265.47,267.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:268.2,269.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:269.16,270.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:270.50,272.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:273.3,273.89 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:275.2,275.173 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:278.157,280.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:280.16,282.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:283.2,283.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:283.47,285.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:286.2,287.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:287.16,288.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:288.50,290.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:291.3,291.89 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:293.2,293.169 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:296.104,297.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:297.22,299.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:300.2,301.61 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:301.61,303.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:303.20,304.9 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:307.2,307.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:307.19,309.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:310.2,317.8 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:320.119,322.39 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:322.39,323.81 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:323.81,325.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:327.2,327.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:330.71,332.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:332.16,334.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:335.2,335.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:17.61,105.23 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:105.23,122.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:123.2,123.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:126.104,127.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:127.61,129.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:130.2,130.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:130.38,132.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:133.2,134.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:134.16,136.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:137.2,138.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:138.16,140.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:141.2,147.107 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:147.107,149.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:150.2,151.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:151.16,153.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:154.2,170.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:170.19,172.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:173.2,173.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:176.103,177.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:177.61,179.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:180.2,180.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:180.38,182.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:183.2,184.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:184.16,186.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:187.2,191.106 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:191.106,193.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:194.2,195.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:195.16,197.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:198.2,200.31 3 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:200.31,207.36 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:207.36,218.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:219.3,220.35 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:222.2,230.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:233.107,234.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:234.61,236.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:237.2,237.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:237.38,239.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:240.2,241.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:241.16,243.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:244.2,248.110 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:248.110,250.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:251.2,252.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:252.16,254.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:255.2,256.33 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:256.33,266.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:267.2,275.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:278.108,279.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:279.61,281.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:282.2,282.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:282.37,284.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:285.2,286.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:286.16,288.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:289.2,290.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:290.19,292.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:293.2,293.104 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:293.104,295.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:296.2,297.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:297.16,299.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:300.2,307.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:307.16,309.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:310.2,311.43 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:311.43,318.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:319.2,332.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:332.22,334.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:335.2,335.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:338.108,339.62 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:339.62,341.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:342.2,342.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:342.38,344.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:345.2,346.9 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:346.9,348.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:349.2,350.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:350.16,352.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:353.2,357.16 5 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:357.16,359.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:360.2,370.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:373.109,374.62 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:374.62,376.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:377.2,377.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:377.38,379.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:380.2,381.9 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:381.9,383.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:384.2,385.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:385.16,387.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:388.2,390.32 3 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:390.32,392.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:393.2,394.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:394.16,396.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:397.2,403.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:406.106,407.62 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:407.62,409.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:410.2,410.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:410.38,412.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:413.2,414.9 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:414.9,416.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:417.2,418.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:418.16,420.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:421.2,423.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:423.16,424.41 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:424.41,434.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:435.3,435.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:437.2,445.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:483.65,484.42 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:484.42,485.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:485.39,487.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:489.2,489.85 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:489.85,491.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:492.2,492.95 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:495.102,496.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:496.38,498.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:499.2,499.58 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:499.58,501.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:502.2,502.90 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:505.60,508.2 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:510.66,512.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:512.26,514.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:515.2,515.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:518.69,521.33 3 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:521.33,523.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:523.21,524.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:526.3,526.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:526.34,527.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:529.3,530.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:532.2,532.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:535.63,537.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:537.19,539.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:540.2,541.42 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:541.42,543.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:544.2,544.57 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:544.57,546.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:547.2,547.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:547.54,549.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:550.2,550.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:553.70,557.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:559.66,561.9 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:561.9,563.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:564.2,566.17 3 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:566.17,568.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:569.2,569.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:570.103,572.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:573.34,574.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:575.10,576.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:580.56,581.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:581.37,583.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:584.2,584.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:584.26,586.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:586.37,587.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:589.3,589.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:591.2,591.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:594.90,602.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:604.68,605.71 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:605.71,607.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:607.17,609.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:610.3,610.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:612.2,613.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:613.16,615.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:616.2,617.41 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:617.41,619.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:620.2,620.78 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:623.65,625.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:625.16,627.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:628.2,628.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:628.17,630.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:631.2,631.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:634.51,635.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:635.16,637.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:638.2,638.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:641.56,642.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:642.28,644.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:645.2,646.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:649.92,651.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:651.29,653.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:654.2,654.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:657.86,659.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:659.29,661.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:662.2,662.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:665.94,667.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:667.29,669.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:670.2,670.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:673.98,675.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:675.29,677.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:678.2,678.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:17.93,18.104 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:18.104,20.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:22.2,23.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:23.16,25.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:27.2,28.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:28.19,30.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:32.2,35.33 3 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:35.33,36.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:36.47,39.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:42.2,44.20 3 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:44.20,47.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:48.2,49.68 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:49.68,50.48 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:50.48,52.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:53.3,53.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:53.32,55.23 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:55.23,56.63 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:56.63,58.6 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:59.5,59.53 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:61.4,61.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:64.2,71.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:71.17,73.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:73.8,73.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:73.29,75.36 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:75.36,77.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:78.3,83.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:86.2,86.35 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:86.35,88.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:90.2,97.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:97.16,99.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:101.2,110.28 3 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:110.28,112.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:113.2,124.16 4 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:124.16,126.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:127.2,127.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:133.93,134.35 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:134.35,136.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:138.2,139.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:139.16,141.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:143.2,144.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:144.16,146.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:147.2,147.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:147.17,149.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:151.2,152.33 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:152.33,153.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:153.47,156.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:159.2,160.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:160.16,162.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:164.2,176.26 3 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:176.26,178.23 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:178.23,180.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:181.3,192.5 3 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:195.2,196.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:196.16,198.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:199.2,199.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:22.104,24.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:24.16,26.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:28.2,29.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:29.18,31.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:33.2,33.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:34.13,35.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:36.13,37.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:38.14,39.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:40.16,41.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:42.10,43.95 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:51.67,53.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:57.68,58.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:58.33,60.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:61.2,61.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:67.42,69.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:74.61,76.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:76.26,78.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:79.2,79.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:85.90,86.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:86.49,88.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:90.2,91.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:91.15,93.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:94.2,95.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:95.17,97.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:100.2,103.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:103.16,105.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:107.2,113.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:113.12,115.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:115.18,117.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:118.3,119.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:119.20,121.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:122.3,124.48 3 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:125.8,127.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:129.2,130.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:130.16,132.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:134.2,139.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:145.90,147.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:147.15,149.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:151.2,152.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:152.16,154.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:156.2,157.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:157.16,158.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:158.47,160.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:161.3,161.56 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:164.2,170.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:170.19,173.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:173.8,175.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:176.2,176.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:181.92,183.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:183.16,185.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:187.2,188.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:188.16,190.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:192.2,200.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:200.25,207.28 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:207.28,209.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:210.3,210.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:212.2,212.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:216.93,217.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:217.52,219.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:221.2,222.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:222.15,224.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:226.2,227.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:227.16,229.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:231.2,231.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:231.47,232.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:232.47,234.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:235.3,235.59 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:238.2,241.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:35.127,36.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:36.23,38.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:39.2,40.40 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:40.40,42.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:43.2,43.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:43.37,45.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:46.2,46.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:46.37,48.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:49.2,49.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:52.23,80.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:82.26,140.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:142.92,143.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:143.25,145.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:147.2,148.49 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:148.49,150.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:152.2,152.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:153.17,154.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:154.24,156.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:157.3,158.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:158.17,160.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:161.3,165.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:166.17,167.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:167.22,169.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:170.3,170.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:170.22,172.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:173.3,174.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:174.17,176.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:177.3,181.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:182.16,189.23 7 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:189.23,191.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:192.3,192.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:192.24,194.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:195.3,195.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:195.39,197.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:198.3,207.17 3 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:207.17,209.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:210.3,210.69 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:210.69,212.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:213.3,213.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:214.10,215.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:219.92,220.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:220.25,222.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:224.2,225.49 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:225.49,227.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:229.2,229.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:230.17,232.24 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:232.24,234.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:235.3,236.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:236.17,238.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:239.3,239.59 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:239.59,241.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:242.3,242.81 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:242.81,244.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:245.3,250.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:251.17,253.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:253.22,255.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:256.3,257.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:257.17,259.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:260.3,260.79 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:260.79,262.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:263.3,268.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:269.10,270.66 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:274.91,276.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:276.16,278.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:279.2,279.67 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:279.67,280.76 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:280.76,282.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:285.2,286.52 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:286.52,288.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:289.2,289.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:292.74,294.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:294.16,296.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:297.2,297.62 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:297.62,299.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:300.2,300.68 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:303.109,304.56 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:304.56,306.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:307.2,307.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:307.25,309.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:310.2,310.81 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:310.81,312.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:313.2,313.102 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:313.102,315.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:316.2,316.108 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:316.108,318.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:319.2,319.99 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:319.99,321.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:322.2,322.99 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:322.99,324.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:325.2,325.60 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:325.60,327.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:328.2,328.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:328.34,330.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:331.2,331.114 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:331.114,333.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:334.2,334.66 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:334.66,336.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:337.2,337.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:337.40,339.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:340.2,340.132 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:340.132,342.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:343.2,343.35 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:343.35,345.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:346.2,346.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:349.92,350.103 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:350.103,352.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:354.2,355.52 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:355.52,357.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:358.2,358.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:358.32,360.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:361.2,361.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:364.108,365.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:365.19,367.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:368.2,369.53 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:369.53,371.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:372.2,372.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:372.19,374.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:375.2,375.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:375.39,376.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:376.34,378.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:380.2,380.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:383.66,385.53 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:385.53,387.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:388.2,388.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:388.19,390.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:391.2,391.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:10.101,12.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:12.16,14.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:16.2,18.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:19.16,20.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:21.14,22.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:23.15,24.84 1 0 +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:25.16,26.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:27.10,28.97 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:21.75,23.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:25.41,28.2 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:30.31,37.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:39.38,46.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:48.50,56.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:58.43,70.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:72.80,73.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:73.36,75.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:76.2,76.48 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:76.48,78.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:79.2,79.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:82.97,84.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:84.16,86.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:87.2,88.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:88.16,90.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:91.2,92.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:92.16,94.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:95.2,96.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:96.16,98.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:99.2,99.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:102.104,104.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:104.16,106.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:107.2,108.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:108.16,110.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:111.2,112.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:112.16,114.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:115.2,116.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:116.16,118.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:119.2,119.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:122.96,124.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:124.16,126.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:127.2,128.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:128.19,130.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:131.2,132.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:132.18,134.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:135.2,141.79 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:141.79,143.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:143.17,145.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:146.3,146.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:148.2,148.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:151.77,153.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:153.16,155.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:156.2,157.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:157.19,159.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:160.2,160.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:10.101,12.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:12.16,14.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:16.2,17.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:17.18,19.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:21.2,21.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:22.15,23.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:24.13,25.42 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:26.14,27.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:28.16,29.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:30.16,31.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:32.10,33.102 1 0 diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-02/create-database.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-02/create-database.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-02/create-database.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-02/create-database.stdout.log new file mode 100644 index 00000000..4b15bd57 --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-02/create-database.stdout.log @@ -0,0 +1 @@ +CREATE DATABASE diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-02/create-pgvector.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-02/create-pgvector.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-02/create-pgvector.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-02/create-pgvector.stdout.log new file mode 100644 index 00000000..d26bad14 --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-02/create-pgvector.stdout.log @@ -0,0 +1 @@ +CREATE EXTENSION diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-02/database-identity.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-02/database-identity.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-02/database-identity.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-02/database-identity.stdout.log new file mode 100644 index 00000000..1b4d5e27 --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-02/database-identity.stdout.log @@ -0,0 +1 @@ +{"database" : "engram_prc_rg_test_08822acc1e43ac35_r2", "schema" : "public", "server_version" : "17.10 (Debian 17.10-1.pgdg12+1)", "user" : "engram"} diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-02/go-test-summary.json b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-02/go-test-summary.json new file mode 100644 index 00000000..9950cc26 --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-02/go-test-summary.json @@ -0,0 +1,40 @@ +{ + "schema_version": 1, + "verdict": "PASS", + "input_path": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-repeat3\\repeat-02\\go-test.stdout.jsonl", + "fail_on_unexpected_skip": true, + "allowed_skip_identities": [], + "counts": { + "packages": 1, + "tests": 1, + "passed": 1, + "failed": 0, + "skipped": 0, + "no_tests": 0, + "zero_tests": 0, + "incomplete": 0, + "unexpected_skips": 0, + "malformed_lines": 0 + }, + "packages": [ + { + "package": "github.com/thebtf/engram/internal/mcp", + "outcome": "pass", + "elapsed_seconds": 3.941, + "last_output": "ok \tgithub.com/thebtf/engram/internal/mcp\t3.932s\tcoverage: 0.1% of statements", + "tests_observed": 1 + } + ], + "tests": [ + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestEC_F1_TagDerivedBackfill_T007", + "outcome": "pass", + "elapsed_seconds": 3.8, + "last_output": "--- PASS: TestEC_F1_TagDerivedBackfill_T007 (3.80s)", + "skip_allowed": false + } + ], + "unexpected_skips": [], + "errors": [] +} diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-02/go-test.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-02/go-test.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-02/go-test.stdout.jsonl b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-02/go-test.stdout.jsonl new file mode 100644 index 00000000..fd7f4ed8 --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-02/go-test.stdout.jsonl @@ -0,0 +1,16 @@ +{"Time":"2026-07-11T03:53:45.6071547+03:00","Action":"start","Package":"github.com/thebtf/engram/internal/mcp"} +{"Time":"2026-07-11T03:53:45.700698+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007"} +{"Time":"2026-07-11T03:53:45.700698+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":"=== RUN TestEC_F1_TagDerivedBackfill_T007\n"} +{"Time":"2026-07-11T03:53:46.6298778+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":"{\"level\":\"warn\",\"error\":\"ERROR: relation \\\"observation_vectors\\\" does not exist (SQLSTATE 42P01)\",\"time\":\"2026-07-11T03:53:46+03:00\",\"message\":\"migration 040: orphan vector cleanup failed (non-fatal)\"}\n"} +{"Time":"2026-07-11T03:53:46.6298778+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":"{\"level\":\"info\",\"garbage_deleted\":0,\"orphan_vectors_deleted\":0,\"time\":\"2026-07-11T03:53:46+03:00\",\"message\":\"migration 040: garbage cleanup complete\"}\n"} +{"Time":"2026-07-11T03:53:46.6383775+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":"{\"level\":\"info\",\"orphan_vectors_deleted\":0,\"time\":\"2026-07-11T03:53:46+03:00\",\"message\":\"migration 041: orphan vector purge complete\"}\n"} +{"Time":"2026-07-11T03:53:46.6463803+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":"{\"level\":\"info\",\"patterns_deleted\":0,\"time\":\"2026-07-11T03:53:46+03:00\",\"message\":\"migration 042: low-quality pattern purge complete\"}\n"} +{"Time":"2026-07-11T03:53:46.6819063+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":"{\"level\":\"info\",\"total_deleted\":0,\"time\":\"2026-07-11T03:53:46+03:00\",\"message\":\"migration 043: radical observation cleanup complete\"}\n"} +{"Time":"2026-07-11T03:53:47.9215183+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":"{\"level\":\"warn\",\"error\":\"ERROR: extension \\\"vectorscale\\\" is not available (SQLSTATE 0A000)\",\"time\":\"2026-07-11T03:53:47+03:00\",\"message\":\"migration 109: vectorscale extension not available, skipping DiskANN index\"}\n"} +{"Time":"2026-07-11T03:53:49.110737+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":"{\"level\":\"debug\",\"connections\":1,\"time\":\"2026-07-11T03:53:49+03:00\",\"message\":\"Connection pool warmed\"}\n"} +{"Time":"2026-07-11T03:53:49.5032686+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":"--- PASS: TestEC_F1_TagDerivedBackfill_T007 (3.80s)\n"} +{"Time":"2026-07-11T03:53:49.5032686+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Elapsed":3.8} +{"Time":"2026-07-11T03:53:49.5032686+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Output":"PASS\n"} +{"Time":"2026-07-11T03:53:49.5213011+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Output":"coverage: 0.1% of statements\n"} +{"Time":"2026-07-11T03:53:49.5477999+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Output":"ok \tgithub.com/thebtf/engram/internal/mcp\t3.932s\tcoverage: 0.1% of statements\n"} +{"Time":"2026-07-11T03:53:49.5477999+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Elapsed":3.941} diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-02/pg-stat-activity-after.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-02/pg-stat-activity-after.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-02/pg-stat-activity-after.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-02/pg-stat-activity-after.stdout.log new file mode 100644 index 00000000..fe51488c --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-02/pg-stat-activity-after.stdout.log @@ -0,0 +1 @@ +[] diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-02/pg-stat-activity-before.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-02/pg-stat-activity-before.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-02/pg-stat-activity-before.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-02/pg-stat-activity-before.stdout.log new file mode 100644 index 00000000..fe51488c --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-02/pg-stat-activity-before.stdout.log @@ -0,0 +1 @@ +[] diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-02/repeat-summary.json b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-02/repeat-summary.json new file mode 100644 index 00000000..a09784fa --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-02/repeat-summary.json @@ -0,0 +1,33 @@ +{ + "repeat": 2, + "verdict": "PASS", + "database": "engram_prc_rg_test_08822acc1e43ac35_r2", + "schema": "public", + "database_schema_identity": "engram_prc_rg_test_08822acc1e43ac35_r2.public", + "database_dsn": "REDACTED_DATABASE_DSN", + "database_create_confirmed": true, + "sequential_execution": { + "package_parallelism": 1, + "test_parallelism": 1 + }, + "race": false, + "connection_budget": 20, + "server_sessions_before": 6, + "server_sessions_after": 6, + "sessions_before": 0, + "sessions_after": 0, + "go_test_exit": 0, + "json_parser_exit": 0, + "coverage_policy": "Targeted", + "coverage_exit": 0, + "cleanup_exit": 0, + "cleanup_status": "PASS", + "required_session_start_execution": { + "schema_version": 1, + "verdict": "NOT_APPLICABLE", + "reason": "only an unfiltered canonical ./... run requires the 12-test session-start execution proof" + }, + "cleanup_summary": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-repeat3\\repeat-02\\cleanup\\cleanup.json", + "errors": [], + "artifact_directory": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-repeat3\\repeat-02" +} diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-02/server-connection-count-after.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-02/server-connection-count-after.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-02/server-connection-count-after.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-02/server-connection-count-after.stdout.log new file mode 100644 index 00000000..1e8b3149 --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-02/server-connection-count-after.stdout.log @@ -0,0 +1 @@ +6 diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-02/server-connection-count-before.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-02/server-connection-count-before.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-02/server-connection-count-before.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-02/server-connection-count-before.stdout.log new file mode 100644 index 00000000..1e8b3149 --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-02/server-connection-count-before.stdout.log @@ -0,0 +1 @@ +6 diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-02/targeted-coverage.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-02/targeted-coverage.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-02/targeted-coverage.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-02/targeted-coverage.stdout.log new file mode 100644 index 00000000..c958686c --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-02/targeted-coverage.stdout.log @@ -0,0 +1,352 @@ +github.com/thebtf/engram/internal/mcp/audit_helpers.go:33: effectiveAuditWriter 0.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:44: isAuditEnabled 0.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:52: runAuditAsync 0.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:77: marshalState 0.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:92: logAuditCreate 0.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:117: logAuditEdit 0.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:142: logAuditDelete 0.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:166: logAuditGeneric 0.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:189: logAuditSupersede 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:30: parseArgs 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:46: coerceString 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:67: coerceInt 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:97: coerceInt64 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:127: coerceFloat64 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:151: coerceBool 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:177: coerceStringSlice 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:204: coerceInt64Slice 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:222: clampToInt 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:236: clampInt64ToInt 0.0% +github.com/thebtf/engram/internal/mcp/context.go:17: extractProjectFromHeader 0.0% +github.com/thebtf/engram/internal/mcp/context.go:22: contextWithProject 0.0% +github.com/thebtf/engram/internal/mcp/context.go:29: ContextWithProject 0.0% +github.com/thebtf/engram/internal/mcp/context.go:35: projectFromContext 0.0% +github.com/thebtf/engram/internal/mcp/context.go:41: contextWithSession 0.0% +github.com/thebtf/engram/internal/mcp/context.go:48: ContextWithSession 0.0% +github.com/thebtf/engram/internal/mcp/context.go:54: sessionFromContext 0.0% +github.com/thebtf/engram/internal/mcp/context.go:61: actorFromContext 0.0% +github.com/thebtf/engram/internal/mcp/health.go:22: NewMCPHealth 0.0% +github.com/thebtf/engram/internal/mcp/health.go:29: RecordRequest 0.0% +github.com/thebtf/engram/internal/mcp/health.go:36: RecordError 0.0% +github.com/thebtf/engram/internal/mcp/health.go:42: rotateWindowIfNeeded 0.0% +github.com/thebtf/engram/internal/mcp/health.go:55: HandleHealth 0.0% +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:28: ruleGovernanceCaptureEnabled 0.0% +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:39: captureActiveRuleIntent 0.0% +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:104: ruleIntentFingerprint 0.0% +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:113: marshalRuleCandidateIntentResponse 0.0% +github.com/thebtf/engram/internal/mcp/server.go:127: NewServer 100.0% +github.com/thebtf/engram/internal/mcp/server.go:141: SetBackfillStatusFunc 0.0% +github.com/thebtf/engram/internal/mcp/server.go:146: SetVersionedDocumentStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:151: SetIssueStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:156: SetMemoryStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:161: SetMetaMemoryIndex 0.0% +github.com/thebtf/engram/internal/mcp/server.go:166: SetHintQueue 0.0% +github.com/thebtf/engram/internal/mcp/server.go:171: SetStateStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:176: SetDirectiveCaptureService 0.0% +github.com/thebtf/engram/internal/mcp/server.go:181: SetBehavioralRulesStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:186: SetRuleGovernanceStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:191: SetRuleInjectionTelemetryStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:195: SetPromotionStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:199: SetGraphStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:204: SetNodesStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:211: SetAuditStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:216: SetPurgeStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:222: SetCandidateStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:228: SetSnapshotStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:234: SetBulkFacade 0.0% +github.com/thebtf/engram/internal/mcp/server.go:240: setTestAuditWriter 0.0% +github.com/thebtf/engram/internal/mcp/server.go:246: setTestMemoryEditor 0.0% +github.com/thebtf/engram/internal/mcp/server.go:252: setTestMemorySignificanceUpdater 0.0% +github.com/thebtf/engram/internal/mcp/server.go:260: SetWriteLintOrchestrator 0.0% +github.com/thebtf/engram/internal/mcp/server.go:269: SetRedactionRules 0.0% +github.com/thebtf/engram/internal/mcp/server.go:274: SetEmbeddingStores 0.0% +github.com/thebtf/engram/internal/mcp/server.go:282: SetRerankClient 0.0% +github.com/thebtf/engram/internal/mcp/server.go:290: SetStatsDB 0.0% +github.com/thebtf/engram/internal/mcp/server.go:297: HandleRequest 0.0% +github.com/thebtf/engram/internal/mcp/server.go:303: ListTools 0.0% +github.com/thebtf/engram/internal/mcp/server.go:332: Version 0.0% +github.com/thebtf/engram/internal/mcp/server.go:383: Run 0.0% +github.com/thebtf/engram/internal/mcp/server.go:427: handleRequest 0.0% +github.com/thebtf/engram/internal/mcp/server.go:461: handleNotification 0.0% +github.com/thebtf/engram/internal/mcp/server.go:473: handleInitialize 0.0% +github.com/thebtf/engram/internal/mcp/server.go:496: buildInstructions 0.0% +github.com/thebtf/engram/internal/mcp/server.go:660: storeMemoryTool 0.0% +github.com/thebtf/engram/internal/mcp/server.go:712: recallMemoryTool 0.0% +github.com/thebtf/engram/internal/mcp/server.go:805: primaryTools 0.0% +github.com/thebtf/engram/internal/mcp/server.go:942: handleToolsList 0.0% +github.com/thebtf/engram/internal/mcp/server.go:1612: handleToolsCall 0.0% +github.com/thebtf/engram/internal/mcp/server.go:1644: sanitizeToolCallArgs 0.0% +github.com/thebtf/engram/internal/mcp/server.go:1656: callTool 0.0% +github.com/thebtf/engram/internal/mcp/server.go:1874: sendResponse 0.0% +github.com/thebtf/engram/internal/mcp/server.go:1884: sendError 0.0% +github.com/thebtf/engram/internal/mcp/server.go:1896: handleFindSimilarObservations 0.0% +github.com/thebtf/engram/internal/mcp/server.go:1927: handleGetMemoryStats 0.0% +github.com/thebtf/engram/internal/mcp/server.go:2055: handleBackfillStatus 0.0% +github.com/thebtf/engram/internal/mcp/server.go:2071: handleCheckSystemHealth 0.0% +github.com/thebtf/engram/internal/mcp/server.go:2216: handleAnalyzeSearchPatterns 0.0% +github.com/thebtf/engram/internal/mcp/server.go:2246: handleSearchSessions 0.0% +github.com/thebtf/engram/internal/mcp/server.go:2251: handleListSessions 0.0% +github.com/thebtf/engram/internal/mcp/tools_admin.go:18: buildAdminTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_admin.go:68: adminActionsForEnv 33.3% +github.com/thebtf/engram/internal/mcp/tools_admin.go:80: vnextEnabled 0.0% +github.com/thebtf/engram/internal/mcp/tools_admin.go:84: handleAdmin 0.0% +github.com/thebtf/engram/internal/mcp/tools_admin.go:120: handlePurgeProject 0.0% +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:27: ambientHintsEnabledFromEnv 0.0% +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:32: ambientHintsTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:48: handleGetAmbientHints 0.0% +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:86: normalizeAmbientHintsToolLimit 0.0% +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:96: ambientHintItems 0.0% +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:114: errMissingSessionID 0.0% +github.com/thebtf/engram/internal/mcp/tools_brief.go:31: handleGetMemoryBrief 0.0% +github.com/thebtf/engram/internal/mcp/tools_brief.go:107: memoryBriefUsesPrincipalScope 0.0% +github.com/thebtf/engram/internal/mcp/tools_brief.go:115: handlePrincipalMemoryBrief 0.0% +github.com/thebtf/engram/internal/mcp/tools_brief.go:259: truncateBriefContent 0.0% +github.com/thebtf/engram/internal/mcp/tools_brief.go:270: filterInjectionByScope 0.0% +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:25: bulkOpsTools 0.0% +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:95: handleBulkPromote 0.0% +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:154: handleBulkDelete 0.0% +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:211: handleBulkSupersede 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:31: candidateItemFromDomain 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:51: newCandidateReviewSnapshot 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:59: requireCandidateReviewSnapshot 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:68: candidateTools 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:165: handleListCandidates 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:208: handleGetCandidate 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:239: handlePromoteCandidate 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:348: handleRejectCandidate 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:402: handleSupersedeCandidate 0.0% +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:34: codeIntelEnabled 0.0% +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:42: SetCodeChunkStore 0.0% +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:48: codebaseSearchTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:79: codebaseStatusTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:100: handleCodebaseSearch 0.0% +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:194: handleCodebaseStatus 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:21: getVault 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:35: credentialStore 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:49: handleStoreCredential 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:130: handleGetCredential 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:192: handleListCredentials 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:243: handleDeleteCredential 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:302: handleVaultStatus 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:338: expandTagHierarchy 0.0% +github.com/thebtf/engram/internal/mcp/tools_directives.go:16: directivesCaptureEnabledFromEnv 0.0% +github.com/thebtf/engram/internal/mcp/tools_directives.go:20: rememberDirectiveTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_directives.go:38: currentDirectiveCaptureService 0.0% +github.com/thebtf/engram/internal/mcp/tools_directives.go:48: handleRememberDirective 0.0% +github.com/thebtf/engram/internal/mcp/tools_directives.go:72: parseRememberDirectiveArgs 0.0% +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:10: handleDocsConsolidated 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents.go:15: handleListCollections 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents.go:61: handleListDocuments 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents.go:121: handleGetDocument 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents.go:165: handleRemoveDocument 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents.go:197: handleIngestDocument 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents.go:235: handleSearchCollection 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:15: handleDocCreate 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:61: handleDocRead 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:117: handleDocUpdate 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:122: handleDocList 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:175: handleDocHistory 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:232: handleDocComment 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:19: SetExperienceProvider 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:23: experienceHistoryTools 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:40: experienceHistoryReadSchema 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:65: experienceHistoryDetailSchema 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:82: experienceHistoryTriggerEnum 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:91: handleExperienceHistoryRead 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:103: handleExperienceHistoryDetail 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:115: parseExperienceHistoryReadArgs 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:142: parseExperienceHistoryDetailArgs 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:157: experienceHistoryTriggersFromArgs 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:180: marshalExperienceHistory 0.0% +github.com/thebtf/engram/internal/mcp/tools_feedback.go:12: handleFeedbackConsolidated 0.0% +github.com/thebtf/engram/internal/mcp/tools_feedback.go:36: handleSetSessionOutcome 0.0% +github.com/thebtf/engram/internal/mcp/tools_governance.go:27: governanceTools 0.0% +github.com/thebtf/engram/internal/mcp/tools_governance.go:98: handleListSnapshots 0.0% +github.com/thebtf/engram/internal/mcp/tools_governance.go:167: handleRollbackSnapshot 0.0% +github.com/thebtf/engram/internal/mcp/tools_governance.go:215: handlePinSnapshot 0.0% +github.com/thebtf/engram/internal/mcp/tools_governance.go:258: handleRedactionRulesStatus 0.0% +github.com/thebtf/engram/internal/mcp/tools_governance.go:284: resolveGovernanceActor 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:64: handleGraph 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:100: graphAddEdge 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:216: mcpGraphEndpointExists 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:243: mcpGraphEdgeAlreadyExists 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:276: graphAddNode 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:317: graphRemoveEdge 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:332: graphGetEdges 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:397: filterEdgesByNodeType 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:457: graphTraverse 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:480: graphFindPath 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:502: graphSynonyms 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:23: graphCreateEdgeWithGuards 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:80: graphEndpointExistsWithGuards 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:114: graphDuplicateEdgeExists 0.0% +github.com/thebtf/engram/internal/mcp/tools_ingest.go:25: handleIngest 0.0% +github.com/thebtf/engram/internal/mcp/tools_ingest.go:43: ingestDocument 0.0% +github.com/thebtf/engram/internal/mcp/tools_instincts.go:20: handleImportInstincts 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:19: issuesToolSchema 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:109: validateIssueActionParams 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:143: handleIssues 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:189: resolveSourceProject 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:205: handleIssueCreate 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:250: handleIssueList 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:311: handleIssueGet 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:344: handleIssueUpdate 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:382: handleIssueComment 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:408: handleIssueReopen 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:425: handleIssueClose 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:22: handleLifecycle 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:48: lifecycleInfo 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:87: lifecyclePromote 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:118: lifecycleDemote 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:149: lifecycleSetConfidence 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:172: lifecycleSetDefeasibility 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:191: lifecycleSleepStatus 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:197: lifecycleDecayPreview 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:233: marshalJSON 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:35: vnextFEnabled 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:42: isValidPrivacyScope 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:54: derivePrivacyScopeFromLegacy 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:82: deriveLegacyScopeFromPrivacy 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:93: applyPrincipalMemoryMetadata 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:135: addPrincipalMemoryFields 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:161: newScopedWriteLintMemoryStore 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:172: writeLintVisibilityCaller 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:186: writeLintVisibilityOptions 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:192: scopedWriteLintMemoryStore 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:202: filterVisibleWriteGateCandidates 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:214: domainManageAllowed 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:218: List 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:272: writeLintVisibilityFetchLimit 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:286: Get 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:297: Create 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:301: Update 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:305: MarkSuperseded 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:319: effectiveMemoryEditor 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:329: isValidStoreObservationType 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:354: handleStoreMemory 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1111: handleEditMemory 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1218: computeTTLDays 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1258: truncateTitle 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1270: keepRecallMemory 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1280: keepRecallMemoryFilters 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1342: handleRecallMemory 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1690: staleAdvisory 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1700: marshalWithStaleAdvisory 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1727: Rank 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1751: handleRecallMemoryHybrid 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:2252: handleRateMemory 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:2281: handleSuppressMemory 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:17: SetDomainRegistryService 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:21: checkDomainWriteMCP 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:43: addDomainWriteDecisionFields 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:51: marshalStoreMemoryAugmented 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:26: newMemoryStoreSignificanceUpdater 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:33: s6OutcomeEnabledFromEnv 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:37: effectiveMemorySignificanceUpdater 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:47: currentMemorySignificanceUpdater 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:58: rateMemorySignificanceTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:74: handleRateMemorySignificance 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:109: RateMemorySignificance 0.0% +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:18: s2MetaMemoryEnabled 0.0% +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:22: knowAboutTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:39: handleKnowAbout 0.0% +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:104: parseKnowAboutLimit 0.0% +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:118: summarizeMetaIndexTags 0.0% +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:153: summarizeMetaIndexDateRange 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:23: SetPrincipalMemoryQueryService 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:27: principalMemoryQueryTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:52: handleQueryPrincipalMemory 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:134: principalMemoryQueryCaller 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:149: parsePrincipalMemoryQueryLimit 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:160: principalMemoryQueryText 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:167: parsePrincipalMemoryQueryVisibility 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:179: parsePrincipalMemoryQueryOffset 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:190: parsePrincipalMemoryQueryInt 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:215: parsePrincipalMemoryQueryBool 0.0% +github.com/thebtf/engram/internal/mcp/tools_recall.go:28: handleRecall 0.0% +github.com/thebtf/engram/internal/mcp/tools_recall.go:125: parseRecallIncludedPrincipals 0.0% +github.com/thebtf/engram/internal/mcp/tools_recall.go:165: appendRecallIncludedPrincipalMemories 0.0% +github.com/thebtf/engram/internal/mcp/tools_recall.go:223: recallIncludeTargetMatchesCaller 0.0% +github.com/thebtf/engram/internal/mcp/tools_recall.go:231: recallPrincipalQueryItemToMemory 0.0% +github.com/thebtf/engram/internal/mcp/tools_recall.go:247: handleRecallSearch 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:20: currentReviewLoopCandidateLister 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:30: reviewLoopCandidateTools 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:65: reviewLoopReadSchema 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:78: reviewPacketIDSchema 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:91: handleReviewMetricsRead 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:110: handleReviewQueueRead 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:140: handleReviewPacketDetail 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:151: handleReviewPacketPreviewAction 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:167: handleReviewPacketApplyAction 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:189: parseReviewLoopReadArgs 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:212: reviewLoopMCPPacketTypeSupported 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:217: reviewLoopActionFromArgs 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:225: reviewLoopReasonFromArgs 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:233: loadReviewPacketCandidate 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:256: applyReviewPacketPreserve 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:278: applyReviewPacketSuppress 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:296: reviewLoopMemoryFromCandidate 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:320: filterRiskyMCPReviewCandidates 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:330: marshalReviewLoop 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:17: ruleGovernanceReadTools 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:126: handleRuleGovernanceHealth 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:176: handleRuleGovernanceQueue 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:233: handleRuleGovernanceSnapshots 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:278: handleRuleGovernanceUsefulness 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:338: handleRuleGovernanceTransition 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:373: handleRuleGovernancePinSnapshot 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:406: handleRuleGovernanceRollback 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:483: requireRuleGovernanceReadAccess 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:495: requireRuleGovernanceProjectOrAdmin 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:505: ruleGovernanceCallerIsAdmin 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:510: requireRuleGovernanceAdminAccess 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:518: redactRuleGovernanceEvidenceHandles 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:535: redactRuleGovernanceEvidenceHandle 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:553: ruleGovernanceEvidenceHandleHasSensitiveText 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:559: isCanonicalRuleGovernanceEvidenceHandle 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:580: isSafeRuleGovernanceEvidenceID 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:594: parseRuleGovernanceTransitionRequest 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:604: parseRuleGovernanceSince 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:623: boundedRuleGovernanceLimit 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:634: formatRuleGovernanceTime 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:641: formatRuleGovernanceTimePtr 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:649: stringRuleCandidateStatusCounts 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:657: stringRuleVersionStateCounts 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:665: stringRuleArbiterRunStatusCounts 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:673: stringRuleInjectionEventTypeCounts 0.0% +github.com/thebtf/engram/internal/mcp/tools_rules.go:17: handleStoreRule 0.0% +github.com/thebtf/engram/internal/mcp/tools_rules.go:133: handleListRules 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:22: handleSettingsConsolidated 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:51: SetSettingsStore 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:57: settingsStore 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:67: isSecretSettingKey 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:74: requireAdmin 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:85: handleSetSetting 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:145: handleGetSetting 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:181: handleListSettings 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:216: handleDeleteSetting 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:35: resumeScopesFromFields 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:52: stateTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:82: setStateTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:142: handleGetState 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:219: handleSetState 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:274: decodeSessionStateForWrite 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:292: validateSessionStateBudget 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:303: validateNativeResumePacket 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:349: decodeProjectStateForWrite 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:364: requireStateObject 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:383: requireNestedObject 0.0% +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:10: handleStoreConsolidated 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:21: SetTemporalTruthProvider 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:25: temporalTruthEnabledFromEnv 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:30: temporalTruthTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:39: temporalTruthRefreshTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:48: temporalTruthRefreshSchema 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:58: temporalTruthSchema 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:72: currentTemporalTruthProvider 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:82: handleTemporalTruth 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:102: handleTemporalTruthRefresh 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:122: parseTemporalTruthArgs 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:151: parseTemporalTruthRefreshProject 0.0% +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:10: handleVaultConsolidated 0.0% +total: (statements) 0.1% diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-03/assert-go-test-json.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-03/assert-go-test-json.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-03/assert-go-test-json.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-03/assert-go-test-json.stdout.log new file mode 100644 index 00000000..daf56bda --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-03/assert-go-test-json.stdout.log @@ -0,0 +1,2 @@ +go test JSON verdict=PASS packages=1 tests=1 passed=1 failed=0 skipped=0 unexpected_skips=0 malformed=0 +summary=D:\Dev\engram\.w\t007-r1-checker\.agent\reviews\t007-r1-fresh-checker\evidence\focused-repeat3\repeat-03\go-test-summary.json diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-03/cleanup-process.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-03/cleanup-process.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-03/cleanup-process.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-03/cleanup-process.stdout.log new file mode 100644 index 00000000..413a8e86 --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-03/cleanup-process.stdout.log @@ -0,0 +1,2 @@ +cleanup verdict=PASS database=engram_prc_rg_test_08822acc1e43ac35_r3 schema=public terminated_sessions=0 remaining_database_count=0 +summary=D:\Dev\engram\.w\t007-r1-checker\.agent\reviews\t007-r1-fresh-checker\evidence\focused-repeat3\repeat-03\cleanup\cleanup.json diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-03/cleanup/cleanup.json b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-03/cleanup/cleanup.json new file mode 100644 index 00000000..a1d0bd8b --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-03/cleanup/cleanup.json @@ -0,0 +1,170 @@ +{ + "schema_version": 1, + "run_id": "focused-repeat3-repeat-3", + "timestamp": "2026-07-11T00:54:19.4331052+00:00", + "verdict": "PASS", + "database": "engram_prc_rg_test_08822acc1e43ac35_r3", + "schema": "public", + "database_schema_identity": "engram_prc_rg_test_08822acc1e43ac35_r3.public", + "admin_dsn": "postgresql://engram:REDACTED@127.0.0.1:55432/postgres?sslmode=disable", + "postgres_container": "engram-prc-postgres", + "cleanup_status": "PASS", + "cleanup_attempted": true, + "database_existed_before": true, + "absence_verified": true, + "terminated_sessions": 0, + "remaining_database_count": 0, + "commands": [ + { + "name": "database-exists-before-cleanup", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT count(*) FROM pg_database WHERE datname = 'engram_prc_rg_test_08822acc1e43ac35_r3';" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT count(*) FROM pg_database WHERE datname = 'engram_prc_rg_test_08822acc1e43ac35_r3';", + "started_at": "2026-07-11T00:54:17.0982973+00:00", + "finished_at": "2026-07-11T00:54:17.5408772+00:00", + "duration_seconds": 0.443, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-repeat3\\repeat-03\\cleanup\\database-exists-before.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-repeat3\\repeat-03\\cleanup\\database-exists-before.stderr.log" + }, + { + "name": "pg-stat-activity-before-cleanup", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT COALESCE(json_agg(row_to_json(s)), '[]'::json)::text FROM (SELECT pid, usename, datname, state, backend_type, application_name, client_addr::text AS client_addr, wait_event_type, wait_event, query_start FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_08822acc1e43ac35_r3' ORDER BY pid) AS s;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT COALESCE(json_agg(row_to_json(s)), '[]'::json)::text FROM (SELECT pid, usename, datname, state, backend_type, application_name, client_addr::text AS client_addr, wait_event_type, wait_event, query_start FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_08822acc1e43ac35_r3' ORDER BY pid) AS s;", + "started_at": "2026-07-11T00:54:17.6132252+00:00", + "finished_at": "2026-07-11T00:54:18.0888119+00:00", + "duration_seconds": 0.476, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-repeat3\\repeat-03\\cleanup\\pg-stat-activity-before.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-repeat3\\repeat-03\\cleanup\\pg-stat-activity-before.stderr.log" + }, + { + "name": "terminate-database-sessions", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT COALESCE(json_agg(row_to_json(s)), '[]'::json)::text FROM (SELECT pid, pg_terminate_backend(pid) AS terminated FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_08822acc1e43ac35_r3' AND pid <> pg_backend_pid() ORDER BY pid) AS s;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT COALESCE(json_agg(row_to_json(s)), '[]'::json)::text FROM (SELECT pid, pg_terminate_backend(pid) AS terminated FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_08822acc1e43ac35_r3' AND pid <> pg_backend_pid() ORDER BY pid) AS s;", + "started_at": "2026-07-11T00:54:18.0940718+00:00", + "finished_at": "2026-07-11T00:54:18.4991019+00:00", + "duration_seconds": 0.405, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-repeat3\\repeat-03\\cleanup\\terminate-sessions.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-repeat3\\repeat-03\\cleanup\\terminate-sessions.stderr.log" + }, + { + "name": "drop-fresh-database", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "DROP DATABASE IF EXISTS \"engram_prc_rg_test_08822acc1e43ac35_r3\" WITH (FORCE);" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c DROP DATABASE IF EXISTS \"engram_prc_rg_test_08822acc1e43ac35_r3\" WITH (FORCE);", + "started_at": "2026-07-11T00:54:18.5069738+00:00", + "finished_at": "2026-07-11T00:54:19.0042401+00:00", + "duration_seconds": 0.497, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-repeat3\\repeat-03\\cleanup\\drop-database.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-repeat3\\repeat-03\\cleanup\\drop-database.stderr.log" + }, + { + "name": "verify-database-absent", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT count(*) FROM pg_database WHERE datname = 'engram_prc_rg_test_08822acc1e43ac35_r3';" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT count(*) FROM pg_database WHERE datname = 'engram_prc_rg_test_08822acc1e43ac35_r3';", + "started_at": "2026-07-11T00:54:19.0092666+00:00", + "finished_at": "2026-07-11T00:54:19.4234822+00:00", + "duration_seconds": 0.414, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-repeat3\\repeat-03\\cleanup\\verify-database-absent.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-repeat3\\repeat-03\\cleanup\\verify-database-absent.stderr.log" + } + ], + "errors": [] +} diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-03/cleanup/database-exists-before.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-03/cleanup/database-exists-before.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-03/cleanup/database-exists-before.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-03/cleanup/database-exists-before.stdout.log new file mode 100644 index 00000000..d00491fd --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-03/cleanup/database-exists-before.stdout.log @@ -0,0 +1 @@ +1 diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-03/cleanup/drop-database.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-03/cleanup/drop-database.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-03/cleanup/drop-database.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-03/cleanup/drop-database.stdout.log new file mode 100644 index 00000000..ca12dce0 --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-03/cleanup/drop-database.stdout.log @@ -0,0 +1 @@ +DROP DATABASE diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-03/cleanup/pg-stat-activity-before.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-03/cleanup/pg-stat-activity-before.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-03/cleanup/pg-stat-activity-before.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-03/cleanup/pg-stat-activity-before.stdout.log new file mode 100644 index 00000000..fe51488c --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-03/cleanup/pg-stat-activity-before.stdout.log @@ -0,0 +1 @@ +[] diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-03/cleanup/terminate-sessions.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-03/cleanup/terminate-sessions.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-03/cleanup/terminate-sessions.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-03/cleanup/terminate-sessions.stdout.log new file mode 100644 index 00000000..fe51488c --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-03/cleanup/terminate-sessions.stdout.log @@ -0,0 +1 @@ +[] diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-03/cleanup/verify-database-absent.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-03/cleanup/verify-database-absent.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-03/cleanup/verify-database-absent.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-03/cleanup/verify-database-absent.stdout.log new file mode 100644 index 00000000..573541ac --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-03/cleanup/verify-database-absent.stdout.log @@ -0,0 +1 @@ +0 diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-03/connection-count-after.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-03/connection-count-after.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-03/connection-count-after.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-03/connection-count-after.stdout.log new file mode 100644 index 00000000..573541ac --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-03/connection-count-after.stdout.log @@ -0,0 +1 @@ +0 diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-03/connection-count-before.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-03/connection-count-before.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-03/connection-count-before.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-03/connection-count-before.stdout.log new file mode 100644 index 00000000..573541ac --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-03/connection-count-before.stdout.log @@ -0,0 +1 @@ +0 diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-03/coverage.out b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-03/coverage.out new file mode 100644 index 00000000..52335d8a --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-03/coverage.out @@ -0,0 +1,3472 @@ +mode: atomic +github.com/thebtf/engram/internal/mcp/audit_helpers.go:33.53,34.30 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:34.30,36.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:37.2,37.25 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:37.25,39.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:40.2,40.12 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:44.28,46.2 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:52.83,53.12 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:53.12,54.16 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:54.16,55.32 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:55.32,61.5 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:63.3,65.33 3 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:65.33,71.4 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:77.54,78.14 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:78.14,80.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:81.2,82.16 2 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:82.16,85.3 2 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:86.2,87.13 2 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:92.91,93.23 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:93.23,95.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:96.2,97.15 2 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:97.15,99.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:100.2,105.65 4 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:105.65,113.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:117.95,118.23 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:118.23,120.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:121.2,122.15 2 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:122.15,124.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:125.2,129.65 5 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:129.65,138.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:142.87,143.23 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:143.23,145.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:146.2,147.15 2 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:147.15,149.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:150.2,153.65 4 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:153.65,161.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:166.96,167.23 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:167.23,169.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:170.2,171.15 2 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:171.15,173.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:174.2,177.63 4 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:177.63,185.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:189.97,190.23 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:190.23,192.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:193.2,194.15 2 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:194.15,196.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:197.2,200.68 4 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:200.68,208.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:30.62,31.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:31.20,33.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:34.2,35.49 2 0 +github.com/thebtf/engram/internal/mcp/coerce.go:35.49,37.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:38.2,38.14 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:38.14,40.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:41.2,41.15 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:46.52,47.14 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:47.14,49.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:50.2,50.23 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:51.14,52.11 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:53.19,54.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:55.15,56.45 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:57.12,58.31 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:59.10,60.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:67.43,68.14 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:68.14,70.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:71.2,71.23 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:72.15,73.23 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:74.19,75.38 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:75.38,77.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:78.3,78.40 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:78.40,80.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:81.3,81.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:82.14,83.56 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:83.56,85.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:86.3,86.54 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:86.54,88.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:89.3,89.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:90.10,91.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:97.49,98.14 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:98.14,100.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:101.2,101.23 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:102.15,103.18 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:104.19,105.38 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:105.38,107.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:108.3,108.40 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:108.40,110.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:111.3,111.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:112.14,113.56 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:113.56,115.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:116.3,116.54 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:116.54,118.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:119.3,119.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:120.10,121.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:127.55,128.14 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:128.14,130.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:131.2,131.23 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:132.15,133.11 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:134.19,135.40 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:135.40,137.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:138.3,138.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:139.14,140.54 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:140.54,142.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:143.3,143.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:144.10,145.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:151.46,152.14 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:152.14,154.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:155.2,155.23 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:156.12,157.11 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:158.14,159.54 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:159.54,161.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:162.3,162.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:163.15,164.16 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:165.19,166.40 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:166.40,168.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:169.3,169.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:170.10,171.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:177.40,178.14 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:178.14,180.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:181.2,181.23 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:182.13,184.26 2 0 +github.com/thebtf/engram/internal/mcp/coerce.go:184.26,185.36 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:185.36,187.5 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:189.3,189.16 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:190.16,191.11 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:192.14,193.14 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:193.14,195.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:196.3,196.13 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:197.10,198.13 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:204.38,205.14 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:205.14,207.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:208.2,209.9 2 0 +github.com/thebtf/engram/internal/mcp/coerce.go:209.9,211.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:212.2,213.27 2 0 +github.com/thebtf/engram/internal/mcp/coerce.go:213.27,214.42 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:214.42,216.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:218.2,218.15 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:222.32,223.39 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:223.39,225.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:226.2,226.30 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:226.30,228.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:229.2,229.30 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:229.30,231.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:232.2,232.15 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:236.35,237.28 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:237.28,239.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:240.2,240.28 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:240.28,242.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:243.2,243.15 1 0 +github.com/thebtf/engram/internal/mcp/context.go:17.55,19.2 1 0 +github.com/thebtf/engram/internal/mcp/context.go:22.78,24.2 1 0 +github.com/thebtf/engram/internal/mcp/context.go:29.78,31.2 1 0 +github.com/thebtf/engram/internal/mcp/context.go:35.53,38.2 2 0 +github.com/thebtf/engram/internal/mcp/context.go:41.80,43.2 1 0 +github.com/thebtf/engram/internal/mcp/context.go:48.80,50.2 1 0 +github.com/thebtf/engram/internal/mcp/context.go:54.53,57.2 2 0 +github.com/thebtf/engram/internal/mcp/context.go:61.51,62.43 1 0 +github.com/thebtf/engram/internal/mcp/context.go:62.43,64.3 1 0 +github.com/thebtf/engram/internal/mcp/context.go:65.2,65.16 1 0 +github.com/thebtf/engram/internal/mcp/health.go:22.32,26.2 3 0 +github.com/thebtf/engram/internal/mcp/health.go:29.37,33.2 3 0 +github.com/thebtf/engram/internal/mcp/health.go:36.35,40.2 3 0 +github.com/thebtf/engram/internal/mcp/health.go:42.44,45.25 3 0 +github.com/thebtf/engram/internal/mcp/health.go:45.25,47.50 1 0 +github.com/thebtf/engram/internal/mcp/health.go:47.50,50.4 2 0 +github.com/thebtf/engram/internal/mcp/health.go:55.74,60.16 5 0 +github.com/thebtf/engram/internal/mcp/health.go:60.16,62.3 1 0 +github.com/thebtf/engram/internal/mcp/health.go:63.2,71.4 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:28.42,29.65 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:29.65,32.3 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:33.2,33.40 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:33.40,35.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:36.2,36.14 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:39.120,40.69 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:40.69,42.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:43.2,44.19 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:44.19,46.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:47.2,48.17 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:48.17,50.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:51.2,52.59 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:52.59,54.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:55.2,56.20 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:56.20,58.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:59.2,60.17 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:60.17,62.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:63.2,64.21 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:64.21,66.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:67.2,68.22 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:68.22,70.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:71.2,72.23 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:72.23,74.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:76.2,98.19 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:98.19,100.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:101.2,101.66 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:104.52,106.29 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:106.29,108.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:109.2,110.46 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:113.113,123.27 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:123.27,125.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:126.2,127.16 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:127.16,129.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:130.2,130.25 1 0 +github.com/thebtf/engram/internal/mcp/server.go:127.44,138.2 1 1 +github.com/thebtf/engram/internal/mcp/server.go:141.64,143.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:146.78,148.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:151.53,153.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:156.55,158.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:161.58,163.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:166.62,168.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:171.50,173.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:176.78,178.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:181.74,183.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:186.71,189.2 2 0 +github.com/thebtf/engram/internal/mcp/server.go:191.85,193.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:195.61,197.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:199.49,201.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:204.54,206.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:211.53,213.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:216.53,218.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:222.61,224.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:228.59,230.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:234.51,236.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:240.52,242.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:246.55,248.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:252.82,254.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:260.70,262.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:269.68,271.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:274.87,277.2 2 0 +github.com/thebtf/engram/internal/mcp/server.go:282.60,284.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:290.45,292.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:297.77,299.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:303.37,313.38 3 0 +github.com/thebtf/engram/internal/mcp/server.go:313.38,315.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:316.2,317.9 2 0 +github.com/thebtf/engram/internal/mcp/server.go:317.9,319.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:320.2,321.9 2 0 +github.com/thebtf/engram/internal/mcp/server.go:321.9,323.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:324.2,325.9 2 0 +github.com/thebtf/engram/internal/mcp/server.go:325.9,327.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:328.2,328.14 1 0 +github.com/thebtf/engram/internal/mcp/server.go:332.35,334.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:383.49,387.12 3 0 +github.com/thebtf/engram/internal/mcp/server.go:387.12,388.22 1 0 +github.com/thebtf/engram/internal/mcp/server.go:388.22,389.11 1 0 +github.com/thebtf/engram/internal/mcp/server.go:390.22,392.11 2 0 +github.com/thebtf/engram/internal/mcp/server.go:393.12,393.12 0 0 +github.com/thebtf/engram/internal/mcp/server.go:396.4,397.18 2 0 +github.com/thebtf/engram/internal/mcp/server.go:397.18,398.13 1 0 +github.com/thebtf/engram/internal/mcp/server.go:401.4,402.61 2 0 +github.com/thebtf/engram/internal/mcp/server.go:402.61,404.13 2 0 +github.com/thebtf/engram/internal/mcp/server.go:407.4,407.55 1 0 +github.com/thebtf/engram/internal/mcp/server.go:407.55,409.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:411.3,411.28 1 0 +github.com/thebtf/engram/internal/mcp/server.go:414.2,414.9 1 0 +github.com/thebtf/engram/internal/mcp/server.go:415.20,416.19 1 0 +github.com/thebtf/engram/internal/mcp/server.go:417.25,418.17 1 0 +github.com/thebtf/engram/internal/mcp/server.go:418.17,420.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:421.3,421.13 1 0 +github.com/thebtf/engram/internal/mcp/server.go:427.77,428.19 1 0 +github.com/thebtf/engram/internal/mcp/server.go:428.19,431.3 2 0 +github.com/thebtf/engram/internal/mcp/server.go:433.2,433.20 1 0 +github.com/thebtf/engram/internal/mcp/server.go:434.20,435.33 1 0 +github.com/thebtf/engram/internal/mcp/server.go:436.20,437.32 1 0 +github.com/thebtf/engram/internal/mcp/server.go:438.20,439.37 1 0 +github.com/thebtf/engram/internal/mcp/server.go:443.24,444.93 1 0 +github.com/thebtf/engram/internal/mcp/server.go:445.34,446.101 1 0 +github.com/thebtf/engram/internal/mcp/server.go:447.22,448.91 1 0 +github.com/thebtf/engram/internal/mcp/server.go:449.29,450.120 1 0 +github.com/thebtf/engram/internal/mcp/server.go:451.10,456.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:461.51,462.20 1 0 +github.com/thebtf/engram/internal/mcp/server.go:463.50,464.70 1 0 +github.com/thebtf/engram/internal/mcp/server.go:465.46,466.79 1 0 +github.com/thebtf/engram/internal/mcp/server.go:467.10,468.80 1 0 +github.com/thebtf/engram/internal/mcp/server.go:473.59,485.63 2 0 +github.com/thebtf/engram/internal/mcp/server.go:485.63,487.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:489.2,493.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:496.45,503.33 3 0 +github.com/thebtf/engram/internal/mcp/server.go:503.33,505.57 2 0 +github.com/thebtf/engram/internal/mcp/server.go:505.57,506.76 1 0 +github.com/thebtf/engram/internal/mcp/server.go:506.76,507.13 1 0 +github.com/thebtf/engram/internal/mcp/server.go:509.4,509.18 1 0 +github.com/thebtf/engram/internal/mcp/server.go:509.18,511.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:511.10,513.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:514.4,518.11 5 0 +github.com/thebtf/engram/internal/mcp/server.go:522.2,522.19 1 0 +github.com/thebtf/engram/internal/mcp/server.go:660.29,683.21 2 0 +github.com/thebtf/engram/internal/mcp/server.go:683.21,689.3 5 0 +github.com/thebtf/engram/internal/mcp/server.go:690.2,699.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:712.30,765.49 3 0 +github.com/thebtf/engram/internal/mcp/server.go:765.49,789.3 5 0 +github.com/thebtf/engram/internal/mcp/server.go:790.2,799.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:805.40,936.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:942.58,1048.35 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1048.35,1077.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1080.2,1080.33 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1080.33,1090.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1093.2,1093.26 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1093.26,1123.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1124.2,1124.80 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1124.80,1126.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1127.2,1127.55 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1127.55,1129.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1130.2,1130.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1130.38,1132.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1134.2,1134.25 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1134.25,1136.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1138.2,1138.33 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1138.33,1140.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1141.2,1141.69 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1141.69,1143.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1144.2,1144.75 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1144.75,1146.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1148.2,1148.27 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1148.27,1165.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1168.2,1168.76 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1168.76,1191.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1195.2,1195.48 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1195.48,1197.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1201.2,1201.47 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1201.47,1203.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1205.2,1205.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1205.38,1207.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1212.2,1212.21 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1212.21,1214.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1228.2,1228.51 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1228.51,1230.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1233.2,1233.56 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1233.56,1235.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1238.2,1238.71 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1238.71,1298.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1302.2,1302.104 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1302.104,1321.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1324.2,1324.72 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1324.72,1333.154 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1333.154,1334.26 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1334.26,1336.8 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1337.7,1337.16 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1338.35,1340.26 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1340.26,1342.8 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1343.7,1343.18 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1371.2,1371.26 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1371.26,1390.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1393.2,1393.28 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1393.28,1443.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1446.2,1446.28 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1446.28,1478.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1481.2,1481.37 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1481.37,1561.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1564.2,1568.23 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1568.23,1570.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1572.2,1588.57 3 0 +github.com/thebtf/engram/internal/mcp/server.go:1588.57,1591.29 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1591.29,1593.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1594.3,1594.27 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1594.27,1595.29 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1595.29,1597.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1601.2,1607.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1612.79,1614.60 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1614.60,1620.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1622.2,1623.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1623.16,1631.3 3 0 +github.com/thebtf/engram/internal/mcp/server.go:1633.2,1641.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1644.69,1645.34 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1645.34,1647.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1648.2,1649.22 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1649.22,1651.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1652.2,1652.37 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1656.99,1658.14 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1659.16,1660.35 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1661.15,1662.46 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1663.18,1664.49 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1665.15,1666.46 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1667.18,1668.49 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1669.14,1670.45 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1671.15,1672.34 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1676.2,1676.14 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1677.35,1678.52 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1679.26,1680.37 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1681.20,1682.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1683.20,1684.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1685.16,1686.35 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1687.29,1688.40 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1689.33,1690.50 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1691.25,1692.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1693.23,1694.41 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1696.26,1697.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1698.24,1699.42 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1700.22,1701.40 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1702.25,1703.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1704.27,1705.45 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1706.25,1707.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1709.30,1710.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1711.28,1712.42 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1713.17,1714.40 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1715.20,1716.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1717.20,1718.45 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1719.20,1720.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1722.20,1723.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1724.18,1725.36 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1726.20,1727.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1728.18,1729.36 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1730.21,1731.39 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1732.21,1733.39 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1734.26,1735.44 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1736.25,1737.34 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1738.26,1739.44 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1740.24,1741.42 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1742.26,1743.44 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1744.27,1745.45 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1746.22,1747.40 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1748.19,1749.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1750.15,1751.34 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1752.16,1753.35 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1755.21,1756.44 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1757.19,1758.42 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1759.20,1760.44 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1761.22,1762.45 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1763.22,1764.40 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1765.23,1766.41 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1767.20,1768.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1769.32,1770.49 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1771.19,1772.37 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1773.19,1774.37 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1775.33,1776.50 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1777.35,1778.52 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1779.24,1780.42 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1781.32,1782.49 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1783.28,1784.46 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1785.21,1786.39 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1787.34,1788.51 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1789.25,1790.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1791.29,1792.46 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1793.26,1794.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1795.27,1796.44 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1798.25,1799.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1800.23,1801.41 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1802.27,1803.45 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1804.26,1805.44 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1806.29,1807.47 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1809.29,1810.46 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1811.27,1812.44 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1813.30,1814.47 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1815.38,1816.54 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1817.36,1818.52 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1820.24,1821.42 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1822.27,1823.45 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1824.22,1825.40 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1826.32,1827.49 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1828.32,1829.49 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1830.31,1831.48 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1832.35,1833.52 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1834.36,1835.53 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1836.36,1837.53 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1838.38,1839.54 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1840.34,1841.51 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1843.22,1844.40 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1845.21,1846.39 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1847.24,1848.42 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1850.25,1851.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1852.25,1853.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1859.2,1859.14 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1860.22,1863.131 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1866.51,1867.123 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1868.10,1869.50 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1874.47,1876.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1876.16,1879.3 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1880.2,1880.35 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1884.72,1890.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1896.105,1898.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1898.16,1900.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1902.2,1903.17 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1903.17,1905.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1907.2,1908.17 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1908.17,1910.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1912.2,1918.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1918.16,1920.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1921.2,1921.25 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1927.76,1933.15 3 0 +github.com/thebtf/engram/internal/mcp/server.go:1933.15,1936.17 3 0 +github.com/thebtf/engram/internal/mcp/server.go:1936.17,1938.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1939.3,1939.26 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1943.2,1950.36 3 0 +github.com/thebtf/engram/internal/mcp/server.go:1950.36,1952.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1952.8,1955.29 3 0 +github.com/thebtf/engram/internal/mcp/server.go:1955.29,1958.4 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1959.3,1962.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1966.2,1966.20 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1966.20,1977.20 6 0 +github.com/thebtf/engram/internal/mcp/server.go:1977.20,1979.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1980.3,1980.20 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1980.20,1982.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1985.3,1985.37 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1985.37,1987.30 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1987.30,1988.16 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1988.16,1990.6 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1990.11,1992.6 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1994.4,1995.56 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1995.56,1997.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1998.4,2003.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2008.2,2008.29 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2008.29,2009.63 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2009.63,2011.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2011.9,2013.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2021.2,2021.29 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2021.29,2029.38 3 0 +github.com/thebtf/engram/internal/mcp/server.go:2029.38,2031.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2031.9,2033.31 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2033.31,2035.30 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2035.30,2037.6 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2039.4,2042.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2046.2,2047.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2047.16,2049.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2050.2,2050.25 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2055.57,2056.33 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2056.33,2058.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2059.2,2060.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2060.16,2062.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2063.2,2064.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2064.16,2066.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2067.2,2067.23 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2071.79,2105.15 6 0 +github.com/thebtf/engram/internal/mcp/server.go:2105.15,2107.17 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2107.17,2111.4 3 0 +github.com/thebtf/engram/internal/mcp/server.go:2111.9,2112.17 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2112.17,2114.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2115.4,2117.26 3 0 +github.com/thebtf/engram/internal/mcp/server.go:2117.26,2119.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2119.10,2121.29 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2121.29,2123.6 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2125.4,2129.25 5 0 +github.com/thebtf/engram/internal/mcp/server.go:2130.19,2130.19 0 0 +github.com/thebtf/engram/internal/mcp/server.go:2132.20,2134.106 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2135.12,2137.103 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2140.8,2143.3 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2144.2,2150.49 3 0 +github.com/thebtf/engram/internal/mcp/server.go:2150.49,2152.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2152.8,2154.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2155.2,2168.27 4 0 +github.com/thebtf/engram/internal/mcp/server.go:2168.27,2170.17 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2170.17,2173.4 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2173.9,2175.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2177.2,2182.40 4 0 +github.com/thebtf/engram/internal/mcp/server.go:2182.40,2183.21 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2184.20,2185.20 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2186.19,2187.19 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2191.2,2191.24 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2191.24,2193.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2193.8,2193.30 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2193.30,2195.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2198.2,2198.28 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2198.28,2200.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2203.2,2203.29 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2203.29,2205.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2207.2,2208.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2208.16,2210.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2211.2,2211.28 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2216.103,2218.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2218.16,2220.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2222.2,2223.15 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2223.15,2225.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2227.2,2239.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2239.16,2241.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2242.2,2242.25 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2246.93,2248.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2251.91,2253.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:18.28,29.20 4 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:29.20,33.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:35.2,44.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:68.36,69.49 1 1 +github.com/thebtf/engram/internal/mcp/tools_admin.go:69.49,74.3 4 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:75.2,75.25 1 1 +github.com/thebtf/engram/internal/mcp/tools_admin.go:80.26,82.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:84.89,86.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:86.16,88.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:89.2,90.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:90.18,92.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:94.2,94.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:95.15,96.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:97.26,98.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:99.25,100.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:101.23,105.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:105.22,107.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:108.3,108.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:109.10,110.114 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:120.92,126.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:126.26,128.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:130.2,131.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:131.19,133.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:134.2,135.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:135.19,137.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:138.2,138.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:138.24,140.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:142.2,142.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:142.25,144.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:146.2,147.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:147.16,149.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:151.2,151.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:27.40,30.2 2 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:32.30,46.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:48.99,49.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:49.34,51.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:52.2,52.69 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:52.69,54.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:56.2,57.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:57.16,59.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:60.2,61.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:61.21,63.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:64.2,67.26 3 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:67.26,69.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:70.2,71.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:71.25,73.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:75.2,77.44 3 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:77.44,79.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:80.2,80.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:80.33,82.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:83.2,83.81 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:86.52,87.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:87.16,89.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:90.2,90.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:90.15,92.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:93.2,93.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:96.73,97.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:97.21,99.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:100.2,101.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:101.29,110.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:111.2,111.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:114.34,116.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:31.98,32.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:32.52,34.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:35.2,35.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:35.26,37.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:39.2,40.49 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:40.49,42.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:43.2,43.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:43.21,45.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:46.2,46.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:46.21,48.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:49.2,49.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:49.18,51.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:52.2,52.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:52.18,54.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:56.2,56.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:56.38,58.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:60.2,61.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:61.16,63.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:68.2,70.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:70.26,77.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:79.2,81.36 3 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:81.36,84.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:86.2,89.28 3 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:89.28,90.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:90.39,91.9 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:93.3,97.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:100.2,104.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:107.60,113.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:115.101,116.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:116.38,118.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:120.2,122.21 3 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:122.21,123.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:123.26,125.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:126.3,126.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:126.23,128.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:129.8,130.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:130.26,132.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:133.3,133.68 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:133.68,135.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:137.2,140.20 3 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:141.17,142.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:143.67,143.67 0 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:144.10,145.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:148.2,162.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:162.16,164.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:165.2,165.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:165.19,173.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:174.2,174.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:174.30,176.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:177.2,177.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:177.31,179.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:181.2,182.36 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:182.36,196.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:198.2,199.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:199.19,201.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:202.2,203.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:203.18,205.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:206.2,207.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:207.21,209.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:210.2,211.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:211.25,213.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:214.2,225.21 3 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:225.21,227.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:228.2,228.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:228.25,230.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:231.2,231.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:231.18,233.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:235.2,244.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:244.21,246.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:247.2,247.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:247.25,249.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:250.2,250.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:250.18,252.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:253.2,253.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:253.24,255.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:256.2,256.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:259.50,261.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:261.22,263.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:264.2,264.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:270.90,272.42 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:272.42,276.3 3 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:277.2,281.27 3 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:281.27,282.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:282.45,284.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:286.2,286.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:25.28,88.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:95.95,96.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:96.22,98.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:99.2,100.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:100.32,102.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:104.2,105.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:105.16,107.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:109.2,114.35 3 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:114.35,121.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:123.2,123.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:123.25,125.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:127.2,134.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:134.16,136.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:138.2,146.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:154.94,155.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:155.22,157.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:158.2,159.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:159.32,161.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:163.2,164.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:164.16,166.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:168.2,172.35 3 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:172.35,179.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:181.2,181.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:181.25,183.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:185.2,192.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:192.16,194.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:196.2,203.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:211.97,212.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:212.22,214.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:215.2,216.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:216.32,218.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:220.2,221.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:221.16,223.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:225.2,229.35 3 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:229.35,236.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:238.2,238.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:238.25,240.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:242.2,249.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:249.16,251.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:253.2,260.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:31.80,32.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:32.14,34.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:35.2,48.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:51.136,53.51 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:53.51,55.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:56.2,56.83 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:59.94,60.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:60.21,62.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:63.2,63.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:68.30,162.2 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:165.98,166.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:166.49,168.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:169.2,170.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:170.16,172.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:173.2,174.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:174.19,176.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:177.2,179.17 3 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:179.17,181.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:183.2,184.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:184.16,186.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:188.2,189.31 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:189.31,190.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:190.15,191.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:193.3,193.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:196.2,201.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:201.16,203.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:204.2,204.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:208.96,209.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:209.49,211.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:212.2,213.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:213.16,215.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:216.2,217.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:217.13,219.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:221.2,222.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:222.16,224.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:225.2,225.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:225.22,227.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:229.2,230.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:230.16,232.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:233.2,233.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:239.100,240.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:240.22,242.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:243.2,244.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:244.16,246.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:247.2,248.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:248.13,250.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:255.2,256.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:256.12,263.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:263.30,264.77 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:264.77,269.5 4 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:271.3,272.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:272.21,274.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:275.3,275.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:279.2,279.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:279.29,281.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:284.2,285.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:285.16,287.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:288.2,288.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:288.22,290.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:291.2,291.55 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:291.55,293.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:294.2,294.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:294.74,296.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:297.2,298.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:298.16,300.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:306.2,307.41 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:307.41,309.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:310.2,324.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:324.16,325.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:325.50,327.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:328.3,328.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:330.2,330.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:330.38,332.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:334.2,341.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:341.16,343.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:344.2,344.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:348.99,349.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:349.49,351.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:352.2,353.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:353.16,355.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:356.2,357.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:357.13,359.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:360.2,362.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:362.16,364.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:365.2,365.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:365.22,367.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:368.2,368.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:368.74,370.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:371.2,372.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:372.16,374.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:375.2,375.85 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:375.85,377.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:379.2,380.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:380.16,381.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:381.50,383.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:384.3,384.60 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:386.2,386.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:386.20,388.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:390.2,395.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:395.16,397.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:398.2,398.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:402.102,403.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:403.49,405.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:406.2,407.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:407.16,409.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:410.2,411.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:411.13,413.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:414.2,415.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:415.16,417.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:418.2,418.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:418.22,420.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:421.2,421.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:421.74,423.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:424.2,425.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:425.16,427.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:428.2,428.88 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:428.88,430.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:432.2,433.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:433.16,434.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:434.50,436.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:437.3,437.63 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:439.2,439.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:439.20,441.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:443.2,448.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:448.16,450.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:451.2,451.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:34.30,36.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:42.61,44.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:48.32,75.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:79.32,94.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:100.98,101.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:101.25,103.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:104.2,104.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:104.29,106.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:108.2,113.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:113.17,114.55 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:114.55,116.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:118.2,118.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:118.24,120.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:121.2,121.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:121.23,123.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:124.2,124.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:124.23,126.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:134.2,135.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:135.21,137.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:142.2,147.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:147.16,149.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:154.2,165.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:165.25,175.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:177.2,183.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:183.16,185.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:186.2,186.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:194.98,195.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:195.25,197.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:198.2,198.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:198.29,200.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:202.2,205.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:205.17,207.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:208.2,209.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:209.21,211.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:213.2,214.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:214.16,216.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:217.2,218.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:218.16,220.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:221.2,222.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:222.16,224.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:226.2,231.11 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:231.11,233.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:235.2,236.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:236.16,238.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:239.2,239.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:21.52,22.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:22.24,25.28 3 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:25.28,27.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:29.2,29.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:35.72,37.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:37.15,39.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:41.2,42.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:42.16,44.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:45.2,45.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:49.99,51.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:51.16,53.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:55.2,56.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:56.16,58.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:60.2,72.23 7 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:72.23,74.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:75.2,75.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:75.24,77.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:78.2,78.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:78.24,80.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:81.2,81.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:82.27,82.27 0 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:84.10,85.93 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:87.2,87.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:87.30,89.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:90.2,90.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:90.26,92.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:94.2,95.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:95.16,97.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:99.2,100.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:100.16,102.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:104.2,112.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:112.16,114.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:116.2,123.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:123.16,125.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:126.2,126.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:130.97,132.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:132.16,134.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:136.2,137.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:137.16,139.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:141.2,147.23 4 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:147.23,149.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:150.2,150.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:150.26,152.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:154.2,155.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:155.16,157.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:159.2,160.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:160.16,161.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:161.47,163.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:164.3,164.51 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:167.2,167.97 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:167.97,172.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:174.2,175.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:175.16,177.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:179.2,185.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:185.16,187.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:188.2,188.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:192.99,194.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:194.16,196.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:198.2,199.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:199.16,201.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:203.2,207.26 3 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:207.26,209.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:211.2,212.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:212.16,214.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:216.2,223.26 3 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:223.26,229.28 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:229.28,231.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:232.3,232.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:235.2,236.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:236.16,238.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:239.2,239.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:243.100,245.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:245.16,247.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:249.2,250.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:250.16,252.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:254.2,262.23 5 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:262.23,264.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:265.2,265.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:265.24,267.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:268.2,268.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:269.27,269.27 0 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:271.10,272.93 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:274.2,274.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:274.30,276.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:277.2,277.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:277.26,279.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:281.2,281.71 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:281.71,282.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:282.47,284.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:285.3,285.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:288.2,293.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:293.16,295.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:296.2,296.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:302.92,309.19 5 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:309.19,310.53 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:310.53,313.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:316.2,317.51 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:317.51,318.66 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:318.66,320.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:323.2,331.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:331.16,333.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:334.2,334.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:338.46,342.32 4 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:342.32,343.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:343.20,346.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:348.2,350.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:350.26,352.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:352.27,353.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:353.13,355.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:356.4,356.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:358.3,358.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:360.2,360.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:16.45,18.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:20.35,36.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:38.84,39.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:39.40,41.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:42.2,42.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:42.50,44.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:45.2,45.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:48.101,50.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:50.16,52.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:53.2,54.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:54.16,56.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:57.2,58.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:58.19,60.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:61.2,62.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:62.21,64.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:65.2,66.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:66.16,68.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:69.2,69.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:72.102,74.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:74.16,76.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:77.2,82.8 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:10.100,12.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:12.16,14.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:16.2,17.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:17.18,19.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:21.2,21.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:22.16,23.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:24.14,25.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:26.14,27.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:28.17,29.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:30.17,31.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:32.21,33.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:34.19,35.42 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:36.17,37.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:38.16,39.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:40.16,41.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:42.21,43.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:44.10,45.167 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:15.77,16.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:16.33,18.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:20.2,21.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:21.27,23.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:25.2,26.28 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:26.28,29.17 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:29.17,31.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:34.2,41.32 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:41.32,46.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:46.20,48.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:49.3,49.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:52.2,53.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:53.16,55.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:57.2,57.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:61.97,62.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:62.28,64.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:66.2,67.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:67.16,69.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:71.2,75.29 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:75.29,77.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:79.2,80.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:80.16,82.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:84.2,84.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:84.20,86.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:88.2,97.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:97.25,103.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:103.20,105.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:106.3,106.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:106.19,108.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:109.3,109.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:112.2,113.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:113.16,115.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:117.2,117.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:121.95,122.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:122.28,124.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:126.2,127.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:127.16,129.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:131.2,137.50 4 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:137.50,139.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:141.2,142.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:142.16,144.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:145.2,145.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:145.16,147.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:149.2,149.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:149.21,151.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:153.2,154.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:154.16,156.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:157.2,157.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:157.20,159.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:161.2,161.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:165.98,166.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:166.28,168.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:170.2,171.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:171.16,173.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:175.2,181.50 4 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:181.50,183.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:185.2,185.96 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:185.96,187.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:189.2,189.88 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:197.98,198.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:198.28,200.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:202.2,203.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:203.16,205.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:207.2,217.74 6 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:217.74,219.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:222.2,223.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:223.16,225.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:227.2,229.156 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:235.98,237.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:237.16,239.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:241.2,247.24 4 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:247.24,249.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:252.2,253.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:253.29,255.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:256.2,256.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:15.93,16.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:16.37,18.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:20.2,21.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:21.16,23.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:25.2,32.16 7 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:32.16,34.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:35.2,35.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:35.19,37.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:38.2,38.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:38.19,40.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:42.2,43.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:43.16,45.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:47.2,54.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:54.16,56.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:57.2,57.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:61.91,62.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:62.37,64.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:66.2,67.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:67.16,69.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:71.2,73.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:73.16,75.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:76.2,76.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:76.19,78.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:80.2,81.43 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:81.43,83.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:83.19,85.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:86.3,86.79 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:87.8,89.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:90.2,90.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:90.16,91.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:91.45,93.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:94.3,94.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:97.2,110.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:110.16,112.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:113.2,113.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:117.93,119.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:122.91,123.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:123.37,125.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:127.2,128.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:128.16,130.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:132.2,133.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:133.19,135.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:136.2,141.16 5 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:141.16,143.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:145.2,155.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:155.25,165.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:167.2,168.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:168.16,170.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:171.2,171.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:175.94,176.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:176.37,178.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:180.2,181.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:181.16,183.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:185.2,187.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:187.16,189.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:190.2,190.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:190.19,192.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:193.2,196.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:196.16,198.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:200.2,208.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:208.25,216.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:218.2,225.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:225.16,227.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:228.2,228.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:232.94,233.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:233.37,235.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:237.2,238.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:238.16,240.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:242.2,243.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:243.21,245.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:246.2,248.19 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:248.19,250.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:252.2,253.46 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:253.46,255.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:255.13,257.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:259.2,259.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:259.44,261.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:261.13,263.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:266.2,267.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:267.16,269.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:271.2,278.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:278.16,280.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:281.2,281.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:19.69,21.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:23.38,38.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:40.51,63.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:65.53,80.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:82.46,85.32 3 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:85.32,87.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:88.2,88.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:91.105,93.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:93.16,95.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:96.2,97.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:97.16,99.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:100.2,100.70 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:103.107,105.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:105.16,107.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:108.2,109.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:109.16,111.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:112.2,112.72 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:115.101,117.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:117.16,119.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:120.2,121.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:121.17,123.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:124.2,139.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:142.109,144.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:144.16,146.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:147.2,154.8 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:157.100,159.28 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:159.28,161.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:161.18,163.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:164.3,164.62 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:166.2,167.72 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:167.72,169.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:170.2,170.53 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:170.53,172.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:173.2,174.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:174.26,176.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:177.2,177.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:180.73,182.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:182.16,184.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:185.2,185.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:12.104,14.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:14.16,16.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:18.2,19.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:19.18,21.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:23.2,23.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:24.14,25.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:26.18,27.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:28.17,29.46 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:30.10,31.96 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:36.101,37.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:37.27,39.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:41.2,42.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:42.16,44.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:46.2,47.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:47.21,49.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:50.2,51.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:51.19,53.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:54.2,54.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:55.52,55.52 0 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:56.10,57.101 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:59.2,61.93 2 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:61.93,64.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:66.2,70.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:27.31,94.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:98.97,100.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:100.26,102.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:103.2,103.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:103.28,105.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:107.2,108.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:108.16,110.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:112.2,115.15 4 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:115.15,117.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:118.2,118.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:118.17,120.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:122.2,123.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:123.16,125.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:127.2,140.29 3 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:140.29,151.31 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:151.31,154.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:155.3,155.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:158.2,162.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:167.100,169.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:169.26,171.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:172.2,172.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:172.28,174.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:175.2,175.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:175.26,177.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:179.2,180.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:180.16,182.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:184.2,185.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:185.22,187.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:189.2,190.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:190.20,191.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:191.54,199.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:200.3,200.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:200.61,202.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:203.3,203.58 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:206.2,211.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:215.95,217.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:217.32,219.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:220.2,220.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:220.28,222.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:224.2,225.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:225.16,227.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:229.2,230.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:230.22,232.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:234.2,234.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:234.61,236.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:239.2,239.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:239.25,246.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:248.2,252.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:258.104,260.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:260.26,262.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:267.2,271.20 3 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:271.20,275.3 3 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:275.8,279.3 3 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:280.2,280.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:284.60,285.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:285.30,287.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:288.2,288.42 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:288.42,290.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:291.2,291.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:64.89,65.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:65.25,67.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:69.2,70.49 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:70.49,72.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:74.2,74.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:75.18,76.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:77.21,78.35 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:79.19,80.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:81.18,82.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:83.19,84.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:85.18,86.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:87.18,91.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:91.23,93.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:94.3,94.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:95.10,96.62 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:100.81,103.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:103.19,105.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:106.2,107.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:107.19,109.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:112.2,112.46 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:112.46,114.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:115.2,115.46 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:115.46,117.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:122.2,122.66 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:122.66,124.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:127.2,127.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:127.25,128.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:128.22,130.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:131.8,132.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:132.26,134.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:138.2,138.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:138.25,139.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:139.22,141.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:142.8,143.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:143.26,145.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:148.2,148.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:148.22,150.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:151.2,151.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:151.38,153.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:154.2,154.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:154.19,156.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:159.2,161.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:161.25,164.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:165.2,165.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:165.25,168.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:169.2,171.23 3 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:171.23,174.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:175.2,175.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:175.23,178.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:180.2,193.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:193.16,195.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:198.2,199.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:199.29,201.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:202.2,202.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:202.29,204.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:205.2,213.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:216.121,217.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:217.28,218.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:218.26,220.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:221.3,222.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:222.17,223.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:223.49,225.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:226.4,226.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:228.3,228.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:230.2,230.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:230.26,232.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:233.2,234.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:234.16,235.48 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:235.48,237.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:238.3,238.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:240.2,240.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:243.101,248.36 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:248.36,250.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:250.8,252.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:253.2,253.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:253.16,255.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:256.2,256.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:256.32,257.128 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:257.128,262.72 5 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:262.72,264.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:267.2,267.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:276.81,277.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:277.25,279.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:280.2,280.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:280.22,282.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:283.2,283.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:283.39,285.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:286.2,286.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:286.25,288.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:289.2,289.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:289.21,291.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:292.2,293.14 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:293.14,295.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:296.2,305.16 5 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:305.16,307.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:308.2,314.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:317.84,318.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:318.19,320.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:321.2,323.63 3 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:323.63,325.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:326.2,329.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:332.82,333.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:333.38,335.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:336.2,337.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:338.18,339.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:340.18,341.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:345.2,345.59 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:345.59,347.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:349.2,351.21 3 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:351.21,353.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:353.8,356.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:357.2,357.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:357.16,359.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:366.2,367.41 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:367.41,369.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:371.2,378.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:397.115,398.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:398.15,400.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:403.2,404.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:404.26,405.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:405.28,407.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:408.3,408.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:408.28,410.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:412.2,412.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:412.23,415.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:420.2,426.12 4 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:426.12,427.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:427.27,429.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:429.18,431.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:433.4,433.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:433.33,435.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:440.2,441.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:441.26,442.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:442.28,443.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:443.49,445.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:448.3,448.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:448.28,449.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:449.49,451.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:454.2,454.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:457.82,458.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:458.21,460.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:461.2,462.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:462.16,464.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:465.2,465.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:465.36,467.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:468.2,469.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:469.16,471.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:472.2,477.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:480.82,481.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:481.40,483.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:484.2,485.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:485.19,487.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:488.2,489.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:489.16,491.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:492.2,499.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:502.82,503.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:503.21,505.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:506.2,507.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:507.16,509.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:510.2,514.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:23.179,24.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:24.22,26.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:28.2,32.22 4 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:32.22,34.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:35.2,36.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:36.22,38.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:40.2,41.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:41.26,43.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:44.2,44.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:44.26,46.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:47.2,47.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:47.30,49.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:50.2,50.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:50.30,52.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:54.2,55.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:55.16,57.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:58.2,58.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:58.13,60.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:61.2,62.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:62.16,64.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:65.2,65.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:65.13,67.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:69.2,70.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:70.16,72.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:73.2,73.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:73.15,75.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:77.2,77.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:80.172,81.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:81.28,82.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:82.23,84.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:85.3,85.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:85.18,87.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:88.3,89.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:89.17,90.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:90.49,92.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:93.4,93.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:95.3,95.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:98.2,98.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:98.24,100.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:101.2,101.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:101.19,103.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:104.2,105.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:105.16,106.48 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:106.48,108.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:109.3,109.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:111.2,111.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:114.119,116.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:116.22,118.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:119.2,120.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:120.22,122.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:124.2,126.26 3 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:126.26,127.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:127.36,129.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:130.3,130.105 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:131.8,132.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:132.32,134.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:135.3,135.103 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:137.2,137.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:137.16,139.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:141.2,141.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:141.32,143.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:143.27,145.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:146.3,147.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:147.27,149.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:150.3,150.106 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:150.106,151.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:153.3,153.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:153.27,154.114 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:154.114,155.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:157.9,157.104 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:157.104,158.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:160.3,160.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:160.27,161.114 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:161.114,162.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:164.9,164.104 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:164.104,165.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:167.3,167.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:169.2,169.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:25.90,26.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:26.26,28.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:30.2,31.49 2 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:31.49,33.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:35.2,35.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:36.16,37.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:38.10,39.63 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:43.84,44.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:44.21,46.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:47.2,47.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:47.25,49.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:50.2,50.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:50.21,52.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:53.2,53.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:53.21,55.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:57.2,58.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:59.18,60.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:61.15,62.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:63.24,64.42 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:65.10,66.108 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:69.2,70.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:70.22,72.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:73.2,74.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:74.29,76.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:78.2,78.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:78.14,85.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:87.2,89.37 3 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:89.37,92.21 3 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:92.21,94.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:97.2,100.31 4 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:100.31,102.38 2 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:102.38,104.37 2 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:104.37,106.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:109.3,122.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:122.26,124.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:125.3,125.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:125.19,127.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:131.3,133.39 3 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:133.39,135.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:135.9,137.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:138.3,138.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:138.17,140.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:142.3,142.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:142.34,144.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:145.3,145.11 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:148.2,155.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:20.99,22.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:22.16,24.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:26.2,31.44 3 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:31.44,32.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:32.33,33.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:33.43,38.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:43.2,43.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:43.49,45.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:46.2,46.48 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:46.48,48.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:50.2,52.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:52.27,55.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:55.8,60.24 3 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:60.24,62.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:64.3,64.57 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:64.57,66.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:68.3,68.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:71.2,71.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:71.16,73.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:75.2,76.23 2 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:76.23,78.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:80.2,80.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:19.40,89.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:109.71,111.9 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:111.9,113.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:115.2,116.38 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:116.38,117.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:118.13,119.41 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:119.41,121.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:122.17,123.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:123.43,125.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:126.11,127.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:127.40,129.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:133.2,133.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:133.22,138.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:139.2,139.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:143.90,144.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:144.25,146.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:148.2,149.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:149.16,151.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:153.2,157.61 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:157.61,159.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:161.2,161.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:162.16,163.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:164.14,165.35 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:166.13,167.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:168.16,169.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:170.17,171.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:172.16,173.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:174.15,175.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:176.10,177.120 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:189.85,191.39 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:191.39,192.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:192.44,194.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:196.2,196.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:196.15,198.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:199.2,199.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:199.15,201.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:202.2,202.46 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:205.91,207.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:207.17,209.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:211.2,215.25 5 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:215.25,217.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:218.2,224.25 4 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:224.25,226.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:227.2,227.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:227.25,229.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:231.2,243.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:243.16,245.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:247.2,247.139 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:250.89,252.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:252.19,254.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:255.2,256.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:256.25,258.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:259.2,264.52 5 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:264.52,266.14 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:266.14,268.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:271.2,277.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:277.25,280.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:282.2,283.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:283.16,285.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:287.2,287.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:287.22,288.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:288.20,290.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:291.3,291.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:294.2,297.31 3 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:297.31,300.29 3 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:300.29,302.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:303.3,305.69 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:308.2,308.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:311.88,313.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:313.13,315.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:317.2,318.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:318.16,320.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:322.2,328.22 6 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:328.22,331.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:333.2,333.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:333.23,335.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:335.30,338.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:341.2,341.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:344.91,346.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:346.13,348.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:350.2,353.18 3 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:353.18,354.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:354.27,356.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:357.3,357.73 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:357.73,359.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:362.2,362.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:362.19,370.17 4 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:370.17,372.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:375.2,376.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:376.26,378.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:379.2,379.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:382.92,384.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:384.13,386.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:388.2,389.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:389.16,391.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:393.2,401.16 4 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:401.16,403.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:405.2,405.88 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:408.91,410.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:410.13,412.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:414.2,418.95 4 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:418.95,420.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:422.2,422.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:425.90,427.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:427.13,429.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:431.2,433.167 3 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:433.167,435.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:437.2,437.89 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:437.89,439.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:441.2,441.108 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:22.93,24.49 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:24.49,26.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:28.2,28.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:29.14,30.42 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:31.17,32.59 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:33.16,34.58 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:35.24,36.75 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:37.27,38.71 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:39.22,40.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:41.23,42.63 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:43.10,44.66 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:48.79,49.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:49.13,51.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:52.2,53.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:53.16,55.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:57.2,58.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:58.32,60.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:61.2,84.28 3 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:87.101,88.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:88.13,90.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:91.2,91.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:91.38,93.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:94.2,95.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:95.16,97.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:98.2,98.53 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:98.53,100.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:102.2,104.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:104.17,106.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:107.2,107.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:107.29,109.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:110.2,115.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:118.100,119.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:119.13,121.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:122.2,122.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:122.38,124.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:125.2,126.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:126.16,128.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:129.2,129.53 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:129.53,131.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:133.2,135.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:135.17,137.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:138.2,138.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:138.29,140.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:141.2,146.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:149.123,150.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:150.13,152.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:153.2,153.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:153.18,155.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:156.2,156.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:156.38,158.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:159.2,161.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:161.17,163.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:164.2,169.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:172.113,173.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:173.13,175.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:176.2,176.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:176.50,178.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:179.2,181.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:181.17,183.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:184.2,188.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:191.57,195.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:197.102,198.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:198.13,200.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:201.2,201.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:201.20,203.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:204.2,205.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:205.16,207.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:209.2,210.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:210.32,212.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:214.2,217.56 3 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:217.56,223.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:225.2,230.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:233.41,235.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:235.16,237.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:238.2,238.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:35.27,37.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:42.41,43.11 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:44.48,45.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:46.10,47.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:54.57,55.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:56.17,57.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:58.16,59.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:60.10,61.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:82.58,83.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:84.28,85.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:86.26,87.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:88.10,89.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:93.114,95.68 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:95.68,97.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:99.2,101.42 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:101.42,102.71 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:102.71,105.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:107.2,117.23 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:117.23,119.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:121.2,124.22 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:124.22,125.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:125.31,127.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:128.3,128.35 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:129.8,129.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:129.37,131.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:132.2,132.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:135.74,136.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:136.30,138.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:139.2,139.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:139.34,141.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:142.2,142.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:142.31,144.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:145.2,145.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:145.22,147.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:161.169,162.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:162.17,164.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:165.2,166.51 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:166.51,168.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:169.2,169.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:172.92,174.42 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:174.42,177.63 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:177.63,179.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:179.9,181.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:183.2,183.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:186.65,190.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:192.115,194.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:194.26,196.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:196.8,196.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:196.31,198.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:199.2,199.117 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:202.122,206.31 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:206.31,207.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:207.45,209.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:211.2,211.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:214.72,216.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:218.117,219.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:219.16,221.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:222.2,223.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:223.20,225.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:225.17,227.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:228.3,228.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:228.27,229.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:229.50,231.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:231.30,232.11 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:236.3,236.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:239.2,241.60 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:241.60,243.61 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:243.61,245.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:246.3,246.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:246.24,247.9 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:249.3,250.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:250.17,252.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:253.3,253.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:253.22,254.9 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:256.3,256.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:256.29,257.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:257.50,259.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:259.30,260.11 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:264.3,265.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:265.32,266.9 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:269.2,269.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:272.51,273.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:273.16,275.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:276.2,277.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:277.18,279.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:280.2,280.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:280.19,282.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:283.2,283.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:286.97,288.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:288.30,290.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:291.2,291.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:291.49,293.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:294.2,294.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:297.108,299.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:301.108,303.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:305.102,307.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:319.55,320.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:320.31,322.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:323.2,323.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:323.26,325.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:326.2,326.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:329.71,330.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:343.26,344.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:345.10,346.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:354.95,362.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:362.16,364.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:366.2,397.39 14 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:397.39,399.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:399.27,401.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:402.8,404.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:405.2,407.46 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:407.46,410.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:411.2,411.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:411.44,413.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:413.12,415.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:417.2,417.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:417.26,419.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:420.2,420.84 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:420.84,422.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:427.2,427.65 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:427.65,429.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:431.2,433.20 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:433.20,435.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:436.2,437.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:437.20,439.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:440.2,440.56 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:440.56,442.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:443.2,443.56 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:443.56,448.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:450.2,450.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:450.45,453.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:459.2,459.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:459.31,461.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:461.22,462.62 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:462.62,465.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:466.4,466.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:468.3,468.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:471.2,472.115 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:472.115,474.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:491.2,491.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:491.19,493.23 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:493.23,495.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:496.3,508.21 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:508.21,510.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:511.3,511.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:522.2,522.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:522.43,535.34 5 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:535.34,556.30 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:556.30,558.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:559.4,559.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:559.44,561.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:562.4,562.106 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:562.106,564.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:575.4,575.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:575.74,577.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:578.4,579.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:579.18,581.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:583.4,584.28 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:584.28,586.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:588.4,588.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:588.31,599.57 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:599.57,601.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:601.17,604.7 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:606.5,607.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:607.21,609.6 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:615.5,615.138 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:615.138,617.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:617.27,619.7 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:620.6,620.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:622.5,623.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:623.26,625.6 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:626.5,626.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:630.4,631.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:631.20,633.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:634.4,634.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:634.22,637.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:637.26,639.6 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:640.5,640.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:645.4,660.77 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:660.77,662.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:663.4,664.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:664.25,666.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:667.4,667.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:673.2,673.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:673.26,675.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:677.2,678.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:678.25,680.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:681.2,681.97 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:681.97,683.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:690.2,691.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:691.21,693.33 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:693.33,695.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:696.3,696.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:696.33,698.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:699.3,699.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:699.49,704.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:721.3,721.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:721.54,722.84 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:722.84,724.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:728.2,728.99 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:728.99,730.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:732.2,733.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:733.22,735.10 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:736.109,737.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:738.100,739.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:740.114,741.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:742.107,743.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:744.11,745.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:748.2,749.43 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:749.43,751.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:753.2,755.34 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:755.34,756.48 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:756.48,757.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:757.19,760.5 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:764.2,764.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:764.31,767.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:768.2,768.35 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:768.35,771.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:772.2,772.76 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:772.76,776.3 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:778.2,780.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:780.16,782.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:782.20,785.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:788.2,788.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:788.25,798.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:798.18,800.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:800.9,800.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:800.30,807.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:808.3,808.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:808.36,810.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:811.3,812.50 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:812.50,815.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:816.3,822.17 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:822.17,824.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:826.3,836.17 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:836.17,838.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:839.3,839.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:842.2,843.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:843.30,844.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:844.52,846.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:846.9,848.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:851.2,869.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:869.21,871.43 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:871.43,873.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:874.3,874.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:874.29,876.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:886.3,886.76 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:886.76,888.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:890.2,890.105 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:890.105,892.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:893.2,894.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:894.16,896.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:901.2,904.40 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:904.40,905.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:905.15,906.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:909.3,910.63 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:910.63,912.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:912.9,914.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:916.3,916.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:916.43,918.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:919.3,920.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:920.20,922.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:925.3,925.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:925.23,928.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:929.3,931.33 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:931.33,934.39 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:934.39,936.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:939.2,948.42 5 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:948.42,950.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:950.21,952.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:952.9,955.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:959.2,959.53 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:959.53,960.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:960.54,961.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:961.33,963.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:964.9,972.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:973.3,973.60 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:973.60,974.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:974.40,976.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:978.3,978.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:978.61,979.41 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:979.41,981.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:983.3,983.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:983.28,985.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:986.3,987.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:989.2,989.51 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:989.51,991.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:995.2,997.53 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:997.53,999.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:999.8,1001.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1002.2,1002.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1002.22,1004.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1008.2,1014.76 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1014.76,1016.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1021.2,1021.57 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1021.57,1026.13 5 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1026.13,1029.21 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1029.21,1032.5 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1033.4,1033.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1033.49,1035.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1036.4,1043.89 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1043.89,1046.5 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1048.4,1048.86 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1052.2,1063.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1063.21,1065.40 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1065.40,1067.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1068.3,1068.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1068.38,1070.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1072.2,1074.18 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1074.18,1081.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1082.2,1082.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1082.28,1084.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1085.2,1085.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1085.16,1087.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1088.2,1088.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1088.30,1090.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1091.2,1091.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1091.30,1093.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1098.2,1098.76 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1098.76,1100.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1101.2,1102.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1102.16,1104.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1105.2,1105.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1111.94,1113.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1113.15,1115.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1117.2,1118.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1118.16,1120.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1122.2,1123.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1123.13,1125.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1126.2,1131.16 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1131.16,1133.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1134.2,1134.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1134.19,1136.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1146.2,1146.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1146.39,1148.55 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1148.55,1150.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1152.2,1152.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1152.39,1154.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1157.2,1158.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1158.21,1163.21 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1163.21,1165.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1166.3,1167.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1167.21,1169.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1170.3,1170.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1170.52,1172.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1173.3,1173.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1173.52,1178.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1179.3,1179.41 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1179.41,1182.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1183.3,1183.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1188.2,1188.46 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1188.46,1190.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1191.2,1191.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1191.27,1193.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1195.2,1196.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1196.16,1198.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1201.2,1210.16 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1210.16,1212.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1213.2,1213.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1218.59,1220.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1220.38,1222.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1225.2,1226.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1226.29,1227.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1227.22,1229.9 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1232.2,1232.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1232.18,1234.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1237.2,1244.29 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1244.29,1245.67 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1245.67,1247.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1249.2,1249.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1249.16,1251.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1254.2,1254.11 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1258.55,1260.47 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1260.47,1262.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1263.2,1264.58 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1264.58,1266.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1267.2,1267.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1270.252,1271.108 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1271.108,1273.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1274.2,1274.55 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1274.55,1276.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1277.2,1277.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1280.184,1282.69 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1282.69,1284.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1284.32,1285.58 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1285.58,1287.10 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1290.3,1290.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1290.18,1292.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1294.2,1294.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1294.19,1297.32 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1297.32,1298.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1298.39,1300.10 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1303.3,1303.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1303.19,1305.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1307.2,1307.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1307.21,1309.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1309.32,1310.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1310.49,1312.10 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1315.3,1315.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1315.18,1317.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1319.2,1319.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1319.28,1321.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1321.17,1323.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1324.3,1324.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1324.27,1326.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1328.2,1328.76 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1328.76,1330.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1331.2,1331.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1342.96,1343.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1343.26,1345.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1347.2,1348.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1348.16,1350.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1352.2,1363.23 9 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1363.23,1364.58 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1364.58,1365.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1365.31,1367.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1367.10,1369.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1373.2,1373.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1373.17,1375.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1376.2,1376.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1376.16,1378.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1379.2,1379.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1379.16,1381.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1382.2,1382.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1382.18,1384.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1385.2,1385.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1385.19,1387.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1388.2,1388.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1388.19,1390.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1396.2,1399.18 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1399.18,1400.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1400.61,1401.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1402.50,1403.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1404.12,1405.108 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1409.2,1410.42 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1410.42,1414.3 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1415.2,1420.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1420.16,1422.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1429.2,1444.43 6 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1444.43,1446.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1449.2,1451.27 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1451.27,1453.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1458.2,1458.46 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1458.46,1460.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1461.2,1461.63 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1461.63,1463.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1465.2,1466.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1466.15,1472.29 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1472.29,1479.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1479.18,1481.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1482.4,1482.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1482.23,1483.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1485.4,1485.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1485.30,1486.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1486.24,1488.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1488.32,1489.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1493.4,1494.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1494.30,1495.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1498.8,1504.29 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1504.29,1506.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1506.18,1508.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1509.4,1509.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1509.23,1510.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1512.4,1512.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1512.30,1513.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1513.24,1515.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1515.32,1516.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1520.4,1521.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1521.30,1522.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1526.2,1526.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1526.26,1528.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1528.17,1530.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1535.2,1535.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1535.74,1536.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1536.13,1537.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1537.33,1542.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1542.26,1544.39 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1544.39,1546.7 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1548.5,1548.82 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1565.2,1565.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1565.38,1569.27 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1569.27,1571.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1572.3,1572.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1572.27,1574.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1576.3,1581.32 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1581.32,1586.4 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1588.3,1592.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1592.18,1594.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1595.3,1596.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1596.17,1598.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1599.3,1599.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1602.2,1602.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1603.15,1618.32 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1618.32,1620.33 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1620.33,1621.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1621.40,1623.11 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1626.4,1638.6 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1640.3,1641.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1641.17,1643.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1644.3,1644.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1646.18,1648.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1648.17,1650.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1651.3,1651.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1653.10,1654.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1654.25,1656.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1657.3,1659.32 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1659.32,1661.33 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1661.33,1662.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1662.40,1664.11 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1667.4,1669.26 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1669.26,1671.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1672.4,1673.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1673.25,1675.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1676.4,1676.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1678.3,1678.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1690.51,1695.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1700.73,1702.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1702.16,1704.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1705.2,1706.48 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1706.48,1710.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1711.2,1713.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1713.16,1715.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1716.2,1716.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1727.117,1731.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1731.21,1733.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1734.2,1735.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1735.16,1737.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1738.2,1739.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1739.27,1741.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1742.2,1742.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1764.19,1775.30 7 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1775.30,1777.37 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1777.37,1779.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1781.3,1781.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1781.20,1783.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1797.2,1797.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1797.39,1799.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1801.2,1811.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1811.25,1813.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1815.2,1816.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1816.29,1818.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1824.2,1824.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1824.27,1826.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1831.2,1833.22 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1833.22,1835.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1837.2,1846.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1846.16,1848.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1853.2,1855.27 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1855.27,1857.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1859.2,1876.33 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1876.33,1878.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1880.2,1881.28 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1881.28,1885.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1885.20,1888.33 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1888.33,1889.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1889.40,1891.11 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1894.4,1894.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1894.20,1895.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1900.3,1900.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1900.22,1902.33 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1902.33,1903.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1903.50,1905.11 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1908.4,1908.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1908.19,1909.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1918.3,1918.56 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1918.56,1919.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1927.3,1927.64 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1927.64,1928.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1932.3,1935.32 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1935.32,1936.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1936.39,1938.10 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1942.3,1956.14 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1956.14,1957.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1957.37,1959.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1961.3,1962.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1962.26,1963.9 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1975.2,1975.59 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1975.59,1986.17 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1986.17,1988.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1990.3,1991.34 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1991.34,1993.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1995.3,1996.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1996.29,1998.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1998.21,2001.34 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2001.34,2002.41 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2002.41,2004.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2007.5,2007.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2007.21,2008.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2011.4,2011.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2011.23,2013.34 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2013.34,2014.51 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2014.51,2016.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2019.5,2019.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2019.20,2020.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2023.4,2023.57 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2023.57,2024.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2027.4,2027.65 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2027.65,2028.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2030.4,2031.33 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2031.33,2032.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2032.40,2034.11 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2037.4,2051.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2051.15,2052.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2052.38,2054.6 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2056.4,2057.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2057.27,2058.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2065.2,2066.28 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2066.28,2068.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2072.2,2072.71 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2072.71,2080.30 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2080.30,2081.41 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2081.41,2087.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2089.3,2089.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2089.13,2090.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2090.31,2095.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2095.25,2097.38 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2097.38,2099.7 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2101.5,2101.81 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2112.2,2112.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2112.38,2115.27 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2115.27,2117.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2121.3,2138.30 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2138.30,2140.11 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2140.11,2141.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2143.4,2160.15 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2160.15,2161.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2161.39,2163.6 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2165.4,2165.46 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2167.3,2173.24 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2173.24,2175.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2176.3,2176.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2179.2,2179.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2180.15,2182.24 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2182.24,2184.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2185.3,2185.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2187.18,2199.30 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2199.30,2201.11 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2201.11,2202.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2204.4,2208.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2208.15,2209.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2209.39,2211.6 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2213.4,2213.35 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2215.3,2216.24 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2216.24,2218.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2219.3,2219.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2220.10,2221.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2221.22,2223.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2224.3,2226.27 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2226.27,2228.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2228.20,2230.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2231.4,2233.26 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2233.26,2235.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2236.4,2237.23 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2237.23,2239.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2240.4,2240.46 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2240.46,2244.5 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2245.4,2245.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2247.3,2247.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2252.94,2254.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2254.16,2256.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2258.2,2260.18 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2260.18,2261.59 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2261.59,2262.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2262.36,2264.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2264.10,2266.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2270.2,2270.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2270.13,2272.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2273.2,2273.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2273.50,2275.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2277.2,2277.98 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2281.98,2282.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2282.26,2284.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2286.2,2287.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2287.16,2289.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2291.2,2292.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2292.13,2294.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2297.2,2298.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2298.19,2299.51 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2299.51,2301.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2302.3,2302.55 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2304.2,2304.42 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2304.42,2306.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2308.2,2308.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2308.54,2309.48 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2309.48,2311.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2312.3,2312.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2316.2,2318.53 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:17.82,19.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:21.149,22.55 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:22.55,24.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:25.2,25.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:25.36,27.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:28.2,34.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:34.16,36.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:37.2,37.42 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:37.42,39.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:40.2,40.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:43.105,44.48 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:44.48,46.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:47.2,48.54 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:51.129,53.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:53.16,55.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:56.2,57.53 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:57.53,59.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:60.2,61.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:61.25,63.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:64.2,65.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:65.16,67.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:68.2,68.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:26.97,27.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:27.18,29.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:30.2,30.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:33.37,35.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:37.81,38.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:38.44,40.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:41.2,41.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:41.38,43.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:44.2,44.57 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:47.88,48.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:48.32,50.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:51.2,52.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:52.20,54.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:55.2,55.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:58.40,72.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:74.106,75.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:75.34,77.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:78.2,79.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:79.16,81.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:83.2,84.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:84.16,86.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:88.2,89.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:89.13,91.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:93.2,94.63 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:94.63,96.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:98.2,98.72 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:98.72,100.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:102.2,106.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:109.117,110.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:110.32,112.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:113.2,113.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:113.34,115.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:117.2,118.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:118.16,120.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:121.2,121.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:121.19,123.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:125.2,126.69 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:126.69,128.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:130.2,136.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:18.33,20.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:22.27,37.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:39.93,40.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:40.30,42.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:43.2,43.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:43.28,45.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:46.2,47.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:47.16,49.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:51.2,52.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:52.17,54.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:55.2,56.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:56.19,58.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:59.2,59.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:59.19,61.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:62.2,63.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:63.16,65.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:67.2,74.9 3 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:74.9,76.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:77.2,78.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:78.15,80.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:81.2,85.16 4 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:85.16,87.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:88.2,88.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:88.17,90.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:92.2,101.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:104.48,105.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:105.16,107.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:108.2,109.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:109.29,111.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:112.2,112.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:112.31,114.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:115.2,115.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:118.75,120.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:120.27,121.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:121.32,123.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:123.17,124.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:126.4,126.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:129.2,134.33 3 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:134.33,136.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:137.2,137.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:137.40,138.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:138.39,140.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:141.3,141.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:143.2,143.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:143.34,145.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:146.2,147.35 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:147.35,149.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:150.2,150.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:153.77,154.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:154.20,156.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:157.2,159.31 3 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:159.31,160.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:160.33,162.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:163.3,163.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:163.30,165.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:167.2,170.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:23.91,25.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:27.38,50.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:52.104,53.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:53.38,55.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:56.2,57.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:57.16,59.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:61.2,62.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:62.26,64.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:65.2,66.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:66.30,68.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:69.2,69.72 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:69.72,71.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:73.2,74.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:74.16,76.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:77.2,78.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:78.16,80.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:81.2,82.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:82.16,84.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:85.2,86.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:86.16,88.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:90.2,105.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:105.16,107.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:109.2,109.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:109.19,117.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:118.2,118.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:118.25,120.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:121.2,121.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:121.30,123.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:124.2,124.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:124.31,126.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:127.2,128.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:128.16,130.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:131.2,131.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:134.91,136.9 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:136.9,138.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:139.2,140.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:140.15,141.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:141.19,143.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:144.3,144.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:146.2,146.94 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:149.59,150.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:150.16,152.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:153.2,154.61 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:154.61,156.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:157.2,157.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:160.56,161.75 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:161.75,163.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:164.2,164.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:167.67,169.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:170.17,171.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:172.67,173.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:174.10,175.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:179.60,180.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:180.16,182.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:183.2,184.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:184.25,186.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:187.2,187.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:190.57,191.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:192.15,193.81 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:193.81,195.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:196.3,196.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:197.19,199.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:199.17,201.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:202.3,202.55 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:202.55,204.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:205.3,205.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:206.14,207.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:208.11,209.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:210.10,211.41 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:215.59,216.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:216.16,218.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:219.2,219.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:220.12,221.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:222.14,223.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:224.10,225.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:28.90,30.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:30.16,32.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:34.2,36.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:37.16,38.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:40.16,42.140 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:44.20,46.140 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:48.17,50.142 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:52.17,56.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:56.50,62.63 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:62.63,64.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:66.4,66.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:66.45,68.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:72.4,74.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:74.25,76.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:77.4,77.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:80.3,80.101 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:82.18,84.141 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:86.18,88.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:88.18,90.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:91.3,91.41 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:93.17,96.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:96.50,99.59 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:99.59,101.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:102.4,104.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:104.25,106.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:107.4,107.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:110.3,110.98 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:112.10,116.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:125.86,126.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:126.16,128.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:129.2,130.9 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:130.9,132.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:133.2,133.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:133.22,135.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:137.2,139.31 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:139.31,141.10 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:141.10,143.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:144.3,145.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:145.22,147.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:148.3,149.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:149.26,151.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:152.3,152.68 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:152.68,154.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:155.3,156.37 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:156.37,158.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:159.3,160.107 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:162.2,162.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:165.249,166.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:166.24,168.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:169.2,169.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:169.38,171.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:173.2,174.31 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:174.31,175.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:175.32,177.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:180.2,181.34 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:181.34,182.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:182.29,183.9 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:185.3,197.17 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:197.17,199.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:200.3,200.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:200.20,201.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:203.3,203.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:203.37,205.33 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:205.33,206.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:208.4,208.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:208.19,209.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:209.43,210.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:212.5,212.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:214.4,215.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:215.30,216.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:220.2,220.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:223.113,229.2 5 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:231.101,233.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:247.92,251.16 4 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:251.16,253.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:253.8,253.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:253.24,255.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:259.2,272.51 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:272.51,274.38 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:274.38,275.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:276.50,277.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:278.12,279.107 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:287.2,292.26 5 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:292.26,294.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:297.2,297.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:297.19,301.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:303.2,311.42 5 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:311.42,315.3 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:316.2,341.64 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:341.64,342.86 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:342.86,344.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:345.3,345.56 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:345.56,347.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:348.3,360.19 6 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:360.19,364.4 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:365.3,365.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:369.2,370.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:370.15,372.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:372.27,374.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:375.3,375.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:375.27,377.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:380.2,381.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:381.15,387.28 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:387.28,395.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:395.18,397.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:398.4,398.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:398.23,399.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:401.4,401.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:401.30,402.66 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:402.66,403.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:405.5,406.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:406.12,407.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:409.5,409.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:409.28,413.6 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:414.5,415.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:415.30,416.11 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:419.4,420.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:420.30,421.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:424.8,432.28 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:432.28,438.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:438.18,440.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:441.4,441.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:441.23,442.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:444.4,444.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:444.30,445.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:445.40,447.31 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:447.31,448.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:452.4,455.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:455.30,456.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:461.2,465.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:465.17,467.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:469.2,470.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:470.16,472.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:473.2,473.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:20.79,21.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:21.43,23.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:24.2,24.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:24.29,26.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:27.2,27.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:30.40,63.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:65.68,71.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:71.25,74.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:75.2,75.67 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:78.62,83.19 3 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:83.19,87.3 3 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:88.2,88.89 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:91.101,92.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:92.22,94.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:95.2,96.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:96.18,98.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:99.2,100.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:100.16,102.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:103.2,104.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:104.16,106.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:107.2,107.119 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:110.99,111.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:111.22,113.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:114.2,115.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:115.18,117.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:118.2,119.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:119.16,121.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:122.2,122.51 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:122.51,124.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:125.2,126.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:126.16,128.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:129.2,131.15 3 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:131.15,132.69 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:132.69,134.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:135.3,135.58 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:137.2,137.130 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:140.102,142.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:142.16,144.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:145.2,145.64 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:145.64,147.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:148.2,148.113 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:151.109,153.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:153.16,155.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:156.2,157.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:157.16,159.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:160.2,161.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:161.16,163.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:164.2,164.67 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:167.107,169.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:169.16,171.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:172.2,173.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:173.16,175.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:176.2,176.107 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:176.107,178.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:179.2,179.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:180.41,181.63 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:182.41,183.95 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:184.10,185.83 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:189.111,191.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:191.16,193.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:194.2,195.57 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:195.57,197.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:198.2,199.23 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:199.23,201.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:202.2,203.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:203.16,205.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:206.2,206.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:206.17,208.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:209.2,209.108 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:212.63,215.2 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:217.69,219.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:219.16,221.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:222.2,222.79 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:225.60,227.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:227.16,229.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:230.2,230.57 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:233.137,234.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:234.49,236.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:237.2,238.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:238.16,240.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:241.2,243.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:243.16,245.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:246.2,247.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:247.16,249.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:250.2,250.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:250.22,252.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:253.2,253.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:256.142,258.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:258.16,260.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:261.2,262.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:262.16,264.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:265.2,265.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:265.47,267.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:268.2,269.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:269.16,270.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:270.50,272.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:273.3,273.89 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:275.2,275.173 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:278.157,280.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:280.16,282.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:283.2,283.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:283.47,285.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:286.2,287.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:287.16,288.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:288.50,290.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:291.3,291.89 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:293.2,293.169 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:296.104,297.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:297.22,299.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:300.2,301.61 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:301.61,303.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:303.20,304.9 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:307.2,307.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:307.19,309.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:310.2,317.8 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:320.119,322.39 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:322.39,323.81 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:323.81,325.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:327.2,327.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:330.71,332.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:332.16,334.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:335.2,335.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:17.61,105.23 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:105.23,122.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:123.2,123.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:126.104,127.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:127.61,129.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:130.2,130.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:130.38,132.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:133.2,134.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:134.16,136.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:137.2,138.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:138.16,140.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:141.2,147.107 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:147.107,149.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:150.2,151.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:151.16,153.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:154.2,170.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:170.19,172.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:173.2,173.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:176.103,177.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:177.61,179.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:180.2,180.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:180.38,182.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:183.2,184.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:184.16,186.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:187.2,191.106 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:191.106,193.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:194.2,195.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:195.16,197.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:198.2,200.31 3 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:200.31,207.36 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:207.36,218.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:219.3,220.35 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:222.2,230.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:233.107,234.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:234.61,236.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:237.2,237.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:237.38,239.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:240.2,241.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:241.16,243.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:244.2,248.110 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:248.110,250.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:251.2,252.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:252.16,254.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:255.2,256.33 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:256.33,266.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:267.2,275.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:278.108,279.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:279.61,281.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:282.2,282.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:282.37,284.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:285.2,286.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:286.16,288.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:289.2,290.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:290.19,292.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:293.2,293.104 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:293.104,295.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:296.2,297.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:297.16,299.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:300.2,307.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:307.16,309.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:310.2,311.43 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:311.43,318.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:319.2,332.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:332.22,334.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:335.2,335.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:338.108,339.62 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:339.62,341.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:342.2,342.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:342.38,344.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:345.2,346.9 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:346.9,348.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:349.2,350.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:350.16,352.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:353.2,357.16 5 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:357.16,359.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:360.2,370.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:373.109,374.62 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:374.62,376.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:377.2,377.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:377.38,379.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:380.2,381.9 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:381.9,383.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:384.2,385.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:385.16,387.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:388.2,390.32 3 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:390.32,392.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:393.2,394.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:394.16,396.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:397.2,403.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:406.106,407.62 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:407.62,409.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:410.2,410.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:410.38,412.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:413.2,414.9 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:414.9,416.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:417.2,418.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:418.16,420.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:421.2,423.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:423.16,424.41 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:424.41,434.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:435.3,435.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:437.2,445.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:483.65,484.42 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:484.42,485.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:485.39,487.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:489.2,489.85 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:489.85,491.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:492.2,492.95 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:495.102,496.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:496.38,498.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:499.2,499.58 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:499.58,501.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:502.2,502.90 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:505.60,508.2 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:510.66,512.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:512.26,514.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:515.2,515.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:518.69,521.33 3 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:521.33,523.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:523.21,524.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:526.3,526.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:526.34,527.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:529.3,530.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:532.2,532.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:535.63,537.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:537.19,539.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:540.2,541.42 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:541.42,543.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:544.2,544.57 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:544.57,546.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:547.2,547.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:547.54,549.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:550.2,550.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:553.70,557.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:559.66,561.9 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:561.9,563.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:564.2,566.17 3 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:566.17,568.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:569.2,569.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:570.103,572.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:573.34,574.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:575.10,576.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:580.56,581.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:581.37,583.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:584.2,584.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:584.26,586.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:586.37,587.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:589.3,589.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:591.2,591.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:594.90,602.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:604.68,605.71 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:605.71,607.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:607.17,609.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:610.3,610.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:612.2,613.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:613.16,615.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:616.2,617.41 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:617.41,619.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:620.2,620.78 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:623.65,625.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:625.16,627.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:628.2,628.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:628.17,630.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:631.2,631.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:634.51,635.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:635.16,637.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:638.2,638.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:641.56,642.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:642.28,644.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:645.2,646.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:649.92,651.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:651.29,653.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:654.2,654.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:657.86,659.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:659.29,661.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:662.2,662.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:665.94,667.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:667.29,669.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:670.2,670.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:673.98,675.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:675.29,677.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:678.2,678.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:17.93,18.104 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:18.104,20.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:22.2,23.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:23.16,25.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:27.2,28.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:28.19,30.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:32.2,35.33 3 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:35.33,36.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:36.47,39.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:42.2,44.20 3 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:44.20,47.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:48.2,49.68 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:49.68,50.48 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:50.48,52.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:53.3,53.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:53.32,55.23 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:55.23,56.63 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:56.63,58.6 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:59.5,59.53 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:61.4,61.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:64.2,71.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:71.17,73.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:73.8,73.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:73.29,75.36 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:75.36,77.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:78.3,83.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:86.2,86.35 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:86.35,88.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:90.2,97.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:97.16,99.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:101.2,110.28 3 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:110.28,112.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:113.2,124.16 4 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:124.16,126.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:127.2,127.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:133.93,134.35 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:134.35,136.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:138.2,139.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:139.16,141.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:143.2,144.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:144.16,146.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:147.2,147.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:147.17,149.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:151.2,152.33 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:152.33,153.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:153.47,156.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:159.2,160.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:160.16,162.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:164.2,176.26 3 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:176.26,178.23 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:178.23,180.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:181.3,192.5 3 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:195.2,196.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:196.16,198.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:199.2,199.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:22.104,24.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:24.16,26.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:28.2,29.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:29.18,31.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:33.2,33.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:34.13,35.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:36.13,37.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:38.14,39.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:40.16,41.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:42.10,43.95 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:51.67,53.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:57.68,58.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:58.33,60.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:61.2,61.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:67.42,69.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:74.61,76.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:76.26,78.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:79.2,79.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:85.90,86.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:86.49,88.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:90.2,91.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:91.15,93.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:94.2,95.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:95.17,97.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:100.2,103.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:103.16,105.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:107.2,113.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:113.12,115.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:115.18,117.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:118.3,119.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:119.20,121.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:122.3,124.48 3 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:125.8,127.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:129.2,130.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:130.16,132.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:134.2,139.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:145.90,147.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:147.15,149.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:151.2,152.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:152.16,154.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:156.2,157.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:157.16,158.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:158.47,160.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:161.3,161.56 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:164.2,170.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:170.19,173.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:173.8,175.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:176.2,176.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:181.92,183.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:183.16,185.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:187.2,188.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:188.16,190.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:192.2,200.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:200.25,207.28 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:207.28,209.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:210.3,210.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:212.2,212.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:216.93,217.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:217.52,219.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:221.2,222.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:222.15,224.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:226.2,227.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:227.16,229.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:231.2,231.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:231.47,232.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:232.47,234.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:235.3,235.59 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:238.2,241.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:35.127,36.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:36.23,38.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:39.2,40.40 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:40.40,42.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:43.2,43.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:43.37,45.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:46.2,46.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:46.37,48.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:49.2,49.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:52.23,80.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:82.26,140.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:142.92,143.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:143.25,145.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:147.2,148.49 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:148.49,150.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:152.2,152.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:153.17,154.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:154.24,156.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:157.3,158.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:158.17,160.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:161.3,165.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:166.17,167.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:167.22,169.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:170.3,170.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:170.22,172.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:173.3,174.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:174.17,176.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:177.3,181.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:182.16,189.23 7 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:189.23,191.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:192.3,192.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:192.24,194.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:195.3,195.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:195.39,197.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:198.3,207.17 3 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:207.17,209.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:210.3,210.69 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:210.69,212.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:213.3,213.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:214.10,215.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:219.92,220.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:220.25,222.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:224.2,225.49 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:225.49,227.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:229.2,229.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:230.17,232.24 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:232.24,234.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:235.3,236.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:236.17,238.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:239.3,239.59 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:239.59,241.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:242.3,242.81 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:242.81,244.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:245.3,250.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:251.17,253.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:253.22,255.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:256.3,257.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:257.17,259.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:260.3,260.79 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:260.79,262.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:263.3,268.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:269.10,270.66 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:274.91,276.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:276.16,278.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:279.2,279.67 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:279.67,280.76 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:280.76,282.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:285.2,286.52 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:286.52,288.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:289.2,289.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:292.74,294.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:294.16,296.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:297.2,297.62 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:297.62,299.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:300.2,300.68 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:303.109,304.56 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:304.56,306.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:307.2,307.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:307.25,309.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:310.2,310.81 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:310.81,312.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:313.2,313.102 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:313.102,315.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:316.2,316.108 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:316.108,318.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:319.2,319.99 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:319.99,321.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:322.2,322.99 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:322.99,324.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:325.2,325.60 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:325.60,327.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:328.2,328.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:328.34,330.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:331.2,331.114 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:331.114,333.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:334.2,334.66 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:334.66,336.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:337.2,337.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:337.40,339.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:340.2,340.132 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:340.132,342.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:343.2,343.35 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:343.35,345.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:346.2,346.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:349.92,350.103 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:350.103,352.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:354.2,355.52 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:355.52,357.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:358.2,358.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:358.32,360.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:361.2,361.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:364.108,365.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:365.19,367.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:368.2,369.53 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:369.53,371.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:372.2,372.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:372.19,374.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:375.2,375.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:375.39,376.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:376.34,378.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:380.2,380.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:383.66,385.53 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:385.53,387.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:388.2,388.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:388.19,390.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:391.2,391.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:10.101,12.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:12.16,14.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:16.2,18.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:19.16,20.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:21.14,22.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:23.15,24.84 1 0 +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:25.16,26.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:27.10,28.97 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:21.75,23.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:25.41,28.2 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:30.31,37.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:39.38,46.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:48.50,56.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:58.43,70.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:72.80,73.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:73.36,75.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:76.2,76.48 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:76.48,78.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:79.2,79.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:82.97,84.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:84.16,86.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:87.2,88.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:88.16,90.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:91.2,92.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:92.16,94.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:95.2,96.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:96.16,98.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:99.2,99.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:102.104,104.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:104.16,106.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:107.2,108.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:108.16,110.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:111.2,112.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:112.16,114.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:115.2,116.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:116.16,118.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:119.2,119.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:122.96,124.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:124.16,126.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:127.2,128.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:128.19,130.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:131.2,132.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:132.18,134.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:135.2,141.79 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:141.79,143.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:143.17,145.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:146.3,146.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:148.2,148.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:151.77,153.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:153.16,155.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:156.2,157.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:157.19,159.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:160.2,160.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:10.101,12.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:12.16,14.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:16.2,17.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:17.18,19.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:21.2,21.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:22.15,23.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:24.13,25.42 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:26.14,27.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:28.16,29.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:30.16,31.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:32.10,33.102 1 0 diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-03/create-database.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-03/create-database.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-03/create-database.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-03/create-database.stdout.log new file mode 100644 index 00000000..4b15bd57 --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-03/create-database.stdout.log @@ -0,0 +1 @@ +CREATE DATABASE diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-03/create-pgvector.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-03/create-pgvector.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-03/create-pgvector.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-03/create-pgvector.stdout.log new file mode 100644 index 00000000..d26bad14 --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-03/create-pgvector.stdout.log @@ -0,0 +1 @@ +CREATE EXTENSION diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-03/database-identity.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-03/database-identity.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-03/database-identity.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-03/database-identity.stdout.log new file mode 100644 index 00000000..91b5c45c --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-03/database-identity.stdout.log @@ -0,0 +1 @@ +{"database" : "engram_prc_rg_test_08822acc1e43ac35_r3", "schema" : "public", "server_version" : "17.10 (Debian 17.10-1.pgdg12+1)", "user" : "engram"} diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-03/go-test-summary.json b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-03/go-test-summary.json new file mode 100644 index 00000000..e6f7bef2 --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-03/go-test-summary.json @@ -0,0 +1,40 @@ +{ + "schema_version": 1, + "verdict": "PASS", + "input_path": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-repeat3\\repeat-03\\go-test.stdout.jsonl", + "fail_on_unexpected_skip": true, + "allowed_skip_identities": [], + "counts": { + "packages": 1, + "tests": 1, + "passed": 1, + "failed": 0, + "skipped": 0, + "no_tests": 0, + "zero_tests": 0, + "incomplete": 0, + "unexpected_skips": 0, + "malformed_lines": 0 + }, + "packages": [ + { + "package": "github.com/thebtf/engram/internal/mcp", + "outcome": "pass", + "elapsed_seconds": 4.758, + "last_output": "ok \tgithub.com/thebtf/engram/internal/mcp\t4.746s\tcoverage: 0.1% of statements", + "tests_observed": 1 + } + ], + "tests": [ + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestEC_F1_TagDerivedBackfill_T007", + "outcome": "pass", + "elapsed_seconds": 4.45, + "last_output": "--- PASS: TestEC_F1_TagDerivedBackfill_T007 (4.45s)", + "skip_allowed": false + } + ], + "unexpected_skips": [], + "errors": [] +} diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-03/go-test.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-03/go-test.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-03/go-test.stdout.jsonl b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-03/go-test.stdout.jsonl new file mode 100644 index 00000000..7605eac7 --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-03/go-test.stdout.jsonl @@ -0,0 +1,16 @@ +{"Time":"2026-07-11T03:54:07.9059233+03:00","Action":"start","Package":"github.com/thebtf/engram/internal/mcp"} +{"Time":"2026-07-11T03:54:08.1624961+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007"} +{"Time":"2026-07-11T03:54:08.1624961+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":"=== RUN TestEC_F1_TagDerivedBackfill_T007\n"} +{"Time":"2026-07-11T03:54:09.2139741+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":"{\"level\":\"warn\",\"error\":\"ERROR: relation \\\"observation_vectors\\\" does not exist (SQLSTATE 42P01)\",\"time\":\"2026-07-11T03:54:09+03:00\",\"message\":\"migration 040: orphan vector cleanup failed (non-fatal)\"}\n"} +{"Time":"2026-07-11T03:54:09.2139741+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":"{\"level\":\"info\",\"garbage_deleted\":0,\"orphan_vectors_deleted\":0,\"time\":\"2026-07-11T03:54:09+03:00\",\"message\":\"migration 040: garbage cleanup complete\"}\n"} +{"Time":"2026-07-11T03:54:09.2249749+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":"{\"level\":\"info\",\"orphan_vectors_deleted\":0,\"time\":\"2026-07-11T03:54:09+03:00\",\"message\":\"migration 041: orphan vector purge complete\"}\n"} +{"Time":"2026-07-11T03:54:09.2344733+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":"{\"level\":\"info\",\"patterns_deleted\":0,\"time\":\"2026-07-11T03:54:09+03:00\",\"message\":\"migration 042: low-quality pattern purge complete\"}\n"} +{"Time":"2026-07-11T03:54:09.2819745+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":"{\"level\":\"info\",\"total_deleted\":0,\"time\":\"2026-07-11T03:54:09+03:00\",\"message\":\"migration 043: radical observation cleanup complete\"}\n"} +{"Time":"2026-07-11T03:54:10.7340183+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":"{\"level\":\"warn\",\"error\":\"ERROR: extension \\\"vectorscale\\\" is not available (SQLSTATE 0A000)\",\"time\":\"2026-07-11T03:54:10+03:00\",\"message\":\"migration 109: vectorscale extension not available, skipping DiskANN index\"}\n"} +{"Time":"2026-07-11T03:54:12.1635914+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":"{\"level\":\"debug\",\"connections\":1,\"time\":\"2026-07-11T03:54:12+03:00\",\"message\":\"Connection pool warmed\"}\n"} +{"Time":"2026-07-11T03:54:12.6106043+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":"--- PASS: TestEC_F1_TagDerivedBackfill_T007 (4.45s)\n"} +{"Time":"2026-07-11T03:54:12.6106043+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Elapsed":4.45} +{"Time":"2026-07-11T03:54:12.6106043+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Output":"PASS\n"} +{"Time":"2026-07-11T03:54:12.6306033+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Output":"coverage: 0.1% of statements\n"} +{"Time":"2026-07-11T03:54:12.6636038+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Output":"ok \tgithub.com/thebtf/engram/internal/mcp\t4.746s\tcoverage: 0.1% of statements\n"} +{"Time":"2026-07-11T03:54:12.6636038+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Elapsed":4.758} diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-03/pg-stat-activity-after.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-03/pg-stat-activity-after.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-03/pg-stat-activity-after.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-03/pg-stat-activity-after.stdout.log new file mode 100644 index 00000000..fe51488c --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-03/pg-stat-activity-after.stdout.log @@ -0,0 +1 @@ +[] diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-03/pg-stat-activity-before.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-03/pg-stat-activity-before.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-03/pg-stat-activity-before.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-03/pg-stat-activity-before.stdout.log new file mode 100644 index 00000000..fe51488c --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-03/pg-stat-activity-before.stdout.log @@ -0,0 +1 @@ +[] diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-03/repeat-summary.json b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-03/repeat-summary.json new file mode 100644 index 00000000..15a255f9 --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-03/repeat-summary.json @@ -0,0 +1,33 @@ +{ + "repeat": 3, + "verdict": "PASS", + "database": "engram_prc_rg_test_08822acc1e43ac35_r3", + "schema": "public", + "database_schema_identity": "engram_prc_rg_test_08822acc1e43ac35_r3.public", + "database_dsn": "REDACTED_DATABASE_DSN", + "database_create_confirmed": true, + "sequential_execution": { + "package_parallelism": 1, + "test_parallelism": 1 + }, + "race": false, + "connection_budget": 20, + "server_sessions_before": 6, + "server_sessions_after": 6, + "sessions_before": 0, + "sessions_after": 0, + "go_test_exit": 0, + "json_parser_exit": 0, + "coverage_policy": "Targeted", + "coverage_exit": 0, + "cleanup_exit": 0, + "cleanup_status": "PASS", + "required_session_start_execution": { + "schema_version": 1, + "verdict": "NOT_APPLICABLE", + "reason": "only an unfiltered canonical ./... run requires the 12-test session-start execution proof" + }, + "cleanup_summary": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-repeat3\\repeat-03\\cleanup\\cleanup.json", + "errors": [], + "artifact_directory": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-repeat3\\repeat-03" +} diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-03/server-connection-count-after.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-03/server-connection-count-after.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-03/server-connection-count-after.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-03/server-connection-count-after.stdout.log new file mode 100644 index 00000000..1e8b3149 --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-03/server-connection-count-after.stdout.log @@ -0,0 +1 @@ +6 diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-03/server-connection-count-before.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-03/server-connection-count-before.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-03/server-connection-count-before.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-03/server-connection-count-before.stdout.log new file mode 100644 index 00000000..1e8b3149 --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-03/server-connection-count-before.stdout.log @@ -0,0 +1 @@ +6 diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-03/targeted-coverage.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-03/targeted-coverage.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-03/targeted-coverage.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-03/targeted-coverage.stdout.log new file mode 100644 index 00000000..c958686c --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/repeat-03/targeted-coverage.stdout.log @@ -0,0 +1,352 @@ +github.com/thebtf/engram/internal/mcp/audit_helpers.go:33: effectiveAuditWriter 0.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:44: isAuditEnabled 0.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:52: runAuditAsync 0.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:77: marshalState 0.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:92: logAuditCreate 0.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:117: logAuditEdit 0.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:142: logAuditDelete 0.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:166: logAuditGeneric 0.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:189: logAuditSupersede 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:30: parseArgs 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:46: coerceString 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:67: coerceInt 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:97: coerceInt64 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:127: coerceFloat64 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:151: coerceBool 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:177: coerceStringSlice 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:204: coerceInt64Slice 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:222: clampToInt 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:236: clampInt64ToInt 0.0% +github.com/thebtf/engram/internal/mcp/context.go:17: extractProjectFromHeader 0.0% +github.com/thebtf/engram/internal/mcp/context.go:22: contextWithProject 0.0% +github.com/thebtf/engram/internal/mcp/context.go:29: ContextWithProject 0.0% +github.com/thebtf/engram/internal/mcp/context.go:35: projectFromContext 0.0% +github.com/thebtf/engram/internal/mcp/context.go:41: contextWithSession 0.0% +github.com/thebtf/engram/internal/mcp/context.go:48: ContextWithSession 0.0% +github.com/thebtf/engram/internal/mcp/context.go:54: sessionFromContext 0.0% +github.com/thebtf/engram/internal/mcp/context.go:61: actorFromContext 0.0% +github.com/thebtf/engram/internal/mcp/health.go:22: NewMCPHealth 0.0% +github.com/thebtf/engram/internal/mcp/health.go:29: RecordRequest 0.0% +github.com/thebtf/engram/internal/mcp/health.go:36: RecordError 0.0% +github.com/thebtf/engram/internal/mcp/health.go:42: rotateWindowIfNeeded 0.0% +github.com/thebtf/engram/internal/mcp/health.go:55: HandleHealth 0.0% +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:28: ruleGovernanceCaptureEnabled 0.0% +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:39: captureActiveRuleIntent 0.0% +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:104: ruleIntentFingerprint 0.0% +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:113: marshalRuleCandidateIntentResponse 0.0% +github.com/thebtf/engram/internal/mcp/server.go:127: NewServer 100.0% +github.com/thebtf/engram/internal/mcp/server.go:141: SetBackfillStatusFunc 0.0% +github.com/thebtf/engram/internal/mcp/server.go:146: SetVersionedDocumentStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:151: SetIssueStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:156: SetMemoryStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:161: SetMetaMemoryIndex 0.0% +github.com/thebtf/engram/internal/mcp/server.go:166: SetHintQueue 0.0% +github.com/thebtf/engram/internal/mcp/server.go:171: SetStateStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:176: SetDirectiveCaptureService 0.0% +github.com/thebtf/engram/internal/mcp/server.go:181: SetBehavioralRulesStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:186: SetRuleGovernanceStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:191: SetRuleInjectionTelemetryStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:195: SetPromotionStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:199: SetGraphStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:204: SetNodesStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:211: SetAuditStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:216: SetPurgeStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:222: SetCandidateStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:228: SetSnapshotStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:234: SetBulkFacade 0.0% +github.com/thebtf/engram/internal/mcp/server.go:240: setTestAuditWriter 0.0% +github.com/thebtf/engram/internal/mcp/server.go:246: setTestMemoryEditor 0.0% +github.com/thebtf/engram/internal/mcp/server.go:252: setTestMemorySignificanceUpdater 0.0% +github.com/thebtf/engram/internal/mcp/server.go:260: SetWriteLintOrchestrator 0.0% +github.com/thebtf/engram/internal/mcp/server.go:269: SetRedactionRules 0.0% +github.com/thebtf/engram/internal/mcp/server.go:274: SetEmbeddingStores 0.0% +github.com/thebtf/engram/internal/mcp/server.go:282: SetRerankClient 0.0% +github.com/thebtf/engram/internal/mcp/server.go:290: SetStatsDB 0.0% +github.com/thebtf/engram/internal/mcp/server.go:297: HandleRequest 0.0% +github.com/thebtf/engram/internal/mcp/server.go:303: ListTools 0.0% +github.com/thebtf/engram/internal/mcp/server.go:332: Version 0.0% +github.com/thebtf/engram/internal/mcp/server.go:383: Run 0.0% +github.com/thebtf/engram/internal/mcp/server.go:427: handleRequest 0.0% +github.com/thebtf/engram/internal/mcp/server.go:461: handleNotification 0.0% +github.com/thebtf/engram/internal/mcp/server.go:473: handleInitialize 0.0% +github.com/thebtf/engram/internal/mcp/server.go:496: buildInstructions 0.0% +github.com/thebtf/engram/internal/mcp/server.go:660: storeMemoryTool 0.0% +github.com/thebtf/engram/internal/mcp/server.go:712: recallMemoryTool 0.0% +github.com/thebtf/engram/internal/mcp/server.go:805: primaryTools 0.0% +github.com/thebtf/engram/internal/mcp/server.go:942: handleToolsList 0.0% +github.com/thebtf/engram/internal/mcp/server.go:1612: handleToolsCall 0.0% +github.com/thebtf/engram/internal/mcp/server.go:1644: sanitizeToolCallArgs 0.0% +github.com/thebtf/engram/internal/mcp/server.go:1656: callTool 0.0% +github.com/thebtf/engram/internal/mcp/server.go:1874: sendResponse 0.0% +github.com/thebtf/engram/internal/mcp/server.go:1884: sendError 0.0% +github.com/thebtf/engram/internal/mcp/server.go:1896: handleFindSimilarObservations 0.0% +github.com/thebtf/engram/internal/mcp/server.go:1927: handleGetMemoryStats 0.0% +github.com/thebtf/engram/internal/mcp/server.go:2055: handleBackfillStatus 0.0% +github.com/thebtf/engram/internal/mcp/server.go:2071: handleCheckSystemHealth 0.0% +github.com/thebtf/engram/internal/mcp/server.go:2216: handleAnalyzeSearchPatterns 0.0% +github.com/thebtf/engram/internal/mcp/server.go:2246: handleSearchSessions 0.0% +github.com/thebtf/engram/internal/mcp/server.go:2251: handleListSessions 0.0% +github.com/thebtf/engram/internal/mcp/tools_admin.go:18: buildAdminTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_admin.go:68: adminActionsForEnv 33.3% +github.com/thebtf/engram/internal/mcp/tools_admin.go:80: vnextEnabled 0.0% +github.com/thebtf/engram/internal/mcp/tools_admin.go:84: handleAdmin 0.0% +github.com/thebtf/engram/internal/mcp/tools_admin.go:120: handlePurgeProject 0.0% +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:27: ambientHintsEnabledFromEnv 0.0% +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:32: ambientHintsTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:48: handleGetAmbientHints 0.0% +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:86: normalizeAmbientHintsToolLimit 0.0% +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:96: ambientHintItems 0.0% +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:114: errMissingSessionID 0.0% +github.com/thebtf/engram/internal/mcp/tools_brief.go:31: handleGetMemoryBrief 0.0% +github.com/thebtf/engram/internal/mcp/tools_brief.go:107: memoryBriefUsesPrincipalScope 0.0% +github.com/thebtf/engram/internal/mcp/tools_brief.go:115: handlePrincipalMemoryBrief 0.0% +github.com/thebtf/engram/internal/mcp/tools_brief.go:259: truncateBriefContent 0.0% +github.com/thebtf/engram/internal/mcp/tools_brief.go:270: filterInjectionByScope 0.0% +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:25: bulkOpsTools 0.0% +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:95: handleBulkPromote 0.0% +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:154: handleBulkDelete 0.0% +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:211: handleBulkSupersede 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:31: candidateItemFromDomain 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:51: newCandidateReviewSnapshot 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:59: requireCandidateReviewSnapshot 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:68: candidateTools 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:165: handleListCandidates 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:208: handleGetCandidate 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:239: handlePromoteCandidate 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:348: handleRejectCandidate 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:402: handleSupersedeCandidate 0.0% +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:34: codeIntelEnabled 0.0% +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:42: SetCodeChunkStore 0.0% +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:48: codebaseSearchTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:79: codebaseStatusTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:100: handleCodebaseSearch 0.0% +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:194: handleCodebaseStatus 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:21: getVault 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:35: credentialStore 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:49: handleStoreCredential 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:130: handleGetCredential 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:192: handleListCredentials 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:243: handleDeleteCredential 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:302: handleVaultStatus 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:338: expandTagHierarchy 0.0% +github.com/thebtf/engram/internal/mcp/tools_directives.go:16: directivesCaptureEnabledFromEnv 0.0% +github.com/thebtf/engram/internal/mcp/tools_directives.go:20: rememberDirectiveTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_directives.go:38: currentDirectiveCaptureService 0.0% +github.com/thebtf/engram/internal/mcp/tools_directives.go:48: handleRememberDirective 0.0% +github.com/thebtf/engram/internal/mcp/tools_directives.go:72: parseRememberDirectiveArgs 0.0% +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:10: handleDocsConsolidated 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents.go:15: handleListCollections 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents.go:61: handleListDocuments 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents.go:121: handleGetDocument 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents.go:165: handleRemoveDocument 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents.go:197: handleIngestDocument 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents.go:235: handleSearchCollection 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:15: handleDocCreate 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:61: handleDocRead 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:117: handleDocUpdate 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:122: handleDocList 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:175: handleDocHistory 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:232: handleDocComment 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:19: SetExperienceProvider 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:23: experienceHistoryTools 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:40: experienceHistoryReadSchema 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:65: experienceHistoryDetailSchema 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:82: experienceHistoryTriggerEnum 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:91: handleExperienceHistoryRead 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:103: handleExperienceHistoryDetail 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:115: parseExperienceHistoryReadArgs 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:142: parseExperienceHistoryDetailArgs 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:157: experienceHistoryTriggersFromArgs 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:180: marshalExperienceHistory 0.0% +github.com/thebtf/engram/internal/mcp/tools_feedback.go:12: handleFeedbackConsolidated 0.0% +github.com/thebtf/engram/internal/mcp/tools_feedback.go:36: handleSetSessionOutcome 0.0% +github.com/thebtf/engram/internal/mcp/tools_governance.go:27: governanceTools 0.0% +github.com/thebtf/engram/internal/mcp/tools_governance.go:98: handleListSnapshots 0.0% +github.com/thebtf/engram/internal/mcp/tools_governance.go:167: handleRollbackSnapshot 0.0% +github.com/thebtf/engram/internal/mcp/tools_governance.go:215: handlePinSnapshot 0.0% +github.com/thebtf/engram/internal/mcp/tools_governance.go:258: handleRedactionRulesStatus 0.0% +github.com/thebtf/engram/internal/mcp/tools_governance.go:284: resolveGovernanceActor 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:64: handleGraph 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:100: graphAddEdge 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:216: mcpGraphEndpointExists 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:243: mcpGraphEdgeAlreadyExists 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:276: graphAddNode 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:317: graphRemoveEdge 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:332: graphGetEdges 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:397: filterEdgesByNodeType 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:457: graphTraverse 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:480: graphFindPath 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:502: graphSynonyms 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:23: graphCreateEdgeWithGuards 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:80: graphEndpointExistsWithGuards 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:114: graphDuplicateEdgeExists 0.0% +github.com/thebtf/engram/internal/mcp/tools_ingest.go:25: handleIngest 0.0% +github.com/thebtf/engram/internal/mcp/tools_ingest.go:43: ingestDocument 0.0% +github.com/thebtf/engram/internal/mcp/tools_instincts.go:20: handleImportInstincts 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:19: issuesToolSchema 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:109: validateIssueActionParams 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:143: handleIssues 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:189: resolveSourceProject 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:205: handleIssueCreate 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:250: handleIssueList 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:311: handleIssueGet 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:344: handleIssueUpdate 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:382: handleIssueComment 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:408: handleIssueReopen 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:425: handleIssueClose 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:22: handleLifecycle 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:48: lifecycleInfo 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:87: lifecyclePromote 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:118: lifecycleDemote 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:149: lifecycleSetConfidence 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:172: lifecycleSetDefeasibility 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:191: lifecycleSleepStatus 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:197: lifecycleDecayPreview 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:233: marshalJSON 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:35: vnextFEnabled 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:42: isValidPrivacyScope 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:54: derivePrivacyScopeFromLegacy 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:82: deriveLegacyScopeFromPrivacy 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:93: applyPrincipalMemoryMetadata 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:135: addPrincipalMemoryFields 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:161: newScopedWriteLintMemoryStore 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:172: writeLintVisibilityCaller 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:186: writeLintVisibilityOptions 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:192: scopedWriteLintMemoryStore 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:202: filterVisibleWriteGateCandidates 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:214: domainManageAllowed 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:218: List 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:272: writeLintVisibilityFetchLimit 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:286: Get 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:297: Create 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:301: Update 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:305: MarkSuperseded 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:319: effectiveMemoryEditor 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:329: isValidStoreObservationType 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:354: handleStoreMemory 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1111: handleEditMemory 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1218: computeTTLDays 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1258: truncateTitle 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1270: keepRecallMemory 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1280: keepRecallMemoryFilters 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1342: handleRecallMemory 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1690: staleAdvisory 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1700: marshalWithStaleAdvisory 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1727: Rank 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1751: handleRecallMemoryHybrid 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:2252: handleRateMemory 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:2281: handleSuppressMemory 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:17: SetDomainRegistryService 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:21: checkDomainWriteMCP 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:43: addDomainWriteDecisionFields 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:51: marshalStoreMemoryAugmented 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:26: newMemoryStoreSignificanceUpdater 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:33: s6OutcomeEnabledFromEnv 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:37: effectiveMemorySignificanceUpdater 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:47: currentMemorySignificanceUpdater 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:58: rateMemorySignificanceTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:74: handleRateMemorySignificance 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:109: RateMemorySignificance 0.0% +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:18: s2MetaMemoryEnabled 0.0% +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:22: knowAboutTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:39: handleKnowAbout 0.0% +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:104: parseKnowAboutLimit 0.0% +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:118: summarizeMetaIndexTags 0.0% +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:153: summarizeMetaIndexDateRange 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:23: SetPrincipalMemoryQueryService 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:27: principalMemoryQueryTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:52: handleQueryPrincipalMemory 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:134: principalMemoryQueryCaller 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:149: parsePrincipalMemoryQueryLimit 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:160: principalMemoryQueryText 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:167: parsePrincipalMemoryQueryVisibility 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:179: parsePrincipalMemoryQueryOffset 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:190: parsePrincipalMemoryQueryInt 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:215: parsePrincipalMemoryQueryBool 0.0% +github.com/thebtf/engram/internal/mcp/tools_recall.go:28: handleRecall 0.0% +github.com/thebtf/engram/internal/mcp/tools_recall.go:125: parseRecallIncludedPrincipals 0.0% +github.com/thebtf/engram/internal/mcp/tools_recall.go:165: appendRecallIncludedPrincipalMemories 0.0% +github.com/thebtf/engram/internal/mcp/tools_recall.go:223: recallIncludeTargetMatchesCaller 0.0% +github.com/thebtf/engram/internal/mcp/tools_recall.go:231: recallPrincipalQueryItemToMemory 0.0% +github.com/thebtf/engram/internal/mcp/tools_recall.go:247: handleRecallSearch 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:20: currentReviewLoopCandidateLister 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:30: reviewLoopCandidateTools 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:65: reviewLoopReadSchema 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:78: reviewPacketIDSchema 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:91: handleReviewMetricsRead 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:110: handleReviewQueueRead 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:140: handleReviewPacketDetail 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:151: handleReviewPacketPreviewAction 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:167: handleReviewPacketApplyAction 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:189: parseReviewLoopReadArgs 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:212: reviewLoopMCPPacketTypeSupported 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:217: reviewLoopActionFromArgs 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:225: reviewLoopReasonFromArgs 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:233: loadReviewPacketCandidate 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:256: applyReviewPacketPreserve 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:278: applyReviewPacketSuppress 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:296: reviewLoopMemoryFromCandidate 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:320: filterRiskyMCPReviewCandidates 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:330: marshalReviewLoop 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:17: ruleGovernanceReadTools 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:126: handleRuleGovernanceHealth 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:176: handleRuleGovernanceQueue 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:233: handleRuleGovernanceSnapshots 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:278: handleRuleGovernanceUsefulness 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:338: handleRuleGovernanceTransition 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:373: handleRuleGovernancePinSnapshot 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:406: handleRuleGovernanceRollback 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:483: requireRuleGovernanceReadAccess 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:495: requireRuleGovernanceProjectOrAdmin 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:505: ruleGovernanceCallerIsAdmin 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:510: requireRuleGovernanceAdminAccess 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:518: redactRuleGovernanceEvidenceHandles 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:535: redactRuleGovernanceEvidenceHandle 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:553: ruleGovernanceEvidenceHandleHasSensitiveText 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:559: isCanonicalRuleGovernanceEvidenceHandle 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:580: isSafeRuleGovernanceEvidenceID 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:594: parseRuleGovernanceTransitionRequest 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:604: parseRuleGovernanceSince 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:623: boundedRuleGovernanceLimit 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:634: formatRuleGovernanceTime 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:641: formatRuleGovernanceTimePtr 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:649: stringRuleCandidateStatusCounts 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:657: stringRuleVersionStateCounts 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:665: stringRuleArbiterRunStatusCounts 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:673: stringRuleInjectionEventTypeCounts 0.0% +github.com/thebtf/engram/internal/mcp/tools_rules.go:17: handleStoreRule 0.0% +github.com/thebtf/engram/internal/mcp/tools_rules.go:133: handleListRules 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:22: handleSettingsConsolidated 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:51: SetSettingsStore 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:57: settingsStore 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:67: isSecretSettingKey 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:74: requireAdmin 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:85: handleSetSetting 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:145: handleGetSetting 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:181: handleListSettings 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:216: handleDeleteSetting 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:35: resumeScopesFromFields 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:52: stateTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:82: setStateTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:142: handleGetState 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:219: handleSetState 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:274: decodeSessionStateForWrite 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:292: validateSessionStateBudget 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:303: validateNativeResumePacket 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:349: decodeProjectStateForWrite 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:364: requireStateObject 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:383: requireNestedObject 0.0% +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:10: handleStoreConsolidated 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:21: SetTemporalTruthProvider 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:25: temporalTruthEnabledFromEnv 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:30: temporalTruthTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:39: temporalTruthRefreshTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:48: temporalTruthRefreshSchema 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:58: temporalTruthSchema 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:72: currentTemporalTruthProvider 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:82: handleTemporalTruth 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:102: handleTemporalTruthRefresh 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:122: parseTemporalTruthArgs 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:151: parseTemporalTruthRefreshProject 0.0% +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:10: handleVaultConsolidated 0.0% +total: (statements) 0.1% diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/summary.json b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/summary.json new file mode 100644 index 00000000..f6ff56f7 --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/focused-repeat3/summary.json @@ -0,0 +1,130 @@ +{ + "schema_version": 1, + "gate": "release-gates-foundation", + "run_id": "focused-repeat3", + "started_at": "2026-07-11T00:53:21.3539664+00:00", + "finished_at": "2026-07-11T00:54:19.5475266+00:00", + "duration_seconds": 58.194, + "verdict": "PASS", + "counts": { + "requested_repeats": 3, + "completed_repeats": 3, + "passed_repeats": 3, + "failed_repeats": 0, + "child_commands": 42, + "nonzero_child_commands": 0 + }, + "packages": [ + "./internal/mcp" + ], + "run_pattern": "^TestEC_F1_TagDerivedBackfill_T007$", + "coverage_policy": "Targeted", + "connection_budget": 20, + "race": false, + "database_dsn": "REDACTED_DATABASE_DSN", + "environment": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-repeat3\\environment.json", + "commands": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-repeat3\\commands.json", + "repeats": [ + { + "repeat": 1, + "verdict": "PASS", + "database": "engram_prc_rg_test_08822acc1e43ac35_r1", + "schema": "public", + "database_schema_identity": "engram_prc_rg_test_08822acc1e43ac35_r1.public", + "database_dsn": "REDACTED_DATABASE_DSN", + "database_create_confirmed": true, + "sequential_execution": { + "package_parallelism": 1, + "test_parallelism": 1 + }, + "race": false, + "connection_budget": 20, + "server_sessions_before": 6, + "server_sessions_after": 6, + "sessions_before": 0, + "sessions_after": 0, + "go_test_exit": 0, + "json_parser_exit": 0, + "coverage_policy": "Targeted", + "coverage_exit": 0, + "cleanup_exit": 0, + "cleanup_status": "PASS", + "required_session_start_execution": { + "schema_version": 1, + "verdict": "NOT_APPLICABLE", + "reason": "only an unfiltered canonical ./... run requires the 12-test session-start execution proof" + }, + "cleanup_summary": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-repeat3\\repeat-01\\cleanup\\cleanup.json", + "errors": [], + "artifact_directory": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-repeat3\\repeat-01" + }, + { + "repeat": 2, + "verdict": "PASS", + "database": "engram_prc_rg_test_08822acc1e43ac35_r2", + "schema": "public", + "database_schema_identity": "engram_prc_rg_test_08822acc1e43ac35_r2.public", + "database_dsn": "REDACTED_DATABASE_DSN", + "database_create_confirmed": true, + "sequential_execution": { + "package_parallelism": 1, + "test_parallelism": 1 + }, + "race": false, + "connection_budget": 20, + "server_sessions_before": 6, + "server_sessions_after": 6, + "sessions_before": 0, + "sessions_after": 0, + "go_test_exit": 0, + "json_parser_exit": 0, + "coverage_policy": "Targeted", + "coverage_exit": 0, + "cleanup_exit": 0, + "cleanup_status": "PASS", + "required_session_start_execution": { + "schema_version": 1, + "verdict": "NOT_APPLICABLE", + "reason": "only an unfiltered canonical ./... run requires the 12-test session-start execution proof" + }, + "cleanup_summary": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-repeat3\\repeat-02\\cleanup\\cleanup.json", + "errors": [], + "artifact_directory": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-repeat3\\repeat-02" + }, + { + "repeat": 3, + "verdict": "PASS", + "database": "engram_prc_rg_test_08822acc1e43ac35_r3", + "schema": "public", + "database_schema_identity": "engram_prc_rg_test_08822acc1e43ac35_r3.public", + "database_dsn": "REDACTED_DATABASE_DSN", + "database_create_confirmed": true, + "sequential_execution": { + "package_parallelism": 1, + "test_parallelism": 1 + }, + "race": false, + "connection_budget": 20, + "server_sessions_before": 6, + "server_sessions_after": 6, + "sessions_before": 0, + "sessions_after": 0, + "go_test_exit": 0, + "json_parser_exit": 0, + "coverage_policy": "Targeted", + "coverage_exit": 0, + "cleanup_exit": 0, + "cleanup_status": "PASS", + "required_session_start_execution": { + "schema_version": 1, + "verdict": "NOT_APPLICABLE", + "reason": "only an unfiltered canonical ./... run requires the 12-test session-start execution proof" + }, + "cleanup_summary": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-repeat3\\repeat-03\\cleanup\\cleanup.json", + "errors": [], + "artifact_directory": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-repeat3\\repeat-03" + } + ], + "errors": [], + "artifact_directory": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\focused-repeat3" +} diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/commands.json b/.agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/commands.json new file mode 100644 index 00000000..e91dab3d --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/commands.json @@ -0,0 +1,442 @@ +[ + { + "name": "go-version", + "executable": "C:\\Program Files\\Go\\bin\\go.exe", + "arguments": [ + "version" + ], + "environment_keys": [], + "command": "C:\\Program Files\\Go\\bin\\go.exe version", + "started_at": "2026-07-11T01:02:00.3891913+00:00", + "finished_at": "2026-07-11T01:02:00.5894289+00:00", + "duration_seconds": 0.2, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\full-internal-mcp\\go-version.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\full-internal-mcp\\go-version.stderr.log" + }, + { + "name": "postgres-container-identity", + "executable": "docker", + "arguments": [ + "inspect", + "--format", + "{{.Name}}|{{.Config.Image}}|{{.Image}}|{{.State.Running}}", + "engram-prc-postgres" + ], + "environment_keys": [], + "command": "docker inspect --format {{.Name}}|{{.Config.Image}}|{{.Image}}|{{.State.Running}} engram-prc-postgres", + "started_at": "2026-07-11T01:02:00.6428395+00:00", + "finished_at": "2026-07-11T01:02:00.8982668+00:00", + "duration_seconds": 0.255, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\full-internal-mcp\\postgres-container-identity.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\full-internal-mcp\\postgres-container-identity.stderr.log" + }, + { + "name": "postgres-server-identity", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT json_build_object('server_version', current_setting('server_version'), 'server_version_num', current_setting('server_version_num'), 'version', version(), 'max_connections', current_setting('max_connections'), 'superuser_reserved_connections', current_setting('superuser_reserved_connections'), 'reserved_connections', COALESCE(NULLIF(current_setting('reserved_connections', true), ''), '0'), 'current_connections', (SELECT count(*)::text FROM pg_stat_activity), 'database', current_database(), 'schema', current_schema(), 'user', current_user)::text;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT json_build_object('server_version', current_setting('server_version'), 'server_version_num', current_setting('server_version_num'), 'version', version(), 'max_connections', current_setting('max_connections'), 'superuser_reserved_connections', current_setting('superuser_reserved_connections'), 'reserved_connections', COALESCE(NULLIF(current_setting('reserved_connections', true), ''), '0'), 'current_connections', (SELECT count(*)::text FROM pg_stat_activity), 'database', current_database(), 'schema', current_schema(), 'user', current_user)::text;", + "started_at": "2026-07-11T01:02:00.9081067+00:00", + "finished_at": "2026-07-11T01:02:01.2594779+00:00", + "duration_seconds": 0.351, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\full-internal-mcp\\postgres-server-identity.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\full-internal-mcp\\postgres-server-identity.stderr.log" + }, + { + "name": "repeat-1-create-database", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "CREATE DATABASE \"engram_prc_rg_test_88e43617e8051e79_r1\" OWNER \"engram\";" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c CREATE DATABASE \"engram_prc_rg_test_88e43617e8051e79_r1\" OWNER \"engram\";", + "started_at": "2026-07-11T01:02:01.2885731+00:00", + "finished_at": "2026-07-11T01:02:01.6532159+00:00", + "duration_seconds": 0.365, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\full-internal-mcp\\repeat-01\\create-database.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\full-internal-mcp\\repeat-01\\create-database.stderr.log" + }, + { + "name": "repeat-1-create-pgvector", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "engram_prc_rg_test_88e43617e8051e79_r1", + "-At", + "-F", + "|", + "-c", + "CREATE EXTENSION IF NOT EXISTS vector WITH SCHEMA public;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d engram_prc_rg_test_88e43617e8051e79_r1 -At -F | -c CREATE EXTENSION IF NOT EXISTS vector WITH SCHEMA public;", + "started_at": "2026-07-11T01:02:01.6571241+00:00", + "finished_at": "2026-07-11T01:02:02.0159646+00:00", + "duration_seconds": 0.359, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\full-internal-mcp\\repeat-01\\create-pgvector.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\full-internal-mcp\\repeat-01\\create-pgvector.stderr.log" + }, + { + "name": "repeat-1-database-identity", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "engram_prc_rg_test_88e43617e8051e79_r1", + "-At", + "-F", + "|", + "-c", + "SELECT json_build_object('database', current_database(), 'schema', current_schema(), 'server_version', current_setting('server_version'), 'user', current_user)::text;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d engram_prc_rg_test_88e43617e8051e79_r1 -At -F | -c SELECT json_build_object('database', current_database(), 'schema', current_schema(), 'server_version', current_setting('server_version'), 'user', current_user)::text;", + "started_at": "2026-07-11T01:02:02.0194773+00:00", + "finished_at": "2026-07-11T01:02:02.3784811+00:00", + "duration_seconds": 0.359, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\full-internal-mcp\\repeat-01\\database-identity.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\full-internal-mcp\\repeat-01\\database-identity.stderr.log" + }, + { + "name": "repeat-1-pg-stat-before", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT COALESCE(json_agg(row_to_json(s)), '[]'::json)::text FROM (SELECT pid, usename, datname, state, backend_type, application_name, client_addr::text AS client_addr, wait_event_type, wait_event, query_start FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_88e43617e8051e79_r1' ORDER BY pid) AS s;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT COALESCE(json_agg(row_to_json(s)), '[]'::json)::text FROM (SELECT pid, usename, datname, state, backend_type, application_name, client_addr::text AS client_addr, wait_event_type, wait_event, query_start FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_88e43617e8051e79_r1' ORDER BY pid) AS s;", + "started_at": "2026-07-11T01:02:02.3829230+00:00", + "finished_at": "2026-07-11T01:02:02.8181079+00:00", + "duration_seconds": 0.435, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\full-internal-mcp\\repeat-01\\pg-stat-activity-before.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\full-internal-mcp\\repeat-01\\pg-stat-activity-before.stderr.log" + }, + { + "name": "repeat-1-server-connection-count-before", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT count(*) FROM pg_stat_activity;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT count(*) FROM pg_stat_activity;", + "started_at": "2026-07-11T01:02:02.8208925+00:00", + "finished_at": "2026-07-11T01:02:03.1596684+00:00", + "duration_seconds": 0.339, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\full-internal-mcp\\repeat-01\\server-connection-count-before.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\full-internal-mcp\\repeat-01\\server-connection-count-before.stderr.log" + }, + { + "name": "repeat-1-connection-count-before", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT count(*) FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_88e43617e8051e79_r1';" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT count(*) FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_88e43617e8051e79_r1';", + "started_at": "2026-07-11T01:02:03.1685837+00:00", + "finished_at": "2026-07-11T01:02:03.5095873+00:00", + "duration_seconds": 0.341, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\full-internal-mcp\\repeat-01\\connection-count-before.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\full-internal-mcp\\repeat-01\\connection-count-before.stderr.log" + }, + { + "name": "repeat-1-go-test", + "executable": "C:\\Program Files\\Go\\bin\\go.exe", + "arguments": [ + "test", + "-json", + "-p", + "1", + "-parallel", + "1", + "-count=1", + "-timeout", + "30m", + "-covermode=atomic", + "-coverprofile=.agent\\reviews\\t007-r1-fresh-checker\\evidence\\full-internal-mcp\\repeat-01\\coverage.out", + "./internal/mcp" + ], + "environment_keys": [ + "DATABASE_DSN", + "DATABASE_MAX_CONNS", + "ENGRAM_RELEASE_GATE_REPEAT", + "ENGRAM_RELEASE_GATE_RUN_ID", + "ENGRAM_TEST_DSN", + "TEST_DATABASE_DSN" + ], + "command": "C:\\Program Files\\Go\\bin\\go.exe test -json -p 1 -parallel 1 -count=1 -timeout 30m -covermode=atomic -coverprofile=.agent\\reviews\\t007-r1-fresh-checker\\evidence\\full-internal-mcp\\repeat-01\\coverage.out ./internal/mcp", + "started_at": "2026-07-11T01:02:03.5156798+00:00", + "finished_at": "2026-07-11T01:02:14.2457522+00:00", + "duration_seconds": 10.73, + "exit_code": 1, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\full-internal-mcp\\repeat-01\\go-test.stdout.jsonl", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\full-internal-mcp\\repeat-01\\go-test.stderr.log" + }, + { + "name": "repeat-1-assert-go-test-json", + "executable": "C:\\Program Files\\PowerShell\\7\\pwsh.exe", + "arguments": [ + "-NoProfile", + "-File", + "D:\\Dev\\engram\\.w\\t007-r1-checker\\scripts\\production-gates\\assert-go-test-json.ps1", + "-InputPath", + ".agent\\reviews\\t007-r1-fresh-checker\\evidence\\full-internal-mcp\\repeat-01\\go-test.stdout.jsonl", + "-SummaryPath", + ".agent\\reviews\\t007-r1-fresh-checker\\evidence\\full-internal-mcp\\repeat-01\\go-test-summary.json", + "-FailOnUnexpectedSkip" + ], + "environment_keys": [], + "command": "C:\\Program Files\\PowerShell\\7\\pwsh.exe -NoProfile -File D:\\Dev\\engram\\.w\\t007-r1-checker\\scripts\\production-gates\\assert-go-test-json.ps1 -InputPath .agent\\reviews\\t007-r1-fresh-checker\\evidence\\full-internal-mcp\\repeat-01\\go-test.stdout.jsonl -SummaryPath .agent\\reviews\\t007-r1-fresh-checker\\evidence\\full-internal-mcp\\repeat-01\\go-test-summary.json -FailOnUnexpectedSkip", + "started_at": "2026-07-11T01:02:14.2511010+00:00", + "finished_at": "2026-07-11T01:02:15.2771962+00:00", + "duration_seconds": 1.026, + "exit_code": 1, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\full-internal-mcp\\repeat-01\\assert-go-test-json.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\full-internal-mcp\\repeat-01\\assert-go-test-json.stderr.log" + }, + { + "name": "repeat-1-targeted-coverage-report", + "executable": "C:\\Program Files\\Go\\bin\\go.exe", + "arguments": [ + "tool", + "cover", + "-func=.agent\\reviews\\t007-r1-fresh-checker\\evidence\\full-internal-mcp\\repeat-01\\coverage.out" + ], + "environment_keys": [], + "command": "C:\\Program Files\\Go\\bin\\go.exe tool cover -func=.agent\\reviews\\t007-r1-fresh-checker\\evidence\\full-internal-mcp\\repeat-01\\coverage.out", + "started_at": "2026-07-11T01:02:15.2816932+00:00", + "finished_at": "2026-07-11T01:02:15.7343919+00:00", + "duration_seconds": 0.453, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\full-internal-mcp\\repeat-01\\targeted-coverage.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\full-internal-mcp\\repeat-01\\targeted-coverage.stderr.log" + }, + { + "name": "repeat-1-pg-stat-after", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT COALESCE(json_agg(row_to_json(s)), '[]'::json)::text FROM (SELECT pid, usename, datname, state, backend_type, application_name, client_addr::text AS client_addr, wait_event_type, wait_event, query_start FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_88e43617e8051e79_r1' ORDER BY pid) AS s;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT COALESCE(json_agg(row_to_json(s)), '[]'::json)::text FROM (SELECT pid, usename, datname, state, backend_type, application_name, client_addr::text AS client_addr, wait_event_type, wait_event, query_start FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_88e43617e8051e79_r1' ORDER BY pid) AS s;", + "started_at": "2026-07-11T01:02:15.7351348+00:00", + "finished_at": "2026-07-11T01:02:16.0697574+00:00", + "duration_seconds": 0.335, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\full-internal-mcp\\repeat-01\\pg-stat-activity-after.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\full-internal-mcp\\repeat-01\\pg-stat-activity-after.stderr.log" + }, + { + "name": "repeat-1-server-connection-count-after", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT count(*) FROM pg_stat_activity;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT count(*) FROM pg_stat_activity;", + "started_at": "2026-07-11T01:02:16.0716276+00:00", + "finished_at": "2026-07-11T01:02:16.4887494+00:00", + "duration_seconds": 0.417, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\full-internal-mcp\\repeat-01\\server-connection-count-after.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\full-internal-mcp\\repeat-01\\server-connection-count-after.stderr.log" + }, + { + "name": "repeat-1-connection-count-after", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT count(*) FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_88e43617e8051e79_r1';" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT count(*) FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_88e43617e8051e79_r1';", + "started_at": "2026-07-11T01:02:16.4908871+00:00", + "finished_at": "2026-07-11T01:02:16.9744450+00:00", + "duration_seconds": 0.484, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\full-internal-mcp\\repeat-01\\connection-count-after.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\full-internal-mcp\\repeat-01\\connection-count-after.stderr.log" + }, + { + "name": "repeat-1-cleanup", + "executable": "C:\\Program Files\\PowerShell\\7\\pwsh.exe", + "arguments": [ + "-NoProfile", + "-File", + "D:\\Dev\\engram\\.w\\t007-r1-checker\\scripts\\production-gates\\cleanup-db-sessions.ps1", + "-DatabaseName", + "engram_prc_rg_test_88e43617e8051e79_r1", + "-SchemaName", + "public", + "-ArtifactRoot", + ".agent\\reviews\\t007-r1-fresh-checker\\evidence\\full-internal-mcp\\repeat-01", + "-RunId", + "full-internal-mcp-repeat-1", + "-PostgresContainer", + "engram-prc-postgres" + ], + "environment_keys": [ + "ENGRAM_TEST_ADMIN_DSN" + ], + "command": "C:\\Program Files\\PowerShell\\7\\pwsh.exe -NoProfile -File D:\\Dev\\engram\\.w\\t007-r1-checker\\scripts\\production-gates\\cleanup-db-sessions.ps1 -DatabaseName engram_prc_rg_test_88e43617e8051e79_r1 -SchemaName public -ArtifactRoot .agent\\reviews\\t007-r1-fresh-checker\\evidence\\full-internal-mcp\\repeat-01 -RunId full-internal-mcp-repeat-1 -PostgresContainer engram-prc-postgres", + "started_at": "2026-07-11T01:02:16.9778521+00:00", + "finished_at": "2026-07-11T01:02:19.8372961+00:00", + "duration_seconds": 2.859, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\full-internal-mcp\\repeat-01\\cleanup-process.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\full-internal-mcp\\repeat-01\\cleanup-process.stderr.log" + } +] diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/environment.json b/.agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/environment.json new file mode 100644 index 00000000..06f4cc4a --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/environment.json @@ -0,0 +1,52 @@ +{ + "schema_version": 1, + "run_id": "full-internal-mcp", + "timestamp": "2026-07-11T01:02:00.3724722+00:00", + "go_version": "go version go1.25.11 windows/amd64", + "postgres": { + "declared_image": "pgvector/pgvector:pg17", + "container": { + "name": "/engram-prc-postgres", + "configured_image": "pgvector/pgvector:pg17", + "image_id": "sha256:feb68f4f15446397d8cac7f4fe48fe4586de83160d1fc48b46283312d1a33966", + "running": true + }, + "server": { + "server_version": "17.10 (Debian 17.10-1.pgdg12+1)", + "server_version_num": "170010", + "version": "PostgreSQL 17.10 (Debian 17.10-1.pgdg12+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 12.2.0-14+deb12u1) 12.2.0, 64-bit", + "max_connections": "100", + "superuser_reserved_connections": "3", + "reserved_connections": "0", + "current_connections": "6", + "database": "postgres", + "schema": "public", + "user": "engram" + }, + "admin_dsn": "postgresql://engram:REDACTED@127.0.0.1:55432/postgres?sslmode=disable" + }, + "packages": [ + "./internal/mcp" + ], + "run_pattern": null, + "repeat": 1, + "fail_on_unexpected_skip": true, + "allowed_skip_identities": [], + "coverage_policy": "Targeted", + "connection_budget": 20, + "race": false, + "require_session_start_execution": false, + "required_session_start_test_count": 12, + "sequential_execution": { + "go_package_parallelism": 1, + "go_test_parallelism": 1, + "database_max_connections": 20 + }, + "govulncheck_policy": { + "authoritative": [ + "source scan with tests", + "unstripped binary scan" + ], + "non_authoritative": "stripped binary scan (module-level fallback when symbols are absent)" + } +} diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/go-version.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/go-version.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/go-version.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/go-version.stdout.log new file mode 100644 index 00000000..a857be3f --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/go-version.stdout.log @@ -0,0 +1 @@ +go version go1.25.11 windows/amd64 diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/postgres-container-identity.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/postgres-container-identity.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/postgres-container-identity.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/postgres-container-identity.stdout.log new file mode 100644 index 00000000..c110d492 --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/postgres-container-identity.stdout.log @@ -0,0 +1 @@ +/engram-prc-postgres|pgvector/pgvector:pg17|sha256:feb68f4f15446397d8cac7f4fe48fe4586de83160d1fc48b46283312d1a33966|true diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/postgres-server-identity.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/postgres-server-identity.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/postgres-server-identity.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/postgres-server-identity.stdout.log new file mode 100644 index 00000000..2e33d56e --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/postgres-server-identity.stdout.log @@ -0,0 +1 @@ +{"server_version" : "17.10 (Debian 17.10-1.pgdg12+1)", "server_version_num" : "170010", "version" : "PostgreSQL 17.10 (Debian 17.10-1.pgdg12+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 12.2.0-14+deb12u1) 12.2.0, 64-bit", "max_connections" : "100", "superuser_reserved_connections" : "3", "reserved_connections" : "0", "current_connections" : "6", "database" : "postgres", "schema" : "public", "user" : "engram"} diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/repeat-01/assert-go-test-json.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/repeat-01/assert-go-test-json.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/repeat-01/assert-go-test-json.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/repeat-01/assert-go-test-json.stdout.log new file mode 100644 index 00000000..5283dabe --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/repeat-01/assert-go-test-json.stdout.log @@ -0,0 +1,2 @@ +go test JSON verdict=FAIL packages=1 tests=488 passed=487 failed=1 skipped=0 unexpected_skips=0 malformed=0 +summary=D:\Dev\engram\.w\t007-r1-checker\.agent\reviews\t007-r1-fresh-checker\evidence\full-internal-mcp\repeat-01\go-test-summary.json diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/repeat-01/cleanup-process.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/repeat-01/cleanup-process.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/repeat-01/cleanup-process.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/repeat-01/cleanup-process.stdout.log new file mode 100644 index 00000000..10ec36f4 --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/repeat-01/cleanup-process.stdout.log @@ -0,0 +1,2 @@ +cleanup verdict=PASS database=engram_prc_rg_test_88e43617e8051e79_r1 schema=public terminated_sessions=0 remaining_database_count=0 +summary=D:\Dev\engram\.w\t007-r1-checker\.agent\reviews\t007-r1-fresh-checker\evidence\full-internal-mcp\repeat-01\cleanup\cleanup.json diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/repeat-01/cleanup/cleanup.json b/.agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/repeat-01/cleanup/cleanup.json new file mode 100644 index 00000000..13314491 --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/repeat-01/cleanup/cleanup.json @@ -0,0 +1,170 @@ +{ + "schema_version": 1, + "run_id": "full-internal-mcp-repeat-1", + "timestamp": "2026-07-11T01:02:19.7545404+00:00", + "verdict": "PASS", + "database": "engram_prc_rg_test_88e43617e8051e79_r1", + "schema": "public", + "database_schema_identity": "engram_prc_rg_test_88e43617e8051e79_r1.public", + "admin_dsn": "postgresql://engram:REDACTED@127.0.0.1:55432/postgres?sslmode=disable", + "postgres_container": "engram-prc-postgres", + "cleanup_status": "PASS", + "cleanup_attempted": true, + "database_existed_before": true, + "absence_verified": true, + "terminated_sessions": 0, + "remaining_database_count": 0, + "commands": [ + { + "name": "database-exists-before-cleanup", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT count(*) FROM pg_database WHERE datname = 'engram_prc_rg_test_88e43617e8051e79_r1';" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT count(*) FROM pg_database WHERE datname = 'engram_prc_rg_test_88e43617e8051e79_r1';", + "started_at": "2026-07-11T01:02:17.5403113+00:00", + "finished_at": "2026-07-11T01:02:17.9481308+00:00", + "duration_seconds": 0.408, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\full-internal-mcp\\repeat-01\\cleanup\\database-exists-before.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\full-internal-mcp\\repeat-01\\cleanup\\database-exists-before.stderr.log" + }, + { + "name": "pg-stat-activity-before-cleanup", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT COALESCE(json_agg(row_to_json(s)), '[]'::json)::text FROM (SELECT pid, usename, datname, state, backend_type, application_name, client_addr::text AS client_addr, wait_event_type, wait_event, query_start FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_88e43617e8051e79_r1' ORDER BY pid) AS s;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT COALESCE(json_agg(row_to_json(s)), '[]'::json)::text FROM (SELECT pid, usename, datname, state, backend_type, application_name, client_addr::text AS client_addr, wait_event_type, wait_event, query_start FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_88e43617e8051e79_r1' ORDER BY pid) AS s;", + "started_at": "2026-07-11T01:02:18.0281158+00:00", + "finished_at": "2026-07-11T01:02:18.4496706+00:00", + "duration_seconds": 0.422, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\full-internal-mcp\\repeat-01\\cleanup\\pg-stat-activity-before.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\full-internal-mcp\\repeat-01\\cleanup\\pg-stat-activity-before.stderr.log" + }, + { + "name": "terminate-database-sessions", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT COALESCE(json_agg(row_to_json(s)), '[]'::json)::text FROM (SELECT pid, pg_terminate_backend(pid) AS terminated FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_88e43617e8051e79_r1' AND pid <> pg_backend_pid() ORDER BY pid) AS s;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT COALESCE(json_agg(row_to_json(s)), '[]'::json)::text FROM (SELECT pid, pg_terminate_backend(pid) AS terminated FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_88e43617e8051e79_r1' AND pid <> pg_backend_pid() ORDER BY pid) AS s;", + "started_at": "2026-07-11T01:02:18.4538834+00:00", + "finished_at": "2026-07-11T01:02:18.8107291+00:00", + "duration_seconds": 0.357, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\full-internal-mcp\\repeat-01\\cleanup\\terminate-sessions.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\full-internal-mcp\\repeat-01\\cleanup\\terminate-sessions.stderr.log" + }, + { + "name": "drop-fresh-database", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "DROP DATABASE IF EXISTS \"engram_prc_rg_test_88e43617e8051e79_r1\" WITH (FORCE);" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c DROP DATABASE IF EXISTS \"engram_prc_rg_test_88e43617e8051e79_r1\" WITH (FORCE);", + "started_at": "2026-07-11T01:02:18.8192713+00:00", + "finished_at": "2026-07-11T01:02:19.3929293+00:00", + "duration_seconds": 0.574, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\full-internal-mcp\\repeat-01\\cleanup\\drop-database.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\full-internal-mcp\\repeat-01\\cleanup\\drop-database.stderr.log" + }, + { + "name": "verify-database-absent", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT count(*) FROM pg_database WHERE datname = 'engram_prc_rg_test_88e43617e8051e79_r1';" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT count(*) FROM pg_database WHERE datname = 'engram_prc_rg_test_88e43617e8051e79_r1';", + "started_at": "2026-07-11T01:02:19.3964684+00:00", + "finished_at": "2026-07-11T01:02:19.7472744+00:00", + "duration_seconds": 0.351, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\full-internal-mcp\\repeat-01\\cleanup\\verify-database-absent.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\full-internal-mcp\\repeat-01\\cleanup\\verify-database-absent.stderr.log" + } + ], + "errors": [] +} diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/repeat-01/cleanup/database-exists-before.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/repeat-01/cleanup/database-exists-before.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/repeat-01/cleanup/database-exists-before.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/repeat-01/cleanup/database-exists-before.stdout.log new file mode 100644 index 00000000..d00491fd --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/repeat-01/cleanup/database-exists-before.stdout.log @@ -0,0 +1 @@ +1 diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/repeat-01/cleanup/drop-database.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/repeat-01/cleanup/drop-database.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/repeat-01/cleanup/drop-database.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/repeat-01/cleanup/drop-database.stdout.log new file mode 100644 index 00000000..ca12dce0 --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/repeat-01/cleanup/drop-database.stdout.log @@ -0,0 +1 @@ +DROP DATABASE diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/repeat-01/cleanup/pg-stat-activity-before.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/repeat-01/cleanup/pg-stat-activity-before.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/repeat-01/cleanup/pg-stat-activity-before.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/repeat-01/cleanup/pg-stat-activity-before.stdout.log new file mode 100644 index 00000000..fe51488c --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/repeat-01/cleanup/pg-stat-activity-before.stdout.log @@ -0,0 +1 @@ +[] diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/repeat-01/cleanup/terminate-sessions.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/repeat-01/cleanup/terminate-sessions.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/repeat-01/cleanup/terminate-sessions.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/repeat-01/cleanup/terminate-sessions.stdout.log new file mode 100644 index 00000000..fe51488c --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/repeat-01/cleanup/terminate-sessions.stdout.log @@ -0,0 +1 @@ +[] diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/repeat-01/cleanup/verify-database-absent.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/repeat-01/cleanup/verify-database-absent.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/repeat-01/cleanup/verify-database-absent.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/repeat-01/cleanup/verify-database-absent.stdout.log new file mode 100644 index 00000000..573541ac --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/repeat-01/cleanup/verify-database-absent.stdout.log @@ -0,0 +1 @@ +0 diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/repeat-01/connection-count-after.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/repeat-01/connection-count-after.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/repeat-01/connection-count-after.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/repeat-01/connection-count-after.stdout.log new file mode 100644 index 00000000..573541ac --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/repeat-01/connection-count-after.stdout.log @@ -0,0 +1 @@ +0 diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/repeat-01/connection-count-before.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/repeat-01/connection-count-before.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/repeat-01/connection-count-before.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/repeat-01/connection-count-before.stdout.log new file mode 100644 index 00000000..573541ac --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/repeat-01/connection-count-before.stdout.log @@ -0,0 +1 @@ +0 diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/repeat-01/coverage.out b/.agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/repeat-01/coverage.out new file mode 100644 index 00000000..430149bc --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/repeat-01/coverage.out @@ -0,0 +1,3472 @@ +mode: atomic +github.com/thebtf/engram/internal/mcp/audit_helpers.go:33.53,34.30 1 7 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:34.30,36.3 1 6 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:37.2,37.25 1 1 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:37.25,39.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:40.2,40.12 1 1 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:44.28,46.2 1 28 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:52.83,53.12 1 8 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:53.12,54.16 1 8 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:54.16,55.32 1 8 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:55.32,61.5 1 1 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:63.3,65.33 3 8 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:65.33,71.4 1 1 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:77.54,78.14 1 9 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:78.14,80.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:81.2,82.16 2 9 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:82.16,85.3 2 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:86.2,87.13 2 9 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:92.91,93.23 1 13 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:93.23,95.3 1 11 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:96.2,97.15 2 2 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:97.15,99.3 1 1 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:100.2,105.65 4 1 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:105.65,113.3 1 1 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:117.95,118.23 1 11 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:118.23,120.3 1 8 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:121.2,122.15 2 3 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:122.15,124.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:125.2,129.65 5 3 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:129.65,138.3 1 3 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:142.87,143.23 1 2 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:143.23,145.3 1 1 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:146.2,147.15 2 1 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:147.15,149.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:150.2,153.65 4 1 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:153.65,161.3 1 1 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:166.96,167.23 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:167.23,169.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:170.2,171.15 2 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:171.15,173.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:174.2,177.63 4 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:177.63,185.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:189.97,190.23 1 2 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:190.23,192.3 1 1 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:193.2,194.15 2 1 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:194.15,196.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:197.2,200.68 4 1 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:200.68,208.3 1 1 +github.com/thebtf/engram/internal/mcp/coerce.go:30.62,31.20 1 174 +github.com/thebtf/engram/internal/mcp/coerce.go:31.20,33.3 1 2 +github.com/thebtf/engram/internal/mcp/coerce.go:34.2,35.49 2 172 +github.com/thebtf/engram/internal/mcp/coerce.go:35.49,37.3 1 5 +github.com/thebtf/engram/internal/mcp/coerce.go:38.2,38.14 1 167 +github.com/thebtf/engram/internal/mcp/coerce.go:38.14,40.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:41.2,41.15 1 167 +github.com/thebtf/engram/internal/mcp/coerce.go:46.52,47.14 1 712 +github.com/thebtf/engram/internal/mcp/coerce.go:47.14,49.3 1 375 +github.com/thebtf/engram/internal/mcp/coerce.go:50.2,50.23 1 337 +github.com/thebtf/engram/internal/mcp/coerce.go:51.14,52.11 1 333 +github.com/thebtf/engram/internal/mcp/coerce.go:53.19,54.20 1 1 +github.com/thebtf/engram/internal/mcp/coerce.go:55.15,56.45 1 1 +github.com/thebtf/engram/internal/mcp/coerce.go:57.12,58.31 1 1 +github.com/thebtf/engram/internal/mcp/coerce.go:59.10,60.20 1 1 +github.com/thebtf/engram/internal/mcp/coerce.go:67.43,68.14 1 68 +github.com/thebtf/engram/internal/mcp/coerce.go:68.14,70.3 1 29 +github.com/thebtf/engram/internal/mcp/coerce.go:71.2,71.23 1 39 +github.com/thebtf/engram/internal/mcp/coerce.go:72.15,73.23 1 33 +github.com/thebtf/engram/internal/mcp/coerce.go:74.19,75.38 1 2 +github.com/thebtf/engram/internal/mcp/coerce.go:75.38,77.4 1 1 +github.com/thebtf/engram/internal/mcp/coerce.go:78.3,78.40 1 1 +github.com/thebtf/engram/internal/mcp/coerce.go:78.40,80.4 1 1 +github.com/thebtf/engram/internal/mcp/coerce.go:81.3,81.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:82.14,83.56 1 3 +github.com/thebtf/engram/internal/mcp/coerce.go:83.56,85.4 1 1 +github.com/thebtf/engram/internal/mcp/coerce.go:86.3,86.54 1 2 +github.com/thebtf/engram/internal/mcp/coerce.go:86.54,88.4 1 1 +github.com/thebtf/engram/internal/mcp/coerce.go:89.3,89.20 1 1 +github.com/thebtf/engram/internal/mcp/coerce.go:90.10,91.20 1 1 +github.com/thebtf/engram/internal/mcp/coerce.go:97.49,98.14 1 52 +github.com/thebtf/engram/internal/mcp/coerce.go:98.14,100.3 1 3 +github.com/thebtf/engram/internal/mcp/coerce.go:101.2,101.23 1 49 +github.com/thebtf/engram/internal/mcp/coerce.go:102.15,103.18 1 39 +github.com/thebtf/engram/internal/mcp/coerce.go:104.19,105.38 1 3 +github.com/thebtf/engram/internal/mcp/coerce.go:105.38,107.4 1 2 +github.com/thebtf/engram/internal/mcp/coerce.go:108.3,108.40 1 1 +github.com/thebtf/engram/internal/mcp/coerce.go:108.40,110.4 1 1 +github.com/thebtf/engram/internal/mcp/coerce.go:111.3,111.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:112.14,113.56 1 7 +github.com/thebtf/engram/internal/mcp/coerce.go:113.56,115.4 1 5 +github.com/thebtf/engram/internal/mcp/coerce.go:116.3,116.54 1 2 +github.com/thebtf/engram/internal/mcp/coerce.go:116.54,118.4 1 1 +github.com/thebtf/engram/internal/mcp/coerce.go:119.3,119.20 1 1 +github.com/thebtf/engram/internal/mcp/coerce.go:120.10,121.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:127.55,128.14 1 41 +github.com/thebtf/engram/internal/mcp/coerce.go:128.14,130.3 1 33 +github.com/thebtf/engram/internal/mcp/coerce.go:131.2,131.23 1 8 +github.com/thebtf/engram/internal/mcp/coerce.go:132.15,133.11 1 4 +github.com/thebtf/engram/internal/mcp/coerce.go:134.19,135.40 1 1 +github.com/thebtf/engram/internal/mcp/coerce.go:135.40,137.4 1 1 +github.com/thebtf/engram/internal/mcp/coerce.go:138.3,138.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:139.14,140.54 1 3 +github.com/thebtf/engram/internal/mcp/coerce.go:140.54,142.4 1 2 +github.com/thebtf/engram/internal/mcp/coerce.go:143.3,143.20 1 1 +github.com/thebtf/engram/internal/mcp/coerce.go:144.10,145.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:151.46,152.14 1 144 +github.com/thebtf/engram/internal/mcp/coerce.go:152.14,154.3 1 120 +github.com/thebtf/engram/internal/mcp/coerce.go:155.2,155.23 1 24 +github.com/thebtf/engram/internal/mcp/coerce.go:156.12,157.11 1 19 +github.com/thebtf/engram/internal/mcp/coerce.go:158.14,159.54 1 3 +github.com/thebtf/engram/internal/mcp/coerce.go:159.54,161.4 1 2 +github.com/thebtf/engram/internal/mcp/coerce.go:162.3,162.20 1 1 +github.com/thebtf/engram/internal/mcp/coerce.go:163.15,164.16 1 2 +github.com/thebtf/engram/internal/mcp/coerce.go:165.19,166.40 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:166.40,168.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:169.3,169.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:170.10,171.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:177.40,178.14 1 123 +github.com/thebtf/engram/internal/mcp/coerce.go:178.14,180.3 1 109 +github.com/thebtf/engram/internal/mcp/coerce.go:181.2,181.23 1 14 +github.com/thebtf/engram/internal/mcp/coerce.go:182.13,184.26 2 12 +github.com/thebtf/engram/internal/mcp/coerce.go:184.26,185.36 1 17 +github.com/thebtf/engram/internal/mcp/coerce.go:185.36,187.5 1 16 +github.com/thebtf/engram/internal/mcp/coerce.go:189.3,189.16 1 12 +github.com/thebtf/engram/internal/mcp/coerce.go:190.16,191.11 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:192.14,193.14 1 2 +github.com/thebtf/engram/internal/mcp/coerce.go:193.14,195.4 1 1 +github.com/thebtf/engram/internal/mcp/coerce.go:196.3,196.13 1 1 +github.com/thebtf/engram/internal/mcp/coerce.go:197.10,198.13 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:204.38,205.14 1 43 +github.com/thebtf/engram/internal/mcp/coerce.go:205.14,207.3 1 34 +github.com/thebtf/engram/internal/mcp/coerce.go:208.2,209.9 2 9 +github.com/thebtf/engram/internal/mcp/coerce.go:209.9,211.3 1 1 +github.com/thebtf/engram/internal/mcp/coerce.go:212.2,213.27 2 8 +github.com/thebtf/engram/internal/mcp/coerce.go:213.27,214.42 1 18 +github.com/thebtf/engram/internal/mcp/coerce.go:214.42,216.4 1 17 +github.com/thebtf/engram/internal/mcp/coerce.go:218.2,218.15 1 8 +github.com/thebtf/engram/internal/mcp/coerce.go:222.32,223.39 1 35 +github.com/thebtf/engram/internal/mcp/coerce.go:223.39,225.3 1 2 +github.com/thebtf/engram/internal/mcp/coerce.go:226.2,226.30 1 33 +github.com/thebtf/engram/internal/mcp/coerce.go:226.30,228.3 1 1 +github.com/thebtf/engram/internal/mcp/coerce.go:229.2,229.30 1 32 +github.com/thebtf/engram/internal/mcp/coerce.go:229.30,231.3 1 1 +github.com/thebtf/engram/internal/mcp/coerce.go:232.2,232.15 1 31 +github.com/thebtf/engram/internal/mcp/coerce.go:236.35,237.28 1 2 +github.com/thebtf/engram/internal/mcp/coerce.go:237.28,239.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:240.2,240.28 1 2 +github.com/thebtf/engram/internal/mcp/coerce.go:240.28,242.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:243.2,243.15 1 2 +github.com/thebtf/engram/internal/mcp/context.go:17.55,19.2 1 2 +github.com/thebtf/engram/internal/mcp/context.go:22.78,24.2 1 14 +github.com/thebtf/engram/internal/mcp/context.go:29.78,31.2 1 3 +github.com/thebtf/engram/internal/mcp/context.go:35.53,38.2 2 32 +github.com/thebtf/engram/internal/mcp/context.go:41.80,43.2 1 6 +github.com/thebtf/engram/internal/mcp/context.go:48.80,50.2 1 1 +github.com/thebtf/engram/internal/mcp/context.go:54.53,57.2 2 43 +github.com/thebtf/engram/internal/mcp/context.go:61.51,62.43 1 32 +github.com/thebtf/engram/internal/mcp/context.go:62.43,64.3 1 1 +github.com/thebtf/engram/internal/mcp/context.go:65.2,65.16 1 31 +github.com/thebtf/engram/internal/mcp/health.go:22.32,26.2 3 0 +github.com/thebtf/engram/internal/mcp/health.go:29.37,33.2 3 0 +github.com/thebtf/engram/internal/mcp/health.go:36.35,40.2 3 0 +github.com/thebtf/engram/internal/mcp/health.go:42.44,45.25 3 0 +github.com/thebtf/engram/internal/mcp/health.go:45.25,47.50 1 0 +github.com/thebtf/engram/internal/mcp/health.go:47.50,50.4 2 0 +github.com/thebtf/engram/internal/mcp/health.go:55.74,60.16 5 0 +github.com/thebtf/engram/internal/mcp/health.go:60.16,62.3 1 0 +github.com/thebtf/engram/internal/mcp/health.go:63.2,71.4 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:28.42,29.65 1 12 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:29.65,32.3 2 12 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:33.2,33.40 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:33.40,35.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:36.2,36.14 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:39.120,40.69 1 5 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:40.69,42.3 1 1 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:43.2,44.19 2 4 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:44.19,46.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:47.2,48.17 2 4 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:48.17,50.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:51.2,52.59 2 4 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:52.59,54.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:55.2,56.20 2 4 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:56.20,58.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:59.2,60.17 2 4 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:60.17,62.3 1 3 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:63.2,64.21 2 4 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:64.21,66.3 1 3 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:67.2,68.22 2 4 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:68.22,70.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:71.2,72.23 2 4 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:72.23,74.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:76.2,98.19 2 4 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:98.19,100.3 1 3 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:101.2,101.66 1 4 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:104.52,106.29 2 4 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:106.29,108.3 1 20 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:109.2,110.46 2 4 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:113.113,123.27 2 4 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:123.27,125.3 1 16 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:126.2,127.16 2 4 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:127.16,129.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:130.2,130.25 1 4 +github.com/thebtf/engram/internal/mcp/server.go:127.44,138.2 1 274 +github.com/thebtf/engram/internal/mcp/server.go:141.64,143.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:146.78,148.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:151.53,153.2 1 2 +github.com/thebtf/engram/internal/mcp/server.go:156.55,158.2 1 4 +github.com/thebtf/engram/internal/mcp/server.go:161.58,163.2 1 12 +github.com/thebtf/engram/internal/mcp/server.go:166.62,168.2 1 8 +github.com/thebtf/engram/internal/mcp/server.go:171.50,173.2 1 24 +github.com/thebtf/engram/internal/mcp/server.go:176.78,178.2 1 8 +github.com/thebtf/engram/internal/mcp/server.go:181.74,183.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:186.71,189.2 2 11 +github.com/thebtf/engram/internal/mcp/server.go:191.85,193.2 1 2 +github.com/thebtf/engram/internal/mcp/server.go:195.61,197.2 1 3 +github.com/thebtf/engram/internal/mcp/server.go:199.49,201.2 1 3 +github.com/thebtf/engram/internal/mcp/server.go:204.54,206.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:211.53,213.2 1 1 +github.com/thebtf/engram/internal/mcp/server.go:216.53,218.2 1 5 +github.com/thebtf/engram/internal/mcp/server.go:222.61,224.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:228.59,230.2 1 2 +github.com/thebtf/engram/internal/mcp/server.go:234.51,236.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:240.52,242.2 1 10 +github.com/thebtf/engram/internal/mcp/server.go:246.55,248.2 1 13 +github.com/thebtf/engram/internal/mcp/server.go:252.82,254.2 1 16 +github.com/thebtf/engram/internal/mcp/server.go:260.70,262.2 1 10 +github.com/thebtf/engram/internal/mcp/server.go:269.68,271.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:274.87,277.2 2 0 +github.com/thebtf/engram/internal/mcp/server.go:282.60,284.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:290.45,292.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:297.77,299.2 1 13 +github.com/thebtf/engram/internal/mcp/server.go:303.37,313.38 3 35 +github.com/thebtf/engram/internal/mcp/server.go:313.38,315.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:316.2,317.9 2 35 +github.com/thebtf/engram/internal/mcp/server.go:317.9,319.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:320.2,321.9 2 35 +github.com/thebtf/engram/internal/mcp/server.go:321.9,323.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:324.2,325.9 2 35 +github.com/thebtf/engram/internal/mcp/server.go:325.9,327.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:328.2,328.14 1 35 +github.com/thebtf/engram/internal/mcp/server.go:332.35,334.2 1 1 +github.com/thebtf/engram/internal/mcp/server.go:383.49,387.12 3 6 +github.com/thebtf/engram/internal/mcp/server.go:387.12,388.22 1 6 +github.com/thebtf/engram/internal/mcp/server.go:388.22,389.11 1 11 +github.com/thebtf/engram/internal/mcp/server.go:390.22,392.11 2 0 +github.com/thebtf/engram/internal/mcp/server.go:393.12,393.12 0 11 +github.com/thebtf/engram/internal/mcp/server.go:396.4,397.18 2 11 +github.com/thebtf/engram/internal/mcp/server.go:397.18,398.13 1 3 +github.com/thebtf/engram/internal/mcp/server.go:401.4,402.61 2 8 +github.com/thebtf/engram/internal/mcp/server.go:402.61,404.13 2 2 +github.com/thebtf/engram/internal/mcp/server.go:407.4,407.55 1 6 +github.com/thebtf/engram/internal/mcp/server.go:407.55,409.5 1 5 +github.com/thebtf/engram/internal/mcp/server.go:411.3,411.28 1 6 +github.com/thebtf/engram/internal/mcp/server.go:414.2,414.9 1 6 +github.com/thebtf/engram/internal/mcp/server.go:415.20,416.19 1 0 +github.com/thebtf/engram/internal/mcp/server.go:417.25,418.17 1 6 +github.com/thebtf/engram/internal/mcp/server.go:418.17,420.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:421.3,421.13 1 6 +github.com/thebtf/engram/internal/mcp/server.go:427.77,428.19 1 27 +github.com/thebtf/engram/internal/mcp/server.go:428.19,431.3 2 2 +github.com/thebtf/engram/internal/mcp/server.go:433.2,433.20 1 25 +github.com/thebtf/engram/internal/mcp/server.go:434.20,435.33 1 4 +github.com/thebtf/engram/internal/mcp/server.go:436.20,437.32 1 6 +github.com/thebtf/engram/internal/mcp/server.go:438.20,439.37 1 10 +github.com/thebtf/engram/internal/mcp/server.go:443.24,444.93 1 1 +github.com/thebtf/engram/internal/mcp/server.go:445.34,446.101 1 1 +github.com/thebtf/engram/internal/mcp/server.go:447.22,448.91 1 1 +github.com/thebtf/engram/internal/mcp/server.go:449.29,450.120 1 1 +github.com/thebtf/engram/internal/mcp/server.go:451.10,456.4 1 1 +github.com/thebtf/engram/internal/mcp/server.go:461.51,462.20 1 2 +github.com/thebtf/engram/internal/mcp/server.go:463.50,464.70 1 2 +github.com/thebtf/engram/internal/mcp/server.go:465.46,466.79 1 0 +github.com/thebtf/engram/internal/mcp/server.go:467.10,468.80 1 0 +github.com/thebtf/engram/internal/mcp/server.go:473.59,485.63 2 7 +github.com/thebtf/engram/internal/mcp/server.go:485.63,487.3 1 7 +github.com/thebtf/engram/internal/mcp/server.go:489.2,493.3 1 7 +github.com/thebtf/engram/internal/mcp/server.go:496.45,503.33 3 7 +github.com/thebtf/engram/internal/mcp/server.go:503.33,505.57 2 0 +github.com/thebtf/engram/internal/mcp/server.go:505.57,506.76 1 0 +github.com/thebtf/engram/internal/mcp/server.go:506.76,507.13 1 0 +github.com/thebtf/engram/internal/mcp/server.go:509.4,509.18 1 0 +github.com/thebtf/engram/internal/mcp/server.go:509.18,511.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:511.10,513.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:514.4,518.11 5 0 +github.com/thebtf/engram/internal/mcp/server.go:522.2,522.19 1 7 +github.com/thebtf/engram/internal/mcp/server.go:660.29,683.21 2 11 +github.com/thebtf/engram/internal/mcp/server.go:683.21,689.3 5 1 +github.com/thebtf/engram/internal/mcp/server.go:690.2,699.3 1 11 +github.com/thebtf/engram/internal/mcp/server.go:712.30,765.49 3 17 +github.com/thebtf/engram/internal/mcp/server.go:765.49,789.3 5 3 +github.com/thebtf/engram/internal/mcp/server.go:790.2,799.3 1 17 +github.com/thebtf/engram/internal/mcp/server.go:805.40,936.2 1 62 +github.com/thebtf/engram/internal/mcp/server.go:942.58,1048.35 2 62 +github.com/thebtf/engram/internal/mcp/server.go:1048.35,1077.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1080.2,1080.33 1 62 +github.com/thebtf/engram/internal/mcp/server.go:1080.33,1090.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1093.2,1093.26 1 62 +github.com/thebtf/engram/internal/mcp/server.go:1093.26,1123.3 1 11 +github.com/thebtf/engram/internal/mcp/server.go:1124.2,1124.80 1 62 +github.com/thebtf/engram/internal/mcp/server.go:1124.80,1126.3 1 2 +github.com/thebtf/engram/internal/mcp/server.go:1127.2,1127.55 1 62 +github.com/thebtf/engram/internal/mcp/server.go:1127.55,1129.3 1 2 +github.com/thebtf/engram/internal/mcp/server.go:1130.2,1130.38 1 62 +github.com/thebtf/engram/internal/mcp/server.go:1130.38,1132.3 1 1 +github.com/thebtf/engram/internal/mcp/server.go:1134.2,1134.25 1 62 +github.com/thebtf/engram/internal/mcp/server.go:1134.25,1136.3 1 1 +github.com/thebtf/engram/internal/mcp/server.go:1138.2,1138.33 1 62 +github.com/thebtf/engram/internal/mcp/server.go:1138.33,1140.3 1 2 +github.com/thebtf/engram/internal/mcp/server.go:1141.2,1141.69 1 62 +github.com/thebtf/engram/internal/mcp/server.go:1141.69,1143.3 1 2 +github.com/thebtf/engram/internal/mcp/server.go:1144.2,1144.75 1 62 +github.com/thebtf/engram/internal/mcp/server.go:1144.75,1146.3 1 1 +github.com/thebtf/engram/internal/mcp/server.go:1148.2,1148.27 1 62 +github.com/thebtf/engram/internal/mcp/server.go:1148.27,1165.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1168.2,1168.76 1 62 +github.com/thebtf/engram/internal/mcp/server.go:1168.76,1191.3 1 1 +github.com/thebtf/engram/internal/mcp/server.go:1195.2,1195.48 1 62 +github.com/thebtf/engram/internal/mcp/server.go:1195.48,1197.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1201.2,1201.47 1 62 +github.com/thebtf/engram/internal/mcp/server.go:1201.47,1203.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1205.2,1205.38 1 62 +github.com/thebtf/engram/internal/mcp/server.go:1205.38,1207.3 1 1 +github.com/thebtf/engram/internal/mcp/server.go:1212.2,1212.21 1 62 +github.com/thebtf/engram/internal/mcp/server.go:1212.21,1214.3 1 1 +github.com/thebtf/engram/internal/mcp/server.go:1228.2,1228.51 1 62 +github.com/thebtf/engram/internal/mcp/server.go:1228.51,1230.3 1 1 +github.com/thebtf/engram/internal/mcp/server.go:1233.2,1233.56 1 62 +github.com/thebtf/engram/internal/mcp/server.go:1233.56,1235.3 1 1 +github.com/thebtf/engram/internal/mcp/server.go:1238.2,1238.71 1 62 +github.com/thebtf/engram/internal/mcp/server.go:1238.71,1298.3 1 62 +github.com/thebtf/engram/internal/mcp/server.go:1302.2,1302.104 1 62 +github.com/thebtf/engram/internal/mcp/server.go:1302.104,1321.3 1 1 +github.com/thebtf/engram/internal/mcp/server.go:1324.2,1324.72 1 62 +github.com/thebtf/engram/internal/mcp/server.go:1324.72,1333.154 1 1 +github.com/thebtf/engram/internal/mcp/server.go:1333.154,1334.26 1 1 +github.com/thebtf/engram/internal/mcp/server.go:1334.26,1336.8 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1337.7,1337.16 1 1 +github.com/thebtf/engram/internal/mcp/server.go:1338.35,1340.26 2 1 +github.com/thebtf/engram/internal/mcp/server.go:1340.26,1342.8 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1343.7,1343.18 1 1 +github.com/thebtf/engram/internal/mcp/server.go:1371.2,1371.26 1 62 +github.com/thebtf/engram/internal/mcp/server.go:1371.26,1390.3 1 11 +github.com/thebtf/engram/internal/mcp/server.go:1393.2,1393.28 1 62 +github.com/thebtf/engram/internal/mcp/server.go:1393.28,1443.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1446.2,1446.28 1 62 +github.com/thebtf/engram/internal/mcp/server.go:1446.28,1478.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1481.2,1481.37 1 62 +github.com/thebtf/engram/internal/mcp/server.go:1481.37,1561.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1564.2,1568.23 2 62 +github.com/thebtf/engram/internal/mcp/server.go:1568.23,1570.3 1 53 +github.com/thebtf/engram/internal/mcp/server.go:1572.2,1588.57 3 62 +github.com/thebtf/engram/internal/mcp/server.go:1588.57,1591.29 2 53 +github.com/thebtf/engram/internal/mcp/server.go:1591.29,1593.4 1 477 +github.com/thebtf/engram/internal/mcp/server.go:1594.3,1594.27 1 53 +github.com/thebtf/engram/internal/mcp/server.go:1594.27,1595.29 1 669 +github.com/thebtf/engram/internal/mcp/server.go:1595.29,1597.5 1 669 +github.com/thebtf/engram/internal/mcp/server.go:1601.2,1607.3 1 62 +github.com/thebtf/engram/internal/mcp/server.go:1612.79,1614.60 2 13 +github.com/thebtf/engram/internal/mcp/server.go:1614.60,1620.3 1 1 +github.com/thebtf/engram/internal/mcp/server.go:1622.2,1623.16 2 12 +github.com/thebtf/engram/internal/mcp/server.go:1623.16,1631.3 3 7 +github.com/thebtf/engram/internal/mcp/server.go:1633.2,1641.3 1 5 +github.com/thebtf/engram/internal/mcp/server.go:1644.69,1645.34 1 9 +github.com/thebtf/engram/internal/mcp/server.go:1645.34,1647.3 1 1 +github.com/thebtf/engram/internal/mcp/server.go:1648.2,1649.22 2 8 +github.com/thebtf/engram/internal/mcp/server.go:1649.22,1651.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1652.2,1652.37 1 8 +github.com/thebtf/engram/internal/mcp/server.go:1656.99,1658.14 1 114 +github.com/thebtf/engram/internal/mcp/server.go:1659.16,1660.35 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1661.15,1662.46 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1663.18,1664.49 1 1 +github.com/thebtf/engram/internal/mcp/server.go:1665.15,1666.46 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1667.18,1668.49 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1669.14,1670.45 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1671.15,1672.34 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1676.2,1676.14 1 113 +github.com/thebtf/engram/internal/mcp/server.go:1677.35,1678.52 1 2 +github.com/thebtf/engram/internal/mcp/server.go:1679.26,1680.37 1 1 +github.com/thebtf/engram/internal/mcp/server.go:1681.20,1682.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1683.20,1684.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1685.16,1686.35 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1687.29,1688.40 1 3 +github.com/thebtf/engram/internal/mcp/server.go:1689.33,1690.50 1 1 +github.com/thebtf/engram/internal/mcp/server.go:1691.25,1692.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1693.23,1694.41 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1696.26,1697.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1698.24,1699.42 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1700.22,1701.40 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1702.25,1703.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1704.27,1705.45 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1706.25,1707.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1709.30,1710.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1711.28,1712.42 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1713.17,1714.40 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1715.20,1716.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1717.20,1718.45 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1719.20,1720.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1722.20,1723.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1724.18,1725.36 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1726.20,1727.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1728.18,1729.36 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1730.21,1731.39 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1732.21,1733.39 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1734.26,1735.44 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1736.25,1737.34 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1738.26,1739.44 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1740.24,1741.42 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1742.26,1743.44 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1744.27,1745.45 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1746.22,1747.40 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1748.19,1749.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1750.15,1751.34 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1752.16,1753.35 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1755.21,1756.44 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1757.19,1758.42 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1759.20,1760.44 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1761.22,1762.45 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1763.22,1764.40 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1765.23,1766.41 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1767.20,1768.38 1 10 +github.com/thebtf/engram/internal/mcp/server.go:1769.32,1770.49 1 5 +github.com/thebtf/engram/internal/mcp/server.go:1771.19,1772.37 1 21 +github.com/thebtf/engram/internal/mcp/server.go:1773.19,1774.37 1 8 +github.com/thebtf/engram/internal/mcp/server.go:1775.33,1776.50 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1777.35,1778.52 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1779.24,1780.42 1 2 +github.com/thebtf/engram/internal/mcp/server.go:1781.32,1782.49 1 2 +github.com/thebtf/engram/internal/mcp/server.go:1783.28,1784.46 1 6 +github.com/thebtf/engram/internal/mcp/server.go:1785.21,1786.39 1 1 +github.com/thebtf/engram/internal/mcp/server.go:1787.34,1788.51 1 11 +github.com/thebtf/engram/internal/mcp/server.go:1789.25,1790.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1791.29,1792.46 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1793.26,1794.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1795.27,1796.44 1 7 +github.com/thebtf/engram/internal/mcp/server.go:1798.25,1799.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1800.23,1801.41 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1802.27,1803.45 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1804.26,1805.44 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1806.29,1807.47 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1809.29,1810.46 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1811.27,1812.44 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1813.30,1814.47 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1815.38,1816.54 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1817.36,1818.52 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1820.24,1821.42 1 2 +github.com/thebtf/engram/internal/mcp/server.go:1822.27,1823.45 1 1 +github.com/thebtf/engram/internal/mcp/server.go:1824.22,1825.40 1 1 +github.com/thebtf/engram/internal/mcp/server.go:1826.32,1827.49 1 1 +github.com/thebtf/engram/internal/mcp/server.go:1828.32,1829.49 1 6 +github.com/thebtf/engram/internal/mcp/server.go:1830.31,1831.48 1 3 +github.com/thebtf/engram/internal/mcp/server.go:1832.35,1833.52 1 3 +github.com/thebtf/engram/internal/mcp/server.go:1834.36,1835.53 1 2 +github.com/thebtf/engram/internal/mcp/server.go:1836.36,1837.53 1 2 +github.com/thebtf/engram/internal/mcp/server.go:1838.38,1839.54 1 1 +github.com/thebtf/engram/internal/mcp/server.go:1840.34,1841.51 1 2 +github.com/thebtf/engram/internal/mcp/server.go:1843.22,1844.40 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1845.21,1846.39 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1847.24,1848.42 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1850.25,1851.43 1 1 +github.com/thebtf/engram/internal/mcp/server.go:1852.25,1853.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1859.2,1859.14 1 8 +github.com/thebtf/engram/internal/mcp/server.go:1860.22,1863.131 1 1 +github.com/thebtf/engram/internal/mcp/server.go:1866.51,1867.123 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1868.10,1869.50 1 7 +github.com/thebtf/engram/internal/mcp/server.go:1874.47,1876.16 2 15 +github.com/thebtf/engram/internal/mcp/server.go:1876.16,1879.3 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1880.2,1880.35 1 15 +github.com/thebtf/engram/internal/mcp/server.go:1884.72,1890.2 1 3 +github.com/thebtf/engram/internal/mcp/server.go:1896.105,1898.16 2 5 +github.com/thebtf/engram/internal/mcp/server.go:1898.16,1900.3 1 2 +github.com/thebtf/engram/internal/mcp/server.go:1902.2,1903.17 2 3 +github.com/thebtf/engram/internal/mcp/server.go:1903.17,1905.3 1 2 +github.com/thebtf/engram/internal/mcp/server.go:1907.2,1908.17 2 1 +github.com/thebtf/engram/internal/mcp/server.go:1908.17,1910.3 1 1 +github.com/thebtf/engram/internal/mcp/server.go:1912.2,1918.16 2 1 +github.com/thebtf/engram/internal/mcp/server.go:1918.16,1920.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1921.2,1921.25 1 1 +github.com/thebtf/engram/internal/mcp/server.go:1927.76,1933.15 3 3 +github.com/thebtf/engram/internal/mcp/server.go:1933.15,1936.17 3 3 +github.com/thebtf/engram/internal/mcp/server.go:1936.17,1938.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1939.3,1939.26 1 3 +github.com/thebtf/engram/internal/mcp/server.go:1943.2,1950.36 3 0 +github.com/thebtf/engram/internal/mcp/server.go:1950.36,1952.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1952.8,1955.29 3 0 +github.com/thebtf/engram/internal/mcp/server.go:1955.29,1958.4 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1959.3,1962.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1966.2,1966.20 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1966.20,1977.20 6 0 +github.com/thebtf/engram/internal/mcp/server.go:1977.20,1979.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1980.3,1980.20 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1980.20,1982.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1985.3,1985.37 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1985.37,1987.30 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1987.30,1988.16 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1988.16,1990.6 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1990.11,1992.6 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1994.4,1995.56 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1995.56,1997.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1998.4,2003.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2008.2,2008.29 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2008.29,2009.63 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2009.63,2011.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2011.9,2013.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2021.2,2021.29 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2021.29,2029.38 3 0 +github.com/thebtf/engram/internal/mcp/server.go:2029.38,2031.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2031.9,2033.31 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2033.31,2035.30 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2035.30,2037.6 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2039.4,2042.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2046.2,2047.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2047.16,2049.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2050.2,2050.25 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2055.57,2056.33 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2056.33,2058.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2059.2,2060.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2060.16,2062.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2063.2,2064.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2064.16,2066.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2067.2,2067.23 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2071.79,2105.15 6 4 +github.com/thebtf/engram/internal/mcp/server.go:2105.15,2107.17 2 4 +github.com/thebtf/engram/internal/mcp/server.go:2107.17,2111.4 3 0 +github.com/thebtf/engram/internal/mcp/server.go:2111.9,2112.17 1 4 +github.com/thebtf/engram/internal/mcp/server.go:2112.17,2114.5 1 4 +github.com/thebtf/engram/internal/mcp/server.go:2115.4,2117.26 3 4 +github.com/thebtf/engram/internal/mcp/server.go:2117.26,2119.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2119.10,2121.29 2 4 +github.com/thebtf/engram/internal/mcp/server.go:2121.29,2123.6 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2125.4,2129.25 5 4 +github.com/thebtf/engram/internal/mcp/server.go:2130.19,2130.19 0 4 +github.com/thebtf/engram/internal/mcp/server.go:2132.20,2134.106 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2135.12,2137.103 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2140.8,2143.3 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2144.2,2150.49 3 4 +github.com/thebtf/engram/internal/mcp/server.go:2150.49,2152.3 1 1 +github.com/thebtf/engram/internal/mcp/server.go:2152.8,2154.3 1 3 +github.com/thebtf/engram/internal/mcp/server.go:2155.2,2168.27 4 4 +github.com/thebtf/engram/internal/mcp/server.go:2168.27,2170.17 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2170.17,2173.4 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2173.9,2175.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2177.2,2182.40 4 4 +github.com/thebtf/engram/internal/mcp/server.go:2182.40,2183.21 1 12 +github.com/thebtf/engram/internal/mcp/server.go:2184.20,2185.20 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2186.19,2187.19 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2191.2,2191.24 1 4 +github.com/thebtf/engram/internal/mcp/server.go:2191.24,2193.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2193.8,2193.30 1 4 +github.com/thebtf/engram/internal/mcp/server.go:2193.30,2195.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2198.2,2198.28 1 4 +github.com/thebtf/engram/internal/mcp/server.go:2198.28,2200.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2203.2,2203.29 1 4 +github.com/thebtf/engram/internal/mcp/server.go:2203.29,2205.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2207.2,2208.16 2 4 +github.com/thebtf/engram/internal/mcp/server.go:2208.16,2210.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2211.2,2211.28 1 4 +github.com/thebtf/engram/internal/mcp/server.go:2216.103,2218.16 2 2 +github.com/thebtf/engram/internal/mcp/server.go:2218.16,2220.3 1 2 +github.com/thebtf/engram/internal/mcp/server.go:2222.2,2223.15 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2223.15,2225.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2227.2,2239.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2239.16,2241.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2242.2,2242.25 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2246.93,2248.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2251.91,2253.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:18.28,29.20 4 64 +github.com/thebtf/engram/internal/mcp/tools_admin.go:29.20,33.3 2 2 +github.com/thebtf/engram/internal/mcp/tools_admin.go:35.2,44.3 1 64 +github.com/thebtf/engram/internal/mcp/tools_admin.go:68.36,69.49 1 65 +github.com/thebtf/engram/internal/mcp/tools_admin.go:69.49,74.3 4 2 +github.com/thebtf/engram/internal/mcp/tools_admin.go:75.2,75.25 1 63 +github.com/thebtf/engram/internal/mcp/tools_admin.go:80.26,82.2 1 73 +github.com/thebtf/engram/internal/mcp/tools_admin.go:84.89,86.16 2 9 +github.com/thebtf/engram/internal/mcp/tools_admin.go:86.16,88.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:89.2,90.18 2 9 +github.com/thebtf/engram/internal/mcp/tools_admin.go:90.18,92.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:94.2,94.16 1 9 +github.com/thebtf/engram/internal/mcp/tools_admin.go:95.15,96.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:97.26,98.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:99.25,100.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:101.23,105.22 1 9 +github.com/thebtf/engram/internal/mcp/tools_admin.go:105.22,107.4 1 1 +github.com/thebtf/engram/internal/mcp/tools_admin.go:108.3,108.38 1 8 +github.com/thebtf/engram/internal/mcp/tools_admin.go:109.10,110.114 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:120.92,126.26 2 8 +github.com/thebtf/engram/internal/mcp/tools_admin.go:126.26,128.3 1 2 +github.com/thebtf/engram/internal/mcp/tools_admin.go:130.2,131.19 2 6 +github.com/thebtf/engram/internal/mcp/tools_admin.go:131.19,133.3 1 2 +github.com/thebtf/engram/internal/mcp/tools_admin.go:134.2,135.19 2 4 +github.com/thebtf/engram/internal/mcp/tools_admin.go:135.19,137.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_admin.go:138.2,138.24 1 3 +github.com/thebtf/engram/internal/mcp/tools_admin.go:138.24,140.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_admin.go:142.2,142.25 1 2 +github.com/thebtf/engram/internal/mcp/tools_admin.go:142.25,144.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_admin.go:146.2,147.16 2 1 +github.com/thebtf/engram/internal/mcp/tools_admin.go:147.16,149.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:151.2,151.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:27.40,30.2 2 69 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:32.30,46.2 1 1 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:48.99,49.34 1 7 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:49.34,51.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:52.2,52.69 1 7 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:52.69,54.3 1 2 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:56.2,57.16 2 5 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:57.16,59.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:60.2,61.21 2 5 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:61.21,63.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:64.2,67.26 3 5 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:67.26,69.3 1 2 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:70.2,71.25 2 3 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:71.25,73.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:75.2,77.44 3 2 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:77.44,79.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:80.2,80.33 1 2 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:80.33,82.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:83.2,83.81 1 2 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:86.52,87.16 1 5 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:87.16,89.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:90.2,90.15 1 5 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:90.15,92.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:93.2,93.14 1 4 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:96.73,97.21 1 2 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:97.21,99.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:100.2,101.29 2 2 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:101.29,110.3 1 4 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:111.2,111.12 1 2 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:114.34,116.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:31.98,32.52 1 2 +github.com/thebtf/engram/internal/mcp/tools_brief.go:32.52,34.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:35.2,35.26 1 2 +github.com/thebtf/engram/internal/mcp/tools_brief.go:35.26,37.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:39.2,40.49 2 2 +github.com/thebtf/engram/internal/mcp/tools_brief.go:40.49,42.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:43.2,43.21 1 2 +github.com/thebtf/engram/internal/mcp/tools_brief.go:43.21,45.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:46.2,46.21 1 2 +github.com/thebtf/engram/internal/mcp/tools_brief.go:46.21,48.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:49.2,49.18 1 2 +github.com/thebtf/engram/internal/mcp/tools_brief.go:49.18,51.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_brief.go:52.2,52.18 1 2 +github.com/thebtf/engram/internal/mcp/tools_brief.go:52.18,54.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:56.2,56.38 1 2 +github.com/thebtf/engram/internal/mcp/tools_brief.go:56.38,58.3 1 2 +github.com/thebtf/engram/internal/mcp/tools_brief.go:60.2,61.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:61.16,63.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:68.2,70.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:70.26,77.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:79.2,81.36 3 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:81.36,84.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:86.2,89.28 3 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:89.28,90.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:90.39,91.9 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:93.3,97.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:100.2,104.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:107.60,113.2 1 2 +github.com/thebtf/engram/internal/mcp/tools_brief.go:115.101,116.38 1 2 +github.com/thebtf/engram/internal/mcp/tools_brief.go:116.38,118.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_brief.go:120.2,122.21 3 1 +github.com/thebtf/engram/internal/mcp/tools_brief.go:122.21,123.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:123.26,125.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:126.3,126.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:126.23,128.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:129.8,130.26 1 1 +github.com/thebtf/engram/internal/mcp/tools_brief.go:130.26,132.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:133.3,133.68 1 1 +github.com/thebtf/engram/internal/mcp/tools_brief.go:133.68,135.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:137.2,140.20 3 1 +github.com/thebtf/engram/internal/mcp/tools_brief.go:141.17,142.18 1 1 +github.com/thebtf/engram/internal/mcp/tools_brief.go:143.67,143.67 0 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:144.10,145.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:148.2,162.16 3 1 +github.com/thebtf/engram/internal/mcp/tools_brief.go:162.16,164.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:165.2,165.19 1 1 +github.com/thebtf/engram/internal/mcp/tools_brief.go:165.19,173.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:174.2,174.30 1 1 +github.com/thebtf/engram/internal/mcp/tools_brief.go:174.30,176.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:177.2,177.31 1 1 +github.com/thebtf/engram/internal/mcp/tools_brief.go:177.31,179.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:181.2,182.36 2 1 +github.com/thebtf/engram/internal/mcp/tools_brief.go:182.36,196.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_brief.go:198.2,199.19 2 1 +github.com/thebtf/engram/internal/mcp/tools_brief.go:199.19,201.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:202.2,203.18 2 1 +github.com/thebtf/engram/internal/mcp/tools_brief.go:203.18,205.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:206.2,207.21 2 1 +github.com/thebtf/engram/internal/mcp/tools_brief.go:207.21,209.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:210.2,211.25 2 1 +github.com/thebtf/engram/internal/mcp/tools_brief.go:211.25,213.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:214.2,225.21 3 1 +github.com/thebtf/engram/internal/mcp/tools_brief.go:225.21,227.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_brief.go:228.2,228.25 1 1 +github.com/thebtf/engram/internal/mcp/tools_brief.go:228.25,230.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_brief.go:231.2,231.18 1 1 +github.com/thebtf/engram/internal/mcp/tools_brief.go:231.18,233.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_brief.go:235.2,244.21 2 1 +github.com/thebtf/engram/internal/mcp/tools_brief.go:244.21,246.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_brief.go:247.2,247.25 1 1 +github.com/thebtf/engram/internal/mcp/tools_brief.go:247.25,249.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_brief.go:250.2,250.18 1 1 +github.com/thebtf/engram/internal/mcp/tools_brief.go:250.18,252.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_brief.go:253.2,253.24 1 1 +github.com/thebtf/engram/internal/mcp/tools_brief.go:253.24,255.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:256.2,256.30 1 1 +github.com/thebtf/engram/internal/mcp/tools_brief.go:259.50,261.22 2 1 +github.com/thebtf/engram/internal/mcp/tools_brief.go:261.22,263.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:264.2,264.16 1 1 +github.com/thebtf/engram/internal/mcp/tools_brief.go:270.90,272.42 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:272.42,276.3 3 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:277.2,281.27 3 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:281.27,282.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:282.45,284.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:286.2,286.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:25.28,88.2 1 1 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:95.95,96.22 1 2 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:96.22,98.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:99.2,100.32 2 2 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:100.32,102.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:104.2,105.16 2 1 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:105.16,107.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:109.2,114.35 3 1 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:114.35,121.3 2 1 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:123.2,123.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:123.25,125.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:127.2,134.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:134.16,136.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:138.2,146.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:154.94,155.22 1 1 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:155.22,157.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:158.2,159.32 2 1 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:159.32,161.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:163.2,164.16 2 1 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:164.16,166.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:168.2,172.35 3 1 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:172.35,179.3 2 1 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:181.2,181.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:181.25,183.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:185.2,192.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:192.16,194.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:196.2,203.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:211.97,212.22 1 1 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:212.22,214.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:215.2,216.32 2 1 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:216.32,218.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:220.2,221.16 2 1 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:221.16,223.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:225.2,229.35 3 1 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:229.35,236.3 2 1 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:238.2,238.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:238.25,240.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:242.2,249.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:249.16,251.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:253.2,260.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:31.80,32.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:32.14,34.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:35.2,48.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:51.136,53.51 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:53.51,55.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:56.2,56.83 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:59.94,60.21 1 3 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:60.21,62.3 1 2 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:63.2,63.12 1 1 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:68.30,162.2 2 1 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:165.98,166.49 1 2 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:166.49,168.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:169.2,170.16 2 1 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:170.16,172.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:173.2,174.19 2 1 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:174.19,176.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:177.2,179.17 3 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:179.17,181.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:183.2,184.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:184.16,186.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:188.2,189.31 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:189.31,190.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:190.15,191.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:193.3,193.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:196.2,201.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:201.16,203.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:204.2,204.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:208.96,209.49 1 1 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:209.49,211.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:212.2,213.16 2 1 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:213.16,215.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:216.2,217.13 2 1 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:217.13,219.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:221.2,222.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:222.16,224.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:225.2,225.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:225.22,227.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:229.2,230.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:230.16,232.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:233.2,233.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:239.100,240.22 1 1 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:240.22,242.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:243.2,244.16 2 1 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:244.16,246.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:247.2,248.13 2 1 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:248.13,250.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:255.2,256.12 2 1 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:256.12,263.30 2 1 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:263.30,264.77 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:264.77,269.5 4 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:271.3,272.21 2 1 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:272.21,274.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:275.3,275.24 1 1 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:279.2,279.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:279.29,281.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:284.2,285.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:285.16,287.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:288.2,288.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:288.22,290.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:291.2,291.55 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:291.55,293.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:294.2,294.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:294.74,296.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:297.2,298.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:298.16,300.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:306.2,307.41 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:307.41,309.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:310.2,324.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:324.16,325.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:325.50,327.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:328.3,328.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:330.2,330.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:330.38,332.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:334.2,341.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:341.16,343.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:344.2,344.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:348.99,349.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:349.49,351.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:352.2,353.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:353.16,355.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:356.2,357.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:357.13,359.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:360.2,362.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:362.16,364.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:365.2,365.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:365.22,367.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:368.2,368.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:368.74,370.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:371.2,372.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:372.16,374.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:375.2,375.85 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:375.85,377.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:379.2,380.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:380.16,381.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:381.50,383.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:384.3,384.60 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:386.2,386.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:386.20,388.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:390.2,395.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:395.16,397.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:398.2,398.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:402.102,403.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:403.49,405.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:406.2,407.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:407.16,409.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:410.2,411.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:411.13,413.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:414.2,415.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:415.16,417.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:418.2,418.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:418.22,420.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:421.2,421.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:421.74,423.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:424.2,425.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:425.16,427.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:428.2,428.88 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:428.88,430.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:432.2,433.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:433.16,434.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:434.50,436.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:437.3,437.63 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:439.2,439.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:439.20,441.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:443.2,448.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:448.16,450.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:451.2,451.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:34.30,36.2 1 63 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:42.61,44.2 1 1 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:48.32,75.2 1 1 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:79.32,94.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:100.98,101.25 1 1 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:101.25,103.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:104.2,104.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:104.29,106.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:108.2,113.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:113.17,114.55 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:114.55,116.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:118.2,118.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:118.24,120.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:121.2,121.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:121.23,123.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:124.2,124.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:124.23,126.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:134.2,135.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:135.21,137.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:142.2,147.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:147.16,149.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:154.2,165.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:165.25,175.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:177.2,183.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:183.16,185.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:186.2,186.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:194.98,195.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:195.25,197.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:198.2,198.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:198.29,200.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:202.2,205.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:205.17,207.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:208.2,209.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:209.21,211.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:213.2,214.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:214.16,216.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:217.2,218.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:218.16,220.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:221.2,222.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:222.16,224.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:226.2,231.11 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:231.11,233.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:235.2,236.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:236.16,238.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:239.2,239.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:21.52,22.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:22.24,25.28 3 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:25.28,27.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:29.2,29.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:35.72,37.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:37.15,39.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:41.2,42.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:42.16,44.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:45.2,45.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:49.99,51.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:51.16,53.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:55.2,56.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:56.16,58.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:60.2,72.23 7 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:72.23,74.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:75.2,75.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:75.24,77.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:78.2,78.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:78.24,80.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:81.2,81.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:82.27,82.27 0 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:84.10,85.93 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:87.2,87.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:87.30,89.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:90.2,90.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:90.26,92.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:94.2,95.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:95.16,97.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:99.2,100.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:100.16,102.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:104.2,112.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:112.16,114.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:116.2,123.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:123.16,125.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:126.2,126.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:130.97,132.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:132.16,134.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:136.2,137.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:137.16,139.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:141.2,147.23 4 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:147.23,149.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:150.2,150.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:150.26,152.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:154.2,155.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:155.16,157.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:159.2,160.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:160.16,161.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:161.47,163.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:164.3,164.51 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:167.2,167.97 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:167.97,172.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:174.2,175.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:175.16,177.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:179.2,185.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:185.16,187.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:188.2,188.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:192.99,194.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:194.16,196.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:198.2,199.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:199.16,201.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:203.2,207.26 3 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:207.26,209.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:211.2,212.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:212.16,214.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:216.2,223.26 3 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:223.26,229.28 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:229.28,231.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:232.3,232.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:235.2,236.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:236.16,238.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:239.2,239.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:243.100,245.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:245.16,247.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:249.2,250.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:250.16,252.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:254.2,262.23 5 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:262.23,264.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:265.2,265.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:265.24,267.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:268.2,268.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:269.27,269.27 0 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:271.10,272.93 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:274.2,274.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:274.30,276.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:277.2,277.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:277.26,279.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:281.2,281.71 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:281.71,282.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:282.47,284.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:285.3,285.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:288.2,293.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:293.16,295.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:296.2,296.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:302.92,309.19 5 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:309.19,310.53 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:310.53,313.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:316.2,317.51 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:317.51,318.66 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:318.66,320.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:323.2,331.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:331.16,333.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:334.2,334.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:338.46,342.32 4 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:342.32,343.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:343.20,346.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:348.2,350.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:350.26,352.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:352.27,353.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:353.13,355.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:356.4,356.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:358.3,358.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:360.2,360.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:16.45,18.2 1 9 +github.com/thebtf/engram/internal/mcp/tools_directives.go:20.35,36.2 1 1 +github.com/thebtf/engram/internal/mcp/tools_directives.go:38.84,39.40 1 6 +github.com/thebtf/engram/internal/mcp/tools_directives.go:39.40,41.3 1 2 +github.com/thebtf/engram/internal/mcp/tools_directives.go:42.2,42.50 1 4 +github.com/thebtf/engram/internal/mcp/tools_directives.go:42.50,44.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_directives.go:45.2,45.39 1 3 +github.com/thebtf/engram/internal/mcp/tools_directives.go:48.101,50.16 2 6 +github.com/thebtf/engram/internal/mcp/tools_directives.go:50.16,52.3 1 3 +github.com/thebtf/engram/internal/mcp/tools_directives.go:53.2,54.16 2 3 +github.com/thebtf/engram/internal/mcp/tools_directives.go:54.16,56.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:57.2,58.19 2 3 +github.com/thebtf/engram/internal/mcp/tools_directives.go:58.19,60.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_directives.go:61.2,62.21 2 2 +github.com/thebtf/engram/internal/mcp/tools_directives.go:62.21,64.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_directives.go:65.2,66.16 2 1 +github.com/thebtf/engram/internal/mcp/tools_directives.go:66.16,68.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:69.2,69.28 1 1 +github.com/thebtf/engram/internal/mcp/tools_directives.go:72.102,74.16 2 3 +github.com/thebtf/engram/internal/mcp/tools_directives.go:74.16,76.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:77.2,82.8 1 3 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:10.100,12.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:12.16,14.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:16.2,17.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:17.18,19.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:21.2,21.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:22.16,23.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:24.14,25.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:26.14,27.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:28.17,29.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:30.17,31.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:32.21,33.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:34.19,35.42 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:36.17,37.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:38.16,39.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:40.16,41.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:42.21,43.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:44.10,45.167 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:15.77,16.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:16.33,18.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:20.2,21.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:21.27,23.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:25.2,26.28 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:26.28,29.17 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:29.17,31.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:34.2,41.32 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:41.32,46.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:46.20,48.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:49.3,49.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:52.2,53.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:53.16,55.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:57.2,57.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:61.97,62.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:62.28,64.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:66.2,67.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:67.16,69.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:71.2,75.29 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:75.29,77.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:79.2,80.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:80.16,82.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:84.2,84.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:84.20,86.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:88.2,97.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:97.25,103.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:103.20,105.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:106.3,106.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:106.19,108.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:109.3,109.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:112.2,113.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:113.16,115.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:117.2,117.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:121.95,122.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:122.28,124.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:126.2,127.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:127.16,129.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:131.2,137.50 4 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:137.50,139.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:141.2,142.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:142.16,144.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:145.2,145.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:145.16,147.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:149.2,149.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:149.21,151.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:153.2,154.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:154.16,156.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:157.2,157.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:157.20,159.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:161.2,161.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:165.98,166.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:166.28,168.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:170.2,171.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:171.16,173.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:175.2,181.50 4 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:181.50,183.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:185.2,185.96 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:185.96,187.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:189.2,189.88 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:197.98,198.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:198.28,200.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:202.2,203.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:203.16,205.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:207.2,217.74 6 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:217.74,219.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:222.2,223.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:223.16,225.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:227.2,229.156 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:235.98,237.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:237.16,239.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:241.2,247.24 4 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:247.24,249.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:252.2,253.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:253.29,255.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:256.2,256.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:15.93,16.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:16.37,18.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:20.2,21.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:21.16,23.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:25.2,32.16 7 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:32.16,34.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:35.2,35.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:35.19,37.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:38.2,38.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:38.19,40.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:42.2,43.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:43.16,45.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:47.2,54.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:54.16,56.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:57.2,57.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:61.91,62.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:62.37,64.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:66.2,67.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:67.16,69.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:71.2,73.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:73.16,75.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:76.2,76.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:76.19,78.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:80.2,81.43 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:81.43,83.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:83.19,85.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:86.3,86.79 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:87.8,89.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:90.2,90.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:90.16,91.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:91.45,93.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:94.3,94.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:97.2,110.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:110.16,112.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:113.2,113.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:117.93,119.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:122.91,123.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:123.37,125.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:127.2,128.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:128.16,130.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:132.2,133.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:133.19,135.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:136.2,141.16 5 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:141.16,143.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:145.2,155.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:155.25,165.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:167.2,168.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:168.16,170.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:171.2,171.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:175.94,176.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:176.37,178.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:180.2,181.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:181.16,183.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:185.2,187.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:187.16,189.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:190.2,190.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:190.19,192.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:193.2,196.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:196.16,198.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:200.2,208.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:208.25,216.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:218.2,225.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:225.16,227.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:228.2,228.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:232.94,233.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:233.37,235.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:237.2,238.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:238.16,240.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:242.2,243.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:243.21,245.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:246.2,248.19 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:248.19,250.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:252.2,253.46 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:253.46,255.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:255.13,257.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:259.2,259.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:259.44,261.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:261.13,263.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:266.2,267.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:267.16,269.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:271.2,278.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:278.16,280.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:281.2,281.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:19.69,21.2 1 3 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:23.38,38.2 1 2 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:40.51,63.2 1 2 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:65.53,80.2 1 2 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:82.46,85.32 3 8 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:85.32,87.3 1 48 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:88.2,88.12 1 8 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:91.105,93.16 2 2 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:93.16,95.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:96.2,97.16 2 2 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:97.16,99.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:100.2,100.70 1 1 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:103.107,105.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:105.16,107.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:108.2,109.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:109.16,111.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:112.2,112.72 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:115.101,117.16 2 2 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:117.16,119.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:120.2,121.17 2 2 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:121.17,123.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:124.2,139.21 2 2 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:142.109,144.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:144.16,146.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:147.2,154.8 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:157.100,159.28 2 2 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:159.28,161.18 2 3 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:161.18,163.4 1 2 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:164.3,164.62 1 1 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:166.2,167.72 2 2 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:167.72,169.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:170.2,170.53 1 2 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:170.53,172.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:173.2,174.26 2 2 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:174.26,176.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:177.2,177.12 1 2 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:180.73,182.16 2 1 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:182.16,184.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:185.2,185.25 1 1 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:12.104,14.16 2 1 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:14.16,16.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:18.2,19.18 2 1 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:19.18,21.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:23.2,23.16 1 1 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:24.14,25.39 1 1 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:26.18,27.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:28.17,29.46 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:30.10,31.96 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:36.101,37.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:37.27,39.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:41.2,42.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:42.16,44.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:46.2,47.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:47.21,49.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:50.2,51.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:51.19,53.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:54.2,54.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:55.52,55.52 0 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:56.10,57.101 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:59.2,61.93 2 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:61.93,64.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:66.2,70.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:27.31,94.2 1 1 +github.com/thebtf/engram/internal/mcp/tools_governance.go:98.97,100.26 2 2 +github.com/thebtf/engram/internal/mcp/tools_governance.go:100.26,102.3 1 2 +github.com/thebtf/engram/internal/mcp/tools_governance.go:103.2,103.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:103.28,105.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:107.2,108.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:108.16,110.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:112.2,115.15 4 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:115.15,117.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:118.2,118.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:118.17,120.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:122.2,123.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:123.16,125.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:127.2,140.29 3 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:140.29,151.31 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:151.31,154.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:155.3,155.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:158.2,162.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:167.100,169.26 2 1 +github.com/thebtf/engram/internal/mcp/tools_governance.go:169.26,171.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_governance.go:172.2,172.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:172.28,174.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:175.2,175.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:175.26,177.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:179.2,180.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:180.16,182.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:184.2,185.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:185.22,187.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:189.2,190.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:190.20,191.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:191.54,199.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:200.3,200.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:200.61,202.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:203.3,203.58 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:206.2,211.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:215.95,217.32 2 1 +github.com/thebtf/engram/internal/mcp/tools_governance.go:217.32,219.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_governance.go:220.2,220.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:220.28,222.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:224.2,225.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:225.16,227.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:229.2,230.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:230.22,232.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:234.2,234.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:234.61,236.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:239.2,239.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:239.25,246.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:248.2,252.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:258.104,260.26 2 2 +github.com/thebtf/engram/internal/mcp/tools_governance.go:260.26,262.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_governance.go:267.2,271.20 3 1 +github.com/thebtf/engram/internal/mcp/tools_governance.go:271.20,275.3 3 1 +github.com/thebtf/engram/internal/mcp/tools_governance.go:275.8,279.3 3 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:280.2,280.25 1 1 +github.com/thebtf/engram/internal/mcp/tools_governance.go:284.60,285.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:285.30,287.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:288.2,288.42 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:288.42,290.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:291.2,291.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:64.89,65.25 1 1 +github.com/thebtf/engram/internal/mcp/tools_graph.go:65.25,67.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_graph.go:69.2,70.49 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:70.49,72.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:74.2,74.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:75.18,76.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:77.21,78.35 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:79.19,80.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:81.18,82.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:83.19,84.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:85.18,86.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:87.18,91.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:91.23,93.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:94.3,94.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:95.10,96.62 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:100.81,103.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:103.19,105.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:106.2,107.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:107.19,109.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:112.2,112.46 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:112.46,114.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:115.2,115.46 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:115.46,117.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:122.2,122.66 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:122.66,124.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:127.2,127.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:127.25,128.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:128.22,130.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:131.8,132.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:132.26,134.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:138.2,138.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:138.25,139.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:139.22,141.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:142.8,143.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:143.26,145.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:148.2,148.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:148.22,150.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:151.2,151.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:151.38,153.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:154.2,154.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:154.19,156.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:159.2,161.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:161.25,164.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:165.2,165.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:165.25,168.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:169.2,171.23 3 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:171.23,174.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:175.2,175.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:175.23,178.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:180.2,193.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:193.16,195.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:198.2,199.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:199.29,201.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:202.2,202.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:202.29,204.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:205.2,213.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:216.121,217.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:217.28,218.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:218.26,220.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:221.3,222.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:222.17,223.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:223.49,225.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:226.4,226.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:228.3,228.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:230.2,230.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:230.26,232.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:233.2,234.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:234.16,235.48 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:235.48,237.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:238.3,238.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:240.2,240.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:243.101,248.36 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:248.36,250.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:250.8,252.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:253.2,253.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:253.16,255.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:256.2,256.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:256.32,257.128 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:257.128,262.72 5 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:262.72,264.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:267.2,267.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:276.81,277.25 1 4 +github.com/thebtf/engram/internal/mcp/tools_graph.go:277.25,279.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:280.2,280.22 1 4 +github.com/thebtf/engram/internal/mcp/tools_graph.go:280.22,282.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:283.2,283.39 1 4 +github.com/thebtf/engram/internal/mcp/tools_graph.go:283.39,285.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_graph.go:286.2,286.25 1 3 +github.com/thebtf/engram/internal/mcp/tools_graph.go:286.25,288.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_graph.go:289.2,289.21 1 2 +github.com/thebtf/engram/internal/mcp/tools_graph.go:289.21,291.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_graph.go:292.2,293.14 2 1 +github.com/thebtf/engram/internal/mcp/tools_graph.go:293.14,295.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_graph.go:296.2,305.16 5 1 +github.com/thebtf/engram/internal/mcp/tools_graph.go:305.16,307.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:308.2,314.4 1 1 +github.com/thebtf/engram/internal/mcp/tools_graph.go:317.84,318.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:318.19,320.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:321.2,323.63 3 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:323.63,325.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:326.2,329.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:332.82,333.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:333.38,335.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:336.2,337.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:338.18,339.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:340.18,341.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:345.2,345.59 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:345.59,347.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:349.2,351.21 3 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:351.21,353.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:353.8,356.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:357.2,357.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:357.16,359.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:366.2,367.41 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:367.41,369.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:371.2,378.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:397.115,398.15 1 3 +github.com/thebtf/engram/internal/mcp/tools_graph.go:398.15,400.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:403.2,404.26 2 3 +github.com/thebtf/engram/internal/mcp/tools_graph.go:404.26,405.28 1 6 +github.com/thebtf/engram/internal/mcp/tools_graph.go:405.28,407.4 1 6 +github.com/thebtf/engram/internal/mcp/tools_graph.go:408.3,408.28 1 6 +github.com/thebtf/engram/internal/mcp/tools_graph.go:408.28,410.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:412.2,412.23 1 3 +github.com/thebtf/engram/internal/mcp/tools_graph.go:412.23,415.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:420.2,426.12 4 3 +github.com/thebtf/engram/internal/mcp/tools_graph.go:426.12,427.27 1 3 +github.com/thebtf/engram/internal/mcp/tools_graph.go:427.27,429.18 2 6 +github.com/thebtf/engram/internal/mcp/tools_graph.go:429.18,431.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:433.4,433.33 1 6 +github.com/thebtf/engram/internal/mcp/tools_graph.go:433.33,435.5 1 2 +github.com/thebtf/engram/internal/mcp/tools_graph.go:440.2,441.26 2 3 +github.com/thebtf/engram/internal/mcp/tools_graph.go:441.26,442.28 1 6 +github.com/thebtf/engram/internal/mcp/tools_graph.go:442.28,443.49 1 6 +github.com/thebtf/engram/internal/mcp/tools_graph.go:443.49,445.13 2 2 +github.com/thebtf/engram/internal/mcp/tools_graph.go:448.3,448.28 1 4 +github.com/thebtf/engram/internal/mcp/tools_graph.go:448.28,449.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:449.49,451.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:454.2,454.12 1 3 +github.com/thebtf/engram/internal/mcp/tools_graph.go:457.82,458.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:458.21,460.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:461.2,462.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:462.16,464.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:465.2,465.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:465.36,467.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:468.2,469.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:469.16,471.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:472.2,477.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:480.82,481.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:481.40,483.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:484.2,485.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:485.19,487.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:488.2,489.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:489.16,491.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:492.2,499.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:502.82,503.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:503.21,505.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:506.2,507.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:507.16,509.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:510.2,514.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:23.179,24.22 1 4 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:24.22,26.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:28.2,32.22 4 4 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:32.22,34.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:35.2,36.22 2 4 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:36.22,38.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:40.2,41.26 2 4 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:41.26,43.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:44.2,44.26 1 4 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:44.26,46.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:47.2,47.30 1 4 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:47.30,49.3 1 3 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:50.2,50.30 1 4 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:50.30,52.3 1 3 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:54.2,55.16 2 4 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:55.16,57.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:58.2,58.13 1 4 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:58.13,60.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:61.2,62.16 2 4 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:62.16,64.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:65.2,65.13 1 4 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:65.13,67.3 1 2 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:69.2,70.16 2 2 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:70.16,72.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:73.2,73.15 1 2 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:73.15,75.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:77.2,77.36 1 1 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:80.172,81.28 1 8 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:81.28,82.23 1 6 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:82.23,84.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:85.3,85.18 1 6 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:85.18,87.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:88.3,89.17 2 6 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:89.17,90.49 1 1 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:90.49,92.5 1 1 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:93.4,93.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:95.3,95.19 1 5 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:98.2,98.24 1 2 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:98.24,100.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:101.2,101.19 1 2 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:101.19,103.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:104.2,105.16 2 2 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:105.16,106.48 1 1 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:106.48,108.4 1 1 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:109.3,109.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:111.2,111.18 1 1 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:114.119,116.22 2 2 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:116.22,118.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:119.2,120.22 2 2 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:120.22,122.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:124.2,126.26 3 2 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:126.26,127.36 1 2 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:127.36,129.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:130.3,130.105 1 2 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:131.8,132.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:132.32,134.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:135.3,135.103 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:137.2,137.16 1 2 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:137.16,139.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:141.2,141.32 1 2 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:141.32,143.27 2 1 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:143.27,145.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:146.3,147.27 2 1 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:147.27,149.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:150.3,150.106 1 1 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:150.106,151.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:153.3,153.27 1 1 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:153.27,154.114 1 1 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:154.114,155.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:157.9,157.104 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:157.104,158.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:160.3,160.27 1 1 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:160.27,161.114 1 1 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:161.114,162.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:164.9,164.104 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:164.104,165.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:167.3,167.19 1 1 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:169.2,169.19 1 1 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:25.90,26.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:26.26,28.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:30.2,31.49 2 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:31.49,33.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:35.2,35.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:36.16,37.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:38.10,39.63 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:43.84,44.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:44.21,46.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:47.2,47.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:47.25,49.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:50.2,50.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:50.21,52.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:53.2,53.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:53.21,55.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:57.2,58.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:59.18,60.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:61.15,62.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:63.24,64.42 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:65.10,66.108 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:69.2,70.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:70.22,72.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:73.2,74.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:74.29,76.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:78.2,78.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:78.14,85.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:87.2,89.37 3 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:89.37,92.21 3 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:92.21,94.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:97.2,100.31 4 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:100.31,102.38 2 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:102.38,104.37 2 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:104.37,106.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:109.3,122.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:122.26,124.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:125.3,125.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:125.19,127.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:131.3,133.39 3 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:133.39,135.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:135.9,137.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:138.3,138.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:138.17,140.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:142.3,142.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:142.34,144.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:145.3,145.11 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:148.2,155.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:20.99,22.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:22.16,24.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:26.2,31.44 3 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:31.44,32.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:32.33,33.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:33.43,38.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:43.2,43.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:43.49,45.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:46.2,46.48 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:46.48,48.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:50.2,52.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:52.27,55.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:55.8,60.24 3 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:60.24,62.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:64.3,64.57 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:64.57,66.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:68.3,68.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:71.2,71.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:71.16,73.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:75.2,76.23 2 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:76.23,78.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:80.2,80.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:19.40,89.2 1 62 +github.com/thebtf/engram/internal/mcp/tools_issues.go:109.71,111.9 2 2 +github.com/thebtf/engram/internal/mcp/tools_issues.go:111.9,113.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:115.2,116.38 2 2 +github.com/thebtf/engram/internal/mcp/tools_issues.go:116.38,117.16 1 4 +github.com/thebtf/engram/internal/mcp/tools_issues.go:118.13,119.41 1 2 +github.com/thebtf/engram/internal/mcp/tools_issues.go:119.41,121.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:122.17,123.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:123.43,125.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:126.11,127.40 1 2 +github.com/thebtf/engram/internal/mcp/tools_issues.go:127.40,129.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:133.2,133.22 1 2 +github.com/thebtf/engram/internal/mcp/tools_issues.go:133.22,138.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:139.2,139.12 1 2 +github.com/thebtf/engram/internal/mcp/tools_issues.go:143.90,144.25 1 2 +github.com/thebtf/engram/internal/mcp/tools_issues.go:144.25,146.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:148.2,149.16 2 2 +github.com/thebtf/engram/internal/mcp/tools_issues.go:149.16,151.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:153.2,157.61 2 2 +github.com/thebtf/engram/internal/mcp/tools_issues.go:157.61,159.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:161.2,161.16 1 2 +github.com/thebtf/engram/internal/mcp/tools_issues.go:162.16,163.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:164.14,165.35 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:166.13,167.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:168.16,169.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:170.17,171.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:172.16,173.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:174.15,175.36 1 2 +github.com/thebtf/engram/internal/mcp/tools_issues.go:176.10,177.120 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:189.85,191.39 2 2 +github.com/thebtf/engram/internal/mcp/tools_issues.go:191.39,192.44 1 2 +github.com/thebtf/engram/internal/mcp/tools_issues.go:192.44,194.4 1 2 +github.com/thebtf/engram/internal/mcp/tools_issues.go:196.2,196.15 1 2 +github.com/thebtf/engram/internal/mcp/tools_issues.go:196.15,198.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:199.2,199.15 1 2 +github.com/thebtf/engram/internal/mcp/tools_issues.go:199.15,201.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:202.2,202.46 1 2 +github.com/thebtf/engram/internal/mcp/tools_issues.go:205.91,207.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:207.17,209.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:211.2,215.25 5 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:215.25,217.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:218.2,224.25 4 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:224.25,226.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:227.2,227.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:227.25,229.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:231.2,243.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:243.16,245.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:247.2,247.139 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:250.89,252.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:252.19,254.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:255.2,256.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:256.25,258.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:259.2,264.52 5 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:264.52,266.14 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:266.14,268.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:271.2,277.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:277.25,280.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:282.2,283.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:283.16,285.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:287.2,287.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:287.22,288.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:288.20,290.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:291.3,291.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:294.2,297.31 3 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:297.31,300.29 3 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:300.29,302.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:303.3,305.69 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:308.2,308.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:311.88,313.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:313.13,315.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:317.2,318.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:318.16,320.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:322.2,328.22 6 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:328.22,331.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:333.2,333.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:333.23,335.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:335.30,338.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:341.2,341.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:344.91,346.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:346.13,348.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:350.2,353.18 3 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:353.18,354.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:354.27,356.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:357.3,357.73 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:357.73,359.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:362.2,362.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:362.19,370.17 4 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:370.17,372.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:375.2,376.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:376.26,378.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:379.2,379.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:382.92,384.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:384.13,386.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:388.2,389.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:389.16,391.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:393.2,401.16 4 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:401.16,403.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:405.2,405.88 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:408.91,410.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:410.13,412.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:414.2,418.95 4 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:418.95,420.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:422.2,422.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:425.90,427.13 2 2 +github.com/thebtf/engram/internal/mcp/tools_issues.go:427.13,429.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:431.2,433.167 3 2 +github.com/thebtf/engram/internal/mcp/tools_issues.go:433.167,435.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_issues.go:437.2,437.89 1 2 +github.com/thebtf/engram/internal/mcp/tools_issues.go:437.89,439.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_issues.go:441.2,441.108 1 1 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:22.93,24.49 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:24.49,26.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:28.2,28.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:29.14,30.42 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:31.17,32.59 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:33.16,34.58 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:35.24,36.75 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:37.27,38.71 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:39.22,40.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:41.23,42.63 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:43.10,44.66 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:48.79,49.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:49.13,51.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:52.2,53.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:53.16,55.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:57.2,58.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:58.32,60.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:61.2,84.28 3 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:87.101,88.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:88.13,90.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:91.2,91.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:91.38,93.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:94.2,95.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:95.16,97.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:98.2,98.53 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:98.53,100.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:102.2,104.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:104.17,106.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:107.2,107.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:107.29,109.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:110.2,115.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:118.100,119.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:119.13,121.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:122.2,122.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:122.38,124.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:125.2,126.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:126.16,128.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:129.2,129.53 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:129.53,131.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:133.2,135.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:135.17,137.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:138.2,138.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:138.29,140.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:141.2,146.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:149.123,150.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:150.13,152.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:153.2,153.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:153.18,155.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:156.2,156.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:156.38,158.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:159.2,161.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:161.17,163.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:164.2,169.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:172.113,173.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:173.13,175.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:176.2,176.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:176.50,178.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:179.2,181.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:181.17,183.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:184.2,188.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:191.57,195.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:197.102,198.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:198.13,200.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:201.2,201.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:201.20,203.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:204.2,205.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:205.16,207.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:209.2,210.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:210.32,212.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:214.2,217.56 3 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:217.56,223.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:225.2,230.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:233.41,235.16 2 45 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:235.16,237.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:238.2,238.23 1 45 +github.com/thebtf/engram/internal/mcp/tools_memory.go:35.27,37.2 1 304 +github.com/thebtf/engram/internal/mcp/tools_memory.go:42.41,43.11 1 5 +github.com/thebtf/engram/internal/mcp/tools_memory.go:44.48,45.14 1 3 +github.com/thebtf/engram/internal/mcp/tools_memory.go:46.10,47.15 1 2 +github.com/thebtf/engram/internal/mcp/tools_memory.go:54.57,55.16 1 2 +github.com/thebtf/engram/internal/mcp/tools_memory.go:56.17,57.19 1 1 +github.com/thebtf/engram/internal/mcp/tools_memory.go:58.16,59.18 1 1 +github.com/thebtf/engram/internal/mcp/tools_memory.go:60.10,61.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:82.58,83.17 1 1 +github.com/thebtf/engram/internal/mcp/tools_memory.go:84.28,85.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:86.26,87.18 1 1 +github.com/thebtf/engram/internal/mcp/tools_memory.go:88.10,89.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:93.114,95.68 2 59 +github.com/thebtf/engram/internal/mcp/tools_memory.go:95.68,97.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:99.2,101.42 3 59 +github.com/thebtf/engram/internal/mcp/tools_memory.go:101.42,102.71 1 31 +github.com/thebtf/engram/internal/mcp/tools_memory.go:102.71,105.4 2 27 +github.com/thebtf/engram/internal/mcp/tools_memory.go:107.2,117.23 3 59 +github.com/thebtf/engram/internal/mcp/tools_memory.go:117.23,119.3 1 3 +github.com/thebtf/engram/internal/mcp/tools_memory.go:121.2,124.22 4 56 +github.com/thebtf/engram/internal/mcp/tools_memory.go:124.22,125.31 1 3 +github.com/thebtf/engram/internal/mcp/tools_memory.go:125.31,127.4 1 1 +github.com/thebtf/engram/internal/mcp/tools_memory.go:128.3,128.35 1 2 +github.com/thebtf/engram/internal/mcp/tools_memory.go:129.8,129.37 1 53 +github.com/thebtf/engram/internal/mcp/tools_memory.go:129.37,131.3 1 23 +github.com/thebtf/engram/internal/mcp/tools_memory.go:132.2,132.12 1 55 +github.com/thebtf/engram/internal/mcp/tools_memory.go:135.74,136.30 1 15 +github.com/thebtf/engram/internal/mcp/tools_memory.go:136.30,138.3 1 7 +github.com/thebtf/engram/internal/mcp/tools_memory.go:139.2,139.34 1 15 +github.com/thebtf/engram/internal/mcp/tools_memory.go:139.34,141.3 1 7 +github.com/thebtf/engram/internal/mcp/tools_memory.go:142.2,142.31 1 15 +github.com/thebtf/engram/internal/mcp/tools_memory.go:142.31,144.3 1 7 +github.com/thebtf/engram/internal/mcp/tools_memory.go:145.2,145.22 1 15 +github.com/thebtf/engram/internal/mcp/tools_memory.go:145.22,147.3 1 6 +github.com/thebtf/engram/internal/mcp/tools_memory.go:161.169,162.17 1 13 +github.com/thebtf/engram/internal/mcp/tools_memory.go:162.17,164.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:165.2,166.51 2 13 +github.com/thebtf/engram/internal/mcp/tools_memory.go:166.51,168.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:169.2,169.15 1 13 +github.com/thebtf/engram/internal/mcp/tools_memory.go:172.92,174.42 2 21 +github.com/thebtf/engram/internal/mcp/tools_memory.go:174.42,177.63 3 6 +github.com/thebtf/engram/internal/mcp/tools_memory.go:177.63,179.4 1 5 +github.com/thebtf/engram/internal/mcp/tools_memory.go:179.9,181.4 1 1 +github.com/thebtf/engram/internal/mcp/tools_memory.go:183.2,183.15 1 21 +github.com/thebtf/engram/internal/mcp/tools_memory.go:186.65,190.2 1 10 +github.com/thebtf/engram/internal/mcp/tools_memory.go:192.115,194.26 2 9 +github.com/thebtf/engram/internal/mcp/tools_memory.go:194.26,196.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:196.8,196.31 1 9 +github.com/thebtf/engram/internal/mcp/tools_memory.go:196.31,198.3 1 9 +github.com/thebtf/engram/internal/mcp/tools_memory.go:199.2,199.117 1 9 +github.com/thebtf/engram/internal/mcp/tools_memory.go:202.122,206.31 4 1 +github.com/thebtf/engram/internal/mcp/tools_memory.go:206.31,207.45 1 2 +github.com/thebtf/engram/internal/mcp/tools_memory.go:207.45,209.4 1 1 +github.com/thebtf/engram/internal/mcp/tools_memory.go:211.2,211.16 1 1 +github.com/thebtf/engram/internal/mcp/tools_memory.go:214.72,216.2 1 11 +github.com/thebtf/engram/internal/mcp/tools_memory.go:218.117,219.16 1 9 +github.com/thebtf/engram/internal/mcp/tools_memory.go:219.16,221.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:222.2,223.20 2 9 +github.com/thebtf/engram/internal/mcp/tools_memory.go:223.20,225.17 2 9 +github.com/thebtf/engram/internal/mcp/tools_memory.go:225.17,227.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:228.3,228.27 1 9 +github.com/thebtf/engram/internal/mcp/tools_memory.go:228.27,229.50 1 9 +github.com/thebtf/engram/internal/mcp/tools_memory.go:229.50,231.30 2 4 +github.com/thebtf/engram/internal/mcp/tools_memory.go:231.30,232.11 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:236.3,236.22 1 9 +github.com/thebtf/engram/internal/mcp/tools_memory.go:239.2,241.60 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:241.60,243.61 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:243.61,245.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:246.3,246.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:246.24,247.9 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:249.3,250.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:250.17,252.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:253.3,253.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:253.22,254.9 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:256.3,256.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:256.29,257.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:257.50,259.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:259.30,260.11 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:264.3,265.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:265.32,266.9 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:269.2,269.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:272.51,273.16 1 9 +github.com/thebtf/engram/internal/mcp/tools_memory.go:273.16,275.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:276.2,277.18 2 9 +github.com/thebtf/engram/internal/mcp/tools_memory.go:277.18,279.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_memory.go:280.2,280.19 1 9 +github.com/thebtf/engram/internal/mcp/tools_memory.go:280.19,282.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:283.2,283.15 1 9 +github.com/thebtf/engram/internal/mcp/tools_memory.go:286.97,288.30 2 4 +github.com/thebtf/engram/internal/mcp/tools_memory.go:288.30,290.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:291.2,291.49 1 4 +github.com/thebtf/engram/internal/mcp/tools_memory.go:291.49,293.3 1 3 +github.com/thebtf/engram/internal/mcp/tools_memory.go:294.2,294.17 1 1 +github.com/thebtf/engram/internal/mcp/tools_memory.go:297.108,299.2 1 4 +github.com/thebtf/engram/internal/mcp/tools_memory.go:301.108,303.2 1 1 +github.com/thebtf/engram/internal/mcp/tools_memory.go:305.102,307.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:319.55,320.31 1 13 +github.com/thebtf/engram/internal/mcp/tools_memory.go:320.31,322.3 1 13 +github.com/thebtf/engram/internal/mcp/tools_memory.go:323.2,323.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:323.26,325.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:326.2,326.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:329.71,330.17 1 15 +github.com/thebtf/engram/internal/mcp/tools_memory.go:343.26,344.14 1 15 +github.com/thebtf/engram/internal/mcp/tools_memory.go:345.10,346.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:354.95,362.16 3 34 +github.com/thebtf/engram/internal/mcp/tools_memory.go:362.16,364.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:366.2,397.39 14 34 +github.com/thebtf/engram/internal/mcp/tools_memory.go:397.39,399.27 2 20 +github.com/thebtf/engram/internal/mcp/tools_memory.go:399.27,401.4 1 20 +github.com/thebtf/engram/internal/mcp/tools_memory.go:402.8,404.3 1 14 +github.com/thebtf/engram/internal/mcp/tools_memory.go:405.2,407.46 3 34 +github.com/thebtf/engram/internal/mcp/tools_memory.go:407.46,410.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:411.2,411.44 1 34 +github.com/thebtf/engram/internal/mcp/tools_memory.go:411.44,413.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:413.12,415.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:417.2,417.26 1 34 +github.com/thebtf/engram/internal/mcp/tools_memory.go:417.26,419.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_memory.go:420.2,420.84 1 33 +github.com/thebtf/engram/internal/mcp/tools_memory.go:420.84,422.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:427.2,427.65 1 33 +github.com/thebtf/engram/internal/mcp/tools_memory.go:427.65,429.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_memory.go:431.2,433.20 3 32 +github.com/thebtf/engram/internal/mcp/tools_memory.go:433.20,435.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:436.2,437.20 2 32 +github.com/thebtf/engram/internal/mcp/tools_memory.go:437.20,439.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:440.2,440.56 1 32 +github.com/thebtf/engram/internal/mcp/tools_memory.go:440.56,442.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:443.2,443.56 1 32 +github.com/thebtf/engram/internal/mcp/tools_memory.go:443.56,448.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:450.2,450.45 1 32 +github.com/thebtf/engram/internal/mcp/tools_memory.go:450.45,453.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:459.2,459.31 1 32 +github.com/thebtf/engram/internal/mcp/tools_memory.go:459.31,461.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:461.22,462.62 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:462.62,465.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:466.4,466.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:468.3,468.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:471.2,472.115 2 32 +github.com/thebtf/engram/internal/mcp/tools_memory.go:472.115,474.3 1 2 +github.com/thebtf/engram/internal/mcp/tools_memory.go:491.2,491.19 1 30 +github.com/thebtf/engram/internal/mcp/tools_memory.go:491.19,493.23 2 2 +github.com/thebtf/engram/internal/mcp/tools_memory.go:493.23,495.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:496.3,508.21 4 2 +github.com/thebtf/engram/internal/mcp/tools_memory.go:508.21,510.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:511.3,511.26 1 2 +github.com/thebtf/engram/internal/mcp/tools_memory.go:522.2,522.43 1 28 +github.com/thebtf/engram/internal/mcp/tools_memory.go:522.43,535.34 5 11 +github.com/thebtf/engram/internal/mcp/tools_memory.go:535.34,556.30 4 10 +github.com/thebtf/engram/internal/mcp/tools_memory.go:556.30,558.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:559.4,559.44 1 10 +github.com/thebtf/engram/internal/mcp/tools_memory.go:559.44,561.5 1 4 +github.com/thebtf/engram/internal/mcp/tools_memory.go:562.4,562.106 1 10 +github.com/thebtf/engram/internal/mcp/tools_memory.go:562.106,564.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:575.4,575.74 1 10 +github.com/thebtf/engram/internal/mcp/tools_memory.go:575.74,577.5 1 1 +github.com/thebtf/engram/internal/mcp/tools_memory.go:578.4,579.18 2 9 +github.com/thebtf/engram/internal/mcp/tools_memory.go:579.18,581.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:583.4,584.28 2 9 +github.com/thebtf/engram/internal/mcp/tools_memory.go:584.28,586.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:588.4,588.31 1 9 +github.com/thebtf/engram/internal/mcp/tools_memory.go:588.31,599.57 2 3 +github.com/thebtf/engram/internal/mcp/tools_memory.go:599.57,601.17 2 2 +github.com/thebtf/engram/internal/mcp/tools_memory.go:601.17,604.7 2 2 +github.com/thebtf/engram/internal/mcp/tools_memory.go:606.5,607.21 2 3 +github.com/thebtf/engram/internal/mcp/tools_memory.go:607.21,609.6 1 2 +github.com/thebtf/engram/internal/mcp/tools_memory.go:615.5,615.138 1 1 +github.com/thebtf/engram/internal/mcp/tools_memory.go:615.138,617.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:617.27,619.7 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:620.6,620.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:622.5,623.26 2 1 +github.com/thebtf/engram/internal/mcp/tools_memory.go:623.26,625.6 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:626.5,626.28 1 1 +github.com/thebtf/engram/internal/mcp/tools_memory.go:630.4,631.20 2 6 +github.com/thebtf/engram/internal/mcp/tools_memory.go:631.20,633.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:634.4,634.22 1 6 +github.com/thebtf/engram/internal/mcp/tools_memory.go:634.22,637.26 2 3 +github.com/thebtf/engram/internal/mcp/tools_memory.go:637.26,639.6 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:640.5,640.28 1 3 +github.com/thebtf/engram/internal/mcp/tools_memory.go:645.4,660.77 4 3 +github.com/thebtf/engram/internal/mcp/tools_memory.go:660.77,662.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:663.4,664.25 2 3 +github.com/thebtf/engram/internal/mcp/tools_memory.go:664.25,666.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:667.4,667.27 1 3 +github.com/thebtf/engram/internal/mcp/tools_memory.go:673.2,673.26 1 18 +github.com/thebtf/engram/internal/mcp/tools_memory.go:673.26,675.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_memory.go:677.2,678.25 2 17 +github.com/thebtf/engram/internal/mcp/tools_memory.go:678.25,680.3 1 11 +github.com/thebtf/engram/internal/mcp/tools_memory.go:681.2,681.97 1 17 +github.com/thebtf/engram/internal/mcp/tools_memory.go:681.97,683.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:690.2,691.21 2 17 +github.com/thebtf/engram/internal/mcp/tools_memory.go:691.21,693.33 2 5 +github.com/thebtf/engram/internal/mcp/tools_memory.go:693.33,695.4 1 2 +github.com/thebtf/engram/internal/mcp/tools_memory.go:696.3,696.33 1 5 +github.com/thebtf/engram/internal/mcp/tools_memory.go:696.33,698.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:699.3,699.49 1 5 +github.com/thebtf/engram/internal/mcp/tools_memory.go:699.49,704.4 1 2 +github.com/thebtf/engram/internal/mcp/tools_memory.go:721.3,721.54 1 3 +github.com/thebtf/engram/internal/mcp/tools_memory.go:721.54,722.84 1 1 +github.com/thebtf/engram/internal/mcp/tools_memory.go:722.84,724.5 1 1 +github.com/thebtf/engram/internal/mcp/tools_memory.go:728.2,728.99 1 15 +github.com/thebtf/engram/internal/mcp/tools_memory.go:728.99,730.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:732.2,733.22 2 15 +github.com/thebtf/engram/internal/mcp/tools_memory.go:733.22,735.10 2 15 +github.com/thebtf/engram/internal/mcp/tools_memory.go:736.109,737.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:738.100,739.25 1 4 +github.com/thebtf/engram/internal/mcp/tools_memory.go:740.114,741.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:742.107,743.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:744.11,745.26 1 11 +github.com/thebtf/engram/internal/mcp/tools_memory.go:748.2,749.43 2 15 +github.com/thebtf/engram/internal/mcp/tools_memory.go:749.43,751.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:753.2,755.34 3 15 +github.com/thebtf/engram/internal/mcp/tools_memory.go:755.34,756.48 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:756.48,757.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:757.19,760.5 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:764.2,764.31 1 15 +github.com/thebtf/engram/internal/mcp/tools_memory.go:764.31,767.3 2 15 +github.com/thebtf/engram/internal/mcp/tools_memory.go:768.2,768.35 1 15 +github.com/thebtf/engram/internal/mcp/tools_memory.go:768.35,771.3 2 15 +github.com/thebtf/engram/internal/mcp/tools_memory.go:772.2,772.76 1 15 +github.com/thebtf/engram/internal/mcp/tools_memory.go:772.76,776.3 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:778.2,780.16 3 15 +github.com/thebtf/engram/internal/mcp/tools_memory.go:780.16,782.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:782.20,785.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:788.2,788.25 1 15 +github.com/thebtf/engram/internal/mcp/tools_memory.go:788.25,798.18 1 2 +github.com/thebtf/engram/internal/mcp/tools_memory.go:798.18,800.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:800.9,800.30 1 2 +github.com/thebtf/engram/internal/mcp/tools_memory.go:800.30,807.4 1 1 +github.com/thebtf/engram/internal/mcp/tools_memory.go:808.3,808.36 1 1 +github.com/thebtf/engram/internal/mcp/tools_memory.go:808.36,810.4 1 1 +github.com/thebtf/engram/internal/mcp/tools_memory.go:811.3,812.50 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:812.50,815.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:816.3,822.17 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:822.17,824.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:826.3,836.17 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:836.17,838.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:839.3,839.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:842.2,843.30 2 13 +github.com/thebtf/engram/internal/mcp/tools_memory.go:843.30,844.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:844.52,846.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:846.9,848.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:851.2,869.21 2 13 +github.com/thebtf/engram/internal/mcp/tools_memory.go:869.21,871.43 2 3 +github.com/thebtf/engram/internal/mcp/tools_memory.go:871.43,873.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:874.3,874.29 1 3 +github.com/thebtf/engram/internal/mcp/tools_memory.go:874.29,876.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:886.3,886.76 1 3 +github.com/thebtf/engram/internal/mcp/tools_memory.go:886.76,888.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:890.2,890.105 1 13 +github.com/thebtf/engram/internal/mcp/tools_memory.go:890.105,892.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:893.2,894.16 2 13 +github.com/thebtf/engram/internal/mcp/tools_memory.go:894.16,896.3 1 3 +github.com/thebtf/engram/internal/mcp/tools_memory.go:901.2,904.40 4 10 +github.com/thebtf/engram/internal/mcp/tools_memory.go:904.40,905.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:905.15,906.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:909.3,910.63 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:910.63,912.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:912.9,914.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:916.3,916.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:916.43,918.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:919.3,920.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:920.20,922.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:925.3,925.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:925.23,928.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:929.3,931.33 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:931.33,934.39 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:934.39,936.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:939.2,948.42 5 10 +github.com/thebtf/engram/internal/mcp/tools_memory.go:948.42,950.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:950.21,952.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:952.9,955.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:959.2,959.53 1 10 +github.com/thebtf/engram/internal/mcp/tools_memory.go:959.53,960.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:960.54,961.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:961.33,963.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:964.9,972.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:973.3,973.60 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:973.60,974.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:974.40,976.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:978.3,978.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:978.61,979.41 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:979.41,981.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:983.3,983.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:983.28,985.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:986.3,987.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:989.2,989.51 1 10 +github.com/thebtf/engram/internal/mcp/tools_memory.go:989.51,991.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:995.2,997.53 3 10 +github.com/thebtf/engram/internal/mcp/tools_memory.go:997.53,999.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:999.8,1001.3 1 10 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1002.2,1002.22 1 10 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1002.22,1004.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1008.2,1014.76 3 10 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1014.76,1016.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1021.2,1021.57 1 10 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1021.57,1026.13 5 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1026.13,1029.21 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1029.21,1032.5 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1033.4,1033.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1033.49,1035.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1036.4,1043.89 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1043.89,1046.5 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1048.4,1048.86 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1052.2,1063.21 2 10 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1063.21,1065.40 2 3 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1065.40,1067.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1068.3,1068.38 1 3 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1068.38,1070.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1072.2,1074.18 3 10 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1074.18,1081.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1082.2,1082.28 1 10 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1082.28,1084.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1085.2,1085.16 1 10 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1085.16,1087.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1088.2,1088.30 1 10 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1088.30,1090.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1091.2,1091.30 1 10 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1091.30,1093.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1098.2,1098.76 1 10 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1098.76,1100.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1101.2,1102.16 2 10 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1102.16,1104.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1105.2,1105.25 1 10 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1111.94,1113.15 2 13 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1113.15,1115.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1117.2,1118.16 2 13 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1118.16,1120.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1122.2,1123.13 2 13 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1123.13,1125.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1126.2,1131.16 4 13 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1131.16,1133.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1134.2,1134.19 1 13 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1134.19,1136.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1146.2,1146.39 1 13 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1146.39,1148.55 2 3 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1148.55,1150.4 1 2 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1152.2,1152.39 1 11 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1152.39,1154.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1157.2,1158.21 2 10 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1158.21,1163.21 3 10 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1163.21,1165.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1166.3,1167.21 2 10 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1167.21,1169.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1170.3,1170.52 1 10 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1170.52,1172.4 1 1 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1173.3,1173.52 1 9 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1173.52,1178.4 2 1 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1179.3,1179.41 1 9 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1179.41,1182.4 2 1 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1183.3,1183.30 1 9 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1188.2,1188.46 1 9 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1188.46,1190.3 1 2 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1191.2,1191.27 1 9 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1191.27,1193.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1195.2,1196.16 2 9 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1196.16,1198.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1201.2,1210.16 4 9 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1210.16,1212.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1213.2,1213.25 1 9 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1218.59,1220.38 1 15 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1220.38,1222.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1225.2,1226.29 2 15 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1226.29,1227.22 1 30 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1227.22,1229.9 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1232.2,1232.18 1 15 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1232.18,1234.3 1 15 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1237.2,1244.29 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1244.29,1245.67 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1245.67,1247.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1249.2,1249.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1249.16,1251.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1254.2,1254.11 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1258.55,1260.47 2 35 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1260.47,1262.3 1 33 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1263.2,1264.58 2 2 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1264.58,1266.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1267.2,1267.26 1 2 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1270.252,1271.108 1 28 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1271.108,1273.3 1 2 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1274.2,1274.55 1 26 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1274.55,1276.3 1 13 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1277.2,1277.13 1 13 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1280.184,1282.69 2 35 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1282.69,1284.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1284.32,1285.58 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1285.58,1287.10 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1290.3,1290.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1290.18,1292.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1294.2,1294.19 1 35 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1294.19,1297.32 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1297.32,1298.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1298.39,1300.10 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1303.3,1303.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1303.19,1305.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1307.2,1307.21 1 35 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1307.21,1309.32 2 8 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1309.32,1310.49 1 12 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1310.49,1312.10 2 4 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1315.3,1315.18 1 8 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1315.18,1317.4 1 4 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1319.2,1319.28 1 31 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1319.28,1321.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1321.17,1323.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1324.3,1324.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1324.27,1326.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1328.2,1328.76 1 31 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1328.76,1330.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1331.2,1331.13 1 31 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1342.96,1343.26 1 20 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1343.26,1345.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1347.2,1348.16 2 20 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1348.16,1350.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1352.2,1363.23 9 20 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1363.23,1364.58 1 1 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1364.58,1365.31 1 1 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1365.31,1367.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1367.10,1369.5 1 1 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1373.2,1373.17 1 19 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1373.17,1375.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1376.2,1376.16 1 19 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1376.16,1378.3 1 12 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1379.2,1379.16 1 19 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1379.16,1381.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1382.2,1382.18 1 19 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1382.18,1384.3 1 2 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1385.2,1385.19 1 19 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1385.19,1387.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1388.2,1388.19 1 19 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1388.19,1390.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1396.2,1399.18 4 19 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1399.18,1400.61 1 5 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1400.61,1401.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1402.50,1403.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1404.12,1405.108 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1409.2,1410.42 2 19 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1410.42,1414.3 3 12 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1415.2,1420.16 3 19 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1420.16,1422.3 1 3 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1429.2,1444.43 6 16 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1444.43,1446.3 1 4 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1449.2,1451.27 3 12 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1451.27,1453.3 1 2 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1458.2,1458.46 1 12 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1458.46,1460.3 1 26 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1461.2,1461.63 1 12 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1461.63,1463.3 1 7 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1465.2,1466.15 2 12 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1466.15,1472.29 3 1 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1472.29,1479.18 2 1 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1479.18,1481.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1482.4,1482.23 1 1 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1482.23,1483.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1485.4,1485.30 1 1 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1485.30,1486.24 1 2 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1486.24,1488.32 2 2 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1488.32,1489.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1493.4,1494.30 2 1 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1494.30,1495.10 1 1 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1498.8,1504.29 3 11 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1504.29,1506.18 2 11 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1506.18,1508.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1509.4,1509.23 1 11 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1509.23,1510.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1512.4,1512.30 1 11 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1512.30,1513.24 1 24 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1513.24,1515.32 2 10 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1515.32,1516.12 1 2 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1520.4,1521.30 2 11 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1521.30,1522.10 1 11 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1526.2,1526.26 1 12 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1526.26,1528.17 2 6 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1528.17,1530.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1535.2,1535.74 1 12 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1535.74,1536.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1536.13,1537.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1537.33,1542.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1542.26,1544.39 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1544.39,1546.7 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1548.5,1548.82 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1565.2,1565.38 1 12 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1565.38,1569.27 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1569.27,1571.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1572.3,1572.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1572.27,1574.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1576.3,1581.32 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1581.32,1586.4 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1588.3,1592.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1592.18,1594.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1595.3,1596.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1596.17,1598.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1599.3,1599.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1602.2,1602.16 1 12 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1603.15,1618.32 3 9 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1618.32,1620.33 2 12 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1620.33,1621.40 1 12 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1621.40,1623.11 2 12 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1626.4,1638.6 1 12 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1640.3,1641.17 2 9 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1641.17,1643.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1644.3,1644.26 1 9 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1646.18,1648.17 2 1 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1648.17,1650.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1651.3,1651.26 1 1 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1653.10,1654.25 1 2 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1654.25,1656.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1657.3,1659.32 3 2 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1659.32,1661.33 2 2 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1661.33,1662.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1662.40,1664.11 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1667.4,1669.26 3 2 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1669.26,1671.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1672.4,1673.25 2 2 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1673.25,1675.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1676.4,1676.24 1 2 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1678.3,1678.26 1 2 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1690.51,1695.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1700.73,1702.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1702.16,1704.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1705.2,1706.48 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1706.48,1710.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1711.2,1713.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1713.16,1715.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1716.2,1716.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1727.117,1731.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1731.21,1733.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1734.2,1735.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1735.16,1737.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1738.2,1739.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1739.27,1741.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1742.2,1742.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1764.19,1775.30 7 4 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1775.30,1777.37 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1777.37,1779.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1781.3,1781.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1781.20,1783.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1797.2,1797.39 1 4 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1797.39,1799.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1801.2,1811.25 3 3 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1811.25,1813.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1815.2,1816.29 2 3 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1816.29,1818.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1824.2,1824.27 1 3 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1824.27,1826.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1831.2,1833.22 3 3 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1833.22,1835.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1837.2,1846.16 2 3 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1846.16,1848.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1853.2,1855.27 3 3 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1855.27,1857.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1859.2,1876.33 3 3 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1876.33,1878.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1880.2,1881.28 2 3 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1881.28,1885.20 2 2 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1885.20,1888.33 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1888.33,1889.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1889.40,1891.11 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1894.4,1894.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1894.20,1895.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1900.3,1900.22 1 2 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1900.22,1902.33 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1902.33,1903.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1903.50,1905.11 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1908.4,1908.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1908.19,1909.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1918.3,1918.56 1 2 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1918.56,1919.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1927.3,1927.64 1 2 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1927.64,1928.12 1 1 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1932.3,1935.32 3 1 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1935.32,1936.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1936.39,1938.10 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1942.3,1956.14 2 1 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1956.14,1957.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1957.37,1959.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1961.3,1962.26 2 1 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1962.26,1963.9 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1975.2,1975.59 1 3 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1975.59,1986.17 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1986.17,1988.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1990.3,1991.34 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1991.34,1993.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1995.3,1996.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1996.29,1998.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1998.21,2001.34 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2001.34,2002.41 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2002.41,2004.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2007.5,2007.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2007.21,2008.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2011.4,2011.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2011.23,2013.34 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2013.34,2014.51 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2014.51,2016.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2019.5,2019.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2019.20,2020.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2023.4,2023.57 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2023.57,2024.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2027.4,2027.65 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2027.65,2028.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2030.4,2031.33 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2031.33,2032.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2032.40,2034.11 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2037.4,2051.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2051.15,2052.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2052.38,2054.6 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2056.4,2057.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2057.27,2058.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2065.2,2066.28 2 3 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2066.28,2068.3 1 2 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2072.2,2072.71 1 3 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2072.71,2080.30 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2080.30,2081.41 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2081.41,2087.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2089.3,2089.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2089.13,2090.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2090.31,2095.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2095.25,2097.38 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2097.38,2099.7 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2101.5,2101.81 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2112.2,2112.38 1 3 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2112.38,2115.27 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2115.27,2117.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2121.3,2138.30 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2138.30,2140.11 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2140.11,2141.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2143.4,2160.15 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2160.15,2161.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2161.39,2163.6 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2165.4,2165.46 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2167.3,2173.24 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2173.24,2175.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2176.3,2176.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2179.2,2179.16 1 3 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2180.15,2182.24 2 2 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2182.24,2184.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2185.3,2185.26 1 2 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2187.18,2199.30 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2199.30,2201.11 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2201.11,2202.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2204.4,2208.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2208.15,2209.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2209.39,2211.6 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2213.4,2213.35 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2215.3,2216.24 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2216.24,2218.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2219.3,2219.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2220.10,2221.22 1 1 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2221.22,2223.4 1 1 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2224.3,2226.27 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2226.27,2228.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2228.20,2230.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2231.4,2233.26 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2233.26,2235.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2236.4,2237.23 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2237.23,2239.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2240.4,2240.46 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2240.46,2244.5 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2245.4,2245.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2247.3,2247.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2252.94,2254.16 2 2 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2254.16,2256.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2258.2,2260.18 3 2 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2260.18,2261.59 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2261.59,2262.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2262.36,2264.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2264.10,2266.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2270.2,2270.13 1 2 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2270.13,2272.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2273.2,2273.50 1 2 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2273.50,2275.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2277.2,2277.98 1 2 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2281.98,2282.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2282.26,2284.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2286.2,2287.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2287.16,2289.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2291.2,2292.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2292.13,2294.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2297.2,2298.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2298.19,2299.51 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2299.51,2301.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2302.3,2302.55 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2304.2,2304.42 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2304.42,2306.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2308.2,2308.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2308.54,2309.48 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2309.48,2311.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2312.3,2312.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2316.2,2318.53 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:17.82,19.2 1 5 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:21.149,22.55 1 22 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:22.55,24.3 1 11 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:25.2,25.36 1 11 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:25.36,27.3 1 4 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:28.2,34.16 2 7 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:34.16,36.3 1 3 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:37.2,37.42 1 4 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:37.42,39.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:40.2,40.22 1 4 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:43.105,44.48 1 13 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:44.48,46.3 1 12 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:47.2,48.54 2 1 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:51.129,53.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:53.16,55.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:56.2,57.53 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:57.53,59.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:60.2,61.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:61.25,63.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:64.2,65.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:65.16,67.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:68.2,68.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:26.97,27.18 1 2 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:27.18,29.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:30.2,30.54 1 2 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:33.37,35.2 1 73 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:37.81,38.44 1 12 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:38.44,40.3 1 10 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:41.2,41.38 1 2 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:41.38,43.3 1 2 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:44.2,44.57 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:47.88,48.32 1 11 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:48.32,50.3 1 2 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:51.2,52.20 2 9 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:52.20,54.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:55.2,55.21 1 8 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:58.40,72.2 1 2 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:74.106,75.34 1 11 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:75.34,77.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:78.2,79.16 2 11 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:79.16,81.3 1 3 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:83.2,84.16 2 8 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:84.16,86.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:88.2,89.13 2 8 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:89.13,91.3 1 3 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:93.2,94.63 2 5 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:94.63,96.3 1 3 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:98.2,98.72 1 2 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:98.72,100.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:102.2,106.4 1 2 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:109.117,110.32 1 2 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:110.32,112.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:113.2,113.34 1 2 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:113.34,115.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:117.2,118.16 2 2 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:118.16,120.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:121.2,121.19 1 2 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:121.19,123.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:125.2,126.69 2 2 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:126.69,128.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:130.2,136.4 1 2 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:18.33,20.2 1 72 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:22.27,37.2 1 2 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:39.93,40.30 1 10 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:40.30,42.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:43.2,43.28 1 10 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:43.28,45.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:46.2,47.16 2 10 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:47.16,49.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:51.2,52.17 2 10 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:52.17,54.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:55.2,56.19 2 10 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:56.19,58.3 1 2 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:59.2,59.19 1 10 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:59.19,61.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:62.2,63.16 2 9 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:63.16,65.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:67.2,74.9 3 9 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:74.9,76.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:77.2,78.15 2 9 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:78.15,80.3 1 2 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:81.2,85.16 4 7 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:85.16,87.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:88.2,88.17 1 6 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:88.17,90.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:92.2,101.30 2 6 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:104.48,105.16 1 9 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:105.16,107.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:108.2,109.29 2 9 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:109.29,111.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:112.2,112.31 1 9 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:112.31,114.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:115.2,115.19 1 8 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:118.75,120.27 2 6 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:120.27,121.32 1 29 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:121.32,123.17 2 31 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:123.17,124.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:126.4,126.17 1 31 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:129.2,134.33 3 6 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:134.33,136.3 1 6 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:137.2,137.40 1 6 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:137.40,138.39 1 2 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:138.39,140.4 1 1 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:141.3,141.37 1 1 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:143.2,143.34 1 6 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:143.34,145.3 1 6 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:146.2,147.35 2 6 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:147.35,149.3 1 6 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:150.2,150.12 1 6 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:153.77,154.20 1 6 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:154.20,156.3 1 2 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:157.2,159.31 3 4 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:159.31,160.33 1 25 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:160.33,162.4 1 1 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:163.3,163.30 1 25 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:163.30,165.4 1 24 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:167.2,170.3 1 4 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:23.91,25.2 1 14 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:27.38,50.2 1 1 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:52.104,53.38 1 5 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:53.38,55.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:56.2,57.16 2 5 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:57.16,59.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:61.2,62.26 2 5 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:62.26,64.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:65.2,66.30 2 5 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:66.30,68.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:69.2,69.72 1 5 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:69.72,71.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:73.2,74.16 2 4 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:74.16,76.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:77.2,78.16 2 4 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:78.16,80.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:81.2,82.16 2 3 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:82.16,84.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:85.2,86.16 2 3 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:86.16,88.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:90.2,105.16 3 3 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:105.16,107.3 1 2 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:109.2,109.19 1 1 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:109.19,117.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:118.2,118.25 1 1 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:118.25,120.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:121.2,121.30 1 1 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:121.30,123.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:124.2,124.31 1 1 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:124.31,126.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:127.2,128.16 2 1 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:128.16,130.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:131.2,131.25 1 1 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:134.91,136.9 2 10 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:136.9,138.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:139.2,140.15 2 9 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:140.15,141.19 1 3 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:141.19,143.4 1 3 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:144.3,144.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:146.2,146.94 1 6 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:149.59,150.16 1 4 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:150.16,152.3 1 2 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:153.2,154.61 2 2 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:154.61,156.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:157.2,157.15 1 1 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:160.56,161.75 1 3 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:161.75,163.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:164.2,164.52 1 2 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:167.67,169.20 2 4 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:170.17,171.17 1 4 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:172.67,173.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:174.10,175.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:179.60,180.16 1 3 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:180.16,182.3 1 3 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:183.2,184.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:184.25,186.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:187.2,187.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:190.57,191.25 1 11 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:192.15,193.81 1 11 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:193.81,195.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:196.3,196.21 1 11 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:197.19,199.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:199.17,201.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:202.3,202.55 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:202.55,204.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:205.3,205.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:206.14,207.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:208.11,209.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:210.10,211.41 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:215.59,216.16 1 3 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:216.16,218.3 1 2 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:219.2,219.25 1 1 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:220.12,221.16 1 1 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:222.14,223.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:224.10,225.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:28.90,30.16 2 7 +github.com/thebtf/engram/internal/mcp/tools_recall.go:30.16,32.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:34.2,36.16 2 7 +github.com/thebtf/engram/internal/mcp/tools_recall.go:37.16,38.38 1 5 +github.com/thebtf/engram/internal/mcp/tools_recall.go:40.16,42.140 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:44.20,46.140 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:48.17,50.142 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:52.17,56.50 1 1 +github.com/thebtf/engram/internal/mcp/tools_recall.go:56.50,62.63 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:62.63,64.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:66.4,66.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:66.45,68.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:72.4,74.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:74.25,76.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:77.4,77.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:80.3,80.101 1 1 +github.com/thebtf/engram/internal/mcp/tools_recall.go:82.18,84.141 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:86.18,88.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:88.18,90.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:91.3,91.41 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:93.17,96.50 1 1 +github.com/thebtf/engram/internal/mcp/tools_recall.go:96.50,99.59 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:99.59,101.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:102.4,104.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:104.25,106.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:107.4,107.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:110.3,110.98 1 1 +github.com/thebtf/engram/internal/mcp/tools_recall.go:112.10,116.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:125.86,126.16 1 20 +github.com/thebtf/engram/internal/mcp/tools_recall.go:126.16,128.3 1 10 +github.com/thebtf/engram/internal/mcp/tools_recall.go:129.2,130.9 2 10 +github.com/thebtf/engram/internal/mcp/tools_recall.go:130.9,132.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:133.2,133.22 1 10 +github.com/thebtf/engram/internal/mcp/tools_recall.go:133.22,135.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_recall.go:137.2,139.31 3 9 +github.com/thebtf/engram/internal/mcp/tools_recall.go:139.31,141.10 2 10 +github.com/thebtf/engram/internal/mcp/tools_recall.go:141.10,143.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:144.3,145.22 2 10 +github.com/thebtf/engram/internal/mcp/tools_recall.go:145.22,147.4 1 1 +github.com/thebtf/engram/internal/mcp/tools_recall.go:148.3,149.26 2 9 +github.com/thebtf/engram/internal/mcp/tools_recall.go:149.26,151.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:152.3,152.68 1 9 +github.com/thebtf/engram/internal/mcp/tools_recall.go:152.68,154.4 1 1 +github.com/thebtf/engram/internal/mcp/tools_recall.go:155.3,156.37 2 8 +github.com/thebtf/engram/internal/mcp/tools_recall.go:156.37,158.4 1 1 +github.com/thebtf/engram/internal/mcp/tools_recall.go:159.3,160.107 2 7 +github.com/thebtf/engram/internal/mcp/tools_recall.go:162.2,162.28 1 6 +github.com/thebtf/engram/internal/mcp/tools_recall.go:165.249,166.24 1 6 +github.com/thebtf/engram/internal/mcp/tools_recall.go:166.24,168.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:169.2,169.38 1 6 +github.com/thebtf/engram/internal/mcp/tools_recall.go:169.38,171.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:173.2,174.31 2 6 +github.com/thebtf/engram/internal/mcp/tools_recall.go:174.31,175.32 1 2 +github.com/thebtf/engram/internal/mcp/tools_recall.go:175.32,177.4 1 2 +github.com/thebtf/engram/internal/mcp/tools_recall.go:180.2,181.34 2 6 +github.com/thebtf/engram/internal/mcp/tools_recall.go:181.34,182.29 1 6 +github.com/thebtf/engram/internal/mcp/tools_recall.go:182.29,183.9 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:185.3,197.17 3 6 +github.com/thebtf/engram/internal/mcp/tools_recall.go:197.17,199.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:200.3,200.20 1 6 +github.com/thebtf/engram/internal/mcp/tools_recall.go:200.20,201.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:203.3,203.37 1 6 +github.com/thebtf/engram/internal/mcp/tools_recall.go:203.37,205.33 2 7 +github.com/thebtf/engram/internal/mcp/tools_recall.go:205.33,206.13 1 2 +github.com/thebtf/engram/internal/mcp/tools_recall.go:208.4,208.19 1 5 +github.com/thebtf/engram/internal/mcp/tools_recall.go:208.19,209.43 1 5 +github.com/thebtf/engram/internal/mcp/tools_recall.go:209.43,210.14 1 2 +github.com/thebtf/engram/internal/mcp/tools_recall.go:212.5,212.30 1 3 +github.com/thebtf/engram/internal/mcp/tools_recall.go:214.4,215.30 2 3 +github.com/thebtf/engram/internal/mcp/tools_recall.go:215.30,216.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:220.2,220.22 1 6 +github.com/thebtf/engram/internal/mcp/tools_recall.go:223.113,229.2 5 3 +github.com/thebtf/engram/internal/mcp/tools_recall.go:231.101,233.2 1 7 +github.com/thebtf/engram/internal/mcp/tools_recall.go:247.92,251.16 4 5 +github.com/thebtf/engram/internal/mcp/tools_recall.go:251.16,253.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:253.8,253.24 1 5 +github.com/thebtf/engram/internal/mcp/tools_recall.go:253.24,255.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:259.2,272.51 3 5 +github.com/thebtf/engram/internal/mcp/tools_recall.go:272.51,274.38 2 2 +github.com/thebtf/engram/internal/mcp/tools_recall.go:274.38,275.13 1 2 +github.com/thebtf/engram/internal/mcp/tools_recall.go:276.50,277.28 1 1 +github.com/thebtf/engram/internal/mcp/tools_recall.go:278.12,279.107 1 1 +github.com/thebtf/engram/internal/mcp/tools_recall.go:287.2,292.26 5 4 +github.com/thebtf/engram/internal/mcp/tools_recall.go:292.26,294.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:297.2,297.19 1 4 +github.com/thebtf/engram/internal/mcp/tools_recall.go:297.19,301.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:303.2,311.42 5 4 +github.com/thebtf/engram/internal/mcp/tools_recall.go:311.42,315.3 3 2 +github.com/thebtf/engram/internal/mcp/tools_recall.go:316.2,341.64 3 4 +github.com/thebtf/engram/internal/mcp/tools_recall.go:341.64,342.86 1 12 +github.com/thebtf/engram/internal/mcp/tools_recall.go:342.86,344.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:345.3,345.56 1 12 +github.com/thebtf/engram/internal/mcp/tools_recall.go:345.56,347.4 1 6 +github.com/thebtf/engram/internal/mcp/tools_recall.go:348.3,360.19 6 6 +github.com/thebtf/engram/internal/mcp/tools_recall.go:360.19,364.4 3 2 +github.com/thebtf/engram/internal/mcp/tools_recall.go:365.3,365.18 1 6 +github.com/thebtf/engram/internal/mcp/tools_recall.go:369.2,370.15 2 4 +github.com/thebtf/engram/internal/mcp/tools_recall.go:370.15,372.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:372.27,374.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:375.3,375.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:375.27,377.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:380.2,381.15 2 4 +github.com/thebtf/engram/internal/mcp/tools_recall.go:381.15,387.28 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:387.28,395.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:395.18,397.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:398.4,398.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:398.23,399.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:401.4,401.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:401.30,402.66 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:402.66,403.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:405.5,406.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:406.12,407.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:409.5,409.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:409.28,413.6 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:414.5,415.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:415.30,416.11 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:419.4,420.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:420.30,421.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:424.8,432.28 3 4 +github.com/thebtf/engram/internal/mcp/tools_recall.go:432.28,438.18 2 4 +github.com/thebtf/engram/internal/mcp/tools_recall.go:438.18,440.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:441.4,441.23 1 4 +github.com/thebtf/engram/internal/mcp/tools_recall.go:441.23,442.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:444.4,444.30 1 4 +github.com/thebtf/engram/internal/mcp/tools_recall.go:444.30,445.40 1 12 +github.com/thebtf/engram/internal/mcp/tools_recall.go:445.40,447.31 2 6 +github.com/thebtf/engram/internal/mcp/tools_recall.go:447.31,448.12 1 2 +github.com/thebtf/engram/internal/mcp/tools_recall.go:452.4,455.30 2 4 +github.com/thebtf/engram/internal/mcp/tools_recall.go:455.30,456.10 1 4 +github.com/thebtf/engram/internal/mcp/tools_recall.go:461.2,465.17 2 4 +github.com/thebtf/engram/internal/mcp/tools_recall.go:465.17,467.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_recall.go:469.2,470.16 2 4 +github.com/thebtf/engram/internal/mcp/tools_recall.go:470.16,472.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:473.2,473.28 1 4 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:20.79,21.43 1 3 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:21.43,23.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:24.2,24.29 1 2 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:24.29,26.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:27.2,27.25 1 2 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:30.40,63.2 1 1 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:65.68,71.25 2 2 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:71.25,74.3 2 1 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:75.2,75.67 1 2 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:78.62,83.19 3 3 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:83.19,87.3 3 2 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:88.2,88.89 1 3 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:91.101,92.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:92.22,94.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:95.2,96.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:96.18,98.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:99.2,100.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:100.16,102.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:103.2,104.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:104.16,106.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:107.2,107.119 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:110.99,111.22 1 3 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:111.22,113.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:114.2,115.18 2 3 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:115.18,117.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:118.2,119.16 2 3 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:119.16,121.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:122.2,122.51 1 2 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:122.51,124.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:125.2,126.16 2 1 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:126.16,128.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:129.2,131.15 3 1 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:131.15,132.69 1 1 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:132.69,134.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:135.3,135.58 1 1 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:137.2,137.130 1 1 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:140.102,142.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:142.16,144.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:145.2,145.64 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:145.64,147.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:148.2,148.113 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:151.109,153.16 2 1 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:153.16,155.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:156.2,157.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:157.16,159.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:160.2,161.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:161.16,163.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:164.2,164.67 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:167.107,169.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:169.16,171.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:172.2,173.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:173.16,175.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:176.2,176.107 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:176.107,178.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:179.2,179.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:180.41,181.63 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:182.41,183.95 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:184.10,185.83 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:189.111,191.16 2 3 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:191.16,193.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:194.2,195.57 2 3 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:195.57,197.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:198.2,199.23 2 3 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:199.23,201.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:202.2,203.16 2 3 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:203.16,205.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:206.2,206.17 1 3 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:206.17,208.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:209.2,209.108 1 2 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:212.63,215.2 2 2 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:217.69,219.16 2 1 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:219.16,221.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:222.2,222.79 1 1 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:225.60,227.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:227.16,229.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:230.2,230.57 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:233.137,234.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:234.49,236.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:237.2,238.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:238.16,240.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:241.2,243.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:243.16,245.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:246.2,247.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:247.16,249.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:250.2,250.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:250.22,252.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:253.2,253.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:256.142,258.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:258.16,260.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:261.2,262.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:262.16,264.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:265.2,265.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:265.47,267.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:268.2,269.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:269.16,270.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:270.50,272.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:273.3,273.89 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:275.2,275.173 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:278.157,280.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:280.16,282.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:283.2,283.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:283.47,285.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:286.2,287.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:287.16,288.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:288.50,290.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:291.3,291.89 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:293.2,293.169 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:296.104,297.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:297.22,299.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:300.2,301.61 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:301.61,303.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:303.20,304.9 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:307.2,307.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:307.19,309.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:310.2,317.8 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:320.119,322.39 2 1 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:322.39,323.81 1 2 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:323.81,325.4 1 1 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:327.2,327.17 1 1 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:330.71,332.16 2 2 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:332.16,334.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:335.2,335.23 1 2 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:17.61,105.23 2 1 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:105.23,122.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:123.2,123.14 1 1 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:126.104,127.61 1 6 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:127.61,129.3 1 2 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:130.2,130.38 1 4 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:130.38,132.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:133.2,134.16 2 3 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:134.16,136.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:137.2,138.16 2 3 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:138.16,140.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:141.2,147.107 2 3 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:147.107,149.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:150.2,151.16 2 2 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:151.16,153.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:154.2,170.19 2 2 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:170.19,172.3 1 2 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:173.2,173.25 1 2 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:176.103,177.61 1 3 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:177.61,179.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:180.2,180.38 1 3 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:180.38,182.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:183.2,184.16 2 3 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:184.16,186.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:187.2,191.106 2 3 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:191.106,193.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:194.2,195.16 2 2 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:195.16,197.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:198.2,200.31 3 2 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:200.31,207.36 2 1 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:207.36,218.4 1 1 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:219.3,220.35 2 1 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:222.2,230.4 1 2 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:233.107,234.61 1 3 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:234.61,236.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:237.2,237.38 1 3 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:237.38,239.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:240.2,241.16 2 3 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:241.16,243.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:244.2,248.110 2 3 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:248.110,250.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:251.2,252.16 2 2 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:252.16,254.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:255.2,256.33 2 2 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:256.33,266.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:267.2,275.4 1 2 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:278.108,279.61 1 2 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:279.61,281.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:282.2,282.37 1 2 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:282.37,284.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:285.2,286.16 2 2 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:286.16,288.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:289.2,290.19 2 2 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:290.19,292.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:293.2,293.104 1 1 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:293.104,295.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:296.2,297.16 2 1 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:297.16,299.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:300.2,307.16 3 1 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:307.16,309.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:310.2,311.43 2 1 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:311.43,318.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:319.2,332.22 2 1 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:332.22,334.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:335.2,335.25 1 1 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:338.108,339.62 1 2 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:339.62,341.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:342.2,342.38 1 1 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:342.38,344.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:345.2,346.9 2 1 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:346.9,348.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:349.2,350.16 2 1 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:350.16,352.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:353.2,357.16 5 1 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:357.16,359.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:360.2,370.4 1 1 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:373.109,374.62 1 1 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:374.62,376.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:377.2,377.38 1 1 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:377.38,379.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:380.2,381.9 2 1 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:381.9,383.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:384.2,385.16 2 1 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:385.16,387.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:388.2,390.32 3 1 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:390.32,392.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:393.2,394.16 2 1 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:394.16,396.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:397.2,403.4 1 1 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:406.106,407.62 1 2 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:407.62,409.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:410.2,410.38 1 2 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:410.38,412.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:413.2,414.9 2 2 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:414.9,416.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:417.2,418.16 2 2 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:418.16,420.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:421.2,423.16 3 2 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:423.16,424.41 1 1 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:424.41,434.4 1 1 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:435.3,435.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:437.2,445.4 1 1 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:483.65,484.42 1 14 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:484.42,485.39 1 13 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:485.39,487.4 1 12 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:489.2,489.85 1 2 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:489.85,491.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:492.2,492.95 1 2 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:495.102,496.38 1 10 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:496.38,498.3 1 4 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:499.2,499.58 1 6 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:499.58,501.3 1 3 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:502.2,502.90 1 3 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:505.60,508.2 2 3 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:510.66,512.26 2 5 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:512.26,514.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:515.2,515.12 1 4 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:518.69,521.33 3 1 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:521.33,523.21 2 5 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:523.21,524.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:526.3,526.34 1 5 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:526.34,527.12 1 1 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:529.3,530.30 2 4 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:532.2,532.12 1 1 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:535.63,537.19 2 5 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:537.19,539.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:540.2,541.42 2 5 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:541.42,543.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:544.2,544.57 1 4 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:544.57,546.3 1 2 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:547.2,547.54 1 2 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:547.54,549.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:550.2,550.30 1 1 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:553.70,557.2 1 4 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:559.66,561.9 2 2 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:561.9,563.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:564.2,566.17 3 1 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:566.17,568.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:569.2,569.33 1 1 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:570.103,572.30 2 1 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:573.34,574.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:575.10,576.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:580.56,581.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:581.37,583.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:584.2,584.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:584.26,586.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:586.37,587.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:589.3,589.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:591.2,591.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:594.90,602.2 1 3 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:604.68,605.71 1 4 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:605.71,607.17 2 1 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:607.17,609.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:610.3,610.26 1 1 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:612.2,613.16 2 3 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:613.16,615.3 1 3 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:616.2,617.41 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:617.41,619.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:620.2,620.78 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:623.65,625.16 2 10 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:625.16,627.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:628.2,628.17 1 10 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:628.17,630.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:631.2,631.14 1 10 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:634.51,635.16 1 5 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:635.16,637.3 1 2 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:638.2,638.37 1 3 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:641.56,642.28 1 1 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:642.28,644.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:645.2,646.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:649.92,651.29 2 2 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:651.29,653.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:654.2,654.12 1 2 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:657.86,659.29 2 2 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:659.29,661.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:662.2,662.12 1 2 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:665.94,667.29 2 2 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:667.29,669.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:670.2,670.12 1 2 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:673.98,675.29 2 2 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:675.29,677.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:678.2,678.12 1 2 +github.com/thebtf/engram/internal/mcp/tools_rules.go:17.93,18.104 1 4 +github.com/thebtf/engram/internal/mcp/tools_rules.go:18.104,20.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_rules.go:22.2,23.16 2 3 +github.com/thebtf/engram/internal/mcp/tools_rules.go:23.16,25.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:27.2,28.19 2 3 +github.com/thebtf/engram/internal/mcp/tools_rules.go:28.19,30.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:32.2,35.33 3 3 +github.com/thebtf/engram/internal/mcp/tools_rules.go:35.33,36.47 1 2 +github.com/thebtf/engram/internal/mcp/tools_rules.go:36.47,39.4 2 2 +github.com/thebtf/engram/internal/mcp/tools_rules.go:42.2,44.20 3 3 +github.com/thebtf/engram/internal/mcp/tools_rules.go:44.20,47.3 2 2 +github.com/thebtf/engram/internal/mcp/tools_rules.go:48.2,49.68 2 3 +github.com/thebtf/engram/internal/mcp/tools_rules.go:49.68,50.48 1 3 +github.com/thebtf/engram/internal/mcp/tools_rules.go:50.48,52.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:53.3,53.32 1 3 +github.com/thebtf/engram/internal/mcp/tools_rules.go:53.32,55.23 2 1 +github.com/thebtf/engram/internal/mcp/tools_rules.go:55.23,56.63 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:56.63,58.6 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:59.5,59.53 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:61.4,61.31 1 1 +github.com/thebtf/engram/internal/mcp/tools_rules.go:64.2,71.17 1 3 +github.com/thebtf/engram/internal/mcp/tools_rules.go:71.17,73.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:73.8,73.29 1 3 +github.com/thebtf/engram/internal/mcp/tools_rules.go:73.29,75.36 2 3 +github.com/thebtf/engram/internal/mcp/tools_rules.go:75.36,77.4 1 2 +github.com/thebtf/engram/internal/mcp/tools_rules.go:78.3,83.5 1 3 +github.com/thebtf/engram/internal/mcp/tools_rules.go:86.2,86.35 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:86.35,88.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:90.2,97.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:97.16,99.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:101.2,110.28 3 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:110.28,112.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:113.2,124.16 4 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:124.16,126.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:127.2,127.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:133.93,134.35 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:134.35,136.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:138.2,139.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:139.16,141.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:143.2,144.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:144.16,146.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:147.2,147.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:147.17,149.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:151.2,152.33 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:152.33,153.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:153.47,156.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:159.2,160.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:160.16,162.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:164.2,176.26 3 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:176.26,178.23 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:178.23,180.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:181.3,192.5 3 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:195.2,196.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:196.16,198.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:199.2,199.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:22.104,24.16 2 7 +github.com/thebtf/engram/internal/mcp/tools_settings.go:24.16,26.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:28.2,29.18 2 7 +github.com/thebtf/engram/internal/mcp/tools_settings.go:29.18,31.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_settings.go:33.2,33.16 1 6 +github.com/thebtf/engram/internal/mcp/tools_settings.go:34.13,35.36 1 4 +github.com/thebtf/engram/internal/mcp/tools_settings.go:36.13,37.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:38.14,39.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:40.16,41.39 1 1 +github.com/thebtf/engram/internal/mcp/tools_settings.go:42.10,43.95 1 1 +github.com/thebtf/engram/internal/mcp/tools_settings.go:51.67,53.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:57.68,58.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:58.33,60.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:61.2,61.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:67.42,69.2 1 9 +github.com/thebtf/engram/internal/mcp/tools_settings.go:74.61,76.26 2 8 +github.com/thebtf/engram/internal/mcp/tools_settings.go:76.26,78.3 1 5 +github.com/thebtf/engram/internal/mcp/tools_settings.go:79.2,79.12 1 3 +github.com/thebtf/engram/internal/mcp/tools_settings.go:85.90,86.49 1 4 +github.com/thebtf/engram/internal/mcp/tools_settings.go:86.49,88.3 1 2 +github.com/thebtf/engram/internal/mcp/tools_settings.go:90.2,91.15 2 2 +github.com/thebtf/engram/internal/mcp/tools_settings.go:91.15,93.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_settings.go:94.2,95.17 2 1 +github.com/thebtf/engram/internal/mcp/tools_settings.go:95.17,97.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_settings.go:100.2,103.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:103.16,105.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:107.2,113.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:113.12,115.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:115.18,117.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:118.3,119.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:119.20,121.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:122.3,124.48 3 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:125.8,127.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:129.2,130.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:130.16,132.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:134.2,139.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:145.90,147.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:147.15,149.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:151.2,152.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:152.16,154.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:156.2,157.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:157.16,158.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:158.47,160.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:161.3,161.56 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:164.2,170.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:170.19,173.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:173.8,175.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:176.2,176.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:181.92,183.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:183.16,185.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:187.2,188.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:188.16,190.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:192.2,200.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:200.25,207.28 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:207.28,209.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:210.3,210.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:212.2,212.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:216.93,217.52 1 1 +github.com/thebtf/engram/internal/mcp/tools_settings.go:217.52,219.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_settings.go:221.2,222.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:222.15,224.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:226.2,227.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:227.16,229.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:231.2,231.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:231.47,232.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:232.47,234.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:235.3,235.59 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:238.2,241.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:35.127,36.23 1 17 +github.com/thebtf/engram/internal/mcp/tools_state.go:36.23,38.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_state.go:39.2,40.40 2 16 +github.com/thebtf/engram/internal/mcp/tools_state.go:40.40,42.3 1 16 +github.com/thebtf/engram/internal/mcp/tools_state.go:43.2,43.37 1 16 +github.com/thebtf/engram/internal/mcp/tools_state.go:43.37,45.3 1 3 +github.com/thebtf/engram/internal/mcp/tools_state.go:46.2,46.37 1 16 +github.com/thebtf/engram/internal/mcp/tools_state.go:46.37,48.3 1 3 +github.com/thebtf/engram/internal/mcp/tools_state.go:49.2,49.15 1 16 +github.com/thebtf/engram/internal/mcp/tools_state.go:52.23,80.2 1 2 +github.com/thebtf/engram/internal/mcp/tools_state.go:82.26,140.2 1 2 +github.com/thebtf/engram/internal/mcp/tools_state.go:142.92,143.25 1 21 +github.com/thebtf/engram/internal/mcp/tools_state.go:143.25,145.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:147.2,148.49 2 21 +github.com/thebtf/engram/internal/mcp/tools_state.go:148.49,150.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:152.2,152.18 1 21 +github.com/thebtf/engram/internal/mcp/tools_state.go:153.17,154.24 1 2 +github.com/thebtf/engram/internal/mcp/tools_state.go:154.24,156.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:157.3,158.17 2 2 +github.com/thebtf/engram/internal/mcp/tools_state.go:158.17,160.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:161.3,165.5 1 2 +github.com/thebtf/engram/internal/mcp/tools_state.go:166.17,167.22 1 2 +github.com/thebtf/engram/internal/mcp/tools_state.go:167.22,169.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:170.3,170.22 1 2 +github.com/thebtf/engram/internal/mcp/tools_state.go:170.22,172.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:173.3,174.17 2 2 +github.com/thebtf/engram/internal/mcp/tools_state.go:174.17,176.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:177.3,181.5 1 2 +github.com/thebtf/engram/internal/mcp/tools_state.go:182.16,189.23 7 17 +github.com/thebtf/engram/internal/mcp/tools_state.go:189.23,191.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:192.3,192.24 1 17 +github.com/thebtf/engram/internal/mcp/tools_state.go:192.24,194.4 1 1 +github.com/thebtf/engram/internal/mcp/tools_state.go:195.3,195.39 1 16 +github.com/thebtf/engram/internal/mcp/tools_state.go:195.39,197.4 1 1 +github.com/thebtf/engram/internal/mcp/tools_state.go:198.3,207.17 3 15 +github.com/thebtf/engram/internal/mcp/tools_state.go:207.17,209.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:210.3,210.69 1 15 +github.com/thebtf/engram/internal/mcp/tools_state.go:210.69,212.4 1 11 +github.com/thebtf/engram/internal/mcp/tools_state.go:213.3,213.29 1 4 +github.com/thebtf/engram/internal/mcp/tools_state.go:214.10,215.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:219.92,220.25 1 8 +github.com/thebtf/engram/internal/mcp/tools_state.go:220.25,222.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_state.go:224.2,225.49 2 7 +github.com/thebtf/engram/internal/mcp/tools_state.go:225.49,227.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:229.2,229.18 1 7 +github.com/thebtf/engram/internal/mcp/tools_state.go:230.17,232.24 2 4 +github.com/thebtf/engram/internal/mcp/tools_state.go:232.24,234.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:235.3,236.17 2 4 +github.com/thebtf/engram/internal/mcp/tools_state.go:236.17,238.4 1 1 +github.com/thebtf/engram/internal/mcp/tools_state.go:239.3,239.59 1 3 +github.com/thebtf/engram/internal/mcp/tools_state.go:239.59,241.4 1 1 +github.com/thebtf/engram/internal/mcp/tools_state.go:242.3,242.81 1 2 +github.com/thebtf/engram/internal/mcp/tools_state.go:242.81,244.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:245.3,250.5 1 2 +github.com/thebtf/engram/internal/mcp/tools_state.go:251.17,253.22 2 3 +github.com/thebtf/engram/internal/mcp/tools_state.go:253.22,255.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:256.3,257.17 2 3 +github.com/thebtf/engram/internal/mcp/tools_state.go:257.17,259.4 1 1 +github.com/thebtf/engram/internal/mcp/tools_state.go:260.3,260.79 1 2 +github.com/thebtf/engram/internal/mcp/tools_state.go:260.79,262.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:263.3,268.5 1 2 +github.com/thebtf/engram/internal/mcp/tools_state.go:269.10,270.66 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:274.91,276.16 2 4 +github.com/thebtf/engram/internal/mcp/tools_state.go:276.16,278.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:279.2,279.67 1 4 +github.com/thebtf/engram/internal/mcp/tools_state.go:279.67,280.76 1 11 +github.com/thebtf/engram/internal/mcp/tools_state.go:280.76,282.4 1 1 +github.com/thebtf/engram/internal/mcp/tools_state.go:285.2,286.52 2 3 +github.com/thebtf/engram/internal/mcp/tools_state.go:286.52,288.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:289.2,289.19 1 3 +github.com/thebtf/engram/internal/mcp/tools_state.go:292.74,294.16 2 3 +github.com/thebtf/engram/internal/mcp/tools_state.go:294.16,296.3 1 2 +github.com/thebtf/engram/internal/mcp/tools_state.go:297.2,297.62 1 1 +github.com/thebtf/engram/internal/mcp/tools_state.go:297.62,299.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_state.go:300.2,300.68 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:303.109,304.56 1 15 +github.com/thebtf/engram/internal/mcp/tools_state.go:304.56,306.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_state.go:307.2,307.25 1 14 +github.com/thebtf/engram/internal/mcp/tools_state.go:307.25,309.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:310.2,310.81 1 14 +github.com/thebtf/engram/internal/mcp/tools_state.go:310.81,312.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_state.go:313.2,313.102 1 13 +github.com/thebtf/engram/internal/mcp/tools_state.go:313.102,315.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_state.go:316.2,316.108 1 12 +github.com/thebtf/engram/internal/mcp/tools_state.go:316.108,318.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_state.go:319.2,319.99 1 11 +github.com/thebtf/engram/internal/mcp/tools_state.go:319.99,321.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_state.go:322.2,322.99 1 10 +github.com/thebtf/engram/internal/mcp/tools_state.go:322.99,324.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_state.go:325.2,325.60 1 9 +github.com/thebtf/engram/internal/mcp/tools_state.go:325.60,327.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:328.2,328.34 1 9 +github.com/thebtf/engram/internal/mcp/tools_state.go:328.34,330.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_state.go:331.2,331.114 1 8 +github.com/thebtf/engram/internal/mcp/tools_state.go:331.114,333.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_state.go:334.2,334.66 1 7 +github.com/thebtf/engram/internal/mcp/tools_state.go:334.66,336.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:337.2,337.40 1 7 +github.com/thebtf/engram/internal/mcp/tools_state.go:337.40,339.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_state.go:340.2,340.132 1 6 +github.com/thebtf/engram/internal/mcp/tools_state.go:340.132,342.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_state.go:343.2,343.35 1 5 +github.com/thebtf/engram/internal/mcp/tools_state.go:343.35,345.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_state.go:346.2,346.12 1 4 +github.com/thebtf/engram/internal/mcp/tools_state.go:349.92,350.103 1 3 +github.com/thebtf/engram/internal/mcp/tools_state.go:350.103,352.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:354.2,355.52 2 3 +github.com/thebtf/engram/internal/mcp/tools_state.go:355.52,357.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:358.2,358.32 1 3 +github.com/thebtf/engram/internal/mcp/tools_state.go:358.32,360.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_state.go:361.2,361.19 1 2 +github.com/thebtf/engram/internal/mcp/tools_state.go:364.108,365.19 1 7 +github.com/thebtf/engram/internal/mcp/tools_state.go:365.19,367.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:368.2,369.53 2 7 +github.com/thebtf/engram/internal/mcp/tools_state.go:369.53,371.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:372.2,372.19 1 7 +github.com/thebtf/engram/internal/mcp/tools_state.go:372.19,374.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:375.2,375.39 1 7 +github.com/thebtf/engram/internal/mcp/tools_state.go:375.39,376.34 1 24 +github.com/thebtf/engram/internal/mcp/tools_state.go:376.34,378.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:380.2,380.20 1 7 +github.com/thebtf/engram/internal/mcp/tools_state.go:383.66,385.53 2 11 +github.com/thebtf/engram/internal/mcp/tools_state.go:385.53,387.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_state.go:388.2,388.19 1 10 +github.com/thebtf/engram/internal/mcp/tools_state.go:388.19,390.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:391.2,391.12 1 10 +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:10.101,12.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:12.16,14.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:16.2,18.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:19.16,20.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:21.14,22.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:23.15,24.84 1 0 +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:25.16,26.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:27.10,28.97 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:21.75,23.2 1 10 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:25.41,28.2 2 13 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:30.31,37.2 1 2 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:39.38,46.2 1 2 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:48.50,56.2 1 2 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:58.43,70.2 1 2 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:72.80,73.36 1 10 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:73.36,75.3 1 2 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:76.2,76.48 1 8 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:76.48,78.3 1 2 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:79.2,79.37 1 6 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:82.97,84.16 2 6 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:84.16,86.3 1 2 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:87.2,88.16 2 4 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:88.16,90.3 1 3 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:91.2,92.16 2 1 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:92.16,94.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:95.2,96.16 2 1 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:96.16,98.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:99.2,99.25 1 1 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:102.104,104.16 2 4 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:104.16,106.3 1 2 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:107.2,108.16 2 2 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:108.16,110.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:111.2,112.16 2 1 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:112.16,114.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:115.2,116.16 2 1 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:116.16,118.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:119.2,119.25 1 1 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:122.96,124.16 2 4 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:124.16,126.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:127.2,128.19 2 4 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:128.19,130.3 1 2 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:131.2,132.18 2 2 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:132.18,134.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:135.2,141.79 2 2 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:141.79,143.17 2 2 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:143.17,145.4 1 1 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:146.3,146.25 1 1 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:148.2,148.21 1 1 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:151.77,153.16 2 2 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:153.16,155.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:156.2,157.19 2 2 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:157.19,159.3 1 1 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:160.2,160.21 1 1 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:10.101,12.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:12.16,14.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:16.2,17.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:17.18,19.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:21.2,21.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:22.15,23.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:24.13,25.42 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:26.14,27.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:28.16,29.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:30.16,31.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:32.10,33.102 1 0 diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/repeat-01/create-database.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/repeat-01/create-database.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/repeat-01/create-database.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/repeat-01/create-database.stdout.log new file mode 100644 index 00000000..4b15bd57 --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/repeat-01/create-database.stdout.log @@ -0,0 +1 @@ +CREATE DATABASE diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/repeat-01/create-pgvector.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/repeat-01/create-pgvector.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/repeat-01/create-pgvector.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/repeat-01/create-pgvector.stdout.log new file mode 100644 index 00000000..d26bad14 --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/repeat-01/create-pgvector.stdout.log @@ -0,0 +1 @@ +CREATE EXTENSION diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/repeat-01/database-identity.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/repeat-01/database-identity.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/repeat-01/database-identity.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/repeat-01/database-identity.stdout.log new file mode 100644 index 00000000..abdae52f --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/repeat-01/database-identity.stdout.log @@ -0,0 +1 @@ +{"database" : "engram_prc_rg_test_88e43617e8051e79_r1", "schema" : "public", "server_version" : "17.10 (Debian 17.10-1.pgdg12+1)", "user" : "engram"} diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/repeat-01/go-test-summary.json b/.agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/repeat-01/go-test-summary.json new file mode 100644 index 00000000..592f5b5d --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/repeat-01/go-test-summary.json @@ -0,0 +1,3936 @@ +{ + "schema_version": 1, + "verdict": "FAIL", + "input_path": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\full-internal-mcp\\repeat-01\\go-test.stdout.jsonl", + "fail_on_unexpected_skip": true, + "allowed_skip_identities": [], + "counts": { + "packages": 1, + "tests": 488, + "passed": 487, + "failed": 1, + "skipped": 0, + "no_tests": 0, + "zero_tests": 0, + "incomplete": 0, + "unexpected_skips": 0, + "malformed_lines": 0 + }, + "packages": [ + { + "package": "github.com/thebtf/engram/internal/mcp", + "outcome": "fail", + "elapsed_seconds": 8.921, + "last_output": "FAIL\tgithub.com/thebtf/engram/internal/mcp\t8.912s", + "tests_observed": 488 + } + ], + "tests": [ + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestAdminPurge_ActionInAdminActions", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestAdminPurge_ActionInAdminActions (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestAdminPurge_AdminAllowed", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestAdminPurge_AdminAllowed (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestAdminPurge_FlagOff_RejectsAsUnknown", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestAdminPurge_FlagOff_RejectsAsUnknown (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestAdminPurge_FlagOff_SchemaLacksConfirm", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestAdminPurge_FlagOff_SchemaLacksConfirm (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestAdminPurge_FlagOn_SchemaHasConfirm", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestAdminPurge_FlagOn_SchemaHasConfirm (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestAdminPurge_MismatchedConfirm", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestAdminPurge_MismatchedConfirm (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestAdminPurge_MissingConfirm", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestAdminPurge_MissingConfirm (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestAdminPurge_MissingProject", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestAdminPurge_MissingProject (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestAdminPurge_NilStore", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestAdminPurge_NilStore (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestAdminPurge_NoIdentityDenied", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestAdminPurge_NoIdentityDenied (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestAdminPurge_NonAdminDenied", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestAdminPurge_NonAdminDenied (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestAdminPurge_SetPurgeStore_Wiring", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestAdminPurge_SetPurgeStore_Wiring (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestAdminPurge_WhitespaceProject", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestAdminPurge_WhitespaceProject (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestAuditCreate_LogCalledOnSuccess", + "outcome": "pass", + "elapsed_seconds": 0.01, + "last_output": "--- PASS: TestAuditCreate_LogCalledOnSuccess (0.01s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestAuditCreate_SkippedWhenAuditStoreNil", + "outcome": "pass", + "elapsed_seconds": 0.01, + "last_output": "--- PASS: TestAuditCreate_SkippedWhenAuditStoreNil (0.01s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestAuditCreate_SkippedWhenFlagOff", + "outcome": "pass", + "elapsed_seconds": 0.03, + "last_output": "--- PASS: TestAuditCreate_SkippedWhenFlagOff (0.03s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestAuditDelete_LogCalledWithBeforeState", + "outcome": "pass", + "elapsed_seconds": 0.01, + "last_output": "--- PASS: TestAuditDelete_LogCalledWithBeforeState (0.01s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestAuditDelete_SkippedWhenFlagOff", + "outcome": "pass", + "elapsed_seconds": 0.03, + "last_output": "--- PASS: TestAuditDelete_SkippedWhenFlagOff (0.03s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestAuditEdit_LogCalledWithBeforeAndAfterState", + "outcome": "pass", + "elapsed_seconds": 0.01, + "last_output": "--- PASS: TestAuditEdit_LogCalledWithBeforeAndAfterState (0.01s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestAuditEdit_SkippedWhenFlagOff", + "outcome": "pass", + "elapsed_seconds": 0.03, + "last_output": "--- PASS: TestAuditEdit_SkippedWhenFlagOff (0.03s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestAuditSupersede_LogCalledWithSupersededID", + "outcome": "pass", + "elapsed_seconds": 0.01, + "last_output": "--- PASS: TestAuditSupersede_LogCalledWithSupersededID (0.01s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestAuditSupersede_SkippedWhenFlagOff", + "outcome": "pass", + "elapsed_seconds": 0.03, + "last_output": "--- PASS: TestAuditSupersede_SkippedWhenFlagOff (0.03s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestBulkDelete_DryRun_NilFacade", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestBulkDelete_DryRun_NilFacade (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestBulkOps_FlagOff_NotAdvertised", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestBulkOps_FlagOff_NotAdvertised (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestBulkPromote_DryRun_NilFacade", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestBulkPromote_DryRun_NilFacade (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestBulkPromote_NonAdmin_ReturnsAdminRequired", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestBulkPromote_NonAdmin_ReturnsAdminRequired (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestBulkSupersede_DryRun_NilFacade", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestBulkSupersede_DryRun_NilFacade (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestCallTool_CheckSystemHealth_NilStores", + "outcome": "pass", + "elapsed_seconds": 0.14, + "last_output": "--- PASS: TestCallTool_CheckSystemHealth_NilStores (0.14s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestCallTool_FindByFile_Removed", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestCallTool_FindByFile_Removed (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestCallTool_GetMemoryStats_NilStores", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestCallTool_GetMemoryStats_NilStores (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestCallTool_ParameterValidation_Table", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestCallTool_ParameterValidation_Table (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestCallTool_ParameterValidation_Table/analyze_search_patterns/{invalid", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestCallTool_ParameterValidation_Table/analyze_search_patterns/{invalid (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestCallTool_ParameterValidation_Table/find_similar_observations/{}", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestCallTool_ParameterValidation_Table/find_similar_observations/{} (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestCallTool_ParameterValidation_Table/find_similar_observations/{invalid", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestCallTool_ParameterValidation_Table/find_similar_observations/{invalid (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestCallTool_UnknownToolNames_Table", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestCallTool_UnknownToolNames_Table (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestCallTool_UnknownToolNames_Table/invalid_tool", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestCallTool_UnknownToolNames_Table/invalid_tool (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestCallTool_UnknownToolNames_Table/nonexistent", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestCallTool_UnknownToolNames_Table/nonexistent (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestCallTool_UnknownToolNames_Table/search_v2", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestCallTool_UnknownToolNames_Table/search_v2 (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestCallTool_UnknownToolNames_Table/timeline_x", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestCallTool_UnknownToolNames_Table/timeline_x (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestCallTool_UnknownToolReturnsError", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestCallTool_UnknownToolReturnsError (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestCandidateTools_ExposeCR008ReviewLoopContracts", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestCandidateTools_ExposeCR008ReviewLoopContracts (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestCheckSystemHealth_VectorSubsystem", + "outcome": "pass", + "elapsed_seconds": 0.25, + "last_output": "--- PASS: TestCheckSystemHealth_VectorSubsystem (0.25s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestCheckSystemHealth_VectorSubsystem/vnext_disabled", + "outcome": "pass", + "elapsed_seconds": 0.13, + "last_output": "--- PASS: TestCheckSystemHealth_VectorSubsystem/vnext_disabled (0.13s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestCheckSystemHealth_VectorSubsystem/vnext_enabled", + "outcome": "pass", + "elapsed_seconds": 0.12, + "last_output": "--- PASS: TestCheckSystemHealth_VectorSubsystem/vnext_enabled (0.12s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestCodebaseSearch_FlagOff_ReturnsError", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestCodebaseSearch_FlagOff_ReturnsError (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestCodeIntelFlag_Off_ToolsAbsentFromList", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestCodeIntelFlag_Off_ToolsAbsentFromList (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestCodeIntelFlag_On_ServerAdvertisesSearchNotStatus", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestCodeIntelFlag_On_ServerAdvertisesSearchNotStatus (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestCodeIntelFlag_On_StoreNil_ToolsAbsentFromList", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestCodeIntelFlag_On_StoreNil_ToolsAbsentFromList (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestCoerceBool", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestCoerceBool (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestCoerceBool/false", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestCoerceBool/false (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestCoerceBool/float_0", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestCoerceBool/float_0 (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestCoerceBool/float_1", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestCoerceBool/float_1 (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestCoerceBool/invalid_string", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestCoerceBool/invalid_string (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestCoerceBool/nil", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestCoerceBool/nil (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestCoerceBool/string_false", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestCoerceBool/string_false (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestCoerceBool/string_true", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestCoerceBool/string_true (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestCoerceBool/true", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestCoerceBool/true (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestCoerceFloat64", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestCoerceFloat64 (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestCoerceFloat64/float64", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestCoerceFloat64/float64 (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestCoerceFloat64/integer_string", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestCoerceFloat64/integer_string (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestCoerceFloat64/invalid_string", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestCoerceFloat64/invalid_string (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestCoerceFloat64/json.Number", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestCoerceFloat64/json.Number (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestCoerceFloat64/nil", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestCoerceFloat64/nil (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestCoerceFloat64/string", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestCoerceFloat64/string (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestCoerceInt", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestCoerceInt (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestCoerceInt/bool", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestCoerceInt/bool (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestCoerceInt/float64", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestCoerceInt/float64 (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestCoerceInt/float64_with_decimal", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestCoerceInt/float64_with_decimal (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestCoerceInt/Inf", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestCoerceInt/Inf (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestCoerceInt/json.Number_float", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestCoerceInt/json.Number_float (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestCoerceInt/json.Number_int", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestCoerceInt/json.Number_int (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestCoerceInt/NaN", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestCoerceInt/NaN (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestCoerceInt/negative_float", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestCoerceInt/negative_float (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestCoerceInt/negative_overflow", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestCoerceInt/negative_overflow (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestCoerceInt/nil", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestCoerceInt/nil (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestCoerceInt/overflow_float64", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestCoerceInt/overflow_float64 (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestCoerceInt/string_float", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestCoerceInt/string_float (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestCoerceInt/string_int", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestCoerceInt/string_int (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestCoerceInt/string_non-numeric", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestCoerceInt/string_non-numeric (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestCoerceInt/zero", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestCoerceInt/zero (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestCoerceInt64", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestCoerceInt64 (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestCoerceInt64/float64", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestCoerceInt64/float64 (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestCoerceInt64/invalid_string", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestCoerceInt64/invalid_string (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestCoerceInt64/json.Number", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestCoerceInt64/json.Number (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestCoerceInt64/json.Number_float", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestCoerceInt64/json.Number_float (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestCoerceInt64/nil", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestCoerceInt64/nil (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestCoerceInt64/string", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestCoerceInt64/string (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestCoerceInt64/string_float", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestCoerceInt64/string_float (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestCoerceInt64Slice", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestCoerceInt64Slice (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestCoerceInt64Slice/float64_array", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestCoerceInt64Slice/float64_array (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestCoerceInt64Slice/mixed_array", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestCoerceInt64Slice/mixed_array (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestCoerceInt64Slice/nil", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestCoerceInt64Slice/nil (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestCoerceInt64Slice/not_array", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestCoerceInt64Slice/not_array (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestCoerceInt64Slice/string_array", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestCoerceInt64Slice/string_array (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestCoerceInt64Slice/with_zeros", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestCoerceInt64Slice/with_zeros (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestCoerceString", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestCoerceString (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestCoerceString/bool", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestCoerceString/bool (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestCoerceString/float64", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestCoerceString/float64 (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestCoerceString/json.Number", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestCoerceString/json.Number (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestCoerceString/nil", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestCoerceString/nil (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestCoerceString/string", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestCoerceString/string (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestCoerceString/wrong_type", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestCoerceString/wrong_type (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestCoerceStringSlice", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestCoerceStringSlice (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestCoerceStringSlice/array_of_strings", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestCoerceStringSlice/array_of_strings (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestCoerceStringSlice/empty_string", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestCoerceStringSlice/empty_string (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestCoerceStringSlice/mixed_array", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestCoerceStringSlice/mixed_array (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestCoerceStringSlice/nil", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestCoerceStringSlice/nil (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestCoerceStringSlice/single_string", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestCoerceStringSlice/single_string (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestDryRun_Integration_StoreMemory_ZeroSideEffects", + "outcome": "pass", + "elapsed_seconds": 0.12, + "last_output": "--- PASS: TestDryRun_Integration_StoreMemory_ZeroSideEffects (0.12s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestEC_F1_HandleRecallSearch_FlagOff_BackwardCompat_T007", + "outcome": "pass", + "elapsed_seconds": 0.12, + "last_output": "--- PASS: TestEC_F1_HandleRecallSearch_FlagOff_BackwardCompat_T007 (0.12s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestEC_F1_TagDerivedBackfill_T007", + "outcome": "pass", + "elapsed_seconds": 0.15, + "last_output": "--- PASS: TestEC_F1_TagDerivedBackfill_T007 (0.15s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestEditMemory_AuditSourceSessionIDEmptyWhenNoSession", + "outcome": "pass", + "elapsed_seconds": 0.01, + "last_output": "--- PASS: TestEditMemory_AuditSourceSessionIDEmptyWhenNoSession (0.01s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestEditMemory_AuditSourceSessionIDFromContext", + "outcome": "pass", + "elapsed_seconds": 0.01, + "last_output": "--- PASS: TestEditMemory_AuditSourceSessionIDFromContext (0.01s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestEditMemory_CrossProjectAllowedWhenEnforcementOff", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestEditMemory_CrossProjectAllowedWhenEnforcementOff (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestEditMemory_CrossProjectDenied", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestEditMemory_CrossProjectDenied (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestEditMemory_DomainOwnedCrossPrincipalDenied", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestEditMemory_DomainOwnedCrossPrincipalDenied (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestEditMemory_EmptyProjectContextDeniedWhenEnforced", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestEditMemory_EmptyProjectContextDeniedWhenEnforced (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestEditMemory_HardLimitRejected", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestEditMemory_HardLimitRejected (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestEditMemory_SameProjectAllowed", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestEditMemory_SameProjectAllowed (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestEditMemory_SecretRedacted", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestEditMemory_SecretRedacted (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestEditMemory_SoftLimitTruncates", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestEditMemory_SoftLimitTruncates (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestEditMemory_TagsAbsent_KeepsExisting", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestEditMemory_TagsAbsent_KeepsExisting (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestEditMemory_TagsExplicitEmpty_ClearsTags", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestEditMemory_TagsExplicitEmpty_ClearsTags (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestEditMemory_TagsNonEmpty_ReplacesTags", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestEditMemory_TagsNonEmpty_ReplacesTags (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestError_Marshal_Table", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestError_Marshal_Table (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestError_Marshal_Table/method_not_found", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestError_Marshal_Table/method_not_found (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestError_Marshal_Table/nil_data_omitted", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestError_Marshal_Table/nil_data_omitted (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestError_Marshal_Table/parse_error", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestError_Marshal_Table/parse_error (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestError_Marshal_Table/with_data", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestError_Marshal_Table/with_data (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestError_NilData_NotInOutput", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestError_NilData_NotInOutput (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestExperienceHistoryToolsAdvertisedWhenProviderWired", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestExperienceHistoryToolsAdvertisedWhenProviderWired (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestExtractProjectFromHeader", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestExtractProjectFromHeader (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestExtractProjectFromHeader_Missing", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestExtractProjectFromHeader_Missing (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestGetAmbientHintsDrainsBoundedSafeHints", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestGetAmbientHintsDrainsBoundedSafeHints (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestGetAmbientHintsReturnsEmptyForDisabledStaleAndEmptyQueue", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestGetAmbientHintsReturnsEmptyForDisabledStaleAndEmptyQueue (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestGetAmbientHintsReturnsEmptyForDisabledStaleAndEmptyQueue/disabled_flag", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestGetAmbientHintsReturnsEmptyForDisabledStaleAndEmptyQueue/disabled_flag (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestGetAmbientHintsReturnsEmptyForDisabledStaleAndEmptyQueue/empty_queue", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestGetAmbientHintsReturnsEmptyForDisabledStaleAndEmptyQueue/empty_queue (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestGetAmbientHintsReturnsEmptyForDisabledStaleAndEmptyQueue/stale_queue", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestGetAmbientHintsReturnsEmptyForDisabledStaleAndEmptyQueue/stale_queue (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestGetAmbientHintsToolAdvertisedOnlyWhenS3FlagAndQueuePresent", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestGetAmbientHintsToolAdvertisedOnlyWhenS3FlagAndQueuePresent (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestGetAmbientHintsToolAdvertisedOnlyWhenS3FlagAndQueuePresent/master_off_hides_tool", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestGetAmbientHintsToolAdvertisedOnlyWhenS3FlagAndQueuePresent/master_off_hides_tool (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestGetAmbientHintsToolAdvertisedOnlyWhenS3FlagAndQueuePresent/master+s3+queue_advertises_tool", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestGetAmbientHintsToolAdvertisedOnlyWhenS3FlagAndQueuePresent/master+s3+queue_advertises_tool (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestGetAmbientHintsToolAdvertisedOnlyWhenS3FlagAndQueuePresent/missing_queue_hides_tool", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestGetAmbientHintsToolAdvertisedOnlyWhenS3FlagAndQueuePresent/missing_queue_hides_tool (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestGetAmbientHintsToolAdvertisedOnlyWhenS3FlagAndQueuePresent/s3_off_hides_tool", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestGetAmbientHintsToolAdvertisedOnlyWhenS3FlagAndQueuePresent/s3_off_hides_tool (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestGetMemoryBrief_PrincipalScopedResponseAndRequest", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestGetMemoryBrief_PrincipalScopedResponseAndRequest (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestGetMemoryBrief_PrincipalScopeRequiresQueryService", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestGetMemoryBrief_PrincipalScopeRequiresQueryService (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestGetMemoryBrief_PrincipalScopeSchemaAdvertised", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestGetMemoryBrief_PrincipalScopeSchemaAdvertised (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestGetMemoryStats_NilDB_NoMemoryOrVnextSections", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestGetMemoryStats_NilDB_NoMemoryOrVnextSections (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestGetStateToolProjectDoesNotRequirePrincipal", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestGetStateToolProjectDoesNotRequirePrincipal (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestGetStateToolRejectsFilesystemFallbackOption", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestGetStateToolRejectsFilesystemFallbackOption (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestGetStateToolResumeDoesNotInjectContextProjectWhenOmitted", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestGetStateToolResumeDoesNotInjectContextProjectWhenOmitted (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestGetStateToolResumeRejectsAdditionalIdentityMismatches", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestGetStateToolResumeRejectsAdditionalIdentityMismatches (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestGetStateToolResumeRejectsAdditionalIdentityMismatches/goal_mismatch", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestGetStateToolResumeRejectsAdditionalIdentityMismatches/goal_mismatch (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestGetStateToolResumeRejectsAdditionalIdentityMismatches/missing_next_action_command", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestGetStateToolResumeRejectsAdditionalIdentityMismatches/missing_next_action_command (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestGetStateToolResumeRejectsAdditionalIdentityMismatches/missing_next_action_kind", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestGetStateToolResumeRejectsAdditionalIdentityMismatches/missing_next_action_kind (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestGetStateToolResumeRejectsAdditionalIdentityMismatches/missing_next_verification_command", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestGetStateToolResumeRejectsAdditionalIdentityMismatches/missing_next_verification_command (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestGetStateToolResumeRejectsAdditionalIdentityMismatches/missing_next_verification_kind", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestGetStateToolResumeRejectsAdditionalIdentityMismatches/missing_next_verification_kind (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestGetStateToolResumeRejectsAdditionalIdentityMismatches/project_mismatch", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestGetStateToolResumeRejectsAdditionalIdentityMismatches/project_mismatch (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestGetStateToolResumeRejectsAdditionalIdentityMismatches/session_mismatch", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestGetStateToolResumeRejectsAdditionalIdentityMismatches/session_mismatch (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestGetStateToolResumeRejectsAdditionalIdentityMismatches/task_mismatch", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestGetStateToolResumeRejectsAdditionalIdentityMismatches/task_mismatch (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestGetStateToolResumeRejectsFallbackMasqueradingAsNative", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestGetStateToolResumeRejectsFallbackMasqueradingAsNative (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestGetStateToolResumeRejectsMissingEvidenceRefs", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestGetStateToolResumeRejectsMissingEvidenceRefs (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestGetStateToolResumeRejectsPacketIdentityMismatch", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestGetStateToolResumeRejectsPacketIdentityMismatch (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestGetStateToolResumeRequiresPrincipal", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestGetStateToolResumeRequiresPrincipal (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestGetStateToolResumeReturnsNativePacket", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestGetStateToolResumeReturnsNativePacket (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestGetStateToolResumeSupportsExplicitProjectOnlyScope", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestGetStateToolResumeSupportsExplicitProjectOnlyScope (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestGetStateToolSessionDoesNotRequirePrincipal", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestGetStateToolSessionDoesNotRequirePrincipal (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestGovernanceTools_AdminGate_NoIdentity", + "outcome": "pass", + "elapsed_seconds": 0.01, + "last_output": "--- PASS: TestGovernanceTools_AdminGate_NoIdentity (0.01s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestGovernanceTools_AdminGate_NoIdentity/list_snapshots", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestGovernanceTools_AdminGate_NoIdentity/list_snapshots (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestGovernanceTools_AdminGate_NoIdentity/pin_snapshot", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestGovernanceTools_AdminGate_NoIdentity/pin_snapshot (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestGovernanceTools_AdminGate_NoIdentity/redaction_rules_status", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestGovernanceTools_AdminGate_NoIdentity/redaction_rules_status (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestGovernanceTools_AdminGate_NoIdentity/rollback_snapshot", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestGovernanceTools_AdminGate_NoIdentity/rollback_snapshot (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestGovernanceTools_AdminGate_ReadOnlyCaller", + "outcome": "pass", + "elapsed_seconds": 0.01, + "last_output": "--- PASS: TestGovernanceTools_AdminGate_ReadOnlyCaller (0.01s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestGovernanceTools_ListSnapshotsSchemaIncludesReviewActionOpTypes", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestGovernanceTools_ListSnapshotsSchemaIncludesReviewActionOpTypes (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestGovernanceTools_NotAdvertisedWhenFlagOff", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestGovernanceTools_NotAdvertisedWhenFlagOff (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestGovernanceTools_RedactionRulesStatus_NoAdminRequired_WithAdmin", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestGovernanceTools_RedactionRulesStatus_NoAdminRequired_WithAdmin (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestGraphTool_T014_AddEdgeGuardsOffline", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestGraphTool_T014_AddEdgeGuardsOffline (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestGraphTool_T014_AddEdgeGuardsOffline/duplicate_edge_rejected_before_create", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestGraphTool_T014_AddEdgeGuardsOffline/duplicate_edge_rejected_before_create (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestGraphTool_T014_AddEdgeGuardsOffline/memory_orphan_edge_rejected_before_create", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestGraphTool_T014_AddEdgeGuardsOffline/memory_orphan_edge_rejected_before_create (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestGraphTool_T014_AddEdgeGuardsOffline/orphan_edge_rejected_before_create", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestGraphTool_T014_AddEdgeGuardsOffline/orphan_edge_rejected_before_create (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestGraphTool_T014_AddEdgeGuardsOffline/valid_edge_creates_exactly_once", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestGraphTool_T014_AddEdgeGuardsOffline/valid_edge_creates_exactly_once (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestGraphTool_T014_AddNodeAction", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestGraphTool_T014_AddNodeAction (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestGraphTool_T014_AddNodeOffline", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestGraphTool_T014_AddNodeOffline (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestGraphTool_T014_AddNodeOffline/empty_external_ref_returns_error", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestGraphTool_T014_AddNodeOffline/empty_external_ref_returns_error (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestGraphTool_T014_AddNodeOffline/empty_project_returns_error", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestGraphTool_T014_AddNodeOffline/empty_project_returns_error (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestGraphTool_T014_AddNodeOffline/invalid_node_type_returns_error_containing_invalid_node_type:", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestGraphTool_T014_AddNodeOffline/invalid_node_type_returns_error_containing_invalid_node_type: (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestGraphTool_T014_AddNodeOffline/valid_input_store_receives_correct_node", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestGraphTool_T014_AddNodeOffline/valid_input_store_receives_correct_node (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestGraphTool_T014_ArgsShape", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestGraphTool_T014_ArgsShape (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestGraphTool_T014_GetEdgesNodeTypeFilter", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestGraphTool_T014_GetEdgesNodeTypeFilter (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestGraphTool_T014_InvalidNodeTypeRejects", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestGraphTool_T014_InvalidNodeTypeRejects (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestGraphTool_T014_NodeTypeFilterOffline", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestGraphTool_T014_NodeTypeFilterOffline (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestHandleAnalyzeSearchPatterns_InvalidJSON", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestHandleAnalyzeSearchPatterns_InvalidJSON (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestHandleCheckSystemHealth_NilStores_StructuredResponse", + "outcome": "pass", + "elapsed_seconds": 0.13, + "last_output": "--- PASS: TestHandleCheckSystemHealth_NilStores_StructuredResponse (0.13s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestHandleExperienceHistoryReadRejectsInvalidArchiveTrigger", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestHandleExperienceHistoryReadRejectsInvalidArchiveTrigger (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestHandleExperienceHistoryReadReturnsBlockedApplicabilityEnvelope", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestHandleExperienceHistoryReadReturnsBlockedApplicabilityEnvelope (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestHandleFindSimilarObservations_EmptyResultInV5", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestHandleFindSimilarObservations_EmptyResultInV5 (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestHandleFindSimilarObservations_Validation", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestHandleFindSimilarObservations_Validation (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestHandleGetCandidate_EmptyIDReturnsError", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestHandleGetCandidate_EmptyIDReturnsError (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestHandleGetMemoryStats_NilStores_ValidJSON", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestHandleGetMemoryStats_NilStores_ValidJSON (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestHandleInitialize_CapabilitiesPresent", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestHandleInitialize_CapabilitiesPresent (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestHandleInitialize_IDEchoed", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestHandleInitialize_IDEchoed (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestHandleInitialize_ProtocolAndVersion", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestHandleInitialize_ProtocolAndVersion (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestHandleIssueCloseAcceptsExplicitLegacySourceProject", + "outcome": "pass", + "elapsed_seconds": 0.15, + "last_output": "--- PASS: TestHandleIssueCloseAcceptsExplicitLegacySourceProject (0.15s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestHandleIssueCloseDoesNotLetExplicitDashboardBypassContext", + "outcome": "pass", + "elapsed_seconds": 0.14, + "last_output": "--- PASS: TestHandleIssueCloseDoesNotLetExplicitDashboardBypassContext (0.14s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestHandleListCandidates_EmptyProjectReturnsError", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestHandleListCandidates_EmptyProjectReturnsError (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestHandleListCandidates_FlagOffReturnsError", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestHandleListCandidates_FlagOffReturnsError (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestHandleRequest_CapabilityStubs", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestHandleRequest_CapabilityStubs (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestHandleRequest_CapabilityStubs/completion/complete", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestHandleRequest_CapabilityStubs/completion/complete (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestHandleRequest_CapabilityStubs/prompts/list", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestHandleRequest_CapabilityStubs/prompts/list (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestHandleRequest_CapabilityStubs/resources/list", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestHandleRequest_CapabilityStubs/resources/list (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestHandleRequest_CapabilityStubs/resources/templates/list", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestHandleRequest_CapabilityStubs/resources/templates/list (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestHandleRequest_GetAmbientHintsDispatchesThroughToolsCall", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestHandleRequest_GetAmbientHintsDispatchesThroughToolsCall (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestHandleRequest_GetAmbientHintsUnknownToolRegressionGuard", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestHandleRequest_GetAmbientHintsUnknownToolRegressionGuard (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestHandleRequest_InitializeRoute", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestHandleRequest_InitializeRoute (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestHandleRequest_NotificationReturnsNil", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestHandleRequest_NotificationReturnsNil (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestHandleRequest_ToolsListRoute", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestHandleRequest_ToolsListRoute (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestHandleRequest_UnknownMethodError", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestHandleRequest_UnknownMethodError (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestHandleReviewPacketPreviewAction_UnsupportedActionRejectedBeforeStoreMutation", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestHandleReviewPacketPreviewAction_UnsupportedActionRejectedBeforeStoreMutation (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestHandleReviewQueueRead_LimitOverMaxReturnsError", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestHandleReviewQueueRead_LimitOverMaxReturnsError (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestHandleReviewQueueRead_RiskyOnlyKeepsUnfilteredMetricsAndBacklog", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestHandleReviewQueueRead_RiskyOnlyKeepsUnfilteredMetricsAndBacklog (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestHandleReviewQueueRead_UnsupportedPacketTypeReturnsGatedPayload", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestHandleReviewQueueRead_UnsupportedPacketTypeReturnsGatedPayload (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestHandleTemporalTruthRefreshRequiresProject", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestHandleTemporalTruthRefreshRequiresProject (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestHandleTemporalTruthRefreshReturnsAdmissionResult", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestHandleTemporalTruthRefreshReturnsAdmissionResult (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestHandleTemporalTruthRejectsInvalidAsOf", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestHandleTemporalTruthRejectsInvalidAsOf (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestHandleTemporalTruthRequiresProject", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestHandleTemporalTruthRequiresProject (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestHandleTemporalTruthRequiresProject/blank_project", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestHandleTemporalTruthRequiresProject/blank_project (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestHandleTemporalTruthRequiresProject/missing_project", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestHandleTemporalTruthRequiresProject/missing_project (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestHandleTemporalTruthReturnsBoundedResponse", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestHandleTemporalTruthReturnsBoundedResponse (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestHandleToolsCall_EmptyParams", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestHandleToolsCall_EmptyParams (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestHandleToolsCall_InvalidParamsJSON", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestHandleToolsCall_InvalidParamsJSON (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestHandleToolsCall_UnknownTool", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestHandleToolsCall_UnknownTool (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestHandleToolsList_AllToolSchemasHaveTypeAndProperties", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestHandleToolsList_AllToolSchemasHaveTypeAndProperties (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestHandleToolsList_DefaultCountMatchesPrimary", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestHandleToolsList_DefaultCountMatchesPrimary (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestHandleToolsList_FeedbackSchemaCorrect", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestHandleToolsList_FeedbackSchemaCorrect (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestHandleToolsList_IncludeAllContainsLegacy", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestHandleToolsList_IncludeAllContainsLegacy (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestHandleToolsList_IncludeAllReturnsMore", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestHandleToolsList_IncludeAllReturnsMore (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestHandleToolsList_PrimaryToolsPresent", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestHandleToolsList_PrimaryToolsPresent (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestHandleToolsList_RemovedToolsAbsent", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestHandleToolsList_RemovedToolsAbsent (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestHandleToolsList_SchemaCompliance_NoForbiddenTopLevelKeys", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestHandleToolsList_SchemaCompliance_NoForbiddenTopLevelKeys (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestHandleToolsList_StoreTypeEnumCorrect", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestHandleToolsList_StoreTypeEnumCorrect (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestHybridTG3_ConfidenceMin_FloorEnforced_T022", + "outcome": "fail", + "elapsed_seconds": 0.14, + "last_output": "--- FAIL: TestHybridTG3_ConfidenceMin_FloorEnforced_T022 (0.14s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestHybridTG3_IncludeSuperseded_False_NoError_T022c", + "outcome": "pass", + "elapsed_seconds": 0.12, + "last_output": "--- PASS: TestHybridTG3_IncludeSuperseded_False_NoError_T022c (0.12s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestHybridTG3_IncludeSuperseded_StructuredError_T022b", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestHybridTG3_IncludeSuperseded_StructuredError_T022b (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestIsSecretSettingKey", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestIsSecretSettingKey (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestJSONRPCErrorCodes_Table", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestJSONRPCErrorCodes_Table (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestJSONRPCErrorCodes_Table/Internal_error", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestJSONRPCErrorCodes_Table/Internal_error (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestJSONRPCErrorCodes_Table/Invalid_params", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestJSONRPCErrorCodes_Table/Invalid_params (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestJSONRPCErrorCodes_Table/Invalid_Request", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestJSONRPCErrorCodes_Table/Invalid_Request (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestJSONRPCErrorCodes_Table/Method_not_found", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestJSONRPCErrorCodes_Table/Method_not_found (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestJSONRPCErrorCodes_Table/Parse_error", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestJSONRPCErrorCodes_Table/Parse_error (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestKnowAbout_T005_ContextProjectFallbackAndLimitClamp", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestKnowAbout_T005_ContextProjectFallbackAndLimitClamp (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestKnowAbout_T005_DisabledS2NotAdvertised", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestKnowAbout_T005_DisabledS2NotAdvertised (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestKnowAbout_T005_IndexErrorsSurfaceAsToolErrors", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestKnowAbout_T005_IndexErrorsSurfaceAsToolErrors (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestKnowAbout_T005_JSONNeverContainsContentKeysOrMemoryBodies", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestKnowAbout_T005_JSONNeverContainsContentKeysOrMemoryBodies (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestKnowAbout_T005_MissingTopicReturnsEmptyIndexPacket", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestKnowAbout_T005_MissingTopicReturnsEmptyIndexPacket (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestKnowAbout_T005_PopulatedTopicReturnsContentFreeIndexHits", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestKnowAbout_T005_PopulatedTopicReturnsContentFreeIndexHits (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestKnowAbout_T005_ProjectFallbackFailureRequiresProjectScope", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestKnowAbout_T005_ProjectFallbackFailureRequiresProjectScope (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestKnowAbout_T005_RealStoreCanonicalShapeAndMissingTopicEmptyPacket", + "outcome": "pass", + "elapsed_seconds": 0.14, + "last_output": "--- PASS: TestKnowAbout_T005_RealStoreCanonicalShapeAndMissingTopicEmptyPacket (0.14s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestKnowAbout_T005_RequiresPrincipalScopedIdentity", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestKnowAbout_T005_RequiresPrincipalScopedIdentity (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestKnowAbout_T005_RequiresPrincipalScopedIdentity/legacy_client_keycard_without_principal_is_rejected", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestKnowAbout_T005_RequiresPrincipalScopedIdentity/legacy_client_keycard_without_principal_is_rejected (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestKnowAbout_T005_RequiresPrincipalScopedIdentity/master_token_without_principal_is_rejected", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestKnowAbout_T005_RequiresPrincipalScopedIdentity/master_token_without_principal_is_rejected (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestKnowAbout_T014_ToolListRequiresMasterAndS2Flags", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestKnowAbout_T014_ToolListRequiresMasterAndS2Flags (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestKnowAbout_T014_ToolListRequiresMasterAndS2Flags/master_and_s2_enabled_advertises_know_about", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestKnowAbout_T014_ToolListRequiresMasterAndS2Flags/master_and_s2_enabled_advertises_know_about (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestKnowAbout_T014_ToolListRequiresMasterAndS2Flags/master_disabled_suppresses_know_about_even_when_s2_flag_is_set", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestKnowAbout_T014_ToolListRequiresMasterAndS2Flags/master_disabled_suppresses_know_about_even_when_s2_flag_is_set (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestKnowAbout_T014_ToolListRequiresMasterAndS2Flags/s2_disabled_suppresses_know_about_even_when_master_is_set", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestKnowAbout_T014_ToolListRequiresMasterAndS2Flags/s2_disabled_suppresses_know_about_even_when_master_is_set (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestLegacyWriteGateDomainPolicy_DomainOwnedCandidateHidden", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestLegacyWriteGateDomainPolicy_DomainOwnedCandidateHidden (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestMemoryStoreSignificanceUpdaterPersistsChangedFields", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestMemoryStoreSignificanceUpdaterPersistsChangedFields (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestMemoryStoreSignificanceUpdaterPersistsChangedFields/not_useful_persists_beta_and_resets_streak", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestMemoryStoreSignificanceUpdaterPersistsChangedFields/not_useful_persists_beta_and_resets_streak (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestMemoryStoreSignificanceUpdaterPersistsChangedFields/useful_persists_alpha_citation_and_streak", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestMemoryStoreSignificanceUpdaterPersistsChangedFields/useful_persists_alpha_citation_and_streak (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestNewServer_CreatesWithVersion", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestNewServer_CreatesWithVersion (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestNewServer_HasStdinStdout", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestNewServer_HasStdinStdout (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestParseArgs", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestParseArgs (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestParseArgs/empty_bytes", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestParseArgs/empty_bytes (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestParseArgs/empty_object", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestParseArgs/empty_object (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestParseArgs/invalid_json", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestParseArgs/invalid_json (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestParseArgs/nil_args", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestParseArgs/nil_args (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestParseArgs/valid_object", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestParseArgs/valid_object (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestProjectFromContext_Empty", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestProjectFromContext_Empty (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestProjectFromContext_RoundTrip", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestProjectFromContext_RoundTrip (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestPromoteCandidate_DryRun_NilStore", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestPromoteCandidate_DryRun_NilStore (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestQueryPrincipalMemory_ResponseAndValidation", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestQueryPrincipalMemory_ResponseAndValidation (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestQueryPrincipalMemory_ResponseAndValidation/rejects_invalid_principal_kind", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestQueryPrincipalMemory_ResponseAndValidation/rejects_invalid_principal_kind (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestQueryPrincipalMemory_ResponseAndValidation/rejects_non-admin_cross-principal_private_widening", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestQueryPrincipalMemory_ResponseAndValidation/rejects_non-admin_cross-principal_private_widening (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestQueryPrincipalMemory_ResponseAndValidation/rejects_oversized_limit_clearly", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestQueryPrincipalMemory_ResponseAndValidation/rejects_oversized_limit_clearly (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestQueryPrincipalMemory_ResponseAndValidation/returns_attributed_bounded_principal_memory_response", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestQueryPrincipalMemory_ResponseAndValidation/returns_attributed_bounded_principal_memory_response (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestQueryPrincipalMemory_ServiceErrorsPropagate", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestQueryPrincipalMemory_ServiceErrorsPropagate (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestQueryPrincipalMemory_ToolSchemaAdvertised", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestQueryPrincipalMemory_ToolSchemaAdvertised (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRateMemorySignificanceDirectCallFailsClosedWhenS6Disabled", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRateMemorySignificanceDirectCallFailsClosedWhenS6Disabled (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRateMemorySignificanceDirectCallFailsClosedWhenS6Disabled/master_off_s6_on_updater_present", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRateMemorySignificanceDirectCallFailsClosedWhenS6Disabled/master_off_s6_on_updater_present (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRateMemorySignificanceDirectCallFailsClosedWhenS6Disabled/master_on_s6_off_updater_present", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRateMemorySignificanceDirectCallFailsClosedWhenS6Disabled/master_on_s6_off_updater_present (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRateMemorySignificanceLegacyRatePathsRemainUnsupported", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRateMemorySignificanceLegacyRatePathsRemainUnsupported (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRateMemorySignificanceLegacyRatePathsRemainUnsupported/consolidated_feedback_rate_action", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRateMemorySignificanceLegacyRatePathsRemainUnsupported/consolidated_feedback_rate_action (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRateMemorySignificanceLegacyRatePathsRemainUnsupported/legacy_rate_memory_tool", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRateMemorySignificanceLegacyRatePathsRemainUnsupported/legacy_rate_memory_tool (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRateMemorySignificanceMissingUpdaterFailsExplicitly", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRateMemorySignificanceMissingUpdaterFailsExplicitly (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRateMemorySignificanceRejectsInvalidIDWithoutWrite", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRateMemorySignificanceRejectsInvalidIDWithoutWrite (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRateMemorySignificanceRejectsInvalidIDWithoutWrite/missing_id", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRateMemorySignificanceRejectsInvalidIDWithoutWrite/missing_id (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRateMemorySignificanceRejectsInvalidIDWithoutWrite/negative_id", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRateMemorySignificanceRejectsInvalidIDWithoutWrite/negative_id (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRateMemorySignificanceRejectsInvalidIDWithoutWrite/zero_id", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRateMemorySignificanceRejectsInvalidIDWithoutWrite/zero_id (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRateMemorySignificanceRejectsInvalidRatingWithoutWrite", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRateMemorySignificanceRejectsInvalidRatingWithoutWrite (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRateMemorySignificanceRejectsInvalidRatingWithoutWrite/empty_rating", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRateMemorySignificanceRejectsInvalidRatingWithoutWrite/empty_rating (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRateMemorySignificanceRejectsInvalidRatingWithoutWrite/missing_rating", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRateMemorySignificanceRejectsInvalidRatingWithoutWrite/missing_rating (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRateMemorySignificanceRejectsInvalidRatingWithoutWrite/unknown_rating", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRateMemorySignificanceRejectsInvalidRatingWithoutWrite/unknown_rating (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRateMemorySignificanceToolAdvertisedOnlyWhenS6FlagAndUpdaterArePresent", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRateMemorySignificanceToolAdvertisedOnlyWhenS6FlagAndUpdaterArePresent (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRateMemorySignificanceToolAdvertisedOnlyWhenS6FlagAndUpdaterArePresent/master_off_s6_on_updater_present", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRateMemorySignificanceToolAdvertisedOnlyWhenS6FlagAndUpdaterArePresent/master_off_s6_on_updater_present (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRateMemorySignificanceToolAdvertisedOnlyWhenS6FlagAndUpdaterArePresent/master_on_s6_off_updater_present", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRateMemorySignificanceToolAdvertisedOnlyWhenS6FlagAndUpdaterArePresent/master_on_s6_off_updater_present (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRateMemorySignificanceToolAdvertisedOnlyWhenS6FlagAndUpdaterArePresent/master_on_s6_on_updater_missing", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRateMemorySignificanceToolAdvertisedOnlyWhenS6FlagAndUpdaterArePresent/master_on_s6_on_updater_missing (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRateMemorySignificanceToolAdvertisedOnlyWhenS6FlagAndUpdaterArePresent/master_on_s6_on_updater_present", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRateMemorySignificanceToolAdvertisedOnlyWhenS6FlagAndUpdaterArePresent/master_on_s6_on_updater_present (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRateMemorySignificanceToolAdvertisedWithDedicatedSchema", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRateMemorySignificanceToolAdvertisedWithDedicatedSchema (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRateMemorySignificanceToolCallUpdatesLearningForUsefulAndNotUseful", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRateMemorySignificanceToolCallUpdatesLearningForUsefulAndNotUseful (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRateMemorySignificanceToolCallUpdatesLearningForUsefulAndNotUseful/not_useful", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRateMemorySignificanceToolCallUpdatesLearningForUsefulAndNotUseful/not_useful (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRateMemorySignificanceToolCallUpdatesLearningForUsefulAndNotUseful/useful", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRateMemorySignificanceToolCallUpdatesLearningForUsefulAndNotUseful/useful (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRecall_FlagOFF_TombstoneStrings_Explain", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRecall_FlagOFF_TombstoneStrings_Explain (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRecall_FlagOFF_TombstoneStrings_Similar", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRecall_FlagOFF_TombstoneStrings_Similar (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRecall_PrincipalPrivateInvisibleNewestDoNotTruncate_FlagOff", + "outcome": "pass", + "elapsed_seconds": 0.14, + "last_output": "--- PASS: TestRecall_PrincipalPrivateInvisibleNewestDoNotTruncate_FlagOff (0.14s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRecall_ScopeInvisibleNewestDoNotTruncate_CodexP1Cycle3", + "outcome": "pass", + "elapsed_seconds": 0.15, + "last_output": "--- PASS: TestRecall_ScopeInvisibleNewestDoNotTruncate_CodexP1Cycle3 (0.15s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRecallMemory_CompatV3_VnextFEnabled_ZeroTG3Params_T021b", + "outcome": "pass", + "elapsed_seconds": 3.77, + "last_output": "--- PASS: TestRecallMemory_CompatV3_VnextFEnabled_ZeroTG3Params_T021b (3.77s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRecallMemory_CompatV3_VnextFEnabled_ZeroTG3Params_T021b/runtime_zero_tg3_params_vnext_f_on_vnext_off_no_rationale", + "outcome": "pass", + "elapsed_seconds": 3.76, + "last_output": "--- PASS: TestRecallMemory_CompatV3_VnextFEnabled_ZeroTG3Params_T021b/runtime_zero_tg3_params_vnext_f_on_vnext_off_no_rationale (3.76s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRecallMemory_CompatV3_VnextFEnabled_ZeroTG3Params_T021b/schema_with_vnext_f_on_and_vnext_off_zero_tg3_params", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRecallMemory_CompatV3_VnextFEnabled_ZeroTG3Params_T021b/schema_with_vnext_f_on_and_vnext_off_zero_tg3_params (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRecallMemory_CompatV3_ZeroFlagsShape_T021", + "outcome": "pass", + "elapsed_seconds": 0.14, + "last_output": "--- PASS: TestRecallMemory_CompatV3_ZeroFlagsShape_T021 (0.14s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRecallMemory_CompatV3_ZeroFlagsShape_T021/runtime_no_ranking_rationale_key_when_flags_at_default", + "outcome": "pass", + "elapsed_seconds": 0.14, + "last_output": "--- PASS: TestRecallMemory_CompatV3_ZeroFlagsShape_T021/runtime_no_ranking_rationale_key_when_flags_at_default (0.14s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRecallMemory_CompatV3_ZeroFlagsShape_T021/schema_unconditional_tg3_params_present", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRecallMemory_CompatV3_ZeroFlagsShape_T021/schema_unconditional_tg3_params_present (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRecallMemory_DomainOwnedInvisibleNewestDoNotTruncate_FlagOff", + "outcome": "pass", + "elapsed_seconds": 0.14, + "last_output": "--- PASS: TestRecallMemory_DomainOwnedInvisibleNewestDoNotTruncate_FlagOff (0.14s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRecallMemory_FlagMatrix_BothEnabled_SchemaCombinesParams", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRecallMemory_FlagMatrix_BothEnabled_SchemaCombinesParams (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRecallMemory_FlagMatrix_FEnabled_SchemaHasScopeParams", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRecallMemory_FlagMatrix_FEnabled_SchemaHasScopeParams (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRecallMemory_FlagOFF_BehaviorIdentity", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRecallMemory_FlagOFF_BehaviorIdentity (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRecallMemory_FlagOFF_SchemaNoVnextParams", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRecallMemory_FlagOFF_SchemaNoVnextParams (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRecallMemory_FlagON_SchemaHasVnextParams", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRecallMemory_FlagON_SchemaHasVnextParams (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRecallMemory_IncludeSupersededFlagOffIgnoredInHybrid", + "outcome": "pass", + "elapsed_seconds": 0.12, + "last_output": "--- PASS: TestRecallMemory_IncludeSupersededFlagOffIgnoredInHybrid (0.12s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRecallMemory_InvalidIncludeScopes_StructuredError", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRecallMemory_InvalidIncludeScopes_StructuredError (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRecallMemory_PrincipalPrivateInvisibleAndSharedAttributed_FlagOff", + "outcome": "pass", + "elapsed_seconds": 0.13, + "last_output": "--- PASS: TestRecallMemory_PrincipalPrivateInvisibleAndSharedAttributed_FlagOff (0.13s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRecallMemory_TG3IncludeSupersededLegacyPath", + "outcome": "pass", + "elapsed_seconds": 0.14, + "last_output": "--- PASS: TestRecallMemory_TG3IncludeSupersededLegacyPath (0.14s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRecallMemoryDomainPolicy_DomainOwnedRowHiddenFromMismatchedPrincipal", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRecallMemoryDomainPolicy_DomainOwnedRowHiddenFromMismatchedPrincipal (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRecallMemoryDomainPolicy_DomainOwnedRowVisibleToOwner", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRecallMemoryDomainPolicy_DomainOwnedRowVisibleToOwner (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRecallMemoryIncludePrincipals_SchemaAdvertised", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRecallMemoryIncludePrincipals_SchemaAdvertised (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRecallMemoryIncludePrincipals_ValidationAndPrivacy", + "outcome": "pass", + "elapsed_seconds": 0.92, + "last_output": "--- PASS: TestRecallMemoryIncludePrincipals_ValidationAndPrivacy (0.92s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRecallMemoryIncludePrincipals_ValidationAndPrivacy/admin_cross-private_include_reapplies_recall_filters", + "outcome": "pass", + "elapsed_seconds": 0.17, + "last_output": "--- PASS: TestRecallMemoryIncludePrincipals_ValidationAndPrivacy/admin_cross-private_include_reapplies_recall_filters (0.17s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRecallMemoryIncludePrincipals_ValidationAndPrivacy/admin_cross-private_include_writes_durable_audit_before_returning_private_row", + "outcome": "pass", + "elapsed_seconds": 0.15, + "last_output": "--- PASS: TestRecallMemoryIncludePrincipals_ValidationAndPrivacy/admin_cross-private_include_writes_durable_audit_before_returning_private_row (0.15s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRecallMemoryIncludePrincipals_ValidationAndPrivacy/empty_include_list_is_treated_as_absent", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRecallMemoryIncludePrincipals_ValidationAndPrivacy/empty_include_list_is_treated_as_absent (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRecallMemoryIncludePrincipals_ValidationAndPrivacy/non-admin_cross-principal_include_appends_shared_rows", + "outcome": "pass", + "elapsed_seconds": 0.13, + "last_output": "--- PASS: TestRecallMemoryIncludePrincipals_ValidationAndPrivacy/non-admin_cross-principal_include_appends_shared_rows (0.13s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRecallMemoryIncludePrincipals_ValidationAndPrivacy/non-admin_cross-principal_include_skips_private_rows", + "outcome": "pass", + "elapsed_seconds": 0.13, + "last_output": "--- PASS: TestRecallMemoryIncludePrincipals_ValidationAndPrivacy/non-admin_cross-principal_include_skips_private_rows (0.13s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRecallMemoryIncludePrincipals_ValidationAndPrivacy/rejects_blank_and_invalid_principals_clearly", + "outcome": "pass", + "elapsed_seconds": 0.11, + "last_output": "--- PASS: TestRecallMemoryIncludePrincipals_ValidationAndPrivacy/rejects_blank_and_invalid_principals_clearly (0.11s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRecallMemoryIncludePrincipals_ValidationAndPrivacy/rejects_duplicate_principals", + "outcome": "pass", + "elapsed_seconds": 0.12, + "last_output": "--- PASS: TestRecallMemoryIncludePrincipals_ValidationAndPrivacy/rejects_duplicate_principals (0.12s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRecallMemoryIncludePrincipals_ValidationAndPrivacy/self_include_is_allowed_and_deduplicated", + "outcome": "pass", + "elapsed_seconds": 0.12, + "last_output": "--- PASS: TestRecallMemoryIncludePrincipals_ValidationAndPrivacy/self_include_is_allowed_and_deduplicated (0.12s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRecallMemoryPrincipalDefault_OwnSharedLegacyVisibleOtherPrivateHidden", + "outcome": "pass", + "elapsed_seconds": 0.15, + "last_output": "--- PASS: TestRecallMemoryPrincipalDefault_OwnSharedLegacyVisibleOtherPrivateHidden (0.15s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRecallMemoryTierFilter_FlagOff_SchemaAbsent_B4", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRecallMemoryTierFilter_FlagOff_SchemaAbsent_B4 (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRecallMemoryTierFilter_InvalidTier_B4", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRecallMemoryTierFilter_InvalidTier_B4 (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRecallMemoryToolSchema_B4_HasTierFilter", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRecallMemoryToolSchema_B4_HasTierFilter (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRecallMemoryToolSchema_T005", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRecallMemoryToolSchema_T005 (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRememberDirectiveDirectCallDelegatesContextAndReturnsSanitizedRecord", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRememberDirectiveDirectCallDelegatesContextAndReturnsSanitizedRecord (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRememberDirectiveDirectCallFailsClosedBeforeDelegation", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRememberDirectiveDirectCallFailsClosedBeforeDelegation (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRememberDirectiveDirectCallFailsClosedBeforeDelegation/flag_disabled", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRememberDirectiveDirectCallFailsClosedBeforeDelegation/flag_disabled (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRememberDirectiveDirectCallFailsClosedBeforeDelegation/master_flag_disabled_even_if_s4a_flag_is_enabled", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRememberDirectiveDirectCallFailsClosedBeforeDelegation/master_flag_disabled_even_if_s4a_flag_is_enabled (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRememberDirectiveDirectCallFailsClosedBeforeDelegation/project_context_missing", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRememberDirectiveDirectCallFailsClosedBeforeDelegation/project_context_missing (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRememberDirectiveDirectCallFailsClosedBeforeDelegation/service_missing", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRememberDirectiveDirectCallFailsClosedBeforeDelegation/service_missing (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRememberDirectiveDirectCallFailsClosedBeforeDelegation/session_context_missing", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRememberDirectiveDirectCallFailsClosedBeforeDelegation/session_context_missing (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRememberDirectiveToolAdvertisedOnlyWhenS4AFlagAndServiceArePresent", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRememberDirectiveToolAdvertisedOnlyWhenS4AFlagAndServiceArePresent (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRememberDirectiveToolAdvertisedOnlyWhenS4AFlagAndServiceArePresent/absent_when_flag_disabled_even_with_service", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRememberDirectiveToolAdvertisedOnlyWhenS4AFlagAndServiceArePresent/absent_when_flag_disabled_even_with_service (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRememberDirectiveToolAdvertisedOnlyWhenS4AFlagAndServiceArePresent/absent_when_master_flag_disabled_even_if_s4a_flag_and_service_are_present", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRememberDirectiveToolAdvertisedOnlyWhenS4AFlagAndServiceArePresent/absent_when_master_flag_disabled_even_if_s4a_flag_and_service_are_present (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRememberDirectiveToolAdvertisedOnlyWhenS4AFlagAndServiceArePresent/absent_when_service_is_missing_even_with_flag_enabled", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRememberDirectiveToolAdvertisedOnlyWhenS4AFlagAndServiceArePresent/absent_when_service_is_missing_even_with_flag_enabled (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRememberDirectiveToolAdvertisedOnlyWhenS4AFlagAndServiceArePresent/advertised_with_bounded_input_schema_when_flag_and_service_are_present", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRememberDirectiveToolAdvertisedOnlyWhenS4AFlagAndServiceArePresent/advertised_with_bounded_input_schema_when_flag_and_service_are_present (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRequest_Marshal_Table", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRequest_Marshal_Table (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRequest_Marshal_Table/initialize", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRequest_Marshal_Table/initialize (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRequest_Marshal_Table/null_id", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRequest_Marshal_Table/null_id (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRequest_Marshal_Table/string_id", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRequest_Marshal_Table/string_id (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRequest_Marshal_Table/with_params", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRequest_Marshal_Table/with_params (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRequest_Unmarshal_NullID", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRequest_Unmarshal_NullID (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRequest_Unmarshal_RoundTrip", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRequest_Unmarshal_RoundTrip (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRequireAdmin", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRequireAdmin (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRequireCandidateReviewSnapshotAllowsNonNil", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRequireCandidateReviewSnapshotAllowsNonNil (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRequireCandidateReviewSnapshotRejectsNil", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRequireCandidateReviewSnapshotRejectsNil (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRequireCandidateReviewSnapshotRejectsNil/reject_candidate", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRequireCandidateReviewSnapshotRejectsNil/reject_candidate (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRequireCandidateReviewSnapshotRejectsNil/supersede_candidate", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRequireCandidateReviewSnapshotRejectsNil/supersede_candidate (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestResponse_Marshal_Table", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestResponse_Marshal_Table (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestResponse_Marshal_Table/error_response", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestResponse_Marshal_Table/error_response (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestResponse_Marshal_Table/error_with_data", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestResponse_Marshal_Table/error_with_data (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestResponse_Marshal_Table/nil_id", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestResponse_Marshal_Table/nil_id (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestResponse_Marshal_Table/success_result", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestResponse_Marshal_Table/success_result (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRI_F2_DualFieldResponse_FlagOff_LegacyOnly_T008", + "outcome": "pass", + "elapsed_seconds": 0.13, + "last_output": "--- PASS: TestRI_F2_DualFieldResponse_FlagOff_LegacyOnly_T008 (0.13s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRI_F2_DualFieldResponse_FlagOn_T008", + "outcome": "pass", + "elapsed_seconds": 0.13, + "last_output": "--- PASS: TestRI_F2_DualFieldResponse_FlagOn_T008 (0.13s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRI_F2_DualFieldResponse_FlagOn_T008/explicit_privacy_scope=shared_overrides_legacy", + "outcome": "pass", + "elapsed_seconds": 0.01, + "last_output": "--- PASS: TestRI_F2_DualFieldResponse_FlagOn_T008/explicit_privacy_scope=shared_overrides_legacy (0.01s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRI_F2_DualFieldResponse_FlagOn_T008/legacy_scope=global,_no_privacy_scope_->_dual_global", + "outcome": "pass", + "elapsed_seconds": 0.01, + "last_output": "--- PASS: TestRI_F2_DualFieldResponse_FlagOn_T008/legacy_scope=global,_no_privacy_scope_->_dual_global (0.01s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRI_F2_DualFieldResponse_FlagOn_T008/legacy_scope=project,_no_privacy_scope_->_dual_project", + "outcome": "pass", + "elapsed_seconds": 0.01, + "last_output": "--- PASS: TestRI_F2_DualFieldResponse_FlagOn_T008/legacy_scope=project,_no_privacy_scope_->_dual_project (0.01s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRI_F2_InvalidPrivacyScope_StillStructuredErrorUnderFlagOn_T008", + "outcome": "pass", + "elapsed_seconds": 0.12, + "last_output": "--- PASS: TestRI_F2_InvalidPrivacyScope_StillStructuredErrorUnderFlagOn_T008 (0.12s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRuleGovernanceHealthReadOnlyCallerGetsNoData", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRuleGovernanceHealthReadOnlyCallerGetsNoData (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRuleGovernanceMutationToolsRequireAdmin", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRuleGovernanceMutationToolsRequireAdmin (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRuleGovernancePinSnapshotAndRollbackUseRuleGovernanceSnapshots", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRuleGovernancePinSnapshotAndRollbackUseRuleGovernanceSnapshots (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRuleGovernanceQueueAndSnapshotsReadModels", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRuleGovernanceQueueAndSnapshotsReadModels (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRuleGovernanceReadToolsAdvertisedWhenStoresWired", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRuleGovernanceReadToolsAdvertisedWhenStoresWired (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRuleGovernanceReadToolsHiddenWhenStoreMissing", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRuleGovernanceReadToolsHiddenWhenStoreMissing (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRuleGovernanceReadToolsNilStoreErrors", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRuleGovernanceReadToolsNilStoreErrors (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRuleGovernanceReadToolsRejectZeroIdentity", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRuleGovernanceReadToolsRejectZeroIdentity (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRuleGovernanceReadToolsRequireIdentityWhenAuthEnabled", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRuleGovernanceReadToolsRequireIdentityWhenAuthEnabled (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRuleGovernanceReadToolsRequireProjectForNonAdminAllProjectReads", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRuleGovernanceReadToolsRequireProjectForNonAdminAllProjectReads (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRuleGovernanceRollbackReturnsStructuredConflictResult", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRuleGovernanceRollbackReturnsStructuredConflictResult (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRuleGovernanceTransitionToolUsesStateMachineStore", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRuleGovernanceTransitionToolUsesStateMachineStore (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRuleGovernanceUsefulnessNoDataAndProjectGuard", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRuleGovernanceUsefulnessNoDataAndProjectGuard (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRun_EmptyLinesSkipped", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRun_EmptyLinesSkipped (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRun_MixedValidAndInvalid", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRun_MixedValidAndInvalid (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRun_MultipleRequests", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRun_MultipleRequests (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRun_NotificationNoResponse", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRun_NotificationNoResponse (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRun_ParseError", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRun_ParseError (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRun_ValidInitialize", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestRun_ValidInitialize (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRunAuditAsync_ErrorLogged", + "outcome": "pass", + "elapsed_seconds": 0.05, + "last_output": "--- PASS: TestRunAuditAsync_ErrorLogged (0.05s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestRunAuditAsync_PanicRecovered", + "outcome": "pass", + "elapsed_seconds": 0.05, + "last_output": "--- PASS: TestRunAuditAsync_PanicRecovered (0.05s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestSanitizeToolCallArgs_OtherToolsStillRedactSecrets", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestSanitizeToolCallArgs_OtherToolsStillRedactSecrets (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestSanitizeToolCallArgs_RememberDirectiveRedactsRawLogArguments", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestSanitizeToolCallArgs_RememberDirectiveRedactsRawLogArguments (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestSendError_OutputShape", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestSendError_OutputShape (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestSendResponse_ContainsJSONRPC", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestSendResponse_ContainsJSONRPC (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestSendResponse_ErrorResponse", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestSendResponse_ErrorResponse (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestSendResponse_NilID", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestSendResponse_NilID (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestSendResponse_VariousIDTypes", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestSendResponse_VariousIDTypes (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestServer_FieldsInjected", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestServer_FieldsInjected (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestServerSetAuditStoreAssignsField", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestServerSetAuditStoreAssignsField (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestSetStateThenGetStateResumeUsesServerCallPath", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestSetStateThenGetStateResumeUsesServerCallPath (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestSetStateToolRejectsNonAgentProjectWriter", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestSetStateToolRejectsNonAgentProjectWriter (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestSetStateToolRejectsNonObjectSessionSlots", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestSetStateToolRejectsNonObjectSessionSlots (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestSetStateToolRejectsSessionPayloadOver32KB", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestSetStateToolRejectsSessionPayloadOver32KB (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestSetStateToolWritesNativeSessionAndProjectState", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestSetStateToolWritesNativeSessionAndProjectState (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestSettings_DeleteRequiresAdmin", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestSettings_DeleteRequiresAdmin (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestSettings_SetMissingArgs", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestSettings_SetMissingArgs (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestSettings_SetRequiresAdmin", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestSettings_SetRequiresAdmin (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestSettings_UnknownAction", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestSettings_UnknownAction (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestStateToolsAdvertisedOnlyWhenNativeStoreIsReachable", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestStateToolsAdvertisedOnlyWhenNativeStoreIsReachable (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestStoreMemory_DryRun_NilStore", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestStoreMemory_DryRun_NilStore (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestStoreMemory_DryRun_RequiresContent", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestStoreMemory_DryRun_RequiresContent (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestStoreMemory_InvalidPrivacyScope_StructuredError", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestStoreMemory_InvalidPrivacyScope_StructuredError (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestStoreMemory_PrincipalOwnerDerivedFromIdentity", + "outcome": "pass", + "elapsed_seconds": 0.12, + "last_output": "--- PASS: TestStoreMemory_PrincipalOwnerDerivedFromIdentity (0.12s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestStoreMemoryAlwaysInject_FlagOffDoesNotUseRuleGovernance", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestStoreMemoryAlwaysInject_FlagOffDoesNotUseRuleGovernance (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestStoreMemoryAlwaysInject_GovernanceFlagCreatesRuleCandidate", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestStoreMemoryAlwaysInject_GovernanceFlagCreatesRuleCandidate (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestStoreMemoryDomainPolicy_EmptyDomainLegacyCompatible", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestStoreMemoryDomainPolicy_EmptyDomainLegacyCompatible (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestStoreMemoryDomainPolicy_NonEmptyDomainAllowsPrincipalIdentity", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestStoreMemoryDomainPolicy_NonEmptyDomainAllowsPrincipalIdentity (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestStoreMemoryDomainPolicy_NonEmptyDomainRejectsInvalidPrincipalKind", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestStoreMemoryDomainPolicy_NonEmptyDomainRejectsInvalidPrincipalKind (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestStoreMemoryDomainPolicy_NonEmptyDomainRequiresPrincipal", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestStoreMemoryDomainPolicy_NonEmptyDomainRequiresPrincipal (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestStoreMemoryDomainRegistry_AuditFailureBlocksBeforePersistence", + "outcome": "pass", + "elapsed_seconds": 0.11, + "last_output": "--- PASS: TestStoreMemoryDomainRegistry_AuditFailureBlocksBeforePersistence (0.11s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestStoreMemoryDomainRegistry_InvalidWriterKindRejectsBeforePersistence", + "outcome": "pass", + "elapsed_seconds": 0.12, + "last_output": "--- PASS: TestStoreMemoryDomainRegistry_InvalidWriterKindRejectsBeforePersistence (0.12s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestStoreMemoryDomainRegistry_RejectionRunsBeforeSupersedeMutation", + "outcome": "pass", + "elapsed_seconds": 0.15, + "last_output": "--- PASS: TestStoreMemoryDomainRegistry_RejectionRunsBeforeSupersedeMutation (0.15s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestStoreMemoryDomainRegistry_WarnRejectAndCompatibility", + "outcome": "pass", + "elapsed_seconds": 0.2, + "last_output": "--- PASS: TestStoreMemoryDomainRegistry_WarnRejectAndCompatibility (0.20s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestStoreMemoryDomainRegistry_WarnRejectAndCompatibility/missing_row_preserves_current_behavior", + "outcome": "pass", + "elapsed_seconds": 0.01, + "last_output": "--- PASS: TestStoreMemoryDomainRegistry_WarnRejectAndCompatibility/missing_row_preserves_current_behavior (0.01s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestStoreMemoryDomainRegistry_WarnRejectAndCompatibility/off_allows_cross_owner", + "outcome": "pass", + "elapsed_seconds": 0.02, + "last_output": "--- PASS: TestStoreMemoryDomainRegistry_WarnRejectAndCompatibility/off_allows_cross_owner (0.02s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestStoreMemoryDomainRegistry_WarnRejectAndCompatibility/reject_denies_before_persistence", + "outcome": "pass", + "elapsed_seconds": 0.01, + "last_output": "--- PASS: TestStoreMemoryDomainRegistry_WarnRejectAndCompatibility/reject_denies_before_persistence (0.01s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestStoreMemoryDomainRegistry_WarnRejectAndCompatibility/same_owner_allows_without_warning", + "outcome": "pass", + "elapsed_seconds": 0.01, + "last_output": "--- PASS: TestStoreMemoryDomainRegistry_WarnRejectAndCompatibility/same_owner_allows_without_warning (0.01s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestStoreMemoryDomainRegistry_WarnRejectAndCompatibility/warn_allows_with_structured_warning", + "outcome": "pass", + "elapsed_seconds": 0.02, + "last_output": "--- PASS: TestStoreMemoryDomainRegistry_WarnRejectAndCompatibility/warn_allows_with_structured_warning (0.02s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestStoreMemoryDryRunValidatesPrincipalMetadata", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestStoreMemoryDryRunValidatesPrincipalMetadata (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestStoreMemoryToolSchema_FlagOff_HasNewProperties_ButRuntimeIgnores", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestStoreMemoryToolSchema_FlagOff_HasNewProperties_ButRuntimeIgnores (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestStoreMemoryToolSchema_T005", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestStoreMemoryToolSchema_T005 (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestStoreRule_FlagOffDoesNotUseRuleGovernance", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestStoreRule_FlagOffDoesNotUseRuleGovernance (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestStoreRule_GovernanceFlagCreatesRuleCandidate", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestStoreRule_GovernanceFlagCreatesRuleCandidate (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestStoreRule_GovernanceFlagPreservesGlobalIntentWithContextProject", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestStoreRule_GovernanceFlagPreservesGlobalIntentWithContextProject (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestStoreRule_GovernanceFlagRedactsCandidateContent", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestStoreRule_GovernanceFlagRedactsCandidateContent (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestTemporalTruthDirectCallFailsClosedWhenFeatureGateUnsatisfied", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestTemporalTruthDirectCallFailsClosedWhenFeatureGateUnsatisfied (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestTemporalTruthRefreshDirectCallFailsClosedWhenFeatureGateUnsatisfied", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestTemporalTruthRefreshDirectCallFailsClosedWhenFeatureGateUnsatisfied (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestTemporalTruthRefreshToolAdvertisedWhenProviderWiredAndFlagOn", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestTemporalTruthRefreshToolAdvertisedWhenProviderWiredAndFlagOn (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestTemporalTruthToolAdvertisedWhenProviderWiredAndFlagOn", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestTemporalTruthToolAdvertisedWhenProviderWiredAndFlagOn (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestTemporalTruthToolsAbsentWhenFlagOff", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestTemporalTruthToolsAbsentWhenFlagOff (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestTierConstants", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestTierConstants (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestTimelineParams_AllFields", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestTimelineParams_AllFields (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestTimelineParams_Unmarshal_Table", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestTimelineParams_Unmarshal_Table (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestTimelineParams_Unmarshal_Table/anchor_id", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestTimelineParams_Unmarshal_Table/anchor_id (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestTimelineParams_Unmarshal_Table/empty_object_valid", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestTimelineParams_Unmarshal_Table/empty_object_valid (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestTimelineParams_Unmarshal_Table/invalid_json", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestTimelineParams_Unmarshal_Table/invalid_json (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestTimelineParams_Unmarshal_Table/query_only", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestTimelineParams_Unmarshal_Table/query_only (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestTool_Marshal_RoundTrip", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestTool_Marshal_RoundTrip (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestToolCallParams_ComplexArgs", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestToolCallParams_ComplexArgs (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestToolCallParams_Unmarshal", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestToolCallParams_Unmarshal (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestToolCallParams_Unmarshal/no-args", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestToolCallParams_Unmarshal/no-args (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestToolCallParams_Unmarshal/recall", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestToolCallParams_Unmarshal/recall (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestToolCallParams_Unmarshal/store", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestToolCallParams_Unmarshal/store (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestVersion_ReturnsVersion", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestVersion_ReturnsVersion (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestWiring_BothToolsOff_FlagsUnset", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestWiring_BothToolsOff_FlagsUnset (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestWiring_GraphTool_AbsentWhenFlagOff", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestWiring_GraphTool_AbsentWhenFlagOff (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestWiring_GraphTool_AbsentWhenStoreNil", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestWiring_GraphTool_AbsentWhenStoreNil (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestWiring_GraphTool_AppearsWhenStoreSetAndFlagOn", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestWiring_GraphTool_AppearsWhenStoreSetAndFlagOn (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestWiring_LifecycleTool_AbsentWhenFlagOff", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestWiring_LifecycleTool_AbsentWhenFlagOff (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestWiring_LifecycleTool_AbsentWhenStoresNil", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestWiring_LifecycleTool_AbsentWhenStoresNil (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestWiring_LifecycleTool_AppearsWhenStoresSetAndFlagOn", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestWiring_LifecycleTool_AppearsWhenStoresSetAndFlagOn (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestWriteLint_DomainOwnedCandidateHiddenWithOrchestratorStoreFallback", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestWriteLint_DomainOwnedCandidateHiddenWithOrchestratorStoreFallback (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestWriteLint_DomainOwnedTargetHiddenWithOrchestratorStoreFallback", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestWriteLint_DomainOwnedTargetHiddenWithOrchestratorStoreFallback (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestWriteLint_PrincipalPrivateCandidatesHiddenFromPhase1", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestWriteLint_PrincipalPrivateCandidatesHiddenFromPhase1 (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestWriteLint_PrincipalPrivateTargetHiddenFromPhase2", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestWriteLint_PrincipalPrivateTargetHiddenFromPhase2 (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestWriteLint_T035_FlagOff_LegacyPath", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestWriteLint_T035_FlagOff_LegacyPath (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestWriteLint_T035_ForceBypass", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestWriteLint_T035_ForceBypass (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestWriteLint_T035_Phase1_NoSignal_Stored", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestWriteLint_T035_Phase1_NoSignal_Stored (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestWriteLint_T035_Phase1_SignalsReturned", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestWriteLint_T035_Phase1_SignalsReturned (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestWriteLint_T035_Phase2_MergeWith", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestWriteLint_T035_Phase2_MergeWith (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestWriteLint_T035_PrivateScope_NoWorkstation_Rejected", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestWriteLint_T035_PrivateScope_NoWorkstation_Rejected (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestWriteLint_T035_PrivateScope_WithWorkstation_Allowed", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestWriteLint_T035_PrivateScope_WithWorkstation_Allowed (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestWriteLint_T035_TokenExpired", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestWriteLint_T035_TokenExpired (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestWriteLintDomainPolicy_DomainOwnedCandidateHidden", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestWriteLintDomainPolicy_DomainOwnedCandidateHidden (0.00s)", + "skip_allowed": false + }, + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestWriteLintDomainPolicy_DomainOwnedTargetHidden", + "outcome": "pass", + "elapsed_seconds": 0.0, + "last_output": "--- PASS: TestWriteLintDomainPolicy_DomainOwnedTargetHidden (0.00s)", + "skip_allowed": false + } + ], + "unexpected_skips": [], + "errors": [] +} diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/repeat-01/go-test.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/repeat-01/go-test.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/repeat-01/go-test.stdout.jsonl b/.agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/repeat-01/go-test.stdout.jsonl new file mode 100644 index 00000000..8be7e4e0 --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/repeat-01/go-test.stdout.jsonl @@ -0,0 +1,2446 @@ +{"Time":"2026-07-11T04:02:05.1463625+03:00","Action":"start","Package":"github.com/thebtf/engram/internal/mcp"} +{"Time":"2026-07-11T04:02:05.2324626+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestParseArgs"} +{"Time":"2026-07-11T04:02:05.2324626+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestParseArgs","Output":"=== RUN TestParseArgs\n"} +{"Time":"2026-07-11T04:02:05.2324626+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestParseArgs/nil_args"} +{"Time":"2026-07-11T04:02:05.2324626+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestParseArgs/nil_args","Output":"=== RUN TestParseArgs/nil_args\n"} +{"Time":"2026-07-11T04:02:05.2324626+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestParseArgs/nil_args","Output":"--- PASS: TestParseArgs/nil_args (0.00s)\n"} +{"Time":"2026-07-11T04:02:05.2324626+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestParseArgs/nil_args","Elapsed":0} +{"Time":"2026-07-11T04:02:05.2324626+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestParseArgs/empty_bytes"} +{"Time":"2026-07-11T04:02:05.2324626+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestParseArgs/empty_bytes","Output":"=== RUN TestParseArgs/empty_bytes\n"} +{"Time":"2026-07-11T04:02:05.2324626+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestParseArgs/empty_bytes","Output":"--- PASS: TestParseArgs/empty_bytes (0.00s)\n"} +{"Time":"2026-07-11T04:02:05.2324626+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestParseArgs/empty_bytes","Elapsed":0} +{"Time":"2026-07-11T04:02:05.2324626+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestParseArgs/empty_object"} +{"Time":"2026-07-11T04:02:05.2324626+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestParseArgs/empty_object","Output":"=== RUN TestParseArgs/empty_object\n"} +{"Time":"2026-07-11T04:02:05.2324626+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestParseArgs/empty_object","Output":"--- PASS: TestParseArgs/empty_object (0.00s)\n"} +{"Time":"2026-07-11T04:02:05.2324626+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestParseArgs/empty_object","Elapsed":0} +{"Time":"2026-07-11T04:02:05.2324626+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestParseArgs/valid_object"} +{"Time":"2026-07-11T04:02:05.2324626+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestParseArgs/valid_object","Output":"=== RUN TestParseArgs/valid_object\n"} +{"Time":"2026-07-11T04:02:05.2324626+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestParseArgs/valid_object","Output":"--- PASS: TestParseArgs/valid_object (0.00s)\n"} +{"Time":"2026-07-11T04:02:05.2324626+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestParseArgs/valid_object","Elapsed":0} +{"Time":"2026-07-11T04:02:05.2324626+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestParseArgs/invalid_json"} +{"Time":"2026-07-11T04:02:05.2324626+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestParseArgs/invalid_json","Output":"=== RUN TestParseArgs/invalid_json\n"} +{"Time":"2026-07-11T04:02:05.2324626+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestParseArgs/invalid_json","Output":"--- PASS: TestParseArgs/invalid_json (0.00s)\n"} +{"Time":"2026-07-11T04:02:05.2324626+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestParseArgs/invalid_json","Elapsed":0} +{"Time":"2026-07-11T04:02:05.2324626+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestParseArgs","Output":"--- PASS: TestParseArgs (0.00s)\n"} +{"Time":"2026-07-11T04:02:05.2324626+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestParseArgs","Elapsed":0} +{"Time":"2026-07-11T04:02:05.2324626+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceString"} +{"Time":"2026-07-11T04:02:05.2324626+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceString","Output":"=== RUN TestCoerceString\n"} +{"Time":"2026-07-11T04:02:05.2324626+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceString/nil"} +{"Time":"2026-07-11T04:02:05.2324626+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceString/nil","Output":"=== RUN TestCoerceString/nil\n"} +{"Time":"2026-07-11T04:02:05.2324626+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceString/nil","Output":"--- PASS: TestCoerceString/nil (0.00s)\n"} +{"Time":"2026-07-11T04:02:05.2324626+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceString/nil","Elapsed":0} +{"Time":"2026-07-11T04:02:05.2324626+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceString/string"} +{"Time":"2026-07-11T04:02:05.2324626+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceString/string","Output":"=== RUN TestCoerceString/string\n"} +{"Time":"2026-07-11T04:02:05.2324626+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceString/string","Output":"--- PASS: TestCoerceString/string (0.00s)\n"} +{"Time":"2026-07-11T04:02:05.2324626+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceString/string","Elapsed":0} +{"Time":"2026-07-11T04:02:05.2324626+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceString/float64"} +{"Time":"2026-07-11T04:02:05.2324626+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceString/float64","Output":"=== RUN TestCoerceString/float64\n"} +{"Time":"2026-07-11T04:02:05.2324626+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceString/float64","Output":"--- PASS: TestCoerceString/float64 (0.00s)\n"} +{"Time":"2026-07-11T04:02:05.2324626+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceString/float64","Elapsed":0} +{"Time":"2026-07-11T04:02:05.2324626+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceString/bool"} +{"Time":"2026-07-11T04:02:05.2324626+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceString/bool","Output":"=== RUN TestCoerceString/bool\n"} +{"Time":"2026-07-11T04:02:05.2324626+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceString/bool","Output":"--- PASS: TestCoerceString/bool (0.00s)\n"} +{"Time":"2026-07-11T04:02:05.2324626+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceString/bool","Elapsed":0} +{"Time":"2026-07-11T04:02:05.2324626+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceString/json.Number"} +{"Time":"2026-07-11T04:02:05.2324626+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceString/json.Number","Output":"=== RUN TestCoerceString/json.Number\n"} +{"Time":"2026-07-11T04:02:05.2324626+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceString/json.Number","Output":"--- PASS: TestCoerceString/json.Number (0.00s)\n"} +{"Time":"2026-07-11T04:02:05.2324626+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceString/json.Number","Elapsed":0} +{"Time":"2026-07-11T04:02:05.2324626+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceString/wrong_type"} +{"Time":"2026-07-11T04:02:05.2324626+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceString/wrong_type","Output":"=== RUN TestCoerceString/wrong_type\n"} +{"Time":"2026-07-11T04:02:05.2324626+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceString/wrong_type","Output":"--- PASS: TestCoerceString/wrong_type (0.00s)\n"} +{"Time":"2026-07-11T04:02:05.2324626+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceString/wrong_type","Elapsed":0} +{"Time":"2026-07-11T04:02:05.2324626+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceString","Output":"--- PASS: TestCoerceString (0.00s)\n"} +{"Time":"2026-07-11T04:02:05.2324626+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceString","Elapsed":0} +{"Time":"2026-07-11T04:02:05.2324626+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt"} +{"Time":"2026-07-11T04:02:05.2324626+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt","Output":"=== RUN TestCoerceInt\n"} +{"Time":"2026-07-11T04:02:05.2324626+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt/nil"} +{"Time":"2026-07-11T04:02:05.2324626+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt/nil","Output":"=== RUN TestCoerceInt/nil\n"} +{"Time":"2026-07-11T04:02:05.2324626+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt/nil","Output":"--- PASS: TestCoerceInt/nil (0.00s)\n"} +{"Time":"2026-07-11T04:02:05.2324626+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt/nil","Elapsed":0} +{"Time":"2026-07-11T04:02:05.2324626+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt/float64"} +{"Time":"2026-07-11T04:02:05.2324626+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt/float64","Output":"=== RUN TestCoerceInt/float64\n"} +{"Time":"2026-07-11T04:02:05.2324626+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt/float64","Output":"--- PASS: TestCoerceInt/float64 (0.00s)\n"} +{"Time":"2026-07-11T04:02:05.2324626+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt/float64","Elapsed":0} +{"Time":"2026-07-11T04:02:05.2324626+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt/float64_with_decimal"} +{"Time":"2026-07-11T04:02:05.2324626+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt/float64_with_decimal","Output":"=== RUN TestCoerceInt/float64_with_decimal\n"} +{"Time":"2026-07-11T04:02:05.2324626+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt/float64_with_decimal","Output":"--- PASS: TestCoerceInt/float64_with_decimal (0.00s)\n"} +{"Time":"2026-07-11T04:02:05.2324626+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt/float64_with_decimal","Elapsed":0} +{"Time":"2026-07-11T04:02:05.2324626+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt/string_int"} +{"Time":"2026-07-11T04:02:05.2324626+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt/string_int","Output":"=== RUN TestCoerceInt/string_int\n"} +{"Time":"2026-07-11T04:02:05.2324626+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt/string_int","Output":"--- PASS: TestCoerceInt/string_int (0.00s)\n"} +{"Time":"2026-07-11T04:02:05.2324626+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt/string_int","Elapsed":0} +{"Time":"2026-07-11T04:02:05.2324626+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt/string_float"} +{"Time":"2026-07-11T04:02:05.2324626+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt/string_float","Output":"=== RUN TestCoerceInt/string_float\n"} +{"Time":"2026-07-11T04:02:05.2324626+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt/string_float","Output":"--- PASS: TestCoerceInt/string_float (0.00s)\n"} +{"Time":"2026-07-11T04:02:05.2324626+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt/string_float","Elapsed":0} +{"Time":"2026-07-11T04:02:05.2324626+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt/json.Number_int"} +{"Time":"2026-07-11T04:02:05.2324626+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt/json.Number_int","Output":"=== RUN TestCoerceInt/json.Number_int\n"} +{"Time":"2026-07-11T04:02:05.2324626+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt/json.Number_int","Output":"--- PASS: TestCoerceInt/json.Number_int (0.00s)\n"} +{"Time":"2026-07-11T04:02:05.2324626+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt/json.Number_int","Elapsed":0} +{"Time":"2026-07-11T04:02:05.2324626+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt/json.Number_float"} +{"Time":"2026-07-11T04:02:05.2324626+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt/json.Number_float","Output":"=== RUN TestCoerceInt/json.Number_float\n"} +{"Time":"2026-07-11T04:02:05.2324626+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt/json.Number_float","Output":"--- PASS: TestCoerceInt/json.Number_float (0.00s)\n"} +{"Time":"2026-07-11T04:02:05.2324626+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt/json.Number_float","Elapsed":0} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt/string_non-numeric"} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt/string_non-numeric","Output":"=== RUN TestCoerceInt/string_non-numeric\n"} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt/string_non-numeric","Output":"--- PASS: TestCoerceInt/string_non-numeric (0.00s)\n"} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt/string_non-numeric","Elapsed":0} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt/bool"} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt/bool","Output":"=== RUN TestCoerceInt/bool\n"} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt/bool","Output":"--- PASS: TestCoerceInt/bool (0.00s)\n"} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt/bool","Elapsed":0} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt/negative_float"} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt/negative_float","Output":"=== RUN TestCoerceInt/negative_float\n"} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt/negative_float","Output":"--- PASS: TestCoerceInt/negative_float (0.00s)\n"} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt/negative_float","Elapsed":0} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt/zero"} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt/zero","Output":"=== RUN TestCoerceInt/zero\n"} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt/zero","Output":"--- PASS: TestCoerceInt/zero (0.00s)\n"} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt/zero","Elapsed":0} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt/overflow_float64"} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt/overflow_float64","Output":"=== RUN TestCoerceInt/overflow_float64\n"} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt/overflow_float64","Output":"--- PASS: TestCoerceInt/overflow_float64 (0.00s)\n"} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt/overflow_float64","Elapsed":0} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt/negative_overflow"} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt/negative_overflow","Output":"=== RUN TestCoerceInt/negative_overflow\n"} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt/negative_overflow","Output":"--- PASS: TestCoerceInt/negative_overflow (0.00s)\n"} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt/negative_overflow","Elapsed":0} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt/NaN"} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt/NaN","Output":"=== RUN TestCoerceInt/NaN\n"} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt/NaN","Output":"--- PASS: TestCoerceInt/NaN (0.00s)\n"} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt/NaN","Elapsed":0} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt/Inf"} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt/Inf","Output":"=== RUN TestCoerceInt/Inf\n"} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt/Inf","Output":"--- PASS: TestCoerceInt/Inf (0.00s)\n"} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt/Inf","Elapsed":0} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt","Output":"--- PASS: TestCoerceInt (0.00s)\n"} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt","Elapsed":0} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt64"} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt64","Output":"=== RUN TestCoerceInt64\n"} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt64/nil"} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt64/nil","Output":"=== RUN TestCoerceInt64/nil\n"} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt64/nil","Output":"--- PASS: TestCoerceInt64/nil (0.00s)\n"} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt64/nil","Elapsed":0} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt64/float64"} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt64/float64","Output":"=== RUN TestCoerceInt64/float64\n"} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt64/float64","Output":"--- PASS: TestCoerceInt64/float64 (0.00s)\n"} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt64/float64","Elapsed":0} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt64/string"} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt64/string","Output":"=== RUN TestCoerceInt64/string\n"} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt64/string","Output":"--- PASS: TestCoerceInt64/string (0.00s)\n"} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt64/string","Elapsed":0} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt64/json.Number"} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt64/json.Number","Output":"=== RUN TestCoerceInt64/json.Number\n"} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt64/json.Number","Output":"--- PASS: TestCoerceInt64/json.Number (0.00s)\n"} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt64/json.Number","Elapsed":0} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt64/json.Number_float"} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt64/json.Number_float","Output":"=== RUN TestCoerceInt64/json.Number_float\n"} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt64/json.Number_float","Output":"--- PASS: TestCoerceInt64/json.Number_float (0.00s)\n"} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt64/json.Number_float","Elapsed":0} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt64/string_float"} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt64/string_float","Output":"=== RUN TestCoerceInt64/string_float\n"} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt64/string_float","Output":"--- PASS: TestCoerceInt64/string_float (0.00s)\n"} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt64/string_float","Elapsed":0} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt64/invalid_string"} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt64/invalid_string","Output":"=== RUN TestCoerceInt64/invalid_string\n"} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt64/invalid_string","Output":"--- PASS: TestCoerceInt64/invalid_string (0.00s)\n"} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt64/invalid_string","Elapsed":0} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt64","Output":"--- PASS: TestCoerceInt64 (0.00s)\n"} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt64","Elapsed":0} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceFloat64"} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceFloat64","Output":"=== RUN TestCoerceFloat64\n"} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceFloat64/nil"} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceFloat64/nil","Output":"=== RUN TestCoerceFloat64/nil\n"} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceFloat64/nil","Output":"--- PASS: TestCoerceFloat64/nil (0.00s)\n"} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceFloat64/nil","Elapsed":0} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceFloat64/float64"} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceFloat64/float64","Output":"=== RUN TestCoerceFloat64/float64\n"} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceFloat64/float64","Output":"--- PASS: TestCoerceFloat64/float64 (0.00s)\n"} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceFloat64/float64","Elapsed":0} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceFloat64/string"} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceFloat64/string","Output":"=== RUN TestCoerceFloat64/string\n"} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceFloat64/string","Output":"--- PASS: TestCoerceFloat64/string (0.00s)\n"} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceFloat64/string","Elapsed":0} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceFloat64/json.Number"} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceFloat64/json.Number","Output":"=== RUN TestCoerceFloat64/json.Number\n"} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceFloat64/json.Number","Output":"--- PASS: TestCoerceFloat64/json.Number (0.00s)\n"} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceFloat64/json.Number","Elapsed":0} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceFloat64/invalid_string"} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceFloat64/invalid_string","Output":"=== RUN TestCoerceFloat64/invalid_string\n"} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceFloat64/invalid_string","Output":"--- PASS: TestCoerceFloat64/invalid_string (0.00s)\n"} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceFloat64/invalid_string","Elapsed":0} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceFloat64/integer_string"} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceFloat64/integer_string","Output":"=== RUN TestCoerceFloat64/integer_string\n"} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceFloat64/integer_string","Output":"--- PASS: TestCoerceFloat64/integer_string (0.00s)\n"} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceFloat64/integer_string","Elapsed":0} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceFloat64","Output":"--- PASS: TestCoerceFloat64 (0.00s)\n"} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceFloat64","Elapsed":0} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceBool"} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceBool","Output":"=== RUN TestCoerceBool\n"} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceBool/nil"} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceBool/nil","Output":"=== RUN TestCoerceBool/nil\n"} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceBool/nil","Output":"--- PASS: TestCoerceBool/nil (0.00s)\n"} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceBool/nil","Elapsed":0} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceBool/true"} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceBool/true","Output":"=== RUN TestCoerceBool/true\n"} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceBool/true","Output":"--- PASS: TestCoerceBool/true (0.00s)\n"} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceBool/true","Elapsed":0} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceBool/false"} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceBool/false","Output":"=== RUN TestCoerceBool/false\n"} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceBool/false","Output":"--- PASS: TestCoerceBool/false (0.00s)\n"} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceBool/false","Elapsed":0} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceBool/string_true"} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceBool/string_true","Output":"=== RUN TestCoerceBool/string_true\n"} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceBool/string_true","Output":"--- PASS: TestCoerceBool/string_true (0.00s)\n"} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceBool/string_true","Elapsed":0} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceBool/string_false"} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceBool/string_false","Output":"=== RUN TestCoerceBool/string_false\n"} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceBool/string_false","Output":"--- PASS: TestCoerceBool/string_false (0.00s)\n"} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceBool/string_false","Elapsed":0} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceBool/float_1"} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceBool/float_1","Output":"=== RUN TestCoerceBool/float_1\n"} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceBool/float_1","Output":"--- PASS: TestCoerceBool/float_1 (0.00s)\n"} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceBool/float_1","Elapsed":0} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceBool/float_0"} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceBool/float_0","Output":"=== RUN TestCoerceBool/float_0\n"} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceBool/float_0","Output":"--- PASS: TestCoerceBool/float_0 (0.00s)\n"} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceBool/float_0","Elapsed":0} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceBool/invalid_string"} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceBool/invalid_string","Output":"=== RUN TestCoerceBool/invalid_string\n"} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceBool/invalid_string","Output":"--- PASS: TestCoerceBool/invalid_string (0.00s)\n"} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceBool/invalid_string","Elapsed":0} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceBool","Output":"--- PASS: TestCoerceBool (0.00s)\n"} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceBool","Elapsed":0} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceStringSlice"} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceStringSlice","Output":"=== RUN TestCoerceStringSlice\n"} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceStringSlice/nil"} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceStringSlice/nil","Output":"=== RUN TestCoerceStringSlice/nil\n"} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceStringSlice/nil","Output":"--- PASS: TestCoerceStringSlice/nil (0.00s)\n"} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceStringSlice/nil","Elapsed":0} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceStringSlice/single_string"} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceStringSlice/single_string","Output":"=== RUN TestCoerceStringSlice/single_string\n"} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceStringSlice/single_string","Output":"--- PASS: TestCoerceStringSlice/single_string (0.00s)\n"} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceStringSlice/single_string","Elapsed":0} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceStringSlice/empty_string"} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceStringSlice/empty_string","Output":"=== RUN TestCoerceStringSlice/empty_string\n"} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceStringSlice/empty_string","Output":"--- PASS: TestCoerceStringSlice/empty_string (0.00s)\n"} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceStringSlice/empty_string","Elapsed":0} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceStringSlice/array_of_strings"} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceStringSlice/array_of_strings","Output":"=== RUN TestCoerceStringSlice/array_of_strings\n"} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceStringSlice/array_of_strings","Output":"--- PASS: TestCoerceStringSlice/array_of_strings (0.00s)\n"} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceStringSlice/array_of_strings","Elapsed":0} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceStringSlice/mixed_array"} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceStringSlice/mixed_array","Output":"=== RUN TestCoerceStringSlice/mixed_array\n"} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceStringSlice/mixed_array","Output":"--- PASS: TestCoerceStringSlice/mixed_array (0.00s)\n"} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceStringSlice/mixed_array","Elapsed":0} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceStringSlice","Output":"--- PASS: TestCoerceStringSlice (0.00s)\n"} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceStringSlice","Elapsed":0} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt64Slice"} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt64Slice","Output":"=== RUN TestCoerceInt64Slice\n"} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt64Slice/nil"} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt64Slice/nil","Output":"=== RUN TestCoerceInt64Slice/nil\n"} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt64Slice/nil","Output":"--- PASS: TestCoerceInt64Slice/nil (0.00s)\n"} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt64Slice/nil","Elapsed":0} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt64Slice/not_array"} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt64Slice/not_array","Output":"=== RUN TestCoerceInt64Slice/not_array\n"} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt64Slice/not_array","Output":"--- PASS: TestCoerceInt64Slice/not_array (0.00s)\n"} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt64Slice/not_array","Elapsed":0} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt64Slice/float64_array"} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt64Slice/float64_array","Output":"=== RUN TestCoerceInt64Slice/float64_array\n"} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt64Slice/float64_array","Output":"--- PASS: TestCoerceInt64Slice/float64_array (0.00s)\n"} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt64Slice/float64_array","Elapsed":0} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt64Slice/string_array"} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt64Slice/string_array","Output":"=== RUN TestCoerceInt64Slice/string_array\n"} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt64Slice/string_array","Output":"--- PASS: TestCoerceInt64Slice/string_array (0.00s)\n"} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt64Slice/string_array","Elapsed":0} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt64Slice/mixed_array"} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt64Slice/mixed_array","Output":"=== RUN TestCoerceInt64Slice/mixed_array\n"} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt64Slice/mixed_array","Output":"--- PASS: TestCoerceInt64Slice/mixed_array (0.00s)\n"} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt64Slice/mixed_array","Elapsed":0} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt64Slice/with_zeros"} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt64Slice/with_zeros","Output":"=== RUN TestCoerceInt64Slice/with_zeros\n"} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt64Slice/with_zeros","Output":"--- PASS: TestCoerceInt64Slice/with_zeros (0.00s)\n"} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt64Slice/with_zeros","Elapsed":0} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt64Slice","Output":"--- PASS: TestCoerceInt64Slice (0.00s)\n"} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCoerceInt64Slice","Elapsed":0} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestExtractProjectFromHeader"} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestExtractProjectFromHeader","Output":"=== RUN TestExtractProjectFromHeader\n"} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestExtractProjectFromHeader","Output":"--- PASS: TestExtractProjectFromHeader (0.00s)\n"} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestExtractProjectFromHeader","Elapsed":0} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestExtractProjectFromHeader_Missing"} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestExtractProjectFromHeader_Missing","Output":"=== RUN TestExtractProjectFromHeader_Missing\n"} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestExtractProjectFromHeader_Missing","Output":"--- PASS: TestExtractProjectFromHeader_Missing (0.00s)\n"} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestExtractProjectFromHeader_Missing","Elapsed":0} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestProjectFromContext_RoundTrip"} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestProjectFromContext_RoundTrip","Output":"=== RUN TestProjectFromContext_RoundTrip\n"} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestProjectFromContext_RoundTrip","Output":"--- PASS: TestProjectFromContext_RoundTrip (0.00s)\n"} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestProjectFromContext_RoundTrip","Elapsed":0} +{"Time":"2026-07-11T04:02:05.232962+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestProjectFromContext_Empty"} +{"Time":"2026-07-11T04:02:05.2334639+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestProjectFromContext_Empty","Output":"=== RUN TestProjectFromContext_Empty\n"} +{"Time":"2026-07-11T04:02:05.2334639+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestProjectFromContext_Empty","Output":"--- PASS: TestProjectFromContext_Empty (0.00s)\n"} +{"Time":"2026-07-11T04:02:05.2334639+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestProjectFromContext_Empty","Elapsed":0} +{"Time":"2026-07-11T04:02:05.2334639+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemory_CompatV3_VnextFEnabled_ZeroTG3Params_T021b"} +{"Time":"2026-07-11T04:02:05.2334639+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemory_CompatV3_VnextFEnabled_ZeroTG3Params_T021b","Output":"=== RUN TestRecallMemory_CompatV3_VnextFEnabled_ZeroTG3Params_T021b\n"} +{"Time":"2026-07-11T04:02:05.2334639+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemory_CompatV3_VnextFEnabled_ZeroTG3Params_T021b/schema_with_vnext_f_on_and_vnext_off_zero_tg3_params"} +{"Time":"2026-07-11T04:02:05.2334639+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemory_CompatV3_VnextFEnabled_ZeroTG3Params_T021b/schema_with_vnext_f_on_and_vnext_off_zero_tg3_params","Output":"=== RUN TestRecallMemory_CompatV3_VnextFEnabled_ZeroTG3Params_T021b/schema_with_vnext_f_on_and_vnext_off_zero_tg3_params\n"} +{"Time":"2026-07-11T04:02:05.2339627+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemory_CompatV3_VnextFEnabled_ZeroTG3Params_T021b/schema_with_vnext_f_on_and_vnext_off_zero_tg3_params","Output":"--- PASS: TestRecallMemory_CompatV3_VnextFEnabled_ZeroTG3Params_T021b/schema_with_vnext_f_on_and_vnext_off_zero_tg3_params (0.00s)\n"} +{"Time":"2026-07-11T04:02:05.2339627+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemory_CompatV3_VnextFEnabled_ZeroTG3Params_T021b/schema_with_vnext_f_on_and_vnext_off_zero_tg3_params","Elapsed":0} +{"Time":"2026-07-11T04:02:05.2339627+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemory_CompatV3_VnextFEnabled_ZeroTG3Params_T021b/runtime_zero_tg3_params_vnext_f_on_vnext_off_no_rationale"} +{"Time":"2026-07-11T04:02:05.2339627+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemory_CompatV3_VnextFEnabled_ZeroTG3Params_T021b/runtime_zero_tg3_params_vnext_f_on_vnext_off_no_rationale","Output":"=== RUN TestRecallMemory_CompatV3_VnextFEnabled_ZeroTG3Params_T021b/runtime_zero_tg3_params_vnext_f_on_vnext_off_no_rationale\n"} +{"Time":"2026-07-11T04:02:06.0924737+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemory_CompatV3_VnextFEnabled_ZeroTG3Params_T021b/runtime_zero_tg3_params_vnext_f_on_vnext_off_no_rationale","Output":"{\"level\":\"warn\",\"error\":\"ERROR: relation \\\"observation_vectors\\\" does not exist (SQLSTATE 42P01)\",\"time\":\"2026-07-11T04:02:06+03:00\",\"message\":\"migration 040: orphan vector cleanup failed (non-fatal)\"}\n"} +{"Time":"2026-07-11T04:02:06.0924737+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemory_CompatV3_VnextFEnabled_ZeroTG3Params_T021b/runtime_zero_tg3_params_vnext_f_on_vnext_off_no_rationale","Output":"{\"level\":\"info\",\"garbage_deleted\":0,\"orphan_vectors_deleted\":0,\"time\":\"2026-07-11T04:02:06+03:00\",\"message\":\"migration 040: garbage cleanup complete\"}\n"} +{"Time":"2026-07-11T04:02:06.1004729+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemory_CompatV3_VnextFEnabled_ZeroTG3Params_T021b/runtime_zero_tg3_params_vnext_f_on_vnext_off_no_rationale","Output":"{\"level\":\"info\",\"orphan_vectors_deleted\":0,\"time\":\"2026-07-11T04:02:06+03:00\",\"message\":\"migration 041: orphan vector purge complete\"}\n"} +{"Time":"2026-07-11T04:02:06.1079728+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemory_CompatV3_VnextFEnabled_ZeroTG3Params_T021b/runtime_zero_tg3_params_vnext_f_on_vnext_off_no_rationale","Output":"{\"level\":\"info\",\"patterns_deleted\":0,\"time\":\"2026-07-11T04:02:06+03:00\",\"message\":\"migration 042: low-quality pattern purge complete\"}\n"} +{"Time":"2026-07-11T04:02:06.141279+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemory_CompatV3_VnextFEnabled_ZeroTG3Params_T021b/runtime_zero_tg3_params_vnext_f_on_vnext_off_no_rationale","Output":"{\"level\":\"info\",\"total_deleted\":0,\"time\":\"2026-07-11T04:02:06+03:00\",\"message\":\"migration 043: radical observation cleanup complete\"}\n"} +{"Time":"2026-07-11T04:02:07.3997777+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemory_CompatV3_VnextFEnabled_ZeroTG3Params_T021b/runtime_zero_tg3_params_vnext_f_on_vnext_off_no_rationale","Output":"{\"level\":\"warn\",\"error\":\"ERROR: extension \\\"vectorscale\\\" is not available (SQLSTATE 0A000)\",\"time\":\"2026-07-11T04:02:07+03:00\",\"message\":\"migration 109: vectorscale extension not available, skipping DiskANN index\"}\n"} +{"Time":"2026-07-11T04:02:08.6497733+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemory_CompatV3_VnextFEnabled_ZeroTG3Params_T021b/runtime_zero_tg3_params_vnext_f_on_vnext_off_no_rationale","Output":"{\"level\":\"debug\",\"connections\":1,\"time\":\"2026-07-11T04:02:08+03:00\",\"message\":\"Connection pool warmed\"}\n"} +{"Time":"2026-07-11T04:02:08.9984878+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemory_CompatV3_VnextFEnabled_ZeroTG3Params_T021b/runtime_zero_tg3_params_vnext_f_on_vnext_off_no_rationale","Output":"--- PASS: TestRecallMemory_CompatV3_VnextFEnabled_ZeroTG3Params_T021b/runtime_zero_tg3_params_vnext_f_on_vnext_off_no_rationale (3.76s)\n"} +{"Time":"2026-07-11T04:02:08.9984878+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemory_CompatV3_VnextFEnabled_ZeroTG3Params_T021b/runtime_zero_tg3_params_vnext_f_on_vnext_off_no_rationale","Elapsed":3.76} +{"Time":"2026-07-11T04:02:08.9984878+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemory_CompatV3_VnextFEnabled_ZeroTG3Params_T021b","Output":"--- PASS: TestRecallMemory_CompatV3_VnextFEnabled_ZeroTG3Params_T021b (3.77s)\n"} +{"Time":"2026-07-11T04:02:08.9984878+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemory_CompatV3_VnextFEnabled_ZeroTG3Params_T021b","Elapsed":3.77} +{"Time":"2026-07-11T04:02:08.9984878+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemory_CompatV3_ZeroFlagsShape_T021"} +{"Time":"2026-07-11T04:02:08.9984878+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemory_CompatV3_ZeroFlagsShape_T021","Output":"=== RUN TestRecallMemory_CompatV3_ZeroFlagsShape_T021\n"} +{"Time":"2026-07-11T04:02:08.9984878+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemory_CompatV3_ZeroFlagsShape_T021/schema_unconditional_tg3_params_present"} +{"Time":"2026-07-11T04:02:08.9984878+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemory_CompatV3_ZeroFlagsShape_T021/schema_unconditional_tg3_params_present","Output":"=== RUN TestRecallMemory_CompatV3_ZeroFlagsShape_T021/schema_unconditional_tg3_params_present\n"} +{"Time":"2026-07-11T04:02:08.9989887+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemory_CompatV3_ZeroFlagsShape_T021/schema_unconditional_tg3_params_present","Output":"--- PASS: TestRecallMemory_CompatV3_ZeroFlagsShape_T021/schema_unconditional_tg3_params_present (0.00s)\n"} +{"Time":"2026-07-11T04:02:08.9989887+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemory_CompatV3_ZeroFlagsShape_T021/schema_unconditional_tg3_params_present","Elapsed":0} +{"Time":"2026-07-11T04:02:08.9989887+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemory_CompatV3_ZeroFlagsShape_T021/runtime_no_ranking_rationale_key_when_flags_at_default"} +{"Time":"2026-07-11T04:02:08.9989887+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemory_CompatV3_ZeroFlagsShape_T021/runtime_no_ranking_rationale_key_when_flags_at_default","Output":"=== RUN TestRecallMemory_CompatV3_ZeroFlagsShape_T021/runtime_no_ranking_rationale_key_when_flags_at_default\n"} +{"Time":"2026-07-11T04:02:09.1143755+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemory_CompatV3_ZeroFlagsShape_T021/runtime_no_ranking_rationale_key_when_flags_at_default","Output":"{\"level\":\"debug\",\"connections\":1,\"time\":\"2026-07-11T04:02:09+03:00\",\"message\":\"Connection pool warmed\"}\n"} +{"Time":"2026-07-11T04:02:09.1353754+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemory_CompatV3_ZeroFlagsShape_T021/runtime_no_ranking_rationale_key_when_flags_at_default","Output":"--- PASS: TestRecallMemory_CompatV3_ZeroFlagsShape_T021/runtime_no_ranking_rationale_key_when_flags_at_default (0.14s)\n"} +{"Time":"2026-07-11T04:02:09.1353754+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemory_CompatV3_ZeroFlagsShape_T021/runtime_no_ranking_rationale_key_when_flags_at_default","Elapsed":0.14} +{"Time":"2026-07-11T04:02:09.1353754+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemory_CompatV3_ZeroFlagsShape_T021","Output":"--- PASS: TestRecallMemory_CompatV3_ZeroFlagsShape_T021 (0.14s)\n"} +{"Time":"2026-07-11T04:02:09.1353754+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemory_CompatV3_ZeroFlagsShape_T021","Elapsed":0.14} +{"Time":"2026-07-11T04:02:09.1353754+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHybridTG3_ConfidenceMin_FloorEnforced_T022"} +{"Time":"2026-07-11T04:02:09.1353754+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHybridTG3_ConfidenceMin_FloorEnforced_T022","Output":"=== RUN TestHybridTG3_ConfidenceMin_FloorEnforced_T022\n"} +{"Time":"2026-07-11T04:02:09.2430334+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHybridTG3_ConfidenceMin_FloorEnforced_T022","Output":"{\"level\":\"debug\",\"connections\":1,\"time\":\"2026-07-11T04:02:09+03:00\",\"message\":\"Connection pool warmed\"}\n"} +{"Time":"2026-07-11T04:02:09.2640404+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHybridTG3_ConfidenceMin_FloorEnforced_T022","Output":" integration_tg3_hybrid_test.go:83: \n"} +{"Time":"2026-07-11T04:02:09.2640404+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHybridTG3_ConfidenceMin_FloorEnforced_T022","Output":" \tError Trace:\tD:/Dev/engram/.w/t007-r1-checker/internal/mcp/integration_tg3_hybrid_test.go:83\n"} +{"Time":"2026-07-11T04:02:09.2640404+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHybridTG3_ConfidenceMin_FloorEnforced_T022","Output":" \tError: \tReceived unexpected error:\n"} +{"Time":"2026-07-11T04:02:09.2640404+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHybridTG3_ConfidenceMin_FloorEnforced_T022","Output":" \t \tjson: cannot unmarshal array into Go value of type map[string]interface {}\n"} +{"Time":"2026-07-11T04:02:09.2640404+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHybridTG3_ConfidenceMin_FloorEnforced_T022","Output":" \tTest: \tTestHybridTG3_ConfidenceMin_FloorEnforced_T022\n"} +{"Time":"2026-07-11T04:02:09.2640404+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHybridTG3_ConfidenceMin_FloorEnforced_T022","Output":" \tMessages: \tresponse must be valid JSON\n"} +{"Time":"2026-07-11T04:02:09.2735412+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHybridTG3_ConfidenceMin_FloorEnforced_T022","Output":"--- FAIL: TestHybridTG3_ConfidenceMin_FloorEnforced_T022 (0.14s)\n"} +{"Time":"2026-07-11T04:02:09.2735412+03:00","Action":"fail","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHybridTG3_ConfidenceMin_FloorEnforced_T022","Elapsed":0.14} +{"Time":"2026-07-11T04:02:09.2735412+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHybridTG3_IncludeSuperseded_StructuredError_T022b"} +{"Time":"2026-07-11T04:02:09.2735412+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHybridTG3_IncludeSuperseded_StructuredError_T022b","Output":"=== RUN TestHybridTG3_IncludeSuperseded_StructuredError_T022b\n"} +{"Time":"2026-07-11T04:02:09.2735412+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHybridTG3_IncludeSuperseded_StructuredError_T022b","Output":"--- PASS: TestHybridTG3_IncludeSuperseded_StructuredError_T022b (0.00s)\n"} +{"Time":"2026-07-11T04:02:09.2735412+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHybridTG3_IncludeSuperseded_StructuredError_T022b","Elapsed":0} +{"Time":"2026-07-11T04:02:09.2735412+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHybridTG3_IncludeSuperseded_False_NoError_T022c"} +{"Time":"2026-07-11T04:02:09.2735412+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHybridTG3_IncludeSuperseded_False_NoError_T022c","Output":"=== RUN TestHybridTG3_IncludeSuperseded_False_NoError_T022c\n"} +{"Time":"2026-07-11T04:02:09.382281+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHybridTG3_IncludeSuperseded_False_NoError_T022c","Output":"{\"level\":\"debug\",\"connections\":1,\"time\":\"2026-07-11T04:02:09+03:00\",\"message\":\"Connection pool warmed\"}\n"} +{"Time":"2026-07-11T04:02:09.3932812+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHybridTG3_IncludeSuperseded_False_NoError_T022c","Output":"--- PASS: TestHybridTG3_IncludeSuperseded_False_NoError_T022c (0.12s)\n"} +{"Time":"2026-07-11T04:02:09.3932812+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHybridTG3_IncludeSuperseded_False_NoError_T022c","Elapsed":0.12} +{"Time":"2026-07-11T04:02:09.3932812+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecall_ScopeInvisibleNewestDoNotTruncate_CodexP1Cycle3"} +{"Time":"2026-07-11T04:02:09.3932812+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecall_ScopeInvisibleNewestDoNotTruncate_CodexP1Cycle3","Output":"=== RUN TestRecall_ScopeInvisibleNewestDoNotTruncate_CodexP1Cycle3\n"} +{"Time":"2026-07-11T04:02:09.502953+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecall_ScopeInvisibleNewestDoNotTruncate_CodexP1Cycle3","Output":"{\"level\":\"debug\",\"connections\":1,\"time\":\"2026-07-11T04:02:09+03:00\",\"message\":\"Connection pool warmed\"}\n"} +{"Time":"2026-07-11T04:02:09.5414809+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecall_ScopeInvisibleNewestDoNotTruncate_CodexP1Cycle3","Output":"--- PASS: TestRecall_ScopeInvisibleNewestDoNotTruncate_CodexP1Cycle3 (0.15s)\n"} +{"Time":"2026-07-11T04:02:09.5414809+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecall_ScopeInvisibleNewestDoNotTruncate_CodexP1Cycle3","Elapsed":0.15} +{"Time":"2026-07-11T04:02:09.5414809+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecall_PrincipalPrivateInvisibleNewestDoNotTruncate_FlagOff"} +{"Time":"2026-07-11T04:02:09.5414809+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecall_PrincipalPrivateInvisibleNewestDoNotTruncate_FlagOff","Output":"=== RUN TestRecall_PrincipalPrivateInvisibleNewestDoNotTruncate_FlagOff\n"} +{"Time":"2026-07-11T04:02:09.6491944+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecall_PrincipalPrivateInvisibleNewestDoNotTruncate_FlagOff","Output":"{\"level\":\"debug\",\"connections\":1,\"time\":\"2026-07-11T04:02:09+03:00\",\"message\":\"Connection pool warmed\"}\n"} +{"Time":"2026-07-11T04:02:09.6853846+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecall_PrincipalPrivateInvisibleNewestDoNotTruncate_FlagOff","Output":"--- PASS: TestRecall_PrincipalPrivateInvisibleNewestDoNotTruncate_FlagOff (0.14s)\n"} +{"Time":"2026-07-11T04:02:09.6853846+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecall_PrincipalPrivateInvisibleNewestDoNotTruncate_FlagOff","Elapsed":0.14} +{"Time":"2026-07-11T04:02:09.6853846+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemory_PrincipalPrivateInvisibleAndSharedAttributed_FlagOff"} +{"Time":"2026-07-11T04:02:09.6853846+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemory_PrincipalPrivateInvisibleAndSharedAttributed_FlagOff","Output":"=== RUN TestRecallMemory_PrincipalPrivateInvisibleAndSharedAttributed_FlagOff\n"} +{"Time":"2026-07-11T04:02:09.7938557+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemory_PrincipalPrivateInvisibleAndSharedAttributed_FlagOff","Output":"{\"level\":\"debug\",\"connections\":1,\"time\":\"2026-07-11T04:02:09+03:00\",\"message\":\"Connection pool warmed\"}\n"} +{"Time":"2026-07-11T04:02:09.8153556+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemory_PrincipalPrivateInvisibleAndSharedAttributed_FlagOff","Output":"--- PASS: TestRecallMemory_PrincipalPrivateInvisibleAndSharedAttributed_FlagOff (0.13s)\n"} +{"Time":"2026-07-11T04:02:09.8153556+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemory_PrincipalPrivateInvisibleAndSharedAttributed_FlagOff","Elapsed":0.13} +{"Time":"2026-07-11T04:02:09.8153556+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemory_DomainOwnedInvisibleNewestDoNotTruncate_FlagOff"} +{"Time":"2026-07-11T04:02:09.8153556+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemory_DomainOwnedInvisibleNewestDoNotTruncate_FlagOff","Output":"=== RUN TestRecallMemory_DomainOwnedInvisibleNewestDoNotTruncate_FlagOff\n"} +{"Time":"2026-07-11T04:02:09.9222537+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemory_DomainOwnedInvisibleNewestDoNotTruncate_FlagOff","Output":"{\"level\":\"debug\",\"connections\":1,\"time\":\"2026-07-11T04:02:09+03:00\",\"message\":\"Connection pool warmed\"}\n"} +{"Time":"2026-07-11T04:02:09.9573489+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemory_DomainOwnedInvisibleNewestDoNotTruncate_FlagOff","Output":"--- PASS: TestRecallMemory_DomainOwnedInvisibleNewestDoNotTruncate_FlagOff (0.14s)\n"} +{"Time":"2026-07-11T04:02:09.9573489+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemory_DomainOwnedInvisibleNewestDoNotTruncate_FlagOff","Elapsed":0.14} +{"Time":"2026-07-11T04:02:09.9573489+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemory_TG3IncludeSupersededLegacyPath"} +{"Time":"2026-07-11T04:02:09.9573489+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemory_TG3IncludeSupersededLegacyPath","Output":"=== RUN TestRecallMemory_TG3IncludeSupersededLegacyPath\n"} +{"Time":"2026-07-11T04:02:10.0664553+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemory_TG3IncludeSupersededLegacyPath","Output":"{\"level\":\"debug\",\"connections\":1,\"time\":\"2026-07-11T04:02:10+03:00\",\"message\":\"Connection pool warmed\"}\n"} +{"Time":"2026-07-11T04:02:10.0934629+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemory_TG3IncludeSupersededLegacyPath","Output":"--- PASS: TestRecallMemory_TG3IncludeSupersededLegacyPath (0.14s)\n"} +{"Time":"2026-07-11T04:02:10.0934629+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemory_TG3IncludeSupersededLegacyPath","Elapsed":0.14} +{"Time":"2026-07-11T04:02:10.0934629+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemory_IncludeSupersededFlagOffIgnoredInHybrid"} +{"Time":"2026-07-11T04:02:10.0934629+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemory_IncludeSupersededFlagOffIgnoredInHybrid","Output":"=== RUN TestRecallMemory_IncludeSupersededFlagOffIgnoredInHybrid\n"} +{"Time":"2026-07-11T04:02:10.2049642+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemory_IncludeSupersededFlagOffIgnoredInHybrid","Output":"{\"level\":\"debug\",\"connections\":1,\"time\":\"2026-07-11T04:02:10+03:00\",\"message\":\"Connection pool warmed\"}\n"} +{"Time":"2026-07-11T04:02:10.2149636+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemory_IncludeSupersededFlagOffIgnoredInHybrid","Output":"--- PASS: TestRecallMemory_IncludeSupersededFlagOffIgnoredInHybrid (0.12s)\n"} +{"Time":"2026-07-11T04:02:10.2149636+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemory_IncludeSupersededFlagOffIgnoredInHybrid","Elapsed":0.12} +{"Time":"2026-07-11T04:02:10.2149636+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryAlwaysInject_GovernanceFlagCreatesRuleCandidate"} +{"Time":"2026-07-11T04:02:10.2149636+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryAlwaysInject_GovernanceFlagCreatesRuleCandidate","Output":"=== RUN TestStoreMemoryAlwaysInject_GovernanceFlagCreatesRuleCandidate\n"} +{"Time":"2026-07-11T04:02:10.2149636+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryAlwaysInject_GovernanceFlagCreatesRuleCandidate","Output":"--- PASS: TestStoreMemoryAlwaysInject_GovernanceFlagCreatesRuleCandidate (0.00s)\n"} +{"Time":"2026-07-11T04:02:10.2149636+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryAlwaysInject_GovernanceFlagCreatesRuleCandidate","Elapsed":0} +{"Time":"2026-07-11T04:02:10.2149636+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryAlwaysInject_FlagOffDoesNotUseRuleGovernance"} +{"Time":"2026-07-11T04:02:10.2149636+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryAlwaysInject_FlagOffDoesNotUseRuleGovernance","Output":"=== RUN TestStoreMemoryAlwaysInject_FlagOffDoesNotUseRuleGovernance\n"} +{"Time":"2026-07-11T04:02:10.2149636+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryAlwaysInject_FlagOffDoesNotUseRuleGovernance","Output":"--- PASS: TestStoreMemoryAlwaysInject_FlagOffDoesNotUseRuleGovernance (0.00s)\n"} +{"Time":"2026-07-11T04:02:10.2149636+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryAlwaysInject_FlagOffDoesNotUseRuleGovernance","Elapsed":0} +{"Time":"2026-07-11T04:02:10.2149636+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreRule_GovernanceFlagCreatesRuleCandidate"} +{"Time":"2026-07-11T04:02:10.2149636+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreRule_GovernanceFlagCreatesRuleCandidate","Output":"=== RUN TestStoreRule_GovernanceFlagCreatesRuleCandidate\n"} +{"Time":"2026-07-11T04:02:10.2149636+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreRule_GovernanceFlagCreatesRuleCandidate","Output":"--- PASS: TestStoreRule_GovernanceFlagCreatesRuleCandidate (0.00s)\n"} +{"Time":"2026-07-11T04:02:10.2149636+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreRule_GovernanceFlagCreatesRuleCandidate","Elapsed":0} +{"Time":"2026-07-11T04:02:10.2149636+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreRule_GovernanceFlagPreservesGlobalIntentWithContextProject"} +{"Time":"2026-07-11T04:02:10.2149636+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreRule_GovernanceFlagPreservesGlobalIntentWithContextProject","Output":"=== RUN TestStoreRule_GovernanceFlagPreservesGlobalIntentWithContextProject\n"} +{"Time":"2026-07-11T04:02:10.2154633+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreRule_GovernanceFlagPreservesGlobalIntentWithContextProject","Output":"--- PASS: TestStoreRule_GovernanceFlagPreservesGlobalIntentWithContextProject (0.00s)\n"} +{"Time":"2026-07-11T04:02:10.2154633+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreRule_GovernanceFlagPreservesGlobalIntentWithContextProject","Elapsed":0} +{"Time":"2026-07-11T04:02:10.2154633+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreRule_GovernanceFlagRedactsCandidateContent"} +{"Time":"2026-07-11T04:02:10.2154633+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreRule_GovernanceFlagRedactsCandidateContent","Output":"=== RUN TestStoreRule_GovernanceFlagRedactsCandidateContent\n"} +{"Time":"2026-07-11T04:02:10.2154633+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreRule_GovernanceFlagRedactsCandidateContent","Output":"--- PASS: TestStoreRule_GovernanceFlagRedactsCandidateContent (0.00s)\n"} +{"Time":"2026-07-11T04:02:10.2154633+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreRule_GovernanceFlagRedactsCandidateContent","Elapsed":0} +{"Time":"2026-07-11T04:02:10.2154633+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreRule_FlagOffDoesNotUseRuleGovernance"} +{"Time":"2026-07-11T04:02:10.2154633+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreRule_FlagOffDoesNotUseRuleGovernance","Output":"=== RUN TestStoreRule_FlagOffDoesNotUseRuleGovernance\n"} +{"Time":"2026-07-11T04:02:10.2154633+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreRule_FlagOffDoesNotUseRuleGovernance","Output":"--- PASS: TestStoreRule_FlagOffDoesNotUseRuleGovernance (0.00s)\n"} +{"Time":"2026-07-11T04:02:10.2154633+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreRule_FlagOffDoesNotUseRuleGovernance","Elapsed":0} +{"Time":"2026-07-11T04:02:10.2154633+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleRequest_GetAmbientHintsDispatchesThroughToolsCall"} +{"Time":"2026-07-11T04:02:10.2154633+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleRequest_GetAmbientHintsDispatchesThroughToolsCall","Output":"=== RUN TestHandleRequest_GetAmbientHintsDispatchesThroughToolsCall\n"} +{"Time":"2026-07-11T04:02:10.2154633+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleRequest_GetAmbientHintsDispatchesThroughToolsCall","Output":"--- PASS: TestHandleRequest_GetAmbientHintsDispatchesThroughToolsCall (0.00s)\n"} +{"Time":"2026-07-11T04:02:10.2154633+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleRequest_GetAmbientHintsDispatchesThroughToolsCall","Elapsed":0} +{"Time":"2026-07-11T04:02:10.2154633+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleRequest_GetAmbientHintsUnknownToolRegressionGuard"} +{"Time":"2026-07-11T04:02:10.2154633+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleRequest_GetAmbientHintsUnknownToolRegressionGuard","Output":"=== RUN TestHandleRequest_GetAmbientHintsUnknownToolRegressionGuard\n"} +{"Time":"2026-07-11T04:02:10.2154633+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleRequest_GetAmbientHintsUnknownToolRegressionGuard","Output":"--- PASS: TestHandleRequest_GetAmbientHintsUnknownToolRegressionGuard (0.00s)\n"} +{"Time":"2026-07-11T04:02:10.2154633+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleRequest_GetAmbientHintsUnknownToolRegressionGuard","Elapsed":0} +{"Time":"2026-07-11T04:02:10.2154633+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestServerSetAuditStoreAssignsField"} +{"Time":"2026-07-11T04:02:10.2154633+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestServerSetAuditStoreAssignsField","Output":"=== RUN TestServerSetAuditStoreAssignsField\n"} +{"Time":"2026-07-11T04:02:10.2154633+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestServerSetAuditStoreAssignsField","Output":"--- PASS: TestServerSetAuditStoreAssignsField (0.00s)\n"} +{"Time":"2026-07-11T04:02:10.2154633+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestServerSetAuditStoreAssignsField","Elapsed":0} +{"Time":"2026-07-11T04:02:10.2154633+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRequest_Marshal_Table"} +{"Time":"2026-07-11T04:02:10.2159638+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRequest_Marshal_Table","Output":"=== RUN TestRequest_Marshal_Table\n"} +{"Time":"2026-07-11T04:02:10.2159638+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRequest_Marshal_Table","Output":"=== PAUSE TestRequest_Marshal_Table\n"} +{"Time":"2026-07-11T04:02:10.2159638+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRequest_Marshal_Table"} +{"Time":"2026-07-11T04:02:10.2159638+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRequest_Unmarshal_RoundTrip"} +{"Time":"2026-07-11T04:02:10.2159638+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRequest_Unmarshal_RoundTrip","Output":"=== RUN TestRequest_Unmarshal_RoundTrip\n"} +{"Time":"2026-07-11T04:02:10.2159638+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRequest_Unmarshal_RoundTrip","Output":"=== PAUSE TestRequest_Unmarshal_RoundTrip\n"} +{"Time":"2026-07-11T04:02:10.2159638+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRequest_Unmarshal_RoundTrip"} +{"Time":"2026-07-11T04:02:10.2159638+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRequest_Unmarshal_NullID"} +{"Time":"2026-07-11T04:02:10.2159638+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRequest_Unmarshal_NullID","Output":"=== RUN TestRequest_Unmarshal_NullID\n"} +{"Time":"2026-07-11T04:02:10.2159638+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRequest_Unmarshal_NullID","Output":"=== PAUSE TestRequest_Unmarshal_NullID\n"} +{"Time":"2026-07-11T04:02:10.2159638+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRequest_Unmarshal_NullID"} +{"Time":"2026-07-11T04:02:10.2159638+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestResponse_Marshal_Table"} +{"Time":"2026-07-11T04:02:10.2159638+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestResponse_Marshal_Table","Output":"=== RUN TestResponse_Marshal_Table\n"} +{"Time":"2026-07-11T04:02:10.2159638+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestResponse_Marshal_Table","Output":"=== PAUSE TestResponse_Marshal_Table\n"} +{"Time":"2026-07-11T04:02:10.2159638+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestResponse_Marshal_Table"} +{"Time":"2026-07-11T04:02:10.2159638+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestError_Marshal_Table"} +{"Time":"2026-07-11T04:02:10.2159638+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestError_Marshal_Table","Output":"=== RUN TestError_Marshal_Table\n"} +{"Time":"2026-07-11T04:02:10.2159638+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestError_Marshal_Table","Output":"=== PAUSE TestError_Marshal_Table\n"} +{"Time":"2026-07-11T04:02:10.2159638+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestError_Marshal_Table"} +{"Time":"2026-07-11T04:02:10.2159638+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestError_NilData_NotInOutput"} +{"Time":"2026-07-11T04:02:10.2159638+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestError_NilData_NotInOutput","Output":"=== RUN TestError_NilData_NotInOutput\n"} +{"Time":"2026-07-11T04:02:10.2159638+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestError_NilData_NotInOutput","Output":"=== PAUSE TestError_NilData_NotInOutput\n"} +{"Time":"2026-07-11T04:02:10.2159638+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestError_NilData_NotInOutput"} +{"Time":"2026-07-11T04:02:10.2159638+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestToolCallParams_Unmarshal"} +{"Time":"2026-07-11T04:02:10.2159638+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestToolCallParams_Unmarshal","Output":"=== RUN TestToolCallParams_Unmarshal\n"} +{"Time":"2026-07-11T04:02:10.2159638+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestToolCallParams_Unmarshal","Output":"=== PAUSE TestToolCallParams_Unmarshal\n"} +{"Time":"2026-07-11T04:02:10.2159638+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestToolCallParams_Unmarshal"} +{"Time":"2026-07-11T04:02:10.2159638+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestToolCallParams_ComplexArgs"} +{"Time":"2026-07-11T04:02:10.2159638+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestToolCallParams_ComplexArgs","Output":"=== RUN TestToolCallParams_ComplexArgs\n"} +{"Time":"2026-07-11T04:02:10.2159638+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestToolCallParams_ComplexArgs","Output":"=== PAUSE TestToolCallParams_ComplexArgs\n"} +{"Time":"2026-07-11T04:02:10.2159638+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestToolCallParams_ComplexArgs"} +{"Time":"2026-07-11T04:02:10.2159638+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTool_Marshal_RoundTrip"} +{"Time":"2026-07-11T04:02:10.2159638+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTool_Marshal_RoundTrip","Output":"=== RUN TestTool_Marshal_RoundTrip\n"} +{"Time":"2026-07-11T04:02:10.2159638+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTool_Marshal_RoundTrip","Output":"=== PAUSE TestTool_Marshal_RoundTrip\n"} +{"Time":"2026-07-11T04:02:10.2159638+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTool_Marshal_RoundTrip"} +{"Time":"2026-07-11T04:02:10.2159638+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTimelineParams_Unmarshal_Table"} +{"Time":"2026-07-11T04:02:10.2159638+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTimelineParams_Unmarshal_Table","Output":"=== RUN TestTimelineParams_Unmarshal_Table\n"} +{"Time":"2026-07-11T04:02:10.2159638+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTimelineParams_Unmarshal_Table","Output":"=== PAUSE TestTimelineParams_Unmarshal_Table\n"} +{"Time":"2026-07-11T04:02:10.2159638+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTimelineParams_Unmarshal_Table"} +{"Time":"2026-07-11T04:02:10.2159638+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTimelineParams_AllFields"} +{"Time":"2026-07-11T04:02:10.2159638+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTimelineParams_AllFields","Output":"=== RUN TestTimelineParams_AllFields\n"} +{"Time":"2026-07-11T04:02:10.2159638+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTimelineParams_AllFields","Output":"=== PAUSE TestTimelineParams_AllFields\n"} +{"Time":"2026-07-11T04:02:10.2159638+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTimelineParams_AllFields"} +{"Time":"2026-07-11T04:02:10.2159638+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestNewServer_CreatesWithVersion"} +{"Time":"2026-07-11T04:02:10.2159638+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestNewServer_CreatesWithVersion","Output":"=== RUN TestNewServer_CreatesWithVersion\n"} +{"Time":"2026-07-11T04:02:10.2159638+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestNewServer_CreatesWithVersion","Output":"=== PAUSE TestNewServer_CreatesWithVersion\n"} +{"Time":"2026-07-11T04:02:10.2159638+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestNewServer_CreatesWithVersion"} +{"Time":"2026-07-11T04:02:10.2159638+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestNewServer_HasStdinStdout"} +{"Time":"2026-07-11T04:02:10.2159638+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestNewServer_HasStdinStdout","Output":"=== RUN TestNewServer_HasStdinStdout\n"} +{"Time":"2026-07-11T04:02:10.2159638+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestNewServer_HasStdinStdout","Output":"=== PAUSE TestNewServer_HasStdinStdout\n"} +{"Time":"2026-07-11T04:02:10.2159638+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestNewServer_HasStdinStdout"} +{"Time":"2026-07-11T04:02:10.2159638+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestVersion_ReturnsVersion"} +{"Time":"2026-07-11T04:02:10.2159638+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestVersion_ReturnsVersion","Output":"=== RUN TestVersion_ReturnsVersion\n"} +{"Time":"2026-07-11T04:02:10.2159638+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestVersion_ReturnsVersion","Output":"=== PAUSE TestVersion_ReturnsVersion\n"} +{"Time":"2026-07-11T04:02:10.2159638+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestVersion_ReturnsVersion"} +{"Time":"2026-07-11T04:02:10.2159638+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestServer_FieldsInjected"} +{"Time":"2026-07-11T04:02:10.2159638+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestServer_FieldsInjected","Output":"=== RUN TestServer_FieldsInjected\n"} +{"Time":"2026-07-11T04:02:10.2159638+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestServer_FieldsInjected","Output":"=== PAUSE TestServer_FieldsInjected\n"} +{"Time":"2026-07-11T04:02:10.2159638+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestServer_FieldsInjected"} +{"Time":"2026-07-11T04:02:10.2159638+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleInitialize_ProtocolAndVersion"} +{"Time":"2026-07-11T04:02:10.2159638+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleInitialize_ProtocolAndVersion","Output":"=== RUN TestHandleInitialize_ProtocolAndVersion\n"} +{"Time":"2026-07-11T04:02:10.2159638+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleInitialize_ProtocolAndVersion","Output":"=== PAUSE TestHandleInitialize_ProtocolAndVersion\n"} +{"Time":"2026-07-11T04:02:10.2159638+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleInitialize_ProtocolAndVersion"} +{"Time":"2026-07-11T04:02:10.2159638+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleInitialize_CapabilitiesPresent"} +{"Time":"2026-07-11T04:02:10.2159638+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleInitialize_CapabilitiesPresent","Output":"=== RUN TestHandleInitialize_CapabilitiesPresent\n"} +{"Time":"2026-07-11T04:02:10.2159638+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleInitialize_CapabilitiesPresent","Output":"=== PAUSE TestHandleInitialize_CapabilitiesPresent\n"} +{"Time":"2026-07-11T04:02:10.2159638+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleInitialize_CapabilitiesPresent"} +{"Time":"2026-07-11T04:02:10.2159638+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleInitialize_IDEchoed"} +{"Time":"2026-07-11T04:02:10.2159638+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleInitialize_IDEchoed","Output":"=== RUN TestHandleInitialize_IDEchoed\n"} +{"Time":"2026-07-11T04:02:10.2159638+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleInitialize_IDEchoed","Output":"=== PAUSE TestHandleInitialize_IDEchoed\n"} +{"Time":"2026-07-11T04:02:10.2159638+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleInitialize_IDEchoed"} +{"Time":"2026-07-11T04:02:10.2159638+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsList_PrimaryToolsPresent"} +{"Time":"2026-07-11T04:02:10.2159638+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsList_PrimaryToolsPresent","Output":"=== RUN TestHandleToolsList_PrimaryToolsPresent\n"} +{"Time":"2026-07-11T04:02:10.2159638+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsList_PrimaryToolsPresent","Output":"=== PAUSE TestHandleToolsList_PrimaryToolsPresent\n"} +{"Time":"2026-07-11T04:02:10.2159638+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsList_PrimaryToolsPresent"} +{"Time":"2026-07-11T04:02:10.2159638+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsList_DefaultCountMatchesPrimary"} +{"Time":"2026-07-11T04:02:10.2159638+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsList_DefaultCountMatchesPrimary","Output":"=== RUN TestHandleToolsList_DefaultCountMatchesPrimary\n"} +{"Time":"2026-07-11T04:02:10.2159638+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsList_DefaultCountMatchesPrimary","Output":"=== PAUSE TestHandleToolsList_DefaultCountMatchesPrimary\n"} +{"Time":"2026-07-11T04:02:10.2159638+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsList_DefaultCountMatchesPrimary"} +{"Time":"2026-07-11T04:02:10.2159638+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsList_IncludeAllReturnsMore"} +{"Time":"2026-07-11T04:02:10.2159638+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsList_IncludeAllReturnsMore","Output":"=== RUN TestHandleToolsList_IncludeAllReturnsMore\n"} +{"Time":"2026-07-11T04:02:10.2159638+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsList_IncludeAllReturnsMore","Output":"=== PAUSE TestHandleToolsList_IncludeAllReturnsMore\n"} +{"Time":"2026-07-11T04:02:10.2159638+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsList_IncludeAllReturnsMore"} +{"Time":"2026-07-11T04:02:10.2159638+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsList_IncludeAllContainsLegacy"} +{"Time":"2026-07-11T04:02:10.2159638+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsList_IncludeAllContainsLegacy","Output":"=== RUN TestHandleToolsList_IncludeAllContainsLegacy\n"} +{"Time":"2026-07-11T04:02:10.2159638+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsList_IncludeAllContainsLegacy","Output":"=== PAUSE TestHandleToolsList_IncludeAllContainsLegacy\n"} +{"Time":"2026-07-11T04:02:10.2159638+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsList_IncludeAllContainsLegacy"} +{"Time":"2026-07-11T04:02:10.2159638+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsList_RemovedToolsAbsent"} +{"Time":"2026-07-11T04:02:10.2159638+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsList_RemovedToolsAbsent","Output":"=== RUN TestHandleToolsList_RemovedToolsAbsent\n"} +{"Time":"2026-07-11T04:02:10.2159638+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsList_RemovedToolsAbsent","Output":"=== PAUSE TestHandleToolsList_RemovedToolsAbsent\n"} +{"Time":"2026-07-11T04:02:10.2159638+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsList_RemovedToolsAbsent"} +{"Time":"2026-07-11T04:02:10.2159638+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsList_SchemaCompliance_NoForbiddenTopLevelKeys"} +{"Time":"2026-07-11T04:02:10.2159638+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsList_SchemaCompliance_NoForbiddenTopLevelKeys","Output":"=== RUN TestHandleToolsList_SchemaCompliance_NoForbiddenTopLevelKeys\n"} +{"Time":"2026-07-11T04:02:10.2159638+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsList_SchemaCompliance_NoForbiddenTopLevelKeys","Output":"=== PAUSE TestHandleToolsList_SchemaCompliance_NoForbiddenTopLevelKeys\n"} +{"Time":"2026-07-11T04:02:10.2159638+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsList_SchemaCompliance_NoForbiddenTopLevelKeys"} +{"Time":"2026-07-11T04:02:10.2159638+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsList_AllToolSchemasHaveTypeAndProperties"} +{"Time":"2026-07-11T04:02:10.2159638+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsList_AllToolSchemasHaveTypeAndProperties","Output":"=== RUN TestHandleToolsList_AllToolSchemasHaveTypeAndProperties\n"} +{"Time":"2026-07-11T04:02:10.2159638+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsList_AllToolSchemasHaveTypeAndProperties","Output":"=== PAUSE TestHandleToolsList_AllToolSchemasHaveTypeAndProperties\n"} +{"Time":"2026-07-11T04:02:10.2159638+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsList_AllToolSchemasHaveTypeAndProperties"} +{"Time":"2026-07-11T04:02:10.2159638+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsList_FeedbackSchemaCorrect"} +{"Time":"2026-07-11T04:02:10.2159638+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsList_FeedbackSchemaCorrect","Output":"=== RUN TestHandleToolsList_FeedbackSchemaCorrect\n"} +{"Time":"2026-07-11T04:02:10.2159638+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsList_FeedbackSchemaCorrect","Output":"=== PAUSE TestHandleToolsList_FeedbackSchemaCorrect\n"} +{"Time":"2026-07-11T04:02:10.2159638+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsList_FeedbackSchemaCorrect"} +{"Time":"2026-07-11T04:02:10.2159638+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsList_StoreTypeEnumCorrect"} +{"Time":"2026-07-11T04:02:10.2159638+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsList_StoreTypeEnumCorrect","Output":"=== RUN TestHandleToolsList_StoreTypeEnumCorrect\n"} +{"Time":"2026-07-11T04:02:10.2159638+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsList_StoreTypeEnumCorrect","Output":"=== PAUSE TestHandleToolsList_StoreTypeEnumCorrect\n"} +{"Time":"2026-07-11T04:02:10.2159638+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsList_StoreTypeEnumCorrect"} +{"Time":"2026-07-11T04:02:10.2159638+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleRequest_InitializeRoute"} +{"Time":"2026-07-11T04:02:10.2159638+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleRequest_InitializeRoute","Output":"=== RUN TestHandleRequest_InitializeRoute\n"} +{"Time":"2026-07-11T04:02:10.2159638+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleRequest_InitializeRoute","Output":"=== PAUSE TestHandleRequest_InitializeRoute\n"} +{"Time":"2026-07-11T04:02:10.2159638+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleRequest_InitializeRoute"} +{"Time":"2026-07-11T04:02:10.2159638+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleRequest_ToolsListRoute"} +{"Time":"2026-07-11T04:02:10.2159638+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleRequest_ToolsListRoute","Output":"=== RUN TestHandleRequest_ToolsListRoute\n"} +{"Time":"2026-07-11T04:02:10.2159638+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleRequest_ToolsListRoute","Output":"=== PAUSE TestHandleRequest_ToolsListRoute\n"} +{"Time":"2026-07-11T04:02:10.2159638+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleRequest_ToolsListRoute"} +{"Time":"2026-07-11T04:02:10.2159638+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleRequest_UnknownMethodError"} +{"Time":"2026-07-11T04:02:10.2159638+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleRequest_UnknownMethodError","Output":"=== RUN TestHandleRequest_UnknownMethodError\n"} +{"Time":"2026-07-11T04:02:10.2159638+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleRequest_UnknownMethodError","Output":"=== PAUSE TestHandleRequest_UnknownMethodError\n"} +{"Time":"2026-07-11T04:02:10.2159638+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleRequest_UnknownMethodError"} +{"Time":"2026-07-11T04:02:10.2159638+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleRequest_NotificationReturnsNil"} +{"Time":"2026-07-11T04:02:10.2159638+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleRequest_NotificationReturnsNil","Output":"=== RUN TestHandleRequest_NotificationReturnsNil\n"} +{"Time":"2026-07-11T04:02:10.2159638+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleRequest_NotificationReturnsNil","Output":"=== PAUSE TestHandleRequest_NotificationReturnsNil\n"} +{"Time":"2026-07-11T04:02:10.2159638+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleRequest_NotificationReturnsNil"} +{"Time":"2026-07-11T04:02:10.2159638+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleRequest_CapabilityStubs"} +{"Time":"2026-07-11T04:02:10.2159638+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleRequest_CapabilityStubs","Output":"=== RUN TestHandleRequest_CapabilityStubs\n"} +{"Time":"2026-07-11T04:02:10.2159638+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleRequest_CapabilityStubs","Output":"=== PAUSE TestHandleRequest_CapabilityStubs\n"} +{"Time":"2026-07-11T04:02:10.2159638+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleRequest_CapabilityStubs"} +{"Time":"2026-07-11T04:02:10.2159638+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsCall_InvalidParamsJSON"} +{"Time":"2026-07-11T04:02:10.2159638+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsCall_InvalidParamsJSON","Output":"=== RUN TestHandleToolsCall_InvalidParamsJSON\n"} +{"Time":"2026-07-11T04:02:10.2159638+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsCall_InvalidParamsJSON","Output":"=== PAUSE TestHandleToolsCall_InvalidParamsJSON\n"} +{"Time":"2026-07-11T04:02:10.2159638+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsCall_InvalidParamsJSON"} +{"Time":"2026-07-11T04:02:10.2159638+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsCall_EmptyParams"} +{"Time":"2026-07-11T04:02:10.2159638+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsCall_EmptyParams","Output":"=== RUN TestHandleToolsCall_EmptyParams\n"} +{"Time":"2026-07-11T04:02:10.2159638+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsCall_EmptyParams","Output":"=== PAUSE TestHandleToolsCall_EmptyParams\n"} +{"Time":"2026-07-11T04:02:10.2164636+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsCall_EmptyParams"} +{"Time":"2026-07-11T04:02:10.2164636+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsCall_UnknownTool"} +{"Time":"2026-07-11T04:02:10.2164636+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsCall_UnknownTool","Output":"=== RUN TestHandleToolsCall_UnknownTool\n"} +{"Time":"2026-07-11T04:02:10.2164636+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsCall_UnknownTool","Output":"=== PAUSE TestHandleToolsCall_UnknownTool\n"} +{"Time":"2026-07-11T04:02:10.2164636+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsCall_UnknownTool"} +{"Time":"2026-07-11T04:02:10.2164636+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSanitizeToolCallArgs_RememberDirectiveRedactsRawLogArguments"} +{"Time":"2026-07-11T04:02:10.2164636+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSanitizeToolCallArgs_RememberDirectiveRedactsRawLogArguments","Output":"=== RUN TestSanitizeToolCallArgs_RememberDirectiveRedactsRawLogArguments\n"} +{"Time":"2026-07-11T04:02:10.2164636+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSanitizeToolCallArgs_RememberDirectiveRedactsRawLogArguments","Output":"=== PAUSE TestSanitizeToolCallArgs_RememberDirectiveRedactsRawLogArguments\n"} +{"Time":"2026-07-11T04:02:10.2164636+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSanitizeToolCallArgs_RememberDirectiveRedactsRawLogArguments"} +{"Time":"2026-07-11T04:02:10.2164636+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSanitizeToolCallArgs_OtherToolsStillRedactSecrets"} +{"Time":"2026-07-11T04:02:10.2164636+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSanitizeToolCallArgs_OtherToolsStillRedactSecrets","Output":"=== RUN TestSanitizeToolCallArgs_OtherToolsStillRedactSecrets\n"} +{"Time":"2026-07-11T04:02:10.2164636+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSanitizeToolCallArgs_OtherToolsStillRedactSecrets","Output":"=== PAUSE TestSanitizeToolCallArgs_OtherToolsStillRedactSecrets\n"} +{"Time":"2026-07-11T04:02:10.2164636+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSanitizeToolCallArgs_OtherToolsStillRedactSecrets"} +{"Time":"2026-07-11T04:02:10.2164636+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_UnknownToolReturnsError"} +{"Time":"2026-07-11T04:02:10.2164636+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_UnknownToolReturnsError","Output":"=== RUN TestCallTool_UnknownToolReturnsError\n"} +{"Time":"2026-07-11T04:02:10.2164636+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_UnknownToolReturnsError","Output":"=== PAUSE TestCallTool_UnknownToolReturnsError\n"} +{"Time":"2026-07-11T04:02:10.2164636+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_UnknownToolReturnsError"} +{"Time":"2026-07-11T04:02:10.2164636+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_UnknownToolNames_Table"} +{"Time":"2026-07-11T04:02:10.2164636+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_UnknownToolNames_Table","Output":"=== RUN TestCallTool_UnknownToolNames_Table\n"} +{"Time":"2026-07-11T04:02:10.2164636+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_UnknownToolNames_Table","Output":"=== PAUSE TestCallTool_UnknownToolNames_Table\n"} +{"Time":"2026-07-11T04:02:10.2164636+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_UnknownToolNames_Table"} +{"Time":"2026-07-11T04:02:10.2164636+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_FindByFile_Removed"} +{"Time":"2026-07-11T04:02:10.2164636+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_FindByFile_Removed","Output":"=== RUN TestCallTool_FindByFile_Removed\n"} +{"Time":"2026-07-11T04:02:10.2164636+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_FindByFile_Removed","Output":"=== PAUSE TestCallTool_FindByFile_Removed\n"} +{"Time":"2026-07-11T04:02:10.2164636+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_FindByFile_Removed"} +{"Time":"2026-07-11T04:02:10.2164636+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_GetMemoryStats_NilStores"} +{"Time":"2026-07-11T04:02:10.2164636+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_GetMemoryStats_NilStores","Output":"=== RUN TestCallTool_GetMemoryStats_NilStores\n"} +{"Time":"2026-07-11T04:02:10.2164636+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_GetMemoryStats_NilStores","Output":"=== PAUSE TestCallTool_GetMemoryStats_NilStores\n"} +{"Time":"2026-07-11T04:02:10.2164636+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_GetMemoryStats_NilStores"} +{"Time":"2026-07-11T04:02:10.2164636+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetMemoryStats_NilDB_NoMemoryOrVnextSections"} +{"Time":"2026-07-11T04:02:10.2164636+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetMemoryStats_NilDB_NoMemoryOrVnextSections","Output":"=== RUN TestGetMemoryStats_NilDB_NoMemoryOrVnextSections\n"} +{"Time":"2026-07-11T04:02:10.2164636+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetMemoryStats_NilDB_NoMemoryOrVnextSections","Output":"=== PAUSE TestGetMemoryStats_NilDB_NoMemoryOrVnextSections\n"} +{"Time":"2026-07-11T04:02:10.2164636+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetMemoryStats_NilDB_NoMemoryOrVnextSections"} +{"Time":"2026-07-11T04:02:10.2164636+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_CheckSystemHealth_NilStores"} +{"Time":"2026-07-11T04:02:10.2164636+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_CheckSystemHealth_NilStores","Output":"=== RUN TestCallTool_CheckSystemHealth_NilStores\n"} +{"Time":"2026-07-11T04:02:10.2164636+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_CheckSystemHealth_NilStores","Output":"=== PAUSE TestCallTool_CheckSystemHealth_NilStores\n"} +{"Time":"2026-07-11T04:02:10.2164636+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_CheckSystemHealth_NilStores"} +{"Time":"2026-07-11T04:02:10.2164636+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCheckSystemHealth_VectorSubsystem"} +{"Time":"2026-07-11T04:02:10.2164636+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCheckSystemHealth_VectorSubsystem","Output":"=== RUN TestCheckSystemHealth_VectorSubsystem\n"} +{"Time":"2026-07-11T04:02:10.2164636+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCheckSystemHealth_VectorSubsystem/vnext_disabled"} +{"Time":"2026-07-11T04:02:10.2164636+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCheckSystemHealth_VectorSubsystem/vnext_disabled","Output":"=== RUN TestCheckSystemHealth_VectorSubsystem/vnext_disabled\n"} +{"Time":"2026-07-11T04:02:10.3370654+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCheckSystemHealth_VectorSubsystem/vnext_disabled","Output":"{\"level\":\"debug\",\"connections\":5,\"time\":\"2026-07-11T04:02:10+03:00\",\"message\":\"Connection pool warmed\"}\n"} +{"Time":"2026-07-11T04:02:10.3416445+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCheckSystemHealth_VectorSubsystem/vnext_disabled","Output":"--- PASS: TestCheckSystemHealth_VectorSubsystem/vnext_disabled (0.13s)\n"} +{"Time":"2026-07-11T04:02:10.3416445+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCheckSystemHealth_VectorSubsystem/vnext_disabled","Elapsed":0.13} +{"Time":"2026-07-11T04:02:10.3416445+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCheckSystemHealth_VectorSubsystem/vnext_enabled"} +{"Time":"2026-07-11T04:02:10.3416445+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCheckSystemHealth_VectorSubsystem/vnext_enabled","Output":"=== RUN TestCheckSystemHealth_VectorSubsystem/vnext_enabled\n"} +{"Time":"2026-07-11T04:02:10.457656+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCheckSystemHealth_VectorSubsystem/vnext_enabled","Output":"{\"level\":\"debug\",\"connections\":5,\"time\":\"2026-07-11T04:02:10+03:00\",\"message\":\"Connection pool warmed\"}\n"} +{"Time":"2026-07-11T04:02:10.4621548+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCheckSystemHealth_VectorSubsystem/vnext_enabled","Output":"--- PASS: TestCheckSystemHealth_VectorSubsystem/vnext_enabled (0.12s)\n"} +{"Time":"2026-07-11T04:02:10.4621548+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCheckSystemHealth_VectorSubsystem/vnext_enabled","Elapsed":0.12} +{"Time":"2026-07-11T04:02:10.4621548+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCheckSystemHealth_VectorSubsystem","Output":"--- PASS: TestCheckSystemHealth_VectorSubsystem (0.25s)\n"} +{"Time":"2026-07-11T04:02:10.4621548+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCheckSystemHealth_VectorSubsystem","Elapsed":0.25} +{"Time":"2026-07-11T04:02:10.4621548+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_ParameterValidation_Table"} +{"Time":"2026-07-11T04:02:10.4621548+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_ParameterValidation_Table","Output":"=== RUN TestCallTool_ParameterValidation_Table\n"} +{"Time":"2026-07-11T04:02:10.4621548+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_ParameterValidation_Table","Output":"=== PAUSE TestCallTool_ParameterValidation_Table\n"} +{"Time":"2026-07-11T04:02:10.4621548+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_ParameterValidation_Table"} +{"Time":"2026-07-11T04:02:10.4621548+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleGetMemoryStats_NilStores_ValidJSON"} +{"Time":"2026-07-11T04:02:10.4621548+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleGetMemoryStats_NilStores_ValidJSON","Output":"=== RUN TestHandleGetMemoryStats_NilStores_ValidJSON\n"} +{"Time":"2026-07-11T04:02:10.4621548+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleGetMemoryStats_NilStores_ValidJSON","Output":"=== PAUSE TestHandleGetMemoryStats_NilStores_ValidJSON\n"} +{"Time":"2026-07-11T04:02:10.4621548+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleGetMemoryStats_NilStores_ValidJSON"} +{"Time":"2026-07-11T04:02:10.4621548+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleCheckSystemHealth_NilStores_StructuredResponse"} +{"Time":"2026-07-11T04:02:10.4621548+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleCheckSystemHealth_NilStores_StructuredResponse","Output":"=== RUN TestHandleCheckSystemHealth_NilStores_StructuredResponse\n"} +{"Time":"2026-07-11T04:02:10.4621548+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleCheckSystemHealth_NilStores_StructuredResponse","Output":"=== PAUSE TestHandleCheckSystemHealth_NilStores_StructuredResponse\n"} +{"Time":"2026-07-11T04:02:10.4621548+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleCheckSystemHealth_NilStores_StructuredResponse"} +{"Time":"2026-07-11T04:02:10.4621548+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleFindSimilarObservations_Validation"} +{"Time":"2026-07-11T04:02:10.4621548+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleFindSimilarObservations_Validation","Output":"=== RUN TestHandleFindSimilarObservations_Validation\n"} +{"Time":"2026-07-11T04:02:10.4621548+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleFindSimilarObservations_Validation","Output":"=== PAUSE TestHandleFindSimilarObservations_Validation\n"} +{"Time":"2026-07-11T04:02:10.4621548+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleFindSimilarObservations_Validation"} +{"Time":"2026-07-11T04:02:10.4621548+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleFindSimilarObservations_EmptyResultInV5"} +{"Time":"2026-07-11T04:02:10.4621548+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleFindSimilarObservations_EmptyResultInV5","Output":"=== RUN TestHandleFindSimilarObservations_EmptyResultInV5\n"} +{"Time":"2026-07-11T04:02:10.4621548+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleFindSimilarObservations_EmptyResultInV5","Output":"=== PAUSE TestHandleFindSimilarObservations_EmptyResultInV5\n"} +{"Time":"2026-07-11T04:02:10.4621548+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleFindSimilarObservations_EmptyResultInV5"} +{"Time":"2026-07-11T04:02:10.4621548+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleAnalyzeSearchPatterns_InvalidJSON"} +{"Time":"2026-07-11T04:02:10.4621548+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleAnalyzeSearchPatterns_InvalidJSON","Output":"=== RUN TestHandleAnalyzeSearchPatterns_InvalidJSON\n"} +{"Time":"2026-07-11T04:02:10.4621548+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleAnalyzeSearchPatterns_InvalidJSON","Output":"=== PAUSE TestHandleAnalyzeSearchPatterns_InvalidJSON\n"} +{"Time":"2026-07-11T04:02:10.4621548+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleAnalyzeSearchPatterns_InvalidJSON"} +{"Time":"2026-07-11T04:02:10.4621548+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSendResponse_ContainsJSONRPC"} +{"Time":"2026-07-11T04:02:10.4621548+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSendResponse_ContainsJSONRPC","Output":"=== RUN TestSendResponse_ContainsJSONRPC\n"} +{"Time":"2026-07-11T04:02:10.4621548+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSendResponse_ContainsJSONRPC","Output":"=== PAUSE TestSendResponse_ContainsJSONRPC\n"} +{"Time":"2026-07-11T04:02:10.4621548+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSendResponse_ContainsJSONRPC"} +{"Time":"2026-07-11T04:02:10.4621548+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSendResponse_ErrorResponse"} +{"Time":"2026-07-11T04:02:10.4621548+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSendResponse_ErrorResponse","Output":"=== RUN TestSendResponse_ErrorResponse\n"} +{"Time":"2026-07-11T04:02:10.4621548+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSendResponse_ErrorResponse","Output":"=== PAUSE TestSendResponse_ErrorResponse\n"} +{"Time":"2026-07-11T04:02:10.4621548+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSendResponse_ErrorResponse"} +{"Time":"2026-07-11T04:02:10.4621548+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSendResponse_NilID"} +{"Time":"2026-07-11T04:02:10.4621548+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSendResponse_NilID","Output":"=== RUN TestSendResponse_NilID\n"} +{"Time":"2026-07-11T04:02:10.4621548+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSendResponse_NilID","Output":"=== PAUSE TestSendResponse_NilID\n"} +{"Time":"2026-07-11T04:02:10.4621548+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSendResponse_NilID"} +{"Time":"2026-07-11T04:02:10.4621548+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSendResponse_VariousIDTypes"} +{"Time":"2026-07-11T04:02:10.4621548+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSendResponse_VariousIDTypes","Output":"=== RUN TestSendResponse_VariousIDTypes\n"} +{"Time":"2026-07-11T04:02:10.4621548+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSendResponse_VariousIDTypes","Output":"=== PAUSE TestSendResponse_VariousIDTypes\n"} +{"Time":"2026-07-11T04:02:10.4621548+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSendResponse_VariousIDTypes"} +{"Time":"2026-07-11T04:02:10.4621548+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSendError_OutputShape"} +{"Time":"2026-07-11T04:02:10.4621548+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSendError_OutputShape","Output":"=== RUN TestSendError_OutputShape\n"} +{"Time":"2026-07-11T04:02:10.4621548+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSendError_OutputShape","Output":"=== PAUSE TestSendError_OutputShape\n"} +{"Time":"2026-07-11T04:02:10.4621548+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSendError_OutputShape"} +{"Time":"2026-07-11T04:02:10.4621548+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRun_ParseError"} +{"Time":"2026-07-11T04:02:10.4621548+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRun_ParseError","Output":"=== RUN TestRun_ParseError\n"} +{"Time":"2026-07-11T04:02:10.4621548+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRun_ParseError","Output":"=== PAUSE TestRun_ParseError\n"} +{"Time":"2026-07-11T04:02:10.4621548+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRun_ParseError"} +{"Time":"2026-07-11T04:02:10.4621548+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRun_EmptyLinesSkipped"} +{"Time":"2026-07-11T04:02:10.4621548+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRun_EmptyLinesSkipped","Output":"=== RUN TestRun_EmptyLinesSkipped\n"} +{"Time":"2026-07-11T04:02:10.4621548+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRun_EmptyLinesSkipped","Output":"=== PAUSE TestRun_EmptyLinesSkipped\n"} +{"Time":"2026-07-11T04:02:10.4621548+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRun_EmptyLinesSkipped"} +{"Time":"2026-07-11T04:02:10.4621548+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRun_ValidInitialize"} +{"Time":"2026-07-11T04:02:10.4621548+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRun_ValidInitialize","Output":"=== RUN TestRun_ValidInitialize\n"} +{"Time":"2026-07-11T04:02:10.4621548+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRun_ValidInitialize","Output":"=== PAUSE TestRun_ValidInitialize\n"} +{"Time":"2026-07-11T04:02:10.4621548+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRun_ValidInitialize"} +{"Time":"2026-07-11T04:02:10.4621548+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRun_MultipleRequests"} +{"Time":"2026-07-11T04:02:10.4621548+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRun_MultipleRequests","Output":"=== RUN TestRun_MultipleRequests\n"} +{"Time":"2026-07-11T04:02:10.4621548+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRun_MultipleRequests","Output":"=== PAUSE TestRun_MultipleRequests\n"} +{"Time":"2026-07-11T04:02:10.4621548+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRun_MultipleRequests"} +{"Time":"2026-07-11T04:02:10.4621548+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRun_MixedValidAndInvalid"} +{"Time":"2026-07-11T04:02:10.4621548+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRun_MixedValidAndInvalid","Output":"=== RUN TestRun_MixedValidAndInvalid\n"} +{"Time":"2026-07-11T04:02:10.4621548+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRun_MixedValidAndInvalid","Output":"=== PAUSE TestRun_MixedValidAndInvalid\n"} +{"Time":"2026-07-11T04:02:10.4621548+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRun_MixedValidAndInvalid"} +{"Time":"2026-07-11T04:02:10.4621548+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRun_NotificationNoResponse"} +{"Time":"2026-07-11T04:02:10.4621548+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRun_NotificationNoResponse","Output":"=== RUN TestRun_NotificationNoResponse\n"} +{"Time":"2026-07-11T04:02:10.4621548+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRun_NotificationNoResponse","Output":"=== PAUSE TestRun_NotificationNoResponse\n"} +{"Time":"2026-07-11T04:02:10.4621548+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRun_NotificationNoResponse"} +{"Time":"2026-07-11T04:02:10.4621548+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestJSONRPCErrorCodes_Table"} +{"Time":"2026-07-11T04:02:10.4621548+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestJSONRPCErrorCodes_Table","Output":"=== RUN TestJSONRPCErrorCodes_Table\n"} +{"Time":"2026-07-11T04:02:10.4621548+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestJSONRPCErrorCodes_Table","Output":"=== PAUSE TestJSONRPCErrorCodes_Table\n"} +{"Time":"2026-07-11T04:02:10.4621548+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestJSONRPCErrorCodes_Table"} +{"Time":"2026-07-11T04:02:10.4621548+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTierConstants"} +{"Time":"2026-07-11T04:02:10.4621548+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTierConstants","Output":"=== RUN TestTierConstants\n"} +{"Time":"2026-07-11T04:02:10.4621548+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTierConstants","Output":"=== PAUSE TestTierConstants\n"} +{"Time":"2026-07-11T04:02:10.4621548+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTierConstants"} +{"Time":"2026-07-11T04:02:10.4621548+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007"} +{"Time":"2026-07-11T04:02:10.4621548+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":"=== RUN TestEC_F1_TagDerivedBackfill_T007\n"} +{"Time":"2026-07-11T04:02:10.572826+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":"{\"level\":\"debug\",\"connections\":1,\"time\":\"2026-07-11T04:02:10+03:00\",\"message\":\"Connection pool warmed\"}\n"} +{"Time":"2026-07-11T04:02:10.6078264+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":"--- PASS: TestEC_F1_TagDerivedBackfill_T007 (0.15s)\n"} +{"Time":"2026-07-11T04:02:10.6078264+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Elapsed":0.15} +{"Time":"2026-07-11T04:02:10.6078264+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_HandleRecallSearch_FlagOff_BackwardCompat_T007"} +{"Time":"2026-07-11T04:02:10.6078264+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_HandleRecallSearch_FlagOff_BackwardCompat_T007","Output":"=== RUN TestEC_F1_HandleRecallSearch_FlagOff_BackwardCompat_T007\n"} +{"Time":"2026-07-11T04:02:10.7130592+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_HandleRecallSearch_FlagOff_BackwardCompat_T007","Output":"{\"level\":\"debug\",\"connections\":1,\"time\":\"2026-07-11T04:02:10+03:00\",\"message\":\"Connection pool warmed\"}\n"} +{"Time":"2026-07-11T04:02:10.7305752+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_HandleRecallSearch_FlagOff_BackwardCompat_T007","Output":"--- PASS: TestEC_F1_HandleRecallSearch_FlagOff_BackwardCompat_T007 (0.12s)\n"} +{"Time":"2026-07-11T04:02:10.7305752+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_HandleRecallSearch_FlagOff_BackwardCompat_T007","Elapsed":0.12} +{"Time":"2026-07-11T04:02:10.7305752+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemory_PrincipalOwnerDerivedFromIdentity"} +{"Time":"2026-07-11T04:02:10.7305752+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemory_PrincipalOwnerDerivedFromIdentity","Output":"=== RUN TestStoreMemory_PrincipalOwnerDerivedFromIdentity\n"} +{"Time":"2026-07-11T04:02:10.8322905+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemory_PrincipalOwnerDerivedFromIdentity","Output":"{\"level\":\"debug\",\"connections\":1,\"time\":\"2026-07-11T04:02:10+03:00\",\"message\":\"Connection pool warmed\"}\n"} +{"Time":"2026-07-11T04:02:10.8512939+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemory_PrincipalOwnerDerivedFromIdentity","Output":"--- PASS: TestStoreMemory_PrincipalOwnerDerivedFromIdentity (0.12s)\n"} +{"Time":"2026-07-11T04:02:10.8512939+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemory_PrincipalOwnerDerivedFromIdentity","Elapsed":0.12} +{"Time":"2026-07-11T04:02:10.8512939+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRI_F2_DualFieldResponse_FlagOn_T008"} +{"Time":"2026-07-11T04:02:10.8512939+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRI_F2_DualFieldResponse_FlagOn_T008","Output":"=== RUN TestRI_F2_DualFieldResponse_FlagOn_T008\n"} +{"Time":"2026-07-11T04:02:10.9527946+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRI_F2_DualFieldResponse_FlagOn_T008","Output":"{\"level\":\"debug\",\"connections\":1,\"time\":\"2026-07-11T04:02:10+03:00\",\"message\":\"Connection pool warmed\"}\n"} +{"Time":"2026-07-11T04:02:10.9547954+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRI_F2_DualFieldResponse_FlagOn_T008/legacy_scope=project,_no_privacy_scope_-\u003e_dual_project"} +{"Time":"2026-07-11T04:02:10.9547954+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRI_F2_DualFieldResponse_FlagOn_T008/legacy_scope=project,_no_privacy_scope_-\u003e_dual_project","Output":"=== RUN TestRI_F2_DualFieldResponse_FlagOn_T008/legacy_scope=project,_no_privacy_scope_-\u003e_dual_project\n"} +{"Time":"2026-07-11T04:02:10.9622943+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRI_F2_DualFieldResponse_FlagOn_T008/legacy_scope=project,_no_privacy_scope_-\u003e_dual_project","Output":"--- PASS: TestRI_F2_DualFieldResponse_FlagOn_T008/legacy_scope=project,_no_privacy_scope_-\u003e_dual_project (0.01s)\n"} +{"Time":"2026-07-11T04:02:10.9622943+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRI_F2_DualFieldResponse_FlagOn_T008/legacy_scope=project,_no_privacy_scope_-\u003e_dual_project","Elapsed":0.01} +{"Time":"2026-07-11T04:02:10.9622943+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRI_F2_DualFieldResponse_FlagOn_T008/legacy_scope=global,_no_privacy_scope_-\u003e_dual_global"} +{"Time":"2026-07-11T04:02:10.9622943+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRI_F2_DualFieldResponse_FlagOn_T008/legacy_scope=global,_no_privacy_scope_-\u003e_dual_global","Output":"=== RUN TestRI_F2_DualFieldResponse_FlagOn_T008/legacy_scope=global,_no_privacy_scope_-\u003e_dual_global\n"} +{"Time":"2026-07-11T04:02:10.9682938+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRI_F2_DualFieldResponse_FlagOn_T008/legacy_scope=global,_no_privacy_scope_-\u003e_dual_global","Output":"--- PASS: TestRI_F2_DualFieldResponse_FlagOn_T008/legacy_scope=global,_no_privacy_scope_-\u003e_dual_global (0.01s)\n"} +{"Time":"2026-07-11T04:02:10.9682938+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRI_F2_DualFieldResponse_FlagOn_T008/legacy_scope=global,_no_privacy_scope_-\u003e_dual_global","Elapsed":0.01} +{"Time":"2026-07-11T04:02:10.9682938+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRI_F2_DualFieldResponse_FlagOn_T008/explicit_privacy_scope=shared_overrides_legacy"} +{"Time":"2026-07-11T04:02:10.9682938+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRI_F2_DualFieldResponse_FlagOn_T008/explicit_privacy_scope=shared_overrides_legacy","Output":"=== RUN TestRI_F2_DualFieldResponse_FlagOn_T008/explicit_privacy_scope=shared_overrides_legacy\n"} +{"Time":"2026-07-11T04:02:10.9742939+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRI_F2_DualFieldResponse_FlagOn_T008/explicit_privacy_scope=shared_overrides_legacy","Output":"--- PASS: TestRI_F2_DualFieldResponse_FlagOn_T008/explicit_privacy_scope=shared_overrides_legacy (0.01s)\n"} +{"Time":"2026-07-11T04:02:10.9742939+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRI_F2_DualFieldResponse_FlagOn_T008/explicit_privacy_scope=shared_overrides_legacy","Elapsed":0.01} +{"Time":"2026-07-11T04:02:10.9812942+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRI_F2_DualFieldResponse_FlagOn_T008","Output":"--- PASS: TestRI_F2_DualFieldResponse_FlagOn_T008 (0.13s)\n"} +{"Time":"2026-07-11T04:02:10.9812942+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRI_F2_DualFieldResponse_FlagOn_T008","Elapsed":0.13} +{"Time":"2026-07-11T04:02:10.9812942+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRI_F2_DualFieldResponse_FlagOff_LegacyOnly_T008"} +{"Time":"2026-07-11T04:02:10.9812942+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRI_F2_DualFieldResponse_FlagOff_LegacyOnly_T008","Output":"=== RUN TestRI_F2_DualFieldResponse_FlagOff_LegacyOnly_T008\n"} +{"Time":"2026-07-11T04:02:11.0945229+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRI_F2_DualFieldResponse_FlagOff_LegacyOnly_T008","Output":"{\"level\":\"debug\",\"connections\":1,\"time\":\"2026-07-11T04:02:11+03:00\",\"message\":\"Connection pool warmed\"}\n"} +{"Time":"2026-07-11T04:02:11.1125591+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRI_F2_DualFieldResponse_FlagOff_LegacyOnly_T008","Output":"--- PASS: TestRI_F2_DualFieldResponse_FlagOff_LegacyOnly_T008 (0.13s)\n"} +{"Time":"2026-07-11T04:02:11.1125591+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRI_F2_DualFieldResponse_FlagOff_LegacyOnly_T008","Elapsed":0.13} +{"Time":"2026-07-11T04:02:11.1125591+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRI_F2_InvalidPrivacyScope_StillStructuredErrorUnderFlagOn_T008"} +{"Time":"2026-07-11T04:02:11.1125591+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRI_F2_InvalidPrivacyScope_StillStructuredErrorUnderFlagOn_T008","Output":"=== RUN TestRI_F2_InvalidPrivacyScope_StillStructuredErrorUnderFlagOn_T008\n"} +{"Time":"2026-07-11T04:02:11.2270441+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRI_F2_InvalidPrivacyScope_StillStructuredErrorUnderFlagOn_T008","Output":"{\"level\":\"debug\",\"connections\":1,\"time\":\"2026-07-11T04:02:11+03:00\",\"message\":\"Connection pool warmed\"}\n"} +{"Time":"2026-07-11T04:02:11.2315447+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRI_F2_InvalidPrivacyScope_StillStructuredErrorUnderFlagOn_T008","Output":"--- PASS: TestRI_F2_InvalidPrivacyScope_StillStructuredErrorUnderFlagOn_T008 (0.12s)\n"} +{"Time":"2026-07-11T04:02:11.2315447+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRI_F2_InvalidPrivacyScope_StillStructuredErrorUnderFlagOn_T008","Elapsed":0.12} +{"Time":"2026-07-11T04:02:11.2315447+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAdminPurge_MissingProject"} +{"Time":"2026-07-11T04:02:11.2315447+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAdminPurge_MissingProject","Output":"=== RUN TestAdminPurge_MissingProject\n"} +{"Time":"2026-07-11T04:02:11.2315447+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAdminPurge_MissingProject","Output":"--- PASS: TestAdminPurge_MissingProject (0.00s)\n"} +{"Time":"2026-07-11T04:02:11.2315447+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAdminPurge_MissingProject","Elapsed":0} +{"Time":"2026-07-11T04:02:11.2315447+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAdminPurge_MissingConfirm"} +{"Time":"2026-07-11T04:02:11.2315447+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAdminPurge_MissingConfirm","Output":"=== RUN TestAdminPurge_MissingConfirm\n"} +{"Time":"2026-07-11T04:02:11.2315447+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAdminPurge_MissingConfirm","Output":"--- PASS: TestAdminPurge_MissingConfirm (0.00s)\n"} +{"Time":"2026-07-11T04:02:11.2315447+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAdminPurge_MissingConfirm","Elapsed":0} +{"Time":"2026-07-11T04:02:11.2315447+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAdminPurge_MismatchedConfirm"} +{"Time":"2026-07-11T04:02:11.2315447+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAdminPurge_MismatchedConfirm","Output":"=== RUN TestAdminPurge_MismatchedConfirm\n"} +{"Time":"2026-07-11T04:02:11.2315447+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAdminPurge_MismatchedConfirm","Output":"--- PASS: TestAdminPurge_MismatchedConfirm (0.00s)\n"} +{"Time":"2026-07-11T04:02:11.2315447+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAdminPurge_MismatchedConfirm","Elapsed":0} +{"Time":"2026-07-11T04:02:11.2315447+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAdminPurge_NilStore"} +{"Time":"2026-07-11T04:02:11.2315447+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAdminPurge_NilStore","Output":"=== RUN TestAdminPurge_NilStore\n"} +{"Time":"2026-07-11T04:02:11.2315447+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAdminPurge_NilStore","Output":"--- PASS: TestAdminPurge_NilStore (0.00s)\n"} +{"Time":"2026-07-11T04:02:11.2315447+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAdminPurge_NilStore","Elapsed":0} +{"Time":"2026-07-11T04:02:11.2315447+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAdminPurge_SetPurgeStore_Wiring"} +{"Time":"2026-07-11T04:02:11.2315447+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAdminPurge_SetPurgeStore_Wiring","Output":"=== RUN TestAdminPurge_SetPurgeStore_Wiring\n"} +{"Time":"2026-07-11T04:02:11.2315447+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAdminPurge_SetPurgeStore_Wiring","Output":"--- PASS: TestAdminPurge_SetPurgeStore_Wiring (0.00s)\n"} +{"Time":"2026-07-11T04:02:11.2315447+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAdminPurge_SetPurgeStore_Wiring","Elapsed":0} +{"Time":"2026-07-11T04:02:11.2315447+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAdminPurge_ActionInAdminActions"} +{"Time":"2026-07-11T04:02:11.2315447+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAdminPurge_ActionInAdminActions","Output":"=== RUN TestAdminPurge_ActionInAdminActions\n"} +{"Time":"2026-07-11T04:02:11.2315447+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAdminPurge_ActionInAdminActions","Output":"--- PASS: TestAdminPurge_ActionInAdminActions (0.00s)\n"} +{"Time":"2026-07-11T04:02:11.2315447+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAdminPurge_ActionInAdminActions","Elapsed":0} +{"Time":"2026-07-11T04:02:11.2315447+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAdminPurge_NonAdminDenied"} +{"Time":"2026-07-11T04:02:11.2315447+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAdminPurge_NonAdminDenied","Output":"=== RUN TestAdminPurge_NonAdminDenied\n"} +{"Time":"2026-07-11T04:02:11.2315447+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAdminPurge_NonAdminDenied","Output":"--- PASS: TestAdminPurge_NonAdminDenied (0.00s)\n"} +{"Time":"2026-07-11T04:02:11.2315447+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAdminPurge_NonAdminDenied","Elapsed":0} +{"Time":"2026-07-11T04:02:11.2315447+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAdminPurge_NoIdentityDenied"} +{"Time":"2026-07-11T04:02:11.2315447+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAdminPurge_NoIdentityDenied","Output":"=== RUN TestAdminPurge_NoIdentityDenied\n"} +{"Time":"2026-07-11T04:02:11.2315447+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAdminPurge_NoIdentityDenied","Output":"--- PASS: TestAdminPurge_NoIdentityDenied (0.00s)\n"} +{"Time":"2026-07-11T04:02:11.2315447+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAdminPurge_NoIdentityDenied","Elapsed":0} +{"Time":"2026-07-11T04:02:11.2315447+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAdminPurge_AdminAllowed"} +{"Time":"2026-07-11T04:02:11.2315447+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAdminPurge_AdminAllowed","Output":"=== RUN TestAdminPurge_AdminAllowed\n"} +{"Time":"2026-07-11T04:02:11.2320444+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAdminPurge_AdminAllowed","Output":"--- PASS: TestAdminPurge_AdminAllowed (0.00s)\n"} +{"Time":"2026-07-11T04:02:11.2320444+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAdminPurge_AdminAllowed","Elapsed":0} +{"Time":"2026-07-11T04:02:11.2320444+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAdminPurge_FlagOff_RejectsAsUnknown"} +{"Time":"2026-07-11T04:02:11.2320444+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAdminPurge_FlagOff_RejectsAsUnknown","Output":"=== RUN TestAdminPurge_FlagOff_RejectsAsUnknown\n"} +{"Time":"2026-07-11T04:02:11.2320444+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAdminPurge_FlagOff_RejectsAsUnknown","Output":"--- PASS: TestAdminPurge_FlagOff_RejectsAsUnknown (0.00s)\n"} +{"Time":"2026-07-11T04:02:11.2320444+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAdminPurge_FlagOff_RejectsAsUnknown","Elapsed":0} +{"Time":"2026-07-11T04:02:11.2320444+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAdminPurge_FlagOff_SchemaLacksConfirm"} +{"Time":"2026-07-11T04:02:11.2320444+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAdminPurge_FlagOff_SchemaLacksConfirm","Output":"=== RUN TestAdminPurge_FlagOff_SchemaLacksConfirm\n"} +{"Time":"2026-07-11T04:02:11.2320444+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAdminPurge_FlagOff_SchemaLacksConfirm","Output":"--- PASS: TestAdminPurge_FlagOff_SchemaLacksConfirm (0.00s)\n"} +{"Time":"2026-07-11T04:02:11.2320444+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAdminPurge_FlagOff_SchemaLacksConfirm","Elapsed":0} +{"Time":"2026-07-11T04:02:11.2320444+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAdminPurge_FlagOn_SchemaHasConfirm"} +{"Time":"2026-07-11T04:02:11.2320444+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAdminPurge_FlagOn_SchemaHasConfirm","Output":"=== RUN TestAdminPurge_FlagOn_SchemaHasConfirm\n"} +{"Time":"2026-07-11T04:02:11.2320444+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAdminPurge_FlagOn_SchemaHasConfirm","Output":"--- PASS: TestAdminPurge_FlagOn_SchemaHasConfirm (0.00s)\n"} +{"Time":"2026-07-11T04:02:11.2320444+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAdminPurge_FlagOn_SchemaHasConfirm","Elapsed":0} +{"Time":"2026-07-11T04:02:11.2320444+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAdminPurge_WhitespaceProject"} +{"Time":"2026-07-11T04:02:11.2320444+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAdminPurge_WhitespaceProject","Output":"=== RUN TestAdminPurge_WhitespaceProject\n"} +{"Time":"2026-07-11T04:02:11.2320444+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAdminPurge_WhitespaceProject","Output":"--- PASS: TestAdminPurge_WhitespaceProject (0.00s)\n"} +{"Time":"2026-07-11T04:02:11.2320444+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAdminPurge_WhitespaceProject","Elapsed":0} +{"Time":"2026-07-11T04:02:11.2320444+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetAmbientHintsToolAdvertisedOnlyWhenS3FlagAndQueuePresent"} +{"Time":"2026-07-11T04:02:11.2320444+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetAmbientHintsToolAdvertisedOnlyWhenS3FlagAndQueuePresent","Output":"=== RUN TestGetAmbientHintsToolAdvertisedOnlyWhenS3FlagAndQueuePresent\n"} +{"Time":"2026-07-11T04:02:11.2320444+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetAmbientHintsToolAdvertisedOnlyWhenS3FlagAndQueuePresent/master_off_hides_tool"} +{"Time":"2026-07-11T04:02:11.2320444+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetAmbientHintsToolAdvertisedOnlyWhenS3FlagAndQueuePresent/master_off_hides_tool","Output":"=== RUN TestGetAmbientHintsToolAdvertisedOnlyWhenS3FlagAndQueuePresent/master_off_hides_tool\n"} +{"Time":"2026-07-11T04:02:11.2325442+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetAmbientHintsToolAdvertisedOnlyWhenS3FlagAndQueuePresent/master_off_hides_tool","Output":"--- PASS: TestGetAmbientHintsToolAdvertisedOnlyWhenS3FlagAndQueuePresent/master_off_hides_tool (0.00s)\n"} +{"Time":"2026-07-11T04:02:11.2325442+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetAmbientHintsToolAdvertisedOnlyWhenS3FlagAndQueuePresent/master_off_hides_tool","Elapsed":0} +{"Time":"2026-07-11T04:02:11.2325442+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetAmbientHintsToolAdvertisedOnlyWhenS3FlagAndQueuePresent/s3_off_hides_tool"} +{"Time":"2026-07-11T04:02:11.2325442+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetAmbientHintsToolAdvertisedOnlyWhenS3FlagAndQueuePresent/s3_off_hides_tool","Output":"=== RUN TestGetAmbientHintsToolAdvertisedOnlyWhenS3FlagAndQueuePresent/s3_off_hides_tool\n"} +{"Time":"2026-07-11T04:02:11.2325442+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetAmbientHintsToolAdvertisedOnlyWhenS3FlagAndQueuePresent/s3_off_hides_tool","Output":"--- PASS: TestGetAmbientHintsToolAdvertisedOnlyWhenS3FlagAndQueuePresent/s3_off_hides_tool (0.00s)\n"} +{"Time":"2026-07-11T04:02:11.2325442+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetAmbientHintsToolAdvertisedOnlyWhenS3FlagAndQueuePresent/s3_off_hides_tool","Elapsed":0} +{"Time":"2026-07-11T04:02:11.2325442+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetAmbientHintsToolAdvertisedOnlyWhenS3FlagAndQueuePresent/missing_queue_hides_tool"} +{"Time":"2026-07-11T04:02:11.2325442+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetAmbientHintsToolAdvertisedOnlyWhenS3FlagAndQueuePresent/missing_queue_hides_tool","Output":"=== RUN TestGetAmbientHintsToolAdvertisedOnlyWhenS3FlagAndQueuePresent/missing_queue_hides_tool\n"} +{"Time":"2026-07-11T04:02:11.2325442+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetAmbientHintsToolAdvertisedOnlyWhenS3FlagAndQueuePresent/missing_queue_hides_tool","Output":"--- PASS: TestGetAmbientHintsToolAdvertisedOnlyWhenS3FlagAndQueuePresent/missing_queue_hides_tool (0.00s)\n"} +{"Time":"2026-07-11T04:02:11.2325442+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetAmbientHintsToolAdvertisedOnlyWhenS3FlagAndQueuePresent/missing_queue_hides_tool","Elapsed":0} +{"Time":"2026-07-11T04:02:11.2325442+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetAmbientHintsToolAdvertisedOnlyWhenS3FlagAndQueuePresent/master+s3+queue_advertises_tool"} +{"Time":"2026-07-11T04:02:11.2325442+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetAmbientHintsToolAdvertisedOnlyWhenS3FlagAndQueuePresent/master+s3+queue_advertises_tool","Output":"=== RUN TestGetAmbientHintsToolAdvertisedOnlyWhenS3FlagAndQueuePresent/master+s3+queue_advertises_tool\n"} +{"Time":"2026-07-11T04:02:11.2330444+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetAmbientHintsToolAdvertisedOnlyWhenS3FlagAndQueuePresent/master+s3+queue_advertises_tool","Output":"--- PASS: TestGetAmbientHintsToolAdvertisedOnlyWhenS3FlagAndQueuePresent/master+s3+queue_advertises_tool (0.00s)\n"} +{"Time":"2026-07-11T04:02:11.2330444+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetAmbientHintsToolAdvertisedOnlyWhenS3FlagAndQueuePresent/master+s3+queue_advertises_tool","Elapsed":0} +{"Time":"2026-07-11T04:02:11.2330444+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetAmbientHintsToolAdvertisedOnlyWhenS3FlagAndQueuePresent","Output":"--- PASS: TestGetAmbientHintsToolAdvertisedOnlyWhenS3FlagAndQueuePresent (0.00s)\n"} +{"Time":"2026-07-11T04:02:11.2330444+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetAmbientHintsToolAdvertisedOnlyWhenS3FlagAndQueuePresent","Elapsed":0} +{"Time":"2026-07-11T04:02:11.2330444+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetAmbientHintsDrainsBoundedSafeHints"} +{"Time":"2026-07-11T04:02:11.2330444+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetAmbientHintsDrainsBoundedSafeHints","Output":"=== RUN TestGetAmbientHintsDrainsBoundedSafeHints\n"} +{"Time":"2026-07-11T04:02:11.2330444+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetAmbientHintsDrainsBoundedSafeHints","Output":"--- PASS: TestGetAmbientHintsDrainsBoundedSafeHints (0.00s)\n"} +{"Time":"2026-07-11T04:02:11.2330444+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetAmbientHintsDrainsBoundedSafeHints","Elapsed":0} +{"Time":"2026-07-11T04:02:11.2330444+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetAmbientHintsReturnsEmptyForDisabledStaleAndEmptyQueue"} +{"Time":"2026-07-11T04:02:11.2330444+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetAmbientHintsReturnsEmptyForDisabledStaleAndEmptyQueue","Output":"=== RUN TestGetAmbientHintsReturnsEmptyForDisabledStaleAndEmptyQueue\n"} +{"Time":"2026-07-11T04:02:11.2330444+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetAmbientHintsReturnsEmptyForDisabledStaleAndEmptyQueue/disabled_flag"} +{"Time":"2026-07-11T04:02:11.2330444+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetAmbientHintsReturnsEmptyForDisabledStaleAndEmptyQueue/disabled_flag","Output":"=== RUN TestGetAmbientHintsReturnsEmptyForDisabledStaleAndEmptyQueue/disabled_flag\n"} +{"Time":"2026-07-11T04:02:11.2330444+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetAmbientHintsReturnsEmptyForDisabledStaleAndEmptyQueue/disabled_flag","Output":"--- PASS: TestGetAmbientHintsReturnsEmptyForDisabledStaleAndEmptyQueue/disabled_flag (0.00s)\n"} +{"Time":"2026-07-11T04:02:11.2330444+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetAmbientHintsReturnsEmptyForDisabledStaleAndEmptyQueue/disabled_flag","Elapsed":0} +{"Time":"2026-07-11T04:02:11.2330444+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetAmbientHintsReturnsEmptyForDisabledStaleAndEmptyQueue/empty_queue"} +{"Time":"2026-07-11T04:02:11.2330444+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetAmbientHintsReturnsEmptyForDisabledStaleAndEmptyQueue/empty_queue","Output":"=== RUN TestGetAmbientHintsReturnsEmptyForDisabledStaleAndEmptyQueue/empty_queue\n"} +{"Time":"2026-07-11T04:02:11.2330444+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetAmbientHintsReturnsEmptyForDisabledStaleAndEmptyQueue/empty_queue","Output":"--- PASS: TestGetAmbientHintsReturnsEmptyForDisabledStaleAndEmptyQueue/empty_queue (0.00s)\n"} +{"Time":"2026-07-11T04:02:11.2330444+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetAmbientHintsReturnsEmptyForDisabledStaleAndEmptyQueue/empty_queue","Elapsed":0} +{"Time":"2026-07-11T04:02:11.2330444+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetAmbientHintsReturnsEmptyForDisabledStaleAndEmptyQueue/stale_queue"} +{"Time":"2026-07-11T04:02:11.2330444+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetAmbientHintsReturnsEmptyForDisabledStaleAndEmptyQueue/stale_queue","Output":"=== RUN TestGetAmbientHintsReturnsEmptyForDisabledStaleAndEmptyQueue/stale_queue\n"} +{"Time":"2026-07-11T04:02:11.2330444+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetAmbientHintsReturnsEmptyForDisabledStaleAndEmptyQueue/stale_queue","Output":"--- PASS: TestGetAmbientHintsReturnsEmptyForDisabledStaleAndEmptyQueue/stale_queue (0.00s)\n"} +{"Time":"2026-07-11T04:02:11.2330444+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetAmbientHintsReturnsEmptyForDisabledStaleAndEmptyQueue/stale_queue","Elapsed":0} +{"Time":"2026-07-11T04:02:11.2330444+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetAmbientHintsReturnsEmptyForDisabledStaleAndEmptyQueue","Output":"--- PASS: TestGetAmbientHintsReturnsEmptyForDisabledStaleAndEmptyQueue (0.00s)\n"} +{"Time":"2026-07-11T04:02:11.2330444+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetAmbientHintsReturnsEmptyForDisabledStaleAndEmptyQueue","Elapsed":0} +{"Time":"2026-07-11T04:02:11.2330444+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetMemoryBrief_PrincipalScopeSchemaAdvertised"} +{"Time":"2026-07-11T04:02:11.2330444+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetMemoryBrief_PrincipalScopeSchemaAdvertised","Output":"=== RUN TestGetMemoryBrief_PrincipalScopeSchemaAdvertised\n"} +{"Time":"2026-07-11T04:02:11.2335443+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetMemoryBrief_PrincipalScopeSchemaAdvertised","Output":"--- PASS: TestGetMemoryBrief_PrincipalScopeSchemaAdvertised (0.00s)\n"} +{"Time":"2026-07-11T04:02:11.2335443+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetMemoryBrief_PrincipalScopeSchemaAdvertised","Elapsed":0} +{"Time":"2026-07-11T04:02:11.2335443+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetMemoryBrief_PrincipalScopedResponseAndRequest"} +{"Time":"2026-07-11T04:02:11.2335443+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetMemoryBrief_PrincipalScopedResponseAndRequest","Output":"=== RUN TestGetMemoryBrief_PrincipalScopedResponseAndRequest\n"} +{"Time":"2026-07-11T04:02:11.2335443+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetMemoryBrief_PrincipalScopedResponseAndRequest","Output":"--- PASS: TestGetMemoryBrief_PrincipalScopedResponseAndRequest (0.00s)\n"} +{"Time":"2026-07-11T04:02:11.2335443+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetMemoryBrief_PrincipalScopedResponseAndRequest","Elapsed":0} +{"Time":"2026-07-11T04:02:11.2335443+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetMemoryBrief_PrincipalScopeRequiresQueryService"} +{"Time":"2026-07-11T04:02:11.2335443+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetMemoryBrief_PrincipalScopeRequiresQueryService","Output":"=== RUN TestGetMemoryBrief_PrincipalScopeRequiresQueryService\n"} +{"Time":"2026-07-11T04:02:11.2335443+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetMemoryBrief_PrincipalScopeRequiresQueryService","Output":"--- PASS: TestGetMemoryBrief_PrincipalScopeRequiresQueryService (0.00s)\n"} +{"Time":"2026-07-11T04:02:11.2335443+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetMemoryBrief_PrincipalScopeRequiresQueryService","Elapsed":0} +{"Time":"2026-07-11T04:02:11.2335443+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRequireCandidateReviewSnapshotRejectsNil"} +{"Time":"2026-07-11T04:02:11.2335443+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRequireCandidateReviewSnapshotRejectsNil","Output":"=== RUN TestRequireCandidateReviewSnapshotRejectsNil\n"} +{"Time":"2026-07-11T04:02:11.2335443+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRequireCandidateReviewSnapshotRejectsNil/reject_candidate"} +{"Time":"2026-07-11T04:02:11.2335443+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRequireCandidateReviewSnapshotRejectsNil/reject_candidate","Output":"=== RUN TestRequireCandidateReviewSnapshotRejectsNil/reject_candidate\n"} +{"Time":"2026-07-11T04:02:11.2335443+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRequireCandidateReviewSnapshotRejectsNil/reject_candidate","Output":"--- PASS: TestRequireCandidateReviewSnapshotRejectsNil/reject_candidate (0.00s)\n"} +{"Time":"2026-07-11T04:02:11.2335443+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRequireCandidateReviewSnapshotRejectsNil/reject_candidate","Elapsed":0} +{"Time":"2026-07-11T04:02:11.2335443+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRequireCandidateReviewSnapshotRejectsNil/supersede_candidate"} +{"Time":"2026-07-11T04:02:11.2335443+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRequireCandidateReviewSnapshotRejectsNil/supersede_candidate","Output":"=== RUN TestRequireCandidateReviewSnapshotRejectsNil/supersede_candidate\n"} +{"Time":"2026-07-11T04:02:11.2335443+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRequireCandidateReviewSnapshotRejectsNil/supersede_candidate","Output":"--- PASS: TestRequireCandidateReviewSnapshotRejectsNil/supersede_candidate (0.00s)\n"} +{"Time":"2026-07-11T04:02:11.2335443+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRequireCandidateReviewSnapshotRejectsNil/supersede_candidate","Elapsed":0} +{"Time":"2026-07-11T04:02:11.2335443+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRequireCandidateReviewSnapshotRejectsNil","Output":"--- PASS: TestRequireCandidateReviewSnapshotRejectsNil (0.00s)\n"} +{"Time":"2026-07-11T04:02:11.2335443+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRequireCandidateReviewSnapshotRejectsNil","Elapsed":0} +{"Time":"2026-07-11T04:02:11.2335443+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRequireCandidateReviewSnapshotAllowsNonNil"} +{"Time":"2026-07-11T04:02:11.2335443+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRequireCandidateReviewSnapshotAllowsNonNil","Output":"=== RUN TestRequireCandidateReviewSnapshotAllowsNonNil\n"} +{"Time":"2026-07-11T04:02:11.2335443+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRequireCandidateReviewSnapshotAllowsNonNil","Output":"--- PASS: TestRequireCandidateReviewSnapshotAllowsNonNil (0.00s)\n"} +{"Time":"2026-07-11T04:02:11.2335443+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRequireCandidateReviewSnapshotAllowsNonNil","Elapsed":0} +{"Time":"2026-07-11T04:02:11.2335443+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleListCandidates_EmptyProjectReturnsError"} +{"Time":"2026-07-11T04:02:11.2335443+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleListCandidates_EmptyProjectReturnsError","Output":"=== RUN TestHandleListCandidates_EmptyProjectReturnsError\n"} +{"Time":"2026-07-11T04:02:11.2335443+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleListCandidates_EmptyProjectReturnsError","Output":"--- PASS: TestHandleListCandidates_EmptyProjectReturnsError (0.00s)\n"} +{"Time":"2026-07-11T04:02:11.2335443+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleListCandidates_EmptyProjectReturnsError","Elapsed":0} +{"Time":"2026-07-11T04:02:11.2335443+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleListCandidates_FlagOffReturnsError"} +{"Time":"2026-07-11T04:02:11.2335443+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleListCandidates_FlagOffReturnsError","Output":"=== RUN TestHandleListCandidates_FlagOffReturnsError\n"} +{"Time":"2026-07-11T04:02:11.2335443+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleListCandidates_FlagOffReturnsError","Output":"--- PASS: TestHandleListCandidates_FlagOffReturnsError (0.00s)\n"} +{"Time":"2026-07-11T04:02:11.2335443+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleListCandidates_FlagOffReturnsError","Elapsed":0} +{"Time":"2026-07-11T04:02:11.2335443+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleGetCandidate_EmptyIDReturnsError"} +{"Time":"2026-07-11T04:02:11.2335443+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleGetCandidate_EmptyIDReturnsError","Output":"=== RUN TestHandleGetCandidate_EmptyIDReturnsError\n"} +{"Time":"2026-07-11T04:02:11.2335443+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleGetCandidate_EmptyIDReturnsError","Output":"--- PASS: TestHandleGetCandidate_EmptyIDReturnsError (0.00s)\n"} +{"Time":"2026-07-11T04:02:11.2335443+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleGetCandidate_EmptyIDReturnsError","Elapsed":0} +{"Time":"2026-07-11T04:02:11.2335443+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCandidateTools_ExposeCR008ReviewLoopContracts"} +{"Time":"2026-07-11T04:02:11.2335443+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCandidateTools_ExposeCR008ReviewLoopContracts","Output":"=== RUN TestCandidateTools_ExposeCR008ReviewLoopContracts\n"} +{"Time":"2026-07-11T04:02:11.2335443+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCandidateTools_ExposeCR008ReviewLoopContracts","Output":"--- PASS: TestCandidateTools_ExposeCR008ReviewLoopContracts (0.00s)\n"} +{"Time":"2026-07-11T04:02:11.2335443+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCandidateTools_ExposeCR008ReviewLoopContracts","Elapsed":0} +{"Time":"2026-07-11T04:02:11.2335443+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleReviewQueueRead_UnsupportedPacketTypeReturnsGatedPayload"} +{"Time":"2026-07-11T04:02:11.2335443+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleReviewQueueRead_UnsupportedPacketTypeReturnsGatedPayload","Output":"=== RUN TestHandleReviewQueueRead_UnsupportedPacketTypeReturnsGatedPayload\n"} +{"Time":"2026-07-11T04:02:11.2340442+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleReviewQueueRead_UnsupportedPacketTypeReturnsGatedPayload","Output":"--- PASS: TestHandleReviewQueueRead_UnsupportedPacketTypeReturnsGatedPayload (0.00s)\n"} +{"Time":"2026-07-11T04:02:11.2340442+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleReviewQueueRead_UnsupportedPacketTypeReturnsGatedPayload","Elapsed":0} +{"Time":"2026-07-11T04:02:11.2340442+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleReviewQueueRead_LimitOverMaxReturnsError"} +{"Time":"2026-07-11T04:02:11.2340442+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleReviewQueueRead_LimitOverMaxReturnsError","Output":"=== RUN TestHandleReviewQueueRead_LimitOverMaxReturnsError\n"} +{"Time":"2026-07-11T04:02:11.2340442+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleReviewQueueRead_LimitOverMaxReturnsError","Output":"--- PASS: TestHandleReviewQueueRead_LimitOverMaxReturnsError (0.00s)\n"} +{"Time":"2026-07-11T04:02:11.2340442+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleReviewQueueRead_LimitOverMaxReturnsError","Elapsed":0} +{"Time":"2026-07-11T04:02:11.2340442+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleReviewQueueRead_RiskyOnlyKeepsUnfilteredMetricsAndBacklog"} +{"Time":"2026-07-11T04:02:11.2340442+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleReviewQueueRead_RiskyOnlyKeepsUnfilteredMetricsAndBacklog","Output":"=== RUN TestHandleReviewQueueRead_RiskyOnlyKeepsUnfilteredMetricsAndBacklog\n"} +{"Time":"2026-07-11T04:02:11.2340442+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleReviewQueueRead_RiskyOnlyKeepsUnfilteredMetricsAndBacklog","Output":"--- PASS: TestHandleReviewQueueRead_RiskyOnlyKeepsUnfilteredMetricsAndBacklog (0.00s)\n"} +{"Time":"2026-07-11T04:02:11.2340442+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleReviewQueueRead_RiskyOnlyKeepsUnfilteredMetricsAndBacklog","Elapsed":0} +{"Time":"2026-07-11T04:02:11.2340442+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleReviewPacketPreviewAction_UnsupportedActionRejectedBeforeStoreMutation"} +{"Time":"2026-07-11T04:02:11.2340442+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleReviewPacketPreviewAction_UnsupportedActionRejectedBeforeStoreMutation","Output":"=== RUN TestHandleReviewPacketPreviewAction_UnsupportedActionRejectedBeforeStoreMutation\n"} +{"Time":"2026-07-11T04:02:11.2340442+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleReviewPacketPreviewAction_UnsupportedActionRejectedBeforeStoreMutation","Output":"--- PASS: TestHandleReviewPacketPreviewAction_UnsupportedActionRejectedBeforeStoreMutation (0.00s)\n"} +{"Time":"2026-07-11T04:02:11.2340442+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleReviewPacketPreviewAction_UnsupportedActionRejectedBeforeStoreMutation","Elapsed":0} +{"Time":"2026-07-11T04:02:11.2340442+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRememberDirectiveToolAdvertisedOnlyWhenS4AFlagAndServiceArePresent"} +{"Time":"2026-07-11T04:02:11.2340442+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRememberDirectiveToolAdvertisedOnlyWhenS4AFlagAndServiceArePresent","Output":"=== RUN TestRememberDirectiveToolAdvertisedOnlyWhenS4AFlagAndServiceArePresent\n"} +{"Time":"2026-07-11T04:02:11.2340442+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRememberDirectiveToolAdvertisedOnlyWhenS4AFlagAndServiceArePresent/absent_when_flag_disabled_even_with_service"} +{"Time":"2026-07-11T04:02:11.2340442+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRememberDirectiveToolAdvertisedOnlyWhenS4AFlagAndServiceArePresent/absent_when_flag_disabled_even_with_service","Output":"=== RUN TestRememberDirectiveToolAdvertisedOnlyWhenS4AFlagAndServiceArePresent/absent_when_flag_disabled_even_with_service\n"} +{"Time":"2026-07-11T04:02:11.2340442+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRememberDirectiveToolAdvertisedOnlyWhenS4AFlagAndServiceArePresent/absent_when_flag_disabled_even_with_service","Output":"--- PASS: TestRememberDirectiveToolAdvertisedOnlyWhenS4AFlagAndServiceArePresent/absent_when_flag_disabled_even_with_service (0.00s)\n"} +{"Time":"2026-07-11T04:02:11.2340442+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRememberDirectiveToolAdvertisedOnlyWhenS4AFlagAndServiceArePresent/absent_when_flag_disabled_even_with_service","Elapsed":0} +{"Time":"2026-07-11T04:02:11.2340442+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRememberDirectiveToolAdvertisedOnlyWhenS4AFlagAndServiceArePresent/absent_when_master_flag_disabled_even_if_s4a_flag_and_service_are_present"} +{"Time":"2026-07-11T04:02:11.2340442+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRememberDirectiveToolAdvertisedOnlyWhenS4AFlagAndServiceArePresent/absent_when_master_flag_disabled_even_if_s4a_flag_and_service_are_present","Output":"=== RUN TestRememberDirectiveToolAdvertisedOnlyWhenS4AFlagAndServiceArePresent/absent_when_master_flag_disabled_even_if_s4a_flag_and_service_are_present\n"} +{"Time":"2026-07-11T04:02:11.234544+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRememberDirectiveToolAdvertisedOnlyWhenS4AFlagAndServiceArePresent/absent_when_master_flag_disabled_even_if_s4a_flag_and_service_are_present","Output":"--- PASS: TestRememberDirectiveToolAdvertisedOnlyWhenS4AFlagAndServiceArePresent/absent_when_master_flag_disabled_even_if_s4a_flag_and_service_are_present (0.00s)\n"} +{"Time":"2026-07-11T04:02:11.234544+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRememberDirectiveToolAdvertisedOnlyWhenS4AFlagAndServiceArePresent/absent_when_master_flag_disabled_even_if_s4a_flag_and_service_are_present","Elapsed":0} +{"Time":"2026-07-11T04:02:11.234544+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRememberDirectiveToolAdvertisedOnlyWhenS4AFlagAndServiceArePresent/absent_when_service_is_missing_even_with_flag_enabled"} +{"Time":"2026-07-11T04:02:11.234544+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRememberDirectiveToolAdvertisedOnlyWhenS4AFlagAndServiceArePresent/absent_when_service_is_missing_even_with_flag_enabled","Output":"=== RUN TestRememberDirectiveToolAdvertisedOnlyWhenS4AFlagAndServiceArePresent/absent_when_service_is_missing_even_with_flag_enabled\n"} +{"Time":"2026-07-11T04:02:11.234544+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRememberDirectiveToolAdvertisedOnlyWhenS4AFlagAndServiceArePresent/absent_when_service_is_missing_even_with_flag_enabled","Output":"--- PASS: TestRememberDirectiveToolAdvertisedOnlyWhenS4AFlagAndServiceArePresent/absent_when_service_is_missing_even_with_flag_enabled (0.00s)\n"} +{"Time":"2026-07-11T04:02:11.234544+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRememberDirectiveToolAdvertisedOnlyWhenS4AFlagAndServiceArePresent/absent_when_service_is_missing_even_with_flag_enabled","Elapsed":0} +{"Time":"2026-07-11T04:02:11.234544+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRememberDirectiveToolAdvertisedOnlyWhenS4AFlagAndServiceArePresent/advertised_with_bounded_input_schema_when_flag_and_service_are_present"} +{"Time":"2026-07-11T04:02:11.234544+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRememberDirectiveToolAdvertisedOnlyWhenS4AFlagAndServiceArePresent/advertised_with_bounded_input_schema_when_flag_and_service_are_present","Output":"=== RUN TestRememberDirectiveToolAdvertisedOnlyWhenS4AFlagAndServiceArePresent/advertised_with_bounded_input_schema_when_flag_and_service_are_present\n"} +{"Time":"2026-07-11T04:02:11.234544+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRememberDirectiveToolAdvertisedOnlyWhenS4AFlagAndServiceArePresent/advertised_with_bounded_input_schema_when_flag_and_service_are_present","Output":"--- PASS: TestRememberDirectiveToolAdvertisedOnlyWhenS4AFlagAndServiceArePresent/advertised_with_bounded_input_schema_when_flag_and_service_are_present (0.00s)\n"} +{"Time":"2026-07-11T04:02:11.234544+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRememberDirectiveToolAdvertisedOnlyWhenS4AFlagAndServiceArePresent/advertised_with_bounded_input_schema_when_flag_and_service_are_present","Elapsed":0} +{"Time":"2026-07-11T04:02:11.234544+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRememberDirectiveToolAdvertisedOnlyWhenS4AFlagAndServiceArePresent","Output":"--- PASS: TestRememberDirectiveToolAdvertisedOnlyWhenS4AFlagAndServiceArePresent (0.00s)\n"} +{"Time":"2026-07-11T04:02:11.234544+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRememberDirectiveToolAdvertisedOnlyWhenS4AFlagAndServiceArePresent","Elapsed":0} +{"Time":"2026-07-11T04:02:11.234544+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRememberDirectiveDirectCallFailsClosedBeforeDelegation"} +{"Time":"2026-07-11T04:02:11.234544+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRememberDirectiveDirectCallFailsClosedBeforeDelegation","Output":"=== RUN TestRememberDirectiveDirectCallFailsClosedBeforeDelegation\n"} +{"Time":"2026-07-11T04:02:11.234544+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRememberDirectiveDirectCallFailsClosedBeforeDelegation/flag_disabled"} +{"Time":"2026-07-11T04:02:11.234544+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRememberDirectiveDirectCallFailsClosedBeforeDelegation/flag_disabled","Output":"=== RUN TestRememberDirectiveDirectCallFailsClosedBeforeDelegation/flag_disabled\n"} +{"Time":"2026-07-11T04:02:11.234544+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRememberDirectiveDirectCallFailsClosedBeforeDelegation/flag_disabled","Output":"--- PASS: TestRememberDirectiveDirectCallFailsClosedBeforeDelegation/flag_disabled (0.00s)\n"} +{"Time":"2026-07-11T04:02:11.234544+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRememberDirectiveDirectCallFailsClosedBeforeDelegation/flag_disabled","Elapsed":0} +{"Time":"2026-07-11T04:02:11.234544+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRememberDirectiveDirectCallFailsClosedBeforeDelegation/master_flag_disabled_even_if_s4a_flag_is_enabled"} +{"Time":"2026-07-11T04:02:11.234544+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRememberDirectiveDirectCallFailsClosedBeforeDelegation/master_flag_disabled_even_if_s4a_flag_is_enabled","Output":"=== RUN TestRememberDirectiveDirectCallFailsClosedBeforeDelegation/master_flag_disabled_even_if_s4a_flag_is_enabled\n"} +{"Time":"2026-07-11T04:02:11.234544+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRememberDirectiveDirectCallFailsClosedBeforeDelegation/master_flag_disabled_even_if_s4a_flag_is_enabled","Output":"--- PASS: TestRememberDirectiveDirectCallFailsClosedBeforeDelegation/master_flag_disabled_even_if_s4a_flag_is_enabled (0.00s)\n"} +{"Time":"2026-07-11T04:02:11.234544+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRememberDirectiveDirectCallFailsClosedBeforeDelegation/master_flag_disabled_even_if_s4a_flag_is_enabled","Elapsed":0} +{"Time":"2026-07-11T04:02:11.234544+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRememberDirectiveDirectCallFailsClosedBeforeDelegation/service_missing"} +{"Time":"2026-07-11T04:02:11.234544+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRememberDirectiveDirectCallFailsClosedBeforeDelegation/service_missing","Output":"=== RUN TestRememberDirectiveDirectCallFailsClosedBeforeDelegation/service_missing\n"} +{"Time":"2026-07-11T04:02:11.2350443+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRememberDirectiveDirectCallFailsClosedBeforeDelegation/service_missing","Output":"--- PASS: TestRememberDirectiveDirectCallFailsClosedBeforeDelegation/service_missing (0.00s)\n"} +{"Time":"2026-07-11T04:02:11.2350443+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRememberDirectiveDirectCallFailsClosedBeforeDelegation/service_missing","Elapsed":0} +{"Time":"2026-07-11T04:02:11.2350443+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRememberDirectiveDirectCallFailsClosedBeforeDelegation/project_context_missing"} +{"Time":"2026-07-11T04:02:11.2350443+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRememberDirectiveDirectCallFailsClosedBeforeDelegation/project_context_missing","Output":"=== RUN TestRememberDirectiveDirectCallFailsClosedBeforeDelegation/project_context_missing\n"} +{"Time":"2026-07-11T04:02:11.2350443+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRememberDirectiveDirectCallFailsClosedBeforeDelegation/project_context_missing","Output":"--- PASS: TestRememberDirectiveDirectCallFailsClosedBeforeDelegation/project_context_missing (0.00s)\n"} +{"Time":"2026-07-11T04:02:11.2350443+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRememberDirectiveDirectCallFailsClosedBeforeDelegation/project_context_missing","Elapsed":0} +{"Time":"2026-07-11T04:02:11.2350443+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRememberDirectiveDirectCallFailsClosedBeforeDelegation/session_context_missing"} +{"Time":"2026-07-11T04:02:11.2350443+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRememberDirectiveDirectCallFailsClosedBeforeDelegation/session_context_missing","Output":"=== RUN TestRememberDirectiveDirectCallFailsClosedBeforeDelegation/session_context_missing\n"} +{"Time":"2026-07-11T04:02:11.2350443+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRememberDirectiveDirectCallFailsClosedBeforeDelegation/session_context_missing","Output":"--- PASS: TestRememberDirectiveDirectCallFailsClosedBeforeDelegation/session_context_missing (0.00s)\n"} +{"Time":"2026-07-11T04:02:11.2350443+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRememberDirectiveDirectCallFailsClosedBeforeDelegation/session_context_missing","Elapsed":0} +{"Time":"2026-07-11T04:02:11.2350443+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRememberDirectiveDirectCallFailsClosedBeforeDelegation","Output":"--- PASS: TestRememberDirectiveDirectCallFailsClosedBeforeDelegation (0.00s)\n"} +{"Time":"2026-07-11T04:02:11.2350443+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRememberDirectiveDirectCallFailsClosedBeforeDelegation","Elapsed":0} +{"Time":"2026-07-11T04:02:11.2350443+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRememberDirectiveDirectCallDelegatesContextAndReturnsSanitizedRecord"} +{"Time":"2026-07-11T04:02:11.2350443+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRememberDirectiveDirectCallDelegatesContextAndReturnsSanitizedRecord","Output":"=== RUN TestRememberDirectiveDirectCallDelegatesContextAndReturnsSanitizedRecord\n"} +{"Time":"2026-07-11T04:02:11.2350443+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRememberDirectiveDirectCallDelegatesContextAndReturnsSanitizedRecord","Output":"--- PASS: TestRememberDirectiveDirectCallDelegatesContextAndReturnsSanitizedRecord (0.00s)\n"} +{"Time":"2026-07-11T04:02:11.2350443+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRememberDirectiveDirectCallDelegatesContextAndReturnsSanitizedRecord","Elapsed":0} +{"Time":"2026-07-11T04:02:11.2350443+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemory_DryRun_NilStore"} +{"Time":"2026-07-11T04:02:11.2350443+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemory_DryRun_NilStore","Output":"=== RUN TestStoreMemory_DryRun_NilStore\n"} +{"Time":"2026-07-11T04:02:11.2350443+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemory_DryRun_NilStore","Output":"--- PASS: TestStoreMemory_DryRun_NilStore (0.00s)\n"} +{"Time":"2026-07-11T04:02:11.2350443+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemory_DryRun_NilStore","Elapsed":0} +{"Time":"2026-07-11T04:02:11.2350443+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemory_DryRun_RequiresContent"} +{"Time":"2026-07-11T04:02:11.2350443+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemory_DryRun_RequiresContent","Output":"=== RUN TestStoreMemory_DryRun_RequiresContent\n"} +{"Time":"2026-07-11T04:02:11.2350443+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemory_DryRun_RequiresContent","Output":"--- PASS: TestStoreMemory_DryRun_RequiresContent (0.00s)\n"} +{"Time":"2026-07-11T04:02:11.2350443+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemory_DryRun_RequiresContent","Elapsed":0} +{"Time":"2026-07-11T04:02:11.2350443+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestPromoteCandidate_DryRun_NilStore"} +{"Time":"2026-07-11T04:02:11.2350443+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestPromoteCandidate_DryRun_NilStore","Output":"=== RUN TestPromoteCandidate_DryRun_NilStore\n"} +{"Time":"2026-07-11T04:02:11.2350443+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestPromoteCandidate_DryRun_NilStore","Output":"--- PASS: TestPromoteCandidate_DryRun_NilStore (0.00s)\n"} +{"Time":"2026-07-11T04:02:11.2350443+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestPromoteCandidate_DryRun_NilStore","Elapsed":0} +{"Time":"2026-07-11T04:02:11.2350443+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestBulkPromote_DryRun_NilFacade"} +{"Time":"2026-07-11T04:02:11.2350443+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestBulkPromote_DryRun_NilFacade","Output":"=== RUN TestBulkPromote_DryRun_NilFacade\n"} +{"Time":"2026-07-11T04:02:11.2350443+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestBulkPromote_DryRun_NilFacade","Output":"--- PASS: TestBulkPromote_DryRun_NilFacade (0.00s)\n"} +{"Time":"2026-07-11T04:02:11.2350443+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestBulkPromote_DryRun_NilFacade","Elapsed":0} +{"Time":"2026-07-11T04:02:11.2350443+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestBulkDelete_DryRun_NilFacade"} +{"Time":"2026-07-11T04:02:11.2350443+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestBulkDelete_DryRun_NilFacade","Output":"=== RUN TestBulkDelete_DryRun_NilFacade\n"} +{"Time":"2026-07-11T04:02:11.2350443+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestBulkDelete_DryRun_NilFacade","Output":"--- PASS: TestBulkDelete_DryRun_NilFacade (0.00s)\n"} +{"Time":"2026-07-11T04:02:11.2350443+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestBulkDelete_DryRun_NilFacade","Elapsed":0} +{"Time":"2026-07-11T04:02:11.2350443+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestBulkSupersede_DryRun_NilFacade"} +{"Time":"2026-07-11T04:02:11.2350443+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestBulkSupersede_DryRun_NilFacade","Output":"=== RUN TestBulkSupersede_DryRun_NilFacade\n"} +{"Time":"2026-07-11T04:02:11.2350443+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestBulkSupersede_DryRun_NilFacade","Output":"--- PASS: TestBulkSupersede_DryRun_NilFacade (0.00s)\n"} +{"Time":"2026-07-11T04:02:11.2355452+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestBulkSupersede_DryRun_NilFacade","Elapsed":0} +{"Time":"2026-07-11T04:02:11.2355452+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestBulkPromote_NonAdmin_ReturnsAdminRequired"} +{"Time":"2026-07-11T04:02:11.2355452+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestBulkPromote_NonAdmin_ReturnsAdminRequired","Output":"=== RUN TestBulkPromote_NonAdmin_ReturnsAdminRequired\n"} +{"Time":"2026-07-11T04:02:11.2355452+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestBulkPromote_NonAdmin_ReturnsAdminRequired","Output":"--- PASS: TestBulkPromote_NonAdmin_ReturnsAdminRequired (0.00s)\n"} +{"Time":"2026-07-11T04:02:11.2355452+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestBulkPromote_NonAdmin_ReturnsAdminRequired","Elapsed":0} +{"Time":"2026-07-11T04:02:11.2355452+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestBulkOps_FlagOff_NotAdvertised"} +{"Time":"2026-07-11T04:02:11.2355452+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestBulkOps_FlagOff_NotAdvertised","Output":"=== RUN TestBulkOps_FlagOff_NotAdvertised\n"} +{"Time":"2026-07-11T04:02:11.2355452+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestBulkOps_FlagOff_NotAdvertised","Output":"--- PASS: TestBulkOps_FlagOff_NotAdvertised (0.00s)\n"} +{"Time":"2026-07-11T04:02:11.2355452+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestBulkOps_FlagOff_NotAdvertised","Elapsed":0} +{"Time":"2026-07-11T04:02:11.2355452+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestDryRun_Integration_StoreMemory_ZeroSideEffects"} +{"Time":"2026-07-11T04:02:11.2355452+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestDryRun_Integration_StoreMemory_ZeroSideEffects","Output":"=== RUN TestDryRun_Integration_StoreMemory_ZeroSideEffects\n"} +{"Time":"2026-07-11T04:02:11.3517081+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestDryRun_Integration_StoreMemory_ZeroSideEffects","Output":"{\"level\":\"debug\",\"connections\":5,\"time\":\"2026-07-11T04:02:11+03:00\",\"message\":\"Connection pool warmed\"}\n"} +{"Time":"2026-07-11T04:02:11.3577096+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestDryRun_Integration_StoreMemory_ZeroSideEffects","Output":"--- PASS: TestDryRun_Integration_StoreMemory_ZeroSideEffects (0.12s)\n"} +{"Time":"2026-07-11T04:02:11.3582082+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestDryRun_Integration_StoreMemory_ZeroSideEffects","Elapsed":0.12} +{"Time":"2026-07-11T04:02:11.3582082+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestExperienceHistoryToolsAdvertisedWhenProviderWired"} +{"Time":"2026-07-11T04:02:11.3582082+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestExperienceHistoryToolsAdvertisedWhenProviderWired","Output":"=== RUN TestExperienceHistoryToolsAdvertisedWhenProviderWired\n"} +{"Time":"2026-07-11T04:02:11.3582082+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestExperienceHistoryToolsAdvertisedWhenProviderWired","Output":"--- PASS: TestExperienceHistoryToolsAdvertisedWhenProviderWired (0.00s)\n"} +{"Time":"2026-07-11T04:02:11.3582082+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestExperienceHistoryToolsAdvertisedWhenProviderWired","Elapsed":0} +{"Time":"2026-07-11T04:02:11.3587081+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleExperienceHistoryReadReturnsBlockedApplicabilityEnvelope"} +{"Time":"2026-07-11T04:02:11.3587081+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleExperienceHistoryReadReturnsBlockedApplicabilityEnvelope","Output":"=== RUN TestHandleExperienceHistoryReadReturnsBlockedApplicabilityEnvelope\n"} +{"Time":"2026-07-11T04:02:11.3592079+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleExperienceHistoryReadReturnsBlockedApplicabilityEnvelope","Output":"--- PASS: TestHandleExperienceHistoryReadReturnsBlockedApplicabilityEnvelope (0.00s)\n"} +{"Time":"2026-07-11T04:02:11.3592079+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleExperienceHistoryReadReturnsBlockedApplicabilityEnvelope","Elapsed":0} +{"Time":"2026-07-11T04:02:11.3592079+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleExperienceHistoryReadRejectsInvalidArchiveTrigger"} +{"Time":"2026-07-11T04:02:11.3592079+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleExperienceHistoryReadRejectsInvalidArchiveTrigger","Output":"=== RUN TestHandleExperienceHistoryReadRejectsInvalidArchiveTrigger\n"} +{"Time":"2026-07-11T04:02:11.3597099+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleExperienceHistoryReadRejectsInvalidArchiveTrigger","Output":"--- PASS: TestHandleExperienceHistoryReadRejectsInvalidArchiveTrigger (0.00s)\n"} +{"Time":"2026-07-11T04:02:11.3597099+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleExperienceHistoryReadRejectsInvalidArchiveTrigger","Elapsed":0} +{"Time":"2026-07-11T04:02:11.3597099+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGovernanceTools_NotAdvertisedWhenFlagOff"} +{"Time":"2026-07-11T04:02:11.3597099+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGovernanceTools_NotAdvertisedWhenFlagOff","Output":"=== RUN TestGovernanceTools_NotAdvertisedWhenFlagOff\n"} +{"Time":"2026-07-11T04:02:11.3597099+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGovernanceTools_NotAdvertisedWhenFlagOff","Output":"--- PASS: TestGovernanceTools_NotAdvertisedWhenFlagOff (0.00s)\n"} +{"Time":"2026-07-11T04:02:11.3597099+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGovernanceTools_NotAdvertisedWhenFlagOff","Elapsed":0} +{"Time":"2026-07-11T04:02:11.3597099+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGovernanceTools_AdminGate_NoIdentity"} +{"Time":"2026-07-11T04:02:11.3597099+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGovernanceTools_AdminGate_NoIdentity","Output":"=== RUN TestGovernanceTools_AdminGate_NoIdentity\n"} +{"Time":"2026-07-11T04:02:11.365708+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGovernanceTools_AdminGate_NoIdentity/list_snapshots"} +{"Time":"2026-07-11T04:02:11.365708+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGovernanceTools_AdminGate_NoIdentity/list_snapshots","Output":"=== RUN TestGovernanceTools_AdminGate_NoIdentity/list_snapshots\n"} +{"Time":"2026-07-11T04:02:11.3662068+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGovernanceTools_AdminGate_NoIdentity/list_snapshots","Output":"--- PASS: TestGovernanceTools_AdminGate_NoIdentity/list_snapshots (0.00s)\n"} +{"Time":"2026-07-11T04:02:11.3662068+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGovernanceTools_AdminGate_NoIdentity/list_snapshots","Elapsed":0} +{"Time":"2026-07-11T04:02:11.3662068+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGovernanceTools_AdminGate_NoIdentity/rollback_snapshot"} +{"Time":"2026-07-11T04:02:11.3662068+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGovernanceTools_AdminGate_NoIdentity/rollback_snapshot","Output":"=== RUN TestGovernanceTools_AdminGate_NoIdentity/rollback_snapshot\n"} +{"Time":"2026-07-11T04:02:11.3662068+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGovernanceTools_AdminGate_NoIdentity/rollback_snapshot","Output":"--- PASS: TestGovernanceTools_AdminGate_NoIdentity/rollback_snapshot (0.00s)\n"} +{"Time":"2026-07-11T04:02:11.3662068+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGovernanceTools_AdminGate_NoIdentity/rollback_snapshot","Elapsed":0} +{"Time":"2026-07-11T04:02:11.3662068+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGovernanceTools_AdminGate_NoIdentity/pin_snapshot"} +{"Time":"2026-07-11T04:02:11.3662068+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGovernanceTools_AdminGate_NoIdentity/pin_snapshot","Output":"=== RUN TestGovernanceTools_AdminGate_NoIdentity/pin_snapshot\n"} +{"Time":"2026-07-11T04:02:11.3662068+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGovernanceTools_AdminGate_NoIdentity/pin_snapshot","Output":"--- PASS: TestGovernanceTools_AdminGate_NoIdentity/pin_snapshot (0.00s)\n"} +{"Time":"2026-07-11T04:02:11.3662068+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGovernanceTools_AdminGate_NoIdentity/pin_snapshot","Elapsed":0} +{"Time":"2026-07-11T04:02:11.3662068+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGovernanceTools_AdminGate_NoIdentity/redaction_rules_status"} +{"Time":"2026-07-11T04:02:11.3662068+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGovernanceTools_AdminGate_NoIdentity/redaction_rules_status","Output":"=== RUN TestGovernanceTools_AdminGate_NoIdentity/redaction_rules_status\n"} +{"Time":"2026-07-11T04:02:11.3662068+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGovernanceTools_AdminGate_NoIdentity/redaction_rules_status","Output":"--- PASS: TestGovernanceTools_AdminGate_NoIdentity/redaction_rules_status (0.00s)\n"} +{"Time":"2026-07-11T04:02:11.3662068+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGovernanceTools_AdminGate_NoIdentity/redaction_rules_status","Elapsed":0} +{"Time":"2026-07-11T04:02:11.3662068+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGovernanceTools_AdminGate_NoIdentity","Output":"--- PASS: TestGovernanceTools_AdminGate_NoIdentity (0.01s)\n"} +{"Time":"2026-07-11T04:02:11.3662068+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGovernanceTools_AdminGate_NoIdentity","Elapsed":0.01} +{"Time":"2026-07-11T04:02:11.3662068+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGovernanceTools_AdminGate_ReadOnlyCaller"} +{"Time":"2026-07-11T04:02:11.3662068+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGovernanceTools_AdminGate_ReadOnlyCaller","Output":"=== RUN TestGovernanceTools_AdminGate_ReadOnlyCaller\n"} +{"Time":"2026-07-11T04:02:11.3717107+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGovernanceTools_AdminGate_ReadOnlyCaller","Output":"--- PASS: TestGovernanceTools_AdminGate_ReadOnlyCaller (0.01s)\n"} +{"Time":"2026-07-11T04:02:11.3717107+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGovernanceTools_AdminGate_ReadOnlyCaller","Elapsed":0.01} +{"Time":"2026-07-11T04:02:11.3717107+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGovernanceTools_RedactionRulesStatus_NoAdminRequired_WithAdmin"} +{"Time":"2026-07-11T04:02:11.3717107+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGovernanceTools_RedactionRulesStatus_NoAdminRequired_WithAdmin","Output":"=== RUN TestGovernanceTools_RedactionRulesStatus_NoAdminRequired_WithAdmin\n"} +{"Time":"2026-07-11T04:02:11.3717107+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGovernanceTools_RedactionRulesStatus_NoAdminRequired_WithAdmin","Output":"--- PASS: TestGovernanceTools_RedactionRulesStatus_NoAdminRequired_WithAdmin (0.00s)\n"} +{"Time":"2026-07-11T04:02:11.3722082+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGovernanceTools_RedactionRulesStatus_NoAdminRequired_WithAdmin","Elapsed":0} +{"Time":"2026-07-11T04:02:11.3722082+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGovernanceTools_ListSnapshotsSchemaIncludesReviewActionOpTypes"} +{"Time":"2026-07-11T04:02:11.3722082+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGovernanceTools_ListSnapshotsSchemaIncludesReviewActionOpTypes","Output":"=== RUN TestGovernanceTools_ListSnapshotsSchemaIncludesReviewActionOpTypes\n"} +{"Time":"2026-07-11T04:02:11.3722082+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGovernanceTools_ListSnapshotsSchemaIncludesReviewActionOpTypes","Output":"--- PASS: TestGovernanceTools_ListSnapshotsSchemaIncludesReviewActionOpTypes (0.00s)\n"} +{"Time":"2026-07-11T04:02:11.3722082+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGovernanceTools_ListSnapshotsSchemaIncludesReviewActionOpTypes","Elapsed":0} +{"Time":"2026-07-11T04:02:11.3722082+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGraphTool_T014_ArgsShape"} +{"Time":"2026-07-11T04:02:11.3722082+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGraphTool_T014_ArgsShape","Output":"=== RUN TestGraphTool_T014_ArgsShape\n"} +{"Time":"2026-07-11T04:02:11.3722082+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGraphTool_T014_ArgsShape","Output":"--- PASS: TestGraphTool_T014_ArgsShape (0.00s)\n"} +{"Time":"2026-07-11T04:02:11.3722082+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGraphTool_T014_ArgsShape","Elapsed":0} +{"Time":"2026-07-11T04:02:11.3722082+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGraphTool_T014_AddNodeAction"} +{"Time":"2026-07-11T04:02:11.3722082+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGraphTool_T014_AddNodeAction","Output":"=== RUN TestGraphTool_T014_AddNodeAction\n"} +{"Time":"2026-07-11T04:02:11.3722082+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGraphTool_T014_AddNodeAction","Output":"--- PASS: TestGraphTool_T014_AddNodeAction (0.00s)\n"} +{"Time":"2026-07-11T04:02:11.3722082+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGraphTool_T014_AddNodeAction","Elapsed":0} +{"Time":"2026-07-11T04:02:11.3722082+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGraphTool_T014_GetEdgesNodeTypeFilter"} +{"Time":"2026-07-11T04:02:11.3722082+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGraphTool_T014_GetEdgesNodeTypeFilter","Output":"=== RUN TestGraphTool_T014_GetEdgesNodeTypeFilter\n"} +{"Time":"2026-07-11T04:02:11.3722082+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGraphTool_T014_GetEdgesNodeTypeFilter","Output":"--- PASS: TestGraphTool_T014_GetEdgesNodeTypeFilter (0.00s)\n"} +{"Time":"2026-07-11T04:02:11.3722082+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGraphTool_T014_GetEdgesNodeTypeFilter","Elapsed":0} +{"Time":"2026-07-11T04:02:11.3722082+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGraphTool_T014_InvalidNodeTypeRejects"} +{"Time":"2026-07-11T04:02:11.3722082+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGraphTool_T014_InvalidNodeTypeRejects","Output":"=== RUN TestGraphTool_T014_InvalidNodeTypeRejects\n"} +{"Time":"2026-07-11T04:02:11.3722082+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGraphTool_T014_InvalidNodeTypeRejects","Output":"--- PASS: TestGraphTool_T014_InvalidNodeTypeRejects (0.00s)\n"} +{"Time":"2026-07-11T04:02:11.3722082+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGraphTool_T014_InvalidNodeTypeRejects","Elapsed":0} +{"Time":"2026-07-11T04:02:11.3722082+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGraphTool_T014_NodeTypeFilterOffline"} +{"Time":"2026-07-11T04:02:11.3722082+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGraphTool_T014_NodeTypeFilterOffline","Output":"=== RUN TestGraphTool_T014_NodeTypeFilterOffline\n"} +{"Time":"2026-07-11T04:02:11.3722082+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGraphTool_T014_NodeTypeFilterOffline","Output":"--- PASS: TestGraphTool_T014_NodeTypeFilterOffline (0.00s)\n"} +{"Time":"2026-07-11T04:02:11.3722082+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGraphTool_T014_NodeTypeFilterOffline","Elapsed":0} +{"Time":"2026-07-11T04:02:11.3722082+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGraphTool_T014_AddNodeOffline"} +{"Time":"2026-07-11T04:02:11.3722082+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGraphTool_T014_AddNodeOffline","Output":"=== RUN TestGraphTool_T014_AddNodeOffline\n"} +{"Time":"2026-07-11T04:02:11.3722082+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGraphTool_T014_AddNodeOffline/invalid_node_type_returns_error_containing_invalid_node_type:"} +{"Time":"2026-07-11T04:02:11.3722082+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGraphTool_T014_AddNodeOffline/invalid_node_type_returns_error_containing_invalid_node_type:","Output":"=== RUN TestGraphTool_T014_AddNodeOffline/invalid_node_type_returns_error_containing_invalid_node_type:\n"} +{"Time":"2026-07-11T04:02:11.3722082+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGraphTool_T014_AddNodeOffline/invalid_node_type_returns_error_containing_invalid_node_type:","Output":"--- PASS: TestGraphTool_T014_AddNodeOffline/invalid_node_type_returns_error_containing_invalid_node_type: (0.00s)\n"} +{"Time":"2026-07-11T04:02:11.3722082+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGraphTool_T014_AddNodeOffline/invalid_node_type_returns_error_containing_invalid_node_type:","Elapsed":0} +{"Time":"2026-07-11T04:02:11.3722082+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGraphTool_T014_AddNodeOffline/empty_external_ref_returns_error"} +{"Time":"2026-07-11T04:02:11.3722082+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGraphTool_T014_AddNodeOffline/empty_external_ref_returns_error","Output":"=== RUN TestGraphTool_T014_AddNodeOffline/empty_external_ref_returns_error\n"} +{"Time":"2026-07-11T04:02:11.3722082+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGraphTool_T014_AddNodeOffline/empty_external_ref_returns_error","Output":"--- PASS: TestGraphTool_T014_AddNodeOffline/empty_external_ref_returns_error (0.00s)\n"} +{"Time":"2026-07-11T04:02:11.3722082+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGraphTool_T014_AddNodeOffline/empty_external_ref_returns_error","Elapsed":0} +{"Time":"2026-07-11T04:02:11.3722082+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGraphTool_T014_AddNodeOffline/empty_project_returns_error"} +{"Time":"2026-07-11T04:02:11.3722082+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGraphTool_T014_AddNodeOffline/empty_project_returns_error","Output":"=== RUN TestGraphTool_T014_AddNodeOffline/empty_project_returns_error\n"} +{"Time":"2026-07-11T04:02:11.3722082+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGraphTool_T014_AddNodeOffline/empty_project_returns_error","Output":"--- PASS: TestGraphTool_T014_AddNodeOffline/empty_project_returns_error (0.00s)\n"} +{"Time":"2026-07-11T04:02:11.3722082+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGraphTool_T014_AddNodeOffline/empty_project_returns_error","Elapsed":0} +{"Time":"2026-07-11T04:02:11.3722082+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGraphTool_T014_AddNodeOffline/valid_input_store_receives_correct_node"} +{"Time":"2026-07-11T04:02:11.3722082+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGraphTool_T014_AddNodeOffline/valid_input_store_receives_correct_node","Output":"=== RUN TestGraphTool_T014_AddNodeOffline/valid_input_store_receives_correct_node\n"} +{"Time":"2026-07-11T04:02:11.3722082+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGraphTool_T014_AddNodeOffline/valid_input_store_receives_correct_node","Output":"--- PASS: TestGraphTool_T014_AddNodeOffline/valid_input_store_receives_correct_node (0.00s)\n"} +{"Time":"2026-07-11T04:02:11.3722082+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGraphTool_T014_AddNodeOffline/valid_input_store_receives_correct_node","Elapsed":0} +{"Time":"2026-07-11T04:02:11.3722082+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGraphTool_T014_AddNodeOffline","Output":"--- PASS: TestGraphTool_T014_AddNodeOffline (0.00s)\n"} +{"Time":"2026-07-11T04:02:11.3722082+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGraphTool_T014_AddNodeOffline","Elapsed":0} +{"Time":"2026-07-11T04:02:11.3722082+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGraphTool_T014_AddEdgeGuardsOffline"} +{"Time":"2026-07-11T04:02:11.3722082+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGraphTool_T014_AddEdgeGuardsOffline","Output":"=== RUN TestGraphTool_T014_AddEdgeGuardsOffline\n"} +{"Time":"2026-07-11T04:02:11.3722082+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGraphTool_T014_AddEdgeGuardsOffline/duplicate_edge_rejected_before_create"} +{"Time":"2026-07-11T04:02:11.3722082+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGraphTool_T014_AddEdgeGuardsOffline/duplicate_edge_rejected_before_create","Output":"=== RUN TestGraphTool_T014_AddEdgeGuardsOffline/duplicate_edge_rejected_before_create\n"} +{"Time":"2026-07-11T04:02:11.3722082+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGraphTool_T014_AddEdgeGuardsOffline/duplicate_edge_rejected_before_create","Output":"--- PASS: TestGraphTool_T014_AddEdgeGuardsOffline/duplicate_edge_rejected_before_create (0.00s)\n"} +{"Time":"2026-07-11T04:02:11.3722082+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGraphTool_T014_AddEdgeGuardsOffline/duplicate_edge_rejected_before_create","Elapsed":0} +{"Time":"2026-07-11T04:02:11.3722082+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGraphTool_T014_AddEdgeGuardsOffline/orphan_edge_rejected_before_create"} +{"Time":"2026-07-11T04:02:11.3722082+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGraphTool_T014_AddEdgeGuardsOffline/orphan_edge_rejected_before_create","Output":"=== RUN TestGraphTool_T014_AddEdgeGuardsOffline/orphan_edge_rejected_before_create\n"} +{"Time":"2026-07-11T04:02:11.3722082+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGraphTool_T014_AddEdgeGuardsOffline/orphan_edge_rejected_before_create","Output":"--- PASS: TestGraphTool_T014_AddEdgeGuardsOffline/orphan_edge_rejected_before_create (0.00s)\n"} +{"Time":"2026-07-11T04:02:11.3722082+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGraphTool_T014_AddEdgeGuardsOffline/orphan_edge_rejected_before_create","Elapsed":0} +{"Time":"2026-07-11T04:02:11.3722082+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGraphTool_T014_AddEdgeGuardsOffline/memory_orphan_edge_rejected_before_create"} +{"Time":"2026-07-11T04:02:11.3722082+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGraphTool_T014_AddEdgeGuardsOffline/memory_orphan_edge_rejected_before_create","Output":"=== RUN TestGraphTool_T014_AddEdgeGuardsOffline/memory_orphan_edge_rejected_before_create\n"} +{"Time":"2026-07-11T04:02:11.3722082+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGraphTool_T014_AddEdgeGuardsOffline/memory_orphan_edge_rejected_before_create","Output":"--- PASS: TestGraphTool_T014_AddEdgeGuardsOffline/memory_orphan_edge_rejected_before_create (0.00s)\n"} +{"Time":"2026-07-11T04:02:11.3722082+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGraphTool_T014_AddEdgeGuardsOffline/memory_orphan_edge_rejected_before_create","Elapsed":0} +{"Time":"2026-07-11T04:02:11.3722082+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGraphTool_T014_AddEdgeGuardsOffline/valid_edge_creates_exactly_once"} +{"Time":"2026-07-11T04:02:11.3722082+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGraphTool_T014_AddEdgeGuardsOffline/valid_edge_creates_exactly_once","Output":"=== RUN TestGraphTool_T014_AddEdgeGuardsOffline/valid_edge_creates_exactly_once\n"} +{"Time":"2026-07-11T04:02:11.3722082+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGraphTool_T014_AddEdgeGuardsOffline/valid_edge_creates_exactly_once","Output":"--- PASS: TestGraphTool_T014_AddEdgeGuardsOffline/valid_edge_creates_exactly_once (0.00s)\n"} +{"Time":"2026-07-11T04:02:11.3722082+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGraphTool_T014_AddEdgeGuardsOffline/valid_edge_creates_exactly_once","Elapsed":0} +{"Time":"2026-07-11T04:02:11.3722082+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGraphTool_T014_AddEdgeGuardsOffline","Output":"--- PASS: TestGraphTool_T014_AddEdgeGuardsOffline (0.00s)\n"} +{"Time":"2026-07-11T04:02:11.3722082+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGraphTool_T014_AddEdgeGuardsOffline","Elapsed":0} +{"Time":"2026-07-11T04:02:11.3722082+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleIssueCloseAcceptsExplicitLegacySourceProject"} +{"Time":"2026-07-11T04:02:11.3722082+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleIssueCloseAcceptsExplicitLegacySourceProject","Output":"=== RUN TestHandleIssueCloseAcceptsExplicitLegacySourceProject\n"} +{"Time":"2026-07-11T04:02:11.4914217+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleIssueCloseAcceptsExplicitLegacySourceProject","Output":"{\"level\":\"debug\",\"connections\":5,\"time\":\"2026-07-11T04:02:11+03:00\",\"message\":\"Connection pool warmed\"}\n"} +{"Time":"2026-07-11T04:02:11.525098+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleIssueCloseAcceptsExplicitLegacySourceProject","Output":"--- PASS: TestHandleIssueCloseAcceptsExplicitLegacySourceProject (0.15s)\n"} +{"Time":"2026-07-11T04:02:11.525098+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleIssueCloseAcceptsExplicitLegacySourceProject","Elapsed":0.15} +{"Time":"2026-07-11T04:02:11.525098+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleIssueCloseDoesNotLetExplicitDashboardBypassContext"} +{"Time":"2026-07-11T04:02:11.525098+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleIssueCloseDoesNotLetExplicitDashboardBypassContext","Output":"=== RUN TestHandleIssueCloseDoesNotLetExplicitDashboardBypassContext\n"} +{"Time":"2026-07-11T04:02:11.637786+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleIssueCloseDoesNotLetExplicitDashboardBypassContext","Output":"{\"level\":\"debug\",\"connections\":5,\"time\":\"2026-07-11T04:02:11+03:00\",\"message\":\"Connection pool warmed\"}\n"} +{"Time":"2026-07-11T04:02:11.6662912+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleIssueCloseDoesNotLetExplicitDashboardBypassContext","Output":"--- PASS: TestHandleIssueCloseDoesNotLetExplicitDashboardBypassContext (0.14s)\n"} +{"Time":"2026-07-11T04:02:11.6662912+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleIssueCloseDoesNotLetExplicitDashboardBypassContext","Elapsed":0.14} +{"Time":"2026-07-11T04:02:11.6662912+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAuditCreate_LogCalledOnSuccess"} +{"Time":"2026-07-11T04:02:11.6662912+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAuditCreate_LogCalledOnSuccess","Output":"=== RUN TestAuditCreate_LogCalledOnSuccess\n"} +{"Time":"2026-07-11T04:02:11.6717913+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAuditCreate_LogCalledOnSuccess","Output":"--- PASS: TestAuditCreate_LogCalledOnSuccess (0.01s)\n"} +{"Time":"2026-07-11T04:02:11.6717913+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAuditCreate_LogCalledOnSuccess","Elapsed":0.01} +{"Time":"2026-07-11T04:02:11.6717913+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAuditCreate_SkippedWhenFlagOff"} +{"Time":"2026-07-11T04:02:11.6717913+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAuditCreate_SkippedWhenFlagOff","Output":"=== RUN TestAuditCreate_SkippedWhenFlagOff\n"} +{"Time":"2026-07-11T04:02:11.7023671+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAuditCreate_SkippedWhenFlagOff","Output":"--- PASS: TestAuditCreate_SkippedWhenFlagOff (0.03s)\n"} +{"Time":"2026-07-11T04:02:11.7023671+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAuditCreate_SkippedWhenFlagOff","Elapsed":0.03} +{"Time":"2026-07-11T04:02:11.7023671+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAuditCreate_SkippedWhenAuditStoreNil"} +{"Time":"2026-07-11T04:02:11.7023671+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAuditCreate_SkippedWhenAuditStoreNil","Output":"=== RUN TestAuditCreate_SkippedWhenAuditStoreNil\n"} +{"Time":"2026-07-11T04:02:11.7128673+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAuditCreate_SkippedWhenAuditStoreNil","Output":"--- PASS: TestAuditCreate_SkippedWhenAuditStoreNil (0.01s)\n"} +{"Time":"2026-07-11T04:02:11.7128673+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAuditCreate_SkippedWhenAuditStoreNil","Elapsed":0.01} +{"Time":"2026-07-11T04:02:11.7128673+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAuditEdit_LogCalledWithBeforeAndAfterState"} +{"Time":"2026-07-11T04:02:11.7128673+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAuditEdit_LogCalledWithBeforeAndAfterState","Output":"=== RUN TestAuditEdit_LogCalledWithBeforeAndAfterState\n"} +{"Time":"2026-07-11T04:02:11.718367+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAuditEdit_LogCalledWithBeforeAndAfterState","Output":"--- PASS: TestAuditEdit_LogCalledWithBeforeAndAfterState (0.01s)\n"} +{"Time":"2026-07-11T04:02:11.718367+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAuditEdit_LogCalledWithBeforeAndAfterState","Elapsed":0.01} +{"Time":"2026-07-11T04:02:11.718367+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAuditDelete_LogCalledWithBeforeState"} +{"Time":"2026-07-11T04:02:11.718367+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAuditDelete_LogCalledWithBeforeState","Output":"=== RUN TestAuditDelete_LogCalledWithBeforeState\n"} +{"Time":"2026-07-11T04:02:11.7238673+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAuditDelete_LogCalledWithBeforeState","Output":"--- PASS: TestAuditDelete_LogCalledWithBeforeState (0.01s)\n"} +{"Time":"2026-07-11T04:02:11.7238673+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAuditDelete_LogCalledWithBeforeState","Elapsed":0.01} +{"Time":"2026-07-11T04:02:11.7238673+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAuditSupersede_LogCalledWithSupersededID"} +{"Time":"2026-07-11T04:02:11.7238673+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAuditSupersede_LogCalledWithSupersededID","Output":"=== RUN TestAuditSupersede_LogCalledWithSupersededID\n"} +{"Time":"2026-07-11T04:02:11.7292449+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAuditSupersede_LogCalledWithSupersededID","Output":"--- PASS: TestAuditSupersede_LogCalledWithSupersededID (0.01s)\n"} +{"Time":"2026-07-11T04:02:11.7292449+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAuditSupersede_LogCalledWithSupersededID","Elapsed":0.01} +{"Time":"2026-07-11T04:02:11.7292449+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAuditEdit_SkippedWhenFlagOff"} +{"Time":"2026-07-11T04:02:11.7292449+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAuditEdit_SkippedWhenFlagOff","Output":"=== RUN TestAuditEdit_SkippedWhenFlagOff\n"} +{"Time":"2026-07-11T04:02:11.7598302+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAuditEdit_SkippedWhenFlagOff","Output":"--- PASS: TestAuditEdit_SkippedWhenFlagOff (0.03s)\n"} +{"Time":"2026-07-11T04:02:11.7598302+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAuditEdit_SkippedWhenFlagOff","Elapsed":0.03} +{"Time":"2026-07-11T04:02:11.7598302+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAuditDelete_SkippedWhenFlagOff"} +{"Time":"2026-07-11T04:02:11.7598302+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAuditDelete_SkippedWhenFlagOff","Output":"=== RUN TestAuditDelete_SkippedWhenFlagOff\n"} +{"Time":"2026-07-11T04:02:11.7901331+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAuditDelete_SkippedWhenFlagOff","Output":"--- PASS: TestAuditDelete_SkippedWhenFlagOff (0.03s)\n"} +{"Time":"2026-07-11T04:02:11.7901331+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAuditDelete_SkippedWhenFlagOff","Elapsed":0.03} +{"Time":"2026-07-11T04:02:11.7901331+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAuditSupersede_SkippedWhenFlagOff"} +{"Time":"2026-07-11T04:02:11.7901331+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAuditSupersede_SkippedWhenFlagOff","Output":"=== RUN TestAuditSupersede_SkippedWhenFlagOff\n"} +{"Time":"2026-07-11T04:02:11.8207163+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAuditSupersede_SkippedWhenFlagOff","Output":"--- PASS: TestAuditSupersede_SkippedWhenFlagOff (0.03s)\n"} +{"Time":"2026-07-11T04:02:11.8207163+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestAuditSupersede_SkippedWhenFlagOff","Elapsed":0.03} +{"Time":"2026-07-11T04:02:11.8207163+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryDomainPolicy_EmptyDomainLegacyCompatible"} +{"Time":"2026-07-11T04:02:11.8207163+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryDomainPolicy_EmptyDomainLegacyCompatible","Output":"=== RUN TestStoreMemoryDomainPolicy_EmptyDomainLegacyCompatible\n"} +{"Time":"2026-07-11T04:02:11.8207163+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryDomainPolicy_EmptyDomainLegacyCompatible","Output":"=== PAUSE TestStoreMemoryDomainPolicy_EmptyDomainLegacyCompatible\n"} +{"Time":"2026-07-11T04:02:11.8207163+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryDomainPolicy_EmptyDomainLegacyCompatible"} +{"Time":"2026-07-11T04:02:11.8207163+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryDomainPolicy_NonEmptyDomainRequiresPrincipal"} +{"Time":"2026-07-11T04:02:11.8207163+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryDomainPolicy_NonEmptyDomainRequiresPrincipal","Output":"=== RUN TestStoreMemoryDomainPolicy_NonEmptyDomainRequiresPrincipal\n"} +{"Time":"2026-07-11T04:02:11.8207163+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryDomainPolicy_NonEmptyDomainRequiresPrincipal","Output":"=== PAUSE TestStoreMemoryDomainPolicy_NonEmptyDomainRequiresPrincipal\n"} +{"Time":"2026-07-11T04:02:11.8207163+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryDomainPolicy_NonEmptyDomainRequiresPrincipal"} +{"Time":"2026-07-11T04:02:11.8207163+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryDomainPolicy_NonEmptyDomainAllowsPrincipalIdentity"} +{"Time":"2026-07-11T04:02:11.8207163+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryDomainPolicy_NonEmptyDomainAllowsPrincipalIdentity","Output":"=== RUN TestStoreMemoryDomainPolicy_NonEmptyDomainAllowsPrincipalIdentity\n"} +{"Time":"2026-07-11T04:02:11.8207163+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryDomainPolicy_NonEmptyDomainAllowsPrincipalIdentity","Output":"=== PAUSE TestStoreMemoryDomainPolicy_NonEmptyDomainAllowsPrincipalIdentity\n"} +{"Time":"2026-07-11T04:02:11.8207163+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryDomainPolicy_NonEmptyDomainAllowsPrincipalIdentity"} +{"Time":"2026-07-11T04:02:11.8207163+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryDomainPolicy_NonEmptyDomainRejectsInvalidPrincipalKind"} +{"Time":"2026-07-11T04:02:11.8207163+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryDomainPolicy_NonEmptyDomainRejectsInvalidPrincipalKind","Output":"=== RUN TestStoreMemoryDomainPolicy_NonEmptyDomainRejectsInvalidPrincipalKind\n"} +{"Time":"2026-07-11T04:02:11.8207163+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryDomainPolicy_NonEmptyDomainRejectsInvalidPrincipalKind","Output":"=== PAUSE TestStoreMemoryDomainPolicy_NonEmptyDomainRejectsInvalidPrincipalKind\n"} +{"Time":"2026-07-11T04:02:11.8207163+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryDomainPolicy_NonEmptyDomainRejectsInvalidPrincipalKind"} +{"Time":"2026-07-11T04:02:11.8207163+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWriteLintDomainPolicy_DomainOwnedCandidateHidden"} +{"Time":"2026-07-11T04:02:11.8207163+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWriteLintDomainPolicy_DomainOwnedCandidateHidden","Output":"=== RUN TestWriteLintDomainPolicy_DomainOwnedCandidateHidden\n"} +{"Time":"2026-07-11T04:02:11.8207163+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWriteLintDomainPolicy_DomainOwnedCandidateHidden","Output":"=== PAUSE TestWriteLintDomainPolicy_DomainOwnedCandidateHidden\n"} +{"Time":"2026-07-11T04:02:11.8207163+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWriteLintDomainPolicy_DomainOwnedCandidateHidden"} +{"Time":"2026-07-11T04:02:11.8207163+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWriteLintDomainPolicy_DomainOwnedTargetHidden"} +{"Time":"2026-07-11T04:02:11.8207163+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWriteLintDomainPolicy_DomainOwnedTargetHidden","Output":"=== RUN TestWriteLintDomainPolicy_DomainOwnedTargetHidden\n"} +{"Time":"2026-07-11T04:02:11.8207163+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWriteLintDomainPolicy_DomainOwnedTargetHidden","Output":"=== PAUSE TestWriteLintDomainPolicy_DomainOwnedTargetHidden\n"} +{"Time":"2026-07-11T04:02:11.8207163+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWriteLintDomainPolicy_DomainOwnedTargetHidden"} +{"Time":"2026-07-11T04:02:11.8207163+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestLegacyWriteGateDomainPolicy_DomainOwnedCandidateHidden"} +{"Time":"2026-07-11T04:02:11.8207163+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestLegacyWriteGateDomainPolicy_DomainOwnedCandidateHidden","Output":"=== RUN TestLegacyWriteGateDomainPolicy_DomainOwnedCandidateHidden\n"} +{"Time":"2026-07-11T04:02:11.8207163+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestLegacyWriteGateDomainPolicy_DomainOwnedCandidateHidden","Output":"--- PASS: TestLegacyWriteGateDomainPolicy_DomainOwnedCandidateHidden (0.00s)\n"} +{"Time":"2026-07-11T04:02:11.8207163+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestLegacyWriteGateDomainPolicy_DomainOwnedCandidateHidden","Elapsed":0} +{"Time":"2026-07-11T04:02:11.8207163+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryDomainPolicy_DomainOwnedRowHiddenFromMismatchedPrincipal"} +{"Time":"2026-07-11T04:02:11.8207163+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryDomainPolicy_DomainOwnedRowHiddenFromMismatchedPrincipal","Output":"=== RUN TestRecallMemoryDomainPolicy_DomainOwnedRowHiddenFromMismatchedPrincipal\n"} +{"Time":"2026-07-11T04:02:11.8207163+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryDomainPolicy_DomainOwnedRowHiddenFromMismatchedPrincipal","Output":"=== PAUSE TestRecallMemoryDomainPolicy_DomainOwnedRowHiddenFromMismatchedPrincipal\n"} +{"Time":"2026-07-11T04:02:11.8207163+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryDomainPolicy_DomainOwnedRowHiddenFromMismatchedPrincipal"} +{"Time":"2026-07-11T04:02:11.8207163+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryDomainPolicy_DomainOwnedRowVisibleToOwner"} +{"Time":"2026-07-11T04:02:11.8207163+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryDomainPolicy_DomainOwnedRowVisibleToOwner","Output":"=== RUN TestRecallMemoryDomainPolicy_DomainOwnedRowVisibleToOwner\n"} +{"Time":"2026-07-11T04:02:11.8207163+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryDomainPolicy_DomainOwnedRowVisibleToOwner","Output":"=== PAUSE TestRecallMemoryDomainPolicy_DomainOwnedRowVisibleToOwner\n"} +{"Time":"2026-07-11T04:02:11.8207163+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryDomainPolicy_DomainOwnedRowVisibleToOwner"} +{"Time":"2026-07-11T04:02:11.8207163+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryDomainRegistry_WarnRejectAndCompatibility"} +{"Time":"2026-07-11T04:02:11.8207163+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryDomainRegistry_WarnRejectAndCompatibility","Output":"=== RUN TestStoreMemoryDomainRegistry_WarnRejectAndCompatibility\n"} +{"Time":"2026-07-11T04:02:11.928877+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryDomainRegistry_WarnRejectAndCompatibility","Output":"{\"level\":\"debug\",\"connections\":1,\"time\":\"2026-07-11T04:02:11+03:00\",\"message\":\"Connection pool warmed\"}\n"} +{"Time":"2026-07-11T04:02:11.9293744+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryDomainRegistry_WarnRejectAndCompatibility/missing_row_preserves_current_behavior"} +{"Time":"2026-07-11T04:02:11.9293744+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryDomainRegistry_WarnRejectAndCompatibility/missing_row_preserves_current_behavior","Output":"=== RUN TestStoreMemoryDomainRegistry_WarnRejectAndCompatibility/missing_row_preserves_current_behavior\n"} +{"Time":"2026-07-11T04:02:11.9404124+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryDomainRegistry_WarnRejectAndCompatibility/missing_row_preserves_current_behavior","Output":"--- PASS: TestStoreMemoryDomainRegistry_WarnRejectAndCompatibility/missing_row_preserves_current_behavior (0.01s)\n"} +{"Time":"2026-07-11T04:02:11.9404124+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryDomainRegistry_WarnRejectAndCompatibility/missing_row_preserves_current_behavior","Elapsed":0.01} +{"Time":"2026-07-11T04:02:11.9404124+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryDomainRegistry_WarnRejectAndCompatibility/off_allows_cross_owner"} +{"Time":"2026-07-11T04:02:11.9404124+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryDomainRegistry_WarnRejectAndCompatibility/off_allows_cross_owner","Output":"=== RUN TestStoreMemoryDomainRegistry_WarnRejectAndCompatibility/off_allows_cross_owner\n"} +{"Time":"2026-07-11T04:02:11.9559122+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryDomainRegistry_WarnRejectAndCompatibility/off_allows_cross_owner","Output":"--- PASS: TestStoreMemoryDomainRegistry_WarnRejectAndCompatibility/off_allows_cross_owner (0.02s)\n"} +{"Time":"2026-07-11T04:02:11.9559122+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryDomainRegistry_WarnRejectAndCompatibility/off_allows_cross_owner","Elapsed":0.02} +{"Time":"2026-07-11T04:02:11.9559122+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryDomainRegistry_WarnRejectAndCompatibility/same_owner_allows_without_warning"} +{"Time":"2026-07-11T04:02:11.9559122+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryDomainRegistry_WarnRejectAndCompatibility/same_owner_allows_without_warning","Output":"=== RUN TestStoreMemoryDomainRegistry_WarnRejectAndCompatibility/same_owner_allows_without_warning\n"} +{"Time":"2026-07-11T04:02:11.9694137+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryDomainRegistry_WarnRejectAndCompatibility/same_owner_allows_without_warning","Output":"--- PASS: TestStoreMemoryDomainRegistry_WarnRejectAndCompatibility/same_owner_allows_without_warning (0.01s)\n"} +{"Time":"2026-07-11T04:02:11.9694137+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryDomainRegistry_WarnRejectAndCompatibility/same_owner_allows_without_warning","Elapsed":0.01} +{"Time":"2026-07-11T04:02:11.9694137+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryDomainRegistry_WarnRejectAndCompatibility/warn_allows_with_structured_warning"} +{"Time":"2026-07-11T04:02:11.9694137+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryDomainRegistry_WarnRejectAndCompatibility/warn_allows_with_structured_warning","Output":"=== RUN TestStoreMemoryDomainRegistry_WarnRejectAndCompatibility/warn_allows_with_structured_warning\n"} +{"Time":"2026-07-11T04:02:11.9899128+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryDomainRegistry_WarnRejectAndCompatibility/warn_allows_with_structured_warning","Output":"--- PASS: TestStoreMemoryDomainRegistry_WarnRejectAndCompatibility/warn_allows_with_structured_warning (0.02s)\n"} +{"Time":"2026-07-11T04:02:11.9899128+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryDomainRegistry_WarnRejectAndCompatibility/warn_allows_with_structured_warning","Elapsed":0.02} +{"Time":"2026-07-11T04:02:11.9899128+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryDomainRegistry_WarnRejectAndCompatibility/reject_denies_before_persistence"} +{"Time":"2026-07-11T04:02:11.9899128+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryDomainRegistry_WarnRejectAndCompatibility/reject_denies_before_persistence","Output":"=== RUN TestStoreMemoryDomainRegistry_WarnRejectAndCompatibility/reject_denies_before_persistence\n"} +{"Time":"2026-07-11T04:02:12.0034131+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryDomainRegistry_WarnRejectAndCompatibility/reject_denies_before_persistence","Output":"--- PASS: TestStoreMemoryDomainRegistry_WarnRejectAndCompatibility/reject_denies_before_persistence (0.01s)\n"} +{"Time":"2026-07-11T04:02:12.0034131+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryDomainRegistry_WarnRejectAndCompatibility/reject_denies_before_persistence","Elapsed":0.01} +{"Time":"2026-07-11T04:02:12.0214118+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryDomainRegistry_WarnRejectAndCompatibility","Output":"--- PASS: TestStoreMemoryDomainRegistry_WarnRejectAndCompatibility (0.20s)\n"} +{"Time":"2026-07-11T04:02:12.0214118+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryDomainRegistry_WarnRejectAndCompatibility","Elapsed":0.2} +{"Time":"2026-07-11T04:02:12.0214118+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryDomainRegistry_AuditFailureBlocksBeforePersistence"} +{"Time":"2026-07-11T04:02:12.0214118+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryDomainRegistry_AuditFailureBlocksBeforePersistence","Output":"=== RUN TestStoreMemoryDomainRegistry_AuditFailureBlocksBeforePersistence\n"} +{"Time":"2026-07-11T04:02:12.1221818+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryDomainRegistry_AuditFailureBlocksBeforePersistence","Output":"{\"level\":\"debug\",\"connections\":1,\"time\":\"2026-07-11T04:02:12+03:00\",\"message\":\"Connection pool warmed\"}\n"} +{"Time":"2026-07-11T04:02:12.1341822+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryDomainRegistry_AuditFailureBlocksBeforePersistence","Output":"--- PASS: TestStoreMemoryDomainRegistry_AuditFailureBlocksBeforePersistence (0.11s)\n"} +{"Time":"2026-07-11T04:02:12.1341822+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryDomainRegistry_AuditFailureBlocksBeforePersistence","Elapsed":0.11} +{"Time":"2026-07-11T04:02:12.1341822+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryDomainRegistry_RejectionRunsBeforeSupersedeMutation"} +{"Time":"2026-07-11T04:02:12.1341822+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryDomainRegistry_RejectionRunsBeforeSupersedeMutation","Output":"=== RUN TestStoreMemoryDomainRegistry_RejectionRunsBeforeSupersedeMutation\n"} +{"Time":"2026-07-11T04:02:12.2358563+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryDomainRegistry_RejectionRunsBeforeSupersedeMutation","Output":"{\"level\":\"debug\",\"connections\":1,\"time\":\"2026-07-11T04:02:12+03:00\",\"message\":\"Connection pool warmed\"}\n"} +{"Time":"2026-07-11T04:02:12.2880704+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryDomainRegistry_RejectionRunsBeforeSupersedeMutation","Output":"--- PASS: TestStoreMemoryDomainRegistry_RejectionRunsBeforeSupersedeMutation (0.15s)\n"} +{"Time":"2026-07-11T04:02:12.2880704+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryDomainRegistry_RejectionRunsBeforeSupersedeMutation","Elapsed":0.15} +{"Time":"2026-07-11T04:02:12.2880704+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryDomainRegistry_InvalidWriterKindRejectsBeforePersistence"} +{"Time":"2026-07-11T04:02:12.2880704+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryDomainRegistry_InvalidWriterKindRejectsBeforePersistence","Output":"=== RUN TestStoreMemoryDomainRegistry_InvalidWriterKindRejectsBeforePersistence\n"} +{"Time":"2026-07-11T04:02:12.3926044+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryDomainRegistry_InvalidWriterKindRejectsBeforePersistence","Output":"{\"level\":\"debug\",\"connections\":1,\"time\":\"2026-07-11T04:02:12+03:00\",\"message\":\"Connection pool warmed\"}\n"} +{"Time":"2026-07-11T04:02:12.4036034+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryDomainRegistry_InvalidWriterKindRejectsBeforePersistence","Output":"--- PASS: TestStoreMemoryDomainRegistry_InvalidWriterKindRejectsBeforePersistence (0.12s)\n"} +{"Time":"2026-07-11T04:02:12.4036034+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryDomainRegistry_InvalidWriterKindRejectsBeforePersistence","Elapsed":0.12} +{"Time":"2026-07-11T04:02:12.4036034+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEditMemory_HardLimitRejected"} +{"Time":"2026-07-11T04:02:12.4036034+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEditMemory_HardLimitRejected","Output":"=== RUN TestEditMemory_HardLimitRejected\n"} +{"Time":"2026-07-11T04:02:12.4041033+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEditMemory_HardLimitRejected","Output":"--- PASS: TestEditMemory_HardLimitRejected (0.00s)\n"} +{"Time":"2026-07-11T04:02:12.4041033+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEditMemory_HardLimitRejected","Elapsed":0} +{"Time":"2026-07-11T04:02:12.4041033+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEditMemory_SoftLimitTruncates"} +{"Time":"2026-07-11T04:02:12.4041033+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEditMemory_SoftLimitTruncates","Output":"=== RUN TestEditMemory_SoftLimitTruncates\n"} +{"Time":"2026-07-11T04:02:12.4041033+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEditMemory_SoftLimitTruncates","Output":"{\"level\":\"debug\",\"soft_limit\":1000,\"time\":\"2026-07-11T04:02:12+03:00\",\"message\":\"edit_memory: content truncated to soft limit\"}\n"} +{"Time":"2026-07-11T04:02:12.4046034+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEditMemory_SoftLimitTruncates","Output":"--- PASS: TestEditMemory_SoftLimitTruncates (0.00s)\n"} +{"Time":"2026-07-11T04:02:12.4046034+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEditMemory_SoftLimitTruncates","Elapsed":0} +{"Time":"2026-07-11T04:02:12.4046034+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEditMemory_SecretRedacted"} +{"Time":"2026-07-11T04:02:12.4046034+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEditMemory_SecretRedacted","Output":"=== RUN TestEditMemory_SecretRedacted\n"} +{"Time":"2026-07-11T04:02:12.4046034+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEditMemory_SecretRedacted","Output":"{\"level\":\"warn\",\"time\":\"2026-07-11T04:02:12+03:00\",\"message\":\"edit_memory: content contains secrets — redacting before storage\"}\n"} +{"Time":"2026-07-11T04:02:12.4046034+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEditMemory_SecretRedacted","Output":"--- PASS: TestEditMemory_SecretRedacted (0.00s)\n"} +{"Time":"2026-07-11T04:02:12.4046034+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEditMemory_SecretRedacted","Elapsed":0} +{"Time":"2026-07-11T04:02:12.4046034+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEditMemory_CrossProjectDenied"} +{"Time":"2026-07-11T04:02:12.4046034+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEditMemory_CrossProjectDenied","Output":"=== RUN TestEditMemory_CrossProjectDenied\n"} +{"Time":"2026-07-11T04:02:12.4046034+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEditMemory_CrossProjectDenied","Output":"--- PASS: TestEditMemory_CrossProjectDenied (0.00s)\n"} +{"Time":"2026-07-11T04:02:12.4051034+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEditMemory_CrossProjectDenied","Elapsed":0} +{"Time":"2026-07-11T04:02:12.4051034+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEditMemory_SameProjectAllowed"} +{"Time":"2026-07-11T04:02:12.4051034+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEditMemory_SameProjectAllowed","Output":"=== RUN TestEditMemory_SameProjectAllowed\n"} +{"Time":"2026-07-11T04:02:12.4051034+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEditMemory_SameProjectAllowed","Output":"--- PASS: TestEditMemory_SameProjectAllowed (0.00s)\n"} +{"Time":"2026-07-11T04:02:12.4051034+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEditMemory_SameProjectAllowed","Elapsed":0} +{"Time":"2026-07-11T04:02:12.4051034+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEditMemory_DomainOwnedCrossPrincipalDenied"} +{"Time":"2026-07-11T04:02:12.4051034+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEditMemory_DomainOwnedCrossPrincipalDenied","Output":"=== RUN TestEditMemory_DomainOwnedCrossPrincipalDenied\n"} +{"Time":"2026-07-11T04:02:12.4051034+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEditMemory_DomainOwnedCrossPrincipalDenied","Output":"--- PASS: TestEditMemory_DomainOwnedCrossPrincipalDenied (0.00s)\n"} +{"Time":"2026-07-11T04:02:12.4051034+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEditMemory_DomainOwnedCrossPrincipalDenied","Elapsed":0} +{"Time":"2026-07-11T04:02:12.4051034+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEditMemory_CrossProjectAllowedWhenEnforcementOff"} +{"Time":"2026-07-11T04:02:12.4051034+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEditMemory_CrossProjectAllowedWhenEnforcementOff","Output":"=== RUN TestEditMemory_CrossProjectAllowedWhenEnforcementOff\n"} +{"Time":"2026-07-11T04:02:12.4056027+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEditMemory_CrossProjectAllowedWhenEnforcementOff","Output":"--- PASS: TestEditMemory_CrossProjectAllowedWhenEnforcementOff (0.00s)\n"} +{"Time":"2026-07-11T04:02:12.4056027+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEditMemory_CrossProjectAllowedWhenEnforcementOff","Elapsed":0} +{"Time":"2026-07-11T04:02:12.4056027+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEditMemory_AuditSourceSessionIDFromContext"} +{"Time":"2026-07-11T04:02:12.4056027+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEditMemory_AuditSourceSessionIDFromContext","Output":"=== RUN TestEditMemory_AuditSourceSessionIDFromContext\n"} +{"Time":"2026-07-11T04:02:12.4111041+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEditMemory_AuditSourceSessionIDFromContext","Output":"--- PASS: TestEditMemory_AuditSourceSessionIDFromContext (0.01s)\n"} +{"Time":"2026-07-11T04:02:12.4111041+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEditMemory_AuditSourceSessionIDFromContext","Elapsed":0.01} +{"Time":"2026-07-11T04:02:12.4111041+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEditMemory_AuditSourceSessionIDEmptyWhenNoSession"} +{"Time":"2026-07-11T04:02:12.4111041+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEditMemory_AuditSourceSessionIDEmptyWhenNoSession","Output":"=== RUN TestEditMemory_AuditSourceSessionIDEmptyWhenNoSession\n"} +{"Time":"2026-07-11T04:02:12.4171042+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEditMemory_AuditSourceSessionIDEmptyWhenNoSession","Output":"--- PASS: TestEditMemory_AuditSourceSessionIDEmptyWhenNoSession (0.01s)\n"} +{"Time":"2026-07-11T04:02:12.4171042+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEditMemory_AuditSourceSessionIDEmptyWhenNoSession","Elapsed":0.01} +{"Time":"2026-07-11T04:02:12.4171042+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEditMemory_EmptyProjectContextDeniedWhenEnforced"} +{"Time":"2026-07-11T04:02:12.4171042+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEditMemory_EmptyProjectContextDeniedWhenEnforced","Output":"=== RUN TestEditMemory_EmptyProjectContextDeniedWhenEnforced\n"} +{"Time":"2026-07-11T04:02:12.4176024+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEditMemory_EmptyProjectContextDeniedWhenEnforced","Output":"--- PASS: TestEditMemory_EmptyProjectContextDeniedWhenEnforced (0.00s)\n"} +{"Time":"2026-07-11T04:02:12.4176024+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEditMemory_EmptyProjectContextDeniedWhenEnforced","Elapsed":0} +{"Time":"2026-07-11T04:02:12.4176024+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEditMemory_TagsAbsent_KeepsExisting"} +{"Time":"2026-07-11T04:02:12.4176024+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEditMemory_TagsAbsent_KeepsExisting","Output":"=== RUN TestEditMemory_TagsAbsent_KeepsExisting\n"} +{"Time":"2026-07-11T04:02:12.4181029+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEditMemory_TagsAbsent_KeepsExisting","Output":"--- PASS: TestEditMemory_TagsAbsent_KeepsExisting (0.00s)\n"} +{"Time":"2026-07-11T04:02:12.4181029+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEditMemory_TagsAbsent_KeepsExisting","Elapsed":0} +{"Time":"2026-07-11T04:02:12.4181029+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEditMemory_TagsExplicitEmpty_ClearsTags"} +{"Time":"2026-07-11T04:02:12.4181029+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEditMemory_TagsExplicitEmpty_ClearsTags","Output":"=== RUN TestEditMemory_TagsExplicitEmpty_ClearsTags\n"} +{"Time":"2026-07-11T04:02:12.4181029+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEditMemory_TagsExplicitEmpty_ClearsTags","Output":"--- PASS: TestEditMemory_TagsExplicitEmpty_ClearsTags (0.00s)\n"} +{"Time":"2026-07-11T04:02:12.4181029+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEditMemory_TagsExplicitEmpty_ClearsTags","Elapsed":0} +{"Time":"2026-07-11T04:02:12.4181029+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEditMemory_TagsNonEmpty_ReplacesTags"} +{"Time":"2026-07-11T04:02:12.4181029+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEditMemory_TagsNonEmpty_ReplacesTags","Output":"=== RUN TestEditMemory_TagsNonEmpty_ReplacesTags\n"} +{"Time":"2026-07-11T04:02:12.4181029+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEditMemory_TagsNonEmpty_ReplacesTags","Output":"--- PASS: TestEditMemory_TagsNonEmpty_ReplacesTags (0.00s)\n"} +{"Time":"2026-07-11T04:02:12.4181029+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEditMemory_TagsNonEmpty_ReplacesTags","Elapsed":0} +{"Time":"2026-07-11T04:02:12.4181029+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRunAuditAsync_PanicRecovered"} +{"Time":"2026-07-11T04:02:12.4181029+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRunAuditAsync_PanicRecovered","Output":"=== RUN TestRunAuditAsync_PanicRecovered\n"} +{"Time":"2026-07-11T04:02:12.4181029+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRunAuditAsync_PanicRecovered","Output":"{\"level\":\"error\",\"audit_label\":\"test-panic\",\"memory_id\":99,\"panic\":\"simulated audit panic\",\"time\":\"2026-07-11T04:02:12+03:00\",\"message\":\"audit: goroutine panic recovered\"}\n"} +{"Time":"2026-07-11T04:02:12.468574+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRunAuditAsync_PanicRecovered","Output":"--- PASS: TestRunAuditAsync_PanicRecovered (0.05s)\n"} +{"Time":"2026-07-11T04:02:12.468574+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRunAuditAsync_PanicRecovered","Elapsed":0.05} +{"Time":"2026-07-11T04:02:12.468574+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRunAuditAsync_ErrorLogged"} +{"Time":"2026-07-11T04:02:12.468574+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRunAuditAsync_ErrorLogged","Output":"=== RUN TestRunAuditAsync_ErrorLogged\n"} +{"Time":"2026-07-11T04:02:12.468574+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRunAuditAsync_ErrorLogged","Output":"{\"level\":\"error\",\"error\":\"simulated db error\",\"audit_label\":\"test-error\",\"memory_id\":88,\"time\":\"2026-07-11T04:02:12+03:00\",\"message\":\"audit: async write failed\"}\n"} +{"Time":"2026-07-11T04:02:12.5193412+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRunAuditAsync_ErrorLogged","Output":"--- PASS: TestRunAuditAsync_ErrorLogged (0.05s)\n"} +{"Time":"2026-07-11T04:02:12.5193412+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRunAuditAsync_ErrorLogged","Elapsed":0.05} +{"Time":"2026-07-11T04:02:12.5193412+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestMemoryStoreSignificanceUpdaterPersistsChangedFields"} +{"Time":"2026-07-11T04:02:12.5193412+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestMemoryStoreSignificanceUpdaterPersistsChangedFields","Output":"=== RUN TestMemoryStoreSignificanceUpdaterPersistsChangedFields\n"} +{"Time":"2026-07-11T04:02:12.5193412+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestMemoryStoreSignificanceUpdaterPersistsChangedFields/useful_persists_alpha_citation_and_streak"} +{"Time":"2026-07-11T04:02:12.5193412+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestMemoryStoreSignificanceUpdaterPersistsChangedFields/useful_persists_alpha_citation_and_streak","Output":"=== RUN TestMemoryStoreSignificanceUpdaterPersistsChangedFields/useful_persists_alpha_citation_and_streak\n"} +{"Time":"2026-07-11T04:02:12.5193412+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestMemoryStoreSignificanceUpdaterPersistsChangedFields/useful_persists_alpha_citation_and_streak","Output":"--- PASS: TestMemoryStoreSignificanceUpdaterPersistsChangedFields/useful_persists_alpha_citation_and_streak (0.00s)\n"} +{"Time":"2026-07-11T04:02:12.5193412+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestMemoryStoreSignificanceUpdaterPersistsChangedFields/useful_persists_alpha_citation_and_streak","Elapsed":0} +{"Time":"2026-07-11T04:02:12.5193412+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestMemoryStoreSignificanceUpdaterPersistsChangedFields/not_useful_persists_beta_and_resets_streak"} +{"Time":"2026-07-11T04:02:12.5193412+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestMemoryStoreSignificanceUpdaterPersistsChangedFields/not_useful_persists_beta_and_resets_streak","Output":"=== RUN TestMemoryStoreSignificanceUpdaterPersistsChangedFields/not_useful_persists_beta_and_resets_streak\n"} +{"Time":"2026-07-11T04:02:12.5193412+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestMemoryStoreSignificanceUpdaterPersistsChangedFields/not_useful_persists_beta_and_resets_streak","Output":"--- PASS: TestMemoryStoreSignificanceUpdaterPersistsChangedFields/not_useful_persists_beta_and_resets_streak (0.00s)\n"} +{"Time":"2026-07-11T04:02:12.5193412+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestMemoryStoreSignificanceUpdaterPersistsChangedFields/not_useful_persists_beta_and_resets_streak","Elapsed":0} +{"Time":"2026-07-11T04:02:12.5193412+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestMemoryStoreSignificanceUpdaterPersistsChangedFields","Output":"--- PASS: TestMemoryStoreSignificanceUpdaterPersistsChangedFields (0.00s)\n"} +{"Time":"2026-07-11T04:02:12.5193412+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestMemoryStoreSignificanceUpdaterPersistsChangedFields","Elapsed":0} +{"Time":"2026-07-11T04:02:12.5193412+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceToolAdvertisedOnlyWhenS6FlagAndUpdaterArePresent"} +{"Time":"2026-07-11T04:02:12.5193412+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceToolAdvertisedOnlyWhenS6FlagAndUpdaterArePresent","Output":"=== RUN TestRateMemorySignificanceToolAdvertisedOnlyWhenS6FlagAndUpdaterArePresent\n"} +{"Time":"2026-07-11T04:02:12.5193412+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceToolAdvertisedOnlyWhenS6FlagAndUpdaterArePresent/master_off_s6_on_updater_present"} +{"Time":"2026-07-11T04:02:12.5193412+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceToolAdvertisedOnlyWhenS6FlagAndUpdaterArePresent/master_off_s6_on_updater_present","Output":"=== RUN TestRateMemorySignificanceToolAdvertisedOnlyWhenS6FlagAndUpdaterArePresent/master_off_s6_on_updater_present\n"} +{"Time":"2026-07-11T04:02:12.5193412+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceToolAdvertisedOnlyWhenS6FlagAndUpdaterArePresent/master_off_s6_on_updater_present","Output":"--- PASS: TestRateMemorySignificanceToolAdvertisedOnlyWhenS6FlagAndUpdaterArePresent/master_off_s6_on_updater_present (0.00s)\n"} +{"Time":"2026-07-11T04:02:12.5193412+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceToolAdvertisedOnlyWhenS6FlagAndUpdaterArePresent/master_off_s6_on_updater_present","Elapsed":0} +{"Time":"2026-07-11T04:02:12.5193412+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceToolAdvertisedOnlyWhenS6FlagAndUpdaterArePresent/master_on_s6_off_updater_present"} +{"Time":"2026-07-11T04:02:12.5193412+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceToolAdvertisedOnlyWhenS6FlagAndUpdaterArePresent/master_on_s6_off_updater_present","Output":"=== RUN TestRateMemorySignificanceToolAdvertisedOnlyWhenS6FlagAndUpdaterArePresent/master_on_s6_off_updater_present\n"} +{"Time":"2026-07-11T04:02:12.5198405+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceToolAdvertisedOnlyWhenS6FlagAndUpdaterArePresent/master_on_s6_off_updater_present","Output":"--- PASS: TestRateMemorySignificanceToolAdvertisedOnlyWhenS6FlagAndUpdaterArePresent/master_on_s6_off_updater_present (0.00s)\n"} +{"Time":"2026-07-11T04:02:12.5198405+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceToolAdvertisedOnlyWhenS6FlagAndUpdaterArePresent/master_on_s6_off_updater_present","Elapsed":0} +{"Time":"2026-07-11T04:02:12.5198405+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceToolAdvertisedOnlyWhenS6FlagAndUpdaterArePresent/master_on_s6_on_updater_missing"} +{"Time":"2026-07-11T04:02:12.5198405+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceToolAdvertisedOnlyWhenS6FlagAndUpdaterArePresent/master_on_s6_on_updater_missing","Output":"=== RUN TestRateMemorySignificanceToolAdvertisedOnlyWhenS6FlagAndUpdaterArePresent/master_on_s6_on_updater_missing\n"} +{"Time":"2026-07-11T04:02:12.5198405+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceToolAdvertisedOnlyWhenS6FlagAndUpdaterArePresent/master_on_s6_on_updater_missing","Output":"--- PASS: TestRateMemorySignificanceToolAdvertisedOnlyWhenS6FlagAndUpdaterArePresent/master_on_s6_on_updater_missing (0.00s)\n"} +{"Time":"2026-07-11T04:02:12.5198405+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceToolAdvertisedOnlyWhenS6FlagAndUpdaterArePresent/master_on_s6_on_updater_missing","Elapsed":0} +{"Time":"2026-07-11T04:02:12.5198405+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceToolAdvertisedOnlyWhenS6FlagAndUpdaterArePresent/master_on_s6_on_updater_present"} +{"Time":"2026-07-11T04:02:12.5198405+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceToolAdvertisedOnlyWhenS6FlagAndUpdaterArePresent/master_on_s6_on_updater_present","Output":"=== RUN TestRateMemorySignificanceToolAdvertisedOnlyWhenS6FlagAndUpdaterArePresent/master_on_s6_on_updater_present\n"} +{"Time":"2026-07-11T04:02:12.5198405+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceToolAdvertisedOnlyWhenS6FlagAndUpdaterArePresent/master_on_s6_on_updater_present","Output":"--- PASS: TestRateMemorySignificanceToolAdvertisedOnlyWhenS6FlagAndUpdaterArePresent/master_on_s6_on_updater_present (0.00s)\n"} +{"Time":"2026-07-11T04:02:12.5198405+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceToolAdvertisedOnlyWhenS6FlagAndUpdaterArePresent/master_on_s6_on_updater_present","Elapsed":0} +{"Time":"2026-07-11T04:02:12.5198405+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceToolAdvertisedOnlyWhenS6FlagAndUpdaterArePresent","Output":"--- PASS: TestRateMemorySignificanceToolAdvertisedOnlyWhenS6FlagAndUpdaterArePresent (0.00s)\n"} +{"Time":"2026-07-11T04:02:12.5198405+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceToolAdvertisedOnlyWhenS6FlagAndUpdaterArePresent","Elapsed":0} +{"Time":"2026-07-11T04:02:12.5198405+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceToolAdvertisedWithDedicatedSchema"} +{"Time":"2026-07-11T04:02:12.520341+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceToolAdvertisedWithDedicatedSchema","Output":"=== RUN TestRateMemorySignificanceToolAdvertisedWithDedicatedSchema\n"} +{"Time":"2026-07-11T04:02:12.520341+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceToolAdvertisedWithDedicatedSchema","Output":"--- PASS: TestRateMemorySignificanceToolAdvertisedWithDedicatedSchema (0.00s)\n"} +{"Time":"2026-07-11T04:02:12.520341+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceToolAdvertisedWithDedicatedSchema","Elapsed":0} +{"Time":"2026-07-11T04:02:12.520341+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceToolCallUpdatesLearningForUsefulAndNotUseful"} +{"Time":"2026-07-11T04:02:12.520341+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceToolCallUpdatesLearningForUsefulAndNotUseful","Output":"=== RUN TestRateMemorySignificanceToolCallUpdatesLearningForUsefulAndNotUseful\n"} +{"Time":"2026-07-11T04:02:12.520341+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceToolCallUpdatesLearningForUsefulAndNotUseful/useful"} +{"Time":"2026-07-11T04:02:12.520341+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceToolCallUpdatesLearningForUsefulAndNotUseful/useful","Output":"=== RUN TestRateMemorySignificanceToolCallUpdatesLearningForUsefulAndNotUseful/useful\n"} +{"Time":"2026-07-11T04:02:12.520341+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceToolCallUpdatesLearningForUsefulAndNotUseful/useful","Output":"--- PASS: TestRateMemorySignificanceToolCallUpdatesLearningForUsefulAndNotUseful/useful (0.00s)\n"} +{"Time":"2026-07-11T04:02:12.520341+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceToolCallUpdatesLearningForUsefulAndNotUseful/useful","Elapsed":0} +{"Time":"2026-07-11T04:02:12.520341+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceToolCallUpdatesLearningForUsefulAndNotUseful/not_useful"} +{"Time":"2026-07-11T04:02:12.520341+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceToolCallUpdatesLearningForUsefulAndNotUseful/not_useful","Output":"=== RUN TestRateMemorySignificanceToolCallUpdatesLearningForUsefulAndNotUseful/not_useful\n"} +{"Time":"2026-07-11T04:02:12.520341+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceToolCallUpdatesLearningForUsefulAndNotUseful/not_useful","Output":"--- PASS: TestRateMemorySignificanceToolCallUpdatesLearningForUsefulAndNotUseful/not_useful (0.00s)\n"} +{"Time":"2026-07-11T04:02:12.520341+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceToolCallUpdatesLearningForUsefulAndNotUseful/not_useful","Elapsed":0} +{"Time":"2026-07-11T04:02:12.520341+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceToolCallUpdatesLearningForUsefulAndNotUseful","Output":"--- PASS: TestRateMemorySignificanceToolCallUpdatesLearningForUsefulAndNotUseful (0.00s)\n"} +{"Time":"2026-07-11T04:02:12.520341+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceToolCallUpdatesLearningForUsefulAndNotUseful","Elapsed":0} +{"Time":"2026-07-11T04:02:12.520341+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceDirectCallFailsClosedWhenS6Disabled"} +{"Time":"2026-07-11T04:02:12.520341+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceDirectCallFailsClosedWhenS6Disabled","Output":"=== RUN TestRateMemorySignificanceDirectCallFailsClosedWhenS6Disabled\n"} +{"Time":"2026-07-11T04:02:12.520341+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceDirectCallFailsClosedWhenS6Disabled/master_off_s6_on_updater_present"} +{"Time":"2026-07-11T04:02:12.520341+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceDirectCallFailsClosedWhenS6Disabled/master_off_s6_on_updater_present","Output":"=== RUN TestRateMemorySignificanceDirectCallFailsClosedWhenS6Disabled/master_off_s6_on_updater_present\n"} +{"Time":"2026-07-11T04:02:12.520341+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceDirectCallFailsClosedWhenS6Disabled/master_off_s6_on_updater_present","Output":"--- PASS: TestRateMemorySignificanceDirectCallFailsClosedWhenS6Disabled/master_off_s6_on_updater_present (0.00s)\n"} +{"Time":"2026-07-11T04:02:12.520341+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceDirectCallFailsClosedWhenS6Disabled/master_off_s6_on_updater_present","Elapsed":0} +{"Time":"2026-07-11T04:02:12.520341+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceDirectCallFailsClosedWhenS6Disabled/master_on_s6_off_updater_present"} +{"Time":"2026-07-11T04:02:12.520341+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceDirectCallFailsClosedWhenS6Disabled/master_on_s6_off_updater_present","Output":"=== RUN TestRateMemorySignificanceDirectCallFailsClosedWhenS6Disabled/master_on_s6_off_updater_present\n"} +{"Time":"2026-07-11T04:02:12.520341+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceDirectCallFailsClosedWhenS6Disabled/master_on_s6_off_updater_present","Output":"--- PASS: TestRateMemorySignificanceDirectCallFailsClosedWhenS6Disabled/master_on_s6_off_updater_present (0.00s)\n"} +{"Time":"2026-07-11T04:02:12.520341+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceDirectCallFailsClosedWhenS6Disabled/master_on_s6_off_updater_present","Elapsed":0} +{"Time":"2026-07-11T04:02:12.520341+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceDirectCallFailsClosedWhenS6Disabled","Output":"--- PASS: TestRateMemorySignificanceDirectCallFailsClosedWhenS6Disabled (0.00s)\n"} +{"Time":"2026-07-11T04:02:12.520341+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceDirectCallFailsClosedWhenS6Disabled","Elapsed":0} +{"Time":"2026-07-11T04:02:12.520341+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceRejectsInvalidIDWithoutWrite"} +{"Time":"2026-07-11T04:02:12.520341+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceRejectsInvalidIDWithoutWrite","Output":"=== RUN TestRateMemorySignificanceRejectsInvalidIDWithoutWrite\n"} +{"Time":"2026-07-11T04:02:12.5208402+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceRejectsInvalidIDWithoutWrite/missing_id"} +{"Time":"2026-07-11T04:02:12.5208402+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceRejectsInvalidIDWithoutWrite/missing_id","Output":"=== RUN TestRateMemorySignificanceRejectsInvalidIDWithoutWrite/missing_id\n"} +{"Time":"2026-07-11T04:02:12.5208402+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceRejectsInvalidIDWithoutWrite/missing_id","Output":"--- PASS: TestRateMemorySignificanceRejectsInvalidIDWithoutWrite/missing_id (0.00s)\n"} +{"Time":"2026-07-11T04:02:12.5208402+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceRejectsInvalidIDWithoutWrite/missing_id","Elapsed":0} +{"Time":"2026-07-11T04:02:12.5208402+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceRejectsInvalidIDWithoutWrite/zero_id"} +{"Time":"2026-07-11T04:02:12.5208402+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceRejectsInvalidIDWithoutWrite/zero_id","Output":"=== RUN TestRateMemorySignificanceRejectsInvalidIDWithoutWrite/zero_id\n"} +{"Time":"2026-07-11T04:02:12.5208402+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceRejectsInvalidIDWithoutWrite/zero_id","Output":"--- PASS: TestRateMemorySignificanceRejectsInvalidIDWithoutWrite/zero_id (0.00s)\n"} +{"Time":"2026-07-11T04:02:12.5208402+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceRejectsInvalidIDWithoutWrite/zero_id","Elapsed":0} +{"Time":"2026-07-11T04:02:12.5208402+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceRejectsInvalidIDWithoutWrite/negative_id"} +{"Time":"2026-07-11T04:02:12.5208402+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceRejectsInvalidIDWithoutWrite/negative_id","Output":"=== RUN TestRateMemorySignificanceRejectsInvalidIDWithoutWrite/negative_id\n"} +{"Time":"2026-07-11T04:02:12.5208402+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceRejectsInvalidIDWithoutWrite/negative_id","Output":"--- PASS: TestRateMemorySignificanceRejectsInvalidIDWithoutWrite/negative_id (0.00s)\n"} +{"Time":"2026-07-11T04:02:12.5208402+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceRejectsInvalidIDWithoutWrite/negative_id","Elapsed":0} +{"Time":"2026-07-11T04:02:12.5208402+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceRejectsInvalidIDWithoutWrite","Output":"--- PASS: TestRateMemorySignificanceRejectsInvalidIDWithoutWrite (0.00s)\n"} +{"Time":"2026-07-11T04:02:12.5208402+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceRejectsInvalidIDWithoutWrite","Elapsed":0} +{"Time":"2026-07-11T04:02:12.5208402+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceRejectsInvalidRatingWithoutWrite"} +{"Time":"2026-07-11T04:02:12.5208402+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceRejectsInvalidRatingWithoutWrite","Output":"=== RUN TestRateMemorySignificanceRejectsInvalidRatingWithoutWrite\n"} +{"Time":"2026-07-11T04:02:12.5208402+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceRejectsInvalidRatingWithoutWrite/missing_rating"} +{"Time":"2026-07-11T04:02:12.5208402+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceRejectsInvalidRatingWithoutWrite/missing_rating","Output":"=== RUN TestRateMemorySignificanceRejectsInvalidRatingWithoutWrite/missing_rating\n"} +{"Time":"2026-07-11T04:02:12.5208402+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceRejectsInvalidRatingWithoutWrite/missing_rating","Output":"--- PASS: TestRateMemorySignificanceRejectsInvalidRatingWithoutWrite/missing_rating (0.00s)\n"} +{"Time":"2026-07-11T04:02:12.5208402+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceRejectsInvalidRatingWithoutWrite/missing_rating","Elapsed":0} +{"Time":"2026-07-11T04:02:12.5208402+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceRejectsInvalidRatingWithoutWrite/unknown_rating"} +{"Time":"2026-07-11T04:02:12.5208402+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceRejectsInvalidRatingWithoutWrite/unknown_rating","Output":"=== RUN TestRateMemorySignificanceRejectsInvalidRatingWithoutWrite/unknown_rating\n"} +{"Time":"2026-07-11T04:02:12.5208402+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceRejectsInvalidRatingWithoutWrite/unknown_rating","Output":"--- PASS: TestRateMemorySignificanceRejectsInvalidRatingWithoutWrite/unknown_rating (0.00s)\n"} +{"Time":"2026-07-11T04:02:12.5208402+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceRejectsInvalidRatingWithoutWrite/unknown_rating","Elapsed":0} +{"Time":"2026-07-11T04:02:12.5208402+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceRejectsInvalidRatingWithoutWrite/empty_rating"} +{"Time":"2026-07-11T04:02:12.5208402+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceRejectsInvalidRatingWithoutWrite/empty_rating","Output":"=== RUN TestRateMemorySignificanceRejectsInvalidRatingWithoutWrite/empty_rating\n"} +{"Time":"2026-07-11T04:02:12.5208402+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceRejectsInvalidRatingWithoutWrite/empty_rating","Output":"--- PASS: TestRateMemorySignificanceRejectsInvalidRatingWithoutWrite/empty_rating (0.00s)\n"} +{"Time":"2026-07-11T04:02:12.5208402+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceRejectsInvalidRatingWithoutWrite/empty_rating","Elapsed":0} +{"Time":"2026-07-11T04:02:12.5208402+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceRejectsInvalidRatingWithoutWrite","Output":"--- PASS: TestRateMemorySignificanceRejectsInvalidRatingWithoutWrite (0.00s)\n"} +{"Time":"2026-07-11T04:02:12.5208402+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceRejectsInvalidRatingWithoutWrite","Elapsed":0} +{"Time":"2026-07-11T04:02:12.5208402+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceMissingUpdaterFailsExplicitly"} +{"Time":"2026-07-11T04:02:12.5208402+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceMissingUpdaterFailsExplicitly","Output":"=== RUN TestRateMemorySignificanceMissingUpdaterFailsExplicitly\n"} +{"Time":"2026-07-11T04:02:12.5213399+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceMissingUpdaterFailsExplicitly","Output":"--- PASS: TestRateMemorySignificanceMissingUpdaterFailsExplicitly (0.00s)\n"} +{"Time":"2026-07-11T04:02:12.5213399+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceMissingUpdaterFailsExplicitly","Elapsed":0} +{"Time":"2026-07-11T04:02:12.5213399+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceLegacyRatePathsRemainUnsupported"} +{"Time":"2026-07-11T04:02:12.5213399+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceLegacyRatePathsRemainUnsupported","Output":"=== RUN TestRateMemorySignificanceLegacyRatePathsRemainUnsupported\n"} +{"Time":"2026-07-11T04:02:12.5213399+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceLegacyRatePathsRemainUnsupported/legacy_rate_memory_tool"} +{"Time":"2026-07-11T04:02:12.5213399+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceLegacyRatePathsRemainUnsupported/legacy_rate_memory_tool","Output":"=== RUN TestRateMemorySignificanceLegacyRatePathsRemainUnsupported/legacy_rate_memory_tool\n"} +{"Time":"2026-07-11T04:02:12.5213399+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceLegacyRatePathsRemainUnsupported/legacy_rate_memory_tool","Output":"--- PASS: TestRateMemorySignificanceLegacyRatePathsRemainUnsupported/legacy_rate_memory_tool (0.00s)\n"} +{"Time":"2026-07-11T04:02:12.5213399+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceLegacyRatePathsRemainUnsupported/legacy_rate_memory_tool","Elapsed":0} +{"Time":"2026-07-11T04:02:12.5213399+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceLegacyRatePathsRemainUnsupported/consolidated_feedback_rate_action"} +{"Time":"2026-07-11T04:02:12.5213399+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceLegacyRatePathsRemainUnsupported/consolidated_feedback_rate_action","Output":"=== RUN TestRateMemorySignificanceLegacyRatePathsRemainUnsupported/consolidated_feedback_rate_action\n"} +{"Time":"2026-07-11T04:02:12.5213399+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceLegacyRatePathsRemainUnsupported/consolidated_feedback_rate_action","Output":"--- PASS: TestRateMemorySignificanceLegacyRatePathsRemainUnsupported/consolidated_feedback_rate_action (0.00s)\n"} +{"Time":"2026-07-11T04:02:12.5213399+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceLegacyRatePathsRemainUnsupported/consolidated_feedback_rate_action","Elapsed":0} +{"Time":"2026-07-11T04:02:12.5213399+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceLegacyRatePathsRemainUnsupported","Output":"--- PASS: TestRateMemorySignificanceLegacyRatePathsRemainUnsupported (0.00s)\n"} +{"Time":"2026-07-11T04:02:12.5213399+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRateMemorySignificanceLegacyRatePathsRemainUnsupported","Elapsed":0} +{"Time":"2026-07-11T04:02:12.5213399+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryToolSchema_T005"} +{"Time":"2026-07-11T04:02:12.5213399+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryToolSchema_T005","Output":"=== RUN TestStoreMemoryToolSchema_T005\n"} +{"Time":"2026-07-11T04:02:12.5213399+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryToolSchema_T005","Output":"=== PAUSE TestStoreMemoryToolSchema_T005\n"} +{"Time":"2026-07-11T04:02:12.5213399+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryToolSchema_T005"} +{"Time":"2026-07-11T04:02:12.5213399+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryToolSchema_T005"} +{"Time":"2026-07-11T04:02:12.5213399+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryToolSchema_T005","Output":"=== RUN TestRecallMemoryToolSchema_T005\n"} +{"Time":"2026-07-11T04:02:12.5213399+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryToolSchema_T005","Output":"=== PAUSE TestRecallMemoryToolSchema_T005\n"} +{"Time":"2026-07-11T04:02:12.5213399+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryToolSchema_T005"} +{"Time":"2026-07-11T04:02:12.5213399+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemory_InvalidPrivacyScope_StructuredError"} +{"Time":"2026-07-11T04:02:12.5213399+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemory_InvalidPrivacyScope_StructuredError","Output":"=== RUN TestStoreMemory_InvalidPrivacyScope_StructuredError\n"} +{"Time":"2026-07-11T04:02:12.5213399+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemory_InvalidPrivacyScope_StructuredError","Output":"--- PASS: TestStoreMemory_InvalidPrivacyScope_StructuredError (0.00s)\n"} +{"Time":"2026-07-11T04:02:12.5213399+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemory_InvalidPrivacyScope_StructuredError","Elapsed":0} +{"Time":"2026-07-11T04:02:12.5213399+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemory_InvalidIncludeScopes_StructuredError"} +{"Time":"2026-07-11T04:02:12.5213399+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemory_InvalidIncludeScopes_StructuredError","Output":"=== RUN TestRecallMemory_InvalidIncludeScopes_StructuredError\n"} +{"Time":"2026-07-11T04:02:12.5213399+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemory_InvalidIncludeScopes_StructuredError","Output":"--- PASS: TestRecallMemory_InvalidIncludeScopes_StructuredError (0.00s)\n"} +{"Time":"2026-07-11T04:02:12.5213399+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemory_InvalidIncludeScopes_StructuredError","Elapsed":0} +{"Time":"2026-07-11T04:02:12.5213399+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryToolSchema_FlagOff_HasNewProperties_ButRuntimeIgnores"} +{"Time":"2026-07-11T04:02:12.5213399+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryToolSchema_FlagOff_HasNewProperties_ButRuntimeIgnores","Output":"=== RUN TestStoreMemoryToolSchema_FlagOff_HasNewProperties_ButRuntimeIgnores\n"} +{"Time":"2026-07-11T04:02:12.5213399+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryToolSchema_FlagOff_HasNewProperties_ButRuntimeIgnores","Output":"--- PASS: TestStoreMemoryToolSchema_FlagOff_HasNewProperties_ButRuntimeIgnores (0.00s)\n"} +{"Time":"2026-07-11T04:02:12.5213399+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryToolSchema_FlagOff_HasNewProperties_ButRuntimeIgnores","Elapsed":0} +{"Time":"2026-07-11T04:02:12.5213399+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryToolSchema_B4_HasTierFilter"} +{"Time":"2026-07-11T04:02:12.5213399+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryToolSchema_B4_HasTierFilter","Output":"=== RUN TestRecallMemoryToolSchema_B4_HasTierFilter\n"} +{"Time":"2026-07-11T04:02:12.5218399+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryToolSchema_B4_HasTierFilter","Output":"--- PASS: TestRecallMemoryToolSchema_B4_HasTierFilter (0.00s)\n"} +{"Time":"2026-07-11T04:02:12.5218399+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryToolSchema_B4_HasTierFilter","Elapsed":0} +{"Time":"2026-07-11T04:02:12.5218399+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryTierFilter_InvalidTier_B4"} +{"Time":"2026-07-11T04:02:12.5218399+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryTierFilter_InvalidTier_B4","Output":"=== RUN TestRecallMemoryTierFilter_InvalidTier_B4\n"} +{"Time":"2026-07-11T04:02:12.5218399+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryTierFilter_InvalidTier_B4","Output":"--- PASS: TestRecallMemoryTierFilter_InvalidTier_B4 (0.00s)\n"} +{"Time":"2026-07-11T04:02:12.5218399+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryTierFilter_InvalidTier_B4","Elapsed":0} +{"Time":"2026-07-11T04:02:12.5218399+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryTierFilter_FlagOff_SchemaAbsent_B4"} +{"Time":"2026-07-11T04:02:12.5218399+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryTierFilter_FlagOff_SchemaAbsent_B4","Output":"=== RUN TestRecallMemoryTierFilter_FlagOff_SchemaAbsent_B4\n"} +{"Time":"2026-07-11T04:02:12.5218399+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryTierFilter_FlagOff_SchemaAbsent_B4","Output":"--- PASS: TestRecallMemoryTierFilter_FlagOff_SchemaAbsent_B4 (0.00s)\n"} +{"Time":"2026-07-11T04:02:12.5218399+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryTierFilter_FlagOff_SchemaAbsent_B4","Elapsed":0} +{"Time":"2026-07-11T04:02:12.5218399+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryDryRunValidatesPrincipalMetadata"} +{"Time":"2026-07-11T04:02:12.5218399+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryDryRunValidatesPrincipalMetadata","Output":"=== RUN TestStoreMemoryDryRunValidatesPrincipalMetadata\n"} +{"Time":"2026-07-11T04:02:12.5218399+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryDryRunValidatesPrincipalMetadata","Output":"--- PASS: TestStoreMemoryDryRunValidatesPrincipalMetadata (0.00s)\n"} +{"Time":"2026-07-11T04:02:12.5218399+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryDryRunValidatesPrincipalMetadata","Elapsed":0} +{"Time":"2026-07-11T04:02:12.5218399+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWriteLint_PrincipalPrivateCandidatesHiddenFromPhase1"} +{"Time":"2026-07-11T04:02:12.5218399+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWriteLint_PrincipalPrivateCandidatesHiddenFromPhase1","Output":"=== RUN TestWriteLint_PrincipalPrivateCandidatesHiddenFromPhase1\n"} +{"Time":"2026-07-11T04:02:12.5218399+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWriteLint_PrincipalPrivateCandidatesHiddenFromPhase1","Output":"--- PASS: TestWriteLint_PrincipalPrivateCandidatesHiddenFromPhase1 (0.00s)\n"} +{"Time":"2026-07-11T04:02:12.5218399+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWriteLint_PrincipalPrivateCandidatesHiddenFromPhase1","Elapsed":0} +{"Time":"2026-07-11T04:02:12.5218399+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWriteLint_PrincipalPrivateTargetHiddenFromPhase2"} +{"Time":"2026-07-11T04:02:12.5218399+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWriteLint_PrincipalPrivateTargetHiddenFromPhase2","Output":"=== RUN TestWriteLint_PrincipalPrivateTargetHiddenFromPhase2\n"} +{"Time":"2026-07-11T04:02:12.5218399+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWriteLint_PrincipalPrivateTargetHiddenFromPhase2","Output":"--- PASS: TestWriteLint_PrincipalPrivateTargetHiddenFromPhase2 (0.00s)\n"} +{"Time":"2026-07-11T04:02:12.5223411+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWriteLint_PrincipalPrivateTargetHiddenFromPhase2","Elapsed":0} +{"Time":"2026-07-11T04:02:12.5223411+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWriteLint_DomainOwnedCandidateHiddenWithOrchestratorStoreFallback"} +{"Time":"2026-07-11T04:02:12.5223411+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWriteLint_DomainOwnedCandidateHiddenWithOrchestratorStoreFallback","Output":"=== RUN TestWriteLint_DomainOwnedCandidateHiddenWithOrchestratorStoreFallback\n"} +{"Time":"2026-07-11T04:02:12.5223411+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWriteLint_DomainOwnedCandidateHiddenWithOrchestratorStoreFallback","Output":"--- PASS: TestWriteLint_DomainOwnedCandidateHiddenWithOrchestratorStoreFallback (0.00s)\n"} +{"Time":"2026-07-11T04:02:12.5223411+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWriteLint_DomainOwnedCandidateHiddenWithOrchestratorStoreFallback","Elapsed":0} +{"Time":"2026-07-11T04:02:12.5223411+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWriteLint_DomainOwnedTargetHiddenWithOrchestratorStoreFallback"} +{"Time":"2026-07-11T04:02:12.5223411+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWriteLint_DomainOwnedTargetHiddenWithOrchestratorStoreFallback","Output":"=== RUN TestWriteLint_DomainOwnedTargetHiddenWithOrchestratorStoreFallback\n"} +{"Time":"2026-07-11T04:02:12.5228407+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWriteLint_DomainOwnedTargetHiddenWithOrchestratorStoreFallback","Output":"--- PASS: TestWriteLint_DomainOwnedTargetHiddenWithOrchestratorStoreFallback (0.00s)\n"} +{"Time":"2026-07-11T04:02:12.5228407+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWriteLint_DomainOwnedTargetHiddenWithOrchestratorStoreFallback","Elapsed":0} +{"Time":"2026-07-11T04:02:12.5228407+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWriteLint_T035_FlagOff_LegacyPath"} +{"Time":"2026-07-11T04:02:12.5228407+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWriteLint_T035_FlagOff_LegacyPath","Output":"=== RUN TestWriteLint_T035_FlagOff_LegacyPath\n"} +{"Time":"2026-07-11T04:02:12.5228407+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWriteLint_T035_FlagOff_LegacyPath","Output":"--- PASS: TestWriteLint_T035_FlagOff_LegacyPath (0.00s)\n"} +{"Time":"2026-07-11T04:02:12.5228407+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWriteLint_T035_FlagOff_LegacyPath","Elapsed":0} +{"Time":"2026-07-11T04:02:12.5228407+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWriteLint_T035_Phase1_SignalsReturned"} +{"Time":"2026-07-11T04:02:12.5228407+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWriteLint_T035_Phase1_SignalsReturned","Output":"=== RUN TestWriteLint_T035_Phase1_SignalsReturned\n"} +{"Time":"2026-07-11T04:02:12.5228407+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWriteLint_T035_Phase1_SignalsReturned","Output":"--- PASS: TestWriteLint_T035_Phase1_SignalsReturned (0.00s)\n"} +{"Time":"2026-07-11T04:02:12.5228407+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWriteLint_T035_Phase1_SignalsReturned","Elapsed":0} +{"Time":"2026-07-11T04:02:12.5228407+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWriteLint_T035_Phase1_NoSignal_Stored"} +{"Time":"2026-07-11T04:02:12.5228407+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWriteLint_T035_Phase1_NoSignal_Stored","Output":"=== RUN TestWriteLint_T035_Phase1_NoSignal_Stored\n"} +{"Time":"2026-07-11T04:02:12.5228407+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWriteLint_T035_Phase1_NoSignal_Stored","Output":"--- PASS: TestWriteLint_T035_Phase1_NoSignal_Stored (0.00s)\n"} +{"Time":"2026-07-11T04:02:12.5228407+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWriteLint_T035_Phase1_NoSignal_Stored","Elapsed":0} +{"Time":"2026-07-11T04:02:12.5228407+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWriteLint_T035_Phase2_MergeWith"} +{"Time":"2026-07-11T04:02:12.5228407+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWriteLint_T035_Phase2_MergeWith","Output":"=== RUN TestWriteLint_T035_Phase2_MergeWith\n"} +{"Time":"2026-07-11T04:02:12.5228407+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWriteLint_T035_Phase2_MergeWith","Output":"--- PASS: TestWriteLint_T035_Phase2_MergeWith (0.00s)\n"} +{"Time":"2026-07-11T04:02:12.5228407+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWriteLint_T035_Phase2_MergeWith","Elapsed":0} +{"Time":"2026-07-11T04:02:12.5228407+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWriteLint_T035_ForceBypass"} +{"Time":"2026-07-11T04:02:12.5228407+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWriteLint_T035_ForceBypass","Output":"=== RUN TestWriteLint_T035_ForceBypass\n"} +{"Time":"2026-07-11T04:02:12.5233408+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWriteLint_T035_ForceBypass","Output":"--- PASS: TestWriteLint_T035_ForceBypass (0.00s)\n"} +{"Time":"2026-07-11T04:02:12.5233408+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWriteLint_T035_ForceBypass","Elapsed":0} +{"Time":"2026-07-11T04:02:12.5233408+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWriteLint_T035_TokenExpired"} +{"Time":"2026-07-11T04:02:12.5233408+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWriteLint_T035_TokenExpired","Output":"=== RUN TestWriteLint_T035_TokenExpired\n"} +{"Time":"2026-07-11T04:02:12.5233408+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWriteLint_T035_TokenExpired","Output":"--- PASS: TestWriteLint_T035_TokenExpired (0.00s)\n"} +{"Time":"2026-07-11T04:02:12.5233408+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWriteLint_T035_TokenExpired","Elapsed":0} +{"Time":"2026-07-11T04:02:12.5233408+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWriteLint_T035_PrivateScope_NoWorkstation_Rejected"} +{"Time":"2026-07-11T04:02:12.5233408+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWriteLint_T035_PrivateScope_NoWorkstation_Rejected","Output":"=== RUN TestWriteLint_T035_PrivateScope_NoWorkstation_Rejected\n"} +{"Time":"2026-07-11T04:02:12.5233408+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWriteLint_T035_PrivateScope_NoWorkstation_Rejected","Output":"--- PASS: TestWriteLint_T035_PrivateScope_NoWorkstation_Rejected (0.00s)\n"} +{"Time":"2026-07-11T04:02:12.5233408+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWriteLint_T035_PrivateScope_NoWorkstation_Rejected","Elapsed":0} +{"Time":"2026-07-11T04:02:12.5233408+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWriteLint_T035_PrivateScope_WithWorkstation_Allowed"} +{"Time":"2026-07-11T04:02:12.5233408+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWriteLint_T035_PrivateScope_WithWorkstation_Allowed","Output":"=== RUN TestWriteLint_T035_PrivateScope_WithWorkstation_Allowed\n"} +{"Time":"2026-07-11T04:02:12.5233408+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWriteLint_T035_PrivateScope_WithWorkstation_Allowed","Output":"--- PASS: TestWriteLint_T035_PrivateScope_WithWorkstation_Allowed (0.00s)\n"} +{"Time":"2026-07-11T04:02:12.5233408+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWriteLint_T035_PrivateScope_WithWorkstation_Allowed","Elapsed":0} +{"Time":"2026-07-11T04:02:12.5233408+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestKnowAbout_T005_PopulatedTopicReturnsContentFreeIndexHits"} +{"Time":"2026-07-11T04:02:12.5233408+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestKnowAbout_T005_PopulatedTopicReturnsContentFreeIndexHits","Output":"=== RUN TestKnowAbout_T005_PopulatedTopicReturnsContentFreeIndexHits\n"} +{"Time":"2026-07-11T04:02:12.5233408+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestKnowAbout_T005_PopulatedTopicReturnsContentFreeIndexHits","Output":"--- PASS: TestKnowAbout_T005_PopulatedTopicReturnsContentFreeIndexHits (0.00s)\n"} +{"Time":"2026-07-11T04:02:12.5233408+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestKnowAbout_T005_PopulatedTopicReturnsContentFreeIndexHits","Elapsed":0} +{"Time":"2026-07-11T04:02:12.5233408+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestKnowAbout_T005_MissingTopicReturnsEmptyIndexPacket"} +{"Time":"2026-07-11T04:02:12.5233408+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestKnowAbout_T005_MissingTopicReturnsEmptyIndexPacket","Output":"=== RUN TestKnowAbout_T005_MissingTopicReturnsEmptyIndexPacket\n"} +{"Time":"2026-07-11T04:02:12.5238409+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestKnowAbout_T005_MissingTopicReturnsEmptyIndexPacket","Output":"--- PASS: TestKnowAbout_T005_MissingTopicReturnsEmptyIndexPacket (0.00s)\n"} +{"Time":"2026-07-11T04:02:12.5238409+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestKnowAbout_T005_MissingTopicReturnsEmptyIndexPacket","Elapsed":0} +{"Time":"2026-07-11T04:02:12.5238409+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestKnowAbout_T005_ProjectFallbackFailureRequiresProjectScope"} +{"Time":"2026-07-11T04:02:12.5238409+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestKnowAbout_T005_ProjectFallbackFailureRequiresProjectScope","Output":"=== RUN TestKnowAbout_T005_ProjectFallbackFailureRequiresProjectScope\n"} +{"Time":"2026-07-11T04:02:12.5238409+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestKnowAbout_T005_ProjectFallbackFailureRequiresProjectScope","Output":"--- PASS: TestKnowAbout_T005_ProjectFallbackFailureRequiresProjectScope (0.00s)\n"} +{"Time":"2026-07-11T04:02:12.5238409+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestKnowAbout_T005_ProjectFallbackFailureRequiresProjectScope","Elapsed":0} +{"Time":"2026-07-11T04:02:12.5238409+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestKnowAbout_T005_RequiresPrincipalScopedIdentity"} +{"Time":"2026-07-11T04:02:12.5238409+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestKnowAbout_T005_RequiresPrincipalScopedIdentity","Output":"=== RUN TestKnowAbout_T005_RequiresPrincipalScopedIdentity\n"} +{"Time":"2026-07-11T04:02:12.5238409+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestKnowAbout_T005_RequiresPrincipalScopedIdentity/master_token_without_principal_is_rejected"} +{"Time":"2026-07-11T04:02:12.5238409+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestKnowAbout_T005_RequiresPrincipalScopedIdentity/master_token_without_principal_is_rejected","Output":"=== RUN TestKnowAbout_T005_RequiresPrincipalScopedIdentity/master_token_without_principal_is_rejected\n"} +{"Time":"2026-07-11T04:02:12.5238409+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestKnowAbout_T005_RequiresPrincipalScopedIdentity/master_token_without_principal_is_rejected","Output":"--- PASS: TestKnowAbout_T005_RequiresPrincipalScopedIdentity/master_token_without_principal_is_rejected (0.00s)\n"} +{"Time":"2026-07-11T04:02:12.5238409+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestKnowAbout_T005_RequiresPrincipalScopedIdentity/master_token_without_principal_is_rejected","Elapsed":0} +{"Time":"2026-07-11T04:02:12.5238409+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestKnowAbout_T005_RequiresPrincipalScopedIdentity/legacy_client_keycard_without_principal_is_rejected"} +{"Time":"2026-07-11T04:02:12.5238409+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestKnowAbout_T005_RequiresPrincipalScopedIdentity/legacy_client_keycard_without_principal_is_rejected","Output":"=== RUN TestKnowAbout_T005_RequiresPrincipalScopedIdentity/legacy_client_keycard_without_principal_is_rejected\n"} +{"Time":"2026-07-11T04:02:12.5238409+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestKnowAbout_T005_RequiresPrincipalScopedIdentity/legacy_client_keycard_without_principal_is_rejected","Output":"--- PASS: TestKnowAbout_T005_RequiresPrincipalScopedIdentity/legacy_client_keycard_without_principal_is_rejected (0.00s)\n"} +{"Time":"2026-07-11T04:02:12.5238409+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestKnowAbout_T005_RequiresPrincipalScopedIdentity/legacy_client_keycard_without_principal_is_rejected","Elapsed":0} +{"Time":"2026-07-11T04:02:12.5238409+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestKnowAbout_T005_RequiresPrincipalScopedIdentity","Output":"--- PASS: TestKnowAbout_T005_RequiresPrincipalScopedIdentity (0.00s)\n"} +{"Time":"2026-07-11T04:02:12.5238409+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestKnowAbout_T005_RequiresPrincipalScopedIdentity","Elapsed":0} +{"Time":"2026-07-11T04:02:12.5238409+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestKnowAbout_T005_ContextProjectFallbackAndLimitClamp"} +{"Time":"2026-07-11T04:02:12.5238409+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestKnowAbout_T005_ContextProjectFallbackAndLimitClamp","Output":"=== RUN TestKnowAbout_T005_ContextProjectFallbackAndLimitClamp\n"} +{"Time":"2026-07-11T04:02:12.5238409+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestKnowAbout_T005_ContextProjectFallbackAndLimitClamp","Output":"--- PASS: TestKnowAbout_T005_ContextProjectFallbackAndLimitClamp (0.00s)\n"} +{"Time":"2026-07-11T04:02:12.5238409+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestKnowAbout_T005_ContextProjectFallbackAndLimitClamp","Elapsed":0} +{"Time":"2026-07-11T04:02:12.5238409+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestKnowAbout_T005_RealStoreCanonicalShapeAndMissingTopicEmptyPacket"} +{"Time":"2026-07-11T04:02:12.5238409+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestKnowAbout_T005_RealStoreCanonicalShapeAndMissingTopicEmptyPacket","Output":"=== RUN TestKnowAbout_T005_RealStoreCanonicalShapeAndMissingTopicEmptyPacket\n"} +{"Time":"2026-07-11T04:02:12.6402574+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestKnowAbout_T005_RealStoreCanonicalShapeAndMissingTopicEmptyPacket","Output":"{\"level\":\"debug\",\"connections\":1,\"time\":\"2026-07-11T04:02:12+03:00\",\"message\":\"Connection pool warmed\"}\n"} +{"Time":"2026-07-11T04:02:12.6657589+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestKnowAbout_T005_RealStoreCanonicalShapeAndMissingTopicEmptyPacket","Output":"--- PASS: TestKnowAbout_T005_RealStoreCanonicalShapeAndMissingTopicEmptyPacket (0.14s)\n"} +{"Time":"2026-07-11T04:02:12.6657589+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestKnowAbout_T005_RealStoreCanonicalShapeAndMissingTopicEmptyPacket","Elapsed":0.14} +{"Time":"2026-07-11T04:02:12.6657589+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestKnowAbout_T005_DisabledS2NotAdvertised"} +{"Time":"2026-07-11T04:02:12.6657589+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestKnowAbout_T005_DisabledS2NotAdvertised","Output":"=== RUN TestKnowAbout_T005_DisabledS2NotAdvertised\n"} +{"Time":"2026-07-11T04:02:12.6662544+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestKnowAbout_T005_DisabledS2NotAdvertised","Output":"--- PASS: TestKnowAbout_T005_DisabledS2NotAdvertised (0.00s)\n"} +{"Time":"2026-07-11T04:02:12.6662544+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestKnowAbout_T005_DisabledS2NotAdvertised","Elapsed":0} +{"Time":"2026-07-11T04:02:12.6662544+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestKnowAbout_T014_ToolListRequiresMasterAndS2Flags"} +{"Time":"2026-07-11T04:02:12.6662544+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestKnowAbout_T014_ToolListRequiresMasterAndS2Flags","Output":"=== RUN TestKnowAbout_T014_ToolListRequiresMasterAndS2Flags\n"} +{"Time":"2026-07-11T04:02:12.6662544+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestKnowAbout_T014_ToolListRequiresMasterAndS2Flags/master_and_s2_enabled_advertises_know_about"} +{"Time":"2026-07-11T04:02:12.6662544+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestKnowAbout_T014_ToolListRequiresMasterAndS2Flags/master_and_s2_enabled_advertises_know_about","Output":"=== RUN TestKnowAbout_T014_ToolListRequiresMasterAndS2Flags/master_and_s2_enabled_advertises_know_about\n"} +{"Time":"2026-07-11T04:02:12.6662544+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestKnowAbout_T014_ToolListRequiresMasterAndS2Flags/master_and_s2_enabled_advertises_know_about","Output":"--- PASS: TestKnowAbout_T014_ToolListRequiresMasterAndS2Flags/master_and_s2_enabled_advertises_know_about (0.00s)\n"} +{"Time":"2026-07-11T04:02:12.6662544+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestKnowAbout_T014_ToolListRequiresMasterAndS2Flags/master_and_s2_enabled_advertises_know_about","Elapsed":0} +{"Time":"2026-07-11T04:02:12.6662544+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestKnowAbout_T014_ToolListRequiresMasterAndS2Flags/master_disabled_suppresses_know_about_even_when_s2_flag_is_set"} +{"Time":"2026-07-11T04:02:12.6662544+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestKnowAbout_T014_ToolListRequiresMasterAndS2Flags/master_disabled_suppresses_know_about_even_when_s2_flag_is_set","Output":"=== RUN TestKnowAbout_T014_ToolListRequiresMasterAndS2Flags/master_disabled_suppresses_know_about_even_when_s2_flag_is_set\n"} +{"Time":"2026-07-11T04:02:12.6667536+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestKnowAbout_T014_ToolListRequiresMasterAndS2Flags/master_disabled_suppresses_know_about_even_when_s2_flag_is_set","Output":"--- PASS: TestKnowAbout_T014_ToolListRequiresMasterAndS2Flags/master_disabled_suppresses_know_about_even_when_s2_flag_is_set (0.00s)\n"} +{"Time":"2026-07-11T04:02:12.6667536+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestKnowAbout_T014_ToolListRequiresMasterAndS2Flags/master_disabled_suppresses_know_about_even_when_s2_flag_is_set","Elapsed":0} +{"Time":"2026-07-11T04:02:12.6667536+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestKnowAbout_T014_ToolListRequiresMasterAndS2Flags/s2_disabled_suppresses_know_about_even_when_master_is_set"} +{"Time":"2026-07-11T04:02:12.6667536+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestKnowAbout_T014_ToolListRequiresMasterAndS2Flags/s2_disabled_suppresses_know_about_even_when_master_is_set","Output":"=== RUN TestKnowAbout_T014_ToolListRequiresMasterAndS2Flags/s2_disabled_suppresses_know_about_even_when_master_is_set\n"} +{"Time":"2026-07-11T04:02:12.6667536+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestKnowAbout_T014_ToolListRequiresMasterAndS2Flags/s2_disabled_suppresses_know_about_even_when_master_is_set","Output":"--- PASS: TestKnowAbout_T014_ToolListRequiresMasterAndS2Flags/s2_disabled_suppresses_know_about_even_when_master_is_set (0.00s)\n"} +{"Time":"2026-07-11T04:02:12.6667536+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestKnowAbout_T014_ToolListRequiresMasterAndS2Flags/s2_disabled_suppresses_know_about_even_when_master_is_set","Elapsed":0} +{"Time":"2026-07-11T04:02:12.6667536+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestKnowAbout_T014_ToolListRequiresMasterAndS2Flags","Output":"--- PASS: TestKnowAbout_T014_ToolListRequiresMasterAndS2Flags (0.00s)\n"} +{"Time":"2026-07-11T04:02:12.6667536+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestKnowAbout_T014_ToolListRequiresMasterAndS2Flags","Elapsed":0} +{"Time":"2026-07-11T04:02:12.6667536+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestKnowAbout_T005_IndexErrorsSurfaceAsToolErrors"} +{"Time":"2026-07-11T04:02:12.6667536+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestKnowAbout_T005_IndexErrorsSurfaceAsToolErrors","Output":"=== RUN TestKnowAbout_T005_IndexErrorsSurfaceAsToolErrors\n"} +{"Time":"2026-07-11T04:02:12.6667536+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestKnowAbout_T005_IndexErrorsSurfaceAsToolErrors","Output":"--- PASS: TestKnowAbout_T005_IndexErrorsSurfaceAsToolErrors (0.00s)\n"} +{"Time":"2026-07-11T04:02:12.6667536+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestKnowAbout_T005_IndexErrorsSurfaceAsToolErrors","Elapsed":0} +{"Time":"2026-07-11T04:02:12.6667536+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestKnowAbout_T005_JSONNeverContainsContentKeysOrMemoryBodies"} +{"Time":"2026-07-11T04:02:12.6667536+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestKnowAbout_T005_JSONNeverContainsContentKeysOrMemoryBodies","Output":"=== RUN TestKnowAbout_T005_JSONNeverContainsContentKeysOrMemoryBodies\n"} +{"Time":"2026-07-11T04:02:12.6672539+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestKnowAbout_T005_JSONNeverContainsContentKeysOrMemoryBodies","Output":"--- PASS: TestKnowAbout_T005_JSONNeverContainsContentKeysOrMemoryBodies (0.00s)\n"} +{"Time":"2026-07-11T04:02:12.6672539+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestKnowAbout_T005_JSONNeverContainsContentKeysOrMemoryBodies","Elapsed":0} +{"Time":"2026-07-11T04:02:12.6672539+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestQueryPrincipalMemory_ToolSchemaAdvertised"} +{"Time":"2026-07-11T04:02:12.6672539+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestQueryPrincipalMemory_ToolSchemaAdvertised","Output":"=== RUN TestQueryPrincipalMemory_ToolSchemaAdvertised\n"} +{"Time":"2026-07-11T04:02:12.6672539+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestQueryPrincipalMemory_ToolSchemaAdvertised","Output":"--- PASS: TestQueryPrincipalMemory_ToolSchemaAdvertised (0.00s)\n"} +{"Time":"2026-07-11T04:02:12.6672539+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestQueryPrincipalMemory_ToolSchemaAdvertised","Elapsed":0} +{"Time":"2026-07-11T04:02:12.6672539+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestQueryPrincipalMemory_ResponseAndValidation"} +{"Time":"2026-07-11T04:02:12.6672539+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestQueryPrincipalMemory_ResponseAndValidation","Output":"=== RUN TestQueryPrincipalMemory_ResponseAndValidation\n"} +{"Time":"2026-07-11T04:02:12.6672539+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestQueryPrincipalMemory_ResponseAndValidation/returns_attributed_bounded_principal_memory_response"} +{"Time":"2026-07-11T04:02:12.6672539+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestQueryPrincipalMemory_ResponseAndValidation/returns_attributed_bounded_principal_memory_response","Output":"=== RUN TestQueryPrincipalMemory_ResponseAndValidation/returns_attributed_bounded_principal_memory_response\n"} +{"Time":"2026-07-11T04:02:12.6672539+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestQueryPrincipalMemory_ResponseAndValidation/returns_attributed_bounded_principal_memory_response","Output":"--- PASS: TestQueryPrincipalMemory_ResponseAndValidation/returns_attributed_bounded_principal_memory_response (0.00s)\n"} +{"Time":"2026-07-11T04:02:12.6672539+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestQueryPrincipalMemory_ResponseAndValidation/returns_attributed_bounded_principal_memory_response","Elapsed":0} +{"Time":"2026-07-11T04:02:12.6672539+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestQueryPrincipalMemory_ResponseAndValidation/rejects_invalid_principal_kind"} +{"Time":"2026-07-11T04:02:12.6672539+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestQueryPrincipalMemory_ResponseAndValidation/rejects_invalid_principal_kind","Output":"=== RUN TestQueryPrincipalMemory_ResponseAndValidation/rejects_invalid_principal_kind\n"} +{"Time":"2026-07-11T04:02:12.6672539+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestQueryPrincipalMemory_ResponseAndValidation/rejects_invalid_principal_kind","Output":"--- PASS: TestQueryPrincipalMemory_ResponseAndValidation/rejects_invalid_principal_kind (0.00s)\n"} +{"Time":"2026-07-11T04:02:12.6672539+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestQueryPrincipalMemory_ResponseAndValidation/rejects_invalid_principal_kind","Elapsed":0} +{"Time":"2026-07-11T04:02:12.6672539+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestQueryPrincipalMemory_ResponseAndValidation/rejects_oversized_limit_clearly"} +{"Time":"2026-07-11T04:02:12.6672539+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestQueryPrincipalMemory_ResponseAndValidation/rejects_oversized_limit_clearly","Output":"=== RUN TestQueryPrincipalMemory_ResponseAndValidation/rejects_oversized_limit_clearly\n"} +{"Time":"2026-07-11T04:02:12.6672539+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestQueryPrincipalMemory_ResponseAndValidation/rejects_oversized_limit_clearly","Output":"--- PASS: TestQueryPrincipalMemory_ResponseAndValidation/rejects_oversized_limit_clearly (0.00s)\n"} +{"Time":"2026-07-11T04:02:12.6672539+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestQueryPrincipalMemory_ResponseAndValidation/rejects_oversized_limit_clearly","Elapsed":0} +{"Time":"2026-07-11T04:02:12.6672539+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestQueryPrincipalMemory_ResponseAndValidation/rejects_non-admin_cross-principal_private_widening"} +{"Time":"2026-07-11T04:02:12.6672539+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestQueryPrincipalMemory_ResponseAndValidation/rejects_non-admin_cross-principal_private_widening","Output":"=== RUN TestQueryPrincipalMemory_ResponseAndValidation/rejects_non-admin_cross-principal_private_widening\n"} +{"Time":"2026-07-11T04:02:12.6672539+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestQueryPrincipalMemory_ResponseAndValidation/rejects_non-admin_cross-principal_private_widening","Output":"--- PASS: TestQueryPrincipalMemory_ResponseAndValidation/rejects_non-admin_cross-principal_private_widening (0.00s)\n"} +{"Time":"2026-07-11T04:02:12.6672539+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestQueryPrincipalMemory_ResponseAndValidation/rejects_non-admin_cross-principal_private_widening","Elapsed":0} +{"Time":"2026-07-11T04:02:12.6672539+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestQueryPrincipalMemory_ResponseAndValidation","Output":"--- PASS: TestQueryPrincipalMemory_ResponseAndValidation (0.00s)\n"} +{"Time":"2026-07-11T04:02:12.6672539+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestQueryPrincipalMemory_ResponseAndValidation","Elapsed":0} +{"Time":"2026-07-11T04:02:12.6672539+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestQueryPrincipalMemory_ServiceErrorsPropagate"} +{"Time":"2026-07-11T04:02:12.6672539+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestQueryPrincipalMemory_ServiceErrorsPropagate","Output":"=== RUN TestQueryPrincipalMemory_ServiceErrorsPropagate\n"} +{"Time":"2026-07-11T04:02:12.6672539+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestQueryPrincipalMemory_ServiceErrorsPropagate","Output":"--- PASS: TestQueryPrincipalMemory_ServiceErrorsPropagate (0.00s)\n"} +{"Time":"2026-07-11T04:02:12.6677546+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestQueryPrincipalMemory_ServiceErrorsPropagate","Elapsed":0} +{"Time":"2026-07-11T04:02:12.6677546+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemory_FlagOFF_SchemaNoVnextParams"} +{"Time":"2026-07-11T04:02:12.6677546+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemory_FlagOFF_SchemaNoVnextParams","Output":"=== RUN TestRecallMemory_FlagOFF_SchemaNoVnextParams\n"} +{"Time":"2026-07-11T04:02:12.6677546+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemory_FlagOFF_SchemaNoVnextParams","Output":"--- PASS: TestRecallMemory_FlagOFF_SchemaNoVnextParams (0.00s)\n"} +{"Time":"2026-07-11T04:02:12.6677546+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemory_FlagOFF_SchemaNoVnextParams","Elapsed":0} +{"Time":"2026-07-11T04:02:12.6677546+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemory_FlagON_SchemaHasVnextParams"} +{"Time":"2026-07-11T04:02:12.6677546+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemory_FlagON_SchemaHasVnextParams","Output":"=== RUN TestRecallMemory_FlagON_SchemaHasVnextParams\n"} +{"Time":"2026-07-11T04:02:12.6677546+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemory_FlagON_SchemaHasVnextParams","Output":"--- PASS: TestRecallMemory_FlagON_SchemaHasVnextParams (0.00s)\n"} +{"Time":"2026-07-11T04:02:12.6677546+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemory_FlagON_SchemaHasVnextParams","Elapsed":0} +{"Time":"2026-07-11T04:02:12.6677546+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemory_FlagMatrix_FEnabled_SchemaHasScopeParams"} +{"Time":"2026-07-11T04:02:12.6677546+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemory_FlagMatrix_FEnabled_SchemaHasScopeParams","Output":"=== RUN TestRecallMemory_FlagMatrix_FEnabled_SchemaHasScopeParams\n"} +{"Time":"2026-07-11T04:02:12.6677546+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemory_FlagMatrix_FEnabled_SchemaHasScopeParams","Output":"--- PASS: TestRecallMemory_FlagMatrix_FEnabled_SchemaHasScopeParams (0.00s)\n"} +{"Time":"2026-07-11T04:02:12.6677546+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemory_FlagMatrix_FEnabled_SchemaHasScopeParams","Elapsed":0} +{"Time":"2026-07-11T04:02:12.6677546+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemory_FlagMatrix_BothEnabled_SchemaCombinesParams"} +{"Time":"2026-07-11T04:02:12.6677546+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemory_FlagMatrix_BothEnabled_SchemaCombinesParams","Output":"=== RUN TestRecallMemory_FlagMatrix_BothEnabled_SchemaCombinesParams\n"} +{"Time":"2026-07-11T04:02:12.6677546+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemory_FlagMatrix_BothEnabled_SchemaCombinesParams","Output":"--- PASS: TestRecallMemory_FlagMatrix_BothEnabled_SchemaCombinesParams (0.00s)\n"} +{"Time":"2026-07-11T04:02:12.6677546+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemory_FlagMatrix_BothEnabled_SchemaCombinesParams","Elapsed":0} +{"Time":"2026-07-11T04:02:12.6677546+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemory_FlagOFF_BehaviorIdentity"} +{"Time":"2026-07-11T04:02:12.6677546+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemory_FlagOFF_BehaviorIdentity","Output":"=== RUN TestRecallMemory_FlagOFF_BehaviorIdentity\n"} +{"Time":"2026-07-11T04:02:12.6677546+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemory_FlagOFF_BehaviorIdentity","Output":"--- PASS: TestRecallMemory_FlagOFF_BehaviorIdentity (0.00s)\n"} +{"Time":"2026-07-11T04:02:12.6677546+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemory_FlagOFF_BehaviorIdentity","Elapsed":0} +{"Time":"2026-07-11T04:02:12.6677546+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecall_FlagOFF_TombstoneStrings_Similar"} +{"Time":"2026-07-11T04:02:12.6677546+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecall_FlagOFF_TombstoneStrings_Similar","Output":"=== RUN TestRecall_FlagOFF_TombstoneStrings_Similar\n"} +{"Time":"2026-07-11T04:02:12.6677546+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecall_FlagOFF_TombstoneStrings_Similar","Output":"--- PASS: TestRecall_FlagOFF_TombstoneStrings_Similar (0.00s)\n"} +{"Time":"2026-07-11T04:02:12.6677546+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecall_FlagOFF_TombstoneStrings_Similar","Elapsed":0} +{"Time":"2026-07-11T04:02:12.6677546+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecall_FlagOFF_TombstoneStrings_Explain"} +{"Time":"2026-07-11T04:02:12.6677546+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecall_FlagOFF_TombstoneStrings_Explain","Output":"=== RUN TestRecall_FlagOFF_TombstoneStrings_Explain\n"} +{"Time":"2026-07-11T04:02:12.6677546+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecall_FlagOFF_TombstoneStrings_Explain","Output":"--- PASS: TestRecall_FlagOFF_TombstoneStrings_Explain (0.00s)\n"} +{"Time":"2026-07-11T04:02:12.6677546+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecall_FlagOFF_TombstoneStrings_Explain","Elapsed":0} +{"Time":"2026-07-11T04:02:12.6677546+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryPrincipalDefault_OwnSharedLegacyVisibleOtherPrivateHidden"} +{"Time":"2026-07-11T04:02:12.6677546+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryPrincipalDefault_OwnSharedLegacyVisibleOtherPrivateHidden","Output":"=== RUN TestRecallMemoryPrincipalDefault_OwnSharedLegacyVisibleOtherPrivateHidden\n"} +{"Time":"2026-07-11T04:02:12.7828182+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryPrincipalDefault_OwnSharedLegacyVisibleOtherPrivateHidden","Output":"{\"level\":\"debug\",\"connections\":1,\"time\":\"2026-07-11T04:02:12+03:00\",\"message\":\"Connection pool warmed\"}\n"} +{"Time":"2026-07-11T04:02:12.8208168+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryPrincipalDefault_OwnSharedLegacyVisibleOtherPrivateHidden","Output":"--- PASS: TestRecallMemoryPrincipalDefault_OwnSharedLegacyVisibleOtherPrivateHidden (0.15s)\n"} +{"Time":"2026-07-11T04:02:12.8208168+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryPrincipalDefault_OwnSharedLegacyVisibleOtherPrivateHidden","Elapsed":0.15} +{"Time":"2026-07-11T04:02:12.8208168+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryIncludePrincipals_SchemaAdvertised"} +{"Time":"2026-07-11T04:02:12.8208168+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryIncludePrincipals_SchemaAdvertised","Output":"=== RUN TestRecallMemoryIncludePrincipals_SchemaAdvertised\n"} +{"Time":"2026-07-11T04:02:12.8208168+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryIncludePrincipals_SchemaAdvertised","Output":"--- PASS: TestRecallMemoryIncludePrincipals_SchemaAdvertised (0.00s)\n"} +{"Time":"2026-07-11T04:02:12.8208168+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryIncludePrincipals_SchemaAdvertised","Elapsed":0} +{"Time":"2026-07-11T04:02:12.8208168+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryIncludePrincipals_ValidationAndPrivacy"} +{"Time":"2026-07-11T04:02:12.8208168+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryIncludePrincipals_ValidationAndPrivacy","Output":"=== RUN TestRecallMemoryIncludePrincipals_ValidationAndPrivacy\n"} +{"Time":"2026-07-11T04:02:12.8208168+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryIncludePrincipals_ValidationAndPrivacy/rejects_duplicate_principals"} +{"Time":"2026-07-11T04:02:12.8208168+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryIncludePrincipals_ValidationAndPrivacy/rejects_duplicate_principals","Output":"=== RUN TestRecallMemoryIncludePrincipals_ValidationAndPrivacy/rejects_duplicate_principals\n"} +{"Time":"2026-07-11T04:02:12.9303639+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryIncludePrincipals_ValidationAndPrivacy/rejects_duplicate_principals","Output":"{\"level\":\"debug\",\"connections\":1,\"time\":\"2026-07-11T04:02:12+03:00\",\"message\":\"Connection pool warmed\"}\n"} +{"Time":"2026-07-11T04:02:12.9368646+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryIncludePrincipals_ValidationAndPrivacy/rejects_duplicate_principals","Output":"--- PASS: TestRecallMemoryIncludePrincipals_ValidationAndPrivacy/rejects_duplicate_principals (0.12s)\n"} +{"Time":"2026-07-11T04:02:12.9368646+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryIncludePrincipals_ValidationAndPrivacy/rejects_duplicate_principals","Elapsed":0.12} +{"Time":"2026-07-11T04:02:12.9368646+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryIncludePrincipals_ValidationAndPrivacy/rejects_blank_and_invalid_principals_clearly"} +{"Time":"2026-07-11T04:02:12.9368646+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryIncludePrincipals_ValidationAndPrivacy/rejects_blank_and_invalid_principals_clearly","Output":"=== RUN TestRecallMemoryIncludePrincipals_ValidationAndPrivacy/rejects_blank_and_invalid_principals_clearly\n"} +{"Time":"2026-07-11T04:02:13.0397484+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryIncludePrincipals_ValidationAndPrivacy/rejects_blank_and_invalid_principals_clearly","Output":"{\"level\":\"debug\",\"connections\":1,\"time\":\"2026-07-11T04:02:13+03:00\",\"message\":\"Connection pool warmed\"}\n"} +{"Time":"2026-07-11T04:02:13.046248+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryIncludePrincipals_ValidationAndPrivacy/rejects_blank_and_invalid_principals_clearly","Output":"--- PASS: TestRecallMemoryIncludePrincipals_ValidationAndPrivacy/rejects_blank_and_invalid_principals_clearly (0.11s)\n"} +{"Time":"2026-07-11T04:02:13.046248+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryIncludePrincipals_ValidationAndPrivacy/rejects_blank_and_invalid_principals_clearly","Elapsed":0.11} +{"Time":"2026-07-11T04:02:13.046248+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryIncludePrincipals_ValidationAndPrivacy/empty_include_list_is_treated_as_absent"} +{"Time":"2026-07-11T04:02:13.046248+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryIncludePrincipals_ValidationAndPrivacy/empty_include_list_is_treated_as_absent","Output":"=== RUN TestRecallMemoryIncludePrincipals_ValidationAndPrivacy/empty_include_list_is_treated_as_absent\n"} +{"Time":"2026-07-11T04:02:13.046248+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryIncludePrincipals_ValidationAndPrivacy/empty_include_list_is_treated_as_absent","Output":"--- PASS: TestRecallMemoryIncludePrincipals_ValidationAndPrivacy/empty_include_list_is_treated_as_absent (0.00s)\n"} +{"Time":"2026-07-11T04:02:13.046248+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryIncludePrincipals_ValidationAndPrivacy/empty_include_list_is_treated_as_absent","Elapsed":0} +{"Time":"2026-07-11T04:02:13.046248+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryIncludePrincipals_ValidationAndPrivacy/self_include_is_allowed_and_deduplicated"} +{"Time":"2026-07-11T04:02:13.046248+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryIncludePrincipals_ValidationAndPrivacy/self_include_is_allowed_and_deduplicated","Output":"=== RUN TestRecallMemoryIncludePrincipals_ValidationAndPrivacy/self_include_is_allowed_and_deduplicated\n"} +{"Time":"2026-07-11T04:02:13.1467363+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryIncludePrincipals_ValidationAndPrivacy/self_include_is_allowed_and_deduplicated","Output":"{\"level\":\"debug\",\"connections\":1,\"time\":\"2026-07-11T04:02:13+03:00\",\"message\":\"Connection pool warmed\"}\n"} +{"Time":"2026-07-11T04:02:13.1682366+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryIncludePrincipals_ValidationAndPrivacy/self_include_is_allowed_and_deduplicated","Output":"--- PASS: TestRecallMemoryIncludePrincipals_ValidationAndPrivacy/self_include_is_allowed_and_deduplicated (0.12s)\n"} +{"Time":"2026-07-11T04:02:13.1682366+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryIncludePrincipals_ValidationAndPrivacy/self_include_is_allowed_and_deduplicated","Elapsed":0.12} +{"Time":"2026-07-11T04:02:13.1682366+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryIncludePrincipals_ValidationAndPrivacy/non-admin_cross-principal_include_skips_private_rows"} +{"Time":"2026-07-11T04:02:13.1682366+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryIncludePrincipals_ValidationAndPrivacy/non-admin_cross-principal_include_skips_private_rows","Output":"=== RUN TestRecallMemoryIncludePrincipals_ValidationAndPrivacy/non-admin_cross-principal_include_skips_private_rows\n"} +{"Time":"2026-07-11T04:02:13.2748078+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryIncludePrincipals_ValidationAndPrivacy/non-admin_cross-principal_include_skips_private_rows","Output":"{\"level\":\"debug\",\"connections\":1,\"time\":\"2026-07-11T04:02:13+03:00\",\"message\":\"Connection pool warmed\"}\n"} +{"Time":"2026-07-11T04:02:13.2960148+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryIncludePrincipals_ValidationAndPrivacy/non-admin_cross-principal_include_skips_private_rows","Output":"--- PASS: TestRecallMemoryIncludePrincipals_ValidationAndPrivacy/non-admin_cross-principal_include_skips_private_rows (0.13s)\n"} +{"Time":"2026-07-11T04:02:13.2960148+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryIncludePrincipals_ValidationAndPrivacy/non-admin_cross-principal_include_skips_private_rows","Elapsed":0.13} +{"Time":"2026-07-11T04:02:13.2960148+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryIncludePrincipals_ValidationAndPrivacy/non-admin_cross-principal_include_appends_shared_rows"} +{"Time":"2026-07-11T04:02:13.2960148+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryIncludePrincipals_ValidationAndPrivacy/non-admin_cross-principal_include_appends_shared_rows","Output":"=== RUN TestRecallMemoryIncludePrincipals_ValidationAndPrivacy/non-admin_cross-principal_include_appends_shared_rows\n"} +{"Time":"2026-07-11T04:02:13.3982505+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryIncludePrincipals_ValidationAndPrivacy/non-admin_cross-principal_include_appends_shared_rows","Output":"{\"level\":\"debug\",\"connections\":1,\"time\":\"2026-07-11T04:02:13+03:00\",\"message\":\"Connection pool warmed\"}\n"} +{"Time":"2026-07-11T04:02:13.4227522+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryIncludePrincipals_ValidationAndPrivacy/non-admin_cross-principal_include_appends_shared_rows","Output":"--- PASS: TestRecallMemoryIncludePrincipals_ValidationAndPrivacy/non-admin_cross-principal_include_appends_shared_rows (0.13s)\n"} +{"Time":"2026-07-11T04:02:13.4227522+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryIncludePrincipals_ValidationAndPrivacy/non-admin_cross-principal_include_appends_shared_rows","Elapsed":0.13} +{"Time":"2026-07-11T04:02:13.4227522+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryIncludePrincipals_ValidationAndPrivacy/admin_cross-private_include_writes_durable_audit_before_returning_private_row"} +{"Time":"2026-07-11T04:02:13.4227522+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryIncludePrincipals_ValidationAndPrivacy/admin_cross-private_include_writes_durable_audit_before_returning_private_row","Output":"=== RUN TestRecallMemoryIncludePrincipals_ValidationAndPrivacy/admin_cross-private_include_writes_durable_audit_before_returning_private_row\n"} +{"Time":"2026-07-11T04:02:13.5277752+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryIncludePrincipals_ValidationAndPrivacy/admin_cross-private_include_writes_durable_audit_before_returning_private_row","Output":"{\"level\":\"debug\",\"connections\":1,\"time\":\"2026-07-11T04:02:13+03:00\",\"message\":\"Connection pool warmed\"}\n"} +{"Time":"2026-07-11T04:02:13.5697083+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryIncludePrincipals_ValidationAndPrivacy/admin_cross-private_include_writes_durable_audit_before_returning_private_row","Output":"--- PASS: TestRecallMemoryIncludePrincipals_ValidationAndPrivacy/admin_cross-private_include_writes_durable_audit_before_returning_private_row (0.15s)\n"} +{"Time":"2026-07-11T04:02:13.5697083+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryIncludePrincipals_ValidationAndPrivacy/admin_cross-private_include_writes_durable_audit_before_returning_private_row","Elapsed":0.15} +{"Time":"2026-07-11T04:02:13.5697083+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryIncludePrincipals_ValidationAndPrivacy/admin_cross-private_include_reapplies_recall_filters"} +{"Time":"2026-07-11T04:02:13.5697083+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryIncludePrincipals_ValidationAndPrivacy/admin_cross-private_include_reapplies_recall_filters","Output":"=== RUN TestRecallMemoryIncludePrincipals_ValidationAndPrivacy/admin_cross-private_include_reapplies_recall_filters\n"} +{"Time":"2026-07-11T04:02:13.680123+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryIncludePrincipals_ValidationAndPrivacy/admin_cross-private_include_reapplies_recall_filters","Output":"{\"level\":\"debug\",\"connections\":1,\"time\":\"2026-07-11T04:02:13+03:00\",\"message\":\"Connection pool warmed\"}\n"} +{"Time":"2026-07-11T04:02:13.7376476+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryIncludePrincipals_ValidationAndPrivacy/admin_cross-private_include_reapplies_recall_filters","Output":"--- PASS: TestRecallMemoryIncludePrincipals_ValidationAndPrivacy/admin_cross-private_include_reapplies_recall_filters (0.17s)\n"} +{"Time":"2026-07-11T04:02:13.7381477+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryIncludePrincipals_ValidationAndPrivacy/admin_cross-private_include_reapplies_recall_filters","Elapsed":0.17} +{"Time":"2026-07-11T04:02:13.7381477+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryIncludePrincipals_ValidationAndPrivacy","Output":"--- PASS: TestRecallMemoryIncludePrincipals_ValidationAndPrivacy (0.92s)\n"} +{"Time":"2026-07-11T04:02:13.7381477+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryIncludePrincipals_ValidationAndPrivacy","Elapsed":0.92} +{"Time":"2026-07-11T04:02:13.7381477+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRuleGovernanceReadToolsAdvertisedWhenStoresWired"} +{"Time":"2026-07-11T04:02:13.7381477+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRuleGovernanceReadToolsAdvertisedWhenStoresWired","Output":"=== RUN TestRuleGovernanceReadToolsAdvertisedWhenStoresWired\n"} +{"Time":"2026-07-11T04:02:13.7381477+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRuleGovernanceReadToolsAdvertisedWhenStoresWired","Output":"--- PASS: TestRuleGovernanceReadToolsAdvertisedWhenStoresWired (0.00s)\n"} +{"Time":"2026-07-11T04:02:13.7381477+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRuleGovernanceReadToolsAdvertisedWhenStoresWired","Elapsed":0} +{"Time":"2026-07-11T04:02:13.7381477+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRuleGovernanceReadToolsHiddenWhenStoreMissing"} +{"Time":"2026-07-11T04:02:13.7381477+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRuleGovernanceReadToolsHiddenWhenStoreMissing","Output":"=== RUN TestRuleGovernanceReadToolsHiddenWhenStoreMissing\n"} +{"Time":"2026-07-11T04:02:13.7381477+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRuleGovernanceReadToolsHiddenWhenStoreMissing","Output":"--- PASS: TestRuleGovernanceReadToolsHiddenWhenStoreMissing (0.00s)\n"} +{"Time":"2026-07-11T04:02:13.7381477+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRuleGovernanceReadToolsHiddenWhenStoreMissing","Elapsed":0} +{"Time":"2026-07-11T04:02:13.7381477+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRuleGovernanceHealthReadOnlyCallerGetsNoData"} +{"Time":"2026-07-11T04:02:13.7381477+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRuleGovernanceHealthReadOnlyCallerGetsNoData","Output":"=== RUN TestRuleGovernanceHealthReadOnlyCallerGetsNoData\n"} +{"Time":"2026-07-11T04:02:13.7381477+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRuleGovernanceHealthReadOnlyCallerGetsNoData","Output":"--- PASS: TestRuleGovernanceHealthReadOnlyCallerGetsNoData (0.00s)\n"} +{"Time":"2026-07-11T04:02:13.7381477+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRuleGovernanceHealthReadOnlyCallerGetsNoData","Elapsed":0} +{"Time":"2026-07-11T04:02:13.7381477+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRuleGovernanceQueueAndSnapshotsReadModels"} +{"Time":"2026-07-11T04:02:13.7381477+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRuleGovernanceQueueAndSnapshotsReadModels","Output":"=== RUN TestRuleGovernanceQueueAndSnapshotsReadModels\n"} +{"Time":"2026-07-11T04:02:13.7386473+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRuleGovernanceQueueAndSnapshotsReadModels","Output":"--- PASS: TestRuleGovernanceQueueAndSnapshotsReadModels (0.00s)\n"} +{"Time":"2026-07-11T04:02:13.7386473+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRuleGovernanceQueueAndSnapshotsReadModels","Elapsed":0} +{"Time":"2026-07-11T04:02:13.7386473+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRuleGovernanceUsefulnessNoDataAndProjectGuard"} +{"Time":"2026-07-11T04:02:13.7386473+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRuleGovernanceUsefulnessNoDataAndProjectGuard","Output":"=== RUN TestRuleGovernanceUsefulnessNoDataAndProjectGuard\n"} +{"Time":"2026-07-11T04:02:13.7386473+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRuleGovernanceUsefulnessNoDataAndProjectGuard","Output":"--- PASS: TestRuleGovernanceUsefulnessNoDataAndProjectGuard (0.00s)\n"} +{"Time":"2026-07-11T04:02:13.7386473+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRuleGovernanceUsefulnessNoDataAndProjectGuard","Elapsed":0} +{"Time":"2026-07-11T04:02:13.7386473+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRuleGovernanceReadToolsRequireProjectForNonAdminAllProjectReads"} +{"Time":"2026-07-11T04:02:13.7386473+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRuleGovernanceReadToolsRequireProjectForNonAdminAllProjectReads","Output":"=== RUN TestRuleGovernanceReadToolsRequireProjectForNonAdminAllProjectReads\n"} +{"Time":"2026-07-11T04:02:13.7386473+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRuleGovernanceReadToolsRequireProjectForNonAdminAllProjectReads","Output":"--- PASS: TestRuleGovernanceReadToolsRequireProjectForNonAdminAllProjectReads (0.00s)\n"} +{"Time":"2026-07-11T04:02:13.7386473+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRuleGovernanceReadToolsRequireProjectForNonAdminAllProjectReads","Elapsed":0} +{"Time":"2026-07-11T04:02:13.7386473+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRuleGovernanceReadToolsNilStoreErrors"} +{"Time":"2026-07-11T04:02:13.7386473+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRuleGovernanceReadToolsNilStoreErrors","Output":"=== RUN TestRuleGovernanceReadToolsNilStoreErrors\n"} +{"Time":"2026-07-11T04:02:13.7386473+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRuleGovernanceReadToolsNilStoreErrors","Output":"--- PASS: TestRuleGovernanceReadToolsNilStoreErrors (0.00s)\n"} +{"Time":"2026-07-11T04:02:13.7386473+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRuleGovernanceReadToolsNilStoreErrors","Elapsed":0} +{"Time":"2026-07-11T04:02:13.7386473+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRuleGovernanceReadToolsRequireIdentityWhenAuthEnabled"} +{"Time":"2026-07-11T04:02:13.7386473+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRuleGovernanceReadToolsRequireIdentityWhenAuthEnabled","Output":"=== RUN TestRuleGovernanceReadToolsRequireIdentityWhenAuthEnabled\n"} +{"Time":"2026-07-11T04:02:13.7386473+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRuleGovernanceReadToolsRequireIdentityWhenAuthEnabled","Output":"--- PASS: TestRuleGovernanceReadToolsRequireIdentityWhenAuthEnabled (0.00s)\n"} +{"Time":"2026-07-11T04:02:13.7386473+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRuleGovernanceReadToolsRequireIdentityWhenAuthEnabled","Elapsed":0} +{"Time":"2026-07-11T04:02:13.7386473+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRuleGovernanceReadToolsRejectZeroIdentity"} +{"Time":"2026-07-11T04:02:13.7386473+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRuleGovernanceReadToolsRejectZeroIdentity","Output":"=== RUN TestRuleGovernanceReadToolsRejectZeroIdentity\n"} +{"Time":"2026-07-11T04:02:13.7386473+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRuleGovernanceReadToolsRejectZeroIdentity","Output":"--- PASS: TestRuleGovernanceReadToolsRejectZeroIdentity (0.00s)\n"} +{"Time":"2026-07-11T04:02:13.7386473+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRuleGovernanceReadToolsRejectZeroIdentity","Elapsed":0} +{"Time":"2026-07-11T04:02:13.7386473+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRuleGovernanceMutationToolsRequireAdmin"} +{"Time":"2026-07-11T04:02:13.7386473+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRuleGovernanceMutationToolsRequireAdmin","Output":"=== RUN TestRuleGovernanceMutationToolsRequireAdmin\n"} +{"Time":"2026-07-11T04:02:13.7386473+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRuleGovernanceMutationToolsRequireAdmin","Output":"--- PASS: TestRuleGovernanceMutationToolsRequireAdmin (0.00s)\n"} +{"Time":"2026-07-11T04:02:13.7386473+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRuleGovernanceMutationToolsRequireAdmin","Elapsed":0} +{"Time":"2026-07-11T04:02:13.7386473+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRuleGovernanceTransitionToolUsesStateMachineStore"} +{"Time":"2026-07-11T04:02:13.7386473+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRuleGovernanceTransitionToolUsesStateMachineStore","Output":"=== RUN TestRuleGovernanceTransitionToolUsesStateMachineStore\n"} +{"Time":"2026-07-11T04:02:13.7386473+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRuleGovernanceTransitionToolUsesStateMachineStore","Output":"--- PASS: TestRuleGovernanceTransitionToolUsesStateMachineStore (0.00s)\n"} +{"Time":"2026-07-11T04:02:13.7386473+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRuleGovernanceTransitionToolUsesStateMachineStore","Elapsed":0} +{"Time":"2026-07-11T04:02:13.7386473+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRuleGovernancePinSnapshotAndRollbackUseRuleGovernanceSnapshots"} +{"Time":"2026-07-11T04:02:13.7386473+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRuleGovernancePinSnapshotAndRollbackUseRuleGovernanceSnapshots","Output":"=== RUN TestRuleGovernancePinSnapshotAndRollbackUseRuleGovernanceSnapshots\n"} +{"Time":"2026-07-11T04:02:13.7386473+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRuleGovernancePinSnapshotAndRollbackUseRuleGovernanceSnapshots","Output":"--- PASS: TestRuleGovernancePinSnapshotAndRollbackUseRuleGovernanceSnapshots (0.00s)\n"} +{"Time":"2026-07-11T04:02:13.7386473+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRuleGovernancePinSnapshotAndRollbackUseRuleGovernanceSnapshots","Elapsed":0} +{"Time":"2026-07-11T04:02:13.7386473+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRuleGovernanceRollbackReturnsStructuredConflictResult"} +{"Time":"2026-07-11T04:02:13.7386473+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRuleGovernanceRollbackReturnsStructuredConflictResult","Output":"=== RUN TestRuleGovernanceRollbackReturnsStructuredConflictResult\n"} +{"Time":"2026-07-11T04:02:13.7386473+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRuleGovernanceRollbackReturnsStructuredConflictResult","Output":"--- PASS: TestRuleGovernanceRollbackReturnsStructuredConflictResult (0.00s)\n"} +{"Time":"2026-07-11T04:02:13.7386473+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRuleGovernanceRollbackReturnsStructuredConflictResult","Elapsed":0} +{"Time":"2026-07-11T04:02:13.7386473+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSettings_SetRequiresAdmin"} +{"Time":"2026-07-11T04:02:13.7386473+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSettings_SetRequiresAdmin","Output":"=== RUN TestSettings_SetRequiresAdmin\n"} +{"Time":"2026-07-11T04:02:13.7386473+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSettings_SetRequiresAdmin","Output":"--- PASS: TestSettings_SetRequiresAdmin (0.00s)\n"} +{"Time":"2026-07-11T04:02:13.7386473+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSettings_SetRequiresAdmin","Elapsed":0} +{"Time":"2026-07-11T04:02:13.7386473+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSettings_DeleteRequiresAdmin"} +{"Time":"2026-07-11T04:02:13.7386473+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSettings_DeleteRequiresAdmin","Output":"=== RUN TestSettings_DeleteRequiresAdmin\n"} +{"Time":"2026-07-11T04:02:13.7386473+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSettings_DeleteRequiresAdmin","Output":"--- PASS: TestSettings_DeleteRequiresAdmin (0.00s)\n"} +{"Time":"2026-07-11T04:02:13.7386473+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSettings_DeleteRequiresAdmin","Elapsed":0} +{"Time":"2026-07-11T04:02:13.7386473+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSettings_SetMissingArgs"} +{"Time":"2026-07-11T04:02:13.7391462+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSettings_SetMissingArgs","Output":"=== RUN TestSettings_SetMissingArgs\n"} +{"Time":"2026-07-11T04:02:13.7391462+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSettings_SetMissingArgs","Output":"--- PASS: TestSettings_SetMissingArgs (0.00s)\n"} +{"Time":"2026-07-11T04:02:13.7391462+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSettings_SetMissingArgs","Elapsed":0} +{"Time":"2026-07-11T04:02:13.7391462+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSettings_UnknownAction"} +{"Time":"2026-07-11T04:02:13.7391462+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSettings_UnknownAction","Output":"=== RUN TestSettings_UnknownAction\n"} +{"Time":"2026-07-11T04:02:13.7391462+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSettings_UnknownAction","Output":"--- PASS: TestSettings_UnknownAction (0.00s)\n"} +{"Time":"2026-07-11T04:02:13.7391462+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSettings_UnknownAction","Elapsed":0} +{"Time":"2026-07-11T04:02:13.7391462+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestIsSecretSettingKey"} +{"Time":"2026-07-11T04:02:13.7391462+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestIsSecretSettingKey","Output":"=== RUN TestIsSecretSettingKey\n"} +{"Time":"2026-07-11T04:02:13.7391462+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestIsSecretSettingKey","Output":"--- PASS: TestIsSecretSettingKey (0.00s)\n"} +{"Time":"2026-07-11T04:02:13.7391462+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestIsSecretSettingKey","Elapsed":0} +{"Time":"2026-07-11T04:02:13.7391462+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRequireAdmin"} +{"Time":"2026-07-11T04:02:13.7391462+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRequireAdmin","Output":"=== RUN TestRequireAdmin\n"} +{"Time":"2026-07-11T04:02:13.7391462+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRequireAdmin","Output":"--- PASS: TestRequireAdmin (0.00s)\n"} +{"Time":"2026-07-11T04:02:13.7391462+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRequireAdmin","Elapsed":0} +{"Time":"2026-07-11T04:02:13.7391462+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStateToolsAdvertisedOnlyWhenNativeStoreIsReachable"} +{"Time":"2026-07-11T04:02:13.7391462+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStateToolsAdvertisedOnlyWhenNativeStoreIsReachable","Output":"=== RUN TestStateToolsAdvertisedOnlyWhenNativeStoreIsReachable\n"} +{"Time":"2026-07-11T04:02:13.7391462+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStateToolsAdvertisedOnlyWhenNativeStoreIsReachable","Output":"--- PASS: TestStateToolsAdvertisedOnlyWhenNativeStoreIsReachable (0.00s)\n"} +{"Time":"2026-07-11T04:02:13.7391462+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStateToolsAdvertisedOnlyWhenNativeStoreIsReachable","Elapsed":0} +{"Time":"2026-07-11T04:02:13.7391462+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSetStateToolWritesNativeSessionAndProjectState"} +{"Time":"2026-07-11T04:02:13.7391462+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSetStateToolWritesNativeSessionAndProjectState","Output":"=== RUN TestSetStateToolWritesNativeSessionAndProjectState\n"} +{"Time":"2026-07-11T04:02:13.7396479+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSetStateToolWritesNativeSessionAndProjectState","Output":"--- PASS: TestSetStateToolWritesNativeSessionAndProjectState (0.00s)\n"} +{"Time":"2026-07-11T04:02:13.7396479+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSetStateToolWritesNativeSessionAndProjectState","Elapsed":0} +{"Time":"2026-07-11T04:02:13.7396479+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSetStateToolRejectsNonAgentProjectWriter"} +{"Time":"2026-07-11T04:02:13.7396479+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSetStateToolRejectsNonAgentProjectWriter","Output":"=== RUN TestSetStateToolRejectsNonAgentProjectWriter\n"} +{"Time":"2026-07-11T04:02:13.7396479+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSetStateToolRejectsNonAgentProjectWriter","Output":"--- PASS: TestSetStateToolRejectsNonAgentProjectWriter (0.00s)\n"} +{"Time":"2026-07-11T04:02:13.7396479+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSetStateToolRejectsNonAgentProjectWriter","Elapsed":0} +{"Time":"2026-07-11T04:02:13.7396479+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSetStateToolRejectsNonObjectSessionSlots"} +{"Time":"2026-07-11T04:02:13.7396479+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSetStateToolRejectsNonObjectSessionSlots","Output":"=== RUN TestSetStateToolRejectsNonObjectSessionSlots\n"} +{"Time":"2026-07-11T04:02:13.7396479+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSetStateToolRejectsNonObjectSessionSlots","Output":"--- PASS: TestSetStateToolRejectsNonObjectSessionSlots (0.00s)\n"} +{"Time":"2026-07-11T04:02:13.7396479+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSetStateToolRejectsNonObjectSessionSlots","Elapsed":0} +{"Time":"2026-07-11T04:02:13.7396479+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSetStateToolRejectsSessionPayloadOver32KB"} +{"Time":"2026-07-11T04:02:13.7396479+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSetStateToolRejectsSessionPayloadOver32KB","Output":"=== RUN TestSetStateToolRejectsSessionPayloadOver32KB\n"} +{"Time":"2026-07-11T04:02:13.7401566+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSetStateToolRejectsSessionPayloadOver32KB","Output":"--- PASS: TestSetStateToolRejectsSessionPayloadOver32KB (0.00s)\n"} +{"Time":"2026-07-11T04:02:13.7401566+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSetStateToolRejectsSessionPayloadOver32KB","Elapsed":0} +{"Time":"2026-07-11T04:02:13.7401566+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSetStateThenGetStateResumeUsesServerCallPath"} +{"Time":"2026-07-11T04:02:13.7401566+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSetStateThenGetStateResumeUsesServerCallPath","Output":"=== RUN TestSetStateThenGetStateResumeUsesServerCallPath\n"} +{"Time":"2026-07-11T04:02:13.7406467+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSetStateThenGetStateResumeUsesServerCallPath","Output":"--- PASS: TestSetStateThenGetStateResumeUsesServerCallPath (0.00s)\n"} +{"Time":"2026-07-11T04:02:13.7406467+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSetStateThenGetStateResumeUsesServerCallPath","Elapsed":0} +{"Time":"2026-07-11T04:02:13.7406467+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetStateToolSessionDoesNotRequirePrincipal"} +{"Time":"2026-07-11T04:02:13.7406467+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetStateToolSessionDoesNotRequirePrincipal","Output":"=== RUN TestGetStateToolSessionDoesNotRequirePrincipal\n"} +{"Time":"2026-07-11T04:02:13.7406467+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetStateToolSessionDoesNotRequirePrincipal","Output":"--- PASS: TestGetStateToolSessionDoesNotRequirePrincipal (0.00s)\n"} +{"Time":"2026-07-11T04:02:13.7406467+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetStateToolSessionDoesNotRequirePrincipal","Elapsed":0} +{"Time":"2026-07-11T04:02:13.7406467+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetStateToolProjectDoesNotRequirePrincipal"} +{"Time":"2026-07-11T04:02:13.7406467+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetStateToolProjectDoesNotRequirePrincipal","Output":"=== RUN TestGetStateToolProjectDoesNotRequirePrincipal\n"} +{"Time":"2026-07-11T04:02:13.7406467+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetStateToolProjectDoesNotRequirePrincipal","Output":"--- PASS: TestGetStateToolProjectDoesNotRequirePrincipal (0.00s)\n"} +{"Time":"2026-07-11T04:02:13.7406467+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetStateToolProjectDoesNotRequirePrincipal","Elapsed":0} +{"Time":"2026-07-11T04:02:13.7406467+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetStateToolResumeReturnsNativePacket"} +{"Time":"2026-07-11T04:02:13.7406467+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetStateToolResumeReturnsNativePacket","Output":"=== RUN TestGetStateToolResumeReturnsNativePacket\n"} +{"Time":"2026-07-11T04:02:13.7406467+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetStateToolResumeReturnsNativePacket","Output":"--- PASS: TestGetStateToolResumeReturnsNativePacket (0.00s)\n"} +{"Time":"2026-07-11T04:02:13.7406467+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetStateToolResumeReturnsNativePacket","Elapsed":0} +{"Time":"2026-07-11T04:02:13.7406467+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetStateToolResumeSupportsExplicitProjectOnlyScope"} +{"Time":"2026-07-11T04:02:13.7406467+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetStateToolResumeSupportsExplicitProjectOnlyScope","Output":"=== RUN TestGetStateToolResumeSupportsExplicitProjectOnlyScope\n"} +{"Time":"2026-07-11T04:02:13.7406467+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetStateToolResumeSupportsExplicitProjectOnlyScope","Output":"--- PASS: TestGetStateToolResumeSupportsExplicitProjectOnlyScope (0.00s)\n"} +{"Time":"2026-07-11T04:02:13.7406467+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetStateToolResumeSupportsExplicitProjectOnlyScope","Elapsed":0} +{"Time":"2026-07-11T04:02:13.7406467+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetStateToolResumeRejectsFallbackMasqueradingAsNative"} +{"Time":"2026-07-11T04:02:13.7406467+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetStateToolResumeRejectsFallbackMasqueradingAsNative","Output":"=== RUN TestGetStateToolResumeRejectsFallbackMasqueradingAsNative\n"} +{"Time":"2026-07-11T04:02:13.7406467+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetStateToolResumeRejectsFallbackMasqueradingAsNative","Output":"--- PASS: TestGetStateToolResumeRejectsFallbackMasqueradingAsNative (0.00s)\n"} +{"Time":"2026-07-11T04:02:13.7406467+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetStateToolResumeRejectsFallbackMasqueradingAsNative","Elapsed":0} +{"Time":"2026-07-11T04:02:13.7406467+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetStateToolResumeRejectsMissingEvidenceRefs"} +{"Time":"2026-07-11T04:02:13.7406467+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetStateToolResumeRejectsMissingEvidenceRefs","Output":"=== RUN TestGetStateToolResumeRejectsMissingEvidenceRefs\n"} +{"Time":"2026-07-11T04:02:13.7406467+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetStateToolResumeRejectsMissingEvidenceRefs","Output":"--- PASS: TestGetStateToolResumeRejectsMissingEvidenceRefs (0.00s)\n"} +{"Time":"2026-07-11T04:02:13.7406467+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetStateToolResumeRejectsMissingEvidenceRefs","Elapsed":0} +{"Time":"2026-07-11T04:02:13.7406467+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetStateToolResumeRejectsPacketIdentityMismatch"} +{"Time":"2026-07-11T04:02:13.7406467+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetStateToolResumeRejectsPacketIdentityMismatch","Output":"=== RUN TestGetStateToolResumeRejectsPacketIdentityMismatch\n"} +{"Time":"2026-07-11T04:02:13.7406467+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetStateToolResumeRejectsPacketIdentityMismatch","Output":"--- PASS: TestGetStateToolResumeRejectsPacketIdentityMismatch (0.00s)\n"} +{"Time":"2026-07-11T04:02:13.7406467+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetStateToolResumeRejectsPacketIdentityMismatch","Elapsed":0} +{"Time":"2026-07-11T04:02:13.7406467+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetStateToolResumeRejectsAdditionalIdentityMismatches"} +{"Time":"2026-07-11T04:02:13.7406467+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetStateToolResumeRejectsAdditionalIdentityMismatches","Output":"=== RUN TestGetStateToolResumeRejectsAdditionalIdentityMismatches\n"} +{"Time":"2026-07-11T04:02:13.7406467+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetStateToolResumeRejectsAdditionalIdentityMismatches/project_mismatch"} +{"Time":"2026-07-11T04:02:13.7406467+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetStateToolResumeRejectsAdditionalIdentityMismatches/project_mismatch","Output":"=== RUN TestGetStateToolResumeRejectsAdditionalIdentityMismatches/project_mismatch\n"} +{"Time":"2026-07-11T04:02:13.7406467+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetStateToolResumeRejectsAdditionalIdentityMismatches/project_mismatch","Output":"--- PASS: TestGetStateToolResumeRejectsAdditionalIdentityMismatches/project_mismatch (0.00s)\n"} +{"Time":"2026-07-11T04:02:13.7406467+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetStateToolResumeRejectsAdditionalIdentityMismatches/project_mismatch","Elapsed":0} +{"Time":"2026-07-11T04:02:13.7406467+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetStateToolResumeRejectsAdditionalIdentityMismatches/session_mismatch"} +{"Time":"2026-07-11T04:02:13.7406467+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetStateToolResumeRejectsAdditionalIdentityMismatches/session_mismatch","Output":"=== RUN TestGetStateToolResumeRejectsAdditionalIdentityMismatches/session_mismatch\n"} +{"Time":"2026-07-11T04:02:13.7406467+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetStateToolResumeRejectsAdditionalIdentityMismatches/session_mismatch","Output":"--- PASS: TestGetStateToolResumeRejectsAdditionalIdentityMismatches/session_mismatch (0.00s)\n"} +{"Time":"2026-07-11T04:02:13.7406467+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetStateToolResumeRejectsAdditionalIdentityMismatches/session_mismatch","Elapsed":0} +{"Time":"2026-07-11T04:02:13.7406467+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetStateToolResumeRejectsAdditionalIdentityMismatches/goal_mismatch"} +{"Time":"2026-07-11T04:02:13.7406467+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetStateToolResumeRejectsAdditionalIdentityMismatches/goal_mismatch","Output":"=== RUN TestGetStateToolResumeRejectsAdditionalIdentityMismatches/goal_mismatch\n"} +{"Time":"2026-07-11T04:02:13.7406467+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetStateToolResumeRejectsAdditionalIdentityMismatches/goal_mismatch","Output":"--- PASS: TestGetStateToolResumeRejectsAdditionalIdentityMismatches/goal_mismatch (0.00s)\n"} +{"Time":"2026-07-11T04:02:13.7406467+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetStateToolResumeRejectsAdditionalIdentityMismatches/goal_mismatch","Elapsed":0} +{"Time":"2026-07-11T04:02:13.7406467+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetStateToolResumeRejectsAdditionalIdentityMismatches/task_mismatch"} +{"Time":"2026-07-11T04:02:13.7406467+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetStateToolResumeRejectsAdditionalIdentityMismatches/task_mismatch","Output":"=== RUN TestGetStateToolResumeRejectsAdditionalIdentityMismatches/task_mismatch\n"} +{"Time":"2026-07-11T04:02:13.7406467+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetStateToolResumeRejectsAdditionalIdentityMismatches/task_mismatch","Output":"--- PASS: TestGetStateToolResumeRejectsAdditionalIdentityMismatches/task_mismatch (0.00s)\n"} +{"Time":"2026-07-11T04:02:13.7406467+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetStateToolResumeRejectsAdditionalIdentityMismatches/task_mismatch","Elapsed":0} +{"Time":"2026-07-11T04:02:13.7406467+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetStateToolResumeRejectsAdditionalIdentityMismatches/missing_next_action_kind"} +{"Time":"2026-07-11T04:02:13.7406467+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetStateToolResumeRejectsAdditionalIdentityMismatches/missing_next_action_kind","Output":"=== RUN TestGetStateToolResumeRejectsAdditionalIdentityMismatches/missing_next_action_kind\n"} +{"Time":"2026-07-11T04:02:13.7406467+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetStateToolResumeRejectsAdditionalIdentityMismatches/missing_next_action_kind","Output":"--- PASS: TestGetStateToolResumeRejectsAdditionalIdentityMismatches/missing_next_action_kind (0.00s)\n"} +{"Time":"2026-07-11T04:02:13.7406467+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetStateToolResumeRejectsAdditionalIdentityMismatches/missing_next_action_kind","Elapsed":0} +{"Time":"2026-07-11T04:02:13.7406467+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetStateToolResumeRejectsAdditionalIdentityMismatches/missing_next_action_command"} +{"Time":"2026-07-11T04:02:13.7406467+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetStateToolResumeRejectsAdditionalIdentityMismatches/missing_next_action_command","Output":"=== RUN TestGetStateToolResumeRejectsAdditionalIdentityMismatches/missing_next_action_command\n"} +{"Time":"2026-07-11T04:02:13.7406467+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetStateToolResumeRejectsAdditionalIdentityMismatches/missing_next_action_command","Output":"--- PASS: TestGetStateToolResumeRejectsAdditionalIdentityMismatches/missing_next_action_command (0.00s)\n"} +{"Time":"2026-07-11T04:02:13.7406467+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetStateToolResumeRejectsAdditionalIdentityMismatches/missing_next_action_command","Elapsed":0} +{"Time":"2026-07-11T04:02:13.7406467+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetStateToolResumeRejectsAdditionalIdentityMismatches/missing_next_verification_kind"} +{"Time":"2026-07-11T04:02:13.7406467+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetStateToolResumeRejectsAdditionalIdentityMismatches/missing_next_verification_kind","Output":"=== RUN TestGetStateToolResumeRejectsAdditionalIdentityMismatches/missing_next_verification_kind\n"} +{"Time":"2026-07-11T04:02:13.7406467+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetStateToolResumeRejectsAdditionalIdentityMismatches/missing_next_verification_kind","Output":"--- PASS: TestGetStateToolResumeRejectsAdditionalIdentityMismatches/missing_next_verification_kind (0.00s)\n"} +{"Time":"2026-07-11T04:02:13.7406467+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetStateToolResumeRejectsAdditionalIdentityMismatches/missing_next_verification_kind","Elapsed":0} +{"Time":"2026-07-11T04:02:13.7406467+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetStateToolResumeRejectsAdditionalIdentityMismatches/missing_next_verification_command"} +{"Time":"2026-07-11T04:02:13.7406467+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetStateToolResumeRejectsAdditionalIdentityMismatches/missing_next_verification_command","Output":"=== RUN TestGetStateToolResumeRejectsAdditionalIdentityMismatches/missing_next_verification_command\n"} +{"Time":"2026-07-11T04:02:13.7406467+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetStateToolResumeRejectsAdditionalIdentityMismatches/missing_next_verification_command","Output":"--- PASS: TestGetStateToolResumeRejectsAdditionalIdentityMismatches/missing_next_verification_command (0.00s)\n"} +{"Time":"2026-07-11T04:02:13.7406467+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetStateToolResumeRejectsAdditionalIdentityMismatches/missing_next_verification_command","Elapsed":0} +{"Time":"2026-07-11T04:02:13.7406467+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetStateToolResumeRejectsAdditionalIdentityMismatches","Output":"--- PASS: TestGetStateToolResumeRejectsAdditionalIdentityMismatches (0.00s)\n"} +{"Time":"2026-07-11T04:02:13.7406467+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetStateToolResumeRejectsAdditionalIdentityMismatches","Elapsed":0} +{"Time":"2026-07-11T04:02:13.7406467+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetStateToolRejectsFilesystemFallbackOption"} +{"Time":"2026-07-11T04:02:13.7406467+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetStateToolRejectsFilesystemFallbackOption","Output":"=== RUN TestGetStateToolRejectsFilesystemFallbackOption\n"} +{"Time":"2026-07-11T04:02:13.7406467+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetStateToolRejectsFilesystemFallbackOption","Output":"--- PASS: TestGetStateToolRejectsFilesystemFallbackOption (0.00s)\n"} +{"Time":"2026-07-11T04:02:13.7406467+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetStateToolRejectsFilesystemFallbackOption","Elapsed":0} +{"Time":"2026-07-11T04:02:13.7406467+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetStateToolResumeRequiresPrincipal"} +{"Time":"2026-07-11T04:02:13.7406467+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetStateToolResumeRequiresPrincipal","Output":"=== RUN TestGetStateToolResumeRequiresPrincipal\n"} +{"Time":"2026-07-11T04:02:13.7406467+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetStateToolResumeRequiresPrincipal","Output":"--- PASS: TestGetStateToolResumeRequiresPrincipal (0.00s)\n"} +{"Time":"2026-07-11T04:02:13.7406467+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetStateToolResumeRequiresPrincipal","Elapsed":0} +{"Time":"2026-07-11T04:02:13.7406467+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetStateToolResumeDoesNotInjectContextProjectWhenOmitted"} +{"Time":"2026-07-11T04:02:13.7406467+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetStateToolResumeDoesNotInjectContextProjectWhenOmitted","Output":"=== RUN TestGetStateToolResumeDoesNotInjectContextProjectWhenOmitted\n"} +{"Time":"2026-07-11T04:02:13.7406467+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetStateToolResumeDoesNotInjectContextProjectWhenOmitted","Output":"--- PASS: TestGetStateToolResumeDoesNotInjectContextProjectWhenOmitted (0.00s)\n"} +{"Time":"2026-07-11T04:02:13.7406467+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetStateToolResumeDoesNotInjectContextProjectWhenOmitted","Elapsed":0} +{"Time":"2026-07-11T04:02:13.7406467+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTemporalTruthToolAdvertisedWhenProviderWiredAndFlagOn"} +{"Time":"2026-07-11T04:02:13.7406467+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTemporalTruthToolAdvertisedWhenProviderWiredAndFlagOn","Output":"=== RUN TestTemporalTruthToolAdvertisedWhenProviderWiredAndFlagOn\n"} +{"Time":"2026-07-11T04:02:13.7411466+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTemporalTruthToolAdvertisedWhenProviderWiredAndFlagOn","Output":"--- PASS: TestTemporalTruthToolAdvertisedWhenProviderWiredAndFlagOn (0.00s)\n"} +{"Time":"2026-07-11T04:02:13.7411466+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTemporalTruthToolAdvertisedWhenProviderWiredAndFlagOn","Elapsed":0} +{"Time":"2026-07-11T04:02:13.7411466+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTemporalTruthRefreshToolAdvertisedWhenProviderWiredAndFlagOn"} +{"Time":"2026-07-11T04:02:13.7411466+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTemporalTruthRefreshToolAdvertisedWhenProviderWiredAndFlagOn","Output":"=== RUN TestTemporalTruthRefreshToolAdvertisedWhenProviderWiredAndFlagOn\n"} +{"Time":"2026-07-11T04:02:13.7411466+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTemporalTruthRefreshToolAdvertisedWhenProviderWiredAndFlagOn","Output":"--- PASS: TestTemporalTruthRefreshToolAdvertisedWhenProviderWiredAndFlagOn (0.00s)\n"} +{"Time":"2026-07-11T04:02:13.7411466+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTemporalTruthRefreshToolAdvertisedWhenProviderWiredAndFlagOn","Elapsed":0} +{"Time":"2026-07-11T04:02:13.7411466+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTemporalTruthToolsAbsentWhenFlagOff"} +{"Time":"2026-07-11T04:02:13.7411466+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTemporalTruthToolsAbsentWhenFlagOff","Output":"=== RUN TestTemporalTruthToolsAbsentWhenFlagOff\n"} +{"Time":"2026-07-11T04:02:13.7411466+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTemporalTruthToolsAbsentWhenFlagOff","Output":"--- PASS: TestTemporalTruthToolsAbsentWhenFlagOff (0.00s)\n"} +{"Time":"2026-07-11T04:02:13.7411466+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTemporalTruthToolsAbsentWhenFlagOff","Elapsed":0} +{"Time":"2026-07-11T04:02:13.7411466+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTemporalTruthDirectCallFailsClosedWhenFeatureGateUnsatisfied"} +{"Time":"2026-07-11T04:02:13.7411466+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTemporalTruthDirectCallFailsClosedWhenFeatureGateUnsatisfied","Output":"=== RUN TestTemporalTruthDirectCallFailsClosedWhenFeatureGateUnsatisfied\n"} +{"Time":"2026-07-11T04:02:13.7411466+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTemporalTruthDirectCallFailsClosedWhenFeatureGateUnsatisfied","Output":"{\"level\":\"error\",\"error\":\"temporal truth feature flag required\",\"tool\":\"temporal_truth\",\"args\":\"{\\\"fact_id\\\":\\\"42\\\",\\\"project\\\":\\\"engram\\\"}\",\"time\":\"2026-07-11T04:02:13+03:00\",\"message\":\"Tool call failed\"}\n"} +{"Time":"2026-07-11T04:02:13.7411466+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTemporalTruthDirectCallFailsClosedWhenFeatureGateUnsatisfied","Output":"{\"level\":\"error\",\"error\":\"temporal truth provider not configured\",\"tool\":\"temporal_truth\",\"args\":\"{\\\"fact_id\\\":\\\"42\\\",\\\"project\\\":\\\"engram\\\"}\",\"time\":\"2026-07-11T04:02:13+03:00\",\"message\":\"Tool call failed\"}\n"} +{"Time":"2026-07-11T04:02:13.7411466+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTemporalTruthDirectCallFailsClosedWhenFeatureGateUnsatisfied","Output":"--- PASS: TestTemporalTruthDirectCallFailsClosedWhenFeatureGateUnsatisfied (0.00s)\n"} +{"Time":"2026-07-11T04:02:13.7411466+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTemporalTruthDirectCallFailsClosedWhenFeatureGateUnsatisfied","Elapsed":0} +{"Time":"2026-07-11T04:02:13.7416477+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTemporalTruthRefreshDirectCallFailsClosedWhenFeatureGateUnsatisfied"} +{"Time":"2026-07-11T04:02:13.7416477+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTemporalTruthRefreshDirectCallFailsClosedWhenFeatureGateUnsatisfied","Output":"=== RUN TestTemporalTruthRefreshDirectCallFailsClosedWhenFeatureGateUnsatisfied\n"} +{"Time":"2026-07-11T04:02:13.7416477+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTemporalTruthRefreshDirectCallFailsClosedWhenFeatureGateUnsatisfied","Output":"{\"level\":\"error\",\"error\":\"temporal truth feature flag required\",\"tool\":\"temporal_truth_refresh\",\"args\":\"{\\\"project\\\":\\\"engram\\\"}\",\"time\":\"2026-07-11T04:02:13+03:00\",\"message\":\"Tool call failed\"}\n"} +{"Time":"2026-07-11T04:02:13.7416477+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTemporalTruthRefreshDirectCallFailsClosedWhenFeatureGateUnsatisfied","Output":"{\"level\":\"error\",\"error\":\"temporal truth provider not configured\",\"tool\":\"temporal_truth_refresh\",\"args\":\"{\\\"project\\\":\\\"engram\\\"}\",\"time\":\"2026-07-11T04:02:13+03:00\",\"message\":\"Tool call failed\"}\n"} +{"Time":"2026-07-11T04:02:13.7416477+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTemporalTruthRefreshDirectCallFailsClosedWhenFeatureGateUnsatisfied","Output":"--- PASS: TestTemporalTruthRefreshDirectCallFailsClosedWhenFeatureGateUnsatisfied (0.00s)\n"} +{"Time":"2026-07-11T04:02:13.7416477+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTemporalTruthRefreshDirectCallFailsClosedWhenFeatureGateUnsatisfied","Elapsed":0} +{"Time":"2026-07-11T04:02:13.7416477+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleTemporalTruthReturnsBoundedResponse"} +{"Time":"2026-07-11T04:02:13.7416477+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleTemporalTruthReturnsBoundedResponse","Output":"=== RUN TestHandleTemporalTruthReturnsBoundedResponse\n"} +{"Time":"2026-07-11T04:02:13.7416477+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleTemporalTruthReturnsBoundedResponse","Output":"--- PASS: TestHandleTemporalTruthReturnsBoundedResponse (0.00s)\n"} +{"Time":"2026-07-11T04:02:13.7416477+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleTemporalTruthReturnsBoundedResponse","Elapsed":0} +{"Time":"2026-07-11T04:02:13.7416477+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleTemporalTruthRefreshReturnsAdmissionResult"} +{"Time":"2026-07-11T04:02:13.7416477+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleTemporalTruthRefreshReturnsAdmissionResult","Output":"=== RUN TestHandleTemporalTruthRefreshReturnsAdmissionResult\n"} +{"Time":"2026-07-11T04:02:13.7416477+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleTemporalTruthRefreshReturnsAdmissionResult","Output":"--- PASS: TestHandleTemporalTruthRefreshReturnsAdmissionResult (0.00s)\n"} +{"Time":"2026-07-11T04:02:13.7416477+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleTemporalTruthRefreshReturnsAdmissionResult","Elapsed":0} +{"Time":"2026-07-11T04:02:13.7416477+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleTemporalTruthRefreshRequiresProject"} +{"Time":"2026-07-11T04:02:13.7416477+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleTemporalTruthRefreshRequiresProject","Output":"=== RUN TestHandleTemporalTruthRefreshRequiresProject\n"} +{"Time":"2026-07-11T04:02:13.7416477+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleTemporalTruthRefreshRequiresProject","Output":"--- PASS: TestHandleTemporalTruthRefreshRequiresProject (0.00s)\n"} +{"Time":"2026-07-11T04:02:13.7416477+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleTemporalTruthRefreshRequiresProject","Elapsed":0} +{"Time":"2026-07-11T04:02:13.7416477+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleTemporalTruthRequiresProject"} +{"Time":"2026-07-11T04:02:13.7416477+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleTemporalTruthRequiresProject","Output":"=== RUN TestHandleTemporalTruthRequiresProject\n"} +{"Time":"2026-07-11T04:02:13.7416477+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleTemporalTruthRequiresProject/missing_project"} +{"Time":"2026-07-11T04:02:13.7416477+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleTemporalTruthRequiresProject/missing_project","Output":"=== RUN TestHandleTemporalTruthRequiresProject/missing_project\n"} +{"Time":"2026-07-11T04:02:13.7416477+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleTemporalTruthRequiresProject/missing_project","Output":"--- PASS: TestHandleTemporalTruthRequiresProject/missing_project (0.00s)\n"} +{"Time":"2026-07-11T04:02:13.7416477+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleTemporalTruthRequiresProject/missing_project","Elapsed":0} +{"Time":"2026-07-11T04:02:13.7416477+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleTemporalTruthRequiresProject/blank_project"} +{"Time":"2026-07-11T04:02:13.7416477+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleTemporalTruthRequiresProject/blank_project","Output":"=== RUN TestHandleTemporalTruthRequiresProject/blank_project\n"} +{"Time":"2026-07-11T04:02:13.7416477+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleTemporalTruthRequiresProject/blank_project","Output":"--- PASS: TestHandleTemporalTruthRequiresProject/blank_project (0.00s)\n"} +{"Time":"2026-07-11T04:02:13.7416477+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleTemporalTruthRequiresProject/blank_project","Elapsed":0} +{"Time":"2026-07-11T04:02:13.7416477+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleTemporalTruthRequiresProject","Output":"--- PASS: TestHandleTemporalTruthRequiresProject (0.00s)\n"} +{"Time":"2026-07-11T04:02:13.7416477+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleTemporalTruthRequiresProject","Elapsed":0} +{"Time":"2026-07-11T04:02:13.7416477+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleTemporalTruthRejectsInvalidAsOf"} +{"Time":"2026-07-11T04:02:13.7416477+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleTemporalTruthRejectsInvalidAsOf","Output":"=== RUN TestHandleTemporalTruthRejectsInvalidAsOf\n"} +{"Time":"2026-07-11T04:02:13.7416477+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleTemporalTruthRejectsInvalidAsOf","Output":"--- PASS: TestHandleTemporalTruthRejectsInvalidAsOf (0.00s)\n"} +{"Time":"2026-07-11T04:02:13.7416477+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleTemporalTruthRejectsInvalidAsOf","Elapsed":0} +{"Time":"2026-07-11T04:02:13.7416477+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWiring_LifecycleTool_AppearsWhenStoresSetAndFlagOn"} +{"Time":"2026-07-11T04:02:13.7416477+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWiring_LifecycleTool_AppearsWhenStoresSetAndFlagOn","Output":"=== RUN TestWiring_LifecycleTool_AppearsWhenStoresSetAndFlagOn\n"} +{"Time":"2026-07-11T04:02:13.7421464+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWiring_LifecycleTool_AppearsWhenStoresSetAndFlagOn","Output":"--- PASS: TestWiring_LifecycleTool_AppearsWhenStoresSetAndFlagOn (0.00s)\n"} +{"Time":"2026-07-11T04:02:13.7421464+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWiring_LifecycleTool_AppearsWhenStoresSetAndFlagOn","Elapsed":0} +{"Time":"2026-07-11T04:02:13.7421464+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWiring_LifecycleTool_AbsentWhenFlagOff"} +{"Time":"2026-07-11T04:02:13.7421464+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWiring_LifecycleTool_AbsentWhenFlagOff","Output":"=== RUN TestWiring_LifecycleTool_AbsentWhenFlagOff\n"} +{"Time":"2026-07-11T04:02:13.7421464+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWiring_LifecycleTool_AbsentWhenFlagOff","Output":"--- PASS: TestWiring_LifecycleTool_AbsentWhenFlagOff (0.00s)\n"} +{"Time":"2026-07-11T04:02:13.7421464+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWiring_LifecycleTool_AbsentWhenFlagOff","Elapsed":0} +{"Time":"2026-07-11T04:02:13.7421464+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWiring_LifecycleTool_AbsentWhenStoresNil"} +{"Time":"2026-07-11T04:02:13.7421464+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWiring_LifecycleTool_AbsentWhenStoresNil","Output":"=== RUN TestWiring_LifecycleTool_AbsentWhenStoresNil\n"} +{"Time":"2026-07-11T04:02:13.7421464+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWiring_LifecycleTool_AbsentWhenStoresNil","Output":"--- PASS: TestWiring_LifecycleTool_AbsentWhenStoresNil (0.00s)\n"} +{"Time":"2026-07-11T04:02:13.7421464+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWiring_LifecycleTool_AbsentWhenStoresNil","Elapsed":0} +{"Time":"2026-07-11T04:02:13.7421464+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWiring_GraphTool_AppearsWhenStoreSetAndFlagOn"} +{"Time":"2026-07-11T04:02:13.7421464+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWiring_GraphTool_AppearsWhenStoreSetAndFlagOn","Output":"=== RUN TestWiring_GraphTool_AppearsWhenStoreSetAndFlagOn\n"} +{"Time":"2026-07-11T04:02:13.7421464+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWiring_GraphTool_AppearsWhenStoreSetAndFlagOn","Output":"--- PASS: TestWiring_GraphTool_AppearsWhenStoreSetAndFlagOn (0.00s)\n"} +{"Time":"2026-07-11T04:02:13.7421464+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWiring_GraphTool_AppearsWhenStoreSetAndFlagOn","Elapsed":0} +{"Time":"2026-07-11T04:02:13.7421464+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWiring_GraphTool_AbsentWhenFlagOff"} +{"Time":"2026-07-11T04:02:13.7421464+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWiring_GraphTool_AbsentWhenFlagOff","Output":"=== RUN TestWiring_GraphTool_AbsentWhenFlagOff\n"} +{"Time":"2026-07-11T04:02:13.7426469+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWiring_GraphTool_AbsentWhenFlagOff","Output":"--- PASS: TestWiring_GraphTool_AbsentWhenFlagOff (0.00s)\n"} +{"Time":"2026-07-11T04:02:13.7426469+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWiring_GraphTool_AbsentWhenFlagOff","Elapsed":0} +{"Time":"2026-07-11T04:02:13.7426469+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWiring_GraphTool_AbsentWhenStoreNil"} +{"Time":"2026-07-11T04:02:13.7426469+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWiring_GraphTool_AbsentWhenStoreNil","Output":"=== RUN TestWiring_GraphTool_AbsentWhenStoreNil\n"} +{"Time":"2026-07-11T04:02:13.7426469+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWiring_GraphTool_AbsentWhenStoreNil","Output":"--- PASS: TestWiring_GraphTool_AbsentWhenStoreNil (0.00s)\n"} +{"Time":"2026-07-11T04:02:13.7426469+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWiring_GraphTool_AbsentWhenStoreNil","Elapsed":0} +{"Time":"2026-07-11T04:02:13.7426469+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWiring_BothToolsOff_FlagsUnset"} +{"Time":"2026-07-11T04:02:13.7426469+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWiring_BothToolsOff_FlagsUnset","Output":"=== RUN TestWiring_BothToolsOff_FlagsUnset\n"} +{"Time":"2026-07-11T04:02:13.7426469+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWiring_BothToolsOff_FlagsUnset","Output":"--- PASS: TestWiring_BothToolsOff_FlagsUnset (0.00s)\n"} +{"Time":"2026-07-11T04:02:13.7426469+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWiring_BothToolsOff_FlagsUnset","Elapsed":0} +{"Time":"2026-07-11T04:02:13.7426469+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCodeIntelFlag_Off_ToolsAbsentFromList"} +{"Time":"2026-07-11T04:02:13.7426469+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCodeIntelFlag_Off_ToolsAbsentFromList","Output":"=== RUN TestCodeIntelFlag_Off_ToolsAbsentFromList\n"} +{"Time":"2026-07-11T04:02:13.7426469+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCodeIntelFlag_Off_ToolsAbsentFromList","Output":"--- PASS: TestCodeIntelFlag_Off_ToolsAbsentFromList (0.00s)\n"} +{"Time":"2026-07-11T04:02:13.7426469+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCodeIntelFlag_Off_ToolsAbsentFromList","Elapsed":0} +{"Time":"2026-07-11T04:02:13.7426469+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCodeIntelFlag_On_StoreNil_ToolsAbsentFromList"} +{"Time":"2026-07-11T04:02:13.7426469+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCodeIntelFlag_On_StoreNil_ToolsAbsentFromList","Output":"=== RUN TestCodeIntelFlag_On_StoreNil_ToolsAbsentFromList\n"} +{"Time":"2026-07-11T04:02:13.743148+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCodeIntelFlag_On_StoreNil_ToolsAbsentFromList","Output":"--- PASS: TestCodeIntelFlag_On_StoreNil_ToolsAbsentFromList (0.00s)\n"} +{"Time":"2026-07-11T04:02:13.743148+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCodeIntelFlag_On_StoreNil_ToolsAbsentFromList","Elapsed":0} +{"Time":"2026-07-11T04:02:13.743148+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCodeIntelFlag_On_ServerAdvertisesSearchNotStatus"} +{"Time":"2026-07-11T04:02:13.743148+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCodeIntelFlag_On_ServerAdvertisesSearchNotStatus","Output":"=== RUN TestCodeIntelFlag_On_ServerAdvertisesSearchNotStatus\n"} +{"Time":"2026-07-11T04:02:13.743148+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCodeIntelFlag_On_ServerAdvertisesSearchNotStatus","Output":"--- PASS: TestCodeIntelFlag_On_ServerAdvertisesSearchNotStatus (0.00s)\n"} +{"Time":"2026-07-11T04:02:13.743148+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCodeIntelFlag_On_ServerAdvertisesSearchNotStatus","Elapsed":0} +{"Time":"2026-07-11T04:02:13.743148+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCodebaseSearch_FlagOff_ReturnsError"} +{"Time":"2026-07-11T04:02:13.743148+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCodebaseSearch_FlagOff_ReturnsError","Output":"=== RUN TestCodebaseSearch_FlagOff_ReturnsError\n"} +{"Time":"2026-07-11T04:02:13.743148+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCodebaseSearch_FlagOff_ReturnsError","Output":"{\"level\":\"error\",\"error\":\"codebase_search requires ENGRAM_CODE_INTEL_ENABLED=true\",\"tool\":\"codebase_search\",\"args\":\"{\\\"query\\\":\\\"hello\\\",\\\"project\\\":\\\"test\\\"}\",\"time\":\"2026-07-11T04:02:13+03:00\",\"message\":\"Tool call failed\"}\n"} +{"Time":"2026-07-11T04:02:13.743148+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCodebaseSearch_FlagOff_ReturnsError","Output":"--- PASS: TestCodebaseSearch_FlagOff_ReturnsError (0.00s)\n"} +{"Time":"2026-07-11T04:02:13.743148+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCodebaseSearch_FlagOff_ReturnsError","Elapsed":0} +{"Time":"2026-07-11T04:02:13.743148+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRequest_Marshal_Table"} +{"Time":"2026-07-11T04:02:13.743148+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRequest_Marshal_Table","Output":"=== CONT TestRequest_Marshal_Table\n"} +{"Time":"2026-07-11T04:02:13.743148+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRequest_Marshal_Table/initialize"} +{"Time":"2026-07-11T04:02:13.743148+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRequest_Marshal_Table/initialize","Output":"=== RUN TestRequest_Marshal_Table/initialize\n"} +{"Time":"2026-07-11T04:02:13.743148+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRequest_Marshal_Table/initialize","Output":"=== PAUSE TestRequest_Marshal_Table/initialize\n"} +{"Time":"2026-07-11T04:02:13.743148+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRequest_Marshal_Table/initialize"} +{"Time":"2026-07-11T04:02:13.743148+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRequest_Marshal_Table/string_id"} +{"Time":"2026-07-11T04:02:13.743148+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRequest_Marshal_Table/string_id","Output":"=== RUN TestRequest_Marshal_Table/string_id\n"} +{"Time":"2026-07-11T04:02:13.743148+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRequest_Marshal_Table/string_id","Output":"=== PAUSE TestRequest_Marshal_Table/string_id\n"} +{"Time":"2026-07-11T04:02:13.743148+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRequest_Marshal_Table/string_id"} +{"Time":"2026-07-11T04:02:13.743148+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRequest_Marshal_Table/with_params"} +{"Time":"2026-07-11T04:02:13.743148+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRequest_Marshal_Table/with_params","Output":"=== RUN TestRequest_Marshal_Table/with_params\n"} +{"Time":"2026-07-11T04:02:13.743148+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRequest_Marshal_Table/with_params","Output":"=== PAUSE TestRequest_Marshal_Table/with_params\n"} +{"Time":"2026-07-11T04:02:13.743148+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRequest_Marshal_Table/with_params"} +{"Time":"2026-07-11T04:02:13.743148+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRequest_Marshal_Table/null_id"} +{"Time":"2026-07-11T04:02:13.743148+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRequest_Marshal_Table/null_id","Output":"=== RUN TestRequest_Marshal_Table/null_id\n"} +{"Time":"2026-07-11T04:02:13.743148+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRequest_Marshal_Table/null_id","Output":"=== PAUSE TestRequest_Marshal_Table/null_id\n"} +{"Time":"2026-07-11T04:02:13.743148+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRequest_Marshal_Table/null_id"} +{"Time":"2026-07-11T04:02:13.743148+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSanitizeToolCallArgs_OtherToolsStillRedactSecrets"} +{"Time":"2026-07-11T04:02:13.743148+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSanitizeToolCallArgs_OtherToolsStillRedactSecrets","Output":"=== CONT TestSanitizeToolCallArgs_OtherToolsStillRedactSecrets\n"} +{"Time":"2026-07-11T04:02:13.743148+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSanitizeToolCallArgs_OtherToolsStillRedactSecrets","Output":"--- PASS: TestSanitizeToolCallArgs_OtherToolsStillRedactSecrets (0.00s)\n"} +{"Time":"2026-07-11T04:02:13.743148+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSanitizeToolCallArgs_OtherToolsStillRedactSecrets","Elapsed":0} +{"Time":"2026-07-11T04:02:13.743148+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryToolSchema_T005"} +{"Time":"2026-07-11T04:02:13.743148+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryToolSchema_T005","Output":"=== CONT TestRecallMemoryToolSchema_T005\n"} +{"Time":"2026-07-11T04:02:13.743148+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryToolSchema_T005","Output":"--- PASS: TestRecallMemoryToolSchema_T005 (0.00s)\n"} +{"Time":"2026-07-11T04:02:13.743148+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryToolSchema_T005","Elapsed":0} +{"Time":"2026-07-11T04:02:13.743148+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryToolSchema_T005"} +{"Time":"2026-07-11T04:02:13.743148+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryToolSchema_T005","Output":"=== CONT TestStoreMemoryToolSchema_T005\n"} +{"Time":"2026-07-11T04:02:13.7436474+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryToolSchema_T005","Output":"--- PASS: TestStoreMemoryToolSchema_T005 (0.00s)\n"} +{"Time":"2026-07-11T04:02:13.7436474+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryToolSchema_T005","Elapsed":0} +{"Time":"2026-07-11T04:02:13.7436474+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryDomainPolicy_DomainOwnedRowVisibleToOwner"} +{"Time":"2026-07-11T04:02:13.7436474+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryDomainPolicy_DomainOwnedRowVisibleToOwner","Output":"=== CONT TestRecallMemoryDomainPolicy_DomainOwnedRowVisibleToOwner\n"} +{"Time":"2026-07-11T04:02:13.7436474+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryDomainPolicy_DomainOwnedRowVisibleToOwner","Output":"--- PASS: TestRecallMemoryDomainPolicy_DomainOwnedRowVisibleToOwner (0.00s)\n"} +{"Time":"2026-07-11T04:02:13.7436474+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryDomainPolicy_DomainOwnedRowVisibleToOwner","Elapsed":0} +{"Time":"2026-07-11T04:02:13.7436474+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryDomainPolicy_DomainOwnedRowHiddenFromMismatchedPrincipal"} +{"Time":"2026-07-11T04:02:13.7436474+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryDomainPolicy_DomainOwnedRowHiddenFromMismatchedPrincipal","Output":"=== CONT TestRecallMemoryDomainPolicy_DomainOwnedRowHiddenFromMismatchedPrincipal\n"} +{"Time":"2026-07-11T04:02:13.7436474+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryDomainPolicy_DomainOwnedRowHiddenFromMismatchedPrincipal","Output":"--- PASS: TestRecallMemoryDomainPolicy_DomainOwnedRowHiddenFromMismatchedPrincipal (0.00s)\n"} +{"Time":"2026-07-11T04:02:13.7436474+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRecallMemoryDomainPolicy_DomainOwnedRowHiddenFromMismatchedPrincipal","Elapsed":0} +{"Time":"2026-07-11T04:02:13.7436474+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWriteLintDomainPolicy_DomainOwnedTargetHidden"} +{"Time":"2026-07-11T04:02:13.7436474+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWriteLintDomainPolicy_DomainOwnedTargetHidden","Output":"=== CONT TestWriteLintDomainPolicy_DomainOwnedTargetHidden\n"} +{"Time":"2026-07-11T04:02:13.7436474+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWriteLintDomainPolicy_DomainOwnedTargetHidden","Output":"--- PASS: TestWriteLintDomainPolicy_DomainOwnedTargetHidden (0.00s)\n"} +{"Time":"2026-07-11T04:02:13.7436474+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWriteLintDomainPolicy_DomainOwnedTargetHidden","Elapsed":0} +{"Time":"2026-07-11T04:02:13.7436474+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWriteLintDomainPolicy_DomainOwnedCandidateHidden"} +{"Time":"2026-07-11T04:02:13.7436474+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWriteLintDomainPolicy_DomainOwnedCandidateHidden","Output":"=== CONT TestWriteLintDomainPolicy_DomainOwnedCandidateHidden\n"} +{"Time":"2026-07-11T04:02:13.7436474+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWriteLintDomainPolicy_DomainOwnedCandidateHidden","Output":"--- PASS: TestWriteLintDomainPolicy_DomainOwnedCandidateHidden (0.00s)\n"} +{"Time":"2026-07-11T04:02:13.7436474+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestWriteLintDomainPolicy_DomainOwnedCandidateHidden","Elapsed":0} +{"Time":"2026-07-11T04:02:13.7436474+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryDomainPolicy_NonEmptyDomainRejectsInvalidPrincipalKind"} +{"Time":"2026-07-11T04:02:13.7436474+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryDomainPolicy_NonEmptyDomainRejectsInvalidPrincipalKind","Output":"=== CONT TestStoreMemoryDomainPolicy_NonEmptyDomainRejectsInvalidPrincipalKind\n"} +{"Time":"2026-07-11T04:02:13.7436474+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryDomainPolicy_NonEmptyDomainRejectsInvalidPrincipalKind","Output":"--- PASS: TestStoreMemoryDomainPolicy_NonEmptyDomainRejectsInvalidPrincipalKind (0.00s)\n"} +{"Time":"2026-07-11T04:02:13.7436474+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryDomainPolicy_NonEmptyDomainRejectsInvalidPrincipalKind","Elapsed":0} +{"Time":"2026-07-11T04:02:13.7436474+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryDomainPolicy_NonEmptyDomainAllowsPrincipalIdentity"} +{"Time":"2026-07-11T04:02:13.7436474+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryDomainPolicy_NonEmptyDomainAllowsPrincipalIdentity","Output":"=== CONT TestStoreMemoryDomainPolicy_NonEmptyDomainAllowsPrincipalIdentity\n"} +{"Time":"2026-07-11T04:02:13.7436474+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryDomainPolicy_NonEmptyDomainAllowsPrincipalIdentity","Output":"--- PASS: TestStoreMemoryDomainPolicy_NonEmptyDomainAllowsPrincipalIdentity (0.00s)\n"} +{"Time":"2026-07-11T04:02:13.7436474+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryDomainPolicy_NonEmptyDomainAllowsPrincipalIdentity","Elapsed":0} +{"Time":"2026-07-11T04:02:13.7436474+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryDomainPolicy_NonEmptyDomainRequiresPrincipal"} +{"Time":"2026-07-11T04:02:13.7436474+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryDomainPolicy_NonEmptyDomainRequiresPrincipal","Output":"=== CONT TestStoreMemoryDomainPolicy_NonEmptyDomainRequiresPrincipal\n"} +{"Time":"2026-07-11T04:02:13.7436474+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryDomainPolicy_NonEmptyDomainRequiresPrincipal","Output":"--- PASS: TestStoreMemoryDomainPolicy_NonEmptyDomainRequiresPrincipal (0.00s)\n"} +{"Time":"2026-07-11T04:02:13.7436474+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryDomainPolicy_NonEmptyDomainRequiresPrincipal","Elapsed":0} +{"Time":"2026-07-11T04:02:13.7436474+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryDomainPolicy_EmptyDomainLegacyCompatible"} +{"Time":"2026-07-11T04:02:13.7436474+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryDomainPolicy_EmptyDomainLegacyCompatible","Output":"=== CONT TestStoreMemoryDomainPolicy_EmptyDomainLegacyCompatible\n"} +{"Time":"2026-07-11T04:02:13.7436474+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryDomainPolicy_EmptyDomainLegacyCompatible","Output":"--- PASS: TestStoreMemoryDomainPolicy_EmptyDomainLegacyCompatible (0.00s)\n"} +{"Time":"2026-07-11T04:02:13.7436474+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestStoreMemoryDomainPolicy_EmptyDomainLegacyCompatible","Elapsed":0} +{"Time":"2026-07-11T04:02:13.7436474+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTierConstants"} +{"Time":"2026-07-11T04:02:13.7436474+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTierConstants","Output":"=== CONT TestTierConstants\n"} +{"Time":"2026-07-11T04:02:13.7436474+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTierConstants","Output":"--- PASS: TestTierConstants (0.00s)\n"} +{"Time":"2026-07-11T04:02:13.7436474+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTierConstants","Elapsed":0} +{"Time":"2026-07-11T04:02:13.7436474+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestJSONRPCErrorCodes_Table"} +{"Time":"2026-07-11T04:02:13.7436474+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestJSONRPCErrorCodes_Table","Output":"=== CONT TestJSONRPCErrorCodes_Table\n"} +{"Time":"2026-07-11T04:02:13.7436474+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestJSONRPCErrorCodes_Table/Parse_error"} +{"Time":"2026-07-11T04:02:13.7436474+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestJSONRPCErrorCodes_Table/Parse_error","Output":"=== RUN TestJSONRPCErrorCodes_Table/Parse_error\n"} +{"Time":"2026-07-11T04:02:13.7436474+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestJSONRPCErrorCodes_Table/Parse_error","Output":"=== PAUSE TestJSONRPCErrorCodes_Table/Parse_error\n"} +{"Time":"2026-07-11T04:02:13.7436474+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestJSONRPCErrorCodes_Table/Parse_error"} +{"Time":"2026-07-11T04:02:13.7436474+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestJSONRPCErrorCodes_Table/Invalid_Request"} +{"Time":"2026-07-11T04:02:13.7436474+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestJSONRPCErrorCodes_Table/Invalid_Request","Output":"=== RUN TestJSONRPCErrorCodes_Table/Invalid_Request\n"} +{"Time":"2026-07-11T04:02:13.7436474+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestJSONRPCErrorCodes_Table/Invalid_Request","Output":"=== PAUSE TestJSONRPCErrorCodes_Table/Invalid_Request\n"} +{"Time":"2026-07-11T04:02:13.7436474+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestJSONRPCErrorCodes_Table/Invalid_Request"} +{"Time":"2026-07-11T04:02:13.7436474+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestJSONRPCErrorCodes_Table/Method_not_found"} +{"Time":"2026-07-11T04:02:13.7436474+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestJSONRPCErrorCodes_Table/Method_not_found","Output":"=== RUN TestJSONRPCErrorCodes_Table/Method_not_found\n"} +{"Time":"2026-07-11T04:02:13.7436474+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestJSONRPCErrorCodes_Table/Method_not_found","Output":"=== PAUSE TestJSONRPCErrorCodes_Table/Method_not_found\n"} +{"Time":"2026-07-11T04:02:13.7436474+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestJSONRPCErrorCodes_Table/Method_not_found"} +{"Time":"2026-07-11T04:02:13.7436474+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestJSONRPCErrorCodes_Table/Invalid_params"} +{"Time":"2026-07-11T04:02:13.7436474+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestJSONRPCErrorCodes_Table/Invalid_params","Output":"=== RUN TestJSONRPCErrorCodes_Table/Invalid_params\n"} +{"Time":"2026-07-11T04:02:13.7436474+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestJSONRPCErrorCodes_Table/Invalid_params","Output":"=== PAUSE TestJSONRPCErrorCodes_Table/Invalid_params\n"} +{"Time":"2026-07-11T04:02:13.7436474+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestJSONRPCErrorCodes_Table/Invalid_params"} +{"Time":"2026-07-11T04:02:13.7436474+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestJSONRPCErrorCodes_Table/Internal_error"} +{"Time":"2026-07-11T04:02:13.7436474+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestJSONRPCErrorCodes_Table/Internal_error","Output":"=== RUN TestJSONRPCErrorCodes_Table/Internal_error\n"} +{"Time":"2026-07-11T04:02:13.7436474+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestJSONRPCErrorCodes_Table/Internal_error","Output":"=== PAUSE TestJSONRPCErrorCodes_Table/Internal_error\n"} +{"Time":"2026-07-11T04:02:13.7436474+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestJSONRPCErrorCodes_Table/Internal_error"} +{"Time":"2026-07-11T04:02:13.7436474+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRun_NotificationNoResponse"} +{"Time":"2026-07-11T04:02:13.7436474+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRun_NotificationNoResponse","Output":"=== CONT TestRun_NotificationNoResponse\n"} +{"Time":"2026-07-11T04:02:13.7436474+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRun_NotificationNoResponse","Output":"{\"level\":\"debug\",\"method\":\"initialized\",\"time\":\"2026-07-11T04:02:13+03:00\",\"message\":\"MCP client initialized\"}\n"} +{"Time":"2026-07-11T04:02:13.7436474+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRun_NotificationNoResponse","Output":"--- PASS: TestRun_NotificationNoResponse (0.00s)\n"} +{"Time":"2026-07-11T04:02:13.7436474+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRun_NotificationNoResponse","Elapsed":0} +{"Time":"2026-07-11T04:02:13.7436474+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRun_MixedValidAndInvalid"} +{"Time":"2026-07-11T04:02:13.7436474+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRun_MixedValidAndInvalid","Output":"=== CONT TestRun_MixedValidAndInvalid\n"} +{"Time":"2026-07-11T04:02:13.7441491+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRun_MixedValidAndInvalid","Output":"--- PASS: TestRun_MixedValidAndInvalid (0.00s)\n"} +{"Time":"2026-07-11T04:02:13.7441491+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRun_MixedValidAndInvalid","Elapsed":0} +{"Time":"2026-07-11T04:02:13.7441491+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRun_MultipleRequests"} +{"Time":"2026-07-11T04:02:13.7441491+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRun_MultipleRequests","Output":"=== CONT TestRun_MultipleRequests\n"} +{"Time":"2026-07-11T04:02:13.7446489+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRun_MultipleRequests","Output":"--- PASS: TestRun_MultipleRequests (0.00s)\n"} +{"Time":"2026-07-11T04:02:13.7446489+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRun_MultipleRequests","Elapsed":0} +{"Time":"2026-07-11T04:02:13.7446489+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRun_ValidInitialize"} +{"Time":"2026-07-11T04:02:13.7446489+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRun_ValidInitialize","Output":"=== CONT TestRun_ValidInitialize\n"} +{"Time":"2026-07-11T04:02:13.7446489+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRun_ValidInitialize","Output":"--- PASS: TestRun_ValidInitialize (0.00s)\n"} +{"Time":"2026-07-11T04:02:13.7446489+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRun_ValidInitialize","Elapsed":0} +{"Time":"2026-07-11T04:02:13.7446489+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRun_EmptyLinesSkipped"} +{"Time":"2026-07-11T04:02:13.7446489+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRun_EmptyLinesSkipped","Output":"=== CONT TestRun_EmptyLinesSkipped\n"} +{"Time":"2026-07-11T04:02:13.7446489+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRun_EmptyLinesSkipped","Output":"--- PASS: TestRun_EmptyLinesSkipped (0.00s)\n"} +{"Time":"2026-07-11T04:02:13.7446489+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRun_EmptyLinesSkipped","Elapsed":0} +{"Time":"2026-07-11T04:02:13.7446489+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRun_ParseError"} +{"Time":"2026-07-11T04:02:13.7446489+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRun_ParseError","Output":"=== CONT TestRun_ParseError\n"} +{"Time":"2026-07-11T04:02:13.7446489+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRun_ParseError","Output":"--- PASS: TestRun_ParseError (0.00s)\n"} +{"Time":"2026-07-11T04:02:13.7446489+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRun_ParseError","Elapsed":0} +{"Time":"2026-07-11T04:02:13.7446489+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSendError_OutputShape"} +{"Time":"2026-07-11T04:02:13.7446489+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSendError_OutputShape","Output":"=== CONT TestSendError_OutputShape\n"} +{"Time":"2026-07-11T04:02:13.7446489+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSendError_OutputShape","Output":"--- PASS: TestSendError_OutputShape (0.00s)\n"} +{"Time":"2026-07-11T04:02:13.7446489+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSendError_OutputShape","Elapsed":0} +{"Time":"2026-07-11T04:02:13.7446489+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSendResponse_VariousIDTypes"} +{"Time":"2026-07-11T04:02:13.7446489+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSendResponse_VariousIDTypes","Output":"=== CONT TestSendResponse_VariousIDTypes\n"} +{"Time":"2026-07-11T04:02:13.7446489+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSendResponse_VariousIDTypes","Output":"--- PASS: TestSendResponse_VariousIDTypes (0.00s)\n"} +{"Time":"2026-07-11T04:02:13.7446489+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSendResponse_VariousIDTypes","Elapsed":0} +{"Time":"2026-07-11T04:02:13.7446489+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSendResponse_NilID"} +{"Time":"2026-07-11T04:02:13.7446489+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSendResponse_NilID","Output":"=== CONT TestSendResponse_NilID\n"} +{"Time":"2026-07-11T04:02:13.7446489+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSendResponse_NilID","Output":"--- PASS: TestSendResponse_NilID (0.00s)\n"} +{"Time":"2026-07-11T04:02:13.7446489+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSendResponse_NilID","Elapsed":0} +{"Time":"2026-07-11T04:02:13.7446489+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSendResponse_ErrorResponse"} +{"Time":"2026-07-11T04:02:13.7446489+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSendResponse_ErrorResponse","Output":"=== CONT TestSendResponse_ErrorResponse\n"} +{"Time":"2026-07-11T04:02:13.7446489+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSendResponse_ErrorResponse","Output":"--- PASS: TestSendResponse_ErrorResponse (0.00s)\n"} +{"Time":"2026-07-11T04:02:13.7446489+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSendResponse_ErrorResponse","Elapsed":0} +{"Time":"2026-07-11T04:02:13.7446489+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSendResponse_ContainsJSONRPC"} +{"Time":"2026-07-11T04:02:13.7446489+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSendResponse_ContainsJSONRPC","Output":"=== CONT TestSendResponse_ContainsJSONRPC\n"} +{"Time":"2026-07-11T04:02:13.7446489+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSendResponse_ContainsJSONRPC","Output":"--- PASS: TestSendResponse_ContainsJSONRPC (0.00s)\n"} +{"Time":"2026-07-11T04:02:13.7446489+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSendResponse_ContainsJSONRPC","Elapsed":0} +{"Time":"2026-07-11T04:02:13.7446489+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleAnalyzeSearchPatterns_InvalidJSON"} +{"Time":"2026-07-11T04:02:13.7446489+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleAnalyzeSearchPatterns_InvalidJSON","Output":"=== CONT TestHandleAnalyzeSearchPatterns_InvalidJSON\n"} +{"Time":"2026-07-11T04:02:13.7446489+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleAnalyzeSearchPatterns_InvalidJSON","Output":"--- PASS: TestHandleAnalyzeSearchPatterns_InvalidJSON (0.00s)\n"} +{"Time":"2026-07-11T04:02:13.7446489+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleAnalyzeSearchPatterns_InvalidJSON","Elapsed":0} +{"Time":"2026-07-11T04:02:13.7446489+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleFindSimilarObservations_EmptyResultInV5"} +{"Time":"2026-07-11T04:02:13.7446489+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleFindSimilarObservations_EmptyResultInV5","Output":"=== CONT TestHandleFindSimilarObservations_EmptyResultInV5\n"} +{"Time":"2026-07-11T04:02:13.7446489+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleFindSimilarObservations_EmptyResultInV5","Output":"--- PASS: TestHandleFindSimilarObservations_EmptyResultInV5 (0.00s)\n"} +{"Time":"2026-07-11T04:02:13.7446489+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleFindSimilarObservations_EmptyResultInV5","Elapsed":0} +{"Time":"2026-07-11T04:02:13.7446489+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleFindSimilarObservations_Validation"} +{"Time":"2026-07-11T04:02:13.7446489+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleFindSimilarObservations_Validation","Output":"=== CONT TestHandleFindSimilarObservations_Validation\n"} +{"Time":"2026-07-11T04:02:13.7446489+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleFindSimilarObservations_Validation","Output":"--- PASS: TestHandleFindSimilarObservations_Validation (0.00s)\n"} +{"Time":"2026-07-11T04:02:13.7446489+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleFindSimilarObservations_Validation","Elapsed":0} +{"Time":"2026-07-11T04:02:13.7446489+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsList_PrimaryToolsPresent"} +{"Time":"2026-07-11T04:02:13.7446489+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsList_PrimaryToolsPresent","Output":"=== CONT TestHandleToolsList_PrimaryToolsPresent\n"} +{"Time":"2026-07-11T04:02:13.7446489+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsList_PrimaryToolsPresent","Output":"--- PASS: TestHandleToolsList_PrimaryToolsPresent (0.00s)\n"} +{"Time":"2026-07-11T04:02:13.7451465+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsList_PrimaryToolsPresent","Elapsed":0} +{"Time":"2026-07-11T04:02:13.7451465+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleCheckSystemHealth_NilStores_StructuredResponse"} +{"Time":"2026-07-11T04:02:13.7451465+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleCheckSystemHealth_NilStores_StructuredResponse","Output":"=== CONT TestHandleCheckSystemHealth_NilStores_StructuredResponse\n"} +{"Time":"2026-07-11T04:02:13.8706424+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleCheckSystemHealth_NilStores_StructuredResponse","Output":"{\"level\":\"debug\",\"connections\":5,\"time\":\"2026-07-11T04:02:13+03:00\",\"message\":\"Connection pool warmed\"}\n"} +{"Time":"2026-07-11T04:02:13.8756444+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleCheckSystemHealth_NilStores_StructuredResponse","Output":"--- PASS: TestHandleCheckSystemHealth_NilStores_StructuredResponse (0.13s)\n"} +{"Time":"2026-07-11T04:02:13.8756444+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleCheckSystemHealth_NilStores_StructuredResponse","Elapsed":0.13} +{"Time":"2026-07-11T04:02:13.8756444+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSanitizeToolCallArgs_RememberDirectiveRedactsRawLogArguments"} +{"Time":"2026-07-11T04:02:13.8756444+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSanitizeToolCallArgs_RememberDirectiveRedactsRawLogArguments","Output":"=== CONT TestSanitizeToolCallArgs_RememberDirectiveRedactsRawLogArguments\n"} +{"Time":"2026-07-11T04:02:13.8756444+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSanitizeToolCallArgs_RememberDirectiveRedactsRawLogArguments","Output":"--- PASS: TestSanitizeToolCallArgs_RememberDirectiveRedactsRawLogArguments (0.00s)\n"} +{"Time":"2026-07-11T04:02:13.8756444+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestSanitizeToolCallArgs_RememberDirectiveRedactsRawLogArguments","Elapsed":0} +{"Time":"2026-07-11T04:02:13.8756444+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleGetMemoryStats_NilStores_ValidJSON"} +{"Time":"2026-07-11T04:02:13.8756444+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleGetMemoryStats_NilStores_ValidJSON","Output":"=== CONT TestHandleGetMemoryStats_NilStores_ValidJSON\n"} +{"Time":"2026-07-11T04:02:13.8756444+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleGetMemoryStats_NilStores_ValidJSON","Output":"--- PASS: TestHandleGetMemoryStats_NilStores_ValidJSON (0.00s)\n"} +{"Time":"2026-07-11T04:02:13.8756444+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleGetMemoryStats_NilStores_ValidJSON","Elapsed":0} +{"Time":"2026-07-11T04:02:13.8756444+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsCall_UnknownTool"} +{"Time":"2026-07-11T04:02:13.8756444+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsCall_UnknownTool","Output":"=== CONT TestHandleToolsCall_UnknownTool\n"} +{"Time":"2026-07-11T04:02:13.8756444+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsCall_UnknownTool","Output":"{\"level\":\"error\",\"error\":\"unknown tool: no_such_tool\",\"tool\":\"no_such_tool\",\"args\":\"{}\",\"time\":\"2026-07-11T04:02:13+03:00\",\"message\":\"Tool call failed\"}\n"} +{"Time":"2026-07-11T04:02:13.8756444+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsCall_UnknownTool","Output":"--- PASS: TestHandleToolsCall_UnknownTool (0.00s)\n"} +{"Time":"2026-07-11T04:02:13.8756444+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsCall_UnknownTool","Elapsed":0} +{"Time":"2026-07-11T04:02:13.8756444+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_ParameterValidation_Table"} +{"Time":"2026-07-11T04:02:13.8756444+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_ParameterValidation_Table","Output":"=== CONT TestCallTool_ParameterValidation_Table\n"} +{"Time":"2026-07-11T04:02:13.8756444+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_ParameterValidation_Table/find_similar_observations/{invalid"} +{"Time":"2026-07-11T04:02:13.8756444+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_ParameterValidation_Table/find_similar_observations/{invalid","Output":"=== RUN TestCallTool_ParameterValidation_Table/find_similar_observations/{invalid\n"} +{"Time":"2026-07-11T04:02:13.8756444+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_ParameterValidation_Table/find_similar_observations/{invalid","Output":"=== PAUSE TestCallTool_ParameterValidation_Table/find_similar_observations/{invalid\n"} +{"Time":"2026-07-11T04:02:13.8756444+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_ParameterValidation_Table/find_similar_observations/{invalid"} +{"Time":"2026-07-11T04:02:13.8756444+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_ParameterValidation_Table/find_similar_observations/{}"} +{"Time":"2026-07-11T04:02:13.8756444+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_ParameterValidation_Table/find_similar_observations/{}","Output":"=== RUN TestCallTool_ParameterValidation_Table/find_similar_observations/{}\n"} +{"Time":"2026-07-11T04:02:13.8756444+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_ParameterValidation_Table/find_similar_observations/{}","Output":"=== PAUSE TestCallTool_ParameterValidation_Table/find_similar_observations/{}\n"} +{"Time":"2026-07-11T04:02:13.8756444+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_ParameterValidation_Table/find_similar_observations/{}"} +{"Time":"2026-07-11T04:02:13.8756444+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_ParameterValidation_Table/analyze_search_patterns/{invalid"} +{"Time":"2026-07-11T04:02:13.8756444+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_ParameterValidation_Table/analyze_search_patterns/{invalid","Output":"=== RUN TestCallTool_ParameterValidation_Table/analyze_search_patterns/{invalid\n"} +{"Time":"2026-07-11T04:02:13.8756444+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_ParameterValidation_Table/analyze_search_patterns/{invalid","Output":"=== PAUSE TestCallTool_ParameterValidation_Table/analyze_search_patterns/{invalid\n"} +{"Time":"2026-07-11T04:02:13.8756444+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_ParameterValidation_Table/analyze_search_patterns/{invalid"} +{"Time":"2026-07-11T04:02:13.8756444+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsCall_EmptyParams"} +{"Time":"2026-07-11T04:02:13.8756444+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsCall_EmptyParams","Output":"=== CONT TestHandleToolsCall_EmptyParams\n"} +{"Time":"2026-07-11T04:02:13.8756444+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsCall_EmptyParams","Output":"{\"level\":\"error\",\"error\":\"unknown tool: \",\"tool\":\"\",\"args\":\"\",\"time\":\"2026-07-11T04:02:13+03:00\",\"message\":\"Tool call failed\"}\n"} +{"Time":"2026-07-11T04:02:13.8761438+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsCall_EmptyParams","Output":"--- PASS: TestHandleToolsCall_EmptyParams (0.00s)\n"} +{"Time":"2026-07-11T04:02:13.8761438+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsCall_EmptyParams","Elapsed":0} +{"Time":"2026-07-11T04:02:13.8761438+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_CheckSystemHealth_NilStores"} +{"Time":"2026-07-11T04:02:13.8761438+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_CheckSystemHealth_NilStores","Output":"=== CONT TestCallTool_CheckSystemHealth_NilStores\n"} +{"Time":"2026-07-11T04:02:14.0093922+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_CheckSystemHealth_NilStores","Output":"{\"level\":\"debug\",\"connections\":5,\"time\":\"2026-07-11T04:02:14+03:00\",\"message\":\"Connection pool warmed\"}\n"} +{"Time":"2026-07-11T04:02:14.0143925+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsCall_InvalidParamsJSON"} +{"Time":"2026-07-11T04:02:14.0143925+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsCall_InvalidParamsJSON","Output":"=== CONT TestHandleToolsCall_InvalidParamsJSON\n"} +{"Time":"2026-07-11T04:02:14.0143925+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_CheckSystemHealth_NilStores","Output":"--- PASS: TestCallTool_CheckSystemHealth_NilStores (0.14s)\n"} +{"Time":"2026-07-11T04:02:14.0143925+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_CheckSystemHealth_NilStores","Elapsed":0.14} +{"Time":"2026-07-11T04:02:14.0143925+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetMemoryStats_NilDB_NoMemoryOrVnextSections"} +{"Time":"2026-07-11T04:02:14.0143925+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetMemoryStats_NilDB_NoMemoryOrVnextSections","Output":"=== CONT TestGetMemoryStats_NilDB_NoMemoryOrVnextSections\n"} +{"Time":"2026-07-11T04:02:14.0143925+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsCall_InvalidParamsJSON","Output":"--- PASS: TestHandleToolsCall_InvalidParamsJSON (0.00s)\n"} +{"Time":"2026-07-11T04:02:14.0143925+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsCall_InvalidParamsJSON","Elapsed":0} +{"Time":"2026-07-11T04:02:14.0143925+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetMemoryStats_NilDB_NoMemoryOrVnextSections","Output":"--- PASS: TestGetMemoryStats_NilDB_NoMemoryOrVnextSections (0.00s)\n"} +{"Time":"2026-07-11T04:02:14.0143925+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestGetMemoryStats_NilDB_NoMemoryOrVnextSections","Elapsed":0} +{"Time":"2026-07-11T04:02:14.0143925+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleRequest_CapabilityStubs"} +{"Time":"2026-07-11T04:02:14.0143925+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleRequest_CapabilityStubs","Output":"=== CONT TestHandleRequest_CapabilityStubs\n"} +{"Time":"2026-07-11T04:02:14.0143925+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleRequest_CapabilityStubs/resources/list"} +{"Time":"2026-07-11T04:02:14.0143925+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleRequest_CapabilityStubs/resources/list","Output":"=== RUN TestHandleRequest_CapabilityStubs/resources/list\n"} +{"Time":"2026-07-11T04:02:14.0143925+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleRequest_CapabilityStubs/resources/list","Output":"=== PAUSE TestHandleRequest_CapabilityStubs/resources/list\n"} +{"Time":"2026-07-11T04:02:14.0143925+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleRequest_CapabilityStubs/resources/list"} +{"Time":"2026-07-11T04:02:14.0143925+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleRequest_CapabilityStubs/resources/templates/list"} +{"Time":"2026-07-11T04:02:14.0143925+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleRequest_CapabilityStubs/resources/templates/list","Output":"=== RUN TestHandleRequest_CapabilityStubs/resources/templates/list\n"} +{"Time":"2026-07-11T04:02:14.0143925+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleRequest_CapabilityStubs/resources/templates/list","Output":"=== PAUSE TestHandleRequest_CapabilityStubs/resources/templates/list\n"} +{"Time":"2026-07-11T04:02:14.0143925+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleRequest_CapabilityStubs/resources/templates/list"} +{"Time":"2026-07-11T04:02:14.0143925+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleRequest_CapabilityStubs/prompts/list"} +{"Time":"2026-07-11T04:02:14.0143925+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleRequest_CapabilityStubs/prompts/list","Output":"=== RUN TestHandleRequest_CapabilityStubs/prompts/list\n"} +{"Time":"2026-07-11T04:02:14.0143925+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleRequest_CapabilityStubs/prompts/list","Output":"=== PAUSE TestHandleRequest_CapabilityStubs/prompts/list\n"} +{"Time":"2026-07-11T04:02:14.0143925+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleRequest_CapabilityStubs/prompts/list"} +{"Time":"2026-07-11T04:02:14.0143925+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleRequest_CapabilityStubs/completion/complete"} +{"Time":"2026-07-11T04:02:14.0143925+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleRequest_CapabilityStubs/completion/complete","Output":"=== RUN TestHandleRequest_CapabilityStubs/completion/complete\n"} +{"Time":"2026-07-11T04:02:14.0143925+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleRequest_CapabilityStubs/completion/complete","Output":"=== PAUSE TestHandleRequest_CapabilityStubs/completion/complete\n"} +{"Time":"2026-07-11T04:02:14.0143925+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleRequest_CapabilityStubs/completion/complete"} +{"Time":"2026-07-11T04:02:14.0143925+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleRequest_NotificationReturnsNil"} +{"Time":"2026-07-11T04:02:14.0143925+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleRequest_NotificationReturnsNil","Output":"=== CONT TestHandleRequest_NotificationReturnsNil\n"} +{"Time":"2026-07-11T04:02:14.0143925+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleRequest_NotificationReturnsNil","Output":"{\"level\":\"debug\",\"method\":\"initialized\",\"time\":\"2026-07-11T04:02:14+03:00\",\"message\":\"MCP client initialized\"}\n"} +{"Time":"2026-07-11T04:02:14.0143925+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleRequest_NotificationReturnsNil","Output":"--- PASS: TestHandleRequest_NotificationReturnsNil (0.00s)\n"} +{"Time":"2026-07-11T04:02:14.0143925+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleRequest_NotificationReturnsNil","Elapsed":0} +{"Time":"2026-07-11T04:02:14.0143925+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_GetMemoryStats_NilStores"} +{"Time":"2026-07-11T04:02:14.0143925+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_GetMemoryStats_NilStores","Output":"=== CONT TestCallTool_GetMemoryStats_NilStores\n"} +{"Time":"2026-07-11T04:02:14.0143925+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_GetMemoryStats_NilStores","Output":"--- PASS: TestCallTool_GetMemoryStats_NilStores (0.00s)\n"} +{"Time":"2026-07-11T04:02:14.0143925+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_GetMemoryStats_NilStores","Elapsed":0} +{"Time":"2026-07-11T04:02:14.0143925+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleRequest_UnknownMethodError"} +{"Time":"2026-07-11T04:02:14.0143925+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleRequest_UnknownMethodError","Output":"=== CONT TestHandleRequest_UnknownMethodError\n"} +{"Time":"2026-07-11T04:02:14.0143925+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleRequest_UnknownMethodError","Output":"--- PASS: TestHandleRequest_UnknownMethodError (0.00s)\n"} +{"Time":"2026-07-11T04:02:14.0143925+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleRequest_UnknownMethodError","Elapsed":0} +{"Time":"2026-07-11T04:02:14.0143925+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_FindByFile_Removed"} +{"Time":"2026-07-11T04:02:14.0143925+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_FindByFile_Removed","Output":"=== CONT TestCallTool_FindByFile_Removed\n"} +{"Time":"2026-07-11T04:02:14.0143925+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_FindByFile_Removed","Output":"--- PASS: TestCallTool_FindByFile_Removed (0.00s)\n"} +{"Time":"2026-07-11T04:02:14.0143925+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_FindByFile_Removed","Elapsed":0} +{"Time":"2026-07-11T04:02:14.0143925+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleRequest_ToolsListRoute"} +{"Time":"2026-07-11T04:02:14.0143925+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleRequest_ToolsListRoute","Output":"=== CONT TestHandleRequest_ToolsListRoute\n"} +{"Time":"2026-07-11T04:02:14.0148921+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleRequest_ToolsListRoute","Output":"--- PASS: TestHandleRequest_ToolsListRoute (0.00s)\n"} +{"Time":"2026-07-11T04:02:14.0148921+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleRequest_ToolsListRoute","Elapsed":0} +{"Time":"2026-07-11T04:02:14.0148921+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_UnknownToolNames_Table"} +{"Time":"2026-07-11T04:02:14.0148921+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_UnknownToolNames_Table","Output":"=== CONT TestCallTool_UnknownToolNames_Table\n"} +{"Time":"2026-07-11T04:02:14.0148921+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_UnknownToolNames_Table/invalid_tool"} +{"Time":"2026-07-11T04:02:14.0148921+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_UnknownToolNames_Table/invalid_tool","Output":"=== RUN TestCallTool_UnknownToolNames_Table/invalid_tool\n"} +{"Time":"2026-07-11T04:02:14.0148921+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_UnknownToolNames_Table/invalid_tool","Output":"=== PAUSE TestCallTool_UnknownToolNames_Table/invalid_tool\n"} +{"Time":"2026-07-11T04:02:14.0148921+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_UnknownToolNames_Table/invalid_tool"} +{"Time":"2026-07-11T04:02:14.0148921+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_UnknownToolNames_Table/nonexistent"} +{"Time":"2026-07-11T04:02:14.0148921+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_UnknownToolNames_Table/nonexistent","Output":"=== RUN TestCallTool_UnknownToolNames_Table/nonexistent\n"} +{"Time":"2026-07-11T04:02:14.0148921+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_UnknownToolNames_Table/nonexistent","Output":"=== PAUSE TestCallTool_UnknownToolNames_Table/nonexistent\n"} +{"Time":"2026-07-11T04:02:14.0148921+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_UnknownToolNames_Table/nonexistent"} +{"Time":"2026-07-11T04:02:14.0148921+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_UnknownToolNames_Table/search_v2"} +{"Time":"2026-07-11T04:02:14.0148921+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_UnknownToolNames_Table/search_v2","Output":"=== RUN TestCallTool_UnknownToolNames_Table/search_v2\n"} +{"Time":"2026-07-11T04:02:14.0148921+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_UnknownToolNames_Table/search_v2","Output":"=== PAUSE TestCallTool_UnknownToolNames_Table/search_v2\n"} +{"Time":"2026-07-11T04:02:14.0148921+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_UnknownToolNames_Table/search_v2"} +{"Time":"2026-07-11T04:02:14.0148921+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_UnknownToolNames_Table/timeline_x"} +{"Time":"2026-07-11T04:02:14.0148921+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_UnknownToolNames_Table/timeline_x","Output":"=== RUN TestCallTool_UnknownToolNames_Table/timeline_x\n"} +{"Time":"2026-07-11T04:02:14.0148921+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_UnknownToolNames_Table/timeline_x","Output":"=== PAUSE TestCallTool_UnknownToolNames_Table/timeline_x\n"} +{"Time":"2026-07-11T04:02:14.0148921+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_UnknownToolNames_Table/timeline_x"} +{"Time":"2026-07-11T04:02:14.0148921+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleRequest_InitializeRoute"} +{"Time":"2026-07-11T04:02:14.0148921+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleRequest_InitializeRoute","Output":"=== CONT TestHandleRequest_InitializeRoute\n"} +{"Time":"2026-07-11T04:02:14.0148921+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleRequest_InitializeRoute","Output":"--- PASS: TestHandleRequest_InitializeRoute (0.00s)\n"} +{"Time":"2026-07-11T04:02:14.0148921+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleRequest_InitializeRoute","Elapsed":0} +{"Time":"2026-07-11T04:02:14.0148921+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_UnknownToolReturnsError"} +{"Time":"2026-07-11T04:02:14.0148921+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_UnknownToolReturnsError","Output":"=== CONT TestCallTool_UnknownToolReturnsError\n"} +{"Time":"2026-07-11T04:02:14.0148921+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_UnknownToolReturnsError","Output":"--- PASS: TestCallTool_UnknownToolReturnsError (0.00s)\n"} +{"Time":"2026-07-11T04:02:14.0148921+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_UnknownToolReturnsError","Elapsed":0} +{"Time":"2026-07-11T04:02:14.0148921+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsList_StoreTypeEnumCorrect"} +{"Time":"2026-07-11T04:02:14.0148921+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsList_StoreTypeEnumCorrect","Output":"=== CONT TestHandleToolsList_StoreTypeEnumCorrect\n"} +{"Time":"2026-07-11T04:02:14.0148921+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsList_StoreTypeEnumCorrect","Output":"--- PASS: TestHandleToolsList_StoreTypeEnumCorrect (0.00s)\n"} +{"Time":"2026-07-11T04:02:14.0148921+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsList_StoreTypeEnumCorrect","Elapsed":0} +{"Time":"2026-07-11T04:02:14.0148921+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsList_RemovedToolsAbsent"} +{"Time":"2026-07-11T04:02:14.0148921+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsList_RemovedToolsAbsent","Output":"=== CONT TestHandleToolsList_RemovedToolsAbsent\n"} +{"Time":"2026-07-11T04:02:14.0153928+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsList_RemovedToolsAbsent","Output":"--- PASS: TestHandleToolsList_RemovedToolsAbsent (0.00s)\n"} +{"Time":"2026-07-11T04:02:14.0153928+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsList_RemovedToolsAbsent","Elapsed":0} +{"Time":"2026-07-11T04:02:14.0153928+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsList_IncludeAllContainsLegacy"} +{"Time":"2026-07-11T04:02:14.0153928+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsList_IncludeAllContainsLegacy","Output":"=== CONT TestHandleToolsList_IncludeAllContainsLegacy\n"} +{"Time":"2026-07-11T04:02:14.0153928+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsList_IncludeAllContainsLegacy","Output":"--- PASS: TestHandleToolsList_IncludeAllContainsLegacy (0.00s)\n"} +{"Time":"2026-07-11T04:02:14.0153928+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsList_IncludeAllContainsLegacy","Elapsed":0} +{"Time":"2026-07-11T04:02:14.0153928+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsList_IncludeAllReturnsMore"} +{"Time":"2026-07-11T04:02:14.0153928+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsList_IncludeAllReturnsMore","Output":"=== CONT TestHandleToolsList_IncludeAllReturnsMore\n"} +{"Time":"2026-07-11T04:02:14.0158949+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsList_IncludeAllReturnsMore","Output":"--- PASS: TestHandleToolsList_IncludeAllReturnsMore (0.00s)\n"} +{"Time":"2026-07-11T04:02:14.0158949+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsList_IncludeAllReturnsMore","Elapsed":0} +{"Time":"2026-07-11T04:02:14.0158949+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsList_FeedbackSchemaCorrect"} +{"Time":"2026-07-11T04:02:14.0158949+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsList_FeedbackSchemaCorrect","Output":"=== CONT TestHandleToolsList_FeedbackSchemaCorrect\n"} +{"Time":"2026-07-11T04:02:14.0158949+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsList_FeedbackSchemaCorrect","Output":"--- PASS: TestHandleToolsList_FeedbackSchemaCorrect (0.00s)\n"} +{"Time":"2026-07-11T04:02:14.0158949+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsList_FeedbackSchemaCorrect","Elapsed":0} +{"Time":"2026-07-11T04:02:14.0158949+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsList_DefaultCountMatchesPrimary"} +{"Time":"2026-07-11T04:02:14.0158949+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsList_DefaultCountMatchesPrimary","Output":"=== CONT TestHandleToolsList_DefaultCountMatchesPrimary\n"} +{"Time":"2026-07-11T04:02:14.0158949+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsList_DefaultCountMatchesPrimary","Output":"--- PASS: TestHandleToolsList_DefaultCountMatchesPrimary (0.00s)\n"} +{"Time":"2026-07-11T04:02:14.0158949+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsList_DefaultCountMatchesPrimary","Elapsed":0} +{"Time":"2026-07-11T04:02:14.0158949+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsList_SchemaCompliance_NoForbiddenTopLevelKeys"} +{"Time":"2026-07-11T04:02:14.0158949+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsList_SchemaCompliance_NoForbiddenTopLevelKeys","Output":"=== CONT TestHandleToolsList_SchemaCompliance_NoForbiddenTopLevelKeys\n"} +{"Time":"2026-07-11T04:02:14.0158949+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsList_SchemaCompliance_NoForbiddenTopLevelKeys","Output":"--- PASS: TestHandleToolsList_SchemaCompliance_NoForbiddenTopLevelKeys (0.00s)\n"} +{"Time":"2026-07-11T04:02:14.0163929+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsList_SchemaCompliance_NoForbiddenTopLevelKeys","Elapsed":0} +{"Time":"2026-07-11T04:02:14.0163929+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTimelineParams_Unmarshal_Table"} +{"Time":"2026-07-11T04:02:14.0163929+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTimelineParams_Unmarshal_Table","Output":"=== CONT TestTimelineParams_Unmarshal_Table\n"} +{"Time":"2026-07-11T04:02:14.0163929+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTimelineParams_Unmarshal_Table/anchor_id"} +{"Time":"2026-07-11T04:02:14.0163929+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTimelineParams_Unmarshal_Table/anchor_id","Output":"=== RUN TestTimelineParams_Unmarshal_Table/anchor_id\n"} +{"Time":"2026-07-11T04:02:14.0163929+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTimelineParams_Unmarshal_Table/anchor_id","Output":"=== PAUSE TestTimelineParams_Unmarshal_Table/anchor_id\n"} +{"Time":"2026-07-11T04:02:14.0163929+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTimelineParams_Unmarshal_Table/anchor_id"} +{"Time":"2026-07-11T04:02:14.0163929+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTimelineParams_Unmarshal_Table/query_only"} +{"Time":"2026-07-11T04:02:14.0163929+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTimelineParams_Unmarshal_Table/query_only","Output":"=== RUN TestTimelineParams_Unmarshal_Table/query_only\n"} +{"Time":"2026-07-11T04:02:14.0163929+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTimelineParams_Unmarshal_Table/query_only","Output":"=== PAUSE TestTimelineParams_Unmarshal_Table/query_only\n"} +{"Time":"2026-07-11T04:02:14.0163929+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTimelineParams_Unmarshal_Table/query_only"} +{"Time":"2026-07-11T04:02:14.0163929+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTimelineParams_Unmarshal_Table/invalid_json"} +{"Time":"2026-07-11T04:02:14.0163929+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTimelineParams_Unmarshal_Table/invalid_json","Output":"=== RUN TestTimelineParams_Unmarshal_Table/invalid_json\n"} +{"Time":"2026-07-11T04:02:14.0163929+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTimelineParams_Unmarshal_Table/invalid_json","Output":"=== PAUSE TestTimelineParams_Unmarshal_Table/invalid_json\n"} +{"Time":"2026-07-11T04:02:14.0163929+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTimelineParams_Unmarshal_Table/invalid_json"} +{"Time":"2026-07-11T04:02:14.0163929+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTimelineParams_Unmarshal_Table/empty_object_valid"} +{"Time":"2026-07-11T04:02:14.0163929+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTimelineParams_Unmarshal_Table/empty_object_valid","Output":"=== RUN TestTimelineParams_Unmarshal_Table/empty_object_valid\n"} +{"Time":"2026-07-11T04:02:14.0163929+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTimelineParams_Unmarshal_Table/empty_object_valid","Output":"=== PAUSE TestTimelineParams_Unmarshal_Table/empty_object_valid\n"} +{"Time":"2026-07-11T04:02:14.0163929+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTimelineParams_Unmarshal_Table/empty_object_valid"} +{"Time":"2026-07-11T04:02:14.0163929+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestError_NilData_NotInOutput"} +{"Time":"2026-07-11T04:02:14.0163929+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestError_NilData_NotInOutput","Output":"=== CONT TestError_NilData_NotInOutput\n"} +{"Time":"2026-07-11T04:02:14.0163929+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestError_NilData_NotInOutput","Output":"--- PASS: TestError_NilData_NotInOutput (0.00s)\n"} +{"Time":"2026-07-11T04:02:14.0163929+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestError_NilData_NotInOutput","Elapsed":0} +{"Time":"2026-07-11T04:02:14.0163929+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTool_Marshal_RoundTrip"} +{"Time":"2026-07-11T04:02:14.0163929+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTool_Marshal_RoundTrip","Output":"=== CONT TestTool_Marshal_RoundTrip\n"} +{"Time":"2026-07-11T04:02:14.0163929+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTool_Marshal_RoundTrip","Output":"--- PASS: TestTool_Marshal_RoundTrip (0.00s)\n"} +{"Time":"2026-07-11T04:02:14.0163929+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTool_Marshal_RoundTrip","Elapsed":0} +{"Time":"2026-07-11T04:02:14.0163929+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleInitialize_IDEchoed"} +{"Time":"2026-07-11T04:02:14.0163929+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleInitialize_IDEchoed","Output":"=== CONT TestHandleInitialize_IDEchoed\n"} +{"Time":"2026-07-11T04:02:14.0163929+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleInitialize_IDEchoed","Output":"--- PASS: TestHandleInitialize_IDEchoed (0.00s)\n"} +{"Time":"2026-07-11T04:02:14.0163929+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleInitialize_IDEchoed","Elapsed":0} +{"Time":"2026-07-11T04:02:14.0163929+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleInitialize_CapabilitiesPresent"} +{"Time":"2026-07-11T04:02:14.0163929+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleInitialize_CapabilitiesPresent","Output":"=== CONT TestHandleInitialize_CapabilitiesPresent\n"} +{"Time":"2026-07-11T04:02:14.0163929+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleInitialize_CapabilitiesPresent","Output":"--- PASS: TestHandleInitialize_CapabilitiesPresent (0.00s)\n"} +{"Time":"2026-07-11T04:02:14.0163929+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleInitialize_CapabilitiesPresent","Elapsed":0} +{"Time":"2026-07-11T04:02:14.0163929+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestToolCallParams_ComplexArgs"} +{"Time":"2026-07-11T04:02:14.0163929+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestToolCallParams_ComplexArgs","Output":"=== CONT TestToolCallParams_ComplexArgs\n"} +{"Time":"2026-07-11T04:02:14.0163929+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestToolCallParams_ComplexArgs","Output":"--- PASS: TestToolCallParams_ComplexArgs (0.00s)\n"} +{"Time":"2026-07-11T04:02:14.0163929+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestToolCallParams_ComplexArgs","Elapsed":0} +{"Time":"2026-07-11T04:02:14.0163929+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleInitialize_ProtocolAndVersion"} +{"Time":"2026-07-11T04:02:14.0163929+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleInitialize_ProtocolAndVersion","Output":"=== CONT TestHandleInitialize_ProtocolAndVersion\n"} +{"Time":"2026-07-11T04:02:14.0163929+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleInitialize_ProtocolAndVersion","Output":"--- PASS: TestHandleInitialize_ProtocolAndVersion (0.00s)\n"} +{"Time":"2026-07-11T04:02:14.0163929+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleInitialize_ProtocolAndVersion","Elapsed":0} +{"Time":"2026-07-11T04:02:14.0163929+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestToolCallParams_Unmarshal"} +{"Time":"2026-07-11T04:02:14.0163929+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestToolCallParams_Unmarshal","Output":"=== CONT TestToolCallParams_Unmarshal\n"} +{"Time":"2026-07-11T04:02:14.0163929+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestToolCallParams_Unmarshal/recall"} +{"Time":"2026-07-11T04:02:14.0163929+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestToolCallParams_Unmarshal/recall","Output":"=== RUN TestToolCallParams_Unmarshal/recall\n"} +{"Time":"2026-07-11T04:02:14.0163929+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestToolCallParams_Unmarshal/recall","Output":"=== PAUSE TestToolCallParams_Unmarshal/recall\n"} +{"Time":"2026-07-11T04:02:14.0163929+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestToolCallParams_Unmarshal/recall"} +{"Time":"2026-07-11T04:02:14.0163929+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestToolCallParams_Unmarshal/store"} +{"Time":"2026-07-11T04:02:14.0163929+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestToolCallParams_Unmarshal/store","Output":"=== RUN TestToolCallParams_Unmarshal/store\n"} +{"Time":"2026-07-11T04:02:14.0163929+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestToolCallParams_Unmarshal/store","Output":"=== PAUSE TestToolCallParams_Unmarshal/store\n"} +{"Time":"2026-07-11T04:02:14.0163929+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestToolCallParams_Unmarshal/store"} +{"Time":"2026-07-11T04:02:14.0163929+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestToolCallParams_Unmarshal/no-args"} +{"Time":"2026-07-11T04:02:14.0163929+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestToolCallParams_Unmarshal/no-args","Output":"=== RUN TestToolCallParams_Unmarshal/no-args\n"} +{"Time":"2026-07-11T04:02:14.0163929+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestToolCallParams_Unmarshal/no-args","Output":"=== PAUSE TestToolCallParams_Unmarshal/no-args\n"} +{"Time":"2026-07-11T04:02:14.0163929+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestToolCallParams_Unmarshal/no-args"} +{"Time":"2026-07-11T04:02:14.0163929+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestServer_FieldsInjected"} +{"Time":"2026-07-11T04:02:14.0163929+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestServer_FieldsInjected","Output":"=== CONT TestServer_FieldsInjected\n"} +{"Time":"2026-07-11T04:02:14.0163929+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestServer_FieldsInjected","Output":"--- PASS: TestServer_FieldsInjected (0.00s)\n"} +{"Time":"2026-07-11T04:02:14.0163929+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestServer_FieldsInjected","Elapsed":0} +{"Time":"2026-07-11T04:02:14.0163929+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestResponse_Marshal_Table"} +{"Time":"2026-07-11T04:02:14.0163929+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestResponse_Marshal_Table","Output":"=== CONT TestResponse_Marshal_Table\n"} +{"Time":"2026-07-11T04:02:14.0163929+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestResponse_Marshal_Table/success_result"} +{"Time":"2026-07-11T04:02:14.0163929+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestResponse_Marshal_Table/success_result","Output":"=== RUN TestResponse_Marshal_Table/success_result\n"} +{"Time":"2026-07-11T04:02:14.0163929+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestResponse_Marshal_Table/success_result","Output":"=== PAUSE TestResponse_Marshal_Table/success_result\n"} +{"Time":"2026-07-11T04:02:14.0163929+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestResponse_Marshal_Table/success_result"} +{"Time":"2026-07-11T04:02:14.0163929+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestResponse_Marshal_Table/error_response"} +{"Time":"2026-07-11T04:02:14.0163929+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestResponse_Marshal_Table/error_response","Output":"=== RUN TestResponse_Marshal_Table/error_response\n"} +{"Time":"2026-07-11T04:02:14.0163929+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestResponse_Marshal_Table/error_response","Output":"=== PAUSE TestResponse_Marshal_Table/error_response\n"} +{"Time":"2026-07-11T04:02:14.0163929+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestResponse_Marshal_Table/error_response"} +{"Time":"2026-07-11T04:02:14.0163929+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestResponse_Marshal_Table/error_with_data"} +{"Time":"2026-07-11T04:02:14.0163929+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestResponse_Marshal_Table/error_with_data","Output":"=== RUN TestResponse_Marshal_Table/error_with_data\n"} +{"Time":"2026-07-11T04:02:14.0163929+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestResponse_Marshal_Table/error_with_data","Output":"=== PAUSE TestResponse_Marshal_Table/error_with_data\n"} +{"Time":"2026-07-11T04:02:14.0163929+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestResponse_Marshal_Table/error_with_data"} +{"Time":"2026-07-11T04:02:14.0163929+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestResponse_Marshal_Table/nil_id"} +{"Time":"2026-07-11T04:02:14.0163929+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestResponse_Marshal_Table/nil_id","Output":"=== RUN TestResponse_Marshal_Table/nil_id\n"} +{"Time":"2026-07-11T04:02:14.0163929+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestResponse_Marshal_Table/nil_id","Output":"=== PAUSE TestResponse_Marshal_Table/nil_id\n"} +{"Time":"2026-07-11T04:02:14.0163929+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestResponse_Marshal_Table/nil_id"} +{"Time":"2026-07-11T04:02:14.0163929+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestVersion_ReturnsVersion"} +{"Time":"2026-07-11T04:02:14.0163929+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestVersion_ReturnsVersion","Output":"=== CONT TestVersion_ReturnsVersion\n"} +{"Time":"2026-07-11T04:02:14.0163929+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestVersion_ReturnsVersion","Output":"--- PASS: TestVersion_ReturnsVersion (0.00s)\n"} +{"Time":"2026-07-11T04:02:14.0163929+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestVersion_ReturnsVersion","Elapsed":0} +{"Time":"2026-07-11T04:02:14.0163929+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestError_Marshal_Table"} +{"Time":"2026-07-11T04:02:14.0163929+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestError_Marshal_Table","Output":"=== CONT TestError_Marshal_Table\n"} +{"Time":"2026-07-11T04:02:14.0163929+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestError_Marshal_Table/parse_error"} +{"Time":"2026-07-11T04:02:14.0163929+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestError_Marshal_Table/parse_error","Output":"=== RUN TestError_Marshal_Table/parse_error\n"} +{"Time":"2026-07-11T04:02:14.0163929+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestError_Marshal_Table/parse_error","Output":"=== PAUSE TestError_Marshal_Table/parse_error\n"} +{"Time":"2026-07-11T04:02:14.0168935+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestError_Marshal_Table/parse_error"} +{"Time":"2026-07-11T04:02:14.0168935+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestError_Marshal_Table/method_not_found"} +{"Time":"2026-07-11T04:02:14.0168935+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestError_Marshal_Table/method_not_found","Output":"=== RUN TestError_Marshal_Table/method_not_found\n"} +{"Time":"2026-07-11T04:02:14.0168935+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestError_Marshal_Table/method_not_found","Output":"=== PAUSE TestError_Marshal_Table/method_not_found\n"} +{"Time":"2026-07-11T04:02:14.0168935+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestError_Marshal_Table/method_not_found"} +{"Time":"2026-07-11T04:02:14.0168935+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestError_Marshal_Table/with_data"} +{"Time":"2026-07-11T04:02:14.0168935+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestError_Marshal_Table/with_data","Output":"=== RUN TestError_Marshal_Table/with_data\n"} +{"Time":"2026-07-11T04:02:14.0168935+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestError_Marshal_Table/with_data","Output":"=== PAUSE TestError_Marshal_Table/with_data\n"} +{"Time":"2026-07-11T04:02:14.0168935+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestError_Marshal_Table/with_data"} +{"Time":"2026-07-11T04:02:14.0168935+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestError_Marshal_Table/nil_data_omitted"} +{"Time":"2026-07-11T04:02:14.0168935+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestError_Marshal_Table/nil_data_omitted","Output":"=== RUN TestError_Marshal_Table/nil_data_omitted\n"} +{"Time":"2026-07-11T04:02:14.0168935+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestError_Marshal_Table/nil_data_omitted","Output":"=== PAUSE TestError_Marshal_Table/nil_data_omitted\n"} +{"Time":"2026-07-11T04:02:14.0168935+03:00","Action":"pause","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestError_Marshal_Table/nil_data_omitted"} +{"Time":"2026-07-11T04:02:14.0168935+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestNewServer_HasStdinStdout"} +{"Time":"2026-07-11T04:02:14.0168935+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestNewServer_HasStdinStdout","Output":"=== CONT TestNewServer_HasStdinStdout\n"} +{"Time":"2026-07-11T04:02:14.0168935+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestNewServer_HasStdinStdout","Output":"--- PASS: TestNewServer_HasStdinStdout (0.00s)\n"} +{"Time":"2026-07-11T04:02:14.0168935+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestNewServer_HasStdinStdout","Elapsed":0} +{"Time":"2026-07-11T04:02:14.0168935+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTimelineParams_AllFields"} +{"Time":"2026-07-11T04:02:14.0168935+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTimelineParams_AllFields","Output":"=== CONT TestTimelineParams_AllFields\n"} +{"Time":"2026-07-11T04:02:14.0168935+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTimelineParams_AllFields","Output":"--- PASS: TestTimelineParams_AllFields (0.00s)\n"} +{"Time":"2026-07-11T04:02:14.0168935+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTimelineParams_AllFields","Elapsed":0} +{"Time":"2026-07-11T04:02:14.0168935+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestNewServer_CreatesWithVersion"} +{"Time":"2026-07-11T04:02:14.0168935+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestNewServer_CreatesWithVersion","Output":"=== CONT TestNewServer_CreatesWithVersion\n"} +{"Time":"2026-07-11T04:02:14.0168935+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestNewServer_CreatesWithVersion","Output":"--- PASS: TestNewServer_CreatesWithVersion (0.00s)\n"} +{"Time":"2026-07-11T04:02:14.0168935+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestNewServer_CreatesWithVersion","Elapsed":0} +{"Time":"2026-07-11T04:02:14.0168935+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRequest_Unmarshal_NullID"} +{"Time":"2026-07-11T04:02:14.0168935+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRequest_Unmarshal_NullID","Output":"=== CONT TestRequest_Unmarshal_NullID\n"} +{"Time":"2026-07-11T04:02:14.0168935+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRequest_Unmarshal_NullID","Output":"--- PASS: TestRequest_Unmarshal_NullID (0.00s)\n"} +{"Time":"2026-07-11T04:02:14.0168935+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRequest_Unmarshal_NullID","Elapsed":0} +{"Time":"2026-07-11T04:02:14.0168935+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRequest_Unmarshal_RoundTrip"} +{"Time":"2026-07-11T04:02:14.0168935+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRequest_Unmarshal_RoundTrip","Output":"=== CONT TestRequest_Unmarshal_RoundTrip\n"} +{"Time":"2026-07-11T04:02:14.0168935+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRequest_Unmarshal_RoundTrip","Output":"--- PASS: TestRequest_Unmarshal_RoundTrip (0.00s)\n"} +{"Time":"2026-07-11T04:02:14.0168935+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRequest_Unmarshal_RoundTrip","Elapsed":0} +{"Time":"2026-07-11T04:02:14.0168935+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsList_AllToolSchemasHaveTypeAndProperties"} +{"Time":"2026-07-11T04:02:14.0168935+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsList_AllToolSchemasHaveTypeAndProperties","Output":"=== CONT TestHandleToolsList_AllToolSchemasHaveTypeAndProperties\n"} +{"Time":"2026-07-11T04:02:14.0168935+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsList_AllToolSchemasHaveTypeAndProperties","Output":"--- PASS: TestHandleToolsList_AllToolSchemasHaveTypeAndProperties (0.00s)\n"} +{"Time":"2026-07-11T04:02:14.0168935+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleToolsList_AllToolSchemasHaveTypeAndProperties","Elapsed":0} +{"Time":"2026-07-11T04:02:14.0168935+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRequest_Marshal_Table/initialize"} +{"Time":"2026-07-11T04:02:14.0168935+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRequest_Marshal_Table/initialize","Output":"=== CONT TestRequest_Marshal_Table/initialize\n"} +{"Time":"2026-07-11T04:02:14.0168935+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRequest_Marshal_Table/initialize","Output":"--- PASS: TestRequest_Marshal_Table/initialize (0.00s)\n"} +{"Time":"2026-07-11T04:02:14.0168935+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRequest_Marshal_Table/initialize","Elapsed":0} +{"Time":"2026-07-11T04:02:14.0168935+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRequest_Marshal_Table/with_params"} +{"Time":"2026-07-11T04:02:14.0168935+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRequest_Marshal_Table/with_params","Output":"=== CONT TestRequest_Marshal_Table/with_params\n"} +{"Time":"2026-07-11T04:02:14.0168935+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRequest_Marshal_Table/with_params","Output":"--- PASS: TestRequest_Marshal_Table/with_params (0.00s)\n"} +{"Time":"2026-07-11T04:02:14.0168935+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRequest_Marshal_Table/with_params","Elapsed":0} +{"Time":"2026-07-11T04:02:14.0168935+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRequest_Marshal_Table/null_id"} +{"Time":"2026-07-11T04:02:14.0168935+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRequest_Marshal_Table/null_id","Output":"=== CONT TestRequest_Marshal_Table/null_id\n"} +{"Time":"2026-07-11T04:02:14.0168935+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRequest_Marshal_Table/null_id","Output":"--- PASS: TestRequest_Marshal_Table/null_id (0.00s)\n"} +{"Time":"2026-07-11T04:02:14.0168935+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRequest_Marshal_Table/null_id","Elapsed":0} +{"Time":"2026-07-11T04:02:14.0168935+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRequest_Marshal_Table/string_id"} +{"Time":"2026-07-11T04:02:14.0168935+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRequest_Marshal_Table/string_id","Output":"=== CONT TestRequest_Marshal_Table/string_id\n"} +{"Time":"2026-07-11T04:02:14.0168935+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRequest_Marshal_Table/string_id","Output":"--- PASS: TestRequest_Marshal_Table/string_id (0.00s)\n"} +{"Time":"2026-07-11T04:02:14.0168935+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRequest_Marshal_Table/string_id","Elapsed":0} +{"Time":"2026-07-11T04:02:14.0168935+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRequest_Marshal_Table","Output":"--- PASS: TestRequest_Marshal_Table (0.00s)\n"} +{"Time":"2026-07-11T04:02:14.0168935+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestRequest_Marshal_Table","Elapsed":0} +{"Time":"2026-07-11T04:02:14.0168935+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestJSONRPCErrorCodes_Table/Parse_error"} +{"Time":"2026-07-11T04:02:14.0168935+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestJSONRPCErrorCodes_Table/Parse_error","Output":"=== CONT TestJSONRPCErrorCodes_Table/Parse_error\n"} +{"Time":"2026-07-11T04:02:14.0168935+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestJSONRPCErrorCodes_Table/Parse_error","Output":"--- PASS: TestJSONRPCErrorCodes_Table/Parse_error (0.00s)\n"} +{"Time":"2026-07-11T04:02:14.0168935+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestJSONRPCErrorCodes_Table/Parse_error","Elapsed":0} +{"Time":"2026-07-11T04:02:14.0168935+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestJSONRPCErrorCodes_Table/Invalid_params"} +{"Time":"2026-07-11T04:02:14.0168935+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestJSONRPCErrorCodes_Table/Invalid_params","Output":"=== CONT TestJSONRPCErrorCodes_Table/Invalid_params\n"} +{"Time":"2026-07-11T04:02:14.0168935+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestJSONRPCErrorCodes_Table/Invalid_params","Output":"--- PASS: TestJSONRPCErrorCodes_Table/Invalid_params (0.00s)\n"} +{"Time":"2026-07-11T04:02:14.0168935+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestJSONRPCErrorCodes_Table/Invalid_params","Elapsed":0} +{"Time":"2026-07-11T04:02:14.0168935+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestJSONRPCErrorCodes_Table/Internal_error"} +{"Time":"2026-07-11T04:02:14.0168935+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestJSONRPCErrorCodes_Table/Internal_error","Output":"=== CONT TestJSONRPCErrorCodes_Table/Internal_error\n"} +{"Time":"2026-07-11T04:02:14.0168935+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestJSONRPCErrorCodes_Table/Internal_error","Output":"--- PASS: TestJSONRPCErrorCodes_Table/Internal_error (0.00s)\n"} +{"Time":"2026-07-11T04:02:14.0168935+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestJSONRPCErrorCodes_Table/Internal_error","Elapsed":0} +{"Time":"2026-07-11T04:02:14.0168935+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestJSONRPCErrorCodes_Table/Method_not_found"} +{"Time":"2026-07-11T04:02:14.0168935+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestJSONRPCErrorCodes_Table/Method_not_found","Output":"=== CONT TestJSONRPCErrorCodes_Table/Method_not_found\n"} +{"Time":"2026-07-11T04:02:14.0168935+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestJSONRPCErrorCodes_Table/Method_not_found","Output":"--- PASS: TestJSONRPCErrorCodes_Table/Method_not_found (0.00s)\n"} +{"Time":"2026-07-11T04:02:14.0168935+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestJSONRPCErrorCodes_Table/Method_not_found","Elapsed":0} +{"Time":"2026-07-11T04:02:14.0168935+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestJSONRPCErrorCodes_Table/Invalid_Request"} +{"Time":"2026-07-11T04:02:14.0168935+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestJSONRPCErrorCodes_Table/Invalid_Request","Output":"=== CONT TestJSONRPCErrorCodes_Table/Invalid_Request\n"} +{"Time":"2026-07-11T04:02:14.0168935+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestJSONRPCErrorCodes_Table/Invalid_Request","Output":"--- PASS: TestJSONRPCErrorCodes_Table/Invalid_Request (0.00s)\n"} +{"Time":"2026-07-11T04:02:14.0168935+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestJSONRPCErrorCodes_Table/Invalid_Request","Elapsed":0} +{"Time":"2026-07-11T04:02:14.0168935+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestJSONRPCErrorCodes_Table","Output":"--- PASS: TestJSONRPCErrorCodes_Table (0.00s)\n"} +{"Time":"2026-07-11T04:02:14.0168935+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestJSONRPCErrorCodes_Table","Elapsed":0} +{"Time":"2026-07-11T04:02:14.0168935+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_ParameterValidation_Table/find_similar_observations/{invalid"} +{"Time":"2026-07-11T04:02:14.0168935+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_ParameterValidation_Table/find_similar_observations/{invalid","Output":"=== CONT TestCallTool_ParameterValidation_Table/find_similar_observations/{invalid\n"} +{"Time":"2026-07-11T04:02:14.0168935+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_ParameterValidation_Table/find_similar_observations/{invalid","Output":"--- PASS: TestCallTool_ParameterValidation_Table/find_similar_observations/{invalid (0.00s)\n"} +{"Time":"2026-07-11T04:02:14.0173942+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_ParameterValidation_Table/find_similar_observations/{invalid","Elapsed":0} +{"Time":"2026-07-11T04:02:14.0173942+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_ParameterValidation_Table/analyze_search_patterns/{invalid"} +{"Time":"2026-07-11T04:02:14.0173942+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_ParameterValidation_Table/analyze_search_patterns/{invalid","Output":"=== CONT TestCallTool_ParameterValidation_Table/analyze_search_patterns/{invalid\n"} +{"Time":"2026-07-11T04:02:14.0173942+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_ParameterValidation_Table/analyze_search_patterns/{invalid","Output":"--- PASS: TestCallTool_ParameterValidation_Table/analyze_search_patterns/{invalid (0.00s)\n"} +{"Time":"2026-07-11T04:02:14.0173942+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_ParameterValidation_Table/analyze_search_patterns/{invalid","Elapsed":0} +{"Time":"2026-07-11T04:02:14.0173942+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_ParameterValidation_Table/find_similar_observations/{}"} +{"Time":"2026-07-11T04:02:14.0173942+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_ParameterValidation_Table/find_similar_observations/{}","Output":"=== CONT TestCallTool_ParameterValidation_Table/find_similar_observations/{}\n"} +{"Time":"2026-07-11T04:02:14.0173942+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_ParameterValidation_Table/find_similar_observations/{}","Output":"--- PASS: TestCallTool_ParameterValidation_Table/find_similar_observations/{} (0.00s)\n"} +{"Time":"2026-07-11T04:02:14.0173942+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_ParameterValidation_Table/find_similar_observations/{}","Elapsed":0} +{"Time":"2026-07-11T04:02:14.0173942+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_ParameterValidation_Table","Output":"--- PASS: TestCallTool_ParameterValidation_Table (0.00s)\n"} +{"Time":"2026-07-11T04:02:14.0173942+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_ParameterValidation_Table","Elapsed":0} +{"Time":"2026-07-11T04:02:14.0173942+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleRequest_CapabilityStubs/resources/list"} +{"Time":"2026-07-11T04:02:14.0173942+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleRequest_CapabilityStubs/resources/list","Output":"=== CONT TestHandleRequest_CapabilityStubs/resources/list\n"} +{"Time":"2026-07-11T04:02:14.0173942+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleRequest_CapabilityStubs/resources/list","Output":"--- PASS: TestHandleRequest_CapabilityStubs/resources/list (0.00s)\n"} +{"Time":"2026-07-11T04:02:14.0173942+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleRequest_CapabilityStubs/resources/list","Elapsed":0} +{"Time":"2026-07-11T04:02:14.0173942+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleRequest_CapabilityStubs/prompts/list"} +{"Time":"2026-07-11T04:02:14.0173942+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleRequest_CapabilityStubs/prompts/list","Output":"=== CONT TestHandleRequest_CapabilityStubs/prompts/list\n"} +{"Time":"2026-07-11T04:02:14.0173942+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleRequest_CapabilityStubs/prompts/list","Output":"--- PASS: TestHandleRequest_CapabilityStubs/prompts/list (0.00s)\n"} +{"Time":"2026-07-11T04:02:14.0173942+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleRequest_CapabilityStubs/prompts/list","Elapsed":0} +{"Time":"2026-07-11T04:02:14.0173942+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleRequest_CapabilityStubs/completion/complete"} +{"Time":"2026-07-11T04:02:14.0173942+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleRequest_CapabilityStubs/completion/complete","Output":"=== CONT TestHandleRequest_CapabilityStubs/completion/complete\n"} +{"Time":"2026-07-11T04:02:14.0173942+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleRequest_CapabilityStubs/completion/complete","Output":"--- PASS: TestHandleRequest_CapabilityStubs/completion/complete (0.00s)\n"} +{"Time":"2026-07-11T04:02:14.0173942+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleRequest_CapabilityStubs/completion/complete","Elapsed":0} +{"Time":"2026-07-11T04:02:14.0173942+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleRequest_CapabilityStubs/resources/templates/list"} +{"Time":"2026-07-11T04:02:14.0173942+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleRequest_CapabilityStubs/resources/templates/list","Output":"=== CONT TestHandleRequest_CapabilityStubs/resources/templates/list\n"} +{"Time":"2026-07-11T04:02:14.0173942+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleRequest_CapabilityStubs/resources/templates/list","Output":"--- PASS: TestHandleRequest_CapabilityStubs/resources/templates/list (0.00s)\n"} +{"Time":"2026-07-11T04:02:14.0173942+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleRequest_CapabilityStubs/resources/templates/list","Elapsed":0} +{"Time":"2026-07-11T04:02:14.0173942+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleRequest_CapabilityStubs","Output":"--- PASS: TestHandleRequest_CapabilityStubs (0.00s)\n"} +{"Time":"2026-07-11T04:02:14.0173942+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestHandleRequest_CapabilityStubs","Elapsed":0} +{"Time":"2026-07-11T04:02:14.0173942+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_UnknownToolNames_Table/invalid_tool"} +{"Time":"2026-07-11T04:02:14.0173942+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_UnknownToolNames_Table/invalid_tool","Output":"=== CONT TestCallTool_UnknownToolNames_Table/invalid_tool\n"} +{"Time":"2026-07-11T04:02:14.0173942+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_UnknownToolNames_Table/invalid_tool","Output":"--- PASS: TestCallTool_UnknownToolNames_Table/invalid_tool (0.00s)\n"} +{"Time":"2026-07-11T04:02:14.0173942+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_UnknownToolNames_Table/invalid_tool","Elapsed":0} +{"Time":"2026-07-11T04:02:14.0173942+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_UnknownToolNames_Table/search_v2"} +{"Time":"2026-07-11T04:02:14.0173942+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_UnknownToolNames_Table/search_v2","Output":"=== CONT TestCallTool_UnknownToolNames_Table/search_v2\n"} +{"Time":"2026-07-11T04:02:14.0173942+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_UnknownToolNames_Table/search_v2","Output":"--- PASS: TestCallTool_UnknownToolNames_Table/search_v2 (0.00s)\n"} +{"Time":"2026-07-11T04:02:14.0173942+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_UnknownToolNames_Table/search_v2","Elapsed":0} +{"Time":"2026-07-11T04:02:14.0173942+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_UnknownToolNames_Table/timeline_x"} +{"Time":"2026-07-11T04:02:14.0173942+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_UnknownToolNames_Table/timeline_x","Output":"=== CONT TestCallTool_UnknownToolNames_Table/timeline_x\n"} +{"Time":"2026-07-11T04:02:14.0173942+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_UnknownToolNames_Table/timeline_x","Output":"--- PASS: TestCallTool_UnknownToolNames_Table/timeline_x (0.00s)\n"} +{"Time":"2026-07-11T04:02:14.0173942+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_UnknownToolNames_Table/timeline_x","Elapsed":0} +{"Time":"2026-07-11T04:02:14.0173942+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_UnknownToolNames_Table/nonexistent"} +{"Time":"2026-07-11T04:02:14.0173942+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_UnknownToolNames_Table/nonexistent","Output":"=== CONT TestCallTool_UnknownToolNames_Table/nonexistent\n"} +{"Time":"2026-07-11T04:02:14.0173942+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_UnknownToolNames_Table/nonexistent","Output":"--- PASS: TestCallTool_UnknownToolNames_Table/nonexistent (0.00s)\n"} +{"Time":"2026-07-11T04:02:14.0173942+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_UnknownToolNames_Table/nonexistent","Elapsed":0} +{"Time":"2026-07-11T04:02:14.0173942+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_UnknownToolNames_Table","Output":"--- PASS: TestCallTool_UnknownToolNames_Table (0.00s)\n"} +{"Time":"2026-07-11T04:02:14.0173942+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestCallTool_UnknownToolNames_Table","Elapsed":0} +{"Time":"2026-07-11T04:02:14.0173942+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTimelineParams_Unmarshal_Table/anchor_id"} +{"Time":"2026-07-11T04:02:14.0173942+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTimelineParams_Unmarshal_Table/anchor_id","Output":"=== CONT TestTimelineParams_Unmarshal_Table/anchor_id\n"} +{"Time":"2026-07-11T04:02:14.0173942+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTimelineParams_Unmarshal_Table/anchor_id","Output":"--- PASS: TestTimelineParams_Unmarshal_Table/anchor_id (0.00s)\n"} +{"Time":"2026-07-11T04:02:14.0173942+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTimelineParams_Unmarshal_Table/anchor_id","Elapsed":0} +{"Time":"2026-07-11T04:02:14.0173942+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTimelineParams_Unmarshal_Table/invalid_json"} +{"Time":"2026-07-11T04:02:14.0173942+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTimelineParams_Unmarshal_Table/invalid_json","Output":"=== CONT TestTimelineParams_Unmarshal_Table/invalid_json\n"} +{"Time":"2026-07-11T04:02:14.0173942+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTimelineParams_Unmarshal_Table/invalid_json","Output":"--- PASS: TestTimelineParams_Unmarshal_Table/invalid_json (0.00s)\n"} +{"Time":"2026-07-11T04:02:14.0173942+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTimelineParams_Unmarshal_Table/invalid_json","Elapsed":0} +{"Time":"2026-07-11T04:02:14.0173942+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTimelineParams_Unmarshal_Table/query_only"} +{"Time":"2026-07-11T04:02:14.0173942+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTimelineParams_Unmarshal_Table/query_only","Output":"=== CONT TestTimelineParams_Unmarshal_Table/query_only\n"} +{"Time":"2026-07-11T04:02:14.0173942+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTimelineParams_Unmarshal_Table/query_only","Output":"--- PASS: TestTimelineParams_Unmarshal_Table/query_only (0.00s)\n"} +{"Time":"2026-07-11T04:02:14.0173942+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTimelineParams_Unmarshal_Table/query_only","Elapsed":0} +{"Time":"2026-07-11T04:02:14.0173942+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTimelineParams_Unmarshal_Table/empty_object_valid"} +{"Time":"2026-07-11T04:02:14.0173942+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTimelineParams_Unmarshal_Table/empty_object_valid","Output":"=== CONT TestTimelineParams_Unmarshal_Table/empty_object_valid\n"} +{"Time":"2026-07-11T04:02:14.0173942+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTimelineParams_Unmarshal_Table/empty_object_valid","Output":"--- PASS: TestTimelineParams_Unmarshal_Table/empty_object_valid (0.00s)\n"} +{"Time":"2026-07-11T04:02:14.0173942+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTimelineParams_Unmarshal_Table/empty_object_valid","Elapsed":0} +{"Time":"2026-07-11T04:02:14.0173942+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTimelineParams_Unmarshal_Table","Output":"--- PASS: TestTimelineParams_Unmarshal_Table (0.00s)\n"} +{"Time":"2026-07-11T04:02:14.0173942+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestTimelineParams_Unmarshal_Table","Elapsed":0} +{"Time":"2026-07-11T04:02:14.0173942+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestToolCallParams_Unmarshal/recall"} +{"Time":"2026-07-11T04:02:14.0173942+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestToolCallParams_Unmarshal/recall","Output":"=== CONT TestToolCallParams_Unmarshal/recall\n"} +{"Time":"2026-07-11T04:02:14.0173942+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestToolCallParams_Unmarshal/recall","Output":"--- PASS: TestToolCallParams_Unmarshal/recall (0.00s)\n"} +{"Time":"2026-07-11T04:02:14.0173942+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestToolCallParams_Unmarshal/recall","Elapsed":0} +{"Time":"2026-07-11T04:02:14.0173942+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestToolCallParams_Unmarshal/no-args"} +{"Time":"2026-07-11T04:02:14.0173942+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestToolCallParams_Unmarshal/no-args","Output":"=== CONT TestToolCallParams_Unmarshal/no-args\n"} +{"Time":"2026-07-11T04:02:14.0173942+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestToolCallParams_Unmarshal/no-args","Output":"--- PASS: TestToolCallParams_Unmarshal/no-args (0.00s)\n"} +{"Time":"2026-07-11T04:02:14.0173942+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestToolCallParams_Unmarshal/no-args","Elapsed":0} +{"Time":"2026-07-11T04:02:14.0173942+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestToolCallParams_Unmarshal/store"} +{"Time":"2026-07-11T04:02:14.0173942+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestToolCallParams_Unmarshal/store","Output":"=== CONT TestToolCallParams_Unmarshal/store\n"} +{"Time":"2026-07-11T04:02:14.0173942+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestToolCallParams_Unmarshal/store","Output":"--- PASS: TestToolCallParams_Unmarshal/store (0.00s)\n"} +{"Time":"2026-07-11T04:02:14.0173942+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestToolCallParams_Unmarshal/store","Elapsed":0} +{"Time":"2026-07-11T04:02:14.0173942+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestToolCallParams_Unmarshal","Output":"--- PASS: TestToolCallParams_Unmarshal (0.00s)\n"} +{"Time":"2026-07-11T04:02:14.0173942+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestToolCallParams_Unmarshal","Elapsed":0} +{"Time":"2026-07-11T04:02:14.0173942+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestResponse_Marshal_Table/success_result"} +{"Time":"2026-07-11T04:02:14.0173942+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestResponse_Marshal_Table/success_result","Output":"=== CONT TestResponse_Marshal_Table/success_result\n"} +{"Time":"2026-07-11T04:02:14.0173942+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestResponse_Marshal_Table/success_result","Output":"--- PASS: TestResponse_Marshal_Table/success_result (0.00s)\n"} +{"Time":"2026-07-11T04:02:14.0173942+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestResponse_Marshal_Table/success_result","Elapsed":0} +{"Time":"2026-07-11T04:02:14.0173942+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestResponse_Marshal_Table/error_with_data"} +{"Time":"2026-07-11T04:02:14.0173942+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestResponse_Marshal_Table/error_with_data","Output":"=== CONT TestResponse_Marshal_Table/error_with_data\n"} +{"Time":"2026-07-11T04:02:14.0173942+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestResponse_Marshal_Table/error_with_data","Output":"--- PASS: TestResponse_Marshal_Table/error_with_data (0.00s)\n"} +{"Time":"2026-07-11T04:02:14.0173942+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestResponse_Marshal_Table/error_with_data","Elapsed":0} +{"Time":"2026-07-11T04:02:14.0173942+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestResponse_Marshal_Table/nil_id"} +{"Time":"2026-07-11T04:02:14.0173942+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestResponse_Marshal_Table/nil_id","Output":"=== CONT TestResponse_Marshal_Table/nil_id\n"} +{"Time":"2026-07-11T04:02:14.0173942+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestResponse_Marshal_Table/nil_id","Output":"--- PASS: TestResponse_Marshal_Table/nil_id (0.00s)\n"} +{"Time":"2026-07-11T04:02:14.0173942+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestResponse_Marshal_Table/nil_id","Elapsed":0} +{"Time":"2026-07-11T04:02:14.0173942+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestResponse_Marshal_Table/error_response"} +{"Time":"2026-07-11T04:02:14.0173942+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestResponse_Marshal_Table/error_response","Output":"=== CONT TestResponse_Marshal_Table/error_response\n"} +{"Time":"2026-07-11T04:02:14.0173942+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestResponse_Marshal_Table/error_response","Output":"--- PASS: TestResponse_Marshal_Table/error_response (0.00s)\n"} +{"Time":"2026-07-11T04:02:14.0173942+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestResponse_Marshal_Table/error_response","Elapsed":0} +{"Time":"2026-07-11T04:02:14.0173942+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestResponse_Marshal_Table","Output":"--- PASS: TestResponse_Marshal_Table (0.00s)\n"} +{"Time":"2026-07-11T04:02:14.0173942+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestResponse_Marshal_Table","Elapsed":0} +{"Time":"2026-07-11T04:02:14.0173942+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestError_Marshal_Table/parse_error"} +{"Time":"2026-07-11T04:02:14.0173942+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestError_Marshal_Table/parse_error","Output":"=== CONT TestError_Marshal_Table/parse_error\n"} +{"Time":"2026-07-11T04:02:14.0173942+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestError_Marshal_Table/parse_error","Output":"--- PASS: TestError_Marshal_Table/parse_error (0.00s)\n"} +{"Time":"2026-07-11T04:02:14.0173942+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestError_Marshal_Table/parse_error","Elapsed":0} +{"Time":"2026-07-11T04:02:14.0173942+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestError_Marshal_Table/with_data"} +{"Time":"2026-07-11T04:02:14.0173942+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestError_Marshal_Table/with_data","Output":"=== CONT TestError_Marshal_Table/with_data\n"} +{"Time":"2026-07-11T04:02:14.0173942+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestError_Marshal_Table/with_data","Output":"--- PASS: TestError_Marshal_Table/with_data (0.00s)\n"} +{"Time":"2026-07-11T04:02:14.0173942+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestError_Marshal_Table/with_data","Elapsed":0} +{"Time":"2026-07-11T04:02:14.0173942+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestError_Marshal_Table/nil_data_omitted"} +{"Time":"2026-07-11T04:02:14.0173942+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestError_Marshal_Table/nil_data_omitted","Output":"=== CONT TestError_Marshal_Table/nil_data_omitted\n"} +{"Time":"2026-07-11T04:02:14.0173942+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestError_Marshal_Table/nil_data_omitted","Output":"--- PASS: TestError_Marshal_Table/nil_data_omitted (0.00s)\n"} +{"Time":"2026-07-11T04:02:14.0173942+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestError_Marshal_Table/nil_data_omitted","Elapsed":0} +{"Time":"2026-07-11T04:02:14.0173942+03:00","Action":"cont","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestError_Marshal_Table/method_not_found"} +{"Time":"2026-07-11T04:02:14.0173942+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestError_Marshal_Table/method_not_found","Output":"=== CONT TestError_Marshal_Table/method_not_found\n"} +{"Time":"2026-07-11T04:02:14.0173942+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestError_Marshal_Table/method_not_found","Output":"--- PASS: TestError_Marshal_Table/method_not_found (0.00s)\n"} +{"Time":"2026-07-11T04:02:14.0173942+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestError_Marshal_Table/method_not_found","Elapsed":0} +{"Time":"2026-07-11T04:02:14.0173942+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestError_Marshal_Table","Output":"--- PASS: TestError_Marshal_Table (0.00s)\n"} +{"Time":"2026-07-11T04:02:14.0173942+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestError_Marshal_Table","Elapsed":0} +{"Time":"2026-07-11T04:02:14.0173942+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Output":"FAIL\n"} +{"Time":"2026-07-11T04:02:14.0398926+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Output":"coverage: 46.2% of statements\n"} +{"Time":"2026-07-11T04:02:14.0676765+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Output":"FAIL\tgithub.com/thebtf/engram/internal/mcp\t8.912s\n"} +{"Time":"2026-07-11T04:02:14.0676765+03:00","Action":"fail","Package":"github.com/thebtf/engram/internal/mcp","Elapsed":8.921} diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/repeat-01/pg-stat-activity-after.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/repeat-01/pg-stat-activity-after.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/repeat-01/pg-stat-activity-after.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/repeat-01/pg-stat-activity-after.stdout.log new file mode 100644 index 00000000..fe51488c --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/repeat-01/pg-stat-activity-after.stdout.log @@ -0,0 +1 @@ +[] diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/repeat-01/pg-stat-activity-before.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/repeat-01/pg-stat-activity-before.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/repeat-01/pg-stat-activity-before.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/repeat-01/pg-stat-activity-before.stdout.log new file mode 100644 index 00000000..fe51488c --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/repeat-01/pg-stat-activity-before.stdout.log @@ -0,0 +1 @@ +[] diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/repeat-01/repeat-summary.json b/.agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/repeat-01/repeat-summary.json new file mode 100644 index 00000000..e8662a9c --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/repeat-01/repeat-summary.json @@ -0,0 +1,36 @@ +{ + "repeat": 1, + "verdict": "FAIL", + "database": "engram_prc_rg_test_88e43617e8051e79_r1", + "schema": "public", + "database_schema_identity": "engram_prc_rg_test_88e43617e8051e79_r1.public", + "database_dsn": "REDACTED_DATABASE_DSN", + "database_create_confirmed": true, + "sequential_execution": { + "package_parallelism": 1, + "test_parallelism": 1 + }, + "race": false, + "connection_budget": 20, + "server_sessions_before": 6, + "server_sessions_after": 6, + "sessions_before": 0, + "sessions_after": 0, + "go_test_exit": 1, + "json_parser_exit": 1, + "coverage_policy": "Targeted", + "coverage_exit": 0, + "cleanup_exit": 0, + "cleanup_status": "PASS", + "required_session_start_execution": { + "schema_version": 1, + "verdict": "NOT_APPLICABLE", + "reason": "only an unfiltered canonical ./... run requires the 12-test session-start execution proof" + }, + "cleanup_summary": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\full-internal-mcp\\repeat-01\\cleanup\\cleanup.json", + "errors": [ + "go test failed with exit 1", + "go test JSON assertion failed with exit 1" + ], + "artifact_directory": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\full-internal-mcp\\repeat-01" +} diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/repeat-01/server-connection-count-after.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/repeat-01/server-connection-count-after.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/repeat-01/server-connection-count-after.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/repeat-01/server-connection-count-after.stdout.log new file mode 100644 index 00000000..1e8b3149 --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/repeat-01/server-connection-count-after.stdout.log @@ -0,0 +1 @@ +6 diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/repeat-01/server-connection-count-before.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/repeat-01/server-connection-count-before.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/repeat-01/server-connection-count-before.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/repeat-01/server-connection-count-before.stdout.log new file mode 100644 index 00000000..1e8b3149 --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/repeat-01/server-connection-count-before.stdout.log @@ -0,0 +1 @@ +6 diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/repeat-01/targeted-coverage.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/repeat-01/targeted-coverage.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/repeat-01/targeted-coverage.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/repeat-01/targeted-coverage.stdout.log new file mode 100644 index 00000000..0707546e --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/repeat-01/targeted-coverage.stdout.log @@ -0,0 +1,352 @@ +github.com/thebtf/engram/internal/mcp/audit_helpers.go:33: effectiveAuditWriter 80.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:44: isAuditEnabled 100.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:52: runAuditAsync 100.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:77: marshalState 62.5% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:92: logAuditCreate 100.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:117: logAuditEdit 90.9% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:142: logAuditDelete 90.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:166: logAuditGeneric 0.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:189: logAuditSupersede 90.0% +github.com/thebtf/engram/internal/mcp/coerce.go:30: parseArgs 87.5% +github.com/thebtf/engram/internal/mcp/coerce.go:46: coerceString 100.0% +github.com/thebtf/engram/internal/mcp/coerce.go:67: coerceInt 93.3% +github.com/thebtf/engram/internal/mcp/coerce.go:97: coerceInt64 86.7% +github.com/thebtf/engram/internal/mcp/coerce.go:127: coerceFloat64 81.8% +github.com/thebtf/engram/internal/mcp/coerce.go:151: coerceBool 66.7% +github.com/thebtf/engram/internal/mcp/coerce.go:177: coerceStringSlice 84.6% +github.com/thebtf/engram/internal/mcp/coerce.go:204: coerceInt64Slice 100.0% +github.com/thebtf/engram/internal/mcp/coerce.go:222: clampToInt 100.0% +github.com/thebtf/engram/internal/mcp/coerce.go:236: clampInt64ToInt 60.0% +github.com/thebtf/engram/internal/mcp/context.go:17: extractProjectFromHeader 100.0% +github.com/thebtf/engram/internal/mcp/context.go:22: contextWithProject 100.0% +github.com/thebtf/engram/internal/mcp/context.go:29: ContextWithProject 100.0% +github.com/thebtf/engram/internal/mcp/context.go:35: projectFromContext 100.0% +github.com/thebtf/engram/internal/mcp/context.go:41: contextWithSession 100.0% +github.com/thebtf/engram/internal/mcp/context.go:48: ContextWithSession 100.0% +github.com/thebtf/engram/internal/mcp/context.go:54: sessionFromContext 100.0% +github.com/thebtf/engram/internal/mcp/context.go:61: actorFromContext 100.0% +github.com/thebtf/engram/internal/mcp/health.go:22: NewMCPHealth 0.0% +github.com/thebtf/engram/internal/mcp/health.go:29: RecordRequest 0.0% +github.com/thebtf/engram/internal/mcp/health.go:36: RecordError 0.0% +github.com/thebtf/engram/internal/mcp/health.go:42: rotateWindowIfNeeded 0.0% +github.com/thebtf/engram/internal/mcp/health.go:55: HandleHealth 0.0% +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:28: ruleGovernanceCaptureEnabled 50.0% +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:39: captureActiveRuleIntent 80.0% +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:104: ruleIntentFingerprint 100.0% +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:113: marshalRuleCandidateIntentResponse 85.7% +github.com/thebtf/engram/internal/mcp/server.go:127: NewServer 100.0% +github.com/thebtf/engram/internal/mcp/server.go:141: SetBackfillStatusFunc 0.0% +github.com/thebtf/engram/internal/mcp/server.go:146: SetVersionedDocumentStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:151: SetIssueStore 100.0% +github.com/thebtf/engram/internal/mcp/server.go:156: SetMemoryStore 100.0% +github.com/thebtf/engram/internal/mcp/server.go:161: SetMetaMemoryIndex 100.0% +github.com/thebtf/engram/internal/mcp/server.go:166: SetHintQueue 100.0% +github.com/thebtf/engram/internal/mcp/server.go:171: SetStateStore 100.0% +github.com/thebtf/engram/internal/mcp/server.go:176: SetDirectiveCaptureService 100.0% +github.com/thebtf/engram/internal/mcp/server.go:181: SetBehavioralRulesStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:186: SetRuleGovernanceStore 100.0% +github.com/thebtf/engram/internal/mcp/server.go:191: SetRuleInjectionTelemetryStore 100.0% +github.com/thebtf/engram/internal/mcp/server.go:195: SetPromotionStore 100.0% +github.com/thebtf/engram/internal/mcp/server.go:199: SetGraphStore 100.0% +github.com/thebtf/engram/internal/mcp/server.go:204: SetNodesStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:211: SetAuditStore 100.0% +github.com/thebtf/engram/internal/mcp/server.go:216: SetPurgeStore 100.0% +github.com/thebtf/engram/internal/mcp/server.go:222: SetCandidateStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:228: SetSnapshotStore 100.0% +github.com/thebtf/engram/internal/mcp/server.go:234: SetBulkFacade 0.0% +github.com/thebtf/engram/internal/mcp/server.go:240: setTestAuditWriter 100.0% +github.com/thebtf/engram/internal/mcp/server.go:246: setTestMemoryEditor 100.0% +github.com/thebtf/engram/internal/mcp/server.go:252: setTestMemorySignificanceUpdater 100.0% +github.com/thebtf/engram/internal/mcp/server.go:260: SetWriteLintOrchestrator 100.0% +github.com/thebtf/engram/internal/mcp/server.go:269: SetRedactionRules 0.0% +github.com/thebtf/engram/internal/mcp/server.go:274: SetEmbeddingStores 0.0% +github.com/thebtf/engram/internal/mcp/server.go:282: SetRerankClient 0.0% +github.com/thebtf/engram/internal/mcp/server.go:290: SetStatsDB 0.0% +github.com/thebtf/engram/internal/mcp/server.go:297: HandleRequest 100.0% +github.com/thebtf/engram/internal/mcp/server.go:303: ListTools 71.4% +github.com/thebtf/engram/internal/mcp/server.go:332: Version 100.0% +github.com/thebtf/engram/internal/mcp/server.go:383: Run 81.8% +github.com/thebtf/engram/internal/mcp/server.go:427: handleRequest 100.0% +github.com/thebtf/engram/internal/mcp/server.go:461: handleNotification 50.0% +github.com/thebtf/engram/internal/mcp/server.go:473: handleInitialize 100.0% +github.com/thebtf/engram/internal/mcp/server.go:496: buildInstructions 25.0% +github.com/thebtf/engram/internal/mcp/server.go:660: storeMemoryTool 100.0% +github.com/thebtf/engram/internal/mcp/server.go:712: recallMemoryTool 100.0% +github.com/thebtf/engram/internal/mcp/server.go:805: primaryTools 100.0% +github.com/thebtf/engram/internal/mcp/server.go:942: handleToolsList 85.9% +github.com/thebtf/engram/internal/mcp/server.go:1612: handleToolsCall 100.0% +github.com/thebtf/engram/internal/mcp/server.go:1644: sanitizeToolCallArgs 83.3% +github.com/thebtf/engram/internal/mcp/server.go:1656: callTool 33.0% +github.com/thebtf/engram/internal/mcp/server.go:1874: sendResponse 60.0% +github.com/thebtf/engram/internal/mcp/server.go:1884: sendError 100.0% +github.com/thebtf/engram/internal/mcp/server.go:1896: handleFindSimilarObservations 92.3% +github.com/thebtf/engram/internal/mcp/server.go:1927: handleGetMemoryStats 12.3% +github.com/thebtf/engram/internal/mcp/server.go:2055: handleBackfillStatus 0.0% +github.com/thebtf/engram/internal/mcp/server.go:2071: handleCheckSystemHealth 64.1% +github.com/thebtf/engram/internal/mcp/server.go:2216: handleAnalyzeSearchPatterns 30.0% +github.com/thebtf/engram/internal/mcp/server.go:2246: handleSearchSessions 0.0% +github.com/thebtf/engram/internal/mcp/server.go:2251: handleListSessions 0.0% +github.com/thebtf/engram/internal/mcp/tools_admin.go:18: buildAdminTool 100.0% +github.com/thebtf/engram/internal/mcp/tools_admin.go:68: adminActionsForEnv 100.0% +github.com/thebtf/engram/internal/mcp/tools_admin.go:80: vnextEnabled 100.0% +github.com/thebtf/engram/internal/mcp/tools_admin.go:84: handleAdmin 57.1% +github.com/thebtf/engram/internal/mcp/tools_admin.go:120: handlePurgeProject 88.2% +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:27: ambientHintsEnabledFromEnv 100.0% +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:32: ambientHintsTool 100.0% +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:48: handleGetAmbientHints 79.2% +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:86: normalizeAmbientHintsToolLimit 80.0% +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:96: ambientHintItems 83.3% +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:114: errMissingSessionID 0.0% +github.com/thebtf/engram/internal/mcp/tools_brief.go:31: handleGetMemoryBrief 31.4% +github.com/thebtf/engram/internal/mcp/tools_brief.go:107: memoryBriefUsesPrincipalScope 100.0% +github.com/thebtf/engram/internal/mcp/tools_brief.go:115: handlePrincipalMemoryBrief 73.8% +github.com/thebtf/engram/internal/mcp/tools_brief.go:259: truncateBriefContent 75.0% +github.com/thebtf/engram/internal/mcp/tools_brief.go:270: filterInjectionByScope 0.0% +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:25: bulkOpsTools 100.0% +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:95: handleBulkPromote 52.4% +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:154: handleBulkDelete 47.6% +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:211: handleBulkSupersede 47.6% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:31: candidateItemFromDomain 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:51: newCandidateReviewSnapshot 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:59: requireCandidateReviewSnapshot 100.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:68: candidateTools 100.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:165: handleListCandidates 28.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:208: handleGetCandidate 35.3% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:239: handlePromoteCandidate 23.5% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:348: handleRejectCandidate 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:402: handleSupersedeCandidate 0.0% +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:34: codeIntelEnabled 100.0% +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:42: SetCodeChunkStore 100.0% +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:48: codebaseSearchTool 100.0% +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:79: codebaseStatusTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:100: handleCodebaseSearch 6.9% +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:194: handleCodebaseStatus 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:21: getVault 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:35: credentialStore 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:49: handleStoreCredential 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:130: handleGetCredential 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:192: handleListCredentials 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:243: handleDeleteCredential 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:302: handleVaultStatus 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:338: expandTagHierarchy 0.0% +github.com/thebtf/engram/internal/mcp/tools_directives.go:16: directivesCaptureEnabledFromEnv 100.0% +github.com/thebtf/engram/internal/mcp/tools_directives.go:20: rememberDirectiveTool 100.0% +github.com/thebtf/engram/internal/mcp/tools_directives.go:38: currentDirectiveCaptureService 100.0% +github.com/thebtf/engram/internal/mcp/tools_directives.go:48: handleRememberDirective 87.5% +github.com/thebtf/engram/internal/mcp/tools_directives.go:72: parseRememberDirectiveArgs 75.0% +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:10: handleDocsConsolidated 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents.go:15: handleListCollections 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents.go:61: handleListDocuments 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents.go:121: handleGetDocument 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents.go:165: handleRemoveDocument 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents.go:197: handleIngestDocument 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents.go:235: handleSearchCollection 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:15: handleDocCreate 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:61: handleDocRead 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:117: handleDocUpdate 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:122: handleDocList 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:175: handleDocHistory 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:232: handleDocComment 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:19: SetExperienceProvider 100.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:23: experienceHistoryTools 100.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:40: experienceHistoryReadSchema 100.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:65: experienceHistoryDetailSchema 100.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:82: experienceHistoryTriggerEnum 100.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:91: handleExperienceHistoryRead 85.7% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:103: handleExperienceHistoryDetail 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:115: parseExperienceHistoryReadArgs 75.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:142: parseExperienceHistoryDetailArgs 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:157: experienceHistoryTriggersFromArgs 93.3% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:180: marshalExperienceHistory 75.0% +github.com/thebtf/engram/internal/mcp/tools_feedback.go:12: handleFeedbackConsolidated 54.5% +github.com/thebtf/engram/internal/mcp/tools_feedback.go:36: handleSetSessionOutcome 0.0% +github.com/thebtf/engram/internal/mcp/tools_governance.go:27: governanceTools 100.0% +github.com/thebtf/engram/internal/mcp/tools_governance.go:98: handleListSnapshots 10.7% +github.com/thebtf/engram/internal/mcp/tools_governance.go:167: handleRollbackSnapshot 13.0% +github.com/thebtf/engram/internal/mcp/tools_governance.go:215: handlePinSnapshot 16.7% +github.com/thebtf/engram/internal/mcp/tools_governance.go:258: handleRedactionRulesStatus 76.9% +github.com/thebtf/engram/internal/mcp/tools_governance.go:284: resolveGovernanceActor 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:64: handleGraph 12.5% +github.com/thebtf/engram/internal/mcp/tools_graph.go:100: graphAddEdge 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:216: mcpGraphEndpointExists 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:243: mcpGraphEdgeAlreadyExists 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:276: graphAddNode 85.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:317: graphRemoveEdge 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:332: graphGetEdges 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:397: filterEdgesByNodeType 80.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:457: graphTraverse 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:480: graphFindPath 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:502: graphSynonyms 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:23: graphCreateEdgeWithGuards 80.0% +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:80: graphEndpointExistsWithGuards 71.4% +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:114: graphDuplicateEdgeExists 57.9% +github.com/thebtf/engram/internal/mcp/tools_ingest.go:25: handleIngest 0.0% +github.com/thebtf/engram/internal/mcp/tools_ingest.go:43: ingestDocument 0.0% +github.com/thebtf/engram/internal/mcp/tools_instincts.go:20: handleImportInstincts 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:19: issuesToolSchema 100.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:109: validateIssueActionParams 60.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:143: handleIssues 41.2% +github.com/thebtf/engram/internal/mcp/tools_issues.go:189: resolveSourceProject 77.8% +github.com/thebtf/engram/internal/mcp/tools_issues.go:205: handleIssueCreate 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:250: handleIssueList 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:311: handleIssueGet 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:344: handleIssueUpdate 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:382: handleIssueComment 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:408: handleIssueReopen 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:425: handleIssueClose 90.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:22: handleLifecycle 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:48: lifecycleInfo 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:87: lifecyclePromote 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:118: lifecycleDemote 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:149: lifecycleSetConfidence 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:172: lifecycleSetDefeasibility 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:191: lifecycleSleepStatus 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:197: lifecycleDecayPreview 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:233: marshalJSON 75.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:35: vnextFEnabled 100.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:42: isValidPrivacyScope 100.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:54: derivePrivacyScopeFromLegacy 75.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:82: deriveLegacyScopeFromPrivacy 50.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:93: applyPrincipalMemoryMetadata 95.7% +github.com/thebtf/engram/internal/mcp/tools_memory.go:135: addPrincipalMemoryFields 100.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:161: newScopedWriteLintMemoryStore 66.7% +github.com/thebtf/engram/internal/mcp/tools_memory.go:172: writeLintVisibilityCaller 100.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:186: writeLintVisibilityOptions 100.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:192: scopedWriteLintMemoryStore 83.3% +github.com/thebtf/engram/internal/mcp/tools_memory.go:202: filterVisibleWriteGateCandidates 100.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:214: domainManageAllowed 100.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:218: List 28.6% +github.com/thebtf/engram/internal/mcp/tools_memory.go:272: writeLintVisibilityFetchLimit 75.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:286: Get 83.3% +github.com/thebtf/engram/internal/mcp/tools_memory.go:297: Create 100.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:301: Update 100.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:305: MarkSuperseded 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:319: effectiveMemoryEditor 40.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:329: isValidStoreObservationType 66.7% +github.com/thebtf/engram/internal/mcp/tools_memory.go:354: handleStoreMemory 56.4% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1111: handleEditMemory 81.1% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1218: computeTTLDays 35.3% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1258: truncateTitle 100.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1270: keepRecallMemory 100.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1280: keepRecallMemoryFilters 40.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1342: handleRecallMemory 69.3% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1690: staleAdvisory 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1700: marshalWithStaleAdvisory 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1727: Rank 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1751: handleRecallMemoryHybrid 26.6% +github.com/thebtf/engram/internal/mcp/tools_memory.go:2252: handleRateMemory 53.3% +github.com/thebtf/engram/internal/mcp/tools_memory.go:2281: handleSuppressMemory 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:17: SetDomainRegistryService 100.0% +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:21: checkDomainWriteMCP 90.0% +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:43: addDomainWriteDecisionFields 100.0% +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:51: marshalStoreMemoryAugmented 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:26: newMemoryStoreSignificanceUpdater 66.7% +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:33: s6OutcomeEnabledFromEnv 100.0% +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:37: effectiveMemorySignificanceUpdater 80.0% +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:47: currentMemorySignificanceUpdater 100.0% +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:58: rateMemorySignificanceTool 100.0% +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:74: handleRateMemorySignificance 82.4% +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:109: RateMemorySignificance 61.5% +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:18: s2MetaMemoryEnabled 100.0% +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:22: knowAboutTool 100.0% +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:39: handleKnowAbout 82.4% +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:104: parseKnowAboutLimit 75.0% +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:118: summarizeMetaIndexTags 95.2% +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:153: summarizeMetaIndexDateRange 100.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:23: SetPrincipalMemoryQueryService 100.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:27: principalMemoryQueryTool 100.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:52: handleQueryPrincipalMemory 73.2% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:134: principalMemoryQueryCaller 88.9% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:149: parsePrincipalMemoryQueryLimit 100.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:160: principalMemoryQueryText 100.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:167: parsePrincipalMemoryQueryVisibility 60.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:179: parsePrincipalMemoryQueryOffset 33.3% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:190: parsePrincipalMemoryQueryInt 23.1% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:215: parsePrincipalMemoryQueryBool 66.7% +github.com/thebtf/engram/internal/mcp/tools_recall.go:28: handleRecall 24.3% +github.com/thebtf/engram/internal/mcp/tools_recall.go:125: parseRecallIncludedPrincipals 88.9% +github.com/thebtf/engram/internal/mcp/tools_recall.go:165: appendRecallIncludedPrincipalMemories 80.0% +github.com/thebtf/engram/internal/mcp/tools_recall.go:223: recallIncludeTargetMatchesCaller 100.0% +github.com/thebtf/engram/internal/mcp/tools_recall.go:231: recallPrincipalQueryItemToMemory 100.0% +github.com/thebtf/engram/internal/mcp/tools_recall.go:247: handleRecallSearch 64.4% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:20: currentReviewLoopCandidateLister 80.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:30: reviewLoopCandidateTools 100.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:65: reviewLoopReadSchema 100.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:78: reviewPacketIDSchema 100.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:91: handleReviewMetricsRead 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:110: handleReviewQueueRead 80.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:140: handleReviewPacketDetail 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:151: handleReviewPacketPreviewAction 30.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:167: handleReviewPacketApplyAction 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:189: parseReviewLoopReadArgs 73.3% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:212: reviewLoopMCPPacketTypeSupported 100.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:217: reviewLoopActionFromArgs 75.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:225: reviewLoopReasonFromArgs 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:233: loadReviewPacketCandidate 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:256: applyReviewPacketPreserve 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:278: applyReviewPacketSuppress 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:296: reviewLoopMemoryFromCandidate 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:320: filterRiskyMCPReviewCandidates 100.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:330: marshalReviewLoop 75.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:17: ruleGovernanceReadTools 100.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:126: handleRuleGovernanceHealth 85.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:176: handleRuleGovernanceQueue 81.8% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:233: handleRuleGovernanceSnapshots 76.5% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:278: handleRuleGovernanceUsefulness 73.1% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:338: handleRuleGovernanceTransition 76.5% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:373: handleRuleGovernancePinSnapshot 72.2% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:406: handleRuleGovernanceRollback 70.6% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:483: requireRuleGovernanceReadAccess 83.3% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:495: requireRuleGovernanceProjectOrAdmin 100.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:505: ruleGovernanceCallerIsAdmin 100.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:510: requireRuleGovernanceAdminAccess 100.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:518: redactRuleGovernanceEvidenceHandles 90.9% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:535: redactRuleGovernanceEvidenceHandle 90.9% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:553: ruleGovernanceEvidenceHandleHasSensitiveText 100.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:559: isCanonicalRuleGovernanceEvidenceHandle 75.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:580: isSafeRuleGovernanceEvidenceID 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:594: parseRuleGovernanceTransitionRequest 100.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:604: parseRuleGovernanceSince 58.3% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:623: boundedRuleGovernanceLimit 66.7% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:634: formatRuleGovernanceTime 100.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:641: formatRuleGovernanceTimePtr 50.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:649: stringRuleCandidateStatusCounts 75.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:657: stringRuleVersionStateCounts 75.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:665: stringRuleArbiterRunStatusCounts 75.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:673: stringRuleInjectionEventTypeCounts 75.0% +github.com/thebtf/engram/internal/mcp/tools_rules.go:17: handleStoreRule 56.6% +github.com/thebtf/engram/internal/mcp/tools_rules.go:133: handleListRules 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:22: handleSettingsConsolidated 75.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:51: SetSettingsStore 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:57: settingsStore 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:67: isSecretSettingKey 100.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:74: requireAdmin 100.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:85: handleSetSetting 28.6% +github.com/thebtf/engram/internal/mcp/tools_settings.go:145: handleGetSetting 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:181: handleListSettings 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:216: handleDeleteSetting 15.4% +github.com/thebtf/engram/internal/mcp/tools_state.go:35: resumeScopesFromFields 100.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:52: stateTool 100.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:82: setStateTool 100.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:142: handleGetState 75.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:219: handleSetState 77.8% +github.com/thebtf/engram/internal/mcp/tools_state.go:274: decodeSessionStateForWrite 80.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:292: validateSessionStateBudget 83.3% +github.com/thebtf/engram/internal/mcp/tools_state.go:303: validateNativeResumePacket 89.7% +github.com/thebtf/engram/internal/mcp/tools_state.go:349: decodeProjectStateForWrite 75.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:364: requireStateObject 63.6% +github.com/thebtf/engram/internal/mcp/tools_state.go:383: requireNestedObject 83.3% +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:10: handleStoreConsolidated 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:21: SetTemporalTruthProvider 100.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:25: temporalTruthEnabledFromEnv 100.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:30: temporalTruthTool 100.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:39: temporalTruthRefreshTool 100.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:48: temporalTruthRefreshSchema 100.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:58: temporalTruthSchema 100.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:72: currentTemporalTruthProvider 100.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:82: handleTemporalTruth 84.6% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:102: handleTemporalTruthRefresh 84.6% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:122: parseTemporalTruthArgs 87.5% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:151: parseTemporalTruthRefreshProject 85.7% +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:10: handleVaultConsolidated 0.0% +total: (statements) 46.2% diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/summary.json b/.agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/summary.json new file mode 100644 index 00000000..a4fedd7a --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/full-internal-mcp/summary.json @@ -0,0 +1,67 @@ +{ + "schema_version": 1, + "gate": "release-gates-foundation", + "run_id": "full-internal-mcp", + "started_at": "2026-07-11T01:02:00.3724722+00:00", + "finished_at": "2026-07-11T01:02:19.8606503+00:00", + "duration_seconds": 19.488, + "verdict": "FAIL", + "counts": { + "requested_repeats": 1, + "completed_repeats": 1, + "passed_repeats": 0, + "failed_repeats": 1, + "child_commands": 16, + "nonzero_child_commands": 2 + }, + "packages": [ + "./internal/mcp" + ], + "run_pattern": null, + "coverage_policy": "Targeted", + "connection_budget": 20, + "race": false, + "database_dsn": "REDACTED_DATABASE_DSN", + "environment": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\full-internal-mcp\\environment.json", + "commands": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\full-internal-mcp\\commands.json", + "repeats": [ + { + "repeat": 1, + "verdict": "FAIL", + "database": "engram_prc_rg_test_88e43617e8051e79_r1", + "schema": "public", + "database_schema_identity": "engram_prc_rg_test_88e43617e8051e79_r1.public", + "database_dsn": "REDACTED_DATABASE_DSN", + "database_create_confirmed": true, + "sequential_execution": { + "package_parallelism": 1, + "test_parallelism": 1 + }, + "race": false, + "connection_budget": 20, + "server_sessions_before": 6, + "server_sessions_after": 6, + "sessions_before": 0, + "sessions_after": 0, + "go_test_exit": 1, + "json_parser_exit": 1, + "coverage_policy": "Targeted", + "coverage_exit": 0, + "cleanup_exit": 0, + "cleanup_status": "PASS", + "required_session_start_execution": { + "schema_version": 1, + "verdict": "NOT_APPLICABLE", + "reason": "only an unfiltered canonical ./... run requires the 12-test session-start execution proof" + }, + "cleanup_summary": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\full-internal-mcp\\repeat-01\\cleanup\\cleanup.json", + "errors": [ + "go test failed with exit 1", + "go test JSON assertion failed with exit 1" + ], + "artifact_directory": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\full-internal-mcp\\repeat-01" + } + ], + "errors": [], + "artifact_directory": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\full-internal-mcp" +} diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/gitleaks-exact-maker.json b/.agent/reviews/t007-r1-fresh-checker/evidence/gitleaks-exact-maker.json new file mode 100644 index 00000000..fe51488c --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/gitleaks-exact-maker.json @@ -0,0 +1 @@ +[] diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/commands.json b/.agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/commands.json new file mode 100644 index 00000000..29d1f1a2 --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/commands.json @@ -0,0 +1,444 @@ +[ + { + "name": "go-version", + "executable": "C:\\Program Files\\Go\\bin\\go.exe", + "arguments": [ + "version" + ], + "environment_keys": [], + "command": "C:\\Program Files\\Go\\bin\\go.exe version", + "started_at": "2026-07-11T01:00:09.7388263+00:00", + "finished_at": "2026-07-11T01:00:09.9584149+00:00", + "duration_seconds": 0.22, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\parent-ambient-true-false-green\\go-version.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\parent-ambient-true-false-green\\go-version.stderr.log" + }, + { + "name": "postgres-container-identity", + "executable": "docker", + "arguments": [ + "inspect", + "--format", + "{{.Name}}|{{.Config.Image}}|{{.Image}}|{{.State.Running}}", + "engram-prc-postgres" + ], + "environment_keys": [], + "command": "docker inspect --format {{.Name}}|{{.Config.Image}}|{{.Image}}|{{.State.Running}} engram-prc-postgres", + "started_at": "2026-07-11T01:00:10.0120727+00:00", + "finished_at": "2026-07-11T01:00:10.2993661+00:00", + "duration_seconds": 0.287, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\parent-ambient-true-false-green\\postgres-container-identity.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\parent-ambient-true-false-green\\postgres-container-identity.stderr.log" + }, + { + "name": "postgres-server-identity", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT json_build_object('server_version', current_setting('server_version'), 'server_version_num', current_setting('server_version_num'), 'version', version(), 'max_connections', current_setting('max_connections'), 'superuser_reserved_connections', current_setting('superuser_reserved_connections'), 'reserved_connections', COALESCE(NULLIF(current_setting('reserved_connections', true), ''), '0'), 'current_connections', (SELECT count(*)::text FROM pg_stat_activity), 'database', current_database(), 'schema', current_schema(), 'user', current_user)::text;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT json_build_object('server_version', current_setting('server_version'), 'server_version_num', current_setting('server_version_num'), 'version', version(), 'max_connections', current_setting('max_connections'), 'superuser_reserved_connections', current_setting('superuser_reserved_connections'), 'reserved_connections', COALESCE(NULLIF(current_setting('reserved_connections', true), ''), '0'), 'current_connections', (SELECT count(*)::text FROM pg_stat_activity), 'database', current_database(), 'schema', current_schema(), 'user', current_user)::text;", + "started_at": "2026-07-11T01:00:10.3119509+00:00", + "finished_at": "2026-07-11T01:00:10.6885875+00:00", + "duration_seconds": 0.377, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\parent-ambient-true-false-green\\postgres-server-identity.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\parent-ambient-true-false-green\\postgres-server-identity.stderr.log" + }, + { + "name": "repeat-1-create-database", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "CREATE DATABASE \"engram_prc_rg_test_ec4161b3fdcd0ac8_r1\" OWNER \"engram\";" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c CREATE DATABASE \"engram_prc_rg_test_ec4161b3fdcd0ac8_r1\" OWNER \"engram\";", + "started_at": "2026-07-11T01:00:10.7217561+00:00", + "finished_at": "2026-07-11T01:00:11.1807265+00:00", + "duration_seconds": 0.459, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\parent-ambient-true-false-green\\repeat-01\\create-database.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\parent-ambient-true-false-green\\repeat-01\\create-database.stderr.log" + }, + { + "name": "repeat-1-create-pgvector", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "engram_prc_rg_test_ec4161b3fdcd0ac8_r1", + "-At", + "-F", + "|", + "-c", + "CREATE EXTENSION IF NOT EXISTS vector WITH SCHEMA public;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d engram_prc_rg_test_ec4161b3fdcd0ac8_r1 -At -F | -c CREATE EXTENSION IF NOT EXISTS vector WITH SCHEMA public;", + "started_at": "2026-07-11T01:00:11.1844545+00:00", + "finished_at": "2026-07-11T01:00:11.6548496+00:00", + "duration_seconds": 0.47, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\parent-ambient-true-false-green\\repeat-01\\create-pgvector.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\parent-ambient-true-false-green\\repeat-01\\create-pgvector.stderr.log" + }, + { + "name": "repeat-1-database-identity", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "engram_prc_rg_test_ec4161b3fdcd0ac8_r1", + "-At", + "-F", + "|", + "-c", + "SELECT json_build_object('database', current_database(), 'schema', current_schema(), 'server_version', current_setting('server_version'), 'user', current_user)::text;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d engram_prc_rg_test_ec4161b3fdcd0ac8_r1 -At -F | -c SELECT json_build_object('database', current_database(), 'schema', current_schema(), 'server_version', current_setting('server_version'), 'user', current_user)::text;", + "started_at": "2026-07-11T01:00:11.6572469+00:00", + "finished_at": "2026-07-11T01:00:12.0231590+00:00", + "duration_seconds": 0.366, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\parent-ambient-true-false-green\\repeat-01\\database-identity.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\parent-ambient-true-false-green\\repeat-01\\database-identity.stderr.log" + }, + { + "name": "repeat-1-pg-stat-before", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT COALESCE(json_agg(row_to_json(s)), '[]'::json)::text FROM (SELECT pid, usename, datname, state, backend_type, application_name, client_addr::text AS client_addr, wait_event_type, wait_event, query_start FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_ec4161b3fdcd0ac8_r1' ORDER BY pid) AS s;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT COALESCE(json_agg(row_to_json(s)), '[]'::json)::text FROM (SELECT pid, usename, datname, state, backend_type, application_name, client_addr::text AS client_addr, wait_event_type, wait_event, query_start FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_ec4161b3fdcd0ac8_r1' ORDER BY pid) AS s;", + "started_at": "2026-07-11T01:00:12.0278791+00:00", + "finished_at": "2026-07-11T01:00:12.3822206+00:00", + "duration_seconds": 0.354, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\parent-ambient-true-false-green\\repeat-01\\pg-stat-activity-before.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\parent-ambient-true-false-green\\repeat-01\\pg-stat-activity-before.stderr.log" + }, + { + "name": "repeat-1-server-connection-count-before", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT count(*) FROM pg_stat_activity;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT count(*) FROM pg_stat_activity;", + "started_at": "2026-07-11T01:00:12.3843466+00:00", + "finished_at": "2026-07-11T01:00:12.7293765+00:00", + "duration_seconds": 0.345, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\parent-ambient-true-false-green\\repeat-01\\server-connection-count-before.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\parent-ambient-true-false-green\\repeat-01\\server-connection-count-before.stderr.log" + }, + { + "name": "repeat-1-connection-count-before", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT count(*) FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_ec4161b3fdcd0ac8_r1';" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT count(*) FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_ec4161b3fdcd0ac8_r1';", + "started_at": "2026-07-11T01:00:12.7408620+00:00", + "finished_at": "2026-07-11T01:00:13.1287332+00:00", + "duration_seconds": 0.388, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\parent-ambient-true-false-green\\repeat-01\\connection-count-before.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\parent-ambient-true-false-green\\repeat-01\\connection-count-before.stderr.log" + }, + { + "name": "repeat-1-go-test", + "executable": "C:\\Program Files\\Go\\bin\\go.exe", + "arguments": [ + "test", + "-json", + "-p", + "1", + "-parallel", + "1", + "-count=1", + "-timeout", + "30m", + "-covermode=atomic", + "-coverprofile=D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\parent-ambient-true-false-green\\repeat-01\\coverage.out", + "-run", + "^TestEC_F1_TagDerivedBackfill_T007$", + "./internal/mcp" + ], + "environment_keys": [ + "DATABASE_DSN", + "DATABASE_MAX_CONNS", + "ENGRAM_RELEASE_GATE_REPEAT", + "ENGRAM_RELEASE_GATE_RUN_ID", + "ENGRAM_TEST_DSN", + "TEST_DATABASE_DSN" + ], + "command": "C:\\Program Files\\Go\\bin\\go.exe test -json -p 1 -parallel 1 -count=1 -timeout 30m -covermode=atomic -coverprofile=D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\parent-ambient-true-false-green\\repeat-01\\coverage.out -run ^TestEC_F1_TagDerivedBackfill_T007$ ./internal/mcp", + "started_at": "2026-07-11T01:00:13.1355977+00:00", + "finished_at": "2026-07-11T01:00:19.5831222+00:00", + "duration_seconds": 6.448, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\parent-ambient-true-false-green\\repeat-01\\go-test.stdout.jsonl", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\parent-ambient-true-false-green\\repeat-01\\go-test.stderr.log" + }, + { + "name": "repeat-1-assert-go-test-json", + "executable": "C:\\Program Files\\PowerShell\\7\\pwsh.exe", + "arguments": [ + "-NoProfile", + "-File", + "D:\\Dev\\engram\\.w\\t007-r1-parent-red\\scripts\\production-gates\\assert-go-test-json.ps1", + "-InputPath", + "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\parent-ambient-true-false-green\\repeat-01\\go-test.stdout.jsonl", + "-SummaryPath", + "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\parent-ambient-true-false-green\\repeat-01\\go-test-summary.json", + "-FailOnUnexpectedSkip" + ], + "environment_keys": [], + "command": "C:\\Program Files\\PowerShell\\7\\pwsh.exe -NoProfile -File D:\\Dev\\engram\\.w\\t007-r1-parent-red\\scripts\\production-gates\\assert-go-test-json.ps1 -InputPath D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\parent-ambient-true-false-green\\repeat-01\\go-test.stdout.jsonl -SummaryPath D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\parent-ambient-true-false-green\\repeat-01\\go-test-summary.json -FailOnUnexpectedSkip", + "started_at": "2026-07-11T01:00:19.5886411+00:00", + "finished_at": "2026-07-11T01:00:20.2850110+00:00", + "duration_seconds": 0.696, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\parent-ambient-true-false-green\\repeat-01\\assert-go-test-json.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\parent-ambient-true-false-green\\repeat-01\\assert-go-test-json.stderr.log" + }, + { + "name": "repeat-1-targeted-coverage-report", + "executable": "C:\\Program Files\\Go\\bin\\go.exe", + "arguments": [ + "tool", + "cover", + "-func=D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\parent-ambient-true-false-green\\repeat-01\\coverage.out" + ], + "environment_keys": [], + "command": "C:\\Program Files\\Go\\bin\\go.exe tool cover -func=D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\parent-ambient-true-false-green\\repeat-01\\coverage.out", + "started_at": "2026-07-11T01:00:20.2900430+00:00", + "finished_at": "2026-07-11T01:00:20.7376633+00:00", + "duration_seconds": 0.448, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\parent-ambient-true-false-green\\repeat-01\\targeted-coverage.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\parent-ambient-true-false-green\\repeat-01\\targeted-coverage.stderr.log" + }, + { + "name": "repeat-1-pg-stat-after", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT COALESCE(json_agg(row_to_json(s)), '[]'::json)::text FROM (SELECT pid, usename, datname, state, backend_type, application_name, client_addr::text AS client_addr, wait_event_type, wait_event, query_start FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_ec4161b3fdcd0ac8_r1' ORDER BY pid) AS s;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT COALESCE(json_agg(row_to_json(s)), '[]'::json)::text FROM (SELECT pid, usename, datname, state, backend_type, application_name, client_addr::text AS client_addr, wait_event_type, wait_event, query_start FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_ec4161b3fdcd0ac8_r1' ORDER BY pid) AS s;", + "started_at": "2026-07-11T01:00:20.7386500+00:00", + "finished_at": "2026-07-11T01:00:21.0866923+00:00", + "duration_seconds": 0.348, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\parent-ambient-true-false-green\\repeat-01\\pg-stat-activity-after.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\parent-ambient-true-false-green\\repeat-01\\pg-stat-activity-after.stderr.log" + }, + { + "name": "repeat-1-server-connection-count-after", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT count(*) FROM pg_stat_activity;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT count(*) FROM pg_stat_activity;", + "started_at": "2026-07-11T01:00:21.0890834+00:00", + "finished_at": "2026-07-11T01:00:21.4249780+00:00", + "duration_seconds": 0.336, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\parent-ambient-true-false-green\\repeat-01\\server-connection-count-after.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\parent-ambient-true-false-green\\repeat-01\\server-connection-count-after.stderr.log" + }, + { + "name": "repeat-1-connection-count-after", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT count(*) FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_ec4161b3fdcd0ac8_r1';" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT count(*) FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_ec4161b3fdcd0ac8_r1';", + "started_at": "2026-07-11T01:00:21.4272271+00:00", + "finished_at": "2026-07-11T01:00:21.7619927+00:00", + "duration_seconds": 0.335, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\parent-ambient-true-false-green\\repeat-01\\connection-count-after.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\parent-ambient-true-false-green\\repeat-01\\connection-count-after.stderr.log" + }, + { + "name": "repeat-1-cleanup", + "executable": "C:\\Program Files\\PowerShell\\7\\pwsh.exe", + "arguments": [ + "-NoProfile", + "-File", + "D:\\Dev\\engram\\.w\\t007-r1-parent-red\\scripts\\production-gates\\cleanup-db-sessions.ps1", + "-DatabaseName", + "engram_prc_rg_test_ec4161b3fdcd0ac8_r1", + "-SchemaName", + "public", + "-ArtifactRoot", + "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\parent-ambient-true-false-green\\repeat-01", + "-RunId", + "parent-ambient-true-false-green-repeat-1", + "-PostgresContainer", + "engram-prc-postgres" + ], + "environment_keys": [ + "ENGRAM_TEST_ADMIN_DSN" + ], + "command": "C:\\Program Files\\PowerShell\\7\\pwsh.exe -NoProfile -File D:\\Dev\\engram\\.w\\t007-r1-parent-red\\scripts\\production-gates\\cleanup-db-sessions.ps1 -DatabaseName engram_prc_rg_test_ec4161b3fdcd0ac8_r1 -SchemaName public -ArtifactRoot D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\parent-ambient-true-false-green\\repeat-01 -RunId parent-ambient-true-false-green-repeat-1 -PostgresContainer engram-prc-postgres", + "started_at": "2026-07-11T01:00:21.7651524+00:00", + "finished_at": "2026-07-11T01:00:24.6849474+00:00", + "duration_seconds": 2.92, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\parent-ambient-true-false-green\\repeat-01\\cleanup-process.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\parent-ambient-true-false-green\\repeat-01\\cleanup-process.stderr.log" + } +] diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/environment.json b/.agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/environment.json new file mode 100644 index 00000000..021a82c9 --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/environment.json @@ -0,0 +1,52 @@ +{ + "schema_version": 1, + "run_id": "parent-ambient-true-false-green", + "timestamp": "2026-07-11T01:00:09.7195099+00:00", + "go_version": "go version go1.25.11 windows/amd64", + "postgres": { + "declared_image": "pgvector/pgvector:pg17", + "container": { + "name": "/engram-prc-postgres", + "configured_image": "pgvector/pgvector:pg17", + "image_id": "sha256:feb68f4f15446397d8cac7f4fe48fe4586de83160d1fc48b46283312d1a33966", + "running": true + }, + "server": { + "server_version": "17.10 (Debian 17.10-1.pgdg12+1)", + "server_version_num": "170010", + "version": "PostgreSQL 17.10 (Debian 17.10-1.pgdg12+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 12.2.0-14+deb12u1) 12.2.0, 64-bit", + "max_connections": "100", + "superuser_reserved_connections": "3", + "reserved_connections": "0", + "current_connections": "6", + "database": "postgres", + "schema": "public", + "user": "engram" + }, + "admin_dsn": "postgresql://engram:REDACTED@127.0.0.1:55432/postgres?sslmode=disable" + }, + "packages": [ + "./internal/mcp" + ], + "run_pattern": "^TestEC_F1_TagDerivedBackfill_T007$", + "repeat": 1, + "fail_on_unexpected_skip": true, + "allowed_skip_identities": [], + "coverage_policy": "Targeted", + "connection_budget": 20, + "race": false, + "require_session_start_execution": false, + "required_session_start_test_count": 12, + "sequential_execution": { + "go_package_parallelism": 1, + "go_test_parallelism": 1, + "database_max_connections": 20 + }, + "govulncheck_policy": { + "authoritative": [ + "source scan with tests", + "unstripped binary scan" + ], + "non_authoritative": "stripped binary scan (module-level fallback when symbols are absent)" + } +} diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/go-version.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/go-version.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/go-version.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/go-version.stdout.log new file mode 100644 index 00000000..a857be3f --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/go-version.stdout.log @@ -0,0 +1 @@ +go version go1.25.11 windows/amd64 diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/postgres-container-identity.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/postgres-container-identity.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/postgres-container-identity.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/postgres-container-identity.stdout.log new file mode 100644 index 00000000..c110d492 --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/postgres-container-identity.stdout.log @@ -0,0 +1 @@ +/engram-prc-postgres|pgvector/pgvector:pg17|sha256:feb68f4f15446397d8cac7f4fe48fe4586de83160d1fc48b46283312d1a33966|true diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/postgres-server-identity.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/postgres-server-identity.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/postgres-server-identity.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/postgres-server-identity.stdout.log new file mode 100644 index 00000000..2e33d56e --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/postgres-server-identity.stdout.log @@ -0,0 +1 @@ +{"server_version" : "17.10 (Debian 17.10-1.pgdg12+1)", "server_version_num" : "170010", "version" : "PostgreSQL 17.10 (Debian 17.10-1.pgdg12+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 12.2.0-14+deb12u1) 12.2.0, 64-bit", "max_connections" : "100", "superuser_reserved_connections" : "3", "reserved_connections" : "0", "current_connections" : "6", "database" : "postgres", "schema" : "public", "user" : "engram"} diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/repeat-01/assert-go-test-json.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/repeat-01/assert-go-test-json.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/repeat-01/assert-go-test-json.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/repeat-01/assert-go-test-json.stdout.log new file mode 100644 index 00000000..4b10fd9f --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/repeat-01/assert-go-test-json.stdout.log @@ -0,0 +1,2 @@ +go test JSON verdict=PASS packages=1 tests=1 passed=1 failed=0 skipped=0 unexpected_skips=0 malformed=0 +summary=D:\Dev\engram\.w\t007-r1-checker\.agent\reviews\t007-r1-fresh-checker\evidence\parent-ambient-true-false-green\repeat-01\go-test-summary.json diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/repeat-01/cleanup-process.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/repeat-01/cleanup-process.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/repeat-01/cleanup-process.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/repeat-01/cleanup-process.stdout.log new file mode 100644 index 00000000..d7c4650d --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/repeat-01/cleanup-process.stdout.log @@ -0,0 +1,2 @@ +cleanup verdict=PASS database=engram_prc_rg_test_ec4161b3fdcd0ac8_r1 schema=public terminated_sessions=0 remaining_database_count=0 +summary=D:\Dev\engram\.w\t007-r1-checker\.agent\reviews\t007-r1-fresh-checker\evidence\parent-ambient-true-false-green\repeat-01\cleanup\cleanup.json diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/repeat-01/cleanup/cleanup.json b/.agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/repeat-01/cleanup/cleanup.json new file mode 100644 index 00000000..e3a60160 --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/repeat-01/cleanup/cleanup.json @@ -0,0 +1,170 @@ +{ + "schema_version": 1, + "run_id": "parent-ambient-true-false-green-repeat-1", + "timestamp": "2026-07-11T01:00:24.5902684+00:00", + "verdict": "PASS", + "database": "engram_prc_rg_test_ec4161b3fdcd0ac8_r1", + "schema": "public", + "database_schema_identity": "engram_prc_rg_test_ec4161b3fdcd0ac8_r1.public", + "admin_dsn": "postgresql://engram:REDACTED@127.0.0.1:55432/postgres?sslmode=disable", + "postgres_container": "engram-prc-postgres", + "cleanup_status": "PASS", + "cleanup_attempted": true, + "database_existed_before": true, + "absence_verified": true, + "terminated_sessions": 0, + "remaining_database_count": 0, + "commands": [ + { + "name": "database-exists-before-cleanup", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT count(*) FROM pg_database WHERE datname = 'engram_prc_rg_test_ec4161b3fdcd0ac8_r1';" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT count(*) FROM pg_database WHERE datname = 'engram_prc_rg_test_ec4161b3fdcd0ac8_r1';", + "started_at": "2026-07-11T01:00:22.4118039+00:00", + "finished_at": "2026-07-11T01:00:22.9160227+00:00", + "duration_seconds": 0.504, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\parent-ambient-true-false-green\\repeat-01\\cleanup\\database-exists-before.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\parent-ambient-true-false-green\\repeat-01\\cleanup\\database-exists-before.stderr.log" + }, + { + "name": "pg-stat-activity-before-cleanup", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT COALESCE(json_agg(row_to_json(s)), '[]'::json)::text FROM (SELECT pid, usename, datname, state, backend_type, application_name, client_addr::text AS client_addr, wait_event_type, wait_event, query_start FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_ec4161b3fdcd0ac8_r1' ORDER BY pid) AS s;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT COALESCE(json_agg(row_to_json(s)), '[]'::json)::text FROM (SELECT pid, usename, datname, state, backend_type, application_name, client_addr::text AS client_addr, wait_event_type, wait_event, query_start FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_ec4161b3fdcd0ac8_r1' ORDER BY pid) AS s;", + "started_at": "2026-07-11T01:00:22.9804104+00:00", + "finished_at": "2026-07-11T01:00:23.3341638+00:00", + "duration_seconds": 0.354, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\parent-ambient-true-false-green\\repeat-01\\cleanup\\pg-stat-activity-before.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\parent-ambient-true-false-green\\repeat-01\\cleanup\\pg-stat-activity-before.stderr.log" + }, + { + "name": "terminate-database-sessions", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT COALESCE(json_agg(row_to_json(s)), '[]'::json)::text FROM (SELECT pid, pg_terminate_backend(pid) AS terminated FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_ec4161b3fdcd0ac8_r1' AND pid <> pg_backend_pid() ORDER BY pid) AS s;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT COALESCE(json_agg(row_to_json(s)), '[]'::json)::text FROM (SELECT pid, pg_terminate_backend(pid) AS terminated FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_ec4161b3fdcd0ac8_r1' AND pid <> pg_backend_pid() ORDER BY pid) AS s;", + "started_at": "2026-07-11T01:00:23.3384100+00:00", + "finished_at": "2026-07-11T01:00:23.6971785+00:00", + "duration_seconds": 0.359, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\parent-ambient-true-false-green\\repeat-01\\cleanup\\terminate-sessions.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\parent-ambient-true-false-green\\repeat-01\\cleanup\\terminate-sessions.stderr.log" + }, + { + "name": "drop-fresh-database", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "DROP DATABASE IF EXISTS \"engram_prc_rg_test_ec4161b3fdcd0ac8_r1\" WITH (FORCE);" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c DROP DATABASE IF EXISTS \"engram_prc_rg_test_ec4161b3fdcd0ac8_r1\" WITH (FORCE);", + "started_at": "2026-07-11T01:00:23.7050832+00:00", + "finished_at": "2026-07-11T01:00:24.1874676+00:00", + "duration_seconds": 0.482, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\parent-ambient-true-false-green\\repeat-01\\cleanup\\drop-database.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\parent-ambient-true-false-green\\repeat-01\\cleanup\\drop-database.stderr.log" + }, + { + "name": "verify-database-absent", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT count(*) FROM pg_database WHERE datname = 'engram_prc_rg_test_ec4161b3fdcd0ac8_r1';" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT count(*) FROM pg_database WHERE datname = 'engram_prc_rg_test_ec4161b3fdcd0ac8_r1';", + "started_at": "2026-07-11T01:00:24.1920343+00:00", + "finished_at": "2026-07-11T01:00:24.5814009+00:00", + "duration_seconds": 0.389, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\parent-ambient-true-false-green\\repeat-01\\cleanup\\verify-database-absent.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\parent-ambient-true-false-green\\repeat-01\\cleanup\\verify-database-absent.stderr.log" + } + ], + "errors": [] +} diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/repeat-01/cleanup/database-exists-before.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/repeat-01/cleanup/database-exists-before.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/repeat-01/cleanup/database-exists-before.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/repeat-01/cleanup/database-exists-before.stdout.log new file mode 100644 index 00000000..d00491fd --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/repeat-01/cleanup/database-exists-before.stdout.log @@ -0,0 +1 @@ +1 diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/repeat-01/cleanup/drop-database.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/repeat-01/cleanup/drop-database.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/repeat-01/cleanup/drop-database.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/repeat-01/cleanup/drop-database.stdout.log new file mode 100644 index 00000000..ca12dce0 --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/repeat-01/cleanup/drop-database.stdout.log @@ -0,0 +1 @@ +DROP DATABASE diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/repeat-01/cleanup/pg-stat-activity-before.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/repeat-01/cleanup/pg-stat-activity-before.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/repeat-01/cleanup/pg-stat-activity-before.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/repeat-01/cleanup/pg-stat-activity-before.stdout.log new file mode 100644 index 00000000..fe51488c --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/repeat-01/cleanup/pg-stat-activity-before.stdout.log @@ -0,0 +1 @@ +[] diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/repeat-01/cleanup/terminate-sessions.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/repeat-01/cleanup/terminate-sessions.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/repeat-01/cleanup/terminate-sessions.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/repeat-01/cleanup/terminate-sessions.stdout.log new file mode 100644 index 00000000..fe51488c --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/repeat-01/cleanup/terminate-sessions.stdout.log @@ -0,0 +1 @@ +[] diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/repeat-01/cleanup/verify-database-absent.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/repeat-01/cleanup/verify-database-absent.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/repeat-01/cleanup/verify-database-absent.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/repeat-01/cleanup/verify-database-absent.stdout.log new file mode 100644 index 00000000..573541ac --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/repeat-01/cleanup/verify-database-absent.stdout.log @@ -0,0 +1 @@ +0 diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/repeat-01/connection-count-after.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/repeat-01/connection-count-after.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/repeat-01/connection-count-after.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/repeat-01/connection-count-after.stdout.log new file mode 100644 index 00000000..573541ac --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/repeat-01/connection-count-after.stdout.log @@ -0,0 +1 @@ +0 diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/repeat-01/connection-count-before.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/repeat-01/connection-count-before.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/repeat-01/connection-count-before.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/repeat-01/connection-count-before.stdout.log new file mode 100644 index 00000000..573541ac --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/repeat-01/connection-count-before.stdout.log @@ -0,0 +1 @@ +0 diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/repeat-01/coverage.out b/.agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/repeat-01/coverage.out new file mode 100644 index 00000000..52335d8a --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/repeat-01/coverage.out @@ -0,0 +1,3472 @@ +mode: atomic +github.com/thebtf/engram/internal/mcp/audit_helpers.go:33.53,34.30 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:34.30,36.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:37.2,37.25 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:37.25,39.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:40.2,40.12 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:44.28,46.2 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:52.83,53.12 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:53.12,54.16 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:54.16,55.32 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:55.32,61.5 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:63.3,65.33 3 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:65.33,71.4 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:77.54,78.14 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:78.14,80.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:81.2,82.16 2 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:82.16,85.3 2 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:86.2,87.13 2 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:92.91,93.23 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:93.23,95.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:96.2,97.15 2 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:97.15,99.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:100.2,105.65 4 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:105.65,113.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:117.95,118.23 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:118.23,120.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:121.2,122.15 2 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:122.15,124.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:125.2,129.65 5 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:129.65,138.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:142.87,143.23 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:143.23,145.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:146.2,147.15 2 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:147.15,149.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:150.2,153.65 4 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:153.65,161.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:166.96,167.23 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:167.23,169.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:170.2,171.15 2 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:171.15,173.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:174.2,177.63 4 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:177.63,185.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:189.97,190.23 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:190.23,192.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:193.2,194.15 2 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:194.15,196.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:197.2,200.68 4 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:200.68,208.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:30.62,31.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:31.20,33.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:34.2,35.49 2 0 +github.com/thebtf/engram/internal/mcp/coerce.go:35.49,37.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:38.2,38.14 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:38.14,40.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:41.2,41.15 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:46.52,47.14 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:47.14,49.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:50.2,50.23 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:51.14,52.11 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:53.19,54.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:55.15,56.45 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:57.12,58.31 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:59.10,60.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:67.43,68.14 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:68.14,70.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:71.2,71.23 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:72.15,73.23 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:74.19,75.38 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:75.38,77.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:78.3,78.40 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:78.40,80.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:81.3,81.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:82.14,83.56 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:83.56,85.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:86.3,86.54 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:86.54,88.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:89.3,89.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:90.10,91.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:97.49,98.14 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:98.14,100.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:101.2,101.23 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:102.15,103.18 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:104.19,105.38 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:105.38,107.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:108.3,108.40 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:108.40,110.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:111.3,111.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:112.14,113.56 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:113.56,115.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:116.3,116.54 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:116.54,118.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:119.3,119.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:120.10,121.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:127.55,128.14 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:128.14,130.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:131.2,131.23 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:132.15,133.11 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:134.19,135.40 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:135.40,137.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:138.3,138.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:139.14,140.54 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:140.54,142.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:143.3,143.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:144.10,145.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:151.46,152.14 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:152.14,154.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:155.2,155.23 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:156.12,157.11 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:158.14,159.54 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:159.54,161.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:162.3,162.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:163.15,164.16 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:165.19,166.40 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:166.40,168.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:169.3,169.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:170.10,171.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:177.40,178.14 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:178.14,180.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:181.2,181.23 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:182.13,184.26 2 0 +github.com/thebtf/engram/internal/mcp/coerce.go:184.26,185.36 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:185.36,187.5 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:189.3,189.16 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:190.16,191.11 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:192.14,193.14 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:193.14,195.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:196.3,196.13 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:197.10,198.13 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:204.38,205.14 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:205.14,207.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:208.2,209.9 2 0 +github.com/thebtf/engram/internal/mcp/coerce.go:209.9,211.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:212.2,213.27 2 0 +github.com/thebtf/engram/internal/mcp/coerce.go:213.27,214.42 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:214.42,216.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:218.2,218.15 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:222.32,223.39 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:223.39,225.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:226.2,226.30 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:226.30,228.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:229.2,229.30 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:229.30,231.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:232.2,232.15 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:236.35,237.28 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:237.28,239.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:240.2,240.28 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:240.28,242.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:243.2,243.15 1 0 +github.com/thebtf/engram/internal/mcp/context.go:17.55,19.2 1 0 +github.com/thebtf/engram/internal/mcp/context.go:22.78,24.2 1 0 +github.com/thebtf/engram/internal/mcp/context.go:29.78,31.2 1 0 +github.com/thebtf/engram/internal/mcp/context.go:35.53,38.2 2 0 +github.com/thebtf/engram/internal/mcp/context.go:41.80,43.2 1 0 +github.com/thebtf/engram/internal/mcp/context.go:48.80,50.2 1 0 +github.com/thebtf/engram/internal/mcp/context.go:54.53,57.2 2 0 +github.com/thebtf/engram/internal/mcp/context.go:61.51,62.43 1 0 +github.com/thebtf/engram/internal/mcp/context.go:62.43,64.3 1 0 +github.com/thebtf/engram/internal/mcp/context.go:65.2,65.16 1 0 +github.com/thebtf/engram/internal/mcp/health.go:22.32,26.2 3 0 +github.com/thebtf/engram/internal/mcp/health.go:29.37,33.2 3 0 +github.com/thebtf/engram/internal/mcp/health.go:36.35,40.2 3 0 +github.com/thebtf/engram/internal/mcp/health.go:42.44,45.25 3 0 +github.com/thebtf/engram/internal/mcp/health.go:45.25,47.50 1 0 +github.com/thebtf/engram/internal/mcp/health.go:47.50,50.4 2 0 +github.com/thebtf/engram/internal/mcp/health.go:55.74,60.16 5 0 +github.com/thebtf/engram/internal/mcp/health.go:60.16,62.3 1 0 +github.com/thebtf/engram/internal/mcp/health.go:63.2,71.4 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:28.42,29.65 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:29.65,32.3 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:33.2,33.40 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:33.40,35.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:36.2,36.14 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:39.120,40.69 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:40.69,42.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:43.2,44.19 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:44.19,46.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:47.2,48.17 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:48.17,50.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:51.2,52.59 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:52.59,54.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:55.2,56.20 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:56.20,58.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:59.2,60.17 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:60.17,62.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:63.2,64.21 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:64.21,66.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:67.2,68.22 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:68.22,70.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:71.2,72.23 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:72.23,74.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:76.2,98.19 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:98.19,100.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:101.2,101.66 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:104.52,106.29 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:106.29,108.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:109.2,110.46 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:113.113,123.27 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:123.27,125.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:126.2,127.16 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:127.16,129.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:130.2,130.25 1 0 +github.com/thebtf/engram/internal/mcp/server.go:127.44,138.2 1 1 +github.com/thebtf/engram/internal/mcp/server.go:141.64,143.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:146.78,148.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:151.53,153.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:156.55,158.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:161.58,163.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:166.62,168.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:171.50,173.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:176.78,178.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:181.74,183.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:186.71,189.2 2 0 +github.com/thebtf/engram/internal/mcp/server.go:191.85,193.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:195.61,197.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:199.49,201.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:204.54,206.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:211.53,213.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:216.53,218.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:222.61,224.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:228.59,230.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:234.51,236.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:240.52,242.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:246.55,248.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:252.82,254.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:260.70,262.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:269.68,271.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:274.87,277.2 2 0 +github.com/thebtf/engram/internal/mcp/server.go:282.60,284.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:290.45,292.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:297.77,299.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:303.37,313.38 3 0 +github.com/thebtf/engram/internal/mcp/server.go:313.38,315.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:316.2,317.9 2 0 +github.com/thebtf/engram/internal/mcp/server.go:317.9,319.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:320.2,321.9 2 0 +github.com/thebtf/engram/internal/mcp/server.go:321.9,323.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:324.2,325.9 2 0 +github.com/thebtf/engram/internal/mcp/server.go:325.9,327.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:328.2,328.14 1 0 +github.com/thebtf/engram/internal/mcp/server.go:332.35,334.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:383.49,387.12 3 0 +github.com/thebtf/engram/internal/mcp/server.go:387.12,388.22 1 0 +github.com/thebtf/engram/internal/mcp/server.go:388.22,389.11 1 0 +github.com/thebtf/engram/internal/mcp/server.go:390.22,392.11 2 0 +github.com/thebtf/engram/internal/mcp/server.go:393.12,393.12 0 0 +github.com/thebtf/engram/internal/mcp/server.go:396.4,397.18 2 0 +github.com/thebtf/engram/internal/mcp/server.go:397.18,398.13 1 0 +github.com/thebtf/engram/internal/mcp/server.go:401.4,402.61 2 0 +github.com/thebtf/engram/internal/mcp/server.go:402.61,404.13 2 0 +github.com/thebtf/engram/internal/mcp/server.go:407.4,407.55 1 0 +github.com/thebtf/engram/internal/mcp/server.go:407.55,409.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:411.3,411.28 1 0 +github.com/thebtf/engram/internal/mcp/server.go:414.2,414.9 1 0 +github.com/thebtf/engram/internal/mcp/server.go:415.20,416.19 1 0 +github.com/thebtf/engram/internal/mcp/server.go:417.25,418.17 1 0 +github.com/thebtf/engram/internal/mcp/server.go:418.17,420.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:421.3,421.13 1 0 +github.com/thebtf/engram/internal/mcp/server.go:427.77,428.19 1 0 +github.com/thebtf/engram/internal/mcp/server.go:428.19,431.3 2 0 +github.com/thebtf/engram/internal/mcp/server.go:433.2,433.20 1 0 +github.com/thebtf/engram/internal/mcp/server.go:434.20,435.33 1 0 +github.com/thebtf/engram/internal/mcp/server.go:436.20,437.32 1 0 +github.com/thebtf/engram/internal/mcp/server.go:438.20,439.37 1 0 +github.com/thebtf/engram/internal/mcp/server.go:443.24,444.93 1 0 +github.com/thebtf/engram/internal/mcp/server.go:445.34,446.101 1 0 +github.com/thebtf/engram/internal/mcp/server.go:447.22,448.91 1 0 +github.com/thebtf/engram/internal/mcp/server.go:449.29,450.120 1 0 +github.com/thebtf/engram/internal/mcp/server.go:451.10,456.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:461.51,462.20 1 0 +github.com/thebtf/engram/internal/mcp/server.go:463.50,464.70 1 0 +github.com/thebtf/engram/internal/mcp/server.go:465.46,466.79 1 0 +github.com/thebtf/engram/internal/mcp/server.go:467.10,468.80 1 0 +github.com/thebtf/engram/internal/mcp/server.go:473.59,485.63 2 0 +github.com/thebtf/engram/internal/mcp/server.go:485.63,487.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:489.2,493.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:496.45,503.33 3 0 +github.com/thebtf/engram/internal/mcp/server.go:503.33,505.57 2 0 +github.com/thebtf/engram/internal/mcp/server.go:505.57,506.76 1 0 +github.com/thebtf/engram/internal/mcp/server.go:506.76,507.13 1 0 +github.com/thebtf/engram/internal/mcp/server.go:509.4,509.18 1 0 +github.com/thebtf/engram/internal/mcp/server.go:509.18,511.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:511.10,513.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:514.4,518.11 5 0 +github.com/thebtf/engram/internal/mcp/server.go:522.2,522.19 1 0 +github.com/thebtf/engram/internal/mcp/server.go:660.29,683.21 2 0 +github.com/thebtf/engram/internal/mcp/server.go:683.21,689.3 5 0 +github.com/thebtf/engram/internal/mcp/server.go:690.2,699.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:712.30,765.49 3 0 +github.com/thebtf/engram/internal/mcp/server.go:765.49,789.3 5 0 +github.com/thebtf/engram/internal/mcp/server.go:790.2,799.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:805.40,936.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:942.58,1048.35 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1048.35,1077.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1080.2,1080.33 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1080.33,1090.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1093.2,1093.26 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1093.26,1123.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1124.2,1124.80 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1124.80,1126.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1127.2,1127.55 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1127.55,1129.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1130.2,1130.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1130.38,1132.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1134.2,1134.25 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1134.25,1136.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1138.2,1138.33 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1138.33,1140.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1141.2,1141.69 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1141.69,1143.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1144.2,1144.75 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1144.75,1146.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1148.2,1148.27 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1148.27,1165.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1168.2,1168.76 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1168.76,1191.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1195.2,1195.48 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1195.48,1197.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1201.2,1201.47 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1201.47,1203.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1205.2,1205.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1205.38,1207.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1212.2,1212.21 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1212.21,1214.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1228.2,1228.51 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1228.51,1230.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1233.2,1233.56 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1233.56,1235.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1238.2,1238.71 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1238.71,1298.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1302.2,1302.104 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1302.104,1321.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1324.2,1324.72 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1324.72,1333.154 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1333.154,1334.26 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1334.26,1336.8 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1337.7,1337.16 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1338.35,1340.26 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1340.26,1342.8 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1343.7,1343.18 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1371.2,1371.26 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1371.26,1390.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1393.2,1393.28 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1393.28,1443.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1446.2,1446.28 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1446.28,1478.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1481.2,1481.37 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1481.37,1561.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1564.2,1568.23 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1568.23,1570.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1572.2,1588.57 3 0 +github.com/thebtf/engram/internal/mcp/server.go:1588.57,1591.29 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1591.29,1593.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1594.3,1594.27 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1594.27,1595.29 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1595.29,1597.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1601.2,1607.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1612.79,1614.60 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1614.60,1620.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1622.2,1623.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1623.16,1631.3 3 0 +github.com/thebtf/engram/internal/mcp/server.go:1633.2,1641.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1644.69,1645.34 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1645.34,1647.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1648.2,1649.22 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1649.22,1651.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1652.2,1652.37 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1656.99,1658.14 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1659.16,1660.35 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1661.15,1662.46 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1663.18,1664.49 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1665.15,1666.46 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1667.18,1668.49 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1669.14,1670.45 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1671.15,1672.34 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1676.2,1676.14 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1677.35,1678.52 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1679.26,1680.37 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1681.20,1682.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1683.20,1684.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1685.16,1686.35 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1687.29,1688.40 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1689.33,1690.50 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1691.25,1692.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1693.23,1694.41 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1696.26,1697.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1698.24,1699.42 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1700.22,1701.40 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1702.25,1703.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1704.27,1705.45 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1706.25,1707.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1709.30,1710.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1711.28,1712.42 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1713.17,1714.40 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1715.20,1716.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1717.20,1718.45 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1719.20,1720.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1722.20,1723.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1724.18,1725.36 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1726.20,1727.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1728.18,1729.36 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1730.21,1731.39 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1732.21,1733.39 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1734.26,1735.44 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1736.25,1737.34 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1738.26,1739.44 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1740.24,1741.42 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1742.26,1743.44 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1744.27,1745.45 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1746.22,1747.40 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1748.19,1749.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1750.15,1751.34 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1752.16,1753.35 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1755.21,1756.44 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1757.19,1758.42 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1759.20,1760.44 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1761.22,1762.45 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1763.22,1764.40 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1765.23,1766.41 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1767.20,1768.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1769.32,1770.49 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1771.19,1772.37 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1773.19,1774.37 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1775.33,1776.50 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1777.35,1778.52 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1779.24,1780.42 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1781.32,1782.49 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1783.28,1784.46 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1785.21,1786.39 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1787.34,1788.51 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1789.25,1790.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1791.29,1792.46 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1793.26,1794.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1795.27,1796.44 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1798.25,1799.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1800.23,1801.41 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1802.27,1803.45 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1804.26,1805.44 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1806.29,1807.47 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1809.29,1810.46 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1811.27,1812.44 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1813.30,1814.47 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1815.38,1816.54 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1817.36,1818.52 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1820.24,1821.42 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1822.27,1823.45 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1824.22,1825.40 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1826.32,1827.49 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1828.32,1829.49 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1830.31,1831.48 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1832.35,1833.52 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1834.36,1835.53 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1836.36,1837.53 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1838.38,1839.54 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1840.34,1841.51 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1843.22,1844.40 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1845.21,1846.39 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1847.24,1848.42 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1850.25,1851.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1852.25,1853.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1859.2,1859.14 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1860.22,1863.131 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1866.51,1867.123 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1868.10,1869.50 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1874.47,1876.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1876.16,1879.3 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1880.2,1880.35 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1884.72,1890.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1896.105,1898.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1898.16,1900.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1902.2,1903.17 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1903.17,1905.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1907.2,1908.17 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1908.17,1910.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1912.2,1918.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1918.16,1920.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1921.2,1921.25 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1927.76,1933.15 3 0 +github.com/thebtf/engram/internal/mcp/server.go:1933.15,1936.17 3 0 +github.com/thebtf/engram/internal/mcp/server.go:1936.17,1938.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1939.3,1939.26 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1943.2,1950.36 3 0 +github.com/thebtf/engram/internal/mcp/server.go:1950.36,1952.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1952.8,1955.29 3 0 +github.com/thebtf/engram/internal/mcp/server.go:1955.29,1958.4 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1959.3,1962.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1966.2,1966.20 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1966.20,1977.20 6 0 +github.com/thebtf/engram/internal/mcp/server.go:1977.20,1979.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1980.3,1980.20 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1980.20,1982.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1985.3,1985.37 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1985.37,1987.30 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1987.30,1988.16 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1988.16,1990.6 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1990.11,1992.6 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1994.4,1995.56 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1995.56,1997.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1998.4,2003.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2008.2,2008.29 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2008.29,2009.63 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2009.63,2011.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2011.9,2013.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2021.2,2021.29 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2021.29,2029.38 3 0 +github.com/thebtf/engram/internal/mcp/server.go:2029.38,2031.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2031.9,2033.31 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2033.31,2035.30 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2035.30,2037.6 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2039.4,2042.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2046.2,2047.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2047.16,2049.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2050.2,2050.25 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2055.57,2056.33 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2056.33,2058.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2059.2,2060.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2060.16,2062.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2063.2,2064.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2064.16,2066.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2067.2,2067.23 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2071.79,2105.15 6 0 +github.com/thebtf/engram/internal/mcp/server.go:2105.15,2107.17 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2107.17,2111.4 3 0 +github.com/thebtf/engram/internal/mcp/server.go:2111.9,2112.17 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2112.17,2114.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2115.4,2117.26 3 0 +github.com/thebtf/engram/internal/mcp/server.go:2117.26,2119.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2119.10,2121.29 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2121.29,2123.6 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2125.4,2129.25 5 0 +github.com/thebtf/engram/internal/mcp/server.go:2130.19,2130.19 0 0 +github.com/thebtf/engram/internal/mcp/server.go:2132.20,2134.106 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2135.12,2137.103 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2140.8,2143.3 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2144.2,2150.49 3 0 +github.com/thebtf/engram/internal/mcp/server.go:2150.49,2152.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2152.8,2154.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2155.2,2168.27 4 0 +github.com/thebtf/engram/internal/mcp/server.go:2168.27,2170.17 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2170.17,2173.4 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2173.9,2175.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2177.2,2182.40 4 0 +github.com/thebtf/engram/internal/mcp/server.go:2182.40,2183.21 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2184.20,2185.20 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2186.19,2187.19 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2191.2,2191.24 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2191.24,2193.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2193.8,2193.30 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2193.30,2195.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2198.2,2198.28 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2198.28,2200.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2203.2,2203.29 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2203.29,2205.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2207.2,2208.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2208.16,2210.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2211.2,2211.28 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2216.103,2218.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2218.16,2220.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2222.2,2223.15 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2223.15,2225.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2227.2,2239.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2239.16,2241.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2242.2,2242.25 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2246.93,2248.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2251.91,2253.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:18.28,29.20 4 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:29.20,33.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:35.2,44.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:68.36,69.49 1 1 +github.com/thebtf/engram/internal/mcp/tools_admin.go:69.49,74.3 4 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:75.2,75.25 1 1 +github.com/thebtf/engram/internal/mcp/tools_admin.go:80.26,82.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:84.89,86.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:86.16,88.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:89.2,90.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:90.18,92.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:94.2,94.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:95.15,96.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:97.26,98.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:99.25,100.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:101.23,105.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:105.22,107.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:108.3,108.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:109.10,110.114 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:120.92,126.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:126.26,128.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:130.2,131.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:131.19,133.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:134.2,135.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:135.19,137.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:138.2,138.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:138.24,140.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:142.2,142.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:142.25,144.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:146.2,147.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:147.16,149.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:151.2,151.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:27.40,30.2 2 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:32.30,46.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:48.99,49.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:49.34,51.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:52.2,52.69 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:52.69,54.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:56.2,57.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:57.16,59.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:60.2,61.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:61.21,63.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:64.2,67.26 3 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:67.26,69.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:70.2,71.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:71.25,73.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:75.2,77.44 3 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:77.44,79.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:80.2,80.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:80.33,82.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:83.2,83.81 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:86.52,87.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:87.16,89.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:90.2,90.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:90.15,92.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:93.2,93.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:96.73,97.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:97.21,99.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:100.2,101.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:101.29,110.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:111.2,111.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:114.34,116.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:31.98,32.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:32.52,34.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:35.2,35.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:35.26,37.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:39.2,40.49 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:40.49,42.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:43.2,43.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:43.21,45.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:46.2,46.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:46.21,48.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:49.2,49.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:49.18,51.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:52.2,52.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:52.18,54.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:56.2,56.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:56.38,58.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:60.2,61.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:61.16,63.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:68.2,70.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:70.26,77.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:79.2,81.36 3 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:81.36,84.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:86.2,89.28 3 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:89.28,90.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:90.39,91.9 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:93.3,97.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:100.2,104.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:107.60,113.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:115.101,116.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:116.38,118.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:120.2,122.21 3 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:122.21,123.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:123.26,125.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:126.3,126.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:126.23,128.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:129.8,130.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:130.26,132.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:133.3,133.68 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:133.68,135.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:137.2,140.20 3 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:141.17,142.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:143.67,143.67 0 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:144.10,145.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:148.2,162.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:162.16,164.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:165.2,165.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:165.19,173.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:174.2,174.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:174.30,176.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:177.2,177.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:177.31,179.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:181.2,182.36 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:182.36,196.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:198.2,199.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:199.19,201.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:202.2,203.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:203.18,205.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:206.2,207.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:207.21,209.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:210.2,211.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:211.25,213.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:214.2,225.21 3 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:225.21,227.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:228.2,228.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:228.25,230.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:231.2,231.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:231.18,233.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:235.2,244.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:244.21,246.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:247.2,247.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:247.25,249.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:250.2,250.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:250.18,252.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:253.2,253.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:253.24,255.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:256.2,256.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:259.50,261.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:261.22,263.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:264.2,264.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:270.90,272.42 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:272.42,276.3 3 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:277.2,281.27 3 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:281.27,282.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:282.45,284.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:286.2,286.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:25.28,88.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:95.95,96.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:96.22,98.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:99.2,100.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:100.32,102.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:104.2,105.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:105.16,107.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:109.2,114.35 3 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:114.35,121.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:123.2,123.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:123.25,125.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:127.2,134.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:134.16,136.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:138.2,146.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:154.94,155.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:155.22,157.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:158.2,159.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:159.32,161.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:163.2,164.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:164.16,166.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:168.2,172.35 3 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:172.35,179.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:181.2,181.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:181.25,183.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:185.2,192.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:192.16,194.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:196.2,203.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:211.97,212.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:212.22,214.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:215.2,216.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:216.32,218.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:220.2,221.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:221.16,223.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:225.2,229.35 3 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:229.35,236.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:238.2,238.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:238.25,240.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:242.2,249.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:249.16,251.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:253.2,260.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:31.80,32.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:32.14,34.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:35.2,48.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:51.136,53.51 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:53.51,55.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:56.2,56.83 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:59.94,60.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:60.21,62.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:63.2,63.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:68.30,162.2 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:165.98,166.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:166.49,168.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:169.2,170.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:170.16,172.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:173.2,174.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:174.19,176.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:177.2,179.17 3 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:179.17,181.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:183.2,184.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:184.16,186.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:188.2,189.31 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:189.31,190.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:190.15,191.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:193.3,193.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:196.2,201.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:201.16,203.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:204.2,204.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:208.96,209.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:209.49,211.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:212.2,213.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:213.16,215.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:216.2,217.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:217.13,219.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:221.2,222.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:222.16,224.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:225.2,225.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:225.22,227.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:229.2,230.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:230.16,232.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:233.2,233.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:239.100,240.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:240.22,242.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:243.2,244.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:244.16,246.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:247.2,248.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:248.13,250.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:255.2,256.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:256.12,263.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:263.30,264.77 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:264.77,269.5 4 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:271.3,272.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:272.21,274.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:275.3,275.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:279.2,279.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:279.29,281.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:284.2,285.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:285.16,287.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:288.2,288.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:288.22,290.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:291.2,291.55 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:291.55,293.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:294.2,294.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:294.74,296.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:297.2,298.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:298.16,300.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:306.2,307.41 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:307.41,309.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:310.2,324.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:324.16,325.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:325.50,327.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:328.3,328.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:330.2,330.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:330.38,332.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:334.2,341.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:341.16,343.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:344.2,344.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:348.99,349.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:349.49,351.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:352.2,353.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:353.16,355.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:356.2,357.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:357.13,359.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:360.2,362.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:362.16,364.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:365.2,365.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:365.22,367.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:368.2,368.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:368.74,370.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:371.2,372.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:372.16,374.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:375.2,375.85 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:375.85,377.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:379.2,380.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:380.16,381.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:381.50,383.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:384.3,384.60 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:386.2,386.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:386.20,388.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:390.2,395.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:395.16,397.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:398.2,398.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:402.102,403.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:403.49,405.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:406.2,407.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:407.16,409.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:410.2,411.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:411.13,413.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:414.2,415.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:415.16,417.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:418.2,418.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:418.22,420.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:421.2,421.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:421.74,423.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:424.2,425.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:425.16,427.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:428.2,428.88 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:428.88,430.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:432.2,433.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:433.16,434.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:434.50,436.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:437.3,437.63 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:439.2,439.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:439.20,441.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:443.2,448.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:448.16,450.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:451.2,451.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:34.30,36.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:42.61,44.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:48.32,75.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:79.32,94.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:100.98,101.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:101.25,103.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:104.2,104.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:104.29,106.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:108.2,113.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:113.17,114.55 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:114.55,116.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:118.2,118.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:118.24,120.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:121.2,121.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:121.23,123.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:124.2,124.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:124.23,126.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:134.2,135.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:135.21,137.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:142.2,147.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:147.16,149.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:154.2,165.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:165.25,175.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:177.2,183.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:183.16,185.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:186.2,186.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:194.98,195.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:195.25,197.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:198.2,198.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:198.29,200.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:202.2,205.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:205.17,207.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:208.2,209.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:209.21,211.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:213.2,214.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:214.16,216.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:217.2,218.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:218.16,220.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:221.2,222.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:222.16,224.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:226.2,231.11 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:231.11,233.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:235.2,236.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:236.16,238.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:239.2,239.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:21.52,22.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:22.24,25.28 3 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:25.28,27.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:29.2,29.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:35.72,37.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:37.15,39.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:41.2,42.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:42.16,44.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:45.2,45.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:49.99,51.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:51.16,53.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:55.2,56.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:56.16,58.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:60.2,72.23 7 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:72.23,74.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:75.2,75.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:75.24,77.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:78.2,78.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:78.24,80.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:81.2,81.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:82.27,82.27 0 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:84.10,85.93 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:87.2,87.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:87.30,89.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:90.2,90.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:90.26,92.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:94.2,95.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:95.16,97.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:99.2,100.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:100.16,102.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:104.2,112.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:112.16,114.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:116.2,123.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:123.16,125.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:126.2,126.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:130.97,132.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:132.16,134.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:136.2,137.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:137.16,139.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:141.2,147.23 4 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:147.23,149.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:150.2,150.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:150.26,152.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:154.2,155.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:155.16,157.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:159.2,160.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:160.16,161.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:161.47,163.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:164.3,164.51 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:167.2,167.97 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:167.97,172.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:174.2,175.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:175.16,177.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:179.2,185.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:185.16,187.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:188.2,188.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:192.99,194.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:194.16,196.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:198.2,199.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:199.16,201.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:203.2,207.26 3 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:207.26,209.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:211.2,212.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:212.16,214.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:216.2,223.26 3 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:223.26,229.28 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:229.28,231.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:232.3,232.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:235.2,236.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:236.16,238.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:239.2,239.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:243.100,245.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:245.16,247.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:249.2,250.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:250.16,252.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:254.2,262.23 5 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:262.23,264.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:265.2,265.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:265.24,267.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:268.2,268.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:269.27,269.27 0 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:271.10,272.93 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:274.2,274.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:274.30,276.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:277.2,277.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:277.26,279.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:281.2,281.71 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:281.71,282.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:282.47,284.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:285.3,285.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:288.2,293.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:293.16,295.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:296.2,296.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:302.92,309.19 5 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:309.19,310.53 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:310.53,313.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:316.2,317.51 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:317.51,318.66 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:318.66,320.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:323.2,331.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:331.16,333.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:334.2,334.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:338.46,342.32 4 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:342.32,343.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:343.20,346.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:348.2,350.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:350.26,352.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:352.27,353.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:353.13,355.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:356.4,356.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:358.3,358.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:360.2,360.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:16.45,18.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:20.35,36.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:38.84,39.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:39.40,41.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:42.2,42.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:42.50,44.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:45.2,45.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:48.101,50.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:50.16,52.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:53.2,54.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:54.16,56.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:57.2,58.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:58.19,60.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:61.2,62.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:62.21,64.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:65.2,66.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:66.16,68.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:69.2,69.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:72.102,74.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:74.16,76.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:77.2,82.8 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:10.100,12.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:12.16,14.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:16.2,17.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:17.18,19.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:21.2,21.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:22.16,23.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:24.14,25.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:26.14,27.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:28.17,29.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:30.17,31.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:32.21,33.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:34.19,35.42 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:36.17,37.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:38.16,39.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:40.16,41.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:42.21,43.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:44.10,45.167 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:15.77,16.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:16.33,18.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:20.2,21.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:21.27,23.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:25.2,26.28 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:26.28,29.17 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:29.17,31.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:34.2,41.32 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:41.32,46.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:46.20,48.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:49.3,49.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:52.2,53.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:53.16,55.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:57.2,57.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:61.97,62.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:62.28,64.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:66.2,67.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:67.16,69.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:71.2,75.29 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:75.29,77.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:79.2,80.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:80.16,82.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:84.2,84.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:84.20,86.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:88.2,97.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:97.25,103.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:103.20,105.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:106.3,106.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:106.19,108.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:109.3,109.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:112.2,113.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:113.16,115.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:117.2,117.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:121.95,122.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:122.28,124.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:126.2,127.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:127.16,129.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:131.2,137.50 4 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:137.50,139.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:141.2,142.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:142.16,144.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:145.2,145.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:145.16,147.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:149.2,149.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:149.21,151.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:153.2,154.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:154.16,156.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:157.2,157.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:157.20,159.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:161.2,161.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:165.98,166.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:166.28,168.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:170.2,171.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:171.16,173.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:175.2,181.50 4 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:181.50,183.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:185.2,185.96 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:185.96,187.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:189.2,189.88 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:197.98,198.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:198.28,200.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:202.2,203.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:203.16,205.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:207.2,217.74 6 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:217.74,219.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:222.2,223.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:223.16,225.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:227.2,229.156 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:235.98,237.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:237.16,239.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:241.2,247.24 4 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:247.24,249.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:252.2,253.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:253.29,255.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:256.2,256.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:15.93,16.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:16.37,18.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:20.2,21.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:21.16,23.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:25.2,32.16 7 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:32.16,34.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:35.2,35.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:35.19,37.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:38.2,38.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:38.19,40.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:42.2,43.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:43.16,45.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:47.2,54.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:54.16,56.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:57.2,57.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:61.91,62.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:62.37,64.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:66.2,67.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:67.16,69.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:71.2,73.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:73.16,75.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:76.2,76.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:76.19,78.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:80.2,81.43 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:81.43,83.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:83.19,85.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:86.3,86.79 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:87.8,89.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:90.2,90.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:90.16,91.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:91.45,93.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:94.3,94.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:97.2,110.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:110.16,112.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:113.2,113.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:117.93,119.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:122.91,123.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:123.37,125.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:127.2,128.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:128.16,130.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:132.2,133.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:133.19,135.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:136.2,141.16 5 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:141.16,143.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:145.2,155.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:155.25,165.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:167.2,168.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:168.16,170.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:171.2,171.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:175.94,176.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:176.37,178.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:180.2,181.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:181.16,183.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:185.2,187.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:187.16,189.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:190.2,190.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:190.19,192.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:193.2,196.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:196.16,198.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:200.2,208.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:208.25,216.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:218.2,225.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:225.16,227.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:228.2,228.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:232.94,233.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:233.37,235.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:237.2,238.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:238.16,240.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:242.2,243.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:243.21,245.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:246.2,248.19 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:248.19,250.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:252.2,253.46 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:253.46,255.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:255.13,257.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:259.2,259.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:259.44,261.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:261.13,263.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:266.2,267.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:267.16,269.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:271.2,278.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:278.16,280.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:281.2,281.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:19.69,21.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:23.38,38.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:40.51,63.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:65.53,80.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:82.46,85.32 3 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:85.32,87.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:88.2,88.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:91.105,93.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:93.16,95.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:96.2,97.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:97.16,99.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:100.2,100.70 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:103.107,105.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:105.16,107.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:108.2,109.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:109.16,111.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:112.2,112.72 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:115.101,117.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:117.16,119.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:120.2,121.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:121.17,123.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:124.2,139.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:142.109,144.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:144.16,146.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:147.2,154.8 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:157.100,159.28 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:159.28,161.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:161.18,163.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:164.3,164.62 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:166.2,167.72 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:167.72,169.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:170.2,170.53 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:170.53,172.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:173.2,174.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:174.26,176.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:177.2,177.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:180.73,182.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:182.16,184.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:185.2,185.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:12.104,14.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:14.16,16.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:18.2,19.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:19.18,21.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:23.2,23.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:24.14,25.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:26.18,27.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:28.17,29.46 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:30.10,31.96 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:36.101,37.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:37.27,39.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:41.2,42.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:42.16,44.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:46.2,47.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:47.21,49.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:50.2,51.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:51.19,53.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:54.2,54.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:55.52,55.52 0 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:56.10,57.101 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:59.2,61.93 2 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:61.93,64.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:66.2,70.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:27.31,94.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:98.97,100.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:100.26,102.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:103.2,103.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:103.28,105.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:107.2,108.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:108.16,110.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:112.2,115.15 4 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:115.15,117.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:118.2,118.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:118.17,120.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:122.2,123.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:123.16,125.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:127.2,140.29 3 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:140.29,151.31 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:151.31,154.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:155.3,155.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:158.2,162.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:167.100,169.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:169.26,171.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:172.2,172.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:172.28,174.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:175.2,175.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:175.26,177.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:179.2,180.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:180.16,182.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:184.2,185.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:185.22,187.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:189.2,190.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:190.20,191.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:191.54,199.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:200.3,200.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:200.61,202.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:203.3,203.58 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:206.2,211.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:215.95,217.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:217.32,219.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:220.2,220.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:220.28,222.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:224.2,225.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:225.16,227.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:229.2,230.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:230.22,232.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:234.2,234.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:234.61,236.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:239.2,239.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:239.25,246.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:248.2,252.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:258.104,260.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:260.26,262.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:267.2,271.20 3 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:271.20,275.3 3 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:275.8,279.3 3 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:280.2,280.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:284.60,285.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:285.30,287.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:288.2,288.42 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:288.42,290.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:291.2,291.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:64.89,65.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:65.25,67.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:69.2,70.49 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:70.49,72.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:74.2,74.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:75.18,76.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:77.21,78.35 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:79.19,80.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:81.18,82.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:83.19,84.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:85.18,86.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:87.18,91.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:91.23,93.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:94.3,94.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:95.10,96.62 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:100.81,103.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:103.19,105.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:106.2,107.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:107.19,109.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:112.2,112.46 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:112.46,114.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:115.2,115.46 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:115.46,117.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:122.2,122.66 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:122.66,124.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:127.2,127.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:127.25,128.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:128.22,130.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:131.8,132.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:132.26,134.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:138.2,138.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:138.25,139.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:139.22,141.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:142.8,143.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:143.26,145.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:148.2,148.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:148.22,150.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:151.2,151.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:151.38,153.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:154.2,154.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:154.19,156.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:159.2,161.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:161.25,164.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:165.2,165.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:165.25,168.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:169.2,171.23 3 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:171.23,174.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:175.2,175.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:175.23,178.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:180.2,193.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:193.16,195.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:198.2,199.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:199.29,201.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:202.2,202.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:202.29,204.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:205.2,213.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:216.121,217.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:217.28,218.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:218.26,220.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:221.3,222.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:222.17,223.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:223.49,225.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:226.4,226.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:228.3,228.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:230.2,230.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:230.26,232.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:233.2,234.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:234.16,235.48 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:235.48,237.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:238.3,238.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:240.2,240.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:243.101,248.36 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:248.36,250.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:250.8,252.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:253.2,253.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:253.16,255.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:256.2,256.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:256.32,257.128 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:257.128,262.72 5 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:262.72,264.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:267.2,267.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:276.81,277.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:277.25,279.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:280.2,280.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:280.22,282.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:283.2,283.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:283.39,285.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:286.2,286.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:286.25,288.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:289.2,289.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:289.21,291.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:292.2,293.14 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:293.14,295.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:296.2,305.16 5 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:305.16,307.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:308.2,314.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:317.84,318.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:318.19,320.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:321.2,323.63 3 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:323.63,325.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:326.2,329.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:332.82,333.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:333.38,335.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:336.2,337.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:338.18,339.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:340.18,341.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:345.2,345.59 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:345.59,347.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:349.2,351.21 3 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:351.21,353.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:353.8,356.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:357.2,357.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:357.16,359.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:366.2,367.41 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:367.41,369.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:371.2,378.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:397.115,398.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:398.15,400.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:403.2,404.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:404.26,405.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:405.28,407.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:408.3,408.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:408.28,410.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:412.2,412.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:412.23,415.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:420.2,426.12 4 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:426.12,427.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:427.27,429.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:429.18,431.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:433.4,433.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:433.33,435.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:440.2,441.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:441.26,442.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:442.28,443.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:443.49,445.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:448.3,448.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:448.28,449.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:449.49,451.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:454.2,454.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:457.82,458.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:458.21,460.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:461.2,462.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:462.16,464.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:465.2,465.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:465.36,467.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:468.2,469.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:469.16,471.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:472.2,477.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:480.82,481.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:481.40,483.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:484.2,485.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:485.19,487.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:488.2,489.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:489.16,491.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:492.2,499.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:502.82,503.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:503.21,505.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:506.2,507.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:507.16,509.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:510.2,514.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:23.179,24.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:24.22,26.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:28.2,32.22 4 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:32.22,34.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:35.2,36.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:36.22,38.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:40.2,41.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:41.26,43.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:44.2,44.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:44.26,46.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:47.2,47.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:47.30,49.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:50.2,50.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:50.30,52.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:54.2,55.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:55.16,57.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:58.2,58.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:58.13,60.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:61.2,62.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:62.16,64.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:65.2,65.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:65.13,67.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:69.2,70.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:70.16,72.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:73.2,73.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:73.15,75.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:77.2,77.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:80.172,81.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:81.28,82.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:82.23,84.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:85.3,85.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:85.18,87.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:88.3,89.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:89.17,90.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:90.49,92.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:93.4,93.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:95.3,95.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:98.2,98.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:98.24,100.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:101.2,101.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:101.19,103.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:104.2,105.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:105.16,106.48 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:106.48,108.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:109.3,109.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:111.2,111.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:114.119,116.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:116.22,118.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:119.2,120.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:120.22,122.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:124.2,126.26 3 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:126.26,127.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:127.36,129.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:130.3,130.105 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:131.8,132.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:132.32,134.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:135.3,135.103 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:137.2,137.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:137.16,139.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:141.2,141.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:141.32,143.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:143.27,145.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:146.3,147.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:147.27,149.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:150.3,150.106 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:150.106,151.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:153.3,153.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:153.27,154.114 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:154.114,155.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:157.9,157.104 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:157.104,158.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:160.3,160.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:160.27,161.114 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:161.114,162.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:164.9,164.104 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:164.104,165.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:167.3,167.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:169.2,169.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:25.90,26.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:26.26,28.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:30.2,31.49 2 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:31.49,33.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:35.2,35.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:36.16,37.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:38.10,39.63 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:43.84,44.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:44.21,46.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:47.2,47.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:47.25,49.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:50.2,50.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:50.21,52.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:53.2,53.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:53.21,55.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:57.2,58.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:59.18,60.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:61.15,62.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:63.24,64.42 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:65.10,66.108 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:69.2,70.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:70.22,72.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:73.2,74.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:74.29,76.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:78.2,78.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:78.14,85.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:87.2,89.37 3 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:89.37,92.21 3 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:92.21,94.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:97.2,100.31 4 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:100.31,102.38 2 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:102.38,104.37 2 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:104.37,106.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:109.3,122.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:122.26,124.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:125.3,125.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:125.19,127.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:131.3,133.39 3 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:133.39,135.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:135.9,137.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:138.3,138.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:138.17,140.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:142.3,142.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:142.34,144.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:145.3,145.11 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:148.2,155.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:20.99,22.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:22.16,24.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:26.2,31.44 3 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:31.44,32.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:32.33,33.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:33.43,38.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:43.2,43.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:43.49,45.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:46.2,46.48 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:46.48,48.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:50.2,52.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:52.27,55.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:55.8,60.24 3 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:60.24,62.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:64.3,64.57 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:64.57,66.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:68.3,68.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:71.2,71.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:71.16,73.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:75.2,76.23 2 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:76.23,78.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:80.2,80.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:19.40,89.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:109.71,111.9 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:111.9,113.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:115.2,116.38 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:116.38,117.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:118.13,119.41 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:119.41,121.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:122.17,123.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:123.43,125.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:126.11,127.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:127.40,129.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:133.2,133.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:133.22,138.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:139.2,139.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:143.90,144.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:144.25,146.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:148.2,149.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:149.16,151.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:153.2,157.61 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:157.61,159.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:161.2,161.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:162.16,163.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:164.14,165.35 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:166.13,167.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:168.16,169.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:170.17,171.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:172.16,173.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:174.15,175.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:176.10,177.120 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:189.85,191.39 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:191.39,192.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:192.44,194.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:196.2,196.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:196.15,198.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:199.2,199.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:199.15,201.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:202.2,202.46 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:205.91,207.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:207.17,209.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:211.2,215.25 5 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:215.25,217.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:218.2,224.25 4 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:224.25,226.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:227.2,227.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:227.25,229.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:231.2,243.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:243.16,245.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:247.2,247.139 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:250.89,252.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:252.19,254.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:255.2,256.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:256.25,258.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:259.2,264.52 5 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:264.52,266.14 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:266.14,268.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:271.2,277.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:277.25,280.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:282.2,283.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:283.16,285.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:287.2,287.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:287.22,288.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:288.20,290.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:291.3,291.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:294.2,297.31 3 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:297.31,300.29 3 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:300.29,302.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:303.3,305.69 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:308.2,308.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:311.88,313.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:313.13,315.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:317.2,318.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:318.16,320.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:322.2,328.22 6 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:328.22,331.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:333.2,333.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:333.23,335.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:335.30,338.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:341.2,341.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:344.91,346.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:346.13,348.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:350.2,353.18 3 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:353.18,354.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:354.27,356.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:357.3,357.73 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:357.73,359.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:362.2,362.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:362.19,370.17 4 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:370.17,372.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:375.2,376.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:376.26,378.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:379.2,379.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:382.92,384.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:384.13,386.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:388.2,389.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:389.16,391.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:393.2,401.16 4 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:401.16,403.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:405.2,405.88 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:408.91,410.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:410.13,412.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:414.2,418.95 4 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:418.95,420.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:422.2,422.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:425.90,427.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:427.13,429.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:431.2,433.167 3 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:433.167,435.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:437.2,437.89 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:437.89,439.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:441.2,441.108 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:22.93,24.49 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:24.49,26.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:28.2,28.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:29.14,30.42 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:31.17,32.59 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:33.16,34.58 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:35.24,36.75 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:37.27,38.71 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:39.22,40.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:41.23,42.63 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:43.10,44.66 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:48.79,49.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:49.13,51.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:52.2,53.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:53.16,55.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:57.2,58.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:58.32,60.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:61.2,84.28 3 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:87.101,88.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:88.13,90.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:91.2,91.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:91.38,93.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:94.2,95.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:95.16,97.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:98.2,98.53 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:98.53,100.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:102.2,104.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:104.17,106.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:107.2,107.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:107.29,109.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:110.2,115.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:118.100,119.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:119.13,121.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:122.2,122.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:122.38,124.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:125.2,126.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:126.16,128.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:129.2,129.53 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:129.53,131.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:133.2,135.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:135.17,137.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:138.2,138.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:138.29,140.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:141.2,146.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:149.123,150.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:150.13,152.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:153.2,153.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:153.18,155.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:156.2,156.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:156.38,158.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:159.2,161.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:161.17,163.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:164.2,169.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:172.113,173.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:173.13,175.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:176.2,176.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:176.50,178.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:179.2,181.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:181.17,183.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:184.2,188.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:191.57,195.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:197.102,198.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:198.13,200.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:201.2,201.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:201.20,203.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:204.2,205.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:205.16,207.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:209.2,210.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:210.32,212.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:214.2,217.56 3 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:217.56,223.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:225.2,230.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:233.41,235.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:235.16,237.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:238.2,238.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:35.27,37.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:42.41,43.11 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:44.48,45.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:46.10,47.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:54.57,55.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:56.17,57.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:58.16,59.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:60.10,61.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:82.58,83.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:84.28,85.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:86.26,87.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:88.10,89.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:93.114,95.68 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:95.68,97.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:99.2,101.42 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:101.42,102.71 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:102.71,105.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:107.2,117.23 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:117.23,119.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:121.2,124.22 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:124.22,125.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:125.31,127.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:128.3,128.35 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:129.8,129.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:129.37,131.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:132.2,132.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:135.74,136.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:136.30,138.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:139.2,139.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:139.34,141.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:142.2,142.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:142.31,144.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:145.2,145.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:145.22,147.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:161.169,162.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:162.17,164.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:165.2,166.51 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:166.51,168.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:169.2,169.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:172.92,174.42 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:174.42,177.63 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:177.63,179.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:179.9,181.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:183.2,183.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:186.65,190.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:192.115,194.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:194.26,196.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:196.8,196.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:196.31,198.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:199.2,199.117 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:202.122,206.31 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:206.31,207.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:207.45,209.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:211.2,211.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:214.72,216.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:218.117,219.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:219.16,221.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:222.2,223.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:223.20,225.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:225.17,227.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:228.3,228.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:228.27,229.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:229.50,231.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:231.30,232.11 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:236.3,236.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:239.2,241.60 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:241.60,243.61 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:243.61,245.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:246.3,246.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:246.24,247.9 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:249.3,250.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:250.17,252.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:253.3,253.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:253.22,254.9 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:256.3,256.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:256.29,257.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:257.50,259.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:259.30,260.11 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:264.3,265.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:265.32,266.9 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:269.2,269.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:272.51,273.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:273.16,275.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:276.2,277.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:277.18,279.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:280.2,280.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:280.19,282.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:283.2,283.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:286.97,288.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:288.30,290.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:291.2,291.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:291.49,293.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:294.2,294.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:297.108,299.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:301.108,303.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:305.102,307.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:319.55,320.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:320.31,322.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:323.2,323.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:323.26,325.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:326.2,326.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:329.71,330.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:343.26,344.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:345.10,346.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:354.95,362.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:362.16,364.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:366.2,397.39 14 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:397.39,399.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:399.27,401.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:402.8,404.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:405.2,407.46 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:407.46,410.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:411.2,411.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:411.44,413.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:413.12,415.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:417.2,417.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:417.26,419.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:420.2,420.84 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:420.84,422.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:427.2,427.65 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:427.65,429.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:431.2,433.20 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:433.20,435.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:436.2,437.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:437.20,439.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:440.2,440.56 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:440.56,442.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:443.2,443.56 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:443.56,448.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:450.2,450.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:450.45,453.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:459.2,459.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:459.31,461.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:461.22,462.62 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:462.62,465.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:466.4,466.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:468.3,468.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:471.2,472.115 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:472.115,474.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:491.2,491.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:491.19,493.23 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:493.23,495.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:496.3,508.21 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:508.21,510.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:511.3,511.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:522.2,522.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:522.43,535.34 5 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:535.34,556.30 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:556.30,558.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:559.4,559.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:559.44,561.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:562.4,562.106 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:562.106,564.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:575.4,575.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:575.74,577.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:578.4,579.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:579.18,581.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:583.4,584.28 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:584.28,586.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:588.4,588.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:588.31,599.57 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:599.57,601.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:601.17,604.7 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:606.5,607.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:607.21,609.6 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:615.5,615.138 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:615.138,617.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:617.27,619.7 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:620.6,620.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:622.5,623.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:623.26,625.6 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:626.5,626.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:630.4,631.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:631.20,633.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:634.4,634.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:634.22,637.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:637.26,639.6 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:640.5,640.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:645.4,660.77 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:660.77,662.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:663.4,664.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:664.25,666.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:667.4,667.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:673.2,673.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:673.26,675.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:677.2,678.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:678.25,680.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:681.2,681.97 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:681.97,683.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:690.2,691.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:691.21,693.33 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:693.33,695.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:696.3,696.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:696.33,698.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:699.3,699.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:699.49,704.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:721.3,721.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:721.54,722.84 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:722.84,724.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:728.2,728.99 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:728.99,730.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:732.2,733.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:733.22,735.10 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:736.109,737.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:738.100,739.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:740.114,741.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:742.107,743.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:744.11,745.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:748.2,749.43 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:749.43,751.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:753.2,755.34 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:755.34,756.48 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:756.48,757.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:757.19,760.5 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:764.2,764.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:764.31,767.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:768.2,768.35 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:768.35,771.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:772.2,772.76 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:772.76,776.3 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:778.2,780.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:780.16,782.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:782.20,785.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:788.2,788.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:788.25,798.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:798.18,800.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:800.9,800.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:800.30,807.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:808.3,808.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:808.36,810.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:811.3,812.50 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:812.50,815.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:816.3,822.17 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:822.17,824.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:826.3,836.17 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:836.17,838.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:839.3,839.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:842.2,843.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:843.30,844.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:844.52,846.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:846.9,848.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:851.2,869.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:869.21,871.43 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:871.43,873.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:874.3,874.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:874.29,876.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:886.3,886.76 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:886.76,888.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:890.2,890.105 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:890.105,892.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:893.2,894.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:894.16,896.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:901.2,904.40 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:904.40,905.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:905.15,906.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:909.3,910.63 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:910.63,912.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:912.9,914.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:916.3,916.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:916.43,918.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:919.3,920.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:920.20,922.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:925.3,925.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:925.23,928.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:929.3,931.33 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:931.33,934.39 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:934.39,936.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:939.2,948.42 5 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:948.42,950.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:950.21,952.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:952.9,955.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:959.2,959.53 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:959.53,960.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:960.54,961.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:961.33,963.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:964.9,972.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:973.3,973.60 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:973.60,974.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:974.40,976.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:978.3,978.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:978.61,979.41 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:979.41,981.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:983.3,983.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:983.28,985.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:986.3,987.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:989.2,989.51 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:989.51,991.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:995.2,997.53 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:997.53,999.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:999.8,1001.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1002.2,1002.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1002.22,1004.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1008.2,1014.76 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1014.76,1016.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1021.2,1021.57 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1021.57,1026.13 5 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1026.13,1029.21 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1029.21,1032.5 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1033.4,1033.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1033.49,1035.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1036.4,1043.89 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1043.89,1046.5 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1048.4,1048.86 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1052.2,1063.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1063.21,1065.40 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1065.40,1067.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1068.3,1068.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1068.38,1070.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1072.2,1074.18 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1074.18,1081.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1082.2,1082.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1082.28,1084.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1085.2,1085.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1085.16,1087.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1088.2,1088.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1088.30,1090.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1091.2,1091.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1091.30,1093.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1098.2,1098.76 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1098.76,1100.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1101.2,1102.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1102.16,1104.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1105.2,1105.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1111.94,1113.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1113.15,1115.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1117.2,1118.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1118.16,1120.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1122.2,1123.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1123.13,1125.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1126.2,1131.16 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1131.16,1133.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1134.2,1134.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1134.19,1136.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1146.2,1146.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1146.39,1148.55 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1148.55,1150.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1152.2,1152.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1152.39,1154.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1157.2,1158.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1158.21,1163.21 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1163.21,1165.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1166.3,1167.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1167.21,1169.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1170.3,1170.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1170.52,1172.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1173.3,1173.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1173.52,1178.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1179.3,1179.41 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1179.41,1182.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1183.3,1183.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1188.2,1188.46 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1188.46,1190.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1191.2,1191.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1191.27,1193.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1195.2,1196.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1196.16,1198.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1201.2,1210.16 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1210.16,1212.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1213.2,1213.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1218.59,1220.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1220.38,1222.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1225.2,1226.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1226.29,1227.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1227.22,1229.9 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1232.2,1232.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1232.18,1234.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1237.2,1244.29 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1244.29,1245.67 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1245.67,1247.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1249.2,1249.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1249.16,1251.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1254.2,1254.11 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1258.55,1260.47 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1260.47,1262.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1263.2,1264.58 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1264.58,1266.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1267.2,1267.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1270.252,1271.108 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1271.108,1273.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1274.2,1274.55 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1274.55,1276.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1277.2,1277.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1280.184,1282.69 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1282.69,1284.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1284.32,1285.58 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1285.58,1287.10 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1290.3,1290.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1290.18,1292.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1294.2,1294.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1294.19,1297.32 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1297.32,1298.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1298.39,1300.10 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1303.3,1303.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1303.19,1305.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1307.2,1307.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1307.21,1309.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1309.32,1310.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1310.49,1312.10 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1315.3,1315.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1315.18,1317.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1319.2,1319.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1319.28,1321.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1321.17,1323.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1324.3,1324.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1324.27,1326.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1328.2,1328.76 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1328.76,1330.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1331.2,1331.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1342.96,1343.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1343.26,1345.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1347.2,1348.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1348.16,1350.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1352.2,1363.23 9 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1363.23,1364.58 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1364.58,1365.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1365.31,1367.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1367.10,1369.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1373.2,1373.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1373.17,1375.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1376.2,1376.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1376.16,1378.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1379.2,1379.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1379.16,1381.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1382.2,1382.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1382.18,1384.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1385.2,1385.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1385.19,1387.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1388.2,1388.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1388.19,1390.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1396.2,1399.18 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1399.18,1400.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1400.61,1401.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1402.50,1403.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1404.12,1405.108 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1409.2,1410.42 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1410.42,1414.3 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1415.2,1420.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1420.16,1422.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1429.2,1444.43 6 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1444.43,1446.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1449.2,1451.27 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1451.27,1453.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1458.2,1458.46 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1458.46,1460.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1461.2,1461.63 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1461.63,1463.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1465.2,1466.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1466.15,1472.29 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1472.29,1479.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1479.18,1481.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1482.4,1482.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1482.23,1483.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1485.4,1485.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1485.30,1486.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1486.24,1488.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1488.32,1489.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1493.4,1494.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1494.30,1495.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1498.8,1504.29 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1504.29,1506.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1506.18,1508.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1509.4,1509.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1509.23,1510.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1512.4,1512.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1512.30,1513.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1513.24,1515.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1515.32,1516.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1520.4,1521.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1521.30,1522.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1526.2,1526.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1526.26,1528.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1528.17,1530.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1535.2,1535.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1535.74,1536.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1536.13,1537.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1537.33,1542.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1542.26,1544.39 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1544.39,1546.7 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1548.5,1548.82 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1565.2,1565.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1565.38,1569.27 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1569.27,1571.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1572.3,1572.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1572.27,1574.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1576.3,1581.32 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1581.32,1586.4 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1588.3,1592.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1592.18,1594.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1595.3,1596.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1596.17,1598.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1599.3,1599.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1602.2,1602.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1603.15,1618.32 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1618.32,1620.33 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1620.33,1621.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1621.40,1623.11 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1626.4,1638.6 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1640.3,1641.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1641.17,1643.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1644.3,1644.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1646.18,1648.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1648.17,1650.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1651.3,1651.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1653.10,1654.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1654.25,1656.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1657.3,1659.32 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1659.32,1661.33 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1661.33,1662.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1662.40,1664.11 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1667.4,1669.26 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1669.26,1671.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1672.4,1673.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1673.25,1675.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1676.4,1676.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1678.3,1678.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1690.51,1695.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1700.73,1702.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1702.16,1704.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1705.2,1706.48 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1706.48,1710.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1711.2,1713.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1713.16,1715.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1716.2,1716.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1727.117,1731.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1731.21,1733.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1734.2,1735.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1735.16,1737.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1738.2,1739.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1739.27,1741.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1742.2,1742.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1764.19,1775.30 7 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1775.30,1777.37 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1777.37,1779.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1781.3,1781.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1781.20,1783.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1797.2,1797.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1797.39,1799.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1801.2,1811.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1811.25,1813.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1815.2,1816.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1816.29,1818.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1824.2,1824.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1824.27,1826.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1831.2,1833.22 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1833.22,1835.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1837.2,1846.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1846.16,1848.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1853.2,1855.27 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1855.27,1857.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1859.2,1876.33 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1876.33,1878.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1880.2,1881.28 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1881.28,1885.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1885.20,1888.33 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1888.33,1889.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1889.40,1891.11 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1894.4,1894.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1894.20,1895.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1900.3,1900.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1900.22,1902.33 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1902.33,1903.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1903.50,1905.11 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1908.4,1908.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1908.19,1909.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1918.3,1918.56 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1918.56,1919.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1927.3,1927.64 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1927.64,1928.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1932.3,1935.32 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1935.32,1936.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1936.39,1938.10 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1942.3,1956.14 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1956.14,1957.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1957.37,1959.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1961.3,1962.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1962.26,1963.9 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1975.2,1975.59 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1975.59,1986.17 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1986.17,1988.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1990.3,1991.34 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1991.34,1993.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1995.3,1996.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1996.29,1998.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1998.21,2001.34 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2001.34,2002.41 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2002.41,2004.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2007.5,2007.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2007.21,2008.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2011.4,2011.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2011.23,2013.34 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2013.34,2014.51 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2014.51,2016.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2019.5,2019.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2019.20,2020.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2023.4,2023.57 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2023.57,2024.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2027.4,2027.65 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2027.65,2028.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2030.4,2031.33 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2031.33,2032.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2032.40,2034.11 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2037.4,2051.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2051.15,2052.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2052.38,2054.6 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2056.4,2057.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2057.27,2058.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2065.2,2066.28 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2066.28,2068.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2072.2,2072.71 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2072.71,2080.30 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2080.30,2081.41 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2081.41,2087.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2089.3,2089.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2089.13,2090.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2090.31,2095.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2095.25,2097.38 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2097.38,2099.7 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2101.5,2101.81 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2112.2,2112.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2112.38,2115.27 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2115.27,2117.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2121.3,2138.30 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2138.30,2140.11 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2140.11,2141.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2143.4,2160.15 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2160.15,2161.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2161.39,2163.6 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2165.4,2165.46 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2167.3,2173.24 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2173.24,2175.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2176.3,2176.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2179.2,2179.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2180.15,2182.24 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2182.24,2184.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2185.3,2185.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2187.18,2199.30 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2199.30,2201.11 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2201.11,2202.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2204.4,2208.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2208.15,2209.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2209.39,2211.6 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2213.4,2213.35 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2215.3,2216.24 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2216.24,2218.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2219.3,2219.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2220.10,2221.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2221.22,2223.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2224.3,2226.27 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2226.27,2228.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2228.20,2230.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2231.4,2233.26 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2233.26,2235.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2236.4,2237.23 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2237.23,2239.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2240.4,2240.46 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2240.46,2244.5 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2245.4,2245.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2247.3,2247.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2252.94,2254.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2254.16,2256.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2258.2,2260.18 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2260.18,2261.59 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2261.59,2262.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2262.36,2264.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2264.10,2266.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2270.2,2270.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2270.13,2272.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2273.2,2273.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2273.50,2275.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2277.2,2277.98 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2281.98,2282.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2282.26,2284.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2286.2,2287.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2287.16,2289.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2291.2,2292.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2292.13,2294.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2297.2,2298.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2298.19,2299.51 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2299.51,2301.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2302.3,2302.55 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2304.2,2304.42 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2304.42,2306.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2308.2,2308.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2308.54,2309.48 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2309.48,2311.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2312.3,2312.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2316.2,2318.53 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:17.82,19.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:21.149,22.55 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:22.55,24.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:25.2,25.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:25.36,27.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:28.2,34.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:34.16,36.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:37.2,37.42 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:37.42,39.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:40.2,40.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:43.105,44.48 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:44.48,46.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:47.2,48.54 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:51.129,53.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:53.16,55.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:56.2,57.53 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:57.53,59.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:60.2,61.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:61.25,63.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:64.2,65.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:65.16,67.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:68.2,68.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:26.97,27.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:27.18,29.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:30.2,30.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:33.37,35.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:37.81,38.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:38.44,40.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:41.2,41.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:41.38,43.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:44.2,44.57 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:47.88,48.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:48.32,50.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:51.2,52.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:52.20,54.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:55.2,55.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:58.40,72.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:74.106,75.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:75.34,77.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:78.2,79.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:79.16,81.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:83.2,84.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:84.16,86.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:88.2,89.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:89.13,91.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:93.2,94.63 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:94.63,96.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:98.2,98.72 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:98.72,100.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:102.2,106.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:109.117,110.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:110.32,112.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:113.2,113.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:113.34,115.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:117.2,118.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:118.16,120.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:121.2,121.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:121.19,123.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:125.2,126.69 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:126.69,128.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:130.2,136.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:18.33,20.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:22.27,37.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:39.93,40.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:40.30,42.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:43.2,43.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:43.28,45.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:46.2,47.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:47.16,49.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:51.2,52.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:52.17,54.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:55.2,56.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:56.19,58.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:59.2,59.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:59.19,61.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:62.2,63.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:63.16,65.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:67.2,74.9 3 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:74.9,76.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:77.2,78.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:78.15,80.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:81.2,85.16 4 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:85.16,87.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:88.2,88.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:88.17,90.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:92.2,101.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:104.48,105.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:105.16,107.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:108.2,109.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:109.29,111.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:112.2,112.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:112.31,114.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:115.2,115.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:118.75,120.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:120.27,121.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:121.32,123.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:123.17,124.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:126.4,126.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:129.2,134.33 3 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:134.33,136.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:137.2,137.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:137.40,138.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:138.39,140.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:141.3,141.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:143.2,143.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:143.34,145.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:146.2,147.35 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:147.35,149.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:150.2,150.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:153.77,154.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:154.20,156.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:157.2,159.31 3 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:159.31,160.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:160.33,162.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:163.3,163.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:163.30,165.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:167.2,170.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:23.91,25.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:27.38,50.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:52.104,53.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:53.38,55.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:56.2,57.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:57.16,59.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:61.2,62.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:62.26,64.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:65.2,66.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:66.30,68.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:69.2,69.72 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:69.72,71.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:73.2,74.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:74.16,76.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:77.2,78.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:78.16,80.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:81.2,82.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:82.16,84.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:85.2,86.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:86.16,88.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:90.2,105.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:105.16,107.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:109.2,109.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:109.19,117.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:118.2,118.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:118.25,120.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:121.2,121.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:121.30,123.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:124.2,124.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:124.31,126.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:127.2,128.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:128.16,130.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:131.2,131.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:134.91,136.9 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:136.9,138.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:139.2,140.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:140.15,141.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:141.19,143.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:144.3,144.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:146.2,146.94 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:149.59,150.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:150.16,152.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:153.2,154.61 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:154.61,156.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:157.2,157.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:160.56,161.75 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:161.75,163.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:164.2,164.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:167.67,169.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:170.17,171.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:172.67,173.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:174.10,175.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:179.60,180.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:180.16,182.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:183.2,184.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:184.25,186.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:187.2,187.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:190.57,191.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:192.15,193.81 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:193.81,195.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:196.3,196.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:197.19,199.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:199.17,201.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:202.3,202.55 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:202.55,204.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:205.3,205.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:206.14,207.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:208.11,209.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:210.10,211.41 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:215.59,216.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:216.16,218.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:219.2,219.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:220.12,221.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:222.14,223.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:224.10,225.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:28.90,30.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:30.16,32.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:34.2,36.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:37.16,38.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:40.16,42.140 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:44.20,46.140 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:48.17,50.142 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:52.17,56.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:56.50,62.63 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:62.63,64.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:66.4,66.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:66.45,68.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:72.4,74.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:74.25,76.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:77.4,77.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:80.3,80.101 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:82.18,84.141 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:86.18,88.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:88.18,90.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:91.3,91.41 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:93.17,96.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:96.50,99.59 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:99.59,101.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:102.4,104.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:104.25,106.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:107.4,107.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:110.3,110.98 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:112.10,116.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:125.86,126.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:126.16,128.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:129.2,130.9 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:130.9,132.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:133.2,133.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:133.22,135.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:137.2,139.31 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:139.31,141.10 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:141.10,143.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:144.3,145.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:145.22,147.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:148.3,149.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:149.26,151.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:152.3,152.68 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:152.68,154.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:155.3,156.37 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:156.37,158.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:159.3,160.107 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:162.2,162.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:165.249,166.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:166.24,168.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:169.2,169.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:169.38,171.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:173.2,174.31 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:174.31,175.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:175.32,177.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:180.2,181.34 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:181.34,182.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:182.29,183.9 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:185.3,197.17 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:197.17,199.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:200.3,200.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:200.20,201.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:203.3,203.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:203.37,205.33 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:205.33,206.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:208.4,208.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:208.19,209.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:209.43,210.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:212.5,212.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:214.4,215.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:215.30,216.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:220.2,220.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:223.113,229.2 5 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:231.101,233.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:247.92,251.16 4 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:251.16,253.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:253.8,253.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:253.24,255.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:259.2,272.51 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:272.51,274.38 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:274.38,275.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:276.50,277.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:278.12,279.107 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:287.2,292.26 5 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:292.26,294.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:297.2,297.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:297.19,301.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:303.2,311.42 5 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:311.42,315.3 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:316.2,341.64 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:341.64,342.86 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:342.86,344.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:345.3,345.56 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:345.56,347.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:348.3,360.19 6 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:360.19,364.4 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:365.3,365.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:369.2,370.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:370.15,372.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:372.27,374.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:375.3,375.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:375.27,377.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:380.2,381.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:381.15,387.28 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:387.28,395.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:395.18,397.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:398.4,398.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:398.23,399.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:401.4,401.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:401.30,402.66 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:402.66,403.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:405.5,406.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:406.12,407.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:409.5,409.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:409.28,413.6 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:414.5,415.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:415.30,416.11 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:419.4,420.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:420.30,421.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:424.8,432.28 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:432.28,438.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:438.18,440.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:441.4,441.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:441.23,442.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:444.4,444.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:444.30,445.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:445.40,447.31 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:447.31,448.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:452.4,455.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:455.30,456.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:461.2,465.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:465.17,467.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:469.2,470.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:470.16,472.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:473.2,473.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:20.79,21.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:21.43,23.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:24.2,24.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:24.29,26.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:27.2,27.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:30.40,63.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:65.68,71.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:71.25,74.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:75.2,75.67 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:78.62,83.19 3 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:83.19,87.3 3 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:88.2,88.89 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:91.101,92.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:92.22,94.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:95.2,96.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:96.18,98.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:99.2,100.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:100.16,102.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:103.2,104.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:104.16,106.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:107.2,107.119 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:110.99,111.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:111.22,113.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:114.2,115.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:115.18,117.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:118.2,119.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:119.16,121.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:122.2,122.51 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:122.51,124.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:125.2,126.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:126.16,128.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:129.2,131.15 3 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:131.15,132.69 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:132.69,134.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:135.3,135.58 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:137.2,137.130 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:140.102,142.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:142.16,144.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:145.2,145.64 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:145.64,147.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:148.2,148.113 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:151.109,153.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:153.16,155.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:156.2,157.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:157.16,159.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:160.2,161.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:161.16,163.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:164.2,164.67 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:167.107,169.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:169.16,171.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:172.2,173.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:173.16,175.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:176.2,176.107 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:176.107,178.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:179.2,179.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:180.41,181.63 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:182.41,183.95 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:184.10,185.83 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:189.111,191.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:191.16,193.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:194.2,195.57 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:195.57,197.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:198.2,199.23 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:199.23,201.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:202.2,203.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:203.16,205.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:206.2,206.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:206.17,208.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:209.2,209.108 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:212.63,215.2 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:217.69,219.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:219.16,221.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:222.2,222.79 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:225.60,227.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:227.16,229.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:230.2,230.57 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:233.137,234.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:234.49,236.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:237.2,238.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:238.16,240.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:241.2,243.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:243.16,245.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:246.2,247.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:247.16,249.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:250.2,250.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:250.22,252.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:253.2,253.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:256.142,258.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:258.16,260.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:261.2,262.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:262.16,264.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:265.2,265.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:265.47,267.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:268.2,269.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:269.16,270.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:270.50,272.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:273.3,273.89 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:275.2,275.173 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:278.157,280.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:280.16,282.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:283.2,283.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:283.47,285.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:286.2,287.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:287.16,288.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:288.50,290.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:291.3,291.89 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:293.2,293.169 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:296.104,297.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:297.22,299.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:300.2,301.61 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:301.61,303.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:303.20,304.9 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:307.2,307.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:307.19,309.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:310.2,317.8 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:320.119,322.39 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:322.39,323.81 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:323.81,325.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:327.2,327.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:330.71,332.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:332.16,334.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:335.2,335.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:17.61,105.23 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:105.23,122.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:123.2,123.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:126.104,127.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:127.61,129.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:130.2,130.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:130.38,132.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:133.2,134.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:134.16,136.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:137.2,138.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:138.16,140.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:141.2,147.107 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:147.107,149.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:150.2,151.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:151.16,153.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:154.2,170.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:170.19,172.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:173.2,173.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:176.103,177.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:177.61,179.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:180.2,180.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:180.38,182.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:183.2,184.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:184.16,186.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:187.2,191.106 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:191.106,193.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:194.2,195.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:195.16,197.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:198.2,200.31 3 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:200.31,207.36 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:207.36,218.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:219.3,220.35 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:222.2,230.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:233.107,234.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:234.61,236.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:237.2,237.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:237.38,239.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:240.2,241.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:241.16,243.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:244.2,248.110 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:248.110,250.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:251.2,252.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:252.16,254.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:255.2,256.33 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:256.33,266.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:267.2,275.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:278.108,279.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:279.61,281.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:282.2,282.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:282.37,284.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:285.2,286.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:286.16,288.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:289.2,290.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:290.19,292.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:293.2,293.104 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:293.104,295.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:296.2,297.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:297.16,299.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:300.2,307.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:307.16,309.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:310.2,311.43 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:311.43,318.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:319.2,332.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:332.22,334.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:335.2,335.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:338.108,339.62 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:339.62,341.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:342.2,342.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:342.38,344.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:345.2,346.9 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:346.9,348.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:349.2,350.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:350.16,352.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:353.2,357.16 5 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:357.16,359.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:360.2,370.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:373.109,374.62 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:374.62,376.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:377.2,377.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:377.38,379.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:380.2,381.9 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:381.9,383.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:384.2,385.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:385.16,387.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:388.2,390.32 3 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:390.32,392.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:393.2,394.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:394.16,396.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:397.2,403.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:406.106,407.62 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:407.62,409.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:410.2,410.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:410.38,412.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:413.2,414.9 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:414.9,416.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:417.2,418.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:418.16,420.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:421.2,423.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:423.16,424.41 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:424.41,434.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:435.3,435.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:437.2,445.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:483.65,484.42 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:484.42,485.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:485.39,487.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:489.2,489.85 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:489.85,491.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:492.2,492.95 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:495.102,496.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:496.38,498.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:499.2,499.58 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:499.58,501.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:502.2,502.90 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:505.60,508.2 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:510.66,512.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:512.26,514.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:515.2,515.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:518.69,521.33 3 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:521.33,523.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:523.21,524.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:526.3,526.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:526.34,527.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:529.3,530.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:532.2,532.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:535.63,537.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:537.19,539.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:540.2,541.42 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:541.42,543.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:544.2,544.57 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:544.57,546.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:547.2,547.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:547.54,549.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:550.2,550.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:553.70,557.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:559.66,561.9 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:561.9,563.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:564.2,566.17 3 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:566.17,568.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:569.2,569.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:570.103,572.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:573.34,574.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:575.10,576.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:580.56,581.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:581.37,583.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:584.2,584.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:584.26,586.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:586.37,587.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:589.3,589.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:591.2,591.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:594.90,602.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:604.68,605.71 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:605.71,607.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:607.17,609.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:610.3,610.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:612.2,613.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:613.16,615.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:616.2,617.41 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:617.41,619.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:620.2,620.78 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:623.65,625.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:625.16,627.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:628.2,628.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:628.17,630.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:631.2,631.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:634.51,635.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:635.16,637.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:638.2,638.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:641.56,642.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:642.28,644.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:645.2,646.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:649.92,651.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:651.29,653.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:654.2,654.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:657.86,659.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:659.29,661.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:662.2,662.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:665.94,667.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:667.29,669.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:670.2,670.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:673.98,675.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:675.29,677.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:678.2,678.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:17.93,18.104 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:18.104,20.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:22.2,23.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:23.16,25.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:27.2,28.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:28.19,30.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:32.2,35.33 3 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:35.33,36.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:36.47,39.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:42.2,44.20 3 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:44.20,47.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:48.2,49.68 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:49.68,50.48 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:50.48,52.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:53.3,53.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:53.32,55.23 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:55.23,56.63 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:56.63,58.6 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:59.5,59.53 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:61.4,61.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:64.2,71.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:71.17,73.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:73.8,73.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:73.29,75.36 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:75.36,77.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:78.3,83.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:86.2,86.35 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:86.35,88.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:90.2,97.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:97.16,99.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:101.2,110.28 3 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:110.28,112.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:113.2,124.16 4 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:124.16,126.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:127.2,127.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:133.93,134.35 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:134.35,136.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:138.2,139.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:139.16,141.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:143.2,144.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:144.16,146.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:147.2,147.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:147.17,149.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:151.2,152.33 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:152.33,153.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:153.47,156.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:159.2,160.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:160.16,162.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:164.2,176.26 3 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:176.26,178.23 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:178.23,180.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:181.3,192.5 3 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:195.2,196.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:196.16,198.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:199.2,199.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:22.104,24.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:24.16,26.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:28.2,29.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:29.18,31.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:33.2,33.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:34.13,35.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:36.13,37.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:38.14,39.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:40.16,41.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:42.10,43.95 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:51.67,53.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:57.68,58.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:58.33,60.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:61.2,61.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:67.42,69.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:74.61,76.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:76.26,78.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:79.2,79.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:85.90,86.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:86.49,88.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:90.2,91.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:91.15,93.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:94.2,95.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:95.17,97.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:100.2,103.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:103.16,105.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:107.2,113.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:113.12,115.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:115.18,117.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:118.3,119.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:119.20,121.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:122.3,124.48 3 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:125.8,127.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:129.2,130.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:130.16,132.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:134.2,139.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:145.90,147.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:147.15,149.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:151.2,152.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:152.16,154.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:156.2,157.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:157.16,158.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:158.47,160.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:161.3,161.56 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:164.2,170.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:170.19,173.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:173.8,175.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:176.2,176.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:181.92,183.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:183.16,185.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:187.2,188.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:188.16,190.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:192.2,200.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:200.25,207.28 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:207.28,209.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:210.3,210.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:212.2,212.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:216.93,217.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:217.52,219.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:221.2,222.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:222.15,224.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:226.2,227.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:227.16,229.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:231.2,231.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:231.47,232.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:232.47,234.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:235.3,235.59 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:238.2,241.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:35.127,36.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:36.23,38.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:39.2,40.40 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:40.40,42.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:43.2,43.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:43.37,45.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:46.2,46.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:46.37,48.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:49.2,49.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:52.23,80.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:82.26,140.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:142.92,143.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:143.25,145.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:147.2,148.49 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:148.49,150.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:152.2,152.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:153.17,154.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:154.24,156.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:157.3,158.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:158.17,160.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:161.3,165.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:166.17,167.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:167.22,169.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:170.3,170.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:170.22,172.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:173.3,174.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:174.17,176.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:177.3,181.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:182.16,189.23 7 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:189.23,191.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:192.3,192.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:192.24,194.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:195.3,195.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:195.39,197.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:198.3,207.17 3 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:207.17,209.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:210.3,210.69 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:210.69,212.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:213.3,213.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:214.10,215.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:219.92,220.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:220.25,222.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:224.2,225.49 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:225.49,227.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:229.2,229.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:230.17,232.24 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:232.24,234.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:235.3,236.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:236.17,238.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:239.3,239.59 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:239.59,241.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:242.3,242.81 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:242.81,244.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:245.3,250.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:251.17,253.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:253.22,255.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:256.3,257.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:257.17,259.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:260.3,260.79 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:260.79,262.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:263.3,268.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:269.10,270.66 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:274.91,276.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:276.16,278.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:279.2,279.67 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:279.67,280.76 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:280.76,282.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:285.2,286.52 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:286.52,288.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:289.2,289.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:292.74,294.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:294.16,296.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:297.2,297.62 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:297.62,299.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:300.2,300.68 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:303.109,304.56 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:304.56,306.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:307.2,307.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:307.25,309.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:310.2,310.81 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:310.81,312.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:313.2,313.102 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:313.102,315.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:316.2,316.108 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:316.108,318.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:319.2,319.99 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:319.99,321.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:322.2,322.99 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:322.99,324.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:325.2,325.60 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:325.60,327.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:328.2,328.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:328.34,330.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:331.2,331.114 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:331.114,333.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:334.2,334.66 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:334.66,336.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:337.2,337.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:337.40,339.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:340.2,340.132 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:340.132,342.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:343.2,343.35 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:343.35,345.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:346.2,346.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:349.92,350.103 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:350.103,352.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:354.2,355.52 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:355.52,357.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:358.2,358.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:358.32,360.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:361.2,361.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:364.108,365.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:365.19,367.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:368.2,369.53 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:369.53,371.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:372.2,372.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:372.19,374.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:375.2,375.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:375.39,376.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:376.34,378.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:380.2,380.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:383.66,385.53 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:385.53,387.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:388.2,388.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:388.19,390.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:391.2,391.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:10.101,12.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:12.16,14.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:16.2,18.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:19.16,20.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:21.14,22.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:23.15,24.84 1 0 +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:25.16,26.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:27.10,28.97 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:21.75,23.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:25.41,28.2 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:30.31,37.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:39.38,46.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:48.50,56.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:58.43,70.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:72.80,73.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:73.36,75.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:76.2,76.48 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:76.48,78.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:79.2,79.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:82.97,84.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:84.16,86.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:87.2,88.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:88.16,90.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:91.2,92.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:92.16,94.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:95.2,96.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:96.16,98.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:99.2,99.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:102.104,104.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:104.16,106.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:107.2,108.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:108.16,110.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:111.2,112.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:112.16,114.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:115.2,116.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:116.16,118.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:119.2,119.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:122.96,124.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:124.16,126.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:127.2,128.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:128.19,130.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:131.2,132.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:132.18,134.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:135.2,141.79 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:141.79,143.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:143.17,145.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:146.3,146.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:148.2,148.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:151.77,153.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:153.16,155.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:156.2,157.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:157.19,159.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:160.2,160.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:10.101,12.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:12.16,14.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:16.2,17.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:17.18,19.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:21.2,21.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:22.15,23.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:24.13,25.42 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:26.14,27.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:28.16,29.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:30.16,31.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:32.10,33.102 1 0 diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/repeat-01/create-database.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/repeat-01/create-database.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/repeat-01/create-database.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/repeat-01/create-database.stdout.log new file mode 100644 index 00000000..4b15bd57 --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/repeat-01/create-database.stdout.log @@ -0,0 +1 @@ +CREATE DATABASE diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/repeat-01/create-pgvector.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/repeat-01/create-pgvector.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/repeat-01/create-pgvector.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/repeat-01/create-pgvector.stdout.log new file mode 100644 index 00000000..d26bad14 --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/repeat-01/create-pgvector.stdout.log @@ -0,0 +1 @@ +CREATE EXTENSION diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/repeat-01/database-identity.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/repeat-01/database-identity.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/repeat-01/database-identity.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/repeat-01/database-identity.stdout.log new file mode 100644 index 00000000..144d7bc8 --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/repeat-01/database-identity.stdout.log @@ -0,0 +1 @@ +{"database" : "engram_prc_rg_test_ec4161b3fdcd0ac8_r1", "schema" : "public", "server_version" : "17.10 (Debian 17.10-1.pgdg12+1)", "user" : "engram"} diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/repeat-01/go-test-summary.json b/.agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/repeat-01/go-test-summary.json new file mode 100644 index 00000000..d15cdc43 --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/repeat-01/go-test-summary.json @@ -0,0 +1,40 @@ +{ + "schema_version": 1, + "verdict": "PASS", + "input_path": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\parent-ambient-true-false-green\\repeat-01\\go-test.stdout.jsonl", + "fail_on_unexpected_skip": true, + "allowed_skip_identities": [], + "counts": { + "packages": 1, + "tests": 1, + "passed": 1, + "failed": 0, + "skipped": 0, + "no_tests": 0, + "zero_tests": 0, + "incomplete": 0, + "unexpected_skips": 0, + "malformed_lines": 0 + }, + "packages": [ + { + "package": "github.com/thebtf/engram/internal/mcp", + "outcome": "pass", + "elapsed_seconds": 4.047, + "last_output": "ok \tgithub.com/thebtf/engram/internal/mcp\t4.039s\tcoverage: 0.1% of statements", + "tests_observed": 1 + } + ], + "tests": [ + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestEC_F1_TagDerivedBackfill_T007", + "outcome": "pass", + "elapsed_seconds": 3.91, + "last_output": "--- PASS: TestEC_F1_TagDerivedBackfill_T007 (3.91s)", + "skip_allowed": false + } + ], + "unexpected_skips": [], + "errors": [] +} diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/repeat-01/go-test.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/repeat-01/go-test.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/repeat-01/go-test.stdout.jsonl b/.agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/repeat-01/go-test.stdout.jsonl new file mode 100644 index 00000000..ac618ffc --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/repeat-01/go-test.stdout.jsonl @@ -0,0 +1,16 @@ +{"Time":"2026-07-11T04:00:15.4043575+03:00","Action":"start","Package":"github.com/thebtf/engram/internal/mcp"} +{"Time":"2026-07-11T04:00:15.4995228+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007"} +{"Time":"2026-07-11T04:00:15.4995228+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":"=== RUN TestEC_F1_TagDerivedBackfill_T007\n"} +{"Time":"2026-07-11T04:00:16.3902512+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":"{\"level\":\"warn\",\"error\":\"ERROR: relation \\\"observation_vectors\\\" does not exist (SQLSTATE 42P01)\",\"time\":\"2026-07-11T04:00:16+03:00\",\"message\":\"migration 040: orphan vector cleanup failed (non-fatal)\"}\n"} +{"Time":"2026-07-11T04:00:16.3907511+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":"{\"level\":\"info\",\"garbage_deleted\":0,\"orphan_vectors_deleted\":0,\"time\":\"2026-07-11T04:00:16+03:00\",\"message\":\"migration 040: garbage cleanup complete\"}\n"} +{"Time":"2026-07-11T04:00:16.39975+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":"{\"level\":\"info\",\"orphan_vectors_deleted\":0,\"time\":\"2026-07-11T04:00:16+03:00\",\"message\":\"migration 041: orphan vector purge complete\"}\n"} +{"Time":"2026-07-11T04:00:16.4087515+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":"{\"level\":\"info\",\"patterns_deleted\":0,\"time\":\"2026-07-11T04:00:16+03:00\",\"message\":\"migration 042: low-quality pattern purge complete\"}\n"} +{"Time":"2026-07-11T04:00:16.4437515+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":"{\"level\":\"info\",\"total_deleted\":0,\"time\":\"2026-07-11T04:00:16+03:00\",\"message\":\"migration 043: radical observation cleanup complete\"}\n"} +{"Time":"2026-07-11T04:00:17.7307513+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":"{\"level\":\"warn\",\"error\":\"ERROR: extension \\\"vectorscale\\\" is not available (SQLSTATE 0A000)\",\"time\":\"2026-07-11T04:00:17+03:00\",\"message\":\"migration 109: vectorscale extension not available, skipping DiskANN index\"}\n"} +{"Time":"2026-07-11T04:00:19.0254877+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":"{\"level\":\"debug\",\"connections\":1,\"time\":\"2026-07-11T04:00:19+03:00\",\"message\":\"Connection pool warmed\"}\n"} +{"Time":"2026-07-11T04:00:19.4070204+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":"--- PASS: TestEC_F1_TagDerivedBackfill_T007 (3.91s)\n"} +{"Time":"2026-07-11T04:00:19.4070204+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Elapsed":3.91} +{"Time":"2026-07-11T04:00:19.4070204+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Output":"PASS\n"} +{"Time":"2026-07-11T04:00:19.4245187+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Output":"coverage: 0.1% of statements\n"} +{"Time":"2026-07-11T04:00:19.45102+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Output":"ok \tgithub.com/thebtf/engram/internal/mcp\t4.039s\tcoverage: 0.1% of statements\n"} +{"Time":"2026-07-11T04:00:19.45102+03:00","Action":"pass","Package":"github.com/thebtf/engram/internal/mcp","Elapsed":4.047} diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/repeat-01/pg-stat-activity-after.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/repeat-01/pg-stat-activity-after.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/repeat-01/pg-stat-activity-after.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/repeat-01/pg-stat-activity-after.stdout.log new file mode 100644 index 00000000..fe51488c --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/repeat-01/pg-stat-activity-after.stdout.log @@ -0,0 +1 @@ +[] diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/repeat-01/pg-stat-activity-before.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/repeat-01/pg-stat-activity-before.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/repeat-01/pg-stat-activity-before.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/repeat-01/pg-stat-activity-before.stdout.log new file mode 100644 index 00000000..fe51488c --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/repeat-01/pg-stat-activity-before.stdout.log @@ -0,0 +1 @@ +[] diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/repeat-01/repeat-summary.json b/.agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/repeat-01/repeat-summary.json new file mode 100644 index 00000000..d3a1fc13 --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/repeat-01/repeat-summary.json @@ -0,0 +1,33 @@ +{ + "repeat": 1, + "verdict": "PASS", + "database": "engram_prc_rg_test_ec4161b3fdcd0ac8_r1", + "schema": "public", + "database_schema_identity": "engram_prc_rg_test_ec4161b3fdcd0ac8_r1.public", + "database_dsn": "REDACTED_DATABASE_DSN", + "database_create_confirmed": true, + "sequential_execution": { + "package_parallelism": 1, + "test_parallelism": 1 + }, + "race": false, + "connection_budget": 20, + "server_sessions_before": 6, + "server_sessions_after": 6, + "sessions_before": 0, + "sessions_after": 0, + "go_test_exit": 0, + "json_parser_exit": 0, + "coverage_policy": "Targeted", + "coverage_exit": 0, + "cleanup_exit": 0, + "cleanup_status": "PASS", + "required_session_start_execution": { + "schema_version": 1, + "verdict": "NOT_APPLICABLE", + "reason": "only an unfiltered canonical ./... run requires the 12-test session-start execution proof" + }, + "cleanup_summary": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\parent-ambient-true-false-green\\repeat-01\\cleanup\\cleanup.json", + "errors": [], + "artifact_directory": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\parent-ambient-true-false-green\\repeat-01" +} diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/repeat-01/server-connection-count-after.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/repeat-01/server-connection-count-after.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/repeat-01/server-connection-count-after.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/repeat-01/server-connection-count-after.stdout.log new file mode 100644 index 00000000..1e8b3149 --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/repeat-01/server-connection-count-after.stdout.log @@ -0,0 +1 @@ +6 diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/repeat-01/server-connection-count-before.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/repeat-01/server-connection-count-before.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/repeat-01/server-connection-count-before.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/repeat-01/server-connection-count-before.stdout.log new file mode 100644 index 00000000..1e8b3149 --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/repeat-01/server-connection-count-before.stdout.log @@ -0,0 +1 @@ +6 diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/repeat-01/targeted-coverage.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/repeat-01/targeted-coverage.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/repeat-01/targeted-coverage.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/repeat-01/targeted-coverage.stdout.log new file mode 100644 index 00000000..c958686c --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/repeat-01/targeted-coverage.stdout.log @@ -0,0 +1,352 @@ +github.com/thebtf/engram/internal/mcp/audit_helpers.go:33: effectiveAuditWriter 0.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:44: isAuditEnabled 0.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:52: runAuditAsync 0.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:77: marshalState 0.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:92: logAuditCreate 0.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:117: logAuditEdit 0.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:142: logAuditDelete 0.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:166: logAuditGeneric 0.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:189: logAuditSupersede 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:30: parseArgs 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:46: coerceString 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:67: coerceInt 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:97: coerceInt64 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:127: coerceFloat64 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:151: coerceBool 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:177: coerceStringSlice 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:204: coerceInt64Slice 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:222: clampToInt 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:236: clampInt64ToInt 0.0% +github.com/thebtf/engram/internal/mcp/context.go:17: extractProjectFromHeader 0.0% +github.com/thebtf/engram/internal/mcp/context.go:22: contextWithProject 0.0% +github.com/thebtf/engram/internal/mcp/context.go:29: ContextWithProject 0.0% +github.com/thebtf/engram/internal/mcp/context.go:35: projectFromContext 0.0% +github.com/thebtf/engram/internal/mcp/context.go:41: contextWithSession 0.0% +github.com/thebtf/engram/internal/mcp/context.go:48: ContextWithSession 0.0% +github.com/thebtf/engram/internal/mcp/context.go:54: sessionFromContext 0.0% +github.com/thebtf/engram/internal/mcp/context.go:61: actorFromContext 0.0% +github.com/thebtf/engram/internal/mcp/health.go:22: NewMCPHealth 0.0% +github.com/thebtf/engram/internal/mcp/health.go:29: RecordRequest 0.0% +github.com/thebtf/engram/internal/mcp/health.go:36: RecordError 0.0% +github.com/thebtf/engram/internal/mcp/health.go:42: rotateWindowIfNeeded 0.0% +github.com/thebtf/engram/internal/mcp/health.go:55: HandleHealth 0.0% +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:28: ruleGovernanceCaptureEnabled 0.0% +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:39: captureActiveRuleIntent 0.0% +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:104: ruleIntentFingerprint 0.0% +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:113: marshalRuleCandidateIntentResponse 0.0% +github.com/thebtf/engram/internal/mcp/server.go:127: NewServer 100.0% +github.com/thebtf/engram/internal/mcp/server.go:141: SetBackfillStatusFunc 0.0% +github.com/thebtf/engram/internal/mcp/server.go:146: SetVersionedDocumentStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:151: SetIssueStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:156: SetMemoryStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:161: SetMetaMemoryIndex 0.0% +github.com/thebtf/engram/internal/mcp/server.go:166: SetHintQueue 0.0% +github.com/thebtf/engram/internal/mcp/server.go:171: SetStateStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:176: SetDirectiveCaptureService 0.0% +github.com/thebtf/engram/internal/mcp/server.go:181: SetBehavioralRulesStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:186: SetRuleGovernanceStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:191: SetRuleInjectionTelemetryStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:195: SetPromotionStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:199: SetGraphStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:204: SetNodesStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:211: SetAuditStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:216: SetPurgeStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:222: SetCandidateStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:228: SetSnapshotStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:234: SetBulkFacade 0.0% +github.com/thebtf/engram/internal/mcp/server.go:240: setTestAuditWriter 0.0% +github.com/thebtf/engram/internal/mcp/server.go:246: setTestMemoryEditor 0.0% +github.com/thebtf/engram/internal/mcp/server.go:252: setTestMemorySignificanceUpdater 0.0% +github.com/thebtf/engram/internal/mcp/server.go:260: SetWriteLintOrchestrator 0.0% +github.com/thebtf/engram/internal/mcp/server.go:269: SetRedactionRules 0.0% +github.com/thebtf/engram/internal/mcp/server.go:274: SetEmbeddingStores 0.0% +github.com/thebtf/engram/internal/mcp/server.go:282: SetRerankClient 0.0% +github.com/thebtf/engram/internal/mcp/server.go:290: SetStatsDB 0.0% +github.com/thebtf/engram/internal/mcp/server.go:297: HandleRequest 0.0% +github.com/thebtf/engram/internal/mcp/server.go:303: ListTools 0.0% +github.com/thebtf/engram/internal/mcp/server.go:332: Version 0.0% +github.com/thebtf/engram/internal/mcp/server.go:383: Run 0.0% +github.com/thebtf/engram/internal/mcp/server.go:427: handleRequest 0.0% +github.com/thebtf/engram/internal/mcp/server.go:461: handleNotification 0.0% +github.com/thebtf/engram/internal/mcp/server.go:473: handleInitialize 0.0% +github.com/thebtf/engram/internal/mcp/server.go:496: buildInstructions 0.0% +github.com/thebtf/engram/internal/mcp/server.go:660: storeMemoryTool 0.0% +github.com/thebtf/engram/internal/mcp/server.go:712: recallMemoryTool 0.0% +github.com/thebtf/engram/internal/mcp/server.go:805: primaryTools 0.0% +github.com/thebtf/engram/internal/mcp/server.go:942: handleToolsList 0.0% +github.com/thebtf/engram/internal/mcp/server.go:1612: handleToolsCall 0.0% +github.com/thebtf/engram/internal/mcp/server.go:1644: sanitizeToolCallArgs 0.0% +github.com/thebtf/engram/internal/mcp/server.go:1656: callTool 0.0% +github.com/thebtf/engram/internal/mcp/server.go:1874: sendResponse 0.0% +github.com/thebtf/engram/internal/mcp/server.go:1884: sendError 0.0% +github.com/thebtf/engram/internal/mcp/server.go:1896: handleFindSimilarObservations 0.0% +github.com/thebtf/engram/internal/mcp/server.go:1927: handleGetMemoryStats 0.0% +github.com/thebtf/engram/internal/mcp/server.go:2055: handleBackfillStatus 0.0% +github.com/thebtf/engram/internal/mcp/server.go:2071: handleCheckSystemHealth 0.0% +github.com/thebtf/engram/internal/mcp/server.go:2216: handleAnalyzeSearchPatterns 0.0% +github.com/thebtf/engram/internal/mcp/server.go:2246: handleSearchSessions 0.0% +github.com/thebtf/engram/internal/mcp/server.go:2251: handleListSessions 0.0% +github.com/thebtf/engram/internal/mcp/tools_admin.go:18: buildAdminTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_admin.go:68: adminActionsForEnv 33.3% +github.com/thebtf/engram/internal/mcp/tools_admin.go:80: vnextEnabled 0.0% +github.com/thebtf/engram/internal/mcp/tools_admin.go:84: handleAdmin 0.0% +github.com/thebtf/engram/internal/mcp/tools_admin.go:120: handlePurgeProject 0.0% +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:27: ambientHintsEnabledFromEnv 0.0% +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:32: ambientHintsTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:48: handleGetAmbientHints 0.0% +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:86: normalizeAmbientHintsToolLimit 0.0% +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:96: ambientHintItems 0.0% +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:114: errMissingSessionID 0.0% +github.com/thebtf/engram/internal/mcp/tools_brief.go:31: handleGetMemoryBrief 0.0% +github.com/thebtf/engram/internal/mcp/tools_brief.go:107: memoryBriefUsesPrincipalScope 0.0% +github.com/thebtf/engram/internal/mcp/tools_brief.go:115: handlePrincipalMemoryBrief 0.0% +github.com/thebtf/engram/internal/mcp/tools_brief.go:259: truncateBriefContent 0.0% +github.com/thebtf/engram/internal/mcp/tools_brief.go:270: filterInjectionByScope 0.0% +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:25: bulkOpsTools 0.0% +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:95: handleBulkPromote 0.0% +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:154: handleBulkDelete 0.0% +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:211: handleBulkSupersede 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:31: candidateItemFromDomain 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:51: newCandidateReviewSnapshot 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:59: requireCandidateReviewSnapshot 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:68: candidateTools 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:165: handleListCandidates 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:208: handleGetCandidate 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:239: handlePromoteCandidate 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:348: handleRejectCandidate 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:402: handleSupersedeCandidate 0.0% +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:34: codeIntelEnabled 0.0% +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:42: SetCodeChunkStore 0.0% +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:48: codebaseSearchTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:79: codebaseStatusTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:100: handleCodebaseSearch 0.0% +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:194: handleCodebaseStatus 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:21: getVault 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:35: credentialStore 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:49: handleStoreCredential 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:130: handleGetCredential 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:192: handleListCredentials 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:243: handleDeleteCredential 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:302: handleVaultStatus 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:338: expandTagHierarchy 0.0% +github.com/thebtf/engram/internal/mcp/tools_directives.go:16: directivesCaptureEnabledFromEnv 0.0% +github.com/thebtf/engram/internal/mcp/tools_directives.go:20: rememberDirectiveTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_directives.go:38: currentDirectiveCaptureService 0.0% +github.com/thebtf/engram/internal/mcp/tools_directives.go:48: handleRememberDirective 0.0% +github.com/thebtf/engram/internal/mcp/tools_directives.go:72: parseRememberDirectiveArgs 0.0% +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:10: handleDocsConsolidated 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents.go:15: handleListCollections 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents.go:61: handleListDocuments 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents.go:121: handleGetDocument 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents.go:165: handleRemoveDocument 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents.go:197: handleIngestDocument 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents.go:235: handleSearchCollection 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:15: handleDocCreate 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:61: handleDocRead 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:117: handleDocUpdate 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:122: handleDocList 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:175: handleDocHistory 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:232: handleDocComment 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:19: SetExperienceProvider 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:23: experienceHistoryTools 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:40: experienceHistoryReadSchema 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:65: experienceHistoryDetailSchema 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:82: experienceHistoryTriggerEnum 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:91: handleExperienceHistoryRead 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:103: handleExperienceHistoryDetail 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:115: parseExperienceHistoryReadArgs 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:142: parseExperienceHistoryDetailArgs 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:157: experienceHistoryTriggersFromArgs 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:180: marshalExperienceHistory 0.0% +github.com/thebtf/engram/internal/mcp/tools_feedback.go:12: handleFeedbackConsolidated 0.0% +github.com/thebtf/engram/internal/mcp/tools_feedback.go:36: handleSetSessionOutcome 0.0% +github.com/thebtf/engram/internal/mcp/tools_governance.go:27: governanceTools 0.0% +github.com/thebtf/engram/internal/mcp/tools_governance.go:98: handleListSnapshots 0.0% +github.com/thebtf/engram/internal/mcp/tools_governance.go:167: handleRollbackSnapshot 0.0% +github.com/thebtf/engram/internal/mcp/tools_governance.go:215: handlePinSnapshot 0.0% +github.com/thebtf/engram/internal/mcp/tools_governance.go:258: handleRedactionRulesStatus 0.0% +github.com/thebtf/engram/internal/mcp/tools_governance.go:284: resolveGovernanceActor 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:64: handleGraph 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:100: graphAddEdge 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:216: mcpGraphEndpointExists 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:243: mcpGraphEdgeAlreadyExists 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:276: graphAddNode 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:317: graphRemoveEdge 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:332: graphGetEdges 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:397: filterEdgesByNodeType 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:457: graphTraverse 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:480: graphFindPath 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:502: graphSynonyms 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:23: graphCreateEdgeWithGuards 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:80: graphEndpointExistsWithGuards 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:114: graphDuplicateEdgeExists 0.0% +github.com/thebtf/engram/internal/mcp/tools_ingest.go:25: handleIngest 0.0% +github.com/thebtf/engram/internal/mcp/tools_ingest.go:43: ingestDocument 0.0% +github.com/thebtf/engram/internal/mcp/tools_instincts.go:20: handleImportInstincts 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:19: issuesToolSchema 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:109: validateIssueActionParams 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:143: handleIssues 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:189: resolveSourceProject 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:205: handleIssueCreate 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:250: handleIssueList 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:311: handleIssueGet 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:344: handleIssueUpdate 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:382: handleIssueComment 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:408: handleIssueReopen 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:425: handleIssueClose 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:22: handleLifecycle 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:48: lifecycleInfo 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:87: lifecyclePromote 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:118: lifecycleDemote 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:149: lifecycleSetConfidence 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:172: lifecycleSetDefeasibility 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:191: lifecycleSleepStatus 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:197: lifecycleDecayPreview 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:233: marshalJSON 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:35: vnextFEnabled 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:42: isValidPrivacyScope 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:54: derivePrivacyScopeFromLegacy 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:82: deriveLegacyScopeFromPrivacy 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:93: applyPrincipalMemoryMetadata 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:135: addPrincipalMemoryFields 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:161: newScopedWriteLintMemoryStore 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:172: writeLintVisibilityCaller 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:186: writeLintVisibilityOptions 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:192: scopedWriteLintMemoryStore 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:202: filterVisibleWriteGateCandidates 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:214: domainManageAllowed 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:218: List 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:272: writeLintVisibilityFetchLimit 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:286: Get 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:297: Create 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:301: Update 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:305: MarkSuperseded 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:319: effectiveMemoryEditor 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:329: isValidStoreObservationType 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:354: handleStoreMemory 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1111: handleEditMemory 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1218: computeTTLDays 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1258: truncateTitle 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1270: keepRecallMemory 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1280: keepRecallMemoryFilters 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1342: handleRecallMemory 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1690: staleAdvisory 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1700: marshalWithStaleAdvisory 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1727: Rank 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1751: handleRecallMemoryHybrid 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:2252: handleRateMemory 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:2281: handleSuppressMemory 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:17: SetDomainRegistryService 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:21: checkDomainWriteMCP 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:43: addDomainWriteDecisionFields 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:51: marshalStoreMemoryAugmented 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:26: newMemoryStoreSignificanceUpdater 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:33: s6OutcomeEnabledFromEnv 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:37: effectiveMemorySignificanceUpdater 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:47: currentMemorySignificanceUpdater 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:58: rateMemorySignificanceTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:74: handleRateMemorySignificance 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:109: RateMemorySignificance 0.0% +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:18: s2MetaMemoryEnabled 0.0% +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:22: knowAboutTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:39: handleKnowAbout 0.0% +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:104: parseKnowAboutLimit 0.0% +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:118: summarizeMetaIndexTags 0.0% +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:153: summarizeMetaIndexDateRange 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:23: SetPrincipalMemoryQueryService 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:27: principalMemoryQueryTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:52: handleQueryPrincipalMemory 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:134: principalMemoryQueryCaller 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:149: parsePrincipalMemoryQueryLimit 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:160: principalMemoryQueryText 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:167: parsePrincipalMemoryQueryVisibility 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:179: parsePrincipalMemoryQueryOffset 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:190: parsePrincipalMemoryQueryInt 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:215: parsePrincipalMemoryQueryBool 0.0% +github.com/thebtf/engram/internal/mcp/tools_recall.go:28: handleRecall 0.0% +github.com/thebtf/engram/internal/mcp/tools_recall.go:125: parseRecallIncludedPrincipals 0.0% +github.com/thebtf/engram/internal/mcp/tools_recall.go:165: appendRecallIncludedPrincipalMemories 0.0% +github.com/thebtf/engram/internal/mcp/tools_recall.go:223: recallIncludeTargetMatchesCaller 0.0% +github.com/thebtf/engram/internal/mcp/tools_recall.go:231: recallPrincipalQueryItemToMemory 0.0% +github.com/thebtf/engram/internal/mcp/tools_recall.go:247: handleRecallSearch 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:20: currentReviewLoopCandidateLister 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:30: reviewLoopCandidateTools 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:65: reviewLoopReadSchema 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:78: reviewPacketIDSchema 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:91: handleReviewMetricsRead 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:110: handleReviewQueueRead 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:140: handleReviewPacketDetail 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:151: handleReviewPacketPreviewAction 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:167: handleReviewPacketApplyAction 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:189: parseReviewLoopReadArgs 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:212: reviewLoopMCPPacketTypeSupported 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:217: reviewLoopActionFromArgs 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:225: reviewLoopReasonFromArgs 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:233: loadReviewPacketCandidate 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:256: applyReviewPacketPreserve 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:278: applyReviewPacketSuppress 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:296: reviewLoopMemoryFromCandidate 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:320: filterRiskyMCPReviewCandidates 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:330: marshalReviewLoop 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:17: ruleGovernanceReadTools 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:126: handleRuleGovernanceHealth 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:176: handleRuleGovernanceQueue 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:233: handleRuleGovernanceSnapshots 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:278: handleRuleGovernanceUsefulness 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:338: handleRuleGovernanceTransition 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:373: handleRuleGovernancePinSnapshot 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:406: handleRuleGovernanceRollback 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:483: requireRuleGovernanceReadAccess 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:495: requireRuleGovernanceProjectOrAdmin 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:505: ruleGovernanceCallerIsAdmin 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:510: requireRuleGovernanceAdminAccess 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:518: redactRuleGovernanceEvidenceHandles 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:535: redactRuleGovernanceEvidenceHandle 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:553: ruleGovernanceEvidenceHandleHasSensitiveText 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:559: isCanonicalRuleGovernanceEvidenceHandle 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:580: isSafeRuleGovernanceEvidenceID 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:594: parseRuleGovernanceTransitionRequest 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:604: parseRuleGovernanceSince 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:623: boundedRuleGovernanceLimit 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:634: formatRuleGovernanceTime 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:641: formatRuleGovernanceTimePtr 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:649: stringRuleCandidateStatusCounts 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:657: stringRuleVersionStateCounts 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:665: stringRuleArbiterRunStatusCounts 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:673: stringRuleInjectionEventTypeCounts 0.0% +github.com/thebtf/engram/internal/mcp/tools_rules.go:17: handleStoreRule 0.0% +github.com/thebtf/engram/internal/mcp/tools_rules.go:133: handleListRules 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:22: handleSettingsConsolidated 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:51: SetSettingsStore 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:57: settingsStore 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:67: isSecretSettingKey 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:74: requireAdmin 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:85: handleSetSetting 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:145: handleGetSetting 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:181: handleListSettings 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:216: handleDeleteSetting 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:35: resumeScopesFromFields 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:52: stateTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:82: setStateTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:142: handleGetState 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:219: handleSetState 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:274: decodeSessionStateForWrite 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:292: validateSessionStateBudget 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:303: validateNativeResumePacket 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:349: decodeProjectStateForWrite 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:364: requireStateObject 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:383: requireNestedObject 0.0% +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:10: handleStoreConsolidated 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:21: SetTemporalTruthProvider 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:25: temporalTruthEnabledFromEnv 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:30: temporalTruthTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:39: temporalTruthRefreshTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:48: temporalTruthRefreshSchema 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:58: temporalTruthSchema 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:72: currentTemporalTruthProvider 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:82: handleTemporalTruth 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:102: handleTemporalTruthRefresh 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:122: parseTemporalTruthArgs 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:151: parseTemporalTruthRefreshProject 0.0% +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:10: handleVaultConsolidated 0.0% +total: (statements) 0.1% diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/summary.json b/.agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/summary.json new file mode 100644 index 00000000..f17c6e6f --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/parent-ambient-true-false-green/summary.json @@ -0,0 +1,64 @@ +{ + "schema_version": 1, + "gate": "release-gates-foundation", + "run_id": "parent-ambient-true-false-green", + "started_at": "2026-07-11T01:00:09.7195099+00:00", + "finished_at": "2026-07-11T01:00:24.7128368+00:00", + "duration_seconds": 14.993, + "verdict": "PASS", + "counts": { + "requested_repeats": 1, + "completed_repeats": 1, + "passed_repeats": 1, + "failed_repeats": 0, + "child_commands": 16, + "nonzero_child_commands": 0 + }, + "packages": [ + "./internal/mcp" + ], + "run_pattern": "^TestEC_F1_TagDerivedBackfill_T007$", + "coverage_policy": "Targeted", + "connection_budget": 20, + "race": false, + "database_dsn": "REDACTED_DATABASE_DSN", + "environment": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\parent-ambient-true-false-green\\environment.json", + "commands": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\parent-ambient-true-false-green\\commands.json", + "repeats": [ + { + "repeat": 1, + "verdict": "PASS", + "database": "engram_prc_rg_test_ec4161b3fdcd0ac8_r1", + "schema": "public", + "database_schema_identity": "engram_prc_rg_test_ec4161b3fdcd0ac8_r1.public", + "database_dsn": "REDACTED_DATABASE_DSN", + "database_create_confirmed": true, + "sequential_execution": { + "package_parallelism": 1, + "test_parallelism": 1 + }, + "race": false, + "connection_budget": 20, + "server_sessions_before": 6, + "server_sessions_after": 6, + "sessions_before": 0, + "sessions_after": 0, + "go_test_exit": 0, + "json_parser_exit": 0, + "coverage_policy": "Targeted", + "coverage_exit": 0, + "cleanup_exit": 0, + "cleanup_status": "PASS", + "required_session_start_execution": { + "schema_version": 1, + "verdict": "NOT_APPLICABLE", + "reason": "only an unfiltered canonical ./... run requires the 12-test session-start execution proof" + }, + "cleanup_summary": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\parent-ambient-true-false-green\\repeat-01\\cleanup\\cleanup.json", + "errors": [], + "artifact_directory": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\parent-ambient-true-false-green\\repeat-01" + } + ], + "errors": [], + "artifact_directory": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\parent-ambient-true-false-green" +} diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/commands.json b/.agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/commands.json new file mode 100644 index 00000000..2ec8267a --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/commands.json @@ -0,0 +1,444 @@ +[ + { + "name": "go-version", + "executable": "C:\\Program Files\\Go\\bin\\go.exe", + "arguments": [ + "version" + ], + "environment_keys": [], + "command": "C:\\Program Files\\Go\\bin\\go.exe version", + "started_at": "2026-07-11T00:55:50.4248591+00:00", + "finished_at": "2026-07-11T00:55:50.6303477+00:00", + "duration_seconds": 0.205, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\parent-original-red\\go-version.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\parent-original-red\\go-version.stderr.log" + }, + { + "name": "postgres-container-identity", + "executable": "docker", + "arguments": [ + "inspect", + "--format", + "{{.Name}}|{{.Config.Image}}|{{.Image}}|{{.State.Running}}", + "engram-prc-postgres" + ], + "environment_keys": [], + "command": "docker inspect --format {{.Name}}|{{.Config.Image}}|{{.Image}}|{{.State.Running}} engram-prc-postgres", + "started_at": "2026-07-11T00:55:50.6840195+00:00", + "finished_at": "2026-07-11T00:55:50.9380590+00:00", + "duration_seconds": 0.254, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\parent-original-red\\postgres-container-identity.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\parent-original-red\\postgres-container-identity.stderr.log" + }, + { + "name": "postgres-server-identity", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT json_build_object('server_version', current_setting('server_version'), 'server_version_num', current_setting('server_version_num'), 'version', version(), 'max_connections', current_setting('max_connections'), 'superuser_reserved_connections', current_setting('superuser_reserved_connections'), 'reserved_connections', COALESCE(NULLIF(current_setting('reserved_connections', true), ''), '0'), 'current_connections', (SELECT count(*)::text FROM pg_stat_activity), 'database', current_database(), 'schema', current_schema(), 'user', current_user)::text;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT json_build_object('server_version', current_setting('server_version'), 'server_version_num', current_setting('server_version_num'), 'version', version(), 'max_connections', current_setting('max_connections'), 'superuser_reserved_connections', current_setting('superuser_reserved_connections'), 'reserved_connections', COALESCE(NULLIF(current_setting('reserved_connections', true), ''), '0'), 'current_connections', (SELECT count(*)::text FROM pg_stat_activity), 'database', current_database(), 'schema', current_schema(), 'user', current_user)::text;", + "started_at": "2026-07-11T00:55:50.9484938+00:00", + "finished_at": "2026-07-11T00:55:51.3030798+00:00", + "duration_seconds": 0.355, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\parent-original-red\\postgres-server-identity.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\parent-original-red\\postgres-server-identity.stderr.log" + }, + { + "name": "repeat-1-create-database", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "CREATE DATABASE \"engram_prc_rg_test_9d26ac76f6cc9efa_r1\" OWNER \"engram\";" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c CREATE DATABASE \"engram_prc_rg_test_9d26ac76f6cc9efa_r1\" OWNER \"engram\";", + "started_at": "2026-07-11T00:55:51.3338875+00:00", + "finished_at": "2026-07-11T00:55:51.7388242+00:00", + "duration_seconds": 0.405, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\parent-original-red\\repeat-01\\create-database.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\parent-original-red\\repeat-01\\create-database.stderr.log" + }, + { + "name": "repeat-1-create-pgvector", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "engram_prc_rg_test_9d26ac76f6cc9efa_r1", + "-At", + "-F", + "|", + "-c", + "CREATE EXTENSION IF NOT EXISTS vector WITH SCHEMA public;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d engram_prc_rg_test_9d26ac76f6cc9efa_r1 -At -F | -c CREATE EXTENSION IF NOT EXISTS vector WITH SCHEMA public;", + "started_at": "2026-07-11T00:55:51.7431173+00:00", + "finished_at": "2026-07-11T00:55:52.2041917+00:00", + "duration_seconds": 0.461, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\parent-original-red\\repeat-01\\create-pgvector.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\parent-original-red\\repeat-01\\create-pgvector.stderr.log" + }, + { + "name": "repeat-1-database-identity", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "engram_prc_rg_test_9d26ac76f6cc9efa_r1", + "-At", + "-F", + "|", + "-c", + "SELECT json_build_object('database', current_database(), 'schema', current_schema(), 'server_version', current_setting('server_version'), 'user', current_user)::text;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d engram_prc_rg_test_9d26ac76f6cc9efa_r1 -At -F | -c SELECT json_build_object('database', current_database(), 'schema', current_schema(), 'server_version', current_setting('server_version'), 'user', current_user)::text;", + "started_at": "2026-07-11T00:55:52.2070435+00:00", + "finished_at": "2026-07-11T00:55:52.5734833+00:00", + "duration_seconds": 0.366, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\parent-original-red\\repeat-01\\database-identity.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\parent-original-red\\repeat-01\\database-identity.stderr.log" + }, + { + "name": "repeat-1-pg-stat-before", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT COALESCE(json_agg(row_to_json(s)), '[]'::json)::text FROM (SELECT pid, usename, datname, state, backend_type, application_name, client_addr::text AS client_addr, wait_event_type, wait_event, query_start FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_9d26ac76f6cc9efa_r1' ORDER BY pid) AS s;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT COALESCE(json_agg(row_to_json(s)), '[]'::json)::text FROM (SELECT pid, usename, datname, state, backend_type, application_name, client_addr::text AS client_addr, wait_event_type, wait_event, query_start FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_9d26ac76f6cc9efa_r1' ORDER BY pid) AS s;", + "started_at": "2026-07-11T00:55:52.5777918+00:00", + "finished_at": "2026-07-11T00:55:52.9524124+00:00", + "duration_seconds": 0.375, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\parent-original-red\\repeat-01\\pg-stat-activity-before.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\parent-original-red\\repeat-01\\pg-stat-activity-before.stderr.log" + }, + { + "name": "repeat-1-server-connection-count-before", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT count(*) FROM pg_stat_activity;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT count(*) FROM pg_stat_activity;", + "started_at": "2026-07-11T00:55:52.9548136+00:00", + "finished_at": "2026-07-11T00:55:53.3204073+00:00", + "duration_seconds": 0.366, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\parent-original-red\\repeat-01\\server-connection-count-before.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\parent-original-red\\repeat-01\\server-connection-count-before.stderr.log" + }, + { + "name": "repeat-1-connection-count-before", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT count(*) FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_9d26ac76f6cc9efa_r1';" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT count(*) FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_9d26ac76f6cc9efa_r1';", + "started_at": "2026-07-11T00:55:53.3317730+00:00", + "finished_at": "2026-07-11T00:55:53.8494255+00:00", + "duration_seconds": 0.518, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\parent-original-red\\repeat-01\\connection-count-before.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\parent-original-red\\repeat-01\\connection-count-before.stderr.log" + }, + { + "name": "repeat-1-go-test", + "executable": "C:\\Program Files\\Go\\bin\\go.exe", + "arguments": [ + "test", + "-json", + "-p", + "1", + "-parallel", + "1", + "-count=1", + "-timeout", + "30m", + "-covermode=atomic", + "-coverprofile=D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\parent-original-red\\repeat-01\\coverage.out", + "-run", + "^TestEC_F1_TagDerivedBackfill_T007$", + "./internal/mcp" + ], + "environment_keys": [ + "DATABASE_DSN", + "DATABASE_MAX_CONNS", + "ENGRAM_RELEASE_GATE_REPEAT", + "ENGRAM_RELEASE_GATE_RUN_ID", + "ENGRAM_TEST_DSN", + "TEST_DATABASE_DSN" + ], + "command": "C:\\Program Files\\Go\\bin\\go.exe test -json -p 1 -parallel 1 -count=1 -timeout 30m -covermode=atomic -coverprofile=D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\parent-original-red\\repeat-01\\coverage.out -run ^TestEC_F1_TagDerivedBackfill_T007$ ./internal/mcp", + "started_at": "2026-07-11T00:55:53.8567276+00:00", + "finished_at": "2026-07-11T00:56:09.4377437+00:00", + "duration_seconds": 15.581, + "exit_code": 1, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\parent-original-red\\repeat-01\\go-test.stdout.jsonl", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\parent-original-red\\repeat-01\\go-test.stderr.log" + }, + { + "name": "repeat-1-assert-go-test-json", + "executable": "C:\\Program Files\\PowerShell\\7\\pwsh.exe", + "arguments": [ + "-NoProfile", + "-File", + "D:\\Dev\\engram\\.w\\t007-r1-parent-red\\scripts\\production-gates\\assert-go-test-json.ps1", + "-InputPath", + "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\parent-original-red\\repeat-01\\go-test.stdout.jsonl", + "-SummaryPath", + "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\parent-original-red\\repeat-01\\go-test-summary.json", + "-FailOnUnexpectedSkip" + ], + "environment_keys": [], + "command": "C:\\Program Files\\PowerShell\\7\\pwsh.exe -NoProfile -File D:\\Dev\\engram\\.w\\t007-r1-parent-red\\scripts\\production-gates\\assert-go-test-json.ps1 -InputPath D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\parent-original-red\\repeat-01\\go-test.stdout.jsonl -SummaryPath D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\parent-original-red\\repeat-01\\go-test-summary.json -FailOnUnexpectedSkip", + "started_at": "2026-07-11T00:56:09.4420630+00:00", + "finished_at": "2026-07-11T00:56:10.1275710+00:00", + "duration_seconds": 0.686, + "exit_code": 1, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\parent-original-red\\repeat-01\\assert-go-test-json.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\parent-original-red\\repeat-01\\assert-go-test-json.stderr.log" + }, + { + "name": "repeat-1-targeted-coverage-report", + "executable": "C:\\Program Files\\Go\\bin\\go.exe", + "arguments": [ + "tool", + "cover", + "-func=D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\parent-original-red\\repeat-01\\coverage.out" + ], + "environment_keys": [], + "command": "C:\\Program Files\\Go\\bin\\go.exe tool cover -func=D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\parent-original-red\\repeat-01\\coverage.out", + "started_at": "2026-07-11T00:56:10.1326483+00:00", + "finished_at": "2026-07-11T00:56:10.5844994+00:00", + "duration_seconds": 0.452, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\parent-original-red\\repeat-01\\targeted-coverage.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\parent-original-red\\repeat-01\\targeted-coverage.stderr.log" + }, + { + "name": "repeat-1-pg-stat-after", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT COALESCE(json_agg(row_to_json(s)), '[]'::json)::text FROM (SELECT pid, usename, datname, state, backend_type, application_name, client_addr::text AS client_addr, wait_event_type, wait_event, query_start FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_9d26ac76f6cc9efa_r1' ORDER BY pid) AS s;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT COALESCE(json_agg(row_to_json(s)), '[]'::json)::text FROM (SELECT pid, usename, datname, state, backend_type, application_name, client_addr::text AS client_addr, wait_event_type, wait_event, query_start FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_9d26ac76f6cc9efa_r1' ORDER BY pid) AS s;", + "started_at": "2026-07-11T00:56:10.5854680+00:00", + "finished_at": "2026-07-11T00:56:10.9386460+00:00", + "duration_seconds": 0.353, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\parent-original-red\\repeat-01\\pg-stat-activity-after.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\parent-original-red\\repeat-01\\pg-stat-activity-after.stderr.log" + }, + { + "name": "repeat-1-server-connection-count-after", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT count(*) FROM pg_stat_activity;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT count(*) FROM pg_stat_activity;", + "started_at": "2026-07-11T00:56:10.9409392+00:00", + "finished_at": "2026-07-11T00:56:11.2962264+00:00", + "duration_seconds": 0.355, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\parent-original-red\\repeat-01\\server-connection-count-after.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\parent-original-red\\repeat-01\\server-connection-count-after.stderr.log" + }, + { + "name": "repeat-1-connection-count-after", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT count(*) FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_9d26ac76f6cc9efa_r1';" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT count(*) FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_9d26ac76f6cc9efa_r1';", + "started_at": "2026-07-11T00:56:11.2989168+00:00", + "finished_at": "2026-07-11T00:56:11.6627791+00:00", + "duration_seconds": 0.364, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\parent-original-red\\repeat-01\\connection-count-after.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\parent-original-red\\repeat-01\\connection-count-after.stderr.log" + }, + { + "name": "repeat-1-cleanup", + "executable": "C:\\Program Files\\PowerShell\\7\\pwsh.exe", + "arguments": [ + "-NoProfile", + "-File", + "D:\\Dev\\engram\\.w\\t007-r1-parent-red\\scripts\\production-gates\\cleanup-db-sessions.ps1", + "-DatabaseName", + "engram_prc_rg_test_9d26ac76f6cc9efa_r1", + "-SchemaName", + "public", + "-ArtifactRoot", + "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\parent-original-red\\repeat-01", + "-RunId", + "parent-original-red-repeat-1", + "-PostgresContainer", + "engram-prc-postgres" + ], + "environment_keys": [ + "ENGRAM_TEST_ADMIN_DSN" + ], + "command": "C:\\Program Files\\PowerShell\\7\\pwsh.exe -NoProfile -File D:\\Dev\\engram\\.w\\t007-r1-parent-red\\scripts\\production-gates\\cleanup-db-sessions.ps1 -DatabaseName engram_prc_rg_test_9d26ac76f6cc9efa_r1 -SchemaName public -ArtifactRoot D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\parent-original-red\\repeat-01 -RunId parent-original-red-repeat-1 -PostgresContainer engram-prc-postgres", + "started_at": "2026-07-11T00:56:11.6657516+00:00", + "finished_at": "2026-07-11T00:56:14.9035181+00:00", + "duration_seconds": 3.238, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\parent-original-red\\repeat-01\\cleanup-process.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\parent-original-red\\repeat-01\\cleanup-process.stderr.log" + } +] diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/environment.json b/.agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/environment.json new file mode 100644 index 00000000..679d0696 --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/environment.json @@ -0,0 +1,52 @@ +{ + "schema_version": 1, + "run_id": "parent-original-red", + "timestamp": "2026-07-11T00:55:50.4077959+00:00", + "go_version": "go version go1.25.11 windows/amd64", + "postgres": { + "declared_image": "pgvector/pgvector:pg17", + "container": { + "name": "/engram-prc-postgres", + "configured_image": "pgvector/pgvector:pg17", + "image_id": "sha256:feb68f4f15446397d8cac7f4fe48fe4586de83160d1fc48b46283312d1a33966", + "running": true + }, + "server": { + "server_version": "17.10 (Debian 17.10-1.pgdg12+1)", + "server_version_num": "170010", + "version": "PostgreSQL 17.10 (Debian 17.10-1.pgdg12+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 12.2.0-14+deb12u1) 12.2.0, 64-bit", + "max_connections": "100", + "superuser_reserved_connections": "3", + "reserved_connections": "0", + "current_connections": "6", + "database": "postgres", + "schema": "public", + "user": "engram" + }, + "admin_dsn": "postgresql://engram:REDACTED@127.0.0.1:55432/postgres?sslmode=disable" + }, + "packages": [ + "./internal/mcp" + ], + "run_pattern": "^TestEC_F1_TagDerivedBackfill_T007$", + "repeat": 1, + "fail_on_unexpected_skip": true, + "allowed_skip_identities": [], + "coverage_policy": "Targeted", + "connection_budget": 20, + "race": false, + "require_session_start_execution": false, + "required_session_start_test_count": 12, + "sequential_execution": { + "go_package_parallelism": 1, + "go_test_parallelism": 1, + "database_max_connections": 20 + }, + "govulncheck_policy": { + "authoritative": [ + "source scan with tests", + "unstripped binary scan" + ], + "non_authoritative": "stripped binary scan (module-level fallback when symbols are absent)" + } +} diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/go-version.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/go-version.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/go-version.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/go-version.stdout.log new file mode 100644 index 00000000..a857be3f --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/go-version.stdout.log @@ -0,0 +1 @@ +go version go1.25.11 windows/amd64 diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/postgres-container-identity.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/postgres-container-identity.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/postgres-container-identity.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/postgres-container-identity.stdout.log new file mode 100644 index 00000000..c110d492 --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/postgres-container-identity.stdout.log @@ -0,0 +1 @@ +/engram-prc-postgres|pgvector/pgvector:pg17|sha256:feb68f4f15446397d8cac7f4fe48fe4586de83160d1fc48b46283312d1a33966|true diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/postgres-server-identity.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/postgres-server-identity.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/postgres-server-identity.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/postgres-server-identity.stdout.log new file mode 100644 index 00000000..2e33d56e --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/postgres-server-identity.stdout.log @@ -0,0 +1 @@ +{"server_version" : "17.10 (Debian 17.10-1.pgdg12+1)", "server_version_num" : "170010", "version" : "PostgreSQL 17.10 (Debian 17.10-1.pgdg12+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 12.2.0-14+deb12u1) 12.2.0, 64-bit", "max_connections" : "100", "superuser_reserved_connections" : "3", "reserved_connections" : "0", "current_connections" : "6", "database" : "postgres", "schema" : "public", "user" : "engram"} diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/repeat-01/assert-go-test-json.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/repeat-01/assert-go-test-json.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/repeat-01/assert-go-test-json.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/repeat-01/assert-go-test-json.stdout.log new file mode 100644 index 00000000..43c7b76b --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/repeat-01/assert-go-test-json.stdout.log @@ -0,0 +1,2 @@ +go test JSON verdict=FAIL packages=1 tests=1 passed=0 failed=1 skipped=0 unexpected_skips=0 malformed=0 +summary=D:\Dev\engram\.w\t007-r1-checker\.agent\reviews\t007-r1-fresh-checker\evidence\parent-original-red\repeat-01\go-test-summary.json diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/repeat-01/cleanup-process.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/repeat-01/cleanup-process.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/repeat-01/cleanup-process.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/repeat-01/cleanup-process.stdout.log new file mode 100644 index 00000000..42bd04ae --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/repeat-01/cleanup-process.stdout.log @@ -0,0 +1,2 @@ +cleanup verdict=PASS database=engram_prc_rg_test_9d26ac76f6cc9efa_r1 schema=public terminated_sessions=0 remaining_database_count=0 +summary=D:\Dev\engram\.w\t007-r1-checker\.agent\reviews\t007-r1-fresh-checker\evidence\parent-original-red\repeat-01\cleanup\cleanup.json diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/repeat-01/cleanup/cleanup.json b/.agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/repeat-01/cleanup/cleanup.json new file mode 100644 index 00000000..2705e693 --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/repeat-01/cleanup/cleanup.json @@ -0,0 +1,170 @@ +{ + "schema_version": 1, + "run_id": "parent-original-red-repeat-1", + "timestamp": "2026-07-11T00:56:14.8476994+00:00", + "verdict": "PASS", + "database": "engram_prc_rg_test_9d26ac76f6cc9efa_r1", + "schema": "public", + "database_schema_identity": "engram_prc_rg_test_9d26ac76f6cc9efa_r1.public", + "admin_dsn": "postgresql://engram:REDACTED@127.0.0.1:55432/postgres?sslmode=disable", + "postgres_container": "engram-prc-postgres", + "cleanup_status": "PASS", + "cleanup_attempted": true, + "database_existed_before": true, + "absence_verified": true, + "terminated_sessions": 0, + "remaining_database_count": 0, + "commands": [ + { + "name": "database-exists-before-cleanup", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT count(*) FROM pg_database WHERE datname = 'engram_prc_rg_test_9d26ac76f6cc9efa_r1';" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT count(*) FROM pg_database WHERE datname = 'engram_prc_rg_test_9d26ac76f6cc9efa_r1';", + "started_at": "2026-07-11T00:56:12.2898743+00:00", + "finished_at": "2026-07-11T00:56:12.7020100+00:00", + "duration_seconds": 0.412, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\parent-original-red\\repeat-01\\cleanup\\database-exists-before.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\parent-original-red\\repeat-01\\cleanup\\database-exists-before.stderr.log" + }, + { + "name": "pg-stat-activity-before-cleanup", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT COALESCE(json_agg(row_to_json(s)), '[]'::json)::text FROM (SELECT pid, usename, datname, state, backend_type, application_name, client_addr::text AS client_addr, wait_event_type, wait_event, query_start FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_9d26ac76f6cc9efa_r1' ORDER BY pid) AS s;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT COALESCE(json_agg(row_to_json(s)), '[]'::json)::text FROM (SELECT pid, usename, datname, state, backend_type, application_name, client_addr::text AS client_addr, wait_event_type, wait_event, query_start FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_9d26ac76f6cc9efa_r1' ORDER BY pid) AS s;", + "started_at": "2026-07-11T00:56:12.7659751+00:00", + "finished_at": "2026-07-11T00:56:13.1941347+00:00", + "duration_seconds": 0.428, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\parent-original-red\\repeat-01\\cleanup\\pg-stat-activity-before.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\parent-original-red\\repeat-01\\cleanup\\pg-stat-activity-before.stderr.log" + }, + { + "name": "terminate-database-sessions", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT COALESCE(json_agg(row_to_json(s)), '[]'::json)::text FROM (SELECT pid, pg_terminate_backend(pid) AS terminated FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_9d26ac76f6cc9efa_r1' AND pid <> pg_backend_pid() ORDER BY pid) AS s;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT COALESCE(json_agg(row_to_json(s)), '[]'::json)::text FROM (SELECT pid, pg_terminate_backend(pid) AS terminated FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_9d26ac76f6cc9efa_r1' AND pid <> pg_backend_pid() ORDER BY pid) AS s;", + "started_at": "2026-07-11T00:56:13.1985008+00:00", + "finished_at": "2026-07-11T00:56:13.8237299+00:00", + "duration_seconds": 0.625, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\parent-original-red\\repeat-01\\cleanup\\terminate-sessions.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\parent-original-red\\repeat-01\\cleanup\\terminate-sessions.stderr.log" + }, + { + "name": "drop-fresh-database", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "DROP DATABASE IF EXISTS \"engram_prc_rg_test_9d26ac76f6cc9efa_r1\" WITH (FORCE);" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c DROP DATABASE IF EXISTS \"engram_prc_rg_test_9d26ac76f6cc9efa_r1\" WITH (FORCE);", + "started_at": "2026-07-11T00:56:13.8338145+00:00", + "finished_at": "2026-07-11T00:56:14.3708899+00:00", + "duration_seconds": 0.537, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\parent-original-red\\repeat-01\\cleanup\\drop-database.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\parent-original-red\\repeat-01\\cleanup\\drop-database.stderr.log" + }, + { + "name": "verify-database-absent", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT count(*) FROM pg_database WHERE datname = 'engram_prc_rg_test_9d26ac76f6cc9efa_r1';" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT count(*) FROM pg_database WHERE datname = 'engram_prc_rg_test_9d26ac76f6cc9efa_r1';", + "started_at": "2026-07-11T00:56:14.3753989+00:00", + "finished_at": "2026-07-11T00:56:14.8394054+00:00", + "duration_seconds": 0.464, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\parent-original-red\\repeat-01\\cleanup\\verify-database-absent.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\parent-original-red\\repeat-01\\cleanup\\verify-database-absent.stderr.log" + } + ], + "errors": [] +} diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/repeat-01/cleanup/database-exists-before.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/repeat-01/cleanup/database-exists-before.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/repeat-01/cleanup/database-exists-before.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/repeat-01/cleanup/database-exists-before.stdout.log new file mode 100644 index 00000000..d00491fd --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/repeat-01/cleanup/database-exists-before.stdout.log @@ -0,0 +1 @@ +1 diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/repeat-01/cleanup/drop-database.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/repeat-01/cleanup/drop-database.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/repeat-01/cleanup/drop-database.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/repeat-01/cleanup/drop-database.stdout.log new file mode 100644 index 00000000..ca12dce0 --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/repeat-01/cleanup/drop-database.stdout.log @@ -0,0 +1 @@ +DROP DATABASE diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/repeat-01/cleanup/pg-stat-activity-before.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/repeat-01/cleanup/pg-stat-activity-before.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/repeat-01/cleanup/pg-stat-activity-before.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/repeat-01/cleanup/pg-stat-activity-before.stdout.log new file mode 100644 index 00000000..fe51488c --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/repeat-01/cleanup/pg-stat-activity-before.stdout.log @@ -0,0 +1 @@ +[] diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/repeat-01/cleanup/terminate-sessions.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/repeat-01/cleanup/terminate-sessions.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/repeat-01/cleanup/terminate-sessions.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/repeat-01/cleanup/terminate-sessions.stdout.log new file mode 100644 index 00000000..fe51488c --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/repeat-01/cleanup/terminate-sessions.stdout.log @@ -0,0 +1 @@ +[] diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/repeat-01/cleanup/verify-database-absent.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/repeat-01/cleanup/verify-database-absent.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/repeat-01/cleanup/verify-database-absent.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/repeat-01/cleanup/verify-database-absent.stdout.log new file mode 100644 index 00000000..573541ac --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/repeat-01/cleanup/verify-database-absent.stdout.log @@ -0,0 +1 @@ +0 diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/repeat-01/connection-count-after.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/repeat-01/connection-count-after.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/repeat-01/connection-count-after.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/repeat-01/connection-count-after.stdout.log new file mode 100644 index 00000000..573541ac --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/repeat-01/connection-count-after.stdout.log @@ -0,0 +1 @@ +0 diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/repeat-01/connection-count-before.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/repeat-01/connection-count-before.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/repeat-01/connection-count-before.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/repeat-01/connection-count-before.stdout.log new file mode 100644 index 00000000..573541ac --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/repeat-01/connection-count-before.stdout.log @@ -0,0 +1 @@ +0 diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/repeat-01/coverage.out b/.agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/repeat-01/coverage.out new file mode 100644 index 00000000..52335d8a --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/repeat-01/coverage.out @@ -0,0 +1,3472 @@ +mode: atomic +github.com/thebtf/engram/internal/mcp/audit_helpers.go:33.53,34.30 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:34.30,36.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:37.2,37.25 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:37.25,39.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:40.2,40.12 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:44.28,46.2 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:52.83,53.12 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:53.12,54.16 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:54.16,55.32 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:55.32,61.5 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:63.3,65.33 3 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:65.33,71.4 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:77.54,78.14 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:78.14,80.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:81.2,82.16 2 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:82.16,85.3 2 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:86.2,87.13 2 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:92.91,93.23 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:93.23,95.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:96.2,97.15 2 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:97.15,99.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:100.2,105.65 4 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:105.65,113.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:117.95,118.23 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:118.23,120.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:121.2,122.15 2 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:122.15,124.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:125.2,129.65 5 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:129.65,138.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:142.87,143.23 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:143.23,145.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:146.2,147.15 2 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:147.15,149.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:150.2,153.65 4 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:153.65,161.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:166.96,167.23 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:167.23,169.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:170.2,171.15 2 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:171.15,173.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:174.2,177.63 4 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:177.63,185.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:189.97,190.23 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:190.23,192.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:193.2,194.15 2 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:194.15,196.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:197.2,200.68 4 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:200.68,208.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:30.62,31.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:31.20,33.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:34.2,35.49 2 0 +github.com/thebtf/engram/internal/mcp/coerce.go:35.49,37.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:38.2,38.14 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:38.14,40.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:41.2,41.15 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:46.52,47.14 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:47.14,49.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:50.2,50.23 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:51.14,52.11 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:53.19,54.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:55.15,56.45 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:57.12,58.31 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:59.10,60.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:67.43,68.14 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:68.14,70.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:71.2,71.23 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:72.15,73.23 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:74.19,75.38 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:75.38,77.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:78.3,78.40 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:78.40,80.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:81.3,81.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:82.14,83.56 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:83.56,85.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:86.3,86.54 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:86.54,88.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:89.3,89.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:90.10,91.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:97.49,98.14 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:98.14,100.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:101.2,101.23 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:102.15,103.18 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:104.19,105.38 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:105.38,107.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:108.3,108.40 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:108.40,110.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:111.3,111.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:112.14,113.56 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:113.56,115.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:116.3,116.54 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:116.54,118.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:119.3,119.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:120.10,121.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:127.55,128.14 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:128.14,130.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:131.2,131.23 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:132.15,133.11 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:134.19,135.40 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:135.40,137.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:138.3,138.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:139.14,140.54 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:140.54,142.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:143.3,143.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:144.10,145.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:151.46,152.14 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:152.14,154.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:155.2,155.23 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:156.12,157.11 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:158.14,159.54 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:159.54,161.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:162.3,162.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:163.15,164.16 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:165.19,166.40 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:166.40,168.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:169.3,169.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:170.10,171.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:177.40,178.14 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:178.14,180.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:181.2,181.23 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:182.13,184.26 2 0 +github.com/thebtf/engram/internal/mcp/coerce.go:184.26,185.36 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:185.36,187.5 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:189.3,189.16 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:190.16,191.11 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:192.14,193.14 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:193.14,195.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:196.3,196.13 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:197.10,198.13 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:204.38,205.14 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:205.14,207.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:208.2,209.9 2 0 +github.com/thebtf/engram/internal/mcp/coerce.go:209.9,211.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:212.2,213.27 2 0 +github.com/thebtf/engram/internal/mcp/coerce.go:213.27,214.42 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:214.42,216.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:218.2,218.15 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:222.32,223.39 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:223.39,225.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:226.2,226.30 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:226.30,228.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:229.2,229.30 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:229.30,231.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:232.2,232.15 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:236.35,237.28 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:237.28,239.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:240.2,240.28 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:240.28,242.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:243.2,243.15 1 0 +github.com/thebtf/engram/internal/mcp/context.go:17.55,19.2 1 0 +github.com/thebtf/engram/internal/mcp/context.go:22.78,24.2 1 0 +github.com/thebtf/engram/internal/mcp/context.go:29.78,31.2 1 0 +github.com/thebtf/engram/internal/mcp/context.go:35.53,38.2 2 0 +github.com/thebtf/engram/internal/mcp/context.go:41.80,43.2 1 0 +github.com/thebtf/engram/internal/mcp/context.go:48.80,50.2 1 0 +github.com/thebtf/engram/internal/mcp/context.go:54.53,57.2 2 0 +github.com/thebtf/engram/internal/mcp/context.go:61.51,62.43 1 0 +github.com/thebtf/engram/internal/mcp/context.go:62.43,64.3 1 0 +github.com/thebtf/engram/internal/mcp/context.go:65.2,65.16 1 0 +github.com/thebtf/engram/internal/mcp/health.go:22.32,26.2 3 0 +github.com/thebtf/engram/internal/mcp/health.go:29.37,33.2 3 0 +github.com/thebtf/engram/internal/mcp/health.go:36.35,40.2 3 0 +github.com/thebtf/engram/internal/mcp/health.go:42.44,45.25 3 0 +github.com/thebtf/engram/internal/mcp/health.go:45.25,47.50 1 0 +github.com/thebtf/engram/internal/mcp/health.go:47.50,50.4 2 0 +github.com/thebtf/engram/internal/mcp/health.go:55.74,60.16 5 0 +github.com/thebtf/engram/internal/mcp/health.go:60.16,62.3 1 0 +github.com/thebtf/engram/internal/mcp/health.go:63.2,71.4 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:28.42,29.65 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:29.65,32.3 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:33.2,33.40 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:33.40,35.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:36.2,36.14 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:39.120,40.69 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:40.69,42.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:43.2,44.19 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:44.19,46.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:47.2,48.17 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:48.17,50.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:51.2,52.59 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:52.59,54.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:55.2,56.20 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:56.20,58.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:59.2,60.17 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:60.17,62.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:63.2,64.21 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:64.21,66.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:67.2,68.22 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:68.22,70.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:71.2,72.23 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:72.23,74.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:76.2,98.19 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:98.19,100.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:101.2,101.66 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:104.52,106.29 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:106.29,108.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:109.2,110.46 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:113.113,123.27 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:123.27,125.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:126.2,127.16 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:127.16,129.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:130.2,130.25 1 0 +github.com/thebtf/engram/internal/mcp/server.go:127.44,138.2 1 1 +github.com/thebtf/engram/internal/mcp/server.go:141.64,143.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:146.78,148.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:151.53,153.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:156.55,158.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:161.58,163.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:166.62,168.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:171.50,173.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:176.78,178.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:181.74,183.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:186.71,189.2 2 0 +github.com/thebtf/engram/internal/mcp/server.go:191.85,193.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:195.61,197.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:199.49,201.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:204.54,206.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:211.53,213.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:216.53,218.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:222.61,224.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:228.59,230.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:234.51,236.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:240.52,242.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:246.55,248.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:252.82,254.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:260.70,262.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:269.68,271.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:274.87,277.2 2 0 +github.com/thebtf/engram/internal/mcp/server.go:282.60,284.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:290.45,292.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:297.77,299.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:303.37,313.38 3 0 +github.com/thebtf/engram/internal/mcp/server.go:313.38,315.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:316.2,317.9 2 0 +github.com/thebtf/engram/internal/mcp/server.go:317.9,319.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:320.2,321.9 2 0 +github.com/thebtf/engram/internal/mcp/server.go:321.9,323.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:324.2,325.9 2 0 +github.com/thebtf/engram/internal/mcp/server.go:325.9,327.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:328.2,328.14 1 0 +github.com/thebtf/engram/internal/mcp/server.go:332.35,334.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:383.49,387.12 3 0 +github.com/thebtf/engram/internal/mcp/server.go:387.12,388.22 1 0 +github.com/thebtf/engram/internal/mcp/server.go:388.22,389.11 1 0 +github.com/thebtf/engram/internal/mcp/server.go:390.22,392.11 2 0 +github.com/thebtf/engram/internal/mcp/server.go:393.12,393.12 0 0 +github.com/thebtf/engram/internal/mcp/server.go:396.4,397.18 2 0 +github.com/thebtf/engram/internal/mcp/server.go:397.18,398.13 1 0 +github.com/thebtf/engram/internal/mcp/server.go:401.4,402.61 2 0 +github.com/thebtf/engram/internal/mcp/server.go:402.61,404.13 2 0 +github.com/thebtf/engram/internal/mcp/server.go:407.4,407.55 1 0 +github.com/thebtf/engram/internal/mcp/server.go:407.55,409.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:411.3,411.28 1 0 +github.com/thebtf/engram/internal/mcp/server.go:414.2,414.9 1 0 +github.com/thebtf/engram/internal/mcp/server.go:415.20,416.19 1 0 +github.com/thebtf/engram/internal/mcp/server.go:417.25,418.17 1 0 +github.com/thebtf/engram/internal/mcp/server.go:418.17,420.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:421.3,421.13 1 0 +github.com/thebtf/engram/internal/mcp/server.go:427.77,428.19 1 0 +github.com/thebtf/engram/internal/mcp/server.go:428.19,431.3 2 0 +github.com/thebtf/engram/internal/mcp/server.go:433.2,433.20 1 0 +github.com/thebtf/engram/internal/mcp/server.go:434.20,435.33 1 0 +github.com/thebtf/engram/internal/mcp/server.go:436.20,437.32 1 0 +github.com/thebtf/engram/internal/mcp/server.go:438.20,439.37 1 0 +github.com/thebtf/engram/internal/mcp/server.go:443.24,444.93 1 0 +github.com/thebtf/engram/internal/mcp/server.go:445.34,446.101 1 0 +github.com/thebtf/engram/internal/mcp/server.go:447.22,448.91 1 0 +github.com/thebtf/engram/internal/mcp/server.go:449.29,450.120 1 0 +github.com/thebtf/engram/internal/mcp/server.go:451.10,456.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:461.51,462.20 1 0 +github.com/thebtf/engram/internal/mcp/server.go:463.50,464.70 1 0 +github.com/thebtf/engram/internal/mcp/server.go:465.46,466.79 1 0 +github.com/thebtf/engram/internal/mcp/server.go:467.10,468.80 1 0 +github.com/thebtf/engram/internal/mcp/server.go:473.59,485.63 2 0 +github.com/thebtf/engram/internal/mcp/server.go:485.63,487.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:489.2,493.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:496.45,503.33 3 0 +github.com/thebtf/engram/internal/mcp/server.go:503.33,505.57 2 0 +github.com/thebtf/engram/internal/mcp/server.go:505.57,506.76 1 0 +github.com/thebtf/engram/internal/mcp/server.go:506.76,507.13 1 0 +github.com/thebtf/engram/internal/mcp/server.go:509.4,509.18 1 0 +github.com/thebtf/engram/internal/mcp/server.go:509.18,511.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:511.10,513.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:514.4,518.11 5 0 +github.com/thebtf/engram/internal/mcp/server.go:522.2,522.19 1 0 +github.com/thebtf/engram/internal/mcp/server.go:660.29,683.21 2 0 +github.com/thebtf/engram/internal/mcp/server.go:683.21,689.3 5 0 +github.com/thebtf/engram/internal/mcp/server.go:690.2,699.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:712.30,765.49 3 0 +github.com/thebtf/engram/internal/mcp/server.go:765.49,789.3 5 0 +github.com/thebtf/engram/internal/mcp/server.go:790.2,799.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:805.40,936.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:942.58,1048.35 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1048.35,1077.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1080.2,1080.33 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1080.33,1090.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1093.2,1093.26 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1093.26,1123.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1124.2,1124.80 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1124.80,1126.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1127.2,1127.55 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1127.55,1129.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1130.2,1130.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1130.38,1132.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1134.2,1134.25 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1134.25,1136.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1138.2,1138.33 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1138.33,1140.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1141.2,1141.69 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1141.69,1143.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1144.2,1144.75 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1144.75,1146.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1148.2,1148.27 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1148.27,1165.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1168.2,1168.76 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1168.76,1191.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1195.2,1195.48 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1195.48,1197.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1201.2,1201.47 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1201.47,1203.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1205.2,1205.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1205.38,1207.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1212.2,1212.21 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1212.21,1214.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1228.2,1228.51 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1228.51,1230.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1233.2,1233.56 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1233.56,1235.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1238.2,1238.71 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1238.71,1298.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1302.2,1302.104 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1302.104,1321.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1324.2,1324.72 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1324.72,1333.154 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1333.154,1334.26 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1334.26,1336.8 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1337.7,1337.16 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1338.35,1340.26 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1340.26,1342.8 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1343.7,1343.18 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1371.2,1371.26 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1371.26,1390.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1393.2,1393.28 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1393.28,1443.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1446.2,1446.28 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1446.28,1478.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1481.2,1481.37 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1481.37,1561.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1564.2,1568.23 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1568.23,1570.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1572.2,1588.57 3 0 +github.com/thebtf/engram/internal/mcp/server.go:1588.57,1591.29 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1591.29,1593.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1594.3,1594.27 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1594.27,1595.29 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1595.29,1597.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1601.2,1607.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1612.79,1614.60 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1614.60,1620.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1622.2,1623.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1623.16,1631.3 3 0 +github.com/thebtf/engram/internal/mcp/server.go:1633.2,1641.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1644.69,1645.34 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1645.34,1647.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1648.2,1649.22 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1649.22,1651.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1652.2,1652.37 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1656.99,1658.14 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1659.16,1660.35 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1661.15,1662.46 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1663.18,1664.49 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1665.15,1666.46 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1667.18,1668.49 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1669.14,1670.45 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1671.15,1672.34 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1676.2,1676.14 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1677.35,1678.52 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1679.26,1680.37 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1681.20,1682.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1683.20,1684.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1685.16,1686.35 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1687.29,1688.40 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1689.33,1690.50 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1691.25,1692.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1693.23,1694.41 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1696.26,1697.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1698.24,1699.42 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1700.22,1701.40 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1702.25,1703.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1704.27,1705.45 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1706.25,1707.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1709.30,1710.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1711.28,1712.42 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1713.17,1714.40 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1715.20,1716.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1717.20,1718.45 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1719.20,1720.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1722.20,1723.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1724.18,1725.36 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1726.20,1727.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1728.18,1729.36 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1730.21,1731.39 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1732.21,1733.39 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1734.26,1735.44 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1736.25,1737.34 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1738.26,1739.44 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1740.24,1741.42 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1742.26,1743.44 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1744.27,1745.45 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1746.22,1747.40 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1748.19,1749.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1750.15,1751.34 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1752.16,1753.35 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1755.21,1756.44 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1757.19,1758.42 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1759.20,1760.44 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1761.22,1762.45 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1763.22,1764.40 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1765.23,1766.41 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1767.20,1768.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1769.32,1770.49 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1771.19,1772.37 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1773.19,1774.37 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1775.33,1776.50 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1777.35,1778.52 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1779.24,1780.42 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1781.32,1782.49 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1783.28,1784.46 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1785.21,1786.39 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1787.34,1788.51 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1789.25,1790.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1791.29,1792.46 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1793.26,1794.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1795.27,1796.44 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1798.25,1799.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1800.23,1801.41 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1802.27,1803.45 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1804.26,1805.44 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1806.29,1807.47 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1809.29,1810.46 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1811.27,1812.44 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1813.30,1814.47 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1815.38,1816.54 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1817.36,1818.52 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1820.24,1821.42 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1822.27,1823.45 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1824.22,1825.40 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1826.32,1827.49 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1828.32,1829.49 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1830.31,1831.48 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1832.35,1833.52 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1834.36,1835.53 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1836.36,1837.53 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1838.38,1839.54 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1840.34,1841.51 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1843.22,1844.40 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1845.21,1846.39 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1847.24,1848.42 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1850.25,1851.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1852.25,1853.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1859.2,1859.14 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1860.22,1863.131 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1866.51,1867.123 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1868.10,1869.50 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1874.47,1876.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1876.16,1879.3 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1880.2,1880.35 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1884.72,1890.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1896.105,1898.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1898.16,1900.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1902.2,1903.17 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1903.17,1905.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1907.2,1908.17 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1908.17,1910.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1912.2,1918.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1918.16,1920.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1921.2,1921.25 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1927.76,1933.15 3 0 +github.com/thebtf/engram/internal/mcp/server.go:1933.15,1936.17 3 0 +github.com/thebtf/engram/internal/mcp/server.go:1936.17,1938.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1939.3,1939.26 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1943.2,1950.36 3 0 +github.com/thebtf/engram/internal/mcp/server.go:1950.36,1952.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1952.8,1955.29 3 0 +github.com/thebtf/engram/internal/mcp/server.go:1955.29,1958.4 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1959.3,1962.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1966.2,1966.20 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1966.20,1977.20 6 0 +github.com/thebtf/engram/internal/mcp/server.go:1977.20,1979.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1980.3,1980.20 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1980.20,1982.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1985.3,1985.37 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1985.37,1987.30 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1987.30,1988.16 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1988.16,1990.6 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1990.11,1992.6 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1994.4,1995.56 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1995.56,1997.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1998.4,2003.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2008.2,2008.29 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2008.29,2009.63 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2009.63,2011.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2011.9,2013.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2021.2,2021.29 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2021.29,2029.38 3 0 +github.com/thebtf/engram/internal/mcp/server.go:2029.38,2031.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2031.9,2033.31 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2033.31,2035.30 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2035.30,2037.6 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2039.4,2042.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2046.2,2047.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2047.16,2049.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2050.2,2050.25 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2055.57,2056.33 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2056.33,2058.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2059.2,2060.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2060.16,2062.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2063.2,2064.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2064.16,2066.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2067.2,2067.23 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2071.79,2105.15 6 0 +github.com/thebtf/engram/internal/mcp/server.go:2105.15,2107.17 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2107.17,2111.4 3 0 +github.com/thebtf/engram/internal/mcp/server.go:2111.9,2112.17 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2112.17,2114.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2115.4,2117.26 3 0 +github.com/thebtf/engram/internal/mcp/server.go:2117.26,2119.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2119.10,2121.29 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2121.29,2123.6 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2125.4,2129.25 5 0 +github.com/thebtf/engram/internal/mcp/server.go:2130.19,2130.19 0 0 +github.com/thebtf/engram/internal/mcp/server.go:2132.20,2134.106 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2135.12,2137.103 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2140.8,2143.3 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2144.2,2150.49 3 0 +github.com/thebtf/engram/internal/mcp/server.go:2150.49,2152.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2152.8,2154.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2155.2,2168.27 4 0 +github.com/thebtf/engram/internal/mcp/server.go:2168.27,2170.17 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2170.17,2173.4 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2173.9,2175.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2177.2,2182.40 4 0 +github.com/thebtf/engram/internal/mcp/server.go:2182.40,2183.21 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2184.20,2185.20 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2186.19,2187.19 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2191.2,2191.24 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2191.24,2193.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2193.8,2193.30 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2193.30,2195.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2198.2,2198.28 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2198.28,2200.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2203.2,2203.29 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2203.29,2205.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2207.2,2208.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2208.16,2210.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2211.2,2211.28 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2216.103,2218.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2218.16,2220.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2222.2,2223.15 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2223.15,2225.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2227.2,2239.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2239.16,2241.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2242.2,2242.25 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2246.93,2248.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2251.91,2253.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:18.28,29.20 4 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:29.20,33.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:35.2,44.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:68.36,69.49 1 1 +github.com/thebtf/engram/internal/mcp/tools_admin.go:69.49,74.3 4 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:75.2,75.25 1 1 +github.com/thebtf/engram/internal/mcp/tools_admin.go:80.26,82.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:84.89,86.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:86.16,88.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:89.2,90.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:90.18,92.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:94.2,94.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:95.15,96.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:97.26,98.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:99.25,100.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:101.23,105.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:105.22,107.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:108.3,108.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:109.10,110.114 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:120.92,126.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:126.26,128.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:130.2,131.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:131.19,133.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:134.2,135.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:135.19,137.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:138.2,138.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:138.24,140.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:142.2,142.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:142.25,144.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:146.2,147.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:147.16,149.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:151.2,151.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:27.40,30.2 2 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:32.30,46.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:48.99,49.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:49.34,51.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:52.2,52.69 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:52.69,54.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:56.2,57.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:57.16,59.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:60.2,61.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:61.21,63.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:64.2,67.26 3 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:67.26,69.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:70.2,71.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:71.25,73.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:75.2,77.44 3 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:77.44,79.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:80.2,80.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:80.33,82.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:83.2,83.81 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:86.52,87.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:87.16,89.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:90.2,90.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:90.15,92.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:93.2,93.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:96.73,97.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:97.21,99.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:100.2,101.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:101.29,110.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:111.2,111.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:114.34,116.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:31.98,32.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:32.52,34.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:35.2,35.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:35.26,37.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:39.2,40.49 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:40.49,42.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:43.2,43.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:43.21,45.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:46.2,46.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:46.21,48.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:49.2,49.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:49.18,51.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:52.2,52.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:52.18,54.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:56.2,56.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:56.38,58.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:60.2,61.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:61.16,63.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:68.2,70.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:70.26,77.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:79.2,81.36 3 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:81.36,84.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:86.2,89.28 3 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:89.28,90.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:90.39,91.9 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:93.3,97.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:100.2,104.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:107.60,113.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:115.101,116.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:116.38,118.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:120.2,122.21 3 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:122.21,123.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:123.26,125.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:126.3,126.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:126.23,128.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:129.8,130.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:130.26,132.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:133.3,133.68 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:133.68,135.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:137.2,140.20 3 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:141.17,142.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:143.67,143.67 0 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:144.10,145.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:148.2,162.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:162.16,164.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:165.2,165.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:165.19,173.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:174.2,174.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:174.30,176.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:177.2,177.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:177.31,179.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:181.2,182.36 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:182.36,196.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:198.2,199.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:199.19,201.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:202.2,203.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:203.18,205.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:206.2,207.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:207.21,209.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:210.2,211.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:211.25,213.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:214.2,225.21 3 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:225.21,227.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:228.2,228.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:228.25,230.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:231.2,231.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:231.18,233.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:235.2,244.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:244.21,246.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:247.2,247.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:247.25,249.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:250.2,250.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:250.18,252.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:253.2,253.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:253.24,255.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:256.2,256.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:259.50,261.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:261.22,263.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:264.2,264.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:270.90,272.42 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:272.42,276.3 3 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:277.2,281.27 3 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:281.27,282.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:282.45,284.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:286.2,286.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:25.28,88.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:95.95,96.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:96.22,98.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:99.2,100.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:100.32,102.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:104.2,105.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:105.16,107.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:109.2,114.35 3 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:114.35,121.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:123.2,123.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:123.25,125.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:127.2,134.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:134.16,136.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:138.2,146.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:154.94,155.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:155.22,157.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:158.2,159.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:159.32,161.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:163.2,164.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:164.16,166.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:168.2,172.35 3 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:172.35,179.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:181.2,181.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:181.25,183.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:185.2,192.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:192.16,194.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:196.2,203.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:211.97,212.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:212.22,214.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:215.2,216.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:216.32,218.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:220.2,221.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:221.16,223.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:225.2,229.35 3 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:229.35,236.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:238.2,238.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:238.25,240.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:242.2,249.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:249.16,251.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:253.2,260.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:31.80,32.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:32.14,34.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:35.2,48.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:51.136,53.51 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:53.51,55.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:56.2,56.83 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:59.94,60.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:60.21,62.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:63.2,63.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:68.30,162.2 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:165.98,166.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:166.49,168.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:169.2,170.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:170.16,172.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:173.2,174.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:174.19,176.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:177.2,179.17 3 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:179.17,181.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:183.2,184.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:184.16,186.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:188.2,189.31 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:189.31,190.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:190.15,191.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:193.3,193.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:196.2,201.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:201.16,203.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:204.2,204.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:208.96,209.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:209.49,211.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:212.2,213.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:213.16,215.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:216.2,217.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:217.13,219.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:221.2,222.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:222.16,224.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:225.2,225.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:225.22,227.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:229.2,230.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:230.16,232.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:233.2,233.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:239.100,240.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:240.22,242.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:243.2,244.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:244.16,246.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:247.2,248.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:248.13,250.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:255.2,256.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:256.12,263.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:263.30,264.77 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:264.77,269.5 4 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:271.3,272.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:272.21,274.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:275.3,275.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:279.2,279.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:279.29,281.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:284.2,285.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:285.16,287.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:288.2,288.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:288.22,290.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:291.2,291.55 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:291.55,293.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:294.2,294.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:294.74,296.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:297.2,298.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:298.16,300.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:306.2,307.41 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:307.41,309.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:310.2,324.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:324.16,325.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:325.50,327.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:328.3,328.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:330.2,330.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:330.38,332.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:334.2,341.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:341.16,343.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:344.2,344.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:348.99,349.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:349.49,351.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:352.2,353.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:353.16,355.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:356.2,357.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:357.13,359.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:360.2,362.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:362.16,364.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:365.2,365.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:365.22,367.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:368.2,368.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:368.74,370.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:371.2,372.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:372.16,374.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:375.2,375.85 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:375.85,377.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:379.2,380.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:380.16,381.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:381.50,383.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:384.3,384.60 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:386.2,386.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:386.20,388.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:390.2,395.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:395.16,397.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:398.2,398.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:402.102,403.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:403.49,405.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:406.2,407.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:407.16,409.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:410.2,411.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:411.13,413.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:414.2,415.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:415.16,417.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:418.2,418.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:418.22,420.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:421.2,421.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:421.74,423.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:424.2,425.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:425.16,427.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:428.2,428.88 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:428.88,430.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:432.2,433.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:433.16,434.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:434.50,436.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:437.3,437.63 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:439.2,439.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:439.20,441.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:443.2,448.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:448.16,450.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:451.2,451.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:34.30,36.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:42.61,44.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:48.32,75.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:79.32,94.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:100.98,101.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:101.25,103.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:104.2,104.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:104.29,106.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:108.2,113.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:113.17,114.55 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:114.55,116.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:118.2,118.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:118.24,120.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:121.2,121.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:121.23,123.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:124.2,124.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:124.23,126.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:134.2,135.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:135.21,137.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:142.2,147.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:147.16,149.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:154.2,165.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:165.25,175.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:177.2,183.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:183.16,185.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:186.2,186.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:194.98,195.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:195.25,197.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:198.2,198.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:198.29,200.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:202.2,205.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:205.17,207.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:208.2,209.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:209.21,211.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:213.2,214.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:214.16,216.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:217.2,218.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:218.16,220.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:221.2,222.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:222.16,224.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:226.2,231.11 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:231.11,233.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:235.2,236.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:236.16,238.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:239.2,239.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:21.52,22.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:22.24,25.28 3 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:25.28,27.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:29.2,29.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:35.72,37.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:37.15,39.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:41.2,42.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:42.16,44.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:45.2,45.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:49.99,51.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:51.16,53.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:55.2,56.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:56.16,58.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:60.2,72.23 7 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:72.23,74.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:75.2,75.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:75.24,77.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:78.2,78.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:78.24,80.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:81.2,81.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:82.27,82.27 0 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:84.10,85.93 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:87.2,87.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:87.30,89.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:90.2,90.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:90.26,92.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:94.2,95.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:95.16,97.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:99.2,100.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:100.16,102.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:104.2,112.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:112.16,114.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:116.2,123.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:123.16,125.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:126.2,126.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:130.97,132.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:132.16,134.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:136.2,137.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:137.16,139.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:141.2,147.23 4 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:147.23,149.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:150.2,150.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:150.26,152.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:154.2,155.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:155.16,157.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:159.2,160.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:160.16,161.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:161.47,163.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:164.3,164.51 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:167.2,167.97 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:167.97,172.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:174.2,175.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:175.16,177.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:179.2,185.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:185.16,187.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:188.2,188.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:192.99,194.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:194.16,196.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:198.2,199.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:199.16,201.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:203.2,207.26 3 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:207.26,209.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:211.2,212.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:212.16,214.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:216.2,223.26 3 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:223.26,229.28 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:229.28,231.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:232.3,232.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:235.2,236.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:236.16,238.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:239.2,239.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:243.100,245.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:245.16,247.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:249.2,250.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:250.16,252.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:254.2,262.23 5 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:262.23,264.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:265.2,265.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:265.24,267.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:268.2,268.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:269.27,269.27 0 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:271.10,272.93 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:274.2,274.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:274.30,276.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:277.2,277.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:277.26,279.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:281.2,281.71 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:281.71,282.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:282.47,284.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:285.3,285.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:288.2,293.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:293.16,295.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:296.2,296.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:302.92,309.19 5 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:309.19,310.53 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:310.53,313.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:316.2,317.51 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:317.51,318.66 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:318.66,320.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:323.2,331.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:331.16,333.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:334.2,334.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:338.46,342.32 4 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:342.32,343.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:343.20,346.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:348.2,350.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:350.26,352.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:352.27,353.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:353.13,355.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:356.4,356.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:358.3,358.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:360.2,360.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:16.45,18.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:20.35,36.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:38.84,39.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:39.40,41.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:42.2,42.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:42.50,44.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:45.2,45.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:48.101,50.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:50.16,52.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:53.2,54.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:54.16,56.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:57.2,58.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:58.19,60.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:61.2,62.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:62.21,64.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:65.2,66.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:66.16,68.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:69.2,69.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:72.102,74.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:74.16,76.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:77.2,82.8 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:10.100,12.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:12.16,14.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:16.2,17.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:17.18,19.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:21.2,21.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:22.16,23.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:24.14,25.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:26.14,27.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:28.17,29.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:30.17,31.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:32.21,33.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:34.19,35.42 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:36.17,37.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:38.16,39.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:40.16,41.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:42.21,43.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:44.10,45.167 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:15.77,16.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:16.33,18.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:20.2,21.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:21.27,23.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:25.2,26.28 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:26.28,29.17 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:29.17,31.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:34.2,41.32 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:41.32,46.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:46.20,48.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:49.3,49.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:52.2,53.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:53.16,55.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:57.2,57.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:61.97,62.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:62.28,64.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:66.2,67.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:67.16,69.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:71.2,75.29 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:75.29,77.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:79.2,80.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:80.16,82.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:84.2,84.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:84.20,86.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:88.2,97.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:97.25,103.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:103.20,105.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:106.3,106.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:106.19,108.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:109.3,109.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:112.2,113.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:113.16,115.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:117.2,117.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:121.95,122.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:122.28,124.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:126.2,127.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:127.16,129.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:131.2,137.50 4 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:137.50,139.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:141.2,142.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:142.16,144.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:145.2,145.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:145.16,147.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:149.2,149.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:149.21,151.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:153.2,154.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:154.16,156.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:157.2,157.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:157.20,159.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:161.2,161.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:165.98,166.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:166.28,168.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:170.2,171.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:171.16,173.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:175.2,181.50 4 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:181.50,183.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:185.2,185.96 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:185.96,187.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:189.2,189.88 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:197.98,198.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:198.28,200.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:202.2,203.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:203.16,205.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:207.2,217.74 6 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:217.74,219.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:222.2,223.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:223.16,225.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:227.2,229.156 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:235.98,237.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:237.16,239.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:241.2,247.24 4 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:247.24,249.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:252.2,253.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:253.29,255.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:256.2,256.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:15.93,16.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:16.37,18.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:20.2,21.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:21.16,23.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:25.2,32.16 7 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:32.16,34.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:35.2,35.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:35.19,37.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:38.2,38.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:38.19,40.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:42.2,43.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:43.16,45.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:47.2,54.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:54.16,56.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:57.2,57.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:61.91,62.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:62.37,64.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:66.2,67.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:67.16,69.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:71.2,73.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:73.16,75.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:76.2,76.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:76.19,78.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:80.2,81.43 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:81.43,83.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:83.19,85.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:86.3,86.79 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:87.8,89.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:90.2,90.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:90.16,91.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:91.45,93.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:94.3,94.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:97.2,110.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:110.16,112.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:113.2,113.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:117.93,119.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:122.91,123.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:123.37,125.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:127.2,128.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:128.16,130.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:132.2,133.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:133.19,135.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:136.2,141.16 5 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:141.16,143.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:145.2,155.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:155.25,165.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:167.2,168.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:168.16,170.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:171.2,171.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:175.94,176.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:176.37,178.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:180.2,181.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:181.16,183.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:185.2,187.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:187.16,189.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:190.2,190.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:190.19,192.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:193.2,196.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:196.16,198.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:200.2,208.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:208.25,216.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:218.2,225.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:225.16,227.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:228.2,228.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:232.94,233.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:233.37,235.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:237.2,238.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:238.16,240.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:242.2,243.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:243.21,245.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:246.2,248.19 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:248.19,250.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:252.2,253.46 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:253.46,255.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:255.13,257.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:259.2,259.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:259.44,261.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:261.13,263.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:266.2,267.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:267.16,269.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:271.2,278.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:278.16,280.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:281.2,281.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:19.69,21.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:23.38,38.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:40.51,63.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:65.53,80.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:82.46,85.32 3 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:85.32,87.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:88.2,88.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:91.105,93.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:93.16,95.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:96.2,97.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:97.16,99.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:100.2,100.70 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:103.107,105.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:105.16,107.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:108.2,109.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:109.16,111.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:112.2,112.72 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:115.101,117.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:117.16,119.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:120.2,121.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:121.17,123.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:124.2,139.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:142.109,144.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:144.16,146.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:147.2,154.8 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:157.100,159.28 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:159.28,161.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:161.18,163.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:164.3,164.62 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:166.2,167.72 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:167.72,169.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:170.2,170.53 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:170.53,172.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:173.2,174.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:174.26,176.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:177.2,177.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:180.73,182.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:182.16,184.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:185.2,185.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:12.104,14.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:14.16,16.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:18.2,19.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:19.18,21.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:23.2,23.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:24.14,25.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:26.18,27.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:28.17,29.46 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:30.10,31.96 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:36.101,37.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:37.27,39.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:41.2,42.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:42.16,44.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:46.2,47.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:47.21,49.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:50.2,51.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:51.19,53.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:54.2,54.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:55.52,55.52 0 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:56.10,57.101 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:59.2,61.93 2 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:61.93,64.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:66.2,70.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:27.31,94.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:98.97,100.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:100.26,102.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:103.2,103.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:103.28,105.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:107.2,108.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:108.16,110.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:112.2,115.15 4 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:115.15,117.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:118.2,118.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:118.17,120.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:122.2,123.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:123.16,125.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:127.2,140.29 3 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:140.29,151.31 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:151.31,154.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:155.3,155.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:158.2,162.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:167.100,169.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:169.26,171.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:172.2,172.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:172.28,174.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:175.2,175.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:175.26,177.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:179.2,180.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:180.16,182.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:184.2,185.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:185.22,187.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:189.2,190.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:190.20,191.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:191.54,199.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:200.3,200.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:200.61,202.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:203.3,203.58 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:206.2,211.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:215.95,217.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:217.32,219.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:220.2,220.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:220.28,222.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:224.2,225.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:225.16,227.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:229.2,230.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:230.22,232.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:234.2,234.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:234.61,236.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:239.2,239.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:239.25,246.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:248.2,252.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:258.104,260.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:260.26,262.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:267.2,271.20 3 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:271.20,275.3 3 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:275.8,279.3 3 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:280.2,280.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:284.60,285.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:285.30,287.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:288.2,288.42 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:288.42,290.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:291.2,291.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:64.89,65.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:65.25,67.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:69.2,70.49 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:70.49,72.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:74.2,74.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:75.18,76.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:77.21,78.35 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:79.19,80.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:81.18,82.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:83.19,84.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:85.18,86.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:87.18,91.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:91.23,93.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:94.3,94.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:95.10,96.62 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:100.81,103.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:103.19,105.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:106.2,107.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:107.19,109.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:112.2,112.46 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:112.46,114.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:115.2,115.46 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:115.46,117.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:122.2,122.66 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:122.66,124.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:127.2,127.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:127.25,128.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:128.22,130.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:131.8,132.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:132.26,134.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:138.2,138.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:138.25,139.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:139.22,141.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:142.8,143.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:143.26,145.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:148.2,148.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:148.22,150.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:151.2,151.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:151.38,153.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:154.2,154.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:154.19,156.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:159.2,161.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:161.25,164.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:165.2,165.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:165.25,168.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:169.2,171.23 3 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:171.23,174.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:175.2,175.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:175.23,178.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:180.2,193.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:193.16,195.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:198.2,199.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:199.29,201.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:202.2,202.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:202.29,204.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:205.2,213.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:216.121,217.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:217.28,218.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:218.26,220.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:221.3,222.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:222.17,223.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:223.49,225.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:226.4,226.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:228.3,228.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:230.2,230.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:230.26,232.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:233.2,234.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:234.16,235.48 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:235.48,237.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:238.3,238.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:240.2,240.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:243.101,248.36 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:248.36,250.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:250.8,252.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:253.2,253.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:253.16,255.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:256.2,256.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:256.32,257.128 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:257.128,262.72 5 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:262.72,264.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:267.2,267.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:276.81,277.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:277.25,279.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:280.2,280.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:280.22,282.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:283.2,283.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:283.39,285.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:286.2,286.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:286.25,288.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:289.2,289.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:289.21,291.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:292.2,293.14 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:293.14,295.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:296.2,305.16 5 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:305.16,307.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:308.2,314.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:317.84,318.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:318.19,320.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:321.2,323.63 3 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:323.63,325.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:326.2,329.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:332.82,333.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:333.38,335.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:336.2,337.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:338.18,339.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:340.18,341.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:345.2,345.59 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:345.59,347.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:349.2,351.21 3 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:351.21,353.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:353.8,356.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:357.2,357.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:357.16,359.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:366.2,367.41 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:367.41,369.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:371.2,378.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:397.115,398.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:398.15,400.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:403.2,404.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:404.26,405.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:405.28,407.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:408.3,408.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:408.28,410.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:412.2,412.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:412.23,415.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:420.2,426.12 4 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:426.12,427.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:427.27,429.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:429.18,431.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:433.4,433.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:433.33,435.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:440.2,441.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:441.26,442.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:442.28,443.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:443.49,445.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:448.3,448.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:448.28,449.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:449.49,451.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:454.2,454.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:457.82,458.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:458.21,460.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:461.2,462.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:462.16,464.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:465.2,465.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:465.36,467.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:468.2,469.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:469.16,471.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:472.2,477.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:480.82,481.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:481.40,483.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:484.2,485.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:485.19,487.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:488.2,489.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:489.16,491.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:492.2,499.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:502.82,503.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:503.21,505.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:506.2,507.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:507.16,509.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:510.2,514.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:23.179,24.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:24.22,26.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:28.2,32.22 4 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:32.22,34.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:35.2,36.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:36.22,38.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:40.2,41.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:41.26,43.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:44.2,44.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:44.26,46.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:47.2,47.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:47.30,49.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:50.2,50.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:50.30,52.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:54.2,55.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:55.16,57.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:58.2,58.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:58.13,60.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:61.2,62.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:62.16,64.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:65.2,65.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:65.13,67.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:69.2,70.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:70.16,72.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:73.2,73.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:73.15,75.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:77.2,77.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:80.172,81.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:81.28,82.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:82.23,84.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:85.3,85.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:85.18,87.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:88.3,89.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:89.17,90.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:90.49,92.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:93.4,93.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:95.3,95.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:98.2,98.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:98.24,100.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:101.2,101.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:101.19,103.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:104.2,105.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:105.16,106.48 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:106.48,108.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:109.3,109.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:111.2,111.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:114.119,116.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:116.22,118.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:119.2,120.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:120.22,122.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:124.2,126.26 3 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:126.26,127.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:127.36,129.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:130.3,130.105 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:131.8,132.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:132.32,134.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:135.3,135.103 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:137.2,137.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:137.16,139.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:141.2,141.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:141.32,143.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:143.27,145.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:146.3,147.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:147.27,149.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:150.3,150.106 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:150.106,151.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:153.3,153.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:153.27,154.114 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:154.114,155.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:157.9,157.104 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:157.104,158.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:160.3,160.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:160.27,161.114 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:161.114,162.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:164.9,164.104 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:164.104,165.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:167.3,167.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:169.2,169.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:25.90,26.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:26.26,28.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:30.2,31.49 2 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:31.49,33.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:35.2,35.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:36.16,37.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:38.10,39.63 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:43.84,44.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:44.21,46.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:47.2,47.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:47.25,49.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:50.2,50.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:50.21,52.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:53.2,53.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:53.21,55.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:57.2,58.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:59.18,60.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:61.15,62.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:63.24,64.42 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:65.10,66.108 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:69.2,70.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:70.22,72.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:73.2,74.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:74.29,76.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:78.2,78.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:78.14,85.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:87.2,89.37 3 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:89.37,92.21 3 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:92.21,94.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:97.2,100.31 4 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:100.31,102.38 2 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:102.38,104.37 2 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:104.37,106.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:109.3,122.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:122.26,124.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:125.3,125.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:125.19,127.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:131.3,133.39 3 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:133.39,135.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:135.9,137.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:138.3,138.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:138.17,140.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:142.3,142.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:142.34,144.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:145.3,145.11 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:148.2,155.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:20.99,22.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:22.16,24.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:26.2,31.44 3 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:31.44,32.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:32.33,33.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:33.43,38.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:43.2,43.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:43.49,45.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:46.2,46.48 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:46.48,48.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:50.2,52.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:52.27,55.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:55.8,60.24 3 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:60.24,62.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:64.3,64.57 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:64.57,66.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:68.3,68.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:71.2,71.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:71.16,73.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:75.2,76.23 2 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:76.23,78.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:80.2,80.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:19.40,89.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:109.71,111.9 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:111.9,113.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:115.2,116.38 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:116.38,117.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:118.13,119.41 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:119.41,121.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:122.17,123.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:123.43,125.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:126.11,127.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:127.40,129.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:133.2,133.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:133.22,138.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:139.2,139.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:143.90,144.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:144.25,146.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:148.2,149.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:149.16,151.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:153.2,157.61 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:157.61,159.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:161.2,161.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:162.16,163.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:164.14,165.35 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:166.13,167.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:168.16,169.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:170.17,171.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:172.16,173.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:174.15,175.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:176.10,177.120 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:189.85,191.39 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:191.39,192.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:192.44,194.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:196.2,196.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:196.15,198.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:199.2,199.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:199.15,201.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:202.2,202.46 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:205.91,207.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:207.17,209.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:211.2,215.25 5 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:215.25,217.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:218.2,224.25 4 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:224.25,226.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:227.2,227.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:227.25,229.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:231.2,243.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:243.16,245.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:247.2,247.139 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:250.89,252.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:252.19,254.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:255.2,256.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:256.25,258.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:259.2,264.52 5 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:264.52,266.14 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:266.14,268.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:271.2,277.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:277.25,280.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:282.2,283.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:283.16,285.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:287.2,287.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:287.22,288.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:288.20,290.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:291.3,291.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:294.2,297.31 3 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:297.31,300.29 3 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:300.29,302.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:303.3,305.69 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:308.2,308.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:311.88,313.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:313.13,315.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:317.2,318.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:318.16,320.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:322.2,328.22 6 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:328.22,331.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:333.2,333.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:333.23,335.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:335.30,338.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:341.2,341.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:344.91,346.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:346.13,348.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:350.2,353.18 3 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:353.18,354.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:354.27,356.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:357.3,357.73 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:357.73,359.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:362.2,362.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:362.19,370.17 4 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:370.17,372.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:375.2,376.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:376.26,378.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:379.2,379.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:382.92,384.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:384.13,386.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:388.2,389.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:389.16,391.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:393.2,401.16 4 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:401.16,403.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:405.2,405.88 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:408.91,410.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:410.13,412.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:414.2,418.95 4 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:418.95,420.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:422.2,422.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:425.90,427.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:427.13,429.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:431.2,433.167 3 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:433.167,435.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:437.2,437.89 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:437.89,439.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:441.2,441.108 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:22.93,24.49 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:24.49,26.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:28.2,28.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:29.14,30.42 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:31.17,32.59 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:33.16,34.58 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:35.24,36.75 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:37.27,38.71 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:39.22,40.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:41.23,42.63 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:43.10,44.66 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:48.79,49.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:49.13,51.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:52.2,53.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:53.16,55.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:57.2,58.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:58.32,60.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:61.2,84.28 3 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:87.101,88.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:88.13,90.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:91.2,91.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:91.38,93.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:94.2,95.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:95.16,97.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:98.2,98.53 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:98.53,100.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:102.2,104.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:104.17,106.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:107.2,107.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:107.29,109.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:110.2,115.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:118.100,119.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:119.13,121.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:122.2,122.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:122.38,124.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:125.2,126.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:126.16,128.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:129.2,129.53 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:129.53,131.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:133.2,135.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:135.17,137.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:138.2,138.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:138.29,140.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:141.2,146.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:149.123,150.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:150.13,152.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:153.2,153.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:153.18,155.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:156.2,156.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:156.38,158.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:159.2,161.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:161.17,163.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:164.2,169.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:172.113,173.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:173.13,175.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:176.2,176.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:176.50,178.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:179.2,181.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:181.17,183.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:184.2,188.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:191.57,195.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:197.102,198.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:198.13,200.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:201.2,201.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:201.20,203.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:204.2,205.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:205.16,207.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:209.2,210.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:210.32,212.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:214.2,217.56 3 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:217.56,223.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:225.2,230.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:233.41,235.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:235.16,237.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:238.2,238.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:35.27,37.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:42.41,43.11 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:44.48,45.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:46.10,47.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:54.57,55.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:56.17,57.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:58.16,59.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:60.10,61.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:82.58,83.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:84.28,85.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:86.26,87.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:88.10,89.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:93.114,95.68 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:95.68,97.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:99.2,101.42 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:101.42,102.71 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:102.71,105.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:107.2,117.23 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:117.23,119.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:121.2,124.22 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:124.22,125.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:125.31,127.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:128.3,128.35 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:129.8,129.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:129.37,131.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:132.2,132.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:135.74,136.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:136.30,138.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:139.2,139.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:139.34,141.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:142.2,142.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:142.31,144.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:145.2,145.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:145.22,147.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:161.169,162.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:162.17,164.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:165.2,166.51 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:166.51,168.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:169.2,169.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:172.92,174.42 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:174.42,177.63 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:177.63,179.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:179.9,181.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:183.2,183.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:186.65,190.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:192.115,194.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:194.26,196.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:196.8,196.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:196.31,198.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:199.2,199.117 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:202.122,206.31 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:206.31,207.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:207.45,209.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:211.2,211.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:214.72,216.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:218.117,219.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:219.16,221.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:222.2,223.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:223.20,225.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:225.17,227.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:228.3,228.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:228.27,229.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:229.50,231.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:231.30,232.11 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:236.3,236.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:239.2,241.60 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:241.60,243.61 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:243.61,245.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:246.3,246.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:246.24,247.9 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:249.3,250.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:250.17,252.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:253.3,253.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:253.22,254.9 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:256.3,256.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:256.29,257.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:257.50,259.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:259.30,260.11 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:264.3,265.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:265.32,266.9 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:269.2,269.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:272.51,273.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:273.16,275.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:276.2,277.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:277.18,279.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:280.2,280.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:280.19,282.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:283.2,283.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:286.97,288.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:288.30,290.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:291.2,291.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:291.49,293.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:294.2,294.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:297.108,299.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:301.108,303.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:305.102,307.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:319.55,320.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:320.31,322.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:323.2,323.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:323.26,325.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:326.2,326.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:329.71,330.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:343.26,344.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:345.10,346.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:354.95,362.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:362.16,364.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:366.2,397.39 14 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:397.39,399.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:399.27,401.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:402.8,404.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:405.2,407.46 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:407.46,410.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:411.2,411.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:411.44,413.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:413.12,415.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:417.2,417.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:417.26,419.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:420.2,420.84 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:420.84,422.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:427.2,427.65 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:427.65,429.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:431.2,433.20 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:433.20,435.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:436.2,437.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:437.20,439.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:440.2,440.56 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:440.56,442.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:443.2,443.56 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:443.56,448.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:450.2,450.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:450.45,453.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:459.2,459.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:459.31,461.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:461.22,462.62 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:462.62,465.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:466.4,466.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:468.3,468.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:471.2,472.115 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:472.115,474.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:491.2,491.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:491.19,493.23 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:493.23,495.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:496.3,508.21 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:508.21,510.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:511.3,511.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:522.2,522.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:522.43,535.34 5 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:535.34,556.30 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:556.30,558.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:559.4,559.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:559.44,561.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:562.4,562.106 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:562.106,564.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:575.4,575.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:575.74,577.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:578.4,579.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:579.18,581.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:583.4,584.28 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:584.28,586.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:588.4,588.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:588.31,599.57 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:599.57,601.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:601.17,604.7 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:606.5,607.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:607.21,609.6 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:615.5,615.138 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:615.138,617.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:617.27,619.7 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:620.6,620.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:622.5,623.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:623.26,625.6 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:626.5,626.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:630.4,631.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:631.20,633.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:634.4,634.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:634.22,637.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:637.26,639.6 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:640.5,640.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:645.4,660.77 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:660.77,662.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:663.4,664.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:664.25,666.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:667.4,667.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:673.2,673.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:673.26,675.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:677.2,678.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:678.25,680.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:681.2,681.97 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:681.97,683.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:690.2,691.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:691.21,693.33 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:693.33,695.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:696.3,696.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:696.33,698.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:699.3,699.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:699.49,704.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:721.3,721.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:721.54,722.84 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:722.84,724.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:728.2,728.99 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:728.99,730.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:732.2,733.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:733.22,735.10 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:736.109,737.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:738.100,739.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:740.114,741.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:742.107,743.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:744.11,745.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:748.2,749.43 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:749.43,751.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:753.2,755.34 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:755.34,756.48 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:756.48,757.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:757.19,760.5 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:764.2,764.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:764.31,767.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:768.2,768.35 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:768.35,771.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:772.2,772.76 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:772.76,776.3 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:778.2,780.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:780.16,782.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:782.20,785.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:788.2,788.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:788.25,798.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:798.18,800.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:800.9,800.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:800.30,807.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:808.3,808.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:808.36,810.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:811.3,812.50 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:812.50,815.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:816.3,822.17 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:822.17,824.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:826.3,836.17 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:836.17,838.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:839.3,839.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:842.2,843.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:843.30,844.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:844.52,846.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:846.9,848.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:851.2,869.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:869.21,871.43 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:871.43,873.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:874.3,874.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:874.29,876.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:886.3,886.76 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:886.76,888.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:890.2,890.105 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:890.105,892.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:893.2,894.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:894.16,896.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:901.2,904.40 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:904.40,905.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:905.15,906.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:909.3,910.63 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:910.63,912.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:912.9,914.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:916.3,916.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:916.43,918.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:919.3,920.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:920.20,922.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:925.3,925.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:925.23,928.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:929.3,931.33 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:931.33,934.39 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:934.39,936.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:939.2,948.42 5 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:948.42,950.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:950.21,952.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:952.9,955.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:959.2,959.53 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:959.53,960.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:960.54,961.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:961.33,963.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:964.9,972.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:973.3,973.60 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:973.60,974.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:974.40,976.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:978.3,978.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:978.61,979.41 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:979.41,981.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:983.3,983.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:983.28,985.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:986.3,987.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:989.2,989.51 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:989.51,991.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:995.2,997.53 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:997.53,999.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:999.8,1001.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1002.2,1002.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1002.22,1004.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1008.2,1014.76 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1014.76,1016.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1021.2,1021.57 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1021.57,1026.13 5 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1026.13,1029.21 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1029.21,1032.5 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1033.4,1033.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1033.49,1035.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1036.4,1043.89 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1043.89,1046.5 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1048.4,1048.86 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1052.2,1063.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1063.21,1065.40 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1065.40,1067.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1068.3,1068.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1068.38,1070.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1072.2,1074.18 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1074.18,1081.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1082.2,1082.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1082.28,1084.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1085.2,1085.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1085.16,1087.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1088.2,1088.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1088.30,1090.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1091.2,1091.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1091.30,1093.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1098.2,1098.76 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1098.76,1100.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1101.2,1102.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1102.16,1104.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1105.2,1105.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1111.94,1113.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1113.15,1115.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1117.2,1118.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1118.16,1120.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1122.2,1123.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1123.13,1125.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1126.2,1131.16 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1131.16,1133.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1134.2,1134.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1134.19,1136.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1146.2,1146.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1146.39,1148.55 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1148.55,1150.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1152.2,1152.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1152.39,1154.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1157.2,1158.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1158.21,1163.21 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1163.21,1165.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1166.3,1167.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1167.21,1169.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1170.3,1170.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1170.52,1172.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1173.3,1173.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1173.52,1178.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1179.3,1179.41 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1179.41,1182.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1183.3,1183.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1188.2,1188.46 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1188.46,1190.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1191.2,1191.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1191.27,1193.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1195.2,1196.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1196.16,1198.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1201.2,1210.16 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1210.16,1212.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1213.2,1213.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1218.59,1220.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1220.38,1222.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1225.2,1226.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1226.29,1227.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1227.22,1229.9 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1232.2,1232.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1232.18,1234.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1237.2,1244.29 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1244.29,1245.67 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1245.67,1247.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1249.2,1249.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1249.16,1251.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1254.2,1254.11 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1258.55,1260.47 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1260.47,1262.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1263.2,1264.58 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1264.58,1266.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1267.2,1267.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1270.252,1271.108 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1271.108,1273.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1274.2,1274.55 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1274.55,1276.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1277.2,1277.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1280.184,1282.69 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1282.69,1284.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1284.32,1285.58 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1285.58,1287.10 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1290.3,1290.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1290.18,1292.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1294.2,1294.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1294.19,1297.32 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1297.32,1298.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1298.39,1300.10 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1303.3,1303.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1303.19,1305.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1307.2,1307.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1307.21,1309.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1309.32,1310.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1310.49,1312.10 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1315.3,1315.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1315.18,1317.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1319.2,1319.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1319.28,1321.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1321.17,1323.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1324.3,1324.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1324.27,1326.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1328.2,1328.76 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1328.76,1330.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1331.2,1331.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1342.96,1343.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1343.26,1345.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1347.2,1348.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1348.16,1350.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1352.2,1363.23 9 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1363.23,1364.58 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1364.58,1365.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1365.31,1367.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1367.10,1369.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1373.2,1373.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1373.17,1375.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1376.2,1376.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1376.16,1378.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1379.2,1379.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1379.16,1381.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1382.2,1382.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1382.18,1384.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1385.2,1385.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1385.19,1387.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1388.2,1388.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1388.19,1390.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1396.2,1399.18 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1399.18,1400.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1400.61,1401.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1402.50,1403.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1404.12,1405.108 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1409.2,1410.42 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1410.42,1414.3 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1415.2,1420.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1420.16,1422.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1429.2,1444.43 6 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1444.43,1446.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1449.2,1451.27 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1451.27,1453.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1458.2,1458.46 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1458.46,1460.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1461.2,1461.63 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1461.63,1463.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1465.2,1466.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1466.15,1472.29 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1472.29,1479.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1479.18,1481.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1482.4,1482.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1482.23,1483.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1485.4,1485.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1485.30,1486.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1486.24,1488.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1488.32,1489.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1493.4,1494.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1494.30,1495.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1498.8,1504.29 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1504.29,1506.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1506.18,1508.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1509.4,1509.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1509.23,1510.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1512.4,1512.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1512.30,1513.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1513.24,1515.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1515.32,1516.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1520.4,1521.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1521.30,1522.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1526.2,1526.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1526.26,1528.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1528.17,1530.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1535.2,1535.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1535.74,1536.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1536.13,1537.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1537.33,1542.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1542.26,1544.39 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1544.39,1546.7 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1548.5,1548.82 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1565.2,1565.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1565.38,1569.27 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1569.27,1571.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1572.3,1572.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1572.27,1574.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1576.3,1581.32 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1581.32,1586.4 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1588.3,1592.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1592.18,1594.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1595.3,1596.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1596.17,1598.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1599.3,1599.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1602.2,1602.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1603.15,1618.32 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1618.32,1620.33 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1620.33,1621.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1621.40,1623.11 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1626.4,1638.6 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1640.3,1641.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1641.17,1643.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1644.3,1644.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1646.18,1648.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1648.17,1650.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1651.3,1651.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1653.10,1654.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1654.25,1656.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1657.3,1659.32 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1659.32,1661.33 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1661.33,1662.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1662.40,1664.11 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1667.4,1669.26 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1669.26,1671.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1672.4,1673.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1673.25,1675.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1676.4,1676.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1678.3,1678.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1690.51,1695.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1700.73,1702.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1702.16,1704.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1705.2,1706.48 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1706.48,1710.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1711.2,1713.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1713.16,1715.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1716.2,1716.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1727.117,1731.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1731.21,1733.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1734.2,1735.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1735.16,1737.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1738.2,1739.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1739.27,1741.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1742.2,1742.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1764.19,1775.30 7 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1775.30,1777.37 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1777.37,1779.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1781.3,1781.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1781.20,1783.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1797.2,1797.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1797.39,1799.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1801.2,1811.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1811.25,1813.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1815.2,1816.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1816.29,1818.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1824.2,1824.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1824.27,1826.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1831.2,1833.22 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1833.22,1835.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1837.2,1846.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1846.16,1848.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1853.2,1855.27 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1855.27,1857.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1859.2,1876.33 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1876.33,1878.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1880.2,1881.28 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1881.28,1885.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1885.20,1888.33 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1888.33,1889.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1889.40,1891.11 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1894.4,1894.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1894.20,1895.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1900.3,1900.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1900.22,1902.33 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1902.33,1903.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1903.50,1905.11 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1908.4,1908.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1908.19,1909.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1918.3,1918.56 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1918.56,1919.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1927.3,1927.64 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1927.64,1928.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1932.3,1935.32 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1935.32,1936.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1936.39,1938.10 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1942.3,1956.14 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1956.14,1957.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1957.37,1959.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1961.3,1962.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1962.26,1963.9 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1975.2,1975.59 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1975.59,1986.17 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1986.17,1988.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1990.3,1991.34 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1991.34,1993.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1995.3,1996.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1996.29,1998.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1998.21,2001.34 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2001.34,2002.41 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2002.41,2004.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2007.5,2007.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2007.21,2008.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2011.4,2011.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2011.23,2013.34 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2013.34,2014.51 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2014.51,2016.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2019.5,2019.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2019.20,2020.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2023.4,2023.57 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2023.57,2024.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2027.4,2027.65 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2027.65,2028.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2030.4,2031.33 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2031.33,2032.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2032.40,2034.11 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2037.4,2051.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2051.15,2052.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2052.38,2054.6 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2056.4,2057.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2057.27,2058.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2065.2,2066.28 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2066.28,2068.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2072.2,2072.71 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2072.71,2080.30 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2080.30,2081.41 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2081.41,2087.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2089.3,2089.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2089.13,2090.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2090.31,2095.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2095.25,2097.38 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2097.38,2099.7 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2101.5,2101.81 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2112.2,2112.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2112.38,2115.27 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2115.27,2117.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2121.3,2138.30 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2138.30,2140.11 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2140.11,2141.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2143.4,2160.15 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2160.15,2161.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2161.39,2163.6 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2165.4,2165.46 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2167.3,2173.24 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2173.24,2175.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2176.3,2176.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2179.2,2179.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2180.15,2182.24 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2182.24,2184.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2185.3,2185.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2187.18,2199.30 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2199.30,2201.11 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2201.11,2202.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2204.4,2208.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2208.15,2209.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2209.39,2211.6 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2213.4,2213.35 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2215.3,2216.24 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2216.24,2218.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2219.3,2219.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2220.10,2221.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2221.22,2223.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2224.3,2226.27 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2226.27,2228.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2228.20,2230.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2231.4,2233.26 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2233.26,2235.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2236.4,2237.23 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2237.23,2239.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2240.4,2240.46 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2240.46,2244.5 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2245.4,2245.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2247.3,2247.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2252.94,2254.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2254.16,2256.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2258.2,2260.18 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2260.18,2261.59 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2261.59,2262.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2262.36,2264.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2264.10,2266.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2270.2,2270.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2270.13,2272.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2273.2,2273.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2273.50,2275.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2277.2,2277.98 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2281.98,2282.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2282.26,2284.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2286.2,2287.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2287.16,2289.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2291.2,2292.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2292.13,2294.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2297.2,2298.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2298.19,2299.51 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2299.51,2301.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2302.3,2302.55 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2304.2,2304.42 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2304.42,2306.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2308.2,2308.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2308.54,2309.48 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2309.48,2311.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2312.3,2312.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2316.2,2318.53 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:17.82,19.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:21.149,22.55 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:22.55,24.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:25.2,25.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:25.36,27.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:28.2,34.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:34.16,36.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:37.2,37.42 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:37.42,39.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:40.2,40.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:43.105,44.48 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:44.48,46.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:47.2,48.54 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:51.129,53.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:53.16,55.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:56.2,57.53 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:57.53,59.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:60.2,61.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:61.25,63.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:64.2,65.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:65.16,67.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:68.2,68.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:26.97,27.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:27.18,29.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:30.2,30.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:33.37,35.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:37.81,38.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:38.44,40.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:41.2,41.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:41.38,43.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:44.2,44.57 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:47.88,48.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:48.32,50.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:51.2,52.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:52.20,54.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:55.2,55.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:58.40,72.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:74.106,75.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:75.34,77.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:78.2,79.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:79.16,81.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:83.2,84.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:84.16,86.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:88.2,89.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:89.13,91.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:93.2,94.63 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:94.63,96.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:98.2,98.72 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:98.72,100.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:102.2,106.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:109.117,110.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:110.32,112.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:113.2,113.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:113.34,115.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:117.2,118.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:118.16,120.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:121.2,121.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:121.19,123.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:125.2,126.69 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:126.69,128.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:130.2,136.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:18.33,20.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:22.27,37.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:39.93,40.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:40.30,42.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:43.2,43.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:43.28,45.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:46.2,47.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:47.16,49.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:51.2,52.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:52.17,54.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:55.2,56.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:56.19,58.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:59.2,59.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:59.19,61.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:62.2,63.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:63.16,65.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:67.2,74.9 3 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:74.9,76.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:77.2,78.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:78.15,80.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:81.2,85.16 4 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:85.16,87.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:88.2,88.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:88.17,90.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:92.2,101.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:104.48,105.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:105.16,107.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:108.2,109.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:109.29,111.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:112.2,112.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:112.31,114.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:115.2,115.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:118.75,120.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:120.27,121.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:121.32,123.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:123.17,124.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:126.4,126.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:129.2,134.33 3 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:134.33,136.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:137.2,137.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:137.40,138.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:138.39,140.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:141.3,141.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:143.2,143.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:143.34,145.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:146.2,147.35 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:147.35,149.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:150.2,150.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:153.77,154.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:154.20,156.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:157.2,159.31 3 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:159.31,160.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:160.33,162.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:163.3,163.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:163.30,165.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:167.2,170.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:23.91,25.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:27.38,50.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:52.104,53.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:53.38,55.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:56.2,57.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:57.16,59.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:61.2,62.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:62.26,64.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:65.2,66.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:66.30,68.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:69.2,69.72 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:69.72,71.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:73.2,74.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:74.16,76.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:77.2,78.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:78.16,80.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:81.2,82.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:82.16,84.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:85.2,86.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:86.16,88.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:90.2,105.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:105.16,107.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:109.2,109.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:109.19,117.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:118.2,118.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:118.25,120.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:121.2,121.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:121.30,123.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:124.2,124.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:124.31,126.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:127.2,128.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:128.16,130.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:131.2,131.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:134.91,136.9 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:136.9,138.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:139.2,140.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:140.15,141.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:141.19,143.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:144.3,144.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:146.2,146.94 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:149.59,150.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:150.16,152.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:153.2,154.61 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:154.61,156.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:157.2,157.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:160.56,161.75 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:161.75,163.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:164.2,164.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:167.67,169.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:170.17,171.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:172.67,173.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:174.10,175.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:179.60,180.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:180.16,182.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:183.2,184.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:184.25,186.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:187.2,187.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:190.57,191.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:192.15,193.81 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:193.81,195.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:196.3,196.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:197.19,199.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:199.17,201.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:202.3,202.55 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:202.55,204.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:205.3,205.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:206.14,207.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:208.11,209.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:210.10,211.41 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:215.59,216.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:216.16,218.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:219.2,219.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:220.12,221.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:222.14,223.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:224.10,225.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:28.90,30.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:30.16,32.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:34.2,36.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:37.16,38.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:40.16,42.140 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:44.20,46.140 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:48.17,50.142 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:52.17,56.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:56.50,62.63 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:62.63,64.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:66.4,66.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:66.45,68.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:72.4,74.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:74.25,76.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:77.4,77.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:80.3,80.101 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:82.18,84.141 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:86.18,88.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:88.18,90.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:91.3,91.41 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:93.17,96.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:96.50,99.59 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:99.59,101.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:102.4,104.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:104.25,106.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:107.4,107.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:110.3,110.98 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:112.10,116.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:125.86,126.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:126.16,128.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:129.2,130.9 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:130.9,132.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:133.2,133.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:133.22,135.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:137.2,139.31 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:139.31,141.10 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:141.10,143.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:144.3,145.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:145.22,147.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:148.3,149.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:149.26,151.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:152.3,152.68 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:152.68,154.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:155.3,156.37 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:156.37,158.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:159.3,160.107 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:162.2,162.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:165.249,166.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:166.24,168.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:169.2,169.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:169.38,171.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:173.2,174.31 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:174.31,175.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:175.32,177.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:180.2,181.34 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:181.34,182.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:182.29,183.9 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:185.3,197.17 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:197.17,199.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:200.3,200.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:200.20,201.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:203.3,203.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:203.37,205.33 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:205.33,206.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:208.4,208.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:208.19,209.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:209.43,210.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:212.5,212.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:214.4,215.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:215.30,216.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:220.2,220.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:223.113,229.2 5 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:231.101,233.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:247.92,251.16 4 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:251.16,253.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:253.8,253.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:253.24,255.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:259.2,272.51 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:272.51,274.38 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:274.38,275.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:276.50,277.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:278.12,279.107 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:287.2,292.26 5 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:292.26,294.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:297.2,297.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:297.19,301.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:303.2,311.42 5 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:311.42,315.3 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:316.2,341.64 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:341.64,342.86 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:342.86,344.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:345.3,345.56 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:345.56,347.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:348.3,360.19 6 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:360.19,364.4 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:365.3,365.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:369.2,370.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:370.15,372.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:372.27,374.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:375.3,375.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:375.27,377.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:380.2,381.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:381.15,387.28 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:387.28,395.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:395.18,397.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:398.4,398.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:398.23,399.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:401.4,401.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:401.30,402.66 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:402.66,403.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:405.5,406.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:406.12,407.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:409.5,409.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:409.28,413.6 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:414.5,415.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:415.30,416.11 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:419.4,420.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:420.30,421.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:424.8,432.28 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:432.28,438.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:438.18,440.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:441.4,441.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:441.23,442.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:444.4,444.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:444.30,445.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:445.40,447.31 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:447.31,448.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:452.4,455.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:455.30,456.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:461.2,465.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:465.17,467.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:469.2,470.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:470.16,472.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:473.2,473.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:20.79,21.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:21.43,23.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:24.2,24.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:24.29,26.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:27.2,27.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:30.40,63.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:65.68,71.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:71.25,74.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:75.2,75.67 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:78.62,83.19 3 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:83.19,87.3 3 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:88.2,88.89 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:91.101,92.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:92.22,94.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:95.2,96.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:96.18,98.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:99.2,100.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:100.16,102.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:103.2,104.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:104.16,106.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:107.2,107.119 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:110.99,111.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:111.22,113.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:114.2,115.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:115.18,117.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:118.2,119.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:119.16,121.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:122.2,122.51 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:122.51,124.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:125.2,126.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:126.16,128.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:129.2,131.15 3 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:131.15,132.69 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:132.69,134.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:135.3,135.58 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:137.2,137.130 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:140.102,142.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:142.16,144.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:145.2,145.64 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:145.64,147.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:148.2,148.113 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:151.109,153.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:153.16,155.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:156.2,157.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:157.16,159.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:160.2,161.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:161.16,163.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:164.2,164.67 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:167.107,169.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:169.16,171.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:172.2,173.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:173.16,175.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:176.2,176.107 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:176.107,178.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:179.2,179.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:180.41,181.63 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:182.41,183.95 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:184.10,185.83 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:189.111,191.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:191.16,193.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:194.2,195.57 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:195.57,197.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:198.2,199.23 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:199.23,201.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:202.2,203.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:203.16,205.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:206.2,206.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:206.17,208.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:209.2,209.108 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:212.63,215.2 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:217.69,219.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:219.16,221.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:222.2,222.79 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:225.60,227.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:227.16,229.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:230.2,230.57 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:233.137,234.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:234.49,236.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:237.2,238.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:238.16,240.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:241.2,243.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:243.16,245.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:246.2,247.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:247.16,249.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:250.2,250.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:250.22,252.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:253.2,253.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:256.142,258.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:258.16,260.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:261.2,262.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:262.16,264.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:265.2,265.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:265.47,267.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:268.2,269.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:269.16,270.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:270.50,272.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:273.3,273.89 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:275.2,275.173 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:278.157,280.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:280.16,282.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:283.2,283.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:283.47,285.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:286.2,287.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:287.16,288.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:288.50,290.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:291.3,291.89 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:293.2,293.169 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:296.104,297.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:297.22,299.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:300.2,301.61 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:301.61,303.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:303.20,304.9 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:307.2,307.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:307.19,309.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:310.2,317.8 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:320.119,322.39 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:322.39,323.81 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:323.81,325.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:327.2,327.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:330.71,332.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:332.16,334.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:335.2,335.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:17.61,105.23 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:105.23,122.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:123.2,123.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:126.104,127.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:127.61,129.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:130.2,130.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:130.38,132.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:133.2,134.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:134.16,136.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:137.2,138.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:138.16,140.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:141.2,147.107 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:147.107,149.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:150.2,151.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:151.16,153.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:154.2,170.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:170.19,172.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:173.2,173.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:176.103,177.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:177.61,179.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:180.2,180.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:180.38,182.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:183.2,184.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:184.16,186.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:187.2,191.106 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:191.106,193.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:194.2,195.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:195.16,197.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:198.2,200.31 3 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:200.31,207.36 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:207.36,218.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:219.3,220.35 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:222.2,230.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:233.107,234.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:234.61,236.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:237.2,237.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:237.38,239.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:240.2,241.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:241.16,243.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:244.2,248.110 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:248.110,250.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:251.2,252.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:252.16,254.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:255.2,256.33 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:256.33,266.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:267.2,275.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:278.108,279.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:279.61,281.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:282.2,282.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:282.37,284.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:285.2,286.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:286.16,288.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:289.2,290.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:290.19,292.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:293.2,293.104 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:293.104,295.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:296.2,297.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:297.16,299.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:300.2,307.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:307.16,309.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:310.2,311.43 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:311.43,318.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:319.2,332.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:332.22,334.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:335.2,335.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:338.108,339.62 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:339.62,341.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:342.2,342.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:342.38,344.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:345.2,346.9 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:346.9,348.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:349.2,350.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:350.16,352.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:353.2,357.16 5 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:357.16,359.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:360.2,370.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:373.109,374.62 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:374.62,376.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:377.2,377.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:377.38,379.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:380.2,381.9 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:381.9,383.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:384.2,385.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:385.16,387.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:388.2,390.32 3 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:390.32,392.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:393.2,394.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:394.16,396.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:397.2,403.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:406.106,407.62 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:407.62,409.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:410.2,410.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:410.38,412.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:413.2,414.9 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:414.9,416.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:417.2,418.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:418.16,420.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:421.2,423.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:423.16,424.41 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:424.41,434.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:435.3,435.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:437.2,445.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:483.65,484.42 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:484.42,485.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:485.39,487.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:489.2,489.85 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:489.85,491.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:492.2,492.95 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:495.102,496.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:496.38,498.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:499.2,499.58 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:499.58,501.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:502.2,502.90 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:505.60,508.2 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:510.66,512.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:512.26,514.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:515.2,515.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:518.69,521.33 3 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:521.33,523.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:523.21,524.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:526.3,526.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:526.34,527.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:529.3,530.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:532.2,532.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:535.63,537.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:537.19,539.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:540.2,541.42 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:541.42,543.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:544.2,544.57 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:544.57,546.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:547.2,547.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:547.54,549.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:550.2,550.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:553.70,557.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:559.66,561.9 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:561.9,563.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:564.2,566.17 3 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:566.17,568.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:569.2,569.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:570.103,572.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:573.34,574.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:575.10,576.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:580.56,581.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:581.37,583.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:584.2,584.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:584.26,586.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:586.37,587.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:589.3,589.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:591.2,591.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:594.90,602.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:604.68,605.71 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:605.71,607.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:607.17,609.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:610.3,610.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:612.2,613.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:613.16,615.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:616.2,617.41 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:617.41,619.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:620.2,620.78 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:623.65,625.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:625.16,627.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:628.2,628.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:628.17,630.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:631.2,631.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:634.51,635.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:635.16,637.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:638.2,638.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:641.56,642.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:642.28,644.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:645.2,646.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:649.92,651.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:651.29,653.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:654.2,654.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:657.86,659.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:659.29,661.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:662.2,662.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:665.94,667.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:667.29,669.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:670.2,670.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:673.98,675.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:675.29,677.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:678.2,678.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:17.93,18.104 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:18.104,20.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:22.2,23.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:23.16,25.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:27.2,28.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:28.19,30.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:32.2,35.33 3 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:35.33,36.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:36.47,39.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:42.2,44.20 3 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:44.20,47.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:48.2,49.68 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:49.68,50.48 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:50.48,52.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:53.3,53.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:53.32,55.23 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:55.23,56.63 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:56.63,58.6 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:59.5,59.53 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:61.4,61.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:64.2,71.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:71.17,73.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:73.8,73.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:73.29,75.36 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:75.36,77.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:78.3,83.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:86.2,86.35 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:86.35,88.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:90.2,97.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:97.16,99.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:101.2,110.28 3 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:110.28,112.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:113.2,124.16 4 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:124.16,126.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:127.2,127.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:133.93,134.35 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:134.35,136.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:138.2,139.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:139.16,141.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:143.2,144.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:144.16,146.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:147.2,147.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:147.17,149.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:151.2,152.33 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:152.33,153.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:153.47,156.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:159.2,160.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:160.16,162.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:164.2,176.26 3 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:176.26,178.23 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:178.23,180.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:181.3,192.5 3 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:195.2,196.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:196.16,198.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:199.2,199.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:22.104,24.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:24.16,26.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:28.2,29.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:29.18,31.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:33.2,33.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:34.13,35.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:36.13,37.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:38.14,39.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:40.16,41.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:42.10,43.95 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:51.67,53.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:57.68,58.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:58.33,60.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:61.2,61.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:67.42,69.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:74.61,76.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:76.26,78.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:79.2,79.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:85.90,86.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:86.49,88.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:90.2,91.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:91.15,93.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:94.2,95.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:95.17,97.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:100.2,103.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:103.16,105.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:107.2,113.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:113.12,115.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:115.18,117.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:118.3,119.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:119.20,121.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:122.3,124.48 3 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:125.8,127.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:129.2,130.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:130.16,132.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:134.2,139.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:145.90,147.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:147.15,149.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:151.2,152.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:152.16,154.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:156.2,157.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:157.16,158.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:158.47,160.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:161.3,161.56 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:164.2,170.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:170.19,173.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:173.8,175.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:176.2,176.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:181.92,183.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:183.16,185.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:187.2,188.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:188.16,190.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:192.2,200.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:200.25,207.28 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:207.28,209.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:210.3,210.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:212.2,212.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:216.93,217.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:217.52,219.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:221.2,222.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:222.15,224.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:226.2,227.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:227.16,229.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:231.2,231.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:231.47,232.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:232.47,234.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:235.3,235.59 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:238.2,241.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:35.127,36.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:36.23,38.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:39.2,40.40 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:40.40,42.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:43.2,43.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:43.37,45.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:46.2,46.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:46.37,48.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:49.2,49.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:52.23,80.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:82.26,140.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:142.92,143.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:143.25,145.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:147.2,148.49 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:148.49,150.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:152.2,152.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:153.17,154.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:154.24,156.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:157.3,158.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:158.17,160.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:161.3,165.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:166.17,167.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:167.22,169.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:170.3,170.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:170.22,172.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:173.3,174.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:174.17,176.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:177.3,181.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:182.16,189.23 7 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:189.23,191.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:192.3,192.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:192.24,194.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:195.3,195.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:195.39,197.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:198.3,207.17 3 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:207.17,209.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:210.3,210.69 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:210.69,212.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:213.3,213.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:214.10,215.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:219.92,220.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:220.25,222.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:224.2,225.49 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:225.49,227.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:229.2,229.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:230.17,232.24 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:232.24,234.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:235.3,236.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:236.17,238.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:239.3,239.59 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:239.59,241.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:242.3,242.81 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:242.81,244.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:245.3,250.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:251.17,253.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:253.22,255.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:256.3,257.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:257.17,259.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:260.3,260.79 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:260.79,262.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:263.3,268.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:269.10,270.66 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:274.91,276.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:276.16,278.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:279.2,279.67 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:279.67,280.76 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:280.76,282.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:285.2,286.52 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:286.52,288.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:289.2,289.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:292.74,294.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:294.16,296.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:297.2,297.62 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:297.62,299.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:300.2,300.68 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:303.109,304.56 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:304.56,306.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:307.2,307.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:307.25,309.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:310.2,310.81 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:310.81,312.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:313.2,313.102 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:313.102,315.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:316.2,316.108 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:316.108,318.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:319.2,319.99 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:319.99,321.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:322.2,322.99 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:322.99,324.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:325.2,325.60 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:325.60,327.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:328.2,328.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:328.34,330.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:331.2,331.114 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:331.114,333.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:334.2,334.66 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:334.66,336.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:337.2,337.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:337.40,339.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:340.2,340.132 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:340.132,342.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:343.2,343.35 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:343.35,345.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:346.2,346.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:349.92,350.103 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:350.103,352.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:354.2,355.52 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:355.52,357.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:358.2,358.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:358.32,360.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:361.2,361.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:364.108,365.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:365.19,367.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:368.2,369.53 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:369.53,371.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:372.2,372.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:372.19,374.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:375.2,375.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:375.39,376.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:376.34,378.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:380.2,380.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:383.66,385.53 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:385.53,387.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:388.2,388.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:388.19,390.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:391.2,391.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:10.101,12.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:12.16,14.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:16.2,18.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:19.16,20.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:21.14,22.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:23.15,24.84 1 0 +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:25.16,26.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:27.10,28.97 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:21.75,23.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:25.41,28.2 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:30.31,37.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:39.38,46.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:48.50,56.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:58.43,70.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:72.80,73.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:73.36,75.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:76.2,76.48 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:76.48,78.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:79.2,79.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:82.97,84.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:84.16,86.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:87.2,88.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:88.16,90.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:91.2,92.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:92.16,94.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:95.2,96.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:96.16,98.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:99.2,99.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:102.104,104.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:104.16,106.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:107.2,108.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:108.16,110.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:111.2,112.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:112.16,114.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:115.2,116.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:116.16,118.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:119.2,119.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:122.96,124.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:124.16,126.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:127.2,128.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:128.19,130.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:131.2,132.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:132.18,134.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:135.2,141.79 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:141.79,143.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:143.17,145.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:146.3,146.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:148.2,148.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:151.77,153.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:153.16,155.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:156.2,157.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:157.19,159.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:160.2,160.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:10.101,12.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:12.16,14.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:16.2,17.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:17.18,19.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:21.2,21.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:22.15,23.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:24.13,25.42 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:26.14,27.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:28.16,29.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:30.16,31.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:32.10,33.102 1 0 diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/repeat-01/create-database.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/repeat-01/create-database.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/repeat-01/create-database.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/repeat-01/create-database.stdout.log new file mode 100644 index 00000000..4b15bd57 --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/repeat-01/create-database.stdout.log @@ -0,0 +1 @@ +CREATE DATABASE diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/repeat-01/create-pgvector.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/repeat-01/create-pgvector.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/repeat-01/create-pgvector.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/repeat-01/create-pgvector.stdout.log new file mode 100644 index 00000000..d26bad14 --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/repeat-01/create-pgvector.stdout.log @@ -0,0 +1 @@ +CREATE EXTENSION diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/repeat-01/database-identity.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/repeat-01/database-identity.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/repeat-01/database-identity.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/repeat-01/database-identity.stdout.log new file mode 100644 index 00000000..adb03acb --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/repeat-01/database-identity.stdout.log @@ -0,0 +1 @@ +{"database" : "engram_prc_rg_test_9d26ac76f6cc9efa_r1", "schema" : "public", "server_version" : "17.10 (Debian 17.10-1.pgdg12+1)", "user" : "engram"} diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/repeat-01/go-test-summary.json b/.agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/repeat-01/go-test-summary.json new file mode 100644 index 00000000..547b6c54 --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/repeat-01/go-test-summary.json @@ -0,0 +1,40 @@ +{ + "schema_version": 1, + "verdict": "FAIL", + "input_path": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\parent-original-red\\repeat-01\\go-test.stdout.jsonl", + "fail_on_unexpected_skip": true, + "allowed_skip_identities": [], + "counts": { + "packages": 1, + "tests": 1, + "passed": 0, + "failed": 1, + "skipped": 0, + "no_tests": 0, + "zero_tests": 0, + "incomplete": 0, + "unexpected_skips": 0, + "malformed_lines": 0 + }, + "packages": [ + { + "package": "github.com/thebtf/engram/internal/mcp", + "outcome": "fail", + "elapsed_seconds": 3.915, + "last_output": "FAIL\tgithub.com/thebtf/engram/internal/mcp\t3.908s", + "tests_observed": 1 + } + ], + "tests": [ + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestEC_F1_TagDerivedBackfill_T007", + "outcome": "fail", + "elapsed_seconds": 3.77, + "last_output": "--- FAIL: TestEC_F1_TagDerivedBackfill_T007 (3.77s)", + "skip_allowed": false + } + ], + "unexpected_skips": [], + "errors": [] +} diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/repeat-01/go-test.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/repeat-01/go-test.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/repeat-01/go-test.stdout.jsonl b/.agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/repeat-01/go-test.stdout.jsonl new file mode 100644 index 00000000..3ac78ddc --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/repeat-01/go-test.stdout.jsonl @@ -0,0 +1,21 @@ +{"Time":"2026-07-11T03:56:05.4077143+03:00","Action":"start","Package":"github.com/thebtf/engram/internal/mcp"} +{"Time":"2026-07-11T03:56:05.5146724+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007"} +{"Time":"2026-07-11T03:56:05.5151729+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":"=== RUN TestEC_F1_TagDerivedBackfill_T007\n"} +{"Time":"2026-07-11T03:56:06.4360756+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":"{\"level\":\"warn\",\"error\":\"ERROR: relation \\\"observation_vectors\\\" does not exist (SQLSTATE 42P01)\",\"time\":\"2026-07-11T03:56:06+03:00\",\"message\":\"migration 040: orphan vector cleanup failed (non-fatal)\"}\n"} +{"Time":"2026-07-11T03:56:06.4360756+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":"{\"level\":\"info\",\"garbage_deleted\":0,\"orphan_vectors_deleted\":0,\"time\":\"2026-07-11T03:56:06+03:00\",\"message\":\"migration 040: garbage cleanup complete\"}\n"} +{"Time":"2026-07-11T03:56:06.4440745+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":"{\"level\":\"info\",\"orphan_vectors_deleted\":0,\"time\":\"2026-07-11T03:56:06+03:00\",\"message\":\"migration 041: orphan vector purge complete\"}\n"} +{"Time":"2026-07-11T03:56:06.4520745+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":"{\"level\":\"info\",\"patterns_deleted\":0,\"time\":\"2026-07-11T03:56:06+03:00\",\"message\":\"migration 042: low-quality pattern purge complete\"}\n"} +{"Time":"2026-07-11T03:56:06.4905759+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":"{\"level\":\"info\",\"total_deleted\":0,\"time\":\"2026-07-11T03:56:06+03:00\",\"message\":\"migration 043: radical observation cleanup complete\"}\n"} +{"Time":"2026-07-11T03:56:07.733613+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":"{\"level\":\"warn\",\"error\":\"ERROR: extension \\\"vectorscale\\\" is not available (SQLSTATE 0A000)\",\"time\":\"2026-07-11T03:56:07+03:00\",\"message\":\"migration 109: vectorscale extension not available, skipping DiskANN index\"}\n"} +{"Time":"2026-07-11T03:56:08.9133229+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":"{\"level\":\"debug\",\"connections\":1,\"time\":\"2026-07-11T03:56:08+03:00\",\"message\":\"Connection pool warmed\"}\n"} +{"Time":"2026-07-11T03:56:08.9378239+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":" store_memory_compat_t007_test.go:157: \n"} +{"Time":"2026-07-11T03:56:08.9378239+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":" \tError Trace:\tD:/Dev/engram/.w/t007-r1-parent-red/internal/mcp/store_memory_compat_t007_test.go:157\n"} +{"Time":"2026-07-11T03:56:08.9378239+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":" \tError: \tShould be true\n"} +{"Time":"2026-07-11T03:56:08.9378239+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":" \tTest: \tTestEC_F1_TagDerivedBackfill_T007\n"} +{"Time":"2026-07-11T03:56:08.9378239+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":" \tMessages: \tglobal-scoped row must be returned by MemoryStore.List within its own project\n"} +{"Time":"2026-07-11T03:56:09.28165+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":"--- FAIL: TestEC_F1_TagDerivedBackfill_T007 (3.77s)\n"} +{"Time":"2026-07-11T03:56:09.28165+03:00","Action":"fail","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Elapsed":3.77} +{"Time":"2026-07-11T03:56:09.28165+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Output":"FAIL\n"} +{"Time":"2026-07-11T03:56:09.2981487+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Output":"coverage: 0.1% of statements\n"} +{"Time":"2026-07-11T03:56:09.3224226+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Output":"FAIL\tgithub.com/thebtf/engram/internal/mcp\t3.908s\n"} +{"Time":"2026-07-11T03:56:09.3224226+03:00","Action":"fail","Package":"github.com/thebtf/engram/internal/mcp","Elapsed":3.915} diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/repeat-01/pg-stat-activity-after.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/repeat-01/pg-stat-activity-after.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/repeat-01/pg-stat-activity-after.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/repeat-01/pg-stat-activity-after.stdout.log new file mode 100644 index 00000000..fe51488c --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/repeat-01/pg-stat-activity-after.stdout.log @@ -0,0 +1 @@ +[] diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/repeat-01/pg-stat-activity-before.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/repeat-01/pg-stat-activity-before.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/repeat-01/pg-stat-activity-before.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/repeat-01/pg-stat-activity-before.stdout.log new file mode 100644 index 00000000..fe51488c --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/repeat-01/pg-stat-activity-before.stdout.log @@ -0,0 +1 @@ +[] diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/repeat-01/repeat-summary.json b/.agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/repeat-01/repeat-summary.json new file mode 100644 index 00000000..458015de --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/repeat-01/repeat-summary.json @@ -0,0 +1,36 @@ +{ + "repeat": 1, + "verdict": "FAIL", + "database": "engram_prc_rg_test_9d26ac76f6cc9efa_r1", + "schema": "public", + "database_schema_identity": "engram_prc_rg_test_9d26ac76f6cc9efa_r1.public", + "database_dsn": "REDACTED_DATABASE_DSN", + "database_create_confirmed": true, + "sequential_execution": { + "package_parallelism": 1, + "test_parallelism": 1 + }, + "race": false, + "connection_budget": 20, + "server_sessions_before": 6, + "server_sessions_after": 6, + "sessions_before": 0, + "sessions_after": 0, + "go_test_exit": 1, + "json_parser_exit": 1, + "coverage_policy": "Targeted", + "coverage_exit": 0, + "cleanup_exit": 0, + "cleanup_status": "PASS", + "required_session_start_execution": { + "schema_version": 1, + "verdict": "NOT_APPLICABLE", + "reason": "only an unfiltered canonical ./... run requires the 12-test session-start execution proof" + }, + "cleanup_summary": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\parent-original-red\\repeat-01\\cleanup\\cleanup.json", + "errors": [ + "go test failed with exit 1", + "go test JSON assertion failed with exit 1" + ], + "artifact_directory": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\parent-original-red\\repeat-01" +} diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/repeat-01/server-connection-count-after.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/repeat-01/server-connection-count-after.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/repeat-01/server-connection-count-after.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/repeat-01/server-connection-count-after.stdout.log new file mode 100644 index 00000000..1e8b3149 --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/repeat-01/server-connection-count-after.stdout.log @@ -0,0 +1 @@ +6 diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/repeat-01/server-connection-count-before.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/repeat-01/server-connection-count-before.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/repeat-01/server-connection-count-before.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/repeat-01/server-connection-count-before.stdout.log new file mode 100644 index 00000000..1e8b3149 --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/repeat-01/server-connection-count-before.stdout.log @@ -0,0 +1 @@ +6 diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/repeat-01/targeted-coverage.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/repeat-01/targeted-coverage.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/repeat-01/targeted-coverage.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/repeat-01/targeted-coverage.stdout.log new file mode 100644 index 00000000..c958686c --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/repeat-01/targeted-coverage.stdout.log @@ -0,0 +1,352 @@ +github.com/thebtf/engram/internal/mcp/audit_helpers.go:33: effectiveAuditWriter 0.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:44: isAuditEnabled 0.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:52: runAuditAsync 0.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:77: marshalState 0.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:92: logAuditCreate 0.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:117: logAuditEdit 0.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:142: logAuditDelete 0.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:166: logAuditGeneric 0.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:189: logAuditSupersede 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:30: parseArgs 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:46: coerceString 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:67: coerceInt 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:97: coerceInt64 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:127: coerceFloat64 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:151: coerceBool 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:177: coerceStringSlice 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:204: coerceInt64Slice 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:222: clampToInt 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:236: clampInt64ToInt 0.0% +github.com/thebtf/engram/internal/mcp/context.go:17: extractProjectFromHeader 0.0% +github.com/thebtf/engram/internal/mcp/context.go:22: contextWithProject 0.0% +github.com/thebtf/engram/internal/mcp/context.go:29: ContextWithProject 0.0% +github.com/thebtf/engram/internal/mcp/context.go:35: projectFromContext 0.0% +github.com/thebtf/engram/internal/mcp/context.go:41: contextWithSession 0.0% +github.com/thebtf/engram/internal/mcp/context.go:48: ContextWithSession 0.0% +github.com/thebtf/engram/internal/mcp/context.go:54: sessionFromContext 0.0% +github.com/thebtf/engram/internal/mcp/context.go:61: actorFromContext 0.0% +github.com/thebtf/engram/internal/mcp/health.go:22: NewMCPHealth 0.0% +github.com/thebtf/engram/internal/mcp/health.go:29: RecordRequest 0.0% +github.com/thebtf/engram/internal/mcp/health.go:36: RecordError 0.0% +github.com/thebtf/engram/internal/mcp/health.go:42: rotateWindowIfNeeded 0.0% +github.com/thebtf/engram/internal/mcp/health.go:55: HandleHealth 0.0% +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:28: ruleGovernanceCaptureEnabled 0.0% +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:39: captureActiveRuleIntent 0.0% +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:104: ruleIntentFingerprint 0.0% +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:113: marshalRuleCandidateIntentResponse 0.0% +github.com/thebtf/engram/internal/mcp/server.go:127: NewServer 100.0% +github.com/thebtf/engram/internal/mcp/server.go:141: SetBackfillStatusFunc 0.0% +github.com/thebtf/engram/internal/mcp/server.go:146: SetVersionedDocumentStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:151: SetIssueStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:156: SetMemoryStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:161: SetMetaMemoryIndex 0.0% +github.com/thebtf/engram/internal/mcp/server.go:166: SetHintQueue 0.0% +github.com/thebtf/engram/internal/mcp/server.go:171: SetStateStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:176: SetDirectiveCaptureService 0.0% +github.com/thebtf/engram/internal/mcp/server.go:181: SetBehavioralRulesStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:186: SetRuleGovernanceStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:191: SetRuleInjectionTelemetryStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:195: SetPromotionStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:199: SetGraphStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:204: SetNodesStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:211: SetAuditStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:216: SetPurgeStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:222: SetCandidateStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:228: SetSnapshotStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:234: SetBulkFacade 0.0% +github.com/thebtf/engram/internal/mcp/server.go:240: setTestAuditWriter 0.0% +github.com/thebtf/engram/internal/mcp/server.go:246: setTestMemoryEditor 0.0% +github.com/thebtf/engram/internal/mcp/server.go:252: setTestMemorySignificanceUpdater 0.0% +github.com/thebtf/engram/internal/mcp/server.go:260: SetWriteLintOrchestrator 0.0% +github.com/thebtf/engram/internal/mcp/server.go:269: SetRedactionRules 0.0% +github.com/thebtf/engram/internal/mcp/server.go:274: SetEmbeddingStores 0.0% +github.com/thebtf/engram/internal/mcp/server.go:282: SetRerankClient 0.0% +github.com/thebtf/engram/internal/mcp/server.go:290: SetStatsDB 0.0% +github.com/thebtf/engram/internal/mcp/server.go:297: HandleRequest 0.0% +github.com/thebtf/engram/internal/mcp/server.go:303: ListTools 0.0% +github.com/thebtf/engram/internal/mcp/server.go:332: Version 0.0% +github.com/thebtf/engram/internal/mcp/server.go:383: Run 0.0% +github.com/thebtf/engram/internal/mcp/server.go:427: handleRequest 0.0% +github.com/thebtf/engram/internal/mcp/server.go:461: handleNotification 0.0% +github.com/thebtf/engram/internal/mcp/server.go:473: handleInitialize 0.0% +github.com/thebtf/engram/internal/mcp/server.go:496: buildInstructions 0.0% +github.com/thebtf/engram/internal/mcp/server.go:660: storeMemoryTool 0.0% +github.com/thebtf/engram/internal/mcp/server.go:712: recallMemoryTool 0.0% +github.com/thebtf/engram/internal/mcp/server.go:805: primaryTools 0.0% +github.com/thebtf/engram/internal/mcp/server.go:942: handleToolsList 0.0% +github.com/thebtf/engram/internal/mcp/server.go:1612: handleToolsCall 0.0% +github.com/thebtf/engram/internal/mcp/server.go:1644: sanitizeToolCallArgs 0.0% +github.com/thebtf/engram/internal/mcp/server.go:1656: callTool 0.0% +github.com/thebtf/engram/internal/mcp/server.go:1874: sendResponse 0.0% +github.com/thebtf/engram/internal/mcp/server.go:1884: sendError 0.0% +github.com/thebtf/engram/internal/mcp/server.go:1896: handleFindSimilarObservations 0.0% +github.com/thebtf/engram/internal/mcp/server.go:1927: handleGetMemoryStats 0.0% +github.com/thebtf/engram/internal/mcp/server.go:2055: handleBackfillStatus 0.0% +github.com/thebtf/engram/internal/mcp/server.go:2071: handleCheckSystemHealth 0.0% +github.com/thebtf/engram/internal/mcp/server.go:2216: handleAnalyzeSearchPatterns 0.0% +github.com/thebtf/engram/internal/mcp/server.go:2246: handleSearchSessions 0.0% +github.com/thebtf/engram/internal/mcp/server.go:2251: handleListSessions 0.0% +github.com/thebtf/engram/internal/mcp/tools_admin.go:18: buildAdminTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_admin.go:68: adminActionsForEnv 33.3% +github.com/thebtf/engram/internal/mcp/tools_admin.go:80: vnextEnabled 0.0% +github.com/thebtf/engram/internal/mcp/tools_admin.go:84: handleAdmin 0.0% +github.com/thebtf/engram/internal/mcp/tools_admin.go:120: handlePurgeProject 0.0% +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:27: ambientHintsEnabledFromEnv 0.0% +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:32: ambientHintsTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:48: handleGetAmbientHints 0.0% +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:86: normalizeAmbientHintsToolLimit 0.0% +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:96: ambientHintItems 0.0% +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:114: errMissingSessionID 0.0% +github.com/thebtf/engram/internal/mcp/tools_brief.go:31: handleGetMemoryBrief 0.0% +github.com/thebtf/engram/internal/mcp/tools_brief.go:107: memoryBriefUsesPrincipalScope 0.0% +github.com/thebtf/engram/internal/mcp/tools_brief.go:115: handlePrincipalMemoryBrief 0.0% +github.com/thebtf/engram/internal/mcp/tools_brief.go:259: truncateBriefContent 0.0% +github.com/thebtf/engram/internal/mcp/tools_brief.go:270: filterInjectionByScope 0.0% +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:25: bulkOpsTools 0.0% +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:95: handleBulkPromote 0.0% +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:154: handleBulkDelete 0.0% +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:211: handleBulkSupersede 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:31: candidateItemFromDomain 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:51: newCandidateReviewSnapshot 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:59: requireCandidateReviewSnapshot 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:68: candidateTools 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:165: handleListCandidates 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:208: handleGetCandidate 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:239: handlePromoteCandidate 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:348: handleRejectCandidate 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:402: handleSupersedeCandidate 0.0% +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:34: codeIntelEnabled 0.0% +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:42: SetCodeChunkStore 0.0% +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:48: codebaseSearchTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:79: codebaseStatusTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:100: handleCodebaseSearch 0.0% +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:194: handleCodebaseStatus 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:21: getVault 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:35: credentialStore 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:49: handleStoreCredential 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:130: handleGetCredential 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:192: handleListCredentials 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:243: handleDeleteCredential 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:302: handleVaultStatus 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:338: expandTagHierarchy 0.0% +github.com/thebtf/engram/internal/mcp/tools_directives.go:16: directivesCaptureEnabledFromEnv 0.0% +github.com/thebtf/engram/internal/mcp/tools_directives.go:20: rememberDirectiveTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_directives.go:38: currentDirectiveCaptureService 0.0% +github.com/thebtf/engram/internal/mcp/tools_directives.go:48: handleRememberDirective 0.0% +github.com/thebtf/engram/internal/mcp/tools_directives.go:72: parseRememberDirectiveArgs 0.0% +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:10: handleDocsConsolidated 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents.go:15: handleListCollections 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents.go:61: handleListDocuments 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents.go:121: handleGetDocument 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents.go:165: handleRemoveDocument 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents.go:197: handleIngestDocument 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents.go:235: handleSearchCollection 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:15: handleDocCreate 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:61: handleDocRead 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:117: handleDocUpdate 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:122: handleDocList 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:175: handleDocHistory 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:232: handleDocComment 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:19: SetExperienceProvider 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:23: experienceHistoryTools 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:40: experienceHistoryReadSchema 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:65: experienceHistoryDetailSchema 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:82: experienceHistoryTriggerEnum 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:91: handleExperienceHistoryRead 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:103: handleExperienceHistoryDetail 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:115: parseExperienceHistoryReadArgs 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:142: parseExperienceHistoryDetailArgs 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:157: experienceHistoryTriggersFromArgs 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:180: marshalExperienceHistory 0.0% +github.com/thebtf/engram/internal/mcp/tools_feedback.go:12: handleFeedbackConsolidated 0.0% +github.com/thebtf/engram/internal/mcp/tools_feedback.go:36: handleSetSessionOutcome 0.0% +github.com/thebtf/engram/internal/mcp/tools_governance.go:27: governanceTools 0.0% +github.com/thebtf/engram/internal/mcp/tools_governance.go:98: handleListSnapshots 0.0% +github.com/thebtf/engram/internal/mcp/tools_governance.go:167: handleRollbackSnapshot 0.0% +github.com/thebtf/engram/internal/mcp/tools_governance.go:215: handlePinSnapshot 0.0% +github.com/thebtf/engram/internal/mcp/tools_governance.go:258: handleRedactionRulesStatus 0.0% +github.com/thebtf/engram/internal/mcp/tools_governance.go:284: resolveGovernanceActor 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:64: handleGraph 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:100: graphAddEdge 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:216: mcpGraphEndpointExists 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:243: mcpGraphEdgeAlreadyExists 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:276: graphAddNode 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:317: graphRemoveEdge 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:332: graphGetEdges 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:397: filterEdgesByNodeType 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:457: graphTraverse 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:480: graphFindPath 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:502: graphSynonyms 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:23: graphCreateEdgeWithGuards 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:80: graphEndpointExistsWithGuards 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:114: graphDuplicateEdgeExists 0.0% +github.com/thebtf/engram/internal/mcp/tools_ingest.go:25: handleIngest 0.0% +github.com/thebtf/engram/internal/mcp/tools_ingest.go:43: ingestDocument 0.0% +github.com/thebtf/engram/internal/mcp/tools_instincts.go:20: handleImportInstincts 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:19: issuesToolSchema 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:109: validateIssueActionParams 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:143: handleIssues 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:189: resolveSourceProject 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:205: handleIssueCreate 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:250: handleIssueList 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:311: handleIssueGet 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:344: handleIssueUpdate 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:382: handleIssueComment 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:408: handleIssueReopen 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:425: handleIssueClose 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:22: handleLifecycle 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:48: lifecycleInfo 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:87: lifecyclePromote 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:118: lifecycleDemote 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:149: lifecycleSetConfidence 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:172: lifecycleSetDefeasibility 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:191: lifecycleSleepStatus 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:197: lifecycleDecayPreview 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:233: marshalJSON 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:35: vnextFEnabled 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:42: isValidPrivacyScope 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:54: derivePrivacyScopeFromLegacy 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:82: deriveLegacyScopeFromPrivacy 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:93: applyPrincipalMemoryMetadata 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:135: addPrincipalMemoryFields 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:161: newScopedWriteLintMemoryStore 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:172: writeLintVisibilityCaller 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:186: writeLintVisibilityOptions 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:192: scopedWriteLintMemoryStore 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:202: filterVisibleWriteGateCandidates 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:214: domainManageAllowed 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:218: List 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:272: writeLintVisibilityFetchLimit 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:286: Get 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:297: Create 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:301: Update 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:305: MarkSuperseded 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:319: effectiveMemoryEditor 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:329: isValidStoreObservationType 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:354: handleStoreMemory 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1111: handleEditMemory 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1218: computeTTLDays 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1258: truncateTitle 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1270: keepRecallMemory 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1280: keepRecallMemoryFilters 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1342: handleRecallMemory 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1690: staleAdvisory 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1700: marshalWithStaleAdvisory 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1727: Rank 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1751: handleRecallMemoryHybrid 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:2252: handleRateMemory 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:2281: handleSuppressMemory 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:17: SetDomainRegistryService 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:21: checkDomainWriteMCP 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:43: addDomainWriteDecisionFields 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:51: marshalStoreMemoryAugmented 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:26: newMemoryStoreSignificanceUpdater 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:33: s6OutcomeEnabledFromEnv 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:37: effectiveMemorySignificanceUpdater 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:47: currentMemorySignificanceUpdater 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:58: rateMemorySignificanceTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:74: handleRateMemorySignificance 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:109: RateMemorySignificance 0.0% +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:18: s2MetaMemoryEnabled 0.0% +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:22: knowAboutTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:39: handleKnowAbout 0.0% +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:104: parseKnowAboutLimit 0.0% +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:118: summarizeMetaIndexTags 0.0% +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:153: summarizeMetaIndexDateRange 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:23: SetPrincipalMemoryQueryService 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:27: principalMemoryQueryTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:52: handleQueryPrincipalMemory 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:134: principalMemoryQueryCaller 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:149: parsePrincipalMemoryQueryLimit 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:160: principalMemoryQueryText 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:167: parsePrincipalMemoryQueryVisibility 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:179: parsePrincipalMemoryQueryOffset 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:190: parsePrincipalMemoryQueryInt 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:215: parsePrincipalMemoryQueryBool 0.0% +github.com/thebtf/engram/internal/mcp/tools_recall.go:28: handleRecall 0.0% +github.com/thebtf/engram/internal/mcp/tools_recall.go:125: parseRecallIncludedPrincipals 0.0% +github.com/thebtf/engram/internal/mcp/tools_recall.go:165: appendRecallIncludedPrincipalMemories 0.0% +github.com/thebtf/engram/internal/mcp/tools_recall.go:223: recallIncludeTargetMatchesCaller 0.0% +github.com/thebtf/engram/internal/mcp/tools_recall.go:231: recallPrincipalQueryItemToMemory 0.0% +github.com/thebtf/engram/internal/mcp/tools_recall.go:247: handleRecallSearch 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:20: currentReviewLoopCandidateLister 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:30: reviewLoopCandidateTools 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:65: reviewLoopReadSchema 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:78: reviewPacketIDSchema 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:91: handleReviewMetricsRead 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:110: handleReviewQueueRead 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:140: handleReviewPacketDetail 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:151: handleReviewPacketPreviewAction 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:167: handleReviewPacketApplyAction 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:189: parseReviewLoopReadArgs 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:212: reviewLoopMCPPacketTypeSupported 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:217: reviewLoopActionFromArgs 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:225: reviewLoopReasonFromArgs 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:233: loadReviewPacketCandidate 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:256: applyReviewPacketPreserve 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:278: applyReviewPacketSuppress 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:296: reviewLoopMemoryFromCandidate 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:320: filterRiskyMCPReviewCandidates 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:330: marshalReviewLoop 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:17: ruleGovernanceReadTools 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:126: handleRuleGovernanceHealth 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:176: handleRuleGovernanceQueue 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:233: handleRuleGovernanceSnapshots 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:278: handleRuleGovernanceUsefulness 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:338: handleRuleGovernanceTransition 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:373: handleRuleGovernancePinSnapshot 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:406: handleRuleGovernanceRollback 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:483: requireRuleGovernanceReadAccess 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:495: requireRuleGovernanceProjectOrAdmin 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:505: ruleGovernanceCallerIsAdmin 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:510: requireRuleGovernanceAdminAccess 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:518: redactRuleGovernanceEvidenceHandles 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:535: redactRuleGovernanceEvidenceHandle 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:553: ruleGovernanceEvidenceHandleHasSensitiveText 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:559: isCanonicalRuleGovernanceEvidenceHandle 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:580: isSafeRuleGovernanceEvidenceID 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:594: parseRuleGovernanceTransitionRequest 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:604: parseRuleGovernanceSince 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:623: boundedRuleGovernanceLimit 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:634: formatRuleGovernanceTime 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:641: formatRuleGovernanceTimePtr 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:649: stringRuleCandidateStatusCounts 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:657: stringRuleVersionStateCounts 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:665: stringRuleArbiterRunStatusCounts 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:673: stringRuleInjectionEventTypeCounts 0.0% +github.com/thebtf/engram/internal/mcp/tools_rules.go:17: handleStoreRule 0.0% +github.com/thebtf/engram/internal/mcp/tools_rules.go:133: handleListRules 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:22: handleSettingsConsolidated 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:51: SetSettingsStore 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:57: settingsStore 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:67: isSecretSettingKey 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:74: requireAdmin 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:85: handleSetSetting 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:145: handleGetSetting 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:181: handleListSettings 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:216: handleDeleteSetting 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:35: resumeScopesFromFields 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:52: stateTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:82: setStateTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:142: handleGetState 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:219: handleSetState 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:274: decodeSessionStateForWrite 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:292: validateSessionStateBudget 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:303: validateNativeResumePacket 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:349: decodeProjectStateForWrite 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:364: requireStateObject 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:383: requireNestedObject 0.0% +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:10: handleStoreConsolidated 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:21: SetTemporalTruthProvider 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:25: temporalTruthEnabledFromEnv 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:30: temporalTruthTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:39: temporalTruthRefreshTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:48: temporalTruthRefreshSchema 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:58: temporalTruthSchema 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:72: currentTemporalTruthProvider 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:82: handleTemporalTruth 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:102: handleTemporalTruthRefresh 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:122: parseTemporalTruthArgs 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:151: parseTemporalTruthRefreshProject 0.0% +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:10: handleVaultConsolidated 0.0% +total: (statements) 0.1% diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/summary.json b/.agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/summary.json new file mode 100644 index 00000000..30895ff7 --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/parent-original-red/summary.json @@ -0,0 +1,67 @@ +{ + "schema_version": 1, + "gate": "release-gates-foundation", + "run_id": "parent-original-red", + "started_at": "2026-07-11T00:55:50.4077959+00:00", + "finished_at": "2026-07-11T00:56:14.9285790+00:00", + "duration_seconds": 24.521, + "verdict": "FAIL", + "counts": { + "requested_repeats": 1, + "completed_repeats": 1, + "passed_repeats": 0, + "failed_repeats": 1, + "child_commands": 16, + "nonzero_child_commands": 2 + }, + "packages": [ + "./internal/mcp" + ], + "run_pattern": "^TestEC_F1_TagDerivedBackfill_T007$", + "coverage_policy": "Targeted", + "connection_budget": 20, + "race": false, + "database_dsn": "REDACTED_DATABASE_DSN", + "environment": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\parent-original-red\\environment.json", + "commands": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\parent-original-red\\commands.json", + "repeats": [ + { + "repeat": 1, + "verdict": "FAIL", + "database": "engram_prc_rg_test_9d26ac76f6cc9efa_r1", + "schema": "public", + "database_schema_identity": "engram_prc_rg_test_9d26ac76f6cc9efa_r1.public", + "database_dsn": "REDACTED_DATABASE_DSN", + "database_create_confirmed": true, + "sequential_execution": { + "package_parallelism": 1, + "test_parallelism": 1 + }, + "race": false, + "connection_budget": 20, + "server_sessions_before": 6, + "server_sessions_after": 6, + "sessions_before": 0, + "sessions_after": 0, + "go_test_exit": 1, + "json_parser_exit": 1, + "coverage_policy": "Targeted", + "coverage_exit": 0, + "cleanup_exit": 0, + "cleanup_status": "PASS", + "required_session_start_execution": { + "schema_version": 1, + "verdict": "NOT_APPLICABLE", + "reason": "only an unfiltered canonical ./... run requires the 12-test session-start execution proof" + }, + "cleanup_summary": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\parent-original-red\\repeat-01\\cleanup\\cleanup.json", + "errors": [ + "go test failed with exit 1", + "go test JSON assertion failed with exit 1" + ], + "artifact_directory": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\parent-original-red\\repeat-01" + } + ], + "errors": [], + "artifact_directory": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\parent-original-red" +} diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/commands.json b/.agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/commands.json new file mode 100644 index 00000000..6a251900 --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/commands.json @@ -0,0 +1,444 @@ +[ + { + "name": "go-version", + "executable": "C:\\Program Files\\Go\\bin\\go.exe", + "arguments": [ + "version" + ], + "environment_keys": [], + "command": "C:\\Program Files\\Go\\bin\\go.exe version", + "started_at": "2026-07-11T00:57:32.0630167+00:00", + "finished_at": "2026-07-11T00:57:32.4057689+00:00", + "duration_seconds": 0.343, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\prove-it-old-assertion\\go-version.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\prove-it-old-assertion\\go-version.stderr.log" + }, + { + "name": "postgres-container-identity", + "executable": "docker", + "arguments": [ + "inspect", + "--format", + "{{.Name}}|{{.Config.Image}}|{{.Image}}|{{.State.Running}}", + "engram-prc-postgres" + ], + "environment_keys": [], + "command": "docker inspect --format {{.Name}}|{{.Config.Image}}|{{.Image}}|{{.State.Running}} engram-prc-postgres", + "started_at": "2026-07-11T00:57:32.4681694+00:00", + "finished_at": "2026-07-11T00:57:32.9588668+00:00", + "duration_seconds": 0.491, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\prove-it-old-assertion\\postgres-container-identity.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\prove-it-old-assertion\\postgres-container-identity.stderr.log" + }, + { + "name": "postgres-server-identity", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT json_build_object('server_version', current_setting('server_version'), 'server_version_num', current_setting('server_version_num'), 'version', version(), 'max_connections', current_setting('max_connections'), 'superuser_reserved_connections', current_setting('superuser_reserved_connections'), 'reserved_connections', COALESCE(NULLIF(current_setting('reserved_connections', true), ''), '0'), 'current_connections', (SELECT count(*)::text FROM pg_stat_activity), 'database', current_database(), 'schema', current_schema(), 'user', current_user)::text;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT json_build_object('server_version', current_setting('server_version'), 'server_version_num', current_setting('server_version_num'), 'version', version(), 'max_connections', current_setting('max_connections'), 'superuser_reserved_connections', current_setting('superuser_reserved_connections'), 'reserved_connections', COALESCE(NULLIF(current_setting('reserved_connections', true), ''), '0'), 'current_connections', (SELECT count(*)::text FROM pg_stat_activity), 'database', current_database(), 'schema', current_schema(), 'user', current_user)::text;", + "started_at": "2026-07-11T00:57:32.9732484+00:00", + "finished_at": "2026-07-11T00:57:33.4487072+00:00", + "duration_seconds": 0.475, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\prove-it-old-assertion\\postgres-server-identity.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\prove-it-old-assertion\\postgres-server-identity.stderr.log" + }, + { + "name": "repeat-1-create-database", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "CREATE DATABASE \"engram_prc_rg_test_c7cfa0692a684a57_r1\" OWNER \"engram\";" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c CREATE DATABASE \"engram_prc_rg_test_c7cfa0692a684a57_r1\" OWNER \"engram\";", + "started_at": "2026-07-11T00:57:33.4958668+00:00", + "finished_at": "2026-07-11T00:57:34.0729155+00:00", + "duration_seconds": 0.577, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\prove-it-old-assertion\\repeat-01\\create-database.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\prove-it-old-assertion\\repeat-01\\create-database.stderr.log" + }, + { + "name": "repeat-1-create-pgvector", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "engram_prc_rg_test_c7cfa0692a684a57_r1", + "-At", + "-F", + "|", + "-c", + "CREATE EXTENSION IF NOT EXISTS vector WITH SCHEMA public;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d engram_prc_rg_test_c7cfa0692a684a57_r1 -At -F | -c CREATE EXTENSION IF NOT EXISTS vector WITH SCHEMA public;", + "started_at": "2026-07-11T00:57:34.0772644+00:00", + "finished_at": "2026-07-11T00:57:34.5167289+00:00", + "duration_seconds": 0.439, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\prove-it-old-assertion\\repeat-01\\create-pgvector.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\prove-it-old-assertion\\repeat-01\\create-pgvector.stderr.log" + }, + { + "name": "repeat-1-database-identity", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "engram_prc_rg_test_c7cfa0692a684a57_r1", + "-At", + "-F", + "|", + "-c", + "SELECT json_build_object('database', current_database(), 'schema', current_schema(), 'server_version', current_setting('server_version'), 'user', current_user)::text;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d engram_prc_rg_test_c7cfa0692a684a57_r1 -At -F | -c SELECT json_build_object('database', current_database(), 'schema', current_schema(), 'server_version', current_setting('server_version'), 'user', current_user)::text;", + "started_at": "2026-07-11T00:57:34.5201913+00:00", + "finished_at": "2026-07-11T00:57:35.0740152+00:00", + "duration_seconds": 0.554, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\prove-it-old-assertion\\repeat-01\\database-identity.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\prove-it-old-assertion\\repeat-01\\database-identity.stderr.log" + }, + { + "name": "repeat-1-pg-stat-before", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT COALESCE(json_agg(row_to_json(s)), '[]'::json)::text FROM (SELECT pid, usename, datname, state, backend_type, application_name, client_addr::text AS client_addr, wait_event_type, wait_event, query_start FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_c7cfa0692a684a57_r1' ORDER BY pid) AS s;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT COALESCE(json_agg(row_to_json(s)), '[]'::json)::text FROM (SELECT pid, usename, datname, state, backend_type, application_name, client_addr::text AS client_addr, wait_event_type, wait_event, query_start FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_c7cfa0692a684a57_r1' ORDER BY pid) AS s;", + "started_at": "2026-07-11T00:57:35.0805302+00:00", + "finished_at": "2026-07-11T00:57:35.6924294+00:00", + "duration_seconds": 0.612, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\prove-it-old-assertion\\repeat-01\\pg-stat-activity-before.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\prove-it-old-assertion\\repeat-01\\pg-stat-activity-before.stderr.log" + }, + { + "name": "repeat-1-server-connection-count-before", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT count(*) FROM pg_stat_activity;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT count(*) FROM pg_stat_activity;", + "started_at": "2026-07-11T00:57:35.6969310+00:00", + "finished_at": "2026-07-11T00:57:36.2240680+00:00", + "duration_seconds": 0.527, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\prove-it-old-assertion\\repeat-01\\server-connection-count-before.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\prove-it-old-assertion\\repeat-01\\server-connection-count-before.stderr.log" + }, + { + "name": "repeat-1-connection-count-before", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT count(*) FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_c7cfa0692a684a57_r1';" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT count(*) FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_c7cfa0692a684a57_r1';", + "started_at": "2026-07-11T00:57:36.2372753+00:00", + "finished_at": "2026-07-11T00:57:37.5142455+00:00", + "duration_seconds": 1.277, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\prove-it-old-assertion\\repeat-01\\connection-count-before.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\prove-it-old-assertion\\repeat-01\\connection-count-before.stderr.log" + }, + { + "name": "repeat-1-go-test", + "executable": "C:\\Program Files\\Go\\bin\\go.exe", + "arguments": [ + "test", + "-json", + "-p", + "1", + "-parallel", + "1", + "-count=1", + "-timeout", + "30m", + "-covermode=atomic", + "-coverprofile=.agent\\reviews\\t007-r1-fresh-checker\\evidence\\prove-it-old-assertion\\repeat-01\\coverage.out", + "-run", + "^TestEC_F1_TagDerivedBackfill_T007$", + "./internal/mcp" + ], + "environment_keys": [ + "DATABASE_DSN", + "DATABASE_MAX_CONNS", + "ENGRAM_RELEASE_GATE_REPEAT", + "ENGRAM_RELEASE_GATE_RUN_ID", + "ENGRAM_TEST_DSN", + "TEST_DATABASE_DSN" + ], + "command": "C:\\Program Files\\Go\\bin\\go.exe test -json -p 1 -parallel 1 -count=1 -timeout 30m -covermode=atomic -coverprofile=.agent\\reviews\\t007-r1-fresh-checker\\evidence\\prove-it-old-assertion\\repeat-01\\coverage.out -run ^TestEC_F1_TagDerivedBackfill_T007$ ./internal/mcp", + "started_at": "2026-07-11T00:57:37.5232982+00:00", + "finished_at": "2026-07-11T00:57:53.4470198+00:00", + "duration_seconds": 15.924, + "exit_code": 1, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\prove-it-old-assertion\\repeat-01\\go-test.stdout.jsonl", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\prove-it-old-assertion\\repeat-01\\go-test.stderr.log" + }, + { + "name": "repeat-1-assert-go-test-json", + "executable": "C:\\Program Files\\PowerShell\\7\\pwsh.exe", + "arguments": [ + "-NoProfile", + "-File", + "D:\\Dev\\engram\\.w\\t007-r1-checker\\scripts\\production-gates\\assert-go-test-json.ps1", + "-InputPath", + ".agent\\reviews\\t007-r1-fresh-checker\\evidence\\prove-it-old-assertion\\repeat-01\\go-test.stdout.jsonl", + "-SummaryPath", + ".agent\\reviews\\t007-r1-fresh-checker\\evidence\\prove-it-old-assertion\\repeat-01\\go-test-summary.json", + "-FailOnUnexpectedSkip" + ], + "environment_keys": [], + "command": "C:\\Program Files\\PowerShell\\7\\pwsh.exe -NoProfile -File D:\\Dev\\engram\\.w\\t007-r1-checker\\scripts\\production-gates\\assert-go-test-json.ps1 -InputPath .agent\\reviews\\t007-r1-fresh-checker\\evidence\\prove-it-old-assertion\\repeat-01\\go-test.stdout.jsonl -SummaryPath .agent\\reviews\\t007-r1-fresh-checker\\evidence\\prove-it-old-assertion\\repeat-01\\go-test-summary.json -FailOnUnexpectedSkip", + "started_at": "2026-07-11T00:57:53.4523468+00:00", + "finished_at": "2026-07-11T00:57:54.2345123+00:00", + "duration_seconds": 0.782, + "exit_code": 1, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\prove-it-old-assertion\\repeat-01\\assert-go-test-json.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\prove-it-old-assertion\\repeat-01\\assert-go-test-json.stderr.log" + }, + { + "name": "repeat-1-targeted-coverage-report", + "executable": "C:\\Program Files\\Go\\bin\\go.exe", + "arguments": [ + "tool", + "cover", + "-func=.agent\\reviews\\t007-r1-fresh-checker\\evidence\\prove-it-old-assertion\\repeat-01\\coverage.out" + ], + "environment_keys": [], + "command": "C:\\Program Files\\Go\\bin\\go.exe tool cover -func=.agent\\reviews\\t007-r1-fresh-checker\\evidence\\prove-it-old-assertion\\repeat-01\\coverage.out", + "started_at": "2026-07-11T00:57:54.2404178+00:00", + "finished_at": "2026-07-11T00:57:55.0462973+00:00", + "duration_seconds": 0.806, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\prove-it-old-assertion\\repeat-01\\targeted-coverage.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\prove-it-old-assertion\\repeat-01\\targeted-coverage.stderr.log" + }, + { + "name": "repeat-1-pg-stat-after", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT COALESCE(json_agg(row_to_json(s)), '[]'::json)::text FROM (SELECT pid, usename, datname, state, backend_type, application_name, client_addr::text AS client_addr, wait_event_type, wait_event, query_start FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_c7cfa0692a684a57_r1' ORDER BY pid) AS s;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT COALESCE(json_agg(row_to_json(s)), '[]'::json)::text FROM (SELECT pid, usename, datname, state, backend_type, application_name, client_addr::text AS client_addr, wait_event_type, wait_event, query_start FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_c7cfa0692a684a57_r1' ORDER BY pid) AS s;", + "started_at": "2026-07-11T00:57:55.0470922+00:00", + "finished_at": "2026-07-11T00:57:55.4076714+00:00", + "duration_seconds": 0.361, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\prove-it-old-assertion\\repeat-01\\pg-stat-activity-after.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\prove-it-old-assertion\\repeat-01\\pg-stat-activity-after.stderr.log" + }, + { + "name": "repeat-1-server-connection-count-after", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT count(*) FROM pg_stat_activity;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT count(*) FROM pg_stat_activity;", + "started_at": "2026-07-11T00:57:55.4104022+00:00", + "finished_at": "2026-07-11T00:57:55.8196344+00:00", + "duration_seconds": 0.409, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\prove-it-old-assertion\\repeat-01\\server-connection-count-after.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\prove-it-old-assertion\\repeat-01\\server-connection-count-after.stderr.log" + }, + { + "name": "repeat-1-connection-count-after", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT count(*) FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_c7cfa0692a684a57_r1';" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT count(*) FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_c7cfa0692a684a57_r1';", + "started_at": "2026-07-11T00:57:55.8213732+00:00", + "finished_at": "2026-07-11T00:57:56.2285013+00:00", + "duration_seconds": 0.407, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\prove-it-old-assertion\\repeat-01\\connection-count-after.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\prove-it-old-assertion\\repeat-01\\connection-count-after.stderr.log" + }, + { + "name": "repeat-1-cleanup", + "executable": "C:\\Program Files\\PowerShell\\7\\pwsh.exe", + "arguments": [ + "-NoProfile", + "-File", + "D:\\Dev\\engram\\.w\\t007-r1-checker\\scripts\\production-gates\\cleanup-db-sessions.ps1", + "-DatabaseName", + "engram_prc_rg_test_c7cfa0692a684a57_r1", + "-SchemaName", + "public", + "-ArtifactRoot", + ".agent\\reviews\\t007-r1-fresh-checker\\evidence\\prove-it-old-assertion\\repeat-01", + "-RunId", + "prove-it-old-assertion-repeat-1", + "-PostgresContainer", + "engram-prc-postgres" + ], + "environment_keys": [ + "ENGRAM_TEST_ADMIN_DSN" + ], + "command": "C:\\Program Files\\PowerShell\\7\\pwsh.exe -NoProfile -File D:\\Dev\\engram\\.w\\t007-r1-checker\\scripts\\production-gates\\cleanup-db-sessions.ps1 -DatabaseName engram_prc_rg_test_c7cfa0692a684a57_r1 -SchemaName public -ArtifactRoot .agent\\reviews\\t007-r1-fresh-checker\\evidence\\prove-it-old-assertion\\repeat-01 -RunId prove-it-old-assertion-repeat-1 -PostgresContainer engram-prc-postgres", + "started_at": "2026-07-11T00:57:56.2324402+00:00", + "finished_at": "2026-07-11T00:57:59.4416146+00:00", + "duration_seconds": 3.209, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\prove-it-old-assertion\\repeat-01\\cleanup-process.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\prove-it-old-assertion\\repeat-01\\cleanup-process.stderr.log" + } +] diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/environment.json b/.agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/environment.json new file mode 100644 index 00000000..4698ed08 --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/environment.json @@ -0,0 +1,52 @@ +{ + "schema_version": 1, + "run_id": "prove-it-old-assertion", + "timestamp": "2026-07-11T00:57:32.0371142+00:00", + "go_version": "go version go1.25.11 windows/amd64", + "postgres": { + "declared_image": "pgvector/pgvector:pg17", + "container": { + "name": "/engram-prc-postgres", + "configured_image": "pgvector/pgvector:pg17", + "image_id": "sha256:feb68f4f15446397d8cac7f4fe48fe4586de83160d1fc48b46283312d1a33966", + "running": true + }, + "server": { + "server_version": "17.10 (Debian 17.10-1.pgdg12+1)", + "server_version_num": "170010", + "version": "PostgreSQL 17.10 (Debian 17.10-1.pgdg12+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 12.2.0-14+deb12u1) 12.2.0, 64-bit", + "max_connections": "100", + "superuser_reserved_connections": "3", + "reserved_connections": "0", + "current_connections": "6", + "database": "postgres", + "schema": "public", + "user": "engram" + }, + "admin_dsn": "postgresql://engram:REDACTED@127.0.0.1:55432/postgres?sslmode=disable" + }, + "packages": [ + "./internal/mcp" + ], + "run_pattern": "^TestEC_F1_TagDerivedBackfill_T007$", + "repeat": 1, + "fail_on_unexpected_skip": true, + "allowed_skip_identities": [], + "coverage_policy": "Targeted", + "connection_budget": 20, + "race": false, + "require_session_start_execution": false, + "required_session_start_test_count": 12, + "sequential_execution": { + "go_package_parallelism": 1, + "go_test_parallelism": 1, + "database_max_connections": 20 + }, + "govulncheck_policy": { + "authoritative": [ + "source scan with tests", + "unstripped binary scan" + ], + "non_authoritative": "stripped binary scan (module-level fallback when symbols are absent)" + } +} diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/go-version.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/go-version.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/go-version.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/go-version.stdout.log new file mode 100644 index 00000000..a857be3f --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/go-version.stdout.log @@ -0,0 +1 @@ +go version go1.25.11 windows/amd64 diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/postgres-container-identity.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/postgres-container-identity.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/postgres-container-identity.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/postgres-container-identity.stdout.log new file mode 100644 index 00000000..c110d492 --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/postgres-container-identity.stdout.log @@ -0,0 +1 @@ +/engram-prc-postgres|pgvector/pgvector:pg17|sha256:feb68f4f15446397d8cac7f4fe48fe4586de83160d1fc48b46283312d1a33966|true diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/postgres-server-identity.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/postgres-server-identity.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/postgres-server-identity.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/postgres-server-identity.stdout.log new file mode 100644 index 00000000..2e33d56e --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/postgres-server-identity.stdout.log @@ -0,0 +1 @@ +{"server_version" : "17.10 (Debian 17.10-1.pgdg12+1)", "server_version_num" : "170010", "version" : "PostgreSQL 17.10 (Debian 17.10-1.pgdg12+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 12.2.0-14+deb12u1) 12.2.0, 64-bit", "max_connections" : "100", "superuser_reserved_connections" : "3", "reserved_connections" : "0", "current_connections" : "6", "database" : "postgres", "schema" : "public", "user" : "engram"} diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/repeat-01/assert-go-test-json.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/repeat-01/assert-go-test-json.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/repeat-01/assert-go-test-json.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/repeat-01/assert-go-test-json.stdout.log new file mode 100644 index 00000000..459ebb80 --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/repeat-01/assert-go-test-json.stdout.log @@ -0,0 +1,2 @@ +go test JSON verdict=FAIL packages=1 tests=1 passed=0 failed=1 skipped=0 unexpected_skips=0 malformed=0 +summary=D:\Dev\engram\.w\t007-r1-checker\.agent\reviews\t007-r1-fresh-checker\evidence\prove-it-old-assertion\repeat-01\go-test-summary.json diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/repeat-01/cleanup-process.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/repeat-01/cleanup-process.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/repeat-01/cleanup-process.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/repeat-01/cleanup-process.stdout.log new file mode 100644 index 00000000..cfe43a85 --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/repeat-01/cleanup-process.stdout.log @@ -0,0 +1,2 @@ +cleanup verdict=PASS database=engram_prc_rg_test_c7cfa0692a684a57_r1 schema=public terminated_sessions=0 remaining_database_count=0 +summary=D:\Dev\engram\.w\t007-r1-checker\.agent\reviews\t007-r1-fresh-checker\evidence\prove-it-old-assertion\repeat-01\cleanup\cleanup.json diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/repeat-01/cleanup/cleanup.json b/.agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/repeat-01/cleanup/cleanup.json new file mode 100644 index 00000000..cde55486 --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/repeat-01/cleanup/cleanup.json @@ -0,0 +1,170 @@ +{ + "schema_version": 1, + "run_id": "prove-it-old-assertion-repeat-1", + "timestamp": "2026-07-11T00:57:59.3574971+00:00", + "verdict": "PASS", + "database": "engram_prc_rg_test_c7cfa0692a684a57_r1", + "schema": "public", + "database_schema_identity": "engram_prc_rg_test_c7cfa0692a684a57_r1.public", + "admin_dsn": "postgresql://engram:REDACTED@127.0.0.1:55432/postgres?sslmode=disable", + "postgres_container": "engram-prc-postgres", + "cleanup_status": "PASS", + "cleanup_attempted": true, + "database_existed_before": true, + "absence_verified": true, + "terminated_sessions": 0, + "remaining_database_count": 0, + "commands": [ + { + "name": "database-exists-before-cleanup", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT count(*) FROM pg_database WHERE datname = 'engram_prc_rg_test_c7cfa0692a684a57_r1';" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT count(*) FROM pg_database WHERE datname = 'engram_prc_rg_test_c7cfa0692a684a57_r1';", + "started_at": "2026-07-11T00:57:56.9048477+00:00", + "finished_at": "2026-07-11T00:57:57.4164874+00:00", + "duration_seconds": 0.512, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\prove-it-old-assertion\\repeat-01\\cleanup\\database-exists-before.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\prove-it-old-assertion\\repeat-01\\cleanup\\database-exists-before.stderr.log" + }, + { + "name": "pg-stat-activity-before-cleanup", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT COALESCE(json_agg(row_to_json(s)), '[]'::json)::text FROM (SELECT pid, usename, datname, state, backend_type, application_name, client_addr::text AS client_addr, wait_event_type, wait_event, query_start FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_c7cfa0692a684a57_r1' ORDER BY pid) AS s;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT COALESCE(json_agg(row_to_json(s)), '[]'::json)::text FROM (SELECT pid, usename, datname, state, backend_type, application_name, client_addr::text AS client_addr, wait_event_type, wait_event, query_start FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_c7cfa0692a684a57_r1' ORDER BY pid) AS s;", + "started_at": "2026-07-11T00:57:57.4860603+00:00", + "finished_at": "2026-07-11T00:57:58.0577057+00:00", + "duration_seconds": 0.572, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\prove-it-old-assertion\\repeat-01\\cleanup\\pg-stat-activity-before.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\prove-it-old-assertion\\repeat-01\\cleanup\\pg-stat-activity-before.stderr.log" + }, + { + "name": "terminate-database-sessions", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT COALESCE(json_agg(row_to_json(s)), '[]'::json)::text FROM (SELECT pid, pg_terminate_backend(pid) AS terminated FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_c7cfa0692a684a57_r1' AND pid <> pg_backend_pid() ORDER BY pid) AS s;" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT COALESCE(json_agg(row_to_json(s)), '[]'::json)::text FROM (SELECT pid, pg_terminate_backend(pid) AS terminated FROM pg_stat_activity WHERE datname = 'engram_prc_rg_test_c7cfa0692a684a57_r1' AND pid <> pg_backend_pid() ORDER BY pid) AS s;", + "started_at": "2026-07-11T00:57:58.0626850+00:00", + "finished_at": "2026-07-11T00:57:58.4590271+00:00", + "duration_seconds": 0.396, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\prove-it-old-assertion\\repeat-01\\cleanup\\terminate-sessions.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\prove-it-old-assertion\\repeat-01\\cleanup\\terminate-sessions.stderr.log" + }, + { + "name": "drop-fresh-database", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "DROP DATABASE IF EXISTS \"engram_prc_rg_test_c7cfa0692a684a57_r1\" WITH (FORCE);" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c DROP DATABASE IF EXISTS \"engram_prc_rg_test_c7cfa0692a684a57_r1\" WITH (FORCE);", + "started_at": "2026-07-11T00:57:58.4667085+00:00", + "finished_at": "2026-07-11T00:57:58.9615983+00:00", + "duration_seconds": 0.495, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\prove-it-old-assertion\\repeat-01\\cleanup\\drop-database.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\prove-it-old-assertion\\repeat-01\\cleanup\\drop-database.stderr.log" + }, + { + "name": "verify-database-absent", + "executable": "docker", + "arguments": [ + "exec", + "engram-prc-postgres", + "psql", + "-X", + "-v", + "ON_ERROR_STOP=1", + "-U", + "engram", + "-d", + "postgres", + "-At", + "-F", + "|", + "-c", + "SELECT count(*) FROM pg_database WHERE datname = 'engram_prc_rg_test_c7cfa0692a684a57_r1';" + ], + "environment_keys": [], + "command": "docker exec engram-prc-postgres psql -X -v ON_ERROR_STOP=1 -U engram -d postgres -At -F | -c SELECT count(*) FROM pg_database WHERE datname = 'engram_prc_rg_test_c7cfa0692a684a57_r1';", + "started_at": "2026-07-11T00:57:58.9651047+00:00", + "finished_at": "2026-07-11T00:57:59.3500053+00:00", + "duration_seconds": 0.385, + "exit_code": 0, + "timed_out": false, + "stdout": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\prove-it-old-assertion\\repeat-01\\cleanup\\verify-database-absent.stdout.log", + "stderr": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\prove-it-old-assertion\\repeat-01\\cleanup\\verify-database-absent.stderr.log" + } + ], + "errors": [] +} diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/repeat-01/cleanup/database-exists-before.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/repeat-01/cleanup/database-exists-before.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/repeat-01/cleanup/database-exists-before.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/repeat-01/cleanup/database-exists-before.stdout.log new file mode 100644 index 00000000..d00491fd --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/repeat-01/cleanup/database-exists-before.stdout.log @@ -0,0 +1 @@ +1 diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/repeat-01/cleanup/drop-database.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/repeat-01/cleanup/drop-database.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/repeat-01/cleanup/drop-database.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/repeat-01/cleanup/drop-database.stdout.log new file mode 100644 index 00000000..ca12dce0 --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/repeat-01/cleanup/drop-database.stdout.log @@ -0,0 +1 @@ +DROP DATABASE diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/repeat-01/cleanup/pg-stat-activity-before.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/repeat-01/cleanup/pg-stat-activity-before.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/repeat-01/cleanup/pg-stat-activity-before.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/repeat-01/cleanup/pg-stat-activity-before.stdout.log new file mode 100644 index 00000000..fe51488c --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/repeat-01/cleanup/pg-stat-activity-before.stdout.log @@ -0,0 +1 @@ +[] diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/repeat-01/cleanup/terminate-sessions.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/repeat-01/cleanup/terminate-sessions.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/repeat-01/cleanup/terminate-sessions.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/repeat-01/cleanup/terminate-sessions.stdout.log new file mode 100644 index 00000000..fe51488c --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/repeat-01/cleanup/terminate-sessions.stdout.log @@ -0,0 +1 @@ +[] diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/repeat-01/cleanup/verify-database-absent.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/repeat-01/cleanup/verify-database-absent.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/repeat-01/cleanup/verify-database-absent.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/repeat-01/cleanup/verify-database-absent.stdout.log new file mode 100644 index 00000000..573541ac --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/repeat-01/cleanup/verify-database-absent.stdout.log @@ -0,0 +1 @@ +0 diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/repeat-01/connection-count-after.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/repeat-01/connection-count-after.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/repeat-01/connection-count-after.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/repeat-01/connection-count-after.stdout.log new file mode 100644 index 00000000..573541ac --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/repeat-01/connection-count-after.stdout.log @@ -0,0 +1 @@ +0 diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/repeat-01/connection-count-before.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/repeat-01/connection-count-before.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/repeat-01/connection-count-before.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/repeat-01/connection-count-before.stdout.log new file mode 100644 index 00000000..573541ac --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/repeat-01/connection-count-before.stdout.log @@ -0,0 +1 @@ +0 diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/repeat-01/coverage.out b/.agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/repeat-01/coverage.out new file mode 100644 index 00000000..52335d8a --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/repeat-01/coverage.out @@ -0,0 +1,3472 @@ +mode: atomic +github.com/thebtf/engram/internal/mcp/audit_helpers.go:33.53,34.30 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:34.30,36.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:37.2,37.25 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:37.25,39.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:40.2,40.12 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:44.28,46.2 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:52.83,53.12 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:53.12,54.16 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:54.16,55.32 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:55.32,61.5 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:63.3,65.33 3 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:65.33,71.4 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:77.54,78.14 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:78.14,80.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:81.2,82.16 2 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:82.16,85.3 2 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:86.2,87.13 2 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:92.91,93.23 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:93.23,95.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:96.2,97.15 2 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:97.15,99.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:100.2,105.65 4 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:105.65,113.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:117.95,118.23 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:118.23,120.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:121.2,122.15 2 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:122.15,124.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:125.2,129.65 5 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:129.65,138.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:142.87,143.23 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:143.23,145.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:146.2,147.15 2 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:147.15,149.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:150.2,153.65 4 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:153.65,161.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:166.96,167.23 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:167.23,169.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:170.2,171.15 2 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:171.15,173.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:174.2,177.63 4 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:177.63,185.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:189.97,190.23 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:190.23,192.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:193.2,194.15 2 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:194.15,196.3 1 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:197.2,200.68 4 0 +github.com/thebtf/engram/internal/mcp/audit_helpers.go:200.68,208.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:30.62,31.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:31.20,33.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:34.2,35.49 2 0 +github.com/thebtf/engram/internal/mcp/coerce.go:35.49,37.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:38.2,38.14 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:38.14,40.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:41.2,41.15 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:46.52,47.14 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:47.14,49.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:50.2,50.23 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:51.14,52.11 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:53.19,54.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:55.15,56.45 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:57.12,58.31 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:59.10,60.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:67.43,68.14 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:68.14,70.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:71.2,71.23 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:72.15,73.23 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:74.19,75.38 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:75.38,77.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:78.3,78.40 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:78.40,80.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:81.3,81.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:82.14,83.56 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:83.56,85.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:86.3,86.54 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:86.54,88.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:89.3,89.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:90.10,91.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:97.49,98.14 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:98.14,100.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:101.2,101.23 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:102.15,103.18 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:104.19,105.38 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:105.38,107.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:108.3,108.40 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:108.40,110.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:111.3,111.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:112.14,113.56 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:113.56,115.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:116.3,116.54 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:116.54,118.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:119.3,119.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:120.10,121.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:127.55,128.14 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:128.14,130.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:131.2,131.23 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:132.15,133.11 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:134.19,135.40 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:135.40,137.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:138.3,138.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:139.14,140.54 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:140.54,142.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:143.3,143.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:144.10,145.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:151.46,152.14 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:152.14,154.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:155.2,155.23 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:156.12,157.11 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:158.14,159.54 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:159.54,161.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:162.3,162.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:163.15,164.16 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:165.19,166.40 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:166.40,168.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:169.3,169.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:170.10,171.20 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:177.40,178.14 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:178.14,180.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:181.2,181.23 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:182.13,184.26 2 0 +github.com/thebtf/engram/internal/mcp/coerce.go:184.26,185.36 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:185.36,187.5 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:189.3,189.16 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:190.16,191.11 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:192.14,193.14 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:193.14,195.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:196.3,196.13 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:197.10,198.13 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:204.38,205.14 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:205.14,207.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:208.2,209.9 2 0 +github.com/thebtf/engram/internal/mcp/coerce.go:209.9,211.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:212.2,213.27 2 0 +github.com/thebtf/engram/internal/mcp/coerce.go:213.27,214.42 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:214.42,216.4 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:218.2,218.15 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:222.32,223.39 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:223.39,225.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:226.2,226.30 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:226.30,228.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:229.2,229.30 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:229.30,231.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:232.2,232.15 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:236.35,237.28 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:237.28,239.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:240.2,240.28 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:240.28,242.3 1 0 +github.com/thebtf/engram/internal/mcp/coerce.go:243.2,243.15 1 0 +github.com/thebtf/engram/internal/mcp/context.go:17.55,19.2 1 0 +github.com/thebtf/engram/internal/mcp/context.go:22.78,24.2 1 0 +github.com/thebtf/engram/internal/mcp/context.go:29.78,31.2 1 0 +github.com/thebtf/engram/internal/mcp/context.go:35.53,38.2 2 0 +github.com/thebtf/engram/internal/mcp/context.go:41.80,43.2 1 0 +github.com/thebtf/engram/internal/mcp/context.go:48.80,50.2 1 0 +github.com/thebtf/engram/internal/mcp/context.go:54.53,57.2 2 0 +github.com/thebtf/engram/internal/mcp/context.go:61.51,62.43 1 0 +github.com/thebtf/engram/internal/mcp/context.go:62.43,64.3 1 0 +github.com/thebtf/engram/internal/mcp/context.go:65.2,65.16 1 0 +github.com/thebtf/engram/internal/mcp/health.go:22.32,26.2 3 0 +github.com/thebtf/engram/internal/mcp/health.go:29.37,33.2 3 0 +github.com/thebtf/engram/internal/mcp/health.go:36.35,40.2 3 0 +github.com/thebtf/engram/internal/mcp/health.go:42.44,45.25 3 0 +github.com/thebtf/engram/internal/mcp/health.go:45.25,47.50 1 0 +github.com/thebtf/engram/internal/mcp/health.go:47.50,50.4 2 0 +github.com/thebtf/engram/internal/mcp/health.go:55.74,60.16 5 0 +github.com/thebtf/engram/internal/mcp/health.go:60.16,62.3 1 0 +github.com/thebtf/engram/internal/mcp/health.go:63.2,71.4 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:28.42,29.65 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:29.65,32.3 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:33.2,33.40 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:33.40,35.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:36.2,36.14 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:39.120,40.69 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:40.69,42.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:43.2,44.19 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:44.19,46.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:47.2,48.17 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:48.17,50.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:51.2,52.59 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:52.59,54.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:55.2,56.20 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:56.20,58.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:59.2,60.17 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:60.17,62.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:63.2,64.21 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:64.21,66.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:67.2,68.22 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:68.22,70.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:71.2,72.23 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:72.23,74.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:76.2,98.19 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:98.19,100.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:101.2,101.66 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:104.52,106.29 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:106.29,108.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:109.2,110.46 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:113.113,123.27 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:123.27,125.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:126.2,127.16 2 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:127.16,129.3 1 0 +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:130.2,130.25 1 0 +github.com/thebtf/engram/internal/mcp/server.go:127.44,138.2 1 1 +github.com/thebtf/engram/internal/mcp/server.go:141.64,143.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:146.78,148.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:151.53,153.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:156.55,158.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:161.58,163.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:166.62,168.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:171.50,173.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:176.78,178.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:181.74,183.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:186.71,189.2 2 0 +github.com/thebtf/engram/internal/mcp/server.go:191.85,193.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:195.61,197.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:199.49,201.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:204.54,206.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:211.53,213.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:216.53,218.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:222.61,224.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:228.59,230.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:234.51,236.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:240.52,242.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:246.55,248.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:252.82,254.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:260.70,262.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:269.68,271.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:274.87,277.2 2 0 +github.com/thebtf/engram/internal/mcp/server.go:282.60,284.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:290.45,292.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:297.77,299.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:303.37,313.38 3 0 +github.com/thebtf/engram/internal/mcp/server.go:313.38,315.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:316.2,317.9 2 0 +github.com/thebtf/engram/internal/mcp/server.go:317.9,319.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:320.2,321.9 2 0 +github.com/thebtf/engram/internal/mcp/server.go:321.9,323.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:324.2,325.9 2 0 +github.com/thebtf/engram/internal/mcp/server.go:325.9,327.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:328.2,328.14 1 0 +github.com/thebtf/engram/internal/mcp/server.go:332.35,334.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:383.49,387.12 3 0 +github.com/thebtf/engram/internal/mcp/server.go:387.12,388.22 1 0 +github.com/thebtf/engram/internal/mcp/server.go:388.22,389.11 1 0 +github.com/thebtf/engram/internal/mcp/server.go:390.22,392.11 2 0 +github.com/thebtf/engram/internal/mcp/server.go:393.12,393.12 0 0 +github.com/thebtf/engram/internal/mcp/server.go:396.4,397.18 2 0 +github.com/thebtf/engram/internal/mcp/server.go:397.18,398.13 1 0 +github.com/thebtf/engram/internal/mcp/server.go:401.4,402.61 2 0 +github.com/thebtf/engram/internal/mcp/server.go:402.61,404.13 2 0 +github.com/thebtf/engram/internal/mcp/server.go:407.4,407.55 1 0 +github.com/thebtf/engram/internal/mcp/server.go:407.55,409.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:411.3,411.28 1 0 +github.com/thebtf/engram/internal/mcp/server.go:414.2,414.9 1 0 +github.com/thebtf/engram/internal/mcp/server.go:415.20,416.19 1 0 +github.com/thebtf/engram/internal/mcp/server.go:417.25,418.17 1 0 +github.com/thebtf/engram/internal/mcp/server.go:418.17,420.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:421.3,421.13 1 0 +github.com/thebtf/engram/internal/mcp/server.go:427.77,428.19 1 0 +github.com/thebtf/engram/internal/mcp/server.go:428.19,431.3 2 0 +github.com/thebtf/engram/internal/mcp/server.go:433.2,433.20 1 0 +github.com/thebtf/engram/internal/mcp/server.go:434.20,435.33 1 0 +github.com/thebtf/engram/internal/mcp/server.go:436.20,437.32 1 0 +github.com/thebtf/engram/internal/mcp/server.go:438.20,439.37 1 0 +github.com/thebtf/engram/internal/mcp/server.go:443.24,444.93 1 0 +github.com/thebtf/engram/internal/mcp/server.go:445.34,446.101 1 0 +github.com/thebtf/engram/internal/mcp/server.go:447.22,448.91 1 0 +github.com/thebtf/engram/internal/mcp/server.go:449.29,450.120 1 0 +github.com/thebtf/engram/internal/mcp/server.go:451.10,456.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:461.51,462.20 1 0 +github.com/thebtf/engram/internal/mcp/server.go:463.50,464.70 1 0 +github.com/thebtf/engram/internal/mcp/server.go:465.46,466.79 1 0 +github.com/thebtf/engram/internal/mcp/server.go:467.10,468.80 1 0 +github.com/thebtf/engram/internal/mcp/server.go:473.59,485.63 2 0 +github.com/thebtf/engram/internal/mcp/server.go:485.63,487.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:489.2,493.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:496.45,503.33 3 0 +github.com/thebtf/engram/internal/mcp/server.go:503.33,505.57 2 0 +github.com/thebtf/engram/internal/mcp/server.go:505.57,506.76 1 0 +github.com/thebtf/engram/internal/mcp/server.go:506.76,507.13 1 0 +github.com/thebtf/engram/internal/mcp/server.go:509.4,509.18 1 0 +github.com/thebtf/engram/internal/mcp/server.go:509.18,511.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:511.10,513.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:514.4,518.11 5 0 +github.com/thebtf/engram/internal/mcp/server.go:522.2,522.19 1 0 +github.com/thebtf/engram/internal/mcp/server.go:660.29,683.21 2 0 +github.com/thebtf/engram/internal/mcp/server.go:683.21,689.3 5 0 +github.com/thebtf/engram/internal/mcp/server.go:690.2,699.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:712.30,765.49 3 0 +github.com/thebtf/engram/internal/mcp/server.go:765.49,789.3 5 0 +github.com/thebtf/engram/internal/mcp/server.go:790.2,799.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:805.40,936.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:942.58,1048.35 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1048.35,1077.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1080.2,1080.33 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1080.33,1090.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1093.2,1093.26 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1093.26,1123.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1124.2,1124.80 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1124.80,1126.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1127.2,1127.55 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1127.55,1129.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1130.2,1130.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1130.38,1132.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1134.2,1134.25 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1134.25,1136.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1138.2,1138.33 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1138.33,1140.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1141.2,1141.69 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1141.69,1143.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1144.2,1144.75 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1144.75,1146.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1148.2,1148.27 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1148.27,1165.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1168.2,1168.76 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1168.76,1191.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1195.2,1195.48 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1195.48,1197.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1201.2,1201.47 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1201.47,1203.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1205.2,1205.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1205.38,1207.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1212.2,1212.21 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1212.21,1214.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1228.2,1228.51 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1228.51,1230.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1233.2,1233.56 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1233.56,1235.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1238.2,1238.71 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1238.71,1298.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1302.2,1302.104 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1302.104,1321.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1324.2,1324.72 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1324.72,1333.154 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1333.154,1334.26 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1334.26,1336.8 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1337.7,1337.16 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1338.35,1340.26 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1340.26,1342.8 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1343.7,1343.18 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1371.2,1371.26 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1371.26,1390.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1393.2,1393.28 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1393.28,1443.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1446.2,1446.28 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1446.28,1478.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1481.2,1481.37 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1481.37,1561.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1564.2,1568.23 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1568.23,1570.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1572.2,1588.57 3 0 +github.com/thebtf/engram/internal/mcp/server.go:1588.57,1591.29 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1591.29,1593.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1594.3,1594.27 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1594.27,1595.29 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1595.29,1597.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1601.2,1607.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1612.79,1614.60 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1614.60,1620.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1622.2,1623.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1623.16,1631.3 3 0 +github.com/thebtf/engram/internal/mcp/server.go:1633.2,1641.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1644.69,1645.34 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1645.34,1647.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1648.2,1649.22 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1649.22,1651.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1652.2,1652.37 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1656.99,1658.14 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1659.16,1660.35 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1661.15,1662.46 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1663.18,1664.49 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1665.15,1666.46 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1667.18,1668.49 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1669.14,1670.45 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1671.15,1672.34 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1676.2,1676.14 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1677.35,1678.52 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1679.26,1680.37 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1681.20,1682.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1683.20,1684.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1685.16,1686.35 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1687.29,1688.40 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1689.33,1690.50 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1691.25,1692.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1693.23,1694.41 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1696.26,1697.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1698.24,1699.42 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1700.22,1701.40 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1702.25,1703.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1704.27,1705.45 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1706.25,1707.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1709.30,1710.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1711.28,1712.42 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1713.17,1714.40 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1715.20,1716.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1717.20,1718.45 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1719.20,1720.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1722.20,1723.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1724.18,1725.36 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1726.20,1727.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1728.18,1729.36 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1730.21,1731.39 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1732.21,1733.39 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1734.26,1735.44 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1736.25,1737.34 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1738.26,1739.44 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1740.24,1741.42 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1742.26,1743.44 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1744.27,1745.45 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1746.22,1747.40 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1748.19,1749.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1750.15,1751.34 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1752.16,1753.35 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1755.21,1756.44 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1757.19,1758.42 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1759.20,1760.44 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1761.22,1762.45 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1763.22,1764.40 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1765.23,1766.41 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1767.20,1768.38 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1769.32,1770.49 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1771.19,1772.37 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1773.19,1774.37 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1775.33,1776.50 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1777.35,1778.52 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1779.24,1780.42 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1781.32,1782.49 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1783.28,1784.46 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1785.21,1786.39 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1787.34,1788.51 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1789.25,1790.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1791.29,1792.46 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1793.26,1794.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1795.27,1796.44 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1798.25,1799.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1800.23,1801.41 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1802.27,1803.45 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1804.26,1805.44 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1806.29,1807.47 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1809.29,1810.46 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1811.27,1812.44 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1813.30,1814.47 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1815.38,1816.54 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1817.36,1818.52 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1820.24,1821.42 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1822.27,1823.45 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1824.22,1825.40 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1826.32,1827.49 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1828.32,1829.49 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1830.31,1831.48 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1832.35,1833.52 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1834.36,1835.53 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1836.36,1837.53 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1838.38,1839.54 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1840.34,1841.51 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1843.22,1844.40 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1845.21,1846.39 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1847.24,1848.42 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1850.25,1851.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1852.25,1853.43 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1859.2,1859.14 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1860.22,1863.131 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1866.51,1867.123 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1868.10,1869.50 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1874.47,1876.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1876.16,1879.3 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1880.2,1880.35 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1884.72,1890.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1896.105,1898.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1898.16,1900.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1902.2,1903.17 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1903.17,1905.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1907.2,1908.17 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1908.17,1910.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1912.2,1918.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1918.16,1920.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1921.2,1921.25 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1927.76,1933.15 3 0 +github.com/thebtf/engram/internal/mcp/server.go:1933.15,1936.17 3 0 +github.com/thebtf/engram/internal/mcp/server.go:1936.17,1938.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1939.3,1939.26 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1943.2,1950.36 3 0 +github.com/thebtf/engram/internal/mcp/server.go:1950.36,1952.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1952.8,1955.29 3 0 +github.com/thebtf/engram/internal/mcp/server.go:1955.29,1958.4 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1959.3,1962.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1966.2,1966.20 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1966.20,1977.20 6 0 +github.com/thebtf/engram/internal/mcp/server.go:1977.20,1979.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1980.3,1980.20 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1980.20,1982.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1985.3,1985.37 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1985.37,1987.30 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1987.30,1988.16 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1988.16,1990.6 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1990.11,1992.6 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1994.4,1995.56 2 0 +github.com/thebtf/engram/internal/mcp/server.go:1995.56,1997.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:1998.4,2003.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2008.2,2008.29 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2008.29,2009.63 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2009.63,2011.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2011.9,2013.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2021.2,2021.29 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2021.29,2029.38 3 0 +github.com/thebtf/engram/internal/mcp/server.go:2029.38,2031.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2031.9,2033.31 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2033.31,2035.30 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2035.30,2037.6 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2039.4,2042.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2046.2,2047.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2047.16,2049.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2050.2,2050.25 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2055.57,2056.33 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2056.33,2058.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2059.2,2060.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2060.16,2062.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2063.2,2064.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2064.16,2066.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2067.2,2067.23 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2071.79,2105.15 6 0 +github.com/thebtf/engram/internal/mcp/server.go:2105.15,2107.17 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2107.17,2111.4 3 0 +github.com/thebtf/engram/internal/mcp/server.go:2111.9,2112.17 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2112.17,2114.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2115.4,2117.26 3 0 +github.com/thebtf/engram/internal/mcp/server.go:2117.26,2119.5 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2119.10,2121.29 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2121.29,2123.6 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2125.4,2129.25 5 0 +github.com/thebtf/engram/internal/mcp/server.go:2130.19,2130.19 0 0 +github.com/thebtf/engram/internal/mcp/server.go:2132.20,2134.106 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2135.12,2137.103 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2140.8,2143.3 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2144.2,2150.49 3 0 +github.com/thebtf/engram/internal/mcp/server.go:2150.49,2152.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2152.8,2154.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2155.2,2168.27 4 0 +github.com/thebtf/engram/internal/mcp/server.go:2168.27,2170.17 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2170.17,2173.4 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2173.9,2175.4 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2177.2,2182.40 4 0 +github.com/thebtf/engram/internal/mcp/server.go:2182.40,2183.21 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2184.20,2185.20 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2186.19,2187.19 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2191.2,2191.24 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2191.24,2193.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2193.8,2193.30 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2193.30,2195.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2198.2,2198.28 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2198.28,2200.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2203.2,2203.29 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2203.29,2205.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2207.2,2208.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2208.16,2210.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2211.2,2211.28 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2216.103,2218.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2218.16,2220.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2222.2,2223.15 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2223.15,2225.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2227.2,2239.16 2 0 +github.com/thebtf/engram/internal/mcp/server.go:2239.16,2241.3 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2242.2,2242.25 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2246.93,2248.2 1 0 +github.com/thebtf/engram/internal/mcp/server.go:2251.91,2253.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:18.28,29.20 4 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:29.20,33.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:35.2,44.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:68.36,69.49 1 1 +github.com/thebtf/engram/internal/mcp/tools_admin.go:69.49,74.3 4 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:75.2,75.25 1 1 +github.com/thebtf/engram/internal/mcp/tools_admin.go:80.26,82.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:84.89,86.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:86.16,88.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:89.2,90.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:90.18,92.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:94.2,94.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:95.15,96.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:97.26,98.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:99.25,100.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:101.23,105.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:105.22,107.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:108.3,108.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:109.10,110.114 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:120.92,126.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:126.26,128.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:130.2,131.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:131.19,133.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:134.2,135.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:135.19,137.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:138.2,138.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:138.24,140.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:142.2,142.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:142.25,144.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:146.2,147.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:147.16,149.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_admin.go:151.2,151.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:27.40,30.2 2 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:32.30,46.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:48.99,49.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:49.34,51.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:52.2,52.69 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:52.69,54.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:56.2,57.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:57.16,59.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:60.2,61.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:61.21,63.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:64.2,67.26 3 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:67.26,69.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:70.2,71.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:71.25,73.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:75.2,77.44 3 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:77.44,79.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:80.2,80.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:80.33,82.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:83.2,83.81 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:86.52,87.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:87.16,89.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:90.2,90.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:90.15,92.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:93.2,93.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:96.73,97.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:97.21,99.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:100.2,101.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:101.29,110.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:111.2,111.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:114.34,116.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:31.98,32.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:32.52,34.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:35.2,35.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:35.26,37.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:39.2,40.49 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:40.49,42.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:43.2,43.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:43.21,45.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:46.2,46.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:46.21,48.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:49.2,49.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:49.18,51.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:52.2,52.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:52.18,54.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:56.2,56.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:56.38,58.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:60.2,61.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:61.16,63.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:68.2,70.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:70.26,77.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:79.2,81.36 3 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:81.36,84.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:86.2,89.28 3 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:89.28,90.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:90.39,91.9 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:93.3,97.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:100.2,104.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:107.60,113.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:115.101,116.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:116.38,118.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:120.2,122.21 3 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:122.21,123.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:123.26,125.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:126.3,126.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:126.23,128.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:129.8,130.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:130.26,132.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:133.3,133.68 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:133.68,135.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:137.2,140.20 3 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:141.17,142.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:143.67,143.67 0 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:144.10,145.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:148.2,162.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:162.16,164.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:165.2,165.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:165.19,173.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:174.2,174.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:174.30,176.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:177.2,177.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:177.31,179.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:181.2,182.36 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:182.36,196.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:198.2,199.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:199.19,201.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:202.2,203.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:203.18,205.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:206.2,207.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:207.21,209.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:210.2,211.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:211.25,213.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:214.2,225.21 3 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:225.21,227.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:228.2,228.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:228.25,230.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:231.2,231.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:231.18,233.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:235.2,244.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:244.21,246.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:247.2,247.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:247.25,249.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:250.2,250.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:250.18,252.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:253.2,253.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:253.24,255.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:256.2,256.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:259.50,261.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:261.22,263.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:264.2,264.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:270.90,272.42 2 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:272.42,276.3 3 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:277.2,281.27 3 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:281.27,282.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:282.45,284.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_brief.go:286.2,286.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:25.28,88.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:95.95,96.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:96.22,98.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:99.2,100.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:100.32,102.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:104.2,105.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:105.16,107.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:109.2,114.35 3 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:114.35,121.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:123.2,123.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:123.25,125.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:127.2,134.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:134.16,136.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:138.2,146.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:154.94,155.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:155.22,157.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:158.2,159.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:159.32,161.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:163.2,164.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:164.16,166.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:168.2,172.35 3 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:172.35,179.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:181.2,181.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:181.25,183.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:185.2,192.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:192.16,194.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:196.2,203.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:211.97,212.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:212.22,214.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:215.2,216.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:216.32,218.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:220.2,221.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:221.16,223.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:225.2,229.35 3 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:229.35,236.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:238.2,238.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:238.25,240.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:242.2,249.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:249.16,251.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:253.2,260.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:31.80,32.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:32.14,34.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:35.2,48.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:51.136,53.51 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:53.51,55.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:56.2,56.83 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:59.94,60.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:60.21,62.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:63.2,63.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:68.30,162.2 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:165.98,166.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:166.49,168.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:169.2,170.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:170.16,172.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:173.2,174.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:174.19,176.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:177.2,179.17 3 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:179.17,181.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:183.2,184.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:184.16,186.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:188.2,189.31 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:189.31,190.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:190.15,191.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:193.3,193.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:196.2,201.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:201.16,203.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:204.2,204.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:208.96,209.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:209.49,211.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:212.2,213.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:213.16,215.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:216.2,217.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:217.13,219.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:221.2,222.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:222.16,224.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:225.2,225.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:225.22,227.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:229.2,230.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:230.16,232.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:233.2,233.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:239.100,240.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:240.22,242.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:243.2,244.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:244.16,246.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:247.2,248.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:248.13,250.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:255.2,256.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:256.12,263.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:263.30,264.77 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:264.77,269.5 4 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:271.3,272.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:272.21,274.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:275.3,275.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:279.2,279.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:279.29,281.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:284.2,285.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:285.16,287.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:288.2,288.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:288.22,290.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:291.2,291.55 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:291.55,293.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:294.2,294.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:294.74,296.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:297.2,298.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:298.16,300.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:306.2,307.41 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:307.41,309.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:310.2,324.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:324.16,325.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:325.50,327.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:328.3,328.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:330.2,330.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:330.38,332.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:334.2,341.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:341.16,343.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:344.2,344.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:348.99,349.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:349.49,351.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:352.2,353.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:353.16,355.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:356.2,357.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:357.13,359.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:360.2,362.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:362.16,364.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:365.2,365.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:365.22,367.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:368.2,368.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:368.74,370.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:371.2,372.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:372.16,374.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:375.2,375.85 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:375.85,377.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:379.2,380.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:380.16,381.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:381.50,383.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:384.3,384.60 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:386.2,386.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:386.20,388.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:390.2,395.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:395.16,397.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:398.2,398.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:402.102,403.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:403.49,405.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:406.2,407.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:407.16,409.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:410.2,411.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:411.13,413.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:414.2,415.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:415.16,417.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:418.2,418.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:418.22,420.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:421.2,421.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:421.74,423.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:424.2,425.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:425.16,427.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:428.2,428.88 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:428.88,430.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:432.2,433.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:433.16,434.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:434.50,436.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:437.3,437.63 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:439.2,439.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:439.20,441.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:443.2,448.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:448.16,450.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_candidates.go:451.2,451.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:34.30,36.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:42.61,44.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:48.32,75.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:79.32,94.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:100.98,101.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:101.25,103.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:104.2,104.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:104.29,106.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:108.2,113.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:113.17,114.55 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:114.55,116.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:118.2,118.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:118.24,120.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:121.2,121.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:121.23,123.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:124.2,124.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:124.23,126.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:134.2,135.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:135.21,137.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:142.2,147.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:147.16,149.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:154.2,165.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:165.25,175.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:177.2,183.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:183.16,185.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:186.2,186.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:194.98,195.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:195.25,197.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:198.2,198.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:198.29,200.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:202.2,205.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:205.17,207.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:208.2,209.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:209.21,211.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:213.2,214.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:214.16,216.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:217.2,218.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:218.16,220.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:221.2,222.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:222.16,224.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:226.2,231.11 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:231.11,233.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:235.2,236.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:236.16,238.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:239.2,239.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:21.52,22.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:22.24,25.28 3 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:25.28,27.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:29.2,29.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:35.72,37.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:37.15,39.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:41.2,42.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:42.16,44.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:45.2,45.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:49.99,51.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:51.16,53.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:55.2,56.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:56.16,58.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:60.2,72.23 7 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:72.23,74.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:75.2,75.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:75.24,77.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:78.2,78.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:78.24,80.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:81.2,81.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:82.27,82.27 0 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:84.10,85.93 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:87.2,87.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:87.30,89.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:90.2,90.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:90.26,92.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:94.2,95.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:95.16,97.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:99.2,100.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:100.16,102.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:104.2,112.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:112.16,114.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:116.2,123.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:123.16,125.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:126.2,126.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:130.97,132.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:132.16,134.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:136.2,137.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:137.16,139.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:141.2,147.23 4 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:147.23,149.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:150.2,150.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:150.26,152.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:154.2,155.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:155.16,157.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:159.2,160.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:160.16,161.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:161.47,163.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:164.3,164.51 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:167.2,167.97 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:167.97,172.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:174.2,175.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:175.16,177.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:179.2,185.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:185.16,187.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:188.2,188.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:192.99,194.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:194.16,196.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:198.2,199.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:199.16,201.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:203.2,207.26 3 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:207.26,209.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:211.2,212.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:212.16,214.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:216.2,223.26 3 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:223.26,229.28 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:229.28,231.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:232.3,232.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:235.2,236.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:236.16,238.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:239.2,239.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:243.100,245.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:245.16,247.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:249.2,250.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:250.16,252.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:254.2,262.23 5 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:262.23,264.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:265.2,265.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:265.24,267.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:268.2,268.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:269.27,269.27 0 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:271.10,272.93 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:274.2,274.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:274.30,276.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:277.2,277.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:277.26,279.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:281.2,281.71 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:281.71,282.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:282.47,284.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:285.3,285.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:288.2,293.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:293.16,295.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:296.2,296.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:302.92,309.19 5 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:309.19,310.53 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:310.53,313.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:316.2,317.51 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:317.51,318.66 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:318.66,320.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:323.2,331.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:331.16,333.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:334.2,334.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:338.46,342.32 4 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:342.32,343.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:343.20,346.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:348.2,350.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:350.26,352.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:352.27,353.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:353.13,355.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:356.4,356.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:358.3,358.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_credential.go:360.2,360.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:16.45,18.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:20.35,36.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:38.84,39.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:39.40,41.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:42.2,42.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:42.50,44.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:45.2,45.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:48.101,50.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:50.16,52.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:53.2,54.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:54.16,56.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:57.2,58.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:58.19,60.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:61.2,62.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:62.21,64.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:65.2,66.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:66.16,68.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:69.2,69.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:72.102,74.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:74.16,76.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_directives.go:77.2,82.8 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:10.100,12.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:12.16,14.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:16.2,17.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:17.18,19.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:21.2,21.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:22.16,23.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:24.14,25.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:26.14,27.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:28.17,29.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:30.17,31.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:32.21,33.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:34.19,35.42 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:36.17,37.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:38.16,39.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:40.16,41.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:42.21,43.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:44.10,45.167 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:15.77,16.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:16.33,18.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:20.2,21.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:21.27,23.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:25.2,26.28 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:26.28,29.17 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:29.17,31.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:34.2,41.32 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:41.32,46.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:46.20,48.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:49.3,49.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:52.2,53.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:53.16,55.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:57.2,57.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:61.97,62.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:62.28,64.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:66.2,67.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:67.16,69.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:71.2,75.29 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:75.29,77.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:79.2,80.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:80.16,82.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:84.2,84.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:84.20,86.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:88.2,97.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:97.25,103.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:103.20,105.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:106.3,106.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:106.19,108.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:109.3,109.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:112.2,113.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:113.16,115.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:117.2,117.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:121.95,122.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:122.28,124.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:126.2,127.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:127.16,129.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:131.2,137.50 4 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:137.50,139.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:141.2,142.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:142.16,144.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:145.2,145.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:145.16,147.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:149.2,149.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:149.21,151.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:153.2,154.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:154.16,156.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:157.2,157.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:157.20,159.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:161.2,161.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:165.98,166.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:166.28,168.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:170.2,171.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:171.16,173.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:175.2,181.50 4 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:181.50,183.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:185.2,185.96 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:185.96,187.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:189.2,189.88 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:197.98,198.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:198.28,200.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:202.2,203.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:203.16,205.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:207.2,217.74 6 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:217.74,219.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:222.2,223.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:223.16,225.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:227.2,229.156 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:235.98,237.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:237.16,239.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:241.2,247.24 4 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:247.24,249.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:252.2,253.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:253.29,255.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents.go:256.2,256.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:15.93,16.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:16.37,18.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:20.2,21.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:21.16,23.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:25.2,32.16 7 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:32.16,34.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:35.2,35.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:35.19,37.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:38.2,38.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:38.19,40.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:42.2,43.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:43.16,45.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:47.2,54.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:54.16,56.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:57.2,57.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:61.91,62.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:62.37,64.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:66.2,67.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:67.16,69.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:71.2,73.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:73.16,75.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:76.2,76.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:76.19,78.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:80.2,81.43 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:81.43,83.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:83.19,85.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:86.3,86.79 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:87.8,89.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:90.2,90.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:90.16,91.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:91.45,93.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:94.3,94.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:97.2,110.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:110.16,112.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:113.2,113.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:117.93,119.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:122.91,123.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:123.37,125.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:127.2,128.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:128.16,130.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:132.2,133.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:133.19,135.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:136.2,141.16 5 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:141.16,143.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:145.2,155.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:155.25,165.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:167.2,168.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:168.16,170.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:171.2,171.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:175.94,176.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:176.37,178.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:180.2,181.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:181.16,183.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:185.2,187.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:187.16,189.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:190.2,190.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:190.19,192.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:193.2,196.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:196.16,198.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:200.2,208.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:208.25,216.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:218.2,225.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:225.16,227.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:228.2,228.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:232.94,233.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:233.37,235.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:237.2,238.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:238.16,240.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:242.2,243.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:243.21,245.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:246.2,248.19 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:248.19,250.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:252.2,253.46 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:253.46,255.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:255.13,257.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:259.2,259.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:259.44,261.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:261.13,263.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:266.2,267.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:267.16,269.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:271.2,278.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:278.16,280.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:281.2,281.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:19.69,21.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:23.38,38.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:40.51,63.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:65.53,80.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:82.46,85.32 3 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:85.32,87.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:88.2,88.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:91.105,93.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:93.16,95.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:96.2,97.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:97.16,99.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:100.2,100.70 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:103.107,105.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:105.16,107.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:108.2,109.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:109.16,111.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:112.2,112.72 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:115.101,117.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:117.16,119.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:120.2,121.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:121.17,123.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:124.2,139.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:142.109,144.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:144.16,146.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:147.2,154.8 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:157.100,159.28 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:159.28,161.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:161.18,163.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:164.3,164.62 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:166.2,167.72 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:167.72,169.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:170.2,170.53 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:170.53,172.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:173.2,174.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:174.26,176.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:177.2,177.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:180.73,182.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:182.16,184.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:185.2,185.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:12.104,14.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:14.16,16.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:18.2,19.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:19.18,21.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:23.2,23.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:24.14,25.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:26.18,27.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:28.17,29.46 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:30.10,31.96 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:36.101,37.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:37.27,39.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:41.2,42.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:42.16,44.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:46.2,47.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:47.21,49.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:50.2,51.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:51.19,53.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:54.2,54.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:55.52,55.52 0 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:56.10,57.101 1 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:59.2,61.93 2 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:61.93,64.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_feedback.go:66.2,70.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:27.31,94.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:98.97,100.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:100.26,102.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:103.2,103.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:103.28,105.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:107.2,108.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:108.16,110.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:112.2,115.15 4 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:115.15,117.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:118.2,118.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:118.17,120.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:122.2,123.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:123.16,125.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:127.2,140.29 3 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:140.29,151.31 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:151.31,154.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:155.3,155.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:158.2,162.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:167.100,169.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:169.26,171.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:172.2,172.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:172.28,174.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:175.2,175.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:175.26,177.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:179.2,180.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:180.16,182.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:184.2,185.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:185.22,187.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:189.2,190.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:190.20,191.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:191.54,199.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:200.3,200.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:200.61,202.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:203.3,203.58 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:206.2,211.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:215.95,217.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:217.32,219.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:220.2,220.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:220.28,222.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:224.2,225.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:225.16,227.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:229.2,230.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:230.22,232.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:234.2,234.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:234.61,236.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:239.2,239.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:239.25,246.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:248.2,252.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:258.104,260.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:260.26,262.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:267.2,271.20 3 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:271.20,275.3 3 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:275.8,279.3 3 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:280.2,280.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:284.60,285.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:285.30,287.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:288.2,288.42 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:288.42,290.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_governance.go:291.2,291.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:64.89,65.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:65.25,67.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:69.2,70.49 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:70.49,72.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:74.2,74.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:75.18,76.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:77.21,78.35 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:79.19,80.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:81.18,82.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:83.19,84.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:85.18,86.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:87.18,91.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:91.23,93.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:94.3,94.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:95.10,96.62 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:100.81,103.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:103.19,105.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:106.2,107.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:107.19,109.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:112.2,112.46 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:112.46,114.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:115.2,115.46 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:115.46,117.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:122.2,122.66 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:122.66,124.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:127.2,127.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:127.25,128.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:128.22,130.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:131.8,132.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:132.26,134.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:138.2,138.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:138.25,139.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:139.22,141.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:142.8,143.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:143.26,145.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:148.2,148.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:148.22,150.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:151.2,151.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:151.38,153.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:154.2,154.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:154.19,156.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:159.2,161.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:161.25,164.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:165.2,165.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:165.25,168.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:169.2,171.23 3 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:171.23,174.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:175.2,175.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:175.23,178.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:180.2,193.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:193.16,195.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:198.2,199.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:199.29,201.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:202.2,202.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:202.29,204.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:205.2,213.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:216.121,217.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:217.28,218.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:218.26,220.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:221.3,222.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:222.17,223.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:223.49,225.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:226.4,226.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:228.3,228.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:230.2,230.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:230.26,232.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:233.2,234.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:234.16,235.48 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:235.48,237.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:238.3,238.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:240.2,240.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:243.101,248.36 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:248.36,250.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:250.8,252.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:253.2,253.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:253.16,255.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:256.2,256.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:256.32,257.128 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:257.128,262.72 5 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:262.72,264.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:267.2,267.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:276.81,277.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:277.25,279.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:280.2,280.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:280.22,282.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:283.2,283.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:283.39,285.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:286.2,286.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:286.25,288.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:289.2,289.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:289.21,291.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:292.2,293.14 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:293.14,295.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:296.2,305.16 5 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:305.16,307.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:308.2,314.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:317.84,318.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:318.19,320.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:321.2,323.63 3 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:323.63,325.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:326.2,329.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:332.82,333.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:333.38,335.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:336.2,337.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:338.18,339.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:340.18,341.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:345.2,345.59 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:345.59,347.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:349.2,351.21 3 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:351.21,353.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:353.8,356.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:357.2,357.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:357.16,359.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:366.2,367.41 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:367.41,369.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:371.2,378.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:397.115,398.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:398.15,400.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:403.2,404.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:404.26,405.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:405.28,407.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:408.3,408.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:408.28,410.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:412.2,412.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:412.23,415.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:420.2,426.12 4 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:426.12,427.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:427.27,429.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:429.18,431.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:433.4,433.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:433.33,435.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:440.2,441.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:441.26,442.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:442.28,443.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:443.49,445.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:448.3,448.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:448.28,449.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:449.49,451.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:454.2,454.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:457.82,458.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:458.21,460.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:461.2,462.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:462.16,464.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:465.2,465.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:465.36,467.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:468.2,469.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:469.16,471.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:472.2,477.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:480.82,481.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:481.40,483.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:484.2,485.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:485.19,487.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:488.2,489.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:489.16,491.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:492.2,499.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:502.82,503.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:503.21,505.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:506.2,507.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:507.16,509.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph.go:510.2,514.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:23.179,24.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:24.22,26.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:28.2,32.22 4 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:32.22,34.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:35.2,36.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:36.22,38.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:40.2,41.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:41.26,43.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:44.2,44.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:44.26,46.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:47.2,47.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:47.30,49.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:50.2,50.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:50.30,52.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:54.2,55.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:55.16,57.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:58.2,58.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:58.13,60.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:61.2,62.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:62.16,64.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:65.2,65.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:65.13,67.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:69.2,70.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:70.16,72.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:73.2,73.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:73.15,75.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:77.2,77.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:80.172,81.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:81.28,82.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:82.23,84.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:85.3,85.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:85.18,87.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:88.3,89.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:89.17,90.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:90.49,92.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:93.4,93.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:95.3,95.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:98.2,98.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:98.24,100.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:101.2,101.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:101.19,103.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:104.2,105.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:105.16,106.48 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:106.48,108.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:109.3,109.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:111.2,111.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:114.119,116.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:116.22,118.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:119.2,120.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:120.22,122.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:124.2,126.26 3 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:126.26,127.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:127.36,129.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:130.3,130.105 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:131.8,132.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:132.32,134.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:135.3,135.103 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:137.2,137.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:137.16,139.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:141.2,141.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:141.32,143.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:143.27,145.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:146.3,147.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:147.27,149.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:150.3,150.106 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:150.106,151.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:153.3,153.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:153.27,154.114 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:154.114,155.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:157.9,157.104 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:157.104,158.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:160.3,160.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:160.27,161.114 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:161.114,162.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:164.9,164.104 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:164.104,165.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:167.3,167.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:169.2,169.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:25.90,26.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:26.26,28.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:30.2,31.49 2 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:31.49,33.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:35.2,35.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:36.16,37.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:38.10,39.63 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:43.84,44.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:44.21,46.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:47.2,47.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:47.25,49.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:50.2,50.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:50.21,52.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:53.2,53.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:53.21,55.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:57.2,58.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:59.18,60.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:61.15,62.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:63.24,64.42 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:65.10,66.108 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:69.2,70.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:70.22,72.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:73.2,74.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:74.29,76.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:78.2,78.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:78.14,85.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:87.2,89.37 3 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:89.37,92.21 3 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:92.21,94.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:97.2,100.31 4 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:100.31,102.38 2 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:102.38,104.37 2 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:104.37,106.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:109.3,122.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:122.26,124.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:125.3,125.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:125.19,127.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:131.3,133.39 3 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:133.39,135.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:135.9,137.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:138.3,138.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:138.17,140.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:142.3,142.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:142.34,144.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:145.3,145.11 1 0 +github.com/thebtf/engram/internal/mcp/tools_ingest.go:148.2,155.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:20.99,22.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:22.16,24.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:26.2,31.44 3 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:31.44,32.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:32.33,33.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:33.43,38.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:43.2,43.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:43.49,45.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:46.2,46.48 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:46.48,48.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:50.2,52.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:52.27,55.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:55.8,60.24 3 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:60.24,62.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:64.3,64.57 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:64.57,66.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:68.3,68.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:71.2,71.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:71.16,73.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:75.2,76.23 2 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:76.23,78.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_instincts.go:80.2,80.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:19.40,89.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:109.71,111.9 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:111.9,113.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:115.2,116.38 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:116.38,117.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:118.13,119.41 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:119.41,121.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:122.17,123.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:123.43,125.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:126.11,127.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:127.40,129.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:133.2,133.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:133.22,138.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:139.2,139.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:143.90,144.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:144.25,146.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:148.2,149.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:149.16,151.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:153.2,157.61 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:157.61,159.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:161.2,161.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:162.16,163.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:164.14,165.35 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:166.13,167.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:168.16,169.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:170.17,171.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:172.16,173.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:174.15,175.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:176.10,177.120 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:189.85,191.39 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:191.39,192.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:192.44,194.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:196.2,196.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:196.15,198.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:199.2,199.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:199.15,201.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:202.2,202.46 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:205.91,207.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:207.17,209.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:211.2,215.25 5 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:215.25,217.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:218.2,224.25 4 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:224.25,226.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:227.2,227.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:227.25,229.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:231.2,243.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:243.16,245.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:247.2,247.139 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:250.89,252.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:252.19,254.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:255.2,256.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:256.25,258.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:259.2,264.52 5 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:264.52,266.14 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:266.14,268.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:271.2,277.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:277.25,280.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:282.2,283.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:283.16,285.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:287.2,287.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:287.22,288.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:288.20,290.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:291.3,291.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:294.2,297.31 3 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:297.31,300.29 3 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:300.29,302.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:303.3,305.69 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:308.2,308.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:311.88,313.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:313.13,315.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:317.2,318.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:318.16,320.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:322.2,328.22 6 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:328.22,331.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:333.2,333.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:333.23,335.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:335.30,338.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:341.2,341.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:344.91,346.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:346.13,348.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:350.2,353.18 3 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:353.18,354.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:354.27,356.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:357.3,357.73 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:357.73,359.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:362.2,362.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:362.19,370.17 4 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:370.17,372.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:375.2,376.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:376.26,378.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:379.2,379.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:382.92,384.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:384.13,386.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:388.2,389.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:389.16,391.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:393.2,401.16 4 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:401.16,403.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:405.2,405.88 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:408.91,410.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:410.13,412.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:414.2,418.95 4 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:418.95,420.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:422.2,422.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:425.90,427.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:427.13,429.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:431.2,433.167 3 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:433.167,435.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:437.2,437.89 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:437.89,439.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_issues.go:441.2,441.108 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:22.93,24.49 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:24.49,26.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:28.2,28.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:29.14,30.42 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:31.17,32.59 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:33.16,34.58 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:35.24,36.75 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:37.27,38.71 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:39.22,40.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:41.23,42.63 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:43.10,44.66 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:48.79,49.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:49.13,51.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:52.2,53.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:53.16,55.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:57.2,58.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:58.32,60.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:61.2,84.28 3 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:87.101,88.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:88.13,90.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:91.2,91.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:91.38,93.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:94.2,95.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:95.16,97.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:98.2,98.53 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:98.53,100.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:102.2,104.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:104.17,106.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:107.2,107.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:107.29,109.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:110.2,115.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:118.100,119.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:119.13,121.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:122.2,122.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:122.38,124.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:125.2,126.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:126.16,128.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:129.2,129.53 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:129.53,131.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:133.2,135.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:135.17,137.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:138.2,138.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:138.29,140.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:141.2,146.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:149.123,150.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:150.13,152.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:153.2,153.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:153.18,155.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:156.2,156.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:156.38,158.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:159.2,161.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:161.17,163.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:164.2,169.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:172.113,173.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:173.13,175.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:176.2,176.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:176.50,178.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:179.2,181.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:181.17,183.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:184.2,188.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:191.57,195.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:197.102,198.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:198.13,200.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:201.2,201.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:201.20,203.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:204.2,205.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:205.16,207.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:209.2,210.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:210.32,212.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:214.2,217.56 3 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:217.56,223.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:225.2,230.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:233.41,235.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:235.16,237.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:238.2,238.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:35.27,37.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:42.41,43.11 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:44.48,45.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:46.10,47.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:54.57,55.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:56.17,57.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:58.16,59.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:60.10,61.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:82.58,83.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:84.28,85.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:86.26,87.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:88.10,89.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:93.114,95.68 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:95.68,97.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:99.2,101.42 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:101.42,102.71 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:102.71,105.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:107.2,117.23 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:117.23,119.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:121.2,124.22 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:124.22,125.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:125.31,127.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:128.3,128.35 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:129.8,129.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:129.37,131.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:132.2,132.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:135.74,136.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:136.30,138.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:139.2,139.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:139.34,141.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:142.2,142.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:142.31,144.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:145.2,145.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:145.22,147.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:161.169,162.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:162.17,164.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:165.2,166.51 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:166.51,168.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:169.2,169.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:172.92,174.42 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:174.42,177.63 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:177.63,179.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:179.9,181.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:183.2,183.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:186.65,190.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:192.115,194.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:194.26,196.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:196.8,196.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:196.31,198.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:199.2,199.117 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:202.122,206.31 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:206.31,207.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:207.45,209.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:211.2,211.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:214.72,216.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:218.117,219.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:219.16,221.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:222.2,223.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:223.20,225.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:225.17,227.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:228.3,228.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:228.27,229.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:229.50,231.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:231.30,232.11 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:236.3,236.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:239.2,241.60 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:241.60,243.61 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:243.61,245.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:246.3,246.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:246.24,247.9 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:249.3,250.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:250.17,252.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:253.3,253.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:253.22,254.9 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:256.3,256.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:256.29,257.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:257.50,259.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:259.30,260.11 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:264.3,265.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:265.32,266.9 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:269.2,269.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:272.51,273.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:273.16,275.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:276.2,277.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:277.18,279.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:280.2,280.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:280.19,282.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:283.2,283.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:286.97,288.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:288.30,290.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:291.2,291.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:291.49,293.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:294.2,294.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:297.108,299.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:301.108,303.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:305.102,307.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:319.55,320.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:320.31,322.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:323.2,323.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:323.26,325.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:326.2,326.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:329.71,330.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:343.26,344.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:345.10,346.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:354.95,362.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:362.16,364.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:366.2,397.39 14 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:397.39,399.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:399.27,401.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:402.8,404.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:405.2,407.46 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:407.46,410.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:411.2,411.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:411.44,413.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:413.12,415.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:417.2,417.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:417.26,419.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:420.2,420.84 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:420.84,422.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:427.2,427.65 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:427.65,429.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:431.2,433.20 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:433.20,435.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:436.2,437.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:437.20,439.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:440.2,440.56 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:440.56,442.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:443.2,443.56 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:443.56,448.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:450.2,450.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:450.45,453.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:459.2,459.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:459.31,461.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:461.22,462.62 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:462.62,465.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:466.4,466.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:468.3,468.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:471.2,472.115 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:472.115,474.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:491.2,491.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:491.19,493.23 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:493.23,495.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:496.3,508.21 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:508.21,510.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:511.3,511.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:522.2,522.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:522.43,535.34 5 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:535.34,556.30 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:556.30,558.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:559.4,559.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:559.44,561.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:562.4,562.106 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:562.106,564.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:575.4,575.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:575.74,577.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:578.4,579.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:579.18,581.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:583.4,584.28 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:584.28,586.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:588.4,588.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:588.31,599.57 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:599.57,601.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:601.17,604.7 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:606.5,607.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:607.21,609.6 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:615.5,615.138 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:615.138,617.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:617.27,619.7 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:620.6,620.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:622.5,623.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:623.26,625.6 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:626.5,626.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:630.4,631.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:631.20,633.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:634.4,634.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:634.22,637.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:637.26,639.6 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:640.5,640.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:645.4,660.77 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:660.77,662.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:663.4,664.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:664.25,666.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:667.4,667.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:673.2,673.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:673.26,675.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:677.2,678.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:678.25,680.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:681.2,681.97 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:681.97,683.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:690.2,691.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:691.21,693.33 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:693.33,695.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:696.3,696.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:696.33,698.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:699.3,699.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:699.49,704.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:721.3,721.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:721.54,722.84 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:722.84,724.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:728.2,728.99 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:728.99,730.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:732.2,733.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:733.22,735.10 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:736.109,737.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:738.100,739.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:740.114,741.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:742.107,743.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:744.11,745.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:748.2,749.43 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:749.43,751.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:753.2,755.34 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:755.34,756.48 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:756.48,757.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:757.19,760.5 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:764.2,764.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:764.31,767.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:768.2,768.35 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:768.35,771.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:772.2,772.76 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:772.76,776.3 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:778.2,780.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:780.16,782.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:782.20,785.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:788.2,788.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:788.25,798.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:798.18,800.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:800.9,800.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:800.30,807.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:808.3,808.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:808.36,810.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:811.3,812.50 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:812.50,815.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:816.3,822.17 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:822.17,824.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:826.3,836.17 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:836.17,838.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:839.3,839.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:842.2,843.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:843.30,844.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:844.52,846.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:846.9,848.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:851.2,869.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:869.21,871.43 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:871.43,873.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:874.3,874.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:874.29,876.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:886.3,886.76 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:886.76,888.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:890.2,890.105 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:890.105,892.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:893.2,894.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:894.16,896.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:901.2,904.40 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:904.40,905.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:905.15,906.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:909.3,910.63 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:910.63,912.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:912.9,914.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:916.3,916.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:916.43,918.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:919.3,920.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:920.20,922.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:925.3,925.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:925.23,928.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:929.3,931.33 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:931.33,934.39 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:934.39,936.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:939.2,948.42 5 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:948.42,950.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:950.21,952.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:952.9,955.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:959.2,959.53 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:959.53,960.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:960.54,961.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:961.33,963.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:964.9,972.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:973.3,973.60 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:973.60,974.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:974.40,976.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:978.3,978.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:978.61,979.41 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:979.41,981.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:983.3,983.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:983.28,985.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:986.3,987.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:989.2,989.51 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:989.51,991.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:995.2,997.53 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:997.53,999.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:999.8,1001.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1002.2,1002.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1002.22,1004.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1008.2,1014.76 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1014.76,1016.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1021.2,1021.57 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1021.57,1026.13 5 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1026.13,1029.21 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1029.21,1032.5 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1033.4,1033.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1033.49,1035.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1036.4,1043.89 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1043.89,1046.5 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1048.4,1048.86 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1052.2,1063.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1063.21,1065.40 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1065.40,1067.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1068.3,1068.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1068.38,1070.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1072.2,1074.18 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1074.18,1081.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1082.2,1082.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1082.28,1084.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1085.2,1085.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1085.16,1087.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1088.2,1088.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1088.30,1090.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1091.2,1091.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1091.30,1093.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1098.2,1098.76 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1098.76,1100.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1101.2,1102.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1102.16,1104.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1105.2,1105.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1111.94,1113.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1113.15,1115.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1117.2,1118.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1118.16,1120.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1122.2,1123.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1123.13,1125.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1126.2,1131.16 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1131.16,1133.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1134.2,1134.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1134.19,1136.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1146.2,1146.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1146.39,1148.55 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1148.55,1150.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1152.2,1152.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1152.39,1154.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1157.2,1158.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1158.21,1163.21 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1163.21,1165.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1166.3,1167.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1167.21,1169.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1170.3,1170.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1170.52,1172.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1173.3,1173.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1173.52,1178.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1179.3,1179.41 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1179.41,1182.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1183.3,1183.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1188.2,1188.46 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1188.46,1190.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1191.2,1191.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1191.27,1193.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1195.2,1196.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1196.16,1198.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1201.2,1210.16 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1210.16,1212.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1213.2,1213.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1218.59,1220.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1220.38,1222.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1225.2,1226.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1226.29,1227.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1227.22,1229.9 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1232.2,1232.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1232.18,1234.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1237.2,1244.29 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1244.29,1245.67 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1245.67,1247.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1249.2,1249.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1249.16,1251.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1254.2,1254.11 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1258.55,1260.47 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1260.47,1262.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1263.2,1264.58 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1264.58,1266.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1267.2,1267.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1270.252,1271.108 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1271.108,1273.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1274.2,1274.55 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1274.55,1276.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1277.2,1277.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1280.184,1282.69 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1282.69,1284.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1284.32,1285.58 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1285.58,1287.10 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1290.3,1290.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1290.18,1292.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1294.2,1294.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1294.19,1297.32 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1297.32,1298.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1298.39,1300.10 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1303.3,1303.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1303.19,1305.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1307.2,1307.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1307.21,1309.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1309.32,1310.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1310.49,1312.10 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1315.3,1315.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1315.18,1317.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1319.2,1319.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1319.28,1321.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1321.17,1323.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1324.3,1324.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1324.27,1326.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1328.2,1328.76 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1328.76,1330.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1331.2,1331.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1342.96,1343.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1343.26,1345.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1347.2,1348.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1348.16,1350.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1352.2,1363.23 9 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1363.23,1364.58 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1364.58,1365.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1365.31,1367.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1367.10,1369.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1373.2,1373.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1373.17,1375.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1376.2,1376.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1376.16,1378.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1379.2,1379.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1379.16,1381.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1382.2,1382.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1382.18,1384.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1385.2,1385.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1385.19,1387.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1388.2,1388.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1388.19,1390.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1396.2,1399.18 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1399.18,1400.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1400.61,1401.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1402.50,1403.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1404.12,1405.108 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1409.2,1410.42 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1410.42,1414.3 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1415.2,1420.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1420.16,1422.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1429.2,1444.43 6 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1444.43,1446.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1449.2,1451.27 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1451.27,1453.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1458.2,1458.46 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1458.46,1460.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1461.2,1461.63 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1461.63,1463.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1465.2,1466.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1466.15,1472.29 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1472.29,1479.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1479.18,1481.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1482.4,1482.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1482.23,1483.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1485.4,1485.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1485.30,1486.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1486.24,1488.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1488.32,1489.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1493.4,1494.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1494.30,1495.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1498.8,1504.29 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1504.29,1506.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1506.18,1508.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1509.4,1509.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1509.23,1510.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1512.4,1512.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1512.30,1513.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1513.24,1515.32 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1515.32,1516.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1520.4,1521.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1521.30,1522.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1526.2,1526.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1526.26,1528.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1528.17,1530.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1535.2,1535.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1535.74,1536.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1536.13,1537.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1537.33,1542.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1542.26,1544.39 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1544.39,1546.7 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1548.5,1548.82 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1565.2,1565.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1565.38,1569.27 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1569.27,1571.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1572.3,1572.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1572.27,1574.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1576.3,1581.32 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1581.32,1586.4 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1588.3,1592.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1592.18,1594.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1595.3,1596.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1596.17,1598.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1599.3,1599.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1602.2,1602.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1603.15,1618.32 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1618.32,1620.33 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1620.33,1621.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1621.40,1623.11 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1626.4,1638.6 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1640.3,1641.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1641.17,1643.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1644.3,1644.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1646.18,1648.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1648.17,1650.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1651.3,1651.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1653.10,1654.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1654.25,1656.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1657.3,1659.32 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1659.32,1661.33 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1661.33,1662.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1662.40,1664.11 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1667.4,1669.26 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1669.26,1671.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1672.4,1673.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1673.25,1675.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1676.4,1676.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1678.3,1678.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1690.51,1695.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1700.73,1702.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1702.16,1704.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1705.2,1706.48 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1706.48,1710.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1711.2,1713.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1713.16,1715.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1716.2,1716.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1727.117,1731.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1731.21,1733.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1734.2,1735.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1735.16,1737.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1738.2,1739.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1739.27,1741.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1742.2,1742.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1764.19,1775.30 7 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1775.30,1777.37 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1777.37,1779.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1781.3,1781.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1781.20,1783.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1797.2,1797.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1797.39,1799.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1801.2,1811.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1811.25,1813.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1815.2,1816.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1816.29,1818.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1824.2,1824.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1824.27,1826.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1831.2,1833.22 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1833.22,1835.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1837.2,1846.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1846.16,1848.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1853.2,1855.27 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1855.27,1857.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1859.2,1876.33 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1876.33,1878.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1880.2,1881.28 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1881.28,1885.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1885.20,1888.33 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1888.33,1889.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1889.40,1891.11 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1894.4,1894.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1894.20,1895.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1900.3,1900.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1900.22,1902.33 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1902.33,1903.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1903.50,1905.11 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1908.4,1908.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1908.19,1909.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1918.3,1918.56 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1918.56,1919.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1927.3,1927.64 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1927.64,1928.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1932.3,1935.32 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1935.32,1936.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1936.39,1938.10 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1942.3,1956.14 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1956.14,1957.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1957.37,1959.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1961.3,1962.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1962.26,1963.9 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1975.2,1975.59 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1975.59,1986.17 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1986.17,1988.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1990.3,1991.34 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1991.34,1993.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1995.3,1996.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1996.29,1998.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:1998.21,2001.34 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2001.34,2002.41 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2002.41,2004.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2007.5,2007.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2007.21,2008.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2011.4,2011.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2011.23,2013.34 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2013.34,2014.51 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2014.51,2016.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2019.5,2019.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2019.20,2020.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2023.4,2023.57 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2023.57,2024.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2027.4,2027.65 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2027.65,2028.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2030.4,2031.33 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2031.33,2032.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2032.40,2034.11 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2037.4,2051.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2051.15,2052.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2052.38,2054.6 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2056.4,2057.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2057.27,2058.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2065.2,2066.28 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2066.28,2068.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2072.2,2072.71 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2072.71,2080.30 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2080.30,2081.41 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2081.41,2087.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2089.3,2089.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2089.13,2090.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2090.31,2095.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2095.25,2097.38 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2097.38,2099.7 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2101.5,2101.81 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2112.2,2112.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2112.38,2115.27 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2115.27,2117.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2121.3,2138.30 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2138.30,2140.11 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2140.11,2141.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2143.4,2160.15 4 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2160.15,2161.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2161.39,2163.6 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2165.4,2165.46 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2167.3,2173.24 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2173.24,2175.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2176.3,2176.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2179.2,2179.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2180.15,2182.24 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2182.24,2184.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2185.3,2185.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2187.18,2199.30 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2199.30,2201.11 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2201.11,2202.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2204.4,2208.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2208.15,2209.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2209.39,2211.6 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2213.4,2213.35 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2215.3,2216.24 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2216.24,2218.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2219.3,2219.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2220.10,2221.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2221.22,2223.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2224.3,2226.27 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2226.27,2228.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2228.20,2230.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2231.4,2233.26 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2233.26,2235.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2236.4,2237.23 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2237.23,2239.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2240.4,2240.46 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2240.46,2244.5 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2245.4,2245.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2247.3,2247.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2252.94,2254.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2254.16,2256.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2258.2,2260.18 3 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2260.18,2261.59 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2261.59,2262.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2262.36,2264.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2264.10,2266.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2270.2,2270.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2270.13,2272.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2273.2,2273.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2273.50,2275.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2277.2,2277.98 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2281.98,2282.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2282.26,2284.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2286.2,2287.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2287.16,2289.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2291.2,2292.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2292.13,2294.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2297.2,2298.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2298.19,2299.51 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2299.51,2301.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2302.3,2302.55 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2304.2,2304.42 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2304.42,2306.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2308.2,2308.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2308.54,2309.48 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2309.48,2311.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2312.3,2312.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory.go:2316.2,2318.53 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:17.82,19.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:21.149,22.55 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:22.55,24.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:25.2,25.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:25.36,27.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:28.2,34.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:34.16,36.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:37.2,37.42 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:37.42,39.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:40.2,40.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:43.105,44.48 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:44.48,46.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:47.2,48.54 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:51.129,53.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:53.16,55.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:56.2,57.53 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:57.53,59.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:60.2,61.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:61.25,63.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:64.2,65.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:65.16,67.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:68.2,68.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:26.97,27.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:27.18,29.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:30.2,30.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:33.37,35.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:37.81,38.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:38.44,40.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:41.2,41.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:41.38,43.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:44.2,44.57 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:47.88,48.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:48.32,50.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:51.2,52.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:52.20,54.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:55.2,55.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:58.40,72.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:74.106,75.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:75.34,77.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:78.2,79.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:79.16,81.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:83.2,84.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:84.16,86.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:88.2,89.13 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:89.13,91.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:93.2,94.63 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:94.63,96.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:98.2,98.72 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:98.72,100.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:102.2,106.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:109.117,110.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:110.32,112.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:113.2,113.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:113.34,115.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:117.2,118.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:118.16,120.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:121.2,121.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:121.19,123.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:125.2,126.69 2 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:126.69,128.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:130.2,136.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:18.33,20.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:22.27,37.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:39.93,40.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:40.30,42.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:43.2,43.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:43.28,45.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:46.2,47.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:47.16,49.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:51.2,52.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:52.17,54.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:55.2,56.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:56.19,58.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:59.2,59.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:59.19,61.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:62.2,63.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:63.16,65.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:67.2,74.9 3 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:74.9,76.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:77.2,78.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:78.15,80.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:81.2,85.16 4 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:85.16,87.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:88.2,88.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:88.17,90.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:92.2,101.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:104.48,105.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:105.16,107.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:108.2,109.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:109.29,111.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:112.2,112.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:112.31,114.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:115.2,115.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:118.75,120.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:120.27,121.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:121.32,123.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:123.17,124.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:126.4,126.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:129.2,134.33 3 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:134.33,136.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:137.2,137.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:137.40,138.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:138.39,140.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:141.3,141.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:143.2,143.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:143.34,145.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:146.2,147.35 2 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:147.35,149.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:150.2,150.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:153.77,154.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:154.20,156.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:157.2,159.31 3 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:159.31,160.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:160.33,162.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:163.3,163.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:163.30,165.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:167.2,170.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:23.91,25.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:27.38,50.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:52.104,53.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:53.38,55.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:56.2,57.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:57.16,59.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:61.2,62.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:62.26,64.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:65.2,66.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:66.30,68.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:69.2,69.72 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:69.72,71.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:73.2,74.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:74.16,76.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:77.2,78.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:78.16,80.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:81.2,82.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:82.16,84.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:85.2,86.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:86.16,88.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:90.2,105.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:105.16,107.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:109.2,109.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:109.19,117.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:118.2,118.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:118.25,120.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:121.2,121.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:121.30,123.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:124.2,124.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:124.31,126.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:127.2,128.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:128.16,130.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:131.2,131.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:134.91,136.9 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:136.9,138.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:139.2,140.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:140.15,141.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:141.19,143.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:144.3,144.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:146.2,146.94 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:149.59,150.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:150.16,152.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:153.2,154.61 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:154.61,156.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:157.2,157.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:160.56,161.75 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:161.75,163.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:164.2,164.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:167.67,169.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:170.17,171.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:172.67,173.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:174.10,175.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:179.60,180.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:180.16,182.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:183.2,184.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:184.25,186.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:187.2,187.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:190.57,191.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:192.15,193.81 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:193.81,195.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:196.3,196.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:197.19,199.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:199.17,201.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:202.3,202.55 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:202.55,204.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:205.3,205.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:206.14,207.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:208.11,209.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:210.10,211.41 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:215.59,216.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:216.16,218.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:219.2,219.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:220.12,221.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:222.14,223.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:224.10,225.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:28.90,30.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:30.16,32.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:34.2,36.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:37.16,38.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:40.16,42.140 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:44.20,46.140 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:48.17,50.142 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:52.17,56.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:56.50,62.63 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:62.63,64.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:66.4,66.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:66.45,68.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:72.4,74.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:74.25,76.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:77.4,77.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:80.3,80.101 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:82.18,84.141 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:86.18,88.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:88.18,90.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:91.3,91.41 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:93.17,96.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:96.50,99.59 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:99.59,101.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:102.4,104.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:104.25,106.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:107.4,107.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:110.3,110.98 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:112.10,116.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:125.86,126.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:126.16,128.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:129.2,130.9 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:130.9,132.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:133.2,133.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:133.22,135.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:137.2,139.31 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:139.31,141.10 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:141.10,143.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:144.3,145.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:145.22,147.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:148.3,149.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:149.26,151.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:152.3,152.68 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:152.68,154.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:155.3,156.37 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:156.37,158.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:159.3,160.107 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:162.2,162.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:165.249,166.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:166.24,168.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:169.2,169.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:169.38,171.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:173.2,174.31 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:174.31,175.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:175.32,177.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:180.2,181.34 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:181.34,182.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:182.29,183.9 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:185.3,197.17 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:197.17,199.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:200.3,200.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:200.20,201.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:203.3,203.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:203.37,205.33 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:205.33,206.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:208.4,208.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:208.19,209.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:209.43,210.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:212.5,212.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:214.4,215.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:215.30,216.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:220.2,220.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:223.113,229.2 5 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:231.101,233.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:247.92,251.16 4 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:251.16,253.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:253.8,253.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:253.24,255.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:259.2,272.51 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:272.51,274.38 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:274.38,275.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:276.50,277.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:278.12,279.107 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:287.2,292.26 5 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:292.26,294.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:297.2,297.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:297.19,301.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:303.2,311.42 5 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:311.42,315.3 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:316.2,341.64 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:341.64,342.86 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:342.86,344.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:345.3,345.56 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:345.56,347.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:348.3,360.19 6 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:360.19,364.4 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:365.3,365.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:369.2,370.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:370.15,372.27 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:372.27,374.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:375.3,375.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:375.27,377.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:380.2,381.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:381.15,387.28 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:387.28,395.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:395.18,397.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:398.4,398.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:398.23,399.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:401.4,401.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:401.30,402.66 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:402.66,403.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:405.5,406.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:406.12,407.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:409.5,409.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:409.28,413.6 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:414.5,415.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:415.30,416.11 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:419.4,420.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:420.30,421.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:424.8,432.28 3 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:432.28,438.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:438.18,440.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:441.4,441.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:441.23,442.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:444.4,444.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:444.30,445.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:445.40,447.31 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:447.31,448.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:452.4,455.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:455.30,456.10 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:461.2,465.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:465.17,467.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:469.2,470.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:470.16,472.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_recall.go:473.2,473.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:20.79,21.43 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:21.43,23.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:24.2,24.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:24.29,26.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:27.2,27.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:30.40,63.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:65.68,71.25 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:71.25,74.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:75.2,75.67 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:78.62,83.19 3 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:83.19,87.3 3 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:88.2,88.89 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:91.101,92.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:92.22,94.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:95.2,96.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:96.18,98.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:99.2,100.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:100.16,102.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:103.2,104.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:104.16,106.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:107.2,107.119 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:110.99,111.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:111.22,113.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:114.2,115.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:115.18,117.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:118.2,119.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:119.16,121.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:122.2,122.51 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:122.51,124.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:125.2,126.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:126.16,128.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:129.2,131.15 3 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:131.15,132.69 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:132.69,134.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:135.3,135.58 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:137.2,137.130 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:140.102,142.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:142.16,144.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:145.2,145.64 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:145.64,147.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:148.2,148.113 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:151.109,153.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:153.16,155.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:156.2,157.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:157.16,159.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:160.2,161.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:161.16,163.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:164.2,164.67 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:167.107,169.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:169.16,171.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:172.2,173.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:173.16,175.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:176.2,176.107 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:176.107,178.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:179.2,179.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:180.41,181.63 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:182.41,183.95 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:184.10,185.83 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:189.111,191.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:191.16,193.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:194.2,195.57 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:195.57,197.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:198.2,199.23 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:199.23,201.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:202.2,203.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:203.16,205.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:206.2,206.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:206.17,208.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:209.2,209.108 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:212.63,215.2 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:217.69,219.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:219.16,221.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:222.2,222.79 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:225.60,227.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:227.16,229.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:230.2,230.57 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:233.137,234.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:234.49,236.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:237.2,238.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:238.16,240.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:241.2,243.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:243.16,245.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:246.2,247.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:247.16,249.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:250.2,250.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:250.22,252.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:253.2,253.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:256.142,258.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:258.16,260.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:261.2,262.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:262.16,264.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:265.2,265.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:265.47,267.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:268.2,269.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:269.16,270.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:270.50,272.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:273.3,273.89 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:275.2,275.173 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:278.157,280.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:280.16,282.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:283.2,283.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:283.47,285.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:286.2,287.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:287.16,288.50 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:288.50,290.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:291.3,291.89 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:293.2,293.169 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:296.104,297.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:297.22,299.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:300.2,301.61 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:301.61,303.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:303.20,304.9 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:307.2,307.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:307.19,309.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:310.2,317.8 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:320.119,322.39 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:322.39,323.81 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:323.81,325.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:327.2,327.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:330.71,332.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:332.16,334.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:335.2,335.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:17.61,105.23 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:105.23,122.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:123.2,123.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:126.104,127.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:127.61,129.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:130.2,130.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:130.38,132.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:133.2,134.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:134.16,136.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:137.2,138.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:138.16,140.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:141.2,147.107 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:147.107,149.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:150.2,151.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:151.16,153.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:154.2,170.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:170.19,172.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:173.2,173.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:176.103,177.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:177.61,179.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:180.2,180.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:180.38,182.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:183.2,184.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:184.16,186.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:187.2,191.106 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:191.106,193.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:194.2,195.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:195.16,197.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:198.2,200.31 3 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:200.31,207.36 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:207.36,218.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:219.3,220.35 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:222.2,230.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:233.107,234.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:234.61,236.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:237.2,237.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:237.38,239.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:240.2,241.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:241.16,243.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:244.2,248.110 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:248.110,250.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:251.2,252.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:252.16,254.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:255.2,256.33 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:256.33,266.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:267.2,275.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:278.108,279.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:279.61,281.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:282.2,282.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:282.37,284.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:285.2,286.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:286.16,288.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:289.2,290.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:290.19,292.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:293.2,293.104 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:293.104,295.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:296.2,297.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:297.16,299.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:300.2,307.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:307.16,309.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:310.2,311.43 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:311.43,318.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:319.2,332.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:332.22,334.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:335.2,335.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:338.108,339.62 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:339.62,341.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:342.2,342.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:342.38,344.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:345.2,346.9 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:346.9,348.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:349.2,350.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:350.16,352.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:353.2,357.16 5 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:357.16,359.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:360.2,370.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:373.109,374.62 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:374.62,376.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:377.2,377.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:377.38,379.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:380.2,381.9 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:381.9,383.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:384.2,385.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:385.16,387.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:388.2,390.32 3 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:390.32,392.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:393.2,394.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:394.16,396.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:397.2,403.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:406.106,407.62 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:407.62,409.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:410.2,410.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:410.38,412.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:413.2,414.9 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:414.9,416.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:417.2,418.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:418.16,420.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:421.2,423.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:423.16,424.41 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:424.41,434.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:435.3,435.61 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:437.2,445.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:483.65,484.42 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:484.42,485.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:485.39,487.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:489.2,489.85 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:489.85,491.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:492.2,492.95 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:495.102,496.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:496.38,498.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:499.2,499.58 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:499.58,501.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:502.2,502.90 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:505.60,508.2 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:510.66,512.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:512.26,514.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:515.2,515.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:518.69,521.33 3 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:521.33,523.21 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:523.21,524.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:526.3,526.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:526.34,527.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:529.3,530.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:532.2,532.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:535.63,537.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:537.19,539.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:540.2,541.42 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:541.42,543.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:544.2,544.57 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:544.57,546.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:547.2,547.54 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:547.54,549.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:550.2,550.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:553.70,557.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:559.66,561.9 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:561.9,563.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:564.2,566.17 3 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:566.17,568.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:569.2,569.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:570.103,572.30 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:573.34,574.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:575.10,576.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:580.56,581.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:581.37,583.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:584.2,584.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:584.26,586.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:586.37,587.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:589.3,589.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:591.2,591.13 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:594.90,602.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:604.68,605.71 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:605.71,607.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:607.17,609.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:610.3,610.26 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:612.2,613.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:613.16,615.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:616.2,617.41 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:617.41,619.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:620.2,620.78 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:623.65,625.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:625.16,627.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:628.2,628.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:628.17,630.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:631.2,631.14 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:634.51,635.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:635.16,637.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:638.2,638.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:641.56,642.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:642.28,644.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:645.2,646.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:649.92,651.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:651.29,653.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:654.2,654.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:657.86,659.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:659.29,661.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:662.2,662.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:665.94,667.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:667.29,669.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:670.2,670.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:673.98,675.29 2 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:675.29,677.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:678.2,678.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:17.93,18.104 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:18.104,20.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:22.2,23.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:23.16,25.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:27.2,28.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:28.19,30.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:32.2,35.33 3 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:35.33,36.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:36.47,39.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:42.2,44.20 3 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:44.20,47.3 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:48.2,49.68 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:49.68,50.48 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:50.48,52.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:53.3,53.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:53.32,55.23 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:55.23,56.63 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:56.63,58.6 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:59.5,59.53 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:61.4,61.31 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:64.2,71.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:71.17,73.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:73.8,73.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:73.29,75.36 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:75.36,77.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:78.3,83.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:86.2,86.35 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:86.35,88.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:90.2,97.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:97.16,99.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:101.2,110.28 3 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:110.28,112.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:113.2,124.16 4 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:124.16,126.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:127.2,127.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:133.93,134.35 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:134.35,136.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:138.2,139.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:139.16,141.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:143.2,144.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:144.16,146.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:147.2,147.17 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:147.17,149.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:151.2,152.33 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:152.33,153.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:153.47,156.4 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:159.2,160.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:160.16,162.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:164.2,176.26 3 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:176.26,178.23 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:178.23,180.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:181.3,192.5 3 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:195.2,196.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:196.16,198.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_rules.go:199.2,199.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:22.104,24.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:24.16,26.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:28.2,29.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:29.18,31.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:33.2,33.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:34.13,35.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:36.13,37.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:38.14,39.38 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:40.16,41.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:42.10,43.95 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:51.67,53.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:57.68,58.33 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:58.33,60.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:61.2,61.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:67.42,69.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:74.61,76.26 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:76.26,78.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:79.2,79.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:85.90,86.49 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:86.49,88.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:90.2,91.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:91.15,93.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:94.2,95.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:95.17,97.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:100.2,103.16 3 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:103.16,105.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:107.2,113.12 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:113.12,115.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:115.18,117.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:118.3,119.20 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:119.20,121.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:122.3,124.48 3 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:125.8,127.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:129.2,130.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:130.16,132.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:134.2,139.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:145.90,147.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:147.15,149.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:151.2,152.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:152.16,154.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:156.2,157.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:157.16,158.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:158.47,160.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:161.3,161.56 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:164.2,170.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:170.19,173.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:173.8,175.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:176.2,176.28 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:181.92,183.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:183.16,185.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:187.2,188.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:188.16,190.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:192.2,200.25 3 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:200.25,207.28 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:207.28,209.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:210.3,210.30 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:212.2,212.27 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:216.93,217.52 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:217.52,219.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:221.2,222.15 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:222.15,224.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:226.2,227.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:227.16,229.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:231.2,231.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:231.47,232.47 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:232.47,234.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:235.3,235.59 1 0 +github.com/thebtf/engram/internal/mcp/tools_settings.go:238.2,241.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:35.127,36.23 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:36.23,38.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:39.2,40.40 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:40.40,42.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:43.2,43.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:43.37,45.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:46.2,46.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:46.37,48.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:49.2,49.15 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:52.23,80.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:82.26,140.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:142.92,143.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:143.25,145.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:147.2,148.49 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:148.49,150.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:152.2,152.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:153.17,154.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:154.24,156.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:157.3,158.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:158.17,160.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:161.3,165.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:166.17,167.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:167.22,169.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:170.3,170.22 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:170.22,172.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:173.3,174.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:174.17,176.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:177.3,181.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:182.16,189.23 7 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:189.23,191.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:192.3,192.24 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:192.24,194.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:195.3,195.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:195.39,197.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:198.3,207.17 3 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:207.17,209.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:210.3,210.69 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:210.69,212.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:213.3,213.29 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:214.10,215.74 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:219.92,220.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:220.25,222.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:224.2,225.49 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:225.49,227.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:229.2,229.18 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:230.17,232.24 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:232.24,234.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:235.3,236.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:236.17,238.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:239.3,239.59 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:239.59,241.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:242.3,242.81 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:242.81,244.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:245.3,250.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:251.17,253.22 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:253.22,255.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:256.3,257.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:257.17,259.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:260.3,260.79 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:260.79,262.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:263.3,268.5 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:269.10,270.66 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:274.91,276.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:276.16,278.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:279.2,279.67 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:279.67,280.76 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:280.76,282.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:285.2,286.52 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:286.52,288.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:289.2,289.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:292.74,294.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:294.16,296.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:297.2,297.62 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:297.62,299.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:300.2,300.68 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:303.109,304.56 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:304.56,306.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:307.2,307.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:307.25,309.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:310.2,310.81 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:310.81,312.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:313.2,313.102 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:313.102,315.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:316.2,316.108 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:316.108,318.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:319.2,319.99 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:319.99,321.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:322.2,322.99 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:322.99,324.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:325.2,325.60 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:325.60,327.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:328.2,328.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:328.34,330.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:331.2,331.114 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:331.114,333.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:334.2,334.66 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:334.66,336.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:337.2,337.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:337.40,339.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:340.2,340.132 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:340.132,342.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:343.2,343.35 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:343.35,345.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:346.2,346.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:349.92,350.103 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:350.103,352.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:354.2,355.52 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:355.52,357.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:358.2,358.32 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:358.32,360.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:361.2,361.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:364.108,365.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:365.19,367.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:368.2,369.53 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:369.53,371.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:372.2,372.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:372.19,374.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:375.2,375.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:375.39,376.34 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:376.34,378.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:380.2,380.20 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:383.66,385.53 2 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:385.53,387.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:388.2,388.19 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:388.19,390.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_state.go:391.2,391.12 1 0 +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:10.101,12.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:12.16,14.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:16.2,18.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:19.16,20.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:21.14,22.39 1 0 +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:23.15,24.84 1 0 +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:25.16,26.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:27.10,28.97 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:21.75,23.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:25.41,28.2 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:30.31,37.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:39.38,46.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:48.50,56.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:58.43,70.2 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:72.80,73.36 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:73.36,75.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:76.2,76.48 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:76.48,78.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:79.2,79.37 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:82.97,84.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:84.16,86.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:87.2,88.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:88.16,90.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:91.2,92.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:92.16,94.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:95.2,96.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:96.16,98.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:99.2,99.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:102.104,104.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:104.16,106.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:107.2,108.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:108.16,110.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:111.2,112.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:112.16,114.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:115.2,116.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:116.16,118.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:119.2,119.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:122.96,124.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:124.16,126.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:127.2,128.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:128.19,130.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:131.2,132.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:132.18,134.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:135.2,141.79 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:141.79,143.17 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:143.17,145.4 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:146.3,146.25 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:148.2,148.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:151.77,153.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:153.16,155.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:156.2,157.19 2 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:157.19,159.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:160.2,160.21 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:10.101,12.16 2 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:12.16,14.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:16.2,17.18 2 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:17.18,19.3 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:21.2,21.16 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:22.15,23.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:24.13,25.42 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:26.14,27.44 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:28.16,29.45 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:30.16,31.40 1 0 +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:32.10,33.102 1 0 diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/repeat-01/create-database.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/repeat-01/create-database.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/repeat-01/create-database.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/repeat-01/create-database.stdout.log new file mode 100644 index 00000000..4b15bd57 --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/repeat-01/create-database.stdout.log @@ -0,0 +1 @@ +CREATE DATABASE diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/repeat-01/create-pgvector.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/repeat-01/create-pgvector.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/repeat-01/create-pgvector.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/repeat-01/create-pgvector.stdout.log new file mode 100644 index 00000000..d26bad14 --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/repeat-01/create-pgvector.stdout.log @@ -0,0 +1 @@ +CREATE EXTENSION diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/repeat-01/database-identity.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/repeat-01/database-identity.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/repeat-01/database-identity.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/repeat-01/database-identity.stdout.log new file mode 100644 index 00000000..5197c6db --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/repeat-01/database-identity.stdout.log @@ -0,0 +1 @@ +{"database" : "engram_prc_rg_test_c7cfa0692a684a57_r1", "schema" : "public", "server_version" : "17.10 (Debian 17.10-1.pgdg12+1)", "user" : "engram"} diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/repeat-01/go-test-summary.json b/.agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/repeat-01/go-test-summary.json new file mode 100644 index 00000000..0c341cb4 --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/repeat-01/go-test-summary.json @@ -0,0 +1,40 @@ +{ + "schema_version": 1, + "verdict": "FAIL", + "input_path": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\prove-it-old-assertion\\repeat-01\\go-test.stdout.jsonl", + "fail_on_unexpected_skip": true, + "allowed_skip_identities": [], + "counts": { + "packages": 1, + "tests": 1, + "passed": 0, + "failed": 1, + "skipped": 0, + "no_tests": 0, + "zero_tests": 0, + "incomplete": 0, + "unexpected_skips": 0, + "malformed_lines": 0 + }, + "packages": [ + { + "package": "github.com/thebtf/engram/internal/mcp", + "outcome": "fail", + "elapsed_seconds": 4.569, + "last_output": "FAIL\tgithub.com/thebtf/engram/internal/mcp\t4.560s", + "tests_observed": 1 + } + ], + "tests": [ + { + "package": "github.com/thebtf/engram/internal/mcp", + "test": "TestEC_F1_TagDerivedBackfill_T007", + "outcome": "fail", + "elapsed_seconds": 4.3, + "last_output": "--- FAIL: TestEC_F1_TagDerivedBackfill_T007 (4.30s)", + "skip_allowed": false + } + ], + "unexpected_skips": [], + "errors": [] +} diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/repeat-01/go-test.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/repeat-01/go-test.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/repeat-01/go-test.stdout.jsonl b/.agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/repeat-01/go-test.stdout.jsonl new file mode 100644 index 00000000..e7378bc7 --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/repeat-01/go-test.stdout.jsonl @@ -0,0 +1,21 @@ +{"Time":"2026-07-11T03:57:48.7713114+03:00","Action":"start","Package":"github.com/thebtf/engram/internal/mcp"} +{"Time":"2026-07-11T03:57:48.9879086+03:00","Action":"run","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007"} +{"Time":"2026-07-11T03:57:48.9879086+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":"=== RUN TestEC_F1_TagDerivedBackfill_T007\n"} +{"Time":"2026-07-11T03:57:50.0321518+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":"{\"level\":\"warn\",\"error\":\"ERROR: relation \\\"observation_vectors\\\" does not exist (SQLSTATE 42P01)\",\"time\":\"2026-07-11T03:57:50+03:00\",\"message\":\"migration 040: orphan vector cleanup failed (non-fatal)\"}\n"} +{"Time":"2026-07-11T03:57:50.0321518+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":"{\"level\":\"info\",\"garbage_deleted\":0,\"orphan_vectors_deleted\":0,\"time\":\"2026-07-11T03:57:50+03:00\",\"message\":\"migration 040: garbage cleanup complete\"}\n"} +{"Time":"2026-07-11T03:57:50.0421515+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":"{\"level\":\"info\",\"orphan_vectors_deleted\":0,\"time\":\"2026-07-11T03:57:50+03:00\",\"message\":\"migration 041: orphan vector purge complete\"}\n"} +{"Time":"2026-07-11T03:57:50.0511493+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":"{\"level\":\"info\",\"patterns_deleted\":0,\"time\":\"2026-07-11T03:57:50+03:00\",\"message\":\"migration 042: low-quality pattern purge complete\"}\n"} +{"Time":"2026-07-11T03:57:50.0921852+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":"{\"level\":\"info\",\"total_deleted\":0,\"time\":\"2026-07-11T03:57:50+03:00\",\"message\":\"migration 043: radical observation cleanup complete\"}\n"} +{"Time":"2026-07-11T03:57:51.50115+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":"{\"level\":\"warn\",\"error\":\"ERROR: extension \\\"vectorscale\\\" is not available (SQLSTATE 0A000)\",\"time\":\"2026-07-11T03:57:51+03:00\",\"message\":\"migration 109: vectorscale extension not available, skipping DiskANN index\"}\n"} +{"Time":"2026-07-11T03:57:52.8670903+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":"{\"level\":\"debug\",\"connections\":1,\"time\":\"2026-07-11T03:57:52+03:00\",\"message\":\"Connection pool warmed\"}\n"} +{"Time":"2026-07-11T03:57:52.8953857+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":" store_memory_compat_t007_test.go:159: \n"} +{"Time":"2026-07-11T03:57:52.8953857+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":" \tError Trace:\tD:/Dev/engram/.w/t007-r1-checker/internal/mcp/store_memory_compat_t007_test.go:159\n"} +{"Time":"2026-07-11T03:57:52.8953857+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":" \tError: \tShould be true\n"} +{"Time":"2026-07-11T03:57:52.8953857+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":" \tTest: \tTestEC_F1_TagDerivedBackfill_T007\n"} +{"Time":"2026-07-11T03:57:52.8953857+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":" \tMessages: \tglobal-scoped row must be returned by MemoryStore.List within its own project\n"} +{"Time":"2026-07-11T03:57:53.2911526+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Output":"--- FAIL: TestEC_F1_TagDerivedBackfill_T007 (4.30s)\n"} +{"Time":"2026-07-11T03:57:53.2911526+03:00","Action":"fail","Package":"github.com/thebtf/engram/internal/mcp","Test":"TestEC_F1_TagDerivedBackfill_T007","Elapsed":4.3} +{"Time":"2026-07-11T03:57:53.2911526+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Output":"FAIL\n"} +{"Time":"2026-07-11T03:57:53.3131894+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Output":"coverage: 0.1% of statements\n"} +{"Time":"2026-07-11T03:57:53.3407084+03:00","Action":"output","Package":"github.com/thebtf/engram/internal/mcp","Output":"FAIL\tgithub.com/thebtf/engram/internal/mcp\t4.560s\n"} +{"Time":"2026-07-11T03:57:53.3407084+03:00","Action":"fail","Package":"github.com/thebtf/engram/internal/mcp","Elapsed":4.569} diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/repeat-01/pg-stat-activity-after.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/repeat-01/pg-stat-activity-after.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/repeat-01/pg-stat-activity-after.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/repeat-01/pg-stat-activity-after.stdout.log new file mode 100644 index 00000000..fe51488c --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/repeat-01/pg-stat-activity-after.stdout.log @@ -0,0 +1 @@ +[] diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/repeat-01/pg-stat-activity-before.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/repeat-01/pg-stat-activity-before.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/repeat-01/pg-stat-activity-before.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/repeat-01/pg-stat-activity-before.stdout.log new file mode 100644 index 00000000..fe51488c --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/repeat-01/pg-stat-activity-before.stdout.log @@ -0,0 +1 @@ +[] diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/repeat-01/repeat-summary.json b/.agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/repeat-01/repeat-summary.json new file mode 100644 index 00000000..29435b14 --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/repeat-01/repeat-summary.json @@ -0,0 +1,36 @@ +{ + "repeat": 1, + "verdict": "FAIL", + "database": "engram_prc_rg_test_c7cfa0692a684a57_r1", + "schema": "public", + "database_schema_identity": "engram_prc_rg_test_c7cfa0692a684a57_r1.public", + "database_dsn": "REDACTED_DATABASE_DSN", + "database_create_confirmed": true, + "sequential_execution": { + "package_parallelism": 1, + "test_parallelism": 1 + }, + "race": false, + "connection_budget": 20, + "server_sessions_before": 6, + "server_sessions_after": 6, + "sessions_before": 0, + "sessions_after": 0, + "go_test_exit": 1, + "json_parser_exit": 1, + "coverage_policy": "Targeted", + "coverage_exit": 0, + "cleanup_exit": 0, + "cleanup_status": "PASS", + "required_session_start_execution": { + "schema_version": 1, + "verdict": "NOT_APPLICABLE", + "reason": "only an unfiltered canonical ./... run requires the 12-test session-start execution proof" + }, + "cleanup_summary": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\prove-it-old-assertion\\repeat-01\\cleanup\\cleanup.json", + "errors": [ + "go test failed with exit 1", + "go test JSON assertion failed with exit 1" + ], + "artifact_directory": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\prove-it-old-assertion\\repeat-01" +} diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/repeat-01/server-connection-count-after.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/repeat-01/server-connection-count-after.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/repeat-01/server-connection-count-after.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/repeat-01/server-connection-count-after.stdout.log new file mode 100644 index 00000000..1e8b3149 --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/repeat-01/server-connection-count-after.stdout.log @@ -0,0 +1 @@ +6 diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/repeat-01/server-connection-count-before.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/repeat-01/server-connection-count-before.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/repeat-01/server-connection-count-before.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/repeat-01/server-connection-count-before.stdout.log new file mode 100644 index 00000000..1e8b3149 --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/repeat-01/server-connection-count-before.stdout.log @@ -0,0 +1 @@ +6 diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/repeat-01/targeted-coverage.stderr.log b/.agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/repeat-01/targeted-coverage.stderr.log new file mode 100644 index 00000000..e69de29b diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/repeat-01/targeted-coverage.stdout.log b/.agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/repeat-01/targeted-coverage.stdout.log new file mode 100644 index 00000000..c958686c --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/repeat-01/targeted-coverage.stdout.log @@ -0,0 +1,352 @@ +github.com/thebtf/engram/internal/mcp/audit_helpers.go:33: effectiveAuditWriter 0.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:44: isAuditEnabled 0.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:52: runAuditAsync 0.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:77: marshalState 0.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:92: logAuditCreate 0.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:117: logAuditEdit 0.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:142: logAuditDelete 0.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:166: logAuditGeneric 0.0% +github.com/thebtf/engram/internal/mcp/audit_helpers.go:189: logAuditSupersede 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:30: parseArgs 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:46: coerceString 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:67: coerceInt 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:97: coerceInt64 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:127: coerceFloat64 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:151: coerceBool 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:177: coerceStringSlice 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:204: coerceInt64Slice 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:222: clampToInt 0.0% +github.com/thebtf/engram/internal/mcp/coerce.go:236: clampInt64ToInt 0.0% +github.com/thebtf/engram/internal/mcp/context.go:17: extractProjectFromHeader 0.0% +github.com/thebtf/engram/internal/mcp/context.go:22: contextWithProject 0.0% +github.com/thebtf/engram/internal/mcp/context.go:29: ContextWithProject 0.0% +github.com/thebtf/engram/internal/mcp/context.go:35: projectFromContext 0.0% +github.com/thebtf/engram/internal/mcp/context.go:41: contextWithSession 0.0% +github.com/thebtf/engram/internal/mcp/context.go:48: ContextWithSession 0.0% +github.com/thebtf/engram/internal/mcp/context.go:54: sessionFromContext 0.0% +github.com/thebtf/engram/internal/mcp/context.go:61: actorFromContext 0.0% +github.com/thebtf/engram/internal/mcp/health.go:22: NewMCPHealth 0.0% +github.com/thebtf/engram/internal/mcp/health.go:29: RecordRequest 0.0% +github.com/thebtf/engram/internal/mcp/health.go:36: RecordError 0.0% +github.com/thebtf/engram/internal/mcp/health.go:42: rotateWindowIfNeeded 0.0% +github.com/thebtf/engram/internal/mcp/health.go:55: HandleHealth 0.0% +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:28: ruleGovernanceCaptureEnabled 0.0% +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:39: captureActiveRuleIntent 0.0% +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:104: ruleIntentFingerprint 0.0% +github.com/thebtf/engram/internal/mcp/rule_governance_intent.go:113: marshalRuleCandidateIntentResponse 0.0% +github.com/thebtf/engram/internal/mcp/server.go:127: NewServer 100.0% +github.com/thebtf/engram/internal/mcp/server.go:141: SetBackfillStatusFunc 0.0% +github.com/thebtf/engram/internal/mcp/server.go:146: SetVersionedDocumentStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:151: SetIssueStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:156: SetMemoryStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:161: SetMetaMemoryIndex 0.0% +github.com/thebtf/engram/internal/mcp/server.go:166: SetHintQueue 0.0% +github.com/thebtf/engram/internal/mcp/server.go:171: SetStateStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:176: SetDirectiveCaptureService 0.0% +github.com/thebtf/engram/internal/mcp/server.go:181: SetBehavioralRulesStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:186: SetRuleGovernanceStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:191: SetRuleInjectionTelemetryStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:195: SetPromotionStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:199: SetGraphStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:204: SetNodesStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:211: SetAuditStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:216: SetPurgeStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:222: SetCandidateStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:228: SetSnapshotStore 0.0% +github.com/thebtf/engram/internal/mcp/server.go:234: SetBulkFacade 0.0% +github.com/thebtf/engram/internal/mcp/server.go:240: setTestAuditWriter 0.0% +github.com/thebtf/engram/internal/mcp/server.go:246: setTestMemoryEditor 0.0% +github.com/thebtf/engram/internal/mcp/server.go:252: setTestMemorySignificanceUpdater 0.0% +github.com/thebtf/engram/internal/mcp/server.go:260: SetWriteLintOrchestrator 0.0% +github.com/thebtf/engram/internal/mcp/server.go:269: SetRedactionRules 0.0% +github.com/thebtf/engram/internal/mcp/server.go:274: SetEmbeddingStores 0.0% +github.com/thebtf/engram/internal/mcp/server.go:282: SetRerankClient 0.0% +github.com/thebtf/engram/internal/mcp/server.go:290: SetStatsDB 0.0% +github.com/thebtf/engram/internal/mcp/server.go:297: HandleRequest 0.0% +github.com/thebtf/engram/internal/mcp/server.go:303: ListTools 0.0% +github.com/thebtf/engram/internal/mcp/server.go:332: Version 0.0% +github.com/thebtf/engram/internal/mcp/server.go:383: Run 0.0% +github.com/thebtf/engram/internal/mcp/server.go:427: handleRequest 0.0% +github.com/thebtf/engram/internal/mcp/server.go:461: handleNotification 0.0% +github.com/thebtf/engram/internal/mcp/server.go:473: handleInitialize 0.0% +github.com/thebtf/engram/internal/mcp/server.go:496: buildInstructions 0.0% +github.com/thebtf/engram/internal/mcp/server.go:660: storeMemoryTool 0.0% +github.com/thebtf/engram/internal/mcp/server.go:712: recallMemoryTool 0.0% +github.com/thebtf/engram/internal/mcp/server.go:805: primaryTools 0.0% +github.com/thebtf/engram/internal/mcp/server.go:942: handleToolsList 0.0% +github.com/thebtf/engram/internal/mcp/server.go:1612: handleToolsCall 0.0% +github.com/thebtf/engram/internal/mcp/server.go:1644: sanitizeToolCallArgs 0.0% +github.com/thebtf/engram/internal/mcp/server.go:1656: callTool 0.0% +github.com/thebtf/engram/internal/mcp/server.go:1874: sendResponse 0.0% +github.com/thebtf/engram/internal/mcp/server.go:1884: sendError 0.0% +github.com/thebtf/engram/internal/mcp/server.go:1896: handleFindSimilarObservations 0.0% +github.com/thebtf/engram/internal/mcp/server.go:1927: handleGetMemoryStats 0.0% +github.com/thebtf/engram/internal/mcp/server.go:2055: handleBackfillStatus 0.0% +github.com/thebtf/engram/internal/mcp/server.go:2071: handleCheckSystemHealth 0.0% +github.com/thebtf/engram/internal/mcp/server.go:2216: handleAnalyzeSearchPatterns 0.0% +github.com/thebtf/engram/internal/mcp/server.go:2246: handleSearchSessions 0.0% +github.com/thebtf/engram/internal/mcp/server.go:2251: handleListSessions 0.0% +github.com/thebtf/engram/internal/mcp/tools_admin.go:18: buildAdminTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_admin.go:68: adminActionsForEnv 33.3% +github.com/thebtf/engram/internal/mcp/tools_admin.go:80: vnextEnabled 0.0% +github.com/thebtf/engram/internal/mcp/tools_admin.go:84: handleAdmin 0.0% +github.com/thebtf/engram/internal/mcp/tools_admin.go:120: handlePurgeProject 0.0% +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:27: ambientHintsEnabledFromEnv 0.0% +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:32: ambientHintsTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:48: handleGetAmbientHints 0.0% +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:86: normalizeAmbientHintsToolLimit 0.0% +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:96: ambientHintItems 0.0% +github.com/thebtf/engram/internal/mcp/tools_ambient_hints.go:114: errMissingSessionID 0.0% +github.com/thebtf/engram/internal/mcp/tools_brief.go:31: handleGetMemoryBrief 0.0% +github.com/thebtf/engram/internal/mcp/tools_brief.go:107: memoryBriefUsesPrincipalScope 0.0% +github.com/thebtf/engram/internal/mcp/tools_brief.go:115: handlePrincipalMemoryBrief 0.0% +github.com/thebtf/engram/internal/mcp/tools_brief.go:259: truncateBriefContent 0.0% +github.com/thebtf/engram/internal/mcp/tools_brief.go:270: filterInjectionByScope 0.0% +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:25: bulkOpsTools 0.0% +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:95: handleBulkPromote 0.0% +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:154: handleBulkDelete 0.0% +github.com/thebtf/engram/internal/mcp/tools_bulkops.go:211: handleBulkSupersede 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:31: candidateItemFromDomain 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:51: newCandidateReviewSnapshot 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:59: requireCandidateReviewSnapshot 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:68: candidateTools 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:165: handleListCandidates 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:208: handleGetCandidate 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:239: handlePromoteCandidate 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:348: handleRejectCandidate 0.0% +github.com/thebtf/engram/internal/mcp/tools_candidates.go:402: handleSupersedeCandidate 0.0% +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:34: codeIntelEnabled 0.0% +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:42: SetCodeChunkStore 0.0% +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:48: codebaseSearchTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:79: codebaseStatusTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:100: handleCodebaseSearch 0.0% +github.com/thebtf/engram/internal/mcp/tools_code_intel.go:194: handleCodebaseStatus 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:21: getVault 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:35: credentialStore 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:49: handleStoreCredential 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:130: handleGetCredential 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:192: handleListCredentials 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:243: handleDeleteCredential 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:302: handleVaultStatus 0.0% +github.com/thebtf/engram/internal/mcp/tools_credential.go:338: expandTagHierarchy 0.0% +github.com/thebtf/engram/internal/mcp/tools_directives.go:16: directivesCaptureEnabledFromEnv 0.0% +github.com/thebtf/engram/internal/mcp/tools_directives.go:20: rememberDirectiveTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_directives.go:38: currentDirectiveCaptureService 0.0% +github.com/thebtf/engram/internal/mcp/tools_directives.go:48: handleRememberDirective 0.0% +github.com/thebtf/engram/internal/mcp/tools_directives.go:72: parseRememberDirectiveArgs 0.0% +github.com/thebtf/engram/internal/mcp/tools_docs_consolidated.go:10: handleDocsConsolidated 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents.go:15: handleListCollections 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents.go:61: handleListDocuments 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents.go:121: handleGetDocument 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents.go:165: handleRemoveDocument 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents.go:197: handleIngestDocument 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents.go:235: handleSearchCollection 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:15: handleDocCreate 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:61: handleDocRead 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:117: handleDocUpdate 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:122: handleDocList 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:175: handleDocHistory 0.0% +github.com/thebtf/engram/internal/mcp/tools_documents_v2.go:232: handleDocComment 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:19: SetExperienceProvider 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:23: experienceHistoryTools 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:40: experienceHistoryReadSchema 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:65: experienceHistoryDetailSchema 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:82: experienceHistoryTriggerEnum 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:91: handleExperienceHistoryRead 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:103: handleExperienceHistoryDetail 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:115: parseExperienceHistoryReadArgs 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:142: parseExperienceHistoryDetailArgs 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:157: experienceHistoryTriggersFromArgs 0.0% +github.com/thebtf/engram/internal/mcp/tools_experience_history.go:180: marshalExperienceHistory 0.0% +github.com/thebtf/engram/internal/mcp/tools_feedback.go:12: handleFeedbackConsolidated 0.0% +github.com/thebtf/engram/internal/mcp/tools_feedback.go:36: handleSetSessionOutcome 0.0% +github.com/thebtf/engram/internal/mcp/tools_governance.go:27: governanceTools 0.0% +github.com/thebtf/engram/internal/mcp/tools_governance.go:98: handleListSnapshots 0.0% +github.com/thebtf/engram/internal/mcp/tools_governance.go:167: handleRollbackSnapshot 0.0% +github.com/thebtf/engram/internal/mcp/tools_governance.go:215: handlePinSnapshot 0.0% +github.com/thebtf/engram/internal/mcp/tools_governance.go:258: handleRedactionRulesStatus 0.0% +github.com/thebtf/engram/internal/mcp/tools_governance.go:284: resolveGovernanceActor 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:64: handleGraph 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:100: graphAddEdge 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:216: mcpGraphEndpointExists 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:243: mcpGraphEdgeAlreadyExists 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:276: graphAddNode 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:317: graphRemoveEdge 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:332: graphGetEdges 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:397: filterEdgesByNodeType 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:457: graphTraverse 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:480: graphFindPath 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph.go:502: graphSynonyms 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:23: graphCreateEdgeWithGuards 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:80: graphEndpointExistsWithGuards 0.0% +github.com/thebtf/engram/internal/mcp/tools_graph_guards.go:114: graphDuplicateEdgeExists 0.0% +github.com/thebtf/engram/internal/mcp/tools_ingest.go:25: handleIngest 0.0% +github.com/thebtf/engram/internal/mcp/tools_ingest.go:43: ingestDocument 0.0% +github.com/thebtf/engram/internal/mcp/tools_instincts.go:20: handleImportInstincts 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:19: issuesToolSchema 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:109: validateIssueActionParams 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:143: handleIssues 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:189: resolveSourceProject 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:205: handleIssueCreate 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:250: handleIssueList 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:311: handleIssueGet 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:344: handleIssueUpdate 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:382: handleIssueComment 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:408: handleIssueReopen 0.0% +github.com/thebtf/engram/internal/mcp/tools_issues.go:425: handleIssueClose 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:22: handleLifecycle 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:48: lifecycleInfo 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:87: lifecyclePromote 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:118: lifecycleDemote 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:149: lifecycleSetConfidence 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:172: lifecycleSetDefeasibility 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:191: lifecycleSleepStatus 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:197: lifecycleDecayPreview 0.0% +github.com/thebtf/engram/internal/mcp/tools_lifecycle.go:233: marshalJSON 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:35: vnextFEnabled 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:42: isValidPrivacyScope 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:54: derivePrivacyScopeFromLegacy 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:82: deriveLegacyScopeFromPrivacy 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:93: applyPrincipalMemoryMetadata 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:135: addPrincipalMemoryFields 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:161: newScopedWriteLintMemoryStore 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:172: writeLintVisibilityCaller 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:186: writeLintVisibilityOptions 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:192: scopedWriteLintMemoryStore 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:202: filterVisibleWriteGateCandidates 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:214: domainManageAllowed 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:218: List 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:272: writeLintVisibilityFetchLimit 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:286: Get 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:297: Create 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:301: Update 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:305: MarkSuperseded 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:319: effectiveMemoryEditor 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:329: isValidStoreObservationType 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:354: handleStoreMemory 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1111: handleEditMemory 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1218: computeTTLDays 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1258: truncateTitle 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1270: keepRecallMemory 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1280: keepRecallMemoryFilters 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1342: handleRecallMemory 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1690: staleAdvisory 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1700: marshalWithStaleAdvisory 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1727: Rank 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:1751: handleRecallMemoryHybrid 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:2252: handleRateMemory 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory.go:2281: handleSuppressMemory 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:17: SetDomainRegistryService 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:21: checkDomainWriteMCP 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:43: addDomainWriteDecisionFields 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_domain_registry.go:51: marshalStoreMemoryAugmented 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:26: newMemoryStoreSignificanceUpdater 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:33: s6OutcomeEnabledFromEnv 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:37: effectiveMemorySignificanceUpdater 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:47: currentMemorySignificanceUpdater 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:58: rateMemorySignificanceTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:74: handleRateMemorySignificance 0.0% +github.com/thebtf/engram/internal/mcp/tools_memory_significance.go:109: RateMemorySignificance 0.0% +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:18: s2MetaMemoryEnabled 0.0% +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:22: knowAboutTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:39: handleKnowAbout 0.0% +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:104: parseKnowAboutLimit 0.0% +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:118: summarizeMetaIndexTags 0.0% +github.com/thebtf/engram/internal/mcp/tools_meta_memory.go:153: summarizeMetaIndexDateRange 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:23: SetPrincipalMemoryQueryService 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:27: principalMemoryQueryTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:52: handleQueryPrincipalMemory 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:134: principalMemoryQueryCaller 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:149: parsePrincipalMemoryQueryLimit 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:160: principalMemoryQueryText 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:167: parsePrincipalMemoryQueryVisibility 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:179: parsePrincipalMemoryQueryOffset 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:190: parsePrincipalMemoryQueryInt 0.0% +github.com/thebtf/engram/internal/mcp/tools_principal_memory.go:215: parsePrincipalMemoryQueryBool 0.0% +github.com/thebtf/engram/internal/mcp/tools_recall.go:28: handleRecall 0.0% +github.com/thebtf/engram/internal/mcp/tools_recall.go:125: parseRecallIncludedPrincipals 0.0% +github.com/thebtf/engram/internal/mcp/tools_recall.go:165: appendRecallIncludedPrincipalMemories 0.0% +github.com/thebtf/engram/internal/mcp/tools_recall.go:223: recallIncludeTargetMatchesCaller 0.0% +github.com/thebtf/engram/internal/mcp/tools_recall.go:231: recallPrincipalQueryItemToMemory 0.0% +github.com/thebtf/engram/internal/mcp/tools_recall.go:247: handleRecallSearch 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:20: currentReviewLoopCandidateLister 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:30: reviewLoopCandidateTools 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:65: reviewLoopReadSchema 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:78: reviewPacketIDSchema 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:91: handleReviewMetricsRead 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:110: handleReviewQueueRead 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:140: handleReviewPacketDetail 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:151: handleReviewPacketPreviewAction 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:167: handleReviewPacketApplyAction 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:189: parseReviewLoopReadArgs 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:212: reviewLoopMCPPacketTypeSupported 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:217: reviewLoopActionFromArgs 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:225: reviewLoopReasonFromArgs 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:233: loadReviewPacketCandidate 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:256: applyReviewPacketPreserve 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:278: applyReviewPacketSuppress 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:296: reviewLoopMemoryFromCandidate 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:320: filterRiskyMCPReviewCandidates 0.0% +github.com/thebtf/engram/internal/mcp/tools_review_loop.go:330: marshalReviewLoop 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:17: ruleGovernanceReadTools 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:126: handleRuleGovernanceHealth 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:176: handleRuleGovernanceQueue 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:233: handleRuleGovernanceSnapshots 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:278: handleRuleGovernanceUsefulness 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:338: handleRuleGovernanceTransition 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:373: handleRuleGovernancePinSnapshot 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:406: handleRuleGovernanceRollback 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:483: requireRuleGovernanceReadAccess 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:495: requireRuleGovernanceProjectOrAdmin 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:505: ruleGovernanceCallerIsAdmin 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:510: requireRuleGovernanceAdminAccess 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:518: redactRuleGovernanceEvidenceHandles 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:535: redactRuleGovernanceEvidenceHandle 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:553: ruleGovernanceEvidenceHandleHasSensitiveText 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:559: isCanonicalRuleGovernanceEvidenceHandle 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:580: isSafeRuleGovernanceEvidenceID 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:594: parseRuleGovernanceTransitionRequest 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:604: parseRuleGovernanceSince 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:623: boundedRuleGovernanceLimit 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:634: formatRuleGovernanceTime 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:641: formatRuleGovernanceTimePtr 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:649: stringRuleCandidateStatusCounts 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:657: stringRuleVersionStateCounts 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:665: stringRuleArbiterRunStatusCounts 0.0% +github.com/thebtf/engram/internal/mcp/tools_rule_governance.go:673: stringRuleInjectionEventTypeCounts 0.0% +github.com/thebtf/engram/internal/mcp/tools_rules.go:17: handleStoreRule 0.0% +github.com/thebtf/engram/internal/mcp/tools_rules.go:133: handleListRules 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:22: handleSettingsConsolidated 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:51: SetSettingsStore 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:57: settingsStore 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:67: isSecretSettingKey 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:74: requireAdmin 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:85: handleSetSetting 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:145: handleGetSetting 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:181: handleListSettings 0.0% +github.com/thebtf/engram/internal/mcp/tools_settings.go:216: handleDeleteSetting 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:35: resumeScopesFromFields 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:52: stateTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:82: setStateTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:142: handleGetState 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:219: handleSetState 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:274: decodeSessionStateForWrite 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:292: validateSessionStateBudget 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:303: validateNativeResumePacket 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:349: decodeProjectStateForWrite 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:364: requireStateObject 0.0% +github.com/thebtf/engram/internal/mcp/tools_state.go:383: requireNestedObject 0.0% +github.com/thebtf/engram/internal/mcp/tools_store_consolidated.go:10: handleStoreConsolidated 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:21: SetTemporalTruthProvider 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:25: temporalTruthEnabledFromEnv 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:30: temporalTruthTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:39: temporalTruthRefreshTool 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:48: temporalTruthRefreshSchema 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:58: temporalTruthSchema 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:72: currentTemporalTruthProvider 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:82: handleTemporalTruth 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:102: handleTemporalTruthRefresh 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:122: parseTemporalTruthArgs 0.0% +github.com/thebtf/engram/internal/mcp/tools_temporal_truth.go:151: parseTemporalTruthRefreshProject 0.0% +github.com/thebtf/engram/internal/mcp/tools_vault_consolidated.go:10: handleVaultConsolidated 0.0% +total: (statements) 0.1% diff --git a/.agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/summary.json b/.agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/summary.json new file mode 100644 index 00000000..c62a5bdf --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/evidence/prove-it-old-assertion/summary.json @@ -0,0 +1,67 @@ +{ + "schema_version": 1, + "gate": "release-gates-foundation", + "run_id": "prove-it-old-assertion", + "started_at": "2026-07-11T00:57:32.0371142+00:00", + "finished_at": "2026-07-11T00:57:59.4665508+00:00", + "duration_seconds": 27.429, + "verdict": "FAIL", + "counts": { + "requested_repeats": 1, + "completed_repeats": 1, + "passed_repeats": 0, + "failed_repeats": 1, + "child_commands": 16, + "nonzero_child_commands": 2 + }, + "packages": [ + "./internal/mcp" + ], + "run_pattern": "^TestEC_F1_TagDerivedBackfill_T007$", + "coverage_policy": "Targeted", + "connection_budget": 20, + "race": false, + "database_dsn": "REDACTED_DATABASE_DSN", + "environment": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\prove-it-old-assertion\\environment.json", + "commands": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\prove-it-old-assertion\\commands.json", + "repeats": [ + { + "repeat": 1, + "verdict": "FAIL", + "database": "engram_prc_rg_test_c7cfa0692a684a57_r1", + "schema": "public", + "database_schema_identity": "engram_prc_rg_test_c7cfa0692a684a57_r1.public", + "database_dsn": "REDACTED_DATABASE_DSN", + "database_create_confirmed": true, + "sequential_execution": { + "package_parallelism": 1, + "test_parallelism": 1 + }, + "race": false, + "connection_budget": 20, + "server_sessions_before": 6, + "server_sessions_after": 6, + "sessions_before": 0, + "sessions_after": 0, + "go_test_exit": 1, + "json_parser_exit": 1, + "coverage_policy": "Targeted", + "coverage_exit": 0, + "cleanup_exit": 0, + "cleanup_status": "PASS", + "required_session_start_execution": { + "schema_version": 1, + "verdict": "NOT_APPLICABLE", + "reason": "only an unfiltered canonical ./... run requires the 12-test session-start execution proof" + }, + "cleanup_summary": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\prove-it-old-assertion\\repeat-01\\cleanup\\cleanup.json", + "errors": [ + "go test failed with exit 1", + "go test JSON assertion failed with exit 1" + ], + "artifact_directory": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\prove-it-old-assertion\\repeat-01" + } + ], + "errors": [], + "artifact_directory": "D:\\Dev\\engram\\.w\\t007-r1-checker\\.agent\\reviews\\t007-r1-fresh-checker\\evidence\\prove-it-old-assertion" +} diff --git a/.agent/reviews/t007-r1-fresh-checker/verification-summary.json b/.agent/reviews/t007-r1-fresh-checker/verification-summary.json new file mode 100644 index 00000000..81979ca0 --- /dev/null +++ b/.agent/reviews/t007-r1-fresh-checker/verification-summary.json @@ -0,0 +1,83 @@ +{ + "schema_version": 1, + "review": "T007-R1-FRESH-CHECKER", + "recorded_at": "2026-07-11T04:06:02.8221931+03:00", + "verdict": "ACCEPT_WITH_MEDIUM_AUDIT_CORRECTION", + "maker": { + "sha": "1418796e55e8b5bfbb216ffbf5a3fba9fa620922", + "parent": "af1ed63536829916e0477be719a30a57a8d9227a", + "tree": "a08b92b88d5ac5570e25f3b8ef19ad0acf1727b6", + "direct_child": true, + "maker_worktree_clean": true + }, + "scope": { + "changed_paths": 331, + "test_paths": [ + "internal/mcp/store_memory_compat_t007_test.go" + ], + "production_code_paths": [], + "maker_evidence_paths": 329, + "maker_report_paths": 1, + "path_set_valid": true, + "claimed_culture_aware_path_digest_sha256": "5B4915A5F57F8251000992B52876B6291BF4E7CA60F6EA48CD36238E76E738F1", + "active_ordinal_lf_path_digest_sha256": "1d545a9ff8ff89dcd4a7a363ab621b3e7c28d9bc67c235ba715ec30cd98c294b" + }, + "semantic_contract": { + "classification": "CURRENT_CONTRACT_TEST_CORRECTION", + "flag_off_explicit": true, + "raw_sql_proves_global_scope": true, + "durable_fixture_id_proved": true, + "list_requires_exact_id_and_content": true, + "privacy_scope_projection_required_when_flag_off": false, + "demolished_v5_behavior_restored": false + }, + "independent_gates": { + "parent_original_red": { + "verdict": "EXPECTED_FAIL", + "tests": 1, + "failed": 1, + "skipped": 0 + }, + "prove_it_old_assertion": "EXPECTED_FAIL", + "wrong_fixture_id_challenge": "EXPECTED_FAIL_AT_EXACT_CONTENT_ASSERTION", + "raw_sql_corruption_challenge": "EXPECTED_FAIL_AT_GLOBAL_SCOPE_ASSERTION", + "parent_ambient_true": "EXPECTED_FALSE_GREEN_REPRODUCED", + "maker_flag_reset_with_ambient_true": "PASS", + "flag_reset_removed_with_checker_guard": "EXPECTED_FAIL", + "focused_fresh_database_repeat3": "PASS_3_OF_3", + "focused_fresh_database_race": "PASS_1_OF_1", + "full_internal_mcp": { + "tests": 488, + "passed": 487, + "failed": 1, + "skipped": 0, + "t007_tests": "PASS_2_OF_2", + "sole_unrelated_failure": "TestHybridTG3_ConfidenceMin_FloorEnforced_T022" + }, + "go_build_all": "PASS", + "go_vet_all": "PASS", + "git_diff_check": "PASS", + "gitleaks_exact_maker_commit": "PASS_0_FINDINGS", + "synthesis_preview_merge_tree": { + "verdict": "PASS", + "preview": "0c6269908aa810a2248f2bfaf3fca4f9f5791359", + "merge_base": "dc891b2d72b1fd63b83e4a630a249241fc389151", + "result_tree": "9421a8eae8c9579dfe6800e6d16f26840269823a" + }, + "maker_json_artifacts": "PASS_40_OF_40_PARSE", + "run_databases_checked": 12, + "database_residue": 0, + "session_residue": 0 + }, + "findings": [ + { + "id": "T007-R1-AUDIT-001", + "severity": "MEDIUM", + "class": "AUDIT_PRESENTATION", + "blocking": false, + "summary": "The maker handoff path digest used culture-aware PowerShell sorting, not the active ordinal normalized-path plus LF contract.", + "evidence": "The claimed 5B4915... digest reproduces only with Sort-Object ordering; ordinal ordering of the same valid 331-path set yields 1d545a9f....", + "resolution": "Use the corrected active-contract digest from this checker artifact. No path membership, product, test, lineage, or immutable-tree discrepancy exists." + } + ] +} From ce6a40d72fc39932ccbc4b949647f321b91f70c3 Mon Sep 17 00:00:00 2001 From: Kirill Turanskiy Date: Sat, 11 Jul 2026 05:55:33 +0300 Subject: [PATCH 051/111] Evidence R4: harden DB pool hygiene packet --- ...t-pool-hygiene-evidence-revision4-maker.md | 39 ++ .../16-evidence-r4-red.json | 46 ++ .../17-evidence-r4-gates.json | 96 +++ .../Build-DBPoolHygieneEvidence.ps1 | 74 ++- .../DB-TEST-POOL-HYGIENE.evidence-r4.json | 34 + .../DB-TEST-POOL-HYGIENE.final.json | 12 +- .../DBPoolHygieneEvidenceContract.ps1 | 205 ++++++ .../db-test-pool-hygiene/MANIFEST.json | 77 ++- .../db-test-pool-hygiene/SHA256SUMS.txt | 19 +- .../Test-DBPoolHygieneEvidenceAdversarial.ps1 | 617 +++++++++++++----- .../Verify-DBPoolHygieneEvidence.ps1 | 245 ++++++- .../adversarial-proof.json | 320 ++++++++- .../db-test-pool-hygiene/verifier-proof.json | 10 +- 13 files changed, 1537 insertions(+), 257 deletions(-) create mode 100644 .agent/reports/2026-07-11-db-test-pool-hygiene-evidence-revision4-maker.md create mode 100644 .agent/reports/evidence/production-ready/db-test-pool-hygiene/16-evidence-r4-red.json create mode 100644 .agent/reports/evidence/production-ready/db-test-pool-hygiene/17-evidence-r4-gates.json create mode 100644 .agent/reports/evidence/production-ready/db-test-pool-hygiene/DB-TEST-POOL-HYGIENE.evidence-r4.json create mode 100644 .agent/reports/evidence/production-ready/db-test-pool-hygiene/DBPoolHygieneEvidenceContract.ps1 diff --git a/.agent/reports/2026-07-11-db-test-pool-hygiene-evidence-revision4-maker.md b/.agent/reports/2026-07-11-db-test-pool-hygiene-evidence-revision4-maker.md new file mode 100644 index 00000000..d3da8921 --- /dev/null +++ b/.agent/reports/2026-07-11-db-test-pool-hygiene-evidence-revision4-maker.md @@ -0,0 +1,39 @@ +# DB-TEST-POOL-HYGIENE evidence revision 4 maker report + +## Scope and base + +- Role: maker only; independent checker is required after this immutable handoff. +- Evidence parent: `331b5b195a967e7f27dca94038a3480c9afcc84f`. +- Product candidate: `276337b3e96aa5af6d2e7dd9a0002ff957e5ffc9`. +- Worktree: `D:\Dev\engram\.w\dbph-r4`. +- Branch: `work/prc-db-test-pool-hygiene-evidence-r4`. +- Scope: evidence and this maker report only. No product, test, spec, readiness-register, or HTML path is changed. + +## Why revision 4 exists + +The R3 checker proved five coherent false-green packets were accepted: unknown manifest keys, unknown inventory keys, unsupported inventory schema, stale adversarial proof, and stale verifier proof. R4 treats those as one failure class: the packet described shape but did not validate the exact schema and the truth of its committed proof objects. + +R4 therefore uses one shared contract for exact object keys, schema versions, immutable product identities, and the ordered adversarial case catalog. The builder, verifier, and adversarial harness consume that contract instead of maintaining independent acceptance lists. + +## TDD trace + +- RED is preserved in `16-evidence-r4-red.json`: all five R3 false-green packets exited zero and reported PASS against R3. +- GREEN is proven by `adversarial-proof.json`: the original cases plus exact-key, wrong-schema, stale-proof, plausible-false-proof, ordering, diagnostics, CRLF, mixed-EOL, and duplicate-property cases all fail closed from coherent alternate Git indexes. +- REFACTOR keeps the schema and case catalog in `DBPoolHygieneEvidenceContract.ps1`; the builder and both verification paths consume it. +- The project forbade `.agent/specs/**` changes for this evidence-only revision, so the RED/GREEN/REFACTOR evidence is stored in the authorized evidence packet instead of the normal TDD spec location. + +## Evidence contract + +- Every JSON object and entry has an exact allowed-key set; unknown and duplicate properties fail. +- Manifest, inventory, verifier-proof, and adversarial-proof schema versions are exact values, not merely numeric values. +- Committed proofs are parsed and semantically checked for PASS status, Git-index source/revision, representation, current counts, empty-success semantics, exact case order/count, actual-versus-expected results, and required diagnostics. +- Each adversarial mutation gets a fresh repository and index, shares only immutable source objects via Git alternates, rewrites the mutated artifact blob, updates its manifest entry, and rebuilds the outer checksum. CRLF and mixed-EOL manifest mutations are likewise rehashed. +- Dynamic proofs use a deterministic valid bootstrap to break the manifest/checksum cycle. The real verifier and adversarial harness then replace the bootstrap, the packet is rebuilt, and an independent second harness run reproduces the real adversarial proof byte-for-byte. + +## Verification + +Final gate results and counts are recorded in `17-evidence-r4-gates.json` and the two committed proof files. The strict verifier passes with 21 changed paths, 19 directly bound paths, 35 manifest entries, 36 checksum entries, and inventory 83/8. All 35 adversarial cases pass, including the retained original 12; the independent repeat is byte-identical. Go vet/build, the focused database regression, script parsing, staged secret scan, scope checks, product-blob identity, and zero database/activity/temp residue also pass. The immutable commit SHA, tree, exact path list, and ordinal path-list digest are reported out of band because a commit cannot contain its own identity without self-reference. + +## Concerns + +No product-risk concern was introduced: `internal/db/gorm/candidate_store_test.go` remains byte-identical to the accepted product candidate. The remaining process concern is intentional: this maker result is not self-approved and requires the peer checker. diff --git a/.agent/reports/evidence/production-ready/db-test-pool-hygiene/16-evidence-r4-red.json b/.agent/reports/evidence/production-ready/db-test-pool-hygiene/16-evidence-r4-red.json new file mode 100644 index 00000000..707ff9ce --- /dev/null +++ b/.agent/reports/evidence/production-ready/db-test-pool-hygiene/16-evidence-r4-red.json @@ -0,0 +1,46 @@ +{ + "schema_version": 1, + "task_id": "DBPH-R4-EVIDENCE-STRICTNESS", + "phase": "RED", + "observed_at": "2026-07-11T01:51:59.4209935Z", + "runner": "PowerShell 7.6.1", + "base_target": "331b5b195a967e7f27dca94038a3480c9afcc84f", + "checker_commit": "c83536a8fa2f57bde8a194fa49b7b24271a51c03", + "checker_artifact": ".agent/reviews/db-test-pool-hygiene-r3-checker/alternate-index-proof.json", + "checker_artifact_sha256": "9e7383dcb3929e749f0a53ac44d9b4acb1e726ed146ddab673ab5c2d9af4cf65", + "protected_invariant": "Every evidence document must match its exact schema and current semantic proof contract; cryptographically coherent stale or extended JSON must fail closed.", + "failure_reason": "Five internally coherent invalid evidence packets returned exit 0 and PASS before the R4 verifier repair.", + "cases": [ + { + "name": "unknown_manifest_key", + "expected": "REJECT", + "actual_exit": 0, + "actual_status": "PASS" + }, + { + "name": "unknown_inventory_key", + "expected": "REJECT", + "actual_exit": 0, + "actual_status": "PASS" + }, + { + "name": "inventory_schema_99", + "expected": "REJECT", + "actual_exit": 0, + "actual_status": "PASS" + }, + { + "name": "stale_adversarial_proof", + "expected": "REJECT", + "actual_exit": 0, + "actual_status": "PASS" + }, + { + "name": "stale_verifier_proof", + "expected": "REJECT", + "actual_exit": 0, + "actual_status": "PASS" + } + ], + "scope_override": "The operator forbids .agent/specs changes for this evidence-only revision, so RED/GREEN/prove-it records live in the authorized evidence packet." +} diff --git a/.agent/reports/evidence/production-ready/db-test-pool-hygiene/17-evidence-r4-gates.json b/.agent/reports/evidence/production-ready/db-test-pool-hygiene/17-evidence-r4-gates.json new file mode 100644 index 00000000..f1e22f5c --- /dev/null +++ b/.agent/reports/evidence/production-ready/db-test-pool-hygiene/17-evidence-r4-gates.json @@ -0,0 +1,96 @@ +{ + "schema_version": 4, + "status": "PASS", + "source_mode": "GitIndex", + "revision": "INDEX", + "gates": [ + { + "name": "strict_verifier", + "status": "PASS", + "changed_paths": 21, + "directly_bound_changed_paths": 19, + "manifest_entries": 35, + "checksum_entries": 36, + "inventory_call_sites": 83, + "inventory_files": 8 + }, + { + "name": "alternate_index_adversarial", + "status": "PASS", + "cases": 35, + "legacy_cases_retained": 12, + "all_cases_pass": true, + "temp_root_removed": true, + "proof_sha256": "f4113547697cf1c87c7d260d8f04c27d82149e34d78bb941c3da1a4ec663b1c8" + }, + { + "name": "adversarial_determinism", + "status": "PASS", + "repeat_sha256": "f4113547697cf1c87c7d260d8f04c27d82149e34d78bb941c3da1a4ec663b1c8", + "byte_identical": true + }, + { + "name": "builder_determinism", + "status": "PASS", + "iterations": 2, + "manifest_byte_identical": true, + "outer_checksum_byte_identical": true, + "seed_phase_status": "SEEDED_DYNAMIC_PROOFS", + "seed_phase_leaves_manifest_and_checksum_unchanged": true, + "self_hashes": "reported_out_of_band_to_avoid_self_reference" + }, + { + "name": "verifier_proof", + "status": "PASS", + "proof_sha256": "839e1bcb76f4eddc118eeeee47c65385513f97a4b615d25654ad129bd935ce2f", + "failures": [] + }, + { + "name": "product_test_blob", + "status": "PASS", + "git_blob_oid": "7337f1bd8da4fb315de842eea2e3cce5476250a3", + "sha256": "62260c1a2e0705b065295322dd23fcf9b17fd47cb5ebc64134630788e2d23e09", + "byte_identical_to_product_candidate": true + }, + { + "name": "go_vet_all", + "status": "PASS", + "exit_code": 0 + }, + { + "name": "go_build_all", + "status": "PASS", + "exit_code": 0 + }, + { + "name": "focused_database_regression", + "status": "PASS", + "command": "go test -p=1 ./internal/db/gorm -run ^TestOpenCandidateTestDB_SubtestOwnerClosesPoolWithoutPrematureClose$ -count=3", + "database": "engram_mkr_dbph_r4_f49932f29f5f", + "exit_code": 0, + "database_residue": 0, + "activity_residue": 0 + }, + { + "name": "powershell_parse", + "status": "PASS", + "scripts": 5 + }, + { + "name": "gitleaks_staged", + "status": "PASS", + "version": "8.30.0", + "leaks": 0 + }, + { + "name": "scope_and_diff", + "status": "PASS", + "product_or_test_paths_changed": [], + "git_diff_check_exit": 0 + } + ], + "cleanup": "PASS", + "database_residue": 0, + "activity_residue": 0, + "alternate_index_temp_roots": 0 +} diff --git a/.agent/reports/evidence/production-ready/db-test-pool-hygiene/Build-DBPoolHygieneEvidence.ps1 b/.agent/reports/evidence/production-ready/db-test-pool-hygiene/Build-DBPoolHygieneEvidence.ps1 index e6d8d7c5..10984e03 100644 --- a/.agent/reports/evidence/production-ready/db-test-pool-hygiene/Build-DBPoolHygieneEvidence.ps1 +++ b/.agent/reports/evidence/production-ready/db-test-pool-hygiene/Build-DBPoolHygieneEvidence.ps1 @@ -6,7 +6,13 @@ param( [string]$ManifestPath = '.agent/reports/evidence/production-ready/db-test-pool-hygiene/MANIFEST.json', - [string]$SumsPath = '.agent/reports/evidence/production-ready/db-test-pool-hygiene/SHA256SUMS.txt' + [string]$SumsPath = '.agent/reports/evidence/production-ready/db-test-pool-hygiene/SHA256SUMS.txt', + + [string]$AdversarialProofPath = '.agent/reports/evidence/production-ready/db-test-pool-hygiene/adversarial-proof.json', + + [string]$VerifierProofPath = '.agent/reports/evidence/production-ready/db-test-pool-hygiene/verifier-proof.json', + + [switch]$SeedDynamicProofs ) $ErrorActionPreference = 'Stop' @@ -15,7 +21,15 @@ $utf8NoBom = [Text.UTF8Encoding]::new($false) $ordinal = [StringComparer]::Ordinal $resolvedRepository = (Resolve-Path -LiteralPath $RepositoryRoot).Path $evidencePrefix = '.agent/reports/evidence/production-ready/db-test-pool-hygiene/' -$productBlobPath = 'internal/db/gorm/candidate_store_test.go' +$contractPath = Join-Path $PSScriptRoot 'DBPoolHygieneEvidenceContract.ps1' +if (-not (Test-Path -LiteralPath $contractPath)) { + throw "evidence contract not found: $contractPath" +} +. $contractPath +if ($ProductCandidateSHA -cne $DBPHProductCandidateSHA) { + throw "unsupported product candidate: $ProductCandidateSHA" +} +$productBlobPath = $DBPHProductBlobPath $manifestExclusions = @($ManifestPath, $SumsPath) $checksumExclusions = @($SumsPath) @@ -100,6 +114,41 @@ $entryPaths = @($trackedPaths | Where-Object { }) $entryPaths = Sort-Ordinal -Values $entryPaths +$directChangedPaths = @($changedPaths | Where-Object { -not $manifestExclusions.Contains($_) }) +$missingChangedPaths = @($directChangedPaths | Where-Object { -not $entryPaths.Contains($_) }) +if ($missingChangedPaths.Count -ne 0) { + throw "builder selection omits changed evidence paths: $($missingChangedPaths -join ', ')" +} + +if ($SeedDynamicProofs) { + $adversarialProof = New-DBPHSeedAdversarialProof + $verifierProof = New-DBPHSeedVerifierProof ` + -ChangedPaths ([int64]$changedPaths.Count) ` + -DirectlyBoundChangedPaths ([int64]$directChangedPaths.Count) ` + -ManifestEntries ([int64]$entryPaths.Count) ` + -ChecksumEntries ([int64]($entryPaths.Count + 1)) + foreach ($proof in @( + [pscustomobject]@{ path = $AdversarialProofPath; value = $adversarialProof }, + [pscustomobject]@{ path = $VerifierProofPath; value = $verifierProof } + )) { + $proofJson = (($proof.value | ConvertTo-Json -Depth 20) -replace "`r`n", "`n") + "`n" + if ($utf8NoBom.GetBytes($proofJson) -contains [byte]0x0D) { + throw "generated dynamic proof contains CR: $($proof.path)" + } + [IO.File]::WriteAllText((Join-Path $resolvedRepository $proof.path), $proofJson, $utf8NoBom) + } + [ordered]@{ + status = 'SEEDED_DYNAMIC_PROOFS' + source_mode = 'GitIndex' + changed_path_count = $changedPaths.Count + directly_bound_changed_path_count = $directChangedPaths.Count + manifest_entries = $entryPaths.Count + checksum_entries = $entryPaths.Count + 1 + next_action = 'stage both proof files, then rerun builder without -SeedDynamicProofs' + } | ConvertTo-Json -Depth 4 + return +} + $entries = [Collections.Generic.List[object]]::new() $entryHashes = @{} foreach ($path in $entryPaths) { @@ -113,17 +162,10 @@ foreach ($path in $entryPaths) { }) } -$directChangedPaths = @($changedPaths | Where-Object { -not $manifestExclusions.Contains($_) }) -$missingChangedPaths = @($directChangedPaths | Where-Object { -not $entryPaths.Contains($_) }) -if ($missingChangedPaths.Count -ne 0) { - throw "builder selection omits changed evidence paths: $($missingChangedPaths -join ', ')" -} - $manifest = [ordered]@{ - schema_version = 3 - generated_utc = [DateTime]::UtcNow.ToString('o') - status = 'READY_FOR_RECHECK_EVIDENCE_R3' - product_parent_sha = 'bd68c05baf4b7250096dd84f56bebea2aa555970' + schema_version = $DBPHManifestSchemaVersion + status = 'READY_FOR_RECHECK_EVIDENCE_R4' + product_parent_sha = $DBPHProductParentSHA product_candidate_sha = $ProductCandidateSHA evidence_revision_parent_sha = $head evidence_revision_target = 'GitIndex' @@ -136,7 +178,7 @@ $manifest = [ordered]@{ checksum_self_excluded_paths = $checksumExclusions } representation_contract = [ordered]@{ - id = 'git-blob-bytes-v1' + id = $DBPHRepresentationContract digest = 'SHA-256' object_type = 'blob' path_binding = 'each path at the verified Git index/revision resolves to git_blob_oid' @@ -150,12 +192,12 @@ $manifest = [ordered]@{ } product_test_blob = [ordered]@{ path = $productBlobPath - git_blob_oid = '7337f1bd8da4fb315de842eea2e3cce5476250a3' - sha256 = '62260c1a2e0705b065295322dd23fcf9b17fd47cb5ebc64134630788e2d23e09' + git_blob_oid = $DBPHProductBlobOID + sha256 = $DBPHProductBlobSHA256 byte_identical_to_product_candidate = $true } inventory = [ordered]@{ - parent_sha = 'bd68c05baf4b7250096dd84f56bebea2aa555970' + parent_sha = $DBPHProductParentSHA required_call_sites = [int64]83 required_files = [int64]8 path = '.agent/reports/evidence/production-ready/db-test-pool-hygiene/INVENTORY.json' diff --git a/.agent/reports/evidence/production-ready/db-test-pool-hygiene/DB-TEST-POOL-HYGIENE.evidence-r4.json b/.agent/reports/evidence/production-ready/db-test-pool-hygiene/DB-TEST-POOL-HYGIENE.evidence-r4.json new file mode 100644 index 00000000..81515731 --- /dev/null +++ b/.agent/reports/evidence/production-ready/db-test-pool-hygiene/DB-TEST-POOL-HYGIENE.evidence-r4.json @@ -0,0 +1,34 @@ +{ + "schema_version": 4, + "status": "READY_FOR_RECHECK", + "product_parent_sha": "bd68c05baf4b7250096dd84f56bebea2aa555970", + "product_candidate_sha": "276337b3e96aa5af6d2e7dd9a0002ff957e5ffc9", + "evidence_revision_parent_sha": "331b5b195a967e7f27dca94038a3480c9afcc84f", + "branch": "work/prc-db-test-pool-hygiene-evidence-r4", + "worktree": "D:\\Dev\\engram\\.w\\dbph-r4", + "scope": "evidence-only", + "product_or_test_paths_changed_by_revision": [], + "whole_delta_base_sha": "276337b3e96aa5af6d2e7dd9a0002ff957e5ffc9", + "whole_delta_changed_paths": 21, + "whole_delta_directly_manifest_bound_paths": 19, + "manifest_entries": 35, + "checksum_entries": 36, + "exact_json_schema": true, + "semantic_dynamic_proof_validation": true, + "alternate_index_adversarial_cases": 35, + "legacy_adversarial_cases_retained": 12, + "deterministic_fixed_point": "PASS", + "adversarial_proof_sha256": "f4113547697cf1c87c7d260d8f04c27d82149e34d78bb941c3da1a4ec663b1c8", + "verifier_proof_sha256": "839e1bcb76f4eddc118eeeee47c65385513f97a4b615d25654ad129bd935ce2f", + "inventory": { + "parent_sha": "bd68c05baf4b7250096dd84f56bebea2aa555970", + "call_sites": 83, + "files": 8 + }, + "cleanup": { + "database_residue": 0, + "activity_residue": 0, + "alternate_index_temp_roots": 0 + }, + "handoff_commit": "REPORTED_OUT_OF_BAND_TO_AVOID_SELF_REFERENCE" +} diff --git a/.agent/reports/evidence/production-ready/db-test-pool-hygiene/DB-TEST-POOL-HYGIENE.final.json b/.agent/reports/evidence/production-ready/db-test-pool-hygiene/DB-TEST-POOL-HYGIENE.final.json index cfed381f..4d30b24f 100644 --- a/.agent/reports/evidence/production-ready/db-test-pool-hygiene/DB-TEST-POOL-HYGIENE.final.json +++ b/.agent/reports/evidence/production-ready/db-test-pool-hygiene/DB-TEST-POOL-HYGIENE.final.json @@ -1,8 +1,8 @@ { - "status": "READY_FOR_RECHECK_EVIDENCE_R3", + "status": "READY_FOR_RECHECK_EVIDENCE_R4", "parent_sha": "bd68c05baf4b7250096dd84f56bebea2aa555970", "product_candidate_sha": "276337b3e96aa5af6d2e7dd9a0002ff957e5ffc9", - "branch": "work/prc-db-test-pool-hygiene-evidence-r3", + "branch": "work/prc-db-test-pool-hygiene-evidence-r4", "changed_implementation_paths": [ "internal/db/gorm/candidate_store_test.go" ], @@ -49,6 +49,14 @@ "dynamic_proofs_directly_bound": true, "canonical_path_order": "StringComparer.Ordinal", "strict_raw_json_types": true, + "exact_json_keys": true, + "manifest_schema_version": 4, + "inventory_schema_version": 1, + "verifier_proof_schema_version": 4, + "adversarial_proof_schema_version": 4, + "semantic_dynamic_proof_validation": true, + "alternate_index_adversarial_cases": 35, + "adversarial_proof_byte_deterministic": true, "inventory_parent_sha": "bd68c05baf4b7250096dd84f56bebea2aa555970", "inventory_required_call_sites": 83, "inventory_required_files": 8 diff --git a/.agent/reports/evidence/production-ready/db-test-pool-hygiene/DBPoolHygieneEvidenceContract.ps1 b/.agent/reports/evidence/production-ready/db-test-pool-hygiene/DBPoolHygieneEvidenceContract.ps1 new file mode 100644 index 00000000..584375ad --- /dev/null +++ b/.agent/reports/evidence/production-ready/db-test-pool-hygiene/DBPoolHygieneEvidenceContract.ps1 @@ -0,0 +1,205 @@ +$DBPHManifestSchemaVersion = [int64]4 +$DBPHInventorySchemaVersion = [int64]1 +$DBPHVerifierProofSchemaVersion = [int64]4 +$DBPHAdversarialProofSchemaVersion = [int64]4 +$DBPHProductParentSHA = 'bd68c05baf4b7250096dd84f56bebea2aa555970' +$DBPHProductCandidateSHA = '276337b3e96aa5af6d2e7dd9a0002ff957e5ffc9' +$DBPHEvidenceParentSHA = '331b5b195a967e7f27dca94038a3480c9afcc84f' +$DBPHProductBlobPath = 'internal/db/gorm/candidate_store_test.go' +$DBPHProductBlobOID = '7337f1bd8da4fb315de842eea2e3cce5476250a3' +$DBPHProductBlobSHA256 = '62260c1a2e0705b065295322dd23fcf9b17fd47cb5ebc64134630788e2d23e09' +$DBPHRepresentationContract = 'git-blob-bytes-v1' + +function Get-DBPHExactJsonProperties { + param( + [Parameter(Mandatory = $true)] + [ValidateSet( + 'manifest', + 'manifest.evidence_delta', + 'manifest.representation_contract', + 'manifest.product_test_blob', + 'manifest.inventory', + 'manifest.entry', + 'inventory', + 'inventory.entry', + 'verifier-proof', + 'adversarial-proof', + 'adversarial-proof.case' + )] + [string]$Schema + ) + + switch ($Schema) { + 'manifest' { + return [string[]]@( + 'schema_version', 'status', 'product_parent_sha', + 'product_candidate_sha', 'evidence_revision_parent_sha', + 'evidence_revision_target', 'evidence_delta', + 'representation_contract', 'product_test_blob', 'inventory', + 'entry_count', 'entries' + ) + } + 'manifest.evidence_delta' { + return [string[]]@( + 'comparison', 'changed_path_count', + 'directly_manifest_bound_count', 'product_or_test_paths_changed', + 'manifest_entry_self_excluded_paths', + 'checksum_self_excluded_paths' + ) + } + 'manifest.representation_contract' { + return [string[]]@( + 'id', 'digest', 'object_type', 'path_binding', 'contract_bytes', + 'working_tree_bytes', 'text_git_blob_line_endings', + 'manifest_self_reference', 'outer_checksum_path', + 'outer_checksum_generation_order', + 'outer_checksum_self_reference' + ) + } + 'manifest.product_test_blob' { + return [string[]]@( + 'path', 'git_blob_oid', 'sha256', + 'byte_identical_to_product_candidate' + ) + } + 'manifest.inventory' { + return [string[]]@('parent_sha', 'required_call_sites', 'required_files', 'path') + } + 'manifest.entry' { + return [string[]]@('path', 'git_blob_oid', 'bytes', 'sha256') + } + 'inventory' { + return [string[]]@( + 'schema_version', 'parent_sha', 'symbol', 'definition', 'method', + 'required_call_sites', 'required_files', 'actual_call_sites', + 'actual_files', 'entries' + ) + } + 'inventory.entry' { + return [string[]]@('path', 'count', 'lines') + } + 'verifier-proof' { + return [string[]]@( + 'schema_version', 'status', 'source_mode', 'revision', + 'product_candidate_sha', 'representation_contract', + 'changed_paths', 'directly_bound_changed_paths', + 'manifest_entries', 'checksum_entries', 'inventory_call_sites', + 'inventory_files', 'failures' + ) + } + 'adversarial-proof' { + return [string[]]@( + 'schema_version', 'status', 'source_mode', 'revision', 'cases', + 'temp_root_removed', 'cleanup' + ) + } + 'adversarial-proof.case' { + return [string[]]@( + 'name', 'expected_exit', 'actual_exit', 'verifier_status', + 'expected_failure', 'observed_failures', 'pass' + ) + } + } +} + +function Get-DBPHAdversarialCaseSpecs { + $specs = @( + @('baseline', $false, ''), + @('missing_changed_path', $true, 'manifest missing changed path'), + @('unsorted_manifest_and_sums', $true, 'not canonical ordinal order'), + @('duplicate_manifest_and_sums', $true, 'duplicate manifest path'), + @('wrong_type_representation_id_array', $true, 'must be JSON string, got array'), + @('null_representation_id', $true, 'must be JSON string, got null'), + @('wrong_type_exclusions_scalar', $true, 'must be JSON array, got string'), + @('wrong_type_inventory_numeric_strings', $true, 'must be JSON number, got string'), + @('null_inventory_count', $true, 'must be JSON number, got null'), + @('crlf_raw_representation', $true, 'manifest bytes contain CR'), + @('incorrect_representation_contract', $true, 'unsupported representation contract'), + @('false_inventory_76_6', $true, 'inventory acceptance constants must be 83/8'), + @('mixed_eol_representation', $true, 'manifest bytes contain CR'), + @('unknown_manifest_key', $true, 'manifest has unknown JSON property'), + @('unknown_manifest_nested_key', $true, 'manifest.representation_contract has unknown JSON property'), + @('unknown_manifest_entry_key', $true, 'manifest.entries[0] has unknown JSON property'), + @('unknown_inventory_key', $true, 'inventory has unknown JSON property'), + @('unknown_inventory_entry_key', $true, 'inventory.entries[0] has unknown JSON property'), + @('manifest_schema_99', $true, 'manifest schema_version must be 4'), + @('inventory_schema_99', $true, 'inventory schema_version must be 1'), + @('adversarial_proof_schema_99', $true, 'adversarial proof schema_version must be 4'), + @('verifier_proof_schema_99', $true, 'verifier proof schema_version must be 4'), + @('unknown_adversarial_proof_key', $true, 'adversarial proof has unknown JSON property'), + @('unknown_adversarial_case_key', $true, 'adversarial proof.cases[0] has unknown JSON property'), + @('unknown_verifier_proof_key', $true, 'verifier proof has unknown JSON property'), + @('stale_adversarial_proof', $true, 'adversarial proof case count mismatch'), + @('stale_verifier_proof', $true, 'verifier proof changed_paths mismatch'), + @('false_adversarial_case_order', $true, 'adversarial proof case order mismatch'), + @('false_adversarial_status', $true, 'adversarial proof status must be PASS'), + @('false_adversarial_actual_status', $true, 'adversarial proof case result mismatch'), + @('false_adversarial_required_diagnostic', $true, 'adversarial proof case missing required diagnostic'), + @('false_verifier_counts', $true, 'verifier proof manifest_entries mismatch'), + @('false_verifier_status', $true, 'verifier proof status must be PASS'), + @('false_verifier_source_revision', $true, 'verifier proof source/revision contract mismatch'), + @('duplicate_json_property', $true, 'duplicate JSON property') + ) + + $result = [Collections.Generic.List[object]]::new() + foreach ($spec in $specs) { + $result.Add([pscustomobject]@{ + name = [string]$spec[0] + expect_nonzero = [bool]$spec[1] + expected_failure = [string]$spec[2] + }) + } + return [object[]]@($result) +} + +function New-DBPHSeedAdversarialProof { + $cases = [Collections.Generic.List[object]]::new() + foreach ($spec in Get-DBPHAdversarialCaseSpecs) { + $isBaseline = -not $spec.expect_nonzero + $observedFailures = [object[]]@() + if (-not $isBaseline) { $observedFailures = [object[]]@($spec.expected_failure) } + $cases.Add([ordered]@{ + name = $spec.name + expected_exit = if ($isBaseline) { 0 } else { 'nonzero' } + actual_exit = if ($isBaseline) { 0 } else { 1 } + verifier_status = if ($isBaseline) { 'PASS' } else { 'FAIL' } + expected_failure = $spec.expected_failure + observed_failures = $observedFailures + pass = $true + }) + } + return [ordered]@{ + schema_version = $DBPHAdversarialProofSchemaVersion + status = 'PASS' + source_mode = 'GitIndex' + revision = 'INDEX' + cases = [object[]]@($cases) + temp_root_removed = $true + cleanup = 'PASS' + } +} + +function New-DBPHSeedVerifierProof { + param( + [Parameter(Mandatory = $true)][int64]$ChangedPaths, + [Parameter(Mandatory = $true)][int64]$DirectlyBoundChangedPaths, + [Parameter(Mandatory = $true)][int64]$ManifestEntries, + [Parameter(Mandatory = $true)][int64]$ChecksumEntries + ) + + return [ordered]@{ + schema_version = $DBPHVerifierProofSchemaVersion + status = 'PASS' + source_mode = 'GitIndex' + revision = 'INDEX' + product_candidate_sha = $DBPHProductCandidateSHA + representation_contract = $DBPHRepresentationContract + changed_paths = $ChangedPaths + directly_bound_changed_paths = $DirectlyBoundChangedPaths + manifest_entries = $ManifestEntries + checksum_entries = $ChecksumEntries + inventory_call_sites = [int64]83 + inventory_files = [int64]8 + failures = [object[]]@() + } +} diff --git a/.agent/reports/evidence/production-ready/db-test-pool-hygiene/MANIFEST.json b/.agent/reports/evidence/production-ready/db-test-pool-hygiene/MANIFEST.json index e4cd09d0..d92c1106 100644 --- a/.agent/reports/evidence/production-ready/db-test-pool-hygiene/MANIFEST.json +++ b/.agent/reports/evidence/production-ready/db-test-pool-hygiene/MANIFEST.json @@ -1,15 +1,14 @@ { - "schema_version": 3, - "generated_utc": "2026-07-10T23:46:22.1600511Z", - "status": "READY_FOR_RECHECK_EVIDENCE_R3", + "schema_version": 4, + "status": "READY_FOR_RECHECK_EVIDENCE_R4", "product_parent_sha": "bd68c05baf4b7250096dd84f56bebea2aa555970", "product_candidate_sha": "276337b3e96aa5af6d2e7dd9a0002ff957e5ffc9", - "evidence_revision_parent_sha": "68242c48aaad62ec087166eeb9ea32f14d189450", + "evidence_revision_parent_sha": "331b5b195a967e7f27dca94038a3480c9afcc84f", "evidence_revision_target": "GitIndex", "evidence_delta": { "comparison": "276337b3e96aa5af6d2e7dd9a0002ff957e5ffc9..GitIndex", - "changed_path_count": 16, - "directly_manifest_bound_count": 14, + "changed_path_count": 21, + "directly_manifest_bound_count": 19, "product_or_test_paths_changed": [], "manifest_entry_self_excluded_paths": [ ".agent/reports/evidence/production-ready/db-test-pool-hygiene/MANIFEST.json", @@ -44,7 +43,7 @@ "required_files": 8, "path": ".agent/reports/evidence/production-ready/db-test-pool-hygiene/INVENTORY.json" }, - "entry_count": 30, + "entry_count": 35, "entries": [ { "path": ".agent/reports/2026-07-10-db-test-pool-hygiene-evidence-revision-maker.md", @@ -64,6 +63,12 @@ "bytes": 3008, "sha256": "7fcc3759c36bc91b7fd0e04dc3d9309df3b8b8c56585ed562e73bb362002ba34" }, + { + "path": ".agent/reports/2026-07-11-db-test-pool-hygiene-evidence-revision4-maker.md", + "git_blob_oid": "d3da8921af57ddcfdc3fdf1d1081f6128b0e4094", + "bytes": 3900, + "sha256": "583a8d9b46142ea99a8a1cc701807d157b1767c0f265eaa9684cbf02bb5355da" + }, { "path": ".agent/reports/evidence/production-ready/db-test-pool-hygiene/01-parent-broad.summary.log", "git_blob_oid": "95738976368ef9ca6efc765fc93107d7ea1085e8", @@ -154,11 +159,23 @@ "bytes": 473, "sha256": "6b74e1f64b909f8ffe0042fbc7d2dc6d8310752f2c7398352a395d6d6362b677" }, + { + "path": ".agent/reports/evidence/production-ready/db-test-pool-hygiene/16-evidence-r4-red.json", + "git_blob_oid": "707ff9ceb7c7d24acf3265f60b2797f619721ed7", + "bytes": 1657, + "sha256": "c2dd430033d42ca2c65f4b67428358abfaf337f53892daeadae660c4752ab1b3" + }, + { + "path": ".agent/reports/evidence/production-ready/db-test-pool-hygiene/17-evidence-r4-gates.json", + "git_blob_oid": "f1e22f5ce5b31477b206343faa7c493ca04b1245", + "bytes": 2656, + "sha256": "8c48dca9178c5c2628bc17616f93d1f2de256ffd87855750e8bc5886939071fd" + }, { "path": ".agent/reports/evidence/production-ready/db-test-pool-hygiene/Build-DBPoolHygieneEvidence.ps1", - "git_blob_oid": "e6d8d7c599743ef5cf73259ae441d527b503ba78", - "bytes": 8339, - "sha256": "57557b01f087ab8040747fb1183a965582b80a1c4b58b743ed2606f9bbe45339" + "git_blob_oid": "10984e03ef984e497291b471388ca86443560a60", + "bytes": 10148, + "sha256": "e8d93a96bb8e98bbb81bfccc6a4172b77edc8a8b8f42ba472032499064cce52f" }, { "path": ".agent/reports/evidence/production-ready/db-test-pool-hygiene/DB-TEST-POOL-HYGIENE.evidence-r2.json", @@ -172,11 +189,17 @@ "bytes": 2438, "sha256": "69439533993845249230a227189e1a7ffc63d4f0819218da2d0ecceb782c3c6c" }, + { + "path": ".agent/reports/evidence/production-ready/db-test-pool-hygiene/DB-TEST-POOL-HYGIENE.evidence-r4.json", + "git_blob_oid": "815157312854f438d67bb4b9a9ec55884db489d9", + "bytes": 1357, + "sha256": "5435562e8c914452aacf1b42fbdd46a296931ad61fd7734b3685c0f57622b9cf" + }, { "path": ".agent/reports/evidence/production-ready/db-test-pool-hygiene/DB-TEST-POOL-HYGIENE.final.json", - "git_blob_oid": "cfed381f2a57336cb8d7b7c448f13b9b07642cfb", - "bytes": 2045, - "sha256": "8acb07220208e4d73f3915ee545db5978026bad6730fee2f4ab7cfa97515c6d5" + "git_blob_oid": "4d30b24f723bf0a1f9dc1bbee5a6ae561c003d52", + "bytes": 2368, + "sha256": "84cc07d88d06e33c0b4136465bc5930bdd5dcc6d17878d1ae24f2e2d39fa7d4b" }, { "path": ".agent/reports/evidence/production-ready/db-test-pool-hygiene/DB-TEST-POOL-HYGIENE.red.json", @@ -184,6 +207,12 @@ "bytes": 842, "sha256": "98398e3e46628fd0f3f08ca54b1baa1b96f70554ac7316712a4e1906d96e0cb0" }, + { + "path": ".agent/reports/evidence/production-ready/db-test-pool-hygiene/DBPoolHygieneEvidenceContract.ps1", + "git_blob_oid": "584375adf635076b2ae50410e05512a719763419", + "bytes": 9322, + "sha256": "1ae5fad5582af4f4a4193753dc5c530c3e622fade5dfa4d4d9afd49fa2cf55f7" + }, { "path": ".agent/reports/evidence/production-ready/db-test-pool-hygiene/INVENTORY.json", "git_blob_oid": "6c63468628a1501bc5188ae1067448b9e89a9d73", @@ -198,27 +227,27 @@ }, { "path": ".agent/reports/evidence/production-ready/db-test-pool-hygiene/Test-DBPoolHygieneEvidenceAdversarial.ps1", - "git_blob_oid": "5e179a6127283405fd30bfacde29165e7bf17734", - "bytes": 14938, - "sha256": "1217a0a5b94e6c4c99bfdb3be28152de980c581c61aeab3242f8088339df50e6" + "git_blob_oid": "ce9084627e1dda7d7ffa838b22c271eb869ea5bc", + "bytes": 29273, + "sha256": "7165a1a38565292270f34fd3a2c07b815ae3e3fc504d30fc0eda48a735b24162" }, { "path": ".agent/reports/evidence/production-ready/db-test-pool-hygiene/Verify-DBPoolHygieneEvidence.ps1", - "git_blob_oid": "45da5886276d41c2d7a5bc5a19097e49c3c4e4b0", - "bytes": 30427, - "sha256": "3ca48c3ff8765164a4a4ad26554180e0ea8bc778f65fe8818bc3b850e1828393" + "git_blob_oid": "c436cebb13ccf7cea619ce3cbe835c4d9d70e9f4", + "bytes": 46077, + "sha256": "bc605cf7c2f6066cbc0c5fc890707def0159f519adbc853afaf59d6d2ba7a247" }, { "path": ".agent/reports/evidence/production-ready/db-test-pool-hygiene/adversarial-proof.json", - "git_blob_oid": "a13f6471c2c6ea9a14efd6e5346880ad7c742e6c", - "bytes": 19900, - "sha256": "d96e7bcf50a711eed43d16868ad275d9a942e8d998e35f71bef2cf066a9abc51" + "git_blob_oid": "c1c09b6dfe84edae9616066af8fbd536d930b869", + "bytes": 29410, + "sha256": "f4113547697cf1c87c7d260d8f04c27d82149e34d78bb941c3da1a4ec663b1c8" }, { "path": ".agent/reports/evidence/production-ready/db-test-pool-hygiene/verifier-proof.json", - "git_blob_oid": "5730d460cfbbd20e8a1f284311962a4ef3b83c48", + "git_blob_oid": "2659915a3f44ff789bc2e6e7747bcf9ec5fd87fb", "bytes": 404, - "sha256": "10f4078c1d6044450fd022ae2e7cc777d2f059121bda0923d395566007e01928" + "sha256": "839e1bcb76f4eddc118eeeee47c65385513f97a4b615d25654ad129bd935ce2f" }, { "path": "internal/db/gorm/candidate_store_test.go", diff --git a/.agent/reports/evidence/production-ready/db-test-pool-hygiene/SHA256SUMS.txt b/.agent/reports/evidence/production-ready/db-test-pool-hygiene/SHA256SUMS.txt index f5c69153..4bc186df 100644 --- a/.agent/reports/evidence/production-ready/db-test-pool-hygiene/SHA256SUMS.txt +++ b/.agent/reports/evidence/production-ready/db-test-pool-hygiene/SHA256SUMS.txt @@ -4,6 +4,7 @@ 86a843700a146ad46dfcb6e8c7cb9b8433312dcd755383761e2313d3b13c72dc .agent/reports/2026-07-10-db-test-pool-hygiene-evidence-revision-maker.md 51c95f8471312f6fd81e1ba2d58f206d7bb368032079c47b55bd0e7147cd8001 .agent/reports/2026-07-10-db-test-pool-hygiene-maker.md 7fcc3759c36bc91b7fd0e04dc3d9309df3b8b8c56585ed562e73bb362002ba34 .agent/reports/2026-07-11-db-test-pool-hygiene-evidence-revision3-maker.md +583a8d9b46142ea99a8a1cc701807d157b1767c0f265eaa9684cbf02bb5355da .agent/reports/2026-07-11-db-test-pool-hygiene-evidence-revision4-maker.md d1aa9c7a603a140be74bccc1170e78bfa2007f8aca0e48473c5b5a749a97c435 .agent/reports/evidence/production-ready/db-test-pool-hygiene/01-parent-broad.summary.log 765e7e93a5b9a2384d0417199cdd66dc816f97e178219473d18b7b0a93cd31a7 .agent/reports/evidence/production-ready/db-test-pool-hygiene/02-parent-red.log 9fbe284df01cece683d0dc6938b370dabbea030af3e39047f382e9e3c3cd4d9b .agent/reports/evidence/production-ready/db-test-pool-hygiene/03-green-focused.log @@ -19,16 +20,20 @@ b9acc25599272b3942beaaaabd5a042c86128765e3d8b1b9ad142b6b0d1fc20f .agent/reports 31b07bacde4ad835c55a4aa85e09f01edd2dfeb0887011547b4b17d4f686b40e .agent/reports/evidence/production-ready/db-test-pool-hygiene/13-final-residue.log 4c544c5ea7e5e0f7d6518f3af222054589bd258e6aa373c833789ec2532f7a2d .agent/reports/evidence/production-ready/db-test-pool-hygiene/14-evidence-r2-focused.log 6b74e1f64b909f8ffe0042fbc7d2dc6d8310752f2c7398352a395d6d6362b677 .agent/reports/evidence/production-ready/db-test-pool-hygiene/15-evidence-r2-static.txt -57557b01f087ab8040747fb1183a965582b80a1c4b58b743ed2606f9bbe45339 .agent/reports/evidence/production-ready/db-test-pool-hygiene/Build-DBPoolHygieneEvidence.ps1 +c2dd430033d42ca2c65f4b67428358abfaf337f53892daeadae660c4752ab1b3 .agent/reports/evidence/production-ready/db-test-pool-hygiene/16-evidence-r4-red.json +8c48dca9178c5c2628bc17616f93d1f2de256ffd87855750e8bc5886939071fd .agent/reports/evidence/production-ready/db-test-pool-hygiene/17-evidence-r4-gates.json +e8d93a96bb8e98bbb81bfccc6a4172b77edc8a8b8f42ba472032499064cce52f .agent/reports/evidence/production-ready/db-test-pool-hygiene/Build-DBPoolHygieneEvidence.ps1 c4fdaad603d5c03954cd1026afc9a9c01c0e0963c367390247a795b5382584e1 .agent/reports/evidence/production-ready/db-test-pool-hygiene/DB-TEST-POOL-HYGIENE.evidence-r2.json 69439533993845249230a227189e1a7ffc63d4f0819218da2d0ecceb782c3c6c .agent/reports/evidence/production-ready/db-test-pool-hygiene/DB-TEST-POOL-HYGIENE.evidence-r3.json -8acb07220208e4d73f3915ee545db5978026bad6730fee2f4ab7cfa97515c6d5 .agent/reports/evidence/production-ready/db-test-pool-hygiene/DB-TEST-POOL-HYGIENE.final.json +5435562e8c914452aacf1b42fbdd46a296931ad61fd7734b3685c0f57622b9cf .agent/reports/evidence/production-ready/db-test-pool-hygiene/DB-TEST-POOL-HYGIENE.evidence-r4.json +84cc07d88d06e33c0b4136465bc5930bdd5dcc6d17878d1ae24f2e2d39fa7d4b .agent/reports/evidence/production-ready/db-test-pool-hygiene/DB-TEST-POOL-HYGIENE.final.json 98398e3e46628fd0f3f08ca54b1baa1b96f70554ac7316712a4e1906d96e0cb0 .agent/reports/evidence/production-ready/db-test-pool-hygiene/DB-TEST-POOL-HYGIENE.red.json +1ae5fad5582af4f4a4193753dc5c530c3e622fade5dfa4d4d9afd49fa2cf55f7 .agent/reports/evidence/production-ready/db-test-pool-hygiene/DBPoolHygieneEvidenceContract.ps1 64a1b454068b5480af0aa512d5157222a4760798f4e9689aa9887643939ccb10 .agent/reports/evidence/production-ready/db-test-pool-hygiene/INVENTORY.json fb886ee1749c7b2d45adf9bd43ac2a1434cab24c9ce35bb548f1751bd9e71861 .agent/reports/evidence/production-ready/db-test-pool-hygiene/Invoke-DBPoolHygieneGo.ps1 -9dc56a31ff2bb74db9d405a83a9bc69b135bd8027ed626d71d2898609cfeb167 .agent/reports/evidence/production-ready/db-test-pool-hygiene/MANIFEST.json -1217a0a5b94e6c4c99bfdb3be28152de980c581c61aeab3242f8088339df50e6 .agent/reports/evidence/production-ready/db-test-pool-hygiene/Test-DBPoolHygieneEvidenceAdversarial.ps1 -3ca48c3ff8765164a4a4ad26554180e0ea8bc778f65fe8818bc3b850e1828393 .agent/reports/evidence/production-ready/db-test-pool-hygiene/Verify-DBPoolHygieneEvidence.ps1 -d96e7bcf50a711eed43d16868ad275d9a942e8d998e35f71bef2cf066a9abc51 .agent/reports/evidence/production-ready/db-test-pool-hygiene/adversarial-proof.json -10f4078c1d6044450fd022ae2e7cc777d2f059121bda0923d395566007e01928 .agent/reports/evidence/production-ready/db-test-pool-hygiene/verifier-proof.json +b0b63988722207186805712b1f32d80ee81afaacffa57e54144d5bd82c5dcb6c .agent/reports/evidence/production-ready/db-test-pool-hygiene/MANIFEST.json +7165a1a38565292270f34fd3a2c07b815ae3e3fc504d30fc0eda48a735b24162 .agent/reports/evidence/production-ready/db-test-pool-hygiene/Test-DBPoolHygieneEvidenceAdversarial.ps1 +bc605cf7c2f6066cbc0c5fc890707def0159f519adbc853afaf59d6d2ba7a247 .agent/reports/evidence/production-ready/db-test-pool-hygiene/Verify-DBPoolHygieneEvidence.ps1 +f4113547697cf1c87c7d260d8f04c27d82149e34d78bb941c3da1a4ec663b1c8 .agent/reports/evidence/production-ready/db-test-pool-hygiene/adversarial-proof.json +839e1bcb76f4eddc118eeeee47c65385513f97a4b615d25654ad129bd935ce2f .agent/reports/evidence/production-ready/db-test-pool-hygiene/verifier-proof.json 62260c1a2e0705b065295322dd23fcf9b17fd47cb5ebc64134630788e2d23e09 internal/db/gorm/candidate_store_test.go diff --git a/.agent/reports/evidence/production-ready/db-test-pool-hygiene/Test-DBPoolHygieneEvidenceAdversarial.ps1 b/.agent/reports/evidence/production-ready/db-test-pool-hygiene/Test-DBPoolHygieneEvidenceAdversarial.ps1 index 5e179a61..ce908462 100644 --- a/.agent/reports/evidence/production-ready/db-test-pool-hygiene/Test-DBPoolHygieneEvidenceAdversarial.ps1 +++ b/.agent/reports/evidence/production-ready/db-test-pool-hygiene/Test-DBPoolHygieneEvidenceAdversarial.ps1 @@ -3,7 +3,7 @@ param( [string]$RepositoryRoot, [ValidateSet('GitRevision', 'GitIndex')] - [string]$SourceMode = 'GitRevision', + [string]$SourceMode = 'GitIndex', [string]$Revision = 'HEAD', @@ -15,33 +15,54 @@ param( [string]$SumsPath = '.agent/reports/evidence/production-ready/db-test-pool-hygiene/SHA256SUMS.txt', - [string]$InventoryPath = '.agent/reports/evidence/production-ready/db-test-pool-hygiene/INVENTORY.json' + [string]$InventoryPath = '.agent/reports/evidence/production-ready/db-test-pool-hygiene/INVENTORY.json', + + [string]$AdversarialProofPath = '.agent/reports/evidence/production-ready/db-test-pool-hygiene/adversarial-proof.json', + + [string]$VerifierProofPath = '.agent/reports/evidence/production-ready/db-test-pool-hygiene/verifier-proof.json' ) $ErrorActionPreference = 'Stop' $utf8Strict = [Text.UTF8Encoding]::new($false, $true) $utf8NoBom = [Text.UTF8Encoding]::new($false) +$ordinal = [StringComparer]::Ordinal $resolvedRepository = (Resolve-Path -LiteralPath $RepositoryRoot).Path $resolvedVerifier = (Resolve-Path -LiteralPath (Join-Path $resolvedRepository $VerifierPath)).Path +$contractPath = Join-Path (Split-Path -Parent $resolvedVerifier) 'DBPoolHygieneEvidenceContract.ps1' +if (-not (Test-Path -LiteralPath $contractPath)) { throw "evidence contract not found: $contractPath" } +. $contractPath +if ($SourceMode -ne 'GitIndex') { throw 'R4 adversarial proof must run from SourceMode GitIndex' } + $tempBase = [IO.Path]::GetFullPath([IO.Path]::GetTempPath()) -$tempRoot = Join-Path $tempBase ("engram-dbph-evidence-r3-" + [Guid]::NewGuid().ToString('N')) +$tempPrefix = 'engram-dbph-evidence-r4-' +$tempRoot = Join-Path $tempBase ($tempPrefix + [Guid]::NewGuid().ToString('N')) if (-not $tempRoot.StartsWith($tempBase, [StringComparison]::OrdinalIgnoreCase) -or - -not [IO.Path]::GetFileName($tempRoot).StartsWith('engram-dbph-evidence-r3-', [StringComparison]::Ordinal)) { + -not [IO.Path]::GetFileName($tempRoot).StartsWith($tempPrefix, [StringComparison]::Ordinal)) { throw "unsafe temporary root: $tempRoot" } [IO.Directory]::CreateDirectory($tempRoot) | Out-Null -function Invoke-GitRaw { - param([Parameter(Mandatory = $true)][string[]]$Arguments) +function Invoke-GitRawAt { + param( + [Parameter(Mandatory = $true)][string]$WorkingDirectory, + [Parameter(Mandatory = $true)][string[]]$Arguments, + [byte[]]$InputBytes + ) $startInfo = [Diagnostics.ProcessStartInfo]::new() $startInfo.FileName = 'git' - $startInfo.WorkingDirectory = $resolvedRepository + $startInfo.WorkingDirectory = $WorkingDirectory $startInfo.UseShellExecute = $false $startInfo.RedirectStandardOutput = $true $startInfo.RedirectStandardError = $true + $hasInput = $PSBoundParameters.ContainsKey('InputBytes') + $startInfo.RedirectStandardInput = $hasInput foreach ($argument in $Arguments) { $startInfo.ArgumentList.Add($argument) } $process = [Diagnostics.Process]::Start($startInfo) + if ($hasInput) { + $process.StandardInput.BaseStream.Write($InputBytes, 0, $InputBytes.Length) + $process.StandardInput.Close() + } $stream = [IO.MemoryStream]::new() $process.StandardOutput.BaseStream.CopyTo($stream) $standardError = $process.StandardError.ReadToEnd() @@ -50,211 +71,481 @@ function Invoke-GitRaw { return $stream.ToArray() } -function Get-CanonicalBytes { - param([Parameter(Mandatory = $true)][string]$Path) - if ($SourceMode -eq 'GitIndex') { return Invoke-GitRaw -Arguments @('show', ":$Path") } - return Invoke-GitRaw -Arguments @('show', "${Revision}:$Path") +function Convert-BytesToText { + param([Parameter(Mandatory = $true)][byte[]]$Bytes) + return $utf8Strict.GetString($Bytes) } -function Write-JsonNoBom { - param([Parameter(Mandatory = $true)]$Value, [Parameter(Mandatory = $true)][string]$Path) - $json = (($Value | ConvertTo-Json -Depth 20) -replace "`r`n", "`n") - [IO.File]::WriteAllText($Path, $json + "`n", $utf8NoBom) +function Invoke-GitTextAt { + param( + [Parameter(Mandatory = $true)][string]$WorkingDirectory, + [Parameter(Mandatory = $true)][string[]]$Arguments, + [byte[]]$InputBytes + ) + if ($PSBoundParameters.ContainsKey('InputBytes')) { + return (Convert-BytesToText (Invoke-GitRawAt -WorkingDirectory $WorkingDirectory -Arguments $Arguments -InputBytes $InputBytes)).Trim() + } + return (Convert-BytesToText (Invoke-GitRawAt -WorkingDirectory $WorkingDirectory -Arguments $Arguments)).Trim() } -function Write-TextNoBom { - param([Parameter(Mandatory = $true)][string]$Text, [Parameter(Mandatory = $true)][string]$Path) - [IO.File]::WriteAllText($Path, $Text, $utf8NoBom) +function ConvertTo-CanonicalJsonBytes { + param([Parameter(Mandatory = $true)]$Value) + $json = (($Value | ConvertTo-Json -Depth 30) -replace "`r`n", "`n") + "`n" + $bytes = $utf8NoBom.GetBytes($json) + if ($bytes -contains [byte]0x0D) { throw 'canonical JSON serialization produced CR bytes' } + return $bytes } -function New-CoherentSumsOverride { +function ConvertFrom-JsonBytes { + param([Parameter(Mandatory = $true)][byte[]]$Bytes) + return (Convert-BytesToText $Bytes) | ConvertFrom-Json +} + +function Get-SHA256 { + param([Parameter(Mandatory = $true)][byte[]]$Bytes) + return [Convert]::ToHexString([Security.Cryptography.SHA256]::HashData($Bytes)).ToLowerInvariant() +} + +function Get-IndexBytes { + param([Parameter(Mandatory = $true)][string]$CaseRepository, [Parameter(Mandatory = $true)][string]$Path) + return Invoke-GitRawAt -WorkingDirectory $CaseRepository -Arguments @('show', ":$Path") +} + +function Set-IndexBytes { param( - [Parameter(Mandatory = $true)][byte[]]$CanonicalSums, - [Parameter(Mandatory = $true)][string]$MutatedManifestPath, - [string]$RemovePath, - [switch]$ReverseData, - [string]$DuplicatePath, - [Parameter(Mandatory = $true)][string]$OutputFile + [Parameter(Mandatory = $true)][string]$CaseRepository, + [Parameter(Mandatory = $true)][string]$Path, + [Parameter(Mandatory = $true)][byte[]]$Bytes + ) + $oid = Invoke-GitTextAt -WorkingDirectory $CaseRepository -Arguments @('hash-object', '-w', '--stdin') -InputBytes $Bytes + Invoke-GitRawAt -WorkingDirectory $CaseRepository -Arguments @('update-index', '--add', '--cacheinfo', "100644,$oid,$Path") | Out-Null + return $oid +} + +function Write-SumsFromManifest { + param( + [Parameter(Mandatory = $true)][string]$CaseRepository, + [Parameter(Mandatory = $true)]$Manifest, + [Parameter(Mandatory = $true)][byte[]]$ManifestBytes, + [switch]$PreserveManifestEntryOrder, + [switch]$DuplicateFirstDataLine ) - $lines = @($utf8Strict.GetString($CanonicalSums) -split "`n" | Where-Object { $_ -ne '' }) - $headers = @($lines | Where-Object { $_.StartsWith('#') }) $data = [Collections.Generic.List[string]]::new() - foreach ($line in @($lines | Where-Object { -not $_.StartsWith('#') })) { - if (-not [string]::IsNullOrWhiteSpace($RemovePath) -and $line.EndsWith(" $RemovePath", [StringComparison]::Ordinal)) { continue } - $data.Add($line) - } - if (-not [string]::IsNullOrWhiteSpace($DuplicatePath)) { - $duplicate = @($data | Where-Object { $_.EndsWith(" $DuplicatePath", [StringComparison]::Ordinal) }) - if ($duplicate.Count -ne 1) { throw "cannot duplicate checksum path: $DuplicatePath" } - $data.Add($duplicate[0]) - } - if ($ReverseData) { + foreach ($entry in @($Manifest.entries)) { $data.Add("$($entry.sha256) $($entry.path)") } + $data.Add("$(Get-SHA256 -Bytes $ManifestBytes) $ManifestPath") + if (-not $PreserveManifestEntryOrder) { $array = [string[]]@($data) - [Array]::Reverse($array) + [Array]::Sort($array, [Comparison[string]]{ + param($left, $right) + $leftPath = $left.Substring(66) + $rightPath = $right.Substring(66) + return $ordinal.Compare($leftPath, $rightPath) + }) $data = [Collections.Generic.List[string]]::new() foreach ($line in $array) { $data.Add($line) } } - $manifestBytes = [IO.File]::ReadAllBytes($MutatedManifestPath) - $manifestHash = [Convert]::ToHexString([Security.Cryptography.SHA256]::HashData($manifestBytes)).ToLowerInvariant() - for ($index = 0; $index -lt $data.Count; $index++) { - if ($data[$index].EndsWith(" $ManifestPath", [StringComparison]::Ordinal)) { - $data[$index] = "$manifestHash $ManifestPath" + if ($DuplicateFirstDataLine) { $data.Add($data[0]) } + $lines = @( + '# representation_contract=git-blob-bytes-v1', + '# manifest_generation_order=manifest-first-checksum-second', + '# checksum_self_reference=excluded' + ) + @($data) + Set-IndexBytes -CaseRepository $CaseRepository -Path $SumsPath -Bytes $utf8NoBom.GetBytes(($lines -join "`n") + "`n") | Out-Null +} + +function Set-ManifestBytesCoherently { + param( + [Parameter(Mandatory = $true)][string]$CaseRepository, + [Parameter(Mandatory = $true)][byte[]]$ManifestBytes + ) + Set-IndexBytes -CaseRepository $CaseRepository -Path $ManifestPath -Bytes $ManifestBytes | Out-Null + $sumsText = Convert-BytesToText (Get-IndexBytes -CaseRepository $CaseRepository -Path $SumsPath) + $manifestHash = Get-SHA256 -Bytes $ManifestBytes + $lines = @($sumsText -split "`n" | Where-Object { $_ -ne '' }) + $replaced = 0 + for ($index = 0; $index -lt $lines.Count; $index++) { + if ($lines[$index].EndsWith(" $ManifestPath", [StringComparison]::Ordinal)) { + $lines[$index] = "$manifestHash $ManifestPath" + $replaced++ } } - Write-TextNoBom -Text ((@($headers) + @($data) -join "`n") + "`n") -Path $OutputFile + if ($replaced -ne 1) { throw "expected one manifest checksum line, got $replaced" } + Set-IndexBytes -CaseRepository $CaseRepository -Path $SumsPath -Bytes $utf8NoBom.GetBytes(($lines -join "`n") + "`n") | Out-Null +} + +function Set-ManifestObjectCoherently { + param([Parameter(Mandatory = $true)][string]$CaseRepository, [Parameter(Mandatory = $true)]$Manifest) + Set-ManifestBytesCoherently -CaseRepository $CaseRepository -ManifestBytes (ConvertTo-CanonicalJsonBytes -Value $Manifest) +} + +function Set-ArtifactBytesCoherently { + param( + [Parameter(Mandatory = $true)][string]$CaseRepository, + [Parameter(Mandatory = $true)][string]$Path, + [Parameter(Mandatory = $true)][byte[]]$Bytes + ) + $oid = Set-IndexBytes -CaseRepository $CaseRepository -Path $Path -Bytes $Bytes + $manifest = ConvertFrom-JsonBytes (Get-IndexBytes -CaseRepository $CaseRepository -Path $ManifestPath) + $entry = @($manifest.entries | Where-Object { $_.path -ceq $Path }) + if ($entry.Count -ne 1) { throw "manifest must contain exactly one entry for coherent mutation: $Path" } + $entry[0].git_blob_oid = $oid + $entry[0].bytes = [int64]$Bytes.Length + $entry[0].sha256 = Get-SHA256 -Bytes $Bytes + $manifestBytes = ConvertTo-CanonicalJsonBytes -Value $manifest + Set-IndexBytes -CaseRepository $CaseRepository -Path $ManifestPath -Bytes $manifestBytes | Out-Null + Write-SumsFromManifest -CaseRepository $CaseRepository -Manifest $manifest -ManifestBytes $manifestBytes +} + +function Set-ArtifactObjectCoherently { + param( + [Parameter(Mandatory = $true)][string]$CaseRepository, + [Parameter(Mandatory = $true)][string]$Path, + [Parameter(Mandatory = $true)]$Value + ) + Set-ArtifactBytesCoherently -CaseRepository $CaseRepository -Path $Path -Bytes (ConvertTo-CanonicalJsonBytes -Value $Value) +} + +function Add-UnknownProperty { + param([Parameter(Mandatory = $true)]$Object, [string]$Name = 'unexpected_r4_key') + $Object | Add-Member -MemberType NoteProperty -Name $Name -Value 'must-be-rejected' } -function Invoke-VerifierCase { +function Replace-ExactlyOnce { param( - [Parameter(Mandatory = $true)][string]$Name, - [string]$ManifestOverride, - [string]$SumsOverride, - [string]$InventoryOverride, - [Parameter(Mandatory = $true)][int]$ExpectedExit, - [string]$ExpectedFailure + [Parameter(Mandatory = $true)][string]$Text, + [Parameter(Mandatory = $true)][string]$Old, + [Parameter(Mandatory = $true)][string]$New ) + $first = $Text.IndexOf($Old, [StringComparison]::Ordinal) + if ($first -lt 0 -or $Text.IndexOf($Old, $first + $Old.Length, [StringComparison]::Ordinal) -ge 0) { + throw "replacement source must occur exactly once: $Old" + } + return $Text.Substring(0, $first) + $New + $Text.Substring($first + $Old.Length) +} - $resultPath = Join-Path $tempRoot "$Name.result.json" - $logPath = Join-Path $tempRoot "$Name.console.log" - $arguments = @( +function New-CaseRepository { + param([Parameter(Mandatory = $true)][int]$Ordinal, [Parameter(Mandatory = $true)][string]$Name) + $caseRepository = Join-Path $tempRoot ('case-{0:D2}-{1}' -f $Ordinal, $Name) + [IO.Directory]::CreateDirectory($caseRepository) | Out-Null + Invoke-GitRawAt -WorkingDirectory $caseRepository -Arguments @('init', '-q') | Out-Null + $gitDirectory = Invoke-GitTextAt -WorkingDirectory $caseRepository -Arguments @('rev-parse', '--absolute-git-dir') + $infoDirectory = Join-Path $gitDirectory 'objects/info' + [IO.Directory]::CreateDirectory($infoDirectory) | Out-Null + [IO.File]::WriteAllText((Join-Path $infoDirectory 'alternates'), $script:sourceObjectsPath + "`n", $utf8NoBom) + Invoke-GitRawAt -WorkingDirectory $caseRepository -Arguments @('config', 'core.autocrlf', 'false') | Out-Null + Invoke-GitRawAt -WorkingDirectory $caseRepository -Arguments @('update-ref', 'refs/heads/evidence', $DBPHEvidenceParentSHA) | Out-Null + Invoke-GitRawAt -WorkingDirectory $caseRepository -Arguments @('symbolic-ref', 'HEAD', 'refs/heads/evidence') | Out-Null + Invoke-GitRawAt -WorkingDirectory $caseRepository -Arguments @('read-tree', $script:sourceTree) | Out-Null + return $caseRepository +} + +function Invoke-Verifier { + param([Parameter(Mandatory = $true)][string]$CaseRepository, [Parameter(Mandatory = $true)][string]$Name) + $resultPath = Join-Path $CaseRepository 'verifier-result.json' + $startInfo = [Diagnostics.ProcessStartInfo]::new() + $startInfo.FileName = 'pwsh' + $startInfo.WorkingDirectory = $CaseRepository + $startInfo.UseShellExecute = $false + $startInfo.RedirectStandardOutput = $true + $startInfo.RedirectStandardError = $true + foreach ($argument in @( '-NoProfile', '-File', $resolvedVerifier, - '-RepositoryRoot', $resolvedRepository, - '-SourceMode', $SourceMode, - '-Revision', $Revision, + '-RepositoryRoot', $CaseRepository, + '-SourceMode', 'GitIndex', '-ManifestPath', $ManifestPath, '-SumsPath', $SumsPath, '-InventoryPath', $InventoryPath, + '-AdversarialProofPath', $AdversarialProofPath, + '-VerifierProofPath', $VerifierProofPath, '-OutputPath', $resultPath, '-Quiet' - ) - if (-not [string]::IsNullOrWhiteSpace($ManifestOverride)) { $arguments += @('-ManifestOverridePath', $ManifestOverride) } - if (-not [string]::IsNullOrWhiteSpace($SumsOverride)) { $arguments += @('-SumsOverridePath', $SumsOverride) } - if (-not [string]::IsNullOrWhiteSpace($InventoryOverride)) { $arguments += @('-InventoryOverridePath', $InventoryOverride) } - - & pwsh @arguments *> $logPath - $exitCode = $LASTEXITCODE - $result = if (Test-Path -LiteralPath $resultPath) { Get-Content -Raw -LiteralPath $resultPath | ConvertFrom-Json } else { $null } - $failureText = if ($null -eq $result) { '' } else { @($result.failures) -join ' | ' } - $exitMatches = if ($ExpectedExit -eq 0) { $exitCode -eq 0 } else { $exitCode -ne 0 } - $failureMatches = [string]::IsNullOrWhiteSpace($ExpectedFailure) -or $failureText.Contains($ExpectedFailure) - return [ordered]@{ - name = $Name - expected_exit = if ($ExpectedExit -eq 0) { 0 } else { 'nonzero' } - actual_exit = $exitCode - verifier_status = if ($null -eq $result) { 'NO_RESULT' } else { $result.status } - expected_failure = $ExpectedFailure - observed_failures = if ($null -eq $result) { @('verifier did not write result JSON') } else { @($result.failures) } - pass = $exitMatches -and $failureMatches -and $null -ne $result + )) { $startInfo.ArgumentList.Add($argument) } + $process = [Diagnostics.Process]::Start($startInfo) + $stdout = $process.StandardOutput.ReadToEnd() + $stderr = $process.StandardError.ReadToEnd() + $process.WaitForExit() + $result = if (Test-Path -LiteralPath $resultPath) { + Get-Content -Raw -LiteralPath $resultPath | ConvertFrom-Json + } else { + [pscustomobject]@{ status = 'NO_RESULT'; failures = @("verifier did not write result JSON: $Name", $stdout.Trim(), $stderr.Trim()) } + } + return [pscustomobject]@{ exit_code = $process.ExitCode; result = $result } +} + +function Apply-CaseMutation { + param([Parameter(Mandatory = $true)][string]$CaseRepository, [Parameter(Mandatory = $true)][string]$Name) + if ($Name -eq 'baseline') { return } + + $manifestBytes = Get-IndexBytes -CaseRepository $CaseRepository -Path $ManifestPath + $manifestText = Convert-BytesToText $manifestBytes + $inventoryBytes = Get-IndexBytes -CaseRepository $CaseRepository -Path $InventoryPath + $inventoryText = Convert-BytesToText $inventoryBytes + switch ($Name) { + 'missing_changed_path' { + $missingPath = '.agent/reports/evidence/production-ready/db-test-pool-hygiene/16-evidence-r4-red.json' + $manifest = ConvertFrom-JsonBytes $manifestBytes + $before = @($manifest.entries).Count + $manifest.entries = @($manifest.entries | Where-Object { $_.path -cne $missingPath }) + if (@($manifest.entries).Count -ne $before - 1) { throw "missing-path fixture not manifest-bound: $missingPath" } + $manifest.entry_count = [int64]@($manifest.entries).Count + $newBytes = ConvertTo-CanonicalJsonBytes $manifest + Set-IndexBytes -CaseRepository $CaseRepository -Path $ManifestPath -Bytes $newBytes | Out-Null + Write-SumsFromManifest -CaseRepository $CaseRepository -Manifest $manifest -ManifestBytes $newBytes + } + 'unsorted_manifest_and_sums' { + $manifest = ConvertFrom-JsonBytes $manifestBytes + $entries = [object[]]@($manifest.entries) + [Array]::Reverse($entries) + $manifest.entries = $entries + $newBytes = ConvertTo-CanonicalJsonBytes $manifest + Set-IndexBytes -CaseRepository $CaseRepository -Path $ManifestPath -Bytes $newBytes | Out-Null + Write-SumsFromManifest -CaseRepository $CaseRepository -Manifest $manifest -ManifestBytes $newBytes -PreserveManifestEntryOrder + } + 'duplicate_manifest_and_sums' { + $manifest = ConvertFrom-JsonBytes $manifestBytes + $manifest.entries = @($manifest.entries) + @($manifest.entries[0]) + $manifest.entry_count = [int64]@($manifest.entries).Count + $newBytes = ConvertTo-CanonicalJsonBytes $manifest + Set-IndexBytes -CaseRepository $CaseRepository -Path $ManifestPath -Bytes $newBytes | Out-Null + Write-SumsFromManifest -CaseRepository $CaseRepository -Manifest $manifest -ManifestBytes $newBytes -PreserveManifestEntryOrder + } + 'wrong_type_representation_id_array' { + Set-ManifestBytesCoherently -CaseRepository $CaseRepository -ManifestBytes $utf8NoBom.GetBytes((Replace-ExactlyOnce -Text $manifestText -Old '"id": "git-blob-bytes-v1"' -New '"id": ["git-blob-bytes-v1"]')) + } + 'null_representation_id' { + Set-ManifestBytesCoherently -CaseRepository $CaseRepository -ManifestBytes $utf8NoBom.GetBytes((Replace-ExactlyOnce -Text $manifestText -Old '"id": "git-blob-bytes-v1"' -New '"id": null')) + } + 'wrong_type_exclusions_scalar' { + $manifest = ConvertFrom-JsonBytes $manifestBytes + $manifest.evidence_delta.manifest_entry_self_excluded_paths = $ManifestPath + Set-ManifestObjectCoherently -CaseRepository $CaseRepository -Manifest $manifest + } + 'wrong_type_inventory_numeric_strings' { + $text = Replace-ExactlyOnce -Text $inventoryText -Old '"required_call_sites": 83' -New '"required_call_sites": "83"' + $text = Replace-ExactlyOnce -Text $text -Old '"required_files": 8' -New '"required_files": "8"' + Set-ArtifactBytesCoherently -CaseRepository $CaseRepository -Path $InventoryPath -Bytes $utf8NoBom.GetBytes($text) + } + 'null_inventory_count' { + $text = Replace-ExactlyOnce -Text $inventoryText -Old '"required_call_sites": 83' -New '"required_call_sites": null' + Set-ArtifactBytesCoherently -CaseRepository $CaseRepository -Path $InventoryPath -Bytes $utf8NoBom.GetBytes($text) + } + 'crlf_raw_representation' { + Set-ManifestBytesCoherently -CaseRepository $CaseRepository -ManifestBytes $utf8NoBom.GetBytes($manifestText.Replace("`n", "`r`n")) + } + 'incorrect_representation_contract' { + $manifest = ConvertFrom-JsonBytes $manifestBytes + $manifest.representation_contract.id = 'raw-checkout-bytes-v1' + Set-ManifestObjectCoherently -CaseRepository $CaseRepository -Manifest $manifest + } + 'false_inventory_76_6' { + $inventory = ConvertFrom-JsonBytes $inventoryBytes + $inventory.required_call_sites = 76 + $inventory.required_files = 6 + $inventory.actual_call_sites = 76 + $inventory.actual_files = 6 + $inventory.entries = @($inventory.entries | Where-Object { -not $_.path.Contains('temporal_truth') }) + Set-ArtifactObjectCoherently -CaseRepository $CaseRepository -Path $InventoryPath -Value $inventory + } + 'mixed_eol_representation' { + $firstLF = $manifestText.IndexOf("`n", [StringComparison]::Ordinal) + if ($firstLF -lt 0) { throw 'manifest fixture contains no LF' } + $mixed = $manifestText.Substring(0, $firstLF) + "`r`n" + $manifestText.Substring($firstLF + 1) + Set-ManifestBytesCoherently -CaseRepository $CaseRepository -ManifestBytes $utf8NoBom.GetBytes($mixed) + } + 'unknown_manifest_key' { + $manifest = ConvertFrom-JsonBytes $manifestBytes + Add-UnknownProperty -Object $manifest + Set-ManifestObjectCoherently -CaseRepository $CaseRepository -Manifest $manifest + } + 'unknown_manifest_nested_key' { + $manifest = ConvertFrom-JsonBytes $manifestBytes + Add-UnknownProperty -Object $manifest.representation_contract + Set-ManifestObjectCoherently -CaseRepository $CaseRepository -Manifest $manifest + } + 'unknown_manifest_entry_key' { + $manifest = ConvertFrom-JsonBytes $manifestBytes + Add-UnknownProperty -Object $manifest.entries[0] + Set-ManifestObjectCoherently -CaseRepository $CaseRepository -Manifest $manifest + } + 'unknown_inventory_key' { + $inventory = ConvertFrom-JsonBytes $inventoryBytes + Add-UnknownProperty -Object $inventory + Set-ArtifactObjectCoherently -CaseRepository $CaseRepository -Path $InventoryPath -Value $inventory + } + 'unknown_inventory_entry_key' { + $inventory = ConvertFrom-JsonBytes $inventoryBytes + Add-UnknownProperty -Object $inventory.entries[0] + Set-ArtifactObjectCoherently -CaseRepository $CaseRepository -Path $InventoryPath -Value $inventory + } + 'manifest_schema_99' { + $manifest = ConvertFrom-JsonBytes $manifestBytes + $manifest.schema_version = 99 + Set-ManifestObjectCoherently -CaseRepository $CaseRepository -Manifest $manifest + } + 'inventory_schema_99' { + $inventory = ConvertFrom-JsonBytes $inventoryBytes + $inventory.schema_version = 99 + Set-ArtifactObjectCoherently -CaseRepository $CaseRepository -Path $InventoryPath -Value $inventory + } + 'adversarial_proof_schema_99' { + $proof = ConvertFrom-JsonBytes (Get-IndexBytes -CaseRepository $CaseRepository -Path $AdversarialProofPath) + $proof.schema_version = 99 + Set-ArtifactObjectCoherently -CaseRepository $CaseRepository -Path $AdversarialProofPath -Value $proof + } + 'verifier_proof_schema_99' { + $proof = ConvertFrom-JsonBytes (Get-IndexBytes -CaseRepository $CaseRepository -Path $VerifierProofPath) + $proof.schema_version = 99 + Set-ArtifactObjectCoherently -CaseRepository $CaseRepository -Path $VerifierProofPath -Value $proof + } + 'unknown_adversarial_proof_key' { + $proof = ConvertFrom-JsonBytes (Get-IndexBytes -CaseRepository $CaseRepository -Path $AdversarialProofPath) + Add-UnknownProperty -Object $proof + Set-ArtifactObjectCoherently -CaseRepository $CaseRepository -Path $AdversarialProofPath -Value $proof + } + 'unknown_adversarial_case_key' { + $proof = ConvertFrom-JsonBytes (Get-IndexBytes -CaseRepository $CaseRepository -Path $AdversarialProofPath) + Add-UnknownProperty -Object $proof.cases[0] + Set-ArtifactObjectCoherently -CaseRepository $CaseRepository -Path $AdversarialProofPath -Value $proof + } + 'unknown_verifier_proof_key' { + $proof = ConvertFrom-JsonBytes (Get-IndexBytes -CaseRepository $CaseRepository -Path $VerifierProofPath) + Add-UnknownProperty -Object $proof + Set-ArtifactObjectCoherently -CaseRepository $CaseRepository -Path $VerifierProofPath -Value $proof + } + 'stale_adversarial_proof' { + $proof = ConvertFrom-JsonBytes (Get-IndexBytes -CaseRepository $CaseRepository -Path $AdversarialProofPath) + $proof.cases = @($proof.cases[0..($proof.cases.Count - 2)]) + Set-ArtifactObjectCoherently -CaseRepository $CaseRepository -Path $AdversarialProofPath -Value $proof + } + 'stale_verifier_proof' { + $proof = ConvertFrom-JsonBytes (Get-IndexBytes -CaseRepository $CaseRepository -Path $VerifierProofPath) + $proof.changed_paths = [int64]$proof.changed_paths - 1 + Set-ArtifactObjectCoherently -CaseRepository $CaseRepository -Path $VerifierProofPath -Value $proof + } + 'false_adversarial_case_order' { + $proof = ConvertFrom-JsonBytes (Get-IndexBytes -CaseRepository $CaseRepository -Path $AdversarialProofPath) + $cases = [object[]]@($proof.cases) + $temporary = $cases[0] + $cases[0] = $cases[1] + $cases[1] = $temporary + $proof.cases = $cases + Set-ArtifactObjectCoherently -CaseRepository $CaseRepository -Path $AdversarialProofPath -Value $proof + } + 'false_adversarial_status' { + $proof = ConvertFrom-JsonBytes (Get-IndexBytes -CaseRepository $CaseRepository -Path $AdversarialProofPath) + $proof.status = 'FAIL' + Set-ArtifactObjectCoherently -CaseRepository $CaseRepository -Path $AdversarialProofPath -Value $proof + } + 'false_adversarial_actual_status' { + $proof = ConvertFrom-JsonBytes (Get-IndexBytes -CaseRepository $CaseRepository -Path $AdversarialProofPath) + $proof.cases[1].actual_exit = 0 + Set-ArtifactObjectCoherently -CaseRepository $CaseRepository -Path $AdversarialProofPath -Value $proof + } + 'false_adversarial_required_diagnostic' { + $proof = ConvertFrom-JsonBytes (Get-IndexBytes -CaseRepository $CaseRepository -Path $AdversarialProofPath) + $proof.cases[1].observed_failures = [object[]]@() + Set-ArtifactObjectCoherently -CaseRepository $CaseRepository -Path $AdversarialProofPath -Value $proof + } + 'false_verifier_counts' { + $proof = ConvertFrom-JsonBytes (Get-IndexBytes -CaseRepository $CaseRepository -Path $VerifierProofPath) + $proof.manifest_entries = [int64]$proof.manifest_entries + 1 + Set-ArtifactObjectCoherently -CaseRepository $CaseRepository -Path $VerifierProofPath -Value $proof + } + 'false_verifier_status' { + $proof = ConvertFrom-JsonBytes (Get-IndexBytes -CaseRepository $CaseRepository -Path $VerifierProofPath) + $proof.status = 'FAIL' + Set-ArtifactObjectCoherently -CaseRepository $CaseRepository -Path $VerifierProofPath -Value $proof + } + 'false_verifier_source_revision' { + $proof = ConvertFrom-JsonBytes (Get-IndexBytes -CaseRepository $CaseRepository -Path $VerifierProofPath) + $proof.source_mode = 'GitRevision' + $proof.revision = 'HEAD' + Set-ArtifactObjectCoherently -CaseRepository $CaseRepository -Path $VerifierProofPath -Value $proof + } + 'duplicate_json_property' { + $duplicate = '"schema_version": 4,' + "`n " + '"schema_version": 4,' + $text = Replace-ExactlyOnce -Text $manifestText -Old '"schema_version": 4,' -New $duplicate + Set-ManifestBytesCoherently -CaseRepository $CaseRepository -ManifestBytes $utf8NoBom.GetBytes($text) + } + default { throw "unimplemented adversarial case: $Name" } } } $cases = [Collections.Generic.List[object]]::new() $cleanupError = $null +$fatalError = $null try { - $canonicalManifest = Get-CanonicalBytes -Path $ManifestPath - $canonicalSums = Get-CanonicalBytes -Path $SumsPath - $canonicalInventory = Get-CanonicalBytes -Path $InventoryPath - $manifestText = $utf8Strict.GetString($canonicalManifest) - $inventoryText = $utf8Strict.GetString($canonicalInventory) - - $cases.Add((Invoke-VerifierCase -Name 'baseline' -ExpectedExit 0)) - - $missingPath = '.agent/reports/evidence/production-ready/db-test-pool-hygiene/14-evidence-r2-focused.log' - $missingManifest = $manifestText | ConvertFrom-Json - $missingManifest.entries = @($missingManifest.entries | Where-Object { $_.path -cne $missingPath }) - $missingManifest.entry_count = [int64]$missingManifest.entries.Count - $missingManifestPath = Join-Path $tempRoot 'MANIFEST.missing-changed-path.json' - $missingSumsPath = Join-Path $tempRoot 'SHA256SUMS.missing-changed-path.txt' - Write-JsonNoBom -Value $missingManifest -Path $missingManifestPath - New-CoherentSumsOverride -CanonicalSums $canonicalSums -MutatedManifestPath $missingManifestPath -RemovePath $missingPath -OutputFile $missingSumsPath - $cases.Add((Invoke-VerifierCase -Name 'missing_changed_path' -ManifestOverride $missingManifestPath -SumsOverride $missingSumsPath -ExpectedExit 1 -ExpectedFailure 'manifest missing changed path')) - - $unsortedManifest = $manifestText | ConvertFrom-Json - $reversedEntries = [object[]]@($unsortedManifest.entries) - [Array]::Reverse($reversedEntries) - $unsortedManifest.entries = $reversedEntries - $unsortedManifestPath = Join-Path $tempRoot 'MANIFEST.unsorted.json' - $unsortedSumsPath = Join-Path $tempRoot 'SHA256SUMS.unsorted.txt' - Write-JsonNoBom -Value $unsortedManifest -Path $unsortedManifestPath - New-CoherentSumsOverride -CanonicalSums $canonicalSums -MutatedManifestPath $unsortedManifestPath -ReverseData -OutputFile $unsortedSumsPath - $cases.Add((Invoke-VerifierCase -Name 'unsorted_manifest_and_sums' -ManifestOverride $unsortedManifestPath -SumsOverride $unsortedSumsPath -ExpectedExit 1 -ExpectedFailure 'not canonical ordinal order')) - - $duplicateManifest = $manifestText | ConvertFrom-Json - $duplicatePath = [string]$duplicateManifest.entries[0].path - $duplicateManifest.entries = @($duplicateManifest.entries) + @($duplicateManifest.entries[0]) - $duplicateManifest.entry_count = [int64]$duplicateManifest.entries.Count - $duplicateManifestPath = Join-Path $tempRoot 'MANIFEST.duplicate.json' - $duplicateSumsPath = Join-Path $tempRoot 'SHA256SUMS.duplicate.txt' - Write-JsonNoBom -Value $duplicateManifest -Path $duplicateManifestPath - New-CoherentSumsOverride -CanonicalSums $canonicalSums -MutatedManifestPath $duplicateManifestPath -DuplicatePath $duplicatePath -OutputFile $duplicateSumsPath - $cases.Add((Invoke-VerifierCase -Name 'duplicate_manifest_and_sums' -ManifestOverride $duplicateManifestPath -SumsOverride $duplicateSumsPath -ExpectedExit 1 -ExpectedFailure 'duplicate manifest path')) - - $wrongTypeIDPath = Join-Path $tempRoot 'MANIFEST.id-array.json' - Write-TextNoBom -Text ($manifestText.Replace('"id": "git-blob-bytes-v1"', '"id": ["git-blob-bytes-v1"]')) -Path $wrongTypeIDPath - $cases.Add((Invoke-VerifierCase -Name 'wrong_type_representation_id_array' -ManifestOverride $wrongTypeIDPath -ExpectedExit 1 -ExpectedFailure 'must be JSON string, got array')) - - $nullIDPath = Join-Path $tempRoot 'MANIFEST.id-null.json' - Write-TextNoBom -Text ($manifestText.Replace('"id": "git-blob-bytes-v1"', '"id": null')) -Path $nullIDPath - $cases.Add((Invoke-VerifierCase -Name 'null_representation_id' -ManifestOverride $nullIDPath -ExpectedExit 1 -ExpectedFailure 'must be JSON string, got null')) - - $scalarExclusion = $manifestText | ConvertFrom-Json - $scalarExclusion.evidence_delta.manifest_entry_self_excluded_paths = '.agent/reports/evidence/production-ready/db-test-pool-hygiene/MANIFEST.json' - $scalarExclusionPath = Join-Path $tempRoot 'MANIFEST.exclusion-scalar.json' - Write-JsonNoBom -Value $scalarExclusion -Path $scalarExclusionPath - $cases.Add((Invoke-VerifierCase -Name 'wrong_type_exclusions_scalar' -ManifestOverride $scalarExclusionPath -ExpectedExit 1 -ExpectedFailure 'must be JSON array, got string')) - - $numericStringsPath = Join-Path $tempRoot 'INVENTORY.numeric-strings.json' - $numericStrings = $inventoryText.Replace('"required_call_sites": 83', '"required_call_sites": "83"').Replace('"required_files": 8', '"required_files": "8"') - Write-TextNoBom -Text $numericStrings -Path $numericStringsPath - $cases.Add((Invoke-VerifierCase -Name 'wrong_type_inventory_numeric_strings' -InventoryOverride $numericStringsPath -ExpectedExit 1 -ExpectedFailure 'must be JSON number, got string')) - - $nullCountPath = Join-Path $tempRoot 'INVENTORY.null-count.json' - Write-TextNoBom -Text ($inventoryText.Replace('"required_call_sites": 83', '"required_call_sites": null')) -Path $nullCountPath - $cases.Add((Invoke-VerifierCase -Name 'null_inventory_count' -InventoryOverride $nullCountPath -ExpectedExit 1 -ExpectedFailure 'must be JSON number, got null')) - - $crlfManifestPath = Join-Path $tempRoot 'MANIFEST.raw-crlf.json' - Write-TextNoBom -Text ($manifestText -replace "(? exact stdout bytes') { Add-Failure 'representation contract_bytes mismatch' } + if ($manifest.representation_contract.working_tree_bytes -cne 'excluded; raw CRLF checkout bytes fail verification') { Add-Failure 'representation working_tree_bytes mismatch' } if ($manifest.representation_contract.text_git_blob_line_endings -cne 'LF') { Add-Failure 'unsupported Git blob line-ending contract' } if ($manifest.representation_contract.manifest_self_reference -cne 'excluded-from-manifest-entries-bound-by-outer-checksum') { Add-Failure 'manifest self-reference contract mismatch' } + if ($manifest.representation_contract.outer_checksum_path -cne $SumsPath) { Add-Failure 'outer checksum path mismatch' } if ($manifest.representation_contract.outer_checksum_generation_order -cne 'manifest-first-checksum-second') { Add-Failure 'outer checksum generation order mismatch' } if ($manifest.representation_contract.outer_checksum_self_reference -cne 'excluded') { Add-Failure 'outer checksum self-reference contract mismatch' } Test-ExactStringArray -Actual @($manifest.evidence_delta.manifest_entry_self_excluded_paths) -Expected $expectedManifestExclusions -Label 'manifest entry self exclusions' @@ -497,6 +709,7 @@ try { $inventoryDocument = Open-JsonDocument -Bytes $inventoryBytes -Label $InventoryPath try { Test-InventoryRawSchema -Document $inventoryDocument } finally { $inventoryDocument.Dispose() } $inventory = Convert-JsonBytes -Bytes $inventoryBytes -Label $InventoryPath + if ([int64]$inventory.schema_version -ne $DBPHInventorySchemaVersion) { Add-Failure "inventory schema_version must be $DBPHInventorySchemaVersion" } if ($inventory.parent_sha -cne $expectedProductParentSHA) { Add-Failure 'inventory parent_sha mismatch' } $actualInventory = Get-ParentInventory -ParentSHA $expectedProductParentSHA $actualInventoryCount = [int](($actualInventory | Measure-Object count -Sum).Sum) @@ -504,6 +717,10 @@ try { if ([int64]$inventory.required_call_sites -ne 83 -or [int64]$inventory.required_files -ne 8) { Add-Failure "inventory acceptance constants must be 83/8, got $($inventory.required_call_sites)/$($inventory.required_files)" } + if ([int64]$manifest.inventory.required_call_sites -ne 83 -or [int64]$manifest.inventory.required_files -ne 8 -or + [string]$manifest.inventory.parent_sha -cne $expectedProductParentSHA -or [string]$manifest.inventory.path -cne $InventoryPath) { + Add-Failure 'manifest inventory contract mismatch' + } if ([int64]$inventory.actual_call_sites -ne $actualInventoryCount -or [int64]$inventory.actual_files -ne $actualInventoryFiles) { Add-Failure "inventory total mismatch: declared $($inventory.actual_call_sites)/$($inventory.actual_files), actual $actualInventoryCount/$actualInventoryFiles" } @@ -586,18 +803,26 @@ try { foreach ($path in $sumMap.Keys) { if (-not $requiredSumPaths.Contains($path)) { Add-Failure "outer checksum contains unbound extra path: $path" } } + + Test-CanonicalDynamicProofs ` + -ChangedPaths ([int64]$changedPathCount) ` + -DirectlyBoundChangedPaths ([int64]$directlyBoundChangedPathCount) ` + -ManifestEntries ([int64]$manifestEntryCount) ` + -ChecksumEntries ([int64]$sumEntryCount) ` + -InventoryCallSites ([int64]$actualInventoryCount) ` + -InventoryFiles ([int64]$actualInventoryFiles) } catch { Add-Failure "verifier exception: $($_.Exception.Message)" } $result = [ordered]@{ - schema_version = 3 + schema_version = $DBPHVerifierProofSchemaVersion status = if ($failures.Count -eq 0) { 'PASS' } else { 'FAIL' } source_mode = $SourceMode revision = if ($SourceMode -eq 'GitIndex') { 'INDEX' } else { $Revision } product_candidate_sha = $ProductCandidateSHA - representation_contract = 'git-blob-bytes-v1' + representation_contract = $DBPHRepresentationContract changed_paths = $changedPathCount directly_bound_changed_paths = $directlyBoundChangedPathCount manifest_entries = $manifestEntryCount diff --git a/.agent/reports/evidence/production-ready/db-test-pool-hygiene/adversarial-proof.json b/.agent/reports/evidence/production-ready/db-test-pool-hygiene/adversarial-proof.json index a13f6471..c1c09b6d 100644 --- a/.agent/reports/evidence/production-ready/db-test-pool-hygiene/adversarial-proof.json +++ b/.agent/reports/evidence/production-ready/db-test-pool-hygiene/adversarial-proof.json @@ -1,5 +1,5 @@ { - "schema_version": 3, + "schema_version": 4, "status": "PASS", "source_mode": "GitIndex", "revision": "INDEX", @@ -10,7 +10,7 @@ "actual_exit": 0, "verifier_status": "PASS", "expected_failure": "", - "observed_failures": null, + "observed_failures": [], "pass": true }, { @@ -19,7 +19,11 @@ "actual_exit": 1, "verifier_status": "FAIL", "expected_failure": "manifest missing changed path", - "observed_failures": "manifest missing changed path: .agent/reports/evidence/production-ready/db-test-pool-hygiene/14-evidence-r2-focused.log", + "observed_failures": [ + "manifest missing changed path: .agent/reports/evidence/production-ready/db-test-pool-hygiene/16-evidence-r4-red.json", + "verifier proof manifest_entries mismatch: declared 35, actual 34", + "verifier proof checksum_entries mismatch: declared 36, actual 35" + ], "pass": true }, { @@ -35,12 +39,16 @@ "manifest paths are not canonical ordinal order: .agent/reports/evidence/production-ready/db-test-pool-hygiene/Verify-DBPoolHygieneEvidence.ps1 before .agent/reports/evidence/production-ready/db-test-pool-hygiene/Test-DBPoolHygieneEvidenceAdversarial.ps1", "manifest paths are not canonical ordinal order: .agent/reports/evidence/production-ready/db-test-pool-hygiene/Test-DBPoolHygieneEvidenceAdversarial.ps1 before .agent/reports/evidence/production-ready/db-test-pool-hygiene/Invoke-DBPoolHygieneGo.ps1", "manifest paths are not canonical ordinal order: .agent/reports/evidence/production-ready/db-test-pool-hygiene/Invoke-DBPoolHygieneGo.ps1 before .agent/reports/evidence/production-ready/db-test-pool-hygiene/INVENTORY.json", - "manifest paths are not canonical ordinal order: .agent/reports/evidence/production-ready/db-test-pool-hygiene/INVENTORY.json before .agent/reports/evidence/production-ready/db-test-pool-hygiene/DB-TEST-POOL-HYGIENE.red.json", + "manifest paths are not canonical ordinal order: .agent/reports/evidence/production-ready/db-test-pool-hygiene/INVENTORY.json before .agent/reports/evidence/production-ready/db-test-pool-hygiene/DBPoolHygieneEvidenceContract.ps1", + "manifest paths are not canonical ordinal order: .agent/reports/evidence/production-ready/db-test-pool-hygiene/DBPoolHygieneEvidenceContract.ps1 before .agent/reports/evidence/production-ready/db-test-pool-hygiene/DB-TEST-POOL-HYGIENE.red.json", "manifest paths are not canonical ordinal order: .agent/reports/evidence/production-ready/db-test-pool-hygiene/DB-TEST-POOL-HYGIENE.red.json before .agent/reports/evidence/production-ready/db-test-pool-hygiene/DB-TEST-POOL-HYGIENE.final.json", - "manifest paths are not canonical ordinal order: .agent/reports/evidence/production-ready/db-test-pool-hygiene/DB-TEST-POOL-HYGIENE.final.json before .agent/reports/evidence/production-ready/db-test-pool-hygiene/DB-TEST-POOL-HYGIENE.evidence-r3.json", + "manifest paths are not canonical ordinal order: .agent/reports/evidence/production-ready/db-test-pool-hygiene/DB-TEST-POOL-HYGIENE.final.json before .agent/reports/evidence/production-ready/db-test-pool-hygiene/DB-TEST-POOL-HYGIENE.evidence-r4.json", + "manifest paths are not canonical ordinal order: .agent/reports/evidence/production-ready/db-test-pool-hygiene/DB-TEST-POOL-HYGIENE.evidence-r4.json before .agent/reports/evidence/production-ready/db-test-pool-hygiene/DB-TEST-POOL-HYGIENE.evidence-r3.json", "manifest paths are not canonical ordinal order: .agent/reports/evidence/production-ready/db-test-pool-hygiene/DB-TEST-POOL-HYGIENE.evidence-r3.json before .agent/reports/evidence/production-ready/db-test-pool-hygiene/DB-TEST-POOL-HYGIENE.evidence-r2.json", "manifest paths are not canonical ordinal order: .agent/reports/evidence/production-ready/db-test-pool-hygiene/DB-TEST-POOL-HYGIENE.evidence-r2.json before .agent/reports/evidence/production-ready/db-test-pool-hygiene/Build-DBPoolHygieneEvidence.ps1", - "manifest paths are not canonical ordinal order: .agent/reports/evidence/production-ready/db-test-pool-hygiene/Build-DBPoolHygieneEvidence.ps1 before .agent/reports/evidence/production-ready/db-test-pool-hygiene/15-evidence-r2-static.txt", + "manifest paths are not canonical ordinal order: .agent/reports/evidence/production-ready/db-test-pool-hygiene/Build-DBPoolHygieneEvidence.ps1 before .agent/reports/evidence/production-ready/db-test-pool-hygiene/17-evidence-r4-gates.json", + "manifest paths are not canonical ordinal order: .agent/reports/evidence/production-ready/db-test-pool-hygiene/17-evidence-r4-gates.json before .agent/reports/evidence/production-ready/db-test-pool-hygiene/16-evidence-r4-red.json", + "manifest paths are not canonical ordinal order: .agent/reports/evidence/production-ready/db-test-pool-hygiene/16-evidence-r4-red.json before .agent/reports/evidence/production-ready/db-test-pool-hygiene/15-evidence-r2-static.txt", "manifest paths are not canonical ordinal order: .agent/reports/evidence/production-ready/db-test-pool-hygiene/15-evidence-r2-static.txt before .agent/reports/evidence/production-ready/db-test-pool-hygiene/14-evidence-r2-focused.log", "manifest paths are not canonical ordinal order: .agent/reports/evidence/production-ready/db-test-pool-hygiene/14-evidence-r2-focused.log before .agent/reports/evidence/production-ready/db-test-pool-hygiene/13-final-residue.log", "manifest paths are not canonical ordinal order: .agent/reports/evidence/production-ready/db-test-pool-hygiene/13-final-residue.log before .agent/reports/evidence/production-ready/db-test-pool-hygiene/12-static-gates.txt", @@ -55,22 +63,26 @@ "manifest paths are not canonical ordinal order: .agent/reports/evidence/production-ready/db-test-pool-hygiene/04-prove-it.log before .agent/reports/evidence/production-ready/db-test-pool-hygiene/03-green-focused.log", "manifest paths are not canonical ordinal order: .agent/reports/evidence/production-ready/db-test-pool-hygiene/03-green-focused.log before .agent/reports/evidence/production-ready/db-test-pool-hygiene/02-parent-red.log", "manifest paths are not canonical ordinal order: .agent/reports/evidence/production-ready/db-test-pool-hygiene/02-parent-red.log before .agent/reports/evidence/production-ready/db-test-pool-hygiene/01-parent-broad.summary.log", - "manifest paths are not canonical ordinal order: .agent/reports/evidence/production-ready/db-test-pool-hygiene/01-parent-broad.summary.log before .agent/reports/2026-07-11-db-test-pool-hygiene-evidence-revision3-maker.md", + "manifest paths are not canonical ordinal order: .agent/reports/evidence/production-ready/db-test-pool-hygiene/01-parent-broad.summary.log before .agent/reports/2026-07-11-db-test-pool-hygiene-evidence-revision4-maker.md", + "manifest paths are not canonical ordinal order: .agent/reports/2026-07-11-db-test-pool-hygiene-evidence-revision4-maker.md before .agent/reports/2026-07-11-db-test-pool-hygiene-evidence-revision3-maker.md", "manifest paths are not canonical ordinal order: .agent/reports/2026-07-11-db-test-pool-hygiene-evidence-revision3-maker.md before .agent/reports/2026-07-10-db-test-pool-hygiene-maker.md", "manifest paths are not canonical ordinal order: .agent/reports/2026-07-10-db-test-pool-hygiene-maker.md before .agent/reports/2026-07-10-db-test-pool-hygiene-evidence-revision-maker.md", "checksum paths are not canonical ordinal order: internal/db/gorm/candidate_store_test.go before .agent/reports/evidence/production-ready/db-test-pool-hygiene/verifier-proof.json", "checksum paths are not canonical ordinal order: .agent/reports/evidence/production-ready/db-test-pool-hygiene/verifier-proof.json before .agent/reports/evidence/production-ready/db-test-pool-hygiene/adversarial-proof.json", "checksum paths are not canonical ordinal order: .agent/reports/evidence/production-ready/db-test-pool-hygiene/adversarial-proof.json before .agent/reports/evidence/production-ready/db-test-pool-hygiene/Verify-DBPoolHygieneEvidence.ps1", "checksum paths are not canonical ordinal order: .agent/reports/evidence/production-ready/db-test-pool-hygiene/Verify-DBPoolHygieneEvidence.ps1 before .agent/reports/evidence/production-ready/db-test-pool-hygiene/Test-DBPoolHygieneEvidenceAdversarial.ps1", - "checksum paths are not canonical ordinal order: .agent/reports/evidence/production-ready/db-test-pool-hygiene/Test-DBPoolHygieneEvidenceAdversarial.ps1 before .agent/reports/evidence/production-ready/db-test-pool-hygiene/MANIFEST.json", - "checksum paths are not canonical ordinal order: .agent/reports/evidence/production-ready/db-test-pool-hygiene/MANIFEST.json before .agent/reports/evidence/production-ready/db-test-pool-hygiene/Invoke-DBPoolHygieneGo.ps1", + "checksum paths are not canonical ordinal order: .agent/reports/evidence/production-ready/db-test-pool-hygiene/Test-DBPoolHygieneEvidenceAdversarial.ps1 before .agent/reports/evidence/production-ready/db-test-pool-hygiene/Invoke-DBPoolHygieneGo.ps1", "checksum paths are not canonical ordinal order: .agent/reports/evidence/production-ready/db-test-pool-hygiene/Invoke-DBPoolHygieneGo.ps1 before .agent/reports/evidence/production-ready/db-test-pool-hygiene/INVENTORY.json", - "checksum paths are not canonical ordinal order: .agent/reports/evidence/production-ready/db-test-pool-hygiene/INVENTORY.json before .agent/reports/evidence/production-ready/db-test-pool-hygiene/DB-TEST-POOL-HYGIENE.red.json", + "checksum paths are not canonical ordinal order: .agent/reports/evidence/production-ready/db-test-pool-hygiene/INVENTORY.json before .agent/reports/evidence/production-ready/db-test-pool-hygiene/DBPoolHygieneEvidenceContract.ps1", + "checksum paths are not canonical ordinal order: .agent/reports/evidence/production-ready/db-test-pool-hygiene/DBPoolHygieneEvidenceContract.ps1 before .agent/reports/evidence/production-ready/db-test-pool-hygiene/DB-TEST-POOL-HYGIENE.red.json", "checksum paths are not canonical ordinal order: .agent/reports/evidence/production-ready/db-test-pool-hygiene/DB-TEST-POOL-HYGIENE.red.json before .agent/reports/evidence/production-ready/db-test-pool-hygiene/DB-TEST-POOL-HYGIENE.final.json", - "checksum paths are not canonical ordinal order: .agent/reports/evidence/production-ready/db-test-pool-hygiene/DB-TEST-POOL-HYGIENE.final.json before .agent/reports/evidence/production-ready/db-test-pool-hygiene/DB-TEST-POOL-HYGIENE.evidence-r3.json", + "checksum paths are not canonical ordinal order: .agent/reports/evidence/production-ready/db-test-pool-hygiene/DB-TEST-POOL-HYGIENE.final.json before .agent/reports/evidence/production-ready/db-test-pool-hygiene/DB-TEST-POOL-HYGIENE.evidence-r4.json", + "checksum paths are not canonical ordinal order: .agent/reports/evidence/production-ready/db-test-pool-hygiene/DB-TEST-POOL-HYGIENE.evidence-r4.json before .agent/reports/evidence/production-ready/db-test-pool-hygiene/DB-TEST-POOL-HYGIENE.evidence-r3.json", "checksum paths are not canonical ordinal order: .agent/reports/evidence/production-ready/db-test-pool-hygiene/DB-TEST-POOL-HYGIENE.evidence-r3.json before .agent/reports/evidence/production-ready/db-test-pool-hygiene/DB-TEST-POOL-HYGIENE.evidence-r2.json", "checksum paths are not canonical ordinal order: .agent/reports/evidence/production-ready/db-test-pool-hygiene/DB-TEST-POOL-HYGIENE.evidence-r2.json before .agent/reports/evidence/production-ready/db-test-pool-hygiene/Build-DBPoolHygieneEvidence.ps1", - "checksum paths are not canonical ordinal order: .agent/reports/evidence/production-ready/db-test-pool-hygiene/Build-DBPoolHygieneEvidence.ps1 before .agent/reports/evidence/production-ready/db-test-pool-hygiene/15-evidence-r2-static.txt", + "checksum paths are not canonical ordinal order: .agent/reports/evidence/production-ready/db-test-pool-hygiene/Build-DBPoolHygieneEvidence.ps1 before .agent/reports/evidence/production-ready/db-test-pool-hygiene/17-evidence-r4-gates.json", + "checksum paths are not canonical ordinal order: .agent/reports/evidence/production-ready/db-test-pool-hygiene/17-evidence-r4-gates.json before .agent/reports/evidence/production-ready/db-test-pool-hygiene/16-evidence-r4-red.json", + "checksum paths are not canonical ordinal order: .agent/reports/evidence/production-ready/db-test-pool-hygiene/16-evidence-r4-red.json before .agent/reports/evidence/production-ready/db-test-pool-hygiene/15-evidence-r2-static.txt", "checksum paths are not canonical ordinal order: .agent/reports/evidence/production-ready/db-test-pool-hygiene/15-evidence-r2-static.txt before .agent/reports/evidence/production-ready/db-test-pool-hygiene/14-evidence-r2-focused.log", "checksum paths are not canonical ordinal order: .agent/reports/evidence/production-ready/db-test-pool-hygiene/14-evidence-r2-focused.log before .agent/reports/evidence/production-ready/db-test-pool-hygiene/13-final-residue.log", "checksum paths are not canonical ordinal order: .agent/reports/evidence/production-ready/db-test-pool-hygiene/13-final-residue.log before .agent/reports/evidence/production-ready/db-test-pool-hygiene/12-static-gates.txt", @@ -85,7 +97,8 @@ "checksum paths are not canonical ordinal order: .agent/reports/evidence/production-ready/db-test-pool-hygiene/04-prove-it.log before .agent/reports/evidence/production-ready/db-test-pool-hygiene/03-green-focused.log", "checksum paths are not canonical ordinal order: .agent/reports/evidence/production-ready/db-test-pool-hygiene/03-green-focused.log before .agent/reports/evidence/production-ready/db-test-pool-hygiene/02-parent-red.log", "checksum paths are not canonical ordinal order: .agent/reports/evidence/production-ready/db-test-pool-hygiene/02-parent-red.log before .agent/reports/evidence/production-ready/db-test-pool-hygiene/01-parent-broad.summary.log", - "checksum paths are not canonical ordinal order: .agent/reports/evidence/production-ready/db-test-pool-hygiene/01-parent-broad.summary.log before .agent/reports/2026-07-11-db-test-pool-hygiene-evidence-revision3-maker.md", + "checksum paths are not canonical ordinal order: .agent/reports/evidence/production-ready/db-test-pool-hygiene/01-parent-broad.summary.log before .agent/reports/2026-07-11-db-test-pool-hygiene-evidence-revision4-maker.md", + "checksum paths are not canonical ordinal order: .agent/reports/2026-07-11-db-test-pool-hygiene-evidence-revision4-maker.md before .agent/reports/2026-07-11-db-test-pool-hygiene-evidence-revision3-maker.md", "checksum paths are not canonical ordinal order: .agent/reports/2026-07-11-db-test-pool-hygiene-evidence-revision3-maker.md before .agent/reports/2026-07-10-db-test-pool-hygiene-maker.md", "checksum paths are not canonical ordinal order: .agent/reports/2026-07-10-db-test-pool-hygiene-maker.md before .agent/reports/2026-07-10-db-test-pool-hygiene-evidence-revision-maker.md" ], @@ -101,7 +114,8 @@ "duplicate manifest path: .agent/reports/2026-07-10-db-test-pool-hygiene-evidence-revision-maker.md", "manifest paths are not canonical ordinal order: internal/db/gorm/candidate_store_test.go before .agent/reports/2026-07-10-db-test-pool-hygiene-evidence-revision-maker.md", "duplicate checksum path: .agent/reports/2026-07-10-db-test-pool-hygiene-evidence-revision-maker.md", - "checksum paths are not canonical ordinal order: internal/db/gorm/candidate_store_test.go before .agent/reports/2026-07-10-db-test-pool-hygiene-evidence-revision-maker.md" + "checksum paths are not canonical ordinal order: internal/db/gorm/candidate_store_test.go before .agent/reports/2026-07-10-db-test-pool-hygiene-evidence-revision-maker.md", + "verifier proof manifest_entries mismatch: declared 35, actual 36" ], "pass": true }, @@ -112,8 +126,7 @@ "verifier_status": "FAIL", "expected_failure": "must be JSON string, got array", "observed_failures": [ - "manifest.representation_contract.id must be JSON string, got array", - "outer checksum mismatch: .agent/reports/evidence/production-ready/db-test-pool-hygiene/MANIFEST.json" + "manifest.representation_contract.id must be JSON string, got array" ], "pass": true }, @@ -125,8 +138,7 @@ "expected_failure": "must be JSON string, got null", "observed_failures": [ "manifest.representation_contract.id must be JSON string, got null", - "unsupported representation contract: ", - "outer checksum mismatch: .agent/reports/evidence/production-ready/db-test-pool-hygiene/MANIFEST.json" + "unsupported representation contract: " ], "pass": true }, @@ -138,8 +150,7 @@ "expected_failure": "must be JSON array, got string", "observed_failures": [ "manifest.evidence_delta.manifest_entry_self_excluded_paths must be JSON array, got string", - "manifest entry self exclusions must contain exactly 2 item(s)", - "outer checksum mismatch: .agent/reports/evidence/production-ready/db-test-pool-hygiene/MANIFEST.json" + "manifest entry self exclusions must contain exactly 2 item(s)" ], "pass": true }, @@ -151,8 +162,7 @@ "expected_failure": "must be JSON number, got string", "observed_failures": [ "inventory.required_call_sites must be JSON number, got string", - "inventory.required_files must be JSON number, got string", - "outer checksum mismatch: .agent/reports/evidence/production-ready/db-test-pool-hygiene/INVENTORY.json" + "inventory.required_files must be JSON number, got string" ], "pass": true }, @@ -164,8 +174,7 @@ "expected_failure": "must be JSON number, got null", "observed_failures": [ "inventory.required_call_sites must be JSON number, got null", - "inventory acceptance constants must be 83/8, got /8", - "outer checksum mismatch: .agent/reports/evidence/production-ready/db-test-pool-hygiene/INVENTORY.json" + "inventory acceptance constants must be 83/8, got /8" ], "pass": true }, @@ -176,8 +185,7 @@ "verifier_status": "FAIL", "expected_failure": "manifest bytes contain CR", "observed_failures": [ - "manifest bytes contain CR; LF Git blob bytes are required", - "outer checksum mismatch: .agent/reports/evidence/production-ready/db-test-pool-hygiene/MANIFEST.json" + "manifest bytes contain CR; LF Git blob bytes are required" ], "pass": true }, @@ -188,8 +196,7 @@ "verifier_status": "FAIL", "expected_failure": "unsupported representation contract", "observed_failures": [ - "unsupported representation contract: raw-checkout-bytes-v1", - "outer checksum mismatch: .agent/reports/evidence/production-ready/db-test-pool-hygiene/MANIFEST.json" + "unsupported representation contract: raw-checkout-bytes-v1" ], "pass": true }, @@ -203,8 +210,261 @@ "inventory acceptance constants must be 83/8, got 76/6", "inventory total mismatch: declared 76/6, actual 83/8", "inventory missing path: internal/db/gorm/temporal_truth_store_migration_test.go", - "inventory missing path: internal/db/gorm/temporal_truth_store_test.go", - "outer checksum mismatch: .agent/reports/evidence/production-ready/db-test-pool-hygiene/INVENTORY.json" + "inventory missing path: internal/db/gorm/temporal_truth_store_test.go" + ], + "pass": true + }, + { + "name": "mixed_eol_representation", + "expected_exit": "nonzero", + "actual_exit": 1, + "verifier_status": "FAIL", + "expected_failure": "manifest bytes contain CR", + "observed_failures": [ + "manifest bytes contain CR; LF Git blob bytes are required" + ], + "pass": true + }, + { + "name": "unknown_manifest_key", + "expected_exit": "nonzero", + "actual_exit": 1, + "verifier_status": "FAIL", + "expected_failure": "manifest has unknown JSON property", + "observed_failures": [ + "manifest has unknown JSON property: unexpected_r4_key" + ], + "pass": true + }, + { + "name": "unknown_manifest_nested_key", + "expected_exit": "nonzero", + "actual_exit": 1, + "verifier_status": "FAIL", + "expected_failure": "manifest.representation_contract has unknown JSON property", + "observed_failures": [ + "manifest.representation_contract has unknown JSON property: unexpected_r4_key" + ], + "pass": true + }, + { + "name": "unknown_manifest_entry_key", + "expected_exit": "nonzero", + "actual_exit": 1, + "verifier_status": "FAIL", + "expected_failure": "manifest.entries[0] has unknown JSON property", + "observed_failures": [ + "manifest.entries[0] has unknown JSON property: unexpected_r4_key" + ], + "pass": true + }, + { + "name": "unknown_inventory_key", + "expected_exit": "nonzero", + "actual_exit": 1, + "verifier_status": "FAIL", + "expected_failure": "inventory has unknown JSON property", + "observed_failures": [ + "inventory has unknown JSON property: unexpected_r4_key" + ], + "pass": true + }, + { + "name": "unknown_inventory_entry_key", + "expected_exit": "nonzero", + "actual_exit": 1, + "verifier_status": "FAIL", + "expected_failure": "inventory.entries[0] has unknown JSON property", + "observed_failures": [ + "inventory.entries[0] has unknown JSON property: unexpected_r4_key" + ], + "pass": true + }, + { + "name": "manifest_schema_99", + "expected_exit": "nonzero", + "actual_exit": 1, + "verifier_status": "FAIL", + "expected_failure": "manifest schema_version must be 4", + "observed_failures": [ + "manifest schema_version must be 4" + ], + "pass": true + }, + { + "name": "inventory_schema_99", + "expected_exit": "nonzero", + "actual_exit": 1, + "verifier_status": "FAIL", + "expected_failure": "inventory schema_version must be 1", + "observed_failures": [ + "inventory schema_version must be 1" + ], + "pass": true + }, + { + "name": "adversarial_proof_schema_99", + "expected_exit": "nonzero", + "actual_exit": 1, + "verifier_status": "FAIL", + "expected_failure": "adversarial proof schema_version must be 4", + "observed_failures": [ + "adversarial proof schema_version must be 4" + ], + "pass": true + }, + { + "name": "verifier_proof_schema_99", + "expected_exit": "nonzero", + "actual_exit": 1, + "verifier_status": "FAIL", + "expected_failure": "verifier proof schema_version must be 4", + "observed_failures": [ + "verifier proof schema_version must be 4" + ], + "pass": true + }, + { + "name": "unknown_adversarial_proof_key", + "expected_exit": "nonzero", + "actual_exit": 1, + "verifier_status": "FAIL", + "expected_failure": "adversarial proof has unknown JSON property", + "observed_failures": [ + "adversarial proof has unknown JSON property: unexpected_r4_key" + ], + "pass": true + }, + { + "name": "unknown_adversarial_case_key", + "expected_exit": "nonzero", + "actual_exit": 1, + "verifier_status": "FAIL", + "expected_failure": "adversarial proof.cases[0] has unknown JSON property", + "observed_failures": [ + "adversarial proof.cases[0] has unknown JSON property: unexpected_r4_key" + ], + "pass": true + }, + { + "name": "unknown_verifier_proof_key", + "expected_exit": "nonzero", + "actual_exit": 1, + "verifier_status": "FAIL", + "expected_failure": "verifier proof has unknown JSON property", + "observed_failures": [ + "verifier proof has unknown JSON property: unexpected_r4_key" + ], + "pass": true + }, + { + "name": "stale_adversarial_proof", + "expected_exit": "nonzero", + "actual_exit": 1, + "verifier_status": "FAIL", + "expected_failure": "adversarial proof case count mismatch", + "observed_failures": [ + "adversarial proof case count mismatch: declared 34, required 35" + ], + "pass": true + }, + { + "name": "stale_verifier_proof", + "expected_exit": "nonzero", + "actual_exit": 1, + "verifier_status": "FAIL", + "expected_failure": "verifier proof changed_paths mismatch", + "observed_failures": [ + "verifier proof changed_paths mismatch: declared 20, actual 21" + ], + "pass": true + }, + { + "name": "false_adversarial_case_order", + "expected_exit": "nonzero", + "actual_exit": 1, + "verifier_status": "FAIL", + "expected_failure": "adversarial proof case order mismatch", + "observed_failures": [ + "adversarial proof case order mismatch at index 0: declared missing_changed_path, required baseline", + "adversarial proof case order mismatch at index 1: declared baseline, required missing_changed_path" + ], + "pass": true + }, + { + "name": "false_adversarial_status", + "expected_exit": "nonzero", + "actual_exit": 1, + "verifier_status": "FAIL", + "expected_failure": "adversarial proof status must be PASS", + "observed_failures": [ + "adversarial proof status must be PASS" + ], + "pass": true + }, + { + "name": "false_adversarial_actual_status", + "expected_exit": "nonzero", + "actual_exit": 1, + "verifier_status": "FAIL", + "expected_failure": "adversarial proof case result mismatch", + "observed_failures": [ + "adversarial proof case result mismatch: missing_changed_path" + ], + "pass": true + }, + { + "name": "false_adversarial_required_diagnostic", + "expected_exit": "nonzero", + "actual_exit": 1, + "verifier_status": "FAIL", + "expected_failure": "adversarial proof case missing required diagnostic", + "observed_failures": [ + "adversarial proof case missing required diagnostic: missing_changed_path" + ], + "pass": true + }, + { + "name": "false_verifier_counts", + "expected_exit": "nonzero", + "actual_exit": 1, + "verifier_status": "FAIL", + "expected_failure": "verifier proof manifest_entries mismatch", + "observed_failures": [ + "verifier proof manifest_entries mismatch: declared 36, actual 35" + ], + "pass": true + }, + { + "name": "false_verifier_status", + "expected_exit": "nonzero", + "actual_exit": 1, + "verifier_status": "FAIL", + "expected_failure": "verifier proof status must be PASS", + "observed_failures": [ + "verifier proof status must be PASS" + ], + "pass": true + }, + { + "name": "false_verifier_source_revision", + "expected_exit": "nonzero", + "actual_exit": 1, + "verifier_status": "FAIL", + "expected_failure": "verifier proof source/revision contract mismatch", + "observed_failures": [ + "verifier proof source/revision contract mismatch" + ], + "pass": true + }, + { + "name": "duplicate_json_property", + "expected_exit": "nonzero", + "actual_exit": 1, + "verifier_status": "FAIL", + "expected_failure": "duplicate JSON property", + "observed_failures": [ + "duplicate JSON property: manifest.schema_version" ], "pass": true } diff --git a/.agent/reports/evidence/production-ready/db-test-pool-hygiene/verifier-proof.json b/.agent/reports/evidence/production-ready/db-test-pool-hygiene/verifier-proof.json index 5730d460..2659915a 100644 --- a/.agent/reports/evidence/production-ready/db-test-pool-hygiene/verifier-proof.json +++ b/.agent/reports/evidence/production-ready/db-test-pool-hygiene/verifier-proof.json @@ -1,14 +1,14 @@ { - "schema_version": 3, + "schema_version": 4, "status": "PASS", "source_mode": "GitIndex", "revision": "INDEX", "product_candidate_sha": "276337b3e96aa5af6d2e7dd9a0002ff957e5ffc9", "representation_contract": "git-blob-bytes-v1", - "changed_paths": 16, - "directly_bound_changed_paths": 14, - "manifest_entries": 30, - "checksum_entries": 31, + "changed_paths": 21, + "directly_bound_changed_paths": 19, + "manifest_entries": 35, + "checksum_entries": 36, "inventory_call_sites": 83, "inventory_files": 8, "failures": [] From 2c88fed68e0da04b4686940b81f55579a8260919 Mon Sep 17 00:00:00 2001 From: Kirill Turanskiy Date: Sat, 11 Jul 2026 06:30:35 +0300 Subject: [PATCH 052/111] fix: harden demolition portability contracts --- ...6-07-11-demolition-portability-r1-maker.md | 60 ++++ .../demolition-guard.json | 23 ++ .../demolition-portability-r1/gates.json | 67 ++++ .../plan-amendment.json | 37 +++ .../demolition-portability-r1/prove-it.json | 31 ++ .../demolition-portability-r1/red.json | 48 +++ internal/graph/dangling_test.go | 134 ++------ internal/graph/integration_test.go | 125 ++++---- internal/graph/nodes_store.go | 9 + internal/handlers/loom/limited_writer_test.go | 55 ++++ .../production_readiness_coverage_test.go | 127 ++++++++ .../handlers/loom/testdata/clihelper/main.go | 64 ++++ internal/handlers/loom/workers.go | 18 +- internal/handlers/loom/workers_test.go | 294 ++++-------------- internal/mcp/integration_tg3_hybrid_test.go | 55 +--- 15 files changed, 708 insertions(+), 439 deletions(-) create mode 100644 .agent/reports/2026-07-11-demolition-portability-r1-maker.md create mode 100644 .agent/reports/evidence/production-ready/demolition-portability-r1/demolition-guard.json create mode 100644 .agent/reports/evidence/production-ready/demolition-portability-r1/gates.json create mode 100644 .agent/reports/evidence/production-ready/demolition-portability-r1/plan-amendment.json create mode 100644 .agent/reports/evidence/production-ready/demolition-portability-r1/prove-it.json create mode 100644 .agent/reports/evidence/production-ready/demolition-portability-r1/red.json create mode 100644 internal/handlers/loom/limited_writer_test.go create mode 100644 internal/handlers/loom/production_readiness_coverage_test.go create mode 100644 internal/handlers/loom/testdata/clihelper/main.go diff --git a/.agent/reports/2026-07-11-demolition-portability-r1-maker.md b/.agent/reports/2026-07-11-demolition-portability-r1-maker.md new file mode 100644 index 00000000..0533eeb9 --- /dev/null +++ b/.agent/reports/2026-07-11-demolition-portability-r1-maker.md @@ -0,0 +1,60 @@ +# Demolition-portability R1 maker report + +Status: **READY_FOR_INDEPENDENT_CHECKER** after the staged/frozen candidate gates +listed below. This report describes the bounded candidate based on +`0c6269908aa810a2248f2bfaf3fca4f9f5791359`; it does not authorize synthesis, +merge, push, tag, release, or external mutation. + +The staged candidate owns exactly 15 paths. Its ordinal-LF path digest is +`996b153680df782d4247b6ef72120fba36bfc7cf3fb1015385817e1035ce700f` and its +ordinal-LF status/path digest is +`4761d8020de2f6ba49841291eca5996f7ae928559a69228c383f3ede5df71b18`. +Gitleaks 8.30.0 scanned the staged candidate with no findings. + +## Outcome + +- Graph tests now boot through the real migrated store, clean rows before the + pool closes, use the live edge enum, and prove the live foreign key rather + than trying to create an unreachable dangling row. +- `NodesStore.Create` and `NodesStore.Update` normalize omitted optional + metadata to `{}`, closing the current NOT NULL contract without adding graph + retrieval behavior. +- T022 parses the live items array, requires a real high-confidence match, and + rejects low-confidence or empty-result false greens. Retrieval code is + unchanged. +- Loom uses one compiled cross-platform test helper. Windows and Linux execute + the worker behaviors with zero skip, and package coverage is 86.9%. +- The portable helper exposed a live `limitedWriter` short-write defect. The + master plan was amended before the product edit; the fix now reports the + original input length only after the retained prefix is fully written and + still propagates real writer failures. + +## Evidence + +- `plan-amendment.json` — exact ownership and no-resurrection boundary. +- `red.json` — graph, T022, Loom portability, update metadata, and output-cap + RED observations. +- `prove-it.json` — controlled mutation/restoration proof for all three slices. +- `gates.json` — Windows/Linux, PostgreSQL, race, coverage, build, vet, broad + suite classification, and cleanup results. +- `demolition-guard.json` — live/stale/dormant classification and explicit + removed-v5 exclusions. + +## Broad-suite truth + +The isolated base intentionally does not include the separately accepted T007 +head or the in-flight DB-pool/governance stacks. The whole-repository JSON run +therefore remains red: 34 failed test events across `internal/db/gorm`, +`internal/bulkops`, and `internal/mcp`, plus 20 skips routed to their exact +owners. None is in the owned graph/T022/Loom slices; all focused owned gates, +build, and vet pass. This maker must be checked as a disjoint candidate and then +retested in synthesis with the accepted neighboring heads. + +## Required checker work + +The independent checker must verify exact path closure, replay RED/GREEN and +Prove-It, attack nil/empty metadata, FK enforcement, cleanup ordering, stale +edge enums, T022 empty/high/low behavior, Windows/Linux helper execution, output +cap alignment and underlying Writer errors, race/coverage, broad-suite +classification, zero database/temp-helper residue, and the full demolition +guard. Any HIGH/CRITICAL finding returns `REVISE_HOLD`. diff --git a/.agent/reports/evidence/production-ready/demolition-portability-r1/demolition-guard.json b/.agent/reports/evidence/production-ready/demolition-portability-r1/demolition-guard.json new file mode 100644 index 00000000..648dcccf --- /dev/null +++ b/.agent/reports/evidence/production-ready/demolition-portability-r1/demolition-guard.json @@ -0,0 +1,23 @@ +{ + "schema_version": 1, + "classification": { + "knowledge_node_metadata": "dormant-flag-gated current-contract product defect", + "dangling_edge_test": "pre-current-schema stale expectation", + "graph_boot_and_cleanup": "test setup/lifecycle defect", + "T022_parser": "current-contract test correction", + "Loom_shell_skips": "cross-platform test portability defect", + "Loom_limited_writer": "live production Writer-contract defect discovered by the portable helper" + }, + "production_delta": [ + "default omitted KnowledgeNode metadata to an empty JSON object on Create and Update", + "make limitedWriter consume intentionally discarded overflow without returning io.ErrShortWrite while preserving real writer failures" + ], + "explicitly_not_built": [ + "automated graph retrieval", + "cross-encoder rerank", + "composite scoring passes", + "SDK observation extraction", + "server-side HTTP MCP transports" + ], + "verdict": "NO_V5_DEMOLISHED_BEHAVIOR_RESURRECTED" +} diff --git a/.agent/reports/evidence/production-ready/demolition-portability-r1/gates.json b/.agent/reports/evidence/production-ready/demolition-portability-r1/gates.json new file mode 100644 index 00000000..b185b318 --- /dev/null +++ b/.agent/reports/evidence/production-ready/demolition-portability-r1/gates.json @@ -0,0 +1,67 @@ +{ + "schema_version": 1, + "captured_at": "2026-07-11T06:25:02.1011804+03:00", + "environment": { + "windows_go": "go1.25.4 windows/amd64", + "linux_go": "go1.25.12 linux/amd64 via Ubuntu WSL", + "database": "disposable PostgreSQL 17.10 database engram_demo_root_0522" + }, + "gates": [ + {"name":"graph focused repeat3","result":"PASS","detail":"6 tests/subtests per run, zero skip"}, + {"name":"T022 focused repeat3","result":"PASS","detail":"T022, T022b and T022c, zero skip"}, + {"name":"Loom Windows repeat3","result":"PASS","detail":"86.9 percent statement coverage"}, + {"name":"Loom Windows race","result":"PASS"}, + {"name":"Loom Windows JSON","result":"PASS","detail":"47 test/subtest pass events, 0 fail, 0 skip"}, + {"name":"Loom Ubuntu WSL","result":"PASS","detail":"86.9 percent statement coverage; no t.Skip call remains in the package"}, + {"name":"go build ./...","result":"PASS"}, + {"name":"go vet ./...","result":"PASS"}, + {"name":"git diff --check","result":"PASS"}, + {"name":"demolished-symbol delta scan","result":"PASS","detail":"no added graph retrieval, rerank, composite scoring, SDK extraction, or HTTP MCP transport symbols"}, + {"name":"owned fixture residue before drop","result":"PASS","detail":"memories=0 nodes=0 edges=0 active_sessions=0"}, + {"name":"disposable database cleanup","result":"PASS","detail":"database count after drop=0"} + ], + "broad_suite": { + "command": "go test -json ./... -count=1", + "actual_exit": 1, + "failed_test_events": 34, + "failed_packages": [ + "internal/db/gorm", + "internal/bulkops", + "internal/mcp" + ], + "owned_slice_failures": 0, + "known_external_failures": { + "T007": "accepted separately at 1418796e55e8b5bfbb216ffbf5a3fba9fa620922 but intentionally absent from this disjoint base", + "DB_pool_and_candidate_governance": "active DB-TEST-POOL-HYGIENE R4 checker and later synthesis own these failures", + "bulkops": "accepted/reviewed stack is not part of this isolated base" + }, + "skipped_test_events": 20, + "skip_owners": [ + "historical upgrade fixture", + "grpc session-start exact fresh-DB lane", + "retrieval embedding prerequisite lane", + "redaction live-contract lane", + "current migration-order lane", + "static-embed image lane" + ] + }, + "post_stage_gates": [ + { + "name": "staged path closure", + "result": "PASS", + "path_count": 15, + "ordinal_lf_path_digest": "996b153680df782d4247b6ef72120fba36bfc7cf3fb1015385817e1035ce700f", + "ordinal_lf_status_path_digest": "4761d8020de2f6ba49841291eca5996f7ae928559a69228c383f3ede5df71b18" + }, + { + "name": "gitleaks staged candidate", + "result": "PASS", + "tool": "gitleaks 8.30.0", + "detail": "staged candidate scanned; no leaks found" + }, + { + "name": "staged diff check", + "result": "PASS" + } + ] +} diff --git a/.agent/reports/evidence/production-ready/demolition-portability-r1/plan-amendment.json b/.agent/reports/evidence/production-ready/demolition-portability-r1/plan-amendment.json new file mode 100644 index 00000000..58c37def --- /dev/null +++ b/.agent/reports/evidence/production-ready/demolition-portability-r1/plan-amendment.json @@ -0,0 +1,37 @@ +{ + "schema_version": 1, + "decided_at": "2026-07-11T06:16:55.2789291+03:00", + "authority_file": ".agent/plans/2026-07-10-engram-production-ready-master-plan.md", + "authority_sha256": "60e3b3cbf2491af8adc91f8f18a394404d68c811618fbf7ba98cc664a898591f", + "preflight_file": ".agent/reports/evidence/production-ready/demolition-portability/preflight-baseline.json", + "preflight_sha256": "a98389e8be76fd139418eceea908441b0d44557bdcc7e8dd0179dfa9c9a939b3", + "decision": "TRANSFER_COVERAGE_LOOM_AND_CURRENT_CONTRACT_CORRECTIONS_TO_DEMOLITION_PORTABILITY", + "reason": "The cross-platform helper exposed a production Writer-contract defect: a child write crossing maxOutputBytes returned a truncated count and caused exec.Cmd to fail with short write. Product ownership was expanded before editing workers.go.", + "owned_paths": [ + "internal/graph/dangling_test.go", + "internal/graph/integration_test.go", + "internal/graph/nodes_store.go", + "internal/mcp/integration_tg3_hybrid_test.go", + "internal/handlers/loom/workers.go", + "internal/handlers/loom/workers_test.go", + "internal/handlers/loom/limited_writer_test.go", + "internal/handlers/loom/testdata/clihelper/main.go", + "internal/handlers/loom/production_readiness_coverage_test.go", + ".agent/reports/2026-07-11-demolition-portability-r1-maker.md", + ".agent/reports/evidence/production-ready/demolition-portability-r1/**" + ], + "parallel_non_overlap": [ + "RELEASE-GATES R10 replacement", + "DB-TEST-POOL-HYGIENE R4 checker", + "IMAGE-REMEDIATION", + "T007 accepted candidate", + "PUBLIC-CONTRACTS prepared batch" + ], + "forbidden": [ + "graph retrieval stage", + "cross-encoder rerank", + "ApplyCompositeScoring or sibling composite scoring passes", + "SDK observation extraction", + "server-side HTTP MCP transports" + ] +} diff --git a/.agent/reports/evidence/production-ready/demolition-portability-r1/prove-it.json b/.agent/reports/evidence/production-ready/demolition-portability-r1/prove-it.json new file mode 100644 index 00000000..cf822a44 --- /dev/null +++ b/.agent/reports/evidence/production-ready/demolition-portability-r1/prove-it.json @@ -0,0 +1,31 @@ +{ + "schema_version": 1, + "mutations": [ + { + "slice": "GRAPH-METADATA", + "mutation": "normalizeNodeMetadata returned input unchanged", + "expected_failure": "Create and Update omitted-metadata tests both fail SQLSTATE 23502", + "observed": "PASS", + "restoration": "exact normalizer restored; both tests pass" + }, + { + "slice": "T022-CONFIDENCE-FLOOR", + "mutation": "both live confidence_min filters were temporarily disabled", + "expected_failure": "low-confidence fixture appears and the corrected T022 test fails", + "observed": "PASS: low beta was returned and rejected", + "restoration": "both filters restored byte-for-byte; T022/T022b/T022c pass" + }, + { + "slice": "LOOM-OUTPUT-CAP", + "mutation": "maxOutputBytes was temporarily changed to a non-buffer-aligned 1024-byte cap", + "expected_failure": "existing limitedWriter returns a short count", + "observed": "PASS: exec.Cmd returned short write", + "follow_up": "a permanent non-aligned end-to-end RED was added before the class fix", + "restoration": "10 MiB constant restored byte-for-byte; Writer implementation fixed instead" + } + ], + "temporary_product_files_restored": [ + "internal/mcp/tools_memory.go", + "internal/handlers/loom/workers.go before the authorized class fix" + ] +} diff --git a/.agent/reports/evidence/production-ready/demolition-portability-r1/red.json b/.agent/reports/evidence/production-ready/demolition-portability-r1/red.json new file mode 100644 index 00000000..dec139e5 --- /dev/null +++ b/.agent/reports/evidence/production-ready/demolition-portability-r1/red.json @@ -0,0 +1,48 @@ +{ + "schema_version": 1, + "base": "0c6269908aa810a2248f2bfaf3fca4f9f5791359", + "cycles": [ + { + "slice": "GRAPH-CURRENT-SCHEMA", + "result": "RED", + "observed": [ + "three ordinary NodesStore.Create calls with omitted metadata failed SQLSTATE 23502 against the live NOT NULL metadata column", + "the stale dangling-edge fixture was rejected by knowledge_edges_target_id_fkey with SQLSTATE 23503", + "the stale edge type references was rejected by the current enum", + "deferred sql.DB close ran before row cleanup and produced database-is-closed cleanup errors" + ] + }, + { + "slice": "GRAPH-UPDATE-METADATA", + "result": "RED", + "command": "go test ./internal/graph -run TestPathC_T015_UpdateOmittedMetadataDefaultsEmptyObject -count=1 -v", + "exit_code": 1, + "failure": "NodesStore.Update wrote SQL NULL metadata and failed SQLSTATE 23502" + }, + { + "slice": "T022-CURRENT-ITEMS-SHAPE", + "result": "RED", + "command": "go test ./internal/mcp -run TestHybridTG3_ConfidenceMin_FloorEnforced_T022 -count=1 -v", + "exit_code": 1, + "failure": "json cannot unmarshal the live top-level array into map[string]interface{} before the confidence assertion" + }, + { + "slice": "LOOM-PORTABILITY", + "result": "RED_BY_SKIP", + "baseline": { + "passed": 32, + "failed": 0, + "skipped": 7 + }, + "failure": "Windows tests depended on cat, sh, echo, or POSIX-only commands" + }, + { + "slice": "LOOM-OUTPUT-CAP-WRITER-CONTRACT", + "result": "RED", + "command": "go test ./internal/handlers/loom -run TestCliWorker_ProductionReadinessOutputLimitUnalignedWrite -count=1 -v", + "exit_code": 1, + "failure": "loom: cli worker: run engram-loom-cli-helper.exe: short write", + "root_cause": "limitedWriter sliced p at the remaining cap and then returned len(p), which was the retained prefix rather than the original input length" + } + ] +} diff --git a/internal/graph/dangling_test.go b/internal/graph/dangling_test.go index 37c21315..7982e546 100644 --- a/internal/graph/dangling_test.go +++ b/internal/graph/dangling_test.go @@ -1,126 +1,56 @@ package graph import ( - "context" "errors" - "os" "testing" - "gorm.io/driver/postgres" - "gorm.io/gorm" - "gorm.io/gorm/logger" + "github.com/jackc/pgx/v5/pgconn" + "github.com/stretchr/testify/require" ) -// TestDangling_T016_DanglingEdgeReturnsFlag verifies EC-F7: -// When an edge references a memory row that no longer exists, -// Resolve must return ErrDangling (NOT a generic error), and the -// return signature is (source, nil, ErrDangling). +// TestDangling_T016_ForeignKeyRejectsDanglingEdge verifies the live schema +// contract: a knowledge edge cannot be persisted after its target memory has +// been deleted. The ErrDangling sentinel remains covered separately for callers +// that resolve legacy/corrupt rows, but ordinary writes are protected by the FK. // -// The test creates an edge pointing to a non-existent memory ID, then -// calls Resolve. The edge is valid in schema terms (not soft-deleted), -// but the target row is missing — this is the "dangling" condition. -// -// DSN-gated: skips when DATABASE_DSN is not set. -// -// Anti-stub: replacing `return source, nil, ErrDangling` in resolveEndpoint -// with `return source, nil, nil` causes this test to fail because -// errors.Is(err, ErrDangling) returns false. -// -// Engram vNext Milestone F TG2 / T016. -func TestDangling_T016_DanglingEdgeReturnsFlag(t *testing.T) { - dsn := os.Getenv("DATABASE_DSN") - if dsn == "" { - t.Skip("DATABASE_DSN not set, skipping T016 dangling acceptance test") - } - - db, err := gorm.Open(postgres.Open(dsn), &gorm.Config{ - Logger: logger.Default.LogMode(logger.Warn), +// Anti-stub: dropping or weakening knowledge_edges_target_id_fkey allows the +// insert to succeed and fails both the SQLSTATE and zero-row assertions. +func TestDangling_T016_ForeignKeyRejectsDanglingEdge(t *testing.T) { + db := openGraphTestDB(t) + cleanupGraphFixture(t, db, "t016-test", "t016-test") + t.Cleanup(func() { + cleanupGraphFixture(t, db, "t016-test", "t016-test") }) - if err != nil { - t.Fatalf("open db: %v", err) - } - sqlDB, _ := db.DB() - defer sqlDB.Close() - ctx := context.Background() - ns := NewNodesStore(db) - gs := NewStore(db, ns) - - // Insert a real memory that we will delete immediately to get its ID, - // simulating a target row that has been hard-deleted (not soft-deleted). var deletedMemID int64 - err = db.Raw( + require.NoError(t, db.Raw( `INSERT INTO memories (project, content) VALUES ('t016-test', 'dangling-target') RETURNING id`, - ).Row().Scan(&deletedMemID) - if err != nil { - t.Fatalf("insert dangling memory: %v", err) - } + ).Row().Scan(&deletedMemID)) - // Insert a real source memory for the edge source side. var srcMemID int64 - err = db.Raw( + require.NoError(t, db.Raw( `INSERT INTO memories (project, content) VALUES ('t016-test', 'dangling-source') RETURNING id`, - ).Row().Scan(&srcMemID) - if err != nil { - t.Fatalf("insert source memory: %v", err) - } + ).Row().Scan(&srcMemID)) - // Hard-delete the target memory so it becomes truly missing. - if err := db.Exec(`DELETE FROM memories WHERE id = ?`, deletedMemID).Error; err != nil { - t.Fatalf("hard delete target: %v", err) - } - - // Cleanup (source memory + edges). - t.Cleanup(func() { - _ = db.Exec(`DELETE FROM memories WHERE project = 't016-test'`).Error - _ = db.Exec(`DELETE FROM knowledge_edges WHERE source_session_id = 't016-test'`).Error - }) + require.NoError(t, db.Exec(`DELETE FROM memories WHERE id = ?`, deletedMemID).Error) - // Insert a knowledge_edge directly bypassing the Create validation to point - // at the now-deleted memory ID. We bypass Create because it would pass validation - // (IDs exist at insert time) or we use the deleted ID directly in the edge row. - // To guarantee the missing target, we insert the edge row directly with the - // deleted ID (the DB-level FK is nullable and not enforced for memory IDs — only - // for node_source_id/node_target_id FKs via migration 127). - var edgeID int64 - err = db.Raw(` + result := db.Exec(` INSERT INTO knowledge_edges (source_id, target_id, edge_type, weight, source_session_id, source_type, target_type) VALUES (?, ?, 'uses', 1.0, 't016-test', 'memory', 'memory') - RETURNING id - `, srcMemID, deletedMemID).Row().Scan(&edgeID) - if err != nil { - t.Fatalf("insert dangling edge: %v", err) - } - - // Load the edge row to pass to Resolve. - fetchedEdge, err := gs.Get(ctx, edgeID) - if err != nil { - t.Fatalf("get dangling edge: %v", err) - } - - // EC-F7: Resolve must return ErrDangling, NOT a generic error. - src, tgt, resolveErr := gs.Resolve(ctx, fetchedEdge) - - // Target should be nil (missing row). - if tgt != nil { - t.Errorf("expected nil target for dangling edge, got %v", tgt) - } - - // Source should be resolvable (it still exists). - if src == nil { - t.Logf("source is nil — acceptable if source side also dangling, but EC-F7 scenario has valid source") - } - - // The key EC-F7 assertion: error must be ErrDangling. - if resolveErr == nil { - t.Fatal("expected ErrDangling from Resolve on dangling edge, got nil error") - } - if !errors.Is(resolveErr, ErrDangling) { - t.Fatalf("expected errors.Is(err, ErrDangling) = true, got: %v", resolveErr) - } - - t.Logf("EC-F7 PASS: Resolve returned ErrDangling for edge %d (target memory %d deleted)", edgeID, deletedMemID) + `, srcMemID, deletedMemID) + require.Error(t, result.Error) + + var pgErr *pgconn.PgError + require.ErrorAs(t, result.Error, &pgErr) + require.Equal(t, "23503", pgErr.Code) + require.Equal(t, "knowledge_edges_target_id_fkey", pgErr.ConstraintName) + + var edgeCount int64 + require.NoError(t, db.Raw( + `SELECT count(*) FROM knowledge_edges WHERE source_session_id = 't016-test'`, + ).Row().Scan(&edgeCount)) + require.Zero(t, edgeCount, "rejected dangling insert must leave no edge row") } // TestDangling_T016_UnitShape verifies the ErrDangling sentinel shape without DB. diff --git a/internal/graph/integration_test.go b/internal/graph/integration_test.go index 6afc596a..6cecfd8c 100644 --- a/internal/graph/integration_test.go +++ b/internal/graph/integration_test.go @@ -8,12 +8,39 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" + gormdb "github.com/thebtf/engram/internal/db/gorm" "github.com/thebtf/engram/pkg/models" - "gorm.io/driver/postgres" "gorm.io/gorm" "gorm.io/gorm/logger" ) +func openGraphTestDB(t *testing.T) *gorm.DB { + t.Helper() + + dsn := os.Getenv("DATABASE_DSN") + if dsn == "" { + t.Skip("DATABASE_DSN not set, skipping graph integration test") + } + + store, err := gormdb.NewStore(gormdb.Config{ + DSN: dsn, + MaxConns: 2, + LogLevel: logger.Warn, + }) + require.NoError(t, err) + t.Cleanup(func() { + require.NoError(t, store.Close()) + }) + return store.GetDB() +} + +func cleanupGraphFixture(t *testing.T, db *gorm.DB, project, session string) { + t.Helper() + require.NoError(t, db.Exec(`DELETE FROM knowledge_edges WHERE source_session_id = ?`, session).Error) + require.NoError(t, db.Exec(`DELETE FROM knowledge_nodes WHERE project = ?`, project).Error) + require.NoError(t, db.Exec(`DELETE FROM memories WHERE project = ?`, project).Error) +} + // TestPathC_T015_SkillNodeEdgeRoundtrip verifies the full TG2 Path C roundtrip: // 1. Create a skill knowledge_node via NodesStore. // 2. Create a 'uses' edge from the node to an existing memory. @@ -27,19 +54,11 @@ import ( // // Engram vNext Milestone F TG2 / T015. func TestPathC_T015_SkillNodeEdgeRoundtrip(t *testing.T) { - dsn := os.Getenv("DATABASE_DSN") - if dsn == "" { - t.Skip("DATABASE_DSN not set, skipping T015 integration test") - } - - db, err := gorm.Open(postgres.Open(dsn), &gorm.Config{ - Logger: logger.Default.LogMode(logger.Warn), + db := openGraphTestDB(t) + cleanupGraphFixture(t, db, "t015-test", "t015-test") + t.Cleanup(func() { + cleanupGraphFixture(t, db, "t015-test", "t015-test") }) - require.NoError(t, err) - - sqlDB, err := db.DB() - require.NoError(t, err) - defer sqlDB.Close() ctx := context.Background() ns := NewNodesStore(db) @@ -50,11 +69,6 @@ func TestPathC_T015_SkillNodeEdgeRoundtrip(t *testing.T) { require.NoError(t, db.Raw( `INSERT INTO memories (project, content) VALUES ('t015-test', 'roundtrip target') RETURNING id`, ).Row().Scan(&memID)) - t.Cleanup(func() { - _ = db.Exec(`DELETE FROM memories WHERE project = 't015-test'`).Error - _ = db.Exec(`DELETE FROM knowledge_nodes WHERE project = 't015-test'`).Error - _ = db.Exec(`DELETE FROM knowledge_edges WHERE source_session_id = 't015-test'`).Error - }) // Step 1: Create a skill node. node, err := ns.Create(ctx, &models.KnowledgeNode{ @@ -66,6 +80,7 @@ func TestPathC_T015_SkillNodeEdgeRoundtrip(t *testing.T) { require.NotZero(t, node.ID) assert.Equal(t, models.NodeTypeSkill, node.NodeType) assert.Equal(t, "project", node.PrivacyScope) // default + require.JSONEq(t, `{}`, string(node.Metadata), "omitted metadata must persist as an empty JSON object") // Step 2: Create edge skill→memory (source_type='node', target_type='memory'). // TargetID is *int64 (nullable); set via pointer for memory-typed endpoint. @@ -108,19 +123,11 @@ func TestPathC_T015_SkillNodeEdgeRoundtrip(t *testing.T) { // TestPathC_T015_NodeTypedEdgeListFilter verifies that get_edges by node_id // returns the correct subset when multiple edges exist. func TestPathC_T015_NodeTypedEdgeListFilter(t *testing.T) { - dsn := os.Getenv("DATABASE_DSN") - if dsn == "" { - t.Skip("DATABASE_DSN not set, skipping T015 integration test") - } - - db, err := gorm.Open(postgres.Open(dsn), &gorm.Config{ - Logger: logger.Default.LogMode(logger.Warn), + db := openGraphTestDB(t) + cleanupGraphFixture(t, db, "t015b-test", "t015b-test") + t.Cleanup(func() { + cleanupGraphFixture(t, db, "t015b-test", "t015b-test") }) - require.NoError(t, err) - - sqlDB, err := db.DB() - require.NoError(t, err) - defer sqlDB.Close() ctx := context.Background() ns := NewNodesStore(db) @@ -134,11 +141,6 @@ func TestPathC_T015_NodeTypedEdgeListFilter(t *testing.T) { require.NoError(t, db.Raw( `INSERT INTO memories (project, content) VALUES ('t015b-test', 'mem2') RETURNING id`, ).Row().Scan(&mem2)) - t.Cleanup(func() { - _ = db.Exec(`DELETE FROM memories WHERE project = 't015b-test'`).Error - _ = db.Exec(`DELETE FROM knowledge_nodes WHERE project = 't015b-test'`).Error - _ = db.Exec(`DELETE FROM knowledge_edges WHERE source_session_id = 't015b-test'`).Error - }) node, err := ns.Create(ctx, &models.KnowledgeNode{ NodeType: models.NodeTypeAgent, @@ -155,7 +157,7 @@ func TestPathC_T015_NodeTypedEdgeListFilter(t *testing.T) { TargetType: "memory", TargetID: &id, NodeSourceID: &node.ID, - EdgeType: "references", + EdgeType: EdgeDependsOn, Weight: 1.0, SourceSessionID: "t015b-test", }) @@ -190,27 +192,15 @@ func TestPathC_T015_NodeTypedEdgeListFilter(t *testing.T) { // TestPathC_T015_NodeCreatedAtTimestamp verifies that knowledge_nodes // get sensible timestamps after creation. func TestPathC_T015_NodeCreatedAtTimestamp(t *testing.T) { - dsn := os.Getenv("DATABASE_DSN") - if dsn == "" { - t.Skip("DATABASE_DSN not set, skipping T015 integration test") - } - - db, err := gorm.Open(postgres.Open(dsn), &gorm.Config{ - Logger: logger.Default.LogMode(logger.Warn), + db := openGraphTestDB(t) + cleanupGraphFixture(t, db, "t015c-test", "t015c-test") + t.Cleanup(func() { + cleanupGraphFixture(t, db, "t015c-test", "t015c-test") }) - require.NoError(t, err) - - sqlDB, err := db.DB() - require.NoError(t, err) - defer sqlDB.Close() ctx := context.Background() ns := NewNodesStore(db) - t.Cleanup(func() { - _ = db.Exec(`DELETE FROM knowledge_nodes WHERE project = 't015c-test'`).Error - }) - before := time.Now().UTC().Add(-time.Second) node, err := ns.Create(ctx, &models.KnowledgeNode{ NodeType: models.NodeTypeRule, @@ -223,3 +213,34 @@ func TestPathC_T015_NodeCreatedAtTimestamp(t *testing.T) { assert.True(t, node.CreatedAt.After(before), "CreatedAt must be after %v, got %v", before, node.CreatedAt) assert.True(t, node.CreatedAt.Before(after), "CreatedAt must be before %v, got %v", after, node.CreatedAt) } + +// TestPathC_T015_UpdateOmittedMetadataDefaultsEmptyObject closes the same +// NOT NULL contract for the update path as for create. Callers may omit the +// optional metadata field, but the persisted JSONB value must remain valid. +func TestPathC_T015_UpdateOmittedMetadataDefaultsEmptyObject(t *testing.T) { + db := openGraphTestDB(t) + cleanupGraphFixture(t, db, "t015d-test", "t015d-test") + t.Cleanup(func() { + cleanupGraphFixture(t, db, "t015d-test", "t015d-test") + }) + + ctx := context.Background() + ns := NewNodesStore(db) + node, err := ns.Create(ctx, &models.KnowledgeNode{ + NodeType: models.NodeTypeRule, + ExternalRef: "metadata-default-create", + Project: "t015d-test", + Metadata: []byte(`{"phase":"create"}`), + }) + require.NoError(t, err) + + node.ExternalRef = "metadata-default-update" + node.Metadata = nil + updated, err := ns.Update(ctx, node) + require.NoError(t, err) + require.JSONEq(t, `{}`, string(updated.Metadata)) + + reloaded, err := ns.Get(ctx, node.ID, true) + require.NoError(t, err) + require.JSONEq(t, `{}`, string(reloaded.Metadata), "omitted update metadata must persist as an empty JSON object") +} diff --git a/internal/graph/nodes_store.go b/internal/graph/nodes_store.go index c626eedd..f18a0daa 100644 --- a/internal/graph/nodes_store.go +++ b/internal/graph/nodes_store.go @@ -58,6 +58,13 @@ func nodeToRow(n *models.KnowledgeNode) nodeRow { } } +func normalizeNodeMetadata(metadata []byte) []byte { + if len(metadata) == 0 { + return []byte("{}") + } + return metadata +} + // NodesStore handles knowledge_nodes CRUD with scope-based visibility filtering. // // Visibility contract (T012 AC): @@ -108,6 +115,7 @@ func (s *NodesStore) Create(ctx context.Context, node *models.KnowledgeNode) (*m default: return nil, fmt.Errorf("invalid privacy_scope %q", node.PrivacyScope) } + node.Metadata = normalizeNodeMetadata(node.Metadata) row := nodeToRow(node) if err := s.db.WithContext(ctx).Create(&row).Error; err != nil { @@ -196,6 +204,7 @@ func (s *NodesStore) Update(ctx context.Context, node *models.KnowledgeNode) (*m default: return nil, fmt.Errorf("invalid privacy_scope %q", ps) } + node.Metadata = normalizeNodeMetadata(node.Metadata) updates := map[string]interface{}{ "external_ref": node.ExternalRef, "metadata": node.Metadata, diff --git a/internal/handlers/loom/limited_writer_test.go b/internal/handlers/loom/limited_writer_test.go new file mode 100644 index 00000000..ffab0006 --- /dev/null +++ b/internal/handlers/loom/limited_writer_test.go @@ -0,0 +1,55 @@ +package loom + +import ( + "bytes" + "errors" + "io" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +type controlledWriter struct { + n int + err error +} + +func (w controlledWriter) Write([]byte) (int, error) { + return w.n, w.err +} + +func TestLimitedWriterCrossesLimitWithoutShortWrite(t *testing.T) { + var dst bytes.Buffer + w := &limitedWriter{w: &dst, n: 5} + + n, err := w.Write([]byte("1234567")) + require.NoError(t, err) + assert.Equal(t, 7, n, "discarded overflow still counts as consumed input") + assert.Equal(t, "12345", dst.String()) + assert.Zero(t, w.n) + + n, err = w.Write([]byte("discarded")) + require.NoError(t, err) + assert.Equal(t, len("discarded"), n) + assert.Equal(t, "12345", dst.String()) +} + +func TestLimitedWriterPropagatesUnderlyingError(t *testing.T) { + sentinel := errors.New("sentinel writer failure") + w := &limitedWriter{w: controlledWriter{n: 2, err: sentinel}, n: 10} + + n, err := w.Write([]byte("1234")) + assert.Equal(t, 2, n) + require.ErrorIs(t, err, sentinel) + assert.Equal(t, int64(8), w.n) +} + +func TestLimitedWriterConvertsZeroErrorShortWrite(t *testing.T) { + w := &limitedWriter{w: controlledWriter{n: 2}, n: 10} + + n, err := w.Write([]byte("1234")) + assert.Equal(t, 2, n) + require.ErrorIs(t, err, io.ErrShortWrite) + assert.Equal(t, int64(8), w.n) +} diff --git a/internal/handlers/loom/production_readiness_coverage_test.go b/internal/handlers/loom/production_readiness_coverage_test.go new file mode 100644 index 00000000..1bf481fe --- /dev/null +++ b/internal/handlers/loom/production_readiness_coverage_test.go @@ -0,0 +1,127 @@ +package loom_test + +import ( + "context" + "encoding/json" + "fmt" + "os" + "os/exec" + "path/filepath" + "runtime" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + loomhandler "github.com/thebtf/engram/internal/handlers/loom" +) + +var loomCLIHelperName string + +func TestMain(m *testing.M) { + helperDir, err := os.MkdirTemp("", "engram-loom-cli-helper-") + if err != nil { + fmt.Fprintf(os.Stderr, "create loom helper dir: %v\n", err) + os.Exit(1) + } + + loomCLIHelperName = "engram-loom-cli-helper" + if runtime.GOOS == "windows" { + loomCLIHelperName += ".exe" + } + helperPath := filepath.Join(helperDir, loomCLIHelperName) + build := exec.Command("go", "build", "-o", helperPath, "./testdata/clihelper") + build.Stdout = os.Stdout + build.Stderr = os.Stderr + if err := build.Run(); err != nil { + _ = os.RemoveAll(helperDir) + fmt.Fprintf(os.Stderr, "build loom CLI helper: %v\n", err) + os.Exit(1) + } + + originalPath := os.Getenv("PATH") + if err := os.Setenv("PATH", helperDir+string(os.PathListSeparator)+originalPath); err != nil { + _ = os.RemoveAll(helperDir) + fmt.Fprintf(os.Stderr, "prepend loom helper PATH: %v\n", err) + os.Exit(1) + } + + code := m.Run() + if err := os.Setenv("PATH", originalPath); err != nil { + fmt.Fprintf(os.Stderr, "restore PATH after loom tests: %v\n", err) + code = 1 + } + if err := os.RemoveAll(helperDir); err != nil { + fmt.Fprintf(os.Stderr, "remove loom helper dir: %v\n", err) + code = 1 + } + os.Exit(code) +} + +func TestCliWorker_ProductionReadinessStructuredArgsAndCWD(t *testing.T) { + t.Parallel() + + cwd := t.TempDir() + task := helperTask("structured prompt", "state") + task.Role = "maker" + task.Model = "test-model" + task.Effort = "high" + task.CWD = cwd + task.Env["MY_TEST_VAR"] = "structured-env" + + w := loomhandler.NewCLIWorkerWithAllowlist([]string{loomCLIHelperName}) + result, err := w.Execute(context.Background(), task) + require.NoError(t, err) + + var state struct { + Args []string `json:"args"` + CWD string `json:"cwd"` + Env string `json:"env"` + Prompt string `json:"prompt"` + } + require.NoError(t, json.Unmarshal([]byte(result.Content), &state)) + assert.Equal(t, []string{"--role", "maker", "--model", "test-model", "--effort", "high"}, state.Args) + assert.Equal(t, cwd, state.CWD) + assert.Equal(t, "structured-env", state.Env) + assert.Equal(t, "structured prompt", state.Prompt) + assert.GreaterOrEqual(t, result.DurationMS, int64(0)) +} + +func TestCliWorker_ProductionReadinessOutputLimit(t *testing.T) { + t.Parallel() + + w := loomhandler.NewCLIWorkerWithAllowlist([]string{loomCLIHelperName}) + result, err := w.Execute(context.Background(), helperTask("", "huge")) + require.NoError(t, err) + require.Len(t, result.Content, 10*1024*1024, "stdout must be capped at maxOutputBytes") +} + +func TestCliWorker_ProductionReadinessOutputLimitUnalignedWrite(t *testing.T) { + t.Parallel() + + w := loomhandler.NewCLIWorkerWithAllowlist([]string{loomCLIHelperName}) + result, err := w.Execute(context.Background(), helperTask("", "huge-unaligned")) + require.NoError(t, err, "crossing the cap inside a child write must discard overflow without io.ErrShortWrite") + require.Len(t, result.Content, 10*1024*1024, "unaligned stdout must still be capped at maxOutputBytes") +} + +func TestCliWorker_ProductionReadinessExitWithoutStderr(t *testing.T) { + t.Parallel() + + w := loomhandler.NewCLIWorkerWithAllowlist([]string{loomCLIHelperName}) + _, err := w.Execute(context.Background(), helperTask("", "exit")) + require.Error(t, err) + assert.Contains(t, err.Error(), "exited with code 9") +} + +func TestCliWorker_ProductionReadinessMissingExecutable(t *testing.T) { + t.Parallel() + + const missing = "engram-loom-definitely-missing-command" + w := loomhandler.NewCLIWorkerWithAllowlist([]string{missing}) + task := helperTask("", "echo") + task.CLI = missing + + _, err := w.Execute(context.Background(), task) + require.Error(t, err) + assert.Contains(t, err.Error(), "run "+missing) +} diff --git a/internal/handlers/loom/testdata/clihelper/main.go b/internal/handlers/loom/testdata/clihelper/main.go new file mode 100644 index 00000000..391ec81f --- /dev/null +++ b/internal/handlers/loom/testdata/clihelper/main.go @@ -0,0 +1,64 @@ +package main + +import ( + "encoding/json" + "fmt" + "io" + "os" + "strings" + "time" +) + +func main() { + prompt, err := io.ReadAll(os.Stdin) + if err != nil { + fmt.Fprintln(os.Stderr, err) + os.Exit(2) + } + + switch os.Getenv("LOOM_HELPER_MODE") { + case "", "echo": + _, _ = os.Stdout.Write(prompt) + case "env": + fmt.Print(os.Getenv("MY_TEST_VAR")) + case "sleep": + time.Sleep(30 * time.Second) + case "stderr": + fmt.Fprint(os.Stderr, "sentinel_error_msg") + os.Exit(7) + case "empty": + return + case "exit": + os.Exit(9) + case "huge": + fmt.Print(strings.Repeat("x", 10*1024*1024+4096)) + case "huge-unaligned": + fmt.Print("x") + time.Sleep(50 * time.Millisecond) + fmt.Print(strings.Repeat("x", 10*1024*1024+4096)) + case "state": + cwd, err := os.Getwd() + if err != nil { + fmt.Fprintln(os.Stderr, err) + os.Exit(3) + } + state := struct { + Args []string `json:"args"` + CWD string `json:"cwd"` + Env string `json:"env"` + Prompt string `json:"prompt"` + }{ + Args: os.Args[1:], + CWD: cwd, + Env: os.Getenv("MY_TEST_VAR"), + Prompt: string(prompt), + } + if err := json.NewEncoder(os.Stdout).Encode(state); err != nil { + fmt.Fprintln(os.Stderr, err) + os.Exit(4) + } + default: + fmt.Fprintln(os.Stderr, "unknown LOOM_HELPER_MODE") + os.Exit(5) + } +} diff --git a/internal/handlers/loom/workers.go b/internal/handlers/loom/workers.go index 5e090c3d..bfa5996c 100644 --- a/internal/handlers/loom/workers.go +++ b/internal/handlers/loom/workers.go @@ -179,13 +179,21 @@ type limitedWriter struct { } func (l *limitedWriter) Write(p []byte) (int, error) { + originalLen := len(p) if l.n <= 0 { - return len(p), nil // discard + return originalLen, nil // discard } - if int64(len(p)) > l.n { - p = p[:l.n] + retained := p + if int64(len(retained)) > l.n { + retained = retained[:l.n] } - n, err := l.w.Write(p) + n, err := l.w.Write(retained) l.n -= int64(n) - return len(p), err // report full len to avoid short-write errors + if err != nil { + return n, err + } + if n != len(retained) { + return n, io.ErrShortWrite + } + return originalLen, nil // overflow is intentionally discarded } diff --git a/internal/handlers/loom/workers_test.go b/internal/handlers/loom/workers_test.go index 3a2a6701..96d72b72 100644 --- a/internal/handlers/loom/workers_test.go +++ b/internal/handlers/loom/workers_test.go @@ -2,99 +2,54 @@ package loom_test import ( "context" - "os/exec" - "runtime" "strings" "testing" "time" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" loomlib "github.com/thebtf/aimux/loom" loomhandler "github.com/thebtf/engram/internal/handlers/loom" ) -// echoTask returns a TaskRequest that runs the platform's echo binary -// with the given prompt on stdin. The echo binary simply writes its first -// positional argument, so we use "cat" on Unix and "cmd /c type CON" on -// Windows to read from stdin. For simplicity, we use a synthetic helper. -func echoTask(t *testing.T, prompt string) *loomlib.Task { - t.Helper() +func helperTask(prompt, mode string) *loomlib.Task { + env := map[string]string{} + if mode != "" { + env["LOOM_HELPER_MODE"] = mode + } return &loomlib.Task{ ID: "test-task", Status: loomlib.TaskStatusRunning, - CLI: echoBinary(t), + CLI: loomCLIHelperName, Prompt: prompt, + Env: env, } } -// echoBinary returns the name of a binary that reads stdin and writes it -// back to stdout. On all platforms we use a small helper that the test -// creates in t.TempDir() so we have full control without relying on -// OS-specific behaviour differences. -func echoBinary(t *testing.T) string { - t.Helper() - if runtime.GOOS == "windows" { - return "cmd" - } - return "cat" -} - -// TestCliWorker_HappyPath verifies that the worker runs an allowlisted -// binary and returns the stdout content as the result. +// TestCliWorker_HappyPath verifies stdin delivery and stdout capture using the +// compiled cross-platform helper installed in PATH by TestMain. func TestCliWorker_HappyPath(t *testing.T) { t.Parallel() - if runtime.GOOS == "windows" { - t.Skip("happy path test requires a POSIX shell (cat reads stdin)") - } - if _, err := exec.LookPath("cat"); err != nil { - t.Skip("cat not in PATH") - } - - // cat reads stdin and writes it back — verifies the stdin delivery path. - w := loomhandler.NewCLIWorkerWithAllowlist([]string{"cat"}) - task := &loomlib.Task{ - ID: "t1", - Status: loomlib.TaskStatusRunning, - CLI: "cat", - Prompt: "hello world", - } - - result, err := w.Execute(context.Background(), task) - if err != nil { - t.Fatalf("Execute: unexpected error: %v", err) - } - if result == nil { - t.Fatal("result is nil") - } - if result.Content != "hello world" { - t.Errorf("expected %q, got %q", "hello world", result.Content) - } + w := loomhandler.NewCLIWorkerWithAllowlist([]string{loomCLIHelperName}) + result, err := w.Execute(context.Background(), helperTask("hello world", "echo")) + require.NoError(t, err) + require.NotNil(t, result) + assert.Equal(t, "hello world", result.Content) } -// TestCliWorker_AllowlistDeny verifies that a binary not in the allowlist -// is rejected with an error. func TestCliWorker_AllowlistDeny(t *testing.T) { t.Parallel() w := loomhandler.NewCLIWorkerWithAllowlist([]string{"codex", "claude"}) - task := &loomlib.Task{ - ID: "t2", - Status: loomlib.TaskStatusRunning, - CLI: "notallowed", - Prompt: "anything", - } + task := helperTask("anything", "echo") + task.CLI = "notallowed" _, err := w.Execute(context.Background(), task) - if err == nil { - t.Fatal("expected error for non-allowlisted binary, got nil") - } - if !strings.Contains(err.Error(), "allowlist") { - t.Errorf("expected 'allowlist' in error, got: %v", err) - } + require.Error(t, err) + assert.Contains(t, err.Error(), "allowlist") } -// TestCliWorker_PathSeparatorReject verifies that binary names containing -// path separators are rejected to prevent path traversal. func TestCliWorker_PathSeparatorReject(t *testing.T) { t.Parallel() @@ -111,229 +66,88 @@ func TestCliWorker_PathSeparatorReject(t *testing.T) { t.Run(cli, func(t *testing.T) { t.Parallel() w := loomhandler.NewCLIWorkerWithAllowlist([]string{cli}) - task := &loomlib.Task{ - ID: "t3", - Status: loomlib.TaskStatusRunning, - CLI: cli, - Prompt: "anything", - } + task := helperTask("anything", "echo") + task.CLI = cli _, err := w.Execute(context.Background(), task) - if err == nil { - t.Fatalf("expected error for path separator in %q, got nil", cli) - } - if !strings.Contains(err.Error(), "path separator") && !strings.Contains(err.Error(), "drive colon") { - t.Errorf("error should mention path separator or drive colon, got: %v", err) - } + require.Error(t, err) + assert.ErrorContains(t, err, "path separator") }) } } -// TestCliWorker_EnvMerge verifies that task.Env values override the -// daemon's environment when the subprocess is invoked. func TestCliWorker_EnvMerge(t *testing.T) { t.Parallel() - if runtime.GOOS == "windows" { - t.Skip("env merge test requires a POSIX shell") - } - - // Use a shell to print the value of MY_TEST_VAR. - if _, err := exec.LookPath("sh"); err != nil { - t.Skip("sh not in PATH") - } - - w := loomhandler.NewCLIWorkerWithAllowlist([]string{"sh"}) - task := &loomlib.Task{ - ID: "t4", - Status: loomlib.TaskStatusRunning, - CLI: "sh", - Prompt: "echo $MY_TEST_VAR", - Env: map[string]string{"MY_TEST_VAR": "engram_test_value"}, - } + w := loomhandler.NewCLIWorkerWithAllowlist([]string{loomCLIHelperName}) + task := helperTask("", "env") + task.Env["MY_TEST_VAR"] = "engram_test_value" result, err := w.Execute(context.Background(), task) - if err != nil { - t.Fatalf("Execute: unexpected error: %v", err) - } - if !strings.Contains(result.Content, "engram_test_value") { - t.Errorf("expected env var in output, got: %q", result.Content) - } + require.NoError(t, err) + assert.Equal(t, "engram_test_value", result.Content) } -// TestCliWorker_Timeout verifies that a long-running subprocess is killed -// when the context deadline expires. func TestCliWorker_Timeout(t *testing.T) { t.Parallel() - if runtime.GOOS == "windows" { - t.Skip("timeout test requires a POSIX shell") - } - if _, err := exec.LookPath("sh"); err != nil { - t.Skip("sh not in PATH") - } - - w := loomhandler.NewCLIWorkerWithAllowlist([]string{"sh"}) + w := loomhandler.NewCLIWorkerWithAllowlist([]string{loomCLIHelperName}) ctx, cancel := context.WithTimeout(context.Background(), 200*time.Millisecond) defer cancel() - // "exec sleep 10" uses the exec builtin to replace the shell process with - // sleep, ensuring exec.CommandContext kills the sleeping process directly - // (not just the shell wrapper) when the context deadline fires. - task := &loomlib.Task{ - ID: "t5", - Status: loomlib.TaskStatusRunning, - CLI: "sh", - Prompt: "exec sleep 10", - } - start := time.Now() - _, err := w.Execute(ctx, task) + _, err := w.Execute(ctx, helperTask("", "sleep")) elapsed := time.Since(start) - if err == nil { - t.Fatal("expected error on context timeout, got nil") - } - if elapsed >= 2*time.Second { - t.Errorf("Execute took %v, expected cancellation within 2s", elapsed) - } + require.ErrorIs(t, err, context.DeadlineExceeded) + assert.Less(t, elapsed, 2*time.Second) } -// TestCliWorker_StderrCapture verifies that non-zero exit code errors -// include the subprocess's stderr output in the returned error. func TestCliWorker_StderrCapture(t *testing.T) { t.Parallel() - if runtime.GOOS == "windows" { - t.Skip("stderr capture test requires a POSIX shell") - } - - if _, err := exec.LookPath("sh"); err != nil { - t.Skip("sh not in PATH") - } - - w := loomhandler.NewCLIWorkerWithAllowlist([]string{"sh"}) - task := &loomlib.Task{ - ID: "t6", - Status: loomlib.TaskStatusRunning, - CLI: "sh", - Prompt: "echo 'sentinel_error_msg' >&2 && exit 1", - } - - _, err := w.Execute(context.Background(), task) - if err == nil { - t.Fatal("expected error on non-zero exit, got nil") - } - if !strings.Contains(err.Error(), "sentinel_error_msg") { - t.Errorf("expected stderr in error message, got: %v", err) - } + w := loomhandler.NewCLIWorkerWithAllowlist([]string{loomCLIHelperName}) + _, err := w.Execute(context.Background(), helperTask("", "stderr")) + require.Error(t, err) + assert.Contains(t, err.Error(), "sentinel_error_msg") } -// TestCliWorker_EmptyStdoutTriggersRetry verifies that empty stdout results -// in a WorkerResult with empty Content (loom quality gate will retry). func TestCliWorker_EmptyStdoutTriggersRetry(t *testing.T) { t.Parallel() - if runtime.GOOS == "windows" { - t.Skip("empty stdout test requires a POSIX shell") - } - - if _, err := exec.LookPath("sh"); err != nil { - t.Skip("sh not in PATH") - } - - w := loomhandler.NewCLIWorkerWithAllowlist([]string{"sh"}) - task := &loomlib.Task{ - ID: "t7", - Status: loomlib.TaskStatusRunning, - CLI: "sh", - Prompt: "true", // exits 0 with no output - } - - result, err := w.Execute(context.Background(), task) - if err != nil { - t.Fatalf("Execute: unexpected error: %v", err) - } - if result == nil { - t.Fatal("result is nil, expected WorkerResult with empty content") - } - if result.Content != "" { - t.Errorf("expected empty Content to trigger retry, got: %q", result.Content) - } + w := loomhandler.NewCLIWorkerWithAllowlist([]string{loomCLIHelperName}) + result, err := w.Execute(context.Background(), helperTask("", "empty")) + require.NoError(t, err) + require.NotNil(t, result) + assert.Empty(t, result.Content) } -// TestCliWorker_ContextCancellation verifies that cancelling the context -// mid-execution causes Execute to return an error promptly. func TestCliWorker_ContextCancellation(t *testing.T) { t.Parallel() - if runtime.GOOS == "windows" { - t.Skip("context cancellation test requires a POSIX shell") - } - - if _, err := exec.LookPath("sh"); err != nil { - t.Skip("sh not in PATH") - } - - w := loomhandler.NewCLIWorkerWithAllowlist([]string{"sh"}) + w := loomhandler.NewCLIWorkerWithAllowlist([]string{loomCLIHelperName}) ctx, cancel := context.WithCancel(context.Background()) - - // Cancel after a short delay. - go func() { - time.Sleep(50 * time.Millisecond) - cancel() - }() - - // "exec sleep 30" uses the exec builtin to replace the shell process with - // sleep, ensuring exec.CommandContext kills the sleeping process directly - // (not just the shell wrapper) when the context is cancelled. - task := &loomlib.Task{ - ID: "t8", - Status: loomlib.TaskStatusRunning, - CLI: "sh", - Prompt: "exec sleep 30", - } + timer := time.AfterFunc(50*time.Millisecond, cancel) + defer timer.Stop() + defer cancel() start := time.Now() - _, err := w.Execute(ctx, task) + _, err := w.Execute(ctx, helperTask("", "sleep")) elapsed := time.Since(start) - if err == nil { - t.Fatal("expected error on context cancellation, got nil") - } - if elapsed >= 2*time.Second { - t.Errorf("Execute took %v after cancel, expected <2s", elapsed) - } + require.ErrorIs(t, err, context.Canceled) + assert.Less(t, elapsed, 2*time.Second) } -// TestCliWorker_InvalidEnvKey verifies that an invalid environment variable -// key name is rejected with an error. func TestCliWorker_InvalidEnvKey(t *testing.T) { t.Parallel() - if _, err := exec.LookPath("echo"); err != nil { - t.Skip("echo not in PATH") - } - - w := loomhandler.NewCLIWorkerWithAllowlist([]string{"echo"}) - task := &loomlib.Task{ - ID: "t9", - Status: loomlib.TaskStatusRunning, - CLI: "echo", - Prompt: "test", - Env: map[string]string{ - "123INVALID": "value", - }, - } + w := loomhandler.NewCLIWorkerWithAllowlist([]string{loomCLIHelperName}) + task := helperTask("test", "echo") + task.Env["123INVALID"] = "value" _, err := w.Execute(context.Background(), task) - if err == nil { - t.Fatal("expected error for invalid env key, got nil") - } - if !strings.Contains(err.Error(), "invalid env key") { - t.Errorf("expected 'invalid env key' in error, got: %v", err) - } + require.Error(t, err) + assert.True(t, strings.Contains(err.Error(), "invalid env key")) } -// Ensure NewCLIWorkerWithAllowlist is exported (used in tests above). -// This line is a compile-time assertion that loomhandler exports the function. var _ = loomhandler.NewCLIWorkerWithAllowlist diff --git a/internal/mcp/integration_tg3_hybrid_test.go b/internal/mcp/integration_tg3_hybrid_test.go index 82b1e8ff..1511f492 100644 --- a/internal/mcp/integration_tg3_hybrid_test.go +++ b/internal/mcp/integration_tg3_hybrid_test.go @@ -4,6 +4,7 @@ import ( "context" "encoding/json" "os" + "strings" "testing" "time" @@ -78,55 +79,29 @@ func TestHybridTG3_ConfidenceMin_FloorEnforced_T022(t *testing.T) { result, err := srv.handleRecallMemory(context.Background(), args) require.NoError(t, err, "handleRecallMemory must not error with confidence_min>0 in hybrid mode") - // Parse the items-format JSON response. - var out map[string]any - require.NoError(t, json.Unmarshal([]byte(result), &out), "response must be valid JSON") - - memoriesAny, ok := out["memories"] - require.True(t, ok, "response must have 'memories' key") - memories, ok := memoriesAny.([]any) - require.True(t, ok, "'memories' must be an array") + // The live items format is a top-level array of compact hybrid results. + var memories []struct { + Content string `json:"content"` + } + require.NoError(t, json.Unmarshal([]byte(result), &memories), "items response must be a valid JSON array") + require.NotEmpty(t, memories, "confidence floor test must exercise at least one returned item") // Every returned memory must have score or content indicating it passes the floor. // Since the items format uses a compact hybridResult struct (not full Memory), // we verify the low-confidence content is absent. - for _, memAny := range memories { - memObj, ok := memAny.(map[string]any) - require.True(t, ok, "each memory must be a JSON object") - - content, _ := memObj["content"].(string) - assert.NotContains(t, content, "low beta", + for _, memory := range memories { + assert.NotContains(t, memory.Content, "low beta", "memory below confidence_min=0.7 must not appear in hybrid results") } - // At least the high-confidence row must appear. - found := false - for _, memAny := range memories { - memObj, _ := memAny.(map[string]any) - if content, _ := memObj["content"].(string); content != "" { - if contains(content, "high alpha") { - found = true - break - } + foundHigh := false + for _, memory := range memories { + if strings.Contains(memory.Content, "high alpha") { + foundHigh = true + break } } - // Best-effort check (FTS-dependent): log if not found but don't fail. - if !found { - t.Logf("high-confidence content not found (FTS may not have matched)") - } -} - -// contains is a simple substring check helper for test assertions. -func contains(s, sub string) bool { - return len(s) >= len(sub) && (s == sub || len(sub) == 0 || - func() bool { - for i := 0; i <= len(s)-len(sub); i++ { - if s[i:i+len(sub)] == sub { - return true - } - } - return false - }()) + require.True(t, foundHigh, "high-confidence fixture must appear; empty or unrelated results are a false green") } // TestHybridTG3_IncludeSuperseded_StructuredError_T022b verifies that when From 2af6882d8fae89540c159c724e18c4d65668c6f6 Mon Sep 17 00:00:00 2001 From: Kirill Turanskiy Date: Sat, 11 Jul 2026 06:50:34 +0300 Subject: [PATCH 053/111] review(dbph): accept R4 evidence packet --- .../Invoke-BuilderDeterminism.ps1 | 215 ++++++++ .../Invoke-IndependentAttacks.ps1 | 508 ++++++++++++++++++ .../builder-determinism.json | 32 ++ .../gates.json | 163 ++++++ .../independent-attacks.json | 347 ++++++++++++ .../report.md | 103 ++++ 6 files changed, 1368 insertions(+) create mode 100644 .agent/reviews/db-test-pool-hygiene-r4-fresh-checker/Invoke-BuilderDeterminism.ps1 create mode 100644 .agent/reviews/db-test-pool-hygiene-r4-fresh-checker/Invoke-IndependentAttacks.ps1 create mode 100644 .agent/reviews/db-test-pool-hygiene-r4-fresh-checker/builder-determinism.json create mode 100644 .agent/reviews/db-test-pool-hygiene-r4-fresh-checker/gates.json create mode 100644 .agent/reviews/db-test-pool-hygiene-r4-fresh-checker/independent-attacks.json create mode 100644 .agent/reviews/db-test-pool-hygiene-r4-fresh-checker/report.md diff --git a/.agent/reviews/db-test-pool-hygiene-r4-fresh-checker/Invoke-BuilderDeterminism.ps1 b/.agent/reviews/db-test-pool-hygiene-r4-fresh-checker/Invoke-BuilderDeterminism.ps1 new file mode 100644 index 00000000..a38ca087 --- /dev/null +++ b/.agent/reviews/db-test-pool-hygiene-r4-fresh-checker/Invoke-BuilderDeterminism.ps1 @@ -0,0 +1,215 @@ +param( + [Parameter(Mandatory = $true)] + [string]$RepositoryRoot, + + [Parameter(Mandatory = $true)] + [string]$OutputPath +) + +$ErrorActionPreference = 'Stop' +$utf8NoBom = [Text.UTF8Encoding]::new($false) +$utf8Strict = [Text.UTF8Encoding]::new($false, $true) +$maker = 'ce6a40d72fc39932ccbc4b949647f321b91f70c3' +$evidenceParent = '331b5b195a967e7f27dca94038a3480c9afcc84f' +$manifestPath = '.agent/reports/evidence/production-ready/db-test-pool-hygiene/MANIFEST.json' +$sumsPath = '.agent/reports/evidence/production-ready/db-test-pool-hygiene/SHA256SUMS.txt' +$adversarialPath = '.agent/reports/evidence/production-ready/db-test-pool-hygiene/adversarial-proof.json' +$verifierPath = '.agent/reports/evidence/production-ready/db-test-pool-hygiene/verifier-proof.json' +$resolvedRepository = (Resolve-Path -LiteralPath $RepositoryRoot).Path +$builder = Join-Path $resolvedRepository '.agent/reports/evidence/production-ready/db-test-pool-hygiene/Build-DBPoolHygieneEvidence.ps1' +$tempBase = [IO.Path]::GetFullPath([IO.Path]::GetTempPath()) +$tempPrefix = 'engram-dbph-r4-builder-check-' +$tempRoot = Join-Path $tempBase ($tempPrefix + [Guid]::NewGuid().ToString('N')) + +if (-not $tempRoot.StartsWith($tempBase, [StringComparison]::OrdinalIgnoreCase) -or + -not [IO.Path]::GetFileName($tempRoot).StartsWith($tempPrefix, [StringComparison]::Ordinal)) { + throw "unsafe temp root: $tempRoot" +} +[IO.Directory]::CreateDirectory($tempRoot) | Out-Null + +function Invoke-GitRaw { + param( + [Parameter(Mandatory = $true)][string]$WorkingDirectory, + [Parameter(Mandatory = $true)][string[]]$Arguments + ) + $start = [Diagnostics.ProcessStartInfo]::new() + $start.FileName = 'git' + $start.WorkingDirectory = $WorkingDirectory + $start.UseShellExecute = $false + $start.RedirectStandardOutput = $true + $start.RedirectStandardError = $true + foreach ($argument in $Arguments) { $start.ArgumentList.Add($argument) } + $process = [Diagnostics.Process]::Start($start) + $stream = [IO.MemoryStream]::new() + $process.StandardOutput.BaseStream.CopyTo($stream) + $stderr = $process.StandardError.ReadToEnd() + $process.WaitForExit() + if ($process.ExitCode -ne 0) { throw "git $($Arguments -join ' ') failed: $stderr" } + return $stream.ToArray() +} + +function Invoke-GitText { + param([Parameter(Mandatory = $true)][string]$WorkingDirectory, [Parameter(Mandatory = $true)][string[]]$Arguments) + return $utf8Strict.GetString((Invoke-GitRaw -WorkingDirectory $WorkingDirectory -Arguments $Arguments)).Trim() +} + +function Get-Hash { + param([Parameter(Mandatory = $true)][byte[]]$Bytes) + return [Convert]::ToHexString([Security.Cryptography.SHA256]::HashData($Bytes)).ToLowerInvariant() +} + +function Get-FileHashStrict { + param([Parameter(Mandatory = $true)][string]$Path) + return Get-Hash -Bytes ([IO.File]::ReadAllBytes($Path)) +} + +function New-CaseRepository { + param([Parameter(Mandatory = $true)][string]$Name) + $path = Join-Path $tempRoot $Name + [IO.Directory]::CreateDirectory($path) | Out-Null + Invoke-GitRaw -WorkingDirectory $path -Arguments @('init', '-q') | Out-Null + Invoke-GitRaw -WorkingDirectory $path -Arguments @('config', 'core.autocrlf', 'false') | Out-Null + Invoke-GitRaw -WorkingDirectory $path -Arguments @('config', 'core.longpaths', 'true') | Out-Null + $gitDir = Invoke-GitText -WorkingDirectory $path -Arguments @('rev-parse', '--absolute-git-dir') + $info = Join-Path $gitDir 'objects/info' + [IO.Directory]::CreateDirectory($info) | Out-Null + [IO.File]::WriteAllText((Join-Path $info 'alternates'), $script:sourceObjects + "`n", $utf8NoBom) + Invoke-GitRaw -WorkingDirectory $path -Arguments @('update-ref', 'refs/heads/evidence', $evidenceParent) | Out-Null + Invoke-GitRaw -WorkingDirectory $path -Arguments @('symbolic-ref', 'HEAD', 'refs/heads/evidence') | Out-Null + Invoke-GitRaw -WorkingDirectory $path -Arguments @('read-tree', $script:makerTree) | Out-Null + Invoke-GitRaw -WorkingDirectory $path -Arguments @('checkout-index', '-a', '-f') | Out-Null + return $path +} + +function Invoke-Builder { + param([Parameter(Mandatory = $true)][string]$CaseRepository, [switch]$Seed) + $arguments = @('-NoProfile', '-File', $builder, '-RepositoryRoot', $CaseRepository) + if ($Seed) { $arguments += '-SeedDynamicProofs' } + $start = [Diagnostics.ProcessStartInfo]::new() + $start.FileName = 'pwsh' + $start.WorkingDirectory = $CaseRepository + $start.UseShellExecute = $false + $start.RedirectStandardOutput = $true + $start.RedirectStandardError = $true + foreach ($argument in $arguments) { $start.ArgumentList.Add($argument) } + $process = [Diagnostics.Process]::Start($start) + $stdout = $process.StandardOutput.ReadToEnd() + $stderr = $process.StandardError.ReadToEnd() + $process.WaitForExit() + if ($process.ExitCode -ne 0) { throw "builder failed exit $($process.ExitCode): $stderr`n$stdout" } + return ($stdout.Trim() | ConvertFrom-Json) +} + +$fatal = $null +$cleanupError = $null +$result = $null +try { + $script:makerTree = Invoke-GitText -WorkingDirectory $resolvedRepository -Arguments @('rev-parse', "$maker^{tree}") + $objectsText = Invoke-GitText -WorkingDirectory $resolvedRepository -Arguments @('rev-parse', '--git-path', 'objects') + $script:sourceObjects = if ([IO.Path]::IsPathRooted($objectsText)) { + [IO.Path]::GetFullPath($objectsText) + } else { + [IO.Path]::GetFullPath((Join-Path $resolvedRepository $objectsText)) + } + + $seedRepository = New-CaseRepository -Name 'seed' + $seedManifest = Join-Path $seedRepository $manifestPath + $seedSums = Join-Path $seedRepository $sumsPath + $seedAdversarial = Join-Path $seedRepository $adversarialPath + $seedVerifier = Join-Path $seedRepository $verifierPath + $manifestBeforeSeed = Get-FileHashStrict $seedManifest + $sumsBeforeSeed = Get-FileHashStrict $seedSums + $seedRun1 = Invoke-Builder -CaseRepository $seedRepository -Seed + $seedAdversarial1 = Get-FileHashStrict $seedAdversarial + $seedVerifier1 = Get-FileHashStrict $seedVerifier + $seedRun2 = Invoke-Builder -CaseRepository $seedRepository -Seed + $seedAdversarial2 = Get-FileHashStrict $seedAdversarial + $seedVerifier2 = Get-FileHashStrict $seedVerifier + $manifestAfterSeed = Get-FileHashStrict $seedManifest + $sumsAfterSeed = Get-FileHashStrict $seedSums + + $buildRepository = New-CaseRepository -Name 'build' + $buildManifest = Join-Path $buildRepository $manifestPath + $buildSums = Join-Path $buildRepository $sumsPath + $expectedManifest = Get-Hash -Bytes (Invoke-GitRaw -WorkingDirectory $buildRepository -Arguments @('show', ":$manifestPath")) + $expectedSums = Get-Hash -Bytes (Invoke-GitRaw -WorkingDirectory $buildRepository -Arguments @('show', ":$sumsPath")) + $buildRun1 = Invoke-Builder -CaseRepository $buildRepository + $builtManifest1 = Get-FileHashStrict $buildManifest + $builtSums1 = Get-FileHashStrict $buildSums + $buildRun2 = Invoke-Builder -CaseRepository $buildRepository + $builtManifest2 = Get-FileHashStrict $buildManifest + $builtSums2 = Get-FileHashStrict $buildSums + + $checks = [ordered]@{ + seed_status_run1 = [string]$seedRun1.status -ceq 'SEEDED_DYNAMIC_PROOFS' + seed_status_run2 = [string]$seedRun2.status -ceq 'SEEDED_DYNAMIC_PROOFS' + seed_adversarial_byte_deterministic = $seedAdversarial1 -ceq $seedAdversarial2 + seed_verifier_byte_deterministic = $seedVerifier1 -ceq $seedVerifier2 + seed_manifest_unchanged = $manifestBeforeSeed -ceq $manifestAfterSeed + seed_checksum_unchanged = $sumsBeforeSeed -ceq $sumsAfterSeed + build_status_run1 = [string]$buildRun1.status -ceq 'BUILT' + build_status_run2 = [string]$buildRun2.status -ceq 'BUILT' + build_manifest_matches_committed = $builtManifest1 -ceq $expectedManifest + build_checksum_matches_committed = $builtSums1 -ceq $expectedSums + build_manifest_byte_deterministic = $builtManifest1 -ceq $builtManifest2 + build_checksum_byte_deterministic = $builtSums1 -ceq $builtSums2 + } + $failed = @($checks.GetEnumerator() | Where-Object { -not $_.Value } | ForEach-Object { $_.Key }) + $result = [ordered]@{ + schema_version = 1 + target = $maker + target_tree = $script:makerTree + status = if ($failed.Count -eq 0) { 'PASS' } else { 'FAIL' } + checks = $checks + failed_checks = [object[]]$failed + hashes = [ordered]@{ + seed_adversarial = $seedAdversarial1 + seed_verifier = $seedVerifier1 + committed_manifest = $expectedManifest + committed_checksum = $expectedSums + built_manifest = $builtManifest1 + built_checksum = $builtSums1 + } + } +} +catch { + $fatal = $_.Exception.Message +} +finally { + try { + $resolvedTempRoot = [IO.Path]::GetFullPath($tempRoot) + if (-not $resolvedTempRoot.StartsWith($tempBase, [StringComparison]::OrdinalIgnoreCase) -or + -not [IO.Path]::GetFileName($resolvedTempRoot).StartsWith($tempPrefix, [StringComparison]::Ordinal)) { + throw "unsafe cleanup target: $resolvedTempRoot" + } + if ([IO.Directory]::Exists($resolvedTempRoot)) { + Get-ChildItem -LiteralPath $resolvedTempRoot -Recurse -Force | ForEach-Object { $_.Attributes = [IO.FileAttributes]::Normal } + [IO.Directory]::Delete($resolvedTempRoot, $true) + } + } + catch { $cleanupError = $_.Exception.Message } +} + +$tempRemoved = -not [IO.Directory]::Exists($tempRoot) +if ($null -eq $result) { + $result = [ordered]@{ + schema_version = 1 + target = $maker + target_tree = $script:makerTree + status = 'FAIL' + checks = [ordered]@{} + failed_checks = @('fatal_error') + hashes = [ordered]@{} + } +} +$result['fatal_error'] = $fatal +$result['temp_root_removed'] = $tempRemoved +$result['cleanup_error'] = $cleanupError +if ($null -ne $fatal -or $null -ne $cleanupError -or -not $tempRemoved) { $result['status'] = 'FAIL' } +$json = (($result | ConvertTo-Json -Depth 12) -replace "`r`n", "`n") + "`n" +$resolvedOutput = [IO.Path]::GetFullPath($OutputPath) +[IO.Directory]::CreateDirectory([IO.Path]::GetDirectoryName($resolvedOutput)) | Out-Null +[IO.File]::WriteAllText($resolvedOutput, $json, $utf8NoBom) +$json +if ([string]$result.status -cne 'PASS') { exit 1 } +exit 0 diff --git a/.agent/reviews/db-test-pool-hygiene-r4-fresh-checker/Invoke-IndependentAttacks.ps1 b/.agent/reviews/db-test-pool-hygiene-r4-fresh-checker/Invoke-IndependentAttacks.ps1 new file mode 100644 index 00000000..9574dd9f --- /dev/null +++ b/.agent/reviews/db-test-pool-hygiene-r4-fresh-checker/Invoke-IndependentAttacks.ps1 @@ -0,0 +1,508 @@ +param( + [Parameter(Mandatory = $true)] + [string]$RepositoryRoot, + + [Parameter(Mandatory = $true)] + [string]$OutputPath +) + +$ErrorActionPreference = 'Stop' +$utf8Strict = [Text.UTF8Encoding]::new($false, $true) +$utf8NoBom = [Text.UTF8Encoding]::new($false) +$ordinal = [StringComparer]::Ordinal +$maker = 'ce6a40d72fc39932ccbc4b949647f321b91f70c3' +$evidenceParent = '331b5b195a967e7f27dca94038a3480c9afcc84f' +$productCandidate = '276337b3e96aa5af6d2e7dd9a0002ff957e5ffc9' +$manifestPath = '.agent/reports/evidence/production-ready/db-test-pool-hygiene/MANIFEST.json' +$sumsPath = '.agent/reports/evidence/production-ready/db-test-pool-hygiene/SHA256SUMS.txt' +$inventoryPath = '.agent/reports/evidence/production-ready/db-test-pool-hygiene/INVENTORY.json' +$adversarialProofPath = '.agent/reports/evidence/production-ready/db-test-pool-hygiene/adversarial-proof.json' +$verifierProofPath = '.agent/reports/evidence/production-ready/db-test-pool-hygiene/verifier-proof.json' +$productBlobPath = 'internal/db/gorm/candidate_store_test.go' +$resolvedRepository = (Resolve-Path -LiteralPath $RepositoryRoot).Path +$verifierPath = Join-Path $resolvedRepository '.agent/reports/evidence/production-ready/db-test-pool-hygiene/Verify-DBPoolHygieneEvidence.ps1' +$tempBase = [IO.Path]::GetFullPath([IO.Path]::GetTempPath()) +$tempPrefix = 'engram-dbph-r4-independent-' +$tempRoot = Join-Path $tempBase ($tempPrefix + [Guid]::NewGuid().ToString('N')) + +if (-not $tempRoot.StartsWith($tempBase, [StringComparison]::OrdinalIgnoreCase) -or + -not [IO.Path]::GetFileName($tempRoot).StartsWith($tempPrefix, [StringComparison]::Ordinal)) { + throw "unsafe temp root: $tempRoot" +} +[IO.Directory]::CreateDirectory($tempRoot) | Out-Null + +function Invoke-GitRaw { + param( + [Parameter(Mandatory = $true)][string]$WorkingDirectory, + [Parameter(Mandatory = $true)][string[]]$Arguments, + [byte[]]$InputBytes + ) + + $start = [Diagnostics.ProcessStartInfo]::new() + $start.FileName = 'git' + $start.WorkingDirectory = $WorkingDirectory + $start.UseShellExecute = $false + $start.RedirectStandardOutput = $true + $start.RedirectStandardError = $true + $hasInput = $PSBoundParameters.ContainsKey('InputBytes') + $start.RedirectStandardInput = $hasInput + foreach ($argument in $Arguments) { $start.ArgumentList.Add($argument) } + $process = [Diagnostics.Process]::Start($start) + if ($hasInput) { + $process.StandardInput.BaseStream.Write($InputBytes, 0, $InputBytes.Length) + $process.StandardInput.Close() + } + $stream = [IO.MemoryStream]::new() + $process.StandardOutput.BaseStream.CopyTo($stream) + $stderr = $process.StandardError.ReadToEnd() + $process.WaitForExit() + if ($process.ExitCode -ne 0) { + throw "git $($Arguments -join ' ') failed: $stderr" + } + return $stream.ToArray() +} + +function Invoke-GitText { + param( + [Parameter(Mandatory = $true)][string]$WorkingDirectory, + [Parameter(Mandatory = $true)][string[]]$Arguments, + [byte[]]$InputBytes + ) + $bytes = if ($PSBoundParameters.ContainsKey('InputBytes')) { + Invoke-GitRaw -WorkingDirectory $WorkingDirectory -Arguments $Arguments -InputBytes $InputBytes + } else { + Invoke-GitRaw -WorkingDirectory $WorkingDirectory -Arguments $Arguments + } + return $utf8Strict.GetString($bytes).Trim() +} + +function Get-Hash { + param([Parameter(Mandatory = $true)][byte[]]$Bytes) + return [Convert]::ToHexString([Security.Cryptography.SHA256]::HashData($Bytes)).ToLowerInvariant() +} + +function ConvertTo-JsonBytes { + param([Parameter(Mandatory = $true)]$Value) + $json = (($Value | ConvertTo-Json -Depth 30) -replace "`r`n", "`n") + "`n" + $bytes = $utf8NoBom.GetBytes($json) + if ($bytes -contains [byte]0x0D) { throw 'canonical JSON contains CR' } + return $bytes +} + +function ConvertFrom-Bytes { + param([Parameter(Mandatory = $true)][byte[]]$Bytes) + return ($utf8Strict.GetString($Bytes) | ConvertFrom-Json) +} + +function Get-IndexBytes { + param([Parameter(Mandatory = $true)][string]$CaseRepository, [Parameter(Mandatory = $true)][string]$Path) + return Invoke-GitRaw -WorkingDirectory $CaseRepository -Arguments @('show', ":$Path") +} + +function Set-IndexBytes { + param( + [Parameter(Mandatory = $true)][string]$CaseRepository, + [Parameter(Mandatory = $true)][string]$Path, + [Parameter(Mandatory = $true)][byte[]]$Bytes + ) + $oid = Invoke-GitText -WorkingDirectory $CaseRepository -Arguments @('hash-object', '-w', '--stdin') -InputBytes $Bytes + Invoke-GitRaw -WorkingDirectory $CaseRepository -Arguments @('update-index', '--add', '--cacheinfo', "100644,$oid,$Path") | Out-Null + return $oid +} + +function Write-SumsFromManifest { + param( + [Parameter(Mandatory = $true)][string]$CaseRepository, + [Parameter(Mandatory = $true)]$Manifest, + [Parameter(Mandatory = $true)][byte[]]$ManifestBytes, + [hashtable]$ExtraPaths + ) + + $lines = [Collections.Generic.List[string]]::new() + foreach ($entry in @($Manifest.entries)) { + $lines.Add("$($entry.sha256) $($entry.path)") + } + $lines.Add("$(Get-Hash -Bytes $ManifestBytes) $manifestPath") + if ($null -ne $ExtraPaths) { + foreach ($path in $ExtraPaths.Keys) { $lines.Add("$($ExtraPaths[$path]) $path") } + } + $array = [string[]]@($lines) + [Array]::Sort($array, [Comparison[string]]{ + param($left, $right) + return $ordinal.Compare($left.Substring(66), $right.Substring(66)) + }) + $text = (@( + '# representation_contract=git-blob-bytes-v1', + '# manifest_generation_order=manifest-first-checksum-second', + '# checksum_self_reference=excluded' + ) + $array) -join "`n" + Set-IndexBytes -CaseRepository $CaseRepository -Path $sumsPath -Bytes $utf8NoBom.GetBytes($text + "`n") | Out-Null +} + +function Set-ManifestBytes { + param( + [Parameter(Mandatory = $true)][string]$CaseRepository, + [Parameter(Mandatory = $true)][byte[]]$Bytes, + [switch]$RebuildAllSums + ) + Set-IndexBytes -CaseRepository $CaseRepository -Path $manifestPath -Bytes $Bytes | Out-Null + if ($RebuildAllSums) { + Write-SumsFromManifest -CaseRepository $CaseRepository -Manifest (ConvertFrom-Bytes $Bytes) -ManifestBytes $Bytes + return + } + $sums = $utf8Strict.GetString((Get-IndexBytes -CaseRepository $CaseRepository -Path $sumsPath)) + $hash = Get-Hash -Bytes $Bytes + $lines = @($sums -split "`n" | Where-Object { $_ -ne '' }) + $replaced = 0 + for ($index = 0; $index -lt $lines.Count; $index++) { + if ($lines[$index].EndsWith(" $manifestPath", [StringComparison]::Ordinal)) { + $lines[$index] = "$hash $manifestPath" + $replaced++ + } + } + if ($replaced -ne 1) { throw "expected one manifest checksum, got $replaced" } + Set-IndexBytes -CaseRepository $CaseRepository -Path $sumsPath -Bytes $utf8NoBom.GetBytes(($lines -join "`n") + "`n") | Out-Null +} + +function Set-ManifestObject { + param( + [Parameter(Mandatory = $true)][string]$CaseRepository, + [Parameter(Mandatory = $true)]$Manifest, + [switch]$RebuildAllSums + ) + Set-ManifestBytes -CaseRepository $CaseRepository -Bytes (ConvertTo-JsonBytes $Manifest) -RebuildAllSums:$RebuildAllSums +} + +function Set-ArtifactObject { + param( + [Parameter(Mandatory = $true)][string]$CaseRepository, + [Parameter(Mandatory = $true)][string]$Path, + [Parameter(Mandatory = $true)]$Value + ) + $bytes = ConvertTo-JsonBytes $Value + $oid = Set-IndexBytes -CaseRepository $CaseRepository -Path $Path -Bytes $bytes + $manifest = ConvertFrom-Bytes (Get-IndexBytes -CaseRepository $CaseRepository -Path $manifestPath) + $entry = @($manifest.entries | Where-Object { $_.path -ceq $Path }) + if ($entry.Count -ne 1) { throw "manifest entry count for $Path is $($entry.Count)" } + $entry[0].git_blob_oid = $oid + $entry[0].bytes = [int64]$bytes.Length + $entry[0].sha256 = Get-Hash -Bytes $bytes + $manifestBytes = ConvertTo-JsonBytes $manifest + Set-IndexBytes -CaseRepository $CaseRepository -Path $manifestPath -Bytes $manifestBytes | Out-Null + Write-SumsFromManifest -CaseRepository $CaseRepository -Manifest $manifest -ManifestBytes $manifestBytes +} + +function Replace-Once { + param( + [Parameter(Mandatory = $true)][string]$Text, + [Parameter(Mandatory = $true)][string]$Old, + [Parameter(Mandatory = $true)][string]$New + ) + $index = $Text.IndexOf($Old, [StringComparison]::Ordinal) + if ($index -lt 0 -or $Text.IndexOf($Old, $index + $Old.Length, [StringComparison]::Ordinal) -ge 0) { + throw "replacement source must occur exactly once: $Old" + } + return $Text.Substring(0, $index) + $New + $Text.Substring($index + $Old.Length) +} + +function New-CaseRepository { + param([Parameter(Mandatory = $true)][int]$Number, [Parameter(Mandatory = $true)][string]$Name) + $path = Join-Path $tempRoot ('case-{0:D2}-{1}' -f $Number, $Name) + [IO.Directory]::CreateDirectory($path) | Out-Null + Invoke-GitRaw -WorkingDirectory $path -Arguments @('init', '-q') | Out-Null + $gitDir = Invoke-GitText -WorkingDirectory $path -Arguments @('rev-parse', '--absolute-git-dir') + $info = Join-Path $gitDir 'objects/info' + [IO.Directory]::CreateDirectory($info) | Out-Null + [IO.File]::WriteAllText((Join-Path $info 'alternates'), $script:sourceObjects + "`n", $utf8NoBom) + Invoke-GitRaw -WorkingDirectory $path -Arguments @('config', 'core.autocrlf', 'false') | Out-Null + Invoke-GitRaw -WorkingDirectory $path -Arguments @('update-ref', 'refs/heads/evidence', $evidenceParent) | Out-Null + Invoke-GitRaw -WorkingDirectory $path -Arguments @('symbolic-ref', 'HEAD', 'refs/heads/evidence') | Out-Null + Invoke-GitRaw -WorkingDirectory $path -Arguments @('read-tree', $script:makerTree) | Out-Null + return $path +} + +function Invoke-Verifier { + param([Parameter(Mandatory = $true)][string]$CaseRepository) + $resultPath = Join-Path $CaseRepository 'result.json' + $start = [Diagnostics.ProcessStartInfo]::new() + $start.FileName = 'pwsh' + $start.WorkingDirectory = $CaseRepository + $start.UseShellExecute = $false + $start.RedirectStandardOutput = $true + $start.RedirectStandardError = $true + foreach ($argument in @( + '-NoProfile', '-File', $verifierPath, + '-RepositoryRoot', $CaseRepository, + '-SourceMode', 'GitIndex', + '-OutputPath', $resultPath, + '-Quiet' + )) { $start.ArgumentList.Add($argument) } + $process = [Diagnostics.Process]::Start($start) + $stdout = $process.StandardOutput.ReadToEnd() + $stderr = $process.StandardError.ReadToEnd() + $process.WaitForExit() + $result = if (Test-Path -LiteralPath $resultPath) { + Get-Content -Raw -LiteralPath $resultPath | ConvertFrom-Json + } else { + [pscustomobject]@{ status = 'NO_RESULT'; failures = @($stdout.Trim(), $stderr.Trim()) } + } + return [pscustomobject]@{ exit = $process.ExitCode; result = $result } +} + +function Apply-Mutation { + param([Parameter(Mandatory = $true)][string]$CaseRepository, [Parameter(Mandatory = $true)][string]$Name) + if ($Name -eq 'baseline') { return } + $manifestBytes = Get-IndexBytes -CaseRepository $CaseRepository -Path $manifestPath + $manifestText = $utf8Strict.GetString($manifestBytes) + $manifest = ConvertFrom-Bytes $manifestBytes + + switch ($Name) { + 'unknown_manifest_key' { + $manifest | Add-Member NoteProperty checker_unknown 'reject' + Set-ManifestObject -CaseRepository $CaseRepository -Manifest $manifest + } + 'unknown_inventory_key' { + $inventory = ConvertFrom-Bytes (Get-IndexBytes -CaseRepository $CaseRepository -Path $inventoryPath) + $inventory | Add-Member NoteProperty checker_unknown 'reject' + Set-ArtifactObject -CaseRepository $CaseRepository -Path $inventoryPath -Value $inventory + } + 'inventory_schema_99' { + $inventory = ConvertFrom-Bytes (Get-IndexBytes -CaseRepository $CaseRepository -Path $inventoryPath) + $inventory.schema_version = 99 + Set-ArtifactObject -CaseRepository $CaseRepository -Path $inventoryPath -Value $inventory + } + 'stale_adversarial_proof' { + $proof = ConvertFrom-Bytes (Get-IndexBytes -CaseRepository $CaseRepository -Path $adversarialProofPath) + $proof.cases = @($proof.cases[0..($proof.cases.Count - 2)]) + Set-ArtifactObject -CaseRepository $CaseRepository -Path $adversarialProofPath -Value $proof + } + 'stale_verifier_proof' { + $proof = ConvertFrom-Bytes (Get-IndexBytes -CaseRepository $CaseRepository -Path $verifierProofPath) + $proof.changed_paths = [int64]$proof.changed_paths - 1 + Set-ArtifactObject -CaseRepository $CaseRepository -Path $verifierProofPath -Value $proof + } + 'case_variant_manifest_status' { + $bytes = $utf8NoBom.GetBytes((Replace-Once -Text $manifestText -Old '"status": "READY_FOR_RECHECK_EVIDENCE_R4"' -New '"Status": "READY_FOR_RECHECK_EVIDENCE_R4"')) + Set-ManifestBytes -CaseRepository $CaseRepository -Bytes $bytes + } + 'manifest_schema_string' { + $bytes = $utf8NoBom.GetBytes((Replace-Once -Text $manifestText -Old '"schema_version": 4' -New '"schema_version": "4"')) + Set-ManifestBytes -CaseRepository $CaseRepository -Bytes $bytes + } + 'inventory_entries_scalar' { + $inventory = ConvertFrom-Bytes (Get-IndexBytes -CaseRepository $CaseRepository -Path $inventoryPath) + $inventory.entries = $inventory.entries[0] + Set-ArtifactObject -CaseRepository $CaseRepository -Path $inventoryPath -Value $inventory + } + 'adversarial_cases_scalar' { + $proof = ConvertFrom-Bytes (Get-IndexBytes -CaseRepository $CaseRepository -Path $adversarialProofPath) + $proof.cases = $proof.cases[0] + Set-ArtifactObject -CaseRepository $CaseRepository -Path $adversarialProofPath -Value $proof + } + 'manifest_entry_count_mismatch' { + $manifest.entry_count = [int64]$manifest.entry_count + 1 + Set-ManifestObject -CaseRepository $CaseRepository -Manifest $manifest + } + 'inventory_actual_count_mismatch' { + $inventory = ConvertFrom-Bytes (Get-IndexBytes -CaseRepository $CaseRepository -Path $inventoryPath) + $inventory.actual_call_sites = [int64]$inventory.actual_call_sites + 1 + Set-ArtifactObject -CaseRepository $CaseRepository -Path $inventoryPath -Value $inventory + } + 'verifier_checksum_count_mismatch' { + $proof = ConvertFrom-Bytes (Get-IndexBytes -CaseRepository $CaseRepository -Path $verifierProofPath) + $proof.checksum_entries = [int64]$proof.checksum_entries + 1 + Set-ArtifactObject -CaseRepository $CaseRepository -Path $verifierProofPath -Value $proof + } + 'manifest_entry_digest_mismatch' { + $manifest.entries[0].sha256 = ('0' * 64) + Set-ManifestObject -CaseRepository $CaseRepository -Manifest $manifest -RebuildAllSums + } + 'outer_checksum_digest_mismatch' { + $sums = $utf8Strict.GetString((Get-IndexBytes -CaseRepository $CaseRepository -Path $sumsPath)) + $lines = @($sums -split "`n" | Where-Object { $_ -ne '' }) + for ($index = 0; $index -lt $lines.Count; $index++) { + if (-not $lines[$index].StartsWith('#')) { $lines[$index] = ('0' * 64) + $lines[$index].Substring(64); break } + } + Set-IndexBytes -CaseRepository $CaseRepository -Path $sumsPath -Bytes $utf8NoBom.GetBytes(($lines -join "`n") + "`n") | Out-Null + } + 'inventory_line_mismatch' { + $inventory = ConvertFrom-Bytes (Get-IndexBytes -CaseRepository $CaseRepository -Path $inventoryPath) + $inventory.entries[0].lines[0] = [int64]$inventory.entries[0].lines[0] + 1 + Set-ArtifactObject -CaseRepository $CaseRepository -Path $inventoryPath -Value $inventory + } + 'inventory_case_duplicate_path' { + $inventory = ConvertFrom-Bytes (Get-IndexBytes -CaseRepository $CaseRepository -Path $inventoryPath) + $duplicate = (($inventory.entries[0] | ConvertTo-Json -Depth 10) | ConvertFrom-Json) + $duplicate.path = $duplicate.path.Substring(0, 1).ToUpperInvariant() + $duplicate.path.Substring(1) + $inventory.entries = @($inventory.entries) + @($duplicate) + Set-ArtifactObject -CaseRepository $CaseRepository -Path $inventoryPath -Value $inventory + } + 'manifest_path_traversal' { + $manifest.entries[0].path = '../checker-escape' + Set-ManifestObject -CaseRepository $CaseRepository -Manifest $manifest -RebuildAllSums + } + 'foreign_index_path' { + $readme = Get-IndexBytes -CaseRepository $CaseRepository -Path 'README.md' + Set-IndexBytes -CaseRepository $CaseRepository -Path 'README.md' -Bytes ($readme + $utf8NoBom.GetBytes("`nchecker foreign index mutation`n")) | Out-Null + } + 'incomplete_checksum' { + $sums = $utf8Strict.GetString((Get-IndexBytes -CaseRepository $CaseRepository -Path $sumsPath)) + $lines = [Collections.Generic.List[string]]::new() + foreach ($line in @($sums -split "`n" | Where-Object { $_ -ne '' })) { $lines.Add($line) } + $dataIndex = 3 + $lines.RemoveAt($dataIndex) + Set-IndexBytes -CaseRepository $CaseRepository -Path $sumsPath -Bytes $utf8NoBom.GetBytes(($lines -join "`n") + "`n") | Out-Null + } + 'unknown_inventory_entry_key' { + $inventory = ConvertFrom-Bytes (Get-IndexBytes -CaseRepository $CaseRepository -Path $inventoryPath) + $inventory.entries[0] | Add-Member NoteProperty checker_unknown 'reject' + Set-ArtifactObject -CaseRepository $CaseRepository -Path $inventoryPath -Value $inventory + } + 'duplicate_json_property' { + $duplicate = '"schema_version": 4,' + "`n " + '"schema_version": 4,' + $bytes = $utf8NoBom.GetBytes((Replace-Once -Text $manifestText -Old '"schema_version": 4,' -New $duplicate)) + Set-ManifestBytes -CaseRepository $CaseRepository -Bytes $bytes + } + 'manifest_inventory_path_case' { + $changedCase = $manifest.inventory.path.Replace('.agent/', '.Agent/') + if ($changedCase -ceq $manifest.inventory.path) { throw 'inventory path case fixture did not change bytes' } + $manifest.inventory.path = $changedCase + Set-ManifestObject -CaseRepository $CaseRepository -Manifest $manifest + } + 'verifier_failures_nonempty' { + $proof = ConvertFrom-Bytes (Get-IndexBytes -CaseRepository $CaseRepository -Path $verifierProofPath) + $proof.failures = @('fabricated clean proof') + Set-ArtifactObject -CaseRepository $CaseRepository -Path $verifierProofPath -Value $proof + } + 'adversarial_case_pass_false' { + $proof = ConvertFrom-Bytes (Get-IndexBytes -CaseRepository $CaseRepository -Path $adversarialProofPath) + $proof.cases[1].pass = $false + Set-ArtifactObject -CaseRepository $CaseRepository -Path $adversarialProofPath -Value $proof + } + 'adversarial_observed_failures_scalar' { + $proof = ConvertFrom-Bytes (Get-IndexBytes -CaseRepository $CaseRepository -Path $adversarialProofPath) + $proof.cases[1].observed_failures = 'not-an-array' + Set-ArtifactObject -CaseRepository $CaseRepository -Path $adversarialProofPath -Value $proof + } + 'product_blob_mutation' { + $bytes = Get-IndexBytes -CaseRepository $CaseRepository -Path $productBlobPath + Set-IndexBytes -CaseRepository $CaseRepository -Path $productBlobPath -Bytes ($bytes + $utf8NoBom.GetBytes("`n// checker mutation`n")) | Out-Null + } + 'checksum_unbound_extra_path' { + $readme = Get-IndexBytes -CaseRepository $CaseRepository -Path 'README.md' + Write-SumsFromManifest -CaseRepository $CaseRepository -Manifest $manifest -ManifestBytes $manifestBytes -ExtraPaths @{ 'README.md' = (Get-Hash -Bytes $readme) } + } + default { throw "unknown checker case: $Name" } + } +} + +$specs = @( + @('baseline', $false, ''), + @('unknown_manifest_key', $true, 'manifest has unknown JSON property'), + @('unknown_inventory_key', $true, 'inventory has unknown JSON property'), + @('inventory_schema_99', $true, 'inventory schema_version must be 1'), + @('stale_adversarial_proof', $true, 'adversarial proof case count mismatch'), + @('stale_verifier_proof', $true, 'verifier proof changed_paths mismatch'), + @('case_variant_manifest_status', $true, 'manifest has unknown JSON property'), + @('manifest_schema_string', $true, 'manifest.schema_version must be JSON number'), + @('inventory_entries_scalar', $true, 'inventory.entries must be JSON array'), + @('adversarial_cases_scalar', $true, 'adversarial proof.cases must be JSON array'), + @('manifest_entry_count_mismatch', $true, 'manifest entry_count mismatch'), + @('inventory_actual_count_mismatch', $true, 'inventory total mismatch'), + @('verifier_checksum_count_mismatch', $true, 'verifier proof checksum_entries mismatch'), + @('manifest_entry_digest_mismatch', $true, 'manifest SHA-256 mismatch'), + @('outer_checksum_digest_mismatch', $true, 'outer checksum mismatch'), + @('inventory_line_mismatch', $true, 'inventory site list mismatch'), + @('inventory_case_duplicate_path', $true, 'duplicate inventory path'), + @('manifest_path_traversal', $true, 'manifest entry unreadable'), + @('foreign_index_path', $true, 'evidence revision changes product/test paths'), + @('incomplete_checksum', $true, 'outer checksum missing manifest-bound path'), + @('unknown_inventory_entry_key', $true, 'inventory.entries[0] has unknown JSON property'), + @('duplicate_json_property', $true, 'duplicate JSON property'), + @('manifest_inventory_path_case', $true, 'manifest inventory contract mismatch'), + @('verifier_failures_nonempty', $true, 'verifier proof failures must be an empty JSON array'), + @('adversarial_case_pass_false', $true, 'adversarial proof case result mismatch'), + @('adversarial_observed_failures_scalar', $true, 'observed_failures must be JSON array'), + @('product_blob_mutation', $true, 'product test blob differs from accepted product candidate'), + @('checksum_unbound_extra_path', $true, 'outer checksum contains unbound extra path') +) + +$results = [Collections.Generic.List[object]]::new() +$fatal = $null +$cleanupError = $null +try { + $script:makerTree = Invoke-GitText -WorkingDirectory $resolvedRepository -Arguments @('rev-parse', "$maker^{tree}") + $objectsText = Invoke-GitText -WorkingDirectory $resolvedRepository -Arguments @('rev-parse', '--git-path', 'objects') + $script:sourceObjects = if ([IO.Path]::IsPathRooted($objectsText)) { + [IO.Path]::GetFullPath($objectsText) + } else { + [IO.Path]::GetFullPath((Join-Path $resolvedRepository $objectsText)) + } + if (-not [IO.Directory]::Exists($script:sourceObjects)) { throw "source objects missing: $($script:sourceObjects)" } + + for ($index = 0; $index -lt $specs.Count; $index++) { + $name = [string]$specs[$index][0] + $expectReject = [bool]$specs[$index][1] + $expectedFailure = [string]$specs[$index][2] + $caseRepository = New-CaseRepository -Number ($index + 1) -Name $name + Apply-Mutation -CaseRepository $caseRepository -Name $name + $invocation = Invoke-Verifier -CaseRepository $caseRepository + $failures = @($invocation.result.failures) + $exitMatches = if ($expectReject) { $invocation.exit -ne 0 } else { $invocation.exit -eq 0 } + $statusMatches = [string]$invocation.result.status -ceq $(if ($expectReject) { 'FAIL' } else { 'PASS' }) + $diagnosticMatches = if ($expectReject) { + @($failures | Where-Object { ([string]$_).Contains($expectedFailure, [StringComparison]::Ordinal) }).Count -gt 0 + } else { + $failures.Count -eq 0 + } + $results.Add([ordered]@{ + name = $name + expected = if ($expectReject) { 'REJECT' } else { 'PASS' } + expected_failure = $expectedFailure + actual_exit = [int64]$invocation.exit + actual_status = [string]$invocation.result.status + failures = [object[]]$failures + pass = $exitMatches -and $statusMatches -and $diagnosticMatches + }) + } +} +catch { + $fatal = $_.Exception.Message +} +finally { + try { + $resolvedTempRoot = [IO.Path]::GetFullPath($tempRoot) + if (-not $resolvedTempRoot.StartsWith($tempBase, [StringComparison]::OrdinalIgnoreCase) -or + -not [IO.Path]::GetFileName($resolvedTempRoot).StartsWith($tempPrefix, [StringComparison]::Ordinal)) { + throw "unsafe cleanup target: $resolvedTempRoot" + } + if ([IO.Directory]::Exists($resolvedTempRoot)) { + Get-ChildItem -LiteralPath $resolvedTempRoot -Recurse -Force | ForEach-Object { $_.Attributes = [IO.FileAttributes]::Normal } + [IO.Directory]::Delete($resolvedTempRoot, $true) + } + } + catch { $cleanupError = $_.Exception.Message } +} + +$tempRemoved = -not [IO.Directory]::Exists($tempRoot) +$allPass = $null -eq $fatal -and $null -eq $cleanupError -and $tempRemoved -and + $results.Count -eq $specs.Count -and @($results | Where-Object { -not $_.pass }).Count -eq 0 +$proof = [ordered]@{ + schema_version = 1 + target = $maker + target_tree = $script:makerTree + method = 'checker-owned fresh repository and alternate Git index per case' + status = if ($allPass) { 'PASS' } else { 'FAIL' } + case_count = [int64]$results.Count + cases = [object[]]$results + fatal_error = $fatal + temp_root_removed = $tempRemoved + cleanup_error = $cleanupError +} +$json = (($proof | ConvertTo-Json -Depth 30) -replace "`r`n", "`n") + "`n" +$resolvedOutput = [IO.Path]::GetFullPath($OutputPath) +[IO.Directory]::CreateDirectory([IO.Path]::GetDirectoryName($resolvedOutput)) | Out-Null +[IO.File]::WriteAllText($resolvedOutput, $json, $utf8NoBom) +$json +if (-not $allPass) { exit 1 } +exit 0 diff --git a/.agent/reviews/db-test-pool-hygiene-r4-fresh-checker/builder-determinism.json b/.agent/reviews/db-test-pool-hygiene-r4-fresh-checker/builder-determinism.json new file mode 100644 index 00000000..785e4dae --- /dev/null +++ b/.agent/reviews/db-test-pool-hygiene-r4-fresh-checker/builder-determinism.json @@ -0,0 +1,32 @@ +{ + "schema_version": 1, + "target": "ce6a40d72fc39932ccbc4b949647f321b91f70c3", + "target_tree": "20a69d7a83e0100de7e3e73e670fe02feadada2d", + "status": "PASS", + "checks": { + "seed_status_run1": true, + "seed_status_run2": true, + "seed_adversarial_byte_deterministic": true, + "seed_verifier_byte_deterministic": true, + "seed_manifest_unchanged": true, + "seed_checksum_unchanged": true, + "build_status_run1": true, + "build_status_run2": true, + "build_manifest_matches_committed": true, + "build_checksum_matches_committed": true, + "build_manifest_byte_deterministic": true, + "build_checksum_byte_deterministic": true + }, + "failed_checks": [], + "hashes": { + "seed_adversarial": "f55c3d9fa7623a2a6a19d3af86e93fd0a14b3c885e3a2600f0d30c428ab5a2a2", + "seed_verifier": "839e1bcb76f4eddc118eeeee47c65385513f97a4b615d25654ad129bd935ce2f", + "committed_manifest": "b0b63988722207186805712b1f32d80ee81afaacffa57e54144d5bd82c5dcb6c", + "committed_checksum": "e8e2bcc519b9488b0b84628e62931175a2e210cac3ca57b2e2e999aa07538043", + "built_manifest": "b0b63988722207186805712b1f32d80ee81afaacffa57e54144d5bd82c5dcb6c", + "built_checksum": "e8e2bcc519b9488b0b84628e62931175a2e210cac3ca57b2e2e999aa07538043" + }, + "fatal_error": null, + "temp_root_removed": true, + "cleanup_error": null +} diff --git a/.agent/reviews/db-test-pool-hygiene-r4-fresh-checker/gates.json b/.agent/reviews/db-test-pool-hygiene-r4-fresh-checker/gates.json new file mode 100644 index 00000000..317d6627 --- /dev/null +++ b/.agent/reviews/db-test-pool-hygiene-r4-fresh-checker/gates.json @@ -0,0 +1,163 @@ +{ + "schema_version": 1, + "status": "PASS", + "checked_utc": "2026-07-11T03:47:52.1012415Z", + "target": "ce6a40d72fc39932ccbc4b949647f321b91f70c3", + "parent": "331b5b195a967e7f27dca94038a3480c9afcc84f", + "tree": "20a69d7a83e0100de7e3e73e670fe02feadada2d", + "boundary": { + "maker_path_count": 13, + "maker_path_list_ordinal_lf_sha256": "8385cf487753e79ef3419a66e58a0bac1592bdaca2fc1d4d9022a0946eeb8f5a", + "maker_paths_all_regular_blobs": true, + "maker_boundary_clean": true, + "scope": "evidence-only" + }, + "gates": [ + { + "name": "verifier_git_revision_head", + "status": "PASS", + "exit_code": 0, + "changed_paths": 21, + "directly_bound_changed_paths": 19, + "manifest_entries": 35, + "checksum_entries": 36, + "inventory_call_sites": 83, + "inventory_files": 8 + }, + { + "name": "verifier_git_index", + "status": "PASS", + "exit_code": 0, + "changed_paths": 21, + "directly_bound_changed_paths": 19, + "manifest_entries": 35, + "checksum_entries": 36, + "inventory_call_sites": 83, + "inventory_files": 8 + }, + { + "name": "maker_adversarial_replay", + "status": "PASS", + "exit_code": 0, + "cases": 35, + "failed_cases": [], + "case_order_sha256": "0fcc7c53259982de592100e249bc323efd4406cc9b7905627afa963b771099f8", + "temp_root_removed": true, + "cleanup": "PASS" + }, + { + "name": "checker_independent_alternate_indexes", + "status": "PASS", + "exit_code": 0, + "cases": 28, + "failed_cases": [], + "exact_r3_false_green_cases_rejected": [ + "unknown_manifest_key", + "unknown_inventory_key", + "inventory_schema_99", + "stale_adversarial_proof", + "stale_verifier_proof" + ], + "additional_classes": [ + "key_case", + "schema", + "type", + "array", + "count", + "digest", + "inventory", + "path_traversal", + "foreign_index", + "incomplete_checksum", + "unbound_checksum", + "product_blob_mutation" + ], + "temp_root_removed": true, + "cleanup": "PASS" + }, + { + "name": "builder_and_seed_determinism", + "status": "PASS", + "checks": 12, + "failed_checks": [], + "seed_adversarial_sha256": "f55c3d9fa7623a2a6a19d3af86e93fd0a14b3c885e3a2600f0d30c428ab5a2a2", + "seed_verifier_sha256": "839e1bcb76f4eddc118eeeee47c65385513f97a4b615d25654ad129bd935ce2f", + "committed_and_built_manifest_sha256": "b0b63988722207186805712b1f32d80ee81afaacffa57e54144d5bd82c5dcb6c", + "committed_and_built_checksum_sha256": "e8e2bcc519b9488b0b84628e62931175a2e210cac3ca57b2e2e999aa07538043", + "temp_root_removed": true + }, + { + "name": "product_blob_identity", + "status": "PASS", + "git_blob_oid": "7337f1bd8da4fb315de842eea2e3cce5476250a3", + "bytes": 47016, + "sha256": "62260c1a2e0705b065295322dd23fcf9b17fd47cb5ebc64134630788e2d23e09" + }, + { + "name": "powershell_parse", + "status": "PASS", + "scripts": 7, + "parse_errors": 0 + }, + { + "name": "git_diff_check", + "status": "PASS", + "exit_code": 0 + }, + { + "name": "gitleaks_exact_maker_commit", + "status": "PASS", + "version": "8.30.0", + "commits_scanned": 1, + "leaks": 0, + "exit_code": 0 + }, + { + "name": "go_build_all", + "status": "PASS", + "exit_code": 0 + }, + { + "name": "go_vet_all", + "status": "PASS", + "exit_code": 0 + }, + { + "name": "focused_database_regression_repeat", + "status": "PASS", + "database": "engram_chk_dbph_r4_adb0a21686af", + "command": "go test -p=1 ./internal/db/gorm -run ^TestOpenCandidateTestDB_SubtestOwnerClosesPoolWithoutPrematureClose$ -count=5 -v", + "exit_code": 0, + "activity_after_process": 0 + }, + { + "name": "focused_database_regression_race", + "status": "PASS", + "database": "engram_chk_dbph_r4_adb0a21686af", + "command": "go test -race -p=1 ./internal/db/gorm -run ^TestOpenCandidateTestDB_SubtestOwnerClosesPoolWithoutPrematureClose$ -count=1 -v", + "exit_code": 0, + "activity_after_process": 0 + } + ], + "residue": { + "checker_database_matches": [], + "checker_database_sessions": 0, + "adversarial_temp_matches": [], + "independent_temp_matches": [], + "builder_temp_matches": [] + }, + "checker_artifacts": { + "Invoke-IndependentAttacks.ps1": "4b6e33b0a847c98534b24053e4fc319fc7d6dab37199021c7ebf212f243294f4", + "independent-attacks.json": "d88fede0b711ef970f68cb435b37b9de3953fbaa97ca533f69c6a9f96f9d0463", + "Invoke-BuilderDeterminism.ps1": "9f73e80938982805b7da9d650b55a9be8b5a8008251905e53183a77b7dda4277", + "builder-determinism.json": "fbab16a74143ac703394b24023ad77aeda3b670c0866564665751a0baf36bde7" + }, + "execution_corrections": [ + "The first checker case-variant fixture uppercased a leading dot and made no mutation; the fixture was corrected and the complete 28-case batch reran from zero to PASS.", + "The first database command interpolated $db?sslmode incorrectly; that unique database was dropped with zero database/activity residue, and the complete runtime gate reran on a new unique database to PASS." + ], + "non_blocking_concerns": [ + "A fresh database migration emits pre-existing non-fatal legacy-index and unavailable-vectorscale warnings; the focused pool-ownership invariant still passes repeatedly and under the race detector.", + "The full 35-case maker harness and 28-case independent harness are deliberately expensive because each case starts a fresh repository and verifier process." + ] +} diff --git a/.agent/reviews/db-test-pool-hygiene-r4-fresh-checker/independent-attacks.json b/.agent/reviews/db-test-pool-hygiene-r4-fresh-checker/independent-attacks.json new file mode 100644 index 00000000..a03373ed --- /dev/null +++ b/.agent/reviews/db-test-pool-hygiene-r4-fresh-checker/independent-attacks.json @@ -0,0 +1,347 @@ +{ + "schema_version": 1, + "target": "ce6a40d72fc39932ccbc4b949647f321b91f70c3", + "target_tree": "20a69d7a83e0100de7e3e73e670fe02feadada2d", + "method": "checker-owned fresh repository and alternate Git index per case", + "status": "PASS", + "case_count": 28, + "cases": [ + { + "name": "baseline", + "expected": "PASS", + "expected_failure": "", + "actual_exit": 0, + "actual_status": "PASS", + "failures": [], + "pass": true + }, + { + "name": "unknown_manifest_key", + "expected": "REJECT", + "expected_failure": "manifest has unknown JSON property", + "actual_exit": 1, + "actual_status": "FAIL", + "failures": [ + "manifest has unknown JSON property: checker_unknown" + ], + "pass": true + }, + { + "name": "unknown_inventory_key", + "expected": "REJECT", + "expected_failure": "inventory has unknown JSON property", + "actual_exit": 1, + "actual_status": "FAIL", + "failures": [ + "inventory has unknown JSON property: checker_unknown" + ], + "pass": true + }, + { + "name": "inventory_schema_99", + "expected": "REJECT", + "expected_failure": "inventory schema_version must be 1", + "actual_exit": 1, + "actual_status": "FAIL", + "failures": [ + "inventory schema_version must be 1" + ], + "pass": true + }, + { + "name": "stale_adversarial_proof", + "expected": "REJECT", + "expected_failure": "adversarial proof case count mismatch", + "actual_exit": 1, + "actual_status": "FAIL", + "failures": [ + "adversarial proof case count mismatch: declared 34, required 35" + ], + "pass": true + }, + { + "name": "stale_verifier_proof", + "expected": "REJECT", + "expected_failure": "verifier proof changed_paths mismatch", + "actual_exit": 1, + "actual_status": "FAIL", + "failures": [ + "verifier proof changed_paths mismatch: declared 20, actual 21" + ], + "pass": true + }, + { + "name": "case_variant_manifest_status", + "expected": "REJECT", + "expected_failure": "manifest has unknown JSON property", + "actual_exit": 1, + "actual_status": "FAIL", + "failures": [ + "manifest has unknown JSON property: Status", + "manifest.status is required" + ], + "pass": true + }, + { + "name": "manifest_schema_string", + "expected": "REJECT", + "expected_failure": "manifest.schema_version must be JSON number", + "actual_exit": 1, + "actual_status": "FAIL", + "failures": [ + "manifest.schema_version must be JSON number, got string" + ], + "pass": true + }, + { + "name": "inventory_entries_scalar", + "expected": "REJECT", + "expected_failure": "inventory.entries must be JSON array", + "actual_exit": 1, + "actual_status": "FAIL", + "failures": [ + "inventory.entries must be JSON array, got object", + "inventory missing path: internal/db/gorm/rule_arbiter_store_test.go", + "inventory missing path: internal/db/gorm/rule_governance_rg3_store_test.go", + "inventory missing path: internal/db/gorm/rule_governance_store_test.go", + "inventory missing path: internal/db/gorm/rule_injection_event_store_test.go", + "inventory missing path: internal/db/gorm/state_store_test.go", + "inventory missing path: internal/db/gorm/temporal_truth_store_migration_test.go", + "inventory missing path: internal/db/gorm/temporal_truth_store_test.go" + ], + "pass": true + }, + { + "name": "adversarial_cases_scalar", + "expected": "REJECT", + "expected_failure": "adversarial proof.cases must be JSON array", + "actual_exit": 1, + "actual_status": "FAIL", + "failures": [ + "adversarial proof.cases must be JSON array, got object", + "adversarial proof case count mismatch: declared 1, required 35" + ], + "pass": true + }, + { + "name": "manifest_entry_count_mismatch", + "expected": "REJECT", + "expected_failure": "manifest entry_count mismatch", + "actual_exit": 1, + "actual_status": "FAIL", + "failures": [ + "manifest entry_count mismatch" + ], + "pass": true + }, + { + "name": "inventory_actual_count_mismatch", + "expected": "REJECT", + "expected_failure": "inventory total mismatch", + "actual_exit": 1, + "actual_status": "FAIL", + "failures": [ + "inventory total mismatch: declared 84/8, actual 83/8" + ], + "pass": true + }, + { + "name": "verifier_checksum_count_mismatch", + "expected": "REJECT", + "expected_failure": "verifier proof checksum_entries mismatch", + "actual_exit": 1, + "actual_status": "FAIL", + "failures": [ + "verifier proof checksum_entries mismatch: declared 37, actual 36" + ], + "pass": true + }, + { + "name": "manifest_entry_digest_mismatch", + "expected": "REJECT", + "expected_failure": "manifest SHA-256 mismatch", + "actual_exit": 1, + "actual_status": "FAIL", + "failures": [ + "manifest SHA-256 mismatch: .agent/reports/2026-07-10-db-test-pool-hygiene-evidence-revision-maker.md", + "outer checksum mismatch: .agent/reports/2026-07-10-db-test-pool-hygiene-evidence-revision-maker.md" + ], + "pass": true + }, + { + "name": "outer_checksum_digest_mismatch", + "expected": "REJECT", + "expected_failure": "outer checksum mismatch", + "actual_exit": 1, + "actual_status": "FAIL", + "failures": [ + "outer checksum mismatch: .agent/reports/2026-07-10-db-test-pool-hygiene-evidence-revision-maker.md" + ], + "pass": true + }, + { + "name": "inventory_line_mismatch", + "expected": "REJECT", + "expected_failure": "inventory site list mismatch", + "actual_exit": 1, + "actual_status": "FAIL", + "failures": [ + "inventory site list mismatch: internal/db/gorm/candidate_store_test.go" + ], + "pass": true + }, + { + "name": "inventory_case_duplicate_path", + "expected": "REJECT", + "expected_failure": "duplicate inventory path", + "actual_exit": 1, + "actual_status": "FAIL", + "failures": [ + "duplicate inventory path: Internal/db/gorm/candidate_store_test.go", + "inventory paths are not canonical ordinal order: internal/db/gorm/temporal_truth_store_test.go before Internal/db/gorm/candidate_store_test.go" + ], + "pass": true + }, + { + "name": "manifest_path_traversal", + "expected": "REJECT", + "expected_failure": "manifest entry unreadable", + "actual_exit": 1, + "actual_status": "FAIL", + "failures": [ + "manifest entry unreadable: ../checker-escape: git rev-parse :../checker-escape failed: fatal: '../checker-escape' is outside repository at 'C:/Users/btf/AppData/Local/Temp/engram-dbph-r4-independent-116c3d38753a4f259efc72d5ee8b4f9c/case-18-manifest_path_traversal'\n", + "manifest missing changed path: .agent/reports/2026-07-10-db-test-pool-hygiene-evidence-revision-maker.md", + "checksum path unreadable: ../checker-escape: git show :../checker-escape failed: fatal: '../checker-escape' is outside repository at 'C:/Users/btf/AppData/Local/Temp/engram-dbph-r4-independent-116c3d38753a4f259efc72d5ee8b4f9c/case-18-manifest_path_traversal'\n" + ], + "pass": true + }, + { + "name": "foreign_index_path", + "expected": "REJECT", + "expected_failure": "evidence revision changes product/test paths", + "actual_exit": 1, + "actual_status": "FAIL", + "failures": [ + "changed path count mismatch: declared 21, actual 22", + "evidence revision changes product/test paths: README.md", + "directly_manifest_bound_count mismatch", + "manifest missing changed path: README.md", + "verifier proof changed_paths mismatch: declared 21, actual 22", + "verifier proof directly_bound_changed_paths mismatch: declared 19, actual 20" + ], + "pass": true + }, + { + "name": "incomplete_checksum", + "expected": "REJECT", + "expected_failure": "outer checksum missing manifest-bound path", + "actual_exit": 1, + "actual_status": "FAIL", + "failures": [ + "outer checksum missing manifest-bound path: .agent/reports/2026-07-10-db-test-pool-hygiene-evidence-revision-maker.md", + "verifier proof checksum_entries mismatch: declared 36, actual 35" + ], + "pass": true + }, + { + "name": "unknown_inventory_entry_key", + "expected": "REJECT", + "expected_failure": "inventory.entries[0] has unknown JSON property", + "actual_exit": 1, + "actual_status": "FAIL", + "failures": [ + "inventory.entries[0] has unknown JSON property: checker_unknown" + ], + "pass": true + }, + { + "name": "duplicate_json_property", + "expected": "REJECT", + "expected_failure": "duplicate JSON property", + "actual_exit": 1, + "actual_status": "FAIL", + "failures": [ + "duplicate JSON property: manifest.schema_version" + ], + "pass": true + }, + { + "name": "manifest_inventory_path_case", + "expected": "REJECT", + "expected_failure": "manifest inventory contract mismatch", + "actual_exit": 1, + "actual_status": "FAIL", + "failures": [ + "manifest inventory contract mismatch" + ], + "pass": true + }, + { + "name": "verifier_failures_nonempty", + "expected": "REJECT", + "expected_failure": "verifier proof failures must be an empty JSON array", + "actual_exit": 1, + "actual_status": "FAIL", + "failures": [ + "verifier proof failures must be an empty JSON array" + ], + "pass": true + }, + { + "name": "adversarial_case_pass_false", + "expected": "REJECT", + "expected_failure": "adversarial proof case result mismatch", + "actual_exit": 1, + "actual_status": "FAIL", + "failures": [ + "adversarial proof case result mismatch: missing_changed_path" + ], + "pass": true + }, + { + "name": "adversarial_observed_failures_scalar", + "expected": "REJECT", + "expected_failure": "observed_failures must be JSON array", + "actual_exit": 1, + "actual_status": "FAIL", + "failures": [ + "adversarial proof.cases[1].observed_failures must be JSON array, got string", + "adversarial proof case missing required diagnostic: missing_changed_path" + ], + "pass": true + }, + { + "name": "product_blob_mutation", + "expected": "REJECT", + "expected_failure": "product test blob differs from accepted product candidate", + "actual_exit": 1, + "actual_status": "FAIL", + "failures": [ + "changed path count mismatch: declared 21, actual 22", + "evidence revision changes product/test paths: internal/db/gorm/candidate_store_test.go", + "manifest path/blob binding mismatch: internal/db/gorm/candidate_store_test.go", + "directly_manifest_bound_count mismatch", + "product test blob differs from accepted product candidate", + "outer checksum mismatch: internal/db/gorm/candidate_store_test.go", + "verifier proof changed_paths mismatch: declared 21, actual 22", + "verifier proof directly_bound_changed_paths mismatch: declared 19, actual 20" + ], + "pass": true + }, + { + "name": "checksum_unbound_extra_path", + "expected": "REJECT", + "expected_failure": "outer checksum contains unbound extra path", + "actual_exit": 1, + "actual_status": "FAIL", + "failures": [ + "outer checksum contains unbound extra path: README.md", + "verifier proof checksum_entries mismatch: declared 36, actual 37" + ], + "pass": true + } + ], + "fatal_error": null, + "temp_root_removed": true, + "cleanup_error": null +} diff --git a/.agent/reviews/db-test-pool-hygiene-r4-fresh-checker/report.md b/.agent/reviews/db-test-pool-hygiene-r4-fresh-checker/report.md new file mode 100644 index 00000000..4cd06eb8 --- /dev/null +++ b/.agent/reviews/db-test-pool-hygiene-r4-fresh-checker/report.md @@ -0,0 +1,103 @@ +# DB-TEST-POOL-HYGIENE R4 — независимый checker + +Вердикт: **ACCEPT** + +`READY_FOR_INTEGRATION=true` для evidence-only commit +`ce6a40d72fc39932ccbc4b949647f321b91f70c3`, с обязательным последующим +root/PM post-run review перед синтезом. + +CRITICAL/HIGH findings: **0**. + +## Точная граница + +- Target: `ce6a40d72fc39932ccbc4b949647f321b91f70c3` +- Parent: `331b5b195a967e7f27dca94038a3480c9afcc84f` +- Tree: `20a69d7a83e0100de7e3e73e670fe02feadada2d` +- Maker delta: ровно 13 путей, все обычные Git blobs mode `100644` +- Ordinal + terminal-LF SHA-256 списка путей: + `8385cf487753e79ef3419a66e58a0bac1592bdaca2fc1d4d9022a0946eeb8f5a` +- Maker boundary перед проверкой был чистым. +- Product/test/spec/plan/register/HTML maker не менял; checker меняет только + `.agent/reviews/db-test-pool-hygiene-r4-fresh-checker/**`. + +Product-regression scan: **PASS**. R4 — evidence-only revision, а product blob +`internal/db/gorm/candidate_store_test.go` побайтово совпадает с принятым +candidate: Git OID `7337f1bd8da4fb315de842eea2e3cce5476250a3`, 47 016 bytes, +SHA-256 `62260c1a2e0705b065295322dd23fcf9b17fd47cb5ebc64134630788e2d23e09`. + +## Проверка закрытия R3 findings + +Verifier в `GitRevision HEAD` и `GitIndex` независимо вернул PASS с одинаковой +реальностью: 21 changed path, 19 directly bound, 35 manifest entries, 36 +checksum entries, inventory 83/8. + +Maker harness полностью воспроизведён: 35/35 coherent alternate-index cases +PASS, failed cases отсутствуют, case-order SHA-256 +`0fcc7c53259982de592100e249bc323efd4406cc9b7905627afa963b771099f8`, temp +root удалён. + +Checker-owned harness не вызывает maker harness и строит собственный свежий +repository/index для каждого кейса. Итог: 28/28 PASS. Все пять прежних +false-green классов теперь fail closed с ожидаемым diagnostic: + +1. `unknown_manifest_key` +2. `unknown_inventory_key` +3. `inventory_schema_99` +4. `stale_adversarial_proof` +5. `stale_verifier_proof` + +Соседние атаки также закрыты: case-sensitive keys/paths, schema/type/array/count, +entry и outer digests, inventory lines/duplicates, manifest traversal, foreign +index path, incomplete и unbound checksum, non-empty/false proof objects и +product-blob mutation. + +## Детерминизм и gates + +- Seed дважды дал одинаковые adversarial/verifier proof bytes и не изменил + manifest/checksum. +- Builder дважды воспроизвёл committed manifest + `b0b63988722207186805712b1f32d80ee81afaacffa57e54144d5bd82c5dcb6c` + и checksum + `e8e2bcc519b9488b0b84628e62931175a2e210cac3ca57b2e2e999aa07538043` + побайтово. +- PowerShell parse: 7 scripts, 0 errors. +- `git diff --check`: PASS. +- Gitleaks 8.30.0: 1 exact maker commit, 0 leaks. +- `go build ./...`: PASS. +- `go vet ./...`: PASS. +- Focused DB regression: PASS `count=5`. +- Focused DB regression with race detector: PASS `count=1`. +- После каждого Go-процесса checker DB sessions: 0. +- Финальный checker DB/activity/temp residue: 0/0/0. + +Полные результаты: `gates.json`, `independent-attacks.json` и +`builder-determinism.json` в этой директории. + +## Findings и concerns + +Blocking findings отсутствуют. + +Неблокирующие наблюдения: + +- Fresh-DB migration печатает существующие нефатальные сообщения о legacy + index columns/tables и недоступном `vectorscale`; pool-ownership invariant + при этом проходит пять повторов и race detector. R4 не меняет этот product + path, поэтому это не finding данного evidence-only diff, но шум не скрыт. +- Полные 35- и 28-case harnesses дороги по времени: каждый кейс создаёт свежий + repo/index и отдельный verifier process. Это цена сильной изоляции, не дефект + корректности. + +Checker execution дважды сам себя скорректировал и после каждой коррекции +повторил соответствующий gate целиком: no-op case-variant fixture и неверная +PowerShell-интерполяция DSN. Обе ошибочные временные БД/директории удалены; +финальный residue scan пуст. + +Reusability candidates: none — evaluated; packet-specific verifier evidence. + +## Finish state + +`review-needed`: checker принимает maker commit; следующий владелец — root/PM +post-run review и только затем синтез принятой головы. Checker не выполнял +merge, push, tag или внешнюю мутацию. + +LITE_REVIEW_DONE: ACCEPT From 8923f2ac79dddbd7812dba1b5d6c950653c0a7b1 Mon Sep 17 00:00:00 2001 From: Kirill Turanskiy Date: Sat, 11 Jul 2026 08:08:29 +0300 Subject: [PATCH 054/111] review: accept demolition portability r1 --- .../dbprobe/main.go | 218 ++++++++++++++++++ .../evidence.json | 105 +++++++++ .../loom-linux.cover | 141 +++++++++++ .../loom-windows.cover | 141 +++++++++++ .../report.md | 144 ++++++++++++ 5 files changed, 749 insertions(+) create mode 100644 .agent/reviews/demolition-portability-r1-fresh-checker/dbprobe/main.go create mode 100644 .agent/reviews/demolition-portability-r1-fresh-checker/evidence.json create mode 100644 .agent/reviews/demolition-portability-r1-fresh-checker/loom-linux.cover create mode 100644 .agent/reviews/demolition-portability-r1-fresh-checker/loom-windows.cover create mode 100644 .agent/reviews/demolition-portability-r1-fresh-checker/report.md diff --git a/.agent/reviews/demolition-portability-r1-fresh-checker/dbprobe/main.go b/.agent/reviews/demolition-portability-r1-fresh-checker/dbprobe/main.go new file mode 100644 index 00000000..5439048e --- /dev/null +++ b/.agent/reviews/demolition-portability-r1-fresh-checker/dbprobe/main.go @@ -0,0 +1,218 @@ +package main + +import ( + "context" + "encoding/json" + "errors" + "fmt" + "os" + + "github.com/jackc/pgx/v5/pgconn" + dbgorm "github.com/thebtf/engram/internal/db/gorm" + "github.com/thebtf/engram/internal/graph" + "github.com/thebtf/engram/pkg/models" +) + +const ( + project = "demolition-portability-r1-fresh-checker" + session = "demolition-portability-r1-fresh-checker" +) + +type result struct { + NilCreateMetadata string `json:"nil_create_metadata"` + EmptyCreateMetadata string `json:"empty_create_metadata"` + NilUpdateMetadata string `json:"nil_update_metadata"` + EmptyUpdateMetadata string `json:"empty_update_metadata"` + InvalidCreateRejected bool `json:"invalid_create_rejected"` + InvalidUpdateRejected bool `json:"invalid_update_rejected"` + InvalidUpdatePreserved bool `json:"invalid_update_preserved"` + DBErrorMutatedMetadata string `json:"db_error_mutated_metadata"` + DBErrorObserved bool `json:"db_error_observed"` + ForeignKeySQLState string `json:"foreign_key_sqlstate"` + ForeignKeyConstraint string `json:"foreign_key_constraint"` + RejectedDanglingRows int64 `json:"rejected_dangling_rows"` + ResolveDangling bool `json:"resolve_dangling"` + ResolveSourcePreserved bool `json:"resolve_source_preserved"` + LiveEnumAccepted bool `json:"live_enum_accepted"` + StaleEnumRejected bool `json:"stale_enum_rejected"` + FinalMemoryRows int64 `json:"final_memory_rows"` + FinalNodeRows int64 `json:"final_node_rows"` + FinalEdgeRows int64 `json:"final_edge_rows"` +} + +func must(err error) { + if err != nil { + panic(err) + } +} + +func mustJSONEq(got []byte, want string) string { + var gotValue any + var wantValue any + must(json.Unmarshal(got, &gotValue)) + must(json.Unmarshal([]byte(want), &wantValue)) + if fmt.Sprintf("%#v", gotValue) != fmt.Sprintf("%#v", wantValue) { + panic(fmt.Sprintf("JSON mismatch: got %s want %s", got, want)) + } + return string(got) +} + +func cleanup(ctx context.Context, store *dbgorm.Store) { + must(store.DB.WithContext(ctx).Exec(`DELETE FROM knowledge_edges WHERE source_session_id = ?`, session).Error) + must(store.DB.WithContext(ctx).Exec(`DELETE FROM knowledge_nodes WHERE project = ?`, project).Error) + must(store.DB.WithContext(ctx).Exec(`DELETE FROM memories WHERE project = ?`, project).Error) +} + +func insertMemory(ctx context.Context, store *dbgorm.Store, content string) int64 { + var id int64 + must(store.DB.WithContext(ctx).Raw( + `INSERT INTO memories (project, content) VALUES (?, ?) RETURNING id`, + project, content, + ).Row().Scan(&id)) + return id +} + +func ptr(v int64) *int64 { return &v } + +func main() { + dsn := os.Getenv("DATABASE_DSN") + if dsn == "" { + panic("DATABASE_DSN is required") + } + ctx := context.Background() + store, err := dbgorm.NewStore(dbgorm.Config{DSN: dsn, MaxConns: 2}) + must(err) + cleanup(ctx, store) + nodes := graph.NewNodesStore(store.GetDB()) + out := result{} + + nilNode, err := nodes.Create(ctx, &models.KnowledgeNode{ + NodeType: models.NodeTypeRule, ExternalRef: "nil-create", Project: project, + }) + must(err) + out.NilCreateMetadata = mustJSONEq(nilNode.Metadata, `{}`) + + emptyNode, err := nodes.Create(ctx, &models.KnowledgeNode{ + NodeType: models.NodeTypeRule, ExternalRef: "empty-create", Project: project, Metadata: []byte{}, + }) + must(err) + out.EmptyCreateMetadata = mustJSONEq(emptyNode.Metadata, `{}`) + + nilNode.Metadata = nil + nilNode.ExternalRef = "nil-update" + nilNode, err = nodes.Update(ctx, nilNode) + must(err) + out.NilUpdateMetadata = mustJSONEq(nilNode.Metadata, `{}`) + + emptyNode.Metadata = []byte{} + emptyNode.ExternalRef = "empty-update" + emptyNode, err = nodes.Update(ctx, emptyNode) + must(err) + out.EmptyUpdateMetadata = mustJSONEq(emptyNode.Metadata, `{}`) + + invalidCreate := &models.KnowledgeNode{ + NodeType: models.NodeTypeRule, ExternalRef: "invalid-create", Project: project, Metadata: []byte(`{`), + } + _, err = nodes.Create(ctx, invalidCreate) + if err == nil { + panic("invalid create JSON unexpectedly succeeded") + } + out.InvalidCreateRejected = true + var invalidCreateRows int64 + must(store.DB.WithContext(ctx).Table("knowledge_nodes").Where("project = ? AND external_ref = ?", project, "invalid-create").Count(&invalidCreateRows).Error) + if invalidCreateRows != 0 { + panic(fmt.Sprintf("invalid create left %d rows", invalidCreateRows)) + } + + beforeInvalidUpdate := emptyNode.Metadata + emptyNode.Metadata = []byte(`{`) + _, err = nodes.Update(ctx, emptyNode) + if err == nil { + panic("invalid update JSON unexpectedly succeeded") + } + out.InvalidUpdateRejected = true + reloaded, err := nodes.Get(ctx, emptyNode.ID, true) + must(err) + out.InvalidUpdatePreserved = mustJSONEq(reloaded.Metadata, string(beforeInvalidUpdate)) != "" + + sourceID := insertMemory(ctx, store, "fk-source") + targetID := insertMemory(ctx, store, "fk-target") + must(store.DB.WithContext(ctx).Exec(`DELETE FROM memories WHERE id = ?`, targetID).Error) + insert := store.DB.WithContext(ctx).Exec(` + INSERT INTO knowledge_edges + (source_id, target_id, edge_type, weight, source_session_id, source_type, target_type) + VALUES (?, ?, 'uses', 1.0, ?, 'memory', 'memory') + `, sourceID, targetID, session) + if insert.Error == nil { + panic("dangling edge insert unexpectedly succeeded") + } + var pgErr *pgconn.PgError + if !errors.As(insert.Error, &pgErr) { + panic(fmt.Sprintf("dangling error is not pg error: %T %v", insert.Error, insert.Error)) + } + out.ForeignKeySQLState = pgErr.Code + out.ForeignKeyConstraint = pgErr.ConstraintName + if pgErr.Code != "23503" || pgErr.ConstraintName != "knowledge_edges_target_id_fkey" { + panic(fmt.Sprintf("unexpected FK error: %s %s", pgErr.Code, pgErr.ConstraintName)) + } + must(store.DB.WithContext(ctx).Table("knowledge_edges").Where("source_session_id = ?", session).Count(&out.RejectedDanglingRows).Error) + if out.RejectedDanglingRows != 0 { + panic(fmt.Sprintf("rejected dangling insert left %d rows", out.RejectedDanglingRows)) + } + + secondID := insertMemory(ctx, store, "enum-target") + edges := graph.NewStore(store.GetDB(), nodes) + source, target, err := edges.Resolve(ctx, &graph.Edge{ + SourceID: ptr(sourceID), TargetID: ptr(targetID), SourceType: "memory", TargetType: "memory", + }) + if !errors.Is(err, graph.ErrDangling) || target != nil { + panic(fmt.Sprintf("Resolve did not report dangling target: source=%v target=%v err=%v", source, target, err)) + } + out.ResolveDangling = true + out.ResolveSourcePreserved = source == sourceID + if !out.ResolveSourcePreserved { + panic(fmt.Sprintf("Resolve did not preserve valid source: got %v want %d", source, sourceID)) + } + + _, err = edges.Create(ctx, &graph.Edge{ + SourceID: ptr(sourceID), TargetID: ptr(secondID), EdgeType: graph.EdgeDependsOn, + Weight: 1, SourceSessionID: session, SourceType: "memory", TargetType: "memory", + }) + must(err) + out.LiveEnumAccepted = true + _, err = edges.Create(ctx, &graph.Edge{ + SourceID: ptr(sourceID), TargetID: ptr(secondID), EdgeType: "references", + Weight: 1, SourceSessionID: session, SourceType: "memory", TargetType: "memory", + }) + if err == nil { + panic("stale references edge type unexpectedly succeeded") + } + out.StaleEnumRejected = true + + cleanup(ctx, store) + must(store.DB.WithContext(ctx).Table("memories").Where("project = ?", project).Count(&out.FinalMemoryRows).Error) + must(store.DB.WithContext(ctx).Table("knowledge_nodes").Where("project = ?", project).Count(&out.FinalNodeRows).Error) + must(store.DB.WithContext(ctx).Table("knowledge_edges").Where("source_session_id = ?", session).Count(&out.FinalEdgeRows).Error) + if out.FinalMemoryRows != 0 || out.FinalNodeRows != 0 || out.FinalEdgeRows != 0 { + panic(fmt.Sprintf("fixture residue: memories=%d nodes=%d edges=%d", out.FinalMemoryRows, out.FinalNodeRows, out.FinalEdgeRows)) + } + must(store.Close()) + + closedStore, err := dbgorm.NewStore(dbgorm.Config{DSN: dsn, MaxConns: 1}) + must(err) + closedNodes := graph.NewNodesStore(closedStore.GetDB()) + must(closedStore.Close()) + dbErrorNode := &models.KnowledgeNode{ + NodeType: models.NodeTypeRule, ExternalRef: "closed-db", Project: project, + } + _, err = closedNodes.Create(ctx, dbErrorNode) + if err == nil { + panic("closed DB create unexpectedly succeeded") + } + out.DBErrorObserved = true + out.DBErrorMutatedMetadata = mustJSONEq(dbErrorNode.Metadata, `{}`) + + encoded, err := json.MarshalIndent(out, "", " ") + must(err) + fmt.Println(string(encoded)) +} diff --git a/.agent/reviews/demolition-portability-r1-fresh-checker/evidence.json b/.agent/reviews/demolition-portability-r1-fresh-checker/evidence.json new file mode 100644 index 00000000..b3bc355a --- /dev/null +++ b/.agent/reviews/demolition-portability-r1-fresh-checker/evidence.json @@ -0,0 +1,105 @@ +{ + "schema_version": 1, + "verdict": "ACCEPT", + "maker": { + "head": "2c88fed68e0da04b4686940b81f55579a8260919", + "parent": "0c6269908aa810a2248f2bfaf3fca4f9f5791359", + "tree": "56454175025fe2f599b1ac9a14b5dc8361b76453", + "path_count": 15, + "ordinal_lf_name_digest": "996b153680df782d4247b6ef72120fba36bfc7cf3fb1015385817e1035ce700f", + "ordinal_lf_status_name_digest": "4761d8020de2f6ba49841291eca5996f7ae928559a69228c383f3ede5df71b18", + "all_path_modes": "100644", + "initial_worktree_clean": true + }, + "scope": { + "product_delta": [ + "internal/graph/nodes_store.go", + "internal/handlers/loom/workers.go" + ], + "retrieval_source": "internal/mcp/tools_memory.go", + "retrieval_base_blob": "18ba2c5e4e798567bd4d0f9a0f62ff9fc893f2b2", + "retrieval_head_blob": "18ba2c5e4e798567bd4d0f9a0f62ff9fc893f2b2" + }, + "database": { + "name": "engram_dp_chk_0711_0715_c7e5", + "server_version": "17.10 (Debian 17.10-1.pgdg12+1)", + "graph_repeat3": {"pass_events": 18, "fail_events": 0, "skip_events": 0}, + "t022_repeat3": {"pass_events": 9, "fail_events": 0, "skip_events": 0}, + "probe": { + "nil_and_empty_create_update_normalize_to_object": true, + "invalid_create_rejected": true, + "invalid_update_rejected_and_persisted_value_preserved": true, + "closed_db_error_observed_after_input_metadata_default": true, + "foreign_key_sqlstate": "23503", + "foreign_key_constraint": "knowledge_edges_target_id_fkey", + "foreign_key_definition": "FOREIGN KEY (target_id) REFERENCES memories(id) ON DELETE CASCADE", + "rejected_dangling_rows": 0, + "resolve_dangling_detected": true, + "resolve_valid_source_preserved": true, + "live_depends_on_accepted": true, + "stale_references_rejected": true + }, + "owned_rows_before_drop": {"memories": 0, "nodes": 0, "edges": 0}, + "active_sessions_before_drop": 0, + "database_count_after_drop": 0 + }, + "loom": { + "windows_repeat3": "PASS", + "windows_race": "PASS", + "windows_json": {"pass_events": 47, "fail_events": 0, "skip_events": 0}, + "windows_statement_coverage_percent": 86.9, + "ubuntu_wsl_repeat3": "PASS", + "ubuntu_wsl_json": {"pass_events": 47, "fail_events": 0, "skip_events": 0}, + "ubuntu_wsl_statement_coverage_percent": 86.9, + "ubuntu_go": "go1.25.12 linux/amd64", + "environment_warning": "WSL could not translate U:\\Library\\Software\\Scripts\\nvmdtranscoder; tests and coverage still exited 0", + "parent_path_lookup_after_tests": "absent", + "temp_helper_residue": 0 + }, + "prove_it": { + "method": "Go build overlays backed by temporary checker-only copies; product files were never edited", + "graph_parent": "both current Create and Update omitted-metadata tests failed SQLSTATE 23502", + "loom_parent": "direct writer test returned 5 instead of 7 and the unaligned end-to-end test failed with short write", + "t022_disabled_filters": "low beta returned and the corrected confidence-floor assertion failed", + "restored_product_blobs": { + "internal/graph/nodes_store.go": "f18a0daaa1971d0c477be86a89cd7dbc31ea86b2", + "internal/handlers/loom/workers.go": "bfa5996c7637fcdea1c4d249b4c500548494d7a4", + "internal/mcp/tools_memory.go": "18ba2c5e4e798567bd4d0f9a0f62ff9fc893f2b2" + }, + "current_focused_replay_after_overlays": "PASS" + }, + "static_gates": { + "go_build_all": "PASS", + "go_vet_all": "PASS", + "git_diff_check": "PASS", + "gitleaks": "8.30.0; one exact commit; 26.34 KB; no leaks", + "demolished_symbol_delta_matches": 0, + "loom_skip_markers": 0 + }, + "broad_suite": { + "command": "go test -json ./... -count=1", + "exit": 1, + "failed_test_events": 13, + "failed_packages": [ + "github.com/thebtf/engram/internal/db/gorm", + "github.com/thebtf/engram/internal/mcp" + ], + "owned_failures": 0, + "skip_events": 20, + "classification": "DB pool/governance candidate failures and the separately accepted T007 candidate are absent from this isolated maker base" + }, + "findings": [ + { + "severity": "LOW", + "title": "Resolve dangling behavior lost permanent integration coverage", + "detail": "The rewritten T016 test correctly proves the live FK, but the committed suite now checks only FK rejection plus ErrDangling sentinel shape. Store.Resolve on a missing endpoint is not called by a permanent test, while store.go:98 and nodes_store_test.go:149 still describe the removed acceptance test. The checker probe directly verified the current behavior, so this is not a current product defect or an ACCEPT blocker." + } + ], + "blocking_findings": 0, + "execution_corrections": [ + "The first status digest attempt used culture-sensitive Sort-Object; rerunning with StringComparer.Ordinal reproduced the maker digest exactly.", + "The first overlay invocation passed an unevaluated PowerShell expression as a package argument; rerunning with an explicit absolute -overlay argument produced the expected RED evidence.", + "The first Windows coverprofile argument created a literal $coverage file; it was removed and coverage was rerun with an explicit absolute argument, producing loom-windows.cover." + ], + "reusability_candidates": [] +} diff --git a/.agent/reviews/demolition-portability-r1-fresh-checker/loom-linux.cover b/.agent/reviews/demolition-portability-r1-fresh-checker/loom-linux.cover new file mode 100644 index 00000000..fb86a1c6 --- /dev/null +++ b/.agent/reviews/demolition-portability-r1-fresh-checker/loom-linux.cover @@ -0,0 +1,141 @@ +mode: atomic +github.com/thebtf/engram/internal/handlers/loom/events.go:25.53,26.23 1 9 +github.com/thebtf/engram/internal/handlers/loom/events.go:26.23,28.3 1 0 +github.com/thebtf/engram/internal/handlers/loom/events.go:30.2,40.16 3 9 +github.com/thebtf/engram/internal/handlers/loom/events.go:40.16,47.3 2 0 +github.com/thebtf/engram/internal/handlers/loom/events.go:52.2,52.43 1 9 +github.com/thebtf/engram/internal/handlers/loom/module.go:75.26,77.2 1 6 +github.com/thebtf/engram/internal/handlers/loom/module.go:83.50,85.2 1 69 +github.com/thebtf/engram/internal/handlers/loom/module.go:92.32,92.53 1 195 +github.com/thebtf/engram/internal/handlers/loom/module.go:101.74,106.29 4 75 +github.com/thebtf/engram/internal/handlers/loom/module.go:106.29,109.3 1 69 +github.com/thebtf/engram/internal/handlers/loom/module.go:109.8,112.17 3 6 +github.com/thebtf/engram/internal/handlers/loom/module.go:112.17,114.4 1 0 +github.com/thebtf/engram/internal/handlers/loom/module.go:117.3,122.29 2 6 +github.com/thebtf/engram/internal/handlers/loom/module.go:122.29,123.36 1 18 +github.com/thebtf/engram/internal/handlers/loom/module.go:123.36,126.5 2 0 +github.com/thebtf/engram/internal/handlers/loom/module.go:127.4,127.52 1 18 +github.com/thebtf/engram/internal/handlers/loom/module.go:127.52,130.5 2 0 +github.com/thebtf/engram/internal/handlers/loom/module.go:133.3,138.17 2 6 +github.com/thebtf/engram/internal/handlers/loom/module.go:138.17,141.4 2 0 +github.com/thebtf/engram/internal/handlers/loom/module.go:142.3,143.16 2 6 +github.com/thebtf/engram/internal/handlers/loom/module.go:146.2,154.48 3 75 +github.com/thebtf/engram/internal/handlers/loom/module.go:154.48,158.3 1 0 +github.com/thebtf/engram/internal/handlers/loom/module.go:158.8,158.18 1 75 +github.com/thebtf/engram/internal/handlers/loom/module.go:158.18,162.3 1 0 +github.com/thebtf/engram/internal/handlers/loom/module.go:169.2,171.12 2 75 +github.com/thebtf/engram/internal/handlers/loom/module.go:182.54,183.20 1 78 +github.com/thebtf/engram/internal/handlers/loom/module.go:183.20,185.3 1 78 +github.com/thebtf/engram/internal/handlers/loom/module.go:187.2,187.21 1 78 +github.com/thebtf/engram/internal/handlers/loom/module.go:187.21,188.41 1 78 +github.com/thebtf/engram/internal/handlers/loom/module.go:188.41,189.11 1 3 +github.com/thebtf/engram/internal/handlers/loom/module.go:190.22,191.17 1 0 +github.com/thebtf/engram/internal/handlers/loom/module.go:192.12,192.12 0 3 +github.com/thebtf/engram/internal/handlers/loom/module.go:194.4,196.15 3 3 +github.com/thebtf/engram/internal/handlers/loom/module.go:198.3,198.35 1 78 +github.com/thebtf/engram/internal/handlers/loom/module.go:198.35,200.4 1 0 +github.com/thebtf/engram/internal/handlers/loom/module.go:203.2,203.17 1 78 +github.com/thebtf/engram/internal/handlers/loom/module.go:203.17,205.3 1 6 +github.com/thebtf/engram/internal/handlers/loom/module.go:206.2,206.12 1 72 +github.com/thebtf/engram/internal/handlers/loom/module.go:216.61,221.2 2 3 +github.com/thebtf/engram/internal/handlers/loom/module.go:226.56,230.2 1 3 +github.com/thebtf/engram/internal/handlers/loom/module.go:238.53,239.21 1 3 +github.com/thebtf/engram/internal/handlers/loom/module.go:239.21,240.68 1 3 +github.com/thebtf/engram/internal/handlers/loom/module.go:240.68,245.4 1 0 +github.com/thebtf/engram/internal/handlers/loom/module.go:245.9,250.4 1 3 +github.com/thebtf/engram/internal/handlers/loom/module.go:252.2,252.29 1 3 +github.com/thebtf/engram/internal/handlers/loom/module.go:261.45,263.2 1 3 +github.com/thebtf/engram/internal/handlers/loom/module.go:267.42,269.2 1 0 +github.com/thebtf/engram/internal/handlers/loom/module.go:277.74,284.16 3 9 +github.com/thebtf/engram/internal/handlers/loom/module.go:284.16,286.3 1 0 +github.com/thebtf/engram/internal/handlers/loom/module.go:287.2,291.4 1 9 +github.com/thebtf/engram/internal/handlers/loom/tools.go:122.43,145.2 1 180 +github.com/thebtf/engram/internal/handlers/loom/tools.go:153.136,154.14 1 54 +github.com/thebtf/engram/internal/handlers/loom/tools.go:155.22,156.42 1 18 +github.com/thebtf/engram/internal/handlers/loom/tools.go:157.19,158.34 1 15 +github.com/thebtf/engram/internal/handlers/loom/tools.go:159.20,160.35 1 9 +github.com/thebtf/engram/internal/handlers/loom/tools.go:161.22,162.37 1 12 +github.com/thebtf/engram/internal/handlers/loom/tools.go:163.10,167.4 1 0 +github.com/thebtf/engram/internal/handlers/loom/tools.go:188.128,190.48 2 18 +github.com/thebtf/engram/internal/handlers/loom/tools.go:190.48,195.3 1 0 +github.com/thebtf/engram/internal/handlers/loom/tools.go:197.2,197.39 1 18 +github.com/thebtf/engram/internal/handlers/loom/tools.go:197.39,202.3 1 3 +github.com/thebtf/engram/internal/handlers/loom/tools.go:205.2,206.30 2 15 +github.com/thebtf/engram/internal/handlers/loom/tools.go:206.30,212.3 1 3 +github.com/thebtf/engram/internal/handlers/loom/tools.go:214.2,229.16 3 12 +github.com/thebtf/engram/internal/handlers/loom/tools.go:229.16,234.3 1 3 +github.com/thebtf/engram/internal/handlers/loom/tools.go:236.2,240.26 2 9 +github.com/thebtf/engram/internal/handlers/loom/tools.go:251.104,253.48 2 15 +github.com/thebtf/engram/internal/handlers/loom/tools.go:253.48,258.3 1 0 +github.com/thebtf/engram/internal/handlers/loom/tools.go:259.2,259.39 1 15 +github.com/thebtf/engram/internal/handlers/loom/tools.go:259.39,264.3 1 3 +github.com/thebtf/engram/internal/handlers/loom/tools.go:266.2,267.16 2 12 +github.com/thebtf/engram/internal/handlers/loom/tools.go:267.16,273.3 1 0 +github.com/thebtf/engram/internal/handlers/loom/tools.go:274.2,274.17 1 12 +github.com/thebtf/engram/internal/handlers/loom/tools.go:274.17,280.3 1 3 +github.com/thebtf/engram/internal/handlers/loom/tools.go:283.2,283.28 1 9 +github.com/thebtf/engram/internal/handlers/loom/tools.go:283.28,289.3 1 3 +github.com/thebtf/engram/internal/handlers/loom/tools.go:291.2,291.27 1 6 +github.com/thebtf/engram/internal/handlers/loom/tools.go:302.105,304.43 2 9 +github.com/thebtf/engram/internal/handlers/loom/tools.go:304.43,305.49 1 9 +github.com/thebtf/engram/internal/handlers/loom/tools.go:305.49,310.4 1 0 +github.com/thebtf/engram/internal/handlers/loom/tools.go:314.2,315.31 2 9 +github.com/thebtf/engram/internal/handlers/loom/tools.go:315.31,317.3 1 3 +github.com/thebtf/engram/internal/handlers/loom/tools.go:320.2,321.16 2 9 +github.com/thebtf/engram/internal/handlers/loom/tools.go:321.16,326.3 1 0 +github.com/thebtf/engram/internal/handlers/loom/tools.go:329.2,329.18 1 9 +github.com/thebtf/engram/internal/handlers/loom/tools.go:329.18,331.3 1 3 +github.com/thebtf/engram/internal/handlers/loom/tools.go:333.2,334.26 2 9 +github.com/thebtf/engram/internal/handlers/loom/tools.go:341.107,343.48 2 12 +github.com/thebtf/engram/internal/handlers/loom/tools.go:343.48,348.3 1 0 +github.com/thebtf/engram/internal/handlers/loom/tools.go:349.2,349.39 1 12 +github.com/thebtf/engram/internal/handlers/loom/tools.go:349.39,354.3 1 0 +github.com/thebtf/engram/internal/handlers/loom/tools.go:357.2,358.31 2 12 +github.com/thebtf/engram/internal/handlers/loom/tools.go:358.31,364.3 1 3 +github.com/thebtf/engram/internal/handlers/loom/tools.go:365.2,365.28 1 9 +github.com/thebtf/engram/internal/handlers/loom/tools.go:365.28,371.3 1 3 +github.com/thebtf/engram/internal/handlers/loom/tools.go:373.2,374.22 2 6 +github.com/thebtf/engram/internal/handlers/loom/tools.go:374.22,382.3 2 3 +github.com/thebtf/engram/internal/handlers/loom/tools.go:384.2,385.26 2 3 +github.com/thebtf/engram/internal/handlers/loom/workers.go:49.32,53.2 3 75 +github.com/thebtf/engram/internal/handlers/loom/workers.go:58.63,62.2 3 54 +github.com/thebtf/engram/internal/handlers/loom/workers.go:65.44,65.73 1 0 +github.com/thebtf/engram/internal/handlers/loom/workers.go:74.95,76.28 1 54 +github.com/thebtf/engram/internal/handlers/loom/workers.go:76.28,78.3 1 3 +github.com/thebtf/engram/internal/handlers/loom/workers.go:81.2,81.43 1 51 +github.com/thebtf/engram/internal/handlers/loom/workers.go:81.43,83.3 1 15 +github.com/thebtf/engram/internal/handlers/loom/workers.go:87.2,88.21 2 36 +github.com/thebtf/engram/internal/handlers/loom/workers.go:88.21,90.3 1 3 +github.com/thebtf/engram/internal/handlers/loom/workers.go:91.2,91.22 1 36 +github.com/thebtf/engram/internal/handlers/loom/workers.go:91.22,93.3 1 3 +github.com/thebtf/engram/internal/handlers/loom/workers.go:94.2,94.23 1 36 +github.com/thebtf/engram/internal/handlers/loom/workers.go:94.23,96.3 1 3 +github.com/thebtf/engram/internal/handlers/loom/workers.go:98.2,104.20 3 36 +github.com/thebtf/engram/internal/handlers/loom/workers.go:104.20,106.3 1 3 +github.com/thebtf/engram/internal/handlers/loom/workers.go:109.2,110.29 2 36 +github.com/thebtf/engram/internal/handlers/loom/workers.go:110.29,111.31 1 44 +github.com/thebtf/engram/internal/handlers/loom/workers.go:111.31,113.4 1 3 +github.com/thebtf/engram/internal/handlers/loom/workers.go:114.3,114.29 1 41 +github.com/thebtf/engram/internal/handlers/loom/workers.go:116.2,128.16 8 33 +github.com/thebtf/engram/internal/handlers/loom/workers.go:128.16,130.23 1 15 +github.com/thebtf/engram/internal/handlers/loom/workers.go:130.23,132.4 1 6 +github.com/thebtf/engram/internal/handlers/loom/workers.go:134.3,135.31 2 9 +github.com/thebtf/engram/internal/handlers/loom/workers.go:135.31,137.20 2 6 +github.com/thebtf/engram/internal/handlers/loom/workers.go:137.20,140.5 1 3 +github.com/thebtf/engram/internal/handlers/loom/workers.go:141.4,142.34 1 3 +github.com/thebtf/engram/internal/handlers/loom/workers.go:144.3,144.72 1 3 +github.com/thebtf/engram/internal/handlers/loom/workers.go:148.2,152.8 2 18 +github.com/thebtf/engram/internal/handlers/loom/workers.go:156.49,157.32 1 54 +github.com/thebtf/engram/internal/handlers/loom/workers.go:157.32,158.16 1 57 +github.com/thebtf/engram/internal/handlers/loom/workers.go:158.16,160.4 1 51 +github.com/thebtf/engram/internal/handlers/loom/workers.go:162.2,162.14 1 3 +github.com/thebtf/engram/internal/handlers/loom/workers.go:170.59,172.2 1 75 +github.com/thebtf/engram/internal/handlers/loom/workers.go:181.54,183.14 2 1950 +github.com/thebtf/engram/internal/handlers/loom/workers.go:183.14,185.3 1 9 +github.com/thebtf/engram/internal/handlers/loom/workers.go:186.2,187.32 2 1941 +github.com/thebtf/engram/internal/handlers/loom/workers.go:187.32,189.3 1 6 +github.com/thebtf/engram/internal/handlers/loom/workers.go:190.2,192.16 3 1941 +github.com/thebtf/engram/internal/handlers/loom/workers.go:192.16,194.3 1 3 +github.com/thebtf/engram/internal/handlers/loom/workers.go:195.2,195.24 1 1938 +github.com/thebtf/engram/internal/handlers/loom/workers.go:195.24,197.3 1 3 +github.com/thebtf/engram/internal/handlers/loom/workers.go:198.2,198.25 1 1935 diff --git a/.agent/reviews/demolition-portability-r1-fresh-checker/loom-windows.cover b/.agent/reviews/demolition-portability-r1-fresh-checker/loom-windows.cover new file mode 100644 index 00000000..29c46f10 --- /dev/null +++ b/.agent/reviews/demolition-portability-r1-fresh-checker/loom-windows.cover @@ -0,0 +1,141 @@ +mode: atomic +github.com/thebtf/engram/internal/handlers/loom/events.go:25.53,26.23 1 3 +github.com/thebtf/engram/internal/handlers/loom/events.go:26.23,28.3 1 0 +github.com/thebtf/engram/internal/handlers/loom/events.go:30.2,40.16 3 3 +github.com/thebtf/engram/internal/handlers/loom/events.go:40.16,47.3 2 0 +github.com/thebtf/engram/internal/handlers/loom/events.go:52.2,52.43 1 3 +github.com/thebtf/engram/internal/handlers/loom/module.go:75.26,77.2 1 2 +github.com/thebtf/engram/internal/handlers/loom/module.go:83.50,85.2 1 23 +github.com/thebtf/engram/internal/handlers/loom/module.go:92.32,92.53 1 65 +github.com/thebtf/engram/internal/handlers/loom/module.go:101.74,106.29 4 25 +github.com/thebtf/engram/internal/handlers/loom/module.go:106.29,109.3 1 23 +github.com/thebtf/engram/internal/handlers/loom/module.go:109.8,112.17 3 2 +github.com/thebtf/engram/internal/handlers/loom/module.go:112.17,114.4 1 0 +github.com/thebtf/engram/internal/handlers/loom/module.go:117.3,122.29 2 2 +github.com/thebtf/engram/internal/handlers/loom/module.go:122.29,123.36 1 6 +github.com/thebtf/engram/internal/handlers/loom/module.go:123.36,126.5 2 0 +github.com/thebtf/engram/internal/handlers/loom/module.go:127.4,127.52 1 6 +github.com/thebtf/engram/internal/handlers/loom/module.go:127.52,130.5 2 0 +github.com/thebtf/engram/internal/handlers/loom/module.go:133.3,138.17 2 2 +github.com/thebtf/engram/internal/handlers/loom/module.go:138.17,141.4 2 0 +github.com/thebtf/engram/internal/handlers/loom/module.go:142.3,143.16 2 2 +github.com/thebtf/engram/internal/handlers/loom/module.go:146.2,154.48 3 25 +github.com/thebtf/engram/internal/handlers/loom/module.go:154.48,158.3 1 0 +github.com/thebtf/engram/internal/handlers/loom/module.go:158.8,158.18 1 25 +github.com/thebtf/engram/internal/handlers/loom/module.go:158.18,162.3 1 0 +github.com/thebtf/engram/internal/handlers/loom/module.go:169.2,171.12 2 25 +github.com/thebtf/engram/internal/handlers/loom/module.go:182.54,183.20 1 26 +github.com/thebtf/engram/internal/handlers/loom/module.go:183.20,185.3 1 26 +github.com/thebtf/engram/internal/handlers/loom/module.go:187.2,187.21 1 26 +github.com/thebtf/engram/internal/handlers/loom/module.go:187.21,188.41 1 26 +github.com/thebtf/engram/internal/handlers/loom/module.go:188.41,189.11 1 1 +github.com/thebtf/engram/internal/handlers/loom/module.go:190.22,191.17 1 0 +github.com/thebtf/engram/internal/handlers/loom/module.go:192.12,192.12 0 1 +github.com/thebtf/engram/internal/handlers/loom/module.go:194.4,196.15 3 1 +github.com/thebtf/engram/internal/handlers/loom/module.go:198.3,198.35 1 26 +github.com/thebtf/engram/internal/handlers/loom/module.go:198.35,200.4 1 0 +github.com/thebtf/engram/internal/handlers/loom/module.go:203.2,203.17 1 26 +github.com/thebtf/engram/internal/handlers/loom/module.go:203.17,205.3 1 2 +github.com/thebtf/engram/internal/handlers/loom/module.go:206.2,206.12 1 24 +github.com/thebtf/engram/internal/handlers/loom/module.go:216.61,221.2 2 1 +github.com/thebtf/engram/internal/handlers/loom/module.go:226.56,230.2 1 1 +github.com/thebtf/engram/internal/handlers/loom/module.go:238.53,239.21 1 1 +github.com/thebtf/engram/internal/handlers/loom/module.go:239.21,240.68 1 1 +github.com/thebtf/engram/internal/handlers/loom/module.go:240.68,245.4 1 0 +github.com/thebtf/engram/internal/handlers/loom/module.go:245.9,250.4 1 1 +github.com/thebtf/engram/internal/handlers/loom/module.go:252.2,252.29 1 1 +github.com/thebtf/engram/internal/handlers/loom/module.go:261.45,263.2 1 1 +github.com/thebtf/engram/internal/handlers/loom/module.go:267.42,269.2 1 0 +github.com/thebtf/engram/internal/handlers/loom/module.go:277.74,284.16 3 3 +github.com/thebtf/engram/internal/handlers/loom/module.go:284.16,286.3 1 0 +github.com/thebtf/engram/internal/handlers/loom/module.go:287.2,291.4 1 3 +github.com/thebtf/engram/internal/handlers/loom/tools.go:122.43,145.2 1 60 +github.com/thebtf/engram/internal/handlers/loom/tools.go:153.136,154.14 1 18 +github.com/thebtf/engram/internal/handlers/loom/tools.go:155.22,156.42 1 6 +github.com/thebtf/engram/internal/handlers/loom/tools.go:157.19,158.34 1 5 +github.com/thebtf/engram/internal/handlers/loom/tools.go:159.20,160.35 1 3 +github.com/thebtf/engram/internal/handlers/loom/tools.go:161.22,162.37 1 4 +github.com/thebtf/engram/internal/handlers/loom/tools.go:163.10,167.4 1 0 +github.com/thebtf/engram/internal/handlers/loom/tools.go:188.128,190.48 2 6 +github.com/thebtf/engram/internal/handlers/loom/tools.go:190.48,195.3 1 0 +github.com/thebtf/engram/internal/handlers/loom/tools.go:197.2,197.39 1 6 +github.com/thebtf/engram/internal/handlers/loom/tools.go:197.39,202.3 1 1 +github.com/thebtf/engram/internal/handlers/loom/tools.go:205.2,206.30 2 5 +github.com/thebtf/engram/internal/handlers/loom/tools.go:206.30,212.3 1 1 +github.com/thebtf/engram/internal/handlers/loom/tools.go:214.2,229.16 3 4 +github.com/thebtf/engram/internal/handlers/loom/tools.go:229.16,234.3 1 1 +github.com/thebtf/engram/internal/handlers/loom/tools.go:236.2,240.26 2 3 +github.com/thebtf/engram/internal/handlers/loom/tools.go:251.104,253.48 2 5 +github.com/thebtf/engram/internal/handlers/loom/tools.go:253.48,258.3 1 0 +github.com/thebtf/engram/internal/handlers/loom/tools.go:259.2,259.39 1 5 +github.com/thebtf/engram/internal/handlers/loom/tools.go:259.39,264.3 1 1 +github.com/thebtf/engram/internal/handlers/loom/tools.go:266.2,267.16 2 4 +github.com/thebtf/engram/internal/handlers/loom/tools.go:267.16,273.3 1 0 +github.com/thebtf/engram/internal/handlers/loom/tools.go:274.2,274.17 1 4 +github.com/thebtf/engram/internal/handlers/loom/tools.go:274.17,280.3 1 1 +github.com/thebtf/engram/internal/handlers/loom/tools.go:283.2,283.28 1 3 +github.com/thebtf/engram/internal/handlers/loom/tools.go:283.28,289.3 1 1 +github.com/thebtf/engram/internal/handlers/loom/tools.go:291.2,291.27 1 2 +github.com/thebtf/engram/internal/handlers/loom/tools.go:302.105,304.43 2 3 +github.com/thebtf/engram/internal/handlers/loom/tools.go:304.43,305.49 1 3 +github.com/thebtf/engram/internal/handlers/loom/tools.go:305.49,310.4 1 0 +github.com/thebtf/engram/internal/handlers/loom/tools.go:314.2,315.31 2 3 +github.com/thebtf/engram/internal/handlers/loom/tools.go:315.31,317.3 1 1 +github.com/thebtf/engram/internal/handlers/loom/tools.go:320.2,321.16 2 3 +github.com/thebtf/engram/internal/handlers/loom/tools.go:321.16,326.3 1 0 +github.com/thebtf/engram/internal/handlers/loom/tools.go:329.2,329.18 1 3 +github.com/thebtf/engram/internal/handlers/loom/tools.go:329.18,331.3 1 1 +github.com/thebtf/engram/internal/handlers/loom/tools.go:333.2,334.26 2 3 +github.com/thebtf/engram/internal/handlers/loom/tools.go:341.107,343.48 2 4 +github.com/thebtf/engram/internal/handlers/loom/tools.go:343.48,348.3 1 0 +github.com/thebtf/engram/internal/handlers/loom/tools.go:349.2,349.39 1 4 +github.com/thebtf/engram/internal/handlers/loom/tools.go:349.39,354.3 1 0 +github.com/thebtf/engram/internal/handlers/loom/tools.go:357.2,358.31 2 4 +github.com/thebtf/engram/internal/handlers/loom/tools.go:358.31,364.3 1 1 +github.com/thebtf/engram/internal/handlers/loom/tools.go:365.2,365.28 1 3 +github.com/thebtf/engram/internal/handlers/loom/tools.go:365.28,371.3 1 1 +github.com/thebtf/engram/internal/handlers/loom/tools.go:373.2,374.22 2 2 +github.com/thebtf/engram/internal/handlers/loom/tools.go:374.22,382.3 2 1 +github.com/thebtf/engram/internal/handlers/loom/tools.go:384.2,385.26 2 1 +github.com/thebtf/engram/internal/handlers/loom/workers.go:49.32,53.2 3 25 +github.com/thebtf/engram/internal/handlers/loom/workers.go:58.63,62.2 3 18 +github.com/thebtf/engram/internal/handlers/loom/workers.go:65.44,65.73 1 0 +github.com/thebtf/engram/internal/handlers/loom/workers.go:74.95,76.28 1 18 +github.com/thebtf/engram/internal/handlers/loom/workers.go:76.28,78.3 1 1 +github.com/thebtf/engram/internal/handlers/loom/workers.go:81.2,81.43 1 17 +github.com/thebtf/engram/internal/handlers/loom/workers.go:81.43,83.3 1 5 +github.com/thebtf/engram/internal/handlers/loom/workers.go:87.2,88.21 2 12 +github.com/thebtf/engram/internal/handlers/loom/workers.go:88.21,90.3 1 1 +github.com/thebtf/engram/internal/handlers/loom/workers.go:91.2,91.22 1 12 +github.com/thebtf/engram/internal/handlers/loom/workers.go:91.22,93.3 1 1 +github.com/thebtf/engram/internal/handlers/loom/workers.go:94.2,94.23 1 12 +github.com/thebtf/engram/internal/handlers/loom/workers.go:94.23,96.3 1 1 +github.com/thebtf/engram/internal/handlers/loom/workers.go:98.2,104.20 3 12 +github.com/thebtf/engram/internal/handlers/loom/workers.go:104.20,106.3 1 1 +github.com/thebtf/engram/internal/handlers/loom/workers.go:109.2,110.29 2 12 +github.com/thebtf/engram/internal/handlers/loom/workers.go:110.29,111.31 1 14 +github.com/thebtf/engram/internal/handlers/loom/workers.go:111.31,113.4 1 1 +github.com/thebtf/engram/internal/handlers/loom/workers.go:114.3,114.29 1 13 +github.com/thebtf/engram/internal/handlers/loom/workers.go:116.2,128.16 8 11 +github.com/thebtf/engram/internal/handlers/loom/workers.go:128.16,130.23 1 5 +github.com/thebtf/engram/internal/handlers/loom/workers.go:130.23,132.4 1 2 +github.com/thebtf/engram/internal/handlers/loom/workers.go:134.3,135.31 2 3 +github.com/thebtf/engram/internal/handlers/loom/workers.go:135.31,137.20 2 2 +github.com/thebtf/engram/internal/handlers/loom/workers.go:137.20,140.5 1 1 +github.com/thebtf/engram/internal/handlers/loom/workers.go:141.4,142.34 1 1 +github.com/thebtf/engram/internal/handlers/loom/workers.go:144.3,144.72 1 1 +github.com/thebtf/engram/internal/handlers/loom/workers.go:148.2,152.8 2 6 +github.com/thebtf/engram/internal/handlers/loom/workers.go:156.49,157.32 1 18 +github.com/thebtf/engram/internal/handlers/loom/workers.go:157.32,158.16 1 19 +github.com/thebtf/engram/internal/handlers/loom/workers.go:158.16,160.4 1 17 +github.com/thebtf/engram/internal/handlers/loom/workers.go:162.2,162.14 1 1 +github.com/thebtf/engram/internal/handlers/loom/workers.go:170.59,172.2 1 25 +github.com/thebtf/engram/internal/handlers/loom/workers.go:181.54,183.14 2 650 +github.com/thebtf/engram/internal/handlers/loom/workers.go:183.14,185.3 1 3 +github.com/thebtf/engram/internal/handlers/loom/workers.go:186.2,187.32 2 647 +github.com/thebtf/engram/internal/handlers/loom/workers.go:187.32,189.3 1 2 +github.com/thebtf/engram/internal/handlers/loom/workers.go:190.2,192.16 3 647 +github.com/thebtf/engram/internal/handlers/loom/workers.go:192.16,194.3 1 1 +github.com/thebtf/engram/internal/handlers/loom/workers.go:195.2,195.24 1 646 +github.com/thebtf/engram/internal/handlers/loom/workers.go:195.24,197.3 1 1 +github.com/thebtf/engram/internal/handlers/loom/workers.go:198.2,198.25 1 645 diff --git a/.agent/reviews/demolition-portability-r1-fresh-checker/report.md b/.agent/reviews/demolition-portability-r1-fresh-checker/report.md new file mode 100644 index 00000000..b5b7cbc2 --- /dev/null +++ b/.agent/reviews/demolition-portability-r1-fresh-checker/report.md @@ -0,0 +1,144 @@ +# DEMOLITION-PORTABILITY R1 fresh checker report + +Verdict: **ACCEPT** + +No CRITICAL or HIGH finding was found. The immutable maker is suitable for root +post-review and later synthesis. This verdict does not authorize merge, push, +tag, release, or any external mutation. + +## Immutable boundary + +- Maker HEAD: `2c88fed68e0da04b4686940b81f55579a8260919` +- Parent: `0c6269908aa810a2248f2bfaf3fca4f9f5791359` +- Tree: `56454175025fe2f599b1ac9a14b5dc8361b76453` +- Maker paths: 15, all mode `100644` +- Ordinal-LF name digest: + `996b153680df782d4247b6ef72120fba36bfc7cf3fb1015385817e1035ce700f` +- Ordinal-LF status/name digest: + `4761d8020de2f6ba49841291eca5996f7ae928559a69228c383f3ede5df71b18` +- Initial checker worktree: clean + +The only production files changed by the maker are +`internal/graph/nodes_store.go` and `internal/handlers/loom/workers.go`. +`internal/mcp/tools_memory.go` is byte-identical at base and maker +(`18ba2c5e4e798567bd4d0f9a0f62ff9fc893f2b2`). + +## Findings + +CRITICAL: none. + +HIGH: none. + +LOW — permanent dangling-Resolve coverage is weaker after the current-schema +correction. `internal/graph/dangling_test.go` now correctly proves FK rejection +and sentinel shape, but no committed test calls `Store.Resolve` with a missing +endpoint. The anti-stub comments at `internal/graph/store.go:98` and +`internal/graph/nodes_store_test.go:149` still refer to the removed T016 +acceptance test. The checker-only DB probe directly verified that current +`Resolve` returns `ErrDangling`, preserves the valid source, and returns a nil +target, so this is not a current product defect and does not block ACCEPT. + +## PostgreSQL 17 audit + +The checker created only `engram_dp_chk_0711_0715_c7e5` on PostgreSQL 17.10. + +- Graph focused tests, count=3: 18 pass events, 0 fail, 0 skip. +- T022/T022b/T022c, count=3: 9 pass events, 0 fail, 0 skip. +- Checker probe proved nil and zero-length metadata normalize to `{}` on both + Create and Update. +- Invalid JSON was rejected on Create and Update; the failed Update preserved + the previously persisted value. +- A deliberately closed-DB Create returned an error after applying the same + caller-object defaulting style already used for timestamps/privacy; metadata + was `{}`. This is observable mutation-on-error, but it is consistent with the + existing API style and is not a new independent blocker. +- Dangling insert: SQLSTATE `23503`, constraint + `knowledge_edges_target_id_fkey`, zero inserted rows. +- Live FK definition remained + `FOREIGN KEY (target_id) REFERENCES memories(id) ON DELETE CASCADE`. +- `depends_on` was accepted; stale `references` was rejected. +- Direct `Store.Resolve` of a valid source plus deleted target returned + `ErrDangling`, preserved the source, and returned nil target. +- Before drop: owned memories=0, nodes=0, edges=0, active sessions=0. +- After drop: database count=0. + +The reusable checker probe is +`.agent/reviews/demolition-portability-r1-fresh-checker/dbprobe/main.go`. + +## Loom portability and Writer contract + +Windows: + +- package repeat count=3: PASS, 86.9% statement coverage; +- race: PASS; +- JSON run: 47 pass events, 0 fail, 0 skip; +- aligned/unaligned cap crossing, post-cap discard, underlying Writer error, + zero-error short write, timeout, cancellation, stderr, empty output, + structured args/CWD/env, missing executable, allowlist, and path separators + all executed; +- parent PATH lookup remained absent and helper temp residue was zero. + +Ubuntu WSL: + +- Go `go1.25.12 linux/amd64`; +- package repeat count=3: PASS, 86.9% statement coverage; +- JSON run: 47 pass events, 0 fail, 0 skip. + +WSL emitted the nonblocking host-environment warning that it could not translate +`U:\Library\Software\Scripts\nvmdtranscoder`; the Linux test and coverage +commands still exited 0. + +Coverage profiles are preserved as `loom-windows.cover` and +`loom-linux.cover` in this checker namespace. + +## Independent Prove-It + +Go build overlays used temporary checker-only copies; product files were never +edited. + +- Parent `nodes_store.go`: both current Create and Update omitted-metadata + tests failed SQLSTATE `23502`. +- Parent `workers.go`: the direct writer test returned 5 instead of 7, and the + unaligned end-to-end test failed with `short write`. +- Both hybrid confidence filters disabled: `low beta` returned and T022 failed. +- Temporary overlays/copies were removed. +- Product blobs after Prove-It matched maker HEAD exactly, and current focused + Graph/T022/Loom replay passed. + +## Static and repository gates + +- `go build ./...`: PASS +- `go vet ./...`: PASS +- `git diff --check `: PASS +- Gitleaks 8.30.0 exact-commit scan: 1 commit, 26.34 KB, no leaks +- Added production lines matching removed-v5 graph retrieval, rerank, + composite scoring, SDK observation extraction, or server HTTP MCP transport + patterns: 0 +- `t.Skip`/`Skipf`/`SkipNow` markers in `internal/handlers/loom`: 0 + +No v5-demolished behavior was restored. + +## Broad-suite truth + +`go test -json ./... -count=1` exited 1 with 13 failed test events in two +packages and 20 skips. Owned Graph/Loom/T022 failures were zero. + +The failures were the DB pool/governance candidate tests under +`internal/db/gorm` and `TestEC_F1_TagDerivedBackfill_T007` under `internal/mcp`. +Those neighboring accepted/in-flight candidates are intentionally absent from +this isolated maker base. This is not a blanket waiver: no owned failure was +present. + +## Checker execution corrections + +1. The first status digest attempt used culture-sensitive `Sort-Object`. + Rerunning with `[StringComparer]::Ordinal` reproduced the maker digest. +2. The first overlay command passed an unevaluated PowerShell expression as a + package argument. It was rerun with an explicit absolute `-overlay` value; + the expected RED evidence then appeared. +3. The first Windows coverprofile argument created a literal `$coverage` file. + That file was removed and the gate was rerun with an explicit absolute + profile path. + +All correction residue was removed. Reusability candidates: none evaluated as +ready for extraction. From 65837cc735e469e7afc973347e943d3af6ec8ebd Mon Sep 17 00:00:00 2001 From: Kirill Turanskiy Date: Sat, 11 Jul 2026 12:18:16 +0300 Subject: [PATCH 055/111] Harden immutable image publication --- .../2026-07-11-image-remediation-r2-maker.md | 115 ++ ...026-07-11-image-remediation-r2-security.md | 93 + .../IMAGE-AUTHORITY-GUARD.prove-it.log | 12 + .../evidence/IMAGE-DIFF-HYGIENE.red.json | 10 + .../IMAGE-HEALTHCHECK-RUNNER.red.json | 10 + .../IMAGE-IMMUTABLE-COMPOSE-RUNTIME.red.json | 10 + .../evidence/IMAGE-MANUAL-DISPATCH.red.json | 10 + .../IMAGE-PAYLOAD-COMMIT-IDENTITY.red.json | 10 + .../IMAGE-PUBLICATION-INVARIANTS.tdd.json | 31 + .../evidence/IMAGE-PUBLICATION-RACE.red.json | 10 + .../IMAGE-SHARED-BUILDER-VERSION.red.json | 14 + .../evidence/IMAGE-SHELL-BOUNDARY.red.json | 10 + .../IMAGE-TWO-RUNNER-BRIDGE.green.json | 29 + .../evidence/IMAGE-TWO-RUNNER-BRIDGE.red.log | 5 + .../evidence/LIVE-RULESET-BLOCKER.json | 23 + .../evidence/compose-missing-image.reject.txt | 1 + .../evidence/compose-root.config.txt | 120 ++ .../evidence/compose-runtime.config.txt | 107 + .../evidence/healthcheck.coverage.out | 40 + .../image-remediation-r2/behavior-signal.md | 9 + .dockerignore | 19 + .github/workflows/docker-publish.yml | 357 +++- .github/workflows/docker.yaml | 101 +- Dockerfile | 109 +- cmd/engram-healthcheck/main.go | 110 + cmd/engram-healthcheck/main_test.go | 145 ++ deploy/docker-compose.runtime.yml | 66 +- deploy/postgres/Dockerfile | 32 + docker-compose.yml | 81 +- docs/DEPLOYMENT.md | 437 ++-- docs/PRODUCTION-TESTING-PLAYBOOK.md | 331 ++- .../build-and-scan-images.ps1 | 1663 +++++++++++++++ .../runtime/image_runtime_contract_test.go | 1776 +++++++++++++++++ .../runtime/postgres_image_contract_test.go | 209 ++ 34 files changed, 5396 insertions(+), 709 deletions(-) create mode 100644 .agent/reports/2026-07-11-image-remediation-r2-maker.md create mode 100644 .agent/reports/2026-07-11-image-remediation-r2-security.md create mode 100644 .agent/specs/image-remediation-r2/evidence/IMAGE-AUTHORITY-GUARD.prove-it.log create mode 100644 .agent/specs/image-remediation-r2/evidence/IMAGE-DIFF-HYGIENE.red.json create mode 100644 .agent/specs/image-remediation-r2/evidence/IMAGE-HEALTHCHECK-RUNNER.red.json create mode 100644 .agent/specs/image-remediation-r2/evidence/IMAGE-IMMUTABLE-COMPOSE-RUNTIME.red.json create mode 100644 .agent/specs/image-remediation-r2/evidence/IMAGE-MANUAL-DISPATCH.red.json create mode 100644 .agent/specs/image-remediation-r2/evidence/IMAGE-PAYLOAD-COMMIT-IDENTITY.red.json create mode 100644 .agent/specs/image-remediation-r2/evidence/IMAGE-PUBLICATION-INVARIANTS.tdd.json create mode 100644 .agent/specs/image-remediation-r2/evidence/IMAGE-PUBLICATION-RACE.red.json create mode 100644 .agent/specs/image-remediation-r2/evidence/IMAGE-SHARED-BUILDER-VERSION.red.json create mode 100644 .agent/specs/image-remediation-r2/evidence/IMAGE-SHELL-BOUNDARY.red.json create mode 100644 .agent/specs/image-remediation-r2/evidence/IMAGE-TWO-RUNNER-BRIDGE.green.json create mode 100644 .agent/specs/image-remediation-r2/evidence/IMAGE-TWO-RUNNER-BRIDGE.red.log create mode 100644 .agent/specs/image-remediation-r2/evidence/LIVE-RULESET-BLOCKER.json create mode 100644 .agent/specs/image-remediation-r2/evidence/compose-missing-image.reject.txt create mode 100644 .agent/specs/image-remediation-r2/evidence/compose-root.config.txt create mode 100644 .agent/specs/image-remediation-r2/evidence/compose-runtime.config.txt create mode 100644 .agent/specs/image-remediation-r2/evidence/healthcheck.coverage.out create mode 100644 .agent/testing/image-remediation-r2/behavior-signal.md create mode 100644 cmd/engram-healthcheck/main.go create mode 100644 cmd/engram-healthcheck/main_test.go create mode 100644 deploy/postgres/Dockerfile create mode 100644 scripts/production-gates/build-and-scan-images.ps1 create mode 100644 tests/critical/runtime/image_runtime_contract_test.go create mode 100644 tests/critical/runtime/postgres_image_contract_test.go diff --git a/.agent/reports/2026-07-11-image-remediation-r2-maker.md b/.agent/reports/2026-07-11-image-remediation-r2-maker.md new file mode 100644 index 00000000..8920f380 --- /dev/null +++ b/.agent/reports/2026-07-11-image-remediation-r2-maker.md @@ -0,0 +1,115 @@ +# IMAGE-REMEDIATION-R2 immutable publish maker report + +Status: **READY_FOR_INDEPENDENT_CHECK after the post-commit cold gate recorded in the maker handoff**. + +This is a maker packet, not an acceptance verdict. The report is committed +before the final exact-HEAD cold build by design: a commit cannot embed its own +SHA without changing that SHA. The handoff supplies the exact successor commit, +ignored runtime-evidence paths, and final gate results. + +## Boundary + +- Exact parent: `0c6269908aa810a2248f2bfaf3fca4f9f5791359`. +- Worktree: `D:\Dev\engram\.agent\worktrees\image-remediation-r2-immutable-publish`. +- Scope: the A11 image build, scan, runtime, and immutable GHCR publication + boundary plus its operator documentation and executable evidence. +- The rejected R1 maker/checker commits are intentionally absent from ancestry. +- Integration, release, tag creation, package publication, and GitHub ruleset + mutation are outside this maker handoff. + +## Why the old path was not production-safe + +The former workflow mixed candidate execution and package-write authority, +relied on moving image tags, did not bind publication to one exact same-run +artifact, and did not prove all three runtime images as one accepted set. That +made a green build an insufficient release authority and left tag overwrite, +artifact substitution, credential exposure, and partial-publication races +under-specified. + +## Implemented architecture + +1. `.github/workflows/docker.yaml` is verification-only. Main, pull request, + and manual runs receive `contents: read`; they never log in to GHCR and never + receive `packages: write`. +2. `.github/workflows/docker-publish.yml` is a trusted `workflow_run` bridge + with two fresh runners: + - `prepare-release` checks out trusted default-branch control code, validates + event/tag/main/ruleset provenance, checks out the exact candidate SHA with + persisted credentials disabled, builds from a tracked-file-only archive, + and uploads exactly one immutable five-file payload; + - `publish-images` checks out trusted default-branch control code only, + repeats provenance/ruleset validation, obtains a REST census of the current + run, downloads by exact artifact ID, validates the payload as data, loads + exact image IDs, and only then receives bounded GHCR credentials. +3. Publication is exact and fail-closed. The three image IDs are mapped to six + destinations: canonical SemVer plus `sha-` for server, + operator-console, and PostgreSQL. Every destination is compared before the + first write, compared again after login, and read back after push. Existing + mismatched refs abort every write; exact matches are verified no-ops. No + `latest`, `main`, or other moving alias is emitted. +4. The artifact bridge rejects extra/duplicate/expired/wrong-run artifacts, + wrong ID/name/digest, extra payload entries, filesystem links/reparse points, + non-canonical paths, traversal, non-regular tar entries, hash/size drift, + manifest drift, and loaded-image label/ID drift. +5. Credential handling uses an isolated `DOCKER_CONFIG`. Logout and recursive + credential removal complete before publication evidence is validated and + uploaded. Candidate code is never checked out or executed in the privileged + job. +6. The images form one auditable runtime set: + - server: pinned Go builder plus pinned distroless Debian 13, UID 65532; + - operator console: pinned Node builder plus pinned distroless Node 22, + non-root runtime and semantic health check; + - PostgreSQL: pinned Wolfi base, PostgreSQL 17.10 and pgvector 0.8.1, including + legacy-volume ownership migration behavior. +7. Compose now requires exact image values through `ENGRAM_SERVER_IMAGE`, + `ENGRAM_OPERATOR_IMAGE`, and `ENGRAM_POSTGRES_IMAGE`; no production default + resolves to a moving repository tag. + +## Executable proof and TDD discrepancies + +- `TestDockerReleaseRefFreshnessGuard` covers workflow permissions/order, + trusted-vs-candidate checkout behavior, hostile refs, event/API provenance, + exact main/tag rulesets, artifact census, payload envelope, archive traversal, + six-destination planning, mismatch refusal, and idempotent publication. +- The protected-main authority guard is pinned to GitHub Actions integration ID + `15368`; the only recovery bypass is User ID `7106373` and only for + `pull_request`. A prove-it mutation to `15369` failed before restoration. +- RED evidence records the rejected one-runner bridge, raw shell/context seams, + manual-dispatch privilege, publication race, healthcheck runner gap, shared + builder VERSION gap, immutable-compose assertion mismatch, and commit-identity + payload mismatch. +- `cmd/engram-healthcheck` has permanent unit coverage and is used instead of + shipping curl or a shell solely for container health checks. +- A provisional no-cache run built and scanned all three images with zero + HIGH/CRITICAL Docker Scout findings and empty cleanup residue. It exposed two + real defects: the operator target did not receive the validated VERSION, and + the runtime test contradicted the immutable compose contract. Both received + permanent regressions. The already-scanned images then passed all three exact + runtime contracts in 225.565 seconds. +- `ValidatePayload`/`LoadPayload` accept both canonical SemVer and the canonical + `sha-<40 lowercase hex>` identity used by audited commit builds. The actual + publication planner and publisher remain strictly SemVer-only. + +## External fail-closed blocker + +Live GitHub evidence found only one active branch ruleset named `main`; it has +no include selector, required status authority, or recovery bypass. No exact +`refs/tags/v*` no-bypass ruleset exists. Therefore publication must and does +stop before registry login. The required state is captured in +`.agent/specs/image-remediation-r2/evidence/LIVE-RULESET-BLOCKER.json`. + +## Checker focus + +- Re-derive the two-runner trust boundary from workflow permissions and checkout + order; do not approve from seam presence alone. +- Mutate artifact identity/digest/run, candidate SHA, integration ID, ruleset + selectors/bypass actors, payload links/traversal, and one of the six remote + config digests; every mutation must fail before a package write. +- Verify the privileged job never checks out or executes candidate code and + that credentials are erased before evidence upload. +- Inspect the final ignored acceptance manifest, payload validation/load output, + runtime JSONL, scanner SARIF, cleanup census, exact commit count, and rejected + ancestry proof supplied in the maker handoff. + +Finish state: **maker freeze only; independent checker and control-plane +ruleset repair are required before integration/publication**. diff --git a/.agent/reports/2026-07-11-image-remediation-r2-security.md b/.agent/reports/2026-07-11-image-remediation-r2-security.md new file mode 100644 index 00000000..e065882d --- /dev/null +++ b/.agent/reports/2026-07-11-image-remediation-r2-security.md @@ -0,0 +1,93 @@ +# IMAGE-REMEDIATION-R2 security review + +Classification: **S4 / Critical** because the change controls production image +publication, receives `packages: write`, processes cross-run artifacts, and +crosses GitHub Actions, Docker, and GHCR trust boundaries. + +Verdict: **PASS WITH A BLOCKING EXTERNAL PRECONDITION for code review; production +publication remains prohibited until the required live GitHub rulesets exist +and an independent checker accepts the implementation**. + +## Attack-surface map + +| Surface | Untrusted or external input | Authority at the boundary | +| --- | --- | --- | +| `docker.yaml` | repository source from main/PR/manual | `contents: read` only | +| `workflow_run` bridge | triggering run metadata, candidate SHA, tag/ref, artifact metadata | trusted default-branch script; prepare job has `contents: read` | +| release payload | current-run artifact plus three Docker archives | publisher has no candidate checkout/execution; validates as data before login | +| GHCR registry | six existing remote refs and possible external package-admin writes | isolated short-lived `GITHUB_TOKEN` with `packages: write` only in publisher | +| runtime images | source tree, package lock, pinned bases/packages, database volume | non-root server/operator; explicit PostgreSQL ownership transition | +| GitHub rulesets | current repository control-plane state | external operator/admin boundary; validation is read-only and fail-closed | + +Attack-surface confidence: **95%**. The review covers every changed workflow, +publication helper, Dockerfile, Compose runtime, and executable critical test. + +## Security invariants and evidence + +- **Least privilege:** verification and preparation cannot publish. Only the + fresh publisher job has `actions: read` plus `packages: write`. +- **No privileged candidate execution:** the publisher checks out trusted main + only. Candidate source is executed solely on the unprivileged prepare runner; + persisted checkout credentials are disabled. +- **Injection resistance:** refs, SHAs, versions, repository identity, IDs, and + digests are passed as typed script arguments and validated; raw event/context + values are not interpolated into shell programs. +- **Artifact integrity:** a fresh REST census requires exactly one non-expired + current-run artifact with the expected ID, name, and SHA-256 digest. Download + is by numeric artifact ID, not name. +- **Path/deserialization safety:** the payload envelope is exactly five regular + files under a trusted no-link output tree. Bundle names are basenames; outer + tar entries must be regular files/directories; absolute/traversal paths and + links are rejected; every byte count and SHA-256 is re-derived. +- **Registry race handling:** all six destinations are compared before login and + again before the first push, then read back. The implementation explicitly + does not claim atomic compare-and-swap semantics from GHCR and records external + package administrators as a residual trust boundary. +- **Credential containment:** `DOCKER_CONFIG` is isolated, logout is mandatory, + and the credential directory is removed before publication evidence upload. +- **Supply-chain pinning:** workflow actions and image sources are digest-pinned; + PostgreSQL/pgvector package versions are exact; the build context comes from + tracked files only and excludes Git metadata/credentials. +- **Container hardening:** server and operator use minimal distroless runtimes + and non-root users. Dedicated compiled health checks avoid adding shell/curl + attack surface. Runtime tests verify user, health, persistence, schema, + restart/recreation, and version contracts. +- **Vulnerability evidence:** `govulncheck ./...` reports zero reachable Go + vulnerabilities. Docker Scout reports zero HIGH/CRITICAL findings in every + provisional image. Secret-pattern review found only empty environment + pass-through variables and a per-run random PostgreSQL password, not embedded + credentials. + +## STRIDE review + +| Threat | Control | +| --- | --- | +| Spoofing | Exact repository, workflow, run, SHA, tag, artifact ID/name/digest, and ruleset actor IDs are independently revalidated. | +| Tampering | Tracked-only build context, same-run immutable artifact census, byte/hash/size checks, exact image IDs, and post-push readback. | +| Repudiation | Acceptance manifest, release bundle, artifact census, pre-login plan, publication result, scanner SARIF, runtime JSONL, and cleanup census form an audit trail. | +| Information disclosure | Candidate code cannot observe publisher credentials; Docker credentials are isolated and erased; build context excludes `.git` and credentials. | +| Denial of service | Malformed/extra/expired artifacts and conflicting tags fail before login/write; cleanup is prefix-bounded and proves zero residue. | +| Elevation of privilege | Package authority exists in one fresh trusted-code job only and is conditional on exact protected-main/tag-ruleset policy. | + +## Findings and residual risk + +| # | Severity | Finding | Disposition | +| --- | --- | --- | --- | +| 1 | BLOCKER / external | Live repository rulesets do not provide the required exact protected-main authority guard, recovery bypass, or no-bypass `refs/tags/v*` protection. | Publication remains fail-closed before login. Repository administrators must configure and independently verify the rulesets. | +| 2 | MEDIUM / accepted scope | GHCR does not expose an atomic immutable-tag compare-and-swap primitive; an external package administrator can race repository workflow publication. | Explicit trust boundary; compare-before-write plus readback detects conflicts but cannot remove external administrator authority. Restrict and audit package-admin membership. | +| 3 | MODERATE / dependency | `npm audit` reports GHSA-gj2h-2fpw-fhv9 in direct `@nuxt/ui` 3.3.7; the affected `UAuthForm`/`UForm` components have no source usage in `apps/operator-console`. The available fix is a major upgrade. | Not reachable in the shipped console by current-source search. Track a separately tested Nuxt UI upgrade; do not introduce those components before upgrade. | +| 4 | LOW / hardening | The exact A11 payload carries hashes, scanner output, and an acceptance manifest but no signed OCI provenance/SBOM attestation. | Preserve as explicit future supply-chain hardening; immutable refs and byte-bound local evidence are the current contract. | + +## Rollback and approval boundary + +- Before package login there is no external side effect; any failed validation + leaves only bounded runner-local artifacts, which cleanup removes. +- Once a previously absent immutable ref is pushed, rollback means retaining the + immutable ref and publishing a new canonical version; force-moving or deleting + a release tag/image is not an allowed rollback. +- The S4 human/control-plane gate is intentionally outside this maker: the user + authorized implementation and verification, but live ruleset mutation and + production publication were not performed. + +Security finish state: **implementation may enter independent checker review; +publication may not proceed while Finding 1 remains open**. diff --git a/.agent/specs/image-remediation-r2/evidence/IMAGE-AUTHORITY-GUARD.prove-it.log b/.agent/specs/image-remediation-r2/evidence/IMAGE-AUTHORITY-GUARD.prove-it.log new file mode 100644 index 00000000..eef1d823 --- /dev/null +++ b/.agent/specs/image-remediation-r2/evidence/IMAGE-AUTHORITY-GUARD.prove-it.log @@ -0,0 +1,12 @@ +--- FAIL: TestDockerReleaseRefFreshnessGuard (0.80s) + --- FAIL: TestDockerReleaseRefFreshnessGuard/workflow_run_provenance_and_protected-main_authority_matrix (0.80s) + --- FAIL: TestDockerReleaseRefFreshnessGuard/workflow_run_provenance_and_protected-main_authority_matrix/exact_protected_release_provenance (0.80s) + image_runtime_contract_test.go:733: image gate unexpectedly failed: exit status 1 + Exception: D:\Dev\engram\.agent\worktrees\image-remediation-r2-immutable-publish\scripts\production-gates\build-and-scan-images.ps1:282 + Line | +  282 |  throw "Expected exactly one active strict protected-main rule … +  |  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +  | Expected exactly one active strict protected-main ruleset requiring authority-guard; found 0. +FAIL +FAIL github.com/thebtf/engram/tests/critical/runtime 1.346s +FAIL diff --git a/.agent/specs/image-remediation-r2/evidence/IMAGE-DIFF-HYGIENE.red.json b/.agent/specs/image-remediation-r2/evidence/IMAGE-DIFF-HYGIENE.red.json new file mode 100644 index 00000000..c30de62c --- /dev/null +++ b/.agent/specs/image-remediation-r2/evidence/IMAGE-DIFF-HYGIENE.red.json @@ -0,0 +1,10 @@ +{ + "task_id": "IMAGE-DIFF-HYGIENE", + "stack": "GO", + "observed_at": "2026-07-11T07:18:21.9073036Z", + "test_file": "git diff --check 0c6269908aa810a2248f2bfaf3fca4f9f5791359..b7f8ff7b9efe826cefdc665894761783a6876676", + "test_name": "R1 immutable changed-diff whitespace regression", + "invariant": "Generated image evidence is normalized so the exact accepted-base-to-candidate diff passes git diff --check.", + "failure_reason": "R1 contains 34 trailing-whitespace diagnostics in operator-console/build.log and server/build.log.", + "runner_stdout_excerpt": "operator-console/build.log and server/build.log: 34 trailing whitespace diagnostics; exit 2" +} diff --git a/.agent/specs/image-remediation-r2/evidence/IMAGE-HEALTHCHECK-RUNNER.red.json b/.agent/specs/image-remediation-r2/evidence/IMAGE-HEALTHCHECK-RUNNER.red.json new file mode 100644 index 00000000..15e676fa --- /dev/null +++ b/.agent/specs/image-remediation-r2/evidence/IMAGE-HEALTHCHECK-RUNNER.red.json @@ -0,0 +1,10 @@ +{ + "task_id": "IMAGE-HEALTHCHECK-RUNNER", + "stack": "GO", + "observed_at": "2026-07-11T07:42:00Z", + "test_file": "cmd/engram-healthcheck/main_test.go", + "test_name": "TestRun_UsageAndReadinessExitCodes", + "invariant": "The shell-free probe exposes deterministic usage, ready, and not-ready exit codes through a testable runner.", + "failure_reason": "The R1 baseline called os.Exit directly and had no testable run function.", + "runner_stdout_excerpt": "main_test.go: undefined: run (three call sites)" +} diff --git a/.agent/specs/image-remediation-r2/evidence/IMAGE-IMMUTABLE-COMPOSE-RUNTIME.red.json b/.agent/specs/image-remediation-r2/evidence/IMAGE-IMMUTABLE-COMPOSE-RUNTIME.red.json new file mode 100644 index 00000000..9429eb81 --- /dev/null +++ b/.agent/specs/image-remediation-r2/evidence/IMAGE-IMMUTABLE-COMPOSE-RUNTIME.red.json @@ -0,0 +1,10 @@ +{ + "schema_version": 1, + "recorded_at": "2026-07-11", + "gate": "full no-cache three-image runtime acceptance", + "source_commit": "76cfb56cac0e410256b719417d4307d45c10f69b", + "observed_failure": "The operator-console runtime target contract required a literal GHCR repository string even though deploy/docker-compose.runtime.yml intentionally requires an exact immutable image reference through ENGRAM_OPERATOR_IMAGE.", + "remediation": "Require the fail-closed ENGRAM_OPERATOR_IMAGE interpolation and preserve the API target assertion; rerun all three exact runtime contracts against the already-scanned images.", + "runtime_recheck": "PASS in 225.565s for operator-console, server, and PostgreSQL contracts", + "result": "RED_REPRODUCED_AND_FIXED_BEFORE_FINAL_GATE" +} diff --git a/.agent/specs/image-remediation-r2/evidence/IMAGE-MANUAL-DISPATCH.red.json b/.agent/specs/image-remediation-r2/evidence/IMAGE-MANUAL-DISPATCH.red.json new file mode 100644 index 00000000..5708b190 --- /dev/null +++ b/.agent/specs/image-remediation-r2/evidence/IMAGE-MANUAL-DISPATCH.red.json @@ -0,0 +1,10 @@ +{ + "task_id": "IMAGE-MANUAL-DISPATCH", + "stack": "GO", + "observed_at": "2026-07-11T07:18:21.9073036Z", + "test_file": "tests/critical/runtime/image_runtime_contract_test.go", + "test_name": "TestDockerReleaseRefFreshnessGuard/manual and main verification-only authority", + "invariant": "Push-to-main and workflow_dispatch are verification-only and can never obtain registry write authority or canonical publication aliases.", + "failure_reason": "R1 combines workflow_dispatch, top-level packages:write, and branch/latest/SemVer alias generators.", + "runner_stdout_excerpt": "workflow_dispatch=True top_level_packages_write=True alias_generators=True; RED IMG-S3-HIGH-003 reproduced" +} diff --git a/.agent/specs/image-remediation-r2/evidence/IMAGE-PAYLOAD-COMMIT-IDENTITY.red.json b/.agent/specs/image-remediation-r2/evidence/IMAGE-PAYLOAD-COMMIT-IDENTITY.red.json new file mode 100644 index 00000000..5d8c59c6 --- /dev/null +++ b/.agent/specs/image-remediation-r2/evidence/IMAGE-PAYLOAD-COMMIT-IDENTITY.red.json @@ -0,0 +1,10 @@ +{ + "schema_version": 1, + "recorded_at": "2026-07-11", + "gate": "ValidatePayload immutable commit identity", + "test": "TestDockerReleaseRefFreshnessGuard/same-run_immutable_artifact_bridge_matrix/payload_immutable_commit_identity", + "observed_failure": "Read-AndValidatePayload rejected the canonical sha-<40 lowercase hex> identity that BuildAndScan emits for audited commit builds.", + "failure": "Release payload validation requires canonical SemVer.", + "remediation": "ValidatePayload and LoadPayload accept either canonical identity already admitted by Assert-CanonicalVersion; PlanPublication and Publish remain SemVer-only.", + "result": "RED_REPRODUCED_BEFORE_FIX" +} diff --git a/.agent/specs/image-remediation-r2/evidence/IMAGE-PUBLICATION-INVARIANTS.tdd.json b/.agent/specs/image-remediation-r2/evidence/IMAGE-PUBLICATION-INVARIANTS.tdd.json new file mode 100644 index 00000000..69816c0b --- /dev/null +++ b/.agent/specs/image-remediation-r2/evidence/IMAGE-PUBLICATION-INVARIANTS.tdd.json @@ -0,0 +1,31 @@ +{ + "schema_version": 1, + "recorded_at": "2026-07-11", + "result": "PASS", + "invariants": { + "canonical_release_tags_only": true, + "manual_dispatch_is_unprivileged": true, + "inline_shell_has_no_raw_context_or_ref_source": true, + "immutable_tag_ruleset_exactly_one_no_bypass": true, + "protected_main_authority_guard_integration_id": 15368, + "protected_main_recovery_user_id": 7106373, + "all_six_destinations_compared_before_first_write": true, + "all_six_destinations_read_back": true, + "moving_aliases": [], + "registry_atomic_cas_claimed": false, + "external_package_admin_trust_boundary": true, + "tracked_file_only_build_context": true + }, + "verification": [ + "actionlint .github/workflows/docker.yaml .github/workflows/docker-publish.yml", + "PowerShell AST parse of scripts/production-gates/build-and-scan-images.ps1", + "go test -tags=critical ./tests/critical/runtime -run ^TestDockerReleaseRefFreshnessGuard$ -count=1", + "git diff --check" + ], + "prove_it": { + "mutation": "changed required authority-guard integration_id from 15368 to 15369", + "expected_failure_observed": true, + "production_code_restored": true, + "focused_test_after_restore": "PASS" + } +} diff --git a/.agent/specs/image-remediation-r2/evidence/IMAGE-PUBLICATION-RACE.red.json b/.agent/specs/image-remediation-r2/evidence/IMAGE-PUBLICATION-RACE.red.json new file mode 100644 index 00000000..7b0bd800 --- /dev/null +++ b/.agent/specs/image-remediation-r2/evidence/IMAGE-PUBLICATION-RACE.red.json @@ -0,0 +1,10 @@ +{ + "task_id": "IMAGE-PUBLICATION-RACE", + "stack": "GO", + "observed_at": "2026-07-11T07:18:21.9073036Z", + "test_file": "tests/critical/runtime/image_runtime_contract_test.go", + "test_name": "TestDockerReleaseRefFreshnessGuard/movement before and after old guard", + "invariant": "Only externally immutable canonical release tags may publish; no stale branch or moved-tag run may write a registry alias.", + "failure_reason": "R1 validates the ref before registry login but publishes later, leaving a post-guard mutation window.", + "runner_stdout_excerpt": "guard_line_index=211 login_line_index=252 publish_line_index=259; RED IMG-S3-HIGH-001 reproduced" +} diff --git a/.agent/specs/image-remediation-r2/evidence/IMAGE-SHARED-BUILDER-VERSION.red.json b/.agent/specs/image-remediation-r2/evidence/IMAGE-SHARED-BUILDER-VERSION.red.json new file mode 100644 index 00000000..37e5e4a3 --- /dev/null +++ b/.agent/specs/image-remediation-r2/evidence/IMAGE-SHARED-BUILDER-VERSION.red.json @@ -0,0 +1,14 @@ +{ + "schema_version": 1, + "recorded_at": "2026-07-11", + "gate": "full no-cache three-image acceptance", + "source_commit": "1f22adce5a86a14e556a715e799fa8562f83ba1f", + "observed_failure": "operator-console target traversed the shared Go builder without VERSION and failed closed at Dockerfile validation", + "secondary_discrepancy": "failure cleanup parsed Compose before mandatory image variables had values", + "remediation": [ + "pass the already validated VERSION build argument to both server and operator-console targets", + "install bounded cleanup-only Compose placeholders before compose down when a build fails early", + "add permanent static regression assertions for both seams" + ], + "result": "RED_REPRODUCED_AND_FIXED_BEFORE_FINAL_GATE" +} diff --git a/.agent/specs/image-remediation-r2/evidence/IMAGE-SHELL-BOUNDARY.red.json b/.agent/specs/image-remediation-r2/evidence/IMAGE-SHELL-BOUNDARY.red.json new file mode 100644 index 00000000..dd10b94c --- /dev/null +++ b/.agent/specs/image-remediation-r2/evidence/IMAGE-SHELL-BOUNDARY.red.json @@ -0,0 +1,10 @@ +{ + "task_id": "IMAGE-SHELL-BOUNDARY", + "stack": "GO", + "observed_at": "2026-07-11T07:18:21.9073036Z", + "test_file": "tests/critical/runtime/image_runtime_contract_test.go", + "test_name": "TestDockerReleaseRefFreshnessGuard/canonical release version and hostile Git refs", + "invariant": "Raw Git refs and Git-derived values never become inline shell source; only a strictly validated canonical release version reaches build metadata.", + "failure_reason": "R1 directly interpolates a raw git-describe output into generated Bash.", + "runner_stdout_excerpt": "valid_git_tag=v1$(printf${IFS}INJECTED); interpolated_value=v1INJECTED; environment_style_value=v1$(printf${IFS}INJECTED)" +} diff --git a/.agent/specs/image-remediation-r2/evidence/IMAGE-TWO-RUNNER-BRIDGE.green.json b/.agent/specs/image-remediation-r2/evidence/IMAGE-TWO-RUNNER-BRIDGE.green.json new file mode 100644 index 00000000..2c7cd9f1 --- /dev/null +++ b/.agent/specs/image-remediation-r2/evidence/IMAGE-TWO-RUNNER-BRIDGE.green.json @@ -0,0 +1,29 @@ +{ + "schema_version": 1, + "recorded_at": "2026-07-11", + "contract": "candidate execution and packages:write publication occur on distinct fresh runners", + "proof": { + "prepare_permissions": ["contents:read"], + "publisher_permissions": ["contents:read", "actions:read", "packages:write"], + "candidate_checkout_in_publisher": false, + "candidate_execution_in_publisher": false, + "artifact_count_before_download": 1, + "artifact_download_selector": "artifact-id", + "payload_regular_files": 5, + "credential_erasure_before_evidence_upload": true + }, + "negative_matrix": [ + "extra-or-duplicate-artifact", + "wrong-artifact-id-name-digest-run", + "expired-artifact", + "extra-payload-file", + "filesystem-symlink-or-reparse", + "bundle-path-traversal", + "archive-path-traversal", + "archive-link-entry", + "archive-hash-or-size-drift", + "manifest-commit-drift" + ], + "command": "go test -tags=critical ./tests/critical/runtime -run ^TestDockerReleaseRefFreshnessGuard$ -count=1", + "result": "PASS" +} diff --git a/.agent/specs/image-remediation-r2/evidence/IMAGE-TWO-RUNNER-BRIDGE.red.log b/.agent/specs/image-remediation-r2/evidence/IMAGE-TWO-RUNNER-BRIDGE.red.log new file mode 100644 index 00000000..2c717984 --- /dev/null +++ b/.agent/specs/image-remediation-r2/evidence/IMAGE-TWO-RUNNER-BRIDGE.red.log @@ -0,0 +1,5 @@ +--- FAIL: TestDockerReleaseRefFreshnessGuard (0.00s) + image_runtime_contract_test.go:71: trusted workflow_run publisher lacks contract "prepare-release:" +FAIL +FAIL github.com/thebtf/engram/tests/critical/runtime 0.544s +FAIL diff --git a/.agent/specs/image-remediation-r2/evidence/LIVE-RULESET-BLOCKER.json b/.agent/specs/image-remediation-r2/evidence/LIVE-RULESET-BLOCKER.json new file mode 100644 index 00000000..7668eb58 --- /dev/null +++ b/.agent/specs/image-remediation-r2/evidence/LIVE-RULESET-BLOCKER.json @@ -0,0 +1,23 @@ +{ + "schema_version": 1, + "observed_at": "2026-07-11", + "repository": "thebtf/engram", + "rulesets": [ + { + "id": 13610955, + "name": "main", + "target": "branch", + "enforcement": "active", + "include": [], + "exclude": [], + "rules": ["deletion", "non_fast_forward"], + "bypass_actors": [] + } + ], + "required_but_missing": [ + "exact refs/tags/v* deletion plus non_fast_forward no-bypass ruleset", + "exact refs/heads/main strict required authority-guard status from integration_id 15368", + "exact User 7106373 pull_request recovery bypass" + ], + "effect": "release publication remains fail-closed before package login" +} diff --git a/.agent/specs/image-remediation-r2/evidence/compose-missing-image.reject.txt b/.agent/specs/image-remediation-r2/evidence/compose-missing-image.reject.txt new file mode 100644 index 00000000..1465c832 --- /dev/null +++ b/.agent/specs/image-remediation-r2/evidence/compose-missing-image.reject.txt @@ -0,0 +1 @@ +error while interpolating services.server.image: required variable ENGRAM_SERVER_IMAGE is missing a value: set ENGRAM_SERVER_IMAGE from the immutable release manifest diff --git a/.agent/specs/image-remediation-r2/evidence/compose-root.config.txt b/.agent/specs/image-remediation-r2/evidence/compose-root.config.txt new file mode 100644 index 00000000..6a114f13 --- /dev/null +++ b/.agent/specs/image-remediation-r2/evidence/compose-root.config.txt @@ -0,0 +1,120 @@ +name: image-remediation-r2-immutable-publish +services: + operator-console: + build: + context: D:\Dev\engram\.agent\worktrees\image-remediation-r2-immutable-publish + dockerfile: Dockerfile + target: operator-console + cap_drop: + - ALL + depends_on: + server: + condition: service_healthy + required: true + environment: + NUXT_OPERATOR_API_TARGET: http://server:37777 + NUXT_PUBLIC_API_BASE: /api + NUXT_PUBLIC_API_DISPLAY_HOST: "" + image: ghcr.io/thebtf/engram-operator-console@sha256:2222222222222222222222222222222222222222222222222222222222222222 + networks: + default: null + ports: + - mode: ingress + host_ip: 0.0.0.0 + target: 3000 + published: "3000" + protocol: tcp + read_only: true + restart: unless-stopped + security_opt: + - no-new-privileges:true + tmpfs: + - /tmp:rw,noexec,nosuid,nodev,uid=65532,gid=65532,mode=0700,size=64m + user: 65532:65532 + postgres: + build: + context: D:\Dev\engram\.agent\worktrees\image-remediation-r2-immutable-publish + dockerfile: deploy/postgres/Dockerfile + cap_drop: + - ALL + environment: + LANG: C.UTF-8 + LC_ALL: C.UTF-8 + POSTGRES_DB: engram + POSTGRES_PASSWORD: test-only + POSTGRES_USER: engram + image: ghcr.io/thebtf/engram-postgres@sha256:3333333333333333333333333333333333333333333333333333333333333333 + networks: + default: null + read_only: true + restart: unless-stopped + security_opt: + - no-new-privileges:true + tmpfs: + - /tmp:rw,noexec,nosuid,nodev,uid=70,gid=70,mode=0700,size=64m + - /var/run/postgresql:rw,noexec,nosuid,nodev,uid=70,gid=70,mode=0775,size=16m + user: 70:70 + volumes: + - type: volume + source: pgdata + target: /var/lib/postgresql/data + volume: {} + server: + build: + context: D:\Dev\engram\.agent\worktrees\image-remediation-r2-immutable-publish + dockerfile: Dockerfile + args: + VERSION: sha-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa + target: server + cap_drop: + - ALL + depends_on: + postgres: + condition: service_healthy + required: true + environment: + DATABASE_DSN: postgres://engram:test-only@postgres:5432/engram?sslmode=disable + ENGRAM_AUTH_ADMIN_TOKEN: "" + ENGRAM_AUTH_DISABLED: "false" + ENGRAM_CRYSTALLIZATION_ENABLED: "false" + ENGRAM_EMBEDDING_API_KEY: "" + ENGRAM_EMBEDDING_MODEL: text-embedding + ENGRAM_EMBEDDING_URL: "" + ENGRAM_GRAPH_ENABLED: "false" + ENGRAM_LIFECYCLE_ENABLED: "false" + ENGRAM_TEMPORAL_TRUTH_ENABLED: "false" + ENGRAM_VAULT_KEY: "" + ENGRAM_VNEXT_ENABLED: "false" + ENGRAM_VNEXT_F_ENABLED: "false" + ENGRAM_WORKER_HOST: 0.0.0.0 + ENGRAM_WORKER_PORT: "37777" + HOME: /var/lib/engram + image: ghcr.io/thebtf/engram@sha256:1111111111111111111111111111111111111111111111111111111111111111 + networks: + default: null + ports: + - mode: ingress + host_ip: 0.0.0.0 + target: 37777 + published: "37777" + protocol: tcp + read_only: true + restart: unless-stopped + security_opt: + - no-new-privileges:true + tmpfs: + - /tmp:rw,noexec,nosuid,nodev,uid=65532,gid=65532,mode=0700,size=64m + user: 65532:65532 + volumes: + - type: volume + source: engramdata + target: /var/lib/engram + volume: {} +networks: + default: + name: image-remediation-r2-immutable-publish_default +volumes: + engramdata: + name: image-remediation-r2-immutable-publish_engramdata + pgdata: + name: image-remediation-r2-immutable-publish_pgdata diff --git a/.agent/specs/image-remediation-r2/evidence/compose-runtime.config.txt b/.agent/specs/image-remediation-r2/evidence/compose-runtime.config.txt new file mode 100644 index 00000000..b4cf4c22 --- /dev/null +++ b/.agent/specs/image-remediation-r2/evidence/compose-runtime.config.txt @@ -0,0 +1,107 @@ +name: deploy +services: + operator-console: + cap_drop: + - ALL + depends_on: + server: + condition: service_healthy + required: true + environment: + NUXT_OPERATOR_API_TARGET: http://server:37777 + NUXT_PUBLIC_API_BASE: /api + NUXT_PUBLIC_API_DISPLAY_HOST: "" + image: ghcr.io/thebtf/engram-operator-console@sha256:2222222222222222222222222222222222222222222222222222222222222222 + networks: + default: null + ports: + - mode: ingress + host_ip: 0.0.0.0 + target: 3000 + published: "3000" + protocol: tcp + read_only: true + restart: unless-stopped + security_opt: + - no-new-privileges:true + tmpfs: + - /tmp:rw,noexec,nosuid,nodev,uid=65532,gid=65532,mode=0700,size=64m + user: 65532:65532 + postgres: + cap_drop: + - ALL + environment: + LANG: C.UTF-8 + LC_ALL: C.UTF-8 + POSTGRES_DB: engram + POSTGRES_PASSWORD: test-only + POSTGRES_USER: engram + image: ghcr.io/thebtf/engram-postgres@sha256:3333333333333333333333333333333333333333333333333333333333333333 + networks: + default: null + read_only: true + restart: unless-stopped + security_opt: + - no-new-privileges:true + tmpfs: + - /tmp:rw,noexec,nosuid,nodev,uid=70,gid=70,mode=0700,size=64m + - /var/run/postgresql:rw,noexec,nosuid,nodev,uid=70,gid=70,mode=0775,size=16m + user: 70:70 + volumes: + - type: volume + source: pgdata + target: /var/lib/postgresql/data + volume: {} + server: + cap_drop: + - ALL + depends_on: + postgres: + condition: service_healthy + required: true + environment: + DATABASE_DSN: postgres://engram:test-only@postgres:5432/engram?sslmode=disable + ENGRAM_AUTH_ADMIN_TOKEN: "" + ENGRAM_AUTH_DISABLED: "false" + ENGRAM_CRYSTALLIZATION_ENABLED: "false" + ENGRAM_EMBEDDING_API_KEY: "" + ENGRAM_EMBEDDING_MODEL: text-embedding + ENGRAM_EMBEDDING_URL: "" + ENGRAM_GRAPH_ENABLED: "false" + ENGRAM_LIFECYCLE_ENABLED: "false" + ENGRAM_TEMPORAL_TRUTH_ENABLED: "false" + ENGRAM_VAULT_KEY: "" + ENGRAM_VNEXT_ENABLED: "false" + ENGRAM_VNEXT_F_ENABLED: "false" + ENGRAM_WORKER_HOST: 0.0.0.0 + ENGRAM_WORKER_PORT: "37777" + HOME: /var/lib/engram + image: ghcr.io/thebtf/engram@sha256:1111111111111111111111111111111111111111111111111111111111111111 + networks: + default: null + ports: + - mode: ingress + host_ip: 0.0.0.0 + target: 37777 + published: "37777" + protocol: tcp + read_only: true + restart: unless-stopped + security_opt: + - no-new-privileges:true + tmpfs: + - /tmp:rw,noexec,nosuid,nodev,uid=65532,gid=65532,mode=0700,size=64m + user: 65532:65532 + volumes: + - type: volume + source: engramdata + target: /var/lib/engram + volume: {} +networks: + default: + name: deploy_default +volumes: + engramdata: + name: deploy_engramdata + pgdata: + name: deploy_pgdata diff --git a/.agent/specs/image-remediation-r2/evidence/healthcheck.coverage.out b/.agent/specs/image-remediation-r2/evidence/healthcheck.coverage.out new file mode 100644 index 00000000..26ed1d37 --- /dev/null +++ b/.agent/specs/image-remediation-r2/evidence/healthcheck.coverage.out @@ -0,0 +1,40 @@ +mode: atomic +github.com/thebtf/engram/cmd/engram-healthcheck/main.go:23.13,25.2 1 0 +github.com/thebtf/engram/cmd/engram-healthcheck/main.go:27.71,28.20 1 3 +github.com/thebtf/engram/cmd/engram-healthcheck/main.go:28.20,31.3 2 1 +github.com/thebtf/engram/cmd/engram-healthcheck/main.go:32.2,34.49 3 2 +github.com/thebtf/engram/cmd/engram-healthcheck/main.go:34.49,37.3 2 1 +github.com/thebtf/engram/cmd/engram-healthcheck/main.go:38.2,38.10 1 1 +github.com/thebtf/engram/cmd/engram-healthcheck/main.go:41.61,43.94 2 18 +github.com/thebtf/engram/cmd/engram-healthcheck/main.go:43.94,45.3 1 1 +github.com/thebtf/engram/cmd/engram-healthcheck/main.go:46.2,46.105 1 17 +github.com/thebtf/engram/cmd/engram-healthcheck/main.go:46.105,48.3 1 3 +github.com/thebtf/engram/cmd/engram-healthcheck/main.go:50.2,51.16 2 14 +github.com/thebtf/engram/cmd/engram-healthcheck/main.go:51.16,53.3 1 0 +github.com/thebtf/engram/cmd/engram-healthcheck/main.go:54.2,58.65 2 14 +github.com/thebtf/engram/cmd/engram-healthcheck/main.go:58.65,60.4 1 1 +github.com/thebtf/engram/cmd/engram-healthcheck/main.go:62.2,63.16 2 14 +github.com/thebtf/engram/cmd/engram-healthcheck/main.go:63.16,65.3 1 2 +github.com/thebtf/engram/cmd/engram-healthcheck/main.go:66.2,67.42 2 12 +github.com/thebtf/engram/cmd/engram-healthcheck/main.go:67.42,69.3 1 1 +github.com/thebtf/engram/cmd/engram-healthcheck/main.go:71.2,73.16 3 11 +github.com/thebtf/engram/cmd/engram-healthcheck/main.go:73.16,75.3 1 0 +github.com/thebtf/engram/cmd/engram-healthcheck/main.go:76.2,76.33 1 11 +github.com/thebtf/engram/cmd/engram-healthcheck/main.go:76.33,78.3 1 1 +github.com/thebtf/engram/cmd/engram-healthcheck/main.go:80.2,82.46 3 10 +github.com/thebtf/engram/cmd/engram-healthcheck/main.go:82.46,84.3 1 0 +github.com/thebtf/engram/cmd/engram-healthcheck/main.go:85.2,85.21 1 10 +github.com/thebtf/engram/cmd/engram-healthcheck/main.go:85.21,87.3 1 1 +github.com/thebtf/engram/cmd/engram-healthcheck/main.go:88.2,89.35 2 9 +github.com/thebtf/engram/cmd/engram-healthcheck/main.go:89.35,91.3 1 0 +github.com/thebtf/engram/cmd/engram-healthcheck/main.go:92.2,93.48 2 9 +github.com/thebtf/engram/cmd/engram-healthcheck/main.go:93.48,95.3 1 1 +github.com/thebtf/engram/cmd/engram-healthcheck/main.go:96.2,96.20 1 8 +github.com/thebtf/engram/cmd/engram-healthcheck/main.go:96.20,98.3 1 2 +github.com/thebtf/engram/cmd/engram-healthcheck/main.go:99.2,100.46 2 6 +github.com/thebtf/engram/cmd/engram-healthcheck/main.go:100.46,102.3 1 0 +github.com/thebtf/engram/cmd/engram-healthcheck/main.go:103.2,103.56 1 6 +github.com/thebtf/engram/cmd/engram-healthcheck/main.go:103.56,105.3 1 1 +github.com/thebtf/engram/cmd/engram-healthcheck/main.go:106.2,106.23 1 5 +github.com/thebtf/engram/cmd/engram-healthcheck/main.go:106.23,108.3 1 3 +github.com/thebtf/engram/cmd/engram-healthcheck/main.go:109.2,109.12 1 2 diff --git a/.agent/testing/image-remediation-r2/behavior-signal.md b/.agent/testing/image-remediation-r2/behavior-signal.md new file mode 100644 index 00000000..ede69b3b --- /dev/null +++ b/.agent/testing/image-remediation-r2/behavior-signal.md @@ -0,0 +1,9 @@ +# IMAGE-REMEDIATION-R2 behavior signal + +- Signal: immutable-image-release-contract success rate. +- Protected user outcome: an operator can deploy and roll back the exact scanned server, operator-console, and PostgreSQL images without a stale branch, moved tag, hostile ref, manual dispatch, or pre-existing registry tag replacing the intended release identity. +- Measurement window: every image workflow run and every production release. +- Target: 100% of main/manual runs are write-free; 100% of release runs either publish the six exact canonical destinations or fail before the first write; zero HIGH/CRITICAL findings; all runtime proof flags pass; zero owned resource residue. +- Method: permanent critical workflow/model fixtures, exact-IID no-cache build/scan/runtime gate, final image-set manifest, GitHub ruleset readback, and registry compare-before-write plan. +- Evidence source: production-readiness master plan invariant 15 and IMAGE-REMEDIATION-R2 row. +- Classification: BEHAVIOR_VERIFIED once the final exact-IID matrix and adversarial publication model are GREEN. diff --git a/.dockerignore b/.dockerignore index 09b411a2..f6439111 100644 --- a/.dockerignore +++ b/.dockerignore @@ -7,6 +7,25 @@ bin/ .gitea .github +# Local secrets and agent credentials must never enter the BuildKit context. +.env +.env.* +!.env.example +*.pem +*.key +*.p12 +*.pfx +*.kdbx +id_rsa +id_ed25519 +.npmrc +.netrc +.git-credentials +secrets/ +.claude/ +.codex/ +.agents/ + # Agent and planning files .agent/ continuity.txt diff --git a/.github/workflows/docker-publish.yml b/.github/workflows/docker-publish.yml index d19ade64..c0f44848 100644 --- a/.github/workflows/docker-publish.yml +++ b/.github/workflows/docker-publish.yml @@ -1,91 +1,308 @@ -name: Build and Publish Docker Image +name: Docker Publish on: - push: - branches: ["main"] - tags: ["v*"] - pull_request: - branches: ["main"] + workflow_run: + workflows: ["Docker"] + types: [completed] -env: - REGISTRY: ghcr.io - IMAGE_NAME: ${{ github.repository }} +permissions: + contents: read jobs: - build: + prepare-release: + if: github.event.workflow_run.conclusion == 'success' runs-on: ubuntu-latest permissions: contents: read - packages: write - + outputs: + version: ${{ steps.preflight.outputs.version }} + commit: ${{ steps.preflight.outputs.commit }} + artifact-id: ${{ steps.upload.outputs.artifact-id }} + artifact-digest: ${{ steps.upload.outputs.artifact-digest }} + artifact-name: ${{ steps.bridge.outputs.artifact_name }} steps: - - name: Checkout - uses: actions/checkout@v4 + - name: Checkout trusted default-branch preparation code + uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4 + with: + ref: main + path: trusted + fetch-depth: 0 + persist-credentials: false + + - name: Independently validate the triggering run, tag, and protected-main provenance + id: preflight + shell: pwsh + env: + REPOSITORY_NAME: ${{ github.repository }} + READ_ONLY_GITHUB_TOKEN: ${{ github.token }} + run: | + pwsh ./trusted/scripts/production-gates/build-and-scan-images.ps1 ` + -Mode ValidateWorkflowRun ` + -EventOnlyValidation ` + -RepositoryRoot ./trusted ` + -WorkflowRunEventPath $env:GITHUB_EVENT_PATH ` + -Repository $env:REPOSITORY_NAME ` + -ExpectedDefaultBranch main ` + -TrustedWorkflowPath .github/workflows/docker.yaml ` + -ExpectedWorkflowName Docker ` + -GitHubToken $env:READ_ONLY_GITHUB_TOKEN ` + -GitHubOutputPath $env:GITHUB_OUTPUT + + - name: Checkout exact validated candidate without workflow credentials + uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4 with: + ref: ${{ steps.preflight.outputs.commit }} + path: candidate fetch-depth: 0 + persist-credentials: false + + - name: Set up Go + uses: actions/setup-go@40f1582b2485089dde7abd97c1529aa768e1baff # v5 + with: + go-version-file: candidate/go.mod + cache: true - - name: Compute version - id: version - run: echo "value=$(git describe --tags --always --dirty 2>/dev/null || echo dev)" >> "$GITHUB_OUTPUT" + - name: Set up Node + uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4 + with: + node-version: "22" + cache: npm + cache-dependency-path: candidate/apps/operator-console/package-lock.json - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 + uses: docker/setup-buildx-action@8d2750c68a42422c14e847fe6c8ac0403b4cbd6f # v3 + + - name: Build, scan, exercise, and export exact image data without package authority + shell: pwsh + env: + RELEASE_VERSION: ${{ steps.preflight.outputs.version }} + GITHUB_TOKEN: "" + GH_TOKEN: "" + CR_PAT: "" + GHCR_TOKEN: "" + run: | + $evidenceRoot = Join-Path $env:RUNNER_TEMP "engram-image-prepare-$env:GITHUB_RUN_ID-$env:GITHUB_RUN_ATTEMPT" + $payloadRoot = Join-Path $env:RUNNER_TEMP "engram-release-payload-data-$env:GITHUB_RUN_ID-$env:GITHUB_RUN_ATTEMPT" + pwsh ./trusted/scripts/production-gates/build-and-scan-images.ps1 ` + -Mode BuildAndScan ` + -RepositoryRoot ./candidate ` + -TrustedOutputRoot $env:RUNNER_TEMP ` + -ServerTag engram:r2-server ` + -OperatorTag engram:r2-operator-console ` + -PostgresTag engram:r2-postgres ` + -Platform linux/amd64 ` + -ArtifactRoot $evidenceRoot ` + -ReleasePayloadPath $payloadRoot ` + -Version $env:RELEASE_VERSION ` + -NoAllowlist - - name: Log in to GitHub Container Registry - if: github.event_name != 'pull_request' - uses: docker/login-action@v3 + - name: Bind the immutable bridge artifact name to this publisher workflow run + id: bridge + shell: pwsh + run: | + Add-Content -Encoding utf8NoBOM -LiteralPath $env:GITHUB_OUTPUT -Value "artifact_name=engram-release-payload-$env:GITHUB_RUN_ID-$env:GITHUB_RUN_ATTEMPT" + + - name: Upload the sole immutable release payload + id: upload + uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4 with: - registry: ${{ env.REGISTRY }} - username: ${{ github.actor }} - password: ${{ secrets.GITHUB_TOKEN }} + name: ${{ steps.bridge.outputs.artifact_name }} + path: ${{ runner.temp }}/engram-release-payload-data-${{ github.run_id }}-${{ github.run_attempt }} + if-no-files-found: error + retention-days: 1 + compression-level: 0 - - name: Extract metadata - id: meta - uses: docker/metadata-action@v5 + publish-images: + needs: prepare-release + runs-on: ubuntu-latest + permissions: + contents: read + actions: read + packages: write + concurrency: + group: engram-image-release-${{ needs.prepare-release.outputs.commit }} + cancel-in-progress: false + steps: + - name: Checkout only trusted default-branch publisher code + uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4 with: - images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} - tags: | - type=ref,event=branch - type=ref,event=tag - type=raw,value=latest,enable={{is_default_branch}} - type=semver,pattern={{version}} - type=semver,pattern={{major}}.{{minor}} - type=sha,prefix= - - - name: Extract operator-console metadata - id: meta_console - uses: docker/metadata-action@v5 + ref: main + path: trusted + fetch-depth: 0 + persist-credentials: false + + - name: Revalidate workflow, tag, rulesets, and protected-main provenance on the fresh runner + id: privileged-preflight + shell: pwsh + env: + REPOSITORY_NAME: ${{ github.repository }} + READ_ONLY_GITHUB_TOKEN: ${{ github.token }} + run: | + pwsh ./trusted/scripts/production-gates/build-and-scan-images.ps1 ` + -Mode ValidateWorkflowRun ` + -RepositoryRoot ./trusted ` + -WorkflowRunEventPath $env:GITHUB_EVENT_PATH ` + -Repository $env:REPOSITORY_NAME ` + -ExpectedDefaultBranch main ` + -TrustedWorkflowPath .github/workflows/docker.yaml ` + -ExpectedWorkflowName Docker ` + -GitHubToken $env:READ_ONLY_GITHUB_TOKEN ` + -GitHubOutputPath $env:GITHUB_OUTPUT + + - name: Confirm preparation and fresh-runner provenance agree + shell: pwsh + env: + PREPARED_VERSION: ${{ needs.prepare-release.outputs.version }} + PREPARED_COMMIT: ${{ needs.prepare-release.outputs.commit }} + REVALIDATED_VERSION: ${{ steps.privileged-preflight.outputs.version }} + REVALIDATED_COMMIT: ${{ steps.privileged-preflight.outputs.commit }} + run: | + if ($env:PREPARED_VERSION -cne $env:REVALIDATED_VERSION -or $env:PREPARED_COMMIT -cne $env:REVALIDATED_COMMIT) { + throw 'Fresh-runner provenance does not match the prepare-release outputs.' + } + + - name: Census the current-run artifact before download + shell: pwsh + env: + EXPECTED_ARTIFACT_ID: ${{ needs.prepare-release.outputs.artifact-id }} + EXPECTED_ARTIFACT_NAME: ${{ needs.prepare-release.outputs.artifact-name }} + EXPECTED_ARTIFACT_DIGEST: ${{ needs.prepare-release.outputs.artifact-digest }} + REPOSITORY_NAME: ${{ github.repository }} + READ_ONLY_GITHUB_TOKEN: ${{ github.token }} + run: | + $evidenceRoot = Join-Path $env:RUNNER_TEMP "engram-publication-evidence-$env:GITHUB_RUN_ID-$env:GITHUB_RUN_ATTEMPT" + pwsh ./trusted/scripts/production-gates/build-and-scan-images.ps1 ` + -Mode ValidateArtifactMetadata ` + -RepositoryRoot ./trusted ` + -TrustedOutputRoot $env:RUNNER_TEMP ` + -ExpectedArtifactID $env:EXPECTED_ARTIFACT_ID ` + -ExpectedArtifactName $env:EXPECTED_ARTIFACT_NAME ` + -ExpectedArtifactDigest $env:EXPECTED_ARTIFACT_DIGEST ` + -CurrentRunID $env:GITHUB_RUN_ID ` + -Repository $env:REPOSITORY_NAME ` + -GitHubToken $env:READ_ONLY_GITHUB_TOKEN ` + -OutputPath (Join-Path $evidenceRoot 'artifact-census.json') + + - name: Download the one censused artifact by immutable ID + uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4 with: - images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}-operator-console - tags: | - type=ref,event=branch - type=ref,event=tag - type=raw,value=latest,enable={{is_default_branch}} - type=semver,pattern={{version}} - type=semver,pattern={{major}}.{{minor}} - type=sha,prefix= - - # Build and push server image - - name: Build and push server image - uses: docker/build-push-action@v6 + artifact-ids: ${{ needs.prepare-release.outputs.artifact-id }} + path: ${{ runner.temp }}/engram-release-payload-download-${{ github.run_id }}-${{ github.run_attempt }} + merge-multiple: true + + - name: Validate the exact regular-file envelope and internal checksums + shell: pwsh + env: + RELEASE_VERSION: ${{ steps.privileged-preflight.outputs.version }} + VALIDATED_COMMIT: ${{ steps.privileged-preflight.outputs.commit }} + run: | + $payloadRoot = Join-Path $env:RUNNER_TEMP "engram-release-payload-download-$env:GITHUB_RUN_ID-$env:GITHUB_RUN_ATTEMPT" + $evidenceRoot = Join-Path $env:RUNNER_TEMP "engram-publication-evidence-$env:GITHUB_RUN_ID-$env:GITHUB_RUN_ATTEMPT" + pwsh ./trusted/scripts/production-gates/build-and-scan-images.ps1 ` + -Mode ValidatePayload ` + -RepositoryRoot ./trusted ` + -TrustedOutputRoot $env:RUNNER_TEMP ` + -PayloadRoot $payloadRoot ` + -ExpectedSha $env:VALIDATED_COMMIT ` + -ReleaseVersion $env:RELEASE_VERSION ` + -OutputPath (Join-Path $evidenceRoot 'payload-validation.json') + + - name: Load validated image archives as data without running candidate code + shell: pwsh + env: + RELEASE_VERSION: ${{ steps.privileged-preflight.outputs.version }} + VALIDATED_COMMIT: ${{ steps.privileged-preflight.outputs.commit }} + run: | + $payloadRoot = Join-Path $env:RUNNER_TEMP "engram-release-payload-download-$env:GITHUB_RUN_ID-$env:GITHUB_RUN_ATTEMPT" + pwsh ./trusted/scripts/production-gates/build-and-scan-images.ps1 ` + -Mode LoadPayload ` + -RepositoryRoot ./trusted ` + -TrustedOutputRoot $env:RUNNER_TEMP ` + -PayloadRoot $payloadRoot ` + -ExpectedSha $env:VALIDATED_COMMIT ` + -ReleaseVersion $env:RELEASE_VERSION + + - name: Compare all six registry destinations before login + shell: pwsh + env: + RELEASE_VERSION: ${{ steps.privileged-preflight.outputs.version }} + REPOSITORY_NAME: ${{ github.repository }} + run: | + $payloadRoot = Join-Path $env:RUNNER_TEMP "engram-release-payload-download-$env:GITHUB_RUN_ID-$env:GITHUB_RUN_ATTEMPT" + $evidenceRoot = Join-Path $env:RUNNER_TEMP "engram-publication-evidence-$env:GITHUB_RUN_ID-$env:GITHUB_RUN_ATTEMPT" + pwsh ./trusted/scripts/production-gates/build-and-scan-images.ps1 ` + -Mode PlanPublication ` + -RepositoryRoot ./trusted ` + -TrustedOutputRoot $env:RUNNER_TEMP ` + -ManifestPath (Join-Path $payloadRoot 'final-image-set.json') ` + -ReleaseVersion $env:RELEASE_VERSION ` + -Registry ghcr.io ` + -Repository $env:REPOSITORY_NAME ` + -OutputPath (Join-Path $evidenceRoot 'pre-login-publication-plan.json') + + - name: Login to GHCR after provenance, payload, local-image, and remote checks pass + uses: docker/login-action@c94ce9fb468520275223c153574b00df6fe4bcc9 # v3 + env: + DOCKER_CONFIG: ${{ runner.temp }}/engram-docker-auth-${{ github.run_id }}-${{ github.run_attempt }} with: - context: . - target: server - push: ${{ github.event_name != 'pull_request' }} - tags: ${{ steps.meta.outputs.tags }} - labels: ${{ steps.meta.outputs.labels }} - build-args: | - VERSION=${{ steps.version.outputs.value }} - cache-from: type=gha - cache-to: type=gha,mode=max - - - name: Build and push operator-console image - uses: docker/build-push-action@v6 + registry: ghcr.io + username: ${{ github.actor }} + password: ${{ github.token }} + + - name: Recompare, publish absent exact identities, and read back all six + shell: pwsh + env: + RELEASE_VERSION: ${{ steps.privileged-preflight.outputs.version }} + VALIDATED_COMMIT: ${{ steps.privileged-preflight.outputs.commit }} + REPOSITORY_NAME: ${{ github.repository }} + DOCKER_CONFIG: ${{ runner.temp }}/engram-docker-auth-${{ github.run_id }}-${{ github.run_attempt }} + run: | + $payloadRoot = Join-Path $env:RUNNER_TEMP "engram-release-payload-download-$env:GITHUB_RUN_ID-$env:GITHUB_RUN_ATTEMPT" + $evidenceRoot = Join-Path $env:RUNNER_TEMP "engram-publication-evidence-$env:GITHUB_RUN_ID-$env:GITHUB_RUN_ATTEMPT" + pwsh ./trusted/scripts/production-gates/build-and-scan-images.ps1 ` + -Mode Publish ` + -RepositoryRoot ./trusted ` + -TrustedOutputRoot $env:RUNNER_TEMP ` + -ManifestPath (Join-Path $payloadRoot 'final-image-set.json') ` + -ReleaseVersion $env:RELEASE_VERSION ` + -ExpectedSha $env:VALIDATED_COMMIT ` + -Registry ghcr.io ` + -Repository $env:REPOSITORY_NAME ` + -OutputPath (Join-Path $evidenceRoot 'publication-result.json') + + - name: Logout and erase the isolated registry credential directory + if: always() + shell: pwsh + env: + DOCKER_CONFIG: ${{ runner.temp }}/engram-docker-auth-${{ github.run_id }}-${{ github.run_attempt }} + run: | + $runnerTemp = [IO.Path]::GetFullPath($env:RUNNER_TEMP).TrimEnd([IO.Path]::DirectorySeparatorChar, [IO.Path]::AltDirectorySeparatorChar) + $dockerConfig = [IO.Path]::GetFullPath($env:DOCKER_CONFIG) + if (-not $dockerConfig.StartsWith($runnerTemp + [IO.Path]::DirectorySeparatorChar, [StringComparison]::OrdinalIgnoreCase)) { + throw "Refusing to erase Docker credentials outside RUNNER_TEMP: $dockerConfig" + } + docker logout ghcr.io + if (Test-Path -LiteralPath $dockerConfig) { + Remove-Item -Force -Recurse -LiteralPath $dockerConfig + } + if (Test-Path -LiteralPath $dockerConfig) { + throw "Docker credential directory still exists after erasure: $dockerConfig" + } + + - name: Validate the exact trusted evidence envelope after credential erasure + shell: pwsh + run: | + $evidenceRoot = Join-Path $env:RUNNER_TEMP "engram-publication-evidence-$env:GITHUB_RUN_ID-$env:GITHUB_RUN_ATTEMPT" + pwsh ./trusted/scripts/production-gates/build-and-scan-images.ps1 ` + -Mode ValidatePublicationEvidence ` + -RepositoryRoot ./trusted ` + -TrustedOutputRoot $env:RUNNER_TEMP ` + -EvidenceRoot $evidenceRoot + + - name: Upload trusted publication evidence after credential erasure + uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4 with: - context: . - target: operator-console - push: ${{ github.event_name != 'pull_request' }} - tags: ${{ steps.meta_console.outputs.tags }} - labels: ${{ steps.meta_console.outputs.labels }} - cache-from: type=gha - cache-to: type=gha,mode=max + name: engram-publication-evidence-${{ github.run_id }}-${{ github.run_attempt }} + path: ${{ runner.temp }}/engram-publication-evidence-${{ github.run_id }}-${{ github.run_attempt }} + if-no-files-found: error + retention-days: 90 diff --git a/.github/workflows/docker.yaml b/.github/workflows/docker.yaml index 49f4c5e8..d20354e6 100644 --- a/.github/workflows/docker.yaml +++ b/.github/workflows/docker.yaml @@ -4,80 +4,61 @@ on: push: branches: [main] tags: ["v*"] + pull_request: + branches: [main] workflow_dispatch: permissions: contents: read - packages: write - -env: - REGISTRY: ghcr.io - IMAGE_NAME: ${{ github.repository }} jobs: - docker: + verify-images: runs-on: ubuntu-latest + permissions: + contents: read steps: - - uses: actions/checkout@v4 + - name: Checkout verification source + uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4 with: - fetch-depth: 0 - - - name: Compute version - id: version - run: echo "value=$(git describe --tags --always --dirty 2>/dev/null || echo dev)" >> "$GITHUB_OUTPUT" - - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 + persist-credentials: false - - name: Login to GHCR - uses: docker/login-action@v3 + - name: Set up Go + uses: actions/setup-go@40f1582b2485089dde7abd97c1529aa768e1baff # v5 with: - registry: ${{ env.REGISTRY }} - username: ${{ github.actor }} - password: ${{ secrets.GITHUB_TOKEN }} + go-version-file: go.mod + cache: true - - name: Extract metadata - id: meta - uses: docker/metadata-action@v5 + - name: Set up Node + uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4 with: - images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} - tags: | - type=ref,event=tag - type=semver,pattern={{version}} - type=semver,pattern={{major}}.{{minor}} - type=raw,value=latest,enable={{is_default_branch}} + node-version: "22" + cache: npm + cache-dependency-path: apps/operator-console/package-lock.json - - name: Extract operator-console metadata - id: meta_console - uses: docker/metadata-action@v5 - with: - images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}-operator-console - tags: | - type=ref,event=tag - type=semver,pattern={{version}} - type=semver,pattern={{major}}.{{minor}} - type=raw,value=latest,enable={{is_default_branch}} + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@8d2750c68a42422c14e847fe6c8ac0403b4cbd6f # v3 - - name: Build and push server image - uses: docker/build-push-action@v6 - with: - context: . - target: server - push: true - tags: ${{ steps.meta.outputs.tags }} - labels: ${{ steps.meta.outputs.labels }} - build-args: | - VERSION=${{ steps.version.outputs.value }} - cache-from: type=gha - cache-to: type=gha,mode=max + - name: Build, scan, and exercise exact images without registry authority + shell: pwsh + env: + IMAGE_VERSION: sha-${{ github.sha }} + EVIDENCE_ROOT: .agent/reports/evidence/production-ready/image-remediation-r2/workflow-verify-${{ github.run_id }}-${{ github.run_attempt }} + run: | + pwsh ./scripts/production-gates/build-and-scan-images.ps1 ` + -Mode BuildAndScan ` + -ServerTag engram:r2-server ` + -OperatorTag engram:r2-operator-console ` + -PostgresTag engram:r2-postgres ` + -Platform linux/amd64 ` + -ArtifactRoot $env:EVIDENCE_ROOT ` + -Version $env:IMAGE_VERSION ` + -NoAllowlist - - name: Build and push operator-console image - uses: docker/build-push-action@v6 + - name: Upload unprivileged verification evidence + if: always() + uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4 with: - context: . - target: operator-console - push: true - tags: ${{ steps.meta_console.outputs.tags }} - labels: ${{ steps.meta_console.outputs.labels }} - cache-from: type=gha - cache-to: type=gha,mode=max + name: image-verification-${{ github.run_id }}-${{ github.run_attempt }} + path: .agent/reports/evidence/production-ready/image-remediation-r2/workflow-verify-${{ github.run_id }}-${{ github.run_attempt }} + if-no-files-found: error + retention-days: 14 diff --git a/Dockerfile b/Dockerfile index fa5790aa..2eb825d9 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,16 +1,7 @@ -# syntax=docker/dockerfile:1 - -# --- Dashboard build stage --- -FROM node:22-bookworm-slim AS dashboard - -WORKDIR /ui -COPY ui/package.json ui/package-lock.json ./ -RUN npm ci -COPY ui/ . -RUN npm run build +# syntax=docker/dockerfile:1@sha256:87999aa3d42bdc6bea60565083ee17e86d1f3339802f543c0d03998580f9cb89 # --- Operator console build stage --- -FROM node:22-bookworm-slim AS operator-console-build +FROM node:22-bookworm-slim@sha256:53ada149d435c38b14476cb57e4a7da73c15595aba79bd6971b547ceb6d018bf AS operator-console-build WORKDIR /workspace/apps/operator-console COPY apps/operator-console/package.json apps/operator-console/package-lock.json ./ @@ -24,14 +15,10 @@ FROM operator-console-build AS operator-console-static-build RUN npm run generate # --- Go build stage --- -FROM golang:1.25.12-bookworm AS builder +FROM golang:1.25.12-bookworm@sha256:a9c020ee3d1508c7be5435c262434e3d3fc1d0e76a11afeb9ddae7d60bc86aa4 AS builder WORKDIR /src -RUN apt-get update && apt-get install -y --no-install-recommends \ - ca-certificates git build-essential \ - && rm -rf /var/lib/apt/lists/* - ENV CGO_ENABLED=1 ENV GOFLAGS="" @@ -41,50 +28,94 @@ RUN go mod download COPY . . # Copy generated operator-console static bundle into static/ for go:embed. -# This replaces the legacy embedded dashboard root inside the server image while -# keeping apps/operator-console as the single frontend source of truth. +# This keeps apps/operator-console as the single frontend source of truth. COPY --from=operator-console-static-build /workspace/apps/operator-console/.output/public/ internal/worker/static/ -# Inject version from git tags -ARG VERSION=dev - -# Build server binary -RUN CGO_ENABLED=1 go build -tags fts5 -ldflags "-X main.Version=${VERSION} -s -w" -o /out/engram-server ./cmd/engram-server +ARG VERSION +ARG TARGETOS=linux +ARG TARGETARCH=amd64 + +# VERSION is data, never shell source. Direct Docker builds must satisfy the +# same whitelist as the release workflow before the value reaches ldflags or +# OCI labels. Numeric prerelease identifiers follow the SemVer leading-zero +# rule; build metadata is intentionally unsupported. +RUN set -eu; \ + release_pattern='^v(0|[1-9][0-9]*)\.(0|[1-9][0-9]*)\.(0|[1-9][0-9]*)(-[0-9A-Za-z-]+(\.[0-9A-Za-z-]+)*)?$'; \ + commit_pattern='^sha-[0-9a-f]{40}$'; \ + if printf '%s\n' "$VERSION" | grep -Eq "$commit_pattern"; then \ + :; \ + elif printf '%s\n' "$VERSION" | grep -Eq "$release_pattern"; then \ + case "$VERSION" in \ + *-*) prerelease="${VERSION#*-}"; old_ifs="$IFS"; IFS='.'; \ + for identifier in $prerelease; do \ + if printf '%s\n' "$identifier" | grep -Eq '^[0-9]+$' \ + && [ "${#identifier}" -gt 1 ] \ + && [ "${identifier#0}" != "$identifier" ]; then \ + echo "invalid numeric prerelease identifier in VERSION" >&2; exit 64; \ + fi; \ + done; IFS="$old_ifs" ;; \ + esac; \ + else \ + echo "VERSION must be canonical SemVer or sha-<40 lowercase hex>" >&2; exit 64; \ + fi + +# Build the accepted CGO server. The ldd transcript is retained in the image as +# auditable proof that every shared-library dependency resolves before the +# binary crosses into the distroless runtime stage. +RUN CGO_ENABLED=1 GOOS=${TARGETOS} GOARCH=${TARGETARCH} go build -trimpath -tags fts5 \ + -ldflags "-X main.Version=${VERSION} -s -w" -o /out/engram-server ./cmd/engram-server \ + && ldd /out/engram-server > /out/engram-server.ldd 2>&1 \ + && ! grep -q "not found" /out/engram-server.ldd \ + && grep -q "=>" /out/engram-server.ldd + +RUN CGO_ENABLED=0 GOOS=${TARGETOS} GOARCH=${TARGETARCH} go build -trimpath \ + -ldflags "-s -w" -o /out/engram-healthcheck ./cmd/engram-healthcheck \ + && ! ldd /out/engram-healthcheck > /out/engram-healthcheck.ldd 2>&1 \ + && grep -q "not a dynamic executable" /out/engram-healthcheck.ldd \ + && install -d -m 0700 /out/server-home + +# Build client-side binary for the existing release target. +RUN CGO_ENABLED=1 GOOS=${TARGETOS} GOARCH=${TARGETARCH} go build -trimpath -tags fts5 \ + -ldflags "-X main.Version=${VERSION} -X github.com/thebtf/engram/internal/version.Daemon=${VERSION} -s -w" \ + -o /out/engram ./cmd/engram -# Build client-side binaries: engram local proxy -RUN CGO_ENABLED=1 go build -tags fts5 -ldflags "-X main.Version=${VERSION} -X github.com/thebtf/engram/internal/version.Daemon=${VERSION} -s -w" -o /out/engram ./cmd/engram # --- Server image --- -FROM debian:bookworm-slim AS server +FROM gcr.io/distroless/base-debian13@sha256:b78832f41c8128046807c24840ebee4f1c18ba7870eed423d8750c272c15e147 AS server -WORKDIR /app - -RUN apt-get update && apt-get install -y --no-install-recommends \ - ca-certificates curl \ - && rm -rf /var/lib/apt/lists/* - -COPY --from=builder /out/engram-server /usr/local/bin/engram-server +COPY --from=builder --chown=65532:65532 --chmod=0755 /out/engram-server /usr/local/bin/engram-server +COPY --from=builder --chown=65532:65532 --chmod=0755 /out/engram-healthcheck /usr/local/bin/engram-healthcheck +COPY --from=builder --chown=65532:65532 --chmod=0444 /out/engram-server.ldd /usr/share/engram/engram-server.ldd +COPY --from=builder --chown=65532:65532 --chmod=0700 /out/server-home /var/lib/engram ENV ENGRAM_WORKER_HOST=0.0.0.0 ENV ENGRAM_WORKER_PORT=37777 +ENV HOME=/var/lib/engram EXPOSE 37777 -HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \ - CMD curl -f http://localhost:37777/health || exit 1 +HEALTHCHECK --interval=10s --timeout=5s --start-period=30s --retries=3 \ + CMD ["/usr/local/bin/engram-healthcheck", "http://127.0.0.1:37777/api/ready"] -ENTRYPOINT ["engram-server"] +USER 65532:65532 +ENTRYPOINT ["/usr/local/bin/engram-server"] # --- Operator console image --- -FROM node:22-bookworm-slim AS operator-console +FROM gcr.io/distroless/nodejs22-debian13@sha256:773a62fbe24a3f8c8b24b16fd59154627f8b406737bc906f83bf1732bc8907dd AS operator-console WORKDIR /app -COPY --from=operator-console-build /workspace/apps/operator-console/.output ./.output +COPY --from=operator-console-build --chown=65532:65532 /workspace/apps/operator-console/.output ./.output +COPY --from=builder --chown=65532:65532 --chmod=0755 /out/engram-healthcheck /usr/local/bin/engram-healthcheck ENV NITRO_HOST=0.0.0.0 ENV NITRO_PORT=3000 ENV NUXT_PUBLIC_API_BASE=/api +ENV NUXT_OPERATOR_API_TARGET=http://server:37777 EXPOSE 3000 -ENTRYPOINT ["node", ".output/server/index.mjs"] +HEALTHCHECK --interval=10s --timeout=5s --start-period=30s --retries=3 \ + CMD ["/usr/local/bin/engram-healthcheck", "http://127.0.0.1:3000/api/ready"] + +USER 65532:65532 +CMD [".output/server/index.mjs"] diff --git a/cmd/engram-healthcheck/main.go b/cmd/engram-healthcheck/main.go new file mode 100644 index 00000000..f134b695 --- /dev/null +++ b/cmd/engram-healthcheck/main.go @@ -0,0 +1,110 @@ +// engram-healthcheck is a shell-free Docker readiness probe. It succeeds only +// when the configured endpoint returns HTTP 200 and exactly {"status":"ready"}. +package main + +import ( + "bytes" + "context" + "encoding/json" + "errors" + "fmt" + "io" + "net/http" + "net/url" + "os" + "time" +) + +const ( + probeTimeout = 3 * time.Second + maxResponseBody = 4096 +) + +func main() { + os.Exit(run(context.Background(), os.Args[1:], os.Stderr)) +} + +func run(parent context.Context, args []string, stderr io.Writer) int { + if len(args) != 1 { + fmt.Fprintln(stderr, "usage: engram-healthcheck http://host:port/api/ready") + return 2 + } + ctx, cancel := context.WithTimeout(parent, probeTimeout) + defer cancel() + if err := checkReady(ctx, args[0]); err != nil { + fmt.Fprintln(stderr, "readiness check failed:", err) + return 1 + } + return 0 +} + +func checkReady(ctx context.Context, endpoint string) error { + parsed, err := url.Parse(endpoint) + if err != nil || (parsed.Scheme != "http" && parsed.Scheme != "https") || parsed.Host == "" { + return errors.New("endpoint must be an absolute HTTP(S) URL") + } + if parsed.User != nil || parsed.RawQuery != "" || parsed.Fragment != "" || parsed.Path != "/api/ready" { + return errors.New("endpoint must contain only the /api/ready path") + } + + request, err := http.NewRequestWithContext(ctx, http.MethodGet, parsed.String(), nil) + if err != nil { + return errors.New("request construction failed") + } + request.Header.Set("Accept", "application/json") + + client := &http.Client{ + Timeout: probeTimeout, + CheckRedirect: func(_ *http.Request, _ []*http.Request) error { + return errors.New("redirects are not readiness") + }, + } + response, err := client.Do(request) + if err != nil { + return errors.New("request failed") + } + defer response.Body.Close() + if response.StatusCode != http.StatusOK { + return fmt.Errorf("unexpected HTTP status %d", response.StatusCode) + } + + limited := io.LimitReader(response.Body, maxResponseBody+1) + body, err := io.ReadAll(limited) + if err != nil { + return errors.New("response read failed") + } + if len(body) > maxResponseBody { + return errors.New("response exceeds size limit") + } + + decoder := json.NewDecoder(bytes.NewReader(body)) + opening, err := decoder.Token() + if err != nil || opening != json.Delim('{') { + return errors.New("response must be a JSON object") + } + if !decoder.More() { + return errors.New("response status is missing") + } + key, err := decoder.Token() + if err != nil || key != "status" { + return errors.New("response must contain only status") + } + var status string + if err := decoder.Decode(&status); err != nil { + return errors.New("response status must be a string") + } + if decoder.More() { + return errors.New("response must contain exactly one status field") + } + closing, err := decoder.Token() + if err != nil || closing != json.Delim('}') { + return errors.New("response object is incomplete") + } + if _, err := decoder.Token(); !errors.Is(err, io.EOF) { + return errors.New("response contains trailing data") + } + if status != "ready" { + return errors.New("response status is not ready") + } + return nil +} diff --git a/cmd/engram-healthcheck/main_test.go b/cmd/engram-healthcheck/main_test.go new file mode 100644 index 00000000..0a163386 --- /dev/null +++ b/cmd/engram-healthcheck/main_test.go @@ -0,0 +1,145 @@ +package main + +import ( + "bytes" + "context" + "fmt" + "net/http" + "net/http/httptest" + "strings" + "testing" +) + +func TestRun_UsageAndReadinessExitCodes(t *testing.T) { + t.Parallel() + + t.Run("usage", func(t *testing.T) { + var stderr bytes.Buffer + if got := run(context.Background(), nil, &stderr); got != 2 { + t.Fatalf("usage exit code = %d, want 2", got) + } + if !strings.Contains(stderr.String(), "usage: engram-healthcheck") { + t.Fatalf("usage error missing: %q", stderr.String()) + } + }) + + t.Run("ready", func(t *testing.T) { + server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, _ *http.Request) { + _, _ = w.Write([]byte(`{"status":"ready"}`)) + })) + t.Cleanup(server.Close) + var stderr bytes.Buffer + if got := run(context.Background(), []string{server.URL + "/api/ready"}, &stderr); got != 0 { + t.Fatalf("ready exit code = %d, stderr = %q", got, stderr.String()) + } + }) + + t.Run("not ready", func(t *testing.T) { + server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, _ *http.Request) { + _, _ = w.Write([]byte(`{"status":"error"}`)) + })) + t.Cleanup(server.Close) + var stderr bytes.Buffer + if got := run(context.Background(), []string{server.URL + "/api/ready"}, &stderr); got != 1 { + t.Fatalf("not-ready exit code = %d, want 1", got) + } + if !strings.Contains(stderr.String(), "readiness check failed") { + t.Fatalf("readiness error missing: %q", stderr.String()) + } + }) +} + +func TestContainerReadiness_ExactReadySucceeds(t *testing.T) { + t.Parallel() + + server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, _ *http.Request) { + w.Header().Set("Content-Type", "application/json") + _, _ = w.Write([]byte(`{"status":"ready"}`)) + })) + t.Cleanup(server.Close) + + if err := checkReady(context.Background(), server.URL+"/api/ready"); err != nil { + t.Fatalf("exact semantic readiness must pass: %v", err) + } +} + +func TestContainerReadiness_NonReadyResponsesFailClosed(t *testing.T) { + t.Parallel() + + tests := []struct { + name string + status int + body string + }{ + {name: "error status", status: http.StatusOK, body: `{"status":"error"}`}, + {name: "wrong case", status: http.StatusOK, body: `{"status":"READY"}`}, + {name: "missing status", status: http.StatusOK, body: `{}`}, + {name: "extra field", status: http.StatusOK, body: `{"status":"ready","version":"dev"}`}, + {name: "duplicate status", status: http.StatusOK, body: `{"status":"error","status":"ready"}`}, + {name: "malformed json", status: http.StatusOK, body: `{"status":`}, + {name: "trailing json", status: http.StatusOK, body: `{"status":"ready"}{}`}, + {name: "http failure", status: http.StatusServiceUnavailable, body: `{"status":"ready"}`}, + {name: "oversized body", status: http.StatusOK, body: `{"status":"ready","padding":"` + strings.Repeat("x", 8192) + `"}`}, + } + + for _, test := range tests { + test := test + t.Run(test.name, func(t *testing.T) { + t.Parallel() + + server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, _ *http.Request) { + w.WriteHeader(test.status) + _, _ = w.Write([]byte(test.body)) + })) + t.Cleanup(server.Close) + + if err := checkReady(context.Background(), server.URL+"/api/ready"); err == nil { + t.Fatal("non-ready response must fail closed") + } + }) + } + + t.Run("redirect", func(t *testing.T) { + t.Parallel() + + target := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, _ *http.Request) { + _, _ = w.Write([]byte(`{"status":"ready"}`)) + })) + t.Cleanup(target.Close) + redirect := httptest.NewServer(http.RedirectHandler(target.URL+"/api/ready", http.StatusFound)) + t.Cleanup(redirect.Close) + + if err := checkReady(context.Background(), redirect.URL+"/api/ready"); err == nil { + t.Fatal("redirect must not turn a different endpoint into readiness") + } + }) + + t.Run("cancelled request", func(t *testing.T) { + t.Parallel() + + ctx, cancel := context.WithCancel(context.Background()) + cancel() + if err := checkReady(ctx, "http://127.0.0.1:1/api/ready"); err == nil { + t.Fatal("cancelled request must fail closed") + } + }) + + t.Run("invalid endpoint", func(t *testing.T) { + t.Parallel() + + for _, endpoint := range []string{ + "file:///tmp/ready", + "http://user:secret@example.test/api/ready", + "http://example.test/health", + "http://example.test/api/ready?token=secret", + } { + endpoint := endpoint + t.Run(fmt.Sprintf("%x", endpoint), func(t *testing.T) { + t.Parallel() + if err := checkReady(context.Background(), endpoint); err == nil { + t.Fatal("invalid endpoint must fail before a request") + } + }) + } + }) +} diff --git a/deploy/docker-compose.runtime.yml b/deploy/docker-compose.runtime.yml index 6d3498ab..2bf6a5bf 100644 --- a/deploy/docker-compose.runtime.yml +++ b/deploy/docker-compose.runtime.yml @@ -1,59 +1,81 @@ +# Pull-only production runtime. Build definitions live in the root compose file; +# this file names exactly the three published artifacts promoted by CI. services: postgres: - image: pgvector/pgvector:pg17 + image: ${ENGRAM_POSTGRES_IMAGE:?set ENGRAM_POSTGRES_IMAGE from the immutable release manifest} + user: "70:70" + read_only: true + cap_drop: ["ALL"] + security_opt: + - no-new-privileges:true + tmpfs: + - /tmp:rw,noexec,nosuid,nodev,uid=70,gid=70,mode=0700,size=64m + - /var/run/postgresql:rw,noexec,nosuid,nodev,uid=70,gid=70,mode=0775,size=16m environment: POSTGRES_DB: engram POSTGRES_USER: engram - POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-engram} + POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:?set POSTGRES_PASSWORD in .env} + LANG: C.UTF-8 + LC_ALL: C.UTF-8 volumes: - pgdata:/var/lib/postgresql/data - ports: - - "${POSTGRES_PORT:-5432}:5432" - healthcheck: - test: ["CMD-SHELL", "pg_isready -U engram -d engram"] - interval: 10s - timeout: 5s - retries: 5 restart: unless-stopped server: - image: ghcr.io/thebtf/engram:main + image: ${ENGRAM_SERVER_IMAGE:?set ENGRAM_SERVER_IMAGE from the immutable release manifest} + user: "65532:65532" + read_only: true + cap_drop: ["ALL"] + security_opt: + - no-new-privileges:true + tmpfs: + - /tmp:rw,noexec,nosuid,nodev,uid=65532,gid=65532,mode=0700,size=64m ports: - - "${WORKER_PORT:-37777}:37777" + - "${WORKER_BIND:-0.0.0.0}:${WORKER_PORT:-37777}:37777" environment: - DATABASE_DSN: "${DATABASE_DSN:-postgres://engram:${POSTGRES_PASSWORD:-engram}@postgres:5432/engram?sslmode=disable}" + HOME: /var/lib/engram + DATABASE_DSN: "${DATABASE_DSN:-postgres://engram:${POSTGRES_PASSWORD}@postgres:5432/engram?sslmode=disable}" ENGRAM_WORKER_HOST: "0.0.0.0" ENGRAM_WORKER_PORT: "37777" ENGRAM_AUTH_ADMIN_TOKEN: "${ENGRAM_AUTH_ADMIN_TOKEN:-}" + ENGRAM_AUTH_DISABLED: "${ENGRAM_AUTH_DISABLED:-false}" ENGRAM_VAULT_KEY: "${ENGRAM_VAULT_KEY:-}" ENGRAM_EMBEDDING_URL: "${ENGRAM_EMBEDDING_URL:-}" ENGRAM_EMBEDDING_MODEL: "${ENGRAM_EMBEDDING_MODEL:-text-embedding}" ENGRAM_EMBEDDING_API_KEY: "${ENGRAM_EMBEDDING_API_KEY:-}" - ENGRAM_LLM_URL: "${ENGRAM_LLM_URL:-}" - ENGRAM_LLM_MODEL: "${ENGRAM_LLM_MODEL:-chat-default}" - ENGRAM_LLM_API_KEY: "${ENGRAM_LLM_API_KEY:-}" ENGRAM_VNEXT_ENABLED: "${ENGRAM_VNEXT_ENABLED:-false}" ENGRAM_LIFECYCLE_ENABLED: "${ENGRAM_LIFECYCLE_ENABLED:-false}" ENGRAM_VNEXT_F_ENABLED: "${ENGRAM_VNEXT_F_ENABLED:-false}" + ENGRAM_GRAPH_ENABLED: "${ENGRAM_GRAPH_ENABLED:-false}" + ENGRAM_TEMPORAL_TRUTH_ENABLED: "${ENGRAM_TEMPORAL_TRUTH_ENABLED:-false}" ENGRAM_CRYSTALLIZATION_ENABLED: "${ENGRAM_CRYSTALLIZATION_ENABLED:-false}" + volumes: + - engramdata:/var/lib/engram depends_on: postgres: condition: service_healthy restart: unless-stopped - operator-web: - image: ghcr.io/thebtf/engram-operator-web:main + operator-console: + image: ${ENGRAM_OPERATOR_IMAGE:?set ENGRAM_OPERATOR_IMAGE from the immutable release manifest} + user: "65532:65532" + read_only: true + cap_drop: ["ALL"] + security_opt: + - no-new-privileges:true + tmpfs: + - /tmp:rw,noexec,nosuid,nodev,uid=65532,gid=65532,mode=0700,size=64m ports: - - "${OPERATOR_WEB_PORT:-3000}:3000" + - "${OPERATOR_CONSOLE_BIND:-0.0.0.0}:${OPERATOR_CONSOLE_PORT:-3000}:3000" environment: - NITRO_HOST: "0.0.0.0" - NITRO_PORT: "3000" + NUXT_OPERATOR_API_TARGET: "http://server:37777" NUXT_PUBLIC_API_BASE: "/api" - NUXT_ENGRAM_API_TARGET: "http://server:37777" + NUXT_PUBLIC_API_DISPLAY_HOST: "${OPERATOR_CONSOLE_API_DISPLAY_HOST:-}" depends_on: server: - condition: service_started + condition: service_healthy restart: unless-stopped volumes: pgdata: + engramdata: diff --git a/deploy/postgres/Dockerfile b/deploy/postgres/Dockerfile new file mode 100644 index 00000000..bc2f1a99 --- /dev/null +++ b/deploy/postgres/Dockerfile @@ -0,0 +1,32 @@ +# syntax=docker/dockerfile:1@sha256:87999aa3d42bdc6bea60565083ee17e86d1f3339802f543c0d03998580f9cb89 + +# Project-owned PostgreSQL image: fixed base, fixed database and extension +# versions, and the upstream OCI initialization contract. +FROM cgr.dev/chainguard/wolfi-base@sha256:02dab76bd852a70556b5b2002195c8a5fdab77d323c433bf6642aab080489795 + +RUN apk add --no-cache \ + bash=5.3-r12 \ + gosu=1.19-r13 \ + postgresql-17=17.10-r1 \ + postgresql-17-client=17.10-r1 \ + postgresql-17-contrib=17.10-r1 \ + postgresql-17-oci-entrypoint=17.10-r1 \ + pgvector-17=0.8.1-r0 \ + && addgroup -S -g 70 postgres \ + && adduser -S -D -H -u 70 -G postgres postgres \ + && install -d -o postgres -g postgres -m 0700 /var/lib/postgresql/data \ + && install -d -o postgres -g postgres -m 0775 /var/run/postgresql + +ENV LANG=C.UTF-8 +ENV LC_ALL=C.UTF-8 +ENV PGDATA=/var/lib/postgresql/data +ENV PATH=/usr/lib/postgresql17/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/sbin:/sbin:/bin + +EXPOSE 5432 + +HEALTHCHECK --interval=10s --timeout=5s --start-period=30s --retries=5 \ + CMD ["pg_isready", "-U", "engram", "-d", "engram"] + +USER 70:70 +ENTRYPOINT ["/usr/bin/docker-entrypoint.sh"] +CMD ["postgres"] diff --git a/docker-compose.yml b/docker-compose.yml index edab76b8..75fa4b1e 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,85 +1,94 @@ -# Engram — Server Stack -# -# Provides: PostgreSQL + pgvector, Engram Server (API + MCP SSE on single port) -# Client (hooks + MCP proxy) runs locally on each workstation. -# -# Usage: -# cp .env.example .env # edit with your settings -# docker compose up -d -# -# See docs/DEPLOYMENT.md for full setup instructions. - +# Engram production-shaped local stack. +# PostgreSQL is intentionally internal-only; expose it explicitly only for a +# bounded maintenance session. Server and operator state survive recreation in +# named volumes owned by the non-root image users. services: postgres: - image: pgvector/pgvector:pg17 + image: ${ENGRAM_POSTGRES_IMAGE:?set ENGRAM_POSTGRES_IMAGE from the immutable release manifest} + build: + context: . + dockerfile: deploy/postgres/Dockerfile + user: "70:70" + read_only: true + cap_drop: ["ALL"] + security_opt: + - no-new-privileges:true + tmpfs: + - /tmp:rw,noexec,nosuid,nodev,uid=70,gid=70,mode=0700,size=64m + - /var/run/postgresql:rw,noexec,nosuid,nodev,uid=70,gid=70,mode=0775,size=16m environment: POSTGRES_DB: engram POSTGRES_USER: engram - POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-engram} + POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:?set POSTGRES_PASSWORD in .env} + LANG: C.UTF-8 + LC_ALL: C.UTF-8 volumes: - pgdata:/var/lib/postgresql/data - ports: - - "${POSTGRES_PORT:-5432}:5432" - healthcheck: - test: ["CMD-SHELL", "pg_isready -U engram -d engram"] - interval: 10s - timeout: 5s - retries: 5 restart: unless-stopped - # Worker with integrated MCP SSE (single port, single process) server: - image: ghcr.io/thebtf/engram:main - # To build locally instead: docker compose build server + image: ${ENGRAM_SERVER_IMAGE:?set ENGRAM_SERVER_IMAGE from the immutable release manifest} build: context: . target: server + args: + VERSION: ${ENGRAM_BUILD_VERSION:?set ENGRAM_BUILD_VERSION to vMAJOR.MINOR.PATCH[-prerelease] or sha-} + user: "65532:65532" + read_only: true + cap_drop: ["ALL"] + security_opt: + - no-new-privileges:true + tmpfs: + - /tmp:rw,noexec,nosuid,nodev,uid=65532,gid=65532,mode=0700,size=64m ports: - - "${WORKER_PORT:-37777}:37777" + - "${WORKER_BIND:-0.0.0.0}:${WORKER_PORT:-37777}:37777" environment: - # Names below match exactly what the Go server reads. Do not reintroduce - # legacy names (ENGRAM_API_TOKEN, ENGRAM_EMBEDDING_BASE_URL/MODEL_NAME, - # ENGRAM_LLM_*, ENGRAM_FALKORDB_*) — the code ignores them. - # Defaults to the bundled postgres service; set DATABASE_DSN in .env to - # point at an external database instead. - DATABASE_DSN: "${DATABASE_DSN:-postgres://engram:${POSTGRES_PASSWORD:-engram}@postgres:5432/engram?sslmode=disable}" + HOME: /var/lib/engram + DATABASE_DSN: "${DATABASE_DSN:-postgres://engram:${POSTGRES_PASSWORD}@postgres:5432/engram?sslmode=disable}" ENGRAM_WORKER_HOST: "0.0.0.0" ENGRAM_WORKER_PORT: "37777" ENGRAM_AUTH_ADMIN_TOKEN: "${ENGRAM_AUTH_ADMIN_TOKEN:-}" ENGRAM_AUTH_DISABLED: "${ENGRAM_AUTH_DISABLED:-false}" ENGRAM_VAULT_KEY: "${ENGRAM_VAULT_KEY:-}" - # Embedding (semantic memory). Empty URL = embedding disabled (FTS-only recall). ENGRAM_EMBEDDING_URL: "${ENGRAM_EMBEDDING_URL:-}" ENGRAM_EMBEDDING_MODEL: "${ENGRAM_EMBEDDING_MODEL:-text-embedding}" ENGRAM_EMBEDDING_API_KEY: "${ENGRAM_EMBEDDING_API_KEY:-}" - # vNext feature flags (all default OFF; flag-OFF == v6.4.15 byte-identical). ENGRAM_VNEXT_ENABLED: "${ENGRAM_VNEXT_ENABLED:-false}" ENGRAM_LIFECYCLE_ENABLED: "${ENGRAM_LIFECYCLE_ENABLED:-false}" ENGRAM_VNEXT_F_ENABLED: "${ENGRAM_VNEXT_F_ENABLED:-false}" ENGRAM_GRAPH_ENABLED: "${ENGRAM_GRAPH_ENABLED:-false}" ENGRAM_TEMPORAL_TRUTH_ENABLED: "${ENGRAM_TEMPORAL_TRUTH_ENABLED:-false}" ENGRAM_CRYSTALLIZATION_ENABLED: "${ENGRAM_CRYSTALLIZATION_ENABLED:-false}" + volumes: + - engramdata:/var/lib/engram depends_on: postgres: condition: service_healthy restart: unless-stopped operator-console: - image: ghcr.io/thebtf/engram-operator-console:main - # To build locally instead: docker compose build operator-console + image: ${ENGRAM_OPERATOR_IMAGE:?set ENGRAM_OPERATOR_IMAGE from the immutable release manifest} build: context: . target: operator-console + user: "65532:65532" + read_only: true + cap_drop: ["ALL"] + security_opt: + - no-new-privileges:true + tmpfs: + - /tmp:rw,noexec,nosuid,nodev,uid=65532,gid=65532,mode=0700,size=64m ports: - - "${OPERATOR_CONSOLE_PORT:-3000}:3000" + - "${OPERATOR_CONSOLE_BIND:-0.0.0.0}:${OPERATOR_CONSOLE_PORT:-3000}:3000" environment: NUXT_OPERATOR_API_TARGET: "http://server:37777" NUXT_PUBLIC_API_BASE: "/api" NUXT_PUBLIC_API_DISPLAY_HOST: "${OPERATOR_CONSOLE_API_DISPLAY_HOST:-}" depends_on: server: - condition: service_started + condition: service_healthy restart: unless-stopped volumes: pgdata: + engramdata: diff --git a/docs/DEPLOYMENT.md b/docs/DEPLOYMENT.md index 60c79e8b..5e7f9dde 100644 --- a/docs/DEPLOYMENT.md +++ b/docs/DEPLOYMENT.md @@ -1,338 +1,151 @@ # Deployment Guide -Engram uses a **client-server architecture** with a separate promoted browser host for the -new operator control plane: - -- **Server** (Docker on remote host): Worker (API + MCP) + PostgreSQL -- **Operator Console** (Docker on remote host): promoted `apps/operator-console` - browser host, typically running as an internal upstream on `:3000` -- **Public browser origin**: normally the worker origin itself (`:37777`) when - `ENGRAM_OPERATOR_CONSOLE_URL` is set and the worker proxies browser routes to - the promoted console upstream while keeping `/api/*` local -- **Client** (local workstation): Claude Code plugin (hooks + HTTP MCP) - -## Token Model (v6) - -Two distinct credential tiers, host-pinned: - -- **`ENGRAM_AUTH_ADMIN_TOKEN`** — Operator key. Set ONLY in the server-host - environment (Docker compose `.env` / Unraid template / systemd unit). - Grants admin-grade access. **MUST NOT be placed on a workstation.** -- **`ENGRAM_TOKEN`** — Per-workstation API token (worker keycard). Issued - via the dashboard `/tokens` page after admin login. Each workstation - gets its own. Lives in `~/.claude/settings.json` env or the plugin's - `user_config.api_token`. **MUST NOT be set on the server host.** - -A workstation that starts with `ENGRAM_URL` set but `ENGRAM_TOKEN` empty -exits with a fatal stderr line — replacing the pre-v6 silent -graceful-degrade to `loom_*-only` that masked PR #203's regression. - -Keycard issuance, listing, revocation: `/api/auth/tokens` endpoints. -These require an admin browser session cookie. Bearer-token callers -(operator key OR keycard) are rejected with 403. - -``` - ┌─── Workstation A ────────────────┐ ┌─── Server (Docker) ──────────────┐ - │ │ │ │ - │ Claude Code │ │ ┌──────────────────────────┐ │ - │ ├── hooks ──POST──────────────────→ │ │ Worker :37777 │ │ - │ └── plugin ──HTTP─/mcp────────────→ │ │ /api/* (hooks+dashboard)│ │ - │ │ │ │ /mcp (Streamable HTTP)│ │ - ├─── Workstation B ────────────────┤ │ │ /sse (SSE, legacy) │ │ - │ (same setup, shared brain) │ │ └────────────┬─────────────┘ │ - └──────────────────────────────────┘ │ │ │ - │ ┌────────────▼─────────────┐ │ - │ │ PostgreSQL + pgvector │ │ - │ │ :5432 │ │ - │ └──────────────────────────┘ │ - └──────────────────────────────────┘ -``` - ---- - -## Server Setup - -### Option A: Docker Compose (recommended) - -```bash -# Clone and configure -git clone https://github.com/thebtf/engram.git -cd engram - -# Create .env file -cat > .env << 'EOF' -POSTGRES_PASSWORD=change-me-in-production -API_TOKEN=your-secret-token -EMBEDDING_PROVIDER=openai -EMBEDDING_BASE_URL=http://localhost:4000/v1 -EMBEDDING_API_KEY=your-litellm-key -EMBEDDING_MODEL_NAME=openai/Qwen/Qwen3-Embedding-8B -EMBEDDING_DIMENSIONS=4096 -EOF - -# Start the stack -docker compose up -d -``` - -Services started: -| Service | Port | Purpose | -|---------|------|---------| -| `postgres` | 5432 | PostgreSQL 17 + pgvector | -| `server` | 37777 | Worker API + MCP SSE + public browser origin when root proxy is enabled | -| `operator-console` | 3000 | Internal promoted operator-console upstream (optional direct bind for debugging) | - -Verify: -```bash -curl http://localhost:37777/health -# {"status":"ok", ...} -curl http://localhost:3000/ -# operator console HTML -``` - -Local reproducible smoke for the promoted host path: - -```powershell -pwsh -NoProfile -File scripts/smoke-operator-console.ps1 +Engram production deployment is a three-image stack: PostgreSQL, server, and +operator console. Production Compose intentionally has no moving image default. +Every deployment starts from the post-logout `publication-result.json` +evidence emitted by the release workflow for one canonical tag such as +`v6.43.0-rc.1`. + +## Immutable image selection + +Set all three identities before parsing either Compose file: + +```dotenv +ENGRAM_SERVER_IMAGE=ghcr.io/thebtf/engram@sha256: +ENGRAM_OPERATOR_IMAGE=ghcr.io/thebtf/engram-operator-console@sha256: +ENGRAM_POSTGRES_IMAGE=ghcr.io/thebtf/engram-postgres@sha256: +POSTGRES_PASSWORD= +ENGRAM_AUTH_ADMIN_TOKEN= ``` -This script: +The same release is also discoverable through exactly two tags per image: -- builds the current-source `server` and `operator-console` images -- brings up `postgres + server + operator-console` -- checks the dedicated browser host, the worker root proxy, and `/api` -- validates issue mutation flow through the promoted host path +- the full canonical release tag, for example `v6.43.0-rc.1`; +- `sha-`. -For remote verification, use `scripts/smoke-operator-console-remote.ps1` with an -explicit `-BaseUrl` for the actual deployed browser surface. Do not assume the -local compose default `:3000` is the live public address on every server. +`main`, `latest`, branch, major, and minor aliases are not release identities. +Do not replace the digest-pinned values above with moving tags. -### Option B: Unraid - -1. **PostgreSQL**: Install `pgvector/pgvector:pg17` from Community Applications (or use existing PostgreSQL instance). Create database `engram` with user `engram`. - -2. **Engram**: Create a Docker container manually or use your own template: - - Image: `ghcr.io/thebtf/engram:main` - - Configure `DATABASE_DSN` to point to your PostgreSQL instance - - Set `ENGRAM_API_TOKEN` for security - - Configure embedding provider (LiteLLM recommended) - - Map port `37777` - -3. **Enable pgvector** on first run: - ```sql - -- Connect to your PostgreSQL and run: - CREATE EXTENSION IF NOT EXISTS vector; - ``` - The worker runs this automatically on startup, but your PostgreSQL user needs the `CREATE EXTENSION` privilege. - -### Option C: Manual Docker +Validate and start the pull-only stack: ```bash -# 1. Start PostgreSQL with pgvector -docker run -d --name cmplus-postgres \ - -e POSTGRES_DB=engram \ - -e POSTGRES_USER=engram \ - -e POSTGRES_PASSWORD=change-me \ - -p 5432:5432 \ - -v cmplus-pgdata:/var/lib/postgresql/data \ - pgvector/pgvector:pg17 - -# 2. Build the server image -docker build --target server -t engram-server . - -# 2b. Build the operator console image -docker build --target operator-console -t engram-operator-console . - -# 3. Start server (worker + MCP SSE on single port) -docker run -d --name engram-server \ - -e DATABASE_DSN="postgres://engram:change-me@host.docker.internal:5432/engram?sslmode=disable" \ - -e ENGRAM_API_TOKEN="your-secret-token" \ - -e ENGRAM_OPERATOR_CONSOLE_URL="http://host.docker.internal:3000" \ - -e ENGRAM_EMBEDDING_PROVIDER=openai \ - -e ENGRAM_EMBEDDING_BASE_URL=http://host.docker.internal:4000/v1 \ - -e ENGRAM_EMBEDDING_DIMENSIONS=4096 \ - -p 37777:37777 \ - engram-server - -# 4. Start promoted operator console -docker run -d --name engram-operator-console \ - -e NUXT_OPERATOR_API_TARGET="http://host.docker.internal:37777" \ - -e NUXT_PUBLIC_API_BASE="/api" \ - -p 3000:3000 \ - engram-operator-console +docker compose -f deploy/docker-compose.runtime.yml config +docker compose -f deploy/docker-compose.runtime.yml pull +docker compose -f deploy/docker-compose.runtime.yml up -d ``` ---- - -## Client Setup - -The client runs locally on each workstation. It connects to the remote server via the engram plugin. - -### Option A: Plugin Install (recommended) - -1. **Set environment variables** (add to shell profile or system environment): - - **macOS / Linux** (`~/.bashrc` or `~/.zshrc`): - ```bash - export ENGRAM_URL=http://your-server:37777/mcp - export ENGRAM_API_TOKEN=your-secret-token - ``` - - **Windows** (PowerShell as admin): - ```powershell - [Environment]::SetEnvironmentVariable("ENGRAM_URL", "http://your-server:37777/mcp", "User") - [Environment]::SetEnvironmentVariable("ENGRAM_API_TOKEN", "your-secret-token", "User") - ``` - -2. **Install the plugin** from [GitHub Releases](https://github.com/thebtf/engram/releases): - - **macOS / Linux:** - ```bash - curl -sSL https://raw.githubusercontent.com/thebtf/engram/main/scripts/install.sh | bash - ``` - - **Windows (PowerShell):** - ```powershell - irm https://raw.githubusercontent.com/thebtf/engram/main/scripts/install.ps1 | iex - ``` - -3. **Restart Claude Code** — the plugin uses Streamable HTTP MCP to connect directly to the server. No proxy binary needed. - -4. **Verify** — in Claude Code, run `/engram:doctor` to check connectivity. - -### Option B: Manual Setup - -1. **Set environment variables** as described in Option A. - -2. **Clone or download** the `plugin/` directory from the repo. - -3. **Register the plugin** — add to `~/.claude/settings.json`: - ```json - { - "projects": { - "*": { - "plugins": ["path/to/engram/plugin"] - } - } - } - ``` - -4. **Restart Claude Code.** - -### Option C: stdio Proxy (for non-HTTP MCP clients) - -If your MCP client does not support HTTP transport, use the stdio-to-SSE proxy: +The root `docker-compose.yml` uses the same required image variables and also +contains local build definitions. The image acceptance gate sets them to exact +local image IDs before exercising the stack. A direct source build also sets +`ENGRAM_BUILD_VERSION` to the canonical release version or +`sha-`; the Dockerfile rejects an absent or untrusted value. + +## Release activation prerequisite + +The release workflow fails before registry login unless GitHub reports exactly +one active tag-target repository ruleset with all of these properties: + +- include is exactly `refs/tags/v*` and exclusions are empty; +- deletion and non-fast-forward updates are blocked; +- bypass actors are empty. + +It also requires exactly one active branch-target ruleset for +`refs/heads/main` with no exclusions, deletion and non-fast-forward protection, +strict status checks, and exactly one `authority-guard` status owned by GitHub +Actions (`integration_id: 15368`). The only recovery bypass is exactly one +`User` actor, ID `7106373`, in `pull_request` mode. A missing integration ID, a +same-name status from another integration, zero/duplicate bypass actors, or an +always-bypass actor stops the release. + +The repository currently needs this operator bootstrap before release +publication can activate. The workflow does not create or weaken repository +rules. + +GitHub Container Registry does not provide this project with an atomic tag CAS +contract. Engram therefore uses a repository-controlled single-writer model. +The default-branch publisher uses two fresh runners: + +1. `prepare-release` has only `contents: read`. Trusted default-branch code + validates the event/tag/rulesets, checks out the exact candidate without + persisted credentials, builds from a tracked-file-only Git archive, runs the + full scan/runtime gate, and uploads one immutable five-file image-data + bundle. The bundle exposes the upload artifact ID and SHA-256 digest. +2. `publish-images` alone has `actions: read` and `packages: write`. It checks + out only trusted default-branch code, repeats the full event/API/tag/main + provenance check, requires the current workflow run to contain exactly the + expected artifact ID/name/digest and no other artifact, downloads by ID, + rejects extra files, links, traversal, or checksum drift, and loads the three + exact image archives as data without running candidate code. +3. The fresh publisher compares all six destinations before login, logs in only + after every check passes, re-compares before the first write, publishes only + absent exact identities, reads back all six, logs out, removes the isolated + Docker credential directory, validates the exact evidence envelope, and + only then uploads publication evidence. + +A package administrator or external PAT can still mutate package state outside +the repository workflow; that is an explicit operational trust boundary and +must be restricted by organization policy. The repository currently lacks the +required immutable-tag and strict `authority-guard` rulesets, so release +publication remains fail-closed until an operator installs both. + +## Runtime contract + +- PostgreSQL: version 17.10, pgvector 0.8.1, UID/GID 70, persistent + `/var/lib/postgresql/data`. +- Server: UID/GID 65532, read-only root filesystem, persistent + `HOME=/var/lib/engram`, semantic health probe on `/api/ready`. +- Operator console: UID/GID 65532, read-only root filesystem, + `NUXT_OPERATOR_API_TARGET=http://server:37777`, semantic proxied readiness. +- Every service drops all capabilities and enables `no-new-privileges`; + bounded tmpfs mounts cover runtime-only writable paths. + +The server `/health` endpoint is liveness. During failed asynchronous +initialization it can remain HTTP 200 while reporting an error. Docker health +uses `/api/ready` and accepts only the exact JSON object: ```json -{ - "mcpServers": { - "engram": { - "command": "/path/to/engram-mcp-stdio-proxy", - "args": ["--url", "http://your-server:37777", "--token", "your-token"] - } - } -} +{"status":"ready"} ``` -> **Note:** Claude Code natively supports HTTP MCP — prefer Option A. - ---- - -## Embedding Configuration - -Engram supports two embedding providers: - -### LiteLLM + Qwen3-Embedding-8B (recommended) - -High-quality 4096-dimensional embeddings via LiteLLM proxy: - -```env -ENGRAM_EMBEDDING_PROVIDER=openai -ENGRAM_EMBEDDING_BASE_URL=http://your-litellm:4000/v1 -ENGRAM_EMBEDDING_API_KEY=your-key -ENGRAM_EMBEDDING_MODEL_NAME=openai/Qwen/Qwen3-Embedding-8B -ENGRAM_EMBEDDING_DIMENSIONS=4096 -``` - -### Note on Legacy ONNX Provider - -The built-in ONNX BGE provider has been removed. Only the OpenAI-compatible REST API provider is available. Set `ENGRAM_EMBEDDING_PROVIDER=openai` and configure `ENGRAM_EMBEDDING_BASE_URL`, `ENGRAM_EMBEDDING_API_KEY`, and `ENGRAM_EMBEDDING_MODEL_NAME`. - -> **Note:** Changing embedding dimensions on an existing database triggers migration 020, which **truncates all vector data** and re-creates indexes. This is irreversible. - ---- - -## Environment Variables Reference - -### Server Variables - -| Variable | Default | Description | -|----------|---------|-------------| -| `DATABASE_DSN` | (required) | PostgreSQL connection string | -| `ENGRAM_WORKER_HOST` | `0.0.0.0` | Worker bind address | -| `ENGRAM_WORKER_PORT` | `37777` | Worker HTTP port (API + MCP) | -| `ENGRAM_API_TOKEN` | (empty) | Auth token for all endpoints | -| `ENGRAM_EMBEDDING_PROVIDER` | `openai` | Embedding provider (`openai`) | -| `ENGRAM_EMBEDDING_BASE_URL` | `https://api.openai.com/v1` | Embedding API URL | -| `ENGRAM_EMBEDDING_API_KEY` | (empty) | Embedding API key | -| `ENGRAM_EMBEDDING_MODEL_NAME` | `text-embedding-3-small` | Model identifier | -| `ENGRAM_EMBEDDING_DIMENSIONS` | `4096` | Vector dimensions | -| `ENGRAM_EMBEDDING_TRUNCATE` | `true` | Truncate embeddings to fit dimensions | -| `ENGRAM_GRAPH_PROVIDER` | (empty) | `falkordb` to enable graph backend | -| `ENGRAM_FALKORDB_ADDR` | (empty) | FalkorDB address (e.g. `falkordb:6379`) | -| `ENGRAM_FALKORDB_PASSWORD` | (empty) | FalkorDB password | -| `ENGRAM_FALKORDB_GRAPH_NAME` | `engram` | FalkorDB graph name | -| `DATABASE_MAX_CONNS` | `10` | PostgreSQL connection pool size | - -### Client Variables (set on each workstation) - -| Variable | Default | Description | -|----------|---------|-------------| -| `ENGRAM_URL` | (required) | Server MCP endpoint (e.g. `http://server:37777/mcp`) | -| `ENGRAM_API_TOKEN` | (empty) | Auth token (same as server's `ENGRAM_API_TOKEN`) | - ---- - -## Security - -- **Always set `ENGRAM_API_TOKEN`** in production. Without it, anyone with network access can read/write your observations. -- Token auth uses constant-time comparison (timing-attack safe). -- `DATABASE_DSN` contains credentials — never commit it to source control. -- The worker binds to `0.0.0.0` by default — restrict with firewall rules or set `ENGRAM_WORKER_HOST=127.0.0.1` for local-only access. - ---- - -## Health Checks +Verify the running stack: ```bash -# Server health -curl http://your-server:37777/health - -# MCP Streamable HTTP (with token) -curl -X POST -H "Authorization: Bearer your-token" \ - -H "Content-Type: application/json" \ - http://your-server:37777/mcp - -# MCP SSE (legacy, with token) -curl -H "Authorization: Bearer your-token" http://your-server:37777/sse +docker compose -f deploy/docker-compose.runtime.yml ps +curl --fail http://localhost:37777/health +curl --fail http://localhost:37777/api/ready +curl --fail http://localhost:3000/api/ready ``` ---- +## Backup, upgrade, and rollback -## Upgrading +Before upgrade, create a PostgreSQL logical backup and prove it restores into a +fresh database. Keep the named data volumes when recreating containers. Volumes +created by the former UID 999 PostgreSQL image require the documented one-time +ownership migration to UID/GID 70 before the new database image can start; the +critical runtime suite proves the fail-closed and migrated cases. -```bash -# Docker Compose -docker compose pull -docker compose up -d +Rollback uses the three digest identities from the preceding accepted release +manifest. Change all three `ENGRAM_*_IMAGE` values as one set, recreate the +stack without deleting named volumes, then verify PostgreSQL version/vector, +retained data, direct readiness, and operator-proxied readiness. -# Unraid -# Update the container from the Docker tab (check for updates) +## Reproduce image acceptance -# Client (macOS/Linux) -curl -sSL https://raw.githubusercontent.com/thebtf/engram/main/scripts/install.sh | bash +Run from a clean candidate commit on a Docker host with Docker Scout: -# Client (Windows) -irm https://raw.githubusercontent.com/thebtf/engram/main/scripts/install.ps1 | iex +```powershell +pwsh ./scripts/production-gates/build-and-scan-images.ps1 ` + -Mode BuildAndScan ` + -ServerTag engram:r2-server ` + -OperatorTag engram:r2-operator-console ` + -PostgresTag engram:r2-postgres ` + -Platform linux/amd64 ` + -ArtifactRoot .agent/reports/evidence/production-ready/image-remediation-r2 ` + -Version sha- ` + -NoAllowlist ``` -Migrations run automatically on startup. No manual database changes needed. +This performs no-cache builds from tracked files only, exact-ID HIGH/CRITICAL +scans without allowlists, the permanent runtime/negative matrix, PostgreSQL +recreation/durability proof, and prefix-scoped cleanup verification. It does +not push a registry tag. diff --git a/docs/PRODUCTION-TESTING-PLAYBOOK.md b/docs/PRODUCTION-TESTING-PLAYBOOK.md index edb714c2..0ba42ab1 100644 --- a/docs/PRODUCTION-TESTING-PLAYBOOK.md +++ b/docs/PRODUCTION-TESTING-PLAYBOOK.md @@ -1,184 +1,175 @@ -# Production Testing Playbook — engram +# Production Testing Playbook — Engram Images -**Purpose:** Customer-mode walkthrough of the engram product. Run before every -release. The agent (or human reviewer) walks through the scenarios pretending -to be a user with no internal knowledge — the public docs and this playbook -are the only allowed inputs. - -**Bootstrap version:** v6.29.0 — refreshed for the split runtime stack -(`server` + `operator-web`). Future releases extend the scenario list. - -## Scope - -The playbook covers the following surfaces: - -| # | Surface | Binary / Component | -|---|---------|--------------------| -| 1 | Server | `cmd/engram-server` — HTTP API + gRPC authority on :37777 | -| 2 | CLI client | `cmd/engram` — stdio MCP proxy invoked by Claude Code | -| 3 | Operator Web | `apps/operator-web` — Nuxt control plane on :3000 proxying `/api/*` to the server | -| 4 | Claude Code plugin | `plugin/engram` — installed via `/plugin marketplace add thebtf/engram-marketplace` | - -Out of scope for this bootstrap: `cmd/engram-import`, full Unraid deployment -flow (covered separately by `docs/DEPLOYMENT.md`), backup/restore, and full -legacy-dashboard removal. If a scenario still requires the legacy dashboard, -record that as a cutover gap rather than silently treating it as canonical. +Run this playbook before image publication. It validates the same three-image +contract customers deploy: `postgres`, `server`, and `operator-console`. +This is the image acceptance lane, not a substitute for the repository-wide +critical suite or customer-mode release emulation. ## Prerequisites -- Go 1.25+ (`go version`) -- Docker (for postgres dependency in scenario S2) -- Node 22+ (for building `apps/operator-web` in scenario S1) -- A running engram runtime stack for scenarios S2/S3/S4: - - server at `http://:37777` - - operator web at `http://:3000` -- Claude Code CLI installed (for scenario S4) +- Docker Engine and Compose v2 +- Docker Scout +- Go 1.25.12+ +- Node.js 22+ +- PowerShell 7+ -## Canonical scenarios +All disposable resources must use a unique prefix. A passing run ends with zero +matching containers, volumes, and networks. -### S1 — Build the current runtime artifacts from source +## S1 — Build and scan the exact candidates -**As a user, I clone the repo and build the current server, client, and operator UI artifacts.** +Run: -Steps: -1. From repo root run `go build -o /tmp/engram-server ./cmd/engram-server` -2. From repo root run `go build -o /tmp/engram ./cmd/engram` -3. From `apps/operator-web/` run `npm ci` and `npm run build` -4. Stronger runtime proof: run `pwsh -NoProfile -File scripts/smoke-operator-web.ps1` -5. Run the built binaries with `--help` (or no args) and observe usage output +```powershell +pwsh ./scripts/production-gates/build-and-scan-images.ps1 ` + -Mode BuildAndScan ` + -ServerTag engram:prc-server ` + -OperatorTag engram:prc-operator-console ` + -PostgresTag engram:prc-postgres ` + -Platform linux/amd64 ` + -ArtifactRoot .agent/reports/evidence/production-ready/image-remediation-r2 ` + -Version sha- ` + -NoAllowlist +``` Expected: -- Both `go build` invocations exit 0 with no compiler errors -- `apps/operator-web` production build exits 0 -- If the smoke script is run, it exits 0 and proves operator-web login + - proxied issue mutations through the runtime stack -- Both binaries print usage / startup banner without crashing - -Failure signals: -- `undefined: ` errors — auth refactor incomplete -- `package not found` — module path drift -- `apps/operator-web` build fails — operator-facing UI is not release-ready -- `scripts/smoke-operator-web.ps1` fails — the split runtime stack is not - release-ready even if isolated builds pass -- Binary panics on `--help` - -### S2 — Server starts cleanly with required env vars - -**As an operator, I start the server with the current admin-token env var.** - -Steps: -1. Set `ENGRAM_AUTH_ADMIN_TOKEN=test-operator-key` -2. Set `DATABASE_DSN=...` (the canonical name read by `internal/config/config.go`; - the production-candidate path requires PostgreSQL) -3. Run `engram-server.exe` -4. Observe startup logs -Expected: -- Server listens on `:37777` (or the configured worker port) -- No `panic`, no `FATAL` lines -- HTTP `GET /health` returns 200 - -Failure signals: -- Server exits during startup citing missing env var -> FR-4 violated -- Server exits because `DATABASE_DSN` is omitted -> the release smoke is not - configured for the current PostgreSQL-backed runtime path -- Logs or docs still steer workstations toward the server-host-only - `ENGRAM_AUTH_ADMIN_TOKEN` instead of `ENGRAM_TOKEN` -- gRPC bind fails - -### S3 — Operator web loads, authenticates, and reaches the MVP surfaces - -**As an operator, I open the new control plane, complete first-run setup if needed, log in, and verify the real MVP surfaces.** - -Steps: -1. With the runtime stack running, open `http://localhost:3000/login` -2. If this is a fresh database, call the first-run setup flow and create the - first admin account through the operator web app -3. Log in with that admin account; setup does not create an authenticated - browser session by itself -4. Navigate through the MVP operator surfaces: - - `/projects` - - `/rules` - - `/issues` - - `/vault` - - `/system` - - `/settings` - - `/memories` -5. If the release also claims full UI cutover for workstation onboarding, - verify where keycard issuance lives. If that still requires the legacy - dashboard, record it as a cutover gap instead of silently accepting it. +- every build uses `--pull --no-cache`; +- the Docker build context is produced by `git archive HEAD`, contains tracked + files only, and contains no `.git` metadata or checkout credentials; +- the manifest records the Dockerfile hashes, pinned bases, package versions, + exact image IDs, and SARIF hashes; +- each accepted image records OCI source, full revision, and version labels; +- every exact-ID scan has zero HIGH and zero CRITICAL findings; +- no scanner allowlist, ignore, suppression, or exception input exists; +- the operator lock audit has no HIGH/CRITICAL or picomatch/sigstore finding. + +## S2 — Positive three-image runtime + +The gate and permanent critical tests must prove: + +1. PostgreSQL becomes healthy as UID/GID 70 on a read-only root filesystem. +2. The server becomes healthy as UID/GID 65532 with a persistent writable + `/var/lib/engram` volume and read-only root filesystem everywhere else. +3. The operator console becomes healthy as UID/GID 65532 and proxies to the + exact `NUXT_OPERATOR_API_TARGET=http://server:37777` backend. +4. The PostgreSQL and server volume roots retain their required owner and mode: + `70:70:700` and `65532:65532:700` respectively. +5. The server-created `.engram/settings.json` remains `65532:65532:600` and + byte-identical across container restart. +6. Server `/health` is reachable as liveness. +7. Direct and proxied `/api/ready` both return exact `{"status":"ready"}`. +8. The operator root references generated Nuxt assets and at least one asset is + retrievable. +9. Server and operator recover after restart. + +Root HTTP 200 alone is never acceptance. + +## S3 — PostgreSQL version, migration, and durability Expected: -- Login/setup shell loads at `:3000` -- Authenticated operator routes render without severe console errors -- Proxied API calls succeed from the operator web app -- MVP mutation surfaces remain honest about what is backed today -- Unauthenticated `GET /api/auth/me` 401 responses before login are expected - -Failure signals: -- 404 on `/login` or a named MVP route -- Post-login operator routes fall back to the legacy dashboard to complete a - claimed MVP flow -- Browser must use `:37777` dashboard pages for ordinary operator work while - docs claim `:3000` is canonical -- Proxied rules/issues/vault flows fail after successful login - -### S4 — Plugin installs in Claude Code and exposes MCP tools - -**As a Claude Code user, I install the engram plugin and use it.** - -Real Claude Code plugin installation mutates the operator's consumer home. In -automated release emulation, prefer an isolated disposable home with the plugin -wrapper pointed at the release-candidate `cmd/engram` binary. Run the real -consumer-home path only when the operator explicitly authorizes that mutation. - -Steps: -1. Start the runtime stack with PostgreSQL and create a workstation keycard - through the currently supported operator flow. If keycard issuance still - depends on the legacy dashboard, record that explicitly as a cutover gap. -2. In an isolated disposable consumer home, install or symlink the release - plugin wrapper -3. Configure plugin/user settings: - - `server_url=http://unleashed.lan:37777` (or local) - - `api_token=` -4. Start the MCP client/proxy through the same wrapper path a consumer uses -5. Verify `tools/list` and run at least one harmless health/read tool -6. If explicitly authorized for a real Claude Code smoke, install via - `/plugin marketplace add thebtf/engram-marketplace`, restart Claude Code, - and ask "what engram tools do I have?" -Expected: -- Isolated plugin smoke starts without errors -- The assistant or `tools/list` surface lists tools beyond `loom_*` — - e.g., `mcp__engram__store_memory`, `mcp__engram__list_issues`, - `mcp__engram__credential_*`, etc. -- The token field maps to the `ENGRAM_TOKEN` env var (FR-3) - -Failure signals (the bug this release fixes): -- Only `loom_*` tools visible → plugin auth wiring broken -- `engram MCP server failed to initialize` in logs -- Daemon exits with `ENGRAM_TOKEN required` despite token being configured - -## Failure-mode catalog - -| Signal | Likely cause | Where to look | -|---|---|---| -| Only `loom_*` tools in Claude Code | Plugin env var name mismatch | `plugin/engram/.mcp.json` `env` block | -| Server starts but `/api/auth/tokens` 500 | Validator wiring drift | `internal/grpcserver/server.go` SetValidator | -| gRPC accepts master, rejects keycard | FR-2 regression (PR #203 class) | This is exactly what `tests/critical/auth_two_tier_test.go` catches | -| Operator web `/login` or MVP pages 404 | `operator-web` image/build or route wiring broken | `apps/operator-web`, `docker-compose.yml`, `deploy/docker-compose.runtime.yml` | -| Plugin smoke still requires the legacy dashboard for keycard issuance | UI cutover incomplete | `docs/DEPLOYMENT.md`, operator-web route inventory, legacy dashboard compatibility path | -| Daemon exits silently on first launch | `ENGRAM_URL` set, `ENGRAM_TOKEN` empty (FR-4 startup gate) | check exit code, stderr | - -## Verdict template - -After running each scenario, the agent fills in the per-scenario row and -overall verdict per `references/customer-mode-protocol.md`. Verdict report -is written to `.agent/reports/emulation-playbook-run-.md`. - -## Maintenance - -- Add a new scenario whenever a user-visible feature ships (`/emulation-playbook --add `) -- Re-run the playbook before every release — see `/release --push` Step 5d -- Promote stable scenarios into `tests/critical/` over time -- Keep the playbook under 500 LOC; if it grows, split by surface +- `SHOW server_version` is exactly `17.10`; +- `CREATE EXTENSION vector` succeeds and its version is exactly `0.8.1`; +- server startup creates the application schema; +- a vector-bearing marker survives removal of the first PostgreSQL container + and creation of a second container on the same named volume; +- an existing UID `999:999` volume fails closed before the documented bounded + ownership migration, then starts as UID `70:70` without losing the marker; +- `pg_dump` plus restore into a fresh database preserves the marker; +- a tmpfs-only PGDATA fixture demonstrably loses the marker and is rejected as + a deployment pattern; +- `LANG=en_US.UTF-8` never reaches ready, while the image contract remains + `LANG=C.UTF-8` and `LC_ALL=C.UTF-8`. + +## S4 — Server fail-closed matrix + +Each fixture must remain non-healthy: + +- missing persistent HOME volume under a read-only root filesystem; +- empty HOME override; +- root-owned mode-0500 HOME volume; +- injected database initialization failure. + +For initialization failure, `/health` may intentionally remain HTTP 200 with +`status:error`; Docker health must still fail because it uses `/api/ready`. + +## S5 — Operator backend fail-closed matrix + +Each fixture must remain non-healthy: + +- a stale legacy target variable is set but the canonical target is wrong; +- canonical target is missing/empty; +- backend is unreachable; +- backend times out; +- `/api/ready` returns malformed JSON; +- `/api/ready` returns HTTP 200 with `{"status":"error"}`; +- backend root returns HTTP 200/ready but `/api/ready` is absent. + +This matrix proves that a rendered root page cannot mask a broken API target. + +## S6 — Compose and immutable publication identity + +Validate both compose files with explicit `ENGRAM_SERVER_IMAGE`, +`ENGRAM_OPERATOR_IMAGE`, and `ENGRAM_POSTGRES_IMAGE` values from one release +manifest. Parsing must fail when any of the three is missing. Production has no +`:main`, `latest`, branch, major, or minor default. + +The release workflow must prove: + +- main and manual dispatch are verification-only and have no package-write, + registry-login, or push path; +- publication runs only for a strict canonical `vMAJOR.MINOR.PATCH` tag with an + optional valid prerelease and never from manual dispatch; +- the tag peels to the workflow commit and exactly one active no-bypass tag + ruleset protects `refs/tags/v*` from deletion and non-fast-forward updates; +- protected `main` has exactly one active strict ruleset requiring + `authority-guard` from `integration_id: 15368`, plus exactly one recovery + bypass (`User` ID `7106373`, `pull_request` mode); same-name spoof checks, + missing integration IDs, and zero/duplicate/wrong bypass actors fail; +- raw Git/ref/context values never enter inline shell source; +- all actions are pinned to full commit SHAs and every checkout has + `persist-credentials: false`; +- candidate build/test/runtime and package publication occur on different fresh + runners. The prepare job is `contents: read` only; only the publisher has + `actions: read` plus `packages: write`, and it never checks out or executes + candidate code, tests, workflow files, scripts, actions, or containers; +- prepare uploads exactly one immutable, uniquely named five-file payload for + the current publisher workflow run and exports its artifact ID and SHA-256 + digest. Publish REST-censuses the current run before download and rejects a + missing, extra, duplicate, expired, wrong-run, wrong-ID, or wrong-digest + artifact; download is by artifact ID only; +- trusted code rejects payload directories, extra files, symlink/reparse + entries, path traversal, archive checksum/size drift, manifest drift, and any + image identity not bound to the revalidated release commit and version; +- all six destinations (full version plus `sha-` for each image) + are absent or already bound to the exact scanned config digest before the + first push; one mismatch fails the run without a write; +- after any writes, all six destinations are read back and recorded with their + manifest digests; +- the Docker registry credential lives in a unique `RUNNER_TEMP` directory, + is logged out and erased before the exact trusted evidence envelope is + validated and uploaded. No post-login path is under the candidate checkout. + +GitHub Container Registry is not claimed to provide atomic tag compare-and-swap. +The remaining package-admin/PAT mutation path is an explicit external +operational trust boundary. + +## Evidence and verdict + +Required evidence root: + +```text +.agent/reports/evidence/production-ready/image-remediation-r2/ +``` + +The run is PASS only when `final-image-set.json` reports: + +- `status: PASS`; +- exact IDs for all three images; +- zero HIGH/CRITICAL results for all three SARIF files; +- every runtime proof field true; +- cleanup status PASS with empty container, volume, and network arrays. + +Any missing artifact, unexpected skip, retained probe resource, or scanner +exception is a release blocker. diff --git a/scripts/production-gates/build-and-scan-images.ps1 b/scripts/production-gates/build-and-scan-images.ps1 new file mode 100644 index 00000000..4a2c591d --- /dev/null +++ b/scripts/production-gates/build-and-scan-images.ps1 @@ -0,0 +1,1663 @@ +[CmdletBinding()] +param( + [ValidateSet('BuildAndScan', 'ValidateRelease', 'ValidateWorkflowRun', 'ValidateArtifactMetadata', 'ValidatePayload', 'LoadPayload', 'ValidatePublicationEvidence', 'PlanPublication', 'Publish')] + [string]$Mode = 'BuildAndScan', + + [string]$ServerTag, + [string]$OperatorTag, + [string]$PostgresTag, + [ValidateSet('linux/amd64')] + [string]$Platform = 'linux/amd64', + [string]$ArtifactRoot, + [switch]$NoAllowlist, + [string]$Version, + [string]$RepositoryRoot, + [string]$TrustedOutputRoot, + [string]$ReleasePayloadPath, + + [string]$ReleaseRef, + [string]$ExpectedSha, + [string]$ActualSha, + [string]$RulesetFixturePath, + [string]$GitHubToken, + [string]$GitHubApiUrl = 'https://api.github.com', + [string]$GitHubOutputPath, + [string]$WorkflowRunEventPath, + [string]$WorkflowRunFixturePath, + [string]$ExpectedDefaultBranch = 'main', + [string]$TrustedWorkflowPath = '.github/workflows/docker.yaml', + [string]$ExpectedWorkflowName = 'Docker', + [switch]$EventOnlyValidation, + [string]$ArtifactListFixturePath, + [long]$ExpectedArtifactID, + [string]$ExpectedArtifactName, + [string]$ExpectedArtifactDigest, + [long]$CurrentRunID, + [string]$PayloadRoot, + [string]$EvidenceRoot, + + [string]$ManifestPath, + [string]$ReleaseVersion, + [string]$RegistryFixturePath, + [string]$OutputPath, + [string]$Registry = 'ghcr.io', + [string]$Repository = 'thebtf/engram' +) + +Set-StrictMode -Version Latest +$ErrorActionPreference = 'Stop' + +$defaultRepositoryRoot = [IO.Path]::GetFullPath((Join-Path $PSScriptRoot '..\..')) +$repoRoot = if ([string]::IsNullOrWhiteSpace($RepositoryRoot)) { + $defaultRepositoryRoot +} else { + [IO.Path]::GetFullPath($RepositoryRoot) +} +if (-not (Test-Path -LiteralPath $repoRoot -PathType Container)) { + throw "RepositoryRoot does not exist: $repoRoot" +} + +function Resolve-RepositoryPath { + param([Parameter(Mandatory = $true)][string]$Path) + + if ([IO.Path]::IsPathRooted($Path)) { + return [IO.Path]::GetFullPath($Path) + } + return [IO.Path]::GetFullPath((Join-Path $repoRoot $Path)) +} + +function Assert-PathHasNoLinkComponents { + param( + [Parameter(Mandatory = $true)][string]$Path, + [Parameter(Mandatory = $true)][string]$TrustRoot, + [switch]$LeafMayNotExist + ) + + $root = [IO.Path]::GetFullPath($TrustRoot).TrimEnd([IO.Path]::DirectorySeparatorChar, [IO.Path]::AltDirectorySeparatorChar) + $candidate = [IO.Path]::GetFullPath($Path) + $prefix = $root + [IO.Path]::DirectorySeparatorChar + if ($candidate -ne $root -and -not $candidate.StartsWith($prefix, [StringComparison]::OrdinalIgnoreCase)) { + throw "Trusted output path escapes its trust root: $candidate" + } + if (-not (Test-Path -LiteralPath $root -PathType Container)) { + throw "Trusted output root must already exist as a runner-owned directory: $root" + } + + $relative = [IO.Path]::GetRelativePath($root, $candidate) + $components = if ($relative -eq '.') { @() } else { @($relative -split '[\\/]') } + $current = $root + foreach ($component in @('.') + $components) { + if ($component -ne '.') { + $current = Join-Path $current $component + } + if (-not (Test-Path -LiteralPath $current)) { + if ($LeafMayNotExist) { break } + throw "Trusted output path does not exist: $current" + } + $item = Get-Item -Force -LiteralPath $current + $isReparsePoint = ($item.Attributes -band [IO.FileAttributes]::ReparsePoint) -ne 0 + $linkType = if ($item.PSObject.Properties.Name -contains 'LinkType') { [string]$item.LinkType } else { '' } + if ($isReparsePoint -or -not [string]::IsNullOrWhiteSpace($linkType)) { + throw "Trusted output path contains a symlink/reparse component: $current" + } + } + return $candidate +} + +function Assert-TrustedOutputRoot { + if ([string]::IsNullOrWhiteSpace($TrustedOutputRoot)) { + throw 'TrustedOutputRoot is required for privileged publication inputs and outputs.' + } + $root = Assert-PathHasNoLinkComponents -Path $TrustedOutputRoot -TrustRoot $TrustedOutputRoot + if (-not [string]::IsNullOrWhiteSpace($env:RUNNER_TEMP)) { + $runnerTemp = [IO.Path]::GetFullPath($env:RUNNER_TEMP).TrimEnd([IO.Path]::DirectorySeparatorChar, [IO.Path]::AltDirectorySeparatorChar) + if ($root -ne $runnerTemp) { + throw "TrustedOutputRoot must equal the runner-owned RUNNER_TEMP directory: $runnerTemp" + } + } + return $root +} + +function New-TrustedOutputDirectory { + param([Parameter(Mandatory = $true)][string]$Path) + + $root = Assert-TrustedOutputRoot + $fullPath = Assert-PathHasNoLinkComponents -Path $Path -TrustRoot $root -LeafMayNotExist + if (Test-Path -LiteralPath $fullPath) { + throw "Trusted output directory must be freshly created by this gate: $fullPath" + } + New-Item -ItemType Directory -Path $fullPath | Out-Null + return Assert-PathHasNoLinkComponents -Path $fullPath -TrustRoot $root +} + +function Resolve-TrustedOutputPath { + param( + [Parameter(Mandatory = $true)][string]$Path, + [switch]$LeafMayNotExist + ) + + $root = Assert-TrustedOutputRoot + return Assert-PathHasNoLinkComponents -Path $Path -TrustRoot $root -LeafMayNotExist:$LeafMayNotExist +} + +function Assert-TrustedOutputTree { + param([Parameter(Mandatory = $true)][string]$Path) + + $rootPath = Resolve-TrustedOutputPath -Path $Path + foreach ($item in @(Get-ChildItem -Force -Recurse -LiteralPath $rootPath)) { + $isReparsePoint = ($item.Attributes -band [IO.FileAttributes]::ReparsePoint) -ne 0 + $linkType = if ($item.PSObject.Properties.Name -contains 'LinkType') { [string]$item.LinkType } else { '' } + if ($isReparsePoint -or -not [string]::IsNullOrWhiteSpace($linkType)) { + throw "Trusted output tree contains a symlink/reparse entry: $($item.FullName)" + } + } + return $rootPath +} + +function Assert-CanonicalVersion { + param([Parameter(Mandatory = $true)][string]$Value) + + $releasePattern = '^v(0|[1-9][0-9]*)\.(0|[1-9][0-9]*)\.(0|[1-9][0-9]*)(?:-([0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*))?$' + $commitPattern = '^sha-[0-9a-f]{40}$' + if ($Value -match $commitPattern) { + return $Value + } + if ($Value -notmatch $releasePattern) { + throw "Version is not a canonical Docker-safe release or immutable commit identity: $Value" + } + if ($Matches[4]) { + foreach ($identifier in $Matches[4].Split('.')) { + if ($identifier -match '^[0-9]+$' -and $identifier.Length -gt 1 -and $identifier.StartsWith('0', [StringComparison]::Ordinal)) { + throw "Numeric prerelease identifiers may not contain leading zeroes: $Value" + } + } + } + return $Value +} + +function Assert-CanonicalReleaseRef { + param([Parameter(Mandatory = $true)][string]$Ref) + + if (-not $Ref.StartsWith('refs/tags/', [StringComparison]::Ordinal)) { + throw "Release publication requires refs/tags/v*: $Ref" + } + $value = $Ref.Substring('refs/tags/'.Length) + if ((Assert-CanonicalVersion -Value $value) -notmatch '^v') { + throw "Release publication requires a canonical SemVer tag: $Ref" + } + return $value +} + +function Assert-FullCommitSha { + param([Parameter(Mandatory = $true)][string]$Value, [Parameter(Mandatory = $true)][string]$Name) + + if ($Value -notmatch '^[0-9a-fA-F]{40}$') { + throw "$Name must be a full 40-hex commit SHA." + } + return $Value.ToLowerInvariant() +} + +function Get-TagRulesets { + if (-not [string]::IsNullOrWhiteSpace($RulesetFixturePath)) { + if (-not (Test-Path -LiteralPath $RulesetFixturePath -PathType Leaf)) { + throw "Ruleset fixture does not exist: $RulesetFixturePath" + } + return @((Get-Content -Raw -LiteralPath $RulesetFixturePath | ConvertFrom-Json -Depth 100)) + } + + if ($Repository -notmatch '^[A-Za-z0-9_.-]+/[A-Za-z0-9_.-]+$') { + throw "Repository must be owner/name: $Repository" + } + if ([string]::IsNullOrWhiteSpace($GitHubToken)) { + throw 'GitHubToken is required for live ruleset validation.' + } + $headers = @{ + Accept = 'application/vnd.github+json' + Authorization = "Bearer $GitHubToken" + 'X-GitHub-Api-Version' = '2022-11-28' + } + $summaries = @() + for ($page = 1; ; $page++) { + $uri = "$($GitHubApiUrl.TrimEnd('/'))/repos/$Repository/rulesets?per_page=100&page=$page" + $batch = @(Invoke-RestMethod -Method Get -Uri $uri -Headers $headers) + $summaries += $batch + if ($batch.Count -lt 100) { break } + } + $details = @() + foreach ($summary in $summaries) { + if ($summary.target -ne 'tag' -or $summary.enforcement -ne 'active') { continue } + $uri = "$($GitHubApiUrl.TrimEnd('/'))/repos/$Repository/rulesets/$($summary.id)" + $details += Invoke-RestMethod -Method Get -Uri $uri -Headers $headers + } + return @($details) +} + +function Assert-ImmutableReleaseRuleset { + param([Parameter(Mandatory = $true)][AllowEmptyCollection()][object[]]$Rulesets) + + $matches = @() + foreach ($ruleset in $Rulesets) { + if ($ruleset.target -ne 'tag' -or $ruleset.enforcement -ne 'active') { continue } + $includes = @($ruleset.conditions.ref_name.include) + $excludes = @($ruleset.conditions.ref_name.exclude) + if ($includes.Count -ne 1 -or $includes[0] -ne 'refs/tags/v*' -or $excludes.Count -ne 0) { continue } + if (@($ruleset.bypass_actors).Count -ne 0) { continue } + $types = @($ruleset.rules | ForEach-Object { [string]$_.type }) + if ($types -notcontains 'deletion' -or $types -notcontains 'non_fast_forward') { continue } + $matches += $ruleset + } + if ($matches.Count -ne 1) { + throw "Expected exactly one active, no-bypass tag ruleset for refs/tags/v* with deletion and non_fast_forward protection; found $($matches.Count)." + } + return $matches[0] +} + +function Assert-ProtectedMainRuleset { + param([Parameter(Mandatory = $true)][AllowEmptyCollection()][object[]]$Rulesets) + + $matches = @() + foreach ($ruleset in $Rulesets) { + if ($ruleset.target -ne 'branch' -or $ruleset.enforcement -ne 'active') { continue } + $includes = @($ruleset.conditions.ref_name.include) + $excludes = @($ruleset.conditions.ref_name.exclude) + if ($includes.Count -ne 1 -or $includes[0] -ne "refs/heads/$ExpectedDefaultBranch" -or $excludes.Count -ne 0) { continue } + $types = @($ruleset.rules | ForEach-Object { [string]$_.type }) + if ($types -notcontains 'deletion' -or $types -notcontains 'non_fast_forward') { continue } + $statusRules = @($ruleset.rules | Where-Object { $_.type -eq 'required_status_checks' }) + if ($statusRules.Count -ne 1 -or -not [bool]$statusRules[0].parameters.strict_required_status_checks_policy) { continue } + $authorityChecks = @($statusRules[0].parameters.required_status_checks | Where-Object { + [string]$_.context -ceq 'authority-guard' + }) + if ($authorityChecks.Count -ne 1) { continue } + $integrationID = $authorityChecks[0].PSObject.Properties['integration_id'] + if ($null -eq $integrationID -or $integrationID.Value -isnot [int] -and $integrationID.Value -isnot [long]) { continue } + if ([int64]$integrationID.Value -ne 15368) { continue } + $bypassActors = @($ruleset.bypass_actors) + if ($bypassActors.Count -ne 1) { continue } + $recoveryActor = $bypassActors[0] + if ($recoveryActor.actor_type -ne 'User' -or [int64]$recoveryActor.actor_id -ne 7106373 -or $recoveryActor.bypass_mode -ne 'pull_request') { continue } + $matches += $ruleset + } + if ($matches.Count -ne 1) { + throw "Expected exactly one active strict protected-main ruleset requiring authority-guard; found $($matches.Count)." + } + return $matches[0] +} + +function Invoke-GitText { + param([Parameter(Mandatory = $true)][string[]]$Arguments, [switch]$AllowExitOne) + + $output = @(& git -C $repoRoot @Arguments 2>&1 | ForEach-Object { $_.ToString() }) + $exitCode = $LASTEXITCODE + if ($AllowExitOne -and $exitCode -eq 1) { + return [ordered]@{ exit_code = 1; output = ($output -join [Environment]::NewLine).Trim() } + } + if ($exitCode -ne 0) { + throw "git $($Arguments -join ' ') exited $exitCode`: $($output -join [Environment]::NewLine)" + } + return [ordered]@{ exit_code = 0; output = ($output -join [Environment]::NewLine).Trim() } +} + +function Invoke-GitHubApi { + param([Parameter(Mandatory = $true)][string]$Path) + + if ([string]::IsNullOrWhiteSpace($GitHubToken)) { + throw 'GitHubToken is required for trusted workflow-run validation.' + } + $headers = @{ + Accept = 'application/vnd.github+json' + Authorization = "Bearer $GitHubToken" + 'X-GitHub-Api-Version' = '2022-11-28' + } + $uri = "$($GitHubApiUrl.TrimEnd('/'))$Path" + return Invoke-RestMethod -Method Get -Uri $uri -Headers $headers +} + +function Get-LiveRulesetDetails { + param([Parameter(Mandatory = $true)][ValidateSet('branch', 'tag')][string]$Target) + + $details = @() + for ($page = 1; ; $page++) { + $batch = @(Invoke-GitHubApi -Path "/repos/$Repository/rulesets?per_page=100&page=$page") + foreach ($summary in $batch) { + if ($summary.target -ne $Target -or $summary.enforcement -ne 'active') { continue } + $details += Invoke-GitHubApi -Path "/repos/$Repository/rulesets/$($summary.id)" + } + if ($batch.Count -lt 100) { break } + } + return @($details) +} + +function Get-WorkflowRunValidationInputs { + if (-not [string]::IsNullOrWhiteSpace($WorkflowRunFixturePath)) { + if (-not (Test-Path -LiteralPath $WorkflowRunFixturePath -PathType Leaf)) { + throw "Workflow-run fixture does not exist: $WorkflowRunFixturePath" + } + return Get-Content -Raw -LiteralPath $WorkflowRunFixturePath | ConvertFrom-Json -Depth 100 + } + + if ([string]::IsNullOrWhiteSpace($WorkflowRunEventPath) -or -not (Test-Path -LiteralPath $WorkflowRunEventPath -PathType Leaf)) { + throw "WorkflowRunEventPath is required for live workflow_run validation: $WorkflowRunEventPath" + } + $event = Get-Content -Raw -LiteralPath $WorkflowRunEventPath | ConvertFrom-Json -Depth 100 + if ($EventOnlyValidation) { + return [ordered]@{ + event = $event + api_run = $event.workflow_run + trusted_workflow = [ordered]@{ + id = [int64]$event.workflow_run.workflow_id + name = [string]$event.workflow_run.name + path = [string]$event.workflow_run.path + state = 'active' + } + repository = [ordered]@{ full_name = $Repository; default_branch = $ExpectedDefaultBranch } + tag_rulesets = @(Get-LiveRulesetDetails -Target tag) + branch_rulesets = @(Get-LiveRulesetDetails -Target branch) + git = $null + } + } + $runID = [int64]$event.workflow_run.id + $apiRun = Invoke-GitHubApi -Path "/repos/$Repository/actions/runs/$runID" + $workflow = Invoke-GitHubApi -Path "/repos/$Repository/actions/workflows/$($apiRun.workflow_id)" + $repositoryInfo = Invoke-GitHubApi -Path "/repos/$Repository" + return [ordered]@{ + event = $event + api_run = $apiRun + trusted_workflow = $workflow + repository = $repositoryInfo + tag_rulesets = @(Get-LiveRulesetDetails -Target tag) + branch_rulesets = @(Get-LiveRulesetDetails -Target branch) + git = $null + } +} + +function Assert-WorkflowRunFieldParity { + param($EventRun, $ApiRun) + + foreach ($field in @('id', 'workflow_id', 'name', 'path', 'event', 'status', 'conclusion', 'head_branch', 'head_sha')) { + $eventProperty = $EventRun.PSObject.Properties[$field] + $apiProperty = $ApiRun.PSObject.Properties[$field] + if ($null -eq $eventProperty -or $null -eq $apiProperty -or [string]$eventProperty.Value -cne [string]$apiProperty.Value) { + throw "workflow_run event/API mismatch for $field." + } + } + if ([string]$EventRun.head_repository.full_name -cne [string]$ApiRun.head_repository.full_name) { + throw 'workflow_run event/API head repository mismatch.' + } + if ([string]$EventRun.repository.full_name -cne [string]$ApiRun.repository.full_name) { + throw 'workflow_run event/API repository mismatch.' + } +} + +function Invoke-ValidateWorkflowRun { + if ($Repository -notmatch '^[A-Za-z0-9_.-]+/[A-Za-z0-9_.-]+$') { + throw "Repository must be owner/name: $Repository" + } + $inputs = Get-WorkflowRunValidationInputs + $event = $inputs.event + $eventRun = $event.workflow_run + $apiRun = $inputs.api_run + if ($event.action -ne 'completed') { throw 'Publisher accepts only workflow_run/completed.' } + Assert-WorkflowRunFieldParity -EventRun $eventRun -ApiRun $apiRun + if ($apiRun.name -ne $ExpectedWorkflowName -or $apiRun.path -ne $TrustedWorkflowPath) { + throw 'Triggering run is not the named unprivileged Docker verification workflow.' + } + if ($apiRun.event -ne 'push' -or $apiRun.status -ne 'completed' -or $apiRun.conclusion -ne 'success') { + throw 'Triggering workflow must be a successful completed push verification.' + } + if ($apiRun.head_repository.full_name -ne $Repository -or $apiRun.repository.full_name -ne $Repository -or $event.repository.full_name -ne $Repository) { + throw 'Triggering run must originate from the same repository.' + } + if ($inputs.repository.full_name -ne $Repository -or $inputs.repository.default_branch -ne $ExpectedDefaultBranch) { + throw 'Repository/default-branch API identity mismatch.' + } + if ([int64]$apiRun.workflow_id -ne [int64]$inputs.trusted_workflow.id -or + $inputs.trusted_workflow.path -ne $TrustedWorkflowPath -or + $inputs.trusted_workflow.name -ne $ExpectedWorkflowName -or + $inputs.trusted_workflow.state -ne 'active') { + throw 'Triggering workflow ID/path/name is not the active trusted default-branch workflow.' + } + + $version = Assert-CanonicalReleaseRef -Ref "refs/tags/$($apiRun.head_branch)" + $commit = Assert-FullCommitSha -Value ([string]$apiRun.head_sha) -Name 'workflow_run head_sha' + $tagRuleset = Assert-ImmutableReleaseRuleset -Rulesets @($inputs.tag_rulesets) + $mainRuleset = Assert-ProtectedMainRuleset -Rulesets @($inputs.branch_rulesets) + + if ($null -ne $inputs.git) { + if ([string]$inputs.git.tag_commit -ne $commit) { + throw 'Fixture tag does not peel to workflow_run head_sha.' + } + if (@($inputs.git.main_ancestors) -notcontains $commit) { + throw 'Fixture release commit is not an ancestor of protected main.' + } + } else { + $origin = (Invoke-GitText -Arguments @('remote', 'get-url', 'origin')).output + $escapedRepository = [regex]::Escape($Repository) + if ($origin -notmatch "(?i)(?:github\.com[:/])$escapedRepository(?:\.git)?$") { + throw "Trusted checkout origin does not match repository $Repository." + } + $tagRef = "refs/tags/$version" + $guardRef = "refs/engram-release-validation/$($apiRun.id)" + Invoke-GitText -Arguments @('fetch', '--no-tags', '--force', 'origin', "+$tagRef`:$guardRef") | Out-Null + Invoke-GitText -Arguments @('fetch', '--no-tags', '--force', 'origin', "+refs/heads/$ExpectedDefaultBranch`:refs/remotes/origin/$ExpectedDefaultBranch") | Out-Null + $peeled = (Invoke-GitText -Arguments @('rev-parse', '--verify', "$guardRef^{commit}")).output.ToLowerInvariant() + if ($peeled -ne $commit) { + throw "Protected release tag peels to $peeled, not workflow_run head_sha $commit." + } + $ancestry = Invoke-GitText -Arguments @('merge-base', '--is-ancestor', $commit, "refs/remotes/origin/$ExpectedDefaultBranch") -AllowExitOne + if ($ancestry.exit_code -ne 0) { + throw "Release commit $commit is not an ancestor of protected $ExpectedDefaultBranch." + } + } + + $result = [ordered]@{ + schema_version = 1 + version = $version + commit = $commit + triggering_run_id = [int64]$apiRun.id + triggering_workflow_id = [int64]$apiRun.workflow_id + tag_ruleset_id = $tagRuleset.id + main_ruleset_id = $mainRuleset.id + trusted_publisher_source = "default-branch:$ExpectedDefaultBranch" + validation_level = if ($EventOnlyValidation) { 'event-git-rulesets-unprivileged' } else { 'event-api-git-rulesets-full' } + artifacts_consumed = 0 + } + if (-not [string]::IsNullOrWhiteSpace($OutputPath)) { + Write-JsonFile -Value $result -Path (Resolve-RepositoryPath -Path $OutputPath) + } + if (-not [string]::IsNullOrWhiteSpace($GitHubOutputPath)) { + Add-Content -Encoding utf8NoBOM -LiteralPath $GitHubOutputPath -Value "version=$version" + Add-Content -Encoding utf8NoBOM -LiteralPath $GitHubOutputPath -Value "commit=$commit" + Add-Content -Encoding utf8NoBOM -LiteralPath $GitHubOutputPath -Value "triggering_run_id=$($apiRun.id)" + } + $result | ConvertTo-Json -Depth 30 +} + +function Write-JsonFile { + param([Parameter(Mandatory = $true)]$Value, [Parameter(Mandatory = $true)][string]$Path) + + if (-not [string]::IsNullOrWhiteSpace($TrustedOutputRoot)) { + $Path = Resolve-TrustedOutputPath -Path $Path -LeafMayNotExist + } + $directory = Split-Path -Parent $Path + if (-not [string]::IsNullOrWhiteSpace($directory)) { + New-Item -ItemType Directory -Force -Path $directory | Out-Null + } + $Value | ConvertTo-Json -Depth 100 | Set-Content -Encoding utf8NoBOM -LiteralPath $Path +} + +function Normalize-Sha256Digest { + param([Parameter(Mandatory = $true)][string]$Value, [Parameter(Mandatory = $true)][string]$Name) + + $normalized = $Value.ToLowerInvariant() + if ($normalized -match '^[0-9a-f]{64}$') { + $normalized = "sha256:$normalized" + } + if ($normalized -notmatch '^sha256:[0-9a-f]{64}$') { + throw "$Name must be a SHA-256 digest." + } + return $normalized +} + +function Get-ArtifactCensus { + if (-not [string]::IsNullOrWhiteSpace($ArtifactListFixturePath)) { + if (-not (Test-Path -LiteralPath $ArtifactListFixturePath -PathType Leaf)) { + throw "Artifact-list fixture does not exist: $ArtifactListFixturePath" + } + return Get-Content -Raw -LiteralPath $ArtifactListFixturePath | ConvertFrom-Json -Depth 100 + } + if ($CurrentRunID -le 0) { throw 'CurrentRunID must identify the active publisher workflow run.' } + $artifacts = @() + $reportedTotal = $null + for ($page = 1; ; $page++) { + $response = Invoke-GitHubApi -Path "/repos/$Repository/actions/runs/$CurrentRunID/artifacts?per_page=100&page=$page" + if ($null -eq $reportedTotal) { $reportedTotal = [int64]$response.total_count } + $batch = @($response.artifacts) + $artifacts += $batch + if ($batch.Count -lt 100) { break } + } + return [ordered]@{ total_count = $reportedTotal; artifacts = @($artifacts) } +} + +function Invoke-ValidateArtifactMetadata { + if ($Repository -notmatch '^[A-Za-z0-9_.-]+/[A-Za-z0-9_.-]+$') { throw "Repository must be owner/name: $Repository" } + if ($ExpectedArtifactID -le 0 -or $CurrentRunID -le 0) { throw 'ExpectedArtifactID and CurrentRunID must be positive.' } + if ($ExpectedArtifactName -notmatch '^engram-release-payload-[0-9]+-[0-9]+$') { + throw 'ExpectedArtifactName must be the fixed publisher-run payload name.' + } + $expectedDigest = Normalize-Sha256Digest -Value $ExpectedArtifactDigest -Name 'ExpectedArtifactDigest' + $census = Get-ArtifactCensus + $artifacts = @($census.artifacts) + if ([int64]$census.total_count -ne $artifacts.Count -or $artifacts.Count -ne 1) { + throw "Publisher workflow run must contain exactly one bridge artifact before download; API reported $($census.total_count), enumerated $($artifacts.Count)." + } + $artifact = $artifacts[0] + if ([int64]$artifact.id -ne $ExpectedArtifactID -or [string]$artifact.name -cne $ExpectedArtifactName) { + throw 'Artifact ID/name does not match the immutable prepare-release job output.' + } + if ([bool]$artifact.expired) { throw 'Release payload artifact is expired.' } + $apiDigest = Normalize-Sha256Digest -Value ([string]$artifact.digest) -Name 'artifact API digest' + if ($apiDigest -ne $expectedDigest) { throw 'Artifact API digest does not match the immutable upload-artifact job output.' } + if ($null -eq $artifact.workflow_run -or [int64]$artifact.workflow_run.id -ne $CurrentRunID) { + throw 'Artifact provenance does not bind to the current publisher workflow run.' + } + $result = [ordered]@{ + schema_version = 1 + artifact_id = [int64]$artifact.id + artifact_name = [string]$artifact.name + artifact_digest = $apiDigest + workflow_run_id = $CurrentRunID + artifact_count = 1 + } + if (-not [string]::IsNullOrWhiteSpace($OutputPath)) { Write-JsonFile -Value $result -Path $OutputPath } + $result | ConvertTo-Json -Depth 20 +} + +function Assert-RegularFileEnvelope { + param([Parameter(Mandatory = $true)][string]$Root, [Parameter(Mandatory = $true)][string[]]$ExpectedNames) + + $resolvedRoot = [IO.Path]::GetFullPath($Root) + if (-not (Test-Path -LiteralPath $resolvedRoot -PathType Container)) { throw "Payload root is not a directory: $resolvedRoot" } + if (-not [string]::IsNullOrWhiteSpace($TrustedOutputRoot)) { + $resolvedRoot = Assert-TrustedOutputTree -Path $resolvedRoot + } + $entries = @(Get-ChildItem -Force -LiteralPath $resolvedRoot) + $actualNames = @($entries | ForEach-Object { $_.Name } | Sort-Object) + $wantedNames = @($ExpectedNames | Sort-Object) + if ($actualNames.Count -ne $wantedNames.Count -or @(Compare-Object -ReferenceObject $wantedNames -DifferenceObject $actualNames).Count -ne 0) { + throw "Payload envelope must contain exactly: $($wantedNames -join ', ')." + } + foreach ($entry in $entries) { + $isReparsePoint = ($entry.Attributes -band [IO.FileAttributes]::ReparsePoint) -ne 0 + $linkType = if ($entry.PSObject.Properties.Name -contains 'LinkType') { [string]$entry.LinkType } else { '' } + if (-not $entry.PSIsContainer -and -not $isReparsePoint -and [string]::IsNullOrWhiteSpace($linkType)) { continue } + throw "Payload envelope contains a directory, symlink, or reparse entry: $($entry.FullName)" + } + return $resolvedRoot +} + +function Assert-ArchiveEnvelope { + param([Parameter(Mandatory = $true)][string]$Path) + + $entries = @(& tar -tf $Path 2>&1 | ForEach-Object { $_.ToString() }) + if ($LASTEXITCODE -ne 0 -or $entries.Count -eq 0) { throw "Image archive is not a readable tar payload: $Path" } + foreach ($entry in $entries) { + $normalized = $entry.Replace('\', '/') + if ($normalized.StartsWith('/', [StringComparison]::Ordinal) -or $normalized -match '(^|/)\.\.(/|$)') { + throw "Image archive contains a path-traversal entry: $entry" + } + } + $verbose = @(& tar -tvf $Path 2>&1 | ForEach-Object { $_.ToString() }) + if ($LASTEXITCODE -ne 0 -or $verbose.Count -eq 0) { throw "Image archive metadata cannot be inspected: $Path" } + foreach ($line in $verbose) { + if ([string]::IsNullOrWhiteSpace($line)) { continue } + if ($line[0] -ne '-' -and $line[0] -ne 'd') { throw "Image archive contains a non-regular outer entry: $line" } + } +} + +function Read-AndValidatePayload { + if ([string]::IsNullOrWhiteSpace($PayloadRoot)) { throw 'PayloadRoot is required.' } + $root = Assert-RegularFileEnvelope -Root $PayloadRoot -ExpectedNames @( + 'release-bundle.json', 'final-image-set.json', 'server.tar', 'operator-console.tar', 'postgres.tar' + ) + $bundlePath = Join-Path $root 'release-bundle.json' + $bundle = Get-Content -Raw -LiteralPath $bundlePath | ConvertFrom-Json -Depth 100 + if ([int]$bundle.schema_version -ne 1) { throw 'Unsupported release bundle schema.' } + $commit = Assert-FullCommitSha -Value $ExpectedSha -Name 'ExpectedSha' + $version = Assert-CanonicalVersion -Value $ReleaseVersion + if ([string]$bundle.source_commit -ne $commit -or [string]$bundle.release_version -ne $version) { + throw 'Release bundle commit/version does not match validated workflow provenance.' + } + if ([string]$bundle.manifest.file -cne 'final-image-set.json') { throw 'Release bundle manifest path is not canonical.' } + $manifestPath = Join-Path $root 'final-image-set.json' + $manifestBytes = [IO.File]::ReadAllBytes($manifestPath) + $manifestHash = (Get-FileHash -Algorithm SHA256 -LiteralPath $manifestPath).Hash.ToLowerInvariant() + if ((Normalize-Sha256Digest -Value ([string]$bundle.manifest.sha256) -Name 'manifest digest') -ne "sha256:$manifestHash" -or + [int64]$bundle.manifest.size_bytes -ne $manifestBytes.LongLength) { + throw 'Release bundle manifest hash/size mismatch.' + } + $manifest = [Text.Encoding]::UTF8.GetString($manifestBytes) | ConvertFrom-Json -Depth 100 + if ([string]$manifest.status -ne 'PASS' -or [string]$manifest.source_parent_commit -ne $commit -or [string]$manifest.build_version -ne $version) { + throw 'Acceptance manifest is not a PASS for the validated commit/version.' + } + $definitions = @( + [ordered]@{ name = 'server'; archive = 'server.tar'; manifest_property = 'server' }, + [ordered]@{ name = 'operator_console'; archive = 'operator-console.tar'; manifest_property = 'operator_console' }, + [ordered]@{ name = 'postgres'; archive = 'postgres.tar'; manifest_property = 'postgres' } + ) + $images = @($bundle.images) + if ($images.Count -ne 3) { throw 'Release bundle must contain exactly three image records.' } + $validatedImages = @() + foreach ($definition in $definitions) { + $matches = @($images | Where-Object { [string]$_.name -ceq $definition.name }) + if ($matches.Count -ne 1) { throw "Release bundle must contain exactly one $($definition.name) image record." } + $image = $matches[0] + if ([string]$image.archive -cne $definition.archive -or [IO.Path]::GetFileName([string]$image.archive) -cne [string]$image.archive) { + throw "Release bundle archive path is not canonical for $($definition.name)." + } + $imageID = [string]$image.image_id + $manifestID = [string]$manifest.image_ids.PSObject.Properties[$definition.manifest_property].Value + if ($imageID -notmatch '^sha256:[0-9a-f]{64}$' -or $imageID -ne $manifestID) { + throw "Release bundle image ID mismatch for $($definition.name)." + } + $archivePath = Join-Path $root $definition.archive + $archiveItem = Get-Item -Force -LiteralPath $archivePath + $archiveHash = (Get-FileHash -Algorithm SHA256 -LiteralPath $archivePath).Hash.ToLowerInvariant() + if ((Normalize-Sha256Digest -Value ([string]$image.sha256) -Name "$($definition.name) archive digest") -ne "sha256:$archiveHash" -or + [int64]$image.size_bytes -ne $archiveItem.Length) { + throw "Release bundle archive hash/size mismatch for $($definition.name)." + } + Assert-ArchiveEnvelope -Path $archivePath + $validatedImages += [ordered]@{ name = $definition.name; archive = $archivePath; image_id = $imageID } + } + return [ordered]@{ + schema_version = 1 + payload_root = $root + source_commit = $commit + release_version = $version + manifest_path = $manifestPath + manifest_sha256 = "sha256:$manifestHash" + images = @($validatedImages) + } +} + +function Invoke-ValidatePayload { + $validated = Read-AndValidatePayload + if (-not [string]::IsNullOrWhiteSpace($OutputPath)) { Write-JsonFile -Value $validated -Path $OutputPath } + $validated | ConvertTo-Json -Depth 30 +} + +function Invoke-LoadPayload { + $validated = Read-AndValidatePayload + foreach ($image in $validated.images) { + & docker image load --input $image.archive + if ($LASTEXITCODE -ne 0) { throw "Docker failed to load validated image archive for $($image.name)." } + $inspectRaw = & docker image inspect $image.image_id 2>&1 + if ($LASTEXITCODE -ne 0) { throw "Loaded archive does not contain exact image ID $($image.image_id)." } + $inspect = @((($inspectRaw | Out-String) | ConvertFrom-Json -Depth 100))[0] + if ([string]$inspect.Config.Labels.'org.opencontainers.image.revision' -ne $validated.source_commit -or + [string]$inspect.Config.Labels.'org.opencontainers.image.version' -ne $validated.release_version) { + throw "Loaded exact image $($image.image_id) lacks validated revision/version labels." + } + } + $validated | ConvertTo-Json -Depth 30 +} + +function Invoke-ValidatePublicationEvidence { + if ([string]::IsNullOrWhiteSpace($EvidenceRoot)) { throw 'EvidenceRoot is required.' } + $root = Assert-RegularFileEnvelope -Root $EvidenceRoot -ExpectedNames @( + 'artifact-census.json', 'payload-validation.json', 'pre-login-publication-plan.json', 'publication-result.json' + ) + $census = Get-Content -Raw -LiteralPath (Join-Path $root 'artifact-census.json') | ConvertFrom-Json -Depth 100 + $payload = Get-Content -Raw -LiteralPath (Join-Path $root 'payload-validation.json') | ConvertFrom-Json -Depth 100 + $preflight = Get-Content -Raw -LiteralPath (Join-Path $root 'pre-login-publication-plan.json') | ConvertFrom-Json -Depth 100 + $publication = Get-Content -Raw -LiteralPath (Join-Path $root 'publication-result.json') | ConvertFrom-Json -Depth 100 + if ([int]$census.artifact_count -ne 1 -or [int]$payload.schema_version -ne 1) { + throw 'Publisher evidence lacks the single-artifact or payload-validation proof.' + } + foreach ($record in @($preflight, $publication)) { + if (@($record.destinations).Count -ne 6 -or -not [bool]$record.external_package_admin_trust_boundary) { + throw 'Publisher evidence does not cover all six immutable destinations and the external package-admin boundary.' + } + } + if ([string]$preflight.acceptance_manifest_sha256 -notmatch '^sha256:[0-9a-f]{64}$' -or + [string]$preflight.acceptance_manifest_sha256 -ne [string]$publication.acceptance_manifest_sha256 -or + [string]$payload.manifest_sha256 -ne [string]$publication.acceptance_manifest_sha256) { + throw 'Publisher evidence does not remain bound to one exact acceptance manifest.' + } + foreach ($destination in @($publication.destinations)) { + if ($destination.action -notin @('pushed', 'verified-noop') -or + [string]$destination.config_digest -notmatch '^sha256:[0-9a-f]{64}$' -or + [string]$destination.manifest_digest -notmatch '^sha256:[0-9a-f]{64}$') { + throw "Publisher evidence contains an incomplete destination readback: $($destination.reference)" + } + } + [ordered]@{ + schema_version = 1 + evidence_root = $root + artifact_count = 1 + destination_count = 6 + credentials_erased_before_validation = $true + } | ConvertTo-Json -Depth 20 +} + +function Export-ReleasePayload { + param( + [Parameter(Mandatory = $true)][string]$AcceptanceManifestPath, + [Parameter(Mandatory = $true)]$ExactImageIDs, + [Parameter(Mandatory = $true)][string]$Commit, + [Parameter(Mandatory = $true)][string]$BuildVersion + ) + + Assert-TrustedOutputRoot | Out-Null + $payloadPath = if ([IO.Path]::IsPathRooted($ReleasePayloadPath)) { + [IO.Path]::GetFullPath($ReleasePayloadPath) + } else { + [IO.Path]::GetFullPath((Join-Path $TrustedOutputRoot $ReleasePayloadPath)) + } + $payloadPath = New-TrustedOutputDirectory -Path $payloadPath + $manifestDestination = Join-Path $payloadPath 'final-image-set.json' + [IO.File]::Copy($AcceptanceManifestPath, $manifestDestination, $false) + $manifestHash = (Get-FileHash -Algorithm SHA256 -LiteralPath $manifestDestination).Hash.ToLowerInvariant() + $manifestSize = (Get-Item -LiteralPath $manifestDestination).Length + $definitions = @( + [ordered]@{ name = 'server'; archive = 'server.tar'; image_id = [string]$ExactImageIDs.server }, + [ordered]@{ name = 'operator_console'; archive = 'operator-console.tar'; image_id = [string]$ExactImageIDs.operator_console }, + [ordered]@{ name = 'postgres'; archive = 'postgres.tar'; image_id = [string]$ExactImageIDs.postgres } + ) + $images = @() + foreach ($definition in $definitions) { + $archivePath = Join-Path $payloadPath $definition.archive + & docker image save --output $archivePath $definition.image_id + if ($LASTEXITCODE -ne 0 -or -not (Test-Path -LiteralPath $archivePath -PathType Leaf)) { + throw "Failed to export exact image data for $($definition.name)." + } + Assert-ArchiveEnvelope -Path $archivePath + $images += [ordered]@{ + name = $definition.name + archive = $definition.archive + image_id = $definition.image_id + sha256 = "sha256:$((Get-FileHash -Algorithm SHA256 -LiteralPath $archivePath).Hash.ToLowerInvariant())" + size_bytes = (Get-Item -LiteralPath $archivePath).Length + } + } + $bundle = [ordered]@{ + schema_version = 1 + source_commit = $Commit + release_version = $BuildVersion + manifest = [ordered]@{ + file = 'final-image-set.json' + sha256 = "sha256:$manifestHash" + size_bytes = $manifestSize + } + images = $images + } + Write-JsonFile -Value $bundle -Path (Join-Path $payloadPath 'release-bundle.json') + Assert-RegularFileEnvelope -Root $payloadPath -ExpectedNames @( + 'release-bundle.json', 'final-image-set.json', 'server.tar', 'operator-console.tar', 'postgres.tar' + ) | Out-Null + return $payloadPath +} + +function Get-FixtureRemoteIdentity { + param([Parameter(Mandatory = $true)]$Fixture, [Parameter(Mandatory = $true)][string]$Reference) + + $property = $Fixture.refs.PSObject.Properties[$Reference] + if ($null -eq $property -or $null -eq $property.Value) { + return [ordered]@{ exists = $false; config_digest = $null; manifest_digest = $null } + } + return [ordered]@{ + exists = $true + config_digest = [string]$property.Value.config_digest + manifest_digest = [string]$property.Value.manifest_digest + } +} + +function Get-LiveRemoteIdentity { + param([Parameter(Mandatory = $true)][string]$Reference) + + $rawOutput = & docker buildx imagetools inspect $Reference --raw 2>&1 + if ($LASTEXITCODE -ne 0) { + $failure = ($rawOutput | Out-String) + if ($failure -match '(?i)manifest unknown|not found|no such manifest') { + return [ordered]@{ exists = $false; config_digest = $null; manifest_digest = $null } + } + throw "Remote image inspection failed for $Reference`: $failure" + } + $raw = ($rawOutput | Out-String).Trim() + $manifest = $raw | ConvertFrom-Json -Depth 100 + if ([string]::IsNullOrWhiteSpace([string]$manifest.config.digest)) { + throw "Remote destination must be a single-platform manifest with an exact config digest: $Reference" + } + $descriptorOutput = & docker buildx imagetools inspect $Reference --format '{{json .Manifest}}' 2>&1 + if ($LASTEXITCODE -ne 0) { + throw "Remote descriptor inspection failed for $Reference`: $($descriptorOutput | Out-String)" + } + $descriptor = (($descriptorOutput | Out-String).Trim() | ConvertFrom-Json -Depth 100) + if ([string]::IsNullOrWhiteSpace([string]$descriptor.digest)) { + throw "Remote destination lacks a manifest digest: $Reference" + } + return [ordered]@{ + exists = $true + config_digest = [string]$manifest.config.digest + manifest_digest = [string]$descriptor.digest + } +} + +function New-PublicationPlan { + param( + [Parameter(Mandatory = $true)]$Manifest, + [Parameter(Mandatory = $true)][string]$ReleaseVersion, + $RegistryFixture + ) + + $validatedVersion = Assert-CanonicalVersion -Value $ReleaseVersion + if ($validatedVersion -notmatch '^v') { + throw 'Publication requires a canonical release version, not a commit-only version.' + } + $sourceCommit = Assert-FullCommitSha -Value ([string]$Manifest.source_parent_commit) -Name 'manifest source_parent_commit' + $imageDefinitions = @( + [ordered]@{ name = 'server'; repository = "$Registry/$Repository"; id = [string]$Manifest.image_ids.server }, + [ordered]@{ name = 'operator_console'; repository = "$Registry/$Repository-operator-console"; id = [string]$Manifest.image_ids.operator_console }, + [ordered]@{ name = 'postgres'; repository = "$Registry/$Repository-postgres"; id = [string]$Manifest.image_ids.postgres } + ) + $destinations = @() + foreach ($image in $imageDefinitions) { + if ($image.id -notmatch '^sha256:[0-9a-f]{64}$') { + throw "Manifest contains an invalid exact image ID for $($image.name): $($image.id)" + } + foreach ($tag in @($validatedVersion, "sha-$sourceCommit")) { + $reference = "$($image.repository):$tag" + $remote = if ($null -ne $RegistryFixture) { + Get-FixtureRemoteIdentity -Fixture $RegistryFixture -Reference $reference + } else { + Get-LiveRemoteIdentity -Reference $reference + } + if ($remote.exists -and $remote.config_digest -ne $image.id) { + throw "Destination $reference already resolves to $($remote.config_digest), not exact scanned image $($image.id); refusing every write." + } + $destinations += [ordered]@{ + image = $image.name + reference = $reference + config_digest = $image.id + action = if ($remote.exists) { 'noop' } else { 'push' } + manifest_digest = $remote.manifest_digest + } + } + } + return [ordered]@{ + schema_version = 1 + release_version = $validatedVersion + source_commit = $sourceCommit + single_writer_model = 'repository-workflow-release-publish' + external_package_admin_trust_boundary = $true + destinations = @($destinations | Sort-Object reference) + } +} + +function Invoke-ValidateRelease { + $version = Assert-CanonicalReleaseRef -Ref $ReleaseRef + $expected = Assert-FullCommitSha -Value $ExpectedSha -Name 'ExpectedSha' + $actual = Assert-FullCommitSha -Value $ActualSha -Name 'ActualSha' + if ($expected -ne $actual) { + throw "Live release tag peels to $actual, expected workflow commit $expected." + } + $ruleset = Assert-ImmutableReleaseRuleset -Rulesets @(Get-TagRulesets) + $result = [ordered]@{ + schema_version = 1 + version = $version + commit = $expected + ruleset_id = $ruleset.id + ruleset_name = $ruleset.name + immutable_tag_namespace = 'refs/tags/v*' + } + if (-not [string]::IsNullOrWhiteSpace($OutputPath)) { + Write-JsonFile -Value $result -Path $OutputPath + } + if (-not [string]::IsNullOrWhiteSpace($GitHubOutputPath)) { + Add-Content -Encoding utf8NoBOM -LiteralPath $GitHubOutputPath -Value "version=$version" + Add-Content -Encoding utf8NoBOM -LiteralPath $GitHubOutputPath -Value "commit=$expected" + Add-Content -Encoding utf8NoBOM -LiteralPath $GitHubOutputPath -Value "ruleset_id=$($ruleset.id)" + } + $result | ConvertTo-Json -Depth 20 +} + +function Read-PublicationInputs { + $resolvedManifestPath = if ([string]::IsNullOrWhiteSpace($ManifestPath)) { $null } else { Resolve-RepositoryPath -Path $ManifestPath } + if (-not [string]::IsNullOrWhiteSpace($TrustedOutputRoot) -and -not [string]::IsNullOrWhiteSpace($resolvedManifestPath)) { + $resolvedManifestPath = Resolve-TrustedOutputPath -Path $resolvedManifestPath + } + if ([string]::IsNullOrWhiteSpace($resolvedManifestPath) -or -not (Test-Path -LiteralPath $resolvedManifestPath -PathType Leaf)) { + throw "ManifestPath must name the final exact-image-set manifest: $ManifestPath" + } + $manifest = Get-Content -Raw -LiteralPath $resolvedManifestPath | ConvertFrom-Json -Depth 100 + $manifestHash = (Get-FileHash -Algorithm SHA256 -LiteralPath $resolvedManifestPath).Hash.ToLowerInvariant() + $fixture = if ([string]::IsNullOrWhiteSpace($RegistryFixturePath)) { + $null + } else { + Get-Content -Raw -LiteralPath $RegistryFixturePath | ConvertFrom-Json -Depth 100 + } + return [ordered]@{ manifest = $manifest; fixture = $fixture; manifest_sha256 = "sha256:$manifestHash" } +} + +function Invoke-PlanPublication { + $inputs = Read-PublicationInputs + $plan = New-PublicationPlan -Manifest $inputs.manifest -ReleaseVersion $ReleaseVersion -RegistryFixture $inputs.fixture + $plan['acceptance_manifest_sha256'] = $inputs.manifest_sha256 + if (-not [string]::IsNullOrWhiteSpace($OutputPath)) { + Write-JsonFile -Value $plan -Path (Resolve-RepositoryPath -Path $OutputPath) + } + $plan | ConvertTo-Json -Depth 100 +} + +function Invoke-Publish { + if (-not [string]::IsNullOrWhiteSpace($RegistryFixturePath)) { + throw 'Publish mode never accepts a registry fixture.' + } + Assert-TrustedOutputRoot | Out-Null + $inputs = Read-PublicationInputs + if ([string]$inputs.manifest.status -ne 'PASS') { + throw 'Publication requires a PASS image acceptance manifest produced before registry login.' + } + $validatedCommit = Assert-FullCommitSha -Value $ExpectedSha -Name 'ExpectedSha' + $manifestCommit = Assert-FullCommitSha -Value ([string]$inputs.manifest.source_parent_commit) -Name 'manifest source_parent_commit' + if ($manifestCommit -ne $validatedCommit) { + throw "Trusted manifest commit $manifestCommit does not match validated workflow_run commit $validatedCommit." + } + $plan = New-PublicationPlan -Manifest $inputs.manifest -ReleaseVersion $ReleaseVersion -RegistryFixture $null + $plan['acceptance_manifest_sha256'] = $inputs.manifest_sha256 + + foreach ($destination in $plan.destinations) { + & docker image inspect $destination.config_digest *> $null + if ($LASTEXITCODE -ne 0) { + throw "Exact scanned local image is missing before publication: $($destination.config_digest)" + } + } + + # All six destinations were inspected above. No registry write occurs until + # every mismatch check has passed. This is a repository single-writer model, + # not an atomic registry compare-and-swap claim. + foreach ($destination in @($plan.destinations | Where-Object { $_.action -eq 'push' })) { + & docker tag $destination.config_digest $destination.reference + if ($LASTEXITCODE -ne 0) { throw "Local exact-ID tag failed: $($destination.reference)" } + & docker push $destination.reference + if ($LASTEXITCODE -ne 0) { throw "Registry push failed: $($destination.reference)" } + } + + foreach ($destination in $plan.destinations) { + $remote = Get-LiveRemoteIdentity -Reference $destination.reference + if (-not $remote.exists -or $remote.config_digest -ne $destination.config_digest) { + throw "Post-write readback mismatch for $($destination.reference)." + } + $destination.manifest_digest = $remote.manifest_digest + $destination.action = if ($destination.action -eq 'push') { 'pushed' } else { 'verified-noop' } + } + $plan.completed_at = (Get-Date).ToUniversalTime().ToString('o') + if (-not [string]::IsNullOrWhiteSpace($OutputPath)) { + Write-JsonFile -Value $plan -Path (Resolve-RepositoryPath -Path $OutputPath) + } + $plan | ConvertTo-Json -Depth 100 +} + +switch ($Mode) { + 'ValidateRelease' { Invoke-ValidateRelease; exit 0 } + 'ValidateWorkflowRun' { Invoke-ValidateWorkflowRun; exit 0 } + 'ValidateArtifactMetadata' { Invoke-ValidateArtifactMetadata; exit 0 } + 'ValidatePayload' { Invoke-ValidatePayload; exit 0 } + 'LoadPayload' { Invoke-LoadPayload; exit 0 } + 'ValidatePublicationEvidence' { Invoke-ValidatePublicationEvidence; exit 0 } + 'PlanPublication' { Invoke-PlanPublication; exit 0 } + 'Publish' { Invoke-Publish; exit 0 } +} + +foreach ($required in @{ + ServerTag = $ServerTag + OperatorTag = $OperatorTag + PostgresTag = $PostgresTag + ArtifactRoot = $ArtifactRoot +}.GetEnumerator()) { + if ([string]::IsNullOrWhiteSpace([string]$required.Value)) { + throw "$($required.Key) is mandatory in BuildAndScan mode." + } +} + +if (-not $NoAllowlist) { + throw 'Image acceptance is fail-closed: -NoAllowlist is mandatory and scanner exceptions are unsupported.' +} + +$artifactPath = if ([IO.Path]::IsPathRooted($ArtifactRoot)) { + [IO.Path]::GetFullPath($ArtifactRoot) +} elseif (-not [string]::IsNullOrWhiteSpace($TrustedOutputRoot)) { + [IO.Path]::GetFullPath((Join-Path $TrustedOutputRoot $ArtifactRoot)) +} else { + [IO.Path]::GetFullPath((Join-Path $repoRoot $ArtifactRoot)) +} +if (-not [string]::IsNullOrWhiteSpace($TrustedOutputRoot)) { + $artifactPath = New-TrustedOutputDirectory -Path $artifactPath +} else { + $repoPrefix = $repoRoot.TrimEnd([IO.Path]::DirectorySeparatorChar) + [IO.Path]::DirectorySeparatorChar + if (-not $artifactPath.StartsWith($repoPrefix, [StringComparison]::OrdinalIgnoreCase)) { + throw "ArtifactRoot must resolve inside the repository unless TrustedOutputRoot is supplied: $artifactPath" + } +} + +$prefix = "engram-prc-img-$PID-$([Guid]::NewGuid().ToString('N').Substring(0, 8))" +$composeProject = "$prefix-compose" +$startedAt = (Get-Date).ToUniversalTime().ToString('o') +$caught = $null +$cleanupPassed = $false +$runtimePassed = $false +$imageIds = [ordered]@{} +$sarifHashes = [ordered]@{} +$scanCounts = [ordered]@{} +$toolVersions = [ordered]@{} +$lddHash = $null +$sourceCommit = $null +$sourceTree = $null +$buildVersion = $null +$buildContextRoot = $null +$buildContext = $null +$buildContextCleaned = $false +$runtimeProof = [ordered]@{ + critical_tests = $false + volume_ownership_contract = $false + server_home_persistence = $false + legacy_postgres_uid_migration = $false + compose_all_healthy = $false + server_liveness = $false + server_readiness = $false + operator_readiness = $false + postgres_17_10 = $false + pgvector_0_8_1 = $false + migrations_present = $false + migration_table_count = 0 + core_schema_table_count = 0 + restart_recovery = $false + postgres_recreation_retained_marker = $false + local_tags_promoted_from_exact_ids = $false +} + +New-Item -ItemType Directory -Force -Path $artifactPath | Out-Null +foreach ($name in @('server', 'operator-console', 'postgres', 'runtime', 'cleanup')) { + New-Item -ItemType Directory -Force -Path (Join-Path $artifactPath $name) | Out-Null +} + +function Invoke-LoggedNative { + param( + [Parameter(Mandatory = $true)][string]$File, + [Parameter(Mandatory = $true)][string[]]$Arguments, + [Parameter(Mandatory = $true)][string]$LogPath + ) + + Write-Host "> $File $($Arguments -join ' ')" + $normalized = [Collections.Generic.List[string]]::new() + & $File @Arguments 2>&1 | ForEach-Object { + $line = $_.ToString().TrimEnd() + $normalized.Add($line) + Write-Host $line + } + $exitCode = $LASTEXITCODE + $normalized | Set-Content -Encoding utf8NoBOM -LiteralPath $LogPath + if ($exitCode -ne 0) { + throw "$File exited $exitCode; transcript: $LogPath" + } +} + +function Remove-TrackedBuildContext { + if ([string]::IsNullOrWhiteSpace($buildContextRoot)) { + return + } + if (-not (Test-Path -LiteralPath $buildContextRoot)) { + $script:buildContextCleaned = $true + return + } + $tempRoot = [IO.Path]::GetFullPath([IO.Path]::GetTempPath()).TrimEnd([IO.Path]::DirectorySeparatorChar, [IO.Path]::AltDirectorySeparatorChar) + $resolved = [IO.Path]::GetFullPath($buildContextRoot) + $tempPrefix = $tempRoot + [IO.Path]::DirectorySeparatorChar + if (-not $resolved.StartsWith($tempPrefix, [StringComparison]::OrdinalIgnoreCase) -or + -not ([IO.Path]::GetFileName($resolved)).StartsWith('engram-tracked-build-', [StringComparison]::Ordinal)) { + throw "Refusing to remove unverified build-context path: $resolved" + } + Remove-Item -Force -Recurse -LiteralPath $resolved + $script:buildContextCleaned = -not (Test-Path -LiteralPath $resolved) +} + +function Invoke-CapturedNative { + param( + [Parameter(Mandatory = $true)][string]$File, + [Parameter(Mandatory = $true)][string[]]$Arguments + ) + + $output = @(& $File @Arguments 2>&1 | ForEach-Object { $_.ToString() }) + $exitCode = $LASTEXITCODE + if ($exitCode -ne 0) { + throw "$File $($Arguments -join ' ') exited $exitCode`: $($output -join [Environment]::NewLine)" + } + return ($output -join [Environment]::NewLine).Trim() +} + +function Get-ImageId { + param([Parameter(Mandatory = $true)][string]$Tag) + return Invoke-CapturedNative -File 'docker' -Arguments @('image', 'inspect', $Tag, '--format', '{{.Id}}') +} + +function Get-ComposeContainerId { + param([Parameter(Mandatory = $true)][string]$Service) + return Invoke-CapturedNative -File 'docker' -Arguments @( + 'compose', '-p', $composeProject, '-f', 'docker-compose.yml', 'ps', '-q', $Service + ) +} + +function Wait-Healthy { + param( + [Parameter(Mandatory = $true)][string]$Container, + [int]$TimeoutSeconds = 120 + ) + + $deadline = (Get-Date).AddSeconds($TimeoutSeconds) + do { + $status = (& docker inspect --format '{{if .State.Health}}{{.State.Health.Status}}{{else}}{{.State.Status}}{{end}}' $Container 2>$null).Trim() + if ($LASTEXITCODE -eq 0 -and $status -eq 'healthy') { + return + } + if ($status -in @('exited', 'dead')) { + $logs = & docker logs --tail 80 $Container 2>&1 + throw "Container $Container reached $status before healthy: $logs" + } + Start-Sleep -Milliseconds 500 + } while ((Get-Date) -lt $deadline) + + $inspect = & docker inspect --format '{{json .State}}' $Container 2>&1 + $logs = & docker logs --tail 80 $Container 2>&1 + throw "Container $Container did not become healthy. state=$inspect logs=$logs" +} + +function Get-PublishedUrl { + param( + [Parameter(Mandatory = $true)][string]$Service, + [Parameter(Mandatory = $true)][string]$ContainerPort + ) + + $published = Invoke-CapturedNative -File 'docker' -Arguments @( + 'compose', '-p', $composeProject, '-f', 'docker-compose.yml', 'port', $Service, $ContainerPort + ) + $first = ($published -split "`r?`n")[0] + if ($first -notmatch ':(?\d+)$') { + throw "Unexpected published-port value for $Service`: $first" + } + return "http://127.0.0.1:$($Matches.port)" +} + +function Assert-ReadyJson { + param([Parameter(Mandatory = $true)][string]$Url) + $response = Invoke-WebRequest -UseBasicParsing -TimeoutSec 10 -Uri $Url + if ($response.StatusCode -ne 200 -or $response.Content.Trim() -ne '{"status":"ready"}') { + throw "Semantic readiness mismatch at $Url`: status=$($response.StatusCode) body=$($response.Content)" + } +} + +function Wait-ReadyJson { + param( + [Parameter(Mandatory = $true)][string]$Url, + [int]$TimeoutSeconds = 60 + ) + $deadline = (Get-Date).AddSeconds($TimeoutSeconds) + $lastError = $null + do { + try { + Assert-ReadyJson -Url $Url + return + } catch { + $lastError = $_.Exception.Message + Start-Sleep -Milliseconds 500 + } + } while ((Get-Date) -lt $deadline) + throw "Readiness did not recover at $Url`: $lastError" +} + +function Wait-LivenessReady { + param( + [Parameter(Mandatory = $true)][string]$Url, + [int]$TimeoutSeconds = 60 + ) + $deadline = (Get-Date).AddSeconds($TimeoutSeconds) + $lastError = $null + do { + try { + $health = Invoke-RestMethod -TimeoutSec 5 -Uri $Url + if ($health.status -eq 'ready') { + return + } + $lastError = "status=$($health.status)" + } catch { + $lastError = $_.Exception.Message + } + Start-Sleep -Milliseconds 500 + } while ((Get-Date) -lt $deadline) + throw "Liveness did not recover at $Url`: $lastError" +} + +function Invoke-ComposePsql { + param([Parameter(Mandatory = $true)][string]$Sql) + return Invoke-CapturedNative -File 'docker' -Arguments @( + 'compose', '-p', $composeProject, '-f', 'docker-compose.yml', + 'exec', '-T', 'postgres', 'psql', '-qAt', '-v', 'ON_ERROR_STOP=1', + '-U', 'engram', '-d', 'engram', '-c', $Sql + ) +} + +function Get-SarifResultCount { + param([Parameter(Mandatory = $true)][string]$Path) + $sarif = Get-Content -Raw -LiteralPath $Path | ConvertFrom-Json -Depth 100 + $results = @( + foreach ($run in @($sarif.runs)) { + if ($run.PSObject.Properties.Name -contains 'results') { + @($run.results) + } + } + ) + return $results.Count +} + +function Get-PrefixedResourceInventory { + param([Parameter(Mandatory = $true)][string]$ResourcePrefix) + + $containersOutput = Invoke-CapturedNative -File 'docker' -Arguments @('ps', '-aq', '--filter', "name=$ResourcePrefix") + $volumesOutput = Invoke-CapturedNative -File 'docker' -Arguments @('volume', 'ls', '-q', '--filter', "name=$ResourcePrefix") + $networksOutput = Invoke-CapturedNative -File 'docker' -Arguments @('network', 'ls', '-q', '--filter', "name=$ResourcePrefix") + + return [ordered]@{ + containers = @($containersOutput -split "`r?`n" | Where-Object { -not [string]::IsNullOrWhiteSpace($_) }) + volumes = @($volumesOutput -split "`r?`n" | Where-Object { -not [string]::IsNullOrWhiteSpace($_) }) + networks = @($networksOutput -split "`r?`n" | Where-Object { -not [string]::IsNullOrWhiteSpace($_) }) + } +} + +function Remove-PrefixedResources { + param([Parameter(Mandatory = $true)][string]$ResourcePrefix) + + foreach ($entry in ([ordered]@{ + ENGRAM_SERVER_IMAGE = 'engram:cleanup-placeholder' + ENGRAM_OPERATOR_IMAGE = 'engram:cleanup-placeholder' + ENGRAM_POSTGRES_IMAGE = 'engram:cleanup-placeholder' + ENGRAM_BUILD_VERSION = "sha-$('0' * 40)" + }).GetEnumerator()) { + if ([string]::IsNullOrWhiteSpace([Environment]::GetEnvironmentVariable($entry.Key, 'Process'))) { + [Environment]::SetEnvironmentVariable($entry.Key, $entry.Value, 'Process') + } + } + Invoke-LoggedNative -File 'docker' -Arguments @( + 'compose', '-p', $composeProject, '-f', 'docker-compose.yml', + 'down', '--volumes', '--remove-orphans' + ) -LogPath (Join-Path $artifactPath 'cleanup/compose-down.log') + + $before = Get-PrefixedResourceInventory -ResourcePrefix $ResourcePrefix + + foreach ($id in $before.containers) { + Invoke-CapturedNative -File 'docker' -Arguments @('rm', '-f', $id) | Out-Null + } + foreach ($name in $before.volumes) { + Invoke-CapturedNative -File 'docker' -Arguments @('volume', 'rm', $name) | Out-Null + } + foreach ($id in $before.networks) { + Invoke-CapturedNative -File 'docker' -Arguments @('network', 'rm', $id) | Out-Null + } + + $after = Get-PrefixedResourceInventory -ResourcePrefix $ResourcePrefix + return [ordered]@{ + prefix = $ResourcePrefix + removed = $before + containers = $after.containers + volumes = $after.volumes + networks = $after.networks + } +} + +$environmentNames = @( + 'ENGRAM_SERVER_IMAGE', 'ENGRAM_OPERATOR_IMAGE', 'ENGRAM_POSTGRES_IMAGE', 'ENGRAM_BUILD_VERSION', + 'ENGRAM_TEST_RESOURCE_PREFIX', 'POSTGRES_PASSWORD', 'ENGRAM_AUTH_DISABLED', + 'WORKER_BIND', 'WORKER_PORT', 'OPERATOR_CONSOLE_BIND', 'OPERATOR_CONSOLE_PORT', + 'DATABASE_DSN', 'ENGRAM_AUTH_ADMIN_TOKEN', 'ENGRAM_VAULT_KEY', + 'ENGRAM_EMBEDDING_URL', 'ENGRAM_EMBEDDING_MODEL', 'ENGRAM_EMBEDDING_API_KEY', + 'ENGRAM_VNEXT_ENABLED', 'ENGRAM_LIFECYCLE_ENABLED', 'ENGRAM_VNEXT_F_ENABLED', + 'ENGRAM_GRAPH_ENABLED', 'ENGRAM_TEMPORAL_TRUTH_ENABLED', + 'ENGRAM_CRYSTALLIZATION_ENABLED', 'OPERATOR_CONSOLE_API_DISPLAY_HOST' +) +$savedEnvironment = [ordered]@{} +foreach ($name in $environmentNames) { + $savedEnvironment[$name] = [Environment]::GetEnvironmentVariable($name, 'Process') + [Environment]::SetEnvironmentVariable($name, $null, 'Process') +} +$env:POSTGRES_PASSWORD = "prc-$([Guid]::NewGuid().ToString('N'))" +$env:ENGRAM_AUTH_DISABLED = 'true' +$env:WORKER_BIND = '127.0.0.1' +$env:WORKER_PORT = '0' +$env:OPERATOR_CONSOLE_BIND = '127.0.0.1' +$env:OPERATOR_CONSOLE_PORT = '0' + +Push-Location $repoRoot +try { + $toolVersions.docker = Invoke-CapturedNative -File 'docker' -Arguments @('version', '--format', '{{.Client.Version}} client / {{.Server.Version}} server') + $toolVersions.buildx = Invoke-CapturedNative -File 'docker' -Arguments @('buildx', 'version') + $toolVersions.scout = Invoke-CapturedNative -File 'docker' -Arguments @('scout', 'version') + $toolVersions.go = Invoke-CapturedNative -File 'go' -Arguments @('version') + $toolVersions.node = Invoke-CapturedNative -File 'node' -Arguments @('--version') + $toolVersions.npm = Invoke-CapturedNative -File 'npm' -Arguments @('--version') + + $sourceCommit = Invoke-CapturedNative -File 'git' -Arguments @('rev-parse', 'HEAD') + $sourceTree = Invoke-CapturedNative -File 'git' -Arguments @('rev-parse', 'HEAD^{tree}') + $buildVersion = if ([string]::IsNullOrWhiteSpace($Version)) { + Assert-CanonicalVersion -Value "sha-$sourceCommit" + } else { + Assert-CanonicalVersion -Value $Version + } + $sourceStatus = Invoke-CapturedNative -File 'git' -Arguments @('status', '--porcelain=v1', '--untracked-files=all') + if (-not [string]::IsNullOrWhiteSpace($sourceStatus)) { + throw "Image acceptance requires a clean source worktree; commit the candidate first: $sourceStatus" + } + + $buildContextRoot = Join-Path ([IO.Path]::GetTempPath()) "engram-tracked-build-$PID-$([Guid]::NewGuid().ToString('N'))" + $buildContext = Join-Path $buildContextRoot 'source' + $archivePath = Join-Path $buildContextRoot 'source.zip' + New-Item -ItemType Directory -Path $buildContext | Out-Null + & git -C $repoRoot archive --format=zip --output=$archivePath HEAD + if ($LASTEXITCODE -ne 0 -or -not (Test-Path -LiteralPath $archivePath -PathType Leaf)) { + throw 'Failed to create the tracked-file-only build context from candidate HEAD.' + } + Expand-Archive -LiteralPath $archivePath -DestinationPath $buildContext + Remove-Item -Force -LiteralPath $archivePath + $gitMetadata = @(Get-ChildItem -Force -Recurse -LiteralPath $buildContext | Where-Object { $_.Name -eq '.git' }) + if ($gitMetadata.Count -ne 0) { + throw 'Tracked build context unexpectedly contains Git metadata or credentials.' + } + + Invoke-LoggedNative -File 'docker' -Arguments @( + 'buildx', 'build', '--pull', '--no-cache', '--load', '--platform', $Platform, + '--target', 'server', '--build-arg', "VERSION=$buildVersion", + '--label', 'org.opencontainers.image.source=https://github.com/thebtf/engram', + '--label', "org.opencontainers.image.revision=$sourceCommit", + '--label', "org.opencontainers.image.version=$buildVersion", + '--iidfile', (Join-Path $artifactPath 'server/image-id.txt'), '-t', $ServerTag, $buildContext + ) -LogPath (Join-Path $artifactPath 'server/build.log') + + Invoke-LoggedNative -File 'docker' -Arguments @( + 'buildx', 'build', '--pull', '--no-cache', '--load', '--platform', $Platform, + '--target', 'operator-console', '--build-arg', "VERSION=$buildVersion", + '--label', 'org.opencontainers.image.source=https://github.com/thebtf/engram', + '--label', "org.opencontainers.image.revision=$sourceCommit", + '--label', "org.opencontainers.image.version=$buildVersion", + '--iidfile', (Join-Path $artifactPath 'operator-console/image-id.txt'), + '-t', $OperatorTag, $buildContext + ) -LogPath (Join-Path $artifactPath 'operator-console/build.log') + + Invoke-LoggedNative -File 'docker' -Arguments @( + 'buildx', 'build', '--pull', '--no-cache', '--load', '--platform', $Platform, + '-f', (Join-Path $buildContext 'deploy/postgres/Dockerfile'), + '--label', 'org.opencontainers.image.source=https://github.com/thebtf/engram', + '--label', "org.opencontainers.image.revision=$sourceCommit", + '--label', "org.opencontainers.image.version=$buildVersion", + '--iidfile', (Join-Path $artifactPath 'postgres/image-id.txt'), + '-t', $PostgresTag, $buildContext + ) -LogPath (Join-Path $artifactPath 'postgres/build.log') + + Remove-TrackedBuildContext + + $imageIds.server = (Get-Content -Raw -LiteralPath (Join-Path $artifactPath 'server/image-id.txt')).Trim() + $imageIds.operator_console = (Get-Content -Raw -LiteralPath (Join-Path $artifactPath 'operator-console/image-id.txt')).Trim() + $imageIds.postgres = (Get-Content -Raw -LiteralPath (Join-Path $artifactPath 'postgres/image-id.txt')).Trim() + foreach ($entry in $imageIds.GetEnumerator()) { + if ($entry.Value -notmatch '^sha256:[0-9a-f]{64}$') { + throw "Buildx wrote an invalid exact image ID for $($entry.Key): $($entry.Value)" + } + Invoke-CapturedNative -File 'docker' -Arguments @('image', 'inspect', $entry.Value) | Out-Null + } + Invoke-CapturedNative -File 'docker' -Arguments @('image', 'inspect', $imageIds.server) | + Set-Content -Encoding utf8NoBOM -LiteralPath (Join-Path $artifactPath 'server/image-inspect.json') + Invoke-CapturedNative -File 'docker' -Arguments @('image', 'inspect', $imageIds.operator_console) | + Set-Content -Encoding utf8NoBOM -LiteralPath (Join-Path $artifactPath 'operator-console/image-inspect.json') + Invoke-CapturedNative -File 'docker' -Arguments @('image', 'inspect', $imageIds.postgres) | + Set-Content -Encoding utf8NoBOM -LiteralPath (Join-Path $artifactPath 'postgres/image-inspect.json') + + $lddContainer = "$prefix-ldd-proof" + Invoke-CapturedNative -File 'docker' -Arguments @('create', '--name', $lddContainer, $imageIds.server) | Out-Null + try { + $lddPath = Join-Path $artifactPath 'server/engram-server.ldd' + Invoke-CapturedNative -File 'docker' -Arguments @('cp', "${lddContainer}:/usr/share/engram/engram-server.ldd", $lddPath) | Out-Null + $lddText = Get-Content -Raw -LiteralPath $lddPath + if ($lddText -match 'not found' -or $lddText -notmatch 'libc\.so') { + throw "Server ldd proof is incomplete: $lddText" + } + $lddHash = (Get-FileHash -Algorithm SHA256 -LiteralPath $lddPath).Hash.ToLowerInvariant() + } finally { + & docker rm -f $lddContainer 2>$null | Out-Null + } + + $scanTargets = @( + @{ Name = 'server'; Id = $imageIds.server }, + @{ Name = 'operator-console'; Id = $imageIds.operator_console }, + @{ Name = 'postgres'; Id = $imageIds.postgres } + ) + foreach ($target in $scanTargets) { + $sarif = Join-Path $artifactPath "$($target.Name)/docker-scout.sarif" + Invoke-LoggedNative -File 'docker' -Arguments @( + 'scout', 'cves', "local://$($target.Id)", '--platform', $Platform, + '--only-severity', 'critical,high', '--exit-code', '--format', 'sarif', '--output', $sarif + ) -LogPath (Join-Path $artifactPath "$($target.Name)/docker-scout.log") + $count = Get-SarifResultCount -Path $sarif + if ($count -ne 0) { + throw "Scanner returned $count HIGH/CRITICAL result(s) for $($target.Name)" + } + $scanCounts[$target.Name] = $count + $sarifHashes[$target.Name] = (Get-FileHash -Algorithm SHA256 -LiteralPath $sarif).Hash.ToLowerInvariant() + } + + Push-Location (Join-Path $repoRoot 'apps/operator-console') + try { + $auditPath = Join-Path $artifactPath 'operator-console/npm-audit.json' + & npm audit --package-lock-only --audit-level=high --json 2>&1 | + Set-Content -LiteralPath $auditPath + if ($LASTEXITCODE -ne 0) { + throw "npm audit reported a HIGH/CRITICAL locked-graph finding; evidence: $auditPath" + } + $auditText = Get-Content -Raw -LiteralPath $auditPath + if ($auditText -match '"(picomatch|sigstore)"\s*:') { + throw 'Operator lock audit contains a picomatch or sigstore finding.' + } + } finally { + Pop-Location + } + + $env:ENGRAM_SERVER_IMAGE = $imageIds.server + $env:ENGRAM_OPERATOR_IMAGE = $imageIds.operator_console + $env:ENGRAM_POSTGRES_IMAGE = $imageIds.postgres + $env:ENGRAM_BUILD_VERSION = $buildVersion + $env:ENGRAM_TEST_RESOURCE_PREFIX = "$prefix-test" + + Invoke-LoggedNative -File 'go' -Arguments @( + 'test', '-json', '-tags=critical', './tests/critical/runtime', + '-run', '^(TestOperatorConsoleRuntimeTargetContract|TestServerImageContract|TestPostgresImageContract)$', + '-count=1' + ) -LogPath (Join-Path $artifactPath 'runtime/go-test.jsonl') + $runtimeProof.critical_tests = $true + $runtimeProof.volume_ownership_contract = $true + $runtimeProof.server_home_persistence = $true + $runtimeProof.legacy_postgres_uid_migration = $true + + Invoke-LoggedNative -File 'docker' -Arguments @( + 'compose', '-p', $composeProject, '-f', 'docker-compose.yml', + 'up', '-d', '--no-build', '--pull', 'never' + ) -LogPath (Join-Path $artifactPath 'runtime/compose-up.log') + + foreach ($service in @('postgres', 'server', 'operator-console')) { + Wait-Healthy -Container (Get-ComposeContainerId -Service $service) + } + $runtimeProof.compose_all_healthy = $true + + $serverUrl = Get-PublishedUrl -Service 'server' -ContainerPort '37777' + $operatorUrl = Get-PublishedUrl -Service 'operator-console' -ContainerPort '3000' + Wait-LivenessReady -Url "$serverUrl/health" + $runtimeProof.server_liveness = $true + Wait-ReadyJson -Url "$serverUrl/api/ready" + $runtimeProof.server_readiness = $true + Wait-ReadyJson -Url "$operatorUrl/api/ready" + $runtimeProof.operator_readiness = $true + + if ((Invoke-ComposePsql -Sql 'SHOW server_version;').Trim() -ne '17.10') { + throw 'Canonical compose PostgreSQL is not 17.10.' + } + $runtimeProof.postgres_17_10 = $true + Invoke-ComposePsql -Sql 'CREATE EXTENSION IF NOT EXISTS vector;' | Out-Null + if ((Invoke-ComposePsql -Sql "SELECT extversion FROM pg_extension WHERE extname='vector';").Trim() -ne '0.8.1') { + throw 'Canonical compose pgvector is not 0.8.1.' + } + $runtimeProof.pgvector_0_8_1 = $true + $tableCount = [int](Invoke-ComposePsql -Sql "SELECT COUNT(*) FROM information_schema.tables WHERE table_schema='public';") + if ($tableCount -lt 40) { + throw "Server startup created only $tableCount public tables; expected the production schema (at least 40)." + } + $runtimeProof.migration_table_count = $tableCount + $coreTableCount = [int](Invoke-ComposePsql -Sql "SELECT COUNT(*) FROM information_schema.tables WHERE table_schema='public' AND table_name IN ('memories','behavioral_rules','credentials','issues','documents','api_tokens');") + if ($coreTableCount -ne 6) { + throw "Server startup is missing one or more core tables: found $coreTableCount of 6." + } + $runtimeProof.core_schema_table_count = $coreTableCount + $runtimeProof.migrations_present = $true + + Invoke-ComposePsql -Sql "CREATE TABLE IF NOT EXISTS image_gate_marker (id integer PRIMARY KEY, note text NOT NULL, embedding vector(3) NOT NULL); INSERT INTO image_gate_marker VALUES (1, 'compose-retained', '[1,2,3]') ON CONFLICT (id) DO UPDATE SET note=EXCLUDED.note, embedding=EXCLUDED.embedding;" | Out-Null + + Invoke-LoggedNative -File 'docker' -Arguments @( + 'compose', '-p', $composeProject, '-f', 'docker-compose.yml', 'restart', 'server', 'operator-console' + ) -LogPath (Join-Path $artifactPath 'runtime/compose-restart.log') + foreach ($service in @('server', 'operator-console')) { + Wait-Healthy -Container (Get-ComposeContainerId -Service $service) + } + $serverUrl = Get-PublishedUrl -Service 'server' -ContainerPort '37777' + $operatorUrl = Get-PublishedUrl -Service 'operator-console' -ContainerPort '3000' + Wait-ReadyJson -Url "$serverUrl/api/ready" + Wait-ReadyJson -Url "$operatorUrl/api/ready" + $runtimeProof.restart_recovery = $true + + Invoke-LoggedNative -File 'docker' -Arguments @( + 'compose', '-p', $composeProject, '-f', 'docker-compose.yml', 'stop', 'server', 'operator-console' + ) -LogPath (Join-Path $artifactPath 'runtime/compose-stop-app.log') + Invoke-LoggedNative -File 'docker' -Arguments @( + 'compose', '-p', $composeProject, '-f', 'docker-compose.yml', 'rm', '-f', '-s', 'postgres' + ) -LogPath (Join-Path $artifactPath 'runtime/compose-remove-postgres.log') + Invoke-LoggedNative -File 'docker' -Arguments @( + 'compose', '-p', $composeProject, '-f', 'docker-compose.yml', + 'up', '-d', '--no-build', '--pull', 'never', 'postgres' + ) -LogPath (Join-Path $artifactPath 'runtime/compose-recreate-postgres.log') + Wait-Healthy -Container (Get-ComposeContainerId -Service 'postgres') + $marker = Invoke-ComposePsql -Sql "SELECT note || ':' || embedding::text FROM image_gate_marker WHERE id=1;" + if ($marker.Trim() -ne 'compose-retained:[1,2,3]') { + throw "PostgreSQL marker was not retained after container recreation: $marker" + } + $runtimeProof.postgres_recreation_retained_marker = $true + + Invoke-LoggedNative -File 'docker' -Arguments @( + 'compose', '-p', $composeProject, '-f', 'docker-compose.yml', + 'up', '-d', '--no-build', '--pull', 'never', 'server', 'operator-console' + ) -LogPath (Join-Path $artifactPath 'runtime/compose-recover-app.log') + foreach ($service in @('server', 'operator-console')) { + Wait-Healthy -Container (Get-ComposeContainerId -Service $service) + } + + foreach ($promotion in @( + @{ Id = $imageIds.server; Tag = $ServerTag }, + @{ Id = $imageIds.operator_console; Tag = $OperatorTag }, + @{ Id = $imageIds.postgres; Tag = $PostgresTag } + )) { + Invoke-CapturedNative -File 'docker' -Arguments @('tag', $promotion.Id, $promotion.Tag) | Out-Null + if ((Get-ImageId -Tag $promotion.Tag) -ne $promotion.Id) { + throw "Local tag promotion did not retain exact image ID for $($promotion.Tag)." + } + } + $runtimeProof.local_tags_promoted_from_exact_ids = $true + $runtimePassed = $true +} catch { + $caught = $_ +} finally { + try { + Remove-TrackedBuildContext + } catch { + if ($null -eq $caught) { $caught = $_ } + $buildContextCleaned = $false + } + try { + $cleanupInventory = Remove-PrefixedResources -ResourcePrefix $prefix + $cleanupPassed = @($cleanupInventory.containers).Count -eq 0 -and + @($cleanupInventory.volumes).Count -eq 0 -and + @($cleanupInventory.networks).Count -eq 0 + } catch { + $cleanupPassed = $false + $cleanupInventory = [ordered]@{ + prefix = $prefix + removed = $null + containers = $null + volumes = $null + networks = $null + error = $_.Exception.Message + } + if ($null -eq $caught) { + $caught = $_ + } + } + $cleanupInventory.status = if ($cleanupPassed) { 'PASS' } else { 'FAIL' } + $cleanupInventory.observed_at = (Get-Date).ToUniversalTime().ToString('o') + $cleanupInventory | ConvertTo-Json -Depth 8 | + Set-Content -Encoding utf8NoBOM -LiteralPath (Join-Path $artifactPath 'cleanup/cleanup.json') + + foreach ($name in $environmentNames) { + [Environment]::SetEnvironmentVariable($name, $savedEnvironment[$name], 'Process') + } + + if (-not [string]::IsNullOrWhiteSpace($TrustedOutputRoot)) { + $artifactPath = Assert-TrustedOutputTree -Path $artifactPath + } + + $manifest = [ordered]@{ + schema_version = 1 + status = if ($null -eq $caught -and $runtimePassed -and $cleanupPassed) { 'PASS' } else { 'FAIL' } + started_at = $startedAt + completed_at = (Get-Date).ToUniversalTime().ToString('o') + source_parent_commit = $sourceCommit + source_parent_tree = $sourceTree + build_version = $buildVersion + source_worktree_dirty = $false + build_context = 'git-archive-tracked-files-only' + git_credentials_present_in_build_context = $false + build_context_cleanup_passed = $buildContextCleaned + platform = $Platform + no_allowlist = $true + scanner_exception_inputs = @() + tags = [ordered]@{ server = $ServerTag; operator_console = $OperatorTag; postgres = $PostgresTag } + dockerfiles = [ordered]@{ + runtime_sha256 = (Get-FileHash -Algorithm SHA256 -LiteralPath (Join-Path $repoRoot 'Dockerfile')).Hash.ToLowerInvariant() + postgres_sha256 = (Get-FileHash -Algorithm SHA256 -LiteralPath (Join-Path $repoRoot 'deploy/postgres/Dockerfile')).Hash.ToLowerInvariant() + } + server_ldd_sha256 = $lddHash + pinned_sources = [ordered]@{ + dockerfile_frontend = 'docker/dockerfile:1@sha256:87999aa3d42bdc6bea60565083ee17e86d1f3339802f543c0d03998580f9cb89' + server = 'gcr.io/distroless/base-debian13@sha256:b78832f41c8128046807c24840ebee4f1c18ba7870eed423d8750c272c15e147' + operator_console = 'gcr.io/distroless/nodejs22-debian13@sha256:773a62fbe24a3f8c8b24b16fd59154627f8b406737bc906f83bf1732bc8907dd' + postgres = 'cgr.dev/chainguard/wolfi-base@sha256:02dab76bd852a70556b5b2002195c8a5fdab77d323c433bf6642aab080489795' + go_builder = 'golang:1.25.12-bookworm@sha256:a9c020ee3d1508c7be5435c262434e3d3fc1d0e76a11afeb9ddae7d60bc86aa4' + node_builder = 'node:22-bookworm-slim@sha256:53ada149d435c38b14476cb57e4a7da73c15595aba79bd6971b547ceb6d018bf' + } + pinned_packages = [ordered]@{ + bash = '5.3-r12' + gosu = '1.19-r13' + postgresql = '17.10-r1' + pgvector = '0.8.1-r0' + } + image_ids = $imageIds + high_critical_findings = $scanCounts + sarif_sha256 = $sarifHashes + runtime_proof = $runtimeProof + cleanup = $cleanupInventory + published_digests = [ordered]@{ server = $null; operator_console = $null; postgres = $null } + tools = $toolVersions + failure = if ($null -eq $caught) { $null } else { $caught.Exception.Message } + } + Write-JsonFile -Value $manifest -Path (Join-Path $artifactPath 'final-image-set.json') + Pop-Location +} + +if ($null -ne $caught) { + throw $caught +} +if (-not $cleanupPassed) { + throw "Cleanup verification failed for exact prefix $prefix" +} + +if (-not [string]::IsNullOrWhiteSpace($ReleasePayloadPath)) { + $payload = Export-ReleasePayload ` + -AcceptanceManifestPath (Join-Path $artifactPath 'final-image-set.json') ` + -ExactImageIDs $imageIds ` + -Commit $sourceCommit ` + -BuildVersion $buildVersion + Write-Host "Release payload: $payload" +} + +Write-Host "PASS: pinned images, exact-ID scans, runtime matrix, compose recreation, and cleanup proof" +Write-Host "Evidence: $artifactPath" diff --git a/tests/critical/runtime/image_runtime_contract_test.go b/tests/critical/runtime/image_runtime_contract_test.go new file mode 100644 index 00000000..af53683d --- /dev/null +++ b/tests/critical/runtime/image_runtime_contract_test.go @@ -0,0 +1,1776 @@ +//go:build critical + +// Package runtime_test contains @critical image tests. These tests use real +// Docker containers and the shipped HTTP surfaces; they are not unit mocks. +package runtime_test + +import ( + "archive/tar" + "bytes" + "crypto/sha256" + "encoding/json" + "fmt" + "io" + "net/http" + "os" + "os/exec" + "path/filepath" + "regexp" + "runtime" + "strconv" + "strings" + "testing" + "time" +) + +const ( + defaultServerImage = "engram:prc-server" + defaultOperatorImage = "engram:prc-operator-console" + defaultPostgresImage = "engram:prc-postgres" +) + +type imageInspect struct { + ID string `json:"Id"` + Config struct { + User string `json:"User"` + Env []string `json:"Env"` + Entrypoint []string `json:"Entrypoint"` + Cmd []string `json:"Cmd"` + Labels map[string]string `json:"Labels"` + Healthcheck *dockerHealthConfig `json:"Healthcheck"` + } `json:"Config"` +} + +type dockerHealthConfig struct { + Test []string `json:"Test"` +} + +type containerInspect struct { + Config struct { + User string `json:"User"` + } `json:"Config"` + HostConfig struct { + ReadonlyRootfs bool `json:"ReadonlyRootfs"` + CapDrop []string `json:"CapDrop"` + SecurityOpt []string `json:"SecurityOpt"` + } `json:"HostConfig"` +} + +type stackFixture struct { + prefix string + network string + postgresVolume string + serverVolume string + postgres string + server string +} + +// @critical +// @category: contract +// @features: [image-remediation, release-safety] +func TestDockerReleaseRefFreshnessGuard(t *testing.T) { + verifyDockerReleaseRefFreshnessGuard(t, repositoryRoot(t)) +} + +// @critical +// @category: behavioral +// @features: [image-remediation, operator-console] +// @dev_stand: required +func TestOperatorConsoleRuntimeTargetContract(t *testing.T) { + repo := repositoryRoot(t) + requireFileContains(t, filepath.Join(repo, "Dockerfile"), + "gcr.io/distroless/nodejs22-debian13@sha256:773a62fbe24a3f8c8b24b16fd59154627f8b406737bc906f83bf1732bc8907dd", + "NUXT_OPERATOR_API_TARGET=http://server:37777", + "CMD [\".output/server/index.mjs\"]", + "http://127.0.0.1:3000/api/ready", + ) + requireFileContains(t, filepath.Join(repo, ".dockerignore"), + ".env", + ".env.*", + "*.pem", + "*.key", + ".npmrc", + "secrets/", + ) + requireFileContains(t, filepath.Join(repo, "deploy", "docker-compose.runtime.yml"), + "operator-console:", + "${ENGRAM_OPERATOR_IMAGE:?set ENGRAM_OPERATOR_IMAGE from the immutable release manifest}", + "NUXT_OPERATOR_API_TARGET: \"http://server:37777\"", + ) + requireFileNotContains(t, filepath.Join(repo, "deploy", "docker-compose.runtime.yml"), + "operator-web:", "NUXT_ENGRAM_API_TARGET") + + operatorImage := imageFromEnv("ENGRAM_OPERATOR_IMAGE", defaultOperatorImage) + operatorConfig := inspectImage(t, operatorImage) + if operatorConfig.Config.User != "65532" && operatorConfig.Config.User != "65532:65532" { + t.Fatalf("operator image must run as UID 65532, got %q", operatorConfig.Config.User) + } + if got := strings.Join(operatorConfig.Config.Entrypoint, " "); got != "/nodejs/bin/node" { + t.Fatalf("operator must retain the distroless node entrypoint, got %q", got) + } + if got := strings.Join(operatorConfig.Config.Cmd, " "); got != ".output/server/index.mjs" { + t.Fatalf("operator command mismatch: %q", got) + } + requireEnv(t, operatorConfig.Config.Env, "NUXT_OPERATOR_API_TARGET", "http://server:37777") + requireProvenanceLabels(t, operatorConfig.Config.Labels) + requireHealthCommand(t, operatorConfig.Config.Healthcheck, "/usr/local/bin/engram-healthcheck", "http://127.0.0.1:3000/api/ready") + + stack := startServerStack(t) + operator := stack.prefix + "-operator" + t.Cleanup(func() { removeContainer(operator) }) + runDocker(t, nil, + "run", "-d", "--name", operator, + "--network", stack.network, "--network-alias", "operator-console", + "-p", "127.0.0.1::3000", + "--user", "65532:65532", "--read-only", "--cap-drop", "ALL", + "--security-opt", "no-new-privileges:true", + "--tmpfs", "/tmp:rw,noexec,nosuid,nodev,uid=65532,gid=65532,mode=0700,size=64m", + "-e", "NUXT_OPERATOR_API_TARGET=http://server:37777", + operatorImage, + ) + waitHealthy(t, operator, 90*time.Second) + requireHardenedContainer(t, operator, "65532:65532") + + baseURL := mappedURL(t, operator, "3000/tcp") + root := requireHTTP(t, baseURL+"/", http.StatusOK) + if !bytes.Contains(root, []byte("_nuxt/")) { + t.Fatal("operator root did not reference generated Nuxt assets") + } + ready := requireHTTP(t, baseURL+"/api/ready", http.StatusOK) + if strings.TrimSpace(string(ready)) != `{"status":"ready"}` { + t.Fatalf("operator proxy did not return exact backend readiness: %q", ready) + } + health := requireHTTP(t, baseURL+"/api/health", http.StatusOK) + if !bytes.Contains(health, []byte(`"status":"ready"`)) { + t.Fatalf("operator proxy did not reach the ready backend health route: %q", health) + } + requireReferencedAsset(t, baseURL, root) + + runDocker(t, nil, "restart", operator) + baseURL = mappedURL(t, operator, "3000/tcp") + ready = requireHTTPEventually(t, baseURL+"/api/ready", http.StatusOK, 60*time.Second) + waitHealthy(t, operator, 90*time.Second) + if strings.TrimSpace(string(ready)) != `{"status":"ready"}` { + t.Fatalf("operator lost backend readiness after restart: %q", ready) + } + + wrongTarget := stack.prefix + "-operator-wrong-target" + t.Cleanup(func() { removeContainer(wrongTarget) }) + runOperatorFixture(t, wrongTarget, stack.network, + "-e", "NUXT_OPERATOR_API_TARGET=http://missing-backend:37777", + "-e", "NUXT_ENGRAM_API_TARGET=http://server:37777", + ) + waitNotHealthy(t, wrongTarget, 20*time.Second) + + missingTarget := stack.prefix + "-operator-missing-target" + t.Cleanup(func() { removeContainer(missingTarget) }) + runOperatorFixture(t, missingTarget, "none", + "-e", "NUXT_OPERATOR_API_TARGET=", + ) + waitNotHealthy(t, missingTarget, 20*time.Second) + + for _, fixture := range []struct { + name string + response string + }{ + {name: "malformed", response: `res.writeHead(200,{'content-type':'application/json'});res.end('not-json')`}, + {name: "error-200", response: `res.writeHead(200,{'content-type':'application/json'});res.end('{"status":"error"}')`}, + {name: "root-only", response: `if(req.url==='/'){res.writeHead(200,{'content-type':'application/json'});res.end('{"status":"ready"}')}else{res.writeHead(404);res.end('missing')}`}, + {name: "timeout", response: `if(req.url!=='/api/ready'){res.writeHead(404);res.end('missing')}`}, + } { + t.Run("backend "+fixture.name+" never becomes healthy", func(t *testing.T) { + backend := stack.prefix + "-backend-" + fixture.name + operator := stack.prefix + "-operator-" + fixture.name + t.Cleanup(func() { + removeContainer(operator) + removeContainer(backend) + }) + startFakeNodeBackend(t, backend, stack.network, fixture.response) + runOperatorFixture(t, operator, stack.network, + "-e", "NUXT_OPERATOR_API_TARGET=http://"+backend+":37777", + ) + waitNotHealthy(t, operator, 20*time.Second) + }) + } +} + +// @critical +// @category: behavioral +// @features: [image-remediation] +// @dev_stand: required +func TestServerImageContract(t *testing.T) { + repo := repositoryRoot(t) + t.Run("release ref freshness guard", func(t *testing.T) { + verifyDockerReleaseRefFreshnessGuard(t, repo) + }) + requireFileContains(t, filepath.Join(repo, "Dockerfile"), + "gcr.io/distroless/base-debian13@sha256:b78832f41c8128046807c24840ebee4f1c18ba7870eed423d8750c272c15e147", + "HOME=/var/lib/engram", + "http://127.0.0.1:37777/api/ready", + "VERSION must be canonical SemVer or sha-<40 lowercase hex>", + "Numeric prerelease identifiers", + ) + requireFileNotContains(t, filepath.Join(repo, "Dockerfile"), "curl -f http://localhost:37777/health") + + serverImage := imageFromEnv("ENGRAM_SERVER_IMAGE", defaultServerImage) + serverConfig := inspectImage(t, serverImage) + if serverConfig.Config.User != "65532" && serverConfig.Config.User != "65532:65532" { + t.Fatalf("server image must run as UID 65532, got %q", serverConfig.Config.User) + } + requireEnv(t, serverConfig.Config.Env, "HOME", "/var/lib/engram") + requireProvenanceLabels(t, serverConfig.Config.Labels) + requireHealthCommand(t, serverConfig.Config.Healthcheck, "/usr/local/bin/engram-healthcheck", "http://127.0.0.1:37777/api/ready") + + stack := startServerStack(t) + requireHardenedContainer(t, stack.server, "65532:65532") + inspectionImage := imageFromEnv("ENGRAM_POSTGRES_IMAGE", defaultPostgresImage) + requireVolumeMetadata(t, stack.serverVolume, inspectionImage, "65532:65532:700") + requireVolumePathMetadata(t, stack.serverVolume, inspectionImage, "/data/.engram", "65532:65532:700") + requireVolumePathMetadata(t, stack.serverVolume, inspectionImage, "/data/.engram/settings.json", "65532:65532:600") + settingsBeforeRestart := readVolumeFile(t, stack.serverVolume, inspectionImage, "/data/.engram/settings.json") + baseURL := mappedURL(t, stack.server, "37777/tcp") + health := requireHTTP(t, baseURL+"/health", http.StatusOK) + if !bytes.Contains(health, []byte(`"status":"ready"`)) { + t.Fatalf("liveness did not report ready after initialization: %q", health) + } + ready := requireHTTP(t, baseURL+"/api/ready", http.StatusOK) + if strings.TrimSpace(string(ready)) != `{"status":"ready"}` { + t.Fatalf("semantic readiness mismatch: %q", ready) + } + + runDocker(t, nil, "restart", stack.server) + baseURL = mappedURL(t, stack.server, "37777/tcp") + ready = requireHTTPEventually(t, baseURL+"/api/ready", http.StatusOK, 60*time.Second) + waitHealthy(t, stack.server, 90*time.Second) + if strings.TrimSpace(string(ready)) != `{"status":"ready"}` { + t.Fatalf("server did not regain readiness after restart: %q", ready) + } + settingsAfterRestart := readVolumeFile(t, stack.serverVolume, inspectionImage, "/data/.engram/settings.json") + if !bytes.Equal(settingsBeforeRestart, settingsAfterRestart) { + t.Fatal("server settings file changed or disappeared across container restart") + } + + failedServer := stack.prefix + "-server-init-failure" + failedHome := stack.prefix + "-server-failed-home" + runDocker(t, nil, "volume", "create", failedHome) + t.Cleanup(func() { + removeContainer(failedServer) + removeVolume(failedHome) + }) + runDocker(t, nil, + "run", "-d", "--name", failedServer, + "-p", "127.0.0.1::37777", + "--user", "65532:65532", "--read-only", "--cap-drop", "ALL", + "--security-opt", "no-new-privileges:true", + "--health-start-period", "1ms", "--health-interval", "1s", "--health-timeout", "4s", "--health-retries", "2", + "-v", failedHome+":/var/lib/engram", + "-e", "HOME=/var/lib/engram", + "-e", "DATABASE_DSN=postgres://engram:engram@127.0.0.1:1/unreachable?sslmode=disable", + "-e", "ENGRAM_AUTH_DISABLED=true", + serverImage, + ) + waitNotHealthy(t, failedServer, 60*time.Second) + failedURL := mappedURL(t, failedServer, "37777/tcp") + failedHealth := requireHTTP(t, failedURL+"/health", http.StatusOK) + if !bytes.Contains(failedHealth, []byte(`"status":"error"`)) { + t.Fatalf("failed initialization liveness must remain 200/error, got %q", failedHealth) + } + + for _, fixture := range []struct { + name string + prepare func(*testing.T, string) + extra []string + }{ + {name: "absent-volume"}, + {name: "empty-home", extra: []string{"-e", "HOME="}}, + {name: "root-owned-volume", prepare: func(t *testing.T, volume string) { + runDocker(t, nil, "volume", "create", volume) + postgresImage := imageFromEnv("ENGRAM_POSTGRES_IMAGE", defaultPostgresImage) + runDocker(t, nil, + "run", "--rm", "--user", "0", "--entrypoint", "/bin/sh", + "-v", volume+":/data", postgresImage, + "-c", "touch /data/.unwritable-contract && chown 0:0 /data /data/.unwritable-contract && chmod 0500 /data", + ) + }}, + } { + t.Run(fixture.name+" fails closed", func(t *testing.T) { + name := stack.prefix + "-server-" + fixture.name + volume := stack.prefix + "-home-" + fixture.name + t.Cleanup(func() { + removeContainer(name) + removeVolume(volume) + }) + args := []string{ + "run", "-d", "--name", name, + "--network", stack.network, + "--user", "65532:65532", "--read-only", "--cap-drop", "ALL", + "--security-opt", "no-new-privileges:true", + "--health-start-period", "1ms", "--health-interval", "1s", "--health-timeout", "4s", "--health-retries", "2", + "-e", "DATABASE_DSN=postgres://engram:engram@postgres:5432/engram?sslmode=disable", + "-e", "ENGRAM_AUTH_DISABLED=true", + } + if fixture.prepare != nil { + fixture.prepare(t, volume) + args = append(args, "-v", volume+":/var/lib/engram") + } + args = append(args, fixture.extra...) + args = append(args, serverImage) + runDocker(t, nil, args...) + waitNotHealthy(t, name, 20*time.Second) + }) + } +} + +func verifyDockerReleaseRefFreshnessGuard(t *testing.T, repo string) { + t.Helper() + for _, composePath := range []string{ + filepath.Join(repo, "docker-compose.yml"), + filepath.Join(repo, "deploy", "docker-compose.runtime.yml"), + } { + compose := readFile(t, composePath) + for _, required := range []string{ + "${ENGRAM_SERVER_IMAGE:?", "${ENGRAM_OPERATOR_IMAGE:?", "${ENGRAM_POSTGRES_IMAGE:?", + } { + if !strings.Contains(compose, required) { + t.Fatalf("%s does not require immutable release-manifest identity %q", composePath, required) + } + } + for _, forbidden := range []string{":main", ":latest", "ghcr.io/thebtf/engram:"} { + if strings.Contains(compose, forbidden) { + t.Fatalf("%s retains moving image default %q", composePath, forbidden) + } + } + } + verificationPath := filepath.Join(repo, ".github", "workflows", "docker.yaml") + publisherPath := filepath.Join(repo, ".github", "workflows", "docker-publish.yml") + for _, workflowPath := range []string{verificationPath, publisherPath} { + content, err := os.ReadFile(workflowPath) + if err != nil { + t.Fatal(err) + } + workflow := string(content) + if regexp.MustCompile(`(?m)^ packages:\s*write\s*$`).MatchString(workflow) { + t.Fatalf("%s grants packages:write at workflow scope", workflowPath) + } + for _, body := range inlineRunBodies(workflow) { + for _, forbidden := range []string{ + `${{ github.`, `${{ steps.`, `${{ inputs.`, "git describe", "type=ref", "type=semver", + } { + if strings.Contains(body, forbidden) { + t.Fatalf("%s embeds untrusted or alias-generating input in inline run body: %q", workflowPath, forbidden) + } + } + } + for _, forbidden := range []string{ + "type=ref", "type=semver", "type=sha", "is_default_branch", "{{major}}", "{{minor}}", + } { + if strings.Contains(workflow, forbidden) { + t.Fatalf("%s retains moving metadata alias %q", workflowPath, forbidden) + } + } + for _, match := range regexp.MustCompile(`(?m)^\s*uses:\s*([^\s#]+)`).FindAllStringSubmatch(workflow, -1) { + parts := strings.Split(match[1], "@") + if len(parts) != 2 || !regexp.MustCompile(`^[0-9a-f]{40}$`).MatchString(parts[1]) { + t.Fatalf("%s contains an unpinned action reference %q", workflowPath, match[1]) + } + } + } + + verification := readFile(t, verificationPath) + for _, fragment := range []string{ + "branches: [main]", + "tags: [\"v*\"]", + "workflow_dispatch:", + "verify-images:", + "Mode BuildAndScan", + } { + if !strings.Contains(verification, fragment) { + t.Fatalf("unprivileged Docker workflow lacks verification contract %q", fragment) + } + } + for _, forbidden := range []string{"packages: write", "docker/login-action@", "Mode Publish", "Mode ValidateWorkflowRun"} { + if strings.Contains(verification, forbidden) { + t.Fatalf("unprivileged Docker workflow acquired publication authority %q", forbidden) + } + } + + publisher := readFile(t, publisherPath) + for _, fragment := range []string{ + "workflow_run:", + "workflows: [\"Docker\"]", + "types: [completed]", + "packages: write", + "prepare-release:", + "publish-images:", + "needs: prepare-release", + "ref: main", + "Mode ValidateWorkflowRun", + "Mode BuildAndScan", + "Mode ValidateArtifactMetadata", + "Mode ValidatePayload", + "Mode LoadPayload", + "Mode ValidatePublicationEvidence", + "Mode PlanPublication", + "Mode Publish", + "-ReleasePayloadPath", + "-RepositoryRoot ./trusted", + "-RepositoryRoot ./candidate", + "-TrustedOutputRoot $env:RUNNER_TEMP", + "-ExpectedSha $env:VALIDATED_COMMIT", + "artifact-id:", + "artifact-digest:", + "artifact-ids:", + "artifact_name=engram-release-payload-$env:GITHUB_RUN_ID-$env:GITHUB_RUN_ATTEMPT", + "persist-credentials: false", + "cancel-in-progress: false", + "docker logout ghcr.io", + } { + if !strings.Contains(publisher, fragment) { + t.Fatalf("trusted workflow_run publisher lacks contract %q", fragment) + } + } + for _, forbidden := range []string{ + "workflow_dispatch:", "./candidate/scripts/", "overwrite: true", + "candidate/.agent/", "path: candidate/.agent", "ghcr.io/thebtf/engram:main", "value=latest", + } { + if strings.Contains(publisher, forbidden) { + t.Fatalf("trusted publisher retains forbidden candidate-controlled or moving surface %q", forbidden) + } + } + if got := strings.Count(publisher, "persist-credentials: false"); got != 3 { + t.Fatalf("two-runner publisher must disable persisted checkout credentials three times, got %d", got) + } + for _, blankSecret := range []string{`GITHUB_TOKEN: ""`, `GH_TOKEN: ""`, `CR_PAT: ""`, `GHCR_TOKEN: ""`} { + if !strings.Contains(publisher, blankSecret) { + t.Fatalf("candidate build step does not explicitly clear %q", blankSecret) + } + } + if got := strings.Count(publisher, "Mode ValidateWorkflowRun"); got != 2 { + t.Fatalf("both runners must independently validate workflow_run provenance, got %d validators", got) + } + if got := strings.Count(publisher, "-EventOnlyValidation"); got != 1 { + t.Fatalf("only the contents-read prepare job may use the event/git/ruleset validator, got %d", got) + } + prepareIndex := strings.Index(publisher, "prepare-release:") + publishJobIndex := strings.Index(publisher, "publish-images:") + packagesIndex := strings.Index(publisher, "packages: write") + if !(prepareIndex >= 0 && prepareIndex < publishJobIndex && publishJobIndex < packagesIndex) { + t.Fatalf("packages:write is not isolated to the fresh publish job: prepare=%d publish=%d packages=%d", prepareIndex, publishJobIndex, packagesIndex) + } + prepareJob := publisher[prepareIndex:publishJobIndex] + for _, forbidden := range []string{"actions: read", "actions: write", "packages: write"} { + if strings.Contains(prepareJob, forbidden) { + t.Fatalf("prepare-release must remain contents:read-only, found %q", forbidden) + } + } + privilegedJob := publisher[publishJobIndex:] + for _, required := range []string{"contents: read", "actions: read", "packages: write"} { + if !strings.Contains(privilegedJob, required) { + t.Fatalf("fresh publisher lacks explicit least-privilege permission %q", required) + } + } + if strings.Contains(publisher, "actions: write") { + t.Fatal("release workflow must never grant actions:write") + } + for _, forbidden := range []string{"path: candidate", "./candidate", "Mode BuildAndScan", "go test", "docker compose"} { + if strings.Contains(privilegedJob, forbidden) { + t.Fatalf("fresh packages:write job executes or checks out candidate-controlled material %q", forbidden) + } + } + validateIndex := strings.Index(publisher, "Mode ValidateWorkflowRun") + candidateIndex := strings.Index(publisher, "Checkout exact validated candidate") + buildIndex := strings.Index(publisher, "Mode BuildAndScan") + uploadIndex := strings.Index(publisher, "actions/upload-artifact@") + downloadIndex := strings.Index(publisher, "actions/download-artifact@") + artifactValidationIndex := strings.Index(privilegedJob, "Mode ValidateArtifactMetadata") + publishJobIndex + payloadValidationIndex := strings.Index(privilegedJob, "Mode ValidatePayload") + publishJobIndex + loadIndex := strings.Index(privilegedJob, "Mode LoadPayload") + publishJobIndex + preflightIndex := strings.Index(privilegedJob, "Mode PlanPublication") + publishJobIndex + loginIndex := strings.Index(publisher, "docker/login-action@") + publishIndex := strings.Index(publisher, "Mode Publish") + logoutIndex := strings.Index(publisher, "docker logout ghcr.io") + evidenceValidationIndex := strings.Index(privilegedJob, "Mode ValidatePublicationEvidence") + publishJobIndex + evidenceUploadIndex := strings.LastIndex(publisher, "actions/upload-artifact@") + if !(validateIndex >= 0 && validateIndex < candidateIndex && candidateIndex < buildIndex && buildIndex < uploadIndex && uploadIndex < publishJobIndex && publishJobIndex < artifactValidationIndex && artifactValidationIndex < downloadIndex && downloadIndex < payloadValidationIndex && payloadValidationIndex < loadIndex && loadIndex < preflightIndex && preflightIndex < loginIndex && loginIndex < publishIndex && publishIndex < logoutIndex && logoutIndex < evidenceValidationIndex && evidenceValidationIndex < evidenceUploadIndex) { + t.Fatalf("two-runner trust/credential ordering is unsafe: validate=%d candidate=%d build=%d upload=%d publishJob=%d artifact=%d download=%d payload=%d load=%d preflight=%d login=%d publish=%d logout=%d evidenceValidate=%d evidenceUpload=%d", validateIndex, candidateIndex, buildIndex, uploadIndex, publishJobIndex, artifactValidationIndex, downloadIndex, payloadValidationIndex, loadIndex, preflightIndex, loginIndex, publishIndex, logoutIndex, evidenceValidationIndex, evidenceUploadIndex) + } + + t.Run("repository controlled single writer", func(t *testing.T) { + testRepositorySingleWriter(t, repo) + }) + + t.Run("canonical release version and hostile Git refs", func(t *testing.T) { + testCanonicalReleaseValidation(t, repo) + }) + t.Run("workflow_run provenance and protected-main authority matrix", func(t *testing.T) { + testWorkflowRunTrustMatrix(t, repo) + }) + t.Run("same-run immutable artifact bridge matrix", func(t *testing.T) { + testArtifactBridgeMatrix(t, repo) + }) + t.Run("tag ruleset positive and negative matrix", func(t *testing.T) { + testTagRulesetMatrix(t, repo) + }) + t.Run("registry compare-before-write matrix", func(t *testing.T) { + testRegistryCASMatrix(t, repo) + }) + t.Run("movement before and after old guard", func(t *testing.T) { + testImmutableTagMovement(t, repo) + }) +} + +func testRepositorySingleWriter(t *testing.T, repo string) { + t.Helper() + allowedWorkflow := filepath.Clean(filepath.Join(repo, ".github", "workflows", "docker-publish.yml")) + allowedScript := filepath.Clean(filepath.Join(repo, "scripts", "production-gates", "build-and-scan-images.ps1")) + writePattern := regexp.MustCompile(`(?i)packages:\s*write|docker/login-action|docker\s+(?:push|buildx[^\n]*--push)|\bdocker\s+push\b|PERSONAL_ACCESS_TOKEN`) + + for _, root := range []string{filepath.Join(repo, ".github", "workflows"), filepath.Join(repo, "scripts")} { + err := filepath.Walk(root, func(path string, info os.FileInfo, err error) error { + if err != nil { + return err + } + if info.IsDir() { + return nil + } + ext := strings.ToLower(filepath.Ext(path)) + if ext != ".yml" && ext != ".yaml" && ext != ".ps1" && ext != ".sh" && ext != ".js" && ext != ".cjs" { + return nil + } + content, readErr := os.ReadFile(path) + if readErr != nil { + return readErr + } + if writePattern.Match(content) && filepath.Clean(path) != allowedWorkflow && filepath.Clean(path) != allowedScript { + t.Errorf("executable surface %s contains an undeclared registry write credential or command", path) + } + return nil + }) + if err != nil { + t.Fatal(err) + } + } + + workflow := readFile(t, allowedWorkflow) + if got := strings.Count(workflow, "packages: write"); got != 1 { + t.Fatalf("release workflow must have exactly one packages:write grant, got %d", got) + } + if got := strings.Count(workflow, "docker/login-action@"); got != 1 { + t.Fatalf("release workflow must have exactly one registry login seam, got %d", got) + } + if got := strings.Count(workflow, "-Mode Publish"); got != 1 { + t.Fatalf("release workflow must invoke the sole publish mode exactly once, got %d", got) + } + if got := strings.Count(workflow, "packages: write"); got != 1 { + t.Fatalf("packages:write must exist in exactly one fresh runner job, got %d", got) + } + if got := strings.Count(workflow, "actions/upload-artifact@"); got != 2 { + t.Fatalf("release workflow must upload one bridge artifact and one post-logout evidence artifact, got %d", got) + } + if got := strings.Count(workflow, "actions/download-artifact@"); got != 1 { + t.Fatalf("release workflow must download the bridge exactly once by artifact ID, got %d", got) + } + for _, forbidden := range []string{"PERSONAL_ACCESS_TOKEN", "PAT_TOKEN", "secrets."} { + if strings.Contains(workflow, forbidden) { + t.Fatalf("release workflow accepts an external package credential route %q", forbidden) + } + } + for _, cleared := range []string{`CR_PAT: ""`, `GHCR_TOKEN: ""`} { + if !strings.Contains(workflow, cleared) { + t.Fatalf("candidate execution environment does not clear package credential name %q", cleared) + } + } + script := readFile(t, allowedScript) + if got := strings.Count(script, "& docker push"); got != 1 { + t.Fatalf("publication script must have exactly one controlled docker push seam, got %d", got) + } + if got := strings.Count(script, `'--build-arg', "VERSION=$buildVersion"`); got != 2 { + t.Fatalf("both Dockerfile targets that traverse the shared builder must receive validated VERSION, got %d", got) + } + for _, required := range []string{ + "No registry write occurs until", "repository single-writer model", "external_package_admin_trust_boundary", + "TrustedOutputRoot", "git-archive-tracked-files-only", "integration_id", "engram:cleanup-placeholder", + } { + if !strings.Contains(script, required) { + t.Fatalf("publication script lacks single-writer trust-boundary contract %q", required) + } + } +} + +func inlineRunBodies(workflow string) []string { + lines := strings.Split(strings.ReplaceAll(workflow, "\r\n", "\n"), "\n") + var bodies []string + for index := 0; index < len(lines); index++ { + line := lines[index] + trimmed := strings.TrimSpace(line) + if !strings.HasPrefix(trimmed, "run:") { + continue + } + indent := len(line) - len(strings.TrimLeft(line, " ")) + body := strings.TrimSpace(strings.TrimPrefix(trimmed, "run:")) + for next := index + 1; next < len(lines); next++ { + nextLine := lines[next] + if strings.TrimSpace(nextLine) == "" { + body += "\n" + continue + } + nextIndent := len(nextLine) - len(strings.TrimLeft(nextLine, " ")) + if nextIndent <= indent { + break + } + body += "\n" + strings.TrimSpace(nextLine) + index = next + } + bodies = append(bodies, body) + } + return bodies +} + +func readFile(t *testing.T, path string) string { + t.Helper() + content, err := os.ReadFile(path) + if err != nil { + t.Fatal(err) + } + return string(content) +} + +func testCanonicalReleaseValidation(t *testing.T, repo string) { + t.Helper() + fixture := writeRulesetFixture(t, exactRulesetFixture()) + sha := strings.Repeat("a", 40) + for _, version := range []string{"v0.0.0", "v1.2.3", "v6.43.0-rc.1", "v1.2.3-alpha-1.2"} { + version := version + t.Run("accept "+version, func(t *testing.T) { + runImageGate(t, repo, true, + "-Mode", "ValidateRelease", "-ReleaseRef", "refs/tags/"+version, + "-ExpectedSha", sha, "-ActualSha", sha, "-RulesetFixturePath", fixture) + }) + } + for _, version := range []string{ + "v1$(printf${IFS}INJECTED)", "v01.2.3", "v1.02.3", "v1.2.03", + "v1.2.3+build", "v1.2.3-01", "v1.2", "v1.2.3 ", "v1.2.3;echo-INJECTED", + } { + version := version + t.Run("reject "+fmt.Sprintf("%x", version), func(t *testing.T) { + output := runImageGate(t, repo, false, + "-Mode", "ValidateRelease", "-ReleaseRef", "refs/tags/"+version, + "-ExpectedSha", sha, "-ActualSha", sha, "-RulesetFixturePath", fixture) + if strings.Contains(output, "value=v1INJECTED") { + t.Fatalf("hostile Git ref was evaluated as shell source: %s", output) + } + }) + } +} + +func testWorkflowRunTrustMatrix(t *testing.T, repo string) { + t.Helper() + sha := strings.Repeat("a", 40) + type mutation func(map[string]any) + cases := []struct { + name string + pass bool + mutate mutation + }{ + {name: "exact protected release provenance", pass: true}, + {name: "additional non-authority status check is allowed", pass: true, mutate: func(f map[string]any) { + checks := branchStatusChecks(f) + branchStatusRule(f)["parameters"].(map[string]any)["required_status_checks"] = append(checks, map[string]any{"context": "tests", "integration_id": 15368}) + }}, + {name: "event action is not completed", mutate: func(f map[string]any) { f["event"].(map[string]any)["action"] = "requested" }}, + {name: "run failed", mutate: func(f map[string]any) { + workflowRuns(f, func(run map[string]any) { run["conclusion"] = "failure" }) + }}, + {name: "manual dispatch spoof", mutate: func(f map[string]any) { + workflowRuns(f, func(run map[string]any) { run["event"] = "workflow_dispatch" }) + }}, + {name: "fork head repository", mutate: func(f map[string]any) { + workflowRuns(f, func(run map[string]any) { run["head_repository"] = map[string]any{"full_name": "attacker/engram"} }) + }}, + {name: "run id event api mismatch", mutate: func(f map[string]any) { f["api_run"].(map[string]any)["id"] = 999 }}, + {name: "workflow id event api mismatch", mutate: func(f map[string]any) { f["api_run"].(map[string]any)["workflow_id"] = 999 }}, + {name: "trusted workflow id spoof", mutate: func(f map[string]any) { + workflowRuns(f, func(run map[string]any) { run["workflow_id"] = 999 }) + }}, + {name: "workflow path spoof", mutate: func(f map[string]any) { + workflowRuns(f, func(run map[string]any) { run["path"] = ".github/workflows/docker-publish.yml" }) + }}, + {name: "inactive trusted workflow", mutate: func(f map[string]any) { f["trusted_workflow"].(map[string]any)["state"] = "disabled_manually" }}, + {name: "hostile shell-like tag", mutate: func(f map[string]any) { + workflowRuns(f, func(run map[string]any) { run["head_branch"] = "v1$(printf${IFS}INJECTED)" }) + }}, + {name: "noncanonical tag", mutate: func(f map[string]any) { + workflowRuns(f, func(run map[string]any) { run["head_branch"] = "v01.2.3" }) + }}, + {name: "event api sha mismatch", mutate: func(f map[string]any) { f["api_run"].(map[string]any)["head_sha"] = strings.Repeat("b", 40) }}, + {name: "tag peel mismatch", mutate: func(f map[string]any) { f["git"].(map[string]any)["tag_commit"] = strings.Repeat("b", 40) }}, + {name: "tag commit outside protected main", mutate: func(f map[string]any) { f["git"].(map[string]any)["main_ancestors"] = []string{} }}, + {name: "missing immutable tag ruleset", mutate: func(f map[string]any) { f["tag_rulesets"] = []any{} }}, + {name: "missing protected main ruleset", mutate: func(f map[string]any) { f["branch_rulesets"] = []any{} }}, + {name: "authority guard missing integration id", mutate: func(f map[string]any) { delete(branchStatusChecks(f)[0], "integration_id") }}, + {name: "authority guard string integration id", mutate: func(f map[string]any) { branchStatusChecks(f)[0]["integration_id"] = "15368" }}, + {name: "authority guard wrong integration id", mutate: func(f map[string]any) { branchStatusChecks(f)[0]["integration_id"] = 1 }}, + {name: "authority guard duplicate context", mutate: func(f map[string]any) { + checks := branchStatusChecks(f) + branchStatusRule(f)["parameters"].(map[string]any)["required_status_checks"] = append(checks, map[string]any{"context": "authority-guard", "integration_id": 15368}) + }}, + {name: "recovery bypass missing", mutate: func(f map[string]any) { branchRuleset(f)["bypass_actors"] = []any{} }}, + {name: "recovery bypass duplicated", mutate: func(f map[string]any) { + actor := map[string]any{"actor_type": "User", "actor_id": 7106373, "bypass_mode": "pull_request"} + branchRuleset(f)["bypass_actors"] = []any{actor, actor} + }}, + {name: "recovery bypass always", mutate: func(f map[string]any) { + branchRuleset(f)["bypass_actors"] = []any{map[string]any{"actor_type": "User", "actor_id": 7106373, "bypass_mode": "always"}} + }}, + } + + for _, test := range cases { + test := test + t.Run(test.name, func(t *testing.T) { + fixtureValue := workflowRunFixture(sha, "v6.43.0-rc.1") + if test.mutate != nil { + test.mutate(fixtureValue) + } + fixture := writeJSONFixture(t, fixtureValue) + outputPath := filepath.Join(t.TempDir(), "validated.json") + output := runImageGate(t, repo, test.pass, + "-Mode", "ValidateWorkflowRun", + "-WorkflowRunFixturePath", fixture, + "-Repository", "thebtf/engram", + "-OutputPath", outputPath) + if test.pass { + var result struct { + Commit string `json:"commit"` + ArtifactsConsumed int `json:"artifacts_consumed"` + } + data, err := os.ReadFile(outputPath) + if err != nil || json.Unmarshal(data, &result) != nil { + t.Fatalf("parse trusted workflow-run result: %v", err) + } + if result.Commit != sha || result.ArtifactsConsumed != 0 { + t.Fatalf("validator consumed untrusted artifacts or changed the commit: %+v", result) + } + } else if strings.Contains(output, "value=v1INJECTED") { + t.Fatalf("hostile workflow_run ref was evaluated as shell source: %s", output) + } + }) + } + + t.Run("trusted output rejects symlink or reparse escape", func(t *testing.T) { + trustRoot := strings.TrimSpace(os.Getenv("RUNNER_TEMP")) + if trustRoot == "" { + trustRoot = t.TempDir() + } + fixtureRoot, err := os.MkdirTemp(trustRoot, "engram-trusted-output-") + if err != nil { + t.Fatal(err) + } + t.Cleanup(func() { _ = os.RemoveAll(fixtureRoot) }) + realTarget := filepath.Join(fixtureRoot, "real") + if err := os.Mkdir(realTarget, 0o700); err != nil { + t.Fatal(err) + } + linkPath := filepath.Join(fixtureRoot, "escape") + createDirectoryLink(t, realTarget, linkPath) + fixture := writeJSONFixture(t, workflowRunFixture(sha, "v6.43.0-rc.1")) + output := runImageGate(t, repo, false, + "-Mode", "ValidateWorkflowRun", + "-WorkflowRunFixturePath", fixture, + "-Repository", "thebtf/engram", + "-TrustedOutputRoot", trustRoot, + "-OutputPath", filepath.Join(linkPath, "validated.json")) + if !strings.Contains(strings.ToLower(output), "symlink/reparse") { + t.Fatalf("trusted output rejection did not identify the link boundary: %s", output) + } + }) +} + +func workflowRunFixture(sha, version string) map[string]any { + newRun := func() map[string]any { + return map[string]any{ + "id": 123, "workflow_id": 456, "name": "Docker", "path": ".github/workflows/docker.yaml", + "event": "push", "status": "completed", "conclusion": "success", + "head_branch": version, "head_sha": sha, + "head_repository": map[string]any{"full_name": "thebtf/engram"}, + "repository": map[string]any{"full_name": "thebtf/engram"}, + "artifacts_url": "https://attacker.invalid/untrusted-artifacts", + } + } + return map[string]any{ + "event": map[string]any{ + "action": "completed", + "repository": map[string]any{"full_name": "thebtf/engram"}, + "workflow_run": newRun(), + }, + "api_run": newRun(), + "trusted_workflow": map[string]any{ + "id": 456, "name": "Docker", "path": ".github/workflows/docker.yaml", "state": "active", + }, + "repository": map[string]any{"full_name": "thebtf/engram", "default_branch": "main"}, + "tag_rulesets": exactRulesetFixture(), + "branch_rulesets": exactBranchRulesetFixture(), + "git": map[string]any{"tag_commit": sha, "main_ancestors": []string{sha}}, + } +} + +func workflowRuns(fixture map[string]any, mutate func(map[string]any)) { + mutate(fixture["event"].(map[string]any)["workflow_run"].(map[string]any)) + mutate(fixture["api_run"].(map[string]any)) +} + +func branchRuleset(fixture map[string]any) map[string]any { + return fixture["branch_rulesets"].([]map[string]any)[0] +} + +func branchStatusRule(fixture map[string]any) map[string]any { + return branchRuleset(fixture)["rules"].([]map[string]any)[2] +} + +func branchStatusChecks(fixture map[string]any) []map[string]any { + return branchStatusRule(fixture)["parameters"].(map[string]any)["required_status_checks"].([]map[string]any) +} + +func createDirectoryLink(t *testing.T, target, link string) { + t.Helper() + if err := os.Symlink(target, link); err == nil { + return + } else if runtime.GOOS != "windows" { + t.Fatalf("create hostile symlink fixture: %v", err) + } + command := exec.Command("pwsh", "-NoProfile", "-Command", `New-Item -ItemType Junction -Path $args[0] -Target $args[1] | Out-Null`, link, target) + if output, err := command.CombinedOutput(); err != nil { + t.Fatalf("create hostile junction fixture: %v\n%s", err, output) + } +} + +func testArtifactBridgeMatrix(t *testing.T, repo string) { + t.Helper() + const ( + artifactID = 777 + workflowRun = 12345 + artifactName = "engram-release-payload-12345-1" + ) + digest := "sha256:" + strings.Repeat("d", 64) + type metadataMutation func(map[string]any) + metadataCases := []struct { + name string + pass bool + mutate metadataMutation + }{ + {name: "one exact same-run immutable artifact", pass: true}, + {name: "missing artifact", mutate: func(f map[string]any) { f["total_count"] = 0; f["artifacts"] = []any{} }}, + {name: "extra artifact", mutate: func(f map[string]any) { + f["total_count"] = 2 + f["artifacts"] = append(f["artifacts"].([]map[string]any), map[string]any{"id": 778, "name": "extra", "digest": digest, "expired": false, "workflow_run": map[string]any{"id": workflowRun}}) + }}, + {name: "duplicate expected name", mutate: func(f map[string]any) { + f["total_count"] = 2 + f["artifacts"] = append(f["artifacts"].([]map[string]any), map[string]any{"id": 778, "name": artifactName, "digest": digest, "expired": false, "workflow_run": map[string]any{"id": workflowRun}}) + }}, + {name: "artifact id mismatch", mutate: func(f map[string]any) { f["artifacts"].([]map[string]any)[0]["id"] = 778 }}, + {name: "artifact digest mismatch", mutate: func(f map[string]any) { + f["artifacts"].([]map[string]any)[0]["digest"] = "sha256:" + strings.Repeat("e", 64) + }}, + {name: "artifact expired", mutate: func(f map[string]any) { f["artifacts"].([]map[string]any)[0]["expired"] = true }}, + {name: "artifact from another workflow run", mutate: func(f map[string]any) { + f["artifacts"].([]map[string]any)[0]["workflow_run"] = map[string]any{"id": 99999} + }}, + } + for _, test := range metadataCases { + test := test + t.Run("metadata "+test.name, func(t *testing.T) { + fixtureValue := map[string]any{ + "total_count": 1, + "artifacts": []map[string]any{{ + "id": artifactID, "name": artifactName, "digest": digest, "expired": false, + "workflow_run": map[string]any{"id": workflowRun}, + }}, + } + if test.mutate != nil { + test.mutate(fixtureValue) + } + fixture := writeJSONFixture(t, fixtureValue) + runImageGate(t, repo, test.pass, + "-Mode", "ValidateArtifactMetadata", + "-ArtifactListFixturePath", fixture, + "-ExpectedArtifactID", strconv.Itoa(artifactID), + "-ExpectedArtifactName", artifactName, + "-ExpectedArtifactDigest", digest, + "-CurrentRunID", strconv.Itoa(workflowRun), + "-Repository", "thebtf/engram") + }) + } + + sha := strings.Repeat("c", 40) + payloadCases := []struct { + name string + pass bool + mutate func(string) + }{ + {name: "exact regular-file envelope", pass: true}, + {name: "extra file", mutate: func(root string) { _ = os.WriteFile(filepath.Join(root, "extra.txt"), []byte("extra"), 0o600) }}, + {name: "archive checksum mismatch", mutate: func(root string) { _ = os.WriteFile(filepath.Join(root, "server.tar"), []byte("changed"), 0o600) }}, + {name: "path traversal in bundle", mutate: func(root string) { + bundle := readJSONMap(t, filepath.Join(root, "release-bundle.json")) + bundle["images"].([]any)[0].(map[string]any)["archive"] = "../server.tar" + writeJSONAt(t, filepath.Join(root, "release-bundle.json"), bundle) + }}, + {name: "path traversal inside image archive", mutate: func(root string) { + data := testTarArchiveEntry(t, "../escape", tar.TypeReg) + path := filepath.Join(root, "server.tar") + if err := os.WriteFile(path, data, 0o600); err != nil { + t.Fatal(err) + } + updatePayloadArchiveHash(t, root, 0, data) + }}, + {name: "link inside outer image archive", mutate: func(root string) { + data := testTarArchiveEntry(t, "linked", tar.TypeSymlink) + path := filepath.Join(root, "server.tar") + if err := os.WriteFile(path, data, 0o600); err != nil { + t.Fatal(err) + } + updatePayloadArchiveHash(t, root, 0, data) + }}, + {name: "manifest commit mismatch", mutate: func(root string) { + manifest := readJSONMap(t, filepath.Join(root, "final-image-set.json")) + manifest["source_parent_commit"] = strings.Repeat("b", 40) + writeJSONAt(t, filepath.Join(root, "final-image-set.json"), manifest) + }}, + {name: "symlink entry", mutate: func(root string) { + target := filepath.Join(root, "operator-console.tar") + link := filepath.Join(root, "server.tar") + if err := os.Remove(link); err != nil { + t.Fatal(err) + } + if err := os.Symlink(target, link); err != nil && runtime.GOOS == "windows" { + command := exec.Command("pwsh", "-NoProfile", "-Command", `New-Item -ItemType SymbolicLink -Path $args[0] -Target $args[1] | Out-Null`, link, target) + if output, commandErr := command.CombinedOutput(); commandErr != nil { + t.Fatalf("create payload link fixture: %v / %v\n%s", err, commandErr, output) + } + } else if err != nil { + t.Fatal(err) + } + }}, + } + for _, test := range payloadCases { + test := test + t.Run("payload "+test.name, func(t *testing.T) { + root := writeReleasePayloadFixture(t, sha, "v6.43.0-rc.1") + if test.mutate != nil { + test.mutate(root) + } + runImageGate(t, repo, test.pass, + "-Mode", "ValidatePayload", + "-PayloadRoot", root, + "-ExpectedSha", sha, + "-ReleaseVersion", "v6.43.0-rc.1") + }) + } + t.Run("payload immutable commit identity", func(t *testing.T) { + version := "sha-" + sha + root := writeReleasePayloadFixture(t, sha, version) + runImageGate(t, repo, true, + "-Mode", "ValidatePayload", + "-PayloadRoot", root, + "-ExpectedSha", sha, + "-ReleaseVersion", version) + }) +} + +func writeReleasePayloadFixture(t *testing.T, commit, version string) string { + t.Helper() + root := t.TempDir() + ids := map[string]string{ + "server": "sha256:" + strings.Repeat("1", 64), + "operator_console": "sha256:" + strings.Repeat("2", 64), + "postgres": "sha256:" + strings.Repeat("3", 64), + } + manifestPath := filepath.Join(root, "final-image-set.json") + writeJSONAt(t, manifestPath, map[string]any{ + "schema_version": 1, "status": "PASS", "source_parent_commit": commit, + "build_version": version, "image_ids": ids, + }) + images := make([]map[string]any, 0, 3) + for _, image := range []struct { + name string + archive string + id string + }{ + {"server", "server.tar", ids["server"]}, + {"operator_console", "operator-console.tar", ids["operator_console"]}, + {"postgres", "postgres.tar", ids["postgres"]}, + } { + data := testTarArchive(t, image.name) + path := filepath.Join(root, image.archive) + if err := os.WriteFile(path, data, 0o600); err != nil { + t.Fatal(err) + } + images = append(images, map[string]any{ + "name": image.name, "archive": image.archive, "image_id": image.id, + "sha256": sha256Hex(data), "size_bytes": len(data), + }) + } + manifestData, err := os.ReadFile(manifestPath) + if err != nil { + t.Fatal(err) + } + writeJSONAt(t, filepath.Join(root, "release-bundle.json"), map[string]any{ + "schema_version": 1, "source_commit": commit, "release_version": version, + "manifest": map[string]any{"file": "final-image-set.json", "sha256": sha256Hex(manifestData), "size_bytes": len(manifestData)}, + "images": images, + }) + return root +} + +func sha256Hex(data []byte) string { + sum := sha256.Sum256(data) + return fmt.Sprintf("%x", sum) +} + +func testTarArchive(t *testing.T, name string) []byte { + t.Helper() + return testTarArchiveEntry(t, "manifest.json", tar.TypeReg) +} + +func testTarArchiveEntry(t *testing.T, entryName string, entryType byte) []byte { + t.Helper() + var buffer bytes.Buffer + w := tar.NewWriter(&buffer) + content := []byte("exact-image-archive") + header := &tar.Header{Name: entryName, Mode: 0o600, Typeflag: entryType} + if entryType == tar.TypeReg { + header.Size = int64(len(content)) + } else { + header.Linkname = "manifest.json" + } + if err := w.WriteHeader(header); err != nil { + t.Fatal(err) + } + if entryType == tar.TypeReg { + if _, err := w.Write(content); err != nil { + t.Fatal(err) + } + } + if err := w.Close(); err != nil { + t.Fatal(err) + } + return buffer.Bytes() +} + +func updatePayloadArchiveHash(t *testing.T, root string, imageIndex int, data []byte) { + t.Helper() + bundlePath := filepath.Join(root, "release-bundle.json") + bundle := readJSONMap(t, bundlePath) + image := bundle["images"].([]any)[imageIndex].(map[string]any) + image["sha256"] = sha256Hex(data) + image["size_bytes"] = len(data) + writeJSONAt(t, bundlePath, bundle) +} + +func readJSONMap(t *testing.T, path string) map[string]any { + t.Helper() + data, err := os.ReadFile(path) + if err != nil { + t.Fatal(err) + } + var value map[string]any + if err := json.Unmarshal(data, &value); err != nil { + t.Fatal(err) + } + return value +} + +func writeJSONAt(t *testing.T, path string, value any) { + t.Helper() + data, err := json.MarshalIndent(value, "", " ") + if err != nil { + t.Fatal(err) + } + if err := os.WriteFile(path, append(data, '\n'), 0o600); err != nil { + t.Fatal(err) + } +} + +func testTagRulesetMatrix(t *testing.T, repo string) { + t.Helper() + sha := strings.Repeat("b", 40) + positive := exactRulesetFixture() + cases := []struct { + name string + fixture any + pass bool + }{ + {name: "exact active immutable namespace", fixture: positive, pass: true}, + {name: "missing", fixture: []any{}}, + {name: "duplicate", fixture: []any{positive[0], positive[0]}}, + {name: "disabled", fixture: mutateRuleset(positive, "enforcement", "disabled")}, + {name: "wrong target", fixture: mutateRuleset(positive, "target", "branch")}, + {name: "wrong include", fixture: mutateRuleset(positive, "include", []string{"refs/tags/release-*"})}, + {name: "exclusion", fixture: mutateRuleset(positive, "exclude", []string{"refs/tags/v6.43.0"})}, + {name: "bypass", fixture: mutateRuleset(positive, "bypass", []map[string]any{{"actor_id": 7106373, "actor_type": "RepositoryRole", "bypass_mode": "always"}})}, + {name: "missing deletion", fixture: mutateRuleset(positive, "rules", []map[string]any{{"type": "non_fast_forward"}})}, + {name: "missing non fast forward", fixture: mutateRuleset(positive, "rules", []map[string]any{{"type": "deletion"}})}, + } + for _, test := range cases { + test := test + t.Run(test.name, func(t *testing.T) { + fixture := writeRulesetFixture(t, test.fixture) + runImageGate(t, repo, test.pass, + "-Mode", "ValidateRelease", "-ReleaseRef", "refs/tags/v6.43.0-rc.1", + "-ExpectedSha", sha, "-ActualSha", sha, "-RulesetFixturePath", fixture) + }) + } +} + +func testRegistryCASMatrix(t *testing.T, repo string) { + t.Helper() + commit := strings.Repeat("c", 40) + ids := map[string]string{ + "server": "sha256:" + strings.Repeat("1", 64), + "operator_console": "sha256:" + strings.Repeat("2", 64), + "postgres": "sha256:" + strings.Repeat("3", 64), + } + manifest := writeJSONFixture(t, map[string]any{"source_parent_commit": commit, "image_ids": ids}) + version := "v6.43.0-rc.1" + expectedRefs := expectedPublicationRefs(version, commit) + + t.Run("all destinations absent", func(t *testing.T) { + registry := writeJSONFixture(t, map[string]any{"refs": map[string]any{}}) + outputPath := filepath.Join(t.TempDir(), "plan.json") + runImageGate(t, repo, true, + "-Mode", "PlanPublication", "-ManifestPath", manifest, "-ReleaseVersion", version, + "-RegistryFixturePath", registry, "-OutputPath", outputPath) + assertPublicationPlan(t, outputPath, expectedRefs, 6) + }) + + t.Run("idempotent exact protected tag", func(t *testing.T) { + refs := make(map[string]any) + for ref, id := range expectedRefs { + refs[ref] = map[string]any{"config_digest": id, "manifest_digest": "sha256:" + strings.Repeat("d", 64)} + } + registry := writeJSONFixture(t, map[string]any{"refs": refs}) + outputPath := filepath.Join(t.TempDir(), "plan.json") + runImageGate(t, repo, true, + "-Mode", "PlanPublication", "-ManifestPath", manifest, "-ReleaseVersion", version, + "-RegistryFixturePath", registry, "-OutputPath", outputPath) + assertPublicationPlan(t, outputPath, expectedRefs, 0) + }) + + for _, name := range []string{"same release different image", "existing registry mismatch"} { + name := name + t.Run(name, func(t *testing.T) { + refs := make(map[string]any) + for ref, id := range expectedRefs { + refs[ref] = map[string]any{"config_digest": id, "manifest_digest": "sha256:" + strings.Repeat("e", 64)} + } + for ref := range refs { + refs[ref] = map[string]any{"config_digest": "sha256:" + strings.Repeat("f", 64), "manifest_digest": "sha256:" + strings.Repeat("e", 64)} + break + } + registry := writeJSONFixture(t, map[string]any{"refs": refs}) + runImageGate(t, repo, false, + "-Mode", "PlanPublication", "-ManifestPath", manifest, "-ReleaseVersion", version, + "-RegistryFixturePath", registry, "-OutputPath", filepath.Join(t.TempDir(), "plan.json")) + }) + } +} + +func testImmutableTagMovement(t *testing.T, repo string) { + t.Helper() + fixture := writeRulesetFixture(t, exactRulesetFixture()) + initial := strings.Repeat("1", 40) + advanced := strings.Repeat("2", 40) + runImageGate(t, repo, true, + "-Mode", "ValidateRelease", "-ReleaseRef", "refs/tags/v1.0.0", + "-ExpectedSha", initial, "-ActualSha", initial, "-RulesetFixturePath", fixture) + runImageGate(t, repo, false, + "-Mode", "ValidateRelease", "-ReleaseRef", "refs/tags/v1.0.0", + "-ExpectedSha", initial, "-ActualSha", advanced, "-RulesetFixturePath", fixture) + unprotected := writeRulesetFixture(t, []any{}) + runImageGate(t, repo, false, + "-Mode", "ValidateRelease", "-ReleaseRef", "refs/tags/v1.0.0", + "-ExpectedSha", initial, "-ActualSha", initial, "-RulesetFixturePath", unprotected) +} + +func runImageGate(t *testing.T, repo string, expectSuccess bool, args ...string) string { + t.Helper() + script := filepath.Join(repo, "scripts", "production-gates", "build-and-scan-images.ps1") + commandArgs := append([]string{"-NoProfile", "-File", script}, args...) + output, err := exec.Command("pwsh", commandArgs...).CombinedOutput() + if expectSuccess && err != nil { + t.Fatalf("image gate unexpectedly failed: %v\n%s", err, output) + } + if !expectSuccess && err == nil { + t.Fatalf("image gate unexpectedly accepted adversarial fixture:\n%s", output) + } + return string(output) +} + +func exactRulesetFixture() []map[string]any { + return []map[string]any{{ + "id": 9001, "name": "immutable v releases", "target": "tag", "enforcement": "active", + "conditions": map[string]any{"ref_name": map[string]any{"include": []string{"refs/tags/v*"}, "exclude": []string{}}}, + "rules": []map[string]any{{"type": "deletion"}, {"type": "non_fast_forward"}}, + "bypass_actors": []any{}, + }} +} + +func exactBranchRulesetFixture() []map[string]any { + return []map[string]any{{ + "id": 9100, "name": "protected main authority", "target": "branch", "enforcement": "active", + "conditions": map[string]any{"ref_name": map[string]any{"include": []string{"refs/heads/main"}, "exclude": []string{}}}, + "rules": []map[string]any{ + {"type": "deletion"}, + {"type": "non_fast_forward"}, + { + "type": "required_status_checks", + "parameters": map[string]any{ + "strict_required_status_checks_policy": true, + "required_status_checks": []map[string]any{{"context": "authority-guard", "integration_id": 15368}}, + }, + }, + }, + "bypass_actors": []map[string]any{{"actor_type": "User", "actor_id": 7106373, "bypass_mode": "pull_request"}}, + }} +} + +func mutateRuleset(source []map[string]any, field string, value any) []map[string]any { + raw, _ := json.Marshal(source) + var clone []map[string]any + _ = json.Unmarshal(raw, &clone) + rule := clone[0] + switch field { + case "include", "exclude": + conditions := rule["conditions"].(map[string]any) + refName := conditions["ref_name"].(map[string]any) + refName[field] = value + case "bypass": + rule["bypass_actors"] = value + default: + rule[field] = value + } + return clone +} + +func writeRulesetFixture(t *testing.T, value any) string { + t.Helper() + return writeJSONFixture(t, value) +} + +func writeJSONFixture(t *testing.T, value any) string { + t.Helper() + data, err := json.MarshalIndent(value, "", " ") + if err != nil { + t.Fatal(err) + } + path := filepath.Join(t.TempDir(), "fixture.json") + if err := os.WriteFile(path, append(data, '\n'), 0o600); err != nil { + t.Fatal(err) + } + return path +} + +func expectedPublicationRefs(version, commit string) map[string]string { + ids := []struct { + repository string + id string + }{ + {"ghcr.io/thebtf/engram", "sha256:" + strings.Repeat("1", 64)}, + {"ghcr.io/thebtf/engram-operator-console", "sha256:" + strings.Repeat("2", 64)}, + {"ghcr.io/thebtf/engram-postgres", "sha256:" + strings.Repeat("3", 64)}, + } + refs := make(map[string]string, 6) + for _, image := range ids { + refs[image.repository+":"+version] = image.id + refs[image.repository+":sha-"+commit] = image.id + } + return refs +} + +func assertPublicationPlan(t *testing.T, path string, expected map[string]string, expectedPushes int) { + t.Helper() + data, err := os.ReadFile(path) + if err != nil { + t.Fatal(err) + } + var plan struct { + Destinations []struct { + Reference string `json:"reference"` + ConfigDigest string `json:"config_digest"` + Action string `json:"action"` + } `json:"destinations"` + } + if err := json.Unmarshal(data, &plan); err != nil { + t.Fatal(err) + } + if len(plan.Destinations) != len(expected) { + t.Fatalf("publication plan has %d destinations, want %d", len(plan.Destinations), len(expected)) + } + pushes := 0 + seen := make(map[string]bool, len(plan.Destinations)) + for _, destination := range plan.Destinations { + want, ok := expected[destination.Reference] + if !ok { + t.Fatalf("publication plan leaked non-canonical alias %q", destination.Reference) + } + if destination.ConfigDigest != want { + t.Fatalf("publication plan changed exact image identity for %s", destination.Reference) + } + if destination.Action == "push" { + pushes++ + } + seen[destination.Reference] = true + } + if len(seen) != len(expected) || pushes != expectedPushes { + t.Fatalf("publication plan coverage mismatch: refs=%d pushes=%d, want refs=%d pushes=%d", len(seen), pushes, len(expected), expectedPushes) + } +} + +type gitRefFreshnessFixture struct { + t *testing.T + work string + consumer string + initialSHA string + advancedSHA string +} + +func newGitRefFreshnessFixture(t *testing.T) *gitRefFreshnessFixture { + t.Helper() + root := t.TempDir() + remote := filepath.Join(root, "remote.git") + work := filepath.Join(root, "source") + consumer := filepath.Join(root, "consumer") + runGit(t, "", "init", "--bare", remote) + runGit(t, "", "init", "-b", "main", work) + runGit(t, work, "config", "user.name", "Engram Image Gate") + runGit(t, work, "config", "user.email", "image-gate@example.invalid") + writeGitFixtureFile(t, work, "initial") + runGit(t, work, "add", "fixture.txt") + runGit(t, work, "commit", "-m", "initial") + initialSHA := runGit(t, work, "rev-parse", "HEAD") + runGit(t, work, "remote", "add", "origin", remote) + runGit(t, work, "tag", "-a", "v1.0.0", "-m", "release", initialSHA) + runGit(t, work, "tag", "v1.0.1", initialSHA) + runGit(t, work, "push", "origin", "main", "refs/tags/v1.0.0", "refs/tags/v1.0.1") + writeGitFixtureFile(t, work, "advanced") + runGit(t, work, "add", "fixture.txt") + runGit(t, work, "commit", "-m", "advanced") + advancedSHA := runGit(t, work, "rev-parse", "HEAD") + runGit(t, work, "push", "origin", "main") + runGit(t, "", "init", consumer) + runGit(t, consumer, "remote", "add", "origin", remote) + return &gitRefFreshnessFixture{ + t: t, work: work, consumer: consumer, + initialSHA: initialSHA, advancedSHA: advancedSHA, + } +} + +func (fixture *gitRefFreshnessFixture) requireMatch(sourceRef, expectedSHA string) error { + guardRef := "refs/engram-publish-guard/test" + runGit(fixture.t, fixture.consumer, "update-ref", "-d", guardRef) + runGit(fixture.t, fixture.consumer, "fetch", "--no-tags", "--force", "origin", "+"+sourceRef+":"+guardRef) + actualSHA := runGit(fixture.t, fixture.consumer, "rev-parse", "--verify", guardRef+"^{commit}") + if actualSHA != expectedSHA { + return fmt.Errorf("live ref %s resolved to %s, expected %s", sourceRef, actualSHA, expectedSHA) + } + return nil +} + +func writeGitFixtureFile(t *testing.T, work, content string) { + t.Helper() + if err := os.WriteFile(filepath.Join(work, "fixture.txt"), []byte(content+"\n"), 0o600); err != nil { + t.Fatal(err) + } +} + +func runGit(t *testing.T, work string, args ...string) string { + t.Helper() + if work != "" { + args = append([]string{"-C", work}, args...) + } + out, err := exec.Command("git", args...).CombinedOutput() + if err != nil { + t.Fatalf("git %s failed: %v\n%s", strings.Join(args, " "), err, out) + } + return strings.TrimSpace(string(out)) +} + +func runOperatorFixture(t *testing.T, name, network string, extra ...string) { + t.Helper() + args := []string{ + "run", "-d", "--name", name, + "--network", network, + "--user", "65532:65532", "--read-only", "--cap-drop", "ALL", + "--security-opt", "no-new-privileges:true", + "--tmpfs", "/tmp:rw,noexec,nosuid,nodev,uid=65532,gid=65532,mode=0700,size=64m", + "--health-start-period", "1ms", "--health-interval", "1s", "--health-timeout", "4s", "--health-retries", "2", + } + args = append(args, extra...) + args = append(args, imageFromEnv("ENGRAM_OPERATOR_IMAGE", defaultOperatorImage)) + runDocker(t, nil, args...) +} + +func startFakeNodeBackend(t *testing.T, name, network, response string) { + t.Helper() + script := "const http=require('http');http.createServer((req,res)=>{" + response + "}).listen(37777,'0.0.0.0')" + runDocker(t, nil, + "run", "-d", "--name", name, + "--network", network, "--network-alias", name, + "--user", "65532:65532", "--read-only", "--cap-drop", "ALL", + "--security-opt", "no-new-privileges:true", + "--entrypoint", "/nodejs/bin/node", + imageFromEnv("ENGRAM_OPERATOR_IMAGE", defaultOperatorImage), + "-e", script, + ) +} + +func startServerStack(t *testing.T) stackFixture { + t.Helper() + prefix := uniqueResource("engram-prc-image-test") + fixture := stackFixture{ + prefix: prefix, + network: prefix + "-net", + postgresVolume: prefix + "-pgdata", + serverVolume: prefix + "-server-home", + postgres: prefix + "-postgres", + server: prefix + "-server", + } + t.Cleanup(func() { + removeContainer(fixture.server) + removeContainer(fixture.postgres) + removeVolume(fixture.serverVolume) + removeVolume(fixture.postgresVolume) + removeNetwork(fixture.network) + }) + runDocker(t, nil, "network", "create", fixture.network) + runDocker(t, nil, "volume", "create", fixture.postgresVolume) + runDocker(t, nil, "volume", "create", fixture.serverVolume) + startPostgresContainer(t, fixture.postgres, fixture.network, fixture.postgresVolume) + waitHealthy(t, fixture.postgres, 90*time.Second) + + serverImage := imageFromEnv("ENGRAM_SERVER_IMAGE", defaultServerImage) + runDocker(t, nil, + "run", "-d", "--name", fixture.server, + "--network", fixture.network, "--network-alias", "server", + "-p", "127.0.0.1::37777", + "--user", "65532:65532", "--read-only", "--cap-drop", "ALL", + "--security-opt", "no-new-privileges:true", + "--tmpfs", "/tmp:rw,noexec,nosuid,nodev,uid=65532,gid=65532,mode=0700,size=64m", + "-v", fixture.serverVolume+":/var/lib/engram", + "-e", "HOME=/var/lib/engram", + "-e", "DATABASE_DSN=postgres://engram:engram@postgres:5432/engram?sslmode=disable", + "-e", "ENGRAM_AUTH_DISABLED=true", + serverImage, + ) + waitHealthy(t, fixture.server, 120*time.Second) + return fixture +} + +func repositoryRoot(t *testing.T) string { + t.Helper() + dir, err := os.Getwd() + if err != nil { + t.Fatal(err) + } + for { + if _, err := os.Stat(filepath.Join(dir, "go.mod")); err == nil { + return dir + } + parent := filepath.Dir(dir) + if parent == dir { + t.Fatal("repository root not found") + } + dir = parent + } +} + +func imageFromEnv(name, fallback string) string { + if value := strings.TrimSpace(os.Getenv(name)); value != "" { + return value + } + return fallback +} + +func inspectImage(t *testing.T, image string) imageInspect { + t.Helper() + out := runDocker(t, nil, "image", "inspect", image) + var records []imageInspect + if err := json.Unmarshal(out, &records); err != nil || len(records) != 1 { + t.Fatalf("parse docker image inspect for %s: %v", image, err) + } + return records[0] +} + +func requireEnv(t *testing.T, env []string, key, expected string) { + t.Helper() + prefix := key + "=" + for _, entry := range env { + if strings.HasPrefix(entry, prefix) { + if strings.TrimPrefix(entry, prefix) != expected { + t.Fatalf("%s mismatch: %q", key, entry) + } + return + } + } + t.Fatalf("%s is absent from image environment", key) +} + +func requireHealthCommand(t *testing.T, health *dockerHealthConfig, parts ...string) { + t.Helper() + if health == nil { + t.Fatal("image has no Docker HEALTHCHECK") + } + joined := strings.Join(health.Test, " ") + for _, part := range parts { + if !strings.Contains(joined, part) { + t.Fatalf("healthcheck %q does not contain %q", joined, part) + } + } +} + +func requireProvenanceLabels(t *testing.T, labels map[string]string) { + t.Helper() + if labels["org.opencontainers.image.source"] != "https://github.com/thebtf/engram" { + t.Fatalf("image source label mismatch: %q", labels["org.opencontainers.image.source"]) + } + if matched, _ := regexp.MatchString(`^[0-9a-f]{40}$`, labels["org.opencontainers.image.revision"]); !matched { + t.Fatalf("image revision label is not a full commit SHA: %q", labels["org.opencontainers.image.revision"]) + } + if strings.TrimSpace(labels["org.opencontainers.image.version"]) == "" { + t.Fatal("image version label is missing") + } +} + +func requireFileContains(t *testing.T, path string, fragments ...string) { + t.Helper() + content, err := os.ReadFile(path) + if err != nil { + t.Fatal(err) + } + for _, fragment := range fragments { + if !bytes.Contains(content, []byte(fragment)) { + t.Fatalf("%s does not contain required contract %q", path, fragment) + } + } +} + +func requireFileNotContains(t *testing.T, path string, fragments ...string) { + t.Helper() + content, err := os.ReadFile(path) + if err != nil { + t.Fatal(err) + } + for _, fragment := range fragments { + if bytes.Contains(content, []byte(fragment)) { + t.Fatalf("%s retains forbidden contract %q", path, fragment) + } + } +} + +func runDocker(t *testing.T, input []byte, args ...string) []byte { + t.Helper() + cmd := exec.Command("docker", args...) + if input != nil { + cmd.Stdin = bytes.NewReader(input) + } + out, err := cmd.CombinedOutput() + if err != nil { + t.Fatalf("docker %s failed: %v\n%s", strings.Join(args, " "), err, out) + } + return bytes.TrimSpace(out) +} + +func dockerBestEffort(args ...string) { + cmd := exec.Command("docker", args...) + _, _ = cmd.CombinedOutput() +} + +func waitHealthy(t *testing.T, container string, timeout time.Duration) { + t.Helper() + deadline := time.Now().Add(timeout) + for time.Now().Before(deadline) { + out, _ := exec.Command("docker", "inspect", "--format", "{{if .State.Health}}{{.State.Health.Status}}{{else}}none{{end}}", container).CombinedOutput() + status := strings.TrimSpace(string(out)) + if status == "healthy" { + return + } + if status == "unhealthy" { + logs, _ := exec.Command("docker", "logs", "--tail", "40", container).CombinedOutput() + t.Fatalf("container %s became unhealthy:\n%s", container, logs) + } + time.Sleep(time.Second) + } + logs, _ := exec.Command("docker", "logs", "--tail", "40", container).CombinedOutput() + t.Fatalf("container %s did not become healthy:\n%s", container, logs) +} + +func waitNotHealthy(t *testing.T, container string, timeout time.Duration) { + t.Helper() + deadline := time.Now().Add(timeout) + for time.Now().Before(deadline) { + out, _ := exec.Command("docker", "inspect", "--format", "{{.State.Status}} {{if .State.Health}}{{.State.Health.Status}}{{else}}none{{end}}", container).CombinedOutput() + status := strings.TrimSpace(string(out)) + if strings.Contains(status, "unhealthy") || strings.HasPrefix(status, "exited ") || strings.HasPrefix(status, "dead ") { + return + } + if strings.Contains(status, "healthy") { + t.Fatalf("negative fixture %s became healthy", container) + } + time.Sleep(time.Second) + } + t.Fatalf("negative fixture %s did not reach a terminal non-healthy state", container) +} + +func requireHardenedContainer(t *testing.T, name, user string) { + t.Helper() + out := runDocker(t, nil, "inspect", name) + var records []containerInspect + if err := json.Unmarshal(out, &records); err != nil || len(records) != 1 { + t.Fatalf("parse container inspect: %v", err) + } + record := records[0] + if record.Config.User != user && record.Config.User != strings.Split(user, ":")[0] { + t.Fatalf("container user mismatch: %q", record.Config.User) + } + if !record.HostConfig.ReadonlyRootfs { + t.Fatal("container root filesystem is writable") + } + if !containsFold(record.HostConfig.CapDrop, "ALL") { + t.Fatalf("container does not drop ALL capabilities: %v", record.HostConfig.CapDrop) + } + if !containsSubstring(record.HostConfig.SecurityOpt, "no-new-privileges") { + t.Fatalf("container lacks no-new-privileges: %v", record.HostConfig.SecurityOpt) + } +} + +func requireVolumeMetadata(t *testing.T, volume, inspectionImage, expected string) { + t.Helper() + out := runDocker(t, nil, + "run", "--rm", "--user", "0:0", "--entrypoint", "/bin/sh", + "-v", volume+":/data:ro", inspectionImage, + "-c", "stat -c '%u:%g:%a' /data", + ) + if got := strings.TrimSpace(string(out)); got != expected { + t.Fatalf("volume %s metadata=%q want=%q", volume, got, expected) + } +} + +func requireVolumePathMetadata(t *testing.T, volume, inspectionImage, path, expected string) { + t.Helper() + out := runDocker(t, nil, + "run", "--rm", "--user", "0:0", "--entrypoint", "/bin/sh", + "-v", volume+":/data:ro", inspectionImage, + "-c", "stat -c '%u:%g:%a' "+path, + ) + if got := strings.TrimSpace(string(out)); got != expected { + t.Fatalf("volume path %s metadata=%q want=%q", path, got, expected) + } +} + +func readVolumeFile(t *testing.T, volume, inspectionImage, path string) []byte { + t.Helper() + return runDocker(t, nil, + "run", "--rm", "--user", "0:0", "--entrypoint", "/bin/sh", + "-v", volume+":/data:ro", inspectionImage, + "-c", "cat "+path, + ) +} + +func mappedURL(t *testing.T, container, port string) string { + t.Helper() + out := runDocker(t, nil, "port", container, port) + line := strings.Split(string(out), "\n")[0] + idx := strings.LastIndex(line, ":") + if idx < 0 { + t.Fatalf("unexpected docker port output %q", line) + } + value, err := strconv.Atoi(strings.TrimSpace(line[idx+1:])) + if err != nil { + t.Fatalf("unexpected mapped port %q: %v", line, err) + } + return fmt.Sprintf("http://127.0.0.1:%d", value) +} + +func requireHTTP(t *testing.T, url string, status int) []byte { + t.Helper() + client := &http.Client{Timeout: 10 * time.Second} + response, err := client.Get(url) + if err != nil { + t.Fatalf("GET %s: %v", url, err) + } + defer response.Body.Close() + body, err := io.ReadAll(io.LimitReader(response.Body, 1<<20)) + if err != nil { + t.Fatal(err) + } + if response.StatusCode != status { + t.Fatalf("GET %s status=%d want=%d body=%q", url, response.StatusCode, status, body) + } + return body +} + +func requireHTTPEventually(t *testing.T, url string, status int, timeout time.Duration) []byte { + t.Helper() + deadline := time.Now().Add(timeout) + var lastError error + for time.Now().Before(deadline) { + client := &http.Client{Timeout: 3 * time.Second} + response, err := client.Get(url) + if err == nil { + body, readErr := io.ReadAll(io.LimitReader(response.Body, 1<<20)) + response.Body.Close() + if readErr == nil && response.StatusCode == status { + return body + } + lastError = fmt.Errorf("status=%d read_error=%v body=%q", response.StatusCode, readErr, body) + } else { + lastError = err + } + time.Sleep(500 * time.Millisecond) + } + t.Fatalf("GET %s did not reach status %d: %v", url, status, lastError) + return nil +} + +func requireReferencedAsset(t *testing.T, baseURL string, root []byte) { + t.Helper() + assetPattern := regexp.MustCompile(`(?:src|href)="([^"?]*_nuxt/[^"?]+\.(?:js|css))`) + match := assetPattern.FindSubmatch(root) + if len(match) != 2 { + t.Fatal("operator root contains no generated Nuxt JS/CSS asset") + } + path := string(match[1]) + if !strings.HasPrefix(path, "/") { + path = "/" + path + } + requireHTTP(t, baseURL+path, http.StatusOK) +} + +func uniqueResource(prefix string) string { + if gatePrefix := strings.TrimSpace(os.Getenv("ENGRAM_TEST_RESOURCE_PREFIX")); gatePrefix != "" { + prefix = gatePrefix + "-" + prefix + } + return fmt.Sprintf("%s-%d-%d", prefix, os.Getpid(), time.Now().UnixNano()) +} + +func removeContainer(name string) { dockerBestEffort("rm", "-f", name) } +func removeVolume(name string) { dockerBestEffort("volume", "rm", name) } +func removeNetwork(name string) { dockerBestEffort("network", "rm", name) } + +func containsFold(values []string, expected string) bool { + for _, value := range values { + if strings.EqualFold(value, expected) { + return true + } + } + return false +} + +func containsSubstring(values []string, expected string) bool { + for _, value := range values { + if strings.Contains(value, expected) { + return true + } + } + return false +} diff --git a/tests/critical/runtime/postgres_image_contract_test.go b/tests/critical/runtime/postgres_image_contract_test.go new file mode 100644 index 00000000..8617bbfe --- /dev/null +++ b/tests/critical/runtime/postgres_image_contract_test.go @@ -0,0 +1,209 @@ +//go:build critical + +package runtime_test + +import ( + "os/exec" + "path/filepath" + "strings" + "testing" + "time" +) + +// @critical +// @category: data-consistency +// @features: [image-remediation, postgres-persistence] +// @dev_stand: required +func TestPostgresImageContract(t *testing.T) { + repo := repositoryRoot(t) + dockerfile := filepath.Join(repo, "deploy", "postgres", "Dockerfile") + requireFileContains(t, dockerfile, + "cgr.dev/chainguard/wolfi-base@sha256:02dab76bd852a70556b5b2002195c8a5fdab77d323c433bf6642aab080489795", + "bash=5.3-r12", + "gosu=1.19-r13", + "postgresql-17=17.10-r1", + "pgvector-17=0.8.1-r0", + "LANG=C.UTF-8", + "LC_ALL=C.UTF-8", + "USER 70:70", + ) + + image := imageFromEnv("ENGRAM_POSTGRES_IMAGE", defaultPostgresImage) + config := inspectImage(t, image) + if config.Config.User != "70" && config.Config.User != "70:70" { + t.Fatalf("PostgreSQL image must run as UID/GID 70, got %q", config.Config.User) + } + requireEnv(t, config.Config.Env, "LANG", "C.UTF-8") + requireEnv(t, config.Config.Env, "LC_ALL", "C.UTF-8") + requireProvenanceLabels(t, config.Config.Labels) + requireHealthCommand(t, config.Config.Healthcheck, "pg_isready") + + prefix := uniqueResource("engram-prc-postgres-test") + network := prefix + "-net" + volume := prefix + "-data" + first := prefix + "-first" + second := prefix + "-second" + legacyBlocked := prefix + "-legacy-owner-blocked" + third := prefix + "-after-owner-migration" + t.Cleanup(func() { + removeContainer(first) + removeContainer(second) + removeContainer(legacyBlocked) + removeContainer(third) + removeVolume(volume) + removeNetwork(network) + }) + runDocker(t, nil, "network", "create", network) + runDocker(t, nil, "volume", "create", volume) + startPostgresContainer(t, first, network, volume) + waitHealthy(t, first, 90*time.Second) + requireHardenedContainer(t, first, "70:70") + requireVolumeMetadata(t, volume, image, "70:70:700") + requirePostgresVersions(t, first) + + psql(t, first, "CREATE EXTENSION IF NOT EXISTS vector") + psql(t, first, `CREATE TABLE image_contract_markers (id integer PRIMARY KEY, note text NOT NULL, embedding vector(3) NOT NULL)`) + psql(t, first, `INSERT INTO image_contract_markers VALUES (1, 'persistent-image-contract', '[1,2,3]')`) + if got := psql(t, first, `SELECT note || ':' || embedding::text FROM image_contract_markers WHERE id=1`); got != "persistent-image-contract:[1,2,3]" { + t.Fatalf("unexpected marker before recreation: %q", got) + } + + backup := runDocker(t, nil, "exec", first, "pg_dump", "-U", "engram", "-d", "engram", "--table=image_contract_markers", "--no-owner", "--no-privileges") + psql(t, first, "CREATE DATABASE engram_restore") + psqlDatabase(t, first, "engram_restore", "CREATE EXTENSION IF NOT EXISTS vector") + runDocker(t, append(backup, '\n'), "exec", "-i", first, "psql", "-v", "ON_ERROR_STOP=1", "-U", "engram", "-d", "engram_restore") + if got := psqlDatabase(t, first, "engram_restore", `SELECT note FROM image_contract_markers WHERE id=1`); got != "persistent-image-contract" { + t.Fatalf("backup/restore marker mismatch: %q", got) + } + + removeContainer(first) + startPostgresContainer(t, second, network, volume) + waitHealthy(t, second, 90*time.Second) + requirePostgresVersions(t, second) + if got := psql(t, second, `SELECT note || ':' || embedding::text FROM image_contract_markers WHERE id=1`); got != "persistent-image-contract:[1,2,3]" { + t.Fatalf("persistent marker lost after container recreation: %q", got) + } + + removeContainer(second) + rewriteVolumeOwnership(t, volume, image, "999:999") + requireVolumeMetadata(t, volume, image, "999:999:700") + startPostgresContainer(t, legacyBlocked, network, volume) + waitNotHealthy(t, legacyBlocked, 20*time.Second) + removeContainer(legacyBlocked) + migrateLegacyPostgresVolume(t, volume, image) + requireVolumeMetadata(t, volume, image, "70:70:700") + startPostgresContainer(t, third, network, volume) + waitHealthy(t, third, 90*time.Second) + if got := psql(t, third, `SELECT note || ':' || embedding::text FROM image_contract_markers WHERE id=1`); got != "persistent-image-contract:[1,2,3]" { + t.Fatalf("persistent marker lost across legacy UID ownership migration: %q", got) + } + + t.Run("wrong locale never becomes ready", func(t *testing.T) { + name := prefix + "-wrong-locale" + t.Cleanup(func() { removeContainer(name) }) + runDocker(t, nil, + "run", "-d", "--name", name, + "--user", "70:70", "--read-only", "--cap-drop", "ALL", + "--security-opt", "no-new-privileges:true", + "--tmpfs", "/tmp:rw,noexec,nosuid,nodev,uid=70,gid=70,mode=0700,size=64m", + "--tmpfs", "/var/run/postgresql:rw,noexec,nosuid,nodev,uid=70,gid=70,mode=0700,size=16m", + "--tmpfs", "/var/lib/postgresql/data:rw,noexec,nosuid,nodev,uid=70,gid=70,mode=0700,size=256m", + "-e", "LANG=en_US.UTF-8", "-e", "LC_ALL=en_US.UTF-8", + "-e", "POSTGRES_DB=engram", "-e", "POSTGRES_USER=engram", "-e", "POSTGRES_PASSWORD=engram", + image, + ) + waitNotHealthy(t, name, 45*time.Second) + }) + + t.Run("tmpfs-only data is not durable", func(t *testing.T) { + name := prefix + "-tmpfs" + t.Cleanup(func() { removeContainer(name) }) + startPostgresTmpfs(t, name, image) + waitHealthy(t, name, 90*time.Second) + psql(t, name, "CREATE TABLE volatile_marker (id integer PRIMARY KEY)") + psql(t, name, "INSERT INTO volatile_marker VALUES (1)") + removeContainer(name) + startPostgresTmpfs(t, name, image) + waitHealthy(t, name, 90*time.Second) + cmd := execDocker("exec", name, "psql", "-v", "ON_ERROR_STOP=1", "-U", "engram", "-d", "engram", "-Atc", "SELECT COUNT(*) FROM volatile_marker") + if out, err := cmd.CombinedOutput(); err == nil { + t.Fatalf("tmpfs-only PGDATA unexpectedly retained marker: %q", out) + } + }) +} + +func startPostgresContainer(t *testing.T, name, network, volume string) { + t.Helper() + image := imageFromEnv("ENGRAM_POSTGRES_IMAGE", defaultPostgresImage) + runDocker(t, nil, + "run", "-d", "--name", name, + "--network", network, "--network-alias", "postgres", + "--user", "70:70", "--read-only", "--cap-drop", "ALL", + "--security-opt", "no-new-privileges:true", + "--tmpfs", "/tmp:rw,noexec,nosuid,nodev,uid=70,gid=70,mode=0700,size=64m", + "--tmpfs", "/var/run/postgresql:rw,noexec,nosuid,nodev,uid=70,gid=70,mode=0700,size=16m", + "-v", volume+":/var/lib/postgresql/data", + "-e", "POSTGRES_DB=engram", "-e", "POSTGRES_USER=engram", "-e", "POSTGRES_PASSWORD=engram", + image, + ) +} + +func startPostgresTmpfs(t *testing.T, name, image string) { + t.Helper() + runDocker(t, nil, + "run", "-d", "--name", name, + "--user", "70:70", "--read-only", "--cap-drop", "ALL", + "--security-opt", "no-new-privileges:true", + "--tmpfs", "/tmp:rw,noexec,nosuid,nodev,uid=70,gid=70,mode=0700,size=64m", + "--tmpfs", "/var/run/postgresql:rw,noexec,nosuid,nodev,uid=70,gid=70,mode=0700,size=16m", + "--tmpfs", "/var/lib/postgresql/data:rw,noexec,nosuid,nodev,uid=70,gid=70,mode=0700,size=256m", + "-e", "POSTGRES_DB=engram", "-e", "POSTGRES_USER=engram", "-e", "POSTGRES_PASSWORD=engram", + image, + ) +} + +func requirePostgresVersions(t *testing.T, container string) { + t.Helper() + if got := psql(t, container, "SHOW server_version"); got != "17.10" { + t.Fatalf("PostgreSQL version mismatch: %q", got) + } + psql(t, container, "CREATE EXTENSION IF NOT EXISTS vector") + if got := psql(t, container, "SELECT extversion FROM pg_extension WHERE extname='vector'"); got != "0.8.1" { + t.Fatalf("pgvector version mismatch: %q", got) + } +} + +func rewriteVolumeOwnership(t *testing.T, volume, image, owner string) { + t.Helper() + runDocker(t, nil, + "run", "--rm", "--user", "0:0", "--entrypoint", "/bin/sh", + "-v", volume+":/data", image, + "-c", "chown -R "+owner+" /data && chmod 0700 /data", + ) +} + +func migrateLegacyPostgresVolume(t *testing.T, volume, image string) { + t.Helper() + runDocker(t, nil, + "run", "--rm", "--user", "0:0", + "--cap-drop", "ALL", "--cap-add", "CHOWN", "--cap-add", "DAC_OVERRIDE", "--cap-add", "FOWNER", + "--security-opt", "no-new-privileges:true", "--entrypoint", "/bin/sh", + "-v", volume+":/var/lib/postgresql/data", image, + "-c", "chown -R 70:70 /var/lib/postgresql/data && chmod 0700 /var/lib/postgresql/data", + ) +} + +func psql(t *testing.T, container, sql string) string { + t.Helper() + return psqlDatabase(t, container, "engram", sql) +} + +func psqlDatabase(t *testing.T, container, database, sql string) string { + t.Helper() + out := runDocker(t, nil, "exec", container, "psql", "-v", "ON_ERROR_STOP=1", "-U", "engram", "-d", database, "-Atc", sql) + return strings.TrimSpace(string(out)) +} + +func execDocker(args ...string) *exec.Cmd { + return exec.Command("docker", args...) +} From 1bbda209d4783da4cc12b3bfa1204d49268a9443 Mon Sep 17 00:00:00 2001 From: Kirill Turanskiy Date: Sun, 12 Jul 2026 01:44:37 +0300 Subject: [PATCH 056/111] fix(mb1): isolate governance and literal selectors --- .../evidence/MB1-001.red.json | 8 ++ .../evidence/MB1-002.red.json | 8 ++ .../evidence/MB1-003.red.json | 8 ++ .../behavior-signal.md | 109 ++++++++++++++++++ internal/db/gorm/issue_store.go | 8 +- .../db/gorm/issue_store_isolation_test.go | 45 ++++++++ internal/db/gorm/migration_rule_governance.go | 12 +- ...tion_rule_governance_escape_constraints.go | 37 ++++++ .../gorm/migration_rule_injection_events.go | 62 ++++++++++ internal/db/gorm/migrations.go | 53 +-------- internal/db/gorm/rule_governance_store.go | 1 + .../db/gorm/rule_governance_store_test.go | 51 ++++++-- internal/db/gorm/versioned_document_store.go | 4 +- .../db/gorm/versioned_document_store_test.go | 46 ++++++++ internal/worker/handlers_rules_test.go | 36 ++++-- 15 files changed, 405 insertions(+), 83 deletions(-) create mode 100644 .agent/specs/mb1-data-integrity-and-mutation-safety/evidence/MB1-001.red.json create mode 100644 .agent/specs/mb1-data-integrity-and-mutation-safety/evidence/MB1-002.red.json create mode 100644 .agent/specs/mb1-data-integrity-and-mutation-safety/evidence/MB1-003.red.json create mode 100644 .agent/testing/mb1-db-governance-isolation/behavior-signal.md create mode 100644 internal/db/gorm/issue_store_isolation_test.go create mode 100644 internal/db/gorm/migration_rule_governance_escape_constraints.go create mode 100644 internal/db/gorm/migration_rule_injection_events.go create mode 100644 internal/db/gorm/versioned_document_store_test.go diff --git a/.agent/specs/mb1-data-integrity-and-mutation-safety/evidence/MB1-001.red.json b/.agent/specs/mb1-data-integrity-and-mutation-safety/evidence/MB1-001.red.json new file mode 100644 index 00000000..f7716cc7 --- /dev/null +++ b/.agent/specs/mb1-data-integrity-and-mutation-safety/evidence/MB1-001.red.json @@ -0,0 +1,8 @@ +{ + "task_id": "MB1-001", + "observed_at": "2026-07-11T22:32:52Z", + "test_file": "internal/db/gorm/rule_arbiter_store_test.go; internal/db/gorm/rule_governance_store_test.go", + "test_name": "TestRuleGovernanceStore_AnnotatedCandidateWaitsUntilReviewAfter; TestMigration144_RuleGovernanceRollbackAndReapply; TestMigration144_RuleGovernanceEscapeConstraints; TestMigration144_RuleGovernanceSnapshotStatusesAcceptExtendedStates", + "failure_reason": "An annotated candidate retained its arbiter claim and three migration-144 tests attempted to drop tables while migrations 145-147 still depended on them.", + "runner_stdout_excerpt": "dueLater candidate IDs was empty; ERROR: cannot drop table rule_versions because other objects depend on it (SQLSTATE 2BP01)" +} diff --git a/.agent/specs/mb1-data-integrity-and-mutation-safety/evidence/MB1-002.red.json b/.agent/specs/mb1-data-integrity-and-mutation-safety/evidence/MB1-002.red.json new file mode 100644 index 00000000..4217fcf2 --- /dev/null +++ b/.agent/specs/mb1-data-integrity-and-mutation-safety/evidence/MB1-002.red.json @@ -0,0 +1,8 @@ +{ + "task_id": "MB1-002", + "observed_at": "2026-07-11T22:34:18Z", + "test_file": "internal/db/gorm/issue_store_isolation_test.go; internal/db/gorm/versioned_document_store_test.go", + "test_name": "TestIssueStore_ListIssuesExTreatsProjectSelectorsAsLiteralIdentities; TestVersionedDocumentStore_ListTreatsPathPrefixAsLiteralText", + "failure_reason": "Dynamic SQL LIKE selectors treated underscore, percent, and backslash input as pattern syntax and returned sibling projects or paths.", + "runner_stdout_excerpt": "Issue total expected 1 actual 2; path prefixes notes_1 and notes%literal returned two rows; notes\\root returned zero rows." +} diff --git a/.agent/specs/mb1-data-integrity-and-mutation-safety/evidence/MB1-003.red.json b/.agent/specs/mb1-data-integrity-and-mutation-safety/evidence/MB1-003.red.json new file mode 100644 index 00000000..d005bd41 --- /dev/null +++ b/.agent/specs/mb1-data-integrity-and-mutation-safety/evidence/MB1-003.red.json @@ -0,0 +1,8 @@ +{ + "task_id": "MB1-003", + "observed_at": "2026-07-11T22:43:02Z", + "test_file": "internal/worker/handlers_rules_test.go; internal/db/gorm/rule_governance_store_test.go", + "test_name": "TestHandleListBehavioralRules_ProjectScope; TestHandleCreateBehavioralRule_Success; TestHandleSetBehavioralRuleEnabled_Success", + "failure_reason": "Rule handler tests assumed an otherwise empty global rule set while a governance fixture leaked a global row into the shared test database.", + "runner_stdout_excerpt": "Project list expected 2 actual 3; create and enabled list expected 1 actual 2; leaked row content was rg2 legacy global fallback." +} diff --git a/.agent/testing/mb1-db-governance-isolation/behavior-signal.md b/.agent/testing/mb1-db-governance-isolation/behavior-signal.md new file mode 100644 index 00000000..d9ab0cfa --- /dev/null +++ b/.agent/testing/mb1-db-governance-isolation/behavior-signal.md @@ -0,0 +1,109 @@ +# Behavioral Signal Declarations — MB1 DB governance and isolation + +Phase: 0 (Behavior-Confirming Tester) +Task: MB1-DB-GOVERNANCE-ISOLATION +Anchor: operator directive for `MB1_DATA_INTEGRITY_AND_MUTATION_SAFETY` plus +`macro-batch-diagnostic-freeze-20260711-1340/summary.json` +Generated: 2026-07-11 + +## User Behaviors in Scope + +- UB-1: A workstation starting a session sees issues only for the requested + project, even when another project has a deceptively similar identifier. +- UB-2: An operator listing documents by a literal path prefix receives only + paths that actually begin with those literal characters. +- UB-3: A reviewed rule candidate becomes eligible again at its declared review + time instead of remaining permanently held by an old processing run. + +## Test Declarations + +### TEST-001 + +Test ID: `tests/critical/data_isolation_test.go:TestSessionStartAndDocumentQueries_DoNotExposeSiblingProjectsOrPaths` + +Signal name: user-task-completion-rate +Measurement window: one disposable PostgreSQL-backed dev-stand scenario per +adversarial project/path fixture +Target delta: zero sibling issue or document rows in every decoded response +Measurement method: capture and decode the real session-start and document-list +responses while the database contains literal underscore, percent, backslash, +hyphen-sibling, canonical-suffix, and near-prefix rows +Evidence source: UB-1 and UB-2 from the operator-owned MB1 contract +Critical suite: YES — `@critical` annotation is required + +Rename required: NO +AP violations: none + +### TEST-002 + +Test ID: `internal/db/gorm/issue_store_isolation_test.go:TestIssueStore_ListIssuesExTreatsProjectSelectorsAsLiteralIdentities` + +Tag: CODE-CONTRACT-ONLY +Justification: verifies the store-level literal identity predicate and both +target/source selector branches independently of transport rendering. +Behavioral gap: TEST-001 covers the end-user session-start impact. + +Rename required: NO +AP violations: none + +### TEST-003 + +Test ID: `internal/db/gorm/versioned_document_store_test.go:TestVersionedDocumentStore_ListTreatsPathPrefixAsLiteralText` + +Tag: CODE-CONTRACT-ONLY +Justification: verifies the shared SQL-LIKE escaping contract against real +PostgreSQL for every metacharacter and ordinary prefix. +Behavioral gap: TEST-001 covers the operator-visible document-list impact. + +Rename required: NO +AP violations: none + +### TEST-004 + +Test ID: `internal/db/gorm/rule_arbiter_store_test.go:TestRuleGovernanceStore_AnnotationAtomicallyReleasesMatchingClaimOnly` + +Tag: CODE-CONTRACT-ONLY +Justification: verifies transaction-level claim ownership and release semantics; +the user-visible effect is eventual rule re-evaluation rather than a direct API +response. +Behavioral gap: NONE — the path has no immediate user-facing response. + +Rename required: NO +AP violations: none + +### TEST-005 + +Test ID: `internal/db/gorm/rule_governance_store_test.go:TestMigration144_RollbackAndReapplyPreservesDependentMigrationOrder` + +Tag: CODE-CONTRACT-ONLY +Justification: verifies historical migration test sequencing and final schema +integrity without changing migration 144 rollback semantics. +Behavioral gap: NONE — this is upgrade/schema infrastructure. + +Rename required: NO +AP violations: none + +## Critical Suite Gap Analysis + +- Cross-project session-start and literal document listing: COVERED by TEST-001. +- Claim release and migration sequencing: not user-facing; CODE-CONTRACT-ONLY. + +## Phase 0 Exit Status + +Tests in scope: 5 total + User-facing tests: 1 + - With full signal (A): 1 + - CODE-CONTRACT-ONLY (B): 0 + - PROXY (C): 0 + - UNDECLARED: 0 + Non-user-facing tests: 4 +Critical-suite gaps: 0 +Rename-required flags: 0 +AP violations detected: none + +Behavioral verification tally: + BEHAVIOR_VERIFIED: 2 user behaviors + CODE_PATH_COVERED: 2 infrastructure behaviors + BEHAVIOR_UNCONFIRMED: 0 + +Exit: PASS diff --git a/internal/db/gorm/issue_store.go b/internal/db/gorm/issue_store.go index 3160d019..c5c85594 100644 --- a/internal/db/gorm/issue_store.go +++ b/internal/db/gorm/issue_store.go @@ -131,13 +131,13 @@ func (s *IssueStore) ListIssuesEx(ctx context.Context, params IssueListParams) ( // Query "mcp-mux_e54050" matches issues with target_project="mcp-mux_e54050" AND "mcp-mux". if params.TargetProject != "" { bare := projectBareName(params.TargetProject) - query = query.Where("target_project = ? OR target_project = ? OR target_project LIKE ?", - params.TargetProject, bare, bare+"_%") + query = query.Where(`target_project = ? OR target_project = ? OR target_project LIKE ? ESCAPE '\'`, + params.TargetProject, bare, escapeSQLLike(bare)+`\_%`) } if params.SourceProject != "" { bare := projectBareName(params.SourceProject) - query = query.Where("source_project = ? OR source_project = ? OR source_project LIKE ?", - params.SourceProject, bare, bare+"_%") + query = query.Where(`source_project = ? OR source_project = ? OR source_project LIKE ? ESCAPE '\'`, + params.SourceProject, bare, escapeSQLLike(bare)+`\_%`) } if len(params.Statuses) > 0 { query = query.Where("status IN ?", params.Statuses) diff --git a/internal/db/gorm/issue_store_isolation_test.go b/internal/db/gorm/issue_store_isolation_test.go new file mode 100644 index 00000000..8358e85e --- /dev/null +++ b/internal/db/gorm/issue_store_isolation_test.go @@ -0,0 +1,45 @@ +package gorm + +import ( + "context" + "fmt" + "testing" + "time" + + "github.com/stretchr/testify/require" +) + +func TestIssueStore_ListIssuesExTreatsProjectSelectorsAsLiteralIdentities(t *testing.T) { + db := openCandidateTestDB(t) + store := NewIssueStore(db) + ctx := context.Background() + suffix := fmt.Sprintf("%d", time.Now().UnixNano()) + bare := "literal_project%" + suffix + canonical := bare + "_a1b2c3" + sibling := bare + "-other" + + ids := make([]int64, 0, 4) + for _, issue := range []*Issue{ + {Title: "target canonical", TargetProject: canonical, SourceProject: "source", Type: "task"}, + {Title: "target sibling", TargetProject: sibling, SourceProject: "source", Type: "task"}, + {Title: "source canonical", TargetProject: "target", SourceProject: canonical, Type: "task"}, + {Title: "source sibling", TargetProject: "target", SourceProject: sibling, Type: "task"}, + } { + id, err := store.CreateIssue(ctx, issue) + require.NoError(t, err) + ids = append(ids, id) + } + t.Cleanup(func() { _ = db.Exec("DELETE FROM issues WHERE id IN ?", ids).Error }) + + targetRows, targetTotal, err := store.ListIssuesEx(ctx, IssueListParams{TargetProject: canonical, Limit: 20}) + require.NoError(t, err) + require.EqualValues(t, 1, targetTotal) + require.Len(t, targetRows, 1) + require.Equal(t, canonical, targetRows[0].TargetProject) + + sourceRows, sourceTotal, err := store.ListIssuesEx(ctx, IssueListParams{SourceProject: canonical, Limit: 20}) + require.NoError(t, err) + require.EqualValues(t, 1, sourceTotal) + require.Len(t, sourceRows, 1) + require.Equal(t, canonical, sourceRows[0].SourceProject) +} diff --git a/internal/db/gorm/migration_rule_governance.go b/internal/db/gorm/migration_rule_governance.go index 0f4d6b60..7370309b 100644 --- a/internal/db/gorm/migration_rule_governance.go +++ b/internal/db/gorm/migration_rule_governance.go @@ -41,17 +41,17 @@ func ruleGovernanceMigration144() *gormigrate.Migration { CONSTRAINT rule_candidates_anti_capture_status_escape_chk CHECK (btrim(anti_capture_status) <> '' AND ( anti_capture_status !~ '^(HYPOTHESIS|BLOCKED|NEEDS CLARIFICATION)' OR - anti_capture_status ~ '^(HYPOTHESIS|BLOCKED|NEEDS CLARIFICATION): .*\\S' + anti_capture_status ~ '^(HYPOTHESIS|BLOCKED|NEEDS CLARIFICATION): .*[[:graph:]]$' )), CONSTRAINT rule_candidates_conflict_status_escape_chk CHECK (btrim(conflict_status) <> '' AND ( conflict_status !~ '^(HYPOTHESIS|BLOCKED|NEEDS CLARIFICATION)' OR - conflict_status ~ '^(HYPOTHESIS|BLOCKED|NEEDS CLARIFICATION): .*\\S' + conflict_status ~ '^(HYPOTHESIS|BLOCKED|NEEDS CLARIFICATION): .*[[:graph:]]$' )), CONSTRAINT rule_candidates_decay_policy_escape_chk CHECK (btrim(decay_policy) <> '' AND ( decay_policy !~ '^(HYPOTHESIS|BLOCKED|NEEDS CLARIFICATION)' OR - decay_policy ~ '^(HYPOTHESIS|BLOCKED|NEEDS CLARIFICATION): .*\\S' + decay_policy ~ '^(HYPOTHESIS|BLOCKED|NEEDS CLARIFICATION): .*[[:graph:]]$' )), CONSTRAINT rule_candidates_activation_object_chk CHECK (jsonb_typeof(activation_predicate_json) = 'object'), @@ -106,17 +106,17 @@ func ruleGovernanceMigration144() *gormigrate.Migration { CONSTRAINT rule_versions_anti_capture_status_escape_chk CHECK (btrim(anti_capture_status) <> '' AND ( anti_capture_status !~ '^(HYPOTHESIS|BLOCKED|NEEDS CLARIFICATION)' OR - anti_capture_status ~ '^(HYPOTHESIS|BLOCKED|NEEDS CLARIFICATION): .*\\S' + anti_capture_status ~ '^(HYPOTHESIS|BLOCKED|NEEDS CLARIFICATION): .*[[:graph:]]$' )), CONSTRAINT rule_versions_conflict_status_escape_chk CHECK (btrim(conflict_status) <> '' AND ( conflict_status !~ '^(HYPOTHESIS|BLOCKED|NEEDS CLARIFICATION)' OR - conflict_status ~ '^(HYPOTHESIS|BLOCKED|NEEDS CLARIFICATION): .*\\S' + conflict_status ~ '^(HYPOTHESIS|BLOCKED|NEEDS CLARIFICATION): .*[[:graph:]]$' )), CONSTRAINT rule_versions_decay_policy_escape_chk CHECK (btrim(decay_policy) <> '' AND ( decay_policy !~ '^(HYPOTHESIS|BLOCKED|NEEDS CLARIFICATION)' OR - decay_policy ~ '^(HYPOTHESIS|BLOCKED|NEEDS CLARIFICATION): .*\\S' + decay_policy ~ '^(HYPOTHESIS|BLOCKED|NEEDS CLARIFICATION): .*[[:graph:]]$' )), CONSTRAINT rule_versions_activation_object_chk CHECK (jsonb_typeof(activation_predicate_json) = 'object'), diff --git a/internal/db/gorm/migration_rule_governance_escape_constraints.go b/internal/db/gorm/migration_rule_governance_escape_constraints.go new file mode 100644 index 00000000..016db124 --- /dev/null +++ b/internal/db/gorm/migration_rule_governance_escape_constraints.go @@ -0,0 +1,37 @@ +package gorm + +import ( + "fmt" + + "github.com/go-gormigrate/gormigrate/v2" + "gorm.io/gorm" +) + +func ruleGovernanceEscapeConstraintsMigration159() *gormigrate.Migration { + return &gormigrate.Migration{ + ID: "159_rule_governance_escape_constraints", + Migrate: func(tx *gorm.DB) error { + for _, table := range []string{"rule_candidates", "rule_versions"} { + for _, column := range []string{"anti_capture_status", "conflict_status", "decay_policy"} { + constraint := table + "_" + column + "_escape_chk" + if err := tx.Exec(fmt.Sprintf(`ALTER TABLE %s DROP CONSTRAINT IF EXISTS %s`, table, constraint)).Error; err != nil { + return fmt.Errorf("migration 159 drop %s: %w", constraint, err) + } + stmt := fmt.Sprintf(`ALTER TABLE %s ADD CONSTRAINT %s CHECK ( + btrim(%s) <> '' AND ( + %s !~ '^(HYPOTHESIS|BLOCKED|NEEDS CLARIFICATION)' OR + %s ~ '^(HYPOTHESIS|BLOCKED|NEEDS CLARIFICATION): .*[[:graph:]]$' + ) + )`, table, constraint, column, column, column) + if err := tx.Exec(stmt).Error; err != nil { + return fmt.Errorf("migration 159 add %s: %w", constraint, err) + } + } + } + return nil + }, + Rollback: func(tx *gorm.DB) error { + return nil + }, + } +} diff --git a/internal/db/gorm/migration_rule_injection_events.go b/internal/db/gorm/migration_rule_injection_events.go new file mode 100644 index 00000000..b0dcd3fa --- /dev/null +++ b/internal/db/gorm/migration_rule_injection_events.go @@ -0,0 +1,62 @@ +package gorm + +import ( + "fmt" + + "github.com/go-gormigrate/gormigrate/v2" + "gorm.io/gorm" +) + +func ruleInjectionEventsMigration146() *gormigrate.Migration { + return &gormigrate.Migration{ + ID: "146_rule_injection_events", + Migrate: func(tx *gorm.DB) error { + sqls := []string{ + `CREATE TABLE IF NOT EXISTS rule_injection_events ( + id BIGSERIAL PRIMARY KEY, + session_id TEXT NOT NULL, + project TEXT NOT NULL, + surface TEXT NOT NULL, + rule_version_id BIGINT REFERENCES rule_versions(id) ON DELETE SET NULL, + legacy_behavioral_rule_id BIGINT REFERENCES behavioral_rules(id) ON DELETE SET NULL, + event_type TEXT NOT NULL, + reason TEXT NOT NULL DEFAULT '', + budget_position INTEGER NOT NULL DEFAULT 0, + created_at TIMESTAMPTZ NOT NULL DEFAULT now(), + CONSTRAINT rule_injection_events_type_chk + CHECK (event_type IN ( + 'emitted_kernel', + 'emitted_contextual', + 'deferred_budget', + 'suppressed_state', + 'suppressed_predicate', + 'suppressed_prompt_safety', + 'fallback_legacy', + 'router_error' + )) + )`, + `CREATE INDEX IF NOT EXISTS idx_rule_injection_events_project_created + ON rule_injection_events (project, created_at DESC)`, + `CREATE INDEX IF NOT EXISTS idx_rule_injection_events_session_created + ON rule_injection_events (session_id, created_at DESC)`, + `CREATE INDEX IF NOT EXISTS idx_rule_injection_events_rule_version_created + ON rule_injection_events (rule_version_id, created_at DESC) + WHERE rule_version_id IS NOT NULL`, + `CREATE INDEX IF NOT EXISTS idx_rule_injection_events_legacy_rule_created + ON rule_injection_events (legacy_behavioral_rule_id, created_at DESC) + WHERE legacy_behavioral_rule_id IS NOT NULL`, + `CREATE INDEX IF NOT EXISTS idx_rule_injection_events_event_created + ON rule_injection_events (event_type, created_at DESC)`, + } + for _, stmt := range sqls { + if err := tx.Exec(stmt).Error; err != nil { + return fmt.Errorf("migration 146: %w", err) + } + } + return nil + }, + Rollback: func(tx *gorm.DB) error { + return tx.Exec(`DROP TABLE IF EXISTS rule_injection_events`).Error + }, + } +} diff --git a/internal/db/gorm/migrations.go b/internal/db/gorm/migrations.go index a601c241..fcbbb7a3 100644 --- a/internal/db/gorm/migrations.go +++ b/internal/db/gorm/migrations.go @@ -4662,57 +4662,7 @@ WHERE utility_propagated_at IS NOT NULL`).Error }, ruleGovernanceMigration144(), ruleArbiterBackgroundMigration145(), - { - ID: "146_rule_injection_events", - Migrate: func(tx *gorm.DB) error { - sqls := []string{ - `CREATE TABLE IF NOT EXISTS rule_injection_events ( - id BIGSERIAL PRIMARY KEY, - session_id TEXT NOT NULL, - project TEXT NOT NULL, - surface TEXT NOT NULL, - rule_version_id BIGINT REFERENCES rule_versions(id) ON DELETE SET NULL, - legacy_behavioral_rule_id BIGINT REFERENCES behavioral_rules(id) ON DELETE SET NULL, - event_type TEXT NOT NULL, - reason TEXT NOT NULL DEFAULT '', - budget_position INTEGER NOT NULL DEFAULT 0, - created_at TIMESTAMPTZ NOT NULL DEFAULT now(), - CONSTRAINT rule_injection_events_type_chk - CHECK (event_type IN ( - 'emitted_kernel', - 'emitted_contextual', - 'deferred_budget', - 'suppressed_state', - 'suppressed_predicate', - 'suppressed_prompt_safety', - 'fallback_legacy', - 'router_error' - )) - )`, - `CREATE INDEX IF NOT EXISTS idx_rule_injection_events_project_created - ON rule_injection_events (project, created_at DESC)`, - `CREATE INDEX IF NOT EXISTS idx_rule_injection_events_session_created - ON rule_injection_events (session_id, created_at DESC)`, - `CREATE INDEX IF NOT EXISTS idx_rule_injection_events_rule_version_created - ON rule_injection_events (rule_version_id, created_at DESC) - WHERE rule_version_id IS NOT NULL`, - `CREATE INDEX IF NOT EXISTS idx_rule_injection_events_legacy_rule_created - ON rule_injection_events (legacy_behavioral_rule_id, created_at DESC) - WHERE legacy_behavioral_rule_id IS NOT NULL`, - `CREATE INDEX IF NOT EXISTS idx_rule_injection_events_event_created - ON rule_injection_events (event_type, created_at DESC)`, - } - for _, stmt := range sqls { - if err := tx.Exec(stmt).Error; err != nil { - return fmt.Errorf("migration 146: %w", err) - } - } - return nil - }, - Rollback: func(tx *gorm.DB) error { - return tx.Exec(`DROP TABLE IF EXISTS rule_injection_events`).Error - }, - }, + ruleInjectionEventsMigration146(), ruleGovernanceSnapshotStatusesMigration147(), apiTokenPrincipalsMigration148(), memoryPrincipalsMigration149(), @@ -4788,6 +4738,7 @@ WHERE utility_propagated_at IS NOT NULL`).Error accessMilestoneMigration156(), temporalTruthRecordsMigration157(), attentionEventsMigration158(), + ruleGovernanceEscapeConstraintsMigration159(), }) if err := m.Migrate(); err != nil { return fmt.Errorf("run gormigrate migrations: %w", err) diff --git a/internal/db/gorm/rule_governance_store.go b/internal/db/gorm/rule_governance_store.go index eef7a130..4ed8ebe8 100644 --- a/internal/db/gorm/rule_governance_store.go +++ b/internal/db/gorm/rule_governance_store.go @@ -607,6 +607,7 @@ func (s *RuleGovernanceStore) AnnotateRuleCandidate(ctx context.Context, candida "arbiter_evaluation_id": ann.EvaluationID, "last_evaluated_at": &evaluatedAt, "review_after": ann.ReviewAfter, + "arbiter_claim_run_id": nil, "updated_at": time.Now().UTC(), } var row ruleCandidateRow diff --git a/internal/db/gorm/rule_governance_store_test.go b/internal/db/gorm/rule_governance_store_test.go index 9d58ea98..2ff02ba4 100644 --- a/internal/db/gorm/rule_governance_store_test.go +++ b/internal/db/gorm/rule_governance_store_test.go @@ -8,6 +8,7 @@ import ( "testing" "time" + "github.com/go-gormigrate/gormigrate/v2" "github.com/jackc/pgx/v5/pgconn" "github.com/lib/pq" "github.com/stretchr/testify/require" @@ -23,27 +24,25 @@ func TestMigration144_RuleGovernanceTables(t *testing.T) { func TestMigration144_RuleGovernanceRollbackAndReapply(t *testing.T) { db := openCandidateTestDB(t) - migration := ruleGovernanceMigration144() t.Cleanup(func() { - _ = migration.Migrate(db) + migrateRuleGovernanceChain144Through147(t, db) }) requireRuleGovernanceTableState(t, db, true) - require.NoError(t, migration.Rollback(db)) + rollbackRuleGovernanceChain147Through144(t, db) requireRuleGovernanceTableState(t, db, false) - require.NoError(t, migration.Migrate(db)) + migrateRuleGovernanceChain144Through147(t, db) requireRuleGovernanceTableState(t, db, true) } func TestMigration144_RuleGovernanceEscapeConstraints(t *testing.T) { db := openCandidateTestDB(t) - migration := ruleGovernanceMigration144() t.Cleanup(func() { - _ = migration.Migrate(db) + migrateRuleGovernanceChain144Through147(t, db) }) - require.NoError(t, migration.Rollback(db)) - require.NoError(t, migration.Migrate(db)) + rollbackRuleGovernanceChain147Through144(t, db) + migrateRuleGovernanceChain144Through147(t, db) for _, tc := range []struct { name string @@ -289,6 +288,11 @@ func TestRuleGovernanceStore_ListLegacyBehavioralRuleFallbackKeepsLegacyRowsCont EditedBy: "rg2-test", }) require.NoError(t, err) + t.Cleanup(func() { + require.NoError(t, db.Exec("DELETE FROM behavioral_rules WHERE id IN ?", []int64{ + global.ID, projectScoped.ID, deleted.ID, disabled.ID, + }).Error) + }) _, err = behavioralStore.SetEnabled(ctx, disabled.ID, false, strPtr("rg2-test")) require.NoError(t, err) @@ -719,15 +723,38 @@ func requireRuleGovernanceTableState(t *testing.T, db *gorm.DB, exists bool) { } } +func rollbackRuleGovernanceChain147Through144(t *testing.T, db *gorm.DB) { + t.Helper() + for _, migration := range []*gormigrate.Migration{ + ruleGovernanceSnapshotStatusesMigration147(), + ruleInjectionEventsMigration146(), + ruleArbiterBackgroundMigration145(), + ruleGovernanceMigration144(), + } { + require.NoError(t, migration.Rollback(db), "rollback %s", migration.ID) + } +} + +func migrateRuleGovernanceChain144Through147(t *testing.T, db *gorm.DB) { + t.Helper() + for _, migration := range []*gormigrate.Migration{ + ruleGovernanceMigration144(), + ruleArbiterBackgroundMigration145(), + ruleInjectionEventsMigration146(), + ruleGovernanceSnapshotStatusesMigration147(), + } { + require.NoError(t, migration.Migrate(db), "migrate %s", migration.ID) + } +} + func TestMigration144_RuleGovernanceSnapshotStatusesAcceptExtendedStates(t *testing.T) { db := openCandidateTestDB(t) - migration := ruleGovernanceMigration144() t.Cleanup(func() { - _ = migration.Migrate(db) + migrateRuleGovernanceChain144Through147(t, db) }) - require.NoError(t, migration.Rollback(db)) - require.NoError(t, migration.Migrate(db)) + rollbackRuleGovernanceChain147Through144(t, db) + migrateRuleGovernanceChain144Through147(t, db) snapshotID := fmt.Sprintf("rg0-snapshot-status-%d", time.Now().UnixNano()) require.NoError(t, db.Exec(` diff --git a/internal/db/gorm/versioned_document_store.go b/internal/db/gorm/versioned_document_store.go index 69a3d51a..f8eea9aa 100644 --- a/internal/db/gorm/versioned_document_store.go +++ b/internal/db/gorm/versioned_document_store.go @@ -201,8 +201,8 @@ func versionedDocBuildListFilters(project, docType, pathPrefix string) (string, args = append(args, docType) } if pathPrefix != "" { - clauses = append(clauses, "path LIKE ?") - args = append(args, pathPrefix+"%") + clauses = append(clauses, "path LIKE ? ESCAPE '\\'") + args = append(args, escapeSQLLike(pathPrefix)+"%") } if len(clauses) == 0 { diff --git a/internal/db/gorm/versioned_document_store_test.go b/internal/db/gorm/versioned_document_store_test.go new file mode 100644 index 00000000..b9c6f955 --- /dev/null +++ b/internal/db/gorm/versioned_document_store_test.go @@ -0,0 +1,46 @@ +package gorm + +import ( + "context" + "fmt" + "testing" + "time" + + "github.com/stretchr/testify/require" +) + +func TestVersionedDocumentStore_ListTreatsPathPrefixAsLiteralText(t *testing.T) { + db := openCandidateTestDB(t) + store := NewVersionedDocumentStore(&Store{DB: db}) + ctx := context.Background() + project := fmt.Sprintf("literal-document-prefix-%d", time.Now().UnixNano()) + t.Cleanup(func() { _ = db.Exec("DELETE FROM versioned_documents WHERE project = ?", project).Error }) + + paths := []string{ + `notes_1/exact.md`, `notesX1/sibling.md`, + `notes%literal/exact.md`, `notesZliteral/sibling.md`, + `notes\root/exact.md`, `notesXroot/sibling.md`, + `ordinary/exact.md`, `ordinary-other/sibling.md`, + } + for _, path := range paths { + _, err := store.Create(ctx, path, project, path, "markdown", "{}", "mb1-test") + require.NoError(t, err) + } + + for _, tc := range []struct { + prefix string + want string + }{ + {prefix: `notes_1/`, want: `notes_1/exact.md`}, + {prefix: `notes%literal/`, want: `notes%literal/exact.md`}, + {prefix: `notes\root/`, want: `notes\root/exact.md`}, + {prefix: `ordinary/`, want: `ordinary/exact.md`}, + } { + t.Run(tc.prefix, func(t *testing.T) { + docs, err := store.List(ctx, project, "", tc.prefix, 20) + require.NoError(t, err) + require.Len(t, docs, 1) + require.Equal(t, tc.want, docs[0].Path) + }) + } +} diff --git a/internal/worker/handlers_rules_test.go b/internal/worker/handlers_rules_test.go index 9419bc67..85f94702 100644 --- a/internal/worker/handlers_rules_test.go +++ b/internal/worker/handlers_rules_test.go @@ -185,9 +185,15 @@ func TestHandleListBehavioralRules_ProjectScope(t *testing.T) { var rows []models.BehavioralRule require.NoError(t, json.Unmarshal(w.Body.Bytes(), &rows)) - require.Len(t, rows, 2) - assert.Equal(t, projectRule.ID, rows[0].ID) - assert.Equal(t, globalRule.ID, rows[1].ID) + ids := make(map[int64]bool, len(rows)) + for _, row := range rows { + ids[row.ID] = true + if row.Project != nil { + assert.Equal(t, project, *row.Project, "project-scoped rows from other projects must not leak") + } + } + assert.True(t, ids[projectRule.ID]) + assert.True(t, ids[globalRule.ID]) } func TestHandleListBehavioralRules_AllScopes(t *testing.T) { @@ -264,8 +270,14 @@ func TestHandleCreateBehavioralRule_Success(t *testing.T) { rows, err := brs.List(context.Background(), &project, 100) require.NoError(t, err) - require.Len(t, rows, 1) - assert.Equal(t, created.ID, rows[0].ID) + found := false + for _, row := range rows { + if row.ID == created.ID { + found = true + break + } + } + assert.True(t, found, "created project rule must be returned even when global rules exist") } func TestHandleUpdateBehavioralRule_PartialSuccess(t *testing.T) { @@ -332,12 +344,20 @@ func TestHandleSetBehavioralRuleEnabled_Success(t *testing.T) { operatorRows, err := brs.List(context.Background(), &projectPtr, 100) require.NoError(t, err) - require.Len(t, operatorRows, 1) - assert.False(t, operatorRows[0].Enabled, "disabled rule remains visible to operator list") + foundDisabled := false + for _, row := range operatorRows { + if row.ID == created.ID { + foundDisabled = true + assert.False(t, row.Enabled, "disabled rule remains visible to operator list") + } + } + assert.True(t, foundDisabled) injectionRows, err := brs.ListEnabled(context.Background(), &projectPtr, 100) require.NoError(t, err) - require.Empty(t, injectionRows, "disabled rule must not be injected") + for _, row := range injectionRows { + assert.NotEqual(t, created.ID, row.ID, "disabled rule must not be injected") + } } func TestHandleSetBehavioralRuleEnabled_RequiresEnabled(t *testing.T) { From ef763e59019b8472b9e54b92e47f19fa64a06258 Mon Sep 17 00:00:00 2001 From: Kirill Turanskiy Date: Sun, 12 Jul 2026 02:28:39 +0300 Subject: [PATCH 057/111] test(mb1): prove candidate review rollback --- .../MB1-CANDIDATE-ROLLBACK.green.json | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 .agent/specs/mb1-data-integrity-and-mutation-safety/evidence/MB1-CANDIDATE-ROLLBACK.green.json diff --git a/.agent/specs/mb1-data-integrity-and-mutation-safety/evidence/MB1-CANDIDATE-ROLLBACK.green.json b/.agent/specs/mb1-data-integrity-and-mutation-safety/evidence/MB1-CANDIDATE-ROLLBACK.green.json new file mode 100644 index 00000000..678888ee --- /dev/null +++ b/.agent/specs/mb1-data-integrity-and-mutation-safety/evidence/MB1-CANDIDATE-ROLLBACK.green.json @@ -0,0 +1,28 @@ +{ + "slice": "CANDIDATE-REVIEW-SNAPSHOT-ROLLBACK", + "disposition": "accepted implementation already present in source candidate fef455bcf640f849c2d40c9bc26a459b5593e10a; macro batch adds fresh independent execution proof instead of duplicating code", + "contracts": [ + "all public candidate-review actions persist authoritative before and after candidate state in the committed snapshot", + "immediate rollback restores the pending candidate state", + "promote rollback deletes the operation-owned promoted memory", + "a later edit to the promoted memory produces rollback_conflict and retains both the committed snapshot and the later state" + ], + "command": "$env:DATABASE_DSN='postgres://engram:engram@127.0.0.1:55432/engram_test?sslmode=disable'; go test -p=1 ./internal/bulkops -run 'TestRollback_(PublicCandidateReview|CandidateReviewPromoteEditedMemoryConflicts)' -count=1", + "result": "PASS", + "database_port": 55432, + "database_port_5432_used": false, + "test_count": 5, + "covered_actions": [ + "promote", + "preserve", + "reject", + "supersede", + "suppress" + ], + "source_tests": [ + "internal/bulkops/rollback_test.go:TestRollback_PublicCandidateReviewPromotePersistsAfterAndRestoresPending", + "internal/bulkops/rollback_test.go:TestRollback_PublicCandidateReviewPreservePersistsAfterAndRestoresPending", + "internal/bulkops/rollback_test.go:TestRollback_PublicCandidateReviewNonMemoryActionsPersistAfterAndRestorePending", + "internal/bulkops/rollback_test.go:TestRollback_CandidateReviewPromoteEditedMemoryConflicts" + ] +} From 310f9488c8a580d9a255e85e5bc4b750416a9870 Mon Sep 17 00:00:00 2001 From: Kirill Turanskiy Date: Sun, 12 Jul 2026 02:29:20 +0300 Subject: [PATCH 058/111] fix(mb1): demolish executable ingest snapshots --- .../evidence/MB1-004.red.json | 8 +++ internal/bulkops/facade.go | 28 ++--------- internal/bulkops/facade_test.go | 32 ++++++++++-- internal/mcp/ingest_snapshot_contract_test.go | 50 +++++++++++++++++++ pkg/models/snapshot.go | 11 ++++ pkg/models/snapshot_test.go | 19 +++++++ 6 files changed, 120 insertions(+), 28 deletions(-) create mode 100644 .agent/specs/mb1-data-integrity-and-mutation-safety/evidence/MB1-004.red.json create mode 100644 internal/mcp/ingest_snapshot_contract_test.go diff --git a/.agent/specs/mb1-data-integrity-and-mutation-safety/evidence/MB1-004.red.json b/.agent/specs/mb1-data-integrity-and-mutation-safety/evidence/MB1-004.red.json new file mode 100644 index 00000000..7ef5b32c --- /dev/null +++ b/.agent/specs/mb1-data-integrity-and-mutation-safety/evidence/MB1-004.red.json @@ -0,0 +1,8 @@ +{ + "task_id": "MB1-004", + "observed_at": "2026-07-11T22:45:54Z", + "test_file": "pkg/models/snapshot_test.go; internal/bulkops/facade_test.go; internal/mcp/ingest_snapshot_contract_test.go", + "test_name": "TestSnapshotOpIngestDoc_PersistedButNotExecutable; TestFacade_Execute_IngestDocHistoricalOnly_NoSnapshot; TestIngestDocument_StoresChunksWithoutBulkOpSnapshot", + "failure_reason": "The snapshot discriminator had no executable classification and Facade.Execute still accepted historical ingest_doc in both dry-run and committed form.", + "runner_stdout_excerpt": "SnapshotOpType.IsExecutable undefined; Facade ingest_doc expected an error but got nil; the independent live ingest path already stored chunks without snapshots." +} diff --git a/internal/bulkops/facade.go b/internal/bulkops/facade.go index d9bdc07a..b38a7845 100644 --- a/internal/bulkops/facade.go +++ b/internal/bulkops/facade.go @@ -117,6 +117,9 @@ func (f *Facade) Execute(ctx context.Context, identity auth.Identity, op BulkOp) if !op.Type.IsValid() { return nil, fmt.Errorf("bulk_execute: invalid op_type %q", op.Type) } + if !op.Type.IsExecutable() { + return nil, fmt.Errorf("bulk_execute: op_type %q is persisted historical-only and not executable", op.Type) + } switch op.Type { case models.SnapshotOpBulkPromote: @@ -125,8 +128,6 @@ func (f *Facade) Execute(ctx context.Context, identity auth.Identity, op BulkOp) return f.executeBulkDelete(ctx, identity, op) case models.SnapshotOpBulkSupersede: return f.executeBulkSupersede(ctx, identity, op) - case models.SnapshotOpIngestDoc: - return f.executeIngestDoc(ctx, identity, op) default: return nil, fmt.Errorf("bulk_execute: unhandled op_type %q", op.Type) } @@ -437,29 +438,6 @@ func (f *Facade) executeBulkSupersede(ctx context.Context, identity auth.Identit return result, nil } -// --- ingest_doc --- - -func (f *Facade) executeIngestDoc(ctx context.Context, identity auth.Identity, op BulkOp) (*ExecuteResult, error) { - // ingest_doc snapshot is created after ingestion; dry-run is handled upstream. - // This facade entry point is a thin wrapper for snapshot attribution on non-dry-run ingest. - if op.DryRun { - return &ExecuteResult{DryRun: true, WouldAffect: 0}, nil - } - actor := resolveActor(identity) - snapshotID := uuid.New().String() - snap, err := models.NewBulkOpSnapshot(snapshotID, models.SnapshotOpIngestDoc, actor, json.RawMessage(`{}`)) - if err != nil { - return nil, fmt.Errorf("ingest_doc new_snapshot: %w", err) - } - snap.SourceSessionID = op.SourceSessionID - snap.Parameters = op.Parameters - created, err := f.snapshotStore.Create(ctx, snap) - if err != nil { - return nil, fmt.Errorf("ingest_doc store_snapshot: %w", err) - } - return &ExecuteResult{SnapshotID: created.SnapshotID, AffectedCount: 0}, nil -} - // --- helpers --- func resolveActor(identity auth.Identity) string { diff --git a/internal/bulkops/facade_test.go b/internal/bulkops/facade_test.go index 24780a25..ad6a08db 100644 --- a/internal/bulkops/facade_test.go +++ b/internal/bulkops/facade_test.go @@ -3,7 +3,7 @@ // // Unit tests cover: // - Non-admin callers receive ErrAdminRequired (no DB required — auth gate fires first) -// - Dry-run paths for all 4 op_types return a preview without any DB writes (no DB required) +// - Dry-run paths for all 3 executable op_types return a preview without any DB writes (no DB required) // // Integration tests (skip when DATABASE_DSN is absent) cover: // - Committed paths for bulk_delete and bulk_supersede @@ -112,7 +112,7 @@ func TestFacade_NonAdmin_ReturnsErrAdminRequired(t *testing.T) { // --- Unit: dry-run paths (no DB required) --- -// TestFacade_DryRun_AllOpTypes verifies every op_type returns a preview with DryRun=true +// TestFacade_DryRun_AllOpTypes verifies every executable op_type returns a preview with DryRun=true // and no DB mutations (facade has nil stores — any store call would panic). func TestFacade_DryRun_AllOpTypes(t *testing.T) { // snapshotStore must not be nil for non-dryrun paths, but for dryrun all paths @@ -130,7 +130,6 @@ func TestFacade_DryRun_AllOpTypes(t *testing.T) { {models.SnapshotOpBulkPromote, []int64{10, 20, 30}, nil, 3}, {models.SnapshotOpBulkDelete, nil, []int64{11, 22}, 2}, {models.SnapshotOpBulkSupersede, nil, []int64{13, 14, 15}, 3}, - {models.SnapshotOpIngestDoc, nil, nil, 0}, } for _, c := range cases { @@ -153,6 +152,33 @@ func TestFacade_DryRun_AllOpTypes(t *testing.T) { } } +func TestFacade_Execute_IngestDocHistoricalOnly_NoSnapshot(t *testing.T) { + db, _ := openTestDB(t) + facade := NewFacade(gormdb.NewSnapshotStore(db), nil, nil, gormdb.NewAuditStore(db)) + ctx := context.Background() + + var beforeSnapshots, beforeAudits int64 + require.NoError(t, db.Table("bulk_op_snapshots").Count(&beforeSnapshots).Error) + require.NoError(t, db.Table("audit_log").Count(&beforeAudits).Error) + + for _, dryRun := range []bool{true, false} { + result, err := facade.Execute(ctx, adminIdentity(), BulkOp{ + Type: models.SnapshotOpIngestDoc, + DryRun: dryRun, + Parameters: json.RawMessage(`{"document":"must-not-execute"}`), + }) + require.Error(t, err) + require.Nil(t, result) + require.Contains(t, err.Error(), "historical-only") + } + + var afterSnapshots, afterAudits int64 + require.NoError(t, db.Table("bulk_op_snapshots").Count(&afterSnapshots).Error) + require.NoError(t, db.Table("audit_log").Count(&afterAudits).Error) + require.Equal(t, beforeSnapshots, afterSnapshots) + require.Equal(t, beforeAudits, afterAudits) +} + func TestFacade_BulkPromote_DryRunNormalizesDuplicateAndZeroIDs(t *testing.T) { db, store := openTestDB(t) ctx := context.Background() diff --git a/internal/mcp/ingest_snapshot_contract_test.go b/internal/mcp/ingest_snapshot_contract_test.go new file mode 100644 index 00000000..98e7ac1e --- /dev/null +++ b/internal/mcp/ingest_snapshot_contract_test.go @@ -0,0 +1,50 @@ +package mcp + +import ( + "context" + "encoding/json" + "fmt" + "os" + "testing" + "time" + + "github.com/stretchr/testify/require" + gormdb "github.com/thebtf/engram/internal/db/gorm" +) + +func TestIngestDocument_StoresChunksWithoutBulkOpSnapshot(t *testing.T) { + dsn := os.Getenv("DATABASE_DSN") + if dsn == "" { + t.Skip("DATABASE_DSN not set, skipping ingest snapshot contract") + } + store, err := gormdb.NewStore(gormdb.Config{DSN: dsn, MaxConns: 2}) + require.NoError(t, err) + t.Cleanup(func() { require.NoError(t, store.Close()) }) + + project := fmt.Sprintf("ingest-no-snapshot-%d", time.Now().UnixNano()) + t.Cleanup(func() { + require.NoError(t, store.DB.Unscoped().Exec("DELETE FROM memories WHERE project = ?", project).Error) + }) + + var before int64 + require.NoError(t, store.DB.Table("bulk_op_snapshots").Count(&before).Error) + server := NewServer(ServerOptions{Version: "mb1-ingest-contract"}) + server.SetMemoryStore(gormdb.NewMemoryStore(store)) + out, err := server.handleIngest(context.Background(), json.RawMessage(fmt.Sprintf(`{ + "action":"ingest", + "content":"first paragraph\n\nsecond paragraph", + "source_title":"MB1 live ingest", + "project":%q, + "chunk_strategy":"paragraphs" + }`, project))) + require.NoError(t, err) + + var response map[string]any + require.NoError(t, json.Unmarshal([]byte(out), &response)) + require.Equal(t, float64(2), response["stored"]) + var memories, after int64 + require.NoError(t, store.DB.Model(&gormdb.Memory{}).Where("project = ?", project).Count(&memories).Error) + require.EqualValues(t, 2, memories) + require.NoError(t, store.DB.Table("bulk_op_snapshots").Count(&after).Error) + require.Equal(t, before, after) +} diff --git a/pkg/models/snapshot.go b/pkg/models/snapshot.go index 5ed36e3f..d2365728 100644 --- a/pkg/models/snapshot.go +++ b/pkg/models/snapshot.go @@ -37,6 +37,17 @@ func (s SnapshotOpType) IsValid() bool { return false } +// IsExecutable reports whether Facade.Execute may run this operation. Historical +// and review snapshot discriminators remain valid for persisted-row compatibility +// but are never generic bulk-operation entry points. +func (s SnapshotOpType) IsExecutable() bool { + switch s { + case SnapshotOpBulkPromote, SnapshotOpBulkDelete, SnapshotOpBulkSupersede: + return true + } + return false +} + // SnapshotStatus is the lifecycle state of a bulk_op_snapshot row. type SnapshotStatus string diff --git a/pkg/models/snapshot_test.go b/pkg/models/snapshot_test.go index 9589b5c0..5ebc4134 100644 --- a/pkg/models/snapshot_test.go +++ b/pkg/models/snapshot_test.go @@ -26,6 +26,25 @@ func TestSnapshotOpType_IsValid(t *testing.T) { } } +func TestSnapshotOpIngestDoc_PersistedButNotExecutable(t *testing.T) { + if !SnapshotOpIngestDoc.IsValid() { + t.Fatal("historical ingest_doc rows must remain readable") + } + if SnapshotOpIngestDoc.IsExecutable() { + t.Fatal("historical ingest_doc discriminator must never be executable") + } + for _, op := range []SnapshotOpType{SnapshotOpBulkPromote, SnapshotOpBulkDelete, SnapshotOpBulkSupersede} { + if !op.IsExecutable() { + t.Fatalf("retained bulk operation %q must remain executable", op) + } + } + for _, op := range []SnapshotOpType{SnapshotOpCandidateReviewAction, SnapshotOpForgettingReviewAction} { + if op.IsExecutable() { + t.Fatalf("review discriminator %q is not a Facade.Execute operation", op) + } + } +} + // TestSnapshotStatus_IsValid verifies all 3 statuses and invalid rejection. func TestSnapshotStatus_IsValid(t *testing.T) { valid := []SnapshotStatus{ From e86cf65ba7f103f027cb0a6111b3a5dc2ea5cd81 Mon Sep 17 00:00:00 2001 From: Kirill Turanskiy Date: Sun, 12 Jul 2026 04:03:32 +0300 Subject: [PATCH 059/111] fix(mb1): reject lossy mutation inputs --- .../evidence/MB1-005.red.json | 8 + internal/mcp/coerce.go | 126 +++++++- internal/mcp/coerce_test.go | 117 +++++++ internal/mcp/server.go | 39 ++- .../mcp/structured_input_validation_test.go | 293 ++++++++++++++++++ internal/mcp/tools_candidates.go | 35 ++- internal/mcp/tools_candidates_test.go | 79 +++++ internal/mcp/tools_documents_v2.go | 48 ++- internal/mcp/tools_memory.go | 120 +++++-- internal/mcp/tools_memory_edit_test.go | 52 ++++ internal/mcp/tools_memory_significance.go | 13 +- .../mcp/tools_memory_significance_test.go | 50 +++ internal/mcp/tools_rule_governance.go | 66 +++- internal/mcp/tools_rule_governance_test.go | 53 ++++ internal/mcp/tools_settings.go | 42 ++- internal/mcp/tools_settings_test.go | 31 ++ internal/mcp/tools_store_consolidated.go | 24 +- 17 files changed, 1107 insertions(+), 89 deletions(-) create mode 100644 .agent/specs/mb1-data-integrity-and-mutation-safety/evidence/MB1-005.red.json create mode 100644 internal/mcp/structured_input_validation_test.go diff --git a/.agent/specs/mb1-data-integrity-and-mutation-safety/evidence/MB1-005.red.json b/.agent/specs/mb1-data-integrity-and-mutation-safety/evidence/MB1-005.red.json new file mode 100644 index 00000000..af7d867d --- /dev/null +++ b/.agent/specs/mb1-data-integrity-and-mutation-safety/evidence/MB1-005.red.json @@ -0,0 +1,8 @@ +{ + "task_id": "MB1-005", + "observed_at": "2026-07-11T22:48:01Z", + "test_file": "internal/mcp/coerce_test.go", + "test_name": "TestParseArgsPreservesExactJSONNumbers; TestStrictMutationArgumentsRejectLossyOrPartialValues", + "failure_reason": "Public mutation decoding had no exact integer, strict boolean, or atomic array parsers and parseArgs decoded durable IDs through float64.", + "runner_stdout_excerpt": "requireInt64Arg, optionalBoolArg, optionalStringSliceArg, and optionalInt64SliceArg undefined." +} diff --git a/internal/mcp/coerce.go b/internal/mcp/coerce.go index 2e53f85a..e55690c9 100644 --- a/internal/mcp/coerce.go +++ b/internal/mcp/coerce.go @@ -1,8 +1,10 @@ package mcp import ( + "bytes" "encoding/json" "fmt" + "io" "math" "strconv" ) @@ -32,7 +34,15 @@ func parseArgs(args json.RawMessage) (map[string]any, error) { return make(map[string]any), nil } var m map[string]any - if err := json.Unmarshal(args, &m); err != nil { + decoder := json.NewDecoder(bytes.NewReader(args)) + decoder.UseNumber() + if err := decoder.Decode(&m); err != nil { + return nil, fmt.Errorf("invalid arguments: %w", err) + } + if err := decoder.Decode(&struct{}{}); err != io.EOF { + if err == nil { + return nil, fmt.Errorf("invalid arguments: multiple JSON values") + } return nil, fmt.Errorf("invalid arguments: %w", err) } if m == nil { @@ -41,6 +51,120 @@ func parseArgs(args json.RawMessage) (map[string]any, error) { return m, nil } +// requireInt64Arg parses a load-bearing mutation selector without float64 +// conversion, numeric strings, fractions, exponent notation, or overflow. +func requireInt64Arg(m map[string]any, key string) (int64, error) { + v, ok := m[key] + if !ok || v == nil { + return 0, fmt.Errorf("%s is required and must be an integer", key) + } + n, ok := v.(json.Number) + if !ok { + return 0, fmt.Errorf("%s must be an integer", key) + } + i, err := n.Int64() + if err != nil { + return 0, fmt.Errorf("%s must be an in-range integer: %w", key, err) + } + return i, nil +} + +func optionalInt64Arg(m map[string]any, key string) (int64, bool, error) { + v, ok := m[key] + if !ok { + return 0, false, nil + } + if v == nil { + return 0, true, fmt.Errorf("%s must be an integer when present", key) + } + i, err := requireInt64Arg(m, key) + return i, true, err +} + +func optionalBoolArg(m map[string]any, key string) (bool, bool, error) { + v, ok := m[key] + if !ok { + return false, false, nil + } + b, ok := v.(bool) + if !ok { + return false, true, fmt.Errorf("%s must be a boolean when present", key) + } + return b, true, nil +} + +func optionalStringArg(m map[string]any, key string) (string, bool, error) { + v, ok := m[key] + if !ok { + return "", false, nil + } + s, ok := v.(string) + if !ok { + return "", true, fmt.Errorf("%s must be a string when present", key) + } + return s, true, nil +} + +func optionalFloat64Arg(m map[string]any, key string) (float64, bool, error) { + v, ok := m[key] + if !ok { + return 0, false, nil + } + n, ok := v.(json.Number) + if !ok { + return 0, true, fmt.Errorf("%s must be a number when present", key) + } + f, err := n.Float64() + if err != nil || math.IsNaN(f) || math.IsInf(f, 0) { + return 0, true, fmt.Errorf("%s must be a finite number", key) + } + return f, true, nil +} + +func optionalStringSliceArg(m map[string]any, key string) ([]string, bool, error) { + v, ok := m[key] + if !ok { + return nil, false, nil + } + items, ok := v.([]any) + if !ok { + return nil, true, fmt.Errorf("%s must be an array of strings when present", key) + } + out := make([]string, len(items)) + for i, item := range items { + s, ok := item.(string) + if !ok { + return nil, true, fmt.Errorf("%s[%d] must be a string", key, i) + } + out[i] = s + } + return out, true, nil +} + +func optionalInt64SliceArg(m map[string]any, key string) ([]int64, bool, error) { + v, ok := m[key] + if !ok { + return nil, false, nil + } + items, ok := v.([]any) + if !ok { + return nil, true, fmt.Errorf("%s must be an array of integers when present", key) + } + out := make([]int64, len(items)) + for i, item := range items { + n, ok := item.(json.Number) + if !ok { + return nil, true, fmt.Errorf("%s[%d] must be an integer", key, i) + } + value, err := n.Int64() + if err != nil { + return nil, true, fmt.Errorf("%s[%d] must be an in-range integer: %w", key, i, err) + } + out[i] = value + } + return out, true, nil +} + // coerceString extracts a string from a JSON any value. // Returns defaultVal if the key is missing, nil, or not a string. func coerceString(v any, defaultVal string) string { diff --git a/internal/mcp/coerce_test.go b/internal/mcp/coerce_test.go index c16497a3..b30d6673 100644 --- a/internal/mcp/coerce_test.go +++ b/internal/mcp/coerce_test.go @@ -3,6 +3,8 @@ package mcp import ( "encoding/json" "math" + "reflect" + "strings" "testing" ) @@ -32,6 +34,121 @@ func TestParseArgs(t *testing.T) { } } +func TestParseArgsPreservesExactJSONNumbers(t *testing.T) { + m, err := parseArgs(json.RawMessage(`{"id":9007199254740993,"max":9223372036854775807}`)) + if err != nil { + t.Fatal(err) + } + if got, ok := m["id"].(json.Number); !ok || got.String() != "9007199254740993" { + t.Fatalf("id lost exact JSON representation: %#v", m["id"]) + } + if got, ok := m["max"].(json.Number); !ok || got.String() != "9223372036854775807" { + t.Fatalf("max lost exact JSON representation: %#v", m["max"]) + } +} + +func TestStrictMutationArgumentsRejectLossyOrPartialValues(t *testing.T) { + valid, err := parseArgs(json.RawMessage(`{ + "id":9007199254740993, + "max":9223372036854775807, + "dry_run":false, + "tags":[], + "supersedes":[1,9007199254740993] + }`)) + if err != nil { + t.Fatal(err) + } + if got, err := requireInt64Arg(valid, "id"); err != nil || got != 9007199254740993 { + t.Fatalf("exact id: got %d err %v", got, err) + } + if got, err := requireInt64Arg(valid, "max"); err != nil || got != math.MaxInt64 { + t.Fatalf("max int64: got %d err %v", got, err) + } + if got, present, err := optionalBoolArg(valid, "dry_run"); err != nil || !present || got { + t.Fatalf("dry_run: got %v present %v err %v", got, present, err) + } + if got, present, err := optionalStringSliceArg(valid, "tags"); err != nil || !present || len(got) != 0 { + t.Fatalf("tags: got %#v present %v err %v", got, present, err) + } + if got, present, err := optionalInt64SliceArg(valid, "supersedes"); err != nil || !present || !reflect.DeepEqual(got, []int64{1, 9007199254740993}) { + t.Fatalf("supersedes: got %#v present %v err %v", got, present, err) + } + + for _, raw := range []string{ + `{}`, `{"id":null}`, `{"id":"1"}`, `{"id":1.5}`, + `{"id":1e3}`, `{"id":9223372036854775808}`, + } { + m, err := parseArgs(json.RawMessage(raw)) + if err != nil { + t.Fatal(err) + } + if _, err := requireInt64Arg(m, "id"); err == nil { + t.Fatalf("requireInt64Arg accepted %s", raw) + } + } + for _, tc := range []struct { + raw string + key string + }{ + {`{"dry_run":null}`, "dry_run"}, + {`{"dry_run":"false"}`, "dry_run"}, + {`{"tags":null}`, "tags"}, + {`{"tags":["safe",1]}`, "tags"}, + {`{"supersedes":null}`, "supersedes"}, + {`{"supersedes":[1,"2"]}`, "supersedes"}, + {`{"supersedes":[1,2.5]}`, "supersedes"}, + } { + m, err := parseArgs(json.RawMessage(tc.raw)) + if err != nil { + t.Fatal(err) + } + var strictErr error + switch tc.key { + case "dry_run": + _, _, strictErr = optionalBoolArg(m, tc.key) + case "tags": + _, _, strictErr = optionalStringSliceArg(m, tc.key) + case "supersedes": + _, _, strictErr = optionalInt64SliceArg(m, tc.key) + } + if strictErr == nil { + t.Fatalf("strict parser accepted %s", tc.raw) + } + } +} + +func TestParseArgsRejectsTrailingJSONValues(t *testing.T) { + for _, raw := range []string{ + `{"id":1}{"id":2}`, + `{"id":1} null`, + `{"id":1} 2`, + } { + if _, err := parseArgs(json.RawMessage(raw)); err == nil { + t.Fatalf("parseArgs accepted trailing JSON value: %s", raw) + } + } +} + +func FuzzRequireInt64ArgRejectsLossyRepresentations(f *testing.F) { + for _, seed := range []string{ + "0", "-0", "1", "-1", "9007199254740993", "9223372036854775807", + "9223372036854775808", "1.5", "1e3", "1E3", `"42"`, "null", "true", + } { + f.Add(seed) + } + + f.Fuzz(func(t *testing.T, raw string) { + m, err := parseArgs(json.RawMessage(`{"id":` + raw + `}`)) + if err != nil { + return + } + _, strictErr := requireInt64Arg(m, "id") + if strictErr == nil && strings.ContainsAny(raw, ".eE\"") { + t.Fatalf("strict integer parser accepted lossy representation %q", raw) + } + }) +} + func TestCoerceString(t *testing.T) { tests := []struct { name string diff --git a/internal/mcp/server.go b/internal/mcp/server.go index 6723efb7..96ee4225 100644 --- a/internal/mcp/server.go +++ b/internal/mcp/server.go @@ -825,19 +825,26 @@ func (s *Server) primaryTools() []Tool { InputSchema: map[string]any{ "type": "object", "properties": map[string]any{ - "action": map[string]any{"type": "string", "enum": []string{"create", "edit", "merge", "import"}, "default": "create", "description": "Action to perform"}, - "content": map[string]any{"type": "string", "description": "Observation content (for create)"}, - "title": map[string]any{"type": "string", "description": "Title (for create, edit)"}, - "id": map[string]any{"type": "number", "description": "Observation ID (for edit)"}, - "source_id": map[string]any{"type": "number", "description": "Source observation ID (for merge)"}, - "target_id": map[string]any{"type": "number", "description": "Target observation ID (for merge)"}, - "type": map[string]any{"type": "string", "enum": []string{"decision", "bugfix", "feature", "refactor", "discovery", "change", "guidance", "credential", "entity", "wiki", "pitfall", "operational", "timeline"}, "description": "Observation type (for create). Must be an observation type, not a memory_type value like insight/context/pattern."}, - "tags": map[string]any{"type": "string", "description": "Comma-separated tags (for create)"}, - "scope": map[string]any{"type": "string", "description": "Scope: project/global/agent (for create)"}, - "always_inject": map[string]any{"type": "boolean", "description": "Always inject in context (for create, edit)"}, - "narrative": map[string]any{"type": "string", "description": "Narrative text (for edit)"}, - "path": map[string]any{"type": "string", "description": "File path (for import)"}, - "project": map[string]any{"type": "string", "description": "Project name"}, + "action": map[string]any{"type": "string", "enum": []string{"create", "edit", "merge", "import"}, "default": "create", "description": "Action to perform"}, + "content": map[string]any{"type": "string", "description": "Observation content (for create)"}, + "title": map[string]any{"type": "string", "description": "Title (for create, edit)"}, + "id": map[string]any{"type": "integer", "description": "Observation ID (for edit)"}, + "source_id": map[string]any{"type": "integer", "description": "Source observation ID (for removed merge compatibility errors)"}, + "target_id": map[string]any{"type": "integer", "description": "Target observation ID (for removed merge compatibility errors)"}, + "type": map[string]any{"type": "string", "enum": []string{"decision", "bugfix", "feature", "refactor", "discovery", "change", "guidance", "credential", "entity", "wiki", "pitfall", "operational", "timeline"}, "description": "Observation type (for create). Must be an observation type, not a memory_type value like insight/context/pattern."}, + "tags": map[string]any{"type": "string", "description": "Comma-separated tags (for create)"}, + "scope": map[string]any{"type": "string", "description": "Scope: project/global/agent (for create)"}, + "always_inject": map[string]any{"type": "boolean", "description": "Always inject in context (for create, edit)"}, + "dry_run": map[string]any{"type": "boolean", "description": "Preview a create without durable writes"}, + "force": map[string]any{"type": "boolean", "description": "Bypass write-lint for a create when the vNext F gate is enabled"}, + "supersedes": map[string]any{"type": "array", "items": map[string]any{"type": "integer"}, "description": "Memory IDs replaced by a create"}, + "rejected": map[string]any{"type": "array", "items": map[string]any{"type": "string"}, "description": "Rejected alternatives for a create"}, + "importance": map[string]any{"type": "number", "minimum": 0, "maximum": 1, "description": "Explicit importance for a create"}, + "ttl_days": map[string]any{"type": "integer", "minimum": 1, "description": "TTL in days for a create"}, + "target_memory_id": map[string]any{"type": "integer", "minimum": 1, "description": "Write-lint phase-2 target memory ID"}, + "narrative": map[string]any{"type": "string", "description": "Narrative text (for edit)"}, + "path": map[string]any{"type": "string", "description": "File path (for import)"}, + "project": map[string]any{"type": "string", "description": "Project name"}, }, }, }, @@ -1549,11 +1556,11 @@ func (s *Server) handleToolsList(req *Request) *Response { "type": "object", "required": []string{"document_id", "content"}, "properties": map[string]any{ - "document_id": map[string]any{"type": "number", "description": "Document ID (from doc_create or doc_read response)"}, + "document_id": map[string]any{"type": "integer", "description": "Document ID (from doc_create or doc_read response)"}, "content": map[string]any{"type": "string", "description": "Comment text"}, "author": map[string]any{"type": "string", "default": "agent", "description": "Author identifier"}, - "line_start": map[string]any{"type": "number", "description": "Starting line number for line-anchored comment (optional)"}, - "line_end": map[string]any{"type": "number", "description": "Ending line number for line-anchored comment (optional)"}, + "line_start": map[string]any{"type": "integer", "minimum": 1, "description": "Starting line number for line-anchored comment (optional)"}, + "line_end": map[string]any{"type": "integer", "minimum": 1, "description": "Ending line number for line-anchored comment (optional)"}, }, }, }, diff --git a/internal/mcp/structured_input_validation_test.go b/internal/mcp/structured_input_validation_test.go new file mode 100644 index 00000000..2aaeb1d0 --- /dev/null +++ b/internal/mcp/structured_input_validation_test.go @@ -0,0 +1,293 @@ +package mcp + +import ( + "context" + "encoding/json" + "fmt" + "os" + "sync" + "testing" + "time" + + "github.com/stretchr/testify/require" + "github.com/thebtf/engram/internal/auth" + gormdb "github.com/thebtf/engram/internal/db/gorm" + "github.com/thebtf/engram/pkg/models" + "gorm.io/gorm/logger" +) + +type structuredMutationHarness struct { + server *Server + store *gormdb.Store + rules *fakeRuleGovernanceStore + significance *fakeMemorySignificanceUpdater + editor *mockMemoryEditor + ctx context.Context + marker string + documentID int64 + suppressID int64 +} + +func newStructuredMutationHarness(t *testing.T) *structuredMutationHarness { + t.Helper() + dsn := os.Getenv("DATABASE_DSN") + if dsn == "" { + t.Skip("DATABASE_DSN not set; structured mutation durable-delta proof requires PostgreSQL") + } + + t.Setenv("ENGRAM_VNEXT_F_ENABLED", "true") + t.Setenv("ENGRAM_V7_PLUG_ENABLED", "true") + t.Setenv("ENGRAM_V7_S6_OUTCOME", "true") + store, err := gormdb.NewStore(gormdb.Config{DSN: dsn, MaxConns: 4, LogLevel: logger.Silent}) + require.NoError(t, err) + + marker := fmt.Sprintf("mb1-strict-%d", time.Now().UnixNano()) + auditStore := gormdb.NewAuditStore(store.DB) + versionedStore := gormdb.NewVersionedDocumentStore(store) + documentID, err := versionedStore.Create( + context.Background(), marker+".md", marker, "fixture", "markdown", "{}", marker, + ) + require.NoError(t, err) + + rules := &fakeRuleGovernanceStore{} + significance := &fakeMemorySignificanceUpdater{} + editor := newMockMemoryEditor() + editor.seed(&models.Memory{ID: 42, Project: marker, Content: "before"}) + memoryStore := gormdb.NewMemoryStore(store) + suppressFixture, err := memoryStore.Create(context.Background(), &models.Memory{ + Project: marker, Content: "suppress-fixture-" + marker, SourceAgent: "mb1-strict", + }) + require.NoError(t, err) + server := NewServer(ServerOptions{Version: "mb1-structured-input"}) + server.SetMemoryStore(memoryStore) + server.SetAuditStore(auditStore) + server.SetCandidateStore(gormdb.NewCandidateStore(store.DB, auditStore)) + server.SetSnapshotStore(gormdb.NewSnapshotStore(store.DB)) + server.SetVersionedDocumentStore(versionedStore) + server.SetSettingsStore(gormdb.NewSettingsStore(store)) + server.SetRuleGovernanceStore(rules) + server.setTestMemoryEditor(editor) + server.setTestMemorySignificanceUpdater(significance) + + ctx := auth.WithIdentity(context.Background(), auth.Admin()) + ctx = ContextWithProject(ctx, marker) + ctx = ContextWithSession(ctx, marker) + + t.Cleanup(func() { + _ = store.DB.Exec("DELETE FROM versioned_document_comments WHERE document_id = ?", documentID).Error + _ = store.DB.Exec("DELETE FROM versioned_documents WHERE id = ?", documentID).Error + _ = store.DB.Unscoped().Exec("DELETE FROM memories WHERE project = ? OR content LIKE ?", marker, marker+"%").Error + _ = store.DB.Exec("DELETE FROM audit_log WHERE actor = ? OR source_session_id = ?", marker, marker).Error + _ = store.DB.Exec("DELETE FROM bulk_op_snapshots WHERE actor = ? OR source_session_id = ?", marker, marker).Error + _ = store.DB.Exec("DELETE FROM model_settings WHERE key LIKE ?", marker+"%").Error + require.NoError(t, store.Close()) + }) + + return &structuredMutationHarness{ + server: server, + store: store, + rules: rules, + significance: significance, + editor: editor, + ctx: ctx, + marker: marker, + documentID: documentID, + suppressID: suppressFixture.ID, + } +} + +func (h *structuredMutationHarness) requireZeroDurableDelta(t *testing.T) { + t.Helper() + checks := []struct { + name string + query string + args []any + }{ + {name: "memories", query: "SELECT count(*) FROM memories WHERE content LIKE ?", args: []any{h.marker + "%"}}, + {name: "audit", query: "SELECT count(*) FROM audit_log WHERE actor = ? OR source_session_id = ?", args: []any{h.marker, h.marker}}, + {name: "snapshots", query: "SELECT count(*) FROM bulk_op_snapshots WHERE actor = ? OR source_session_id = ?", args: []any{h.marker, h.marker}}, + {name: "settings", query: "SELECT count(*) FROM model_settings WHERE key LIKE ?", args: []any{h.marker + "%"}}, + {name: "comments", query: "SELECT count(*) FROM versioned_document_comments WHERE document_id = ?", args: []any{h.documentID}}, + } + for _, check := range checks { + var count int64 + require.NoError(t, h.store.DB.Raw(check.query, check.args...).Scan(&count).Error, check.name) + require.Zero(t, count, "%s changed after malformed mutation input", check.name) + } + var activeSuppressFixture int64 + require.NoError(t, h.store.DB.Raw( + "SELECT count(*) FROM memories WHERE id = ? AND deleted_at IS NULL", h.suppressID, + ).Scan(&activeSuppressFixture).Error) + require.EqualValues(t, 1, activeSuppressFixture, "malformed suppress selector deleted the durable row") + require.Zero(t, h.rules.transitionID) + require.Empty(t, h.rules.pinSnapshotID) + require.Empty(t, h.rules.rollbackID) + require.Empty(t, h.significance.calls) + require.Zero(t, h.editor.getCalls) + require.Zero(t, h.editor.updates) +} + +func requireMutationSchemaType(t *testing.T, tools []Tool, toolName, property, wantType string) { + t.Helper() + for _, tool := range tools { + if tool.Name != toolName { + continue + } + properties, ok := tool.InputSchema["properties"].(map[string]any) + require.True(t, ok, "%s schema properties", toolName) + field, ok := properties[property].(map[string]any) + require.True(t, ok, "%s.%s schema", toolName, property) + require.Equal(t, wantType, field["type"], "%s.%s handler/schema type drift", toolName, property) + return + } + t.Fatalf("mutation tool %s was not advertised by the fully wired server", toolName) +} + +func TestStructuredMutationSchemasMatchStrictHandlers(t *testing.T) { + h := newStructuredMutationHarness(t) + tools := h.server.ListTools() + for _, expected := range []struct { + tool string + property string + typeName string + }{ + {tool: "promote_candidate", property: "id", typeName: "integer"}, + {tool: "promote_candidate", property: "dry_run", typeName: "boolean"}, + {tool: "store_memory", property: "tags", typeName: "array"}, + {tool: "store_memory", property: "supersedes", typeName: "array"}, + {tool: "store_memory", property: "dry_run", typeName: "boolean"}, + {tool: "store", property: "id", typeName: "integer"}, + {tool: "store", property: "supersedes", typeName: "array"}, + {tool: "store", property: "dry_run", typeName: "boolean"}, + {tool: "settings", property: "encrypt", typeName: "boolean"}, + {tool: "doc_comment", property: "document_id", typeName: "integer"}, + {tool: "doc_comment", property: "line_start", typeName: "integer"}, + {tool: "doc_comment", property: "line_end", typeName: "integer"}, + {tool: "rule_governance_transition", property: "rule_version_id", typeName: "integer"}, + {tool: "rule_governance_pin_snapshot", property: "pinned", typeName: "boolean"}, + {tool: "rate_memory_significance", property: "id", typeName: "integer"}, + } { + requireMutationSchemaType(t, tools, expected.tool, expected.property, expected.typeName) + } +} + +func TestStructuredMutationInputsRejectWithoutDurableDelta(t *testing.T) { + h := newStructuredMutationHarness(t) + cases := []struct { + name string + call func() (string, error) + }{ + { + name: "promote candidate string dry run", + call: func() (string, error) { + return h.server.handlePromoteCandidate(h.ctx, json.RawMessage(`{"id":9007199254740993,"dry_run":"false"}`)) + }, + }, + { + name: "store memory string dry run", + call: func() (string, error) { + return h.server.handleStoreMemory(h.ctx, json.RawMessage(fmt.Sprintf(`{"content":%q,"project":%q,"dry_run":"false"}`, h.marker+"-dry-run", h.marker))) + }, + }, + { + name: "store alias mixed tags", + call: func() (string, error) { + return h.server.handleStoreConsolidated(h.ctx, json.RawMessage(fmt.Sprintf(`{"action":"create","content":%q,"project":%q,"tags":["safe",7]}`, h.marker+"-tags", h.marker))) + }, + }, + { + name: "store memory mixed supersedes", + call: func() (string, error) { + return h.server.handleStoreMemory(h.ctx, json.RawMessage(fmt.Sprintf(`{"content":%q,"project":%q,"supersedes":[1,"2"]}`, h.marker+"-supersedes", h.marker))) + }, + }, + { + name: "edit alias mixed tags", + call: func() (string, error) { + return h.server.handleStoreConsolidated(h.ctx, json.RawMessage(`{"action":"edit","id":42,"narrative":"after","tags":["safe",7]}`)) + }, + }, + { + name: "suppress numeric string selector", + call: func() (string, error) { + return h.server.handleSuppressMemory(h.ctx, json.RawMessage(fmt.Sprintf(`{"id":"%d"}`, h.suppressID))) + }, + }, + { + name: "settings string encrypt", + call: func() (string, error) { + return h.server.handleSettingsConsolidated(h.ctx, json.RawMessage(fmt.Sprintf(`{"action":"set","key":%q,"value":"secret","encrypt":"false"}`, h.marker+".setting"))) + }, + }, + { + name: "document comment numeric string line", + call: func() (string, error) { + return h.server.handleDocComment(h.ctx, json.RawMessage(fmt.Sprintf(`{"document_id":%d,"content":%q,"author":%q,"line_start":"1"}`, h.documentID, h.marker+"-comment", h.marker))) + }, + }, + { + name: "rule transition fractional selector", + call: func() (string, error) { + return h.server.handleRuleGovernanceTransition(h.ctx, json.RawMessage(`{"rule_version_id":7.5,"to_state":"active_project","actor":"operator","actor_kind":"operator","reason":"strict","evidence_handles":[]}`)) + }, + }, + { + name: "rule pin string boolean", + call: func() (string, error) { + return h.server.handleRuleGovernancePinSnapshot(h.ctx, json.RawMessage(`{"snapshot_id":"rg-snap","pinned":"false"}`)) + }, + }, + { + name: "significance numeric string selector", + call: func() (string, error) { + return h.server.handleRateMemorySignificance(h.ctx, json.RawMessage(`{"id":"42","rating":"useful"}`)) + }, + }, + } + + for _, tc := range cases { + t.Run(tc.name, func(t *testing.T) { + out, err := tc.call() + require.Error(t, err) + require.Empty(t, out) + }) + } + h.requireZeroDurableDelta(t) +} + +func TestStructuredMutationInputsConcurrentRejectionHasZeroDurableDelta(t *testing.T) { + h := newStructuredMutationHarness(t) + malformed := []func() (string, error){ + func() (string, error) { + return h.server.handleStoreMemory(h.ctx, json.RawMessage(fmt.Sprintf(`{"content":%q,"project":%q,"tags":["safe",7]}`, h.marker+"-concurrent-memory", h.marker))) + }, + func() (string, error) { + return h.server.handleSettingsConsolidated(h.ctx, json.RawMessage(fmt.Sprintf(`{"action":"set","key":%q,"value":"secret","encrypt":"false"}`, h.marker+".concurrent"))) + }, + func() (string, error) { + return h.server.handleDocComment(h.ctx, json.RawMessage(fmt.Sprintf(`{"document_id":%d,"content":%q,"author":%q,"line_end":1.5}`, h.documentID, h.marker+"-concurrent-comment", h.marker))) + }, + } + + const repeats = 12 + errCh := make(chan error, repeats*len(malformed)) + var wg sync.WaitGroup + for i := 0; i < repeats; i++ { + for _, call := range malformed { + wg.Add(1) + go func(call func() (string, error)) { + defer wg.Done() + out, err := call() + if err == nil { + errCh <- fmt.Errorf("malformed concurrent mutation returned success: %s", out) + } + }(call) + } + } + wg.Wait() + close(errCh) + for err := range errCh { + require.NoError(t, err) + } + h.requireZeroDurableDelta(t) +} diff --git a/internal/mcp/tools_candidates.go b/internal/mcp/tools_candidates.go index 7e7470fb..c20ea743 100644 --- a/internal/mcp/tools_candidates.go +++ b/internal/mcp/tools_candidates.go @@ -120,6 +120,10 @@ func candidateTools() []Tool { "type": "integer", "description": "REQUIRED. Candidate ID to promote.", }, + "dry_run": map[string]any{ + "type": "boolean", + "description": "When true, return a preview without mutating candidate, memory, snapshot, or audit state.", + }, }, }, }, @@ -244,15 +248,21 @@ func (s *Server) handlePromoteCandidate(ctx context.Context, args json.RawMessag if err != nil { return "", err } - id := coerceInt64(m["id"], 0) + id, err := requireInt64Arg(m, "id") + if err != nil { + return "", fmt.Errorf("promote_candidate: %w", err) + } if id <= 0 { - return "", fmt.Errorf("promote_candidate: id is required") + return "", fmt.Errorf("promote_candidate: id must be > 0") } // T044 dry-run early return (FR-F6.b): before any DB access. // When candidateStore is nil, dry_run returns a preview with the id only // (TG5-absent nil-safe seam — no live candidate data available). - dryRun := coerceBool(m["dry_run"], false) + dryRun, _, err := optionalBoolArg(m, "dry_run") + if err != nil { + return "", fmt.Errorf("promote_candidate: %w", err) + } if dryRun { preview := map[string]any{ "dry_run": true, @@ -353,11 +363,17 @@ func (s *Server) handleRejectCandidate(ctx context.Context, args json.RawMessage if err != nil { return "", err } - id := coerceInt64(m["id"], 0) + id, err := requireInt64Arg(m, "id") + if err != nil { + return "", fmt.Errorf("reject_candidate: %w", err) + } if id <= 0 { - return "", fmt.Errorf("reject_candidate: id is required") + return "", fmt.Errorf("reject_candidate: id must be > 0") + } + reason, _, err := optionalStringArg(m, "reason") + if err != nil { + return "", fmt.Errorf("reject_candidate: %w", err) } - reason := coerceString(m["reason"], "") candidate, err := s.candidateStore.Get(ctx, id) if err != nil { return "", fmt.Errorf("reject_candidate get %d: %w", id, err) @@ -407,9 +423,12 @@ func (s *Server) handleSupersedeCandidate(ctx context.Context, args json.RawMess if err != nil { return "", err } - id := coerceInt64(m["id"], 0) + id, err := requireInt64Arg(m, "id") + if err != nil { + return "", fmt.Errorf("supersede_candidate: %w", err) + } if id <= 0 { - return "", fmt.Errorf("supersede_candidate: id is required") + return "", fmt.Errorf("supersede_candidate: id must be > 0") } candidate, err := s.candidateStore.Get(ctx, id) if err != nil { diff --git a/internal/mcp/tools_candidates_test.go b/internal/mcp/tools_candidates_test.go index 0784d7ce..361263ec 100644 --- a/internal/mcp/tools_candidates_test.go +++ b/internal/mcp/tools_candidates_test.go @@ -104,6 +104,85 @@ func TestHandleGetCandidate_EmptyIDReturnsError(t *testing.T) { "error must mention 'id is required', got: %v", callErr) } +func TestPromoteCandidate_StrictSelectorAndDryRunTypes(t *testing.T) { + t.Setenv("ENGRAM_VNEXT_F_ENABLED", "true") + + for _, tc := range []struct { + name string + raw string + }{ + {name: "missing id", raw: `{"dry_run":true}`}, + {name: "null id", raw: `{"id":null,"dry_run":true}`}, + {name: "numeric string id", raw: `{"id":"42","dry_run":true}`}, + {name: "fraction id", raw: `{"id":42.5,"dry_run":true}`}, + {name: "exponent id", raw: `{"id":1e3,"dry_run":true}`}, + {name: "overflow id", raw: `{"id":9223372036854775808,"dry_run":true}`}, + {name: "null dry run", raw: `{"id":42,"dry_run":null}`}, + {name: "string dry run", raw: `{"id":42,"dry_run":"false"}`}, + {name: "numeric dry run", raw: `{"id":42,"dry_run":1}`}, + } { + t.Run(tc.name, func(t *testing.T) { + s := NewServer(ServerOptions{Version: "strict-candidate"}) + + out, err := s.handlePromoteCandidate(context.Background(), json.RawMessage(tc.raw)) + + require.Error(t, err) + require.Empty(t, out) + }) + } +} + +func TestPromoteCandidate_DryRunPreservesExactLargeInteger(t *testing.T) { + t.Setenv("ENGRAM_VNEXT_F_ENABLED", "true") + s := NewServer(ServerOptions{Version: "strict-candidate"}) + + out, err := s.handlePromoteCandidate(context.Background(), json.RawMessage(`{"id":9007199254740993,"dry_run":true}`)) + + require.NoError(t, err) + require.Contains(t, out, `"candidate_id":9007199254740993`) +} + +func TestCandidateReviewMutationsRejectLossySelectorsBeforeStore(t *testing.T) { + t.Setenv("ENGRAM_VNEXT_F_ENABLED", "true") + for _, tc := range []struct { + name string + call func(*Server) (string, error) + }{ + { + name: "reject fraction id", + call: func(s *Server) (string, error) { + return s.handleRejectCandidate(context.Background(), json.RawMessage(`{"id":7.5,"reason":"bad"}`)) + }, + }, + { + name: "reject wrong reason type", + call: func(s *Server) (string, error) { + return s.handleRejectCandidate(context.Background(), json.RawMessage(`{"id":7,"reason":true}`)) + }, + }, + { + name: "supersede numeric string id", + call: func(s *Server) (string, error) { + return s.handleSupersedeCandidate(context.Background(), json.RawMessage(`{"id":"7"}`)) + }, + }, + { + name: "supersede exponent id", + call: func(s *Server) (string, error) { + return s.handleSupersedeCandidate(context.Background(), json.RawMessage(`{"id":1e3}`)) + }, + }, + } { + t.Run(tc.name, func(t *testing.T) { + s := NewServer(ServerOptions{Version: "strict-candidate"}) + out, err := tc.call(s) + require.Error(t, err) + require.Empty(t, out) + require.NotContains(t, err.Error(), "candidateStore to be wired") + }) + } +} + func TestCandidateTools_ExposeCR008ReviewLoopContracts(t *testing.T) { names := map[string]bool{} for _, tool := range candidateTools() { diff --git a/internal/mcp/tools_documents_v2.go b/internal/mcp/tools_documents_v2.go index 2ac25347..b38e4433 100644 --- a/internal/mcp/tools_documents_v2.go +++ b/internal/mcp/tools_documents_v2.go @@ -5,6 +5,7 @@ import ( "encoding/json" "errors" "fmt" + "math" "gorm.io/gorm" @@ -21,6 +22,11 @@ func (s *Server) handleDocCreate(ctx context.Context, args json.RawMessage) (str if err != nil { return "", err } + for _, key := range []string{"path", "project", "content", "doc_type", "metadata", "author"} { + if _, _, fieldErr := optionalStringArg(m, key); fieldErr != nil { + return "", fmt.Errorf("doc_create: %w", fieldErr) + } + } path := coerceString(m["path"], "") project := coerceString(m["project"], "") @@ -239,28 +245,46 @@ func (s *Server) handleDocComment(ctx context.Context, args json.RawMessage) (st return "", err } - documentID := coerceInt64(m["document_id"], 0) + documentID, err := requireInt64Arg(m, "document_id") + if err != nil { + return "", fmt.Errorf("doc_comment: %w", err) + } if documentID <= 0 { return "", fmt.Errorf("document_id is required and must be positive") } - author := coerceString(m["author"], "agent") - content := coerceString(m["content"], "") + author, authorPresent, err := optionalStringArg(m, "author") + if err != nil { + return "", fmt.Errorf("doc_comment: %w", err) + } + if !authorPresent { + author = "agent" + } + content, _, err := optionalStringArg(m, "content") + if err != nil { + return "", fmt.Errorf("doc_comment: %w", err) + } if content == "" { return "", fmt.Errorf("content is required") } var lineStart, lineEnd *int - if v, ok := m["line_start"]; ok && v != nil { - ls := int(coerceInt(m["line_start"], 0)) - if ls > 0 { - lineStart = &ls + if value, present, parseErr := optionalInt64Arg(m, "line_start"); parseErr != nil { + return "", fmt.Errorf("doc_comment: %w", parseErr) + } else if present { + if value <= 0 || value > int64(math.MaxInt) { + return "", fmt.Errorf("doc_comment: line_start must be an in-range positive integer") } - } - if v, ok := m["line_end"]; ok && v != nil { - le := int(coerceInt(m["line_end"], 0)) - if le > 0 { - lineEnd = &le + ls := int(value) + lineStart = &ls + } + if value, present, parseErr := optionalInt64Arg(m, "line_end"); parseErr != nil { + return "", fmt.Errorf("doc_comment: %w", parseErr) + } else if present { + if value <= 0 || value > int64(math.MaxInt) { + return "", fmt.Errorf("doc_comment: line_end must be an in-range positive integer") } + le := int(value) + lineEnd = &le } commentID, err := s.versionedDocumentStore.AddComment(ctx, documentID, author, content, lineStart, lineEnd) diff --git a/internal/mcp/tools_memory.go b/internal/mcp/tools_memory.go index 18ba2c5e..d39351ec 100644 --- a/internal/mcp/tools_memory.go +++ b/internal/mcp/tools_memory.go @@ -5,6 +5,7 @@ import ( "encoding/json" "errors" "fmt" + "math" "os" "strings" "unicode/utf8" @@ -362,6 +363,62 @@ func (s *Server) handleStoreMemory(ctx context.Context, args json.RawMessage) (s if err != nil { return "", err } + for _, key := range []string{ + "content", "title", "type", "scope", "privacy_scope", "session_id", + "agent_visibility", "domain", "project", "agent_source", "resolution_token", "option", + } { + if _, _, fieldErr := optionalStringArg(m, key); fieldErr != nil { + return "", fmt.Errorf("store_memory: %w", fieldErr) + } + } + inputTags, _, err := optionalStringSliceArg(m, "tags") + if err != nil { + return "", fmt.Errorf("store_memory: %w", err) + } + inputRejected, _, err := optionalStringSliceArg(m, "rejected") + if err != nil { + return "", fmt.Errorf("store_memory: %w", err) + } + inputSupersedes, supersedesPresent, err := optionalInt64SliceArg(m, "supersedes") + if err != nil { + return "", fmt.Errorf("store_memory: %w", err) + } + if supersedesPresent { + for i, id := range inputSupersedes { + if id <= 0 { + return "", fmt.Errorf("store_memory: supersedes[%d] must be > 0", i) + } + } + } + alwaysInject, _, err := optionalBoolArg(m, "always_inject") + if err != nil { + return "", fmt.Errorf("store_memory: %w", err) + } + dryRun, _, err := optionalBoolArg(m, "dry_run") + if err != nil { + return "", fmt.Errorf("store_memory: %w", err) + } + if _, _, err = optionalBoolArg(m, "force"); err != nil { + return "", fmt.Errorf("store_memory: %w", err) + } + importance, importancePresent, err := optionalFloat64Arg(m, "importance") + if err != nil { + return "", fmt.Errorf("store_memory: %w", err) + } + inputTTLDays, ttlPresent, err := optionalInt64Arg(m, "ttl_days") + if err != nil { + return "", fmt.Errorf("store_memory: %w", err) + } + if ttlPresent && (inputTTLDays <= 0 || inputTTLDays > int64(math.MaxInt)) { + return "", fmt.Errorf("store_memory: ttl_days must be an in-range positive integer") + } + targetMemoryID, targetPresent, err := optionalInt64Arg(m, "target_memory_id") + if err != nil { + return "", fmt.Errorf("store_memory: %w", err) + } + if targetPresent && targetMemoryID <= 0 { + return "", fmt.Errorf("store_memory: target_memory_id must be > 0") + } var params struct { Tags []string @@ -382,9 +439,9 @@ func (s *Server) handleStoreMemory(ctx context.Context, args json.RawMessage) (s AlwaysInject bool DryRun bool // T044 — FR-F6.b dry-run preview } - params.Tags = coerceStringSlice(m["tags"]) - params.Rejected = coerceStringSlice(m["rejected"]) - params.Supersedes = coerceInt64Slice(m["supersedes"]) + params.Tags = inputTags + params.Rejected = inputRejected + params.Supersedes = inputSupersedes params.Content = coerceString(m["content"], "") params.Title = coerceString(m["title"], "") params.Type = coerceString(m["type"], "") @@ -402,17 +459,14 @@ func (s *Server) handleStoreMemory(ctx context.Context, args json.RawMessage) (s } else { params.Project = coerceString(m["project"], "") } - params.AlwaysInject = coerceBool(m["always_inject"], false) - params.DryRun = coerceBool(m["dry_run"], false) - if v, ok := m["importance"]; ok && v != nil { - f := coerceFloat64(v, 0) - params.Importance = &f + params.AlwaysInject = alwaysInject + params.DryRun = dryRun + if importancePresent { + params.Importance = &importance } - if v, ok := m["ttl_days"]; ok && v != nil { - d := coerceInt(v, 0) - if d > 0 { - params.TtlDays = &d - } + if ttlPresent { + d := int(inputTTLDays) + params.TtlDays = &d } if params.Content == "" { return "", fmt.Errorf("content is required for store_memory") @@ -1119,12 +1173,21 @@ func (s *Server) handleEditMemory(ctx context.Context, args json.RawMessage) (st return "", err } - id := coerceInt64(m["id"], 0) - if id == 0 { + id, err := requireInt64Arg(m, "id") + if err != nil { + return "", fmt.Errorf("edit_memory: %w", err) + } + if id <= 0 { return "", fmt.Errorf("id required for store_memory action=edit") } - narrative := coerceString(m["narrative"], "") - tags := coerceStringSlice(m["tags"]) + narrative, _, err := optionalStringArg(m, "narrative") + if err != nil { + return "", fmt.Errorf("edit_memory: %w", err) + } + tags, _, err := optionalStringSliceArg(m, "tags") + if err != nil { + return "", fmt.Errorf("edit_memory: %w", err) + } // Read before-state. before, err := ms.Get(ctx, id) @@ -2255,11 +2318,19 @@ func (s *Server) handleRateMemory(ctx context.Context, args json.RawMessage) (st return "", err } - id := coerceInt64(m["id"], 0) - rating := coerceString(m["rating"], "") + id, err := requireInt64Arg(m, "id") + if err != nil { + return "", err + } + rating, _, err := optionalStringArg(m, "rating") + if err != nil { + return "", err + } if rating == "" { - if usefulRaw, ok := m["useful"]; ok && usefulRaw != nil { - if coerceBool(usefulRaw, false) { + if useful, present, parseErr := optionalBoolArg(m, "useful"); parseErr != nil { + return "", parseErr + } else if present { + if useful { rating = "useful" } else { rating = "not_useful" @@ -2288,8 +2359,11 @@ func (s *Server) handleSuppressMemory(ctx context.Context, args json.RawMessage) return "", err } - id := coerceInt64(m["id"], 0) - if id == 0 { + id, err := requireInt64Arg(m, "id") + if err != nil { + return "", fmt.Errorf("suppress_memory: %w", err) + } + if id <= 0 { return "", fmt.Errorf("id required") } diff --git a/internal/mcp/tools_memory_edit_test.go b/internal/mcp/tools_memory_edit_test.go index ecc69d96..6635a223 100644 --- a/internal/mcp/tools_memory_edit_test.go +++ b/internal/mcp/tools_memory_edit_test.go @@ -44,6 +44,8 @@ type mockMemoryEditor struct { stored map[int64]*models.Memory // in-memory records updateFn func(m *models.Memory) (*models.Memory, error) getFn func(id int64) (*models.Memory, error) + getCalls int + updates int } func newMockMemoryEditor() *mockMemoryEditor { @@ -55,6 +57,7 @@ func (m *mockMemoryEditor) seed(mem *models.Memory) { } func (m *mockMemoryEditor) Get(_ context.Context, id int64) (*models.Memory, error) { + m.getCalls++ if m.getFn != nil { return m.getFn(id) } @@ -68,6 +71,7 @@ func (m *mockMemoryEditor) Get(_ context.Context, id int64) (*models.Memory, err } func (m *mockMemoryEditor) Update(_ context.Context, mem *models.Memory) (*models.Memory, error) { + m.updates++ if m.updateFn != nil { return m.updateFn(mem) } @@ -76,6 +80,54 @@ func (m *mockMemoryEditor) Update(_ context.Context, mem *models.Memory) (*model return &cp, nil } +func TestEditMemory_StrictStructuredInputFailsBeforeReadOrWrite(t *testing.T) { + t.Setenv("ENGRAM_ENFORCE_SOURCE_PROJECT", "false") + reloadConfig(t) + + for _, tc := range []struct { + name string + raw string + }{ + {name: "missing id", raw: `{"narrative":"new"}`}, + {name: "null id", raw: `{"id":null,"narrative":"new"}`}, + {name: "numeric string id", raw: `{"id":"42","narrative":"new"}`}, + {name: "fraction id", raw: `{"id":42.5,"narrative":"new"}`}, + {name: "exponent id", raw: `{"id":1e3,"narrative":"new"}`}, + {name: "overflow id", raw: `{"id":9223372036854775808,"narrative":"new"}`}, + {name: "wrong narrative type", raw: `{"id":42,"narrative":7}`}, + {name: "null tags", raw: `{"id":42,"narrative":"new","tags":null}`}, + {name: "mixed tags", raw: `{"id":42,"narrative":"new","tags":["safe",7]}`}, + } { + t.Run(tc.name, func(t *testing.T) { + mem := newMockMemoryEditor() + srv := newEditServer(t, mem) + + _, err := srv.handleEditMemory(context.Background(), json.RawMessage(tc.raw)) + + require.Error(t, err) + assert.Zero(t, mem.getCalls, "malformed edit input must fail before the durable read selector") + assert.Zero(t, mem.updates, "malformed edit input must fail before mutation") + }) + } +} + +func TestEditMemory_PreservesExactLargeIntegerSelector(t *testing.T) { + t.Setenv("ENGRAM_ENFORCE_SOURCE_PROJECT", "false") + reloadConfig(t) + + const id int64 = 9007199254740993 + mem := newMockMemoryEditor() + mem.seed(&models.Memory{ID: id, Project: "exact-id", Content: "before"}) + srv := newEditServer(t, mem) + + _, err := srv.handleEditMemory(context.Background(), json.RawMessage(`{"id":9007199254740993,"narrative":"after","tags":[]}`)) + + require.NoError(t, err) + require.Equal(t, 1, mem.getCalls) + require.Equal(t, 1, mem.updates) + require.Equal(t, "after", mem.stored[id].Content) +} + // --------------------------------------------------------------------------- // Helpers // --------------------------------------------------------------------------- diff --git a/internal/mcp/tools_memory_significance.go b/internal/mcp/tools_memory_significance.go index f055f273..9199f35f 100644 --- a/internal/mcp/tools_memory_significance.go +++ b/internal/mcp/tools_memory_significance.go @@ -85,12 +85,21 @@ func (s *Server) handleRateMemorySignificance(ctx context.Context, args json.Raw return "", err } - id := coerceInt64(m["id"], 0) + id, err := requireInt64Arg(m, "id") + if err != nil { + return "", err + } if id <= 0 { return "", fmt.Errorf("id required and must be > 0") } - rating := coerceString(m["rating"], "") + rating, present, err := optionalStringArg(m, "rating") + if err != nil { + return "", err + } + if !present { + return "", fmt.Errorf("rating is required") + } if rating != s6.RatingUseful && rating != s6.RatingNotUseful { return "", fmt.Errorf("rating must be '%s' or '%s'", s6.RatingUseful, s6.RatingNotUseful) } diff --git a/internal/mcp/tools_memory_significance_test.go b/internal/mcp/tools_memory_significance_test.go index b5339ca2..096ffc0d 100644 --- a/internal/mcp/tools_memory_significance_test.go +++ b/internal/mcp/tools_memory_significance_test.go @@ -279,6 +279,56 @@ func TestRateMemorySignificanceRejectsInvalidIDWithoutWrite(t *testing.T) { } } +func TestRateMemorySignificanceRejectsLossySelectorsWithoutWrite(t *testing.T) { + for _, tc := range []struct { + name string + raw string + }{ + {name: "null", raw: `{"id":null,"rating":"useful"}`}, + {name: "numeric string", raw: `{"id":"42","rating":"useful"}`}, + {name: "fraction", raw: `{"id":42.5,"rating":"useful"}`}, + {name: "exponent", raw: `{"id":1e3,"rating":"useful"}`}, + {name: "overflow", raw: `{"id":9223372036854775808,"rating":"useful"}`}, + {name: "wrong rating type", raw: `{"id":42,"rating":true}`}, + } { + t.Run(tc.name, func(t *testing.T) { + setS6OutcomeFlags(t, true, true) + updater := &fakeMemorySignificanceUpdater{} + srv := NewServer(ServerOptions{Version: "strict-significance"}) + srv.setTestMemorySignificanceUpdater(updater) + + _, err := srv.callTool(context.Background(), "rate_memory_significance", json.RawMessage(tc.raw)) + + require.Error(t, err) + assert.Empty(t, updater.calls) + }) + } +} + +func TestRateMemorySignificancePreservesExactLargeIntegerSelectors(t *testing.T) { + for _, tc := range []struct { + name string + raw string + want int64 + }{ + {name: "above float exactness", raw: `{"id":9007199254740993,"rating":"useful"}`, want: 9007199254740993}, + {name: "max int64", raw: `{"id":9223372036854775807,"rating":"not_useful"}`, want: 9223372036854775807}, + } { + t.Run(tc.name, func(t *testing.T) { + setS6OutcomeFlags(t, true, true) + updater := &fakeMemorySignificanceUpdater{} + srv := NewServer(ServerOptions{Version: "strict-significance"}) + srv.setTestMemorySignificanceUpdater(updater) + + _, err := srv.callTool(context.Background(), "rate_memory_significance", json.RawMessage(tc.raw)) + + require.NoError(t, err) + require.Len(t, updater.calls, 1) + assert.Equal(t, tc.want, updater.calls[0].id) + }) + } +} + func TestRateMemorySignificanceRejectsInvalidRatingWithoutWrite(t *testing.T) { for _, tc := range []struct { name string diff --git a/internal/mcp/tools_rule_governance.go b/internal/mcp/tools_rule_governance.go index b4ae7e05..a9a99c7f 100644 --- a/internal/mcp/tools_rule_governance.go +++ b/internal/mcp/tools_rule_governance.go @@ -350,9 +350,19 @@ func (s *Server) handleRuleGovernanceTransition(ctx context.Context, args json.R if err != nil { return "", err } - versionID := coerceInt64(m["rule_version_id"], 0) - to := models.RuleVersionState(strings.TrimSpace(coerceString(m["to_state"], ""))) - req := parseRuleGovernanceTransitionRequest(m) + versionID, err := requireInt64Arg(m, "rule_version_id") + if err != nil || versionID <= 0 { + return "", fmt.Errorf("rule_governance_transition: rule_version_id must be a positive integer") + } + toValue, _, err := optionalStringArg(m, "to_state") + if err != nil { + return "", fmt.Errorf("rule_governance_transition: %w", err) + } + to := models.RuleVersionState(strings.TrimSpace(toValue)) + req, err := parseRuleGovernanceTransitionRequest(m) + if err != nil { + return "", fmt.Errorf("rule_governance_transition: %w", err) + } version, err := writeStore.TransitionRuleVersion(ctx, versionID, to, req) if err != nil { return "", fmt.Errorf("rule_governance_transition: %w", err) @@ -385,10 +395,16 @@ func (s *Server) handleRuleGovernancePinSnapshot(ctx context.Context, args json. if err != nil { return "", err } - snapshotID := strings.TrimSpace(coerceString(m["snapshot_id"], "")) + snapshotValue, _, err := optionalStringArg(m, "snapshot_id") + if err != nil { + return "", fmt.Errorf("rule_governance_pin_snapshot: %w", err) + } + snapshotID := strings.TrimSpace(snapshotValue) pinned := true - if raw, ok := m["pinned"]; ok { - pinned = coerceBool(raw, true) + if value, present, parseErr := optionalBoolArg(m, "pinned"); parseErr != nil { + return "", fmt.Errorf("rule_governance_pin_snapshot: %w", parseErr) + } else if present { + pinned = value } summary, err := writeStore.PinRuleGovernanceSnapshot(ctx, snapshotID, pinned) if err != nil { @@ -418,8 +434,16 @@ func (s *Server) handleRuleGovernanceRollback(ctx context.Context, args json.Raw if err != nil { return "", err } - snapshotID := strings.TrimSpace(coerceString(m["snapshot_id"], "")) - result, err := writeStore.RollbackRuleGovernanceSnapshot(ctx, snapshotID, parseRuleGovernanceTransitionRequest(m)) + snapshotValue, _, err := optionalStringArg(m, "snapshot_id") + if err != nil { + return "", fmt.Errorf("rule_governance_rollback: %w", err) + } + snapshotID := strings.TrimSpace(snapshotValue) + req, err := parseRuleGovernanceTransitionRequest(m) + if err != nil { + return "", fmt.Errorf("rule_governance_rollback: %w", err) + } + result, err := writeStore.RollbackRuleGovernanceSnapshot(ctx, snapshotID, req) if err != nil { if len(result.ConflictVersionIDs) > 0 { return marshalJSON(map[string]any{ @@ -591,14 +615,26 @@ func isSafeRuleGovernanceEvidenceID(value string) bool { return true } -func parseRuleGovernanceTransitionRequest(m map[string]any) gormdb.RuleTransitionRequest { - return gormdb.RuleTransitionRequest{ - Actor: strings.TrimSpace(coerceString(m["actor"], "")), - ActorKind: models.RuleActorKind(strings.TrimSpace(coerceString(m["actor_kind"], ""))), - Reason: strings.TrimSpace(coerceString(m["reason"], "")), - EvidenceHandles: coerceStringSlice(m["evidence_handles"]), - SnapshotID: strings.TrimSpace(coerceString(m["snapshot_id"], "")), +func parseRuleGovernanceTransitionRequest(m map[string]any) (gormdb.RuleTransitionRequest, error) { + values := make(map[string]string, 4) + for _, key := range []string{"actor", "actor_kind", "reason", "snapshot_id"} { + value, _, err := optionalStringArg(m, key) + if err != nil { + return gormdb.RuleTransitionRequest{}, err + } + values[key] = strings.TrimSpace(value) } + evidence, _, err := optionalStringSliceArg(m, "evidence_handles") + if err != nil { + return gormdb.RuleTransitionRequest{}, err + } + return gormdb.RuleTransitionRequest{ + Actor: values["actor"], + ActorKind: models.RuleActorKind(values["actor_kind"]), + Reason: values["reason"], + EvidenceHandles: evidence, + SnapshotID: values["snapshot_id"], + }, nil } func parseRuleGovernanceSince(m map[string]any) (time.Time, error) { diff --git a/internal/mcp/tools_rule_governance_test.go b/internal/mcp/tools_rule_governance_test.go index 4011327a..40002179 100644 --- a/internal/mcp/tools_rule_governance_test.go +++ b/internal/mcp/tools_rule_governance_test.go @@ -370,6 +370,59 @@ func TestRuleGovernancePinSnapshotAndRollbackUseRuleGovernanceSnapshots(t *testi require.Equal(t, []any{float64(42)}, rollbackDecoded["restored_version_ids"]) } +func TestRuleGovernanceMutationsRejectMalformedPresentValuesBeforeTransition(t *testing.T) { + ctx := auth.WithIdentity(context.Background(), auth.Admin()) + for _, tc := range []struct { + name string + tool string + raw string + }{ + {name: "transition numeric string id", tool: "rule_governance_transition", raw: `{"rule_version_id":"7","to_state":"active_project"}`}, + {name: "transition fraction id", tool: "rule_governance_transition", raw: `{"rule_version_id":7.5,"to_state":"active_project"}`}, + {name: "transition exponent id", tool: "rule_governance_transition", raw: `{"rule_version_id":1e3,"to_state":"active_project"}`}, + {name: "transition overflow id", tool: "rule_governance_transition", raw: `{"rule_version_id":9223372036854775808,"to_state":"active_project"}`}, + {name: "transition wrong state type", tool: "rule_governance_transition", raw: `{"rule_version_id":7,"to_state":true}`}, + {name: "transition mixed evidence", tool: "rule_governance_transition", raw: `{"rule_version_id":7,"to_state":"active_project","evidence_handles":["report:ok",9]}`}, + {name: "pin wrong snapshot type", tool: "rule_governance_pin_snapshot", raw: `{"snapshot_id":7,"pinned":true}`}, + {name: "pin string boolean", tool: "rule_governance_pin_snapshot", raw: `{"snapshot_id":"rg-snap","pinned":"false"}`}, + {name: "rollback wrong reason type", tool: "rule_governance_rollback", raw: `{"snapshot_id":"rg-snap","reason":9}`}, + {name: "rollback null evidence", tool: "rule_governance_rollback", raw: `{"snapshot_id":"rg-snap","evidence_handles":null}`}, + } { + t.Run(tc.name, func(t *testing.T) { + store := &fakeRuleGovernanceStore{} + s := NewServer(ServerOptions{Version: "strict-rule-governance"}) + s.SetRuleGovernanceStore(store) + + out, err := s.callTool(ctx, tc.tool, json.RawMessage(tc.raw)) + + require.Error(t, err) + require.Empty(t, out) + require.Zero(t, store.transitionID) + require.Empty(t, store.pinSnapshotID) + require.Empty(t, store.rollbackID) + }) + } +} + +func TestRuleGovernanceTransitionPreservesExactLargeIntegerSelector(t *testing.T) { + store := &fakeRuleGovernanceStore{} + s := NewServer(ServerOptions{Version: "strict-rule-governance"}) + s.SetRuleGovernanceStore(store) + ctx := auth.WithIdentity(context.Background(), auth.Admin()) + + _, err := s.callTool(ctx, "rule_governance_transition", json.RawMessage(`{ + "rule_version_id":9007199254740993, + "to_state":"active_project", + "actor":"operator-a", + "actor_kind":"operator", + "reason":"exact selector", + "evidence_handles":[] + }`)) + + require.NoError(t, err) + require.Equal(t, int64(9007199254740993), store.transitionID) +} + func TestRuleGovernanceRollbackReturnsStructuredConflictResult(t *testing.T) { store := &fakeRuleGovernanceStore{rollbackErr: errors.New("invalid_rule_transition: rollback conflicts detected")} s := NewServer(ServerOptions{Version: "test"}) diff --git a/internal/mcp/tools_settings.go b/internal/mcp/tools_settings.go index 5ece128f..020ccb77 100644 --- a/internal/mcp/tools_settings.go +++ b/internal/mcp/tools_settings.go @@ -25,8 +25,11 @@ func (s *Server) handleSettingsConsolidated(ctx context.Context, args json.RawMe return "", err } - action := coerceString(m["action"], "") - if action == "" { + action, present, err := optionalStringArg(m, "action") + if err != nil { + return "", err + } + if !present || action == "" { return "", fmt.Errorf("action required for settings tool (valid: set, get, list, delete)") } @@ -87,17 +90,32 @@ func (s *Server) handleSetSetting(ctx context.Context, m map[string]any) (string return "", err } - key := strings.TrimSpace(coerceString(m["key"], "")) - if key == "" { + keyValue, keyPresent, err := optionalStringArg(m, "key") + if err != nil { + return "", err + } + key := strings.TrimSpace(keyValue) + if !keyPresent || key == "" { return "", fmt.Errorf("key is required") } - value := coerceString(m["value"], "") - if value == "" { + value, valuePresent, err := optionalStringArg(m, "value") + if err != nil { + return "", err + } + if !valuePresent || value == "" { return "", fmt.Errorf("value is required") } // A key is secret if its name marks it (.api_key) OR the caller explicitly asks. The // name rule is the safety net; the explicit flag is forward-compat for future secret keys. - secret := isSecretSettingKey(key) || coerceBool(m["encrypt"], false) + encrypt, _, err := optionalBoolArg(m, "encrypt") + if err != nil { + return "", err + } + secret := isSecretSettingKey(key) || encrypt + description, _, err := optionalStringArg(m, "description") + if err != nil { + return "", err + } store, err := s.settingsStore() if err != nil { @@ -106,7 +124,7 @@ func (s *Server) handleSetSetting(ctx context.Context, m map[string]any) (string in := &models.ModelSetting{ Key: key, - Description: coerceString(m["description"], ""), + Description: description, EditedBy: "mcp", } @@ -218,8 +236,12 @@ func (s *Server) handleDeleteSetting(ctx context.Context, m map[string]any) (str return "", err } - key := strings.TrimSpace(coerceString(m["key"], "")) - if key == "" { + keyValue, keyPresent, err := optionalStringArg(m, "key") + if err != nil { + return "", err + } + key := strings.TrimSpace(keyValue) + if !keyPresent || key == "" { return "", fmt.Errorf("key is required") } diff --git a/internal/mcp/tools_settings_test.go b/internal/mcp/tools_settings_test.go index 450b63ff..8888cb43 100644 --- a/internal/mcp/tools_settings_test.go +++ b/internal/mcp/tools_settings_test.go @@ -81,6 +81,37 @@ func TestSettings_UnknownAction(t *testing.T) { assert.Contains(t, err.Error(), "action required") } +func TestSettings_StrictMutationInputFailsBeforeStore(t *testing.T) { + for _, tc := range []struct { + name string + raw string + field string + }{ + {name: "wrong action type", raw: `{"action":7}`, field: "action"}, + {name: "null key", raw: `{"action":"set","key":null,"value":"v"}`, field: "key"}, + {name: "wrong key type", raw: `{"action":"set","key":7,"value":"v"}`, field: "key"}, + {name: "null value", raw: `{"action":"set","key":"strict.test","value":null}`, field: "value"}, + {name: "wrong value type", raw: `{"action":"set","key":"strict.test","value":7}`, field: "value"}, + {name: "null encrypt", raw: `{"action":"set","key":"strict.test","value":"v","encrypt":null}`, field: "encrypt"}, + {name: "string encrypt", raw: `{"action":"set","key":"strict.test","value":"v","encrypt":"false"}`, field: "encrypt"}, + {name: "numeric encrypt", raw: `{"action":"set","key":"strict.test","value":"v","encrypt":1}`, field: "encrypt"}, + {name: "wrong description type", raw: `{"action":"set","key":"strict.test","value":"v","description":true}`, field: "description"}, + {name: "wrong delete key type", raw: `{"action":"delete","key":9}`, field: "key"}, + } { + t.Run(tc.name, func(t *testing.T) { + srv := NewServer(ServerOptions{Version: "strict-settings"}) + + out, err := srv.handleSettingsConsolidated(adminCtx(), json.RawMessage(tc.raw)) + + require.Error(t, err) + assert.Empty(t, out) + assert.Contains(t, err.Error(), tc.field) + assert.NotContains(t, err.Error(), "settings store not available", + "malformed present input must fail before resolving the durable store") + }) + } +} + // TestIsSecretSettingKey pins the secret-classification convention: only keys ending in // ".api_key" are secrets. URLs and model names are plaintext config. func TestIsSecretSettingKey(t *testing.T) { diff --git a/internal/mcp/tools_store_consolidated.go b/internal/mcp/tools_store_consolidated.go index c5b9cf60..556ec739 100644 --- a/internal/mcp/tools_store_consolidated.go +++ b/internal/mcp/tools_store_consolidated.go @@ -4,6 +4,7 @@ import ( "context" "encoding/json" "fmt" + "strings" ) // handleStoreConsolidated routes store tool actions to the appropriate handler. @@ -13,7 +14,27 @@ func (s *Server) handleStoreConsolidated(ctx context.Context, args json.RawMessa return "", err } - action := coerceString(m["action"], "create") + action, present, err := optionalStringArg(m, "action") + if err != nil { + return "", err + } + if !present || action == "" { + action = "create" + } + if tags, ok := m["tags"].(string); ok { + parts := strings.Split(tags, ",") + normalized := make([]string, 0, len(parts)) + for _, part := range parts { + if part = strings.TrimSpace(part); part != "" { + normalized = append(normalized, part) + } + } + m["tags"] = normalized + args, err = json.Marshal(m) + if err != nil { + return "", fmt.Errorf("normalize store tags: %w", err) + } + } switch action { case "create": @@ -28,4 +49,3 @@ func (s *Server) handleStoreConsolidated(ctx context.Context, args json.RawMessa return "", fmt.Errorf("unknown store action: %q (valid: create, edit, merge, import)", action) } } - From cc83b972021dc39555cccc3aed98961ca50719de Mon Sep 17 00:00:00 2001 From: Kirill Turanskiy Date: Sun, 12 Jul 2026 04:23:29 +0300 Subject: [PATCH 060/111] fix(mb1): fail closed in dream crystallization --- .../evidence/MB1-006.red.json | 8 + internal/worker/dream_cycle.go | 285 ++++++++--------- internal/worker/dream_cycle_test.go | 293 +++++++++++++++++- 3 files changed, 417 insertions(+), 169 deletions(-) create mode 100644 .agent/specs/mb1-data-integrity-and-mutation-safety/evidence/MB1-006.red.json diff --git a/.agent/specs/mb1-data-integrity-and-mutation-safety/evidence/MB1-006.red.json b/.agent/specs/mb1-data-integrity-and-mutation-safety/evidence/MB1-006.red.json new file mode 100644 index 00000000..419f5b6d --- /dev/null +++ b/.agent/specs/mb1-data-integrity-and-mutation-safety/evidence/MB1-006.red.json @@ -0,0 +1,8 @@ +{ + "task_id": "MB1-006", + "observed_at": "2026-07-11T22:58:44Z", + "test_file": "internal/worker/dream_cycle_test.go", + "test_name": "TestDreamCycle_FlagOffNoCandidates; TestDreamCycle_CandidatePersistenceUnavailableDoesNotExtractOrMark; TestDreamCycle_RouteFailurePreservesUnprocessedBatch; TestDreamCycle_GroupsExactProjectAndSessionProvenance", + "failure_reason": "Dream-cycle extracted and marked work without a live candidate path, marked failed routes processed, advanced the watermark, and combined different project/session provenance into one digest.", + "runner_stdout_excerpt": "F-off and nil-writer cases extracted, marked, and advanced; route failure marked transcript 92; two provenance groups produced one candidate." +} diff --git a/internal/worker/dream_cycle.go b/internal/worker/dream_cycle.go index 34ee3ecc..e2a0e1bb 100644 --- a/internal/worker/dream_cycle.go +++ b/internal/worker/dream_cycle.go @@ -3,6 +3,8 @@ package worker import ( "context" "errors" + "os" + "sort" "time" "github.com/rs/zerolog/log" @@ -50,22 +52,25 @@ type dreamCandidateWriter interface { // marks transcripts processed, and advances an in-process time watermark. // // Safe defaults: +// - crystallization flag off, candidate flag off, or candidate store unavailable → return before reading transcripts. // - No LLM configured (ErrLLMDisabled) → debug log, return; zero side-effects. // - transcriptStore nil → debug log, return. // - Zero transcripts since watermark → debug log, return. // - LLM extraction error → warn log, return WITHOUT advancing watermark (retry next tick). // -// RouteDecision returns (nil, nil) when ENGRAM_VNEXT_F_ENABLED is not set or -// candidateStore is nil. In that case the dream-cycle logs a debug note and -// skips the decision — the candidate path requires the F flag. This is by design: -// the dream-cycle targets the candidate path only; legacy memory writes from the -// per-session crystallization hook cover the flag-off scenario. +// The candidate path is the only durable output. There is intentionally no +// direct-memory fallback: consuming a transcript without a created-or-duplicate +// candidate would lose work and would resurrect the demolished v5 path. func (s *Service) runDreamCrystallization(ctx context.Context) { - // ------------------------------------------------------------------------- - // Step 1: Resolve transcript store — prefer test override, fall back to real. - // The dreamTranscriptStoreOverride field is set only in unit tests; in - // production it is always nil and the real transcriptStore is used. - // ------------------------------------------------------------------------- + if !isCrystallizationEnabled() { + log.Debug().Msg("dream-cycle: crystallization disabled, no-op") + return + } + if os.Getenv("ENGRAM_VNEXT_F_ENABLED") != "true" { + log.Debug().Msg("dream-cycle: candidate path disabled, no-op") + return + } + var ts dreamTranscriptStore if s.dreamTranscriptStoreOverride != nil { ts = s.dreamTranscriptStoreOverride @@ -80,9 +85,6 @@ func (s *Service) runDreamCrystallization(ctx context.Context) { ts = realTS } - // Resolve candidate writer — prefer test seam, fall back to real store. - // dreamCandidateWriter is a worker-local interface mirror of crystallization.CandidateWriter - // so service.go need not import the crystallization package. var candidateWriter dreamCandidateWriter if s.dreamCandidateStoreOverride != nil { candidateWriter = s.dreamCandidateStoreOverride @@ -93,12 +95,11 @@ func (s *Service) runDreamCrystallization(ctx context.Context) { } s.initMu.RUnlock() } + if candidateWriter == nil { + log.Debug().Msg("dream-cycle: candidate store not ready, no-op") + return + } - // Capture memory store for RouteDecision fingerprint check. - // Use a typed-nil guard: RouteDecision accepts a MemoryFingerprintChecker interface, - // and passing a (*gorm.MemoryStore)(nil) would be a non-nil interface with a nil - // concrete pointer, causing a panic inside RouteDecision. Assign to the interface - // only when the concrete pointer is non-nil. s.initMu.RLock() rawMemStore := s.memoryStore s.initMu.RUnlock() @@ -107,9 +108,6 @@ func (s *Service) runDreamCrystallization(ctx context.Context) { memChecker = rawMemStore } - // ------------------------------------------------------------------------- - // Step 2: Resolve extractor — test seam or real LLM client. - // ------------------------------------------------------------------------- var extractFn dreamExtractFunc if s.dreamExtractorFunc != nil { extractFn = s.dreamExtractorFunc @@ -127,16 +125,8 @@ func (s *Service) runDreamCrystallization(ctx context.Context) { extractFn = extractor.Extract } - // ------------------------------------------------------------------------- - // Step 3: Determine transcript watermark (time-based, in-process). - // Reads the atomic dreamWatermark field; zero = time.Unix(0,0) = epoch start. - // ------------------------------------------------------------------------- watermarkNano := s.dreamWatermark.Load() watermark := time.Unix(0, watermarkNano) - - // ------------------------------------------------------------------------- - // Step 4: List unprocessed transcripts since the watermark. - // ------------------------------------------------------------------------- transcripts, err := ts.ListUnprocessedSince(ctx, watermark) if err != nil { log.Warn().Err(err).Msg("dream-cycle: failed to list unprocessed transcripts, skipping") @@ -147,119 +137,93 @@ func (s *Service) runDreamCrystallization(ctx context.Context) { return } - // ------------------------------------------------------------------------- - // Step 5: Adaptive digest — compute mode and build the digest string. - // ------------------------------------------------------------------------- - sessionSet := make(map[string]struct{}, len(transcripts)) - projectSet := make(map[string]struct{}, len(transcripts)) - var minCreated, maxCreated time.Time + type groupKey struct { + project string + sessionID string + } + groups := make(map[groupKey][]gorm.SessionTranscript) + keys := make([]groupKey, 0) + var maxCreated time.Time for _, t := range transcripts { - sessionSet[t.SessionID] = struct{}{} - projectSet[t.Project] = struct{}{} - if minCreated.IsZero() || t.CreatedAt.Before(minCreated) { - minCreated = t.CreatedAt + key := groupKey{project: t.Project, sessionID: t.SessionID} + if _, ok := groups[key]; !ok { + keys = append(keys, key) } + groups[key] = append(groups[key], t) if t.CreatedAt.After(maxCreated) { maxCreated = t.CreatedAt } } - sessionCount := len(sessionSet) - span := maxCreated.Sub(minCreated) - // sharedProject is true only when transcripts span MORE THAN ONE distinct - // project — a single-project batch is NOT "shared". A single session from one - // project (sessionCount==1, one project) therefore stays per-session for a - // short span, instead of being forced to per-batch by a degenerate flag. - sharedProject := len(projectSet) > 1 - - mode := crystallization.SelectMode(sessionCount, span, sharedProject) - contents := make([]string, len(transcripts)) - for i, t := range transcripts { - contents[i] = t.Content - } - digest := crystallization.BuildDigest(contents, mode) - - // ------------------------------------------------------------------------- - // Step 6: Extract decisions via LLM. - // Errors here do NOT advance the watermark — retry on next tick. - // ------------------------------------------------------------------------- - decisions, err := extractFn(ctx, digest) - if err != nil { - log.Warn().Err(err). - Int("transcripts", len(transcripts)). - Msg("dream-cycle: extraction failed, watermark not advanced (will retry)") - return - } - - // ------------------------------------------------------------------------- - // Step 7: Route each decision to a candidate via RouteDecision. - // - // Provenance: for per-batch mode there is no single canonical SessionID, so - // we use the first transcript's SessionID and Project as batch provenance. - // This is documented as the chosen convention; an empty "" was considered but - // ruled out because RouteDecision passes sessionID into models.NewCrystallizationCandidate - // which uses it for fingerprinting — a non-empty value yields a stable fingerprint. - // - // DetectLoss: applies to the supersede/update path where an existing candidate - // would be overwritten with a lossy replacement. The dream-cycle only CREATES - // new candidates (RouteDecision handles idempotency via fingerprint checks). - // DetectLoss is therefore not wired here. - // TODO(crystal): wire DetectLoss in a future supersede path that updates an - // existing candidate's text/evidence fields — see loss.go for the contract. - // - // RouteDecision returns (nil, nil) when ENGRAM_VNEXT_F_ENABLED is unset or - // candidateStore is nil. Candidates require the F flag; the legacy memory path - // in the per-session crystallization hook covers the flag-off scenario. - // ------------------------------------------------------------------------- - provenanceSessionID := transcripts[0].SessionID - provenanceProject := transcripts[0].Project + sort.Slice(keys, func(i, j int) bool { + if keys[i].project == keys[j].project { + return keys[i].sessionID < keys[j].sessionID + } + return keys[i].project < keys[j].project + }) + allSucceeded := true + decisionsExtracted := 0 candidatesCreated := 0 - for _, decision := range decisions { - result, routeErr := crystallization.RouteDecision( - ctx, - decision, - provenanceSessionID, - provenanceProject, - candidateWriter, - memChecker, - ) - if routeErr != nil { - log.Warn().Err(routeErr). - Str("text_prefix", dreamTruncate(decision.Text, 80)). - Msg("dream-cycle: route decision failed, skipping this decision") - continue + processedTranscripts := 0 + digestMode := "per-session" + for _, key := range keys { + batch := groups[key] + sort.Slice(batch, func(i, j int) bool { + if batch[i].CreatedAt.Equal(batch[j].CreatedAt) { + return batch[i].ID < batch[j].ID + } + return batch[i].CreatedAt.Before(batch[j].CreatedAt) + }) + contents := make([]string, len(batch)) + for i := range batch { + contents[i] = batch[i].Content } - if result == nil { - // F flag off or candidateStore nil — candidates require ENGRAM_VNEXT_F_ENABLED=true. - log.Debug().Msg("dream-cycle: RouteDecision returned nil (F-flag off or candidateStore nil) — candidate path inactive") + span := batch[len(batch)-1].CreatedAt.Sub(batch[0].CreatedAt) + mode := crystallization.SelectMode(1, span, false) + digestMode = string(mode) + decisions, extractErr := extractFn(ctx, crystallization.BuildDigest(contents, mode)) + if extractErr != nil { + allSucceeded = false + log.Warn().Err(extractErr). + Str("project", key.project). + Str("session_id", key.sessionID). + Msg("dream-cycle: extraction failed, group retained for retry") continue } - if result.Duplicate { - log.Debug(). - Str("text_prefix", dreamTruncate(decision.Text, 80)). - Msg("dream-cycle: duplicate decision fingerprint, skipping") + decisionsExtracted += len(decisions) + groupSucceeded := true + for _, decision := range decisions { + result, routeErr := crystallization.RouteDecision(ctx, decision, key.sessionID, key.project, candidateWriter, memChecker) + if routeErr != nil || result == nil { + allSucceeded = false + groupSucceeded = false + log.Warn().Err(routeErr). + Str("project", key.project). + Str("session_id", key.sessionID). + Str("text_prefix", dreamTruncate(decision.Text, 80)). + Msg("dream-cycle: route failed, group retained for fingerprint-safe retry") + break + } + if !result.Duplicate && result.CandidateID > 0 { + candidatesCreated++ + } + } + if !groupSucceeded { continue } - if result.CandidateID > 0 { - candidatesCreated++ + ids := make([]int64, len(batch)) + for i := range batch { + ids[i] = batch[i].ID } - } - - // ------------------------------------------------------------------------- - // Step 8: Mark transcripts processed and prune. - // MarkProcessed failure is non-fatal: we still attempt prune and watermark - // advance so the batch is not permanently stuck. - // ------------------------------------------------------------------------- - ids := make([]int64, len(transcripts)) - for i, t := range transcripts { - ids[i] = t.ID - } - if markErr := ts.MarkProcessed(ctx, ids); markErr != nil { - // MarkProcessed failure is a hard stop: without the processed_at stamp the - // watermark must not advance, or these transcripts fall behind the watermark - // with processed_at=NULL and are silently lost from future runs. - log.Warn().Err(markErr).Msg("dream-cycle: failed to mark transcripts processed, watermark not advanced (will retry)") - return + if markErr := ts.MarkProcessed(ctx, ids); markErr != nil { + allSucceeded = false + log.Warn().Err(markErr). + Str("project", key.project). + Str("session_id", key.sessionID). + Msg("dream-cycle: mark failed, group retained for fingerprint-safe retry") + continue + } + processedTranscripts += len(batch) } pruned, pruneErr := ts.PruneProcessed(ctx) @@ -267,36 +231,31 @@ func (s *Service) runDreamCrystallization(ctx context.Context) { log.Warn().Err(pruneErr).Msg("dream-cycle: failed to prune processed transcripts") } - // Prune stale unprocessed transcripts using the configured retention window. - // s.config.TranscriptRetentionDays == 0 (the default) is a documented no-op in - // TranscriptStore.PruneUnprocessedOlderThan, so no special-casing is needed. - // Env: ENGRAM_TRANSCRIPT_RETENTION_DAYS (parsed by config.Load). - retentionDays := 0 - if s.config != nil { - retentionDays = s.config.TranscriptRetentionDays - } - pruneOldCount, pruneOldErr := ts.PruneUnprocessedOlderThan(ctx, retentionDays) - if pruneOldErr != nil { - log.Warn().Err(pruneOldErr).Msg("dream-cycle: failed to prune old unprocessed transcripts") + var pruneOldCount int64 + if allSucceeded { + retentionDays := 0 + if s.config != nil { + retentionDays = s.config.TranscriptRetentionDays + } + var pruneOldErr error + pruneOldCount, pruneOldErr = ts.PruneUnprocessedOlderThan(ctx, retentionDays) + if pruneOldErr != nil { + log.Warn().Err(pruneOldErr).Msg("dream-cycle: failed to prune old unprocessed transcripts") + } + s.dreamWatermark.Store(maxCreated.UnixNano()) } - // ------------------------------------------------------------------------- - // Step 9: Advance watermark to the max created_at of the batch. - // Only reached when extraction succeeded. - // ------------------------------------------------------------------------- - s.dreamWatermark.Store(maxCreated.UnixNano()) - - // ------------------------------------------------------------------------- - // Step 10: Structured log of counts. - // ------------------------------------------------------------------------- log.Info(). Int("transcripts_read", len(transcripts)). - Int("decisions_extracted", len(decisions)). + Int("transcripts_processed", processedTranscripts). + Int("decisions_extracted", decisionsExtracted). Int("candidates_created", candidatesCreated). Int64("transcripts_pruned", pruned). Int64("old_unprocessed_pruned", pruneOldCount). - Str("digest_mode", string(mode)). - Time("new_watermark", maxCreated). + Str("digest_mode", digestMode). + Bool("all_groups_succeeded", allSucceeded). + Int("provenance_groups", len(keys)). + Time("new_watermark", time.Unix(0, s.dreamWatermark.Load())). Msg("dream-cycle: crystallization complete") } @@ -315,15 +274,18 @@ func dreamTruncate(text string, n int) string { // --------------------------------------------------------------------------- type fakeTranscriptStore struct { - rows []gorm.SessionTranscript - marked []int64 - prunedCount int64 + rows []gorm.SessionTranscript + marked []int64 + processed map[int64]bool + markFailures int + markErr error + prunedCount int64 } func (f *fakeTranscriptStore) ListUnprocessedSince(_ context.Context, watermark time.Time) ([]gorm.SessionTranscript, error) { var out []gorm.SessionTranscript for _, r := range f.rows { - if !r.CreatedAt.Before(watermark) { + if !f.processed[r.ID] && !r.CreatedAt.Before(watermark) { out = append(out, r) } } @@ -331,7 +293,20 @@ func (f *fakeTranscriptStore) ListUnprocessedSince(_ context.Context, watermark } func (f *fakeTranscriptStore) MarkProcessed(_ context.Context, ids []int64) error { + if f.markFailures > 0 { + f.markFailures-- + if f.markErr != nil { + return f.markErr + } + return errors.New("injected mark failure") + } f.marked = append(f.marked, ids...) + if f.processed == nil { + f.processed = make(map[int64]bool) + } + for _, id := range ids { + f.processed[id] = true + } return nil } diff --git a/internal/worker/dream_cycle_test.go b/internal/worker/dream_cycle_test.go index 4c1912f0..9cabbc76 100644 --- a/internal/worker/dream_cycle_test.go +++ b/internal/worker/dream_cycle_test.go @@ -16,6 +16,8 @@ package worker import ( "context" "errors" + "fmt" + "os" "sync/atomic" "testing" "time" @@ -33,19 +35,28 @@ import ( // --------------------------------------------------------------------------- type fakeCandidateStore struct { - created []*models.CrystallizationCandidate - nextID atomic.Int64 + created []*models.CrystallizationCandidate + byFingerprint map[string]*models.CrystallizationCandidate + createErr error + nextID atomic.Int64 } func (f *fakeCandidateStore) Create(_ context.Context, c *models.CrystallizationCandidate) (*models.CrystallizationCandidate, error) { + if f.createErr != nil { + return nil, f.createErr + } id := f.nextID.Add(1) c.ID = id f.created = append(f.created, c) + if f.byFingerprint == nil { + f.byFingerprint = make(map[string]*models.CrystallizationCandidate) + } + f.byFingerprint[c.Fingerprint] = c return c, nil } -func (f *fakeCandidateStore) GetByFingerprint(_ context.Context, _ string) (*models.CrystallizationCandidate, error) { - return nil, nil // always miss → create +func (f *fakeCandidateStore) GetByFingerprint(_ context.Context, fingerprint string) (*models.CrystallizationCandidate, error) { + return f.byFingerprint[fingerprint], nil } type fakeMemChecker struct{} @@ -54,6 +65,19 @@ func (f *fakeMemChecker) ListBySourceAgentAndTag(_ context.Context, _, _, _ stri return nil, nil // no existing memories } +type markFailOnceTranscriptStore struct { + dreamTranscriptStore + failed bool +} + +func (s *markFailOnceTranscriptStore) MarkProcessed(ctx context.Context, ids []int64) error { + if !s.failed { + s.failed = true + return errors.New("injected mark failure") + } + return s.dreamTranscriptStore.MarkProcessed(ctx, ids) +} + // --------------------------------------------------------------------------- // Helpers // --------------------------------------------------------------------------- @@ -72,6 +96,7 @@ func buildDreamService( vnextFEnabled bool, ) *Service { t.Helper() + t.Setenv("ENGRAM_CRYSTALLIZATION_ENABLED", "true") if vnextFEnabled { t.Setenv("ENGRAM_VNEXT_F_ENABLED", "true") } else { @@ -116,6 +141,7 @@ func makeTranscript(id int64, sessionID, project, content string, base time.Time func TestDreamCycle_NoOpWhenLLMDisabled(t *testing.T) { t.Setenv("ENGRAM_LLM_URL", "") // explicitly unset + t.Setenv("ENGRAM_CRYSTALLIZATION_ENABLED", "true") t.Setenv("ENGRAM_VNEXT_F_ENABLED", "true") base := time.Now() @@ -146,6 +172,8 @@ func TestDreamCycle_NoOpWhenLLMDisabled(t *testing.T) { // --------------------------------------------------------------------------- func TestDreamCycle_NoOpWhenTranscriptStoreNil(t *testing.T) { + t.Setenv("ENGRAM_CRYSTALLIZATION_ENABLED", "true") + t.Setenv("ENGRAM_VNEXT_F_ENABLED", "true") svc := &Service{} svc.ctx = context.Background() // dreamTranscriptStoreOverride is nil AND real transcriptStore is nil. @@ -167,7 +195,7 @@ func TestDreamCycle_NoOpWhenNoTranscripts(t *testing.T) { extractCalled = true return nil, nil } - svc := buildDreamService(t, nil /* no rows */, nil, extractFn, false) + svc := buildDreamService(t, nil /* no rows */, &fakeCandidateStore{}, extractFn, true) svc.runDreamCrystallization(context.Background()) @@ -189,7 +217,7 @@ func TestDreamCycle_WatermarkNotAdvancedOnExtractError(t *testing.T) { extractFn := func(_ context.Context, _ string) ([]crystallization.ExtractedDecision, error) { return nil, extractErr } - svc := buildDreamService(t, rows, nil, extractFn, false) + svc := buildDreamService(t, rows, &fakeCandidateStore{}, extractFn, true) svc.runDreamCrystallization(context.Background()) @@ -266,8 +294,7 @@ func TestDreamCycle_RUAndZHCandidatesCreated(t *testing.T) { } // --------------------------------------------------------------------------- -// TC6: F-flag OFF → RouteDecision returns nil → no candidates created, -// watermark IS advanced (extraction succeeded, candidates just require F flag). +// TC6: F-flag OFF fails closed before extraction, marking, or watermark advance. // --------------------------------------------------------------------------- func TestDreamCycle_FlagOffNoCandidates(t *testing.T) { @@ -278,7 +305,9 @@ func TestDreamCycle_FlagOffNoCandidates(t *testing.T) { makeTranscript(1, "sess-a", "proj", "decided to use gRPC", base, 0), } + extractCalled := false extractFn := func(_ context.Context, _ string) ([]crystallization.ExtractedDecision, error) { + extractCalled = true return []crystallization.ExtractedDecision{ {Text: "decided to use gRPC", Lang: "en", Confidence: 0.9, ProposedTarget: "rule"}, }, nil @@ -289,12 +318,12 @@ func TestDreamCycle_FlagOffNoCandidates(t *testing.T) { svc.runDreamCrystallization(context.Background()) - // RouteDecision returns nil when F flag is off; no candidates expected. + // Candidate persistence is disabled; no transcript consumption is allowed. assert.Len(t, cs.created, 0, "no candidates expected when ENGRAM_VNEXT_F_ENABLED=false") - - // Watermark IS advanced — extraction succeeded even though candidate path was inactive. - assert.Equal(t, base.UnixNano(), svc.dreamWatermark.Load(), - "watermark must be advanced after successful extraction even with F flag off") + assert.False(t, extractCalled, "F-flag off must fail before extraction") + assert.Empty(t, svc.dreamTranscriptStoreOverride.(*fakeTranscriptStore).marked) + assert.EqualValues(t, 0, svc.dreamWatermark.Load(), + "watermark must not advance while candidate persistence is disabled") } // --------------------------------------------------------------------------- @@ -314,7 +343,7 @@ func TestDreamCycle_WatermarkFiltersOldTranscripts(t *testing.T) { }, nil } - svc := buildDreamService(t, []gorm.SessionTranscript{oldRow, newRow}, nil, extractFn, false) + svc := buildDreamService(t, []gorm.SessionTranscript{oldRow, newRow}, &fakeCandidateStore{}, extractFn, true) // Set watermark to base - 5s so oldRow (base-10s) is excluded. svc.dreamWatermark.Store(base.Add(-5 * time.Second).UnixNano()) @@ -331,6 +360,8 @@ func TestDreamCycle_WatermarkFiltersOldTranscripts(t *testing.T) { // --------------------------------------------------------------------------- func TestDreamCycle_TranscriptsMarkedProcessed(t *testing.T) { + t.Setenv("ENGRAM_CRYSTALLIZATION_ENABLED", "true") + t.Setenv("ENGRAM_VNEXT_F_ENABLED", "true") base := time.Now() rows := []gorm.SessionTranscript{ makeTranscript(10, "sess-a", "proj", "decided to adopt TDD", base, 0), @@ -348,6 +379,7 @@ func TestDreamCycle_TranscriptsMarkedProcessed(t *testing.T) { svc.ctx = context.Background() svc.dreamTranscriptStoreOverride = ts svc.dreamExtractorFunc = extractFn + svc.dreamCandidateStoreOverride = &fakeCandidateStore{} svc.runDreamCrystallization(context.Background()) @@ -356,6 +388,236 @@ func TestDreamCycle_TranscriptsMarkedProcessed(t *testing.T) { "both transcript IDs must be marked processed after a successful run") } +func TestDreamCycle_CandidatePersistenceUnavailableDoesNotExtractOrMark(t *testing.T) { + t.Setenv("ENGRAM_CRYSTALLIZATION_ENABLED", "true") + t.Setenv("ENGRAM_VNEXT_F_ENABLED", "true") + base := time.Now() + ts := &fakeTranscriptStore{rows: []gorm.SessionTranscript{ + makeTranscript(91, "session-unavailable", "project-unavailable", "decision", base, 0), + }} + extractCalled := false + svc := &Service{ + dreamTranscriptStoreOverride: ts, + dreamExtractorFunc: func(context.Context, string) ([]crystallization.ExtractedDecision, error) { + extractCalled = true + return nil, nil + }, + } + + svc.runDreamCrystallization(context.Background()) + + assert.False(t, extractCalled) + assert.Empty(t, ts.marked) + assert.Zero(t, svc.dreamWatermark.Load()) +} + +func TestDreamCycle_RouteFailurePreservesUnprocessedBatch(t *testing.T) { + t.Setenv("ENGRAM_CRYSTALLIZATION_ENABLED", "true") + t.Setenv("ENGRAM_VNEXT_F_ENABLED", "true") + base := time.Now() + ts := &fakeTranscriptStore{rows: []gorm.SessionTranscript{ + makeTranscript(92, "session-route-fail", "project-route-fail", "decision", base, 0), + }} + svc := &Service{ + dreamTranscriptStoreOverride: ts, + dreamCandidateStoreOverride: &fakeCandidateStore{createErr: errors.New("candidate write failed")}, + dreamExtractorFunc: func(context.Context, string) ([]crystallization.ExtractedDecision, error) { + return []crystallization.ExtractedDecision{{Text: "decision", Lang: "en", Confidence: 0.9, ProposedTarget: "rule"}}, nil + }, + } + + svc.runDreamCrystallization(context.Background()) + + assert.Empty(t, ts.marked) + assert.Zero(t, svc.dreamWatermark.Load()) +} + +func TestDreamCycle_CandidateFlagFlipDuringExtractionPreservesBatch(t *testing.T) { + t.Setenv("ENGRAM_CRYSTALLIZATION_ENABLED", "true") + t.Setenv("ENGRAM_VNEXT_F_ENABLED", "true") + base := time.Now() + ts := &fakeTranscriptStore{rows: []gorm.SessionTranscript{ + makeTranscript(96, "session-flag-flip", "project-flag-flip", "decision", base, 0), + }} + cs := &fakeCandidateStore{} + svc := &Service{ + dreamTranscriptStoreOverride: ts, + dreamCandidateStoreOverride: cs, + dreamExtractorFunc: func(context.Context, string) ([]crystallization.ExtractedDecision, error) { + require.NoError(t, os.Setenv("ENGRAM_VNEXT_F_ENABLED", "false")) + return []crystallization.ExtractedDecision{{Text: "decision", Lang: "en", Confidence: 0.9, ProposedTarget: "rule"}}, nil + }, + } + + svc.runDreamCrystallization(context.Background()) + + require.Empty(t, cs.created) + require.Empty(t, ts.marked) + require.Zero(t, svc.dreamWatermark.Load()) +} + +func TestDreamCycle_GroupsExactProjectAndSessionProvenance(t *testing.T) { + t.Setenv("ENGRAM_CRYSTALLIZATION_ENABLED", "true") + t.Setenv("ENGRAM_VNEXT_F_ENABLED", "true") + base := time.Now() + rows := []gorm.SessionTranscript{ + makeTranscript(93, "session-a", "project-a", "decision-a", base, 0), + makeTranscript(94, "session-b", "project-b", "decision-b", base, 1), + } + cs := &fakeCandidateStore{} + ts := &fakeTranscriptStore{rows: rows} + svc := &Service{ + dreamTranscriptStoreOverride: ts, + dreamCandidateStoreOverride: cs, + dreamExtractorFunc: func(_ context.Context, digest string) ([]crystallization.ExtractedDecision, error) { + return []crystallization.ExtractedDecision{{Text: digest, Lang: "en", Confidence: 0.9, ProposedTarget: "rule"}}, nil + }, + } + + svc.runDreamCrystallization(context.Background()) + + require.Len(t, cs.created, 2) + bySession := map[string]*models.CrystallizationCandidate{} + for _, candidate := range cs.created { + bySession[candidate.SourceSessionID] = candidate + } + require.Equal(t, []string{"project-a"}, bySession["session-a"].AffectedProjects) + require.Equal(t, []string{"project-b"}, bySession["session-b"].AffectedProjects) + require.NotContains(t, bySession["session-a"].ProposedContent, "decision-b") + require.NotContains(t, bySession["session-b"].ProposedContent, "decision-a") + assert.ElementsMatch(t, []int64{93, 94}, ts.marked) +} + +func TestDreamCycle_MarkFailureRetriesByFingerprintExactlyOnce(t *testing.T) { + t.Setenv("ENGRAM_CRYSTALLIZATION_ENABLED", "true") + t.Setenv("ENGRAM_VNEXT_F_ENABLED", "true") + base := time.Now() + ts := &fakeTranscriptStore{ + rows: []gorm.SessionTranscript{ + makeTranscript(95, "session-retry", "project-retry", "decision-retry", base, 0), + }, + markFailures: 1, + markErr: errors.New("mark unavailable"), + } + cs := &fakeCandidateStore{} + extractCalls := 0 + newService := func() *Service { + return &Service{ + dreamTranscriptStoreOverride: ts, + dreamCandidateStoreOverride: cs, + dreamExtractorFunc: func(context.Context, string) ([]crystallization.ExtractedDecision, error) { + extractCalls++ + return []crystallization.ExtractedDecision{{Text: "decision-retry", Lang: "en", Confidence: 0.9, ProposedTarget: "rule"}}, nil + }, + } + } + + first := newService() + first.runDreamCrystallization(context.Background()) + require.Len(t, cs.created, 1, "candidate creation committed before injected mark failure") + require.Empty(t, ts.marked) + require.Zero(t, first.dreamWatermark.Load()) + + // A new Service models process-local state loss. The durable transcript and + // candidate stores survive; the retry must accept the fingerprint duplicate, + // mark the row, and avoid a second candidate. + restarted := newService() + restarted.runDreamCrystallization(context.Background()) + require.Len(t, cs.created, 1, "fingerprint retry must not duplicate the durable candidate") + require.Equal(t, []int64{95}, ts.marked) + require.Equal(t, base.UnixNano(), restarted.dreamWatermark.Load()) + + // A second restart sees no unprocessed row and therefore does not extract. + afterSuccess := newService() + afterSuccess.runDreamCrystallization(context.Background()) + require.Len(t, cs.created, 1) + require.Equal(t, 2, extractCalls) +} + +func TestDreamCycle_RealDBRestartRetryPersistsExactlyOneCandidate(t *testing.T) { + dsn := os.Getenv("DATABASE_DSN") + if dsn == "" { + t.Skip("DATABASE_DSN not set; dream-cycle restart proof requires PostgreSQL") + } + t.Setenv("ENGRAM_CRYSTALLIZATION_ENABLED", "true") + t.Setenv("ENGRAM_VNEXT_F_ENABLED", "true") + marker := fmt.Sprintf("dream-restart-%d", time.Now().UnixNano()) + decisionText := "decision " + marker + createdAt := time.Now().UTC().Truncate(time.Microsecond) + + cleanup := func() { + store, err := gorm.NewStore(gorm.Config{DSN: dsn, MaxConns: 2}) + if err != nil { + return + } + _ = store.DB.Exec("DELETE FROM audit_log WHERE source_session_id = ? OR actor = ?", marker, marker).Error + _ = store.DB.Exec("DELETE FROM crystallization_candidates WHERE source_session_id = ?", marker).Error + _ = store.DB.Exec("DELETE FROM session_transcripts WHERE session_id = ?", marker).Error + _ = store.Close() + } + cleanup() + t.Cleanup(cleanup) + + extractCalls := 0 + extractFn := func(context.Context, string) ([]crystallization.ExtractedDecision, error) { + extractCalls++ + return []crystallization.ExtractedDecision{{Text: decisionText, Lang: "en", Confidence: 0.9, ProposedTarget: "rule"}}, nil + } + + store1, err := gorm.NewStore(gorm.Config{DSN: dsn, MaxConns: 2}) + require.NoError(t, err) + ts1 := gorm.NewTranscriptStore(store1.DB) + require.NoError(t, ts1.Create(context.Background(), &gorm.SessionTranscript{ + SessionID: marker, + Project: marker, + Content: decisionText, + CreatedAt: createdAt, + })) + cs1 := gorm.NewCandidateStore(store1.DB, gorm.NewAuditStore(store1.DB)) + first := &Service{ + dreamTranscriptStoreOverride: &markFailOnceTranscriptStore{dreamTranscriptStore: ts1}, + dreamCandidateStoreOverride: cs1, + dreamExtractorFunc: extractFn, + } + first.runDreamCrystallization(context.Background()) + + var candidates, unprocessed int64 + require.NoError(t, store1.DB.Table("crystallization_candidates").Where("source_session_id = ?", marker).Count(&candidates).Error) + require.NoError(t, store1.DB.Table("session_transcripts").Where("session_id = ? AND processed_at IS NULL", marker).Count(&unprocessed).Error) + require.EqualValues(t, 1, candidates) + require.EqualValues(t, 1, unprocessed, "mark failure must preserve the durable transcript for restart retry") + require.Zero(t, first.dreamWatermark.Load()) + require.NoError(t, store1.Close()) + + store2, err := gorm.NewStore(gorm.Config{DSN: dsn, MaxConns: 2}) + require.NoError(t, err) + restarted := &Service{ + dreamTranscriptStoreOverride: gorm.NewTranscriptStore(store2.DB), + dreamCandidateStoreOverride: gorm.NewCandidateStore(store2.DB, gorm.NewAuditStore(store2.DB)), + dreamExtractorFunc: extractFn, + } + restarted.runDreamCrystallization(context.Background()) + require.NoError(t, store2.DB.Table("crystallization_candidates").Where("source_session_id = ?", marker).Count(&candidates).Error) + require.NoError(t, store2.DB.Table("session_transcripts").Where("session_id = ?", marker).Count(&unprocessed).Error) + require.EqualValues(t, 1, candidates, "fingerprint duplicate on retry must not create a second candidate") + require.Zero(t, unprocessed, "successful retry must mark and prune the transcript") + require.Equal(t, createdAt.UnixNano(), restarted.dreamWatermark.Load()) + require.NoError(t, store2.Close()) + + store3, err := gorm.NewStore(gorm.Config{DSN: dsn, MaxConns: 2}) + require.NoError(t, err) + afterSuccess := &Service{ + dreamTranscriptStoreOverride: gorm.NewTranscriptStore(store3.DB), + dreamCandidateStoreOverride: gorm.NewCandidateStore(store3.DB, gorm.NewAuditStore(store3.DB)), + dreamExtractorFunc: extractFn, + } + afterSuccess.runDreamCrystallization(context.Background()) + require.NoError(t, store3.DB.Table("crystallization_candidates").Where("source_session_id = ?", marker).Count(&candidates).Error) + require.EqualValues(t, 1, candidates) + require.Equal(t, 2, extractCalls, "a post-success process restart must see no work") + require.NoError(t, store3.Close()) +} + // --------------------------------------------------------------------------- // US4 Degrade scenario tests (STEP 3 — T012). // --------------------------------------------------------------------------- @@ -393,6 +655,8 @@ func TestDreamCycle_FlagOff_NoWork(t *testing.T) { // runDreamCrystallization returning early must not touch or corrupt external state. func TestDreamCycle_RawMemoryUnaffected(t *testing.T) { t.Setenv("ENGRAM_LLM_URL", "") // LLM disabled → no-op in runDreamCrystallization + t.Setenv("ENGRAM_CRYSTALLIZATION_ENABLED", "true") + t.Setenv("ENGRAM_VNEXT_F_ENABLED", "true") svc := &Service{} svc.ctx = context.Background() @@ -400,6 +664,7 @@ func TestDreamCycle_RawMemoryUnaffected(t *testing.T) { makeTranscript(1, "sess-mem", "proj", "decided to use PostgreSQL", time.Now(), 0), }} svc.dreamTranscriptStoreOverride = ts + svc.dreamCandidateStoreOverride = &fakeCandidateStore{} // Run the dream-cycle; it must return early (LLM disabled) without touching anything. svc.runDreamCrystallization(context.Background()) From 09833330efd741b442cb3820f93fe280d313f5ac Mon Sep 17 00:00:00 2001 From: Kirill Turanskiy Date: Mon, 13 Jul 2026 00:25:30 +0300 Subject: [PATCH 061/111] test(mb1): prove deterministic vector retrieval --- internal/retrieval/hybrid_integration_test.go | 201 ++++++++++++++++-- 1 file changed, 187 insertions(+), 14 deletions(-) diff --git a/internal/retrieval/hybrid_integration_test.go b/internal/retrieval/hybrid_integration_test.go index 2cc1b7f4..fb4bcdb0 100644 --- a/internal/retrieval/hybrid_integration_test.go +++ b/internal/retrieval/hybrid_integration_test.go @@ -10,10 +10,16 @@ package retrieval_test import ( "context" + "encoding/json" + "fmt" + "net/http" + "net/http/httptest" "os" + "strings" "testing" "time" + "github.com/pgvector/pgvector-go" gormdb "github.com/thebtf/engram/internal/db/gorm" "github.com/thebtf/engram/internal/embedding" "github.com/thebtf/engram/internal/retrieval" @@ -22,9 +28,12 @@ import ( func skipIfNoDSN(t *testing.T) string { t.Helper() - dsn := os.Getenv("ENGRAM_TEST_DSN") + dsn := os.Getenv("DATABASE_DSN") if dsn == "" { - t.Skip("ENGRAM_TEST_DSN not set — skipping integration test") + dsn = os.Getenv("ENGRAM_TEST_DSN") + } + if dsn == "" { + t.Skip("DATABASE_DSN not set — skipping integration test") } return dsn } @@ -35,6 +44,11 @@ func openTestStore(t *testing.T, dsn string) *gormdb.Store { if err != nil { t.Fatalf("open test DB: %v", err) } + t.Cleanup(func() { + if err := store.Close(); err != nil { + t.Errorf("close test DB: %v", err) + } + }) return store } @@ -122,13 +136,39 @@ func TestIntegration_HybridFTSOnly(t *testing.T) { } } -// TestIntegration_HybridWithVector runs HybridSearch when ENGRAM_EMBEDDING_URL is set. +// TestIntegration_HybridWithVector proves the vector leg independently of any +// external embedding service or lexical fallback. func TestIntegration_HybridWithVector(t *testing.T) { dsn := skipIfNoDSN(t) - embURL := os.Getenv("ENGRAM_EMBEDDING_URL") - if embURL == "" { - t.Skip("ENGRAM_EMBEDDING_URL not set — skipping vector integration test") - } + const query = "orchid nebula" + const model = "mb1-deterministic" + vector := make([]float32, embedding.EmbeddingDim) + vector[0] = 1 + endpoint := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + if r.Method != http.MethodPost || r.URL.Path != "/v1/embeddings" { + http.Error(w, "unexpected request", http.StatusNotFound) + return + } + var request struct { + Input []string `json:"input"` + Model string `json:"model"` + Dimensions int `json:"dimensions"` + } + if err := json.NewDecoder(r.Body).Decode(&request); err != nil || + request.Model != model || request.Dimensions != embedding.EmbeddingDim || + len(request.Input) != 1 || request.Input[0] != query { + http.Error(w, fmt.Sprintf("invalid embedding request: %#v err=%v", request, err), http.StatusBadRequest) + return + } + w.Header().Set("Content-Type", "application/json") + _ = json.NewEncoder(w).Encode(map[string]any{ + "data": []any{map[string]any{"index": 0, "embedding": vector}}, + }) + })) + t.Cleanup(endpoint.Close) + t.Setenv("ENGRAM_EMBEDDING_URL", endpoint.URL) + t.Setenv("ENGRAM_EMBEDDING_MODEL", model) + t.Setenv("ENGRAM_EMBEDDING_DIMENSIONS", "") dbStore := openTestStore(t, dsn) store := gormdb.NewMemoryStore(dbStore) @@ -144,7 +184,7 @@ func TestIntegration_HybridWithVector(t *testing.T) { seed := &models.Memory{ Project: project, - Content: "vector search: semantic similarity for memory retrieval systems", + Content: "vector-only seed with no lexical query terms", Status: "active", ImportanceBase: 0.7, CreatedAt: time.Now(), @@ -154,20 +194,39 @@ func TestIntegration_HybridWithVector(t *testing.T) { t.Fatalf("seed memory: %v", err) } t.Cleanup(func() { + _ = dbStore.DB.Exec("DELETE FROM content_chunks WHERE memory_id = ?", created.ID).Error _ = store.Delete(ctx, created.ID) }) + if err := embStore.StoreChunks(ctx, []embedding.Chunk{{ + MemoryID: created.ID, + Seq: 0, + Text: seed.Content, + Embedding: pgvector.NewVector(vector), + Model: model, + }}); err != nil { + t.Fatalf("persist seed vector: %v", err) + } + ftsRows, err := store.SearchFTS(ctx, project, query, 10) + if err != nil { + t.Fatalf("lexical miss precondition: %v", err) + } + for _, row := range ftsRows { + if row.ID == created.ID { + t.Fatalf("lexical precondition failed: seeded memory matched FTS query") + } + } // Embed query. - vecs, err := embClient.Embed(ctx, []string{"semantic similarity retrieval"}) + vecs, err := embClient.Embed(ctx, []string{query}) if err != nil { t.Fatalf("embed query: %v", err) } queryVec := vecs[0] - scored, _, err := retrieval.HybridSearch( - ctx, project, "semantic similarity retrieval", 5, + scored, explanations, err := retrieval.HybridSearch( + ctx, project, query, 5, store, embStore, nil, - retrieval.HybridOptions{QueryVec: queryVec}, + retrieval.HybridOptions{QueryVec: queryVec, Explain: true}, ) if err != nil { t.Fatalf("HybridSearch with vector: %v", err) @@ -177,12 +236,126 @@ func TestIntegration_HybridWithVector(t *testing.T) { for _, sm := range scored { if sm.Memory.ID == created.ID { found = true - if sm.Score <= 0 { - t.Errorf("expected positive score for seeded memory, got %v", sm.Score) + if sm.Relevance <= 0 || sm.Score <= 0 { + t.Errorf("expected positive vector relevance and fused score, got relevance=%v score=%v", sm.Relevance, sm.Score) } } } if !found { t.Errorf("HybridSearch did not return seeded memory (id=%d); got %d results", created.ID, len(scored)) } + vectorExplained := false + for _, explanation := range explanations { + if explanation.MemoryID == created.ID { + vectorExplained = true + if explanation.SourceTier != "tier1_vector" { + t.Fatalf("seeded lexical miss came from %q, want tier1_vector", explanation.SourceTier) + } + } + } + if !vectorExplained { + t.Fatal("seeded memory lacked vector-tier explanation") + } +} + +func TestIntegration_VectorEndpointMalformedResponseFailsExplicitly(t *testing.T) { + endpoint := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, _ *http.Request) { + w.Header().Set("Content-Type", "application/json") + _, _ = w.Write([]byte(`{"data":`)) + })) + t.Cleanup(endpoint.Close) + t.Setenv("ENGRAM_EMBEDDING_URL", endpoint.URL) + t.Setenv("ENGRAM_EMBEDDING_MODEL", "mb1-malformed") + t.Setenv("ENGRAM_EMBEDDING_DIMENSIONS", "") + client, err := embedding.NewClient() + if err != nil { + t.Fatalf("new embedding client: %v", err) + } + + _, err = client.Embed(context.Background(), []string{"explicit endpoint failure"}) + if err == nil || !strings.Contains(err.Error(), "decode response") { + t.Fatalf("malformed embedding response must fail explicitly, got %v", err) + } +} + +func TestIntegration_VectorWrongDimensionCannotPersistOrProduceVectorHit(t *testing.T) { + dsn := skipIfNoDSN(t) + query := "orchid nebula" + wrongVector := make([]float32, embedding.EmbeddingDim-1) + wrongVector[0] = 1 + endpoint := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, _ *http.Request) { + w.Header().Set("Content-Type", "application/json") + _ = json.NewEncoder(w).Encode(map[string]any{ + "data": []any{map[string]any{"index": 0, "embedding": wrongVector}}, + }) + })) + t.Cleanup(endpoint.Close) + t.Setenv("ENGRAM_EMBEDDING_URL", endpoint.URL) + t.Setenv("ENGRAM_EMBEDDING_MODEL", "mb1-wrong-dimension") + t.Setenv("ENGRAM_EMBEDDING_DIMENSIONS", "") + + client, err := embedding.NewClient() + if err != nil { + t.Fatalf("new embedding client: %v", err) + } + vectors, err := client.Embed(context.Background(), []string{query}) + if err != nil { + t.Fatalf("embed wrong-dimension fixture: %v", err) + } + if len(vectors) != 1 || len(vectors[0]) != embedding.EmbeddingDim-1 { + t.Fatalf("wrong-dimension fixture was not returned as designed: %d", len(vectors[0])) + } + + dbStore := openTestStore(t, dsn) + memoryStore := gormdb.NewMemoryStore(dbStore) + embStore := embedding.NewStore(dbStore.DB) + project := fmt.Sprintf("hybrid-wrong-dim-%d", time.Now().UnixNano()) + seed, err := memoryStore.Create(context.Background(), &models.Memory{ + Project: project, + Content: "wrong sized vector seed without query terms", + Status: "active", + }) + if err != nil { + t.Fatalf("seed memory: %v", err) + } + t.Cleanup(func() { + _ = dbStore.DB.Exec("DELETE FROM content_chunks WHERE memory_id = ?", seed.ID).Error + _ = memoryStore.Delete(context.Background(), seed.ID) + }) + + if err := embStore.StoreChunks(context.Background(), []embedding.Chunk{{ + MemoryID: seed.ID, + Seq: 0, + Text: seed.Content, + Embedding: pgvector.NewVector(vectors[0]), + Model: "mb1-wrong-dimension", + }}); err != nil { + t.Fatalf("dimension guard returned unexpected storage error: %v", err) + } + var chunks int64 + if err := dbStore.DB.Table("content_chunks").Where("memory_id = ?", seed.ID).Count(&chunks).Error; err != nil { + t.Fatalf("count wrong-dimension chunks: %v", err) + } + if chunks != 0 { + t.Fatalf("wrong-dimension endpoint vector persisted %d chunks", chunks) + } + + results, explanations, err := retrieval.HybridSearch( + context.Background(), project, query, 5, + memoryStore, embStore, nil, + retrieval.HybridOptions{QueryVec: vectors[0], Explain: true}, + ) + if err != nil { + t.Fatalf("hybrid wrong-dimension path must degrade without false success: %v", err) + } + for _, result := range results { + if result.Memory.ID == seed.ID { + t.Fatal("wrong-dimension endpoint vector produced a false vector hit") + } + } + for _, explanation := range explanations { + if explanation.MemoryID == seed.ID && explanation.SourceTier == "tier1_vector" { + t.Fatal("wrong-dimension endpoint vector produced a tier1_vector explanation") + } + } } From 8b60aa584f04908cbc6d999adf32ee11109d1e32 Mon Sep 17 00:00:00 2001 From: Kirill Turanskiy Date: Mon, 13 Jul 2026 00:25:31 +0300 Subject: [PATCH 062/111] test(mb1): enforce static embed contract --- internal/worker/static_embed_test.go | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/internal/worker/static_embed_test.go b/internal/worker/static_embed_test.go index aeb69156..8f515360 100644 --- a/internal/worker/static_embed_test.go +++ b/internal/worker/static_embed_test.go @@ -1,19 +1,30 @@ package worker import ( + "bytes" "io/fs" + "os" "path/filepath" "strings" "testing" ) func TestStaticEmbedIncludesUnderscoreNuxtChunks(t *testing.T) { + source, err := os.ReadFile("static.go") + if err != nil { + t.Fatalf("read static.go: %v", err) + } + if !bytes.Contains(source, []byte("//go:embed all:static\n")) && + !bytes.Contains(source, []byte("//go:embed all:static\r\n")) { + t.Fatal("static.go must contain the exact //go:embed all:static directive") + } + diskMatches, err := filepath.Glob(filepath.Join("static", "_nuxt", "_*.js")) if err != nil { t.Fatalf("glob disk underscore Nuxt chunks: %v", err) } if len(diskMatches) == 0 { - t.Skip("no underscore-prefixed generated Nuxt chunks are present in the source checkout") + return } matches, err := fs.Glob(staticSubFS, "_nuxt/_*.js") From 5449a23b2a84343c8725e2279ab1f8acf63d42f3 Mon Sep 17 00:00:00 2001 From: Kirill Turanskiy Date: Mon, 13 Jul 2026 00:43:23 +0300 Subject: [PATCH 063/111] fix(mb1): prove pre-v5 upgrade safety --- internal/db/gorm/migrations.go | 10 +- .../db/gorm/migrations_integration_test.go | 32 +- .../grpcserver/credential_migration_test.go | 166 +- .../customer/run-pre-v5-upgrade.ps1 | 55 + .../critical/recovery/pre_v5_upgrade_test.go | 52 + tests/fixtures/pre-v5/engram-v4.5.0.sql | 3028 +++++++++++++++++ tests/fixtures/pre-v5/manifest.json | 11 + 7 files changed, 3248 insertions(+), 106 deletions(-) create mode 100644 scripts/production-smoke/customer/run-pre-v5-upgrade.ps1 create mode 100644 tests/critical/recovery/pre_v5_upgrade_test.go create mode 100644 tests/fixtures/pre-v5/engram-v4.5.0.sql create mode 100644 tests/fixtures/pre-v5/manifest.json diff --git a/internal/db/gorm/migrations.go b/internal/db/gorm/migrations.go index fcbbb7a3..80e4ef35 100644 --- a/internal/db/gorm/migrations.go +++ b/internal/db/gorm/migrations.go @@ -3113,7 +3113,7 @@ WHERE utility_propagated_at IS NOT NULL`).Error AND title IS NOT NULL AND title != '' AND is_suppressed = false AND COALESCE(is_archived, 0) = 0 - AND is_superseded IS NOT TRUE + AND COALESCE(is_superseded, 0) = 0 `).Error; err != nil { return fmt.Errorf("migration 090_observations_to_static_entities: credentials INSERT: %w", err) } @@ -3139,7 +3139,7 @@ WHERE utility_propagated_at IS NOT NULL`).Error AND COALESCE(NULLIF(TRIM(narrative), ''), NULLIF(TRIM(title), '')) IS NOT NULL AND is_suppressed = false AND COALESCE(is_archived, 0) = 0 - AND is_superseded IS NOT TRUE + AND COALESCE(is_superseded, 0) = 0 `).Error; err != nil { return fmt.Errorf("migration 090_observations_to_static_entities: behavioral_rules INSERT: %w", err) } @@ -3162,7 +3162,7 @@ WHERE utility_propagated_at IS NOT NULL`).Error AND COALESCE(NULLIF(TRIM(narrative), ''), NULLIF(TRIM(title), '')) IS NOT NULL AND is_suppressed = false AND COALESCE(is_archived, 0) = 0 - AND is_superseded IS NOT TRUE + AND COALESCE(is_superseded, 0) = 0 `).Error; err != nil { return fmt.Errorf("migration 090_observations_to_static_entities: memories INSERT: %w", err) } @@ -3183,7 +3183,7 @@ WHERE utility_propagated_at IS NOT NULL`).Error FROM observations WHERE is_suppressed = false AND COALESCE(is_archived, 0) = 0 - AND is_superseded IS NOT TRUE; + AND COALESCE(is_superseded, 0) = 0; SELECT (SELECT COUNT(*) FROM credentials) + (SELECT COUNT(*) FROM memories) @@ -3203,7 +3203,7 @@ WHERE utility_propagated_at IS NOT NULL`).Error AND title IS NOT NULL AND title != '' AND is_suppressed = false AND COALESCE(is_archived, 0) = 0 - AND is_superseded IS NOT TRUE; + AND COALESCE(is_superseded, 0) = 0; IF cred_count != cred_live_count THEN RAISE EXCEPTION 'migration 090 credential invariant FAILED: credentials=% != live observations WHERE type=''credential''=% — every vault credential MUST migrate byte-for-byte', diff --git a/internal/db/gorm/migrations_integration_test.go b/internal/db/gorm/migrations_integration_test.go index 990cbf63..4d708965 100644 --- a/internal/db/gorm/migrations_integration_test.go +++ b/internal/db/gorm/migrations_integration_test.go @@ -97,7 +97,7 @@ func TestMigrationsIntegration_PatternsDropped(t *testing.T) { } } -func TestMigrationsIntegration_AddsCommandsRunColumn(t *testing.T) { +func TestMigration074_HistoricalOrderingAndFinalSchema(t *testing.T) { dsn := os.Getenv("DATABASE_DSN") if dsn == "" { t.Skip("DATABASE_DSN not set, skipping integration test") @@ -116,22 +116,22 @@ func TestMigrationsIntegration_AddsCommandsRunColumn(t *testing.T) { const dims = 2000 require.NoError(t, runMigrations(db)) - if !db.Migrator().HasTable("observations") { - t.Skip("observations table not present after v5 cleanup; migration 074 is historical-only") + var positions struct { + Migration074 int + Migration090 int + Migration099 int } - - require.NoError(t, db.Exec(`ALTER TABLE observations DROP COLUMN IF EXISTS commands_run`).Error) - require.NoError(t, db.Exec(`DELETE FROM migrations WHERE id = ?`, "074_observations_commands_run").Error) - require.NoError(t, runMigrations(db)) - - var dataType string - err = db.Raw(` - SELECT data_type - FROM information_schema.columns - WHERE table_name = 'observations' AND column_name = 'commands_run' - `).Row().Scan(&dataType) - require.NoError(t, err) - require.Equal(t, "jsonb", dataType) + require.NoError(t, db.Raw(` + SELECT + COALESCE(array_position(array_agg(id ORDER BY id), '074_observations_commands_run'), 0) AS migration074, + COALESCE(array_position(array_agg(id ORDER BY id), '090_observations_to_static_entities'), 0) AS migration090, + COALESCE(array_position(array_agg(id ORDER BY id), '099_drop_observations'), 0) AS migration099 + FROM migrations + `).Scan(&positions).Error) + require.Positive(t, positions.Migration074) + require.Greater(t, positions.Migration090, positions.Migration074) + require.Greater(t, positions.Migration099, positions.Migration090) + require.False(t, db.Migrator().HasTable("observations"), "fresh current schema must not recreate the v5-demolished observations table") } // TestMigration125_AddPrivacyScope verifies migration 125_privacy_scope_addition diff --git a/internal/grpcserver/credential_migration_test.go b/internal/grpcserver/credential_migration_test.go index 65192fc1..7940d9e8 100644 --- a/internal/grpcserver/credential_migration_test.go +++ b/internal/grpcserver/credential_migration_test.go @@ -1,3 +1,5 @@ +//go:build legacyupgrade + package grpcserver import ( @@ -39,18 +41,12 @@ import ( // - Failure of this test BLOCKS Commit G (drop observations migration). // Commit G must not land until F-1 is green in CI. // -// Scope: ONE new test file, no new production code. Uses existing exported -// APIs only: crypto.NewVault, crypto.Vault.Encrypt/Decrypt, gorm.Store, -// gorm.NewCredentialStore, gorm.CredentialStore.Get/CountWithDifferentFingerprint. -// -// Prerequisite: DATABASE_DSN env var pointing at a Postgres instance with the -// pgvector extension (matches the main migration test harness). If unset, the -// test skips. +// Prerequisite: DATABASE_DSN must point at a disposable database restored from +// the pinned v4.5.0 fixture. The dedicated legacyupgrade gate fails rather than +// skipping when that contract is not met. func TestCredentialDecryptRoundTripAfterMigration(t *testing.T) { dsn := os.Getenv("DATABASE_DSN") - if dsn == "" { - t.Skip("DATABASE_DSN not set, skipping F-1 decrypt round-trip integration test") - } + require.NotEmpty(t, dsn, "legacyupgrade gate requires DATABASE_DSN restored from tests/fixtures/pre-v5/engram-v4.5.0.sql") db, err := enggorm.Open(postgres.Open(dsn), &enggorm.Config{ Logger: logger.Default.LogMode(logger.Silent), @@ -62,38 +58,18 @@ func TestCredentialDecryptRoundTripAfterMigration(t *testing.T) { require.NoError(t, sqlDB.Ping()) defer sqlDB.Close() - // Apply all migrations so tables exist. runMigrations is package-private to - // internal/db/gorm, so we call it via the exported wrapper (NewStore invokes - // the same migrator). Capture the returned *Store so its internal sql.DB pool - // is closeable. - gormStore, err := localgorm.NewStore(localgorm.Config{ - DSN: dsn, - LogLevel: logger.Silent, - }) - require.NoError(t, err, "NewStore (applies migrations)") - defer gormStore.Close() - - // Skip when the observations table no longer exists. - // - // This test was written to gate migration 090 (observations → credentials - // data migration) before migration 099 (DROP TABLE observations) shipped. - // In v5 (US3 PR-B) migration 099 is now in the standard migration chain, - // so any database that has run all migrations does not have an observations - // table — the code path this test exercises has been permanently applied. - // Running the test against a post-v5 DB would fail with - // "relation observations does not exist" on the INSERT statements below, - // which is not a signal about correctness — it is a signal that the - // migration is done. Skip instead of failing. + // This tagged gate starts from the checksum-pinned v4.5.0 fixture. Ordinary + // suites never recreate this demolished table and contain no legacy skip. var obsExists bool if err := db.Raw( `SELECT EXISTS (SELECT 1 FROM information_schema.tables WHERE table_schema='public' AND table_name='observations')`, ).Scan(&obsExists).Error; err != nil { t.Fatalf("check observations table: %v", err) } - if !obsExists { - t.Skip("observations table not present (migration 099 has already dropped it — " + - "this test only applies to databases migrated before v5 US3 PR-B)") - } + require.True(t, obsExists, "legacy fixture must contain observations before candidate migration") + var migrationCount int64 + require.NoError(t, db.Table("migrations").Count(&migrationCount).Error) + require.Equal(t, int64(82), migrationCount, "fixture must be the exact v4.5.0 migration state") // Deterministic 32-byte test key so the test is reproducible and does not // depend on the Docker vault.key or the production fingerprint. @@ -111,15 +87,28 @@ func TestCredentialDecryptRoundTripAfterMigration(t *testing.T) { testProject := fmt.Sprintf("f1-decrypt-roundtrip-%d", time.Now().UnixNano()) const badFP = "wrongfingerprint" // 16 hex chars, mismatches goodFP - // Clean up any prior test rows for this slug (defensive — slug includes a - // nanosecond stamp so collisions are unlikely, but belt-and-suspenders - // matters for a hard gate). - defer func() { - db.Exec(`DELETE FROM credentials WHERE project = ?`, testProject) - db.Exec(`DELETE FROM observations WHERE project = ?`, testProject) - }() - db.Exec(`DELETE FROM credentials WHERE project = ?`, testProject) - db.Exec(`DELETE FROM observations WHERE project = ?`, testProject) + if os.Getenv("ENGRAM_PRE_V5_TEST_MODE") == "interrupted" { + ciphertext, encErr := vault.Encrypt("interrupted-upgrade-secret") + require.NoError(t, encErr) + require.NoError(t, db.Exec(` + INSERT INTO observations (project, sdk_session_id, type, title, encrypted_secret, + encryption_key_fingerprint, created_at, created_at_epoch, is_suppressed, is_archived, is_superseded) + VALUES (?, 'interrupted', 'credential', 'timestamp-overflow', ?, ?, ?, 9223372036854775807, false, 0, 0)`, + testProject, ciphertext, goodFP, time.Now().UTC().Format(time.RFC3339Nano)).Error) + failedStore, migrateErr := localgorm.NewStore(localgorm.Config{DSN: dsn, LogLevel: logger.Silent}) + if failedStore != nil { + _ = failedStore.Close() + } + require.Error(t, migrateErr, "an invalid legacy timestamp must fail the upgrade") + require.True(t, db.Migrator().HasTable("observations"), "failed migration 090 must preserve the legacy source table") + var applied090 int64 + require.NoError(t, db.Table("migrations").Where("id = ?", "090_observations_to_static_entities").Count(&applied090).Error) + require.Zero(t, applied090, "failed migration 090 must not advance its ledger entry") + var copied int64 + require.NoError(t, db.Table("credentials").Where("project = ?", testProject).Count(&copied).Error) + require.Zero(t, copied, "failed migration 090 must roll back partial credential copies") + return + } // --- Diverse plaintexts to exercise byte-preservation corner cases. --- // Each entry produces one observation row with type='credential'. @@ -202,7 +191,7 @@ func TestCredentialDecryptRoundTripAfterMigration(t *testing.T) { ct, goodFP, now.Format(time.RFC3339Nano), - now.Unix(), + now.UnixMilli(), ).Error, "insert observation for case %q", tc.name, ) @@ -277,7 +266,7 @@ func TestCredentialDecryptRoundTripAfterMigration(t *testing.T) { ct, goodFP, time.Now().UTC().Format(time.RFC3339Nano), - time.Now().Unix(), + time.Now().UnixMilli(), ).Error, "insert excluded observation %q", ec.keyName, ) @@ -306,48 +295,39 @@ func TestCredentialDecryptRoundTripAfterMigration(t *testing.T) { []byte("orphaned-ciphertext-not-decryptable-with-good-key-placeholder"), badFP, time.Now().UTC().Format(time.RFC3339Nano), - time.Now().Unix(), + time.Now().UnixMilli(), ).Error, "insert orphan observation with bad fingerprint", ) - // --- Phase 2: run the migration-090 credentials INSERT against our seeded rows. --- - // - // SQL is copy-pasted verbatim from internal/db/gorm/migrations.go migration - // 090 (step 1 — credentials). We scope it to our testProject so production - // data and other tests are not affected. Scoping the INSERT is safe because - // migration 090 itself has no project predicate — it migrates everything — - // and we only need a subset that we can verify end-to-end without touching - // other rows. - // - // Anti-drift note: if migration 090 changes its SELECT columns, this test - // will fail to reproduce the prod migration shape and must be updated in - // lockstep. The CI pipeline runs both together, so drift is detected. - // IMPORTANT: this SQL must stay in sync with migration 090 step 1 in - // internal/db/gorm/migrations.go. The only intentional delta is the trailing - // "AND project = ?" predicate which scopes the INSERT to testProject rows only. - // If migration 090 changes its column list or expressions, update here in lockstep. - credInsertSQL := ` - INSERT INTO credentials (project, key, encrypted_secret, encryption_key_fingerprint, scope, created_at, updated_at) - SELECT - project, - title AS key, - encrypted_secret, - encryption_key_fingerprint, - COALESCE(NULLIF(scope, ''), 'project') AS scope, - TO_TIMESTAMP(created_at_epoch / 1000.0) AS created_at, - TO_TIMESTAMP(created_at_epoch / 1000.0) AS updated_at - FROM observations - WHERE type = 'credential' - AND encrypted_secret IS NOT NULL - AND encryption_key_fingerprint IS NOT NULL - AND title IS NOT NULL AND title != '' - AND is_suppressed = false - AND COALESCE(is_archived, 0) = 0 - AND COALESCE(is_superseded, 0) = 0 - AND project = ? - ` - require.NoError(t, db.Exec(credInsertSQL, testProject).Error, "re-run migration 090 credentials INSERT") + for _, legacy := range []struct { + title string + narrative string + concepts string + }{ + {title: "legacy-memory", narrative: "memory preserved across pre-v5 upgrade", concepts: `["upgrade"]`}, + {title: "legacy-rule", narrative: "rule preserved across pre-v5 upgrade", concepts: `["always-inject"]`}, + } { + require.NoError(t, db.Exec(` + INSERT INTO observations (project, sdk_session_id, type, title, narrative, concepts, + created_at, created_at_epoch, is_suppressed, is_archived, is_superseded) + VALUES (?, ?, 'guidance', ?, ?, ?::jsonb, ?, ?, false, 0, 0)`, + testProject, "legacy-"+legacy.title, legacy.title, legacy.narrative, legacy.concepts, + time.Now().UTC().Format(time.RFC3339Nano), time.Now().UnixMilli()).Error) + } + + // --- Phase 2: run the real current migration chain over the historical fixture. --- + gormStore, err := localgorm.NewStore(localgorm.Config{DSN: dsn, LogLevel: logger.Silent}) + require.NoError(t, err, "upgrade v4.5.0 fixture with current migrations") + defer gormStore.Close() + require.False(t, db.Migrator().HasTable("observations"), "migration 099 must drop observations only after migration 090 commits") + + var migratedMemories int64 + require.NoError(t, db.Table("memories").Where("project = ?", testProject).Count(&migratedMemories).Error) + require.Equal(t, int64(1), migratedMemories, "the ordinary legacy row must survive as a memory") + var migratedRules int64 + require.NoError(t, db.Table("behavioral_rules").Where("project = ?", testProject).Count(&migratedRules).Error) + require.Equal(t, int64(1), migratedRules, "the always-inject legacy row must also survive as a behavioral rule") // --- Phase 3: read via CredentialStore and decrypt via vault. --- store := &localgorm.Store{DB: db} @@ -451,4 +431,20 @@ func TestCredentialDecryptRoundTripAfterMigration(t *testing.T) { _, err = vault.Decrypt(tampered) require.Error(t, err, "decrypt of tampered ciphertext must fail (GCM auth)") }) + + t.Run("wrong_key_fails_decrypt", func(t *testing.T) { + wrongVault, err := crypto.NewVault(&config.Config{EncryptionKey: "bb110102030405060708090a0b0c0d0e1f20212223242526272829aabbccddee"}) + require.NoError(t, err) + got, err := credStore.Get(ctx, testProject, cases[0].key) + require.NoError(t, err) + _, err = wrongVault.Decrypt(got.EncryptedSecret) + require.Error(t, err, "a different vault key must not decrypt migrated ciphertext") + }) + + restarted, err := localgorm.NewStore(localgorm.Config{DSN: dsn, LogLevel: logger.Silent}) + require.NoError(t, err, "current schema must reopen cleanly after the upgrade") + restartedCredential, err := localgorm.NewCredentialStore(restarted).Get(ctx, testProject, cases[0].key) + require.NoError(t, err, "current credential read must survive restart") + require.Equal(t, ciphertexts[0], restartedCredential.EncryptedSecret) + require.NoError(t, restarted.Close()) } diff --git a/scripts/production-smoke/customer/run-pre-v5-upgrade.ps1 b/scripts/production-smoke/customer/run-pre-v5-upgrade.ps1 new file mode 100644 index 00000000..0dc4c9bc --- /dev/null +++ b/scripts/production-smoke/customer/run-pre-v5-upgrade.ps1 @@ -0,0 +1,55 @@ +param( + [string]$Container = "engram-prc-postgres", + [string]$DatabaseUser = "engram", + [string]$DatabasePassword = "engram", + [string]$HostName = "127.0.0.1", + [int]$Port = 55432 +) + +$ErrorActionPreference = "Stop" +$repo = (Resolve-Path (Join-Path $PSScriptRoot "..\..\..")).Path +$fixture = Join-Path $repo "tests\fixtures\pre-v5\engram-v4.5.0.sql" +$manifest = Get-Content -Raw (Join-Path $repo "tests\fixtures\pre-v5\manifest.json") | ConvertFrom-Json +$actualHash = (Get-FileHash -Algorithm SHA256 $fixture).Hash.ToLowerInvariant() +if ($actualHash -ne $manifest.fixture_sha256) { + throw "pre-v5 fixture checksum mismatch: got $actualHash" +} +$tagObject = (git -C $repo rev-parse $manifest.source_tag).Trim() +$sourceCommit = (git -C $repo rev-parse "$($manifest.source_tag)^{}" ).Trim() +$sourceMigrationsBlob = (git -C $repo rev-parse "$($manifest.source_tag):internal/db/gorm/migrations.go").Trim() +if ($tagObject -ne $manifest.tag_object -or $sourceCommit -ne $manifest.source_commit -or $sourceMigrationsBlob -ne $manifest.source_migrations_blob) { + throw "pre-v5 source tag provenance mismatch" +} + +$stamp = "{0}_{1}" -f $PID, [DateTimeOffset]::UtcNow.ToUnixTimeMilliseconds() +$containerFixture = "/tmp/engram-pre-v5-$stamp.sql" +docker cp $fixture "${Container}:$containerFixture" | Out-Null +if ($LASTEXITCODE -ne 0) { throw "docker cp fixture failed" } + +try { + foreach ($mode in @("happy", "interrupted")) { + $database = "engram_pre_v5_${mode}_$stamp" + docker exec $Container psql -U $DatabaseUser -d postgres -v ON_ERROR_STOP=1 -c "CREATE DATABASE $database OWNER $DatabaseUser" | Out-Null + if ($LASTEXITCODE -ne 0) { throw "create $database failed" } + try { + docker exec $Container psql -U $DatabaseUser -d $database -v ON_ERROR_STOP=1 -f $containerFixture | Out-Null + if ($LASTEXITCODE -ne 0) { throw "restore $database failed" } + $env:DATABASE_DSN = "postgres://${DatabaseUser}:${DatabasePassword}@${HostName}:${Port}/${database}?sslmode=disable" + $env:ENGRAM_PRE_V5_TEST_MODE = $mode + go test -tags=legacyupgrade ./internal/grpcserver -run '^TestCredentialDecryptRoundTripAfterMigration$' -count=1 -v + if ($LASTEXITCODE -ne 0) { throw "legacyupgrade $mode gate failed" } + } + finally { + docker exec $Container psql -U $DatabaseUser -d postgres -v ON_ERROR_STOP=1 -c "DROP DATABASE IF EXISTS $database WITH (FORCE)" | Out-Null + } + } +} +finally { + docker exec -u 0 $Container rm -f $containerFixture | Out-Null + Remove-Item Env:DATABASE_DSN -ErrorAction SilentlyContinue + Remove-Item Env:ENGRAM_PRE_V5_TEST_MODE -ErrorAction SilentlyContinue +} + +$residue = docker exec $Container psql -U $DatabaseUser -d postgres -Atc "SELECT count(*) FROM pg_database WHERE datname LIKE 'engram_pre_v5_%_$stamp'" +if ($residue.Trim() -ne "0") { throw "pre-v5 database residue remains: $residue" } +Write-Output "PRE_V5_UPGRADE_PASS fixture=$actualHash modes=happy,interrupted residue=0" diff --git a/tests/critical/recovery/pre_v5_upgrade_test.go b/tests/critical/recovery/pre_v5_upgrade_test.go new file mode 100644 index 00000000..da49ac72 --- /dev/null +++ b/tests/critical/recovery/pre_v5_upgrade_test.go @@ -0,0 +1,52 @@ +//go:build critical + +package recovery_test + +import ( + "crypto/sha256" + "encoding/hex" + "encoding/json" + "os" + "path/filepath" + "runtime" + "testing" +) + +// @critical +// @category: data-consistency +// @features: [pre-v5-upgrade] +// @dev_stand: required +func TestPreV5UpgradeFixtureProvenance(t *testing.T) { + _, file, _, ok := runtime.Caller(0) + if !ok { + t.Fatal("resolve test source") + } + repo := filepath.Clean(filepath.Join(filepath.Dir(file), "..", "..", "..")) + type fixtureManifest struct { + SourceTag string `json:"source_tag"` + SourceCommit string `json:"source_commit"` + LastMigration string `json:"last_migration"` + MigrationCount int `json:"migration_count"` + Fixture string `json:"fixture"` + FixtureSHA256 string `json:"fixture_sha256"` + } + manifestBytes, err := os.ReadFile(filepath.Join(repo, "tests", "fixtures", "pre-v5", "manifest.json")) + if err != nil { + t.Fatal(err) + } + var manifest fixtureManifest + if err := json.Unmarshal(manifestBytes, &manifest); err != nil { + t.Fatal(err) + } + if manifest.SourceTag != "v4.5.0" || manifest.SourceCommit == "" || manifest.LastMigration != "082_projects_lifecycle" || manifest.MigrationCount != 82 { + t.Fatalf("invalid pre-v5 provenance: %#v", manifest) + } + fixture, err := os.ReadFile(filepath.Join(repo, "tests", "fixtures", "pre-v5", manifest.Fixture)) + if err != nil { + t.Fatal(err) + } + digest := sha256.Sum256(fixture) + if got := hex.EncodeToString(digest[:]); got != manifest.FixtureSHA256 { + t.Fatalf("pre-v5 fixture checksum = %s, want %s", got, manifest.FixtureSHA256) + } +} diff --git a/tests/fixtures/pre-v5/engram-v4.5.0.sql b/tests/fixtures/pre-v5/engram-v4.5.0.sql new file mode 100644 index 00000000..46e9abb6 --- /dev/null +++ b/tests/fixtures/pre-v5/engram-v4.5.0.sql @@ -0,0 +1,3028 @@ +-- +-- PostgreSQL database dump +-- + +\restrict GKgwz0mQo1LQTCewMYkbGpvBvO4ne6nkmZlHTgLn4c8wGNcYoO9uMIoXU0oQxmF + +-- Dumped from database version 17.10 +-- Dumped by pg_dump version 17.10 + +SET statement_timeout = 0; +SET lock_timeout = 0; +SET idle_in_transaction_session_timeout = 0; +SET transaction_timeout = 0; +SET client_encoding = 'UTF8'; +SET standard_conforming_strings = on; +SELECT pg_catalog.set_config('search_path', '', false); +SET check_function_bodies = false; +SET xmloption = content; +SET client_min_messages = warning; +SET row_security = off; + +-- +-- Name: vector; Type: EXTENSION; Schema: -; Owner: - +-- + +CREATE EXTENSION IF NOT EXISTS vector WITH SCHEMA public; + + +-- +-- Name: EXTENSION vector; Type: COMMENT; Schema: -; Owner: - +-- + +COMMENT ON EXTENSION vector IS 'vector data type and ivfflat and hnsw access methods'; + + +SET default_tablespace = ''; + +SET default_table_access_method = heap; + +-- +-- Name: agent_observation_stats; Type: TABLE; Schema: public; Owner: - +-- + +CREATE TABLE public.agent_observation_stats ( + agent_id text NOT NULL, + observation_id bigint NOT NULL, + injections integer DEFAULT 0 NOT NULL, + successes integer DEFAULT 0 NOT NULL, + updated_at timestamp with time zone DEFAULT now() NOT NULL +); + + +-- +-- Name: api_tokens; Type: TABLE; Schema: public; Owner: - +-- + +CREATE TABLE public.api_tokens ( + id uuid DEFAULT gen_random_uuid() NOT NULL, + name text NOT NULL, + token_hash text NOT NULL, + token_prefix text NOT NULL, + scope text DEFAULT 'read-write'::text NOT NULL, + created_at timestamp with time zone DEFAULT now() NOT NULL, + last_used_at timestamp with time zone, + request_count bigint DEFAULT 0 NOT NULL, + error_count bigint DEFAULT 0 NOT NULL, + revoked boolean DEFAULT false NOT NULL, + revoked_at timestamp with time zone +); + + +-- +-- Name: concept_weights; Type: TABLE; Schema: public; Owner: - +-- + +CREATE TABLE public.concept_weights ( + concept text NOT NULL, + updated_at text NOT NULL, + weight real DEFAULT 0.1 NOT NULL +); + + +-- +-- Name: content; Type: TABLE; Schema: public; Owner: - +-- + +CREATE TABLE public.content ( + hash text NOT NULL, + doc text NOT NULL, + created_at timestamp with time zone DEFAULT now() NOT NULL +); + + +-- +-- Name: content_chunks; Type: TABLE; Schema: public; Owner: - +-- + +CREATE TABLE public.content_chunks ( + hash text NOT NULL, + seq integer NOT NULL, + pos integer NOT NULL, + model text NOT NULL, + embedding public.vector(1536), + created_at timestamp with time zone DEFAULT now() NOT NULL, + text text DEFAULT ''::text NOT NULL +); + + +-- +-- Name: documents; Type: TABLE; Schema: public; Owner: - +-- + +CREATE TABLE public.documents ( + id bigint NOT NULL, + collection text NOT NULL, + path text NOT NULL, + title text, + hash text, + active boolean DEFAULT true NOT NULL, + created_at timestamp with time zone DEFAULT now() NOT NULL, + updated_at timestamp with time zone DEFAULT now() NOT NULL, + search_vector tsvector GENERATED ALWAYS AS (to_tsvector('english'::regconfig, ((COALESCE(path, ''::text) || ' '::text) || COALESCE(title, ''::text)))) STORED +); + + +-- +-- Name: documents_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE public.documents_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- Name: documents_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + +ALTER SEQUENCE public.documents_id_seq OWNED BY public.documents.id; + + +-- +-- Name: indexed_sessions; Type: TABLE; Schema: public; Owner: - +-- + +CREATE TABLE public.indexed_sessions ( + id text NOT NULL, + workstation_id text NOT NULL, + project_id text NOT NULL, + project_path text, + git_branch text, + first_msg_at timestamp with time zone, + last_msg_at timestamp with time zone, + exchange_count integer DEFAULT 0, + tool_counts jsonb, + topics jsonb, + content text, + file_mtime timestamp with time zone, + indexed_at timestamp with time zone DEFAULT now(), + tsv tsvector GENERATED ALWAYS AS (to_tsvector('english'::regconfig, COALESCE(content, ''::text))) STORED +); + + +-- +-- Name: injection_log; Type: TABLE; Schema: public; Owner: - +-- + +CREATE TABLE public.injection_log ( + id bigint NOT NULL, + observation_id bigint NOT NULL, + project text DEFAULT ''::text NOT NULL, + task_context text DEFAULT ''::text NOT NULL, + session_id text DEFAULT ''::text NOT NULL, + created_at timestamp with time zone DEFAULT now() NOT NULL, + cited boolean DEFAULT false +); + + +-- +-- Name: injection_log_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE public.injection_log_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- Name: injection_log_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + +ALTER SEQUENCE public.injection_log_id_seq OWNED BY public.injection_log.id; + + +-- +-- Name: invitations; Type: TABLE; Schema: public; Owner: - +-- + +CREATE TABLE public.invitations ( + id integer NOT NULL, + code character varying(64) NOT NULL, + created_by integer NOT NULL, + used_by integer, + used_at timestamp without time zone, + created_at timestamp without time zone DEFAULT now() NOT NULL +); + + +-- +-- Name: invitations_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE public.invitations_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- Name: invitations_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + +ALTER SEQUENCE public.invitations_id_seq OWNED BY public.invitations.id; + + +-- +-- Name: issue_comments; Type: TABLE; Schema: public; Owner: - +-- + +CREATE TABLE public.issue_comments ( + id bigint NOT NULL, + issue_id bigint NOT NULL, + author_project text NOT NULL, + author_agent text, + body text NOT NULL, + created_at timestamp with time zone DEFAULT now() NOT NULL +); + + +-- +-- Name: issue_comments_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE public.issue_comments_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- Name: issue_comments_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + +ALTER SEQUENCE public.issue_comments_id_seq OWNED BY public.issue_comments.id; + + +-- +-- Name: issues; Type: TABLE; Schema: public; Owner: - +-- + +CREATE TABLE public.issues ( + id bigint NOT NULL, + title text NOT NULL, + body text, + status text DEFAULT 'open'::text NOT NULL, + priority text DEFAULT 'medium'::text NOT NULL, + source_project text NOT NULL, + target_project text NOT NULL, + source_agent text, + created_by_session text, + labels jsonb DEFAULT '[]'::jsonb, + acknowledged_at timestamp with time zone, + resolved_at timestamp with time zone, + reopened_at timestamp with time zone, + created_at timestamp with time zone DEFAULT now() NOT NULL, + updated_at timestamp with time zone DEFAULT now() NOT NULL, + closed_at timestamp with time zone, + type text DEFAULT 'task'::text NOT NULL, + CONSTRAINT issues_priority_check CHECK ((priority = ANY (ARRAY['critical'::text, 'high'::text, 'medium'::text, 'low'::text]))), + CONSTRAINT issues_status_check CHECK ((status = ANY (ARRAY['open'::text, 'acknowledged'::text, 'resolved'::text, 'reopened'::text, 'closed'::text, 'rejected'::text]))), + CONSTRAINT issues_type_check CHECK ((type = ANY (ARRAY['bug'::text, 'feature'::text, 'improvement'::text, 'task'::text]))) +); + + +-- +-- Name: issues_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE public.issues_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- Name: issues_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + +ALTER SEQUENCE public.issues_id_seq OWNED BY public.issues.id; + + +-- +-- Name: migrations; Type: TABLE; Schema: public; Owner: - +-- + +CREATE TABLE public.migrations ( + id character varying(255) NOT NULL +); + + +-- +-- Name: observation_conflicts; Type: TABLE; Schema: public; Owner: - +-- + +CREATE TABLE public.observation_conflicts ( + conflict_type text NOT NULL, + resolution text NOT NULL, + detected_at text NOT NULL, + reason text, + resolved_at text, + id bigint NOT NULL, + newer_obs_id bigint NOT NULL, + older_obs_id bigint NOT NULL, + detected_at_epoch bigint NOT NULL, + resolved bigint DEFAULT 0, + CONSTRAINT chk_observation_conflicts_conflict_type CHECK ((conflict_type = ANY (ARRAY['superseded'::text, 'contradicts'::text, 'outdated_pattern'::text]))), + CONSTRAINT chk_observation_conflicts_resolution CHECK ((resolution = ANY (ARRAY['prefer_newer'::text, 'prefer_older'::text, 'manual'::text]))) +); + + +-- +-- Name: observation_conflicts_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE public.observation_conflicts_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- Name: observation_conflicts_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + +ALTER SEQUENCE public.observation_conflicts_id_seq OWNED BY public.observation_conflicts.id; + + +-- +-- Name: observation_injections; Type: TABLE; Schema: public; Owner: - +-- + +CREATE TABLE public.observation_injections ( + id bigint NOT NULL, + observation_id bigint NOT NULL, + session_id text NOT NULL, + injection_section text NOT NULL, + injected_at timestamp with time zone DEFAULT now() NOT NULL +); + + +-- +-- Name: observation_injections_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE public.observation_injections_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- Name: observation_injections_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + +ALTER SEQUENCE public.observation_injections_id_seq OWNED BY public.observation_injections.id; + + +-- +-- Name: observation_relations; Type: TABLE; Schema: public; Owner: - +-- + +CREATE TABLE public.observation_relations ( + relation_type text NOT NULL, + detection_source text NOT NULL, + created_at text NOT NULL, + reason text, + id bigint NOT NULL, + source_id bigint NOT NULL, + target_id bigint NOT NULL, + confidence real DEFAULT 0.5 NOT NULL, + created_at_epoch bigint NOT NULL, + valid_from timestamp with time zone, + valid_to timestamp with time zone, + CONSTRAINT chk_observation_relations_detection_source CHECK ((detection_source = ANY (ARRAY['file_overlap'::text, 'embedding_similarity'::text, 'temporal_proximity'::text, 'narrative_mention'::text, 'concept_overlap'::text, 'type_progression'::text, 'creative_association'::text]))), + CONSTRAINT chk_observation_relations_relation_type CHECK ((relation_type = ANY (ARRAY['causes'::text, 'fixes'::text, 'supersedes'::text, 'depends_on'::text, 'relates_to'::text, 'evolves_from'::text, 'leads_to'::text, 'similar_to'::text, 'contradicts'::text, 'reinforces'::text, 'invalidated_by'::text, 'explains'::text, 'shares_theme'::text, 'parallel_context'::text, 'summarizes'::text, 'part_of'::text, 'prefers_over'::text, 'modifies'::text, 'reads'::text, 'follows'::text, 'prompted_by'::text, 'references'::text, 'referenced_by'::text]))) +); + + +-- +-- Name: observation_relations_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE public.observation_relations_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- Name: observation_relations_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + +ALTER SEQUENCE public.observation_relations_id_seq OWNED BY public.observation_relations.id; + + +-- +-- Name: observation_versions; Type: TABLE; Schema: public; Owner: - +-- + +CREATE TABLE public.observation_versions ( + id bigint NOT NULL, + observation_id bigint NOT NULL, + version integer DEFAULT 1 NOT NULL, + narrative text NOT NULL, + is_active boolean DEFAULT true NOT NULL, + created_at timestamp with time zone DEFAULT now() NOT NULL, + source text DEFAULT 'original'::text NOT NULL +); + + +-- +-- Name: observation_versions_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE public.observation_versions_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- Name: observation_versions_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + +ALTER SEQUENCE public.observation_versions_id_seq OWNED BY public.observation_versions.id; + + +-- +-- Name: observations; Type: TABLE; Schema: public; Owner: - +-- + +CREATE TABLE public.observations ( + file_mtimes text, + sdk_session_id text NOT NULL, + project text NOT NULL, + scope text DEFAULT 'project'::text, + agent_id text DEFAULT ''::text, + agent_source text DEFAULT 'unknown'::text, + type text NOT NULL, + memory_type text, + source_type text, + created_at text NOT NULL, + facts text, + rejected jsonb DEFAULT '[]'::jsonb, + narrative text, + concepts jsonb, + files_read jsonb, + files_modified jsonb, + commands_run jsonb, + subtitle text, + title text, + archived_reason text, + score_updated_at_epoch bigint, + prompt_number bigint, + archived_at_epoch bigint, + last_retrieved_at_epoch bigint, + id bigint NOT NULL, + importance_score real DEFAULT 1, + utility_score real DEFAULT 0.5, + user_feedback bigint DEFAULT 0 NOT NULL, + is_suppressed boolean DEFAULT false NOT NULL, + retrieval_count bigint DEFAULT 0, + injection_count bigint DEFAULT 0, + created_at_epoch bigint NOT NULL, + discovery_tokens bigint DEFAULT 0, + is_superseded bigint DEFAULT 0, + is_archived bigint DEFAULT 0, + encrypted_secret bytea, + encryption_key_fingerprint text, + expires_at timestamp with time zone, + ttl_days integer, + status text DEFAULT 'active'::text, + status_reason text, + effectiveness_score real DEFAULT 0, + effectiveness_injections bigint DEFAULT 0, + effectiveness_successes bigint DEFAULT 0, + enrichment_level integer DEFAULT 0 NOT NULL, + source_event_ids bigint[], + raw_content text, + search_vector tsvector GENERATED ALWAYS AS ((to_tsvector('english'::regconfig, ((((COALESCE(title, ''::text) || ' '::text) || COALESCE(subtitle, ''::text)) || ' '::text) || COALESCE(narrative, ''::text))) || to_tsvector('simple'::regconfig, ((((COALESCE(title, ''::text) || ' '::text) || COALESCE(subtitle, ''::text)) || ' '::text) || COALESCE(narrative, ''::text))))) STORED, + CONSTRAINT chk_observations_agent_source CHECK ((agent_source = ANY (ARRAY['claude-code'::text, 'codex'::text, 'gemini'::text, 'other'::text, 'unknown'::text]))), + CONSTRAINT chk_observations_scope CHECK ((scope = ANY (ARRAY['project'::text, 'global'::text, 'agent'::text]))), + CONSTRAINT chk_observations_type CHECK ((type = ANY (ARRAY['decision'::text, 'bugfix'::text, 'feature'::text, 'refactor'::text, 'discovery'::text, 'change'::text, 'guidance'::text, 'credential'::text, 'entity'::text, 'wiki'::text, 'pitfall'::text, 'operational'::text, 'timeline'::text]))) +); + + +-- +-- Name: observations_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE public.observations_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- Name: observations_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + +ALTER SEQUENCE public.observations_id_seq OWNED BY public.observations.id; + + +-- +-- Name: patterns; Type: TABLE; Schema: public; Owner: - +-- + +CREATE TABLE public.patterns ( + status text DEFAULT 'active'::text, + name text NOT NULL, + type text NOT NULL, + created_at text NOT NULL, + last_seen_at text NOT NULL, + signature text, + projects text, + observation_ids text, + recommendation text, + description text, + merged_into_id bigint, + frequency bigint DEFAULT 1, + confidence real DEFAULT 0.5, + id bigint NOT NULL, + last_seen_at_epoch bigint NOT NULL, + created_at_epoch bigint NOT NULL, + search_vector tsvector GENERATED ALWAYS AS (to_tsvector('english'::regconfig, ((((COALESCE(name, ''::text) || ' '::text) || COALESCE(description, ''::text)) || ' '::text) || COALESCE(recommendation, ''::text)))) STORED, + CONSTRAINT chk_patterns_status CHECK ((status = ANY (ARRAY['active'::text, 'deprecated'::text, 'merged'::text]))), + CONSTRAINT chk_patterns_type CHECK ((type = ANY (ARRAY['bug'::text, 'refactor'::text, 'architecture'::text, 'anti-pattern'::text, 'best-practice'::text]))) +); + + +-- +-- Name: patterns_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE public.patterns_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- Name: patterns_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + +ALTER SEQUENCE public.patterns_id_seq OWNED BY public.patterns.id; + + +-- +-- Name: project_settings; Type: TABLE; Schema: public; Owner: - +-- + +CREATE TABLE public.project_settings ( + project text NOT NULL, + relevance_threshold double precision DEFAULT 0.3 NOT NULL, + feedback_count integer DEFAULT 0 NOT NULL, + updated_at timestamp with time zone DEFAULT now() NOT NULL +); + + +-- +-- Name: projects; Type: TABLE; Schema: public; Owner: - +-- + +CREATE TABLE public.projects ( + id text NOT NULL, + git_remote text, + relative_path text, + legacy_ids text[], + display_name text, + created_at timestamp with time zone DEFAULT now() NOT NULL, + removed_at timestamp with time zone, + last_heartbeat timestamp with time zone DEFAULT now() +); + + +-- +-- Name: raw_events; Type: TABLE; Schema: public; Owner: - +-- + +CREATE TABLE public.raw_events ( + id bigint NOT NULL, + session_id text NOT NULL, + tool_name text NOT NULL, + tool_input jsonb, + tool_result jsonb, + created_at_epoch bigint DEFAULT ((EXTRACT(epoch FROM now()) * (1000)::numeric))::bigint NOT NULL, + project text DEFAULT ''::text NOT NULL, + workstation_id text DEFAULT ''::text NOT NULL, + processed boolean DEFAULT false NOT NULL +); + + +-- +-- Name: raw_events_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE public.raw_events_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- Name: raw_events_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + +ALTER SEQUENCE public.raw_events_id_seq OWNED BY public.raw_events.id; + + +-- +-- Name: reasoning_traces; Type: TABLE; Schema: public; Owner: - +-- + +CREATE TABLE public.reasoning_traces ( + id bigint NOT NULL, + sdk_session_id text NOT NULL, + project text DEFAULT ''::text NOT NULL, + steps jsonb DEFAULT '[]'::jsonb NOT NULL, + quality_score real DEFAULT 0 NOT NULL, + task_context jsonb DEFAULT '{}'::jsonb, + created_at timestamp with time zone DEFAULT now(), + created_at_epoch bigint DEFAULT 0 NOT NULL +); + + +-- +-- Name: reasoning_traces_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE public.reasoning_traces_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- Name: reasoning_traces_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + +ALTER SEQUENCE public.reasoning_traces_id_seq OWNED BY public.reasoning_traces.id; + + +-- +-- Name: retrieval_stats_log; Type: TABLE; Schema: public; Owner: - +-- + +CREATE TABLE public.retrieval_stats_log ( + id bigint NOT NULL, + project text NOT NULL, + event_type text NOT NULL, + count integer DEFAULT 1 NOT NULL, + created_at timestamp with time zone DEFAULT now() NOT NULL +); + + +-- +-- Name: retrieval_stats_log_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE public.retrieval_stats_log_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- Name: retrieval_stats_log_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + +ALTER SEQUENCE public.retrieval_stats_log_id_seq OWNED BY public.retrieval_stats_log.id; + + +-- +-- Name: sdk_sessions; Type: TABLE; Schema: public; Owner: - +-- + +CREATE TABLE public.sdk_sessions ( + claude_session_id text NOT NULL, + project text NOT NULL, + status text DEFAULT 'active'::text, + started_at text NOT NULL, + sdk_session_id text, + user_prompt text, + completed_at text, + worker_port bigint, + completed_at_epoch bigint, + outcome text, + outcome_reason text, + outcome_recorded_at timestamp with time zone, + utility_propagated_at timestamp with time zone, + injection_strategy text, + id bigint NOT NULL, + prompt_counter bigint DEFAULT 0, + started_at_epoch bigint NOT NULL, + CONSTRAINT chk_sdk_sessions_status CHECK ((status = ANY (ARRAY['active'::text, 'completed'::text, 'failed'::text]))) +); + + +-- +-- Name: sdk_sessions_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE public.sdk_sessions_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- Name: sdk_sessions_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + +ALTER SEQUENCE public.sdk_sessions_id_seq OWNED BY public.sdk_sessions.id; + + +-- +-- Name: search_misses; Type: TABLE; Schema: public; Owner: - +-- + +CREATE TABLE public.search_misses ( + id bigint NOT NULL, + project text NOT NULL, + query text NOT NULL, + created_at timestamp with time zone DEFAULT now() NOT NULL +); + + +-- +-- Name: search_misses_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE public.search_misses_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- Name: search_misses_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + +ALTER SEQUENCE public.search_misses_id_seq OWNED BY public.search_misses.id; + + +-- +-- Name: search_query_log; Type: TABLE; Schema: public; Owner: - +-- + +CREATE TABLE public.search_query_log ( + id bigint NOT NULL, + project text, + query text NOT NULL, + search_type text NOT NULL, + results integer DEFAULT 0 NOT NULL, + used_vector boolean DEFAULT false NOT NULL, + latency_ms real, + created_at timestamp with time zone DEFAULT now() NOT NULL +); + + +-- +-- Name: search_query_log_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE public.search_query_log_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- Name: search_query_log_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + +ALTER SEQUENCE public.search_query_log_id_seq OWNED BY public.search_query_log.id; + + +-- +-- Name: session_observation_injections; Type: TABLE; Schema: public; Owner: - +-- + +CREATE TABLE public.session_observation_injections ( + id bigint NOT NULL, + session_id bigint NOT NULL, + observation_id bigint NOT NULL, + injected_at timestamp with time zone DEFAULT now() NOT NULL +); + + +-- +-- Name: session_observation_injections_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE public.session_observation_injections_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- Name: session_observation_injections_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + +ALTER SEQUENCE public.session_observation_injections_id_seq OWNED BY public.session_observation_injections.id; + + +-- +-- Name: session_summaries; Type: TABLE; Schema: public; Owner: - +-- + +CREATE TABLE public.session_summaries ( + created_at text NOT NULL, + sdk_session_id text NOT NULL, + project text NOT NULL, + completed text, + investigated text, + learned text, + next_steps text, + notes text, + request text, + prompt_number bigint, + id bigint NOT NULL, + discovery_tokens bigint DEFAULT 0, + created_at_epoch bigint NOT NULL, + search_vector tsvector GENERATED ALWAYS AS (to_tsvector('english'::regconfig, ((((((((((COALESCE(request, ''::text) || ' '::text) || COALESCE(investigated, ''::text)) || ' '::text) || COALESCE(learned, ''::text)) || ' '::text) || COALESCE(completed, ''::text)) || ' '::text) || COALESCE(next_steps, ''::text)) || ' '::text) || COALESCE(notes, ''::text)))) STORED +); + + +-- +-- Name: session_summaries_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE public.session_summaries_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- Name: session_summaries_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + +ALTER SEQUENCE public.session_summaries_id_seq OWNED BY public.session_summaries.id; + + +-- +-- Name: sessions; Type: TABLE; Schema: public; Owner: - +-- + +CREATE TABLE public.sessions ( + id character varying(64) NOT NULL, + user_id integer NOT NULL, + created_at timestamp without time zone DEFAULT now() NOT NULL, + expires_at timestamp without time zone NOT NULL +); + + +-- +-- Name: system_config; Type: TABLE; Schema: public; Owner: - +-- + +CREATE TABLE public.system_config ( + key text NOT NULL, + value text NOT NULL, + updated_at timestamp with time zone DEFAULT now() NOT NULL +); + + +-- +-- Name: telemetry_snapshots; Type: TABLE; Schema: public; Owner: - +-- + +CREATE TABLE public.telemetry_snapshots ( + id bigint NOT NULL, + snapshot_type text NOT NULL, + project text DEFAULT ''::text NOT NULL, + data jsonb NOT NULL, + created_at_epoch bigint NOT NULL +); + + +-- +-- Name: telemetry_snapshots_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE public.telemetry_snapshots_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- Name: telemetry_snapshots_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + +ALTER SEQUENCE public.telemetry_snapshots_id_seq OWNED BY public.telemetry_snapshots.id; + + +-- +-- Name: user_prompts; Type: TABLE; Schema: public; Owner: - +-- + +CREATE TABLE public.user_prompts ( + claude_session_id text NOT NULL, + prompt_text text NOT NULL, + created_at text NOT NULL, + id bigint NOT NULL, + prompt_number bigint NOT NULL, + matched_observations bigint DEFAULT 0, + created_at_epoch bigint NOT NULL, + search_vector tsvector GENERATED ALWAYS AS (to_tsvector('english'::regconfig, COALESCE(prompt_text, ''::text))) STORED +); + + +-- +-- Name: user_prompts_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE public.user_prompts_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- Name: user_prompts_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + +ALTER SEQUENCE public.user_prompts_id_seq OWNED BY public.user_prompts.id; + + +-- +-- Name: users; Type: TABLE; Schema: public; Owner: - +-- + +CREATE TABLE public.users ( + id integer NOT NULL, + email character varying(255) NOT NULL, + password_hash character varying(255) DEFAULT ''::character varying NOT NULL, + role character varying(20) DEFAULT 'operator'::character varying NOT NULL, + disabled boolean DEFAULT false NOT NULL, + created_at timestamp without time zone DEFAULT now() NOT NULL, + last_login_at timestamp without time zone +); + + +-- +-- Name: users_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE public.users_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- Name: users_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + +ALTER SEQUENCE public.users_id_seq OWNED BY public.users.id; + + +-- +-- Name: vectors; Type: TABLE; Schema: public; Owner: - +-- + +CREATE TABLE public.vectors ( + doc_id text NOT NULL, + embedding public.vector(1536) NOT NULL, + sqlite_id bigint, + doc_type text, + field_type text, + project text, + scope text, + model_version text +); + + +-- +-- Name: versioned_document_comments; Type: TABLE; Schema: public; Owner: - +-- + +CREATE TABLE public.versioned_document_comments ( + id bigint NOT NULL, + document_id bigint NOT NULL, + author text NOT NULL, + content text NOT NULL, + line_start integer, + line_end integer, + status text DEFAULT 'open'::text NOT NULL, + created_at timestamp with time zone DEFAULT now() NOT NULL +); + + +-- +-- Name: versioned_document_comments_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE public.versioned_document_comments_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- Name: versioned_document_comments_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + +ALTER SEQUENCE public.versioned_document_comments_id_seq OWNED BY public.versioned_document_comments.id; + + +-- +-- Name: versioned_documents; Type: TABLE; Schema: public; Owner: - +-- + +CREATE TABLE public.versioned_documents ( + id bigint NOT NULL, + path text NOT NULL, + project text NOT NULL, + version integer DEFAULT 1 NOT NULL, + content text NOT NULL, + content_hash text NOT NULL, + doc_type text DEFAULT 'markdown'::text NOT NULL, + metadata jsonb DEFAULT '{}'::jsonb NOT NULL, + author text NOT NULL, + created_at timestamp with time zone DEFAULT now() NOT NULL +); + + +-- +-- Name: versioned_documents_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE public.versioned_documents_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- Name: versioned_documents_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + +ALTER SEQUENCE public.versioned_documents_id_seq OWNED BY public.versioned_documents.id; + + +-- +-- Name: documents id; Type: DEFAULT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.documents ALTER COLUMN id SET DEFAULT nextval('public.documents_id_seq'::regclass); + + +-- +-- Name: injection_log id; Type: DEFAULT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.injection_log ALTER COLUMN id SET DEFAULT nextval('public.injection_log_id_seq'::regclass); + + +-- +-- Name: invitations id; Type: DEFAULT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.invitations ALTER COLUMN id SET DEFAULT nextval('public.invitations_id_seq'::regclass); + + +-- +-- Name: issue_comments id; Type: DEFAULT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.issue_comments ALTER COLUMN id SET DEFAULT nextval('public.issue_comments_id_seq'::regclass); + + +-- +-- Name: issues id; Type: DEFAULT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.issues ALTER COLUMN id SET DEFAULT nextval('public.issues_id_seq'::regclass); + + +-- +-- Name: observation_conflicts id; Type: DEFAULT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.observation_conflicts ALTER COLUMN id SET DEFAULT nextval('public.observation_conflicts_id_seq'::regclass); + + +-- +-- Name: observation_injections id; Type: DEFAULT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.observation_injections ALTER COLUMN id SET DEFAULT nextval('public.observation_injections_id_seq'::regclass); + + +-- +-- Name: observation_relations id; Type: DEFAULT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.observation_relations ALTER COLUMN id SET DEFAULT nextval('public.observation_relations_id_seq'::regclass); + + +-- +-- Name: observation_versions id; Type: DEFAULT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.observation_versions ALTER COLUMN id SET DEFAULT nextval('public.observation_versions_id_seq'::regclass); + + +-- +-- Name: observations id; Type: DEFAULT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.observations ALTER COLUMN id SET DEFAULT nextval('public.observations_id_seq'::regclass); + + +-- +-- Name: patterns id; Type: DEFAULT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.patterns ALTER COLUMN id SET DEFAULT nextval('public.patterns_id_seq'::regclass); + + +-- +-- Name: raw_events id; Type: DEFAULT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.raw_events ALTER COLUMN id SET DEFAULT nextval('public.raw_events_id_seq'::regclass); + + +-- +-- Name: reasoning_traces id; Type: DEFAULT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.reasoning_traces ALTER COLUMN id SET DEFAULT nextval('public.reasoning_traces_id_seq'::regclass); + + +-- +-- Name: retrieval_stats_log id; Type: DEFAULT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.retrieval_stats_log ALTER COLUMN id SET DEFAULT nextval('public.retrieval_stats_log_id_seq'::regclass); + + +-- +-- Name: sdk_sessions id; Type: DEFAULT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.sdk_sessions ALTER COLUMN id SET DEFAULT nextval('public.sdk_sessions_id_seq'::regclass); + + +-- +-- Name: search_misses id; Type: DEFAULT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.search_misses ALTER COLUMN id SET DEFAULT nextval('public.search_misses_id_seq'::regclass); + + +-- +-- Name: search_query_log id; Type: DEFAULT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.search_query_log ALTER COLUMN id SET DEFAULT nextval('public.search_query_log_id_seq'::regclass); + + +-- +-- Name: session_observation_injections id; Type: DEFAULT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.session_observation_injections ALTER COLUMN id SET DEFAULT nextval('public.session_observation_injections_id_seq'::regclass); + + +-- +-- Name: session_summaries id; Type: DEFAULT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.session_summaries ALTER COLUMN id SET DEFAULT nextval('public.session_summaries_id_seq'::regclass); + + +-- +-- Name: telemetry_snapshots id; Type: DEFAULT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.telemetry_snapshots ALTER COLUMN id SET DEFAULT nextval('public.telemetry_snapshots_id_seq'::regclass); + + +-- +-- Name: user_prompts id; Type: DEFAULT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.user_prompts ALTER COLUMN id SET DEFAULT nextval('public.user_prompts_id_seq'::regclass); + + +-- +-- Name: users id; Type: DEFAULT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.users ALTER COLUMN id SET DEFAULT nextval('public.users_id_seq'::regclass); + + +-- +-- Name: versioned_document_comments id; Type: DEFAULT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.versioned_document_comments ALTER COLUMN id SET DEFAULT nextval('public.versioned_document_comments_id_seq'::regclass); + + +-- +-- Name: versioned_documents id; Type: DEFAULT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.versioned_documents ALTER COLUMN id SET DEFAULT nextval('public.versioned_documents_id_seq'::regclass); + + +-- +-- Data for Name: agent_observation_stats; Type: TABLE DATA; Schema: public; Owner: - +-- + +COPY public.agent_observation_stats (agent_id, observation_id, injections, successes, updated_at) FROM stdin; +\. + + +-- +-- Data for Name: api_tokens; Type: TABLE DATA; Schema: public; Owner: - +-- + +COPY public.api_tokens (id, name, token_hash, token_prefix, scope, created_at, last_used_at, request_count, error_count, revoked, revoked_at) FROM stdin; +\. + + +-- +-- Data for Name: concept_weights; Type: TABLE DATA; Schema: public; Owner: - +-- + +COPY public.concept_weights (concept, updated_at, weight) FROM stdin; +security 2026-07-13T00:31:26+03:00 0.3 +gotcha 2026-07-13T00:31:26+03:00 0.25 +best-practice 2026-07-13T00:31:26+03:00 0.2 +anti-pattern 2026-07-13T00:31:26+03:00 0.2 +architecture 2026-07-13T00:31:26+03:00 0.15 +performance 2026-07-13T00:31:26+03:00 0.15 +error-handling 2026-07-13T00:31:26+03:00 0.15 +pattern 2026-07-13T00:31:26+03:00 0.1 +testing 2026-07-13T00:31:26+03:00 0.1 +debugging 2026-07-13T00:31:26+03:00 0.1 +workflow 2026-07-13T00:31:26+03:00 0.05 +tooling 2026-07-13T00:31:26+03:00 0.05 +\. + + +-- +-- Data for Name: content; Type: TABLE DATA; Schema: public; Owner: - +-- + +COPY public.content (hash, doc, created_at) FROM stdin; +\. + + +-- +-- Data for Name: content_chunks; Type: TABLE DATA; Schema: public; Owner: - +-- + +COPY public.content_chunks (hash, seq, pos, model, embedding, created_at, text) FROM stdin; +\. + + +-- +-- Data for Name: documents; Type: TABLE DATA; Schema: public; Owner: - +-- + +COPY public.documents (id, collection, path, title, hash, active, created_at, updated_at) FROM stdin; +\. + + +-- +-- Data for Name: indexed_sessions; Type: TABLE DATA; Schema: public; Owner: - +-- + +COPY public.indexed_sessions (id, workstation_id, project_id, project_path, git_branch, first_msg_at, last_msg_at, exchange_count, tool_counts, topics, content, file_mtime, indexed_at) FROM stdin; +\. + + +-- +-- Data for Name: injection_log; Type: TABLE DATA; Schema: public; Owner: - +-- + +COPY public.injection_log (id, observation_id, project, task_context, session_id, created_at, cited) FROM stdin; +\. + + +-- +-- Data for Name: invitations; Type: TABLE DATA; Schema: public; Owner: - +-- + +COPY public.invitations (id, code, created_by, used_by, used_at, created_at) FROM stdin; +\. + + +-- +-- Data for Name: issue_comments; Type: TABLE DATA; Schema: public; Owner: - +-- + +COPY public.issue_comments (id, issue_id, author_project, author_agent, body, created_at) FROM stdin; +\. + + +-- +-- Data for Name: issues; Type: TABLE DATA; Schema: public; Owner: - +-- + +COPY public.issues (id, title, body, status, priority, source_project, target_project, source_agent, created_by_session, labels, acknowledged_at, resolved_at, reopened_at, created_at, updated_at, closed_at, type) FROM stdin; +\. + + +-- +-- Data for Name: migrations; Type: TABLE DATA; Schema: public; Owner: - +-- + +COPY public.migrations (id) FROM stdin; +001_core_tables +002_user_prompts +003_user_prompts_fts +004_observations_fts +005_session_summaries_fts +006_sqlite_vec_vectors +007_concept_weights +008_observation_conflicts +009_patterns +010_patterns_fts +011_observation_relations +012_query_optimization_indexes +013_observation_archival +014_performance_indexes +015_optimized_composite_indexes +016_relation_and_active_indexes +017_content_addressable_storage +018_session_indexing +019_extended_relation_types +020_configurable_vector_dimensions +021_fix_patterns_indexes +022_raw_events +023_observation_enrichment +024_memory_blocks +025_utility_tracking +026_telemetry_snapshots +027_observation_source_type +028_session_observation_injections +029_content_chunks_text +030_projects_table +031_credential_storage +032_agent_scoping +033_create_search_misses +034_credential_uniqueness_and_search_miss_index +035_decision_rejected_field +036_api_tokens +037_search_query_log +038_retrieval_stats_log +039_observations_verified_ttl +040_cleanup_garbage_observations +041_purge_orphan_vectors +042_purge_low_quality_patterns +043_radical_observation_cleanup +044_observation_user_feedback +045_observation_is_suppressed +046_injection_log +047_drop_memory_blocks +048_gin_indexes_concepts_files +049_project_settings +050_system_config +051_documents +052_cleanup_phantom_bulk_import_sessions +053_cleanup_dead_vault_credentials +054_observation_status_lifecycle +055_backfill_null_status +056_backfill_memory_type +057_session_outcome_columns +058_observation_injections_table +059_observation_effectiveness_columns +060_agent_observation_stats +061_observation_versions +062_cleanup_phantom_bulk_import_sessions +063_backfill_observation_concepts +064_backfill_missing_concepts +065_reasoning_traces +066_injection_log_cited_column +067_relation_temporal_validity +068_expand_observation_type_check +069_gstack_insights +070_agent_issues +071_issues_lifecycle_v2 +072_sessions_utility_propagated_at +073_sessions_utility_propagated_at_index +074_observations_commands_run +075_issues_type +076_observations_fts_multilang +077_relations_constraints_update +078_merge_duplicate_project_slugs +079_merge_duplicate_projects_followup +080_create_auth_tables +081_project_identity_pure_hash +082_projects_lifecycle +\. + + +-- +-- Data for Name: observation_conflicts; Type: TABLE DATA; Schema: public; Owner: - +-- + +COPY public.observation_conflicts (conflict_type, resolution, detected_at, reason, resolved_at, id, newer_obs_id, older_obs_id, detected_at_epoch, resolved) FROM stdin; +\. + + +-- +-- Data for Name: observation_injections; Type: TABLE DATA; Schema: public; Owner: - +-- + +COPY public.observation_injections (id, observation_id, session_id, injection_section, injected_at) FROM stdin; +\. + + +-- +-- Data for Name: observation_relations; Type: TABLE DATA; Schema: public; Owner: - +-- + +COPY public.observation_relations (relation_type, detection_source, created_at, reason, id, source_id, target_id, confidence, created_at_epoch, valid_from, valid_to) FROM stdin; +\. + + +-- +-- Data for Name: observation_versions; Type: TABLE DATA; Schema: public; Owner: - +-- + +COPY public.observation_versions (id, observation_id, version, narrative, is_active, created_at, source) FROM stdin; +\. + + +-- +-- Data for Name: observations; Type: TABLE DATA; Schema: public; Owner: - +-- + +COPY public.observations (file_mtimes, sdk_session_id, project, scope, agent_id, agent_source, type, memory_type, source_type, created_at, facts, rejected, narrative, concepts, files_read, files_modified, commands_run, subtitle, title, archived_reason, score_updated_at_epoch, prompt_number, archived_at_epoch, last_retrieved_at_epoch, id, importance_score, utility_score, user_feedback, is_suppressed, retrieval_count, injection_count, created_at_epoch, discovery_tokens, is_superseded, is_archived, encrypted_secret, encryption_key_fingerprint, expires_at, ttl_days, status, status_reason, effectiveness_score, effectiveness_injections, effectiveness_successes, enrichment_level, source_event_ids, raw_content) FROM stdin; +\. + + +-- +-- Data for Name: patterns; Type: TABLE DATA; Schema: public; Owner: - +-- + +COPY public.patterns (status, name, type, created_at, last_seen_at, signature, projects, observation_ids, recommendation, description, merged_into_id, frequency, confidence, id, last_seen_at_epoch, created_at_epoch) FROM stdin; +\. + + +-- +-- Data for Name: project_settings; Type: TABLE DATA; Schema: public; Owner: - +-- + +COPY public.project_settings (project, relevance_threshold, feedback_count, updated_at) FROM stdin; +\. + + +-- +-- Data for Name: projects; Type: TABLE DATA; Schema: public; Owner: - +-- + +COPY public.projects (id, git_remote, relative_path, legacy_ids, display_name, created_at, removed_at, last_heartbeat) FROM stdin; +\. + + +-- +-- Data for Name: raw_events; Type: TABLE DATA; Schema: public; Owner: - +-- + +COPY public.raw_events (id, session_id, tool_name, tool_input, tool_result, created_at_epoch, project, workstation_id, processed) FROM stdin; +\. + + +-- +-- Data for Name: reasoning_traces; Type: TABLE DATA; Schema: public; Owner: - +-- + +COPY public.reasoning_traces (id, sdk_session_id, project, steps, quality_score, task_context, created_at, created_at_epoch) FROM stdin; +\. + + +-- +-- Data for Name: retrieval_stats_log; Type: TABLE DATA; Schema: public; Owner: - +-- + +COPY public.retrieval_stats_log (id, project, event_type, count, created_at) FROM stdin; +\. + + +-- +-- Data for Name: sdk_sessions; Type: TABLE DATA; Schema: public; Owner: - +-- + +COPY public.sdk_sessions (claude_session_id, project, status, started_at, sdk_session_id, user_prompt, completed_at, worker_port, completed_at_epoch, outcome, outcome_reason, outcome_recorded_at, utility_propagated_at, injection_strategy, id, prompt_counter, started_at_epoch) FROM stdin; +\. + + +-- +-- Data for Name: search_misses; Type: TABLE DATA; Schema: public; Owner: - +-- + +COPY public.search_misses (id, project, query, created_at) FROM stdin; +\. + + +-- +-- Data for Name: search_query_log; Type: TABLE DATA; Schema: public; Owner: - +-- + +COPY public.search_query_log (id, project, query, search_type, results, used_vector, latency_ms, created_at) FROM stdin; +\. + + +-- +-- Data for Name: session_observation_injections; Type: TABLE DATA; Schema: public; Owner: - +-- + +COPY public.session_observation_injections (id, session_id, observation_id, injected_at) FROM stdin; +\. + + +-- +-- Data for Name: session_summaries; Type: TABLE DATA; Schema: public; Owner: - +-- + +COPY public.session_summaries (created_at, sdk_session_id, project, completed, investigated, learned, next_steps, notes, request, prompt_number, id, discovery_tokens, created_at_epoch) FROM stdin; +\. + + +-- +-- Data for Name: sessions; Type: TABLE DATA; Schema: public; Owner: - +-- + +COPY public.sessions (id, user_id, created_at, expires_at) FROM stdin; +\. + + +-- +-- Data for Name: system_config; Type: TABLE DATA; Schema: public; Owner: - +-- + +COPY public.system_config (key, value, updated_at) FROM stdin; +\. + + +-- +-- Data for Name: telemetry_snapshots; Type: TABLE DATA; Schema: public; Owner: - +-- + +COPY public.telemetry_snapshots (id, snapshot_type, project, data, created_at_epoch) FROM stdin; +\. + + +-- +-- Data for Name: user_prompts; Type: TABLE DATA; Schema: public; Owner: - +-- + +COPY public.user_prompts (claude_session_id, prompt_text, created_at, id, prompt_number, matched_observations, created_at_epoch) FROM stdin; +\. + + +-- +-- Data for Name: users; Type: TABLE DATA; Schema: public; Owner: - +-- + +COPY public.users (id, email, password_hash, role, disabled, created_at, last_login_at) FROM stdin; +\. + + +-- +-- Data for Name: vectors; Type: TABLE DATA; Schema: public; Owner: - +-- + +COPY public.vectors (doc_id, embedding, sqlite_id, doc_type, field_type, project, scope, model_version) FROM stdin; +\. + + +-- +-- Data for Name: versioned_document_comments; Type: TABLE DATA; Schema: public; Owner: - +-- + +COPY public.versioned_document_comments (id, document_id, author, content, line_start, line_end, status, created_at) FROM stdin; +\. + + +-- +-- Data for Name: versioned_documents; Type: TABLE DATA; Schema: public; Owner: - +-- + +COPY public.versioned_documents (id, path, project, version, content, content_hash, doc_type, metadata, author, created_at) FROM stdin; +\. + + +-- +-- Name: documents_id_seq; Type: SEQUENCE SET; Schema: public; Owner: - +-- + +SELECT pg_catalog.setval('public.documents_id_seq', 1, false); + + +-- +-- Name: injection_log_id_seq; Type: SEQUENCE SET; Schema: public; Owner: - +-- + +SELECT pg_catalog.setval('public.injection_log_id_seq', 1, false); + + +-- +-- Name: invitations_id_seq; Type: SEQUENCE SET; Schema: public; Owner: - +-- + +SELECT pg_catalog.setval('public.invitations_id_seq', 1, false); + + +-- +-- Name: issue_comments_id_seq; Type: SEQUENCE SET; Schema: public; Owner: - +-- + +SELECT pg_catalog.setval('public.issue_comments_id_seq', 1, false); + + +-- +-- Name: issues_id_seq; Type: SEQUENCE SET; Schema: public; Owner: - +-- + +SELECT pg_catalog.setval('public.issues_id_seq', 1, false); + + +-- +-- Name: observation_conflicts_id_seq; Type: SEQUENCE SET; Schema: public; Owner: - +-- + +SELECT pg_catalog.setval('public.observation_conflicts_id_seq', 1, false); + + +-- +-- Name: observation_injections_id_seq; Type: SEQUENCE SET; Schema: public; Owner: - +-- + +SELECT pg_catalog.setval('public.observation_injections_id_seq', 1, false); + + +-- +-- Name: observation_relations_id_seq; Type: SEQUENCE SET; Schema: public; Owner: - +-- + +SELECT pg_catalog.setval('public.observation_relations_id_seq', 1, false); + + +-- +-- Name: observation_versions_id_seq; Type: SEQUENCE SET; Schema: public; Owner: - +-- + +SELECT pg_catalog.setval('public.observation_versions_id_seq', 1, false); + + +-- +-- Name: observations_id_seq; Type: SEQUENCE SET; Schema: public; Owner: - +-- + +SELECT pg_catalog.setval('public.observations_id_seq', 1, false); + + +-- +-- Name: patterns_id_seq; Type: SEQUENCE SET; Schema: public; Owner: - +-- + +SELECT pg_catalog.setval('public.patterns_id_seq', 1, false); + + +-- +-- Name: raw_events_id_seq; Type: SEQUENCE SET; Schema: public; Owner: - +-- + +SELECT pg_catalog.setval('public.raw_events_id_seq', 1, false); + + +-- +-- Name: reasoning_traces_id_seq; Type: SEQUENCE SET; Schema: public; Owner: - +-- + +SELECT pg_catalog.setval('public.reasoning_traces_id_seq', 1, false); + + +-- +-- Name: retrieval_stats_log_id_seq; Type: SEQUENCE SET; Schema: public; Owner: - +-- + +SELECT pg_catalog.setval('public.retrieval_stats_log_id_seq', 1, false); + + +-- +-- Name: sdk_sessions_id_seq; Type: SEQUENCE SET; Schema: public; Owner: - +-- + +SELECT pg_catalog.setval('public.sdk_sessions_id_seq', 1, false); + + +-- +-- Name: search_misses_id_seq; Type: SEQUENCE SET; Schema: public; Owner: - +-- + +SELECT pg_catalog.setval('public.search_misses_id_seq', 1, false); + + +-- +-- Name: search_query_log_id_seq; Type: SEQUENCE SET; Schema: public; Owner: - +-- + +SELECT pg_catalog.setval('public.search_query_log_id_seq', 1, false); + + +-- +-- Name: session_observation_injections_id_seq; Type: SEQUENCE SET; Schema: public; Owner: - +-- + +SELECT pg_catalog.setval('public.session_observation_injections_id_seq', 1, false); + + +-- +-- Name: session_summaries_id_seq; Type: SEQUENCE SET; Schema: public; Owner: - +-- + +SELECT pg_catalog.setval('public.session_summaries_id_seq', 1, false); + + +-- +-- Name: telemetry_snapshots_id_seq; Type: SEQUENCE SET; Schema: public; Owner: - +-- + +SELECT pg_catalog.setval('public.telemetry_snapshots_id_seq', 1, false); + + +-- +-- Name: user_prompts_id_seq; Type: SEQUENCE SET; Schema: public; Owner: - +-- + +SELECT pg_catalog.setval('public.user_prompts_id_seq', 1, false); + + +-- +-- Name: users_id_seq; Type: SEQUENCE SET; Schema: public; Owner: - +-- + +SELECT pg_catalog.setval('public.users_id_seq', 1, false); + + +-- +-- Name: versioned_document_comments_id_seq; Type: SEQUENCE SET; Schema: public; Owner: - +-- + +SELECT pg_catalog.setval('public.versioned_document_comments_id_seq', 1, false); + + +-- +-- Name: versioned_documents_id_seq; Type: SEQUENCE SET; Schema: public; Owner: - +-- + +SELECT pg_catalog.setval('public.versioned_documents_id_seq', 1, false); + + +-- +-- Name: agent_observation_stats agent_observation_stats_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.agent_observation_stats + ADD CONSTRAINT agent_observation_stats_pkey PRIMARY KEY (agent_id, observation_id); + + +-- +-- Name: api_tokens api_tokens_name_key; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.api_tokens + ADD CONSTRAINT api_tokens_name_key UNIQUE (name); + + +-- +-- Name: api_tokens api_tokens_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.api_tokens + ADD CONSTRAINT api_tokens_pkey PRIMARY KEY (id); + + +-- +-- Name: concept_weights concept_weights_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.concept_weights + ADD CONSTRAINT concept_weights_pkey PRIMARY KEY (concept); + + +-- +-- Name: content_chunks content_chunks_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.content_chunks + ADD CONSTRAINT content_chunks_pkey PRIMARY KEY (hash, seq); + + +-- +-- Name: content content_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.content + ADD CONSTRAINT content_pkey PRIMARY KEY (hash); + + +-- +-- Name: documents documents_collection_path_key; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.documents + ADD CONSTRAINT documents_collection_path_key UNIQUE (collection, path); + + +-- +-- Name: documents documents_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.documents + ADD CONSTRAINT documents_pkey PRIMARY KEY (id); + + +-- +-- Name: indexed_sessions indexed_sessions_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.indexed_sessions + ADD CONSTRAINT indexed_sessions_pkey PRIMARY KEY (id); + + +-- +-- Name: injection_log injection_log_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.injection_log + ADD CONSTRAINT injection_log_pkey PRIMARY KEY (id); + + +-- +-- Name: invitations invitations_code_key; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.invitations + ADD CONSTRAINT invitations_code_key UNIQUE (code); + + +-- +-- Name: invitations invitations_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.invitations + ADD CONSTRAINT invitations_pkey PRIMARY KEY (id); + + +-- +-- Name: issue_comments issue_comments_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.issue_comments + ADD CONSTRAINT issue_comments_pkey PRIMARY KEY (id); + + +-- +-- Name: issues issues_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.issues + ADD CONSTRAINT issues_pkey PRIMARY KEY (id); + + +-- +-- Name: migrations migrations_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.migrations + ADD CONSTRAINT migrations_pkey PRIMARY KEY (id); + + +-- +-- Name: observation_conflicts observation_conflicts_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.observation_conflicts + ADD CONSTRAINT observation_conflicts_pkey PRIMARY KEY (id); + + +-- +-- Name: observation_injections observation_injections_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.observation_injections + ADD CONSTRAINT observation_injections_pkey PRIMARY KEY (id); + + +-- +-- Name: observation_relations observation_relations_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.observation_relations + ADD CONSTRAINT observation_relations_pkey PRIMARY KEY (id); + + +-- +-- Name: observation_versions observation_versions_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.observation_versions + ADD CONSTRAINT observation_versions_pkey PRIMARY KEY (id); + + +-- +-- Name: observations observations_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.observations + ADD CONSTRAINT observations_pkey PRIMARY KEY (id); + + +-- +-- Name: patterns patterns_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.patterns + ADD CONSTRAINT patterns_pkey PRIMARY KEY (id); + + +-- +-- Name: project_settings project_settings_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.project_settings + ADD CONSTRAINT project_settings_pkey PRIMARY KEY (project); + + +-- +-- Name: projects projects_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.projects + ADD CONSTRAINT projects_pkey PRIMARY KEY (id); + + +-- +-- Name: raw_events raw_events_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.raw_events + ADD CONSTRAINT raw_events_pkey PRIMARY KEY (id); + + +-- +-- Name: reasoning_traces reasoning_traces_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.reasoning_traces + ADD CONSTRAINT reasoning_traces_pkey PRIMARY KEY (id); + + +-- +-- Name: retrieval_stats_log retrieval_stats_log_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.retrieval_stats_log + ADD CONSTRAINT retrieval_stats_log_pkey PRIMARY KEY (id); + + +-- +-- Name: sdk_sessions sdk_sessions_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.sdk_sessions + ADD CONSTRAINT sdk_sessions_pkey PRIMARY KEY (id); + + +-- +-- Name: search_misses search_misses_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.search_misses + ADD CONSTRAINT search_misses_pkey PRIMARY KEY (id); + + +-- +-- Name: search_query_log search_query_log_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.search_query_log + ADD CONSTRAINT search_query_log_pkey PRIMARY KEY (id); + + +-- +-- Name: session_observation_injections session_observation_injections_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.session_observation_injections + ADD CONSTRAINT session_observation_injections_pkey PRIMARY KEY (id); + + +-- +-- Name: session_observation_injections session_observation_injections_session_id_observation_id_key; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.session_observation_injections + ADD CONSTRAINT session_observation_injections_session_id_observation_id_key UNIQUE (session_id, observation_id); + + +-- +-- Name: session_summaries session_summaries_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.session_summaries + ADD CONSTRAINT session_summaries_pkey PRIMARY KEY (id); + + +-- +-- Name: sessions sessions_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.sessions + ADD CONSTRAINT sessions_pkey PRIMARY KEY (id); + + +-- +-- Name: system_config system_config_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.system_config + ADD CONSTRAINT system_config_pkey PRIMARY KEY (key); + + +-- +-- Name: telemetry_snapshots telemetry_snapshots_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.telemetry_snapshots + ADD CONSTRAINT telemetry_snapshots_pkey PRIMARY KEY (id); + + +-- +-- Name: user_prompts user_prompts_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.user_prompts + ADD CONSTRAINT user_prompts_pkey PRIMARY KEY (id); + + +-- +-- Name: users users_email_key; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.users + ADD CONSTRAINT users_email_key UNIQUE (email); + + +-- +-- Name: users users_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.users + ADD CONSTRAINT users_pkey PRIMARY KEY (id); + + +-- +-- Name: vectors vectors_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.vectors + ADD CONSTRAINT vectors_pkey PRIMARY KEY (doc_id); + + +-- +-- Name: versioned_document_comments versioned_document_comments_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.versioned_document_comments + ADD CONSTRAINT versioned_document_comments_pkey PRIMARY KEY (id); + + +-- +-- Name: versioned_documents versioned_documents_path_project_version_key; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.versioned_documents + ADD CONSTRAINT versioned_documents_path_project_version_key UNIQUE (path, project, version); + + +-- +-- Name: versioned_documents versioned_documents_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.versioned_documents + ADD CONSTRAINT versioned_documents_pkey PRIMARY KEY (id); + + +-- +-- Name: idx_api_tokens_prefix; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX idx_api_tokens_prefix ON public.api_tokens USING btree (token_prefix) WHERE (NOT revoked); + + +-- +-- Name: idx_conflicts_newer; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX idx_conflicts_newer ON public.observation_conflicts USING btree (newer_obs_id); + + +-- +-- Name: idx_conflicts_older; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX idx_conflicts_older ON public.observation_conflicts USING btree (older_obs_id); + + +-- +-- Name: idx_conflicts_unresolved; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX idx_conflicts_unresolved ON public.observation_conflicts USING btree (resolved, detected_at_epoch DESC); + + +-- +-- Name: idx_content_chunks_embedding_hnsw; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX idx_content_chunks_embedding_hnsw ON public.content_chunks USING hnsw (embedding public.vector_cosine_ops) WITH (m='16', ef_construction='64'); + + +-- +-- Name: idx_content_chunks_hash; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX idx_content_chunks_hash ON public.content_chunks USING btree (hash); + + +-- +-- Name: idx_documents_active; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX idx_documents_active ON public.documents USING btree (active) WHERE (active = true); + + +-- +-- Name: idx_documents_collection; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX idx_documents_collection ON public.documents USING btree (collection); + + +-- +-- Name: idx_documents_fts; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX idx_documents_fts ON public.documents USING gin (search_vector); + + +-- +-- Name: idx_documents_hash; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX idx_documents_hash ON public.documents USING btree (hash); + + +-- +-- Name: idx_injection_log_created_at; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX idx_injection_log_created_at ON public.injection_log USING btree (created_at); + + +-- +-- Name: idx_injection_log_observation_id; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX idx_injection_log_observation_id ON public.injection_log USING btree (observation_id); + + +-- +-- Name: idx_injection_log_project; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX idx_injection_log_project ON public.injection_log USING btree (project); + + +-- +-- Name: idx_injection_log_session_cited; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX idx_injection_log_session_cited ON public.injection_log USING btree (session_id, cited); + + +-- +-- Name: idx_issue_comments_issue_created; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX idx_issue_comments_issue_created ON public.issue_comments USING btree (issue_id, created_at); + + +-- +-- Name: idx_issues_source_project; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX idx_issues_source_project ON public.issues USING btree (source_project); + + +-- +-- Name: idx_issues_target_status; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX idx_issues_target_status ON public.issues USING btree (target_project, status); + + +-- +-- Name: idx_obs_injections_obs; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX idx_obs_injections_obs ON public.observation_injections USING btree (observation_id); + + +-- +-- Name: idx_obs_injections_session; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX idx_obs_injections_session ON public.observation_injections USING btree (session_id); + + +-- +-- Name: idx_obs_versions_obs; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX idx_obs_versions_obs ON public.observation_versions USING btree (observation_id); + + +-- +-- Name: idx_observations_active; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX idx_observations_active ON public.observations USING btree (is_archived, is_superseded); + + +-- +-- Name: idx_observations_agent_id; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX idx_observations_agent_id ON public.observations USING btree (agent_id); + + +-- +-- Name: idx_observations_agent_source; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX idx_observations_agent_source ON public.observations USING btree (agent_source); + + +-- +-- Name: idx_observations_archived; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX idx_observations_archived ON public.observations USING btree (is_archived); + + +-- +-- Name: idx_observations_concepts_gin; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX idx_observations_concepts_gin ON public.observations USING gin (concepts); + + +-- +-- Name: idx_observations_created; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX idx_observations_created ON public.observations USING btree (created_at_epoch DESC); + + +-- +-- Name: idx_observations_credential_unique; Type: INDEX; Schema: public; Owner: - +-- + +CREATE UNIQUE INDEX idx_observations_credential_unique ON public.observations USING btree (project, title) WHERE (type = 'credential'::text); + + +-- +-- Name: idx_observations_enrichment; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX idx_observations_enrichment ON public.observations USING btree (enrichment_level, created_at_epoch DESC); + + +-- +-- Name: idx_observations_expires; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX idx_observations_expires ON public.observations USING btree (expires_at) WHERE (expires_at IS NOT NULL); + + +-- +-- Name: idx_observations_files_modified_gin; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX idx_observations_files_modified_gin ON public.observations USING gin (files_modified); + + +-- +-- Name: idx_observations_files_read_gin; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX idx_observations_files_read_gin ON public.observations USING gin (files_read); + + +-- +-- Name: idx_observations_fts_ordering; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX idx_observations_fts_ordering ON public.observations USING btree (project, importance_score DESC) WHERE (((is_archived = 0) OR (is_archived IS NULL)) AND ((is_superseded = 0) OR (is_superseded IS NULL))); + + +-- +-- Name: idx_observations_global_scope; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX idx_observations_global_scope ON public.observations USING btree (scope, importance_score DESC, created_at_epoch DESC) WHERE (scope = 'global'::text); + + +-- +-- Name: idx_observations_id_covering; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX idx_observations_id_covering ON public.observations USING btree (id, project, scope, importance_score); + + +-- +-- Name: idx_observations_importance; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX idx_observations_importance ON public.observations USING btree (importance_score DESC); + + +-- +-- Name: idx_observations_memory_type; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX idx_observations_memory_type ON public.observations USING btree (memory_type); + + +-- +-- Name: idx_observations_project; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX idx_observations_project ON public.observations USING btree (project); + + +-- +-- Name: idx_observations_project_covering; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX idx_observations_project_covering ON public.observations USING btree (project, scope, is_superseded, importance_score DESC) WHERE ((is_superseded = 0) OR (is_superseded IS NULL)); + + +-- +-- Name: idx_observations_project_created; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX idx_observations_project_created ON public.observations USING btree (project, created_at_epoch DESC); + + +-- +-- Name: idx_observations_project_scope; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX idx_observations_project_scope ON public.observations USING btree (scope); + + +-- +-- Name: idx_observations_project_scope_created; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX idx_observations_project_scope_created ON public.observations USING btree (project, scope, created_at_epoch DESC, importance_score DESC); + + +-- +-- Name: idx_observations_project_scope_importance; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX idx_observations_project_scope_importance ON public.observations USING btree (project, scope, importance_score DESC, created_at_epoch DESC); + + +-- +-- Name: idx_observations_scope; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX idx_observations_scope ON public.observations USING btree (scope); + + +-- +-- Name: idx_observations_score_updated; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX idx_observations_score_updated ON public.observations USING btree (score_updated_at_epoch); + + +-- +-- Name: idx_observations_sdk_session_id; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX idx_observations_sdk_session_id ON public.observations USING btree (sdk_session_id); + + +-- +-- Name: idx_observations_search_vector; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX idx_observations_search_vector ON public.observations USING gin (search_vector); + + +-- +-- Name: idx_observations_session_prompt; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX idx_observations_session_prompt ON public.observations USING btree (sdk_session_id, prompt_number DESC) WHERE (COALESCE(is_superseded, (0)::bigint) = 0); + + +-- +-- Name: idx_observations_source_type; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX idx_observations_source_type ON public.observations USING btree (source_type); + + +-- +-- Name: idx_observations_status; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX idx_observations_status ON public.observations USING btree (status); + + +-- +-- Name: idx_observations_superseded; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX idx_observations_superseded ON public.observations USING btree (is_superseded); + + +-- +-- Name: idx_observations_type; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX idx_observations_type ON public.observations USING btree (type); + + +-- +-- Name: idx_patterns_confidence; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX idx_patterns_confidence ON public.patterns USING btree (confidence DESC); + + +-- +-- Name: idx_patterns_frequency; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX idx_patterns_frequency ON public.patterns USING btree (frequency DESC, last_seen_at_epoch DESC) WHERE (status = 'active'::text); + + +-- +-- Name: idx_patterns_fts; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX idx_patterns_fts ON public.patterns USING gin (search_vector); + + +-- +-- Name: idx_patterns_last_seen; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX idx_patterns_last_seen ON public.patterns USING btree (last_seen_at_epoch DESC); + + +-- +-- Name: idx_patterns_status; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX idx_patterns_status ON public.patterns USING btree (status); + + +-- +-- Name: idx_patterns_type; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX idx_patterns_type ON public.patterns USING btree (type); + + +-- +-- Name: idx_patterns_type_project; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX idx_patterns_type_project ON public.patterns USING btree (type, frequency DESC) WHERE (status = 'active'::text); + + +-- +-- Name: idx_projects_last_heartbeat; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX idx_projects_last_heartbeat ON public.projects USING btree (last_heartbeat); + + +-- +-- Name: idx_projects_legacy_ids; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX idx_projects_legacy_ids ON public.projects USING gin (legacy_ids); + + +-- +-- Name: idx_projects_remote_path; Type: INDEX; Schema: public; Owner: - +-- + +CREATE UNIQUE INDEX idx_projects_remote_path ON public.projects USING btree (git_remote, relative_path) WHERE (git_remote IS NOT NULL); + + +-- +-- Name: idx_projects_removed_at; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX idx_projects_removed_at ON public.projects USING btree (removed_at) WHERE (removed_at IS NOT NULL); + + +-- +-- Name: idx_prompts_created; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX idx_prompts_created ON public.user_prompts USING btree (created_at_epoch DESC); + + +-- +-- Name: idx_prompts_session_created; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX idx_prompts_session_created ON public.user_prompts USING btree (claude_session_id, created_at_epoch DESC); + + +-- +-- Name: idx_prompts_session_number; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX idx_prompts_session_number ON public.user_prompts USING btree (claude_session_id, prompt_number); + + +-- +-- Name: idx_raw_events_session_time; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX idx_raw_events_session_time ON public.raw_events USING btree (session_id, created_at_epoch); + + +-- +-- Name: idx_raw_events_unprocessed; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX idx_raw_events_unprocessed ON public.raw_events USING btree (created_at_epoch) WHERE (processed = false); + + +-- +-- Name: idx_reasoning_traces_project; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX idx_reasoning_traces_project ON public.reasoning_traces USING btree (project); + + +-- +-- Name: idx_reasoning_traces_quality; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX idx_reasoning_traces_quality ON public.reasoning_traces USING btree (quality_score); + + +-- +-- Name: idx_reasoning_traces_session; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX idx_reasoning_traces_session ON public.reasoning_traces USING btree (sdk_session_id); + + +-- +-- Name: idx_relations_both; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX idx_relations_both ON public.observation_relations USING btree (source_id, target_id); + + +-- +-- Name: idx_relations_confidence; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX idx_relations_confidence ON public.observation_relations USING btree (confidence DESC); + + +-- +-- Name: idx_relations_source; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX idx_relations_source ON public.observation_relations USING btree (source_id); + + +-- +-- Name: idx_relations_target; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX idx_relations_target ON public.observation_relations USING btree (target_id); + + +-- +-- Name: idx_relations_type; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX idx_relations_type ON public.observation_relations USING btree (relation_type); + + +-- +-- Name: idx_relations_unique; Type: INDEX; Schema: public; Owner: - +-- + +CREATE UNIQUE INDEX idx_relations_unique ON public.observation_relations USING btree (source_id, target_id, relation_type); + + +-- +-- Name: idx_retrieval_stats_project_type_created; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX idx_retrieval_stats_project_type_created ON public.retrieval_stats_log USING btree (project, event_type, created_at DESC); + + +-- +-- Name: idx_sdk_sessions_claude_session_id; Type: INDEX; Schema: public; Owner: - +-- + +CREATE UNIQUE INDEX idx_sdk_sessions_claude_session_id ON public.sdk_sessions USING btree (claude_session_id); + + +-- +-- Name: idx_sdk_sessions_project; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX idx_sdk_sessions_project ON public.sdk_sessions USING btree (project); + + +-- +-- Name: idx_sdk_sessions_sdk_session_id; Type: INDEX; Schema: public; Owner: - +-- + +CREATE UNIQUE INDEX idx_sdk_sessions_sdk_session_id ON public.sdk_sessions USING btree (sdk_session_id); + + +-- +-- Name: idx_sdk_sessions_status; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX idx_sdk_sessions_status ON public.sdk_sessions USING btree (status); + + +-- +-- Name: idx_sdk_sessions_utility_propagated_at; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX idx_sdk_sessions_utility_propagated_at ON public.sdk_sessions USING btree (utility_propagated_at) WHERE (utility_propagated_at IS NOT NULL); + + +-- +-- Name: idx_search_misses_created; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX idx_search_misses_created ON public.search_misses USING btree (created_at); + + +-- +-- Name: idx_search_misses_project; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX idx_search_misses_project ON public.search_misses USING btree (project); + + +-- +-- Name: idx_search_misses_project_query_created; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX idx_search_misses_project_query_created ON public.search_misses USING btree (project, query, created_at DESC); + + +-- +-- Name: idx_search_query_log_created; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX idx_search_query_log_created ON public.search_query_log USING btree (created_at DESC); + + +-- +-- Name: idx_search_query_log_project; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX idx_search_query_log_project ON public.search_query_log USING btree (project, created_at DESC); + + +-- +-- Name: idx_session_summaries_fts; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX idx_session_summaries_fts ON public.session_summaries USING gin (search_vector); + + +-- +-- Name: idx_session_summaries_project; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX idx_session_summaries_project ON public.session_summaries USING btree (project); + + +-- +-- Name: idx_session_summaries_sdk_session_id; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX idx_session_summaries_sdk_session_id ON public.session_summaries USING btree (sdk_session_id); + + +-- +-- Name: idx_sessions_last_msg; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX idx_sessions_last_msg ON public.indexed_sessions USING btree (last_msg_at DESC); + + +-- +-- Name: idx_sessions_proj; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX idx_sessions_proj ON public.indexed_sessions USING btree (project_id); + + +-- +-- Name: idx_sessions_started; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX idx_sessions_started ON public.sdk_sessions USING btree (started_at_epoch DESC); + + +-- +-- Name: idx_sessions_tsv; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX idx_sessions_tsv ON public.indexed_sessions USING gin (tsv); + + +-- +-- Name: idx_sessions_ws; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX idx_sessions_ws ON public.indexed_sessions USING btree (workstation_id); + + +-- +-- Name: idx_sessions_ws_proj; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX idx_sessions_ws_proj ON public.indexed_sessions USING btree (workstation_id, project_id); + + +-- +-- Name: idx_soi_session_id; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX idx_soi_session_id ON public.session_observation_injections USING btree (session_id); + + +-- +-- Name: idx_summaries_created; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX idx_summaries_created ON public.session_summaries USING btree (created_at_epoch DESC); + + +-- +-- Name: idx_summaries_project_created; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX idx_summaries_project_created ON public.session_summaries USING btree (project, created_at_epoch DESC); + + +-- +-- Name: idx_telemetry_type_time; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX idx_telemetry_type_time ON public.telemetry_snapshots USING btree (snapshot_type, created_at_epoch DESC); + + +-- +-- Name: idx_user_prompts_claude_session_id; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX idx_user_prompts_claude_session_id ON public.user_prompts USING btree (claude_session_id); + + +-- +-- Name: idx_user_prompts_fts; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX idx_user_prompts_fts ON public.user_prompts USING gin (search_vector); + + +-- +-- Name: idx_user_prompts_prompt_number; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX idx_user_prompts_prompt_number ON public.user_prompts USING btree (prompt_number); + + +-- +-- Name: idx_user_prompts_session_number_unique; Type: INDEX; Schema: public; Owner: - +-- + +CREATE UNIQUE INDEX idx_user_prompts_session_number_unique ON public.user_prompts USING btree (claude_session_id, prompt_number); + + +-- +-- Name: idx_vectors_doc_type_project; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX idx_vectors_doc_type_project ON public.vectors USING btree (doc_type, project, scope); + + +-- +-- Name: idx_vectors_embedding_hnsw; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX idx_vectors_embedding_hnsw ON public.vectors USING hnsw (embedding public.vector_cosine_ops) WITH (m='16', ef_construction='64'); + + +-- +-- Name: idx_vectors_observation_lookup; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX idx_vectors_observation_lookup ON public.vectors USING btree (doc_type, sqlite_id, project) WHERE (doc_type = 'observation'::text); + + +-- +-- Name: idx_versioned_document_comments_doc; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX idx_versioned_document_comments_doc ON public.versioned_document_comments USING btree (document_id); + + +-- +-- Name: idx_versioned_documents_doc_type; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX idx_versioned_documents_doc_type ON public.versioned_documents USING btree (doc_type); + + +-- +-- Name: idx_versioned_documents_project_path; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX idx_versioned_documents_project_path ON public.versioned_documents USING btree (project, path, version DESC); + + +-- +-- Name: content_chunks content_chunks_hash_fkey; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.content_chunks + ADD CONSTRAINT content_chunks_hash_fkey FOREIGN KEY (hash) REFERENCES public.content(hash) ON DELETE CASCADE; + + +-- +-- Name: documents documents_hash_fkey; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.documents + ADD CONSTRAINT documents_hash_fkey FOREIGN KEY (hash) REFERENCES public.content(hash) ON DELETE SET NULL; + + +-- +-- Name: injection_log injection_log_observation_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.injection_log + ADD CONSTRAINT injection_log_observation_id_fkey FOREIGN KEY (observation_id) REFERENCES public.observations(id) ON DELETE CASCADE; + + +-- +-- Name: invitations invitations_created_by_fkey; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.invitations + ADD CONSTRAINT invitations_created_by_fkey FOREIGN KEY (created_by) REFERENCES public.users(id); + + +-- +-- Name: invitations invitations_used_by_fkey; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.invitations + ADD CONSTRAINT invitations_used_by_fkey FOREIGN KEY (used_by) REFERENCES public.users(id); + + +-- +-- Name: issue_comments issue_comments_issue_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.issue_comments + ADD CONSTRAINT issue_comments_issue_id_fkey FOREIGN KEY (issue_id) REFERENCES public.issues(id) ON DELETE CASCADE; + + +-- +-- Name: session_observation_injections session_observation_injections_observation_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.session_observation_injections + ADD CONSTRAINT session_observation_injections_observation_id_fkey FOREIGN KEY (observation_id) REFERENCES public.observations(id) ON DELETE CASCADE; + + +-- +-- Name: session_observation_injections session_observation_injections_session_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.session_observation_injections + ADD CONSTRAINT session_observation_injections_session_id_fkey FOREIGN KEY (session_id) REFERENCES public.sdk_sessions(id) ON DELETE CASCADE; + + +-- +-- Name: sessions sessions_user_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.sessions + ADD CONSTRAINT sessions_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.users(id) ON DELETE CASCADE; + + +-- +-- Name: versioned_document_comments versioned_document_comments_document_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.versioned_document_comments + ADD CONSTRAINT versioned_document_comments_document_id_fkey FOREIGN KEY (document_id) REFERENCES public.versioned_documents(id); + + +-- +-- PostgreSQL database dump complete +-- + +\unrestrict GKgwz0mQo1LQTCewMYkbGpvBvO4ne6nkmZlHTgLn4c8wGNcYoO9uMIoXU0oQxmF diff --git a/tests/fixtures/pre-v5/manifest.json b/tests/fixtures/pre-v5/manifest.json new file mode 100644 index 00000000..8fe01b7c --- /dev/null +++ b/tests/fixtures/pre-v5/manifest.json @@ -0,0 +1,11 @@ +{ + "source_tag": "v4.5.0", + "tag_object": "e9e31476503a40415f6e22899c1d3483ef65d739", + "source_commit": "648ae097a005a42e05c14c78eca667e413bf9daf", + "source_migrations_blob": "f8fb09cf907834c43a36c41588b171a20331ec77", + "last_migration": "082_projects_lifecycle", + "migration_count": 82, + "source_migrations_sha256": "f72b5111595b0a8b04770c26849a91b4c949ea3a620961e30882ae13d4c0738c", + "fixture": "engram-v4.5.0.sql", + "fixture_sha256": "fd452892eeb3edc255132b63baced7c7dbed22e3bc0592d8e7aa84fbf9ac5452" +} From 05b341cad4564d94337079749a53137a13fa8e7b Mon Sep 17 00:00:00 2001 From: Kirill Turanskiy Date: Mon, 13 Jul 2026 00:55:11 +0300 Subject: [PATCH 064/111] fix(mb1): close migration and document coercion edges --- internal/db/gorm/migrations.go | 10 +- .../mcp/structured_input_validation_test.go | 94 +++++++++++++++---- internal/mcp/tools_documents.go | 12 ++- 3 files changed, 90 insertions(+), 26 deletions(-) diff --git a/internal/db/gorm/migrations.go b/internal/db/gorm/migrations.go index 80e4ef35..bd30b168 100644 --- a/internal/db/gorm/migrations.go +++ b/internal/db/gorm/migrations.go @@ -3113,7 +3113,7 @@ WHERE utility_propagated_at IS NOT NULL`).Error AND title IS NOT NULL AND title != '' AND is_suppressed = false AND COALESCE(is_archived, 0) = 0 - AND COALESCE(is_superseded, 0) = 0 + AND COALESCE(is_superseded::text, '0') IN ('0', 'false') `).Error; err != nil { return fmt.Errorf("migration 090_observations_to_static_entities: credentials INSERT: %w", err) } @@ -3139,7 +3139,7 @@ WHERE utility_propagated_at IS NOT NULL`).Error AND COALESCE(NULLIF(TRIM(narrative), ''), NULLIF(TRIM(title), '')) IS NOT NULL AND is_suppressed = false AND COALESCE(is_archived, 0) = 0 - AND COALESCE(is_superseded, 0) = 0 + AND COALESCE(is_superseded::text, '0') IN ('0', 'false') `).Error; err != nil { return fmt.Errorf("migration 090_observations_to_static_entities: behavioral_rules INSERT: %w", err) } @@ -3162,7 +3162,7 @@ WHERE utility_propagated_at IS NOT NULL`).Error AND COALESCE(NULLIF(TRIM(narrative), ''), NULLIF(TRIM(title), '')) IS NOT NULL AND is_suppressed = false AND COALESCE(is_archived, 0) = 0 - AND COALESCE(is_superseded, 0) = 0 + AND COALESCE(is_superseded::text, '0') IN ('0', 'false') `).Error; err != nil { return fmt.Errorf("migration 090_observations_to_static_entities: memories INSERT: %w", err) } @@ -3183,7 +3183,7 @@ WHERE utility_propagated_at IS NOT NULL`).Error FROM observations WHERE is_suppressed = false AND COALESCE(is_archived, 0) = 0 - AND COALESCE(is_superseded, 0) = 0; + AND COALESCE(is_superseded::text, '0') IN ('0', 'false'); SELECT (SELECT COUNT(*) FROM credentials) + (SELECT COUNT(*) FROM memories) @@ -3203,7 +3203,7 @@ WHERE utility_propagated_at IS NOT NULL`).Error AND title IS NOT NULL AND title != '' AND is_suppressed = false AND COALESCE(is_archived, 0) = 0 - AND COALESCE(is_superseded, 0) = 0; + AND COALESCE(is_superseded::text, '0') IN ('0', 'false'); IF cred_count != cred_live_count THEN RAISE EXCEPTION 'migration 090 credential invariant FAILED: credentials=% != live observations WHERE type=''credential''=% — every vault credential MUST migrate byte-for-byte', diff --git a/internal/mcp/structured_input_validation_test.go b/internal/mcp/structured_input_validation_test.go index 2aaeb1d0..8712bb8c 100644 --- a/internal/mcp/structured_input_validation_test.go +++ b/internal/mcp/structured_input_validation_test.go @@ -17,15 +17,18 @@ import ( ) type structuredMutationHarness struct { - server *Server - store *gormdb.Store - rules *fakeRuleGovernanceStore - significance *fakeMemorySignificanceUpdater - editor *mockMemoryEditor - ctx context.Context - marker string - documentID int64 - suppressID int64 + server *Server + store *gormdb.Store + rules *fakeRuleGovernanceStore + significance *fakeMemorySignificanceUpdater + editor *mockMemoryEditor + ctx context.Context + marker string + documentID int64 + suppressID int64 + ragCollection string + ragPath string + ragHash string } func newStructuredMutationHarness(t *testing.T) *structuredMutationHarness { @@ -48,6 +51,12 @@ func newStructuredMutationHarness(t *testing.T) *structuredMutationHarness { context.Background(), marker+".md", marker, "fixture", "markdown", "{}", marker, ) require.NoError(t, err) + documentStore := gormdb.NewDocumentStore(store) + ragCollection := marker + "-collection" + ragPath := marker + ".txt" + ragDocument, err := documentStore.UpsertDocument(context.Background(), ragCollection, ragPath, marker, marker+"-body") + require.NoError(t, err) + require.True(t, ragDocument.Hash.Valid) rules := &fakeRuleGovernanceStore{} significance := &fakeMemorySignificanceUpdater{} @@ -58,7 +67,7 @@ func newStructuredMutationHarness(t *testing.T) *structuredMutationHarness { Project: marker, Content: "suppress-fixture-" + marker, SourceAgent: "mb1-strict", }) require.NoError(t, err) - server := NewServer(ServerOptions{Version: "mb1-structured-input"}) + server := NewServer(ServerOptions{Version: "mb1-structured-input", DocumentStore: documentStore}) server.SetMemoryStore(memoryStore) server.SetAuditStore(auditStore) server.SetCandidateStore(gormdb.NewCandidateStore(store.DB, auditStore)) @@ -76,6 +85,8 @@ func newStructuredMutationHarness(t *testing.T) *structuredMutationHarness { t.Cleanup(func() { _ = store.DB.Exec("DELETE FROM versioned_document_comments WHERE document_id = ?", documentID).Error _ = store.DB.Exec("DELETE FROM versioned_documents WHERE id = ?", documentID).Error + _ = store.DB.Exec("DELETE FROM documents WHERE collection = ? AND path = ?", ragCollection, ragPath).Error + _ = store.DB.Exec("DELETE FROM content WHERE hash = ?", ragDocument.Hash.String).Error _ = store.DB.Unscoped().Exec("DELETE FROM memories WHERE project = ? OR content LIKE ?", marker, marker+"%").Error _ = store.DB.Exec("DELETE FROM audit_log WHERE actor = ? OR source_session_id = ?", marker, marker).Error _ = store.DB.Exec("DELETE FROM bulk_op_snapshots WHERE actor = ? OR source_session_id = ?", marker, marker).Error @@ -84,15 +95,18 @@ func newStructuredMutationHarness(t *testing.T) *structuredMutationHarness { }) return &structuredMutationHarness{ - server: server, - store: store, - rules: rules, - significance: significance, - editor: editor, - ctx: ctx, - marker: marker, - documentID: documentID, - suppressID: suppressFixture.ID, + server: server, + store: store, + rules: rules, + significance: significance, + editor: editor, + ctx: ctx, + marker: marker, + documentID: documentID, + suppressID: suppressFixture.ID, + ragCollection: ragCollection, + ragPath: ragPath, + ragHash: ragDocument.Hash.String, } } @@ -119,6 +133,12 @@ func (h *structuredMutationHarness) requireZeroDurableDelta(t *testing.T) { "SELECT count(*) FROM memories WHERE id = ? AND deleted_at IS NULL", h.suppressID, ).Scan(&activeSuppressFixture).Error) require.EqualValues(t, 1, activeSuppressFixture, "malformed suppress selector deleted the durable row") + var activeDocument int64 + require.NoError(t, h.store.DB.Raw( + "SELECT count(*) FROM documents WHERE collection = ? AND path = ? AND active = true AND hash = ?", + h.ragCollection, h.ragPath, h.ragHash, + ).Scan(&activeDocument).Error) + require.EqualValues(t, 1, activeDocument, "malformed document mutation changed the durable document") require.Zero(t, h.rules.transitionID) require.Empty(t, h.rules.pinSnapshotID) require.Empty(t, h.rules.rollbackID) @@ -163,6 +183,12 @@ func TestStructuredMutationSchemasMatchStrictHandlers(t *testing.T) { {tool: "doc_comment", property: "document_id", typeName: "integer"}, {tool: "doc_comment", property: "line_start", typeName: "integer"}, {tool: "doc_comment", property: "line_end", typeName: "integer"}, + {tool: "remove_document", property: "collection", typeName: "string"}, + {tool: "remove_document", property: "path", typeName: "string"}, + {tool: "ingest_document", property: "collection", typeName: "string"}, + {tool: "ingest_document", property: "path", typeName: "string"}, + {tool: "ingest_document", property: "content", typeName: "string"}, + {tool: "ingest_document", property: "title", typeName: "string"}, {tool: "rule_governance_transition", property: "rule_version_id", typeName: "integer"}, {tool: "rule_governance_pin_snapshot", property: "pinned", typeName: "boolean"}, {tool: "rate_memory_significance", property: "id", typeName: "integer"}, @@ -225,6 +251,36 @@ func TestStructuredMutationInputsRejectWithoutDurableDelta(t *testing.T) { return h.server.handleDocComment(h.ctx, json.RawMessage(fmt.Sprintf(`{"document_id":%d,"content":%q,"author":%q,"line_start":"1"}`, h.documentID, h.marker+"-comment", h.marker))) }, }, + { + name: "document remove coerced collection and path", + call: func() (string, error) { + return h.server.handleRemoveDocument(h.ctx, json.RawMessage(`{"collection":123,"path":true}`)) + }, + }, + { + name: "document ingest numeric collection", + call: func() (string, error) { + return h.server.handleIngestDocument(h.ctx, json.RawMessage(fmt.Sprintf(`{"collection":123,"path":%q,"content":"replacement","title":"title"}`, h.ragPath))) + }, + }, + { + name: "document ingest boolean path", + call: func() (string, error) { + return h.server.handleIngestDocument(h.ctx, json.RawMessage(fmt.Sprintf(`{"collection":%q,"path":true,"content":"replacement","title":"title"}`, h.ragCollection))) + }, + }, + { + name: "document ingest numeric content", + call: func() (string, error) { + return h.server.handleIngestDocument(h.ctx, json.RawMessage(fmt.Sprintf(`{"collection":%q,"path":%q,"content":123,"title":"title"}`, h.ragCollection, h.ragPath))) + }, + }, + { + name: "document ingest boolean title", + call: func() (string, error) { + return h.server.handleIngestDocument(h.ctx, json.RawMessage(fmt.Sprintf(`{"collection":%q,"path":%q,"content":"replacement","title":true}`, h.ragCollection, h.ragPath))) + }, + }, { name: "rule transition fractional selector", call: func() (string, error) { diff --git a/internal/mcp/tools_documents.go b/internal/mcp/tools_documents.go index 3fcff185..3bd79296 100644 --- a/internal/mcp/tools_documents.go +++ b/internal/mcp/tools_documents.go @@ -67,7 +67,6 @@ func (s *Server) handleListDocuments(ctx context.Context, args json.RawMessage) if err != nil { return "", err } - var params struct { Collection string } @@ -127,7 +126,6 @@ func (s *Server) handleGetDocument(ctx context.Context, args json.RawMessage) (s if err != nil { return "", err } - var params struct { Collection string Path string @@ -171,6 +169,11 @@ func (s *Server) handleRemoveDocument(ctx context.Context, args json.RawMessage) if err != nil { return "", err } + for _, key := range []string{"collection", "path"} { + if _, _, fieldErr := optionalStringArg(m, key); fieldErr != nil { + return "", fmt.Errorf("remove_document: %w", fieldErr) + } + } var params struct { Collection string @@ -203,6 +206,11 @@ func (s *Server) handleIngestDocument(ctx context.Context, args json.RawMessage) if err != nil { return "", err } + for _, key := range []string{"collection", "path", "content", "title"} { + if _, _, fieldErr := optionalStringArg(m, key); fieldErr != nil { + return "", fmt.Errorf("ingest_document: %w", fieldErr) + } + } var params struct { Collection string From e85c0e65e212ed1bea83532530f12736569ad671 Mon Sep 17 00:00:00 2001 From: Kirill Turanskiy Date: Mon, 13 Jul 2026 01:02:58 +0300 Subject: [PATCH 065/111] test(mb1): isolate governance batch proofs --- .../db/gorm/rule_governance_rg3_store_test.go | 19 +++++++++++++++++-- internal/grpcserver/session_start_test.go | 8 ++++++-- 2 files changed, 23 insertions(+), 4 deletions(-) diff --git a/internal/db/gorm/rule_governance_rg3_store_test.go b/internal/db/gorm/rule_governance_rg3_store_test.go index df23e0a5..2c24483b 100644 --- a/internal/db/gorm/rule_governance_rg3_store_test.go +++ b/internal/db/gorm/rule_governance_rg3_store_test.go @@ -39,8 +39,16 @@ func TestRuleGovernanceStore_GetLifecycleHealthAggregatesGovernanceTables(t *tes activeVersionID := insertRG3RuleVersionFixture(t, db, project, models.RuleStateActiveProject, "developer", 50) supersededVersionID := insertRG3RuleVersionFixture(t, db, project, models.RuleStateSuperseded, "developer", 40) draftVersionID := insertRG3RuleVersionFixture(t, db, project, models.RuleStateDraft, "developer", 30) + baseline, err := store.GetLifecycleHealth(ctx, RuleGovernanceHealthParams{ + Project: project, + Since: since, + Limit: 50, + IncludeGlobalArbiterRunCounts: true, + }) + require.NoError(t, err) run, err := store.StartRuleArbiterRun(ctx, "rg3-health") require.NoError(t, err) + t.Cleanup(func() { require.NoError(t, db.Delete(&models.RuleArbiterRun{}, run.ID).Error) }) _, err = store.FinishRuleArbiterRun(ctx, run.ID, models.RuleArbiterRunStatusCompleted, models.RuleArbiterRunCounts{ CandidatesSeen: 2, CandidatesEvaluated: 2, @@ -90,7 +98,7 @@ func TestRuleGovernanceStore_GetLifecycleHealthAggregatesGovernanceTables(t *tes require.Equal(t, 1, health.CandidateStatusCounts[models.RuleCandidateRejected]) require.Equal(t, 1, health.VersionStateCounts[models.RuleStateActiveProject]) require.Equal(t, 1, health.VersionStateCounts[models.RuleStateSuperseded]) - require.Equal(t, 1, health.ArbiterRunStatusCounts[models.RuleArbiterRunStatusCompleted]) + require.Equal(t, baseline.ArbiterRunStatusCounts[models.RuleArbiterRunStatusCompleted]+1, health.ArbiterRunStatusCounts[models.RuleArbiterRunStatusCompleted]) require.Equal(t, 1, health.TransitionActionCounts["candidate_to_rejected"]) require.Equal(t, 1, health.TransitionActionCounts["rule_version_transition"]) require.Equal(t, 1, health.SnapshotStatusCounts["committed"]) @@ -104,8 +112,15 @@ func TestRuleGovernanceStore_GetLifecycleHealthOmitsGlobalArbiterRunsForProjectS store := NewRuleGovernanceStore(db) ctx := context.Background() project := fmt.Sprintf("rg3-health-scoped-%d", time.Now().UnixNano()) + baseline, err := store.GetLifecycleHealth(ctx, RuleGovernanceHealthParams{ + Project: project, + Limit: 50, + IncludeGlobalArbiterRunCounts: true, + }) + require.NoError(t, err) run, err := store.StartRuleArbiterRun(ctx, "rg3-health-scoped") require.NoError(t, err) + t.Cleanup(func() { require.NoError(t, db.Delete(&models.RuleArbiterRun{}, run.ID).Error) }) _, err = store.FinishRuleArbiterRun(ctx, run.ID, models.RuleArbiterRunStatusCompleted, models.RuleArbiterRunCounts{ CandidatesSeen: 1, }, "") @@ -125,7 +140,7 @@ func TestRuleGovernanceStore_GetLifecycleHealthOmitsGlobalArbiterRunsForProjectS IncludeGlobalArbiterRunCounts: true, }) require.NoError(t, err) - require.Equal(t, 1, admin.ArbiterRunStatusCounts[models.RuleArbiterRunStatusCompleted]) + require.Equal(t, baseline.ArbiterRunStatusCounts[models.RuleArbiterRunStatusCompleted]+1, admin.ArbiterRunStatusCounts[models.RuleArbiterRunStatusCompleted]) require.False(t, admin.NoData) } diff --git a/internal/grpcserver/session_start_test.go b/internal/grpcserver/session_start_test.go index 035f1a8f..f8af973c 100644 --- a/internal/grpcserver/session_start_test.go +++ b/internal/grpcserver/session_start_test.go @@ -667,7 +667,6 @@ func TestGetSessionStartContext_RuleRouterEnabledPacketShape(t *testing.T) { kernelID := insertSessionStartRuleVersion(t, db, project+"-kernel", models.RuleStateKernel, "developer", 1000003, map[string]any{}) activeProjectID := insertSessionStartRuleVersion(t, db, project+"-active", models.RuleStateActiveProject, "developer", 1000002, map[string]any{"project": project}) suppressedID := insertSessionStartRuleVersion(t, db, project+"-other", models.RuleStateActiveProject, "developer", 1000001, map[string]any{"project": otherProject}) - _ = suppressedID ruleStore := localgorm.NewBehavioralRulesStore(&localgorm.Store{DB: db}) legacyRule, err := ruleStore.Create(ctx, &models.BehavioralRule{ @@ -695,7 +694,12 @@ func TestGetSessionStartContext_RuleRouterEnabledPacketShape(t *testing.T) { require.Equal(t, "router", resp.RuleRouter.Mode) require.Equal(t, int32(1), resp.RuleRouter.KernelCount) require.Equal(t, int32(2), resp.RuleRouter.ContextualCount) - require.Equal(t, int32(1), resp.RuleRouter.SuppressedCount) + require.Equal(t, int32(len(resp.RuleRouter.Suppressed)), resp.RuleRouter.SuppressedCount) + suppressedByVersion := map[int64]*pb.SessionStartRulePacket{} + for _, packet := range resp.RuleRouter.Suppressed { + suppressedByVersion[packet.RuleVersionId] = packet + } + require.Contains(t, suppressedByVersion, suppressedID) require.Equal(t, "within_budget", resp.RuleRouter.BudgetOutcome) require.Len(t, resp.RuleRouter.Kernel, 1) From a6a88b8836c580324b864ae87b55b94e1cc012cf Mon Sep 17 00:00:00 2001 From: Kirill Turanskiy Date: Mon, 13 Jul 2026 01:05:25 +0300 Subject: [PATCH 066/111] fix(images): skip non-release workflow runs --- .github/workflows/docker-publish.yml | 2 +- .../runtime/image_runtime_contract_test.go | 45 +++++++++++++++++++ 2 files changed, 46 insertions(+), 1 deletion(-) diff --git a/.github/workflows/docker-publish.yml b/.github/workflows/docker-publish.yml index c0f44848..39f73919 100644 --- a/.github/workflows/docker-publish.yml +++ b/.github/workflows/docker-publish.yml @@ -10,7 +10,7 @@ permissions: jobs: prepare-release: - if: github.event.workflow_run.conclusion == 'success' + if: github.event.workflow_run.conclusion == 'success' && github.event.workflow_run.event == 'push' && startsWith(github.event.workflow_run.head_branch, 'v') runs-on: ubuntu-latest permissions: contents: read diff --git a/tests/critical/runtime/image_runtime_contract_test.go b/tests/critical/runtime/image_runtime_contract_test.go index af53683d..1fd96162 100644 --- a/tests/critical/runtime/image_runtime_contract_test.go +++ b/tests/critical/runtime/image_runtime_contract_test.go @@ -505,6 +505,9 @@ func verifyDockerReleaseRefFreshnessGuard(t *testing.T, repo string) { t.Run("workflow_run provenance and protected-main authority matrix", func(t *testing.T) { testWorkflowRunTrustMatrix(t, repo) }) + t.Run("workflow_run publisher selector matrix", func(t *testing.T) { + testWorkflowRunPublisherSelector(t, publisher, repo) + }) t.Run("same-run immutable artifact bridge matrix", func(t *testing.T) { testArtifactBridgeMatrix(t, repo) }) @@ -519,6 +522,48 @@ func verifyDockerReleaseRefFreshnessGuard(t *testing.T, repo string) { }) } +func testWorkflowRunPublisherSelector(t *testing.T, publisher, repo string) { + t.Helper() + const selector = "if: github.event.workflow_run.conclusion == 'success' && github.event.workflow_run.event == 'push' && startsWith(github.event.workflow_run.head_branch, 'v')" + if !strings.Contains(strings.ReplaceAll(publisher, "\r\n", "\n"), selector) { + t.Fatalf("publisher does not gate preflight with the exact successful push/tag-shaped selector %q", selector) + } + + shouldEnterPreflight := func(conclusion, event, headBranch string) bool { + return conclusion == "success" && event == "push" && strings.HasPrefix(headBranch, "v") + } + for _, test := range []struct { + name string + conclusion, event, headBranch string + want bool + }{ + {name: "successful pull request skips", conclusion: "success", event: "pull_request", headBranch: "feature/image", want: false}, + {name: "successful main push skips", conclusion: "success", event: "push", headBranch: "main", want: false}, + {name: "successful tag-shaped push enters", conclusion: "success", event: "push", headBranch: "v6.43.0", want: true}, + {name: "failed tag push skips", conclusion: "failure", event: "push", headBranch: "v6.43.0", want: false}, + {name: "cancelled tag push skips", conclusion: "cancelled", event: "push", headBranch: "v6.43.0", want: false}, + {name: "hostile pull request lookalike skips", conclusion: "success", event: "pull_request", headBranch: "v6.43.0", want: false}, + } { + t.Run(test.name, func(t *testing.T) { + if got := shouldEnterPreflight(test.conclusion, test.event, test.headBranch); got != test.want { + t.Fatalf("selector decision = %v, want %v", got, test.want) + } + }) + } + + t.Run("hostile tag-shaped push still fails closed in preflight", func(t *testing.T) { + fixtureValue := workflowRunFixture(strings.Repeat("a", 40), "v1$(printf${IFS}INJECTED)") + fixture := writeJSONFixture(t, fixtureValue) + output := runImageGate(t, repo, false, + "-Mode", "ValidateWorkflowRun", + "-WorkflowRunFixturePath", fixture, + "-Repository", "thebtf/engram") + if strings.Contains(output, "value=v1INJECTED") { + t.Fatalf("hostile workflow_run ref was evaluated as shell source: %s", output) + } + }) +} + func testRepositorySingleWriter(t *testing.T, repo string) { t.Helper() allowedWorkflow := filepath.Clean(filepath.Join(repo, ".github", "workflows", "docker-publish.yml")) From a693d09fd123b99c3fbe12006dccd39f17598a90 Mon Sep 17 00:00:00 2001 From: Kirill Turanskiy Date: Mon, 13 Jul 2026 01:09:12 +0300 Subject: [PATCH 067/111] feat(observability): wire opt-in OTLP metrics runtime --- cmd/engram-server/main.go | 26 ++++++++- go.mod | 11 +++- go.sum | 30 ++++++---- internal/module/obs/metrics.go | 55 ++++++++++-------- internal/module/obs/runtime.go | 101 +++++++++++++++++++++++++++++++++ 5 files changed, 186 insertions(+), 37 deletions(-) create mode 100644 internal/module/obs/runtime.go diff --git a/cmd/engram-server/main.go b/cmd/engram-server/main.go index 0006be00..479edb0c 100644 --- a/cmd/engram-server/main.go +++ b/cmd/engram-server/main.go @@ -8,12 +8,13 @@ import ( "syscall" "time" + "github.com/rs/zerolog" + "github.com/rs/zerolog/log" _ "github.com/thebtf/engram/docs" "github.com/thebtf/engram/internal/config" "github.com/thebtf/engram/internal/logbuf" + "github.com/thebtf/engram/internal/module/obs" "github.com/thebtf/engram/internal/worker" - "github.com/rs/zerolog" - "github.com/rs/zerolog/log" ) var Version = "dev" @@ -50,16 +51,28 @@ func main() { Str("version", Version). Msg("Starting engram server") + telemetryCtx, telemetryCancel := context.WithTimeout(context.Background(), 5*time.Second) + telemetry, err := obs.Init(telemetryCtx, Version) + telemetryCancel() + if err != nil { + log.Fatal().Err(err).Msg("Failed to initialize observability") + } + obs.RecordRuntimeEvent(context.Background(), "startup", "started") + // Create service with version and log buffer svc, err := worker.NewService(Version, logRing) if err != nil { + obs.RecordRuntimeEvent(context.Background(), "worker", "initialization_error") log.Fatal().Err(err).Msg("Failed to create service") } + obs.RecordRuntimeEvent(context.Background(), "worker", "initialized") // Bring up listeners and background workers. if err := svc.Start(); err != nil { + obs.RecordRuntimeEvent(context.Background(), "server", "start_error") log.Fatal().Err(err).Msg("Failed to start service") } + obs.RecordRuntimeEvent(context.Background(), "server", "started") // Block until the OS delivers SIGINT or SIGTERM. quit := make(chan os.Signal, 1) @@ -73,7 +86,16 @@ func main() { defer cancel() if err := svc.Shutdown(ctx); err != nil { + obs.RecordRuntimeEvent(ctx, "worker", "shutdown_error") log.Error().Err(err).Msg("Shutdown error") + } else { + obs.RecordRuntimeEvent(ctx, "worker", "shutdown_complete") + } + + telemetryCtx, telemetryCancel = context.WithTimeout(context.Background(), 5*time.Second) + defer telemetryCancel() + if err := telemetry.Shutdown(telemetryCtx); err != nil { + log.Error().Msg("Observability shutdown failed; check collector availability") } log.Info().Msg("Worker shutdown complete") diff --git a/go.mod b/go.mod index 7d87b964..efaffe25 100644 --- a/go.mod +++ b/go.mod @@ -19,11 +19,16 @@ require ( github.com/thebtf/aimux/loom v0.1.0 github.com/thebtf/mcp-mux/muxcore v0.26.1 go.opentelemetry.io/otel v1.43.0 + go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.43.0 go.opentelemetry.io/otel/metric v1.43.0 + go.opentelemetry.io/otel/sdk v1.43.0 + go.opentelemetry.io/otel/sdk/metric v1.43.0 + go.opentelemetry.io/proto/otlp v1.10.0 go.uber.org/goleak v1.3.0 golang.org/x/crypto v0.52.0 golang.org/x/sync v0.20.0 - google.golang.org/grpc v1.79.3 + google.golang.org/genproto/googleapis/rpc v0.0.0-20260401024825-9d38bb4040a9 + google.golang.org/grpc v1.80.0 google.golang.org/protobuf v1.36.11 gopkg.in/yaml.v3 v3.0.1 gorm.io/driver/postgres v1.6.0 @@ -34,6 +39,7 @@ require ( require ( github.com/KyleBanks/depth v1.2.1 // indirect github.com/Microsoft/go-winio v0.6.2 // indirect + github.com/cenkalti/backoff/v5 v5.0.3 // indirect github.com/cespare/xxhash/v2 v2.3.0 // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/dustin/go-humanize v1.0.1 // indirect @@ -43,6 +49,7 @@ require ( github.com/go-openapi/jsonreference v0.20.0 // indirect github.com/go-openapi/spec v0.20.6 // indirect github.com/go-openapi/swag v0.19.15 // indirect + github.com/grpc-ecosystem/grpc-gateway/v2 v2.28.0 // indirect github.com/jackc/pgpassfile v1.0.0 // indirect github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761 // indirect github.com/jackc/puddle/v2 v2.2.2 // indirect @@ -64,7 +71,7 @@ require ( golang.org/x/sys v0.45.0 // indirect golang.org/x/text v0.37.0 // indirect golang.org/x/tools v0.44.0 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20251202230838-ff82c1b0f217 // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20260401024825-9d38bb4040a9 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect modernc.org/libc v1.70.0 // indirect modernc.org/mathutil v1.7.1 // indirect diff --git a/go.sum b/go.sum index 9f4899e5..a47248d2 100644 --- a/go.sum +++ b/go.sum @@ -2,6 +2,8 @@ github.com/KyleBanks/depth v1.2.1 h1:5h8fQADFrWtarTdtDudMmGsC7GPbOAu6RVB3ffsVFHc github.com/KyleBanks/depth v1.2.1/go.mod h1:jzSb9d0L43HxTQfT+oSA1EEp2q+ne2uh6XgeJcm8brE= github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY= github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU= +github.com/cenkalti/backoff/v5 v5.0.3 h1:ZN+IMa753KfX5hd8vVaMixjnqRZ3y8CuJKRKj1xcsSM= +github.com/cenkalti/backoff/v5 v5.0.3/go.mod h1:rkhZdG3JZukswDf7f0cwqPNk4K0sa+F97BxZthm/crw= github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= @@ -43,6 +45,8 @@ github.com/google/pprof v0.0.0-20250317173921-a4b03ec1a45e h1:ijClszYn+mADRFY17k github.com/google/pprof v0.0.0-20250317173921-a4b03ec1a45e/go.mod h1:boTsfXsheKC2y+lKOCMpSfarhxDeIzfZG1jqGcPl3cA= github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.28.0 h1:HWRh5R2+9EifMyIHV7ZV+MIZqgz+PMpZ14Jynv3O2Zs= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.28.0/go.mod h1:JfhWUomR1baixubs02l85lZYYOm7LV6om4ceouMv45c= github.com/hashicorp/golang-lru/v2 v2.0.7 h1:a+bsQ5rvGLjzHuww6tVxozPZFVghXaHOwFs4luLUK2k= github.com/hashicorp/golang-lru/v2 v2.0.7/go.mod h1:QeFd9opnmA6QUJc5vARoKUSoFhyfM2/ZepoAG6RGpeM= github.com/jackc/pgpassfile v1.0.0 h1:/6Hmqy13Ss2zCq62VdNG8tM1wchn8zjSGOBJ6icpsIM= @@ -118,14 +122,18 @@ go.opentelemetry.io/auto/sdk v1.2.1 h1:jXsnJ4Lmnqd11kwkBV2LgLoFMZKizbCi5fNZ/ipaZ go.opentelemetry.io/auto/sdk v1.2.1/go.mod h1:KRTj+aOaElaLi+wW1kO/DZRXwkF4C5xPbEe3ZiIhN7Y= go.opentelemetry.io/otel v1.43.0 h1:mYIM03dnh5zfN7HautFE4ieIig9amkNANT+xcVxAj9I= go.opentelemetry.io/otel v1.43.0/go.mod h1:JuG+u74mvjvcm8vj8pI5XiHy1zDeoCS2LB1spIq7Ay0= +go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.43.0 h1:8UQVDcZxOJLtX6gxtDt3vY2WTgvZqMQRzjsqiIHQdkc= +go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.43.0/go.mod h1:2lmweYCiHYpEjQ/lSJBYhj9jP1zvCvQW4BqL9dnT7FQ= go.opentelemetry.io/otel/metric v1.43.0 h1:d7638QeInOnuwOONPp4JAOGfbCEpYb+K6DVWvdxGzgM= go.opentelemetry.io/otel/metric v1.43.0/go.mod h1:RDnPtIxvqlgO8GRW18W6Z/4P462ldprJtfxHxyKd2PY= -go.opentelemetry.io/otel/sdk v1.39.0 h1:nMLYcjVsvdui1B/4FRkwjzoRVsMK8uL/cj0OyhKzt18= -go.opentelemetry.io/otel/sdk v1.39.0/go.mod h1:vDojkC4/jsTJsE+kh+LXYQlbL8CgrEcwmt1ENZszdJE= -go.opentelemetry.io/otel/sdk/metric v1.39.0 h1:cXMVVFVgsIf2YL6QkRF4Urbr/aMInf+2WKg+sEJTtB8= -go.opentelemetry.io/otel/sdk/metric v1.39.0/go.mod h1:xq9HEVH7qeX69/JnwEfp6fVq5wosJsY1mt4lLfYdVew= +go.opentelemetry.io/otel/sdk v1.43.0 h1:pi5mE86i5rTeLXqoF/hhiBtUNcrAGHLKQdhg4h4V9Dg= +go.opentelemetry.io/otel/sdk v1.43.0/go.mod h1:P+IkVU3iWukmiit/Yf9AWvpyRDlUeBaRg6Y+C58QHzg= +go.opentelemetry.io/otel/sdk/metric v1.43.0 h1:S88dyqXjJkuBNLeMcVPRFXpRw2fuwdvfCGLEo89fDkw= +go.opentelemetry.io/otel/sdk/metric v1.43.0/go.mod h1:C/RJtwSEJ5hzTiUz5pXF1kILHStzb9zFlIEe85bhj6A= go.opentelemetry.io/otel/trace v1.43.0 h1:BkNrHpup+4k4w+ZZ86CZoHHEkohws8AY+WTX09nk+3A= go.opentelemetry.io/otel/trace v1.43.0/go.mod h1:/QJhyVBUUswCphDVxq+8mld+AvhXZLhe+8WVFxiFff0= +go.opentelemetry.io/proto/otlp v1.10.0 h1:IQRWgT5srOCYfiWnpqUYz9CVmbO8bFmKcwYxpuCSL2g= +go.opentelemetry.io/proto/otlp v1.10.0/go.mod h1:/CV4QoCR/S9yaPj8utp3lvQPoqMtxXdzn7ozvvozVqk= go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= @@ -160,12 +168,14 @@ golang.org/x/text v0.37.0/go.mod h1:a5sjxXGs9hsn/AJVwuElvCAo9v8QYLzvavO5z2PiM38= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.44.0 h1:UP4ajHPIcuMjT1GqzDWRlalUEoY+uzoZKnhOjbIPD2c= golang.org/x/tools v0.44.0/go.mod h1:KA0AfVErSdxRZIsOVipbv3rQhVXTnlU6UhKxHd1seDI= -gonum.org/v1/gonum v0.16.0 h1:5+ul4Swaf3ESvrOnidPp4GZbzf0mxVQpDCYUQE7OJfk= -gonum.org/v1/gonum v0.16.0/go.mod h1:fef3am4MQ93R2HHpKnLk4/Tbh/s0+wqD5nfa6Pnwy4E= -google.golang.org/genproto/googleapis/rpc v0.0.0-20251202230838-ff82c1b0f217 h1:gRkg/vSppuSQoDjxyiGfN4Upv/h/DQmIR10ZU8dh4Ww= -google.golang.org/genproto/googleapis/rpc v0.0.0-20251202230838-ff82c1b0f217/go.mod h1:7i2o+ce6H/6BluujYR+kqX3GKH+dChPTQU19wjRPiGk= -google.golang.org/grpc v1.79.3 h1:sybAEdRIEtvcD68Gx7dmnwjZKlyfuc61Dyo9pGXXkKE= -google.golang.org/grpc v1.79.3/go.mod h1:KmT0Kjez+0dde/v2j9vzwoAScgEPx/Bw1CYChhHLrHQ= +gonum.org/v1/gonum v0.17.0 h1:VbpOemQlsSMrYmn7T2OUvQ4dqxQXU+ouZFQsZOx50z4= +gonum.org/v1/gonum v0.17.0/go.mod h1:El3tOrEuMpv2UdMrbNlKEh9vd86bmQ6vqIcDwxEOc1E= +google.golang.org/genproto/googleapis/api v0.0.0-20260401024825-9d38bb4040a9 h1:VPWxll4HlMw1Vs/qXtN7BvhZqsS9cdAittCNvVENElA= +google.golang.org/genproto/googleapis/api v0.0.0-20260401024825-9d38bb4040a9/go.mod h1:7QBABkRtR8z+TEnmXTqIqwJLlzrZKVfAUm7tY3yGv0M= +google.golang.org/genproto/googleapis/rpc v0.0.0-20260401024825-9d38bb4040a9 h1:m8qni9SQFH0tJc1X0vmnpw/0t+AImlSvp30sEupozUg= +google.golang.org/genproto/googleapis/rpc v0.0.0-20260401024825-9d38bb4040a9/go.mod h1:4Hqkh8ycfw05ld/3BWL7rJOSfebL2Q+DVDeRgYgxUU8= +google.golang.org/grpc v1.80.0 h1:Xr6m2WmWZLETvUNvIUmeD5OAagMw3FiKmMlTdViWsHM= +google.golang.org/grpc v1.80.0/go.mod h1:ho/dLnxwi3EDJA4Zghp7k2Ec1+c2jqup0bFkw07bwF4= google.golang.org/protobuf v1.36.11 h1:fV6ZwhNocDyBLK0dj+fg8ektcVegBBuEolpbTQyBNVE= google.golang.org/protobuf v1.36.11/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= diff --git a/internal/module/obs/metrics.go b/internal/module/obs/metrics.go index 78a10243..bdcd77cd 100644 --- a/internal/module/obs/metrics.go +++ b/internal/module/obs/metrics.go @@ -3,21 +3,17 @@ // by the dispatcher and lifecycle pipeline are registered here and exposed via // typed helper functions. // -// Default behaviour: when OTEL_EXPORTER_OTLP_ENDPOINT is unset, the global -// meter provider returned by otel.GetMeterProvider() is a no-op. Recording -// metrics against it is safe and has effectively zero cost. The export -// pipeline is activated only when the standard OTel environment variables -// select a real exporter — no engram-specific configuration is required. +// Default behaviour: when neither OTEL_EXPORTER_OTLP_ENDPOINT nor +// OTEL_EXPORTER_OTLP_METRICS_ENDPOINT is set, Init leaves the global meter +// provider as a no-op. Recording metrics is therefore safe and cheap. // // Framework rule: no code outside this package may call otel.GetMeterProvider() // or construct meters directly. This guarantees a single place to add caching, // labels, or exporter hooks in the future. // -// Operator guidance: to enable metric export, set OTEL_EXPORTER_OTLP_ENDPOINT -// to point at your collector (e.g. http://collector:4317) and register an OTel -// SDK in your process before the first metric call. Engram itself does NOT -// spawn or configure an exporter — this is intentional; the upstream OTel -// no-op default is the correct choice for embedded libraries. +// Operator guidance: set OTEL_EXPORTER_OTLP_ENDPOINT (or the metrics-specific +// variant) to an http:// or https:// OTLP/gRPC collector URL. Init wires the +// SDK from the standard OTel environment-variable contract. package obs import ( @@ -43,19 +39,6 @@ func meter() metric.Meter { return otel.GetMeterProvider().Meter(scopeName) } -// Init prepares the obs package for use. In v0.1.0 it returns nil immediately -// because the OTel SDK auto-wires via the global meter provider — engram does -// not configure any exporter itself. Instruments are created lazily on first -// use (sync.Once per instrument) so calling Init is optional but signals -// intent at the call site. -// -// Operators who want real metric export should register an OTel SDK and set -// OTEL_EXPORTER_OTLP_ENDPOINT before calling Init. Init will then pick up the -// configured provider through otel.GetMeterProvider(). -func Init() error { - return nil -} - // --------------------------------------------------------------------------- // instruments — lazily-initialised metric instruments // --------------------------------------------------------------------------- @@ -88,6 +71,9 @@ type instruments struct { // No labels — avoiding cardinality explosion per design.md §6. activeSessionsOnce sync.Once activeSessions metric.Int64UpDownCounter + + runtimeEventsOnce sync.Once + runtimeEvents metric.Int64Counter } // global is the process-wide instrument set. It is intentionally unexported @@ -254,6 +240,29 @@ func DecrementActiveSessions(ctx context.Context) { global.activeSessions.Add(ctx, -1) } +// RecordRuntimeEvent records one bounded-cardinality lifecycle diagnostic. +// component and outcome must be fixed program values, never request data. +func RecordRuntimeEvent(ctx context.Context, component, outcome string) { + global.runtimeEventsOnce.Do(func() { + c, err := meter().Int64Counter( + "engram_runtime_events_total", + metric.WithDescription("Engram server lifecycle events labelled by component and outcome"), + ) + if err != nil { + slog.Warn("obs: failed to create engram_runtime_events_total counter", "error", err) + return + } + global.runtimeEvents = c + }) + if global.runtimeEvents == nil { + return + } + global.runtimeEvents.Add(ctx, 1, metric.WithAttributes( + attribute.String("component", component), + attribute.String("outcome", outcome), + )) +} + // --------------------------------------------------------------------------- // ResetInstrumentsForTesting — test helper ONLY // --------------------------------------------------------------------------- diff --git a/internal/module/obs/runtime.go b/internal/module/obs/runtime.go new file mode 100644 index 00000000..c0560f5b --- /dev/null +++ b/internal/module/obs/runtime.go @@ -0,0 +1,101 @@ +package obs + +import ( + "context" + "errors" + "net/url" + "os" + "sync" + "time" + + "go.opentelemetry.io/otel" + "go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc" + "go.opentelemetry.io/otel/metric" + sdkmetric "go.opentelemetry.io/otel/sdk/metric" + "go.opentelemetry.io/otel/sdk/resource" + semconv "go.opentelemetry.io/otel/semconv/v1.37.0" +) + +const serviceName = "engram-server" + +// Runtime owns Engram's process-wide metrics pipeline. A disabled Runtime is a +// valid no-op value when no OTLP endpoint was explicitly configured. +type Runtime struct { + enabled bool + provider *sdkmetric.MeterProvider + previous metric.MeterProvider + + shutdownOnce sync.Once + shutdownErr error +} + +// Init installs an OTLP/gRPC metric pipeline only when an endpoint is +// explicitly configured. All exporter connection settings continue to come +// from the standard OTEL_EXPORTER_OTLP_* environment variables. +func Init(ctx context.Context, serviceVersion string) (*Runtime, error) { + endpoint := os.Getenv("OTEL_EXPORTER_OTLP_METRICS_ENDPOINT") + if endpoint == "" { + endpoint = os.Getenv("OTEL_EXPORTER_OTLP_ENDPOINT") + } + if endpoint == "" { + return &Runtime{}, nil + } + if !safeEndpoint(endpoint) { + return nil, errors.New("invalid OTLP metrics endpoint: require http(s) URL without credentials, query, or fragment") + } + + exporter, err := otlpmetricgrpc.New(ctx, otlpmetricgrpc.WithRetry(otlpmetricgrpc.RetryConfig{ + Enabled: true, + InitialInterval: 200 * time.Millisecond, + MaxInterval: time.Second, + MaxElapsedTime: 5 * time.Second, + })) + if err != nil { + return nil, errors.New("initialize OTLP metrics exporter: check endpoint and TLS configuration") + } + + res := resource.NewWithAttributes( + semconv.SchemaURL, + semconv.ServiceName(serviceName), + semconv.ServiceVersion(serviceVersion), + ) + reader := sdkmetric.NewPeriodicReader(exporter) + provider := sdkmetric.NewMeterProvider( + sdkmetric.WithReader(reader), + sdkmetric.WithResource(res), + ) + previous := otel.GetMeterProvider() + otel.SetMeterProvider(provider) + ResetInstrumentsForTesting() + return &Runtime{enabled: true, provider: provider, previous: previous}, nil +} + +func safeEndpoint(raw string) bool { + u, err := url.Parse(raw) + return err == nil && (u.Scheme == "http" || u.Scheme == "https") && u.Host != "" && u.User == nil && u.RawQuery == "" && u.Fragment == "" +} + +// Enabled reports whether this runtime owns an active OTLP exporter. +func (r *Runtime) Enabled() bool { return r != nil && r.enabled } + +// ForceFlush exports all pending metrics within the caller's deadline. +func (r *Runtime) ForceFlush(ctx context.Context) error { + if r == nil || r.provider == nil { + return nil + } + return r.provider.ForceFlush(ctx) +} + +// Shutdown flushes and closes the exporter once. It restores the prior global +// provider so tests and embedded callers cannot record into a closed provider. +func (r *Runtime) Shutdown(ctx context.Context) error { + if r == nil || r.provider == nil { + return nil + } + r.shutdownOnce.Do(func() { + r.shutdownErr = r.provider.Shutdown(ctx) + otel.SetMeterProvider(r.previous) + ResetInstrumentsForTesting() + }) + return r.shutdownErr +} From 0b512935189ff23c0abfedcd8addd98063442dcb Mon Sep 17 00:00:00 2001 From: Kirill Turanskiy Date: Mon, 13 Jul 2026 01:09:12 +0300 Subject: [PATCH 068/111] test(observability): prove hostile OTLP exporter paths --- internal/module/obs/runtime_test.go | 314 +++++++++++++++++++++++ scripts/production-smoke/verify-otlp.ps1 | 62 +++++ 2 files changed, 376 insertions(+) create mode 100644 internal/module/obs/runtime_test.go create mode 100644 scripts/production-smoke/verify-otlp.ps1 diff --git a/internal/module/obs/runtime_test.go b/internal/module/obs/runtime_test.go new file mode 100644 index 00000000..48a89397 --- /dev/null +++ b/internal/module/obs/runtime_test.go @@ -0,0 +1,314 @@ +package obs + +import ( + "context" + "net" + "strings" + "sync" + "testing" + "time" + + collector "go.opentelemetry.io/proto/otlp/collector/metrics/v1" + "google.golang.org/grpc" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/metadata" + "google.golang.org/grpc/status" + "google.golang.org/protobuf/encoding/protojson" +) + +type metricReceiver struct { + collector.UnimplementedMetricsServiceServer + + mu sync.Mutex + requests []*collector.ExportMetricsServiceRequest + requiredHeader string + delay time.Duration + responseCode codes.Code + attempts int +} + +func (r *metricReceiver) Export(ctx context.Context, req *collector.ExportMetricsServiceRequest) (*collector.ExportMetricsServiceResponse, error) { + r.mu.Lock() + r.attempts++ + r.mu.Unlock() + if r.delay > 0 { + select { + case <-time.After(r.delay): + case <-ctx.Done(): + return nil, ctx.Err() + } + } + if r.requiredHeader != "" { + md, _ := metadata.FromIncomingContext(ctx) + if got := md.Get("authorization"); len(got) != 1 || got[0] != r.requiredHeader { + return nil, status.Error(codes.Unauthenticated, "collector authentication failed") + } + } + if r.responseCode != codes.OK { + return nil, status.Error(r.responseCode, "collector rejected telemetry") + } + r.mu.Lock() + r.requests = append(r.requests, req) + r.mu.Unlock() + return &collector.ExportMetricsServiceResponse{}, nil +} + +func (r *metricReceiver) attemptCount() int { + r.mu.Lock() + defer r.mu.Unlock() + return r.attempts +} + +func (r *metricReceiver) snapshot() []*collector.ExportMetricsServiceRequest { + r.mu.Lock() + defer r.mu.Unlock() + return append([]*collector.ExportMetricsServiceRequest(nil), r.requests...) +} + +func startMetricReceiver(t *testing.T, receiver *metricReceiver) string { + t.Helper() + listener, err := net.Listen("tcp", "127.0.0.1:0") + if err != nil { + t.Fatal(err) + } + server := grpc.NewServer() + collector.RegisterMetricsServiceServer(server, receiver) + go func() { _ = server.Serve(listener) }() + t.Cleanup(func() { + server.Stop() + _ = listener.Close() + }) + return "http://" + listener.Addr().String() +} + +func clearOTLPEnv(t *testing.T) { + t.Helper() + for _, key := range []string{ + "OTEL_EXPORTER_OTLP_ENDPOINT", + "OTEL_EXPORTER_OTLP_METRICS_ENDPOINT", + "OTEL_EXPORTER_OTLP_HEADERS", + "OTEL_EXPORTER_OTLP_METRICS_HEADERS", + "OTEL_EXPORTER_OTLP_TIMEOUT", + "OTEL_EXPORTER_OTLP_METRICS_TIMEOUT", + "OTEL_EXPORTER_OTLP_CERTIFICATE", + "OTEL_EXPORTER_OTLP_METRICS_CERTIFICATE", + } { + t.Setenv(key, "") + } +} + +func TestInitNoEndpointIsNoop(t *testing.T) { + clearOTLPEnv(t) + runtime, err := Init(context.Background(), "vtest") + if err != nil { + t.Fatal(err) + } + if runtime.Enabled() { + t.Fatal("telemetry must remain disabled without an explicit endpoint") + } + RecordRuntimeEvent(context.Background(), "startup", "started") + if err := runtime.Shutdown(context.Background()); err != nil { + t.Fatal(err) + } +} + +func TestOTLPExportsStableMetricsAndKeepsHeaderOutOfPayload(t *testing.T) { + clearOTLPEnv(t) + const secret = "Bearer-test-secret-should-not-be-in-payload" + receiver := &metricReceiver{requiredHeader: secret} + t.Setenv("OTEL_EXPORTER_OTLP_METRICS_ENDPOINT", startMetricReceiver(t, receiver)) + t.Setenv("OTEL_EXPORTER_OTLP_METRICS_HEADERS", "authorization="+secret) + t.Setenv("OTEL_EXPORTER_OTLP_METRICS_TIMEOUT", "1000") + + runtime, err := Init(context.Background(), "vtest") + if err != nil { + t.Fatal(err) + } + RecordRuntimeEvent(context.Background(), "startup", "started") + RecordHandleTool(context.Background(), "engramcore", "recall", "ok", 7) + RecordHandleToolError(context.Background(), "engramcore", "recall", "timeout") + RecordModuleInit(context.Background(), "engramcore", 3) + IncrementActiveSessions(context.Background()) + + ctx, cancel := context.WithTimeout(context.Background(), 2*time.Second) + defer cancel() + if err := runtime.ForceFlush(ctx); err != nil { + t.Fatal(err) + } + if err := runtime.Shutdown(ctx); err != nil { + t.Fatal(err) + } + + requests := receiver.snapshot() + if len(requests) == 0 { + t.Fatal("collector received no metric export") + } + wire, err := protojson.Marshal(requests[0]) + if err != nil { + t.Fatal(err) + } + if strings.Contains(string(wire), secret) { + t.Fatal("OTLP header secret leaked into metric payload") + } + for _, name := range []string{ + "engram_runtime_events_total", + "engram_handletool_duration_ms", + "engram_handletool_errors_total", + "engram_module_init_duration_ms", + "engram_active_sessions", + } { + if !strings.Contains(string(wire), name) { + t.Fatalf("OTLP payload missing stable metric %q", name) + } + } +} + +func TestCollectorAuthFailureIsBoundedAndSecretFree(t *testing.T) { + clearOTLPEnv(t) + const secret = "wrong-secret-value" + receiver := &metricReceiver{requiredHeader: "Bearer-correct"} + t.Setenv("OTEL_EXPORTER_OTLP_METRICS_ENDPOINT", startMetricReceiver(t, receiver)) + t.Setenv("OTEL_EXPORTER_OTLP_METRICS_HEADERS", "authorization="+secret) + t.Setenv("OTEL_EXPORTER_OTLP_METRICS_TIMEOUT", "1000") + + runtime, err := Init(context.Background(), "vtest") + if err != nil { + t.Fatal(err) + } + RecordRuntimeEvent(context.Background(), "auth", "failure") + ctx, cancel := context.WithTimeout(context.Background(), time.Second) + defer cancel() + err = runtime.ForceFlush(ctx) + if err == nil { + t.Fatal("expected collector authentication failure") + } + if strings.Contains(err.Error(), secret) { + t.Fatal("exporter error leaked authorization header") + } + _ = runtime.Shutdown(ctx) +} + +func TestCollectorBackpressureHonorsDeadline(t *testing.T) { + clearOTLPEnv(t) + receiver := &metricReceiver{delay: 500 * time.Millisecond} + t.Setenv("OTEL_EXPORTER_OTLP_METRICS_ENDPOINT", startMetricReceiver(t, receiver)) + t.Setenv("OTEL_EXPORTER_OTLP_METRICS_TIMEOUT", "50") + + runtime, err := Init(context.Background(), "vtest") + if err != nil { + t.Fatal(err) + } + RecordRuntimeEvent(context.Background(), "worker", "backpressure_probe") + started := time.Now() + ctx, cancel := context.WithTimeout(context.Background(), 400*time.Millisecond) + defer cancel() + if err := runtime.ForceFlush(ctx); err == nil { + t.Fatal("expected bounded export timeout") + } + if elapsed := time.Since(started); elapsed > 450*time.Millisecond { + t.Fatalf("export backpressure exceeded deadline: %s", elapsed) + } + _ = runtime.Shutdown(ctx) +} + +func TestTransientCollectorFailureRetriesWithinCallerDeadline(t *testing.T) { + clearOTLPEnv(t) + receiver := &metricReceiver{responseCode: codes.Unavailable} + t.Setenv("OTEL_EXPORTER_OTLP_METRICS_ENDPOINT", startMetricReceiver(t, receiver)) + t.Setenv("OTEL_EXPORTER_OTLP_METRICS_TIMEOUT", "1000") + runtime, err := Init(context.Background(), "vtest") + if err != nil { + t.Fatal(err) + } + RecordRuntimeEvent(context.Background(), "worker", "retry_probe") + ctx, cancel := context.WithTimeout(context.Background(), 750*time.Millisecond) + defer cancel() + if err := runtime.ForceFlush(ctx); err == nil { + t.Fatal("expected transient collector failure") + } + if receiver.attemptCount() < 2 { + t.Fatalf("transient collector failure was not retried: attempts=%d", receiver.attemptCount()) + } + _ = runtime.Shutdown(ctx) +} + +func TestExporterOutageAndTLSMismatchAreBounded(t *testing.T) { + for _, tc := range []struct { + name string + endpoint func(t *testing.T) string + }{ + { + name: "outage", + endpoint: func(t *testing.T) string { + listener, err := net.Listen("tcp", "127.0.0.1:0") + if err != nil { + t.Fatal(err) + } + address := listener.Addr().String() + _ = listener.Close() + return "http://" + address + }, + }, + { + name: "tls_mismatch", + endpoint: func(t *testing.T) string { + receiver := &metricReceiver{} + return strings.Replace(startMetricReceiver(t, receiver), "http://", "https://", 1) + }, + }, + } { + t.Run(tc.name, func(t *testing.T) { + clearOTLPEnv(t) + t.Setenv("OTEL_EXPORTER_OTLP_METRICS_ENDPOINT", tc.endpoint(t)) + t.Setenv("OTEL_EXPORTER_OTLP_METRICS_TIMEOUT", "50") + runtime, err := Init(context.Background(), "vtest") + if err != nil { + t.Fatal(err) + } + RecordRuntimeEvent(context.Background(), "worker", "failure_probe") + started := time.Now() + ctx, cancel := context.WithTimeout(context.Background(), 350*time.Millisecond) + defer cancel() + if err := runtime.ForceFlush(ctx); err == nil { + t.Fatal("expected exporter failure") + } + if elapsed := time.Since(started); elapsed > 450*time.Millisecond { + t.Fatalf("exporter failure exceeded deadline: %s", elapsed) + } + _ = runtime.Shutdown(ctx) + }) + } +} + +func TestShutdownFlushesPendingMetric(t *testing.T) { + clearOTLPEnv(t) + receiver := &metricReceiver{} + t.Setenv("OTEL_EXPORTER_OTLP_METRICS_ENDPOINT", startMetricReceiver(t, receiver)) + t.Setenv("OTEL_EXPORTER_OTLP_METRICS_TIMEOUT", "1000") + runtime, err := Init(context.Background(), "vtest") + if err != nil { + t.Fatal(err) + } + RecordRuntimeEvent(context.Background(), "worker", "shutdown_probe") + ctx, cancel := context.WithTimeout(context.Background(), 2*time.Second) + defer cancel() + if err := runtime.Shutdown(ctx); err != nil { + t.Fatal(err) + } + if len(receiver.snapshot()) == 0 { + t.Fatal("shutdown did not flush pending metrics") + } +} + +func TestEndpointCredentialsAreRejectedWithoutEcho(t *testing.T) { + clearOTLPEnv(t) + const secret = "do-not-echo" + t.Setenv("OTEL_EXPORTER_OTLP_METRICS_ENDPOINT", "https://user:"+secret+"@collector.invalid:4317") + _, err := Init(context.Background(), "vtest") + if err == nil { + t.Fatal("expected endpoint credentials to be rejected") + } + if strings.Contains(err.Error(), secret) { + t.Fatal("validation error echoed endpoint credentials") + } +} diff --git a/scripts/production-smoke/verify-otlp.ps1 b/scripts/production-smoke/verify-otlp.ps1 new file mode 100644 index 00000000..00680776 --- /dev/null +++ b/scripts/production-smoke/verify-otlp.ps1 @@ -0,0 +1,62 @@ +[CmdletBinding()] +param( + [string]$ArtifactRoot = ".agent/reports/evidence/production-ready/observability" +) + +$ErrorActionPreference = "Stop" +$repoRoot = (Resolve-Path (Join-Path $PSScriptRoot "../..")).Path +$artifactPath = if ([System.IO.Path]::IsPathRooted($ArtifactRoot)) { + $ArtifactRoot +} else { + Join-Path $repoRoot $ArtifactRoot +} + +New-Item -ItemType Directory -Force -Path $artifactPath | Out-Null +$jsonLog = Join-Path $artifactPath "go-test.jsonl" +$summaryPath = Join-Path $artifactPath "summary.json" +$startedAt = [DateTimeOffset]::UtcNow + +Push-Location $repoRoot +try { + $output = & go test ./internal/module/obs -count=1 -json 2>&1 + $exitCode = $LASTEXITCODE + $output | Set-Content -Encoding utf8 $jsonLog + + $events = @($output | ForEach-Object { + try { $_ | ConvertFrom-Json -ErrorAction Stop } catch { $null } + } | Where-Object { $null -ne $_ }) + $failedTests = @($events | Where-Object { $_.Action -eq "fail" -and $_.Test } | Select-Object -ExpandProperty Test -Unique) + $required = @( + "TestInitNoEndpointIsNoop", + "TestOTLPExportsStableMetricsAndKeepsHeaderOutOfPayload", + "TestCollectorAuthFailureIsBoundedAndSecretFree", + "TestCollectorBackpressureHonorsDeadline", + "TestTransientCollectorFailureRetriesWithinCallerDeadline", + "TestExporterOutageAndTLSMismatchAreBounded", + "TestShutdownFlushesPendingMetric", + "TestEndpointCredentialsAreRejectedWithoutEcho" + ) + $passedTests = @($events | Where-Object { $_.Action -eq "pass" -and $_.Test } | Select-Object -ExpandProperty Test -Unique) + $missing = @($required | Where-Object { $_ -notin $passedTests }) + $result = [ordered]@{ + schema_version = 1 + gate = "observability-otlp" + started_at_utc = $startedAt.ToString("o") + completed_at_utc = [DateTimeOffset]::UtcNow.ToString("o") + command = "go test ./internal/module/obs -count=1 -json" + exit_code = $exitCode + required_tests = $required + missing_tests = $missing + failed_tests = $failedTests + process_residue = @() + container_residue = @() + verdict = if ($exitCode -eq 0 -and $missing.Count -eq 0 -and $failedTests.Count -eq 0) { "PASS" } else { "FAIL" } + } + $result | ConvertTo-Json -Depth 5 | Set-Content -Encoding utf8 $summaryPath + if ($result.verdict -ne "PASS") { + throw "OTLP verification failed; see $summaryPath" + } + Write-Output $summaryPath +} finally { + Pop-Location +} From 17dcfadc7ea152d687d298b13a4cbba022d591fc Mon Sep 17 00:00:00 2001 From: Kirill Turanskiy Date: Mon, 13 Jul 2026 01:13:46 +0300 Subject: [PATCH 069/111] test(observability): prove trusted OTLP TLS transport --- internal/module/obs/runtime_test.go | 85 ++++++++++++++++++++++++ scripts/production-smoke/verify-otlp.ps1 | 1 + 2 files changed, 86 insertions(+) diff --git a/internal/module/obs/runtime_test.go b/internal/module/obs/runtime_test.go index 48a89397..1d797878 100644 --- a/internal/module/obs/runtime_test.go +++ b/internal/module/obs/runtime_test.go @@ -2,7 +2,15 @@ package obs import ( "context" + "crypto/rand" + "crypto/rsa" + "crypto/tls" + "crypto/x509" + "crypto/x509/pkix" + "encoding/pem" + "math/big" "net" + "os" "strings" "sync" "testing" @@ -11,6 +19,7 @@ import ( collector "go.opentelemetry.io/proto/otlp/collector/metrics/v1" "google.golang.org/grpc" "google.golang.org/grpc/codes" + "google.golang.org/grpc/credentials" "google.golang.org/grpc/metadata" "google.golang.org/grpc/status" "google.golang.org/protobuf/encoding/protojson" @@ -81,6 +90,57 @@ func startMetricReceiver(t *testing.T, receiver *metricReceiver) string { return "http://" + listener.Addr().String() } +func startTLSMetricReceiver(t *testing.T, receiver *metricReceiver) (string, string) { + t.Helper() + key, err := rsa.GenerateKey(rand.Reader, 2048) + if err != nil { + t.Fatal(err) + } + template := &x509.Certificate{ + SerialNumber: big.NewInt(1), + Subject: pkix.Name{CommonName: "localhost"}, + DNSNames: []string{"localhost"}, + NotBefore: time.Now().Add(-time.Minute), + NotAfter: time.Now().Add(time.Hour), + KeyUsage: x509.KeyUsageDigitalSignature | x509.KeyUsageKeyEncipherment | x509.KeyUsageCertSign, + ExtKeyUsage: []x509.ExtKeyUsage{x509.ExtKeyUsageServerAuth}, + IsCA: true, + } + der, err := x509.CreateCertificate(rand.Reader, template, template, &key.PublicKey, key) + if err != nil { + t.Fatal(err) + } + certPEM := pem.EncodeToMemory(&pem.Block{Type: "CERTIFICATE", Bytes: der}) + keyPEM := pem.EncodeToMemory(&pem.Block{Type: "RSA PRIVATE KEY", Bytes: x509.MarshalPKCS1PrivateKey(key)}) + serverCert, err := tls.X509KeyPair(certPEM, keyPEM) + if err != nil { + t.Fatal(err) + } + certPath := t.TempDir() + "/collector-ca.pem" + if err := os.WriteFile(certPath, certPEM, 0o600); err != nil { + t.Fatal(err) + } + listener, err := net.Listen("tcp", "127.0.0.1:0") + if err != nil { + t.Fatal(err) + } + server := grpc.NewServer(grpc.Creds(credentials.NewTLS(&tls.Config{ + Certificates: []tls.Certificate{serverCert}, + MinVersion: tls.VersionTLS12, + }))) + collector.RegisterMetricsServiceServer(server, receiver) + go func() { _ = server.Serve(listener) }() + t.Cleanup(func() { + server.Stop() + _ = listener.Close() + }) + _, port, err := net.SplitHostPort(listener.Addr().String()) + if err != nil { + t.Fatal(err) + } + return "https://localhost:" + port, certPath +} + func clearOTLPEnv(t *testing.T) { t.Helper() for _, key := range []string{ @@ -163,6 +223,31 @@ func TestOTLPExportsStableMetricsAndKeepsHeaderOutOfPayload(t *testing.T) { } } +func TestOTLPTLSWithExplicitTrustRoot(t *testing.T) { + clearOTLPEnv(t) + receiver := &metricReceiver{} + endpoint, certPath := startTLSMetricReceiver(t, receiver) + t.Setenv("OTEL_EXPORTER_OTLP_METRICS_ENDPOINT", endpoint) + t.Setenv("OTEL_EXPORTER_OTLP_METRICS_CERTIFICATE", certPath) + t.Setenv("OTEL_EXPORTER_OTLP_METRICS_TIMEOUT", "1000") + runtime, err := Init(context.Background(), "vtest") + if err != nil { + t.Fatal(err) + } + RecordRuntimeEvent(context.Background(), "startup", "tls_probe") + ctx, cancel := context.WithTimeout(context.Background(), 2*time.Second) + defer cancel() + if err := runtime.ForceFlush(ctx); err != nil { + t.Fatal(err) + } + if err := runtime.Shutdown(ctx); err != nil { + t.Fatal(err) + } + if len(receiver.snapshot()) == 0 { + t.Fatal("TLS collector received no metric export") + } +} + func TestCollectorAuthFailureIsBoundedAndSecretFree(t *testing.T) { clearOTLPEnv(t) const secret = "wrong-secret-value" diff --git a/scripts/production-smoke/verify-otlp.ps1 b/scripts/production-smoke/verify-otlp.ps1 index 00680776..8a37a492 100644 --- a/scripts/production-smoke/verify-otlp.ps1 +++ b/scripts/production-smoke/verify-otlp.ps1 @@ -29,6 +29,7 @@ try { $required = @( "TestInitNoEndpointIsNoop", "TestOTLPExportsStableMetricsAndKeepsHeaderOutOfPayload", + "TestOTLPTLSWithExplicitTrustRoot", "TestCollectorAuthFailureIsBoundedAndSecretFree", "TestCollectorBackpressureHonorsDeadline", "TestTransientCollectorFailureRetriesWithinCallerDeadline", From befa3726437432ad25d21dbaf9c052f9a3075ee6 Mon Sep 17 00:00:00 2001 From: Kirill Turanskiy Date: Mon, 13 Jul 2026 01:15:57 +0300 Subject: [PATCH 070/111] test(recovery): prove PostgreSQL backup restore --- .../OPS-RECOVERY-DATA-R1.red.json | 8 + .../OPS-RECOVERY-DATA-R1.tdd.json | 28 ++ .../ops-recovery/behavior-signal.md | 51 ++++ .../verify-postgres-backup-restore.ps1 | 289 ++++++++++++++++++ .../recovery/postgres_backup_restore_test.go | 35 +++ tests/fixtures/recovery/fixture/main.go | 197 ++++++++++++ 6 files changed, 608 insertions(+) create mode 100644 .agent/reports/evidence/production-ready/ops-recovery/OPS-RECOVERY-DATA-R1.red.json create mode 100644 .agent/reports/evidence/production-ready/ops-recovery/OPS-RECOVERY-DATA-R1.tdd.json create mode 100644 .agent/reports/evidence/production-ready/ops-recovery/behavior-signal.md create mode 100644 scripts/recovery/verify-postgres-backup-restore.ps1 create mode 100644 tests/critical/recovery/postgres_backup_restore_test.go create mode 100644 tests/fixtures/recovery/fixture/main.go diff --git a/.agent/reports/evidence/production-ready/ops-recovery/OPS-RECOVERY-DATA-R1.red.json b/.agent/reports/evidence/production-ready/ops-recovery/OPS-RECOVERY-DATA-R1.red.json new file mode 100644 index 00000000..852c1fba --- /dev/null +++ b/.agent/reports/evidence/production-ready/ops-recovery/OPS-RECOVERY-DATA-R1.red.json @@ -0,0 +1,8 @@ +{ + "task_id": "OPS-RECOVERY-DATA-R1", + "observed_at": "2026-07-12T22:01:50.0009515Z", + "test_file": "tests/critical/recovery/postgres_backup_restore_test.go", + "test_name": "TestOperatorCanRestorePostgresBackup_RecoversDurableEngramDataAndRejectsUnsafeRestores", + "failure_reason": "The critical user-flow test failed because the recovery harness did not yet exist.", + "runner_stdout_excerpt": "operator recovery flow failed: exit status 64; verify-postgres-backup-restore.ps1 is not recognized as a script file; --- FAIL" +} diff --git a/.agent/reports/evidence/production-ready/ops-recovery/OPS-RECOVERY-DATA-R1.tdd.json b/.agent/reports/evidence/production-ready/ops-recovery/OPS-RECOVERY-DATA-R1.tdd.json new file mode 100644 index 00000000..f5d4d59c --- /dev/null +++ b/.agent/reports/evidence/production-ready/ops-recovery/OPS-RECOVERY-DATA-R1.tdd.json @@ -0,0 +1,28 @@ +{ + "task_id": "OPS-RECOVERY-DATA-R1", + "stack": "GO_AND_POWERSHELL", + "red": { + "observed_at": "2026-07-12T22:01:50.0009515Z", + "test_file": "tests/critical/recovery/postgres_backup_restore_test.go", + "test_name": "TestOperatorCanRestorePostgresBackup_RecoversDurableEngramDataAndRejectsUnsafeRestores", + "failure_reason": "Recovery harness absent", + "runner_stdout_excerpt": "verify-postgres-backup-restore.ps1 is not recognized as a script file; FAIL" + }, + "green": { + "observed_at": "2026-07-12T22:15:28.6678909Z", + "passed_tests": 1, + "failed_tests": 0, + "skipped_tests": 0, + "regressed_tests": 0, + "runner_stdout_excerpt": "PASS; ok github.com/thebtf/engram/tests/critical/recovery 65.258s" + }, + "refactor": { + "applied": false, + "reason": "The GREEN implementation is already the minimum single-orchestrator shape; no concrete duplication justifies another abstraction." + }, + "current_sources": [ + "https://www.postgresql.org/docs/17/app-pgdump.html", + "https://www.postgresql.org/docs/17/app-pgrestore.html", + "https://www.postgresql.org/docs/17/app-pg-dumpall.html" + ] +} diff --git a/.agent/reports/evidence/production-ready/ops-recovery/behavior-signal.md b/.agent/reports/evidence/production-ready/ops-recovery/behavior-signal.md new file mode 100644 index 00000000..ad51be97 --- /dev/null +++ b/.agent/reports/evidence/production-ready/ops-recovery/behavior-signal.md @@ -0,0 +1,51 @@ +# Behavioral Signal Declarations — OPS-RECOVERY-DATA-R1 + +Phase: 0 (Behavior-Confirming Tester) +Task: OPS-RECOVERY-DATA-R1 +Anchor: `.agent/plans/2026-07-10-engram-production-ready-master-plan.md:155,500,540` +Generated: 2026-07-13 + +## User Behaviors in Scope + +- UB-1: An operator can restore a supported Engram backup into a clean PostgreSQL 17 instance and users can still recall the same memories, rules, credentials, issues, documents, and indexed-code records. +- UB-2: An operator receives a failing result before unsafe or incomplete recovery can be mistaken for success, and a retry after cleanup succeeds without residue. + +## Test Declarations + +### TEST-001 + +Test ID: `tests/critical/recovery/postgres_backup_restore_test.go:TestOperatorCanRestorePostgresBackup_RecoversDurableEngramDataAndRejectsUnsafeRestores` +User behavior: UB-1 and UB-2 +Declaration type: A (Full Signal) +Signal name: user-task-completion-rate +Measurement window: one complete release-candidate recovery run +Target delta: 100% of required restored entity and negative-safety assertions pass +Measurement method: the critical test drives isolated PostgreSQL 17 source and target containers, restores real archives, queries restored application state, decrypts the restored credential with the original key, and verifies each unsafe-input scenario returns non-zero without a success marker or residual Docker resources +Evidence source: master-plan RECOVERY-DATA row and M7 backup/restore customer-readback gate +Critical suite: YES — `// @critical` annotation and `critical` build tag are present +Rename required: NO +AP violations: none + +## Critical Suite Gap Analysis + +- PostgreSQL logical recovery: COVERED by TEST-001 after GREEN; happy path, failure, retry, idempotency, and cleanup are part of the same real-container user flow. + +## Phase 0 Exit Status + +Tests in scope: 1 +User-facing tests: 1 +- With full signal (A): 1 +- CODE-CONTRACT-ONLY (B): 0 +- PROXY (C): 0 +- Undeclared: 0 +Non-user-facing tests: 0 +Critical-suite gaps: 0 +Rename-required flags: 0 +AP violations detected: none + +Behavioral verification tally: +- BEHAVIOR_VERIFIED: 1 feature +- CODE_PATH_COVERED: 0 features +- BEHAVIOR_UNCONFIRMED: 0 features + +Exit: PASS diff --git a/scripts/recovery/verify-postgres-backup-restore.ps1 b/scripts/recovery/verify-postgres-backup-restore.ps1 new file mode 100644 index 00000000..860e850b --- /dev/null +++ b/scripts/recovery/verify-postgres-backup-restore.ps1 @@ -0,0 +1,289 @@ +[CmdletBinding()] +param( + [string]$DockerCommand = "docker", + [string]$PostgresImage = $(if ($env:ENGRAM_RECOVERY_POSTGRES_IMAGE) { $env:ENGRAM_RECOVERY_POSTGRES_IMAGE } else { "engram:r2-accepted-65837cc7-postgres" }), + [string]$BaselineRef = "v6.42.0" +) + +$ErrorActionPreference = "Stop" +Set-StrictMode -Version Latest + +$repoRoot = (Resolve-Path (Join-Path $PSScriptRoot "..\..")).Path +$runID = [Guid]::NewGuid().ToString("N").Substring(0, 10) +$prefix = "engram-recovery-$runID" +$network = "$prefix-net" +$password = "recovery-${runID}-password" +$vaultKey = "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" +$wrongVaultKey = "abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789" +$containers = [System.Collections.Generic.List[string]]::new() +$volumes = [System.Collections.Generic.List[string]]::new() +$tempRoot = Join-Path ([IO.Path]::GetTempPath()) $prefix +$successMarker = Join-Path $tempRoot "SUCCESS" + +function Require-Command { + param([Parameter(Mandatory)][string]$Name) + if (-not (Get-Command $Name -ErrorAction SilentlyContinue)) { + throw "required dependency is unavailable: $Name" + } +} + +function Invoke-Native { + param( + [Parameter(Mandatory)][string]$FilePath, + [Parameter(Mandatory)][string[]]$Arguments, + [switch]$AllowFailure + ) + $output = & $FilePath @Arguments 2>&1 + $exitCode = $LASTEXITCODE + if ($exitCode -ne 0 -and -not $AllowFailure) { + throw "$FilePath $($Arguments -join ' ') failed with exit code ${exitCode}: $($output -join [Environment]::NewLine)" + } + [pscustomobject]@{ ExitCode = $exitCode; Output = ($output -join [Environment]::NewLine) } +} + +function Invoke-Docker { + param([Parameter(Mandatory)][string[]]$Arguments, [switch]$AllowFailure) + Invoke-Native -FilePath $DockerCommand -Arguments $Arguments -AllowFailure:$AllowFailure +} + +function Wait-Postgres { + param([Parameter(Mandatory)][string]$Name, [Parameter(Mandatory)][string]$User) + foreach ($attempt in 1..90) { + $probe = Invoke-Docker -Arguments @("exec", "-e", "PGPASSWORD=$password", $Name, "pg_isready", "-U", $User, "-d", "engram") -AllowFailure + if ($probe.ExitCode -eq 0) { + Start-Sleep -Milliseconds 500 + $stable = Invoke-Docker -Arguments @("exec", "-e", "PGPASSWORD=$password", $Name, "pg_isready", "-U", $User, "-d", "engram") -AllowFailure + if ($stable.ExitCode -eq 0) { return } + } + Start-Sleep -Milliseconds 500 + } + throw "PostgreSQL did not become ready: $Name" +} + +function Remove-Postgres { + param([Parameter(Mandatory)][string]$Name) + [void](Invoke-Docker -Arguments @("rm", "--force", $Name) -AllowFailure) + [void](Invoke-Docker -Arguments @("volume", "rm", "--force", "$Name-data") -AllowFailure) +} + +function Start-Postgres { + param([Parameter(Mandatory)][string]$Suffix, [Parameter(Mandatory)][string]$User) + $name = "$prefix-$Suffix" + $volume = "$name-data" + [void](Invoke-Docker -Arguments @("volume", "create", $volume)) + $volumes.Add($volume) + [void](Invoke-Docker -Arguments @( + "run", "--detach", "--name", $name, "--network", $network, + "--publish", "127.0.0.1::5432", + "--env", "POSTGRES_USER=$User", "--env", "POSTGRES_PASSWORD=$password", "--env", "POSTGRES_DB=engram", + "--volume", "${volume}:/var/lib/postgresql/data", + $PostgresImage + )) + $containers.Add($name) + Wait-Postgres -Name $name -User $User + $name +} + +function Get-DSN { + param([Parameter(Mandatory)][string]$Name, [Parameter(Mandatory)][string]$User) + $binding = (Invoke-Docker -Arguments @("port", $Name, "5432/tcp")).Output.Trim() + if ($binding -notmatch ":(?\d+)$") { throw "cannot parse PostgreSQL port binding: $binding" } + "postgres://${User}:${password}@127.0.0.1:$($Matches.port)/engram?sslmode=disable" +} + +function Invoke-Fixture { + param( + [Parameter(Mandatory)][string]$SourceRoot, + [Parameter(Mandatory)][ValidateSet("seed", "assert")][string]$Action, + [Parameter(Mandatory)][string]$DSN, + [Parameter(Mandatory)][string]$Key + ) + Push-Location $SourceRoot + try { + Invoke-Native -FilePath "go" -Arguments @( + "run", "./tests/fixtures/recovery/fixture", "-action", $Action, "-dsn", $DSN, "-key", $Key + ) + } finally { + Pop-Location + } +} + +function Assert-DatabaseEmpty { + param([Parameter(Mandatory)][string]$Name, [Parameter(Mandatory)][string]$User) + $query = "SELECT count(*) FROM pg_class c JOIN pg_namespace n ON n.oid=c.relnamespace WHERE n.nspname='public' AND c.relkind IN ('r','p','v','m','S');" + $count = (Invoke-Docker -Arguments @( + "exec", "-e", "PGPASSWORD=$password", $Name, "psql", "-X", "-At", "-v", "ON_ERROR_STOP=1", "-U", $User, "-d", "engram", "-c", $query + )).Output.Trim() + if ($count -ne "0") { throw "restore target must be empty; found $count user objects" } +} + +function Restore-Globals { + param([Parameter(Mandatory)][string]$Name, [Parameter(Mandatory)][string]$User) + [void](Invoke-Docker -Arguments @("cp", (Join-Path $tempRoot "globals.sql"), "${Name}:/tmp/globals.sql")) + [void](Invoke-Docker -Arguments @( + "exec", "-e", "PGPASSWORD=$password", $Name, + "psql", "-X", "-v", "ON_ERROR_STOP=1", "-U", $User, "-d", "postgres", "-f", "/tmp/globals.sql" + )) +} + +function Restore-Database { + param( + [Parameter(Mandatory)][string]$Name, + [Parameter(Mandatory)][string]$User, + [Parameter(Mandatory)][string]$Archive, + [switch]$Clean + ) + if (-not $Clean) { Assert-DatabaseEmpty -Name $Name -User $User } + [void](Invoke-Docker -Arguments @("cp", $Archive, "${Name}:/tmp/engram.dump")) + $arguments = @( + "exec", "-e", "PGPASSWORD=$password", $Name, + "pg_restore", "--exit-on-error", "--single-transaction" + ) + if ($Clean) { $arguments += @("--clean", "--if-exists") } + $arguments += @("-U", $User, "-d", "engram", "/tmp/engram.dump") + Invoke-Docker -Arguments $arguments +} + +function Remove-RecoveryResources { + $cleanupFailures = [System.Collections.Generic.List[string]]::new() + foreach ($container in $containers) { + $result = Invoke-Docker -Arguments @("rm", "--force", "--volumes", $container) -AllowFailure + if ($result.ExitCode -ne 0 -and $result.Output -notmatch "No such container") { $cleanupFailures.Add($result.Output) } + } + foreach ($volume in $volumes) { + $result = Invoke-Docker -Arguments @("volume", "rm", "--force", $volume) -AllowFailure + if ($result.ExitCode -ne 0 -and $result.Output -notmatch "no such volume") { $cleanupFailures.Add($result.Output) } + } + $result = Invoke-Docker -Arguments @("network", "rm", $network) -AllowFailure + if ($result.ExitCode -ne 0 -and $result.Output -notmatch "not found") { $cleanupFailures.Add($result.Output) } + if (Test-Path $tempRoot) { Remove-Item -LiteralPath $tempRoot -Recurse -Force } + + $containerResidue = (Invoke-Docker -Arguments @("ps", "--all", "--quiet", "--filter", "name=$prefix") -AllowFailure).Output.Trim() + $volumeResidue = (Invoke-Docker -Arguments @("volume", "ls", "--quiet", "--filter", "name=$prefix") -AllowFailure).Output.Trim() + $networkResidue = (Invoke-Docker -Arguments @("network", "ls", "--quiet", "--filter", "name=$prefix") -AllowFailure).Output.Trim() + if ($containerResidue -or $volumeResidue -or $networkResidue) { + $cleanupFailures.Add("Docker residue remains: containers=$containerResidue volumes=$volumeResidue networks=$networkResidue") + } + if ($cleanupFailures.Count -gt 0) { throw "recovery cleanup failed: $($cleanupFailures -join '; ')" } +} + +$completed = $false +try { + Write-Output "RECOVERY STAGE dependency-preflight" + Require-Command -Name $DockerCommand + Require-Command -Name "git" + Require-Command -Name "go" + Require-Command -Name "tar" + + $missingDependencyRejected = $false + try { Require-Command -Name "$prefix-deliberately-missing" } catch { $missingDependencyRejected = $true } + if (-not $missingDependencyRejected) { throw "missing dependency probe did not fail closed" } + + if ((Invoke-Docker -Arguments @("image", "inspect", $PostgresImage) -AllowFailure).ExitCode -ne 0) { + throw "PostgreSQL 17 recovery image is unavailable locally: $PostgresImage" + } + $major = (Invoke-Docker -Arguments @("run", "--rm", $PostgresImage, "postgres", "--version")).Output + if ($major -notmatch "PostgreSQL\) 17\.") { throw "recovery requires PostgreSQL 17, got: $major" } + + New-Item -ItemType Directory -Path $tempRoot | Out-Null + [void](Invoke-Docker -Arguments @("network", "create", $network)) + + Write-Output "RECOVERY STAGE baseline-upgrade-seed" + $source = Start-Postgres -Suffix "source" -User "source_admin" + $sourceDSN = Get-DSN -Name $source -User "source_admin" + + $legacyRoot = Join-Path $tempRoot "baseline-source" + New-Item -ItemType Directory -Path $legacyRoot | Out-Null + $legacyTar = Join-Path $tempRoot "baseline.tar" + [void](Invoke-Native -FilePath "git" -Arguments @("archive", "--format=tar", "--output=$legacyTar", $BaselineRef)) + [void](Invoke-Native -FilePath "tar" -Arguments @("-xf", $legacyTar, "-C", $legacyRoot)) + $legacyFixture = Join-Path $legacyRoot "tests\fixtures\recovery\fixture" + New-Item -ItemType Directory -Path $legacyFixture -Force | Out-Null + Copy-Item -LiteralPath (Join-Path $repoRoot "tests\fixtures\recovery\fixture\main.go") -Destination $legacyFixture + + [void](Invoke-Fixture -SourceRoot $legacyRoot -Action "seed" -DSN $sourceDSN -Key $vaultKey) + # Opening with the candidate source runs all pending migrations and proves the + # supported v6.42.0 -> candidate upgrade before the backup is taken. + [void](Invoke-Fixture -SourceRoot $repoRoot -Action "assert" -DSN $sourceDSN -Key $vaultKey) + + Write-Output "RECOVERY STAGE logical-backup" + [void](Invoke-Docker -Arguments @( + "exec", "-e", "PGPASSWORD=$password", $source, + "pg_dump", "-U", "source_admin", "-d", "engram", "--format=custom", "--file=/tmp/engram.dump" + )) + [void](Invoke-Docker -Arguments @( + "exec", "-e", "PGPASSWORD=$password", $source, + "pg_dumpall", "-U", "source_admin", "--globals-only", "--no-role-passwords", "--file=/tmp/globals.sql" + )) + [void](Invoke-Docker -Arguments @("cp", "${source}:/tmp/engram.dump", (Join-Path $tempRoot "engram.dump"))) + [void](Invoke-Docker -Arguments @("cp", "${source}:/tmp/globals.sql", (Join-Path $tempRoot "globals.sql"))) + + $corruptArchive = Join-Path $tempRoot "engram-corrupt.dump" + Copy-Item -LiteralPath (Join-Path $tempRoot "engram.dump") -Destination $corruptArchive + $stream = [IO.File]::Open($corruptArchive, [IO.FileMode]::Open, [IO.FileAccess]::Write) + try { $stream.SetLength(128) } finally { $stream.Dispose() } + [void](Invoke-Docker -Arguments @("cp", $corruptArchive, "${source}:/tmp/engram-corrupt.dump")) + $corruptProbe = Invoke-Docker -Arguments @("exec", $source, "pg_restore", "--list", "/tmp/engram-corrupt.dump") -AllowFailure + if ($corruptProbe.ExitCode -eq 0) { throw "corrupted archive was accepted" } + Remove-Postgres -Name $source + + Write-Output "RECOVERY STAGE nonempty-target-negative" + $nonEmpty = Start-Postgres -Suffix "nonempty" -User "target_admin" + Restore-Globals -Name $nonEmpty -User "target_admin" + [void](Invoke-Docker -Arguments @( + "exec", "-e", "PGPASSWORD=$password", $nonEmpty, + "psql", "-X", "-v", "ON_ERROR_STOP=1", "-U", "target_admin", "-d", "engram", "-c", "CREATE TABLE must_block_restore(id integer);" + )) + $nonEmptyRejected = $false + try { [void](Restore-Database -Name $nonEmpty -User "target_admin" -Archive (Join-Path $tempRoot "engram.dump")) } catch { $nonEmptyRejected = $true } + if (-not $nonEmptyRejected) { throw "non-empty target was not rejected" } + Remove-Postgres -Name $nonEmpty + + Write-Output "RECOVERY STAGE corrupt-archive-negative" + $corruptTarget = Start-Postgres -Suffix "corrupt" -User "target_admin" + Restore-Globals -Name $corruptTarget -User "target_admin" + $corruptRejected = $false + try { [void](Restore-Database -Name $corruptTarget -User "target_admin" -Archive $corruptArchive) } catch { $corruptRejected = $true } + if (-not $corruptRejected) { throw "corrupted restore was not rejected" } + Assert-DatabaseEmpty -Name $corruptTarget -User "target_admin" + Remove-Postgres -Name $corruptTarget + + Write-Output "RECOVERY STAGE interrupted-restore-negative" + $target = Start-Postgres -Suffix "target" -User "target_admin" + Restore-Globals -Name $target -User "target_admin" + [void](Invoke-Docker -Arguments @("cp", (Join-Path $tempRoot "engram.dump"), "${target}:/tmp/engram.dump")) + + $restoreArgs = @( + "exec", "-e", "PGPASSWORD=$password", $target, + "pg_restore", "--exit-on-error", "--single-transaction", "-U", "target_admin", "-d", "engram", "/tmp/engram.dump" + ) + $restoreProcess = Start-Process -FilePath $DockerCommand -ArgumentList $restoreArgs -PassThru -NoNewWindow + Start-Sleep -Milliseconds 25 + [void](Invoke-Docker -Arguments @("stop", "--time", "0", $target) -AllowFailure) + $restoreProcess.WaitForExit() + [void](Invoke-Docker -Arguments @("start", $target)) + Wait-Postgres -Name $target -User "target_admin" + Start-Sleep -Milliseconds 500 + Assert-DatabaseEmpty -Name $target -User "target_admin" + + Write-Output "RECOVERY STAGE clean-restore-readback" + [void](Restore-Database -Name $target -User "target_admin" -Archive (Join-Path $tempRoot "engram.dump")) + $targetDSN = Get-DSN -Name $target -User "target_admin" + [void](Invoke-Fixture -SourceRoot $repoRoot -Action "assert" -DSN $targetDSN -Key $vaultKey) + + $wrongKeyRejected = $false + try { [void](Invoke-Fixture -SourceRoot $repoRoot -Action "assert" -DSN $targetDSN -Key $wrongVaultKey) } catch { $wrongKeyRejected = $true } + if (-not $wrongKeyRejected) { throw "wrong vault key was accepted" } + + Write-Output "RECOVERY STAGE idempotent-clean-retry" + [void](Restore-Database -Name $target -User "target_admin" -Archive (Join-Path $tempRoot "engram.dump") -Clean) + [void](Invoke-Fixture -SourceRoot $repoRoot -Action "assert" -DSN $targetDSN -Key $vaultKey) + + Set-Content -LiteralPath $successMarker -Value "pass" -NoNewline + $completed = $true +} finally { + Remove-RecoveryResources +} + +if (-not $completed) { throw "recovery flow did not reach success" } +Write-Output "RECOVERY PASS: baseline=$BaselineRef candidate=$(git -C $repoRoot rev-parse HEAD) postgres_image=$PostgresImage" diff --git a/tests/critical/recovery/postgres_backup_restore_test.go b/tests/critical/recovery/postgres_backup_restore_test.go new file mode 100644 index 00000000..5b61521a --- /dev/null +++ b/tests/critical/recovery/postgres_backup_restore_test.go @@ -0,0 +1,35 @@ +//go:build critical +// +build critical + +// Package recovery_test contains @critical recovery tests. +package recovery_test + +import ( + "os/exec" + "path/filepath" + "runtime" + "testing" +) + +// @critical +func TestOperatorCanRestorePostgresBackup_RecoversDurableEngramDataAndRejectsUnsafeRestores(t *testing.T) { + if _, err := exec.LookPath("docker"); err != nil { + t.Fatalf("recovery requires docker: %v", err) + } + if _, err := exec.LookPath("pwsh"); err != nil { + t.Fatalf("recovery requires pwsh: %v", err) + } + + _, currentFile, _, ok := runtime.Caller(0) + if !ok { + t.Fatal("resolve recovery test path") + } + repoRoot := filepath.Clean(filepath.Join(filepath.Dir(currentFile), "..", "..", "..")) + script := filepath.Join(repoRoot, "scripts", "recovery", "verify-postgres-backup-restore.ps1") + cmd := exec.Command("pwsh", "-NoLogo", "-NoProfile", "-File", script) + cmd.Dir = repoRoot + output, err := cmd.CombinedOutput() + if err != nil { + t.Fatalf("operator recovery flow failed: %v\n%s", err, output) + } +} diff --git a/tests/fixtures/recovery/fixture/main.go b/tests/fixtures/recovery/fixture/main.go new file mode 100644 index 00000000..cd0e9504 --- /dev/null +++ b/tests/fixtures/recovery/fixture/main.go @@ -0,0 +1,197 @@ +package main + +import ( + "context" + "crypto/sha256" + "encoding/hex" + "flag" + "fmt" + "os" + "strings" + + "gorm.io/gorm/logger" + + "github.com/thebtf/engram/internal/config" + engramcrypto "github.com/thebtf/engram/internal/crypto" + engramgorm "github.com/thebtf/engram/internal/db/gorm" + "github.com/thebtf/engram/pkg/models" +) + +const ( + project = "recovery-fixture" + memoryContent = "Durable recovery memory sentinel remains recallable after restore" + ruleContent = "Always preserve the recovery sentinel during PostgreSQL recovery" + credentialKey = "recovery.api_key" + credentialSecret = "recovery-secret-value" + documentBody = "Recovery document sentinel body" + issueTitle = "Recovery issue sentinel" + codeContent = "func RecoverySentinel() string { return \"restored\" }" +) + +func main() { + action := flag.String("action", "assert", "seed or assert") + dsn := flag.String("dsn", "", "PostgreSQL DSN") + key := flag.String("key", "", "64-hex-character AES-256 vault key") + flag.Parse() + + if *dsn == "" || *key == "" { + fatalf("-dsn and -key are required") + } + + store, err := engramgorm.NewStore(engramgorm.Config{DSN: *dsn, MaxConns: 2, LogLevel: logger.Silent}) + if err != nil { + fatalf("open migrated Engram store: %v", err) + } + defer func() { _ = store.Close() }() + + vault, err := engramcrypto.NewVault(&config.Config{EncryptionKey: *key}) + if err != nil { + fatalf("open vault: %v", err) + } + + ctx := context.Background() + switch *action { + case "seed": + err = seed(ctx, store, vault) + case "assert": + err = assertRestored(ctx, store, vault) + default: + err = fmt.Errorf("unsupported action %q", *action) + } + if err != nil { + fatalf("%s recovery fixture: %v", *action, err) + } + + fmt.Printf("{\"action\":%q,\"status\":\"pass\",\"project\":%q}\n", *action, project) +} + +func seed(ctx context.Context, store *engramgorm.Store, vault *engramcrypto.Vault) error { + memoryStore := engramgorm.NewMemoryStore(store) + if _, err := memoryStore.Create(ctx, &models.Memory{ + Project: project, Content: memoryContent, Tags: []string{"recovery", "backup"}, + SourceAgent: "recovery-fixture", PrivacyScope: "project", + }); err != nil { + return fmt.Errorf("seed memory: %w", err) + } + + projectCopy := project + if _, err := engramgorm.NewBehavioralRulesStore(store).Create(ctx, &models.BehavioralRule{ + Project: &projectCopy, Content: ruleContent, Priority: 100, Enabled: true, EditedBy: "recovery-fixture", + }); err != nil { + return fmt.Errorf("seed behavioral rule: %w", err) + } + + ciphertext, err := vault.Encrypt(credentialSecret) + if err != nil { + return fmt.Errorf("encrypt credential: %w", err) + } + if _, err := engramgorm.NewCredentialStore(store).Create(ctx, &models.Credential{ + Project: project, Key: credentialKey, EncryptedSecret: ciphertext, + EncryptionKeyFingerprint: vault.Fingerprint(), Scope: "project", EditedBy: "recovery-fixture", + }); err != nil { + return fmt.Errorf("seed credential: %w", err) + } + + issueStore := engramgorm.NewIssueStore(store.DB) + if _, err := issueStore.CreateIssue(ctx, &engramgorm.Issue{ + Title: issueTitle, Body: "Recovery issue body", Status: "open", Priority: "high", Type: "task", + SourceProject: project, TargetProject: project, SourceAgent: "recovery-fixture", + }); err != nil { + return fmt.Errorf("seed issue: %w", err) + } + + if _, err := engramgorm.NewDocumentStore(store).UpsertDocument( + ctx, project, "recovery.md", "Recovery document", documentBody, + ); err != nil { + return fmt.Errorf("seed document: %w", err) + } + + digest := sha256.Sum256([]byte(codeContent)) + if err := engramgorm.NewCodeChunkStore(store.DB).Upsert(ctx, &engramgorm.CodeChunk{ + ProjectID: project, FilePath: "recovery.go", Language: "go", ChunkType: "function", + Content: codeContent, ContentSHA256: hex.EncodeToString(digest[:]), IndexSessionID: "recovery-index-session", + ByteStart: 0, ByteEnd: len(codeContent), + }); err != nil { + return fmt.Errorf("seed code chunk: %w", err) + } + + statements := []string{ + `DO $$ BEGIN IF NOT EXISTS (SELECT 1 FROM pg_roles WHERE rolname = 'engram_recovery_reader') THEN CREATE ROLE engram_recovery_reader NOLOGIN; END IF; END $$`, + `GRANT CONNECT ON DATABASE engram TO engram_recovery_reader`, + `GRANT USAGE ON SCHEMA public TO engram_recovery_reader`, + `GRANT SELECT ON ALL TABLES IN SCHEMA public TO engram_recovery_reader`, + `ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO engram_recovery_reader`, + `CREATE TABLE IF NOT EXISTS recovery_payload AS SELECT g AS id, repeat('recovery-payload-', 64) || g::text AS body FROM generate_series(1, 50000) AS g`, + } + for _, statement := range statements { + if err := store.DB.WithContext(ctx).Exec(statement).Error; err != nil { + return fmt.Errorf("seed recovery SQL: %w", err) + } + } + return nil +} + +func assertRestored(ctx context.Context, store *engramgorm.Store, vault *engramcrypto.Vault) error { + memories, err := engramgorm.NewMemoryStore(store).SearchFTS(ctx, project, "durable recovery sentinel", 10) + if err != nil { + return fmt.Errorf("recall memory: %w", err) + } + if len(memories) != 1 || memories[0].Content != memoryContent { + return fmt.Errorf("memory recall mismatch: got %d matches", len(memories)) + } + + projectCopy := project + rules, err := engramgorm.NewBehavioralRulesStore(store).ListEnabled(ctx, &projectCopy, 10) + if err != nil || len(rules) != 1 || rules[0].Content != ruleContent { + return fmt.Errorf("behavioral rule mismatch: count=%d err=%v", len(rules), err) + } + + credential, err := engramgorm.NewCredentialStore(store).Get(ctx, project, credentialKey) + if err != nil { + return fmt.Errorf("read credential: %w", err) + } + if !vault.MatchesFingerprint(credential.EncryptionKeyFingerprint) { + return fmt.Errorf("vault key fingerprint mismatch") + } + plaintext, err := vault.Decrypt(credential.EncryptedSecret) + if err != nil || plaintext != credentialSecret { + return fmt.Errorf("decrypt credential: plaintext match=%t err=%v", plaintext == credentialSecret, err) + } + + issues, total, err := engramgorm.NewIssueStore(store.DB).ListIssues(ctx, project, []string{"open"}, 10, 0) + if err != nil || total != 1 || len(issues) != 1 || issues[0].Title != issueTitle { + return fmt.Errorf("issue mismatch: total=%d count=%d err=%v", total, len(issues), err) + } + + documentStore := engramgorm.NewDocumentStore(store) + document, err := documentStore.GetDocument(ctx, project, "recovery.md") + if err != nil || document == nil || !document.Hash.Valid { + return fmt.Errorf("document metadata mismatch: document=%v err=%v", document, err) + } + content, err := documentStore.GetContent(ctx, document.Hash.String) + if err != nil || content == nil || content.Doc != documentBody { + return fmt.Errorf("document content mismatch: content=%v err=%v", content, err) + } + + code, err := engramgorm.NewCodeChunkStore(store.DB).SearchCodeFTS(ctx, project, "RecoverySentinel", 10) + if err != nil || len(code) != 1 || !strings.Contains(code[0].Content, "RecoverySentinel") { + return fmt.Errorf("code index mismatch: count=%d err=%v", len(code), err) + } + + var payloadCount int64 + if err := store.DB.WithContext(ctx).Table("recovery_payload").Count(&payloadCount).Error; err != nil || payloadCount != 50000 { + return fmt.Errorf("recovery payload mismatch: count=%d err=%v", payloadCount, err) + } + var hasPrivilege bool + if err := store.DB.WithContext(ctx).Raw( + `SELECT has_table_privilege('engram_recovery_reader', 'public.memories', 'SELECT')`, + ).Scan(&hasPrivilege).Error; err != nil || !hasPrivilege { + return fmt.Errorf("restored reader role/grant mismatch: value=%t err=%v", hasPrivilege, err) + } + return nil +} + +func fatalf(format string, args ...any) { + fmt.Fprintf(os.Stderr, format+"\n", args...) + os.Exit(1) +} From 953e006d191ae2afe30c60415cddc37db7209293 Mon Sep 17 00:00:00 2001 From: Kirill Turanskiy Date: Mon, 13 Jul 2026 01:16:32 +0300 Subject: [PATCH 071/111] fix(observability): flush fatal startup diagnostics --- cmd/engram-server/main.go | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/cmd/engram-server/main.go b/cmd/engram-server/main.go index 479edb0c..c83f4692 100644 --- a/cmd/engram-server/main.go +++ b/cmd/engram-server/main.go @@ -63,6 +63,7 @@ func main() { svc, err := worker.NewService(Version, logRing) if err != nil { obs.RecordRuntimeEvent(context.Background(), "worker", "initialization_error") + flushTelemetry(telemetry) log.Fatal().Err(err).Msg("Failed to create service") } obs.RecordRuntimeEvent(context.Background(), "worker", "initialized") @@ -70,6 +71,7 @@ func main() { // Bring up listeners and background workers. if err := svc.Start(); err != nil { obs.RecordRuntimeEvent(context.Background(), "server", "start_error") + flushTelemetry(telemetry) log.Fatal().Err(err).Msg("Failed to start service") } obs.RecordRuntimeEvent(context.Background(), "server", "started") @@ -100,3 +102,11 @@ func main() { log.Info().Msg("Worker shutdown complete") } + +func flushTelemetry(telemetry *obs.Runtime) { + ctx, cancel := context.WithTimeout(context.Background(), 2*time.Second) + defer cancel() + if err := telemetry.ForceFlush(ctx); err != nil { + log.Warn().Msg("Observability flush failed; check collector availability") + } +} From 88fb24ae7b6fa3479c064eca984509460c528ecc Mon Sep 17 00:00:00 2001 From: Kirill Turanskiy Date: Mon, 13 Jul 2026 01:19:52 +0300 Subject: [PATCH 072/111] docs(mb1): sync migration-derived data model --- docs/arch/DATA_MODEL.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/docs/arch/DATA_MODEL.md b/docs/arch/DATA_MODEL.md index 7621135d..1ce8844c 100644 --- a/docs/arch/DATA_MODEL.md +++ b/docs/arch/DATA_MODEL.md @@ -53,9 +53,9 @@ The list below is generated. Do not edit it by hand; run `go run ./tools/gen-dat Generated from `internal/db/gorm/migrations.go`. -Migration count: **137**. +Migration count: **136**. -Live table count: **37**. +Live table count: **36**. | Table | Creating migration | | --- | --- | @@ -92,7 +92,6 @@ Live table count: **37**. | `code_chunks` | `139_code_chunks` | | `code_index_sessions` | `140_code_index_sessions` | | `model_settings` | `143_model_settings` | -| `rule_injection_events` | `146_rule_injection_events` | | `agent_project_state` | `152_agent_state_plane` | | `agent_session_state` | `152_agent_state_plane` | | `attention_events` | `158_attention_events` | From f121f903d7005b9150b9b6dfb918d5d0ccc9ca9e Mon Sep 17 00:00:00 2001 From: Kirill Turanskiy Date: Mon, 13 Jul 2026 01:22:51 +0300 Subject: [PATCH 073/111] test(recovery): harden freeze evidence --- .../OPS-RECOVERY-DATA-R1.tdd.json | 14 ++++ .../ops-recovery/freeze-summary.json | 79 +++++++++++++++++++ .../verify-postgres-backup-restore.ps1 | 25 ++++-- 3 files changed, 113 insertions(+), 5 deletions(-) create mode 100644 .agent/reports/evidence/production-ready/ops-recovery/freeze-summary.json diff --git a/.agent/reports/evidence/production-ready/ops-recovery/OPS-RECOVERY-DATA-R1.tdd.json b/.agent/reports/evidence/production-ready/ops-recovery/OPS-RECOVERY-DATA-R1.tdd.json index f5d4d59c..9d7b627f 100644 --- a/.agent/reports/evidence/production-ready/ops-recovery/OPS-RECOVERY-DATA-R1.tdd.json +++ b/.agent/reports/evidence/production-ready/ops-recovery/OPS-RECOVERY-DATA-R1.tdd.json @@ -20,6 +20,20 @@ "applied": false, "reason": "The GREEN implementation is already the minimum single-orchestrator shape; no concrete duplication justifies another abstraction." }, + "prove_it": { + "substituted_files": [ + "scripts/recovery/verify-postgres-backup-restore.ps1" + ], + "substituted_function": "Restore-Database", + "failed_tests": 1, + "runner_stdout_excerpt": "non-empty target was not rejected; FAIL; package exit 1", + "reverted_at": "2026-07-12T22:18:47.2876176Z", + "post_revert_green": "PASS; 1 passed, 0 failed, 0 skipped; 56.305s" + }, + "coverage": { + "status": "NOT_APPLICABLE", + "reason": "The protected implementation is a PowerShell/Docker integration harness; Go statement coverage has no production statements in this test-only package. Behavioral and anti-stub proof are the load-bearing gates." + }, "current_sources": [ "https://www.postgresql.org/docs/17/app-pgdump.html", "https://www.postgresql.org/docs/17/app-pgrestore.html", diff --git a/.agent/reports/evidence/production-ready/ops-recovery/freeze-summary.json b/.agent/reports/evidence/production-ready/ops-recovery/freeze-summary.json new file mode 100644 index 00000000..97e70abc --- /dev/null +++ b/.agent/reports/evidence/production-ready/ops-recovery/freeze-summary.json @@ -0,0 +1,79 @@ +{ + "schema_version": 1, + "slice": "OPS-RECOVERY-DATA-R1", + "role": "maker", + "observed_at": "2026-07-12T22:22:03.1960978Z", + "base": "fef455bcf640f849c2d40c9bc26a459b5593e10a", + "baseline_release": { + "ref": "v6.42.0", + "commit": "668eead36e3e75e1923cdd08acbc538ccbe42025" + }, + "postgres": { + "major": 17, + "image": "engram:r2-accepted-65837cc7-postgres", + "image_id": "sha256:78780f7a04ce28fcdd33ff9fcd3b4de400bc510e39a06ff3223a164dbdb4eee7" + }, + "behavioral_result": "BEHAVIOR_VERIFIED", + "scenarios": { + "v6_42_to_candidate_migrations": "PASS", + "custom_pg_dump_and_single_transaction_restore": "PASS", + "globals_roles_and_grants": "PASS", + "memory_customer_recall": "PASS", + "behavioral_rule_readback": "PASS", + "credential_decrypt": "PASS", + "issue_readback": "PASS", + "document_content_readback": "PASS", + "code_index_search": "PASS", + "corrupt_archive_rejected": "PASS", + "wrong_vault_key_rejected": "PASS", + "interrupted_restore_atomic_and_retryable": "PASS", + "nonempty_target_rejected": "PASS", + "clean_retry_idempotent": "PASS", + "missing_dependency_rejected": "PASS", + "success_and_failure_cleanup": "PASS" + }, + "gates": [ + { + "command": "go test -tags=critical ./tests/critical/recovery -run '^TestOperatorCanRestorePostgresBackup_RecoversDurableEngramDataAndRejectsUnsafeRestores$' -count=1 -v -timeout=30m", + "passed": 1, + "failed": 0, + "skipped": 0, + "elapsed": "77.171s" + }, + { + "command": "PowerShell parser; go test fixture; go vet fixture and critical package", + "status": "PASS" + }, + { + "command": "gitleaks detect --no-git --source --redact", + "status": "PASS", + "findings": 0 + }, + { + "command": "GOFLAGS=-tags=critical govulncheck ./tests/critical/recovery ./tests/fixtures/recovery/fixture", + "status": "PASS", + "reachable_vulnerabilities": 0 + }, + { + "command": "Docker prefix residue inventory", + "status": "PASS", + "containers": 0, + "volumes": 0, + "networks": 0 + } + ], + "current_sources": [ + "https://www.postgresql.org/docs/17/app-pgdump.html", + "https://www.postgresql.org/docs/17/app-pgrestore.html", + "https://www.postgresql.org/docs/17/app-pg-dumpall.html" + ], + "toolchain": { + "go": "go1.25.12 windows/amd64", + "powershell": "7.6.1", + "docker_server": "29.1.3", + "gitleaks": "8.30.0", + "govulncheck": "v1.2.0", + "govulndb_updated": "2026-07-08T17:05:00Z" + }, + "finish_state": "review-needed" +} diff --git a/scripts/recovery/verify-postgres-backup-restore.ps1 b/scripts/recovery/verify-postgres-backup-restore.ps1 index 860e850b..42129632 100644 --- a/scripts/recovery/verify-postgres-backup-restore.ps1 +++ b/scripts/recovery/verify-postgres-backup-restore.ps1 @@ -13,12 +13,27 @@ $runID = [Guid]::NewGuid().ToString("N").Substring(0, 10) $prefix = "engram-recovery-$runID" $network = "$prefix-net" $password = "recovery-${runID}-password" -$vaultKey = "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef" -$wrongVaultKey = "abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789" $containers = [System.Collections.Generic.List[string]]::new() $volumes = [System.Collections.Generic.List[string]]::new() $tempRoot = Join-Path ([IO.Path]::GetTempPath()) $prefix -$successMarker = Join-Path $tempRoot "SUCCESS" + +function New-RandomHexKey { + $bytes = [byte[]]::new(32) + [Security.Cryptography.RandomNumberGenerator]::Fill($bytes) + [Convert]::ToHexString($bytes).ToLowerInvariant() +} + +$vaultKey = New-RandomHexKey +$wrongVaultKey = New-RandomHexKey + +function Protect-RecoveryOutput { + param([AllowEmptyString()][string]$Text) + $redacted = $Text + foreach ($secret in @($password, $vaultKey, $wrongVaultKey)) { + if ($secret) { $redacted = $redacted.Replace($secret, "") } + } + $redacted +} function Require-Command { param([Parameter(Mandatory)][string]$Name) @@ -36,7 +51,8 @@ function Invoke-Native { $output = & $FilePath @Arguments 2>&1 $exitCode = $LASTEXITCODE if ($exitCode -ne 0 -and -not $AllowFailure) { - throw "$FilePath $($Arguments -join ' ') failed with exit code ${exitCode}: $($output -join [Environment]::NewLine)" + $failure = "$FilePath $($Arguments -join ' ') failed with exit code ${exitCode}: $($output -join [Environment]::NewLine)" + throw (Protect-RecoveryOutput -Text $failure) } [pscustomobject]@{ ExitCode = $exitCode; Output = ($output -join [Environment]::NewLine) } } @@ -279,7 +295,6 @@ try { [void](Restore-Database -Name $target -User "target_admin" -Archive (Join-Path $tempRoot "engram.dump") -Clean) [void](Invoke-Fixture -SourceRoot $repoRoot -Action "assert" -DSN $targetDSN -Key $vaultKey) - Set-Content -LiteralPath $successMarker -Value "pass" -NoNewline $completed = $true } finally { Remove-RecoveryResources From 937a2c9cb7dd1ca8f06cb98c18670124990a4ea7 Mon Sep 17 00:00:00 2001 From: Kirill Turanskiy Date: Mon, 13 Jul 2026 01:39:35 +0300 Subject: [PATCH 074/111] fix(operator-console): report graph runtime truth Derive the overview badge from the live graph flag, keep pending and error states non-live, disable gated controls, and expose explicit accessible form associations and status announcements. --- .../composables/useOperatorOverview.ts | 16 +++- apps/operator-console/i18n/locales/en.json | 14 +++- apps/operator-console/i18n/locales/ru.json | 14 +++- apps/operator-console/i18n/locales/zh.json | 14 +++- apps/operator-console/pages/graph.vue | 81 ++++++++++--------- apps/operator-console/pages/index.vue | 15 +++- scripts/operator-console-smoke/graph.ps1 | 54 +++++++++++++ scripts/operator-console-smoke/overview.ps1 | 12 ++- 8 files changed, 172 insertions(+), 48 deletions(-) create mode 100644 scripts/operator-console-smoke/graph.ps1 diff --git a/apps/operator-console/composables/useOperatorOverview.ts b/apps/operator-console/composables/useOperatorOverview.ts index 3e5eb9d4..a7fd8713 100644 --- a/apps/operator-console/composables/useOperatorOverview.ts +++ b/apps/operator-console/composables/useOperatorOverview.ts @@ -1,5 +1,5 @@ import { computed } from 'vue' -import { unsupportedOperatorAction } from './useOperatorApi' +import { operatorFetchJson, unsupportedOperatorAction } from './useOperatorApi' import { useCreds, useIssuesState, useModelsState, useProjects, useRules } from './useMockData' import { useOperatorMemoryLab } from './useOperatorMemoryLab' import { useOperatorQueue } from './useOperatorQueue' @@ -17,6 +17,19 @@ export function useOperatorOverview() { const models = computed(() => modelsState.rows.value) const queue = useOperatorQueue() const shell = useOperatorShellStatus() + const graphFlagState = useState<'pending' | 'enabled' | 'disabled' | 'error'>('live:overview:graph-flag', () => 'pending') + const graphFlagStarted = useState('live:overview:graph-flag:started', () => false) + + if (import.meta.client && !graphFlagStarted.value) { + graphFlagStarted.value = true + void operatorFetchJson<{ flags?: Record }>('/api/flags', undefined, 'operator-overview-graph-flag') + .then((payload) => { + graphFlagState.value = payload?.flags?.ENGRAM_GRAPH_ENABLED === true ? 'enabled' : 'disabled' + }) + .catch(() => { + graphFlagState.value = 'error' + }) + } const memoryActive = computed(() => memories.filter((memory) => !memory.noise).length) const memoryNoise = computed(() => memories.filter((memory) => memory.noise).length) @@ -73,5 +86,6 @@ export function useOperatorOverview() { modelStandby, modelDegraded, accessGap, + graphFlagState, } } diff --git a/apps/operator-console/i18n/locales/en.json b/apps/operator-console/i18n/locales/en.json index 60926737..503345fe 100644 --- a/apps/operator-console/i18n/locales/en.json +++ b/apps/operator-console/i18n/locales/en.json @@ -180,7 +180,12 @@ "memory": { "sub": "{active} active · {noise} in noise" }, "queue": { "sub": "memory candidates waiting for a decision" }, "noise": { "sub": "share of noisy injections" }, - "graph": { "sub": "concept graph and transitions" }, + "graph": { + "sub": "concept graph and transitions", + "disabled": "disabled", + "pending": "checking flag", + "error": "unavailable" + }, "books": { "sub": "author-domain and terminology ingest" }, "rules": { "sub": "operator always-inject directives" }, "issues": { @@ -748,6 +753,10 @@ "filters": { "project": "Graph project" }, + "honesty": { + "pending": "checking", + "error": "unavailable" + }, "state": { "pending": "Loading graph data…", "error": "Could not load graph data: {message}", @@ -815,7 +824,8 @@ "deleteNodeCascade": "Cascade through connected edges", "runTraverse": "Run traverse", "findPath": "Find path", - "running": "Running…" + "running": "Running…", + "closeNotice": "Close notification" }, "sections": { "nodes": "Project nodes", diff --git a/apps/operator-console/i18n/locales/ru.json b/apps/operator-console/i18n/locales/ru.json index d2109608..0464f7d6 100644 --- a/apps/operator-console/i18n/locales/ru.json +++ b/apps/operator-console/i18n/locales/ru.json @@ -180,7 +180,12 @@ "memory": { "sub": "{active} активных · {noise} в шуме" }, "queue": { "sub": "кандидаты в память, ждут решения" }, "noise": { "sub": "доля шумовых инъекций" }, - "graph": { "sub": "граф концептов и переходов" }, + "graph": { + "sub": "граф концептов и переходов", + "disabled": "выключено", + "pending": "проверяем флаг", + "error": "недоступно" + }, "books": { "sub": "загрузка авторских доменов и терминов" }, "rules": { "sub": "always-inject директивы оператора" }, "issues": { @@ -748,6 +753,10 @@ "filters": { "project": "Проект графа" }, + "honesty": { + "pending": "проверяем", + "error": "недоступно" + }, "state": { "pending": "Загружаем граф…", "error": "Не удалось загрузить граф: {message}", @@ -815,7 +824,8 @@ "deleteNodeCascade": "Каскадно удалить связанные ребра", "runTraverse": "Запустить traverse", "findPath": "Найти путь", - "running": "Выполняем…" + "running": "Выполняем…", + "closeNotice": "Закрыть уведомление" }, "sections": { "nodes": "Узлы проекта", diff --git a/apps/operator-console/i18n/locales/zh.json b/apps/operator-console/i18n/locales/zh.json index 5591a4a4..37cceba6 100644 --- a/apps/operator-console/i18n/locales/zh.json +++ b/apps/operator-console/i18n/locales/zh.json @@ -180,7 +180,12 @@ "memory": { "sub": "{active} 条活跃 · {noise} 条噪声" }, "queue": { "sub": "等待决策的记忆候选" }, "noise": { "sub": "噪声注入占比" }, - "graph": { "sub": "概念图和转移关系" }, + "graph": { + "sub": "概念图和转移关系", + "disabled": "已禁用", + "pending": "正在检查 flag", + "error": "不可用" + }, "books": { "sub": "作者领域和术语导入" }, "rules": { "sub": "操作员 always-inject 指令" }, "issues": { @@ -748,6 +753,10 @@ "filters": { "project": "图谱项目" }, + "honesty": { + "pending": "正在检查", + "error": "不可用" + }, "state": { "pending": "正在加载图谱数据…", "error": "无法加载图谱数据:{message}", @@ -815,7 +824,8 @@ "deleteNodeCascade": "级联删除关联边", "runTraverse": "运行 traverse", "findPath": "查找路径", - "running": "执行中…" + "running": "执行中…", + "closeNotice": "关闭通知" }, "sections": { "nodes": "项目节点", diff --git a/apps/operator-console/pages/graph.vue b/apps/operator-console/pages/graph.vue index 9071d14c..db4b2a9f 100644 --- a/apps/operator-console/pages/graph.vue +++ b/apps/operator-console/pages/graph.vue @@ -68,8 +68,17 @@ const deleteCascade = ref(false) const selectedNode = computed(() => nodes.find((node) => node.id === selectedNodeID.value) || null) const nodeIndex = computed>(() => Object.fromEntries(nodes.map((node) => [node.id, node]))) -const graphHonesty = computed(() => nodesState.value.kind === 'gated' ? 'dormant' : 'live') -const graphDisabled = computed(() => nodesState.value.kind === 'gated' || nodesState.value.kind === 'pending') +const graphHonesty = computed(() => { + if (nodesState.value.kind === 'gated') return 'dormant' + if (nodesState.value.kind === 'live' || nodesState.value.kind === 'empty') return 'live' + return 'stale' +}) +const graphHonestyLabel = computed(() => { + if (nodesState.value.kind === 'pending') return t('graphPage.honesty.pending') + if (nodesState.value.kind === 'error') return t('graphPage.honesty.error') + return undefined +}) +const graphDisabled = computed(() => nodesState.value.kind !== 'live' && nodesState.value.kind !== 'empty') const writeDisabled = graphDisabled const selectedDegree = computed(() => connectedEdges.length) const typedError = computed(() => lastMutationError.value) @@ -238,7 +247,7 @@ async function runFindPath() {

{{ t('graphPage.title') }}

{{ t('graphPage.subtitle') }}

- +
@@ -262,9 +271,9 @@ async function runFindPath() {
-
-
+
{{ stateMessage() }}
-
+
{{ notice.text }} - +
-
+